UNPKG

@rsksmart/express-did-auth

Version:

Authentication with Verifiable Credentials for Express.js

51 lines 3.02 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.verifyReceivedJwt = exports.getDidResolver = exports.generateAccessToken = void 0; const did_jwt_1 = require("did-jwt"); const did_resolver_1 = require("did-resolver"); const ethr_did_resolver_1 = require("ethr-did-resolver"); const constants_1 = require("./constants"); const defaults_1 = require("./defaults"); const errors_1 = require("./errors"); function generateAccessToken(subjectDid, config, metadata) { const now = Math.floor(Date.now() / 1000); // must be in seconds const { serviceUrl, serviceDid, accessTokenExpirationTime, serviceSigner: signer } = config; const payload = Object.assign(Object.assign({}, metadata), { aud: serviceUrl, sub: subjectDid, exp: `${now + Math.floor((accessTokenExpirationTime || defaults_1.ACCESS_TOKEN_EXPIRATION) / 1000)}`, nbf: `${now}`, iat: `${now}` }); return did_jwt_1.createJWT(payload, { issuer: serviceDid, signer }, { typ: 'JWT', alg: 'ES256K' }); } exports.generateAccessToken = generateAccessToken; function getDidResolver(config) { const registry = config.registry || constants_1.REGISTRY_ADDRESS; const networks = config.rpcUrl ? [ { name: config.networkName || constants_1.RSK_MAINNET_NETWORK_NAME, registry, rpcUrl: config.rpcUrl } ] : [ { name: constants_1.RSK_TESTNET_NETWORK_NAME, registry, rpcUrl: constants_1.RSK_TESTNET_RPC_URL }, { name: constants_1.RSK_MAINNET_NETWORK_NAME, registry, rpcUrl: constants_1.RSK_MAINNET_RPC_URL } ]; const ethrDidResolver = ethr_did_resolver_1.getResolver({ networks }); return new did_resolver_1.Resolver(ethrDidResolver); } exports.getDidResolver = getDidResolver; function verifyReceivedJwt(token, config) { return __awaiter(this, void 0, void 0, function* () { const resolver = getDidResolver(config); const verified = yield did_jwt_1.verifyJWT(token, { audience: config.serviceUrl, resolver }); const now = Math.floor(Date.now() / 1000); if (verified.payload.exp < now) throw new Error(errors_1.EXPIRED_ACCESS_TOKEN); if (verified.payload.nbf > now) throw new Error(errors_1.INVALID_ACCESS_TOKEN); return verified; }); } exports.verifyReceivedJwt = verifyReceivedJwt; //# sourceMappingURL=jwt-utils.js.map