184 lines
6.0 KiB
JavaScript
184 lines
6.0 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.SessionStore = void 0;
|
|
exports.defaultCookies = defaultCookies;
|
|
function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
|
|
function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
|
|
function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
|
|
function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
|
|
function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
|
|
function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
|
|
const ALLOWED_COOKIE_SIZE = 4096;
|
|
const ESTIMATED_EMPTY_COOKIE_SIZE = 163;
|
|
const CHUNK_SIZE = ALLOWED_COOKIE_SIZE - ESTIMATED_EMPTY_COOKIE_SIZE;
|
|
function defaultCookies(useSecureCookies) {
|
|
const cookiePrefix = useSecureCookies ? "__Secure-" : "";
|
|
return {
|
|
sessionToken: {
|
|
name: `${cookiePrefix}next-auth.session-token`,
|
|
options: {
|
|
httpOnly: true,
|
|
sameSite: "lax",
|
|
path: "/",
|
|
secure: useSecureCookies
|
|
}
|
|
},
|
|
callbackUrl: {
|
|
name: `${cookiePrefix}next-auth.callback-url`,
|
|
options: {
|
|
httpOnly: true,
|
|
sameSite: "lax",
|
|
path: "/",
|
|
secure: useSecureCookies
|
|
}
|
|
},
|
|
csrfToken: {
|
|
name: `${useSecureCookies ? "__Host-" : ""}next-auth.csrf-token`,
|
|
options: {
|
|
httpOnly: true,
|
|
sameSite: "lax",
|
|
path: "/",
|
|
secure: useSecureCookies
|
|
}
|
|
},
|
|
pkceCodeVerifier: {
|
|
name: `${cookiePrefix}next-auth.pkce.code_verifier`,
|
|
options: {
|
|
httpOnly: true,
|
|
sameSite: "lax",
|
|
path: "/",
|
|
secure: useSecureCookies,
|
|
maxAge: 60 * 15
|
|
}
|
|
},
|
|
state: {
|
|
name: `${cookiePrefix}next-auth.state`,
|
|
options: {
|
|
httpOnly: true,
|
|
sameSite: "lax",
|
|
path: "/",
|
|
secure: useSecureCookies,
|
|
maxAge: 60 * 15
|
|
}
|
|
},
|
|
nonce: {
|
|
name: `${cookiePrefix}next-auth.nonce`,
|
|
options: {
|
|
httpOnly: true,
|
|
sameSite: "lax",
|
|
path: "/",
|
|
secure: useSecureCookies
|
|
}
|
|
}
|
|
};
|
|
}
|
|
var _chunks = new WeakMap();
|
|
var _option = new WeakMap();
|
|
var _logger = new WeakMap();
|
|
var _SessionStore_brand = new WeakSet();
|
|
class SessionStore {
|
|
constructor(option, req, logger) {
|
|
_classPrivateMethodInitSpec(this, _SessionStore_brand);
|
|
_classPrivateFieldInitSpec(this, _chunks, {});
|
|
_classPrivateFieldInitSpec(this, _option, void 0);
|
|
_classPrivateFieldInitSpec(this, _logger, void 0);
|
|
_classPrivateFieldSet(_logger, this, logger);
|
|
_classPrivateFieldSet(_option, this, option);
|
|
const {
|
|
cookies: _cookies
|
|
} = req;
|
|
const {
|
|
name: cookieName
|
|
} = option;
|
|
if (typeof (_cookies === null || _cookies === void 0 ? void 0 : _cookies.getAll) === "function") {
|
|
for (const {
|
|
name,
|
|
value
|
|
} of _cookies.getAll()) {
|
|
if (name.startsWith(cookieName)) {
|
|
_classPrivateFieldGet(_chunks, this)[name] = value;
|
|
}
|
|
}
|
|
} else if (_cookies instanceof Map) {
|
|
for (const name of _cookies.keys()) {
|
|
if (name.startsWith(cookieName)) _classPrivateFieldGet(_chunks, this)[name] = _cookies.get(name);
|
|
}
|
|
} else {
|
|
for (const name in _cookies) {
|
|
if (name.startsWith(cookieName)) _classPrivateFieldGet(_chunks, this)[name] = _cookies[name];
|
|
}
|
|
}
|
|
}
|
|
get value() {
|
|
const sortedKeys = Object.keys(_classPrivateFieldGet(_chunks, this)).sort((a, b) => {
|
|
var _a$split$pop, _b$split$pop;
|
|
const aSuffix = parseInt((_a$split$pop = a.split(".").pop()) !== null && _a$split$pop !== void 0 ? _a$split$pop : "0");
|
|
const bSuffix = parseInt((_b$split$pop = b.split(".").pop()) !== null && _b$split$pop !== void 0 ? _b$split$pop : "0");
|
|
return aSuffix - bSuffix;
|
|
});
|
|
return sortedKeys.map(key => _classPrivateFieldGet(_chunks, this)[key]).join("");
|
|
}
|
|
chunk(value, options) {
|
|
const cookies = _assertClassBrand(_SessionStore_brand, this, _clean).call(this);
|
|
const chunked = _assertClassBrand(_SessionStore_brand, this, _chunk).call(this, {
|
|
name: _classPrivateFieldGet(_option, this).name,
|
|
value,
|
|
options: {
|
|
..._classPrivateFieldGet(_option, this).options,
|
|
...options
|
|
}
|
|
});
|
|
for (const chunk of chunked) {
|
|
cookies[chunk.name] = chunk;
|
|
}
|
|
return Object.values(cookies);
|
|
}
|
|
clean() {
|
|
return Object.values(_assertClassBrand(_SessionStore_brand, this, _clean).call(this));
|
|
}
|
|
}
|
|
exports.SessionStore = SessionStore;
|
|
function _chunk(cookie) {
|
|
const chunkCount = Math.ceil(cookie.value.length / CHUNK_SIZE);
|
|
if (chunkCount === 1) {
|
|
_classPrivateFieldGet(_chunks, this)[cookie.name] = cookie.value;
|
|
return [cookie];
|
|
}
|
|
const cookies = [];
|
|
for (let i = 0; i < chunkCount; i++) {
|
|
const name = `${cookie.name}.${i}`;
|
|
const value = cookie.value.substr(i * CHUNK_SIZE, CHUNK_SIZE);
|
|
cookies.push({
|
|
...cookie,
|
|
name,
|
|
value
|
|
});
|
|
_classPrivateFieldGet(_chunks, this)[name] = value;
|
|
}
|
|
_classPrivateFieldGet(_logger, this).debug("CHUNKING_SESSION_COOKIE", {
|
|
message: `Session cookie exceeds allowed ${ALLOWED_COOKIE_SIZE} bytes.`,
|
|
emptyCookieSize: ESTIMATED_EMPTY_COOKIE_SIZE,
|
|
valueSize: cookie.value.length,
|
|
chunks: cookies.map(c => c.value.length + ESTIMATED_EMPTY_COOKIE_SIZE)
|
|
});
|
|
return cookies;
|
|
}
|
|
function _clean() {
|
|
const cleanedChunks = {};
|
|
for (const name in _classPrivateFieldGet(_chunks, this)) {
|
|
var _classPrivateFieldGet2;
|
|
(_classPrivateFieldGet2 = _classPrivateFieldGet(_chunks, this)) === null || _classPrivateFieldGet2 === void 0 || delete _classPrivateFieldGet2[name];
|
|
cleanedChunks[name] = {
|
|
name,
|
|
value: "",
|
|
options: {
|
|
..._classPrivateFieldGet(_option, this).options,
|
|
maxAge: 0
|
|
}
|
|
};
|
|
}
|
|
return cleanedChunks;
|
|
} |