@tonappchain/sdk 0.7.2-scaled-ui-support-2 → 0.7.2
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/LICENSE +20 -20
- package/README.md +198 -198
- package/dist/artifacts/dev/index.d.ts +2 -2
- package/dist/artifacts/dev/index.js +2 -1
- package/dist/artifacts/dev/tac/endpoints.d.ts +1 -0
- package/dist/artifacts/dev/tac/endpoints.js +2 -1
- package/dist/artifacts/dev/ton/internal/build/CrossChainLayer.compiled.json +1 -1
- package/dist/artifacts/dev/ton/internal/build/Executor.compiled.json +1 -1
- package/dist/artifacts/dev/ton/internal/build/JettonProxy.compiled.json +1 -1
- package/dist/artifacts/dev/ton/internal/build/JettonWallet.compiled.json +1 -1
- package/dist/artifacts/dev/ton/internal/build/NFTItem.compiled.json +1 -1
- package/dist/artifacts/dev/ton/internal/build/NFTProxy.compiled.json +1 -1
- package/dist/artifacts/dev/ton/internal/build/Settings.compiled.json +1 -1
- package/dist/artifacts/dev/ton/internal/wrappers/CrossChainLayer.d.ts +53 -6
- package/dist/artifacts/dev/ton/internal/wrappers/CrossChainLayer.js +130 -17
- package/dist/artifacts/dev/ton/internal/wrappers/JettonMinter.d.ts +2 -0
- package/dist/artifacts/dev/ton/internal/wrappers/JettonMinter.js +3 -1
- package/dist/artifacts/dev/ton/internal/wrappers/JettonProxy.d.ts +9 -0
- package/dist/artifacts/dev/ton/internal/wrappers/JettonProxy.js +10 -1
- package/dist/artifacts/dev/ton/internal/wrappers/JettonWallet.d.ts +7 -0
- package/dist/artifacts/dev/ton/internal/wrappers/JettonWallet.js +9 -2
- package/dist/artifacts/dev/ton/internal/wrappers/NFTCollection.d.ts +9 -0
- package/dist/artifacts/dev/ton/internal/wrappers/NFTCollection.js +9 -0
- package/dist/artifacts/dev/ton/internal/wrappers/NFTItem.d.ts +7 -0
- package/dist/artifacts/dev/ton/internal/wrappers/NFTItem.js +7 -0
- package/dist/artifacts/dev/ton/internal/wrappers/NFTProxy.d.ts +7 -0
- package/dist/artifacts/dev/ton/internal/wrappers/NFTProxy.js +8 -1
- package/dist/artifacts/dev/ton/internal/wrappers/Settings.d.ts +1 -0
- package/dist/artifacts/dev/ton/internal/wrappers/Settings.js +1 -0
- package/dist/artifacts/dev/ton/internal/wrappers/utils/CrossChainLayerPayload.d.ts +10 -0
- package/dist/artifacts/dev/ton/internal/wrappers/utils/CrossChainLayerPayload.js +24 -0
- package/dist/artifacts/dev/ton/internal/wrappers/utils/MerkleRoots.d.ts +2 -1
- package/dist/artifacts/dev/ton/internal/wrappers/utils/MerkleRoots.js +9 -1
- package/dist/artifacts/mainnet/index.d.ts +2 -2
- package/dist/artifacts/mainnet/index.js +2 -1
- package/dist/artifacts/mainnet/tac/endpoints.d.ts +1 -0
- package/dist/artifacts/mainnet/tac/endpoints.js +2 -1
- package/dist/artifacts/mainnet/ton/endpoints.d.ts +1 -1
- package/dist/artifacts/mainnet/ton/endpoints.js +1 -1
- package/dist/artifacts/mainnet/ton/internal/build/CrossChainLayer.compiled.json +1 -1
- package/dist/artifacts/mainnet/ton/internal/build/Executor.compiled.json +1 -1
- package/dist/artifacts/mainnet/ton/internal/build/JettonMinter.compiled.json +1 -1
- package/dist/artifacts/mainnet/ton/internal/build/JettonProxy.compiled.json +1 -1
- package/dist/artifacts/mainnet/ton/internal/build/JettonWallet.compiled.json +1 -1
- package/dist/artifacts/mainnet/ton/internal/build/NFTItem.compiled.json +1 -1
- package/dist/artifacts/mainnet/ton/internal/build/NFTProxy.compiled.json +1 -1
- package/dist/artifacts/mainnet/ton/internal/wrappers/CrossChainLayer.d.ts +1 -13
- package/dist/artifacts/mainnet/ton/internal/wrappers/CrossChainLayer.js +7 -45
- package/dist/artifacts/mainnet/ton/internal/wrappers/JettonMinter.d.ts +2 -2
- package/dist/artifacts/mainnet/ton/internal/wrappers/JettonMinter.js +2 -2
- package/dist/artifacts/testnet/index.d.ts +2 -2
- package/dist/artifacts/testnet/index.js +2 -1
- package/dist/artifacts/testnet/tac/endpoints.d.ts +1 -0
- package/dist/artifacts/testnet/tac/endpoints.js +2 -1
- package/dist/artifacts/testnet/ton/endpoints.d.ts +1 -1
- package/dist/artifacts/testnet/ton/endpoints.js +1 -1
- package/dist/artifacts/testnet/ton/internal/build/CrossChainLayer.compiled.json +1 -1
- package/dist/artifacts/testnet/ton/internal/build/Executor.compiled.json +1 -1
- package/dist/artifacts/testnet/ton/internal/build/JettonProxy.compiled.json +1 -1
- package/dist/artifacts/testnet/ton/internal/build/JettonWallet.compiled.json +1 -1
- package/dist/artifacts/testnet/ton/internal/build/NFTItem.compiled.json +1 -1
- package/dist/artifacts/testnet/ton/internal/build/NFTProxy.compiled.json +1 -1
- package/dist/artifacts/testnet/ton/internal/build/Settings.compiled.json +1 -1
- package/dist/artifacts/testnet/ton/internal/wrappers/CrossChainLayer.d.ts +53 -6
- package/dist/artifacts/testnet/ton/internal/wrappers/CrossChainLayer.js +130 -17
- package/dist/artifacts/testnet/ton/internal/wrappers/JettonMinter.d.ts +2 -0
- package/dist/artifacts/testnet/ton/internal/wrappers/JettonMinter.js +3 -1
- package/dist/artifacts/testnet/ton/internal/wrappers/JettonProxy.d.ts +9 -0
- package/dist/artifacts/testnet/ton/internal/wrappers/JettonProxy.js +10 -1
- package/dist/artifacts/testnet/ton/internal/wrappers/JettonWallet.d.ts +7 -0
- package/dist/artifacts/testnet/ton/internal/wrappers/JettonWallet.js +9 -2
- package/dist/artifacts/testnet/ton/internal/wrappers/NFTCollection.d.ts +9 -0
- package/dist/artifacts/testnet/ton/internal/wrappers/NFTCollection.js +9 -0
- package/dist/artifacts/testnet/ton/internal/wrappers/NFTItem.d.ts +7 -0
- package/dist/artifacts/testnet/ton/internal/wrappers/NFTItem.js +7 -0
- package/dist/artifacts/testnet/ton/internal/wrappers/NFTProxy.d.ts +7 -0
- package/dist/artifacts/testnet/ton/internal/wrappers/NFTProxy.js +8 -1
- package/dist/artifacts/testnet/ton/internal/wrappers/Settings.d.ts +1 -0
- package/dist/artifacts/testnet/ton/internal/wrappers/Settings.js +1 -0
- package/dist/artifacts/testnet/ton/internal/wrappers/utils/CrossChainLayerPayload.d.ts +10 -0
- package/dist/artifacts/testnet/ton/internal/wrappers/utils/CrossChainLayerPayload.js +24 -0
- package/dist/artifacts/testnet/ton/internal/wrappers/utils/MerkleRoots.d.ts +2 -1
- package/dist/artifacts/testnet/ton/internal/wrappers/utils/MerkleRoots.js +9 -1
- package/dist/src/adapters/BaseContractOpener.d.ts +76 -0
- package/dist/src/adapters/BaseContractOpener.js +440 -0
- package/dist/src/adapters/LiteClientOpener.d.ts +38 -0
- package/dist/src/adapters/LiteClientOpener.js +141 -0
- package/dist/src/adapters/OpenerUtils.d.ts +3 -0
- package/dist/src/adapters/OpenerUtils.js +40 -0
- package/dist/src/adapters/RetryableContractOpener.d.ts +40 -0
- package/dist/src/adapters/RetryableContractOpener.js +290 -0
- package/dist/src/adapters/SandboxOpener.d.ts +15 -0
- package/dist/src/adapters/SandboxOpener.js +35 -0
- package/dist/src/adapters/TonClient4Opener.d.ts +24 -0
- package/dist/src/adapters/TonClient4Opener.js +95 -0
- package/dist/src/adapters/TonClientOpener.d.ts +19 -0
- package/dist/src/adapters/TonClientOpener.js +82 -0
- package/dist/src/adapters/index.d.ts +7 -2
- package/dist/src/adapters/index.js +7 -2
- package/dist/src/assets/AssetCache.d.ts +8 -8
- package/dist/src/assets/AssetCache.js +3 -0
- package/dist/src/assets/AssetFactory.js +8 -2
- package/dist/src/assets/FT.d.ts +2 -3
- package/dist/src/assets/FT.js +4 -7
- package/dist/src/assets/NFT.d.ts +1 -1
- package/dist/src/assets/NFT.js +1 -1
- package/dist/src/assets/TON.d.ts +3 -2
- package/dist/src/assets/TON.js +2 -1
- package/dist/src/errors/errors.d.ts +12 -1
- package/dist/src/errors/errors.js +66 -2
- package/dist/src/errors/index.d.ts +2 -2
- package/dist/src/errors/index.js +4 -1
- package/dist/src/errors/instances.d.ts +7 -2
- package/dist/src/errors/instances.js +67 -2
- package/dist/src/index.d.ts +3 -1
- package/dist/src/index.js +6 -4
- package/dist/src/interfaces/Asset.d.ts +4 -9
- package/dist/src/interfaces/ContractOpener.d.ts +76 -2
- package/dist/src/interfaces/IOperationTracker.d.ts +22 -22
- package/dist/src/interfaces/ISimulator.d.ts +9 -1
- package/dist/src/interfaces/ITONTransactionManager.d.ts +20 -1
- package/dist/src/interfaces/ITacExplorerClient.d.ts +8 -0
- package/dist/src/interfaces/ITacExplorerClient.js +2 -0
- package/dist/src/interfaces/ITacSDK.d.ts +25 -1
- package/dist/src/interfaces/ITxFinalizer.d.ts +4 -0
- package/dist/src/interfaces/ITxFinalizer.js +2 -0
- package/dist/src/interfaces/WalletInstanse.d.ts +4 -8
- package/dist/src/interfaces/index.d.ts +1 -0
- package/dist/src/interfaces/index.js +1 -0
- package/dist/src/sdk/Configuration.d.ts +5 -3
- package/dist/src/sdk/Configuration.js +54 -7
- package/dist/src/sdk/Consts.d.ts +18 -1
- package/dist/src/sdk/Consts.js +21 -2
- package/dist/src/sdk/Fees.d.ts +21 -0
- package/dist/src/sdk/Fees.js +201 -0
- package/dist/src/sdk/LiteSequencerClient.d.ts +1 -0
- package/dist/src/sdk/LiteSequencerClient.js +39 -17
- package/dist/src/sdk/OperationTracker.d.ts +11 -11
- package/dist/src/sdk/OperationTracker.js +46 -94
- package/dist/src/sdk/Simulator.d.ts +10 -2
- package/dist/src/sdk/Simulator.js +102 -0
- package/dist/src/sdk/StartTracking.d.ts +12 -7
- package/dist/src/sdk/StartTracking.js +75 -49
- package/dist/src/sdk/TONTransactionManager.d.ts +5 -4
- package/dist/src/sdk/TONTransactionManager.js +63 -8
- package/dist/src/sdk/TacExplorerClient.d.ts +8 -0
- package/dist/src/sdk/TacExplorerClient.js +22 -0
- package/dist/src/sdk/TacSdk.d.ts +8 -2
- package/dist/src/sdk/TacSdk.js +27 -4
- package/dist/src/sdk/TxFinalizer.d.ts +4 -3
- package/dist/src/sdk/TxFinalizer.js +41 -41
- package/dist/src/sdk/Utils.d.ts +20 -1
- package/dist/src/sdk/Utils.js +158 -10
- package/dist/src/sender/BatchSender.js +19 -0
- package/dist/src/sender/MockSender.d.ts +2 -0
- package/dist/src/sender/MockSender.js +13 -0
- package/dist/src/sender/RawSender.js +34 -1
- package/dist/src/sender/SenderFactory.js +1 -1
- package/dist/src/sender/TonConnectSender.js +2 -0
- package/dist/src/sender/index.d.ts +1 -0
- package/dist/src/sender/index.js +1 -0
- package/dist/src/structs/InternalStruct.d.ts +98 -4
- package/dist/src/structs/Struct.d.ts +183 -7
- package/dist/src/structs/Struct.js +4 -3
- package/dist/src/wrappers/HighloadWalletV3.d.ts +5 -3
- package/dist/src/wrappers/HighloadWalletV3.js +14 -3
- package/package.json +121 -117
- package/dist/src/adapters/contractOpener.d.ts +0 -20
- package/dist/src/adapters/contractOpener.js +0 -126
- package/dist/src/adapters/retryableContractOpener.d.ts +0 -24
- package/dist/src/adapters/retryableContractOpener.js +0 -111
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.liteClientOpener = liteClientOpener;
|
|
4
|
-
exports.sandboxOpener = sandboxOpener;
|
|
5
|
-
exports.orbsOpener = orbsOpener;
|
|
6
|
-
exports.orbsOpener4 = orbsOpener4;
|
|
7
|
-
const ton_access_1 = require("@orbs-network/ton-access");
|
|
8
|
-
const ton_1 = require("@ton/ton");
|
|
9
|
-
const ton_lite_client_1 = require("@tonappchain/ton-lite-client");
|
|
10
|
-
const artifacts_1 = require("../../artifacts");
|
|
11
|
-
const Utils_1 = require("../sdk/Utils");
|
|
12
|
-
const Struct_1 = require("../structs/Struct");
|
|
13
|
-
async function getHttpEndpointWithRetry(network, maxRetries = 5, delay = 1000) {
|
|
14
|
-
let lastError;
|
|
15
|
-
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
16
|
-
try {
|
|
17
|
-
const tonNetwork = network === Struct_1.Network.MAINNET ? 'mainnet' : 'testnet';
|
|
18
|
-
return await (0, ton_access_1.getHttpEndpoint)({ network: tonNetwork });
|
|
19
|
-
}
|
|
20
|
-
catch (error) {
|
|
21
|
-
lastError = error;
|
|
22
|
-
if (attempt <= maxRetries) {
|
|
23
|
-
await (0, Utils_1.sleep)(delay);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
throw lastError || new Error('Failed to get HTTP endpoint after retries');
|
|
28
|
-
}
|
|
29
|
-
async function getHttpV4EndpointWithRetry(network, maxRetries = 5, delay = 1000) {
|
|
30
|
-
let lastError;
|
|
31
|
-
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
32
|
-
try {
|
|
33
|
-
const tonNetwork = network === Struct_1.Network.MAINNET ? 'mainnet' : 'testnet';
|
|
34
|
-
return await (0, ton_access_1.getHttpV4Endpoint)({ network: tonNetwork });
|
|
35
|
-
}
|
|
36
|
-
catch (error) {
|
|
37
|
-
lastError = error;
|
|
38
|
-
if (attempt <= maxRetries) {
|
|
39
|
-
await (0, Utils_1.sleep)(delay);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
throw lastError || new Error('Failed to get HTTP V4 endpoint after retries');
|
|
44
|
-
}
|
|
45
|
-
function intToIP(int) {
|
|
46
|
-
const part1 = int & 255;
|
|
47
|
-
const part2 = (int >> 8) & 255;
|
|
48
|
-
const part3 = (int >> 16) & 255;
|
|
49
|
-
const part4 = (int >> 24) & 255;
|
|
50
|
-
return part4 + '.' + part3 + '.' + part2 + '.' + part1;
|
|
51
|
-
}
|
|
52
|
-
async function getDefaultLiteServers(network) {
|
|
53
|
-
const url = network === Struct_1.Network.TESTNET || network === Struct_1.Network.DEV
|
|
54
|
-
? artifacts_1.testnet.DEFAULT_LITESERVERS
|
|
55
|
-
: artifacts_1.mainnet.DEFAULT_LITESERVERS;
|
|
56
|
-
const resp = await fetch(url);
|
|
57
|
-
const liteClients = await resp.json();
|
|
58
|
-
return liteClients.liteservers;
|
|
59
|
-
}
|
|
60
|
-
async function liteClientOpener(options) {
|
|
61
|
-
const liteservers = 'liteservers' in options ? options.liteservers : await getDefaultLiteServers(options.network);
|
|
62
|
-
const engines = [];
|
|
63
|
-
for (const server of liteservers) {
|
|
64
|
-
const engine = await ton_lite_client_1.LiteSingleEngine.create({
|
|
65
|
-
host: `tcp://${intToIP(server.ip)}:${server.port}`,
|
|
66
|
-
publicKey: Buffer.from(server.id.key, 'base64'),
|
|
67
|
-
});
|
|
68
|
-
engines.push(engine);
|
|
69
|
-
}
|
|
70
|
-
const engine = new ton_lite_client_1.LiteRoundRobinEngine(engines);
|
|
71
|
-
const client = new ton_lite_client_1.LiteClient({ engine });
|
|
72
|
-
const closeConnections = () => {
|
|
73
|
-
engine.close();
|
|
74
|
-
};
|
|
75
|
-
return {
|
|
76
|
-
getContractState: async (addr) => {
|
|
77
|
-
const block = await client.getMasterchainInfo();
|
|
78
|
-
const state = await client.getAccountState(addr, block.last);
|
|
79
|
-
const accountState = state.state?.storage?.state;
|
|
80
|
-
const code = accountState?.type === 'active' ? accountState?.state?.code?.toBoc() : null;
|
|
81
|
-
return {
|
|
82
|
-
balance: state.balance.coins,
|
|
83
|
-
state: state.state.storage.state.type === 'uninit' ? 'uninitialized' : state.state.storage.state.type,
|
|
84
|
-
code: code ?? null,
|
|
85
|
-
};
|
|
86
|
-
},
|
|
87
|
-
open: (contract) => client.open(contract),
|
|
88
|
-
closeConnections,
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
function sandboxOpener(blockchain) {
|
|
92
|
-
return {
|
|
93
|
-
open: (contract) => blockchain.openContract(contract),
|
|
94
|
-
getContractState: async (address) => {
|
|
95
|
-
const state = await blockchain.provider(address).getState();
|
|
96
|
-
return {
|
|
97
|
-
balance: state.balance,
|
|
98
|
-
code: 'code' in state.state ? (state.state.code ?? null) : null,
|
|
99
|
-
state: state.state.type === 'uninit' ? 'uninitialized' : state.state.type,
|
|
100
|
-
};
|
|
101
|
-
},
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
async function orbsOpener(network) {
|
|
105
|
-
const endpoint = await getHttpEndpointWithRetry(network);
|
|
106
|
-
return new ton_1.TonClient({ endpoint });
|
|
107
|
-
}
|
|
108
|
-
async function orbsOpener4(network, timeout = 10000) {
|
|
109
|
-
const endpoint = await getHttpV4EndpointWithRetry(network);
|
|
110
|
-
const client4 = new ton_1.TonClient4({ endpoint, timeout });
|
|
111
|
-
return {
|
|
112
|
-
open: (contract) => client4.open(contract),
|
|
113
|
-
getContractState: async (address) => {
|
|
114
|
-
const latestBlock = await client4.getLastBlock();
|
|
115
|
-
const latestBlockNumber = latestBlock.last.seqno;
|
|
116
|
-
const state = await client4.getAccount(latestBlockNumber, address);
|
|
117
|
-
return {
|
|
118
|
-
balance: BigInt(state.account.balance.coins),
|
|
119
|
-
code: 'code' in state.account.state && state.account.state.code !== null
|
|
120
|
-
? Buffer.from(state.account.state.code, 'base64')
|
|
121
|
-
: null,
|
|
122
|
-
state: state.account.state.type === 'uninit' ? 'uninitialized' : state.account.state.type,
|
|
123
|
-
};
|
|
124
|
-
},
|
|
125
|
-
};
|
|
126
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { SandboxContract } from '@ton/sandbox';
|
|
2
|
-
import { Address, Contract, OpenedContract } from '@ton/ton';
|
|
3
|
-
import { ContractOpener } from '../interfaces';
|
|
4
|
-
import { ContractState, Network } from '../structs/Struct';
|
|
5
|
-
export interface OpenerConfig {
|
|
6
|
-
/** Underlying opener implementation to use for this slot. */
|
|
7
|
-
opener: ContractOpener;
|
|
8
|
-
/** Number of retry attempts before falling back to the next opener. */
|
|
9
|
-
retries: number;
|
|
10
|
-
/** Delay in milliseconds between retries for this opener. */
|
|
11
|
-
retryDelay: number;
|
|
12
|
-
}
|
|
13
|
-
export declare class RetryableContractOpener implements ContractOpener {
|
|
14
|
-
private readonly openerConfigs;
|
|
15
|
-
constructor(openerConfigs: OpenerConfig[]);
|
|
16
|
-
open<T extends Contract>(src: T): OpenedContract<T> | SandboxContract<T>;
|
|
17
|
-
getContractState(address: Address): Promise<ContractState>;
|
|
18
|
-
closeConnections(): void;
|
|
19
|
-
private executeWithFallback;
|
|
20
|
-
private tryWithRetries;
|
|
21
|
-
private createRetryableContract;
|
|
22
|
-
private callMethodAcrossOpeners;
|
|
23
|
-
}
|
|
24
|
-
export declare function createDefaultRetryableOpener(tonRpcEndpoint: string, networkType: Network, maxRetries?: number, retryDelay?: number): Promise<ContractOpener>;
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RetryableContractOpener = void 0;
|
|
4
|
-
exports.createDefaultRetryableOpener = createDefaultRetryableOpener;
|
|
5
|
-
const ton_1 = require("@ton/ton");
|
|
6
|
-
const instances_1 = require("../errors/instances");
|
|
7
|
-
const Struct_1 = require("../structs/Struct");
|
|
8
|
-
const contractOpener_1 = require("./contractOpener");
|
|
9
|
-
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
10
|
-
class RetryableContractOpener {
|
|
11
|
-
constructor(openerConfigs) {
|
|
12
|
-
if (openerConfigs.length === 0) {
|
|
13
|
-
throw new Error('No ContractOpener instances available');
|
|
14
|
-
}
|
|
15
|
-
this.openerConfigs = openerConfigs;
|
|
16
|
-
}
|
|
17
|
-
open(src) {
|
|
18
|
-
const firstConfig = this.openerConfigs[0];
|
|
19
|
-
const contract = firstConfig.opener.open(src);
|
|
20
|
-
return this.createRetryableContract(contract, src);
|
|
21
|
-
}
|
|
22
|
-
async getContractState(address) {
|
|
23
|
-
const result = await this.executeWithFallback((config) => config.opener.getContractState(address));
|
|
24
|
-
if (result.success && result.data) {
|
|
25
|
-
return result.data;
|
|
26
|
-
}
|
|
27
|
-
throw result.lastError || (0, instances_1.allContractOpenerFailedError)('Failed to get contract state');
|
|
28
|
-
}
|
|
29
|
-
closeConnections() {
|
|
30
|
-
for (const config of this.openerConfigs) {
|
|
31
|
-
config.opener.closeConnections?.();
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
async executeWithFallback(operation) {
|
|
35
|
-
let lastError;
|
|
36
|
-
for (const config of this.openerConfigs) {
|
|
37
|
-
const result = await this.tryWithRetries(() => operation(config), config);
|
|
38
|
-
if (result.success) {
|
|
39
|
-
return { success: true, data: result.data };
|
|
40
|
-
}
|
|
41
|
-
lastError = result.lastError;
|
|
42
|
-
}
|
|
43
|
-
return { success: false, lastError };
|
|
44
|
-
}
|
|
45
|
-
async tryWithRetries(operation, config) {
|
|
46
|
-
let lastError;
|
|
47
|
-
for (let attempt = 0; attempt <= config.retries; attempt++) {
|
|
48
|
-
try {
|
|
49
|
-
const data = await operation();
|
|
50
|
-
return { success: true, data };
|
|
51
|
-
}
|
|
52
|
-
catch (error) {
|
|
53
|
-
lastError = error;
|
|
54
|
-
if (attempt < config.retries) {
|
|
55
|
-
await sleep(config.retryDelay);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
return { success: false, lastError };
|
|
60
|
-
}
|
|
61
|
-
createRetryableContract(contract, src) {
|
|
62
|
-
return new Proxy(contract, {
|
|
63
|
-
get: (target, prop) => {
|
|
64
|
-
const value = Reflect.get(target, prop);
|
|
65
|
-
if (typeof value !== 'function')
|
|
66
|
-
return value;
|
|
67
|
-
return async (...args) => {
|
|
68
|
-
return this.callMethodAcrossOpeners(prop, args, src);
|
|
69
|
-
};
|
|
70
|
-
},
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
async callMethodAcrossOpeners(methodName, args, src) {
|
|
74
|
-
const result = await this.executeWithFallback((config) => {
|
|
75
|
-
const contract = config.opener.open(src);
|
|
76
|
-
const method = Reflect.get(contract, methodName);
|
|
77
|
-
if (typeof method !== 'function') {
|
|
78
|
-
throw new Error(`Method ${String(methodName)} is not a function`);
|
|
79
|
-
}
|
|
80
|
-
return method.call(contract, ...args);
|
|
81
|
-
});
|
|
82
|
-
if (result.success)
|
|
83
|
-
return result.data;
|
|
84
|
-
throw result.lastError || (0, instances_1.allContractOpenerFailedError)('failed to call method in contract');
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
exports.RetryableContractOpener = RetryableContractOpener;
|
|
88
|
-
async function createDefaultRetryableOpener(tonRpcEndpoint, networkType, maxRetries = 5, retryDelay = 1000) {
|
|
89
|
-
const openers = [];
|
|
90
|
-
const tonClient = new ton_1.TonClient({
|
|
91
|
-
endpoint: new URL('api/v2/jsonRPC', tonRpcEndpoint).toString(),
|
|
92
|
-
});
|
|
93
|
-
openers.push({ opener: tonClient, retries: maxRetries, retryDelay });
|
|
94
|
-
if (networkType !== Struct_1.Network.DEV) {
|
|
95
|
-
try {
|
|
96
|
-
const opener4 = await (0, contractOpener_1.orbsOpener4)(networkType);
|
|
97
|
-
openers.push({ opener: opener4, retries: maxRetries, retryDelay });
|
|
98
|
-
}
|
|
99
|
-
catch {
|
|
100
|
-
// skip opener in case of failure
|
|
101
|
-
}
|
|
102
|
-
try {
|
|
103
|
-
const opener = await (0, contractOpener_1.orbsOpener)(networkType);
|
|
104
|
-
openers.push({ opener: opener, retries: maxRetries, retryDelay });
|
|
105
|
-
}
|
|
106
|
-
catch {
|
|
107
|
-
// skip opener in case of failure
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
return new RetryableContractOpener(openers);
|
|
111
|
-
}
|