@inco/js 0.3.0 → 0.3.2-alpha.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 (56) hide show
  1. package/dist/cjs/advancedacl/index.d.ts +2 -0
  2. package/dist/cjs/advancedacl/index.js +19 -0
  3. package/dist/cjs/advancedacl/session-key.d.ts +28 -0
  4. package/dist/cjs/advancedacl/session-key.js +176 -0
  5. package/dist/cjs/advancedacl/types.d.ts +15 -0
  6. package/dist/cjs/advancedacl/types.js +3 -0
  7. package/dist/cjs/attestedcompute/attested-compute.d.ts +14 -16
  8. package/dist/cjs/attestedcompute/attested-compute.js +56 -71
  9. package/dist/cjs/attesteddecrypt/attested-decrypt.d.ts +18 -19
  10. package/dist/cjs/attesteddecrypt/attested-decrypt.js +50 -60
  11. package/dist/cjs/attesteddecrypt/index.d.ts +0 -1
  12. package/dist/cjs/attesteddecrypt/index.js +1 -2
  13. package/dist/cjs/generated/abis/lightning-preview.d.ts +2265 -0
  14. package/dist/cjs/generated/abis/lightning-preview.js +1429 -0
  15. package/dist/cjs/lite/attested-compute.d.ts +1 -2
  16. package/dist/cjs/lite/attested-compute.js +1 -4
  17. package/dist/cjs/lite/attested-decrypt.d.ts +1 -2
  18. package/dist/cjs/lite/attested-decrypt.js +1 -4
  19. package/dist/cjs/lite/lightning.d.ts +94 -1
  20. package/dist/cjs/lite/lightning.js +129 -2
  21. package/dist/cjs/local/local-node.d.ts +1 -1
  22. package/dist/cjs/local/local-node.js +15 -15
  23. package/dist/esm/advancedacl/index.d.ts +2 -0
  24. package/dist/esm/advancedacl/index.js +3 -0
  25. package/dist/esm/advancedacl/session-key.d.ts +28 -0
  26. package/dist/esm/advancedacl/session-key.js +170 -0
  27. package/dist/esm/advancedacl/types.d.ts +15 -0
  28. package/dist/esm/advancedacl/types.js +2 -0
  29. package/dist/esm/attestedcompute/attested-compute.d.ts +14 -16
  30. package/dist/esm/attestedcompute/attested-compute.js +55 -70
  31. package/dist/esm/attesteddecrypt/attested-decrypt.d.ts +18 -19
  32. package/dist/esm/attesteddecrypt/attested-decrypt.js +49 -59
  33. package/dist/esm/attesteddecrypt/index.d.ts +0 -1
  34. package/dist/esm/attesteddecrypt/index.js +1 -2
  35. package/dist/esm/generated/abis/lightning-preview.d.ts +2265 -0
  36. package/dist/esm/generated/abis/lightning-preview.js +1426 -0
  37. package/dist/esm/lite/attested-compute.d.ts +1 -2
  38. package/dist/esm/lite/attested-compute.js +2 -3
  39. package/dist/esm/lite/attested-decrypt.d.ts +1 -2
  40. package/dist/esm/lite/attested-decrypt.js +2 -3
  41. package/dist/esm/lite/lightning.d.ts +94 -1
  42. package/dist/esm/lite/lightning.js +129 -2
  43. package/dist/esm/local/local-node.d.ts +1 -1
  44. package/dist/esm/local/local-node.js +3 -3
  45. package/dist/types/advancedacl/index.d.ts +2 -0
  46. package/dist/types/advancedacl/session-key.d.ts +28 -0
  47. package/dist/types/advancedacl/types.d.ts +15 -0
  48. package/dist/types/attestedcompute/attested-compute.d.ts +14 -16
  49. package/dist/types/attesteddecrypt/attested-decrypt.d.ts +18 -19
  50. package/dist/types/attesteddecrypt/index.d.ts +0 -1
  51. package/dist/types/generated/abis/lightning-preview.d.ts +2265 -0
  52. package/dist/types/lite/attested-compute.d.ts +1 -2
  53. package/dist/types/lite/attested-decrypt.d.ts +1 -2
  54. package/dist/types/lite/lightning.d.ts +94 -1
  55. package/dist/types/local/local-node.d.ts +1 -1
  56. package/package.json +1 -1
