@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,95 @@
1
+ import { type Account, type Address, type Chain, type Hex, PublicClient, type Transport, type WalletClient } from 'viem';
2
+ import type { PrivateKeyAccount } from 'viem/accounts';
3
+ import { DecryptionAttestation, EncryptedDecryptionAttestation } from '../attesteddecrypt/index.js';
4
+ import { SupportedChainId } from '../chain.js';
5
+ import { EncryptionScheme, SupportedTeeType } from '../encryption/encryption.js';
6
+ import { HexString } from '../index.js';
7
+ import { type XwingKeypair } from '../lite/xwing.js';
8
+ import { BackoffConfig } from '../retry.js';
9
+ import type { AllowanceVoucher, AllowanceVoucherWithSig } from './types.js';
10
+ import { AttestedComputeOP } from '../attestedcompute/types.js';
11
+ import { KmsQuorumClient } from '../kms/quorumClient.js';
12
+ export declare const SESSION_KEY_WARNING = "Inco Warning: signing this message may leak your private data, including from unrelated apps. Sign only if you fully trust this app.";
13
+ export interface Session {
14
+ decrypter: Address;
15
+ expiresAt: bigint;
16
+ }
17
+ export declare function createAllowanceVoucher(incoLiteAddress: Address, sharerWalletClient: WalletClient<Transport, Chain, Account>, verifyingContract: Address, callFunction: Hex, sharerArgData: Hex): Promise<AllowanceVoucher>;
18
+ export interface GrantSessionKeyArgs {
19
+ chainId: bigint;
20
+ incoLiteAddress: Address;
21
+ sessionVerifierContractAddress: Address;
22
+ granteeAddress: Address;
23
+ sharerWalletClient: WalletClient<Transport, Chain, Account>;
24
+ expiresAt: Date;
25
+ }
26
+ export interface GrantSessionKeyCustomVerifierArgs {
27
+ chainId: bigint;
28
+ incoLiteAddress: Address;
29
+ sessionVerifierContractAddress: Address;
30
+ sharerWalletClient: WalletClient<Transport, Chain, Account>;
31
+ sharerArgData: Hex;
32
+ }
33
+ export declare function grantSessionKey({ chainId, incoLiteAddress, sessionVerifierContractAddress, granteeAddress, sharerWalletClient, expiresAt, }: GrantSessionKeyArgs): Promise<AllowanceVoucherWithSig>;
34
+ export declare function grantSessionKeyCustomVerifier({ chainId, incoLiteAddress, sessionVerifierContractAddress, sharerWalletClient, sharerArgData, }: GrantSessionKeyCustomVerifierArgs): Promise<AllowanceVoucherWithSig>;
35
+ export declare function updateActiveVouchersSessionNonce(incoLiteAddress: Address, sharerWalletClient: WalletClient<Transport, Chain, Account>): Promise<`0x${string}`>;
36
+ export interface SessionKeyAttestedComputeArgs {
37
+ chainId: SupportedChainId;
38
+ ephemeralAccount: PrivateKeyAccount;
39
+ kmsQuorumClient: KmsQuorumClient;
40
+ allowanceVoucherWithSig: AllowanceVoucherWithSig;
41
+ lhsHandle: HexString;
42
+ op: AttestedComputeOP;
43
+ rhsPlaintext: bigint | boolean;
44
+ requesterArgData?: Hex | undefined;
45
+ backoffConfig?: Partial<BackoffConfig> | undefined;
46
+ ethClient: PublicClient<Transport, Chain>;
47
+ executorAddress: HexString;
48
+ reencryptPubKey?: Uint8Array | undefined;
49
+ reencryptKeypair?: XwingKeypair | undefined;
50
+ }
51
+ export declare function sessionKeyAttestedCompute<T extends SupportedTeeType>({ lhsHandle, op, rhsPlaintext, backoffConfig, chainId, kmsQuorumClient, ephemeralAccount, allowanceVoucherWithSig, requesterArgData, ethClient, executorAddress, reencryptPubKey, reencryptKeypair, }: SessionKeyAttestedComputeArgs): Promise<DecryptionAttestation<EncryptionScheme, SupportedTeeType> | EncryptedDecryptionAttestation<EncryptionScheme, SupportedTeeType>>;
52
+ export interface SessionKeyAttestedDecryptArgs {
53
+ chainId: SupportedChainId;
54
+ ephemeralAccount: PrivateKeyAccount;
55
+ kmsQuorumClient: KmsQuorumClient;
56
+ allowanceVoucherWithSig: AllowanceVoucherWithSig;
57
+ handles: HexString[];
58
+ requesterArgData?: Hex | undefined;
59
+ backoffConfig?: Partial<BackoffConfig> | undefined;
60
+ reencryptPubKey?: Uint8Array | undefined;
61
+ reencryptKeypair?: XwingKeypair | undefined;
62
+ ethClient: PublicClient<Transport, Chain>;
63
+ executorAddress: HexString;
64
+ }
65
+ /**
66
+ * Performs attested decrypts using a voucher-backed session key.
67
+ *
68
+ * @example Plaintext results
69
+ * ```ts
70
+ * const attestations = await sessionKeyAttestedDecrypt({
71
+ * chainId,
72
+ * kmsConnectRpcEndpointOrClient: covalidatorUrl,
73
+ * allowanceVoucherWithSig: voucher,
74
+ * ephemeralAccount,
75
+ * handles,
76
+ * });
77
+ * console.log(attestations[0].plaintext.value);
78
+ * ```
79
+ *
80
+ * @example Encrypted results
81
+ * ```ts
82
+ * const encryptedResults = await sessionKeyAttestedDecrypt({
83
+ * chainId,
84
+ * kmsConnectRpcEndpointOrClient: covalidatorUrl,
85
+ * allowanceVoucherWithSig: voucher,
86
+ * ephemeralAccount,
87
+ * handles,
88
+ * reencryptPubKey: recipientPubKey,
89
+ * });
90
+ * console.log(
91
+ * encryptedResults[0].encryptedPlaintext.ciphertext.value,
92
+ * );
93
+ * ```
94
+ */
95
+ export declare function sessionKeyAttestedDecrypt({ chainId, kmsQuorumClient, handles, ephemeralAccount, allowanceVoucherWithSig, requesterArgData, backoffConfig, reencryptPubKey, reencryptKeypair, ethClient, executorAddress, }: SessionKeyAttestedDecryptArgs): Promise<Array<DecryptionAttestation<EncryptionScheme, SupportedTeeType> | EncryptedDecryptionAttestation<EncryptionScheme, SupportedTeeType>>>;
@@ -0,0 +1,376 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SESSION_KEY_WARNING = void 0;
4
+ exports.createAllowanceVoucher = createAllowanceVoucher;
5
+ exports.grantSessionKey = grantSessionKey;
6
+ exports.grantSessionKeyCustomVerifier = grantSessionKeyCustomVerifier;
7
+ exports.updateActiveVouchersSessionNonce = updateActiveVouchersSessionNonce;
8
+ exports.sessionKeyAttestedCompute = sessionKeyAttestedCompute;
9
+ exports.sessionKeyAttestedDecrypt = sessionKeyAttestedDecrypt;
10
+ const protobuf_1 = require("@bufbuild/protobuf");
11
+ const viem_1 = require("viem");
12
+ const lightning_js_1 = require("../generated/abis/lightning.js");
13
+ const verifier_js_1 = require("../generated/abis/verifier.js");
14
+ const index_js_1 = require("../index.js");
15
+ const index_js_2 = require("../lite/index.js");
16
+ const xwing_js_1 = require("../lite/xwing.js");
17
+ const index_js_3 = require("../reencryption/index.js");
18
+ const types_js_1 = require("../attestedcompute/types.js");
19
+ const attested_decrypt_js_1 = require("../attesteddecrypt/attested-decrypt.js");
20
+ const types_js_2 = require("../attesteddecrypt/types.js");
21
+ const eip712_js_1 = require("../eip712/eip712.js");
22
+ const kms_service_pb_js_1 = require("../generated/es/inco/kms/lite/v1/kms_service_pb.js");
23
+ const types_pb_js_1 = require("../generated/es/inco/kms/lite/v1/types_pb.js");
24
+ // SessionKey is a special case of the SessionVerifier allowance, where the
25
+ // requester is an ephemeral keypair generated by the user, to use the same
26
+ // keypair for multiple reencryptions, expired after a certain time.
27
+ // Default warning message included in session vouchers. Displayed by wallets
28
+ // at signing time so users understand what they are granting access to.
29
+ exports.SESSION_KEY_WARNING = 'Inco Warning: signing this message may leak your private data, including from unrelated apps. Sign only if you fully trust this app.';
30
+ // Given a sharer's wallet client, an incoLite contract address, and a
31
+ // (verifyingContract, callFunction, sharerArgData) tuple, this function
32
+ // creates an AllowanceVoucher. The warning is always SESSION_KEY_WARNING.
33
+ async function createAllowanceVoucher(incoLiteAddress, sharerWalletClient, verifyingContract, callFunction, sharerArgData) {
34
+ const verifier = await getIncoVerifier(incoLiteAddress, sharerWalletClient);
35
+ // The session nonce in the AllowanceVoucher must match the current active
36
+ // session nonce of the sharer on-chain.
37
+ const sessionNonce = await verifier.read.getActiveVouchersSessionNonce([
38
+ sharerWalletClient.account.address,
39
+ ]);
40
+ return {
41
+ sessionNonce,
42
+ verifyingContract,
43
+ callFunction,
44
+ sharerArgData,
45
+ warning: exports.SESSION_KEY_WARNING,
46
+ };
47
+ }
48
+ // Let the sharer grant a session key to the requester.
49
+ // The session grants temporary access to ALL of the sharer's encrypted handles.
50
+ async function grantSessionKey({ chainId, incoLiteAddress, sessionVerifierContractAddress, granteeAddress, sharerWalletClient, expiresAt, }) {
51
+ // Validate that expiresAt is a valid Date object
52
+ if (!(expiresAt instanceof Date) || isNaN(expiresAt.getTime())) {
53
+ throw new Error('expiresAt must be a valid Date object');
54
+ }
55
+ const nowMs = Date.now();
56
+ const expiresAtMs = expiresAt.getTime();
57
+ // Validate that expiresAt is in the future
58
+ if (expiresAtMs < nowMs) {
59
+ throw new Error('expiresAt must be in the future');
60
+ }
61
+ const sharerArgData = (0, viem_1.encodeAbiParameters)(getSessionAbi(), [
62
+ granteeAddress,
63
+ BigInt(Math.floor(expiresAtMs / 1000)),
64
+ ]);
65
+ const incoVerifier = await getIncoVerifier(incoLiteAddress, sharerWalletClient);
66
+ // returned by read.eip712Domain():
67
+ // bytes1 fields,
68
+ // string memory name,
69
+ // string memory version,
70
+ // uint256 chainId,
71
+ // address verifyingContract,
72
+ // bytes32 salt,
73
+ // uint256[] memory extensions
74
+ const verifierDomain = await incoVerifier.read.eip712Domain();
75
+ const eip712DomainName = verifierDomain[1];
76
+ const eip712DomainVersion = verifierDomain[2];
77
+ const voucher = await createAllowanceVoucher(incoLiteAddress, sharerWalletClient,
78
+ // Careful that the verifying contract here is the SessionVerifier contract,
79
+ // not the incoLite contract.
80
+ sessionVerifierContractAddress, (0, viem_1.toFunctionSelector)(getCanUseSessionAbi()), sharerArgData);
81
+ const eip712Payload = (0, index_js_3.createEIP712Payload)({
82
+ chainId,
83
+ primaryType: 'AllowanceVoucher',
84
+ primaryTypeFields: getAllowanceVoucherAbi(),
85
+ message: voucher,
86
+ // Related to comment above: careful that the verifying contract here is
87
+ // the incoVerifier contract (not the SessionVerifier contract).
88
+ verifyingContract: incoVerifier.address,
89
+ domainName: eip712DomainName,
90
+ domainVersion: eip712DomainVersion,
91
+ });
92
+ // Using browser extensions, this step will prompt the user to sign the
93
+ // payload.
94
+ const voucherSignature = await sharerWalletClient.signTypedData(eip712Payload);
95
+ return {
96
+ sharer: sharerWalletClient.account.address,
97
+ voucher,
98
+ voucherSignature,
99
+ };
100
+ }
101
+ async function grantSessionKeyCustomVerifier({ chainId, incoLiteAddress, sessionVerifierContractAddress, sharerWalletClient, sharerArgData, }) {
102
+ const incoVerifier = await getIncoVerifier(incoLiteAddress, sharerWalletClient);
103
+ // returned by read.eip712Domain():
104
+ // bytes1 fields,
105
+ // string memory name,
106
+ // string memory version,
107
+ // uint256 chainId,
108
+ // address verifyingContract,
109
+ // bytes32 salt,
110
+ // uint256[] memory extensions
111
+ const verifierDomain = await incoVerifier.read.eip712Domain();
112
+ const eip712DomainName = verifierDomain[1];
113
+ const eip712DomainVersion = verifierDomain[2];
114
+ const voucher = await createAllowanceVoucher(incoLiteAddress, sharerWalletClient,
115
+ // Careful that the verifying contract here is the SessionVerifier contract,
116
+ // not the incoLite contract.
117
+ sessionVerifierContractAddress, (0, viem_1.toFunctionSelector)(getCanUseSessionAbi()), sharerArgData);
118
+ const eip712Payload = (0, index_js_3.createEIP712Payload)({
119
+ chainId,
120
+ primaryType: 'AllowanceVoucher',
121
+ primaryTypeFields: getAllowanceVoucherAbi(),
122
+ message: voucher,
123
+ // Related to comment above: careful that the verifying contract here is
124
+ // the incoVerifier contract (not the SessionVerifier contract).
125
+ verifyingContract: incoVerifier.address,
126
+ domainName: eip712DomainName,
127
+ domainVersion: eip712DomainVersion,
128
+ });
129
+ // Using browser extensions, this step will prompt the user to sign the
130
+ // payload.
131
+ const voucherSignature = await sharerWalletClient.signTypedData(eip712Payload);
132
+ return {
133
+ sharer: sharerWalletClient.account.address,
134
+ voucher,
135
+ voucherSignature,
136
+ };
137
+ }
138
+ async function updateActiveVouchersSessionNonce(incoLiteAddress, sharerWalletClient) {
139
+ const verifier = await getIncoVerifier(incoLiteAddress, sharerWalletClient);
140
+ const salt = (0, viem_1.bytesToHex)(crypto.getRandomValues(new Uint8Array(32)));
141
+ const txHash = await verifier.write.updateActiveVouchersSessionNonce([salt]);
142
+ return txHash;
143
+ }
144
+ // The sessionKeyAttestedCompute function is a decryptor that uses a session key
145
+ // to compute on a handle.
146
+ async function sessionKeyAttestedCompute({ lhsHandle, op, rhsPlaintext, backoffConfig, chainId, kmsQuorumClient, ephemeralAccount, allowanceVoucherWithSig, requesterArgData, ethClient, executorAddress, reencryptPubKey, reencryptKeypair, }) {
147
+ const requesterAccount = ephemeralAccount;
148
+ const rhsPlaintextBig = BigInt(rhsPlaintext);
149
+ if (reencryptPubKey &&
150
+ reencryptKeypair &&
151
+ !(0, xwing_js_1.reencryptPublicKeysMatch)(reencryptPubKey, reencryptKeypair)) {
152
+ throw new types_js_1.AttestedComputeError('reencryptPubKey does not match reencryptKeypair public key');
153
+ }
154
+ const eip712DomainVersion = await (0, eip712_js_1.fetchEip712DomainVersion)(executorAddress, ethClient);
155
+ // Sign the EIP712 attesting that the requester has access to the private key
156
+ // corresponding to the ephemeral public key.
157
+ const eip712Payload = (0, index_js_3.createEIP712Payload)({
158
+ chainId: BigInt(chainId),
159
+ primaryType: 'AttestedComputeRequest',
160
+ primaryTypeFields: [
161
+ { name: 'op', type: 'uint8' },
162
+ { name: 'lhsHandle', type: 'bytes32' },
163
+ { name: 'rhsPlaintext', type: 'bytes32' },
164
+ { name: 'publicKey', type: 'bytes' },
165
+ ],
166
+ message: {
167
+ op: op,
168
+ lhsHandle: lhsHandle,
169
+ rhsPlaintext: (0, index_js_1.bigintToBytes32)(rhsPlaintextBig),
170
+ publicKey: (0, viem_1.bytesToHex)(reencryptPubKey ? reencryptPubKey : new Uint8Array()),
171
+ },
172
+ domainName: index_js_2.ATTESTED_COMPUTE_DOMAIN_NAME,
173
+ domainVersion: eip712DomainVersion,
174
+ });
175
+ // Since the account is an ephemeral keypair stored in memory (not in Metamask),
176
+ // this step will NOT prompt the user with a pop-up.
177
+ const eip712Signature = await requesterAccount.signTypedData(eip712Payload);
178
+ const attestedComputeRequest = (0, protobuf_1.create)(kms_service_pb_js_1.AttestedComputeRequestSchema, {
179
+ userAddress: requesterAccount.address,
180
+ reencryptPubKey: reencryptPubKey ? reencryptPubKey : new Uint8Array(),
181
+ op: op,
182
+ lhsHandle: lhsHandle,
183
+ rhsPlaintext: rhsPlaintextBig.toString(16),
184
+ eip712Signature: (0, viem_1.hexToBytes)(eip712Signature),
185
+ aclProof: {
186
+ proof: {
187
+ case: 'incoLiteAdvancedAclProof',
188
+ value: (0, protobuf_1.create)(types_pb_js_1.IncoLiteAdvancedACLProofSchema, {
189
+ allowanceProof: (0, protobuf_1.create)(types_pb_js_1.AllowanceProofSchema, {
190
+ sharer: allowanceVoucherWithSig.sharer,
191
+ voucher: (0, protobuf_1.create)(types_pb_js_1.AllowanceVoucherSchema, {
192
+ sessionNonce: (0, viem_1.hexToBytes)(allowanceVoucherWithSig.voucher.sessionNonce),
193
+ verifyingContract: allowanceVoucherWithSig.voucher.verifyingContract,
194
+ callFunction: (0, viem_1.hexToBytes)(allowanceVoucherWithSig.voucher.callFunction),
195
+ sharerArgData: (0, viem_1.hexToBytes)(allowanceVoucherWithSig.voucher.sharerArgData),
196
+ warning: allowanceVoucherWithSig.voucher.warning,
197
+ }),
198
+ voucherSignature: (0, viem_1.hexToBytes)(allowanceVoucherWithSig.voucherSignature),
199
+ // For DefaultSessionVerifier, the requesterArgData is empty.
200
+ requesterArgData: requesterArgData
201
+ ? (0, viem_1.hexToBytes)(requesterArgData)
202
+ : new Uint8Array(),
203
+ }),
204
+ }),
205
+ },
206
+ },
207
+ });
208
+ let response = await kmsQuorumClient.attestedCompute(attestedComputeRequest, executorAddress, ethClient, backoffConfig, reencryptKeypair);
209
+ // If reencryptPubKey is provided with a keypair, decrypt the encrypted attestation
210
+ if (reencryptPubKey && reencryptKeypair) {
211
+ const [decryptedAttestation] = await (0, attested_decrypt_js_1.decryptEncryptedAttestations)([response], reencryptKeypair);
212
+ return decryptedAttestation;
213
+ }
214
+ return response;
215
+ }
216
+ /**
217
+ * Performs attested decrypts using a voucher-backed session key.
218
+ *
219
+ * @example Plaintext results
220
+ * ```ts
221
+ * const attestations = await sessionKeyAttestedDecrypt({
222
+ * chainId,
223
+ * kmsConnectRpcEndpointOrClient: covalidatorUrl,
224
+ * allowanceVoucherWithSig: voucher,
225
+ * ephemeralAccount,
226
+ * handles,
227
+ * });
228
+ * console.log(attestations[0].plaintext.value);
229
+ * ```
230
+ *
231
+ * @example Encrypted results
232
+ * ```ts
233
+ * const encryptedResults = await sessionKeyAttestedDecrypt({
234
+ * chainId,
235
+ * kmsConnectRpcEndpointOrClient: covalidatorUrl,
236
+ * allowanceVoucherWithSig: voucher,
237
+ * ephemeralAccount,
238
+ * handles,
239
+ * reencryptPubKey: recipientPubKey,
240
+ * });
241
+ * console.log(
242
+ * encryptedResults[0].encryptedPlaintext.ciphertext.value,
243
+ * );
244
+ * ```
245
+ */
246
+ async function sessionKeyAttestedDecrypt({ chainId, kmsQuorumClient, handles, ephemeralAccount, allowanceVoucherWithSig, requesterArgData, backoffConfig, reencryptPubKey, reencryptKeypair, ethClient, executorAddress, }) {
247
+ const requesterAccount = ephemeralAccount;
248
+ if (reencryptPubKey &&
249
+ reencryptKeypair &&
250
+ !(0, xwing_js_1.reencryptPublicKeysMatch)(reencryptPubKey, reencryptKeypair)) {
251
+ throw new types_js_2.AttestedDecryptError('reencryptPubKey does not match reencryptKeypair public key');
252
+ }
253
+ const eip712DomainVersion = await (0, eip712_js_1.fetchEip712DomainVersion)(executorAddress, ethClient);
254
+ // Sign the EIP712 attesting that the requester has access to the private key
255
+ // corresponding to the ephemeral public key.
256
+ const eip712Payload = (0, index_js_3.createEIP712Payload)({
257
+ chainId: BigInt(chainId),
258
+ primaryType: 'AttestedDecryptRequest',
259
+ primaryTypeFields: [
260
+ { name: 'handles', type: 'bytes32[]' },
261
+ { name: 'publicKey', type: 'bytes' },
262
+ ],
263
+ message: {
264
+ handles: handles,
265
+ publicKey: (0, viem_1.bytesToHex)(reencryptPubKey ? reencryptPubKey : Uint8Array.from([])),
266
+ },
267
+ domainName: index_js_2.ATTESTED_DECRYPT_DOMAIN_NAME,
268
+ domainVersion: eip712DomainVersion,
269
+ });
270
+ // Since the account is an ephemeral keypair stored in memory (not in Metamask),
271
+ // this step will NOT prompt the user with a pop-up.
272
+ const eip712Signature = await requesterAccount.signTypedData(eip712Payload);
273
+ const handlesWithProofs = handles.map((handle) => {
274
+ return (0, protobuf_1.create)(types_pb_js_1.HandleWithProofSchema, {
275
+ handle: handle,
276
+ aclProof: {
277
+ proof: {
278
+ case: 'incoLiteAdvancedAclProof',
279
+ value: (0, protobuf_1.create)(types_pb_js_1.IncoLiteAdvancedACLProofSchema, {
280
+ allowanceProof: (0, protobuf_1.create)(types_pb_js_1.AllowanceProofSchema, {
281
+ sharer: allowanceVoucherWithSig.sharer,
282
+ voucher: (0, protobuf_1.create)(types_pb_js_1.AllowanceVoucherSchema, {
283
+ sessionNonce: (0, viem_1.hexToBytes)(allowanceVoucherWithSig.voucher.sessionNonce),
284
+ verifyingContract: allowanceVoucherWithSig.voucher.verifyingContract,
285
+ callFunction: (0, viem_1.hexToBytes)(allowanceVoucherWithSig.voucher.callFunction),
286
+ sharerArgData: (0, viem_1.hexToBytes)(allowanceVoucherWithSig.voucher.sharerArgData),
287
+ warning: allowanceVoucherWithSig.voucher.warning,
288
+ }),
289
+ voucherSignature: (0, viem_1.hexToBytes)(allowanceVoucherWithSig.voucherSignature),
290
+ // For DefaultSessionVerifier, the requesterArgData is empty.
291
+ requesterArgData: requesterArgData
292
+ ? (0, viem_1.hexToBytes)(requesterArgData)
293
+ : new Uint8Array(),
294
+ }),
295
+ }),
296
+ },
297
+ },
298
+ });
299
+ });
300
+ const attestedDecryptRequest = (0, protobuf_1.create)(kms_service_pb_js_1.AttestedDecryptRequestSchema, {
301
+ userAddress: requesterAccount.address,
302
+ handlesWithProofs: handlesWithProofs,
303
+ eip712Signature: (0, viem_1.hexToBytes)(eip712Signature),
304
+ reencryptPubKey: reencryptPubKey ? reencryptPubKey : Uint8Array.from([]),
305
+ });
306
+ let response = await kmsQuorumClient.attestedDecrypt(attestedDecryptRequest, executorAddress, ethClient, backoffConfig, reencryptKeypair);
307
+ // If reencryptPubKey is provided with a keypair, decrypt the encrypted attestations
308
+ if (reencryptPubKey !== undefined && reencryptKeypair) {
309
+ response = await (0, attested_decrypt_js_1.decryptEncryptedAttestations)(response, reencryptKeypair);
310
+ }
311
+ return response;
312
+ }
313
+ // Below are helpers to get ABIs of functions/structs from the SessionVerifier
314
+ // contract.
315
+ // Get the ABI of the `AllowanceVoucher` struct.
316
+ function getAllowanceVoucherAbi() {
317
+ // Find the `allowanceVoucherDigest` function, it takes an AllowanceVoucher
318
+ // as sole argument.
319
+ const allowanceVoucherDigest = lightning_js_1.advancedAccessControlAbi.find((item) => item.name === 'allowanceVoucherDigest');
320
+ if (!allowanceVoucherDigest) {
321
+ throw new Error('allowanceVoucherDigest not found');
322
+ }
323
+ // Get the input whose internalType is "struct AllowanceVoucher"
324
+ const allowanceVoucherInput = allowanceVoucherDigest.inputs.find((input) => input.internalType === 'struct AllowanceVoucher');
325
+ if (!allowanceVoucherInput) {
326
+ throw new Error('allowanceVoucherInput not found');
327
+ }
328
+ return allowanceVoucherInput.components;
329
+ }
330
+ // Get the ABI of the `Session` struct.
331
+ //
332
+ // We specifically created an ABIHelper.sol contract to export the Session
333
+ // struct from the SessionVerifier contract.
334
+ function getSessionAbi() {
335
+ const getSession = lightning_js_1.abiHelperAbi.find((item) => 'name' in item && item.name === 'getSession');
336
+ if (!getSession) {
337
+ throw new Error('getSession not found');
338
+ }
339
+ const session = getSession.outputs[0];
340
+ if (!session) {
341
+ throw new Error('session not found');
342
+ }
343
+ return session.components;
344
+ }
345
+ // Get the ABI of the `canUseSession` function.
346
+ function getCanUseSessionAbi() {
347
+ const canUseSession = lightning_js_1.sessionVerifierAbi.find((item) => 'name' in item && item.name === 'canUseSession');
348
+ if (!canUseSession) {
349
+ throw new Error('canUseSession not found');
350
+ }
351
+ return canUseSession;
352
+ }
353
+ function getAdvancedAcl(incoVerifierAddress, sharerWalletClient) {
354
+ return (0, viem_1.getContract)({
355
+ address: incoVerifierAddress,
356
+ abi: lightning_js_1.advancedAccessControlAbi,
357
+ client: sharerWalletClient,
358
+ });
359
+ }
360
+ function getIncoLightning(incoLiteAddress, walletClient) {
361
+ return (0, viem_1.getContract)({
362
+ address: incoLiteAddress,
363
+ abi: lightning_js_1.incoLightningAbi,
364
+ client: walletClient,
365
+ });
366
+ }
367
+ async function getIncoVerifier(incoLiteAddress, walletClient) {
368
+ const incoLite = getIncoLightning(incoLiteAddress, walletClient);
369
+ const incoVerifierAddress = await incoLite.read.incoVerifier();
370
+ return (0, viem_1.getContract)({
371
+ address: incoVerifierAddress,
372
+ abi: verifier_js_1.incoVerifierAbi,
373
+ client: walletClient,
374
+ });
375
+ }
376
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi1rZXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWR2YW5jZWRhY2wvc2Vzc2lvbi1rZXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBdUZBLHdEQXNCQztBQXdDRCwwQ0EwRUM7QUFFRCxzRUF1REM7QUFFRCw0RUFRQztBQXFDRCw4REE4SEM7QUE2REQsOERBcUhDO0FBdm5CRCxpREFBNEM7QUFDNUMsK0JBYWM7QUFXZCxpRUFLd0M7QUFDeEMsK0RBQWdFO0FBQ2hFLDBDQUF5RDtBQU16RCwrQ0FHMEI7QUFDMUIsK0NBQStFO0FBQy9FLHVEQUErRDtBQUkvRCwwREFHcUM7QUFDckMsZ0ZBQXNGO0FBQ3RGLDBEQUFtRTtBQUNuRSxtREFBK0Q7QUFDL0QsMEZBRzREO0FBQzVELDhFQUtzRDtBQUd0RCwyRUFBMkU7QUFDM0UsMkVBQTJFO0FBQzNFLG9FQUFvRTtBQUVwRSw2RUFBNkU7QUFDN0Usd0VBQXdFO0FBQzNELFFBQUEsbUJBQW1CLEdBQzlCLHNJQUFzSSxDQUFDO0FBV3pJLHNFQUFzRTtBQUN0RSx3RUFBd0U7QUFDeEUsMEVBQTBFO0FBQ25FLEtBQUssVUFBVSxzQkFBc0IsQ0FDMUMsZUFBd0IsRUFDeEIsa0JBQTJELEVBQzNELGlCQUEwQixFQUMxQixZQUFpQixFQUNqQixhQUFrQjtJQUVsQixNQUFNLFFBQVEsR0FBRyxNQUFNLGVBQWUsQ0FBQyxlQUFlLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUU1RSwwRUFBMEU7SUFDMUUsd0NBQXdDO0lBQ3hDLE1BQU0sWUFBWSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQztRQUNyRSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsT0FBTztLQUNuQyxDQUFDLENBQUM7SUFFSCxPQUFPO1FBQ0wsWUFBWTtRQUNaLGlCQUFpQjtRQUNqQixZQUFZO1FBQ1osYUFBYTtRQUNiLE9BQU8sRUFBRSwyQkFBbUI7S0FDN0IsQ0FBQztBQUNK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
@@ -0,0 +1,16 @@
1
+ import { Address, Hex } from 'viem';
2
+ export type AllowanceVoucher = {
3
+ sessionNonce: Hex;
4
+ verifyingContract: Address;
5
+ callFunction: Hex;
6
+ sharerArgData: Hex;
7
+ warning: string;
8
+ };
9
+ export interface AllowanceVoucherWithSig {
10
+ sharer: Address;
11
+ voucher: AllowanceVoucher;
12
+ voucherSignature: Hex;
13
+ }
14
+ export interface AllowanceProof extends AllowanceVoucherWithSig {
15
+ requesterArgData: Uint8Array;
16
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWR2YW5jZWRhY2wvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
@@ -0,0 +1,65 @@
1
+ import type { Account, Chain, Transport, WalletClient } from 'viem';
2
+ import { DecryptionAttestation, EncryptedDecryptionAttestation } from '../attesteddecrypt/types.js';
3
+ import { HexString } from '../binary.js';
4
+ import { SupportedChainId } from '../chain.js';
5
+ import type { EncryptionScheme, SupportedTeeType } from '../encryption/encryption.js';
6
+ import { KmsQuorumClient } from '../kms/quorumClient.js';
7
+ import { type XwingKeypair } from '../lite/xwing.js';
8
+ import type { BackoffConfig } from '../retry.js';
9
+ import { AttestedComputeOP } from './types.js';
10
+ export declare const ATTESTED_COMPUTE_DOMAIN_NAME = "IncoAttestedCompute";
11
+ /**
12
+ * Arguments for creating an attested compute.
13
+ */
14
+ export interface IncoLiteAttestedComputeArgs {
15
+ /** The wallet used to interact with the blockchain and sign the compute request */
16
+ walletClient: WalletClient<Transport, Chain, Account>;
17
+ /** The KMS quorum client instance */
18
+ kmsQuorumClient: KmsQuorumClient;
19
+ /** The chain ID to use */
20
+ chainId: SupportedChainId;
21
+ }
22
+ /**
23
+ * Creates an attested compute function that can decrypt handles with an attached attestation from the covalidator.
24
+ * @param args - The arguments for creating the attested compute function
25
+ * @returns A function that can perform binary operation on a handle and return an attestation
26
+ * @throws {AttestedComputeError} If the creation fails
27
+ *
28
+ * @todo Support multiple operations in a single request.
29
+ */
30
+ export declare function attestedCompute<T extends SupportedTeeType>({ executorAddress, lhsHandle, op, rhsPlaintext, backoffConfig, walletClient, kmsQuorumClient, chainId, reencryptPubKey, reencryptKeypair, }: {
31
+ executorAddress: HexString;
32
+ lhsHandle: HexString;
33
+ op: AttestedComputeOP;
34
+ rhsPlaintext: bigint | boolean;
35
+ backoffConfig?: Partial<BackoffConfig> | undefined;
36
+ walletClient: WalletClient<Transport, Chain, Account>;
37
+ kmsQuorumClient: KmsQuorumClient;
38
+ chainId: SupportedChainId;
39
+ reencryptPubKey: Uint8Array;
40
+ reencryptKeypair: XwingKeypair;
41
+ }): Promise<DecryptionAttestation<EncryptionScheme, T>>;
42
+ export declare function attestedCompute<T extends SupportedTeeType>({ executorAddress, lhsHandle, op, rhsPlaintext, backoffConfig, walletClient, kmsQuorumClient, chainId, reencryptPubKey, }: {
43
+ executorAddress: HexString;
44
+ lhsHandle: HexString;
45
+ op: AttestedComputeOP;
46
+ rhsPlaintext: bigint | boolean;
47
+ backoffConfig?: Partial<BackoffConfig> | undefined;
48
+ walletClient: WalletClient<Transport, Chain, Account>;
49
+ kmsQuorumClient: KmsQuorumClient;
50
+ chainId: SupportedChainId;
51
+ reencryptPubKey: Uint8Array;
52
+ reencryptKeypair?: never;
53
+ }): Promise<EncryptedDecryptionAttestation<EncryptionScheme, T>>;
54
+ export declare function attestedCompute<T extends SupportedTeeType>({ executorAddress, lhsHandle, op, rhsPlaintext, backoffConfig, walletClient, kmsQuorumClient, chainId, }: {
55
+ executorAddress: HexString;
56
+ lhsHandle: HexString;
57
+ op: AttestedComputeOP;
58
+ rhsPlaintext: bigint | boolean;
59
+ backoffConfig?: Partial<BackoffConfig> | undefined;
60
+ walletClient: WalletClient<Transport, Chain, Account>;
61
+ kmsQuorumClient: KmsQuorumClient;
62
+ chainId: SupportedChainId;
63
+ reencryptPubKey?: never;
64
+ reencryptKeypair?: never;
65
+ }): Promise<DecryptionAttestation<EncryptionScheme, T>>;