@lifi/sdk
Version:
LI.FI Any-to-Any Cross-Chain-Swap SDK
48 lines • 2.06 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getJitoConnections = exports.getSolanaConnections = void 0;
exports.callSolanaWithRetry = callSolanaWithRetry;
const types_1 = require("@lifi/types");
const web3_js_1 = require("@solana/web3.js");
const config_js_1 = require("../../config.js");
const rpc_js_1 = require("../rpc.js");
const JitoConnection_js_1 = require("./jito/JitoConnection.js");
const connections = new Map();
const ensureConnections = async () => {
const rpcUrls = await (0, rpc_js_1.getRpcUrls)(types_1.ChainId.SOL);
for (const rpcUrl of rpcUrls) {
if (!connections.get(rpcUrl)) {
const isJitoConnection = Boolean(config_js_1.config.get().routeOptions?.jitoBundle) &&
(await JitoConnection_js_1.JitoConnection.isJitoRpc(rpcUrl));
const connection = isJitoConnection
? new JitoConnection_js_1.JitoConnection(rpcUrl)
: new web3_js_1.Connection(rpcUrl);
connections.set(rpcUrl, connection);
}
}
};
const getSolanaConnections = async () => {
await ensureConnections();
return Array.from(connections.values()).filter((conn) => conn instanceof web3_js_1.Connection && !(conn instanceof JitoConnection_js_1.JitoConnection));
};
exports.getSolanaConnections = getSolanaConnections;
const getJitoConnections = async () => {
await ensureConnections();
return Array.from(connections.values()).filter((conn) => conn instanceof JitoConnection_js_1.JitoConnection);
};
exports.getJitoConnections = getJitoConnections;
async function callSolanaWithRetry(fn) {
const solanaConnections = await (0, exports.getSolanaConnections)();
let lastError = null;
for (const connection of solanaConnections) {
try {
const result = await fn(connection);
return result;
}
catch (error) {
lastError = error;
}
}
throw lastError || new Error('No Solana RPC connections available');
}
//# sourceMappingURL=connection.js.map