{"version":3,"sources":["../src/index.ts","../src/siop-api-functions.ts","../src/webapp-api-functions.ts","../src/siopv2-rp-api-server.ts"],"sourcesContent":["/**\n * @public\n */\nexport * from './siop-api-functions'\nexport * from './webapp-api-functions'\nexport * from './types'\nexport * from './siopv2-rp-api-server'\n","import { AuthorizationResponsePayload, PresentationDefinitionLocation } from '@sphereon/did-auth-siop'\nimport { checkAuth, ISingleEndpointOpts, sendErrorResponse } from '@sphereon/ssi-express-support'\nimport { CredentialMapper } from '@sphereon/ssi-types'\nimport { AuthorizationChallengeValidationResponse } from '@sphereon/ssi-sdk.siopv2-oid4vp-common'\nimport { Request, Response, Router } from 'express'\nimport { IRequiredContext } from './types'\n\nconst parseAuthorizationResponse = (request: Request): AuthorizationResponsePayload => {\n  const contentType = request.header('content-type')\n\n  if (contentType === 'application/json') {\n    const payload = typeof request.body === 'string' ? JSON.parse(request.body) : request.body\n    return payload as AuthorizationResponsePayload\n  }\n\n  if (contentType === 'application/x-www-form-urlencoded') {\n    const payload = request.body as AuthorizationResponsePayload\n\n    // Parse presentation_submission if it's a string\n    if (typeof payload.presentation_submission === 'string') {\n      console.log(`Supplied presentation_submission was a string instead of JSON. Correcting, but external party should fix their implementation!`)\n      payload.presentation_submission = JSON.parse(payload.presentation_submission)\n    }\n\n    // when using FORM_URL_ENCODED, vp_token comes back as string not matter whether the input was string, object or array. Handled below.\n    if (typeof payload.vp_token === 'string') {\n      const { vp_token } = payload\n\n      // The only use case where vp_object is an object is JsonLdAsString atm. For arrays, any objects will be parsed along with the array\n      // (Leaving the vp_token JsonLdAsString causes problems because the original credential will remain string and will be interpreted as JWT in some parts of the code)\n      if ((vp_token.startsWith('[') && vp_token.endsWith(']')) || CredentialMapper.isJsonLdAsString(vp_token)) {\n        payload.vp_token = JSON.parse(vp_token)\n      }\n    }\n\n    return payload\n  }\n\n  throw new Error(\n    `Unsupported content type: ${contentType}. Currently only application/x-www-form-urlencoded and application/json (for direct_post) are supported`,\n  )\n}\n\nexport function verifyAuthResponseSIOPv2Endpoint(\n  router: Router,\n  context: IRequiredContext,\n  opts?: ISingleEndpointOpts & { presentationDefinitionLocation?: PresentationDefinitionLocation },\n) {\n  if (opts?.enabled === false) {\n    console.log(`verifyAuthResponse SIOP endpoint is disabled`)\n    return\n  }\n  const path = opts?.path ?? '/siop/definitions/:definitionId/auth-responses/:correlationId'\n  router.post(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => {\n    try {\n      const { correlationId, definitionId, tenantId, version } = request.params\n      if (!correlationId || !definitionId) {\n        console.log(`No authorization request could be found for the given url. correlationId: ${correlationId}, definitionId: ${definitionId}`)\n        return sendErrorResponse(response, 404, 'No authorization request could be found')\n      }\n      console.log('Authorization Response (siop-sessions')\n      console.log(JSON.stringify(request.body, null, 2))\n      const definitionItems = await context.agent.pdmGetDefinitions({ filter: [{ definitionId, tenantId, version }] })\n      if (definitionItems.length === 0) {\n        console.log(`Could not get definition ${definitionId} from agent. Will return 404`)\n        response.statusCode = 404\n        response.statusMessage = `No definition ${definitionId}`\n        return response.send()\n      }\n\n      const authorizationResponse = parseAuthorizationResponse(request)\n      console.log(`URI: ${JSON.stringify(authorizationResponse)}`)\n\n      const definitionItem = definitionItems[0]\n      const verifiedResponse = await context.agent.siopVerifyAuthResponse({\n        authorizationResponse,\n        correlationId,\n        definitionId,\n        presentationDefinitions: [\n          {\n            location: opts?.presentationDefinitionLocation ?? PresentationDefinitionLocation.TOPLEVEL_PRESENTATION_DEF,\n            definition: definitionItem.definitionPayload,\n          },\n        ],\n        dcqlQuery: definitionItem.dcqlPayload,\n      })\n\n      const wrappedPresentation = verifiedResponse?.oid4vpSubmission?.presentations[0]\n      if (wrappedPresentation) {\n        // const credentialSubject = wrappedPresentation.presentation.verifiableCredential[0]?.credential?.credentialSubject\n        // console.log(JSON.stringify(credentialSubject, null, 2))\n        console.log('PRESENTATION:' + JSON.stringify(wrappedPresentation.presentation, null, 2))\n        response.statusCode = 200\n\n        const authorizationChallengeValidationResponse: AuthorizationChallengeValidationResponse = {\n          presentation_during_issuance_session: verifiedResponse.correlationId,\n        }\n        if (authorizationResponse.is_first_party) {\n          response.setHeader('Content-Type', 'application/json')\n          return response.send(JSON.stringify(authorizationChallengeValidationResponse))\n        }\n\n        const responseRedirectURI = await context.agent.siopGetRedirectURI({ correlationId, definitionId, state: verifiedResponse.state })\n        if (responseRedirectURI) {\n          response.setHeader('Content-Type', 'application/json')\n          return response.send(JSON.stringify({ redirect_uri: responseRedirectURI }))\n        }\n        // todo: delete session\n      } else {\n        console.log('Missing Presentation (Verifiable Credentials)')\n        response.statusCode = 500\n        response.statusMessage = 'Missing Presentation (Verifiable Credentials)'\n      }\n      return response.send()\n    } catch (error) {\n      console.error(error)\n      return sendErrorResponse(response, 500, 'Could not verify auth status', error)\n    }\n  })\n}\n\nexport function getAuthRequestSIOPv2Endpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts) {\n  if (opts?.enabled === false) {\n    console.log(`getAuthRequest SIOP endpoint is disabled`)\n    return\n  }\n  const path = opts?.path ?? '/siop/definitions/:definitionId/auth-requests/:correlationId'\n  router.get(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => {\n    try {\n      const correlationId = request.params.correlationId\n      const definitionId = request.params.definitionId\n      if (!correlationId || !definitionId) {\n        console.log(`No authorization request could be found for the given url. correlationId: ${correlationId}, definitionId: ${definitionId}`)\n        return sendErrorResponse(response, 404, 'No authorization request could be found')\n      }\n      const requestState = await context.agent.siopGetAuthRequestState({\n        correlationId,\n        definitionId,\n        errorOnNotFound: false,\n      })\n      if (!requestState) {\n        console.log(\n          `No authorization request could be found for the given url in the state manager. correlationId: ${correlationId}, definitionId: ${definitionId}`,\n        )\n        return sendErrorResponse(response, 404, `No authorization request could be found`)\n      }\n      const requestObject = await requestState.request?.requestObject?.toJwt()\n      console.log('JWT Request object:')\n      console.log(requestObject)\n\n      let error: string | undefined\n      try {\n        response.statusCode = 200\n        response.setHeader('Content-Type', 'application/jwt')\n        return response.send(requestObject)\n      } catch (e) {\n        error = typeof e === 'string' ? e : e instanceof Error ? e.message : undefined\n        return sendErrorResponse(response, 500, 'Could not get authorization request', e)\n      } finally {\n        await context.agent.siopUpdateAuthRequestState({\n          correlationId,\n          definitionId,\n          state: 'sent',\n          error,\n        })\n      }\n    } catch (error) {\n      return sendErrorResponse(response, 500, 'Could not get authorization request', error)\n    }\n  })\n}\n","import { AuthorizationRequestState, AuthorizationResponseStateStatus } from '@sphereon/did-auth-siop'\nimport { checkAuth, ISingleEndpointOpts, sendErrorResponse } from '@sphereon/ssi-express-support'\nimport { AuthStatusResponse, GenerateAuthRequestURIResponse, uriWithBase } from '@sphereon/ssi-sdk.siopv2-oid4vp-common'\nimport { AuthorizationResponseStateWithVerifiedData, VerifiedDataMode } from '@sphereon/ssi-sdk.siopv2-oid4vp-rp-auth'\nimport { Request, Response, Router } from 'express'\nimport uuid from 'short-uuid'\nimport { ICreateAuthRequestWebappEndpointOpts, IRequiredContext } from './types'\nimport { shaHasher as defaultHasher } from '@sphereon/ssi-sdk.core'\n\nexport function createAuthRequestWebappEndpoint(router: Router, context: IRequiredContext, opts?: ICreateAuthRequestWebappEndpointOpts) {\n  if (opts?.enabled === false) {\n    console.log(`createAuthRequest Webapp endpoint is disabled`)\n    return\n  }\n  const path = opts?.path ?? '/webapp/definitions/:definitionId/auth-requests'\n  router.post(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => {\n    try {\n      // if (!request.agent) throw Error('No agent configured')\n      const definitionId = request.params.definitionId\n      if (!definitionId) {\n        return sendErrorResponse(response, 400, 'No definitionId query parameter provided')\n      }\n      const state: string = request.body.state ?? uuid.uuid()\n      const correlationId = request.body.correlationId ?? state\n      const qrCodeOpts = request.body.qrCodeOpts ?? opts?.qrCodeOpts\n\n      const requestByReferenceURI = uriWithBase(`/siop/definitions/${definitionId}/auth-requests/${state}`, {\n        baseURI: opts?.siopBaseURI,\n      })\n      const responseURI = uriWithBase(`/siop/definitions/${definitionId}/auth-responses/${state}`, { baseURI: opts?.siopBaseURI })\n      // first version is for backwards compat\n      const responseRedirectURI =\n        ('response_redirect_uri' in request.body && (request.body.response_redirect_uri as string | undefined)) ??\n        ('responseRedirectURI' in request.body && (request.body.responseRedirectURI as string | undefined))\n\n      const authRequestURI = await context.agent.siopCreateAuthRequestURI({\n        definitionId,\n        correlationId,\n        state,\n        nonce: uuid.uuid(),\n        requestByReferenceURI,\n        responseURIType: 'response_uri',\n        responseURI,\n        ...(responseRedirectURI && { responseRedirectURI }),\n      })\n\n      let qrCodeDataUri: string | undefined\n      if (qrCodeOpts) {\n        const { AwesomeQR } = await import('awesome-qr')\n        const qrCode = new AwesomeQR({ ...qrCodeOpts, text: authRequestURI })\n        qrCodeDataUri = `data:image/png;base64,${(await qrCode.draw())!.toString('base64')}`\n      }\n      const authRequestBody: GenerateAuthRequestURIResponse = {\n        correlationId,\n        state,\n        definitionId,\n        authRequestURI,\n        authStatusURI: `${uriWithBase(opts?.webappAuthStatusPath ?? '/webapp/auth-status', { baseURI: opts?.webappBaseURI })}`,\n        ...(qrCodeDataUri && { qrCodeDataUri }),\n      }\n      console.log(`Auth Request URI data to send back: ${JSON.stringify(authRequestBody)}`)\n      return response.json(authRequestBody)\n    } catch (error) {\n      return sendErrorResponse(response, 500, 'Could not create an authorization request URI', error)\n    }\n  })\n}\n\nexport function authStatusWebappEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts) {\n  if (opts?.enabled === false) {\n    console.log(`authStatus Webapp endpoint is disabled`)\n    return\n  }\n  const path = opts?.path ?? '/webapp/auth-status'\n  router.post(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => {\n    try {\n      console.log('Received auth-status request...')\n      const correlationId: string = request.body.correlationId as string\n      const definitionId: string = request.body.definitionId as string\n\n      const requestState =\n        correlationId && definitionId\n          ? await context.agent.siopGetAuthRequestState({\n              correlationId,\n              definitionId,\n              errorOnNotFound: false,\n            })\n          : undefined\n      if (!requestState || !definitionId || !correlationId) {\n        console.log(\n          `No authentication request mapping could be found for the given URL. correlation: ${correlationId}, definitionId: ${definitionId}`,\n        )\n        response.statusCode = 404\n        const statusBody: AuthStatusResponse = {\n          status: requestState ? requestState.status : 'error',\n          error: 'No authentication request mapping could be found for the given URL.',\n          correlationId,\n          definitionId,\n          lastUpdated: requestState ? requestState.lastUpdated : Date.now(),\n        }\n        return response.json(statusBody)\n      }\n\n      let includeVerifiedData: VerifiedDataMode = VerifiedDataMode.NONE\n      if ('includeVerifiedData' in request.body) {\n        includeVerifiedData = request.body.includeVerifiedData as VerifiedDataMode\n      }\n\n      let responseState\n      if (requestState.status === 'sent') {\n        responseState = (await context.agent.siopGetAuthResponseState({\n          correlationId,\n          definitionId,\n          includeVerifiedData: includeVerifiedData,\n          errorOnNotFound: false,\n        })) as AuthorizationResponseStateWithVerifiedData\n      }\n      const overallState: AuthorizationRequestState | AuthorizationResponseStateWithVerifiedData = responseState ?? requestState\n\n      const statusBody: AuthStatusResponse = {\n        status: overallState.status,\n        ...(overallState.error ? { error: overallState.error?.message } : {}),\n        correlationId,\n        definitionId,\n        lastUpdated: overallState.lastUpdated,\n        ...(responseState && responseState.status === AuthorizationResponseStateStatus.VERIFIED\n          ? {\n              payload: await responseState.response.mergedPayloads({ hasher: defaultHasher }),\n              verifiedData: responseState.verifiedData,\n            }\n          : {}),\n      }\n      console.debug(`Will send auth status: ${JSON.stringify(statusBody)}`)\n      if (overallState.status === 'error') {\n        response.statusCode = 500\n        return response.json(statusBody)\n      }\n      response.statusCode = 200\n      return response.json(statusBody)\n    } catch (error) {\n      return sendErrorResponse(response, 500, error.message, error)\n    }\n  })\n}\n\nexport function removeAuthRequestStateWebappEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts) {\n  if (opts?.enabled === false) {\n    console.log(`removeAuthStatus Webapp endpoint is disabled`)\n    return\n  }\n  const path = opts?.path ?? '/webapp/definitions/:definitionId/auth-requests/:correlationId'\n  router.delete(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => {\n    try {\n      const correlationId: string = request.params.correlationId\n      const definitionId: string = request.params.definitionId\n      if (!correlationId || !definitionId) {\n        console.log(`No authorization request could be found for the given url. correlationId: ${correlationId}, definitionId: ${definitionId}`)\n        return sendErrorResponse(response, 404, 'No authorization request could be found')\n      }\n      response.statusCode = 200\n      return response.json(await context.agent.siopDeleteAuthState({ definitionId, correlationId }))\n    } catch (error) {\n      return sendErrorResponse(response, 500, error.message, error)\n    }\n  })\n}\n\nexport function getDefinitionsEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts) {\n  if (opts?.enabled === false) {\n    console.log(`getDefinitions Webapp endpoint is disabled`)\n    return\n  }\n  const path = opts?.path ?? '/webapp/definitions'\n  router.get(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => {\n    try {\n      const definitions = await context.agent.pdmGetDefinitions()\n      response.statusCode = 200\n      return response.json(definitions)\n    } catch (error) {\n      return sendErrorResponse(response, 500, error.message, error)\n    }\n  })\n}\n","import { agentContext } from '@sphereon/ssi-sdk.core'\nimport { copyGlobalAuthToEndpoints, ExpressSupport } from '@sphereon/ssi-express-support'\nimport { IPresentationExchange } from '@sphereon/ssi-sdk.presentation-exchange'\nimport { ISIOPv2RP } from '@sphereon/ssi-sdk.siopv2-oid4vp-rp-auth'\nimport { TAgent } from '@veramo/core'\nimport express, { Express, Request, Response, Router } from 'express'\nimport { getAuthRequestSIOPv2Endpoint, verifyAuthResponseSIOPv2Endpoint } from './siop-api-functions'\nimport { IRequiredPlugins, ISIOPv2RPRestAPIOpts } from './types'\nimport {\n  authStatusWebappEndpoint,\n  createAuthRequestWebappEndpoint,\n  getDefinitionsEndpoint,\n  removeAuthRequestStateWebappEndpoint,\n} from './webapp-api-functions'\nimport swaggerUi from 'swagger-ui-express'\n\nexport class SIOPv2RPApiServer {\n  private readonly _express: Express\n  private readonly _router: Router\n  private readonly _agent: TAgent<IPresentationExchange & ISIOPv2RP>\n  private readonly _opts?: ISIOPv2RPRestAPIOpts\n  private readonly _basePath: string\n\n  private readonly OID4VP_SWAGGER_URL = 'https://api.swaggerhub.com/apis/SphereonInt/OID4VP/0.1.0'\n  constructor(args: { agent: TAgent<IRequiredPlugins>; expressSupport: ExpressSupport; opts?: ISIOPv2RPRestAPIOpts }) {\n    const { agent, opts } = args\n    this._agent = agent\n    copyGlobalAuthToEndpoints({ opts, keys: ['webappCreateAuthRequest', 'webappAuthStatus', 'webappDeleteAuthRequest'] })\n    if (opts?.endpointOpts?.globalAuth?.secureSiopEndpoints) {\n      copyGlobalAuthToEndpoints({ opts, keys: ['siopGetAuthRequest', 'siopVerifyAuthResponse'] })\n    }\n\n    this._opts = opts\n    this._express = args.expressSupport.express\n    this._router = express.Router()\n    const context = agentContext(agent)\n\n    const features = opts?.enableFeatures ?? ['rp-status', 'siop']\n    console.log(`SIOPv2 API enabled, with features: ${JSON.stringify(features)}}`)\n\n    // Webapp endpoints\n    if (features.includes('rp-status')) {\n      createAuthRequestWebappEndpoint(this._router, context, opts?.endpointOpts?.webappCreateAuthRequest)\n      authStatusWebappEndpoint(this._router, context, opts?.endpointOpts?.webappAuthStatus)\n      removeAuthRequestStateWebappEndpoint(this._router, context, opts?.endpointOpts?.webappDeleteAuthRequest)\n      getDefinitionsEndpoint(this._router, context, opts?.endpointOpts?.webappGetDefinitions)\n    }\n\n    // SIOPv2 endpoints\n    if (features.includes('siop')) {\n      getAuthRequestSIOPv2Endpoint(this._router, context, opts?.endpointOpts?.siopGetAuthRequest)\n      verifyAuthResponseSIOPv2Endpoint(this._router, context, opts?.endpointOpts?.siopVerifyAuthResponse)\n    }\n    this._basePath = opts?.endpointOpts?.basePath ?? ''\n    this._express.use(this._basePath, this.router)\n    this._express.set('trust proxy', opts?.endpointOpts?.trustProxy ?? true)\n    this.setupSwaggerUi()\n  }\n\n  private setupSwaggerUi() {\n    fetch(this.OID4VP_SWAGGER_URL)\n      .then((res) => res.json())\n      .then((swagger: any) => {\n        const apiDocs = `${this._basePath}/api-docs`\n        console.log(`[OID4P] API docs available at ${apiDocs}`)\n\n        this._router.use(\n          '/api-docs',\n          (req: Request, res: Response, next: any) => {\n            const regex = `${apiDocs.replace(/\\//, '\\/')}`.replace('/oid4vp', '').replace(/\\/api-docs.*/, '')\n            swagger.servers = [{ url: `${req.protocol}://${req.get('host')}${regex}`, description: 'This server' }]\n            // @ts-ignore\n            req.swaggerDoc = swagger\n            next()\n          },\n          swaggerUi.serveFiles(swagger, options),\n          swaggerUi.setup(),\n        )\n      })\n      .catch((err) => {\n        console.log(`[OID4VP] Unable to fetch swagger document: ${err}. Will not host api-docs on this instance`)\n      })\n    const options = {\n      // customCss: '.swagger-ui .topbar { display: none }',\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<IPresentationExchange & ISIOPv2RP> {\n    return this._agent\n  }\n\n  get opts(): ISIOPv2RPRestAPIOpts | undefined {\n    return this._opts\n  }\n}\n"],"mappings":"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","names":["parseAuthorizationResponse","request","contentType","header","payload","body","JSON","parse","presentation_submission","console","log","vp_token","startsWith","endsWith","CredentialMapper","isJsonLdAsString","Error","verifyAuthResponseSIOPv2Endpoint","router","context","opts","enabled","path","post","checkAuth","endpoint","response","correlationId","definitionId","tenantId","version","params","sendErrorResponse","stringify","definitionItems","agent","pdmGetDefinitions","filter","length","statusCode","statusMessage","send","authorizationResponse","definitionItem","verifiedResponse","siopVerifyAuthResponse","presentationDefinitions","location","presentationDefinitionLocation","PresentationDefinitionLocation","TOPLEVEL_PRESENTATION_DEF","definition","definitionPayload","dcqlQuery","dcqlPayload","wrappedPresentation","oid4vpSubmission","presentations","presentation","authorizationChallengeValidationResponse","presentation_during_issuance_session","is_first_party","setHeader","responseRedirectURI","siopGetRedirectURI","state","redirect_uri","error","getAuthRequestSIOPv2Endpoint","get","requestState","siopGetAuthRequestState","errorOnNotFound","requestObject","toJwt","e","message","undefined","siopUpdateAuthRequestState","import_did_auth_siop","import_ssi_express_support","import_ssi_sdk","createAuthRequestWebappEndpoint","router","context","opts","enabled","console","log","path","post","checkAuth","endpoint","request","response","definitionId","params","sendErrorResponse","state","body","uuid","correlationId","qrCodeOpts","requestByReferenceURI","uriWithBase","baseURI","siopBaseURI","responseURI","responseRedirectURI","response_redirect_uri","authRequestURI","agent","siopCreateAuthRequestURI","nonce","responseURIType","qrCodeDataUri","AwesomeQR","qrCode","text","draw","toString","authRequestBody","authStatusURI","webappAuthStatusPath","webappBaseURI","JSON","stringify","json","error","authStatusWebappEndpoint","requestState","siopGetAuthRequestState","errorOnNotFound","undefined","statusCode","statusBody","status","lastUpdated","Date","now","includeVerifiedData","VerifiedDataMode","NONE","responseState","siopGetAuthResponseState","overallState","message","AuthorizationResponseStateStatus","VERIFIED","payload","mergedPayloads","hasher","defaultHasher","verifiedData","debug","removeAuthRequestStateWebappEndpoint","delete","siopDeleteAuthState","getDefinitionsEndpoint","get","definitions","pdmGetDefinitions","import_ssi_sdk","import_ssi_express_support","SIOPv2RPApiServer","_express","_router","_agent","_opts","_basePath","OID4VP_SWAGGER_URL","constructor","args","agent","opts","copyGlobalAuthToEndpoints","keys","endpointOpts","globalAuth","secureSiopEndpoints","expressSupport","express","Router","context","agentContext","features","enableFeatures","console","log","JSON","stringify","includes","createAuthRequestWebappEndpoint","webappCreateAuthRequest","authStatusWebappEndpoint","webappAuthStatus","removeAuthRequestStateWebappEndpoint","webappDeleteAuthRequest","getDefinitionsEndpoint","webappGetDefinitions","getAuthRequestSIOPv2Endpoint","siopGetAuthRequest","verifyAuthResponseSIOPv2Endpoint","siopVerifyAuthResponse","basePath","use","router","set","trustProxy","setupSwaggerUi","fetch","then","res","json","swagger","apiDocs","req","next","regex","replace","servers","url","protocol","get","description","swaggerDoc","swaggerUi","serveFiles","options","setup","catch","err"]}