@fhevm/sdk 1.0.0-alpha.4 → 1.0.0-alpha.5

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 (238) hide show
  1. package/_cjs/core/_version.js +1 -1
  2. package/_cjs/core/actions/base/fetchEncryptedValues.js +18 -0
  3. package/_cjs/core/actions/base/fetchEncryptedValues.js.map +1 -0
  4. package/_cjs/core/actions/base/index.js +3 -1
  5. package/_cjs/core/actions/base/index.js.map +1 -1
  6. package/_cjs/core/actions/chain/createKmsDelegatedUserDecryptEip712.js.map +1 -1
  7. package/_cjs/core/actions/chain/createKmsUserDecryptEip712.js.map +1 -1
  8. package/_cjs/core/actions/chain/index.js +5 -5
  9. package/_cjs/core/actions/chain/parseSignedDecryptionPermit.js +2 -2
  10. package/_cjs/core/actions/chain/parseSignedDecryptionPermit.js.map +1 -1
  11. package/_cjs/core/actions/chain/parseTransportKeyPair.js +8 -0
  12. package/_cjs/core/actions/chain/parseTransportKeyPair.js.map +1 -0
  13. package/_cjs/core/actions/chain/serializeTransportKeyPair.js +8 -0
  14. package/_cjs/core/actions/chain/serializeTransportKeyPair.js.map +1 -0
  15. package/_cjs/core/actions/decrypt/generateTransportKeyPair.js +8 -0
  16. package/_cjs/core/actions/decrypt/generateTransportKeyPair.js.map +1 -0
  17. package/_cjs/core/actions/decrypt/index.js +3 -3
  18. package/_cjs/core/actions/decrypt/index.js.map +1 -1
  19. package/_cjs/core/base/address.js.map +1 -1
  20. package/_cjs/core/base/fetch.js +2 -2
  21. package/_cjs/core/base/fetch.js.map +1 -1
  22. package/_cjs/core/base/sign.js +12 -6
  23. package/_cjs/core/base/sign.js.map +1 -1
  24. package/_cjs/core/base/wasm.js +1 -1
  25. package/_cjs/core/base/wasm.js.map +1 -1
  26. package/_cjs/core/clients/decorators/base.js +4 -4
  27. package/_cjs/core/clients/decorators/decrypt.js +2 -2
  28. package/_cjs/core/coprocessor/ZkProof-p.js +2 -1
  29. package/_cjs/core/coprocessor/ZkProof-p.js.map +1 -1
  30. package/_cjs/core/handle/EncryptedValue.js +0 -4
  31. package/_cjs/core/handle/EncryptedValue.js.map +1 -1
  32. package/_cjs/core/handle/FheType.js.map +1 -1
  33. package/_cjs/core/host-contracts/canDecryptValuesFromPairs.js +3 -3
  34. package/_cjs/core/kms/SignedDecryptionPermit-p.js +9 -9
  35. package/_cjs/core/kms/SignedDecryptionPermit-p.js.map +1 -1
  36. package/_cjs/core/kms/{TransportKeypair-p.js → TransportKeyPair-p.js} +48 -48
  37. package/_cjs/core/kms/{TransportKeypair-p.js.map → TransportKeyPair-p.js.map} +1 -1
  38. package/_cjs/core/kms/decryptKmsSignedcryptedShares-p.js +3 -3
  39. package/_cjs/core/kms/decryptKmsSignedcryptedShares-p.js.map +1 -1
  40. package/_cjs/core/kms/decryptValuesFromPairs.js +2 -2
  41. package/_cjs/core/kms/decryptValuesFromPairs.js.map +1 -1
  42. package/_cjs/core/kms/index.js +0 -1
  43. package/_cjs/core/modules/decrypt/mock.js.map +1 -1
  44. package/_cjs/core/modules/decrypt/module/init-p.js +3 -7
  45. package/_cjs/core/modules/decrypt/module/init-p.js.map +1 -1
  46. package/_cjs/core/modules/encrypt/mock.js.map +1 -1
  47. package/_cjs/core/modules/encrypt/module/api-p.js.map +1 -1
  48. package/_cjs/core/modules/encrypt/module/index.js.map +1 -1
  49. package/_cjs/core/modules/encrypt/module/init-p.js +18 -13
  50. package/_cjs/core/modules/encrypt/module/init-p.js.map +1 -1
  51. package/_cjs/core/modules/relayer/module/fetchPublicDecrypt.js.map +1 -1
  52. package/_cjs/core/modules/relayer/module/fetchUserDecrypt.js.map +1 -1
  53. package/_cjs/core/modules/relayer/module/guards/RelayerErrorBody.js +27 -0
  54. package/_cjs/core/modules/relayer/module/guards/RelayerErrorBody.js.map +1 -0
  55. package/_cjs/core/types/index.js +4 -0
  56. package/_cjs/core/types/index.js.map +1 -1
  57. package/_cjs/core/utils-p/decrypt/assertPermitMatchesKeyPair.js +14 -0
  58. package/_cjs/core/utils-p/decrypt/{assertPermitMatchesKeypair.js.map → assertPermitMatchesKeyPair.js.map} +1 -1
  59. package/_cjs/core/utils-p/decrypt/verifyTkmsPublicKey.js +1 -1
  60. package/_esm/core/_version.js +1 -1
  61. package/_esm/core/actions/base/fetchEncryptedValues.js +16 -0
  62. package/_esm/core/actions/base/fetchEncryptedValues.js.map +1 -0
  63. package/_esm/core/actions/base/index.js +1 -0
  64. package/_esm/core/actions/base/index.js.map +1 -1
  65. package/_esm/core/actions/chain/createKmsDelegatedUserDecryptEip712.js.map +1 -1
  66. package/_esm/core/actions/chain/createKmsUserDecryptEip712.js.map +1 -1
  67. package/_esm/core/actions/chain/index.js +2 -2
  68. package/_esm/core/actions/chain/parseSignedDecryptionPermit.js +3 -3
  69. package/_esm/core/actions/chain/parseSignedDecryptionPermit.js.map +1 -1
  70. package/_esm/core/actions/chain/parseTransportKeyPair.js +5 -0
  71. package/_esm/core/actions/chain/parseTransportKeyPair.js.map +1 -0
  72. package/_esm/core/actions/chain/serializeTransportKeyPair.js +5 -0
  73. package/_esm/core/actions/chain/{serializeTransportKeypair.js.map → serializeTransportKeyPair.js.map} +1 -1
  74. package/_esm/core/actions/decrypt/generateTransportKeyPair.js +6 -0
  75. package/_esm/core/actions/decrypt/{generateTransportKeypair.js.map → generateTransportKeyPair.js.map} +1 -1
  76. package/_esm/core/actions/decrypt/index.js +3 -1
  77. package/_esm/core/actions/decrypt/index.js.map +1 -1
  78. package/_esm/core/base/address.js.map +1 -1
  79. package/_esm/core/base/fetch.js +2 -2
  80. package/_esm/core/base/fetch.js.map +1 -1
  81. package/_esm/core/base/sign.js +15 -8
  82. package/_esm/core/base/sign.js.map +1 -1
  83. package/_esm/core/base/wasm.js +1 -1
  84. package/_esm/core/base/wasm.js.map +1 -1
  85. package/_esm/core/clients/decorators/base.js +4 -4
  86. package/_esm/core/clients/decorators/decrypt.js +2 -2
  87. package/_esm/core/coprocessor/ZkProof-p.js +3 -2
  88. package/_esm/core/coprocessor/ZkProof-p.js.map +1 -1
  89. package/_esm/core/handle/EncryptedValue.js +0 -3
  90. package/_esm/core/handle/EncryptedValue.js.map +1 -1
  91. package/_esm/core/handle/FheType.js +10 -17
  92. package/_esm/core/handle/FheType.js.map +1 -1
  93. package/_esm/core/host-contracts/canDecryptValuesFromPairs.js +3 -3
  94. package/_esm/core/kms/SignedDecryptionPermit-p.js +9 -9
  95. package/_esm/core/kms/SignedDecryptionPermit-p.js.map +1 -1
  96. package/_esm/core/kms/{TransportKeypair-p.js → TransportKeyPair-p.js} +55 -55
  97. package/_esm/core/kms/{TransportKeypair-p.js.map → TransportKeyPair-p.js.map} +1 -1
  98. package/_esm/core/kms/decryptKmsSignedcryptedShares-p.js +4 -4
  99. package/_esm/core/kms/decryptKmsSignedcryptedShares-p.js.map +1 -1
  100. package/_esm/core/kms/decryptValuesFromPairs.js +2 -2
  101. package/_esm/core/kms/decryptValuesFromPairs.js.map +1 -1
  102. package/_esm/core/modules/decrypt/mock.js.map +1 -1
  103. package/_esm/core/modules/decrypt/module/init-p.js +13 -11
  104. package/_esm/core/modules/decrypt/module/init-p.js.map +1 -1
  105. package/_esm/core/modules/encrypt/mock.js.map +1 -1
  106. package/_esm/core/modules/encrypt/module/api-p.js.map +1 -1
  107. package/_esm/core/modules/encrypt/module/index.js.map +1 -1
  108. package/_esm/core/modules/encrypt/module/init-p.js +34 -17
  109. package/_esm/core/modules/encrypt/module/init-p.js.map +1 -1
  110. package/_esm/core/modules/relayer/module/fetchPublicDecrypt.js.map +1 -1
  111. package/_esm/core/modules/relayer/module/fetchUserDecrypt.js.map +1 -1
  112. package/_esm/core/modules/relayer/module/guards/RelayerErrorBody.js +24 -0
  113. package/_esm/core/modules/relayer/module/guards/RelayerErrorBody.js.map +1 -0
  114. package/_esm/core/types/index.js +1 -1
  115. package/_esm/core/types/index.js.map +1 -1
  116. package/_esm/core/utils-p/decrypt/assertPermitMatchesKeyPair.js +19 -0
  117. package/_esm/core/utils-p/decrypt/{assertPermitMatchesKeypair.js.map → assertPermitMatchesKeyPair.js.map} +1 -1
  118. package/_esm/core/utils-p/decrypt/verifyTkmsPublicKey.js +1 -1
  119. package/_types/core/actions/base/fetchEncryptedValues.d.ts +16 -0
  120. package/_types/core/actions/base/fetchEncryptedValues.d.ts.map +1 -0
  121. package/_types/core/actions/base/index.d.ts +1 -0
  122. package/_types/core/actions/base/index.d.ts.map +1 -1
  123. package/_types/core/actions/chain/createKmsDelegatedUserDecryptEip712.d.ts.map +1 -1
  124. package/_types/core/actions/chain/createKmsUserDecryptEip712.d.ts.map +1 -1
  125. package/_types/core/actions/chain/index.d.ts +2 -2
  126. package/_types/core/actions/chain/parseSignedDecryptionPermit.d.ts +4 -4
  127. package/_types/core/actions/chain/parseSignedDecryptionPermit.d.ts.map +1 -1
  128. package/_types/core/actions/chain/{parseTransportKeypair.d.ts → parseTransportKeyPair.d.ts} +5 -5
  129. package/_types/core/actions/chain/{parseTransportKeypair.d.ts.map → parseTransportKeyPair.d.ts.map} +1 -1
  130. package/_types/core/actions/chain/{serializeTransportKeypair.d.ts → serializeTransportKeyPair.d.ts} +6 -6
  131. package/_types/core/actions/chain/{serializeTransportKeypair.d.ts.map → serializeTransportKeyPair.d.ts.map} +1 -1
  132. package/_types/core/actions/decrypt/canDecryptValue.d.ts +4 -4
  133. package/_types/core/actions/decrypt/canDecryptValues.d.ts +2 -2
  134. package/_types/core/actions/decrypt/canDecryptValuesFromPairs.d.ts +2 -2
  135. package/_types/core/actions/decrypt/decryptKmsSignedcryptedShares.d.ts +2 -2
  136. package/_types/core/actions/decrypt/decryptValue.d.ts +2 -2
  137. package/_types/core/actions/decrypt/decryptValues.d.ts +2 -2
  138. package/_types/core/actions/decrypt/decryptValuesFromPairs.d.ts +2 -2
  139. package/_types/core/actions/decrypt/{generateTransportKeypair.d.ts → generateTransportKeyPair.d.ts} +4 -4
  140. package/_types/core/actions/decrypt/{generateTransportKeypair.d.ts.map → generateTransportKeyPair.d.ts.map} +1 -1
  141. package/_types/core/actions/decrypt/index.d.ts +3 -1
  142. package/_types/core/actions/decrypt/index.d.ts.map +1 -1
  143. package/_types/core/base/address.d.ts.map +1 -1
  144. package/_types/core/base/sign.d.ts.map +1 -1
  145. package/_types/core/clients/decorators/base.d.ts +6 -6
  146. package/_types/core/clients/decorators/base.d.ts.map +1 -1
  147. package/_types/core/clients/decorators/decrypt.d.ts +2 -2
  148. package/_types/core/coprocessor/ZkProof-p.d.ts +2 -1
  149. package/_types/core/coprocessor/ZkProof-p.d.ts.map +1 -1
  150. package/_types/core/handle/EncryptedValue.d.ts +0 -1
  151. package/_types/core/handle/EncryptedValue.d.ts.map +1 -1
  152. package/_types/core/handle/FheType.d.ts +10 -17
  153. package/_types/core/handle/FheType.d.ts.map +1 -1
  154. package/_types/core/host-contracts/canDecryptValuesFromPairs.d.ts +2 -2
  155. package/_types/core/kms/SignedDecryptionPermit-p.d.ts +6 -6
  156. package/_types/core/kms/{TransportKeypair-p.d.ts → TransportKeyPair-p.d.ts} +23 -23
  157. package/_types/core/kms/{TransportKeypair-p.d.ts.map → TransportKeyPair-p.d.ts.map} +1 -1
  158. package/_types/core/kms/decryptKmsSignedcryptedShares-p.d.ts +2 -2
  159. package/_types/core/kms/decryptValuesFromPairs.d.ts +3 -3
  160. package/_types/core/kms/index.d.ts +1 -1
  161. package/_types/core/kms/index.d.ts.map +1 -1
  162. package/_types/core/modules/decrypt/module/init-p.d.ts.map +1 -1
  163. package/_types/core/modules/encrypt/mock.d.ts +2 -2
  164. package/_types/core/modules/encrypt/mock.d.ts.map +1 -1
  165. package/_types/core/modules/encrypt/module/api-p.d.ts +2 -2
  166. package/_types/core/modules/encrypt/module/api-p.d.ts.map +1 -1
  167. package/_types/core/modules/encrypt/module/init-p.d.ts.map +1 -1
  168. package/_types/core/modules/encrypt/types.d.ts +2 -2
  169. package/_types/core/modules/encrypt/types.d.ts.map +1 -1
  170. package/_types/core/modules/relayer/module/fetchUserDecrypt.d.ts.map +1 -1
  171. package/_types/core/modules/relayer/module/guards/RelayerErrorBody.d.ts +13 -0
  172. package/_types/core/modules/relayer/module/guards/RelayerErrorBody.d.ts.map +1 -0
  173. package/_types/core/types/index.d.ts +2 -0
  174. package/_types/core/types/index.d.ts.map +1 -1
  175. package/_types/core/utils-p/decrypt/assertPermitMatchesKeyPair.d.ts +12 -0
  176. package/_types/core/utils-p/decrypt/{assertPermitMatchesKeypair.d.ts.map → assertPermitMatchesKeyPair.d.ts.map} +1 -1
  177. package/core/_version.ts +1 -1
  178. package/core/actions/base/fetchEncryptedValues.ts +42 -0
  179. package/core/actions/base/index.ts +6 -0
  180. package/core/actions/chain/createKmsDelegatedUserDecryptEip712.ts +1 -2
  181. package/core/actions/chain/createKmsUserDecryptEip712.ts +1 -2
  182. package/core/actions/chain/index.ts +8 -8
  183. package/core/actions/chain/parseSignedDecryptionPermit.ts +6 -6
  184. package/core/actions/chain/{parseTransportKeypair.ts → parseTransportKeyPair.ts} +7 -7
  185. package/core/actions/chain/{serializeTransportKeypair.ts → serializeTransportKeyPair.ts} +10 -10
  186. package/core/actions/decrypt/canDecryptValue.ts +4 -4
  187. package/core/actions/decrypt/canDecryptValues.ts +2 -2
  188. package/core/actions/decrypt/canDecryptValuesFromPairs.ts +2 -2
  189. package/core/actions/decrypt/decryptKmsSignedcryptedShares.ts +2 -2
  190. package/core/actions/decrypt/decryptValue.ts +2 -2
  191. package/core/actions/decrypt/decryptValues.ts +2 -2
  192. package/core/actions/decrypt/decryptValuesFromPairs.ts +2 -2
  193. package/core/actions/decrypt/{generateTransportKeypair.ts → generateTransportKeyPair.ts} +7 -7
  194. package/core/actions/decrypt/index.ts +8 -4
  195. package/core/base/address.ts +2 -2
  196. package/core/base/fetch.ts +2 -2
  197. package/core/base/sign.ts +16 -8
  198. package/core/base/wasm.ts +1 -1
  199. package/core/clients/decorators/base.ts +18 -18
  200. package/core/clients/decorators/decrypt.ts +4 -4
  201. package/core/coprocessor/ZkProof-p.ts +6 -6
  202. package/core/handle/EncryptedValue.ts +0 -4
  203. package/core/handle/FheType.ts +10 -17
  204. package/core/host-contracts/canDecryptValuesFromPairs.ts +5 -5
  205. package/core/kms/SignedDecryptionPermit-p.ts +13 -13
  206. package/core/kms/{TransportKeypair-p.ts → TransportKeyPair-p.ts} +42 -42
  207. package/core/kms/decryptKmsSignedcryptedShares-p.ts +6 -6
  208. package/core/kms/decryptValuesFromPairs.ts +5 -5
  209. package/core/kms/index.ts +0 -1
  210. package/core/modules/decrypt/mock.ts +3 -3
  211. package/core/modules/decrypt/module/init-p.ts +13 -14
  212. package/core/modules/encrypt/mock.ts +4 -6
  213. package/core/modules/encrypt/module/api-p.ts +4 -6
  214. package/core/modules/encrypt/module/index.ts +2 -2
  215. package/core/modules/encrypt/module/init-p.ts +37 -21
  216. package/core/modules/encrypt/types.ts +2 -2
  217. package/core/modules/relayer/module/fetchPublicDecrypt.ts +2 -2
  218. package/core/modules/relayer/module/fetchUserDecrypt.ts +1 -2
  219. package/core/modules/relayer/module/guards/RelayerErrorBody.ts +33 -0
  220. package/core/types/index.ts +2 -0
  221. package/core/utils-p/decrypt/{assertPermitMatchesKeypair.ts → assertPermitMatchesKeyPair.ts} +9 -9
  222. package/core/utils-p/decrypt/verifyTkmsPublicKey.ts +1 -1
  223. package/package.json +3 -2
  224. package/_cjs/core/actions/chain/parseTransportKeypair.js +0 -8
  225. package/_cjs/core/actions/chain/parseTransportKeypair.js.map +0 -1
  226. package/_cjs/core/actions/chain/serializeTransportKeypair.js +0 -8
  227. package/_cjs/core/actions/chain/serializeTransportKeypair.js.map +0 -1
  228. package/_cjs/core/actions/decrypt/generateTransportKeypair.js +0 -8
  229. package/_cjs/core/actions/decrypt/generateTransportKeypair.js.map +0 -1
  230. package/_cjs/core/utils-p/decrypt/assertPermitMatchesKeypair.js +0 -14
  231. package/_esm/core/actions/chain/parseTransportKeypair.js +0 -5
  232. package/_esm/core/actions/chain/parseTransportKeypair.js.map +0 -1
  233. package/_esm/core/actions/chain/serializeTransportKeypair.js +0 -5
  234. package/_esm/core/actions/decrypt/generateTransportKeypair.js +0 -6
  235. package/_esm/core/utils-p/decrypt/assertPermitMatchesKeypair.js +0 -19
  236. package/_types/core/utils-p/decrypt/assertPermitMatchesKeypair.d.ts +0 -12
  237. package/tsconfig.json +0 -9
  238. package/vitest.config.ts +0 -17
