@rsksmart/express-did-auth
Version:
Authentication with Verifiable Credentials for Express.js
55 lines • 3 kB
JavaScript
;
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