@inco/js 0.9.0-devnet-test-4 → 0.10.0-devnet-1

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 (226) hide show
  1. package/README.md +503 -47
  2. package/dist/cjs/advancedacl/session-key.d.ts +5 -5
  3. package/dist/cjs/advancedacl/session-key.js +33 -9
  4. package/dist/cjs/attestedcompute/attested-compute.d.ts +1 -2
  5. package/dist/cjs/attestedcompute/attested-compute.js +15 -7
  6. package/dist/cjs/attesteddecrypt/attested-decrypt.d.ts +5 -43
  7. package/dist/cjs/attesteddecrypt/attested-decrypt.js +33 -96
  8. package/dist/cjs/attestedreveal/attested-reveal.d.ts +21 -0
  9. package/dist/cjs/attestedreveal/attested-reveal.js +31 -0
  10. package/dist/cjs/attestedreveal/index.d.ts +2 -0
  11. package/dist/cjs/attestedreveal/index.js +21 -0
  12. package/dist/cjs/attestedreveal/types.d.ts +4 -0
  13. package/dist/cjs/attestedreveal/types.js +13 -0
  14. package/dist/cjs/binary.d.ts +82 -0
  15. package/dist/cjs/binary.js +87 -5
  16. package/dist/cjs/chain.d.ts +29 -4
  17. package/dist/cjs/chain.js +34 -6
  18. package/dist/cjs/eip712/eip712.d.ts +18 -0
  19. package/dist/cjs/eip712/eip712.js +51 -0
  20. package/dist/cjs/eip712/index.d.ts +1 -0
  21. package/dist/cjs/eip712/index.js +8 -0
  22. package/dist/cjs/elistattesteddecrypt/elist-attested-decrypt.d.ts +49 -0
  23. package/dist/cjs/elistattesteddecrypt/elist-attested-decrypt.js +94 -0
  24. package/dist/cjs/elistattesteddecrypt/index.d.ts +2 -0
  25. package/dist/cjs/elistattesteddecrypt/index.js +22 -0
  26. package/dist/cjs/elistattesteddecrypt/types.d.ts +31 -0
  27. package/dist/cjs/elistattesteddecrypt/types.js +16 -0
  28. package/dist/cjs/encryption/encryption.d.ts +115 -0
  29. package/dist/cjs/encryption/encryption.js +98 -7
  30. package/dist/cjs/encryption/index.d.ts +1 -1
  31. package/dist/cjs/encryption/index.js +17 -16
  32. package/dist/cjs/generated/abis/lightning.d.ts +1119 -107
  33. package/dist/cjs/generated/abis/lightning.js +762 -52
  34. package/dist/cjs/generated/abis/test-elist.d.ts +20 -2
  35. package/dist/cjs/generated/abis/test-elist.js +16 -3
  36. package/dist/cjs/generated/abis/verifier.d.ts +118 -15
  37. package/dist/cjs/generated/abis/verifier.js +71 -19
  38. package/dist/cjs/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +23 -37
  39. package/dist/cjs/generated/es/inco/covalidator/compute/v1/server_pb.js +36 -41
  40. package/dist/cjs/generated/es/inco/covalidator/compute/v1/types_pb.js +1 -1
  41. package/dist/cjs/generated/es/inco/helioswrapper/v1/helioswrapper_pb.js +1 -1
  42. package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +16 -0
  43. package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.js +3 -3
  44. package/dist/cjs/generated/es/inco/kms/lite/v1/types_pb.js +1 -1
  45. package/dist/cjs/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.d.ts +7 -0
  46. package/dist/cjs/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.js +3 -3
  47. package/dist/cjs/generated/lightning.d.ts +150 -0
  48. package/dist/cjs/generated/lightning.js +157 -1
  49. package/dist/cjs/generated/local-node.d.ts +9 -9
  50. package/dist/cjs/generated/local-node.js +37 -10
  51. package/dist/cjs/handle.d.ts +72 -0
  52. package/dist/cjs/handle.js +113 -9
  53. package/dist/cjs/index.d.ts +1 -1
  54. package/dist/cjs/index.js +11 -2
  55. package/dist/cjs/kms/client.d.ts +1 -1
  56. package/dist/cjs/kms/client.js +4 -3
  57. package/dist/cjs/kms/quorumClient.d.ts +18 -12
  58. package/dist/cjs/kms/quorumClient.js +212 -231
  59. package/dist/cjs/kms/quorumConsistency.d.ts +82 -0
  60. package/dist/cjs/kms/quorumConsistency.js +269 -0
  61. package/dist/cjs/kms/signatureVerification.d.ts +35 -0
  62. package/dist/cjs/kms/signatureVerification.js +88 -0
  63. package/dist/cjs/kms/thresholdPromises.d.ts +4 -3
  64. package/dist/cjs/kms/thresholdPromises.js +25 -15
  65. package/dist/cjs/lite/attested-compute.d.ts +2 -2
  66. package/dist/cjs/lite/attested-compute.js +2 -3
  67. package/dist/cjs/lite/attested-decrypt.d.ts +2 -2
  68. package/dist/cjs/lite/attested-decrypt.js +2 -3
  69. package/dist/cjs/lite/hadu.d.ts +1 -1
  70. package/dist/cjs/lite/hadu.js +3 -3
  71. package/dist/cjs/lite/index.d.ts +6 -2
  72. package/dist/cjs/lite/index.js +8 -14
  73. package/dist/cjs/lite/lightning.d.ts +96 -47
  74. package/dist/cjs/lite/lightning.js +221 -267
  75. package/dist/cjs/lite/types.d.ts +47 -0
  76. package/dist/cjs/lite/types.js +3 -0
  77. package/dist/cjs/lite/xwing.d.ts +33 -2
  78. package/dist/cjs/lite/xwing.js +62 -7
  79. package/dist/cjs/local/local-node.d.ts +18 -0
  80. package/dist/cjs/local/local-node.js +18 -3
  81. package/dist/cjs/reencryption/eip712.d.ts +27 -0
  82. package/dist/cjs/reencryption/eip712.js +20 -7
  83. package/dist/cjs/reencryption/types.d.ts +24 -0
  84. package/dist/cjs/retry.d.ts +14 -0
  85. package/dist/cjs/retry.js +58 -2
  86. package/dist/cjs/test/mocks.d.ts +6 -1
  87. package/dist/cjs/test/mocks.js +31 -6
  88. package/dist/cjs/viem.d.ts +361 -1
  89. package/dist/cjs/viem.js +14 -1
  90. package/dist/esm/advancedacl/session-key.d.ts +5 -5
  91. package/dist/esm/advancedacl/session-key.js +33 -9
  92. package/dist/esm/attestedcompute/attested-compute.d.ts +1 -2
  93. package/dist/esm/attestedcompute/attested-compute.js +13 -5
  94. package/dist/esm/attesteddecrypt/attested-decrypt.d.ts +5 -43
  95. package/dist/esm/attesteddecrypt/attested-decrypt.js +34 -96
  96. package/dist/esm/attestedreveal/attested-reveal.d.ts +21 -0
  97. package/dist/esm/attestedreveal/attested-reveal.js +28 -0
  98. package/dist/esm/attestedreveal/index.d.ts +2 -0
  99. package/dist/esm/attestedreveal/index.js +3 -0
  100. package/dist/esm/attestedreveal/types.d.ts +4 -0
  101. package/dist/esm/attestedreveal/types.js +9 -0
  102. package/dist/esm/binary.d.ts +82 -0
  103. package/dist/esm/binary.js +87 -5
  104. package/dist/esm/chain.d.ts +29 -4
  105. package/dist/esm/chain.js +33 -5
  106. package/dist/esm/eip712/eip712.d.ts +18 -0
  107. package/dist/esm/eip712/eip712.js +46 -0
  108. package/dist/esm/eip712/index.d.ts +1 -0
  109. package/dist/esm/eip712/index.js +2 -0
  110. package/dist/esm/elistattesteddecrypt/elist-attested-decrypt.d.ts +49 -0
  111. package/dist/esm/elistattesteddecrypt/elist-attested-decrypt.js +89 -0
  112. package/dist/esm/elistattesteddecrypt/index.d.ts +2 -0
  113. package/dist/esm/elistattesteddecrypt/index.js +3 -0
  114. package/dist/esm/elistattesteddecrypt/types.d.ts +31 -0
  115. package/dist/esm/elistattesteddecrypt/types.js +12 -0
  116. package/dist/esm/encryption/encryption.d.ts +115 -0
  117. package/dist/esm/encryption/encryption.js +98 -7
  118. package/dist/esm/encryption/index.d.ts +1 -1
  119. package/dist/esm/encryption/index.js +2 -2
  120. package/dist/esm/generated/abis/lightning.d.ts +1119 -107
  121. package/dist/esm/generated/abis/lightning.js +761 -51
  122. package/dist/esm/generated/abis/test-elist.d.ts +20 -2
  123. package/dist/esm/generated/abis/test-elist.js +16 -3
  124. package/dist/esm/generated/abis/verifier.d.ts +118 -15
  125. package/dist/esm/generated/abis/verifier.js +71 -19
  126. package/dist/esm/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +23 -37
  127. package/dist/esm/generated/es/inco/covalidator/compute/v1/server_pb.js +35 -40
  128. package/dist/esm/generated/es/inco/covalidator/compute/v1/types_pb.js +1 -1
  129. package/dist/esm/generated/es/inco/helioswrapper/v1/helioswrapper_pb.js +1 -1
  130. package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +16 -0
  131. package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.js +3 -3
  132. package/dist/esm/generated/es/inco/kms/lite/v1/types_pb.js +1 -1
  133. package/dist/esm/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.d.ts +7 -0
  134. package/dist/esm/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.js +3 -3
  135. package/dist/esm/generated/lightning.d.ts +150 -0
  136. package/dist/esm/generated/lightning.js +157 -1
  137. package/dist/esm/generated/local-node.d.ts +9 -9
  138. package/dist/esm/generated/local-node.js +37 -10
  139. package/dist/esm/handle.d.ts +72 -0
  140. package/dist/esm/handle.js +110 -8
  141. package/dist/esm/index.d.ts +1 -1
  142. package/dist/esm/index.js +2 -2
  143. package/dist/esm/kms/client.d.ts +1 -1
  144. package/dist/esm/kms/client.js +3 -2
  145. package/dist/esm/kms/quorumClient.d.ts +18 -12
  146. package/dist/esm/kms/quorumClient.js +213 -232
  147. package/dist/esm/kms/quorumConsistency.d.ts +82 -0
  148. package/dist/esm/kms/quorumConsistency.js +260 -0
  149. package/dist/esm/kms/signatureVerification.d.ts +35 -0
  150. package/dist/esm/kms/signatureVerification.js +84 -0
  151. package/dist/esm/kms/thresholdPromises.d.ts +4 -3
  152. package/dist/esm/kms/thresholdPromises.js +25 -15
  153. package/dist/esm/lite/attested-compute.d.ts +2 -2
  154. package/dist/esm/lite/attested-compute.js +3 -3
  155. package/dist/esm/lite/attested-decrypt.d.ts +2 -2
  156. package/dist/esm/lite/attested-decrypt.js +3 -3
  157. package/dist/esm/lite/hadu.d.ts +1 -1
  158. package/dist/esm/lite/hadu.js +2 -2
  159. package/dist/esm/lite/index.d.ts +6 -2
  160. package/dist/esm/lite/index.js +5 -3
  161. package/dist/esm/lite/lightning.d.ts +96 -47
  162. package/dist/esm/lite/lightning.js +217 -263
  163. package/dist/esm/lite/types.d.ts +47 -0
  164. package/dist/esm/lite/types.js +2 -0
  165. package/dist/esm/lite/xwing.d.ts +33 -2
  166. package/dist/esm/lite/xwing.js +59 -7
  167. package/dist/esm/local/local-node.d.ts +18 -0
  168. package/dist/esm/local/local-node.js +18 -3
  169. package/dist/esm/reencryption/eip712.d.ts +27 -0
  170. package/dist/esm/reencryption/eip712.js +20 -7
  171. package/dist/esm/reencryption/types.d.ts +24 -0
  172. package/dist/esm/retry.d.ts +14 -0
  173. package/dist/esm/retry.js +56 -2
  174. package/dist/esm/test/mocks.d.ts +6 -1
  175. package/dist/esm/test/mocks.js +31 -8
  176. package/dist/esm/viem.d.ts +361 -1
  177. package/dist/esm/viem.js +15 -2
  178. package/dist/types/advancedacl/session-key.d.ts +5 -5
  179. package/dist/types/attestedcompute/attested-compute.d.ts +1 -2
  180. package/dist/types/attesteddecrypt/attested-decrypt.d.ts +5 -43
  181. package/dist/types/attestedreveal/attested-reveal.d.ts +21 -0
  182. package/dist/types/attestedreveal/index.d.ts +2 -0
  183. package/dist/types/attestedreveal/types.d.ts +4 -0
  184. package/dist/types/binary.d.ts +82 -0
  185. package/dist/types/chain.d.ts +29 -4
  186. package/dist/types/eip712/eip712.d.ts +18 -0
  187. package/dist/types/eip712/index.d.ts +1 -0
  188. package/dist/types/elistattesteddecrypt/elist-attested-decrypt.d.ts +49 -0
  189. package/dist/types/elistattesteddecrypt/index.d.ts +2 -0
  190. package/dist/types/elistattesteddecrypt/types.d.ts +31 -0
  191. package/dist/types/encryption/encryption.d.ts +115 -0
  192. package/dist/types/encryption/index.d.ts +1 -1
  193. package/dist/types/generated/abis/lightning.d.ts +1119 -107
  194. package/dist/types/generated/abis/test-elist.d.ts +20 -2
  195. package/dist/types/generated/abis/verifier.d.ts +118 -15
  196. package/dist/types/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +23 -37
  197. package/dist/types/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +16 -0
  198. package/dist/types/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.d.ts +7 -0
  199. package/dist/types/generated/lightning.d.ts +150 -0
  200. package/dist/types/generated/local-node.d.ts +9 -9
  201. package/dist/types/handle.d.ts +72 -0
  202. package/dist/types/index.d.ts +1 -1
  203. package/dist/types/kms/client.d.ts +1 -1
  204. package/dist/types/kms/quorumClient.d.ts +18 -12
  205. package/dist/types/kms/quorumConsistency.d.ts +82 -0
  206. package/dist/types/kms/signatureVerification.d.ts +35 -0
  207. package/dist/types/kms/thresholdPromises.d.ts +4 -3
  208. package/dist/types/lite/attested-compute.d.ts +2 -2
  209. package/dist/types/lite/attested-decrypt.d.ts +2 -2
  210. package/dist/types/lite/hadu.d.ts +1 -1
  211. package/dist/types/lite/index.d.ts +6 -2
  212. package/dist/types/lite/lightning.d.ts +96 -47
  213. package/dist/types/lite/types.d.ts +47 -0
  214. package/dist/types/lite/xwing.d.ts +33 -2
  215. package/dist/types/local/local-node.d.ts +18 -0
  216. package/dist/types/reencryption/eip712.d.ts +27 -0
  217. package/dist/types/reencryption/types.d.ts +24 -0
  218. package/dist/types/retry.d.ts +14 -0
  219. package/dist/types/test/mocks.d.ts +6 -1
  220. package/dist/types/viem.d.ts +361 -1
  221. package/package.json +19 -21
  222. package/dist/cjs/generated/abis/lightning-preview.d.ts +0 -1385
  223. package/dist/cjs/generated/abis/lightning-preview.js +0 -857
  224. package/dist/esm/generated/abis/lightning-preview.d.ts +0 -1385
  225. package/dist/esm/generated/abis/lightning-preview.js +0 -854
  226. package/dist/types/generated/abis/lightning-preview.d.ts +0 -1385