@@ -1,6 +1,6 @@
1
1
  import type { FhevmRuntime } from '../../../types/coreFhevmRuntime.js';
2
2
  import type {
3
- BuildWithProofPackedReturnTypeParameters,
3
+ BuildWithProofPackedParameters,
4
4
  DeserializeFheEncryptionCrsParameters,
5
5
  DeserializeFheEncryptionPublicKeyParameters,
6
6
  EncryptModuleFactory,
@@ -31,7 +31,7 @@ export const encryptModule: EncryptModuleFactory = (runtime: FhevmRuntime) => {
31
31
  getTfheModuleInfo: () => getTfheModuleInfo(),
32
32
  parseTFHEProvenCompactCiphertextList: (args: ParseTFHEProvenCompactCiphertextListParameters) =>
33
33
  parseTFHEProvenCompactCiphertextList(runtime, args),
34
- buildWithProofPacked: (args: BuildWithProofPackedReturnTypeParameters) => buildWithProofPacked(runtime, args),
34
+ buildWithProofPacked: (args: BuildWithProofPackedParameters) => buildWithProofPacked(runtime, args),
35
35
  serializeFheEncryptionKey: (args: SerializeFheEncryptionKeyParameters) =>
36
36
  serializeFheEncryptionKey(runtime, args),
37
37
  serializeFheEncryptionPublicKey: (args: SerializeFheEncryptionPublicKeyParameters) =>
@@ -63,16 +63,28 @@ type ResolvedTfheModuleConfig = {
63
63
  };
64
64
 
65
65
  let resolvedTfheModuleConfig: ResolvedTfheModuleConfig | undefined = undefined;
66
+ let resolvingTfheModuleConfigPromise: Promise<ResolvedTfheModuleConfig> | undefined;
66
67
 
67
68
  /**
68
69
  * @internal
69
70
  * Returns the existing resolved config, or resolves it from the runtime config.
70
71
  */
71
72
  async function _getOrResolveTfheModuleConfig(runtime: FhevmRuntime): Promise<ResolvedTfheModuleConfig> {
72
- if (resolvedTfheModuleConfig !== undefined) return resolvedTfheModuleConfig;
73
+ if (resolvedTfheModuleConfig !== undefined) {
74
+ return resolvedTfheModuleConfig;
75
+ }
73
76
 
74
- resolvedTfheModuleConfig = await _resolveTfheModuleConfig(runtime.config);
75
- return resolvedTfheModuleConfig;
77
+ resolvingTfheModuleConfigPromise ??= _resolveTfheModuleConfig(runtime.config)
78
+ .then((cfg) => {
79
+ resolvedTfheModuleConfig = cfg;
80
+ return cfg;
81
+ })
82
+ .catch((error: unknown) => {
83
+ resolvingTfheModuleConfigPromise = undefined;
84
+ throw error;
85
+ });
86
+
87
+ return resolvingTfheModuleConfigPromise;
76
88
  }
77
89
 
78
90
  /**
@@ -81,10 +93,6 @@ async function _getOrResolveTfheModuleConfig(runtime: FhevmRuntime): Promise<Res
81
93
  * (thread count, worker URL, WASM URL). Must be called before WASM initialization.
82
94
  */
83
95
  async function _resolveTfheModuleConfig(parameters: FhevmRuntimeConfig): Promise<ResolvedTfheModuleConfig> {
84
- if (cachedTfheModulePromise !== undefined) {
85
- throw new Error('Cannot configure module after initialization has started');
86
- }
87
-
88
96
  const { locateFile, singleThread: singleThreadConfig, numberOfThreads: numberOfThreadsConfig } = parameters;
89
97
 
90
98
  let singleThread = false;
@@ -181,22 +189,30 @@ export async function initTfheModule(runtime: FhevmRuntime): Promise<void> {
181
189
 
182
190
  ownerUid = runtime.uid;
183
191
 
184
- if (cachedTfheModulePromise !== undefined) {
185
- return cachedTfheModulePromise;
192
+ // Cache the whole initialization promise before the first await. Several
193
+ // clients may call initTfheModule concurrently during startup; if the promise
194
+ // were assigned after resolving the config, each caller could enter
195
+ // _initTfheModule and try to start the global TFHE worker pool independently.
196
+ // The worker pool is process-wide and startWorkers() is intentionally
197
+ // one-shot, so every concurrent caller must await this same promise.
198
+ //
199
+ // Retry is not supported:
200
+ // -----------------------
201
+ // TFHE/WASM initialization and worker startup mutate
202
+ // lower-level module globals that cannot be reset reliably after a partial
203
+ // failure. Keep even a rejected promise cached so later callers observe the
204
+ // original initialization error instead of retrying against half-initialized
205
+ // state and producing secondary errors such as "Already started".
206
+
207
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
208
+ if (cachedTfheModulePromise === undefined) {
209
+ cachedTfheModulePromise = (async () => {
210
+ // resolve is async
211
+ const cfg = await _getOrResolveTfheModuleConfig(runtime);
212
+ await _initTfheModule(cfg);
213
+ })();
186
214
  }
187
215
 
188
- // Use existing config if already set, otherwise resolve from runtime
189
- const cfg = await _getOrResolveTfheModuleConfig(runtime);
190
-
191
- cachedTfheModulePromise = _initTfheModule(cfg);
192
-
193
- // This is purely theoretical. Retry is not yet possible since the `_initTfheModule`
194
- // does not support retry (see tfhe lib internal global variables).
195
- cachedTfheModulePromise.catch(() => {
196
- // Clear cache on failure so retry is possible
197
- cachedTfheModulePromise = undefined;
198
- });
199
-
200
216
  return cachedTfheModulePromise;
201
217
  }
202
218
 
@@ -108,7 +108,7 @@ export type ParseTFHEProvenCompactCiphertextListModuleFunction = {
108
108
  // 2. buildWithProofPacked
109
109
  ////////////////////////////////////////////////////////////////////////////////
110
110
 
111
- export type BuildWithProofPackedReturnTypeParameters = {
111
+ export type BuildWithProofPackedParameters = {
112
112
  readonly fheEncryptionKey: FheEncryptionKeyWasm;
113
113
  readonly typedValues: TypedValue[];
114
114
  readonly metaData: Uint8Array;
@@ -121,7 +121,7 @@ export type BuildWithProofPackedReturnType = {
121
121
  };
122
122
 
123
123
  export type BuildWithProofPackedModuleFunction = {
124
- buildWithProofPacked(parameters: BuildWithProofPackedReturnTypeParameters): Promise<BuildWithProofPackedReturnType>;
124
+ buildWithProofPacked(parameters: BuildWithProofPackedParameters): Promise<BuildWithProofPackedReturnType>;
125
125
  };
126
126
 
127
127
  ////////////////////////////////////////////////////////////////////////////////
@@ -1,4 +1,4 @@
1
- import type { Bytes65Hex, BytesHex } from '../../../types/primitives.js';
1
+ import type { Bytes65Hex } from '../../../types/primitives.js';
2
2
  import type { RelayerFetchPublicDecryptPayload } from '../../../types/relayer-p.js';
3
3
  import type { FetchPublicDecryptResult } from '../../../types/relayer.js';
4
4
  import type { FetchPublicDecryptParameters, FetchPublicDecryptReturnType, RelayerClientWithRuntime } from '../types.js';
@@ -33,7 +33,7 @@ export async function fetchPublicDecrypt(
33
33
  const result = (await request.run()) as FetchPublicDecryptResult;
34
34
 
35
35
  return {
36
- orderedAbiEncodedClearValues: ensure0x(result.decryptedValue) as BytesHex,
36
+ orderedAbiEncodedClearValues: ensure0x(result.decryptedValue),
37
37
  kmsPublicDecryptEIP712Signatures: result.signatures.map(ensure0x) as Bytes65Hex[],
38
38
  extraData: result.extraData,
39
39
  };
@@ -1,5 +1,4 @@
1
1
  import type { KmsSigncryptedShare } from '../../../types/kms-p.js';
2
- import type { Bytes65HexNo0x } from '../../../types/primitives.js';
3
2
  import type { FetchUserDecryptPayload } from '../../../types/relayer-p.js';
4
3
  import type { FetchUserDecryptResult } from '../../../types/relayer.js';
5
4
  import type { FetchUserDecryptParameters, FetchUserDecryptReturnType, RelayerClientWithRuntime } from '../types.js';
@@ -38,7 +37,7 @@ export async function fetchUserDecrypt(
38
37
  contractsChainId,
39
38
  contractAddresses: payload.kmsDecryptEip712Message.contractAddresses,
40
39
  userAddress: payload.kmsDecryptEip712Signer,
41
- signature: remove0x(payload.kmsDecryptEip712Signature) as Bytes65HexNo0x,
40
+ signature: remove0x(payload.kmsDecryptEip712Signature),
42
41
  extraData: payload.kmsDecryptEip712Message.extraData,
43
42
  publicKey: remove0x(payload.kmsDecryptEip712Message.publicKey),
44
43
  };
@@ -0,0 +1,33 @@
1
+ type RelayerErrorBody = {
2
+ error: {
3
+ label: string;
4
+ message: string;
5
+ details?: ReadonlyArray<{ field: string; issue: string }>;
6
+ };
7
+ };
8
+
9
+ export function isRelayerErrorBody(bodyJson: Record<string, unknown>): bodyJson is RelayerErrorBody {
10
+ const error = bodyJson.error as Record<string, unknown> | undefined;
11
+ if (!error || typeof error !== 'object' || Array.isArray(error)) {
12
+ return false;
13
+ }
14
+ if (typeof error.label !== 'string' || typeof error.message !== 'string') {
15
+ return false;
16
+ }
17
+ if (error.details !== undefined) {
18
+ if (!Array.isArray(error.details)) {
19
+ return false;
20
+ }
21
+ for (const d of error.details) {
22
+ if (
23
+ d === undefined ||
24
+ typeof d !== 'object' ||
25
+ typeof (d as { field: unknown }).field !== 'string' ||
26
+ typeof (d as { issue: unknown }).issue !== 'string'
27
+ ) {
28
+ return false;
29
+ }
30
+ }
31
+ }
32
+ return true;
33
+ }
@@ -1,3 +1,5 @@
1
1
  export type { TypedValue } from './primitives.js';
2
2
  export type { EncryptedValue, EncryptedValueLike } from './encryptedTypes.js';
3
3
  export type { KmsDecryptEip712Like } from './kms.js';
4
+ export type { FhevmEncryptClient, FhevmDecryptClient } from './fhevmClient.js';
5
+ export { asEncryptedValue, isEncryptedValue } from '../handle/EncryptedValue.js';
@@ -1,27 +1,27 @@
1
- import type { TransportKeypair } from '../../kms/TransportKeypair-p.js';
1
+ import type { TransportKeyPair } from '../../kms/TransportKeyPair-p.js';
2
2
  import type { SignedDecryptionPermit } from '../../types/signedDecryptionPermit.js';
3
- import { assertIsTransportKeypair } from '../../kms/TransportKeypair-p.js';
3
+ import { assertIsTransportKeyPair } from '../../kms/TransportKeyPair-p.js';
4
4
  import { assertIsSignedDecryptionPermit } from '../../kms/SignedDecryptionPermit-p.js';
5
5
 
6
6
  /**
7
- * Asserts that the permit's publicKey matches the keypair's publicKey.
7
+ * Asserts that the permit's publicKey matches the key pair's publicKey.
8
8
  *
9
9
  * Both values are validated via `instanceof` before comparison.
10
10
  *
11
11
  * @throws {InvalidTypeError} If either value is not the expected type.
12
12
  * @throws If the public keys do not match.
13
13
  */
14
- export function assertPermitMatchesKeypair(
14
+ export function assertPermitMatchesKeyPair(
15
15
  signedPermit: SignedDecryptionPermit,
16
- transportKeypair: TransportKeypair,
16
+ transportKeyPair: TransportKeyPair,
17
17
  ): void {
18
18
  assertIsSignedDecryptionPermit(signedPermit, {});
19
- assertIsTransportKeypair(transportKeypair, {});
19
+ assertIsTransportKeyPair(transportKeyPair, {});
20
20
 
21
- if (signedPermit.e2eTransportPublicKey.toLowerCase() !== transportKeypair.publicKey.toLowerCase()) {
21
+ if (signedPermit.e2eTransportPublicKey.toLowerCase() !== transportKeyPair.publicKey.toLowerCase()) {
22
22
  throw new Error(
23
- "The permit's publicKey does not match the E2eTransportKeypair's publicKey. " +
24
- 'Ensure the permit was signed with the same keypair.',
23
+ "The permit's publicKey does not match the E2eTransportKeyPair's publicKey. " +
24
+ 'Ensure the permit was signed with the same key pair.',
25
25
  );
26
26
  }
27
27
  }
@@ -22,6 +22,6 @@ export async function verifyTkmsPublicKey(
22
22
  });
23
23
 
24
24
  if (expectedTkmsPublicKeyBytesHex !== tkmsPublicKeyBytesHex) {
25
- throw new Error('invalid E2eTransportKeypair');
25
+ throw new Error('invalid E2eTransportKeyPair');
26
26
  }
27
27
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@fhevm/sdk",
3
3
  "description": "TypeScript Interface for FHEVM",
4
- "version": "1.0.0-alpha.4",
4
+ "version": "1.0.0-alpha.5",
5
5
  "type": "module",
6
6
  "main": "./_cjs/index.js",
7
7
  "module": "./_esm/index.js",
@@ -13,7 +13,8 @@
13
13
  "!**/*.test.ts",
14
14
  "!**/*.template",
15
15
  "!**/*.tsbuildinfo",
16
- "!tsconfig.build.json"
16
+ "!vitest.config.ts",
17
+ "!tsconfig.json"
17
18
  ],
18
19
  "exports": {
19
20
  ".": {
@@ -1,8 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseTransportKeypair = parseTransportKeypair;
4
- const TransportKeypair_p_js_1 = require("../../kms/TransportKeypair-p.js");
5
- async function parseTransportKeypair(fhevm, parameters) {
6
- return (0, TransportKeypair_p_js_1.toTransportKeypair)(fhevm, parameters);
7
- }
8
- //# sourceMappingURL=parseTransportKeypair.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseTransportKeypair.js","sourceRoot":"","sources":["../../../../core/actions/chain/parseTransportKeypair.ts"],"names":[],"mappings":";;AAcA,sDAKC;AAhBD,2EAA4F;AAWrF,KAAK,UAAU,qBAAqB,CACzC,KAA4D,EAC5D,UAA2C;IAE3C,OAAO,IAAA,0CAAkB,EAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AAC/C,CAAC"}
@@ -1,8 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.serializeTransportKeypair = serializeTransportKeypair;
4
- const TransportKeypair_p_js_1 = require("../../kms/TransportKeypair-p.js");
5
- function serializeTransportKeypair(_fhevm, parameters) {
6
- return (0, TransportKeypair_p_js_1.serializeTransportKeypair)(parameters.transportKeypair);
7
- }
8
- //# sourceMappingURL=serializeTransportKeypair.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serializeTransportKeypair.js","sourceRoot":"","sources":["../../../../core/actions/chain/serializeTransportKeypair.ts"],"names":[],"mappings":";;AAoBA,8DAKC;AArBD,2EAGyC;AAazC,SAAgB,yBAAyB,CACvC,MAA6D,EAC7D,UAA+C;IAE/C,OAAO,IAAA,iDAA0B,EAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;AACjE,CAAC"}
@@ -1,8 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateTransportKeypair = generateTransportKeypair;
4
- const TransportKeypair_p_js_1 = require("../../kms/TransportKeypair-p.js");
5
- async function generateTransportKeypair(fhevm) {
6
- return await (0, TransportKeypair_p_js_1.generateTransportKeypair)(fhevm);
7
- }
8
- //# sourceMappingURL=generateTransportKeypair.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generateTransportKeypair.js","sourceRoot":"","sources":["../../../../core/actions/decrypt/generateTransportKeypair.ts"],"names":[],"mappings":";;AAYA,4DAIC;AAbD,2EAGyC;AAMlC,KAAK,UAAU,wBAAwB,CAC5C,KAAuE;IAEvE,OAAO,MAAM,IAAA,gDAAyB,EAAC,KAAK,CAAC,CAAC;AAChD,CAAC"}
@@ -1,14 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.assertPermitMatchesKeypair = assertPermitMatchesKeypair;
4
- const TransportKeypair_p_js_1 = require("../../kms/TransportKeypair-p.js");
5
- const SignedDecryptionPermit_p_js_1 = require("../../kms/SignedDecryptionPermit-p.js");
6
- function assertPermitMatchesKeypair(signedPermit, transportKeypair) {
7
- (0, SignedDecryptionPermit_p_js_1.assertIsSignedDecryptionPermit)(signedPermit, {});
8
- (0, TransportKeypair_p_js_1.assertIsTransportKeypair)(transportKeypair, {});
9
- if (signedPermit.e2eTransportPublicKey.toLowerCase() !== transportKeypair.publicKey.toLowerCase()) {
10
- throw new Error("The permit's publicKey does not match the E2eTransportKeypair's publicKey. " +
11
- 'Ensure the permit was signed with the same keypair.');
12
- }
13
- }
14
- //# sourceMappingURL=assertPermitMatchesKeypair.js.map
@@ -1,5 +0,0 @@
1
- import { toTransportKeypair } from '../../kms/TransportKeypair-p.js';
2
- export async function parseTransportKeypair(fhevm, parameters) {
3
- return toTransportKeypair(fhevm, parameters);
4
- }
5
- //# sourceMappingURL=parseTransportKeypair.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseTransportKeypair.js","sourceRoot":"","sources":["../../../../core/actions/chain/parseTransportKeypair.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAyB,MAAM,iCAAiC,CAAC;AAW5F,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,KAA4D,EAC5D,UAA2C;IAE3C,OAAO,kBAAkB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AAC/C,CAAC"}
@@ -1,5 +0,0 @@
1
- import { serializeTransportKeypair as serializeTransportKeypair_, } from '../../kms/TransportKeypair-p.js';
2
- export function serializeTransportKeypair(_fhevm, parameters) {
3
- return serializeTransportKeypair_(parameters.transportKeypair);
4
- }
5
- //# sourceMappingURL=serializeTransportKeypair.js.map
@@ -1,6 +0,0 @@
1
- import { generateTransportKeypair as generateTransportKeypair_, } from '../../kms/TransportKeypair-p.js';
2
- export async function generateTransportKeypair(fhevm) {
3
- return await generateTransportKeypair_(fhevm);
4
- }
5
- ////////////////////////////////////////////////////////////////////////////////
6
- //# sourceMappingURL=generateTransportKeypair.js.map
@@ -1,19 +0,0 @@
1
- import { assertIsTransportKeypair } from '../../kms/TransportKeypair-p.js';
2
- import { assertIsSignedDecryptionPermit } from '../../kms/SignedDecryptionPermit-p.js';
3
- /**
4
- * Asserts that the permit's publicKey matches the keypair's publicKey.
5
- *
6
- * Both values are validated via `instanceof` before comparison.
7
- *
8
- * @throws {InvalidTypeError} If either value is not the expected type.
9
- * @throws If the public keys do not match.
10
- */
11
- export function assertPermitMatchesKeypair(signedPermit, transportKeypair) {
12
- assertIsSignedDecryptionPermit(signedPermit, {});
13
- assertIsTransportKeypair(transportKeypair, {});
14
- if (signedPermit.e2eTransportPublicKey.toLowerCase() !== transportKeypair.publicKey.toLowerCase()) {
15
- throw new Error("The permit's publicKey does not match the E2eTransportKeypair's publicKey. " +
16
- 'Ensure the permit was signed with the same keypair.');
17
- }
18
- }
19
- //# sourceMappingURL=assertPermitMatchesKeypair.js.map
@@ -1,12 +0,0 @@
1
- import type { TransportKeypair } from '../../kms/TransportKeypair-p.js';
2
- import type { SignedDecryptionPermit } from '../../types/signedDecryptionPermit.js';
3
- /**
4
- * Asserts that the permit's publicKey matches the keypair's publicKey.
5
- *
6
- * Both values are validated via `instanceof` before comparison.
7
- *
8
- * @throws {InvalidTypeError} If either value is not the expected type.
9
- * @throws If the public keys do not match.
10
- */
11
- export declare function assertPermitMatchesKeypair(signedPermit: SignedDecryptionPermit, transportKeypair: TransportKeypair): void;
12
- //# sourceMappingURL=assertPermitMatchesKeypair.d.ts.map
package/tsconfig.json DELETED
@@ -1,9 +0,0 @@
1
- {
2
- "extends": "../tsconfig.base.json",
3
- "include": ["./**/*.ts"],
4
- "exclude": ["./**/*.test.ts", "./**/*.test-d.ts", "./**/*.bench.ts", "./**/*.bench-d.ts", "./vitest.config.ts"],
5
- "compilerOptions": {
6
- "composite": true,
7
- "noEmit": true
8
- }
9
- }
package/vitest.config.ts DELETED
@@ -1,17 +0,0 @@
1
- import { defineConfig } from 'vitest/config';
2
-
3
- export default defineConfig({
4
- test: {
5
- include: ['src/**/*.test.ts'],
6
- exclude: ['src/index.hello.test.ts'],
7
- reporters: ['verbose'],
8
- passWithNoTests: false,
9
- typecheck: { enabled: true },
10
- coverage: {
11
- provider: 'v8',
12
- reporter: ['text'],
13
- //include: ['src/**/*.ts'],
14
- //exclude: ['src/**/*.test.ts', 'src/**/*.test-d.ts', 'src/vitest.config.ts'],
15
- },
16
- },
17
- });