@pagopa/io-react-native-wallet 0.15.3 → 0.16.0

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 (92) hide show
  1. package/lib/commonjs/credential/index.js +3 -1
  2. package/lib/commonjs/credential/index.js.map +1 -1
  3. package/lib/commonjs/credential/issuance/04-complete-user-authorization.js +19 -4
  4. package/lib/commonjs/credential/issuance/04-complete-user-authorization.js.map +1 -1
  5. package/lib/commonjs/credential/issuance/05-authorize-access.js +9 -12
  6. package/lib/commonjs/credential/issuance/05-authorize-access.js.map +1 -1
  7. package/lib/commonjs/credential/issuance/06-obtain-credential.js +13 -2
  8. package/lib/commonjs/credential/issuance/06-obtain-credential.js.map +1 -1
  9. package/lib/commonjs/credential/status/01-start-flow.js +2 -0
  10. package/lib/commonjs/credential/status/01-start-flow.js.map +1 -0
  11. package/lib/commonjs/credential/status/02-status-attestation.js +72 -0
  12. package/lib/commonjs/credential/status/02-status-attestation.js.map +1 -0
  13. package/lib/commonjs/credential/status/03-verify-and-parse-status-attestation.js +52 -0
  14. package/lib/commonjs/credential/status/03-verify-and-parse-status-attestation.js.map +1 -0
  15. package/lib/commonjs/credential/status/errors.js +38 -0
  16. package/lib/commonjs/credential/status/errors.js.map +1 -0
  17. package/lib/commonjs/credential/status/index.js +27 -0
  18. package/lib/commonjs/credential/status/index.js.map +1 -0
  19. package/lib/commonjs/credential/status/types.js +48 -0
  20. package/lib/commonjs/credential/status/types.js.map +1 -0
  21. package/lib/commonjs/utils/errors.js +44 -2
  22. package/lib/commonjs/utils/errors.js.map +1 -1
  23. package/lib/commonjs/utils/misc.js +41 -3
  24. package/lib/commonjs/utils/misc.js.map +1 -1
  25. package/lib/commonjs/utils/par.js +1 -1
  26. package/lib/commonjs/utils/par.js.map +1 -1
  27. package/lib/module/credential/index.js +2 -1
  28. package/lib/module/credential/index.js.map +1 -1
  29. package/lib/module/credential/issuance/04-complete-user-authorization.js +21 -6
  30. package/lib/module/credential/issuance/04-complete-user-authorization.js.map +1 -1
  31. package/lib/module/credential/issuance/05-authorize-access.js +9 -12
  32. package/lib/module/credential/issuance/05-authorize-access.js.map +1 -1
  33. package/lib/module/credential/issuance/06-obtain-credential.js +13 -3
  34. package/lib/module/credential/issuance/06-obtain-credential.js.map +1 -1
  35. package/lib/module/credential/status/01-start-flow.js +2 -0
  36. package/lib/module/credential/status/01-start-flow.js.map +1 -0
  37. package/lib/module/credential/status/02-status-attestation.js +64 -0
  38. package/lib/module/credential/status/02-status-attestation.js.map +1 -0
  39. package/lib/module/credential/status/03-verify-and-parse-status-attestation.js +46 -0
  40. package/lib/module/credential/status/03-verify-and-parse-status-attestation.js.map +1 -0
  41. package/lib/module/credential/status/errors.js +30 -0
  42. package/lib/module/credential/status/errors.js.map +1 -0
  43. package/lib/module/credential/status/index.js +5 -0
  44. package/lib/module/credential/status/index.js.map +1 -0
  45. package/lib/module/credential/status/types.js +40 -0
  46. package/lib/module/credential/status/types.js.map +1 -0
  47. package/lib/module/utils/errors.js +40 -1
  48. package/lib/module/utils/errors.js.map +1 -1
  49. package/lib/module/utils/misc.js +38 -3
  50. package/lib/module/utils/misc.js.map +1 -1
  51. package/lib/module/utils/par.js +1 -1
  52. package/lib/module/utils/par.js.map +1 -1
  53. package/lib/typescript/credential/index.d.ts +2 -1
  54. package/lib/typescript/credential/index.d.ts.map +1 -1
  55. package/lib/typescript/credential/issuance/04-complete-user-authorization.d.ts +3 -1
  56. package/lib/typescript/credential/issuance/04-complete-user-authorization.d.ts.map +1 -1
  57. package/lib/typescript/credential/issuance/05-authorize-access.d.ts +2 -1
  58. package/lib/typescript/credential/issuance/05-authorize-access.d.ts.map +1 -1
  59. package/lib/typescript/credential/issuance/06-obtain-credential.d.ts +3 -1
  60. package/lib/typescript/credential/issuance/06-obtain-credential.d.ts.map +1 -1
  61. package/lib/typescript/credential/status/01-start-flow.d.ts +10 -0
  62. package/lib/typescript/credential/status/01-start-flow.d.ts.map +1 -0
  63. package/lib/typescript/credential/status/02-status-attestation.d.ts +20 -0
  64. package/lib/typescript/credential/status/02-status-attestation.d.ts.map +1 -0
  65. package/lib/typescript/credential/status/03-verify-and-parse-status-attestation.d.ts +24 -0
  66. package/lib/typescript/credential/status/03-verify-and-parse-status-attestation.d.ts.map +1 -0
  67. package/lib/typescript/credential/status/errors.d.ts +14 -0
  68. package/lib/typescript/credential/status/errors.d.ts.map +1 -0
  69. package/lib/typescript/credential/status/index.d.ts +7 -0
  70. package/lib/typescript/credential/status/index.d.ts.map +1 -0
  71. package/lib/typescript/credential/status/types.d.ts +305 -0
  72. package/lib/typescript/credential/status/types.d.ts.map +1 -0
  73. package/lib/typescript/utils/errors.d.ts +31 -0
  74. package/lib/typescript/utils/errors.d.ts.map +1 -1
  75. package/lib/typescript/utils/misc.d.ts +18 -1
  76. package/lib/typescript/utils/misc.d.ts.map +1 -1
  77. package/lib/typescript/utils/par.d.ts +1 -4
  78. package/lib/typescript/utils/par.d.ts.map +1 -1
  79. package/package.json +3 -3
  80. package/src/credential/index.ts +2 -1
  81. package/src/credential/issuance/04-complete-user-authorization.ts +36 -6
  82. package/src/credential/issuance/05-authorize-access.ts +13 -15
  83. package/src/credential/issuance/06-obtain-credential.ts +24 -4
  84. package/src/credential/status/01-start-flow.ts +9 -0
  85. package/src/credential/status/02-status-attestation.ts +101 -0
  86. package/src/credential/status/03-verify-and-parse-status-attestation.ts +60 -0
  87. package/src/credential/status/errors.ts +31 -0
  88. package/src/credential/status/index.ts +22 -0
  89. package/src/credential/status/types.ts +43 -0
  90. package/src/utils/errors.ts +46 -1
  91. package/src/utils/misc.ts +45 -4
  92. package/src/utils/par.ts +2 -2
