UNPKG

@sphereon/ssi-sdk.contact-manager-rest-api

Version:

1 lines 15.2 kB
{"version":3,"sources":["../src/index.ts","../src/contact-manager-api-server.ts","../src/api-functions.ts"],"sourcesContent":["export * from './types'\nexport * from './contact-manager-api-server'\nexport * from './api-functions'\n","import { agentContext } from '@sphereon/ssi-sdk.core'\nimport { TAgent } from '@veramo/core'\n\nimport express, { Express, Router } from 'express'\nimport { IContactManagerAPIEndpointOpts, IRequiredPlugins } from './types'\nimport {\n identityReadEndpoints,\n partiesReadEndpoint,\n partyDeleteEndpoint,\n partyReadEndpoint,\n partiesTypeReadEndpoint,\n partyWriteEndpoint,\n partyTypeReadEndpoint,\n identitiesReadEndpoint,\n} from './api-functions'\nimport { copyGlobalAuthToEndpoints, ExpressSupport } from '@sphereon/ssi-express-support'\n\nexport class ContactManagerApiServer {\n private readonly _express: Express\n private readonly _agent: TAgent<IRequiredPlugins>\n private readonly _opts?: IContactManagerAPIEndpointOpts\n private readonly _router: Router\n\n constructor(args: { agent: TAgent<IRequiredPlugins>; expressSupport: ExpressSupport; opts?: IContactManagerAPIEndpointOpts }) {\n const { agent, opts } = args\n this._agent = agent\n copyGlobalAuthToEndpoints({ opts, keys: ['partyRead', 'partyWrite', 'partyTypeRead', 'identityRead'] })\n if (opts?.endpointOpts?.globalAuth?.secureContactManagerEndpoints) {\n copyGlobalAuthToEndpoints({ opts, keys: ['partyRead', 'partyWrite', 'partyTypeRead', 'identityRead'] })\n }\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 ?? ['party_read', 'party_write', 'party_type_read', 'identity_read']\n console.log(`Contact Manager API enabled, with features: ${JSON.stringify(features)}}`)\n\n // endpoints\n if (features.includes('party_read')) {\n partiesReadEndpoint(this.router, context, this._opts?.endpointOpts?.partyRead)\n partyReadEndpoint(this.router, context, this._opts?.endpointOpts?.partyRead)\n }\n if (features.includes('party_write')) {\n partyWriteEndpoint(this.router, context, this._opts?.endpointOpts?.partyWrite)\n partyDeleteEndpoint(this.router, context, this._opts?.endpointOpts?.partyWrite)\n }\n if (features.includes('party_type_read')) {\n partiesTypeReadEndpoint(this.router, context, this._opts?.endpointOpts?.partyTypeRead)\n partyTypeReadEndpoint(this.router, context, this._opts?.endpointOpts?.partyTypeRead)\n }\n if (features.includes('identity_read')) {\n identitiesReadEndpoint(this.router, context, this._opts?.endpointOpts?.identityRead)\n identityReadEndpoints(this.router, context, this._opts?.endpointOpts?.identityRead)\n }\n this._express.use(opts?.endpointOpts?.basePath ?? '', this.router)\n }\n\n get express(): Express {\n return this._express\n }\n\n get router(): Router {\n return this._router\n }\n\n get agent(): TAgent<IRequiredPlugins> {\n return this._agent\n }\n get opts(): IContactManagerAPIEndpointOpts | undefined {\n return this._opts\n }\n}\n","import { checkAuth, sendErrorResponse, ISingleEndpointOpts } from '@sphereon/ssi-express-support'\nimport { Request, Response, Router } from 'express'\nimport { IRequiredContext } from './types'\nimport { AddContactArgs } from '@sphereon/ssi-sdk.contact-manager'\n\nexport function partiesReadEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts) {\n if (opts?.enabled === false) {\n console.log(`\"partiesReadEndpoint\" Endpoint is disabled`)\n return\n }\n const path = opts?.path ?? '/parties'\n router.get(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => {\n try {\n // later we will add filter to this\n const parties = await context.agent.cmGetContacts()\n response.statusCode = 200\n return response.send(parties)\n } catch (error) {\n return sendErrorResponse(response, 500, error.message as string, error)\n }\n })\n}\n\nexport function partyReadEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts) {\n if (opts?.enabled === false) {\n console.log(`\"partyReadEndpoint\" Endpoint is disabled`)\n return\n }\n const path = opts?.path ?? '/parties'\n router.get(`${path}/:partyId`, checkAuth(opts?.endpoint), async (request: Request, response: Response) => {\n try {\n const partyId = request.params.partyId\n const party = await context.agent.cmGetContact({ contactId: partyId })\n response.statusCode = 200\n return response.send(party)\n } catch (error) {\n return sendErrorResponse(response, 500, error.message as string, error)\n }\n })\n}\n\nexport function partyWriteEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts) {\n if (opts?.enabled === false) {\n console.log(`\"partyWriteEndpoint\" Endpoint is disabled`)\n return\n }\n const path = opts?.path ?? '/parties'\n router.post(path, async (request: Request, response: Response) => {\n try {\n const addParty = request.body\n const party = await context.agent.cmAddContact(addParty as AddContactArgs)\n response.statusCode = 201\n return response.send(party)\n } catch (error) {\n return sendErrorResponse(response, 500, error.message, error)\n }\n })\n}\n\nexport function partyDeleteEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts) {\n if (opts?.enabled === false) {\n console.log(`\"partyDeleteEndpoint\" Endpoint is disabled`)\n return\n }\n const path = opts?.path ?? '/parties'\n router.delete(`${path}/:partyId`, async (request, response) => {\n try {\n const partyId = request.params.partyId\n const result = await context.agent.cmRemoveContact({ contactId: partyId })\n response.statusCode = 200\n return response.send(result)\n } catch (error) {\n return sendErrorResponse(response, 500, error.message, error)\n }\n })\n}\n\nexport function partiesTypeReadEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts) {\n if (opts?.enabled === false) {\n console.log(`\"partiesTypeReadEndpoint\" Endpoint is disabled`)\n return\n }\n const path = opts?.path ?? '/party-types'\n router.get(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => {\n try {\n // later we will add filter to this\n const partyTypes = await context.agent.cmGetContactTypes()\n response.statusCode = 200\n return response.send(partyTypes)\n } catch (error) {\n return sendErrorResponse(response, 500, error.message as string, error)\n }\n })\n}\n\nexport function partyTypeReadEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts) {\n if (opts?.enabled === false) {\n console.log(`\"partyTypeReadEndpoint\" Endpoint is disabled`)\n return\n }\n const path = opts?.path ?? '/party-types'\n router.get(`${path}/:partyTypeId`, checkAuth(opts?.endpoint), async (request: Request, response: Response) => {\n try {\n const partyTypeId = request.params.partyTypeId\n const partyType = await context.agent.cmGetContactType({ contactTypeId: partyTypeId })\n response.statusCode = 200\n return response.send(partyType)\n } catch (error) {\n return sendErrorResponse(response, 500, error.message as string, error)\n }\n })\n}\n\nexport function identitiesReadEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts) {\n if (opts?.enabled === false) {\n console.log(`\"identitiesReadEndpoint\" Endpoint is disabled`)\n return\n }\n const path = opts?.path ?? '/identities'\n router.get(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => {\n try {\n // later we will add filter to this\n const identities = await context.agent.cmGetIdentities()\n response.statusCode = 200\n return response.send(identities)\n } catch (error) {\n return sendErrorResponse(response, 500, error.message as string, error)\n }\n })\n}\n\nexport function identityReadEndpoints(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts) {\n if (opts?.enabled === false) {\n console.log(`\"identityReadEndpoints\" Endpoint is disabled`)\n return\n }\n const path = opts?.path ?? '/identities'\n router.get(`${path}/:identityId`, checkAuth(opts?.endpoint), async (request: Request, response: Response) => {\n try {\n const identityId = request.params.identityId\n const identity = await context.agent.cmGetIdentity({ identityId })\n response.statusCode = 200\n return response.send(identity)\n } catch (error) {\n return sendErrorResponse(response, 500, error.message as string, error)\n }\n })\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;ACAA,qBAA6B;AAG7B,qBAAyC;;;ACHzC,iCAAkE;AAK3D,SAASA,oBAAoBC,QAAgBC,SAA2BC,MAA0B;AACvG,MAAIA,MAAMC,YAAY,OAAO;AAC3BC,YAAQC,IAAI,4CAA4C;AACxD;EACF;AACA,QAAMC,OAAOJ,MAAMI,QAAQ;AAC3BN,SAAOO,IAAID,UAAME,sCAAUN,MAAMO,QAAAA,GAAW,OAAOC,SAAkBC,aAAAA;AACnE,QAAI;AAEF,YAAMC,UAAU,MAAMX,QAAQY,MAAMC,cAAa;AACjDH,eAASI,aAAa;AACtB,aAAOJ,SAASK,KAAKJ,OAAAA;IACvB,SAASK,OAAO;AACd,iBAAOC,8CAAkBP,UAAU,KAAKM,MAAME,SAAmBF,KAAAA;IACnE;EACF,CAAA;AACF;AAhBgBlB;AAkBT,SAASqB,kBAAkBpB,QAAgBC,SAA2BC,MAA0B;AACrG,MAAIA,MAAMC,YAAY,OAAO;AAC3BC,YAAQC,IAAI,0CAA0C;AACtD;EACF;AACA,QAAMC,OAAOJ,MAAMI,QAAQ;AAC3BN,SAAOO,IAAI,GAAGD,IAAAA,iBAAiBE,sCAAUN,MAAMO,QAAAA,GAAW,OAAOC,SAAkBC,aAAAA;AACjF,QAAI;AACF,YAAMU,UAAUX,QAAQY,OAAOD;AAC/B,YAAME,QAAQ,MAAMtB,QAAQY,MAAMW,aAAa;QAAEC,WAAWJ;MAAQ,CAAA;AACpEV,eAASI,aAAa;AACtB,aAAOJ,SAASK,KAAKO,KAAAA;IACvB,SAASN,OAAO;AACd,iBAAOC,8CAAkBP,UAAU,KAAKM,MAAME,SAAmBF,KAAAA;IACnE;EACF,CAAA;AACF;AAhBgBG;AAkBT,SAASM,mBAAmB1B,QAAgBC,SAA2BC,MAA0B;AACtG,MAAIA,MAAMC,YAAY,OAAO;AAC3BC,YAAQC,IAAI,2CAA2C;AACvD;EACF;AACA,QAAMC,OAAOJ,MAAMI,QAAQ;AAC3BN,SAAO2B,KAAKrB,MAAM,OAAOI,SAAkBC,aAAAA;AACzC,QAAI;AACF,YAAMiB,WAAWlB,QAAQmB;AACzB,YAAMN,QAAQ,MAAMtB,QAAQY,MAAMiB,aAAaF,QAAAA;AAC/CjB,eAASI,aAAa;AACtB,aAAOJ,SAASK,KAAKO,KAAAA;IACvB,SAASN,OAAO;AACd,iBAAOC,8CAAkBP,UAAU,KAAKM,MAAME,SAASF,KAAAA;IACzD;EACF,CAAA;AACF;AAhBgBS;AAkBT,SAASK,oBAAoB/B,QAAgBC,SAA2BC,MAA0B;AACvG,MAAIA,MAAMC,YAAY,OAAO;AAC3BC,YAAQC,IAAI,4CAA4C;AACxD;EACF;AACA,QAAMC,OAAOJ,MAAMI,QAAQ;AAC3BN,SAAOgC,OAAO,GAAG1B,IAAAA,aAAiB,OAAOI,SAASC,aAAAA;AAChD,QAAI;AACF,YAAMU,UAAUX,QAAQY,OAAOD;AAC/B,YAAMY,SAAS,MAAMhC,QAAQY,MAAMqB,gBAAgB;QAAET,WAAWJ;MAAQ,CAAA;AACxEV,eAASI,aAAa;AACtB,aAAOJ,SAASK,KAAKiB,MAAAA;IACvB,SAAShB,OAAO;AACd,iBAAOC,8CAAkBP,UAAU,KAAKM,MAAME,SAASF,KAAAA;IACzD;EACF,CAAA;AACF;AAhBgBc;AAkBT,SAASI,wBAAwBnC,QAAgBC,SAA2BC,MAA0B;AAC3G,MAAIA,MAAMC,YAAY,OAAO;AAC3BC,YAAQC,IAAI,gDAAgD;AAC5D;EACF;AACA,QAAMC,OAAOJ,MAAMI,QAAQ;AAC3BN,SAAOO,IAAID,UAAME,sCAAUN,MAAMO,QAAAA,GAAW,OAAOC,SAAkBC,aAAAA;AACnE,QAAI;AAEF,YAAMyB,aAAa,MAAMnC,QAAQY,MAAMwB,kBAAiB;AACxD1B,eAASI,aAAa;AACtB,aAAOJ,SAASK,KAAKoB,UAAAA;IACvB,SAASnB,OAAO;AACd,iBAAOC,8CAAkBP,UAAU,KAAKM,MAAME,SAAmBF,KAAAA;IACnE;EACF,CAAA;AACF;AAhBgBkB;AAkBT,SAASG,sBAAsBtC,QAAgBC,SAA2BC,MAA0B;AACzG,MAAIA,MAAMC,YAAY,OAAO;AAC3BC,YAAQC,IAAI,8CAA8C;AAC1D;EACF;AACA,QAAMC,OAAOJ,MAAMI,QAAQ;AAC3BN,SAAOO,IAAI,GAAGD,IAAAA,qBAAqBE,sCAAUN,MAAMO,QAAAA,GAAW,OAAOC,SAAkBC,aAAAA;AACrF,QAAI;AACF,YAAM4B,cAAc7B,QAAQY,OAAOiB;AACnC,YAAMC,YAAY,MAAMvC,QAAQY,MAAM4B,iBAAiB;QAAEC,eAAeH;MAAY,CAAA;AACpF5B,eAASI,aAAa;AACtB,aAAOJ,SAASK,KAAKwB,SAAAA;IACvB,SAASvB,OAAO;AACd,iBAAOC,8CAAkBP,UAAU,KAAKM,MAAME,SAAmBF,KAAAA;IACnE;EACF,CAAA;AACF;AAhBgBqB;AAkBT,SAASK,uBAAuB3C,QAAgBC,SAA2BC,MAA0B;AAC1G,MAAIA,MAAMC,YAAY,OAAO;AAC3BC,YAAQC,IAAI,+CAA+C;AAC3D;EACF;AACA,QAAMC,OAAOJ,MAAMI,QAAQ;AAC3BN,SAAOO,IAAID,UAAME,sCAAUN,MAAMO,QAAAA,GAAW,OAAOC,SAAkBC,aAAAA;AACnE,QAAI;AAEF,YAAMiC,aAAa,MAAM3C,QAAQY,MAAMgC,gBAAe;AACtDlC,eAASI,aAAa;AACtB,aAAOJ,SAASK,KAAK4B,UAAAA;IACvB,SAAS3B,OAAO;AACd,iBAAOC,8CAAkBP,UAAU,KAAKM,MAAME,SAAmBF,KAAAA;IACnE;EACF,CAAA;AACF;AAhBgB0B;AAkBT,SAASG,sBAAsB9C,QAAgBC,SAA2BC,MAA0B;AACzG,MAAIA,MAAMC,YAAY,OAAO;AAC3BC,YAAQC,IAAI,8CAA8C;AAC1D;EACF;AACA,QAAMC,OAAOJ,MAAMI,QAAQ;AAC3BN,SAAOO,IAAI,GAAGD,IAAAA,oBAAoBE,sCAAUN,MAAMO,QAAAA,GAAW,OAAOC,SAAkBC,aAAAA;AACpF,QAAI;AACF,YAAMoC,aAAarC,QAAQY,OAAOyB;AAClC,YAAMC,WAAW,MAAM/C,QAAQY,MAAMoC,cAAc;QAAEF;MAAW,CAAA;AAChEpC,eAASI,aAAa;AACtB,aAAOJ,SAASK,KAAKgC,QAAAA;IACvB,SAAS/B,OAAO;AACd,iBAAOC,8CAAkBP,UAAU,KAAKM,MAAME,SAAmBF,KAAAA;IACnE;EACF,CAAA;AACF;AAhBgB6B;;;ADpHhB,IAAAI,8BAA0D;AAEnD,IAAMC,0BAAN,MAAMA;EAjBb,OAiBaA;;;EACMC;EACAC;EACAC;EACAC;EAEjB,YAAYC,MAAkH;AAC5H,UAAM,EAAEC,OAAOC,KAAI,IAAKF;AACxB,SAAKH,SAASI;AACdE,+DAA0B;MAAED;MAAME,MAAM;QAAC;QAAa;QAAc;QAAiB;;IAAgB,CAAA;AACrG,QAAIF,MAAMG,cAAcC,YAAYC,+BAA+B;AACjEJ,iEAA0B;QAAED;QAAME,MAAM;UAAC;UAAa;UAAc;UAAiB;;MAAgB,CAAA;IACvG;AACA,SAAKN,QAAQI;AACb,SAAKN,WAAWI,KAAKQ,eAAeC;AACpC,SAAKV,UAAUU,eAAAA,QAAQC,OAAM;AAC7B,UAAMC,cAAUC,6BAAaX,KAAAA;AAC7B,UAAMY,WAAWX,MAAMY,kBAAkB;MAAC;MAAc;MAAe;MAAmB;;AAC1FC,YAAQC,IAAI,+CAA+CC,KAAKC,UAAUL,QAAAA,CAAAA,GAAY;AAGtF,QAAIA,SAASM,SAAS,YAAA,GAAe;AACnCC,0BAAoB,KAAKC,QAAQV,SAAS,KAAKb,OAAOO,cAAciB,SAAAA;AACpEC,wBAAkB,KAAKF,QAAQV,SAAS,KAAKb,OAAOO,cAAciB,SAAAA;IACpE;AACA,QAAIT,SAASM,SAAS,aAAA,GAAgB;AACpCK,yBAAmB,KAAKH,QAAQV,SAAS,KAAKb,OAAOO,cAAcoB,UAAAA;AACnEC,0BAAoB,KAAKL,QAAQV,SAAS,KAAKb,OAAOO,cAAcoB,UAAAA;IACtE;AACA,QAAIZ,SAASM,SAAS,iBAAA,GAAoB;AACxCQ,8BAAwB,KAAKN,QAAQV,SAAS,KAAKb,OAAOO,cAAcuB,aAAAA;AACxEC,4BAAsB,KAAKR,QAAQV,SAAS,KAAKb,OAAOO,cAAcuB,aAAAA;IACxE;AACA,QAAIf,SAASM,SAAS,eAAA,GAAkB;AACtCW,6BAAuB,KAAKT,QAAQV,SAAS,KAAKb,OAAOO,cAAc0B,YAAAA;AACvEC,4BAAsB,KAAKX,QAAQV,SAAS,KAAKb,OAAOO,cAAc0B,YAAAA;IACxE;AACA,SAAKnC,SAASqC,IAAI/B,MAAMG,cAAc6B,YAAY,IAAI,KAAKb,MAAM;EACnE;EAEA,IAAIZ,UAAmB;AACrB,WAAO,KAAKb;EACd;EAEA,IAAIyB,SAAiB;AACnB,WAAO,KAAKtB;EACd;EAEA,IAAIE,QAAkC;AACpC,WAAO,KAAKJ;EACd;EACA,IAAIK,OAAmD;AACrD,WAAO,KAAKJ;EACd;AACF;","names":["partiesReadEndpoint","router","context","opts","enabled","console","log","path","get","checkAuth","endpoint","request","response","parties","agent","cmGetContacts","statusCode","send","error","sendErrorResponse","message","partyReadEndpoint","partyId","params","party","cmGetContact","contactId","partyWriteEndpoint","post","addParty","body","cmAddContact","partyDeleteEndpoint","delete","result","cmRemoveContact","partiesTypeReadEndpoint","partyTypes","cmGetContactTypes","partyTypeReadEndpoint","partyTypeId","partyType","cmGetContactType","contactTypeId","identitiesReadEndpoint","identities","cmGetIdentities","identityReadEndpoints","identityId","identity","cmGetIdentity","import_ssi_express_support","ContactManagerApiServer","_express","_agent","_opts","_router","args","agent","opts","copyGlobalAuthToEndpoints","keys","endpointOpts","globalAuth","secureContactManagerEndpoints","expressSupport","express","Router","context","agentContext","features","enableFeatures","console","log","JSON","stringify","includes","partiesReadEndpoint","router","partyRead","partyReadEndpoint","partyWriteEndpoint","partyWrite","partyDeleteEndpoint","partiesTypeReadEndpoint","partyTypeRead","partyTypeReadEndpoint","identitiesReadEndpoint","identityRead","identityReadEndpoints","use","basePath"]}