@lifi/sdk 3.3.1 → 3.4.1
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/package.json +4 -4
- package/src/_cjs/config.js +6 -5
- package/src/_cjs/config.js.map +1 -1
- package/src/_cjs/core/Solana/SolanaStepExecutor.js +12 -47
- package/src/_cjs/core/Solana/SolanaStepExecutor.js.map +1 -1
- package/src/_cjs/core/Solana/connection.js +30 -9
- package/src/_cjs/core/Solana/connection.js.map +1 -1
- package/src/_cjs/core/Solana/getSolanaBalance.js +5 -5
- package/src/_cjs/core/Solana/getSolanaBalance.js.map +1 -1
- package/src/_cjs/core/Solana/sendAndConfirmTransaction.js +68 -0
- package/src/_cjs/core/Solana/sendAndConfirmTransaction.js.map +1 -0
- package/src/_cjs/index.js +8 -2
- package/src/_cjs/index.js.map +1 -1
- package/src/_cjs/utils/withDedupe.js.map +1 -1
- package/src/_cjs/version.js +1 -1
- package/src/_esm/config.js +6 -5
- package/src/_esm/config.js.map +1 -1
- package/src/_esm/core/Solana/SolanaStepExecutor.js +14 -65
- package/src/_esm/core/Solana/SolanaStepExecutor.js.map +1 -1
- package/src/_esm/core/Solana/connection.js +40 -10
- package/src/_esm/core/Solana/connection.js.map +1 -1
- package/src/_esm/core/Solana/getSolanaBalance.js +6 -6
- package/src/_esm/core/Solana/getSolanaBalance.js.map +1 -1
- package/src/_esm/core/Solana/sendAndConfirmTransaction.js +76 -0
- package/src/_esm/core/Solana/sendAndConfirmTransaction.js.map +1 -0
- package/src/_esm/index.js +3 -0
- package/src/_esm/index.js.map +1 -1
- package/src/_esm/utils/withDedupe.js.map +1 -1
- package/src/_esm/version.js +1 -1
- package/src/_types/config.d.ts +2 -2
- package/src/_types/config.d.ts.map +1 -1
- package/src/_types/core/Solana/SolanaStepExecutor.d.ts.map +1 -1
- package/src/_types/core/Solana/connection.d.ts +14 -3
- package/src/_types/core/Solana/connection.d.ts.map +1 -1
- package/src/_types/core/Solana/getSolanaBalance.d.ts.map +1 -1
- package/src/_types/core/Solana/sendAndConfirmTransaction.d.ts +13 -0
- package/src/_types/core/Solana/sendAndConfirmTransaction.d.ts.map +1 -0
- package/src/_types/index.d.ts +6 -1
- package/src/_types/index.d.ts.map +1 -1
- package/src/_types/utils/withDedupe.d.ts +1 -1
- package/src/_types/utils/withDedupe.d.ts.map +1 -1
- package/src/_types/version.d.ts +1 -1
- package/src/config.ts +6 -6
- package/src/core/Solana/SolanaStepExecutor.ts +15 -86
- package/src/core/Solana/connection.ts +43 -10
- package/src/core/Solana/getSolanaBalance.ts +27 -7
- package/src/core/Solana/sendAndConfirmTransaction.ts +111 -0
- package/src/index.ts +10 -0
- package/src/utils/withDedupe.ts +3 -3
- package/src/version.ts +1 -1
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { VersionedTransaction
|
|
2
|
-
import bs58 from 'bs58';
|
|
1
|
+
import { VersionedTransaction } from '@solana/web3.js';
|
|
3
2
|
import { withTimeout } from 'viem';
|
|
4
3
|
import { config } from '../../config.js';
|
|
5
4
|
import { LiFiErrorCode } from '../../errors/constants.js';
|
|
@@ -7,14 +6,14 @@ import { TransactionError } from '../../errors/errors.js';
|
|
|
7
6
|
import { getStepTransaction } from '../../services/api.js';
|
|
8
7
|
import { base64ToUint8Array } from '../../utils/base64ToUint8Array.js';
|
|
9
8
|
import { getTransactionFailedMessage } from '../../utils/getTransactionMessage.js';
|
|
10
|
-
import { sleep } from '../../utils/sleep.js';
|
|
11
9
|
import { BaseStepExecutor } from '../BaseStepExecutor.js';
|
|
12
10
|
import { checkBalance } from '../checkBalance.js';
|
|
13
11
|
import { getSubstatusMessage } from '../processMessages.js';
|
|
14
12
|
import { stepComparison } from '../stepComparison.js';
|
|
15
13
|
import { waitForReceivingTransaction } from '../waitForReceivingTransaction.js';
|
|
16
|
-
import {
|
|
14
|
+
import { callSolanaWithRetry } from './connection.js';
|
|
17
15
|
import { parseSolanaErrors } from './parseSolanaErrors.js';
|
|
16
|
+
import { sendAndConfirmTransaction } from './sendAndConfirmTransaction.js';
|
|
18
17
|
export class SolanaStepExecutor extends BaseStepExecutor {
|
|
19
18
|
constructor(options) {
|
|
20
19
|
super(options);
|
|
@@ -52,7 +51,6 @@ export class SolanaStepExecutor extends BaseStepExecutor {
|
|
|
52
51
|
});
|
|
53
52
|
if (process.status !== 'DONE') {
|
|
54
53
|
try {
|
|
55
|
-
const connection = await getSolanaConnection();
|
|
56
54
|
process = this.statusManager.updateProcess(step, process.type, 'STARTED');
|
|
57
55
|
// Check balance
|
|
58
56
|
await checkBalance(this.walletAdapter.publicKey.toString(), step);
|
|
@@ -76,9 +74,6 @@ export class SolanaStepExecutor extends BaseStepExecutor {
|
|
|
76
74
|
let transactionRequest = {
|
|
77
75
|
data: step.transactionRequest.data,
|
|
78
76
|
};
|
|
79
|
-
const blockhashResult = await connection.getLatestBlockhash({
|
|
80
|
-
commitment: 'confirmed',
|
|
81
|
-
});
|
|
82
77
|
if (this.executionOptions?.updateTransactionRequestHook) {
|
|
83
78
|
const customizedTransactionRequest = await this.executionOptions.updateTransactionRequestHook({
|
|
84
79
|
requestType: 'transaction',
|
|
@@ -102,73 +97,27 @@ export class SolanaStepExecutor extends BaseStepExecutor {
|
|
|
102
97
|
errorInstance: new TransactionError(LiFiErrorCode.TransactionExpired, 'Transaction has expired: blockhash is no longer recent enough.'),
|
|
103
98
|
});
|
|
104
99
|
process = this.statusManager.updateProcess(step, process.type, 'PENDING');
|
|
105
|
-
const simulationResult = await connection.simulateTransaction(signedTx, {
|
|
106
|
-
commitment: '
|
|
100
|
+
const simulationResult = await callSolanaWithRetry((connection) => connection.simulateTransaction(signedTx, {
|
|
101
|
+
commitment: 'confirmed',
|
|
107
102
|
replaceRecentBlockhash: true,
|
|
108
|
-
});
|
|
103
|
+
}));
|
|
109
104
|
if (simulationResult.value.err) {
|
|
110
105
|
throw new TransactionError(LiFiErrorCode.TransactionSimulationFailed, 'Transaction simulation failed');
|
|
111
106
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
// A known weirdness - MAX_RECENT_BLOCKHASHES is 300
|
|
115
|
-
// https://github.com/solana-labs/solana/blob/master/sdk/program/src/clock.rs#L123
|
|
116
|
-
// but MAX_PROCESSING_AGE is 150
|
|
117
|
-
// https://github.com/solana-labs/solana/blob/master/sdk/program/src/clock.rs#L129
|
|
118
|
-
// the blockhash queue in the bank tells you 300 + current slot, but it won't be accepted 150 blocks later.
|
|
119
|
-
// https://solana.com/docs/advanced/confirmation#transaction-expiration
|
|
120
|
-
const lastValidBlockHeight = blockhashResult.lastValidBlockHeight - 150;
|
|
121
|
-
// In the following section, we wait and constantly check for the transaction to be confirmed
|
|
122
|
-
// and resend the transaction if it is not confirmed within a certain time interval
|
|
123
|
-
// thus handling tx retries on the client side rather than relying on the RPC
|
|
124
|
-
const abortController = new AbortController();
|
|
125
|
-
const confirmTransactionPromise = connection
|
|
126
|
-
.confirmTransaction({
|
|
127
|
-
signature: txSignature,
|
|
128
|
-
blockhash: blockhashResult.blockhash,
|
|
129
|
-
lastValidBlockHeight: lastValidBlockHeight,
|
|
130
|
-
abortSignal: abortController.signal,
|
|
131
|
-
}, 'confirmed')
|
|
132
|
-
.then((result) => result.value);
|
|
133
|
-
let confirmedTx = null;
|
|
134
|
-
let blockHeight = await connection.getBlockHeight();
|
|
135
|
-
const rawTransactionOptions = {
|
|
136
|
-
// We can skip preflight check after the first transaction has been sent
|
|
137
|
-
// https://solana.com/docs/advanced/retry#the-cost-of-skipping-preflight
|
|
138
|
-
skipPreflight: true,
|
|
139
|
-
// Setting max retries to 0 as we are handling retries manually
|
|
140
|
-
maxRetries: 0,
|
|
141
|
-
// https://solana.com/docs/advanced/confirmation#use-an-appropriate-preflight-commitment-level
|
|
142
|
-
preflightCommitment: 'confirmed',
|
|
143
|
-
};
|
|
144
|
-
const signedTxSerialized = signedTx.serialize();
|
|
145
|
-
// https://solana.com/docs/advanced/retry#customizing-rebroadcast-logic
|
|
146
|
-
while (!confirmedTx && blockHeight < lastValidBlockHeight) {
|
|
147
|
-
await connection.sendRawTransaction(signedTxSerialized, rawTransactionOptions);
|
|
148
|
-
confirmedTx = await Promise.race([
|
|
149
|
-
confirmTransactionPromise,
|
|
150
|
-
sleep(1000),
|
|
151
|
-
]);
|
|
152
|
-
if (confirmedTx) {
|
|
153
|
-
break;
|
|
154
|
-
}
|
|
155
|
-
blockHeight = await connection.getBlockHeight();
|
|
156
|
-
}
|
|
157
|
-
// Stop waiting for tx confirmation
|
|
158
|
-
abortController.abort();
|
|
159
|
-
if (!confirmedTx) {
|
|
107
|
+
const confirmedTx = await sendAndConfirmTransaction(signedTx);
|
|
108
|
+
if (!confirmedTx.signatureResult) {
|
|
160
109
|
throw new TransactionError(LiFiErrorCode.TransactionExpired, 'Transaction has expired: The block height has exceeded the maximum allowed limit.');
|
|
161
110
|
}
|
|
162
|
-
if (confirmedTx
|
|
163
|
-
const reason = typeof confirmedTx.err === 'object'
|
|
164
|
-
? JSON.stringify(confirmedTx.err)
|
|
165
|
-
: confirmedTx.err;
|
|
111
|
+
if (confirmedTx.signatureResult.err) {
|
|
112
|
+
const reason = typeof confirmedTx.signatureResult.err === 'object'
|
|
113
|
+
? JSON.stringify(confirmedTx.signatureResult.err)
|
|
114
|
+
: confirmedTx.signatureResult.err;
|
|
166
115
|
throw new TransactionError(LiFiErrorCode.TransactionFailed, `Transaction failed: ${reason}`);
|
|
167
116
|
}
|
|
168
117
|
// Transaction has been confirmed and we can update the process
|
|
169
118
|
process = this.statusManager.updateProcess(step, process.type, 'PENDING', {
|
|
170
|
-
txHash: txSignature,
|
|
171
|
-
txLink: `${fromChain.metamask.blockExplorerUrls[0]}tx/${txSignature}`,
|
|
119
|
+
txHash: confirmedTx.txSignature,
|
|
120
|
+
txLink: `${fromChain.metamask.blockExplorerUrls[0]}tx/${confirmedTx.txSignature}`,
|
|
172
121
|
});
|
|
173
122
|
if (isBridgeExecution) {
|
|
174
123
|
process = this.statusManager.updateProcess(step, process.type, 'DONE');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolanaStepExecutor.js","sourceRoot":"","sources":["../../../core/Solana/SolanaStepExecutor.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"SolanaStepExecutor.js","sourceRoot":"","sources":["../../../core/Solana/SolanaStepExecutor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,47 @@
|
|
|
1
1
|
import { ChainId } from '@lifi/types';
|
|
2
2
|
import { Connection } from '@solana/web3.js';
|
|
3
|
-
import {
|
|
4
|
-
|
|
3
|
+
import { getRpcUrls } from '../rpc.js';
|
|
4
|
+
const connections = new Map();
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
* @returns -
|
|
6
|
+
* Initializes the Solana connections if they haven't been initialized yet.
|
|
7
|
+
* @returns - Promise that resolves when connections are initialized.
|
|
8
8
|
*/
|
|
9
|
-
export const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
export const ensureConnections = async () => {
|
|
10
|
+
const rpcUrls = await getRpcUrls(ChainId.SOL);
|
|
11
|
+
for (const rpcUrl of rpcUrls) {
|
|
12
|
+
if (!connections.get(rpcUrl)) {
|
|
13
|
+
const connection = new Connection(rpcUrl);
|
|
14
|
+
connections.set(rpcUrl, connection);
|
|
15
|
+
}
|
|
14
16
|
}
|
|
15
|
-
return connection;
|
|
16
17
|
};
|
|
18
|
+
/**
|
|
19
|
+
* Wrapper around getting the connection (RPC provider) for Solana
|
|
20
|
+
* @returns - Solana RPC connections
|
|
21
|
+
*/
|
|
22
|
+
export const getSolanaConnections = async () => {
|
|
23
|
+
await ensureConnections();
|
|
24
|
+
return Array.from(connections.values());
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Calls a function on the Connection instances with retry logic.
|
|
28
|
+
* @param fn - The function to call, which receives a Connection instance.
|
|
29
|
+
* @returns - The result of the function call.
|
|
30
|
+
*/
|
|
31
|
+
export async function callSolanaWithRetry(fn) {
|
|
32
|
+
// Ensure connections are initialized
|
|
33
|
+
await ensureConnections();
|
|
34
|
+
let lastError = null;
|
|
35
|
+
for (const connection of connections.values()) {
|
|
36
|
+
try {
|
|
37
|
+
const result = await fn(connection);
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
lastError = error;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// Throw the last encountered error
|
|
45
|
+
throw lastError;
|
|
46
|
+
}
|
|
17
47
|
//# sourceMappingURL=connection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../core/Solana/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../core/Solana/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAEtC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAsB,CAAA;AAEjD;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,IAAmB,EAAE;IACzD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC7C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAA;YACzC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;QACrC,CAAC;IACH,CAAC;AACH,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,IAA2B,EAAE;IACpE,MAAM,iBAAiB,EAAE,CAAA;IACzB,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAA;AACzC,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,EAA0C;IAE1C,qCAAqC;IACrC,MAAM,iBAAiB,EAAE,CAAA;IACzB,IAAI,SAAS,GAAQ,IAAI,CAAA;IACzB,KAAK,MAAM,UAAU,IAAI,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,CAAA;YACnC,OAAO,MAAM,CAAA;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAK,CAAA;QACnB,CAAC;IACH,CAAC;IACD,mCAAmC;IACnC,MAAM,SAAS,CAAA;AACjB,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { PublicKey } from '@solana/web3.js';
|
|
2
2
|
import { SolSystemProgram } from '../../constants.js';
|
|
3
|
-
import {
|
|
3
|
+
import { withDedupe } from '../../utils/withDedupe.js';
|
|
4
|
+
import { callSolanaWithRetry } from './connection.js';
|
|
4
5
|
import { TokenProgramAddress } from './types.js';
|
|
5
6
|
export const getSolanaBalance = async (walletAddress, tokens) => {
|
|
6
7
|
if (tokens.length === 0) {
|
|
@@ -15,15 +16,14 @@ export const getSolanaBalance = async (walletAddress, tokens) => {
|
|
|
15
16
|
return getSolanaBalanceDefault(chainId, tokens, walletAddress);
|
|
16
17
|
};
|
|
17
18
|
const getSolanaBalanceDefault = async (_chainId, tokens, walletAddress) => {
|
|
18
|
-
const connection = await getSolanaConnection();
|
|
19
19
|
const accountPublicKey = new PublicKey(walletAddress);
|
|
20
20
|
const tokenProgramPublicKey = new PublicKey(TokenProgramAddress);
|
|
21
21
|
const [slot, balance, tokenAccountsByOwner] = await Promise.allSettled([
|
|
22
|
-
connection.getSlot(),
|
|
23
|
-
connection.getBalance(accountPublicKey),
|
|
24
|
-
connection.getParsedTokenAccountsByOwner(accountPublicKey, {
|
|
22
|
+
withDedupe(() => callSolanaWithRetry((connection) => connection.getSlot('confirmed')), { id: `${getSolanaBalanceDefault.name}.getSlot` }),
|
|
23
|
+
withDedupe(() => callSolanaWithRetry((connection) => connection.getBalance(accountPublicKey, 'confirmed')), { id: `${getSolanaBalanceDefault.name}.getBalance` }),
|
|
24
|
+
withDedupe(() => callSolanaWithRetry((connection) => connection.getParsedTokenAccountsByOwner(accountPublicKey, {
|
|
25
25
|
programId: tokenProgramPublicKey,
|
|
26
|
-
}),
|
|
26
|
+
}, 'confirmed')), { id: `${getSolanaBalanceDefault.name}.getParsedTokenAccountsByOwner` }),
|
|
27
27
|
]);
|
|
28
28
|
const blockNumber = slot.status === 'fulfilled' ? BigInt(slot.value) : 0n;
|
|
29
29
|
const solBalance = balance.status === 'fulfilled' ? BigInt(balance.value) : 0n;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getSolanaBalance.js","sourceRoot":"","sources":["../../../core/Solana/getSolanaBalance.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAEhD,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EACnC,aAAqB,EACrB,MAAe,EACS,EAAE;IAC1B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAA;IACX,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IAC7B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAA;QAChE,CAAC;IACH,CAAC;IAED,OAAO,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,CAAA;AAChE,CAAC,CAAA;AAED,MAAM,uBAAuB,GAAG,KAAK,EACnC,QAAiB,EACjB,MAAe,EACf,aAAqB,EACG,EAAE;IAC1B,MAAM,
|
|
1
|
+
{"version":3,"file":"getSolanaBalance.js","sourceRoot":"","sources":["../../../core/Solana/getSolanaBalance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import bs58 from 'bs58';
|
|
2
|
+
import { sleep } from '../../utils/sleep.js';
|
|
3
|
+
import { getSolanaConnections } from './connection.js';
|
|
4
|
+
/**
|
|
5
|
+
* Sends a Solana transaction to multiple RPC endpoints and returns the confirmation
|
|
6
|
+
* as soon as any of them confirm the transaction.
|
|
7
|
+
* @param signedTx - The signed transaction to send.
|
|
8
|
+
* @returns - The confirmation result of the transaction.
|
|
9
|
+
*/
|
|
10
|
+
export async function sendAndConfirmTransaction(signedTx) {
|
|
11
|
+
const connections = await getSolanaConnections();
|
|
12
|
+
const signedTxSerialized = signedTx.serialize();
|
|
13
|
+
// Create transaction hash (signature)
|
|
14
|
+
const txSignature = bs58.encode(signedTx.signatures[0]);
|
|
15
|
+
if (!txSignature) {
|
|
16
|
+
throw new Error('Transaction signature is missing.');
|
|
17
|
+
}
|
|
18
|
+
const rawTransactionOptions = {
|
|
19
|
+
// We can skip preflight check after the first transaction has been sent
|
|
20
|
+
// https://solana.com/docs/advanced/retry#the-cost-of-skipping-preflight
|
|
21
|
+
skipPreflight: true,
|
|
22
|
+
// Setting max retries to 0 as we are handling retries manually
|
|
23
|
+
maxRetries: 0,
|
|
24
|
+
// https://solana.com/docs/advanced/confirmation#use-an-appropriate-preflight-commitment-level
|
|
25
|
+
preflightCommitment: 'confirmed',
|
|
26
|
+
};
|
|
27
|
+
for (const connection of connections) {
|
|
28
|
+
connection
|
|
29
|
+
.sendRawTransaction(signedTxSerialized, rawTransactionOptions)
|
|
30
|
+
.catch();
|
|
31
|
+
}
|
|
32
|
+
const abortControllers = [];
|
|
33
|
+
const confirmPromises = connections.map(async (connection) => {
|
|
34
|
+
const abortController = new AbortController();
|
|
35
|
+
abortControllers.push(abortController);
|
|
36
|
+
try {
|
|
37
|
+
const blockhashResult = await connection.getLatestBlockhash('confirmed');
|
|
38
|
+
const confirmTransactionPromise = connection
|
|
39
|
+
.confirmTransaction({
|
|
40
|
+
signature: txSignature,
|
|
41
|
+
blockhash: blockhashResult.blockhash,
|
|
42
|
+
lastValidBlockHeight: blockhashResult.lastValidBlockHeight,
|
|
43
|
+
abortSignal: abortController.signal,
|
|
44
|
+
}, 'confirmed')
|
|
45
|
+
.then((result) => result.value);
|
|
46
|
+
let signatureResult = null;
|
|
47
|
+
let blockHeight = await connection.getBlockHeight('confirmed');
|
|
48
|
+
while (!signatureResult &&
|
|
49
|
+
blockHeight < blockhashResult.lastValidBlockHeight) {
|
|
50
|
+
await connection.sendRawTransaction(signedTxSerialized, rawTransactionOptions);
|
|
51
|
+
signatureResult = await Promise.race([
|
|
52
|
+
confirmTransactionPromise,
|
|
53
|
+
sleep(1000),
|
|
54
|
+
]);
|
|
55
|
+
if (signatureResult || abortController.signal.aborted) {
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
blockHeight = await connection.getBlockHeight('confirmed');
|
|
59
|
+
}
|
|
60
|
+
abortController.abort();
|
|
61
|
+
return signatureResult;
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
if (abortController.signal.aborted) {
|
|
65
|
+
return Promise.reject(new Error('Confirmation aborted.'));
|
|
66
|
+
}
|
|
67
|
+
throw error;
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
const signatureResult = await Promise.any(confirmPromises).catch(() => null);
|
|
71
|
+
for (const abortController of abortControllers) {
|
|
72
|
+
abortController.abort();
|
|
73
|
+
}
|
|
74
|
+
return { signatureResult, txSignature };
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=sendAndConfirmTransaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sendAndConfirmTransaction.js","sourceRoot":"","sources":["../../../core/Solana/sendAndConfirmTransaction.ts"],"names":[],"mappings":"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"}
|
package/src/_esm/index.js
CHANGED
|
@@ -5,12 +5,15 @@ export { config } from './config.js';
|
|
|
5
5
|
export { EVM } from './core/EVM/EVM.js';
|
|
6
6
|
export { getTokenAllowance, getTokenAllowanceMulticall, } from './core/EVM/getAllowance.js';
|
|
7
7
|
export { revokeTokenApproval, setTokenAllowance, } from './core/EVM/setAllowance.js';
|
|
8
|
+
export { isEVM } from './core/EVM/types.js';
|
|
8
9
|
export { StatusManager } from './core/StatusManager.js';
|
|
9
10
|
export { executeRoute, getActiveRoute, getActiveRoutes, resumeRoute, stopRouteExecution, updateRouteExecution, } from './core/execution.js';
|
|
10
11
|
export { isSVMAddress } from './core/Solana/isSVMAddress.js';
|
|
11
12
|
export { KeypairWalletAdapter, KeypairWalletName, } from './core/Solana/KeypairWalletAdapter.js';
|
|
12
13
|
export { Solana } from './core/Solana/Solana.js';
|
|
14
|
+
export { isSolana } from './core/Solana/types.js';
|
|
13
15
|
export { UTXO } from './core/UTXO/UTXO.js';
|
|
16
|
+
export { isUTXO } from './core/UTXO/types.js';
|
|
14
17
|
export { createConfig } from './createConfig.js';
|
|
15
18
|
export { checkPackageUpdates, convertQuoteToRoute, fetchTxErrorDetails, } from './helpers.js';
|
|
16
19
|
export { getChains, getConnections, getContractCallsQuote, getGasRecommendation, getQuote, getRoutes, getStatus, getStepTransaction, getToken, getTokens, getTools, getTransactionHistory, } from './services/api.js';
|
package/src/_esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,qDAAqD;AACrD,cAAc,aAAa,CAAA;AAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AACvC,OAAO,EACL,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,qDAAqD;AACrD,cAAc,aAAa,CAAA;AAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AACvC,OAAO,EACL,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAQ3C,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EACL,YAAY,EACZ,cAAc,EACd,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,qBAAqB,CAAA;AAuB5B,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAC5D,OAAO,EACL,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,uCAAuC,CAAA;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAKjD,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,SAAS,EACT,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,QAAQ,EACR,SAAS,EACT,SAAS,EACT,kBAAkB,EAClB,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,qBAAqB,GACtB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAA;AAE3E,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EACL,YAAY,EACZ,SAAS,EACT,aAAa,GACd,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EACL,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,eAAe,GAChB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withDedupe.js","sourceRoot":"","sources":["../../utils/withDedupe.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,OAAO,MAAwB,SAAQ,GAAkB;IAG7D,YAAY,IAAY;QACtB,KAAK,EAAE,CAAA;QAHT;;;;;WAAe;QAIb,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;IACrB,CAAC;IAEQ,GAAG,CAAC,GAAW,EAAE,KAAY;QACpC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QACrB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAM,CAAC,CAAA;QACxC,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;CACF;AAED,gBAAgB;AAChB,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,MAAM,CAAe,IAAI,CAAC,CAAA;AAOxE,uCAAuC;AACvC,MAAM,UAAU,UAAU,CACxB,
|
|
1
|
+
{"version":3,"file":"withDedupe.js","sourceRoot":"","sources":["../../utils/withDedupe.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,OAAO,MAAwB,SAAQ,GAAkB;IAG7D,YAAY,IAAY;QACtB,KAAK,EAAE,CAAA;QAHT;;;;;WAAe;QAIb,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;IACrB,CAAC;IAEQ,GAAG,CAAC,GAAW,EAAE,KAAY;QACpC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QACrB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAM,CAAC,CAAA;QACxC,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;CACF;AAED,gBAAgB;AAChB,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,MAAM,CAAe,IAAI,CAAC,CAAA;AAOxE,uCAAuC;AACvC,MAAM,UAAU,UAAU,CACxB,EAAoB,EACpB,EAAE,OAAO,GAAG,IAAI,EAAE,EAAE,EAAqB;IAEzC,IAAI,CAAC,OAAO,IAAI,CAAC,EAAE,EAAE,CAAC;QACpB,OAAO,EAAE,EAAE,CAAA;IACb,CAAC;IACD,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QACzB,OAAO,YAAY,CAAC,GAAG,CAAC,EAAE,CAAE,CAAA;IAC9B,CAAC;IACD,MAAM,OAAO,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;IAC3D,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;IAC7B,OAAO,OAAO,CAAA;AAChB,CAAC"}
|
package/src/_esm/version.js
CHANGED
package/src/_types/config.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { ChainId, type ExtendedChain } from '@lifi/types';
|
|
2
2
|
import type { SDKProvider } from './core/types.js';
|
|
3
3
|
import type { RPCUrls, SDKBaseConfig, SDKConfig } from './types/internal.js';
|
|
4
4
|
export declare const config: {
|
|
@@ -9,7 +9,7 @@ export declare const config: {
|
|
|
9
9
|
setChains(chains: ExtendedChain[]): void;
|
|
10
10
|
getChains(): Promise<ExtendedChain[]>;
|
|
11
11
|
getChainById(chainId: ChainId): Promise<ExtendedChain>;
|
|
12
|
-
setRPCUrls(rpcUrls: RPCUrls): void;
|
|
12
|
+
setRPCUrls(rpcUrls: RPCUrls, skipChains?: ChainId[]): void;
|
|
13
13
|
getRPCUrls(): Promise<Partial<Record<ChainId, string[]>>>;
|
|
14
14
|
};
|
|
15
15
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../config.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAE5E,eAAO,MAAM,MAAM;;;iBAkBF,SAAS;4BAcE,WAAW,EAAE;sBASnB,aAAa,EAAE;;0BAiBL,OAAO;wBAUf,OAAO,eAAe,OAAO,EAAE;;CAwBnD,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolanaStepExecutor.d.ts","sourceRoot":"","sources":["../../../core/Solana/SolanaStepExecutor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"SolanaStepExecutor.d.ts","sourceRoot":"","sources":["../../../core/Solana/SolanaStepExecutor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAStE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAIzD,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,EAEpB,MAAM,aAAa,CAAA;AAMpB,MAAM,WAAW,yBAA0B,SAAQ,mBAAmB;IACpE,aAAa,EAAE,mBAAmB,CAAA;CACnC;AAED,qBAAa,kBAAmB,SAAQ,gBAAgB;IACtD,OAAO,CAAC,aAAa,CAAqB;gBAE9B,OAAO,EAAE,yBAAyB;IAK9C,kBAAkB,SAAU,gBAAgB,UAQ3C;IAED,WAAW,SAAgB,gBAAgB,KAAG,OAAO,CAAC,gBAAgB,CAAC,CAsPtE;CACF"}
|
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
import { Connection } from '@solana/web3.js';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
* @returns -
|
|
3
|
+
* Initializes the Solana connections if they haven't been initialized yet.
|
|
4
|
+
* @returns - Promise that resolves when connections are initialized.
|
|
5
5
|
*/
|
|
6
|
-
export declare const
|
|
6
|
+
export declare const ensureConnections: () => Promise<void>;
|
|
7
|
+
/**
|
|
8
|
+
* Wrapper around getting the connection (RPC provider) for Solana
|
|
9
|
+
* @returns - Solana RPC connections
|
|
10
|
+
*/
|
|
11
|
+
export declare const getSolanaConnections: () => Promise<Connection[]>;
|
|
12
|
+
/**
|
|
13
|
+
* Calls a function on the Connection instances with retry logic.
|
|
14
|
+
* @param fn - The function to call, which receives a Connection instance.
|
|
15
|
+
* @returns - The result of the function call.
|
|
16
|
+
*/
|
|
17
|
+
export declare function callSolanaWithRetry<R>(fn: (connection: Connection) => Promise<R>): Promise<R>;
|
|
7
18
|
//# sourceMappingURL=connection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../core/Solana/connection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAK5C;;;GAGG;AACH,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../core/Solana/connection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAK5C;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAAa,OAAO,CAAC,IAAI,CAQtD,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,QAAa,OAAO,CAAC,UAAU,EAAE,CAGjE,CAAA;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,EAAE,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,GACzC,OAAO,CAAC,CAAC,CAAC,CAcZ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getSolanaBalance.d.ts","sourceRoot":"","sources":["../../../core/Solana/getSolanaBalance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"getSolanaBalance.d.ts","sourceRoot":"","sources":["../../../core/Solana/getSolanaBalance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAO9D,eAAO,MAAM,gBAAgB,kBACZ,MAAM,UACb,KAAK,EAAE,KACd,OAAO,CAAC,WAAW,EAAE,CAYvB,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { SignatureResult, VersionedTransaction } from '@solana/web3.js';
|
|
2
|
+
export type ConfirmedTransactionResult = {
|
|
3
|
+
signatureResult: SignatureResult | null;
|
|
4
|
+
txSignature: string;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Sends a Solana transaction to multiple RPC endpoints and returns the confirmation
|
|
8
|
+
* as soon as any of them confirm the transaction.
|
|
9
|
+
* @param signedTx - The signed transaction to send.
|
|
10
|
+
* @returns - The confirmation result of the transaction.
|
|
11
|
+
*/
|
|
12
|
+
export declare function sendAndConfirmTransaction(signedTx: VersionedTransaction): Promise<ConfirmedTransactionResult>;
|
|
13
|
+
//# sourceMappingURL=sendAndConfirmTransaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sendAndConfirmTransaction.d.ts","sourceRoot":"","sources":["../../../core/Solana/sendAndConfirmTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,eAAe,EACf,oBAAoB,EACrB,MAAM,iBAAiB,CAAA;AAKxB,MAAM,MAAM,0BAA0B,GAAG;IACvC,eAAe,EAAE,eAAe,GAAG,IAAI,CAAA;IACvC,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,0BAA0B,CAAC,CAwFrC"}
|
package/src/_types/index.d.ts
CHANGED
|
@@ -3,14 +3,19 @@ export { config } from './config.js';
|
|
|
3
3
|
export { EVM } from './core/EVM/EVM.js';
|
|
4
4
|
export { getTokenAllowance, getTokenAllowanceMulticall, } from './core/EVM/getAllowance.js';
|
|
5
5
|
export { revokeTokenApproval, setTokenAllowance, } from './core/EVM/setAllowance.js';
|
|
6
|
-
export
|
|
6
|
+
export { isEVM } from './core/EVM/types.js';
|
|
7
|
+
export type { EVMProvider, EVMProviderOptions, MultisigConfig, MultisigTransaction, MultisigTxDetails, } from './core/EVM/types.js';
|
|
7
8
|
export { StatusManager } from './core/StatusManager.js';
|
|
8
9
|
export { executeRoute, getActiveRoute, getActiveRoutes, resumeRoute, stopRouteExecution, updateRouteExecution, } from './core/execution.js';
|
|
9
10
|
export type { AcceptExchangeRateUpdateHook, AcceptSlippageUpdateHook, AcceptSlippageUpdateHookParams, ExchangeRateUpdateParams, ExecutionOptions, InteractionSettings, LiFiStepExtended, RouteExecutionData, RouteExecutionDataDictionary, RouteExecutionDictionary, RouteExtended, SDKProvider, StepExecutor, StepExecutorOptions, StepExtended, SwitchChainHook, TransactionParameters, TransactionRequestParameters, TransactionRequestUpdateHook, UpdateRouteHook, } from './core/types.js';
|
|
10
11
|
export { isSVMAddress } from './core/Solana/isSVMAddress.js';
|
|
11
12
|
export { KeypairWalletAdapter, KeypairWalletName, } from './core/Solana/KeypairWalletAdapter.js';
|
|
12
13
|
export { Solana } from './core/Solana/Solana.js';
|
|
14
|
+
export { isSolana } from './core/Solana/types.js';
|
|
15
|
+
export type { SolanaProvider, SolanaProviderOptions, } from './core/Solana/types.js';
|
|
13
16
|
export { UTXO } from './core/UTXO/UTXO.js';
|
|
17
|
+
export { isUTXO } from './core/UTXO/types.js';
|
|
18
|
+
export type { UTXOProvider, UTXOProviderOptions } from './core/UTXO/types.js';
|
|
14
19
|
export { createConfig } from './createConfig.js';
|
|
15
20
|
export { checkPackageUpdates, convertQuoteToRoute, fetchTxErrorDetails, } from './helpers.js';
|
|
16
21
|
export { getChains, getConnections, getContractCallsQuote, getGasRecommendation, getQuote, getRoutes, getStatus, getStepTransaction, getToken, getTokens, getTools, getTransactionHistory, } from './services/api.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAEA,cAAc,aAAa,CAAA;AAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AACvC,OAAO,EACL,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,4BAA4B,CAAA;AACnC,YAAY,EACV,cAAc,EACd,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EACL,YAAY,EACZ,cAAc,EACd,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,qBAAqB,CAAA;AAC5B,YAAY,EACV,4BAA4B,EAC5B,wBAAwB,EACxB,8BAA8B,EAC9B,wBAAwB,EACxB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,4BAA4B,EAC5B,wBAAwB,EACxB,aAAa,EACb,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,4BAA4B,EAC5B,4BAA4B,EAC5B,eAAe,GAChB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAC5D,OAAO,EACL,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,uCAAuC,CAAA;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,SAAS,EACT,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,QAAQ,EACR,SAAS,EACT,SAAS,EACT,kBAAkB,EAClB,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,qBAAqB,GACtB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAA;AAC3E,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EACL,YAAY,EACZ,SAAS,EACT,aAAa,GACd,MAAM,uBAAuB,CAAA;AAC9B,YAAY,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EACL,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,eAAe,GAChB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAEA,cAAc,aAAa,CAAA;AAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AACvC,OAAO,EACL,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAC3C,YAAY,EACV,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EACL,YAAY,EACZ,cAAc,EACd,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,qBAAqB,CAAA;AAC5B,YAAY,EACV,4BAA4B,EAC5B,wBAAwB,EACxB,8BAA8B,EAC9B,wBAAwB,EACxB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,4BAA4B,EAC5B,wBAAwB,EACxB,aAAa,EACb,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,4BAA4B,EAC5B,4BAA4B,EAC5B,eAAe,GAChB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAC5D,OAAO,EACL,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,uCAAuC,CAAA;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,YAAY,EACV,cAAc,EACd,qBAAqB,GACtB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,SAAS,EACT,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,QAAQ,EACR,SAAS,EACT,SAAS,EACT,kBAAkB,EAClB,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,qBAAqB,GACtB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAA;AAC3E,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EACL,YAAY,EACZ,SAAS,EACT,aAAa,GACd,MAAM,uBAAuB,CAAA;AAC9B,YAAY,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EACL,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,eAAe,GAChB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -15,6 +15,6 @@ type WithDedupeOptions = {
|
|
|
15
15
|
id?: string | undefined;
|
|
16
16
|
};
|
|
17
17
|
/** Deduplicates in-flight promises. */
|
|
18
|
-
export declare function withDedupe<
|
|
18
|
+
export declare function withDedupe<T>(fn: () => Promise<T>, { enabled, id }: WithDedupeOptions): Promise<T>;
|
|
19
19
|
export {};
|
|
20
20
|
//# sourceMappingURL=withDedupe.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withDedupe.d.ts","sourceRoot":"","sources":["../../utils/withDedupe.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,qBAAa,MAAM,CAAC,KAAK,GAAG,OAAO,CAAE,SAAQ,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC;IAC7D,OAAO,EAAE,MAAM,CAAA;gBAEH,IAAI,EAAE,MAAM;IAKf,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;CAOvC;AAED,gBAAgB;AAChB,eAAO,MAAM,YAAY,sBAA+C,CAAA;AAExE,KAAK,iBAAiB,GAAG;IACvB,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC7B,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACxB,CAAA;AAED,uCAAuC;AACvC,wBAAgB,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"withDedupe.d.ts","sourceRoot":"","sources":["../../utils/withDedupe.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,qBAAa,MAAM,CAAC,KAAK,GAAG,OAAO,CAAE,SAAQ,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC;IAC7D,OAAO,EAAE,MAAM,CAAA;gBAEH,IAAI,EAAE,MAAM;IAKf,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;CAOvC;AAED,gBAAgB;AAChB,eAAO,MAAM,YAAY,sBAA+C,CAAA;AAExE,KAAK,iBAAiB,GAAG;IACvB,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC7B,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACxB,CAAA;AAED,uCAAuC;AACvC,wBAAgB,UAAU,CAAC,CAAC,EAC1B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,EAAE,OAAc,EAAE,EAAE,EAAE,EAAE,iBAAiB,GACxC,OAAO,CAAC,CAAC,CAAC,CAUZ"}
|
package/src/_types/version.d.ts
CHANGED
package/src/config.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { ChainId, type ExtendedChain } from '@lifi/types'
|
|
2
2
|
import type { SDKProvider } from './core/types.js'
|
|
3
3
|
import type { RPCUrls, SDKBaseConfig, SDKConfig } from './types/internal.js'
|
|
4
4
|
|
|
@@ -50,7 +50,7 @@ export const config = (() => {
|
|
|
50
50
|
}
|
|
51
51
|
return rpcUrls
|
|
52
52
|
}, {} as RPCUrls)
|
|
53
|
-
this.setRPCUrls(rpcUrls)
|
|
53
|
+
this.setRPCUrls(rpcUrls, [ChainId.SOL])
|
|
54
54
|
_config.chains = chains
|
|
55
55
|
_loading = undefined
|
|
56
56
|
},
|
|
@@ -70,20 +70,20 @@ export const config = (() => {
|
|
|
70
70
|
}
|
|
71
71
|
return chain
|
|
72
72
|
},
|
|
73
|
-
setRPCUrls(rpcUrls: RPCUrls) {
|
|
73
|
+
setRPCUrls(rpcUrls: RPCUrls, skipChains?: ChainId[]) {
|
|
74
74
|
for (const rpcUrlsKey in rpcUrls) {
|
|
75
|
-
const chainId = rpcUrlsKey as
|
|
75
|
+
const chainId = Number(rpcUrlsKey) as ChainId
|
|
76
76
|
const urls = rpcUrls[chainId]
|
|
77
77
|
if (!urls?.length) {
|
|
78
78
|
continue
|
|
79
79
|
}
|
|
80
80
|
if (!_config.rpcUrls[chainId]?.length) {
|
|
81
81
|
_config.rpcUrls[chainId] = Array.from(urls)
|
|
82
|
-
} else {
|
|
82
|
+
} else if (!skipChains?.includes(chainId)) {
|
|
83
83
|
const filteredUrls = urls.filter(
|
|
84
84
|
(url) => !_config.rpcUrls[chainId]?.includes(url)
|
|
85
85
|
)
|
|
86
|
-
_config.rpcUrls[chainId]
|
|
86
|
+
_config.rpcUrls[chainId].push(...filteredUrls)
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
89
|
},
|