@pagopa/io-react-native-wallet 0.27.1 → 0.28.1

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.
Files changed (153) hide show
  1. package/lib/commonjs/client/generated/wallet-provider.js +27 -19
  2. package/lib/commonjs/client/generated/wallet-provider.js.map +1 -1
  3. package/lib/commonjs/credential/issuance/03-start-user-authorization.js +3 -0
  4. package/lib/commonjs/credential/issuance/03-start-user-authorization.js.map +1 -1
  5. package/lib/commonjs/credential/presentation/01-start-flow.js +14 -24
  6. package/lib/commonjs/credential/presentation/01-start-flow.js.map +1 -1
  7. package/lib/commonjs/credential/presentation/03-get-request-object.js +30 -42
  8. package/lib/commonjs/credential/presentation/03-get-request-object.js.map +1 -1
  9. package/lib/commonjs/credential/presentation/04-retrieve-rp-jwks.js +32 -0
  10. package/lib/commonjs/credential/presentation/04-retrieve-rp-jwks.js.map +1 -0
  11. package/lib/commonjs/credential/presentation/05-verify-request-object.js +53 -0
  12. package/lib/commonjs/credential/presentation/05-verify-request-object.js.map +1 -0
  13. package/lib/commonjs/credential/presentation/06-fetch-presentation-definition.js +39 -0
  14. package/lib/commonjs/credential/presentation/06-fetch-presentation-definition.js.map +1 -0
  15. package/lib/commonjs/credential/presentation/07-evaluate-dcql-query.js +125 -0
  16. package/lib/commonjs/credential/presentation/07-evaluate-dcql-query.js.map +1 -0
  17. package/lib/commonjs/credential/presentation/07-evaluate-input-descriptor.js +289 -0
  18. package/lib/commonjs/credential/presentation/07-evaluate-input-descriptor.js.map +1 -0
  19. package/lib/commonjs/credential/presentation/08-send-authorization-response.js +170 -0
  20. package/lib/commonjs/credential/presentation/08-send-authorization-response.js.map +1 -0
  21. package/lib/commonjs/credential/presentation/errors.js +69 -1
  22. package/lib/commonjs/credential/presentation/errors.js.map +1 -1
  23. package/lib/commonjs/credential/presentation/index.js +29 -1
  24. package/lib/commonjs/credential/presentation/index.js.map +1 -1
  25. package/lib/commonjs/credential/presentation/types.js +124 -3
  26. package/lib/commonjs/credential/presentation/types.js.map +1 -1
  27. package/lib/commonjs/sd-jwt/index.js +41 -1
  28. package/lib/commonjs/sd-jwt/index.js.map +1 -1
  29. package/lib/commonjs/trust/chain.js +35 -50
  30. package/lib/commonjs/trust/chain.js.map +1 -1
  31. package/lib/commonjs/trust/index.js +139 -16
  32. package/lib/commonjs/trust/index.js.map +1 -1
  33. package/lib/commonjs/trust/types.js +36 -12
  34. package/lib/commonjs/trust/types.js.map +1 -1
  35. package/lib/commonjs/trust/utils.js +41 -0
  36. package/lib/commonjs/trust/utils.js.map +1 -0
  37. package/lib/commonjs/utils/jwk.js +5 -1
  38. package/lib/commonjs/utils/jwk.js.map +1 -1
  39. package/lib/commonjs/wallet-instance/index.js +10 -0
  40. package/lib/commonjs/wallet-instance/index.js.map +1 -1
  41. package/lib/module/client/generated/wallet-provider.js +22 -15
  42. package/lib/module/client/generated/wallet-provider.js.map +1 -1
  43. package/lib/module/credential/issuance/03-start-user-authorization.js +3 -0
  44. package/lib/module/credential/issuance/03-start-user-authorization.js.map +1 -1
  45. package/lib/module/credential/presentation/01-start-flow.js +14 -24
  46. package/lib/module/credential/presentation/01-start-flow.js.map +1 -1
  47. package/lib/module/credential/presentation/03-get-request-object.js +31 -43
  48. package/lib/module/credential/presentation/03-get-request-object.js.map +1 -1
  49. package/lib/module/credential/presentation/04-retrieve-rp-jwks.js +25 -0
  50. package/lib/module/credential/presentation/04-retrieve-rp-jwks.js.map +1 -0
  51. package/lib/module/credential/presentation/05-verify-request-object.js +46 -0
  52. package/lib/module/credential/presentation/05-verify-request-object.js.map +1 -0
  53. package/lib/module/credential/presentation/06-fetch-presentation-definition.js +32 -0
  54. package/lib/module/credential/presentation/06-fetch-presentation-definition.js.map +1 -0
  55. package/lib/module/credential/presentation/07-evaluate-dcql-query.js +117 -0
  56. package/lib/module/credential/presentation/07-evaluate-dcql-query.js.map +1 -0
  57. package/lib/module/credential/presentation/07-evaluate-input-descriptor.js +278 -0
  58. package/lib/module/credential/presentation/07-evaluate-input-descriptor.js.map +1 -0
  59. package/lib/module/credential/presentation/08-send-authorization-response.js +158 -0
  60. package/lib/module/credential/presentation/08-send-authorization-response.js.map +1 -0
  61. package/lib/module/credential/presentation/errors.js +64 -0
  62. package/lib/module/credential/presentation/errors.js.map +1 -1
  63. package/lib/module/credential/presentation/index.js +6 -2
  64. package/lib/module/credential/presentation/index.js.map +1 -1
  65. package/lib/module/credential/presentation/types.js +121 -2
  66. package/lib/module/credential/presentation/types.js.map +1 -1
  67. package/lib/module/sd-jwt/index.js +40 -1
  68. package/lib/module/sd-jwt/index.js.map +1 -1
  69. package/lib/module/trust/chain.js +32 -46
  70. package/lib/module/trust/chain.js.map +1 -1
  71. package/lib/module/trust/index.js +139 -18
  72. package/lib/module/trust/index.js.map +1 -1
  73. package/lib/module/trust/types.js +34 -11
  74. package/lib/module/trust/types.js.map +1 -1
  75. package/lib/module/trust/utils.js +33 -0
  76. package/lib/module/trust/utils.js.map +1 -0
  77. package/lib/module/utils/jwk.js +3 -0
  78. package/lib/module/utils/jwk.js.map +1 -1
  79. package/lib/module/wallet-instance/index.js +9 -0
  80. package/lib/module/wallet-instance/index.js.map +1 -1
  81. package/lib/typescript/client/generated/wallet-provider.d.ts +91 -54
  82. package/lib/typescript/client/generated/wallet-provider.d.ts.map +1 -1
  83. package/lib/typescript/credential/issuance/03-start-user-authorization.d.ts.map +1 -1
  84. package/lib/typescript/credential/presentation/01-start-flow.d.ts +26 -5
  85. package/lib/typescript/credential/presentation/01-start-flow.d.ts.map +1 -1
  86. package/lib/typescript/credential/presentation/03-get-request-object.d.ts +7 -10
  87. package/lib/typescript/credential/presentation/03-get-request-object.d.ts.map +1 -1
  88. package/lib/typescript/credential/presentation/04-retrieve-rp-jwks.d.ts +23 -0
  89. package/lib/typescript/credential/presentation/04-retrieve-rp-jwks.d.ts.map +1 -0
  90. package/lib/typescript/credential/presentation/05-verify-request-object.d.ts +18 -0
  91. package/lib/typescript/credential/presentation/05-verify-request-object.d.ts.map +1 -0
  92. package/lib/typescript/credential/presentation/06-fetch-presentation-definition.d.ts +21 -0
  93. package/lib/typescript/credential/presentation/06-fetch-presentation-definition.d.ts.map +1 -0
  94. package/lib/typescript/credential/presentation/07-evaluate-dcql-query.d.ts +20 -0
  95. package/lib/typescript/credential/presentation/07-evaluate-dcql-query.d.ts.map +1 -0
  96. package/lib/typescript/credential/presentation/07-evaluate-input-descriptor.d.ts +88 -0
  97. package/lib/typescript/credential/presentation/07-evaluate-input-descriptor.d.ts.map +1 -0
  98. package/lib/typescript/credential/presentation/08-send-authorization-response.d.ts +70 -0
  99. package/lib/typescript/credential/presentation/08-send-authorization-response.d.ts.map +1 -0
  100. package/lib/typescript/credential/presentation/errors.d.ts +44 -0
  101. package/lib/typescript/credential/presentation/errors.d.ts.map +1 -1
  102. package/lib/typescript/credential/presentation/index.d.ts +7 -3
  103. package/lib/typescript/credential/presentation/index.d.ts.map +1 -1
  104. package/lib/typescript/credential/presentation/types.d.ts +747 -10
  105. package/lib/typescript/credential/presentation/types.d.ts.map +1 -1
  106. package/lib/typescript/credential/status/types.d.ts +6 -6
  107. package/lib/typescript/sd-jwt/index.d.ts +31 -12
  108. package/lib/typescript/sd-jwt/index.d.ts.map +1 -1
  109. package/lib/typescript/sd-jwt/types.d.ts +6 -6
  110. package/lib/typescript/trust/chain.d.ts +4 -9
  111. package/lib/typescript/trust/chain.d.ts.map +1 -1
  112. package/lib/typescript/trust/index.d.ts +337 -61
  113. package/lib/typescript/trust/index.d.ts.map +1 -1
  114. package/lib/typescript/trust/types.d.ts +4074 -407
  115. package/lib/typescript/trust/types.d.ts.map +1 -1
  116. package/lib/typescript/trust/utils.d.ts +12 -0
  117. package/lib/typescript/trust/utils.d.ts.map +1 -0
  118. package/lib/typescript/utils/decoder.d.ts +1 -1
  119. package/lib/typescript/utils/decoder.d.ts.map +1 -1
  120. package/lib/typescript/utils/jwk.d.ts +137 -0
  121. package/lib/typescript/utils/jwk.d.ts.map +1 -1
  122. package/lib/typescript/wallet-instance/index.d.ts +8 -0
  123. package/lib/typescript/wallet-instance/index.d.ts.map +1 -1
  124. package/lib/typescript/wallet-instance-attestation/types.d.ts +36 -36
  125. package/package.json +5 -2
  126. package/src/client/generated/wallet-provider.ts +28 -19
  127. package/src/credential/issuance/03-start-user-authorization.ts +3 -0
  128. package/src/credential/presentation/01-start-flow.ts +19 -26
  129. package/src/credential/presentation/03-get-request-object.ts +35 -58
  130. package/src/credential/presentation/04-retrieve-rp-jwks.ts +34 -0
  131. package/src/credential/presentation/05-verify-request-object.ts +52 -0
  132. package/src/credential/presentation/06-fetch-presentation-definition.ts +48 -0
  133. package/src/credential/presentation/07-evaluate-dcql-query.ts +166 -0
  134. package/src/credential/presentation/07-evaluate-input-descriptor.ts +391 -0
  135. package/src/credential/presentation/08-send-authorization-response.ts +220 -0
  136. package/src/credential/presentation/errors.ts +64 -0
  137. package/src/credential/presentation/index.ts +22 -1
  138. package/src/credential/presentation/types.ts +133 -2
  139. package/src/sd-jwt/index.ts +49 -1
  140. package/src/trust/chain.ts +46 -66
  141. package/src/trust/index.ts +185 -20
  142. package/src/trust/types.ts +34 -10
  143. package/src/trust/utils.ts +35 -0
  144. package/src/utils/decoder.ts +1 -1
  145. package/src/utils/jwk.ts +8 -1
  146. package/src/wallet-instance/index.ts +13 -0
  147. package/lib/commonjs/credential/presentation/04-send-authorization-response.js +0 -138
  148. package/lib/commonjs/credential/presentation/04-send-authorization-response.js.map +0 -1
  149. package/lib/module/credential/presentation/04-send-authorization-response.js +0 -128
  150. package/lib/module/credential/presentation/04-send-authorization-response.js.map +0 -1
  151. package/lib/typescript/credential/presentation/04-send-authorization-response.d.ts +0 -34
  152. package/lib/typescript/credential/presentation/04-send-authorization-response.d.ts.map +0 -1
  153. package/src/credential/presentation/04-send-authorization-response.ts +0 -168
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.RequestObject = void 0;
6
+ exports.WalletMetadata = exports.RequestObjectWalletCapabilities = exports.RequestObject = exports.PresentationDefinition = exports.LegacyDirectAuthorizationBodyPayload = exports.InputDescriptor = exports.DirectAuthorizationBodyPayload = void 0;
7
7
  var _types = require("../../sd-jwt/types");
