UNPKG

@sphereon/ssi-sdk.siopv2-oid4vp-rp-rest-api

Version:

200 lines • 12.3 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; 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()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createAuthRequestWebappEndpoint = createAuthRequestWebappEndpoint; exports.authStatusWebappEndpoint = authStatusWebappEndpoint; exports.removeAuthRequestStateWebappEndpoint = removeAuthRequestStateWebappEndpoint; exports.getDefinitionsEndpoint = getDefinitionsEndpoint; const did_auth_siop_1 = require("@sphereon/did-auth-siop"); const ssi_express_support_1 = require("@sphereon/ssi-express-support"); const ssi_sdk_siopv2_oid4vp_common_1 = require("@sphereon/ssi-sdk.siopv2-oid4vp-common"); const ssi_sdk_siopv2_oid4vp_rp_auth_1 = require("@sphereon/ssi-sdk.siopv2-oid4vp-rp-auth"); const short_uuid_1 = __importDefault(require("short-uuid")); const ssi_sdk_core_1 = require("@sphereon/ssi-sdk.core"); function createAuthRequestWebappEndpoint(router, context, opts) { var _a; if ((opts === null || opts === void 0 ? void 0 : opts.enabled) === false) { console.log(`createAuthRequest Webapp endpoint is disabled`); return; } const path = (_a = opts === null || opts === void 0 ? void 0 : opts.path) !== null && _a !== void 0 ? _a : '/webapp/definitions/:definitionId/auth-requests'; router.post(path, (0, ssi_express_support_1.checkAuth)(opts === null || opts === void 0 ? void 0 : opts.endpoint), (request, response) => __awaiter(this, void 0, void 0, function* () { var _a, _b, _c, _d, _e; try { // if (!request.agent) throw Error('No agent configured') const definitionId = request.params.definitionId; if (!definitionId) { return (0, ssi_express_support_1.sendErrorResponse)(response, 400, 'No definitionId query parameter provided'); } const state = (_a = request.body.state) !== null && _a !== void 0 ? _a : short_uuid_1.default.uuid(); const correlationId = (_b = request.body.correlationId) !== null && _b !== void 0 ? _b : state; const qrCodeOpts = (_c = request.body.qrCodeOpts) !== null && _c !== void 0 ? _c : opts === null || opts === void 0 ? void 0 : opts.qrCodeOpts; const requestByReferenceURI = (0, ssi_sdk_siopv2_oid4vp_common_1.uriWithBase)(`/siop/definitions/${definitionId}/auth-requests/${state}`, { baseURI: opts === null || opts === void 0 ? void 0 : opts.siopBaseURI, }); const responseURI = (0, ssi_sdk_siopv2_oid4vp_common_1.uriWithBase)(`/siop/definitions/${definitionId}/auth-responses/${state}`, { baseURI: opts === null || opts === void 0 ? void 0 : opts.siopBaseURI }); // first version is for backwards compat const responseRedirectURI = (_d = ('response_redirect_uri' in request.body && request.body.response_redirect_uri)) !== null && _d !== void 0 ? _d : ('responseRedirectURI' in request.body && request.body.responseRedirectURI); const authRequestURI = yield context.agent.siopCreateAuthRequestURI(Object.assign({ definitionId, correlationId, state, nonce: short_uuid_1.default.uuid(), requestByReferenceURI, responseURIType: 'response_uri', responseURI }, (responseRedirectURI && { responseRedirectURI }))); let qrCodeDataUri; if (qrCodeOpts) { const { AwesomeQR } = yield Promise.resolve().then(() => __importStar(require('awesome-qr'))); const qrCode = new AwesomeQR(Object.assign(Object.assign({}, qrCodeOpts), { text: authRequestURI })); qrCodeDataUri = `data:image/png;base64,${(yield qrCode.draw()).toString('base64')}`; } const authRequestBody = Object.assign({ correlationId, state, definitionId, authRequestURI, authStatusURI: `${(0, ssi_sdk_siopv2_oid4vp_common_1.uriWithBase)((_e = opts === null || opts === void 0 ? void 0 : opts.webappAuthStatusPath) !== null && _e !== void 0 ? _e : '/webapp/auth-status', { baseURI: opts === null || opts === void 0 ? void 0 : opts.webappBaseURI })}` }, (qrCodeDataUri && { qrCodeDataUri })); console.log(`Auth Request URI data to send back: ${JSON.stringify(authRequestBody)}`); return response.json(authRequestBody); } catch (error) { return (0, ssi_express_support_1.sendErrorResponse)(response, 500, 'Could not create an authorization request URI', error); } })); } function authStatusWebappEndpoint(router, context, opts) { var _a; if ((opts === null || opts === void 0 ? void 0 : opts.enabled) === false) { console.log(`authStatus Webapp endpoint is disabled`); return; } const path = (_a = opts === null || opts === void 0 ? void 0 : opts.path) !== null && _a !== void 0 ? _a : '/webapp/auth-status'; router.post(path, (0, ssi_express_support_1.checkAuth)(opts === null || opts === void 0 ? void 0 : opts.endpoint), (request, response) => __awaiter(this, void 0, void 0, function* () { var _a; try { console.log('Received auth-status request...'); const correlationId = request.body.correlationId; const definitionId = request.body.definitionId; const requestState = correlationId && definitionId ? yield context.agent.siopGetAuthRequestState({ correlationId, definitionId, errorOnNotFound: false, }) : undefined; if (!requestState || !definitionId || !correlationId) { console.log(`No authentication request mapping could be found for the given URL. correlation: ${correlationId}, definitionId: ${definitionId}`); response.statusCode = 404; const statusBody = { status: requestState ? requestState.status : 'error', error: 'No authentication request mapping could be found for the given URL.', correlationId, definitionId, lastUpdated: requestState ? requestState.lastUpdated : Date.now(), }; return response.json(statusBody); } let includeVerifiedData = ssi_sdk_siopv2_oid4vp_rp_auth_1.VerifiedDataMode.NONE; if ('includeVerifiedData' in request.body) { includeVerifiedData = request.body.includeVerifiedData; } let responseState; if (requestState.status === 'sent') { responseState = (yield context.agent.siopGetAuthResponseState({ correlationId, definitionId, includeVerifiedData: includeVerifiedData, errorOnNotFound: false, })); } const overallState = responseState !== null && responseState !== void 0 ? responseState : requestState; const statusBody = Object.assign(Object.assign(Object.assign({ status: overallState.status }, (overallState.error ? { error: (_a = overallState.error) === null || _a === void 0 ? void 0 : _a.message } : {})), { correlationId, definitionId, lastUpdated: overallState.lastUpdated }), (responseState && responseState.status === did_auth_siop_1.AuthorizationResponseStateStatus.VERIFIED ? { payload: yield responseState.response.mergedPayloads({ hasher: ssi_sdk_core_1.shaHasher }), verifiedData: responseState.verifiedData, } : {})); console.debug(`Will send auth status: ${JSON.stringify(statusBody)}`); if (overallState.status === 'error') { response.statusCode = 500; return response.json(statusBody); } response.statusCode = 200; return response.json(statusBody); } catch (error) { return (0, ssi_express_support_1.sendErrorResponse)(response, 500, error.message, error); } })); } function removeAuthRequestStateWebappEndpoint(router, context, opts) { var _a; if ((opts === null || opts === void 0 ? void 0 : opts.enabled) === false) { console.log(`removeAuthStatus Webapp endpoint is disabled`); return; } const path = (_a = opts === null || opts === void 0 ? void 0 : opts.path) !== null && _a !== void 0 ? _a : '/webapp/definitions/:definitionId/auth-requests/:correlationId'; router.delete(path, (0, ssi_express_support_1.checkAuth)(opts === null || opts === void 0 ? void 0 : opts.endpoint), (request, response) => __awaiter(this, void 0, void 0, function* () { try { const correlationId = request.params.correlationId; const definitionId = request.params.definitionId; if (!correlationId || !definitionId) { console.log(`No authorization request could be found for the given url. correlationId: ${correlationId}, definitionId: ${definitionId}`); return (0, ssi_express_support_1.sendErrorResponse)(response, 404, 'No authorization request could be found'); } response.statusCode = 200; return response.json(yield context.agent.siopDeleteAuthState({ definitionId, correlationId })); } catch (error) { return (0, ssi_express_support_1.sendErrorResponse)(response, 500, error.message, error); } })); } function getDefinitionsEndpoint(router, context, opts) { var _a; if ((opts === null || opts === void 0 ? void 0 : opts.enabled) === false) { console.log(`getDefinitions Webapp endpoint is disabled`); return; } const path = (_a = opts === null || opts === void 0 ? void 0 : opts.path) !== null && _a !== void 0 ? _a : '/webapp/definitions'; router.get(path, (0, ssi_express_support_1.checkAuth)(opts === null || opts === void 0 ? void 0 : opts.endpoint), (request, response) => __awaiter(this, void 0, void 0, function* () { try { const definitions = yield context.agent.pdmGetDefinitions(); response.statusCode = 200; return response.json(definitions); } catch (error) { return (0, ssi_express_support_1.sendErrorResponse)(response, 500, error.message, error); } })); } //# sourceMappingURL=webapp-api-functions.js.map