@@ -0,0 +1,47 @@
1
+ import type { HexString } from '../binary.js';
2
+ import type { BackoffConfig } from '../retry.js';
3
+ import type { XwingKeypair } from './xwing.js';
4
+ /**
5
+ * Options for attested methods when no reencrypt keys are provided.
6
+ * The KMS generates an ephemeral keypair and returns plaintext.
7
+ */
8
+ export type AttestedOptsEphemeral = {
9
+ reencryptPubKey?: never;
10
+ reencryptKeypair?: never;
11
+ backoffConfig?: Partial<BackoffConfig>;
12
+ };
13
+ /**
14
+ * Options for attested methods when only a reencrypt public key is provided.
15
+ * The KMS encrypts the result under the provided key; caller receives ciphertext.
16
+ */
17
+ export type AttestedOptsEncrypted = {
18
+ reencryptPubKey: Uint8Array;
19
+ reencryptKeypair?: never;
20
+ backoffConfig?: Partial<BackoffConfig>;
21
+ };
22
+ /**
23
+ * Options for attested methods when both a reencrypt key and keypair are provided.
24
+ * The KMS reencrypts under the public key; the SDK decrypts locally using the keypair.
25
+ */
26
+ export type AttestedOptsDecrypted = {
27
+ reencryptPubKey: Uint8Array;
28
+ reencryptKeypair: XwingKeypair;
29
+ backoffConfig?: Partial<BackoffConfig>;
30
+ };
31
+ /** Union of all valid opts for attestedDecrypt / attestedCompute. */
32
+ export type AttestedOpts = AttestedOptsEphemeral | AttestedOptsEncrypted | AttestedOptsDecrypted;
33
+ /** Extends the base opts with voucher-specific fields for WithVoucher methods. */
34
+ export type AttestedWithVoucherOptsEphemeral = AttestedOptsEphemeral & {
35
+ requesterArgData?: HexString;
36
+ };
37
+ export type AttestedWithVoucherOptsEncrypted = AttestedOptsEncrypted & {
38
+ requesterArgData?: HexString;
39
+ };
40
+ export type AttestedWithVoucherOptsDecrypted = AttestedOptsDecrypted & {
41
+ requesterArgData?: HexString;
42
+ };
43
+ export type AttestedWithVoucherOpts = AttestedWithVoucherOptsEphemeral | AttestedWithVoucherOptsEncrypted | AttestedWithVoucherOptsDecrypted;
44
+ /** Options for attestedReveal. */
45
+ export type AttestedRevealOpts = {
46
+ backoffConfig?: Partial<BackoffConfig>;
47
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGl0ZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
@@ -5,8 +5,33 @@ import { PubKeyEncodable } from '../reencryption/index.js';
5
5
  * Combining ML-KEM-768 (1184 bytes) and X25519 (32 bytes).
6
6
  */
7
7
  export declare const XWING_PUBLIC_KEY_SIZE: number;
8
+ /**
9
+ * WARNING: TEST KEY - DO NOT USE IN PRODUCTION
10
+ * This is a well-known test seed (all zeros) that provides NO security.
11
+ * Anyone can derive the private key from this seed and decrypt all data.
12
+ * Only use for local development and testing.
13
+ */
8
14
  export declare const TEST_NETWORK_SEED_KEY = "0x0000000000000000000000000000000000000000000000000000000000000000";
15
+ /**
16
+ * WARNING: TEST KEY - DO NOT USE IN PRODUCTION
17
+ * This is the public key derived from TEST_NETWORK_SEED_KEY (all zeros).
18
+ * Data encrypted with this key can be decrypted by anyone who knows the seed.
19
+ * Only use for local development and testing.
20
+ *
21
+ * Generated from Go with seed of all zeros using HPKE layer: hpke.KEM_XWING.Scheme().DeriveKeyPair(seed)
22
+ * This matches the key used in covalidator's GetXwingPrivateKeyForTesting() via DeriveXwingPrivateKey
23
+ */
9
24
  export declare const TEST_NETWORK_XWING_PUBKEY = "0xca882388911c7c762aafc20debd63e845b3bed28c9d5262cdea7771fb31bd660a1ae7b395a9a7df3d12c7b118e8eda5057572c1ba05cd9b635edf33dabca4cac7291e0848f19c20e5beb850c3818f3543d49b3a5c729cb86a28fda539775d04feda112fe0c81d138aaf623aea7d507a4e826e890105db6065a44aba76a10d771c00d1b33f4ac51869806aae18eada68f19047024542d64a7aa1c91a5e1aa49d93613b5224b415bcc7aa166e4b55033438d20c641f9664fdb1689b53208181463e3d1325d46b30f07c5945b7e3fa1418bf833d975258461b294664eaf60795964924a280729c10a37fc6e967440bdd55d4ca53596286383481291152365303d44517cef369c00933b0b30368a230353e729c031075e8388673678a56b3ba84a165b28096ee9bd684483e1844258b451c365c41fa534152a3b64120041450128e960c7d6437d717ee266bdde7aaeec225ed93b958d188e97407349f1382976ca47d761ecc59a6f394487eb015c083abb490584677240eb47f838c838568a496119378b8bb81484610a50792b5d9c9939db188e7d0249d3cb918c436f111a2898849b286b0743a22c57464c709c5eaceac1ba493adca3328c0b14b5e38d3aea74e328b622b17e7181c35ad11c2103bdb7f2b209d93dcbc4ab61a06bc37139e6d2b7a06c5b7e9267bef3a8918a706f793271a5acc2574532da79e5a10cf074b998147a3c43586a411a513bba0d11cc19a36c83b19277f28022c88b120abfdba7076a8263e05336e3245aef7033eb3c762b5bbfa5791ac960398b649d5cbb652ddc6b2398143a0861ab3b410b696328879c099098adf819fbf7ac170030e86675e7f45c22ac9e1cf52c3102487bb0b91ab592afdc69c6e3a9b71876b86260b6c736b8291098f1130d3b763525cbad540ce2d042eacb6ed43b7bcba898f712c412f26066e09945f44ec7026c8ef959831abc10719d2017a12a41728b41c02371a5f5756ebc79406be708ea41bbd21563c874a0b791a3b4e4224a609967004f065c5ab4f3b4c61cb35df70573269da53179c3701fc5205f61974426f9b794c1b5826494b70842b6920c17752029369264dc8590b898b85c9d89a258e1f46c1b0490efd17c485cb51687cea272041e90b8e629521d3c5e3fa7518161bad7a159295b63cc6c0077897b53d47db8bc0ecb820f550705b65715a1a1094d04854f56acd26aa0baa10cb8447fad6211f53105796a42882328e6852e8de821c283b51eaab9bc95c4dc53615626049d63b1f9a457193805276b1905b0ab39353b5cf91fdd6023d4d816aef9cce4a3cfb3d12190172df221ae61d427563a098cc60e3dc9997ef54959180be5dc64a911157db6be3a01be2ee343caab33b8729abf0c50c674758c511291941fceac646232920907c2e88b9ec10211161729c797643a553a6ae5c4b7483c04e3263bd291e311c609071348b7c3310aa97d6b8318e0a4afe8399fa22f951049a9bb8860f7c69a333d3cc1aaf0129ab560713bf29eb3a01f9a276c78e54e3a3648b2447c80242b271b11406866389426d8b59796540d6b5702092ab21ee217c075cfc0c17ef826ce9ea29b9e61617457a5b1aaa23a58615dc53c59183beb36ea19498c21820b70ab47adeb678f1c52bf8768b3597b608ea1a8a15cd62e8a29bec4a1ac248ef9f02de0144bca06025f95a42bd6c8eaaaaaa2366328561d";
25
+ /**
26
+ * Check if a byte array matches the test seed key.
27
+ * Logs a warning if it does.
28
+ */
29
+ export declare function warnIfTestSeed(seed: Uint8Array): boolean;
30
+ /**
31
+ * Check if a byte array matches the test public key.
32
+ * Logs a warning if it does.
33
+ */
34
+ export declare function warnIfTestPubKey(pubKeyBytes: Uint8Array): boolean;
10
35
  /**
11
36
  * X-Wing keypair interface.
12
37
  * X-Wing is a post-quantum hybrid KEM combining ML-KEM-768 and X25519.
@@ -72,7 +97,7 @@ export type XwingDecryptorArgs = {
72
97
  /**
73
98
  * Encrypt using X-Wing HPKE (RFC 9180) with ChaCha20-Poly1305 AEAD.
74
99
  *
75
- * Output format: encappedKey (1184 bytes) || ciphertext (variable length)
100
+ * Output format: encappedKey (1120 bytes) || ciphertext (variable length)
76
101
  *
77
102
  * @param pubKeyA - Recipient's public key
78
103
  * @param msg - Message to encrypt
@@ -84,7 +109,7 @@ export declare function encrypt(pubKeyA: CryptoKey, msg: Uint8Array, aad?: Uint8
84
109
  /**
85
110
  * Decrypt using X-Wing HPKE (RFC 9180) with ChaCha20-Poly1305 AEAD.
86
111
  *
87
- * Input format: encappedKey (1184 bytes) || ciphertext (variable length)
112
+ * Input format: encappedKey (1120 bytes) || ciphertext (variable length)
88
113
  *
89
114
  * @param privKeyA - Recipient's private key
90
115
  * @param encryptedData - Encrypted data (encappedKey || ciphertext)
@@ -121,3 +146,9 @@ export declare function getXwingEncryptor({ pubKeyA, }: XwingEncryptorArgs): Enc
121
146
  * @returns Decryptor function
122
147
  */
123
148
  export declare function getXwingDecryptor({ privKeyA, }: XwingDecryptorArgs): Decryptor<XwingScheme>;
149
+ /**
150
+ * Returns true if the raw public key bytes match the public key encoded by the keypair.
151
+ * Used to catch caller mistakes before sending the keypair to the covalidator, where a
152
+ * mismatch would produce a cryptic signature error instead of a clear failure.
153
+ */
154
+ export declare function reencryptPublicKeysMatch(reencryptPubKey: Uint8Array, reencryptKeypair: XwingKeypair): boolean;
@@ -13,12 +13,49 @@ const xwingKem = new XWing();
13
13
  * Combining ML-KEM-768 (1184 bytes) and X25519 (32 bytes).
14
14
  */
15
15
  export const XWING_PUBLIC_KEY_SIZE = xwingKem.publicKeySize;
16
- // Test network private key for testing
16
+ /**
17
+ * WARNING: TEST KEY - DO NOT USE IN PRODUCTION
18
+ * This is a well-known test seed (all zeros) that provides NO security.
19
+ * Anyone can derive the private key from this seed and decrypt all data.
20
+ * Only use for local development and testing.
21
+ */
17
22
  export const TEST_NETWORK_SEED_KEY = '0x0000000000000000000000000000000000000000000000000000000000000000';
18
- // Test network X-Wing public key (1216 bytes)
19
- // Generated from Go with seed of all zeros using HPKE layer: hpke.KEM_XWING.Scheme().DeriveKeyPair(seed)
20
- // This matches the key used in covalidator's GetXwingPrivateKeyForTesting() via DeriveXwingPrivateKey
23
+ const TEST_NETWORK_SEED_BYTES = bytesFromHexString(TEST_NETWORK_SEED_KEY);
24
+ /**
25
+ * WARNING: TEST KEY - DO NOT USE IN PRODUCTION
26
+ * This is the public key derived from TEST_NETWORK_SEED_KEY (all zeros).
27
+ * Data encrypted with this key can be decrypted by anyone who knows the seed.
28
+ * Only use for local development and testing.
29
+ *
30
+ * Generated from Go with seed of all zeros using HPKE layer: hpke.KEM_XWING.Scheme().DeriveKeyPair(seed)
31
+ * This matches the key used in covalidator's GetXwingPrivateKeyForTesting() via DeriveXwingPrivateKey
32
+ */
21
33
  export const TEST_NETWORK_XWING_PUBKEY = '0xca882388911c7c762aafc20debd63e845b3bed28c9d5262cdea7771fb31bd660a1ae7b395a9a7df3d12c7b118e8eda5057572c1ba05cd9b635edf33dabca4cac7291e0848f19c20e5beb850c3818f3543d49b3a5c729cb86a28fda539775d04feda112fe0c81d138aaf623aea7d507a4e826e890105db6065a44aba76a10d771c00d1b33f4ac51869806aae18eada68f19047024542d64a7aa1c91a5e1aa49d93613b5224b415bcc7aa166e4b55033438d20c641f9664fdb1689b53208181463e3d1325d46b30f07c5945b7e3fa1418bf833d975258461b294664eaf60795964924a280729c10a37fc6e967440bdd55d4ca53596286383481291152365303d44517cef369c00933b0b30368a230353e729c031075e8388673678a56b3ba84a165b28096ee9bd684483e1844258b451c365c41fa534152a3b64120041450128e960c7d6437d717ee266bdde7aaeec225ed93b958d188e97407349f1382976ca47d761ecc59a6f394487eb015c083abb490584677240eb47f838c838568a496119378b8bb81484610a50792b5d9c9939db188e7d0249d3cb918c436f111a2898849b286b0743a22c57464c709c5eaceac1ba493adca3328c0b14b5e38d3aea74e328b622b17e7181c35ad11c2103bdb7f2b209d93dcbc4ab61a06bc37139e6d2b7a06c5b7e9267bef3a8918a706f793271a5acc2574532da79e5a10cf074b998147a3c43586a411a513bba0d11cc19a36c83b19277f28022c88b120abfdba7076a8263e05336e3245aef7033eb3c762b5bbfa5791ac960398b649d5cbb652ddc6b2398143a0861ab3b410b696328879c099098adf819fbf7ac170030e86675e7f45c22ac9e1cf52c3102487bb0b91ab592afdc69c6e3a9b71876b86260b6c736b8291098f1130d3b763525cbad540ce2d042eacb6ed43b7bcba898f712c412f26066e09945f44ec7026c8ef959831abc10719d2017a12a41728b41c02371a5f5756ebc79406be708ea41bbd21563c874a0b791a3b4e4224a609967004f065c5ab4f3b4c61cb35df70573269da53179c3701fc5205f61974426f9b794c1b5826494b70842b6920c17752029369264dc8590b898b85c9d89a258e1f46c1b0490efd17c485cb51687cea272041e90b8e629521d3c5e3fa7518161bad7a159295b63cc6c0077897b53d47db8bc0ecb820f550705b65715a1a1094d04854f56acd26aa0baa10cb8447fad6211f53105796a42882328e6852e8de821c283b51eaab9bc95c4dc53615626049d63b1f9a457193805276b1905b0ab39353b5cf91fdd6023d4d816aef9cce4a3cfb3d12190172df221ae61d427563a098cc60e3dc9997ef54959180be5dc64a911157db6be3a01be2ee343caab33b8729abf0c50c674758c511291941fceac646232920907c2e88b9ec10211161729c797643a553a6ae5c4b7483c04e3263bd291e311c609071348b7c3310aa97d6b8318e0a4afe8399fa22f951049a9bb8860f7c69a333d3cc1aaf0129ab560713bf29eb3a01f9a276c78e54e3a3648b2447c80242b271b11406866389426d8b59796540d6b5702092ab21ee217c075cfc0c17ef826ce9ea29b9e61617457a5b1aaa23a58615dc53c59183beb36ea19498c21820b70ab47adeb678f1c52bf8768b3597b608ea1a8a15cd62e8a29bec4a1ac248ef9f02de0144bca06025f95a42bd6c8eaaaaaa2366328561d';
34
+ const TEST_NETWORK_PUBKEY_BYTES = bytesFromHexString(TEST_NETWORK_XWING_PUBKEY);
35
+ /**
36
+ * Check if a byte array matches the test seed key.
37
+ * Logs a warning if it does.
38
+ */
39
+ export function warnIfTestSeed(seed) {
40
+ const isTestSeed = seed.every((byte, i) => byte === TEST_NETWORK_SEED_BYTES[i]);
41
+ if (isTestSeed) {
42
+ console.warn('WARNING: Using TEST_NETWORK_SEED_KEY. This key provides no security ' +
43
+ 'and should only be used for local development and testing.');
44
+ }
45
+ return isTestSeed;
46
+ }
47
+ /**
48
+ * Check if a byte array matches the test public key.
49
+ * Logs a warning if it does.
50
+ */
51
+ export function warnIfTestPubKey(pubKeyBytes) {
52
+ const isTestPubKey = pubKeyBytes.every((byte, i) => byte === TEST_NETWORK_PUBKEY_BYTES[i]);
53
+ if (isTestPubKey) {
54
+ console.warn('WARNING: Using TEST_NETWORK_XWING_PUBKEY. Data encrypted with this key ' +
55
+ 'can be decrypted by anyone. Only use for local development and testing.');
56
+ }
57
+ return isTestPubKey;
58
+ }
22
59
  /**
23
60
  * Create HPKE cipher suite with X-Wing KEM, HKDF-SHA256, and ChaCha20-Poly1305 AEAD.
24
61
  * This configuration provides post-quantum security with hybrid classical/PQ encryption.
@@ -47,6 +84,7 @@ export async function deriveXwingKeypairFromSeed(seed) {
47
84
  if (seed.length !== 32) {
48
85
  throw new Error(`Invalid X-Wing seed length: expected 32 bytes, got ${seed.length}`);
49
86
  }
87
+ warnIfTestSeed(seed);
50
88
  const suite = await createXwingSuite();
51
89
  // Create a fresh ArrayBuffer copy to avoid SharedArrayBuffer issues
52
90
  const seedCopy = new Uint8Array(seed);
@@ -90,6 +128,7 @@ export async function decodeXwingPublicKey(pubKeyBytes) {
90
128
  if (pubKeyBytes.length !== suite.kem.publicKeySize) {
91
129
  throw new Error(`Invalid X-Wing public key length: expected ${XWING_PUBLIC_KEY_SIZE} bytes, got ${pubKeyBytes.length}`);
92
130
  }
131
+ warnIfTestPubKey(pubKeyBytes);
93
132
  // Create a fresh ArrayBuffer copy to avoid SharedArrayBuffer issues
94
133
  const pubKeyCopy = new Uint8Array(pubKeyBytes);
95
134
  return await suite.kem.deserializePublicKey(pubKeyCopy.buffer);
@@ -117,7 +156,7 @@ export async function encodeXwingPublicKey(publicKey) {
117
156
  /**
118
157
  * Encrypt using X-Wing HPKE (RFC 9180) with ChaCha20-Poly1305 AEAD.
119
158
  *
120
- * Output format: encappedKey (1184 bytes) || ciphertext (variable length)
159
+ * Output format: encappedKey (1120 bytes) || ciphertext (variable length)
121
160
  *
122
161
  * @param pubKeyA - Recipient's public key
123
162
  * @param msg - Message to encrypt
@@ -127,6 +166,9 @@ export async function encodeXwingPublicKey(publicKey) {
127
166
  */
128
167
  export async function encrypt(pubKeyA, msg, aad = new Uint8Array(0), info = new Uint8Array(0)) {
129
168
  const suite = await createXwingSuite();
169
+ // Warn if using the insecure test public key
170
+ const pubKeyBytes = new Uint8Array(await suite.kem.serializePublicKey(pubKeyA));
171
+ warnIfTestPubKey(pubKeyBytes);
130
172
  // Create fresh ArrayBuffer copies to avoid SharedArrayBuffer issues
131
173
  const infoCopy = new Uint8Array(info);
132
174
  const sender = await suite.createSenderContext({
@@ -146,7 +188,7 @@ export async function encrypt(pubKeyA, msg, aad = new Uint8Array(0), info = new
146
188
  /**
147
189
  * Decrypt using X-Wing HPKE (RFC 9180) with ChaCha20-Poly1305 AEAD.
148
190
  *
149
- * Input format: encappedKey (1184 bytes) || ciphertext (variable length)
191
+ * Input format: encappedKey (1120 bytes) || ciphertext (variable length)
150
192
  *
151
193
  * @param privKeyA - Recipient's private key
152
194
  * @param encryptedData - Encrypted data (encappedKey || ciphertext)
@@ -260,4 +302,14 @@ export function getXwingDecryptor({ privKeyA, }) {
260
302
  return bytesToPlaintext(computable.value.value, encryptionSchemes.xwing, typ);
261
303
  };
262
304
  }
263
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHdpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGl0ZS94d2luZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNyRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekUsT0FBTyxFQUNMLGdCQUFnQixFQUVoQixxQkFBcUIsRUFFckIscUJBQXFCLEVBQ3JCLGlCQUFpQixFQUdqQix1QkFBdUIsRUFHdkIsZ0JBQWdCLEdBRWpCLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUvRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXJELHdDQUF3QztBQUN4QyxNQUFNLFFBQVEsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0FBRTdCOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUM7QUFFNUQsdUNBQXVDO0FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUNoQyxvRUFBb0UsQ0FBQztBQUV2RSw4Q0FBOEM7QUFDOUMseUdBQXlHO0FBQ3pHLHNHQUFzRztBQUN0RyxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FDcEMsbzRFQUFvNEUsQ0FBQztBQWV2NEU7Ozs7O0dBS0c7QUFDSCxLQUFLLFVBQVUsZ0JBQWdCO0lBQzdCLE1BQU0sR0FBRyxHQUFHLElBQUksS0FB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
305
+ /**
306
+ * Returns true if the raw public key bytes match the public key encoded by the keypair.
307
+ * Used to catch caller mistakes before sending the keypair to the covalidator, where a
308
+ * mismatch would produce a cryptic signature error instead of a clear failure.
309
+ */
310
+ export function reencryptPublicKeysMatch(reencryptPubKey, reencryptKeypair) {
311
+ const keypairPubKey = reencryptKeypair.encodePublicKey();
312
+ return (keypairPubKey.length === reencryptPubKey.length &&
313
+ keypairPubKey.every((byte, i) => byte === reencryptPubKey[i]));
314
+ }
315
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHdpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGl0ZS94d2luZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNyRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekUsT0FBTyxFQUNMLGdCQUFnQixFQUVoQixxQkFBcUIsRUFFckIscUJBQXFCLEVBQ3JCLGlCQUFpQixFQUdqQix1QkFBdUIsRUFHdkIsZ0JBQWdCLEdBRWpCLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUvRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXJELHdDQUF3QztBQUN4QyxNQUFNLFFBQVEsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0FBRTdCOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUM7QUFFNUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FDaEMsb0VBQW9FLENBQUM7QUFFdkUsTUFBTSx1QkFBdUIsR0FBRyxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBRTFFOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQ3BDLG80RUFBbzRFLENBQUM7QUFFdjRFLE1BQU0seUJBQXlCLEdBQUcsa0JBQWtCLENBQUMs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
@@ -1,4 +1,10 @@
1
1
  import { Schema } from 'effect';
2
+ /**
3
+ * Schema for the environment variables required to connect to a local Inco node.
4
+ *
5
+ * Includes executor/sender addresses, keys, covalidator settings, and optional
6
+ * remote compute-server overrides. Typically populated from a `.env` file.
7
+ */
2
8
  export declare const LocalNodeEnv: Schema.Struct<{
3
9
  DEPLOYER_ADDRESS: Schema.brand<Schema.filter<Schema.TemplateLiteral<`0x${string}`>>, "Address">;
4
10
  STATE_DUMP: typeof Schema.String;
@@ -14,6 +20,18 @@ export declare const LocalNodeEnv: Schema.Struct<{
14
20
  COVALIDATOR_HOST_CHAIN_ID: Schema.optional<typeof Schema.String>;
15
21
  COVALIDATOR_URL: Schema.optional<typeof Schema.String>;
16
22
  COVALIDATOR_HOST_CHAIN_RPC_URL: Schema.optional<typeof Schema.String>;
23
+ COVALIDATOR_COMPUTE_TYPE: Schema.optional<typeof Schema.String>;
24
+ COVALIDATOR_STORAGE_KEY: Schema.optional<Schema.TemplateLiteral<`0x${string}`>>;
17
25
  }>;
26
+ /** Parsed local node environment configuration. */
18
27
  export type LocalNodeEnv = typeof LocalNodeEnv.Type;
28
+ /**
29
+ * Parses a dotenv-formatted string or `Buffer` into a validated {@link LocalNodeEnv}.
30
+ *
31
+ * Falls back to `process.env` when no argument is provided.
32
+ *
33
+ * @param envFileOrObj - A dotenv-formatted string, `Buffer`, or `undefined` to use `process.env`.
34
+ * @returns A validated `LocalNodeEnv` object.
35
+ * @throws If required environment variables are missing or invalid.
36
+ */
19
37
  export declare function parseLocalEnv(envFileOrObj?: string | Buffer): LocalNodeEnv;
@@ -1,5 +1,11 @@
1
1
  import { Schema } from 'effect';
2
2
  import { Address, HexString } from '../binary.js';
3
+ /**
4
+ * Schema for the environment variables required to connect to a local Inco node.
5
+ *
6
+ * Includes executor/sender addresses, keys, covalidator settings, and optional
7
+ * remote compute-server overrides. Typically populated from a `.env` file.
8
+ */
3
9
  export const LocalNodeEnv = Schema.Struct({
4
10
  DEPLOYER_ADDRESS: Address,
5
11
  STATE_DUMP: Schema.String,
@@ -19,9 +25,18 @@ export const LocalNodeEnv = Schema.Struct({
19
25
  COVALIDATOR_HOST_CHAIN_ID: Schema.optional(Schema.String),
20
26
  COVALIDATOR_URL: Schema.optional(Schema.String),
21
27
  COVALIDATOR_HOST_CHAIN_RPC_URL: Schema.optional(Schema.String),
28
+ COVALIDATOR_COMPUTE_TYPE: Schema.optional(Schema.String),
29
+ COVALIDATOR_STORAGE_KEY: Schema.optional(HexString),
22
30
  });
23
- // Parses a local environment file or object into a LocalNodeEnv type.
24
- // If no file or object is provided, it defaults to process.env.
31
+ /**
32
+ * Parses a dotenv-formatted string or `Buffer` into a validated {@link LocalNodeEnv}.
33
+ *
34
+ * Falls back to `process.env` when no argument is provided.
35
+ *
36
+ * @param envFileOrObj - A dotenv-formatted string, `Buffer`, or `undefined` to use `process.env`.
37
+ * @returns A validated `LocalNodeEnv` object.
38
+ * @throws If required environment variables are missing or invalid.
39
+ */
25
40
  export function parseLocalEnv(envFileOrObj) {
26
41
  const envObj = envFileOrObj ? readEnv(envFileOrObj) : process.env;
27
42
  return Schema.decodeUnknownSync(LocalNodeEnv)(envObj);
@@ -58,4 +73,4 @@ function parseEnv(envContent) {
58
73
  }
59
74
  return env;
60
75
  }
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtbm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9sb2NhbC9sb2NhbC1ub2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDaEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFbEQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDeEMsZ0JBQWdCLEVBQUUsT0FBTztJQUN6QixVQUFVLEVBQUUsTUFBTSxDQUFDLE1BQU07SUFDekIsZ0JBQWdCLEVBQUUsT0FBTztJQUN6QixvQ0FBb0M7SUFDcEMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO0lBQzFDLGNBQWMsRUFBRSxPQUFPO0lBQ3ZCLGtCQUFrQixFQUFFLFNBQVM7SUFDN0Isb0NBQW9DO0lBQ3BDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO0lBQ2pELE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtJQUNyQixvQ0FBb0M7SUFDcEMsK0JBQStCLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7SUFDM0Qsb0NBQW9DO0lBQ3BDLHNDQUFzQyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO0lBQ2xFLDhCQUE4QixFQUFFLE9BQU87SUFDdkMseUJBQXlCLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3pELGVBQWUsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDL0MsOEJBQThCLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0NBQy9ELENBQUMsQ0FBQztBQUlILHNFQUFzRTtBQUN0RSxnRUFBZ0U7QUFDaEUsTUFBTSxVQUFVLGFBQWEsQ0FBQyxZQUE4QjtJQUMxRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztJQUNsRSxPQUFPLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBRUQsU0FBUyxPQUFPLENBQUMsVUFBMkI7SUFDMUMsT0FBTyxRQUFRLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUVELG1GQUFtRjtBQUNuRixTQUFTLFFBQVEsQ0FBQyxVQUFrQjtJQUNsQyxJQUFJLEdBQUcsR0FBMkIsRUFBRSxDQUFDO0lBQ3JDLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFckMsaUNBQWlDO0lBQ2pDLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7UUFDekIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hDLElBQUksV0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hELE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUMsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxHQUFHLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3hELElBQUksS0FBSyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUV6RCx1QkFBdUI7Z0JBQ3ZCLElBQ0UsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzlDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQzlDLENBQUM7b0JBQ0QsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQy9DLENBQUM7Z0JBRUQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUNuQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCx5REFBeUQ7SUFDekQsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMvQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBZSxFQUFFLEVBQUU7WUFDOUQsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyJ9
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtbm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9sb2NhbC9sb2NhbC1ub2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDaEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFbEQ7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN4QyxnQkFBZ0IsRUFBRSxPQUFPO0lBQ3pCLFVBQVUsRUFBRSxNQUFNLENBQUMsTUFBTTtJQUN6QixnQkFBZ0IsRUFBRSxPQUFPO0lBQ3pCLG9DQUFvQztJQUNwQyxjQUFjLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7SUFDMUMsY0FBYyxFQUFFLE9BQU87SUFDdkIsa0JBQWtCLEVBQUUsU0FBUztJQUM3QixvQ0FBb0M7SUFDcEMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7SUFDakQsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO0lBQ3JCLG9DQUFvQztJQUNwQywrQkFBK0IsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztJQUMzRCxvQ0FBb0M7SUFDcEMsc0NBQXNDLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7SUFDbEUsOEJBQThCLEVBQUUsT0FBTztJQUN2Qyx5QkFBeUIsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDekQsZUFBZSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUMvQyw4QkFBOEIsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDOUQsd0JBQXdCLEVBQUUsTUFBTSxDQUFDLFFBQVEs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
@@ -14,9 +14,36 @@ declare const baseEIP712: Schema.Struct<{
14
14
  }>>>;
15
15
  }>;
16
16
  type BaseEIP712 = typeof baseEIP712.Type;
17
+ /**
18
+ * An EIP-712 typed data payload with a generic `message` field.
19
+ *
20
+ * Extends the base EIP-712 structure (domain, primaryType, types) with
21
+ * a strongly-typed `message` object for signing.
22
+ *
23
+ * @typeParam Message - The shape of the application-specific message to sign.
24
+ */
17
25
  export interface EIP712<Message extends object> extends BaseEIP712 {
18
26
  message: Message;
19
27
  }
28
+ /**
29
+ * Creates an EIP-712 typed data payload for user signing.
30
+ *
31
+ * Used to verify the user controls the private key corresponding to the ephemeral
32
+ * public key embedded in the payload. The `message` keys must exactly match the
33
+ * `name` values in `primaryTypeFields`.
34
+ *
35
+ * @typeParam PrimaryType - The EIP-712 primary type name.
36
+ * @typeParam Message - The shape of the message to sign.
37
+ * @param params.chainId - The chain ID for the EIP-712 domain.
38
+ * @param params.primaryType - The primary type name (e.g. `"Reencrypt"`).
39
+ * @param params.primaryTypeFields - The field definitions for the primary type.
40
+ * @param params.message - The message object to sign (must match `primaryTypeFields`).
41
+ * @param params.verifyingContract - Optional verifying contract address for the domain.
42
+ * @param params.domainName - Human-readable name for the EIP-712 domain.
43
+ * @param params.domainVersion - Version string for the EIP-712 domain.
44
+ * @returns A complete {@link EIP712} payload ready for signing.
45
+ * @throws If message keys do not match `primaryTypeFields` names.
46
+ */
20
47
  export declare function createEIP712Payload<PrimaryType extends string, Message extends object>({ chainId, primaryType, primaryTypeFields, message, verifyingContract, domainName, domainVersion, }: {
21
48
  chainId: bigint;
22
49
  primaryType: PrimaryType;
@@ -20,12 +20,25 @@ const baseEIP712 = Schema.Struct({
20
20
  })),
21
21
  }),
22
22
  });
23
- // This function creates the payload that will be signed by the user. It is used to verify that the
24
- // user has access to the private key that corresponds to the ephemeral public key in the payload.
25
- // If the last argument is provided, it will be used as the contract address.
26
- //
27
- // The `message` argument must have the same keys as the all the `name` values
28
- // in the `primaryTypeFields` argument.
23
+ /**
24
+ * Creates an EIP-712 typed data payload for user signing.
25
+ *
26
+ * Used to verify the user controls the private key corresponding to the ephemeral
27
+ * public key embedded in the payload. The `message` keys must exactly match the
28
+ * `name` values in `primaryTypeFields`.
29
+ *
30
+ * @typeParam PrimaryType - The EIP-712 primary type name.
31
+ * @typeParam Message - The shape of the message to sign.
32
+ * @param params.chainId - The chain ID for the EIP-712 domain.
33
+ * @param params.primaryType - The primary type name (e.g. `"Reencrypt"`).
34
+ * @param params.primaryTypeFields - The field definitions for the primary type.
35
+ * @param params.message - The message object to sign (must match `primaryTypeFields`).
36
+ * @param params.verifyingContract - Optional verifying contract address for the domain.
37
+ * @param params.domainName - Human-readable name for the EIP-712 domain.
38
+ * @param params.domainVersion - Version string for the EIP-712 domain.
39
+ * @returns A complete {@link EIP712} payload ready for signing.
40
+ * @throws If message keys do not match `primaryTypeFields` names.
41
+ */
29
42
  export function createEIP712Payload({ chainId, primaryType, primaryTypeFields, message, verifyingContract, domainName, domainVersion, }) {
30
43
  const types = {
31
44
  // This refers to the domain the contract is hosted on.
@@ -71,4 +84,4 @@ export function createEIP712Payload({ chainId, primaryType, primaryTypeFields, m
71
84
  };
72
85
  return msgParams;
73
86
  }
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWlwNzEyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JlZW5jcnlwdGlvbi9laXA3MTIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVoQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXpDLHlFQUF5RTtBQUN6RSwrQ0FBK0M7QUFDL0MsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUMvQixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNwQixPQUFPLEVBQUUsTUFBTSxDQUFDLE1BQU07UUFDdEIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1FBQ25CLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTTtRQUN0QixpQkFBaUIsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUM3QywyRUFBMkU7UUFDM0Usc0JBQXNCO0tBQ3ZCLENBQUM7SUFDRixXQUFXLEVBQUUsTUFBTSxDQUFDLE1BQU07SUFDMUIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDbkIsR0FBRyxFQUFFLE1BQU0sQ0FBQyxNQUFNO1FBQ2xCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUNqQixNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ1osSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1lBQ25CLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTTtTQUNwQixDQUFDLENBQ0g7S0FDRixDQUFDO0NBQ0gsQ0FBQyxDQUFDO0FBU0gsbUdBQW1HO0FBQ25HLGtHQUFrRztBQUNsRyw2RUFBNkU7QUFDN0UsRUFBRTtBQUNGLDhFQUE4RTtBQUM5RSx1Q0FBdUM7QUFDdkMsTUFBTSxVQUFVLG1CQUFtQixDQUdqQyxFQUNBLE9BQU8sRUFDUCxXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLE9BQU8sRUFDUCxpQkFBaUIsRUFDakIsVUFBVSxFQUNWLGFBQWEsR0FTZDtJQUNDLE1BQU0sS0FBSyxHQUFHO1FBQ1osdURBQXVEO1FBQ3ZELFlBQVksRUFBRTtZQUNaLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO1lBQ2hDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO1lBQ25DLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO1NBQ3JDO1FBQ0Qsd0JBQXdCO1FBQ3hCLENBQUMsV0FBVyxDQUFDLEVBQUUsaUJBQWlCO0tBQ2pDLENBQUM7SUFFRixJQUFJLGlCQUFpQixFQUFFLENBQUM7UUFDdEIsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELHFFQUFxRTtJQUNyRSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pDLE1BQU0scUJBQXFCLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0UsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3hELE1BQU0sSUFBSSxLQUFLLENBQUMsa0RBQWtELENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQ0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDekMsTUFBTSxJQUFJLEtBQUssQ0FDYixlQUFlLEdBQUcsdUNBQXVDLENBQzFELENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sU0FBUyxHQUFHO1FBQ2hCLEtBQUs7UUFDTCw2RkFBNkY7UUFDN0YsZ0dBQWdHO1FBQ2hHLHNCQUFzQjtRQUN0Qix5REFBeUQ7UUFDekQsV0FBVztRQUNYLE1BQU0sRUFBRTtZQUNOLHlFQUF5RTtZQUN6RSxJQUFJLEVBQUUsVUFBVTtZQUNoQixzQ0FBc0M7WUFDdEMsT0FBTyxFQUFFLGFBQWE7WUFDdEIsbURBQW1EO1lBQ25ELE9BQU87WUFDUCxpQkFBaUI7U0FDbEI7UUFDRCxPQUFPO0tBQ1IsQ0FBQztJQUVGLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMifQ==
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWlwNzEyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JlZW5jcnlwdGlvbi9laXA3MTIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVoQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXpDLHlFQUF5RTtBQUN6RSwrQ0FBK0M7QUFDL0MsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUMvQixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNwQixPQUFPLEVBQUUsTUFBTSxDQUFDLE1BQU07UUFDdEIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1FBQ25CLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTTtRQUN0QixpQkFBaUIsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUM3QywyRUFBMkU7UUFDM0Usc0JBQXNCO0tBQ3ZCLENBQUM7SUFDRixXQUFXLEVBQUUsTUFBTSxDQUFDLE1BQU07SUFDMUIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDbkIsR0FBRyxFQUFFLE1BQU0sQ0FBQyxNQUFNO1FBQ2xCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUNqQixNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ1osSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1lBQ25CLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTTtTQUNwQixDQUFDLENBQ0g7S0FDRixDQUFDO0NBQ0gsQ0FBQyxDQUFDO0FBZ0JIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBR2pDLEVBQ0EsT0FBTyxFQUNQLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsT0FBTyxFQUNQLGlCQUFpQixFQUNqQixVQUFVLEVBQ1YsYUFBYSxHQVNkO0lBQ0MsTUFBTSxLQUFLLEdBQUc7UUFDWix1REFBdUQ7UUFDdkQsWUFBWSxFQUFFO1lBQ1osRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7WUFDaEMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7WUFDbkMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7U0FDckM7UUFDRCx3QkFBd0I7UUFDeEIsQ0FBQyxXQUFXLENBQUMsRUFBRSxpQkFBaUI7S0FDakMsQ0FBQztJQUVGLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUN0QixLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQscUVBQXFFO0lBQ3JFLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekMsTUFBTSxxQkFBcUIsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzRSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUsscUJBQXFCLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDeEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFDRCxLQUFLLE1BQU0sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN6QyxNQUFNLElBQUksS0FBSyxDQUNiLGVBQWUsR0FBRyx1Q0FBdUMsQ0FDMUQsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUc7UUFDaEIsS0FBSztRQUNMLDZGQUE2RjtRQUM3RixnR0FBZ0c7UUFDaEcsc0JBQXNCO1FBQ3RCLHlEQUF5RDtRQUN6RCxXQUFXO1FBQ1gsTUFBTSxFQUFFO1lBQ04seUVBQXlFO1lBQ3pFLElBQUksRUFBRSxVQUFVO1lBQ2hCLHNDQUFzQztZQUN0QyxPQUFPLEVBQUUsYUFBYTtZQUN0QixtREFBbUQ7WUFDbkQsT0FBTztZQUNQLGlCQUFpQjtTQUNsQjtRQUNELE9BQU87S0FDUixDQUFDO0lBRUYsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyJ9
@@ -4,18 +4,42 @@ import { CiphertextOf, EncryptionScheme, PlaintextOf, SupportedFheType } from '.
4
4
  import { Handle } from '../handle.js';
5
5
  import type { XwingKeypair } from '../lite/xwing.js';
6
6
  import type { BackoffConfig } from '../retry.js';
7
+ /**
8
+ * The core reencryption function type. Takes a handle (and optional ciphertext) and returns
9
+ * the decrypted plaintext. Supports retry configuration for handles that are not yet available.
10
+ *
11
+ * @typeParam S - The encryption scheme (e.g. X-Wing).
12
+ */
7
13
  export type Reencryptor<S extends EncryptionScheme> = <T extends SupportedFheType>(args: ReencryptFnArgs<S, T>, backoffConfig?: Partial<BackoffConfig>) => Promise<PlaintextOf<S, T>>;
14
+ /** Arguments required to construct a {@link Reencryptor}. */
8
15
  export interface ReencryptorArgs {
9
16
  chainId: bigint;
10
17
  }
18
+ /**
19
+ * Arguments for a single reencryption call.
20
+ *
21
+ * @typeParam S - The encryption scheme.
22
+ * @typeParam T - The ENCRYPTION type of the ciphertext.
23
+ */
11
24
  export type ReencryptFnArgs<S extends EncryptionScheme, T extends SupportedFheType> = {
12
25
  handle: Handle;
26
+ /**
27
+ * Optional ciphertext hint. If provided, the reencrypt endpoint may use it directly
28
+ * instead of fetching from the covalidators.
29
+ */
13
30
  ciphertext?: CiphertextOf<S, T>;
14
31
  };
32
+ /** Union of supported ephemeral keypair types for reencryption (currently X-Wing only). */
15
33
  export type SupportedEphemeralKeypairs = XwingKeypair;
34
+ /** An object whose public key can be serialized to a `Uint8Array`. */
16
35
  export interface PubKeyEncodable {
17
36
  encodePublicKey(): Uint8Array;
18
37
  }
38
+ /**
39
+ * A reencryption request to be sent to a reencrypt endpoint.
40
+ *
41
+ * @typeParam EKP - The type of ephemeral keypair used for the reencryption session.
42
+ */
19
43
  export interface ReencryptEndpointRequest<EKP extends SupportedEphemeralKeypairs> {
20
44
  userAddress: Address;
21
45
  handle: Handle;
@@ -7,6 +7,20 @@ export type BackoffConfig = {
7
7
  backoffFactor: number;
8
8
  errHandler?: (error: Error, attempt: number) => 'stop' | 'continue';
9
9
  };
10
+ /**
11
+ * Checks if an error is safe to retry.
12
+ * Only transient errors matching the allowlist should return true.
13
+ * All other errors fail fast to avoid masking security-critical failures.
14
+ *
15
+ * @param error - The error to check
16
+ * @returns true if the error is transient and safe to retry, false otherwise
17
+ */
18
+ export declare function isRetryableError(error: Error): boolean;
19
+ /**
20
+ * Default error handler that only retries known transient errors.
21
+ * Security-critical errors will fail fast.
22
+ */
23
+ export declare function defaultRetryErrorHandler(error: Error): 'stop' | 'continue';
10
24
  /**
11
25
  * Helper function to implement exponential backoff retry logic.
12
26
  * @param fn - The function to retry
package/dist/esm/retry.js CHANGED
@@ -1,3 +1,57 @@
1
+ /**
2
+ * Allowlist of transient error patterns that are safe to retry.
3
+ * Each pattern includes a substring to match (case-insensitive) and a description.
4
+ *
5
+ * SECURITY: Only add patterns here for genuinely transient errors.
6
+ * Do NOT add patterns that could mask security-critical errors like:
7
+ * - Authentication failures
8
+ * - Permission denied
9
+ * - Signature validation errors
10
+ * - Invalid input/format errors
11
+ */
12
+ const RETRYABLE_ERROR_PATTERNS = [
13
+ // Explicit retry suggestions from the server
14
+ {
15
+ pattern: 'try again later',
16
+ description: 'Server explicitly suggests retry',
17
+ },
18
+ // Network/connectivity issues
19
+ { pattern: 'timeout', description: 'Request timeout' },
20
+ { pattern: 'etimedout', description: 'Connection timeout' },
21
+ { pattern: 'econnreset', description: 'Connection reset' },
22
+ { pattern: 'econnrefused', description: 'Connection refused' },
23
+ // Service availability
24
+ { pattern: '503', description: 'Service unavailable (503)' },
25
+ { pattern: 'service unavailable', description: 'Service unavailable' },
26
+ // Data propagation delays (eventual consistency)
27
+ {
28
+ pattern: 'ciphertext too short',
29
+ description: 'Ciphertext not yet propagated to covalidator',
30
+ },
31
+ ];
32
+ /**
33
+ * Checks if an error is safe to retry.
34
+ * Only transient errors matching the allowlist should return true.
35
+ * All other errors fail fast to avoid masking security-critical failures.
36
+ *
37
+ * @param error - The error to check
38
+ * @returns true if the error is transient and safe to retry, false otherwise
39
+ */
40
+ export function isRetryableError(error) {
41
+ const message = error.message?.toLowerCase() ?? '';
42
+ return RETRYABLE_ERROR_PATTERNS.some(({ pattern }) => message.includes(pattern));
43
+ }
44
+ /**
45
+ * Default error handler that only retries known transient errors.
46
+ * Security-critical errors will fail fast.
47
+ */
48
+ export function defaultRetryErrorHandler(error) {
49
+ if (isRetryableError(error)) {
50
+ console.warn(`Retrying after transient error: ${error.message}`);
51
+ return 'continue';
52
+ }
53
+ return 'stop';
54
+ }
1
55
  /**
2
56
  * Helper function to implement exponential backoff retry logic.
3
57
  * @param fn - The function to retry
@@ -6,7 +60,7 @@
6
60
  */
7
61
  export async function retryWithBackoff(fn, {
8
62
  // These default values will make it return an error after ~10s if the fn response is fast.
9
- maxRetries = 5, baseDelayInMs = 1000, backoffFactor = 1.5, errHandler = () => 'continue', } = {}) {
63
+ maxRetries = 5, baseDelayInMs = 1000, backoffFactor = 1.5, errHandler = defaultRetryErrorHandler, } = {}) {
10
64
  let lastError;
11
65
  for (let attempt = 0; attempt < maxRetries; attempt++) {
12
66
  try {
@@ -25,4 +79,4 @@ maxRetries = 5, baseDelayInMs = 1000, backoffFactor = 1.5, errHandler = () => 'c
25
79
  }
26
80
  throw lastError;
27
81
  }
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmV0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUE7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGdCQUFnQixDQUNwQyxFQUFvQixFQUNwQjtBQUNFLDJGQUEyRjtBQUMzRixVQUFVLEdBQUcsQ0FBQyxFQUNkLGFBQWEsR0FBRyxJQUFJLEVBQ3BCLGFBQWEsR0FBRyxHQUFHLEVBQ25CLFVBQVUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLE1BQ0gsRUFBRTtJQUU5QixJQUFJLFNBQTRCLENBQUM7SUFFakMsS0FBSyxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsT0FBTyxHQUFHLFVBQVUsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ3RELElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxFQUFFLEVBQUUsQ0FBQztRQUNwQixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLFNBQVMsR0FBRyxLQUFjLENBQUM7WUFDM0IsSUFDRSxVQUFVLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxLQUFLLFVBQVU7Z0JBQzdDLE9BQU8sS0FBSyxVQUFVLEdBQUcsQ0FBQyxFQUMxQixDQUFDO2dCQUNELE1BQU07WUFDUixDQUFDO1lBQ0QsTUFBTSxLQUFLLEdBQUcsYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQy9ELE1BQU0sTUFBTSxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQywwQ0FBMEM7WUFDOUYsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzlELENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxTQUFTLENBQUM7QUFDbEIsQ0FBQyJ9
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmV0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUE7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sd0JBQXdCLEdBR3pCO0lBQ0gsNkNBQTZDO0lBQzdDO1FBQ0UsT0FBTyxFQUFFLGlCQUFpQjtRQUMxQixXQUFXLEVBQUUsa0NBQWtDO0tBQ2hEO0lBRUQsOEJBQThCO0lBQzlCLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUU7SUFDdEQsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsRUFBRTtJQUMzRCxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFO0lBQzFELEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUU7SUFFOUQsdUJBQXVCO0lBQ3ZCLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsMkJBQTJCLEVBQUU7SUFDNUQsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFFO0lBRXRFLGlEQUFpRDtJQUNqRDtRQUNFLE9BQU8sRUFBRSxzQkFBc0I7UUFDL0IsV0FBVyxFQUFFLDhDQUE4QztLQUM1RDtDQUNGLENBQUM7QUFFRjs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEtBQVk7SUFDM0MsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFFbkQsT0FBTyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FDbkQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FDMUIsQ0FBQztBQUNKLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsS0FBWTtJQUNuRCxJQUFJLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDNUIsT0FBTyxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDakUsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsZ0JBQWdCLENBQ3BDLEVBQW9CLEVBQ3BCO0FBQ0UsMkZBQTJGO0FBQzNGLFVBQVUsR0FBRyxDQUFDLEVBQ2QsYUFBYSxHQUFHLElBQUksRUFDcEIsYUFBYSxHQUFHLEdBQUcsRUFDbkIsVUFBVSxHQUFHLHdCQUF3QixNQUNYLEVBQUU7SUFFOUIsSUFBSSxTQUE0QixDQUFDO0lBRWpDLEtBQUssSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFLE9BQU8sR0FBRyxVQUFVLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sRUFBRSxFQUFFLENBQUM7UUFDcEIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixTQUFTLEdBQUcsS0FBYyxDQUFDO1lBQzNCLElBQ0UsVUFBVSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsS0FBSyxVQUFVO2dCQUM3QyxPQUFPLEtBQUssVUFBVSxHQUFHLENBQUMsRUFDMUIsQ0FBQztnQkFDRCxNQUFNO1lBQ1IsQ0FBQztZQUNELE1BQU0sS0FBSyxHQUFHLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUMvRCxNQUFNLE1BQU0sR0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsMENBQTBDO1lBQzlGLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUM5RCxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sU0FBUyxDQUFDO0FBQ2xCLENBQUMifQ==
@@ -1,15 +1,20 @@
1
- import { Account, Chain, Transport, WalletClient } from 'viem';
1
+ import { Account, Chain, PublicClient, Transport, WalletClient } from 'viem';
2
2
  import { vi } from 'vitest';
3
3
  import { KmsClient } from '../kms/client.js';
4
4
  import { KmsQuorumClient } from '../kms/quorumClient.js';
5
5
  interface MinimalKmsClient {
6
6
  attestedCompute: ReturnType<typeof vi.fn>;
7
7
  attestedDecrypt: ReturnType<typeof vi.fn>;
8
+ attestedReveal: ReturnType<typeof vi.fn>;
9
+ eListAttestedDecrypt: ReturnType<typeof vi.fn>;
10
+ eListAttestedReveal: ReturnType<typeof vi.fn>;
8
11
  key: ReturnType<typeof vi.fn>;
9
12
  reencrypt: ReturnType<typeof vi.fn>;
10
13
  }
11
14
  export declare function createMockKmsClient(): MinimalKmsClient & KmsClient;
12
15
  export declare function createMockQuorumClient(): KmsQuorumClient;
13
16
  export declare function setupMockInQuorumClient(quorumClient: KmsQuorumClient, mockKmsClient: MinimalKmsClient & KmsClient): void;
17
+ export declare function createMockPublicClient(): PublicClient<Transport, Chain>;
14
18
  export declare function createTestWalletClient(): WalletClient<Transport, Chain, Account>;
19
+ export declare function createFallbackWalletClient(): WalletClient<Transport, Chain, Account>;
15
20
  export {};