@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,61 @@
1
+ import { AxiosInstance } from "axios";
2
+ import { Auth } from "../../core/auth.js";
3
+ import { Bytes32Hex, Bytes65Hex, Bytes65HexNo0x, BytesHex, BytesHexNo0x } from "../../core/primitives.js";
4
+ /**
5
+ * Creates an Axios instance with pre-configured base URL, timeout, and authentication interceptor.
6
+ * @param baseURL - The base URL for all requests
7
+ * @param auth - Optional authentication credentials
8
+ * @returns Configured Axios instance
9
+ */
10
+ export declare function createAuthenticatedAxios(baseURL: string, auth?: Auth): AxiosInstance;
11
+ /**
12
+ * Response payload for input proof acceptance (200 OK)
13
+ * Indicates the input proof was successfully verified and accepted.
14
+ */
15
+ export type JazzResult200InputProofAccepted = {
16
+ /** Acceptance flag - always true for this type */
17
+ accepted: true;
18
+ /** Additional contextual data as hex string with 0x prefix */
19
+ extraData: BytesHex;
20
+ /** Ordered list of 32-byte handles, each as hex with 0x prefix */
21
+ handles: Bytes32Hex[];
22
+ /** Attestation signatures for input verification, ordered to match handles, each as 65-byte hex with 0x prefix */
23
+ signatures: Bytes65Hex[];
24
+ };
25
+ /**
26
+ * Response payload for input proof rejection (200 OK)
27
+ * Indicates the input proof was verified but rejected.
28
+ */
29
+ export type JazzResult200InputProofRejected = {
30
+ /** Acceptance flag - always false for this type */
31
+ accepted: false;
32
+ /** Additional contextual data as hex string with 0x prefix */
33
+ extraData: BytesHex;
34
+ };
35
+ /**
36
+ * Response payload for public decryption operation (200 OK)
37
+ * Contains decrypted values and their corresponding signatures.
38
+ */
39
+ export type JazzResult200PublicDecrypt = {
40
+ /** List of signatures as hex without 0x prefix */
41
+ signatures: BytesHexNo0x[];
42
+ /** The decrypted value as hex without 0x prefix */
43
+ decryptedValue: BytesHexNo0x;
44
+ /** Additional contextual data as hex with 0x prefix */
45
+ extraData: BytesHex;
46
+ };
47
+ /**
48
+ * Response payload for user decryption operation (200 OK)
49
+ * Contains an array of decrypted payloads with their signatures and metadata.
50
+ */
51
+ export type JazzResult200UserDecrypt = {
52
+ /** Array of decryption results, each containing payload, signature, and extra data */
53
+ result: Array<{
54
+ /** The decrypted payload as hex without 0x prefix */
55
+ payload: BytesHexNo0x;
56
+ /** The associated signature as 65-byte hex without 0x prefix */
57
+ signature: Bytes65HexNo0x;
58
+ /** Additional contextual data as hex with 0x prefix */
59
+ extraData: BytesHex;
60
+ }>;
61
+ };
@@ -0,0 +1,33 @@
1
+ import axios from "axios";
2
+ import { setAxiosAuth } from "../../core/auth.js";
3
+ import { logger } from "../../core/logger.js";
4
+ /**
5
+ * Creates an Axios instance with pre-configured base URL, timeout, and authentication interceptor.
6
+ * @param baseURL - The base URL for all requests
7
+ * @param auth - Optional authentication credentials
8
+ * @returns Configured Axios instance
9
+ */
10
+ export function createAuthenticatedAxios(baseURL, auth) {
11
+ // Enter method - log with debug level
12
+ logger.debug(`[createAuthenticatedAxios] Enter: baseURL=${baseURL}, auth=${auth ? 'provided' : 'not provided'}`);
13
+ // Create axios instance with default settings
14
+ const instance = axios.create({
15
+ baseURL,
16
+ timeout: 30000,
17
+ headers: {
18
+ 'Content-Type': 'application/json',
19
+ },
20
+ });
21
+ // Log instance creation success
22
+ logger.debug(`[createAuthenticatedAxios] Axios instance created for baseURL: ${baseURL}`);
23
+ // Attach request interceptor to inject authentication if available
24
+ instance.interceptors.request.use((config) => {
25
+ logger.trace(`[createAuthenticatedAxios] Interceptor invoked for ${config.method?.toUpperCase()} ${config.url}`);
26
+ const updatedConfig = setAxiosAuth(config, auth);
27
+ logger.debug(`[createAuthenticatedAxios] Auth applied: ${auth ? 'yes' : 'no'}`);
28
+ return updatedConfig;
29
+ });
30
+ logger.debug(`[createAuthenticatedAxios] Successfully configured and ready`);
31
+ return instance;
32
+ }
33
+ //# sourceMappingURL=jazz-p.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jazz-p.js","sourceRoot":"","sources":["../../../src/jazz/module/jazz-p.ts"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;AACzE,OAAO,EAAQ,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAG9C;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAe,EAAE,IAAW;IACnE,sCAAsC;IACtC,MAAM,CAAC,KAAK,CAAC,6CAA6C,OAAO,UAAU,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;IAEjH,8CAA8C;IAC9C,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,OAAO;QACP,OAAO,EAAE,KAAK;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;SACnC;KACF,CAAC,CAAC;IAEH,gCAAgC;IAChC,MAAM,CAAC,KAAK,CAAC,kEAAkE,OAAO,EAAE,CAAC,CAAC;IAE1F,mEAAmE;IACnE,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAkC,EAAE,EAAE;QACvE,MAAM,CAAC,KAAK,CAAC,sDAAsD,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QACjH,MAAM,aAAa,GAAG,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,4CAA4C,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAChF,OAAO,aAAa,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAC7E,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,85 @@
1
+ import { TimeoutRetryOptions } from '../../core/retryable-handler.js';
2
+ /**
3
+ * Configuration options for a download operation.
4
+ */
5
+ export interface DownloadOptions {
6
+ /** Target URL to download from */
7
+ url: string;
8
+ /** Optional timeout in milliseconds (overrides instance default) */
9
+ timeoutMs?: number;
10
+ /** Retry policy configuration */
11
+ retryOptions?: TimeoutRetryOptions;
12
+ /** AbortSignal for cancellation support */
13
+ signal?: AbortSignal;
14
+ /** Custom HTTP headers to include in the request */
15
+ headers?: Record<string, string>;
16
+ /** Response type - defaults to 'arraybuffer' for binary data */
17
+ responseType?: 'arraybuffer';
18
+ }
19
+ /**
20
+ * Result of a successful download operation.
21
+ */
22
+ export interface DownloadResult {
23
+ /** Raw binary data as Uint8Array */
24
+ data: Uint8Array;
25
+ /** MIME type from Content-Type header if present */
26
+ contentType?: string;
27
+ /** Content length from Content-Length header if present */
28
+ contentLength?: number;
29
+ /** ETag from response header if present (for caching/validation) */
30
+ etag?: string;
31
+ /** Last-Modified timestamp from response header if present */
32
+ lastModified?: string;
33
+ }
34
+ /**
35
+ * S3Downloader - Handles reliable binary downloads from S3 URLs with retry support.
36
+ *
37
+ * Features:
38
+ * - Automatic retry on transient failures (network errors, 5xx, rate limiting)
39
+ * - AbortSignal support for cancellation
40
+ * - Response header extraction (content-type, etag, etc.)
41
+ * - Size and checksum validation (optional)
42
+ */
43
+ export declare class S3Downloader {
44
+ private readonly client;
45
+ private readonly retryHandler;
46
+ /**
47
+ * Creates a new S3Downloader instance.
48
+ * @param retryOptions - Optional retry policy configuration
49
+ */
50
+ constructor(retryOptions?: TimeoutRetryOptions);
51
+ /**
52
+ * Download binary data from S3 URL with retry support.
53
+ * @param options - Download configuration
54
+ * @returns DownloadResult containing binary data and metadata
55
+ * @throws Error on non-retryable failures or after exhausting retries
56
+ */
57
+ downloadBinary(options: DownloadOptions): Promise<DownloadResult>;
58
+ /**
59
+ * Determines whether an error should trigger a retry.
60
+ * @param error - The error object from Axios or network layer
61
+ * @returns true if the error is transient and retryable
62
+ */
63
+ private isRetryableError;
64
+ /**
65
+ * Helper to download and validate binary data with optional size and checksum checks.
66
+ * @param options - Download options with optional validation parameters
67
+ * @returns Uint8Array of the downloaded data (validated)
68
+ * @throws Error if size or checksum validation fails
69
+ */
70
+ downloadAndValidate(options: DownloadOptions & {
71
+ expectedSize?: number;
72
+ expectedChecksum?: string;
73
+ }): Promise<Uint8Array>;
74
+ }
75
+ /**
76
+ * Convenience function for simple one-off S3 downloads.
77
+ * @param url - Target URL to download from
78
+ * @param options - Optional configuration (retry, signal, headers)
79
+ * @returns Uint8Array of the downloaded data
80
+ */
81
+ export declare function downloadFromS3(url: string, options?: {
82
+ retryOptions?: TimeoutRetryOptions;
83
+ signal?: AbortSignal;
84
+ headers?: Record<string, string>;
85
+ }): Promise<Uint8Array>;
@@ -0,0 +1,293 @@
1
+ import axios from 'axios';
2
+ import { TimeoutRetryHandler } from '../../core/retryable-handler.js';
3
+ import { logger } from '../../core/logger.js';
4
+ import { FheError } from '../../core/errors/fhe-error.js';
5
+ import { FheErrorCode } from '../../core/errors/error-codes.js';
6
+ /**
7
+ * S3Downloader - Handles reliable binary downloads from S3 URLs with retry support.
8
+ *
9
+ * Features:
10
+ * - Automatic retry on transient failures (network errors, 5xx, rate limiting)
11
+ * - AbortSignal support for cancellation
12
+ * - Response header extraction (content-type, etag, etc.)
13
+ * - Size and checksum validation (optional)
14
+ */
15
+ export class S3Downloader {
16
+ client;
17
+ retryHandler;
18
+ /**
19
+ * Creates a new S3Downloader instance.
20
+ * @param retryOptions - Optional retry policy configuration
21
+ */
22
+ constructor(retryOptions) {
23
+ // Enter constructor
24
+ logger.debug('[S3Downloader] Constructor called', { retryOptions: retryOptions ? 'provided' : 'default' });
25
+ // Initialize Axios client with timeout from retry options or fallback
26
+ const timeout = retryOptions?.maxRetryTimeMs || 120000;
27
+ this.client = axios.create({
28
+ timeout,
29
+ validateStatus: (status) => status >= 200 && status < 300,
30
+ });
31
+ // Initialize retry handler
32
+ this.retryHandler = new TimeoutRetryHandler(retryOptions);
33
+ logger.debug('[S3Downloader] Instance created', { timeout, retryEnabled: !!retryOptions });
34
+ }
35
+ /**
36
+ * Download binary data from S3 URL with retry support.
37
+ * @param options - Download configuration
38
+ * @returns DownloadResult containing binary data and metadata
39
+ * @throws Error on non-retryable failures or after exhausting retries
40
+ */
41
+ async downloadBinary(options) {
42
+ const { url, signal, headers = {}, responseType = 'arraybuffer' } = options;
43
+ // Log method entry
44
+ logger.debug('[S3Downloader.downloadBinary] Enter', {
45
+ url,
46
+ responseType,
47
+ headersCount: Object.keys(headers).length,
48
+ hasSignal: !!signal,
49
+ });
50
+ // Validate method - only GET is supported (implied by axios.get)
51
+ const result = await this.retryHandler.withRetry(async () => {
52
+ // Check if aborted before request
53
+ if (signal?.aborted) {
54
+ logger.warn('[S3Downloader.downloadBinary] Aborted before request', { url });
55
+ throw new FheError({ code: FheErrorCode.Aborted, message: 'Download aborted' });
56
+ }
57
+ logger.trace('[S3Downloader.downloadBinary] Sending GET request', {
58
+ url,
59
+ headers: Object.keys(headers),
60
+ });
61
+ try {
62
+ const response = await this.client.get(url, {
63
+ headers: {
64
+ ...headers,
65
+ },
66
+ responseType: responseType,
67
+ signal: signal,
68
+ // Axios will handle timeout via the instance config
69
+ });
70
+ // Check if aborted after response
71
+ if (signal?.aborted) {
72
+ logger.warn('[S3Downloader.downloadBinary] Aborted after response', { url });
73
+ throw new FheError({ code: FheErrorCode.Aborted, message: 'Download aborted after response' });
74
+ }
75
+ // Validate response status (already validated by validateStatus, but double-check)
76
+ if (response.status !== 200) {
77
+ logger.error('[S3Downloader.downloadBinary] Unexpected status', {
78
+ url,
79
+ status: response.status,
80
+ });
81
+ throw new FheError({ code: FheErrorCode.HttpError, message: `HTTP error! status: ${response.status}` });
82
+ }
83
+ // Convert ArrayBuffer to Uint8Array
84
+ const buffer = response.data;
85
+ const uint8Array = new Uint8Array(buffer);
86
+ // Extract and convert headers safely
87
+ const contentType = response.headers['content-type']
88
+ ? String(response.headers['content-type'])
89
+ : undefined;
90
+ const contentLength = response.headers['content-length']
91
+ ? parseInt(String(response.headers['content-length']), 10)
92
+ : undefined;
93
+ const etag = response.headers['etag']
94
+ ? String(response.headers['etag'])
95
+ : undefined;
96
+ const lastModified = response.headers['last-modified']
97
+ ? String(response.headers['last-modified'])
98
+ : undefined;
99
+ // Log successful download
100
+ logger.debug('[S3Downloader.downloadBinary] Download successful', {
101
+ url,
102
+ size: uint8Array.length,
103
+ contentType,
104
+ etag: etag,
105
+ });
106
+ return {
107
+ data: uint8Array,
108
+ contentType,
109
+ contentLength,
110
+ etag,
111
+ lastModified,
112
+ };
113
+ }
114
+ catch (error) {
115
+ // Handle abort errors without retry
116
+ if (error.name === 'AbortError' || error.code === 'ERR_CANCELED') {
117
+ logger.warn('[S3Downloader.downloadBinary] Request cancelled', {
118
+ url,
119
+ error: error.message,
120
+ });
121
+ throw error;
122
+ }
123
+ // Check if the error is retryable
124
+ const isRetryable = this.isRetryableError(error);
125
+ if (!isRetryable) {
126
+ logger.error('[S3Downloader.downloadBinary] Non-retryable error', {
127
+ url,
128
+ error: error.message,
129
+ code: error.code,
130
+ status: error.response?.status,
131
+ });
132
+ throw error;
133
+ }
134
+ // Log retryable error and enhance with context
135
+ logger.warn('[S3Downloader.downloadBinary] Retryable error, will retry', {
136
+ url,
137
+ error: error.message,
138
+ code: error.code,
139
+ status: error.response?.status,
140
+ });
141
+ // Wrap into a retryable FheError so the retry handler can honor it.
142
+ throw new FheError({
143
+ code: FheErrorCode.Network,
144
+ message: `S3 download failed: ${error.message}`,
145
+ retryable: true,
146
+ context: { url },
147
+ cause: error,
148
+ });
149
+ }
150
+ }, `S3Download:${url.substring(0, 50)}`, { url, headers: Object.keys(headers) }, async () => {
151
+ // Callback after failed attempt
152
+ logger.warn('[S3Downloader.downloadBinary] Retry attempt scheduled', {
153
+ url,
154
+ });
155
+ });
156
+ logger.debug('[S3Downloader.downloadBinary] Exit', {
157
+ url,
158
+ dataSize: result.data.length,
159
+ });
160
+ return result;
161
+ }
162
+ /**
163
+ * Determines whether an error should trigger a retry.
164
+ * @param error - The error object from Axios or network layer
165
+ * @returns true if the error is transient and retryable
166
+ */
167
+ isRetryableError(error) {
168
+ logger.trace('[S3Downloader.isRetryableError] Evaluating error', {
169
+ name: error.name,
170
+ code: error.code,
171
+ status: error.response?.status,
172
+ message: error.message?.substring(0, 100),
173
+ });
174
+ // Network errors - transient by nature
175
+ if (error.code === 'ECONNRESET' ||
176
+ error.code === 'ETIMEDOUT' ||
177
+ error.code === 'ENOTFOUND' ||
178
+ error.code === 'ECONNREFUSED') {
179
+ logger.trace('[S3Downloader.isRetryableError] Network error - retryable', { code: error.code });
180
+ return true;
181
+ }
182
+ // Axios timeout error
183
+ if (error.code === 'ECONNABORTED' || error.code === 'ETIMEDOUT') {
184
+ logger.trace('[S3Downloader.isRetryableError] Timeout error - retryable');
185
+ return true;
186
+ }
187
+ // Rate limiting or server errors (5xx)
188
+ if (error.response) {
189
+ const status = error.response.status;
190
+ if (status >= 500 && status < 600) {
191
+ logger.trace('[S3Downloader.isRetryableError] Server error - retryable', { status });
192
+ return true; // Server errors are retryable
193
+ }
194
+ if (status === 429) {
195
+ logger.trace('[S3Downloader.isRetryableError] Rate limiting - retryable');
196
+ return true; // Rate limiting - retry with backoff
197
+ }
198
+ if (status === 408) {
199
+ logger.trace('[S3Downloader.isRetryableError] Request timeout - retryable');
200
+ return true; // Request timeout
201
+ }
202
+ }
203
+ // Check for retryable error messages
204
+ if (error.message) {
205
+ const retryablePhrases = [
206
+ 'timeout',
207
+ 'socket hang up',
208
+ 'connection refused',
209
+ 'connection reset',
210
+ 'network error',
211
+ 'unavailable',
212
+ 'deadline exceeded',
213
+ ];
214
+ const message = error.message.toLowerCase();
215
+ for (const phrase of retryablePhrases) {
216
+ if (message.includes(phrase)) {
217
+ logger.trace('[S3Downloader.isRetryableError] Retryable phrase detected', { phrase });
218
+ return true;
219
+ }
220
+ }
221
+ }
222
+ logger.trace('[S3Downloader.isRetryableError] Error is NOT retryable');
223
+ return false;
224
+ }
225
+ /**
226
+ * Helper to download and validate binary data with optional size and checksum checks.
227
+ * @param options - Download options with optional validation parameters
228
+ * @returns Uint8Array of the downloaded data (validated)
229
+ * @throws Error if size or checksum validation fails
230
+ */
231
+ async downloadAndValidate(options) {
232
+ const { expectedSize, expectedChecksum, ...downloadOptions } = options;
233
+ logger.debug('[S3Downloader.downloadAndValidate] Enter', {
234
+ url: downloadOptions.url,
235
+ expectedSize,
236
+ hasChecksum: !!expectedChecksum,
237
+ });
238
+ const result = await this.downloadBinary(downloadOptions);
239
+ const data = result.data;
240
+ // Validate size if expected
241
+ if (expectedSize !== undefined && data.length !== expectedSize) {
242
+ logger.error('[S3Downloader.downloadAndValidate] Size mismatch', {
243
+ url: downloadOptions.url,
244
+ expected: expectedSize,
245
+ actual: data.length,
246
+ });
247
+ throw new FheError({ code: FheErrorCode.InvalidArgument, message: `Size mismatch: expected ${expectedSize}, got ${data.length}` });
248
+ }
249
+ // Validate checksum if provided (simple example - you might want to use crypto)
250
+ if (expectedChecksum) {
251
+ logger.warn('[S3Downloader.downloadAndValidate] Checksum validation requested but not implemented', {
252
+ url: downloadOptions.url,
253
+ });
254
+ // You could implement checksum verification here
255
+ // For example, using crypto.subtle or other hashing libraries
256
+ // const actualChecksum = await computeChecksum(data);
257
+ // if (actualChecksum !== expectedChecksum) {
258
+ // throw new Error(`Checksum mismatch`);
259
+ // }
260
+ }
261
+ logger.debug('[S3Downloader.downloadAndValidate] Validation passed', {
262
+ url: downloadOptions.url,
263
+ dataSize: data.length,
264
+ });
265
+ return data;
266
+ }
267
+ }
268
+ /**
269
+ * Convenience function for simple one-off S3 downloads.
270
+ * @param url - Target URL to download from
271
+ * @param options - Optional configuration (retry, signal, headers)
272
+ * @returns Uint8Array of the downloaded data
273
+ */
274
+ export async function downloadFromS3(url, options) {
275
+ // Enter function
276
+ logger.debug('[downloadFromS3] Enter', {
277
+ url: url.substring(0, 60) + (url.length > 60 ? '...' : ''),
278
+ hasRetryOptions: !!options?.retryOptions,
279
+ hasSignal: !!options?.signal,
280
+ });
281
+ const downloader = new S3Downloader(options?.retryOptions);
282
+ const result = await downloader.downloadBinary({
283
+ url,
284
+ signal: options?.signal,
285
+ headers: options?.headers,
286
+ });
287
+ logger.debug('[downloadFromS3] Exit', {
288
+ url: url.substring(0, 60) + (url.length > 60 ? '...' : ''),
289
+ dataSize: result.data.length,
290
+ });
291
+ return result.data;
292
+ }
293
+ //# sourceMappingURL=s3-download.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s3-download.js","sourceRoot":"","sources":["../../../src/jazz/module/s3-download.ts"],"names":[],"mappings":"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"}