@metamask-previews/bridge-controller 79.1.0-preview-823dcff → 79.2.0-preview-c449b8da8
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 +12 -1
- package/dist/coercers/quote-response-v1-to-v2.cjs +9 -10
- package/dist/coercers/quote-response-v1-to-v2.cjs.map +1 -1
- package/dist/coercers/quote-response-v1-to-v2.mjs +9 -10
- package/dist/coercers/quote-response-v1-to-v2.mjs.map +1 -1
- package/dist/index.cjs +5 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +1 -0
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +1 -0
- package/dist/index.mjs.map +1 -1
- package/dist/utils/assets.cjs +14 -1
- package/dist/utils/assets.cjs.map +1 -1
- package/dist/utils/assets.d.cts +1 -0
- package/dist/utils/assets.d.cts.map +1 -1
- package/dist/utils/assets.d.mts +1 -0
- package/dist/utils/assets.d.mts.map +1 -1
- package/dist/utils/assets.mjs +12 -0
- package/dist/utils/assets.mjs.map +1 -1
- package/dist/utils/number-formatters.cjs +2 -1
- package/dist/utils/number-formatters.cjs.map +1 -1
- package/dist/utils/number-formatters.d.cts.map +1 -1
- package/dist/utils/number-formatters.d.mts.map +1 -1
- package/dist/utils/number-formatters.mjs +2 -1
- package/dist/utils/number-formatters.mjs.map +1 -1
- package/dist/utils/quote-metadata/calculators.cjs +4 -4
- package/dist/utils/quote-metadata/calculators.cjs.map +1 -1
- package/dist/utils/quote-metadata/calculators.d.cts.map +1 -1
- package/dist/utils/quote-metadata/calculators.d.mts.map +1 -1
- package/dist/utils/quote-metadata/calculators.mjs +4 -4
- package/dist/utils/quote-metadata/calculators.mjs.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [79.2.0]
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Export `assetIdsMatch` util to compare assetIds. EVM assetIds are case insensitive ([#9831](https://github.com/MetaMask/core/pull/9831))
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- Filter fees by `assetId` when coercing V1 quotes to V2 ([#9831](https://github.com/MetaMask/core/pull/9831))
|
|
19
|
+
|
|
10
20
|
## [79.1.0]
|
|
11
21
|
|
|
12
22
|
### Added
|
|
@@ -1902,7 +1912,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
1902
1912
|
|
|
1903
1913
|
- Initial release ([#5317](https://github.com/MetaMask/core/pull/5317))
|
|
1904
1914
|
|
|
1905
|
-
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/bridge-controller@79.
|
|
1915
|
+
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/bridge-controller@79.2.0...HEAD
|
|
1916
|
+
[79.2.0]: https://github.com/MetaMask/core/compare/@metamask/bridge-controller@79.1.0...@metamask/bridge-controller@79.2.0
|
|
1906
1917
|
[79.1.0]: https://github.com/MetaMask/core/compare/@metamask/bridge-controller@79.0.1...@metamask/bridge-controller@79.1.0
|
|
1907
1918
|
[79.0.1]: https://github.com/MetaMask/core/compare/@metamask/bridge-controller@79.0.0...@metamask/bridge-controller@79.0.1
|
|
1908
1919
|
[79.0.0]: https://github.com/MetaMask/core/compare/@metamask/bridge-controller@78.1.0...@metamask/bridge-controller@79.0.0
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.toQuoteResponseV2 = exports.toBridgeAssetV2 = void 0;
|
|
4
4
|
const superstruct_1 = require("@metamask/superstruct");
|
|
5
5
|
const utils_1 = require("@metamask/utils");
|
|
6
|
-
const
|
|
6
|
+
const assets_js_1 = require("../utils/assets.cjs");
|
|
7
7
|
const caip_formatters_js_1 = require("../utils/caip-formatters.cjs");
|
|
8
8
|
const number_formatters_js_1 = require("../utils/number-formatters.cjs");
|
|
9
9
|
const bridge_asset_js_1 = require("../validators/bridge-asset.cjs");
|
|
@@ -40,17 +40,16 @@ const StepSchemaV2FromV1 = (0, superstruct_1.coerce)(step_js_1.StepSchemaV2, ste
|
|
|
40
40
|
const toStepV2 = (step) => (0, superstruct_1.create)(step, StepSchemaV2FromV1);
|
|
41
41
|
const QuoteV2FromV1 = (0, superstruct_1.coerce)(quote_js_1.QuoteSchemaV2, quote_js_1.QuoteSchema, (value) => {
|
|
42
42
|
const { srcTokenAmount, destTokenAmount, minDestTokenAmount, srcAsset, destAsset, srcChainId, destChainId, walletAddress, destWalletAddress, priceData, feeData, bridgeId, bridges, steps, intent, ...restQuote } = value;
|
|
43
|
+
const srcAssetV2 = (0, exports.toBridgeAssetV2)(srcAsset);
|
|
43
44
|
return {
|
|
44
45
|
src: {
|
|
45
|
-
amount:
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
feeData[quote_js_1.FeeType.TX_FEE],
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
.toFixed(),
|
|
53
|
-
asset: (0, exports.toBridgeAssetV2)(srcAsset),
|
|
46
|
+
amount: (0, number_formatters_js_1.sumAmounts)([
|
|
47
|
+
{ amount: srcTokenAmount, asset: srcAssetV2 },
|
|
48
|
+
...(intent
|
|
49
|
+
? []
|
|
50
|
+
: [feeData[quote_js_1.FeeType.TX_FEE], feeData[quote_js_1.FeeType.METABRIDGE]].filter((fee) => (0, assets_js_1.assetIdsMatch)(fee?.asset?.assetId, srcAssetV2.assetId))),
|
|
51
|
+
])?.amount,
|
|
52
|
+
asset: srcAssetV2,
|
|
54
53
|
...(walletAddress && { walletAddress }),
|
|
55
54
|
},
|
|
56
55
|
dest: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quote-response-v1-to-v2.cjs","sourceRoot":"","sources":["../../src/coercers/quote-response-v1-to-v2.ts"],"names":[],"mappings":"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","sourcesContent":["import { create, coerce, Infer, is, intersection } from '@metamask/superstruct';\nimport { parseCaipAssetType } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport { formatAddressToAssetId } from '../utils/caip-formatters.js';\nimport { sumAmounts } from '../utils/number-formatters.js';\nimport {\n BridgeAssetSchema,\n BridgeAssetV2Schema,\n MinimalAssetSchema,\n} from '../validators/bridge-asset.js';\nimport { QuoteResponseSchemaV1 } from '../validators/quote-response-v1.js';\nimport type { QuoteResponseV1 } from '../validators/quote-response-v1.js';\nimport {\n QuoteResponseSchemaV2,\n validateQuoteResponse,\n} from '../validators/quote-response.js';\nimport type { QuoteResponse } from '../validators/quote-response.js';\nimport { QuoteSchemaV2, FeeType, QuoteSchema } from '../validators/quote.js';\nimport { StepSchemaV2, StepSchema } from '../validators/step.js';\n\nconst BridgeAssetV2FromV1 = coerce(\n BridgeAssetV2Schema,\n intersection([BridgeAssetSchema, MinimalAssetSchema]),\n (value) => {\n const { chainId, address, iconUrl, icon, assetId, ...rest } = value;\n\n const resolvedIconUrl = iconUrl ?? icon;\n\n return {\n assetId:\n assetId ??\n /* istanbul ignore next */ formatAddressToAssetId(address, chainId),\n ...(resolvedIconUrl && { iconUrl: resolvedIconUrl }),\n ...rest,\n };\n },\n);\n\nexport const toBridgeAssetV2 = (\n data: unknown,\n): Infer<typeof BridgeAssetV2Schema> => {\n return create(data, BridgeAssetV2FromV1);\n};\n\nconst StepSchemaV2FromV1 = coerce(StepSchemaV2, StepSchema, (value) => {\n const { srcAsset, destAsset, action } = value;\n return {\n action,\n src: {\n asset: toBridgeAssetV2(srcAsset),\n },\n dest: {\n asset: toBridgeAssetV2(destAsset),\n },\n };\n});\nconst toStepV2 = (step: Infer<typeof StepSchema>): Infer<typeof StepSchemaV2> =>\n create(step, StepSchemaV2FromV1);\n\nconst QuoteV2FromV1 = coerce(QuoteSchemaV2, QuoteSchema, (value) => {\n const {\n srcTokenAmount,\n destTokenAmount,\n minDestTokenAmount,\n srcAsset,\n destAsset,\n srcChainId,\n destChainId,\n walletAddress,\n destWalletAddress,\n priceData,\n feeData,\n bridgeId,\n bridges,\n steps,\n intent,\n ...restQuote\n } = value;\n\n return {\n src: {\n amount: new BigNumber(srcTokenAmount)\n .plus(\n intent\n ? 0\n : (sumAmounts([\n feeData[FeeType.TX_FEE],\n feeData[FeeType.METABRIDGE],\n ])?.amount ?? 0),\n )\n .toFixed(),\n asset: toBridgeAssetV2(srcAsset),\n ...(walletAddress && { walletAddress }),\n },\n dest: {\n amount: destTokenAmount,\n asset: toBridgeAssetV2(destAsset),\n ...(destWalletAddress && { walletAddress: destWalletAddress }),\n minAmount: minDestTokenAmount,\n },\n priceData: {\n ...(priceData?.priceImpact && {\n priceImpact: {\n amount: priceData.priceImpact,\n },\n }),\n },\n feeData: {\n [FeeType.METABRIDGE]: [\n {\n ...feeData[FeeType.METABRIDGE],\n asset: toBridgeAssetV2(feeData[FeeType.METABRIDGE].asset),\n ...(priceData?.totalFeeAmountUsd && /* istanbul ignore next */ {\n usd: priceData?.totalFeeAmountUsd,\n }),\n },\n ],\n ...(feeData[FeeType.TX_FEE] && /* istanbul ignore next */ {\n [FeeType.TX_FEE]: [\n {\n ...feeData[FeeType.TX_FEE],\n asset: toBridgeAssetV2(feeData[FeeType.TX_FEE].asset),\n },\n ],\n }),\n },\n steps: steps?.map(toStepV2),\n ...restQuote,\n ...(intent && /* istanbul ignore next */ { intent }),\n protocols: bridges,\n aggregator: bridgeId,\n };\n});\n\nconst toQuoteV2 = (\n quote: Infer<typeof QuoteSchema>,\n): Infer<typeof QuoteSchemaV2> => {\n const quoteV2 = create(quote, QuoteV2FromV1);\n return quoteV2;\n};\n\nconst QuoteResponseV2FromV1 = coerce(\n QuoteResponseSchemaV2,\n QuoteResponseSchemaV1,\n (value: QuoteResponseV1) => {\n const { quote, l1GasFeesInHexWei, nonEvmFeesInNative, ...rest } = value;\n const { srcAsset } = quote;\n\n const {\n chain: { namespace },\n chainId,\n } = parseCaipAssetType(srcAsset.assetId);\n\n return {\n ...rest,\n ...(nonEvmFeesInNative && { nonEvmFeesInNative }),\n ...(l1GasFeesInHexWei && { l1GasFeesInHexWei }),\n namespace,\n chainId,\n quote: toQuoteV2(quote),\n };\n },\n);\n\n/**\n * Converts a partial quote response to a {@link QuoteResponse}.\n * This does not preserve any post-fetch metadata.\n *\n * @param quoteResponse - The {@link QuoteResponseV1} to convert\n * @returns The {@link QuoteResponse}\n */\nexport function toQuoteResponseV2(quoteResponse: unknown): QuoteResponse {\n let quoteResponseV2: QuoteResponse | null = null;\n\n // V1 quote\n /* istanbul ignore else */\n if (is(quoteResponse, QuoteResponseSchemaV1)) {\n quoteResponseV2 = create(quoteResponse, QuoteResponseV2FromV1);\n }\n // V2 quote\n else if (validateQuoteResponse(quoteResponse)) {\n quoteResponseV2 = quoteResponse;\n }\n\n /* istanbul ignore else */\n if (quoteResponseV2) {\n const {\n chain: { namespace },\n chainId,\n } = parseCaipAssetType(quoteResponseV2.quote.src.asset.assetId);\n\n // Add namespace, chainId\n return { ...quoteResponseV2, namespace: namespace as never, chainId };\n }\n\n /* istanbul ignore next */\n throw new Error('QuoteResponseV1 to V2 conversion failed');\n}\n"]}
|
|
1
|
+
{"version":3,"file":"quote-response-v1-to-v2.cjs","sourceRoot":"","sources":["../../src/coercers/quote-response-v1-to-v2.ts"],"names":[],"mappings":"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","sourcesContent":["import { create, coerce, Infer, is, intersection } from '@metamask/superstruct';\nimport { parseCaipAssetType } from '@metamask/utils';\n\nimport { assetIdsMatch } from '../utils/assets.js';\nimport { formatAddressToAssetId } from '../utils/caip-formatters.js';\nimport { sumAmounts } from '../utils/number-formatters.js';\nimport {\n BridgeAssetSchema,\n BridgeAssetV2Schema,\n MinimalAssetSchema,\n} from '../validators/bridge-asset.js';\nimport { QuoteResponseSchemaV1 } from '../validators/quote-response-v1.js';\nimport type { QuoteResponseV1 } from '../validators/quote-response-v1.js';\nimport {\n QuoteResponseSchemaV2,\n validateQuoteResponse,\n} from '../validators/quote-response.js';\nimport type { QuoteResponse } from '../validators/quote-response.js';\nimport { QuoteSchemaV2, FeeType, QuoteSchema } from '../validators/quote.js';\nimport { StepSchemaV2, StepSchema } from '../validators/step.js';\n\nconst BridgeAssetV2FromV1 = coerce(\n BridgeAssetV2Schema,\n intersection([BridgeAssetSchema, MinimalAssetSchema]),\n (value) => {\n const { chainId, address, iconUrl, icon, assetId, ...rest } = value;\n\n const resolvedIconUrl = iconUrl ?? icon;\n\n return {\n assetId:\n assetId ??\n /* istanbul ignore next */ formatAddressToAssetId(address, chainId),\n ...(resolvedIconUrl && { iconUrl: resolvedIconUrl }),\n ...rest,\n };\n },\n);\n\nexport const toBridgeAssetV2 = (\n data: unknown,\n): Infer<typeof BridgeAssetV2Schema> => {\n return create(data, BridgeAssetV2FromV1);\n};\n\nconst StepSchemaV2FromV1 = coerce(StepSchemaV2, StepSchema, (value) => {\n const { srcAsset, destAsset, action } = value;\n return {\n action,\n src: {\n asset: toBridgeAssetV2(srcAsset),\n },\n dest: {\n asset: toBridgeAssetV2(destAsset),\n },\n };\n});\nconst toStepV2 = (step: Infer<typeof StepSchema>): Infer<typeof StepSchemaV2> =>\n create(step, StepSchemaV2FromV1);\n\nconst QuoteV2FromV1 = coerce(QuoteSchemaV2, QuoteSchema, (value) => {\n const {\n srcTokenAmount,\n destTokenAmount,\n minDestTokenAmount,\n srcAsset,\n destAsset,\n srcChainId,\n destChainId,\n walletAddress,\n destWalletAddress,\n priceData,\n feeData,\n bridgeId,\n bridges,\n steps,\n intent,\n ...restQuote\n } = value;\n\n const srcAssetV2 = toBridgeAssetV2(srcAsset);\n\n return {\n src: {\n amount: sumAmounts([\n { amount: srcTokenAmount, asset: srcAssetV2 },\n ...(intent\n ? []\n : [feeData[FeeType.TX_FEE], feeData[FeeType.METABRIDGE]].filter(\n (fee) => assetIdsMatch(fee?.asset?.assetId, srcAssetV2.assetId),\n )),\n ])?.amount,\n asset: srcAssetV2,\n ...(walletAddress && { walletAddress }),\n },\n dest: {\n amount: destTokenAmount,\n asset: toBridgeAssetV2(destAsset),\n ...(destWalletAddress && { walletAddress: destWalletAddress }),\n minAmount: minDestTokenAmount,\n },\n priceData: {\n ...(priceData?.priceImpact && {\n priceImpact: {\n amount: priceData.priceImpact,\n },\n }),\n },\n feeData: {\n [FeeType.METABRIDGE]: [\n {\n ...feeData[FeeType.METABRIDGE],\n asset: toBridgeAssetV2(feeData[FeeType.METABRIDGE].asset),\n ...(priceData?.totalFeeAmountUsd && /* istanbul ignore next */ {\n usd: priceData?.totalFeeAmountUsd,\n }),\n },\n ],\n ...(feeData[FeeType.TX_FEE] && /* istanbul ignore next */ {\n [FeeType.TX_FEE]: [\n {\n ...feeData[FeeType.TX_FEE],\n asset: toBridgeAssetV2(feeData[FeeType.TX_FEE].asset),\n },\n ],\n }),\n },\n steps: steps?.map(toStepV2),\n ...restQuote,\n ...(intent && /* istanbul ignore next */ { intent }),\n protocols: bridges,\n aggregator: bridgeId,\n };\n});\n\nconst toQuoteV2 = (\n quote: Infer<typeof QuoteSchema>,\n): Infer<typeof QuoteSchemaV2> => {\n const quoteV2 = create(quote, QuoteV2FromV1);\n return quoteV2;\n};\n\nconst QuoteResponseV2FromV1 = coerce(\n QuoteResponseSchemaV2,\n QuoteResponseSchemaV1,\n (value: QuoteResponseV1) => {\n const { quote, l1GasFeesInHexWei, nonEvmFeesInNative, ...rest } = value;\n const { srcAsset } = quote;\n\n const {\n chain: { namespace },\n chainId,\n } = parseCaipAssetType(srcAsset.assetId);\n\n return {\n ...rest,\n ...(nonEvmFeesInNative && { nonEvmFeesInNative }),\n ...(l1GasFeesInHexWei && { l1GasFeesInHexWei }),\n namespace,\n chainId,\n quote: toQuoteV2(quote),\n };\n },\n);\n\n/**\n * Converts a partial quote response to a {@link QuoteResponse}.\n * This does not preserve any post-fetch metadata.\n *\n * @param quoteResponse - The {@link QuoteResponseV1} to convert\n * @returns The {@link QuoteResponse}\n */\nexport function toQuoteResponseV2(quoteResponse: unknown): QuoteResponse {\n let quoteResponseV2: QuoteResponse | null = null;\n\n // V1 quote\n /* istanbul ignore else */\n if (is(quoteResponse, QuoteResponseSchemaV1)) {\n quoteResponseV2 = create(quoteResponse, QuoteResponseV2FromV1);\n }\n // V2 quote\n else if (validateQuoteResponse(quoteResponse)) {\n quoteResponseV2 = quoteResponse;\n }\n\n /* istanbul ignore else */\n if (quoteResponseV2) {\n const {\n chain: { namespace },\n chainId,\n } = parseCaipAssetType(quoteResponseV2.quote.src.asset.assetId);\n\n // Add namespace, chainId\n return { ...quoteResponseV2, namespace: namespace as never, chainId };\n }\n\n /* istanbul ignore next */\n throw new Error('QuoteResponseV1 to V2 conversion failed');\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { create, coerce, is, intersection } from "@metamask/superstruct";
|
|
2
2
|
import { parseCaipAssetType } from "@metamask/utils";
|
|
3
|
-
import {
|
|
3
|
+
import { assetIdsMatch } from "../utils/assets.mjs";
|
|
4
4
|
import { formatAddressToAssetId } from "../utils/caip-formatters.mjs";
|
|
5
5
|
import { sumAmounts } from "../utils/number-formatters.mjs";
|
|
6
6
|
import { BridgeAssetSchema, BridgeAssetV2Schema, MinimalAssetSchema } from "../validators/bridge-asset.mjs";
|
|
@@ -36,17 +36,16 @@ const StepSchemaV2FromV1 = coerce(StepSchemaV2, StepSchema, (value) => {
|
|
|
36
36
|
const toStepV2 = (step) => create(step, StepSchemaV2FromV1);
|
|
37
37
|
const QuoteV2FromV1 = coerce(QuoteSchemaV2, QuoteSchema, (value) => {
|
|
38
38
|
const { srcTokenAmount, destTokenAmount, minDestTokenAmount, srcAsset, destAsset, srcChainId, destChainId, walletAddress, destWalletAddress, priceData, feeData, bridgeId, bridges, steps, intent, ...restQuote } = value;
|
|
39
|
+
const srcAssetV2 = toBridgeAssetV2(srcAsset);
|
|
39
40
|
return {
|
|
40
41
|
src: {
|
|
41
|
-
amount:
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
feeData[FeeType.TX_FEE],
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
.toFixed(),
|
|
49
|
-
asset: toBridgeAssetV2(srcAsset),
|
|
42
|
+
amount: sumAmounts([
|
|
43
|
+
{ amount: srcTokenAmount, asset: srcAssetV2 },
|
|
44
|
+
...(intent
|
|
45
|
+
? []
|
|
46
|
+
: [feeData[FeeType.TX_FEE], feeData[FeeType.METABRIDGE]].filter((fee) => assetIdsMatch(fee?.asset?.assetId, srcAssetV2.assetId))),
|
|
47
|
+
])?.amount,
|
|
48
|
+
asset: srcAssetV2,
|
|
50
49
|
...(walletAddress && { walletAddress }),
|
|
51
50
|
},
|
|
52
51
|
dest: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quote-response-v1-to-v2.mjs","sourceRoot":"","sources":["../../src/coercers/quote-response-v1-to-v2.ts"],"names":[],"mappings":"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","sourcesContent":["import { create, coerce, Infer, is, intersection } from '@metamask/superstruct';\nimport { parseCaipAssetType } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport { formatAddressToAssetId } from '../utils/caip-formatters.js';\nimport { sumAmounts } from '../utils/number-formatters.js';\nimport {\n BridgeAssetSchema,\n BridgeAssetV2Schema,\n MinimalAssetSchema,\n} from '../validators/bridge-asset.js';\nimport { QuoteResponseSchemaV1 } from '../validators/quote-response-v1.js';\nimport type { QuoteResponseV1 } from '../validators/quote-response-v1.js';\nimport {\n QuoteResponseSchemaV2,\n validateQuoteResponse,\n} from '../validators/quote-response.js';\nimport type { QuoteResponse } from '../validators/quote-response.js';\nimport { QuoteSchemaV2, FeeType, QuoteSchema } from '../validators/quote.js';\nimport { StepSchemaV2, StepSchema } from '../validators/step.js';\n\nconst BridgeAssetV2FromV1 = coerce(\n BridgeAssetV2Schema,\n intersection([BridgeAssetSchema, MinimalAssetSchema]),\n (value) => {\n const { chainId, address, iconUrl, icon, assetId, ...rest } = value;\n\n const resolvedIconUrl = iconUrl ?? icon;\n\n return {\n assetId:\n assetId ??\n /* istanbul ignore next */ formatAddressToAssetId(address, chainId),\n ...(resolvedIconUrl && { iconUrl: resolvedIconUrl }),\n ...rest,\n };\n },\n);\n\nexport const toBridgeAssetV2 = (\n data: unknown,\n): Infer<typeof BridgeAssetV2Schema> => {\n return create(data, BridgeAssetV2FromV1);\n};\n\nconst StepSchemaV2FromV1 = coerce(StepSchemaV2, StepSchema, (value) => {\n const { srcAsset, destAsset, action } = value;\n return {\n action,\n src: {\n asset: toBridgeAssetV2(srcAsset),\n },\n dest: {\n asset: toBridgeAssetV2(destAsset),\n },\n };\n});\nconst toStepV2 = (step: Infer<typeof StepSchema>): Infer<typeof StepSchemaV2> =>\n create(step, StepSchemaV2FromV1);\n\nconst QuoteV2FromV1 = coerce(QuoteSchemaV2, QuoteSchema, (value) => {\n const {\n srcTokenAmount,\n destTokenAmount,\n minDestTokenAmount,\n srcAsset,\n destAsset,\n srcChainId,\n destChainId,\n walletAddress,\n destWalletAddress,\n priceData,\n feeData,\n bridgeId,\n bridges,\n steps,\n intent,\n ...restQuote\n } = value;\n\n return {\n src: {\n amount: new BigNumber(srcTokenAmount)\n .plus(\n intent\n ? 0\n : (sumAmounts([\n feeData[FeeType.TX_FEE],\n feeData[FeeType.METABRIDGE],\n ])?.amount ?? 0),\n )\n .toFixed(),\n asset: toBridgeAssetV2(srcAsset),\n ...(walletAddress && { walletAddress }),\n },\n dest: {\n amount: destTokenAmount,\n asset: toBridgeAssetV2(destAsset),\n ...(destWalletAddress && { walletAddress: destWalletAddress }),\n minAmount: minDestTokenAmount,\n },\n priceData: {\n ...(priceData?.priceImpact && {\n priceImpact: {\n amount: priceData.priceImpact,\n },\n }),\n },\n feeData: {\n [FeeType.METABRIDGE]: [\n {\n ...feeData[FeeType.METABRIDGE],\n asset: toBridgeAssetV2(feeData[FeeType.METABRIDGE].asset),\n ...(priceData?.totalFeeAmountUsd && /* istanbul ignore next */ {\n usd: priceData?.totalFeeAmountUsd,\n }),\n },\n ],\n ...(feeData[FeeType.TX_FEE] && /* istanbul ignore next */ {\n [FeeType.TX_FEE]: [\n {\n ...feeData[FeeType.TX_FEE],\n asset: toBridgeAssetV2(feeData[FeeType.TX_FEE].asset),\n },\n ],\n }),\n },\n steps: steps?.map(toStepV2),\n ...restQuote,\n ...(intent && /* istanbul ignore next */ { intent }),\n protocols: bridges,\n aggregator: bridgeId,\n };\n});\n\nconst toQuoteV2 = (\n quote: Infer<typeof QuoteSchema>,\n): Infer<typeof QuoteSchemaV2> => {\n const quoteV2 = create(quote, QuoteV2FromV1);\n return quoteV2;\n};\n\nconst QuoteResponseV2FromV1 = coerce(\n QuoteResponseSchemaV2,\n QuoteResponseSchemaV1,\n (value: QuoteResponseV1) => {\n const { quote, l1GasFeesInHexWei, nonEvmFeesInNative, ...rest } = value;\n const { srcAsset } = quote;\n\n const {\n chain: { namespace },\n chainId,\n } = parseCaipAssetType(srcAsset.assetId);\n\n return {\n ...rest,\n ...(nonEvmFeesInNative && { nonEvmFeesInNative }),\n ...(l1GasFeesInHexWei && { l1GasFeesInHexWei }),\n namespace,\n chainId,\n quote: toQuoteV2(quote),\n };\n },\n);\n\n/**\n * Converts a partial quote response to a {@link QuoteResponse}.\n * This does not preserve any post-fetch metadata.\n *\n * @param quoteResponse - The {@link QuoteResponseV1} to convert\n * @returns The {@link QuoteResponse}\n */\nexport function toQuoteResponseV2(quoteResponse: unknown): QuoteResponse {\n let quoteResponseV2: QuoteResponse | null = null;\n\n // V1 quote\n /* istanbul ignore else */\n if (is(quoteResponse, QuoteResponseSchemaV1)) {\n quoteResponseV2 = create(quoteResponse, QuoteResponseV2FromV1);\n }\n // V2 quote\n else if (validateQuoteResponse(quoteResponse)) {\n quoteResponseV2 = quoteResponse;\n }\n\n /* istanbul ignore else */\n if (quoteResponseV2) {\n const {\n chain: { namespace },\n chainId,\n } = parseCaipAssetType(quoteResponseV2.quote.src.asset.assetId);\n\n // Add namespace, chainId\n return { ...quoteResponseV2, namespace: namespace as never, chainId };\n }\n\n /* istanbul ignore next */\n throw new Error('QuoteResponseV1 to V2 conversion failed');\n}\n"]}
|
|
1
|
+
{"version":3,"file":"quote-response-v1-to-v2.mjs","sourceRoot":"","sources":["../../src/coercers/quote-response-v1-to-v2.ts"],"names":[],"mappings":"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","sourcesContent":["import { create, coerce, Infer, is, intersection } from '@metamask/superstruct';\nimport { parseCaipAssetType } from '@metamask/utils';\n\nimport { assetIdsMatch } from '../utils/assets.js';\nimport { formatAddressToAssetId } from '../utils/caip-formatters.js';\nimport { sumAmounts } from '../utils/number-formatters.js';\nimport {\n BridgeAssetSchema,\n BridgeAssetV2Schema,\n MinimalAssetSchema,\n} from '../validators/bridge-asset.js';\nimport { QuoteResponseSchemaV1 } from '../validators/quote-response-v1.js';\nimport type { QuoteResponseV1 } from '../validators/quote-response-v1.js';\nimport {\n QuoteResponseSchemaV2,\n validateQuoteResponse,\n} from '../validators/quote-response.js';\nimport type { QuoteResponse } from '../validators/quote-response.js';\nimport { QuoteSchemaV2, FeeType, QuoteSchema } from '../validators/quote.js';\nimport { StepSchemaV2, StepSchema } from '../validators/step.js';\n\nconst BridgeAssetV2FromV1 = coerce(\n BridgeAssetV2Schema,\n intersection([BridgeAssetSchema, MinimalAssetSchema]),\n (value) => {\n const { chainId, address, iconUrl, icon, assetId, ...rest } = value;\n\n const resolvedIconUrl = iconUrl ?? icon;\n\n return {\n assetId:\n assetId ??\n /* istanbul ignore next */ formatAddressToAssetId(address, chainId),\n ...(resolvedIconUrl && { iconUrl: resolvedIconUrl }),\n ...rest,\n };\n },\n);\n\nexport const toBridgeAssetV2 = (\n data: unknown,\n): Infer<typeof BridgeAssetV2Schema> => {\n return create(data, BridgeAssetV2FromV1);\n};\n\nconst StepSchemaV2FromV1 = coerce(StepSchemaV2, StepSchema, (value) => {\n const { srcAsset, destAsset, action } = value;\n return {\n action,\n src: {\n asset: toBridgeAssetV2(srcAsset),\n },\n dest: {\n asset: toBridgeAssetV2(destAsset),\n },\n };\n});\nconst toStepV2 = (step: Infer<typeof StepSchema>): Infer<typeof StepSchemaV2> =>\n create(step, StepSchemaV2FromV1);\n\nconst QuoteV2FromV1 = coerce(QuoteSchemaV2, QuoteSchema, (value) => {\n const {\n srcTokenAmount,\n destTokenAmount,\n minDestTokenAmount,\n srcAsset,\n destAsset,\n srcChainId,\n destChainId,\n walletAddress,\n destWalletAddress,\n priceData,\n feeData,\n bridgeId,\n bridges,\n steps,\n intent,\n ...restQuote\n } = value;\n\n const srcAssetV2 = toBridgeAssetV2(srcAsset);\n\n return {\n src: {\n amount: sumAmounts([\n { amount: srcTokenAmount, asset: srcAssetV2 },\n ...(intent\n ? []\n : [feeData[FeeType.TX_FEE], feeData[FeeType.METABRIDGE]].filter(\n (fee) => assetIdsMatch(fee?.asset?.assetId, srcAssetV2.assetId),\n )),\n ])?.amount,\n asset: srcAssetV2,\n ...(walletAddress && { walletAddress }),\n },\n dest: {\n amount: destTokenAmount,\n asset: toBridgeAssetV2(destAsset),\n ...(destWalletAddress && { walletAddress: destWalletAddress }),\n minAmount: minDestTokenAmount,\n },\n priceData: {\n ...(priceData?.priceImpact && {\n priceImpact: {\n amount: priceData.priceImpact,\n },\n }),\n },\n feeData: {\n [FeeType.METABRIDGE]: [\n {\n ...feeData[FeeType.METABRIDGE],\n asset: toBridgeAssetV2(feeData[FeeType.METABRIDGE].asset),\n ...(priceData?.totalFeeAmountUsd && /* istanbul ignore next */ {\n usd: priceData?.totalFeeAmountUsd,\n }),\n },\n ],\n ...(feeData[FeeType.TX_FEE] && /* istanbul ignore next */ {\n [FeeType.TX_FEE]: [\n {\n ...feeData[FeeType.TX_FEE],\n asset: toBridgeAssetV2(feeData[FeeType.TX_FEE].asset),\n },\n ],\n }),\n },\n steps: steps?.map(toStepV2),\n ...restQuote,\n ...(intent && /* istanbul ignore next */ { intent }),\n protocols: bridges,\n aggregator: bridgeId,\n };\n});\n\nconst toQuoteV2 = (\n quote: Infer<typeof QuoteSchema>,\n): Infer<typeof QuoteSchemaV2> => {\n const quoteV2 = create(quote, QuoteV2FromV1);\n return quoteV2;\n};\n\nconst QuoteResponseV2FromV1 = coerce(\n QuoteResponseSchemaV2,\n QuoteResponseSchemaV1,\n (value: QuoteResponseV1) => {\n const { quote, l1GasFeesInHexWei, nonEvmFeesInNative, ...rest } = value;\n const { srcAsset } = quote;\n\n const {\n chain: { namespace },\n chainId,\n } = parseCaipAssetType(srcAsset.assetId);\n\n return {\n ...rest,\n ...(nonEvmFeesInNative && { nonEvmFeesInNative }),\n ...(l1GasFeesInHexWei && { l1GasFeesInHexWei }),\n namespace,\n chainId,\n quote: toQuoteV2(quote),\n };\n },\n);\n\n/**\n * Converts a partial quote response to a {@link QuoteResponse}.\n * This does not preserve any post-fetch metadata.\n *\n * @param quoteResponse - The {@link QuoteResponseV1} to convert\n * @returns The {@link QuoteResponse}\n */\nexport function toQuoteResponseV2(quoteResponse: unknown): QuoteResponse {\n let quoteResponseV2: QuoteResponse | null = null;\n\n // V1 quote\n /* istanbul ignore else */\n if (is(quoteResponse, QuoteResponseSchemaV1)) {\n quoteResponseV2 = create(quoteResponse, QuoteResponseV2FromV1);\n }\n // V2 quote\n else if (validateQuoteResponse(quoteResponse)) {\n quoteResponseV2 = quoteResponse;\n }\n\n /* istanbul ignore else */\n if (quoteResponseV2) {\n const {\n chain: { namespace },\n chainId,\n } = parseCaipAssetType(quoteResponseV2.quote.src.asset.assetId);\n\n // Add namespace, chainId\n return { ...quoteResponseV2, namespace: namespace as never, chainId };\n }\n\n /* istanbul ignore next */\n throw new Error('QuoteResponseV1 to V2 conversion failed');\n}\n"]}
|
package/dist/index.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.
|
|
5
|
-
exports.fetchTokens = exports.getSwapsContractAddress = exports.isValidSwapsContractAddress = exports.BRIDGE_DEFAULT_SLIPPAGE = exports.getBridgeFeatureFlags = exports.DEFAULT_FEATURE_FLAG_CONFIG = exports.selectTokenWarnings = exports.selectMinimumBalanceForRentExemptionInSOL = exports.selectBridgeFeatureFlags = exports.selectIsQuoteExpired = exports.selectExchangeRateByAssetId = exports.selectDefaultSlippagePercentage = void 0;
|
|
3
|
+
exports.BridgeAssetSecurityDataType = exports.BridgeAssetV2Schema = exports.MinimalAssetSchema = exports.validateBridgeAssetV2 = exports.validateBridgeAsset = exports.BridgeAssetSchema = exports.TokenFeatureType = exports.AmountsAndAssetSchema = exports.BatchSellTransactionType = exports.QuoteStreamCompleteReason = exports.validateQuoteStreamComplete = exports.assetIdsMatch = exports.sumAmounts = exports.toQuoteMetadataV2 = exports.toQuoteMetadataV1 = exports.toQuoteResponseV2 = exports.toQuoteResponseV1 = exports.ActionTypes = exports.DiscountType = exports.FeeType = exports.validateQuoteResponse = exports.isStellarTrade = exports.isEvmTxData = exports.isTronTrade = exports.isBitcoinTrade = exports.AbortReason = exports.StatusTypes = exports.RequestStatus = exports.ChainId = exports.SortOrder = exports.AssetType = exports.mergeQuoteMetadata = exports.QuoteResponseSchemaV1 = exports.validateQuoteResponseV1 = exports.getQuotesReceivedProperties = exports.isCustomSlippage = exports.isHardwareWallet = exports.getSwapType = exports.getRequestParams = exports.formatProviderLabel = exports.getAccountHardwareType = exports.PollingStatus = exports.MetaMetricsSwapsEventSource = exports.InputAmountPreset = exports.BatchSellMetricsLocation = exports.UNIFIED_SWAP_BRIDGE_EVENT_CATEGORY = exports.BATCH_SELL_EVENT_CATEGORY = exports.UnifiedSwapBridgeEventName = exports.BatchSellMetricsEventName = exports.BridgeController = void 0;
|
|
4
|
+
exports.selectBatchSellQuotes = exports.selectBridgeQuotes = exports.extractTradeData = exports.formatChainIdToDec = exports.formatAddressToAssetId = exports.formatAddressToCaipReference = exports.formatChainIdToHex = exports.formatChainIdToCaip = exports.appendFeesToQuotes = exports.fetchBridgeQuoteStream = exports.getClientHeaders = exports.fetchBridgeTokens = exports.calcLatestSrcBalance = exports.calcQuoteMetadata = exports.calcSlippagePercentage = exports.isValidBatchSellQuoteRequest = exports.isValidQuoteRequest = exports.isCrossChain = exports.getDefaultBridgeControllerState = exports.getNativeAssetForChainId = exports.isNonEvmChainId = exports.isStellarChainId = exports.isTronChainId = exports.isBitcoinChainId = exports.isSolanaChainId = exports.isNativeAddress = exports.isEthUsdt = exports.MetricsSwapType = exports.MetricsActionType = exports.ALLOWED_CONTRACT_ADDRESSES = exports.SWAPS_WRAPPED_TOKENS_ADDRESSES = exports.SWAPS_CONTRACT_ADDRESSES = exports.SWAPS_API_V2_BASE_URL = exports.SWAPS_CHAINID_DEFAULT_TOKEN_MAP = exports.BRIDGE_PROD_API_BASE_URL = exports.BRIDGE_UAT_API_BASE_URL = exports.BRIDGE_DEV_API_BASE_URL = exports.METABRIDGE_CHAIN_TO_ADDRESS_MAP = exports.DEFAULT_BRIDGE_CONTROLLER_STATE = exports.DEFAULT_MAX_REFRESH_COUNT = exports.REFRESH_INTERVAL_MS = exports.BRIDGE_MM_FEE_RATE = exports.BRIDGE_PREFERRED_GAS_ESTIMATE = exports.BRIDGE_QUOTE_MAX_RETURN_DIFFERENCE_PERCENTAGE = exports.BRIDGE_QUOTE_MAX_ETA_SECONDS = exports.BRIDGE_CONTROLLER_NAME = exports.BridgeClientId = exports.ALLOWED_BRIDGE_CHAIN_IDS = exports.toBridgeAssetV2 = exports.FeatureId = void 0;
|
|
5
|
+
exports.fetchTokens = exports.getSwapsContractAddress = exports.isValidSwapsContractAddress = exports.BRIDGE_DEFAULT_SLIPPAGE = exports.getBridgeFeatureFlags = exports.DEFAULT_FEATURE_FLAG_CONFIG = exports.selectTokenWarnings = exports.selectMinimumBalanceForRentExemptionInSOL = exports.selectBridgeFeatureFlags = exports.selectIsQuoteExpired = exports.selectExchangeRateByAssetId = exports.selectDefaultSlippagePercentage = exports.selectBatchSellTrades = void 0;
|
|
6
6
|
var bridge_controller_js_1 = require("./bridge-controller.cjs");
|
|
7
7
|
Object.defineProperty(exports, "BridgeController", { enumerable: true, get: function () { return bridge_controller_js_1.BridgeController; } });
|
|
8
8
|
var constants_js_1 = require("./utils/metrics/constants.cjs");
|
|
@@ -57,6 +57,8 @@ var to_quote_metadata_v2_js_1 = require("./utils/quote-metadata/to-quote-metadat
|
|
|
57
57
|
Object.defineProperty(exports, "toQuoteMetadataV2", { enumerable: true, get: function () { return to_quote_metadata_v2_js_1.toQuoteMetadataV2; } });
|
|
58
58
|
var number_formatters_js_1 = require("./utils/number-formatters.cjs");
|
|
59
59
|
Object.defineProperty(exports, "sumAmounts", { enumerable: true, get: function () { return number_formatters_js_1.sumAmounts; } });
|
|
60
|
+
var assets_js_1 = require("./utils/assets.cjs");
|
|
61
|
+
Object.defineProperty(exports, "assetIdsMatch", { enumerable: true, get: function () { return assets_js_1.assetIdsMatch; } });
|
|
60
62
|
var quote_stream_complete_js_1 = require("./validators/quote-stream-complete.cjs");
|
|
61
63
|
Object.defineProperty(exports, "validateQuoteStreamComplete", { enumerable: true, get: function () { return quote_stream_complete_js_1.validateQuoteStreamComplete; } });
|
|
62
64
|
Object.defineProperty(exports, "QuoteStreamCompleteReason", { enumerable: true, get: function () { return quote_stream_complete_js_1.QuoteStreamCompleteReason; } });
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export { BridgeController } from './bridge-controller.js';\n\nexport {\n BatchSellMetricsEventName,\n UnifiedSwapBridgeEventName,\n BATCH_SELL_EVENT_CATEGORY,\n UNIFIED_SWAP_BRIDGE_EVENT_CATEGORY,\n BatchSellMetricsLocation,\n InputAmountPreset,\n MetaMetricsSwapsEventSource,\n PollingStatus,\n} from './utils/metrics/constants.js';\n\nexport type { BridgeControllerMetricsEventName } from './utils/metrics/constants.js';\nexport type { BridgeControllerMetricsLocation } from './utils/metrics/constants.js';\n\nexport type {\n AccountHardwareType,\n RequiredEventContextFromClient,\n CrossChainSwapsEventProperties,\n TradeData,\n RequestParams,\n RequestMetadata,\n TxStatusData,\n QuoteFetchData,\n QuoteWarning,\n InputPrimaryDenominationData,\n} from './utils/metrics/types.js';\n\nexport {\n getAccountHardwareType,\n formatProviderLabel,\n getRequestParams,\n getSwapType,\n isHardwareWallet,\n isCustomSlippage,\n getQuotesReceivedProperties,\n} from './utils/metrics/properties.js';\n\nexport type {\n ChainConfiguration,\n L1GasFees,\n NonEvmFees,\n GasMultiplierByChainId,\n FeatureFlagResponse,\n GenericQuoteRequest,\n BatchSellTradesResponse,\n GaslessProperties,\n SimulatedGasFeeLimits,\n Step,\n RefuelData,\n FeeData,\n Intent,\n IntentOrderLike,\n BridgeControllerState,\n InputPrimaryDenomination,\n BridgeControllerAction,\n BridgeControllerActions,\n BridgeControllerEvents,\n BridgeControllerMessenger,\n FeatureFlagsPlatformConfig,\n TxFeeGasLimits,\n TokenFeature,\n QuoteStreamCompleteData,\n BridgeControllerGetStateAction,\n BridgeControllerStateChangeEvent,\n DeepPartial,\n} from './types.js';\n\nexport {\n type QuoteMetadata,\n type TokenAmountValues,\n} from './utils/quote-metadata/types.js';\nexport {\n validateQuoteResponseV1,\n QuoteResponseSchemaV1,\n type QuoteResponseV1,\n} from './validators/quote-response-v1.js';\nexport { mergeQuoteMetadata } from './utils/quote-metadata/merge.js';\n\nexport {\n AssetType,\n SortOrder,\n ChainId,\n RequestStatus,\n StatusTypes,\n} from './types.js';\n\nexport type {\n BridgeControllerUpdateBridgeQuoteRequestParamsAction,\n BridgeControllerFetchQuotesAction,\n BridgeControllerStopPollingForQuotesAction,\n BridgeControllerSetLocationAction,\n BridgeControllerGetLocationAction,\n BridgeControllerSetInputPrimaryDenominationAction,\n BridgeControllerResetStateAction,\n BridgeControllerSetChainIntervalLengthAction,\n BridgeControllerTrackUnifiedSwapBridgeEventAction,\n BridgeControllerUpdateBatchSellTradesAction,\n} from './bridge-controller-method-action-types.js';\n\nexport { AbortReason } from './utils/metrics/constants.js';\n\nexport type {\n TxData,\n BitcoinTradeData,\n TronTradeData,\n StellarTradeData,\n Trade,\n} from './validators/trade.js';\nexport {\n isBitcoinTrade,\n isTronTrade,\n isEvmTxData,\n isStellarTrade,\n} from './validators/trade.js';\nexport {\n validateQuoteResponse,\n type QuoteResponse,\n} from './validators/quote-response.js';\nexport type { Quote } from './validators/quote.js';\nexport { FeeType, DiscountType } from './validators/quote.js';\nexport { ActionTypes } from './validators/step.js';\nexport { toQuoteResponseV1 } from './coercers/quote-response-v2-to-v1.js';\nexport { toQuoteResponseV2 } from './coercers/quote-response-v1-to-v2.js';\n\nexport { toQuoteMetadataV1 } from './utils/quote-metadata/to-quote-metadata-v1.js';\nexport { toQuoteMetadataV2 } from './utils/quote-metadata/to-quote-metadata-v2.js';\n\nexport { sumAmounts } from './utils/number-formatters.js';\n\nexport {\n validateQuoteStreamComplete,\n QuoteStreamCompleteReason,\n} from './validators/quote-stream-complete.js';\nexport { BatchSellTransactionType } from './validators/batch-sell.js';\nexport { AmountsAndAssetSchema } from './validators/amount-and-asset.js';\nexport { TokenFeatureType } from './validators/token-feature.js';\nexport type {\n BridgeAsset,\n BridgeAssetV2,\n MinimalAsset,\n} from './validators/bridge-asset.js';\nexport {\n BridgeAssetSchema,\n validateBridgeAsset,\n validateBridgeAssetV2,\n MinimalAssetSchema,\n BridgeAssetV2Schema,\n BridgeAssetSecurityDataType,\n} from './validators/bridge-asset.js';\nexport { FeatureId } from './validators/feature-flags.js';\nexport { toBridgeAssetV2 } from './coercers/quote-response-v1-to-v2.js';\n\nexport {\n ALLOWED_BRIDGE_CHAIN_IDS,\n BridgeClientId,\n BRIDGE_CONTROLLER_NAME,\n BRIDGE_QUOTE_MAX_ETA_SECONDS,\n BRIDGE_QUOTE_MAX_RETURN_DIFFERENCE_PERCENTAGE,\n BRIDGE_PREFERRED_GAS_ESTIMATE,\n BRIDGE_MM_FEE_RATE,\n REFRESH_INTERVAL_MS,\n DEFAULT_MAX_REFRESH_COUNT,\n DEFAULT_BRIDGE_CONTROLLER_STATE,\n METABRIDGE_CHAIN_TO_ADDRESS_MAP,\n BRIDGE_DEV_API_BASE_URL,\n BRIDGE_UAT_API_BASE_URL,\n BRIDGE_PROD_API_BASE_URL,\n} from './constants/bridge.js';\n\nexport type { AllowedBridgeChainIds } from './constants/bridge.js';\n\nexport {\n /**\n * @deprecated This type should not be used. Use {@link BridgeAsset} instead.\n */\n type SwapsTokenObject,\n /**\n * @deprecated This map should not be used. Use getNativeAssetForChainId\" } instead.\n */\n SWAPS_CHAINID_DEFAULT_TOKEN_MAP,\n} from './constants/tokens.js';\n\nexport {\n SWAPS_API_V2_BASE_URL,\n SWAPS_CONTRACT_ADDRESSES,\n SWAPS_WRAPPED_TOKENS_ADDRESSES,\n ALLOWED_CONTRACT_ADDRESSES,\n} from './constants/swaps.js';\n\nexport {\n MetricsActionType,\n MetricsSwapType,\n} from './utils/metrics/constants.js';\n\nexport {\n isEthUsdt,\n isNativeAddress,\n isSolanaChainId,\n isBitcoinChainId,\n isTronChainId,\n isStellarChainId,\n isNonEvmChainId,\n getNativeAssetForChainId,\n getDefaultBridgeControllerState,\n isCrossChain,\n} from './utils/bridge.js';\n\nexport {\n isValidQuoteRequest,\n isValidBatchSellQuoteRequest,\n} from './validators/quote-request.js';\n\nexport {\n calcSlippagePercentage,\n calcQuoteMetadata,\n} from './utils/quote-metadata/calculators.js';\n\nexport { calcLatestSrcBalance } from './utils/balance.js';\n\nexport {\n fetchBridgeTokens,\n getClientHeaders,\n fetchBridgeQuoteStream,\n} from './utils/fetch.js';\n\nexport { appendFeesToQuotes } from './utils/quote-fees.js';\n\nexport {\n formatChainIdToCaip,\n formatChainIdToHex,\n formatAddressToCaipReference,\n formatAddressToAssetId,\n formatChainIdToDec,\n} from './utils/caip-formatters.js';\n\nexport { extractTradeData } from './utils/trade-utils.js';\n\nexport {\n selectBridgeQuotes,\n selectBatchSellQuotes,\n selectBatchSellTrades,\n selectDefaultSlippagePercentage,\n type BridgeAppState,\n selectExchangeRateByAssetId,\n selectIsQuoteExpired,\n selectBridgeFeatureFlags,\n selectMinimumBalanceForRentExemptionInSOL,\n selectTokenWarnings,\n} from './selectors.js';\n\nexport { DEFAULT_FEATURE_FLAG_CONFIG } from './constants/bridge.js';\n\nexport { getBridgeFeatureFlags } from './utils/feature-flags.js';\n\nexport { BRIDGE_DEFAULT_SLIPPAGE } from './utils/slippage.js';\n\nexport {\n isValidSwapsContractAddress,\n getSwapsContractAddress,\n fetchTokens,\n type SwapsToken,\n} from './utils/swaps.js';\n"]}
|
|
1
|
+
{"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export { BridgeController } from './bridge-controller.js';\n\nexport {\n BatchSellMetricsEventName,\n UnifiedSwapBridgeEventName,\n BATCH_SELL_EVENT_CATEGORY,\n UNIFIED_SWAP_BRIDGE_EVENT_CATEGORY,\n BatchSellMetricsLocation,\n InputAmountPreset,\n MetaMetricsSwapsEventSource,\n PollingStatus,\n} from './utils/metrics/constants.js';\n\nexport type { BridgeControllerMetricsEventName } from './utils/metrics/constants.js';\nexport type { BridgeControllerMetricsLocation } from './utils/metrics/constants.js';\n\nexport type {\n AccountHardwareType,\n RequiredEventContextFromClient,\n CrossChainSwapsEventProperties,\n TradeData,\n RequestParams,\n RequestMetadata,\n TxStatusData,\n QuoteFetchData,\n QuoteWarning,\n InputPrimaryDenominationData,\n} from './utils/metrics/types.js';\n\nexport {\n getAccountHardwareType,\n formatProviderLabel,\n getRequestParams,\n getSwapType,\n isHardwareWallet,\n isCustomSlippage,\n getQuotesReceivedProperties,\n} from './utils/metrics/properties.js';\n\nexport type {\n ChainConfiguration,\n L1GasFees,\n NonEvmFees,\n GasMultiplierByChainId,\n FeatureFlagResponse,\n GenericQuoteRequest,\n BatchSellTradesResponse,\n GaslessProperties,\n SimulatedGasFeeLimits,\n Step,\n RefuelData,\n FeeData,\n Intent,\n IntentOrderLike,\n BridgeControllerState,\n InputPrimaryDenomination,\n BridgeControllerAction,\n BridgeControllerActions,\n BridgeControllerEvents,\n BridgeControllerMessenger,\n FeatureFlagsPlatformConfig,\n TxFeeGasLimits,\n TokenFeature,\n QuoteStreamCompleteData,\n BridgeControllerGetStateAction,\n BridgeControllerStateChangeEvent,\n DeepPartial,\n} from './types.js';\n\nexport {\n type QuoteMetadata,\n type TokenAmountValues,\n} from './utils/quote-metadata/types.js';\nexport {\n validateQuoteResponseV1,\n QuoteResponseSchemaV1,\n type QuoteResponseV1,\n} from './validators/quote-response-v1.js';\nexport { mergeQuoteMetadata } from './utils/quote-metadata/merge.js';\n\nexport {\n AssetType,\n SortOrder,\n ChainId,\n RequestStatus,\n StatusTypes,\n} from './types.js';\n\nexport type {\n BridgeControllerUpdateBridgeQuoteRequestParamsAction,\n BridgeControllerFetchQuotesAction,\n BridgeControllerStopPollingForQuotesAction,\n BridgeControllerSetLocationAction,\n BridgeControllerGetLocationAction,\n BridgeControllerSetInputPrimaryDenominationAction,\n BridgeControllerResetStateAction,\n BridgeControllerSetChainIntervalLengthAction,\n BridgeControllerTrackUnifiedSwapBridgeEventAction,\n BridgeControllerUpdateBatchSellTradesAction,\n} from './bridge-controller-method-action-types.js';\n\nexport { AbortReason } from './utils/metrics/constants.js';\n\nexport type {\n TxData,\n BitcoinTradeData,\n TronTradeData,\n StellarTradeData,\n Trade,\n} from './validators/trade.js';\nexport {\n isBitcoinTrade,\n isTronTrade,\n isEvmTxData,\n isStellarTrade,\n} from './validators/trade.js';\nexport {\n validateQuoteResponse,\n type QuoteResponse,\n} from './validators/quote-response.js';\nexport type { Quote } from './validators/quote.js';\nexport { FeeType, DiscountType } from './validators/quote.js';\nexport { ActionTypes } from './validators/step.js';\nexport { toQuoteResponseV1 } from './coercers/quote-response-v2-to-v1.js';\nexport { toQuoteResponseV2 } from './coercers/quote-response-v1-to-v2.js';\n\nexport { toQuoteMetadataV1 } from './utils/quote-metadata/to-quote-metadata-v1.js';\nexport { toQuoteMetadataV2 } from './utils/quote-metadata/to-quote-metadata-v2.js';\n\nexport { sumAmounts } from './utils/number-formatters.js';\nexport { assetIdsMatch } from './utils/assets.js';\n\nexport {\n validateQuoteStreamComplete,\n QuoteStreamCompleteReason,\n} from './validators/quote-stream-complete.js';\nexport { BatchSellTransactionType } from './validators/batch-sell.js';\nexport { AmountsAndAssetSchema } from './validators/amount-and-asset.js';\nexport { TokenFeatureType } from './validators/token-feature.js';\nexport type {\n BridgeAsset,\n BridgeAssetV2,\n MinimalAsset,\n} from './validators/bridge-asset.js';\nexport {\n BridgeAssetSchema,\n validateBridgeAsset,\n validateBridgeAssetV2,\n MinimalAssetSchema,\n BridgeAssetV2Schema,\n BridgeAssetSecurityDataType,\n} from './validators/bridge-asset.js';\nexport { FeatureId } from './validators/feature-flags.js';\nexport { toBridgeAssetV2 } from './coercers/quote-response-v1-to-v2.js';\n\nexport {\n ALLOWED_BRIDGE_CHAIN_IDS,\n BridgeClientId,\n BRIDGE_CONTROLLER_NAME,\n BRIDGE_QUOTE_MAX_ETA_SECONDS,\n BRIDGE_QUOTE_MAX_RETURN_DIFFERENCE_PERCENTAGE,\n BRIDGE_PREFERRED_GAS_ESTIMATE,\n BRIDGE_MM_FEE_RATE,\n REFRESH_INTERVAL_MS,\n DEFAULT_MAX_REFRESH_COUNT,\n DEFAULT_BRIDGE_CONTROLLER_STATE,\n METABRIDGE_CHAIN_TO_ADDRESS_MAP,\n BRIDGE_DEV_API_BASE_URL,\n BRIDGE_UAT_API_BASE_URL,\n BRIDGE_PROD_API_BASE_URL,\n} from './constants/bridge.js';\n\nexport type { AllowedBridgeChainIds } from './constants/bridge.js';\n\nexport {\n /**\n * @deprecated This type should not be used. Use {@link BridgeAsset} instead.\n */\n type SwapsTokenObject,\n /**\n * @deprecated This map should not be used. Use getNativeAssetForChainId\" } instead.\n */\n SWAPS_CHAINID_DEFAULT_TOKEN_MAP,\n} from './constants/tokens.js';\n\nexport {\n SWAPS_API_V2_BASE_URL,\n SWAPS_CONTRACT_ADDRESSES,\n SWAPS_WRAPPED_TOKENS_ADDRESSES,\n ALLOWED_CONTRACT_ADDRESSES,\n} from './constants/swaps.js';\n\nexport {\n MetricsActionType,\n MetricsSwapType,\n} from './utils/metrics/constants.js';\n\nexport {\n isEthUsdt,\n isNativeAddress,\n isSolanaChainId,\n isBitcoinChainId,\n isTronChainId,\n isStellarChainId,\n isNonEvmChainId,\n getNativeAssetForChainId,\n getDefaultBridgeControllerState,\n isCrossChain,\n} from './utils/bridge.js';\n\nexport {\n isValidQuoteRequest,\n isValidBatchSellQuoteRequest,\n} from './validators/quote-request.js';\n\nexport {\n calcSlippagePercentage,\n calcQuoteMetadata,\n} from './utils/quote-metadata/calculators.js';\n\nexport { calcLatestSrcBalance } from './utils/balance.js';\n\nexport {\n fetchBridgeTokens,\n getClientHeaders,\n fetchBridgeQuoteStream,\n} from './utils/fetch.js';\n\nexport { appendFeesToQuotes } from './utils/quote-fees.js';\n\nexport {\n formatChainIdToCaip,\n formatChainIdToHex,\n formatAddressToCaipReference,\n formatAddressToAssetId,\n formatChainIdToDec,\n} from './utils/caip-formatters.js';\n\nexport { extractTradeData } from './utils/trade-utils.js';\n\nexport {\n selectBridgeQuotes,\n selectBatchSellQuotes,\n selectBatchSellTrades,\n selectDefaultSlippagePercentage,\n type BridgeAppState,\n selectExchangeRateByAssetId,\n selectIsQuoteExpired,\n selectBridgeFeatureFlags,\n selectMinimumBalanceForRentExemptionInSOL,\n selectTokenWarnings,\n} from './selectors.js';\n\nexport { DEFAULT_FEATURE_FLAG_CONFIG } from './constants/bridge.js';\n\nexport { getBridgeFeatureFlags } from './utils/feature-flags.js';\n\nexport { BRIDGE_DEFAULT_SLIPPAGE } from './utils/slippage.js';\n\nexport {\n isValidSwapsContractAddress,\n getSwapsContractAddress,\n fetchTokens,\n type SwapsToken,\n} from './utils/swaps.js';\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -22,6 +22,7 @@ export { toQuoteResponseV2 } from "./coercers/quote-response-v1-to-v2.cjs";
|
|
|
22
22
|
export { toQuoteMetadataV1 } from "./utils/quote-metadata/to-quote-metadata-v1.cjs";
|
|
23
23
|
export { toQuoteMetadataV2 } from "./utils/quote-metadata/to-quote-metadata-v2.cjs";
|
|
24
24
|
export { sumAmounts } from "./utils/number-formatters.cjs";
|
|
25
|
+
export { assetIdsMatch } from "./utils/assets.cjs";
|
|
25
26
|
export { validateQuoteStreamComplete, QuoteStreamCompleteReason, } from "./validators/quote-stream-complete.cjs";
|
|
26
27
|
export { BatchSellTransactionType } from "./validators/batch-sell.cjs";
|
|
27
28
|
export { AmountsAndAssetSchema } from "./validators/amount-and-asset.cjs";
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gCAA+B;AAE1D,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,EACzB,kCAAkC,EAClC,wBAAwB,EACxB,iBAAiB,EACjB,2BAA2B,EAC3B,aAAa,GACd,sCAAqC;AAEtC,YAAY,EAAE,gCAAgC,EAAE,sCAAqC;AACrF,YAAY,EAAE,+BAA+B,EAAE,sCAAqC;AAEpF,YAAY,EACV,mBAAmB,EACnB,8BAA8B,EAC9B,8BAA8B,EAC9B,SAAS,EACT,aAAa,EACb,eAAe,EACf,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,4BAA4B,GAC7B,kCAAiC;AAElC,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,2BAA2B,GAC5B,uCAAsC;AAEvC,YAAY,EACV,kBAAkB,EAClB,SAAS,EACT,UAAU,EACV,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EACrB,IAAI,EACJ,UAAU,EACV,OAAO,EACP,MAAM,EACN,eAAe,EACf,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,cAAc,EACd,YAAY,EACZ,uBAAuB,EACvB,8BAA8B,EAC9B,gCAAgC,EAChC,WAAW,GACZ,oBAAmB;AAEpB,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,iBAAiB,GACvB,yCAAwC;AACzC,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,KAAK,eAAe,GACrB,2CAA0C;AAC3C,OAAO,EAAE,kBAAkB,EAAE,yCAAwC;AAErE,OAAO,EACL,SAAS,EACT,SAAS,EACT,OAAO,EACP,aAAa,EACb,WAAW,GACZ,oBAAmB;AAEpB,YAAY,EACV,oDAAoD,EACpD,iCAAiC,EACjC,0CAA0C,EAC1C,iCAAiC,EACjC,iCAAiC,EACjC,iDAAiD,EACjD,gCAAgC,EAChC,4CAA4C,EAC5C,iDAAiD,EACjD,2CAA2C,GAC5C,oDAAmD;AAEpD,OAAO,EAAE,WAAW,EAAE,sCAAqC;AAE3D,YAAY,EACV,MAAM,EACN,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,KAAK,GACN,+BAA8B;AAC/B,OAAO,EACL,cAAc,EACd,WAAW,EACX,WAAW,EACX,cAAc,GACf,+BAA8B;AAC/B,OAAO,EACL,qBAAqB,EACrB,KAAK,aAAa,GACnB,wCAAuC;AACxC,YAAY,EAAE,KAAK,EAAE,+BAA8B;AACnD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,+BAA8B;AAC9D,OAAO,EAAE,WAAW,EAAE,8BAA6B;AACnD,OAAO,EAAE,iBAAiB,EAAE,+CAA8C;AAC1E,OAAO,EAAE,iBAAiB,EAAE,+CAA8C;AAE1E,OAAO,EAAE,iBAAiB,EAAE,wDAAuD;AACnF,OAAO,EAAE,iBAAiB,EAAE,wDAAuD;AAEnF,OAAO,EAAE,UAAU,EAAE,sCAAqC;
|
|
1
|
+
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.mts
CHANGED
|
@@ -22,6 +22,7 @@ export { toQuoteResponseV2 } from "./coercers/quote-response-v1-to-v2.mjs";
|
|
|
22
22
|
export { toQuoteMetadataV1 } from "./utils/quote-metadata/to-quote-metadata-v1.mjs";
|
|
23
23
|
export { toQuoteMetadataV2 } from "./utils/quote-metadata/to-quote-metadata-v2.mjs";
|
|
24
24
|
export { sumAmounts } from "./utils/number-formatters.mjs";
|
|
25
|
+
export { assetIdsMatch } from "./utils/assets.mjs";
|
|
25
26
|
export { validateQuoteStreamComplete, QuoteStreamCompleteReason, } from "./validators/quote-stream-complete.mjs";
|
|
26
27
|
export { BatchSellTransactionType } from "./validators/batch-sell.mjs";
|
|
27
28
|
export { AmountsAndAssetSchema } from "./validators/amount-and-asset.mjs";
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gCAA+B;AAE1D,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,EACzB,kCAAkC,EAClC,wBAAwB,EACxB,iBAAiB,EACjB,2BAA2B,EAC3B,aAAa,GACd,sCAAqC;AAEtC,YAAY,EAAE,gCAAgC,EAAE,sCAAqC;AACrF,YAAY,EAAE,+BAA+B,EAAE,sCAAqC;AAEpF,YAAY,EACV,mBAAmB,EACnB,8BAA8B,EAC9B,8BAA8B,EAC9B,SAAS,EACT,aAAa,EACb,eAAe,EACf,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,4BAA4B,GAC7B,kCAAiC;AAElC,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,2BAA2B,GAC5B,uCAAsC;AAEvC,YAAY,EACV,kBAAkB,EAClB,SAAS,EACT,UAAU,EACV,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EACrB,IAAI,EACJ,UAAU,EACV,OAAO,EACP,MAAM,EACN,eAAe,EACf,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,cAAc,EACd,YAAY,EACZ,uBAAuB,EACvB,8BAA8B,EAC9B,gCAAgC,EAChC,WAAW,GACZ,oBAAmB;AAEpB,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,iBAAiB,GACvB,yCAAwC;AACzC,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,KAAK,eAAe,GACrB,2CAA0C;AAC3C,OAAO,EAAE,kBAAkB,EAAE,yCAAwC;AAErE,OAAO,EACL,SAAS,EACT,SAAS,EACT,OAAO,EACP,aAAa,EACb,WAAW,GACZ,oBAAmB;AAEpB,YAAY,EACV,oDAAoD,EACpD,iCAAiC,EACjC,0CAA0C,EAC1C,iCAAiC,EACjC,iCAAiC,EACjC,iDAAiD,EACjD,gCAAgC,EAChC,4CAA4C,EAC5C,iDAAiD,EACjD,2CAA2C,GAC5C,oDAAmD;AAEpD,OAAO,EAAE,WAAW,EAAE,sCAAqC;AAE3D,YAAY,EACV,MAAM,EACN,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,KAAK,GACN,+BAA8B;AAC/B,OAAO,EACL,cAAc,EACd,WAAW,EACX,WAAW,EACX,cAAc,GACf,+BAA8B;AAC/B,OAAO,EACL,qBAAqB,EACrB,KAAK,aAAa,GACnB,wCAAuC;AACxC,YAAY,EAAE,KAAK,EAAE,+BAA8B;AACnD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,+BAA8B;AAC9D,OAAO,EAAE,WAAW,EAAE,8BAA6B;AACnD,OAAO,EAAE,iBAAiB,EAAE,+CAA8C;AAC1E,OAAO,EAAE,iBAAiB,EAAE,+CAA8C;AAE1E,OAAO,EAAE,iBAAiB,EAAE,wDAAuD;AACnF,OAAO,EAAE,iBAAiB,EAAE,wDAAuD;AAEnF,OAAO,EAAE,UAAU,EAAE,sCAAqC;
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gCAA+B;AAE1D,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,EACzB,kCAAkC,EAClC,wBAAwB,EACxB,iBAAiB,EACjB,2BAA2B,EAC3B,aAAa,GACd,sCAAqC;AAEtC,YAAY,EAAE,gCAAgC,EAAE,sCAAqC;AACrF,YAAY,EAAE,+BAA+B,EAAE,sCAAqC;AAEpF,YAAY,EACV,mBAAmB,EACnB,8BAA8B,EAC9B,8BAA8B,EAC9B,SAAS,EACT,aAAa,EACb,eAAe,EACf,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,4BAA4B,GAC7B,kCAAiC;AAElC,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,2BAA2B,GAC5B,uCAAsC;AAEvC,YAAY,EACV,kBAAkB,EAClB,SAAS,EACT,UAAU,EACV,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EACrB,IAAI,EACJ,UAAU,EACV,OAAO,EACP,MAAM,EACN,eAAe,EACf,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,cAAc,EACd,YAAY,EACZ,uBAAuB,EACvB,8BAA8B,EAC9B,gCAAgC,EAChC,WAAW,GACZ,oBAAmB;AAEpB,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,iBAAiB,GACvB,yCAAwC;AACzC,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,KAAK,eAAe,GACrB,2CAA0C;AAC3C,OAAO,EAAE,kBAAkB,EAAE,yCAAwC;AAErE,OAAO,EACL,SAAS,EACT,SAAS,EACT,OAAO,EACP,aAAa,EACb,WAAW,GACZ,oBAAmB;AAEpB,YAAY,EACV,oDAAoD,EACpD,iCAAiC,EACjC,0CAA0C,EAC1C,iCAAiC,EACjC,iCAAiC,EACjC,iDAAiD,EACjD,gCAAgC,EAChC,4CAA4C,EAC5C,iDAAiD,EACjD,2CAA2C,GAC5C,oDAAmD;AAEpD,OAAO,EAAE,WAAW,EAAE,sCAAqC;AAE3D,YAAY,EACV,MAAM,EACN,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,KAAK,GACN,+BAA8B;AAC/B,OAAO,EACL,cAAc,EACd,WAAW,EACX,WAAW,EACX,cAAc,GACf,+BAA8B;AAC/B,OAAO,EACL,qBAAqB,EACrB,KAAK,aAAa,GACnB,wCAAuC;AACxC,YAAY,EAAE,KAAK,EAAE,+BAA8B;AACnD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,+BAA8B;AAC9D,OAAO,EAAE,WAAW,EAAE,8BAA6B;AACnD,OAAO,EAAE,iBAAiB,EAAE,+CAA8C;AAC1E,OAAO,EAAE,iBAAiB,EAAE,+CAA8C;AAE1E,OAAO,EAAE,iBAAiB,EAAE,wDAAuD;AACnF,OAAO,EAAE,iBAAiB,EAAE,wDAAuD;AAEnF,OAAO,EAAE,UAAU,EAAE,sCAAqC;AAC1D,OAAO,EAAE,aAAa,EAAE,2BAA0B;AAElD,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,GAC1B,+CAA8C;AAC/C,OAAO,EAAE,wBAAwB,EAAE,oCAAmC;AACtE,OAAO,EAAE,qBAAqB,EAAE,0CAAyC;AACzE,OAAO,EAAE,gBAAgB,EAAE,uCAAsC;AACjE,YAAY,EACV,WAAW,EACX,aAAa,EACb,YAAY,GACb,sCAAqC;AACtC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,2BAA2B,GAC5B,sCAAqC;AACtC,OAAO,EAAE,SAAS,EAAE,uCAAsC;AAC1D,OAAO,EAAE,eAAe,EAAE,+CAA8C;AAExE,OAAO,EACL,wBAAwB,EACxB,cAAc,EACd,sBAAsB,EACtB,4BAA4B,EAC5B,6CAA6C,EAC7C,6BAA6B,EAC7B,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,+BAA+B,EAC/B,+BAA+B,EAC/B,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,GACzB,+BAA8B;AAE/B,YAAY,EAAE,qBAAqB,EAAE,+BAA8B;AAEnE,OAAO;AACL;;GAEG;AACH,KAAK,gBAAgB;AACrB;;GAEG;AACH,+BAA+B,GAChC,+BAA8B;AAE/B,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,8BAA8B,EAC9B,0BAA0B,GAC3B,8BAA6B;AAE9B,OAAO,EACL,iBAAiB,EACjB,eAAe,GAChB,sCAAqC;AAEtC,OAAO,EACL,SAAS,EACT,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,wBAAwB,EACxB,+BAA+B,EAC/B,YAAY,GACb,2BAA0B;AAE3B,OAAO,EACL,mBAAmB,EACnB,4BAA4B,GAC7B,uCAAsC;AAEvC,OAAO,EACL,sBAAsB,EACtB,iBAAiB,GAClB,+CAA8C;AAE/C,OAAO,EAAE,oBAAoB,EAAE,4BAA2B;AAE1D,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,GACvB,0BAAyB;AAE1B,OAAO,EAAE,kBAAkB,EAAE,+BAA8B;AAE3D,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,4BAA4B,EAC5B,sBAAsB,EACtB,kBAAkB,GACnB,oCAAmC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,gCAA+B;AAE1D,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,+BAA+B,EAC/B,KAAK,cAAc,EACnB,2BAA2B,EAC3B,oBAAoB,EACpB,wBAAwB,EACxB,yCAAyC,EACzC,mBAAmB,GACpB,wBAAuB;AAExB,OAAO,EAAE,2BAA2B,EAAE,+BAA8B;AAEpE,OAAO,EAAE,qBAAqB,EAAE,kCAAiC;AAEjE,OAAO,EAAE,uBAAuB,EAAE,6BAA4B;AAE9D,OAAO,EACL,2BAA2B,EAC3B,uBAAuB,EACvB,WAAW,EACX,KAAK,UAAU,GAChB,0BAAyB"}
|
package/dist/index.mjs
CHANGED
|
@@ -14,6 +14,7 @@ export { toQuoteResponseV2 } from "./coercers/quote-response-v1-to-v2.mjs";
|
|
|
14
14
|
export { toQuoteMetadataV1 } from "./utils/quote-metadata/to-quote-metadata-v1.mjs";
|
|
15
15
|
export { toQuoteMetadataV2 } from "./utils/quote-metadata/to-quote-metadata-v2.mjs";
|
|
16
16
|
export { sumAmounts } from "./utils/number-formatters.mjs";
|
|
17
|
+
export { assetIdsMatch } from "./utils/assets.mjs";
|
|
17
18
|
export { validateQuoteStreamComplete, QuoteStreamCompleteReason } from "./validators/quote-stream-complete.mjs";
|
|
18
19
|
export { BatchSellTransactionType } from "./validators/batch-sell.mjs";
|
|
19
20
|
export { AmountsAndAssetSchema } from "./validators/amount-and-asset.mjs";
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gCAA+B;AAE1D,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,EACzB,kCAAkC,EAClC,wBAAwB,EACxB,iBAAiB,EACjB,2BAA2B,EAC3B,aAAa,EACd,sCAAqC;AAkBtC,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,2BAA2B,EAC5B,uCAAsC;AAoCvC,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EAEtB,2CAA0C;AAC3C,OAAO,EAAE,kBAAkB,EAAE,yCAAwC;AAErE,OAAO,EACL,SAAS,EACT,SAAS,EACT,OAAO,EACP,aAAa,EACb,WAAW,EACZ,oBAAmB;AAepB,OAAO,EAAE,WAAW,EAAE,sCAAqC;AAS3D,OAAO,EACL,cAAc,EACd,WAAW,EACX,WAAW,EACX,cAAc,EACf,+BAA8B;AAC/B,OAAO,EACL,qBAAqB,EAEtB,wCAAuC;AAExC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,+BAA8B;AAC9D,OAAO,EAAE,WAAW,EAAE,8BAA6B;AACnD,OAAO,EAAE,iBAAiB,EAAE,+CAA8C;AAC1E,OAAO,EAAE,iBAAiB,EAAE,+CAA8C;AAE1E,OAAO,EAAE,iBAAiB,EAAE,wDAAuD;AACnF,OAAO,EAAE,iBAAiB,EAAE,wDAAuD;AAEnF,OAAO,EAAE,UAAU,EAAE,sCAAqC;
|
|
1
|
+
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export { BridgeController } from './bridge-controller.js';\n\nexport {\n BatchSellMetricsEventName,\n UnifiedSwapBridgeEventName,\n BATCH_SELL_EVENT_CATEGORY,\n UNIFIED_SWAP_BRIDGE_EVENT_CATEGORY,\n BatchSellMetricsLocation,\n InputAmountPreset,\n MetaMetricsSwapsEventSource,\n PollingStatus,\n} from './utils/metrics/constants.js';\n\nexport type { BridgeControllerMetricsEventName } from './utils/metrics/constants.js';\nexport type { BridgeControllerMetricsLocation } from './utils/metrics/constants.js';\n\nexport type {\n AccountHardwareType,\n RequiredEventContextFromClient,\n CrossChainSwapsEventProperties,\n TradeData,\n RequestParams,\n RequestMetadata,\n TxStatusData,\n QuoteFetchData,\n QuoteWarning,\n InputPrimaryDenominationData,\n} from './utils/metrics/types.js';\n\nexport {\n getAccountHardwareType,\n formatProviderLabel,\n getRequestParams,\n getSwapType,\n isHardwareWallet,\n isCustomSlippage,\n getQuotesReceivedProperties,\n} from './utils/metrics/properties.js';\n\nexport type {\n ChainConfiguration,\n L1GasFees,\n NonEvmFees,\n GasMultiplierByChainId,\n FeatureFlagResponse,\n GenericQuoteRequest,\n BatchSellTradesResponse,\n GaslessProperties,\n SimulatedGasFeeLimits,\n Step,\n RefuelData,\n FeeData,\n Intent,\n IntentOrderLike,\n BridgeControllerState,\n InputPrimaryDenomination,\n BridgeControllerAction,\n BridgeControllerActions,\n BridgeControllerEvents,\n BridgeControllerMessenger,\n FeatureFlagsPlatformConfig,\n TxFeeGasLimits,\n TokenFeature,\n QuoteStreamCompleteData,\n BridgeControllerGetStateAction,\n BridgeControllerStateChangeEvent,\n DeepPartial,\n} from './types.js';\n\nexport {\n type QuoteMetadata,\n type TokenAmountValues,\n} from './utils/quote-metadata/types.js';\nexport {\n validateQuoteResponseV1,\n QuoteResponseSchemaV1,\n type QuoteResponseV1,\n} from './validators/quote-response-v1.js';\nexport { mergeQuoteMetadata } from './utils/quote-metadata/merge.js';\n\nexport {\n AssetType,\n SortOrder,\n ChainId,\n RequestStatus,\n StatusTypes,\n} from './types.js';\n\nexport type {\n BridgeControllerUpdateBridgeQuoteRequestParamsAction,\n BridgeControllerFetchQuotesAction,\n BridgeControllerStopPollingForQuotesAction,\n BridgeControllerSetLocationAction,\n BridgeControllerGetLocationAction,\n BridgeControllerSetInputPrimaryDenominationAction,\n BridgeControllerResetStateAction,\n BridgeControllerSetChainIntervalLengthAction,\n BridgeControllerTrackUnifiedSwapBridgeEventAction,\n BridgeControllerUpdateBatchSellTradesAction,\n} from './bridge-controller-method-action-types.js';\n\nexport { AbortReason } from './utils/metrics/constants.js';\n\nexport type {\n TxData,\n BitcoinTradeData,\n TronTradeData,\n StellarTradeData,\n Trade,\n} from './validators/trade.js';\nexport {\n isBitcoinTrade,\n isTronTrade,\n isEvmTxData,\n isStellarTrade,\n} from './validators/trade.js';\nexport {\n validateQuoteResponse,\n type QuoteResponse,\n} from './validators/quote-response.js';\nexport type { Quote } from './validators/quote.js';\nexport { FeeType, DiscountType } from './validators/quote.js';\nexport { ActionTypes } from './validators/step.js';\nexport { toQuoteResponseV1 } from './coercers/quote-response-v2-to-v1.js';\nexport { toQuoteResponseV2 } from './coercers/quote-response-v1-to-v2.js';\n\nexport { toQuoteMetadataV1 } from './utils/quote-metadata/to-quote-metadata-v1.js';\nexport { toQuoteMetadataV2 } from './utils/quote-metadata/to-quote-metadata-v2.js';\n\nexport { sumAmounts } from './utils/number-formatters.js';\nexport { assetIdsMatch } from './utils/assets.js';\n\nexport {\n validateQuoteStreamComplete,\n QuoteStreamCompleteReason,\n} from './validators/quote-stream-complete.js';\nexport { BatchSellTransactionType } from './validators/batch-sell.js';\nexport { AmountsAndAssetSchema } from './validators/amount-and-asset.js';\nexport { TokenFeatureType } from './validators/token-feature.js';\nexport type {\n BridgeAsset,\n BridgeAssetV2,\n MinimalAsset,\n} from './validators/bridge-asset.js';\nexport {\n BridgeAssetSchema,\n validateBridgeAsset,\n validateBridgeAssetV2,\n MinimalAssetSchema,\n BridgeAssetV2Schema,\n BridgeAssetSecurityDataType,\n} from './validators/bridge-asset.js';\nexport { FeatureId } from './validators/feature-flags.js';\nexport { toBridgeAssetV2 } from './coercers/quote-response-v1-to-v2.js';\n\nexport {\n ALLOWED_BRIDGE_CHAIN_IDS,\n BridgeClientId,\n BRIDGE_CONTROLLER_NAME,\n BRIDGE_QUOTE_MAX_ETA_SECONDS,\n BRIDGE_QUOTE_MAX_RETURN_DIFFERENCE_PERCENTAGE,\n BRIDGE_PREFERRED_GAS_ESTIMATE,\n BRIDGE_MM_FEE_RATE,\n REFRESH_INTERVAL_MS,\n DEFAULT_MAX_REFRESH_COUNT,\n DEFAULT_BRIDGE_CONTROLLER_STATE,\n METABRIDGE_CHAIN_TO_ADDRESS_MAP,\n BRIDGE_DEV_API_BASE_URL,\n BRIDGE_UAT_API_BASE_URL,\n BRIDGE_PROD_API_BASE_URL,\n} from './constants/bridge.js';\n\nexport type { AllowedBridgeChainIds } from './constants/bridge.js';\n\nexport {\n /**\n * @deprecated This type should not be used. Use {@link BridgeAsset} instead.\n */\n type SwapsTokenObject,\n /**\n * @deprecated This map should not be used. Use getNativeAssetForChainId\" } instead.\n */\n SWAPS_CHAINID_DEFAULT_TOKEN_MAP,\n} from './constants/tokens.js';\n\nexport {\n SWAPS_API_V2_BASE_URL,\n SWAPS_CONTRACT_ADDRESSES,\n SWAPS_WRAPPED_TOKENS_ADDRESSES,\n ALLOWED_CONTRACT_ADDRESSES,\n} from './constants/swaps.js';\n\nexport {\n MetricsActionType,\n MetricsSwapType,\n} from './utils/metrics/constants.js';\n\nexport {\n isEthUsdt,\n isNativeAddress,\n isSolanaChainId,\n isBitcoinChainId,\n isTronChainId,\n isStellarChainId,\n isNonEvmChainId,\n getNativeAssetForChainId,\n getDefaultBridgeControllerState,\n isCrossChain,\n} from './utils/bridge.js';\n\nexport {\n isValidQuoteRequest,\n isValidBatchSellQuoteRequest,\n} from './validators/quote-request.js';\n\nexport {\n calcSlippagePercentage,\n calcQuoteMetadata,\n} from './utils/quote-metadata/calculators.js';\n\nexport { calcLatestSrcBalance } from './utils/balance.js';\n\nexport {\n fetchBridgeTokens,\n getClientHeaders,\n fetchBridgeQuoteStream,\n} from './utils/fetch.js';\n\nexport { appendFeesToQuotes } from './utils/quote-fees.js';\n\nexport {\n formatChainIdToCaip,\n formatChainIdToHex,\n formatAddressToCaipReference,\n formatAddressToAssetId,\n formatChainIdToDec,\n} from './utils/caip-formatters.js';\n\nexport { extractTradeData } from './utils/trade-utils.js';\n\nexport {\n selectBridgeQuotes,\n selectBatchSellQuotes,\n selectBatchSellTrades,\n selectDefaultSlippagePercentage,\n type BridgeAppState,\n selectExchangeRateByAssetId,\n selectIsQuoteExpired,\n selectBridgeFeatureFlags,\n selectMinimumBalanceForRentExemptionInSOL,\n selectTokenWarnings,\n} from './selectors.js';\n\nexport { DEFAULT_FEATURE_FLAG_CONFIG } from './constants/bridge.js';\n\nexport { getBridgeFeatureFlags } from './utils/feature-flags.js';\n\nexport { BRIDGE_DEFAULT_SLIPPAGE } from './utils/slippage.js';\n\nexport {\n isValidSwapsContractAddress,\n getSwapsContractAddress,\n fetchTokens,\n type SwapsToken,\n} from './utils/swaps.js';\n"]}
|
package/dist/utils/assets.cjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.toExchangeRates = exports.getAssetIdsForToken = void 0;
|
|
3
|
+
exports.assetIdsMatch = exports.toExchangeRates = exports.getAssetIdsForToken = void 0;
|
|
4
|
+
const utils_1 = require("@metamask/utils");
|
|
4
5
|
const bridge_js_1 = require("./bridge.cjs");
|
|
5
6
|
const caip_formatters_js_1 = require("./caip-formatters.cjs");
|
|
6
7
|
const getAssetIdsForToken = (tokenAddress, chainId) => {
|
|
@@ -27,4 +28,16 @@ const toExchangeRates = (currency, pricesByAssetId) => {
|
|
|
27
28
|
return exchangeRates;
|
|
28
29
|
};
|
|
29
30
|
exports.toExchangeRates = toExchangeRates;
|
|
31
|
+
const assetIdsMatch = (assetId1, assetId2) => {
|
|
32
|
+
if (!assetId2 || !assetId1) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
return (assetId1 === assetId2 ||
|
|
36
|
+
((0, utils_1.parseCaipAssetType)(assetId1).chain.namespace ===
|
|
37
|
+
utils_1.KnownCaipNamespace.Eip155 &&
|
|
38
|
+
(0, utils_1.parseCaipAssetType)(assetId2).chain.namespace ===
|
|
39
|
+
utils_1.KnownCaipNamespace.Eip155 &&
|
|
40
|
+
assetId1.toLowerCase() === assetId2.toLowerCase()));
|
|
41
|
+
};
|
|
42
|
+
exports.assetIdsMatch = assetIdsMatch;
|
|
30
43
|
//# sourceMappingURL=assets.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets.cjs","sourceRoot":"","sources":["../../src/utils/assets.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"assets.cjs","sourceRoot":"","sources":["../../src/utils/assets.ts"],"names":[],"mappings":";;;AAAA,2CAAyE;AAIzE,4CAAuD;AACvD,8DAA8D;AAEvD,MAAM,mBAAmB,GAAG,CACjC,YAAoD,EACpD,OAA0C,EAC1C,EAAE;IACF,MAAM,eAAe,GAAoB,EAAE,CAAC;IAE5C,MAAM,OAAO,GAAG,IAAA,2CAAsB,EAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAC9D,IAAI,OAAO,EAAE,CAAC;QACZ,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAA,oCAAwB,EAAC,OAAO,CAAC,EAAE,OAAO;YACxC,eAAe,CAAC,IAAI,CAAC,IAAA,oCAAwB,EAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC,CAAC;AAdW,QAAA,mBAAmB,uBAc9B;AAEK,MAAM,eAAe,GAAG,CAC7B,QAAgB,EAChB,eAEC,EACD,EAAE;IACF,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,MAAM,CAE1D,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE;QAC3B,IAAI,MAAM,EAAE,CAAC;YACX,GAAG,CAAC,OAAwB,CAAC,GAAG;gBAC9B,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC;gBAC9B,eAAe,EAAE,MAAM,CAAC,GAAG;aAC5B,CAAC;QACJ,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,OAAO,aAAa,CAAC;AACvB,CAAC,CAAC;AAlBW,QAAA,eAAe,mBAkB1B;AAEK,MAAM,aAAa,GAAG,CAC3B,QAAwB,EACxB,QAAwB,EACf,EAAE;IACX,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CACL,QAAQ,KAAK,QAAQ;QACrB,CAAC,IAAA,0BAAkB,EAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,SAAS;YAC3C,0BAAkB,CAAC,MAAM;YACzB,IAAA,0BAAkB,EAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,SAAS;gBAC1C,0BAAkB,CAAC,MAAM;YAC3B,QAAQ,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC,CACrD,CAAC;AACJ,CAAC,CAAC;AAhBW,QAAA,aAAa,iBAgBxB","sourcesContent":["import { KnownCaipNamespace, parseCaipAssetType } from '@metamask/utils';\nimport type { CaipAssetType } from '@metamask/utils';\n\nimport type { ExchangeRate, GenericQuoteRequest } from '../types.js';\nimport { getNativeAssetForChainId } from './bridge.js';\nimport { formatAddressToAssetId } from './caip-formatters.js';\n\nexport const getAssetIdsForToken = (\n tokenAddress: GenericQuoteRequest['srcTokenAddress'],\n chainId: GenericQuoteRequest['srcChainId'],\n) => {\n const assetIdsToFetch: CaipAssetType[] = [];\n\n const assetId = formatAddressToAssetId(tokenAddress, chainId);\n if (assetId) {\n assetIdsToFetch.push(assetId);\n getNativeAssetForChainId(chainId)?.assetId &&\n assetIdsToFetch.push(getNativeAssetForChainId(chainId).assetId);\n }\n\n return assetIdsToFetch;\n};\n\nexport const toExchangeRates = (\n currency: string,\n pricesByAssetId: {\n [assetId: CaipAssetType]: { [currency: string]: string } | undefined;\n },\n) => {\n const exchangeRates = Object.entries(pricesByAssetId).reduce<\n Record<CaipAssetType, ExchangeRate>\n >((acc, [assetId, prices]) => {\n if (prices) {\n acc[assetId as CaipAssetType] = {\n exchangeRate: prices[currency],\n usdExchangeRate: prices.usd,\n };\n }\n return acc;\n }, {});\n return exchangeRates;\n};\n\nexport const assetIdsMatch = (\n assetId1?: CaipAssetType,\n assetId2?: CaipAssetType,\n): boolean => {\n if (!assetId2 || !assetId1) {\n return false;\n }\n\n return (\n assetId1 === assetId2 ||\n (parseCaipAssetType(assetId1).chain.namespace ===\n KnownCaipNamespace.Eip155 &&\n parseCaipAssetType(assetId2).chain.namespace ===\n KnownCaipNamespace.Eip155 &&\n assetId1.toLowerCase() === assetId2.toLowerCase())\n );\n};\n"]}
|
package/dist/utils/assets.d.cts
CHANGED
|
@@ -6,4 +6,5 @@ export declare const toExchangeRates: (currency: string, pricesByAssetId: {
|
|
|
6
6
|
[currency: string]: string;
|
|
7
7
|
} | undefined;
|
|
8
8
|
}) => Record<`${string}:${string}/${string}:${string}`, ExchangeRate>;
|
|
9
|
+
export declare const assetIdsMatch: (assetId1?: CaipAssetType, assetId2?: CaipAssetType) => boolean;
|
|
9
10
|
//# sourceMappingURL=assets.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets.d.cts","sourceRoot":"","sources":["../../src/utils/assets.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"assets.d.cts","sourceRoot":"","sources":["../../src/utils/assets.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,wBAAwB;AAErD,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,qBAAoB;AAIrE,eAAO,MAAM,mBAAmB,iBAChB,mBAAmB,CAAC,iBAAiB,CAAC,WAC3C,mBAAmB,CAAC,YAAY,CAAC,gDAY3C,CAAC;AAEF,eAAO,MAAM,eAAe,aAChB,MAAM;;;;qEAiBjB,CAAC;AAEF,eAAO,MAAM,aAAa,cACb,aAAa,aACb,aAAa,KACvB,OAaF,CAAC"}
|
package/dist/utils/assets.d.mts
CHANGED
|
@@ -6,4 +6,5 @@ export declare const toExchangeRates: (currency: string, pricesByAssetId: {
|
|
|
6
6
|
[currency: string]: string;
|
|
7
7
|
} | undefined;
|
|
8
8
|
}) => Record<`${string}:${string}/${string}:${string}`, ExchangeRate>;
|
|
9
|
+
export declare const assetIdsMatch: (assetId1?: CaipAssetType, assetId2?: CaipAssetType) => boolean;
|
|
9
10
|
//# sourceMappingURL=assets.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets.d.mts","sourceRoot":"","sources":["../../src/utils/assets.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"assets.d.mts","sourceRoot":"","sources":["../../src/utils/assets.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,wBAAwB;AAErD,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,qBAAoB;AAIrE,eAAO,MAAM,mBAAmB,iBAChB,mBAAmB,CAAC,iBAAiB,CAAC,WAC3C,mBAAmB,CAAC,YAAY,CAAC,gDAY3C,CAAC;AAEF,eAAO,MAAM,eAAe,aAChB,MAAM;;;;qEAiBjB,CAAC;AAEF,eAAO,MAAM,aAAa,cACb,aAAa,aACb,aAAa,KACvB,OAaF,CAAC"}
|
package/dist/utils/assets.mjs
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { KnownCaipNamespace, parseCaipAssetType } from "@metamask/utils";
|
|
1
2
|
import { getNativeAssetForChainId } from "./bridge.mjs";
|
|
2
3
|
import { formatAddressToAssetId } from "./caip-formatters.mjs";
|
|
3
4
|
export const getAssetIdsForToken = (tokenAddress, chainId) => {
|
|
@@ -22,4 +23,15 @@ export const toExchangeRates = (currency, pricesByAssetId) => {
|
|
|
22
23
|
}, {});
|
|
23
24
|
return exchangeRates;
|
|
24
25
|
};
|
|
26
|
+
export const assetIdsMatch = (assetId1, assetId2) => {
|
|
27
|
+
if (!assetId2 || !assetId1) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
return (assetId1 === assetId2 ||
|
|
31
|
+
(parseCaipAssetType(assetId1).chain.namespace ===
|
|
32
|
+
KnownCaipNamespace.Eip155 &&
|
|
33
|
+
parseCaipAssetType(assetId2).chain.namespace ===
|
|
34
|
+
KnownCaipNamespace.Eip155 &&
|
|
35
|
+
assetId1.toLowerCase() === assetId2.toLowerCase()));
|
|
36
|
+
};
|
|
25
37
|
//# sourceMappingURL=assets.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets.mjs","sourceRoot":"","sources":["../../src/utils/assets.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"assets.mjs","sourceRoot":"","sources":["../../src/utils/assets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,wBAAwB;AAIzE,OAAO,EAAE,wBAAwB,EAAE,qBAAoB;AACvD,OAAO,EAAE,sBAAsB,EAAE,8BAA6B;AAE9D,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,YAAoD,EACpD,OAA0C,EAC1C,EAAE;IACF,MAAM,eAAe,GAAoB,EAAE,CAAC;IAE5C,MAAM,OAAO,GAAG,sBAAsB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAC9D,IAAI,OAAO,EAAE,CAAC;QACZ,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9B,wBAAwB,CAAC,OAAO,CAAC,EAAE,OAAO;YACxC,eAAe,CAAC,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,QAAgB,EAChB,eAEC,EACD,EAAE;IACF,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,MAAM,CAE1D,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE;QAC3B,IAAI,MAAM,EAAE,CAAC;YACX,GAAG,CAAC,OAAwB,CAAC,GAAG;gBAC9B,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC;gBAC9B,eAAe,EAAE,MAAM,CAAC,GAAG;aAC5B,CAAC;QACJ,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,OAAO,aAAa,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,QAAwB,EACxB,QAAwB,EACf,EAAE;IACX,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CACL,QAAQ,KAAK,QAAQ;QACrB,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,SAAS;YAC3C,kBAAkB,CAAC,MAAM;YACzB,kBAAkB,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,SAAS;gBAC1C,kBAAkB,CAAC,MAAM;YAC3B,QAAQ,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC,CACrD,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { KnownCaipNamespace, parseCaipAssetType } from '@metamask/utils';\nimport type { CaipAssetType } from '@metamask/utils';\n\nimport type { ExchangeRate, GenericQuoteRequest } from '../types.js';\nimport { getNativeAssetForChainId } from './bridge.js';\nimport { formatAddressToAssetId } from './caip-formatters.js';\n\nexport const getAssetIdsForToken = (\n tokenAddress: GenericQuoteRequest['srcTokenAddress'],\n chainId: GenericQuoteRequest['srcChainId'],\n) => {\n const assetIdsToFetch: CaipAssetType[] = [];\n\n const assetId = formatAddressToAssetId(tokenAddress, chainId);\n if (assetId) {\n assetIdsToFetch.push(assetId);\n getNativeAssetForChainId(chainId)?.assetId &&\n assetIdsToFetch.push(getNativeAssetForChainId(chainId).assetId);\n }\n\n return assetIdsToFetch;\n};\n\nexport const toExchangeRates = (\n currency: string,\n pricesByAssetId: {\n [assetId: CaipAssetType]: { [currency: string]: string } | undefined;\n },\n) => {\n const exchangeRates = Object.entries(pricesByAssetId).reduce<\n Record<CaipAssetType, ExchangeRate>\n >((acc, [assetId, prices]) => {\n if (prices) {\n acc[assetId as CaipAssetType] = {\n exchangeRate: prices[currency],\n usdExchangeRate: prices.usd,\n };\n }\n return acc;\n }, {});\n return exchangeRates;\n};\n\nexport const assetIdsMatch = (\n assetId1?: CaipAssetType,\n assetId2?: CaipAssetType,\n): boolean => {\n if (!assetId2 || !assetId1) {\n return false;\n }\n\n return (\n assetId1 === assetId2 ||\n (parseCaipAssetType(assetId1).chain.namespace ===\n KnownCaipNamespace.Eip155 &&\n parseCaipAssetType(assetId2).chain.namespace ===\n KnownCaipNamespace.Eip155 &&\n assetId1.toLowerCase() === assetId2.toLowerCase())\n );\n};\n"]}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.sumAmounts = exports.formatEtaInMinutes = exports.calcAtomicTokenAmount = exports.calcNormalizedTokenAmount = void 0;
|
|
4
4
|
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
|
5
5
|
const bignumber_js_1 = require("bignumber.js");
|
|
6
|
+
const assets_js_1 = require("./assets.cjs");
|
|
6
7
|
/**
|
|
7
8
|
* 1500000 -> 1.5
|
|
8
9
|
*
|
|
@@ -63,7 +64,7 @@ const sumAmounts = (...maybeFees) => {
|
|
|
63
64
|
/**
|
|
64
65
|
* Fees and prices can be denominated in different assets, so we need to check if all fees have the same units
|
|
65
66
|
*/
|
|
66
|
-
const isSameAssetForAllFees =
|
|
67
|
+
const isSameAssetForAllFees = fees.reduce((acc, fee) => acc && (0, assets_js_1.assetIdsMatch)(fee.asset?.assetId, fees[0]?.asset?.assetId), true);
|
|
67
68
|
/**
|
|
68
69
|
* Keys that require the asset to be the same for all fees
|
|
69
70
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"number-formatters.cjs","sourceRoot":"","sources":["../../src/utils/number-formatters.ts"],"names":[],"mappings":";;;AAAA,qEAAqE;AACrE,+CAAyC;
|
|
1
|
+
{"version":3,"file":"number-formatters.cjs","sourceRoot":"","sources":["../../src/utils/number-formatters.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport { BigNumber } from 'bignumber.js';\n\nimport type { DeepPartial } from '../types.js';\nimport type { QuoteResponse } from '../validators/quote-response.js';\nimport { assetIdsMatch } from './assets.js';\n\n/**\n * 1500000 -> 1.5\n *\n * @param value - The value to convert to token amount\n * @param decimals - The number of decimals to convert to\n * @returns The token amount in string format\n */\nexport const calcNormalizedTokenAmount = (\n value: string | BigNumber | undefined,\n decimals: number | undefined,\n) => {\n if (value === undefined || decimals === undefined) {\n return undefined;\n }\n const divisor = new BigNumber(10).pow(decimals ?? 0);\n return new BigNumber(value).div(divisor);\n};\n\n/**\n * 1.5 -> 1500000\n *\n * @param value - The amount to convert to token value\n * @param decimals - The number of decimals to convert to\n * @returns The token value in string format\n */\nexport const calcAtomicTokenAmount = (\n value: string | BigNumber | undefined,\n decimals: number | undefined,\n) => {\n if (value === undefined || decimals === undefined) {\n return undefined;\n }\n const divisor = new BigNumber(10).pow(decimals);\n return new BigNumber(value).times(divisor).toFixed();\n};\n\n/**\n * @deprecated No longer used\n * @param estimatedProcessingTimeInSeconds - The estimated processing time in seconds\n * @returns The estimated processing time in minutes\n */\nexport const formatEtaInMinutes = (\n estimatedProcessingTimeInSeconds: number,\n) => {\n if (estimatedProcessingTimeInSeconds < 60) {\n return `< 1`;\n }\n return (estimatedProcessingTimeInSeconds / 60).toFixed();\n};\n\n/**\n * Aggregates a list of amounts into a single fee object. If fees have different assets,\n * the returned object will only aggregate the usd and valueInCurrency values.\n *\n * @param maybeFees - The list of fees to aggregate\n * @returns The aggregated fee object, or null if no fees are provided\n */\nexport const sumAmounts = (\n ...maybeFees: (\n | (DeepPartial<QuoteResponse['quote']['dest']> | undefined | null)[]\n | undefined\n )[]\n): DeepPartial<QuoteResponse['quote']['dest']> | undefined => {\n const fees = maybeFees\n .flat()\n .flat()\n .filter(\n (value): value is Partial<QuoteResponse['quote']['dest']> =>\n value !== undefined && value !== null,\n );\n\n if (!fees || fees.length === 0) {\n return undefined;\n }\n\n /**\n * Fees and prices can be denominated in different assets, so we need to check if all fees have the same units\n */\n const isSameAssetForAllFees = fees.reduce(\n (acc, fee) =>\n acc && assetIdsMatch(fee.asset?.assetId, fees[0]?.asset?.assetId),\n true,\n );\n\n /**\n * Keys that require the asset to be the same for all fees\n */\n const AMOUNT_KEYS = [\n 'amount' as const,\n 'normalizedAmount' as const,\n 'minAmount' as const,\n 'minAmountNormalized' as const,\n ];\n\n /**\n * Keys that can be aggregated across all fees\n */\n const FIAT_OR_USD_KEYS = [\n 'valueInCurrency' as const,\n 'usd' as const,\n 'minAmountValueInCurrency' as const,\n 'minAmountUsd' as const,\n ];\n\n return fees.reduce((acc, fee) => {\n const newAcc = { ...acc };\n if (isSameAssetForAllFees && fee.asset) {\n newAcc.asset = fee.asset;\n }\n\n AMOUNT_KEYS.forEach((key) => {\n const value = fee[key];\n if (value && isSameAssetForAllFees) {\n newAcc[key] = new BigNumber(acc[key] ?? 0).plus(value).toFixed();\n }\n });\n\n FIAT_OR_USD_KEYS.forEach((key) => {\n const value = fee[key];\n if (value) {\n newAcc[key] = new BigNumber(acc[key] ?? 0).plus(value).toFixed();\n }\n });\n\n return newAcc;\n }, {});\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"number-formatters.d.cts","sourceRoot":"","sources":["../../src/utils/number-formatters.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,qBAAqB;AAEzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAoB;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,yCAAwC;
|
|
1
|
+
{"version":3,"file":"number-formatters.d.cts","sourceRoot":"","sources":["../../src/utils/number-formatters.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,qBAAqB;AAEzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAoB;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,yCAAwC;AAGrE;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,UAC7B,MAAM,GAAG,SAAS,GAAG,SAAS,YAC3B,MAAM,GAAG,SAAS,0BAO7B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,UACzB,MAAM,GAAG,SAAS,GAAG,SAAS,YAC3B,MAAM,GAAG,SAAS,uBAO7B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,qCACK,MAAM,WAMzC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,iBACP,CACV,CAAC,YAAY,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,EAAE,GAClE,SAAS,CACZ,EAAE,KACF,YAAY,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,SAgEhD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"number-formatters.d.mts","sourceRoot":"","sources":["../../src/utils/number-formatters.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,qBAAqB;AAEzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAoB;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,yCAAwC;
|
|
1
|
+
{"version":3,"file":"number-formatters.d.mts","sourceRoot":"","sources":["../../src/utils/number-formatters.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,qBAAqB;AAEzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAoB;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,yCAAwC;AAGrE;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,UAC7B,MAAM,GAAG,SAAS,GAAG,SAAS,YAC3B,MAAM,GAAG,SAAS,0BAO7B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,UACzB,MAAM,GAAG,SAAS,GAAG,SAAS,YAC3B,MAAM,GAAG,SAAS,uBAO7B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,qCACK,MAAM,WAMzC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,iBACP,CACV,CAAC,YAAY,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,EAAE,GAClE,SAAS,CACZ,EAAE,KACF,YAAY,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,SAgEhD,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
|
2
2
|
import { BigNumber } from "bignumber.js";
|
|
3
|
+
import { assetIdsMatch } from "./assets.mjs";
|
|
3
4
|
/**
|
|
4
5
|
* 1500000 -> 1.5
|
|
5
6
|
*
|
|
@@ -57,7 +58,7 @@ export const sumAmounts = (...maybeFees) => {
|
|
|
57
58
|
/**
|
|
58
59
|
* Fees and prices can be denominated in different assets, so we need to check if all fees have the same units
|
|
59
60
|
*/
|
|
60
|
-
const isSameAssetForAllFees =
|
|
61
|
+
const isSameAssetForAllFees = fees.reduce((acc, fee) => acc && assetIdsMatch(fee.asset?.assetId, fees[0]?.asset?.assetId), true);
|
|
61
62
|
/**
|
|
62
63
|
* Keys that require the asset to be the same for all fees
|
|
63
64
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"number-formatters.mjs","sourceRoot":"","sources":["../../src/utils/number-formatters.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,OAAO,EAAE,SAAS,EAAE,qBAAqB;
|
|
1
|
+
{"version":3,"file":"number-formatters.mjs","sourceRoot":"","sources":["../../src/utils/number-formatters.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport { BigNumber } from 'bignumber.js';\n\nimport type { DeepPartial } from '../types.js';\nimport type { QuoteResponse } from '../validators/quote-response.js';\nimport { assetIdsMatch } from './assets.js';\n\n/**\n * 1500000 -> 1.5\n *\n * @param value - The value to convert to token amount\n * @param decimals - The number of decimals to convert to\n * @returns The token amount in string format\n */\nexport const calcNormalizedTokenAmount = (\n value: string | BigNumber | undefined,\n decimals: number | undefined,\n) => {\n if (value === undefined || decimals === undefined) {\n return undefined;\n }\n const divisor = new BigNumber(10).pow(decimals ?? 0);\n return new BigNumber(value).div(divisor);\n};\n\n/**\n * 1.5 -> 1500000\n *\n * @param value - The amount to convert to token value\n * @param decimals - The number of decimals to convert to\n * @returns The token value in string format\n */\nexport const calcAtomicTokenAmount = (\n value: string | BigNumber | undefined,\n decimals: number | undefined,\n) => {\n if (value === undefined || decimals === undefined) {\n return undefined;\n }\n const divisor = new BigNumber(10).pow(decimals);\n return new BigNumber(value).times(divisor).toFixed();\n};\n\n/**\n * @deprecated No longer used\n * @param estimatedProcessingTimeInSeconds - The estimated processing time in seconds\n * @returns The estimated processing time in minutes\n */\nexport const formatEtaInMinutes = (\n estimatedProcessingTimeInSeconds: number,\n) => {\n if (estimatedProcessingTimeInSeconds < 60) {\n return `< 1`;\n }\n return (estimatedProcessingTimeInSeconds / 60).toFixed();\n};\n\n/**\n * Aggregates a list of amounts into a single fee object. If fees have different assets,\n * the returned object will only aggregate the usd and valueInCurrency values.\n *\n * @param maybeFees - The list of fees to aggregate\n * @returns The aggregated fee object, or null if no fees are provided\n */\nexport const sumAmounts = (\n ...maybeFees: (\n | (DeepPartial<QuoteResponse['quote']['dest']> | undefined | null)[]\n | undefined\n )[]\n): DeepPartial<QuoteResponse['quote']['dest']> | undefined => {\n const fees = maybeFees\n .flat()\n .flat()\n .filter(\n (value): value is Partial<QuoteResponse['quote']['dest']> =>\n value !== undefined && value !== null,\n );\n\n if (!fees || fees.length === 0) {\n return undefined;\n }\n\n /**\n * Fees and prices can be denominated in different assets, so we need to check if all fees have the same units\n */\n const isSameAssetForAllFees = fees.reduce(\n (acc, fee) =>\n acc && assetIdsMatch(fee.asset?.assetId, fees[0]?.asset?.assetId),\n true,\n );\n\n /**\n * Keys that require the asset to be the same for all fees\n */\n const AMOUNT_KEYS = [\n 'amount' as const,\n 'normalizedAmount' as const,\n 'minAmount' as const,\n 'minAmountNormalized' as const,\n ];\n\n /**\n * Keys that can be aggregated across all fees\n */\n const FIAT_OR_USD_KEYS = [\n 'valueInCurrency' as const,\n 'usd' as const,\n 'minAmountValueInCurrency' as const,\n 'minAmountUsd' as const,\n ];\n\n return fees.reduce((acc, fee) => {\n const newAcc = { ...acc };\n if (isSameAssetForAllFees && fee.asset) {\n newAcc.asset = fee.asset;\n }\n\n AMOUNT_KEYS.forEach((key) => {\n const value = fee[key];\n if (value && isSameAssetForAllFees) {\n newAcc[key] = new BigNumber(acc[key] ?? 0).plus(value).toFixed();\n }\n });\n\n FIAT_OR_USD_KEYS.forEach((key) => {\n const value = fee[key];\n if (value) {\n newAcc[key] = new BigNumber(acc[key] ?? 0).plus(value).toFixed();\n }\n });\n\n return newAcc;\n }, {});\n};\n"]}
|
|
@@ -8,6 +8,7 @@ const bignumber_js_1 = require("bignumber.js");
|
|
|
8
8
|
const quote_response_v2_to_v1_js_1 = require("../../coercers/quote-response-v2-to-v1.cjs");
|
|
9
9
|
const number_js_1 = require("../../validators/number.cjs");
|
|
10
10
|
const quote_response_js_1 = require("../../validators/quote-response.cjs");
|
|
11
|
+
const assets_js_1 = require("../assets.cjs");
|
|
11
12
|
const bridge_js_1 = require("../bridge.cjs");
|
|
12
13
|
const number_formatters_js_1 = require("../number-formatters.cjs");
|
|
13
14
|
const calcNonEvmTotalNetworkFee = (bridgeQuote, { exchangeRate, usdExchangeRate }) => {
|
|
@@ -42,8 +43,7 @@ const calcSentAmount = ({ srcTokenAmount, srcAsset, feeData, intent }, { exchang
|
|
|
42
43
|
? new bignumber_js_1.BigNumber(srcTokenAmount)
|
|
43
44
|
: Object.values(feeData)
|
|
44
45
|
.filter((fee) => fee?.amount &&
|
|
45
|
-
fee.asset?.assetId
|
|
46
|
-
srcAsset.assetId?.toLowerCase())
|
|
46
|
+
(0, assets_js_1.assetIdsMatch)(fee.asset?.assetId, srcAsset.assetId))
|
|
47
47
|
.reduce((acc, { amount }) => acc.plus(amount), new bignumber_js_1.BigNumber(srcTokenAmount));
|
|
48
48
|
const normalizedSentAmount = (0, number_formatters_js_1.calcNormalizedTokenAmount)(sentAmount, srcAsset.decimals);
|
|
49
49
|
return {
|
|
@@ -168,7 +168,7 @@ const calcIncludedTxFees = ({ gasIncluded, gasIncluded7702, srcAsset, feeData: {
|
|
|
168
168
|
return undefined;
|
|
169
169
|
}
|
|
170
170
|
// Use exchange rate of the token that is being used to pay for the transaction
|
|
171
|
-
const { exchangeRate, usdExchangeRate } = txFee?.asset
|
|
171
|
+
const { exchangeRate, usdExchangeRate } = (0, assets_js_1.assetIdsMatch)(txFee?.asset?.assetId, srcAsset.assetId)
|
|
172
172
|
? srcTokenExchangeRate
|
|
173
173
|
: destTokenExchangeRate;
|
|
174
174
|
const normalizedTxFeeAmount = (0, number_formatters_js_1.calcNormalizedTokenAmount)(txFee?.amount, txFee?.asset.decimals);
|
|
@@ -182,7 +182,7 @@ const calcIncludedTxFees = ({ gasIncluded, gasIncluded7702, srcAsset, feeData: {
|
|
|
182
182
|
exports.calcIncludedTxFees = calcIncludedTxFees;
|
|
183
183
|
const calcAdjustedReturn = (toTokenAmount, totalEstimatedNetworkFee, { feeData: { txFee }, destAsset: { assetId: destAssetId }, }) => {
|
|
184
184
|
// If gas is included and is taken from the dest token, don't subtract network fee from return
|
|
185
|
-
if (txFee?.asset?.assetId
|
|
185
|
+
if ((0, assets_js_1.assetIdsMatch)(txFee?.asset?.assetId, destAssetId)) {
|
|
186
186
|
return {
|
|
187
187
|
valueInCurrency: toTokenAmount.valueInCurrency,
|
|
188
188
|
usd: toTokenAmount.usd,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calculators.cjs","sourceRoot":"","sources":["../../../src/utils/quote-metadata/calculators.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport {\n convertHexToDecimal,\n toHex,\n weiHexToGweiDec,\n} from '@metamask/controller-utils';\nimport { is } from '@metamask/superstruct';\nimport { BigNumber } from 'bignumber.js';\n\nimport { toQuoteResponseV1 } from '../../coercers/quote-response-v2-to-v1.js';\nimport type {\n L1GasFees,\n ExchangeRate,\n NonEvmFees,\n DeepPartial,\n} from '../../types.js';\nimport type { BridgeAsset } from '../../validators/bridge-asset.js';\nimport { FloatStringSchema } from '../../validators/number.js';\nimport type { QuoteResponseV1 } from '../../validators/quote-response-v1.js';\nimport { QuoteResponseSchemaV2 } from '../../validators/quote-response.js';\nimport type { QuoteResponse } from '../../validators/quote-response.js';\nimport type { TxData } from '../../validators/trade.js';\nimport { isEvmQuoteResponse, isNativeAddress } from '../bridge.js';\nimport { calcNormalizedTokenAmount } from '../number-formatters.js';\nimport type { QuoteMetadata, TokenAmountValues } from './types.js';\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 = nonEvmFeesInNative\n ? new BigNumber(nonEvmFeesInNative)\n : undefined;\n\n return {\n amount: feeInNative?.toFixed(),\n valueInCurrency: exchangeRate && feeInNative?.times(exchangeRate).toFixed(),\n usd: usdExchangeRate && feeInNative?.times(usdExchangeRate).toFixed(),\n };\n};\n\nexport const calcToAmount = (\n destTokenAmount: string | undefined,\n destAsset: BridgeAsset,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const normalizedDestAmount = calcNormalizedTokenAmount(\n destTokenAmount,\n destAsset.decimals,\n );\n return {\n amount: normalizedDestAmount?.toFixed(),\n valueInCurrency:\n exchangeRate && normalizedDestAmount?.times(exchangeRate).toFixed(),\n usd:\n usdExchangeRate && normalizedDestAmount?.times(usdExchangeRate).toFixed(),\n };\n};\n\nexport const calcSentAmount = (\n { srcTokenAmount, srcAsset, feeData, intent }: QuoteResponseV1['quote'],\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n isQuoteV2: boolean = false,\n) => {\n // For intent-based swaps or converted V2 quote responses, 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 =\n intent || isQuoteV2\n ? new BigNumber(srcTokenAmount)\n : Object.values(feeData)\n .filter(\n (fee) =>\n fee?.amount &&\n fee.asset?.assetId?.toLowerCase() ===\n srcAsset.assetId?.toLowerCase(),\n )\n .reduce(\n (acc, { amount }) => acc.plus(amount),\n new BigNumber(srcTokenAmount),\n );\n const normalizedSentAmount = calcNormalizedTokenAmount(\n sentAmount,\n srcAsset.decimals,\n );\n return {\n amount: normalizedSentAmount?.toFixed(),\n valueInCurrency:\n exchangeRate && normalizedSentAmount?.times(exchangeRate).toFixed(),\n usd:\n usdExchangeRate && normalizedSentAmount?.times(usdExchangeRate).toFixed(),\n };\n};\n\nexport const calcBatchFees = (\n amount: string,\n asset: BridgeAsset,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const normalizedAmount = calcNormalizedTokenAmount(amount, asset.decimals);\n\n return {\n amount: normalizedAmount?.toFixed(),\n valueInCurrency: exchangeRate\n ? normalizedAmount?.times(exchangeRate).toFixed()\n : null,\n usd: usdExchangeRate\n ? normalizedAmount?.times(usdExchangeRate).toFixed()\n : null,\n asset,\n };\n};\n\nexport const calcRelayerFee = (\n sentAmount: ReturnType<typeof calcSentAmount>,\n quoteResponse: QuoteResponseV1<TxData>,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const { quote, trade } = quoteResponse;\n const relayerFeeAmount = trade.value\n ? new BigNumber(convertHexToDecimal(trade.value))\n : undefined;\n let relayerFeeInNative = relayerFeeAmount\n ? calcNormalizedTokenAmount(relayerFeeAmount, 18)\n : undefined;\n\n // Subtract srcAmount and other fees from trade value if srcAsset is native\n if (isNativeAddress(quote.srcAsset.assetId)) {\n relayerFeeInNative = relayerFeeInNative?.minus(sentAmount.amount ?? '0');\n }\n\n if (relayerFeeInNative?.lte(0)) {\n return undefined;\n }\n\n return {\n amount: relayerFeeInNative?.toFixed(),\n valueInCurrency:\n exchangeRate && relayerFeeInNative?.times(exchangeRate).toFixed(),\n usd:\n usdExchangeRate && relayerFeeInNative?.times(usdExchangeRate).toFixed(),\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 =\n tradeGasLimit || approvalGasLimit || resetApprovalGasLimit\n ? new BigNumber(tradeGasLimit?.toFixed() ?? '0')\n .plus(approvalGasLimit?.toFixed() ?? '0')\n .plus(resetApprovalGasLimit?.toFixed() ?? '0')\n : undefined;\n\n const l1GasFeesInDecGWei = l1GasFeesInHexWei\n ? weiHexToGweiDec(toHex(l1GasFeesInHexWei))\n : undefined;\n\n const gasFeesInDecGwei = totalGasLimitInDec\n ? totalGasLimitInDec\n ?.times(feePerGasInDecGwei ?? '0')\n ?.plus(l1GasFeesInDecGWei ?? '0')\n : undefined;\n const gasFeesInDecEth = gasFeesInDecGwei?.times(new BigNumber(10).pow(-9));\n\n const gasFeesInDisplayCurrency = nativeToDisplayCurrencyExchangeRate\n ? gasFeesInDecEth?.times(nativeToDisplayCurrencyExchangeRate)\n : undefined;\n const gasFeesInUSD = nativeToUsdExchangeRate\n ? gasFeesInDecEth?.times(nativeToUsdExchangeRate)\n : undefined;\n\n return {\n amount: gasFeesInDecEth?.toFixed(),\n valueInCurrency: gasFeesInDisplayCurrency?.toFixed(),\n usd: gasFeesInUSD?.toFixed(),\n };\n};\n\nexport const calcEstimatedAndMaxTotalGasFee = ({\n bridgeQuote: { approval, trade, l1GasFeesInHexWei, resetApproval },\n feePerGasInDecGwei,\n exchangeRate: nativeToDisplayCurrencyExchangeRate,\n usdExchangeRate: nativeToUsdExchangeRate,\n}: {\n bridgeQuote: QuoteResponseV1<TxData, TxData> & L1GasFees;\n feePerGasInDecGwei?: string;\n} & ExchangeRate) => {\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 return {\n total: {\n amount,\n valueInCurrency,\n usd,\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 gasFee: { total?: Partial<TokenAmountValues> } | undefined,\n relayerFee: ReturnType<typeof calcRelayerFee>,\n) => {\n const { total: gasFeeToDisplay } = gasFee ?? {};\n return {\n amount:\n (gasFeeToDisplay?.amount ?? relayerFee?.amount) &&\n new BigNumber(gasFeeToDisplay?.amount ?? '0')\n .plus(relayerFee?.amount ?? '0')\n .toFixed(),\n valueInCurrency:\n (gasFeeToDisplay?.valueInCurrency ?? relayerFee?.valueInCurrency) &&\n new BigNumber(gasFeeToDisplay?.valueInCurrency ?? '0')\n .plus(relayerFee?.valueInCurrency ?? '0')\n .toFixed(),\n usd:\n (gasFeeToDisplay?.usd ?? relayerFee?.usd) &&\n new BigNumber(gasFeeToDisplay?.usd ?? '0')\n .plus(relayerFee?.usd ?? '0')\n .toFixed(),\n };\n};\n\n// Gas is included for some swap quotes and this is the value displayed in the client\nexport const calcIncludedTxFees = (\n {\n gasIncluded,\n gasIncluded7702,\n srcAsset,\n feeData: { txFee },\n }: QuoteResponseV1['quote'],\n srcTokenExchangeRate: ExchangeRate,\n destTokenExchangeRate: ExchangeRate,\n) => {\n if (!txFee || !(gasIncluded || gasIncluded7702)) {\n return undefined;\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 = calcNormalizedTokenAmount(\n txFee?.amount,\n txFee?.asset.decimals,\n );\n\n return {\n amount: normalizedTxFeeAmount?.toFixed(),\n valueInCurrency:\n exchangeRate && normalizedTxFeeAmount?.times(exchangeRate).toFixed(),\n usd:\n usdExchangeRate &&\n normalizedTxFeeAmount?.times(usdExchangeRate).toFixed(),\n };\n};\n\nexport const calcAdjustedReturn = (\n toTokenAmount: Partial<TokenAmountValues>,\n totalEstimatedNetworkFee: Partial<TokenAmountValues>,\n {\n feeData: { txFee },\n destAsset: { assetId: destAssetId },\n }: QuoteResponseV1['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?.toLowerCase() === destAssetId.toLowerCase()) {\n return {\n valueInCurrency: toTokenAmount.valueInCurrency,\n usd: toTokenAmount.usd,\n };\n }\n return {\n valueInCurrency:\n toTokenAmount.valueInCurrency &&\n totalEstimatedNetworkFee.valueInCurrency &&\n new BigNumber(toTokenAmount.valueInCurrency)\n .minus(totalEstimatedNetworkFee.valueInCurrency)\n .toFixed(),\n usd:\n toTokenAmount.usd &&\n totalEstimatedNetworkFee.usd &&\n new BigNumber(toTokenAmount.usd)\n .minus(totalEstimatedNetworkFee.usd)\n .toFixed(),\n };\n};\n\nexport const calcSwapRate = (sentAmount?: string, destTokenAmount?: string) =>\n destTokenAmount && sentAmount\n ? new BigNumber(destTokenAmount).div(sentAmount).toFixed()\n : undefined;\n\nexport const calcCost = (\n adjustedReturn: ReturnType<typeof calcAdjustedReturn>,\n sentAmount: ReturnType<typeof calcSentAmount>,\n) => ({\n valueInCurrency:\n adjustedReturn.valueInCurrency &&\n sentAmount.valueInCurrency &&\n new BigNumber(sentAmount.valueInCurrency)\n .minus(adjustedReturn.valueInCurrency)\n .toFixed(),\n usd:\n adjustedReturn.usd &&\n sentAmount.usd &&\n new BigNumber(sentAmount.usd).minus(adjustedReturn.usd).toFixed(),\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 .toFixed();\n }\n\n if (cost.usd && sentAmount.usd) {\n return new BigNumber(cost.usd)\n .div(sentAmount.usd)\n .times(100)\n .abs()\n .toFixed();\n }\n\n return null;\n};\n\n/**\n * Returns the fiat price impact for a bridge quote — the difference between\n * the source input fiat amount and the destination output fiat amount\n *\n * @param quote - The active quote\n * @returns Formatted fiat impact string, or `undefined` when either fiat value is unavailable.\n */\nexport const calcPriceImpact = (\n quote?: DeepPartial<\n Pick<QuoteMetadata, 'sentAmount' | 'toTokenAmount'>\n > | null,\n) => {\n if (!quote?.sentAmount || !quote?.toTokenAmount) {\n return undefined;\n }\n\n const sourceFiat = quote.sentAmount.valueInCurrency;\n const destFiat = quote.toTokenAmount.valueInCurrency;\n const sourceUsd = quote.sentAmount.usd;\n const destUsd = quote.toTokenAmount.usd;\n\n const isSourceFiatValid = (value: unknown): value is string[] =>\n is(value, FloatStringSchema);\n\n const valueInCurrency =\n isSourceFiatValid(sourceFiat) && isSourceFiatValid(destFiat)\n ? new BigNumber(sourceFiat).minus(destFiat).abs().toFixed()\n : undefined;\n const usd =\n isSourceFiatValid(sourceUsd) && isSourceFiatValid(destUsd)\n ? new BigNumber(sourceUsd).minus(destUsd).abs().toFixed()\n : undefined;\n\n if (!valueInCurrency && !usd) {\n return undefined;\n }\n\n return {\n valueInCurrency,\n usd,\n };\n};\n\n/**\n * Calculates quote metadata, such as converted fiat amounts and fees,\n * based on the controller state and the quote response\n *\n * @param quote - The quote response to calculate the metadata for\n * @param options - The options for the calculation\n * @param options.bridgeFeesPerGas - The bridge fees per gas\n * @param options.srcTokenExchangeRate - The exchange rate for the source token\n * @param options.destTokenExchangeRate - The exchange rate for the destination token\n * @param options.nativeExchangeRate - The exchange rate for the native token\n * @returns The calculated metadata\n */\nexport const calcQuoteMetadata = (\n quote: QuoteResponseV1 | QuoteResponse,\n options: {\n bridgeFeesPerGas: null | {\n estimatedBaseFeeInDecGwei: string | null;\n feePerGasInDecGwei?: string;\n };\n srcTokenExchangeRate: ExchangeRate;\n destTokenExchangeRate: ExchangeRate;\n nativeExchangeRate: ExchangeRate;\n },\n): QuoteMetadata => {\n const {\n bridgeFeesPerGas = {},\n srcTokenExchangeRate = {},\n destTokenExchangeRate = {},\n nativeExchangeRate = {},\n } = options;\n\n const isQuoteV2 = is(quote, QuoteResponseSchemaV2);\n const quoteV1 = isQuoteV2 ? toQuoteResponseV1(quote) : quote;\n\n const sentAmount = calcSentAmount(\n quoteV1.quote,\n srcTokenExchangeRate,\n isQuoteV2,\n );\n\n const toTokenAmount = calcToAmount(\n quoteV1.quote.destTokenAmount,\n quoteV1.quote.destAsset,\n destTokenExchangeRate,\n );\n const minToTokenAmount = calcToAmount(\n quoteV1.quote.minDestTokenAmount ?? quoteV1.quote.destTokenAmount,\n quoteV1.quote.destAsset,\n destTokenExchangeRate,\n );\n\n const includedTxFees = calcIncludedTxFees(\n quoteV1.quote,\n srcTokenExchangeRate,\n destTokenExchangeRate,\n );\n\n let totalEstimatedNetworkFee, relayerFee, gasFee;\n\n if (isEvmQuoteResponse(quoteV1)) {\n relayerFee = calcRelayerFee(sentAmount, quoteV1, nativeExchangeRate);\n gasFee = calcEstimatedAndMaxTotalGasFee({\n bridgeQuote: quoteV1,\n ...bridgeFeesPerGas,\n ...nativeExchangeRate,\n });\n // Uses total gasFee to calculate the total estimated network fee\n totalEstimatedNetworkFee = calcTotalEstimatedNetworkFee(gasFee, relayerFee);\n } else {\n // Use the new generic function for all non-EVM chains\n totalEstimatedNetworkFee = calcNonEvmTotalNetworkFee(\n quoteV1,\n nativeExchangeRate,\n );\n gasFee = {\n total: totalEstimatedNetworkFee,\n };\n }\n\n const adjustedReturn = calcAdjustedReturn(\n toTokenAmount,\n totalEstimatedNetworkFee,\n quoteV1.quote,\n );\n const cost = calcCost(adjustedReturn, sentAmount);\n\n // The quote has not been updated at this point, so we need to calculate the price impact using sentAmount and toTokenAmount\n const priceImpact = calcPriceImpact({ sentAmount, toTokenAmount });\n\n return {\n sentAmount,\n toTokenAmount,\n minToTokenAmount,\n swapRate: calcSwapRate(sentAmount.amount, toTokenAmount.amount),\n /**\n This is the amount required to submit all the transactions.\n Includes the relayer fee or other native fees.\n Should be used for balance checks and tx submission.\n */\n totalNetworkFee: totalEstimatedNetworkFee,\n /**\n This contains gas fee estimates for the bridge transaction\n Does not include the relayer fee (if needed), just the gasLimit and effectiveGas returned by the bridge API.\n Should only be used for display purposes.\n */\n gasFee,\n ...(adjustedReturn &&\n Object.values(adjustedReturn).some(Boolean) && { adjustedReturn }),\n ...(cost && Object.values(cost).some(Boolean) && { cost }),\n ...(includedTxFees &&\n Object.values(includedTxFees).some(Boolean) && { includedTxFees }),\n ...(relayerFee &&\n Object.values(relayerFee).some(Boolean) && { relayerFee }),\n ...(priceImpact &&\n Object.values(priceImpact).some(Boolean) && {\n priceImpact,\n }),\n };\n};\n"]}
|
|
1
|
+
{"version":3,"file":"calculators.cjs","sourceRoot":"","sources":["../../../src/utils/quote-metadata/calculators.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport {\n convertHexToDecimal,\n toHex,\n weiHexToGweiDec,\n} from '@metamask/controller-utils';\nimport { is } from '@metamask/superstruct';\nimport { BigNumber } from 'bignumber.js';\n\nimport { toQuoteResponseV1 } from '../../coercers/quote-response-v2-to-v1.js';\nimport type {\n L1GasFees,\n ExchangeRate,\n NonEvmFees,\n DeepPartial,\n} from '../../types.js';\nimport type { BridgeAsset } from '../../validators/bridge-asset.js';\nimport { FloatStringSchema } from '../../validators/number.js';\nimport type { QuoteResponseV1 } from '../../validators/quote-response-v1.js';\nimport { QuoteResponseSchemaV2 } from '../../validators/quote-response.js';\nimport type { QuoteResponse } from '../../validators/quote-response.js';\nimport type { TxData } from '../../validators/trade.js';\nimport { assetIdsMatch } from '../assets.js';\nimport { isEvmQuoteResponse, isNativeAddress } from '../bridge.js';\nimport { calcNormalizedTokenAmount } from '../number-formatters.js';\nimport type { QuoteMetadata, TokenAmountValues } from './types.js';\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 = nonEvmFeesInNative\n ? new BigNumber(nonEvmFeesInNative)\n : undefined;\n\n return {\n amount: feeInNative?.toFixed(),\n valueInCurrency: exchangeRate && feeInNative?.times(exchangeRate).toFixed(),\n usd: usdExchangeRate && feeInNative?.times(usdExchangeRate).toFixed(),\n };\n};\n\nexport const calcToAmount = (\n destTokenAmount: string | undefined,\n destAsset: BridgeAsset,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const normalizedDestAmount = calcNormalizedTokenAmount(\n destTokenAmount,\n destAsset.decimals,\n );\n return {\n amount: normalizedDestAmount?.toFixed(),\n valueInCurrency:\n exchangeRate && normalizedDestAmount?.times(exchangeRate).toFixed(),\n usd:\n usdExchangeRate && normalizedDestAmount?.times(usdExchangeRate).toFixed(),\n };\n};\n\nexport const calcSentAmount = (\n { srcTokenAmount, srcAsset, feeData, intent }: QuoteResponseV1['quote'],\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n isQuoteV2: boolean = false,\n) => {\n // For intent-based swaps or converted V2 quote responses, 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 =\n intent || isQuoteV2\n ? new BigNumber(srcTokenAmount)\n : Object.values(feeData)\n .filter(\n (fee) =>\n fee?.amount &&\n assetIdsMatch(fee.asset?.assetId, srcAsset.assetId),\n )\n .reduce(\n (acc, { amount }) => acc.plus(amount),\n new BigNumber(srcTokenAmount),\n );\n const normalizedSentAmount = calcNormalizedTokenAmount(\n sentAmount,\n srcAsset.decimals,\n );\n return {\n amount: normalizedSentAmount?.toFixed(),\n valueInCurrency:\n exchangeRate && normalizedSentAmount?.times(exchangeRate).toFixed(),\n usd:\n usdExchangeRate && normalizedSentAmount?.times(usdExchangeRate).toFixed(),\n };\n};\n\nexport const calcBatchFees = (\n amount: string,\n asset: BridgeAsset,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const normalizedAmount = calcNormalizedTokenAmount(amount, asset.decimals);\n\n return {\n amount: normalizedAmount?.toFixed(),\n valueInCurrency: exchangeRate\n ? normalizedAmount?.times(exchangeRate).toFixed()\n : null,\n usd: usdExchangeRate\n ? normalizedAmount?.times(usdExchangeRate).toFixed()\n : null,\n asset,\n };\n};\n\nexport const calcRelayerFee = (\n sentAmount: ReturnType<typeof calcSentAmount>,\n quoteResponse: QuoteResponseV1<TxData>,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const { quote, trade } = quoteResponse;\n const relayerFeeAmount = trade.value\n ? new BigNumber(convertHexToDecimal(trade.value))\n : undefined;\n let relayerFeeInNative = relayerFeeAmount\n ? calcNormalizedTokenAmount(relayerFeeAmount, 18)\n : undefined;\n\n // Subtract srcAmount and other fees from trade value if srcAsset is native\n if (isNativeAddress(quote.srcAsset.assetId)) {\n relayerFeeInNative = relayerFeeInNative?.minus(sentAmount.amount ?? '0');\n }\n\n if (relayerFeeInNative?.lte(0)) {\n return undefined;\n }\n\n return {\n amount: relayerFeeInNative?.toFixed(),\n valueInCurrency:\n exchangeRate && relayerFeeInNative?.times(exchangeRate).toFixed(),\n usd:\n usdExchangeRate && relayerFeeInNative?.times(usdExchangeRate).toFixed(),\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 =\n tradeGasLimit || approvalGasLimit || resetApprovalGasLimit\n ? new BigNumber(tradeGasLimit?.toFixed() ?? '0')\n .plus(approvalGasLimit?.toFixed() ?? '0')\n .plus(resetApprovalGasLimit?.toFixed() ?? '0')\n : undefined;\n\n const l1GasFeesInDecGWei = l1GasFeesInHexWei\n ? weiHexToGweiDec(toHex(l1GasFeesInHexWei))\n : undefined;\n\n const gasFeesInDecGwei = totalGasLimitInDec\n ? totalGasLimitInDec\n ?.times(feePerGasInDecGwei ?? '0')\n ?.plus(l1GasFeesInDecGWei ?? '0')\n : undefined;\n const gasFeesInDecEth = gasFeesInDecGwei?.times(new BigNumber(10).pow(-9));\n\n const gasFeesInDisplayCurrency = nativeToDisplayCurrencyExchangeRate\n ? gasFeesInDecEth?.times(nativeToDisplayCurrencyExchangeRate)\n : undefined;\n const gasFeesInUSD = nativeToUsdExchangeRate\n ? gasFeesInDecEth?.times(nativeToUsdExchangeRate)\n : undefined;\n\n return {\n amount: gasFeesInDecEth?.toFixed(),\n valueInCurrency: gasFeesInDisplayCurrency?.toFixed(),\n usd: gasFeesInUSD?.toFixed(),\n };\n};\n\nexport const calcEstimatedAndMaxTotalGasFee = ({\n bridgeQuote: { approval, trade, l1GasFeesInHexWei, resetApproval },\n feePerGasInDecGwei,\n exchangeRate: nativeToDisplayCurrencyExchangeRate,\n usdExchangeRate: nativeToUsdExchangeRate,\n}: {\n bridgeQuote: QuoteResponseV1<TxData, TxData> & L1GasFees;\n feePerGasInDecGwei?: string;\n} & ExchangeRate) => {\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 return {\n total: {\n amount,\n valueInCurrency,\n usd,\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 gasFee: { total?: Partial<TokenAmountValues> } | undefined,\n relayerFee: ReturnType<typeof calcRelayerFee>,\n) => {\n const { total: gasFeeToDisplay } = gasFee ?? {};\n return {\n amount:\n (gasFeeToDisplay?.amount ?? relayerFee?.amount) &&\n new BigNumber(gasFeeToDisplay?.amount ?? '0')\n .plus(relayerFee?.amount ?? '0')\n .toFixed(),\n valueInCurrency:\n (gasFeeToDisplay?.valueInCurrency ?? relayerFee?.valueInCurrency) &&\n new BigNumber(gasFeeToDisplay?.valueInCurrency ?? '0')\n .plus(relayerFee?.valueInCurrency ?? '0')\n .toFixed(),\n usd:\n (gasFeeToDisplay?.usd ?? relayerFee?.usd) &&\n new BigNumber(gasFeeToDisplay?.usd ?? '0')\n .plus(relayerFee?.usd ?? '0')\n .toFixed(),\n };\n};\n\n// Gas is included for some swap quotes and this is the value displayed in the client\nexport const calcIncludedTxFees = (\n {\n gasIncluded,\n gasIncluded7702,\n srcAsset,\n feeData: { txFee },\n }: QuoteResponseV1['quote'],\n srcTokenExchangeRate: ExchangeRate,\n destTokenExchangeRate: ExchangeRate,\n) => {\n if (!txFee || !(gasIncluded || gasIncluded7702)) {\n return undefined;\n }\n // Use exchange rate of the token that is being used to pay for the transaction\n const { exchangeRate, usdExchangeRate } = assetIdsMatch(\n txFee?.asset?.assetId,\n srcAsset.assetId,\n )\n ? srcTokenExchangeRate\n : destTokenExchangeRate;\n const normalizedTxFeeAmount = calcNormalizedTokenAmount(\n txFee?.amount,\n txFee?.asset.decimals,\n );\n\n return {\n amount: normalizedTxFeeAmount?.toFixed(),\n valueInCurrency:\n exchangeRate && normalizedTxFeeAmount?.times(exchangeRate).toFixed(),\n usd:\n usdExchangeRate &&\n normalizedTxFeeAmount?.times(usdExchangeRate).toFixed(),\n };\n};\n\nexport const calcAdjustedReturn = (\n toTokenAmount: Partial<TokenAmountValues>,\n totalEstimatedNetworkFee: Partial<TokenAmountValues>,\n {\n feeData: { txFee },\n destAsset: { assetId: destAssetId },\n }: QuoteResponseV1['quote'],\n) => {\n // If gas is included and is taken from the dest token, don't subtract network fee from return\n if (assetIdsMatch(txFee?.asset?.assetId, destAssetId)) {\n return {\n valueInCurrency: toTokenAmount.valueInCurrency,\n usd: toTokenAmount.usd,\n };\n }\n return {\n valueInCurrency:\n toTokenAmount.valueInCurrency &&\n totalEstimatedNetworkFee.valueInCurrency &&\n new BigNumber(toTokenAmount.valueInCurrency)\n .minus(totalEstimatedNetworkFee.valueInCurrency)\n .toFixed(),\n usd:\n toTokenAmount.usd &&\n totalEstimatedNetworkFee.usd &&\n new BigNumber(toTokenAmount.usd)\n .minus(totalEstimatedNetworkFee.usd)\n .toFixed(),\n };\n};\n\nexport const calcSwapRate = (sentAmount?: string, destTokenAmount?: string) =>\n destTokenAmount && sentAmount\n ? new BigNumber(destTokenAmount).div(sentAmount).toFixed()\n : undefined;\n\nexport const calcCost = (\n adjustedReturn: ReturnType<typeof calcAdjustedReturn>,\n sentAmount: ReturnType<typeof calcSentAmount>,\n) => ({\n valueInCurrency:\n adjustedReturn.valueInCurrency &&\n sentAmount.valueInCurrency &&\n new BigNumber(sentAmount.valueInCurrency)\n .minus(adjustedReturn.valueInCurrency)\n .toFixed(),\n usd:\n adjustedReturn.usd &&\n sentAmount.usd &&\n new BigNumber(sentAmount.usd).minus(adjustedReturn.usd).toFixed(),\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 .toFixed();\n }\n\n if (cost.usd && sentAmount.usd) {\n return new BigNumber(cost.usd)\n .div(sentAmount.usd)\n .times(100)\n .abs()\n .toFixed();\n }\n\n return null;\n};\n\n/**\n * Returns the fiat price impact for a bridge quote — the difference between\n * the source input fiat amount and the destination output fiat amount\n *\n * @param quote - The active quote\n * @returns Formatted fiat impact string, or `undefined` when either fiat value is unavailable.\n */\nexport const calcPriceImpact = (\n quote?: DeepPartial<\n Pick<QuoteMetadata, 'sentAmount' | 'toTokenAmount'>\n > | null,\n) => {\n if (!quote?.sentAmount || !quote?.toTokenAmount) {\n return undefined;\n }\n\n const sourceFiat = quote.sentAmount.valueInCurrency;\n const destFiat = quote.toTokenAmount.valueInCurrency;\n const sourceUsd = quote.sentAmount.usd;\n const destUsd = quote.toTokenAmount.usd;\n\n const isSourceFiatValid = (value: unknown): value is string[] =>\n is(value, FloatStringSchema);\n\n const valueInCurrency =\n isSourceFiatValid(sourceFiat) && isSourceFiatValid(destFiat)\n ? new BigNumber(sourceFiat).minus(destFiat).abs().toFixed()\n : undefined;\n const usd =\n isSourceFiatValid(sourceUsd) && isSourceFiatValid(destUsd)\n ? new BigNumber(sourceUsd).minus(destUsd).abs().toFixed()\n : undefined;\n\n if (!valueInCurrency && !usd) {\n return undefined;\n }\n\n return {\n valueInCurrency,\n usd,\n };\n};\n\n/**\n * Calculates quote metadata, such as converted fiat amounts and fees,\n * based on the controller state and the quote response\n *\n * @param quote - The quote response to calculate the metadata for\n * @param options - The options for the calculation\n * @param options.bridgeFeesPerGas - The bridge fees per gas\n * @param options.srcTokenExchangeRate - The exchange rate for the source token\n * @param options.destTokenExchangeRate - The exchange rate for the destination token\n * @param options.nativeExchangeRate - The exchange rate for the native token\n * @returns The calculated metadata\n */\nexport const calcQuoteMetadata = (\n quote: QuoteResponseV1 | QuoteResponse,\n options: {\n bridgeFeesPerGas: null | {\n estimatedBaseFeeInDecGwei: string | null;\n feePerGasInDecGwei?: string;\n };\n srcTokenExchangeRate: ExchangeRate;\n destTokenExchangeRate: ExchangeRate;\n nativeExchangeRate: ExchangeRate;\n },\n): QuoteMetadata => {\n const {\n bridgeFeesPerGas = {},\n srcTokenExchangeRate = {},\n destTokenExchangeRate = {},\n nativeExchangeRate = {},\n } = options;\n\n const isQuoteV2 = is(quote, QuoteResponseSchemaV2);\n const quoteV1 = isQuoteV2 ? toQuoteResponseV1(quote) : quote;\n\n const sentAmount = calcSentAmount(\n quoteV1.quote,\n srcTokenExchangeRate,\n isQuoteV2,\n );\n\n const toTokenAmount = calcToAmount(\n quoteV1.quote.destTokenAmount,\n quoteV1.quote.destAsset,\n destTokenExchangeRate,\n );\n const minToTokenAmount = calcToAmount(\n quoteV1.quote.minDestTokenAmount ?? quoteV1.quote.destTokenAmount,\n quoteV1.quote.destAsset,\n destTokenExchangeRate,\n );\n\n const includedTxFees = calcIncludedTxFees(\n quoteV1.quote,\n srcTokenExchangeRate,\n destTokenExchangeRate,\n );\n\n let totalEstimatedNetworkFee, relayerFee, gasFee;\n\n if (isEvmQuoteResponse(quoteV1)) {\n relayerFee = calcRelayerFee(sentAmount, quoteV1, nativeExchangeRate);\n gasFee = calcEstimatedAndMaxTotalGasFee({\n bridgeQuote: quoteV1,\n ...bridgeFeesPerGas,\n ...nativeExchangeRate,\n });\n // Uses total gasFee to calculate the total estimated network fee\n totalEstimatedNetworkFee = calcTotalEstimatedNetworkFee(gasFee, relayerFee);\n } else {\n // Use the new generic function for all non-EVM chains\n totalEstimatedNetworkFee = calcNonEvmTotalNetworkFee(\n quoteV1,\n nativeExchangeRate,\n );\n gasFee = {\n total: totalEstimatedNetworkFee,\n };\n }\n\n const adjustedReturn = calcAdjustedReturn(\n toTokenAmount,\n totalEstimatedNetworkFee,\n quoteV1.quote,\n );\n const cost = calcCost(adjustedReturn, sentAmount);\n\n // The quote has not been updated at this point, so we need to calculate the price impact using sentAmount and toTokenAmount\n const priceImpact = calcPriceImpact({ sentAmount, toTokenAmount });\n\n return {\n sentAmount,\n toTokenAmount,\n minToTokenAmount,\n swapRate: calcSwapRate(sentAmount.amount, toTokenAmount.amount),\n /**\n This is the amount required to submit all the transactions.\n Includes the relayer fee or other native fees.\n Should be used for balance checks and tx submission.\n */\n totalNetworkFee: totalEstimatedNetworkFee,\n /**\n This contains gas fee estimates for the bridge transaction\n Does not include the relayer fee (if needed), just the gasLimit and effectiveGas returned by the bridge API.\n Should only be used for display purposes.\n */\n gasFee,\n ...(adjustedReturn &&\n Object.values(adjustedReturn).some(Boolean) && { adjustedReturn }),\n ...(cost && Object.values(cost).some(Boolean) && { cost }),\n ...(includedTxFees &&\n Object.values(includedTxFees).some(Boolean) && { includedTxFees }),\n ...(relayerFee &&\n Object.values(relayerFee).some(Boolean) && { relayerFee }),\n ...(priceImpact &&\n Object.values(priceImpact).some(Boolean) && {\n priceImpact,\n }),\n };\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calculators.d.cts","sourceRoot":"","sources":["../../../src/utils/quote-metadata/calculators.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,UAAU,EACV,WAAW,EACZ,wBAAuB;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,0CAAyC;AAEpE,OAAO,KAAK,EAAE,eAAe,EAAE,+CAA8C;AAE7E,OAAO,KAAK,EAAE,aAAa,EAAE,4CAA2C;AACxE,OAAO,KAAK,EAAE,MAAM,EAAE,mCAAkC;
|
|
1
|
+
{"version":3,"file":"calculators.d.cts","sourceRoot":"","sources":["../../../src/utils/quote-metadata/calculators.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,UAAU,EACV,WAAW,EACZ,wBAAuB;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,0CAAyC;AAEpE,OAAO,KAAK,EAAE,eAAe,EAAE,+CAA8C;AAE7E,OAAO,KAAK,EAAE,aAAa,EAAE,4CAA2C;AACxE,OAAO,KAAK,EAAE,MAAM,EAAE,mCAAkC;AAIxD,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,oBAAmB;AAEnE,eAAO,MAAM,yBAAyB,gBACvB,eAAe,GAAG,UAAU,qCACN,YAAY;;;;CAahD,CAAC;AAEF,eAAO,MAAM,YAAY,oBACN,MAAM,GAAG,SAAS,aACxB,WAAW,qCACa,YAAY;;;;CAahD,CAAC;AAEF,eAAO,MAAM,cAAc,kDACsB,eAAe,CAAC,OAAO,CAAC,qCACpC,YAAY,cACpC,OAAO;;;;CA+BnB,CAAC;AAEF,eAAO,MAAM,aAAa,WAChB,MAAM,SACP,WAAW,qCACiB,YAAY;;;;;;;;;;;;;;CAchD,CAAC;AAEF,eAAO,MAAM,cAAc,eACb,WAAW,qBAAqB,CAAC,iBAC9B,gBAAgB,MAAM,CAAC,qCACH,YAAY;;;;aA0BhD,CAAC;AAmDF,eAAO,MAAM,8BAA8B;iBAM5B,gBAAgB,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS;;;;;;;;CAqBzD,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,WAC/B;IAAE,KAAK,CAAC,EAAE,QAAQ,iBAAiB,CAAC,CAAA;CAAE,GAAG,SAAS,cAC9C,WAAW,qBAAqB,CAAC;;;;CAoB9C,CAAC;AAGF,eAAO,MAAM,kBAAkB,oEAM1B,eAAe,CAAC,OAAO,CAAC,wBACL,YAAY,yBACX,YAAY;;;;aAyBpC,CAAC;AAEF,eAAO,MAAM,kBAAkB,kBACd,QAAQ,iBAAiB,CAAC,4BACf,QAAQ,iBAAiB,CAAC,gEAIjD,eAAe,CAAC,OAAO,CAAC;;;CAuB5B,CAAC;AAEF,eAAO,MAAM,YAAY,gBAAiB,MAAM,oBAAoB,MAAM,uBAG3D,CAAC;AAEhB,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;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,WAClB,YACN,KAAK,aAAa,EAAE,YAAY,GAAG,eAAe,CAAC,CACpD,GAAG,IAAI;;;aA+BT,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB,UACrB,eAAe,GAAG,aAAa,WAC7B;IACP,gBAAgB,EAAE,IAAI,GAAG;QACvB,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;QACzC,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,oBAAoB,EAAE,YAAY,CAAC;IACnC,qBAAqB,EAAE,YAAY,CAAC;IACpC,kBAAkB,EAAE,YAAY,CAAC;CAClC,KACA,aA+FF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calculators.d.mts","sourceRoot":"","sources":["../../../src/utils/quote-metadata/calculators.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,UAAU,EACV,WAAW,EACZ,wBAAuB;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,0CAAyC;AAEpE,OAAO,KAAK,EAAE,eAAe,EAAE,+CAA8C;AAE7E,OAAO,KAAK,EAAE,aAAa,EAAE,4CAA2C;AACxE,OAAO,KAAK,EAAE,MAAM,EAAE,mCAAkC;
|
|
1
|
+
{"version":3,"file":"calculators.d.mts","sourceRoot":"","sources":["../../../src/utils/quote-metadata/calculators.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,UAAU,EACV,WAAW,EACZ,wBAAuB;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,0CAAyC;AAEpE,OAAO,KAAK,EAAE,eAAe,EAAE,+CAA8C;AAE7E,OAAO,KAAK,EAAE,aAAa,EAAE,4CAA2C;AACxE,OAAO,KAAK,EAAE,MAAM,EAAE,mCAAkC;AAIxD,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,oBAAmB;AAEnE,eAAO,MAAM,yBAAyB,gBACvB,eAAe,GAAG,UAAU,qCACN,YAAY;;;;CAahD,CAAC;AAEF,eAAO,MAAM,YAAY,oBACN,MAAM,GAAG,SAAS,aACxB,WAAW,qCACa,YAAY;;;;CAahD,CAAC;AAEF,eAAO,MAAM,cAAc,kDACsB,eAAe,CAAC,OAAO,CAAC,qCACpC,YAAY,cACpC,OAAO;;;;CA+BnB,CAAC;AAEF,eAAO,MAAM,aAAa,WAChB,MAAM,SACP,WAAW,qCACiB,YAAY;;;;;;;;;;;;;;CAchD,CAAC;AAEF,eAAO,MAAM,cAAc,eACb,WAAW,qBAAqB,CAAC,iBAC9B,gBAAgB,MAAM,CAAC,qCACH,YAAY;;;;aA0BhD,CAAC;AAmDF,eAAO,MAAM,8BAA8B;iBAM5B,gBAAgB,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS;;;;;;;;CAqBzD,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,WAC/B;IAAE,KAAK,CAAC,EAAE,QAAQ,iBAAiB,CAAC,CAAA;CAAE,GAAG,SAAS,cAC9C,WAAW,qBAAqB,CAAC;;;;CAoB9C,CAAC;AAGF,eAAO,MAAM,kBAAkB,oEAM1B,eAAe,CAAC,OAAO,CAAC,wBACL,YAAY,yBACX,YAAY;;;;aAyBpC,CAAC;AAEF,eAAO,MAAM,kBAAkB,kBACd,QAAQ,iBAAiB,CAAC,4BACf,QAAQ,iBAAiB,CAAC,gEAIjD,eAAe,CAAC,OAAO,CAAC;;;CAuB5B,CAAC;AAEF,eAAO,MAAM,YAAY,gBAAiB,MAAM,oBAAoB,MAAM,uBAG3D,CAAC;AAEhB,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;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,WAClB,YACN,KAAK,aAAa,EAAE,YAAY,GAAG,eAAe,CAAC,CACpD,GAAG,IAAI;;;aA+BT,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB,UACrB,eAAe,GAAG,aAAa,WAC7B;IACP,gBAAgB,EAAE,IAAI,GAAG;QACvB,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;QACzC,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,oBAAoB,EAAE,YAAY,CAAC;IACnC,qBAAqB,EAAE,YAAY,CAAC;IACpC,kBAAkB,EAAE,YAAY,CAAC;CAClC,KACA,aA+FF,CAAC"}
|
|
@@ -5,6 +5,7 @@ import { BigNumber } from "bignumber.js";
|
|
|
5
5
|
import { toQuoteResponseV1 } from "../../coercers/quote-response-v2-to-v1.mjs";
|
|
6
6
|
import { FloatStringSchema } from "../../validators/number.mjs";
|
|
7
7
|
import { QuoteResponseSchemaV2 } from "../../validators/quote-response.mjs";
|
|
8
|
+
import { assetIdsMatch } from "../assets.mjs";
|
|
8
9
|
import { isEvmQuoteResponse, isNativeAddress } from "../bridge.mjs";
|
|
9
10
|
import { calcNormalizedTokenAmount } from "../number-formatters.mjs";
|
|
10
11
|
export const calcNonEvmTotalNetworkFee = (bridgeQuote, { exchangeRate, usdExchangeRate }) => {
|
|
@@ -37,8 +38,7 @@ export const calcSentAmount = ({ srcTokenAmount, srcAsset, feeData, intent }, {
|
|
|
37
38
|
? new BigNumber(srcTokenAmount)
|
|
38
39
|
: Object.values(feeData)
|
|
39
40
|
.filter((fee) => fee?.amount &&
|
|
40
|
-
fee.asset?.assetId
|
|
41
|
-
srcAsset.assetId?.toLowerCase())
|
|
41
|
+
assetIdsMatch(fee.asset?.assetId, srcAsset.assetId))
|
|
42
42
|
.reduce((acc, { amount }) => acc.plus(amount), new BigNumber(srcTokenAmount));
|
|
43
43
|
const normalizedSentAmount = calcNormalizedTokenAmount(sentAmount, srcAsset.decimals);
|
|
44
44
|
return {
|
|
@@ -158,7 +158,7 @@ export const calcIncludedTxFees = ({ gasIncluded, gasIncluded7702, srcAsset, fee
|
|
|
158
158
|
return undefined;
|
|
159
159
|
}
|
|
160
160
|
// Use exchange rate of the token that is being used to pay for the transaction
|
|
161
|
-
const { exchangeRate, usdExchangeRate } = txFee?.asset
|
|
161
|
+
const { exchangeRate, usdExchangeRate } = assetIdsMatch(txFee?.asset?.assetId, srcAsset.assetId)
|
|
162
162
|
? srcTokenExchangeRate
|
|
163
163
|
: destTokenExchangeRate;
|
|
164
164
|
const normalizedTxFeeAmount = calcNormalizedTokenAmount(txFee?.amount, txFee?.asset.decimals);
|
|
@@ -171,7 +171,7 @@ export const calcIncludedTxFees = ({ gasIncluded, gasIncluded7702, srcAsset, fee
|
|
|
171
171
|
};
|
|
172
172
|
export const calcAdjustedReturn = (toTokenAmount, totalEstimatedNetworkFee, { feeData: { txFee }, destAsset: { assetId: destAssetId }, }) => {
|
|
173
173
|
// If gas is included and is taken from the dest token, don't subtract network fee from return
|
|
174
|
-
if (txFee?.asset?.assetId
|
|
174
|
+
if (assetIdsMatch(txFee?.asset?.assetId, destAssetId)) {
|
|
175
175
|
return {
|
|
176
176
|
valueInCurrency: toTokenAmount.valueInCurrency,
|
|
177
177
|
usd: toTokenAmount.usd,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calculators.mjs","sourceRoot":"","sources":["../../../src/utils/quote-metadata/calculators.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport {\n convertHexToDecimal,\n toHex,\n weiHexToGweiDec,\n} from '@metamask/controller-utils';\nimport { is } from '@metamask/superstruct';\nimport { BigNumber } from 'bignumber.js';\n\nimport { toQuoteResponseV1 } from '../../coercers/quote-response-v2-to-v1.js';\nimport type {\n L1GasFees,\n ExchangeRate,\n NonEvmFees,\n DeepPartial,\n} from '../../types.js';\nimport type { BridgeAsset } from '../../validators/bridge-asset.js';\nimport { FloatStringSchema } from '../../validators/number.js';\nimport type { QuoteResponseV1 } from '../../validators/quote-response-v1.js';\nimport { QuoteResponseSchemaV2 } from '../../validators/quote-response.js';\nimport type { QuoteResponse } from '../../validators/quote-response.js';\nimport type { TxData } from '../../validators/trade.js';\nimport { isEvmQuoteResponse, isNativeAddress } from '../bridge.js';\nimport { calcNormalizedTokenAmount } from '../number-formatters.js';\nimport type { QuoteMetadata, TokenAmountValues } from './types.js';\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 = nonEvmFeesInNative\n ? new BigNumber(nonEvmFeesInNative)\n : undefined;\n\n return {\n amount: feeInNative?.toFixed(),\n valueInCurrency: exchangeRate && feeInNative?.times(exchangeRate).toFixed(),\n usd: usdExchangeRate && feeInNative?.times(usdExchangeRate).toFixed(),\n };\n};\n\nexport const calcToAmount = (\n destTokenAmount: string | undefined,\n destAsset: BridgeAsset,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const normalizedDestAmount = calcNormalizedTokenAmount(\n destTokenAmount,\n destAsset.decimals,\n );\n return {\n amount: normalizedDestAmount?.toFixed(),\n valueInCurrency:\n exchangeRate && normalizedDestAmount?.times(exchangeRate).toFixed(),\n usd:\n usdExchangeRate && normalizedDestAmount?.times(usdExchangeRate).toFixed(),\n };\n};\n\nexport const calcSentAmount = (\n { srcTokenAmount, srcAsset, feeData, intent }: QuoteResponseV1['quote'],\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n isQuoteV2: boolean = false,\n) => {\n // For intent-based swaps or converted V2 quote responses, 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 =\n intent || isQuoteV2\n ? new BigNumber(srcTokenAmount)\n : Object.values(feeData)\n .filter(\n (fee) =>\n fee?.amount &&\n fee.asset?.assetId?.toLowerCase() ===\n srcAsset.assetId?.toLowerCase(),\n )\n .reduce(\n (acc, { amount }) => acc.plus(amount),\n new BigNumber(srcTokenAmount),\n );\n const normalizedSentAmount = calcNormalizedTokenAmount(\n sentAmount,\n srcAsset.decimals,\n );\n return {\n amount: normalizedSentAmount?.toFixed(),\n valueInCurrency:\n exchangeRate && normalizedSentAmount?.times(exchangeRate).toFixed(),\n usd:\n usdExchangeRate && normalizedSentAmount?.times(usdExchangeRate).toFixed(),\n };\n};\n\nexport const calcBatchFees = (\n amount: string,\n asset: BridgeAsset,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const normalizedAmount = calcNormalizedTokenAmount(amount, asset.decimals);\n\n return {\n amount: normalizedAmount?.toFixed(),\n valueInCurrency: exchangeRate\n ? normalizedAmount?.times(exchangeRate).toFixed()\n : null,\n usd: usdExchangeRate\n ? normalizedAmount?.times(usdExchangeRate).toFixed()\n : null,\n asset,\n };\n};\n\nexport const calcRelayerFee = (\n sentAmount: ReturnType<typeof calcSentAmount>,\n quoteResponse: QuoteResponseV1<TxData>,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const { quote, trade } = quoteResponse;\n const relayerFeeAmount = trade.value\n ? new BigNumber(convertHexToDecimal(trade.value))\n : undefined;\n let relayerFeeInNative = relayerFeeAmount\n ? calcNormalizedTokenAmount(relayerFeeAmount, 18)\n : undefined;\n\n // Subtract srcAmount and other fees from trade value if srcAsset is native\n if (isNativeAddress(quote.srcAsset.assetId)) {\n relayerFeeInNative = relayerFeeInNative?.minus(sentAmount.amount ?? '0');\n }\n\n if (relayerFeeInNative?.lte(0)) {\n return undefined;\n }\n\n return {\n amount: relayerFeeInNative?.toFixed(),\n valueInCurrency:\n exchangeRate && relayerFeeInNative?.times(exchangeRate).toFixed(),\n usd:\n usdExchangeRate && relayerFeeInNative?.times(usdExchangeRate).toFixed(),\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 =\n tradeGasLimit || approvalGasLimit || resetApprovalGasLimit\n ? new BigNumber(tradeGasLimit?.toFixed() ?? '0')\n .plus(approvalGasLimit?.toFixed() ?? '0')\n .plus(resetApprovalGasLimit?.toFixed() ?? '0')\n : undefined;\n\n const l1GasFeesInDecGWei = l1GasFeesInHexWei\n ? weiHexToGweiDec(toHex(l1GasFeesInHexWei))\n : undefined;\n\n const gasFeesInDecGwei = totalGasLimitInDec\n ? totalGasLimitInDec\n ?.times(feePerGasInDecGwei ?? '0')\n ?.plus(l1GasFeesInDecGWei ?? '0')\n : undefined;\n const gasFeesInDecEth = gasFeesInDecGwei?.times(new BigNumber(10).pow(-9));\n\n const gasFeesInDisplayCurrency = nativeToDisplayCurrencyExchangeRate\n ? gasFeesInDecEth?.times(nativeToDisplayCurrencyExchangeRate)\n : undefined;\n const gasFeesInUSD = nativeToUsdExchangeRate\n ? gasFeesInDecEth?.times(nativeToUsdExchangeRate)\n : undefined;\n\n return {\n amount: gasFeesInDecEth?.toFixed(),\n valueInCurrency: gasFeesInDisplayCurrency?.toFixed(),\n usd: gasFeesInUSD?.toFixed(),\n };\n};\n\nexport const calcEstimatedAndMaxTotalGasFee = ({\n bridgeQuote: { approval, trade, l1GasFeesInHexWei, resetApproval },\n feePerGasInDecGwei,\n exchangeRate: nativeToDisplayCurrencyExchangeRate,\n usdExchangeRate: nativeToUsdExchangeRate,\n}: {\n bridgeQuote: QuoteResponseV1<TxData, TxData> & L1GasFees;\n feePerGasInDecGwei?: string;\n} & ExchangeRate) => {\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 return {\n total: {\n amount,\n valueInCurrency,\n usd,\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 gasFee: { total?: Partial<TokenAmountValues> } | undefined,\n relayerFee: ReturnType<typeof calcRelayerFee>,\n) => {\n const { total: gasFeeToDisplay } = gasFee ?? {};\n return {\n amount:\n (gasFeeToDisplay?.amount ?? relayerFee?.amount) &&\n new BigNumber(gasFeeToDisplay?.amount ?? '0')\n .plus(relayerFee?.amount ?? '0')\n .toFixed(),\n valueInCurrency:\n (gasFeeToDisplay?.valueInCurrency ?? relayerFee?.valueInCurrency) &&\n new BigNumber(gasFeeToDisplay?.valueInCurrency ?? '0')\n .plus(relayerFee?.valueInCurrency ?? '0')\n .toFixed(),\n usd:\n (gasFeeToDisplay?.usd ?? relayerFee?.usd) &&\n new BigNumber(gasFeeToDisplay?.usd ?? '0')\n .plus(relayerFee?.usd ?? '0')\n .toFixed(),\n };\n};\n\n// Gas is included for some swap quotes and this is the value displayed in the client\nexport const calcIncludedTxFees = (\n {\n gasIncluded,\n gasIncluded7702,\n srcAsset,\n feeData: { txFee },\n }: QuoteResponseV1['quote'],\n srcTokenExchangeRate: ExchangeRate,\n destTokenExchangeRate: ExchangeRate,\n) => {\n if (!txFee || !(gasIncluded || gasIncluded7702)) {\n return undefined;\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 = calcNormalizedTokenAmount(\n txFee?.amount,\n txFee?.asset.decimals,\n );\n\n return {\n amount: normalizedTxFeeAmount?.toFixed(),\n valueInCurrency:\n exchangeRate && normalizedTxFeeAmount?.times(exchangeRate).toFixed(),\n usd:\n usdExchangeRate &&\n normalizedTxFeeAmount?.times(usdExchangeRate).toFixed(),\n };\n};\n\nexport const calcAdjustedReturn = (\n toTokenAmount: Partial<TokenAmountValues>,\n totalEstimatedNetworkFee: Partial<TokenAmountValues>,\n {\n feeData: { txFee },\n destAsset: { assetId: destAssetId },\n }: QuoteResponseV1['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?.toLowerCase() === destAssetId.toLowerCase()) {\n return {\n valueInCurrency: toTokenAmount.valueInCurrency,\n usd: toTokenAmount.usd,\n };\n }\n return {\n valueInCurrency:\n toTokenAmount.valueInCurrency &&\n totalEstimatedNetworkFee.valueInCurrency &&\n new BigNumber(toTokenAmount.valueInCurrency)\n .minus(totalEstimatedNetworkFee.valueInCurrency)\n .toFixed(),\n usd:\n toTokenAmount.usd &&\n totalEstimatedNetworkFee.usd &&\n new BigNumber(toTokenAmount.usd)\n .minus(totalEstimatedNetworkFee.usd)\n .toFixed(),\n };\n};\n\nexport const calcSwapRate = (sentAmount?: string, destTokenAmount?: string) =>\n destTokenAmount && sentAmount\n ? new BigNumber(destTokenAmount).div(sentAmount).toFixed()\n : undefined;\n\nexport const calcCost = (\n adjustedReturn: ReturnType<typeof calcAdjustedReturn>,\n sentAmount: ReturnType<typeof calcSentAmount>,\n) => ({\n valueInCurrency:\n adjustedReturn.valueInCurrency &&\n sentAmount.valueInCurrency &&\n new BigNumber(sentAmount.valueInCurrency)\n .minus(adjustedReturn.valueInCurrency)\n .toFixed(),\n usd:\n adjustedReturn.usd &&\n sentAmount.usd &&\n new BigNumber(sentAmount.usd).minus(adjustedReturn.usd).toFixed(),\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 .toFixed();\n }\n\n if (cost.usd && sentAmount.usd) {\n return new BigNumber(cost.usd)\n .div(sentAmount.usd)\n .times(100)\n .abs()\n .toFixed();\n }\n\n return null;\n};\n\n/**\n * Returns the fiat price impact for a bridge quote — the difference between\n * the source input fiat amount and the destination output fiat amount\n *\n * @param quote - The active quote\n * @returns Formatted fiat impact string, or `undefined` when either fiat value is unavailable.\n */\nexport const calcPriceImpact = (\n quote?: DeepPartial<\n Pick<QuoteMetadata, 'sentAmount' | 'toTokenAmount'>\n > | null,\n) => {\n if (!quote?.sentAmount || !quote?.toTokenAmount) {\n return undefined;\n }\n\n const sourceFiat = quote.sentAmount.valueInCurrency;\n const destFiat = quote.toTokenAmount.valueInCurrency;\n const sourceUsd = quote.sentAmount.usd;\n const destUsd = quote.toTokenAmount.usd;\n\n const isSourceFiatValid = (value: unknown): value is string[] =>\n is(value, FloatStringSchema);\n\n const valueInCurrency =\n isSourceFiatValid(sourceFiat) && isSourceFiatValid(destFiat)\n ? new BigNumber(sourceFiat).minus(destFiat).abs().toFixed()\n : undefined;\n const usd =\n isSourceFiatValid(sourceUsd) && isSourceFiatValid(destUsd)\n ? new BigNumber(sourceUsd).minus(destUsd).abs().toFixed()\n : undefined;\n\n if (!valueInCurrency && !usd) {\n return undefined;\n }\n\n return {\n valueInCurrency,\n usd,\n };\n};\n\n/**\n * Calculates quote metadata, such as converted fiat amounts and fees,\n * based on the controller state and the quote response\n *\n * @param quote - The quote response to calculate the metadata for\n * @param options - The options for the calculation\n * @param options.bridgeFeesPerGas - The bridge fees per gas\n * @param options.srcTokenExchangeRate - The exchange rate for the source token\n * @param options.destTokenExchangeRate - The exchange rate for the destination token\n * @param options.nativeExchangeRate - The exchange rate for the native token\n * @returns The calculated metadata\n */\nexport const calcQuoteMetadata = (\n quote: QuoteResponseV1 | QuoteResponse,\n options: {\n bridgeFeesPerGas: null | {\n estimatedBaseFeeInDecGwei: string | null;\n feePerGasInDecGwei?: string;\n };\n srcTokenExchangeRate: ExchangeRate;\n destTokenExchangeRate: ExchangeRate;\n nativeExchangeRate: ExchangeRate;\n },\n): QuoteMetadata => {\n const {\n bridgeFeesPerGas = {},\n srcTokenExchangeRate = {},\n destTokenExchangeRate = {},\n nativeExchangeRate = {},\n } = options;\n\n const isQuoteV2 = is(quote, QuoteResponseSchemaV2);\n const quoteV1 = isQuoteV2 ? toQuoteResponseV1(quote) : quote;\n\n const sentAmount = calcSentAmount(\n quoteV1.quote,\n srcTokenExchangeRate,\n isQuoteV2,\n );\n\n const toTokenAmount = calcToAmount(\n quoteV1.quote.destTokenAmount,\n quoteV1.quote.destAsset,\n destTokenExchangeRate,\n );\n const minToTokenAmount = calcToAmount(\n quoteV1.quote.minDestTokenAmount ?? quoteV1.quote.destTokenAmount,\n quoteV1.quote.destAsset,\n destTokenExchangeRate,\n );\n\n const includedTxFees = calcIncludedTxFees(\n quoteV1.quote,\n srcTokenExchangeRate,\n destTokenExchangeRate,\n );\n\n let totalEstimatedNetworkFee, relayerFee, gasFee;\n\n if (isEvmQuoteResponse(quoteV1)) {\n relayerFee = calcRelayerFee(sentAmount, quoteV1, nativeExchangeRate);\n gasFee = calcEstimatedAndMaxTotalGasFee({\n bridgeQuote: quoteV1,\n ...bridgeFeesPerGas,\n ...nativeExchangeRate,\n });\n // Uses total gasFee to calculate the total estimated network fee\n totalEstimatedNetworkFee = calcTotalEstimatedNetworkFee(gasFee, relayerFee);\n } else {\n // Use the new generic function for all non-EVM chains\n totalEstimatedNetworkFee = calcNonEvmTotalNetworkFee(\n quoteV1,\n nativeExchangeRate,\n );\n gasFee = {\n total: totalEstimatedNetworkFee,\n };\n }\n\n const adjustedReturn = calcAdjustedReturn(\n toTokenAmount,\n totalEstimatedNetworkFee,\n quoteV1.quote,\n );\n const cost = calcCost(adjustedReturn, sentAmount);\n\n // The quote has not been updated at this point, so we need to calculate the price impact using sentAmount and toTokenAmount\n const priceImpact = calcPriceImpact({ sentAmount, toTokenAmount });\n\n return {\n sentAmount,\n toTokenAmount,\n minToTokenAmount,\n swapRate: calcSwapRate(sentAmount.amount, toTokenAmount.amount),\n /**\n This is the amount required to submit all the transactions.\n Includes the relayer fee or other native fees.\n Should be used for balance checks and tx submission.\n */\n totalNetworkFee: totalEstimatedNetworkFee,\n /**\n This contains gas fee estimates for the bridge transaction\n Does not include the relayer fee (if needed), just the gasLimit and effectiveGas returned by the bridge API.\n Should only be used for display purposes.\n */\n gasFee,\n ...(adjustedReturn &&\n Object.values(adjustedReturn).some(Boolean) && { adjustedReturn }),\n ...(cost && Object.values(cost).some(Boolean) && { cost }),\n ...(includedTxFees &&\n Object.values(includedTxFees).some(Boolean) && { includedTxFees }),\n ...(relayerFee &&\n Object.values(relayerFee).some(Boolean) && { relayerFee }),\n ...(priceImpact &&\n Object.values(priceImpact).some(Boolean) && {\n priceImpact,\n }),\n };\n};\n"]}
|
|
1
|
+
{"version":3,"file":"calculators.mjs","sourceRoot":"","sources":["../../../src/utils/quote-metadata/calculators.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport {\n convertHexToDecimal,\n toHex,\n weiHexToGweiDec,\n} from '@metamask/controller-utils';\nimport { is } from '@metamask/superstruct';\nimport { BigNumber } from 'bignumber.js';\n\nimport { toQuoteResponseV1 } from '../../coercers/quote-response-v2-to-v1.js';\nimport type {\n L1GasFees,\n ExchangeRate,\n NonEvmFees,\n DeepPartial,\n} from '../../types.js';\nimport type { BridgeAsset } from '../../validators/bridge-asset.js';\nimport { FloatStringSchema } from '../../validators/number.js';\nimport type { QuoteResponseV1 } from '../../validators/quote-response-v1.js';\nimport { QuoteResponseSchemaV2 } from '../../validators/quote-response.js';\nimport type { QuoteResponse } from '../../validators/quote-response.js';\nimport type { TxData } from '../../validators/trade.js';\nimport { assetIdsMatch } from '../assets.js';\nimport { isEvmQuoteResponse, isNativeAddress } from '../bridge.js';\nimport { calcNormalizedTokenAmount } from '../number-formatters.js';\nimport type { QuoteMetadata, TokenAmountValues } from './types.js';\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 = nonEvmFeesInNative\n ? new BigNumber(nonEvmFeesInNative)\n : undefined;\n\n return {\n amount: feeInNative?.toFixed(),\n valueInCurrency: exchangeRate && feeInNative?.times(exchangeRate).toFixed(),\n usd: usdExchangeRate && feeInNative?.times(usdExchangeRate).toFixed(),\n };\n};\n\nexport const calcToAmount = (\n destTokenAmount: string | undefined,\n destAsset: BridgeAsset,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const normalizedDestAmount = calcNormalizedTokenAmount(\n destTokenAmount,\n destAsset.decimals,\n );\n return {\n amount: normalizedDestAmount?.toFixed(),\n valueInCurrency:\n exchangeRate && normalizedDestAmount?.times(exchangeRate).toFixed(),\n usd:\n usdExchangeRate && normalizedDestAmount?.times(usdExchangeRate).toFixed(),\n };\n};\n\nexport const calcSentAmount = (\n { srcTokenAmount, srcAsset, feeData, intent }: QuoteResponseV1['quote'],\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n isQuoteV2: boolean = false,\n) => {\n // For intent-based swaps or converted V2 quote responses, 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 =\n intent || isQuoteV2\n ? new BigNumber(srcTokenAmount)\n : Object.values(feeData)\n .filter(\n (fee) =>\n fee?.amount &&\n assetIdsMatch(fee.asset?.assetId, srcAsset.assetId),\n )\n .reduce(\n (acc, { amount }) => acc.plus(amount),\n new BigNumber(srcTokenAmount),\n );\n const normalizedSentAmount = calcNormalizedTokenAmount(\n sentAmount,\n srcAsset.decimals,\n );\n return {\n amount: normalizedSentAmount?.toFixed(),\n valueInCurrency:\n exchangeRate && normalizedSentAmount?.times(exchangeRate).toFixed(),\n usd:\n usdExchangeRate && normalizedSentAmount?.times(usdExchangeRate).toFixed(),\n };\n};\n\nexport const calcBatchFees = (\n amount: string,\n asset: BridgeAsset,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const normalizedAmount = calcNormalizedTokenAmount(amount, asset.decimals);\n\n return {\n amount: normalizedAmount?.toFixed(),\n valueInCurrency: exchangeRate\n ? normalizedAmount?.times(exchangeRate).toFixed()\n : null,\n usd: usdExchangeRate\n ? normalizedAmount?.times(usdExchangeRate).toFixed()\n : null,\n asset,\n };\n};\n\nexport const calcRelayerFee = (\n sentAmount: ReturnType<typeof calcSentAmount>,\n quoteResponse: QuoteResponseV1<TxData>,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const { quote, trade } = quoteResponse;\n const relayerFeeAmount = trade.value\n ? new BigNumber(convertHexToDecimal(trade.value))\n : undefined;\n let relayerFeeInNative = relayerFeeAmount\n ? calcNormalizedTokenAmount(relayerFeeAmount, 18)\n : undefined;\n\n // Subtract srcAmount and other fees from trade value if srcAsset is native\n if (isNativeAddress(quote.srcAsset.assetId)) {\n relayerFeeInNative = relayerFeeInNative?.minus(sentAmount.amount ?? '0');\n }\n\n if (relayerFeeInNative?.lte(0)) {\n return undefined;\n }\n\n return {\n amount: relayerFeeInNative?.toFixed(),\n valueInCurrency:\n exchangeRate && relayerFeeInNative?.times(exchangeRate).toFixed(),\n usd:\n usdExchangeRate && relayerFeeInNative?.times(usdExchangeRate).toFixed(),\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 =\n tradeGasLimit || approvalGasLimit || resetApprovalGasLimit\n ? new BigNumber(tradeGasLimit?.toFixed() ?? '0')\n .plus(approvalGasLimit?.toFixed() ?? '0')\n .plus(resetApprovalGasLimit?.toFixed() ?? '0')\n : undefined;\n\n const l1GasFeesInDecGWei = l1GasFeesInHexWei\n ? weiHexToGweiDec(toHex(l1GasFeesInHexWei))\n : undefined;\n\n const gasFeesInDecGwei = totalGasLimitInDec\n ? totalGasLimitInDec\n ?.times(feePerGasInDecGwei ?? '0')\n ?.plus(l1GasFeesInDecGWei ?? '0')\n : undefined;\n const gasFeesInDecEth = gasFeesInDecGwei?.times(new BigNumber(10).pow(-9));\n\n const gasFeesInDisplayCurrency = nativeToDisplayCurrencyExchangeRate\n ? gasFeesInDecEth?.times(nativeToDisplayCurrencyExchangeRate)\n : undefined;\n const gasFeesInUSD = nativeToUsdExchangeRate\n ? gasFeesInDecEth?.times(nativeToUsdExchangeRate)\n : undefined;\n\n return {\n amount: gasFeesInDecEth?.toFixed(),\n valueInCurrency: gasFeesInDisplayCurrency?.toFixed(),\n usd: gasFeesInUSD?.toFixed(),\n };\n};\n\nexport const calcEstimatedAndMaxTotalGasFee = ({\n bridgeQuote: { approval, trade, l1GasFeesInHexWei, resetApproval },\n feePerGasInDecGwei,\n exchangeRate: nativeToDisplayCurrencyExchangeRate,\n usdExchangeRate: nativeToUsdExchangeRate,\n}: {\n bridgeQuote: QuoteResponseV1<TxData, TxData> & L1GasFees;\n feePerGasInDecGwei?: string;\n} & ExchangeRate) => {\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 return {\n total: {\n amount,\n valueInCurrency,\n usd,\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 gasFee: { total?: Partial<TokenAmountValues> } | undefined,\n relayerFee: ReturnType<typeof calcRelayerFee>,\n) => {\n const { total: gasFeeToDisplay } = gasFee ?? {};\n return {\n amount:\n (gasFeeToDisplay?.amount ?? relayerFee?.amount) &&\n new BigNumber(gasFeeToDisplay?.amount ?? '0')\n .plus(relayerFee?.amount ?? '0')\n .toFixed(),\n valueInCurrency:\n (gasFeeToDisplay?.valueInCurrency ?? relayerFee?.valueInCurrency) &&\n new BigNumber(gasFeeToDisplay?.valueInCurrency ?? '0')\n .plus(relayerFee?.valueInCurrency ?? '0')\n .toFixed(),\n usd:\n (gasFeeToDisplay?.usd ?? relayerFee?.usd) &&\n new BigNumber(gasFeeToDisplay?.usd ?? '0')\n .plus(relayerFee?.usd ?? '0')\n .toFixed(),\n };\n};\n\n// Gas is included for some swap quotes and this is the value displayed in the client\nexport const calcIncludedTxFees = (\n {\n gasIncluded,\n gasIncluded7702,\n srcAsset,\n feeData: { txFee },\n }: QuoteResponseV1['quote'],\n srcTokenExchangeRate: ExchangeRate,\n destTokenExchangeRate: ExchangeRate,\n) => {\n if (!txFee || !(gasIncluded || gasIncluded7702)) {\n return undefined;\n }\n // Use exchange rate of the token that is being used to pay for the transaction\n const { exchangeRate, usdExchangeRate } = assetIdsMatch(\n txFee?.asset?.assetId,\n srcAsset.assetId,\n )\n ? srcTokenExchangeRate\n : destTokenExchangeRate;\n const normalizedTxFeeAmount = calcNormalizedTokenAmount(\n txFee?.amount,\n txFee?.asset.decimals,\n );\n\n return {\n amount: normalizedTxFeeAmount?.toFixed(),\n valueInCurrency:\n exchangeRate && normalizedTxFeeAmount?.times(exchangeRate).toFixed(),\n usd:\n usdExchangeRate &&\n normalizedTxFeeAmount?.times(usdExchangeRate).toFixed(),\n };\n};\n\nexport const calcAdjustedReturn = (\n toTokenAmount: Partial<TokenAmountValues>,\n totalEstimatedNetworkFee: Partial<TokenAmountValues>,\n {\n feeData: { txFee },\n destAsset: { assetId: destAssetId },\n }: QuoteResponseV1['quote'],\n) => {\n // If gas is included and is taken from the dest token, don't subtract network fee from return\n if (assetIdsMatch(txFee?.asset?.assetId, destAssetId)) {\n return {\n valueInCurrency: toTokenAmount.valueInCurrency,\n usd: toTokenAmount.usd,\n };\n }\n return {\n valueInCurrency:\n toTokenAmount.valueInCurrency &&\n totalEstimatedNetworkFee.valueInCurrency &&\n new BigNumber(toTokenAmount.valueInCurrency)\n .minus(totalEstimatedNetworkFee.valueInCurrency)\n .toFixed(),\n usd:\n toTokenAmount.usd &&\n totalEstimatedNetworkFee.usd &&\n new BigNumber(toTokenAmount.usd)\n .minus(totalEstimatedNetworkFee.usd)\n .toFixed(),\n };\n};\n\nexport const calcSwapRate = (sentAmount?: string, destTokenAmount?: string) =>\n destTokenAmount && sentAmount\n ? new BigNumber(destTokenAmount).div(sentAmount).toFixed()\n : undefined;\n\nexport const calcCost = (\n adjustedReturn: ReturnType<typeof calcAdjustedReturn>,\n sentAmount: ReturnType<typeof calcSentAmount>,\n) => ({\n valueInCurrency:\n adjustedReturn.valueInCurrency &&\n sentAmount.valueInCurrency &&\n new BigNumber(sentAmount.valueInCurrency)\n .minus(adjustedReturn.valueInCurrency)\n .toFixed(),\n usd:\n adjustedReturn.usd &&\n sentAmount.usd &&\n new BigNumber(sentAmount.usd).minus(adjustedReturn.usd).toFixed(),\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 .toFixed();\n }\n\n if (cost.usd && sentAmount.usd) {\n return new BigNumber(cost.usd)\n .div(sentAmount.usd)\n .times(100)\n .abs()\n .toFixed();\n }\n\n return null;\n};\n\n/**\n * Returns the fiat price impact for a bridge quote — the difference between\n * the source input fiat amount and the destination output fiat amount\n *\n * @param quote - The active quote\n * @returns Formatted fiat impact string, or `undefined` when either fiat value is unavailable.\n */\nexport const calcPriceImpact = (\n quote?: DeepPartial<\n Pick<QuoteMetadata, 'sentAmount' | 'toTokenAmount'>\n > | null,\n) => {\n if (!quote?.sentAmount || !quote?.toTokenAmount) {\n return undefined;\n }\n\n const sourceFiat = quote.sentAmount.valueInCurrency;\n const destFiat = quote.toTokenAmount.valueInCurrency;\n const sourceUsd = quote.sentAmount.usd;\n const destUsd = quote.toTokenAmount.usd;\n\n const isSourceFiatValid = (value: unknown): value is string[] =>\n is(value, FloatStringSchema);\n\n const valueInCurrency =\n isSourceFiatValid(sourceFiat) && isSourceFiatValid(destFiat)\n ? new BigNumber(sourceFiat).minus(destFiat).abs().toFixed()\n : undefined;\n const usd =\n isSourceFiatValid(sourceUsd) && isSourceFiatValid(destUsd)\n ? new BigNumber(sourceUsd).minus(destUsd).abs().toFixed()\n : undefined;\n\n if (!valueInCurrency && !usd) {\n return undefined;\n }\n\n return {\n valueInCurrency,\n usd,\n };\n};\n\n/**\n * Calculates quote metadata, such as converted fiat amounts and fees,\n * based on the controller state and the quote response\n *\n * @param quote - The quote response to calculate the metadata for\n * @param options - The options for the calculation\n * @param options.bridgeFeesPerGas - The bridge fees per gas\n * @param options.srcTokenExchangeRate - The exchange rate for the source token\n * @param options.destTokenExchangeRate - The exchange rate for the destination token\n * @param options.nativeExchangeRate - The exchange rate for the native token\n * @returns The calculated metadata\n */\nexport const calcQuoteMetadata = (\n quote: QuoteResponseV1 | QuoteResponse,\n options: {\n bridgeFeesPerGas: null | {\n estimatedBaseFeeInDecGwei: string | null;\n feePerGasInDecGwei?: string;\n };\n srcTokenExchangeRate: ExchangeRate;\n destTokenExchangeRate: ExchangeRate;\n nativeExchangeRate: ExchangeRate;\n },\n): QuoteMetadata => {\n const {\n bridgeFeesPerGas = {},\n srcTokenExchangeRate = {},\n destTokenExchangeRate = {},\n nativeExchangeRate = {},\n } = options;\n\n const isQuoteV2 = is(quote, QuoteResponseSchemaV2);\n const quoteV1 = isQuoteV2 ? toQuoteResponseV1(quote) : quote;\n\n const sentAmount = calcSentAmount(\n quoteV1.quote,\n srcTokenExchangeRate,\n isQuoteV2,\n );\n\n const toTokenAmount = calcToAmount(\n quoteV1.quote.destTokenAmount,\n quoteV1.quote.destAsset,\n destTokenExchangeRate,\n );\n const minToTokenAmount = calcToAmount(\n quoteV1.quote.minDestTokenAmount ?? quoteV1.quote.destTokenAmount,\n quoteV1.quote.destAsset,\n destTokenExchangeRate,\n );\n\n const includedTxFees = calcIncludedTxFees(\n quoteV1.quote,\n srcTokenExchangeRate,\n destTokenExchangeRate,\n );\n\n let totalEstimatedNetworkFee, relayerFee, gasFee;\n\n if (isEvmQuoteResponse(quoteV1)) {\n relayerFee = calcRelayerFee(sentAmount, quoteV1, nativeExchangeRate);\n gasFee = calcEstimatedAndMaxTotalGasFee({\n bridgeQuote: quoteV1,\n ...bridgeFeesPerGas,\n ...nativeExchangeRate,\n });\n // Uses total gasFee to calculate the total estimated network fee\n totalEstimatedNetworkFee = calcTotalEstimatedNetworkFee(gasFee, relayerFee);\n } else {\n // Use the new generic function for all non-EVM chains\n totalEstimatedNetworkFee = calcNonEvmTotalNetworkFee(\n quoteV1,\n nativeExchangeRate,\n );\n gasFee = {\n total: totalEstimatedNetworkFee,\n };\n }\n\n const adjustedReturn = calcAdjustedReturn(\n toTokenAmount,\n totalEstimatedNetworkFee,\n quoteV1.quote,\n );\n const cost = calcCost(adjustedReturn, sentAmount);\n\n // The quote has not been updated at this point, so we need to calculate the price impact using sentAmount and toTokenAmount\n const priceImpact = calcPriceImpact({ sentAmount, toTokenAmount });\n\n return {\n sentAmount,\n toTokenAmount,\n minToTokenAmount,\n swapRate: calcSwapRate(sentAmount.amount, toTokenAmount.amount),\n /**\n This is the amount required to submit all the transactions.\n Includes the relayer fee or other native fees.\n Should be used for balance checks and tx submission.\n */\n totalNetworkFee: totalEstimatedNetworkFee,\n /**\n This contains gas fee estimates for the bridge transaction\n Does not include the relayer fee (if needed), just the gasLimit and effectiveGas returned by the bridge API.\n Should only be used for display purposes.\n */\n gasFee,\n ...(adjustedReturn &&\n Object.values(adjustedReturn).some(Boolean) && { adjustedReturn }),\n ...(cost && Object.values(cost).some(Boolean) && { cost }),\n ...(includedTxFees &&\n Object.values(includedTxFees).some(Boolean) && { includedTxFees }),\n ...(relayerFee &&\n Object.values(relayerFee).some(Boolean) && { relayerFee }),\n ...(priceImpact &&\n Object.values(priceImpact).some(Boolean) && {\n priceImpact,\n }),\n };\n};\n"]}
|
package/package.json
CHANGED