@sphereon/ssi-sdk.siopv2-oid4vp-rp-rest-api 0.32.1-next.13 → 0.32.1-next.145

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.
@@ -1 +1 @@
1
- {"version":3,"file":"siop-api-functions.d.ts","sourceRoot":"","sources":["../src/siop-api-functions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,8BAA8B,EAAE,MAAM,yBAAyB,CAAA;AACtG,OAAO,EAAa,mBAAmB,EAAqB,MAAM,+BAA+B,CAAA;AAEjG,OAAO,EAAqB,MAAM,EAAE,MAAM,SAAS,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE1C,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,gBAAgB,EACzB,IAAI,CAAC,EAAE,mBAAmB,GAAG;IAAE,8BAA8B,CAAC,EAAE,8BAA8B,CAAA;CAAE,QA4EjG;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,mBAAmB,QAiDjH"}
1
+ {"version":3,"file":"siop-api-functions.d.ts","sourceRoot":"","sources":["../src/siop-api-functions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,8BAA8B,EAAE,MAAM,yBAAyB,CAAA;AACtG,OAAO,EAAa,mBAAmB,EAAqB,MAAM,+BAA+B,CAAA;AAGjG,OAAO,EAAqB,MAAM,EAAE,MAAM,SAAS,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAsC1C,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,gBAAgB,EACzB,IAAI,CAAC,EAAE,mBAAmB,GAAG;IAAE,8BAA8B,CAAC,EAAE,8BAA8B,CAAA;CAAE,QAuEjG;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,mBAAmB,QAiDjH"}
@@ -13,6 +13,33 @@ exports.verifyAuthResponseSIOPv2Endpoint = verifyAuthResponseSIOPv2Endpoint;
13
13
  exports.getAuthRequestSIOPv2Endpoint = getAuthRequestSIOPv2Endpoint;
14
14
  const did_auth_siop_1 = require("@sphereon/did-auth-siop");
15
15
  const ssi_express_support_1 = require("@sphereon/ssi-express-support");
16
+ const ssi_types_1 = require("@sphereon/ssi-types");
17
+ const parseAuthorizationResponse = (request) => {
18
+ const contentType = request.header('content-type');
19
+ if (contentType === 'application/json') {
20
+ const payload = typeof request.body === 'string' ? JSON.parse(request.body) : request.body;
21
+ return payload;
22
+ }
23
+ if (contentType === 'application/x-www-form-urlencoded') {
24
+ const payload = request.body;
25
+ // Parse presentation_submission if it's a string
26
+ if (typeof payload.presentation_submission === 'string') {
27
+ console.log(`Supplied presentation_submission was a string instead of JSON. Correcting, but external party should fix their implementation!`);
28
+ payload.presentation_submission = JSON.parse(payload.presentation_submission);
29
+ }
30
+ // when using FORM_URL_ENCODED, vp_token comes back as string not matter whether the input was string, object or array. Handled below.
31
+ if (typeof payload.vp_token === 'string') {
32
+ const { vp_token } = payload;
33
+ // The only use case where vp_object is an object is JsonLdAsString atm. For arrays, any objects will be parsed along with the array
34
+ // (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)
35
+ if ((vp_token.startsWith('[') && vp_token.endsWith(']')) || ssi_types_1.CredentialMapper.isJsonLdAsString(vp_token)) {
36
+ payload.vp_token = JSON.parse(vp_token);
37
+ }
38
+ }
39
+ return payload;
40
+ }
41
+ throw new Error(`Unsupported content type: ${contentType}. Currently only application/x-www-form-urlencoded and application/json (for direct_post) are supported`);
42
+ };
16
43
  function verifyAuthResponseSIOPv2Endpoint(router, context, opts) {
17
44
  var _a;
18
45
  if ((opts === null || opts === void 0 ? void 0 : opts.enabled) === false) {
@@ -37,22 +64,9 @@ function verifyAuthResponseSIOPv2Endpoint(router, context, opts) {
37
64
  response.statusMessage = `No definition ${definitionId}`;
38
65
  return response.send();
39
66
  }
40
- const authorizationResponse = typeof request.body === 'string' ? JSON.parse(request.body) : request.body;
41
- if (typeof authorizationResponse.presentation_submission === 'string') {
42
- console.log(`Supplied presentation_submission was a string instead of JSON. Correcting, but external party should fix their implementation!`);
43
- authorizationResponse.presentation_submission = JSON.parse(authorizationResponse.presentation_submission);
44
- }
45
- if (typeof authorizationResponse.vp_token === 'string') {
46
- // arrays pass as string when using FORM_URL_ENCODED
47
- if (authorizationResponse.vp_token.startsWith('[') && authorizationResponse.vp_token.endsWith(']')) {
48
- authorizationResponse.vp_token = JSON.parse(authorizationResponse.vp_token);
49
- }
50
- else {
51
- authorizationResponse.vp_token = [authorizationResponse.vp_token];
52
- }
53
- }
67
+ const authorizationResponse = parseAuthorizationResponse(request);
54
68
  console.log(`URI: ${JSON.stringify(authorizationResponse)}`);
55
- const definition = definitionItems[0].definitionPayload;
69
+ const definitionItem = definitionItems[0];
56
70
  const verifiedResponse = yield context.agent.siopVerifyAuthResponse({
57
71
  authorizationResponse,
58
72
  correlationId,
@@ -60,17 +74,23 @@ function verifyAuthResponseSIOPv2Endpoint(router, context, opts) {
60
74
  presentationDefinitions: [
61
75
  {
62
76
  location: (_a = opts === null || opts === void 0 ? void 0 : opts.presentationDefinitionLocation) !== null && _a !== void 0 ? _a : did_auth_siop_1.PresentationDefinitionLocation.TOPLEVEL_PRESENTATION_DEF,
63
- definition,
77
+ definition: definitionItem.definitionPayload,
64
78
  },
65
79
  ],
80
+ dcqlQuery: definitionItem.dcqlPayload,
66
81
  });
67
82
  const wrappedPresentation = (_b = verifiedResponse === null || verifiedResponse === void 0 ? void 0 : verifiedResponse.oid4vpSubmission) === null || _b === void 0 ? void 0 : _b.presentations[0];
68
83
  if (wrappedPresentation) {
69
84
  // const credentialSubject = wrappedPresentation.presentation.verifiableCredential[0]?.credential?.credentialSubject
70
85
  // console.log(JSON.stringify(credentialSubject, null, 2))
71
86
  console.log('PRESENTATION:' + JSON.stringify(wrappedPresentation.presentation, null, 2));
72
- const responseRedirectURI = yield context.agent.siopGetRedirectURI({ correlationId, definitionId, state: verifiedResponse.state });
73
87
  response.statusCode = 200;
88
+ const authorizationChallengeValidationResponse = { presentation_during_issuance_session: verifiedResponse.correlationId };
89
+ if (authorizationResponse.is_first_party) {
90
+ response.setHeader('Content-Type', 'application/json');
91
+ return response.send(JSON.stringify(authorizationChallengeValidationResponse));
92
+ }
93
+ const responseRedirectURI = yield context.agent.siopGetRedirectURI({ correlationId, definitionId, state: verifiedResponse.state });
74
94
  if (responseRedirectURI) {
75
95
  response.setHeader('Content-Type', 'application/json');
76
96
  return response.send(JSON.stringify({ redirect_uri: responseRedirectURI }));
@@ -1 +1 @@
1
- {"version":3,"file":"siop-api-functions.js","sourceRoot":"","sources":["../src/siop-api-functions.ts"],"names":[],"mappings":";;;;;;;;;;;AAMA,4EA+EC;AAED,oEAiDC;AAxID,2DAAsG;AACtG,uEAAiG;AAKjG,SAAgB,gCAAgC,CAC9C,MAAc,EACd,OAAyB,EACzB,IAAgG;;IAEhG,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,MAAK,KAAK,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAA;QAC3D,OAAM;IACR,CAAC;IACD,MAAM,IAAI,GAAG,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,mCAAI,+DAA+D,CAAA;IAC1F,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAA,+BAAS,EAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,CAAC,EAAE,CAAO,OAAgB,EAAE,QAAkB,EAAE,EAAE;;QAC1F,IAAI,CAAC;YACH,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAA;YACzE,IAAI,CAAC,aAAa,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpC,OAAO,CAAC,GAAG,CAAC,6EAA6E,aAAa,mBAAmB,YAAY,EAAE,CAAC,CAAA;gBACxI,OAAO,IAAA,uCAAiB,EAAC,QAAQ,EAAE,GAAG,EAAE,yCAAyC,CAAC,CAAA;YACpF,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAA;YACpD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;YAClD,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;YAChH,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjC,OAAO,CAAC,GAAG,CAAC,4BAA4B,YAAY,8BAA8B,CAAC,CAAA;gBACnF,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAA;gBACzB,QAAQ,CAAC,aAAa,GAAG,iBAAiB,YAAY,EAAE,CAAA;gBACxD,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAA;YACxB,CAAC;YAED,MAAM,qBAAqB,GACzB,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAkC,CAAC,CAAC,CAAE,OAAO,CAAC,IAAqC,CAAA;YAChJ,IAAI,OAAO,qBAAqB,CAAC,uBAAuB,KAAK,QAAQ,EAAE,CAAC;gBACtE,OAAO,CAAC,GAAG,CAAC,gIAAgI,CAAC,CAAA;gBAC7I,qBAAqB,CAAC,uBAAuB,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,uBAAuB,CAA2B,CAAA;YACrI,CAAC;YACD,IAAI,OAAO,qBAAqB,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACvD,oDAAoD;gBACpD,IAAI,qBAAqB,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,qBAAqB,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBACnG,qBAAqB,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAA;gBAC7E,CAAC;qBAAM,CAAC;oBACN,qBAAqB,CAAC,QAAQ,GAAG,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAA;gBACnE,CAAC;YACH,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAA;YAE5D,MAAM,UAAU,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAA;YACvD,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC;gBAClE,qBAAqB;gBACrB,aAAa;gBACb,YAAY;gBACZ,uBAAuB,EAAE;oBACvB;wBACE,QAAQ,EAAE,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,8BAA8B,mCAAI,8CAA8B,CAAC,yBAAyB;wBAC1G,UAAU;qBACX;iBACF;aACF,CAAC,CAAA;YAEF,MAAM,mBAAmB,GAAG,MAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,gBAAgB,0CAAE,aAAa,CAAC,CAAC,CAAC,CAAA;YAChF,IAAI,mBAAmB,EAAE,CAAC;gBACxB,oHAAoH;gBACpH,0DAA0D;gBAC1D,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;gBACxF,MAAM,mBAAmB,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAA;gBAClI,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAA;gBACzB,IAAI,mBAAmB,EAAE,CAAC;oBACxB,QAAQ,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAA;oBACtD,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAA;gBAC7E,CAAC;gBACD,uBAAuB;YACzB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAA;gBAC5D,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAA;gBACzB,QAAQ,CAAC,aAAa,GAAG,+CAA+C,CAAA;YAC1E,CAAC;YACD,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAA;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YACpB,OAAO,IAAA,uCAAiB,EAAC,QAAQ,EAAE,GAAG,EAAE,8BAA8B,EAAE,KAAK,CAAC,CAAA;QAChF,CAAC;IACH,CAAC,CAAA,CAAC,CAAA;AACJ,CAAC;AAED,SAAgB,4BAA4B,CAAC,MAAc,EAAE,OAAyB,EAAE,IAA0B;;IAChH,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,MAAK,KAAK,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAA;QACvD,OAAM;IACR,CAAC;IACD,MAAM,IAAI,GAAG,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,mCAAI,8DAA8D,CAAA;IACzF,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAA,+BAAS,EAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,CAAC,EAAE,CAAO,OAAgB,EAAE,QAAkB,EAAE,EAAE;;QACzF,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAA;YAClD,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,CAAA;YAChD,IAAI,CAAC,aAAa,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpC,OAAO,CAAC,GAAG,CAAC,6EAA6E,aAAa,mBAAmB,YAAY,EAAE,CAAC,CAAA;gBACxI,OAAO,IAAA,uCAAiB,EAAC,QAAQ,EAAE,GAAG,EAAE,yCAAyC,CAAC,CAAA;YACpF,CAAC;YACD,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC;gBAC/D,aAAa;gBACb,YAAY;gBACZ,eAAe,EAAE,KAAK;aACvB,CAAC,CAAA;YACF,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,OAAO,CAAC,GAAG,CACT,kGAAkG,aAAa,mBAAmB,YAAY,EAAE,CACjJ,CAAA;gBACD,OAAO,IAAA,uCAAiB,EAAC,QAAQ,EAAE,GAAG,EAAE,yCAAyC,CAAC,CAAA;YACpF,CAAC;YACD,MAAM,aAAa,GAAG,MAAM,CAAA,MAAA,MAAA,YAAY,CAAC,OAAO,0CAAE,aAAa,0CAAE,KAAK,EAAE,CAAA,CAAA;YACxE,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;YAClC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;YAE1B,IAAI,KAAyB,CAAA;YAC7B,IAAI,CAAC;gBACH,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAA;gBACzB,QAAQ,CAAC,SAAS,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAA;gBACrD,OAAO,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;YACrC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,KAAK,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAA;gBAC9E,OAAO,IAAA,uCAAiB,EAAC,QAAQ,EAAE,GAAG,EAAE,qCAAqC,EAAE,CAAC,CAAC,CAAA;YACnF,CAAC;oBAAS,CAAC;gBACT,MAAM,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC;oBAC7C,aAAa;oBACb,YAAY;oBACZ,KAAK,EAAE,MAAM;oBACb,KAAK;iBACN,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAA,uCAAiB,EAAC,QAAQ,EAAE,GAAG,EAAE,qCAAqC,EAAE,KAAK,CAAC,CAAA;QACvF,CAAC;IACH,CAAC,CAAA,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"siop-api-functions.js","sourceRoot":"","sources":["../src/siop-api-functions.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sphereon/ssi-sdk.siopv2-oid4vp-rp-rest-api",
3
- "version": "0.32.1-next.13+886ea5b6",
3
+ "version": "0.32.1-next.145+1d1de14c",
4
4
  "source": "src/index.ts",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -11,16 +11,16 @@
11
11
  "start:dev": "ts-node __tests__/RestAPI.ts"
12
12
  },
13
13
  "dependencies": {
14
- "@sphereon/did-auth-siop": "0.16.1-next.224",
15
- "@sphereon/ssi-express-support": "0.32.1-next.13+886ea5b6",
16
- "@sphereon/ssi-sdk.core": "0.32.1-next.13+886ea5b6",
17
- "@sphereon/ssi-sdk.credential-validation": "0.32.1-next.13+886ea5b6",
18
- "@sphereon/ssi-sdk.kv-store-temp": "0.32.1-next.13+886ea5b6",
19
- "@sphereon/ssi-sdk.pd-manager": "0.32.1-next.13+886ea5b6",
20
- "@sphereon/ssi-sdk.presentation-exchange": "0.32.1-next.13+886ea5b6",
21
- "@sphereon/ssi-sdk.siopv2-oid4vp-common": "0.32.1-next.13+886ea5b6",
22
- "@sphereon/ssi-sdk.siopv2-oid4vp-rp-auth": "0.32.1-next.13+886ea5b6",
23
- "@sphereon/ssi-types": "0.32.1-next.13+886ea5b6",
14
+ "@sphereon/did-auth-siop": "0.16.1-next.339",
15
+ "@sphereon/ssi-express-support": "0.32.1-next.145+1d1de14c",
16
+ "@sphereon/ssi-sdk.core": "0.32.1-next.145+1d1de14c",
17
+ "@sphereon/ssi-sdk.credential-validation": "0.32.1-next.145+1d1de14c",
18
+ "@sphereon/ssi-sdk.kv-store-temp": "0.32.1-next.145+1d1de14c",
19
+ "@sphereon/ssi-sdk.pd-manager": "0.32.1-next.145+1d1de14c",
20
+ "@sphereon/ssi-sdk.presentation-exchange": "0.32.1-next.145+1d1de14c",
21
+ "@sphereon/ssi-sdk.siopv2-oid4vp-common": "0.32.1-next.145+1d1de14c",
22
+ "@sphereon/ssi-sdk.siopv2-oid4vp-rp-auth": "0.32.1-next.145+1d1de14c",
23
+ "@sphereon/ssi-types": "0.32.1-next.145+1d1de14c",
24
24
  "@veramo/core": "4.2.0",
25
25
  "@veramo/credential-w3c": "4.2.0",
26
26
  "body-parser": "^1.20.2",
@@ -38,8 +38,8 @@
38
38
  "@sphereon/pex": "5.0.0-unstable.28",
39
39
  "@sphereon/pex-models": "^2.3.2",
40
40
  "@sphereon/ssi-sdk-ext.did-provider-jwk": "0.27.0",
41
- "@sphereon/ssi-sdk.data-store": "0.32.1-next.13+886ea5b6",
42
- "@sphereon/ssi-sdk.vc-handler-ld-local": "0.32.1-next.13+886ea5b6",
41
+ "@sphereon/ssi-sdk.data-store": "0.32.1-next.145+1d1de14c",
42
+ "@sphereon/ssi-sdk.vc-handler-ld-local": "0.32.1-next.145+1d1de14c",
43
43
  "@types/body-parser": "^1.19.5",
44
44
  "@types/cookie-parser": "^1.4.7",
45
45
  "@types/cors": "^2.8.17",
@@ -98,5 +98,5 @@
98
98
  "Authenticator"
99
99
  ],
100
100
  "nx": {},
101
- "gitHead": "886ea5b60c8ca5709ada1b053ee3baf5363861d9"
101
+ "gitHead": "1d1de14cc4240fac80d3cc765026f719f3067357"
102
102
  }
@@ -1,9 +1,46 @@
1
1
  import { AuthorizationResponsePayload, PresentationDefinitionLocation } from '@sphereon/did-auth-siop'
2
2
  import { checkAuth, ISingleEndpointOpts, sendErrorResponse } from '@sphereon/ssi-express-support'
3
- import { PresentationSubmission } from '@sphereon/ssi-types'
3
+ import { CredentialMapper } from '@sphereon/ssi-types'
4
+ import { AuthorizationChallengeValidationResponse } from '@sphereon/ssi-sdk.siopv2-oid4vp-common'
4
5
  import { Request, Response, Router } from 'express'
5
6
  import { IRequiredContext } from './types'
6
7
 
8
+ const parseAuthorizationResponse = (request: Request): AuthorizationResponsePayload => {
9
+ const contentType = request.header('content-type')
10
+
11
+ if (contentType === 'application/json') {
12
+ const payload = typeof request.body === 'string' ? JSON.parse(request.body) : request.body
13
+ return payload as AuthorizationResponsePayload
14
+ }
15
+
16
+ if (contentType === 'application/x-www-form-urlencoded') {
17
+ const payload = request.body as AuthorizationResponsePayload
18
+
19
+ // Parse presentation_submission if it's a string
20
+ if (typeof payload.presentation_submission === 'string') {
21
+ console.log(`Supplied presentation_submission was a string instead of JSON. Correcting, but external party should fix their implementation!`)
22
+ payload.presentation_submission = JSON.parse(payload.presentation_submission)
23
+ }
24
+
25
+ // when using FORM_URL_ENCODED, vp_token comes back as string not matter whether the input was string, object or array. Handled below.
26
+ if (typeof payload.vp_token === 'string') {
27
+ const { vp_token } = payload
28
+
29
+ // The only use case where vp_object is an object is JsonLdAsString atm. For arrays, any objects will be parsed along with the array
30
+ // (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)
31
+ if ((vp_token.startsWith('[') && vp_token.endsWith(']')) || CredentialMapper.isJsonLdAsString(vp_token)) {
32
+ payload.vp_token = JSON.parse(vp_token)
33
+ }
34
+ }
35
+
36
+ return payload
37
+ }
38
+
39
+ throw new Error(
40
+ `Unsupported content type: ${contentType}. Currently only application/x-www-form-urlencoded and application/json (for direct_post) are supported`,
41
+ )
42
+ }
43
+
7
44
  export function verifyAuthResponseSIOPv2Endpoint(
8
45
  router: Router,
9
46
  context: IRequiredContext,
@@ -31,23 +68,10 @@ export function verifyAuthResponseSIOPv2Endpoint(
31
68
  return response.send()
32
69
  }
33
70
 
34
- const authorizationResponse =
35
- typeof request.body === 'string' ? (JSON.parse(request.body) as AuthorizationResponsePayload) : (request.body as AuthorizationResponsePayload)
36
- if (typeof authorizationResponse.presentation_submission === 'string') {
37
- console.log(`Supplied presentation_submission was a string instead of JSON. Correcting, but external party should fix their implementation!`)
38
- authorizationResponse.presentation_submission = JSON.parse(authorizationResponse.presentation_submission) as PresentationSubmission
39
- }
40
- if (typeof authorizationResponse.vp_token === 'string') {
41
- // arrays pass as string when using FORM_URL_ENCODED
42
- if (authorizationResponse.vp_token.startsWith('[') && authorizationResponse.vp_token.endsWith(']')) {
43
- authorizationResponse.vp_token = JSON.parse(authorizationResponse.vp_token)
44
- } else {
45
- authorizationResponse.vp_token = [authorizationResponse.vp_token]
46
- }
47
- }
71
+ const authorizationResponse = parseAuthorizationResponse(request)
48
72
  console.log(`URI: ${JSON.stringify(authorizationResponse)}`)
49
73
 
50
- const definition = definitionItems[0].definitionPayload
74
+ const definitionItem = definitionItems[0]
51
75
  const verifiedResponse = await context.agent.siopVerifyAuthResponse({
52
76
  authorizationResponse,
53
77
  correlationId,
@@ -55,9 +79,10 @@ export function verifyAuthResponseSIOPv2Endpoint(
55
79
  presentationDefinitions: [
56
80
  {
57
81
  location: opts?.presentationDefinitionLocation ?? PresentationDefinitionLocation.TOPLEVEL_PRESENTATION_DEF,
58
- definition,
82
+ definition: definitionItem.definitionPayload,
59
83
  },
60
84
  ],
85
+ dcqlQuery: definitionItem.dcqlPayload,
61
86
  })
62
87
 
63
88
  const wrappedPresentation = verifiedResponse?.oid4vpSubmission?.presentations[0]
@@ -65,8 +90,15 @@ export function verifyAuthResponseSIOPv2Endpoint(
65
90
  // const credentialSubject = wrappedPresentation.presentation.verifiableCredential[0]?.credential?.credentialSubject
66
91
  // console.log(JSON.stringify(credentialSubject, null, 2))
67
92
  console.log('PRESENTATION:' + JSON.stringify(wrappedPresentation.presentation, null, 2))
68
- const responseRedirectURI = await context.agent.siopGetRedirectURI({ correlationId, definitionId, state: verifiedResponse.state })
69
93
  response.statusCode = 200
94
+
95
+ const authorizationChallengeValidationResponse: AuthorizationChallengeValidationResponse = { presentation_during_issuance_session: verifiedResponse.correlationId }
96
+ if (authorizationResponse.is_first_party) {
97
+ response.setHeader('Content-Type', 'application/json')
98
+ return response.send(JSON.stringify(authorizationChallengeValidationResponse))
99
+ }
100
+
101
+ const responseRedirectURI = await context.agent.siopGetRedirectURI({ correlationId, definitionId, state: verifiedResponse.state })
70
102
  if (responseRedirectURI) {
71
103
  response.setHeader('Content-Type', 'application/json')
72
104
  return response.send(JSON.stringify({ redirect_uri: responseRedirectURI }))