astros-bridge-sdk-dev
Version:
NAVI Astros Aggregator SDK
205 lines (204 loc) • 5.36 kB
JavaScript
import { createSwapFromSuiMoveCalls as m, swapFromSolana as h, addresses as w, swapFromEvm as k } from "@mayanfinance/swap-sdk";
import { Contract as T, parseUnits as b } from "ethers";
import _ from "axios";
const v = [
"function allowance(address owner, address spender) view returns (uint256)",
"function approve(address spender, uint256 amount) returns (bool)",
"function balanceOf(address account) view returns (uint256)"
];
async function y(a, e, o, t, d) {
if (!a)
throw new Error("No route found");
const r = a.info_for_bridge;
let s;
if (a.from_token.chainId === 1999) {
if (!t.sui)
throw new Error("Sui wallet connection not found");
const n = t.sui.provider, i = await m(
r,
e,
o,
d,
null,
n
), f = await t.sui.signTransaction({ transaction: i });
s = (await n.executeTransactionBlock({
transactionBlock: f.bytes,
signature: [f.signature],
options: {
showEffects: !0,
showEvents: !0,
showBalanceChanges: !0
}
})).digest, await n.waitForTransaction({
digest: s
});
} else if (a.from_token.chainId === 0) {
if (!t.solana)
throw new Error("Solana wallet connection not found");
const n = t.solana;
s = (await h(
r,
e,
o,
d,
n.signTransaction,
n.connection,
n.extraRpcs,
n.sendOptions,
n.jitoOptions
)).signature;
} else {
if (!t.evm)
throw new Error("EVM wallet connection not found");
const n = t.evm, i = r.fromToken;
if (i.standard === "erc20") {
const f = new T(
i.realOriginContractAddress || i.contract,
v,
n.signer
), l = await f.allowance(
e,
w.MAYAN_FORWARDER_CONTRACT
), u = b(
String(r.effectiveAmountIn),
i.decimals
);
if (l < u && !await (await f.approve(
w.MAYAN_FORWARDER_CONTRACT,
u
)).wait())
throw new Error("Failed to approve allowance");
}
const p = await k(
r,
e,
o,
d,
n.signer,
n.permit,
n.overrides,
null
);
s = typeof p == "string" ? p : p.hash, await n.waitForTransaction({
hash: s,
confirmations: 3
});
}
return await new Promise((n) => {
setTimeout(() => {
n(!0);
}, 2e3);
}), s;
}
const g = {
/** Base URL for the bridge API */
baseUrl: "https://open-aggregator-api.naviprotocol.io",
/** API key for authentication (optional) */
apiKey: ""
}, c = _.create({
baseURL: g.baseUrl,
timeout: 3e4
});
function R(a) {
Object.assign(g, a), c.defaults.baseURL = g.baseUrl, g.apiKey ? c.defaults.headers.common["x-navi-token"] = g.apiKey : delete c.defaults.headers.common["x-navi-token"];
}
async function F() {
return (await c.get("/chains/list")).data.data.chains;
}
async function O(a, e = 1, o = 100) {
return (await c.get("/coins/support-token-list", {
params: {
chain: a,
page: e,
pageSize: o,
scene: "bridge"
}
})).data.data.list;
}
async function C(a, e) {
return (await c.get("/coins/search", {
params: {
chain: a,
keyword: e,
page: 1,
pageSize: 30,
scene: "bridge"
}
})).data.data.list;
}
async function B(a, e, o, t) {
const r = (await c.get("/bridge-swap/find_routes", {
params: {
from: a.address,
to: e.address,
fromChain: a.chainId,
toChain: e.chainId,
amount: o,
slippageBps: t == null ? void 0 : t.slippageBps,
referrerBps: t == null ? void 0 : t.referrerBps
}
})).data.data;
return r.routes.forEach((s) => {
s.from_token.chain && (s.from_token.chainId = parseInt(s.from_token.chain)), s.to_token.chain && (s.to_token.chainId = parseInt(s.to_token.chain));
}), r;
}
async function U(a) {
return (await c.get(`/bridge-swap/transaction/${a}`)).data.data.transaction;
}
async function D(a, e = 1, o = 10) {
return (await c.get("/bridge-swap/transactions/list", {
params: {
address: a,
page: e,
limit: o
}
})).data.data;
}
async function N(a, e, o, t, d) {
const r = (/* @__PURE__ */ new Date()).toISOString(), s = await y(a, e, o, t, d), n = (/* @__PURE__ */ new Date()).toISOString(), i = {
address: a.from_token.address,
symbol: a.from_token.symbol,
decimals: a.from_token.decimals
}, p = {
address: a.to_token.address,
symbol: a.to_token.symbol,
decimals: a.to_token.decimals
};
return {
id: s,
status: "processing",
lastUpdateAt: n,
sourceChainId: a.from_token.chainId,
destChainId: a.to_token.chainId,
walletSourceAddress: e,
walletDestAddress: o,
totalFeeAmount: a.total_fee,
sourceToken: a.from_token,
destToken: a.to_token,
bridgeFromAmount: a.amount_in,
bridgeToAmount: a.amount_out,
bridgeStartAt: r,
bridgeEndAt: n,
bridgeFeeAmount: "0",
bridgeSourceTxHash: s,
bridgeDestTxHash: "",
bridgeRefundTxHash: "",
bridgeStatus: "processing",
bridgeProvider: "mayan",
bridgeFromToken: i,
bridgeToToken: p,
hasSwap: !1
};
}
export {
R as config,
B as getQuote,
F as getSupportChains,
O as getSupportTokens,
U as getTransaction,
D as getWalletTransactions,
C as searchSupportTokens,
N as swap
};
//# sourceMappingURL=index.esm.js.map