@@ -0,0 +1,305 @@
1
+ import * as z from "zod";
2
+ /**
3
+ * Shape from parsing a status attestation response in case of 201.
4
+ */
5
+ export declare const StatusAttestationResponse: z.ZodObject<{
6
+ status_attestation: z.ZodString;
7
+ }, "strip", z.ZodTypeAny, {
8
+ status_attestation: string;
9
+ }, {
10
+ status_attestation: string;
11
+ }>;
12
+ /**
13
+ * Type from parsing a status attestation response in case of 201.
14
+ * Inferred from {@link StatusAttestationResponse}.
15
+ */
16
+ export type StatusAttestationResponse = z.infer<typeof StatusAttestationResponse>;
17
+ /**
18
+ * Type for a parsed status attestation.
19
+ */
20
+ export type ParsedStatusAttestation = z.infer<typeof ParsedStatusAttestation>;
21
+ /**
22
+ * Shape for parsing a status attestation in a JWT.
23
+ */
24
+ export declare const ParsedStatusAttestation: z.ZodObject<{
25
+ header: z.ZodObject<{
26
+ typ: z.ZodLiteral<"status-attestation+jwt">;
27
+ alg: z.ZodString;
28
+ kid: z.ZodOptional<z.ZodString>;
29
+ }, "strip", z.ZodTypeAny, {
30
+ alg: string;
31
+ typ: "status-attestation+jwt";
32
+ kid?: string | undefined;
33
+ }, {
34
+ alg: string;
35
+ typ: "status-attestation+jwt";
36
+ kid?: string | undefined;
37
+ }>;
38
+ payload: z.ZodObject<{
39
+ credential_hash_alg: z.ZodString;
40
+ credential_hash: z.ZodString;
41
+ cnf: z.ZodObject<{
42
+ jwk: z.ZodObject<{
43
+ alg: z.ZodOptional<z.ZodString>;
44
+ crv: z.ZodOptional<z.ZodString>;
45
+ d: z.ZodOptional<z.ZodString>;
46
+ dp: z.ZodOptional<z.ZodString>;
47
+ dq: z.ZodOptional<z.ZodString>;
48
+ e: z.ZodOptional<z.ZodString>;
49
+ ext: z.ZodOptional<z.ZodBoolean>;
50
+ k: z.ZodOptional<z.ZodString>;
51
+ key_ops: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
52
+ kid: z.ZodOptional<z.ZodString>;
53
+ kty: z.ZodUnion<[z.ZodLiteral<"RSA">, z.ZodLiteral<"EC">]>;
54
+ n: z.ZodOptional<z.ZodString>;
55
+ p: z.ZodOptional<z.ZodString>;
56
+ q: z.ZodOptional<z.ZodString>;
57
+ qi: z.ZodOptional<z.ZodString>;
58
+ use: z.ZodOptional<z.ZodString>;
59
+ x: z.ZodOptional<z.ZodString>;
60
+ y: z.ZodOptional<z.ZodString>;
61
+ x5c: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
62
+ x5t: z.ZodOptional<z.ZodString>;
63
+ "x5t#S256": z.ZodOptional<z.ZodString>;
64
+ x5u: z.ZodOptional<z.ZodString>;
65
+ }, "strip", z.ZodTypeAny, {
66
+ kty: "RSA" | "EC";
67
+ alg?: string | undefined;
68
+ crv?: string | undefined;
69
+ d?: string | undefined;
70
+ dp?: string | undefined;
71
+ dq?: string | undefined;
72
+ e?: string | undefined;
73
+ ext?: boolean | undefined;
74
+ k?: string | undefined;
75
+ key_ops?: string[] | undefined;
76
+ kid?: string | undefined;
77
+ n?: string | undefined;
78
+ p?: string | undefined;
79
+ q?: string | undefined;
80
+ qi?: string | undefined;
81
+ use?: string | undefined;
82
+ x?: string | undefined;
83
+ y?: string | undefined;
84
+ x5c?: string[] | undefined;
85
+ x5t?: string | undefined;
86
+ "x5t#S256"?: string | undefined;
87
+ x5u?: string | undefined;
88
+ }, {
89
+ kty: "RSA" | "EC";
90
+ alg?: string | undefined;
91
+ crv?: string | undefined;
92
+ d?: string | undefined;
93
+ dp?: string | undefined;
94
+ dq?: string | undefined;
95
+ e?: string | undefined;
96
+ ext?: boolean | undefined;
97
+ k?: string | undefined;
98
+ key_ops?: string[] | undefined;
99
+ kid?: string | undefined;
100
+ n?: string | undefined;
101
+ p?: string | undefined;
102
+ q?: string | undefined;
103
+ qi?: string | undefined;
104
+ use?: string | undefined;
105
+ x?: string | undefined;
106
+ y?: string | undefined;
107
+ x5c?: string[] | undefined;
108
+ x5t?: string | undefined;
109
+ "x5t#S256"?: string | undefined;
110
+ x5u?: string | undefined;
111
+ }>;
112
+ }, "strip", z.ZodTypeAny, {
113
+ jwk: {
114
+ kty: "RSA" | "EC";
115
+ alg?: string | undefined;
116
+ crv?: string | undefined;
117
+ d?: string | undefined;
118
+ dp?: string | undefined;
119
+ dq?: string | undefined;
120
+ e?: string | undefined;
121
+ ext?: boolean | undefined;
122
+ k?: string | undefined;
123
+ key_ops?: string[] | undefined;
124
+ kid?: string | undefined;
125
+ n?: string | undefined;
126
+ p?: string | undefined;
127
+ q?: string | undefined;
128
+ qi?: string | undefined;
129
+ use?: string | undefined;
130
+ x?: string | undefined;
131
+ y?: string | undefined;
132
+ x5c?: string[] | undefined;
133
+ x5t?: string | undefined;
134
+ "x5t#S256"?: string | undefined;
135
+ x5u?: string | undefined;
136
+ };
137
+ }, {
138
+ jwk: {
139
+ kty: "RSA" | "EC";
140
+ alg?: string | undefined;
141
+ crv?: string | undefined;
142
+ d?: string | undefined;
143
+ dp?: string | undefined;
144
+ dq?: string | undefined;
145
+ e?: string | undefined;
146
+ ext?: boolean | undefined;
147
+ k?: string | undefined;
148
+ key_ops?: string[] | undefined;
149
+ kid?: string | undefined;
150
+ n?: string | undefined;
151
+ p?: string | undefined;
152
+ q?: string | undefined;
153
+ qi?: string | undefined;
154
+ use?: string | undefined;
155
+ x?: string | undefined;
156
+ y?: string | undefined;
157
+ x5c?: string[] | undefined;
158
+ x5t?: string | undefined;
159
+ "x5t#S256"?: string | undefined;
160
+ x5u?: string | undefined;
161
+ };
162
+ }>;
163
+ exp: z.ZodNumber;
164
+ iat: z.ZodNumber;
165
+ }, "strip", z.ZodTypeAny, {
166
+ iat: number;
167
+ exp: number;
168
+ credential_hash_alg: string;
169
+ cnf: {
170
+ jwk: {
171
+ kty: "RSA" | "EC";
172
+ alg?: string | undefined;
173
+ crv?: string | undefined;
174
+ d?: string | undefined;
175
+ dp?: string | undefined;
176
+ dq?: string | undefined;
177
+ e?: string | undefined;
178
+ ext?: boolean | undefined;
179
+ k?: string | undefined;
180
+ key_ops?: string[] | undefined;
181
+ kid?: string | undefined;
182
+ n?: string | undefined;
183
+ p?: string | undefined;
184
+ q?: string | undefined;
185
+ qi?: string | undefined;
186
+ use?: string | undefined;
187
+ x?: string | undefined;
188
+ y?: string | undefined;
189
+ x5c?: string[] | undefined;
190
+ x5t?: string | undefined;
191
+ "x5t#S256"?: string | undefined;
192
+ x5u?: string | undefined;
193
+ };
194
+ };
195
+ credential_hash: string;
196
+ }, {
197
+ iat: number;
198
+ exp: number;
199
+ credential_hash_alg: string;
200
+ cnf: {
201
+ jwk: {
202
+ kty: "RSA" | "EC";
203
+ alg?: string | undefined;
204
+ crv?: string | undefined;
205
+ d?: string | undefined;
206
+ dp?: string | undefined;
207
+ dq?: string | undefined;
208
+ e?: string | undefined;
209
+ ext?: boolean | undefined;
210
+ k?: string | undefined;
211
+ key_ops?: string[] | undefined;
212
+ kid?: string | undefined;
213
+ n?: string | undefined;
214
+ p?: string | undefined;
215
+ q?: string | undefined;
216
+ qi?: string | undefined;
217
+ use?: string | undefined;
218
+ x?: string | undefined;
219
+ y?: string | undefined;
220
+ x5c?: string[] | undefined;
221
+ x5t?: string | undefined;
222
+ "x5t#S256"?: string | undefined;
223
+ x5u?: string | undefined;
224
+ };
225
+ };
226
+ credential_hash: string;
227
+ }>;
228
+ }, "strip", z.ZodTypeAny, {
229
+ header: {
230
+ alg: string;
231
+ typ: "status-attestation+jwt";
232
+ kid?: string | undefined;
233
+ };
234
+ payload: {
235
+ iat: number;
236
+ exp: number;
237
+ credential_hash_alg: string;
238
+ cnf: {
239
+ jwk: {
240
+ kty: "RSA" | "EC";
241
+ alg?: string | undefined;
242
+ crv?: string | undefined;
243
+ d?: string | undefined;
244
+ dp?: string | undefined;
245
+ dq?: string | undefined;
246
+ e?: string | undefined;
247
+ ext?: boolean | undefined;
248
+ k?: string | undefined;
249
+ key_ops?: string[] | undefined;
250
+ kid?: string | undefined;
251
+ n?: string | undefined;
252
+ p?: string | undefined;
253
+ q?: string | undefined;
254
+ qi?: string | undefined;
255
+ use?: string | undefined;
256
+ x?: string | undefined;
257
+ y?: string | undefined;
258
+ x5c?: string[] | undefined;
259
+ x5t?: string | undefined;
260
+ "x5t#S256"?: string | undefined;
261
+ x5u?: string | undefined;
262
+ };
263
+ };
264
+ credential_hash: string;
265
+ };
266
+ }, {
267
+ header: {
268
+ alg: string;
269
+ typ: "status-attestation+jwt";
270
+ kid?: string | undefined;
271
+ };
272
+ payload: {
273
+ iat: number;
274
+ exp: number;
275
+ credential_hash_alg: string;
276
+ cnf: {
277
+ jwk: {
278
+ kty: "RSA" | "EC";
279
+ alg?: string | undefined;
280
+ crv?: string | undefined;
281
+ d?: string | undefined;
282
+ dp?: string | undefined;
283
+ dq?: string | undefined;
284
+ e?: string | undefined;
285
+ ext?: boolean | undefined;
286
+ k?: string | undefined;
287
+ key_ops?: string[] | undefined;
288
+ kid?: string | undefined;
289
+ n?: string | undefined;
290
+ p?: string | undefined;
291
+ q?: string | undefined;
292
+ qi?: string | undefined;
293
+ use?: string | undefined;
294
+ x?: string | undefined;
295
+ y?: string | undefined;
296
+ x5c?: string[] | undefined;
297
+ x5t?: string | undefined;
298
+ "x5t#S256"?: string | undefined;
299
+ x5u?: string | undefined;
300
+ };
301
+ };
302
+ credential_hash: string;
303
+ };
304
+ }>;
305
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/credential/status/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;;;EAEpC,CAAC;AAEH;;;GAGG;AACH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAC7C,OAAO,yBAAyB,CACjC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE9E;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAelC,CAAC"}
@@ -1,3 +1,14 @@
1
+ /**
2
+ * utility to format a set of attributes into an error message string
3
+ *
4
+ * @example
5
+ * // returns "foo=value bar=(list, item)"
6
+ * serializeAttrs({ foo: "value", bar: ["list", "item"] })
7
+ *
8
+ * @param attrs A key value record set
9
+ * @returns a human-readable serialization of the set
10
+ */
11
+ export declare const serializeAttrs: (attrs: Record<string, string | string>) => string;
1
12
  /**
2
13
  * A generic Error that all other io-wallet specific Error subclasses extend.
3
14
  *
@@ -16,6 +27,16 @@ export declare class IoWalletError extends Error {
16
27
  code: string;
17
28
  constructor(message?: string);
18
29
  }
30
+ /**
31
+ * An error subclass thrown when a Wallet Provider http request has a status code different from the one expected.
32
+ */
33
+ export declare class UnexpectedStatusCodeError extends IoWalletError {
34
+ static get code(): "ERR_UNEXPECTED_STATUS_CODE";
35
+ code: string;
36
+ /** HTTP status code */
37
+ statusCode: number;
38
+ constructor(message: string, statusCode: number);
39
+ }
19
40
  /**
20
41
  * An error subclass thrown when validation fail
21
42
  *
@@ -157,4 +178,14 @@ export declare class AuthorizationIdpError extends IoWalletError {
157
178
  errorDescription?: string;
158
179
  constructor(error: string, errorDescription?: string);
159
180
  }
181
+ /**
182
+ * Error subclass thrown when an operation has been aborted.
183
+ */
184
+ export declare class OperationAbortedError extends IoWalletError {
185
+ static get code(): "ERR_IO_WALLET_OPERATION_ABORTED";
186
+ code: string;
187
+ /** The aborted operation */
188
+ operation: string;
189
+ constructor(operation: string);
190
+ }
160
191
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/utils/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/utils/errors.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Check if a response is in the expected status, other
3
- * @param status The expected status
3
+ * @param status - The expected status
4
+ * @throws {@link UnexpectedStatusCodeError} if the status is different from the one expected
4
5
  * @returns The given response object
