@inco/js 0.6.1 → 0.6.9

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 (124) hide show
  1. package/dist/cjs/advancedacl/session-key.d.ts +8 -1
  2. package/dist/cjs/advancedacl/session-key.js +55 -21
  3. package/dist/cjs/attestedcompute/attested-compute.js +11 -4
  4. package/dist/cjs/attesteddecrypt/attested-decrypt.d.ts +38 -1
  5. package/dist/cjs/attesteddecrypt/attested-decrypt.js +49 -6
  6. package/dist/cjs/attesteddecrypt/types.d.ts +6 -1
  7. package/dist/cjs/attesteddecrypt/types.js +1 -1
  8. package/dist/cjs/attestedreveal/attested-reveal.js +9 -7
  9. package/dist/cjs/binary.d.ts +1 -0
  10. package/dist/cjs/binary.js +6 -2
  11. package/dist/cjs/encryption/encryption.d.ts +17 -22
  12. package/dist/cjs/encryption/encryption.js +34 -16
  13. package/dist/cjs/generated/abis/add-two.d.ts +1 -1
  14. package/dist/cjs/generated/abis/add-two.js +1 -1
  15. package/dist/cjs/generated/abis/lightning-preview.d.ts +48 -106
  16. package/dist/cjs/generated/abis/lightning-preview.js +33 -55
  17. package/dist/cjs/generated/abis/lightning.d.ts +55 -116
  18. package/dist/cjs/generated/abis/lightning.js +33 -66
  19. package/dist/cjs/generated/abis/verifier.d.ts +193 -84
  20. package/dist/cjs/generated/abis/verifier.js +151 -61
  21. package/dist/cjs/generated/es/cosmos_proto/cosmos_pb.js +2 -2
  22. package/dist/cjs/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +775 -0
  23. package/dist/cjs/generated/es/inco/covalidator/compute/v1/server_pb.js +261 -0
  24. package/dist/cjs/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +186 -0
  25. package/dist/cjs/generated/es/inco/covalidator/compute/v1/types_pb.js +47 -0
  26. package/dist/cjs/generated/es/inco/fhe/v1/types_pb.js +2 -2
  27. package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +76 -129
  28. package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.js +21 -26
  29. package/dist/cjs/generated/es/inco/kms/lite/v1/types_pb.js +2 -2
  30. package/dist/cjs/generated/lightning.d.ts +0 -32
  31. package/dist/cjs/generated/lightning.js +1 -33
  32. package/dist/cjs/generated/local-node.d.ts +1 -5
  33. package/dist/cjs/generated/local-node.js +2 -6
  34. package/dist/cjs/handle.d.ts +16 -0
  35. package/dist/cjs/handle.js +28 -3
  36. package/dist/cjs/lite/deployments.d.ts +20 -2
  37. package/dist/cjs/lite/deployments.js +1 -1
  38. package/dist/cjs/lite/ecies.d.ts +0 -2
  39. package/dist/cjs/lite/ecies.js +24 -13
  40. package/dist/cjs/lite/hadu.d.ts +3 -23
  41. package/dist/cjs/lite/hadu.js +26 -29
  42. package/dist/cjs/lite/index.d.ts +1 -1
  43. package/dist/cjs/lite/index.js +1 -1
  44. package/dist/cjs/lite/lightning.d.ts +24 -12
  45. package/dist/cjs/lite/lightning.js +62 -27
  46. package/dist/cjs/lite/reencrypt.d.ts +5 -7
  47. package/dist/cjs/lite/reencrypt.js +68 -58
  48. package/dist/cjs/test/mocks.d.ts +12 -0
  49. package/dist/cjs/test/mocks.js +27 -0
  50. package/dist/cjs/viem.d.ts +45 -48
  51. package/dist/esm/advancedacl/session-key.d.ts +8 -1
  52. package/dist/esm/advancedacl/session-key.js +58 -24
  53. package/dist/esm/attestedcompute/attested-compute.js +11 -4
  54. package/dist/esm/attesteddecrypt/attested-decrypt.d.ts +38 -1
  55. package/dist/esm/attesteddecrypt/attested-decrypt.js +51 -8
  56. package/dist/esm/attesteddecrypt/types.d.ts +6 -1
  57. package/dist/esm/attesteddecrypt/types.js +1 -1
  58. package/dist/esm/attestedreveal/attested-reveal.js +9 -7
  59. package/dist/esm/binary.d.ts +1 -0
  60. package/dist/esm/binary.js +5 -2
  61. package/dist/esm/encryption/encryption.d.ts +17 -22
  62. package/dist/esm/encryption/encryption.js +30 -16
  63. package/dist/esm/generated/abis/add-two.d.ts +1 -1
  64. package/dist/esm/generated/abis/add-two.js +1 -1
  65. package/dist/esm/generated/abis/lightning-preview.d.ts +48 -106
  66. package/dist/esm/generated/abis/lightning-preview.js +33 -55
  67. package/dist/esm/generated/abis/lightning.d.ts +55 -116
  68. package/dist/esm/generated/abis/lightning.js +33 -66
  69. package/dist/esm/generated/abis/verifier.d.ts +193 -84
  70. package/dist/esm/generated/abis/verifier.js +151 -61
  71. package/dist/esm/generated/es/cosmos_proto/cosmos_pb.js +2 -2
  72. package/dist/esm/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +775 -0
  73. package/dist/esm/generated/es/inco/covalidator/compute/v1/server_pb.js +258 -0
  74. package/dist/esm/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +186 -0
  75. package/dist/esm/generated/es/inco/covalidator/compute/v1/types_pb.js +44 -0
  76. package/dist/esm/generated/es/inco/fhe/v1/types_pb.js +2 -2
  77. package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +76 -129
  78. package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.js +20 -25
  79. package/dist/esm/generated/es/inco/kms/lite/v1/types_pb.js +2 -2
  80. package/dist/esm/generated/lightning.d.ts +0 -32
  81. package/dist/esm/generated/lightning.js +1 -33
  82. package/dist/esm/generated/local-node.d.ts +1 -5
  83. package/dist/esm/generated/local-node.js +2 -6
  84. package/dist/esm/handle.d.ts +16 -0
  85. package/dist/esm/handle.js +27 -3
  86. package/dist/esm/lite/deployments.d.ts +20 -2
  87. package/dist/esm/lite/deployments.js +1 -1
  88. package/dist/esm/lite/ecies.d.ts +0 -2
  89. package/dist/esm/lite/ecies.js +26 -15
  90. package/dist/esm/lite/hadu.d.ts +3 -23
  91. package/dist/esm/lite/hadu.js +28 -30
  92. package/dist/esm/lite/index.d.ts +1 -1
  93. package/dist/esm/lite/index.js +1 -1
  94. package/dist/esm/lite/lightning.d.ts +24 -12
  95. package/dist/esm/lite/lightning.js +59 -24
  96. package/dist/esm/lite/reencrypt.d.ts +5 -7
  97. package/dist/esm/lite/reencrypt.js +67 -58
  98. package/dist/esm/test/mocks.d.ts +12 -0
  99. package/dist/esm/test/mocks.js +23 -0
  100. package/dist/esm/viem.d.ts +45 -48
  101. package/dist/types/advancedacl/session-key.d.ts +8 -1
  102. package/dist/types/attesteddecrypt/attested-decrypt.d.ts +38 -1
  103. package/dist/types/attesteddecrypt/types.d.ts +6 -1
  104. package/dist/types/binary.d.ts +1 -0
  105. package/dist/types/encryption/encryption.d.ts +17 -22
  106. package/dist/types/generated/abis/add-two.d.ts +1 -1
  107. package/dist/types/generated/abis/lightning-preview.d.ts +48 -106
  108. package/dist/types/generated/abis/lightning.d.ts +55 -116
  109. package/dist/types/generated/abis/verifier.d.ts +193 -84
  110. package/dist/types/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +775 -0
  111. package/dist/types/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +186 -0
  112. package/dist/types/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +76 -129
  113. package/dist/types/generated/lightning.d.ts +0 -32
  114. package/dist/types/generated/local-node.d.ts +1 -5
  115. package/dist/types/handle.d.ts +16 -0
  116. package/dist/types/lite/deployments.d.ts +20 -2
  117. package/dist/types/lite/ecies.d.ts +0 -2
  118. package/dist/types/lite/hadu.d.ts +3 -23
  119. package/dist/types/lite/index.d.ts +1 -1
  120. package/dist/types/lite/lightning.d.ts +24 -12
  121. package/dist/types/lite/reencrypt.d.ts +5 -7
  122. package/dist/types/test/mocks.d.ts +12 -0
  123. package/dist/types/viem.d.ts +45 -48
  124. package/package.json +3 -1
