@metamask-previews/bridge-controller 77.6.0-preview-68ba7f84e → 77.8.0-preview-5959fe813
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/CHANGELOG.md +42 -7
- package/dist/bridge-controller.cjs +13 -8
- package/dist/bridge-controller.cjs.map +1 -1
- package/dist/bridge-controller.d.cts +2 -1
- package/dist/bridge-controller.d.cts.map +1 -1
- package/dist/bridge-controller.d.mts +2 -1
- package/dist/bridge-controller.d.mts.map +1 -1
- package/dist/bridge-controller.mjs +10 -5
- package/dist/bridge-controller.mjs.map +1 -1
- package/dist/coercers/quote-response-v1-to-v2.cjs +137 -0
- package/dist/coercers/quote-response-v1-to-v2.cjs.map +1 -0
- package/dist/coercers/quote-response-v1-to-v2.d.cts +13 -0
- package/dist/coercers/quote-response-v1-to-v2.d.cts.map +1 -0
- package/dist/coercers/quote-response-v1-to-v2.d.mts +13 -0
- package/dist/coercers/quote-response-v1-to-v2.d.mts.map +1 -0
- package/dist/coercers/quote-response-v1-to-v2.mjs +132 -0
- package/dist/coercers/quote-response-v1-to-v2.mjs.map +1 -0
- package/dist/coercers/quote-response-v2-to-v1.cjs +173 -0
- package/dist/coercers/quote-response-v2-to-v1.cjs.map +1 -0
- package/dist/coercers/quote-response-v2-to-v1.d.cts +13 -0
- package/dist/coercers/quote-response-v2-to-v1.d.cts.map +1 -0
- package/dist/coercers/quote-response-v2-to-v1.d.mts +13 -0
- package/dist/coercers/quote-response-v2-to-v1.d.mts.map +1 -0
- package/dist/coercers/quote-response-v2-to-v1.mjs +169 -0
- package/dist/coercers/quote-response-v2-to-v1.mjs.map +1 -0
- package/dist/constants/bridge.cjs +2 -1
- package/dist/constants/bridge.cjs.map +1 -1
- package/dist/constants/bridge.d.cts +1 -0
- package/dist/constants/bridge.d.cts.map +1 -1
- package/dist/constants/bridge.d.mts +1 -0
- package/dist/constants/bridge.d.mts.map +1 -1
- package/dist/constants/bridge.mjs +1 -0
- package/dist/constants/bridge.mjs.map +1 -1
- package/dist/index.cjs +32 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +17 -5
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +17 -5
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +12 -3
- package/dist/index.mjs.map +1 -1
- package/dist/selectors.cjs +52 -100
- package/dist/selectors.cjs.map +1 -1
- package/dist/selectors.d.cts +11198 -31552
- package/dist/selectors.d.cts.map +1 -1
- package/dist/selectors.d.mts +11198 -31552
- package/dist/selectors.d.mts.map +1 -1
- package/dist/selectors.mjs +52 -100
- package/dist/selectors.mjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +4 -87
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +4 -87
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/dist/utils/bridge.cjs +2 -6
- package/dist/utils/bridge.cjs.map +1 -1
- package/dist/utils/bridge.d.cts +2 -19
- package/dist/utils/bridge.d.cts.map +1 -1
- package/dist/utils/bridge.d.mts +2 -19
- package/dist/utils/bridge.d.mts.map +1 -1
- package/dist/utils/bridge.mjs +1 -4
- package/dist/utils/bridge.mjs.map +1 -1
- package/dist/utils/caip-formatters.cjs +0 -3
- package/dist/utils/caip-formatters.cjs.map +1 -1
- package/dist/utils/caip-formatters.d.cts.map +1 -1
- package/dist/utils/caip-formatters.d.mts.map +1 -1
- package/dist/utils/caip-formatters.mjs +0 -3
- package/dist/utils/caip-formatters.mjs.map +1 -1
- package/dist/utils/feature-flags.d.cts +2 -2
- package/dist/utils/feature-flags.d.mts +2 -2
- package/dist/utils/fetch.cjs +37 -40
- package/dist/utils/fetch.cjs.map +1 -1
- package/dist/utils/fetch.d.cts +10 -4
- package/dist/utils/fetch.d.cts.map +1 -1
- package/dist/utils/fetch.d.mts +10 -4
- package/dist/utils/fetch.d.mts.map +1 -1
- package/dist/utils/fetch.mjs +37 -40
- package/dist/utils/fetch.mjs.map +1 -1
- package/dist/utils/metrics/constants.cjs +1 -0
- package/dist/utils/metrics/constants.cjs.map +1 -1
- package/dist/utils/metrics/constants.d.cts +2 -1
- package/dist/utils/metrics/constants.d.cts.map +1 -1
- package/dist/utils/metrics/constants.d.mts +2 -1
- package/dist/utils/metrics/constants.d.mts.map +1 -1
- package/dist/utils/metrics/constants.mjs +1 -0
- package/dist/utils/metrics/constants.mjs.map +1 -1
- package/dist/utils/metrics/properties.cjs +6 -6
- package/dist/utils/metrics/properties.cjs.map +1 -1
- package/dist/utils/metrics/properties.d.cts +9 -5
- package/dist/utils/metrics/properties.d.cts.map +1 -1
- package/dist/utils/metrics/properties.d.mts +9 -5
- package/dist/utils/metrics/properties.d.mts.map +1 -1
- package/dist/utils/metrics/properties.mjs +6 -6
- package/dist/utils/metrics/properties.mjs.map +1 -1
- package/dist/utils/metrics/types.cjs.map +1 -1
- package/dist/utils/metrics/types.d.cts +1 -1
- package/dist/utils/metrics/types.d.cts.map +1 -1
- package/dist/utils/metrics/types.d.mts +1 -1
- package/dist/utils/metrics/types.d.mts.map +1 -1
- package/dist/utils/metrics/types.mjs.map +1 -1
- package/dist/utils/number-formatters.cjs +106 -0
- package/dist/utils/number-formatters.cjs.map +1 -0
- package/dist/utils/number-formatters.d.cts +34 -0
- package/dist/utils/number-formatters.d.cts.map +1 -0
- package/dist/utils/number-formatters.d.mts +34 -0
- package/dist/utils/number-formatters.d.mts.map +1 -0
- package/dist/utils/number-formatters.mjs +99 -0
- package/dist/utils/number-formatters.mjs.map +1 -0
- package/dist/utils/quote-fees.cjs +23 -22
- package/dist/utils/quote-fees.cjs.map +1 -1
- package/dist/utils/quote-fees.d.cts +4 -2
- package/dist/utils/quote-fees.d.cts.map +1 -1
- package/dist/utils/quote-fees.d.mts +4 -2
- package/dist/utils/quote-fees.d.mts.map +1 -1
- package/dist/utils/quote-fees.mjs +24 -23
- package/dist/utils/quote-fees.mjs.map +1 -1
- package/dist/utils/quote-metadata/calculators.cjs +340 -0
- package/dist/utils/quote-metadata/calculators.cjs.map +1 -0
- package/dist/utils/quote-metadata/calculators.d.cts +125 -0
- package/dist/utils/quote-metadata/calculators.d.cts.map +1 -0
- package/dist/utils/quote-metadata/calculators.d.mts +125 -0
- package/dist/utils/quote-metadata/calculators.d.mts.map +1 -0
- package/dist/utils/quote-metadata/calculators.mjs +323 -0
- package/dist/utils/quote-metadata/calculators.mjs.map +1 -0
- package/dist/utils/quote-metadata/merge.cjs +38 -0
- package/dist/utils/quote-metadata/merge.cjs.map +1 -0
- package/dist/utils/quote-metadata/merge.d.cts +12 -0
- package/dist/utils/quote-metadata/merge.d.cts.map +1 -0
- package/dist/utils/quote-metadata/merge.d.mts +12 -0
- package/dist/utils/quote-metadata/merge.d.mts.map +1 -0
- package/dist/utils/quote-metadata/merge.mjs +35 -0
- package/dist/utils/quote-metadata/merge.mjs.map +1 -0
- package/dist/utils/quote-metadata/to-normalized-amounts.cjs +38 -0
- package/dist/utils/quote-metadata/to-normalized-amounts.cjs.map +1 -0
- package/dist/utils/quote-metadata/to-normalized-amounts.d.cts +10 -0
- package/dist/utils/quote-metadata/to-normalized-amounts.d.cts.map +1 -0
- package/dist/utils/quote-metadata/to-normalized-amounts.d.mts +10 -0
- package/dist/utils/quote-metadata/to-normalized-amounts.d.mts.map +1 -0
- package/dist/utils/quote-metadata/to-normalized-amounts.mjs +34 -0
- package/dist/utils/quote-metadata/to-normalized-amounts.mjs.map +1 -0
- package/dist/utils/quote-metadata/to-quote-metadata-v1.cjs +39 -0
- package/dist/utils/quote-metadata/to-quote-metadata-v1.cjs.map +1 -0
- package/dist/utils/quote-metadata/to-quote-metadata-v1.d.cts +13 -0
- package/dist/utils/quote-metadata/to-quote-metadata-v1.d.cts.map +1 -0
- package/dist/utils/quote-metadata/to-quote-metadata-v1.d.mts +13 -0
- package/dist/utils/quote-metadata/to-quote-metadata-v1.d.mts.map +1 -0
- package/dist/utils/quote-metadata/to-quote-metadata-v1.mjs +36 -0
- package/dist/utils/quote-metadata/to-quote-metadata-v1.mjs.map +1 -0
- package/dist/utils/quote-metadata/to-quote-metadata-v2.cjs +94 -0
- package/dist/utils/quote-metadata/to-quote-metadata-v2.cjs.map +1 -0
- package/dist/utils/quote-metadata/to-quote-metadata-v2.d.cts +12 -0
- package/dist/utils/quote-metadata/to-quote-metadata-v2.d.cts.map +1 -0
- package/dist/utils/quote-metadata/to-quote-metadata-v2.d.mts +12 -0
- package/dist/utils/quote-metadata/to-quote-metadata-v2.d.mts.map +1 -0
- package/dist/utils/quote-metadata/to-quote-metadata-v2.mjs +90 -0
- package/dist/utils/quote-metadata/to-quote-metadata-v2.mjs.map +1 -0
- package/dist/utils/quote-metadata/types.cjs +3 -0
- package/dist/utils/quote-metadata/types.cjs.map +1 -0
- package/dist/utils/quote-metadata/types.d.cts +87 -0
- package/dist/utils/quote-metadata/types.d.cts.map +1 -0
- package/dist/utils/quote-metadata/types.d.mts +87 -0
- package/dist/utils/quote-metadata/types.d.mts.map +1 -0
- package/dist/utils/quote-metadata/types.mjs +2 -0
- package/dist/utils/quote-metadata/types.mjs.map +1 -0
- package/dist/utils/slippage.d.cts +1 -1
- package/dist/utils/slippage.d.mts +1 -1
- package/dist/utils/sort-quotes.cjs +16 -0
- package/dist/utils/sort-quotes.cjs.map +1 -0
- package/dist/utils/sort-quotes.d.cts +4 -0
- package/dist/utils/sort-quotes.d.cts.map +1 -0
- package/dist/utils/sort-quotes.d.mts +4 -0
- package/dist/utils/sort-quotes.d.mts.map +1 -0
- package/dist/utils/sort-quotes.mjs +12 -0
- package/dist/utils/sort-quotes.mjs.map +1 -0
- package/dist/validators/amount-and-asset.cjs +27 -0
- package/dist/validators/amount-and-asset.cjs.map +1 -0
- package/dist/validators/amount-and-asset.d.cts +62 -0
- package/dist/validators/amount-and-asset.d.cts.map +1 -0
- package/dist/validators/amount-and-asset.d.mts +62 -0
- package/dist/validators/amount-and-asset.d.mts.map +1 -0
- package/dist/validators/amount-and-asset.mjs +24 -0
- package/dist/validators/amount-and-asset.mjs.map +1 -0
- package/dist/validators/batch-sell.d.cts +8 -8
- package/dist/validators/batch-sell.d.mts +8 -8
- package/dist/validators/bridge-asset.cjs +65 -1
- package/dist/validators/bridge-asset.cjs.map +1 -1
- package/dist/validators/bridge-asset.d.cts +99 -5
- package/dist/validators/bridge-asset.d.cts.map +1 -1
- package/dist/validators/bridge-asset.d.mts +99 -5
- package/dist/validators/bridge-asset.d.mts.map +1 -1
- package/dist/validators/bridge-asset.mjs +64 -1
- package/dist/validators/bridge-asset.mjs.map +1 -1
- package/dist/validators/feature-flags.d.cts +5 -5
- package/dist/validators/feature-flags.d.mts +5 -5
- package/dist/validators/intent.d.cts +3 -3
- package/dist/validators/intent.d.mts +3 -3
- package/dist/validators/quote-request.cjs +57 -0
- package/dist/validators/quote-request.cjs.map +1 -0
- package/dist/validators/quote-request.d.cts +4 -0
- package/dist/validators/quote-request.d.cts.map +1 -0
- package/dist/validators/quote-request.d.mts +4 -0
- package/dist/validators/quote-request.d.mts.map +1 -0
- package/dist/validators/quote-request.mjs +52 -0
- package/dist/validators/quote-request.mjs.map +1 -0
- package/dist/validators/quote-response-v1.d.cts +179 -176
- package/dist/validators/quote-response-v1.d.cts.map +1 -1
- package/dist/validators/quote-response-v1.d.mts +179 -176
- package/dist/validators/quote-response-v1.d.mts.map +1 -1
- package/dist/validators/quote-response.cjs +116 -0
- package/dist/validators/quote-response.cjs.map +1 -0
- package/dist/validators/quote-response.d.cts +1979 -0
- package/dist/validators/quote-response.d.cts.map +1 -0
- package/dist/validators/quote-response.d.mts +1979 -0
- package/dist/validators/quote-response.d.mts.map +1 -0
- package/dist/validators/quote-response.mjs +112 -0
- package/dist/validators/quote-response.mjs.map +1 -0
- package/dist/validators/quote.cjs +75 -2
- package/dist/validators/quote.cjs.map +1 -1
- package/dist/validators/quote.d.cts +407 -44
- package/dist/validators/quote.d.cts.map +1 -1
- package/dist/validators/quote.d.mts +407 -44
- package/dist/validators/quote.d.mts.map +1 -1
- package/dist/validators/quote.mjs +76 -3
- package/dist/validators/quote.mjs.map +1 -1
- package/dist/validators/step.cjs +7 -1
- package/dist/validators/step.cjs.map +1 -1
- package/dist/validators/step.d.cts +197 -26
- package/dist/validators/step.d.cts.map +1 -1
- package/dist/validators/step.d.mts +197 -26
- package/dist/validators/step.d.mts.map +1 -1
- package/dist/validators/step.mjs +7 -1
- package/dist/validators/step.mjs.map +1 -1
- package/dist/validators/token-feature.d.cts +2 -2
- package/dist/validators/token-feature.d.mts +2 -2
- package/dist/validators/trade.d.cts +2 -2
- package/dist/validators/trade.d.mts +2 -2
- package/package.json +8 -8
- package/dist/utils/quote.cjs +0 -368
- package/dist/utils/quote.cjs.map +0 -1
- package/dist/utils/quote.d.cts +0 -98
- package/dist/utils/quote.d.cts.map +0 -1
- package/dist/utils/quote.d.mts +0 -98
- package/dist/utils/quote.d.mts.map +0 -1
- package/dist/utils/quote.mjs +0 -347
- package/dist/utils/quote.mjs.map +0 -1
package/dist/utils/quote.cjs
DELETED
|
@@ -1,368 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.sortQuotes = exports.formatEtaInMinutes = exports.calcSlippagePercentage = exports.calcCost = exports.calcSwapRate = exports.calcAdjustedReturn = exports.calcIncludedTxFees = exports.calcTotalMaxNetworkFee = exports.calcTotalEstimatedNetworkFee = exports.calcEstimatedAndMaxTotalGasFee = exports.calcRelayerFee = exports.calcBatchFees = exports.calcSentAmount = exports.calcToAmount = exports.calcNonEvmTotalNetworkFee = exports.getQuoteIdentifier = exports.isValidBatchSellQuoteRequest = exports.isValidQuoteRequest = void 0;
|
|
4
|
-
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
|
5
|
-
const controller_utils_1 = require("@metamask/controller-utils");
|
|
6
|
-
const bignumber_js_1 = require("bignumber.js");
|
|
7
|
-
const feature_flags_1 = require("../validators/feature-flags.cjs");
|
|
8
|
-
const bridge_1 = require("./bridge.cjs");
|
|
9
|
-
const isValidQuoteRequest = (partialRequest, requireAmount = true) => {
|
|
10
|
-
const stringFields = [
|
|
11
|
-
'srcTokenAddress',
|
|
12
|
-
'destTokenAddress',
|
|
13
|
-
'srcChainId',
|
|
14
|
-
'destChainId',
|
|
15
|
-
'walletAddress',
|
|
16
|
-
];
|
|
17
|
-
if (requireAmount) {
|
|
18
|
-
stringFields.push('srcTokenAmount');
|
|
19
|
-
}
|
|
20
|
-
// If bridging between different chain types or different non-EVM chains, require dest wallet address
|
|
21
|
-
// Cases that need destWalletAddress:
|
|
22
|
-
// 1. EVM -> non-EVM
|
|
23
|
-
// 2. non-EVM -> EVM
|
|
24
|
-
// 3. non-EVM -> different non-EVM (e.g., SOL -> BTC)
|
|
25
|
-
// Only same-chain swaps don't need destWalletAddress
|
|
26
|
-
if (partialRequest.destChainId &&
|
|
27
|
-
partialRequest.srcChainId &&
|
|
28
|
-
partialRequest.destChainId !== partialRequest.srcChainId && // Different chains
|
|
29
|
-
((0, bridge_1.isNonEvmChainId)(partialRequest.destChainId) ||
|
|
30
|
-
(0, bridge_1.isNonEvmChainId)(partialRequest.srcChainId)) // At least one is non-EVM
|
|
31
|
-
) {
|
|
32
|
-
stringFields.push('destWalletAddress');
|
|
33
|
-
if (!partialRequest.destWalletAddress) {
|
|
34
|
-
return false;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
const numberFields = [];
|
|
38
|
-
// if slippage is defined, require it to be a number
|
|
39
|
-
if (partialRequest.slippage !== undefined) {
|
|
40
|
-
numberFields.push('slippage');
|
|
41
|
-
}
|
|
42
|
-
return (stringFields.every((field) => field in partialRequest &&
|
|
43
|
-
typeof partialRequest[field] ===
|
|
44
|
-
'string' &&
|
|
45
|
-
partialRequest[field] !== undefined &&
|
|
46
|
-
partialRequest[field] !== '' &&
|
|
47
|
-
partialRequest[field] !== null) &&
|
|
48
|
-
numberFields.every((field) => field in partialRequest &&
|
|
49
|
-
typeof partialRequest[field] ===
|
|
50
|
-
'number' &&
|
|
51
|
-
partialRequest[field] !== undefined &&
|
|
52
|
-
!isNaN(Number(partialRequest[field])) &&
|
|
53
|
-
partialRequest[field] !== null) &&
|
|
54
|
-
(requireAmount
|
|
55
|
-
? Boolean((partialRequest.srcTokenAmount ?? '').match(/^[1-9]\d*$/u))
|
|
56
|
-
: true));
|
|
57
|
-
};
|
|
58
|
-
exports.isValidQuoteRequest = isValidQuoteRequest;
|
|
59
|
-
const isValidBatchSellQuoteRequest = (quoteRequests, requireAmount = true) => quoteRequests.every((req) => (0, exports.isValidQuoteRequest)(req, requireAmount));
|
|
60
|
-
exports.isValidBatchSellQuoteRequest = isValidBatchSellQuoteRequest;
|
|
61
|
-
/**
|
|
62
|
-
* Generates a pseudo-unique string that identifies each quote by aggregator, bridge, and steps
|
|
63
|
-
*
|
|
64
|
-
* @param quote - The quote to generate an identifier for
|
|
65
|
-
* @returns A pseudo-unique string that identifies the quote
|
|
66
|
-
*/
|
|
67
|
-
const getQuoteIdentifier = (quote) => `${quote.bridgeId}-${quote.bridges[0]}-${quote.steps.length}`;
|
|
68
|
-
exports.getQuoteIdentifier = getQuoteIdentifier;
|
|
69
|
-
const calcTokenAmount = (value, decimals) => {
|
|
70
|
-
const divisor = new bignumber_js_1.BigNumber(10).pow(decimals ?? 0);
|
|
71
|
-
return new bignumber_js_1.BigNumber(value).div(divisor);
|
|
72
|
-
};
|
|
73
|
-
const calcNonEvmTotalNetworkFee = (bridgeQuote, { exchangeRate, usdExchangeRate }) => {
|
|
74
|
-
const { nonEvmFeesInNative } = bridgeQuote;
|
|
75
|
-
// Fees are now stored directly in native units (SOL, BTC) without conversion
|
|
76
|
-
const feeInNative = new bignumber_js_1.BigNumber(nonEvmFeesInNative ?? '0');
|
|
77
|
-
return {
|
|
78
|
-
amount: feeInNative.toString(),
|
|
79
|
-
valueInCurrency: exchangeRate
|
|
80
|
-
? feeInNative.times(exchangeRate).toString()
|
|
81
|
-
: null,
|
|
82
|
-
usd: usdExchangeRate ? feeInNative.times(usdExchangeRate).toString() : null,
|
|
83
|
-
};
|
|
84
|
-
};
|
|
85
|
-
exports.calcNonEvmTotalNetworkFee = calcNonEvmTotalNetworkFee;
|
|
86
|
-
const calcToAmount = (destTokenAmount, destAsset, { exchangeRate, usdExchangeRate }) => {
|
|
87
|
-
const normalizedDestAmount = calcTokenAmount(destTokenAmount, destAsset.decimals);
|
|
88
|
-
return {
|
|
89
|
-
amount: normalizedDestAmount.toString(),
|
|
90
|
-
valueInCurrency: exchangeRate
|
|
91
|
-
? normalizedDestAmount.times(exchangeRate).toString()
|
|
92
|
-
: null,
|
|
93
|
-
usd: usdExchangeRate
|
|
94
|
-
? normalizedDestAmount.times(usdExchangeRate).toString()
|
|
95
|
-
: null,
|
|
96
|
-
};
|
|
97
|
-
};
|
|
98
|
-
exports.calcToAmount = calcToAmount;
|
|
99
|
-
const calcSentAmount = ({ srcTokenAmount, srcAsset, feeData, intent }, { exchangeRate, usdExchangeRate }) => {
|
|
100
|
-
// For intent-based swaps (e.g. CoW Protocol), srcTokenAmount is the total
|
|
101
|
-
// fixed commitment the user makes to the protocol — the protocol fee is
|
|
102
|
-
// already baked in. Adding feeData fees on top would double-count them.
|
|
103
|
-
// For conventional swaps, srcTokenAmount is the net routing amount (fees
|
|
104
|
-
// excluded), so the src-token fees must be added to get the wallet deduction.
|
|
105
|
-
const sentAmount = intent
|
|
106
|
-
? new bignumber_js_1.BigNumber(srcTokenAmount)
|
|
107
|
-
: Object.values(feeData)
|
|
108
|
-
.filter((fee) => fee?.amount && fee.asset?.assetId === srcAsset.assetId)
|
|
109
|
-
.reduce((acc, { amount }) => acc.plus(amount), new bignumber_js_1.BigNumber(srcTokenAmount));
|
|
110
|
-
const normalizedSentAmount = calcTokenAmount(sentAmount, srcAsset.decimals);
|
|
111
|
-
return {
|
|
112
|
-
amount: normalizedSentAmount.toString(),
|
|
113
|
-
valueInCurrency: exchangeRate
|
|
114
|
-
? normalizedSentAmount.times(exchangeRate).toString()
|
|
115
|
-
: null,
|
|
116
|
-
usd: usdExchangeRate
|
|
117
|
-
? normalizedSentAmount.times(usdExchangeRate).toString()
|
|
118
|
-
: null,
|
|
119
|
-
};
|
|
120
|
-
};
|
|
121
|
-
exports.calcSentAmount = calcSentAmount;
|
|
122
|
-
const calcBatchFees = (amount, asset, { exchangeRate, usdExchangeRate }) => {
|
|
123
|
-
const normalizedAmount = calcTokenAmount(amount, asset.decimals);
|
|
124
|
-
return {
|
|
125
|
-
amount: normalizedAmount.toString(),
|
|
126
|
-
valueInCurrency: exchangeRate
|
|
127
|
-
? normalizedAmount.times(exchangeRate).toString()
|
|
128
|
-
: null,
|
|
129
|
-
usd: usdExchangeRate
|
|
130
|
-
? normalizedAmount.times(usdExchangeRate).toString()
|
|
131
|
-
: null,
|
|
132
|
-
asset,
|
|
133
|
-
};
|
|
134
|
-
};
|
|
135
|
-
exports.calcBatchFees = calcBatchFees;
|
|
136
|
-
const calcRelayerFee = (quoteResponse, { exchangeRate, usdExchangeRate }) => {
|
|
137
|
-
const { quote, trade } = quoteResponse;
|
|
138
|
-
const relayerFeeAmount = new bignumber_js_1.BigNumber((0, controller_utils_1.convertHexToDecimal)(trade.value || '0x0'));
|
|
139
|
-
let relayerFeeInNative = calcTokenAmount(relayerFeeAmount, 18);
|
|
140
|
-
// Subtract srcAmount and other fees from trade value if srcAsset is native
|
|
141
|
-
if ((0, bridge_1.isNativeAddress)(quote.srcAsset.address)) {
|
|
142
|
-
const sentAmountInNative = (0, exports.calcSentAmount)(quote, {
|
|
143
|
-
exchangeRate,
|
|
144
|
-
usdExchangeRate,
|
|
145
|
-
}).amount;
|
|
146
|
-
relayerFeeInNative = relayerFeeInNative.minus(sentAmountInNative);
|
|
147
|
-
}
|
|
148
|
-
return {
|
|
149
|
-
amount: relayerFeeInNative,
|
|
150
|
-
valueInCurrency: exchangeRate
|
|
151
|
-
? relayerFeeInNative.times(exchangeRate)
|
|
152
|
-
: null,
|
|
153
|
-
usd: usdExchangeRate ? relayerFeeInNative.times(usdExchangeRate) : null,
|
|
154
|
-
};
|
|
155
|
-
};
|
|
156
|
-
exports.calcRelayerFee = calcRelayerFee;
|
|
157
|
-
const calcTotalGasFee = ({ approvalGasLimit, resetApprovalGasLimit, tradeGasLimit, l1GasFeesInHexWei, feePerGasInDecGwei, nativeToDisplayCurrencyExchangeRate, nativeToUsdExchangeRate, }) => {
|
|
158
|
-
const totalGasLimitInDec = new bignumber_js_1.BigNumber(tradeGasLimit?.toString() ?? '0')
|
|
159
|
-
.plus(approvalGasLimit?.toString() ?? '0')
|
|
160
|
-
.plus(resetApprovalGasLimit?.toString() ?? '0');
|
|
161
|
-
const l1GasFeesInDecGWei = (0, controller_utils_1.weiHexToGweiDec)((0, controller_utils_1.toHex)(l1GasFeesInHexWei ?? '0'));
|
|
162
|
-
const gasFeesInDecGwei = totalGasLimitInDec
|
|
163
|
-
.times(feePerGasInDecGwei ?? '0')
|
|
164
|
-
.plus(l1GasFeesInDecGWei);
|
|
165
|
-
const gasFeesInDecEth = gasFeesInDecGwei.times(new bignumber_js_1.BigNumber(10).pow(-9));
|
|
166
|
-
const gasFeesInDisplayCurrency = nativeToDisplayCurrencyExchangeRate
|
|
167
|
-
? gasFeesInDecEth.times(nativeToDisplayCurrencyExchangeRate.toString())
|
|
168
|
-
: null;
|
|
169
|
-
const gasFeesInUSD = nativeToUsdExchangeRate
|
|
170
|
-
? gasFeesInDecEth.times(nativeToUsdExchangeRate.toString())
|
|
171
|
-
: null;
|
|
172
|
-
return {
|
|
173
|
-
amount: gasFeesInDecEth.toString(),
|
|
174
|
-
valueInCurrency: gasFeesInDisplayCurrency?.toString() ?? null,
|
|
175
|
-
usd: gasFeesInUSD?.toString() ?? null,
|
|
176
|
-
};
|
|
177
|
-
};
|
|
178
|
-
const calcEstimatedAndMaxTotalGasFee = ({ bridgeQuote: { approval, trade, l1GasFeesInHexWei, resetApproval }, feePerGasInDecGwei, maxFeePerGasInDecGwei, exchangeRate: nativeToDisplayCurrencyExchangeRate, usdExchangeRate: nativeToUsdExchangeRate, }) => {
|
|
179
|
-
// Estimated gas fees spent after receiving refunds, this is shown to the user
|
|
180
|
-
const { amount: amountEffective, valueInCurrency: valueInCurrencyEffective, usd: usdEffective, } = calcTotalGasFee({
|
|
181
|
-
// Fallback to gasLimit if effectiveGas is not available
|
|
182
|
-
approvalGasLimit: approval?.effectiveGas ?? approval?.gasLimit,
|
|
183
|
-
resetApprovalGasLimit: resetApproval?.effectiveGas ?? resetApproval?.gasLimit,
|
|
184
|
-
tradeGasLimit: trade?.effectiveGas ?? trade?.gasLimit,
|
|
185
|
-
l1GasFeesInHexWei,
|
|
186
|
-
feePerGasInDecGwei,
|
|
187
|
-
nativeToDisplayCurrencyExchangeRate,
|
|
188
|
-
nativeToUsdExchangeRate,
|
|
189
|
-
});
|
|
190
|
-
// Estimated total gas fee, including refunded fees (medium)
|
|
191
|
-
const { amount, valueInCurrency, usd } = calcTotalGasFee({
|
|
192
|
-
approvalGasLimit: approval?.gasLimit,
|
|
193
|
-
resetApprovalGasLimit: resetApproval?.gasLimit,
|
|
194
|
-
tradeGasLimit: trade?.gasLimit,
|
|
195
|
-
l1GasFeesInHexWei,
|
|
196
|
-
feePerGasInDecGwei,
|
|
197
|
-
nativeToDisplayCurrencyExchangeRate,
|
|
198
|
-
nativeToUsdExchangeRate,
|
|
199
|
-
});
|
|
200
|
-
// Max gas fee (high), used to disable submission of the transaction
|
|
201
|
-
const { amount: amountMax, valueInCurrency: valueInCurrencyMax, usd: usdMax, } = calcTotalGasFee({
|
|
202
|
-
approvalGasLimit: approval?.gasLimit,
|
|
203
|
-
resetApprovalGasLimit: resetApproval?.gasLimit,
|
|
204
|
-
tradeGasLimit: trade?.gasLimit,
|
|
205
|
-
l1GasFeesInHexWei,
|
|
206
|
-
feePerGasInDecGwei: maxFeePerGasInDecGwei,
|
|
207
|
-
nativeToDisplayCurrencyExchangeRate,
|
|
208
|
-
nativeToUsdExchangeRate,
|
|
209
|
-
});
|
|
210
|
-
return {
|
|
211
|
-
effective: {
|
|
212
|
-
amount: amountEffective,
|
|
213
|
-
valueInCurrency: valueInCurrencyEffective,
|
|
214
|
-
usd: usdEffective,
|
|
215
|
-
},
|
|
216
|
-
total: {
|
|
217
|
-
amount,
|
|
218
|
-
valueInCurrency,
|
|
219
|
-
usd,
|
|
220
|
-
},
|
|
221
|
-
max: {
|
|
222
|
-
amount: amountMax,
|
|
223
|
-
valueInCurrency: valueInCurrencyMax,
|
|
224
|
-
usd: usdMax,
|
|
225
|
-
},
|
|
226
|
-
};
|
|
227
|
-
};
|
|
228
|
-
exports.calcEstimatedAndMaxTotalGasFee = calcEstimatedAndMaxTotalGasFee;
|
|
229
|
-
/**
|
|
230
|
-
* Calculates the total estimated network fees for the bridge transaction
|
|
231
|
-
*
|
|
232
|
-
* @param gasFee - The gas fee for the bridge transaction
|
|
233
|
-
* @param gasFee.total - The fee to display to the user. If not available, this is equal to the gasLimit (total)
|
|
234
|
-
* @param relayerFee - The relayer fee paid to bridge providers
|
|
235
|
-
* @returns The total estimated network fee for the bridge transaction, including the relayer fee paid to bridge providers
|
|
236
|
-
*/
|
|
237
|
-
const calcTotalEstimatedNetworkFee = ({ total: gasFeeToDisplay }, relayerFee) => {
|
|
238
|
-
return {
|
|
239
|
-
amount: new bignumber_js_1.BigNumber(gasFeeToDisplay?.amount ?? '0')
|
|
240
|
-
.plus(relayerFee.amount)
|
|
241
|
-
.toString(),
|
|
242
|
-
valueInCurrency: gasFeeToDisplay?.valueInCurrency
|
|
243
|
-
? new bignumber_js_1.BigNumber(gasFeeToDisplay.valueInCurrency)
|
|
244
|
-
.plus(relayerFee.valueInCurrency ?? '0')
|
|
245
|
-
.toString()
|
|
246
|
-
: null,
|
|
247
|
-
usd: gasFeeToDisplay?.usd
|
|
248
|
-
? new bignumber_js_1.BigNumber(gasFeeToDisplay.usd)
|
|
249
|
-
.plus(relayerFee.usd ?? '0')
|
|
250
|
-
.toString()
|
|
251
|
-
: null,
|
|
252
|
-
};
|
|
253
|
-
};
|
|
254
|
-
exports.calcTotalEstimatedNetworkFee = calcTotalEstimatedNetworkFee;
|
|
255
|
-
const calcTotalMaxNetworkFee = (gasFee, relayerFee) => {
|
|
256
|
-
return {
|
|
257
|
-
amount: new bignumber_js_1.BigNumber(gasFee.max.amount).plus(relayerFee.amount).toString(),
|
|
258
|
-
valueInCurrency: gasFee.max.valueInCurrency
|
|
259
|
-
? new bignumber_js_1.BigNumber(gasFee.max.valueInCurrency)
|
|
260
|
-
.plus(relayerFee.valueInCurrency ?? '0')
|
|
261
|
-
.toString()
|
|
262
|
-
: null,
|
|
263
|
-
usd: gasFee.max.usd
|
|
264
|
-
? new bignumber_js_1.BigNumber(gasFee.max.usd).plus(relayerFee.usd ?? '0').toString()
|
|
265
|
-
: null,
|
|
266
|
-
};
|
|
267
|
-
};
|
|
268
|
-
exports.calcTotalMaxNetworkFee = calcTotalMaxNetworkFee;
|
|
269
|
-
// Gas is included for some swap quotes and this is the value displayed in the client
|
|
270
|
-
const calcIncludedTxFees = ({ gasIncluded, gasIncluded7702, srcAsset, feeData: { txFee } }, srcTokenExchangeRate, destTokenExchangeRate) => {
|
|
271
|
-
if (!txFee || !(gasIncluded || gasIncluded7702)) {
|
|
272
|
-
return null;
|
|
273
|
-
}
|
|
274
|
-
// Use exchange rate of the token that is being used to pay for the transaction
|
|
275
|
-
const { exchangeRate, usdExchangeRate } = txFee.asset.assetId === srcAsset.assetId
|
|
276
|
-
? srcTokenExchangeRate
|
|
277
|
-
: destTokenExchangeRate;
|
|
278
|
-
const normalizedTxFeeAmount = calcTokenAmount(txFee.amount, txFee.asset.decimals);
|
|
279
|
-
return {
|
|
280
|
-
amount: normalizedTxFeeAmount.toString(),
|
|
281
|
-
valueInCurrency: exchangeRate
|
|
282
|
-
? normalizedTxFeeAmount.times(exchangeRate).toString()
|
|
283
|
-
: null,
|
|
284
|
-
usd: usdExchangeRate
|
|
285
|
-
? normalizedTxFeeAmount.times(usdExchangeRate).toString()
|
|
286
|
-
: null,
|
|
287
|
-
};
|
|
288
|
-
};
|
|
289
|
-
exports.calcIncludedTxFees = calcIncludedTxFees;
|
|
290
|
-
const calcAdjustedReturn = (toTokenAmount, totalEstimatedNetworkFee, { feeData: { txFee }, destAsset: { assetId: destAssetId } }) => {
|
|
291
|
-
// If gas is included and is taken from the dest token, don't subtract network fee from return
|
|
292
|
-
if (txFee?.asset?.assetId === destAssetId) {
|
|
293
|
-
return {
|
|
294
|
-
valueInCurrency: toTokenAmount.valueInCurrency,
|
|
295
|
-
usd: toTokenAmount.usd,
|
|
296
|
-
};
|
|
297
|
-
}
|
|
298
|
-
return {
|
|
299
|
-
valueInCurrency: toTokenAmount.valueInCurrency && totalEstimatedNetworkFee.valueInCurrency
|
|
300
|
-
? new bignumber_js_1.BigNumber(toTokenAmount.valueInCurrency)
|
|
301
|
-
.minus(totalEstimatedNetworkFee.valueInCurrency)
|
|
302
|
-
.toString()
|
|
303
|
-
: null,
|
|
304
|
-
usd: toTokenAmount.usd && totalEstimatedNetworkFee.usd
|
|
305
|
-
? new bignumber_js_1.BigNumber(toTokenAmount.usd)
|
|
306
|
-
.minus(totalEstimatedNetworkFee.usd)
|
|
307
|
-
.toString()
|
|
308
|
-
: null,
|
|
309
|
-
};
|
|
310
|
-
};
|
|
311
|
-
exports.calcAdjustedReturn = calcAdjustedReturn;
|
|
312
|
-
const calcSwapRate = (sentAmount, destTokenAmount) => new bignumber_js_1.BigNumber(destTokenAmount).div(sentAmount).toString();
|
|
313
|
-
exports.calcSwapRate = calcSwapRate;
|
|
314
|
-
const calcCost = (adjustedReturn, sentAmount) => ({
|
|
315
|
-
valueInCurrency: adjustedReturn.valueInCurrency && sentAmount.valueInCurrency
|
|
316
|
-
? new bignumber_js_1.BigNumber(sentAmount.valueInCurrency)
|
|
317
|
-
.minus(adjustedReturn.valueInCurrency)
|
|
318
|
-
.toString()
|
|
319
|
-
: null,
|
|
320
|
-
usd: adjustedReturn.usd && sentAmount.usd
|
|
321
|
-
? new bignumber_js_1.BigNumber(sentAmount.usd).minus(adjustedReturn.usd).toString()
|
|
322
|
-
: null,
|
|
323
|
-
});
|
|
324
|
-
exports.calcCost = calcCost;
|
|
325
|
-
/**
|
|
326
|
-
* Calculates the slippage absolute value percentage based on the adjusted return and sent amount.
|
|
327
|
-
*
|
|
328
|
-
* @param adjustedReturn - Adjusted return value
|
|
329
|
-
* @param sentAmount - Sent amount value
|
|
330
|
-
* @returns the slippage in percentage
|
|
331
|
-
*/
|
|
332
|
-
const calcSlippagePercentage = (adjustedReturn, sentAmount) => {
|
|
333
|
-
const cost = (0, exports.calcCost)(adjustedReturn, sentAmount);
|
|
334
|
-
if (cost.valueInCurrency && sentAmount.valueInCurrency) {
|
|
335
|
-
return new bignumber_js_1.BigNumber(cost.valueInCurrency)
|
|
336
|
-
.div(sentAmount.valueInCurrency)
|
|
337
|
-
.times(100)
|
|
338
|
-
.abs()
|
|
339
|
-
.toString();
|
|
340
|
-
}
|
|
341
|
-
if (cost.usd && sentAmount.usd) {
|
|
342
|
-
return new bignumber_js_1.BigNumber(cost.usd)
|
|
343
|
-
.div(sentAmount.usd)
|
|
344
|
-
.times(100)
|
|
345
|
-
.abs()
|
|
346
|
-
.toString();
|
|
347
|
-
}
|
|
348
|
-
return null;
|
|
349
|
-
};
|
|
350
|
-
exports.calcSlippagePercentage = calcSlippagePercentage;
|
|
351
|
-
const formatEtaInMinutes = (estimatedProcessingTimeInSeconds) => {
|
|
352
|
-
if (estimatedProcessingTimeInSeconds < 60) {
|
|
353
|
-
return `< 1`;
|
|
354
|
-
}
|
|
355
|
-
return (estimatedProcessingTimeInSeconds / 60).toFixed();
|
|
356
|
-
};
|
|
357
|
-
exports.formatEtaInMinutes = formatEtaInMinutes;
|
|
358
|
-
const sortQuotes = (quotes, featureId) => {
|
|
359
|
-
// Sort perps quotes by increasing estimated processing time (fastest first)
|
|
360
|
-
if (featureId === feature_flags_1.FeatureId.PERPS) {
|
|
361
|
-
return quotes.sort((a, b) => {
|
|
362
|
-
return (a.estimatedProcessingTimeInSeconds - b.estimatedProcessingTimeInSeconds);
|
|
363
|
-
});
|
|
364
|
-
}
|
|
365
|
-
return quotes;
|
|
366
|
-
};
|
|
367
|
-
exports.sortQuotes = sortQuotes;
|
|
368
|
-
//# sourceMappingURL=quote.cjs.map
|
package/dist/utils/quote.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"quote.cjs","sourceRoot":"","sources":["../../src/utils/quote.ts"],"names":[],"mappings":";;;AAAA,qEAAqE;AACrE,iEAIoC;AACpC,+CAAyC;AAUzC,mEAAwD;AAIxD,yCAA4D;AAErD,MAAM,mBAAmB,GAAG,CACjC,cAA4C,EAC5C,aAAa,GAAG,IAAI,EACmB,EAAE;IACzC,MAAM,YAAY,GAAG;QACnB,iBAAiB;QACjB,kBAAkB;QAClB,YAAY;QACZ,aAAa;QACb,eAAe;KAChB,CAAC;IACF,IAAI,aAAa,EAAE,CAAC;QAClB,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACtC,CAAC;IACD,qGAAqG;IACrG,qCAAqC;IACrC,oBAAoB;IACpB,oBAAoB;IACpB,qDAAqD;IACrD,qDAAqD;IACrD,IACE,cAAc,CAAC,WAAW;QAC1B,cAAc,CAAC,UAAU;QACzB,cAAc,CAAC,WAAW,KAAK,cAAc,CAAC,UAAU,IAAI,mBAAmB;QAC/E,CAAC,IAAA,wBAAe,EAAC,cAAc,CAAC,WAAW,CAAC;YAC1C,IAAA,wBAAe,EAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,0BAA0B;MACxE,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACvC,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC;YACtC,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,MAAM,YAAY,GAAG,EAAE,CAAC;IACxB,oDAAoD;IACpD,IAAI,cAAc,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC1C,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,CACL,YAAY,CAAC,KAAK,CAChB,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,IAAI,cAAc;QACvB,OAAO,cAAc,CAAC,KAAoC,CAAC;YACzD,QAAQ;QACV,cAAc,CAAC,KAAoC,CAAC,KAAK,SAAS;QAClE,cAAc,CAAC,KAAoC,CAAC,KAAK,EAAE;QAC3D,cAAc,CAAC,KAAoC,CAAC,KAAK,IAAI,CAChE;QACD,YAAY,CAAC,KAAK,CAChB,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,IAAI,cAAc;YACvB,OAAO,cAAc,CAAC,KAAoC,CAAC;gBACzD,QAAQ;YACV,cAAc,CAAC,KAAoC,CAAC,KAAK,SAAS;YAClE,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,KAAoC,CAAC,CAAC,CAAC;YACpE,cAAc,CAAC,KAAoC,CAAC,KAAK,IAAI,CAChE;QACD,CAAC,aAAa;YACZ,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YACrE,CAAC,CAAC,IAAI,CAAC,CACV,CAAC;AACJ,CAAC,CAAC;AA7DW,QAAA,mBAAmB,uBA6D9B;AAEK,MAAM,4BAA4B,GAAG,CAC1C,aAA6C,EAC7C,aAAa,GAAG,IAAI,EACoB,EAAE,CAC1C,aAAa,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,2BAAmB,EAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC;AAJ3D,QAAA,4BAA4B,gCAI+B;AAExE;;;;;GAKG;AACI,MAAM,kBAAkB,GAAG,CAAC,KAA+B,EAAE,EAAE,CACpE,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AADnD,QAAA,kBAAkB,sBACiC;AAEhE,MAAM,eAAe,GAAG,CAAC,KAAyB,EAAE,QAAgB,EAAE,EAAE;IACtE,MAAM,OAAO,GAAG,IAAI,wBAAS,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;IACrD,OAAO,IAAI,wBAAS,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEK,MAAM,yBAAyB,GAAG,CACvC,WAAyC,EACzC,EAAE,YAAY,EAAE,eAAe,EAAgB,EAC/C,EAAE;IACF,MAAM,EAAE,kBAAkB,EAAE,GAAG,WAAW,CAAC;IAC3C,6EAA6E;IAC7E,MAAM,WAAW,GAAG,IAAI,wBAAS,CAAC,kBAAkB,IAAI,GAAG,CAAC,CAAC;IAE7D,OAAO;QACL,MAAM,EAAE,WAAW,CAAC,QAAQ,EAAE;QAC9B,eAAe,EAAE,YAAY;YAC3B,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE;YAC5C,CAAC,CAAC,IAAI;QACR,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI;KAC5E,CAAC;AACJ,CAAC,CAAC;AAfW,QAAA,yBAAyB,6BAepC;AAEK,MAAM,YAAY,GAAG,CAC1B,eAAuB,EACvB,SAAsB,EACtB,EAAE,YAAY,EAAE,eAAe,EAAgB,EAC/C,EAAE;IACF,MAAM,oBAAoB,GAAG,eAAe,CAC1C,eAAe,EACf,SAAS,CAAC,QAAQ,CACnB,CAAC;IACF,OAAO;QACL,MAAM,EAAE,oBAAoB,CAAC,QAAQ,EAAE;QACvC,eAAe,EAAE,YAAY;YAC3B,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE;YACrD,CAAC,CAAC,IAAI;QACR,GAAG,EAAE,eAAe;YAClB,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE;YACxD,CAAC,CAAC,IAAI;KACT,CAAC;AACJ,CAAC,CAAC;AAlBW,QAAA,YAAY,gBAkBvB;AAEK,MAAM,cAAc,GAAG,CAC5B,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAS,EACpD,EAAE,YAAY,EAAE,eAAe,EAAgB,EAC/C,EAAE;IACF,0EAA0E;IAC1E,wEAAwE;IACxE,wEAAwE;IACxE,yEAAyE;IACzE,8EAA8E;IAC9E,MAAM,UAAU,GAAG,MAAM;QACvB,CAAC,CAAC,IAAI,wBAAS,CAAC,cAAc,CAAC;QAC/B,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;aACnB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,QAAQ,CAAC,OAAO,CAAC;aACvE,MAAM,CACL,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EACrC,IAAI,wBAAS,CAAC,cAAc,CAAC,CAC9B,CAAC;IACR,MAAM,oBAAoB,GAAG,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5E,OAAO;QACL,MAAM,EAAE,oBAAoB,CAAC,QAAQ,EAAE;QACvC,eAAe,EAAE,YAAY;YAC3B,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE;YACrD,CAAC,CAAC,IAAI;QACR,GAAG,EAAE,eAAe;YAClB,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE;YACxD,CAAC,CAAC,IAAI;KACT,CAAC;AACJ,CAAC,CAAC;AA3BW,QAAA,cAAc,kBA2BzB;AAEK,MAAM,aAAa,GAAG,CAC3B,MAAc,EACd,KAAkB,EAClB,EAAE,YAAY,EAAE,eAAe,EAAgB,EAC/C,EAAE;IACF,MAAM,gBAAgB,GAAG,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAEjE,OAAO;QACL,MAAM,EAAE,gBAAgB,CAAC,QAAQ,EAAE;QACnC,eAAe,EAAE,YAAY;YAC3B,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE;YACjD,CAAC,CAAC,IAAI;QACR,GAAG,EAAE,eAAe;YAClB,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE;YACpD,CAAC,CAAC,IAAI;QACR,KAAK;KACN,CAAC;AACJ,CAAC,CAAC;AAjBW,QAAA,aAAa,iBAiBxB;AAEK,MAAM,cAAc,GAAG,CAC5B,aAA8C,EAC9C,EAAE,YAAY,EAAE,eAAe,EAAgB,EAC/C,EAAE;IACF,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,aAAa,CAAC;IACvC,MAAM,gBAAgB,GAAG,IAAI,wBAAS,CACpC,IAAA,sCAAmB,EAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,CAC1C,CAAC;IACF,IAAI,kBAAkB,GAAG,eAAe,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;IAE/D,2EAA2E;IAC3E,IAAI,IAAA,wBAAe,EAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5C,MAAM,kBAAkB,GAAG,IAAA,sBAAc,EAAC,KAAK,EAAE;YAC/C,YAAY;YACZ,eAAe;SAChB,CAAC,CAAC,MAAM,CAAC;QACV,kBAAkB,GAAG,kBAAkB,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACpE,CAAC;IAED,OAAO;QACL,MAAM,EAAE,kBAAkB;QAC1B,eAAe,EAAE,YAAY;YAC3B,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,YAAY,CAAC;YACxC,CAAC,CAAC,IAAI;QACR,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI;KACxE,CAAC;AACJ,CAAC,CAAC;AA1BW,QAAA,cAAc,kBA0BzB;AAEF,MAAM,eAAe,GAAG,CAAC,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,mCAAmC,EACnC,uBAAuB,GASxB,EAAE,EAAE;IACH,MAAM,kBAAkB,GAAG,IAAI,wBAAS,CAAC,aAAa,EAAE,QAAQ,EAAE,IAAI,GAAG,CAAC;SACvE,IAAI,CAAC,gBAAgB,EAAE,QAAQ,EAAE,IAAI,GAAG,CAAC;SACzC,IAAI,CAAC,qBAAqB,EAAE,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC;IAElD,MAAM,kBAAkB,GAAG,IAAA,kCAAe,EAAC,IAAA,wBAAK,EAAC,iBAAiB,IAAI,GAAG,CAAC,CAAC,CAAC;IAC5E,MAAM,gBAAgB,GAAG,kBAAkB;SACxC,KAAK,CAAC,kBAAkB,IAAI,GAAG,CAAC;SAChC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC5B,MAAM,eAAe,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,wBAAS,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE1E,MAAM,wBAAwB,GAAG,mCAAmC;QAClE,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,mCAAmC,CAAC,QAAQ,EAAE,CAAC;QACvE,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,YAAY,GAAG,uBAAuB;QAC1C,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,uBAAuB,CAAC,QAAQ,EAAE,CAAC;QAC3D,CAAC,CAAC,IAAI,CAAC;IAET,OAAO;QACL,MAAM,EAAE,eAAe,CAAC,QAAQ,EAAE;QAClC,eAAe,EAAE,wBAAwB,EAAE,QAAQ,EAAE,IAAI,IAAI;QAC7D,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,IAAI;KACtC,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,8BAA8B,GAAG,CAAC,EAC7C,WAAW,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,EAClE,kBAAkB,EAClB,qBAAqB,EACrB,YAAY,EAAE,mCAAmC,EACjD,eAAe,EAAE,uBAAuB,GAK1B,EAA2B,EAAE;IAC3C,8EAA8E;IAC9E,MAAM,EACJ,MAAM,EAAE,eAAe,EACvB,eAAe,EAAE,wBAAwB,EACzC,GAAG,EAAE,YAAY,GAClB,GAAG,eAAe,CAAC;QAClB,wDAAwD;QACxD,gBAAgB,EAAE,QAAQ,EAAE,YAAY,IAAI,QAAQ,EAAE,QAAQ;QAC9D,qBAAqB,EACnB,aAAa,EAAE,YAAY,IAAI,aAAa,EAAE,QAAQ;QACxD,aAAa,EAAE,KAAK,EAAE,YAAY,IAAI,KAAK,EAAE,QAAQ;QACrD,iBAAiB;QACjB,kBAAkB;QAClB,mCAAmC;QACnC,uBAAuB;KACxB,CAAC,CAAC;IAEH,4DAA4D;IAC5D,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,eAAe,CAAC;QACvD,gBAAgB,EAAE,QAAQ,EAAE,QAAQ;QACpC,qBAAqB,EAAE,aAAa,EAAE,QAAQ;QAC9C,aAAa,EAAE,KAAK,EAAE,QAAQ;QAC9B,iBAAiB;QACjB,kBAAkB;QAClB,mCAAmC;QACnC,uBAAuB;KACxB,CAAC,CAAC;IAEH,oEAAoE;IACpE,MAAM,EACJ,MAAM,EAAE,SAAS,EACjB,eAAe,EAAE,kBAAkB,EACnC,GAAG,EAAE,MAAM,GACZ,GAAG,eAAe,CAAC;QAClB,gBAAgB,EAAE,QAAQ,EAAE,QAAQ;QACpC,qBAAqB,EAAE,aAAa,EAAE,QAAQ;QAC9C,aAAa,EAAE,KAAK,EAAE,QAAQ;QAC9B,iBAAiB;QACjB,kBAAkB,EAAE,qBAAqB;QACzC,mCAAmC;QACnC,uBAAuB;KACxB,CAAC,CAAC;IAEH,OAAO;QACL,SAAS,EAAE;YACT,MAAM,EAAE,eAAe;YACvB,eAAe,EAAE,wBAAwB;YACzC,GAAG,EAAE,YAAY;SAClB;QACD,KAAK,EAAE;YACL,MAAM;YACN,eAAe;YACf,GAAG;SACJ;QACD,GAAG,EAAE;YACH,MAAM,EAAE,SAAS;YACjB,eAAe,EAAE,kBAAkB;YACnC,GAAG,EAAE,MAAM;SACZ;KACF,CAAC;AACJ,CAAC,CAAC;AAvEW,QAAA,8BAA8B,kCAuEzC;AAEF;;;;;;;GAOG;AACI,MAAM,4BAA4B,GAAG,CAC1C,EAAE,KAAK,EAAE,eAAe,EAAqD,EAC7E,UAA6C,EAC7C,EAAE;IACF,OAAO;QACL,MAAM,EAAE,IAAI,wBAAS,CAAC,eAAe,EAAE,MAAM,IAAI,GAAG,CAAC;aAClD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;aACvB,QAAQ,EAAE;QACb,eAAe,EAAE,eAAe,EAAE,eAAe;YAC/C,CAAC,CAAC,IAAI,wBAAS,CAAC,eAAe,CAAC,eAAe,CAAC;iBAC3C,IAAI,CAAC,UAAU,CAAC,eAAe,IAAI,GAAG,CAAC;iBACvC,QAAQ,EAAE;YACf,CAAC,CAAC,IAAI;QACR,GAAG,EAAE,eAAe,EAAE,GAAG;YACvB,CAAC,CAAC,IAAI,wBAAS,CAAC,eAAe,CAAC,GAAG,CAAC;iBAC/B,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC;iBAC3B,QAAQ,EAAE;YACf,CAAC,CAAC,IAAI;KACT,CAAC;AACJ,CAAC,CAAC;AAnBW,QAAA,4BAA4B,gCAmBvC;AAEK,MAAM,sBAAsB,GAAG,CACpC,MAAyD,EACzD,UAA6C,EAC7C,EAAE;IACF,OAAO;QACL,MAAM,EAAE,IAAI,wBAAS,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;QAC3E,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,eAAe;YACzC,CAAC,CAAC,IAAI,wBAAS,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC;iBACtC,IAAI,CAAC,UAAU,CAAC,eAAe,IAAI,GAAG,CAAC;iBACvC,QAAQ,EAAE;YACf,CAAC,CAAC,IAAI;QACR,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG;YACjB,CAAC,CAAC,IAAI,wBAAS,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE;YACtE,CAAC,CAAC,IAAI;KACT,CAAC;AACJ,CAAC,CAAC;AAfW,QAAA,sBAAsB,0BAejC;AAEF,qFAAqF;AAC9E,MAAM,kBAAkB,GAAG,CAChC,EAAE,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAS,EACrE,oBAAkC,EAClC,qBAAmC,EACnC,EAAE;IACF,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,WAAW,IAAI,eAAe,CAAC,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,+EAA+E;IAC/E,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,GACrC,KAAK,CAAC,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO;QACtC,CAAC,CAAC,oBAAoB;QACtB,CAAC,CAAC,qBAAqB,CAAC;IAC5B,MAAM,qBAAqB,GAAG,eAAe,CAC3C,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,KAAK,CAAC,QAAQ,CACrB,CAAC;IAEF,OAAO;QACL,MAAM,EAAE,qBAAqB,CAAC,QAAQ,EAAE;QACxC,eAAe,EAAE,YAAY;YAC3B,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE;YACtD,CAAC,CAAC,IAAI;QACR,GAAG,EAAE,eAAe;YAClB,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE;YACzD,CAAC,CAAC,IAAI;KACT,CAAC;AACJ,CAAC,CAAC;AA3BW,QAAA,kBAAkB,sBA2B7B;AAEK,MAAM,kBAAkB,GAAG,CAChC,aAA8C,EAC9C,wBAAyE,EACzE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,EAAS,EAClE,EAAE;IACF,8FAA8F;IAC9F,IAAI,KAAK,EAAE,KAAK,EAAE,OAAO,KAAK,WAAW,EAAE,CAAC;QAC1C,OAAO;YACL,eAAe,EAAE,aAAa,CAAC,eAAe;YAC9C,GAAG,EAAE,aAAa,CAAC,GAAG;SACvB,CAAC;IACJ,CAAC;IACD,OAAO;QACL,eAAe,EACb,aAAa,CAAC,eAAe,IAAI,wBAAwB,CAAC,eAAe;YACvE,CAAC,CAAC,IAAI,wBAAS,CAAC,aAAa,CAAC,eAAe,CAAC;iBACzC,KAAK,CAAC,wBAAwB,CAAC,eAAe,CAAC;iBAC/C,QAAQ,EAAE;YACf,CAAC,CAAC,IAAI;QACV,GAAG,EACD,aAAa,CAAC,GAAG,IAAI,wBAAwB,CAAC,GAAG;YAC/C,CAAC,CAAC,IAAI,wBAAS,CAAC,aAAa,CAAC,GAAG,CAAC;iBAC7B,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC;iBACnC,QAAQ,EAAE;YACf,CAAC,CAAC,IAAI;KACX,CAAC;AACJ,CAAC,CAAC;AA1BW,QAAA,kBAAkB,sBA0B7B;AAEK,MAAM,YAAY,GAAG,CAAC,UAAkB,EAAE,eAAuB,EAAE,EAAE,CAC1E,IAAI,wBAAS,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC;AAD/C,QAAA,YAAY,gBACmC;AAErD,MAAM,QAAQ,GAAG,CACtB,cAAqD,EACrD,UAA6C,EAC7C,EAAE,CAAC,CAAC;IACJ,eAAe,EACb,cAAc,CAAC,eAAe,IAAI,UAAU,CAAC,eAAe;QAC1D,CAAC,CAAC,IAAI,wBAAS,CAAC,UAAU,CAAC,eAAe,CAAC;aACtC,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC;aACrC,QAAQ,EAAE;QACf,CAAC,CAAC,IAAI;IACV,GAAG,EACD,cAAc,CAAC,GAAG,IAAI,UAAU,CAAC,GAAG;QAClC,CAAC,CAAC,IAAI,wBAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;QACpE,CAAC,CAAC,IAAI;CACX,CAAC,CAAC;AAdU,QAAA,QAAQ,YAclB;AAEH;;;;;;GAMG;AACI,MAAM,sBAAsB,GAAG,CACpC,cAAqD,EACrD,UAA6C,EAC9B,EAAE;IACjB,MAAM,IAAI,GAAG,IAAA,gBAAQ,EAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IAElD,IAAI,IAAI,CAAC,eAAe,IAAI,UAAU,CAAC,eAAe,EAAE,CAAC;QACvD,OAAO,IAAI,wBAAS,CAAC,IAAI,CAAC,eAAe,CAAC;aACvC,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC;aAC/B,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,EAAE;aACL,QAAQ,EAAE,CAAC;IAChB,CAAC;IAED,IAAI,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC;QAC/B,OAAO,IAAI,wBAAS,CAAC,IAAI,CAAC,GAAG,CAAC;aAC3B,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;aACnB,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,EAAE;aACL,QAAQ,EAAE,CAAC;IAChB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAvBW,QAAA,sBAAsB,0BAuBjC;AAEK,MAAM,kBAAkB,GAAG,CAChC,gCAAwC,EACxC,EAAE;IACF,IAAI,gCAAgC,GAAG,EAAE,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;AAC3D,CAAC,CAAC;AAPW,QAAA,kBAAkB,sBAO7B;AAEK,MAAM,UAAU,GAAG,CACxB,MAAyB,EACzB,SAA2B,EAC3B,EAAE;IACF,4EAA4E;IAC5E,IAAI,SAAS,KAAK,yBAAS,CAAC,KAAK,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1B,OAAO,CACL,CAAC,CAAC,gCAAgC,GAAG,CAAC,CAAC,gCAAgC,CACxE,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAbW,QAAA,UAAU,cAarB","sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport {\n convertHexToDecimal,\n toHex,\n weiHexToGweiDec,\n} from '@metamask/controller-utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport type {\n BridgeAsset,\n ExchangeRate,\n GenericQuoteRequest,\n L1GasFees,\n QuoteMetadata,\n NonEvmFees,\n} from '../types';\nimport { FeatureId } from '../validators/feature-flags';\nimport type { Quote } from '../validators/quote';\nimport type { QuoteResponseV1 } from '../validators/quote-response-v1';\nimport { TxData } from '../validators/trade';\nimport { isNativeAddress, isNonEvmChainId } from './bridge';\n\nexport const isValidQuoteRequest = (\n partialRequest: Partial<GenericQuoteRequest>,\n requireAmount = true,\n): partialRequest is GenericQuoteRequest => {\n const stringFields = [\n 'srcTokenAddress',\n 'destTokenAddress',\n 'srcChainId',\n 'destChainId',\n 'walletAddress',\n ];\n if (requireAmount) {\n stringFields.push('srcTokenAmount');\n }\n // If bridging between different chain types or different non-EVM chains, require dest wallet address\n // Cases that need destWalletAddress:\n // 1. EVM -> non-EVM\n // 2. non-EVM -> EVM\n // 3. non-EVM -> different non-EVM (e.g., SOL -> BTC)\n // Only same-chain swaps don't need destWalletAddress\n if (\n partialRequest.destChainId &&\n partialRequest.srcChainId &&\n partialRequest.destChainId !== partialRequest.srcChainId && // Different chains\n (isNonEvmChainId(partialRequest.destChainId) ||\n isNonEvmChainId(partialRequest.srcChainId)) // At least one is non-EVM\n ) {\n stringFields.push('destWalletAddress');\n if (!partialRequest.destWalletAddress) {\n return false;\n }\n }\n const numberFields = [];\n // if slippage is defined, require it to be a number\n if (partialRequest.slippage !== undefined) {\n numberFields.push('slippage');\n }\n\n return (\n stringFields.every(\n (field) =>\n field in partialRequest &&\n typeof partialRequest[field as keyof typeof partialRequest] ===\n 'string' &&\n partialRequest[field as keyof typeof partialRequest] !== undefined &&\n partialRequest[field as keyof typeof partialRequest] !== '' &&\n partialRequest[field as keyof typeof partialRequest] !== null,\n ) &&\n numberFields.every(\n (field) =>\n field in partialRequest &&\n typeof partialRequest[field as keyof typeof partialRequest] ===\n 'number' &&\n partialRequest[field as keyof typeof partialRequest] !== undefined &&\n !isNaN(Number(partialRequest[field as keyof typeof partialRequest])) &&\n partialRequest[field as keyof typeof partialRequest] !== null,\n ) &&\n (requireAmount\n ? Boolean((partialRequest.srcTokenAmount ?? '').match(/^[1-9]\\d*$/u))\n : true)\n );\n};\n\nexport const isValidBatchSellQuoteRequest = (\n quoteRequests: Partial<GenericQuoteRequest>[],\n requireAmount = true,\n): quoteRequests is GenericQuoteRequest[] =>\n quoteRequests.every((req) => isValidQuoteRequest(req, requireAmount));\n\n/**\n * Generates a pseudo-unique string that identifies each quote by aggregator, bridge, and steps\n *\n * @param quote - The quote to generate an identifier for\n * @returns A pseudo-unique string that identifies the quote\n */\nexport const getQuoteIdentifier = (quote: QuoteResponseV1['quote']) =>\n `${quote.bridgeId}-${quote.bridges[0]}-${quote.steps.length}`;\n\nconst calcTokenAmount = (value: string | BigNumber, decimals: number) => {\n const divisor = new BigNumber(10).pow(decimals ?? 0);\n return new BigNumber(value).div(divisor);\n};\n\nexport const calcNonEvmTotalNetworkFee = (\n bridgeQuote: QuoteResponseV1 & NonEvmFees,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const { nonEvmFeesInNative } = bridgeQuote;\n // Fees are now stored directly in native units (SOL, BTC) without conversion\n const feeInNative = new BigNumber(nonEvmFeesInNative ?? '0');\n\n return {\n amount: feeInNative.toString(),\n valueInCurrency: exchangeRate\n ? feeInNative.times(exchangeRate).toString()\n : null,\n usd: usdExchangeRate ? feeInNative.times(usdExchangeRate).toString() : null,\n };\n};\n\nexport const calcToAmount = (\n destTokenAmount: string,\n destAsset: BridgeAsset,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const normalizedDestAmount = calcTokenAmount(\n destTokenAmount,\n destAsset.decimals,\n );\n return {\n amount: normalizedDestAmount.toString(),\n valueInCurrency: exchangeRate\n ? normalizedDestAmount.times(exchangeRate).toString()\n : null,\n usd: usdExchangeRate\n ? normalizedDestAmount.times(usdExchangeRate).toString()\n : null,\n };\n};\n\nexport const calcSentAmount = (\n { srcTokenAmount, srcAsset, feeData, intent }: Quote,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n // For intent-based swaps (e.g. CoW Protocol), srcTokenAmount is the total\n // fixed commitment the user makes to the protocol — the protocol fee is\n // already baked in. Adding feeData fees on top would double-count them.\n // For conventional swaps, srcTokenAmount is the net routing amount (fees\n // excluded), so the src-token fees must be added to get the wallet deduction.\n const sentAmount = intent\n ? new BigNumber(srcTokenAmount)\n : Object.values(feeData)\n .filter((fee) => fee?.amount && fee.asset?.assetId === srcAsset.assetId)\n .reduce(\n (acc, { amount }) => acc.plus(amount),\n new BigNumber(srcTokenAmount),\n );\n const normalizedSentAmount = calcTokenAmount(sentAmount, srcAsset.decimals);\n return {\n amount: normalizedSentAmount.toString(),\n valueInCurrency: exchangeRate\n ? normalizedSentAmount.times(exchangeRate).toString()\n : null,\n usd: usdExchangeRate\n ? normalizedSentAmount.times(usdExchangeRate).toString()\n : null,\n };\n};\n\nexport const calcBatchFees = (\n amount: string,\n asset: BridgeAsset,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const normalizedAmount = calcTokenAmount(amount, asset.decimals);\n\n return {\n amount: normalizedAmount.toString(),\n valueInCurrency: exchangeRate\n ? normalizedAmount.times(exchangeRate).toString()\n : null,\n usd: usdExchangeRate\n ? normalizedAmount.times(usdExchangeRate).toString()\n : null,\n asset,\n };\n};\n\nexport const calcRelayerFee = (\n quoteResponse: QuoteResponseV1<TxData, TxData>,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const { quote, trade } = quoteResponse;\n const relayerFeeAmount = new BigNumber(\n convertHexToDecimal(trade.value || '0x0'),\n );\n let relayerFeeInNative = calcTokenAmount(relayerFeeAmount, 18);\n\n // Subtract srcAmount and other fees from trade value if srcAsset is native\n if (isNativeAddress(quote.srcAsset.address)) {\n const sentAmountInNative = calcSentAmount(quote, {\n exchangeRate,\n usdExchangeRate,\n }).amount;\n relayerFeeInNative = relayerFeeInNative.minus(sentAmountInNative);\n }\n\n return {\n amount: relayerFeeInNative,\n valueInCurrency: exchangeRate\n ? relayerFeeInNative.times(exchangeRate)\n : null,\n usd: usdExchangeRate ? relayerFeeInNative.times(usdExchangeRate) : null,\n };\n};\n\nconst calcTotalGasFee = ({\n approvalGasLimit,\n resetApprovalGasLimit,\n tradeGasLimit,\n l1GasFeesInHexWei,\n feePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n}: {\n approvalGasLimit?: number | null;\n resetApprovalGasLimit?: number | null;\n tradeGasLimit?: number | null;\n l1GasFeesInHexWei?: string | null;\n feePerGasInDecGwei?: string;\n nativeToDisplayCurrencyExchangeRate?: string;\n nativeToUsdExchangeRate?: string;\n}) => {\n const totalGasLimitInDec = new BigNumber(tradeGasLimit?.toString() ?? '0')\n .plus(approvalGasLimit?.toString() ?? '0')\n .plus(resetApprovalGasLimit?.toString() ?? '0');\n\n const l1GasFeesInDecGWei = weiHexToGweiDec(toHex(l1GasFeesInHexWei ?? '0'));\n const gasFeesInDecGwei = totalGasLimitInDec\n .times(feePerGasInDecGwei ?? '0')\n .plus(l1GasFeesInDecGWei);\n const gasFeesInDecEth = gasFeesInDecGwei.times(new BigNumber(10).pow(-9));\n\n const gasFeesInDisplayCurrency = nativeToDisplayCurrencyExchangeRate\n ? gasFeesInDecEth.times(nativeToDisplayCurrencyExchangeRate.toString())\n : null;\n const gasFeesInUSD = nativeToUsdExchangeRate\n ? gasFeesInDecEth.times(nativeToUsdExchangeRate.toString())\n : null;\n\n return {\n amount: gasFeesInDecEth.toString(),\n valueInCurrency: gasFeesInDisplayCurrency?.toString() ?? null,\n usd: gasFeesInUSD?.toString() ?? null,\n };\n};\n\nexport const calcEstimatedAndMaxTotalGasFee = ({\n bridgeQuote: { approval, trade, l1GasFeesInHexWei, resetApproval },\n feePerGasInDecGwei,\n maxFeePerGasInDecGwei,\n exchangeRate: nativeToDisplayCurrencyExchangeRate,\n usdExchangeRate: nativeToUsdExchangeRate,\n}: {\n bridgeQuote: QuoteResponseV1<TxData, TxData> & L1GasFees;\n maxFeePerGasInDecGwei?: string;\n feePerGasInDecGwei?: string;\n} & ExchangeRate): QuoteMetadata['gasFee'] => {\n // Estimated gas fees spent after receiving refunds, this is shown to the user\n const {\n amount: amountEffective,\n valueInCurrency: valueInCurrencyEffective,\n usd: usdEffective,\n } = calcTotalGasFee({\n // Fallback to gasLimit if effectiveGas is not available\n approvalGasLimit: approval?.effectiveGas ?? approval?.gasLimit,\n resetApprovalGasLimit:\n resetApproval?.effectiveGas ?? resetApproval?.gasLimit,\n tradeGasLimit: trade?.effectiveGas ?? trade?.gasLimit,\n l1GasFeesInHexWei,\n feePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n });\n\n // Estimated total gas fee, including refunded fees (medium)\n const { amount, valueInCurrency, usd } = calcTotalGasFee({\n approvalGasLimit: approval?.gasLimit,\n resetApprovalGasLimit: resetApproval?.gasLimit,\n tradeGasLimit: trade?.gasLimit,\n l1GasFeesInHexWei,\n feePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n });\n\n // Max gas fee (high), used to disable submission of the transaction\n const {\n amount: amountMax,\n valueInCurrency: valueInCurrencyMax,\n usd: usdMax,\n } = calcTotalGasFee({\n approvalGasLimit: approval?.gasLimit,\n resetApprovalGasLimit: resetApproval?.gasLimit,\n tradeGasLimit: trade?.gasLimit,\n l1GasFeesInHexWei,\n feePerGasInDecGwei: maxFeePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n });\n\n return {\n effective: {\n amount: amountEffective,\n valueInCurrency: valueInCurrencyEffective,\n usd: usdEffective,\n },\n total: {\n amount,\n valueInCurrency,\n usd,\n },\n max: {\n amount: amountMax,\n valueInCurrency: valueInCurrencyMax,\n usd: usdMax,\n },\n };\n};\n\n/**\n * Calculates the total estimated network fees for the bridge transaction\n *\n * @param gasFee - The gas fee for the bridge transaction\n * @param gasFee.total - The fee to display to the user. If not available, this is equal to the gasLimit (total)\n * @param relayerFee - The relayer fee paid to bridge providers\n * @returns The total estimated network fee for the bridge transaction, including the relayer fee paid to bridge providers\n */\nexport const calcTotalEstimatedNetworkFee = (\n { total: gasFeeToDisplay }: ReturnType<typeof calcEstimatedAndMaxTotalGasFee>,\n relayerFee: ReturnType<typeof calcRelayerFee>,\n) => {\n return {\n amount: new BigNumber(gasFeeToDisplay?.amount ?? '0')\n .plus(relayerFee.amount)\n .toString(),\n valueInCurrency: gasFeeToDisplay?.valueInCurrency\n ? new BigNumber(gasFeeToDisplay.valueInCurrency)\n .plus(relayerFee.valueInCurrency ?? '0')\n .toString()\n : null,\n usd: gasFeeToDisplay?.usd\n ? new BigNumber(gasFeeToDisplay.usd)\n .plus(relayerFee.usd ?? '0')\n .toString()\n : null,\n };\n};\n\nexport const calcTotalMaxNetworkFee = (\n gasFee: ReturnType<typeof calcEstimatedAndMaxTotalGasFee>,\n relayerFee: ReturnType<typeof calcRelayerFee>,\n) => {\n return {\n amount: new BigNumber(gasFee.max.amount).plus(relayerFee.amount).toString(),\n valueInCurrency: gasFee.max.valueInCurrency\n ? new BigNumber(gasFee.max.valueInCurrency)\n .plus(relayerFee.valueInCurrency ?? '0')\n .toString()\n : null,\n usd: gasFee.max.usd\n ? new BigNumber(gasFee.max.usd).plus(relayerFee.usd ?? '0').toString()\n : null,\n };\n};\n\n// Gas is included for some swap quotes and this is the value displayed in the client\nexport const calcIncludedTxFees = (\n { gasIncluded, gasIncluded7702, srcAsset, feeData: { txFee } }: Quote,\n srcTokenExchangeRate: ExchangeRate,\n destTokenExchangeRate: ExchangeRate,\n) => {\n if (!txFee || !(gasIncluded || gasIncluded7702)) {\n return null;\n }\n // Use exchange rate of the token that is being used to pay for the transaction\n const { exchangeRate, usdExchangeRate } =\n txFee.asset.assetId === srcAsset.assetId\n ? srcTokenExchangeRate\n : destTokenExchangeRate;\n const normalizedTxFeeAmount = calcTokenAmount(\n txFee.amount,\n txFee.asset.decimals,\n );\n\n return {\n amount: normalizedTxFeeAmount.toString(),\n valueInCurrency: exchangeRate\n ? normalizedTxFeeAmount.times(exchangeRate).toString()\n : null,\n usd: usdExchangeRate\n ? normalizedTxFeeAmount.times(usdExchangeRate).toString()\n : null,\n };\n};\n\nexport const calcAdjustedReturn = (\n toTokenAmount: ReturnType<typeof calcToAmount>,\n totalEstimatedNetworkFee: ReturnType<typeof calcTotalEstimatedNetworkFee>,\n { feeData: { txFee }, destAsset: { assetId: destAssetId } }: Quote,\n) => {\n // If gas is included and is taken from the dest token, don't subtract network fee from return\n if (txFee?.asset?.assetId === destAssetId) {\n return {\n valueInCurrency: toTokenAmount.valueInCurrency,\n usd: toTokenAmount.usd,\n };\n }\n return {\n valueInCurrency:\n toTokenAmount.valueInCurrency && totalEstimatedNetworkFee.valueInCurrency\n ? new BigNumber(toTokenAmount.valueInCurrency)\n .minus(totalEstimatedNetworkFee.valueInCurrency)\n .toString()\n : null,\n usd:\n toTokenAmount.usd && totalEstimatedNetworkFee.usd\n ? new BigNumber(toTokenAmount.usd)\n .minus(totalEstimatedNetworkFee.usd)\n .toString()\n : null,\n };\n};\n\nexport const calcSwapRate = (sentAmount: string, destTokenAmount: string) =>\n new BigNumber(destTokenAmount).div(sentAmount).toString();\n\nexport const calcCost = (\n adjustedReturn: ReturnType<typeof calcAdjustedReturn>,\n sentAmount: ReturnType<typeof calcSentAmount>,\n) => ({\n valueInCurrency:\n adjustedReturn.valueInCurrency && sentAmount.valueInCurrency\n ? new BigNumber(sentAmount.valueInCurrency)\n .minus(adjustedReturn.valueInCurrency)\n .toString()\n : null,\n usd:\n adjustedReturn.usd && sentAmount.usd\n ? new BigNumber(sentAmount.usd).minus(adjustedReturn.usd).toString()\n : null,\n});\n\n/**\n * Calculates the slippage absolute value percentage based on the adjusted return and sent amount.\n *\n * @param adjustedReturn - Adjusted return value\n * @param sentAmount - Sent amount value\n * @returns the slippage in percentage\n */\nexport const calcSlippagePercentage = (\n adjustedReturn: ReturnType<typeof calcAdjustedReturn>,\n sentAmount: ReturnType<typeof calcSentAmount>,\n): string | null => {\n const cost = calcCost(adjustedReturn, sentAmount);\n\n if (cost.valueInCurrency && sentAmount.valueInCurrency) {\n return new BigNumber(cost.valueInCurrency)\n .div(sentAmount.valueInCurrency)\n .times(100)\n .abs()\n .toString();\n }\n\n if (cost.usd && sentAmount.usd) {\n return new BigNumber(cost.usd)\n .div(sentAmount.usd)\n .times(100)\n .abs()\n .toString();\n }\n\n return null;\n};\n\nexport const formatEtaInMinutes = (\n estimatedProcessingTimeInSeconds: number,\n) => {\n if (estimatedProcessingTimeInSeconds < 60) {\n return `< 1`;\n }\n return (estimatedProcessingTimeInSeconds / 60).toFixed();\n};\n\nexport const sortQuotes = (\n quotes: QuoteResponseV1[],\n featureId: FeatureId | null,\n) => {\n // Sort perps quotes by increasing estimated processing time (fastest first)\n if (featureId === FeatureId.PERPS) {\n return quotes.sort((a, b) => {\n return (\n a.estimatedProcessingTimeInSeconds - b.estimatedProcessingTimeInSeconds\n );\n });\n }\n return quotes;\n};\n"]}
|
package/dist/utils/quote.d.cts
DELETED
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import { BigNumber } from "bignumber.js";
|
|
2
|
-
import type { BridgeAsset, ExchangeRate, GenericQuoteRequest, L1GasFees, QuoteMetadata, NonEvmFees } from "../types.cjs";
|
|
3
|
-
import { FeatureId } from "../validators/feature-flags.cjs";
|
|
4
|
-
import type { Quote } from "../validators/quote.cjs";
|
|
5
|
-
import type { QuoteResponseV1 } from "../validators/quote-response-v1.cjs";
|
|
6
|
-
import { TxData } from "../validators/trade.cjs";
|
|
7
|
-
export declare const isValidQuoteRequest: (partialRequest: Partial<GenericQuoteRequest>, requireAmount?: boolean) => partialRequest is GenericQuoteRequest;
|
|
8
|
-
export declare const isValidBatchSellQuoteRequest: (quoteRequests: Partial<GenericQuoteRequest>[], requireAmount?: boolean) => quoteRequests is GenericQuoteRequest[];
|
|
9
|
-
/**
|
|
10
|
-
* Generates a pseudo-unique string that identifies each quote by aggregator, bridge, and steps
|
|
11
|
-
*
|
|
12
|
-
* @param quote - The quote to generate an identifier for
|
|
13
|
-
* @returns A pseudo-unique string that identifies the quote
|
|
14
|
-
*/
|
|
15
|
-
export declare const getQuoteIdentifier: (quote: QuoteResponseV1['quote']) => string;
|
|
16
|
-
export declare const calcNonEvmTotalNetworkFee: (bridgeQuote: QuoteResponseV1 & NonEvmFees, { exchangeRate, usdExchangeRate }: ExchangeRate) => {
|
|
17
|
-
amount: string;
|
|
18
|
-
valueInCurrency: string | null;
|
|
19
|
-
usd: string | null;
|
|
20
|
-
};
|
|
21
|
-
export declare const calcToAmount: (destTokenAmount: string, destAsset: BridgeAsset, { exchangeRate, usdExchangeRate }: ExchangeRate) => {
|
|
22
|
-
amount: string;
|
|
23
|
-
valueInCurrency: string | null;
|
|
24
|
-
usd: string | null;
|
|
25
|
-
};
|
|
26
|
-
export declare const calcSentAmount: ({ srcTokenAmount, srcAsset, feeData, intent }: Quote, { exchangeRate, usdExchangeRate }: ExchangeRate) => {
|
|
27
|
-
amount: string;
|
|
28
|
-
valueInCurrency: string | null;
|
|
29
|
-
usd: string | null;
|
|
30
|
-
};
|
|
31
|
-
export declare const calcBatchFees: (amount: string, asset: BridgeAsset, { exchangeRate, usdExchangeRate }: ExchangeRate) => {
|
|
32
|
-
amount: string;
|
|
33
|
-
valueInCurrency: string | null;
|
|
34
|
-
usd: string | null;
|
|
35
|
-
asset: {
|
|
36
|
-
symbol: string;
|
|
37
|
-
chainId: number;
|
|
38
|
-
address: string;
|
|
39
|
-
assetId: `${string}:${string}/${string}:${string}`;
|
|
40
|
-
name: string;
|
|
41
|
-
decimals: number;
|
|
42
|
-
icon?: string | null | undefined;
|
|
43
|
-
iconUrl?: string | null | undefined;
|
|
44
|
-
};
|
|
45
|
-
};
|
|
46
|
-
export declare const calcRelayerFee: (quoteResponse: QuoteResponseV1<TxData, TxData>, { exchangeRate, usdExchangeRate }: ExchangeRate) => {
|
|
47
|
-
amount: BigNumber;
|
|
48
|
-
valueInCurrency: BigNumber | null;
|
|
49
|
-
usd: BigNumber | null;
|
|
50
|
-
};
|
|
51
|
-
export declare const calcEstimatedAndMaxTotalGasFee: ({ bridgeQuote: { approval, trade, l1GasFeesInHexWei, resetApproval }, feePerGasInDecGwei, maxFeePerGasInDecGwei, exchangeRate: nativeToDisplayCurrencyExchangeRate, usdExchangeRate: nativeToUsdExchangeRate, }: {
|
|
52
|
-
bridgeQuote: QuoteResponseV1<TxData, TxData> & L1GasFees;
|
|
53
|
-
maxFeePerGasInDecGwei?: string | undefined;
|
|
54
|
-
feePerGasInDecGwei?: string | undefined;
|
|
55
|
-
} & ExchangeRate) => QuoteMetadata['gasFee'];
|
|
56
|
-
/**
|
|
57
|
-
* Calculates the total estimated network fees for the bridge transaction
|
|
58
|
-
*
|
|
59
|
-
* @param gasFee - The gas fee for the bridge transaction
|
|
60
|
-
* @param gasFee.total - The fee to display to the user. If not available, this is equal to the gasLimit (total)
|
|
61
|
-
* @param relayerFee - The relayer fee paid to bridge providers
|
|
62
|
-
* @returns The total estimated network fee for the bridge transaction, including the relayer fee paid to bridge providers
|
|
63
|
-
*/
|
|
64
|
-
export declare const calcTotalEstimatedNetworkFee: ({ total: gasFeeToDisplay }: ReturnType<typeof calcEstimatedAndMaxTotalGasFee>, relayerFee: ReturnType<typeof calcRelayerFee>) => {
|
|
65
|
-
amount: string;
|
|
66
|
-
valueInCurrency: string | null;
|
|
67
|
-
usd: string | null;
|
|
68
|
-
};
|
|
69
|
-
export declare const calcTotalMaxNetworkFee: (gasFee: ReturnType<typeof calcEstimatedAndMaxTotalGasFee>, relayerFee: ReturnType<typeof calcRelayerFee>) => {
|
|
70
|
-
amount: string;
|
|
71
|
-
valueInCurrency: string | null;
|
|
72
|
-
usd: string | null;
|
|
73
|
-
};
|
|
74
|
-
export declare const calcIncludedTxFees: ({ gasIncluded, gasIncluded7702, srcAsset, feeData: { txFee } }: Quote, srcTokenExchangeRate: ExchangeRate, destTokenExchangeRate: ExchangeRate) => {
|
|
75
|
-
amount: string;
|
|
76
|
-
valueInCurrency: string | null;
|
|
77
|
-
usd: string | null;
|
|
78
|
-
} | null;
|
|
79
|
-
export declare const calcAdjustedReturn: (toTokenAmount: ReturnType<typeof calcToAmount>, totalEstimatedNetworkFee: ReturnType<typeof calcTotalEstimatedNetworkFee>, { feeData: { txFee }, destAsset: { assetId: destAssetId } }: Quote) => {
|
|
80
|
-
valueInCurrency: string | null;
|
|
81
|
-
usd: string | null;
|
|
82
|
-
};
|
|
83
|
-
export declare const calcSwapRate: (sentAmount: string, destTokenAmount: string) => string;
|
|
84
|
-
export declare const calcCost: (adjustedReturn: ReturnType<typeof calcAdjustedReturn>, sentAmount: ReturnType<typeof calcSentAmount>) => {
|
|
85
|
-
valueInCurrency: string | null;
|
|
86
|
-
usd: string | null;
|
|
87
|
-
};
|
|
88
|
-
/**
|
|
89
|
-
* Calculates the slippage absolute value percentage based on the adjusted return and sent amount.
|
|
90
|
-
*
|
|
91
|
-
* @param adjustedReturn - Adjusted return value
|
|
92
|
-
* @param sentAmount - Sent amount value
|
|
93
|
-
* @returns the slippage in percentage
|
|
94
|
-
*/
|
|
95
|
-
export declare const calcSlippagePercentage: (adjustedReturn: ReturnType<typeof calcAdjustedReturn>, sentAmount: ReturnType<typeof calcSentAmount>) => string | null;
|
|
96
|
-
export declare const formatEtaInMinutes: (estimatedProcessingTimeInSeconds: number) => string;
|
|
97
|
-
export declare const sortQuotes: (quotes: QuoteResponseV1[], featureId: FeatureId | null) => QuoteResponseV1[];
|
|
98
|
-
//# sourceMappingURL=quote.d.cts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"quote.d.cts","sourceRoot":"","sources":["../../src/utils/quote.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,qBAAqB;AAEzC,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,SAAS,EACT,aAAa,EACb,UAAU,EACX,qBAAiB;AAClB,OAAO,EAAE,SAAS,EAAE,wCAAoC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,gCAA4B;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,4CAAwC;AACvE,OAAO,EAAE,MAAM,EAAE,gCAA4B;AAG7C,eAAO,MAAM,mBAAmB,mBACd,QAAQ,mBAAmB,CAAC,mEA4D7C,CAAC;AAEF,eAAO,MAAM,4BAA4B,kBACxB,QAAQ,mBAAmB,CAAC,EAAE,oEAGwB,CAAC;AAExE;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,UAAW,eAAe,CAAC,OAAO,CAAC,WACH,CAAC;AAOhE,eAAO,MAAM,yBAAyB,gBACvB,eAAe,GAAG,UAAU,qCACN,YAAY;;;;CAahD,CAAC;AAEF,eAAO,MAAM,YAAY,oBACN,MAAM,aACZ,WAAW,qCACa,YAAY;;;;CAehD,CAAC;AAEF,eAAO,MAAM,cAAc,kDACsB,KAAK,qCACjB,YAAY;;;;CAyBhD,CAAC;AAEF,eAAO,MAAM,aAAa,WAChB,MAAM,SACP,WAAW,qCACiB,YAAY;;;;;;;;;;;;;;CAchD,CAAC;AAEF,eAAO,MAAM,cAAc,kBACV,gBAAgB,MAAM,EAAE,MAAM,CAAC,qCACX,YAAY;;;;CAwBhD,CAAC;AA2CF,eAAO,MAAM,8BAA8B;iBAO5B,gBAAgB,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS;;;qBAGvC,aAAa,CAAC,QAAQ,CA6DxC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,+BACX,WAAW,qCAAqC,CAAC,cACjE,WAAW,qBAAqB,CAAC;;;;CAiB9C,CAAC;AAEF,eAAO,MAAM,sBAAsB,WACzB,WAAW,qCAAqC,CAAC,cAC7C,WAAW,qBAAqB,CAAC;;;;CAa9C,CAAC;AAGF,eAAO,MAAM,kBAAkB,mEACmC,KAAK,wBAC/C,YAAY,yBACX,YAAY;;;;QAwBpC,CAAC;AAEF,eAAO,MAAM,kBAAkB,kBACd,WAAW,mBAAmB,CAAC,4BACpB,WAAW,mCAAmC,CAAC,+DACZ,KAAK;;;CAuBnE,CAAC;AAEF,eAAO,MAAM,YAAY,eAAgB,MAAM,mBAAmB,MAAM,WACb,CAAC;AAE5D,eAAO,MAAM,QAAQ,mBACH,WAAW,yBAAyB,CAAC,cACzC,WAAW,qBAAqB,CAAC;;;CAY7C,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,mBACjB,WAAW,yBAAyB,CAAC,cACzC,WAAW,qBAAqB,CAAC,KAC5C,MAAM,GAAG,IAoBX,CAAC;AAEF,eAAO,MAAM,kBAAkB,qCACK,MAAM,WAMzC,CAAC;AAEF,eAAO,MAAM,UAAU,WACb,eAAe,EAAE,aACd,SAAS,GAAG,IAAI,sBAW5B,CAAC"}
|
package/dist/utils/quote.d.mts
DELETED
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import { BigNumber } from "bignumber.js";
|
|
2
|
-
import type { BridgeAsset, ExchangeRate, GenericQuoteRequest, L1GasFees, QuoteMetadata, NonEvmFees } from "../types.mjs";
|
|
3
|
-
import { FeatureId } from "../validators/feature-flags.mjs";
|
|
4
|
-
import type { Quote } from "../validators/quote.mjs";
|
|
5
|
-
import type { QuoteResponseV1 } from "../validators/quote-response-v1.mjs";
|
|
6
|
-
import { TxData } from "../validators/trade.mjs";
|
|
7
|
-
export declare const isValidQuoteRequest: (partialRequest: Partial<GenericQuoteRequest>, requireAmount?: boolean) => partialRequest is GenericQuoteRequest;
|
|
8
|
-
export declare const isValidBatchSellQuoteRequest: (quoteRequests: Partial<GenericQuoteRequest>[], requireAmount?: boolean) => quoteRequests is GenericQuoteRequest[];
|
|
9
|
-
/**
|
|
10
|
-
* Generates a pseudo-unique string that identifies each quote by aggregator, bridge, and steps
|
|
11
|
-
*
|
|
12
|
-
* @param quote - The quote to generate an identifier for
|
|
13
|
-
* @returns A pseudo-unique string that identifies the quote
|
|
14
|
-
*/
|
|
15
|
-
export declare const getQuoteIdentifier: (quote: QuoteResponseV1['quote']) => string;
|
|
16
|
-
export declare const calcNonEvmTotalNetworkFee: (bridgeQuote: QuoteResponseV1 & NonEvmFees, { exchangeRate, usdExchangeRate }: ExchangeRate) => {
|
|
17
|
-
amount: string;
|
|
18
|
-
valueInCurrency: string | null;
|
|
19
|
-
usd: string | null;
|
|
20
|
-
};
|
|
21
|
-
export declare const calcToAmount: (destTokenAmount: string, destAsset: BridgeAsset, { exchangeRate, usdExchangeRate }: ExchangeRate) => {
|
|
22
|
-
amount: string;
|
|
23
|
-
valueInCurrency: string | null;
|
|
24
|
-
usd: string | null;
|
|
25
|
-
};
|
|
26
|
-
export declare const calcSentAmount: ({ srcTokenAmount, srcAsset, feeData, intent }: Quote, { exchangeRate, usdExchangeRate }: ExchangeRate) => {
|
|
27
|
-
amount: string;
|
|
28
|
-
valueInCurrency: string | null;
|
|
29
|
-
usd: string | null;
|
|
30
|
-
};
|
|
31
|
-
export declare const calcBatchFees: (amount: string, asset: BridgeAsset, { exchangeRate, usdExchangeRate }: ExchangeRate) => {
|
|
32
|
-
amount: string;
|
|
33
|
-
valueInCurrency: string | null;
|
|
34
|
-
usd: string | null;
|
|
35
|
-
asset: {
|
|
36
|
-
symbol: string;
|
|
37
|
-
chainId: number;
|
|
38
|
-
address: string;
|
|
39
|
-
assetId: `${string}:${string}/${string}:${string}`;
|
|
40
|
-
name: string;
|
|
41
|
-
decimals: number;
|
|
42
|
-
icon?: string | null | undefined;
|
|
43
|
-
iconUrl?: string | null | undefined;
|
|
44
|
-
};
|
|
45
|
-
};
|
|
46
|
-
export declare const calcRelayerFee: (quoteResponse: QuoteResponseV1<TxData, TxData>, { exchangeRate, usdExchangeRate }: ExchangeRate) => {
|
|
47
|
-
amount: BigNumber;
|
|
48
|
-
valueInCurrency: BigNumber | null;
|
|
49
|
-
usd: BigNumber | null;
|
|
50
|
-
};
|
|
51
|
-
export declare const calcEstimatedAndMaxTotalGasFee: ({ bridgeQuote: { approval, trade, l1GasFeesInHexWei, resetApproval }, feePerGasInDecGwei, maxFeePerGasInDecGwei, exchangeRate: nativeToDisplayCurrencyExchangeRate, usdExchangeRate: nativeToUsdExchangeRate, }: {
|
|
52
|
-
bridgeQuote: QuoteResponseV1<TxData, TxData> & L1GasFees;
|
|
53
|
-
maxFeePerGasInDecGwei?: string | undefined;
|
|
54
|
-
feePerGasInDecGwei?: string | undefined;
|
|
55
|
-
} & ExchangeRate) => QuoteMetadata['gasFee'];
|
|
56
|
-
/**
|
|
57
|
-
* Calculates the total estimated network fees for the bridge transaction
|
|
58
|
-
*
|
|
59
|
-
* @param gasFee - The gas fee for the bridge transaction
|
|
60
|
-
* @param gasFee.total - The fee to display to the user. If not available, this is equal to the gasLimit (total)
|
|
61
|
-
* @param relayerFee - The relayer fee paid to bridge providers
|
|
62
|
-
* @returns The total estimated network fee for the bridge transaction, including the relayer fee paid to bridge providers
|
|
63
|
-
*/
|
|
64
|
-
export declare const calcTotalEstimatedNetworkFee: ({ total: gasFeeToDisplay }: ReturnType<typeof calcEstimatedAndMaxTotalGasFee>, relayerFee: ReturnType<typeof calcRelayerFee>) => {
|
|
65
|
-
amount: string;
|
|
66
|
-
valueInCurrency: string | null;
|
|
67
|
-
usd: string | null;
|
|
68
|
-
};
|
|
69
|
-
export declare const calcTotalMaxNetworkFee: (gasFee: ReturnType<typeof calcEstimatedAndMaxTotalGasFee>, relayerFee: ReturnType<typeof calcRelayerFee>) => {
|
|
70
|
-
amount: string;
|
|
71
|
-
valueInCurrency: string | null;
|
|
72
|
-
usd: string | null;
|
|
73
|
-
};
|
|
74
|
-
export declare const calcIncludedTxFees: ({ gasIncluded, gasIncluded7702, srcAsset, feeData: { txFee } }: Quote, srcTokenExchangeRate: ExchangeRate, destTokenExchangeRate: ExchangeRate) => {
|
|
75
|
-
amount: string;
|
|
76
|
-
valueInCurrency: string | null;
|
|
77
|
-
usd: string | null;
|
|
78
|
-
} | null;
|
|
79
|
-
export declare const calcAdjustedReturn: (toTokenAmount: ReturnType<typeof calcToAmount>, totalEstimatedNetworkFee: ReturnType<typeof calcTotalEstimatedNetworkFee>, { feeData: { txFee }, destAsset: { assetId: destAssetId } }: Quote) => {
|
|
80
|
-
valueInCurrency: string | null;
|
|
81
|
-
usd: string | null;
|
|
82
|
-
};
|
|
83
|
-
export declare const calcSwapRate: (sentAmount: string, destTokenAmount: string) => string;
|
|
84
|
-
export declare const calcCost: (adjustedReturn: ReturnType<typeof calcAdjustedReturn>, sentAmount: ReturnType<typeof calcSentAmount>) => {
|
|
85
|
-
valueInCurrency: string | null;
|
|
86
|
-
usd: string | null;
|
|
87
|
-
};
|
|
88
|
-
/**
|
|
89
|
-
* Calculates the slippage absolute value percentage based on the adjusted return and sent amount.
|
|
90
|
-
*
|
|
91
|
-
* @param adjustedReturn - Adjusted return value
|
|
92
|
-
* @param sentAmount - Sent amount value
|
|
93
|
-
* @returns the slippage in percentage
|
|
94
|
-
*/
|
|
95
|
-
export declare const calcSlippagePercentage: (adjustedReturn: ReturnType<typeof calcAdjustedReturn>, sentAmount: ReturnType<typeof calcSentAmount>) => string | null;
|
|
96
|
-
export declare const formatEtaInMinutes: (estimatedProcessingTimeInSeconds: number) => string;
|
|
97
|
-
export declare const sortQuotes: (quotes: QuoteResponseV1[], featureId: FeatureId | null) => QuoteResponseV1[];
|
|
98
|
-
//# sourceMappingURL=quote.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"quote.d.mts","sourceRoot":"","sources":["../../src/utils/quote.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,qBAAqB;AAEzC,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,SAAS,EACT,aAAa,EACb,UAAU,EACX,qBAAiB;AAClB,OAAO,EAAE,SAAS,EAAE,wCAAoC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,gCAA4B;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,4CAAwC;AACvE,OAAO,EAAE,MAAM,EAAE,gCAA4B;AAG7C,eAAO,MAAM,mBAAmB,mBACd,QAAQ,mBAAmB,CAAC,mEA4D7C,CAAC;AAEF,eAAO,MAAM,4BAA4B,kBACxB,QAAQ,mBAAmB,CAAC,EAAE,oEAGwB,CAAC;AAExE;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,UAAW,eAAe,CAAC,OAAO,CAAC,WACH,CAAC;AAOhE,eAAO,MAAM,yBAAyB,gBACvB,eAAe,GAAG,UAAU,qCACN,YAAY;;;;CAahD,CAAC;AAEF,eAAO,MAAM,YAAY,oBACN,MAAM,aACZ,WAAW,qCACa,YAAY;;;;CAehD,CAAC;AAEF,eAAO,MAAM,cAAc,kDACsB,KAAK,qCACjB,YAAY;;;;CAyBhD,CAAC;AAEF,eAAO,MAAM,aAAa,WAChB,MAAM,SACP,WAAW,qCACiB,YAAY;;;;;;;;;;;;;;CAchD,CAAC;AAEF,eAAO,MAAM,cAAc,kBACV,gBAAgB,MAAM,EAAE,MAAM,CAAC,qCACX,YAAY;;;;CAwBhD,CAAC;AA2CF,eAAO,MAAM,8BAA8B;iBAO5B,gBAAgB,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS;;;qBAGvC,aAAa,CAAC,QAAQ,CA6DxC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,+BACX,WAAW,qCAAqC,CAAC,cACjE,WAAW,qBAAqB,CAAC;;;;CAiB9C,CAAC;AAEF,eAAO,MAAM,sBAAsB,WACzB,WAAW,qCAAqC,CAAC,cAC7C,WAAW,qBAAqB,CAAC;;;;CAa9C,CAAC;AAGF,eAAO,MAAM,kBAAkB,mEACmC,KAAK,wBAC/C,YAAY,yBACX,YAAY;;;;QAwBpC,CAAC;AAEF,eAAO,MAAM,kBAAkB,kBACd,WAAW,mBAAmB,CAAC,4BACpB,WAAW,mCAAmC,CAAC,+DACZ,KAAK;;;CAuBnE,CAAC;AAEF,eAAO,MAAM,YAAY,eAAgB,MAAM,mBAAmB,MAAM,WACb,CAAC;AAE5D,eAAO,MAAM,QAAQ,mBACH,WAAW,yBAAyB,CAAC,cACzC,WAAW,qBAAqB,CAAC;;;CAY7C,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,mBACjB,WAAW,yBAAyB,CAAC,cACzC,WAAW,qBAAqB,CAAC,KAC5C,MAAM,GAAG,IAoBX,CAAC;AAEF,eAAO,MAAM,kBAAkB,qCACK,MAAM,WAMzC,CAAC;AAEF,eAAO,MAAM,UAAU,WACb,eAAe,EAAE,aACd,SAAS,GAAG,IAAI,sBAW5B,CAAC"}
|