@primuslabs/fhetransform-sdk 0.4.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 (302) hide show
  1. package/README.md +198 -0
  2. package/dist/abis/acl.abi.d.ts +379 -0
  3. package/dist/abis/acl.abi.js +495 -0
  4. package/dist/abis/acl.abi.js.map +1 -0
  5. package/dist/abis/alphatrion_reward.abi.d.ts +407 -0
  6. package/dist/abis/alphatrion_reward.abi.js +532 -0
  7. package/dist/abis/alphatrion_reward.abi.js.map +1 -0
  8. package/dist/abis/ciphertext_digests.abi.d.ts +336 -0
  9. package/dist/abis/ciphertext_digests.abi.js +444 -0
  10. package/dist/abis/ciphertext_digests.abi.js.map +1 -0
  11. package/dist/abis/ciphertext_verification.abi.d.ts +637 -0
  12. package/dist/abis/ciphertext_verification.abi.js +830 -0
  13. package/dist/abis/ciphertext_verification.abi.js.map +1 -0
  14. package/dist/abis/convert_token.abi.d.ts +922 -0
  15. package/dist/abis/convert_token.abi.js +1208 -0
  16. package/dist/abis/convert_token.abi.js.map +1 -0
  17. package/dist/abis/decryption.abi.d.ts +956 -0
  18. package/dist/abis/decryption.abi.js +1244 -0
  19. package/dist/abis/decryption.abi.js.map +1 -0
  20. package/dist/abis/erc20.abi.d.ts +265 -0
  21. package/dist/abis/erc20.abi.js +350 -0
  22. package/dist/abis/erc20.abi.js.map +1 -0
  23. package/dist/abis/fhe_executor.abi.d.ts +1535 -0
  24. package/dist/abis/fhe_executor.abi.js +1962 -0
  25. package/dist/abis/fhe_executor.abi.js.map +1 -0
  26. package/dist/abis/space_bridge_config.abi.d.ts +792 -0
  27. package/dist/abis/space_bridge_config.abi.js +1032 -0
  28. package/dist/abis/space_bridge_config.abi.js.map +1 -0
  29. package/dist/abis/token.abi.d.ts +630 -0
  30. package/dist/abis/token.abi.js +828 -0
  31. package/dist/abis/token.abi.js.map +1 -0
  32. package/dist/cli/eusdc.d.ts +2 -0
  33. package/dist/cli/eusdc.js +41 -0
  34. package/dist/cli/eusdc.js.map +1 -0
  35. package/dist/contract/callbacks.d.ts +59 -0
  36. package/dist/contract/callbacks.js +2 -0
  37. package/dist/contract/callbacks.js.map +1 -0
  38. package/dist/contract/convert-token.d.ts +107 -0
  39. package/dist/contract/convert-token.js +249 -0
  40. package/dist/contract/convert-token.js.map +1 -0
  41. package/dist/contract/token.d.ts +167 -0
  42. package/dist/contract/token.js +404 -0
  43. package/dist/contract/token.js.map +1 -0
  44. package/dist/contract/transaction.d.ts +29 -0
  45. package/dist/contract/transaction.js +2 -0
  46. package/dist/contract/transaction.js.map +1 -0
  47. package/dist/core/address.d.ts +118 -0
  48. package/dist/core/address.js +200 -0
  49. package/dist/core/address.js.map +1 -0
  50. package/dist/core/auth.d.ts +68 -0
  51. package/dist/core/auth.js +58 -0
  52. package/dist/core/auth.js.map +1 -0
  53. package/dist/core/bytes.d.ts +48 -0
  54. package/dist/core/bytes.js +117 -0
  55. package/dist/core/bytes.js.map +1 -0
  56. package/dist/core/cache-manager.d.ts +138 -0
  57. package/dist/core/cache-manager.js +440 -0
  58. package/dist/core/cache-manager.js.map +1 -0
  59. package/dist/core/chain.d.ts +41 -0
  60. package/dist/core/chain.js +59 -0
  61. package/dist/core/chain.js.map +1 -0
  62. package/dist/core/constants.d.ts +24 -0
  63. package/dist/core/constants.js +25 -0
  64. package/dist/core/constants.js.map +1 -0
  65. package/dist/core/error.d.ts +2 -0
  66. package/dist/core/error.js +14 -0
  67. package/dist/core/error.js.map +1 -0
  68. package/dist/core/errors/error-catalog.d.ts +29 -0
  69. package/dist/core/errors/error-catalog.js +84 -0
  70. package/dist/core/errors/error-catalog.js.map +1 -0
  71. package/dist/core/errors/error-codes.d.ts +52 -0
  72. package/dist/core/errors/error-codes.js +61 -0
  73. package/dist/core/errors/error-codes.js.map +1 -0
  74. package/dist/core/errors/error-utils.d.ts +27 -0
  75. package/dist/core/errors/error-utils.js +110 -0
  76. package/dist/core/errors/error-utils.js.map +1 -0
  77. package/dist/core/errors/fhe-error.d.ts +98 -0
  78. package/dist/core/errors/fhe-error.js +190 -0
  79. package/dist/core/errors/fhe-error.js.map +1 -0
  80. package/dist/core/errors/index.d.ts +4 -0
  81. package/dist/core/errors/index.js +5 -0
  82. package/dist/core/errors/index.js.map +1 -0
  83. package/dist/core/estimate.d.ts +39 -0
  84. package/dist/core/estimate.js +111 -0
  85. package/dist/core/estimate.js.map +1 -0
  86. package/dist/core/event.d.ts +212 -0
  87. package/dist/core/event.js +42 -0
  88. package/dist/core/event.js.map +1 -0
  89. package/dist/core/fhe-type.d.ts +75 -0
  90. package/dist/core/fhe-type.js +115 -0
  91. package/dist/core/fhe-type.js.map +1 -0
  92. package/dist/core/fhe.d.ts +11 -0
  93. package/dist/core/fhe.js +23 -0
  94. package/dist/core/fhe.js.map +1 -0
  95. package/dist/core/handle.d.ts +42 -0
  96. package/dist/core/handle.js +99 -0
  97. package/dist/core/handle.js.map +1 -0
  98. package/dist/core/json-utils.d.ts +18 -0
  99. package/dist/core/json-utils.js +37 -0
  100. package/dist/core/json-utils.js.map +1 -0
  101. package/dist/core/kms.d.ts +42 -0
  102. package/dist/core/kms.js +70 -0
  103. package/dist/core/kms.js.map +1 -0
  104. package/dist/core/logger.d.ts +3 -0
  105. package/dist/core/logger.js +11 -0
  106. package/dist/core/logger.js.map +1 -0
  107. package/dist/core/pretty-print.d.ts +18 -0
  108. package/dist/core/pretty-print.js +84 -0
  109. package/dist/core/pretty-print.js.map +1 -0
  110. package/dist/core/primitives.d.ts +22 -0
  111. package/dist/core/primitives.js +2 -0
  112. package/dist/core/primitives.js.map +1 -0
  113. package/dist/core/retryable-handler.d.ts +74 -0
  114. package/dist/core/retryable-handler.js +227 -0
  115. package/dist/core/retryable-handler.js.map +1 -0
  116. package/dist/core/signer-address-info.d.ts +15 -0
  117. package/dist/core/signer-address-info.js +33 -0
  118. package/dist/core/signer-address-info.js.map +1 -0
  119. package/dist/core/string.d.ts +28 -0
  120. package/dist/core/string.js +33 -0
  121. package/dist/core/string.js.map +1 -0
  122. package/dist/core/swallow.d.ts +23 -0
  123. package/dist/core/swallow.js +37 -0
  124. package/dist/core/swallow.js.map +1 -0
  125. package/dist/core/system-contract-info.d.ts +17 -0
  126. package/dist/core/system-contract-info.js +41 -0
  127. package/dist/core/system-contract-info.js.map +1 -0
  128. package/dist/core/ttl-cache.d.ts +81 -0
  129. package/dist/core/ttl-cache.js +113 -0
  130. package/dist/core/ttl-cache.js.map +1 -0
  131. package/dist/core/tx-error-parser.d.ts +40 -0
  132. package/dist/core/tx-error-parser.js +83 -0
  133. package/dist/core/tx-error-parser.js.map +1 -0
  134. package/dist/core/utils.d.ts +62 -0
  135. package/dist/core/utils.js +143 -0
  136. package/dist/core/utils.js.map +1 -0
  137. package/dist/index.d.ts +40 -0
  138. package/dist/index.js +48 -0
  139. package/dist/index.js.map +1 -0
  140. package/dist/jazz/encrypt-key-p.d.ts +65 -0
  141. package/dist/jazz/encrypt-key-p.js +283 -0
  142. package/dist/jazz/encrypt-key-p.js.map +1 -0
  143. package/dist/jazz/encrypt-p.d.ts +82 -0
  144. package/dist/jazz/encrypt-p.js +139 -0
  145. package/dist/jazz/encrypt-p.js.map +1 -0
  146. package/dist/jazz/encrypt.d.ts +58 -0
  147. package/dist/jazz/encrypt.js +155 -0
  148. package/dist/jazz/encrypt.js.map +1 -0
  149. package/dist/jazz/input-proof-p.d.ts +122 -0
  150. package/dist/jazz/input-proof-p.js +265 -0
  151. package/dist/jazz/input-proof-p.js.map +1 -0
  152. package/dist/jazz/jazz-client-i.d.ts +16 -0
  153. package/dist/jazz/jazz-client-i.js +2 -0
  154. package/dist/jazz/jazz-client-i.js.map +1 -0
  155. package/dist/jazz/jazz-client.d.ts +18 -0
  156. package/dist/jazz/jazz-client.js +24 -0
  157. package/dist/jazz/jazz-client.js.map +1 -0
  158. package/dist/jazz/key-pair.d.ts +50 -0
  159. package/dist/jazz/key-pair.js +166 -0
  160. package/dist/jazz/key-pair.js.map +1 -0
  161. package/dist/jazz/mock/fake.d.ts +3 -0
  162. package/dist/jazz/mock/fake.js +23 -0
  163. package/dist/jazz/mock/fake.js.map +1 -0
  164. package/dist/jazz/mock/fetch-input-proof.d.ts +4 -0
  165. package/dist/jazz/mock/fetch-input-proof.js +63 -0
  166. package/dist/jazz/mock/fetch-input-proof.js.map +1 -0
  167. package/dist/jazz/mock/fetch-key-url.d.ts +3 -0
  168. package/dist/jazz/mock/fetch-key-url.js +15 -0
  169. package/dist/jazz/mock/fetch-key-url.js.map +1 -0
  170. package/dist/jazz/mock/fetch-public-decrypt.d.ts +3 -0
  171. package/dist/jazz/mock/fetch-public-decrypt.js +81 -0
  172. package/dist/jazz/mock/fetch-public-decrypt.js.map +1 -0
  173. package/dist/jazz/mock/fetch-user-decrypt.d.ts +4 -0
  174. package/dist/jazz/mock/fetch-user-decrypt.js +174 -0
  175. package/dist/jazz/mock/fetch-user-decrypt.js.map +1 -0
  176. package/dist/jazz/module/fetch-input-proof.d.ts +19 -0
  177. package/dist/jazz/module/fetch-input-proof.js +72 -0
  178. package/dist/jazz/module/fetch-input-proof.js.map +1 -0
  179. package/dist/jazz/module/fetch-key-url.d.ts +17 -0
  180. package/dist/jazz/module/fetch-key-url.js +46 -0
  181. package/dist/jazz/module/fetch-key-url.js.map +1 -0
  182. package/dist/jazz/module/fetch-public-decrypt.d.ts +19 -0
  183. package/dist/jazz/module/fetch-public-decrypt.js +65 -0
  184. package/dist/jazz/module/fetch-public-decrypt.js.map +1 -0
  185. package/dist/jazz/module/fetch-user-decrypt.d.ts +19 -0
  186. package/dist/jazz/module/fetch-user-decrypt.js +109 -0
  187. package/dist/jazz/module/fetch-user-decrypt.js.map +1 -0
  188. package/dist/jazz/module/jazz-async-request.d.ts +102 -0
  189. package/dist/jazz/module/jazz-async-request.js +515 -0
  190. package/dist/jazz/module/jazz-async-request.js.map +1 -0
  191. package/dist/jazz/module/jazz-p.d.ts +61 -0
  192. package/dist/jazz/module/jazz-p.js +33 -0
  193. package/dist/jazz/module/jazz-p.js.map +1 -0
  194. package/dist/jazz/module/s3-download.d.ts +85 -0
  195. package/dist/jazz/module/s3-download.js +293 -0
  196. package/dist/jazz/module/s3-download.js.map +1 -0
  197. package/dist/jazz/permit.d.ts +200 -0
  198. package/dist/jazz/permit.js +319 -0
  199. package/dist/jazz/permit.js.map +1 -0
  200. package/dist/jazz/public-decrypt-p.d.ts +96 -0
  201. package/dist/jazz/public-decrypt-p.js +258 -0
  202. package/dist/jazz/public-decrypt-p.js.map +1 -0
  203. package/dist/jazz/public-decrypt.d.ts +48 -0
  204. package/dist/jazz/public-decrypt.js +156 -0
  205. package/dist/jazz/public-decrypt.js.map +1 -0
  206. package/dist/jazz/read-contract.d.ts +81 -0
  207. package/dist/jazz/read-contract.js +125 -0
  208. package/dist/jazz/read-contract.js.map +1 -0
  209. package/dist/jazz/types/common.d.ts +17 -0
  210. package/dist/jazz/types/common.js +2 -0
  211. package/dist/jazz/types/common.js.map +1 -0
  212. package/dist/jazz/types/input-proof.d.ts +76 -0
  213. package/dist/jazz/types/input-proof.js +2 -0
  214. package/dist/jazz/types/input-proof.js.map +1 -0
  215. package/dist/jazz/types/key-url.d.ts +68 -0
  216. package/dist/jazz/types/key-url.js +5 -0
  217. package/dist/jazz/types/key-url.js.map +1 -0
  218. package/dist/jazz/types/public-decrypt.d.ts +61 -0
  219. package/dist/jazz/types/public-decrypt.js +2 -0
  220. package/dist/jazz/types/public-decrypt.js.map +1 -0
  221. package/dist/jazz/types/user-decrypt.d.ts +123 -0
  222. package/dist/jazz/types/user-decrypt.js +2 -0
  223. package/dist/jazz/types/user-decrypt.js.map +1 -0
  224. package/dist/jazz/user-decrypt-p.d.ts +111 -0
  225. package/dist/jazz/user-decrypt-p.js +280 -0
  226. package/dist/jazz/user-decrypt-p.js.map +1 -0
  227. package/dist/jazz/user-decrypt.d.ts +74 -0
  228. package/dist/jazz/user-decrypt.js +143 -0
  229. package/dist/jazz/user-decrypt.js.map +1 -0
  230. package/dist/native/fhe-api.js +5959 -0
  231. package/dist/native/fhe-api.node.cjs +6167 -0
  232. package/dist/native/fhe-api.node.worker.cjs +210 -0
  233. package/dist/native/fhe-api.wasm +0 -0
  234. package/dist/native/fhe-api.worker.js +164 -0
  235. package/dist/native/kms/node/kms_lib.d.ts +38 -0
  236. package/dist/native/kms/node/kms_lib.js +356 -0
  237. package/dist/native/kms/node/kms_lib_bg.wasm +0 -0
  238. package/dist/native/kms/node/kms_lib_bg.wasm.d.ts +21 -0
  239. package/dist/native/kms/node/package.json +11 -0
  240. package/dist/native/kms/web/kms_lib.d.ts +84 -0
  241. package/dist/native/kms/web/kms_lib.js +443 -0
  242. package/dist/native/kms/web/kms_lib_bg.wasm +0 -0
  243. package/dist/native/kms/web/kms_lib_bg.wasm.d.ts +21 -0
  244. package/dist/native/kms/web/package.json +15 -0
  245. package/dist/runtime/browser.d.ts +36 -0
  246. package/dist/runtime/browser.js +115 -0
  247. package/dist/runtime/browser.js.map +1 -0
  248. package/dist/runtime/node.d.ts +30 -0
  249. package/dist/runtime/node.js +95 -0
  250. package/dist/runtime/node.js.map +1 -0
  251. package/dist/sdk/fhetransform-sdk-b.d.ts +102 -0
  252. package/dist/sdk/fhetransform-sdk-b.js +294 -0
  253. package/dist/sdk/fhetransform-sdk-b.js.map +1 -0
  254. package/dist/sdk/fhetransform-sdk.d.ts +87 -0
  255. package/dist/sdk/fhetransform-sdk.js +135 -0
  256. package/dist/sdk/fhetransform-sdk.js.map +1 -0
  257. package/dist/sdk/jazz-service.d.ts +13 -0
  258. package/dist/sdk/jazz-service.js +58 -0
  259. package/dist/sdk/jazz-service.js.map +1 -0
  260. package/dist/sdk/permit-service.d.ts +45 -0
  261. package/dist/sdk/permit-service.js +144 -0
  262. package/dist/sdk/permit-service.js.map +1 -0
  263. package/dist/wasm/fhe-wasm-client.d.ts +19 -0
  264. package/dist/wasm/fhe-wasm-client.js +23 -0
  265. package/dist/wasm/fhe-wasm-client.js.map +1 -0
  266. package/dist/wasm/fhe-wasm-module.d.ts +24 -0
  267. package/dist/wasm/fhe-wasm-module.js +141 -0
  268. package/dist/wasm/fhe-wasm-module.js.map +1 -0
  269. package/dist/wasm/fhe-wasm-type.d.ts +59 -0
  270. package/dist/wasm/fhe-wasm-type.js +244 -0
  271. package/dist/wasm/fhe-wasm-type.js.map +1 -0
  272. package/dist/wasm/wasm-loader.browser.d.ts +21 -0
  273. package/dist/wasm/wasm-loader.browser.js +143 -0
  274. package/dist/wasm/wasm-loader.browser.js.map +1 -0
  275. package/dist/wasm/wasm-loader.node.d.ts +24 -0
  276. package/dist/wasm/wasm-loader.node.js +114 -0
  277. package/dist/wasm/wasm-loader.node.js.map +1 -0
  278. package/dist/wasm/worker-client.browser.d.ts +6 -0
  279. package/dist/wasm/worker-client.browser.js +21 -0
  280. package/dist/wasm/worker-client.browser.js.map +1 -0
  281. package/dist/wasm/worker-client.d.ts +34 -0
  282. package/dist/wasm/worker-client.js +160 -0
  283. package/dist/wasm/worker-client.js.map +1 -0
  284. package/dist/wasm/worker-client.node.d.ts +6 -0
  285. package/dist/wasm/worker-client.node.js +20 -0
  286. package/dist/wasm/worker-client.node.js.map +1 -0
  287. package/dist/wasm/worker-message.d.ts +61 -0
  288. package/dist/wasm/worker-message.js +2 -0
  289. package/dist/wasm/worker-message.js.map +1 -0
  290. package/dist/wasm/worker-transport.browser.d.ts +15 -0
  291. package/dist/wasm/worker-transport.browser.js +35 -0
  292. package/dist/wasm/worker-transport.browser.js.map +1 -0
  293. package/dist/wasm/worker-transport.d.ts +6 -0
  294. package/dist/wasm/worker-transport.js +2 -0
  295. package/dist/wasm/worker-transport.js.map +1 -0
  296. package/dist/wasm/worker-transport.node.d.ts +17 -0
  297. package/dist/wasm/worker-transport.node.js +39 -0
  298. package/dist/wasm/worker-transport.node.js.map +1 -0
  299. package/dist/wasm/worker.d.ts +1 -0
  300. package/dist/wasm/worker.js +69 -0
  301. package/dist/wasm/worker.js.map +1 -0
  302. package/package.json +81 -0