@@ -6,4 +6,4 @@ export * from './ecies.js';
6
6
  export * from './hadu.js';
7
7
  export * from './lightning.js';
8
8
  export * from './reencrypt.js';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGl0ZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGdDQUFnQyxDQUFDO0FBUS9DLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxnQkFBZ0IsQ0FBQyJ9
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGl0ZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGdDQUFnQyxDQUFDO0FBTy9DLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxnQkFBZ0IsQ0FBQyJ9
@@ -1,9 +1,9 @@
1
- import { Account, Chain, Transport, WalletClient } from 'viem';
1
+ import { Account, Chain, PublicClient, Transport, WalletClient } from 'viem';
2
2
  import { AllowanceVoucherWithSig } from '../advancedacl/types.js';
3
3
  import { AttestedComputeOP } from '../attestedcompute/types.js';
4
4
  import { DecryptionAttestation } from '../attesteddecrypt/index.js';
5
5
  import { Address, HexString } from '../binary.js';
6
- import { EciesScheme, PlaintextOf, SupportedFheType } from '../encryption/index.js';
6
+ import { EciesScheme, Encryptor, PlaintextOf, SupportedFheType } from '../encryption/index.js';
7
7
  import { lightningDeployments } from '../generated/lightning.js';
8
8
  import { localNodeLightningConfig } from '../generated/local-node.js';
9
9
  import { LocalNodeEnv } from '../local/index.js';
@@ -26,12 +26,10 @@ export type EncryptionContext = {
26
26
  };
27
27
  export type DeploymentSlice = {
28
28
  executorAddress: string;
29
- eciesPublicKey: string;
30
29
  chainId: number;
31
30
  };