@@ -0,0 +1,2 @@
1
+ export * from './session-key.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("./session-key.js"), exports);
18
+ __exportStar(require("./types.js"), exports);
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWR2YW5jZWRhY2wvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1EQUFpQztBQUNqQyw2Q0FBMkIifQ==
@@ -0,0 +1,28 @@
1
+ import type { Client } from '@connectrpc/connect';
2
+ import { type Account, type Address, type Chain, type Hex, type Transport, type WalletClient } from 'viem';
3
+ import { type EciesScheme, SupportedFheType } from '../encryption/encryption.js';
4
+ import type { KmsService, Secp256k1Keypair } from '../lite/index.js';
5
+ import { type ReencryptFnArgs } from '../reencryption/index.js';
6
+ import type { AllowanceVoucher, AllowanceVoucherWithSig } from './types.js';
7
+ export interface Session {
8
+ decrypter: Address;
9
+ expiresAt: bigint;
10
+ }
11
+ export declare function createAllowanceVoucher(incoLiteAddress: Address, sharerWalletClient: WalletClient<Transport, Chain, Account>, verifyingContract: Address, callFunction: Hex, sharerArgData: Hex): Promise<AllowanceVoucher>;
12
+ export interface GrantSessionKeyArgs {
13
+ chainId: bigint;
14
+ incoLiteAddress: Address;
15
+ sessionVerifierContractAddress: Address;
16
+ granteeAddress: Address;
17
+ sharerWalletClient: WalletClient<Transport, Chain, Account>;
18
+ expiresAt: Date;
19
+ }
20
+ export declare function grantSessionKey({ chainId, incoLiteAddress, sessionVerifierContractAddress, granteeAddress, sharerWalletClient, expiresAt, }: GrantSessionKeyArgs): Promise<AllowanceVoucherWithSig>;
21
+ export interface SessionKeyReencryptorArgs {
22
+ chainId: bigint;
23
+ ephemeralKeypair: Secp256k1Keypair;
24
+ kmsConnectRpcEndpointOrClient: string | Client<typeof KmsService>;
25
+ allowanceVoucherWithSig: AllowanceVoucherWithSig;
26
+ }
27
+ export declare function sessionKeyReencryptor({ chainId, kmsConnectRpcEndpointOrClient, ephemeralKeypair, allowanceVoucherWithSig, }: SessionKeyReencryptorArgs): Promise<(<T extends SupportedFheType>({ handle }: ReencryptFnArgs<EciesScheme, T>) => Promise<import("../encryption/encryption.js").PlaintextOf<1, 0 | 5 | 7 | 8>>)>;
28
+ export declare function updateActiveVouchersSessionNonce(incoLiteAddress: Address, sharerWalletClient: WalletClient<Transport, Chain, Account>): Promise<`0x${string}`>;
@@ -0,0 +1,176 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createAllowanceVoucher = createAllowanceVoucher;
4
+ exports.grantSessionKey = grantSessionKey;
5
+ exports.sessionKeyReencryptor = sessionKeyReencryptor;
6
+ exports.updateActiveVouchersSessionNonce = updateActiveVouchersSessionNonce;
7
+ const viem_1 = require("viem");
8
+ const accounts_1 = require("viem/accounts");
9
+ const chain_js_1 = require("../chain.js");
10
+ const lightning_preview_js_1 = require("../generated/abis/lightning-preview.js");
11
+ const lightning_js_1 = require("../generated/abis/lightning.js");
12
+ const index_js_1 = require("../lite/index.js");
13
+ const index_js_2 = require("../reencryption/index.js");
14
+ // Given a sharer's wallet client, an incoLite contract address, and a
15
+ // (verifyingContract, callFunction, sharerArgData) tuple, this function
16
+ // creates an AllowanceVoucher.
17
+ async function createAllowanceVoucher(incoLiteAddress, sharerWalletClient, verifyingContract, callFunction, sharerArgData) {
18
+ const advancedACL = (0, viem_1.getContract)({
19
+ address: incoLiteAddress,
20
+ // Could have used the incoLightningAbi, but this is more efficient.
21
+ abi: lightning_preview_js_1.advancedAccessControlAbi,
22
+ client: sharerWalletClient,
23
+ });
24
+ // The session nonce in the AllowanceVoucher must match the current active
25
+ // session nonce of the sharer on-chain.
26
+ const sessionNonce = await advancedACL.read.getActiveVouchersSessionNonce([sharerWalletClient.account.address]);
27
+ return {
28
+ sessionNonce,
29
+ verifyingContract,
30
+ callFunction,
31
+ sharerArgData,
32
+ };
33
+ }
34
+ // Let the sharer grant a session to the requester.
35
+ async function grantSessionKey({ chainId, incoLiteAddress, sessionVerifierContractAddress, granteeAddress, sharerWalletClient, expiresAt, }) {
36
+ const session = {
37
+ decrypter: granteeAddress,
38
+ expiresAt: BigInt(Math.floor(expiresAt.getTime() / 1000)),
39
+ };
40
+ const sharerArgData = (0, viem_1.encodeAbiParameters)(getSessionAbi(), [session.decrypter, session.expiresAt]);
41
+ // Get the domain name and version from the incoLite contract.
42
+ const incoLitePreview = (0, viem_1.getContract)({
43
+ abi: lightning_js_1.incoLightningAbi,
44
+ address: incoLiteAddress,
45
+ client: sharerWalletClient,
46
+ });
47
+ const eip712DomainName = await incoLitePreview.read.getName();
48
+ const eip712DomainVersion = await incoLitePreview.read.getVersion();
49
+ const voucher = await createAllowanceVoucher(incoLiteAddress, sharerWalletClient,
50
+ // Careful that the verifying contract here is the SessionVerifier contract,
51
+ // not the incoLite contract.
52
+ sessionVerifierContractAddress, (0, viem_1.toFunctionSelector)(getCanUseSessionAbi()), sharerArgData);
53
+ const eip712Payload = (0, index_js_2.createEIP712Payload)({
54
+ chainId,
55
+ primaryType: 'AllowanceVoucher',
56
+ primaryTypeFields: getAllowanceVoucherAbi(),
57
+ message: voucher,
58
+ // Related to comment above: careful that the verifying contract here is
59
+ // the incoLite contract (not the SessionVerifier contract).
60
+ verifyingContract: incoLiteAddress,
61
+ ...(eip712DomainName && { domainName: eip712DomainName }),
62
+ ...(eip712DomainVersion && { domainVersion: eip712DomainVersion }),
63
+ });
64
+ // Using browser extensions, this step will prompt the user to sign the
65
+ // payload.
66
+ const voucherSignature = await sharerWalletClient.signTypedData(eip712Payload);
67
+ return {
68
+ sharer: sharerWalletClient.account.address,
69
+ voucher,
70
+ voucherSignature,
71
+ };
72
+ }
73
+ // The sessionKeyReencryptor function is a reencryptor that uses a session key
74
+ // to reencrypt data.
75
+ async function sessionKeyReencryptor({ chainId, kmsConnectRpcEndpointOrClient, ephemeralKeypair, allowanceVoucherWithSig, }) {
76
+ const kmsClient = (0, index_js_1.getKmsClient)(kmsConnectRpcEndpointOrClient || (0, index_js_1.defaultCovalidatorGrpc)((0, chain_js_1.getSupportedChain)(chainId)));
77
+ const requesterAccount = (0, accounts_1.privateKeyToAccount)(`0x${ephemeralKeypair.kp.getPrivate('hex')}`);
78
+ const ephemeralPubKey = ephemeralKeypair.encodePublicKey();
79
+ // Sign the EIP712 attesting that the requester has access to the private key
80
+ // corresponding to the ephemeral public key.
81
+ const eip712Payload = (0, index_js_1.reencryptEIP712)(chainId, ephemeralPubKey);
82
+ // Since the account is an ephemeral keypair stored in memory (not in Metamask),
83
+ // this step will NOT prompt the user with a pop-up.
84
+ const eip712Signature = await requesterAccount.signTypedData(eip712Payload);
85
+ return async function reencrypt({ handle }) {
86
+ const reencryptRequest = {
87
+ $typeName: 'inco.kms.lite.v1.ReencryptRequest',
88
+ userAddress: requesterAccount.address,
89
+ ephemeralPubKey,
90
+ eip712Signature: (0, viem_1.hexToBytes)(eip712Signature),
91
+ handlesWithProofs: [
92
+ {
93
+ $typeName: 'inco.kms.lite.v1.HandleWithProof',
94
+ handle,
95
+ aclProof: {
96
+ $typeName: 'inco.kms.lite.v1.ACLProof',
97
+ proof: {
98
+ value: {
99
+ $typeName: 'inco.kms.lite.v1.IncoLiteAdvancedACLProof',
100
+ allowanceProof: {
101
+ $typeName: 'inco.kms.lite.v1.AllowanceProof',
102
+ sharer: allowanceVoucherWithSig.sharer,
103
+ voucher: {
104
+ // Converting from the AllowanceVoucher domain type to the
105
+ // AllowanceVoucher proto type.
106
+ $typeName: 'inco.kms.lite.v1.AllowanceVoucher',
107
+ sessionNonce: (0, viem_1.hexToBytes)(allowanceVoucherWithSig.voucher.sessionNonce),
108
+ verifyingContract: allowanceVoucherWithSig.voucher.verifyingContract,
109
+ callFunction: (0, viem_1.hexToBytes)(allowanceVoucherWithSig.voucher.callFunction),
110
+ sharerArgData: (0, viem_1.hexToBytes)(allowanceVoucherWithSig.voucher.sharerArgData),
111
+ },
112
+ voucherSignature: (0, viem_1.hexToBytes)(allowanceVoucherWithSig.voucherSignature),
113
+ // For SessionVerifier, the requesterArgData is empty.
114
+ requesterArgData: new Uint8Array(),
115
+ },
116
+ },
117
+ case: 'incoLiteAdvancedAclProof',
118
+ },
119
+ },
120
+ },
121
+ ],
122
+ };
123
+ const response = await kmsClient.reencrypt(reencryptRequest);
124
+ return (0, index_js_1.decryptGrpcResponse)(response, ephemeralKeypair, handle);
125
+ };
126
+ }
127
+ async function updateActiveVouchersSessionNonce(incoLiteAddress, sharerWalletClient) {
128
+ const advancedACL = (0, viem_1.getContract)({
129
+ address: incoLiteAddress,
130
+ abi: lightning_preview_js_1.advancedAccessControlAbi,
131
+ client: sharerWalletClient,
132
+ });
133
+ const txHash = await advancedACL.write.updateActiveVouchersSessionNonce();
134
+ return txHash;
135
+ }
136
+ // Below are helpers to get ABIs of functions/structs from the SessionVerifier
137
+ // contract.
138
+ // Get the ABI of the `AllowanceVoucher` struct.
139
+ function getAllowanceVoucherAbi() {
140
+ // Find the `allowanceVoucherDigest` function, it takes an AllowanceVoucher
141
+ // as sole argument.
142
+ const allowanceVoucherDigest = lightning_preview_js_1.advancedAccessControlAbi.find((item) => item.name === 'allowanceVoucherDigest');
143
+ if (!allowanceVoucherDigest) {
144
+ throw new Error('allowanceVoucherDigest not found');
145
+ }
146
+ // Get the input whose internalType is "struct AllowanceVoucher"
147
+ const allowanceVoucherInput = allowanceVoucherDigest.inputs.find((input) => input.internalType === 'struct AllowanceVoucher');
148
+ if (!allowanceVoucherInput) {
149
+ throw new Error('allowanceVoucherInput not found');
150
+ }
151
+ return allowanceVoucherInput.components;
152
+ }
153
+ // Get the ABI of the `Session` struct.
154
+ //
155
+ // We specifically created an ABIHelper.sol contract to export the Session
156
+ // struct from the SessionVerifier contract.
157
+ function getSessionAbi() {
158
+ const getSession = lightning_preview_js_1.abiHelperAbi.find((item) => 'name' in item && item.name === 'getSession');
159
+ if (!getSession) {
160
+ throw new Error('getSession not found');
161
+ }
162
+ const session = getSession.outputs[0];
163
+ if (!session) {
164
+ throw new Error('session not found');
165
+ }
166
+ return session.components;
167
+ }
168
+ // Get the ABI of the `canUseSession` function.
169
+ function getCanUseSessionAbi() {
170
+ const canUseSession = lightning_preview_js_1.sessionVerifierAbi.find((item) => 'name' in item && item.name === 'canUseSession');
171
+ if (!canUseSession) {
172
+ throw new Error('canUseSession not found');
173
+ }
174
+ return canUseSession;
175
+ }
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi1rZXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWR2YW5jZWRhY2wvc2Vzc2lvbi1rZXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUF5Q0Esd0RBd0JDO0FBd0JELDBDQXNEQztBQXNCRCxzREEyREM7QUFFRCw0RUFXQztBQTVPRCwrQkFXYztBQUNkLDRDQUFvRDtBQUNwRCwwQ0FBZ0Q7QUFFaEQsaUZBQW9IO0FBQ3BILGlFQUFrRTtBQUVsRSwrQ0FBOEc7QUFDOUcsdURBQXFGO0FBa0JyRixzRUFBc0U7QUFDdEUsd0VBQXdFO0FBQ3hFLCtCQUErQjtBQUN4QixLQUFLLFVBQVUsc0JBQXNCLENBQzFDLGVBQXdCLEVBQ3hCLGtCQUEyRCxFQUMzRCxpQkFBMEIsRUFDMUIsWUFBaUIsRUFDakIsYUFBa0I7SUFFbEIsTUFBTSxXQUFXLEdBQUcsSUFBQSxrQkFBVyxFQUFDO1FBQzlCLE9BQU8sRUFBRSxlQUFlO1FBQ3hCLG9FQUFvRTtRQUNwRSxHQUFHLEVBQUUsK0NBQXdCO1FBQzdCLE1BQU0sRUFBRSxrQkFBa0I7S0FDM0IsQ0FBQyxDQUFDO0lBRUgsMEVBQTBFO0lBQzFFLHdDQUF3QztJQUN4QyxNQUFNLFlBQVksR0FBRyxNQUFNLFdBQVcsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUVoSCxPQUFPO1FBQ0wsWUFBWTtRQUNaLGlCQUFpQjtRQUNqQixZQUFZO1FBQ1osYUFBYTtLQUNkLENBQUM7QUFDSixDQUFDO0FBdUJELG1EQUFtRDtBQUM1QyxLQUFLLFVBQVUsZUFBZSxDQUFDLEVBQ3BDLE9BQU8sRUFDUCxlQUFlLEVBQ2YsOEJBQThCLEVBQzlCLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsU0FBUyxHQUNXO0lBQ3BCLE1BQU0sT0FBTyxHQUFHO1FBQ2QsU0FBUyxFQUFFLGNBQWM7UUFDekIsU0FBUyxFQUFF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
@@ -0,0 +1,15 @@
1
+ import { Address, Hex } from 'viem';
2
+ export type AllowanceVoucher = {
3
+ sessionNonce: Hex;
4
+ verifyingContract: Address;
5
+ callFunction: Hex;
6
+ sharerArgData: Hex;
7
+ };
8
+ export interface AllowanceVoucherWithSig {
9
+ sharer: Address;
10
+ voucher: AllowanceVoucher;
11
+ voucherSignature: Hex;
12
+ }
13
+ export interface AllowanceProof extends AllowanceVoucherWithSig {
14
+ requesterArgData: Uint8Array;
15
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWR2YW5jZWRhY2wvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
@@ -1,8 +1,11 @@
1
1
  import type { Account, Chain, Transport, WalletClient } from 'viem';
2
+ import { DecryptionAttestation } from '../attesteddecrypt/types.js';
3
+ import { HexString } from '../binary.js';
2
4
  import { SupportedChainId } from '../chain.js';
3
- import { EciesScheme } from '../encryption/encryption.js';
5
+ import { EciesScheme, SupportedFheType } from '../encryption/encryption.js';
4
6
  import type { KmsClient } from '../kms/client.js';
5
- import { AttestedCompute } from './types.js';
7
+ import type { BackoffConfig } from '../retry.js';
8
+ import { AttestedComputeOP } from './types.js';
6
9
  /**
7
10
  * Arguments for creating an attested compute.
8
11
  */
@@ -21,18 +24,13 @@ export interface IncoLiteAttestedComputeArgs {
21
24
  * @throws {AttestedComputeError} If the creation fails
22
25
  *
23
26
  * @todo Support multiple operations in a single request.
24
- *
25
- * @example
26
- * ```typescript
27
- * const compute = await incoLiteAttestedCompute({
28
- * walletClient,
29
- * chainId: sepolia,
30
- * });
31
- * const decryptionAttestation = await compute({
32
- * lhsHandle: '0x...',
33
- * op: AttestedComputeSupportedOps.Eq,
34
- * rhsPlaintext: 1337n,
35
- * });
36
- * ```
37
27
  */
38
- export declare function incoLiteAttestedCompute({ kmsConnectRpcEndpointOrClient, chainId, walletClient, }: IncoLiteAttestedComputeArgs): AttestedCompute<EciesScheme>;
28
+ export declare function attestedCompute<T extends SupportedFheType>({ lhsHandle, op, rhsPlaintext, backoffConfig, walletClient, kmsConnectRpcEndpointOrClient, chainId, }: {
29
+ lhsHandle: HexString;
30
+ op: AttestedComputeOP;
31
+ rhsPlaintext: bigint | boolean;
32
+ backoffConfig?: Partial<BackoffConfig> | undefined;
33
+ walletClient: WalletClient<Transport, Chain, Account>;
34
+ kmsConnectRpcEndpointOrClient?: string | KmsClient;
35
+ chainId: SupportedChainId;
36
+ }): Promise<DecryptionAttestation<EciesScheme, T>>;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.incoLiteAttestedCompute = incoLiteAttestedCompute;
3
+ exports.attestedCompute = attestedCompute;
4
4
  const viem_1 = require("viem");
5
5
  const attested_decrypt_js_1 = require("../attesteddecrypt/attested-decrypt.js");
6
6
  const binary_js_1 = require("../binary.js");
@@ -20,79 +20,64 @@ const ATTESTED_COMPUTE_DOMAIN_VERSION = '0.1.0';
20
20
  * @throws {AttestedComputeError} If the creation fails
21
21
  *
22
22
  * @todo Support multiple operations in a single request.
23
- *
24
- * @example
25
- * ```typescript
26
- * const compute = await incoLiteAttestedCompute({
27
- * walletClient,
28
- * chainId: sepolia,
29
- * });
30
- * const decryptionAttestation = await compute({
31
- * lhsHandle: '0x...',
32
- * op: AttestedComputeSupportedOps.Eq,
33
- * rhsPlaintext: 1337n,
34
- * });
35
- * ```
36
23
  */
37
- function incoLiteAttestedCompute({ kmsConnectRpcEndpointOrClient, chainId, walletClient, }) {
38
- const kmsClient = (0, client_js_1.getKmsClient)(kmsConnectRpcEndpointOrClient || (0, client_js_1.defaultCovalidatorGrpc)((0, chain_js_1.getSupportedChain)(chainId)));
39
- return async function attestedCompute({ lhsHandle, op, rhsPlaintext, backoffConfig, }) {
40
- try {
41
- (0, attested_decrypt_js_1.validateHandle)(lhsHandle);
42
- const rhsPlaintextBig = BigInt(rhsPlaintext);
43
- // Create the EIP712 payload for the handles to decrypt
44
- const eip712Payload = (0, eip712_js_1.createEIP712Payload)({
45
- chainId: BigInt(chainId),
46
- primaryType: 'AttestedComputeRequest',
47
- primaryTypeFields: [
48
- { name: 'op', type: 'uint8' },
49
- { name: 'lhsHandle', type: 'bytes32' },
50
- { name: 'rhsPlaintext', type: 'bytes32' },
51
- ],
52
- message: {
53
- op: op,
54
- lhsHandle: lhsHandle,
55
- rhsPlaintext: (0, binary_js_1.bigintToBytes32)(rhsPlaintextBig),
56
- },
57
- domainName: ATTESTED_COMPUTE_DOMAIN_NAME,
58
- domainVersion: ATTESTED_COMPUTE_DOMAIN_VERSION,
59
- });
60
- // Sign the EIP712 message
61
- const eip712Signature = await walletClient.signTypedData(eip712Payload);
62
- const rhsValueBytes = (0, encryption_js_1.bigintToPlaintext)(encryption_js_1.encryptionSchemes.ecies, (0, handle_js_1.getHandleType)(lhsHandle), rhsPlaintextBig);
63
- const attestedComputeRequest = {
64
- $typeName: 'inco.kms.lite.v1.AttestedComputeRequest',
65
- userAddress: walletClient.account.address,
24
+ async function attestedCompute({ lhsHandle, op, rhsPlaintext, backoffConfig, walletClient, kmsConnectRpcEndpointOrClient, chainId, }) {
25
+ try {
26
+ const kmsClient = (0, client_js_1.getKmsClient)(kmsConnectRpcEndpointOrClient || (0, client_js_1.defaultCovalidatorGrpc)((0, chain_js_1.getSupportedChain)(chainId)));
27
+ (0, attested_decrypt_js_1.validateHandle)(lhsHandle);
28
+ const rhsPlaintextBig = BigInt(rhsPlaintext);
29
+ // Create the EIP712 payload for the handles to decrypt
30
+ const eip712Payload = (0, eip712_js_1.createEIP712Payload)({
31
+ chainId: BigInt(chainId),
32
+ primaryType: 'AttestedComputeRequest',
33
+ primaryTypeFields: [
34
+ { name: 'op', type: 'uint8' },
35
+ { name: 'lhsHandle', type: 'bytes32' },
36
+ { name: 'rhsPlaintext', type: 'bytes32' },
37
+ ],
38
+ message: {
66
39
  op: op,
67
40
  lhsHandle: lhsHandle,
68
- rhsPlaintext: rhsValueBytes.value.toString(16),
69
- eip712Signature: (0, viem_1.hexToBytes)(eip712Signature),
70
- };
71
- const response = await (0, retry_js_1.retryWithBackoff)(async () => {
72
- return await kmsClient.attestedCompute(attestedComputeRequest);
73
- }, backoffConfig);
74
- const decryptionAttestation = response.decryptionAttestation;
75
- if (decryptionAttestation?.plaintext === undefined) {
76
- throw new types_js_1.AttestedComputeError('No plaintext in response');
77
- }
78
- const computeResultHandle = response.decryptionAttestation?.handle;
79
- if (!computeResultHandle) {
80
- throw new types_js_1.AttestedComputeError('No compute result handle in response');
81
- }
82
- const handleType = (0, handle_js_1.getHandleType)(computeResultHandle);
83
- const bigIntValue = (0, binary_js_1.bytesToBigInt)(decryptionAttestation.plaintext);
84
- return {
85
- handle: computeResultHandle,
86
- plaintext: (0, encryption_js_1.bigintToPlaintext)(encryption_js_1.encryptionSchemes.ecies, handleType, bigIntValue),
87
- covalidatorSignature: decryptionAttestation.signature,
88
- };
41
+ rhsPlaintext: (0, binary_js_1.bigintToBytes32)(rhsPlaintextBig),
42
+ },
43
+ domainName: ATTESTED_COMPUTE_DOMAIN_NAME,
44
+ domainVersion: ATTESTED_COMPUTE_DOMAIN_VERSION,
45
+ });
46
+ // Sign the EIP712 message
47
+ const eip712Signature = await walletClient.signTypedData(eip712Payload);
48
+ const rhsValueBytes = (0, encryption_js_1.bigintToPlaintext)(encryption_js_1.encryptionSchemes.ecies, (0, handle_js_1.getHandleType)(lhsHandle), rhsPlaintextBig);
49
+ const attestedComputeRequest = {
50
+ $typeName: 'inco.kms.lite.v1.AttestedComputeRequest',
51
+ userAddress: walletClient.account.address,
52
+ op: op,
53
+ lhsHandle: lhsHandle,
54
+ rhsPlaintext: rhsValueBytes.value.toString(16),
55
+ eip712Signature: (0, viem_1.hexToBytes)(eip712Signature),
56
+ };
57
+ const response = await (0, retry_js_1.retryWithBackoff)(async () => {
58
+ return await kmsClient.attestedCompute(attestedComputeRequest);
59
+ }, backoffConfig);
60
+ const decryptionAttestation = response.decryptionAttestation;
61
+ if (decryptionAttestation?.plaintext === undefined) {
62
+ throw new types_js_1.AttestedComputeError('No plaintext in response');
63
+ }
64
+ const computeResultHandle = response.decryptionAttestation?.handle;
65
+ if (!computeResultHandle) {
66
+ throw new types_js_1.AttestedComputeError('No compute result handle in response');
89
67
  }
90
- catch (error) {
91
- if (error instanceof types_js_1.AttestedComputeError) {
92
- throw error;
93
- }
94
- throw new types_js_1.AttestedComputeError('Failed to perform attested compute', error);
68
+ const handleType = (0, handle_js_1.getHandleType)(computeResultHandle);
69
+ const bigIntValue = (0, binary_js_1.bytesToBigInt)(decryptionAttestation.plaintext);
70
+ return {
71
+ handle: computeResultHandle,
72
+ plaintext: (0, encryption_js_1.bigintToPlaintext)(encryption_js_1.encryptionSchemes.ecies, handleType, bigIntValue),
73
+ covalidatorSignature: decryptionAttestation.signature,
74
+ };
75
+ }
76
+ catch (error) {
77
+ if (error instanceof types_js_1.AttestedComputeError) {
78
+ throw error;
95
79
  }
96
- };
80
+ throw new types_js_1.AttestedComputeError('Failed to perform attested compute', error);
81
+ }
97
82
  }
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZXN0ZWQtY29tcHV0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdHRlc3RlZGNvbXB1dGUvYXR0ZXN0ZWQtY29tcHV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQW9EQSwwREFvRkM7QUF2SUQsK0JBQWtDO0FBQ2xDLGdGQUF3RTtBQUV4RSw0Q0FBeUU7QUFDekUsMENBQWtFO0FBQ2xFLCtEQUFrSDtBQUVsSCw0Q0FBNkM7QUFFN0MsZ0RBQXdFO0FBQ3hFLHlEQUFnRTtBQUVoRSwwQ0FBK0M7QUFDL0MseUNBQXNGO0FBRXRGLE1BQU0sNEJBQTRCLEdBQUcscUJBQXFCLENBQUM7QUFDM0QsTUFBTSwrQkFBK0IsR0FBRyxPQUFPLENBQUM7QUFjaEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsU0FBZ0IsdUJBQXVCLENBQUMsRUFDdEMsNkJBQTZCLEVBQzdCLE9BQU8sRUFDUCxZQUFZLEdBQ2dCO0lBQzVCLE1BQU0sU0FBUyxHQUFHLElBQUEsd0JBQVksRUFBQyw2QkFBNkIsSUFBSSxJQUFBLGtDQUFzQixFQUFDLElBQUEsNEJBQWlCLEVBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXBILE9BQU8sS0FBSyxVQUFVLGVBQWUsQ0FBNkIsRUFDaEUsU0FBUyxFQUNULEVBQUUsRUFDRixZQUFZLEVBQ1osYUFBYSxHQU1kO1FBQ0MsSUFBSSxDQUFDO1lBQ0gsSUFBQSxvQ0FBYyxFQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRTFCLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUU3Qyx1REFBdUQ7WUFDdkQsTUFBTSxhQUFhLEdBQUcsSUFBQSwrQkFBbUIsRUFBQztnQkFDeEMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUM7Z0JBQ3hCLFdBQVcsRUFBRSx3QkFBd0I7Z0JBQ3JDLGlCQUFpQixFQUFFO29CQUNqQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtvQkFDN0IsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7b0JBQ3RDLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO2lCQUMxQztnQkFDRCxPQUFPLEVBQUU7b0JBQ1AsRUFBRSxFQUFFLEVBQUU7b0JBQ04sU0FBUyxFQUFFLFNBQVM7b0JBQ3BCLFlBQVksRUFBRSxJQUFBLDJCQUFlLEVBQUMsZUFBZSxDQUFDO2lCQUMvQztnQkFDRCxVQUFVLEVBQUUsNEJBQTRCO2dCQUN4QyxhQUFhLEVBQUUsK0JBQStCO2FBQy9DLENBQUMsQ0FBQztZQUVILDBCQUEwQjtZQUMxQixNQUFNLGVBQWUsR0FBRyxNQUFNLFlBQVksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7WUFFeEUsTUFBTSxhQUFhLEdBQUcsSUFBQSxpQ0FBaUIsRUFBQyxpQ0FBaUIsQ0FBQyxLQUFLLEVBQUUsSUFBQSx5QkFBYSxFQUFDLFNBQVMsQ0FBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQ2pILE1BQU0sc0JBQXNCLEdBQTJCO2dCQUNyRCxTQUFTLEVBQUUseUNBQXlDO2dCQUNwRCxXQUFXLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPO2dCQUN6QyxFQUFFLEVBQUUsRUFBRTtnQkFDTixTQUFTLEVBQUUsU0FBUztnQkFDcEIsWUFBWSxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDOUMsZUFBZSxFQUFFLElBQUEsaUJBQVUsRUFBQyxlQUFlLENBQUM7YUFDN0MsQ0FBQztZQUVGLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSwyQkFBZ0IsRUFBQyxLQUFLLElBQUksRUFBRTtnQkFDakQsT0FBTyxNQUFNLFNBQVMsQ0FBQyxlQUFlLENBQUMsc0JBQXNCLENBQUMsQ0FBQztZQUNqRSxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFFbEIsTUFBTSxxQkFBcUIsR0FBRyxRQUFRLENBQUMscUJBQXFCLENBQUM7WUFFN0QsSUFBSSxxQkFBcUIsRUFBRSxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ25ELE1BQU0sSUFBSSwrQkFBb0IsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1lBQzdELENBQUM7WUFFRCxNQUFNLG1CQUFtQixHQUFHLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUM7WUFDbkUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQ3pCLE1BQU0sSUFBSSwrQkFBb0IsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1lBQ3pFLENBQUM7WUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFBLHlCQUFhLEVBQUMsbUJBQWdDLENBQUMsQ0FBQztZQUNuRSxNQUFNLFdBQVcsR0FBRyxJQUFBLHlCQUFhLEVBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFbkUsT0FBTztnQkFDTCxNQUFNLEVBQUUsbUJBQWdDO2dCQUN4QyxTQUFTLEVBQUUsSUFBQSxpQ0FBaUIsRUFBQyxpQ0FBaUIsQ0FBQyxLQUFLLEVBQUUsVUFBZSxFQUFFLFdBQVcsQ0FBQztnQkFDbkYsb0JBQW9CLEVBQUUscUJBQXFCLENBQUMsU0FBUzthQUN0RCxDQUFDO1FBQ0osQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLEtBQUssWUFBWSwrQkFBb0IsRUFBRSxDQUFDO2dCQUMxQyxNQUFNLEtBQUssQ0FBQztZQUNkLENBQUM7WUFDRCxNQUFNLElBQUksK0JBQW9CLENBQUMsb0NBQW9DLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDOUUsQ0FBQztJQUNILENBQUMsQ0FBQztBQUNKLENBQUMifQ==
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZXN0ZWQtY29tcHV0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdHRlc3RlZGNvbXB1dGUvYXR0ZXN0ZWQtY29tcHV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXVDQSwwQ0FtRkM7QUF6SEQsK0JBQWtDO0FBQ2xDLGdGQUF3RTtBQUV4RSw0Q0FBeUU7QUFDekUsMENBQWtFO0FBQ2xFLCtEQUFrSDtBQUVsSCw0Q0FBNkM7QUFFN0MsZ0RBQXdFO0FBQ3hFLHlEQUFnRTtBQUVoRSwwQ0FBK0M7QUFDL0MseUNBQXFFO0FBRXJFLE1BQU0sNEJBQTRCLEdBQUcscUJBQXFCLENBQUM7QUFDM0QsTUFBTSwrQkFBK0IsR0FBRyxPQUFPLENBQUM7QUFjaEQ7Ozs7Ozs7R0FPRztBQUNJLEtBQUssVUFBVSxlQUFlLENBQTZCLEVBQ2hFLFNBQVMsRUFDVCxFQUFFLEVBQ0YsWUFBWSxFQUNaLGFBQWEsRUFDYixZQUFZLEVBQ1osNkJBQTZCLEVBQzdCLE9BQU8sR0FTUjtJQUNDLElBQUksQ0FBQztRQUNILE1BQU0sU0FBUyxHQUFHLElBQUEsd0JBQVksRUFBQyw2QkFBNkIsSUFBSSxJQUFBLGtDQUFzQixFQUFDLElBQUEsNEJBQWlCLEVBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BILElBQUEsb0NBQWMsRUFBQyxTQUFTLENBQUMsQ0FBQztRQUUxQixNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFN0MsdURBQXVEO1FBQ3ZELE1BQU0sYUFBYSxHQUFHLElBQUEsK0JBQW1CLEVBQUM7WUFDeEMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDeEIsV0FBVyxFQUFFLHdCQUF3QjtZQUNyQyxpQkFBaUIsRUFBRTtnQkFDakIsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7Z0JBQzdCLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO2dCQUN0QyxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTthQUMxQztZQUNELE9BQU8sRUFBRTtnQkFDUCxFQUFFLEVBQUUsRUFBRTtnQkFDTixTQUFTLEVBQUUsU0FBUztnQkFDcEIsWUFBWSxFQUFFLElBQUEsMkJBQWUsRUFBQyxlQUFlLENBQUM7YUFDL0M7WUFDRCxVQUFVLEVBQUUsNEJBQTRCO1lBQ3hDLGFBQWEsRUFBRSwrQkFBK0I7U0FDL0MsQ0FBQyxDQUFDO1FBRUgsMEJBQTBCO1FBQzFCLE1BQU0sZUFBZSxHQUFHLE1BQU0sWUFBWSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV4RSxNQUFNLGFBQWEsR0FBRyxJQUFBLGlDQUFpQixFQUFDLGlDQUFpQixDQUFDLEtBQUssRUFBRSxJQUFBLHlCQUFhLEVBQUMsU0FBUyxDQUFNLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDakgsTUFBTSxzQkFBc0IsR0FBMkI7WUFDckQsU0FBUyxFQUFFLHlDQUF5QztZQUNwRCxXQUFXLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPO1lBQ3pDLEVBQUUsRUFBRSxFQUFFO1lBQ04sU0FBUyxFQUFFLFNBQVM7WUFDcEIsWUFBWSxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM5QyxlQUFlLEVBQUUsSUFBQSxpQkFBVSxFQUFDLGVBQWUsQ0FBQztTQUM3QyxDQUFDO1FBRUYsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFBLDJCQUFnQixFQUFDLEtBQUssSUFBSSxFQUFFO1lBQ2pELE9BQU8sTUFBTSxTQUFTLENBQUMsZUFBZSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDakUsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRWxCLE1BQU0scUJBQXFCLEdBQUcsUUFBUSxDQUFDLHFCQUFxQixDQUFDO1FBRTdELElBQUkscUJBQXFCLEVBQUUsU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ25ELE1BQU0sSUFBSSwrQkFBb0IsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFFRCxNQUFNLG1CQUFtQixHQUFHLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUM7UUFDbkUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDekIsTUFBTSxJQUFJLCtCQUFvQixDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLElBQUEseUJBQWEsRUFBQyxtQkFBZ0MsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sV0FBVyxHQUFHLElBQUEseUJBQWEsRUFBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVuRSxPQUFPO1lBQ0wsTUFBTSxFQUFFLG1CQUFnQztZQUN4QyxTQUFTLEVBQUUsSUFBQSxpQ0FBaUIsRUFBQyxpQ0FBaUIsQ0FBQyxLQUFLLEVBQUUsVUFBZSxFQUFFLFdBQVcsQ0FBQztZQUNuRixvQkFBb0IsRUFBRSxxQkFBcUIsQ0FBQyxTQUFTO1NBQ3RELENBQUM7SUFDSixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLElBQUksS0FBSyxZQUFZLCtCQUFvQixFQUFFLENBQUM7WUFDMUMsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO1FBQ0QsTUFBTSxJQUFJLCtCQUFvQixDQUFDLG9DQUFvQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzlFLENBQUM7QUFDSCxDQUFDIn0=
@@ -1,16 +1,18 @@
1
1
  import type { Account, Chain, Transport, WalletClient } from 'viem';
2
+ import { HexString } from '../binary.js';
2
3
  import { SupportedChainId } from '../chain.js';
3
- import { EciesScheme } from '../encryption/encryption.js';
4
+ import { EciesScheme, SupportedFheType } from '../encryption/encryption.js';
4
5
  import type { KmsClient } from '../kms/client.js';
5
- import { AttestedDecryptor } from './types.js';
6
+ import type { BackoffConfig } from '../retry.js';
7
+ import { DecryptionAttestation } from './types.js';
6
8
  /**
7
9
  * Validates a handle format.
8
10
  * @param handle - The handle to validate
9
11
  * @throws {AttestedDecryptError} If the handle format is invalid
10
12
  */
11
- export declare function validateHandle(handle: string): void;
13
+ export declare function validateHandle(handle: HexString): void;
12
14
  /**
13
- * Arguments for creating an attested decryptor.
15
+ * Arguments for creating an attested decrypt request.
14
16
  */
15
17
  export interface IncoLiteAttestedDecryptorArgs {
16
18
  /** The wallet used to interact with the blockchain and sign the decrypt request */
@@ -21,20 +23,17 @@ export interface IncoLiteAttestedDecryptorArgs {
21
23
  chainId: SupportedChainId;
22
24
  }
23
25
  /**
24
- * Creates an attested decryptor that can decrypt handles with an attached attestation from the covalidator.
25
- * @param args - The arguments for creating the decryptor
26
- * @returns A function that can decrypt handles using attestation
27
- * @throws {AttestedDecryptError} If the decryptor creation fails
26
+ * Decrypt multiple handles in a single attested request.
27
+ * Returns an array of attestations aligned with the response ordering.
28
28
  *
29
- * @todo Support multiple handles in a single request.
30
- *
31
- * @example
32
- * ```typescript
33
- * const decryptor = await incoLiteAttestedDecryptor({
34
- * walletClient,
35
- * chainId: sepolia,
36
- * });
37
- * const { plaintext, covalidatorSignature } = await decryptor({ handle: '0x...' });
38
- * ```
29
+ * @param args - The arguments for creating the attested decrypt function
30
+ * @returns A function that can decrypt handles and return an attestation
31
+ * @throws {AttestedDecryptError} If the creation fails
39
32
  */
40
- export declare function incoLiteAttestedDecryptor({ kmsConnectRpcEndpointOrClient, chainId, walletClient, }: IncoLiteAttestedDecryptorArgs): AttestedDecryptor<EciesScheme>;
33
+ export declare function attestedDecrypt({ handles, backoffConfig, walletClient, chainId, kmsConnectRpcEndpointOrClient, }: {
34
+ handles: HexString[];
35
+ backoffConfig?: Partial<BackoffConfig> | undefined;
36
+ walletClient: WalletClient<Transport, Chain, Account>;
37
+ chainId: SupportedChainId;
38
+ kmsConnectRpcEndpointOrClient?: string | KmsClient;
39
+ }): Promise<Array<DecryptionAttestation<EciesScheme, SupportedFheType>>>;