8
8
  var z = _interopRequireWildcard(require("zod"));
9
9
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
@@ -12,6 +12,81 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
12
12
  * A pair that associate a tokenized Verified Credential with the claims presented or requested to present.
13
13
  */
14
14
 
15
+ /**
16
+ * A object that associate the information needed to multiple remote presentation
17
+ * Used with `presentation_definition`
18
+ * @deprecated Use `RemotePresentation`
19
+ */
20
+
21
+ /**
22
+ * A object that associate the information needed to multiple remote presentation
23
+ * Used with DCQL queries
24
+ */
25
+
26
+ const Fields = z.object({
27
+ path: z.array(z.string().min(1)),
28
+ // Array of JSONPath string expressions
29
+ id: z.string().optional(),
30
+ // Unique string ID
31
+ purpose: z.string().optional(),
32
+ // Purpose of the field
33
+ name: z.string().optional(),
34
+ // Human-friendly name
35
+ filter: z.any().optional(),
36
+ // JSON Schema descriptor for filtering
37
+ optional: z.boolean().optional(),
38
+ // Boolean indicating if the field is optional
39
+ intent_to_retain: z.boolean().optional() // Boolean indicating that the Verifier intends to retain the Claim's data being requested
40
+ });
41
+
42
+ // Define the Constraints Object Schema
43
+ const Constraints = z.object({
44
+ fields: z.array(Fields).optional(),
45
+ // Array of Field Objects
46
+ limit_disclosure: z.enum(["required", "preferred"]).optional() // Limit disclosure property
47
+ });
48
+
49
+ // Define the Input Descriptor Object Schema
50
+
51
+ const InputDescriptor = z.object({
52
+ id: z.string().min(1),
53
+ // Mandatory unique string ID
54
+ name: z.string().optional(),
55
+ // Human-friendly name
56
+ purpose: z.string().optional(),
57
+ // Purpose of the schema
58
+ format: z.record(z.string(), z.any()).optional(),
59
+ // Object with Claim Format Designations
60
+ constraints: Constraints,
61
+ // Constraints Object (mandatory)
62
+ group: z.string().optional() // Match one of the grouping strings listed in the "from" values of a Submission Requirement Rule
63
+ });
64
+ exports.InputDescriptor = InputDescriptor;
65
+ const SubmissionRequirement = z.object({
66
+ name: z.string().optional(),
67
+ purpose: z.string().optional(),
68
+ rule: z.string(),
69
+ // "all": all group's rules must be present, or "pick": at least group's "count" rules must be present
70
+ from: z.string().optional(),
71
+ // MUST contain either a "from" or "from_nested" property
72
+ from_nested: z.array(z.object({
73
+ name: z.string().optional(),
74
+ purpose: z.string().optional(),
75
+ rule: z.string(),
76
+ from: z.string()
77
+ })).optional(),
78
+ count: z.number().optional()
79
+ //"count", "min", and "max" may be present with a "pick" rule
80
+ });
81
+
82
+ const PresentationDefinition = z.object({
83
+ id: z.string(),
84
+ name: z.string().optional(),
85
+ purpose: z.string().optional(),
86
+ input_descriptors: z.array(InputDescriptor),
87
+ submission_requirements: z.array(SubmissionRequirement).optional()
88
+ });
89
+ exports.PresentationDefinition = PresentationDefinition;
15
90
  const RequestObject = z.object({
16
91
  iss: z.string(),
17
92
  iat: _types.UnixTime,
@@ -19,11 +94,57 @@ const RequestObject = z.object({
19
94
  state: z.string(),
20
95
  nonce: z.string(),
21
96
  response_uri: z.string(),
97
+ response_uri_method: z.string().optional(),
22
98
  response_type: z.literal("vp_token"),
23
99
  response_mode: z.literal("direct_post.jwt"),
24
100
  client_id: z.string(),
25
- client_id_scheme: z.literal("entity_id"),
26
- scope: z.string()
101
+ dcql_query: z.record(z.string(), z.any()).optional(),
102
+ // Validation happens within the `dcql` library, no need to duplicate it here
103
+ scope: z.string().optional(),
104
+ presentation_definition: PresentationDefinition.optional()
27
105
  });
28
106
  exports.RequestObject = RequestObject;
107
+ const WalletMetadata = z.object({
108
+ presentation_definition_uri_supported: z.boolean().optional(),
109
+ client_id_schemes_supported: z.array(z.string()).optional(),
110
+ request_object_signing_alg_values_supported: z.array(z.string()).optional(),
111
+ vp_formats_supported: z.record(z.string(),
112
+ // TODO [SIW-2110]: use explicit credential format?
113
+ z.object({
114
+ "sd-jwt_alg_values": z.array(z.string()).optional() // alg_values_supported?
115
+ }))
116
+ // TODO [SIW-2110]: include other metadata?
117
+ });
118
+
119
+ /**
120
+ * Wallet capabilities that must be submitted to get the Request Object
121
+ * via POST request when the `request_uri_method` is `post`.
122
+ */
123
+ exports.WalletMetadata = WalletMetadata;
124
+ const RequestObjectWalletCapabilities = z.object({
125
+ wallet_metadata: WalletMetadata,
126
+ wallet_nonce: z.string().optional()
127
+ });
128
+
129
+ /**
130
+ * Authorization Response payload when using `presentation_definition`.
131
+ * @deprecated Use `DirectAuthorizationBodyPayload`
132
+ */
133
+ exports.RequestObjectWalletCapabilities = RequestObjectWalletCapabilities;
134
+ /**
135
+ * @deprecated Use `DirectAuthorizationBodyPayload`
136
+ */
137
+ const LegacyDirectAuthorizationBodyPayload = z.object({
138
+ vp_token: z.union([z.string(), z.array(z.string())]).optional(),
139
+ presentation_submission: z.record(z.string(), z.unknown())
140
+ });
141
+
142
+ /**
143
+ * Authorization Response payload when using DCQL queries.
144
+ */
145
+ exports.LegacyDirectAuthorizationBodyPayload = LegacyDirectAuthorizationBodyPayload;
146
+ const DirectAuthorizationBodyPayload = z.object({
147
+ vp_token: z.record(z.string(), z.string())
148
+ });
149
+ exports.DirectAuthorizationBodyPayload = DirectAuthorizationBodyPayload;
29
150
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_types","require","z","_interopRequireWildcard","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","RequestObject","object","iss","string","iat","UnixTime","exp","state","nonce","response_uri","response_type","literal","response_mode","client_id","client_id_scheme","scope","exports"],"sourceRoot":"../../../../src","sources":["credential/presentation/types.ts"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,CAAA,GAAAC,uBAAA,CAAAF,OAAA;AAAyB,SAAAG,yBAAAC,WAAA,eAAAC,OAAA,kCAAAC,iBAAA,OAAAD,OAAA,QAAAE,gBAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,WAAA,WAAAA,WAAA,GAAAG,gBAAA,GAAAD,iBAAA,KAAAF,WAAA;AAAA,SAAAF,wBAAAM,GAAA,EAAAJ,WAAA,SAAAA,WAAA,IAAAI,GAAA,IAAAA,GAAA,CAAAC,UAAA,WAAAD,GAAA,QAAAA,GAAA,oBAAAA,GAAA,wBAAAA,GAAA,4BAAAE,OAAA,EAAAF,GAAA,UAAAG,KAAA,GAAAR,wBAAA,CAAAC,WAAA,OAAAO,KAAA,IAAAA,KAAA,CAAAC,GAAA,CAAAJ,GAAA,YAAAG,KAAA,CAAAE,GAAA,CAAAL,GAAA,SAAAM,MAAA,WAAAC,qBAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,GAAA,IAAAX,GAAA,QAAAW,GAAA,kBAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAd,GAAA,EAAAW,GAAA,SAAAI,IAAA,GAAAR,qBAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAV,GAAA,EAAAW,GAAA,cAAAI,IAAA,KAAAA,IAAA,CAAAV,GAAA,IAAAU,IAAA,CAAAC,GAAA,KAAAR,MAAA,CAAAC,cAAA,CAAAH,MAAA,EAAAK,GAAA,EAAAI,IAAA,YAAAT,MAAA,CAAAK,GAAA,IAAAX,GAAA,CAAAW,GAAA,SAAAL,MAAA,CAAAJ,OAAA,GAAAF,GAAA,MAAAG,KAAA,IAAAA,KAAA,CAAAa,GAAA,CAAAhB,GAAA,EAAAM,MAAA,YAAAA,MAAA;AAEzB;AACA;AACA;;AAQO,MAAMW,aAAa,GAAGxB,CAAC,CAACyB,MAAM,CAAC;EACpCC,GAAG,EAAE1B,CAAC,CAAC2B,MAAM,CAAC,CAAC;EACfC,GAAG,EAAEC,eAAQ;EACbC,GAAG,EAAED,eAAQ;EACbE,KAAK,EAAE/B,CAAC,CAAC2B,MAAM,CAAC,CAAC;EACjBK,KAAK,EAAEhC,CAAC,CAAC2B,MAAM,CAAC,CAAC;EACjBM,YAAY,EAAEjC,CAAC,CAAC2B,MAAM,CAAC,CAAC;EACxBO,aAAa,EAAElC,CAAC,CAACmC,OAAO,CAAC,UAAU,CAAC;EACpCC,aAAa,EAAEpC,CAAC,CAACmC,OAAO,CAAC,iBAAiB,CAAC;EAC3CE,SAAS,EAAErC,CAAC,CAAC2B,MAAM,CAAC,CAAC;EACrBW,gBAAgB,EAAEtC,CAAC,CAACmC,OAAO,CAAC,WAAW,CAAC;EACxCI,KAAK,EAAEvC,CAAC,CAAC2B,MAAM,CAAC;AAClB,CAAC,CAAC;AAACa,OAAA,CAAAhB,aAAA,GAAAA,aAAA"}
1
+ {"version":3,"names":["_types","require","z","_interopRequireWildcard","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","Fields","object","path","array","string","min","id","optional","purpose","name","filter","any","boolean","intent_to_retain","Constraints","fields","limit_disclosure","enum","InputDescriptor","format","record","constraints","group","exports","SubmissionRequirement","rule","from","from_nested","count","number","PresentationDefinition","input_descriptors","submission_requirements","RequestObject","iss","iat","UnixTime","exp","state","nonce","response_uri","response_uri_method","response_type","literal","response_mode","client_id","dcql_query","scope","presentation_definition","WalletMetadata","presentation_definition_uri_supported","client_id_schemes_supported","request_object_signing_alg_values_supported","vp_formats_supported","RequestObjectWalletCapabilities","wallet_metadata","wallet_nonce","LegacyDirectAuthorizationBodyPayload","vp_token","union","presentation_submission","unknown","DirectAuthorizationBodyPayload"],"sourceRoot":"../../../../src","sources":["credential/presentation/types.ts"],"mappings":"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"}
@@ -10,7 +10,7 @@ Object.defineProperty(exports, "SdJwt4VC", {
10
10
  return _types.SdJwt4VC;
11
11
  }
12
12
  });
