@inco/js 0.1.35 → 0.1.37

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 (108) hide show
  1. package/README.md +20 -0
  2. package/dist/binary.js +32 -47
  3. package/dist/chain.js +7 -11
  4. package/dist/encryption/encryption.js +54 -62
  5. package/dist/encryption/index.cjs +24706 -0
  6. package/dist/encryption/index.js +2 -18
  7. package/dist/encryption/index.mjs +25787 -0
  8. package/dist/fhevm/fhe-environment.js +6 -9
  9. package/dist/fhevm/fhevm.js +34 -40
  10. package/dist/fhevm/index.cjs +87 -0
  11. package/dist/fhevm/index.js +2 -18
  12. package/dist/fhevm/index.mjs +90 -0
  13. package/dist/fhevm/reencrypt.js +33 -37
  14. package/dist/fhevm/tfhe.js +79 -87
  15. package/dist/fhevm/types.js +13 -16
  16. package/dist/generated/abis/addTwo.js +2 -5
  17. package/dist/generated/abis/inco-fhevm.js +47 -50
  18. package/dist/generated/abis/index.cjs +12493 -0
  19. package/dist/generated/abis/index.js +3 -19
  20. package/dist/generated/abis/index.mjs +12496 -0
  21. package/dist/generated/abis/lightning.d.ts +1361 -115
  22. package/dist/generated/abis/lightning.js +1043 -140
  23. package/dist/generated/es/cosmos/ics23/v1/proofs_pb.js +22 -25
  24. package/dist/generated/es/cosmos/msg/v1/msg_pb.js +6 -9
  25. package/dist/generated/es/cosmos_proto/cosmos_pb.js +18 -21
  26. package/dist/generated/es/google/api/annotations_pb.js +6 -9
  27. package/dist/generated/es/google/api/http_pb.js +6 -9
  28. package/dist/generated/es/inco/fhe/v1/events_pb.js +7 -10
  29. package/dist/generated/es/inco/fhe/v1/genesis_pb.js +12 -15
  30. package/dist/generated/es/inco/fhe/v1/query_pb.js +25 -28
  31. package/dist/generated/es/inco/fhe/v1/tx_pb.js +25 -28
  32. package/dist/generated/es/inco/fhe/v1/types_pb.js +19 -22
  33. package/dist/generated/es/inco/kms/lite/v1/kms_service_pb.js +11 -14
  34. package/dist/generated/es/inco/kms/lite/v1/types_pb.js +10 -13
  35. package/dist/generated/es/inco/preflight/v1/genesis_pb.js +6 -9
  36. package/dist/generated/es/inco/preflight/v1/query_pb.js +11 -14
  37. package/dist/generated/es/inco/preflight/v1/tx_pb.js +13 -16
  38. package/dist/generated/es/inco/preflight/v1/types_pb.js +8 -11
  39. package/dist/generated/es/kms/base_pb.js +35 -38
  40. package/dist/generated/es/sf/ethereum/type/v2/type_pb.js +43 -46
  41. package/dist/generated/fhe-environments.js +2 -5
  42. package/dist/generated/lightning.d.ts +21 -0
  43. package/dist/generated/lightning.js +24 -5
  44. package/dist/generated/local-node.js +2 -5
  45. package/dist/generated/ts/amino/amino.js +2 -5
  46. package/dist/generated/ts/cometbft/abci/v1/types.js +547 -563
  47. package/dist/generated/ts/cometbft/crypto/v1/keys.js +7 -10
  48. package/dist/generated/ts/cometbft/crypto/v1/proof.js +33 -36
  49. package/dist/generated/ts/cometbft/types/v1/params.js +95 -98
  50. package/dist/generated/ts/cometbft/types/v1/validator.js +40 -45
  51. package/dist/generated/ts/cosmos/app/v1alpha1/module.js +25 -28
  52. package/dist/generated/ts/cosmos/msg/v1/msg.js +2 -5
  53. package/dist/generated/ts/cosmos_proto/cosmos.js +15 -20
  54. package/dist/generated/ts/gogoproto/gogo.js +2 -5
  55. package/dist/generated/ts/google/api/annotations.js +2 -5
  56. package/dist/generated/ts/google/api/http.js +30 -33
  57. package/dist/generated/ts/google/protobuf/descriptor.js +468 -506
  58. package/dist/generated/ts/google/protobuf/duration.js +7 -10
  59. package/dist/generated/ts/google/protobuf/timestamp.js +7 -10
  60. package/dist/generated/ts/google/protobuf/wrappers.js +39 -42
  61. package/dist/generated/ts/inco/abci/v1/types.js +13 -16
  62. package/dist/generated/ts/inco/fhe/module/v1/module.js +7 -10
  63. package/dist/generated/ts/inco/fhe/v1/events.js +32 -35
  64. package/dist/generated/ts/inco/fhe/v1/genesis.js +127 -130
  65. package/dist/generated/ts/inco/fhe/v1/query.js +160 -163
  66. package/dist/generated/ts/inco/fhe/v1/tx.js +150 -153
  67. package/dist/generated/ts/inco/fhe/v1/types.js +70 -75
  68. package/dist/generated/ts/inco/originchain/module/v1/module.js +7 -10
  69. package/dist/generated/ts/inco/originchain/v1/abci.js +34 -37
  70. package/dist/generated/ts/inco/originchain/v1/events.js +11 -14
  71. package/dist/generated/ts/inco/originchain/v1/genesis.js +13 -16
  72. package/dist/generated/ts/inco/originchain/v1/query.js +41 -44
  73. package/dist/generated/ts/inco/originchain/v1/tx.js +24 -27
  74. package/dist/generated/ts/inco/originchain/v1/types.js +11 -14
  75. package/dist/generated/ts/inco/preflight/module/v1/module.js +7 -10
  76. package/dist/generated/ts/inco/preflight/v1/genesis.js +27 -30
  77. package/dist/generated/ts/inco/preflight/v1/query.js +41 -44
  78. package/dist/generated/ts/inco/preflight/v1/tx.js +53 -56
  79. package/dist/generated/ts/inco/preflight/v1/types.js +38 -41
  80. package/dist/handle.js +26 -33
  81. package/dist/index.cjs +24883 -0
  82. package/dist/index.js +6 -22
  83. package/dist/index.mjs +25964 -0
  84. package/dist/l1/client.js +19 -23
  85. package/dist/l1/index.js +3 -19
  86. package/dist/l1/preflight.js +13 -16
  87. package/dist/lite/deployments.js +9 -13
  88. package/dist/lite/ecies.js +37 -48
  89. package/dist/lite/hadu.js +21 -26
  90. package/dist/lite/index.cjs +52789 -0
  91. package/dist/lite/index.js +7 -23
  92. package/dist/lite/index.mjs +71691 -0
  93. package/dist/lite/lightning.js +31 -35
  94. package/dist/lite/reencrypt.d.ts +4 -4
  95. package/dist/lite/reencrypt.js +33 -44
  96. package/dist/local/index.cjs +24479 -0
  97. package/dist/local/index.js +2 -18
  98. package/dist/local/index.mjs +42864 -0
  99. package/dist/local/local-node.js +21 -25
  100. package/dist/reencryption/eip712.js +18 -21
  101. package/dist/reencryption/index.cjs +24681 -0
  102. package/dist/reencryption/index.js +3 -19
  103. package/dist/reencryption/index.mjs +24684 -0
  104. package/dist/reencryption/types.d.ts +6 -1
  105. package/dist/reencryption/types.js +1 -2
  106. package/dist/schema.js +6 -10
  107. package/dist/viem.js +7 -11
  108. package/package.json +1 -1
