@sphereon/ssi-sdk.public-key-hosting 0.34.1-feature.SSISDK.17.bitstring.sl.2 → 0.34.1-next.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +12 -12
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/public-key-hosting.ts","../src/api-functions.ts","../src/environment.ts","../src/functions.ts"],"sourcesContent":["/**\n * @public\n */\nimport { Loggers } from '@sphereon/ssi-types'\n\nexport const logger = Loggers.DEFAULT.get('sphereon:public-key-hosting')\nexport * from './public-key-hosting'\nexport * from './types'\nexport * from './functions'\nexport * from './api-functions'\n","import { ExpressSupport } from '@sphereon/ssi-express-support'\nimport { agentContext } from '@sphereon/ssi-sdk.core'\nimport { TAgent } from '@veramo/core'\n\nimport express, { Express, Router } from 'express'\nimport { getAllJWKSEndpoint, getDIDJWKSEndpoint } from './api-functions'\nimport { logger } from './index'\nimport { IRequiredPlugins, IPublicKeyHostingOpts } from './types'\n\nexport class PublicKeyHosting {\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?: IPublicKeyHostingOpts\n private readonly _router: Router\n\n constructor(args: { agent: TAgent<IRequiredPlugins>; expressSupport: ExpressSupport; opts?: IPublicKeyHostingOpts }) {\n const { agent, opts } = args\n this._agent = agent\n if (opts?.endpointOpts?.globalAuth) {\n copyGlobalAuthToEndpoint(opts, 'allJWKS')\n copyGlobalAuthToEndpoint(opts, 'DIDJWKS')\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 const features = opts?.hostingOpts?.enableFeatures ?? ['all-jwks', 'did-jwks']\n logger.info(`Public key hosting enabled, with features: ${JSON.stringify(features)}`)\n\n // Credential endpoints\n if (features.includes('all-jwks')) {\n getAllJWKSEndpoint(this.router, context, {\n ...opts?.endpointOpts?.allJWKS,\n })\n }\n if (features.includes('did-jwks')) {\n getDIDJWKSEndpoint(this.router, context, opts?.endpointOpts?.DIDJWKS)\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(): IPublicKeyHostingOpts | undefined {\n return this._opts\n }\n\n get express(): Express {\n return this._express\n }\n}\n\nfunction copyGlobalAuthToEndpoint(opts: IPublicKeyHostingOpts, key: string) {\n if (opts?.endpointOpts?.globalAuth) {\n // @ts-ignore\n opts.endpointOpts[key] = {\n // @ts-ignore\n ...opts.endpointOpts[key],\n // @ts-ignore\n endpoint: { ...opts.endpointOpts.globalAuth, ...opts.endpointOpts[key]?.endpoint },\n }\n }\n}\n","import { checkAuth, ISingleEndpointOpts, sendErrorResponse } from '@sphereon/ssi-express-support'\nimport { ISphereonKeyManager } from '@sphereon/ssi-sdk-ext.key-manager'\nimport { contextHasPlugin } from '@sphereon/ssi-sdk.agent-config'\nimport { Request, Response, Router } from 'express'\nimport { JKWS_HOSTING_ALL_KEYS_PATH, JWKS_HOSTING_DID_KEYS_PATH } from './environment'\nimport { toJWKS } from './functions'\nimport { logger } from './index'\nimport { IRequiredContext } from './types'\n\nexport function getAllJWKSEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts) {\n if (opts?.enabled === false) {\n logger.info(`Get all JWKS endpoint is disabled`)\n return\n }\n\n const path = opts?.path ?? JKWS_HOSTING_ALL_KEYS_PATH\n logger.info(`All JWKS endpoint enabled, path ${path}`)\n router.get(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => {\n try {\n if (!contextHasPlugin<ISphereonKeyManager>(context, 'keyManagerListKeys')) {\n return sendErrorResponse(\n response,\n 500,\n 'Key manager plugin that can list keys is not found. Please enable the Sphereon Key Manager plugin if you want to use this endpoint',\n )\n }\n response.statusCode = 202\n const keys = await context.agent.keyManagerListKeys()\n return response.send(toJWKS({ keys }))\n } catch (e) {\n return sendErrorResponse(response, 500, e.message as string, e)\n }\n })\n}\n\nexport function getDIDJWKSEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts) {\n if (opts?.enabled === false) {\n logger.info(`Get DID JWKS endpoint is disabled`)\n return\n }\n const path = opts?.path ?? JWKS_HOSTING_DID_KEYS_PATH\n console.info(`DID JWKS endpoint enabled, path ${path}`)\n router.get(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => {\n const did = request.params.did\n try {\n console.log(`Will get JWKS for DID ${did}`)\n const resolution = await context.agent.identifierManagedGetByDid({ identifier: did })\n if (!resolution.identifier) {\n return sendErrorResponse(response, 404, `DID ${did} not found`)\n }\n response.statusCode = 200\n return response.send(toJWKS({ keys: resolution.keys }))\n } catch (e) {\n console.log(e)\n return sendErrorResponse(response, 404, `DID ${did} not found`)\n }\n })\n}\n","export const JKWS_HOSTING_ALL_KEYS_PATH = process.env.JWKS_HOSTING_BASE_PATH ?? '/.well-known/jwks.json'\nexport const JWKS_HOSTING_DID_KEYS_PATH = process.env.JWKS_HOSTING_DID_PATH ?? '/.well-known/jwks/dids/:did'\n","import { toJwk } from '@sphereon/ssi-sdk-ext.key-utils'\nimport { JWK } from '@sphereon/ssi-types'\nimport { IIdentifier, IKey } from '@veramo/core'\nimport { asArray } from '@veramo/utils'\nimport { JWKS_HOSTING_DID_KEYS_PATH } from './environment'\n\nexport const toJWKS = (args: { keys: IKey | IKey[] }): { keys: Array<JWK> } => {\n const providedKeys = asArray(args.keys)\n const keys = providedKeys.map((key) =>\n toJwk(key.publicKeyHex, key.type, {\n key,\n isPrivateKey: false,\n noKidThumbprint: false,\n }),\n )\n return {\n keys,\n }\n}\n\nexport const jwksURIFromIdentifier = (args: { identifier: IIdentifier; basePath?: string; baseURL?: string; onlyEncodeDid?: boolean }) => {\n const { onlyEncodeDid, identifier, baseURL } = args\n let basePath = args.basePath ?? JWKS_HOSTING_DID_KEYS_PATH\n const did = encodeURIComponent(identifier.did)\n if (onlyEncodeDid) {\n return did\n }\n if (basePath.includes(':did')) {\n basePath = basePath.replace(':did', did)\n } else {\n basePath += basePath.endsWith('/') ? did : `/${did}`\n }\n if (baseURL) {\n return baseURL + baseURL.endsWith('/') ? basePath : `/${basePath}`\n }\n return basePath\n}\n"],"mappings":"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","names":["import_ssi_sdk","JKWS_HOSTING_ALL_KEYS_PATH","process","env","JWKS_HOSTING_BASE_PATH","JWKS_HOSTING_DID_KEYS_PATH","JWKS_HOSTING_DID_PATH","toJWKS","args","providedKeys","asArray","keys","map","key","toJwk","publicKeyHex","type","isPrivateKey","noKidThumbprint","jwksURIFromIdentifier","onlyEncodeDid","identifier","baseURL","basePath","JWKS_HOSTING_DID_KEYS_PATH","did","encodeURIComponent","includes","replace","endsWith","getAllJWKSEndpoint","router","context","opts","enabled","logger","info","path","JKWS_HOSTING_ALL_KEYS_PATH","get","checkAuth","endpoint","request","response","contextHasPlugin","sendErrorResponse","statusCode","keys","agent","keyManagerListKeys","send","toJWKS","e","message","getDIDJWKSEndpoint","JWKS_HOSTING_DID_KEYS_PATH","console","did","params","log","resolution","identifierManagedGetByDid","identifier","PublicKeyHosting","router","_router","_express","_agent","_opts","constructor","args","agent","opts","endpointOpts","globalAuth","copyGlobalAuthToEndpoint","expressSupport","express","Router","context","agentContext","features","hostingOpts","enableFeatures","logger","info","JSON","stringify","includes","getAllJWKSEndpoint","allJWKS","getDIDJWKSEndpoint","DIDJWKS","use","basePath","key","endpoint","logger","Loggers","DEFAULT","get"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/public-key-hosting.ts","../src/api-functions.ts","../src/environment.ts","../src/functions.ts"],"sourcesContent":["/**\n * @public\n */\nimport { Loggers } from '@sphereon/ssi-types'\n\nexport const logger = Loggers.DEFAULT.get('sphereon:public-key-hosting')\nexport * from './public-key-hosting'\nexport * from './types'\nexport * from './functions'\nexport * from './api-functions'\n","import { ExpressSupport } from '@sphereon/ssi-express-support'\nimport { agentContext } from '@sphereon/ssi-sdk.core'\nimport { TAgent } from '@veramo/core'\n\nimport express, { Express, Router } from 'express'\nimport { getAllJWKSEndpoint, getDIDJWKSEndpoint } from './api-functions'\nimport { logger } from './index'\nimport { IRequiredPlugins, IPublicKeyHostingOpts } from './types'\n\nexport class PublicKeyHosting {\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?: IPublicKeyHostingOpts\n private readonly _router: Router\n\n constructor(args: { agent: TAgent<IRequiredPlugins>; expressSupport: ExpressSupport; opts?: IPublicKeyHostingOpts }) {\n const { agent, opts } = args\n this._agent = agent\n if (opts?.endpointOpts?.globalAuth) {\n copyGlobalAuthToEndpoint(opts, 'allJWKS')\n copyGlobalAuthToEndpoint(opts, 'DIDJWKS')\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 const features = opts?.hostingOpts?.enableFeatures ?? ['all-jwks', 'did-jwks']\n logger.info(`Public key hosting enabled, with features: ${JSON.stringify(features)}`)\n\n // Credential endpoints\n if (features.includes('all-jwks')) {\n getAllJWKSEndpoint(this.router, context, {\n ...opts?.endpointOpts?.allJWKS,\n })\n }\n if (features.includes('did-jwks')) {\n getDIDJWKSEndpoint(this.router, context, opts?.endpointOpts?.DIDJWKS)\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(): IPublicKeyHostingOpts | undefined {\n return this._opts\n }\n\n get express(): Express {\n return this._express\n }\n}\n\nfunction copyGlobalAuthToEndpoint(opts: IPublicKeyHostingOpts, key: string) {\n if (opts?.endpointOpts?.globalAuth) {\n // @ts-ignore\n opts.endpointOpts[key] = {\n // @ts-ignore\n ...opts.endpointOpts[key],\n // @ts-ignore\n endpoint: { ...opts.endpointOpts.globalAuth, ...opts.endpointOpts[key]?.endpoint },\n }\n }\n}\n","import { checkAuth, ISingleEndpointOpts, sendErrorResponse } from '@sphereon/ssi-express-support'\nimport { ISphereonKeyManager } from '@sphereon/ssi-sdk-ext.key-manager'\nimport { contextHasPlugin } from '@sphereon/ssi-sdk.agent-config'\nimport { Request, Response, Router } from 'express'\nimport { JKWS_HOSTING_ALL_KEYS_PATH, JWKS_HOSTING_DID_KEYS_PATH } from './environment'\nimport { toJWKS } from './functions'\nimport { logger } from './index'\nimport { IRequiredContext } from './types'\n\nexport function getAllJWKSEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts) {\n if (opts?.enabled === false) {\n logger.info(`Get all JWKS endpoint is disabled`)\n return\n }\n\n const path = opts?.path ?? JKWS_HOSTING_ALL_KEYS_PATH\n logger.info(`All JWKS endpoint enabled, path ${path}`)\n router.get(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => {\n try {\n if (!contextHasPlugin<ISphereonKeyManager>(context, 'keyManagerListKeys')) {\n return sendErrorResponse(\n response,\n 500,\n 'Key manager plugin that can list keys is not found. Please enable the Sphereon Key Manager plugin if you want to use this endpoint',\n )\n }\n response.statusCode = 202\n const keys = await context.agent.keyManagerListKeys()\n return response.send(toJWKS({ keys }))\n } catch (e) {\n return sendErrorResponse(response, 500, e.message as string, e)\n }\n })\n}\n\nexport function getDIDJWKSEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts) {\n if (opts?.enabled === false) {\n logger.info(`Get DID JWKS endpoint is disabled`)\n return\n }\n const path = opts?.path ?? JWKS_HOSTING_DID_KEYS_PATH\n console.info(`DID JWKS endpoint enabled, path ${path}`)\n router.get(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => {\n const did = request.params.did\n try {\n console.log(`Will get JWKS for DID ${did}`)\n const resolution = await context.agent.identifierManagedGetByDid({ identifier: did })\n if (!resolution.identifier) {\n return sendErrorResponse(response, 404, `DID ${did} not found`)\n }\n response.statusCode = 200\n return response.send(toJWKS({ keys: resolution.keys }))\n } catch (e) {\n console.log(e)\n return sendErrorResponse(response, 404, `DID ${did} not found`)\n }\n })\n}\n","export const JKWS_HOSTING_ALL_KEYS_PATH = process.env.JWKS_HOSTING_BASE_PATH ?? '/.well-known/jwks.json'\nexport const JWKS_HOSTING_DID_KEYS_PATH = process.env.JWKS_HOSTING_DID_PATH ?? '/.well-known/jwks/dids/:did'\n","import { toJwk } from '@sphereon/ssi-sdk-ext.key-utils'\nimport { JWK } from '@sphereon/ssi-types'\nimport { IIdentifier, IKey } from '@veramo/core'\nimport { asArray } from '@veramo/utils'\nimport { JWKS_HOSTING_DID_KEYS_PATH } from './environment'\n\nexport const toJWKS = (args: { keys: IKey | IKey[] }): { keys: Array<JWK> } => {\n const providedKeys = asArray(args.keys)\n const keys = providedKeys.map((key) =>\n toJwk(key.publicKeyHex, key.type, {\n key,\n isPrivateKey: false,\n noKidThumbprint: false,\n }),\n )\n return {\n keys,\n }\n}\n\nexport const jwksURIFromIdentifier = (args: { identifier: IIdentifier; basePath?: string; baseURL?: string; onlyEncodeDid?: boolean }) => {\n const { onlyEncodeDid, identifier, baseURL } = args\n let basePath = args.basePath ?? JWKS_HOSTING_DID_KEYS_PATH\n const did = encodeURIComponent(identifier.did)\n if (onlyEncodeDid) {\n return did\n }\n if (basePath.includes(':did')) {\n basePath = basePath.replace(':did', did)\n } else {\n basePath += basePath.endsWith('/') ? did : `/${did}`\n }\n if (baseURL) {\n return baseURL + baseURL.endsWith('/') ? basePath : `/${basePath}`\n }\n return basePath\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;AAGA,uBAAwB;;;ACFxB,IAAAA,kBAA6B;AAG7B,qBAAyC;;;ACJzC,iCAAkE;AAElE,qBAAiC;;;ACF1B,IAAMC,6BAA6BC,QAAQC,IAAIC,0BAA0B;AACzE,IAAMC,6BAA6BH,QAAQC,IAAIG,yBAAyB;;;ACD/E,yBAAsB;AAGtB,mBAAwB;AAGjB,IAAMC,SAAS,wBAACC,SAAAA;AACrB,QAAMC,mBAAeC,sBAAQF,KAAKG,IAAI;AACtC,QAAMA,OAAOF,aAAaG,IAAI,CAACC,YAC7BC,0BAAMD,IAAIE,cAAcF,IAAIG,MAAM;IAChCH;IACAI,cAAc;IACdC,iBAAiB;EACnB,CAAA,CAAA;AAEF,SAAO;IACLP;EACF;AACF,GAZsB;AAcf,IAAMQ,wBAAwB,wBAACX,SAAAA;AACpC,QAAM,EAAEY,eAAeC,YAAYC,QAAO,IAAKd;AAC/C,MAAIe,WAAWf,KAAKe,YAAYC;AAChC,QAAMC,MAAMC,mBAAmBL,WAAWI,GAAG;AAC7C,MAAIL,eAAe;AACjB,WAAOK;EACT;AACA,MAAIF,SAASI,SAAS,MAAA,GAAS;AAC7BJ,eAAWA,SAASK,QAAQ,QAAQH,GAAAA;EACtC,OAAO;AACLF,gBAAYA,SAASM,SAAS,GAAA,IAAOJ,MAAM,IAAIA,GAAAA;EACjD;AACA,MAAIH,SAAS;AACX,WAAOA,UAAUA,QAAQO,SAAS,GAAA,IAAON,WAAW,IAAIA,QAAAA;EAC1D;AACA,SAAOA;AACT,GAhBqC;;;AFX9B,SAASO,mBAAmBC,QAAgBC,SAA2BC,MAA0B;AACtG,MAAIA,MAAMC,YAAY,OAAO;AAC3BC,WAAOC,KAAK,mCAAmC;AAC/C;EACF;AAEA,QAAMC,OAAOJ,MAAMI,QAAQC;AAC3BH,SAAOC,KAAK,mCAAmCC,IAAAA,EAAM;AACrDN,SAAOQ,IAAIF,UAAMG,sCAAUP,MAAMQ,QAAAA,GAAW,OAAOC,SAAkBC,aAAAA;AACnE,QAAI;AACF,UAAI,KAACC,iCAAsCZ,SAAS,oBAAA,GAAuB;AACzE,mBAAOa,8CACLF,UACA,KACA,oIAAA;MAEJ;AACAA,eAASG,aAAa;AACtB,YAAMC,OAAO,MAAMf,QAAQgB,MAAMC,mBAAkB;AACnD,aAAON,SAASO,KAAKC,OAAO;QAAEJ;MAAK,CAAA,CAAA;IACrC,SAASK,GAAG;AACV,iBAAOP,8CAAkBF,UAAU,KAAKS,EAAEC,SAAmBD,CAAAA;IAC/D;EACF,CAAA;AACF;AAxBgBtB;AA0BT,SAASwB,mBAAmBvB,QAAgBC,SAA2BC,MAA0B;AACtG,MAAIA,MAAMC,YAAY,OAAO;AAC3BC,WAAOC,KAAK,mCAAmC;AAC/C;EACF;AACA,QAAMC,OAAOJ,MAAMI,QAAQkB;AAC3BC,UAAQpB,KAAK,mCAAmCC,IAAAA,EAAM;AACtDN,SAAOQ,IAAIF,UAAMG,sCAAUP,MAAMQ,QAAAA,GAAW,OAAOC,SAAkBC,aAAAA;AACnE,UAAMc,MAAMf,QAAQgB,OAAOD;AAC3B,QAAI;AACFD,cAAQG,IAAI,yBAAyBF,GAAAA,EAAK;AAC1C,YAAMG,aAAa,MAAM5B,QAAQgB,MAAMa,0BAA0B;QAAEC,YAAYL;MAAI,CAAA;AACnF,UAAI,CAACG,WAAWE,YAAY;AAC1B,mBAAOjB,8CAAkBF,UAAU,KAAK,OAAOc,GAAAA,YAAe;MAChE;AACAd,eAASG,aAAa;AACtB,aAAOH,SAASO,KAAKC,OAAO;QAAEJ,MAAMa,WAAWb;MAAK,CAAA,CAAA;IACtD,SAASK,GAAG;AACVI,cAAQG,IAAIP,CAAAA;AACZ,iBAAOP,8CAAkBF,UAAU,KAAK,OAAOc,GAAAA,YAAe;IAChE;EACF,CAAA;AACF;AAtBgBH;;;AD1BT,IAAMS,mBAAN,MAAMA;EARb,OAQaA;;;EACX,IAAIC,SAAyB;AAC3B,WAAO,KAAKC;EACd;EAEiBC;EACAC;EACAC;EACAH;EAEjB,YAAYI,MAAyG;AACnH,UAAM,EAAEC,OAAOC,KAAI,IAAKF;AACxB,SAAKF,SAASG;AACd,QAAIC,MAAMC,cAAcC,YAAY;AAClCC,+BAAyBH,MAAM,SAAA;AAC/BG,+BAAyBH,MAAM,SAAA;IACjC;AAEA,SAAKH,QAAQG;AACb,SAAKL,WAAWG,KAAKM,eAAeC;AACpC,SAAKX,UAAUW,eAAAA,QAAQC,OAAM;AAE7B,UAAMC,cAAUC,8BAAaT,KAAAA;AAE7B,UAAMU,WAAWT,MAAMU,aAAaC,kBAAkB;MAAC;MAAY;;AACnEC,WAAOC,KAAK,8CAA8CC,KAAKC,UAAUN,QAAAA,CAAAA,EAAW;AAGpF,QAAIA,SAASO,SAAS,UAAA,GAAa;AACjCC,yBAAmB,KAAKxB,QAAQc,SAAS;QACvC,GAAGP,MAAMC,cAAciB;MACzB,CAAA;IACF;AACA,QAAIT,SAASO,SAAS,UAAA,GAAa;AACjCG,yBAAmB,KAAK1B,QAAQc,SAASP,MAAMC,cAAcmB,OAAAA;IAC/D;AACA,SAAKzB,SAAS0B,IAAIrB,MAAMC,cAAcqB,YAAY,IAAI,KAAK7B,MAAM;EACnE;EAEA,IAAIM,QAAkC;AACpC,WAAO,KAAKH;EACd;EAEA,IAAII,OAA0C;AAC5C,WAAO,KAAKH;EACd;EAEA,IAAIQ,UAAmB;AACrB,WAAO,KAAKV;EACd;AACF;AAEA,SAASQ,yBAAyBH,MAA6BuB,KAAW;AACxE,MAAIvB,MAAMC,cAAcC,YAAY;AAElCF,SAAKC,aAAasB,GAAAA,IAAO;;MAEvB,GAAGvB,KAAKC,aAAasB,GAAAA;;MAErBC,UAAU;QAAE,GAAGxB,KAAKC,aAAaC;QAAY,GAAGF,KAAKC,aAAasB,GAAAA,GAAMC;MAAS;IACnF;EACF;AACF;AAVSrB;;;ADxDF,IAAMsB,SAASC,yBAAQC,QAAQC,IAAI,6BAAA;","names":["import_ssi_sdk","JKWS_HOSTING_ALL_KEYS_PATH","process","env","JWKS_HOSTING_BASE_PATH","JWKS_HOSTING_DID_KEYS_PATH","JWKS_HOSTING_DID_PATH","toJWKS","args","providedKeys","asArray","keys","map","key","toJwk","publicKeyHex","type","isPrivateKey","noKidThumbprint","jwksURIFromIdentifier","onlyEncodeDid","identifier","baseURL","basePath","JWKS_HOSTING_DID_KEYS_PATH","did","encodeURIComponent","includes","replace","endsWith","getAllJWKSEndpoint","router","context","opts","enabled","logger","info","path","JKWS_HOSTING_ALL_KEYS_PATH","get","checkAuth","endpoint","request","response","contextHasPlugin","sendErrorResponse","statusCode","keys","agent","keyManagerListKeys","send","toJWKS","e","message","getDIDJWKSEndpoint","JWKS_HOSTING_DID_KEYS_PATH","console","did","params","log","resolution","identifierManagedGetByDid","identifier","PublicKeyHosting","router","_router","_express","_agent","_opts","args","agent","opts","endpointOpts","globalAuth","copyGlobalAuthToEndpoint","expressSupport","express","Router","context","agentContext","features","hostingOpts","enableFeatures","logger","info","JSON","stringify","includes","getAllJWKSEndpoint","allJWKS","getDIDJWKSEndpoint","DIDJWKS","use","basePath","key","endpoint","logger","Loggers","DEFAULT","get"]}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/public-key-hosting.ts","../src/api-functions.ts","../src/environment.ts","../src/functions.ts"],"sourcesContent":["/**\n * @public\n */\nimport { Loggers } from '@sphereon/ssi-types'\n\nexport const logger = Loggers.DEFAULT.get('sphereon:public-key-hosting')\nexport * from './public-key-hosting'\nexport * from './types'\nexport * from './functions'\nexport * from './api-functions'\n","import { ExpressSupport } from '@sphereon/ssi-express-support'\nimport { agentContext } from '@sphereon/ssi-sdk.core'\nimport { TAgent } from '@veramo/core'\n\nimport express, { Express, Router } from 'express'\nimport { getAllJWKSEndpoint, getDIDJWKSEndpoint } from './api-functions'\nimport { logger } from './index'\nimport { IRequiredPlugins, IPublicKeyHostingOpts } from './types'\n\nexport class PublicKeyHosting {\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?: IPublicKeyHostingOpts\n private readonly _router: Router\n\n constructor(args: { agent: TAgent<IRequiredPlugins>; expressSupport: ExpressSupport; opts?: IPublicKeyHostingOpts }) {\n const { agent, opts } = args\n this._agent = agent\n if (opts?.endpointOpts?.globalAuth) {\n copyGlobalAuthToEndpoint(opts, 'allJWKS')\n copyGlobalAuthToEndpoint(opts, 'DIDJWKS')\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 const features = opts?.hostingOpts?.enableFeatures ?? ['all-jwks', 'did-jwks']\n logger.info(`Public key hosting enabled, with features: ${JSON.stringify(features)}`)\n\n // Credential endpoints\n if (features.includes('all-jwks')) {\n getAllJWKSEndpoint(this.router, context, {\n ...opts?.endpointOpts?.allJWKS,\n })\n }\n if (features.includes('did-jwks')) {\n getDIDJWKSEndpoint(this.router, context, opts?.endpointOpts?.DIDJWKS)\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(): IPublicKeyHostingOpts | undefined {\n return this._opts\n }\n\n get express(): Express {\n return this._express\n }\n}\n\nfunction copyGlobalAuthToEndpoint(opts: IPublicKeyHostingOpts, key: string) {\n if (opts?.endpointOpts?.globalAuth) {\n // @ts-ignore\n opts.endpointOpts[key] = {\n // @ts-ignore\n ...opts.endpointOpts[key],\n // @ts-ignore\n endpoint: { ...opts.endpointOpts.globalAuth, ...opts.endpointOpts[key]?.endpoint },\n }\n }\n}\n","import { checkAuth, ISingleEndpointOpts, sendErrorResponse } from '@sphereon/ssi-express-support'\nimport { ISphereonKeyManager } from '@sphereon/ssi-sdk-ext.key-manager'\nimport { contextHasPlugin } from '@sphereon/ssi-sdk.agent-config'\nimport { Request, Response, Router } from 'express'\nimport { JKWS_HOSTING_ALL_KEYS_PATH, JWKS_HOSTING_DID_KEYS_PATH } from './environment'\nimport { toJWKS } from './functions'\nimport { logger } from './index'\nimport { IRequiredContext } from './types'\n\nexport function getAllJWKSEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts) {\n if (opts?.enabled === false) {\n logger.info(`Get all JWKS endpoint is disabled`)\n return\n }\n\n const path = opts?.path ?? JKWS_HOSTING_ALL_KEYS_PATH\n logger.info(`All JWKS endpoint enabled, path ${path}`)\n router.get(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => {\n try {\n if (!contextHasPlugin<ISphereonKeyManager>(context, 'keyManagerListKeys')) {\n return sendErrorResponse(\n response,\n 500,\n 'Key manager plugin that can list keys is not found. Please enable the Sphereon Key Manager plugin if you want to use this endpoint',\n )\n }\n response.statusCode = 202\n const keys = await context.agent.keyManagerListKeys()\n return response.send(toJWKS({ keys }))\n } catch (e) {\n return sendErrorResponse(response, 500, e.message as string, e)\n }\n })\n}\n\nexport function getDIDJWKSEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts) {\n if (opts?.enabled === false) {\n logger.info(`Get DID JWKS endpoint is disabled`)\n return\n }\n const path = opts?.path ?? JWKS_HOSTING_DID_KEYS_PATH\n console.info(`DID JWKS endpoint enabled, path ${path}`)\n router.get(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => {\n const did = request.params.did\n try {\n console.log(`Will get JWKS for DID ${did}`)\n const resolution = await context.agent.identifierManagedGetByDid({ identifier: did })\n if (!resolution.identifier) {\n return sendErrorResponse(response, 404, `DID ${did} not found`)\n }\n response.statusCode = 200\n return response.send(toJWKS({ keys: resolution.keys }))\n } catch (e) {\n console.log(e)\n return sendErrorResponse(response, 404, `DID ${did} not found`)\n }\n })\n}\n","export const JKWS_HOSTING_ALL_KEYS_PATH = process.env.JWKS_HOSTING_BASE_PATH ?? '/.well-known/jwks.json'\nexport const JWKS_HOSTING_DID_KEYS_PATH = process.env.JWKS_HOSTING_DID_PATH ?? '/.well-known/jwks/dids/:did'\n","import { toJwk } from '@sphereon/ssi-sdk-ext.key-utils'\nimport { JWK } from '@sphereon/ssi-types'\nimport { IIdentifier, IKey } from '@veramo/core'\nimport { asArray } from '@veramo/utils'\nimport { JWKS_HOSTING_DID_KEYS_PATH } from './environment'\n\nexport const toJWKS = (args: { keys: IKey | IKey[] }): { keys: Array<JWK> } => {\n const providedKeys = asArray(args.keys)\n const keys = providedKeys.map((key) =>\n toJwk(key.publicKeyHex, key.type, {\n key,\n isPrivateKey: false,\n noKidThumbprint: false,\n }),\n )\n return {\n keys,\n }\n}\n\nexport const jwksURIFromIdentifier = (args: { identifier: IIdentifier; basePath?: string; baseURL?: string; onlyEncodeDid?: boolean }) => {\n const { onlyEncodeDid, identifier, baseURL } = args\n let basePath = args.basePath ?? JWKS_HOSTING_DID_KEYS_PATH\n const did = encodeURIComponent(identifier.did)\n if (onlyEncodeDid) {\n return did\n }\n if (basePath.includes(':did')) {\n basePath = basePath.replace(':did', did)\n } else {\n basePath += basePath.endsWith('/') ? did : `/${did}`\n }\n if (baseURL) {\n return baseURL + baseURL.endsWith('/') ? basePath : `/${basePath}`\n }\n return basePath\n}\n"],"mappings":"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","names":["Loggers","agentContext","express","checkAuth","sendErrorResponse","contextHasPlugin","JKWS_HOSTING_ALL_KEYS_PATH","process","env","JWKS_HOSTING_BASE_PATH","JWKS_HOSTING_DID_KEYS_PATH","JWKS_HOSTING_DID_PATH","toJwk","asArray","toJWKS","args","providedKeys","asArray","keys","map","key","toJwk","publicKeyHex","type","isPrivateKey","noKidThumbprint","jwksURIFromIdentifier","onlyEncodeDid","identifier","baseURL","basePath","JWKS_HOSTING_DID_KEYS_PATH","did","encodeURIComponent","includes","replace","endsWith","getAllJWKSEndpoint","router","context","opts","enabled","logger","info","path","JKWS_HOSTING_ALL_KEYS_PATH","get","checkAuth","endpoint","request","response","contextHasPlugin","sendErrorResponse","statusCode","keys","agent","keyManagerListKeys","send","toJWKS","e","message","getDIDJWKSEndpoint","JWKS_HOSTING_DID_KEYS_PATH","console","did","params","log","resolution","identifierManagedGetByDid","identifier","PublicKeyHosting","router","_router","_express","_agent","_opts","constructor","args","agent","opts","endpointOpts","globalAuth","copyGlobalAuthToEndpoint","expressSupport","express","Router","context","agentContext","features","hostingOpts","enableFeatures","logger","info","JSON","stringify","includes","getAllJWKSEndpoint","allJWKS","getDIDJWKSEndpoint","DIDJWKS","use","basePath","key","endpoint","logger","Loggers","DEFAULT","get"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/public-key-hosting.ts","../src/api-functions.ts","../src/environment.ts","../src/functions.ts"],"sourcesContent":["/**\n * @public\n */\nimport { Loggers } from '@sphereon/ssi-types'\n\nexport const logger = Loggers.DEFAULT.get('sphereon:public-key-hosting')\nexport * from './public-key-hosting'\nexport * from './types'\nexport * from './functions'\nexport * from './api-functions'\n","import { ExpressSupport } from '@sphereon/ssi-express-support'\nimport { agentContext } from '@sphereon/ssi-sdk.core'\nimport { TAgent } from '@veramo/core'\n\nimport express, { Express, Router } from 'express'\nimport { getAllJWKSEndpoint, getDIDJWKSEndpoint } from './api-functions'\nimport { logger } from './index'\nimport { IRequiredPlugins, IPublicKeyHostingOpts } from './types'\n\nexport class PublicKeyHosting {\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?: IPublicKeyHostingOpts\n private readonly _router: Router\n\n constructor(args: { agent: TAgent<IRequiredPlugins>; expressSupport: ExpressSupport; opts?: IPublicKeyHostingOpts }) {\n const { agent, opts } = args\n this._agent = agent\n if (opts?.endpointOpts?.globalAuth) {\n copyGlobalAuthToEndpoint(opts, 'allJWKS')\n copyGlobalAuthToEndpoint(opts, 'DIDJWKS')\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 const features = opts?.hostingOpts?.enableFeatures ?? ['all-jwks', 'did-jwks']\n logger.info(`Public key hosting enabled, with features: ${JSON.stringify(features)}`)\n\n // Credential endpoints\n if (features.includes('all-jwks')) {\n getAllJWKSEndpoint(this.router, context, {\n ...opts?.endpointOpts?.allJWKS,\n })\n }\n if (features.includes('did-jwks')) {\n getDIDJWKSEndpoint(this.router, context, opts?.endpointOpts?.DIDJWKS)\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(): IPublicKeyHostingOpts | undefined {\n return this._opts\n }\n\n get express(): Express {\n return this._express\n }\n}\n\nfunction copyGlobalAuthToEndpoint(opts: IPublicKeyHostingOpts, key: string) {\n if (opts?.endpointOpts?.globalAuth) {\n // @ts-ignore\n opts.endpointOpts[key] = {\n // @ts-ignore\n ...opts.endpointOpts[key],\n // @ts-ignore\n endpoint: { ...opts.endpointOpts.globalAuth, ...opts.endpointOpts[key]?.endpoint },\n }\n }\n}\n","import { checkAuth, ISingleEndpointOpts, sendErrorResponse } from '@sphereon/ssi-express-support'\nimport { ISphereonKeyManager } from '@sphereon/ssi-sdk-ext.key-manager'\nimport { contextHasPlugin } from '@sphereon/ssi-sdk.agent-config'\nimport { Request, Response, Router } from 'express'\nimport { JKWS_HOSTING_ALL_KEYS_PATH, JWKS_HOSTING_DID_KEYS_PATH } from './environment'\nimport { toJWKS } from './functions'\nimport { logger } from './index'\nimport { IRequiredContext } from './types'\n\nexport function getAllJWKSEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts) {\n if (opts?.enabled === false) {\n logger.info(`Get all JWKS endpoint is disabled`)\n return\n }\n\n const path = opts?.path ?? JKWS_HOSTING_ALL_KEYS_PATH\n logger.info(`All JWKS endpoint enabled, path ${path}`)\n router.get(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => {\n try {\n if (!contextHasPlugin<ISphereonKeyManager>(context, 'keyManagerListKeys')) {\n return sendErrorResponse(\n response,\n 500,\n 'Key manager plugin that can list keys is not found. Please enable the Sphereon Key Manager plugin if you want to use this endpoint',\n )\n }\n response.statusCode = 202\n const keys = await context.agent.keyManagerListKeys()\n return response.send(toJWKS({ keys }))\n } catch (e) {\n return sendErrorResponse(response, 500, e.message as string, e)\n }\n })\n}\n\nexport function getDIDJWKSEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts) {\n if (opts?.enabled === false) {\n logger.info(`Get DID JWKS endpoint is disabled`)\n return\n }\n const path = opts?.path ?? JWKS_HOSTING_DID_KEYS_PATH\n console.info(`DID JWKS endpoint enabled, path ${path}`)\n router.get(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => {\n const did = request.params.did\n try {\n console.log(`Will get JWKS for DID ${did}`)\n const resolution = await context.agent.identifierManagedGetByDid({ identifier: did })\n if (!resolution.identifier) {\n return sendErrorResponse(response, 404, `DID ${did} not found`)\n }\n response.statusCode = 200\n return response.send(toJWKS({ keys: resolution.keys }))\n } catch (e) {\n console.log(e)\n return sendErrorResponse(response, 404, `DID ${did} not found`)\n }\n })\n}\n","export const JKWS_HOSTING_ALL_KEYS_PATH = process.env.JWKS_HOSTING_BASE_PATH ?? '/.well-known/jwks.json'\nexport const JWKS_HOSTING_DID_KEYS_PATH = process.env.JWKS_HOSTING_DID_PATH ?? '/.well-known/jwks/dids/:did'\n","import { toJwk } from '@sphereon/ssi-sdk-ext.key-utils'\nimport { JWK } from '@sphereon/ssi-types'\nimport { IIdentifier, IKey } from '@veramo/core'\nimport { asArray } from '@veramo/utils'\nimport { JWKS_HOSTING_DID_KEYS_PATH } from './environment'\n\nexport const toJWKS = (args: { keys: IKey | IKey[] }): { keys: Array<JWK> } => {\n const providedKeys = asArray(args.keys)\n const keys = providedKeys.map((key) =>\n toJwk(key.publicKeyHex, key.type, {\n key,\n isPrivateKey: false,\n noKidThumbprint: false,\n }),\n )\n return {\n keys,\n }\n}\n\nexport const jwksURIFromIdentifier = (args: { identifier: IIdentifier; basePath?: string; baseURL?: string; onlyEncodeDid?: boolean }) => {\n const { onlyEncodeDid, identifier, baseURL } = args\n let basePath = args.basePath ?? JWKS_HOSTING_DID_KEYS_PATH\n const did = encodeURIComponent(identifier.did)\n if (onlyEncodeDid) {\n return did\n }\n if (basePath.includes(':did')) {\n basePath = basePath.replace(':did', did)\n } else {\n basePath += basePath.endsWith('/') ? did : `/${did}`\n }\n if (baseURL) {\n return baseURL + baseURL.endsWith('/') ? basePath : `/${basePath}`\n }\n return basePath\n}\n"],"mappings":"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","names":["Loggers","agentContext","express","checkAuth","sendErrorResponse","contextHasPlugin","JKWS_HOSTING_ALL_KEYS_PATH","process","env","JWKS_HOSTING_BASE_PATH","JWKS_HOSTING_DID_KEYS_PATH","JWKS_HOSTING_DID_PATH","toJwk","asArray","toJWKS","args","providedKeys","asArray","keys","map","key","toJwk","publicKeyHex","type","isPrivateKey","noKidThumbprint","jwksURIFromIdentifier","onlyEncodeDid","identifier","baseURL","basePath","JWKS_HOSTING_DID_KEYS_PATH","did","encodeURIComponent","includes","replace","endsWith","getAllJWKSEndpoint","router","context","opts","enabled","logger","info","path","JKWS_HOSTING_ALL_KEYS_PATH","get","checkAuth","endpoint","request","response","contextHasPlugin","sendErrorResponse","statusCode","keys","agent","keyManagerListKeys","send","toJWKS","e","message","getDIDJWKSEndpoint","JWKS_HOSTING_DID_KEYS_PATH","console","did","params","log","resolution","identifierManagedGetByDid","identifier","PublicKeyHosting","router","_router","_express","_agent","_opts","args","agent","opts","endpointOpts","globalAuth","copyGlobalAuthToEndpoint","expressSupport","express","Router","context","agentContext","features","hostingOpts","enableFeatures","logger","info","JSON","stringify","includes","getAllJWKSEndpoint","allJWKS","getDIDJWKSEndpoint","DIDJWKS","use","basePath","key","endpoint","logger","Loggers","DEFAULT","get"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sphereon/ssi-sdk.public-key-hosting",
|
|
3
|
-
"version": "0.34.1-
|
|
3
|
+
"version": "0.34.1-next.3+6c49ea2f",
|
|
4
4
|
"source": "src/index.ts",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -23,13 +23,13 @@
|
|
|
23
23
|
"start:dev": "ts-node __tests__/agent.ts"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@sphereon/ssi-express-support": "0.34.1-
|
|
27
|
-
"@sphereon/ssi-sdk-ext.identifier-resolution": "0.29.
|
|
28
|
-
"@sphereon/ssi-sdk-ext.key-manager": "0.29.
|
|
29
|
-
"@sphereon/ssi-sdk-ext.key-utils": "0.29.
|
|
30
|
-
"@sphereon/ssi-sdk-ext.kms-local": "0.29.
|
|
31
|
-
"@sphereon/ssi-sdk.core": "0.34.1-
|
|
32
|
-
"@sphereon/ssi-types": "0.34.1-
|
|
26
|
+
"@sphereon/ssi-express-support": "0.34.1-next.3+6c49ea2f",
|
|
27
|
+
"@sphereon/ssi-sdk-ext.identifier-resolution": "0.29.1-next.3",
|
|
28
|
+
"@sphereon/ssi-sdk-ext.key-manager": "0.29.1-next.3",
|
|
29
|
+
"@sphereon/ssi-sdk-ext.key-utils": "0.29.1-next.3",
|
|
30
|
+
"@sphereon/ssi-sdk-ext.kms-local": "0.29.1-next.3",
|
|
31
|
+
"@sphereon/ssi-sdk.core": "0.34.1-next.3+6c49ea2f",
|
|
32
|
+
"@sphereon/ssi-types": "0.34.1-next.3+6c49ea2f",
|
|
33
33
|
"@veramo/core": "4.2.0",
|
|
34
34
|
"@veramo/key-manager": "4.2.0",
|
|
35
35
|
"@veramo/kms-local": "4.2.0",
|
|
@@ -45,9 +45,9 @@
|
|
|
45
45
|
"uuid": "^9.0.1"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"@sphereon/ssi-sdk-ext.did-provider-jwk": "0.29.
|
|
49
|
-
"@sphereon/ssi-sdk-ext.did-resolver-jwk": "0.29.
|
|
50
|
-
"@sphereon/ssi-sdk.agent-config": "0.34.1-
|
|
48
|
+
"@sphereon/ssi-sdk-ext.did-provider-jwk": "0.29.1-next.3",
|
|
49
|
+
"@sphereon/ssi-sdk-ext.did-resolver-jwk": "0.29.1-next.3",
|
|
50
|
+
"@sphereon/ssi-sdk.agent-config": "0.34.1-next.3+6c49ea2f",
|
|
51
51
|
"@types/body-parser": "^1.19.5",
|
|
52
52
|
"@types/cookie-parser": "^1.4.7",
|
|
53
53
|
"@types/cors": "^2.8.17",
|
|
@@ -92,5 +92,5 @@
|
|
|
92
92
|
"JWKS",
|
|
93
93
|
"Hosting"
|
|
94
94
|
],
|
|
95
|
-
"gitHead": "
|
|
95
|
+
"gitHead": "6c49ea2f9c1bc61641ca2c98e3aa0a5b48018d91"
|
|
96
96
|
}
|