@fhevm/sdk 1.0.0-alpha.1 → 1.0.0-alpha.3

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 (648) hide show
  1. package/_cjs/core/_version.js +1 -1
  2. package/_cjs/core/actions/base/fetchVerifiedInputProof.js +1 -1
  3. package/_cjs/core/actions/base/fetchVerifiedInputProof.js.map +1 -1
  4. package/_cjs/core/actions/base/signDecryptionPermit.js.map +1 -1
  5. package/_cjs/core/actions/chain/index.js +5 -5
  6. package/_cjs/core/actions/chain/index.js.map +1 -1
  7. package/_cjs/core/actions/chain/parseSignedDecryptionPermit.js +2 -3
  8. package/_cjs/core/actions/chain/parseSignedDecryptionPermit.js.map +1 -1
  9. package/_cjs/core/actions/chain/parseTransportKeypair.js +1 -2
  10. package/_cjs/core/actions/chain/parseTransportKeypair.js.map +1 -1
  11. package/_cjs/core/actions/decrypt/decryptValue.js +4 -1
  12. package/_cjs/core/actions/decrypt/decryptValue.js.map +1 -1
  13. package/_cjs/core/actions/decrypt/decryptValues.js +4 -1
  14. package/_cjs/core/actions/decrypt/decryptValues.js.map +1 -1
  15. package/_cjs/core/actions/decrypt/decryptValuesFromPairs.js +4 -1
  16. package/_cjs/core/actions/decrypt/decryptValuesFromPairs.js.map +1 -1
  17. package/_cjs/core/actions/decrypt/index.js.map +1 -1
  18. package/_cjs/core/actions/host/getUserDecryptionDelegationExpirationDate.js +12 -14
  19. package/_cjs/core/actions/host/getUserDecryptionDelegationExpirationDate.js.map +1 -1
  20. package/_cjs/core/base/bytes.js +8 -0
  21. package/_cjs/core/base/bytes.js.map +1 -1
  22. package/_cjs/core/base/sign.js +50 -0
  23. package/_cjs/core/base/sign.js.map +1 -0
  24. package/_cjs/core/base/typedValue.js +17 -0
  25. package/_cjs/core/base/typedValue.js.map +1 -1
  26. package/_cjs/core/base/uint.js +29 -0
  27. package/_cjs/core/base/uint.js.map +1 -1
  28. package/_cjs/core/clients/decorators/decrypt.js +3 -3
  29. package/_cjs/core/clients/decorators/decrypt.js.map +1 -1
  30. package/_cjs/core/coprocessor/ZkProof-p.js +17 -11
  31. package/_cjs/core/coprocessor/ZkProof-p.js.map +1 -1
  32. package/_cjs/core/coprocessor/ZkProofBuilder-p.js +6 -4
  33. package/_cjs/core/coprocessor/ZkProofBuilder-p.js.map +1 -1
  34. package/_cjs/core/coprocessor/encrypt.js +1 -3
  35. package/_cjs/core/coprocessor/encrypt.js.map +1 -1
  36. package/_cjs/core/coprocessor/fetchVerifiedInputProof.js +3 -4
  37. package/_cjs/core/coprocessor/fetchVerifiedInputProof.js.map +1 -1
  38. package/_cjs/core/handle/FheType.js +5 -2
  39. package/_cjs/core/handle/FheType.js.map +1 -1
  40. package/_cjs/core/host-contracts/KmsSignersContext-p.js +1 -1
  41. package/_cjs/core/host-contracts/KmsSignersContext-p.js.map +1 -1
  42. package/_cjs/core/host-contracts/checkDelegation.js +74 -0
  43. package/_cjs/core/host-contracts/checkDelegation.js.map +1 -0
  44. package/_cjs/core/host-contracts/getUserDecryptionDelegationExpirationDate.js +21 -0
  45. package/_cjs/core/host-contracts/getUserDecryptionDelegationExpirationDate.js.map +1 -0
  46. package/_cjs/core/host-contracts/isHandleDelegatedForUserDecryption-p.js +33 -0
  47. package/_cjs/core/host-contracts/isHandleDelegatedForUserDecryption-p.js.map +1 -0
  48. package/_cjs/core/host-contracts/persistAllowed.js +1 -1
  49. package/_cjs/core/host-contracts/persistAllowed.js.map +1 -1
  50. package/_cjs/core/kms/fetchKmsSignedcryptedShares-p.js +18 -8
  51. package/_cjs/core/kms/fetchKmsSignedcryptedShares-p.js.map +1 -1
  52. package/_cjs/core/kms/publicDecrypt.js +1 -4
  53. package/_cjs/core/kms/publicDecrypt.js.map +1 -1
  54. package/_cjs/core/modules/decrypt/mock.js +93 -10
  55. package/_cjs/core/modules/decrypt/mock.js.map +1 -1
  56. package/_cjs/core/modules/encrypt/mock.js +142 -12
  57. package/_cjs/core/modules/encrypt/mock.js.map +1 -1
  58. package/_cjs/core/modules/encrypt/module/api-p.js +7 -2
  59. package/_cjs/core/modules/encrypt/module/api-p.js.map +1 -1
  60. package/_cjs/core/modules/ethereum/types-ct.js +3 -0
  61. package/_cjs/core/modules/ethereum/types-ct.js.map +1 -0
  62. package/_cjs/core/modules/relayer/cleartext/fetchCoprocessorSignatures.js +68 -0
  63. package/_cjs/core/modules/relayer/cleartext/fetchCoprocessorSignatures.js.map +1 -0
  64. package/_cjs/core/modules/relayer/cleartext/fetchDelegatedUserDecrypt.js +119 -0
  65. package/_cjs/core/modules/relayer/cleartext/fetchDelegatedUserDecrypt.js.map +1 -0
  66. package/_cjs/core/modules/relayer/cleartext/fetchPublicDecrypt.js +52 -0
  67. package/_cjs/core/modules/relayer/cleartext/fetchPublicDecrypt.js.map +1 -0
  68. package/_cjs/core/modules/relayer/cleartext/fetchUserDecrypt.js +117 -0
  69. package/_cjs/core/modules/relayer/cleartext/fetchUserDecrypt.js.map +1 -0
  70. package/_cjs/core/modules/relayer/cleartext/mock.js +40 -0
  71. package/_cjs/core/modules/relayer/cleartext/mock.js.map +1 -0
  72. package/_cjs/core/modules/relayer/cleartext/signers.js +34 -0
  73. package/_cjs/core/modules/relayer/cleartext/signers.js.map +1 -0
  74. package/_cjs/core/modules/relayer/module/fetchCoprocessorSignatures.js +2 -2
  75. package/_cjs/core/modules/relayer/module/fetchCoprocessorSignatures.js.map +1 -1
  76. package/_cjs/core/modules/relayer/module/fetchDelegatedUserDecrypt.js +1 -1
  77. package/_cjs/core/modules/relayer/module/fetchDelegatedUserDecrypt.js.map +1 -1
  78. package/_cjs/core/modules/relayer/module/fetchPublicDecrypt.js +1 -1
  79. package/_cjs/core/modules/relayer/module/fetchPublicDecrypt.js.map +1 -1
  80. package/_cjs/core/modules/relayer/module/fetchUserDecrypt.js +1 -1
  81. package/_cjs/core/modules/relayer/module/fetchUserDecrypt.js.map +1 -1
  82. package/_cjs/core/modules/relayer/utils.js +16 -0
  83. package/_cjs/core/modules/relayer/utils.js.map +1 -0
  84. package/_cjs/ethers/cleartext/createFhevmCleartextBaseClient.js +17 -0
  85. package/_cjs/ethers/cleartext/createFhevmCleartextBaseClient.js.map +1 -0
  86. package/_cjs/ethers/cleartext/createFhevmCleartextClient.js +11 -0
  87. package/_cjs/ethers/cleartext/createFhevmCleartextClient.js.map +1 -0
  88. package/_cjs/ethers/cleartext/createFhevmCleartextDecryptClient.js +10 -0
  89. package/_cjs/ethers/cleartext/createFhevmCleartextDecryptClient.js.map +1 -0
  90. package/_cjs/ethers/cleartext/createFhevmCleartextEncryptClient.js +10 -0
  91. package/_cjs/ethers/cleartext/createFhevmCleartextEncryptClient.js.map +1 -0
  92. package/_cjs/ethers/cleartext/decorators/decrypt.js +9 -0
  93. package/_cjs/ethers/cleartext/decorators/decrypt.js.map +1 -0
  94. package/_cjs/ethers/cleartext/decorators/encrypt.js +9 -0
  95. package/_cjs/ethers/cleartext/decorators/encrypt.js.map +1 -0
  96. package/_cjs/ethers/cleartext/index.js +12 -0
  97. package/_cjs/ethers/cleartext/index.js.map +1 -0
  98. package/_cjs/ethers/clients/createFhevmBaseClient.js +2 -1
  99. package/_cjs/ethers/clients/createFhevmBaseClient.js.map +1 -1
  100. package/_cjs/ethers/clients/createFhevmClient.js +2 -2
  101. package/_cjs/ethers/clients/createFhevmClient.js.map +1 -1
  102. package/_cjs/ethers/clients/createFhevmDecryptClient.js +1 -1
  103. package/_cjs/ethers/clients/createFhevmDecryptClient.js.map +1 -1
  104. package/_cjs/ethers/clients/createFhevmEncryptClient.js +1 -1
  105. package/_cjs/ethers/clients/createFhevmEncryptClient.js.map +1 -1
  106. package/_cjs/{viem → ethers/clients}/decorators/decrypt.js +2 -2
  107. package/_cjs/ethers/clients/decorators/decrypt.js.map +1 -0
  108. package/_cjs/ethers/{decorators → clients/decorators}/encrypt.js +2 -2
  109. package/_cjs/ethers/clients/decorators/encrypt.js.map +1 -0
  110. package/_cjs/ethers/index.js +4 -3
  111. package/_cjs/ethers/index.js.map +1 -1
  112. package/_cjs/ethers/internal/config.js +32 -0
  113. package/_cjs/ethers/internal/config.js.map +1 -0
  114. package/_cjs/ethers/internal/ethereum-ct.js +42 -0
  115. package/_cjs/ethers/internal/ethereum-ct.js.map +1 -0
  116. package/_cjs/ethers/internal/ethers-p.js +0 -32
  117. package/_cjs/ethers/internal/ethers-p.js.map +1 -1
  118. package/_cjs/ethers/internal/runtime-ct.js +22 -0
  119. package/_cjs/ethers/internal/runtime-ct.js.map +1 -0
  120. package/_cjs/ethers/internal/runtime.js +22 -0
  121. package/_cjs/ethers/internal/runtime.js.map +1 -0
  122. package/_cjs/ethers/runtime/initFhevmDecryptRuntime.js +3 -2
  123. package/_cjs/ethers/runtime/initFhevmDecryptRuntime.js.map +1 -1
  124. package/_cjs/ethers/runtime/initFhevmEncryptRuntime.js +3 -2
  125. package/_cjs/ethers/runtime/initFhevmEncryptRuntime.js.map +1 -1
  126. package/_cjs/ethers/runtime/initFhevmRuntime.js +3 -2
  127. package/_cjs/ethers/runtime/initFhevmRuntime.js.map +1 -1
  128. package/_cjs/index.js +2 -0
  129. package/_cjs/index.js.map +1 -0
  130. package/_cjs/viem/cleartext/createFhevmCleartextBaseClient.js +17 -0
  131. package/_cjs/viem/cleartext/createFhevmCleartextBaseClient.js.map +1 -0
  132. package/_cjs/viem/cleartext/createFhevmCleartextClient.js +11 -0
  133. package/_cjs/viem/cleartext/createFhevmCleartextClient.js.map +1 -0
  134. package/_cjs/viem/cleartext/createFhevmCleartextDecryptClient.js +10 -0
  135. package/_cjs/viem/cleartext/createFhevmCleartextDecryptClient.js.map +1 -0
  136. package/_cjs/viem/cleartext/createFhevmCleartextEncryptClient.js +10 -0
  137. package/_cjs/viem/cleartext/createFhevmCleartextEncryptClient.js.map +1 -0
  138. package/_cjs/viem/cleartext/decorators/decrypt.js +9 -0
  139. package/_cjs/viem/cleartext/decorators/decrypt.js.map +1 -0
  140. package/_cjs/viem/cleartext/decorators/encrypt.js +9 -0
  141. package/_cjs/viem/cleartext/decorators/encrypt.js.map +1 -0
  142. package/_cjs/viem/cleartext/index.js +12 -0
  143. package/_cjs/viem/cleartext/index.js.map +1 -0
  144. package/_cjs/viem/clients/createFhevmBaseClient.js +2 -1
  145. package/_cjs/viem/clients/createFhevmBaseClient.js.map +1 -1
  146. package/_cjs/viem/clients/createFhevmClient.js +2 -2
  147. package/_cjs/viem/clients/createFhevmClient.js.map +1 -1
  148. package/_cjs/viem/clients/createFhevmDecryptClient.js +1 -1
  149. package/_cjs/viem/clients/createFhevmDecryptClient.js.map +1 -1
  150. package/_cjs/viem/clients/createFhevmEncryptClient.js +1 -1
  151. package/_cjs/viem/clients/createFhevmEncryptClient.js.map +1 -1
  152. package/_cjs/{ethers → viem/clients}/decorators/decrypt.js +2 -2
  153. package/_cjs/viem/clients/decorators/decrypt.js.map +1 -0
  154. package/_cjs/viem/{decorators → clients/decorators}/encrypt.js +2 -2
  155. package/_cjs/viem/clients/decorators/encrypt.js.map +1 -0
  156. package/_cjs/viem/index.js +6 -5
  157. package/_cjs/viem/index.js.map +1 -1
  158. package/_cjs/viem/internal/config.js +32 -0
  159. package/_cjs/viem/internal/config.js.map +1 -0
  160. package/_cjs/viem/internal/ethereum-ct.js +42 -0
  161. package/_cjs/viem/internal/ethereum-ct.js.map +1 -0
  162. package/_cjs/viem/internal/runtime-ct.js +22 -0
  163. package/_cjs/viem/internal/runtime-ct.js.map +1 -0
  164. package/_cjs/viem/internal/runtime.js +22 -0
  165. package/_cjs/viem/internal/runtime.js.map +1 -0
  166. package/_cjs/viem/internal/viem-p.js +0 -32
  167. package/_cjs/viem/internal/viem-p.js.map +1 -1
  168. package/_cjs/viem/runtime/initFhevmDecryptRuntime.js +2 -1
  169. package/_cjs/viem/runtime/initFhevmDecryptRuntime.js.map +1 -1
  170. package/_cjs/viem/runtime/initFhevmEncryptRuntime.js +2 -1
  171. package/_cjs/viem/runtime/initFhevmEncryptRuntime.js.map +1 -1
  172. package/_cjs/viem/runtime/initFhevmRuntime.js +2 -1
  173. package/_cjs/viem/runtime/initFhevmRuntime.js.map +1 -1
  174. package/_cjs/wasm/tfhe/startWorkers.v1.5.3.js +279 -426
  175. package/_cjs/wasm/tfhe/startWorkers.v1.5.3.js.map +7 -0
  176. package/_cjs/wasm/tfhe/tfhe.v1.5.3.js +2779 -3032
  177. package/_cjs/wasm/tfhe/tfhe.v1.5.3.js.map +7 -0
  178. package/_cjs/wasm/tfhe/tfhe_bg.v1.5.3.wasm.base64.js +29 -1
  179. package/_cjs/wasm/tfhe/tfhe_bg.v1.5.3.wasm.base64.js.map +7 -0
  180. package/_cjs/wasm/tkms/kms_lib.v0.13.10.js +1793 -1985
  181. package/_cjs/wasm/tkms/kms_lib.v0.13.10.js.map +7 -0
  182. package/_cjs/wasm/tkms/kms_lib_bg.v0.13.10.wasm.base64.js +29 -3
  183. package/_cjs/wasm/tkms/kms_lib_bg.v0.13.10.wasm.base64.js.map +7 -0
  184. package/_cjs/wasm/wasmBaseUrl.js +36 -14
  185. package/_cjs/wasm/wasmBaseUrl.js.map +7 -0
  186. package/_esm/core/_version.js +1 -1
  187. package/_esm/core/actions/base/fetchVerifiedInputProof.js +1 -1
  188. package/_esm/core/actions/base/fetchVerifiedInputProof.js.map +1 -1
  189. package/_esm/core/actions/base/signDecryptionPermit.js.map +1 -1
  190. package/_esm/core/actions/chain/index.js +4 -4
  191. package/_esm/core/actions/chain/index.js.map +1 -1
  192. package/_esm/core/actions/chain/parseSignedDecryptionPermit.js +2 -3
  193. package/_esm/core/actions/chain/parseSignedDecryptionPermit.js.map +1 -1
  194. package/_esm/core/actions/chain/parseTransportKeypair.js +1 -3
  195. package/_esm/core/actions/chain/parseTransportKeypair.js.map +1 -1
  196. package/_esm/core/actions/chain/serializeTransportKeypair.js +0 -1
  197. package/_esm/core/actions/chain/serializeTransportKeypair.js.map +1 -1
  198. package/_esm/core/actions/decrypt/decryptValue.js +5 -1
  199. package/_esm/core/actions/decrypt/decryptValue.js.map +1 -1
  200. package/_esm/core/actions/decrypt/decryptValues.js +5 -1
  201. package/_esm/core/actions/decrypt/decryptValues.js.map +1 -1
  202. package/_esm/core/actions/decrypt/decryptValuesFromPairs.js +5 -1
  203. package/_esm/core/actions/decrypt/decryptValuesFromPairs.js.map +1 -1
  204. package/_esm/core/actions/decrypt/index.js +2 -2
  205. package/_esm/core/actions/decrypt/index.js.map +1 -1
  206. package/_esm/core/actions/host/getUserDecryptionDelegationExpirationDate.js +13 -14
  207. package/_esm/core/actions/host/getUserDecryptionDelegationExpirationDate.js.map +1 -1
  208. package/_esm/core/base/bytes.js +7 -0
  209. package/_esm/core/base/bytes.js.map +1 -1
  210. package/_esm/core/base/sign.js +58 -0
  211. package/_esm/core/base/sign.js.map +1 -0
  212. package/_esm/core/base/typedValue.js +16 -0
  213. package/_esm/core/base/typedValue.js.map +1 -1
  214. package/_esm/core/base/uint.js +30 -0
  215. package/_esm/core/base/uint.js.map +1 -1
  216. package/_esm/core/clients/decorators/decrypt.js +3 -3
  217. package/_esm/core/clients/decorators/decrypt.js.map +1 -1
  218. package/_esm/core/coprocessor/InputProof-p.js +2 -2
  219. package/_esm/core/coprocessor/InputProof-p.js.map +1 -1
  220. package/_esm/core/coprocessor/ZkProof-p.js +19 -12
  221. package/_esm/core/coprocessor/ZkProof-p.js.map +1 -1
  222. package/_esm/core/coprocessor/ZkProofBuilder-p.js +7 -5
  223. package/_esm/core/coprocessor/ZkProofBuilder-p.js.map +1 -1
  224. package/_esm/core/coprocessor/encrypt.js +1 -3
  225. package/_esm/core/coprocessor/encrypt.js.map +1 -1
  226. package/_esm/core/coprocessor/fetchVerifiedInputProof.js +3 -4
  227. package/_esm/core/coprocessor/fetchVerifiedInputProof.js.map +1 -1
  228. package/_esm/core/handle/FheType.js +4 -2
  229. package/_esm/core/handle/FheType.js.map +1 -1
  230. package/_esm/core/host-contracts/KmsSignersContext-p.js +1 -1
  231. package/_esm/core/host-contracts/KmsSignersContext-p.js.map +1 -1
  232. package/_esm/core/host-contracts/checkDelegation.js +81 -0
  233. package/_esm/core/host-contracts/checkDelegation.js.map +1 -0
  234. package/_esm/core/host-contracts/getUserDecryptionDelegationExpirationDate.js +19 -0
  235. package/_esm/core/host-contracts/getUserDecryptionDelegationExpirationDate.js.map +1 -0
  236. package/_esm/core/host-contracts/isHandleDelegatedForUserDecryption-p.js +32 -0
  237. package/_esm/core/host-contracts/isHandleDelegatedForUserDecryption-p.js.map +1 -0
  238. package/_esm/core/host-contracts/persistAllowed.js +1 -1
  239. package/_esm/core/host-contracts/persistAllowed.js.map +1 -1
  240. package/_esm/core/kms/fetchKmsSignedcryptedShares-p.js +18 -8
  241. package/_esm/core/kms/fetchKmsSignedcryptedShares-p.js.map +1 -1
  242. package/_esm/core/kms/publicDecrypt.js +1 -4
  243. package/_esm/core/kms/publicDecrypt.js.map +1 -1
  244. package/_esm/core/modules/decrypt/mock.js +96 -10
  245. package/_esm/core/modules/decrypt/mock.js.map +1 -1
  246. package/_esm/core/modules/encrypt/mock.js +151 -12
  247. package/_esm/core/modules/encrypt/mock.js.map +1 -1
  248. package/_esm/core/modules/encrypt/module/api-p.js +7 -2
  249. package/_esm/core/modules/encrypt/module/api-p.js.map +1 -1
  250. package/_esm/core/modules/ethereum/types-ct.js +2 -0
  251. package/_esm/core/modules/ethereum/types-ct.js.map +1 -0
  252. package/_esm/core/modules/relayer/cleartext/fetchCoprocessorSignatures.js +75 -0
  253. package/_esm/core/modules/relayer/cleartext/fetchCoprocessorSignatures.js.map +1 -0
  254. package/_esm/core/modules/relayer/cleartext/fetchDelegatedUserDecrypt.js +121 -0
  255. package/_esm/core/modules/relayer/cleartext/fetchDelegatedUserDecrypt.js.map +1 -0
  256. package/_esm/core/modules/relayer/cleartext/fetchPublicDecrypt.js +52 -0
  257. package/_esm/core/modules/relayer/cleartext/fetchPublicDecrypt.js.map +1 -0
  258. package/_esm/core/modules/relayer/cleartext/fetchUserDecrypt.js +119 -0
  259. package/_esm/core/modules/relayer/cleartext/fetchUserDecrypt.js.map +1 -0
  260. package/_esm/core/modules/relayer/cleartext/mock.js +39 -0
  261. package/_esm/core/modules/relayer/cleartext/mock.js.map +1 -0
  262. package/_esm/core/modules/relayer/cleartext/signers.js +34 -0
  263. package/_esm/core/modules/relayer/cleartext/signers.js.map +1 -0
  264. package/_esm/core/modules/relayer/module/fetchCoprocessorSignatures.js +2 -2
  265. package/_esm/core/modules/relayer/module/fetchCoprocessorSignatures.js.map +1 -1
  266. package/_esm/core/modules/relayer/module/fetchDelegatedUserDecrypt.js +1 -1
  267. package/_esm/core/modules/relayer/module/fetchDelegatedUserDecrypt.js.map +1 -1
  268. package/_esm/core/modules/relayer/module/fetchPublicDecrypt.js +1 -1
  269. package/_esm/core/modules/relayer/module/fetchPublicDecrypt.js.map +1 -1
  270. package/_esm/core/modules/relayer/module/fetchUserDecrypt.js +1 -1
  271. package/_esm/core/modules/relayer/module/fetchUserDecrypt.js.map +1 -1
  272. package/_esm/core/modules/relayer/utils.js +13 -0
  273. package/_esm/core/modules/relayer/utils.js.map +1 -0
  274. package/_esm/ethers/cleartext/createFhevmCleartextBaseClient.js +15 -0
  275. package/_esm/ethers/cleartext/createFhevmCleartextBaseClient.js.map +1 -0
  276. package/_esm/ethers/cleartext/createFhevmCleartextClient.js +9 -0
  277. package/_esm/ethers/cleartext/createFhevmCleartextClient.js.map +1 -0
  278. package/_esm/ethers/cleartext/createFhevmCleartextDecryptClient.js +8 -0
  279. package/_esm/ethers/cleartext/createFhevmCleartextDecryptClient.js.map +1 -0
  280. package/_esm/ethers/cleartext/createFhevmCleartextEncryptClient.js +8 -0
  281. package/_esm/ethers/cleartext/createFhevmCleartextEncryptClient.js.map +1 -0
  282. package/_esm/ethers/cleartext/decorators/decrypt.js +7 -0
  283. package/_esm/ethers/cleartext/decorators/decrypt.js.map +1 -0
  284. package/_esm/ethers/cleartext/decorators/encrypt.js +7 -0
  285. package/_esm/ethers/cleartext/decorators/encrypt.js.map +1 -0
  286. package/_esm/ethers/cleartext/index.js +5 -0
  287. package/_esm/ethers/cleartext/index.js.map +1 -0
  288. package/_esm/ethers/clients/createFhevmBaseClient.js +2 -1
  289. package/_esm/ethers/clients/createFhevmBaseClient.js.map +1 -1
  290. package/_esm/ethers/clients/createFhevmClient.js +2 -2
  291. package/_esm/ethers/clients/createFhevmClient.js.map +1 -1
  292. package/_esm/ethers/clients/createFhevmDecryptClient.js +1 -1
  293. package/_esm/ethers/clients/createFhevmDecryptClient.js.map +1 -1
  294. package/_esm/ethers/clients/createFhevmEncryptClient.js +1 -1
  295. package/_esm/ethers/clients/createFhevmEncryptClient.js.map +1 -1
  296. package/_esm/ethers/clients/decorators/decrypt.js +7 -0
  297. package/_esm/ethers/clients/decorators/decrypt.js.map +1 -0
  298. package/_esm/ethers/clients/decorators/encrypt.js +7 -0
  299. package/_esm/ethers/clients/decorators/encrypt.js.map +1 -0
  300. package/_esm/ethers/index.js +1 -1
  301. package/_esm/ethers/index.js.map +1 -1
  302. package/_esm/ethers/internal/config.js +38 -0
  303. package/_esm/ethers/internal/config.js.map +1 -0
  304. package/_esm/ethers/internal/ethereum-ct.js +39 -0
  305. package/_esm/ethers/internal/ethereum-ct.js.map +1 -0
  306. package/_esm/ethers/internal/ethers-p.js +0 -43
  307. package/_esm/ethers/internal/ethers-p.js.map +1 -1
  308. package/_esm/ethers/internal/runtime-ct.js +21 -0
  309. package/_esm/ethers/internal/runtime-ct.js.map +1 -0
  310. package/_esm/ethers/internal/runtime.js +21 -0
  311. package/_esm/ethers/internal/runtime.js.map +1 -0
  312. package/_esm/ethers/runtime/initFhevmDecryptRuntime.js +2 -1
  313. package/_esm/ethers/runtime/initFhevmDecryptRuntime.js.map +1 -1
  314. package/_esm/ethers/runtime/initFhevmEncryptRuntime.js +2 -1
  315. package/_esm/ethers/runtime/initFhevmEncryptRuntime.js.map +1 -1
  316. package/_esm/ethers/runtime/initFhevmRuntime.js +2 -1
  317. package/_esm/ethers/runtime/initFhevmRuntime.js.map +1 -1
  318. package/_esm/index.js +2 -0
  319. package/_esm/index.js.map +1 -0
  320. package/_esm/viem/cleartext/createFhevmCleartextBaseClient.js +15 -0
  321. package/_esm/viem/cleartext/createFhevmCleartextBaseClient.js.map +1 -0
  322. package/_esm/viem/cleartext/createFhevmCleartextClient.js +9 -0
  323. package/_esm/viem/cleartext/createFhevmCleartextClient.js.map +1 -0
  324. package/_esm/viem/cleartext/createFhevmCleartextDecryptClient.js +8 -0
  325. package/_esm/viem/cleartext/createFhevmCleartextDecryptClient.js.map +1 -0
  326. package/_esm/viem/cleartext/createFhevmCleartextEncryptClient.js +8 -0
  327. package/_esm/viem/cleartext/createFhevmCleartextEncryptClient.js.map +1 -0
  328. package/_esm/viem/cleartext/decorators/decrypt.js +7 -0
  329. package/_esm/viem/cleartext/decorators/decrypt.js.map +1 -0
  330. package/_esm/viem/cleartext/decorators/encrypt.js +7 -0
  331. package/_esm/viem/cleartext/decorators/encrypt.js.map +1 -0
  332. package/_esm/viem/cleartext/index.js +5 -0
  333. package/_esm/viem/cleartext/index.js.map +1 -0
  334. package/_esm/viem/clients/createFhevmBaseClient.js +2 -1
  335. package/_esm/viem/clients/createFhevmBaseClient.js.map +1 -1
  336. package/_esm/viem/clients/createFhevmClient.js +2 -2
  337. package/_esm/viem/clients/createFhevmClient.js.map +1 -1
  338. package/_esm/viem/clients/createFhevmDecryptClient.js +1 -1
  339. package/_esm/viem/clients/createFhevmDecryptClient.js.map +1 -1
  340. package/_esm/viem/clients/createFhevmEncryptClient.js +1 -2
  341. package/_esm/viem/clients/createFhevmEncryptClient.js.map +1 -1
  342. package/_esm/viem/clients/decorators/decrypt.js +7 -0
  343. package/_esm/viem/clients/decorators/decrypt.js.map +1 -0
  344. package/_esm/viem/clients/decorators/encrypt.js +7 -0
  345. package/_esm/viem/clients/decorators/encrypt.js.map +1 -0
  346. package/_esm/viem/index.js +2 -2
  347. package/_esm/viem/index.js.map +1 -1
  348. package/_esm/viem/internal/config.js +38 -0
  349. package/_esm/viem/internal/config.js.map +1 -0
  350. package/_esm/viem/internal/ethereum-ct.js +39 -0
  351. package/_esm/viem/internal/ethereum-ct.js.map +1 -0
  352. package/_esm/viem/internal/runtime-ct.js +21 -0
  353. package/_esm/viem/internal/runtime-ct.js.map +1 -0
  354. package/_esm/viem/internal/runtime.js +21 -0
  355. package/_esm/viem/internal/runtime.js.map +1 -0
  356. package/_esm/viem/internal/viem-p.js +0 -43
  357. package/_esm/viem/internal/viem-p.js.map +1 -1
  358. package/_esm/viem/runtime/initFhevmDecryptRuntime.js +2 -1
  359. package/_esm/viem/runtime/initFhevmDecryptRuntime.js.map +1 -1
  360. package/_esm/viem/runtime/initFhevmEncryptRuntime.js +2 -1
  361. package/_esm/viem/runtime/initFhevmEncryptRuntime.js.map +1 -1
  362. package/_esm/viem/runtime/initFhevmRuntime.js +2 -1
  363. package/_esm/viem/runtime/initFhevmRuntime.js.map +1 -1
  364. package/_types/core/actions/base/signDecryptionPermit.d.ts.map +1 -1
  365. package/_types/core/actions/chain/index.d.ts +4 -4
  366. package/_types/core/actions/chain/index.d.ts.map +1 -1
  367. package/_types/core/actions/chain/parseSignedDecryptionPermit.d.ts +7 -2
  368. package/_types/core/actions/chain/parseSignedDecryptionPermit.d.ts.map +1 -1
  369. package/_types/core/actions/chain/parseTransportKeypair.d.ts +2 -2
  370. package/_types/core/actions/chain/parseTransportKeypair.d.ts.map +1 -1
  371. package/_types/core/actions/chain/verifyKmsDelegatedUserDecryptEip712.d.ts +1 -1
  372. package/_types/core/actions/chain/verifyKmsDelegatedUserDecryptEip712.d.ts.map +1 -1
  373. package/_types/core/actions/decrypt/decryptValue.d.ts +5 -13
  374. package/_types/core/actions/decrypt/decryptValue.d.ts.map +1 -1
  375. package/_types/core/actions/decrypt/decryptValues.d.ts +5 -13
  376. package/_types/core/actions/decrypt/decryptValues.d.ts.map +1 -1
  377. package/_types/core/actions/decrypt/decryptValuesFromPairs.d.ts +5 -13
  378. package/_types/core/actions/decrypt/decryptValuesFromPairs.d.ts.map +1 -1
  379. package/_types/core/actions/decrypt/index.d.ts +3 -3
  380. package/_types/core/actions/decrypt/index.d.ts.map +1 -1
  381. package/_types/core/actions/host/getUserDecryptionDelegationExpirationDate.d.ts +5 -2
  382. package/_types/core/actions/host/getUserDecryptionDelegationExpirationDate.d.ts.map +1 -1
  383. package/_types/core/base/bytes.d.ts +1 -0
  384. package/_types/core/base/bytes.d.ts.map +1 -1
  385. package/_types/core/base/sign.d.ts +10 -0
  386. package/_types/core/base/sign.d.ts.map +1 -0
  387. package/_types/core/base/typedValue.d.ts +2 -1
  388. package/_types/core/base/typedValue.d.ts.map +1 -1
  389. package/_types/core/base/uint.d.ts +3 -0
  390. package/_types/core/base/uint.d.ts.map +1 -1
  391. package/_types/core/clients/decorators/decrypt.d.ts +6 -15
  392. package/_types/core/clients/decorators/decrypt.d.ts.map +1 -1
  393. package/_types/core/coprocessor/ZkProof-p.d.ts +2 -2
  394. package/_types/core/coprocessor/ZkProof-p.d.ts.map +1 -1
  395. package/_types/core/coprocessor/ZkProofBuilder-p.d.ts +2 -1
  396. package/_types/core/coprocessor/ZkProofBuilder-p.d.ts.map +1 -1
  397. package/_types/core/coprocessor/encrypt.d.ts.map +1 -1
  398. package/_types/core/coprocessor/fetchVerifiedInputProof.d.ts +0 -2
  399. package/_types/core/coprocessor/fetchVerifiedInputProof.d.ts.map +1 -1
  400. package/_types/core/handle/FheType.d.ts +1 -0
  401. package/_types/core/handle/FheType.d.ts.map +1 -1
  402. package/_types/core/host-contracts/checkDelegation.d.ts +22 -0
  403. package/_types/core/host-contracts/checkDelegation.d.ts.map +1 -0
  404. package/_types/core/host-contracts/getUserDecryptionDelegationExpirationDate.d.ts +19 -0
  405. package/_types/core/host-contracts/getUserDecryptionDelegationExpirationDate.d.ts.map +1 -0
  406. package/_types/core/host-contracts/isHandleDelegatedForUserDecryption-p.d.ts +20 -0
  407. package/_types/core/host-contracts/isHandleDelegatedForUserDecryption-p.d.ts.map +1 -0
  408. package/_types/core/kms/fetchKmsSignedcryptedShares-p.d.ts.map +1 -1
  409. package/_types/core/kms/publicDecrypt.d.ts.map +1 -1
  410. package/_types/core/modules/decrypt/mock.d.ts +5 -5
  411. package/_types/core/modules/decrypt/mock.d.ts.map +1 -1
  412. package/_types/core/modules/encrypt/mock.d.ts +6 -6
  413. package/_types/core/modules/encrypt/mock.d.ts.map +1 -1
  414. package/_types/core/modules/encrypt/module/api-p.d.ts.map +1 -1
  415. package/_types/core/modules/encrypt/types.d.ts +6 -2
  416. package/_types/core/modules/encrypt/types.d.ts.map +1 -1
  417. package/_types/core/modules/ethereum/types-ct.d.ts +46 -0
  418. package/_types/core/modules/ethereum/types-ct.d.ts.map +1 -0
  419. package/_types/core/modules/relayer/cleartext/fetchCoprocessorSignatures.d.ts +3 -0
  420. package/_types/core/modules/relayer/cleartext/fetchCoprocessorSignatures.d.ts.map +1 -0
  421. package/_types/core/modules/relayer/cleartext/fetchDelegatedUserDecrypt.d.ts +3 -0
  422. package/_types/core/modules/relayer/cleartext/fetchDelegatedUserDecrypt.d.ts.map +1 -0
  423. package/_types/core/modules/relayer/cleartext/fetchPublicDecrypt.d.ts +3 -0
  424. package/_types/core/modules/relayer/cleartext/fetchPublicDecrypt.d.ts.map +1 -0
  425. package/_types/core/modules/relayer/cleartext/fetchUserDecrypt.d.ts +3 -0
  426. package/_types/core/modules/relayer/cleartext/fetchUserDecrypt.d.ts.map +1 -0
  427. package/_types/core/modules/relayer/cleartext/mock.d.ts +3 -0
  428. package/_types/core/modules/relayer/cleartext/mock.d.ts.map +1 -0
  429. package/_types/core/modules/relayer/cleartext/signers.d.ts +7 -0
  430. package/_types/core/modules/relayer/cleartext/signers.d.ts.map +1 -0
  431. package/_types/core/modules/relayer/module/fetchCoprocessorSignatures.d.ts +2 -2
  432. package/_types/core/modules/relayer/module/fetchCoprocessorSignatures.d.ts.map +1 -1
  433. package/_types/core/modules/relayer/module/fetchDelegatedUserDecrypt.d.ts +2 -2
  434. package/_types/core/modules/relayer/module/fetchDelegatedUserDecrypt.d.ts.map +1 -1
  435. package/_types/core/modules/relayer/module/fetchPublicDecrypt.d.ts +2 -2
  436. package/_types/core/modules/relayer/module/fetchPublicDecrypt.d.ts.map +1 -1
  437. package/_types/core/modules/relayer/module/fetchUserDecrypt.d.ts +2 -2
  438. package/_types/core/modules/relayer/module/fetchUserDecrypt.d.ts.map +1 -1
  439. package/_types/core/modules/relayer/types.d.ts +14 -5
  440. package/_types/core/modules/relayer/types.d.ts.map +1 -1
  441. package/_types/core/modules/relayer/utils.d.ts +4 -0
  442. package/_types/core/modules/relayer/utils.d.ts.map +1 -0
  443. package/_types/core/types/index.d.ts +1 -0
  444. package/_types/core/types/index.d.ts.map +1 -1
  445. package/_types/core/types/kms.d.ts +21 -0
  446. package/_types/core/types/kms.d.ts.map +1 -1
  447. package/_types/core/types/zkProof-p.d.ts +2 -1
  448. package/_types/core/types/zkProof-p.d.ts.map +1 -1
  449. package/_types/ethers/cleartext/createFhevmCleartextBaseClient.d.ts +11 -0
  450. package/_types/ethers/cleartext/createFhevmCleartextBaseClient.d.ts.map +1 -0
  451. package/_types/ethers/cleartext/createFhevmCleartextClient.d.ts +11 -0
  452. package/_types/ethers/cleartext/createFhevmCleartextClient.d.ts.map +1 -0
  453. package/_types/ethers/cleartext/createFhevmCleartextDecryptClient.d.ts +11 -0
  454. package/_types/ethers/cleartext/createFhevmCleartextDecryptClient.d.ts.map +1 -0
  455. package/_types/ethers/cleartext/createFhevmCleartextEncryptClient.d.ts +11 -0
  456. package/_types/ethers/cleartext/createFhevmCleartextEncryptClient.d.ts.map +1 -0
  457. package/_types/ethers/cleartext/decorators/decrypt.d.ts +6 -0
  458. package/_types/ethers/cleartext/decorators/decrypt.d.ts.map +1 -0
  459. package/_types/ethers/cleartext/decorators/encrypt.d.ts +6 -0
  460. package/_types/ethers/cleartext/decorators/encrypt.d.ts.map +1 -0
  461. package/_types/ethers/cleartext/index.d.ts +5 -0
  462. package/_types/ethers/cleartext/index.d.ts.map +1 -0
  463. package/_types/ethers/clients/createFhevmBaseClient.d.ts.map +1 -1
  464. package/_types/ethers/clients/decorators/decrypt.d.ts +6 -0
  465. package/_types/ethers/clients/decorators/decrypt.d.ts.map +1 -0
  466. package/_types/ethers/clients/decorators/encrypt.d.ts +6 -0
  467. package/_types/ethers/clients/decorators/encrypt.d.ts.map +1 -0
  468. package/_types/ethers/index.d.ts +1 -1
  469. package/_types/ethers/index.d.ts.map +1 -1
  470. package/_types/ethers/internal/config.d.ts +15 -0
  471. package/_types/ethers/internal/config.d.ts.map +1 -0
  472. package/_types/ethers/internal/ethereum-ct.d.ts +3 -0
  473. package/_types/ethers/internal/ethereum-ct.d.ts.map +1 -0
  474. package/_types/ethers/internal/ethers-p.d.ts +1 -13
  475. package/_types/ethers/internal/ethers-p.d.ts.map +1 -1
  476. package/_types/ethers/internal/runtime-ct.d.ts +3 -0
  477. package/_types/ethers/internal/runtime-ct.d.ts.map +1 -0
  478. package/_types/ethers/internal/runtime.d.ts +3 -0
  479. package/_types/ethers/internal/runtime.d.ts.map +1 -0
  480. package/_types/ethers/runtime/initFhevmDecryptRuntime.d.ts.map +1 -1
  481. package/_types/ethers/runtime/initFhevmEncryptRuntime.d.ts.map +1 -1
  482. package/_types/ethers/runtime/initFhevmRuntime.d.ts.map +1 -1
  483. package/_types/index.d.ts +2 -0
  484. package/_types/index.d.ts.map +1 -0
  485. package/_types/viem/cleartext/createFhevmCleartextBaseClient.d.ts +11 -0
  486. package/_types/viem/cleartext/createFhevmCleartextBaseClient.d.ts.map +1 -0
  487. package/_types/viem/cleartext/createFhevmCleartextClient.d.ts +11 -0
  488. package/_types/viem/cleartext/createFhevmCleartextClient.d.ts.map +1 -0
  489. package/_types/viem/cleartext/createFhevmCleartextDecryptClient.d.ts +11 -0
  490. package/_types/viem/cleartext/createFhevmCleartextDecryptClient.d.ts.map +1 -0
  491. package/_types/viem/cleartext/createFhevmCleartextEncryptClient.d.ts +11 -0
  492. package/_types/viem/cleartext/createFhevmCleartextEncryptClient.d.ts.map +1 -0
  493. package/_types/viem/cleartext/decorators/decrypt.d.ts +6 -0
  494. package/_types/viem/cleartext/decorators/decrypt.d.ts.map +1 -0
  495. package/_types/viem/cleartext/decorators/encrypt.d.ts +6 -0
  496. package/_types/viem/cleartext/decorators/encrypt.d.ts.map +1 -0
  497. package/_types/viem/cleartext/index.d.ts +5 -0
  498. package/_types/viem/cleartext/index.d.ts.map +1 -0
  499. package/_types/viem/clients/createFhevmBaseClient.d.ts.map +1 -1
  500. package/_types/viem/clients/decorators/decrypt.d.ts +6 -0
  501. package/_types/viem/clients/decorators/decrypt.d.ts.map +1 -0
  502. package/_types/viem/clients/decorators/encrypt.d.ts +6 -0
  503. package/_types/viem/clients/decorators/encrypt.d.ts.map +1 -0
  504. package/_types/viem/index.d.ts +2 -2
  505. package/_types/viem/index.d.ts.map +1 -1
  506. package/_types/viem/internal/config.d.ts +15 -0
  507. package/_types/viem/internal/config.d.ts.map +1 -0
  508. package/_types/viem/internal/ethereum-ct.d.ts +3 -0
  509. package/_types/viem/internal/ethereum-ct.d.ts.map +1 -0
  510. package/_types/viem/internal/runtime-ct.d.ts +3 -0
  511. package/_types/viem/internal/runtime-ct.d.ts.map +1 -0
  512. package/_types/viem/internal/runtime.d.ts +3 -0
  513. package/_types/viem/internal/runtime.d.ts.map +1 -0
  514. package/_types/viem/internal/viem-p.d.ts +1 -13
  515. package/_types/viem/internal/viem-p.d.ts.map +1 -1
  516. package/_types/viem/runtime/initFhevmDecryptRuntime.d.ts.map +1 -1
  517. package/_types/viem/runtime/initFhevmEncryptRuntime.d.ts.map +1 -1
  518. package/_types/viem/runtime/initFhevmRuntime.d.ts.map +1 -1
  519. package/core/_version.ts +1 -1
  520. package/core/actions/base/fetchVerifiedInputProof.ts +1 -1
  521. package/core/actions/base/signDecryptionPermit.ts +2 -0
  522. package/core/actions/chain/index.ts +11 -11
  523. package/core/actions/chain/parseSignedDecryptionPermit.ts +9 -6
  524. package/core/actions/chain/parseTransportKeypair.ts +3 -7
  525. package/core/actions/chain/serializeTransportKeypair.ts +0 -2
  526. package/core/actions/chain/verifyKmsDelegatedUserDecryptEip712.ts +1 -1
  527. package/core/actions/decrypt/decryptValue.ts +9 -28
  528. package/core/actions/decrypt/decryptValues.ts +9 -28
  529. package/core/actions/decrypt/decryptValuesFromPairs.ts +9 -28
  530. package/core/actions/decrypt/index.ts +3 -14
  531. package/core/actions/host/getUserDecryptionDelegationExpirationDate.ts +22 -18
  532. package/core/base/bytes.ts +8 -0
  533. package/core/base/sign.ts +75 -0
  534. package/core/base/typedValue.ts +18 -0
  535. package/core/base/uint.ts +32 -0
  536. package/core/clients/decorators/decrypt.ts +12 -28
  537. package/core/coprocessor/InputProof-p.ts +2 -2
  538. package/core/coprocessor/ZkProof-p.ts +21 -9
  539. package/core/coprocessor/ZkProofBuilder-p.ts +15 -8
  540. package/core/coprocessor/encrypt.ts +1 -3
  541. package/core/coprocessor/fetchVerifiedInputProof.ts +7 -13
  542. package/core/handle/FheType.ts +5 -2
  543. package/core/host-contracts/KmsSignersContext-p.ts +1 -1
  544. package/core/host-contracts/checkDelegation.ts +114 -0
  545. package/core/host-contracts/getUserDecryptionDelegationExpirationDate.ts +45 -0
  546. package/core/host-contracts/isHandleDelegatedForUserDecryption-p.ts +77 -0
  547. package/core/host-contracts/persistAllowed.ts +1 -1
  548. package/core/kms/fetchKmsSignedcryptedShares-p.ts +31 -29
  549. package/core/kms/publicDecrypt.ts +6 -12
  550. package/core/modules/decrypt/mock.ts +126 -13
  551. package/core/modules/encrypt/mock.ts +206 -12
  552. package/core/modules/encrypt/module/api-p.ts +7 -2
  553. package/core/modules/encrypt/types.ts +6 -2
  554. package/core/modules/ethereum/types-ct.ts +89 -0
  555. package/core/modules/relayer/cleartext/fetchCoprocessorSignatures.ts +94 -0
  556. package/core/modules/relayer/cleartext/fetchDelegatedUserDecrypt.ts +147 -0
  557. package/core/modules/relayer/cleartext/fetchPublicDecrypt.ts +67 -0
  558. package/core/modules/relayer/cleartext/fetchUserDecrypt.ts +141 -0
  559. package/core/modules/relayer/cleartext/mock.ts +54 -0
  560. package/core/modules/relayer/cleartext/signers.ts +52 -0
  561. package/core/modules/relayer/module/fetchCoprocessorSignatures.ts +4 -4
  562. package/core/modules/relayer/module/fetchDelegatedUserDecrypt.ts +3 -3
  563. package/core/modules/relayer/module/fetchPublicDecrypt.ts +3 -3
  564. package/core/modules/relayer/module/fetchUserDecrypt.ts +3 -3
  565. package/core/modules/relayer/types.ts +13 -5
  566. package/core/modules/relayer/utils.ts +17 -0
  567. package/core/types/index.ts +1 -0
  568. package/core/types/kms.ts +19 -0
  569. package/core/types/zkProof-p.ts +3 -1
  570. package/ethers/cleartext/createFhevmCleartextBaseClient.ts +25 -0
  571. package/ethers/cleartext/createFhevmCleartextClient.ts +20 -0
  572. package/ethers/cleartext/createFhevmCleartextDecryptClient.ts +18 -0
  573. package/ethers/cleartext/createFhevmCleartextEncryptClient.ts +19 -0
  574. package/ethers/cleartext/decorators/decrypt.ts +12 -0
  575. package/ethers/cleartext/decorators/encrypt.ts +12 -0
  576. package/ethers/cleartext/index.ts +4 -0
  577. package/ethers/cleartext/package.json +6 -0
  578. package/ethers/clients/createFhevmBaseClient.ts +2 -1
  579. package/ethers/clients/createFhevmClient.ts +2 -2
  580. package/ethers/clients/createFhevmDecryptClient.ts +1 -1
  581. package/ethers/clients/createFhevmEncryptClient.ts +1 -1
  582. package/ethers/clients/decorators/decrypt.ts +12 -0
  583. package/ethers/clients/decorators/encrypt.ts +12 -0
  584. package/ethers/index.ts +1 -1
  585. package/ethers/internal/config.ts +50 -0
  586. package/ethers/internal/ethereum-ct.ts +61 -0
  587. package/ethers/internal/ethers-p.ts +1 -56
  588. package/ethers/internal/runtime-ct.ts +28 -0
  589. package/ethers/internal/runtime.ts +28 -0
  590. package/ethers/runtime/initFhevmDecryptRuntime.ts +2 -1
  591. package/ethers/runtime/initFhevmEncryptRuntime.ts +2 -1
  592. package/ethers/runtime/initFhevmRuntime.ts +2 -1
  593. package/index.ts +0 -0
  594. package/package.json +14 -2
  595. package/viem/cleartext/createFhevmCleartextBaseClient.ts +28 -0
  596. package/viem/cleartext/createFhevmCleartextClient.ts +20 -0
  597. package/viem/cleartext/createFhevmCleartextDecryptClient.ts +21 -0
  598. package/viem/cleartext/createFhevmCleartextEncryptClient.ts +22 -0
  599. package/viem/cleartext/decorators/decrypt.ts +12 -0
  600. package/viem/cleartext/decorators/encrypt.ts +12 -0
  601. package/viem/cleartext/index.ts +4 -0
  602. package/viem/cleartext/package.json +6 -0
  603. package/viem/clients/createFhevmBaseClient.ts +2 -1
  604. package/viem/clients/createFhevmClient.ts +2 -2
  605. package/viem/clients/createFhevmDecryptClient.ts +1 -1
  606. package/viem/clients/createFhevmEncryptClient.ts +1 -3
  607. package/viem/clients/decorators/decrypt.ts +12 -0
  608. package/viem/clients/decorators/encrypt.ts +12 -0
  609. package/viem/index.ts +2 -2
  610. package/viem/internal/config.ts +50 -0
  611. package/viem/internal/ethereum-ct.ts +61 -0
  612. package/viem/internal/runtime-ct.ts +28 -0
  613. package/viem/internal/runtime.ts +28 -0
  614. package/viem/internal/viem-p.ts +1 -56
  615. package/viem/runtime/initFhevmDecryptRuntime.ts +2 -1
  616. package/viem/runtime/initFhevmEncryptRuntime.ts +2 -1
  617. package/viem/runtime/initFhevmRuntime.ts +2 -1
  618. package/_cjs/core/modules/relayer/mock.js +0 -29
  619. package/_cjs/core/modules/relayer/mock.js.map +0 -1
  620. package/_cjs/ethers/decorators/decrypt.js.map +0 -1
  621. package/_cjs/ethers/decorators/encrypt.js.map +0 -1
  622. package/_cjs/viem/decorators/decrypt.js.map +0 -1
  623. package/_cjs/viem/decorators/encrypt.js.map +0 -1
  624. package/_esm/core/modules/relayer/mock.js +0 -28
  625. package/_esm/core/modules/relayer/mock.js.map +0 -1
  626. package/_esm/ethers/decorators/decrypt.js +0 -7
  627. package/_esm/ethers/decorators/decrypt.js.map +0 -1
  628. package/_esm/ethers/decorators/encrypt.js +0 -7
  629. package/_esm/ethers/decorators/encrypt.js.map +0 -1
  630. package/_esm/viem/decorators/decrypt.js +0 -7
  631. package/_esm/viem/decorators/decrypt.js.map +0 -1
  632. package/_esm/viem/decorators/encrypt.js +0 -7
  633. package/_esm/viem/decorators/encrypt.js.map +0 -1
  634. package/_types/core/modules/relayer/mock.d.ts +0 -3
  635. package/_types/core/modules/relayer/mock.d.ts.map +0 -1
  636. package/_types/ethers/decorators/decrypt.d.ts +0 -6
  637. package/_types/ethers/decorators/decrypt.d.ts.map +0 -1
  638. package/_types/ethers/decorators/encrypt.d.ts +0 -6
  639. package/_types/ethers/decorators/encrypt.d.ts.map +0 -1
  640. package/_types/viem/decorators/decrypt.d.ts +0 -6
  641. package/_types/viem/decorators/decrypt.d.ts.map +0 -1
  642. package/_types/viem/decorators/encrypt.d.ts +0 -6
  643. package/_types/viem/decorators/encrypt.d.ts.map +0 -1
  644. package/core/modules/relayer/mock.ts +0 -47
  645. package/ethers/decorators/decrypt.ts +0 -12
  646. package/ethers/decorators/encrypt.ts +0 -12
  647. package/viem/decorators/decrypt.ts +0 -12
  648. package/viem/decorators/encrypt.ts +0 -12
