@metamask-previews/bridge-controller 25.0.0-preview-c2a3c87 → 25.0.1-preview-eb5ae1b
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 +16 -1
- package/dist/constants/tokens.cjs +1 -2
- package/dist/constants/tokens.cjs.map +1 -1
- package/dist/constants/tokens.d.cts +1 -1
- package/dist/constants/tokens.d.cts.map +1 -1
- package/dist/constants/tokens.d.mts +1 -1
- package/dist/constants/tokens.d.mts.map +1 -1
- package/dist/constants/tokens.mjs +1 -2
- package/dist/constants/tokens.mjs.map +1 -1
- package/dist/utils/fetch.cjs +7 -1
- package/dist/utils/fetch.cjs.map +1 -1
- package/dist/utils/fetch.d.cts.map +1 -1
- package/dist/utils/fetch.d.mts.map +1 -1
- package/dist/utils/fetch.mjs +7 -1
- package/dist/utils/fetch.mjs.map +1 -1
- package/dist/utils/validators.cjs +2 -1
- package/dist/utils/validators.cjs.map +1 -1
- package/dist/utils/validators.d.cts.map +1 -1
- package/dist/utils/validators.d.mts.map +1 -1
- package/dist/utils/validators.mjs +3 -2
- package/dist/utils/validators.mjs.map +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
@@ -7,6 +7,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
7
7
|
|
8
8
|
## [Unreleased]
|
9
9
|
|
10
|
+
### Added
|
11
|
+
|
12
|
+
- Error logs for invalid getQuote responses ([#5816](https://github.com/MetaMask/core/pull/5816))
|
13
|
+
|
14
|
+
### Changed
|
15
|
+
|
16
|
+
- Bump `@metamask/controller-utils` to `^11.9.0` ([#5812](https://github.com/MetaMask/core/pull/5812))
|
17
|
+
|
18
|
+
## [25.0.1]
|
19
|
+
|
20
|
+
### Fixed
|
21
|
+
|
22
|
+
- Use zero address as solana's default native address instead of assetId ([#5799](https://github.com/MetaMask/core/pull/5799))
|
23
|
+
|
10
24
|
## [25.0.0]
|
11
25
|
|
12
26
|
### Changed
|
@@ -241,7 +255,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
241
255
|
|
242
256
|
- Initial release ([#5317](https://github.com/MetaMask/core/pull/5317))
|
243
257
|
|
244
|
-
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/bridge-controller@25.0.
|
258
|
+
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/bridge-controller@25.0.1...HEAD
|
259
|
+
[25.0.1]: https://github.com/MetaMask/core/compare/@metamask/bridge-controller@25.0.0...@metamask/bridge-controller@25.0.1
|
245
260
|
[25.0.0]: https://github.com/MetaMask/core/compare/@metamask/bridge-controller@24.0.0...@metamask/bridge-controller@25.0.0
|
246
261
|
[24.0.0]: https://github.com/MetaMask/core/compare/@metamask/bridge-controller@23.0.0...@metamask/bridge-controller@24.0.0
|
247
262
|
[23.0.0]: https://github.com/MetaMask/core/compare/@metamask/bridge-controller@22.0.0...@metamask/bridge-controller@23.0.0
|
@@ -4,7 +4,6 @@ exports.SYMBOL_TO_SLIP44_MAP = exports.SWAPS_CHAINID_DEFAULT_TOKEN_MAP = void 0;
|
|
4
4
|
const keyring_api_1 = require("@metamask/keyring-api");
|
5
5
|
const chains_1 = require("./chains.cjs");
|
6
6
|
const DEFAULT_TOKEN_ADDRESS = '0x0000000000000000000000000000000000000000';
|
7
|
-
const DEFAULT_SOLANA_TOKEN_ADDRESS = `${keyring_api_1.SolScope.Mainnet}/slip44:501`;
|
8
7
|
const CURRENCY_SYMBOLS = {
|
9
8
|
ARBITRUM: 'ETH',
|
10
9
|
AVALANCHE: 'AVAX',
|
@@ -97,7 +96,7 @@ const BASE_SWAPS_TOKEN_OBJECT = {
|
|
97
96
|
const SOLANA_SWAPS_TOKEN_OBJECT = {
|
98
97
|
symbol: CURRENCY_SYMBOLS.SOL,
|
99
98
|
name: 'Solana',
|
100
|
-
address:
|
99
|
+
address: DEFAULT_TOKEN_ADDRESS,
|
101
100
|
decimals: 9,
|
102
101
|
iconUrl: '',
|
103
102
|
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"tokens.cjs","sourceRoot":"","sources":["../../src/constants/tokens.ts"],"names":[],"mappings":";;;AAAA,uDAAiD;AAGjD,yCAAqC;AAyBrC,MAAM,qBAAqB,GAAG,4CAA4C,CAAC;
|
1
|
+
{"version":3,"file":"tokens.cjs","sourceRoot":"","sources":["../../src/constants/tokens.ts"],"names":[],"mappings":"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","sourcesContent":["import { SolScope } from '@metamask/keyring-api';\n\nimport type { AllowedBridgeChainIds } from './bridge';\nimport { CHAIN_IDS } from './chains';\n\nexport type SwapsTokenObject = {\n /**\n * The symbol of token object\n */\n symbol: string;\n /**\n * The name for the network\n */\n name: string;\n /**\n * An address that the metaswap-api recognizes as the default token\n */\n address: string;\n /**\n * Number of digits after decimal point\n */\n decimals: number;\n /**\n * URL for token icon\n */\n iconUrl: string;\n};\n\nconst DEFAULT_TOKEN_ADDRESS = '0x0000000000000000000000000000000000000000';\n\nconst CURRENCY_SYMBOLS = {\n ARBITRUM: 'ETH',\n AVALANCHE: 'AVAX',\n BNB: 'BNB',\n BUSD: 'BUSD',\n CELO: 'CELO',\n DAI: 'DAI',\n GNOSIS: 'XDAI',\n ETH: 'ETH',\n FANTOM: 'FTM',\n HARMONY: 'ONE',\n PALM: 'PALM',\n MATIC: 'MATIC',\n POL: 'POL',\n TEST_ETH: 'TESTETH',\n USDC: 'USDC',\n USDT: 'USDT',\n WETH: 'WETH',\n OPTIMISM: 'ETH',\n CRONOS: 'CRO',\n GLIMMER: 'GLMR',\n MOONRIVER: 'MOVR',\n ONE: 'ONE',\n SOL: 'SOL',\n} as const;\n\nconst ETH_SWAPS_TOKEN_OBJECT = {\n symbol: CURRENCY_SYMBOLS.ETH,\n name: 'Ether',\n address: DEFAULT_TOKEN_ADDRESS,\n decimals: 18,\n iconUrl: '',\n};\n\nconst BNB_SWAPS_TOKEN_OBJECT = {\n symbol: CURRENCY_SYMBOLS.BNB,\n name: 'Binance Coin',\n address: DEFAULT_TOKEN_ADDRESS,\n decimals: 18,\n iconUrl: '',\n} as const;\n\nconst MATIC_SWAPS_TOKEN_OBJECT = {\n symbol: CURRENCY_SYMBOLS.POL,\n name: 'Polygon',\n address: DEFAULT_TOKEN_ADDRESS,\n decimals: 18,\n iconUrl: '',\n} as const;\n\nconst AVAX_SWAPS_TOKEN_OBJECT = {\n symbol: CURRENCY_SYMBOLS.AVALANCHE,\n name: 'Avalanche',\n address: DEFAULT_TOKEN_ADDRESS,\n decimals: 18,\n iconUrl: '',\n} as const;\n\nconst TEST_ETH_SWAPS_TOKEN_OBJECT = {\n symbol: CURRENCY_SYMBOLS.TEST_ETH,\n name: 'Test Ether',\n address: DEFAULT_TOKEN_ADDRESS,\n decimals: 18,\n iconUrl: '',\n} as const;\n\nconst GOERLI_SWAPS_TOKEN_OBJECT = {\n symbol: CURRENCY_SYMBOLS.ETH,\n name: 'Ether',\n address: DEFAULT_TOKEN_ADDRESS,\n decimals: 18,\n iconUrl: '',\n} as const;\n\nconst SEPOLIA_SWAPS_TOKEN_OBJECT = {\n symbol: CURRENCY_SYMBOLS.ETH,\n name: 'Ether',\n address: DEFAULT_TOKEN_ADDRESS,\n decimals: 18,\n iconUrl: '',\n} as const;\n\nconst ARBITRUM_SWAPS_TOKEN_OBJECT = {\n ...ETH_SWAPS_TOKEN_OBJECT,\n} as const;\n\nconst OPTIMISM_SWAPS_TOKEN_OBJECT = {\n ...ETH_SWAPS_TOKEN_OBJECT,\n} as const;\n\nconst ZKSYNC_ERA_SWAPS_TOKEN_OBJECT = {\n ...ETH_SWAPS_TOKEN_OBJECT,\n} as const;\n\nconst LINEA_SWAPS_TOKEN_OBJECT = {\n ...ETH_SWAPS_TOKEN_OBJECT,\n} as const;\n\nconst BASE_SWAPS_TOKEN_OBJECT = {\n ...ETH_SWAPS_TOKEN_OBJECT,\n} as const;\n\nconst SOLANA_SWAPS_TOKEN_OBJECT = {\n symbol: CURRENCY_SYMBOLS.SOL,\n name: 'Solana',\n address: DEFAULT_TOKEN_ADDRESS,\n decimals: 9,\n iconUrl: '',\n} as const;\n\nconst SWAPS_TESTNET_CHAIN_ID = '0x539';\n\nexport const SWAPS_CHAINID_DEFAULT_TOKEN_MAP = {\n [CHAIN_IDS.MAINNET]: ETH_SWAPS_TOKEN_OBJECT,\n [SWAPS_TESTNET_CHAIN_ID]: TEST_ETH_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.BSC]: BNB_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.POLYGON]: MATIC_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.GOERLI]: GOERLI_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.SEPOLIA]: SEPOLIA_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.AVALANCHE]: AVAX_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.OPTIMISM]: OPTIMISM_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.ARBITRUM]: ARBITRUM_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.ZKSYNC_ERA]: ZKSYNC_ERA_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.LINEA_MAINNET]: LINEA_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.BASE]: BASE_SWAPS_TOKEN_OBJECT,\n [SolScope.Mainnet]: SOLANA_SWAPS_TOKEN_OBJECT,\n} as const;\n\nexport type SupportedSwapsNativeCurrencySymbols =\n (typeof SWAPS_CHAINID_DEFAULT_TOKEN_MAP)[\n | AllowedBridgeChainIds\n | typeof SWAPS_TESTNET_CHAIN_ID]['symbol'];\n\n/**\n * A map of native currency symbols to their SLIP-44 representation\n * From {@link https://github.com/satoshilabs/slips/blob/master/slip-0044.md}\n */\nexport const SYMBOL_TO_SLIP44_MAP: Record<\n SupportedSwapsNativeCurrencySymbols,\n `${string}:${string}`\n> = {\n SOL: 'slip44:501',\n ETH: 'slip44:60',\n POL: 'slip44:966',\n BNB: 'slip44:714',\n AVAX: 'slip44:9000',\n TESTETH: 'slip44:60',\n};\n"]}
|
@@ -110,7 +110,7 @@ export declare const SWAPS_CHAINID_DEFAULT_TOKEN_MAP: {
|
|
110
110
|
readonly "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp": {
|
111
111
|
readonly symbol: "SOL";
|
112
112
|
readonly name: "Solana";
|
113
|
-
readonly address: "
|
113
|
+
readonly address: "0x0000000000000000000000000000000000000000";
|
114
114
|
readonly decimals: 9;
|
115
115
|
readonly iconUrl: "";
|
116
116
|
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"tokens.d.cts","sourceRoot":"","sources":["../../src/constants/tokens.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAiB;AAGtD,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;
|
1
|
+
{"version":3,"file":"tokens.d.cts","sourceRoot":"","sources":["../../src/constants/tokens.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAiB;AAGtD,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAkHF,QAAA,MAAM,sBAAsB,UAAU,CAAC;AAEvC,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAclC,CAAC;AAEX,MAAM,MAAM,mCAAmC,GAC7C,CAAC,OAAO,+BAA+B,CAAC,CACpC,qBAAqB,GACrB,OAAO,sBAAsB,CAAC,CAAC,QAAQ,CAAC,CAAC;AAE/C;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CACvC,mCAAmC,EACnC,GAAG,MAAM,IAAI,MAAM,EAAE,CAQtB,CAAC"}
|
@@ -110,7 +110,7 @@ export declare const SWAPS_CHAINID_DEFAULT_TOKEN_MAP: {
|
|
110
110
|
readonly "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp": {
|
111
111
|
readonly symbol: "SOL";
|
112
112
|
readonly name: "Solana";
|
113
|
-
readonly address: "
|
113
|
+
readonly address: "0x0000000000000000000000000000000000000000";
|
114
114
|
readonly decimals: 9;
|
115
115
|
readonly iconUrl: "";
|
116
116
|
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"tokens.d.mts","sourceRoot":"","sources":["../../src/constants/tokens.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAiB;AAGtD,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;
|
1
|
+
{"version":3,"file":"tokens.d.mts","sourceRoot":"","sources":["../../src/constants/tokens.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAiB;AAGtD,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAkHF,QAAA,MAAM,sBAAsB,UAAU,CAAC;AAEvC,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAclC,CAAC;AAEX,MAAM,MAAM,mCAAmC,GAC7C,CAAC,OAAO,+BAA+B,CAAC,CACpC,qBAAqB,GACrB,OAAO,sBAAsB,CAAC,CAAC,QAAQ,CAAC,CAAC;AAE/C;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CACvC,mCAAmC,EACnC,GAAG,MAAM,IAAI,MAAM,EAAE,CAQtB,CAAC"}
|
@@ -1,7 +1,6 @@
|
|
1
1
|
import { SolScope } from "@metamask/keyring-api";
|
2
2
|
import { CHAIN_IDS } from "./chains.mjs";
|
3
3
|
const DEFAULT_TOKEN_ADDRESS = '0x0000000000000000000000000000000000000000';
|
4
|
-
const DEFAULT_SOLANA_TOKEN_ADDRESS = `${SolScope.Mainnet}/slip44:501`;
|
5
4
|
const CURRENCY_SYMBOLS = {
|
6
5
|
ARBITRUM: 'ETH',
|
7
6
|
AVALANCHE: 'AVAX',
|
@@ -94,7 +93,7 @@ const BASE_SWAPS_TOKEN_OBJECT = {
|
|
94
93
|
const SOLANA_SWAPS_TOKEN_OBJECT = {
|
95
94
|
symbol: CURRENCY_SYMBOLS.SOL,
|
96
95
|
name: 'Solana',
|
97
|
-
address:
|
96
|
+
address: DEFAULT_TOKEN_ADDRESS,
|
98
97
|
decimals: 9,
|
99
98
|
iconUrl: '',
|
100
99
|
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"tokens.mjs","sourceRoot":"","sources":["../../src/constants/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,8BAA8B;AAGjD,OAAO,EAAE,SAAS,EAAE,qBAAiB;AAyBrC,MAAM,qBAAqB,GAAG,4CAA4C,CAAC;
|
1
|
+
{"version":3,"file":"tokens.mjs","sourceRoot":"","sources":["../../src/constants/tokens.ts"],"names":[],"mappings":"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","sourcesContent":["import { SolScope } from '@metamask/keyring-api';\n\nimport type { AllowedBridgeChainIds } from './bridge';\nimport { CHAIN_IDS } from './chains';\n\nexport type SwapsTokenObject = {\n /**\n * The symbol of token object\n */\n symbol: string;\n /**\n * The name for the network\n */\n name: string;\n /**\n * An address that the metaswap-api recognizes as the default token\n */\n address: string;\n /**\n * Number of digits after decimal point\n */\n decimals: number;\n /**\n * URL for token icon\n */\n iconUrl: string;\n};\n\nconst DEFAULT_TOKEN_ADDRESS = '0x0000000000000000000000000000000000000000';\n\nconst CURRENCY_SYMBOLS = {\n ARBITRUM: 'ETH',\n AVALANCHE: 'AVAX',\n BNB: 'BNB',\n BUSD: 'BUSD',\n CELO: 'CELO',\n DAI: 'DAI',\n GNOSIS: 'XDAI',\n ETH: 'ETH',\n FANTOM: 'FTM',\n HARMONY: 'ONE',\n PALM: 'PALM',\n MATIC: 'MATIC',\n POL: 'POL',\n TEST_ETH: 'TESTETH',\n USDC: 'USDC',\n USDT: 'USDT',\n WETH: 'WETH',\n OPTIMISM: 'ETH',\n CRONOS: 'CRO',\n GLIMMER: 'GLMR',\n MOONRIVER: 'MOVR',\n ONE: 'ONE',\n SOL: 'SOL',\n} as const;\n\nconst ETH_SWAPS_TOKEN_OBJECT = {\n symbol: CURRENCY_SYMBOLS.ETH,\n name: 'Ether',\n address: DEFAULT_TOKEN_ADDRESS,\n decimals: 18,\n iconUrl: '',\n};\n\nconst BNB_SWAPS_TOKEN_OBJECT = {\n symbol: CURRENCY_SYMBOLS.BNB,\n name: 'Binance Coin',\n address: DEFAULT_TOKEN_ADDRESS,\n decimals: 18,\n iconUrl: '',\n} as const;\n\nconst MATIC_SWAPS_TOKEN_OBJECT = {\n symbol: CURRENCY_SYMBOLS.POL,\n name: 'Polygon',\n address: DEFAULT_TOKEN_ADDRESS,\n decimals: 18,\n iconUrl: '',\n} as const;\n\nconst AVAX_SWAPS_TOKEN_OBJECT = {\n symbol: CURRENCY_SYMBOLS.AVALANCHE,\n name: 'Avalanche',\n address: DEFAULT_TOKEN_ADDRESS,\n decimals: 18,\n iconUrl: '',\n} as const;\n\nconst TEST_ETH_SWAPS_TOKEN_OBJECT = {\n symbol: CURRENCY_SYMBOLS.TEST_ETH,\n name: 'Test Ether',\n address: DEFAULT_TOKEN_ADDRESS,\n decimals: 18,\n iconUrl: '',\n} as const;\n\nconst GOERLI_SWAPS_TOKEN_OBJECT = {\n symbol: CURRENCY_SYMBOLS.ETH,\n name: 'Ether',\n address: DEFAULT_TOKEN_ADDRESS,\n decimals: 18,\n iconUrl: '',\n} as const;\n\nconst SEPOLIA_SWAPS_TOKEN_OBJECT = {\n symbol: CURRENCY_SYMBOLS.ETH,\n name: 'Ether',\n address: DEFAULT_TOKEN_ADDRESS,\n decimals: 18,\n iconUrl: '',\n} as const;\n\nconst ARBITRUM_SWAPS_TOKEN_OBJECT = {\n ...ETH_SWAPS_TOKEN_OBJECT,\n} as const;\n\nconst OPTIMISM_SWAPS_TOKEN_OBJECT = {\n ...ETH_SWAPS_TOKEN_OBJECT,\n} as const;\n\nconst ZKSYNC_ERA_SWAPS_TOKEN_OBJECT = {\n ...ETH_SWAPS_TOKEN_OBJECT,\n} as const;\n\nconst LINEA_SWAPS_TOKEN_OBJECT = {\n ...ETH_SWAPS_TOKEN_OBJECT,\n} as const;\n\nconst BASE_SWAPS_TOKEN_OBJECT = {\n ...ETH_SWAPS_TOKEN_OBJECT,\n} as const;\n\nconst SOLANA_SWAPS_TOKEN_OBJECT = {\n symbol: CURRENCY_SYMBOLS.SOL,\n name: 'Solana',\n address: DEFAULT_TOKEN_ADDRESS,\n decimals: 9,\n iconUrl: '',\n} as const;\n\nconst SWAPS_TESTNET_CHAIN_ID = '0x539';\n\nexport const SWAPS_CHAINID_DEFAULT_TOKEN_MAP = {\n [CHAIN_IDS.MAINNET]: ETH_SWAPS_TOKEN_OBJECT,\n [SWAPS_TESTNET_CHAIN_ID]: TEST_ETH_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.BSC]: BNB_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.POLYGON]: MATIC_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.GOERLI]: GOERLI_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.SEPOLIA]: SEPOLIA_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.AVALANCHE]: AVAX_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.OPTIMISM]: OPTIMISM_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.ARBITRUM]: ARBITRUM_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.ZKSYNC_ERA]: ZKSYNC_ERA_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.LINEA_MAINNET]: LINEA_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.BASE]: BASE_SWAPS_TOKEN_OBJECT,\n [SolScope.Mainnet]: SOLANA_SWAPS_TOKEN_OBJECT,\n} as const;\n\nexport type SupportedSwapsNativeCurrencySymbols =\n (typeof SWAPS_CHAINID_DEFAULT_TOKEN_MAP)[\n | AllowedBridgeChainIds\n | typeof SWAPS_TESTNET_CHAIN_ID]['symbol'];\n\n/**\n * A map of native currency symbols to their SLIP-44 representation\n * From {@link https://github.com/satoshilabs/slips/blob/master/slip-0044.md}\n */\nexport const SYMBOL_TO_SLIP44_MAP: Record<\n SupportedSwapsNativeCurrencySymbols,\n `${string}:${string}`\n> = {\n SOL: 'slip44:501',\n ETH: 'slip44:60',\n POL: 'slip44:966',\n BNB: 'slip44:714',\n AVAX: 'slip44:9000',\n TESTETH: 'slip44:60',\n};\n"]}
|
package/dist/utils/fetch.cjs
CHANGED
@@ -78,7 +78,13 @@ async function fetchBridgeQuotes(request, signal, clientId, fetchFn, bridgeApiBa
|
|
78
78
|
functionName: 'fetchBridgeQuotes',
|
79
79
|
});
|
80
80
|
const filteredQuotes = quotes.filter((quoteResponse) => {
|
81
|
-
|
81
|
+
try {
|
82
|
+
return (0, validators_1.validateQuoteResponse)(quoteResponse);
|
83
|
+
}
|
84
|
+
catch (error) {
|
85
|
+
console.error(error);
|
86
|
+
return false;
|
87
|
+
}
|
82
88
|
});
|
83
89
|
return filteredQuotes;
|
84
90
|
}
|
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 formatChainIdToDec,\n} from './caip-formatters';\nimport { validateQuoteResponse, validateSwapsTokenObject } from './validators';\nimport type {\n QuoteResponse,\n FetchFunction,\n GenericQuoteRequest,\n QuoteRequest,\n BridgeAsset,\n} 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 * 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<\n Record<CaipAssetType, { [currency: string]: string } | undefined>\n> => {\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 { CaipAssetType, CaipChainId, Hex } from '@metamask/utils';\nimport { Duration } from '@metamask/utils';\n\nimport {\n formatAddressToCaipReference,\n formatChainIdToDec,\n} from './caip-formatters';\nimport { validateQuoteResponse, validateSwapsTokenObject } from './validators';\nimport type {\n QuoteResponse,\n FetchFunction,\n GenericQuoteRequest,\n QuoteRequest,\n BridgeAsset,\n} 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 * 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 try {\n return validateQuoteResponse(quoteResponse);\n } catch (error) {\n console.error(error);\n return false;\n }\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<\n Record<CaipAssetType, { [currency: string]: string } | undefined>\n> => {\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 +1 @@
|
|
1
|
-
{"version":3,"file":"fetch.d.cts","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,EAAE,wBAAwB;AAQvE,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,mBAAmB,EAEnB,WAAW,EACZ,qBAAiB;AAIlB,eAAO,MAAM,iBAAiB,aAAc,MAAM;;CAEhD,CAAC;AAEH;;;;;;;;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,
|
1
|
+
{"version":3,"file":"fetch.d.cts","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,EAAE,wBAAwB;AAQvE,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,mBAAmB,EAEnB,WAAW,EACZ,qBAAiB;AAIlB,eAAO,MAAM,iBAAiB,aAAc,MAAM;;CAEhD,CAAC;AAEH;;;;;;;;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,CAuC1B;AAED,QAAA,MAAM,2BAA2B,YAAmB;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,IAAI,aAAa,CAAC,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,aAAa,CAAC;CACxB;;GAsCA,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,YAClB;IACP,UAAU,EAAE,IAAI,MAAM,CAAC,CAAC;CACzB,GAAG,KAAK,WAAW,kCAAkC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC;;eAgCxE,CAAC"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"fetch.d.mts","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,EAAE,wBAAwB;AAQvE,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,mBAAmB,EAEnB,WAAW,EACZ,qBAAiB;AAIlB,eAAO,MAAM,iBAAiB,aAAc,MAAM;;CAEhD,CAAC;AAEH;;;;;;;;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,
|
1
|
+
{"version":3,"file":"fetch.d.mts","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,EAAE,wBAAwB;AAQvE,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,mBAAmB,EAEnB,WAAW,EACZ,qBAAiB;AAIlB,eAAO,MAAM,iBAAiB,aAAc,MAAM;;CAEhD,CAAC;AAEH;;;;;;;;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,CAuC1B;AAED,QAAA,MAAM,2BAA2B,YAAmB;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,IAAI,aAAa,CAAC,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,aAAa,CAAC;CACxB;;GAsCA,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,YAClB;IACP,UAAU,EAAE,IAAI,MAAM,CAAC,CAAC;CACzB,GAAG,KAAK,WAAW,kCAAkC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC;;eAgCxE,CAAC"}
|
package/dist/utils/fetch.mjs
CHANGED
@@ -73,7 +73,13 @@ export async function fetchBridgeQuotes(request, signal, clientId, fetchFn, brid
|
|
73
73
|
functionName: 'fetchBridgeQuotes',
|
74
74
|
});
|
75
75
|
const filteredQuotes = quotes.filter((quoteResponse) => {
|
76
|
-
|
76
|
+
try {
|
77
|
+
return validateQuoteResponse(quoteResponse);
|
78
|
+
}
|
79
|
+
catch (error) {
|
80
|
+
console.error(error);
|
81
|
+
return false;
|
82
|
+
}
|
77
83
|
});
|
78
84
|
return filteredQuotes;
|
79
85
|
}
|
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 formatChainIdToDec,\n} from './caip-formatters';\nimport { validateQuoteResponse, validateSwapsTokenObject } from './validators';\nimport type {\n QuoteResponse,\n FetchFunction,\n GenericQuoteRequest,\n QuoteRequest,\n BridgeAsset,\n} 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 * 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<\n Record<CaipAssetType, { [currency: string]: string } | undefined>\n> => {\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 { CaipAssetType, CaipChainId, Hex } from '@metamask/utils';\nimport { Duration } from '@metamask/utils';\n\nimport {\n formatAddressToCaipReference,\n formatChainIdToDec,\n} from './caip-formatters';\nimport { validateQuoteResponse, validateSwapsTokenObject } from './validators';\nimport type {\n QuoteResponse,\n FetchFunction,\n GenericQuoteRequest,\n QuoteRequest,\n BridgeAsset,\n} 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 * 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 try {\n return validateQuoteResponse(quoteResponse);\n } catch (error) {\n console.error(error);\n return false;\n }\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<\n Record<CaipAssetType, { [currency: string]: string } | undefined>\n> => {\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"]}
|
@@ -91,7 +91,8 @@ const validateQuoteResponse = (data) => {
|
|
91
91
|
trade: (0, superstruct_1.union)([TxDataSchema, (0, superstruct_1.string)()]),
|
92
92
|
estimatedProcessingTimeInSeconds: (0, superstruct_1.number)(),
|
93
93
|
});
|
94
|
-
|
94
|
+
(0, superstruct_1.assert)(data, QuoteResponseSchema);
|
95
|
+
return true;
|
95
96
|
};
|
96
97
|
exports.validateQuoteResponse = validateQuoteResponse;
|
97
98
|
//# sourceMappingURL=validators.cjs.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"validators.cjs","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":";;;AAAA,iEAA+D;AAC/D,
|
1
|
+
{"version":3,"file":"validators.cjs","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":"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","sourcesContent":["import { isValidHexAddress } from '@metamask/controller-utils';\nimport {\n string,\n boolean,\n number,\n type,\n is,\n record,\n array,\n nullable,\n optional,\n enums,\n define,\n union,\n assert,\n} from '@metamask/superstruct';\nimport { isStrictHexString } from '@metamask/utils';\n\nimport type {\n BridgeAsset,\n FeatureFlagsPlatformConfig,\n QuoteResponse,\n} from '../types';\nimport { ActionTypes, FeeType } from '../types';\n\nconst HexAddressSchema = define('HexAddress', (v: unknown) =>\n isValidHexAddress(v as string, { allowNonPrefixed: false }),\n);\n\nconst HexStringSchema = define('HexString', (v: unknown) =>\n isStrictHexString(v as string),\n);\n\nexport const truthyString = (s: string) => Boolean(s?.length);\nconst TruthyDigitStringSchema = define(\n 'TruthyDigitString',\n (v: unknown) =>\n truthyString(v as string) && Boolean((v as string).match(/^\\d+$/u)),\n);\n\nconst ChainIdSchema = number();\n\nconst BridgeAssetSchema = type({\n chainId: ChainIdSchema,\n address: string(),\n assetId: string(),\n symbol: string(),\n name: string(),\n decimals: number(),\n icon: optional(string()),\n iconUrl: optional(string()),\n});\n\nexport const validateFeatureFlagsResponse = (\n data: unknown,\n): data is FeatureFlagsPlatformConfig => {\n const ChainConfigurationSchema = type({\n isActiveSrc: boolean(),\n isActiveDest: boolean(),\n refreshRate: optional(number()),\n topAssets: optional(array(string())),\n });\n\n const PlatformConfigSchema = type({\n refreshRate: number(),\n maxRefreshCount: number(),\n support: boolean(),\n chains: record(string(), ChainConfigurationSchema),\n });\n\n // Create schema for FeatureFlagResponse\n return is(data, PlatformConfigSchema);\n};\n\nexport const validateSwapsTokenObject = (\n data: unknown,\n): data is BridgeAsset => {\n return is(data, BridgeAssetSchema);\n};\n\nexport const validateQuoteResponse = (data: unknown): data is QuoteResponse => {\n const FeeDataSchema = type({\n amount: TruthyDigitStringSchema,\n asset: BridgeAssetSchema,\n });\n\n const ProtocolSchema = type({\n name: string(),\n displayName: optional(string()),\n icon: optional(string()),\n });\n\n const StepSchema = type({\n action: enums(Object.values(ActionTypes)),\n srcChainId: ChainIdSchema,\n destChainId: optional(ChainIdSchema),\n srcAsset: BridgeAssetSchema,\n destAsset: BridgeAssetSchema,\n srcAmount: string(),\n destAmount: string(),\n protocol: ProtocolSchema,\n });\n\n const RefuelDataSchema = StepSchema;\n\n const QuoteSchema = type({\n requestId: string(),\n srcChainId: ChainIdSchema,\n srcAsset: BridgeAssetSchema,\n srcTokenAmount: string(),\n destChainId: ChainIdSchema,\n destAsset: BridgeAssetSchema,\n destTokenAmount: string(),\n feeData: record(enums(Object.values(FeeType)), FeeDataSchema),\n bridgeId: string(),\n bridges: array(string()),\n steps: array(StepSchema),\n refuel: optional(RefuelDataSchema),\n });\n\n const TxDataSchema = type({\n chainId: number(),\n to: HexAddressSchema,\n from: HexAddressSchema,\n value: HexStringSchema,\n data: HexStringSchema,\n gasLimit: nullable(number()),\n });\n\n const QuoteResponseSchema = type({\n quote: QuoteSchema,\n approval: optional(TxDataSchema),\n trade: union([TxDataSchema, string()]),\n estimatedProcessingTimeInSeconds: number(),\n });\n\n assert(data, QuoteResponseSchema);\n return true;\n};\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"validators.d.cts","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"validators.d.cts","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EACV,WAAW,EACX,0BAA0B,EAC1B,aAAa,EACd,qBAAiB;AAWlB,eAAO,MAAM,YAAY,MAAO,MAAM,YAAuB,CAAC;AAoB9D,eAAO,MAAM,4BAA4B,SACjC,OAAO,uCAkBd,CAAC;AAEF,eAAO,MAAM,wBAAwB,SAC7B,OAAO,wBAGd,CAAC;AAEF,eAAO,MAAM,qBAAqB,SAAU,OAAO,0BA0DlD,CAAC"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"validators.d.mts","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"validators.d.mts","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EACV,WAAW,EACX,0BAA0B,EAC1B,aAAa,EACd,qBAAiB;AAWlB,eAAO,MAAM,YAAY,MAAO,MAAM,YAAuB,CAAC;AAoB9D,eAAO,MAAM,4BAA4B,SACjC,OAAO,uCAkBd,CAAC;AAEF,eAAO,MAAM,wBAAwB,SAC7B,OAAO,wBAGd,CAAC;AAEF,eAAO,MAAM,qBAAqB,SAAU,OAAO,0BA0DlD,CAAC"}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { isValidHexAddress } from "@metamask/controller-utils";
|
2
|
-
import { string, boolean, number, type, is, record, array, nullable, optional, enums, define, union } from "@metamask/superstruct";
|
2
|
+
import { string, boolean, number, type, is, record, array, nullable, optional, enums, define, union, assert } from "@metamask/superstruct";
|
3
3
|
import { isStrictHexString } from "@metamask/utils";
|
4
4
|
import { ActionTypes, FeeType } from "../types.mjs";
|
5
5
|
const HexAddressSchema = define('HexAddress', (v) => isValidHexAddress(v, { allowNonPrefixed: false }));
|
@@ -85,6 +85,7 @@ export const validateQuoteResponse = (data) => {
|
|
85
85
|
trade: union([TxDataSchema, string()]),
|
86
86
|
estimatedProcessingTimeInSeconds: number(),
|
87
87
|
});
|
88
|
-
|
88
|
+
assert(data, QuoteResponseSchema);
|
89
|
+
return true;
|
89
90
|
};
|
90
91
|
//# sourceMappingURL=validators.mjs.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"validators.mjs","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,mCAAmC;AAC/D,OAAO,EACL,MAAM,EACN,OAAO,EACP,MAAM,EACN,IAAI,EACJ,EAAE,EACF,MAAM,EACN,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,MAAM,EACN,KAAK,
|
1
|
+
{"version":3,"file":"validators.mjs","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":"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","sourcesContent":["import { isValidHexAddress } from '@metamask/controller-utils';\nimport {\n string,\n boolean,\n number,\n type,\n is,\n record,\n array,\n nullable,\n optional,\n enums,\n define,\n union,\n assert,\n} from '@metamask/superstruct';\nimport { isStrictHexString } from '@metamask/utils';\n\nimport type {\n BridgeAsset,\n FeatureFlagsPlatformConfig,\n QuoteResponse,\n} from '../types';\nimport { ActionTypes, FeeType } from '../types';\n\nconst HexAddressSchema = define('HexAddress', (v: unknown) =>\n isValidHexAddress(v as string, { allowNonPrefixed: false }),\n);\n\nconst HexStringSchema = define('HexString', (v: unknown) =>\n isStrictHexString(v as string),\n);\n\nexport const truthyString = (s: string) => Boolean(s?.length);\nconst TruthyDigitStringSchema = define(\n 'TruthyDigitString',\n (v: unknown) =>\n truthyString(v as string) && Boolean((v as string).match(/^\\d+$/u)),\n);\n\nconst ChainIdSchema = number();\n\nconst BridgeAssetSchema = type({\n chainId: ChainIdSchema,\n address: string(),\n assetId: string(),\n symbol: string(),\n name: string(),\n decimals: number(),\n icon: optional(string()),\n iconUrl: optional(string()),\n});\n\nexport const validateFeatureFlagsResponse = (\n data: unknown,\n): data is FeatureFlagsPlatformConfig => {\n const ChainConfigurationSchema = type({\n isActiveSrc: boolean(),\n isActiveDest: boolean(),\n refreshRate: optional(number()),\n topAssets: optional(array(string())),\n });\n\n const PlatformConfigSchema = type({\n refreshRate: number(),\n maxRefreshCount: number(),\n support: boolean(),\n chains: record(string(), ChainConfigurationSchema),\n });\n\n // Create schema for FeatureFlagResponse\n return is(data, PlatformConfigSchema);\n};\n\nexport const validateSwapsTokenObject = (\n data: unknown,\n): data is BridgeAsset => {\n return is(data, BridgeAssetSchema);\n};\n\nexport const validateQuoteResponse = (data: unknown): data is QuoteResponse => {\n const FeeDataSchema = type({\n amount: TruthyDigitStringSchema,\n asset: BridgeAssetSchema,\n });\n\n const ProtocolSchema = type({\n name: string(),\n displayName: optional(string()),\n icon: optional(string()),\n });\n\n const StepSchema = type({\n action: enums(Object.values(ActionTypes)),\n srcChainId: ChainIdSchema,\n destChainId: optional(ChainIdSchema),\n srcAsset: BridgeAssetSchema,\n destAsset: BridgeAssetSchema,\n srcAmount: string(),\n destAmount: string(),\n protocol: ProtocolSchema,\n });\n\n const RefuelDataSchema = StepSchema;\n\n const QuoteSchema = type({\n requestId: string(),\n srcChainId: ChainIdSchema,\n srcAsset: BridgeAssetSchema,\n srcTokenAmount: string(),\n destChainId: ChainIdSchema,\n destAsset: BridgeAssetSchema,\n destTokenAmount: string(),\n feeData: record(enums(Object.values(FeeType)), FeeDataSchema),\n bridgeId: string(),\n bridges: array(string()),\n steps: array(StepSchema),\n refuel: optional(RefuelDataSchema),\n });\n\n const TxDataSchema = type({\n chainId: number(),\n to: HexAddressSchema,\n from: HexAddressSchema,\n value: HexStringSchema,\n data: HexStringSchema,\n gasLimit: nullable(number()),\n });\n\n const QuoteResponseSchema = type({\n quote: QuoteSchema,\n approval: optional(TxDataSchema),\n trade: union([TxDataSchema, string()]),\n estimatedProcessingTimeInSeconds: number(),\n });\n\n assert(data, QuoteResponseSchema);\n return true;\n};\n"]}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@metamask-previews/bridge-controller",
|
3
|
-
"version": "25.0.
|
3
|
+
"version": "25.0.1-preview-eb5ae1b",
|
4
4
|
"description": "Manages bridge-related quote fetching functionality for MetaMask",
|
5
5
|
"keywords": [
|
6
6
|
"MetaMask",
|
@@ -53,7 +53,7 @@
|
|
53
53
|
"@ethersproject/contracts": "^5.7.0",
|
54
54
|
"@ethersproject/providers": "^5.7.0",
|
55
55
|
"@metamask/base-controller": "^8.0.1",
|
56
|
-
"@metamask/controller-utils": "^11.
|
56
|
+
"@metamask/controller-utils": "^11.9.0",
|
57
57
|
"@metamask/gas-fee-controller": "^23.0.0",
|
58
58
|
"@metamask/keyring-api": "^17.4.0",
|
59
59
|
"@metamask/metamask-eth-abis": "^3.1.1",
|
@@ -68,11 +68,11 @@
|
|
68
68
|
"@metamask/assets-controllers": "^63.0.0",
|
69
69
|
"@metamask/auto-changelog": "^3.4.4",
|
70
70
|
"@metamask/eth-json-rpc-provider": "^4.1.8",
|
71
|
-
"@metamask/network-controller": "^23.
|
71
|
+
"@metamask/network-controller": "^23.5.0",
|
72
72
|
"@metamask/remote-feature-flag-controller": "^1.6.0",
|
73
73
|
"@metamask/snaps-controllers": "^11.2.1",
|
74
74
|
"@metamask/superstruct": "^3.1.0",
|
75
|
-
"@metamask/transaction-controller": "^56.
|
75
|
+
"@metamask/transaction-controller": "^56.1.0",
|
76
76
|
"@types/jest": "^27.4.1",
|
77
77
|
"deepmerge": "^4.2.2",
|
78
78
|
"jest": "^27.5.1",
|