{"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":"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","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","constructor","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"]}