@@ -1,426 +1,279 @@
1
- /**
2
- * Detect browser-like environment by checking for global event listener APIs.
3
- */
4
- function __isBrowserLike() {
5
- return (
6
- typeof addEventListener === "function" &&
7
- typeof removeEventListener === "function"
8
- );
9
- }
10
-
11
- /**
12
- * Create a Worker from the given URL, handling browser and Node.js differences.
13
- * In Node.js, data: URLs are decoded and executed via eval mode since
14
- * `node:worker_threads` does not support them natively.
15
- * @param {string | URL} url - Script URL for the worker (supports data: URLs in Node.js).
16
- * @returns {Promise<Worker>}
17
- */
18
- async function __newIsomorphicWorker(url) {
19
- // Browser
20
- if (__isBrowserLike()) {
21
- //var Worker: new (scriptURL: string | URL, options?: WorkerOptions | undefined) => Worker
22
- return new Worker(url, {
23
- type: "module",
24
- name: "wasm_bindgen_worker",
25
- });
26
- }
27
-
28
- // Node.js
29
- const nodeModuleName = "worker_threads";
30
- const nodeModuleId = `node:${nodeModuleName}`;
31
- const { Worker: NodeWorker } = await import(/* @vite-ignore */ nodeModuleId);
32
-
33
- // Node's Worker doesn't support data: or blob: URLs.
34
- // For data: URLs, extract the code and use eval mode.
35
- if (typeof url === "string" && url.startsWith("data:")) {
36
- const base64 = url.split(",")[1];
37
- const code = Buffer.from(base64, "base64").toString("utf-8");
38
- return new NodeWorker(code, { eval: true });
39
- }
40
-
41
- return new NodeWorker(url);
42
- }
43
-
44
- /**
45
- * Create a Worker from a base64-encoded JavaScript source string.
46
- * In the browser, decodes to a Blob URL; in Node.js, decodes and runs via eval mode.
47
- * @param {string} jsCodeBase64 - Base64-encoded JavaScript source code.
48
- * @returns {Promise<{ worker: Worker, blobUrl: string | undefined }>}
49
- */
50
- async function __newWorkerFromJsCodeBase64(jsCodeBase64) {
51
- // Browser
52
- if (__isBrowserLike()) {
53
- const blob = new Blob([atob(jsCodeBase64)], {
54
- type: "application/javascript",
55
- });
56
-
57
- const blobUrl = URL.createObjectURL(blob);
58
-
59
- try {
60
- const worker = new Worker(blobUrl, {
61
- type: "module",
62
- name: "wasm_bindgen_worker",
63
- });
64
-
65
- // Caller is responsible for revoking blobUrl after the worker is ready.
66
- return { worker, blobUrl };
67
- } catch (e) {
68
- URL.revokeObjectURL(blobUrl);
69
- throw e;
70
- }
71
- }
72
-
73
- // Node.js
74
- const nodeModuleName = "worker_threads";
75
- const nodeModuleId = `node:${nodeModuleName}`;
76
- const { Worker: NodeWorker } = await import(/* @vite-ignore */ nodeModuleId);
77
-
78
- const code = Buffer.from(jsCodeBase64, "base64").toString("utf-8");
79
-
80
- return { worker: new NodeWorker(code, { eval: true }), blobUrl: undefined };
81
- }
82
-
83
- /**
84
- * Wait for a message of the given type from a Worker.
85
- * Handles both Node.js EventEmitter (`on`/`off`) and browser DOM event APIs.
86
- * Rejects on worker errors or non-zero exit codes (Node.js).
87
- * @param {Worker} target - The worker to listen on.
88
- * @param {string} type - The `type` field of the expected message.
89
- * @returns {Promise<object>} Resolves with the matching message data.
90
- */
91
- function __waitForMsgType(target, type) {
92
- return new Promise((resolve, reject) => {
93
- function cleanup() {
94
- if (typeof target.removeEventListener === "function") {
95
- target.removeEventListener("message", onBrowserMsg);
96
- target.removeEventListener("error", onBrowserError);
97
- } else {
98
- target.off("message", onNodeMsg);
99
- target.off("error", onNodeError);
100
- target.off("exit", onNodeExit);
101
- }
102
- }
103
-
104
- // Browser handlers
105
- function onBrowserMsg({ data }) {
106
- if (data?.type !== type) return;
107
- cleanup();
108
- resolve(data);
109
- }
110
- function onBrowserError(e) {
111
- cleanup();
112
- reject(e.error || new Error("Worker error"));
113
- }
114
-
115
- // Node handlers
116
- function onNodeMsg(data) {
117
- if (data?.type !== type) return;
118
- cleanup();
119
- resolve(data);
120
- }
121
- function onNodeError(err) {
122
- cleanup();
123
- reject(err);
124
- }
125
- function onNodeExit(code) {
126
- cleanup();
127
- reject(new Error(`Worker exited with code ${code}`));
128
- }
129
-
130
- if (typeof target.removeEventListener === "function") {
131
- // Browser: DOM events
132
- target.addEventListener("message", onBrowserMsg);
133
- target.addEventListener("error", onBrowserError);
134
- } else {
135
- // Node: EventEmitter
136
- target.on("message", onNodeMsg);
137
- target.on("error", onNodeError);
138
- target.on("exit", onNodeExit);
139
- }
140
- });
141
- }
142
-
143
- ////////////////////////////////////////////////////////////////////////////////
144
- //
145
- // Module variables
146
- //
147
- ////////////////////////////////////////////////////////////////////////////////
148
-
149
- /** @type {Promise<PromiseSettledResult<void>[]> | undefined} In-flight termination promise, if any. */
150
- let _terminating;
151
-
152
- /** @type {boolean} Whether {@link setWorkerUrlConfig} has already been called. */
153
- let _configSet = false;
154
-
155
- /** @type {URL | undefined} Custom URL for the worker script, if provided. */
156
- let _workerUrl = undefined;
157
-
158
- /** @type {{ debug: Function, error: Function } | undefined} Optional logger. */
159
- let _logger = undefined;
160
-
161
- /** @type {boolean} Whether {@link startWorkers} has already been called. */
162
- let _started = false;
163
-
164
- // Note: this is never used, but necessary to prevent a bug in Firefox
165
- // (https://bugzilla.mozilla.org/show_bug.cgi?id=1702191) where it collects
166
- // Web Workers that have a shared WebAssembly memory with the main thread,
167
- // but are not explicitly rooted via a `Worker` instance.
168
- //
169
- // By storing them in a variable, we can keep `Worker` objects around and
170
- // prevent them from getting GC-d.
171
- /** @type {Worker[] | undefined} */
172
- let _workers;
173
-
174
- ////////////////////////////////////////////////////////////////////////////////
175
- //
176
- // Exported functions
177
- //
178
- ////////////////////////////////////////////////////////////////////////////////
179
-
180
- /**
181
- * Return the current running TFHE worker threads.
182
- * @returns {Worker[] | undefined}
183
- */
184
- function getTfheWorkers() {
185
- return _workers;
186
- }
187
-
188
- /**
189
- * Configure the worker script URL and logger. Can only be called once.
190
- * @param {object} [config]
191
- * @param {URL | undefined} [config.workerUrl] - URL to the worker script. Falls back to embedded base64 if omitted.
192
- * @param {{ debug: Function, error: Function } | undefined} [config.logger] - Optional logger instance.
193
- * @throws {Error} If called more than once.
194
- * @throws {TypeError} If `workerUrl` is not a `URL` instance.
195
- */
196
- function setWorkerUrlConfig({
197
- workerUrl = undefined,
198
- logger = undefined,
199
- } = {}) {
200
- if (_configSet) {
201
- throw new Error("Cannot set worker url (already set)");
202
- }
203
-
204
- if (workerUrl !== undefined) {
205
- if (!(workerUrl instanceof URL)) {
206
- throw new TypeError("workerUrl must be a URL");
207
- }
208
- _workerUrl = workerUrl;
209
- }
210
-
211
- _logger = logger;
212
-
213
- _configSet = true;
214
- }
215
-
216
- /**
217
- * Create a Worker from the embedded base64-encoded worker script.
218
- * Used as the last-resort fallback when no `workerUrl` is available
219
- * or when direct/blob URL creation fails.
220
- * - copy/paste base64 from `./tfhe-worker.v1.5.3.inline.js`
221
- * - run `./inline-worker.build.mjs` to generate
222
- * @returns {Promise<{ worker: Worker, blobUrl: string | undefined }>}
223
- */
224
- async function __createWorkerFromBase64() {
225
- // SHA-256: caa32a0babf2c76b7097e67b1cbae06256c3db638e31c02348c9c37988cc5f2e
226
- const workerBase64 =
227
- "ZnVuY3Rpb24gX19faXNCcm93c2VyTGlrZSgpe3JldHVybiB0eXBlb2YgYWRkRXZlbnRMaXN0ZW5lcj09ImZ1bmN0aW9uIiYmdHlwZW9mIHJlbW92ZUV2ZW50TGlzdGVuZXI9PSJmdW5jdGlvbiJ9YXN5bmMgZnVuY3Rpb24gX19fZ2V0VGFyZ2V0KCl7aWYoX19faXNCcm93c2VyTGlrZSgpKXJldHVybiBzZWxmO2NvbnN0IF89Im5vZGU6d29ya2VyX3RocmVhZHMiLHtwYXJlbnRQb3J0OmV9PWF3YWl0IGltcG9ydChfKTtyZXR1cm4gZX1mdW5jdGlvbiBfX193YWl0Rm9yTXNnVHlwZSh0LF8pe3JldHVybiBuZXcgUHJvbWlzZShlPT57dHlwZW9mIHQub249PSJmdW5jdGlvbiI/dC5vbigibWVzc2FnZSIsZnVuY3Rpb24gbihyKXtyPy50eXBlPT09XyYmKHQub2ZmKCJtZXNzYWdlIixuKSxlKHIpKX0pOnQuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gbih7ZGF0YTpyfSl7cj8udHlwZT09PV8mJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG4pLGUocikpfSl9KX1fX19nZXRUYXJnZXQoKS50aGVuKHQ9Pl9fX3dhaXRGb3JNc2dUeXBlKHQsIndhc21fYmluZGdlbl93b3JrZXJfaW5pdCIpLnRoZW4oYXN5bmMoe2luaXQ6XyxyZWNlaXZlcjplfSk9Pntjb25zdCBuPWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gdGZoZX0pO2F3YWl0IG4uZGVmYXVsdChfKSx0LnBvc3RNZXNzYWdlKHt0eXBlOiJ3YXNtX2JpbmRnZW5fd29ya2VyX3JlYWR5In0pLG4ud2JnX3JheW9uX3N0YXJ0X3dvcmtlcihlKX0pKTtmdW5jdGlvbiB3YmdfcmF5b25fc3RhcnRfd29ya2VyKHQpe3dhc20ud2JnX3JheW9uX3N0YXJ0X3dvcmtlcih0KX1mdW5jdGlvbiBkZWJ1Z1N0cmluZyh0KXtjb25zdCBfPXR5cGVvZiB0O2lmKF89PSJudW1iZXIifHxfPT0iYm9vbGVhbiJ8fHQ9PW51bGwpcmV0dXJuYCR7dH1gO2lmKF89PSJzdHJpbmciKXJldHVybmAiJHt0fSJgO2lmKF89PSJzeW1ib2wiKXtjb25zdCByPXQuZGVzY3JpcHRpb247cmV0dXJuIHI9PW51bGw/IlN5bWJvbCI6YFN5bWJvbCgke3J9KWB9aWYoXz09ImZ1bmN0aW9uIil7Y29uc3Qgcj10Lm5hbWU7cmV0dXJuIHR5cGVvZiByPT0ic3RyaW5nIiYmci5sZW5ndGg+MD9gRnVuY3Rpb24oJHtyfSlgOiJGdW5jdGlvbiJ9aWYoQXJyYXkuaXNBcnJheSh0KSl7Y29uc3Qgcj10Lmxlbmd0aDtsZXQgbz0iWyI7cj4wJiYobys9ZGVidWdTdHJpbmcodFswXSkpO2ZvcihsZXQgaT0xO2k8cjtpKyspbys9IiwgIitkZWJ1Z1N0cmluZyh0W2ldKTtyZXR1cm4gbys9Il0iLG99Y29uc3QgZT0vXFtvYmplY3QgKFteXF1dKylcXS8uZXhlYyh0b1N0cmluZy5jYWxsKHQpKTtsZXQgbjtpZihlJiZlLmxlbmd0aD4xKW49ZVsxXTtlbHNlIHJldHVybiB0b1N0cmluZy5jYWxsKHQpO2lmKG49PSJPYmplY3QiKXRyeXtyZXR1cm4iT2JqZWN0KCIrSlNPTi5zdHJpbmdpZnkodCkrIikifWNhdGNoe3JldHVybiJPYmplY3QifXJldHVybiB0IGluc3RhbmNlb2YgRXJyb3I/YCR7dC5uYW1lfTogJHt0Lm1lc3NhZ2V9CiR7dC5zdGFja31gOm59ZnVuY3Rpb24gZ2V0U3RyaW5nRnJvbVdhc20wKHQsXyl7cmV0dXJuIHQ9dD4+PjAsZGVjb2RlVGV4dCh0LF8pfWxldCBjYWNoZWRUZXh0RGVjb2Rlcj10eXBlb2YgVGV4dERlY29kZXI8InUiP25ldyBUZXh0RGVjb2RlcigidXRmLTgiLHtpZ25vcmVCT006ITAsZmF0YWw6ITB9KTp2b2lkIDA7Y2FjaGVkVGV4dERlY29kZXImJmNhY2hlZFRleHREZWNvZGVyLmRlY29kZSgpO2NvbnN0IE1BWF9TQUZBUklfREVDT0RFX0JZVEVTPTIxNDY0MzUwNzI7bGV0IG51bUJ5dGVzRGVjb2RlZD0wO2Z1bmN0aW9uIGRlY29kZVRleHQodCxfKXtyZXR1cm4gbnVtQnl0ZXNEZWNvZGVkKz1fLG51bUJ5dGVzRGVjb2RlZD49TUFYX1NBRkFSSV9ERUNPREVfQllURVMmJihjYWNoZWRUZXh0RGVjb2Rlcj1uZXcgVGV4dERlY29kZXIoInV0Zi04Iix7aWdub3JlQk9NOiEwLGZhdGFsOiEwfSksY2FjaGVkVGV4dERlY29kZXIuZGVjb2RlKCksbnVtQnl0ZXNEZWNvZGVkPV8pLGNhY2hlZFRleHREZWNvZGVyLmRlY29kZShnZXRVaW50OEFycmF5TWVtb3J5MCgpLnNsaWNlKHQsdCtfKSl9ZnVuY3Rpb24gYWRkVG9FeHRlcm5yZWZUYWJsZTAodCl7Y29uc3QgXz13YXNtLl9fZXh0ZXJucmVmX3RhYmxlX2FsbG9jKCk7cmV0dXJuIHdhc20uX193YmluZGdlbl9leHRlcm5yZWZzLnNldChfLHQpLF99bGV0IGNhY2hlZERhdGFWaWV3TWVtb3J5MD1udWxsO2Z1bmN0aW9uIGdldERhdGFWaWV3TWVtb3J5MCgpe3JldHVybihjYWNoZWREYXRhVmlld01lbW9yeTA9PT1udWxsfHxjYWNoZWREYXRhVmlld01lbW9yeTAuYnVmZmVyIT09d2FzbS5tZW1vcnkuYnVmZmVyKSYmKGNhY2hlZERhdGFWaWV3TWVtb3J5MD1uZXcgRGF0YVZpZXcod2FzbS5tZW1vcnkuYnVmZmVyKSksY2FjaGVkRGF0YVZpZXdNZW1vcnkwfWxldCBjYWNoZWRVaW50OEFycmF5TWVtb3J5MD1udWxsO2Z1bmN0aW9uIGdldFVpbnQ4QXJyYXlNZW1vcnkwKCl7cmV0dXJuKGNhY2hlZFVpbnQ4QXJyYXlNZW1vcnkwPT09bnVsbHx8Y2FjaGVkVWludDhBcnJheU1lbW9yeTAuYnVmZmVyIT09d2FzbS5tZW1vcnkuYnVmZmVyKSYmKGNhY2hlZFVpbnQ4QXJyYXlNZW1vcnkwPW5ldyBVaW50OEFycmF5KHdhc20ubWVtb3J5LmJ1ZmZlcikpLGNhY2hlZFVpbnQ4QXJyYXlNZW1vcnkwfWZ1bmN0aW9uIGdldEFycmF5VThGcm9tV2FzbTAodCxfKXtyZXR1cm4gdD10Pj4+MCxnZXRVaW50OEFycmF5TWVtb3J5MCgpLnN1YmFycmF5KHQvMSx0LzErXyl9bGV0IFdBU01fVkVDVE9SX0xFTj0wO2NvbnN0IGNhY2hlZFRleHRFbmNvZGVyPXR5cGVvZiBUZXh0RW5jb2RlcjwidSI/bmV3IFRleHRFbmNvZGVyOnZvaWQgMDtjYWNoZWRUZXh0RW5jb2RlciYmKGNhY2hlZFRleHRFbmNvZGVyLmVuY29kZUludG89ZnVuY3Rpb24odCxfKXtjb25zdCBlPWNhY2hlZFRleHRFbmNvZGVyLmVuY29kZSh0KTtyZXR1cm4gXy5zZXQoZSkse3JlYWQ6dC5sZW5ndGgsd3JpdHRlbjplLmxlbmd0aH19KTtmdW5jdGlvbiBwYXNzU3RyaW5nVG9XYXNtMCh0LF8sZSl7aWYoZT09PXZvaWQgMCl7Y29uc3QgYz1jYWNoZWRUZXh0RW5jb2Rlci5lbmNvZGUodCkscz1fKGMubGVuZ3RoLDEpPj4+MDtyZXR1cm4gZ2V0VWludDhBcnJheU1lbW9yeTAoKS5zdWJhcnJheShzLHMrYy5sZW5ndGgpLnNldChjKSxXQVNNX1ZFQ1RPUl9MRU49Yy5sZW5ndGgsc31sZXQgbj10Lmxlbmd0aCxyPV8obiwxKT4+PjA7Y29uc3Qgbz1nZXRVaW50OEFycmF5TWVtb3J5MCgpO2xldCBpPTA7Zm9yKDtpPG47aSsrKXtjb25zdCBjPXQuY2hhckNvZGVBdChpKTtpZihjPjEyNylicmVhaztvW3IraV09Y31pZihpIT09bil7aSE9PTAmJih0PXQuc2xpY2UoaSkpLHI9ZShyLG4sbj1pK3QubGVuZ3RoKjMsMSk+Pj4wO2NvbnN0IGM9Z2V0VWludDhBcnJheU1lbW9yeTAoKS5zdWJhcnJheShyK2kscituKSxzPWNhY2hlZFRleHRFbmNvZGVyLmVuY29kZUludG8odCxjKTtpKz1zLndyaXR0ZW4scj1lKHIsbixpLDEpPj4+MH1yZXR1cm4gV0FTTV9WRUNUT1JfTEVOPWkscn1mdW5jdGlvbiBoYW5kbGVFcnJvcih0LF8pe3RyeXtyZXR1cm4gdC5hcHBseSh0aGlzLF8pfWNhdGNoKGUpe2NvbnN0IG49YWRkVG9FeHRlcm5yZWZUYWJsZTAoZSk7d2FzbS5fX3diaW5kZ2VuX2V4bl9zdG9yZShuKX19ZnVuY3Rpb24gaXNMaWtlTm9uZSh0KXtyZXR1cm4gdD09bnVsbH1mdW5jdGlvbiBfX3diZ19nZXRfaW1wb3J0cyh0KXtyZXR1cm57X19wcm90b19fOm51bGwsIi4vdGZoZV9iZy5qcyI6e19fcHJvdG9fXzpudWxsLF9fd2JnX0JpZ0ludF83ZWExZTc0OWNlNmI5MmZkOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGUpe3JldHVybiBCaWdJbnQoZSl9LGFyZ3VtZW50cyl9LF9fd2JnX0JpZ0ludF9iN2JiY2NkZmYyNThjOWYyOmZ1bmN0aW9uKGUpe3JldHVybiBCaWdJbnQoZSl9LF9fd2JnX0Vycm9yXzhjNGU0M2ZlNzQ1NTlkNzM6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gRXJyb3IoZ2V0U3RyaW5nRnJvbVdhc20wKGUsbikpfSxfX3diZ19fX3diaW5kZ2VuX2JpZ2ludF9nZXRfYXNfaTY0XzhmY2Y0Y2U3ZjFjYTcyYTI6ZnVuY3Rpb24oZSxuKXtjb25zdCByPW4sbz10eXBlb2Ygcj09ImJpZ2ludCI/cjp2b2lkIDA7Z2V0RGF0YVZpZXdNZW1vcnkwKCkuc2V0QmlnSW50NjQoZSs4LGlzTGlrZU5vbmUobyk/QmlnSW50KDApOm8sITApLGdldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGUrMCwhaXNMaWtlTm9uZShvKSwhMCl9LF9fd2JnX19fd2JpbmRnZW5fYml0X2FuZF80MzYyYjExNzY5NTBkNDJhOmZ1bmN0aW9uKGUsbil7cmV0dXJuIGUmbn0sX193YmdfX193YmluZGdlbl9iaXRfb3JfNzFhMDJkMzk3OTZlYTEzZDpmdW5jdGlvbihlLG4pe3JldHVybiBlfG59LF9fd2JnX19fd2JpbmRnZW5fZGVidWdfc3RyaW5nXzBiYzg0ODJjNmUzNTA4YWU6ZnVuY3Rpb24oZSxuKXtjb25zdCByPWRlYnVnU3RyaW5nKG4pLG89cGFzc1N0cmluZ1RvV2FzbTAocix3YXNtLl9fd2JpbmRnZW5fbWFsbG9jLHdhc20uX193YmluZGdlbl9yZWFsbG9jKSxpPVdBU01fVkVDVE9SX0xFTjtnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihlKzQsaSwhMCksZ2V0RGF0YVZpZXdNZW1vcnkwKCkuc2V0SW50MzIoZSswLG8sITApfSxfX3diZ19fX3diaW5kZ2VuX2lzX2Z1bmN0aW9uXzAwOTVhNzNiOGIxNTZmNzY6ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlPT0iZnVuY3Rpb24ifSxfX3diZ19fX3diaW5kZ2VuX2lzX29iamVjdF81YWU4ZTU4ODBmMmMxZmJkOmZ1bmN0aW9uKGUpe2NvbnN0IG49ZTtyZXR1cm4gdHlwZW9mIG49PSJvYmplY3QiJiZuIT09bnVsbH0sX193YmdfX193YmluZGdlbl9pc19zdHJpbmdfY2Q0NDQ1MTZlZGM1YjE4MDpmdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmcifSxfX3diZ19fX3diaW5kZ2VuX2lzX3VuZGVmaW5lZF85ZTRkOTI1MzRjNDJkNzc4OmZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwfSxfX3diZ19fX3diaW5kZ2VuX2pzdmFsX2VxXzExODg4MzkwYjAxODYyNzA6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZT09PW59LF9fd2JnX19fd2JpbmRnZW5fbHRfYmI1OWNjM2QyMzUyNmUwZDpmdW5jdGlvbihlLG4pe3JldHVybiBlPG59LF9fd2JnX19fd2JpbmRnZW5fbWVtb3J5X2JkMWZiY2YyMWZiZWYzYzg6ZnVuY3Rpb24oKXtyZXR1cm4gd2FzbS5tZW1vcnl9LF9fd2JnX19fd2JpbmRnZW5fbW9kdWxlX2Y2YjgwNTJkNzljMWNjMTY6ZnVuY3Rpb24oKXtyZXR1cm4gd2FzbU1vZHVsZX0sX193YmdfX193YmluZGdlbl9uZWdfNmI0ZDM1NmRmZjQ5ZGNjNjpmdW5jdGlvbihlKXtyZXR1cm4tZX0sX193YmdfX193YmluZGdlbl9zaGxfOGQ2NGQwNjc2MWY5ZWE0ZTpmdW5jdGlvbihlLG4pe3JldHVybiBlPDxufSxfX3diZ19fX3diaW5kZ2VuX3Nocl9lZjhlMDdjY2U3MDllYjU0OmZ1bmN0aW9uKGUsbil7cmV0dXJuIGU+Pm59LF9fd2JnX19fd2JpbmRnZW5fc3RyaW5nX2dldF83MmZiNjk2MjAyYzU2NzI5OmZ1bmN0aW9uKGUsbil7Y29uc3Qgcj1uLG89dHlwZW9mIHI9PSJzdHJpbmciP3I6dm9pZCAwO3ZhciBpPWlzTGlrZU5vbmUobyk/MDpwYXNzU3RyaW5nVG9XYXNtMChvLHdhc20uX193YmluZGdlbl9tYWxsb2Msd2FzbS5fX3diaW5kZ2VuX3JlYWxsb2MpLGM9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGUrNCxjLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihlKzAsaSwhMCl9LF9fd2JnX19fd2JpbmRnZW5fdGhyb3dfYmUyODlkNTAzNGVkMjcxYjpmdW5jdGlvbihlLG4pe3Rocm93IG5ldyBFcnJvcihnZXRTdHJpbmdGcm9tV2FzbTAoZSxuKSl9LF9fd2JnX2NhbGxfMzg5ZWZlMjg0MzVhOTM4ODpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihlLG4pe3JldHVybiBlLmNhbGwobil9LGFyZ3VtZW50cyl9LF9fd2JnX2NhbGxfNDcwOGUwYzEzYmRjOGU5NTpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihlLG4scil7cmV0dXJuIGUuY2FsbChuLHIpfSxhcmd1bWVudHMpfSxfX3diZ19jcnlwdG9fODZmMjYzMWU5MWI1MTUxMTpmdW5jdGlvbihlKXtyZXR1cm4gZS5jcnlwdG99LF9fd2JnX2Vycm9yXzc1MzRiOGU5YTM2ZjFhYjQ6ZnVuY3Rpb24oZSxuKXtsZXQgcixvO3RyeXtyPWUsbz1uLGNvbnNvbGUuZXJyb3IoZ2V0U3RyaW5nRnJvbVdhc20wKGUsbikpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2ZyZWUocixvLDEpfX0sX193YmdfZ2V0UmFuZG9tVmFsdWVzX2IzZjE1ZmNiZmFiYjBmOGI6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oZSxuKXtlLmdldFJhbmRvbVZhbHVlcyhuKX0sYXJndW1lbnRzKX0sX193YmdfZ2V0VGltZV8xZTNjZDEzOTFjNWMzOTk1OmZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFRpbWUoKX0sX193YmdfaW5zdGFuY2VvZl9XaW5kb3dfZWQ0OWIyZGI4ZGY5MDM1OTpmdW5jdGlvbihlKXtsZXQgbjt0cnl7bj1lIGluc3RhbmNlb2YgV2luZG93fWNhdGNoe249ITF9cmV0dXJuIG59LF9fd2JnX2xlbmd0aF8zMmVkOWEyNzlhY2QwNTRjOmZ1bmN0aW9uKGUpe3JldHVybiBlLmxlbmd0aH0sX193YmdfbXNDcnlwdG9fZDU2MmJiZTgzZTBkNGI5MTpmdW5jdGlvbihlKXtyZXR1cm4gZS5tc0NyeXB0b30sX193YmdfbmV3XzBfNzNhZmMzNWViNTQ0ZTUzOTpmdW5jdGlvbigpe3JldHVybiBuZXcgRGF0ZX0sX193YmdfbmV3XzhhNmYyMzhhNmVjZTg2ZWE6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEVycm9yfSxfX3diZ19uZXdfbm9fYXJnc18xYzdjODQyZjA4ZDAwZWJiOmZ1bmN0aW9uKGUsbil7cmV0dXJuIG5ldyBGdW5jdGlvbihnZXRTdHJpbmdGcm9tV2FzbTAoZSxuKSl9LF9fd2JnX25ld193aXRoX2xlbmd0aF9hMmMzOWNiZTg4ZmQ4ZmYxOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVWludDhBcnJheShlPj4+MCl9LF9fd2JnX25vZGVfZTFmMjRmODlhNzMzNmMyZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlfSxfX3diZ19wcm9jZXNzXzM5NzVmZDZjNzJmNTIwYWE6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucHJvY2Vzc30sX193YmdfcHJvdG90eXBlc2V0Y2FsbF9iZGNkY2M1ODQyZTRkNzdkOmZ1bmN0aW9uKGUsbixyKXtVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChnZXRBcnJheVU4RnJvbVdhc20wKGUsbikscil9LF9fd2JnX3JhbmRvbUZpbGxTeW5jX2Y4YzE1M2I3OWYyODU4MTc6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oZSxuKXtlLnJhbmRvbUZpbGxTeW5jKG4pfSxhcmd1bWVudHMpfSxfX3diZ19yZXF1aXJlX2I3NGY0N2ZjMmQwMjJmZDY6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oKXtyZXR1cm4gbW9kdWxlLnJlcXVpcmV9LGFyZ3VtZW50cyl9LF9fd2JnX3N0YWNrXzBlZDc1ZDY4NTc1YjBmM2M6ZnVuY3Rpb24oZSxuKXtjb25zdCByPW4uc3RhY2ssbz1wYXNzU3RyaW5nVG9XYXNtMChyLHdhc20uX193YmluZGdlbl9tYWxsb2Msd2FzbS5fX3diaW5kZ2VuX3JlYWxsb2MpLGk9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGUrNCxpLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihlKzAsbywhMCl9LF9fd2JnX3N0YXJ0V29ya2Vyc18yY2ExMTc2MWUwOGZmNWQ1OmZ1bmN0aW9uKGUsbixyKXtoYW5kbGVFcnJvcihmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigic3RhcnRXb3JrZXJzIG5vdCBzdXBwb3J0ZWQgZnJvbSBhIHdvcmtlciB0aHJlYWQiKX0pfSxfX3diZ19zdGF0aWNfYWNjZXNzb3JfR0xPQkFMXzEyODM3MTY3YWQ5MzUxMTY6ZnVuY3Rpb24oKXtjb25zdCBlPXR5cGVvZiBnbG9iYWw+InUiP251bGw6Z2xvYmFsO3JldHVybiBpc0xpa2VOb25lKGUpPzA6YWRkVG9FeHRlcm5yZWZUYWJsZTAoZSl9LF9fd2JnX3N0YXRpY19hY2Nlc3Nvcl9HTE9CQUxfVEhJU19lNjI4ZTg5YWIzYjFjOTVmOmZ1bmN0aW9uKCl7Y29uc3QgZT10eXBlb2YgZ2xvYmFsVGhpcz4idSI/bnVsbDpnbG9iYWxUaGlzO3JldHVybiBpc0xpa2VOb25lKGUpPzA6YWRkVG9FeHRlcm5yZWZUYWJsZTAoZSl9LF9fd2JnX3N0YXRpY19hY2Nlc3Nvcl9TRUxGX2E2MjFkM2RmYmI2MGQwY2U6ZnVuY3Rpb24oKXtjb25zdCBlPXR5cGVvZiBzZWxmPiJ1Ij9udWxsOnNlbGY7cmV0dXJuIGlzTGlrZU5vbmUoZSk/MDphZGRUb0V4dGVybnJlZlRhYmxlMChlKX0sX193Ymdfc3RhdGljX2FjY2Vzc29yX1dJTkRPV19mODcyN2YwY2Y4ODhlMGJkOmZ1bmN0aW9uKCl7Y29uc3QgZT10eXBlb2Ygd2luZG93PiJ1Ij9udWxsOndpbmRvdztyZXR1cm4gaXNMaWtlTm9uZShlKT8wOmFkZFRvRXh0ZXJucmVmVGFibGUwKGUpfSxfX3diZ19zdWJhcnJheV9hOTZlMWZlZjE3ZWQyM2NiOmZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gZS5zdWJhcnJheShuPj4+MCxyPj4+MCl9LF9fd2JnX3RvU3RyaW5nXzAyOWFjMjQ0MjFmZDdhMjQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9TdHJpbmcoKX0sX193YmdfdG9TdHJpbmdfNTZkOTQ2ZGFmZjgzODY3YjpmdW5jdGlvbihlLG4scil7Y29uc3Qgbz1uLnRvU3RyaW5nKHIpLGk9cGFzc1N0cmluZ1RvV2FzbTAobyx3YXNtLl9fd2JpbmRnZW5fbWFsbG9jLHdhc20uX193YmluZGdlbl9yZWFsbG9jKSxjPVdBU01fVkVDVE9SX0xFTjtnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihlKzQsYywhMCksZ2V0RGF0YVZpZXdNZW1vcnkwKCkuc2V0SW50MzIoZSswLGksITApfSxfX3diZ192ZXJzaW9uc180ZTMxMjI2ZjVlOGRjOTA5OmZ1bmN0aW9uKGUpe3JldHVybiBlLnZlcnNpb25zfSxfX3diaW5kZ2VuX2Nhc3RfMDAwMDAwMDAwMDAwMDAwMTpmdW5jdGlvbihlKXtyZXR1cm4gZX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDI6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gQmlnSW50LmFzVWludE4oNjQsZSl8bjw8QmlnSW50KDY0KX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDM6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LF9fd2JpbmRnZW5fY2FzdF8wMDAwMDAwMDAwMDAwMDA0OmZ1bmN0aW9uKGUsbil7cmV0dXJuIGdldEFycmF5VThGcm9tV2FzbTAoZSxuKX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDU6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZ2V0U3RyaW5nRnJvbVdhc20wKGUsbil9LF9fd2JpbmRnZW5fY2FzdF8wMDAwMDAwMDAwMDAwMDA2OmZ1bmN0aW9uKGUsbil7cmV0dXJuIEJpZ0ludC5hc1VpbnROKDY0LGUpfEJpZ0ludC5hc1VpbnROKDY0LG4pPDxCaWdJbnQoNjQpfSxfX3diaW5kZ2VuX2Nhc3RfMDAwMDAwMDAwMDAwMDAwNzpmdW5jdGlvbihlKXtyZXR1cm4gQmlnSW50LmFzVWludE4oNjQsZSl9LF9fd2JpbmRnZW5faW5pdF9leHRlcm5yZWZfdGFibGU6ZnVuY3Rpb24oKXtjb25zdCBlPXdhc20uX193YmluZGdlbl9leHRlcm5yZWZzLG49ZS5ncm93KDQpO2Uuc2V0KDAsdm9pZCAwKSxlLnNldChuKzAsdm9pZCAwKSxlLnNldChuKzEsbnVsbCksZS5zZXQobisyLCEwKSxlLnNldChuKzMsITEpfSxtZW1vcnk6dHx8bmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7aW5pdGlhbDoyMSxtYXhpbXVtOjE2Mzg0LHNoYXJlZDohMH0pfX19bGV0IHdhc21Nb2R1bGUsd2FzbTtmdW5jdGlvbiBfX3diZ19maW5hbGl6ZV9pbml0KHQsXyxlKXtpZih3YXNtPXQuZXhwb3J0cyx3YXNtTW9kdWxlPV8sY2FjaGVkRGF0YVZpZXdNZW1vcnkwPW51bGwsY2FjaGVkVWludDhBcnJheU1lbW9yeTA9bnVsbCx0eXBlb2YgZTwidSImJih0eXBlb2YgZSE9Im51bWJlciJ8fGU9PT0wfHxlJTY1NTM2IT09MCkpdGhyb3ciaW52YWxpZCBzdGFjayBzaXplIjtyZXR1cm4gd2FzbS5fX3diaW5kZ2VuX3N0YXJ0KGUpLHdhc219YXN5bmMgZnVuY3Rpb24gX193YmdfbG9hZCh0LF8pe2lmKHR5cGVvZiBSZXNwb25zZT09ImZ1bmN0aW9uIiYmdCBpbnN0YW5jZW9mIFJlc3BvbnNlKXtpZih0eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmc9PSJmdW5jdGlvbiIpdHJ5e3JldHVybiBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyh0LF8pfWNhdGNoKHIpe2lmKHQub2smJmUodC50eXBlKSYmdC5oZWFkZXJzLmdldCgiQ29udGVudC1UeXBlIikhPT0iYXBwbGljYXRpb24vd2FzbSIpY29uc29sZS53YXJuKCJgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmdgIGZhaWxlZCBiZWNhdXNlIHlvdXIgc2VydmVyIGRvZXMgbm90IHNlcnZlIFdhc20gd2l0aCBgYXBwbGljYXRpb24vd2FzbWAgTUlNRSB0eXBlLiBGYWxsaW5nIGJhY2sgdG8gYFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlYCB3aGljaCBpcyBzbG93ZXIuIE9yaWdpbmFsIGVycm9yOlxuIixyKTtlbHNlIHRocm93IHJ9Y29uc3Qgbj1hd2FpdCB0LmFycmF5QnVmZmVyKCk7cmV0dXJuIGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKG4sXyl9ZWxzZXtjb25zdCBuPWF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHQsXyk7cmV0dXJuIG4gaW5zdGFuY2VvZiBXZWJBc3NlbWJseS5JbnN0YW5jZT97aW5zdGFuY2U6bixtb2R1bGU6dH06bn1mdW5jdGlvbiBlKG4pe3N3aXRjaChuKXtjYXNlImJhc2ljIjpjYXNlImNvcnMiOmNhc2UiZGVmYXVsdCI6cmV0dXJuITB9cmV0dXJuITF9fWFzeW5jIGZ1bmN0aW9uIF9fd2JnX2luaXQodCxfKXtpZih3YXNtIT09dm9pZCAwKXJldHVybiB3YXNtO2xldCBlO3QhPT12b2lkIDAmJihPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk9PT1PYmplY3QucHJvdG90eXBlP3ttb2R1bGVfb3JfcGF0aDp0LG1lbW9yeTpfLHRocmVhZF9zdGFja19zaXplOmV9PXQ6Y29uc29sZS53YXJuKCJ1c2luZyBkZXByZWNhdGVkIHBhcmFtZXRlcnMgZm9yIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbjsgcGFzcyBhIHNpbmdsZSBvYmplY3QgaW5zdGVhZCIpKTtjb25zdCBuPV9fd2JnX2dldF9pbXBvcnRzKF8pLHtpbnN0YW5jZTpyLG1vZHVsZTpvfT1hd2FpdCBfX3diZ19sb2FkKGF3YWl0IHQsbik7cmV0dXJuIF9fd2JnX2ZpbmFsaXplX2luaXQocixvLGUpfXZhciB0ZmhlPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLGRlZmF1bHQ6X193YmdfaW5pdCx3YmdfcmF5b25fc3RhcnRfd29ya2VyfSk7Cg==";
228
- return await __newWorkerFromJsCodeBase64(workerBase64);
229
- }
230
-
231
- /**
232
- * Spawn TFHE worker threads, initialize them with the given WASM module
233
- * and shared memory, and finalize the thread pool via the builder.
234
- * Can be called only once. No reset.
235
- * @param {WebAssembly.Module} module - Compiled WASM module to send to each worker.
236
- * @param {WebAssembly.Memory} memory - Shared memory instance for cross-thread communication.
237
- * @param {{ numThreads(): number, receiver(): SharedArrayBuffer, build(): void }} builder - Thread pool builder from the TFHE WASM bindings.
238
- * @throws {Error} If termination is in progress, numThreads is 0, or any worker fails to start.
239
- * @returns {Promise<void>}
240
- */
241
- async function startWorkers(module, memory, builder) {
242
- if (_started) {
243
- throw new Error("Already started");
244
- }
245
-
246
- _started = true;
247
-
248
- if (_terminating) {
249
- throw new Error("Cannot start workers while termination is in progress");
250
- }
251
-
252
- if (builder.numThreads() === 0) {
253
- throw new Error(`num_threads must be > 0.`);
254
- }
255
-
256
- const workerInit = {
257
- type: "wasm_bindgen_worker_init",
258
- init: { module_or_path: module, memory },
259
- // SharedArrayBuffer
260
- receiver: builder.receiver(),
261
- };
262
-
263
- const results = await Promise.allSettled(
264
- Array.from({ length: builder.numThreads() }, async (_, workerIndex) => {
265
- // Self-spawn into a new Worker.
266
- //
267
- // TODO: while `new URL('...', import.meta.url) becomes a semi-standard
268
- // way to get asset URLs relative to the module across various bundlers
269
- // and browser, ideally we should switch to `import.meta.resolve`
270
- // once it becomes a standard.
271
- //
272
- // Note: we could use `../../..` as the URL here to inline workerHelpers.js
273
- // into the parent entry instead of creating another split point -
274
- // this would be preferable from optimization perspective -
275
- // however, Webpack then eliminates all message handler code
276
- // because wasm-pack produces "sideEffects":false in package.json
277
- // unconditionally.
278
- //
279
- // The only way to work around that is to have side effect code
280
- // in an entry point such as Worker file itself.
281
-
282
- let blobUrl = undefined;
283
- let worker;
284
-
285
- // Worker creation fallback chain (see matrix in types.ts):
286
- //
287
- // | workerUrl | Result |
288
- // |-----------|-------------------------------------------|
289
- // | defined | Direct URL → fetch+blob → embedded base64 |
290
- // | undefined | Embedded base64 worker |
291
-
292
- if (_workerUrl) {
293
- // Step 1: Try direct URL — new Worker(url)
294
- try {
295
- worker = await __newIsomorphicWorker(_workerUrl);
296
- _logger?.debug(
297
- `[Worker #${workerIndex}] - created at url: ${_workerUrl}`,
298
- );
299
- } catch (e) {
300
- _logger?.error(
301
- `[Worker #${workerIndex}] - create failed: ${e.message}`,
302
- e,
303
- );
304
- }
305
-
306
- // Step 2: Fetch script and create blob URL — handles cross-origin restrictions
307
- if (worker === undefined) {
308
- try {
309
- const scriptBlob = await fetch(_workerUrl).then((r) => r.blob());
310
- blobUrl = URL.createObjectURL(scriptBlob);
311
- worker = await __newIsomorphicWorker(blobUrl);
312
- _logger?.debug(
313
- `[Worker #${workerIndex}] - created fallback blob worker at url: ${_workerUrl}`,
314
- );
315
- } catch (e) {
316
- if (blobUrl) {
317
- URL.revokeObjectURL(blobUrl);
318
- blobUrl = undefined;
319
- }
320
-
321
- _logger?.error(
322
- `[Worker #${workerIndex}] - create fallback blob worker failed: ${e.message}`,
323
- e,
324
- );
325
- }
326
- }
327
- }
328
-
329
- try {
330
- // Step 3: Embedded base64 worker — last resort fallback
331
- if (!worker) {
332
- try {
333
- const result = await __createWorkerFromBase64();
334
- worker = result.worker;
335
- blobUrl = result.blobUrl ?? blobUrl;
336
- _logger?.debug(
337
- `[Worker #${workerIndex}] - created blob worker using base64`,
338
- );
339
- } catch (e) {
340
- _logger?.error(
341
- `[Worker #${workerIndex}] - create blob worker using base64 failed`,
342
- e,
343
- );
344
-
345
- throw new Error(
346
- "All worker creation methods failed. Check CSP, COOP/COEP headers, and cross-origin policies.",
347
- { cause: e },
348
- );
349
- }
350
- }
351
-
352
- try {
353
- worker.postMessage(workerInit);
354
- } catch (e) {
355
- _logger?.error(`[Worker #${workerIndex}] - postMessage failed`, e);
356
- throw e;
357
- }
358
-
359
- await __waitForMsgType(worker, "wasm_bindgen_worker_ready");
360
-
361
- // Revoke blob URL only after the worker has loaded its script
362
- if (blobUrl) {
363
- URL.revokeObjectURL(blobUrl);
364
- blobUrl = undefined;
365
- }
366
-
367
- _logger?.debug(`[Worker #${workerIndex}] - ready`);
368
-
369
- return worker;
370
- } catch (err) {
371
- if (blobUrl) {
372
- URL.revokeObjectURL(blobUrl);
373
- blobUrl = undefined;
374
- }
375
-
376
- throw err;
377
- }
378
- }),
379
- );
380
-
381
- // Separate fulfilled workers from failures
382
- const workers = [];
383
- const errors = [];
384
-
385
- for (const result of results) {
386
- if (result.status === "fulfilled") {
387
- workers.push(result.value);
388
- } else {
389
- errors.push(result.reason);
390
- }
391
- }
392
-
393
- // If any worker failed, terminate the ones that succeeded to prevent orphaned threads
394
- if (errors.length > 0) {
395
- await Promise.allSettled(workers.map((w) => w.terminate()));
396
- throw errors[0];
397
- }
398
-
399
- _workers = workers;
400
- builder.build();
401
- }
402
-
403
- /**
404
- * Terminate all active TFHE workers and wait for cleanup to complete.
405
- * Safe to call concurrently — subsequent calls will await the in-progress termination.
406
- * Called only once. No reset.
407
- * @returns {Promise<unknown>}
408
- */
409
- async function terminateWorkers() {
410
- if (_terminating) {
411
- return _terminating;
412
- }
413
-
414
- if (!_workers) {
415
- return;
416
- }
417
-
418
- const workers = _workers;
419
- _workers = undefined;
420
-
421
- _terminating = Promise.allSettled(workers.map((w) => w.terminate()));
422
-
423
- return _terminating;
424
- }
425
-
426
- export { getTfheWorkers, startWorkers, terminateWorkers, setWorkerUrlConfig };
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var startWorkers_v1_5_3_exports = {};
20
+ __export(startWorkers_v1_5_3_exports, {
21
+ getTfheWorkers: () => getTfheWorkers,
22
+ setWorkerUrlConfig: () => setWorkerUrlConfig,
23
+ startWorkers: () => startWorkers,
24
+ terminateWorkers: () => terminateWorkers
25
+ });
26
+ module.exports = __toCommonJS(startWorkers_v1_5_3_exports);
27
+ function __isBrowserLike() {
28
+ return typeof addEventListener === "function" && typeof removeEventListener === "function";
29
+ }
30
+ async function __newIsomorphicWorker(url) {
31
+ if (__isBrowserLike()) {
32
+ return new Worker(url, {
33
+ type: "module",
34
+ name: "wasm_bindgen_worker"
35
+ });
36
+ }
37
+ const nodeModuleName = "worker_threads";
38
+ const nodeModuleId = `node:${nodeModuleName}`;
39
+ const { Worker: NodeWorker } = await import(
40
+ /* @vite-ignore */
41
+ nodeModuleId
42
+ );
43
+ if (typeof url === "string" && url.startsWith("data:")) {
44
+ const base64 = url.split(",")[1];
45
+ const code = Buffer.from(base64, "base64").toString("utf-8");
46
+ return new NodeWorker(code, { eval: true });
47
+ }
48
+ return new NodeWorker(url);
49
+ }
50
+ async function __newWorkerFromJsCodeBase64(jsCodeBase64) {
51
+ if (__isBrowserLike()) {
52
+ const blob = new Blob([atob(jsCodeBase64)], {
53
+ type: "application/javascript"
54
+ });
55
+ const blobUrl = URL.createObjectURL(blob);
56
+ try {
57
+ const worker = new Worker(blobUrl, {
58
+ type: "module",
59
+ name: "wasm_bindgen_worker"
60
+ });
61
+ return { worker, blobUrl };
62
+ } catch (e) {
63
+ URL.revokeObjectURL(blobUrl);
64
+ throw e;
65
+ }
66
+ }
67
+ const nodeModuleName = "worker_threads";
68
+ const nodeModuleId = `node:${nodeModuleName}`;
69
+ const { Worker: NodeWorker } = await import(
70
+ /* @vite-ignore */
71
+ nodeModuleId
72
+ );
73
+ const code = Buffer.from(jsCodeBase64, "base64").toString("utf-8");
74
+ return { worker: new NodeWorker(code, { eval: true }), blobUrl: void 0 };
75
+ }
76
+ function __waitForMsgType(target, type) {
77
+ return new Promise((resolve, reject) => {
78
+ function cleanup() {
79
+ if (typeof target.removeEventListener === "function") {
80
+ target.removeEventListener("message", onBrowserMsg);
81
+ target.removeEventListener("error", onBrowserError);
82
+ } else {
83
+ target.off("message", onNodeMsg);
84
+ target.off("error", onNodeError);
85
+ target.off("exit", onNodeExit);
86
+ }
87
+ }
88
+ function onBrowserMsg({ data }) {
89
+ if (data?.type !== type) return;
90
+ cleanup();
91
+ resolve(data);
92
+ }
93
+ function onBrowserError(e) {
94
+ cleanup();
95
+ reject(e.error || new Error("Worker error"));
96
+ }
97
+ function onNodeMsg(data) {
98
+ if (data?.type !== type) return;
99
+ cleanup();
100
+ resolve(data);
101
+ }
102
+ function onNodeError(err) {
103
+ cleanup();
104
+ reject(err);
105
+ }
106
+ function onNodeExit(code) {
107
+ cleanup();
108
+ reject(new Error(`Worker exited with code ${code}`));
109
+ }
110
+ if (typeof target.removeEventListener === "function") {
111
+ target.addEventListener("message", onBrowserMsg);
112
+ target.addEventListener("error", onBrowserError);
113
+ } else {
114
+ target.on("message", onNodeMsg);
115
+ target.on("error", onNodeError);
116
+ target.on("exit", onNodeExit);
117
+ }
118
+ });
119
+ }
120
+ let _terminating;
121
+ let _configSet = false;
122
+ let _workerUrl = void 0;
123
+ let _logger = void 0;
124
+ let _started = false;
125
+ let _workers;
126
+ function getTfheWorkers() {
127
+ return _workers;
128
+ }
129
+ function setWorkerUrlConfig({
130
+ workerUrl = void 0,
131
+ logger = void 0
132
+ } = {}) {
133
+ if (_configSet) {
134
+ throw new Error("Cannot set worker url (already set)");
135
+ }
136
+ if (workerUrl !== void 0) {
137
+ if (!(workerUrl instanceof URL)) {
138
+ throw new TypeError("workerUrl must be a URL");
139
+ }
140
+ _workerUrl = workerUrl;
141
+ }
142
+ _logger = logger;
143
+ _configSet = true;
144
+ }
145
+ async function __createWorkerFromBase64() {
146
+ const workerBase64 = "ZnVuY3Rpb24gX19faXNCcm93c2VyTGlrZSgpe3JldHVybiB0eXBlb2YgYWRkRXZlbnRMaXN0ZW5lcj09ImZ1bmN0aW9uIiYmdHlwZW9mIHJlbW92ZUV2ZW50TGlzdGVuZXI9PSJmdW5jdGlvbiJ9YXN5bmMgZnVuY3Rpb24gX19fZ2V0VGFyZ2V0KCl7aWYoX19faXNCcm93c2VyTGlrZSgpKXJldHVybiBzZWxmO2NvbnN0IF89Im5vZGU6d29ya2VyX3RocmVhZHMiLHtwYXJlbnRQb3J0OmV9PWF3YWl0IGltcG9ydChfKTtyZXR1cm4gZX1mdW5jdGlvbiBfX193YWl0Rm9yTXNnVHlwZSh0LF8pe3JldHVybiBuZXcgUHJvbWlzZShlPT57dHlwZW9mIHQub249PSJmdW5jdGlvbiI/dC5vbigibWVzc2FnZSIsZnVuY3Rpb24gbihyKXtyPy50eXBlPT09XyYmKHQub2ZmKCJtZXNzYWdlIixuKSxlKHIpKX0pOnQuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gbih7ZGF0YTpyfSl7cj8udHlwZT09PV8mJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG4pLGUocikpfSl9KX1fX19nZXRUYXJnZXQoKS50aGVuKHQ9Pl9fX3dhaXRGb3JNc2dUeXBlKHQsIndhc21fYmluZGdlbl93b3JrZXJfaW5pdCIpLnRoZW4oYXN5bmMoe2luaXQ6XyxyZWNlaXZlcjplfSk9Pntjb25zdCBuPWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gdGZoZX0pO2F3YWl0IG4uZGVmYXVsdChfKSx0LnBvc3RNZXNzYWdlKHt0eXBlOiJ3YXNtX2JpbmRnZW5fd29ya2VyX3JlYWR5In0pLG4ud2JnX3JheW9uX3N0YXJ0X3dvcmtlcihlKX0pKTtmdW5jdGlvbiB3YmdfcmF5b25fc3RhcnRfd29ya2VyKHQpe3dhc20ud2JnX3JheW9uX3N0YXJ0X3dvcmtlcih0KX1mdW5jdGlvbiBkZWJ1Z1N0cmluZyh0KXtjb25zdCBfPXR5cGVvZiB0O2lmKF89PSJudW1iZXIifHxfPT0iYm9vbGVhbiJ8fHQ9PW51bGwpcmV0dXJuYCR7dH1gO2lmKF89PSJzdHJpbmciKXJldHVybmAiJHt0fSJgO2lmKF89PSJzeW1ib2wiKXtjb25zdCByPXQuZGVzY3JpcHRpb247cmV0dXJuIHI9PW51bGw/IlN5bWJvbCI6YFN5bWJvbCgke3J9KWB9aWYoXz09ImZ1bmN0aW9uIil7Y29uc3Qgcj10Lm5hbWU7cmV0dXJuIHR5cGVvZiByPT0ic3RyaW5nIiYmci5sZW5ndGg+MD9gRnVuY3Rpb24oJHtyfSlgOiJGdW5jdGlvbiJ9aWYoQXJyYXkuaXNBcnJheSh0KSl7Y29uc3Qgcj10Lmxlbmd0aDtsZXQgbz0iWyI7cj4wJiYobys9ZGVidWdTdHJpbmcodFswXSkpO2ZvcihsZXQgaT0xO2k8cjtpKyspbys9IiwgIitkZWJ1Z1N0cmluZyh0W2ldKTtyZXR1cm4gbys9Il0iLG99Y29uc3QgZT0vXFtvYmplY3QgKFteXF1dKylcXS8uZXhlYyh0b1N0cmluZy5jYWxsKHQpKTtsZXQgbjtpZihlJiZlLmxlbmd0aD4xKW49ZVsxXTtlbHNlIHJldHVybiB0b1N0cmluZy5jYWxsKHQpO2lmKG49PSJPYmplY3QiKXRyeXtyZXR1cm4iT2JqZWN0KCIrSlNPTi5zdHJpbmdpZnkodCkrIikifWNhdGNoe3JldHVybiJPYmplY3QifXJldHVybiB0IGluc3RhbmNlb2YgRXJyb3I/YCR7dC5uYW1lfTogJHt0Lm1lc3NhZ2V9CiR7dC5zdGFja31gOm59ZnVuY3Rpb24gZ2V0U3RyaW5nRnJvbVdhc20wKHQsXyl7cmV0dXJuIHQ9dD4+PjAsZGVjb2RlVGV4dCh0LF8pfWxldCBjYWNoZWRUZXh0RGVjb2Rlcj10eXBlb2YgVGV4dERlY29kZXI8InUiP25ldyBUZXh0RGVjb2RlcigidXRmLTgiLHtpZ25vcmVCT006ITAsZmF0YWw6ITB9KTp2b2lkIDA7Y2FjaGVkVGV4dERlY29kZXImJmNhY2hlZFRleHREZWNvZGVyLmRlY29kZSgpO2NvbnN0IE1BWF9TQUZBUklfREVDT0RFX0JZVEVTPTIxNDY0MzUwNzI7bGV0IG51bUJ5dGVzRGVjb2RlZD0wO2Z1bmN0aW9uIGRlY29kZVRleHQodCxfKXtyZXR1cm4gbnVtQnl0ZXNEZWNvZGVkKz1fLG51bUJ5dGVzRGVjb2RlZD49TUFYX1NBRkFSSV9ERUNPREVfQllURVMmJihjYWNoZWRUZXh0RGVjb2Rlcj1uZXcgVGV4dERlY29kZXIoInV0Zi04Iix7aWdub3JlQk9NOiEwLGZhdGFsOiEwfSksY2FjaGVkVGV4dERlY29kZXIuZGVjb2RlKCksbnVtQnl0ZXNEZWNvZGVkPV8pLGNhY2hlZFRleHREZWNvZGVyLmRlY29kZShnZXRVaW50OEFycmF5TWVtb3J5MCgpLnNsaWNlKHQsdCtfKSl9ZnVuY3Rpb24gYWRkVG9FeHRlcm5yZWZUYWJsZTAodCl7Y29uc3QgXz13YXNtLl9fZXh0ZXJucmVmX3RhYmxlX2FsbG9jKCk7cmV0dXJuIHdhc20uX193YmluZGdlbl9leHRlcm5yZWZzLnNldChfLHQpLF99bGV0IGNhY2hlZERhdGFWaWV3TWVtb3J5MD1udWxsO2Z1bmN0aW9uIGdldERhdGFWaWV3TWVtb3J5MCgpe3JldHVybihjYWNoZWREYXRhVmlld01lbW9yeTA9PT1udWxsfHxjYWNoZWREYXRhVmlld01lbW9yeTAuYnVmZmVyIT09d2FzbS5tZW1vcnkuYnVmZmVyKSYmKGNhY2hlZERhdGFWaWV3TWVtb3J5MD1uZXcgRGF0YVZpZXcod2FzbS5tZW1vcnkuYnVmZmVyKSksY2FjaGVkRGF0YVZpZXdNZW1vcnkwfWxldCBjYWNoZWRVaW50OEFycmF5TWVtb3J5MD1udWxsO2Z1bmN0aW9uIGdldFVpbnQ4QXJyYXlNZW1vcnkwKCl7cmV0dXJuKGNhY2hlZFVpbnQ4QXJyYXlNZW1vcnkwPT09bnVsbHx8Y2FjaGVkVWludDhBcnJheU1lbW9yeTAuYnVmZmVyIT09d2FzbS5tZW1vcnkuYnVmZmVyKSYmKGNhY2hlZFVpbnQ4QXJyYXlNZW1vcnkwPW5ldyBVaW50OEFycmF5KHdhc20ubWVtb3J5LmJ1ZmZlcikpLGNhY2hlZFVpbnQ4QXJyYXlNZW1vcnkwfWZ1bmN0aW9uIGdldEFycmF5VThGcm9tV2FzbTAodCxfKXtyZXR1cm4gdD10Pj4+MCxnZXRVaW50OEFycmF5TWVtb3J5MCgpLnN1YmFycmF5KHQvMSx0LzErXyl9bGV0IFdBU01fVkVDVE9SX0xFTj0wO2NvbnN0IGNhY2hlZFRleHRFbmNvZGVyPXR5cGVvZiBUZXh0RW5jb2RlcjwidSI/bmV3IFRleHRFbmNvZGVyOnZvaWQgMDtjYWNoZWRUZXh0RW5jb2RlciYmKGNhY2hlZFRleHRFbmNvZGVyLmVuY29kZUludG89ZnVuY3Rpb24odCxfKXtjb25zdCBlPWNhY2hlZFRleHRFbmNvZGVyLmVuY29kZSh0KTtyZXR1cm4gXy5zZXQoZSkse3JlYWQ6dC5sZW5ndGgsd3JpdHRlbjplLmxlbmd0aH19KTtmdW5jdGlvbiBwYXNzU3RyaW5nVG9XYXNtMCh0LF8sZSl7aWYoZT09PXZvaWQgMCl7Y29uc3QgYz1jYWNoZWRUZXh0RW5jb2Rlci5lbmNvZGUodCkscz1fKGMubGVuZ3RoLDEpPj4+MDtyZXR1cm4gZ2V0VWludDhBcnJheU1lbW9yeTAoKS5zdWJhcnJheShzLHMrYy5sZW5ndGgpLnNldChjKSxXQVNNX1ZFQ1RPUl9MRU49Yy5sZW5ndGgsc31sZXQgbj10Lmxlbmd0aCxyPV8obiwxKT4+PjA7Y29uc3Qgbz1nZXRVaW50OEFycmF5TWVtb3J5MCgpO2xldCBpPTA7Zm9yKDtpPG47aSsrKXtjb25zdCBjPXQuY2hhckNvZGVBdChpKTtpZihjPjEyNylicmVhaztvW3IraV09Y31pZihpIT09bil7aSE9PTAmJih0PXQuc2xpY2UoaSkpLHI9ZShyLG4sbj1pK3QubGVuZ3RoKjMsMSk+Pj4wO2NvbnN0IGM9Z2V0VWludDhBcnJheU1lbW9yeTAoKS5zdWJhcnJheShyK2kscituKSxzPWNhY2hlZFRleHRFbmNvZGVyLmVuY29kZUludG8odCxjKTtpKz1zLndyaXR0ZW4scj1lKHIsbixpLDEpPj4+MH1yZXR1cm4gV0FTTV9WRUNUT1JfTEVOPWkscn1mdW5jdGlvbiBoYW5kbGVFcnJvcih0LF8pe3RyeXtyZXR1cm4gdC5hcHBseSh0aGlzLF8pfWNhdGNoKGUpe2NvbnN0IG49YWRkVG9FeHRlcm5yZWZUYWJsZTAoZSk7d2FzbS5fX3diaW5kZ2VuX2V4bl9zdG9yZShuKX19ZnVuY3Rpb24gaXNMaWtlTm9uZSh0KXtyZXR1cm4gdD09bnVsbH1mdW5jdGlvbiBfX3diZ19nZXRfaW1wb3J0cyh0KXtyZXR1cm57X19wcm90b19fOm51bGwsIi4vdGZoZV9iZy5qcyI6e19fcHJvdG9fXzpudWxsLF9fd2JnX0JpZ0ludF83ZWExZTc0OWNlNmI5MmZkOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGUpe3JldHVybiBCaWdJbnQoZSl9LGFyZ3VtZW50cyl9LF9fd2JnX0JpZ0ludF9iN2JiY2NkZmYyNThjOWYyOmZ1bmN0aW9uKGUpe3JldHVybiBCaWdJbnQoZSl9LF9fd2JnX0Vycm9yXzhjNGU0M2ZlNzQ1NTlkNzM6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gRXJyb3IoZ2V0U3RyaW5nRnJvbVdhc20wKGUsbikpfSxfX3diZ19fX3diaW5kZ2VuX2JpZ2ludF9nZXRfYXNfaTY0XzhmY2Y0Y2U3ZjFjYTcyYTI6ZnVuY3Rpb24oZSxuKXtjb25zdCByPW4sbz10eXBlb2Ygcj09ImJpZ2ludCI/cjp2b2lkIDA7Z2V0RGF0YVZpZXdNZW1vcnkwKCkuc2V0QmlnSW50NjQoZSs4LGlzTGlrZU5vbmUobyk/QmlnSW50KDApOm8sITApLGdldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGUrMCwhaXNMaWtlTm9uZShvKSwhMCl9LF9fd2JnX19fd2JpbmRnZW5fYml0X2FuZF80MzYyYjExNzY5NTBkNDJhOmZ1bmN0aW9uKGUsbil7cmV0dXJuIGUmbn0sX193YmdfX193YmluZGdlbl9iaXRfb3JfNzFhMDJkMzk3OTZlYTEzZDpmdW5jdGlvbihlLG4pe3JldHVybiBlfG59LF9fd2JnX19fd2JpbmRnZW5fZGVidWdfc3RyaW5nXzBiYzg0ODJjNmUzNTA4YWU6ZnVuY3Rpb24oZSxuKXtjb25zdCByPWRlYnVnU3RyaW5nKG4pLG89cGFzc1N0cmluZ1RvV2FzbTAocix3YXNtLl9fd2JpbmRnZW5fbWFsbG9jLHdhc20uX193YmluZGdlbl9yZWFsbG9jKSxpPVdBU01fVkVDVE9SX0xFTjtnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihlKzQsaSwhMCksZ2V0RGF0YVZpZXdNZW1vcnkwKCkuc2V0SW50MzIoZSswLG8sITApfSxfX3diZ19fX3diaW5kZ2VuX2lzX2Z1bmN0aW9uXzAwOTVhNzNiOGIxNTZmNzY6ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlPT0iZnVuY3Rpb24ifSxfX3diZ19fX3diaW5kZ2VuX2lzX29iamVjdF81YWU4ZTU4ODBmMmMxZmJkOmZ1bmN0aW9uKGUpe2NvbnN0IG49ZTtyZXR1cm4gdHlwZW9mIG49PSJvYmplY3QiJiZuIT09bnVsbH0sX193YmdfX193YmluZGdlbl9pc19zdHJpbmdfY2Q0NDQ1MTZlZGM1YjE4MDpmdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmcifSxfX3diZ19fX3diaW5kZ2VuX2lzX3VuZGVmaW5lZF85ZTRkOTI1MzRjNDJkNzc4OmZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwfSxfX3diZ19fX3diaW5kZ2VuX2pzdmFsX2VxXzExODg4MzkwYjAxODYyNzA6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZT09PW59LF9fd2JnX19fd2JpbmRnZW5fbHRfYmI1OWNjM2QyMzUyNmUwZDpmdW5jdGlvbihlLG4pe3JldHVybiBlPG59LF9fd2JnX19fd2JpbmRnZW5fbWVtb3J5X2JkMWZiY2YyMWZiZWYzYzg6ZnVuY3Rpb24oKXtyZXR1cm4gd2FzbS5tZW1vcnl9LF9fd2JnX19fd2JpbmRnZW5fbW9kdWxlX2Y2YjgwNTJkNzljMWNjMTY6ZnVuY3Rpb24oKXtyZXR1cm4gd2FzbU1vZHVsZX0sX193YmdfX193YmluZGdlbl9uZWdfNmI0ZDM1NmRmZjQ5ZGNjNjpmdW5jdGlvbihlKXtyZXR1cm4tZX0sX193YmdfX193YmluZGdlbl9zaGxfOGQ2NGQwNjc2MWY5ZWE0ZTpmdW5jdGlvbihlLG4pe3JldHVybiBlPDxufSxfX3diZ19fX3diaW5kZ2VuX3Nocl9lZjhlMDdjY2U3MDllYjU0OmZ1bmN0aW9uKGUsbil7cmV0dXJuIGU+Pm59LF9fd2JnX19fd2JpbmRnZW5fc3RyaW5nX2dldF83MmZiNjk2MjAyYzU2NzI5OmZ1bmN0aW9uKGUsbil7Y29uc3Qgcj1uLG89dHlwZW9mIHI9PSJzdHJpbmciP3I6dm9pZCAwO3ZhciBpPWlzTGlrZU5vbmUobyk/MDpwYXNzU3RyaW5nVG9XYXNtMChvLHdhc20uX193YmluZGdlbl9tYWxsb2Msd2FzbS5fX3diaW5kZ2VuX3JlYWxsb2MpLGM9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGUrNCxjLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihlKzAsaSwhMCl9LF9fd2JnX19fd2JpbmRnZW5fdGhyb3dfYmUyODlkNTAzNGVkMjcxYjpmdW5jdGlvbihlLG4pe3Rocm93IG5ldyBFcnJvcihnZXRTdHJpbmdGcm9tV2FzbTAoZSxuKSl9LF9fd2JnX2NhbGxfMzg5ZWZlMjg0MzVhOTM4ODpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihlLG4pe3JldHVybiBlLmNhbGwobil9LGFyZ3VtZW50cyl9LF9fd2JnX2NhbGxfNDcwOGUwYzEzYmRjOGU5NTpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihlLG4scil7cmV0dXJuIGUuY2FsbChuLHIpfSxhcmd1bWVudHMpfSxfX3diZ19jcnlwdG9fODZmMjYzMWU5MWI1MTUxMTpmdW5jdGlvbihlKXtyZXR1cm4gZS5jcnlwdG99LF9fd2JnX2Vycm9yXzc1MzRiOGU5YTM2ZjFhYjQ6ZnVuY3Rpb24oZSxuKXtsZXQgcixvO3RyeXtyPWUsbz1uLGNvbnNvbGUuZXJyb3IoZ2V0U3RyaW5nRnJvbVdhc20wKGUsbikpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2ZyZWUocixvLDEpfX0sX193YmdfZ2V0UmFuZG9tVmFsdWVzX2IzZjE1ZmNiZmFiYjBmOGI6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oZSxuKXtlLmdldFJhbmRvbVZhbHVlcyhuKX0sYXJndW1lbnRzKX0sX193YmdfZ2V0VGltZV8xZTNjZDEzOTFjNWMzOTk1OmZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFRpbWUoKX0sX193YmdfaW5zdGFuY2VvZl9XaW5kb3dfZWQ0OWIyZGI4ZGY5MDM1OTpmdW5jdGlvbihlKXtsZXQgbjt0cnl7bj1lIGluc3RhbmNlb2YgV2luZG93fWNhdGNoe249ITF9cmV0dXJuIG59LF9fd2JnX2xlbmd0aF8zMmVkOWEyNzlhY2QwNTRjOmZ1bmN0aW9uKGUpe3JldHVybiBlLmxlbmd0aH0sX193YmdfbXNDcnlwdG9fZDU2MmJiZTgzZTBkNGI5MTpmdW5jdGlvbihlKXtyZXR1cm4gZS5tc0NyeXB0b30sX193YmdfbmV3XzBfNzNhZmMzNWViNTQ0ZTUzOTpmdW5jdGlvbigpe3JldHVybiBuZXcgRGF0ZX0sX193YmdfbmV3XzhhNmYyMzhhNmVjZTg2ZWE6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEVycm9yfSxfX3diZ19uZXdfbm9fYXJnc18xYzdjODQyZjA4ZDAwZWJiOmZ1bmN0aW9uKGUsbil7cmV0dXJuIG5ldyBGdW5jdGlvbihnZXRTdHJpbmdGcm9tV2FzbTAoZSxuKSl9LF9fd2JnX25ld193aXRoX2xlbmd0aF9hMmMzOWNiZTg4ZmQ4ZmYxOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVWludDhBcnJheShlPj4+MCl9LF9fd2JnX25vZGVfZTFmMjRmODlhNzMzNmMyZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlfSxfX3diZ19wcm9jZXNzXzM5NzVmZDZjNzJmNTIwYWE6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucHJvY2Vzc30sX193YmdfcHJvdG90eXBlc2V0Y2FsbF9iZGNkY2M1ODQyZTRkNzdkOmZ1bmN0aW9uKGUsbixyKXtVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChnZXRBcnJheVU4RnJvbVdhc20wKGUsbikscil9LF9fd2JnX3JhbmRvbUZpbGxTeW5jX2Y4YzE1M2I3OWYyODU4MTc6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oZSxuKXtlLnJhbmRvbUZpbGxTeW5jKG4pfSxhcmd1bWVudHMpfSxfX3diZ19yZXF1aXJlX2I3NGY0N2ZjMmQwMjJmZDY6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oKXtyZXR1cm4gbW9kdWxlLnJlcXVpcmV9LGFyZ3VtZW50cyl9LF9fd2JnX3N0YWNrXzBlZDc1ZDY4NTc1YjBmM2M6ZnVuY3Rpb24oZSxuKXtjb25zdCByPW4uc3RhY2ssbz1wYXNzU3RyaW5nVG9XYXNtMChyLHdhc20uX193YmluZGdlbl9tYWxsb2Msd2FzbS5fX3diaW5kZ2VuX3JlYWxsb2MpLGk9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGUrNCxpLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihlKzAsbywhMCl9LF9fd2JnX3N0YXJ0V29ya2Vyc18yY2ExMTc2MWUwOGZmNWQ1OmZ1bmN0aW9uKGUsbixyKXtoYW5kbGVFcnJvcihmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigic3RhcnRXb3JrZXJzIG5vdCBzdXBwb3J0ZWQgZnJvbSBhIHdvcmtlciB0aHJlYWQiKX0pfSxfX3diZ19zdGF0aWNfYWNjZXNzb3JfR0xPQkFMXzEyODM3MTY3YWQ5MzUxMTY6ZnVuY3Rpb24oKXtjb25zdCBlPXR5cGVvZiBnbG9iYWw+InUiP251bGw6Z2xvYmFsO3JldHVybiBpc0xpa2VOb25lKGUpPzA6YWRkVG9FeHRlcm5yZWZUYWJsZTAoZSl9LF9fd2JnX3N0YXRpY19hY2Nlc3Nvcl9HTE9CQUxfVEhJU19lNjI4ZTg5YWIzYjFjOTVmOmZ1bmN0aW9uKCl7Y29uc3QgZT10eXBlb2YgZ2xvYmFsVGhpcz4idSI/bnVsbDpnbG9iYWxUaGlzO3JldHVybiBpc0xpa2VOb25lKGUpPzA6YWRkVG9FeHRlcm5yZWZUYWJsZTAoZSl9LF9fd2JnX3N0YXRpY19hY2Nlc3Nvcl9TRUxGX2E2MjFkM2RmYmI2MGQwY2U6ZnVuY3Rpb24oKXtjb25zdCBlPXR5cGVvZiBzZWxmPiJ1Ij9udWxsOnNlbGY7cmV0dXJuIGlzTGlrZU5vbmUoZSk/MDphZGRUb0V4dGVybnJlZlRhYmxlMChlKX0sX193Ymdfc3RhdGljX2FjY2Vzc29yX1dJTkRPV19mODcyN2YwY2Y4ODhlMGJkOmZ1bmN0aW9uKCl7Y29uc3QgZT10eXBlb2Ygd2luZG93PiJ1Ij9udWxsOndpbmRvdztyZXR1cm4gaXNMaWtlTm9uZShlKT8wOmFkZFRvRXh0ZXJucmVmVGFibGUwKGUpfSxfX3diZ19zdWJhcnJheV9hOTZlMWZlZjE3ZWQyM2NiOmZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gZS5zdWJhcnJheShuPj4+MCxyPj4+MCl9LF9fd2JnX3RvU3RyaW5nXzAyOWFjMjQ0MjFmZDdhMjQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9TdHJpbmcoKX0sX193YmdfdG9TdHJpbmdfNTZkOTQ2ZGFmZjgzODY3YjpmdW5jdGlvbihlLG4scil7Y29uc3Qgbz1uLnRvU3RyaW5nKHIpLGk9cGFzc1N0cmluZ1RvV2FzbTAobyx3YXNtLl9fd2JpbmRnZW5fbWFsbG9jLHdhc20uX193YmluZGdlbl9yZWFsbG9jKSxjPVdBU01fVkVDVE9SX0xFTjtnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihlKzQsYywhMCksZ2V0RGF0YVZpZXdNZW1vcnkwKCkuc2V0SW50MzIoZSswLGksITApfSxfX3diZ192ZXJzaW9uc180ZTMxMjI2ZjVlOGRjOTA5OmZ1bmN0aW9uKGUpe3JldHVybiBlLnZlcnNpb25zfSxfX3diaW5kZ2VuX2Nhc3RfMDAwMDAwMDAwMDAwMDAwMTpmdW5jdGlvbihlKXtyZXR1cm4gZX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDI6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gQmlnSW50LmFzVWludE4oNjQsZSl8bjw8QmlnSW50KDY0KX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDM6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LF9fd2JpbmRnZW5fY2FzdF8wMDAwMDAwMDAwMDAwMDA0OmZ1bmN0aW9uKGUsbil7cmV0dXJuIGdldEFycmF5VThGcm9tV2FzbTAoZSxuKX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDU6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZ2V0U3RyaW5nRnJvbVdhc20wKGUsbil9LF9fd2JpbmRnZW5fY2FzdF8wMDAwMDAwMDAwMDAwMDA2OmZ1bmN0aW9uKGUsbil7cmV0dXJuIEJpZ0ludC5hc1VpbnROKDY0LGUpfEJpZ0ludC5hc1VpbnROKDY0LG4pPDxCaWdJbnQoNjQpfSxfX3diaW5kZ2VuX2Nhc3RfMDAwMDAwMDAwMDAwMDAwNzpmdW5jdGlvbihlKXtyZXR1cm4gQmlnSW50LmFzVWludE4oNjQsZSl9LF9fd2JpbmRnZW5faW5pdF9leHRlcm5yZWZfdGFibGU6ZnVuY3Rpb24oKXtjb25zdCBlPXdhc20uX193YmluZGdlbl9leHRlcm5yZWZzLG49ZS5ncm93KDQpO2Uuc2V0KDAsdm9pZCAwKSxlLnNldChuKzAsdm9pZCAwKSxlLnNldChuKzEsbnVsbCksZS5zZXQobisyLCEwKSxlLnNldChuKzMsITEpfSxtZW1vcnk6dHx8bmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7aW5pdGlhbDoyMSxtYXhpbXVtOjE2Mzg0LHNoYXJlZDohMH0pfX19bGV0IHdhc21Nb2R1bGUsd2FzbTtmdW5jdGlvbiBfX3diZ19maW5hbGl6ZV9pbml0KHQsXyxlKXtpZih3YXNtPXQuZXhwb3J0cyx3YXNtTW9kdWxlPV8sY2FjaGVkRGF0YVZpZXdNZW1vcnkwPW51bGwsY2FjaGVkVWludDhBcnJheU1lbW9yeTA9bnVsbCx0eXBlb2YgZTwidSImJih0eXBlb2YgZSE9Im51bWJlciJ8fGU9PT0wfHxlJTY1NTM2IT09MCkpdGhyb3ciaW52YWxpZCBzdGFjayBzaXplIjtyZXR1cm4gd2FzbS5fX3diaW5kZ2VuX3N0YXJ0KGUpLHdhc219YXN5bmMgZnVuY3Rpb24gX193YmdfbG9hZCh0LF8pe2lmKHR5cGVvZiBSZXNwb25zZT09ImZ1bmN0aW9uIiYmdCBpbnN0YW5jZW9mIFJlc3BvbnNlKXtpZih0eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmc9PSJmdW5jdGlvbiIpdHJ5e3JldHVybiBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyh0LF8pfWNhdGNoKHIpe2lmKHQub2smJmUodC50eXBlKSYmdC5oZWFkZXJzLmdldCgiQ29udGVudC1UeXBlIikhPT0iYXBwbGljYXRpb24vd2FzbSIpY29uc29sZS53YXJuKCJgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmdgIGZhaWxlZCBiZWNhdXNlIHlvdXIgc2VydmVyIGRvZXMgbm90IHNlcnZlIFdhc20gd2l0aCBgYXBwbGljYXRpb24vd2FzbWAgTUlNRSB0eXBlLiBGYWxsaW5nIGJhY2sgdG8gYFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlYCB3aGljaCBpcyBzbG93ZXIuIE9yaWdpbmFsIGVycm9yOlxuIixyKTtlbHNlIHRocm93IHJ9Y29uc3Qgbj1hd2FpdCB0LmFycmF5QnVmZmVyKCk7cmV0dXJuIGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKG4sXyl9ZWxzZXtjb25zdCBuPWF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHQsXyk7cmV0dXJuIG4gaW5zdGFuY2VvZiBXZWJBc3NlbWJseS5JbnN0YW5jZT97aW5zdGFuY2U6bixtb2R1bGU6dH06bn1mdW5jdGlvbiBlKG4pe3N3aXRjaChuKXtjYXNlImJhc2ljIjpjYXNlImNvcnMiOmNhc2UiZGVmYXVsdCI6cmV0dXJuITB9cmV0dXJuITF9fWFzeW5jIGZ1bmN0aW9uIF9fd2JnX2luaXQodCxfKXtpZih3YXNtIT09dm9pZCAwKXJldHVybiB3YXNtO2xldCBlO3QhPT12b2lkIDAmJihPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk9PT1PYmplY3QucHJvdG90eXBlP3ttb2R1bGVfb3JfcGF0aDp0LG1lbW9yeTpfLHRocmVhZF9zdGFja19zaXplOmV9PXQ6Y29uc29sZS53YXJuKCJ1c2luZyBkZXByZWNhdGVkIHBhcmFtZXRlcnMgZm9yIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbjsgcGFzcyBhIHNpbmdsZSBvYmplY3QgaW5zdGVhZCIpKTtjb25zdCBuPV9fd2JnX2dldF9pbXBvcnRzKF8pLHtpbnN0YW5jZTpyLG1vZHVsZTpvfT1hd2FpdCBfX3diZ19sb2FkKGF3YWl0IHQsbik7cmV0dXJuIF9fd2JnX2ZpbmFsaXplX2luaXQocixvLGUpfXZhciB0ZmhlPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLGRlZmF1bHQ6X193YmdfaW5pdCx3YmdfcmF5b25fc3RhcnRfd29ya2VyfSk7Cg==";
147
+ return await __newWorkerFromJsCodeBase64(workerBase64);
148
+ }
149
+ async function startWorkers(module2, memory, builder) {
150
+ if (_started) {
151
+ throw new Error("Already started");
152
+ }
153
+ _started = true;
154
+ if (_terminating) {
155
+ throw new Error("Cannot start workers while termination is in progress");
156
+ }
157
+ if (builder.numThreads() === 0) {
158
+ throw new Error(`num_threads must be > 0.`);
159
+ }
160
+ const workerInit = {
161
+ type: "wasm_bindgen_worker_init",
162
+ init: { module_or_path: module2, memory },
163
+ // SharedArrayBuffer
164
+ receiver: builder.receiver()
165
+ };
166
+ const results = await Promise.allSettled(
167
+ Array.from({ length: builder.numThreads() }, async (_, workerIndex) => {
168
+ let blobUrl = void 0;
169
+ let worker;
170
+ if (_workerUrl) {
171
+ try {
172
+ worker = await __newIsomorphicWorker(_workerUrl);
173
+ _logger?.debug(
174
+ `[Worker #${workerIndex}] - created at url: ${_workerUrl}`
175
+ );
176
+ } catch (e) {
177
+ _logger?.error(
178
+ `[Worker #${workerIndex}] - create failed: ${e.message}`,
179
+ e
180
+ );
181
+ }
182
+ if (worker === void 0) {
183
+ try {
184
+ const scriptBlob = await fetch(_workerUrl).then((r) => r.blob());
185
+ blobUrl = URL.createObjectURL(scriptBlob);
186
+ worker = await __newIsomorphicWorker(blobUrl);
187
+ _logger?.debug(
188
+ `[Worker #${workerIndex}] - created fallback blob worker at url: ${_workerUrl}`
189
+ );
190
+ } catch (e) {
191
+ if (blobUrl) {
192
+ URL.revokeObjectURL(blobUrl);
193
+ blobUrl = void 0;
194
+ }
195
+ _logger?.error(
196
+ `[Worker #${workerIndex}] - create fallback blob worker failed: ${e.message}`,
197
+ e
198
+ );
199
+ }
200
+ }
201
+ }
202
+ try {
203
+ if (!worker) {
204
+ try {
205
+ const result = await __createWorkerFromBase64();
206
+ worker = result.worker;
207
+ blobUrl = result.blobUrl ?? blobUrl;
208
+ _logger?.debug(
209
+ `[Worker #${workerIndex}] - created blob worker using base64`
210
+ );
211
+ } catch (e) {
212
+ _logger?.error(
213
+ `[Worker #${workerIndex}] - create blob worker using base64 failed`,
214
+ e
215
+ );
216
+ throw new Error(
217
+ "All worker creation methods failed. Check CSP, COOP/COEP headers, and cross-origin policies.",
218
+ { cause: e }
219
+ );
220
+ }
221
+ }
222
+ try {
223
+ worker.postMessage(workerInit);
224
+ } catch (e) {
225
+ _logger?.error(`[Worker #${workerIndex}] - postMessage failed`, e);
226
+ throw e;
227
+ }
228
+ await __waitForMsgType(worker, "wasm_bindgen_worker_ready");
229
+ if (blobUrl) {
230
+ URL.revokeObjectURL(blobUrl);
231
+ blobUrl = void 0;
232
+ }
233
+ _logger?.debug(`[Worker #${workerIndex}] - ready`);
234
+ return worker;
235
+ } catch (err) {
236
+ if (blobUrl) {
237
+ URL.revokeObjectURL(blobUrl);
238
+ blobUrl = void 0;
239
+ }
240
+ throw err;
241
+ }
242
+ })
243
+ );
244
+ const workers = [];
245
+ const errors = [];
246
+ for (const result of results) {
247
+ if (result.status === "fulfilled") {
248
+ workers.push(result.value);
249
+ } else {
250
+ errors.push(result.reason);
251
+ }
252
+ }
253
+ if (errors.length > 0) {
254
+ await Promise.allSettled(workers.map((w) => w.terminate()));
255
+ throw errors[0];
256
+ }
257
+ _workers = workers;
258
+ builder.build();
259
+ }
260
+ async function terminateWorkers() {
261
+ if (_terminating) {
262
+ return _terminating;
263
+ }
264
+ if (!_workers) {
265
+ return;
266
+ }
267
+ const workers = _workers;
268
+ _workers = void 0;
269
+ _terminating = Promise.allSettled(workers.map((w) => w.terminate()));
270
+ return _terminating;
271
+ }
272
+ // Annotate the CommonJS export names for ESM import in node:
273
+ 0 && (module.exports = {
274
+ getTfheWorkers,
275
+ setWorkerUrlConfig,
276
+ startWorkers,
277
+ terminateWorkers
278
+ });
279
+ //# sourceMappingURL=startWorkers.v1.5.3.js.map