UNPKG

brazy-auth

Version:
104 lines (98 loc) 3.24 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); var _exportNames = { encode: true, decode: true, getToken: true }; exports.decode = decode; exports.encode = encode; exports.getToken = getToken; var _jose = require("jose"); var _hkdf = _interopRequireDefault(require("@panva/hkdf")); var _uuid = require("uuid"); var _cookie = require("../core/lib/cookie"); var _types = require("./types"); Object.keys(_types).forEach(function (key) { if (key === "default" || key === "__esModule") return; if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; if (key in exports && exports[key] === _types[key]) return; Object.defineProperty(exports, key, { enumerable: true, get: function () { return _types[key]; } }); }); const DEFAULT_MAX_AGE = 30 * 24 * 60 * 60; const now = () => Date.now() / 1000 | 0; async function encode(params) { const { token = {}, secret, maxAge = DEFAULT_MAX_AGE } = params; const encryptionSecret = await getDerivedEncryptionKey(secret); return await new _jose.EncryptJWT(token).setProtectedHeader({ alg: "dir", enc: "A256GCM" }).setIssuedAt().setExpirationTime(now() + maxAge).setJti((0, _uuid.v4)()).encrypt(encryptionSecret); } async function decode(params) { const { token, secret } = params; if (!token) return null; const encryptionSecret = await getDerivedEncryptionKey(secret); const { payload } = await (0, _jose.jwtDecrypt)(token, encryptionSecret, { clockTolerance: 15 }); return payload; } async function getToken(params) { var _process$env$NEXTAUTH, _process$env$NEXTAUTH2; const { req, secureCookie = (_process$env$NEXTAUTH = (_process$env$NEXTAUTH2 = process.env.NEXTAUTH_URL) === null || _process$env$NEXTAUTH2 === void 0 ? void 0 : _process$env$NEXTAUTH2.startsWith("https://")) !== null && _process$env$NEXTAUTH !== void 0 ? _process$env$NEXTAUTH : !!process.env.VERCEL, cookieName = "brazy-auth.session", raw, decode: _decode = decode, logger = console, secret = process.env.NEXTAUTH_SECRET } = params !== null && params !== void 0 ? params : {}; if (!req) throw new Error("Must pass `req` to JWT getToken()"); const sessionStore = new _cookie.SessionStore({ name: cookieName, options: { secure: secureCookie } }, { cookies: req.cookies, headers: req.headers }, logger); let token = sessionStore.value; const authorizationHeader = req.headers instanceof Headers ? req.headers.get("authorization") : req.headers.authorization; if (!token && (authorizationHeader === null || authorizationHeader === void 0 ? void 0 : authorizationHeader.split(" ")[0]) === "Bearer") { const urlEncodedToken = authorizationHeader.split(" ")[1]; token = decodeURIComponent(urlEncodedToken); } if (!token) return null; if (raw) return token; try { return await _decode({ token, secret }); } catch (_unused) { return null; } } async function getDerivedEncryptionKey(secret) { return await (0, _hkdf.default)("sha256", secret, "", "NextAuth.js Generated Encryption Key", 32); }