@sphereon/ssi-sdk-ext.did-resolver-ebsi
Version:
Sphereon did:ebsi resolver for Legal Entities.
146 lines (144 loc) • 5.45 kB
JavaScript
var __defProp = Object.defineProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
// src/drivers/ebsi-v1.ts
var ebsi_v1_exports = {};
__export(ebsi_v1_exports, {
EBSI_CONFORMANCE_REGISTRY_V4: () => EBSI_CONFORMANCE_REGISTRY_V4,
EBSI_CONFORMANCE_REGISTRY_V5: () => EBSI_CONFORMANCE_REGISTRY_V5,
EBSI_PILOT_REGISTRY_V4: () => EBSI_PILOT_REGISTRY_V4,
EBSI_PILOT_REGISTRY_V5: () => EBSI_PILOT_REGISTRY_V5,
EBSI_TEST_REGISTRY: () => EBSI_TEST_REGISTRY,
default: () => ebsi_v1_default,
keyToDidDoc: () => keyToDidDoc
});
import { fetch } from "cross-fetch";
var EBSI_TEST_REGISTRY = "https://api-test.ebsi.eu/did-registry/v5/identifiers";
var EBSI_PILOT_REGISTRY_V5 = "https://api-pilot.ebsi.eu/did-registry/v5";
var EBSI_CONFORMANCE_REGISTRY_V5 = "https://api-conformance.ebsi.eu/did-registry/v5/identifiers";
var EBSI_PILOT_REGISTRY_V4 = "https://api-pilot.ebsi.eu/did-registry/v4";
var EBSI_CONFORMANCE_REGISTRY_V4 = "https://api-conformance.ebsi.eu/did-registry/v4/identifiers";
var keyToDidDoc = /* @__PURE__ */ __name(async (did, contentType, options) => {
const registries = determineRegistries(options);
for (const registry of registries) {
try {
const didDocument = await keyToDidDocImpl(did, contentType, registry, options);
if (didDocument && !("error" in didDocument)) {
return didDocument;
}
} catch (error) {
console.log(error);
}
}
return Promise.reject(new Error(`Could not resolve DID ${did} using registries: ${JSON.stringify(registries)}`));
}, "keyToDidDoc");
var keyToDidDocImpl = /* @__PURE__ */ __name(async (did, contentType, registry, options) => {
const uri = didURI(did, registry);
const response = await fetch(uri);
if (response.status >= 400) {
throw Error(await response.json());
}
return await response.json();
}, "keyToDidDocImpl");
var didURI = /* @__PURE__ */ __name((did, registry) => {
let uri = registry;
if (uri.endsWith("/")) {
uri = uri.substring(0, uri.length - 1);
}
if (!uri.includes("identifiers")) {
uri += "/identifiers";
}
return `${uri}/${did}`;
}, "didURI");
var determineRegistries = /* @__PURE__ */ __name((options) => {
let registries = /* @__PURE__ */ new Set();
if (options.registries && Array.isArray(options.registries) && options.registries.length > 0) {
options.registries.forEach(registries.add);
}
if (options.registry) {
registries.add(options.registry);
}
if (options.noEnvVarRegistry !== true && process.env.EBSI_DEFAULT_REGISTRY) {
registries.add(process.env.EBSI_DEFAULT_REGISTRY);
}
if (options.noFallbackRegistries !== true) {
registries.add(EBSI_PILOT_REGISTRY_V5);
registries.add(EBSI_CONFORMANCE_REGISTRY_V5);
registries.add(EBSI_PILOT_REGISTRY_V4);
registries.add(EBSI_CONFORMANCE_REGISTRY_V4);
registries.add(EBSI_TEST_REGISTRY);
}
if (registries.size === 0) {
throw Error("Please provide a registry as an option, a fallback registry or use an environment variable (EBSI_DEFAULT_REGISTRY)");
}
return Array.from(registries);
}, "determineRegistries");
var ebsi_v1_default = {
keyToDidDoc
};
// src/index.ts
import { config } from "dotenv";
config();
var DID_LD_JSON = "application/did+ld+json";
var DID_JSON = "application/did+json";
var methodToDriverMap = {
ebsi: ebsi_v1_exports
};
var getResolver = /* @__PURE__ */ __name(() => {
return {
ebsi: /* @__PURE__ */ __name(async (did, parsed, r, options) => {
const response = {
didResolutionMetadata: {},
didDocument: null,
didDocumentMetadata: {}
};
try {
const contentType = determineContentType(options);
response.didResolutionMetadata.contentType = contentType;
const driver = methodToDriverMap[parsed.method];
const doc = await driver.keyToDidDoc(did, contentType, options);
switch (contentType) {
case DID_LD_JSON:
if (!doc["@context"]) {
doc["@context"] = "https://w3id.org/did/v1";
} else if (Array.isArray(doc["@context"]) && !doc["@context"].includes("https://w3id.org/did/v1") && !doc["@context"].includes("https://www.w3.org/ns/did/v1")) {
doc["@context"].push("https://w3id.org/did/v1");
}
response.didDocument = doc;
break;
case DID_JSON:
response.didDocument = doc;
break;
default:
delete response.didResolutionMetadata.contentType;
response.didResolutionMetadata.error = "representationNotSupported";
break;
}
} catch (e) {
response.didResolutionMetadata.error = "invalidDid";
response.didResolutionMetadata.message = e.toString();
}
return response;
}, "ebsi")
};
}, "getResolver");
var determineContentType = /* @__PURE__ */ __name((options) => {
const contentType = options.accept || DID_JSON;
if (contentType !== DID_JSON && contentType !== DID_LD_JSON) {
throw Error(`Only ${DID_JSON} and ${DID_LD_JSON} are supported. Provided: ${contentType}`);
}
return contentType;
}, "determineContentType");
var index_default = {
getResolver
};
export {
DID_JSON,
DID_LD_JSON,
index_default as default,
getResolver
};
//# sourceMappingURL=index.js.map