@sphereon/ssi-sdk.uni-resolver-registrar-api
Version:
1 lines • 28.8 kB
Source Map (JSON)
{"version":3,"sources":["../src/index.ts","../src/api-functions.ts","../src/uni-resolver-api-server.ts","../src/did-web-server.ts"],"sourcesContent":["/**\n * @public\n */\nexport * from './types'\nexport * from './api-functions'\nexport * from './uni-resolver-api-server'\nexport * from './did-web-server'\n","import { DIDResolutionResult } from '@sphereon/did-uni-client'\nimport { getAgentDIDMethods, toDidDocument, toDidResolutionResult } from '@sphereon/ssi-sdk-ext.did-utils'\nimport { JwkKeyUse } from '@sphereon/ssi-sdk-ext.key-utils'\nimport { checkAuth, ISingleEndpointOpts, sendErrorResponse } from '@sphereon/ssi-express-support'\nimport { LinkedVPServiceEntry } from '@sphereon/ssi-sdk.linked-vp'\nimport { parseDid } from '@sphereon/ssi-types'\nimport { IIdentifier } from '@veramo/core'\nimport { Service } from 'did-resolver'\nimport { Request, Response, Router } from 'express'\nimport { v4 } from 'uuid'\nimport {\n CreateState,\n DidRegistrationCreateRequest,\n DidRegistrationDeactivateRequest,\n DidStateValue,\n ICreateDidEndpointOpts,\n IGlobalDidWebEndpointOpts,\n IRequiredContext,\n IResolveEndpointOpts,\n} from './types'\nimport Debug from 'debug'\n\nconst debug = Debug('sphereon:ssi-sdk:uni-resolver-registrar')\n\nexport function createDidEndpoint(router: Router, context: IRequiredContext, opts?: ICreateDidEndpointOpts) {\n if (opts?.enabled === false) {\n console.log(`create DID endpoint is disabled`)\n return\n }\n const path = opts?.path ?? '/identifiers'\n\n router.post(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => {\n try {\n const createRequest: DidRegistrationCreateRequest = request.body\n if (!createRequest) {\n return sendErrorResponse(response, 400, 'No DID create request present')\n }\n const did = createRequest.did\n const didMethod = (request.query.method as string) ?? (did ? parseDid(did).method : opts?.defaultMethod)\n const allDidMethods = await getAgentDIDMethods(context)\n if (!didMethod) {\n return sendErrorResponse(response, 400, 'No DID method supplied or deductible')\n } else if (did && parseDid(did).method != didMethod) {\n return sendErrorResponse(response, 400, 'DID method did not match method param')\n } else if (!allDidMethods.includes(didMethod)) {\n return sendErrorResponse(response, 400, 'DID method not supported')\n }\n const provider = `did:${didMethod}`\n const jobId = createRequest.jobId ?? v4()\n let alias: string | undefined = undefined\n if (didMethod === 'web') {\n if (!did) {\n return sendErrorResponse(response, 400, 'Please provide a value for \"did\" in the request body when creating a DID web')\n }\n alias = parseDid(did).id\n if (!alias) {\n return sendErrorResponse(response, 400, 'Could not determine alias from did:web DID value: ' + did)\n }\n }\n\n let identifier: IIdentifier | undefined\n let state: DidStateValue | undefined\n if (opts?.noErrorOnExistingDid && did) {\n try {\n identifier = await context.agent.didManagerGet({ did })\n state = 'exists'\n } catch (e) {\n // Okay, since we will create a new one\n }\n }\n if (identifier === undefined) {\n if (createRequest.options.storeSecrets === false) {\n return sendErrorResponse(response, 400, 'Only storeSecrets mode is supported currently')\n /*const memoryKMS = new SphereonKeyManager({\n store: new MemoryKeyStore(),\n kms: {'mem': new KeyManagementSystem(new MemoryPrivateKeyStore())}\n })\n identifier = await memoryKMS..didManagerCreate({provider, alias, kms: opts?.kms})*/\n } else if (createRequest.options.storeSecrets || opts?.storeSecrets) {\n identifier = await context.agent.didManagerCreate({ provider, alias, kms: opts?.kms })\n state = 'finished'\n } else {\n return sendErrorResponse(response, 400, 'Only storeSecrets mode is supported currently')\n }\n }\n if (!identifier || !state) {\n return sendErrorResponse(response, 400, 'An identifier and did state should be present at this point')\n }\n\n const didDocument = toDidDocument(identifier, { did, use: [JwkKeyUse.Signature, JwkKeyUse.Encryption] })\n const createState: CreateState = {\n jobId,\n didState: {\n did: identifier.did,\n state,\n didDocument,\n },\n }\n response.statusCode = 200\n return response.send(createState)\n } catch (e) {\n return sendErrorResponse(response, 500, e.message as string, e)\n }\n })\n}\n\nexport function getDidMethodsEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts) {\n if (opts?.enabled === false) {\n console.log(`Get DID methods endpoint is disabled`)\n return\n }\n const path = opts?.path ?? '/methods'\n router.get(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => {\n try {\n const methods = await getAgentDIDMethods(context) // these are already without the 'did:' prefix\n response.statusCode = 200\n return response.send(methods)\n } catch (e) {\n return sendErrorResponse(response, 500, e.message as string, e)\n }\n })\n}\n\nasync function agentDidToResolutionResult(context: IRequiredContext, did: string) {\n try {\n const identifier = await context.agent.didManagerGet({ did })\n debug(JSON.stringify(identifier, null, 2))\n return toDidResolutionResult(identifier, {\n did,\n supportedMethods: await getAgentDIDMethods(context),\n })\n } catch (error) {\n console.log(JSON.stringify(error.message))\n return {\n didDocument: null,\n didResolutionMetadata: {\n error: 'notFound',\n },\n didDocumentMetadata: {},\n }\n }\n}\n\nexport function resolveDidEndpoint(router: Router, context: IRequiredContext, opts?: IResolveEndpointOpts) {\n if (opts?.enabled === false) {\n console.log(`Resolve DID endpoint is disabled`)\n return\n }\n const path = opts?.path ?? '/identifiers/:identifier'\n router.get(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => {\n try {\n const did = request.params.identifier\n if (!did) {\n return sendErrorResponse(response, 400, 'no identifier provided')\n }\n const mode = request.query.mode?.toString().toLowerCase() ?? opts?.mode?.toLowerCase() ?? 'hybrid'\n let resolutionResult: DIDResolutionResult | undefined\n if (mode === 'local' || mode === 'hybrid') {\n resolutionResult = await agentDidToResolutionResult(context, did)\n }\n if (mode !== 'local' && !resolutionResult?.didDocument) {\n resolutionResult = await context.agent.resolveDid({ didUrl: did })\n }\n\n response.statusCode = 200\n return response.send(resolutionResult)\n } catch (e) {\n return sendErrorResponse(response, 500, e.message as string, e)\n }\n })\n}\n\n/**\n * @param router\n * @param context\n * @param opts\n */\nexport function deleteDidEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts) {\n if (opts?.enabled === false) {\n console.log(`Deactivate DID endpoint is disabled`)\n return\n }\n router.delete(opts?.path ?? '/identifiers/:identifier', checkAuth(opts?.endpoint), async (request: Request, response: Response) => {\n try {\n const did = request.params.identifier\n if (!did) {\n return sendErrorResponse(response, 400, 'no DID provided')\n }\n\n const result = await context.agent.didManagerDelete({ did })\n if (!result) {\n return sendErrorResponse(response, 404, `id ${did} not found`)\n }\n response.statusCode = 200\n return response.send()\n } catch (e) {\n return sendErrorResponse(response, 500, e.message as string, e)\n }\n })\n}\n\nexport function deactivateDidEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts) {\n if (opts?.enabled === false) {\n console.log('Deactivate DID endpoint is disabled')\n return\n }\n\n router.post(opts?.path ?? '/deactivate', checkAuth(opts?.endpoint), async (request: Request, response: Response) => {\n try {\n const deactivateRequest: DidRegistrationDeactivateRequest = request.body\n if (!deactivateRequest) {\n return sendErrorResponse(response, 400, 'Invalid request body', { state: 'failed' })\n }\n\n const { did, jobId = v4() } = deactivateRequest\n if (!did) {\n return sendErrorResponse(response, 400, 'No DID provided', { state: 'failed' })\n }\n\n const result = await context.agent.didManagerDelete({ did })\n if (!result) {\n return sendErrorResponse(response, 404, `DID ${did} not found`, { state: 'failed' })\n }\n\n response.status(200).json({\n state: 'finished',\n did,\n jobId,\n })\n return response.send()\n } catch (e) {\n return sendErrorResponse(response, 500, e.message as string, { state: 'failed', errorDetails: e })\n }\n })\n}\n\n/**\n * Endpoint that eases DID web resolution, by mapping did-web paths to stored agent DIDs.\n *\n * Typically, you will have a reverse proxy or load balancer in front of this endpoint.\n *\n * Some examples of how did:web behaves:\n * did:web:example.com resolves to https://example.com/.well-known/did.json\n * did:web:example.com:sub:paths resolves to https://example.com/sub/paths/did.json\n *\n * This endpoint translate both forms by looking at the paths that end in /did.json.\n *\n * @param router\n * @param context\n * @param opts\n */\nexport function didWebDomainEndpoint(router: Router, context: IRequiredContext, opts?: IGlobalDidWebEndpointOpts) {\n if (opts?.enabled === false) {\n console.log(`DID Web domain resolution endpoint is disabled`)\n return\n }\n router.get(opts?.path ?? ':path(*)/did.json', checkAuth(opts?.endpoint), async (request: Request, response: Response) => {\n try {\n const path = request.params.path\n if (!path || path.length === 0) {\n return sendErrorResponse(response, 404, 'Not found')\n }\n let did: string\n did = `did:web:${opts?.hostname?.replace('https://', '')?.replace('http://', '') ?? request.hostname}`\n if (path !== '/.well-known') {\n if (opts?.disableSubPaths) {\n return sendErrorResponse(response, 404, 'Not found')\n }\n const suffix = path.replace(/\\//g, ':').replace(/%2F/g, ':')\n if (!suffix.startsWith(':')) {\n did += ':'\n }\n did += suffix\n } else if (opts?.disableWellKnown) {\n return sendErrorResponse(response, 404, 'Not found')\n }\n\n const resolutionResult = await agentDidToResolutionResult(context, did)\n if (!resolutionResult || !resolutionResult.didDocument || resolutionResult?.didResolutionMetadata?.error === 'notFound') {\n return sendErrorResponse(response, 404, 'Not found')\n }\n\n const serviceEntries: Array<LinkedVPServiceEntry> = await context.agent.lvpGetServiceEntries({ subjectDid: did })\n if (resolutionResult?.didDocument && serviceEntries) {\n // Preserve existing services that are not LinkedVerifiablePresentation type\n const existingServices = resolutionResult.didDocument.service || []\n const nonLVPServices = existingServices.filter((service) => service.type !== 'LinkedVerifiablePresentation')\n\n // Combine non-LVP services with the new LVP service entries\n resolutionResult.didDocument.service = [...nonLVPServices, ...serviceEntries] as Array<Service>\n }\n\n // Enrich services with metadata from the database (for eInvoicing services)\n // Also remove null/undefined values from service objects\n const cleanService = (svc: Service): Service => {\n return Object.fromEntries(Object.entries(svc).filter(([_, v]) => v !== null && v !== undefined)) as Service\n }\n\n if (resolutionResult?.didDocument?.service && typeof context.agent.getServiceMetadata === 'function') {\n const enrichedServices = await Promise.all(\n resolutionResult.didDocument.service.map(async (service: Service) => {\n try {\n const metadata = await context.agent.getServiceMetadata({\n serviceId: service.id as string,\n did,\n })\n if (metadata?.einvoice) {\n return cleanService({ ...service, einvoice: metadata.einvoice })\n }\n } catch (e) {\n // Service metadata not available, continue with basic service\n debug(`No metadata found for service ${service.id}`)\n }\n return cleanService(service)\n }),\n )\n resolutionResult.didDocument.service = enrichedServices as Array<Service>\n } else if (resolutionResult?.didDocument?.service) {\n // Clean services even without metadata enrichment\n resolutionResult.didDocument.service = resolutionResult.didDocument.service.map(cleanService) as Array<Service>\n }\n\n response.statusCode = 200\n return response.send(resolutionResult.didDocument)\n } catch (e) {\n return sendErrorResponse(response, 500, e.message as string, e)\n }\n })\n}\n","import { agentContext } from '@sphereon/ssi-sdk.core'\nimport { copyGlobalAuthToEndpoints, ExpressSupport } from '@sphereon/ssi-express-support'\nimport { TAgent } from '@veramo/core'\n\nimport express, { Express, Router } from 'express'\nimport { createDidEndpoint, deleteDidEndpoint, deactivateDidEndpoint, getDidMethodsEndpoint, resolveDidEndpoint } from './api-functions'\nimport { IDidAPIOpts, IRequiredPlugins } from './types'\n\nexport class UniResolverApiServer {\n get router(): express.Router {\n return this._router\n }\n\n private readonly _express: Express\n private readonly _agent: TAgent<IRequiredPlugins>\n private readonly _opts?: IDidAPIOpts\n private readonly _router: Router\n\n constructor(args: { agent: TAgent<IRequiredPlugins>; expressSupport: ExpressSupport; opts?: IDidAPIOpts }) {\n const { agent, opts } = args\n this._agent = agent\n copyGlobalAuthToEndpoints({ opts, keys: ['getDidMethods', 'createDid', 'resolveDid', 'deactivateDid'] })\n this._opts = opts\n this._express = args.expressSupport.express\n this._router = express.Router()\n const context = agentContext(agent)\n const features = opts?.enableFeatures ?? ['did-resolve', 'did-persist']\n console.log(`DID Uni Resolver and Registrar API enabled, with features: ${JSON.stringify(features)}}`)\n\n // DID endpoints\n if (features.includes('did-resolve')) {\n resolveDidEndpoint(this.router, context, opts?.endpointOpts?.resolveDid)\n getDidMethodsEndpoint(this.router, context, opts?.endpointOpts?.getDidMethods)\n }\n if (features.includes('did-persist')) {\n createDidEndpoint(this.router, context, opts?.endpointOpts?.createDid)\n deleteDidEndpoint(this.router, context, opts?.endpointOpts?.deactivateDid) // not in spec.\n deactivateDidEndpoint(this.router, context, opts?.endpointOpts?.deactivateDid)\n }\n this._express.use(opts?.endpointOpts?.basePath ?? '', this.router)\n }\n\n get agent(): TAgent<IRequiredPlugins> {\n return this._agent\n }\n\n get opts(): IDidAPIOpts | undefined {\n return this._opts\n }\n\n get express(): Express {\n return this._express\n }\n}\n","import { agentContext } from '@sphereon/ssi-sdk.core'\nimport { ExpressSupport } from '@sphereon/ssi-express-support'\nimport { TAgent } from '@veramo/core'\n\nimport express, { Express, Router } from 'express'\nimport { didWebDomainEndpoint } from './api-functions'\nimport { IDidWebServiceOpts, IRequiredPlugins } from './types'\n\nexport class DidWebServer {\n get router(): express.Router | undefined {\n return this._router\n }\n\n private readonly _express: Express | undefined\n private readonly _agent: TAgent<IRequiredPlugins> | undefined\n private readonly _opts?: IDidWebServiceOpts\n private readonly _router: Router | undefined\n\n constructor(args: { agent: TAgent<IRequiredPlugins>; expressSupport: ExpressSupport; opts?: IDidWebServiceOpts }) {\n const { agent, opts } = args\n const features = opts?.enableFeatures ?? []\n if (!features.includes('did-web-global-resolution')) {\n console.log('did:web hosting service NOT enabled')\n return\n }\n\n this._agent = agent\n if (opts?.globalAuth) {\n copyGlobalAuthToEndpoint(opts, 'endpointOpts')\n }\n\n this._opts = opts\n this._express = args.expressSupport.express\n this._router = express.Router()\n\n const context = agentContext(agent)\n\n console.log(`did:web hosting service enabled`)\n\n didWebDomainEndpoint(this.router!, context, opts?.endpointOpts)\n this._express.use(this.router!)\n }\n\n get agent(): TAgent<IRequiredPlugins> | undefined {\n return this._agent\n }\n\n get opts(): IDidWebServiceOpts | undefined {\n return this._opts\n }\n\n get express(): Express | undefined {\n return this._express\n }\n}\n\nfunction copyGlobalAuthToEndpoint(opts: IDidWebServiceOpts, key: string) {\n if (opts?.globalAuth) {\n // @ts-ignore\n opts[key] = {\n ...opts?.globalAuth,\n // @ts-ignore\n ...opts[key],\n }\n }\n}\n"],"mappings":"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","names":["import_ssi_sdk_ext","debug","Debug","createDidEndpoint","router","context","opts","enabled","console","log","path","post","checkAuth","endpoint","request","response","createRequest","body","sendErrorResponse","did","didMethod","query","method","parseDid","defaultMethod","allDidMethods","getAgentDIDMethods","includes","provider","jobId","v4","alias","undefined","id","identifier","state","noErrorOnExistingDid","agent","didManagerGet","e","options","storeSecrets","didManagerCreate","kms","didDocument","toDidDocument","use","JwkKeyUse","Signature","Encryption","createState","didState","statusCode","send","message","getDidMethodsEndpoint","get","methods","agentDidToResolutionResult","JSON","stringify","toDidResolutionResult","supportedMethods","error","didResolutionMetadata","didDocumentMetadata","resolveDidEndpoint","params","mode","toString","toLowerCase","resolutionResult","resolveDid","didUrl","deleteDidEndpoint","delete","result","didManagerDelete","deactivateDidEndpoint","deactivateRequest","status","json","errorDetails","didWebDomainEndpoint","length","hostname","replace","disableSubPaths","suffix","startsWith","disableWellKnown","serviceEntries","lvpGetServiceEntries","subjectDid","existingServices","service","nonLVPServices","filter","type","cleanService","svc","Object","fromEntries","entries","_","v","getServiceMetadata","enrichedServices","Promise","all","map","metadata","serviceId","einvoice","import_ssi_express_support","UniResolverApiServer","router","_router","_express","_agent","_opts","args","agent","opts","copyGlobalAuthToEndpoints","keys","expressSupport","express","Router","context","agentContext","features","enableFeatures","console","log","JSON","stringify","includes","resolveDidEndpoint","endpointOpts","resolveDid","getDidMethodsEndpoint","getDidMethods","createDidEndpoint","createDid","deleteDidEndpoint","deactivateDid","deactivateDidEndpoint","use","basePath","import_ssi_sdk","import_express","DidWebServer","router","_router","_express","_agent","_opts","args","agent","opts","features","enableFeatures","includes","console","log","globalAuth","copyGlobalAuthToEndpoint","expressSupport","express","Router","context","agentContext","didWebDomainEndpoint","endpointOpts","use","key"]}