@@ -0,0 +1,102 @@
1
+ import { JazzInputProofResult } from "../types/input-proof.js";
2
+ import { JazzKeyUrlResult } from "../types/key-url.js";
3
+ import { JazzPublicDecryptResult } from "../types/public-decrypt.js";
4
+ import { JazzUserDecryptResult } from "../types/user-decrypt.js";
5
+ /** Supported Jazz async operation types */
6
+ export type JazzRequestOperation = 'INPUT_PROOF' | 'PUBLIC_DECRYPT' | 'USER_DECRYPT' | 'KEY_URL';
7
+ /** Parameters for creating a Jazz async request */
8
+ export type JazzAsyncRequestParams = {
9
+ /** The operation to perform */
10
+ operation: JazzRequestOperation;
11
+ /** Base URL for the Jazz service */
12
+ baseUrl: string;
13
+ /** API endpoint path */
14
+ path: string;
15
+ /** Request payload */
16
+ payload: Record<string, unknown>;
17
+ /** Additional options for the request */
18
+ options?: any;
19
+ };
20
+ /**
21
+ * JazzAsyncRequest - Handles asynchronous Jazz API operations.
22
+ *
23
+ * Features:
24
+ * - Job submission with automatic retry
25
+ * - Polling for job completion
26
+ * - Support for INPUT_PROOF, PUBLIC_DECRYPT, USER_DECRYPT, KEY_URL operations
27
+ * - Retry-After header parsing
28
+ * - Comprehensive error handling and logging
29
+ */
30
+ export declare class JazzAsyncRequest {
31
+ private readonly baseUrl;
32
+ private readonly path;
33
+ private readonly operation;
34
+ private readonly payload;
35
+ /** Current job ID for polling */
36
+ private _jobId;
37
+ private _startTimestamp;
38
+ private _elapsed;
39
+ private readonly _onProgress?;
40
+ private readonly _retryOptions?;
41
+ /**
42
+ * Creates a new JazzAsyncRequest instance.
43
+ * @param params - Request parameters
44
+ */
45
+ constructor(params: JazzAsyncRequestParams);
46
+ /**
47
+ * Executes the async request.
48
+ * For KEY_URL, performs a simple GET request.
49
+ * For other operations, submits a job and polls for completion.
50
+ *
51
+ * @returns Promise resolving to the operation result
52
+ * @throws Error if the request fails
53
+ */
54
+ run(): Promise<JazzInputProofResult | JazzPublicDecryptResult | JazzUserDecryptResult | JazzKeyUrlResult>;
55
+ /**
56
+ * Fetches key URL information (simple GET, no polling).
57
+ *
58
+ * @param client - Authenticated Axios instance
59
+ * @returns Key URL result
60
+ * @throws Error if the request fails or response is invalid
61
+ */
62
+ private tryGetKeyUrl;
63
+ /**
64
+ * Submits the job via POST request.
65
+ *
66
+ * @param client - Authenticated Axios instance
67
+ * @returns Job ID
68
+ * @throws Error if submission fails
69
+ */
70
+ private tryPostLoop;
71
+ /**
72
+ * Polls for job completion via GET requests.
73
+ *
74
+ * @param client - Authenticated Axios instance
75
+ * @returns Processed result
76
+ * @throws Error if polling fails or job fails
77
+ */
78
+ private tryGetLoop;
79
+ /**
80
+ * Processes successful result data based on operation type.
81
+ *
82
+ * @param resultData - Raw result data from the API
83
+ * @returns Typed result object
84
+ * @throws Error if operation is unsupported or result is invalid
85
+ */
86
+ private processSuccessfulResult;
87
+ /**
88
+ * Extracts retry-after time from header value.
89
+ * Supports both seconds (numeric) and HTTP-date formats.
90
+ *
91
+ * @param retryAfter - Raw Retry-After header value
92
+ * @returns Wait time in milliseconds, or undefined if parsing fails
93
+ */
94
+ private extractRetryAfter;
95
+ /**
96
+ * Logs errors with context for debugging.
97
+ *
98
+ * @param error - Error object to log
99
+ */
100
+ private logError;
101
+ private onProgress;
102
+ }
@@ -0,0 +1,515 @@
1
+ import { createAuthenticatedAxios } from "./jazz-p.js";
2
+ import { TimeoutRetryHandler } from "../../core/retryable-handler.js";
3
+ import { logger } from "../../core/logger.js";
4
+ import { formatValue } from "../../core/pretty-print.js";
5
+ import { FheError } from "../../core/errors/fhe-error.js";
6
+ import { FheErrorCode } from "../../core/errors/error-codes.js";
7
+ import { isFheError } from "../../core/errors/error-utils.js";
8
+ /** API response status enum for async jobs */
9
+ var ApiResponseStatus;
10
+ (function (ApiResponseStatus) {
11
+ ApiResponseStatus["Queued"] = "queued";
12
+ ApiResponseStatus["Succeeded"] = "succeeded";
13
+ ApiResponseStatus["Failed"] = "failed";
14
+ })(ApiResponseStatus || (ApiResponseStatus = {}));
15
+ // ============================================================================
16
+ // JazzAsyncRequest Class
17
+ // ============================================================================
18
+ /**
19
+ * JazzAsyncRequest - Handles asynchronous Jazz API operations.
20
+ *
21
+ * Features:
22
+ * - Job submission with automatic retry
23
+ * - Polling for job completion
24
+ * - Support for INPUT_PROOF, PUBLIC_DECRYPT, USER_DECRYPT, KEY_URL operations
25
+ * - Retry-After header parsing
26
+ * - Comprehensive error handling and logging
27
+ */
28
+ export class JazzAsyncRequest {
29
+ baseUrl;
30
+ path;
31
+ operation;
32
+ payload;
33
+ // private readonly options?: any;
34
+ /** Current job ID for polling */
35
+ _jobId;
36
+ _startTimestamp;
37
+ _elapsed;
38
+ _onProgress;
39
+ _retryOptions;
40
+ /**
41
+ * Creates a new JazzAsyncRequest instance.
42
+ * @param params - Request parameters
43
+ */
44
+ constructor(params) {
45
+ // Log constructor parameters
46
+ logger.debug(() => ['[JazzAsyncRequest.constructor] Creating instance', formatValue({ params })]);
47
+ this.baseUrl = params.baseUrl;
48
+ this.path = params.path;
49
+ this.operation = params.operation;
50
+ this.payload = params.payload;
51
+ // this.options = params.options;
52
+ this._startTimestamp = Date.now();
53
+ this._elapsed = 0;
54
+ this._onProgress = params.options?.onJazzProgress;
55
+ this._retryOptions = params.options?.jazzRetryOptions;
56
+ logger.debug('[JazzAsyncRequest.constructor] Instance initialized', {
57
+ operation: this.operation,
58
+ baseUrl: this.baseUrl,
59
+ path: this.path,
60
+ });
61
+ }
62
+ /**
63
+ * Executes the async request.
64
+ * For KEY_URL, performs a simple GET request.
65
+ * For other operations, submits a job and polls for completion.
66
+ *
67
+ * @returns Promise resolving to the operation result
68
+ * @throws Error if the request fails
69
+ */
70
+ async run() {
71
+ this._startTimestamp = Date.now();
72
+ this._elapsed = 0;
73
+ this.onProgress({
74
+ status: "start"
75
+ });
76
+ // Enter method
77
+ logger.debug('[JazzAsyncRequest.run] Starting request execution', {
78
+ operation: this.operation,
79
+ path: this.path,
80
+ });
81
+ const client = createAuthenticatedAxios(this.baseUrl);
82
+ // KEY_URL is a simple GET request, no async polling needed
83
+ if (this.operation === 'KEY_URL') {
84
+ logger.trace('[JazzAsyncRequest.run] KEY_URL operation - using simple GET');
85
+ return await this.tryGetKeyUrl(client);
86
+ }
87
+ // Step 1: Submit job and get jobId
88
+ logger.trace('[JazzAsyncRequest.run] Submitting job for async operation');
89
+ await this.tryPostLoop(client);
90
+ logger.debug('[JazzAsyncRequest.run] Job submitted successfully', {
91
+ jobId: this._jobId,
92
+ });
93
+ // Step 2: Poll for job result
94
+ logger.trace('[JazzAsyncRequest.run] Polling for job result');
95
+ const result = await this.tryGetLoop(client);
96
+ logger.debug('[JazzAsyncRequest.run] Request completed successfully', {
97
+ operation: this.operation,
98
+ jobId: this._jobId,
99
+ });
100
+ return result;
101
+ }
102
+ /**
103
+ * Fetches key URL information (simple GET, no polling).
104
+ *
105
+ * @param client - Authenticated Axios instance
106
+ * @returns Key URL result
107
+ * @throws Error if the request fails or response is invalid
108
+ */
109
+ async tryGetKeyUrl(client) {
110
+ logger.debug('[tryGetKeyUrl] Fetching key URL', {
111
+ path: this.path,
112
+ });
113
+ const retryHandler = new TimeoutRetryHandler({ ...this._retryOptions });
114
+ return await retryHandler.withRetry(async () => {
115
+ try {
116
+ logger.trace('[tryGetKeyUrl] Sending GET request', { path: this.path });
117
+ const response = await client.get(`${this.path}`);
118
+ // Validate response status
119
+ if (response.status !== 200) {
120
+ logger.error('[tryGetKeyUrl] Unexpected status code', {
121
+ expected: 200,
122
+ actual: response.status,
123
+ });
124
+ throw new FheError({ code: FheErrorCode.JazzUnexpectedResponse, message: `Unexpected status code: ${response.status}` });
125
+ }
126
+ // Validate response status field
127
+ if (response.data.status !== "succeeded") {
128
+ logger.error('[tryGetKeyUrl] Unexpected data status', {
129
+ status: response.data.status,
130
+ });
131
+ throw new FheError({ code: FheErrorCode.JazzUnexpectedResponse, message: `Unexpected data status: ${response.data.status}` });
132
+ }
133
+ const result = response.data.response;
134
+ // Extract and format key URL result
135
+ const keyUrlResult = {
136
+ publicKeySource: {
137
+ id: result.fheKeyInfo[0].fhePublicKey.dataId,
138
+ url: result.fheKeyInfo[0].fhePublicKey.urls[0],
139
+ },
140
+ crsSource: {
141
+ id: result.crs['2048'].dataId,
142
+ url: result.crs['2048'].urls[0],
143
+ capacity: 2048,
144
+ },
145
+ };
146
+ logger.debug('[tryGetKeyUrl] Key URL retrieved successfully', {
147
+ dataId: keyUrlResult.publicKeySource.id,
148
+ crsId: keyUrlResult.crsSource.id,
149
+ });
150
+ this.onProgress({
151
+ status: "get_200",
152
+ });
153
+ return keyUrlResult;
154
+ }
155
+ catch (error) {
156
+ this.logError(error);
157
+ this.onProgress({
158
+ status: "get_error",
159
+ error: error?.message,
160
+ });
161
+ throw error;
162
+ }
163
+ }, "tryGetKeyUrl", { path: this.path, operation: this.operation }, undefined // No callback needed
164
+ );
165
+ }
166
+ /**
167
+ * Submits the job via POST request.
168
+ *
169
+ * @param client - Authenticated Axios instance
170
+ * @returns Job ID
171
+ * @throws Error if submission fails
172
+ */
173
+ async tryPostLoop(client) {
174
+ logger.debug(() => ['[tryPostLoop] Submitting job via POST', {
175
+ path: this.path,
176
+ payload: formatValue(this.payload),
177
+ }]);
178
+ const retryHandler = new TimeoutRetryHandler({ ...this._retryOptions });
179
+ return await retryHandler.withRetry(async () => {
180
+ try {
181
+ logger.trace('[tryPostLoop] Sending POST request', {
182
+ path: this.path,
183
+ payloadKeys: Object.keys(this.payload),
184
+ });
185
+ const response = await client.post(this.path, this.payload);
186
+ // HTTP 202 Accepted - job queued successfully
187
+ if (response.status === 202) {
188
+ this._jobId = response.data.result.jobId;
189
+ logger.debug('[tryPostLoop] Job submitted successfully', {
190
+ operation: this.operation,
191
+ jobId: this._jobId,
192
+ requestId: response.data.requestId,
193
+ });
194
+ this.onProgress({
195
+ status: "post_202"
196
+ });
197
+ return this._jobId;
198
+ }
199
+ // HTTP 200 OK - job completed immediately (edge case)
200
+ if (response.status === 200) {
201
+ logger.warn('[tryPostLoop] Job completed immediately (edge case)', {
202
+ operation: this.operation,
203
+ status: response.data.status,
204
+ requestId: response.data.requestId,
205
+ });
206
+ // Store jobId for GET loop, but we might not need to poll
207
+ this._jobId = response.data.result.jobId;
208
+ this.onProgress({
209
+ status: "post_200"
210
+ });
211
+ return this._jobId;
212
+ }
213
+ // Unexpected status
214
+ logger.error('[tryPostLoop] Unsupported response status', {
215
+ status: response.status,
216
+ expected: ['200', '202'],
217
+ });
218
+ throw new FheError({ code: FheErrorCode.JazzUnexpectedResponse, message: `Unsupported response status: ${response.status}` });
219
+ }
220
+ catch (error) {
221
+ this.logError(error);
222
+ this.onProgress({
223
+ status: "post_error",
224
+ error: error?.message,
225
+ });
226
+ throw error;
227
+ }
228
+ }, "tryPostLoop", { path: this.path, operation: this.operation }, async () => {
229
+ // Optional callback after failure - can be used for logging or cleanup
230
+ logger.warn('[tryPostLoop] POST retry attempt failed', {
231
+ operation: this.operation,
232
+ jobId: this._jobId,
233
+ });
234
+ });
235
+ }
236
+ /**
237
+ * Polls for job completion via GET requests.
238
+ *
239
+ * @param client - Authenticated Axios instance
240
+ * @returns Processed result
241
+ * @throws Error if polling fails or job fails
242
+ */
243
+ async tryGetLoop(client) {
244
+ logger.debug('[tryGetLoop] Starting job polling', {
245
+ jobId: this._jobId,
246
+ operation: this.operation,
247
+ });
248
+ // Configure retry handler with longer timeout and retryable status codes
249
+ const retryHandler = new TimeoutRetryHandler({
250
+ maxRetryTimeMs: 2 * 60 * 1000, // 2 minutes max polling time
251
+ retryableStatusCodes: [202], // Retry on "still processing"
252
+ ...this._retryOptions,
253
+ });
254
+ return await retryHandler.withRetry(async () => {
255
+ try {
256
+ const endpoint = `${this.path}/${this._jobId}`;
257
+ logger.trace('[tryGetLoop] Polling job status', {
258
+ endpoint,
259
+ jobId: this._jobId,
260
+ });
261
+ const response = await client.get(endpoint);
262
+ // HTTP 200 OK - job completed successfully
263
+ if (response.status === 200) {
264
+ const resultData = response.data.result;
265
+ logger.debug('[tryGetLoop] Job completed', {
266
+ operation: this.operation,
267
+ jobId: this._jobId,
268
+ status: response.data.status,
269
+ });
270
+ const result = this.processSuccessfulResult(resultData);
271
+ this.onProgress({
272
+ status: "get_200",
273
+ });
274
+ return result;
275
+ }
276
+ // HTTP 202 Accepted - job still processing
277
+ if (response.status === 202) {
278
+ // const waitTimeMs = this.extractRetryAfter(response.headers?.['retry-after']);
279
+ const waitTimeMs = 500;
280
+ logger.debug('[tryGetLoop] Job still processing', {
281
+ jobId: this._jobId,
282
+ operation: this.operation,
283
+ retryAfterMs: waitTimeMs,
284
+ });
285
+ this.onProgress({
286
+ status: "get_202",
287
+ });
288
+ // Throw a retryable FheError carrying the server-provided wait time.
289
+ throw new FheError({
290
+ code: FheErrorCode.Network,
291
+ message: 'Job still processing (202 Accepted)',
292
+ retryable: true,
293
+ retryAfterMs: waitTimeMs,
294
+ context: { jobId: this._jobId, status: 202 },
295
+ });
296
+ }
297
+ // Unexpected status
298
+ logger.error('[tryGetLoop] Unsupported response status', {
299
+ status: response.status,
300
+ expected: ['200', '202'],
301
+ jobId: this._jobId,
302
+ });
303
+ throw new FheError({ code: FheErrorCode.JazzUnexpectedResponse, message: `Unsupported response status: ${response.status}` });
304
+ }
305
+ catch (error) {
306
+ this.logError(error);
307
+ this.onProgress({
308
+ status: "get_error",
309
+ error: error?.message,
310
+ });
311
+ throw error;
312
+ }
313
+ }, "tryGetLoop", { jobId: this._jobId, operation: this.operation }, async () => {
314
+ logger.warn('[tryGetLoop] GET retry attempt failed', {
315
+ jobId: this._jobId,
316
+ operation: this.operation,
317
+ });
318
+ });
319
+ }
320
+ /**
321
+ * Processes successful result data based on operation type.
322
+ *
323
+ * @param resultData - Raw result data from the API
324
+ * @returns Typed result object
325
+ * @throws Error if operation is unsupported or result is invalid
326
+ */
327
+ processSuccessfulResult(resultData) {
328
+ logger.debug('[processSuccessfulResult] Processing result', {
329
+ operation: this.operation,
330
+ resultType: typeof resultData,
331
+ });
332
+ switch (this.operation) {
333
+ case 'INPUT_PROOF': {
334
+ logger.trace('[processSuccessfulResult] Processing INPUT_PROOF result');
335
+ const inputProofResult = resultData;
336
+ if (!inputProofResult.accepted) {
337
+ logger.error('[processSuccessfulResult] INPUT_PROOF rejected');
338
+ throw new FheError({ code: FheErrorCode.JazzRequestRejected, message: 'INPUT_PROOF request rejected' });
339
+ }
340
+ // Type guard for accepted result
341
+ const accepted = inputProofResult;
342
+ const result = {
343
+ extraData: accepted.extraData,
344
+ signatures: accepted.signatures,
345
+ handles: accepted.handles,
346
+ };
347
+ logger.debug('[processSuccessfulResult] INPUT_PROOF processed successfully', {
348
+ signaturesCount: result.signatures.length,
349
+ handlesCount: result.handles.length,
350
+ });
351
+ return result;
352
+ }
353
+ case 'PUBLIC_DECRYPT': {
354
+ logger.trace('[processSuccessfulResult] Processing PUBLIC_DECRYPT result');
355
+ const result = resultData;
356
+ logger.debug('[processSuccessfulResult] PUBLIC_DECRYPT processed successfully', {
357
+ signaturesCount: result.signatures.length,
358
+ hasDecryptedValue: !!result.decryptedValue,
359
+ });
360
+ return result;
361
+ }
362
+ case 'USER_DECRYPT': {
363
+ logger.trace('[processSuccessfulResult] Processing USER_DECRYPT result');
364
+ const userDecryptResult = resultData;
365
+ const result = userDecryptResult.result;
366
+ logger.debug('[processSuccessfulResult] USER_DECRYPT processed successfully', {
367
+ resultCount: result.length,
368
+ });
369
+ return result;
370
+ }
371
+ default: {
372
+ logger.error('[processSuccessfulResult] Unsupported operation', {
373
+ operation: this.operation,
374
+ });
375
+ throw new FheError({ code: FheErrorCode.Unsupported, message: `Unsupported operation: ${this.operation}` });
376
+ }
377
+ }
378
+ }
379
+ /**
380
+ * Extracts retry-after time from header value.
381
+ * Supports both seconds (numeric) and HTTP-date formats.
382
+ *
383
+ * @param retryAfter - Raw Retry-After header value
384
+ * @returns Wait time in milliseconds, or undefined if parsing fails
385
+ */
386
+ extractRetryAfter(retryAfter) {
387
+ if (!retryAfter) {
388
+ logger.trace('[extractRetryAfter] No Retry-After header present');
389
+ return undefined;
390
+ }
391
+ logger.trace('[extractRetryAfter] Parsing Retry-After header', {
392
+ rawValue: retryAfter,
393
+ type: typeof retryAfter,
394
+ });
395
+ // Parse Retry-After: can be seconds (number) or HTTP-date (RFC 7231)
396
+ if (typeof retryAfter === 'string') {
397
+ // Try parsing as seconds
398
+ const parsed = parseInt(retryAfter, 10);
399
+ if (!isNaN(parsed)) {
400
+ // Retry-After is in seconds
401
+ const waitMs = parsed * 1000;
402
+ logger.trace('[extractRetryAfter] Parsed as seconds', {
403
+ seconds: parsed,
404
+ waitMs,
405
+ });
406
+ return waitMs;
407
+ }
408
+ else {
409
+ // Try to parse as HTTP-date
410
+ const date = new Date(retryAfter);
411
+ if (!isNaN(date.getTime())) {
412
+ const now = Date.now();
413
+ const waitMs = Math.max(0, date.getTime() - now);
414
+ logger.trace('[extractRetryAfter] Parsed as HTTP-date', {
415
+ date: retryAfter,
416
+ waitMs,
417
+ });
418
+ return waitMs;
419
+ }
420
+ logger.warn('[extractRetryAfter] Failed to parse Retry-After string', {
421
+ value: retryAfter,
422
+ });
423
+ }
424
+ }
425
+ else if (typeof retryAfter === 'number') {
426
+ const waitMs = retryAfter * 1000;
427
+ logger.trace('[extractRetryAfter] Parsed as numeric seconds', {
428
+ seconds: retryAfter,
429
+ waitMs,
430
+ });
431
+ return waitMs;
432
+ }
433
+ return undefined;
434
+ }
435
+ /**
436
+ * Logs errors with context for debugging.
437
+ *
438
+ * @param error - Error object to log
439
+ */
440
+ logError(error) {
441
+ const errorContext = {
442
+ operation: this.operation,
443
+ jobId: this._jobId,
444
+ path: this.path,
445
+ };
446
+ if (error.response) {
447
+ const { status, data } = error.response;
448
+ logger.error('[JazzAsyncRequest] HTTP error', {
449
+ ...errorContext,
450
+ status,
451
+ data: data?.error || data?.message || data,
452
+ headers: error.response.headers,
453
+ });
454
+ }
455
+ else if (error.request) {
456
+ logger.error('[JazzAsyncRequest] No response received', {
457
+ ...errorContext,
458
+ message: error.message,
459
+ });
460
+ }
461
+ else if (isFheError(error)) {
462
+ if (error.retryable) {
463
+ logger.warn('[JazzAsyncRequest] Retryable FHE error', {
464
+ ...errorContext,
465
+ code: error.code,
466
+ message: error.message,
467
+ retryAfterMs: error.retryAfterMs,
468
+ });
469
+ }
470
+ else {
471
+ logger.error('[JazzAsyncRequest] FHE error', {
472
+ ...errorContext,
473
+ code: error.code,
474
+ message: error.message,
475
+ });
476
+ }
477
+ }
478
+ else if (error.code === 202) {
479
+ logger.trace('[JazzAsyncRequest] 202 accepted', {
480
+ ...errorContext,
481
+ message: error.message,
482
+ });
483
+ }
484
+ else {
485
+ logger.error('[JazzAsyncRequest] Request setup error', {
486
+ ...errorContext,
487
+ message: error.message,
488
+ stack: error.stack,
489
+ });
490
+ }
491
+ }
492
+ async onProgress(_args) {
493
+ const args = {
494
+ ..._args,
495
+ operation: this.operation,
496
+ jobId: this._jobId,
497
+ elapsed: Date.now() - this._startTimestamp,
498
+ };
499
+ const onProgressFunc = this._onProgress;
500
+ if (onProgressFunc) {
501
+ // Promise.resolve().then(() => {
502
+ // onProgressFunc(args);
503
+ // });
504
+ queueMicrotask(() => {
505
+ try {
506
+ onProgressFunc(args);
507
+ }
508
+ catch (error) {
509
+ logger.warn('[JazzAsyncRequest.onProgress] listener failed', { error });
510
+ }
511
+ });
512
+ }
513
+ }
514
+ }
515
+ //# sourceMappingURL=jazz-async-request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jazz-async-request.js","sourceRoot":"","sources":["../../../src/jazz/module/jazz-async-request.ts"],"names":[],"mappings":"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"}