UNPKG

@rsksmart/express-did-auth

Version:

Authentication with Verifiable Credentials for Express.js

55 lines 3 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.refreshTokenFactory = void 0; const constants_1 = require("../constants"); const errors_1 = require("../errors"); const jwt_utils_1 = require("../jwt-utils"); const cookies_1 = require("./cookies"); function extractRefreshToken(req, useCookies) { if (!useCookies) return req.body.refreshToken; const did = req.headers[constants_1.LOGGED_DID_COOKIE_NAME]; return req.cookies[`${constants_1.REFRESH_TOKEN_COOKIE_NAME}-${did}`]; } function refreshTokenFactory(state, accessTokenConfig) { return function (req, res) { return __awaiter(this, void 0, void 0, function* () { try { const { useCookies } = accessTokenConfig; const oldRefreshToken = extractRefreshToken(req, useCookies); if (!oldRefreshToken) return res.status(401).send(errors_1.NO_REFRESH_TOKEN); const did = state.refreshTokens[oldRefreshToken]; delete state.refreshTokens[oldRefreshToken]; // delete old refresh token from the state if (!did) return res.status(401).send(errors_1.INVALID_OR_EXPIRED_SESSION); const newUserSession = state.sessions[did].sessionManager.renewRefreshToken(oldRefreshToken); if (!newUserSession) return res.status(401).send(errors_1.INVALID_OR_EXPIRED_SESSION); const { refreshToken, metadata } = newUserSession; state.refreshTokens[refreshToken] = did; // adds new refresh token to the state const accessToken = yield jwt_utils_1.generateAccessToken(did, accessTokenConfig, metadata); if (!useCookies) return res.status(200).json({ accessToken, refreshToken }); cookies_1.setCookies(res, did, accessToken, refreshToken); return res.status(200).send(); } catch (err) { if (err.message) return res.status(401).send(escape(err.message)); return res.status(401).send('Unhandled error'); } }); }; } exports.refreshTokenFactory = refreshTokenFactory; //# sourceMappingURL=refresh-token-factory.js.map