@pagopa/io-react-native-wallet 0.24.0 → 0.25.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (192) hide show
  1. package/lib/commonjs/client/generated/wallet-provider.js +39 -16
  2. package/lib/commonjs/client/generated/wallet-provider.js.map +1 -1
  3. package/lib/commonjs/client/index.js +25 -10
  4. package/lib/commonjs/client/index.js.map +1 -1
  5. package/lib/commonjs/credential/issuance/03-start-user-authorization.js +1 -1
  6. package/lib/commonjs/credential/issuance/04-complete-user-authorization.js +21 -14
  7. package/lib/commonjs/credential/issuance/04-complete-user-authorization.js.map +1 -1
  8. package/lib/commonjs/credential/issuance/05-authorize-access.js +5 -2
  9. package/lib/commonjs/credential/issuance/05-authorize-access.js.map +1 -1
  10. package/lib/commonjs/credential/issuance/06-obtain-credential.js +26 -17
  11. package/lib/commonjs/credential/issuance/06-obtain-credential.js.map +1 -1
  12. package/lib/commonjs/credential/issuance/README.md +8 -14
  13. package/lib/commonjs/credential/issuance/errors.js +52 -0
  14. package/lib/commonjs/credential/issuance/errors.js.map +1 -0
  15. package/lib/commonjs/credential/issuance/index.js +7 -2
  16. package/lib/commonjs/credential/issuance/index.js.map +1 -1
  17. package/lib/commonjs/credential/issuance/types.js +1 -5
  18. package/lib/commonjs/credential/issuance/types.js.map +1 -1
  19. package/lib/commonjs/credential/presentation/01-start-flow.js +1 -1
  20. package/lib/commonjs/credential/presentation/01-start-flow.js.map +1 -1
  21. package/lib/commonjs/credential/presentation/03-get-request-object.js +2 -2
  22. package/lib/commonjs/credential/presentation/03-get-request-object.js.map +1 -1
  23. package/lib/commonjs/credential/presentation/04-send-authorization-response.js +2 -2
  24. package/lib/commonjs/credential/presentation/04-send-authorization-response.js.map +1 -1
  25. package/lib/commonjs/credential/presentation/errors.js +49 -0
  26. package/lib/commonjs/credential/presentation/errors.js.map +1 -0
  27. package/lib/commonjs/credential/presentation/index.js +5 -0
  28. package/lib/commonjs/credential/presentation/index.js.map +1 -1
  29. package/lib/commonjs/credential/status/02-status-attestation.js +8 -6
  30. package/lib/commonjs/credential/status/02-status-attestation.js.map +1 -1
  31. package/lib/commonjs/credential/status/README.md +5 -2
  32. package/lib/commonjs/credential/status/types.js +1 -14
  33. package/lib/commonjs/credential/status/types.js.map +1 -1
  34. package/lib/commonjs/credential/trustmark/get-credential-trustmark.js +14 -5
  35. package/lib/commonjs/credential/trustmark/get-credential-trustmark.js.map +1 -1
  36. package/lib/commonjs/sd-jwt/errors.js +40 -0
  37. package/lib/commonjs/sd-jwt/errors.js.map +1 -0
  38. package/lib/commonjs/sd-jwt/index.js +8 -4
  39. package/lib/commonjs/sd-jwt/index.js.map +1 -1
  40. package/lib/commonjs/sd-jwt/verifier.js +5 -1
  41. package/lib/commonjs/sd-jwt/verifier.js.map +1 -1
  42. package/lib/commonjs/trust/index.js +2 -2
  43. package/lib/commonjs/trust/index.js.map +1 -1
  44. package/lib/commonjs/utils/decoder.js +3 -1
  45. package/lib/commonjs/utils/decoder.js.map +1 -1
  46. package/lib/commonjs/utils/error-codes.js +51 -0
  47. package/lib/commonjs/utils/error-codes.js.map +1 -0
  48. package/lib/commonjs/utils/errors.js +119 -463
  49. package/lib/commonjs/utils/errors.js.map +1 -1
  50. package/lib/commonjs/utils/misc.js +21 -14
  51. package/lib/commonjs/utils/misc.js.map +1 -1
  52. package/lib/commonjs/utils/par.js +2 -1
  53. package/lib/commonjs/utils/par.js.map +1 -1
  54. package/lib/commonjs/wallet-instance/README.md +26 -5
  55. package/lib/commonjs/wallet-instance/index.js +33 -7
  56. package/lib/commonjs/wallet-instance/index.js.map +1 -1
  57. package/lib/commonjs/wallet-instance-attestation/README.md +8 -2
  58. package/lib/commonjs/wallet-instance-attestation/issuing.js +13 -10
  59. package/lib/commonjs/wallet-instance-attestation/issuing.js.map +1 -1
  60. package/lib/module/client/generated/wallet-provider.js +31 -11
  61. package/lib/module/client/generated/wallet-provider.js.map +1 -1
  62. package/lib/module/client/index.js +22 -8
  63. package/lib/module/client/index.js.map +1 -1
  64. package/lib/module/credential/issuance/03-start-user-authorization.js +1 -1
  65. package/lib/module/credential/issuance/04-complete-user-authorization.js +16 -9
  66. package/lib/module/credential/issuance/04-complete-user-authorization.js.map +1 -1
  67. package/lib/module/credential/issuance/05-authorize-access.js +7 -4
  68. package/lib/module/credential/issuance/05-authorize-access.js.map +1 -1
  69. package/lib/module/credential/issuance/06-obtain-credential.js +29 -20
  70. package/lib/module/credential/issuance/06-obtain-credential.js.map +1 -1
  71. package/lib/module/credential/issuance/README.md +8 -14
  72. package/lib/module/credential/issuance/errors.js +44 -0
  73. package/lib/module/credential/issuance/errors.js.map +1 -0
  74. package/lib/module/credential/issuance/index.js +3 -2
  75. package/lib/module/credential/issuance/index.js.map +1 -1
  76. package/lib/module/credential/issuance/types.js +0 -3
  77. package/lib/module/credential/issuance/types.js.map +1 -1
  78. package/lib/module/credential/presentation/01-start-flow.js +1 -1
  79. package/lib/module/credential/presentation/01-start-flow.js.map +1 -1
  80. package/lib/module/credential/presentation/03-get-request-object.js +3 -3
  81. package/lib/module/credential/presentation/03-get-request-object.js.map +1 -1
  82. package/lib/module/credential/presentation/04-send-authorization-response.js +3 -3
  83. package/lib/module/credential/presentation/04-send-authorization-response.js.map +1 -1
  84. package/lib/module/credential/presentation/errors.js +42 -0
  85. package/lib/module/credential/presentation/errors.js.map +1 -0
  86. package/lib/module/credential/presentation/index.js +2 -1
  87. package/lib/module/credential/presentation/index.js.map +1 -1
  88. package/lib/module/credential/status/02-status-attestation.js +11 -9
  89. package/lib/module/credential/status/02-status-attestation.js.map +1 -1
  90. package/lib/module/credential/status/README.md +5 -2
  91. package/lib/module/credential/status/types.js +0 -12
  92. package/lib/module/credential/status/types.js.map +1 -1
  93. package/lib/module/credential/trustmark/get-credential-trustmark.js +14 -5
  94. package/lib/module/credential/trustmark/get-credential-trustmark.js.map +1 -1
  95. package/lib/module/sd-jwt/errors.js +32 -0
  96. package/lib/module/sd-jwt/errors.js.map +1 -0
  97. package/lib/module/sd-jwt/index.js +5 -5
  98. package/lib/module/sd-jwt/index.js.map +1 -1
  99. package/lib/module/sd-jwt/verifier.js +5 -1
  100. package/lib/module/sd-jwt/verifier.js.map +1 -1
  101. package/lib/module/trust/index.js +3 -3
  102. package/lib/module/trust/index.js.map +1 -1
  103. package/lib/module/utils/decoder.js +3 -1
  104. package/lib/module/utils/decoder.js.map +1 -1
  105. package/lib/module/utils/error-codes.js +43 -0
  106. package/lib/module/utils/error-codes.js.map +1 -0
  107. package/lib/module/utils/errors.js +98 -438
  108. package/lib/module/utils/errors.js.map +1 -1
  109. package/lib/module/utils/misc.js +18 -11
  110. package/lib/module/utils/misc.js.map +1 -1
  111. package/lib/module/utils/par.js +3 -2
  112. package/lib/module/utils/par.js.map +1 -1
  113. package/lib/module/wallet-instance/README.md +26 -5
  114. package/lib/module/wallet-instance/index.js +32 -7
  115. package/lib/module/wallet-instance/index.js.map +1 -1
  116. package/lib/module/wallet-instance-attestation/README.md +8 -2
  117. package/lib/module/wallet-instance-attestation/issuing.js +15 -12
  118. package/lib/module/wallet-instance-attestation/issuing.js.map +1 -1
  119. package/lib/typescript/client/generated/wallet-provider.d.ts +138 -27
  120. package/lib/typescript/client/generated/wallet-provider.d.ts.map +1 -1
  121. package/lib/typescript/client/index.d.ts +7 -1
  122. package/lib/typescript/client/index.d.ts.map +1 -1
  123. package/lib/typescript/credential/issuance/03-start-user-authorization.d.ts +1 -1
  124. package/lib/typescript/credential/issuance/04-complete-user-authorization.d.ts +1 -1
  125. package/lib/typescript/credential/issuance/04-complete-user-authorization.d.ts.map +1 -1
  126. package/lib/typescript/credential/issuance/05-authorize-access.d.ts.map +1 -1
  127. package/lib/typescript/credential/issuance/06-obtain-credential.d.ts.map +1 -1
  128. package/lib/typescript/credential/issuance/errors.d.ts +28 -0
  129. package/lib/typescript/credential/issuance/errors.d.ts.map +1 -0
  130. package/lib/typescript/credential/issuance/index.d.ts +3 -2
  131. package/lib/typescript/credential/issuance/index.d.ts.map +1 -1
  132. package/lib/typescript/credential/issuance/types.d.ts +0 -8
  133. package/lib/typescript/credential/issuance/types.d.ts.map +1 -1
  134. package/lib/typescript/credential/presentation/03-get-request-object.d.ts.map +1 -1
  135. package/lib/typescript/credential/presentation/04-send-authorization-response.d.ts.map +1 -1
  136. package/lib/typescript/credential/presentation/errors.d.ts +25 -0
  137. package/lib/typescript/credential/presentation/errors.d.ts.map +1 -0
  138. package/lib/typescript/credential/presentation/index.d.ts +2 -1
  139. package/lib/typescript/credential/presentation/index.d.ts.map +1 -1
  140. package/lib/typescript/credential/status/02-status-attestation.d.ts.map +1 -1
  141. package/lib/typescript/credential/status/types.d.ts +0 -15
  142. package/lib/typescript/credential/status/types.d.ts.map +1 -1
  143. package/lib/typescript/credential/trustmark/get-credential-trustmark.d.ts +4 -2
  144. package/lib/typescript/credential/trustmark/get-credential-trustmark.d.ts.map +1 -1
  145. package/lib/typescript/sd-jwt/errors.d.ts +20 -0
  146. package/lib/typescript/sd-jwt/errors.d.ts.map +1 -0
  147. package/lib/typescript/sd-jwt/index.d.ts +3 -2
  148. package/lib/typescript/sd-jwt/index.d.ts.map +1 -1
  149. package/lib/typescript/utils/error-codes.d.ts +45 -0
  150. package/lib/typescript/utils/error-codes.d.ts.map +1 -0
  151. package/lib/typescript/utils/errors.d.ts +88 -225
  152. package/lib/typescript/utils/errors.d.ts.map +1 -1
  153. package/lib/typescript/utils/misc.d.ts +9 -4
  154. package/lib/typescript/utils/misc.d.ts.map +1 -1
  155. package/lib/typescript/utils/par.d.ts.map +1 -1
  156. package/lib/typescript/wallet-instance/index.d.ts +17 -1
  157. package/lib/typescript/wallet-instance/index.d.ts.map +1 -1
  158. package/lib/typescript/wallet-instance-attestation/issuing.d.ts.map +1 -1
  159. package/lib/typescript/wallet-instance-attestation/types.d.ts +4 -4
  160. package/package.json +1 -1
  161. package/src/client/generated/wallet-provider.ts +43 -13
  162. package/src/client/index.ts +28 -15
  163. package/src/credential/issuance/03-start-user-authorization.ts +1 -1
  164. package/src/credential/issuance/04-complete-user-authorization.ts +21 -21
  165. package/src/credential/issuance/05-authorize-access.ts +7 -4
  166. package/src/credential/issuance/06-obtain-credential.ts +39 -39
  167. package/src/credential/issuance/README.md +8 -14
  168. package/src/credential/issuance/errors.ts +44 -0
  169. package/src/credential/issuance/index.ts +4 -2
  170. package/src/credential/issuance/types.ts +0 -8
  171. package/src/credential/presentation/01-start-flow.ts +1 -1
  172. package/src/credential/presentation/03-get-request-object.ts +3 -3
  173. package/src/credential/presentation/04-send-authorization-response.ts +3 -3
  174. package/src/credential/presentation/errors.ts +41 -0
  175. package/src/credential/presentation/index.ts +2 -0
  176. package/src/credential/status/02-status-attestation.ts +17 -25
  177. package/src/credential/status/README.md +5 -2
  178. package/src/credential/status/types.ts +0 -15
  179. package/src/credential/trustmark/get-credential-trustmark.ts +13 -4
  180. package/src/sd-jwt/errors.ts +39 -0
  181. package/src/sd-jwt/index.ts +5 -8
  182. package/src/sd-jwt/verifier.ts +5 -5
  183. package/src/trust/index.ts +3 -3
  184. package/src/utils/decoder.ts +3 -3
  185. package/src/utils/error-codes.ts +50 -0
  186. package/src/utils/errors.ts +152 -476
  187. package/src/utils/misc.ts +20 -17
  188. package/src/utils/par.ts +3 -2
  189. package/src/wallet-instance/README.md +26 -5
  190. package/src/wallet-instance/index.ts +40 -18
  191. package/src/wallet-instance-attestation/README.md +8 -2
  192. package/src/wallet-instance-attestation/issuing.ts +28 -36
