UNPKG

@sphereon/wellknown-dids-client

Version:

Well-known DID client allows to create and verify DID Domain configuration resources

76 lines 6.69 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()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.decodeToken = exports.verifyResourceStructure = exports.fetchWellKnownDidConfiguration = void 0; const cross_fetch_1 = __importDefault(require("cross-fetch")); const jwt_decode_1 = __importDefault(require("jwt-decode")); const constants_1 = require("../constants"); const types_1 = require("../types"); /** * Fetches a DID configuration resource from a given origin. * * @param origin The origin of the location. * @param verifyResource * @return {IDidConfigurationResource}, DID configuration resource. */ const fetchWellKnownDidConfiguration = (origin, verifyResource = true) => __awaiter(void 0, void 0, void 0, function* () { const url = `${origin}${constants_1.WELL_KNOWN_DID_URI}`; return (0, cross_fetch_1.default)(url) .then((response) => { if (response.status >= 400) { return Promise.reject(Error(constants_1.WDCErrors.UNABLE_TO_RETRIEVE_DID_CONFIG_RESOURCE_FROM + `${url}`)); } if (!verifyResource) return response.json(); return response.json() .then((resource) => (0, exports.verifyResourceStructure)(resource) .then(() => resource)); }) .catch(() => { return Promise.reject(Error(constants_1.WDCErrors.UNABLE_TO_RETRIEVE_DID_CONFIG_RESOURCE_FROM + `${url}`)); }); }); exports.fetchWellKnownDidConfiguration = fetchWellKnownDidConfiguration; /** * Verifies the DID configuration resource object structure. * * @param resource The DID configuration resource. */ const verifyResourceStructure = (resource) => __awaiter(void 0, void 0, void 0, function* () { // @context MUST be present. if (!resource['@context']) return Promise.reject({ status: types_1.ValidationStatusEnum.INVALID, message: constants_1.WDCErrors.PROPERTY_CONTEXT_NOT_PRESENT }); // linked_dids MUST be present. if (!resource.linked_dids) return Promise.reject({ status: types_1.ValidationStatusEnum.INVALID, message: constants_1.WDCErrors.PROPERTY_LINKED_DIDS_NOT_PRESENT }); // The value of linked_dids MUST be an array of DomainLinkageCredential entries. if (resource.linked_dids.length === 0) return Promise.reject({ status: types_1.ValidationStatusEnum.INVALID, message: constants_1.WDCErrors.PROPERTY_LINKED_DIDS_DOES_NOT_CONTAIN_ANY_DOMAIN_LINK_CREDENTIALS }); // Additional members MUST NOT be present in the header if (Object.getOwnPropertyNames(resource).filter(property => !['@context', 'linked_dids'].includes(property)).length > 0) return Promise.reject({ status: types_1.ValidationStatusEnum.INVALID, message: constants_1.WDCErrors.RESOURCE_CONTAINS_ADDITIONAL_PROPS }); }); exports.verifyResourceStructure = verifyResourceStructure; /** * Decodes a JWT token. * * @param token The JWT token. * @param header Option to decode header or payload. * @return {JwtPayload | JwtHeader}, Decoded header or payload object. */ const decodeToken = (token, header) => { return (0, jwt_decode_1.default)(token, { header }); }; exports.decodeToken = decodeToken; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsOERBQWdDO0FBQ2hDLDREQUErRDtBQUUvRCw0Q0FBNkQ7QUFDN0Qsb0NBQTJFO0FBRTNFOzs7Ozs7R0FNRztBQUNJLE1BQU0sOEJBQThCLEdBQUcsQ0FBTyxNQUFjLEVBQUUsY0FBYyxHQUFHLElBQUksRUFBc0MsRUFBRTtJQUNoSSxNQUFNLEdBQUcsR0FBRyxHQUFHLE1BQU0sR0FBRyw4QkFBa0IsRUFBRSxDQUFDO0lBRTdDLE9BQU8sSUFBQSxxQkFBSyxFQUFDLEdBQUcsQ0FBQztTQUNkLElBQUksQ0FBQyxDQUFDLFFBQWtCLEVBQUUsRUFBRTtRQUMzQixJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksR0FBRyxFQUFFO1lBQzFCLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMscUJBQVMsQ0FBQywyQ0FBMkMsR0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQTtTQUM3RjtRQUVELElBQUksQ0FBQyxjQUFjO1lBQUUsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUE7UUFFM0MsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFO2FBQ25CLElBQUksQ0FBQyxDQUFDLFFBQW1DLEVBQUUsRUFBRSxDQUFDLElBQUEsK0JBQXVCLEVBQUMsUUFBUSxDQUFDO2FBQy9FLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO0lBQzFCLENBQUMsQ0FBQztTQUNELEtBQUssQ0FBQyxHQUFHLEVBQUU7UUFDVixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHFCQUFTLENBQUMsMkNBQTJDLEdBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDOUYsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUEsQ0FBQTtBQWxCWSxRQUFBLDhCQUE4QixrQ0FrQjFDO0FBRUQ7Ozs7R0FJRztBQUNJLE1BQU0sdUJBQXVCLEdBQUcsQ0FBTyxRQUFtQyxFQUFpQixFQUFFO0lBQ2xHLDRCQUE0QjtJQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUFFLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFDLE1BQU0sRUFBRSw0QkFBb0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLHFCQUFTLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxDQUFBO0lBRTFJLCtCQUErQjtJQUMvQixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVc7UUFBRSxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBQyxNQUFNLEVBQUUsNEJBQW9CLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxxQkFBUyxDQUFDLGdDQUFnQyxFQUFFLENBQUMsQ0FBQTtJQUU5SSxnRkFBZ0Y7SUFDaEYsSUFBSSxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUMsTUFBTSxFQUFFLDRCQUFvQixDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUscUJBQVMsQ0FBQyxpRUFBaUUsRUFBRSxDQUFDLENBQUE7SUFFM0wsdURBQXVEO0lBQ3ZELElBQUksTUFBTSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUM7UUFDckgsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUMsTUFBTSxFQUFFLDRCQUFvQixDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUscUJBQVMsQ0FBQyxrQ0FBa0MsRUFBRSxDQUFDLENBQUE7QUFDekgsQ0FBQyxDQUFBLENBQUE7QUFiWSxRQUFBLHVCQUF1QiwyQkFhbkM7QUFFRDs7Ozs7O0dBTUc7QUFDSSxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQWEsRUFBRSxNQUFlLEVBQTBCLEVBQUU7SUFDcEYsT0FBTyxJQUFBLG9CQUFVLEVBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQTtBQUN0QyxDQUFDLENBQUE7QUFGWSxRQUFBLFdBQVcsZUFFdkIifQ==