@pagopa/io-react-native-wallet 0.24.1 → 0.25.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 (185) 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/sd-jwt/errors.js +40 -0
  35. package/lib/commonjs/sd-jwt/errors.js.map +1 -0
  36. package/lib/commonjs/sd-jwt/index.js +8 -4
  37. package/lib/commonjs/sd-jwt/index.js.map +1 -1
  38. package/lib/commonjs/sd-jwt/verifier.js +5 -1
  39. package/lib/commonjs/sd-jwt/verifier.js.map +1 -1
  40. package/lib/commonjs/trust/index.js +2 -2
  41. package/lib/commonjs/trust/index.js.map +1 -1
  42. package/lib/commonjs/utils/decoder.js +3 -1
  43. package/lib/commonjs/utils/decoder.js.map +1 -1
  44. package/lib/commonjs/utils/error-codes.js +51 -0
  45. package/lib/commonjs/utils/error-codes.js.map +1 -0
  46. package/lib/commonjs/utils/errors.js +119 -463
  47. package/lib/commonjs/utils/errors.js.map +1 -1
  48. package/lib/commonjs/utils/misc.js +21 -14
  49. package/lib/commonjs/utils/misc.js.map +1 -1
  50. package/lib/commonjs/utils/par.js +2 -1
  51. package/lib/commonjs/utils/par.js.map +1 -1
  52. package/lib/commonjs/wallet-instance/README.md +26 -5
  53. package/lib/commonjs/wallet-instance/index.js +33 -7
  54. package/lib/commonjs/wallet-instance/index.js.map +1 -1
  55. package/lib/commonjs/wallet-instance-attestation/README.md +8 -2
  56. package/lib/commonjs/wallet-instance-attestation/issuing.js +13 -10
  57. package/lib/commonjs/wallet-instance-attestation/issuing.js.map +1 -1
  58. package/lib/module/client/generated/wallet-provider.js +31 -11
  59. package/lib/module/client/generated/wallet-provider.js.map +1 -1
  60. package/lib/module/client/index.js +22 -8
  61. package/lib/module/client/index.js.map +1 -1
  62. package/lib/module/credential/issuance/03-start-user-authorization.js +1 -1
  63. package/lib/module/credential/issuance/04-complete-user-authorization.js +16 -9
  64. package/lib/module/credential/issuance/04-complete-user-authorization.js.map +1 -1
  65. package/lib/module/credential/issuance/05-authorize-access.js +7 -4
  66. package/lib/module/credential/issuance/05-authorize-access.js.map +1 -1
  67. package/lib/module/credential/issuance/06-obtain-credential.js +29 -20
  68. package/lib/module/credential/issuance/06-obtain-credential.js.map +1 -1
  69. package/lib/module/credential/issuance/README.md +8 -14
  70. package/lib/module/credential/issuance/errors.js +44 -0
  71. package/lib/module/credential/issuance/errors.js.map +1 -0
  72. package/lib/module/credential/issuance/index.js +3 -2
  73. package/lib/module/credential/issuance/index.js.map +1 -1
  74. package/lib/module/credential/issuance/types.js +0 -3
  75. package/lib/module/credential/issuance/types.js.map +1 -1
  76. package/lib/module/credential/presentation/01-start-flow.js +1 -1
  77. package/lib/module/credential/presentation/01-start-flow.js.map +1 -1
  78. package/lib/module/credential/presentation/03-get-request-object.js +3 -3
  79. package/lib/module/credential/presentation/03-get-request-object.js.map +1 -1
  80. package/lib/module/credential/presentation/04-send-authorization-response.js +3 -3
  81. package/lib/module/credential/presentation/04-send-authorization-response.js.map +1 -1
  82. package/lib/module/credential/presentation/errors.js +42 -0
  83. package/lib/module/credential/presentation/errors.js.map +1 -0
  84. package/lib/module/credential/presentation/index.js +2 -1
  85. package/lib/module/credential/presentation/index.js.map +1 -1
  86. package/lib/module/credential/status/02-status-attestation.js +11 -9
  87. package/lib/module/credential/status/02-status-attestation.js.map +1 -1
  88. package/lib/module/credential/status/README.md +5 -2
  89. package/lib/module/credential/status/types.js +0 -12
  90. package/lib/module/credential/status/types.js.map +1 -1
  91. package/lib/module/sd-jwt/errors.js +32 -0
  92. package/lib/module/sd-jwt/errors.js.map +1 -0
  93. package/lib/module/sd-jwt/index.js +5 -5
  94. package/lib/module/sd-jwt/index.js.map +1 -1
  95. package/lib/module/sd-jwt/verifier.js +5 -1
  96. package/lib/module/sd-jwt/verifier.js.map +1 -1
  97. package/lib/module/trust/index.js +3 -3
  98. package/lib/module/trust/index.js.map +1 -1
  99. package/lib/module/utils/decoder.js +3 -1
  100. package/lib/module/utils/decoder.js.map +1 -1
  101. package/lib/module/utils/error-codes.js +43 -0
  102. package/lib/module/utils/error-codes.js.map +1 -0
  103. package/lib/module/utils/errors.js +98 -438
  104. package/lib/module/utils/errors.js.map +1 -1
  105. package/lib/module/utils/misc.js +18 -11
  106. package/lib/module/utils/misc.js.map +1 -1
  107. package/lib/module/utils/par.js +3 -2
  108. package/lib/module/utils/par.js.map +1 -1
  109. package/lib/module/wallet-instance/README.md +26 -5
  110. package/lib/module/wallet-instance/index.js +32 -7
  111. package/lib/module/wallet-instance/index.js.map +1 -1
  112. package/lib/module/wallet-instance-attestation/README.md +8 -2
  113. package/lib/module/wallet-instance-attestation/issuing.js +15 -12
  114. package/lib/module/wallet-instance-attestation/issuing.js.map +1 -1
  115. package/lib/typescript/client/generated/wallet-provider.d.ts +138 -27
  116. package/lib/typescript/client/generated/wallet-provider.d.ts.map +1 -1
  117. package/lib/typescript/client/index.d.ts +7 -1
  118. package/lib/typescript/client/index.d.ts.map +1 -1
  119. package/lib/typescript/credential/issuance/03-start-user-authorization.d.ts +1 -1
  120. package/lib/typescript/credential/issuance/04-complete-user-authorization.d.ts +1 -1
  121. package/lib/typescript/credential/issuance/04-complete-user-authorization.d.ts.map +1 -1
  122. package/lib/typescript/credential/issuance/05-authorize-access.d.ts.map +1 -1
  123. package/lib/typescript/credential/issuance/06-obtain-credential.d.ts.map +1 -1
  124. package/lib/typescript/credential/issuance/errors.d.ts +28 -0
  125. package/lib/typescript/credential/issuance/errors.d.ts.map +1 -0
  126. package/lib/typescript/credential/issuance/index.d.ts +3 -2
  127. package/lib/typescript/credential/issuance/index.d.ts.map +1 -1
  128. package/lib/typescript/credential/issuance/types.d.ts +0 -8
  129. package/lib/typescript/credential/issuance/types.d.ts.map +1 -1
  130. package/lib/typescript/credential/presentation/03-get-request-object.d.ts.map +1 -1
  131. package/lib/typescript/credential/presentation/04-send-authorization-response.d.ts.map +1 -1
  132. package/lib/typescript/credential/presentation/errors.d.ts +25 -0
  133. package/lib/typescript/credential/presentation/errors.d.ts.map +1 -0
  134. package/lib/typescript/credential/presentation/index.d.ts +2 -1
  135. package/lib/typescript/credential/presentation/index.d.ts.map +1 -1
  136. package/lib/typescript/credential/status/02-status-attestation.d.ts.map +1 -1
  137. package/lib/typescript/credential/status/types.d.ts +0 -15
  138. package/lib/typescript/credential/status/types.d.ts.map +1 -1
  139. package/lib/typescript/sd-jwt/errors.d.ts +20 -0
  140. package/lib/typescript/sd-jwt/errors.d.ts.map +1 -0
  141. package/lib/typescript/sd-jwt/index.d.ts +3 -2
  142. package/lib/typescript/sd-jwt/index.d.ts.map +1 -1
  143. package/lib/typescript/utils/error-codes.d.ts +45 -0
  144. package/lib/typescript/utils/error-codes.d.ts.map +1 -0
  145. package/lib/typescript/utils/errors.d.ts +88 -225
  146. package/lib/typescript/utils/errors.d.ts.map +1 -1
  147. package/lib/typescript/utils/misc.d.ts +9 -4
  148. package/lib/typescript/utils/misc.d.ts.map +1 -1
  149. package/lib/typescript/utils/par.d.ts.map +1 -1
  150. package/lib/typescript/wallet-instance/index.d.ts +17 -1
  151. package/lib/typescript/wallet-instance/index.d.ts.map +1 -1
  152. package/lib/typescript/wallet-instance-attestation/issuing.d.ts.map +1 -1
  153. package/lib/typescript/wallet-instance-attestation/types.d.ts +4 -4
  154. package/package.json +1 -1
  155. package/src/client/generated/wallet-provider.ts +43 -13
  156. package/src/client/index.ts +28 -15
  157. package/src/credential/issuance/03-start-user-authorization.ts +1 -1
  158. package/src/credential/issuance/04-complete-user-authorization.ts +21 -21
  159. package/src/credential/issuance/05-authorize-access.ts +7 -4
  160. package/src/credential/issuance/06-obtain-credential.ts +39 -39
  161. package/src/credential/issuance/README.md +8 -14
  162. package/src/credential/issuance/errors.ts +44 -0
  163. package/src/credential/issuance/index.ts +4 -2
  164. package/src/credential/issuance/types.ts +0 -8
  165. package/src/credential/presentation/01-start-flow.ts +1 -1
  166. package/src/credential/presentation/03-get-request-object.ts +3 -3
  167. package/src/credential/presentation/04-send-authorization-response.ts +3 -3
  168. package/src/credential/presentation/errors.ts +41 -0
  169. package/src/credential/presentation/index.ts +2 -0
  170. package/src/credential/status/02-status-attestation.ts +17 -25
  171. package/src/credential/status/README.md +5 -2
  172. package/src/credential/status/types.ts +0 -15
  173. package/src/sd-jwt/errors.ts +39 -0
  174. package/src/sd-jwt/index.ts +5 -8
  175. package/src/sd-jwt/verifier.ts +5 -5
  176. package/src/trust/index.ts +3 -3
  177. package/src/utils/decoder.ts +3 -3
  178. package/src/utils/error-codes.ts +50 -0
  179. package/src/utils/errors.ts +152 -476
  180. package/src/utils/misc.ts +20 -17
  181. package/src/utils/par.ts +3 -2
  182. package/src/wallet-instance/README.md +26 -5
  183. package/src/wallet-instance/index.ts +40 -18
  184. package/src/wallet-instance-attestation/README.md +8 -2
  185. 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
  };