package/src/utils/misc.ts CHANGED
@@ -2,21 +2,22 @@ import { IoWalletError, UnexpectedStatusCodeError } from "./errors";
2
2
  import { sha256 } from "js-sha256";
3
3
 
4
4
  /**
5
- * Check if a response is in the expected status, other
5
+ * Check if a response is in the expected status, otherwise throw an error
6
6
  * @param status - The expected status
7
- * @throws {@link UnexpectedStatusCodeError} if the status is different from the one expected
7
+ * @param customError - A custom error compatible with {@link UnexpectedStatusCodeError}
8
+ * @throws UnexpectedStatusCodeError if the status is different from the one expected
8
9
  * @returns The given response object
9
10
  */
10
- export const hasStatus =
11
- (status: number) =>
11
+ export const hasStatusOrThrow =
12
+ (status: number, customError?: typeof UnexpectedStatusCodeError) =>
12
13
  async (res: Response): Promise<Response> => {
13
14
  if (res.status !== status) {
14
- const responseBody = await res.text();
15
- throw new UnexpectedStatusCodeError(
16
- `Http request failed. Expected ${status}, got ${res.status}, url: ${res.url} with response: ${responseBody}`,
17
- res.status,
18
- responseBody
19
- );
15
+ const ErrorClass = customError ?? UnexpectedStatusCodeError;
16
+ throw new ErrorClass({
17
+ message: `Http request failed. Expected ${status}, got ${res.status}, url: ${res.url}`,
18
+ statusCode: res.status,
19
+ reason: await parseRawHttpResponse(res), // Pass the response body as reason so the original error can surface
20
+ });
20
21
  }
21
22
  return res;
22
23
  };
