UNPKG

next-auth

Version:

Authentication for Next.js

144 lines (131 loc) 4.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = session; var _utils = require("../lib/utils"); async function session(params) { const { options, sessionStore } = params; const { adapter, jwt, events, callbacks, logger, session: { strategy: sessionStrategy, maxAge: sessionMaxAge } } = options; const response = { body: {}, headers: [{ key: "Content-Type", value: "application/json" }], cookies: [] }; const sessionToken = sessionStore.value; if (!sessionToken) return response; if (sessionStrategy === "jwt") { try { var _response$cookies, _events$session; const decodedToken = await jwt.decode({ ...jwt, token: sessionToken }); const newExpires = (0, _utils.fromDate)(sessionMaxAge); const session = { user: { name: decodedToken === null || decodedToken === void 0 ? void 0 : decodedToken.name, email: decodedToken === null || decodedToken === void 0 ? void 0 : decodedToken.email, image: decodedToken === null || decodedToken === void 0 ? void 0 : decodedToken.picture }, expires: newExpires.toISOString() }; const token = await callbacks.jwt({ token: decodedToken }); const newSession = await callbacks.session({ session, token }); response.body = newSession; const newToken = await jwt.encode({ ...jwt, token, maxAge: options.session.maxAge }); const sessionCookies = sessionStore.chunk(newToken, { expires: newExpires }); (_response$cookies = response.cookies) === null || _response$cookies === void 0 ? void 0 : _response$cookies.push(...sessionCookies); await ((_events$session = events.session) === null || _events$session === void 0 ? void 0 : _events$session.call(events, { session: newSession, token })); } catch (error) { var _response$cookies2; logger.error("JWT_SESSION_ERROR", error); (_response$cookies2 = response.cookies) === null || _response$cookies2 === void 0 ? void 0 : _response$cookies2.push(...sessionStore.clean()); } } else { try { const { getSessionAndUser, deleteSession, updateSession } = adapter; let userAndSession = await getSessionAndUser(sessionToken); if (userAndSession && userAndSession.session.expires.valueOf() < Date.now()) { await deleteSession(sessionToken); userAndSession = null; } if (userAndSession) { var _response$cookies3, _events$session2; const { user, session } = userAndSession; const sessionUpdateAge = options.session.updateAge; const sessionIsDueToBeUpdatedDate = session.expires.valueOf() - sessionMaxAge * 1000 + sessionUpdateAge * 1000; const newExpires = (0, _utils.fromDate)(sessionMaxAge); if (sessionIsDueToBeUpdatedDate <= Date.now()) { await updateSession({ sessionToken, expires: newExpires }); } const sessionPayload = await callbacks.session({ session: { user: { name: user.name, email: user.email, image: user.image }, expires: session.expires.toISOString() }, user }); response.body = sessionPayload; (_response$cookies3 = response.cookies) === null || _response$cookies3 === void 0 ? void 0 : _response$cookies3.push({ name: options.cookies.sessionToken.name, value: sessionToken, options: { ...options.cookies.sessionToken.options, expires: newExpires } }); await ((_events$session2 = events.session) === null || _events$session2 === void 0 ? void 0 : _events$session2.call(events, { session: sessionPayload })); } else if (sessionToken) { var _response$cookies4; (_response$cookies4 = response.cookies) === null || _response$cookies4 === void 0 ? void 0 : _response$cookies4.push(...sessionStore.clean()); } } catch (error) { logger.error("SESSION_ERROR", error); } } return response; }