13
- exports.verify = exports.disclose = exports.decode = void 0;
13
+ exports.verify = exports.prepareVpToken = exports.disclose = exports.decode = void 0;
14
14
  var _ioReactNativeJwt = require("@pagopa/io-react-native-jwt");
15
15
  var _types = require("./types");
16
16
  var _verifier = require("./verifier");
@@ -165,5 +165,45 @@ const verify = async (token, publicKey, customSchema) => {
165
165
  disclosures: decoded.disclosures.map(d => d.decoded)
166
166
  };
167
167
  };
168
+
169
+ /**
170
+ * Prepares a Verified Presentation (VP) token to be sent as part of an
171
+ * authorization response in an OpenID 4 Verifiable Presentations flow.
172
+ *
173
+ * @param nonce - The nonce provided by the relying party.
174
+ * @param client_id - The client identifier of the relying party.
175
+ * @param presentation - An object containing the verifiable credential, the claims to disclose,
176
+ * and the cryptographic context for signing.
177
+ * @returns An object containing the signed VP token (`vp_token`).
178
+ *
179
+ * @remarks
180
+ * 1. The `disclose()` function is used to produce a token with only the requested claims.
181
+ * 2. A KB-JWT is then signed, including sd_hash and `nonce`.
182
+ * 3. The `vp_token` is composed of the disclosed VP and the KB-JWT.
183
+ */
168
184
  exports.verify = verify;