@@ -110,10 +111,12 @@ export const createAbortPromiseFromSignal = (signal: AbortSignal) => {
110
111
  export const isDefined = <T>(x: T | undefined | null | ""): x is T =>
111
112
  Boolean(x);
112
113
 
113
- export const safeJsonParse = <T>(text: string, withDefault?: T): T | null => {
114
- try {
115
- return JSON.parse(text);
116
- } catch (_) {
117
- return withDefault ?? null;
118
- }
119
- };
114
+ /**
115
+ * Utility function to parse a raw HTTP response as JSON if supported, otherwise as text.
116
+ */
117
+ export const parseRawHttpResponse = <T extends Record<string, unknown>>(
118
+ response: Response
119
+ ) =>
120
+ response.headers.get("content-type")?.includes("application/json")
121
+ ? (response.json() as Promise<T>)
122
+ : response.text();
package/src/utils/par.ts CHANGED
@@ -6,8 +6,9 @@ import {
6
6
  import uuid from "react-native-uuid";
7
7
  import * as z from "zod";
8
8
  import * as WalletInstanceAttestation from "../wallet-instance-attestation";
9
- import { generateRandomAlphaNumericString, hasStatus } from "./misc";
9
+ import { generateRandomAlphaNumericString, hasStatusOrThrow } from "./misc";
10
10
  import { createPopToken } from "./pop";
11
+ import { IssuerResponseError } from "./errors";
11
12
 
12
13
  export type AuthorizationDetail = z.infer<typeof AuthorizationDetail>;
13
14
  export const AuthorizationDetail = z.object({
@@ -109,7 +110,7 @@ export const makeParRequest =
109
110
  },
110
111
  body: formBody.toString(),
111
112
  })
112
- .then(hasStatus(201))
113
+ .then(hasStatusOrThrow(201, IssuerResponseError))
113
114
  .then((res) => res.json())
114
115
  .then((result) => result.request_uri);
115
116
  };
