@sphereon/ssi-sdk.siopv2-oid4vp-rp-rest-api
Version:
200 lines • 12.3 kB
JavaScript
;
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