@inco/js 0.1.34 → 0.1.36
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.
package/dist/lite/reencrypt.d.ts
CHANGED
@@ -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<
|
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
|
24
|
+
export declare function retryWithBackoff<T>(fn: () => Promise<T>, { maxRetries, baseDelayInMs, backoffFactor }?: Partial<BackoffConfig>): Promise<T>;
|
package/dist/lite/reencrypt.js
CHANGED
@@ -3,7 +3,7 @@ import { createConnectTransport } from '@connectrpc/connect-web';
|
|
3
3
|
import { bytesToHex, hexToBytes } from 'viem';
|
4
4
|
import { bytesToBigInt } from '../binary';
|
5
5
|
import { getSupportedChain } from '../chain';
|
6
|
-
import { bigintToPlaintext, encryptionSchemes } from '../encryption/encryption';
|
6
|
+
import { bigintToPlaintext, encryptionSchemes, } from '../encryption/encryption';
|
7
7
|
import { KmsService } from '../generated/es/inco/kms/lite/v1/kms_service_pb';
|
8
8
|
import { getHandleType } from '../handle';
|
9
9
|
import { createEIP712Payload } from '../reencryption/eip712';
|
@@ -42,7 +42,7 @@ export async function incoLiteReencryptor({ kmsConnectRpcEndpointOrClient, chain
|
|
42
42
|
// Using browser extensions, this step will prompt the user to sign the
|
43
43
|
// payload.
|
44
44
|
const eip712Signature = await walletClient.signTypedData(eip712Payload);
|
45
|
-
return async function reencrypt({ handle }) {
|
45
|
+
return async function reencrypt({ handle }, backoffConfig) {
|
46
46
|
const ephemeralPubKey = ephemeralKeypair.encodePublicKey();
|
47
47
|
const reencryptRequest = {
|
48
48
|
$typeName: 'inco.kms.lite.v1.ReencryptRequest',
|
@@ -68,7 +68,7 @@ export async function incoLiteReencryptor({ kmsConnectRpcEndpointOrClient, chain
|
|
68
68
|
],
|
69
69
|
};
|
70
70
|
try {
|
71
|
-
const response = await retryWithBackoff(() => kmsClient.reencrypt(reencryptRequest));
|
71
|
+
const response = await retryWithBackoff(() => kmsClient.reencrypt(reencryptRequest), backoffConfig);
|
72
72
|
return decryptGrpcResponse(response, ephemeralKeypair, handle);
|
73
73
|
}
|
74
74
|
catch (error) {
|
@@ -127,7 +127,7 @@ function getCovalidatorGrpcHelper(chain, network, cluster) {
|
|
127
127
|
return `https://grpc.${camelToDashCase(chain.name)}.${cluster}.${network}.inco.org`;
|
128
128
|
}
|
129
129
|
// Helper function to implement exponential backoff retry logic
|
130
|
-
export async function retryWithBackoff(fn, maxRetries =
|
130
|
+
export async function retryWithBackoff(fn, { maxRetries = 10, baseDelayInMs = 1000, backoffFactor = 1.5 } = {}) {
|
131
131
|
let lastError;
|
132
132
|
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
133
133
|
try {
|
@@ -138,11 +138,11 @@ export async function retryWithBackoff(fn, maxRetries = 3, baseDelayInMs = 1000)
|
|
138
138
|
if (attempt === maxRetries - 1) {
|
139
139
|
break;
|
140
140
|
}
|
141
|
-
const delay = baseDelayInMs * Math.pow(
|
141
|
+
const delay = baseDelayInMs * Math.pow(backoffFactor, attempt);
|
142
142
|
const jitter = delay * (0.8 + Math.random() * 0.4); // random jitter, 80% to 120% of the delay
|
143
143
|
await new Promise((resolve) => setTimeout(resolve, jitter));
|
144
144
|
}
|
145
145
|
}
|
146
146
|
throw lastError;
|
147
147
|
}
|
148
|
-
//# sourceMappingURL=data:application/json;base64,
|
148
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVlbmNyeXB0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpdGUvcmVlbmNyeXB0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEVBQVcsVUFBVSxFQUFjLFVBQVUsRUFBMkIsTUFBTSxNQUFNLENBQUM7QUFDNUYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQWtCLE1BQU0sVUFBVSxDQUFDO0FBQzdELE9BQU8sRUFDTCxpQkFBaUIsRUFFakIsaUJBQWlCLEdBR2xCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFFLFVBQVUsRUFBdUMsTUFBTSxpREFBaUQsQ0FBQztBQUNsSCxPQUFPLEVBQUUsYUFBYSxFQUFVLE1BQU0sV0FBVyxDQUFDO0FBRWxELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBRSxPQUFPLEVBQUUsd0JBQXdCLEVBQW9CLE1BQU0sU0FBUyxDQUFDO0FBaUI5RSxrREFBa0Q7QUFDbEQsOEVBQThFO0FBQzlFLCtFQUErRTtBQUMvRSxnREFBZ0Q7QUFDaEQsTUFBTSxzQkFBc0IsR0FBRztJQUM3QixJQUFJLEVBQUUsa0JBQWtCO0lBQ3hCLE9BQU8sRUFBRSxPQUFPO0NBQ2pCLENBQUM7QUFFRiw4REFBOEQ7QUFDOUQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxPQUFlLEVBQUUsZUFBMkI7SUFDMUUsT0FBTyxtQkFBbUIsQ0FBQztRQUN6QixPQUFPO1FBQ1AsV0FBVyxFQUFFLHFCQUFxQjtRQUNsQyxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFD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
|
@@ -4,7 +4,12 @@ import { CiphertextOf, EncryptionScheme, PlaintextOf, SupportedFheType } from '.
|
|
4
4
|
import type { EphemeralCryptoBoxKeypair } from '../fhevm/reencrypt';
|
5
5
|
import { Handle } from '../handle';
|
6
6
|
import type { Secp256k1Keypair } from '../lite/ecies';
|
7
|
-
export type Reencryptor<S extends EncryptionScheme> = <T extends SupportedFheType>(args: ReencryptFnArgs<S, T>) => Promise<PlaintextOf<S, T>>;
|
7
|
+
export type Reencryptor<S extends EncryptionScheme> = <T extends SupportedFheType>(args: ReencryptFnArgs<S, T>, backoffConfig?: Partial<BackoffConfig>) => Promise<PlaintextOf<S, T>>;
|
8
|
+
export type BackoffConfig = {
|
9
|
+
maxRetries: number;
|
10
|
+
baseDelayInMs: number;
|
11
|
+
backoffFactor: number;
|
12
|
+
};
|
8
13
|
export interface ReencryptorArgs {
|
9
14
|
chainId: bigint;
|
10
15
|
}
|