@pagopa/io-react-native-wallet 2.0.0-next.8 → 2.0.0-next.9

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.
@@ -17,15 +17,96 @@ var _converter = require("../../mdoc/converter");
17
17
 
18
18
  // handy alias
19
19
 
20
- const parseCredentialSdJwt = function (credentialConfig, _ref) {
20
+ // The data used to create localized names
21
+
22
+ // The resulting object of localized names { en: "Name", it: "Nome" }
23
+
24
+ // The core structure being built: a node containing the actual value and its localized names
25
+
26
+ // A path can consist of object keys, array indices, or null for mapping
27
+
28
+ // A union of all possible shapes. It can be a custom PropertyNode or a standard object/array structure
29
+
30
+ // Helper to build localized names from the display data.
31
+ const buildName = display => display.reduce((names, _ref) => {
32
+ let {
33
+ locale,
34
+ name
35
+ } = _ref;
36
+ return {
37
+ ...names,
38
+ [locale]: name
39
+ };
40
+ }, {});
41
+
42
+ /**
43
+ * Recursively constructs a nested object with descriptive properties from a path.
44
+ *
45
+ * @param currentObject - The object or array being built upon.
46
+ * @param path - The path segments to follow.
47
+ * @param sourceValue - The raw value to place at the end of the path.
48
+ * @param displayData - The data for generating localized names.
49
+ * @returns The new object or array structure.
50
+ */
51
+ const createNestedProperty = (currentObject, path, sourceValue, displayData) => {
52
+ const [key, ...rest] = path;
53
+
54
+ // Case 1: Map over an array (key is null)
55
+ if (key === null) {
56
+ if (!Array.isArray(sourceValue)) return currentObject;
57
+
58
+ // We assert the type here because we know this branch handles PropertyNodes
59
+ const node = currentObject;
60
+ const existingValue = Array.isArray(node.value) ? node.value : [];
61
+ const mappedArray = sourceValue.map((item, idx) => createNestedProperty(existingValue[idx] || {}, rest, item, displayData));
62
+ return {
63
+ ...node,
64
+ value: mappedArray,
65
+ name: node.name ?? buildName(displayData)
66
+ };
67
+ }
68
+
69
+ // Case 2: Handle an object key (key is a string)
70
+ if (typeof key === "string") {
71
+ const nextSourceValue = typeof sourceValue === "object" && sourceValue !== null && !Array.isArray(sourceValue) && key in sourceValue ? sourceValue[key] : sourceValue;
72
+
73
+ // base case
74
+ if (rest.length === 0) {
75
+ return {
76
+ ...currentObject,
77
+ [key]: {
78
+ value: nextSourceValue,
79
+ name: buildName(displayData)
80
+ }
81
+ };
82
+ }
83
+
84
+ // recursive step
85
+ const nextObject = currentObject[key] || {};
86
+ return {
87
+ ...currentObject,
88
+ [key]: createNestedProperty(nextObject, rest, nextSourceValue, displayData)
89
+ };
90
+ }
91
+
92
+ // Case 3: Handle a specific array index (key is a number)
93
+ if (typeof key === "number") {
94
+ const newArray = Array.isArray(currentObject) ? [...currentObject] : [];
95
+ const nextValue = Array.isArray(sourceValue) ? sourceValue[key] : undefined;
96
+ newArray[key] = createNestedProperty(newArray[key] || {}, rest, nextValue, displayData);
97
+ return newArray;
98
+ }
99
+ return currentObject;
100
+ };
101
+ const parseCredentialSdJwt = function (credentialConfig, _ref2) {
21
102
  let {
22
103
  sdJwt,
23
104
  disclosures
24
- } = _ref;
105
+ } = _ref2;
25
106
  let ignoreMissingAttributes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
26
107
  let includeUndefinedAttributes = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
27
108
  if (credentialConfig.format !== sdJwt.header.typ) {
28
- const message = `Received credential is of an unknwown type. Expected one of [${credentialConfig.format}], received '${sdJwt.header.typ}'`;
109
+ const message = `Received credential is of an unknown type. Expected one of [${credentialConfig.format}], received '${sdJwt.header.typ}'`;
29
110
  _logging.Logger.log(_logging.LogLevel.ERROR, message);
30
111
  throw new _errors.IoWalletError(message);
31
112
  }
@@ -36,64 +117,39 @@ const parseCredentialSdJwt = function (credentialConfig, _ref) {
36
117
 
37
118
  const attrDefinitions = credentialConfig.claims;
38
119
 
39
- // the key of the attribute defintion must match the disclosure's name
40
- const attrsNotInDisclosures = attrDefinitions.filter(definition => !disclosures.some(_ref2 => {
41
- let [, name] = _ref2;
120
+ // Validate that all attributes from the config exist in the disclosures
121
+ const attrsNotInDisclosures = attrDefinitions.filter(definition => !disclosures.some(_ref3 => {
122
+ let [, name] = _ref3;
42
123
  return name === definition.path[0];
43
- }) // Ignore nested paths for now, see https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0-15.html#name-claims-path-pointer
44
- );
45
-
46
- if (attrsNotInDisclosures.length > 0) {
124
+ }));
125
+ if (attrsNotInDisclosures.length > 0 && !ignoreMissingAttributes) {
47
126
  const missing = attrsNotInDisclosures.map(_ => _.path[0]).join(", ");
48
- const received = disclosures.map(_ => _[1 /* name */]).join(", ");
49
- if (!ignoreMissingAttributes) {
50
- const message = `Some attributes are missing in the credential. Missing: [${missing}], received: [${received}]`;
51
- _logging.Logger.log(_logging.LogLevel.ERROR, message);
52
- throw new _errors.IoWalletError(message);
53
- }
127
+ const received = disclosures.map(_ => _[1]).join(", ");
128
+ const message = `Some attributes are missing in the credential. Missing: [${missing}], received: [${received}]`;
129
+ _logging.Logger.log(_logging.LogLevel.ERROR, message);
130
+ throw new _errors.IoWalletError(message);
54
131
  }
55
-
56
- // attributes that are defined in the issuer configuration
57
- // and are present in the disclosure set
58
- const definedValues = Object.fromEntries(attrDefinitions
59
- // retrieve the value from the disclosure set
60
- .map(_ref3 => {
132
+ const definedValues = {};
133
+ for (const {
134
+ path,
135
+ display
136
+ } of attrDefinitions) {
61
137
  var _disclosures$find;
62
- let {
63
- path,
64
- ...definition
65
- } = _ref3;
66
- return [path[0], {
67
- ...definition,
68
- value: (_disclosures$find = disclosures.find(_ => _[1 /* name */] === path[0])) === null || _disclosures$find === void 0 ? void 0 : _disclosures$find[2 /* value */]
69
- }];
70
- })
71
- // add a human readable attribute name, with i18n, in the form { locale: name }
72
- // example: { "it-IT": "Nome", "en-EN": "Name", "es-ES": "Nombre" }
73
- .map(_ref4 => {
74
- let [attrKey, {
75
- display,
76
- ...definition
77
- }] = _ref4;
78
- return [attrKey, {
79
- ...definition,
80
- name: display.reduce((names, _ref5) => {
81
- let {
82
- locale,
83
- name
84
- } = _ref5;
85
- return {
86
- ...names,
87
- [locale]: name
88
- };
89
- }, {})
90
- }];
91
- }));
138
+ const attrKey = path[0];
139
+ const disclosureValue = (_disclosures$find = disclosures.find(_ref4 => {
140
+ let [, name] = _ref4;
141
+ return name === attrKey;
142
+ })) === null || _disclosures$find === void 0 ? void 0 : _disclosures$find[2];
143
+ if (disclosureValue !== undefined) {
144
+ const enriched = createNestedProperty(definedValues, path, disclosureValue, display);
145
+ Object.assign(definedValues, enriched);
146
+ }
147
+ }
92
148
  if (includeUndefinedAttributes) {
93
149
  // attributes that are in the disclosure set
94
150
  // but are not defined in the issuer configuration
95
- const undefinedValues = Object.fromEntries(disclosures.filter(_ => !Object.keys(definedValues).includes(_[1])).map(_ref6 => {
96
- let [, key, value] = _ref6;
151
+ const undefinedValues = Object.fromEntries(disclosures.filter(_ => !Object.keys(definedValues).includes(_[1])).map(_ref5 => {
152
+ let [, key, value] = _ref5;
97
153
  return [key, {
98
154
  value,
99
155
  name: key
@@ -106,10 +162,10 @@ const parseCredentialSdJwt = function (credentialConfig, _ref) {
106
162
  }
107
163
  return definedValues;
108
164
  };
109
- const parseCredentialMDoc = function (credentialConfig, _ref7) {
165
+ const parseCredentialMDoc = function (credentialConfig, _ref6) {
110
166
  let {
111
167
  issuerSigned
112
- } = _ref7;
168
+ } = _ref6;
113
169
  let ignoreMissingAttributes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
114
170
  let includeUndefinedAttributes = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
115
171
  if (!credentialConfig) {
@@ -118,37 +174,37 @@ const parseCredentialMDoc = function (credentialConfig, _ref7) {
118
174
  if (!credentialConfig.claims) {
119
175
  throw new _errors.IoWalletError("Missing claims in the credential subject");
120
176
  }
121
- const attrDefinitions = credentialConfig.claims.map(_ref8 => {
177
+ const attrDefinitions = credentialConfig.claims.map(_ref7 => {
122
178
  let {
123
179
  path: [namespace, attribute],
124
180
  display
125
- } = _ref8;
181
+ } = _ref7;
126
182
  return [namespace, attribute, display];
127
183
  });
128
184
  if (!issuerSigned.nameSpaces) {
129
185
  throw new _errors.IoWalletError("Missing claims in the credential");
130
186
  }
131
- const flatNamespaces = Object.entries(issuerSigned.nameSpaces).flatMap(_ref9 => {
132
- let [namespace, values] = _ref9;
187
+ const flatNamespaces = Object.entries(issuerSigned.nameSpaces).flatMap(_ref8 => {
188
+ let [namespace, values] = _ref8;
133
189
  return values.map(v => [namespace, v.elementIdentifier, v.elementValue]);
134
190
  });
135
191
 
136
192
  // Check that all mandatory attributes defined in the issuer configuration are present in the disclosure set
137
193
  // and filter the non present ones
138
- const attrsNotInDisclosures = attrDefinitions.filter(_ref10 => {
139
- let [attrDefNamespace, attrKey] = _ref10;
140
- return !flatNamespaces.some(_ref11 => {
141
- let [namespace, claim] = _ref11;
194
+ const attrsNotInDisclosures = attrDefinitions.filter(_ref9 => {
195
+ let [attrDefNamespace, attrKey] = _ref9;
196
+ return !flatNamespaces.some(_ref10 => {
197
+ let [namespace, claim] = _ref10;
142
198
  return attrDefNamespace === namespace && attrKey === claim;
143
199
  });
144
200
  });
145
201
  if (attrsNotInDisclosures.length > 0) {
146
- const missing = attrsNotInDisclosures.map(_ref12 => {
147
- let [, attrKey] = _ref12;
202
+ const missing = attrsNotInDisclosures.map(_ref11 => {
203
+ let [, attrKey] = _ref11;
148
204
  return attrKey;
149
205
  }).join(", ");
150
- const received = flatNamespaces.map(_ref13 => {
151
- let [, attrKey] = _ref13;
206
+ const received = flatNamespaces.map(_ref12 => {
207
+ let [, attrKey] = _ref12;
152
208
  return attrKey;
153
209
  }).join(", ");
154
210
  if (!ignoreMissingAttributes) {
@@ -159,38 +215,38 @@ const parseCredentialMDoc = function (credentialConfig, _ref7) {
159
215
  // Attributes defined in the issuer configuration and present in the disclosure set
160
216
  const definedValues = attrDefinitions
161
217
  // Retrieve the value from the corresponding disclosure
162
- .map(_ref14 => {
218
+ .map(_ref13 => {
163
219
  var _flatNamespaces$find;
164
- let [attrDefNamespace, attrKey, display] = _ref14;
220
+ let [attrDefNamespace, attrKey, display] = _ref13;
165
221
  return [attrDefNamespace, attrKey, {
166
222
  display,
167
- value: (_flatNamespaces$find = flatNamespaces.find(_ref15 => {
168
- let [namespace, name] = _ref15;
223
+ value: (_flatNamespaces$find = flatNamespaces.find(_ref14 => {
224
+ let [namespace, name] = _ref14;
169
225
  return attrDefNamespace === namespace && name === attrKey;
170
226
  })) === null || _flatNamespaces$find === void 0 ? void 0 : _flatNamespaces$find[2]
171
227
  }];
172
228
  })
173
229
  //filter the not found elements
174
- .filter(_ref16 => {
175
- let [_, __, definition] = _ref16;
230
+ .filter(_ref15 => {
231
+ let [_, __, definition] = _ref15;
176
232
  return definition.value !== undefined;
177
233
  })
178
234
  // Add a human-readable attribute name, with i18n, in the form { locale: name }
179
235
  // Example: { "it-IT": "Nome", "en-EN": "Name", "es-ES": "Nombre" }
180
- .reduce((acc, _ref17) => {
236
+ .reduce((acc, _ref16) => {
181
237
  let [attrDefNamespace, attrKey, {
182
238
  display,
183
239
  value
184
- }] = _ref17;
240
+ }] = _ref16;
185
241
  return {
186
242
  ...acc,
187
243
  [(0, _utils.getParsedCredentialClaimKey)(attrDefNamespace, attrKey)]: {
188
244
  value,
189
- name: display.reduce((names, _ref18) => {
245
+ name: display.reduce((names, _ref17) => {
190
246
  let {
191
247
  locale,
192
248
  name
193
- } = _ref18;
249
+ } = _ref17;
194
250
  return {
195
251
  ...names,
196
252
  [locale]: name
@@ -200,11 +256,11 @@ const parseCredentialMDoc = function (credentialConfig, _ref7) {
200
256
  };
201
257
  }, {});
202
258
  if (includeUndefinedAttributes) {
203
- const undefinedValues = Object.fromEntries(Object.values(flatNamespaces).filter(_ref19 => {
204
- let [namespace, key] = _ref19;
259
+ const undefinedValues = Object.fromEntries(Object.values(flatNamespaces).filter(_ref18 => {
260
+ let [namespace, key] = _ref18;
205
261
  return !definedValues[(0, _utils.getParsedCredentialClaimKey)(namespace, key)];
206
- }).map(_ref20 => {
207
- let [namespace, key, value] = _ref20;
262
+ }).map(_ref19 => {
263
+ let [namespace, key, value] = _ref19;
208
264
  return [(0, _utils.getParsedCredentialClaimKey)(namespace, key), {
209
265
  value,
210
266
  name: key
@@ -274,12 +330,12 @@ async function verifyCredentialMDoc(rawCredential, x509CertRoot, holderBindingCo
274
330
  }
275
331
  return decodedCredential;
276
332
  }
277
- const verifyAndParseCredentialSdJwt = async (issuerConf, credential, credentialConfigurationId, _ref21) => {
333
+ const verifyAndParseCredentialSdJwt = async (issuerConf, credential, credentialConfigurationId, _ref20) => {
278
334
  let {
279
335
  credentialCryptoContext,
280
336
  ignoreMissingAttributes,
281
337
  includeUndefinedAttributes
282
- } = _ref21;
338
+ } = _ref20;
283
339
  const decoded = await verifyCredentialSdJwt(credential, issuerConf.openid_credential_issuer.jwks.keys, credentialCryptoContext);
284
340
  _logging.Logger.log(_logging.LogLevel.DEBUG, `Decoded credential: ${JSON.stringify(decoded)}`);
285
341
  const credentialConfig = issuerConf.openid_credential_issuer.credential_configurations_supported[credentialConfigurationId];
@@ -296,12 +352,12 @@ const verifyAndParseCredentialSdJwt = async (issuerConf, credential, credentialC
296
352
  issuedAt: typeof maybeIssuedAt === "number" ? new Date(maybeIssuedAt * 1000) : undefined
297
353
  };
298
354
  };
299
- const verifyAndParseCredentialMDoc = async (issuerConf, credential, credentialConfigurationId, _ref22, x509CertRoot) => {
355
+ const verifyAndParseCredentialMDoc = async (issuerConf, credential, credentialConfigurationId, _ref21, x509CertRoot) => {
300
356
  var _parsedCredential$get, _parsedCredential$get2;
301
357
  let {
302
358
  credentialCryptoContext,
303
359
  ignoreMissingAttributes
304
- } = _ref22;
360
+ } = _ref21;
305
361
  if (!x509CertRoot) {
306
362
  throw new _errors.IoWalletError("Missing x509CertRoot");
307
363
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_errors","require","_sdJwt","_converters","_jwk","_mdoc","_const","_utils","_logging","_converter","parseCredentialSdJwt","credentialConfig","_ref","sdJwt","disclosures","ignoreMissingAttributes","arguments","length","undefined","includeUndefinedAttributes","format","header","typ","message","Logger","log","LogLevel","ERROR","IoWalletError","claims","attrDefinitions","attrsNotInDisclosures","filter","definition","some","_ref2","name","path","missing","map","_","join","received","definedValues","Object","fromEntries","_ref3","_disclosures$find","value","find","_ref4","attrKey","display","reduce","names","_ref5","locale","undefinedValues","keys","includes","_ref6","key","parseCredentialMDoc","_ref7","issuerSigned","_ref8","namespace","attribute","nameSpaces","flatNamespaces","entries","flatMap","_ref9","values","v","elementIdentifier","elementValue","_ref10","attrDefNamespace","_ref11","claim","_ref12","_ref13","_ref14","_flatNamespaces$find","_ref15","_ref16","__","acc","_ref17","getParsedCredentialClaimKey","_ref18","_ref19","_ref20","verifyCredentialSdJwt","rawCredential","issuerKeys","holderBindingContext","decodedCredential","holderBindingKey","Promise","all","verifySdJwt","SdJwt4VC","getPublicKey","cnf","payload","isSameThumbprint","jwk","kid","verifyCredentialMDoc","x509CertRoot","verifyMdoc","issuerAuth","deviceKeyInfo","deviceKey","verifyAndParseCredentialSdJwt","issuerConf","credential","credentialConfigurationId","_ref21","credentialCryptoContext","decoded","openid_credential_issuer","jwks","DEBUG","JSON","stringify","credential_configurations_supported","parsedCredential","maybeIssuedAt","getValueFromDisclosures","expiration","Date","exp","issuedAt","verifyAndParseCredentialMDoc","_ref22","_parsedCredential$get","_parsedCredential$get2","expirationDate","extractElementValueAsDate","MDOC_DEFAULT_NAMESPACE","setDate","getDate","verifyAndParseCredential","context","_issuerConf$openid_cr","exports"],"sourceRoot":"../../../../src","sources":["credential/issuance/07-verify-and-parse-credential.ts"],"mappings":"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"}
1
+ {"version":3,"names":["_errors","require","_sdJwt","_converters","_jwk","_mdoc","_const","_utils","_logging","_converter","buildName","display","reduce","names","_ref","locale","name","createNestedProperty","currentObject","path","sourceValue","displayData","key","rest","Array","isArray","node","existingValue","value","mappedArray","map","item","idx","nextSourceValue","length","nextObject","newArray","nextValue","undefined","parseCredentialSdJwt","credentialConfig","_ref2","sdJwt","disclosures","ignoreMissingAttributes","arguments","includeUndefinedAttributes","format","header","typ","message","Logger","log","LogLevel","ERROR","IoWalletError","claims","attrDefinitions","attrsNotInDisclosures","filter","definition","some","_ref3","missing","_","join","received","definedValues","_disclosures$find","attrKey","disclosureValue","find","_ref4","enriched","Object","assign","undefinedValues","fromEntries","keys","includes","_ref5","parseCredentialMDoc","_ref6","issuerSigned","_ref7","namespace","attribute","nameSpaces","flatNamespaces","entries","flatMap","_ref8","values","v","elementIdentifier","elementValue","_ref9","attrDefNamespace","_ref10","claim","_ref11","_ref12","_ref13","_flatNamespaces$find","_ref14","_ref15","__","acc","_ref16","getParsedCredentialClaimKey","_ref17","_ref18","_ref19","verifyCredentialSdJwt","rawCredential","issuerKeys","holderBindingContext","decodedCredential","holderBindingKey","Promise","all","verifySdJwt","SdJwt4VC","getPublicKey","cnf","payload","isSameThumbprint","jwk","kid","verifyCredentialMDoc","x509CertRoot","verifyMdoc","issuerAuth","deviceKeyInfo","deviceKey","verifyAndParseCredentialSdJwt","issuerConf","credential","credentialConfigurationId","_ref20","credentialCryptoContext","decoded","openid_credential_issuer","jwks","DEBUG","JSON","stringify","credential_configurations_supported","parsedCredential","maybeIssuedAt","getValueFromDisclosures","expiration","Date","exp","issuedAt","verifyAndParseCredentialMDoc","_ref21","_parsedCredential$get","_parsedCredential$get2","expirationDate","extractElementValueAsDate","MDOC_DEFAULT_NAMESPACE","setDate","getDate","verifyAndParseCredential","context","_issuerConf$openid_cr","exports"],"sourceRoot":"../../../../src","sources":["credential/issuance/07-verify-and-parse-credential.ts"],"mappings":"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"}
@@ -12,15 +12,96 @@ import { extractElementValueAsDate } from "../../mdoc/converter";
12
12
 
13
13
  // handy alias
14
14
 
15
- const parseCredentialSdJwt = function (credentialConfig, _ref) {
15
+ // The data used to create localized names
16
+
17
+ // The resulting object of localized names { en: "Name", it: "Nome" }
18
+
19
+ // The core structure being built: a node containing the actual value and its localized names
20
+
21
+ // A path can consist of object keys, array indices, or null for mapping
22
+
23
+ // A union of all possible shapes. It can be a custom PropertyNode or a standard object/array structure
24
+
25
+ // Helper to build localized names from the display data.
26
+ const buildName = display => display.reduce((names, _ref) => {
27
+ let {
28
+ locale,
29
+ name
30
+ } = _ref;
31
+ return {
32
+ ...names,
33
+ [locale]: name
34
+ };
35
+ }, {});
36
+
37
+ /**
38
+ * Recursively constructs a nested object with descriptive properties from a path.
39
+ *
40
+ * @param currentObject - The object or array being built upon.
41
+ * @param path - The path segments to follow.
42
+ * @param sourceValue - The raw value to place at the end of the path.
43
+ * @param displayData - The data for generating localized names.
44
+ * @returns The new object or array structure.
45
+ */
46
+ const createNestedProperty = (currentObject, path, sourceValue, displayData) => {
47
+ const [key, ...rest] = path;
48
+
49
+ // Case 1: Map over an array (key is null)
50
+ if (key === null) {
51
+ if (!Array.isArray(sourceValue)) return currentObject;
52
+
53
+ // We assert the type here because we know this branch handles PropertyNodes
54
+ const node = currentObject;
55
+ const existingValue = Array.isArray(node.value) ? node.value : [];
56
+ const mappedArray = sourceValue.map((item, idx) => createNestedProperty(existingValue[idx] || {}, rest, item, displayData));
57
+ return {
58
+ ...node,
59
+ value: mappedArray,
60
+ name: node.name ?? buildName(displayData)
61
+ };
62
+ }
63
+
64
+ // Case 2: Handle an object key (key is a string)
65
+ if (typeof key === "string") {
66
+ const nextSourceValue = typeof sourceValue === "object" && sourceValue !== null && !Array.isArray(sourceValue) && key in sourceValue ? sourceValue[key] : sourceValue;
67
+
68
+ // base case
69
+ if (rest.length === 0) {
70
+ return {
71
+ ...currentObject,
72
+ [key]: {
73
+ value: nextSourceValue,
74
+ name: buildName(displayData)
75
+ }
76
+ };
77
+ }
78
+
79
+ // recursive step
80
+ const nextObject = currentObject[key] || {};
81
+ return {
82
+ ...currentObject,
83
+ [key]: createNestedProperty(nextObject, rest, nextSourceValue, displayData)
84
+ };
85
+ }
86
+
87
+ // Case 3: Handle a specific array index (key is a number)
88
+ if (typeof key === "number") {
89
+ const newArray = Array.isArray(currentObject) ? [...currentObject] : [];
90
+ const nextValue = Array.isArray(sourceValue) ? sourceValue[key] : undefined;
91
+ newArray[key] = createNestedProperty(newArray[key] || {}, rest, nextValue, displayData);
92
+ return newArray;
93
+ }
94
+ return currentObject;
95
+ };
96
+ const parseCredentialSdJwt = function (credentialConfig, _ref2) {
16
97
  let {
17
98
  sdJwt,
18
99
  disclosures
19
- } = _ref;
100
+ } = _ref2;
20
101
  let ignoreMissingAttributes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
21
102
  let includeUndefinedAttributes = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
22
103
  if (credentialConfig.format !== sdJwt.header.typ) {
23
- const message = `Received credential is of an unknwown type. Expected one of [${credentialConfig.format}], received '${sdJwt.header.typ}'`;
104
+ const message = `Received credential is of an unknown type. Expected one of [${credentialConfig.format}], received '${sdJwt.header.typ}'`;
24
105
  Logger.log(LogLevel.ERROR, message);
25
106
  throw new IoWalletError(message);
26
107
  }
@@ -31,64 +112,39 @@ const parseCredentialSdJwt = function (credentialConfig, _ref) {
31
112
 
32
113
  const attrDefinitions = credentialConfig.claims;
33
114
 
34
- // the key of the attribute defintion must match the disclosure's name
35
- const attrsNotInDisclosures = attrDefinitions.filter(definition => !disclosures.some(_ref2 => {
36
- let [, name] = _ref2;
115
+ // Validate that all attributes from the config exist in the disclosures
116
+ const attrsNotInDisclosures = attrDefinitions.filter(definition => !disclosures.some(_ref3 => {
117
+ let [, name] = _ref3;
37
118
  return name === definition.path[0];
38
- }) // Ignore nested paths for now, see https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0-15.html#name-claims-path-pointer
39
- );
40
-
41
- if (attrsNotInDisclosures.length > 0) {
119
+ }));
120
+ if (attrsNotInDisclosures.length > 0 && !ignoreMissingAttributes) {
42
121
  const missing = attrsNotInDisclosures.map(_ => _.path[0]).join(", ");
43
- const received = disclosures.map(_ => _[1 /* name */]).join(", ");
44
- if (!ignoreMissingAttributes) {
45
- const message = `Some attributes are missing in the credential. Missing: [${missing}], received: [${received}]`;
46
- Logger.log(LogLevel.ERROR, message);
47
- throw new IoWalletError(message);
48
- }
122
+ const received = disclosures.map(_ => _[1]).join(", ");
123
+ const message = `Some attributes are missing in the credential. Missing: [${missing}], received: [${received}]`;
124
+ Logger.log(LogLevel.ERROR, message);
125
+ throw new IoWalletError(message);
49
126
  }
50
-
51
- // attributes that are defined in the issuer configuration
52
- // and are present in the disclosure set
53
- const definedValues = Object.fromEntries(attrDefinitions
54
- // retrieve the value from the disclosure set
55
- .map(_ref3 => {
127
+ const definedValues = {};
128
+ for (const {
129
+ path,
130
+ display
131
+ } of attrDefinitions) {
56
132
  var _disclosures$find;
57
- let {
58
- path,
59
- ...definition
60
- } = _ref3;
61
- return [path[0], {
62
- ...definition,
63
- value: (_disclosures$find = disclosures.find(_ => _[1 /* name */] === path[0])) === null || _disclosures$find === void 0 ? void 0 : _disclosures$find[2 /* value */]
64
- }];
65
- })
66
- // add a human readable attribute name, with i18n, in the form { locale: name }
67
- // example: { "it-IT": "Nome", "en-EN": "Name", "es-ES": "Nombre" }
68
- .map(_ref4 => {
69
- let [attrKey, {
70
- display,
71
- ...definition
72
- }] = _ref4;
73
- return [attrKey, {
74
- ...definition,
75
- name: display.reduce((names, _ref5) => {
76
- let {
77
- locale,
78
- name
79
- } = _ref5;
80
- return {
81
- ...names,
82
- [locale]: name
83
- };
84
- }, {})
85
- }];
86
- }));
133
+ const attrKey = path[0];
134
+ const disclosureValue = (_disclosures$find = disclosures.find(_ref4 => {
135
+ let [, name] = _ref4;
136
+ return name === attrKey;
137
+ })) === null || _disclosures$find === void 0 ? void 0 : _disclosures$find[2];
138
+ if (disclosureValue !== undefined) {
139
+ const enriched = createNestedProperty(definedValues, path, disclosureValue, display);
140
+ Object.assign(definedValues, enriched);
141
+ }
142
+ }
87
143
  if (includeUndefinedAttributes) {
88
144
  // attributes that are in the disclosure set
89
145
  // but are not defined in the issuer configuration
90
- const undefinedValues = Object.fromEntries(disclosures.filter(_ => !Object.keys(definedValues).includes(_[1])).map(_ref6 => {
91
- let [, key, value] = _ref6;
146
+ const undefinedValues = Object.fromEntries(disclosures.filter(_ => !Object.keys(definedValues).includes(_[1])).map(_ref5 => {
147
+ let [, key, value] = _ref5;
92
148
  return [key, {
93
149
  value,
94
150
  name: key
@@ -101,10 +157,10 @@ const parseCredentialSdJwt = function (credentialConfig, _ref) {
101
157
  }
102
158
  return definedValues;
103
159
  };
104
- const parseCredentialMDoc = function (credentialConfig, _ref7) {
160
+ const parseCredentialMDoc = function (credentialConfig, _ref6) {
105
161
  let {
106
162
  issuerSigned
107
- } = _ref7;
163
+ } = _ref6;
108
164
  let ignoreMissingAttributes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
109
165
  let includeUndefinedAttributes = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
110
166
  if (!credentialConfig) {
@@ -113,37 +169,37 @@ const parseCredentialMDoc = function (credentialConfig, _ref7) {
113
169
  if (!credentialConfig.claims) {
114
170
  throw new IoWalletError("Missing claims in the credential subject");
115
171
  }
116
- const attrDefinitions = credentialConfig.claims.map(_ref8 => {
172
+ const attrDefinitions = credentialConfig.claims.map(_ref7 => {
117
173
  let {
118
174
  path: [namespace, attribute],
119
175
  display
120
- } = _ref8;
176
+ } = _ref7;
121
177
  return [namespace, attribute, display];
122
178
  });
123
179
  if (!issuerSigned.nameSpaces) {
124
180
  throw new IoWalletError("Missing claims in the credential");
125
181
  }
126
- const flatNamespaces = Object.entries(issuerSigned.nameSpaces).flatMap(_ref9 => {
127
- let [namespace, values] = _ref9;
182
+ const flatNamespaces = Object.entries(issuerSigned.nameSpaces).flatMap(_ref8 => {
183
+ let [namespace, values] = _ref8;
128
184
  return values.map(v => [namespace, v.elementIdentifier, v.elementValue]);
129
185
  });
130
186
 
131
187
  // Check that all mandatory attributes defined in the issuer configuration are present in the disclosure set
132
188
  // and filter the non present ones
133
- const attrsNotInDisclosures = attrDefinitions.filter(_ref10 => {
134
- let [attrDefNamespace, attrKey] = _ref10;
135
- return !flatNamespaces.some(_ref11 => {
136
- let [namespace, claim] = _ref11;
189
+ const attrsNotInDisclosures = attrDefinitions.filter(_ref9 => {
190
+ let [attrDefNamespace, attrKey] = _ref9;
191
+ return !flatNamespaces.some(_ref10 => {
192
+ let [namespace, claim] = _ref10;
137
193
  return attrDefNamespace === namespace && attrKey === claim;
138
194
  });
139
195
  });
140
196
  if (attrsNotInDisclosures.length > 0) {
141
- const missing = attrsNotInDisclosures.map(_ref12 => {
142
- let [, attrKey] = _ref12;
197
+ const missing = attrsNotInDisclosures.map(_ref11 => {
198
+ let [, attrKey] = _ref11;
143
199
  return attrKey;
144
200
  }).join(", ");
145
- const received = flatNamespaces.map(_ref13 => {
146
- let [, attrKey] = _ref13;
201
+ const received = flatNamespaces.map(_ref12 => {
202
+ let [, attrKey] = _ref12;
147
203
  return attrKey;
148
204
  }).join(", ");
149
205
  if (!ignoreMissingAttributes) {
@@ -154,38 +210,38 @@ const parseCredentialMDoc = function (credentialConfig, _ref7) {
154
210
  // Attributes defined in the issuer configuration and present in the disclosure set
155
211
  const definedValues = attrDefinitions
156
212
  // Retrieve the value from the corresponding disclosure
157
- .map(_ref14 => {
213
+ .map(_ref13 => {
158
214
  var _flatNamespaces$find;
159
- let [attrDefNamespace, attrKey, display] = _ref14;
215
+ let [attrDefNamespace, attrKey, display] = _ref13;
160
216
  return [attrDefNamespace, attrKey, {
161
217
  display,
162
- value: (_flatNamespaces$find = flatNamespaces.find(_ref15 => {
163
- let [namespace, name] = _ref15;
218
+ value: (_flatNamespaces$find = flatNamespaces.find(_ref14 => {
219
+ let [namespace, name] = _ref14;
164
220
  return attrDefNamespace === namespace && name === attrKey;
165
221
  })) === null || _flatNamespaces$find === void 0 ? void 0 : _flatNamespaces$find[2]
166
222
  }];
167
223
  })
168
224
  //filter the not found elements
169
- .filter(_ref16 => {
170
- let [_, __, definition] = _ref16;
225
+ .filter(_ref15 => {
226
+ let [_, __, definition] = _ref15;
171
227
  return definition.value !== undefined;
172
228
  })
173
229
  // Add a human-readable attribute name, with i18n, in the form { locale: name }
174
230
  // Example: { "it-IT": "Nome", "en-EN": "Name", "es-ES": "Nombre" }
175
- .reduce((acc, _ref17) => {
231
+ .reduce((acc, _ref16) => {
176
232
  let [attrDefNamespace, attrKey, {
177
233
  display,
178
234
  value
179
- }] = _ref17;
235
+ }] = _ref16;
180
236
  return {
181
237
  ...acc,
182
238
  [getParsedCredentialClaimKey(attrDefNamespace, attrKey)]: {
183
239
  value,
184
- name: display.reduce((names, _ref18) => {
240
+ name: display.reduce((names, _ref17) => {
185
241
  let {
186
242
  locale,
187
243
  name
188
- } = _ref18;
244
+ } = _ref17;
189
245
  return {
190
246
  ...names,
191
247
  [locale]: name
@@ -195,11 +251,11 @@ const parseCredentialMDoc = function (credentialConfig, _ref7) {
195
251
  };
196
252
  }, {});
197
253
  if (includeUndefinedAttributes) {
198
- const undefinedValues = Object.fromEntries(Object.values(flatNamespaces).filter(_ref19 => {
199
- let [namespace, key] = _ref19;
254
+ const undefinedValues = Object.fromEntries(Object.values(flatNamespaces).filter(_ref18 => {
255
+ let [namespace, key] = _ref18;
200
256
  return !definedValues[getParsedCredentialClaimKey(namespace, key)];
201
- }).map(_ref20 => {
202
- let [namespace, key, value] = _ref20;
257
+ }).map(_ref19 => {
258
+ let [namespace, key, value] = _ref19;
203
259
  return [getParsedCredentialClaimKey(namespace, key), {
204
260
  value,
205
261
  name: key
@@ -269,12 +325,12 @@ async function verifyCredentialMDoc(rawCredential, x509CertRoot, holderBindingCo
269
325
  }
270
326
  return decodedCredential;
271
327
  }
272
- const verifyAndParseCredentialSdJwt = async (issuerConf, credential, credentialConfigurationId, _ref21) => {
328
+ const verifyAndParseCredentialSdJwt = async (issuerConf, credential, credentialConfigurationId, _ref20) => {
273
329
  let {
274
330
  credentialCryptoContext,
275
331
  ignoreMissingAttributes,
276
332
  includeUndefinedAttributes
277
- } = _ref21;
333
+ } = _ref20;
278
334
  const decoded = await verifyCredentialSdJwt(credential, issuerConf.openid_credential_issuer.jwks.keys, credentialCryptoContext);
279
335
  Logger.log(LogLevel.DEBUG, `Decoded credential: ${JSON.stringify(decoded)}`);
280
336
  const credentialConfig = issuerConf.openid_credential_issuer.credential_configurations_supported[credentialConfigurationId];
@@ -291,12 +347,12 @@ const verifyAndParseCredentialSdJwt = async (issuerConf, credential, credentialC
291
347
  issuedAt: typeof maybeIssuedAt === "number" ? new Date(maybeIssuedAt * 1000) : undefined
292
348
  };
293
349
  };
294
- const verifyAndParseCredentialMDoc = async (issuerConf, credential, credentialConfigurationId, _ref22, x509CertRoot) => {
350
+ const verifyAndParseCredentialMDoc = async (issuerConf, credential, credentialConfigurationId, _ref21, x509CertRoot) => {
295
351
  var _parsedCredential$get, _parsedCredential$get2;
296
352
  let {
297
353
  credentialCryptoContext,
298
354
  ignoreMissingAttributes
299
- } = _ref22;
355
+ } = _ref21;
300
356
  if (!x509CertRoot) {
301
357
  throw new IoWalletError("Missing x509CertRoot");
302
358
  }
@@ -1 +1 @@
1
- {"version":3,"names":["IoWalletError","SdJwt4VC","verify","verifySdJwt","getValueFromDisclosures","isSameThumbprint","verifyMdoc","MDOC_DEFAULT_NAMESPACE","getParsedCredentialClaimKey","LogLevel","Logger","extractElementValueAsDate","parseCredentialSdJwt","credentialConfig","_ref","sdJwt","disclosures","ignoreMissingAttributes","arguments","length","undefined","includeUndefinedAttributes","format","header","typ","message","log","ERROR","claims","attrDefinitions","attrsNotInDisclosures","filter","definition","some","_ref2","name","path","missing","map","_","join","received","definedValues","Object","fromEntries","_ref3","_disclosures$find","value","find","_ref4","attrKey","display","reduce","names","_ref5","locale","undefinedValues","keys","includes","_ref6","key","parseCredentialMDoc","_ref7","issuerSigned","_ref8","namespace","attribute","nameSpaces","flatNamespaces","entries","flatMap","_ref9","values","v","elementIdentifier","elementValue","_ref10","attrDefNamespace","_ref11","claim","_ref12","_ref13","_ref14","_flatNamespaces$find","_ref15","_ref16","__","acc","_ref17","_ref18","_ref19","_ref20","verifyCredentialSdJwt","rawCredential","issuerKeys","holderBindingContext","decodedCredential","holderBindingKey","Promise","all","getPublicKey","cnf","payload","jwk","kid","verifyCredentialMDoc","x509CertRoot","issuerAuth","deviceKeyInfo","deviceKey","verifyAndParseCredentialSdJwt","issuerConf","credential","credentialConfigurationId","_ref21","credentialCryptoContext","decoded","openid_credential_issuer","jwks","DEBUG","JSON","stringify","credential_configurations_supported","parsedCredential","maybeIssuedAt","expiration","Date","exp","issuedAt","verifyAndParseCredentialMDoc","_ref22","_parsedCredential$get","_parsedCredential$get2","expirationDate","setDate","getDate","verifyAndParseCredential","context","_issuerConf$openid_cr"],"sourceRoot":"../../../../src","sources":["credential/issuance/07-verify-and-parse-credential.ts"],"mappings":"AAGA,SAASA,aAAa,QAAQ,oBAAoB;AAClD,SAASC,QAAQ,EAAEC,MAAM,IAAIC,WAAW,QAAQ,cAAc;AAC9D,SAASC,uBAAuB,QAAQ,yBAAyB;AACjE,SAASC,gBAAgB,QAAkB,iBAAiB;AAE5D,SAASH,MAAM,IAAII,UAAU,QAAQ,YAAY;AACjD,SAASC,sBAAsB,QAAQ,kBAAkB;AACzD,SAASC,2BAA2B,QAAQ,kBAAkB;AAC9D,SAASC,QAAQ,EAAEC,MAAM,QAAQ,qBAAqB;AACtD,SAASC,yBAAyB,QAAQ,sBAAsB;;AAkChE;;AAeA;;AAKA,MAAMC,oBAAoB,GAAG,SAAAA,CAE3BC,gBAAgC,EAAAC,IAAA,EAIX;EAAA,IAHrB;IAAEC,KAAK;IAAEC;EAAoC,CAAC,GAAAF,IAAA;EAAA,IAC9CG,uBAAgC,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;EAAA,IACxCG,0BAAmC,GAAAH,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;EAE3C,IAAIL,gBAAgB,CAACS,MAAM,KAAKP,KAAK,CAACQ,MAAM,CAACC,GAAG,EAAE;IAChD,MAAMC,OAAO,GAAI,gEAA+DZ,gBAAgB,CAACS,MAAO,gBAAeP,KAAK,CAACQ,MAAM,CAACC,GAAI,GAAE;IAC1Id,MAAM,CAACgB,GAAG,CAACjB,QAAQ,CAACkB,KAAK,EAAEF,OAAO,CAAC;IACnC,MAAM,IAAIzB,aAAa,CAACyB,OAAO,CAAC;EAClC;EAEA,IAAI,CAACZ,gBAAgB,CAACe,MAAM,EAAE;IAC5BlB,MAAM,CAACgB,GAAG,CAACjB,QAAQ,CAACkB,KAAK,EAAE,0CAA0C,CAAC;IACtE,MAAM,IAAI3B,aAAa,CAAC,0CAA0C,CAAC,CAAC,CAAC;EACvE;;EACA,MAAM6B,eAAe,GAAGhB,gBAAgB,CAACe,MAAM;;EAE/C;EACA,MAAME,qBAAqB,GAAGD,eAAe,CAACE,MAAM,CACjDC,UAAU,IAAK,CAAChB,WAAW,CAACiB,IAAI,CAACC,KAAA;IAAA,IAAC,GAAGC,IAAI,CAAC,GAAAD,KAAA;IAAA,OAAKC,IAAI,KAAKH,UAAU,CAACI,IAAI,CAAC,CAAC,CAAC;EAAA,EAAC,CAAC;EAC/E,CAAC;;EACD,IAAIN,qBAAqB,CAACX,MAAM,GAAG,CAAC,EAAE;IACpC,MAAMkB,OAAO,GAAGP,qBAAqB,CAACQ,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAACH,IAAI,CAAC,CAAC,CAAC,CAAC,CAACI,IAAI,CAAC,IAAI,CAAC;IACtE,MAAMC,QAAQ,GAAGzB,WAAW,CAACsB,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;IACnE,IAAI,CAACvB,uBAAuB,EAAE;MAC5B,MAAMQ,OAAO,GAAI,4DAA2DY,OAAQ,iBAAgBI,QAAS,GAAE;MAC/G/B,MAAM,CAACgB,GAAG,CAACjB,QAAQ,CAACkB,KAAK,EAAEF,OAAO,CAAC;MACnC,MAAM,IAAIzB,aAAa,CAACyB,OAAO,CAAC;IAClC;EACF;;EAEA;EACA;EACA,MAAMiB,aAAa,GAAGC,MAAM,CAACC,WAAW,CACtCf;EACE;EAAA,CACCS,GAAG,CACFO,KAAA;IAAA,IAAAC,iBAAA;IAAA,IAAC;MAAEV,IAAI;MAAE,GAAGJ;IAAW,CAAC,GAAAa,KAAA;IAAA,OACtB,CACET,IAAI,CAAC,CAAC,CAAC,EACP;MACE,GAAGJ,UAAU;MACbe,KAAK,GAAAD,iBAAA,GAAE9B,WAAW,CAACgC,IAAI,CACpBT,CAAC,IAAKA,CAAC,CAAC,CAAC,CAAC,WAAW,KAAKH,IAAI,CAAC,CAAC,CACnC,CAAC,cAAAU,iBAAA,uBAFMA,iBAAA,CAEH,CAAC,CAAC;IACR,CAAC,CACF;EAAA,CACL;EACA;EACA;EAAA,CACCR,GAAG,CACFW,KAAA;IAAA,IAAC,CAACC,OAAO,EAAE;MAAEC,OAAO;MAAE,GAAGnB;IAAW,CAAC,CAAC,GAAAiB,KAAA;IAAA,OACpC,CACEC,OAAO,EACP;MACE,GAAGlB,UAAU;MACbG,IAAI,EAAEgB,OAAO,CAACC,MAAM,CAClB,CAACC,KAAK,EAAAC,KAAA;QAAA,IAAE;UAAEC,MAAM;UAAEpB;QAAK,CAAC,GAAAmB,KAAA;QAAA,OAAM;UAAE,GAAGD,KAAK;UAAE,CAACE,MAAM,GAAGpB;QAAK,CAAC;MAAA,CAAC,EAC3D,CAAC,CACH;IACF,CAAC,CACF;EAAA,CACL,CACJ,CAAC;EAED,IAAId,0BAA0B,EAAE;IAC9B;IACA;IACA,MAAMmC,eAAe,GAAGb,MAAM,CAACC,WAAW,CACxC5B,WAAW,CACRe,MAAM,CAAEQ,CAAC,IAAK,CAACI,MAAM,CAACc,IAAI,CAACf,aAAa,CAAC,CAACgB,QAAQ,CAACnB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACzDD,GAAG,CAACqB,KAAA;MAAA,IAAC,GAAGC,GAAG,EAAEb,KAAK,CAAC,GAAAY,KAAA;MAAA,OAAK,CAACC,GAAG,EAAE;QAAEb,KAAK;QAAEZ,IAAI,EAAEyB;MAAI,CAAC,CAAC;IAAA,EACxD,CAAC;IACD,OAAO;MACL,GAAGlB,aAAa;MAChB,GAAGc;IACL,CAAC;EACH;EAEA,OAAOd,aAAa;AACtB,CAAC;AACD,MAAMmB,mBAAmB,GAAG,SAAAA,CAE1BhD,gBAAgC,EAAAiD,KAAA,EAKX;EAAA,IAHrB;IAAEC;EAAoC,CAAC,GAAAD,KAAA;EAAA,IACvC7C,uBAAgC,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;EAAA,IACxCG,0BAAmC,GAAAH,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;EAE3C,IAAI,CAACL,gBAAgB,EAAE;IACrB,MAAM,IAAIb,aAAa,CAAC,6CAA6C,CAAC;EACxE;EAEA,IAAI,CAACa,gBAAgB,CAACe,MAAM,EAAE;IAC5B,MAAM,IAAI5B,aAAa,CAAC,0CAA0C,CAAC;EACrE;EAEA,MAAM6B,eAAe,GAAGhB,gBAAgB,CAACe,MAAM,CAACU,GAAG,CAEjD0B,KAAA;IAAA,IAAC;MAAE5B,IAAI,EAAE,CAAC6B,SAAS,EAAEC,SAAS,CAAC;MAAEf;IAAQ,CAAC,GAAAa,KAAA;IAAA,OAAK,CAC/CC,SAAS,EACTC,SAAS,EACTf,OAAO,CACR;EAAA,EAAC;EAEF,IAAI,CAACY,YAAY,CAACI,UAAU,EAAE;IAC5B,MAAM,IAAInE,aAAa,CAAC,kCAAkC,CAAC;EAC7D;EAEA,MAAMoE,cAAc,GAAGzB,MAAM,CAAC0B,OAAO,CAACN,YAAY,CAACI,UAAU,CAAC,CAACG,OAAO,CACpEC,KAAA;IAAA,IAAC,CAACN,SAAS,EAAEO,MAAM,CAAC,GAAAD,KAAA;IAAA,OAClBC,MAAM,CAAClC,GAAG,CAA4BmC,CAAC,IAAK,CAC1CR,SAAS,EACTQ,CAAC,CAACC,iBAAiB,EACnBD,CAAC,CAACE,YAAY,CACf,CAAC;EAAA,CACN,CAAC;;EAED;EACA;EACA,MAAM7C,qBAAqB,GAAGD,eAAe,CAACE,MAAM,CAClD6C,MAAA;IAAA,IAAC,CAACC,gBAAgB,EAAE3B,OAAO,CAAC,GAAA0B,MAAA;IAAA,OAC1B,CAACR,cAAc,CAACnC,IAAI,CAClB6C,MAAA;MAAA,IAAC,CAACb,SAAS,EAAEc,KAAK,CAAC,GAAAD,MAAA;MAAA,OACjBD,gBAAgB,KAAKZ,SAAS,IAAIf,OAAO,KAAK6B,KAAK;IAAA,CACvD,CAAC;EAAA,CACL,CAAC;EAED,IAAIjD,qBAAqB,CAACX,MAAM,GAAG,CAAC,EAAE;IACpC,MAAMkB,OAAO,GAAGP,qBAAqB,CAClCQ,GAAG,CAAC0C,MAAA;MAAA,IAAC,GAAG9B,OAAO,CAAC,GAAA8B,MAAA;MAAA,OAAK9B,OAAO;IAAA,EAAC,CAC7BV,IAAI,CAAC,IAAI,CAAC;IACb,MAAMC,QAAQ,GAAG2B,cAAc,CAAC9B,GAAG,CAAC2C,MAAA;MAAA,IAAC,GAAG/B,OAAO,CAAC,GAAA+B,MAAA;MAAA,OAAK/B,OAAO;IAAA,EAAC,CAACV,IAAI,CAAC,IAAI,CAAC;IAExE,IAAI,CAACvB,uBAAuB,EAAE;MAC5B,MAAM,IAAIjB,aAAa,CACpB,4DAA2DqC,OAAQ,iBAAgBI,QAAS,GAC/F,CAAC;IACH;EACF;;EAEA;EACA,MAAMC,aAAa,GAAGb;EACpB;EAAA,CACCS,GAAG,CACF4C,MAAA;IAAA,IAAAC,oBAAA;IAAA,IAAC,CAACN,gBAAgB,EAAE3B,OAAO,EAAEC,OAAO,CAAC,GAAA+B,MAAA;IAAA,OACnC,CACEL,gBAAgB,EAChB3B,OAAO,EACP;MACEC,OAAO;MACPJ,KAAK,GAAAoC,oBAAA,GAAEf,cAAc,CAACpB,IAAI,CACxBoC,MAAA;QAAA,IAAC,CAACnB,SAAS,EAAE9B,IAAI,CAAC,GAAAiD,MAAA;QAAA,OAChBP,gBAAgB,KAAKZ,SAAS,IAAI9B,IAAI,KAAKe,OAAO;MAAA,CACtD,CAAC,cAAAiC,oBAAA,uBAHMA,oBAAA,CAGH,CAAC;IACP,CAAC,CACF;EAAA,CACL;EACA;EAAA,CACCpD,MAAM,CAACsD,MAAA;IAAA,IAAC,CAAC9C,CAAC,EAAE+C,EAAE,EAAEtD,UAAU,CAAC,GAAAqD,MAAA;IAAA,OAAKrD,UAAU,CAACe,KAAK,KAAK3B,SAAS;EAAA;EAC/D;EACA;EAAA,CACCgC,MAAM,CACL,CAACmC,GAAG,EAAAC,MAAA;IAAA,IAAE,CAACX,gBAAgB,EAAE3B,OAAO,EAAE;MAAEC,OAAO;MAAEJ;IAAM,CAAC,CAAC,GAAAyC,MAAA;IAAA,OAAM;MACzD,GAAGD,GAAG;MACN,CAAC/E,2BAA2B,CAACqE,gBAAgB,EAAE3B,OAAO,CAAC,GAAG;QACxDH,KAAK;QACLZ,IAAI,EAAEgB,OAAO,CAACC,MAAM,CAClB,CAACC,KAAK,EAAAoC,MAAA;UAAA,IAAE;YAAElC,MAAM;YAAEpB;UAAK,CAAC,GAAAsD,MAAA;UAAA,OAAM;YAC5B,GAAGpC,KAAK;YACR,CAACE,MAAM,GAAGpB;UACZ,CAAC;QAAA,CAAC,EACF,CAAC,CACH;MACF;IACF,CAAC;EAAA,CAAC,EACF,CAAC,CACH,CAAC;EAEH,IAAId,0BAA0B,EAAE;IAC9B,MAAMmC,eAAiC,GAAGb,MAAM,CAACC,WAAW,CAC1DD,MAAM,CAAC6B,MAAM,CAACJ,cAAc,CAAC,CAC1BrC,MAAM,CACL2D,MAAA;MAAA,IAAC,CAACzB,SAAS,EAAEL,GAAG,CAAC,GAAA8B,MAAA;MAAA,OACf,CAAChD,aAAa,CAAClC,2BAA2B,CAACyD,SAAS,EAAEL,GAAG,CAAC,CAAC;IAAA,CAC/D,CAAC,CACAtB,GAAG,CAACqD,MAAA;MAAA,IAAC,CAAC1B,SAAS,EAAEL,GAAG,EAAEb,KAAK,CAAC,GAAA4C,MAAA;MAAA,OAAK,CAChCnF,2BAA2B,CAACyD,SAAS,EAAEL,GAAG,CAAC,EAC3C;QAAEb,KAAK;QAAEZ,IAAI,EAAEyB;MAAI,CAAC,CACrB;IAAA,EACL,CAAC;IACD,OAAO;MACL,GAAGlB,aAAa;MAChB,GAAGc;IACL,CAAC;EACH;EAEA,OAAOd,aAAa;AACtB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAekD,qBAAqBA,CAClCC,aAAqB,EACrBC,UAAiB,EACjBC,oBAAmC,EACF;EACjC,MAAM,CAACC,iBAAiB,EAAEC,gBAAgB,CAAC;EACzC;EACA,MAAMC,OAAO,CAACC,GAAG,CAAC,CAChBhG,WAAW,CAAC0F,aAAa,EAAEC,UAAU,EAAE7F,QAAQ,CAAC,EAChD8F,oBAAoB,CAACK,YAAY,CAAC,CAAC,CACpC,CAAC;EAEJ,MAAM;IAAEC;EAAI,CAAC,GAAGL,iBAAiB,CAACjF,KAAK,CAACuF,OAAO;EAC/C,IAAI,EAAE,MAAMjG,gBAAgB,CAACgG,GAAG,CAACE,GAAG,EAAEN,gBAAuB,CAAC,CAAC,EAAE;IAC/D,MAAMxE,OAAO,GAAI,kDAAiDwE,gBAAgB,CAACO,GAAI,UAASR,iBAAiB,CAACjF,KAAK,CAACuF,OAAO,CAACD,GAAG,CAACE,GAAG,CAACC,GAAI,EAAC;IAC7I9F,MAAM,CAACgB,GAAG,CAACjB,QAAQ,CAACkB,KAAK,EAAEF,OAAO,CAAC;IACnC,MAAM,IAAIzB,aAAa,CAACyB,OAAO,CAAC;EAClC;EAEA,OAAOuE,iBAAiB;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAeS,oBAAoBA,CACjCZ,aAAqB,EACrBa,YAAoB,EACpBX,oBAAmC,EACH;EAChC,MAAM,CAACC,iBAAiB,EAAEC,gBAAgB,CAAC;EACzC;EACA,MAAMC,OAAO,CAACC,GAAG,CAAC,CAChB7F,UAAU,CAACuF,aAAa,EAAEa,YAAY,CAAC,EACvCX,oBAAoB,CAACK,YAAY,CAAC,CAAC,CACpC,CAAC;EAEJ,IAAI,CAACJ,iBAAiB,EAAE;IACtB,MAAM,IAAIhG,aAAa,CAAC,4BAA4B,CAAC;EACvD;EAEA,MAAM4D,GAAG,GACPoC,iBAAiB,CAACjC,YAAY,CAAC4C,UAAU,CAACL,OAAO,CAACM,aAAa,CAACC,SAAS;EAE3E,IAAI,EAAE,MAAMxG,gBAAgB,CAACuD,GAAG,EAAEqC,gBAA6B,CAAC,CAAC,EAAE;IACjE,MAAM,IAAIjG,aAAa,CACpB,oFACH,CAAC;EACH;EAEA,OAAOgG,iBAAiB;AAC1B;AAEA,MAAMc,6BAAuD,GAAG,MAAAA,CAC9DC,UAAU,EACVC,UAAU,EACVC,yBAAyB,EAAAC,MAAA,KAMtB;EAAA,IALH;IACEC,uBAAuB;IACvBlG,uBAAuB;IACvBI;EACF,CAAC,GAAA6F,MAAA;EAED,MAAME,OAAO,GAAG,MAAMxB,qBAAqB,CACzCoB,UAAU,EACVD,UAAU,CAACM,wBAAwB,CAACC,IAAI,CAAC7D,IAAI,EAC7C0D,uBACF,CAAC;EAEDzG,MAAM,CAACgB,GAAG,CAACjB,QAAQ,CAAC8G,KAAK,EAAG,uBAAsBC,IAAI,CAACC,SAAS,CAACL,OAAO,CAAE,EAAC,CAAC;EAE5E,MAAMvG,gBAAgB,GACpBkG,UAAU,CAACM,wBAAwB,CAACK,mCAAmC,CACrET,yBAAyB,CAC1B;EAEH,IAAI,CAACpG,gBAAgB,EAAE;IACrBH,MAAM,CAACgB,GAAG,CACRjB,QAAQ,CAACkB,KAAK,EACb,gDAA+CsF,yBAA0B,EAC5E,CAAC;IACD,MAAM,IAAIjH,aAAa,CAAC,6CAA6C,CAAC;EACxE;EAEA,MAAM2H,gBAAgB,GAAG/G,oBAAoB,CAC3CC,gBAAgB,EAChBuG,OAAO,EACPnG,uBAAuB,EACvBI,0BACF,CAAC;EACD,MAAMuG,aAAa,GAAGxH,uBAAuB,CAACgH,OAAO,CAACpG,WAAW,EAAE,KAAK,CAAC;EAEzEN,MAAM,CAACgB,GAAG,CACRjB,QAAQ,CAAC8G,KAAK,EACb,sBAAqBC,IAAI,CAACC,SAAS,CAACE,gBAAgB,CAAE,gBAAeC,aAAc,EACtF,CAAC;EAED,OAAO;IACLD,gBAAgB;IAChBE,UAAU,EAAE,IAAIC,IAAI,CAACV,OAAO,CAACrG,KAAK,CAACuF,OAAO,CAACyB,GAAG,GAAG,IAAI,CAAC;IACtDC,QAAQ,EACN,OAAOJ,aAAa,KAAK,QAAQ,GAC7B,IAAIE,IAAI,CAACF,aAAa,GAAG,IAAI,CAAC,GAC9BxG;EACR,CAAC;AACH,CAAC;AAED,MAAM6G,4BAAsD,GAAG,MAAAA,CAC7DlB,UAAU,EACVC,UAAU,EACVC,yBAAyB,EAAAiB,MAAA,EAEzBxB,YAAY,KACT;EAAA,IAAAyB,qBAAA,EAAAC,sBAAA;EAAA,IAFH;IAAEjB,uBAAuB;IAAElG;EAAwB,CAAC,GAAAiH,MAAA;EAGpD,IAAI,CAACxB,YAAY,EAAE;IACjB,MAAM,IAAI1G,aAAa,CAAC,sBAAsB,CAAC;EACjD;EAEA,MAAMoH,OAAO,GAAG,MAAMX,oBAAoB,CACxCO,UAAU,EACVN,YAAY,EACZS,uBACF,CAAC;EAED,MAAMtG,gBAAgB,GACpBkG,UAAU,CAACM,wBAAwB,CAACK,mCAAmC,CACrET,yBAAyB,CACzB;EACJ,MAAMU,gBAAgB,GAAG9D,mBAAmB,CAC1ChD,gBAAgB,EAChBuG,OAAO,EACPnG,uBAAuB,EACvBA,uBACF,CAAC;EAED,MAAMoH,cAAc,GAAG1H,yBAAyB,CAC9CgH,gBAAgB,aAAhBA,gBAAgB,gBAAAQ,qBAAA,GAAhBR,gBAAgB,CACdnH,2BAA2B,CAACD,sBAAsB,EAAE,aAAa,CAAC,CACnE,cAAA4H,qBAAA,uBAFDA,qBAAA,CAEGpF,KACL,CAAC;EACD,IAAI,CAACsF,cAAc,EAAE;IACnB,MAAM,IAAIrI,aAAa,CAAE,kCAAiC,CAAC;EAC7D;EACAqI,cAAc,CAACC,OAAO,CAACD,cAAc,CAACE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;EAEpD,MAAMX,aAAa,GAAGjH,yBAAyB,CAC7CgH,gBAAgB,aAAhBA,gBAAgB,gBAAAS,sBAAA,GAAhBT,gBAAgB,CACdnH,2BAA2B,CAACD,sBAAsB,EAAE,YAAY,CAAC,CAClE,cAAA6H,sBAAA,uBAFDA,sBAAA,CAEGrF,KACL,CAAC;EACD6E,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEU,OAAO,CAACV,aAAa,CAACW,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;EAEnD,OAAO;IACLZ,gBAAgB;IAChBX,UAAU;IACVC,yBAAyB;IACzBY,UAAU,EAAEQ,cAAc;IAC1BL,QAAQ,EAAEJ,aAAa,IAAIxG;EAC7B,CAAC;AACH,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMoH,wBAAkD,GAAG,MAAAA,CAChEzB,UAAU,EACVC,UAAU,EACVC,yBAAyB,EACzBwB,OAAO,EACP/B,YAAY,KACT;EAAA,IAAAgC,qBAAA;EACH,MAAMpH,MAAM,IAAAoH,qBAAA,GACV3B,UAAU,CAACM,wBAAwB,CAACK,mCAAmC,CACrET,yBAAyB,CAC1B,cAAAyB,qBAAA,uBAFDA,qBAAA,CAEGpH,MAAM;EAEX,QAAQA,MAAM;IACZ,KAAK,WAAW;MAAE;QAChBZ,MAAM,CAACgB,GAAG,CAACjB,QAAQ,CAAC8G,KAAK,EAAE,wCAAwC,CAAC;QACpE,OAAOT,6BAA6B,CAClCC,UAAU,EACVC,UAAU,EACVC,yBAAyB,EACzBwB,OACF,CAAC;MACH;IACA,KAAK,UAAU;MAAE;QACf/H,MAAM,CAACgB,GAAG,CAACjB,QAAQ,CAAC8G,KAAK,EAAE,uCAAuC,CAAC;QACnE,OAAOU,4BAA4B,CACjClB,UAAU,EACVC,UAAU,EACVC,yBAAyB,EACzBwB,OAAO,EACP/B,YACF,CAAC;MACH;IAEA;MAAS;QACP,MAAMjF,OAAO,GAAI,kCAAiCH,MAAO,EAAC;QAC1DZ,MAAM,CAACgB,GAAG,CAACjB,QAAQ,CAACkB,KAAK,EAAEF,OAAO,CAAC;QACnC,MAAM,IAAIzB,aAAa,CAACyB,OAAO,CAAC;MAClC;EACF;AACF,CAAC"}
1
+ {"version":3,"names":["IoWalletError","SdJwt4VC","verify","verifySdJwt","getValueFromDisclosures","isSameThumbprint","verifyMdoc","MDOC_DEFAULT_NAMESPACE","getParsedCredentialClaimKey","LogLevel","Logger","extractElementValueAsDate","buildName","display","reduce","names","_ref","locale","name","createNestedProperty","currentObject","path","sourceValue","displayData","key","rest","Array","isArray","node","existingValue","value","mappedArray","map","item","idx","nextSourceValue","length","nextObject","newArray","nextValue","undefined","parseCredentialSdJwt","credentialConfig","_ref2","sdJwt","disclosures","ignoreMissingAttributes","arguments","includeUndefinedAttributes","format","header","typ","message","log","ERROR","claims","attrDefinitions","attrsNotInDisclosures","filter","definition","some","_ref3","missing","_","join","received","definedValues","_disclosures$find","attrKey","disclosureValue","find","_ref4","enriched","Object","assign","undefinedValues","fromEntries","keys","includes","_ref5","parseCredentialMDoc","_ref6","issuerSigned","_ref7","namespace","attribute","nameSpaces","flatNamespaces","entries","flatMap","_ref8","values","v","elementIdentifier","elementValue","_ref9","attrDefNamespace","_ref10","claim","_ref11","_ref12","_ref13","_flatNamespaces$find","_ref14","_ref15","__","acc","_ref16","_ref17","_ref18","_ref19","verifyCredentialSdJwt","rawCredential","issuerKeys","holderBindingContext","decodedCredential","holderBindingKey","Promise","all","getPublicKey","cnf","payload","jwk","kid","verifyCredentialMDoc","x509CertRoot","issuerAuth","deviceKeyInfo","deviceKey","verifyAndParseCredentialSdJwt","issuerConf","credential","credentialConfigurationId","_ref20","credentialCryptoContext","decoded","openid_credential_issuer","jwks","DEBUG","JSON","stringify","credential_configurations_supported","parsedCredential","maybeIssuedAt","expiration","Date","exp","issuedAt","verifyAndParseCredentialMDoc","_ref21","_parsedCredential$get","_parsedCredential$get2","expirationDate","setDate","getDate","verifyAndParseCredential","context","_issuerConf$openid_cr"],"sourceRoot":"../../../../src","sources":["credential/issuance/07-verify-and-parse-credential.ts"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"07-verify-and-parse-credential.d.ts","sourceRoot":"","sources":["../../../../src/credential/issuance/07-verify-and-parse-credential.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAKtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAS/D,KAAK,UAAU,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC,YAAY,CAAC,CAAC;AAQzD,MAAM,MAAM,wBAAwB,GAAG,CACrC,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC,YAAY,CAAC,EAC/C,yBAAyB,EAAE,MAAM,EACjC,OAAO,EAAE;IACP,uBAAuB,EAAE,aAAa,CAAC;IACvC;;OAEG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC;;OAEG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC,EACD,YAAY,CAAC,EAAE,MAAM,KAClB,OAAO,CAAC;IACX,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,UAAU,EAAE,IAAI,CAAC;IACjB,QAAQ,EAAE,IAAI,GAAG,SAAS,CAAC;CAC5B,CAAC,CAAC;AAGH,KAAK,gBAAgB,GAAG;IACtB,oBAAoB;IACpB,CAAC,KAAK,EAAE,MAAM,GAAG;QACf,IAAI,EACA,yBAAyB,CAAC,MAAM,CAC9B,MAAM,EACN,MAAM,CACP,GACD,4BAA4B,CAAC,MAAM,GACnC,SAAS,CAAC;QACd,KAAK,EAAE,OAAO,CAAC;KAChB,CAAC;CACH,CAAC;AA2YF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,wBAAwB,EAAE,wBAuCtC,CAAC"}
1
+ {"version":3,"file":"07-verify-and-parse-credential.d.ts","sourceRoot":"","sources":["../../../../src/credential/issuance/07-verify-and-parse-credential.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAKtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAS/D,KAAK,UAAU,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC,YAAY,CAAC,CAAC;AAQzD,MAAM,MAAM,wBAAwB,GAAG,CACrC,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC,YAAY,CAAC,EAC/C,yBAAyB,EAAE,MAAM,EACjC,OAAO,EAAE;IACP,uBAAuB,EAAE,aAAa,CAAC;IACvC;;OAEG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC;;OAEG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC,EACD,YAAY,CAAC,EAAE,MAAM,KAClB,OAAO,CAAC;IACX,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,UAAU,EAAE,IAAI,CAAC;IACjB,QAAQ,EAAE,IAAI,GAAG,SAAS,CAAC;CAC5B,CAAC,CAAC;AAGH,KAAK,gBAAgB,GAAG;IACtB,oBAAoB;IACpB,CAAC,KAAK,EAAE,MAAM,GAAG;QACf,IAAI,EACA,yBAAyB,CAAC,MAAM,CAC9B,MAAM,EACN,MAAM,CACP,GACD,4BAA4B,CAAC,MAAM,GACnC,SAAS,CAAC;QACd,KAAK,EAAE,OAAO,CAAC;KAChB,CAAC;CACH,CAAC;AA4eF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,wBAAwB,EAAE,wBAuCtC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pagopa/io-react-native-wallet",
3
- "version": "2.0.0-next.8",
3
+ "version": "2.0.0-next.9",
4
4
  "description": "Provide data structures, helpers and API for IO Wallet",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -64,6 +64,117 @@ type DecodedSdJwtCredential = Out<typeof verifySdJwt> & {
64
64
  sdJwt: SdJwt4VC;
65
65
  };
66
66
 
67
+ // The data used to create localized names
68
+ type DisplayData = { locale: string; name: string }[];
69
+
70
+ // The resulting object of localized names { en: "Name", it: "Nome" }
71
+ type LocalizedNames = Record<string, string>;
72
+
73
+ // The core structure being built: a node containing the actual value and its localized names
74
+ type PropertyNode<T> = {
75
+ value: T;
76
+ name: LocalizedNames;
77
+ };
78
+
79
+ // A path can consist of object keys, array indices, or null for mapping
80
+ type Path = (string | number | null)[];
81
+
82
+ // A union of all possible shapes. It can be a custom PropertyNode or a standard object/array structure
83
+ type NodeOrStructure = Partial<PropertyNode<any>> | Record<string, any> | any[];
84
+
85
+ // Helper to build localized names from the display data.
86
+ const buildName = (display: DisplayData): LocalizedNames =>
87
+ display.reduce(
88
+ (names, { locale, name }) => ({ ...names, [locale]: name }),
89
+ {}
90
+ );
91
+
92
+ /**
93
+ * Recursively constructs a nested object with descriptive properties from a path.
94
+ *
95
+ * @param currentObject - The object or array being built upon.
96
+ * @param path - The path segments to follow.
97
+ * @param sourceValue - The raw value to place at the end of the path.
98
+ * @param displayData - The data for generating localized names.
99
+ * @returns The new object or array structure.
100
+ */
101
+ const createNestedProperty = (
102
+ currentObject: NodeOrStructure,
103
+ path: Path,
104
+ sourceValue: unknown, // Use `unknown` for type-safe input
105
+ displayData: DisplayData
106
+ ): NodeOrStructure => {
107
+ const [key, ...rest] = path;
108
+
109
+ // Case 1: Map over an array (key is null)
110
+ if (key === null) {
111
+ if (!Array.isArray(sourceValue)) return currentObject;
112
+
113
+ // We assert the type here because we know this branch handles PropertyNodes
114
+ const node = currentObject as Partial<PropertyNode<unknown[]>>;
115
+ const existingValue = Array.isArray(node.value) ? node.value : [];
116
+
117
+ const mappedArray = sourceValue.map((item, idx) =>
118
+ createNestedProperty(existingValue[idx] || {}, rest, item, displayData)
119
+ );
120
+
121
+ return {
122
+ ...node,
123
+ value: mappedArray,
124
+ name: node.name ?? buildName(displayData),
125
+ };
126
+ }
127
+
128
+ // Case 2: Handle an object key (key is a string)
129
+ if (typeof key === "string") {
130
+ const nextSourceValue =
131
+ typeof sourceValue === "object" &&
132
+ sourceValue !== null &&
133
+ !Array.isArray(sourceValue) &&
134
+ key in sourceValue
135
+ ? (sourceValue as Record<string, unknown>)[key]
136
+ : sourceValue;
137
+
138
+ // base case
139
+ if (rest.length === 0) {
140
+ return {
141
+ ...currentObject,
142
+ [key]: { value: nextSourceValue, name: buildName(displayData) },
143
+ };
144
+ }
145
+
146
+ // recursive step
147
+ const nextObject =
148
+ (currentObject as Record<string, NodeOrStructure>)[key] || {};
149
+
150
+ return {
151
+ ...currentObject,
152
+ [key]: createNestedProperty(
153
+ nextObject,
154
+ rest,
155
+ nextSourceValue,
156
+ displayData
157
+ ),
158
+ };
159
+ }
160
+
161
+ // Case 3: Handle a specific array index (key is a number)
162
+ if (typeof key === "number") {
163
+ const newArray = Array.isArray(currentObject) ? [...currentObject] : [];
164
+ const nextValue = Array.isArray(sourceValue) ? sourceValue[key] : undefined;
165
+
166
+ newArray[key] = createNestedProperty(
167
+ newArray[key] || {},
168
+ rest,
169
+ nextValue,
170
+ displayData
171
+ );
172
+ return newArray;
173
+ }
174
+
175
+ return currentObject;
176
+ };
177
+
67
178
  const parseCredentialSdJwt = (
68
179
  // The credential configuration to use to parse the provided credential
69
180
  credentialConfig: CredentialConf,
@@ -72,7 +183,7 @@ const parseCredentialSdJwt = (
72
183
  includeUndefinedAttributes: boolean = false
73
184
  ): ParsedCredential => {
74
185
  if (credentialConfig.format !== sdJwt.header.typ) {
75
- const message = `Received credential is of an unknwown type. Expected one of [${credentialConfig.format}], received '${sdJwt.header.typ}'`;
186
+ const message = `Received credential is of an unknown type. Expected one of [${credentialConfig.format}], received '${sdJwt.header.typ}'`;
76
187
  Logger.log(LogLevel.ERROR, message);
77
188
  throw new IoWalletError(message);
78
189
  }
@@ -81,55 +192,40 @@ const parseCredentialSdJwt = (
81
192
  Logger.log(LogLevel.ERROR, "Missing claims in the credential subject");
82
193
  throw new IoWalletError("Missing claims in the credential subject"); // TODO [SIW-1268]: should not be optional
83
194
  }
195
+
84
196
  const attrDefinitions = credentialConfig.claims;
85
197
 
86
- // the key of the attribute defintion must match the disclosure's name
198
+ // Validate that all attributes from the config exist in the disclosures
87
199
  const attrsNotInDisclosures = attrDefinitions.filter(
88
- (definition) => !disclosures.some(([, name]) => name === definition.path[0]) // Ignore nested paths for now, see https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0-15.html#name-claims-path-pointer
200
+ (definition) => !disclosures.some(([, name]) => name === definition.path[0])
89
201
  );
90
- if (attrsNotInDisclosures.length > 0) {
202
+
203
+ if (attrsNotInDisclosures.length > 0 && !ignoreMissingAttributes) {
91
204
  const missing = attrsNotInDisclosures.map((_) => _.path[0]).join(", ");
92
- const received = disclosures.map((_) => _[1 /* name */]).join(", ");
93
- if (!ignoreMissingAttributes) {
94
- const message = `Some attributes are missing in the credential. Missing: [${missing}], received: [${received}]`;
95
- Logger.log(LogLevel.ERROR, message);
96
- throw new IoWalletError(message);
97
- }
205
+ const received = disclosures.map((_) => _[1]).join(", ");
206
+ const message = `Some attributes are missing in the credential. Missing: [${missing}], received: [${received}]`;
207
+ Logger.log(LogLevel.ERROR, message);
208
+ throw new IoWalletError(message);
98
209
  }
99
210
 
100
- // attributes that are defined in the issuer configuration
101
- // and are present in the disclosure set
102
- const definedValues = Object.fromEntries(
103
- attrDefinitions
104
- // retrieve the value from the disclosure set
105
- .map(
106
- ({ path, ...definition }) =>
107
- [
108
- path[0],
109
- {
110
- ...definition,
111
- value: disclosures.find(
112
- (_) => _[1 /* name */] === path[0]
113
- )?.[2 /* value */],
114
- },
115
- ] as const
116
- )
117
- // add a human readable attribute name, with i18n, in the form { locale: name }
118
- // example: { "it-IT": "Nome", "en-EN": "Name", "es-ES": "Nombre" }
119
- .map(
120
- ([attrKey, { display, ...definition }]) =>
121
- [
122
- attrKey,
123
- {
124
- ...definition,
125
- name: display.reduce(
126
- (names, { locale, name }) => ({ ...names, [locale]: name }),
127
- {} as Record<string, string>
128
- ),
129
- },
130
- ] as const
131
- )
132
- );
211
+ const definedValues: ParsedCredential = {};
212
+
213
+ for (const { path, display } of attrDefinitions) {
214
+ const attrKey = path[0];
215
+ const disclosureValue = disclosures.find(
216
+ ([, name]) => name === attrKey
217
+ )?.[2];
218
+
219
+ if (disclosureValue !== undefined) {
220
+ const enriched = createNestedProperty(
221
+ definedValues,
222
+ path,
223
+ disclosureValue,
224
+ display
225
+ );
226
+ Object.assign(definedValues, enriched);
227
+ }
228
+ }
133
229
 
134
230
  if (includeUndefinedAttributes) {
135
231
  // attributes that are in the disclosure set
@@ -139,6 +235,7 @@ const parseCredentialSdJwt = (
139
235
  .filter((_) => !Object.keys(definedValues).includes(_[1]))
140
236
  .map(([, key, value]) => [key, { value, name: key }])
141
237
  );
238
+
142
239
  return {
143
240
  ...definedValues,
144
241
  ...undefinedValues,