32
31
  export type CustomConfig = {
33
32
  executorAddress: string;
34
- eciesPublicKey: string;
35
33
  chainId: number;
36
34
  covalidatorUrl: string;
37
35
  hostChainRpcUrl?: string;
@@ -46,16 +44,14 @@ export declare class Lightning<T extends DeploymentSlice = DeploymentSlice> {
46
44
  private readonly _deployment;
47
45
  readonly covalidatorUrl: string;
48
46
  readonly executorAddress: Address;
49
- readonly eciesPublicKey: HexString;
50
47
  readonly chainId: bigint;
51
- private readonly encryptor;
52
48
  private readonly ephemeralKeypair;
53
49
  private readonly kmsClient;
54
50
  private constructor();
55
51
  /**
56
52
  * Get a Lightning instance bound to the latest Lightning deployment for the Base Sepolia testnet.
57
53
  */
58
- static baseSepoliaTestnet(): Lightning<Deployment>;
54
+ static baseSepoliaTestnet(): Promise<Lightning<Deployment>>;
59
55
  /**
60
56
  * Get a Lightning instance bound to our canonical Anvil-based test node and test Covalidator node
61
57
  *
@@ -71,7 +67,7 @@ export declare class Lightning<T extends DeploymentSlice = DeploymentSlice> {
71
67
  * corresponding Pepper.
72
68
  *
73
69
  */
74
- static localNode(env?: LocalNodeEnv | LocalNodePepper): Lightning<CustomDeployment>;
70
+ static localNode(env?: LocalNodeEnv | LocalNodePepper): Promise<Lightning<CustomDeployment>>;
75
71
  /**
76
72
  * Get a Lightning instance bound to a local node from a file containing a LocalNodeEnv environment .
77
73
  *
@@ -83,14 +79,15 @@ export declare class Lightning<T extends DeploymentSlice = DeploymentSlice> {
83
79
  *
84
80
  * @param id this is an object containing either the pair of name and chainId or the executorAddress and chainId
85
81
  */
86
- static at(id: DeploymentId): Lightning<Deployment>;
82
+ static at(id: DeploymentId): Promise<Lightning<Deployment>>;
87
83
  /**
88
84
  * Get a Lightning deployment for a local or custom node
89
85
  *
90
86
  * @param config this is an object containing the executorAddress, eciesPublicKey, chainId and covalidatorUrl.
91
87
  * additional fields past will be made available as part of the `deployment` property.
92
88
  */
93
- static custom<T extends CustomConfig>(config: T): Lightning<DeploymentSlice & T>;
89
+ static custom<T extends CustomConfig>(config: T): Promise<Lightning<DeploymentSlice & T>>;
90
+ static getEciesPublicKey(client: PublicClient, executorAddress: Address): Promise<HexString>;
94
91
  /**
95
92
  * Get the latest deployment for a given pepper, which usually denotes a family of deployments distinct from their
96
93
  * version such as 'devnet', 'testnet', 'mainnet', etc.
@@ -107,7 +104,7 @@ export declare class Lightning<T extends DeploymentSlice = DeploymentSlice> {
107
104
  * @param pepper the pepper to use to filter the deployments
108
105
  * @param chainId the chainId to use to filter the deployments
109
106
  */
110
- static latest<P extends Pepper>(pepper: P, chainId: ChainId): Lightning<Deployment>;
107
+ static latest<P extends Pepper>(pepper: P, chainId: ChainId): Promise<Lightning<Deployment>>;
111
108
  get deployment(): T;
112
109
  /**
113
110
  * Encrypt a value using the public ECIES key of the Lightning deployment.
@@ -116,7 +113,7 @@ export declare class Lightning<T extends DeploymentSlice = DeploymentSlice> {
116
113
  * @param accountAddress the address of the account interacting with the dapp contract, normally an Externally Owned Account (EOA)
117
114
  * @param dappAddress the address of the dapp contract that interacts with the Inco Lightning contract or library
118
115
  */
119
- encrypt<T extends SupportedNativeType>(value: T, { accountAddress, dappAddress }: EncryptionContext): Promise<HexString>;
116
+ encrypt<T extends SupportedNativeType>(value: T, { accountAddress, dappAddress }: EncryptionContext, encryptor: Encryptor<EciesScheme>): Promise<HexString>;
120
117
  /**
121
118
  * Obtain a reencryptor for a particular Externally Owned Account (EOA) to request decrypted values.
122
119
  * The account associated with the walletClient must have permissions to decrypt the handle or ciphertext passed
@@ -125,6 +122,7 @@ export declare class Lightning<T extends DeploymentSlice = DeploymentSlice> {
125
122
  * @param walletClient the wallet client to use for signing the reencrypt request.
126
123
  */
127
124
  getReencryptor(walletClient: WalletClient<Transport, Chain, Account>): Promise<Reencryptor<EciesScheme>>;
125
+ getEncryptor(eciesPubkey: HexString): Encryptor<EciesScheme>;
128
126
  /**
129
127
  * Grants a session key allowance voucher for secure reencryption operations.
130
128
  *
@@ -245,6 +243,20 @@ export declare class Lightning<T extends DeploymentSlice = DeploymentSlice> {
245
243
  * @returns A promise that resolves to a compute attestation.
246
244
  */
247
245
  attestedCompute(ephemeralKeypair: Secp256k1Keypair, lhsHandle: HexString, op: AttestedComputeOP, rhsPlaintext: bigint | boolean, allowanceVoucherWithSig: AllowanceVoucherWithSig, backoffConfig?: Partial<BackoffConfig>): Promise<DecryptionAttestation<EciesScheme, SupportedFheType>>;
246
+ /**
247
+ * Get an decryption of publicly revealed handles.
248
+ *
249
+ * @param handles - The handles to decrypt
250
+ * @param backoffConfig - The backoff configuration for the attested decrypt request
251
+ * @returns The decryption attestations
252
+ *
253
+ * @example
254
+ * ```typescript
255
+ * const response = await lightning.attestedReveal([handle1, handle2]);
256
+ * const { plaintext, covalidatorSignature } = response[0];
257
+ * ```
258
+ */
259
+ attestedReveal(handles: HexString[], backoffConfig?: Partial<BackoffConfig>): Promise<Array<DecryptionAttestation<EciesScheme, SupportedFheType>>>;
248
260
  /**
249
261
  * Get the GRPC endpoint for the covalidator that services this deployment.
250
262
  */
@@ -1,11 +1,14 @@
1
1
  import * as fs from 'fs/promises';
2
- import { hexToBytes } from 'viem';
2
+ import { getContract, hexToBytes, } from 'viem';
3
3
  import { baseSepolia } from 'viem/chains';
4
4
  import { grantSessionKey, sessionKeyAttestedCompute, sessionKeyAttestedDecrypt, sessionKeyReencryptor, updateActiveVouchersSessionNonce, } from '../advancedacl/session-key.js';
5
5
  import { attestedCompute } from '../attestedcompute/attested-compute.js';
6
6
  import { attestedDecrypt } from '../attesteddecrypt/attested-decrypt.js';
7
+ import { attestedReveal } from '../attestedreveal/attested-reveal.js';
7
8
  import { HexString, parseAddress } from '../binary.js';
8
9
  import { encryptionSchemes, } from '../encryption/index.js';
10
+ import { incoLightningAbi } from '../generated/abis/lightning.js';
11
+ import { incoVerifierAbi } from '../generated/abis/verifier.js';
9
12
  import { lightningDeployments } from '../generated/lightning.js';
10
13
  import { localNodeLightningConfig } from '../generated/local-node.js';
11
14
  import { handleTypes } from '../handle.js';
@@ -22,30 +25,22 @@ export class Lightning {
22
25
  _deployment;
23
26
  covalidatorUrl;
24
27
  executorAddress;
25
- eciesPublicKey;
26
28
  chainId;
27
- encryptor;
28
29
  ephemeralKeypair;
29
30
  kmsClient;
30
31
  constructor(_deployment, covalidatorUrl) {
31
32
  this._deployment = _deployment;
32
33
  this.covalidatorUrl = covalidatorUrl;
33
34
  this.executorAddress = parseAddress(_deployment.executorAddress);
34
- this.eciesPublicKey = parse(HexString, _deployment.eciesPublicKey);
35
35
  this.chainId = BigInt(_deployment.chainId);
36
36
  this.ephemeralKeypair = generateSecp256k1Keypair();
37
37
  this.kmsClient = getKmsClient(covalidatorUrl);
38
- this.encryptor = getEciesEncryptor({
39
- scheme: encryptionSchemes.ecies,
40
- pubKeyA: decodeSecp256k1PublicKey(hexToBytes(parse(HexString, _deployment.eciesPublicKey))),
41
- privKeyB: this.ephemeralKeypair,
42
- });
43
38
  }
44
39
  /**
45
40
  * Get a Lightning instance bound to the latest Lightning deployment for the Base Sepolia testnet.
46
41
  */
47
- static baseSepoliaTestnet() {
48
- return Lightning.latest('testnet', baseSepolia.id);
42
+ static async baseSepoliaTestnet() {
43
+ return await Lightning.latest('testnet', baseSepolia.id);
49
44
  }
50
45
  /**
51
46
  * Get a Lightning instance bound to our canonical Anvil-based test node and test Covalidator node
@@ -62,15 +57,15 @@ export class Lightning {
62
57
  * corresponding Pepper.
63
58
  *
64
59
  */
65
- static localNode(env) {
60
+ static async localNode(env) {
66
61
  if (!env) {
67
- return Lightning.custom(localNodeLightningConfig[DefaultPepper]);
62
+ return await Lightning.custom(localNodeLightningConfig[DefaultPepper]);
68
63
  }
69
64
  if (typeof env === 'string') {
70
- return Lightning.custom(localNodeLightningConfig[env]);
65
+ return await Lightning.custom(localNodeLightningConfig[env]);
71
66
  }
72
67
  const conf = localNodeLightningConfig[DefaultPepper];
73
- return Lightning.custom({
68
+ return await Lightning.custom({
74
69
  // We assume that we always run a local node as the default anvil node
75
70
  chainId: env.COVALIDATOR_HOST_CHAIN_ID
76
71
  ? Number(env.COVALIDATOR_HOST_CHAIN_ID)
@@ -81,7 +76,6 @@ export class Lightning {
81
76
  'http://localhost:8545',
82
77
  // These variables vary per environment
83
78
  executorAddress: env.EXECUTOR_ADDRESS,
84
- eciesPublicKey: env.ECIES_PUBLIC_KEY,
85
79
  senderPrivateKey: env.SENDER_PRIVATE_KEY,
86
80
  });
87
81
  }
@@ -93,14 +87,14 @@ export class Lightning {
93
87
  static async localNodeFromEnv(filePath) {
94
88
  const buf = filePath ? await fs.readFile(filePath) : undefined;
95
89
  const env = parseLocalEnv(buf);
96
- return Lightning.localNode(env);
90
+ return await Lightning.localNode(env);
97
91
  }
98
92
  /**
99
93
  * Get a Lightning deployment by name or executor address on a particular chain.
100
94
  *
101
95
  * @param id this is an object containing either the pair of name and chainId or the executorAddress and chainId
102
96
  */
103
- static at(id) {
97
+ static async at(id) {
104
98
  const deployment = this.isIdByName(id)
105
99
  ? lightningDeployments.find((d) => d.name === id.name && d.chainId === id.chainId)
106
100
  : lightningDeployments.find((d) => d.executorAddress === id.executorAddress &&
@@ -116,9 +110,23 @@ export class Lightning {
116
110
  * @param config this is an object containing the executorAddress, eciesPublicKey, chainId and covalidatorUrl.
117
111
  * additional fields past will be made available as part of the `deployment` property.
118
112
  */
119
- static custom(config) {
113
+ static async custom(config) {
120
114
  return new Lightning(config, config.covalidatorUrl);
121
115
  }
116
+ static async getEciesPublicKey(client, executorAddress) {
117
+ const incoLightningContract = getContract({
118
+ abi: incoLightningAbi,
119
+ address: executorAddress,
120
+ client,
121
+ });
122
+ const incoVerifierAddress = await incoLightningContract.read.incoVerifier();
123
+ const incoVerifier = getContract({
124
+ abi: incoVerifierAbi,
125
+ address: incoVerifierAddress,
126
+ client,
127
+ });
128
+ return await incoVerifier.read.eciesPubkey();
129
+ }
122
130
  /**
123
131
  * Get the latest deployment for a given pepper, which usually denotes a family of deployments distinct from their
124
132
  * version such as 'devnet', 'testnet', 'mainnet', etc.
@@ -144,8 +152,8 @@ export class Lightning {
144
152
  * @param pepper the pepper to use to filter the deployments
145
153
  * @param chainId the chainId to use to filter the deployments
146
154
  */
147
- static latest(pepper, chainId) {
148
- return Lightning.at(Lightning.latestDeployment(pepper, chainId));
155
+ static async latest(pepper, chainId) {
156
+ return await Lightning.at(Lightning.latestDeployment(pepper, chainId));
149
157
  }
150
158
  /*
151
159
  * Get the latest deployment for a given pepper, which usually denotes a family of deployments distinct from their
@@ -161,8 +169,8 @@ export class Lightning {
161
169
  * @param accountAddress the address of the account interacting with the dapp contract, normally an Externally Owned Account (EOA)
162
170
  * @param dappAddress the address of the dapp contract that interacts with the Inco Lightning contract or library
163
171
  */
164
- async encrypt(value, { accountAddress, dappAddress }) {
165
- const { ciphertext } = await this.encryptor({
172
+ async encrypt(value, { accountAddress, dappAddress }, encryptor) {
173
+ const { ciphertext } = await encryptor({
166
174
  plaintext: Lightning.plaintextFromValue(value),
167
175
  context: {
168
176
  hostChainId: this.chainId,
@@ -188,6 +196,12 @@ export class Lightning {
188
196
  ephemeralKeypair: this.ephemeralKeypair,
189
197
  });
190
198
  }
199
+ getEncryptor(eciesPubkey) {
200
+ return getEciesEncryptor({
201
+ pubKeyA: decodeSecp256k1PublicKey(hexToBytes(parse(HexString, eciesPubkey))),
202
+ privKeyB: this.ephemeralKeypair,
203
+ });
204
+ }
191
205
  /**
192
206
  * Grants a session key allowance voucher for secure reencryption operations.
193
207
  *
@@ -320,6 +334,27 @@ export class Lightning {
320
334
  backoffConfig,
321
335
  });
322
336
  }
337
+ /**
338
+ * Get an decryption of publicly revealed handles.
339
+ *
340
+ * @param handles - The handles to decrypt
341
+ * @param backoffConfig - The backoff configuration for the attested decrypt request
342
+ * @returns The decryption attestations
343
+ *
344
+ * @example
345
+ * ```typescript
346
+ * const response = await lightning.attestedReveal([handle1, handle2]);
347
+ * const { plaintext, covalidatorSignature } = response[0];
348
+ * ```
349
+ */
350
+ attestedReveal(handles, backoffConfig) {
351
+ return attestedReveal({
352
+ handles,
353
+ backoffConfig,
354
+ chainId: Number(this.chainId),
355
+ kmsConnectRpcEndpointOrClient: this.kmsClient,
356
+ });
357
+ }
323
358
  /**
324
359
  * Get the GRPC endpoint for the covalidator that services this deployment.
325
360
  */
@@ -350,4 +385,4 @@ export class Lightning {
350
385
  }
351
386
  }
352
387
  }
353
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRuaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpdGUvbGlnaHRuaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sRUFBa0IsVUFBVSxFQUEyQixNQUFNLE1BQU0sQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFDLE9BQU8sRUFDTCxlQUFlLEVBQ2YseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6QixxQkFBcUIsRUFDckIsZ0NBQWdDLEdBQ2pDLE1BQU0sK0JBQStCLENBQUM7QUFFdkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXpFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUV6RSxPQUFPLEVBQVcsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVoRSxPQUFPLEVBRUwsaUJBQWlCLEdBSWxCLE1BQU0sd0JBQXdCLENBQUM7QUFFaEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMzQyxPQUFPLEVBQWdCLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR2hFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDckMsT0FBTyxFQUNMLHdCQUF3QixFQUN4Qix3QkFBd0IsRUFDeEIsaUJBQWlCLEdBRWxCLE1BQU0sWUFBWSxDQUFDO0FBQ3BCLE9BQU8sRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQTZCbkUsTUFBTSxhQUFhLEdBQW9CLFNBQVMsQ0FBQztBQTJCakQ7OztH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
388
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRuaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpdGUvbGlnaHRuaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sRUFHTCxXQUFXLEVBQ1gsVUFBVSxHQUlYLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLEVBQ0wsZUFBZSxFQUNmLHlCQUF5QixFQUN6Qix5QkFBeUIsRUFDekIscUJBQXFCLEVBQ3JCLGdDQUFnQyxHQUNqQyxNQUFNLCtCQUErQixDQUFDO0FBRXZDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUV6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFekUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3RFLE9BQU8sRUFBVyxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRWhFLE9BQU8sRUFFTCxpQkFBaUIsR0FJbEIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFaEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMzQyxPQUFPLEVBQWdCLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR2hFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDckMsT0FBTyxFQUNMLHdCQUF3QixFQUN4Qix3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
@@ -1,10 +1,9 @@
1
1
  import { Client } from '@connectrpc/connect';
2
- import { Account, Chain, Hex, Transport, WalletClient } from 'viem';
2
+ import { Account, Chain, Transport, WalletClient } from 'viem';
3
3
  import { SupportedChain } from '../chain.js';
4
4
  import { EciesScheme, PlaintextOf, SupportedFheType } from '../encryption/encryption.js';
5
- import { KmsService, ReencryptResponse } from '../generated/es/inco/kms/lite/v1/kms_service_pb.js';
5
+ import { AttestedDecryptResponse, DecryptionAttestation as DecryptionAttestationProto, KmsService } from '../generated/es/inco/kms/lite/v1/kms_service_pb.js';
6
6
  import { Handle } from '../handle.js';
7
- import type { EIP712 } from '../reencryption/eip712.js';
8
7
  import type { Reencryptor, ReencryptorArgs } from '../reencryption/types.js';
9
8
  import { Secp256k1Keypair } from './ecies.js';
10
9
  export interface IncoLiteReencryptorArgs extends ReencryptorArgs {
@@ -12,12 +11,11 @@ export interface IncoLiteReencryptorArgs extends ReencryptorArgs {
12
11
  kmsConnectRpcEndpointOrClient?: string | Client<typeof KmsService>;
13
12
  ephemeralKeypair?: Secp256k1Keypair;
14
13
  }
15
- export declare function reencryptEIP712(chainId: bigint, ephemeralPubKey: Uint8Array): EIP712<{
16
- publicKey: Hex;
17
- }>;
18
14
  export declare function incoLiteReencryptor({ kmsConnectRpcEndpointOrClient, chainId, walletClient, ephemeralKeypair, }: IncoLiteReencryptorArgs): Promise<Reencryptor<EciesScheme>>;
19
15
  export declare function getKmsClient(kmsConnectRpcEndpointOrClient: string | Client<typeof KmsService>): Client<typeof KmsService>;
20
- export declare function decryptGrpcResponse<T extends SupportedFheType>(response: ReencryptResponse, ephemeralKeypair: Secp256k1Keypair, handle: Handle): Promise<PlaintextOf<1, T>>;
16
+ export declare function decryptGrpcResponse<T extends SupportedFheType>(response: AttestedDecryptResponse, ephemeralKeypair: Secp256k1Keypair, handle: Handle): Promise<PlaintextOf<1, T>>;
17
+ export declare function decryptGrpcDecryptionAttestation(attestation: DecryptionAttestationProto, reencryptKeypair: Secp256k1Keypair): Promise<DecryptionAttestationProto>;
18
+ export declare function decryptGrpcDecryptResponse(response: AttestedDecryptResponse, reencryptKeypair: Secp256k1Keypair): Promise<AttestedDecryptResponse>;
21
19
  export declare function defaultCovalidatorGrpc(chain: SupportedChain): string;
22
20
  export declare function lightningDevnetCovalidatorGrpc(chain: SupportedChain): string;
23
21
  export declare function lightningTestnetCovalidatorGrpc(chain: SupportedChain): string;
@@ -1,37 +1,13 @@
1
1
  import { create } from '@bufbuild/protobuf';
2
2
  import { createClient } from '@connectrpc/connect';
3
3
  import { createConnectTransport } from '@connectrpc/connect-web';
4
- import { bytesToHex, hexToBytes, } from 'viem';
4
+ import { attestedDecrypt } from '../attesteddecrypt/attested-decrypt.js';
5
5
  import { bytesToBigInt } from '../binary.js';
6
6
  import { getSupportedChain } from '../chain.js';
7
7
  import { bigintToPlaintext, encryptionSchemes, } from '../encryption/encryption.js';
8
- import { KmsService, ReencryptRequestSchema, } from '../generated/es/inco/kms/lite/v1/kms_service_pb.js';
9
- import { HandleWithProofSchema } from '../generated/es/inco/kms/lite/v1/types_pb.js';
8
+ import { AttestedDecryptResponseSchema, DecryptionAttestationSchema, KmsService, PlaintextSchema, } from '../generated/es/inco/kms/lite/v1/kms_service_pb.js';
10
9
  import { getHandleType } from '../handle.js';
11
- import { createEIP712Payload } from '../reencryption/eip712.js';
12
- import { retryWithBackoff } from '../retry.js';
13
10
  import { decrypt, generateSecp256k1Keypair, } from './ecies.js';
14
- // The domain constants used for basic reencrypts.
15
- // Note: for advanced ACL, since the signature is checked on-chain, the domain
16
- // and version must match the ones used in the contract. For basic ones, we use
17
- // a domain different than the one used on-chain
18
- const BASIC_REENCRYPT_DOMAIN = {
19
- name: 'IncoReencryption',
20
- version: '0.1.0',
21
- };
22
- // Create an EIP712 payload for the Inco Lite basic reencrypt.
23
- export function reencryptEIP712(chainId, ephemeralPubKey) {
24
- return createEIP712Payload({
25
- chainId,
26
- primaryType: 'ReencryptionRequest',
27
- primaryTypeFields: [{ name: 'publicKey', type: 'bytes' }],
28
- message: {
29
- publicKey: bytesToHex(ephemeralPubKey),
30
- },
31
- domainName: BASIC_REENCRYPT_DOMAIN.name,
32
- domainVersion: BASIC_REENCRYPT_DOMAIN.version,
33
- });
34
- }
35
11
  // Returns the Inco Lite Reencryptor, which can reencrypt a handle using the
36
12
  // Basic ACL.
37
13
  export async function incoLiteReencryptor({ kmsConnectRpcEndpointOrClient, chainId, walletClient, ephemeralKeypair, }) {
@@ -40,40 +16,21 @@ export async function incoLiteReencryptor({ kmsConnectRpcEndpointOrClient, chain
40
16
  if (!ephemeralKeypair) {
41
17
  ephemeralKeypair = await generateSecp256k1Keypair();
42
18
  }
43
- // Sign the EIP712 attesting that the user has access to the private key
44
- // corresponding to the ephemeral public key.
45
- const eip712Payload = reencryptEIP712(chainId, ephemeralKeypair.encodePublicKey());
46
- // Using browser extensions, this step will prompt the user to sign the
47
- // payload.
48
- const eip712Signature = await walletClient.signTypedData(eip712Payload);
49
19
  return async function reencrypt({ handle }, backoffConfig) {
50
20
  const ephemeralPubKey = ephemeralKeypair.encodePublicKey();
51
- const reencryptRequest = create(ReencryptRequestSchema, {
52
- userAddress: walletClient.account.address,
53
- ephemeralPubKey,
54
- eip712Signature: hexToBytes(eip712Signature),
55
- handlesWithProofs: [
56
- create(HandleWithProofSchema, {
57
- handle,
58
- aclProof: {
59
- proof: {
60
- case: 'incoLiteBasicAclProof',
61
- value: {},
62
- },
63
- },
64
- }),
65
- ],
21
+ const response = await attestedDecrypt({
22
+ chainId: getSupportedChain(chainId).id,
23
+ walletClient,
24
+ kmsConnectRpcEndpointOrClient: kmsClient,
25
+ handles: [handle],
26
+ backoffConfig,
27
+ reencryptPubKey: ephemeralPubKey,
28
+ reencryptKeypair: ephemeralKeypair,
66
29
  });
67
- try {
68
- return await retryWithBackoff(async () => {
69
- const response = await kmsClient.reencrypt(reencryptRequest);
70
- return decryptGrpcResponse(response, ephemeralKeypair, handle);
71
- }, backoffConfig);
72
- }
73
- catch (error) {
74
- console.log(error);
75
- throw error;
30
+ if (response.length !== 1) {
31
+ throw new Error(`Expected 1 result, got ${response.length}`);
76
32
  }
33
+ return response[0].plaintext;
77
34
  };
78
35
  }
79
36
  // Helper function to get a KMS client from a string or a Client instance.
@@ -90,7 +47,18 @@ export function getKmsClient(kmsConnectRpcEndpointOrClient) {
90
47
  // Even though the proto specifies a list of ciphertexts, our JS SDK
91
48
  // currently only supports a single ciphertext.
92
49
  export async function decryptGrpcResponse(response, ephemeralKeypair, handle) {
93
- const reencryptedCt = response.payload?.userCiphertexts[0];
50
+ if (response.decryptionAttestations.length === 0) {
51
+ throw new Error('No decryption attestations in the response');
52
+ }
53
+ const att = response.decryptionAttestations[0];
54
+ if (att.value === undefined) {
55
+ throw new Error('No value in attestation');
56
+ }
57
+ if (att.value.case !== 'reencryption') {
58
+ throw new Error(`Unexpected attestation type: ${att.value.case}, expected 'reencryption'`);
59
+ }
60
+ const reencryption = att.value.value;
61
+ const reencryptedCt = reencryption.userCiphertext;
94
62
  if (!reencryptedCt) {
95
63
  throw new Error('No reencrypted ciphertext in the response');
96
64
  }
@@ -98,6 +66,47 @@ export async function decryptGrpcResponse(response, ephemeralKeypair, handle) {
98
66
  const plaintext = bytesToBigInt(plaintextBytes);
99
67
  return bigintToPlaintext(encryptionSchemes.ecies, getHandleType(handle), plaintext);
100
68
  }
69
+ // A helper function that takes in a DecryptionAttestation message containing reencryption,
70
+ // decrypts it using the provided reencryptKeypair, and returns a DecryptionAttestation message containing a plaintext.
71
+ export async function decryptGrpcDecryptionAttestation(attestation, reencryptKeypair) {
72
+ if (attestation.value === undefined) {
73
+ throw new Error('No value in attestation');
74
+ }
75
+ if (attestation.value.case !== 'reencryption') {
76
+ return Promise.resolve(attestation);
77
+ }
78
+ const reencryption = attestation.value.value;
79
+ const reencryptedCt = reencryption.userCiphertext;
80
+ if (!reencryptedCt) {
81
+ throw new Error('No reencrypted ciphertext in the response');
82
+ }
83
+ const plaintextBytes = await decrypt(reencryptKeypair, reencryptedCt.ciphertext);
84
+ return create(DecryptionAttestationSchema, {
85
+ handle: attestation.handle,
86
+ value: {
87
+ case: 'plaintext',
88
+ value: create(PlaintextSchema, {
89
+ value: plaintextBytes,
90
+ }),
91
+ },
92
+ signature: attestation.signature,
93
+ });
94
+ }
95
+ // A helper function that takes in an AttestedDecryptResponse message containing reencryption attestations,
96
+ // decrypts them using the provided reencryptKeypair, and returns an AttestedDecryptResponse message containing plaintext attestations.
97
+ export async function decryptGrpcDecryptResponse(response, reencryptKeypair) {
98
+ if (response.decryptionAttestations.length === 0) {
99
+ throw new Error('No decryption attestations in the response');
100
+ }
101
+ // For each attestation in the response, decrypt it
102
+ const decryptedAttestations = await Promise.all(response.decryptionAttestations.map(async (attestation) => {
103
+ return await decryptGrpcDecryptionAttestation(attestation, reencryptKeypair);
104
+ }));
105
+ // Return new response with decrypted attestations
106
+ return create(AttestedDecryptResponseSchema, {
107
+ decryptionAttestations: decryptedAttestations,
108
+ });
109
+ }
101
110
  // Helper function to return the default gRPC endpoint for the covalidator.
102
111
  // Currently, this returns the covalidator for the Inco Lightning public testnet.
103
112
  export function defaultCovalidatorGrpc(chain) {
@@ -119,4 +128,4 @@ function camelToDashCase(str) {
119
128
  function getCovalidatorGrpcHelper(chain, network, cluster) {
120
129
  return `https://grpc.${camelToDashCase(chain.name)}.${cluster}.${network}.inco.org`;
121
130
  }
122
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVlbmNyeXB0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpdGUvcmVlbmNyeXB0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQVUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxFQUVMLFVBQVUsRUFHVixVQUFVLEdBR1gsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxpQkFBaUIsRUFBa0IsTUFBTSxhQUFhLENBQUM7QUFDaEUsT0FBTyxFQUNMLGlCQUFpQixFQUVqQixpQkFBaUIsR0FHbEIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQ0wsVUFBVSxFQUVWLHNCQUFzQixHQUV2QixNQUFNLG9EQUFvRCxDQUFDO0FBQzVELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxhQUFhLEVBQVUsTUFBTSxjQUFjLENBQUM7QUFFckQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFPaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFDTCxPQUFPLEVBQ1Asd0JBQXdCLEdBRXpCLE1BQU0sWUFBWSxDQUFDO0FBaUJwQixrREFBa0Q7QUFDbEQsOEVBQThFO0FBQzlFLCtFQUErRTtBQUMvRSxnREFBZ0Q7QUFDaEQsTUFBTSxzQkFBc0IsR0FBRztJQUM3QixJQUFJLEVBQUUsa0JBQWtCO0lBQ3hCLE9BQU8sRUFBRSxPQUFPO0NBQ2pCLENBQUM7QUFFRiw4REFBOEQ7QUFDOUQsTUFBTSxVQUFVLGVBQWUsQ0FDN0IsT0FB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
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVlbmNyeXB0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpdGUvcmVlbmNyeXB0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQVUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQWEsTUFBTSxjQUFjLENBQUM7QUFDeEQsT0FBTyxFQUFFLGlCQUFpQixFQUFrQixNQUFNLGFBQWEsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsaUJBQWlCLEVBRWpCLGlCQUFpQixHQUdsQixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFFTCw2QkFBNkIsRUFFN0IsMkJBQTJCLEVBQzNCLFVBQVUsRUFDVixlQUFlLEdBRWhCLE1BQU0sb0RBQW9ELENBQUM7QUFDNUQsT0FBTyxFQUFFLGFBQWEsRUFBVSxNQUFNLGNBQWMsQ0FBQztBQU9yRCxPQUFPLEVBQ0wsT0FBTyxFQUNQLHdCQUF3QixHQUV6QixNQUFNLFlBQVksQ0FBQztBQWlCcEIsNEVBQTRFO0FBQzVFLGFBQWE7QUFDYixNQUFNLENBQUMsS0FBSyxVQUFVLG1CQUFtQixDQUFDLEVBQ3hDLDZCQUE2QixFQUM3QixPQUFPLEVBQ1AsWUFBWSxFQUNaLGdCQUFnQixHQUNRO0lBQ3hCLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FDNUIsNkJBQTZCO1FBQzNCLHNCQUFzQixDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQ3JELENBQUM7SUFDRixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN0QixnQkFBZ0IsR0FBRyxNQUFNLHdCQUF3QixFQUFFLENBQUM7SUFDdEQsQ0FB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
@@ -0,0 +1,12 @@
1
+ import { Account, Chain, Transport, WalletClient } from 'viem';
2
+ import { vi } from 'vitest';
3
+ import { KmsClient } from '../kms/client.js';
4
+ interface MinimalKmsClient {
5
+ attestedCompute: ReturnType<typeof vi.fn>;
6
+ attestedDecrypt: ReturnType<typeof vi.fn>;
7
+ key: ReturnType<typeof vi.fn>;
8
+ reencrypt: ReturnType<typeof vi.fn>;
9
+ }
10
+ export declare function createMockKmsClient(): MinimalKmsClient & KmsClient;
11
+ export declare function createTestWalletClient(): WalletClient<Transport, Chain, Account>;
12
+ export {};
@@ -0,0 +1,23 @@
1
+ import { createWalletClient, http, } from 'viem';
2
+ import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts';
3
+ import { sepolia } from 'viem/chains';
4
+ import { vi } from 'vitest';
5
+ // Create a mock that satisfies our minimal interface
6
+ export function createMockKmsClient() {
7
+ return {
8
+ attestedCompute: vi.fn(),
9
+ attestedDecrypt: vi.fn(),
10
+ key: vi.fn(),
11
+ reencrypt: vi.fn(),
12
+ };
13
+ }
14
+ // Create a real wallet client for testing
15
+ export function createTestWalletClient() {
16
+ const account = privateKeyToAccount(generatePrivateKey());
17
+ return createWalletClient({
18
+ chain: sepolia, // Arbitrary chain, not relevant to test
19
+ transport: http('UNUSED IN TEST'),
20
+ account,
21
+ });
22
+ }
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdC9tb2Nrcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsa0JBQWtCLEVBQ2xCLElBQUksR0FHTCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFZNUIscURBQXFEO0FBQ3JELE1BQU0sVUFBVSxtQkFBbUI7SUFDakMsT0FBTztRQUNMLGVBQWUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3hCLGVBQWUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3hCLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ1osU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7S0FDYSxDQUFDO0FBQ3BDLENBQUM7QUFFRCwwQ0FBMEM7QUFDMUMsTUFBTSxVQUFVLHNCQUFzQjtJQUtwQyxNQUFNLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7SUFDMUQsT0FBTyxrQkFBa0IsQ0FBQztRQUN4QixLQUFLLEVBQUUsT0FBTyxFQUFFLHdDQUF3QztRQUN4RCxTQUFTLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQ2pDLE9BQU87S0FDUixDQUFDLENBQUM7QUFDTCxDQUFDIn0=