@sphereon/wellknown-dids-client
Version:
Well-known DID client allows to create and verify DID Domain configuration resources
76 lines • 6.69 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());
});
};
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==