@@ -6,7 +6,8 @@ The suggested way to implement this service is to use [io-react-native-integrity
6
6
 
7
7
  The following methods are available:
8
8
  - `createWalletInstance` creates a new wallet instance;
9
- - `revokeCurrentWalletInstance` revokes the currently valid wallet instance of the user who made the request.
9
+ - `revokeWalletInstance` revokes a wallet instance by ID;
10
+ - `getWalletInstanceStatus` fetches the status of a wallet instance by ID without the need to require an attestation.
10
11
 
11
12
  Examples are provided as follows:
12
13
 
@@ -35,12 +36,29 @@ return integrityKeyTag;
35
36
 
36
37
  The returned `integrityKeyTag` is supposed to be stored and used to verify the integrity of the device in the future when using an `IntegrityContext` object. It must be regenerated if another wallet instance is created.
37
38
 
38
- ### Wallet instance revocation
39
+ ### Wallet Instance revocation
40
+
41
+ Revoke a Wallet Instance by ID. The ID matches the hardware/integrity key tag used for creation.
42
+
43
+ ```ts
44
+ const { WALLET_PROVIDER_BASE_URL } = env;
45
+
46
+ await WalletInstance.revokeWalletInstance({
47
+ id: "495e5bec-b93f-4fd7-952a-94b27233abdb"
48
+ walletProviderBaseUrl: WALLET_PROVIDER_BASE_URL,
49
+ appFetch,
50
+ });
51
+
52
+ ```
53
+ ### Wallet Instance status
54
+
55
+ Get the status of a Wallet Instance by ID. The ID matches the hardware/integrity key tag used for creation.
39
56
 
40
57
  ```ts
41
58
  const { WALLET_PROVIDER_BASE_URL } = env;
42
59
 
43
- await WalletInstance.revokeCurrentWalletInstance({
60
+ const status = await WalletInstance.getWalletInstanceStatus({
61
+ id: "495e5bec-b93f-4fd7-952a-94b27233abdb"
44
62
  walletProviderBaseUrl: WALLET_PROVIDER_BASE_URL,
45
63
  appFetch,
46
64
  });
@@ -48,6 +66,9 @@ await WalletInstance.revokeCurrentWalletInstance({
48
66
 
49
67
  ## Mapped results
50
68
 
51
- ### 409 Conflict (WalletInstanceCreationIntegrityError)
69
+ The following errors are mapped to a `WalletProviderResponseError` with specific codes.
52
70
 
53
- A `409 Conflict` response is returned by the wallet provider when an integrity check fails.
71
+ |HTTP Status|Error Code|Description|
72
+ |-----------|----------|-----------|
73
+ |`409 Conflict`|`ERR_IO_WALLET_INSTANCE_INTEGRITY_FAILED`|This response is returned by the wallet provider when an integrity check fails.|
74
+ |`*`|`ERR_IO_WALLET_PROVIDER_GENERIC_ERROR`|This is a generic error code to map unexpected errors that occurred when interacting with the Wallet Provider.|
@@ -1,10 +1,11 @@
1
1
  import { getWalletProviderClient } from "../client";
2
- import type { IntegrityContext } from "..";
3
2
  import {
4
- WalletInstanceCreationError,
5
- WalletInstanceCreationIntegrityError,
3
+ ResponseErrorBuilder,
6
4
  WalletProviderResponseError,
5
+ WalletProviderResponseErrorCodes,
7
6
  } from "../utils/errors";
7
+ import type { WalletInstanceData } from "../client/generated/wallet-provider";
8
+ import type { IntegrityContext } from "..";
8
9
 
9
10
  export async function createWalletInstance(context: {
10
11
  integrityContext: IntegrityContext;
@@ -40,28 +41,49 @@ const handleCreateWalletInstanceError = (e: unknown) => {
40
41
  throw e;
41
42
  }
42
43
 
43
- if (e.statusCode === 409) {
44
- throw new WalletInstanceCreationIntegrityError(
45
- "Unable to get an attestation for a Wallet Instance that failed the integrity check",
46
- e.claim,
47
- e.reason
48
- );
49
- }
50
-
51
- throw new WalletInstanceCreationError(
52
- `Unable to obtain wallet instance attestation [response status code: ${e.statusCode}]`,
53
- e.claim,
54
- e.reason
55
- );
44
+ throw new ResponseErrorBuilder(WalletProviderResponseError)
45
+ .handle(409, {
46
+ code: WalletProviderResponseErrorCodes.WalletInstanceIntegrityFailed,
47
+ message:
48
+ "Unable to create a wallet instance with a device that failed the integrity check",
49
+ })
50
+ .handle("*", {
51
+ code: WalletProviderResponseErrorCodes.WalletInstanceCreationFailed,
52
+ message: "Unable to create wallet instance",
53
+ })
54
+ .buildFrom(e);
56
55
  };
57
56
 
58
- export async function revokeCurrentWalletInstance(context: {
57
+ /**
58
+ * Revoke a Wallet Instance by ID.
59
+ * @param context.id The Wallet Instance ID. It matches the hardware key tag used for creation.
60
+ */
61
+ export async function revokeWalletInstance(context: {
62
+ id: string;
59
63
  walletProviderBaseUrl: string;
60
64
  appFetch?: GlobalFetch["fetch"];
61
65
  }): Promise<void> {
62
66
  const api = getWalletProviderClient(context);
63
67
 
64
- await api.put("/wallet-instances/current/status", {
68
+ await api.put("/wallet-instances/{id}/status", {
69
+ path: { id: context.id },
65
70
  body: { status: "REVOKED" },
66
71
  });
67
72
  }
73
+
74
+ /**
75
+ * Get the status of a Wallet Instance by ID.
76
+ * @param context.id The Wallet Instance ID. It matches the hardware key tag used for creation.
77
+ * @returns Details on the status of the Wallet Instance
78
+ */
79
+ export async function getWalletInstanceStatus(context: {
80
+ id: string;
81
+ walletProviderBaseUrl: string;
82
+ appFetch?: GlobalFetch["fetch"];
83
+ }): Promise<WalletInstanceData> {
84
+ const api = getWalletProviderClient(context);
85
+
86
+ return api.get("/wallet-instances/{id}/status", {
87
+ path: { id: context.id },
88
+ });
89
+ }
@@ -36,6 +36,12 @@ The returned `issuedAttestation` is supposed to be stored and used for any futur
36
36
 
37
37
  ## Mapped results
38
38
 
39
- ### 409 Conflict (WalletInstanceIntegrityFailedError)
39
+ The following errors are mapped to a `WalletProviderResponseError` with specific codes.
40
+
41
+ |HTTP Status|Error Code|Description|
42
+ |-----------|----------|-----------|
43
+ |`403 Forbidden`|`ERR_IO_WALLET_INSTANCE_REVOKED`|This response is returned by the wallet provider when the wallet instance has been revoked.|
44
+ |`404 Not Found`|`ERR_IO_WALLET_INSTANCE_NOT_FOUND`|This response is returned by the wallet provider when the wallet instance does not exist.|
45
+ |`409 Conflict`|`ERR_IO_WALLET_INSTANCE_INTEGRITY_FAILED`|This response is returned by the wallet provider when an integrity check fails.|
46
+ |`*`|`ERR_IO_WALLET_PROVIDER_GENERIC_ERROR`|This is a generic error code to map unexpected errors that occurred when interacting with the Wallet Provider.|
40
47
 
41
- A `409 Conflict` response is returned by the wallet provider when an integrity check fails.
@@ -1,14 +1,15 @@
1
- import { type CryptoContext } from "@pagopa/io-react-native-jwt";
2
- import { SignJWT, thumbprint } from "@pagopa/io-react-native-jwt";
3
- import { JWK, fixBase64EncodingOnKey } from "../utils/jwk";
1
+ import {
2
+ type CryptoContext,
3
+ SignJWT,
4
+ thumbprint,
5
+ } from "@pagopa/io-react-native-jwt";
6
+ import { fixBase64EncodingOnKey, JWK } from "../utils/jwk";
4
7
  import { getWalletProviderClient } from "../client";
5
8
  import type { IntegrityContext } from "..";
6
9
  import {
10
+ ResponseErrorBuilder,
7
11
  WalletProviderResponseError,
8
- WalletInstanceRevokedError,
9
- WalletInstanceNotFoundError,
10
- WalletInstanceAttestationIssuingError,
11
- WalletInstanceIntegrityFailedError,
12
+ WalletProviderResponseErrorCodes,
12
13
  } from "../utils/errors";
13
14
  import { TokenResponse } from "./types";
14
15
 
@@ -120,33 +121,24 @@ const handleAttestationCreationError = (e: unknown) => {
120
121
  throw e;
121
122
  }
122
123
 
123
- if (e.statusCode === 403) {
124
- throw new WalletInstanceRevokedError(
125
- "Unable to get an attestation for a revoked Wallet Instance",
126
- e.claim,
127
- e.reason
128
- );
129
- }
130
-
131
- if (e.statusCode === 404) {
132
- throw new WalletInstanceNotFoundError(
133
- "Unable to get an attestation for a Wallet Instance that does not exist",
134
- e.claim,
135
- e.reason
136
- );
137
- }
138
-
139
- if (e.statusCode === 409) {
140
- throw new WalletInstanceIntegrityFailedError(
141
- "Unable to get an attestation for a Wallet Instance that failed the integrity check",
142
- e.claim,
143
- e.reason
144
- );
145
- }
146
-
147
- throw new WalletInstanceAttestationIssuingError(
148
- `Unable to obtain wallet instance attestation [response status code: ${e.statusCode}]`,
149
- e.claim,
150
- e.reason
151
- );
124
+ throw new ResponseErrorBuilder(WalletProviderResponseError)
125
+ .handle(403, {
126
+ code: WalletProviderResponseErrorCodes.WalletInstanceRevoked,
127
+ message: "Unable to get an attestation for a revoked Wallet Instance",
128
+ })
129
+ .handle(404, {
130
+ code: WalletProviderResponseErrorCodes.WalletInstanceNotFound,
131
+ message:
132
+ "Unable to get an attestation for a Wallet Instance that does not exist",
133
+ })
134
+ .handle(409, {
135
+ code: WalletProviderResponseErrorCodes.WalletInstanceIntegrityFailed,
136
+ message:
137
+ "Unable to get an attestation for a Wallet Instance that failed the integrity check",
138
+ })
139
+ .handle("*", {
140
+ code: WalletProviderResponseErrorCodes.WalletInstanceAttestationIssuingFailed,
141
+ message: "Unable to obtain wallet instance attestation",
142
+ })
143
+ .buildFrom(e);
152
144
  };