@@ -1,21 +1,18 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Lightning = void 0;
4
- const viem_1 = require("viem");
5
- const chains_1 = require("viem/chains");
6
- const binary_1 = require("../binary");
7
- const encryption_1 = require("../encryption");
8
- const lightning_1 = require("../generated/lightning");
9
- const local_node_1 = require("../generated/local-node");
10
- const handle_1 = require("../handle");
11
- const schema_1 = require("../schema");
12
- const ecies_1 = require("./ecies");
13
- const reencrypt_1 = require("./reencrypt");
1
+ import { hexToBytes } from 'viem';
2
+ import { baseSepolia } from 'viem/chains';
3
+ import { HexString, parseAddress } from '../binary';
4
+ import { encryptionSchemes } from '../encryption';
5
+ import { lightningDeployments } from '../generated/lightning';
6
+ import { localNodeLightningConfig } from '../generated/local-node';
7
+ import { handleTypes } from '../handle';
8
+ import { parse } from '../schema';
9
+ import { decodeSecp256k1PublicKey, generateSecp256k1Keypair, getEciesEncryptor } from './ecies';
10
+ import { getKmsClient, incoLiteReencryptor } from './reencrypt';
14
11
  /**
15
12
  * The Lightning class provides a convenient way to interact with the Inco Lightning contract by binding to a specific
16
13
  * deployment.
17
14
  */
