@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,21 @@
1
+ import { BrowserWorkerSideTransport, BrowserWorkerTransport } from "./worker-transport.browser.js";
2
+ import { FheWasmClientDirect, FheWasmClientViaWorker } from "./fhe-wasm-client.js";
3
+ import { WasmWorkerClient } from "./worker-client.js";
4
+ export function getWorkerTransport() {
5
+ return new BrowserWorkerSideTransport();
6
+ }
7
+ function getWasmClient() {
8
+ const worker = new Worker(new URL("./worker.js", import.meta.url), {
9
+ type: "module"
10
+ });
11
+ const client = new WasmWorkerClient(new BrowserWorkerTransport(worker));
12
+ return client;
13
+ }
14
+ export function createFheWasmClient(options) {
15
+ const useWorker = options?.useWorker ?? true;
16
+ if (useWorker) {
17
+ return new FheWasmClientViaWorker(getWasmClient());
18
+ }
19
+ return new FheWasmClientDirect();
20
+ }
21
+ //# sourceMappingURL=worker-client.browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-client.browser.js","sourceRoot":"","sources":["../../src/wasm/worker-client.browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACnG,OAAO,EAAiB,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAClG,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAItD,MAAM,UAAU,kBAAkB;IAChC,OAAO,IAAI,0BAA0B,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,aAAa;IACpB,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QACjE,IAAI,EAAE,QAAQ;KACf,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,IAAI,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC;IACxE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAiC;IACnE,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC;IAC7C,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,IAAI,sBAAsB,CAAC,aAAa,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,IAAI,mBAAmB,EAAE,CAAC;AACnC,CAAC"}
@@ -0,0 +1,34 @@
1
+ import type { WorkerTransport } from "./worker-transport.js";
2
+ import { EncryptWithZkProofInputU8 } from "./fhe-wasm-client.js";
3
+ /**
4
+ * Client for managing WASM worker communication
5
+ */
6
+ export declare class WasmWorkerClient {
7
+ private transport;
8
+ private pendingRequests;
9
+ private ready;
10
+ private readyPromise;
11
+ private resolveReady;
12
+ private readonly timeoutMs;
13
+ constructor(transport: WorkerTransport, timeoutMs?: number);
14
+ /**
15
+ * Handle incoming worker messages
16
+ */
17
+ private handleMessage;
18
+ /**
19
+ * Handle worker transport errors
20
+ */
21
+ private handleError;
22
+ /**
23
+ * Encrypt integers with zero-knowledge proof via worker
24
+ */
25
+ encryptIntegerWithZkProof(args: EncryptWithZkProofInputU8): Promise<Uint8Array>;
26
+ /**
27
+ * Check if worker is ready
28
+ */
29
+ isReady(): boolean;
30
+ /**
31
+ * Clean up pending requests
32
+ */
33
+ cleanup(): void;
34
+ }
@@ -0,0 +1,160 @@
1
+ import { logger } from '../core/logger.js';
2
+ import { FheErrorCode } from '../core/errors/error-codes.js';
3
+ import { FheError } from '../core/errors/fhe-error.js';
4
+ /**
5
+ * Generate unique request ID
6
+ */
7
+ function getUUID() {
8
+ return `${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;
9
+ }
10
+ /**
11
+ * Client for managing WASM worker communication
12
+ */
13
+ export class WasmWorkerClient {
14
+ transport;
15
+ pendingRequests = new Map();
16
+ ready = false;
17
+ readyPromise;
18
+ resolveReady;
19
+ timeoutMs;
20
+ constructor(transport, timeoutMs = 30000) {
21
+ this.transport = transport;
22
+ this.timeoutMs = timeoutMs;
23
+ this.transport.onMessage(this.handleMessage.bind(this));
24
+ this.transport.onError(this.handleError.bind(this));
25
+ this.readyPromise = new Promise(resolve => {
26
+ this.resolveReady = resolve;
27
+ });
28
+ logger.debug('WasmWorkerClient created', { timeoutMs: this.timeoutMs });
29
+ }
30
+ /**
31
+ * Handle incoming worker messages
32
+ */
33
+ handleMessage(msg) {
34
+ try {
35
+ logger.debug('Worker message received', { cmd: msg.cmd, id: msg.id });
36
+ // Handle ready event
37
+ if (msg.cmd === "ready" && !this.ready) {
38
+ this.ready = true;
39
+ this.resolveReady();
40
+ logger.info('Worker ready');
41
+ return;
42
+ }
43
+ // Handle encrypt response
44
+ if (msg.cmd === "encrypt") {
45
+ const pending = this.pendingRequests.get(msg.id);
46
+ if (!pending) {
47
+ logger.warn('No pending request found for ID', { id: msg.id });
48
+ return;
49
+ }
50
+ this.pendingRequests.delete(msg.id);
51
+ clearTimeout(pending.timeout);
52
+ if (msg.code === "OK") {
53
+ logger.debug('Encrypt request succeeded', { id: msg.id });
54
+ pending.resolve(new Uint8Array(msg.result));
55
+ }
56
+ else {
57
+ logger.warn('Encrypt request failed', { id: msg.id, message: msg.message });
58
+ pending.reject(new FheError({ code: FheErrorCode.EncryptionFailed, message: msg.message ?? 'WASM worker encryption failed' }));
59
+ }
60
+ }
61
+ }
62
+ catch (error) {
63
+ logger.error('Error handling worker message', { error });
64
+ }
65
+ }
66
+ /**
67
+ * Handle worker transport errors
68
+ */
69
+ handleError(error) {
70
+ logger.error('Worker transport error', { error });
71
+ // Reject all pending requests
72
+ for (const [id, pending] of this.pendingRequests) {
73
+ clearTimeout(pending.timeout);
74
+ pending.reject(new FheError({ code: FheErrorCode.Network, message: `Worker transport error: ${error.message}`, cause: error }));
75
+ this.pendingRequests.delete(id);
76
+ }
77
+ }
78
+ /**
79
+ * Encrypt integers with zero-knowledge proof via worker
80
+ */
81
+ async encryptIntegerWithZkProof(args) {
82
+ try {
83
+ logger.debug('Starting encryption with ZK proof via worker', {
84
+ inputSize: args.input.length,
85
+ pkSize: args.pk.length,
86
+ crsSize: args.crs.length,
87
+ metadataSize: args.metadata.length,
88
+ refresh: args.refresh,
89
+ });
90
+ // Wait for worker to be ready
91
+ await this.readyPromise;
92
+ const id = getUUID();
93
+ return new Promise((resolve, reject) => {
94
+ // Set timeout for request
95
+ const timeout = setTimeout(() => {
96
+ this.pendingRequests.delete(id);
97
+ const errorMsg = `Encrypt request timeout after ${this.timeoutMs}ms (ID: ${id})`;
98
+ logger.error(errorMsg);
99
+ reject(new FheError({ code: FheErrorCode.Timeout, message: errorMsg }));
100
+ }, this.timeoutMs);
101
+ // Store pending request
102
+ this.pendingRequests.set(id, { resolve, reject, timeout });
103
+ // Prepare transferable buffers
104
+ const buffers = [
105
+ args.pk.buffer,
106
+ args.crs.buffer,
107
+ args.input.buffer,
108
+ args.metadata.buffer,
109
+ ];
110
+ // Send message to worker
111
+ try {
112
+ this.transport.postMessage({
113
+ cmd: "encrypt",
114
+ id,
115
+ args: {
116
+ pk: args.pk.buffer,
117
+ crs: args.crs.buffer,
118
+ input: args.input.buffer,
119
+ metadata: args.metadata.buffer,
120
+ refresh: args.refresh,
121
+ },
122
+ }, buffers);
123
+ logger.debug('Encrypt request sent to worker', { id });
124
+ }
125
+ catch (error) {
126
+ clearTimeout(timeout);
127
+ this.pendingRequests.delete(id);
128
+ logger.error('Failed to post encrypt message to worker', { id, error });
129
+ reject(new FheError({
130
+ code: FheErrorCode.Network,
131
+ message: `Failed to send encrypt request: ${error instanceof Error ? error.message : String(error)}`,
132
+ cause: error,
133
+ }));
134
+ }
135
+ });
136
+ }
137
+ catch (error) {
138
+ logger.error('encryptIntegerWithZkProof failed', { error });
139
+ throw error;
140
+ }
141
+ }
142
+ /**
143
+ * Check if worker is ready
144
+ */
145
+ isReady() {
146
+ return this.ready;
147
+ }
148
+ /**
149
+ * Clean up pending requests
150
+ */
151
+ cleanup() {
152
+ logger.info('Cleaning up WasmWorkerClient');
153
+ for (const [id, pending] of this.pendingRequests) {
154
+ clearTimeout(pending.timeout);
155
+ pending.reject(new FheError({ code: FheErrorCode.Aborted, message: 'Client cleaned up' }));
156
+ this.pendingRequests.delete(id);
157
+ }
158
+ }
159
+ }
160
+ //# sourceMappingURL=worker-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-client.js","sourceRoot":"","sources":["../../src/wasm/worker-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { NodeWorkerSideTransport } from "./worker-transport.node.js";
2
+ import { FheWasmClient } from "./fhe-wasm-client.js";
3
+ export declare function getWorkerTransport(): NodeWorkerSideTransport;
4
+ export declare function createFheWasmClient(options?: {
5
+ useWorker?: boolean;
6
+ }): FheWasmClient;
@@ -0,0 +1,20 @@
1
+ import { Worker } from "node:worker_threads";
2
+ import { WasmWorkerClient } from "./worker-client.js";
3
+ import { NodeWorkerTransport, NodeWorkerSideTransport } from "./worker-transport.node.js";
4
+ import { FheWasmClientDirect, FheWasmClientViaWorker } from "./fhe-wasm-client.js";
5
+ export function getWorkerTransport() {
6
+ return new NodeWorkerSideTransport();
7
+ }
8
+ function getWasmClient() {
9
+ const worker = new Worker(new URL("./worker.js", import.meta.url));
10
+ const client = new WasmWorkerClient(new NodeWorkerTransport(worker));
11
+ return client;
12
+ }
13
+ export function createFheWasmClient(options) {
14
+ const useWorker = options?.useWorker ?? false;
15
+ if (useWorker) {
16
+ return new FheWasmClientViaWorker(getWasmClient());
17
+ }
18
+ return new FheWasmClientDirect();
19
+ }
20
+ //# sourceMappingURL=worker-client.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-client.node.js","sourceRoot":"","sources":["../../src/wasm/worker-client.node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAC1F,OAAO,EAAiB,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAElG,MAAM,UAAU,kBAAkB;IAChC,OAAO,IAAI,uBAAuB,EAAE,CAAC;AACvC,CAAC;AAED,SAAS,aAAa;IACpB,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;IACrE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAiC;IACnE,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,KAAK,CAAC;IAC9C,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,IAAI,sBAAsB,CAAC,aAAa,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,IAAI,mBAAmB,EAAE,CAAC;AACnC,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { EncryptWithZkProofInput } from "./fhe-wasm-module.js";
2
+ /**
3
+ * Base interface for all worker messages
4
+ */
5
+ export interface WorkerMessageBase {
6
+ cmd: string;
7
+ }
8
+ /**
9
+ * Base interface for worker requests with request ID
10
+ */
11
+ export interface WorkerRequestBase extends WorkerMessageBase {
12
+ id: string;
13
+ }
14
+ /**
15
+ * Base interface for worker responses with status code
16
+ */
17
+ export interface WorkerResponseBase extends WorkerMessageBase {
18
+ id: string;
19
+ code: "OK" | "ERROR";
20
+ }
21
+ /**
22
+ * Worker ready event sent during initialization
23
+ */
24
+ export interface WorkerReadyEvent extends WorkerMessageBase {
25
+ cmd: "ready";
26
+ wasmReady: boolean;
27
+ }
28
+ export type WorkerEvent = WorkerReadyEvent;
29
+ /**
30
+ * Encryption request with zero-knowledge proof parameters
31
+ */
32
+ export interface WorkerEncryptRequest extends WorkerRequestBase {
33
+ cmd: "encrypt";
34
+ args: EncryptWithZkProofInput;
35
+ }
36
+ export type WorkerRequestMessage = WorkerEncryptRequest;
37
+ /**
38
+ * Successful encryption response containing result buffer
39
+ */
40
+ export interface EncryptSuccess extends WorkerResponseBase {
41
+ cmd: "encrypt";
42
+ code: "OK";
43
+ result: ArrayBuffer;
44
+ }
45
+ /**
46
+ * Failed encryption response with error message
47
+ */
48
+ export interface EncryptError extends WorkerResponseBase {
49
+ cmd: "encrypt";
50
+ code: "ERROR";
51
+ message: string;
52
+ }
53
+ export type WorkerResponse = EncryptSuccess | EncryptError;
54
+ export type WorkerResponseMessage = WorkerResponse | WorkerEvent;
55
+ /**
56
+ * Configuration for WASM worker client
57
+ */
58
+ export interface WasmWorkerClientConfig {
59
+ workerUrl?: string;
60
+ timeoutMs?: number;
61
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=worker-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-message.js","sourceRoot":"","sources":["../../src/wasm/worker-message.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import type { WorkerTransport } from "./worker-transport.js";
2
+ export declare class BrowserWorkerTransport implements WorkerTransport {
3
+ private worker;
4
+ constructor(worker: Worker);
5
+ postMessage(message: any, transfer?: Transferable[]): void;
6
+ onMessage(callback: (message: any) => void): void;
7
+ onError(callback: (error: Error) => void): void;
8
+ close(): void;
9
+ }
10
+ export declare class BrowserWorkerSideTransport implements WorkerTransport {
11
+ postMessage(message: any, transfer?: Transferable[]): void;
12
+ onMessage(callback: (message: any) => void): void;
13
+ onError(_callback: (error: Error) => void): void;
14
+ close(): void;
15
+ }
@@ -0,0 +1,35 @@
1
+ import { FheErrorCode } from "../core/errors/error-codes.js";
2
+ import { FheError } from "../core/errors/fhe-error.js";
3
+ export class BrowserWorkerTransport {
4
+ worker;
5
+ constructor(worker) {
6
+ this.worker = worker;
7
+ }
8
+ postMessage(message, transfer) {
9
+ this.worker.postMessage(message, transfer ?? []);
10
+ }
11
+ onMessage(callback) {
12
+ this.worker.addEventListener("message", e => callback(e.data));
13
+ }
14
+ onError(callback) {
15
+ this.worker.addEventListener("error", (e) => {
16
+ callback(e.error ?? new FheError({ code: FheErrorCode.Network, message: e.message ?? "Worker error" }));
17
+ });
18
+ }
19
+ close() {
20
+ this.worker.terminate();
21
+ }
22
+ }
23
+ export class BrowserWorkerSideTransport {
24
+ postMessage(message, transfer) {
25
+ self.postMessage(message, transfer ?? []);
26
+ }
27
+ onMessage(callback) {
28
+ self.addEventListener("message", (e) => callback(e.data));
29
+ }
30
+ onError(_callback) { }
31
+ close() {
32
+ self.close();
33
+ }
34
+ }
35
+ //# sourceMappingURL=worker-transport.browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-transport.browser.js","sourceRoot":"","sources":["../../src/wasm/worker-transport.browser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEvD,MAAM,OAAO,sBAAsB;IACb;IAApB,YAAoB,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAI,CAAC;IAEvC,WAAW,CAAC,OAAY,EAAE,QAAyB;QACjD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,SAAS,CAAC,QAAgC;QACxC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,CAAC,QAAgC;QACtC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YAC1C,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,QAAQ,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,cAAc,EAAE,CAAC,CAAC,CAAC;QAC1G,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;IAC1B,CAAC;CACF;AAED,MAAM,OAAO,0BAA0B;IACrC,WAAW,CAAC,OAAY,EAAE,QAAyB;QACjD,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,SAAS,CAAC,QAAgC;QACxC,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,CAAC,SAAiC,IAAwB,CAAC;IAElE,KAAK;QACH,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ export interface WorkerTransport {
2
+ postMessage(message: any, transfer?: Transferable[]): void;
3
+ onMessage(callback: (message: any) => void): void;
4
+ onError(callback: (error: Error) => void): void;
5
+ close(): void;
6
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=worker-transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-transport.js","sourceRoot":"","sources":["../../src/wasm/worker-transport.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import { type Worker } from "node:worker_threads";
2
+ import type { WorkerTransport } from "./worker-transport.js";
3
+ export declare class NodeWorkerTransport implements WorkerTransport {
4
+ private worker;
5
+ constructor(worker: Worker);
6
+ postMessage(message: any, transfer?: Transferable[]): void;
7
+ onMessage(callback: (message: any) => void): void;
8
+ onError(callback: (error: Error) => void): void;
9
+ close(): void;
10
+ }
11
+ export declare class NodeWorkerSideTransport implements WorkerTransport {
12
+ constructor();
13
+ postMessage(message: any, transfer?: Transferable[]): void;
14
+ onMessage(callback: (message: any) => void): void;
15
+ onError(_callback: (error: Error) => void): void;
16
+ close(): void;
17
+ }
@@ -0,0 +1,39 @@
1
+ import { parentPort } from "node:worker_threads";
2
+ import { FheErrorCode } from "../core/errors/error-codes.js";
3
+ import { FheError } from "../core/errors/fhe-error.js";
4
+ export class NodeWorkerTransport {
5
+ worker;
6
+ constructor(worker) {
7
+ this.worker = worker;
8
+ }
9
+ postMessage(message, transfer) {
10
+ this.worker.postMessage(message, transfer);
11
+ }
12
+ onMessage(callback) {
13
+ this.worker.on("message", callback);
14
+ }
15
+ onError(callback) {
16
+ this.worker.on("error", callback);
17
+ }
18
+ close() {
19
+ this.worker.terminate();
20
+ }
21
+ }
22
+ export class NodeWorkerSideTransport {
23
+ constructor() {
24
+ if (!parentPort) {
25
+ throw new FheError({ code: FheErrorCode.Unsupported, message: "parentPort is null" });
26
+ }
27
+ }
28
+ postMessage(message, transfer) {
29
+ parentPort.postMessage(message, transfer);
30
+ }
31
+ onMessage(callback) {
32
+ parentPort.on("message", callback);
33
+ }
34
+ onError(_callback) { }
35
+ close() {
36
+ parentPort.close();
37
+ }
38
+ }
39
+ //# sourceMappingURL=worker-transport.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-transport.node.js","sourceRoot":"","sources":["../../src/wasm/worker-transport.node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAe,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEvD,MAAM,OAAO,mBAAmB;IACV;IAApB,YAAoB,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAI,CAAC;IAEvC,WAAW,CAAC,OAAY,EAAE,QAAyB;QACjD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,QAAe,CAAC,CAAC;IACpD,CAAC;IAED,SAAS,CAAC,QAAgC;QACxC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,CAAC,QAAgC;QACtC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;IAC1B,CAAC;CACF;AAGD,MAAM,OAAO,uBAAuB;IAClC;QACE,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,QAAQ,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,WAAW,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IAED,WAAW,CAAC,OAAY,EAAE,QAAyB;QACjD,UAAW,CAAC,WAAW,CAAC,OAAO,EAAE,QAAe,CAAC,CAAC;IACpD,CAAC;IAED,SAAS,CAAC,QAAgC;QACxC,UAAW,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,CAAC,SAAiC,IAAwB,CAAC;IAElE,KAAK;QACH,UAAW,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;CACF"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,69 @@
1
+ /// <reference lib="webworker" />
2
+ import { getWorkerTransport } from '#worker-client';
3
+ import { logger } from '../core/logger.js';
4
+ import { encryptIntegerWithZkProof, loadFheWasmModule } from './fhe-wasm-module.js';
5
+ const transport = getWorkerTransport();
6
+ /**
7
+ * Handle encrypt request with zero-knowledge proof
8
+ */
9
+ async function handleEncryptIntegerWithZkProof(data) {
10
+ const { cmd, id, args } = data;
11
+ try {
12
+ logger.debug('[Worker] Processing encrypt request', { id, refresh: args.refresh });
13
+ // Execute encryption
14
+ const res = await encryptIntegerWithZkProof(args);
15
+ // Send success response with transferable buffer
16
+ transport.postMessage({
17
+ cmd,
18
+ id,
19
+ code: "OK",
20
+ result: res.result.buffer,
21
+ }, [res.result.buffer]);
22
+ logger.debug('[Worker] Encrypt request completed successfully', { id });
23
+ }
24
+ catch (error) {
25
+ // Send error response
26
+ const errorMessage = error instanceof Error ? error.message : String(error);
27
+ logger.error('[Worker] Encrypt request failed', { id, error: errorMessage });
28
+ transport.postMessage({
29
+ cmd,
30
+ id,
31
+ code: "ERROR",
32
+ message: errorMessage,
33
+ });
34
+ }
35
+ }
36
+ /**
37
+ * Set up message handler
38
+ */
39
+ transport.onMessage(async (message) => {
40
+ try {
41
+ const msg = message;
42
+ logger.debug('[Worker] Received message', { cmd: msg.cmd, id: msg.id });
43
+ switch (msg.cmd) {
44
+ case 'encrypt':
45
+ await handleEncryptIntegerWithZkProof(msg);
46
+ break;
47
+ default:
48
+ logger.warn('[Worker] Unknown command received', { cmd: msg.cmd, id: msg.id });
49
+ }
50
+ }
51
+ catch (error) {
52
+ logger.error('[Worker] Failed to handle message', { error });
53
+ }
54
+ });
55
+ /**
56
+ * Initialize WASM module and signal ready
57
+ */
58
+ (async () => {
59
+ logger.info('[Worker] Initializing WASM module...');
60
+ await loadFheWasmModule();
61
+ logger.info('[Worker] WASM module loaded');
62
+ // Signal worker is ready
63
+ transport.postMessage({
64
+ cmd: "ready",
65
+ wasmReady: true,
66
+ });
67
+ logger.info('[Worker] Ready signal sent');
68
+ })();
69
+ //# sourceMappingURL=worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/wasm/worker.ts"],"names":[],"mappings":"AAAA,iCAAiC;AAEjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AASpF,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;AAEvC;;GAEG;AACH,KAAK,UAAU,+BAA+B,CAAC,IAA0B;IACvE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IAE/B,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAEnF,qBAAqB;QACrB,MAAM,GAAG,GAAG,MAAM,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAElD,iDAAiD;QACjD,SAAS,CAAC,WAAW,CACnB;YACE,GAAG;YACH,EAAE;YACF,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,MAAqB;SAChB,EAC1B,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CACpB,CAAC;QAEF,MAAM,CAAC,KAAK,CAAC,iDAAiD,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,sBAAsB;QACtB,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QAE7E,SAAS,CAAC,WAAW,CAAC;YACpB,GAAG;YACH,EAAE;YACF,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,YAAY;SACC,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACpC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,OAA+B,CAAC;QAE5C,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QAExE,QAAQ,GAAG,CAAC,GAAG,EAAE,CAAC;YAChB,KAAK,SAAS;gBACZ,MAAM,+BAA+B,CAAC,GAAG,CAAC,CAAC;gBAC3C,MAAM;YACR;gBACE,MAAM,CAAC,IAAI,CAAC,mCAAmC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC,CAAC,CAAC;AAEH;;GAEG;AACH,CAAC,KAAK,IAAI,EAAE;IACV,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACpD,MAAM,iBAAiB,EAAE,CAAC;IAC1B,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAE3C,yBAAyB;IACzB,SAAS,CAAC,WAAW,CAAC;QACpB,GAAG,EAAE,OAAO;QACZ,SAAS,EAAE,IAAI;KACW,CAAC,CAAC;IAE9B,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;AAC5C,CAAC,CAAC,EAAE,CAAC"}
package/package.json ADDED
@@ -0,0 +1,81 @@
1
+ {
2
+ "name": "@primuslabs/fhetransform-sdk",
3
+ "version": "0.4.0",
4
+ "description": "SDK for FHETransform.",
5
+ "author": "",
6
+ "keywords": [
7
+ "FHE"
8
+ ],
9
+ "license": "MIT",
10
+ "type": "module",
11
+ "main": "./dist/index.js",
12
+ "types": "./dist/index.d.ts",
13
+ "exports": {
14
+ ".": {
15
+ "types": "./dist/index.d.ts",
16
+ "import": "./dist/index.js"
17
+ }
18
+ },
19
+ "imports": {
20
+ "#runtime": {
21
+ "browser": "./dist/runtime/browser.js",
22
+ "node": "./dist/runtime/node.js",
23
+ "default": "./dist/runtime/node.js"
24
+ },
25
+ "#worker-client": {
26
+ "browser": "./dist/wasm/worker-client.browser.js",
27
+ "node": "./dist/wasm/worker-client.node.js",
28
+ "default": "./dist/wasm/worker-client.node.js"
29
+ },
30
+ "#wasm-loader": {
31
+ "browser": "./dist/wasm/wasm-loader.browser.js",
32
+ "node": "./dist/wasm/wasm-loader.node.js",
33
+ "default": "./dist/wasm/wasm-loader.node.js"
34
+ }
35
+ },
36
+ "bin": {
37
+ "eusdc-cli": "./dist/cli/eusdc.js"
38
+ },
39
+ "scripts": {
40
+ "build": "tsc && chmod +x dist/cli/*.js && npm run copy:native && npm run docs:errors",
41
+ "copy:native": "mkdir -p dist/native && cp -rf src/native/* dist/native/",
42
+ "docs:errors": "node --import tsx scripts/generate-error-docs.ts",
43
+ "test": "npx vitest run --coverage",
44
+ "usage:browser": "npx vite",
45
+ "usage:node": "npx tsx examples/full_usage.ts",
46
+ "lint": "eslint src --ext .ts",
47
+ "format": "prettier --write \"src/**/*.ts\"",
48
+ "clean": "rm -rf dist"
49
+ },
50
+ "dependencies": {
51
+ "axios": "^1.18.1",
52
+ "commander": "^15.0.0",
53
+ "ethers": "^6.15.0",
54
+ "idb-keyval": "^6.2.5",
55
+ "loglevel": "^1.9.2",
56
+ "tslog": "^5.1.0",
57
+ "unstorage": "^1.17.5"
58
+ },
59
+ "devDependencies": {
60
+ "@types/node": "^25.9.1",
61
+ "@typescript-eslint/eslint-plugin": "^8.60.0",
62
+ "@typescript-eslint/parser": "^8.60.0",
63
+ "@vitest/browser": "^4.1.10",
64
+ "@vitest/coverage-v8": "^4.1.10",
65
+ "dotenv": "^17.4.2",
66
+ "eslint": "^10.4.1",
67
+ "playwright": "^1.61.1",
68
+ "prettier": "^3.8.3",
69
+ "tsx": "^4.22.3",
70
+ "typescript": "^5.8.3",
71
+ "vite": "^8.0.14",
72
+ "vitest": "^4.1.10"
73
+ },
74
+ "engines": {
75
+ "node": ">=20",
76
+ "npm": ">=7.0.0"
77
+ },
78
+ "files": [
79
+ "dist"
80
+ ]
81
+ }