185
+ const prepareVpToken = async (nonce, client_id, _ref2) => {
186
+ let [verifiableCredential, requestedClaims, cryptoContext] = _ref2;
187
+ // Produce a VP token with only requested claims from the verifiable credential
188
+ const {
189
+ token: vp
190
+ } = await disclose(verifiableCredential, requestedClaims);
191
+
192
+ // <Issuer-signed JWT>~<Disclosure 1>~<Disclosure N>~
193
+ const sd_hash = await (0, _ioReactNativeJwt.sha256ToBase64)(`${vp}~`);
194
+ const kbJwt = await new _ioReactNativeJwt.SignJWT(cryptoContext).setProtectedHeader({
195
+ typ: "kb+jwt",
196
+ alg: "ES256"
197
+ }).setPayload({
198
+ sd_hash,
199
+ nonce: nonce
200
+ }).setAudience(client_id).setIssuedAt().sign();
201
+
202
+ // <Issuer-signed JWT>~<Disclosure 1>~...~<Disclosure N>~<KB-JWT>
203
+ const vp_token = [vp, kbJwt].join("~");
204
+ return {
205
+ vp_token
206
+ };
207
+ };
208
+ exports.prepareVpToken = prepareVpToken;
169
209
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_ioReactNativeJwt","require","_types","_verifier","Errors","_interopRequireWildcard","exports","_jsBase","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","decodeDisclosure","encoded","utf8String","Base64","decode","decoded","Disclosure","parse","JSON","token","customSchema","slice","rawSdJwt","rawDisclosures","split","decodedJwt","decodeJwt","parser","SdJwt4VC","sdJwt","header","protectedHeader","payload","disclosures","map","disclose","claims","paths","Promise","all","claim","disclosure","find","_ref","name","ClaimsNotFoundBetweenDisclosures","hash","sha256ToBase64","_sd","includes","index","indexOf","path","ClaimsNotFoundInToken","filteredDisclosures","filter","d","disclosedToken","join","verify","publicKey","verifyJwt","verifyDisclosure"],"sourceRoot":"../../../src","sources":["sd-jwt/index.ts"],"mappings":"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"}
1
+ {"version":3,"names":["_ioReactNativeJwt","require","_types","_verifier","Errors","_interopRequireWildcard","exports","_jsBase","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","decodeDisclosure","encoded","utf8String","Base64","decode","decoded","Disclosure","parse","JSON","token","customSchema","slice","rawSdJwt","rawDisclosures","split","decodedJwt","decodeJwt","parser","SdJwt4VC","sdJwt","header","protectedHeader","payload","disclosures","map","disclose","claims","paths","Promise","all","claim","disclosure","find","_ref","name","ClaimsNotFoundBetweenDisclosures","hash","sha256ToBase64","_sd","includes","index","indexOf","path","ClaimsNotFoundInToken","filteredDisclosures","filter","d","disclosedToken","join","verify","publicKey","verifyJwt","verifyDisclosure","prepareVpToken","nonce","client_id","_ref2","verifiableCredential","requestedClaims","cryptoContext","vp","sd_hash","kbJwt","SignJWT","setProtectedHeader","typ","alg","setPayload","setAudience","setIssuedAt","sign","vp_token"],"sourceRoot":"../../../src","sources":["sd-jwt/index.ts"],"mappings":"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"}
@@ -5,40 +5,13 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.renewTrustChain = renewTrustChain;
7
7
  exports.validateTrustChain = validateTrustChain;
