@inco/lightning-js 0.0.0-bootstrap.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (283) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +587 -0
  3. package/dist/cjs/advancedacl/index.d.ts +2 -0
  4. package/dist/cjs/advancedacl/index.js +19 -0
  5. package/dist/cjs/advancedacl/session-key.d.ts +95 -0
  6. package/dist/cjs/advancedacl/session-key.js +376 -0
  7. package/dist/cjs/advancedacl/types.d.ts +16 -0
  8. package/dist/cjs/advancedacl/types.js +3 -0
  9. package/dist/cjs/attestedcompute/attested-compute.d.ts +65 -0
  10. package/dist/cjs/attestedcompute/attested-compute.js +80 -0
  11. package/dist/cjs/attestedcompute/types.d.ts +35 -0
  12. package/dist/cjs/attestedcompute/types.js +46 -0
  13. package/dist/cjs/attesteddecrypt/attested-decrypt.d.ts +61 -0
  14. package/dist/cjs/attesteddecrypt/attested-decrypt.js +118 -0
  15. package/dist/cjs/attesteddecrypt/index.d.ts +1 -0
  16. package/dist/cjs/attesteddecrypt/index.js +18 -0
  17. package/dist/cjs/attesteddecrypt/types.d.ts +27 -0
  18. package/dist/cjs/attesteddecrypt/types.js +16 -0
  19. package/dist/cjs/attestedreveal/attested-reveal.d.ts +21 -0
  20. package/dist/cjs/attestedreveal/attested-reveal.js +31 -0
  21. package/dist/cjs/attestedreveal/index.d.ts +2 -0
  22. package/dist/cjs/attestedreveal/index.js +21 -0
  23. package/dist/cjs/attestedreveal/types.d.ts +4 -0
  24. package/dist/cjs/attestedreveal/types.js +13 -0
  25. package/dist/cjs/binary.d.ts +104 -0
  26. package/dist/cjs/binary.js +171 -0
  27. package/dist/cjs/chain.d.ts +50 -0
  28. package/dist/cjs/chain.js +62 -0
  29. package/dist/cjs/eip712/eip712.d.ts +18 -0
  30. package/dist/cjs/eip712/eip712.js +51 -0
  31. package/dist/cjs/eip712/index.d.ts +1 -0
  32. package/dist/cjs/eip712/index.js +8 -0
  33. package/dist/cjs/elistattesteddecrypt/elist-attested-decrypt.d.ts +51 -0
  34. package/dist/cjs/elistattesteddecrypt/elist-attested-decrypt.js +94 -0
  35. package/dist/cjs/elistattesteddecrypt/index.d.ts +2 -0
  36. package/dist/cjs/elistattesteddecrypt/index.js +22 -0
  37. package/dist/cjs/elistattesteddecrypt/types.d.ts +31 -0
  38. package/dist/cjs/elistattesteddecrypt/types.js +16 -0
  39. package/dist/cjs/encryption/encryption.d.ts +235 -0
  40. package/dist/cjs/encryption/encryption.js +226 -0
  41. package/dist/cjs/encryption/index.d.ts +1 -0
  42. package/dist/cjs/encryption/index.js +19 -0
  43. package/dist/cjs/generated/abis/add-two.d.ts +117 -0
  44. package/dist/cjs/generated/abis/add-two.js +80 -0
  45. package/dist/cjs/generated/abis/lightning.d.ts +3362 -0
  46. package/dist/cjs/generated/abis/lightning.js +2445 -0
  47. package/dist/cjs/generated/abis/test-elist.d.ts +276 -0
  48. package/dist/cjs/generated/abis/test-elist.js +168 -0
  49. package/dist/cjs/generated/abis/verifier.d.ts +1353 -0
  50. package/dist/cjs/generated/abis/verifier.js +954 -0
  51. package/dist/cjs/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +1494 -0
  52. package/dist/cjs/generated/es/inco/covalidator/compute/v1/server_pb.js +395 -0
  53. package/dist/cjs/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +247 -0
  54. package/dist/cjs/generated/es/inco/covalidator/compute/v1/types_pb.js +80 -0
  55. package/dist/cjs/generated/es/inco/helioswrapper/v1/helioswrapper_pb.d.ts +77 -0
  56. package/dist/cjs/generated/es/inco/helioswrapper/v1/helioswrapper_pb.js +28 -0
  57. package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +685 -0
  58. package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.js +100 -0
  59. package/dist/cjs/generated/es/inco/kms/lite/v1/types_pb.d.ts +289 -0
  60. package/dist/cjs/generated/es/inco/kms/lite/v1/types_pb.js +136 -0
  61. package/dist/cjs/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.d.ts +371 -0
  62. package/dist/cjs/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.js +88 -0
  63. package/dist/cjs/generated/lightning.d.ts +830 -0
  64. package/dist/cjs/generated/lightning.js +872 -0
  65. package/dist/cjs/generated/local-node.d.ts +50 -0
  66. package/dist/cjs/generated/local-node.js +107 -0
  67. package/dist/cjs/handle.d.ts +123 -0
  68. package/dist/cjs/handle.js +221 -0
  69. package/dist/cjs/index.d.ts +5 -0
  70. package/dist/cjs/index.js +31 -0
  71. package/dist/cjs/kms/client.d.ts +12 -0
  72. package/dist/cjs/kms/client.js +47 -0
  73. package/dist/cjs/kms/quorumClient.d.ts +65 -0
  74. package/dist/cjs/kms/quorumClient.js +463 -0
  75. package/dist/cjs/kms/quorumConsistency.d.ts +82 -0
  76. package/dist/cjs/kms/quorumConsistency.js +269 -0
  77. package/dist/cjs/kms/signatureVerification.d.ts +35 -0
  78. package/dist/cjs/kms/signatureVerification.js +88 -0
  79. package/dist/cjs/kms/thresholdPromises.d.ts +8 -0
  80. package/dist/cjs/kms/thresholdPromises.js +62 -0
  81. package/dist/cjs/lite/attested-compute.d.ts +6 -0
  82. package/dist/cjs/lite/attested-compute.js +8 -0
  83. package/dist/cjs/lite/attested-decrypt.d.ts +4 -0
  84. package/dist/cjs/lite/attested-decrypt.js +6 -0
  85. package/dist/cjs/lite/deployments.d.ts +24 -0
  86. package/dist/cjs/lite/deployments.js +21 -0
  87. package/dist/cjs/lite/hadu.d.ts +4 -0
  88. package/dist/cjs/lite/hadu.js +28 -0
  89. package/dist/cjs/lite/index.d.ts +13 -0
  90. package/dist/cjs/lite/index.js +31 -0
  91. package/dist/cjs/lite/lightning.d.ts +459 -0
  92. package/dist/cjs/lite/lightning.js +696 -0
  93. package/dist/cjs/lite/types.d.ts +47 -0
  94. package/dist/cjs/lite/types.js +3 -0
  95. package/dist/cjs/lite/xwing.d.ts +154 -0
  96. package/dist/cjs/lite/xwing.js +326 -0
  97. package/dist/cjs/local/index.d.ts +1 -0
  98. package/dist/cjs/local/index.js +18 -0
  99. package/dist/cjs/local/local-node.d.ts +37 -0
  100. package/dist/cjs/local/local-node.js +80 -0
  101. package/dist/cjs/reencryption/eip712.d.ts +56 -0
  102. package/dist/cjs/reencryption/eip712.js +90 -0
  103. package/dist/cjs/reencryption/index.d.ts +2 -0
  104. package/dist/cjs/reencryption/index.js +19 -0
  105. package/dist/cjs/reencryption/types.d.ts +48 -0
  106. package/dist/cjs/reencryption/types.js +3 -0
  107. package/dist/cjs/retry.d.ts +30 -0
  108. package/dist/cjs/retry.js +87 -0
  109. package/dist/cjs/schema.d.ts +4 -0
  110. package/dist/cjs/schema.js +19 -0
  111. package/dist/cjs/test/mocks.d.ts +20 -0
  112. package/dist/cjs/test/mocks.js +72 -0
  113. package/dist/cjs/viem.d.ts +1141 -0
  114. package/dist/cjs/viem.js +36 -0
  115. package/dist/esm/advancedacl/index.d.ts +2 -0
  116. package/dist/esm/advancedacl/index.js +3 -0
  117. package/dist/esm/advancedacl/session-key.d.ts +95 -0
  118. package/dist/esm/advancedacl/session-key.js +367 -0
  119. package/dist/esm/advancedacl/types.d.ts +16 -0
  120. package/dist/esm/advancedacl/types.js +2 -0
  121. package/dist/esm/attestedcompute/attested-compute.d.ts +65 -0
  122. package/dist/esm/attestedcompute/attested-compute.js +76 -0
  123. package/dist/esm/attestedcompute/types.d.ts +35 -0
  124. package/dist/esm/attestedcompute/types.js +42 -0
  125. package/dist/esm/attesteddecrypt/attested-decrypt.d.ts +61 -0
  126. package/dist/esm/attesteddecrypt/attested-decrypt.js +112 -0
  127. package/dist/esm/attesteddecrypt/index.d.ts +1 -0
  128. package/dist/esm/attesteddecrypt/index.js +2 -0
  129. package/dist/esm/attesteddecrypt/types.d.ts +27 -0
  130. package/dist/esm/attesteddecrypt/types.js +12 -0
  131. package/dist/esm/attestedreveal/attested-reveal.d.ts +21 -0
  132. package/dist/esm/attestedreveal/attested-reveal.js +28 -0
  133. package/dist/esm/attestedreveal/index.d.ts +2 -0
  134. package/dist/esm/attestedreveal/index.js +3 -0
  135. package/dist/esm/attestedreveal/types.d.ts +4 -0
  136. package/dist/esm/attestedreveal/types.js +9 -0
  137. package/dist/esm/binary.d.ts +104 -0
  138. package/dist/esm/binary.js +155 -0
  139. package/dist/esm/chain.d.ts +50 -0
  140. package/dist/esm/chain.js +58 -0
  141. package/dist/esm/eip712/eip712.d.ts +18 -0
  142. package/dist/esm/eip712/eip712.js +46 -0
  143. package/dist/esm/eip712/index.d.ts +1 -0
  144. package/dist/esm/eip712/index.js +2 -0
  145. package/dist/esm/elistattesteddecrypt/elist-attested-decrypt.d.ts +51 -0
  146. package/dist/esm/elistattesteddecrypt/elist-attested-decrypt.js +89 -0
  147. package/dist/esm/elistattesteddecrypt/index.d.ts +2 -0
  148. package/dist/esm/elistattesteddecrypt/index.js +3 -0
  149. package/dist/esm/elistattesteddecrypt/types.d.ts +31 -0
  150. package/dist/esm/elistattesteddecrypt/types.js +12 -0
  151. package/dist/esm/encryption/encryption.d.ts +235 -0
  152. package/dist/esm/encryption/encryption.js +214 -0
  153. package/dist/esm/encryption/index.d.ts +1 -0
  154. package/dist/esm/encryption/index.js +2 -0
  155. package/dist/esm/generated/abis/add-two.d.ts +117 -0
  156. package/dist/esm/generated/abis/add-two.js +77 -0
  157. package/dist/esm/generated/abis/lightning.d.ts +3362 -0
  158. package/dist/esm/generated/abis/lightning.js +2442 -0
  159. package/dist/esm/generated/abis/test-elist.d.ts +276 -0
  160. package/dist/esm/generated/abis/test-elist.js +165 -0
  161. package/dist/esm/generated/abis/verifier.d.ts +1353 -0
  162. package/dist/esm/generated/abis/verifier.js +951 -0
  163. package/dist/esm/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +1494 -0
  164. package/dist/esm/generated/es/inco/covalidator/compute/v1/server_pb.js +392 -0
  165. package/dist/esm/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +247 -0
  166. package/dist/esm/generated/es/inco/covalidator/compute/v1/types_pb.js +77 -0
  167. package/dist/esm/generated/es/inco/helioswrapper/v1/helioswrapper_pb.d.ts +77 -0
  168. package/dist/esm/generated/es/inco/helioswrapper/v1/helioswrapper_pb.js +25 -0
  169. package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +685 -0
  170. package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.js +97 -0
  171. package/dist/esm/generated/es/inco/kms/lite/v1/types_pb.d.ts +289 -0
  172. package/dist/esm/generated/es/inco/kms/lite/v1/types_pb.js +133 -0
  173. package/dist/esm/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.d.ts +371 -0
  174. package/dist/esm/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.js +85 -0
  175. package/dist/esm/generated/lightning.d.ts +830 -0
  176. package/dist/esm/generated/lightning.js +869 -0
  177. package/dist/esm/generated/local-node.d.ts +50 -0
  178. package/dist/esm/generated/local-node.js +104 -0
  179. package/dist/esm/handle.d.ts +123 -0
  180. package/dist/esm/handle.js +212 -0
  181. package/dist/esm/index.d.ts +5 -0
  182. package/dist/esm/index.js +6 -0
  183. package/dist/esm/kms/client.d.ts +12 -0
  184. package/dist/esm/kms/client.js +40 -0
  185. package/dist/esm/kms/quorumClient.d.ts +65 -0
  186. package/dist/esm/kms/quorumClient.js +459 -0
  187. package/dist/esm/kms/quorumConsistency.d.ts +82 -0
  188. package/dist/esm/kms/quorumConsistency.js +260 -0
  189. package/dist/esm/kms/signatureVerification.d.ts +35 -0
  190. package/dist/esm/kms/signatureVerification.js +84 -0
  191. package/dist/esm/kms/thresholdPromises.d.ts +8 -0
  192. package/dist/esm/kms/thresholdPromises.js +59 -0
  193. package/dist/esm/lite/attested-compute.d.ts +6 -0
  194. package/dist/esm/lite/attested-compute.js +4 -0
  195. package/dist/esm/lite/attested-decrypt.d.ts +4 -0
  196. package/dist/esm/lite/attested-decrypt.js +3 -0
  197. package/dist/esm/lite/deployments.d.ts +24 -0
  198. package/dist/esm/lite/deployments.js +17 -0
  199. package/dist/esm/lite/hadu.d.ts +4 -0
  200. package/dist/esm/lite/hadu.js +24 -0
  201. package/dist/esm/lite/index.d.ts +13 -0
  202. package/dist/esm/lite/index.js +10 -0
  203. package/dist/esm/lite/lightning.d.ts +459 -0
  204. package/dist/esm/lite/lightning.js +692 -0
  205. package/dist/esm/lite/types.d.ts +47 -0
  206. package/dist/esm/lite/types.js +2 -0
  207. package/dist/esm/lite/xwing.d.ts +154 -0
  208. package/dist/esm/lite/xwing.js +311 -0
  209. package/dist/esm/local/index.d.ts +1 -0
  210. package/dist/esm/local/index.js +2 -0
  211. package/dist/esm/local/local-node.d.ts +37 -0
  212. package/dist/esm/local/local-node.js +76 -0
  213. package/dist/esm/reencryption/eip712.d.ts +56 -0
  214. package/dist/esm/reencryption/eip712.js +87 -0
  215. package/dist/esm/reencryption/index.d.ts +2 -0
  216. package/dist/esm/reencryption/index.js +3 -0
  217. package/dist/esm/reencryption/types.d.ts +48 -0
  218. package/dist/esm/reencryption/types.js +2 -0
  219. package/dist/esm/retry.d.ts +30 -0
  220. package/dist/esm/retry.js +82 -0
  221. package/dist/esm/schema.d.ts +4 -0
  222. package/dist/esm/schema.js +15 -0
  223. package/dist/esm/test/mocks.d.ts +20 -0
  224. package/dist/esm/test/mocks.js +64 -0
  225. package/dist/esm/viem.d.ts +1141 -0
  226. package/dist/esm/viem.js +32 -0
  227. package/dist/types/advancedacl/index.d.ts +2 -0
  228. package/dist/types/advancedacl/session-key.d.ts +95 -0
  229. package/dist/types/advancedacl/types.d.ts +16 -0
  230. package/dist/types/attestedcompute/attested-compute.d.ts +65 -0
  231. package/dist/types/attestedcompute/types.d.ts +35 -0
  232. package/dist/types/attesteddecrypt/attested-decrypt.d.ts +61 -0
  233. package/dist/types/attesteddecrypt/index.d.ts +1 -0
  234. package/dist/types/attesteddecrypt/types.d.ts +27 -0
  235. package/dist/types/attestedreveal/attested-reveal.d.ts +21 -0
  236. package/dist/types/attestedreveal/index.d.ts +2 -0
  237. package/dist/types/attestedreveal/types.d.ts +4 -0
  238. package/dist/types/binary.d.ts +104 -0
  239. package/dist/types/chain.d.ts +50 -0
  240. package/dist/types/eip712/eip712.d.ts +18 -0
  241. package/dist/types/eip712/index.d.ts +1 -0
  242. package/dist/types/elistattesteddecrypt/elist-attested-decrypt.d.ts +51 -0
  243. package/dist/types/elistattesteddecrypt/index.d.ts +2 -0
  244. package/dist/types/elistattesteddecrypt/types.d.ts +31 -0
  245. package/dist/types/encryption/encryption.d.ts +235 -0
  246. package/dist/types/encryption/index.d.ts +1 -0
  247. package/dist/types/generated/abis/add-two.d.ts +117 -0
  248. package/dist/types/generated/abis/lightning.d.ts +3362 -0
  249. package/dist/types/generated/abis/test-elist.d.ts +276 -0
  250. package/dist/types/generated/abis/verifier.d.ts +1353 -0
  251. package/dist/types/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +1494 -0
  252. package/dist/types/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +247 -0
  253. package/dist/types/generated/es/inco/helioswrapper/v1/helioswrapper_pb.d.ts +77 -0
  254. package/dist/types/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +685 -0
  255. package/dist/types/generated/es/inco/kms/lite/v1/types_pb.d.ts +289 -0
  256. package/dist/types/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.d.ts +371 -0
  257. package/dist/types/generated/lightning.d.ts +830 -0
  258. package/dist/types/generated/local-node.d.ts +50 -0
  259. package/dist/types/handle.d.ts +123 -0
  260. package/dist/types/index.d.ts +5 -0
  261. package/dist/types/kms/client.d.ts +12 -0
  262. package/dist/types/kms/quorumClient.d.ts +65 -0
  263. package/dist/types/kms/quorumConsistency.d.ts +82 -0
  264. package/dist/types/kms/signatureVerification.d.ts +35 -0
  265. package/dist/types/kms/thresholdPromises.d.ts +8 -0
  266. package/dist/types/lite/attested-compute.d.ts +6 -0
  267. package/dist/types/lite/attested-decrypt.d.ts +4 -0
  268. package/dist/types/lite/deployments.d.ts +24 -0
  269. package/dist/types/lite/hadu.d.ts +4 -0
  270. package/dist/types/lite/index.d.ts +13 -0
  271. package/dist/types/lite/lightning.d.ts +459 -0
  272. package/dist/types/lite/types.d.ts +47 -0
  273. package/dist/types/lite/xwing.d.ts +154 -0
  274. package/dist/types/local/index.d.ts +1 -0
  275. package/dist/types/local/local-node.d.ts +37 -0
  276. package/dist/types/reencryption/eip712.d.ts +56 -0
  277. package/dist/types/reencryption/index.d.ts +2 -0
  278. package/dist/types/reencryption/types.d.ts +48 -0
  279. package/dist/types/retry.d.ts +30 -0
  280. package/dist/types/schema.d.ts +4 -0
  281. package/dist/types/test/mocks.d.ts +20 -0
  282. package/dist/types/viem.d.ts +1141 -0
  283. package/package.json +129 -0
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LocalNodeEnv = void 0;
4
+ exports.parseLocalEnv = parseLocalEnv;
5
+ const effect_1 = require("effect");
6
+ const binary_js_1 = require("../binary.js");
7
+ /**
8
+ * Schema for the environment variables required to connect to a local Inco node.
9
+ *
10
+ * Includes executor/sender addresses, keys, covalidator settings, and optional
11
+ * remote compute-server overrides. Typically populated from a `.env` file.
12
+ */
13
+ exports.LocalNodeEnv = effect_1.Schema.Struct({
14
+ DEPLOYER_ADDRESS: binary_js_1.Address,
15
+ STATE_DUMP: effect_1.Schema.String,
16
+ EXECUTOR_ADDRESS: binary_js_1.Address,
17
+ // Empty if compute-server is remote
18
+ NETWORK_PUBKEY: effect_1.Schema.optional(binary_js_1.HexString),
19
+ SENDER_ADDRESS: binary_js_1.Address,
20
+ SENDER_PRIVATE_KEY: binary_js_1.HexString,
21
+ // Empty if compute-server is remote
22
+ EIP712_SIGNER_ADDRESS: effect_1.Schema.optional(binary_js_1.HexString),
23
+ PEPPER: effect_1.Schema.String,
24
+ // Empty if compute-server is remote
25
+ COVALIDATOR_NETWORK_PRIVATE_KEY: effect_1.Schema.optional(binary_js_1.HexString),
26
+ // Empty if compute-server is remote
27
+ COVALIDATOR_EIP712_PRIVATE_SIGNING_KEY: effect_1.Schema.optional(binary_js_1.HexString),
28
+ COVALIDATOR_INCO_EXECUTOR_ADDR: binary_js_1.Address,
29
+ COVALIDATOR_HOST_CHAIN_ID: effect_1.Schema.optional(effect_1.Schema.String),
30
+ COVALIDATOR_URL: effect_1.Schema.optional(effect_1.Schema.String),
31
+ COVALIDATOR_HOST_CHAIN_RPC_URL: effect_1.Schema.optional(effect_1.Schema.String),
32
+ COVALIDATOR_COMPUTE_TYPE: effect_1.Schema.optional(effect_1.Schema.String),
33
+ COVALIDATOR_STORAGE_KEY: effect_1.Schema.optional(binary_js_1.HexString),
34
+ });
35
+ /**
36
+ * Parses a dotenv-formatted string or `Buffer` into a validated {@link LocalNodeEnv}.
37
+ *
38
+ * Falls back to `process.env` when no argument is provided.
39
+ *
40
+ * @param envFileOrObj - A dotenv-formatted string, `Buffer`, or `undefined` to use `process.env`.
41
+ * @returns A validated `LocalNodeEnv` object.
42
+ * @throws If required environment variables are missing or invalid.
43
+ */
44
+ function parseLocalEnv(envFileOrObj) {
45
+ const envObj = envFileOrObj ? readEnv(envFileOrObj) : process.env;
46
+ return effect_1.Schema.decodeUnknownSync(exports.LocalNodeEnv)(envObj);
47
+ }
48
+ function readEnv(envContent) {
49
+ return parseEnv(envContent.toString());
50
+ }
51
+ // Parse environment variables with support for variable substitutions and comments
52
+ function parseEnv(envContent) {
53
+ let env = {};
54
+ const lines = envContent.split('\n');
55
+ // First pass: collect raw values
56
+ for (const line of lines) {
57
+ const trimmedLine = line.trim();
58
+ if (trimmedLine && !trimmedLine.startsWith('#')) {
59
+ const equalIndex = trimmedLine.indexOf('=');
60
+ if (equalIndex !== -1) {
61
+ const key = trimmedLine.substring(0, equalIndex).trim();
62
+ let value = trimmedLine.substring(equalIndex + 1).trim();
63
+ // Handle quoted values
64
+ if ((value.startsWith('"') && value.endsWith('"')) ||
65
+ (value.startsWith("'") && value.endsWith("'"))) {
66
+ value = value.substring(1, value.length - 1);
67
+ }
68
+ env[key] = value;
69
+ }
70
+ }
71
+ }
72
+ // Second pass: resolve substitutions like $VAR or ${VAR}
73
+ for (const [key, value] of Object.entries(env)) {
74
+ env[key] = value.replace(/\${?(\w+)}?/g, (_, varName) => {
75
+ return env[varName] ?? '';
76
+ });
77
+ }
78
+ return env;
79
+ }
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtbm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9sb2NhbC9sb2NhbC1ub2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTRDQSxzQ0FHQztBQS9DRCxtQ0FBZ0M7QUFDaEMsNENBQWtEO0FBRWxEOzs7OztHQUtHO0FBQ1UsUUFBQSxZQUFZLEdBQUcsZUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN4QyxnQkFBZ0IsRUFBRSxtQkFBTztJQUN6QixVQUFVLEVBQUUsZUFBTSxDQUFDLE1BQU07SUFDekIsZ0JBQWdCLEVBQUUsbUJBQU87SUFDekIsb0NBQW9DO0lBQ3BDLGNBQWMsRUFBRSxlQUFNLENBQUMsUUFBUSxDQUFDLHFCQUFTLENBQUM7SUFDMUMsY0FBYyxFQUFFLG1CQUFPO0lBQ3ZCLGtCQUFrQixFQUFFLHFCQUFTO0lBQzdCLG9DQUFvQztJQUNwQyxxQkFBcUIsRUFBRSxlQUFNLENBQUMsUUFBUSxDQUFDLHFCQUFTLENBQUM7SUFDakQsTUFBTSxFQUFFLGVBQU0sQ0FBQyxNQUFNO0lBQ3JCLG9DQUFvQztJQUNwQywrQkFBK0IsRUFBRSxlQUFNLENBQUMsUUFBUSxDQUFDLHFCQUFTLENBQUM7SUFDM0Qsb0NBQW9DO0lBQ3BDLHNDQUFzQyxFQUFFLGVBQU0sQ0FBQyxRQUFRLENBQUMscUJBQVMsQ0FBQztJQUNsRSw4QkFBOEIsRUFBRSxtQkFBTztJQUN2Qyx5QkFBeUIsRUFBRSxlQUFNLENBQUMsUUFBUSxDQUFDLGVBQU0sQ0FBQyxNQUFNLENBQUM7SUFDekQsZUFBZSxFQUFFLGVBQU0sQ0FBQyxRQUFRLENBQUMsZUFBTSxDQUFDLE1BQU0sQ0FBQztJQUMvQyw4QkFBOEIsRUFBRSxlQUFNLENBQUMsUUFBUSxDQUFDLGVBQU0sQ0FBQyxNQUFNLENBQUM7SUFDOUQsd0JBQXdCLEVBQUUsZUFBTSxDQUFDLFFBQVEsQ0FBQyxlQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3hELHVCQUF1QixFQUFFLGVBQU0sQ0FBQyxRQUFRLENBQUMscUJBQVMsQ0FBQztDQUNwRCxDQUFDLENBQUM7QUFLSDs7Ozs7Ozs7R0FRRztBQUNILFNBQWdCLGFBQWEsQ0FBQyxZQUE4QjtJQUMxRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztJQUNsRSxPQUFPLGVBQU0sQ0FBQyxpQkFBaUIsQ0FBQyxvQkFBWSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUFDLFVBQTJCO0lBQzFDLE9BQU8sUUFBUSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRCxtRkFBbUY7QUFDbkYsU0FBUyxRQUFRLENBQUMsVUFBa0I7SUFDbEMsSUFBSSxHQUFHLEdBQTJCLEVBQUUsQ0FBQztJQUNyQyxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXJDLGlDQUFpQztJQUNqQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3pCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoQyxJQUFJLFdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNoRCxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVDLElBQUksVUFBVSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN4RCxJQUFJLEtBQUssR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFFekQsdUJBQXVCO2dCQUN2QixJQUNFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUM5QyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUM5QyxDQUFDO29CQUNELEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUMvQyxDQUFDO2dCQUVELEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDbkIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQseURBQXlEO0lBQ3pELEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDL0MsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQWUsRUFBRSxFQUFFO1lBQzlELE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMifQ==
@@ -0,0 +1,56 @@
1
+ import { Schema } from 'effect';
2
+ import { Address } from 'viem';
3
+ declare const baseEIP712: Schema.Struct<{
4
+ domain: Schema.Struct<{
5
+ chainId: typeof Schema.BigInt;
6
+ name: typeof Schema.String;
7
+ version: typeof Schema.String;
8
+ verifyingContract: Schema.optional<Schema.TemplateLiteral<`0x${string}`>>;
9
+ }>;
10
+ primaryType: typeof Schema.String;
11
+ types: Schema.Record$<typeof Schema.String, Schema.Array$<Schema.Struct<{
12
+ name: typeof Schema.String;
13
+ type: typeof Schema.String;
14
+ }>>>;
15
+ }>;
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
+ */
25
+ export interface EIP712<Message extends object> extends BaseEIP712 {
26
+ message: Message;
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
+ */
47
+ export declare function createEIP712Payload<PrimaryType extends string, Message extends object>({ chainId, primaryType, primaryTypeFields, message, verifyingContract, domainName, domainVersion, }: {
48
+ chainId: bigint;
49
+ primaryType: PrimaryType;
50
+ primaryTypeFields: BaseEIP712['types'][PrimaryType];
51
+ message: Message;
52
+ verifyingContract?: Address;
53
+ domainName: string;
54
+ domainVersion: string;
55
+ }): EIP712<Message>;
56
+ export {};
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createEIP712Payload = createEIP712Payload;
4
+ const effect_1 = require("effect");
5
+ const binary_js_1 = require("../binary.js");
6
+ // An effect Schema representing a base EIP712 typed message, without any
7
+ // custom message types, as defined in EIP-712.
8
+ const baseEIP712 = effect_1.Schema.Struct({
9
+ domain: effect_1.Schema.Struct({
10
+ chainId: effect_1.Schema.BigInt,
11
+ name: effect_1.Schema.String,
12
+ version: effect_1.Schema.String,
13
+ verifyingContract: effect_1.Schema.optional(binary_js_1.HexString),
14
+ // If salt is needed, it can be added here. Currently, none of the Incolite
15
+ // features need this.
16
+ }),
17
+ primaryType: effect_1.Schema.String,
18
+ types: effect_1.Schema.Record({
19
+ key: effect_1.Schema.String,
20
+ value: effect_1.Schema.Array(effect_1.Schema.Struct({
21
+ name: effect_1.Schema.String,
22
+ type: effect_1.Schema.String,
23
+ })),
24
+ }),
25
+ });
26
+ /**
27
+ * Creates an EIP-712 typed data payload for user signing.
28
+ *
29
+ * Used to verify the user controls the private key corresponding to the ephemeral
30
+ * public key embedded in the payload. The `message` keys must exactly match the
31
+ * `name` values in `primaryTypeFields`.
32
+ *
33
+ * @typeParam PrimaryType - The EIP-712 primary type name.
34
+ * @typeParam Message - The shape of the message to sign.
35
+ * @param params.chainId - The chain ID for the EIP-712 domain.
36
+ * @param params.primaryType - The primary type name (e.g. `"Reencrypt"`).
37
+ * @param params.primaryTypeFields - The field definitions for the primary type.
38
+ * @param params.message - The message object to sign (must match `primaryTypeFields`).
39
+ * @param params.verifyingContract - Optional verifying contract address for the domain.
40
+ * @param params.domainName - Human-readable name for the EIP-712 domain.
41
+ * @param params.domainVersion - Version string for the EIP-712 domain.
42
+ * @returns A complete {@link EIP712} payload ready for signing.
43
+ * @throws If message keys do not match `primaryTypeFields` names.
44
+ */
45
+ function createEIP712Payload({ chainId, primaryType, primaryTypeFields, message, verifyingContract, domainName, domainVersion, }) {
46
+ const types = {
47
+ // This refers to the domain the contract is hosted on.
48
+ EIP712Domain: [
49
+ { name: 'name', type: 'string' },
50
+ { name: 'version', type: 'string' },
51
+ { name: 'chainId', type: 'uint256' },
52
+ ],
53
+ // Refer to primaryType.
54
+ [primaryType]: primaryTypeFields,
55
+ };
56
+ if (verifyingContract) {
57
+ types.EIP712Domain.push({ name: 'verifyingContract', type: 'address' });
58
+ }
59
+ // Check that the message has the same keys as the primaryTypeFields.
60
+ const messageKeys = Object.keys(message);
61
+ const primaryTypeFieldsKeys = primaryTypeFields.map((field) => field.name);
62
+ if (messageKeys.length !== primaryTypeFieldsKeys.length) {
63
+ throw new Error('Message keys do not match primaryTypeFields keys');
64
+ }
65
+ for (const key of messageKeys) {
66
+ if (!primaryTypeFieldsKeys.includes(key)) {
67
+ throw new Error(`Message key ${key} does not match primaryTypeFields key`);
68
+ }
69
+ }
70
+ const msgParams = {
71
+ types,
72
+ // This defines the message you're proposing the user to sign, is dapp-specific, and contains
73
+ // anything you want. There are no required fields. Be as explicit as possible when building out
74
+ // the message schema.
75
+ // This refers to the keys of the following types object.
76
+ primaryType,
77
+ domain: {
78
+ // Give a user-friendly name to the specific contract you're signing for.
79
+ name: domainName,
80
+ // This identifies the latest version.
81
+ version: domainVersion,
82
+ // This defines the network, in this case, Mainnet.
83
+ chainId,
84
+ verifyingContract,
85
+ },
86
+ message,
87
+ };
88
+ return msgParams;
89
+ }
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWlwNzEyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JlZW5jcnlwdGlvbi9laXA3MTIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE0REEsa0RBcUVDO0FBaklELG1DQUFnQztBQUVoQyw0Q0FBeUM7QUFFekMseUVBQXlFO0FBQ3pFLCtDQUErQztBQUMvQyxNQUFNLFVBQVUsR0FBRyxlQUFNLENBQUMsTUFBTSxDQUFDO0lBQy9CLE1BQU0sRUFBRSxlQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3BCLE9BQU8sRUFBRSxlQUFNLENBQUMsTUFBTTtRQUN0QixJQUFJLEVBQUUsZUFBTSxDQUFDLE1BQU07UUFDbkIsT0FBTyxFQUFFLGVBQU0sQ0FBQyxNQUFNO1FBQ3RCLGlCQUFpQixFQUFFLGVBQU0sQ0FBQyxRQUFRLENBQUMscUJBQVMsQ0FBQztRQUM3QywyRUFBMkU7UUFDM0Usc0JBQXNCO0tBQ3ZCLENBQUM7SUFDRixXQUFXLEVBQUUsZUFBTSxDQUFDLE1BQU07SUFDMUIsS0FBSyxFQUFFLGVBQU0sQ0FBQyxNQUFNLENBQUM7UUFDbkIsR0FBRyxFQUFFLGVBQU0sQ0FBQyxNQUFNO1FBQ2xCLEtBQUssRUFBRSxlQUFNLENBQUMsS0FBSyxDQUNqQixlQUFNLENBQUMsTUFBTSxDQUFDO1lBQ1osSUFBSSxFQUFFLGVBQU0sQ0FBQyxNQUFNO1lBQ25CLElBQUksRUFBRSxlQUFNLENBQUMsTUFBTTtTQUNwQixDQUFDLENBQ0g7S0FDRixDQUFDO0NBQ0gsQ0FBQyxDQUFDO0FBZ0JIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxTQUFnQixtQkFBbUIsQ0FHakMsRUFDQSxPQUFPLEVBQ1AsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixPQUFPLEVBQ1AsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDVixhQUFhLEdBU2Q7SUFDQyxNQUFNLEtBQUssR0FBRztRQUNaLHVEQUF1RDtRQUN2RCxZQUFZLEVBQUU7WUFDWixFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUNoQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUNuQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTtTQUNyQztRQUNELHdCQUF3QjtRQUN4QixDQUFDLFdBQVcsQ0FBQyxFQUFFLGlCQUFpQjtLQUNqQyxDQUFDO0lBRUYsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1FBQ3RCLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxxRUFBcUU7SUFDckUsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6QyxNQUFNLHFCQUFxQixHQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNFLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN4RCxNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUNELEtBQUssTUFBTSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sSUFBSSxLQUFLLENBQ2IsZUFBZSxHQUFHLHVDQUF1QyxDQUMxRCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLFNBQVMsR0FBRztRQUNoQixLQUFLO1FBQ0wsNkZBQTZGO1FBQzdGLGdHQUFnRztRQUNoRyxzQkFBc0I7UUFDdEIseURBQXlEO1FBQ3pELFdBQVc7UUFDWCxNQUFNLEVBQUU7WUFDTix5RUFBeUU7WUFDekUsSUFBSSxFQUFFLFVBQVU7WUFDaEIsc0NBQXNDO1lBQ3RDLE9BQU8sRUFBRSxhQUFhO1lBQ3RCLG1EQUFtRDtZQUNuRCxPQUFPO1lBQ1AsaUJBQWlCO1NBQ2xCO1FBQ0QsT0FBTztLQUNSLENBQUM7SUFFRixPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDIn0=
@@ -0,0 +1,2 @@
1
+ export * from './eip712.js';
2
+ export * from './types.js';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./eip712.js"), exports);
18
+ __exportStar(require("./types.js"), exports);
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVlbmNyeXB0aW9uL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4Q0FBNEI7QUFDNUIsNkNBQTJCIn0=
@@ -0,0 +1,48 @@
1
+ import { Address } from 'viem';
2
+ import { HexString } from '../binary.js';
3
+ import { CiphertextOf, EncryptionScheme, PlaintextOf, SupportedTeeType } from '../encryption/encryption.js';
4
+ import { Handle } from '../handle.js';
5
+ import type { XwingKeypair } from '../lite/xwing.js';
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
+ */
13
+ export type Reencryptor<S extends EncryptionScheme> = <T extends SupportedTeeType>(args: ReencryptFnArgs<S, T>, backoffConfig?: Partial<BackoffConfig>) => Promise<PlaintextOf<S, T>>;
14
+ /** Arguments required to construct a {@link Reencryptor}. */
15
+ export interface ReencryptorArgs {
16
+ chainId: bigint;
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
+ */
24
+ export type ReencryptFnArgs<S extends EncryptionScheme, T extends SupportedTeeType> = {
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
+ */
30
+ ciphertext?: CiphertextOf<S, T>;
31
+ };
32
+ /** Union of supported ephemeral keypair types for reencryption (currently X-Wing only). */
33
+ export type SupportedEphemeralKeypairs = XwingKeypair;
34
+ /** An object whose public key can be serialized to a `Uint8Array`. */
35
+ export interface PubKeyEncodable {
36
+ encodePublicKey(): Uint8Array;
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
+ */
43
+ export interface ReencryptEndpointRequest<EKP extends SupportedEphemeralKeypairs> {
44
+ userAddress: Address;
45
+ handle: Handle;
46
+ eip712Signature: HexString;
47
+ ephemeralKeypair: EKP;
48
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVlbmNyeXB0aW9uL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Configuration for exponential backoff retry logic.
3
+ */
4
+ export type BackoffConfig = {
5
+ maxRetries: number;
6
+ baseDelayInMs: number;
7
+ backoffFactor: number;
8
+ errHandler?: (error: Error, attempt: number) => 'stop' | 'continue';
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';
24
+ /**
25
+ * Helper function to implement exponential backoff retry logic.
26
+ * @param fn - The function to retry
27
+ * @param config - Optional backoff configuration
28
+ * @returns Promise that resolves with the result of the function
29
+ */
30
+ export declare function retryWithBackoff<T>(fn: () => Promise<T>, { maxRetries, baseDelayInMs, backoffFactor, errHandler, }?: Partial<BackoffConfig>): Promise<T>;
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isRetryableError = isRetryableError;
4
+ exports.defaultRetryErrorHandler = defaultRetryErrorHandler;
5
+ exports.retryWithBackoff = retryWithBackoff;
6
+ /**
7
+ * Allowlist of transient error patterns that are safe to retry.
8
+ * Each pattern includes a substring to match (case-insensitive) and a description.
9
+ *
10
+ * SECURITY: Only add patterns here for genuinely transient errors.
11
+ * Do NOT add patterns that could mask security-critical errors like:
12
+ * - Authentication failures
13
+ * - Permission denied
14
+ * - Signature validation errors
15
+ * - Invalid input/format errors
16
+ */
17
+ const RETRYABLE_ERROR_PATTERNS = [
18
+ // Explicit retry suggestions from the server
19
+ {
20
+ pattern: 'try again later',
21
+ description: 'Server explicitly suggests retry',
22
+ },
23
+ // Network/connectivity issues
24
+ { pattern: 'timeout', description: 'Request timeout' },
25
+ { pattern: 'etimedout', description: 'Connection timeout' },
26
+ { pattern: 'econnreset', description: 'Connection reset' },
27
+ { pattern: 'econnrefused', description: 'Connection refused' },
28
+ // Service availability
29
+ { pattern: '503', description: 'Service unavailable (503)' },
30
+ { pattern: 'service unavailable', description: 'Service unavailable' },
31
+ // Data propagation delays (eventual consistency)
32
+ {
33
+ pattern: 'ciphertext too short',
34
+ description: 'Ciphertext not yet propagated to covalidator',
35
+ },
36
+ ];
37
+ /**
38
+ * Checks if an error is safe to retry.
39
+ * Only transient errors matching the allowlist should return true.
40
+ * All other errors fail fast to avoid masking security-critical failures.
41
+ *
42
+ * @param error - The error to check
43
+ * @returns true if the error is transient and safe to retry, false otherwise
44
+ */
45
+ function isRetryableError(error) {
46
+ const message = error.message?.toLowerCase() ?? '';
47
+ return RETRYABLE_ERROR_PATTERNS.some(({ pattern }) => message.includes(pattern));
48
+ }
49
+ /**
50
+ * Default error handler that only retries known transient errors.
51
+ * Security-critical errors will fail fast.
52
+ */
53
+ function defaultRetryErrorHandler(error) {
54
+ if (isRetryableError(error)) {
55
+ console.warn(`Retrying after transient error: ${error.message}`);
56
+ return 'continue';
57
+ }
58
+ return 'stop';
59
+ }
60
+ /**
61
+ * Helper function to implement exponential backoff retry logic.
62
+ * @param fn - The function to retry
63
+ * @param config - Optional backoff configuration
64
+ * @returns Promise that resolves with the result of the function
65
+ */
66
+ async function retryWithBackoff(fn, {
67
+ // These default values will make it return an error after ~10s if the fn response is fast.
68
+ maxRetries = 5, baseDelayInMs = 1000, backoffFactor = 1.5, errHandler = defaultRetryErrorHandler, } = {}) {
69
+ let lastError;
70
+ for (let attempt = 0; attempt < maxRetries; attempt++) {
71
+ try {
72
+ return await fn();
73
+ }
74
+ catch (error) {
75
+ lastError = error;
76
+ if (errHandler(lastError, attempt) !== 'continue' ||
77
+ attempt === maxRetries - 1) {
78
+ break;
79
+ }
80
+ const delay = baseDelayInMs * Math.pow(backoffFactor, attempt);
81
+ const jitter = delay * (0.8 + Math.random() * 0.4); // random jitter, 80% to 120% of the delay
82
+ await new Promise((resolve) => setTimeout(resolve, jitter));
83
+ }
84
+ }
85
+ throw lastError;
86
+ }
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmV0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUF3REEsNENBTUM7QUFNRCw0REFNQztBQVFELDRDQThCQztBQXRHRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSx3QkFBd0IsR0FHekI7SUFDSCw2Q0FBNkM7SUFDN0M7UUFDRSxPQUFPLEVBQUUsaUJBQWlCO1FBQzFCLFdBQVcsRUFBRSxrQ0FBa0M7S0FDaEQ7SUFFRCw4QkFBOEI7SUFDOUIsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRTtJQUN0RCxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFO0lBQzNELEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUU7SUFDMUQsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsRUFBRTtJQUU5RCx1QkFBdUI7SUFDdkIsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSwyQkFBMkIsRUFBRTtJQUM1RCxFQUFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUU7SUFFdEUsaURBQWlEO0lBQ2pEO1FBQ0UsT0FBTyxFQUFFLHNCQUFzQjtRQUMvQixXQUFXLEVBQUUsOENBQThDO0tBQzVEO0NBQ0YsQ0FBQztBQUVGOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixnQkFBZ0IsQ0FBQyxLQUFZO0lBQzNDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO0lBRW5ELE9BQU8sd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQ25ELE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQzFCLENBQUM7QUFDSixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0Isd0JBQXdCLENBQUMsS0FBWTtJQUNuRCxJQUFJLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDNUIsT0FBTyxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDakUsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNJLEtBQUssVUFBVSxnQkFBZ0IsQ0FDcEMsRUFBb0IsRUFDcEI7QUFDRSwyRkFBMkY7QUFDM0YsVUFBVSxHQUFHLENBQUMsRUFDZCxhQUFhLEdBQUcsSUFBSSxFQUNwQixhQUFhLEdBQUcsR0FBRyxFQUNuQixVQUFVLEdBQUcsd0JBQXdCLE1BQ1gsRUFBRTtJQUU5QixJQUFJLFNBQTRCLENBQUM7SUFFakMsS0FBSyxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsT0FBTyxHQUFHLFVBQVUsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ3RELElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxFQUFFLEVBQUUsQ0FBQztRQUNwQixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLFNBQVMsR0FBRyxLQUFjLENBQUM7WUFDM0IsSUFDRSxVQUFVLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxLQUFLLFVBQVU7Z0JBQzdDLE9BQU8sS0FBSyxVQUFVLEdBQUcsQ0FBQyxFQUMxQixDQUFDO2dCQUNELE1BQU07WUFDUixDQUFDO1lBQ0QsTUFBTSxLQUFLLEdBQUcsYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQy9ELE1BQU0sTUFBTSxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQywwQ0FBMEM7WUFDOUYsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzlELENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxTQUFTLENBQUM7QUFDbEIsQ0FBQyJ9
@@ -0,0 +1,4 @@
1
+ import { Schema } from 'effect';
2
+ import { ParseOptions } from 'effect/SchemaAST';
3
+ export declare function parse<A, I>(schema: Schema.Schema<A, I>, obj: unknown, options?: ParseOptions): A;
4
+ export declare function parseJson<A, I>(schema: Schema.Schema<A, I>, json: string | Uint8Array, options?: ParseOptions): A;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parse = parse;
4
+ exports.parseJson = parseJson;
5
+ const effect_1 = require("effect");
6
+ // parse takes an effect Schema object and parses an unknown value into that schema, if parsing fails an error is thrown
7
+ // only fields specified in the schema will be present in the parsed object.
8
+ function parse(schema, obj, options) {
9
+ return effect_1.Schema.decodeUnknownSync(schema)(obj, options);
10
+ }
11
+ // parseJson takes an effect Schema object and parses a JSON string into that schema, if parsing fails an error is thrown
12
+ // only fields specified in the schema will be present in the parsed object.
13
+ function parseJson(schema, json, options) {
14
+ if (typeof json !== 'string') {
15
+ json = json.toString();
16
+ }
17
+ return effect_1.Schema.decodeUnknownSync(effect_1.Schema.parseJson(schema))(json, options);
18
+ }
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUtBLHNCQU1DO0FBSUQsOEJBU0M7QUF4QkQsbUNBQWdDO0FBR2hDLHdIQUF3SDtBQUN4SCw0RUFBNEU7QUFDNUUsU0FBZ0IsS0FBSyxDQUNuQixNQUEyQixFQUMzQixHQUFZLEVBQ1osT0FBc0I7SUFFdEIsT0FBTyxlQUFNLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFFRCx5SEFBeUg7QUFDekgsNEVBQTRFO0FBQzVFLFNBQWdCLFNBQVMsQ0FDdkIsTUFBMkIsRUFDM0IsSUFBeUIsRUFDekIsT0FBc0I7SUFFdEIsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM3QixJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFDRCxPQUFPLGVBQU0sQ0FBQyxpQkFBaUIsQ0FBQyxlQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzNFLENBQUMifQ==
@@ -0,0 +1,20 @@
1
+ import { Account, Chain, PublicClient, Transport, WalletClient } from 'viem';
2
+ import { vi } from 'vitest';
3
+ import { KmsClient } from '../kms/client.js';
4
+ import { KmsQuorumClient } from '../kms/quorumClient.js';
5
+ interface MinimalKmsClient {
6
+ attestedCompute: ReturnType<typeof vi.fn>;
7
+ attestedDecrypt: ReturnType<typeof vi.fn>;
8
+ attestedReveal: ReturnType<typeof vi.fn>;
9
+ eListAttestedDecrypt: ReturnType<typeof vi.fn>;
10
+ eListAttestedReveal: ReturnType<typeof vi.fn>;
11
+ key: ReturnType<typeof vi.fn>;
12
+ reencrypt: ReturnType<typeof vi.fn>;
13
+ }
14
+ export declare function createMockKmsClient(): MinimalKmsClient & KmsClient;
15
+ export declare function createMockQuorumClient(): KmsQuorumClient;
16
+ export declare function setupMockInQuorumClient(quorumClient: KmsQuorumClient, mockKmsClient: MinimalKmsClient & KmsClient): void;
17
+ export declare function createMockPublicClient(): PublicClient<Transport, Chain>;
18
+ export declare function createTestWalletClient(): WalletClient<Transport, Chain, Account>;
19
+ export declare function createFallbackWalletClient(): WalletClient<Transport, Chain, Account>;
20
+ export {};
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createMockKmsClient = createMockKmsClient;
4
+ exports.createMockQuorumClient = createMockQuorumClient;
5
+ exports.setupMockInQuorumClient = setupMockInQuorumClient;
6
+ exports.createMockPublicClient = createMockPublicClient;
7
+ exports.createTestWalletClient = createTestWalletClient;
8
+ exports.createFallbackWalletClient = createFallbackWalletClient;
9
+ const viem_1 = require("viem");
10
+ const accounts_1 = require("viem/accounts");
11
+ const chains_1 = require("viem/chains");
12
+ const vitest_1 = require("vitest");
13
+ const client_js_1 = require("../kms/client.js");
14
+ const quorumClient_js_1 = require("../kms/quorumClient.js");
15
+ // Create a mock that satisfies our minimal interface
16
+ function createMockKmsClient() {
17
+ return {
18
+ attestedCompute: vitest_1.vi.fn(),
19
+ attestedDecrypt: vitest_1.vi.fn(),
20
+ attestedReveal: vitest_1.vi.fn(),
21
+ eListAttestedDecrypt: vitest_1.vi.fn(),
22
+ eListAttestedReveal: vitest_1.vi.fn(),
23
+ key: vitest_1.vi.fn(),
24
+ reencrypt: vitest_1.vi.fn(),
25
+ };
26
+ }
27
+ // Create a mock KmsQuorumClient from a mock KmsClient for testing
28
+ function createMockQuorumClient() {
29
+ // Use the private constructor via type casting (similar to quorumClient.test.ts)
30
+ const AnyClass = quorumClient_js_1.KmsQuorumClient;
31
+ return new AnyClass([{ url: 'https://mock-kms', signer: client_js_1.TEST_DEFAULT_COVALIDATOR_SIGNER }], 1);
32
+ }
33
+ // Helper to set up the mock client inside the quorum client
34
+ function setupMockInQuorumClient(quorumClient, mockKmsClient) {
35
+ // Access private kmss array and replace the client
36
+ const anyQuorumClient = quorumClient;
37
+ if (anyQuorumClient.kmss && anyQuorumClient.kmss.length > 0) {
38
+ anyQuorumClient.kmss[0].client = mockKmsClient;
39
+ }
40
+ }
41
+ // Create a public client for testing (transport URL is never actually called;
42
+ // publicClient is required by attestedDecrypt/attestedCompute but KMS is mocked in tests)
43
+ function createMockPublicClient() {
44
+ return (0, viem_1.createPublicClient)({
45
+ chain: chains_1.sepolia,
46
+ transport: (0, viem_1.http)('http://localhost:8567'),
47
+ });
48
+ }
49
+ // Create a wallet client for testing (transport URL is never actually called;
50
+ // signing with a local key account does not require an RPC connection)
51
+ function createTestWalletClient() {
52
+ const account = (0, accounts_1.privateKeyToAccount)((0, accounts_1.generatePrivateKey)());
53
+ return (0, viem_1.createWalletClient)({
54
+ chain: chains_1.sepolia, // Arbitrary chain, not relevant to test
55
+ transport: (0, viem_1.http)('http://localhost:8567'),
56
+ account,
57
+ });
58
+ }
59
+ // Create a wallet client with a fallback() transport for testing that code
60
+ // handles non-http transports correctly (fallback has no .url property)
61
+ function createFallbackWalletClient() {
62
+ const account = (0, accounts_1.privateKeyToAccount)((0, accounts_1.generatePrivateKey)());
63
+ return (0, viem_1.createWalletClient)({
64
+ chain: chains_1.sepolia,
65
+ transport: (0, viem_1.fallback)([
66
+ (0, viem_1.http)('http://localhost:8567'),
67
+ (0, viem_1.http)('http://localhost:8568'),
68
+ ]),
69
+ account,
70
+ });
71
+ }
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdC9tb2Nrcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQThCQSxrREFVQztBQUdELHdEQU9DO0FBR0QsMERBU0M7QUFJRCx3REFLQztBQUlELHdEQVdDO0FBSUQsZ0VBY0M7QUF4R0QsK0JBVWM7QUFDZCw0Q0FBd0U7QUFDeEUsd0NBQXNDO0FBQ3RDLG1DQUE0QjtBQUM1QixnREFBOEU7QUFDOUUsNERBQXlEO0FBY3pELHFEQUFxRDtBQUNyRCxTQUFnQixtQkFBbUI7SUFDakMsT0FBTztRQUNMLGVBQWUsRUFBRSxXQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3hCLGVBQWUsRUFBRSxXQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3hCLGNBQWMsRUFBRSxXQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3ZCLG9CQUFvQixFQUFFLFdBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDN0IsbUJBQW1CLEVBQUUsV0FBRSxDQUFDLEVBQUUsRUFBRTtRQUM1QixHQUFHLEVBQUUsV0FBRSxDQUFDLEVBQUUsRUFBRTtRQUNaLFNBQVMsRUFBRSxXQUFFLENBQUMsRUFBRSxFQUFFO0tBQ2EsQ0FBQztBQUNwQyxDQUFDO0FBRUQsa0VBQWtFO0FBQ2xFLFNBQWdCLHNCQUFzQjtJQUNwQyxpRkFBaUY7SUFDakYsTUFBTSxRQUFRLEdBQVEsaUNBQWUsQ0FBQztJQUN0QyxPQUFPLElBQUksUUFBUSxDQUNqQixDQUFDLEVBQUUsR0FBRyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSwyQ0FBK0IsRUFBRSxDQUFDLEVBQ3RFLENBQUMsQ0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELDREQUE0RDtBQUM1RCxTQUFnQix1QkFBdUIsQ0FDckMsWUFBNkIsRUFDN0IsYUFBMkM7SUFFM0MsbURBQW1EO0lBQ25ELE1BQU0sZUFBZSxHQUFHLFlBQW1CLENBQUM7SUFDNUMsSUFBSSxlQUFlLENBQUMsSUFBSSxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzVELGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQztJQUNqRCxDQUFDO0FBQ0gsQ0FBQztBQUVELDhFQUE4RTtBQUM5RSwwRkFBMEY7QUFDMUYsU0FBZ0Isc0JBQXNCO0lBQ3BDLE9BQU8sSUFBQSx5QkFBa0IsRUFBQztRQUN4QixLQUFLLEVBQUUsZ0JBQU87UUFDZCxTQUFTLEVBQUUsSUFBQSxXQUFJLEVBQUMsdUJBQXVCLENBQUM7S0FDekMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELDhFQUE4RTtBQUM5RSx1RUFBdUU7QUFDdkUsU0FBZ0Isc0JBQXNCO0lBS3BDLE1BQU0sT0FBTyxHQUFHLElBQUEsOEJBQW1CLEVBQUMsSUFBQSw2QkFBa0IsR0FBRSxDQUFDLENBQUM7SUFDMUQsT0FBTyxJQUFBLHlCQUFrQixFQUFDO1FBQ3hCLEtBQUssRUFBRSxnQkFBTyxFQUFFLHdDQUF3QztRQUN4RCxTQUFTLEVBQUUsSUFBQSxXQUFJLEVBQUMsdUJBQXVCLENBQUM7UUFDeEMsT0FBTztLQUNSLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCwyRUFBMkU7QUFDM0Usd0VBQXdFO0FBQ3hFLFNBQWdCLDBCQUEwQjtJQUt4QyxNQUFNLE9BQU8sR0FBRyxJQUFBLDhCQUFtQixFQUFDLElBQUEsNkJBQWtCLEdBQUUsQ0FBQyxDQUFDO0lBQzFELE9BQU8sSUFBQSx5QkFBa0IsRUFBQztRQUN4QixLQUFLLEVBQUUsZ0JBQU87UUFDZCxTQUFTLEVBQUUsSUFBQSxlQUFRLEVBQUM7WUFDbEIsSUFBQSxXQUFJLEVBQUMsdUJBQXVCLENBQUM7WUFDN0IsSUFBQSxXQUFJLEVBQUMsdUJBQXVCLENBQUM7U0FDOUIsQ0FBQztRQUNGLE9BQU87S0FDUixDQUFDLENBQUM7QUFDTCxDQUFDIn0=