@rash2x/bridge-widget 0.8.3 → 0.8.5
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/evaa-bridge.cjs +1 -1
- package/dist/evaa-bridge.mjs +1 -1
- package/dist/{index-0JKTjlKW.js → index-B1odZ4FL.js} +2 -2
- package/dist/{index-0JKTjlKW.js.map → index-B1odZ4FL.js.map} +1 -1
- package/dist/{index-D2zkzmLE.js → index-BIpr23sm.js} +110 -42
- package/dist/index-BIpr23sm.js.map +1 -0
- package/dist/{index-egFmHlPu.cjs → index-CytmPXNr.cjs} +110 -42
- package/dist/index-CytmPXNr.cjs.map +1 -0
- package/dist/{index-s4FyGXJW.cjs → index-DiFbb5zn.cjs} +2 -2
- package/dist/{index-s4FyGXJW.cjs.map → index-DiFbb5zn.cjs.map} +1 -1
- package/package.json +1 -1
- package/dist/index-D2zkzmLE.js.map +0 -1
- package/dist/index-egFmHlPu.cjs.map +0 -1
|
@@ -1211,6 +1211,25 @@ const SearchInput = ({
|
|
|
1211
1211
|
) })
|
|
1212
1212
|
] });
|
|
1213
1213
|
};
|
|
1214
|
+
const TOKEN_EQUIVALENTS = {
|
|
1215
|
+
USDT: ["USDT0"],
|
|
1216
|
+
USDT0: ["USDT"]
|
|
1217
|
+
};
|
|
1218
|
+
function getEquivalentSymbols(symbol) {
|
|
1219
|
+
return TOKEN_EQUIVALENTS[symbol.toUpperCase()] ?? [];
|
|
1220
|
+
}
|
|
1221
|
+
const BRIDGE_PREFERRED_TOKENS = /* @__PURE__ */ new Set(["USDT0"]);
|
|
1222
|
+
function getBridgeTokenSymbol(symbol, assetMatrix, chainKey) {
|
|
1223
|
+
if (!assetMatrix || !chainKey) return symbol.toUpperCase();
|
|
1224
|
+
const candidates = [symbol.toUpperCase(), ...getEquivalentSymbols(symbol)];
|
|
1225
|
+
for (const sym of candidates) {
|
|
1226
|
+
if (BRIDGE_PREFERRED_TOKENS.has(sym) && assetMatrix[sym]?.[chainKey]) return sym;
|
|
1227
|
+
}
|
|
1228
|
+
for (const sym of candidates) {
|
|
1229
|
+
if (assetMatrix[sym]?.[chainKey]) return sym;
|
|
1230
|
+
}
|
|
1231
|
+
return symbol.toUpperCase();
|
|
1232
|
+
}
|
|
1214
1233
|
const ChainSelectModal = ({
|
|
1215
1234
|
isOpen,
|
|
1216
1235
|
onClose,
|
|
@@ -1238,10 +1257,14 @@ const ChainSelectModal = ({
|
|
|
1238
1257
|
"optimism",
|
|
1239
1258
|
"base"
|
|
1240
1259
|
];
|
|
1241
|
-
const
|
|
1242
|
-
|
|
1260
|
+
const allSymbols = [
|
|
1261
|
+
selectedAssetSymbol.toUpperCase(),
|
|
1262
|
+
...getEquivalentSymbols(selectedAssetSymbol).map((s2) => s2.toUpperCase())
|
|
1263
|
+
];
|
|
1264
|
+
const hasTokenOrEquiv = (chainKey) => allSymbols.some((sym) => !!assetMatrix[sym]?.[chainKey]);
|
|
1265
|
+
if (!hasTokenOrEquiv(dstChain.chainKey)) return void 0;
|
|
1243
1266
|
const availableChains = chains.filter(
|
|
1244
|
-
(c2) =>
|
|
1267
|
+
(c2) => hasTokenOrEquiv(c2.chainKey) && c2.chainKey !== fromChain?.chainKey && c2.chainKey !== dstChain.chainKey
|
|
1245
1268
|
);
|
|
1246
1269
|
for (const chainKey of PRIORITY_CHAINS2) {
|
|
1247
1270
|
const chain2 = availableChains.find((c2) => c2.chainKey === chainKey);
|
|
@@ -1325,9 +1348,20 @@ const ChainSelectModal = ({
|
|
|
1325
1348
|
[]
|
|
1326
1349
|
);
|
|
1327
1350
|
const [isPickLoading, setIsPickLoading] = React.useState(false);
|
|
1351
|
+
const switchToEquivalentIfNeeded = React.useCallback(
|
|
1352
|
+
(chainKey) => {
|
|
1353
|
+
if (!selectedAssetSymbol || !assetMatrix) return;
|
|
1354
|
+
const effectiveSym = getBridgeTokenSymbol(selectedAssetSymbol, assetMatrix, chainKey);
|
|
1355
|
+
if (effectiveSym !== selectedAssetSymbol.toUpperCase()) {
|
|
1356
|
+
setSelectedAssetSymbol(effectiveSym);
|
|
1357
|
+
}
|
|
1358
|
+
},
|
|
1359
|
+
[selectedAssetSymbol, assetMatrix, setSelectedAssetSymbol]
|
|
1360
|
+
);
|
|
1328
1361
|
const onChainPick = React.useCallback(
|
|
1329
1362
|
async (chain2, willChangeSrc = false, willChangeTokenAndSrc = false) => {
|
|
1330
1363
|
if (!willChangeSrc && !willChangeTokenAndSrc) {
|
|
1364
|
+
switchToEquivalentIfNeeded(chain2.chainKey);
|
|
1331
1365
|
onChangeChain(chain2);
|
|
1332
1366
|
handleClose();
|
|
1333
1367
|
return;
|
|
@@ -1359,7 +1393,18 @@ const ChainSelectModal = ({
|
|
|
1359
1393
|
onChangeChain(chain2);
|
|
1360
1394
|
}
|
|
1361
1395
|
} else if (willChangeSrc && selectedAssetSymbol) {
|
|
1362
|
-
|
|
1396
|
+
let dstToken = assetMatrix?.[selectedAssetSymbol.toUpperCase()]?.[chain2.chainKey];
|
|
1397
|
+
let resolvedSym = selectedAssetSymbol;
|
|
1398
|
+
if (!dstToken?.address) {
|
|
1399
|
+
for (const eq of getEquivalentSymbols(selectedAssetSymbol)) {
|
|
1400
|
+
const eqToken = assetMatrix?.[eq]?.[chain2.chainKey];
|
|
1401
|
+
if (eqToken?.address) {
|
|
1402
|
+
dstToken = eqToken;
|
|
1403
|
+
resolvedSym = eq;
|
|
1404
|
+
break;
|
|
1405
|
+
}
|
|
1406
|
+
}
|
|
1407
|
+
}
|
|
1363
1408
|
if (!dstToken?.address) return;
|
|
1364
1409
|
const availableSources = await getDestTokens(chain2.chainKey, dstToken.address);
|
|
1365
1410
|
const sourceChainKeys = new Set(availableSources.map((t22) => t22.chainKey ?? ""));
|
|
@@ -1376,6 +1421,9 @@ const ChainSelectModal = ({
|
|
|
1376
1421
|
);
|
|
1377
1422
|
}
|
|
1378
1423
|
if (validSrc) {
|
|
1424
|
+
if (resolvedSym.toUpperCase() !== selectedAssetSymbol.toUpperCase()) {
|
|
1425
|
+
setSelectedAssetSymbol(resolvedSym);
|
|
1426
|
+
}
|
|
1379
1427
|
setFromChain(validSrc);
|
|
1380
1428
|
onChangeChain(chain2);
|
|
1381
1429
|
}
|
|
@@ -1393,6 +1441,7 @@ const ChainSelectModal = ({
|
|
|
1393
1441
|
selectedAssetSymbol,
|
|
1394
1442
|
assetMatrix,
|
|
1395
1443
|
findCompatibleTokenAndSrcChain,
|
|
1444
|
+
switchToEquivalentIfNeeded,
|
|
1396
1445
|
setSelectedAssetSymbol,
|
|
1397
1446
|
setFromChain,
|
|
1398
1447
|
onChangeChain,
|
|
@@ -2462,6 +2511,7 @@ function computeFeeBreakdownUsd(quote, srcToken, dstToken, tokens, chains, srcCh
|
|
|
2462
2511
|
let messageFeeUsd = 0;
|
|
2463
2512
|
let messageFeeAmount = 0;
|
|
2464
2513
|
let messageFeeSymbol = "";
|
|
2514
|
+
let messageFeeTokenPriceUsd = 0;
|
|
2465
2515
|
const messageFees = quote.fees.filter((f4) => f4.type === "message");
|
|
2466
2516
|
for (const f4 of messageFees) {
|
|
2467
2517
|
const { decimals, priceUsd } = lookupTokenMeta(
|
|
@@ -2479,6 +2529,7 @@ function computeFeeBreakdownUsd(quote, srcToken, dstToken, tokens, chains, srcCh
|
|
|
2479
2529
|
(t2) => t2.chainKey === f4.chainKey && t2.address.toLowerCase() === f4.token.toLowerCase()
|
|
2480
2530
|
);
|
|
2481
2531
|
messageFeeSymbol = token?.symbol?.toUpperCase() ?? chain2?.nativeCurrency?.symbol?.toUpperCase() ?? "";
|
|
2532
|
+
messageFeeTokenPriceUsd = priceUsd ?? 0;
|
|
2482
2533
|
}
|
|
2483
2534
|
}
|
|
2484
2535
|
let bridgeFeeAmount = 0;
|
|
@@ -2509,7 +2560,14 @@ function computeFeeBreakdownUsd(quote, srcToken, dstToken, tokens, chains, srcCh
|
|
|
2509
2560
|
dstGasUsd = dstGasAmount * (priceUsd ?? 0);
|
|
2510
2561
|
}
|
|
2511
2562
|
}
|
|
2512
|
-
|
|
2563
|
+
if (dstGasAmount > 0 && messageFeeSymbol) {
|
|
2564
|
+
if (messageFeeSymbol === dstGasSymbol) {
|
|
2565
|
+
messageFeeAmount += dstGasAmount;
|
|
2566
|
+
} else if (messageFeeTokenPriceUsd > 0) {
|
|
2567
|
+
messageFeeAmount += dstGasUsd / messageFeeTokenPriceUsd;
|
|
2568
|
+
}
|
|
2569
|
+
}
|
|
2570
|
+
const totalFeeUsd = messageFeeUsd + bridgeFeeUsd;
|
|
2513
2571
|
return {
|
|
2514
2572
|
messageFeeAmount,
|
|
2515
2573
|
messageFeeSymbol,
|
|
@@ -2605,22 +2663,16 @@ function useBridgeQuote() {
|
|
|
2605
2663
|
const { chainRegistry } = useChainStrategies();
|
|
2606
2664
|
const publicClient = wagmi.usePublicClient();
|
|
2607
2665
|
const input2 = inputAmount;
|
|
2608
|
-
const srcTokenOnFrom = React.useMemo(
|
|
2609
|
-
()
|
|
2610
|
-
|
|
2611
|
-
|
|
2612
|
-
|
|
2613
|
-
|
|
2614
|
-
|
|
2615
|
-
|
|
2616
|
-
|
|
2617
|
-
|
|
2618
|
-
assetMatrix,
|
|
2619
|
-
selectedAssetSymbol,
|
|
2620
|
-
toChain?.chainKey
|
|
2621
|
-
),
|
|
2622
|
-
[assetMatrix, selectedAssetSymbol, toChain?.chainKey]
|
|
2623
|
-
);
|
|
2666
|
+
const srcTokenOnFrom = React.useMemo(() => {
|
|
2667
|
+
if (!assetMatrix || !selectedAssetSymbol || !fromChain?.chainKey) return void 0;
|
|
2668
|
+
const sym = getBridgeTokenSymbol(selectedAssetSymbol, assetMatrix, fromChain.chainKey);
|
|
2669
|
+
return resolveTokenOnChainFromMatrix$1(assetMatrix, sym, fromChain.chainKey);
|
|
2670
|
+
}, [assetMatrix, selectedAssetSymbol, fromChain?.chainKey]);
|
|
2671
|
+
const dstTokenOnTo = React.useMemo(() => {
|
|
2672
|
+
if (!assetMatrix || !selectedAssetSymbol || !toChain?.chainKey) return void 0;
|
|
2673
|
+
const sym = getBridgeTokenSymbol(selectedAssetSymbol, assetMatrix, toChain.chainKey);
|
|
2674
|
+
return resolveTokenOnChainFromMatrix$1(assetMatrix, sym, toChain.chainKey);
|
|
2675
|
+
}, [assetMatrix, selectedAssetSymbol, toChain?.chainKey]);
|
|
2624
2676
|
const [loading, setLoading] = React.useState(false);
|
|
2625
2677
|
React.useEffect(() => {
|
|
2626
2678
|
if (!input2 || input2 === "") {
|
|
@@ -2652,14 +2704,9 @@ function useBridgeQuote() {
|
|
|
2652
2704
|
try {
|
|
2653
2705
|
setLoading(true);
|
|
2654
2706
|
setQuoteLoading?.();
|
|
2655
|
-
if (
|
|
2656
|
-
|
|
2657
|
-
|
|
2658
|
-
if (!cancelled) {
|
|
2659
|
-
resetUi();
|
|
2660
|
-
}
|
|
2661
|
-
return;
|
|
2662
|
-
}
|
|
2707
|
+
if (!srcTokenOnFrom || !dstTokenOnTo) {
|
|
2708
|
+
if (!cancelled) resetUi();
|
|
2709
|
+
return;
|
|
2663
2710
|
}
|
|
2664
2711
|
const srcAmountLD = toLD(input2, srcTokenOnFrom.decimals);
|
|
2665
2712
|
const srcAddrApi = addrForApi(fromChain.chainKey, srcAddress);
|
|
@@ -2765,6 +2812,11 @@ const useChainDerivations = () => {
|
|
|
2765
2812
|
return [];
|
|
2766
2813
|
const byChain = assetMatrix[selectedAssetSymbol.toUpperCase()];
|
|
2767
2814
|
const keys2 = new Set(Object.keys(byChain ?? {}));
|
|
2815
|
+
for (const eq of getEquivalentSymbols(selectedAssetSymbol)) {
|
|
2816
|
+
for (const ck of Object.keys(assetMatrix[eq] ?? {})) {
|
|
2817
|
+
keys2.add(ck);
|
|
2818
|
+
}
|
|
2819
|
+
}
|
|
2768
2820
|
const result = chains.filter((c2) => keys2.has(c2.chainKey) && isAllowedFromChain(c2.chainKey));
|
|
2769
2821
|
return result;
|
|
2770
2822
|
}, [selectedAssetSymbol, assetMatrix, chains]);
|
|
@@ -2806,11 +2858,8 @@ const useChainDerivations = () => {
|
|
|
2806
2858
|
setAllowedToChains([]);
|
|
2807
2859
|
return;
|
|
2808
2860
|
}
|
|
2809
|
-
const
|
|
2810
|
-
|
|
2811
|
-
selectedAssetSymbol,
|
|
2812
|
-
fromChain.chainKey
|
|
2813
|
-
);
|
|
2861
|
+
const srcSym = getBridgeTokenSymbol(selectedAssetSymbol, assetMatrix, fromChain.chainKey);
|
|
2862
|
+
const srcToken = resolveTokenOnChainFromMatrix(assetMatrix, srcSym, fromChain.chainKey);
|
|
2814
2863
|
const srcAddr = srcToken?.address;
|
|
2815
2864
|
if (!srcAddr) {
|
|
2816
2865
|
setAllowedToChains([]);
|
|
@@ -2822,11 +2871,18 @@ const useChainDerivations = () => {
|
|
|
2822
2871
|
const dest = await getDestTokens(fromChain.chainKey, srcAddr);
|
|
2823
2872
|
if (ignore) return;
|
|
2824
2873
|
const byChainSameSymbol = assetMatrix?.[selectedAssetSymbol.toUpperCase()] ?? {};
|
|
2874
|
+
const equivalentSymbols = /* @__PURE__ */ new Set([
|
|
2875
|
+
selectedAssetSymbol.toUpperCase(),
|
|
2876
|
+
...getEquivalentSymbols(selectedAssetSymbol).map((s2) => s2.toUpperCase())
|
|
2877
|
+
]);
|
|
2825
2878
|
const filteredDest = dest.filter((t2) => {
|
|
2826
2879
|
const ck = t2.chainKey ?? t2.dstChainKey ?? "";
|
|
2827
|
-
const
|
|
2828
|
-
|
|
2829
|
-
|
|
2880
|
+
const destSymbol = (t2.symbol ?? "").toUpperCase();
|
|
2881
|
+
if (!equivalentSymbols.has(destSymbol)) return false;
|
|
2882
|
+
const hasInMatrix = !!byChainSameSymbol[ck] || getEquivalentSymbols(selectedAssetSymbol).some(
|
|
2883
|
+
(eq) => !!assetMatrix?.[eq.toUpperCase()]?.[ck]
|
|
2884
|
+
);
|
|
2885
|
+
return hasInMatrix;
|
|
2830
2886
|
});
|
|
2831
2887
|
const keys2 = new Set(filteredDest.map((t2) => t2.chainKey));
|
|
2832
2888
|
let list = chains.filter((c2) => keys2.has(c2.chainKey) && isAllowedToChain(c2.chainKey));
|
|
@@ -3601,7 +3657,18 @@ function useBalances(chainKey, address) {
|
|
|
3601
3657
|
);
|
|
3602
3658
|
if (typeof byAddress === "number") return byAddress;
|
|
3603
3659
|
}
|
|
3604
|
-
|
|
3660
|
+
const directBalance = balanceBySymbol.get(symbolUpper) ?? 0;
|
|
3661
|
+
if (directBalance > 0) return directBalance;
|
|
3662
|
+
for (const eq of getEquivalentSymbols(symbolUpper)) {
|
|
3663
|
+
const eqToken = chainKey ? assetMatrix?.[eq]?.[chainKey] : void 0;
|
|
3664
|
+
if (eqToken?.address) {
|
|
3665
|
+
const b2 = balanceByTokenKey.get(makeTokenBalanceKey(eqToken.address));
|
|
3666
|
+
if (typeof b2 === "number" && b2 > 0) return b2;
|
|
3667
|
+
}
|
|
3668
|
+
const eqBalance = balanceBySymbol.get(eq) ?? 0;
|
|
3669
|
+
if (eqBalance > 0) return eqBalance;
|
|
3670
|
+
}
|
|
3671
|
+
return directBalance;
|
|
3605
3672
|
},
|
|
3606
3673
|
[assetMatrix, balanceBySymbol, balanceByTokenKey, chainKey]
|
|
3607
3674
|
);
|
|
@@ -3667,8 +3734,9 @@ function useSwapModel() {
|
|
|
3667
3734
|
if (!isAllowedFromChain(toChain.chainKey)) return;
|
|
3668
3735
|
chainsStore.setAllowedToChains([]);
|
|
3669
3736
|
chainsStore.setFromChain(toChain);
|
|
3670
|
-
const
|
|
3671
|
-
|
|
3737
|
+
const matrix = tokensStore.assetMatrix;
|
|
3738
|
+
const hasTokenOnNewFrom = !!matrix?.[sym]?.[toChain.chainKey] || getEquivalentSymbols(sym).some((eq) => !!matrix?.[eq]?.[toChain.chainKey]);
|
|
3739
|
+
if (hasTokenOnNewFrom) {
|
|
3672
3740
|
chainsStore.setToChain(fromChain);
|
|
3673
3741
|
} else {
|
|
3674
3742
|
chainsStore.setToChain(void 0);
|
|
@@ -26553,7 +26621,7 @@ class WalletConnectModal {
|
|
|
26553
26621
|
}
|
|
26554
26622
|
async initUi() {
|
|
26555
26623
|
if (typeof window !== "undefined") {
|
|
26556
|
-
await Promise.resolve().then(() => require("./index-
|
|
26624
|
+
await Promise.resolve().then(() => require("./index-DiFbb5zn.cjs"));
|
|
26557
26625
|
const modal = document.createElement("wcm-modal");
|
|
26558
26626
|
document.body.insertAdjacentElement("beforeend", modal);
|
|
26559
26627
|
OptionsCtrl.setIsUiLoaded(true);
|
|
@@ -27456,4 +27524,4 @@ exports.useSettingsStore = useSettingsStore;
|
|
|
27456
27524
|
exports.useSwapModel = useSwapModel;
|
|
27457
27525
|
exports.useTokensStore = useTokensStore;
|
|
27458
27526
|
exports.useTransactionStore = useTransactionStore;
|
|
27459
|
-
//# sourceMappingURL=index-
|
|
27527
|
+
//# sourceMappingURL=index-CytmPXNr.cjs.map
|