8
- var _ioReactNativeJwt = require("@pagopa/io-react-native-jwt");
9
8
  var _types = require("./types");
10
9
  var _errors = require("../utils/errors");
11
10
  var z = _interopRequireWildcard(require("zod"));
12
11
  var _ = require(".");
12
+ var _utils = require("./utils");
13
13
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
14
14
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
15
- // Verify a token signature
16
- // The kid is extracted from the token header
17
- const verify = async (token, kid, jwks) => {
18
- const jwk = jwks.find(k => k.kid === kid);
19
- if (!jwk) {
20
- throw new Error(`Invalid kid: ${kid}, token: ${token}`);
21
- }
22
- const {
23
- protectedHeader: header,
24
- payload
25
- } = await (0, _ioReactNativeJwt.verify)(token, jwk);
26
- return {
27
- header,
28
- payload
29
- };
30
- };
31
- const decode = token => {
32
- const {
33
- protectedHeader: header,
34
- payload
35
- } = (0, _ioReactNativeJwt.decode)(token);
36
- return {
37
- header,
38
- payload
39
- };
40
- };
41
-
42
15
  // The first element of the chain is supposed to be the Entity Configuration for the document issuer
43
16
  const FirstElementShape = _types.EntityConfiguration;
44
17
  // Each element but the first is supposed to be an Entity Statement
