UNPKG

@sphereon/ssi-sdk-ext.did-resolver-ebsi

Version:

Sphereon did:ebsi resolver for Legal Entities.

1 lines 9.08 kB
{"version":3,"sources":["../src/index.ts","../src/drivers/ebsi-v1.ts"],"sourcesContent":["import * as ebsiV1 from './drivers/ebsi-v1'\nimport { DIDResolutionOptions, DIDResolutionResult, ParsedDID, Resolvable, ResolverRegistry } from 'did-resolver'\n\nimport { config } from 'dotenv'\n\nconfig()\nexport const DID_LD_JSON = 'application/did+ld+json'\nexport const DID_JSON = 'application/did+json'\nconst methodToDriverMap: any = {\n ebsi: ebsiV1,\n}\n\nexport const getResolver = (): ResolverRegistry => {\n return {\n ebsi: async (did: string, parsed: ParsedDID, r: Resolvable, options: DIDResolutionOptions) => {\n const response: DIDResolutionResult = {\n didResolutionMetadata: {},\n didDocument: null,\n didDocumentMetadata: {},\n }\n\n try {\n const contentType = determineContentType(options)\n response.didResolutionMetadata.contentType = contentType\n const driver = methodToDriverMap[parsed.method]\n const doc = await driver.keyToDidDoc(did, contentType, options)\n switch (contentType) {\n case DID_LD_JSON:\n if (!doc['@context']) {\n doc['@context'] = 'https://w3id.org/did/v1'\n } else if (\n Array.isArray(doc['@context']) &&\n !doc['@context'].includes('https://w3id.org/did/v1') &&\n !doc['@context'].includes('https://www.w3.org/ns/did/v1')\n ) {\n doc['@context'].push('https://w3id.org/did/v1')\n }\n response.didDocument = doc\n break\n case DID_JSON:\n response.didDocument = doc\n break\n default:\n delete response.didResolutionMetadata.contentType\n response.didResolutionMetadata.error = 'representationNotSupported'\n break\n }\n } catch (e: any) {\n response.didResolutionMetadata.error = 'invalidDid'\n response.didResolutionMetadata.message = e.toString()\n }\n return response\n },\n }\n}\n\nconst determineContentType = (options: DIDResolutionOptions): string => {\n const contentType = options.accept || DID_JSON\n if (contentType !== DID_JSON && contentType !== DID_LD_JSON) {\n throw Error(`Only ${DID_JSON} and ${DID_LD_JSON} are supported. Provided: ${contentType}`)\n }\n return contentType\n}\nexport default { getResolver }\n","import { DIDDocument, DIDResolutionOptions } from 'did-resolver'\nimport fetch from 'cross-fetch'\n\nexport const EBSI_TEST_REGISTRY = 'https://api-test.ebsi.eu/did-registry/v5/identifiers'\nexport const EBSI_PILOT_REGISTRY_V5 = 'https://api-pilot.ebsi.eu/did-registry/v5'\nexport const EBSI_CONFORMANCE_REGISTRY_V5 = 'https://api-conformance.ebsi.eu/did-registry/v5/identifiers'\n\nexport const EBSI_PILOT_REGISTRY_V4 = 'https://api-pilot.ebsi.eu/did-registry/v4'\nexport const EBSI_CONFORMANCE_REGISTRY_V4 = 'https://api-conformance.ebsi.eu/did-registry/v4/identifiers'\n\ntype EBSIResolutionOptions = DIDResolutionOptions & {\n noFallbackRegistries?: boolean\n noEnvVarRegistry?: boolean\n registries?: string[]\n registry?: string\n}\nexport const keyToDidDoc = async (did: string, contentType: string, options: EBSIResolutionOptions): Promise<DIDDocument> => {\n const registries = determineRegistries(options)\n for (const registry of registries) {\n try {\n const didDocument = await keyToDidDocImpl(did, contentType, registry, options)\n if (didDocument && !('error' in didDocument)) {\n return didDocument\n }\n } catch (error: unknown) {\n console.log(error)\n }\n }\n return Promise.reject(new Error(`Could not resolve DID ${did} using registries: ${JSON.stringify(registries)}`))\n}\n\nconst keyToDidDocImpl = async (did: string, contentType: string, registry: string, options: DIDResolutionOptions): Promise<DIDDocument> => {\n const uri = didURI(did, registry)\n const response = await fetch(uri)\n if (response.status >= 400) {\n throw Error(await response.json())\n }\n return (await response.json()) as DIDDocument\n}\n\nconst didURI = (did: string, registry: string) => {\n let uri = registry\n if (uri.endsWith('/')) {\n uri = uri.substring(0, uri.length - 1)\n }\n if (!uri.includes('identifiers')) {\n uri += '/identifiers'\n }\n return `${uri}/${did}`\n}\n\nconst determineRegistries = (options: EBSIResolutionOptions): string[] => {\n let registries = new Set<string>()\n if (options.registries && Array.isArray(options.registries) && options.registries.length > 0) {\n options.registries.forEach(registries.add)\n }\n if (options.registry) {\n registries.add(options.registry)\n }\n if (options.noEnvVarRegistry !== true && process.env.EBSI_DEFAULT_REGISTRY) {\n registries.add(process.env.EBSI_DEFAULT_REGISTRY)\n }\n if (options.noFallbackRegistries !== true) {\n registries.add(EBSI_PILOT_REGISTRY_V5)\n registries.add(EBSI_CONFORMANCE_REGISTRY_V5)\n registries.add(EBSI_PILOT_REGISTRY_V4)\n registries.add(EBSI_CONFORMANCE_REGISTRY_V4)\n registries.add(EBSI_TEST_REGISTRY)\n }\n if (registries.size === 0) {\n throw Error('Please provide a registry as an option, a fallback registry or use an environment variable (EBSI_DEFAULT_REGISTRY)')\n }\n return Array.from(registries)\n}\n\nexport default { keyToDidDoc }\n"],"mappings":"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","names":["EBSI_TEST_REGISTRY","EBSI_PILOT_REGISTRY_V5","EBSI_CONFORMANCE_REGISTRY_V5","EBSI_PILOT_REGISTRY_V4","EBSI_CONFORMANCE_REGISTRY_V4","keyToDidDoc","did","contentType","options","registries","determineRegistries","registry","didDocument","keyToDidDocImpl","error","console","log","Promise","reject","Error","JSON","stringify","uri","didURI","response","fetch","status","json","endsWith","substring","length","includes","Set","Array","isArray","forEach","add","noEnvVarRegistry","process","env","EBSI_DEFAULT_REGISTRY","noFallbackRegistries","size","from","config","DID_LD_JSON","DID_JSON","methodToDriverMap","ebsi","ebsiV1","getResolver","did","parsed","r","options","response","didResolutionMetadata","didDocument","didDocumentMetadata","contentType","determineContentType","driver","method","doc","keyToDidDoc","Array","isArray","includes","push","error","e","message","toString","accept","Error"]}