18
- class Lightning {
15
+ export class Lightning {
19
16
  _deployment;
20
17
  covalidatorUrl;
21
18
  executorAddress;
@@ -27,14 +24,14 @@ class Lightning {
27
24
  constructor(_deployment, covalidatorUrl) {
28
25
  this._deployment = _deployment;
29
26
  this.covalidatorUrl = covalidatorUrl;
30
- this.executorAddress = (0, binary_1.parseAddress)(_deployment.executorAddress);
31
- this.eciesPublicKey = (0, schema_1.parse)(binary_1.HexString, _deployment.eciesPublicKey);
27
+ this.executorAddress = parseAddress(_deployment.executorAddress);
28
+ this.eciesPublicKey = parse(HexString, _deployment.eciesPublicKey);
32
29
  this.chainId = BigInt(_deployment.chainId);
33
- this.ephemeralKeypair = (0, ecies_1.generateSecp256k1Keypair)();
34
- this.kmsClient = (0, reencrypt_1.getKmsClient)(covalidatorUrl);
35
- this.encryptor = (0, ecies_1.getEciesEncryptor)({
36
- scheme: encryption_1.encryptionSchemes.ecies,
37
- pubKeyA: (0, ecies_1.decodeSecp256k1PublicKey)((0, viem_1.hexToBytes)((0, schema_1.parse)(binary_1.HexString, _deployment.eciesPublicKey))),
30
+ this.ephemeralKeypair = generateSecp256k1Keypair();
31
+ this.kmsClient = getKmsClient(covalidatorUrl);
32
+ this.encryptor = getEciesEncryptor({
33
+ scheme: encryptionSchemes.ecies,
34
+ pubKeyA: decodeSecp256k1PublicKey(hexToBytes(parse(HexString, _deployment.eciesPublicKey))),
38
35
  privKeyB: this.ephemeralKeypair,
39
36
  });
40
37
  }
@@ -42,7 +39,7 @@ class Lightning {
42
39
  * Get a Lightning instance bound to the latest Lightning deployment for the Base Sepolia testnet.
43
40
  */
44
41
  static baseSepoliaTestnet() {
45
- return Lightning.latest('testnet', chains_1.baseSepolia.id);
42
+ return Lightning.latest('testnet', baseSepolia.id);
46
43
  }
47
44
  /**
48
45
  * Get a Lightning instance bound to our canonical Anvil-based test node and test Covalidator node
@@ -55,7 +52,7 @@ class Lightning {
55
52
  *
56
53
  */
57
54
  static localNode() {
58
- return Lightning.custom(local_node_1.localNodeLightningConfig);
55
+ return Lightning.custom(localNodeLightningConfig);
59
56
  }
60
57
  /**
61
58
  * Get a Lightning deployment by name or executor address on a particular chain.
@@ -64,8 +61,8 @@ class Lightning {
64
61
  */
65
62
  static at(id) {
66
63
  const deployment = this.isIdByName(id)
67
- ? lightning_1.lightningDeployments.find((d) => d.name === id.name && d.chainId === id.chainId)
68
- : lightning_1.lightningDeployments.find((d) => d.executorAddress === id.executorAddress && d.chainId === id.chainId);
64
+ ? lightningDeployments.find((d) => d.name === id.name && d.chainId === id.chainId)
65
+ : lightningDeployments.find((d) => d.executorAddress === id.executorAddress && d.chainId === id.chainId);
69
66
  if (!deployment) {
70
67
  throw new Error(`No deployment found for ${JSON.stringify(id)}`);
71
68
  }
@@ -89,7 +86,7 @@ class Lightning {
89
86
  */
90
87
  static latestDeployment(pepper, chainId) {
91
88
  // Deployments are sorted so we are guaranteed to get the latest first
92
- const latestByPepper = lightning_1.lightningDeployments.find((d) => d.pepper === pepper && d.chainId === chainId);
89
+ const latestByPepper = lightningDeployments.find((d) => d.pepper === pepper && d.chainId === chainId);
93
90
  if (!latestByPepper) {
94
91
  // This should not actually happen provided this file compiles since we are extracting the available peppers
95
92
  // from the const itself
@@ -128,8 +125,8 @@ class Lightning {
128
125
  context: {
129
126
  hostChainId: this.chainId,
130
127
  aclAddress: this.executorAddress,
131
- userAddress: (0, binary_1.parseAddress)(accountAddress),
132
- contractAddress: (0, binary_1.parseAddress)(dappAddress),
128
+ userAddress: parseAddress(accountAddress),
129
+ contractAddress: parseAddress(dappAddress),
133
130
  },
134
131
  });
135
132
  return ciphertext.value;
@@ -142,7 +139,7 @@ class Lightning {
142
139
  * @param walletClient the wallet client to use for signing the reencrypt request.
143
140
  */
144
141
  getReencryptor(walletClient) {
145
- return (0, reencrypt_1.incoLiteReencryptor)({
142
+ return incoLiteReencryptor({
146
143
  walletClient,
147
144
  kmsConnectRpcEndpointOrClient: this.kmsClient,
148
145
  chainId: this.chainId,
@@ -162,15 +159,15 @@ class Lightning {
162
159
  static plaintextFromValue(value) {
163
160
  if (typeof value === 'boolean') {
164
161
  return {
165
- scheme: encryption_1.encryptionSchemes.ecies,
166
- type: handle_1.handleTypes.ebool,
162
+ scheme: encryptionSchemes.ecies,
163
+ type: handleTypes.ebool,
167
164
  value: value,
168
165
  };
169
166
  }
170
167
  else if (typeof value === 'bigint' || typeof value === 'number') {
171
168
  return {
172
- scheme: encryption_1.encryptionSchemes.ecies,
173
- type: handle_1.handleTypes.euint256,
169
+ scheme: encryptionSchemes.ecies,
170
+ type: handleTypes.euint256,
174
171
  value: BigInt(value),
175
172
  };
176
173
  }
@@ -179,5 +176,4 @@ class Lightning {
179
176
  }
180
177
  }
181
178
  }
182
- exports.Lightning = Lightning;
183
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRuaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpdGUvbGlnaHRuaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLCtCQUEyRTtBQUMzRSx3Q0FBMEM7QUFDMUMsc0NBQTZEO0FBQzdELDhDQUF1RjtBQUV2RixzREFBOEQ7QUFDOUQsd0RBQW1FO0FBQ25FLHNDQUF3QztBQUV4QyxzQ0FBa0M7QUFDbEMsbUNBQWtIO0FBQ2xILDJDQUFnRTtBQXdDaEU7OztHQUdHO0FBQ0gsTUFBYSxTQUFTO0lBVUQ7SUFDRDtJQVZGLGVBQWUsQ0FBVTtJQUN6QixjQUFjLENBQVk7SUFDMUIsT0FBTyxDQUFTO0lBRWYsU0FBUyxDQUF5QjtJQUNsQyxnQkFBZ0IsQ0FBbUI7SUFDbkMsU0FBUyxDQUE0QjtJQUV0RCxZQUNtQixXQUFjLEVBQ2YsY0FBc0I7UUFEckIsZ0JBQVcsR0FBWCxXQUFXLENBQUc7UUFDZixtQkFBYyxHQUFkLGNBQWMsQ0FBUTtRQUV0QyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUEscUJBQVksRUFBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFBLGNBQUssRUFBQyxrQkFBUyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFM0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUEsZ0NBQXdCLEdBQUUsQ0FBQztRQUNuRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUEsd0JBQVksRUFBQyxjQUFjLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUEseUJBQWlCLEVBQUM7WUFDakMsTUFBTSxFQUFFLDhCQUFpQixDQUFDLEtBQUs7WUFDL0IsT0FBTyxFQUFFLElBQUEsZ0NBQXdCLEVBQUMsSUFBQSxpQkFBVSxF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
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRuaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpdGUvbGlnaHRuaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBa0IsVUFBVSxFQUEyQixNQUFNLE1BQU0sQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFDLE9BQU8sRUFBVyxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzdELE9BQU8sRUFBZSxpQkFBaUIsRUFBMEIsTUFBTSxlQUFlLENBQUM7QUFFdkYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV4QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSx3QkFBd0IsRUFBRSxpQkFBaUIsRUFBb0IsTUFBTSxTQUFTLENBQUM7QUFDbEgsT0FBTyxFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQXdDaEU7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLFNBQVM7SUFVRDtJQUNEO0lBVkYsZUFBZSxDQUFVO0lBQ3pCLGNBQWMsQ0FBWTtJQUMxQixPQUFPLENBQVM7SUFFZixTQUFTLENBQXlCO0lBQ2xDLGdCQUFnQixDQUFtQjtJQUNuQyxTQUFTLENBQTRCO0lBRXRELFlBQ21CLFdBQWMsRUFDZixjQUFzQjtRQURyQixnQkFBVyxHQUFYLFdBQVcsQ0FBRztRQUNmLG1CQUFjLEdBQWQsY0FBYyxDQUFRO1FBRXRDLElBQUksQ0FBQyxlQUFlLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsY0FBYyxHQUFHLEtB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
@@ -1,10 +1,10 @@
1
1
  import { Client } from '@connectrpc/connect';
2
2
  import { Account, Chain, Hex, Transport, WalletClient } from 'viem';
3
3
  import { SupportedChain } from '../chain';
4
- import { EciesScheme, SupportedFheType } from '../encryption/encryption';
4
+ import { EciesScheme, PlaintextOf, SupportedFheType } from '../encryption/encryption';
5
5
  import { KmsService, ReencryptResponse } from '../generated/es/inco/kms/lite/v1/kms_service_pb';
6
6
  import { Handle } from '../handle';
7
- import type { EIP712, Reencryptor, ReencryptorArgs } from '../reencryption';
7
+ import type { BackoffConfig, EIP712, Reencryptor, ReencryptorArgs } from '../reencryption';
8
8
  import { Secp256k1Keypair } from './ecies';
9
9
  export interface IncoLiteReencryptorArgs extends ReencryptorArgs {
10
10
  walletClient: WalletClient<Transport, Chain, Account>;
@@ -16,9 +16,9 @@ export declare function reencryptEIP712(chainId: bigint, ephemeralPubKey: Uint8A
16
16
  }>;
17
17
  export declare function incoLiteReencryptor({ kmsConnectRpcEndpointOrClient, chainId, walletClient, ephemeralKeypair, }: IncoLiteReencryptorArgs): Promise<Reencryptor<EciesScheme>>;
18
18
  export declare function getKmsClient(kmsConnectRpcEndpointOrClient: string | Client<typeof KmsService>): Client<typeof KmsService>;
19
- export declare function decryptGrpcResponse<T extends SupportedFheType>(response: ReencryptResponse, ephemeralKeypair: Secp256k1Keypair, handle: Handle): Promise<import("../encryption/encryption").PlaintextOf<1, T>>;
19
+ export declare function decryptGrpcResponse<T extends SupportedFheType>(response: ReencryptResponse, ephemeralKeypair: Secp256k1Keypair, handle: Handle): Promise<PlaintextOf<1, T>>;
20
20
  export declare function defaultCovalidatorGrpc(chain: SupportedChain): string;
21
21
  export declare function pulumiCovalidatorGrpc(chain: SupportedChain): string;
22
22
  export declare function lightningDevnetCovalidatorGrpc(chain: SupportedChain): string;
23
23
  export declare function lightningTestnetCovalidatorGrpc(chain: SupportedChain): string;
24
- export declare function retryWithBackoff<T>(fn: () => Promise<T>, maxRetries?: number, baseDelayInMs?: number): Promise<T>;
24
+ export declare function retryWithBackoff<T>(fn: () => Promise<T>, { maxRetries, baseDelayInMs, backoffFactor }?: Partial<BackoffConfig>): Promise<T>;
@@ -1,24 +1,13 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.reencryptEIP712 = reencryptEIP712;
4
- exports.incoLiteReencryptor = incoLiteReencryptor;
5
- exports.getKmsClient = getKmsClient;
6
- exports.decryptGrpcResponse = decryptGrpcResponse;
7
- exports.defaultCovalidatorGrpc = defaultCovalidatorGrpc;
8
- exports.pulumiCovalidatorGrpc = pulumiCovalidatorGrpc;
9
- exports.lightningDevnetCovalidatorGrpc = lightningDevnetCovalidatorGrpc;
10
- exports.lightningTestnetCovalidatorGrpc = lightningTestnetCovalidatorGrpc;
11
- exports.retryWithBackoff = retryWithBackoff;
12
- const connect_1 = require("@connectrpc/connect");
13
- const connect_web_1 = require("@connectrpc/connect-web");
14
- const viem_1 = require("viem");
15
- const binary_1 = require("../binary");
16
- const chain_1 = require("../chain");
17
- const encryption_1 = require("../encryption/encryption");
18
- const kms_service_pb_1 = require("../generated/es/inco/kms/lite/v1/kms_service_pb");
19
- const handle_1 = require("../handle");
20
- const eip712_1 = require("../reencryption/eip712");
21
- const ecies_1 = require("./ecies");
1
+ import { createClient } from '@connectrpc/connect';
2
+ import { createConnectTransport } from '@connectrpc/connect-web';
3
+ import { bytesToHex, hexToBytes } from 'viem';
4
+ import { bytesToBigInt } from '../binary';
5
+ import { getSupportedChain } from '../chain';
6
+ import { bigintToPlaintext, encryptionSchemes, } from '../encryption/encryption';
7
+ import { KmsService } from '../generated/es/inco/kms/lite/v1/kms_service_pb';
8
+ import { getHandleType } from '../handle';
9
+ import { createEIP712Payload } from '../reencryption/eip712';
10
+ import { decrypt, generateSecp256k1Keypair } from './ecies';
22
11
  // The domain constants used for basic reencrypts.
23
12
  // Note: for advanced ACL, since the signature is checked on-chain, the domain
24
13
  // and version must match the ones used in the contract. For basic ones, we use
@@ -28,13 +17,13 @@ const BASIC_REENCRYPT_DOMAIN = {
28
17
  version: '0.1.0',
29
18
  };
30
19
  // Create an EIP712 payload for the Inco Lite basic reencrypt.
31
- function reencryptEIP712(chainId, ephemeralPubKey) {
32
- return (0, eip712_1.createEIP712Payload)({
20
+ export function reencryptEIP712(chainId, ephemeralPubKey) {
21
+ return createEIP712Payload({
33
22
  chainId,
34
23
  primaryType: 'ReencryptionRequest',
35
24
  primaryTypeFields: [{ name: 'publicKey', type: 'bytes' }],
36
25
  message: {
37
- publicKey: (0, viem_1.bytesToHex)(ephemeralPubKey),
26
+ publicKey: bytesToHex(ephemeralPubKey),
38
27
  },
39
28
  domainName: BASIC_REENCRYPT_DOMAIN.name,
40
29
  domainVersion: BASIC_REENCRYPT_DOMAIN.version,
@@ -42,10 +31,10 @@ function reencryptEIP712(chainId, ephemeralPubKey) {
42
31
  }
43
32
  // Returns the Inco Lite Reencryptor, which can reencrypt a handle using the
44
33
  // Basic ACL.
45
- async function incoLiteReencryptor({ kmsConnectRpcEndpointOrClient, chainId, walletClient, ephemeralKeypair, }) {
46
- const kmsClient = getKmsClient(kmsConnectRpcEndpointOrClient || defaultCovalidatorGrpc((0, chain_1.getSupportedChain)(chainId)));
34
+ export async function incoLiteReencryptor({ kmsConnectRpcEndpointOrClient, chainId, walletClient, ephemeralKeypair, }) {
35
+ const kmsClient = getKmsClient(kmsConnectRpcEndpointOrClient || defaultCovalidatorGrpc(getSupportedChain(chainId)));
47
36
  if (!ephemeralKeypair) {
48
- ephemeralKeypair = await (0, ecies_1.generateSecp256k1Keypair)();
37
+ ephemeralKeypair = await generateSecp256k1Keypair();
49
38
  }
50
39
  // Sign the EIP712 attesting that the user has access to the private key
51
40
  // corresponding to the ephemeral public key.
@@ -53,13 +42,13 @@ async function incoLiteReencryptor({ kmsConnectRpcEndpointOrClient, chainId, wal
53
42
  // Using browser extensions, this step will prompt the user to sign the
54
43
  // payload.
55
44
  const eip712Signature = await walletClient.signTypedData(eip712Payload);
56
- return async function reencrypt({ handle }) {
45
+ return async function reencrypt({ handle }, backoffConfig) {
57
46
  const ephemeralPubKey = ephemeralKeypair.encodePublicKey();
58
47
  const reencryptRequest = {
59
48
  $typeName: 'inco.kms.lite.v1.ReencryptRequest',
60
49
  userAddress: walletClient.account.address,
61
50
  ephemeralPubKey,
62
- eip712Signature: (0, viem_1.hexToBytes)(eip712Signature),
51
+ eip712Signature: hexToBytes(eip712Signature),
63
52
  handlesWithProofs: [
64
53
  {
65
54
  $typeName: 'inco.kms.lite.v1.HandleWithProof',
@@ -79,7 +68,7 @@ async function incoLiteReencryptor({ kmsConnectRpcEndpointOrClient, chainId, wal
79
68
  ],
80
69
  };
81
70
  try {
82
- const response = await retryWithBackoff(() => kmsClient.reencrypt(reencryptRequest));
71
+ const response = await retryWithBackoff(() => kmsClient.reencrypt(reencryptRequest), backoffConfig);
83
72
  return decryptGrpcResponse(response, ephemeralKeypair, handle);
84
73
  }
85
74
  catch (error) {
@@ -89,44 +78,44 @@ async function incoLiteReencryptor({ kmsConnectRpcEndpointOrClient, chainId, wal
89
78
  };
90
79
  }
91
80
  // Helper function to get a KMS client from a string or a Client instance.
92
- function getKmsClient(kmsConnectRpcEndpointOrClient) {
81
+ export function getKmsClient(kmsConnectRpcEndpointOrClient) {
93
82
  if (typeof kmsConnectRpcEndpointOrClient === 'string') {
94
- const transport = (0, connect_web_1.createConnectTransport)({
83
+ const transport = createConnectTransport({
95
84
  baseUrl: kmsConnectRpcEndpointOrClient,
96
85
  });
97
- return (0, connect_1.createClient)(kms_service_pb_1.KmsService, transport);
86
+ return createClient(KmsService, transport);
98
87
  }
99
88
  return kmsConnectRpcEndpointOrClient;
100
89
  }
101
90
  // Decrypt using ECIES the ciphertext in the response.
102
91
  // Even though the proto specifies a list of ciphertexts, our JS SDK
103
92
  // currently only supports a single ciphertext.
104
- async function decryptGrpcResponse(response, ephemeralKeypair, handle) {
93
+ export async function decryptGrpcResponse(response, ephemeralKeypair, handle) {
105
94
  const reencryptedCt = response.payload?.userCiphertexts[0];
106
95
  if (!reencryptedCt) {
107
96
  throw new Error('No reencrypted ciphertext in the response');
108
97
  }
109
- const plaintextBytes = await (0, ecies_1.decrypt)(ephemeralKeypair, reencryptedCt.ciphertext);
110
- const plaintext = (0, binary_1.bytesToBigInt)(plaintextBytes);
111
- return (0, encryption_1.bigintToPlaintext)(encryption_1.encryptionSchemes.ecies, (0, handle_1.getHandleType)(handle), plaintext);
98
+ const plaintextBytes = await decrypt(ephemeralKeypair, reencryptedCt.ciphertext);
99
+ const plaintext = bytesToBigInt(plaintextBytes);
100
+ return bigintToPlaintext(encryptionSchemes.ecies, getHandleType(handle), plaintext);
112
101
  }
113
102
  // Helper function to return the default gRPC endpoint for the covalidator.
114
103
  // Currently, this returns the covalidator for the Inco Lightning public testnet.
115
- function defaultCovalidatorGrpc(chain) {
104
+ export function defaultCovalidatorGrpc(chain) {
116
105
  return lightningTestnetCovalidatorGrpc(chain);
117
106
  }
118
107
  // Helper function to get the gRPC endpoint for the Denver covalidator on the
119
108
  // AWS (Pulumi) setup. This function is a convenience, and might disappear in
120
109
  // the future, if the denver testnet is no longer supported.
121
- function pulumiCovalidatorGrpc(chain) {
110
+ export function pulumiCovalidatorGrpc(chain) {
122
111
  return `https://grpc.${chain.name.toLowerCase()}.covalidator.denver.inco.org`;
123
112
  }
124
113
  // Helper function to get the devnet gRPC endpoint for the Inco Lightning covalidator.
125
- function lightningDevnetCovalidatorGrpc(chain) {
114
+ export function lightningDevnetCovalidatorGrpc(chain) {
126
115
  return getCovalidatorGrpcHelper(chain, 'devnet', 'lightning');
127
116
  }
128
117
  // Helper function to get the testnet gRPC endpoint for the Inco Lightning covalidator.
129
- function lightningTestnetCovalidatorGrpc(chain) {
118
+ export function lightningTestnetCovalidatorGrpc(chain) {
130
119
  return getCovalidatorGrpcHelper(chain, 'testnet', 'lightning');
131
120
  }
132
121
  // Convert camelCase to dash-case.
@@ -138,7 +127,7 @@ function getCovalidatorGrpcHelper(chain, network, cluster) {
138
127
  return `https://grpc.${camelToDashCase(chain.name)}.${cluster}.${network}.inco.org`;
139
128
  }
140
129
  // Helper function to implement exponential backoff retry logic
141
- async function retryWithBackoff(fn, maxRetries = 3, baseDelayInMs = 1000) {
130
+ export async function retryWithBackoff(fn, { maxRetries = 10, baseDelayInMs = 1000, backoffFactor = 1.5 } = {}) {
142
131
  let lastError;
143
132
  for (let attempt = 0; attempt < maxRetries; attempt++) {
144
133
  try {
@@ -149,11 +138,11 @@ async function retryWithBackoff(fn, maxRetries = 3, baseDelayInMs = 1000) {
149
138
  if (attempt === maxRetries - 1) {
150
139
  break;
151
140
  }
152
- const delay = baseDelayInMs * Math.pow(2, attempt);
141
+ const delay = baseDelayInMs * Math.pow(backoffFactor, attempt);
153
142
  const jitter = delay * (0.8 + Math.random() * 0.4); // random jitter, 80% to 120% of the delay
154
143
  await new Promise((resolve) => setTimeout(resolve, jitter));
155
144
  }
156
145
  }
157
146
  throw lastError;
158
147
  }
159
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVlbmNyeXB0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpdGUvcmVlbmNyeXB0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBcUNBLDBDQVdDO0FBSUQsa0RBcURDO0FBR0Qsb0NBV0M7QUFLRCxrREFhQztBQUlELHdEQUVDO0FBS0Qsc0RBRUM7QUFHRCx3RUFFQztBQUdELDBFQUVDO0FBYUQsNENBc0JDO0FBbk1ELGlEQUEyRDtBQUMzRCx5REFBaUU7QUFDakUsK0JBQTRGO0FBQzVGLHNDQUEwQztBQUMxQyxvQ0FBNkQ7QUFDN0QseURBQStHO0FBQy9HLG9GQUFrSDtBQUNsSCxzQ0FBa0Q7QUFFbEQsbURBQTZEO0FBQzdELG1DQUE4RTtBQWlCOUUsa0RBQWtEO0FBQ2xELDhFQUE4RTtBQUM5RSwrRUFBK0U7QUFDL0UsZ0RBQWdEO0FBQ2hELE1BQU0sc0JBQXNCLEdBQUc7SUFDN0IsSUFBSSxFQUFFLGtCQUFrQjtJQUN4QixPQUFPLEVBQUUsT0FBTztDQUNqQixDQUFDO0FBRUYsOERBQThEO0FBQzlELFNBQWdCLGVBQWUsQ0FBQyxPQUFlLEVBQUUsZUFBMkI7SUFDMUUsT0FBTyxJQUFBLDRCQUFtQixFQUFDO1FBQ3pCLE9BQU87UUFDUCxXQUFXLEVBQUUscUJBQXFCO1FBQ2xDLGlCQUFpQixFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN6RCxPQUFPLEVBQUU7WUFDUCxTQUFTLEVBQUUsSUFBQSxpQkFBVSxFQUFDLGVBQWUsQ0FBQztTQUN2QztRQUNELFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxJQUFJO1FBQ3ZDLGFBQWEsRUFBRSxzQkFBc0IsQ0FBQyxPQUFPO0tBQzlDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCw0RUFBNEU7QUFDNUUsYUFBYTtBQUNOLEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxFQUN4Qyw2QkFBNkIsRUFDN0IsT0FBTyxFQUNQLFlB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
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVlbmNyeXB0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpdGUvcmVlbmNyeXB0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEVBQVcsVUFBVSxFQUFjLFVBQVUsRUFBMkIsTUFBTSxNQUFNLENBQUM7QUFDNUYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQWtCLE1BQU0sVUFBVSxDQUFDO0FBQzdELE9BQU8sRUFDTCxpQkFBaUIsRUFFakIsaUJBQWlCLEdBR2xCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFFLFVBQVUsRUFBdUMsTUFBTSxpREFBaUQsQ0FBQztBQUNsSCxPQUFPLEVBQUUsYUFBYSxFQUFVLE1BQU0sV0FBVyxDQUFDO0FBRWxELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBRSxPQUFPLEVBQUUsd0JBQXdCLEVBQW9CLE1BQU0sU0FBUyxDQUFDO0FBaUI5RSxrREFBa0Q7QUFDbEQsOEVBQThFO0FBQzlFLCtFQUErRTtBQUMvRSxnREFBZ0Q7QUFDaEQsTUFBTSxzQkFBc0IsR0FBRztJQUM3QixJQUFJLEVBQUUsa0JBQWtCO0lBQ3hCLE9BQU8sRUFBRSxPQUFPO0NBQ2pCLENBQUM7QUFFRiw4REFBOEQ7QUFDOUQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxPQUFlLEVBQUUsZUFBMkI7SUFDMUUsT0FBTyxtQkFBbUIsQ0FBQztRQUN6QixPQUFPO1FBQ1AsV0FBVyxFQUFFLHFCQUFxQjtRQUNsQyxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFD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