@@ -51,7 +24,7 @@ const LastElementShape = z.union([_types.EntityStatement, _types.TrustAnchorEnti
51
24
  * Validates a provided trust chain against a known trust
52
25
  *
53
26
  * @param trustAnchorEntity The entity configuration of the known trust anchor
54
- * @param chain The chain of statements to be validate
27
+ * @param chain The chain of statements to be validated
55
28
  * @returns The list of parsed token representing the chain
56
29
  * @throws {IoWalletError} If the chain is not valid
57
30
  */
@@ -71,11 +44,11 @@ async function validateTrustChain(trustAnchorEntity, chain) {
71
44
  throw new _errors.IoWalletError(`Cannot select kid: empty token`);
72
45
  }
73
46
  const shape = selectTokenShape(currentIndex);
74
- return shape.parse(decode(token)).header.kid;
47
+ return shape.parse((0, _utils.decode)(token)).header.kid;
75
48
  };
76
49
 
77
50
  // select keys from the next token
78
- // if the current token is the last, keys fro trust anchor will be used
51
+ // if the current token is the last, keys from trust anchor will be used
79
52
  const selectKeys = currentIndex => {
80
53
  if (currentIndex === chain.length - 1) {
81
54
  return trustAnchorEntity.payload.jwks.keys;
@@ -86,12 +59,12 @@ async function validateTrustChain(trustAnchorEntity, chain) {
86
59
  throw new _errors.IoWalletError(`Cannot select keys: empty nextToken`);
87
60
  }
88
61
  const shape = selectTokenShape(nextIndex);
89
- return shape.parse(decode(nextToken)).payload.jwks.keys;
62
+ return shape.parse((0, _utils.decode)(nextToken)).payload.jwks.keys;
90
63
  };
91
64
 
92
65
  // Iterate the chain and validate each element's signature against the public keys of its next
93
- // If there is no next, hence it's the end of the chain and it must be verified by the Trust Anchor
94
- return Promise.all(chain.map((token, i) => [token, selectKid(i), selectKeys(i)]).map(args => verify(...args)));
66
+ // If there is no next, hence it's the end of the chain, and it must be verified by the Trust Anchor
67
+ return Promise.all(chain.map((token, i) => [token, selectKid(i), selectKeys(i)]).map(args => (0, _utils.verify)(...args)));
95
68
  }
96
69
 
97
70
  /**
@@ -99,24 +72,36 @@ async function validateTrustChain(trustAnchorEntity, chain) {
99
72
  *
100
73
  * @param chain The original chain
101
74
  * @param appFetch (optional) fetch api implementation
102
- * @returns A list of signed token that reprensent the trust chain, in the same order of the provided chain
103
- * @throws When an element of the chain fails to parse
75
+ * @returns A list of signed token that represent the trust chain, in the same order of the provided chain
76
+ * @throws IoWalletError When an element of the chain fails to parse
104
77
  */
105
- function renewTrustChain(chain) {
78
+ async function renewTrustChain(chain) {
106
79
  let appFetch = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : fetch;
107
- return Promise.all(chain
108
- // Decode each item to determine its shape
109
- .map(decode).map(e => [_types.EntityStatement.safeParse(e), _types.EntityConfiguration.safeParse(e)])
110
- // fetch the element according to its shape
111
- .map((_ref, i) => {
112
- let [es, ec] = _ref;
113
- return ec.success ? (0, _.getSignedEntityConfiguration)(ec.data.payload.iss, {
114
- appFetch
115
- }) : es.success ? (0, _.getSignedEntityStatement)(es.data.payload.iss, es.data.payload.sub, {
116
- appFetch
117
- }) :
118
- // if the element fail to parse in both EntityStatement and EntityConfiguration, raise an error
119
- Promise.reject(new _errors.IoWalletError(`Cannot renew trust chain because the element #${i} failed to be parsed.`));
80
+ return Promise.all(chain.map(async (token, index) => {
81
+ const decoded = (0, _utils.decode)(token);
82
+ const entityStatementResult = _types.EntityStatement.safeParse(decoded);
83
+ const entityConfigurationResult = _types.EntityConfiguration.safeParse(decoded);
84
+ if (entityConfigurationResult.success) {
85
+ return (0, _.getSignedEntityConfiguration)(entityConfigurationResult.data.payload.iss, {
86
+ appFetch
87
+ });
88
+ }
89
+ if (entityStatementResult.success) {
90
+ const entityStatement = entityStatementResult.data;
91
+ const parentBaseUrl = entityStatement.payload.iss;
92
+ const parentECJwt = await (0, _.getSignedEntityConfiguration)(parentBaseUrl, {
93
+ appFetch
94
+ });
95
+ const parentEC = _types.EntityConfiguration.parse((0, _utils.decode)(parentECJwt));
96
+ const federationFetchEndpoint = parentEC.payload.metadata.federation_entity.federation_fetch_endpoint;
97
+ if (!federationFetchEndpoint) {
98
+ throw new _errors.IoWalletError(`Parent EC at ${parentBaseUrl} is missing federation_fetch_endpoint`);
99
+ }
100
+ return (0, _.getSignedEntityStatement)(federationFetchEndpoint, entityStatement.payload.sub, {
101
+ appFetch
102
+ });
103
+ }
104
+ throw new _errors.IoWalletError(`Cannot renew trust chain because element #${index} failed to parse.`);
120
105
  }));
121
106
  }
122
107
  //# sourceMappingURL=chain.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_ioReactNativeJwt","require","_types","_errors","z","_interopRequireWildcard","_","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","verify","token","kid","jwks","jwk","find","k","Error","protectedHeader","header","payload","verifyJwt","decode","decodeJwt","FirstElementShape","EntityConfiguration","MiddleElementShape","EntityStatement","LastElementShape","union","TrustAnchorEntityConfiguration","validateTrustChain","trustAnchorEntity","chain","length","IoWalletError","selectTokenShape","elementIndex","selectKid","currentIndex","shape","parse","selectKeys","keys","nextIndex","nextToken","Promise","all","map","i","args","renewTrustChain","appFetch","arguments","undefined","fetch","e","safeParse","_ref","es","ec","success","getSignedEntityConfiguration","data","iss","getSignedEntityStatement","sub","reject"],"sourceRoot":"../../../src","sources":["trust/chain.ts"],"mappings":"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"}
1
+ {"version":3,"names":["_types","require","_errors","z","_interopRequireWildcard","_","_utils","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","FirstElementShape","EntityConfiguration","MiddleElementShape","EntityStatement","LastElementShape","union","TrustAnchorEntityConfiguration","validateTrustChain","trustAnchorEntity","chain","length","IoWalletError","selectTokenShape","elementIndex","selectKid","currentIndex","token","shape","parse","decode","header","kid","selectKeys","payload","jwks","keys","nextIndex","nextToken","Promise","all","map","i","args","verify","renewTrustChain","appFetch","arguments","undefined","fetch","index","decoded","entityStatementResult","safeParse","entityConfigurationResult","success","getSignedEntityConfiguration","data","iss","entityStatement","parentBaseUrl","parentECJwt","parentEC","federationFetchEndpoint","metadata","federation_entity","federation_fetch_endpoint","getSignedEntityStatement","sub"],"sourceRoot":"../../../src","sources":["trust/chain.ts"],"mappings":"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"}
@@ -3,25 +3,29 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.buildTrustChain = buildTrustChain;
6
7
  exports.getEntityConfiguration = exports.getCredentialIssuerEntityConfiguration = void 0;
7
8
  exports.getEntityStatement = getEntityStatement;
9
+ exports.getFederationList = getFederationList;
8
10
  exports.getRelyingPartyEntityConfiguration = void 0;
9
11
  exports.getSignedEntityConfiguration = getSignedEntityConfiguration;
10
12
  exports.getSignedEntityStatement = getSignedEntityStatement;
11
13
  exports.getWalletProviderEntityConfiguration = exports.getTrustAnchorEntityConfiguration = void 0;
12
14
  exports.verifyTrustChain = verifyTrustChain;
15
+ var _utils = require("./utils");
13
16
  var _ioReactNativeJwt = require("@pagopa/io-react-native-jwt");
14
17
  var _types = require("./types");
15
18
  var _chain = require("./chain");
16
19
  var _misc = require("../utils/misc");
20
+ var _errors = require("../utils/errors");
17
21
  /**
18
22
  * Verify a given trust chain is actually valid.
19
23
  * It can handle fast chain renewal, which means we try to fetch a fresh version of each statement.
20
24
  *
21
25
  * @param trustAnchorEntity The entity configuration of the known trust anchor
22
- * @param chain The chain of statements to be validate
23
- * @param options.renewOnFail Whether to renew the provided chain if the validation fails at first. Default: true
24
- * @param options.appFetch Fetch api implementation. Default: the built-in implementation
26
+ * @param chain The chain of statements to be validated
27
+ * @param renewOnFail Whether to renew the provided chain if the validation fails at first. Default: true
28
+ * @param appFetch Fetch api implementation. Default: the built-in implementation
25
29
  * @returns The result of the chain validation
26
30
  * @throws {IoWalletError} When either validation or renewal fail
27
31
  */
@@ -46,7 +50,7 @@ async function verifyTrustChain(trustAnchorEntity, chain) {
46
50
  * Fetch the signed entity configuration token for an entity
47
51
  *
48
52
  * @param entityBaseUrl The url of the entity to fetch
49
- * @param param.appFetch (optional) fetch api implemention
53
+ * @param appFetch (optional) fetch api implementation
50
54
  * @returns The signed Entity Configuration token
51
55
  */
52
56
  async function getSignedEntityConfiguration(entityBaseUrl) {
@@ -71,6 +75,7 @@ async function getSignedEntityConfiguration(entityBaseUrl) {
71
75
  *
72
76
  * @param entityBaseUrl The base url of the entity.
73
77
  * @param schema The expected schema of the entity configuration, according to the kind of entity we are fetching from.
78
+ * @param options An optional object with additional options.
74
79
  * @param options.appFetch An optional instance of the http client to be used.
75
80
  * @returns The parsed entity configuration object
76
81
  * @throws {IoWalletError} If the http request fails
@@ -103,9 +108,9 @@ const getEntityConfiguration = (entityBaseUrl, options) => fetchAndParseEntityCo
103
108
  /**
104
109
  * Fetch and parse the entity statement document for a given federation entity.
105
110
  *
106
- * @param accreditationBodyBaseUrl The base url of the accreditaion body which holds and signs the required entity statement
111
+ * @param accreditationBodyBaseUrl The base url of the accreditation body which holds and signs the required entity statement
107
112
  * @param subordinatedEntityBaseUrl The url that identifies the subordinate entity
108
- * @param options.appFetch An optional instance of the http client to be used.
113
+ * @param appFetch An optional instance of the http client to be used.
109
114
  * @returns The parsed entity configuration object
110
115
  * @throws {IoWalletError} If the http request fails
111
116
  * @throws Parse error if the document is not in the expected shape.
@@ -128,21 +133,139 @@ async function getEntityStatement(accreditationBodyBaseUrl, subordinatedEntityBa
128
133
  /**
129
134
  * Fetch the entity statement document for a given federation entity.
130
135
  *
131
- * @param accreditationBodyBaseUrl The base url of the accreditaion body which holds and signs the required entity statement
132
- * @param subordinatedEntityBaseUrl The url that identifies the subordinate entity
133
- * @param options.appFetch An optional instance of the http client to be used.
134
- * @returns The signed entity statement token
135
- * @throws {IoWalletError} If the http request fails
136
+ * @param federationFetchEndpoint The exact endpoint provided by the parent EC's metadata.
137
+ * @param subordinatedEntityBaseUrl The url that identifies the subordinate entity.
138
+ * @param appFetch An optional instance of the http client to be used.
139
+ * @returns The signed entity statement token.
140
+ * @throws {IoWalletError} If the http request fails.
136
141
  */
137
- async function getSignedEntityStatement(accreditationBodyBaseUrl, subordinatedEntityBaseUrl) {
142
+ async function getSignedEntityStatement(federationFetchEndpoint, subordinatedEntityBaseUrl) {
138
143
  let {
139
144
  appFetch = fetch
140
145
  } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
141
- const url = `${accreditationBodyBaseUrl}/fetch?${new URLSearchParams({
142
- sub: subordinatedEntityBaseUrl
143
- })}`;
144
- return await appFetch(url, {
146
+ const url = new URL(federationFetchEndpoint);
147
+ url.searchParams.set("sub", subordinatedEntityBaseUrl);
148
+ return await appFetch(url.toString(), {
145
149
  method: "GET"
146
150
  }).then((0, _misc.hasStatusOrThrow)(200)).then(res => res.text());
147
151
  }
152
+
153
+ /**
154
+ * Fetch the federation list document from a given endpoint.
155
+ *
156
+ * @param federationListEndpoint The URL of the federation list endpoint.
157
+ * @param appFetch An optional instance of the http client to be used.
158
+ * @returns The federation list as an array of strings.
159
+ * @throws {IoWalletError} If the HTTP request fails or the response cannot be parsed.
160
+ */
161
+ async function getFederationList(federationListEndpoint) {
162
+ let {
163
+ appFetch = fetch
164
+ } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
165
+ return await appFetch(federationListEndpoint, {
166
+ method: "GET"
167
+ }).then((0, _misc.hasStatusOrThrow)(200)).then(res => res.json()).then(json => {
168
+ const result = _types.FederationListResponse.safeParse(json);
169
+ if (!result.success) {
170
+ throw new _errors.IoWalletError(`Invalid federation list format received from Trust Anchor: ${result.error.message}`);
171
+ }
172
+ return result.data;
173
+ });
174
+ }
175
+
176
+ /**
177
+ * Build a not-verified trust chain for a given Relying Party (RP) entity.
178
+ *
179
+ * @param relyingPartyEntityBaseUrl The base URL of the RP entity
180
+ * @param trustAnchorKey The public key of the Trust Anchor (TA) entity
181
+ * @param appFetch An optional instance of the http client to be used.
182
+ * @returns A list of signed tokens that represent the trust chain, in the order of the chain (from the RP to the Trust Anchor)
183
+ * @throws {IoWalletError} When an element of the chain fails to parse
184
+ * The result of this function can be used to validate the trust chain with {@link verifyTrustChain}
185
+ */
186
+ async function buildTrustChain(relyingPartyEntityBaseUrl, trustAnchorKey) {
187
+ let appFetch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : fetch;
188
+ // 1: Recursively gather the trust chain from the RP up to the Trust Anchor
189
+ const trustChain = await gatherTrustChain(relyingPartyEntityBaseUrl, appFetch);
190
+
191
+ // 2: Trust Anchor signature verification
192
+ const trustAnchorJwt = trustChain[trustChain.length - 1];
193
+ if (!trustAnchorJwt) {
194
+ throw new _errors.IoWalletError("Cannot verify trust anchor: missing entity configuration.");
195
+ }
196
+ if (!trustAnchorKey.kid) {
197
+ throw new _errors.IoWalletError("Missing 'kid' in provided Trust Anchor key.");
198
+ }
199
+ await (0, _utils.verify)(trustAnchorJwt, trustAnchorKey.kid, [trustAnchorKey]);
200
+
201
+ // 3: Check the federation list
202
+ const trustAnchorConfig = _types.EntityConfiguration.parse((0, _utils.decode)(trustAnchorJwt));
203
+ const federationListEndpoint = trustAnchorConfig.payload.metadata.federation_entity.federation_list_endpoint;
204
+ if (federationListEndpoint) {
205
+ const federationList = await getFederationList(federationListEndpoint, {
206
+ appFetch
207
+ });
208
+ if (!federationList.includes(relyingPartyEntityBaseUrl)) {
209
+ throw new _errors.IoWalletError("Relying Party entity base URL is not authorized by the Trust Anchor's federation list.");
210
+ }
211
+ }
212
+ return trustChain;
213
+ }
214
+
215
+ /**
216
+ * Recursively gather the trust chain for an entity and all its superiors.
217
+ * @param entityBaseUrl The base URL of the entity for which to gather the chain.
218
+ * @param appFetch An optional instance of the http client to be used.
219
+ * @param isLeaf Whether the current entity is the leaf of the chain.
220
+ * @returns A full ordered list of JWTs (ECs and ESs) forming the trust chain.
221
+ */
222
+ async function gatherTrustChain(entityBaseUrl, appFetch) {
223
+ let isLeaf = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
224
+ const chain = [];
225
+
226
+ // Fetch self-signed EC (only needed for the leaf)
227
+ const entityECJwt = await getSignedEntityConfiguration(entityBaseUrl, {
228
+ appFetch
229
+ });
230
+ const entityEC = _types.EntityConfiguration.parse((0, _utils.decode)(entityECJwt));
231
+ if (isLeaf) {
232
+ // Only push EC for the leaf
233
+ chain.push(entityECJwt);
234
+ }
235
+
236
+ // Find authority_hints (parent, if any)
237
+ const authorityHints = entityEC.payload.authority_hints ?? [];
238
+ if (authorityHints.length === 0) {
239
+ // This is the Trust Anchor (no parent)
240
+ if (!isLeaf) {
241
+ chain.push(entityECJwt);
242
+ }
243
+ return chain;
244
+ }
245
+ const parentEntityBaseUrl = authorityHints[0];
246
+
247
+ // Fetch parent EC
248
+ const parentECJwt = await getSignedEntityConfiguration(parentEntityBaseUrl, {
249
+ appFetch
250
+ });
251
+ const parentEC = _types.EntityConfiguration.parse((0, _utils.decode)(parentECJwt));
252
+
253
+ // Fetch ES
254
+ const federationFetchEndpoint = parentEC.payload.metadata.federation_entity.federation_fetch_endpoint;
255
+ if (!federationFetchEndpoint) {
256
+ throw new _errors.IoWalletError("Missing federation_fetch_endpoint in parent's configuration.");
257
+ }
258
+ const entityStatementJwt = await getSignedEntityStatement(federationFetchEndpoint, entityBaseUrl, {
259
+ appFetch
260
+ });
261
+ // Validate the ES
262
+ _types.EntityStatement.parse((0, _utils.decode)(entityStatementJwt));
263
+
264
+ // Push this ES into the chain
265
+ chain.push(entityStatementJwt);
266
+
267
+ // Recurse into the parent
268
+ const parentChain = await gatherTrustChain(parentEntityBaseUrl, appFetch, false);
269
+ return chain.concat(parentChain);
270
+ }
148
271
  //# sourceMappingURL=index.js.map