5
6
  */
6
7
  export declare const hasStatus: (status: number) => (res: Response) => Promise<Response>;
@@ -23,4 +24,20 @@ export declare const generateRandomAlphaNumericString: (size: number) => string;
23
24
  * @returns A promise that resolves once the conditionFunction returns true or rejects if timed out.
24
25
  */
25
26
  export declare const until: (conditionFunction: () => boolean, timeoutSeconds?: number) => Promise<void>;
27
+ /**
28
+ * Get the hash of a credential without discloures.
29
+ * A credential is a string like `header.body.sign~sd1~sd2....` where `~` is the separator between the credential and the discloures.
30
+ * @param credential - The credential to hash
31
+ * @returns The hash of the credential without discloures
32
+ */
33
+ export declare const getCredentialHashWithouDiscloures: (credential: string) => Promise<string>;
34
+ /**
35
+ * Creates a promise that waits until the provided signal is aborted.
36
+ * @returns {Object} An object with `listen` and `remove` methods to handle subscribing and unsubscribing.
37
+ */
38
+ export declare const createAbortPromiseFromSignal: (signal: AbortSignal) => {
39
+ listen: () => Promise<"OPERATION_ABORTED">;
40
+ remove: () => void;
41
+ };
42
+ export declare const isDefined: <T>(x: "" | T | null | undefined) => x is T;
26
43
  //# sourceMappingURL=misc.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"misc.d.ts","sourceRoot":"","sources":["../../../src/utils/misc.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,SAAS,WACX,MAAM,WACH,QAAQ,KAAG,QAAQ,QAAQ,CAStC,CAAC;AAIJ,MAAM,MAAM,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,GAC7D,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,GACvB,EAAE,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAClC,UAAU,CAAC,EAAE,CAAC,GACd,KAAK,CAAC;AAEV;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,SAAU,MAAM,WAGjD,CAAC;AAEb;;;;;;;;;;GAUG;AACH,eAAO,MAAM,KAAK,sBACG,MAAM,OAAO,mBACf,MAAM,KACtB,QAAQ,IAAI,CAiBX,CAAC"}
