@metamask-previews/bridge-controller 13.0.0-preview-4fb8ceeb → 13.0.0-preview-bc1dd30
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 +0 -14
- package/dist/bridge-controller.cjs +4 -56
- package/dist/bridge-controller.cjs.map +1 -1
- package/dist/bridge-controller.d.cts +1 -1
- package/dist/bridge-controller.d.cts.map +1 -1
- package/dist/bridge-controller.d.mts +1 -1
- package/dist/bridge-controller.d.mts.map +1 -1
- package/dist/bridge-controller.mjs +5 -57
- package/dist/bridge-controller.mjs.map +1 -1
- package/dist/constants/bridge.cjs +0 -1
- package/dist/constants/bridge.cjs.map +1 -1
- package/dist/constants/bridge.d.cts.map +1 -1
- package/dist/constants/bridge.d.mts.map +1 -1
- package/dist/constants/bridge.mjs +0 -1
- package/dist/constants/bridge.mjs.map +1 -1
- package/dist/index.cjs +1 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -2
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +1 -2
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +1 -2
- package/dist/index.mjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +9 -35
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +9 -35
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/dist/utils/caip-formatters.cjs +1 -25
- package/dist/utils/caip-formatters.cjs.map +1 -1
- package/dist/utils/caip-formatters.d.cts +0 -10
- package/dist/utils/caip-formatters.d.cts.map +1 -1
- package/dist/utils/caip-formatters.d.mts +0 -10
- package/dist/utils/caip-formatters.d.mts.map +1 -1
- package/dist/utils/caip-formatters.mjs +2 -25
- package/dist/utils/caip-formatters.mjs.map +1 -1
- package/dist/utils/fetch.cjs +1 -61
- package/dist/utils/fetch.cjs.map +1 -1
- package/dist/utils/fetch.d.cts +1 -21
- package/dist/utils/fetch.d.cts.map +1 -1
- package/dist/utils/fetch.d.mts +1 -21
- package/dist/utils/fetch.d.mts.map +1 -1
- package/dist/utils/fetch.mjs +0 -59
- package/dist/utils/fetch.mjs.map +1 -1
- package/dist/utils/quote.cjs +1 -177
- package/dist/utils/quote.cjs.map +1 -1
- package/dist/utils/quote.d.cts +1 -62
- package/dist/utils/quote.d.cts.map +1 -1
- package/dist/utils/quote.d.mts +1 -62
- package/dist/utils/quote.d.mts.map +1 -1
- package/dist/utils/quote.mjs +0 -164
- package/dist/utils/quote.mjs.map +1 -1
- package/package.json +3 -8
- package/dist/selectors.cjs +0 -210
- package/dist/selectors.cjs.map +0 -1
- package/dist/selectors.d.cts +0 -1332
- package/dist/selectors.d.cts.map +0 -1
- package/dist/selectors.d.mts +0 -1332
- package/dist/selectors.d.mts.map +0 -1
- package/dist/selectors.mjs +0 -206
- package/dist/selectors.mjs.map +0 -1
- package/dist/utils/assets.cjs +0 -28
- package/dist/utils/assets.cjs.map +0 -1
- package/dist/utils/assets.d.cts +0 -9
- package/dist/utils/assets.d.cts.map +0 -1
- package/dist/utils/assets.d.mts +0 -9
- package/dist/utils/assets.d.mts.map +0 -1
- package/dist/utils/assets.mjs +0 -23
- package/dist/utils/assets.mjs.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.formatAddressToCaipReference = exports.formatChainIdToHex = exports.formatChainIdToDec = exports.formatChainIdToCaip = void 0;
|
|
4
4
|
const address_1 = require("@ethersproject/address");
|
|
5
5
|
const constants_1 = require("@ethersproject/constants");
|
|
6
6
|
const controller_utils_1 = require("@metamask/controller-utils");
|
|
@@ -99,28 +99,4 @@ const formatAddressToCaipReference = (address) => {
|
|
|
99
99
|
return addressWithoutPrefix;
|
|
100
100
|
};
|
|
101
101
|
exports.formatAddressToCaipReference = formatAddressToCaipReference;
|
|
102
|
-
/**
|
|
103
|
-
* Converts an address or assetId to a CaipAssetType
|
|
104
|
-
*
|
|
105
|
-
* @param addressOrAssetId - The address or assetId to convert
|
|
106
|
-
* @param chainId - The chainId of the asset
|
|
107
|
-
* @returns The CaipAssetType
|
|
108
|
-
*/
|
|
109
|
-
const formatAddressToAssetId = (addressOrAssetId, chainId) => {
|
|
110
|
-
if ((0, utils_1.isCaipAssetType)(addressOrAssetId)) {
|
|
111
|
-
return addressOrAssetId;
|
|
112
|
-
}
|
|
113
|
-
if ((0, bridge_1.isNativeAddress)(addressOrAssetId)) {
|
|
114
|
-
return (0, bridge_1.getNativeAssetForChainId)(chainId).assetId;
|
|
115
|
-
}
|
|
116
|
-
if (chainId === keyring_api_1.SolScope.Mainnet) {
|
|
117
|
-
return utils_1.CaipAssetTypeStruct.create(`${chainId}/token:${addressOrAssetId}`);
|
|
118
|
-
}
|
|
119
|
-
// EVM assets
|
|
120
|
-
if (!(0, utils_1.isStrictHexString)(addressOrAssetId)) {
|
|
121
|
-
return undefined;
|
|
122
|
-
}
|
|
123
|
-
return utils_1.CaipAssetTypeStruct.create(`${(0, exports.formatChainIdToCaip)(chainId)}/erc20:${addressOrAssetId}`);
|
|
124
|
-
};
|
|
125
|
-
exports.formatAddressToAssetId = formatAddressToAssetId;
|
|
126
102
|
//# sourceMappingURL=caip-formatters.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"caip-formatters.cjs","sourceRoot":"","sources":["../../src/utils/caip-formatters.ts"],"names":[],"mappings":";;;AAAA,oDAAoD;AACpD,wDAAuD;AACvD,iEAAiE;AACjE,uDAAiD;AACjD,2FAA2E;
|
|
1
|
+
{"version":3,"file":"caip-formatters.cjs","sourceRoot":"","sources":["../../src/utils/caip-formatters.ts"],"names":[],"mappings":"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","sourcesContent":["import { getAddress } from '@ethersproject/address';\nimport { AddressZero } from '@ethersproject/constants';\nimport { convertHexToDecimal } from '@metamask/controller-utils';\nimport { SolScope } from '@metamask/keyring-api';\nimport { toEvmCaipChainId } from '@metamask/multichain-network-controller';\nimport {\n type Hex,\n type CaipChainId,\n isCaipChainId,\n isStrictHexString,\n parseCaipChainId,\n isCaipReference,\n numberToHex,\n} from '@metamask/utils';\n\nimport { isNativeAddress, isSolanaChainId } from './bridge';\nimport { ChainId } from '../types';\n\n/**\n * Converts a chainId to a CaipChainId\n *\n * @param chainId - The chainId to convert\n * @returns The CaipChainId\n */\nexport const formatChainIdToCaip = (\n chainId: Hex | number | CaipChainId | string,\n): CaipChainId => {\n if (isCaipChainId(chainId)) {\n return chainId;\n }\n if (isStrictHexString(chainId)) {\n return toEvmCaipChainId(chainId);\n }\n if (isSolanaChainId(chainId)) {\n return SolScope.Mainnet;\n }\n return toEvmCaipChainId(numberToHex(Number(chainId)));\n};\n\n/**\n * Converts a chainId to a decimal number that can be used for bridge-api requests\n *\n * @param chainId - The chainId to convert\n * @returns The decimal number\n */\nexport const formatChainIdToDec = (\n chainId: number | Hex | CaipChainId | string,\n) => {\n if (isStrictHexString(chainId)) {\n return convertHexToDecimal(chainId);\n }\n if (chainId === SolScope.Mainnet) {\n return ChainId.SOLANA;\n }\n if (isCaipChainId(chainId)) {\n return Number(chainId.split(':').at(-1));\n }\n if (typeof chainId === 'string') {\n return parseInt(chainId, 10);\n }\n return chainId;\n};\n\n/**\n * Converts a chainId to a hex string used to read controller data within the app\n * Hex chainIds are also used for fetching exchange rates\n *\n * @param chainId - The chainId to convert\n * @returns The hex string\n */\nexport const formatChainIdToHex = (\n chainId: Hex | CaipChainId | string | number,\n): Hex => {\n if (isStrictHexString(chainId)) {\n return chainId;\n }\n if (typeof chainId === 'number' || parseInt(chainId, 10)) {\n return numberToHex(Number(chainId));\n }\n if (isCaipChainId(chainId)) {\n const { reference } = parseCaipChainId(chainId);\n if (isCaipReference(reference) && !isNaN(Number(reference))) {\n return numberToHex(Number(reference));\n }\n }\n // Throw an error if a non-evm chainId is passed to this function\n // This should never happen, but it's a sanity check\n throw new Error(`Invalid cross-chain swaps chainId: ${chainId}`);\n};\n\n/**\n * Converts an asset or account address to a string that can be used for bridge-api requests\n *\n * @param address - The address to convert\n * @returns The converted address\n */\nexport const formatAddressToCaipReference = (address: string) => {\n if (isStrictHexString(address)) {\n return getAddress(address);\n }\n // If the address looks like a native token, return the zero address because it's\n // what bridge-api uses to represent a native asset\n if (isNativeAddress(address)) {\n return AddressZero;\n }\n const addressWithoutPrefix = address.split(':').at(-1);\n // If the address is not a valid hex string or CAIP address, throw an error\n // This should never happen, but it's a sanity check\n if (!addressWithoutPrefix) {\n throw new Error('Invalid address');\n }\n return addressWithoutPrefix;\n};\n"]}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import type { CaipAssetType } from "@metamask/utils";
|
|
2
1
|
import { type Hex, type CaipChainId } from "@metamask/utils";
|
|
3
|
-
import type { GenericQuoteRequest } from "../types.cjs";
|
|
4
2
|
/**
|
|
5
3
|
* Converts a chainId to a CaipChainId
|
|
6
4
|
*
|
|
@@ -30,12 +28,4 @@ export declare const formatChainIdToHex: (chainId: Hex | CaipChainId | string |
|
|
|
30
28
|
* @returns The converted address
|
|
31
29
|
*/
|
|
32
30
|
export declare const formatAddressToCaipReference: (address: string) => string;
|
|
33
|
-
/**
|
|
34
|
-
* Converts an address or assetId to a CaipAssetType
|
|
35
|
-
*
|
|
36
|
-
* @param addressOrAssetId - The address or assetId to convert
|
|
37
|
-
* @param chainId - The chainId of the asset
|
|
38
|
-
* @returns The CaipAssetType
|
|
39
|
-
*/
|
|
40
|
-
export declare const formatAddressToAssetId: (addressOrAssetId: Hex | CaipAssetType | string, chainId: GenericQuoteRequest['srcChainId']) => CaipAssetType | undefined;
|
|
41
31
|
//# sourceMappingURL=caip-formatters.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"caip-formatters.d.cts","sourceRoot":"","sources":["../../src/utils/caip-formatters.ts"],"names":[],"mappings":"AAKA,OAAO,
|
|
1
|
+
{"version":3,"file":"caip-formatters.d.cts","sourceRoot":"","sources":["../../src/utils/caip-formatters.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,KAAK,GAAG,EACR,KAAK,WAAW,EAMjB,wBAAwB;AAKzB;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,YACrB,GAAG,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,KAC3C,WAWF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,YACpB,MAAM,GAAG,GAAG,GAAG,WAAW,GAAG,MAAM,WAe7C,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,YACpB,GAAG,GAAG,WAAW,GAAG,MAAM,GAAG,MAAM,KAC3C,GAgBF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,YAAa,MAAM,WAgB3D,CAAC"}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import type { CaipAssetType } from "@metamask/utils";
|
|
2
1
|
import { type Hex, type CaipChainId } from "@metamask/utils";
|
|
3
|
-
import type { GenericQuoteRequest } from "../types.mjs";
|
|
4
2
|
/**
|
|
5
3
|
* Converts a chainId to a CaipChainId
|
|
6
4
|
*
|
|
@@ -30,12 +28,4 @@ export declare const formatChainIdToHex: (chainId: Hex | CaipChainId | string |
|
|
|
30
28
|
* @returns The converted address
|
|
31
29
|
*/
|
|
32
30
|
export declare const formatAddressToCaipReference: (address: string) => string;
|
|
33
|
-
/**
|
|
34
|
-
* Converts an address or assetId to a CaipAssetType
|
|
35
|
-
*
|
|
36
|
-
* @param addressOrAssetId - The address or assetId to convert
|
|
37
|
-
* @param chainId - The chainId of the asset
|
|
38
|
-
* @returns The CaipAssetType
|
|
39
|
-
*/
|
|
40
|
-
export declare const formatAddressToAssetId: (addressOrAssetId: Hex | CaipAssetType | string, chainId: GenericQuoteRequest['srcChainId']) => CaipAssetType | undefined;
|
|
41
31
|
//# sourceMappingURL=caip-formatters.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"caip-formatters.d.mts","sourceRoot":"","sources":["../../src/utils/caip-formatters.ts"],"names":[],"mappings":"AAKA,OAAO,
|
|
1
|
+
{"version":3,"file":"caip-formatters.d.mts","sourceRoot":"","sources":["../../src/utils/caip-formatters.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,KAAK,GAAG,EACR,KAAK,WAAW,EAMjB,wBAAwB;AAKzB;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,YACrB,GAAG,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,KAC3C,WAWF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,YACpB,MAAM,GAAG,GAAG,GAAG,WAAW,GAAG,MAAM,WAe7C,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,YACpB,GAAG,GAAG,WAAW,GAAG,MAAM,GAAG,MAAM,KAC3C,GAgBF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,YAAa,MAAM,WAgB3D,CAAC"}
|
|
@@ -3,8 +3,8 @@ import { AddressZero } from "@ethersproject/constants";
|
|
|
3
3
|
import { convertHexToDecimal } from "@metamask/controller-utils";
|
|
4
4
|
import { SolScope } from "@metamask/keyring-api";
|
|
5
5
|
import { toEvmCaipChainId } from "@metamask/multichain-network-controller";
|
|
6
|
-
import { isCaipChainId, isStrictHexString, parseCaipChainId, isCaipReference, numberToHex
|
|
7
|
-
import {
|
|
6
|
+
import { isCaipChainId, isStrictHexString, parseCaipChainId, isCaipReference, numberToHex } from "@metamask/utils";
|
|
7
|
+
import { isNativeAddress, isSolanaChainId } from "./bridge.mjs";
|
|
8
8
|
import { ChainId } from "../types.mjs";
|
|
9
9
|
/**
|
|
10
10
|
* Converts a chainId to a CaipChainId
|
|
@@ -92,27 +92,4 @@ export const formatAddressToCaipReference = (address) => {
|
|
|
92
92
|
}
|
|
93
93
|
return addressWithoutPrefix;
|
|
94
94
|
};
|
|
95
|
-
/**
|
|
96
|
-
* Converts an address or assetId to a CaipAssetType
|
|
97
|
-
*
|
|
98
|
-
* @param addressOrAssetId - The address or assetId to convert
|
|
99
|
-
* @param chainId - The chainId of the asset
|
|
100
|
-
* @returns The CaipAssetType
|
|
101
|
-
*/
|
|
102
|
-
export const formatAddressToAssetId = (addressOrAssetId, chainId) => {
|
|
103
|
-
if (isCaipAssetType(addressOrAssetId)) {
|
|
104
|
-
return addressOrAssetId;
|
|
105
|
-
}
|
|
106
|
-
if (isNativeAddress(addressOrAssetId)) {
|
|
107
|
-
return getNativeAssetForChainId(chainId).assetId;
|
|
108
|
-
}
|
|
109
|
-
if (chainId === SolScope.Mainnet) {
|
|
110
|
-
return CaipAssetTypeStruct.create(`${chainId}/token:${addressOrAssetId}`);
|
|
111
|
-
}
|
|
112
|
-
// EVM assets
|
|
113
|
-
if (!isStrictHexString(addressOrAssetId)) {
|
|
114
|
-
return undefined;
|
|
115
|
-
}
|
|
116
|
-
return CaipAssetTypeStruct.create(`${formatChainIdToCaip(chainId)}/erc20:${addressOrAssetId}`);
|
|
117
|
-
};
|
|
118
95
|
//# sourceMappingURL=caip-formatters.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"caip-formatters.mjs","sourceRoot":"","sources":["../../src/utils/caip-formatters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,+BAA+B;AACpD,OAAO,EAAE,WAAW,EAAE,iCAAiC;AACvD,OAAO,EAAE,mBAAmB,EAAE,mCAAmC;AACjE,OAAO,EAAE,QAAQ,EAAE,8BAA8B;AACjD,OAAO,EAAE,gBAAgB,EAAE,gDAAgD;
|
|
1
|
+
{"version":3,"file":"caip-formatters.mjs","sourceRoot":"","sources":["../../src/utils/caip-formatters.ts"],"names":[],"mappings":"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","sourcesContent":["import { getAddress } from '@ethersproject/address';\nimport { AddressZero } from '@ethersproject/constants';\nimport { convertHexToDecimal } from '@metamask/controller-utils';\nimport { SolScope } from '@metamask/keyring-api';\nimport { toEvmCaipChainId } from '@metamask/multichain-network-controller';\nimport {\n type Hex,\n type CaipChainId,\n isCaipChainId,\n isStrictHexString,\n parseCaipChainId,\n isCaipReference,\n numberToHex,\n} from '@metamask/utils';\n\nimport { isNativeAddress, isSolanaChainId } from './bridge';\nimport { ChainId } from '../types';\n\n/**\n * Converts a chainId to a CaipChainId\n *\n * @param chainId - The chainId to convert\n * @returns The CaipChainId\n */\nexport const formatChainIdToCaip = (\n chainId: Hex | number | CaipChainId | string,\n): CaipChainId => {\n if (isCaipChainId(chainId)) {\n return chainId;\n }\n if (isStrictHexString(chainId)) {\n return toEvmCaipChainId(chainId);\n }\n if (isSolanaChainId(chainId)) {\n return SolScope.Mainnet;\n }\n return toEvmCaipChainId(numberToHex(Number(chainId)));\n};\n\n/**\n * Converts a chainId to a decimal number that can be used for bridge-api requests\n *\n * @param chainId - The chainId to convert\n * @returns The decimal number\n */\nexport const formatChainIdToDec = (\n chainId: number | Hex | CaipChainId | string,\n) => {\n if (isStrictHexString(chainId)) {\n return convertHexToDecimal(chainId);\n }\n if (chainId === SolScope.Mainnet) {\n return ChainId.SOLANA;\n }\n if (isCaipChainId(chainId)) {\n return Number(chainId.split(':').at(-1));\n }\n if (typeof chainId === 'string') {\n return parseInt(chainId, 10);\n }\n return chainId;\n};\n\n/**\n * Converts a chainId to a hex string used to read controller data within the app\n * Hex chainIds are also used for fetching exchange rates\n *\n * @param chainId - The chainId to convert\n * @returns The hex string\n */\nexport const formatChainIdToHex = (\n chainId: Hex | CaipChainId | string | number,\n): Hex => {\n if (isStrictHexString(chainId)) {\n return chainId;\n }\n if (typeof chainId === 'number' || parseInt(chainId, 10)) {\n return numberToHex(Number(chainId));\n }\n if (isCaipChainId(chainId)) {\n const { reference } = parseCaipChainId(chainId);\n if (isCaipReference(reference) && !isNaN(Number(reference))) {\n return numberToHex(Number(reference));\n }\n }\n // Throw an error if a non-evm chainId is passed to this function\n // This should never happen, but it's a sanity check\n throw new Error(`Invalid cross-chain swaps chainId: ${chainId}`);\n};\n\n/**\n * Converts an asset or account address to a string that can be used for bridge-api requests\n *\n * @param address - The address to convert\n * @returns The converted address\n */\nexport const formatAddressToCaipReference = (address: string) => {\n if (isStrictHexString(address)) {\n return getAddress(address);\n }\n // If the address looks like a native token, return the zero address because it's\n // what bridge-api uses to represent a native asset\n if (isNativeAddress(address)) {\n return AddressZero;\n }\n const addressWithoutPrefix = address.split(':').at(-1);\n // If the address is not a valid hex string or CAIP address, throw an error\n // This should never happen, but it's a sanity check\n if (!addressWithoutPrefix) {\n throw new Error('Invalid address');\n }\n return addressWithoutPrefix;\n};\n"]}
|
package/dist/utils/fetch.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.fetchBridgeQuotes = exports.fetchBridgeTokens = exports.fetchBridgeFeatureFlags = exports.getClientIdHeader = void 0;
|
|
4
4
|
const utils_1 = require("@metamask/utils");
|
|
5
5
|
const caip_formatters_1 = require("./caip-formatters.cjs");
|
|
6
6
|
const validators_1 = require("./validators.cjs");
|
|
@@ -122,64 +122,4 @@ async function fetchBridgeQuotes(request, signal, clientId, fetchFn, bridgeApiBa
|
|
|
122
122
|
return filteredQuotes;
|
|
123
123
|
}
|
|
124
124
|
exports.fetchBridgeQuotes = fetchBridgeQuotes;
|
|
125
|
-
const fetchAssetPricesForCurrency = async (request) => {
|
|
126
|
-
const { currency, assetIds, clientId, fetchFn } = request;
|
|
127
|
-
const validAssetIds = Array.from(assetIds).filter(Boolean);
|
|
128
|
-
if (validAssetIds.length === 0) {
|
|
129
|
-
return {};
|
|
130
|
-
}
|
|
131
|
-
const queryParams = new URLSearchParams({
|
|
132
|
-
assetIds: validAssetIds.filter(Boolean).join(','),
|
|
133
|
-
vsCurrency: currency,
|
|
134
|
-
});
|
|
135
|
-
const url = `https://price.api.cx.metamask.io/v3/spot-prices?${queryParams}`;
|
|
136
|
-
const priceApiResponse = (await fetchFn(url, {
|
|
137
|
-
headers: (0, exports.getClientIdHeader)(clientId),
|
|
138
|
-
cacheOptions: { cacheRefreshTime: Number(utils_1.Duration.Second * 30) },
|
|
139
|
-
functionName: 'fetchAssetExchangeRates',
|
|
140
|
-
}));
|
|
141
|
-
if (!priceApiResponse || typeof priceApiResponse !== 'object') {
|
|
142
|
-
return {};
|
|
143
|
-
}
|
|
144
|
-
return Object.entries(priceApiResponse).reduce((acc, [assetId, currencyToPrice]) => {
|
|
145
|
-
if (!currencyToPrice) {
|
|
146
|
-
return acc;
|
|
147
|
-
}
|
|
148
|
-
if (!acc[assetId]) {
|
|
149
|
-
acc[assetId] = {};
|
|
150
|
-
}
|
|
151
|
-
if (currencyToPrice[currency]) {
|
|
152
|
-
acc[assetId][currency] =
|
|
153
|
-
currencyToPrice[currency].toString();
|
|
154
|
-
}
|
|
155
|
-
return acc;
|
|
156
|
-
}, {});
|
|
157
|
-
};
|
|
158
|
-
/**
|
|
159
|
-
* Fetches the asset prices from the price API for multiple currencies
|
|
160
|
-
*
|
|
161
|
-
* @param request - The request object
|
|
162
|
-
* @returns The asset prices by assetId
|
|
163
|
-
*/
|
|
164
|
-
const fetchAssetPrices = async (request) => {
|
|
165
|
-
const { currencies, ...args } = request;
|
|
166
|
-
const combinedPrices = await Promise.allSettled(Array.from(currencies).map(async (currency) => await fetchAssetPricesForCurrency({ ...args, currency }))).then((priceApiResponse) => {
|
|
167
|
-
return priceApiResponse.reduce((acc, result) => {
|
|
168
|
-
if (result.status === 'fulfilled') {
|
|
169
|
-
Object.entries(result.value).forEach(([assetId, currencyToPrice]) => {
|
|
170
|
-
const existingPrices = acc[assetId];
|
|
171
|
-
if (!existingPrices) {
|
|
172
|
-
acc[assetId] = {};
|
|
173
|
-
}
|
|
174
|
-
Object.entries(currencyToPrice).forEach(([currency, price]) => {
|
|
175
|
-
acc[assetId][currency] = price;
|
|
176
|
-
});
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
return acc;
|
|
180
|
-
}, {});
|
|
181
|
-
});
|
|
182
|
-
return combinedPrices;
|
|
183
|
-
};
|
|
184
|
-
exports.fetchAssetPrices = fetchAssetPrices;
|
|
185
125
|
//# sourceMappingURL=fetch.cjs.map
|
package/dist/utils/fetch.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.cjs","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CaipAssetType, CaipChainId, Hex } from '@metamask/utils';\nimport { Duration } from '@metamask/utils';\n\nimport {\n formatAddressToCaipReference,\n formatChainIdToCaip,\n formatChainIdToDec,\n} from './caip-formatters';\nimport {\n validateFeatureFlagsResponse,\n validateQuoteResponse,\n validateSwapsTokenObject,\n} from './validators';\nimport { DEFAULT_FEATURE_FLAG_CONFIG } from '../constants/bridge';\nimport type {\n QuoteResponse,\n BridgeFeatureFlags,\n FetchFunction,\n ChainConfiguration,\n GenericQuoteRequest,\n QuoteRequest,\n BridgeAsset,\n} from '../types';\nimport { BridgeFlag, BridgeFeatureFlagsKey } from '../types';\n\nconst CACHE_REFRESH_TEN_MINUTES = 10 * Duration.Minute;\n\nexport const getClientIdHeader = (clientId: string) => ({\n 'X-Client-Id': clientId,\n});\n\n/**\n * Fetches the bridge feature flags\n *\n * @param clientId - The client ID for metrics\n * @param fetchFn - The fetch function to use\n * @param bridgeApiBaseUrl - The base URL for the bridge API\n * @returns The bridge feature flags\n */\nexport async function fetchBridgeFeatureFlags(\n clientId: string,\n fetchFn: FetchFunction,\n bridgeApiBaseUrl: string,\n): Promise<BridgeFeatureFlags> {\n const url = `${bridgeApiBaseUrl}/getAllFeatureFlags`;\n const rawFeatureFlags: unknown = await fetchFn(url, {\n headers: getClientIdHeader(clientId),\n cacheOptions: { cacheRefreshTime: CACHE_REFRESH_TEN_MINUTES },\n functionName: 'fetchBridgeFeatureFlags',\n });\n\n if (validateFeatureFlagsResponse(rawFeatureFlags)) {\n const getChainsObj = (chains: Record<number, ChainConfiguration>) =>\n Object.entries(chains).reduce(\n (acc, [chainId, value]) => ({\n ...acc,\n [formatChainIdToCaip(chainId)]: value,\n }),\n {},\n );\n\n return {\n [BridgeFeatureFlagsKey.EXTENSION_CONFIG]: {\n ...rawFeatureFlags[BridgeFlag.EXTENSION_CONFIG],\n chains: getChainsObj(\n rawFeatureFlags[BridgeFlag.EXTENSION_CONFIG].chains,\n ),\n },\n [BridgeFeatureFlagsKey.MOBILE_CONFIG]: {\n ...rawFeatureFlags[BridgeFlag.MOBILE_CONFIG],\n chains: getChainsObj(rawFeatureFlags[BridgeFlag.MOBILE_CONFIG].chains),\n },\n };\n }\n\n return {\n [BridgeFeatureFlagsKey.EXTENSION_CONFIG]: DEFAULT_FEATURE_FLAG_CONFIG,\n [BridgeFeatureFlagsKey.MOBILE_CONFIG]: DEFAULT_FEATURE_FLAG_CONFIG,\n };\n}\n\n/**\n * Returns a list of enabled (unblocked) tokens\n *\n * @param chainId - The chain ID to fetch tokens for\n * @param clientId - The client ID for metrics\n * @param fetchFn - The fetch function to use\n * @param bridgeApiBaseUrl - The base URL for the bridge API\n * @returns A list of enabled (unblocked) tokens\n */\nexport async function fetchBridgeTokens(\n chainId: Hex | CaipChainId,\n clientId: string,\n fetchFn: FetchFunction,\n bridgeApiBaseUrl: string,\n): Promise<Record<string, BridgeAsset>> {\n // TODO make token api v2 call\n const url = `${bridgeApiBaseUrl}/getTokens?chainId=${formatChainIdToDec(chainId)}`;\n\n // TODO we will need to cache these. In Extension fetchWithCache is used. This is due to the following:\n // If we allow selecting dest networks which the user has not imported,\n // note that the Assets controller won't be able to provide tokens. In extension we fetch+cache the token list from bridge-api to handle this\n const tokens = await fetchFn(url, {\n headers: getClientIdHeader(clientId),\n cacheOptions: { cacheRefreshTime: CACHE_REFRESH_TEN_MINUTES },\n functionName: 'fetchBridgeTokens',\n });\n\n const transformedTokens: Record<string, BridgeAsset> = {};\n tokens.forEach((token: unknown) => {\n if (validateSwapsTokenObject(token)) {\n transformedTokens[token.address] = token;\n }\n });\n return transformedTokens;\n}\n\n/**\n * Converts the generic quote request to the type that the bridge-api expects\n * then fetches quotes from the bridge-api\n *\n * @param request - The quote request\n * @param signal - The abort signal\n * @param clientId - The client ID for metrics\n * @param fetchFn - The fetch function to use\n * @param bridgeApiBaseUrl - The base URL for the bridge API\n * @returns A list of bridge tx quotes\n */\nexport async function fetchBridgeQuotes(\n request: GenericQuoteRequest,\n signal: AbortSignal,\n clientId: string,\n fetchFn: FetchFunction,\n bridgeApiBaseUrl: string,\n): Promise<QuoteResponse[]> {\n const destWalletAddress = request.destWalletAddress ?? request.walletAddress;\n // Transform the generic quote request into QuoteRequest\n const normalizedRequest: QuoteRequest = {\n walletAddress: formatAddressToCaipReference(request.walletAddress),\n destWalletAddress: formatAddressToCaipReference(destWalletAddress),\n srcChainId: formatChainIdToDec(request.srcChainId),\n destChainId: formatChainIdToDec(request.destChainId),\n srcTokenAddress: formatAddressToCaipReference(request.srcTokenAddress),\n destTokenAddress: formatAddressToCaipReference(request.destTokenAddress),\n srcTokenAmount: request.srcTokenAmount,\n insufficientBal: Boolean(request.insufficientBal),\n resetApproval: Boolean(request.resetApproval),\n };\n if (request.slippage !== undefined) {\n normalizedRequest.slippage = request.slippage;\n }\n\n const queryParams = new URLSearchParams();\n Object.entries(normalizedRequest).forEach(([key, value]) => {\n queryParams.append(key, value.toString());\n });\n const url = `${bridgeApiBaseUrl}/getQuote?${queryParams}`;\n const quotes: unknown[] = await fetchFn(url, {\n headers: getClientIdHeader(clientId),\n signal,\n cacheOptions: { cacheRefreshTime: 0 },\n functionName: 'fetchBridgeQuotes',\n });\n\n const filteredQuotes = quotes.filter((quoteResponse: unknown) => {\n return validateQuoteResponse(quoteResponse);\n });\n return filteredQuotes as QuoteResponse[];\n}\n\nconst fetchAssetPricesForCurrency = async (request: {\n currency: string;\n assetIds: Set<CaipAssetType>;\n clientId: string;\n fetchFn: FetchFunction;\n}): Promise<Record<CaipAssetType, { [currency: string]: string }>> => {\n const { currency, assetIds, clientId, fetchFn } = request;\n const validAssetIds = Array.from(assetIds).filter(Boolean);\n if (validAssetIds.length === 0) {\n return {};\n }\n\n const queryParams = new URLSearchParams({\n assetIds: validAssetIds.filter(Boolean).join(','),\n vsCurrency: currency,\n });\n const url = `https://price.api.cx.metamask.io/v3/spot-prices?${queryParams}`;\n const priceApiResponse = (await fetchFn(url, {\n headers: getClientIdHeader(clientId),\n cacheOptions: { cacheRefreshTime: Number(Duration.Second * 30) },\n functionName: 'fetchAssetExchangeRates',\n })) as Record<CaipAssetType, { [currency: string]: number }>;\n\n if (!priceApiResponse || typeof priceApiResponse !== 'object') {\n return {};\n }\n\n return Object.entries(priceApiResponse).reduce(\n (acc, [assetId, currencyToPrice]) => {\n if (!currencyToPrice) {\n return acc;\n }\n if (!acc[assetId as CaipAssetType]) {\n acc[assetId as CaipAssetType] = {};\n }\n if (currencyToPrice[currency]) {\n acc[assetId as CaipAssetType][currency] =\n currencyToPrice[currency].toString();\n }\n return acc;\n },\n {} as Record<CaipAssetType, { [currency: string]: string }>,\n );\n};\n\n/**\n * Fetches the asset prices from the price API for multiple currencies\n *\n * @param request - The request object\n * @returns The asset prices by assetId\n */\nexport const fetchAssetPrices = async (\n request: {\n currencies: Set<string>;\n } & Omit<Parameters<typeof fetchAssetPricesForCurrency>[0], 'currency'>,\n): Promise<Record<CaipAssetType, { [currency: string]: string }>> => {\n const { currencies, ...args } = request;\n\n const combinedPrices = await Promise.allSettled(\n Array.from(currencies).map(\n async (currency) =>\n await fetchAssetPricesForCurrency({ ...args, currency }),\n ),\n ).then((priceApiResponse) => {\n return priceApiResponse.reduce(\n (acc, result) => {\n if (result.status === 'fulfilled') {\n Object.entries(result.value).forEach(([assetId, currencyToPrice]) => {\n const existingPrices = acc[assetId as CaipAssetType];\n if (!existingPrices) {\n acc[assetId as CaipAssetType] = {};\n }\n Object.entries(currencyToPrice).forEach(([currency, price]) => {\n acc[assetId as CaipAssetType][currency] = price;\n });\n });\n }\n return acc;\n },\n {} as Record<CaipAssetType, { [currency: string]: string }>,\n );\n });\n\n return combinedPrices;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"fetch.cjs","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CaipChainId, Hex } from '@metamask/utils';\nimport { Duration } from '@metamask/utils';\n\nimport {\n formatAddressToCaipReference,\n formatChainIdToCaip,\n formatChainIdToDec,\n} from './caip-formatters';\nimport {\n validateFeatureFlagsResponse,\n validateQuoteResponse,\n validateSwapsTokenObject,\n} from './validators';\nimport { DEFAULT_FEATURE_FLAG_CONFIG } from '../constants/bridge';\nimport type {\n QuoteResponse,\n BridgeFeatureFlags,\n FetchFunction,\n ChainConfiguration,\n GenericQuoteRequest,\n QuoteRequest,\n BridgeAsset,\n} from '../types';\nimport { BridgeFlag, BridgeFeatureFlagsKey } from '../types';\n\nconst CACHE_REFRESH_TEN_MINUTES = 10 * Duration.Minute;\n\nexport const getClientIdHeader = (clientId: string) => ({\n 'X-Client-Id': clientId,\n});\n\n/**\n * Fetches the bridge feature flags\n *\n * @param clientId - The client ID for metrics\n * @param fetchFn - The fetch function to use\n * @param bridgeApiBaseUrl - The base URL for the bridge API\n * @returns The bridge feature flags\n */\nexport async function fetchBridgeFeatureFlags(\n clientId: string,\n fetchFn: FetchFunction,\n bridgeApiBaseUrl: string,\n): Promise<BridgeFeatureFlags> {\n const url = `${bridgeApiBaseUrl}/getAllFeatureFlags`;\n const rawFeatureFlags: unknown = await fetchFn(url, {\n headers: getClientIdHeader(clientId),\n cacheOptions: { cacheRefreshTime: CACHE_REFRESH_TEN_MINUTES },\n functionName: 'fetchBridgeFeatureFlags',\n });\n\n if (validateFeatureFlagsResponse(rawFeatureFlags)) {\n const getChainsObj = (chains: Record<number, ChainConfiguration>) =>\n Object.entries(chains).reduce(\n (acc, [chainId, value]) => ({\n ...acc,\n [formatChainIdToCaip(chainId)]: value,\n }),\n {},\n );\n\n return {\n [BridgeFeatureFlagsKey.EXTENSION_CONFIG]: {\n ...rawFeatureFlags[BridgeFlag.EXTENSION_CONFIG],\n chains: getChainsObj(\n rawFeatureFlags[BridgeFlag.EXTENSION_CONFIG].chains,\n ),\n },\n [BridgeFeatureFlagsKey.MOBILE_CONFIG]: {\n ...rawFeatureFlags[BridgeFlag.MOBILE_CONFIG],\n chains: getChainsObj(rawFeatureFlags[BridgeFlag.MOBILE_CONFIG].chains),\n },\n };\n }\n\n return {\n [BridgeFeatureFlagsKey.EXTENSION_CONFIG]: DEFAULT_FEATURE_FLAG_CONFIG,\n [BridgeFeatureFlagsKey.MOBILE_CONFIG]: DEFAULT_FEATURE_FLAG_CONFIG,\n };\n}\n\n/**\n * Returns a list of enabled (unblocked) tokens\n *\n * @param chainId - The chain ID to fetch tokens for\n * @param clientId - The client ID for metrics\n * @param fetchFn - The fetch function to use\n * @param bridgeApiBaseUrl - The base URL for the bridge API\n * @returns A list of enabled (unblocked) tokens\n */\nexport async function fetchBridgeTokens(\n chainId: Hex | CaipChainId,\n clientId: string,\n fetchFn: FetchFunction,\n bridgeApiBaseUrl: string,\n): Promise<Record<string, BridgeAsset>> {\n // TODO make token api v2 call\n const url = `${bridgeApiBaseUrl}/getTokens?chainId=${formatChainIdToDec(chainId)}`;\n\n // TODO we will need to cache these. In Extension fetchWithCache is used. This is due to the following:\n // If we allow selecting dest networks which the user has not imported,\n // note that the Assets controller won't be able to provide tokens. In extension we fetch+cache the token list from bridge-api to handle this\n const tokens = await fetchFn(url, {\n headers: getClientIdHeader(clientId),\n cacheOptions: { cacheRefreshTime: CACHE_REFRESH_TEN_MINUTES },\n functionName: 'fetchBridgeTokens',\n });\n\n const transformedTokens: Record<string, BridgeAsset> = {};\n tokens.forEach((token: unknown) => {\n if (validateSwapsTokenObject(token)) {\n transformedTokens[token.address] = token;\n }\n });\n return transformedTokens;\n}\n\n/**\n * Converts the generic quote request to the type that the bridge-api expects\n * then fetches quotes from the bridge-api\n *\n * @param request - The quote request\n * @param signal - The abort signal\n * @param clientId - The client ID for metrics\n * @param fetchFn - The fetch function to use\n * @param bridgeApiBaseUrl - The base URL for the bridge API\n * @returns A list of bridge tx quotes\n */\nexport async function fetchBridgeQuotes(\n request: GenericQuoteRequest,\n signal: AbortSignal,\n clientId: string,\n fetchFn: FetchFunction,\n bridgeApiBaseUrl: string,\n): Promise<QuoteResponse[]> {\n const destWalletAddress = request.destWalletAddress ?? request.walletAddress;\n // Transform the generic quote request into QuoteRequest\n const normalizedRequest: QuoteRequest = {\n walletAddress: formatAddressToCaipReference(request.walletAddress),\n destWalletAddress: formatAddressToCaipReference(destWalletAddress),\n srcChainId: formatChainIdToDec(request.srcChainId),\n destChainId: formatChainIdToDec(request.destChainId),\n srcTokenAddress: formatAddressToCaipReference(request.srcTokenAddress),\n destTokenAddress: formatAddressToCaipReference(request.destTokenAddress),\n srcTokenAmount: request.srcTokenAmount,\n insufficientBal: Boolean(request.insufficientBal),\n resetApproval: Boolean(request.resetApproval),\n };\n if (request.slippage !== undefined) {\n normalizedRequest.slippage = request.slippage;\n }\n\n const queryParams = new URLSearchParams();\n Object.entries(normalizedRequest).forEach(([key, value]) => {\n queryParams.append(key, value.toString());\n });\n const url = `${bridgeApiBaseUrl}/getQuote?${queryParams}`;\n const quotes: unknown[] = await fetchFn(url, {\n headers: getClientIdHeader(clientId),\n signal,\n cacheOptions: { cacheRefreshTime: 0 },\n functionName: 'fetchBridgeQuotes',\n });\n\n const filteredQuotes = quotes.filter((quoteResponse: unknown) => {\n return validateQuoteResponse(quoteResponse);\n });\n return filteredQuotes as QuoteResponse[];\n}\n"]}
|
package/dist/utils/fetch.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { CaipChainId, Hex } from "@metamask/utils";
|
|
2
2
|
import type { QuoteResponse, BridgeFeatureFlags, FetchFunction, GenericQuoteRequest, BridgeAsset } from "../types.cjs";
|
|
3
3
|
export declare const getClientIdHeader: (clientId: string) => {
|
|
4
4
|
'X-Client-Id': string;
|
|
@@ -34,24 +34,4 @@ export declare function fetchBridgeTokens(chainId: Hex | CaipChainId, clientId:
|
|
|
34
34
|
* @returns A list of bridge tx quotes
|
|
35
35
|
*/
|
|
36
36
|
export declare function fetchBridgeQuotes(request: GenericQuoteRequest, signal: AbortSignal, clientId: string, fetchFn: FetchFunction, bridgeApiBaseUrl: string): Promise<QuoteResponse[]>;
|
|
37
|
-
declare const fetchAssetPricesForCurrency: (request: {
|
|
38
|
-
currency: string;
|
|
39
|
-
assetIds: Set<CaipAssetType>;
|
|
40
|
-
clientId: string;
|
|
41
|
-
fetchFn: FetchFunction;
|
|
42
|
-
}) => Promise<Record<`${string}:${string}/${string}:${string}`, {
|
|
43
|
-
[currency: string]: string;
|
|
44
|
-
}>>;
|
|
45
|
-
/**
|
|
46
|
-
* Fetches the asset prices from the price API for multiple currencies
|
|
47
|
-
*
|
|
48
|
-
* @param request - The request object
|
|
49
|
-
* @returns The asset prices by assetId
|
|
50
|
-
*/
|
|
51
|
-
export declare const fetchAssetPrices: (request: {
|
|
52
|
-
currencies: Set<string>;
|
|
53
|
-
} & Omit<Parameters<typeof fetchAssetPricesForCurrency>[0], 'currency'>) => Promise<Record<`${string}:${string}/${string}:${string}`, {
|
|
54
|
-
[currency: string]: string;
|
|
55
|
-
}>>;
|
|
56
|
-
export {};
|
|
57
37
|
//# sourceMappingURL=fetch.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.d.cts","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"fetch.d.cts","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,wBAAwB;AAcxD,OAAO,KAAK,EACV,aAAa,EACb,kBAAkB,EAClB,aAAa,EAEb,mBAAmB,EAEnB,WAAW,EACZ,qBAAiB;AAKlB,eAAO,MAAM,iBAAiB,aAAc,MAAM;;CAEhD,CAAC;AAEH;;;;;;;GAOG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,EACtB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,kBAAkB,CAAC,CAoC7B;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,GAAG,GAAG,WAAW,EAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,EACtB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAoBtC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,mBAAmB,EAC5B,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,EACtB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,aAAa,EAAE,CAAC,CAkC1B"}
|
package/dist/utils/fetch.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { CaipChainId, Hex } from "@metamask/utils";
|
|
2
2
|
import type { QuoteResponse, BridgeFeatureFlags, FetchFunction, GenericQuoteRequest, BridgeAsset } from "../types.mjs";
|
|
3
3
|
export declare const getClientIdHeader: (clientId: string) => {
|
|
4
4
|
'X-Client-Id': string;
|
|
@@ -34,24 +34,4 @@ export declare function fetchBridgeTokens(chainId: Hex | CaipChainId, clientId:
|
|
|
34
34
|
* @returns A list of bridge tx quotes
|
|
35
35
|
*/
|
|
36
36
|
export declare function fetchBridgeQuotes(request: GenericQuoteRequest, signal: AbortSignal, clientId: string, fetchFn: FetchFunction, bridgeApiBaseUrl: string): Promise<QuoteResponse[]>;
|
|
37
|
-
declare const fetchAssetPricesForCurrency: (request: {
|
|
38
|
-
currency: string;
|
|
39
|
-
assetIds: Set<CaipAssetType>;
|
|
40
|
-
clientId: string;
|
|
41
|
-
fetchFn: FetchFunction;
|
|
42
|
-
}) => Promise<Record<`${string}:${string}/${string}:${string}`, {
|
|
43
|
-
[currency: string]: string;
|
|
44
|
-
}>>;
|
|
45
|
-
/**
|
|
46
|
-
* Fetches the asset prices from the price API for multiple currencies
|
|
47
|
-
*
|
|
48
|
-
* @param request - The request object
|
|
49
|
-
* @returns The asset prices by assetId
|
|
50
|
-
*/
|
|
51
|
-
export declare const fetchAssetPrices: (request: {
|
|
52
|
-
currencies: Set<string>;
|
|
53
|
-
} & Omit<Parameters<typeof fetchAssetPricesForCurrency>[0], 'currency'>) => Promise<Record<`${string}:${string}/${string}:${string}`, {
|
|
54
|
-
[currency: string]: string;
|
|
55
|
-
}>>;
|
|
56
|
-
export {};
|
|
57
37
|
//# sourceMappingURL=fetch.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.d.mts","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"fetch.d.mts","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,wBAAwB;AAcxD,OAAO,KAAK,EACV,aAAa,EACb,kBAAkB,EAClB,aAAa,EAEb,mBAAmB,EAEnB,WAAW,EACZ,qBAAiB;AAKlB,eAAO,MAAM,iBAAiB,aAAc,MAAM;;CAEhD,CAAC;AAEH;;;;;;;GAOG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,EACtB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,kBAAkB,CAAC,CAoC7B;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,GAAG,GAAG,WAAW,EAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,EACtB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAoBtC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,mBAAmB,EAC5B,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,EACtB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,aAAa,EAAE,CAAC,CAkC1B"}
|
package/dist/utils/fetch.mjs
CHANGED
|
@@ -115,63 +115,4 @@ export async function fetchBridgeQuotes(request, signal, clientId, fetchFn, brid
|
|
|
115
115
|
});
|
|
116
116
|
return filteredQuotes;
|
|
117
117
|
}
|
|
118
|
-
const fetchAssetPricesForCurrency = async (request) => {
|
|
119
|
-
const { currency, assetIds, clientId, fetchFn } = request;
|
|
120
|
-
const validAssetIds = Array.from(assetIds).filter(Boolean);
|
|
121
|
-
if (validAssetIds.length === 0) {
|
|
122
|
-
return {};
|
|
123
|
-
}
|
|
124
|
-
const queryParams = new URLSearchParams({
|
|
125
|
-
assetIds: validAssetIds.filter(Boolean).join(','),
|
|
126
|
-
vsCurrency: currency,
|
|
127
|
-
});
|
|
128
|
-
const url = `https://price.api.cx.metamask.io/v3/spot-prices?${queryParams}`;
|
|
129
|
-
const priceApiResponse = (await fetchFn(url, {
|
|
130
|
-
headers: getClientIdHeader(clientId),
|
|
131
|
-
cacheOptions: { cacheRefreshTime: Number(Duration.Second * 30) },
|
|
132
|
-
functionName: 'fetchAssetExchangeRates',
|
|
133
|
-
}));
|
|
134
|
-
if (!priceApiResponse || typeof priceApiResponse !== 'object') {
|
|
135
|
-
return {};
|
|
136
|
-
}
|
|
137
|
-
return Object.entries(priceApiResponse).reduce((acc, [assetId, currencyToPrice]) => {
|
|
138
|
-
if (!currencyToPrice) {
|
|
139
|
-
return acc;
|
|
140
|
-
}
|
|
141
|
-
if (!acc[assetId]) {
|
|
142
|
-
acc[assetId] = {};
|
|
143
|
-
}
|
|
144
|
-
if (currencyToPrice[currency]) {
|
|
145
|
-
acc[assetId][currency] =
|
|
146
|
-
currencyToPrice[currency].toString();
|
|
147
|
-
}
|
|
148
|
-
return acc;
|
|
149
|
-
}, {});
|
|
150
|
-
};
|
|
151
|
-
/**
|
|
152
|
-
* Fetches the asset prices from the price API for multiple currencies
|
|
153
|
-
*
|
|
154
|
-
* @param request - The request object
|
|
155
|
-
* @returns The asset prices by assetId
|
|
156
|
-
*/
|
|
157
|
-
export const fetchAssetPrices = async (request) => {
|
|
158
|
-
const { currencies, ...args } = request;
|
|
159
|
-
const combinedPrices = await Promise.allSettled(Array.from(currencies).map(async (currency) => await fetchAssetPricesForCurrency({ ...args, currency }))).then((priceApiResponse) => {
|
|
160
|
-
return priceApiResponse.reduce((acc, result) => {
|
|
161
|
-
if (result.status === 'fulfilled') {
|
|
162
|
-
Object.entries(result.value).forEach(([assetId, currencyToPrice]) => {
|
|
163
|
-
const existingPrices = acc[assetId];
|
|
164
|
-
if (!existingPrices) {
|
|
165
|
-
acc[assetId] = {};
|
|
166
|
-
}
|
|
167
|
-
Object.entries(currencyToPrice).forEach(([currency, price]) => {
|
|
168
|
-
acc[assetId][currency] = price;
|
|
169
|
-
});
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
return acc;
|
|
173
|
-
}, {});
|
|
174
|
-
});
|
|
175
|
-
return combinedPrices;
|
|
176
|
-
};
|
|
177
118
|
//# sourceMappingURL=fetch.mjs.map
|
package/dist/utils/fetch.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.mjs","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CaipAssetType, CaipChainId, Hex } from '@metamask/utils';\nimport { Duration } from '@metamask/utils';\n\nimport {\n formatAddressToCaipReference,\n formatChainIdToCaip,\n formatChainIdToDec,\n} from './caip-formatters';\nimport {\n validateFeatureFlagsResponse,\n validateQuoteResponse,\n validateSwapsTokenObject,\n} from './validators';\nimport { DEFAULT_FEATURE_FLAG_CONFIG } from '../constants/bridge';\nimport type {\n QuoteResponse,\n BridgeFeatureFlags,\n FetchFunction,\n ChainConfiguration,\n GenericQuoteRequest,\n QuoteRequest,\n BridgeAsset,\n} from '../types';\nimport { BridgeFlag, BridgeFeatureFlagsKey } from '../types';\n\nconst CACHE_REFRESH_TEN_MINUTES = 10 * Duration.Minute;\n\nexport const getClientIdHeader = (clientId: string) => ({\n 'X-Client-Id': clientId,\n});\n\n/**\n * Fetches the bridge feature flags\n *\n * @param clientId - The client ID for metrics\n * @param fetchFn - The fetch function to use\n * @param bridgeApiBaseUrl - The base URL for the bridge API\n * @returns The bridge feature flags\n */\nexport async function fetchBridgeFeatureFlags(\n clientId: string,\n fetchFn: FetchFunction,\n bridgeApiBaseUrl: string,\n): Promise<BridgeFeatureFlags> {\n const url = `${bridgeApiBaseUrl}/getAllFeatureFlags`;\n const rawFeatureFlags: unknown = await fetchFn(url, {\n headers: getClientIdHeader(clientId),\n cacheOptions: { cacheRefreshTime: CACHE_REFRESH_TEN_MINUTES },\n functionName: 'fetchBridgeFeatureFlags',\n });\n\n if (validateFeatureFlagsResponse(rawFeatureFlags)) {\n const getChainsObj = (chains: Record<number, ChainConfiguration>) =>\n Object.entries(chains).reduce(\n (acc, [chainId, value]) => ({\n ...acc,\n [formatChainIdToCaip(chainId)]: value,\n }),\n {},\n );\n\n return {\n [BridgeFeatureFlagsKey.EXTENSION_CONFIG]: {\n ...rawFeatureFlags[BridgeFlag.EXTENSION_CONFIG],\n chains: getChainsObj(\n rawFeatureFlags[BridgeFlag.EXTENSION_CONFIG].chains,\n ),\n },\n [BridgeFeatureFlagsKey.MOBILE_CONFIG]: {\n ...rawFeatureFlags[BridgeFlag.MOBILE_CONFIG],\n chains: getChainsObj(rawFeatureFlags[BridgeFlag.MOBILE_CONFIG].chains),\n },\n };\n }\n\n return {\n [BridgeFeatureFlagsKey.EXTENSION_CONFIG]: DEFAULT_FEATURE_FLAG_CONFIG,\n [BridgeFeatureFlagsKey.MOBILE_CONFIG]: DEFAULT_FEATURE_FLAG_CONFIG,\n };\n}\n\n/**\n * Returns a list of enabled (unblocked) tokens\n *\n * @param chainId - The chain ID to fetch tokens for\n * @param clientId - The client ID for metrics\n * @param fetchFn - The fetch function to use\n * @param bridgeApiBaseUrl - The base URL for the bridge API\n * @returns A list of enabled (unblocked) tokens\n */\nexport async function fetchBridgeTokens(\n chainId: Hex | CaipChainId,\n clientId: string,\n fetchFn: FetchFunction,\n bridgeApiBaseUrl: string,\n): Promise<Record<string, BridgeAsset>> {\n // TODO make token api v2 call\n const url = `${bridgeApiBaseUrl}/getTokens?chainId=${formatChainIdToDec(chainId)}`;\n\n // TODO we will need to cache these. In Extension fetchWithCache is used. This is due to the following:\n // If we allow selecting dest networks which the user has not imported,\n // note that the Assets controller won't be able to provide tokens. In extension we fetch+cache the token list from bridge-api to handle this\n const tokens = await fetchFn(url, {\n headers: getClientIdHeader(clientId),\n cacheOptions: { cacheRefreshTime: CACHE_REFRESH_TEN_MINUTES },\n functionName: 'fetchBridgeTokens',\n });\n\n const transformedTokens: Record<string, BridgeAsset> = {};\n tokens.forEach((token: unknown) => {\n if (validateSwapsTokenObject(token)) {\n transformedTokens[token.address] = token;\n }\n });\n return transformedTokens;\n}\n\n/**\n * Converts the generic quote request to the type that the bridge-api expects\n * then fetches quotes from the bridge-api\n *\n * @param request - The quote request\n * @param signal - The abort signal\n * @param clientId - The client ID for metrics\n * @param fetchFn - The fetch function to use\n * @param bridgeApiBaseUrl - The base URL for the bridge API\n * @returns A list of bridge tx quotes\n */\nexport async function fetchBridgeQuotes(\n request: GenericQuoteRequest,\n signal: AbortSignal,\n clientId: string,\n fetchFn: FetchFunction,\n bridgeApiBaseUrl: string,\n): Promise<QuoteResponse[]> {\n const destWalletAddress = request.destWalletAddress ?? request.walletAddress;\n // Transform the generic quote request into QuoteRequest\n const normalizedRequest: QuoteRequest = {\n walletAddress: formatAddressToCaipReference(request.walletAddress),\n destWalletAddress: formatAddressToCaipReference(destWalletAddress),\n srcChainId: formatChainIdToDec(request.srcChainId),\n destChainId: formatChainIdToDec(request.destChainId),\n srcTokenAddress: formatAddressToCaipReference(request.srcTokenAddress),\n destTokenAddress: formatAddressToCaipReference(request.destTokenAddress),\n srcTokenAmount: request.srcTokenAmount,\n insufficientBal: Boolean(request.insufficientBal),\n resetApproval: Boolean(request.resetApproval),\n };\n if (request.slippage !== undefined) {\n normalizedRequest.slippage = request.slippage;\n }\n\n const queryParams = new URLSearchParams();\n Object.entries(normalizedRequest).forEach(([key, value]) => {\n queryParams.append(key, value.toString());\n });\n const url = `${bridgeApiBaseUrl}/getQuote?${queryParams}`;\n const quotes: unknown[] = await fetchFn(url, {\n headers: getClientIdHeader(clientId),\n signal,\n cacheOptions: { cacheRefreshTime: 0 },\n functionName: 'fetchBridgeQuotes',\n });\n\n const filteredQuotes = quotes.filter((quoteResponse: unknown) => {\n return validateQuoteResponse(quoteResponse);\n });\n return filteredQuotes as QuoteResponse[];\n}\n\nconst fetchAssetPricesForCurrency = async (request: {\n currency: string;\n assetIds: Set<CaipAssetType>;\n clientId: string;\n fetchFn: FetchFunction;\n}): Promise<Record<CaipAssetType, { [currency: string]: string }>> => {\n const { currency, assetIds, clientId, fetchFn } = request;\n const validAssetIds = Array.from(assetIds).filter(Boolean);\n if (validAssetIds.length === 0) {\n return {};\n }\n\n const queryParams = new URLSearchParams({\n assetIds: validAssetIds.filter(Boolean).join(','),\n vsCurrency: currency,\n });\n const url = `https://price.api.cx.metamask.io/v3/spot-prices?${queryParams}`;\n const priceApiResponse = (await fetchFn(url, {\n headers: getClientIdHeader(clientId),\n cacheOptions: { cacheRefreshTime: Number(Duration.Second * 30) },\n functionName: 'fetchAssetExchangeRates',\n })) as Record<CaipAssetType, { [currency: string]: number }>;\n\n if (!priceApiResponse || typeof priceApiResponse !== 'object') {\n return {};\n }\n\n return Object.entries(priceApiResponse).reduce(\n (acc, [assetId, currencyToPrice]) => {\n if (!currencyToPrice) {\n return acc;\n }\n if (!acc[assetId as CaipAssetType]) {\n acc[assetId as CaipAssetType] = {};\n }\n if (currencyToPrice[currency]) {\n acc[assetId as CaipAssetType][currency] =\n currencyToPrice[currency].toString();\n }\n return acc;\n },\n {} as Record<CaipAssetType, { [currency: string]: string }>,\n );\n};\n\n/**\n * Fetches the asset prices from the price API for multiple currencies\n *\n * @param request - The request object\n * @returns The asset prices by assetId\n */\nexport const fetchAssetPrices = async (\n request: {\n currencies: Set<string>;\n } & Omit<Parameters<typeof fetchAssetPricesForCurrency>[0], 'currency'>,\n): Promise<Record<CaipAssetType, { [currency: string]: string }>> => {\n const { currencies, ...args } = request;\n\n const combinedPrices = await Promise.allSettled(\n Array.from(currencies).map(\n async (currency) =>\n await fetchAssetPricesForCurrency({ ...args, currency }),\n ),\n ).then((priceApiResponse) => {\n return priceApiResponse.reduce(\n (acc, result) => {\n if (result.status === 'fulfilled') {\n Object.entries(result.value).forEach(([assetId, currencyToPrice]) => {\n const existingPrices = acc[assetId as CaipAssetType];\n if (!existingPrices) {\n acc[assetId as CaipAssetType] = {};\n }\n Object.entries(currencyToPrice).forEach(([currency, price]) => {\n acc[assetId as CaipAssetType][currency] = price;\n });\n });\n }\n return acc;\n },\n {} as Record<CaipAssetType, { [currency: string]: string }>,\n );\n });\n\n return combinedPrices;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"fetch.mjs","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CaipChainId, Hex } from '@metamask/utils';\nimport { Duration } from '@metamask/utils';\n\nimport {\n formatAddressToCaipReference,\n formatChainIdToCaip,\n formatChainIdToDec,\n} from './caip-formatters';\nimport {\n validateFeatureFlagsResponse,\n validateQuoteResponse,\n validateSwapsTokenObject,\n} from './validators';\nimport { DEFAULT_FEATURE_FLAG_CONFIG } from '../constants/bridge';\nimport type {\n QuoteResponse,\n BridgeFeatureFlags,\n FetchFunction,\n ChainConfiguration,\n GenericQuoteRequest,\n QuoteRequest,\n BridgeAsset,\n} from '../types';\nimport { BridgeFlag, BridgeFeatureFlagsKey } from '../types';\n\nconst CACHE_REFRESH_TEN_MINUTES = 10 * Duration.Minute;\n\nexport const getClientIdHeader = (clientId: string) => ({\n 'X-Client-Id': clientId,\n});\n\n/**\n * Fetches the bridge feature flags\n *\n * @param clientId - The client ID for metrics\n * @param fetchFn - The fetch function to use\n * @param bridgeApiBaseUrl - The base URL for the bridge API\n * @returns The bridge feature flags\n */\nexport async function fetchBridgeFeatureFlags(\n clientId: string,\n fetchFn: FetchFunction,\n bridgeApiBaseUrl: string,\n): Promise<BridgeFeatureFlags> {\n const url = `${bridgeApiBaseUrl}/getAllFeatureFlags`;\n const rawFeatureFlags: unknown = await fetchFn(url, {\n headers: getClientIdHeader(clientId),\n cacheOptions: { cacheRefreshTime: CACHE_REFRESH_TEN_MINUTES },\n functionName: 'fetchBridgeFeatureFlags',\n });\n\n if (validateFeatureFlagsResponse(rawFeatureFlags)) {\n const getChainsObj = (chains: Record<number, ChainConfiguration>) =>\n Object.entries(chains).reduce(\n (acc, [chainId, value]) => ({\n ...acc,\n [formatChainIdToCaip(chainId)]: value,\n }),\n {},\n );\n\n return {\n [BridgeFeatureFlagsKey.EXTENSION_CONFIG]: {\n ...rawFeatureFlags[BridgeFlag.EXTENSION_CONFIG],\n chains: getChainsObj(\n rawFeatureFlags[BridgeFlag.EXTENSION_CONFIG].chains,\n ),\n },\n [BridgeFeatureFlagsKey.MOBILE_CONFIG]: {\n ...rawFeatureFlags[BridgeFlag.MOBILE_CONFIG],\n chains: getChainsObj(rawFeatureFlags[BridgeFlag.MOBILE_CONFIG].chains),\n },\n };\n }\n\n return {\n [BridgeFeatureFlagsKey.EXTENSION_CONFIG]: DEFAULT_FEATURE_FLAG_CONFIG,\n [BridgeFeatureFlagsKey.MOBILE_CONFIG]: DEFAULT_FEATURE_FLAG_CONFIG,\n };\n}\n\n/**\n * Returns a list of enabled (unblocked) tokens\n *\n * @param chainId - The chain ID to fetch tokens for\n * @param clientId - The client ID for metrics\n * @param fetchFn - The fetch function to use\n * @param bridgeApiBaseUrl - The base URL for the bridge API\n * @returns A list of enabled (unblocked) tokens\n */\nexport async function fetchBridgeTokens(\n chainId: Hex | CaipChainId,\n clientId: string,\n fetchFn: FetchFunction,\n bridgeApiBaseUrl: string,\n): Promise<Record<string, BridgeAsset>> {\n // TODO make token api v2 call\n const url = `${bridgeApiBaseUrl}/getTokens?chainId=${formatChainIdToDec(chainId)}`;\n\n // TODO we will need to cache these. In Extension fetchWithCache is used. This is due to the following:\n // If we allow selecting dest networks which the user has not imported,\n // note that the Assets controller won't be able to provide tokens. In extension we fetch+cache the token list from bridge-api to handle this\n const tokens = await fetchFn(url, {\n headers: getClientIdHeader(clientId),\n cacheOptions: { cacheRefreshTime: CACHE_REFRESH_TEN_MINUTES },\n functionName: 'fetchBridgeTokens',\n });\n\n const transformedTokens: Record<string, BridgeAsset> = {};\n tokens.forEach((token: unknown) => {\n if (validateSwapsTokenObject(token)) {\n transformedTokens[token.address] = token;\n }\n });\n return transformedTokens;\n}\n\n/**\n * Converts the generic quote request to the type that the bridge-api expects\n * then fetches quotes from the bridge-api\n *\n * @param request - The quote request\n * @param signal - The abort signal\n * @param clientId - The client ID for metrics\n * @param fetchFn - The fetch function to use\n * @param bridgeApiBaseUrl - The base URL for the bridge API\n * @returns A list of bridge tx quotes\n */\nexport async function fetchBridgeQuotes(\n request: GenericQuoteRequest,\n signal: AbortSignal,\n clientId: string,\n fetchFn: FetchFunction,\n bridgeApiBaseUrl: string,\n): Promise<QuoteResponse[]> {\n const destWalletAddress = request.destWalletAddress ?? request.walletAddress;\n // Transform the generic quote request into QuoteRequest\n const normalizedRequest: QuoteRequest = {\n walletAddress: formatAddressToCaipReference(request.walletAddress),\n destWalletAddress: formatAddressToCaipReference(destWalletAddress),\n srcChainId: formatChainIdToDec(request.srcChainId),\n destChainId: formatChainIdToDec(request.destChainId),\n srcTokenAddress: formatAddressToCaipReference(request.srcTokenAddress),\n destTokenAddress: formatAddressToCaipReference(request.destTokenAddress),\n srcTokenAmount: request.srcTokenAmount,\n insufficientBal: Boolean(request.insufficientBal),\n resetApproval: Boolean(request.resetApproval),\n };\n if (request.slippage !== undefined) {\n normalizedRequest.slippage = request.slippage;\n }\n\n const queryParams = new URLSearchParams();\n Object.entries(normalizedRequest).forEach(([key, value]) => {\n queryParams.append(key, value.toString());\n });\n const url = `${bridgeApiBaseUrl}/getQuote?${queryParams}`;\n const quotes: unknown[] = await fetchFn(url, {\n headers: getClientIdHeader(clientId),\n signal,\n cacheOptions: { cacheRefreshTime: 0 },\n functionName: 'fetchBridgeQuotes',\n });\n\n const filteredQuotes = quotes.filter((quoteResponse: unknown) => {\n return validateQuoteResponse(quoteResponse);\n });\n return filteredQuotes as QuoteResponse[];\n}\n"]}
|