@sphereon/wellknown-dids-client
Version:
Well-known DID client allows to create and verify DID Domain configuration resources
109 lines • 9.8 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());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.WellKnownDidIssuer = void 0;
const ssi_types_1 = require("@sphereon/ssi-types");
const constants_1 = require("../constants");
const utils_1 = require("../utils");
class WellKnownDidIssuer {
/** Issuer constructor */
constructor(config) {
this.config = config;
}
/**
* Issue a DID configuration resource.
*
* @param args The arguments for issuance.
* @return {IDidConfigurationResource}, issuance result.
*/
issueDidConfigurationResource(args) {
var _a;
return __awaiter(this, void 0, void 0, function* () {
if (args.configuration && args.origin) {
return Promise.reject(Error(constants_1.WDCErrors.CANT_SUPPLY_BOTH_CONFIGURATION_AND_ORIGIN));
}
if (!args.issueCallback && (!this.config || !((_a = this.config) === null || _a === void 0 ? void 0 : _a.issueCallback)) && args.issuances.some(issuance => !issuance.issueCallback)) {
return Promise.reject(Error(constants_1.WDCErrors.MUST_SUPPLY_ISSUE_CALLBACK));
}
if (args.origin && args.issuances.filter(issuance => issuance.origin !== args.origin).length > 0) {
return Promise.reject(Error(constants_1.WDCErrors.ISSUANCE_ORIGIN_DOES_NOT_MATCH_PROVIDED_ORIGIN));
}
let didConfigurationResource;
if (args.configuration) {
didConfigurationResource = args.configuration;
}
else if (args.origin) {
didConfigurationResource = yield (0, utils_1.fetchWellKnownDidConfiguration)(args.origin);
}
else {
didConfigurationResource = {
'@context': constants_1.CONTEXT_URLS.IDENTITY_FOUNDATION_WELL_KNOWN_DID,
'linked_dids': new Array()
};
}
const credentials = yield Promise.all(args.issuances.map((item) => {
const issuance = (!item.issueCallback ? Object.assign(Object.assign({}, item), { issueCallback: args.issueCallback }) : item);
return this.issueDomainLinkageCredential(issuance);
}));
didConfigurationResource.linked_dids = didConfigurationResource.linked_dids.concat(credentials);
return didConfigurationResource;
});
}
/**
* Issue a domain linkage credential.
* Return types can be of Linked Data Proof Format or JSON Web Token Proof Format.
*
* @param args The arguments for issuance.
* @return {DomainLinkageCredential}, issuance result.
*/
issueDomainLinkageCredential(args) {
var _a;
return __awaiter(this, void 0, void 0, function* () {
if (!args.issueCallback && (!this.config || !((_a = this.config) === null || _a === void 0 ? void 0 : _a.issueCallback))) {
return Promise.reject(Error(constants_1.WDCErrors.MUST_SUPPLY_ISSUE_CALLBACK));
}
const did = (0, ssi_types_1.parseDid)(args.did).did;
if (new URL(args.origin).origin !== args.origin) {
return Promise.reject(Error(constants_1.WDCErrors.ORIGIN_NOT_VALID));
}
if (args.issuanceDate && isNaN(Date.parse(args.issuanceDate))) {
return Promise.reject(Error(constants_1.WDCErrors.PROPERTY_ISSUANCE_DATE_NOT_VALID));
}
if (isNaN(Date.parse(args.expirationDate))) {
return Promise.reject(Error(constants_1.WDCErrors.PROPERTY_EXPIRATION_DATE_NOT_VALID));
}
const credential = {
"@context": [
constants_1.CONTEXT_URLS.W3C_CREDENTIALS_V1,
constants_1.CONTEXT_URLS.IDENTITY_FOUNDATION_WELL_KNOWN_DID
],
"issuer": did,
"issuanceDate": args.issuanceDate || new Date().toISOString(),
"expirationDate": args.expirationDate,
"type": [
"VerifiableCredential",
"DomainLinkageCredential"
],
"credentialSubject": {
"id": did,
"origin": args.origin
},
};
return (args.issueCallback)
? yield args.issueCallback({ credential, proofFormat: args.options.proofFormat })
// @ts-ignore: We know for sure the config is present
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
: yield this.config.issueCallback({ credential, proofFormat: args.options.proofFormat });
});
}
}
exports.WellKnownDidIssuer = WellKnownDidIssuer;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2VsbEtub3duRGlkSXNzdWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2lzc3Vlci9XZWxsS25vd25EaWRJc3N1ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsbURBQStDO0FBRS9DLDRDQUF1RDtBQVN2RCxvQ0FBMEQ7QUFFMUQsTUFBYSxrQkFBa0I7SUFHN0IseUJBQXlCO0lBQ3pCLFlBQVksTUFBc0I7UUFDaEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7SUFDdEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ1UsNkJBQTZCLENBQUMsSUFBd0M7OztZQUNqRixJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDckMsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxxQkFBUyxDQUFDLHlDQUF5QyxDQUFDLENBQUMsQ0FBQTthQUNsRjtZQUVELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQSxNQUFBLElBQUksQ0FBQyxNQUFNLDBDQUFFLGFBQWEsQ0FBQSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRTtnQkFDcEksT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxxQkFBUyxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQTthQUNuRTtZQUVELElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ2hHLE9BQU8sT0FBTyxDQUFD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