1
+ {"version":3,"file":"misc.d.ts","sourceRoot":"","sources":["../../../src/utils/misc.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,eAAO,MAAM,SAAS,WACX,MAAM,WACH,QAAQ,KAAG,QAAQ,QAAQ,CAUtC,CAAC;AAIJ,MAAM,MAAM,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,GAC7D,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,GACvB,EAAE,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAClC,UAAU,CAAC,EAAE,CAAC,GACd,KAAK,CAAC;AAEV;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,SAAU,MAAM,WAGjD,CAAC;AAEb;;;;;;;;;;GAUG;AACH,eAAO,MAAM,KAAK,sBACG,MAAM,OAAO,mBACf,MAAM,KACtB,QAAQ,IAAI,CAiBX,CAAC;AAEL;;;;;GAKG;AACH,eAAO,MAAM,iCAAiC,eAChC,MAAM,KACjB,QAAQ,MAAM,CAMhB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,4BAA4B,WAAY,WAAW;;;CAa/D,CAAC;AAEF,eAAO,MAAM,SAAS,6CACV,CAAC"}
@@ -33,10 +33,7 @@ export declare const AuthorizationDetails: z.ZodArray<z.ZodObject<{
33
33
  */
34
34
  export declare const makeParRequest: ({ wiaCryptoContext, appFetch, }: {
35
35
  wiaCryptoContext: CryptoContext;
36
- appFetch?: {
37
- (input: RequestInfo, init?: RequestInit | undefined): Promise<Response>;
38
- (input: RequestInfo, init?: RequestInit | undefined): Promise<Response>;
39
- } | undefined;
36
+ appFetch: GlobalFetch["fetch"];
40
37
  }) => (clientId: string, codeVerifier: string, redirectUri: string, responseMode: string, parEndpoint: string, walletInstanceAttestation: string, authorizationDetails: {
41
38
  type: "openid_credential";
42
39
  format: "vc+sd-jwt" | "vc+mdoc-cbor";
@@ -1 +1 @@
1
- {"version":3,"file":"par.d.ts","sourceRoot":"","sources":["../../../src/utils/par.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EAEnB,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAKzB,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACtE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;EAI9B,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACxE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;WAA+B,CAAC;AAEjE;;GAEG;AACH,eAAO,MAAM,cAAc;sBAKL,aAAa;;;;;iBAIrB,MAAM,gBACF,MAAM,eACP,MAAM,gBACL,MAAM,eACP,MAAM,6BACQ,MAAM;;;;oBAElB,MAAM,KACpB,QAAQ,MAAM,CAyEhB,CAAC"}
1
+ {"version":3,"file":"par.d.ts","sourceRoot":"","sources":["../../../src/utils/par.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EAEnB,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAKzB,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACtE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;EAI9B,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACxE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;WAA+B,CAAC;AAEjE;;GAEG;AACH,eAAO,MAAM,cAAc;sBAKL,aAAa;cACrB,WAAW,CAAC,OAAO,CAAC;iBAGpB,MAAM,gBACF,MAAM,eACP,MAAM,gBACL,MAAM,eACP,MAAM,6BACQ,MAAM;;;;oBAElB,MAAM,KACpB,QAAQ,MAAM,CAyEhB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pagopa/io-react-native-wallet",
3
- "version": "0.15.3",
3
+ "version": "0.16.0",
4
4
  "description": "Provide data structures, helpers and API for IO Wallet",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -28,13 +28,13 @@
28
28
  ],
29
29
  "scripts": {
30
30
  "test": "jest",
31
- "typecheck": "tsc --noEmit",
31
+ "tsc": "tsc --noEmit",
32
32
  "lint": "eslint \"src/**\" \"example/src/**\" \"__mocks__/**\"",
33
33
  "prepack": "bob build",
34
34
  "release": "release-it",
35
35
  "example": "yarn --cwd example",
36
36
  "bootstrap": "yarn example && yarn install",
37
- "code-review": "yarn generate && yarn lint && yarn typecheck && yarn test",
37
+ "code-review": "yarn generate && yarn lint && yarn tsc && yarn test",
38
38
  "generate-wallet-provider-client": "typed-openapi openapi/wallet-provider.yaml -o src/client/generated/wallet-provider.ts -r zod",
39
39
  "generate": "yarn generate-wallet-provider-client"
40
40
  },
@@ -1,4 +1,5 @@
1
1
  import * as Issuance from "./issuance";
2
2
  import * as Presentation from "./presentation";
3
+ import * as Status from "./status";
3
4
 
4
- export { Issuance, Presentation };
5
+ export { Issuance, Presentation, Status };
@@ -4,12 +4,19 @@ import {
4
4
  type AuthorizationContext,
5
5
  type AuthorizationResult,
6
6
  } from "../../utils/auth";
7
- import { hasStatus, until, type Out } from "../../utils/misc";
7
+ import {
8
+ createAbortPromiseFromSignal,
9
+ hasStatus,
10
+ isDefined,
11
+ until,
12
+ type Out,
13
+ } from "../../utils/misc";
8
14
  import type { StartUserAuthorization } from "./03-start-user-authorization";
9
15
  import parseUrl from "parse-url";
10
16
  import {
11
17
  AuthorizationError,
12
18
  AuthorizationIdpError,
19
+ OperationAbortedError,
13
20
  ValidationFailed,
14
21
  } from "../../utils/errors";
15
22
  import type { EvaluateIssuerTrust } from "./02-evaluate-issuer-trust";
@@ -34,7 +41,8 @@ export type CompleteUserAuthorizationWithQueryMode = (
34
41
  issuerConf: Out<EvaluateIssuerTrust>["issuerConf"],
35
42
  idpHint: string,
36
43
  redirectUri: string,
37
- authorizationContext?: AuthorizationContext
44
+ authorizationContext?: AuthorizationContext,
45
+ signal?: AbortSignal
38
46
  ) => Promise<AuthorizationResult>;
39
47
 
40
48
  export type CompleteUserAuthorizationWithFormPostJwtMode = (
@@ -68,8 +76,10 @@ export type GetRequestedCredentialToBePresented = (
68
76
  * If not specified, the default browser is used
69
77
  * @param idphint Unique identifier of the SPID IDP selected by the user
70
78
  * @param redirectUri The url to reach to complete the user authorization which is the custom URL scheme that the Wallet Instance is registered to handle, usually a custom URL or deeplink
79
+ * @param signal An optional {@link AbortSignal} to abort the operation when using the default browser
71
80
  * @throws {AuthorizationError} if an error occurs during the authorization process
72
81
  * @throws {AuthorizationIdpError} if an error occurs during the authorization process and the error is related to the IDP
82
+ * @throws {OperationAbortedError} if the caller aborts the operation via the provided signal
73
83
  * @returns the authorization response which contains code, state and iss
74
84
  */
75
85
  export const completeUserAuthorizationWithQueryMode: CompleteUserAuthorizationWithQueryMode =
@@ -79,7 +89,8 @@ export const completeUserAuthorizationWithQueryMode: CompleteUserAuthorizationWi
79
89
  issuerConf,
80
90
  idpHint,
81
91
  redirectUri,
82
- authorizationContext
92
+ authorizationContext,
93
+ signal
83
94
  ) => {
84
95
  const authzRequestEndpoint =
85
96
  issuerConf.oauth_authorization_server.authorization_endpoint;
@@ -100,13 +111,16 @@ export const completeUserAuthorizationWithQueryMode: CompleteUserAuthorizationWi
100
111
  });
101
112
  } else {
102
113
  // handler for redirectUri
103
- Linking.addEventListener("url", ({ url }) => {
114
+ const urlEventListener = Linking.addEventListener("url", ({ url }) => {
104
115
  if (url.includes(redirectUri)) {
105
116
  authRedirectUrl = url;
106
117
  }
107
118
  });
108
119
 
109
- const openAuthUrlInBrowser = Linking.openURL(authUrl);
120
+ const operationIsAborted = signal
121
+ ? createAbortPromiseFromSignal(signal)
122
+ : undefined;
123
+ await Linking.openURL(authUrl);
110
124
 
111
125
  /*
112
126
  * Waits for 120 seconds for the identificationRedirectUrl variable to be set
@@ -117,7 +131,23 @@ export const completeUserAuthorizationWithQueryMode: CompleteUserAuthorizationWi
117
131
  120
118
132
  );
119
133
 
120
- await Promise.all([openAuthUrlInBrowser, unitAuthRedirectIsNotUndefined]);
134
+ /**
135
+ * Simultaneously listen for the abort signal (when provided) and the redirect url.
136
+ * The first event that occurs will resolve the promise.
137
+ * This is useful to properly cleanup when the caller aborts this operation.
138
+ */
139
+ const winner = await Promise.race(
140
+ [operationIsAborted?.listen(), unitAuthRedirectIsNotUndefined].filter(
141
+ isDefined
142
+ )
143
+ ).finally(() => {
144
+ urlEventListener.remove();
145
+ operationIsAborted?.remove();
146
+ });
147
+
148
+ if (winner === "OPERATION_ABORTED") {
149
+ throw new OperationAbortedError("DefaultQueryModeAuthorization");
150
+ }
121
151
 
122
152
  if (authRedirectUrl === undefined) {
123
153
  throw new AuthorizationError("Invalid authentication redirect url");
@@ -1,7 +1,6 @@
1
1
  import { hasStatus, type Out } from "../../utils/misc";
2
2
  import type { EvaluateIssuerTrust } from "./02-evaluate-issuer-trust";
3
3
  import type { StartUserAuthorization } from "./03-start-user-authorization";
4
- import { withEphemeralKey } from "../../utils/crypto";
5
4
  import { createDPopToken } from "../../utils/dpop";
6
5
  import uuid from "react-native-uuid";
7
6
  import { createPopToken } from "../../utils/pop";
@@ -22,8 +21,9 @@ export type AuthorizeAccess = (
22
21
  walletInstanceAttestation: string;
23
22
  appFetch?: GlobalFetch["fetch"];
24
23
  wiaCryptoContext: CryptoContext;
24
+ dPopCryptoContext: CryptoContext;
25
25
  }
26
- ) => Promise<{ accessToken: TokenResponse; tokenRequestSignedDPop: string }>;
26
+ ) => Promise<{ accessToken: TokenResponse }>;
27
27
 
28
28
  /**
29
29
  * Creates and sends the DPoP Proof JWT to be presented with the authorization code to the /token endpoint of the authorization server
@@ -37,6 +37,7 @@ export type AuthorizeAccess = (
37
37
  * @param codeVerifier The code verifier returned by {@link startUserAuthorization}
38
38
  * @param context.walletInstanceAttestation The Wallet Instance's attestation
39
39
  * @param context.wiaCryptoContext The Wallet Instance's crypto context
40
+ * @param context.dPopCryptoContext The DPoP crypto context
40
41
  * @param context.appFetch (optional) fetch api implementation. Default: built-in fetch
41
42
  * @throws {ValidationFailed} if an error occurs while parsing the token response
42
43
  * @return The token response containing the access token along with the token request signed with DPoP which has to be used in the {@link obtainCredential} step.
@@ -53,6 +54,7 @@ export const authorizeAccess: AuthorizeAccess = async (
53
54
  appFetch = fetch,
54
55
  walletInstanceAttestation,
55
56
  wiaCryptoContext,
57
+ dPopCryptoContext,
56
58
  } = context;
57
59
 
58
60
  const parEndpoint =
@@ -63,18 +65,14 @@ export const authorizeAccess: AuthorizeAccess = async (
63
65
  .payload.cnf.jwk.kid;
64
66
 
65
67
  const tokenUrl = issuerConf.oauth_authorization_server.token_endpoint;
66
- // Use an ephemeral key to be destroyed after use
67
- const tokenRequestSignedDPop = await withEphemeralKey(
68
- async (ephimeralContext) => {
69
- return await createDPopToken(
70
- {
71
- htm: "POST",
72
- htu: tokenUrl,
73
- jti: `${uuid.v4()}`,
74
- },
75
- ephimeralContext
76
- );
77
- }
68
+
69
+ const tokenRequestSignedDPop = await createDPopToken(
70
+ {
71
+ htm: "POST",
72
+ htu: tokenUrl,
73
+ jti: `${uuid.v4()}`,
74
+ },
75
+ dPopCryptoContext
78
76
  );
79
77
 
80
78
  const signedWiaPoP = await createPopToken(
@@ -113,5 +111,5 @@ export const authorizeAccess: AuthorizeAccess = async (
113
111
  throw new ValidationFailed(tokenRes.error.message);
114
112
  }
115
113
 
116
- return { accessToken: tokenRes.data, tokenRequestSignedDPop };
114
+ return { accessToken: tokenRes.data };
117
115
  };