@metamask-previews/bridge-controller 1.0.0-preview-90578fc4 → 2.0.0-preview-4b0cb25d

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 CHANGED
@@ -7,11 +7,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.0.0]
11
+
12
+ ### Added
13
+
14
+ - Mobile feature flags ([#5359](https://github.com/MetaMask/core/pull/5359))
15
+
16
+ ### Changed
17
+
18
+ - **BREAKING:** Change `BridgeController` state structure to have all fields at root of state ([#5406](https://github.com/MetaMask/core/pull/5406))
19
+ - **BREAKING:** Change `BridgeController` state defaults to `null` instead of `undefined` ([#5406](https://github.com/MetaMask/core/pull/5406))
20
+
10
21
  ## [1.0.0]
11
22
 
12
23
  ### Added
13
24
 
14
25
  - Initial release ([#5317](https://github.com/MetaMask/core/pull/5317))
15
26
 
16
- [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/bridge-controller@1.0.0...HEAD
27
+ [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/bridge-controller@2.0.0...HEAD
28
+ [2.0.0]: https://github.com/MetaMask/core/compare/@metamask/bridge-controller@1.0.0...@metamask/bridge-controller@2.0.0
17
29
  [1.0.0]: https://github.com/MetaMask/core/releases/tag/@metamask/bridge-controller@1.0.0
@@ -1 +1 @@
1
- {"version":3,"file":"types.cjs","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAsBA;;;GAGG;AACH,IAAY,SAYX;AAZD,WAAY,SAAS;IACnB,4DAA4D;IAC5D,8BAAiB,CAAA;IACjB,qBAAqB;IACrB,4BAAe,CAAA;IACf,kCAAkC;IAClC,wBAAW,CAAA;IACX;;;OAGG;IACH,gCAAmB,CAAA;AACrB,CAAC,EAZW,SAAS,yBAAT,SAAS,QAYpB;AAuBD,6BAA6B;AAE7B,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,wCAA2B,CAAA;IAC3B,wCAA2B,CAAA;AAC7B,CAAC,EAHW,SAAS,yBAAT,SAAS,QAGpB;AAaD,mCAAmC;AAEnC,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,mDAAqC,CAAA;IACrC,6CAA+B,CAAA;AACjC,CAAC,EAHW,UAAU,0BAAV,UAAU,QAGrB;AAqDD,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,gCAAiB,CAAA;IACjB,4BAAa,CAAA;IACb,gCAAiB,CAAA;AACnB,CAAC,EAJW,WAAW,2BAAX,WAAW,QAItB;AAuCD,IAAY,OAUX;AAVD,WAAY,OAAO;IACjB,mCAAO,CAAA;IACP,8CAAa,CAAA;IACb,oCAAQ,CAAA;IACR,6CAAa,CAAA;IACb,2CAAY,CAAA;IACZ,wCAAW,CAAA;IACX,iDAAgB,CAAA;IAChB,mDAAiB,CAAA;IACjB,2CAAa,CAAA;AACf,CAAC,EAVW,OAAO,uBAAP,OAAO,QAUlB;AAED,IAAY,OAGX;AAHD,WAAY,OAAO;IACjB,oCAAyB,CAAA;IACzB,4BAAiB,CAAA;AACnB,CAAC,EAHW,OAAO,uBAAP,OAAO,QAGlB;AAaD,IAAY,qBAGX;AAHD,WAAY,qBAAqB;IAC/B,6DAAoC,CAAA;IACpC,uDAA8B,CAAA;AAChC,CAAC,EAHW,qBAAqB,qCAArB,qBAAqB,QAGhC;AAgBD,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,uDAAO,CAAA;IACP,uDAAO,CAAA;IACP,mDAAK,CAAA;AACP,CAAC,EAJW,aAAa,6BAAb,aAAa,QAIxB;AACD,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC1B,6DAAyC,CAAA;IACzC,0EAAsD,CAAA;AACxD,CAAC,EAHW,gBAAgB,gCAAhB,gBAAgB,QAG3B;AACD,IAAY,sBAIX;AAJD,WAAY,sBAAsB;IAChC,qEAA2C,CAAA;IAC3C,oDAA0B,CAAA;IAC1B,gFAAsD,CAAA;AACxD,CAAC,EAJW,sBAAsB,sCAAtB,sBAAsB,QAIjC","sourcesContent":["import type { AccountsControllerGetSelectedAccountAction } from '@metamask/accounts-controller';\nimport type {\n ControllerStateChangeEvent,\n RestrictedMessenger,\n} from '@metamask/base-controller';\nimport type {\n NetworkControllerFindNetworkClientIdByChainIdAction,\n NetworkControllerGetStateAction,\n NetworkControllerGetNetworkClientByIdAction,\n} from '@metamask/network-controller';\nimport type { Hex } from '@metamask/utils';\nimport type { BigNumber } from 'bignumber.js';\n\nimport type { BridgeController } from './bridge-controller';\nimport type { BRIDGE_CONTROLLER_NAME } from './constants/bridge';\n\nexport type FetchFunction = (\n input: RequestInfo | URL,\n init?: RequestInit,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n) => Promise<any>;\n\n/**\n * The types of assets that a user can send\n *\n */\nexport enum AssetType {\n /** The native asset for the current network, such as ETH */\n native = 'NATIVE',\n /** An ERC20 token */\n token = 'TOKEN',\n /** An ERC721 or ERC1155 token. */\n NFT = 'NFT',\n /**\n * A transaction interacting with a contract that isn't a token method\n * interaction will be marked as dealing with an unknown asset type.\n */\n unknown = 'UNKNOWN',\n}\n\nexport type ChainConfiguration = {\n isActiveSrc: boolean;\n isActiveDest: boolean;\n};\n\nexport type L1GasFees = {\n l1GasFeesInHexWei?: string; // l1 fees for approval and trade in hex wei, appended by controller\n};\n// Values derived from the quote response\n// valueInCurrency values are calculated based on the user's selected currency\n\nexport type QuoteMetadata = {\n gasFee: { amount: BigNumber; valueInCurrency: BigNumber | null };\n totalNetworkFee: { amount: BigNumber; valueInCurrency: BigNumber | null }; // estimatedGasFees + relayerFees\n totalMaxNetworkFee: { amount: BigNumber; valueInCurrency: BigNumber | null }; // maxGasFees + relayerFees\n toTokenAmount: { amount: BigNumber; valueInCurrency: BigNumber | null };\n adjustedReturn: { valueInCurrency: BigNumber | null }; // destTokenAmount - totalNetworkFee\n sentAmount: { amount: BigNumber; valueInCurrency: BigNumber | null }; // srcTokenAmount + metabridgeFee\n swapRate: BigNumber; // destTokenAmount / sentAmount\n cost: { valueInCurrency: BigNumber | null }; // sentAmount - adjustedReturn\n};\n// Sort order set by the user\n\nexport enum SortOrder {\n COST_ASC = 'cost_ascending',\n ETA_ASC = 'time_descending',\n}\n\nexport type BridgeToken = {\n type: AssetType.native | AssetType.token;\n address: string;\n symbol: string;\n image: string;\n decimals: number;\n chainId: Hex;\n balance: string; // raw balance\n string: string | undefined; // normalized balance as a stringified number\n tokenFiatAmount?: number | null;\n} | null;\n// Types copied from Metabridge API\n\nexport enum BridgeFlag {\n EXTENSION_CONFIG = 'extension-config',\n MOBILE_CONFIG = 'mobile-config',\n}\ntype DecimalChainId = string;\nexport type GasMultiplierByChainId = Record<DecimalChainId, number>;\n\nexport type FeatureFlagResponse = {\n [BridgeFlag.EXTENSION_CONFIG]: {\n refreshRate: number;\n maxRefreshCount: number;\n support: boolean;\n chains: Record<number, ChainConfiguration>;\n };\n [BridgeFlag.MOBILE_CONFIG]: {\n refreshRate: number;\n maxRefreshCount: number;\n support: boolean;\n chains: Record<number, ChainConfiguration>;\n };\n};\n\nexport type BridgeAsset = {\n chainId: ChainId;\n address: string;\n symbol: string;\n name: string;\n decimals: number;\n icon?: string;\n};\n\nexport type QuoteRequest = {\n walletAddress: string;\n destWalletAddress?: string;\n srcChainId: ChainId;\n destChainId: ChainId;\n srcTokenAddress: string;\n destTokenAddress: string;\n /**\n * This is the amount sent, in atomic amount\n */\n srcTokenAmount: string;\n slippage: number;\n aggIds?: string[];\n bridgeIds?: string[];\n insufficientBal?: boolean;\n resetApproval?: boolean;\n refuel?: boolean;\n};\n\nexport type Protocol = {\n name: string;\n displayName?: string;\n icon?: string;\n};\n\nexport enum ActionTypes {\n BRIDGE = 'bridge',\n SWAP = 'swap',\n REFUEL = 'refuel',\n}\n\nexport type Step = {\n action: ActionTypes;\n srcChainId: ChainId;\n destChainId?: ChainId;\n srcAsset: BridgeAsset;\n destAsset: BridgeAsset;\n srcAmount: string;\n destAmount: string;\n protocol: Protocol;\n};\n\nexport type RefuelData = Step;\n\nexport type Quote = {\n requestId: string;\n srcChainId: ChainId;\n srcAsset: BridgeAsset;\n // Some tokens have a fee of 0, so sometimes it's equal to amount sent\n srcTokenAmount: string; // Atomic amount, the amount sent - fees\n destChainId: ChainId;\n destAsset: BridgeAsset;\n destTokenAmount: string; // Atomic amount, the amount received\n feeData: Record<FeeType.METABRIDGE, FeeData> &\n Partial<Record<FeeType, FeeData>>;\n bridgeId: string;\n bridges: string[];\n steps: Step[];\n refuel?: RefuelData;\n};\n\nexport type QuoteResponse = {\n quote: Quote;\n approval: TxData | null;\n trade: TxData;\n estimatedProcessingTimeInSeconds: number;\n};\n\nexport enum ChainId {\n ETH = 1,\n OPTIMISM = 10,\n BSC = 56,\n POLYGON = 137,\n ZKSYNC = 324,\n BASE = 8453,\n ARBITRUM = 42161,\n AVALANCHE = 43114,\n LINEA = 59144,\n}\n\nexport enum FeeType {\n METABRIDGE = 'metabridge',\n REFUEL = 'refuel',\n}\nexport type FeeData = {\n amount: string;\n asset: BridgeAsset;\n};\nexport type TxData = {\n chainId: ChainId;\n to: string;\n from: string;\n value: string;\n data: string;\n gasLimit: number | null;\n};\nexport enum BridgeFeatureFlagsKey {\n EXTENSION_CONFIG = 'extensionConfig',\n MOBILE_CONFIG = 'mobileConfig',\n}\n\nexport type BridgeFeatureFlags = {\n [BridgeFeatureFlagsKey.EXTENSION_CONFIG]: {\n refreshRate: number;\n maxRefreshCount: number;\n support: boolean;\n chains: Record<Hex, ChainConfiguration>;\n };\n [BridgeFeatureFlagsKey.MOBILE_CONFIG]: {\n refreshRate: number;\n maxRefreshCount: number;\n support: boolean;\n chains: Record<Hex, ChainConfiguration>;\n };\n};\nexport enum RequestStatus {\n LOADING,\n FETCHED,\n ERROR,\n}\nexport enum BridgeUserAction {\n SELECT_DEST_NETWORK = 'selectDestNetwork',\n UPDATE_QUOTE_PARAMS = 'updateBridgeQuoteRequestParams',\n}\nexport enum BridgeBackgroundAction {\n SET_FEATURE_FLAGS = 'setBridgeFeatureFlags',\n RESET_STATE = 'resetState',\n GET_BRIDGE_ERC20_ALLOWANCE = 'getBridgeERC20Allowance',\n}\nexport type BridgeControllerState = {\n bridgeFeatureFlags: BridgeFeatureFlags;\n quoteRequest: Partial<QuoteRequest>;\n quotes: (QuoteResponse & L1GasFees)[];\n quotesInitialLoadTime: number | null;\n quotesLastFetched: number | null;\n quotesLoadingStatus: RequestStatus | null;\n quoteFetchError: string | null;\n quotesRefreshCount: number;\n};\n\nexport type BridgeControllerAction<\n FunctionName extends keyof BridgeController,\n> = {\n type: `${typeof BRIDGE_CONTROLLER_NAME}:${FunctionName}`;\n handler: BridgeController[FunctionName];\n};\n\n// Maps to BridgeController function names\nexport type BridgeControllerActions =\n | BridgeControllerAction<BridgeBackgroundAction.SET_FEATURE_FLAGS>\n | BridgeControllerAction<BridgeBackgroundAction.RESET_STATE>\n | BridgeControllerAction<BridgeBackgroundAction.GET_BRIDGE_ERC20_ALLOWANCE>\n | BridgeControllerAction<BridgeUserAction.UPDATE_QUOTE_PARAMS>;\n\nexport type BridgeControllerEvents = ControllerStateChangeEvent<\n typeof BRIDGE_CONTROLLER_NAME,\n BridgeControllerState\n>;\n\nexport type AllowedActions =\n | AccountsControllerGetSelectedAccountAction\n | NetworkControllerFindNetworkClientIdByChainIdAction\n | NetworkControllerGetStateAction\n | NetworkControllerGetNetworkClientByIdAction;\nexport type AllowedEvents = never;\n\n/**\n * The messenger for the BridgeController.\n */\nexport type BridgeControllerMessenger = RestrictedMessenger<\n typeof BRIDGE_CONTROLLER_NAME,\n BridgeControllerActions | AllowedActions,\n BridgeControllerEvents | AllowedEvents,\n AllowedActions['type'],\n AllowedEvents['type']\n>;\n"]}
1
+ {"version":3,"file":"types.cjs","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAsBA;;;GAGG;AACH,IAAY,SAYX;AAZD,WAAY,SAAS;IACnB,4DAA4D;IAC5D,8BAAiB,CAAA;IACjB,qBAAqB;IACrB,4BAAe,CAAA;IACf,kCAAkC;IAClC,wBAAW,CAAA;IACX;;;OAGG;IACH,gCAAmB,CAAA;AACrB,CAAC,EAZW,SAAS,yBAAT,SAAS,QAYpB;AAuBD,6BAA6B;AAE7B,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,wCAA2B,CAAA;IAC3B,wCAA2B,CAAA;AAC7B,CAAC,EAHW,SAAS,yBAAT,SAAS,QAGpB;AAaD,mCAAmC;AAEnC,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,mDAAqC,CAAA;IACrC,6CAA+B,CAAA;AACjC,CAAC,EAHW,UAAU,0BAAV,UAAU,QAGrB;AAkDD,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,gCAAiB,CAAA;IACjB,4BAAa,CAAA;IACb,gCAAiB,CAAA;AACnB,CAAC,EAJW,WAAW,2BAAX,WAAW,QAItB;AAuCD,IAAY,OAUX;AAVD,WAAY,OAAO;IACjB,mCAAO,CAAA;IACP,8CAAa,CAAA;IACb,oCAAQ,CAAA;IACR,6CAAa,CAAA;IACb,2CAAY,CAAA;IACZ,wCAAW,CAAA;IACX,iDAAgB,CAAA;IAChB,mDAAiB,CAAA;IACjB,2CAAa,CAAA;AACf,CAAC,EAVW,OAAO,uBAAP,OAAO,QAUlB;AAED,IAAY,OAGX;AAHD,WAAY,OAAO;IACjB,oCAAyB,CAAA;IACzB,4BAAiB,CAAA;AACnB,CAAC,EAHW,OAAO,uBAAP,OAAO,QAGlB;AAaD,IAAY,qBAGX;AAHD,WAAY,qBAAqB;IAC/B,6DAAoC,CAAA;IACpC,uDAA8B,CAAA;AAChC,CAAC,EAHW,qBAAqB,qCAArB,qBAAqB,QAGhC;AAaD,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,uDAAO,CAAA;IACP,uDAAO,CAAA;IACP,mDAAK,CAAA;AACP,CAAC,EAJW,aAAa,6BAAb,aAAa,QAIxB;AACD,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC1B,6DAAyC,CAAA;IACzC,0EAAsD,CAAA;AACxD,CAAC,EAHW,gBAAgB,gCAAhB,gBAAgB,QAG3B;AACD,IAAY,sBAIX;AAJD,WAAY,sBAAsB;IAChC,qEAA2C,CAAA;IAC3C,oDAA0B,CAAA;IAC1B,gFAAsD,CAAA;AACxD,CAAC,EAJW,sBAAsB,sCAAtB,sBAAsB,QAIjC","sourcesContent":["import type { AccountsControllerGetSelectedAccountAction } from '@metamask/accounts-controller';\nimport type {\n ControllerStateChangeEvent,\n RestrictedMessenger,\n} from '@metamask/base-controller';\nimport type {\n NetworkControllerFindNetworkClientIdByChainIdAction,\n NetworkControllerGetStateAction,\n NetworkControllerGetNetworkClientByIdAction,\n} from '@metamask/network-controller';\nimport type { Hex } from '@metamask/utils';\nimport type { BigNumber } from 'bignumber.js';\n\nimport type { BridgeController } from './bridge-controller';\nimport type { BRIDGE_CONTROLLER_NAME } from './constants/bridge';\n\nexport type FetchFunction = (\n input: RequestInfo | URL,\n init?: RequestInit,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n) => Promise<any>;\n\n/**\n * The types of assets that a user can send\n *\n */\nexport enum AssetType {\n /** The native asset for the current network, such as ETH */\n native = 'NATIVE',\n /** An ERC20 token */\n token = 'TOKEN',\n /** An ERC721 or ERC1155 token. */\n NFT = 'NFT',\n /**\n * A transaction interacting with a contract that isn't a token method\n * interaction will be marked as dealing with an unknown asset type.\n */\n unknown = 'UNKNOWN',\n}\n\nexport type ChainConfiguration = {\n isActiveSrc: boolean;\n isActiveDest: boolean;\n};\n\nexport type L1GasFees = {\n l1GasFeesInHexWei?: string; // l1 fees for approval and trade in hex wei, appended by controller\n};\n// Values derived from the quote response\n// valueInCurrency values are calculated based on the user's selected currency\n\nexport type QuoteMetadata = {\n gasFee: { amount: BigNumber; valueInCurrency: BigNumber | null };\n totalNetworkFee: { amount: BigNumber; valueInCurrency: BigNumber | null }; // estimatedGasFees + relayerFees\n totalMaxNetworkFee: { amount: BigNumber; valueInCurrency: BigNumber | null }; // maxGasFees + relayerFees\n toTokenAmount: { amount: BigNumber; valueInCurrency: BigNumber | null };\n adjustedReturn: { valueInCurrency: BigNumber | null }; // destTokenAmount - totalNetworkFee\n sentAmount: { amount: BigNumber; valueInCurrency: BigNumber | null }; // srcTokenAmount + metabridgeFee\n swapRate: BigNumber; // destTokenAmount / sentAmount\n cost: { valueInCurrency: BigNumber | null }; // sentAmount - adjustedReturn\n};\n// Sort order set by the user\n\nexport enum SortOrder {\n COST_ASC = 'cost_ascending',\n ETA_ASC = 'time_descending',\n}\n\nexport type BridgeToken = {\n type: AssetType.native | AssetType.token;\n address: string;\n symbol: string;\n image: string;\n decimals: number;\n chainId: Hex;\n balance: string; // raw balance\n string: string | undefined; // normalized balance as a stringified number\n tokenFiatAmount?: number | null;\n} | null;\n// Types copied from Metabridge API\n\nexport enum BridgeFlag {\n EXTENSION_CONFIG = 'extension-config',\n MOBILE_CONFIG = 'mobile-config',\n}\ntype DecimalChainId = string;\nexport type GasMultiplierByChainId = Record<DecimalChainId, number>;\n\ntype FeatureFlagResponsePlatformConfig = {\n refreshRate: number;\n maxRefreshCount: number;\n support: boolean;\n chains: Record<string, ChainConfiguration>;\n};\n\nexport type FeatureFlagResponse = {\n [BridgeFlag.EXTENSION_CONFIG]: FeatureFlagResponsePlatformConfig;\n [BridgeFlag.MOBILE_CONFIG]: FeatureFlagResponsePlatformConfig;\n};\n\nexport type BridgeAsset = {\n chainId: ChainId;\n address: string;\n symbol: string;\n name: string;\n decimals: number;\n icon?: string;\n};\n\nexport type QuoteRequest = {\n walletAddress: string;\n destWalletAddress?: string;\n srcChainId: ChainId;\n destChainId: ChainId;\n srcTokenAddress: string;\n destTokenAddress: string;\n /**\n * This is the amount sent, in atomic amount\n */\n srcTokenAmount: string;\n slippage: number;\n aggIds?: string[];\n bridgeIds?: string[];\n insufficientBal?: boolean;\n resetApproval?: boolean;\n refuel?: boolean;\n};\n\nexport type Protocol = {\n name: string;\n displayName?: string;\n icon?: string;\n};\n\nexport enum ActionTypes {\n BRIDGE = 'bridge',\n SWAP = 'swap',\n REFUEL = 'refuel',\n}\n\nexport type Step = {\n action: ActionTypes;\n srcChainId: ChainId;\n destChainId?: ChainId;\n srcAsset: BridgeAsset;\n destAsset: BridgeAsset;\n srcAmount: string;\n destAmount: string;\n protocol: Protocol;\n};\n\nexport type RefuelData = Step;\n\nexport type Quote = {\n requestId: string;\n srcChainId: ChainId;\n srcAsset: BridgeAsset;\n // Some tokens have a fee of 0, so sometimes it's equal to amount sent\n srcTokenAmount: string; // Atomic amount, the amount sent - fees\n destChainId: ChainId;\n destAsset: BridgeAsset;\n destTokenAmount: string; // Atomic amount, the amount received\n feeData: Record<FeeType.METABRIDGE, FeeData> &\n Partial<Record<FeeType, FeeData>>;\n bridgeId: string;\n bridges: string[];\n steps: Step[];\n refuel?: RefuelData;\n};\n\nexport type QuoteResponse = {\n quote: Quote;\n approval: TxData | null;\n trade: TxData;\n estimatedProcessingTimeInSeconds: number;\n};\n\nexport enum ChainId {\n ETH = 1,\n OPTIMISM = 10,\n BSC = 56,\n POLYGON = 137,\n ZKSYNC = 324,\n BASE = 8453,\n ARBITRUM = 42161,\n AVALANCHE = 43114,\n LINEA = 59144,\n}\n\nexport enum FeeType {\n METABRIDGE = 'metabridge',\n REFUEL = 'refuel',\n}\nexport type FeeData = {\n amount: string;\n asset: BridgeAsset;\n};\nexport type TxData = {\n chainId: ChainId;\n to: string;\n from: string;\n value: string;\n data: string;\n gasLimit: number | null;\n};\nexport enum BridgeFeatureFlagsKey {\n EXTENSION_CONFIG = 'extensionConfig',\n MOBILE_CONFIG = 'mobileConfig',\n}\n\ntype FeatureFlagsPlatformConfig = {\n refreshRate: number;\n maxRefreshCount: number;\n support: boolean;\n chains: Record<Hex, ChainConfiguration>;\n};\n\nexport type BridgeFeatureFlags = {\n [BridgeFeatureFlagsKey.EXTENSION_CONFIG]: FeatureFlagsPlatformConfig;\n [BridgeFeatureFlagsKey.MOBILE_CONFIG]: FeatureFlagsPlatformConfig;\n};\nexport enum RequestStatus {\n LOADING,\n FETCHED,\n ERROR,\n}\nexport enum BridgeUserAction {\n SELECT_DEST_NETWORK = 'selectDestNetwork',\n UPDATE_QUOTE_PARAMS = 'updateBridgeQuoteRequestParams',\n}\nexport enum BridgeBackgroundAction {\n SET_FEATURE_FLAGS = 'setBridgeFeatureFlags',\n RESET_STATE = 'resetState',\n GET_BRIDGE_ERC20_ALLOWANCE = 'getBridgeERC20Allowance',\n}\nexport type BridgeControllerState = {\n bridgeFeatureFlags: BridgeFeatureFlags;\n quoteRequest: Partial<QuoteRequest>;\n quotes: (QuoteResponse & L1GasFees)[];\n quotesInitialLoadTime: number | null;\n quotesLastFetched: number | null;\n quotesLoadingStatus: RequestStatus | null;\n quoteFetchError: string | null;\n quotesRefreshCount: number;\n};\n\nexport type BridgeControllerAction<\n FunctionName extends keyof BridgeController,\n> = {\n type: `${typeof BRIDGE_CONTROLLER_NAME}:${FunctionName}`;\n handler: BridgeController[FunctionName];\n};\n\n// Maps to BridgeController function names\nexport type BridgeControllerActions =\n | BridgeControllerAction<BridgeBackgroundAction.SET_FEATURE_FLAGS>\n | BridgeControllerAction<BridgeBackgroundAction.RESET_STATE>\n | BridgeControllerAction<BridgeBackgroundAction.GET_BRIDGE_ERC20_ALLOWANCE>\n | BridgeControllerAction<BridgeUserAction.UPDATE_QUOTE_PARAMS>;\n\nexport type BridgeControllerEvents = ControllerStateChangeEvent<\n typeof BRIDGE_CONTROLLER_NAME,\n BridgeControllerState\n>;\n\nexport type AllowedActions =\n | AccountsControllerGetSelectedAccountAction\n | NetworkControllerFindNetworkClientIdByChainIdAction\n | NetworkControllerGetStateAction\n | NetworkControllerGetNetworkClientByIdAction;\nexport type AllowedEvents = never;\n\n/**\n * The messenger for the BridgeController.\n */\nexport type BridgeControllerMessenger = RestrictedMessenger<\n typeof BRIDGE_CONTROLLER_NAME,\n BridgeControllerActions | AllowedActions,\n BridgeControllerEvents | AllowedEvents,\n AllowedActions['type'],\n AllowedEvents['type']\n>;\n"]}
package/dist/types.d.cts CHANGED
@@ -80,19 +80,15 @@ export declare enum BridgeFlag {
80
80
  }
81
81
  type DecimalChainId = string;
82
82
  export type GasMultiplierByChainId = Record<DecimalChainId, number>;
83
+ type FeatureFlagResponsePlatformConfig = {
84
+ refreshRate: number;
85
+ maxRefreshCount: number;
86
+ support: boolean;
87
+ chains: Record<string, ChainConfiguration>;
88
+ };
83
89
  export type FeatureFlagResponse = {
84
- [BridgeFlag.EXTENSION_CONFIG]: {
85
- refreshRate: number;
86
- maxRefreshCount: number;
87
- support: boolean;
88
- chains: Record<number, ChainConfiguration>;
89
- };
90
- [BridgeFlag.MOBILE_CONFIG]: {
91
- refreshRate: number;
92
- maxRefreshCount: number;
93
- support: boolean;
94
- chains: Record<number, ChainConfiguration>;
95
- };
90
+ [BridgeFlag.EXTENSION_CONFIG]: FeatureFlagResponsePlatformConfig;
91
+ [BridgeFlag.MOBILE_CONFIG]: FeatureFlagResponsePlatformConfig;
96
92
  };
97
93
  export type BridgeAsset = {
98
94
  chainId: ChainId;
@@ -192,19 +188,15 @@ export declare enum BridgeFeatureFlagsKey {
192
188
  EXTENSION_CONFIG = "extensionConfig",
193
189
  MOBILE_CONFIG = "mobileConfig"
194
190
  }
191
+ type FeatureFlagsPlatformConfig = {
192
+ refreshRate: number;
193
+ maxRefreshCount: number;
194
+ support: boolean;
195
+ chains: Record<Hex, ChainConfiguration>;
196
+ };
195
197
  export type BridgeFeatureFlags = {
196
- [BridgeFeatureFlagsKey.EXTENSION_CONFIG]: {
197
- refreshRate: number;
198
- maxRefreshCount: number;
199
- support: boolean;
200
- chains: Record<Hex, ChainConfiguration>;
201
- };
202
- [BridgeFeatureFlagsKey.MOBILE_CONFIG]: {
203
- refreshRate: number;
204
- maxRefreshCount: number;
205
- support: boolean;
206
- chains: Record<Hex, ChainConfiguration>;
207
- };
198
+ [BridgeFeatureFlagsKey.EXTENSION_CONFIG]: FeatureFlagsPlatformConfig;
199
+ [BridgeFeatureFlagsKey.MOBILE_CONFIG]: FeatureFlagsPlatformConfig;
208
200
  };
209
201
  export declare enum RequestStatus {
210
202
  LOADING = 0,
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.cts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.cts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.d.mts CHANGED
@@ -80,19 +80,15 @@ export declare enum BridgeFlag {
80
80
  }
81
81
  type DecimalChainId = string;
82
82
  export type GasMultiplierByChainId = Record<DecimalChainId, number>;
83
+ type FeatureFlagResponsePlatformConfig = {
84
+ refreshRate: number;
85
+ maxRefreshCount: number;
86
+ support: boolean;
87
+ chains: Record<string, ChainConfiguration>;
88
+ };
83
89
  export type FeatureFlagResponse = {
84
- [BridgeFlag.EXTENSION_CONFIG]: {
85
- refreshRate: number;
86
- maxRefreshCount: number;
87
- support: boolean;
88
- chains: Record<number, ChainConfiguration>;
89
- };
90
- [BridgeFlag.MOBILE_CONFIG]: {
91
- refreshRate: number;
92
- maxRefreshCount: number;
93
- support: boolean;
94
- chains: Record<number, ChainConfiguration>;
95
- };
90
+ [BridgeFlag.EXTENSION_CONFIG]: FeatureFlagResponsePlatformConfig;
91
+ [BridgeFlag.MOBILE_CONFIG]: FeatureFlagResponsePlatformConfig;
96
92
  };
97
93
  export type BridgeAsset = {
98
94
  chainId: ChainId;
@@ -192,19 +188,15 @@ export declare enum BridgeFeatureFlagsKey {
192
188
  EXTENSION_CONFIG = "extensionConfig",
193
189
  MOBILE_CONFIG = "mobileConfig"
194
190
  }
191
+ type FeatureFlagsPlatformConfig = {
192
+ refreshRate: number;
193
+ maxRefreshCount: number;
194
+ support: boolean;
195
+ chains: Record<Hex, ChainConfiguration>;
196
+ };
195
197
  export type BridgeFeatureFlags = {
196
- [BridgeFeatureFlagsKey.EXTENSION_CONFIG]: {
197
- refreshRate: number;
198
- maxRefreshCount: number;
199
- support: boolean;
200
- chains: Record<Hex, ChainConfiguration>;
201
- };
202
- [BridgeFeatureFlagsKey.MOBILE_CONFIG]: {
203
- refreshRate: number;
204
- maxRefreshCount: number;
205
- support: boolean;
206
- chains: Record<Hex, ChainConfiguration>;
207
- };
198
+ [BridgeFeatureFlagsKey.EXTENSION_CONFIG]: FeatureFlagsPlatformConfig;
199
+ [BridgeFeatureFlagsKey.MOBILE_CONFIG]: FeatureFlagsPlatformConfig;
208
200
  };
209
201
  export declare enum RequestStatus {
210
202
  LOADING = 0,
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.mts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.mts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.mjs","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAsBA;;;GAGG;AACH,MAAM,CAAN,IAAY,SAYX;AAZD,WAAY,SAAS;IACnB,4DAA4D;IAC5D,8BAAiB,CAAA;IACjB,qBAAqB;IACrB,4BAAe,CAAA;IACf,kCAAkC;IAClC,wBAAW,CAAA;IACX;;;OAGG;IACH,gCAAmB,CAAA;AACrB,CAAC,EAZW,SAAS,KAAT,SAAS,QAYpB;AAuBD,6BAA6B;AAE7B,MAAM,CAAN,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,wCAA2B,CAAA;IAC3B,wCAA2B,CAAA;AAC7B,CAAC,EAHW,SAAS,KAAT,SAAS,QAGpB;AAaD,mCAAmC;AAEnC,MAAM,CAAN,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,mDAAqC,CAAA;IACrC,6CAA+B,CAAA;AACjC,CAAC,EAHW,UAAU,KAAV,UAAU,QAGrB;AAqDD,MAAM,CAAN,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,gCAAiB,CAAA;IACjB,4BAAa,CAAA;IACb,gCAAiB,CAAA;AACnB,CAAC,EAJW,WAAW,KAAX,WAAW,QAItB;AAuCD,MAAM,CAAN,IAAY,OAUX;AAVD,WAAY,OAAO;IACjB,mCAAO,CAAA;IACP,8CAAa,CAAA;IACb,oCAAQ,CAAA;IACR,6CAAa,CAAA;IACb,2CAAY,CAAA;IACZ,wCAAW,CAAA;IACX,iDAAgB,CAAA;IAChB,mDAAiB,CAAA;IACjB,2CAAa,CAAA;AACf,CAAC,EAVW,OAAO,KAAP,OAAO,QAUlB;AAED,MAAM,CAAN,IAAY,OAGX;AAHD,WAAY,OAAO;IACjB,oCAAyB,CAAA;IACzB,4BAAiB,CAAA;AACnB,CAAC,EAHW,OAAO,KAAP,OAAO,QAGlB;AAaD,MAAM,CAAN,IAAY,qBAGX;AAHD,WAAY,qBAAqB;IAC/B,6DAAoC,CAAA;IACpC,uDAA8B,CAAA;AAChC,CAAC,EAHW,qBAAqB,KAArB,qBAAqB,QAGhC;AAgBD,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,uDAAO,CAAA;IACP,uDAAO,CAAA;IACP,mDAAK,CAAA;AACP,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB;AACD,MAAM,CAAN,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC1B,6DAAyC,CAAA;IACzC,0EAAsD,CAAA;AACxD,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,QAG3B;AACD,MAAM,CAAN,IAAY,sBAIX;AAJD,WAAY,sBAAsB;IAChC,qEAA2C,CAAA;IAC3C,oDAA0B,CAAA;IAC1B,gFAAsD,CAAA;AACxD,CAAC,EAJW,sBAAsB,KAAtB,sBAAsB,QAIjC","sourcesContent":["import type { AccountsControllerGetSelectedAccountAction } from '@metamask/accounts-controller';\nimport type {\n ControllerStateChangeEvent,\n RestrictedMessenger,\n} from '@metamask/base-controller';\nimport type {\n NetworkControllerFindNetworkClientIdByChainIdAction,\n NetworkControllerGetStateAction,\n NetworkControllerGetNetworkClientByIdAction,\n} from '@metamask/network-controller';\nimport type { Hex } from '@metamask/utils';\nimport type { BigNumber } from 'bignumber.js';\n\nimport type { BridgeController } from './bridge-controller';\nimport type { BRIDGE_CONTROLLER_NAME } from './constants/bridge';\n\nexport type FetchFunction = (\n input: RequestInfo | URL,\n init?: RequestInit,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n) => Promise<any>;\n\n/**\n * The types of assets that a user can send\n *\n */\nexport enum AssetType {\n /** The native asset for the current network, such as ETH */\n native = 'NATIVE',\n /** An ERC20 token */\n token = 'TOKEN',\n /** An ERC721 or ERC1155 token. */\n NFT = 'NFT',\n /**\n * A transaction interacting with a contract that isn't a token method\n * interaction will be marked as dealing with an unknown asset type.\n */\n unknown = 'UNKNOWN',\n}\n\nexport type ChainConfiguration = {\n isActiveSrc: boolean;\n isActiveDest: boolean;\n};\n\nexport type L1GasFees = {\n l1GasFeesInHexWei?: string; // l1 fees for approval and trade in hex wei, appended by controller\n};\n// Values derived from the quote response\n// valueInCurrency values are calculated based on the user's selected currency\n\nexport type QuoteMetadata = {\n gasFee: { amount: BigNumber; valueInCurrency: BigNumber | null };\n totalNetworkFee: { amount: BigNumber; valueInCurrency: BigNumber | null }; // estimatedGasFees + relayerFees\n totalMaxNetworkFee: { amount: BigNumber; valueInCurrency: BigNumber | null }; // maxGasFees + relayerFees\n toTokenAmount: { amount: BigNumber; valueInCurrency: BigNumber | null };\n adjustedReturn: { valueInCurrency: BigNumber | null }; // destTokenAmount - totalNetworkFee\n sentAmount: { amount: BigNumber; valueInCurrency: BigNumber | null }; // srcTokenAmount + metabridgeFee\n swapRate: BigNumber; // destTokenAmount / sentAmount\n cost: { valueInCurrency: BigNumber | null }; // sentAmount - adjustedReturn\n};\n// Sort order set by the user\n\nexport enum SortOrder {\n COST_ASC = 'cost_ascending',\n ETA_ASC = 'time_descending',\n}\n\nexport type BridgeToken = {\n type: AssetType.native | AssetType.token;\n address: string;\n symbol: string;\n image: string;\n decimals: number;\n chainId: Hex;\n balance: string; // raw balance\n string: string | undefined; // normalized balance as a stringified number\n tokenFiatAmount?: number | null;\n} | null;\n// Types copied from Metabridge API\n\nexport enum BridgeFlag {\n EXTENSION_CONFIG = 'extension-config',\n MOBILE_CONFIG = 'mobile-config',\n}\ntype DecimalChainId = string;\nexport type GasMultiplierByChainId = Record<DecimalChainId, number>;\n\nexport type FeatureFlagResponse = {\n [BridgeFlag.EXTENSION_CONFIG]: {\n refreshRate: number;\n maxRefreshCount: number;\n support: boolean;\n chains: Record<number, ChainConfiguration>;\n };\n [BridgeFlag.MOBILE_CONFIG]: {\n refreshRate: number;\n maxRefreshCount: number;\n support: boolean;\n chains: Record<number, ChainConfiguration>;\n };\n};\n\nexport type BridgeAsset = {\n chainId: ChainId;\n address: string;\n symbol: string;\n name: string;\n decimals: number;\n icon?: string;\n};\n\nexport type QuoteRequest = {\n walletAddress: string;\n destWalletAddress?: string;\n srcChainId: ChainId;\n destChainId: ChainId;\n srcTokenAddress: string;\n destTokenAddress: string;\n /**\n * This is the amount sent, in atomic amount\n */\n srcTokenAmount: string;\n slippage: number;\n aggIds?: string[];\n bridgeIds?: string[];\n insufficientBal?: boolean;\n resetApproval?: boolean;\n refuel?: boolean;\n};\n\nexport type Protocol = {\n name: string;\n displayName?: string;\n icon?: string;\n};\n\nexport enum ActionTypes {\n BRIDGE = 'bridge',\n SWAP = 'swap',\n REFUEL = 'refuel',\n}\n\nexport type Step = {\n action: ActionTypes;\n srcChainId: ChainId;\n destChainId?: ChainId;\n srcAsset: BridgeAsset;\n destAsset: BridgeAsset;\n srcAmount: string;\n destAmount: string;\n protocol: Protocol;\n};\n\nexport type RefuelData = Step;\n\nexport type Quote = {\n requestId: string;\n srcChainId: ChainId;\n srcAsset: BridgeAsset;\n // Some tokens have a fee of 0, so sometimes it's equal to amount sent\n srcTokenAmount: string; // Atomic amount, the amount sent - fees\n destChainId: ChainId;\n destAsset: BridgeAsset;\n destTokenAmount: string; // Atomic amount, the amount received\n feeData: Record<FeeType.METABRIDGE, FeeData> &\n Partial<Record<FeeType, FeeData>>;\n bridgeId: string;\n bridges: string[];\n steps: Step[];\n refuel?: RefuelData;\n};\n\nexport type QuoteResponse = {\n quote: Quote;\n approval: TxData | null;\n trade: TxData;\n estimatedProcessingTimeInSeconds: number;\n};\n\nexport enum ChainId {\n ETH = 1,\n OPTIMISM = 10,\n BSC = 56,\n POLYGON = 137,\n ZKSYNC = 324,\n BASE = 8453,\n ARBITRUM = 42161,\n AVALANCHE = 43114,\n LINEA = 59144,\n}\n\nexport enum FeeType {\n METABRIDGE = 'metabridge',\n REFUEL = 'refuel',\n}\nexport type FeeData = {\n amount: string;\n asset: BridgeAsset;\n};\nexport type TxData = {\n chainId: ChainId;\n to: string;\n from: string;\n value: string;\n data: string;\n gasLimit: number | null;\n};\nexport enum BridgeFeatureFlagsKey {\n EXTENSION_CONFIG = 'extensionConfig',\n MOBILE_CONFIG = 'mobileConfig',\n}\n\nexport type BridgeFeatureFlags = {\n [BridgeFeatureFlagsKey.EXTENSION_CONFIG]: {\n refreshRate: number;\n maxRefreshCount: number;\n support: boolean;\n chains: Record<Hex, ChainConfiguration>;\n };\n [BridgeFeatureFlagsKey.MOBILE_CONFIG]: {\n refreshRate: number;\n maxRefreshCount: number;\n support: boolean;\n chains: Record<Hex, ChainConfiguration>;\n };\n};\nexport enum RequestStatus {\n LOADING,\n FETCHED,\n ERROR,\n}\nexport enum BridgeUserAction {\n SELECT_DEST_NETWORK = 'selectDestNetwork',\n UPDATE_QUOTE_PARAMS = 'updateBridgeQuoteRequestParams',\n}\nexport enum BridgeBackgroundAction {\n SET_FEATURE_FLAGS = 'setBridgeFeatureFlags',\n RESET_STATE = 'resetState',\n GET_BRIDGE_ERC20_ALLOWANCE = 'getBridgeERC20Allowance',\n}\nexport type BridgeControllerState = {\n bridgeFeatureFlags: BridgeFeatureFlags;\n quoteRequest: Partial<QuoteRequest>;\n quotes: (QuoteResponse & L1GasFees)[];\n quotesInitialLoadTime: number | null;\n quotesLastFetched: number | null;\n quotesLoadingStatus: RequestStatus | null;\n quoteFetchError: string | null;\n quotesRefreshCount: number;\n};\n\nexport type BridgeControllerAction<\n FunctionName extends keyof BridgeController,\n> = {\n type: `${typeof BRIDGE_CONTROLLER_NAME}:${FunctionName}`;\n handler: BridgeController[FunctionName];\n};\n\n// Maps to BridgeController function names\nexport type BridgeControllerActions =\n | BridgeControllerAction<BridgeBackgroundAction.SET_FEATURE_FLAGS>\n | BridgeControllerAction<BridgeBackgroundAction.RESET_STATE>\n | BridgeControllerAction<BridgeBackgroundAction.GET_BRIDGE_ERC20_ALLOWANCE>\n | BridgeControllerAction<BridgeUserAction.UPDATE_QUOTE_PARAMS>;\n\nexport type BridgeControllerEvents = ControllerStateChangeEvent<\n typeof BRIDGE_CONTROLLER_NAME,\n BridgeControllerState\n>;\n\nexport type AllowedActions =\n | AccountsControllerGetSelectedAccountAction\n | NetworkControllerFindNetworkClientIdByChainIdAction\n | NetworkControllerGetStateAction\n | NetworkControllerGetNetworkClientByIdAction;\nexport type AllowedEvents = never;\n\n/**\n * The messenger for the BridgeController.\n */\nexport type BridgeControllerMessenger = RestrictedMessenger<\n typeof BRIDGE_CONTROLLER_NAME,\n BridgeControllerActions | AllowedActions,\n BridgeControllerEvents | AllowedEvents,\n AllowedActions['type'],\n AllowedEvents['type']\n>;\n"]}
1
+ {"version":3,"file":"types.mjs","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAsBA;;;GAGG;AACH,MAAM,CAAN,IAAY,SAYX;AAZD,WAAY,SAAS;IACnB,4DAA4D;IAC5D,8BAAiB,CAAA;IACjB,qBAAqB;IACrB,4BAAe,CAAA;IACf,kCAAkC;IAClC,wBAAW,CAAA;IACX;;;OAGG;IACH,gCAAmB,CAAA;AACrB,CAAC,EAZW,SAAS,KAAT,SAAS,QAYpB;AAuBD,6BAA6B;AAE7B,MAAM,CAAN,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,wCAA2B,CAAA;IAC3B,wCAA2B,CAAA;AAC7B,CAAC,EAHW,SAAS,KAAT,SAAS,QAGpB;AAaD,mCAAmC;AAEnC,MAAM,CAAN,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,mDAAqC,CAAA;IACrC,6CAA+B,CAAA;AACjC,CAAC,EAHW,UAAU,KAAV,UAAU,QAGrB;AAkDD,MAAM,CAAN,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,gCAAiB,CAAA;IACjB,4BAAa,CAAA;IACb,gCAAiB,CAAA;AACnB,CAAC,EAJW,WAAW,KAAX,WAAW,QAItB;AAuCD,MAAM,CAAN,IAAY,OAUX;AAVD,WAAY,OAAO;IACjB,mCAAO,CAAA;IACP,8CAAa,CAAA;IACb,oCAAQ,CAAA;IACR,6CAAa,CAAA;IACb,2CAAY,CAAA;IACZ,wCAAW,CAAA;IACX,iDAAgB,CAAA;IAChB,mDAAiB,CAAA;IACjB,2CAAa,CAAA;AACf,CAAC,EAVW,OAAO,KAAP,OAAO,QAUlB;AAED,MAAM,CAAN,IAAY,OAGX;AAHD,WAAY,OAAO;IACjB,oCAAyB,CAAA;IACzB,4BAAiB,CAAA;AACnB,CAAC,EAHW,OAAO,KAAP,OAAO,QAGlB;AAaD,MAAM,CAAN,IAAY,qBAGX;AAHD,WAAY,qBAAqB;IAC/B,6DAAoC,CAAA;IACpC,uDAA8B,CAAA;AAChC,CAAC,EAHW,qBAAqB,KAArB,qBAAqB,QAGhC;AAaD,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,uDAAO,CAAA;IACP,uDAAO,CAAA;IACP,mDAAK,CAAA;AACP,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB;AACD,MAAM,CAAN,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC1B,6DAAyC,CAAA;IACzC,0EAAsD,CAAA;AACxD,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,QAG3B;AACD,MAAM,CAAN,IAAY,sBAIX;AAJD,WAAY,sBAAsB;IAChC,qEAA2C,CAAA;IAC3C,oDAA0B,CAAA;IAC1B,gFAAsD,CAAA;AACxD,CAAC,EAJW,sBAAsB,KAAtB,sBAAsB,QAIjC","sourcesContent":["import type { AccountsControllerGetSelectedAccountAction } from '@metamask/accounts-controller';\nimport type {\n ControllerStateChangeEvent,\n RestrictedMessenger,\n} from '@metamask/base-controller';\nimport type {\n NetworkControllerFindNetworkClientIdByChainIdAction,\n NetworkControllerGetStateAction,\n NetworkControllerGetNetworkClientByIdAction,\n} from '@metamask/network-controller';\nimport type { Hex } from '@metamask/utils';\nimport type { BigNumber } from 'bignumber.js';\n\nimport type { BridgeController } from './bridge-controller';\nimport type { BRIDGE_CONTROLLER_NAME } from './constants/bridge';\n\nexport type FetchFunction = (\n input: RequestInfo | URL,\n init?: RequestInit,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n) => Promise<any>;\n\n/**\n * The types of assets that a user can send\n *\n */\nexport enum AssetType {\n /** The native asset for the current network, such as ETH */\n native = 'NATIVE',\n /** An ERC20 token */\n token = 'TOKEN',\n /** An ERC721 or ERC1155 token. */\n NFT = 'NFT',\n /**\n * A transaction interacting with a contract that isn't a token method\n * interaction will be marked as dealing with an unknown asset type.\n */\n unknown = 'UNKNOWN',\n}\n\nexport type ChainConfiguration = {\n isActiveSrc: boolean;\n isActiveDest: boolean;\n};\n\nexport type L1GasFees = {\n l1GasFeesInHexWei?: string; // l1 fees for approval and trade in hex wei, appended by controller\n};\n// Values derived from the quote response\n// valueInCurrency values are calculated based on the user's selected currency\n\nexport type QuoteMetadata = {\n gasFee: { amount: BigNumber; valueInCurrency: BigNumber | null };\n totalNetworkFee: { amount: BigNumber; valueInCurrency: BigNumber | null }; // estimatedGasFees + relayerFees\n totalMaxNetworkFee: { amount: BigNumber; valueInCurrency: BigNumber | null }; // maxGasFees + relayerFees\n toTokenAmount: { amount: BigNumber; valueInCurrency: BigNumber | null };\n adjustedReturn: { valueInCurrency: BigNumber | null }; // destTokenAmount - totalNetworkFee\n sentAmount: { amount: BigNumber; valueInCurrency: BigNumber | null }; // srcTokenAmount + metabridgeFee\n swapRate: BigNumber; // destTokenAmount / sentAmount\n cost: { valueInCurrency: BigNumber | null }; // sentAmount - adjustedReturn\n};\n// Sort order set by the user\n\nexport enum SortOrder {\n COST_ASC = 'cost_ascending',\n ETA_ASC = 'time_descending',\n}\n\nexport type BridgeToken = {\n type: AssetType.native | AssetType.token;\n address: string;\n symbol: string;\n image: string;\n decimals: number;\n chainId: Hex;\n balance: string; // raw balance\n string: string | undefined; // normalized balance as a stringified number\n tokenFiatAmount?: number | null;\n} | null;\n// Types copied from Metabridge API\n\nexport enum BridgeFlag {\n EXTENSION_CONFIG = 'extension-config',\n MOBILE_CONFIG = 'mobile-config',\n}\ntype DecimalChainId = string;\nexport type GasMultiplierByChainId = Record<DecimalChainId, number>;\n\ntype FeatureFlagResponsePlatformConfig = {\n refreshRate: number;\n maxRefreshCount: number;\n support: boolean;\n chains: Record<string, ChainConfiguration>;\n};\n\nexport type FeatureFlagResponse = {\n [BridgeFlag.EXTENSION_CONFIG]: FeatureFlagResponsePlatformConfig;\n [BridgeFlag.MOBILE_CONFIG]: FeatureFlagResponsePlatformConfig;\n};\n\nexport type BridgeAsset = {\n chainId: ChainId;\n address: string;\n symbol: string;\n name: string;\n decimals: number;\n icon?: string;\n};\n\nexport type QuoteRequest = {\n walletAddress: string;\n destWalletAddress?: string;\n srcChainId: ChainId;\n destChainId: ChainId;\n srcTokenAddress: string;\n destTokenAddress: string;\n /**\n * This is the amount sent, in atomic amount\n */\n srcTokenAmount: string;\n slippage: number;\n aggIds?: string[];\n bridgeIds?: string[];\n insufficientBal?: boolean;\n resetApproval?: boolean;\n refuel?: boolean;\n};\n\nexport type Protocol = {\n name: string;\n displayName?: string;\n icon?: string;\n};\n\nexport enum ActionTypes {\n BRIDGE = 'bridge',\n SWAP = 'swap',\n REFUEL = 'refuel',\n}\n\nexport type Step = {\n action: ActionTypes;\n srcChainId: ChainId;\n destChainId?: ChainId;\n srcAsset: BridgeAsset;\n destAsset: BridgeAsset;\n srcAmount: string;\n destAmount: string;\n protocol: Protocol;\n};\n\nexport type RefuelData = Step;\n\nexport type Quote = {\n requestId: string;\n srcChainId: ChainId;\n srcAsset: BridgeAsset;\n // Some tokens have a fee of 0, so sometimes it's equal to amount sent\n srcTokenAmount: string; // Atomic amount, the amount sent - fees\n destChainId: ChainId;\n destAsset: BridgeAsset;\n destTokenAmount: string; // Atomic amount, the amount received\n feeData: Record<FeeType.METABRIDGE, FeeData> &\n Partial<Record<FeeType, FeeData>>;\n bridgeId: string;\n bridges: string[];\n steps: Step[];\n refuel?: RefuelData;\n};\n\nexport type QuoteResponse = {\n quote: Quote;\n approval: TxData | null;\n trade: TxData;\n estimatedProcessingTimeInSeconds: number;\n};\n\nexport enum ChainId {\n ETH = 1,\n OPTIMISM = 10,\n BSC = 56,\n POLYGON = 137,\n ZKSYNC = 324,\n BASE = 8453,\n ARBITRUM = 42161,\n AVALANCHE = 43114,\n LINEA = 59144,\n}\n\nexport enum FeeType {\n METABRIDGE = 'metabridge',\n REFUEL = 'refuel',\n}\nexport type FeeData = {\n amount: string;\n asset: BridgeAsset;\n};\nexport type TxData = {\n chainId: ChainId;\n to: string;\n from: string;\n value: string;\n data: string;\n gasLimit: number | null;\n};\nexport enum BridgeFeatureFlagsKey {\n EXTENSION_CONFIG = 'extensionConfig',\n MOBILE_CONFIG = 'mobileConfig',\n}\n\ntype FeatureFlagsPlatformConfig = {\n refreshRate: number;\n maxRefreshCount: number;\n support: boolean;\n chains: Record<Hex, ChainConfiguration>;\n};\n\nexport type BridgeFeatureFlags = {\n [BridgeFeatureFlagsKey.EXTENSION_CONFIG]: FeatureFlagsPlatformConfig;\n [BridgeFeatureFlagsKey.MOBILE_CONFIG]: FeatureFlagsPlatformConfig;\n};\nexport enum RequestStatus {\n LOADING,\n FETCHED,\n ERROR,\n}\nexport enum BridgeUserAction {\n SELECT_DEST_NETWORK = 'selectDestNetwork',\n UPDATE_QUOTE_PARAMS = 'updateBridgeQuoteRequestParams',\n}\nexport enum BridgeBackgroundAction {\n SET_FEATURE_FLAGS = 'setBridgeFeatureFlags',\n RESET_STATE = 'resetState',\n GET_BRIDGE_ERC20_ALLOWANCE = 'getBridgeERC20Allowance',\n}\nexport type BridgeControllerState = {\n bridgeFeatureFlags: BridgeFeatureFlags;\n quoteRequest: Partial<QuoteRequest>;\n quotes: (QuoteResponse & L1GasFees)[];\n quotesInitialLoadTime: number | null;\n quotesLastFetched: number | null;\n quotesLoadingStatus: RequestStatus | null;\n quoteFetchError: string | null;\n quotesRefreshCount: number;\n};\n\nexport type BridgeControllerAction<\n FunctionName extends keyof BridgeController,\n> = {\n type: `${typeof BRIDGE_CONTROLLER_NAME}:${FunctionName}`;\n handler: BridgeController[FunctionName];\n};\n\n// Maps to BridgeController function names\nexport type BridgeControllerActions =\n | BridgeControllerAction<BridgeBackgroundAction.SET_FEATURE_FLAGS>\n | BridgeControllerAction<BridgeBackgroundAction.RESET_STATE>\n | BridgeControllerAction<BridgeBackgroundAction.GET_BRIDGE_ERC20_ALLOWANCE>\n | BridgeControllerAction<BridgeUserAction.UPDATE_QUOTE_PARAMS>;\n\nexport type BridgeControllerEvents = ControllerStateChangeEvent<\n typeof BRIDGE_CONTROLLER_NAME,\n BridgeControllerState\n>;\n\nexport type AllowedActions =\n | AccountsControllerGetSelectedAccountAction\n | NetworkControllerFindNetworkClientIdByChainIdAction\n | NetworkControllerGetStateAction\n | NetworkControllerGetNetworkClientByIdAction;\nexport type AllowedEvents = never;\n\n/**\n * The messenger for the BridgeController.\n */\nexport type BridgeControllerMessenger = RestrictedMessenger<\n typeof BRIDGE_CONTROLLER_NAME,\n BridgeControllerActions | AllowedActions,\n BridgeControllerEvents | AllowedEvents,\n AllowedActions['type'],\n AllowedEvents['type']\n>;\n"]}
@@ -25,7 +25,7 @@ async function fetchBridgeFeatureFlags(clientId, fetchFn) {
25
25
  const rawFeatureFlags = await fetchFn(url, {
26
26
  headers: (0, exports.getClientIdHeader)(clientId),
27
27
  });
28
- if ((0, validators_1.validateResponse)(validators_1.FEATURE_FLAG_VALIDATORS, rawFeatureFlags, url)) {
28
+ if ((0, validators_1.validateFeatureFlagsResponse)(rawFeatureFlags)) {
29
29
  const getChainsObj = (chains) => Object.entries(chains).reduce((acc, [chainId, value]) => ({
30
30
  ...acc,
31
31
  [(0, utils_1.numberToHex)(Number(chainId))]: value,
@@ -70,7 +70,7 @@ async function fetchBridgeTokens(chainId, clientId, fetchFn) {
70
70
  transformedTokens[nativeToken.address] = nativeToken;
71
71
  }
72
72
  tokens.forEach((token) => {
73
- if ((0, validators_1.validateResponse)(validators_1.TOKEN_VALIDATORS, token, url, false) &&
73
+ if ((0, validators_1.validateSwapsTokenObject)(token) &&
74
74
  !((0, bridge_1.isSwapsDefaultTokenSymbol)(token.symbol, chainId) ||
75
75
  (0, bridge_1.isSwapsDefaultTokenAddress)(token.address, chainId))) {
76
76
  transformedTokens[token.address] = token;
@@ -106,16 +106,7 @@ async function fetchBridgeQuotes(request, signal, clientId, fetchFn) {
106
106
  signal,
107
107
  });
108
108
  const filteredQuotes = quotes.filter((quoteResponse) => {
109
- const { quote, approval, trade } = quoteResponse;
110
- return ((0, validators_1.validateResponse)(validators_1.QUOTE_RESPONSE_VALIDATORS, quoteResponse, url) &&
111
- (0, validators_1.validateResponse)(validators_1.QUOTE_VALIDATORS, quote, url) &&
112
- (0, validators_1.validateResponse)(validators_1.TOKEN_VALIDATORS, quote.srcAsset, url) &&
113
- (0, validators_1.validateResponse)(validators_1.TOKEN_VALIDATORS, quote.destAsset, url) &&
114
- (0, validators_1.validateResponse)(validators_1.TX_DATA_VALIDATORS, trade, url) &&
115
- (0, validators_1.validateResponse)(validators_1.FEE_DATA_VALIDATORS, quote.feeData[types_1.FeeType.METABRIDGE], url) &&
116
- (approval
117
- ? (0, validators_1.validateResponse)(validators_1.TX_DATA_VALIDATORS, approval, url)
118
- : true));
109
+ return (0, validators_1.validateQuoteResponse)(quoteResponse);
119
110
  });
120
111
  return filteredQuotes;
121
112
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.cjs","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Hex } from '@metamask/utils';\nimport { hexToNumber, numberToHex } from '@metamask/utils';\n\nimport {\n isSwapsDefaultTokenAddress,\n isSwapsDefaultTokenSymbol,\n getBridgeApiBaseUrl,\n} from './bridge';\nimport {\n FEATURE_FLAG_VALIDATORS,\n QUOTE_VALIDATORS,\n TX_DATA_VALIDATORS,\n TOKEN_VALIDATORS,\n validateResponse,\n QUOTE_RESPONSE_VALIDATORS,\n FEE_DATA_VALIDATORS,\n} from './validators';\nimport { DEFAULT_FEATURE_FLAG_CONFIG } from '../constants/bridge';\nimport type { SwapsTokenObject } from '../constants/tokens';\nimport { SWAPS_CHAINID_DEFAULT_TOKEN_MAP } from '../constants/tokens';\nimport type {\n FeatureFlagResponse,\n FeeData,\n Quote,\n QuoteRequest,\n QuoteResponse,\n TxData,\n BridgeFeatureFlags,\n FetchFunction,\n ChainConfiguration,\n} from '../types';\nimport { BridgeFlag, FeeType, BridgeFeatureFlagsKey } from '../types';\n\n// TODO put this back in once we have a fetchWithCache equivalent\n// const 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 * @returns The bridge feature flags\n */\nexport async function fetchBridgeFeatureFlags(\n clientId: string,\n fetchFn: FetchFunction,\n): Promise<BridgeFeatureFlags> {\n const url = `${getBridgeApiBaseUrl()}/getAllFeatureFlags`;\n const rawFeatureFlags = await fetchFn(url, {\n headers: getClientIdHeader(clientId),\n });\n\n if (\n validateResponse<FeatureFlagResponse>(\n FEATURE_FLAG_VALIDATORS,\n rawFeatureFlags,\n url,\n )\n ) {\n const getChainsObj = (chains: Record<number, ChainConfiguration>) =>\n Object.entries(chains).reduce(\n (acc, [chainId, value]) => ({\n ...acc,\n [numberToHex(Number(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 * @returns A list of enabled (unblocked) tokens\n */\nexport async function fetchBridgeTokens(\n chainId: Hex,\n clientId: string,\n fetchFn: FetchFunction,\n): Promise<Record<string, SwapsTokenObject>> {\n // TODO make token api v2 call\n const url = `${getBridgeApiBaseUrl()}/getTokens?chainId=${hexToNumber(\n chainId,\n )}`;\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 });\n\n const nativeToken =\n SWAPS_CHAINID_DEFAULT_TOKEN_MAP[\n chainId as keyof typeof SWAPS_CHAINID_DEFAULT_TOKEN_MAP\n ];\n\n const transformedTokens: Record<string, SwapsTokenObject> = {};\n if (nativeToken) {\n transformedTokens[nativeToken.address] = nativeToken;\n }\n\n tokens.forEach((token: unknown) => {\n if (\n validateResponse<SwapsTokenObject>(TOKEN_VALIDATORS, token, url, false) &&\n !(\n isSwapsDefaultTokenSymbol(token.symbol, chainId) ||\n isSwapsDefaultTokenAddress(token.address, chainId)\n )\n ) {\n transformedTokens[token.address] = token;\n }\n });\n return transformedTokens;\n}\n\n// Returns a list of bridge tx quotes\n/**\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 * @returns A list of bridge tx quotes\n */\nexport async function fetchBridgeQuotes(\n request: QuoteRequest,\n signal: AbortSignal,\n clientId: string,\n fetchFn: FetchFunction,\n): Promise<QuoteResponse[]> {\n const queryParams = new URLSearchParams({\n walletAddress: request.walletAddress,\n srcChainId: request.srcChainId.toString(),\n destChainId: request.destChainId.toString(),\n srcTokenAddress: request.srcTokenAddress,\n destTokenAddress: request.destTokenAddress,\n srcTokenAmount: request.srcTokenAmount,\n slippage: request.slippage.toString(),\n insufficientBal: request.insufficientBal ? 'true' : 'false',\n resetApproval: request.resetApproval ? 'true' : 'false',\n });\n const url = `${getBridgeApiBaseUrl()}/getQuote?${queryParams}`;\n const quotes = await fetchFn(url, {\n headers: getClientIdHeader(clientId),\n signal,\n });\n\n const filteredQuotes = quotes.filter((quoteResponse: QuoteResponse) => {\n const { quote, approval, trade } = quoteResponse;\n return (\n validateResponse<QuoteResponse>(\n QUOTE_RESPONSE_VALIDATORS,\n quoteResponse,\n url,\n ) &&\n validateResponse<Quote>(QUOTE_VALIDATORS, quote, url) &&\n validateResponse<SwapsTokenObject>(\n TOKEN_VALIDATORS,\n quote.srcAsset,\n url,\n ) &&\n validateResponse<SwapsTokenObject>(\n TOKEN_VALIDATORS,\n quote.destAsset,\n url,\n ) &&\n validateResponse<TxData>(TX_DATA_VALIDATORS, trade, url) &&\n validateResponse<FeeData>(\n FEE_DATA_VALIDATORS,\n quote.feeData[FeeType.METABRIDGE],\n url,\n ) &&\n (approval\n ? validateResponse<TxData>(TX_DATA_VALIDATORS, approval, url)\n : true)\n );\n });\n return filteredQuotes;\n}\n"]}
1
+ {"version":3,"file":"fetch.cjs","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Hex } from '@metamask/utils';\nimport { hexToNumber, numberToHex } from '@metamask/utils';\n\nimport {\n isSwapsDefaultTokenAddress,\n isSwapsDefaultTokenSymbol,\n getBridgeApiBaseUrl,\n} from './bridge';\nimport {\n validateFeatureFlagsResponse,\n validateQuoteResponse,\n validateSwapsTokenObject,\n} from './validators';\nimport { DEFAULT_FEATURE_FLAG_CONFIG } from '../constants/bridge';\nimport type { SwapsTokenObject } from '../constants/tokens';\nimport { SWAPS_CHAINID_DEFAULT_TOKEN_MAP } from '../constants/tokens';\nimport type {\n QuoteRequest,\n QuoteResponse,\n BridgeFeatureFlags,\n FetchFunction,\n ChainConfiguration,\n} from '../types';\nimport { BridgeFlag, BridgeFeatureFlagsKey } from '../types';\n\n// TODO put this back in once we have a fetchWithCache equivalent\n// const 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 * @returns The bridge feature flags\n */\nexport async function fetchBridgeFeatureFlags(\n clientId: string,\n fetchFn: FetchFunction,\n): Promise<BridgeFeatureFlags> {\n const url = `${getBridgeApiBaseUrl()}/getAllFeatureFlags`;\n const rawFeatureFlags: unknown = await fetchFn(url, {\n headers: getClientIdHeader(clientId),\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 [numberToHex(Number(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 * @returns A list of enabled (unblocked) tokens\n */\nexport async function fetchBridgeTokens(\n chainId: Hex,\n clientId: string,\n fetchFn: FetchFunction,\n): Promise<Record<string, SwapsTokenObject>> {\n // TODO make token api v2 call\n const url = `${getBridgeApiBaseUrl()}/getTokens?chainId=${hexToNumber(\n chainId,\n )}`;\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 });\n\n const nativeToken =\n SWAPS_CHAINID_DEFAULT_TOKEN_MAP[\n chainId as keyof typeof SWAPS_CHAINID_DEFAULT_TOKEN_MAP\n ];\n\n const transformedTokens: Record<string, SwapsTokenObject> = {};\n if (nativeToken) {\n transformedTokens[nativeToken.address] = nativeToken;\n }\n\n tokens.forEach((token: unknown) => {\n if (\n validateSwapsTokenObject(token) &&\n !(\n isSwapsDefaultTokenSymbol(token.symbol, chainId) ||\n isSwapsDefaultTokenAddress(token.address, chainId)\n )\n ) {\n transformedTokens[token.address] = token;\n }\n });\n return transformedTokens;\n}\n\n// Returns a list of bridge tx quotes\n/**\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 * @returns A list of bridge tx quotes\n */\nexport async function fetchBridgeQuotes(\n request: QuoteRequest,\n signal: AbortSignal,\n clientId: string,\n fetchFn: FetchFunction,\n): Promise<QuoteResponse[]> {\n const queryParams = new URLSearchParams({\n walletAddress: request.walletAddress,\n srcChainId: request.srcChainId.toString(),\n destChainId: request.destChainId.toString(),\n srcTokenAddress: request.srcTokenAddress,\n destTokenAddress: request.destTokenAddress,\n srcTokenAmount: request.srcTokenAmount,\n slippage: request.slippage.toString(),\n insufficientBal: request.insufficientBal ? 'true' : 'false',\n resetApproval: request.resetApproval ? 'true' : 'false',\n });\n const url = `${getBridgeApiBaseUrl()}/getQuote?${queryParams}`;\n const quotes: unknown[] = await fetchFn(url, {\n headers: getClientIdHeader(clientId),\n signal,\n });\n\n const filteredQuotes = quotes.filter((quoteResponse: unknown) => {\n return validateQuoteResponse(quoteResponse);\n });\n return filteredQuotes as QuoteResponse[];\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.d.cts","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAkB3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,gCAA4B;AAE5D,OAAO,KAAK,EAIV,YAAY,EACZ,aAAa,EAEb,kBAAkB,EAClB,aAAa,EAEd,qBAAiB;AAMlB,eAAO,MAAM,iBAAiB,aAAc,MAAM;;CAEhD,CAAC;AAEH;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,kBAAkB,CAAC,CAwC7B;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,GAAG,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAmC3C;AAGD;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,aAAa,EAAE,CAAC,CAiD1B"}
1
+ {"version":3,"file":"fetch.d.cts","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAc3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,gCAA4B;AAE5D,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,aAAa,EAEd,qBAAiB;AAMlB,eAAO,MAAM,iBAAiB,aAAc,MAAM;;CAEhD,CAAC;AAEH;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,kBAAkB,CAAC,CAkC7B;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,GAAG,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAmC3C;AAGD;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,aAAa,EAAE,CAAC,CAsB1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.d.mts","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAkB3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,gCAA4B;AAE5D,OAAO,KAAK,EAIV,YAAY,EACZ,aAAa,EAEb,kBAAkB,EAClB,aAAa,EAEd,qBAAiB;AAMlB,eAAO,MAAM,iBAAiB,aAAc,MAAM;;CAEhD,CAAC;AAEH;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,kBAAkB,CAAC,CAwC7B;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,GAAG,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAmC3C;AAGD;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,aAAa,EAAE,CAAC,CAiD1B"}
1
+ {"version":3,"file":"fetch.d.mts","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAc3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,gCAA4B;AAE5D,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,aAAa,EAEd,qBAAiB;AAMlB,eAAO,MAAM,iBAAiB,aAAc,MAAM;;CAEhD,CAAC;AAEH;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,kBAAkB,CAAC,CAkC7B;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,GAAG,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAmC3C;AAGD;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,aAAa,EAAE,CAAC,CAsB1B"}
@@ -1,9 +1,9 @@
1
1
  import { hexToNumber, numberToHex } from "@metamask/utils";
2
2
  import { isSwapsDefaultTokenAddress, isSwapsDefaultTokenSymbol, getBridgeApiBaseUrl } from "./bridge.mjs";
3
- import { FEATURE_FLAG_VALIDATORS, QUOTE_VALIDATORS, TX_DATA_VALIDATORS, TOKEN_VALIDATORS, validateResponse, QUOTE_RESPONSE_VALIDATORS, FEE_DATA_VALIDATORS } from "./validators.mjs";
3
+ import { validateFeatureFlagsResponse, validateQuoteResponse, validateSwapsTokenObject } from "./validators.mjs";
4
4
  import { DEFAULT_FEATURE_FLAG_CONFIG } from "../constants/bridge.mjs";
5
5
  import { SWAPS_CHAINID_DEFAULT_TOKEN_MAP } from "../constants/tokens.mjs";
6
- import { BridgeFlag, FeeType, BridgeFeatureFlagsKey } from "../types.mjs";
6
+ import { BridgeFlag, BridgeFeatureFlagsKey } from "../types.mjs";
7
7
  // TODO put this back in once we have a fetchWithCache equivalent
8
8
  // const CACHE_REFRESH_TEN_MINUTES = 10 * Duration.Minute;
9
9
  export const getClientIdHeader = (clientId) => ({
@@ -21,7 +21,7 @@ export async function fetchBridgeFeatureFlags(clientId, fetchFn) {
21
21
  const rawFeatureFlags = await fetchFn(url, {
22
22
  headers: getClientIdHeader(clientId),
23
23
  });
24
- if (validateResponse(FEATURE_FLAG_VALIDATORS, rawFeatureFlags, url)) {
24
+ if (validateFeatureFlagsResponse(rawFeatureFlags)) {
25
25
  const getChainsObj = (chains) => Object.entries(chains).reduce((acc, [chainId, value]) => ({
26
26
  ...acc,
27
27
  [numberToHex(Number(chainId))]: value,
@@ -65,7 +65,7 @@ export async function fetchBridgeTokens(chainId, clientId, fetchFn) {
65
65
  transformedTokens[nativeToken.address] = nativeToken;
66
66
  }
67
67
  tokens.forEach((token) => {
68
- if (validateResponse(TOKEN_VALIDATORS, token, url, false) &&
68
+ if (validateSwapsTokenObject(token) &&
69
69
  !(isSwapsDefaultTokenSymbol(token.symbol, chainId) ||
70
70
  isSwapsDefaultTokenAddress(token.address, chainId))) {
71
71
  transformedTokens[token.address] = token;
@@ -100,16 +100,7 @@ export async function fetchBridgeQuotes(request, signal, clientId, fetchFn) {
100
100
  signal,
101
101
  });
102
102
  const filteredQuotes = quotes.filter((quoteResponse) => {
103
- const { quote, approval, trade } = quoteResponse;
104
- return (validateResponse(QUOTE_RESPONSE_VALIDATORS, quoteResponse, url) &&
105
- validateResponse(QUOTE_VALIDATORS, quote, url) &&
106
- validateResponse(TOKEN_VALIDATORS, quote.srcAsset, url) &&
107
- validateResponse(TOKEN_VALIDATORS, quote.destAsset, url) &&
108
- validateResponse(TX_DATA_VALIDATORS, trade, url) &&
109
- validateResponse(FEE_DATA_VALIDATORS, quote.feeData[FeeType.METABRIDGE], url) &&
110
- (approval
111
- ? validateResponse(TX_DATA_VALIDATORS, approval, url)
112
- : true));
103
+ return validateQuoteResponse(quoteResponse);
113
104
  });
114
105
  return filteredQuotes;
115
106
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.mjs","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Hex } from '@metamask/utils';\nimport { hexToNumber, numberToHex } from '@metamask/utils';\n\nimport {\n isSwapsDefaultTokenAddress,\n isSwapsDefaultTokenSymbol,\n getBridgeApiBaseUrl,\n} from './bridge';\nimport {\n FEATURE_FLAG_VALIDATORS,\n QUOTE_VALIDATORS,\n TX_DATA_VALIDATORS,\n TOKEN_VALIDATORS,\n validateResponse,\n QUOTE_RESPONSE_VALIDATORS,\n FEE_DATA_VALIDATORS,\n} from './validators';\nimport { DEFAULT_FEATURE_FLAG_CONFIG } from '../constants/bridge';\nimport type { SwapsTokenObject } from '../constants/tokens';\nimport { SWAPS_CHAINID_DEFAULT_TOKEN_MAP } from '../constants/tokens';\nimport type {\n FeatureFlagResponse,\n FeeData,\n Quote,\n QuoteRequest,\n QuoteResponse,\n TxData,\n BridgeFeatureFlags,\n FetchFunction,\n ChainConfiguration,\n} from '../types';\nimport { BridgeFlag, FeeType, BridgeFeatureFlagsKey } from '../types';\n\n// TODO put this back in once we have a fetchWithCache equivalent\n// const 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 * @returns The bridge feature flags\n */\nexport async function fetchBridgeFeatureFlags(\n clientId: string,\n fetchFn: FetchFunction,\n): Promise<BridgeFeatureFlags> {\n const url = `${getBridgeApiBaseUrl()}/getAllFeatureFlags`;\n const rawFeatureFlags = await fetchFn(url, {\n headers: getClientIdHeader(clientId),\n });\n\n if (\n validateResponse<FeatureFlagResponse>(\n FEATURE_FLAG_VALIDATORS,\n rawFeatureFlags,\n url,\n )\n ) {\n const getChainsObj = (chains: Record<number, ChainConfiguration>) =>\n Object.entries(chains).reduce(\n (acc, [chainId, value]) => ({\n ...acc,\n [numberToHex(Number(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 * @returns A list of enabled (unblocked) tokens\n */\nexport async function fetchBridgeTokens(\n chainId: Hex,\n clientId: string,\n fetchFn: FetchFunction,\n): Promise<Record<string, SwapsTokenObject>> {\n // TODO make token api v2 call\n const url = `${getBridgeApiBaseUrl()}/getTokens?chainId=${hexToNumber(\n chainId,\n )}`;\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 });\n\n const nativeToken =\n SWAPS_CHAINID_DEFAULT_TOKEN_MAP[\n chainId as keyof typeof SWAPS_CHAINID_DEFAULT_TOKEN_MAP\n ];\n\n const transformedTokens: Record<string, SwapsTokenObject> = {};\n if (nativeToken) {\n transformedTokens[nativeToken.address] = nativeToken;\n }\n\n tokens.forEach((token: unknown) => {\n if (\n validateResponse<SwapsTokenObject>(TOKEN_VALIDATORS, token, url, false) &&\n !(\n isSwapsDefaultTokenSymbol(token.symbol, chainId) ||\n isSwapsDefaultTokenAddress(token.address, chainId)\n )\n ) {\n transformedTokens[token.address] = token;\n }\n });\n return transformedTokens;\n}\n\n// Returns a list of bridge tx quotes\n/**\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 * @returns A list of bridge tx quotes\n */\nexport async function fetchBridgeQuotes(\n request: QuoteRequest,\n signal: AbortSignal,\n clientId: string,\n fetchFn: FetchFunction,\n): Promise<QuoteResponse[]> {\n const queryParams = new URLSearchParams({\n walletAddress: request.walletAddress,\n srcChainId: request.srcChainId.toString(),\n destChainId: request.destChainId.toString(),\n srcTokenAddress: request.srcTokenAddress,\n destTokenAddress: request.destTokenAddress,\n srcTokenAmount: request.srcTokenAmount,\n slippage: request.slippage.toString(),\n insufficientBal: request.insufficientBal ? 'true' : 'false',\n resetApproval: request.resetApproval ? 'true' : 'false',\n });\n const url = `${getBridgeApiBaseUrl()}/getQuote?${queryParams}`;\n const quotes = await fetchFn(url, {\n headers: getClientIdHeader(clientId),\n signal,\n });\n\n const filteredQuotes = quotes.filter((quoteResponse: QuoteResponse) => {\n const { quote, approval, trade } = quoteResponse;\n return (\n validateResponse<QuoteResponse>(\n QUOTE_RESPONSE_VALIDATORS,\n quoteResponse,\n url,\n ) &&\n validateResponse<Quote>(QUOTE_VALIDATORS, quote, url) &&\n validateResponse<SwapsTokenObject>(\n TOKEN_VALIDATORS,\n quote.srcAsset,\n url,\n ) &&\n validateResponse<SwapsTokenObject>(\n TOKEN_VALIDATORS,\n quote.destAsset,\n url,\n ) &&\n validateResponse<TxData>(TX_DATA_VALIDATORS, trade, url) &&\n validateResponse<FeeData>(\n FEE_DATA_VALIDATORS,\n quote.feeData[FeeType.METABRIDGE],\n url,\n ) &&\n (approval\n ? validateResponse<TxData>(TX_DATA_VALIDATORS, approval, url)\n : true)\n );\n });\n return filteredQuotes;\n}\n"]}
1
+ {"version":3,"file":"fetch.mjs","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Hex } from '@metamask/utils';\nimport { hexToNumber, numberToHex } from '@metamask/utils';\n\nimport {\n isSwapsDefaultTokenAddress,\n isSwapsDefaultTokenSymbol,\n getBridgeApiBaseUrl,\n} from './bridge';\nimport {\n validateFeatureFlagsResponse,\n validateQuoteResponse,\n validateSwapsTokenObject,\n} from './validators';\nimport { DEFAULT_FEATURE_FLAG_CONFIG } from '../constants/bridge';\nimport type { SwapsTokenObject } from '../constants/tokens';\nimport { SWAPS_CHAINID_DEFAULT_TOKEN_MAP } from '../constants/tokens';\nimport type {\n QuoteRequest,\n QuoteResponse,\n BridgeFeatureFlags,\n FetchFunction,\n ChainConfiguration,\n} from '../types';\nimport { BridgeFlag, BridgeFeatureFlagsKey } from '../types';\n\n// TODO put this back in once we have a fetchWithCache equivalent\n// const 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 * @returns The bridge feature flags\n */\nexport async function fetchBridgeFeatureFlags(\n clientId: string,\n fetchFn: FetchFunction,\n): Promise<BridgeFeatureFlags> {\n const url = `${getBridgeApiBaseUrl()}/getAllFeatureFlags`;\n const rawFeatureFlags: unknown = await fetchFn(url, {\n headers: getClientIdHeader(clientId),\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 [numberToHex(Number(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 * @returns A list of enabled (unblocked) tokens\n */\nexport async function fetchBridgeTokens(\n chainId: Hex,\n clientId: string,\n fetchFn: FetchFunction,\n): Promise<Record<string, SwapsTokenObject>> {\n // TODO make token api v2 call\n const url = `${getBridgeApiBaseUrl()}/getTokens?chainId=${hexToNumber(\n chainId,\n )}`;\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 });\n\n const nativeToken =\n SWAPS_CHAINID_DEFAULT_TOKEN_MAP[\n chainId as keyof typeof SWAPS_CHAINID_DEFAULT_TOKEN_MAP\n ];\n\n const transformedTokens: Record<string, SwapsTokenObject> = {};\n if (nativeToken) {\n transformedTokens[nativeToken.address] = nativeToken;\n }\n\n tokens.forEach((token: unknown) => {\n if (\n validateSwapsTokenObject(token) &&\n !(\n isSwapsDefaultTokenSymbol(token.symbol, chainId) ||\n isSwapsDefaultTokenAddress(token.address, chainId)\n )\n ) {\n transformedTokens[token.address] = token;\n }\n });\n return transformedTokens;\n}\n\n// Returns a list of bridge tx quotes\n/**\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 * @returns A list of bridge tx quotes\n */\nexport async function fetchBridgeQuotes(\n request: QuoteRequest,\n signal: AbortSignal,\n clientId: string,\n fetchFn: FetchFunction,\n): Promise<QuoteResponse[]> {\n const queryParams = new URLSearchParams({\n walletAddress: request.walletAddress,\n srcChainId: request.srcChainId.toString(),\n destChainId: request.destChainId.toString(),\n srcTokenAddress: request.srcTokenAddress,\n destTokenAddress: request.destTokenAddress,\n srcTokenAmount: request.srcTokenAmount,\n slippage: request.slippage.toString(),\n insufficientBal: request.insufficientBal ? 'true' : 'false',\n resetApproval: request.resetApproval ? 'true' : 'false',\n });\n const url = `${getBridgeApiBaseUrl()}/getQuote?${queryParams}`;\n const quotes: unknown[] = await fetchFn(url, {\n headers: getClientIdHeader(clientId),\n signal,\n });\n\n const filteredQuotes = quotes.filter((quoteResponse: unknown) => {\n return validateQuoteResponse(quoteResponse);\n });\n return filteredQuotes as QuoteResponse[];\n}\n"]}
@@ -1,112 +1,102 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TX_DATA_VALIDATORS = exports.FEE_DATA_VALIDATORS = exports.QUOTE_VALIDATORS = exports.QUOTE_RESPONSE_VALIDATORS = exports.TOKEN_VALIDATORS = exports.TOKEN_AGGREGATOR_VALIDATORS = exports.FEATURE_FLAG_VALIDATORS = exports.validateResponse = exports.validateData = exports.isValidNumber = exports.truthyDigitString = exports.truthyString = void 0;
3
+ exports.validateQuoteResponse = exports.validateSwapsTokenObject = exports.validateFeatureFlagsResponse = exports.truthyString = void 0;
4
4
  const controller_utils_1 = require("@metamask/controller-utils");
5
+ const superstruct_1 = require("@metamask/superstruct");
5
6
  const utils_1 = require("@metamask/utils");
6
7
  const types_1 = require("../types.cjs");
7
- const truthyString = (string) => Boolean(string?.length);
8
+ const HexAddressSchema = (0, superstruct_1.define)('HexAddress', (v) => (0, controller_utils_1.isValidHexAddress)(v, { allowNonPrefixed: false }));
9
+ const HexStringSchema = (0, superstruct_1.define)('HexString', (v) => (0, utils_1.isStrictHexString)(v));
10
+ const truthyString = (s) => Boolean(s?.length);
8
11
  exports.truthyString = truthyString;
9
- const truthyDigitString = (string) => (0, exports.truthyString)(string) && Boolean(string.match(/^\d+$/u));
10
- exports.truthyDigitString = truthyDigitString;
11
- const isValidNumber = (v) => typeof v === 'number';
12
- exports.isValidNumber = isValidNumber;
13
- const isValidObject = (v) => typeof v === 'object' && v !== null;
14
- const isValidString = (v) => typeof v === 'string' && v.length > 0;
15
- const isValidHexAddress = (v) => isValidString(v) && (0, controller_utils_1.isValidHexAddress)(v, { allowNonPrefixed: false });
16
- const validateData = (validators, object, urlUsed, logError = true) => {
17
- return validators.every(({ property, type, validator }) => {
18
- const types = type.split('|');
19
- const propertyString = String(property);
20
- const valid = isValidObject(object) &&
21
- types.some((_type) => typeof object[propertyString] === _type) &&
22
- (!validator || validator(object[propertyString]));
23
- if (!valid && logError) {
24
- const value = isValidObject(object)
25
- ? object[propertyString]
26
- : undefined;
27
- const typeString = isValidObject(object)
28
- ? typeof object[propertyString]
29
- : 'undefined';
30
- console.error(`response to GET ${urlUsed} invalid for property ${String(property)}; value was:`, value, '| type was: ', typeString);
31
- }
32
- return valid;
12
+ const TruthyDigitStringSchema = (0, superstruct_1.define)('TruthyDigitString', (v) => (0, exports.truthyString)(v) && Boolean(v.match(/^\d+$/u)));
13
+ const SwapsTokenObjectSchema = (0, superstruct_1.type)({
14
+ decimals: (0, superstruct_1.number)(),
15
+ address: (0, superstruct_1.intersection)([(0, superstruct_1.string)(), HexAddressSchema]),
16
+ symbol: (0, superstruct_1.size)((0, superstruct_1.string)(), 1, 12),
17
+ });
18
+ const validateFeatureFlagsResponse = (data) => {
19
+ const ChainConfigurationSchema = (0, superstruct_1.type)({
20
+ isActiveSrc: (0, superstruct_1.boolean)(),
21
+ isActiveDest: (0, superstruct_1.boolean)(),
33
22
  });
23
+ const ConfigSchema = (0, superstruct_1.type)({
24
+ refreshRate: (0, superstruct_1.number)(),
25
+ maxRefreshCount: (0, superstruct_1.number)(),
26
+ support: (0, superstruct_1.boolean)(),
27
+ chains: (0, superstruct_1.record)((0, superstruct_1.string)(), ChainConfigurationSchema),
28
+ });
29
+ // Create schema for FeatureFlagResponse
30
+ const FeatureFlagResponseSchema = (0, superstruct_1.type)({
31
+ [types_1.BridgeFlag.EXTENSION_CONFIG]: ConfigSchema,
32
+ [types_1.BridgeFlag.MOBILE_CONFIG]: ConfigSchema,
33
+ });
34
+ return (0, superstruct_1.is)(data, FeatureFlagResponseSchema);
35
+ };
36
+ exports.validateFeatureFlagsResponse = validateFeatureFlagsResponse;
37
+ const validateSwapsTokenObject = (data) => {
38
+ return (0, superstruct_1.is)(data, SwapsTokenObjectSchema);
34
39
  };
35
- exports.validateData = validateData;
36
- const validateResponse = (validators, data, urlUsed, logError = true) => {
37
- return (0, exports.validateData)(validators, data, urlUsed, logError);
40
+ exports.validateSwapsTokenObject = validateSwapsTokenObject;
41
+ const validateQuoteResponse = (data) => {
42
+ const ChainIdSchema = (0, superstruct_1.number)();
43
+ const BridgeAssetSchema = (0, superstruct_1.type)({
44
+ chainId: ChainIdSchema,
45
+ address: (0, superstruct_1.string)(),
46
+ symbol: (0, superstruct_1.string)(),
47
+ name: (0, superstruct_1.string)(),
48
+ decimals: (0, superstruct_1.number)(),
49
+ icon: (0, superstruct_1.optional)((0, superstruct_1.string)()),
50
+ });
51
+ const FeeDataSchema = (0, superstruct_1.type)({
52
+ amount: TruthyDigitStringSchema,
53
+ asset: BridgeAssetSchema,
54
+ });
55
+ const ProtocolSchema = (0, superstruct_1.type)({
56
+ name: (0, superstruct_1.string)(),
57
+ displayName: (0, superstruct_1.optional)((0, superstruct_1.string)()),
58
+ icon: (0, superstruct_1.optional)((0, superstruct_1.string)()),
59
+ });
60
+ const StepSchema = (0, superstruct_1.type)({
61
+ action: (0, superstruct_1.enums)(Object.values(types_1.ActionTypes)),
62
+ srcChainId: ChainIdSchema,
63
+ destChainId: (0, superstruct_1.optional)(ChainIdSchema),
64
+ srcAsset: BridgeAssetSchema,
65
+ destAsset: BridgeAssetSchema,
66
+ srcAmount: (0, superstruct_1.string)(),
67
+ destAmount: (0, superstruct_1.string)(),
68
+ protocol: ProtocolSchema,
69
+ });
70
+ const RefuelDataSchema = StepSchema;
71
+ const QuoteSchema = (0, superstruct_1.type)({
72
+ requestId: (0, superstruct_1.string)(),
73
+ srcChainId: ChainIdSchema,
74
+ srcAsset: SwapsTokenObjectSchema,
75
+ srcTokenAmount: (0, superstruct_1.string)(),
76
+ destChainId: ChainIdSchema,
77
+ destAsset: SwapsTokenObjectSchema,
78
+ destTokenAmount: (0, superstruct_1.string)(),
79
+ feeData: (0, superstruct_1.record)((0, superstruct_1.enums)(Object.values(types_1.FeeType)), FeeDataSchema),
80
+ bridgeId: (0, superstruct_1.string)(),
81
+ bridges: (0, superstruct_1.array)((0, superstruct_1.string)()),
82
+ steps: (0, superstruct_1.array)(StepSchema),
83
+ refuel: (0, superstruct_1.optional)(RefuelDataSchema),
84
+ });
85
+ const TxDataSchema = (0, superstruct_1.type)({
86
+ chainId: (0, superstruct_1.number)(),
87
+ to: HexAddressSchema,
88
+ from: HexAddressSchema,
89
+ value: HexStringSchema,
90
+ data: HexStringSchema,
91
+ gasLimit: (0, superstruct_1.nullable)((0, superstruct_1.number)()),
92
+ });
93
+ const QuoteResponseSchema = (0, superstruct_1.type)({
94
+ quote: QuoteSchema,
95
+ approval: (0, superstruct_1.optional)(TxDataSchema),
96
+ trade: TxDataSchema,
97
+ estimatedProcessingTimeInSeconds: (0, superstruct_1.number)(),
98
+ });
99
+ return (0, superstruct_1.is)(data, QuoteResponseSchema);
38
100
  };
39
- exports.validateResponse = validateResponse;
40
- exports.FEATURE_FLAG_VALIDATORS = [
41
- {
42
- property: types_1.BridgeFlag.EXTENSION_CONFIG,
43
- type: 'object',
44
- validator: (v) => isValidObject(v) &&
45
- 'refreshRate' in v &&
46
- (0, exports.isValidNumber)(v.refreshRate) &&
47
- 'maxRefreshCount' in v &&
48
- (0, exports.isValidNumber)(v.maxRefreshCount) &&
49
- 'chains' in v &&
50
- isValidObject(v.chains) &&
51
- Object.values(v.chains).every((chain) => isValidObject(chain)) &&
52
- Object.values(v.chains).every((chain) => 'isActiveSrc' in chain &&
53
- 'isActiveDest' in chain &&
54
- typeof chain.isActiveSrc === 'boolean' &&
55
- typeof chain.isActiveDest === 'boolean'),
56
- },
57
- ];
58
- exports.TOKEN_AGGREGATOR_VALIDATORS = [
59
- {
60
- property: 'aggregators',
61
- type: 'object',
62
- validator: (v) => isValidObject(v) && Object.values(v).every(isValidString),
63
- },
64
- ];
65
- exports.TOKEN_VALIDATORS = [
66
- { property: 'decimals', type: 'number' },
67
- { property: 'address', type: 'string', validator: isValidHexAddress },
68
- {
69
- property: 'symbol',
70
- type: 'string',
71
- validator: (v) => isValidString(v) && v.length <= 12,
72
- },
73
- ];
74
- exports.QUOTE_RESPONSE_VALIDATORS = [
75
- { property: 'quote', type: 'object', validator: isValidObject },
76
- { property: 'estimatedProcessingTimeInSeconds', type: 'number' },
77
- {
78
- property: 'approval',
79
- type: 'object|undefined',
80
- validator: (v) => v === undefined || isValidObject(v),
81
- },
82
- { property: 'trade', type: 'object', validator: isValidObject },
83
- ];
84
- exports.QUOTE_VALIDATORS = [
85
- { property: 'requestId', type: 'string' },
86
- { property: 'srcTokenAmount', type: 'string' },
87
- { property: 'destTokenAmount', type: 'string' },
88
- { property: 'bridgeId', type: 'string' },
89
- { property: 'bridges', type: 'object', validator: isValidObject },
90
- { property: 'srcChainId', type: 'number' },
91
- { property: 'destChainId', type: 'number' },
92
- { property: 'srcAsset', type: 'object', validator: isValidObject },
93
- { property: 'destAsset', type: 'object', validator: isValidObject },
94
- { property: 'feeData', type: 'object', validator: isValidObject },
95
- ];
96
- exports.FEE_DATA_VALIDATORS = [
97
- {
98
- property: 'amount',
99
- type: 'string',
100
- validator: (v) => (0, exports.truthyDigitString)(String(v)),
101
- },
102
- { property: 'asset', type: 'object', validator: isValidObject },
103
- ];
104
- exports.TX_DATA_VALIDATORS = [
105
- { property: 'chainId', type: 'number' },
106
- { property: 'value', type: 'string', validator: utils_1.isStrictHexString },
107
- { property: 'gasLimit', type: 'number' },
108
- { property: 'to', type: 'string', validator: isValidHexAddress },
109
- { property: 'from', type: 'string', validator: isValidHexAddress },
110
- { property: 'data', type: 'string', validator: utils_1.isStrictHexString },
111
- ];
101
+ exports.validateQuoteResponse = validateQuoteResponse;
112
102
  //# sourceMappingURL=validators.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"validators.cjs","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":"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","sourcesContent":["import { isValidHexAddress as isValidHexAddress_ } from '@metamask/controller-utils';\nimport { isStrictHexString } from '@metamask/utils';\n\nimport type { SwapsTokenObject } from '../constants/tokens';\nimport type {\n FeatureFlagResponse,\n FeeData,\n Quote,\n QuoteResponse,\n TxData,\n} from '../types';\nimport { BridgeFlag } from '../types';\n\nexport const truthyString = (string: string) => Boolean(string?.length);\nexport const truthyDigitString = (string: string) =>\n truthyString(string) && Boolean(string.match(/^\\d+$/u));\n\nexport const isValidNumber = (v: unknown): v is number => typeof v === 'number';\nconst isValidObject = (v: unknown): v is object =>\n typeof v === 'object' && v !== null;\nconst isValidString = (v: unknown): v is string =>\n typeof v === 'string' && v.length > 0;\nconst isValidHexAddress = (v: unknown) =>\n isValidString(v) && isValidHexAddress_(v, { allowNonPrefixed: false });\n\ntype Validator<ExpectedResponse> = {\n property: keyof ExpectedResponse;\n type: string;\n validator?: (value: unknown) => boolean;\n};\n\nexport const validateData = <ExpectedResponse>(\n validators: Validator<ExpectedResponse>[],\n object: unknown,\n urlUsed: string,\n logError = true,\n): object is ExpectedResponse => {\n return validators.every(({ property, type, validator }) => {\n const types = type.split('|');\n const propertyString = String(property);\n\n const valid =\n isValidObject(object) &&\n types.some(\n (_type) =>\n typeof object[propertyString as keyof typeof object] === _type,\n ) &&\n (!validator || validator(object[propertyString as keyof typeof object]));\n\n if (!valid && logError) {\n const value = isValidObject(object)\n ? object[propertyString as keyof typeof object]\n : undefined;\n const typeString = isValidObject(object)\n ? typeof object[propertyString as keyof typeof object]\n : 'undefined';\n\n console.error(\n `response to GET ${urlUsed} invalid for property ${String(property)}; value was:`,\n value,\n '| type was: ',\n typeString,\n );\n }\n return valid;\n });\n};\n\nexport const validateResponse = <ExpectedResponse>(\n validators: Validator<ExpectedResponse>[],\n data: unknown,\n urlUsed: string,\n logError = true,\n): data is ExpectedResponse => {\n return validateData(validators, data, urlUsed, logError);\n};\n\nexport const FEATURE_FLAG_VALIDATORS = [\n {\n property: BridgeFlag.EXTENSION_CONFIG,\n type: 'object',\n validator: (\n v: unknown,\n ): v is Pick<FeatureFlagResponse, BridgeFlag.EXTENSION_CONFIG> =>\n isValidObject(v) &&\n 'refreshRate' in v &&\n isValidNumber(v.refreshRate) &&\n 'maxRefreshCount' in v &&\n isValidNumber(v.maxRefreshCount) &&\n 'chains' in v &&\n isValidObject(v.chains) &&\n Object.values(v.chains).every((chain) => isValidObject(chain)) &&\n Object.values(v.chains).every(\n (chain) =>\n 'isActiveSrc' in chain &&\n 'isActiveDest' in chain &&\n typeof chain.isActiveSrc === 'boolean' &&\n typeof chain.isActiveDest === 'boolean',\n ),\n },\n];\n\nexport const TOKEN_AGGREGATOR_VALIDATORS = [\n {\n property: 'aggregators',\n type: 'object',\n validator: (v: unknown): v is number[] =>\n isValidObject(v) && Object.values(v).every(isValidString),\n },\n];\n\nexport const TOKEN_VALIDATORS: Validator<SwapsTokenObject>[] = [\n { property: 'decimals', type: 'number' },\n { property: 'address', type: 'string', validator: isValidHexAddress },\n {\n property: 'symbol',\n type: 'string',\n validator: (v: unknown) => isValidString(v) && v.length <= 12,\n },\n];\n\nexport const QUOTE_RESPONSE_VALIDATORS: Validator<QuoteResponse>[] = [\n { property: 'quote', type: 'object', validator: isValidObject },\n { property: 'estimatedProcessingTimeInSeconds', type: 'number' },\n {\n property: 'approval',\n type: 'object|undefined',\n validator: (v: unknown) => v === undefined || isValidObject(v),\n },\n { property: 'trade', type: 'object', validator: isValidObject },\n];\n\nexport const QUOTE_VALIDATORS: Validator<Quote>[] = [\n { property: 'requestId', type: 'string' },\n { property: 'srcTokenAmount', type: 'string' },\n { property: 'destTokenAmount', type: 'string' },\n { property: 'bridgeId', type: 'string' },\n { property: 'bridges', type: 'object', validator: isValidObject },\n { property: 'srcChainId', type: 'number' },\n { property: 'destChainId', type: 'number' },\n { property: 'srcAsset', type: 'object', validator: isValidObject },\n { property: 'destAsset', type: 'object', validator: isValidObject },\n { property: 'feeData', type: 'object', validator: isValidObject },\n];\n\nexport const FEE_DATA_VALIDATORS: Validator<FeeData>[] = [\n {\n property: 'amount',\n type: 'string',\n validator: (v: unknown) => truthyDigitString(String(v)),\n },\n { property: 'asset', type: 'object', validator: isValidObject },\n];\n\nexport const TX_DATA_VALIDATORS: Validator<TxData>[] = [\n { property: 'chainId', type: 'number' },\n { property: 'value', type: 'string', validator: isStrictHexString },\n { property: 'gasLimit', type: 'number' },\n { property: 'to', type: 'string', validator: isValidHexAddress },\n { property: 'from', type: 'string', validator: isValidHexAddress },\n { property: 'data', type: 'string', validator: isStrictHexString },\n];\n"]}
1
+ {"version":3,"file":"validators.cjs","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":";;;AAAA,iEAA+D;AAC/D,uDAc+B;AAC/B,2CAAoD;AAIpD,wCAA4D;AAE5D,MAAM,gBAAgB,GAAG,IAAA,oBAAM,EAAC,YAAY,EAAE,CAAC,CAAU,EAAE,EAAE,CAC3D,IAAA,oCAAiB,EAAC,CAAW,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAC5D,CAAC;AAEF,MAAM,eAAe,GAAG,IAAA,oBAAM,EAAC,WAAW,EAAE,CAAC,CAAU,EAAE,EAAE,CACzD,IAAA,yBAAiB,EAAC,CAAW,CAAC,CAC/B,CAAC;AAEK,MAAM,YAAY,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAAjD,QAAA,YAAY,gBAAqC;AAC9D,MAAM,uBAAuB,GAAG,IAAA,oBAAM,EACpC,mBAAmB,EACnB,CAAC,CAAU,EAAE,EAAE,CACb,IAAA,oBAAY,EAAC,CAAW,CAAC,IAAI,OAAO,CAAE,CAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CACtE,CAAC;AAEF,MAAM,sBAAsB,GAAG,IAAA,kBAAI,EAAC;IAClC,QAAQ,EAAE,IAAA,oBAAM,GAAE;IAClB,OAAO,EAAE,IAAA,0BAAY,EAAC,CAAC,IAAA,oBAAM,GAAE,EAAE,gBAAgB,CAAC,CAAC;IACnD,MAAM,EAAE,IAAA,kBAAI,EAAC,IAAA,oBAAM,GAAE,EAAE,CAAC,EAAE,EAAE,CAAC;CAC9B,CAAC,CAAC;AAEI,MAAM,4BAA4B,GAAG,CAC1C,IAAa,EACgB,EAAE;IAC/B,MAAM,wBAAwB,GAAG,IAAA,kBAAI,EAAC;QACpC,WAAW,EAAE,IAAA,qBAAO,GAAE;QACtB,YAAY,EAAE,IAAA,qBAAO,GAAE;KACxB,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,IAAA,kBAAI,EAAC;QACxB,WAAW,EAAE,IAAA,oBAAM,GAAE;QACrB,eAAe,EAAE,IAAA,oBAAM,GAAE;QACzB,OAAO,EAAE,IAAA,qBAAO,GAAE;QAClB,MAAM,EAAE,IAAA,oBAAM,EAAC,IAAA,oBAAM,GAAE,EAAE,wBAAwB,CAAC;KACnD,CAAC,CAAC;IAEH,wCAAwC;IACxC,MAAM,yBAAyB,GAAG,IAAA,kBAAI,EAAC;QACrC,CAAC,kBAAU,CAAC,gBAAgB,CAAC,EAAE,YAAY;QAC3C,CAAC,kBAAU,CAAC,aAAa,CAAC,EAAE,YAAY;KACzC,CAAC,CAAC;IAEH,OAAO,IAAA,gBAAE,EAAC,IAAI,EAAE,yBAAyB,CAAC,CAAC;AAC7C,CAAC,CAAC;AAtBW,QAAA,4BAA4B,gCAsBvC;AAEK,MAAM,wBAAwB,GAAG,CACtC,IAAa,EACa,EAAE;IAC5B,OAAO,IAAA,gBAAE,EAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;AAC1C,CAAC,CAAC;AAJW,QAAA,wBAAwB,4BAInC;AAEK,MAAM,qBAAqB,GAAG,CAAC,IAAa,EAAyB,EAAE;IAC5E,MAAM,aAAa,GAAG,IAAA,oBAAM,GAAE,CAAC;IAE/B,MAAM,iBAAiB,GAAG,IAAA,kBAAI,EAAC;QAC7B,OAAO,EAAE,aAAa;QACtB,OAAO,EAAE,IAAA,oBAAM,GAAE;QACjB,MAAM,EAAE,IAAA,oBAAM,GAAE;QAChB,IAAI,EAAE,IAAA,oBAAM,GAAE;QACd,QAAQ,EAAE,IAAA,oBAAM,GAAE;QAClB,IAAI,EAAE,IAAA,sBAAQ,EAAC,IAAA,oBAAM,GAAE,CAAC;KACzB,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,IAAA,kBAAI,EAAC;QACzB,MAAM,EAAE,uBAAuB;QAC/B,KAAK,EAAE,iBAAiB;KACzB,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,IAAA,kBAAI,EAAC;QAC1B,IAAI,EAAE,IAAA,oBAAM,GAAE;QACd,WAAW,EAAE,IAAA,sBAAQ,EAAC,IAAA,oBAAM,GAAE,CAAC;QAC/B,IAAI,EAAE,IAAA,sBAAQ,EAAC,IAAA,oBAAM,GAAE,CAAC;KACzB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,IAAA,kBAAI,EAAC;QACtB,MAAM,EAAE,IAAA,mBAAK,EAAC,MAAM,CAAC,MAAM,CAAC,mBAAW,CAAC,CAAC;QACzC,UAAU,EAAE,aAAa;QACzB,WAAW,EAAE,IAAA,sBAAQ,EAAC,aAAa,CAAC;QACpC,QAAQ,EAAE,iBAAiB;QAC3B,SAAS,EAAE,iBAAiB;QAC5B,SAAS,EAAE,IAAA,oBAAM,GAAE;QACnB,UAAU,EAAE,IAAA,oBAAM,GAAE;QACpB,QAAQ,EAAE,cAAc;KACzB,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAG,UAAU,CAAC;IAEpC,MAAM,WAAW,GAAG,IAAA,kBAAI,EAAC;QACvB,SAAS,EAAE,IAAA,oBAAM,GAAE;QACnB,UAAU,EAAE,aAAa;QACzB,QAAQ,EAAE,sBAAsB;QAChC,cAAc,EAAE,IAAA,oBAAM,GAAE;QACxB,WAAW,EAAE,aAAa;QAC1B,SAAS,EAAE,sBAAsB;QACjC,eAAe,EAAE,IAAA,oBAAM,GAAE;QACzB,OAAO,EAAE,IAAA,oBAAM,EAAC,IAAA,mBAAK,EAAC,MAAM,CAAC,MAAM,CAAC,eAAO,CAAC,CAAC,EAAE,aAAa,CAAC;QAC7D,QAAQ,EAAE,IAAA,oBAAM,GAAE;QAClB,OAAO,EAAE,IAAA,mBAAK,EAAC,IAAA,oBAAM,GAAE,CAAC;QACxB,KAAK,EAAE,IAAA,mBAAK,EAAC,UAAU,CAAC;QACxB,MAAM,EAAE,IAAA,sBAAQ,EAAC,gBAAgB,CAAC;KACnC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,IAAA,kBAAI,EAAC;QACxB,OAAO,EAAE,IAAA,oBAAM,GAAE;QACjB,EAAE,EAAE,gBAAgB;QACpB,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,eAAe;QACtB,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,IAAA,sBAAQ,EAAC,IAAA,oBAAM,GAAE,CAAC;KAC7B,CAAC,CAAC;IAEH,MAAM,mBAAmB,GAAG,IAAA,kBAAI,EAAC;QAC/B,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,IAAA,sBAAQ,EAAC,YAAY,CAAC;QAChC,KAAK,EAAE,YAAY;QACnB,gCAAgC,EAAE,IAAA,oBAAM,GAAE;KAC3C,CAAC,CAAC;IAEH,OAAO,IAAA,gBAAE,EAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;AACvC,CAAC,CAAC;AApEW,QAAA,qBAAqB,yBAoEhC","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 intersection,\n size,\n} from '@metamask/superstruct';\nimport { isStrictHexString } from '@metamask/utils';\n\nimport type { SwapsTokenObject } from '../constants/tokens';\nimport type { FeatureFlagResponse, QuoteResponse } from '../types';\nimport { ActionTypes, BridgeFlag, 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 SwapsTokenObjectSchema = type({\n decimals: number(),\n address: intersection([string(), HexAddressSchema]),\n symbol: size(string(), 1, 12),\n});\n\nexport const validateFeatureFlagsResponse = (\n data: unknown,\n): data is FeatureFlagResponse => {\n const ChainConfigurationSchema = type({\n isActiveSrc: boolean(),\n isActiveDest: boolean(),\n });\n\n const ConfigSchema = type({\n refreshRate: number(),\n maxRefreshCount: number(),\n support: boolean(),\n chains: record(string(), ChainConfigurationSchema),\n });\n\n // Create schema for FeatureFlagResponse\n const FeatureFlagResponseSchema = type({\n [BridgeFlag.EXTENSION_CONFIG]: ConfigSchema,\n [BridgeFlag.MOBILE_CONFIG]: ConfigSchema,\n });\n\n return is(data, FeatureFlagResponseSchema);\n};\n\nexport const validateSwapsTokenObject = (\n data: unknown,\n): data is SwapsTokenObject => {\n return is(data, SwapsTokenObjectSchema);\n};\n\nexport const validateQuoteResponse = (data: unknown): data is QuoteResponse => {\n const ChainIdSchema = number();\n\n const BridgeAssetSchema = type({\n chainId: ChainIdSchema,\n address: string(),\n symbol: string(),\n name: string(),\n decimals: number(),\n icon: optional(string()),\n });\n\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: SwapsTokenObjectSchema,\n srcTokenAmount: string(),\n destChainId: ChainIdSchema,\n destAsset: SwapsTokenObjectSchema,\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: TxDataSchema,\n estimatedProcessingTimeInSeconds: number(),\n });\n\n return is(data, QuoteResponseSchema);\n};\n"]}
@@ -1,30 +1,7 @@
1
1
  import type { SwapsTokenObject } from "../constants/tokens.cjs";
2
- import type { FeatureFlagResponse, FeeData, Quote, QuoteResponse, TxData } from "../types.cjs";
3
- import { BridgeFlag } from "../types.cjs";
4
- export declare const truthyString: (string: string) => boolean;
5
- export declare const truthyDigitString: (string: string) => boolean;
6
- export declare const isValidNumber: (v: unknown) => v is number;
7
- type Validator<ExpectedResponse> = {
8
- property: keyof ExpectedResponse;
9
- type: string;
10
- validator?: (value: unknown) => boolean;
11
- };
12
- export declare const validateData: <ExpectedResponse>(validators: Validator<ExpectedResponse>[], object: unknown, urlUsed: string, logError?: boolean) => object is ExpectedResponse;
13
- export declare const validateResponse: <ExpectedResponse>(validators: Validator<ExpectedResponse>[], data: unknown, urlUsed: string, logError?: boolean) => data is ExpectedResponse;
14
- export declare const FEATURE_FLAG_VALIDATORS: {
15
- property: BridgeFlag;
16
- type: string;
17
- validator: (v: unknown) => v is Pick<FeatureFlagResponse, BridgeFlag.EXTENSION_CONFIG>;
18
- }[];
19
- export declare const TOKEN_AGGREGATOR_VALIDATORS: {
20
- property: string;
21
- type: string;
22
- validator: (v: unknown) => v is number[];
23
- }[];
24
- export declare const TOKEN_VALIDATORS: Validator<SwapsTokenObject>[];
25
- export declare const QUOTE_RESPONSE_VALIDATORS: Validator<QuoteResponse>[];
26
- export declare const QUOTE_VALIDATORS: Validator<Quote>[];
27
- export declare const FEE_DATA_VALIDATORS: Validator<FeeData>[];
28
- export declare const TX_DATA_VALIDATORS: Validator<TxData>[];
29
- export {};
2
+ import type { FeatureFlagResponse, QuoteResponse } from "../types.cjs";
3
+ export declare const truthyString: (s: string) => boolean;
4
+ export declare const validateFeatureFlagsResponse: (data: unknown) => data is FeatureFlagResponse;
5
+ export declare const validateSwapsTokenObject: (data: unknown) => data is SwapsTokenObject;
6
+ export declare const validateQuoteResponse: (data: unknown) => data is QuoteResponse;
30
7
  //# sourceMappingURL=validators.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validators.d.cts","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gCAA4B;AAC5D,OAAO,KAAK,EACV,mBAAmB,EACnB,OAAO,EACP,KAAK,EACL,aAAa,EACb,MAAM,EACP,qBAAiB;AAClB,OAAO,EAAE,UAAU,EAAE,qBAAiB;AAEtC,eAAO,MAAM,YAAY,WAAY,MAAM,YAA4B,CAAC;AACxE,eAAO,MAAM,iBAAiB,WAAY,MAAM,YACS,CAAC;AAE1D,eAAO,MAAM,aAAa,MAAO,OAAO,gBAAuC,CAAC;AAQhF,KAAK,SAAS,CAAC,gBAAgB,IAAI;IACjC,QAAQ,EAAE,MAAM,gBAAgB,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;CACzC,CAAC;AAEF,eAAO,MAAM,YAAY,wEAEf,OAAO,WACN,MAAM,mDAgChB,CAAC;AAEF,eAAO,MAAM,gBAAgB,sEAErB,OAAO,WACJ,MAAM,iDAIhB,CAAC;AAEF,eAAO,MAAM,uBAAuB;;;mBAK3B,OAAO;GAkBf,CAAC;AAEF,eAAO,MAAM,2BAA2B;;;mBAIrB,OAAO;GAGzB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,SAAS,CAAC,gBAAgB,CAAC,EAQzD,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,SAAS,CAAC,aAAa,CAAC,EAS/D,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,SAAS,CAAC,KAAK,CAAC,EAW9C,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,SAAS,CAAC,OAAO,CAAC,EAOnD,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,SAAS,CAAC,MAAM,CAAC,EAOjD,CAAC"}
1
+ {"version":3,"file":"validators.d.cts","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gCAA4B;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,qBAAiB;AAWnE,eAAO,MAAM,YAAY,MAAO,MAAM,YAAuB,CAAC;AAa9D,eAAO,MAAM,4BAA4B,SACjC,OAAO,gCAqBd,CAAC;AAEF,eAAO,MAAM,wBAAwB,SAC7B,OAAO,6BAGd,CAAC;AAEF,eAAO,MAAM,qBAAqB,SAAU,OAAO,0BAoElD,CAAC"}
@@ -1,30 +1,7 @@
1
1
  import type { SwapsTokenObject } from "../constants/tokens.mjs";
2
- import type { FeatureFlagResponse, FeeData, Quote, QuoteResponse, TxData } from "../types.mjs";
3
- import { BridgeFlag } from "../types.mjs";
4
- export declare const truthyString: (string: string) => boolean;
5
- export declare const truthyDigitString: (string: string) => boolean;
6
- export declare const isValidNumber: (v: unknown) => v is number;
7
- type Validator<ExpectedResponse> = {
8
- property: keyof ExpectedResponse;
9
- type: string;
10
- validator?: (value: unknown) => boolean;
11
- };
12
- export declare const validateData: <ExpectedResponse>(validators: Validator<ExpectedResponse>[], object: unknown, urlUsed: string, logError?: boolean) => object is ExpectedResponse;
13
- export declare const validateResponse: <ExpectedResponse>(validators: Validator<ExpectedResponse>[], data: unknown, urlUsed: string, logError?: boolean) => data is ExpectedResponse;
14
- export declare const FEATURE_FLAG_VALIDATORS: {
15
- property: BridgeFlag;
16
- type: string;
17
- validator: (v: unknown) => v is Pick<FeatureFlagResponse, BridgeFlag.EXTENSION_CONFIG>;
18
- }[];
19
- export declare const TOKEN_AGGREGATOR_VALIDATORS: {
20
- property: string;
21
- type: string;
22
- validator: (v: unknown) => v is number[];
23
- }[];
24
- export declare const TOKEN_VALIDATORS: Validator<SwapsTokenObject>[];
25
- export declare const QUOTE_RESPONSE_VALIDATORS: Validator<QuoteResponse>[];
26
- export declare const QUOTE_VALIDATORS: Validator<Quote>[];
27
- export declare const FEE_DATA_VALIDATORS: Validator<FeeData>[];
28
- export declare const TX_DATA_VALIDATORS: Validator<TxData>[];
29
- export {};
2
+ import type { FeatureFlagResponse, QuoteResponse } from "../types.mjs";
3
+ export declare const truthyString: (s: string) => boolean;
4
+ export declare const validateFeatureFlagsResponse: (data: unknown) => data is FeatureFlagResponse;
5
+ export declare const validateSwapsTokenObject: (data: unknown) => data is SwapsTokenObject;
6
+ export declare const validateQuoteResponse: (data: unknown) => data is QuoteResponse;
30
7
  //# sourceMappingURL=validators.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validators.d.mts","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gCAA4B;AAC5D,OAAO,KAAK,EACV,mBAAmB,EACnB,OAAO,EACP,KAAK,EACL,aAAa,EACb,MAAM,EACP,qBAAiB;AAClB,OAAO,EAAE,UAAU,EAAE,qBAAiB;AAEtC,eAAO,MAAM,YAAY,WAAY,MAAM,YAA4B,CAAC;AACxE,eAAO,MAAM,iBAAiB,WAAY,MAAM,YACS,CAAC;AAE1D,eAAO,MAAM,aAAa,MAAO,OAAO,gBAAuC,CAAC;AAQhF,KAAK,SAAS,CAAC,gBAAgB,IAAI;IACjC,QAAQ,EAAE,MAAM,gBAAgB,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;CACzC,CAAC;AAEF,eAAO,MAAM,YAAY,wEAEf,OAAO,WACN,MAAM,mDAgChB,CAAC;AAEF,eAAO,MAAM,gBAAgB,sEAErB,OAAO,WACJ,MAAM,iDAIhB,CAAC;AAEF,eAAO,MAAM,uBAAuB;;;mBAK3B,OAAO;GAkBf,CAAC;AAEF,eAAO,MAAM,2BAA2B;;;mBAIrB,OAAO;GAGzB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,SAAS,CAAC,gBAAgB,CAAC,EAQzD,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,SAAS,CAAC,aAAa,CAAC,EAS/D,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,SAAS,CAAC,KAAK,CAAC,EAW9C,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,SAAS,CAAC,OAAO,CAAC,EAOnD,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,SAAS,CAAC,MAAM,CAAC,EAOjD,CAAC"}
1
+ {"version":3,"file":"validators.d.mts","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gCAA4B;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,qBAAiB;AAWnE,eAAO,MAAM,YAAY,MAAO,MAAM,YAAuB,CAAC;AAa9D,eAAO,MAAM,4BAA4B,SACjC,OAAO,gCAqBd,CAAC;AAEF,eAAO,MAAM,wBAAwB,SAC7B,OAAO,6BAGd,CAAC;AAEF,eAAO,MAAM,qBAAqB,SAAU,OAAO,0BAoElD,CAAC"}
@@ -1,104 +1,95 @@
1
- import { isValidHexAddress as isValidHexAddress_ } from "@metamask/controller-utils";
1
+ import { isValidHexAddress } from "@metamask/controller-utils";
2
+ import { string, boolean, number, type, is, record, array, nullable, optional, enums, define, intersection, size } from "@metamask/superstruct";
2
3
  import { isStrictHexString } from "@metamask/utils";
3
- import { BridgeFlag } from "../types.mjs";
4
- export const truthyString = (string) => Boolean(string?.length);
5
- export const truthyDigitString = (string) => truthyString(string) && Boolean(string.match(/^\d+$/u));
6
- export const isValidNumber = (v) => typeof v === 'number';
7
- const isValidObject = (v) => typeof v === 'object' && v !== null;
8
- const isValidString = (v) => typeof v === 'string' && v.length > 0;
9
- const isValidHexAddress = (v) => isValidString(v) && isValidHexAddress_(v, { allowNonPrefixed: false });
10
- export const validateData = (validators, object, urlUsed, logError = true) => {
11
- return validators.every(({ property, type, validator }) => {
12
- const types = type.split('|');
13
- const propertyString = String(property);
14
- const valid = isValidObject(object) &&
15
- types.some((_type) => typeof object[propertyString] === _type) &&
16
- (!validator || validator(object[propertyString]));
17
- if (!valid && logError) {
18
- const value = isValidObject(object)
19
- ? object[propertyString]
20
- : undefined;
21
- const typeString = isValidObject(object)
22
- ? typeof object[propertyString]
23
- : 'undefined';
24
- console.error(`response to GET ${urlUsed} invalid for property ${String(property)}; value was:`, value, '| type was: ', typeString);
25
- }
26
- return valid;
4
+ import { ActionTypes, BridgeFlag, FeeType } from "../types.mjs";
5
+ const HexAddressSchema = define('HexAddress', (v) => isValidHexAddress(v, { allowNonPrefixed: false }));
6
+ const HexStringSchema = define('HexString', (v) => isStrictHexString(v));
7
+ export const truthyString = (s) => Boolean(s?.length);
8
+ const TruthyDigitStringSchema = define('TruthyDigitString', (v) => truthyString(v) && Boolean(v.match(/^\d+$/u)));
9
+ const SwapsTokenObjectSchema = type({
10
+ decimals: number(),
11
+ address: intersection([string(), HexAddressSchema]),
12
+ symbol: size(string(), 1, 12),
13
+ });
14
+ export const validateFeatureFlagsResponse = (data) => {
15
+ const ChainConfigurationSchema = type({
16
+ isActiveSrc: boolean(),
17
+ isActiveDest: boolean(),
27
18
  });
19
+ const ConfigSchema = type({
20
+ refreshRate: number(),
21
+ maxRefreshCount: number(),
22
+ support: boolean(),
23
+ chains: record(string(), ChainConfigurationSchema),
24
+ });
25
+ // Create schema for FeatureFlagResponse
26
+ const FeatureFlagResponseSchema = type({
27
+ [BridgeFlag.EXTENSION_CONFIG]: ConfigSchema,
28
+ [BridgeFlag.MOBILE_CONFIG]: ConfigSchema,
29
+ });
30
+ return is(data, FeatureFlagResponseSchema);
31
+ };
32
+ export const validateSwapsTokenObject = (data) => {
33
+ return is(data, SwapsTokenObjectSchema);
28
34
  };
29
- export const validateResponse = (validators, data, urlUsed, logError = true) => {
30
- return validateData(validators, data, urlUsed, logError);
35
+ export const validateQuoteResponse = (data) => {
36
+ const ChainIdSchema = number();
37
+ const BridgeAssetSchema = type({
38
+ chainId: ChainIdSchema,
39
+ address: string(),
40
+ symbol: string(),
41
+ name: string(),
42
+ decimals: number(),
43
+ icon: optional(string()),
44
+ });
45
+ const FeeDataSchema = type({
46
+ amount: TruthyDigitStringSchema,
47
+ asset: BridgeAssetSchema,
48
+ });
49
+ const ProtocolSchema = type({
50
+ name: string(),
51
+ displayName: optional(string()),
52
+ icon: optional(string()),
53
+ });
54
+ const StepSchema = type({
55
+ action: enums(Object.values(ActionTypes)),
56
+ srcChainId: ChainIdSchema,
57
+ destChainId: optional(ChainIdSchema),
58
+ srcAsset: BridgeAssetSchema,
59
+ destAsset: BridgeAssetSchema,
60
+ srcAmount: string(),
61
+ destAmount: string(),
62
+ protocol: ProtocolSchema,
63
+ });
64
+ const RefuelDataSchema = StepSchema;
65
+ const QuoteSchema = type({
66
+ requestId: string(),
67
+ srcChainId: ChainIdSchema,
68
+ srcAsset: SwapsTokenObjectSchema,
69
+ srcTokenAmount: string(),
70
+ destChainId: ChainIdSchema,
71
+ destAsset: SwapsTokenObjectSchema,
72
+ destTokenAmount: string(),
73
+ feeData: record(enums(Object.values(FeeType)), FeeDataSchema),
74
+ bridgeId: string(),
75
+ bridges: array(string()),
76
+ steps: array(StepSchema),
77
+ refuel: optional(RefuelDataSchema),
78
+ });
79
+ const TxDataSchema = type({
80
+ chainId: number(),
81
+ to: HexAddressSchema,
82
+ from: HexAddressSchema,
83
+ value: HexStringSchema,
84
+ data: HexStringSchema,
85
+ gasLimit: nullable(number()),
86
+ });
87
+ const QuoteResponseSchema = type({
88
+ quote: QuoteSchema,
89
+ approval: optional(TxDataSchema),
90
+ trade: TxDataSchema,
91
+ estimatedProcessingTimeInSeconds: number(),
92
+ });
93
+ return is(data, QuoteResponseSchema);
31
94
  };
32
- export const FEATURE_FLAG_VALIDATORS = [
33
- {
34
- property: BridgeFlag.EXTENSION_CONFIG,
35
- type: 'object',
36
- validator: (v) => isValidObject(v) &&
37
- 'refreshRate' in v &&
38
- isValidNumber(v.refreshRate) &&
39
- 'maxRefreshCount' in v &&
40
- isValidNumber(v.maxRefreshCount) &&
41
- 'chains' in v &&
42
- isValidObject(v.chains) &&
43
- Object.values(v.chains).every((chain) => isValidObject(chain)) &&
44
- Object.values(v.chains).every((chain) => 'isActiveSrc' in chain &&
45
- 'isActiveDest' in chain &&
46
- typeof chain.isActiveSrc === 'boolean' &&
47
- typeof chain.isActiveDest === 'boolean'),
48
- },
49
- ];
50
- export const TOKEN_AGGREGATOR_VALIDATORS = [
51
- {
52
- property: 'aggregators',
53
- type: 'object',
54
- validator: (v) => isValidObject(v) && Object.values(v).every(isValidString),
55
- },
56
- ];
57
- export const TOKEN_VALIDATORS = [
58
- { property: 'decimals', type: 'number' },
59
- { property: 'address', type: 'string', validator: isValidHexAddress },
60
- {
61
- property: 'symbol',
62
- type: 'string',
63
- validator: (v) => isValidString(v) && v.length <= 12,
64
- },
65
- ];
66
- export const QUOTE_RESPONSE_VALIDATORS = [
67
- { property: 'quote', type: 'object', validator: isValidObject },
68
- { property: 'estimatedProcessingTimeInSeconds', type: 'number' },
69
- {
70
- property: 'approval',
71
- type: 'object|undefined',
72
- validator: (v) => v === undefined || isValidObject(v),
73
- },
74
- { property: 'trade', type: 'object', validator: isValidObject },
75
- ];
76
- export const QUOTE_VALIDATORS = [
77
- { property: 'requestId', type: 'string' },
78
- { property: 'srcTokenAmount', type: 'string' },
79
- { property: 'destTokenAmount', type: 'string' },
80
- { property: 'bridgeId', type: 'string' },
81
- { property: 'bridges', type: 'object', validator: isValidObject },
82
- { property: 'srcChainId', type: 'number' },
83
- { property: 'destChainId', type: 'number' },
84
- { property: 'srcAsset', type: 'object', validator: isValidObject },
85
- { property: 'destAsset', type: 'object', validator: isValidObject },
86
- { property: 'feeData', type: 'object', validator: isValidObject },
87
- ];
88
- export const FEE_DATA_VALIDATORS = [
89
- {
90
- property: 'amount',
91
- type: 'string',
92
- validator: (v) => truthyDigitString(String(v)),
93
- },
94
- { property: 'asset', type: 'object', validator: isValidObject },
95
- ];
96
- export const TX_DATA_VALIDATORS = [
97
- { property: 'chainId', type: 'number' },
98
- { property: 'value', type: 'string', validator: isStrictHexString },
99
- { property: 'gasLimit', type: 'number' },
100
- { property: 'to', type: 'string', validator: isValidHexAddress },
101
- { property: 'from', type: 'string', validator: isValidHexAddress },
102
- { property: 'data', type: 'string', validator: isStrictHexString },
103
- ];
104
95
  //# sourceMappingURL=validators.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"validators.mjs","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,IAAI,kBAAkB,EAAE,mCAAmC;AACrF,OAAO,EAAE,iBAAiB,EAAE,wBAAwB;AAUpD,OAAO,EAAE,UAAU,EAAE,qBAAiB;AAEtC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACxE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAE,EAAE,CAClD,YAAY,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AAE1D,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAU,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;AAChF,MAAM,aAAa,GAAG,CAAC,CAAU,EAAe,EAAE,CAChD,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC;AACtC,MAAM,aAAa,GAAG,CAAC,CAAU,EAAe,EAAE,CAChD,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACxC,MAAM,iBAAiB,GAAG,CAAC,CAAU,EAAE,EAAE,CACvC,aAAa,CAAC,CAAC,CAAC,IAAI,kBAAkB,CAAC,CAAC,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC;AAQzE,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,UAAyC,EACzC,MAAe,EACf,OAAe,EACf,QAAQ,GAAG,IAAI,EACa,EAAE;IAC9B,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAExC,MAAM,KAAK,GACT,aAAa,CAAC,MAAM,CAAC;YACrB,KAAK,CAAC,IAAI,CACR,CAAC,KAAK,EAAE,EAAE,CACR,OAAO,MAAM,CAAC,cAAqC,CAAC,KAAK,KAAK,CACjE;YACD,CAAC,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,CAAC,cAAqC,CAAC,CAAC,CAAC,CAAC;QAE3E,IAAI,CAAC,KAAK,IAAI,QAAQ,EAAE;YACtB,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC;gBACjC,CAAC,CAAC,MAAM,CAAC,cAAqC,CAAC;gBAC/C,CAAC,CAAC,SAAS,CAAC;YACd,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC;gBACtC,CAAC,CAAC,OAAO,MAAM,CAAC,cAAqC,CAAC;gBACtD,CAAC,CAAC,WAAW,CAAC;YAEhB,OAAO,CAAC,KAAK,CACX,mBAAmB,OAAO,yBAAyB,MAAM,CAAC,QAAQ,CAAC,cAAc,EACjF,KAAK,EACL,cAAc,EACd,UAAU,CACX,CAAC;SACH;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,UAAyC,EACzC,IAAa,EACb,OAAe,EACf,QAAQ,GAAG,IAAI,EACW,EAAE;IAC5B,OAAO,YAAY,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC3D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC;QACE,QAAQ,EAAE,UAAU,CAAC,gBAAgB;QACrC,IAAI,EAAE,QAAQ;QACd,SAAS,EAAE,CACT,CAAU,EACmD,EAAE,CAC/D,aAAa,CAAC,CAAC,CAAC;YAChB,aAAa,IAAI,CAAC;YAClB,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC;YAC5B,iBAAiB,IAAI,CAAC;YACtB,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC;YAChC,QAAQ,IAAI,CAAC;YACb,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC;YACvB,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC9D,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAC3B,CAAC,KAAK,EAAE,EAAE,CACR,aAAa,IAAI,KAAK;gBACtB,cAAc,IAAI,KAAK;gBACvB,OAAO,KAAK,CAAC,WAAW,KAAK,SAAS;gBACtC,OAAO,KAAK,CAAC,YAAY,KAAK,SAAS,CAC1C;KACJ;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC;QACE,QAAQ,EAAE,aAAa;QACvB,IAAI,EAAE,QAAQ;QACd,SAAS,EAAE,CAAC,CAAU,EAAiB,EAAE,CACvC,aAAa,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC;KAC5D;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAkC;IAC7D,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE;IACxC,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE;IACrE;QACE,QAAQ,EAAE,QAAQ;QAClB,IAAI,EAAE,QAAQ;QACd,SAAS,EAAE,CAAC,CAAU,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE;KAC9D;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAA+B;IACnE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE;IAC/D,EAAE,QAAQ,EAAE,kCAAkC,EAAE,IAAI,EAAE,QAAQ,EAAE;IAChE;QACE,QAAQ,EAAE,UAAU;QACpB,IAAI,EAAE,kBAAkB;QACxB,SAAS,EAAE,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,IAAI,aAAa,CAAC,CAAC,CAAC;KAC/D;IACD,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE;CAChE,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAuB;IAClD,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE;IACzC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC9C,EAAE,QAAQ,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC/C,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE;IACxC,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE;IACjE,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC1C,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC3C,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE;IAClE,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE;IACnE,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE;CAClE,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAyB;IACvD;QACE,QAAQ,EAAE,QAAQ;QAClB,IAAI,EAAE,QAAQ;QACd,SAAS,EAAE,CAAC,CAAU,EAAE,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KACxD;IACD,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE;CAChE,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAwB;IACrD,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE;IACvC,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE;IACnE,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE;IACxC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE;IAChE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE;IAClE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE;CACnE,CAAC","sourcesContent":["import { isValidHexAddress as isValidHexAddress_ } from '@metamask/controller-utils';\nimport { isStrictHexString } from '@metamask/utils';\n\nimport type { SwapsTokenObject } from '../constants/tokens';\nimport type {\n FeatureFlagResponse,\n FeeData,\n Quote,\n QuoteResponse,\n TxData,\n} from '../types';\nimport { BridgeFlag } from '../types';\n\nexport const truthyString = (string: string) => Boolean(string?.length);\nexport const truthyDigitString = (string: string) =>\n truthyString(string) && Boolean(string.match(/^\\d+$/u));\n\nexport const isValidNumber = (v: unknown): v is number => typeof v === 'number';\nconst isValidObject = (v: unknown): v is object =>\n typeof v === 'object' && v !== null;\nconst isValidString = (v: unknown): v is string =>\n typeof v === 'string' && v.length > 0;\nconst isValidHexAddress = (v: unknown) =>\n isValidString(v) && isValidHexAddress_(v, { allowNonPrefixed: false });\n\ntype Validator<ExpectedResponse> = {\n property: keyof ExpectedResponse;\n type: string;\n validator?: (value: unknown) => boolean;\n};\n\nexport const validateData = <ExpectedResponse>(\n validators: Validator<ExpectedResponse>[],\n object: unknown,\n urlUsed: string,\n logError = true,\n): object is ExpectedResponse => {\n return validators.every(({ property, type, validator }) => {\n const types = type.split('|');\n const propertyString = String(property);\n\n const valid =\n isValidObject(object) &&\n types.some(\n (_type) =>\n typeof object[propertyString as keyof typeof object] === _type,\n ) &&\n (!validator || validator(object[propertyString as keyof typeof object]));\n\n if (!valid && logError) {\n const value = isValidObject(object)\n ? object[propertyString as keyof typeof object]\n : undefined;\n const typeString = isValidObject(object)\n ? typeof object[propertyString as keyof typeof object]\n : 'undefined';\n\n console.error(\n `response to GET ${urlUsed} invalid for property ${String(property)}; value was:`,\n value,\n '| type was: ',\n typeString,\n );\n }\n return valid;\n });\n};\n\nexport const validateResponse = <ExpectedResponse>(\n validators: Validator<ExpectedResponse>[],\n data: unknown,\n urlUsed: string,\n logError = true,\n): data is ExpectedResponse => {\n return validateData(validators, data, urlUsed, logError);\n};\n\nexport const FEATURE_FLAG_VALIDATORS = [\n {\n property: BridgeFlag.EXTENSION_CONFIG,\n type: 'object',\n validator: (\n v: unknown,\n ): v is Pick<FeatureFlagResponse, BridgeFlag.EXTENSION_CONFIG> =>\n isValidObject(v) &&\n 'refreshRate' in v &&\n isValidNumber(v.refreshRate) &&\n 'maxRefreshCount' in v &&\n isValidNumber(v.maxRefreshCount) &&\n 'chains' in v &&\n isValidObject(v.chains) &&\n Object.values(v.chains).every((chain) => isValidObject(chain)) &&\n Object.values(v.chains).every(\n (chain) =>\n 'isActiveSrc' in chain &&\n 'isActiveDest' in chain &&\n typeof chain.isActiveSrc === 'boolean' &&\n typeof chain.isActiveDest === 'boolean',\n ),\n },\n];\n\nexport const TOKEN_AGGREGATOR_VALIDATORS = [\n {\n property: 'aggregators',\n type: 'object',\n validator: (v: unknown): v is number[] =>\n isValidObject(v) && Object.values(v).every(isValidString),\n },\n];\n\nexport const TOKEN_VALIDATORS: Validator<SwapsTokenObject>[] = [\n { property: 'decimals', type: 'number' },\n { property: 'address', type: 'string', validator: isValidHexAddress },\n {\n property: 'symbol',\n type: 'string',\n validator: (v: unknown) => isValidString(v) && v.length <= 12,\n },\n];\n\nexport const QUOTE_RESPONSE_VALIDATORS: Validator<QuoteResponse>[] = [\n { property: 'quote', type: 'object', validator: isValidObject },\n { property: 'estimatedProcessingTimeInSeconds', type: 'number' },\n {\n property: 'approval',\n type: 'object|undefined',\n validator: (v: unknown) => v === undefined || isValidObject(v),\n },\n { property: 'trade', type: 'object', validator: isValidObject },\n];\n\nexport const QUOTE_VALIDATORS: Validator<Quote>[] = [\n { property: 'requestId', type: 'string' },\n { property: 'srcTokenAmount', type: 'string' },\n { property: 'destTokenAmount', type: 'string' },\n { property: 'bridgeId', type: 'string' },\n { property: 'bridges', type: 'object', validator: isValidObject },\n { property: 'srcChainId', type: 'number' },\n { property: 'destChainId', type: 'number' },\n { property: 'srcAsset', type: 'object', validator: isValidObject },\n { property: 'destAsset', type: 'object', validator: isValidObject },\n { property: 'feeData', type: 'object', validator: isValidObject },\n];\n\nexport const FEE_DATA_VALIDATORS: Validator<FeeData>[] = [\n {\n property: 'amount',\n type: 'string',\n validator: (v: unknown) => truthyDigitString(String(v)),\n },\n { property: 'asset', type: 'object', validator: isValidObject },\n];\n\nexport const TX_DATA_VALIDATORS: Validator<TxData>[] = [\n { property: 'chainId', type: 'number' },\n { property: 'value', type: 'string', validator: isStrictHexString },\n { property: 'gasLimit', type: 'number' },\n { property: 'to', type: 'string', validator: isValidHexAddress },\n { property: 'from', type: 'string', validator: isValidHexAddress },\n { property: 'data', type: 'string', validator: isStrictHexString },\n];\n"]}
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 intersection,\n size,\n} from '@metamask/superstruct';\nimport { isStrictHexString } from '@metamask/utils';\n\nimport type { SwapsTokenObject } from '../constants/tokens';\nimport type { FeatureFlagResponse, QuoteResponse } from '../types';\nimport { ActionTypes, BridgeFlag, 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 SwapsTokenObjectSchema = type({\n decimals: number(),\n address: intersection([string(), HexAddressSchema]),\n symbol: size(string(), 1, 12),\n});\n\nexport const validateFeatureFlagsResponse = (\n data: unknown,\n): data is FeatureFlagResponse => {\n const ChainConfigurationSchema = type({\n isActiveSrc: boolean(),\n isActiveDest: boolean(),\n });\n\n const ConfigSchema = type({\n refreshRate: number(),\n maxRefreshCount: number(),\n support: boolean(),\n chains: record(string(), ChainConfigurationSchema),\n });\n\n // Create schema for FeatureFlagResponse\n const FeatureFlagResponseSchema = type({\n [BridgeFlag.EXTENSION_CONFIG]: ConfigSchema,\n [BridgeFlag.MOBILE_CONFIG]: ConfigSchema,\n });\n\n return is(data, FeatureFlagResponseSchema);\n};\n\nexport const validateSwapsTokenObject = (\n data: unknown,\n): data is SwapsTokenObject => {\n return is(data, SwapsTokenObjectSchema);\n};\n\nexport const validateQuoteResponse = (data: unknown): data is QuoteResponse => {\n const ChainIdSchema = number();\n\n const BridgeAssetSchema = type({\n chainId: ChainIdSchema,\n address: string(),\n symbol: string(),\n name: string(),\n decimals: number(),\n icon: optional(string()),\n });\n\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: SwapsTokenObjectSchema,\n srcTokenAmount: string(),\n destChainId: ChainIdSchema,\n destAsset: SwapsTokenObjectSchema,\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: TxDataSchema,\n estimatedProcessingTimeInSeconds: number(),\n });\n\n return is(data, QuoteResponseSchema);\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask-previews/bridge-controller",
3
- "version": "1.0.0-preview-90578fc4",
3
+ "version": "2.0.0-preview-4b0cb25d",
4
4
  "description": "Manages bridge-related quote fetching functionality for MetaMask",
5
5
  "keywords": [
6
6
  "MetaMask",
@@ -59,6 +59,7 @@
59
59
  "@metamask/auto-changelog": "^3.4.4",
60
60
  "@metamask/eth-json-rpc-provider": "^4.1.8",
61
61
  "@metamask/network-controller": "^22.2.1",
62
+ "@metamask/superstruct": "^3.1.0",
62
63
  "@metamask/transaction-controller": "^46.0.0",
63
64
  "@types/jest": "^27.4.1",
64
65
  "deepmerge": "^4.2.2",