diff --git a/patches/@metamask+assets-controllers+30.0.0.patch b/patches/@metamask+assets-controllers+30.0.0.patch deleted file mode 100644 index 985cb9387e8..00000000000 --- a/patches/@metamask+assets-controllers+30.0.0.patch +++ /dev/null @@ -1,1160 +0,0 @@ -diff --git a/node_modules/@metamask/assets-controllers/dist/chunk-4ODKGWYQ.js b/node_modules/@metamask/assets-controllers/dist/chunk-4ODKGWYQ.js -index 542e3f6..af49a85 100644 ---- a/node_modules/@metamask/assets-controllers/dist/chunk-4ODKGWYQ.js -+++ b/node_modules/@metamask/assets-controllers/dist/chunk-4ODKGWYQ.js -@@ -69,9 +69,10 @@ var AssetsContractController = class extends _basecontroller.BaseControllerV1 { - this.configure({ ipfsGateway }); - }); - onNetworkDidChange((networkState) => { -- if (this.config.chainId !== networkState.providerConfig.chainId) { -+ const {configuration: { chainId}} = this.getNetworkClientById(networkState.selectedNetworkClientId); -+ if (this.config.chainId !== chainId) { - this.configure({ -- chainId: networkState.providerConfig.chainId -+ chainId, - }); - } - }); -diff --git a/node_modules/@metamask/assets-controllers/dist/chunk-5F5EQAX5.js b/node_modules/@metamask/assets-controllers/dist/chunk-5F5EQAX5.js -index 6d1492c..2ac3275 100644 ---- a/node_modules/@metamask/assets-controllers/dist/chunk-5F5EQAX5.js -+++ b/node_modules/@metamask/assets-controllers/dist/chunk-5F5EQAX5.js -@@ -247,10 +247,15 @@ var TokenListController = class extends _pollingcontroller.StaticIntervalPolling - }; - _onNetworkControllerStateChange = new WeakSet(); - onNetworkControllerStateChange_fn = async function(networkControllerState) { -- if (this.chainId !== networkControllerState.providerConfig.chainId) { -+ const selectedNetworkClient = this.messagingSystem.call( -+ "NetworkController:getNetworkClientById", -+ networkControllerState.selectedNetworkClientId -+ ); -+ const { chainId } = selectedNetworkClient.configuration; -+ if (this.chainId !== chainId) { - this.abortController.abort(); - this.abortController = new AbortController(); -- this.chainId = networkControllerState.providerConfig.chainId; -+ this.chainId = chainId; - if (this.state.preventPollingOnNetworkRestart) { - this.clearingTokenListData(); - } else { -diff --git a/node_modules/@metamask/assets-controllers/dist/chunk-6W5EQ3JQ.js b/node_modules/@metamask/assets-controllers/dist/chunk-6W5EQ3JQ.js -index 0dc70ec..461a210 100644 ---- a/node_modules/@metamask/assets-controllers/dist/chunk-6W5EQ3JQ.js -+++ b/node_modules/@metamask/assets-controllers/dist/chunk-6W5EQ3JQ.js -@@ -378,9 +378,10 @@ fetchAndMapExchangeRatesForSupportedNativeCurrency_fn = async function({ - } - return Object.entries(contractNativeInformations).reduce( - (obj, [tokenAddress, token]) => { -+ // This is fixed on v31 of assets controllers - obj = { - ...obj, -- [tokenAddress.toLowerCase()]: { ...token } -+ [tokenAddress]: { ...token } - }; - return obj; - }, -@@ -416,7 +417,7 @@ fetchAndMapExchangeRatesForUnsupportedNativeCurrency_fn = async function({ - ...acc, - [tokenAddress]: { - ...token, -- value: token.value ? token.value * fallbackCurrencyToNativeCurrencyConversionRate : void 0 -+ price: token.price ? token.price * fallbackCurrencyToNativeCurrencyConversionRate : void 0 - } - }; - return acc; -diff --git a/node_modules/@metamask/assets-controllers/dist/chunk-ELSMS5S7.js b/node_modules/@metamask/assets-controllers/dist/chunk-ELSMS5S7.js -index 45254ad..83634ab 100644 ---- a/node_modules/@metamask/assets-controllers/dist/chunk-ELSMS5S7.js -+++ b/node_modules/@metamask/assets-controllers/dist/chunk-ELSMS5S7.js -@@ -87,6 +87,7 @@ var CurrencyRateController = class extends _pollingcontroller.StaticIntervalPoll - const nativeCurrencyForExchangeRate = Object.values( - _controllerutils.TESTNET_TICKER_SYMBOLS - ).includes(nativeCurrency) ? _controllerutils.FALL_BACK_VS_CURRENCY : nativeCurrency; -+ let shouldUpdateState = true; - try { - if (currentCurrency && nativeCurrency && // if either currency is an empty string we can skip the comparison - // because it will result in an error from the api and ultimately -@@ -103,23 +104,27 @@ var CurrencyRateController = class extends _pollingcontroller.StaticIntervalPoll - } - } catch (error) { - if (!(error instanceof Error && error.message.includes("market does not exist for this coin pair"))) { -+ // Don't update state on transient / unexpected errors -+ shouldUpdateState = false; - throw error; - } - } finally { - try { -- this.update(() => { -- return { -- currencyRates: { -- ...currencyRates, -- [nativeCurrency]: { -- conversionDate, -- conversionRate, -- usdConversionRate -- } -- }, -- currentCurrency -- }; -- }); -+ if (shouldUpdateState) { -+ this.update(() => { -+ return { -+ currencyRates: { -+ ...currencyRates, -+ [nativeCurrency]: { -+ conversionDate, -+ conversionRate, -+ usdConversionRate -+ } -+ }, -+ currentCurrency -+ }; -+ }); -+ } - } finally { - releaseLock(); - } -diff --git a/node_modules/@metamask/assets-controllers/dist/chunk-FMZML3V5.js b/node_modules/@metamask/assets-controllers/dist/chunk-FMZML3V5.js -index ee6155c..06a3a04 100644 ---- a/node_modules/@metamask/assets-controllers/dist/chunk-FMZML3V5.js -+++ b/node_modules/@metamask/assets-controllers/dist/chunk-FMZML3V5.js -@@ -1,12 +1,16 @@ - "use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/NftDetectionController.ts - -+var utils_1 = require('@metamask/utils'); - -- -+var _chunkNEXY7SE2js = require('./chunk-NEXY7SE2.js'); -+var MAX_GET_COLLECTION_BATCH_SIZE = 20; - - - var _controllerutils = require('@metamask/controller-utils'); - var _pollingcontroller = require('@metamask/polling-controller'); - var DEFAULT_INTERVAL = 18e4; -+var supportedNftDetectionNetworks = [_controllerutils.ChainId.mainnet, _controllerutils.ChainId['linea-mainnet']]; -+var inProcessNftFetchingUpdates; - var BlockaidResultType = /* @__PURE__ */ ((BlockaidResultType2) => { - BlockaidResultType2["Benign"] = "Benign"; - BlockaidResultType2["Spam"] = "Spam"; -@@ -50,6 +54,7 @@ var NftDetectionController = class extends _pollingcontroller.StaticIntervalPoll - * Name of this controller used during composition - */ - this.name = "NftDetectionController"; -+ this.inProcessNftFetchingUpdates= {}; - /** - * Checks whether network is mainnet or not. - * -@@ -72,11 +77,6 @@ var NftDetectionController = class extends _pollingcontroller.StaticIntervalPoll - const { selectedAddress: previouslySelectedAddress, disabled } = this.config; - if (selectedAddress !== previouslySelectedAddress || !useNftDetection !== disabled) { - this.configure({ selectedAddress, disabled: !useNftDetection }); -- if (useNftDetection) { -- this.start(); -- } else { -- this.stop(); -- } - } - }); - onNetworkStateChange(({ selectedNetworkClientId }) => { -@@ -92,34 +92,21 @@ var NftDetectionController = class extends _pollingcontroller.StaticIntervalPoll - this.setIntervalLength(this.config.interval); - } - getOwnerNftApi({ -+ chainId, - address, - next - }) { -- return `${_controllerutils.NFT_API_BASE_URL}/users/${address}/tokens?chainIds=1&limit=50&includeTopBid=true&continuation=${next ?? ""}`; -+ return `${_controllerutils.NFT_API_BASE_URL}/users/${address}/tokens?chainIds=${chainId}&limit=50&includeTopBid=true&continuation=${next ?? ""}`; - } -- async getOwnerNfts(address) { -- let nftApiResponse; -- let nfts = []; -- let next; -- do { -- nftApiResponse = await _controllerutils.fetchWithErrorHandling.call(void 0, { -- url: this.getOwnerNftApi({ address, next }), -- options: { -- headers: { -- Version: "1" -- } -- }, -- timeout: 15e3 -- }); -- if (!nftApiResponse) { -- return nfts; -+ async getOwnerNfts(address, chainId, cursor) { -+ const convertedChainId = _controllerutils.convertHexToDecimal.call(void 0, chainId).toString(); -+ const url = this.getOwnerNftApi({ chainId: convertedChainId, address, next: cursor }) -+ const nftApiResponse = await _controllerutils.handleFetch.call(void 0, url, { -+ headers: { -+ Version: '1' - } -- const newNfts = nftApiResponse.tokens.filter( -- (elm) => elm.token.isSpam === false && (elm.blockaidResult?.result_type ? elm.blockaidResult?.result_type === "Benign" /* Benign */ : true) -- ); -- nfts = [...nfts, ...newNfts]; -- } while (next = nftApiResponse.continuation); -- return nfts; -+ }); -+ return nftApiResponse; - } - async _executePoll(networkClientId, options) { - await this.detectNfts({ networkClientId, userAddress: options.address }); -@@ -169,62 +156,150 @@ var NftDetectionController = class extends _pollingcontroller.StaticIntervalPoll - networkClientId, - userAddress - } = { userAddress: this.config.selectedAddress }) { -- if (!this.isMainnet() || this.disabled) { -+ const { chainId } = this.config; -+ if (!supportedNftDetectionNetworks.includes(chainId) || this.disabled) { - return; - } - if (!userAddress) { - return; - } -- const apiNfts = await this.getOwnerNfts(userAddress); -- const addNftPromises = apiNfts.map(async (nft) => { -- const { -- tokenId: token_id, -- contract, -- kind, -- image: image_url, -- imageSmall: image_thumbnail_url, -- metadata: { imageOriginal: image_original_url } = {}, -- name, -- description, -- attributes, -- topBid, -- lastSale, -- rarityRank, -- rarityScore, -- collection -- } = nft.token; -- let ignored; -- const { ignoredNfts } = this.getNftState(); -- if (ignoredNfts.length) { -- ignored = ignoredNfts.find((c) => { -- return c.address === _controllerutils.toChecksumHexAddress.call(void 0, contract) && c.tokenId === token_id; -- }); -- } -- if (!ignored) { -- const nftMetadata = Object.assign( -- {}, -- { name }, -- description && { description }, -- image_url && { image: image_url }, -- image_thumbnail_url && { imageThumbnail: image_thumbnail_url }, -- image_original_url && { imageOriginal: image_original_url }, -- kind && { standard: kind.toUpperCase() }, -- lastSale && { lastSale }, -- attributes && { attributes }, -- topBid && { topBid }, -- rarityRank && { rarityRank }, -- rarityScore && { rarityScore }, -- collection && { collection } -+ const updateKey = `${chainId}:${userAddress}`; -+ if (updateKey in this.inProcessNftFetchingUpdates) { -+ // This prevents redundant updates -+ // This promise is resolved after the in-progress update has finished, -+ // and state has been updated. -+ await this.inProcessNftFetchingUpdates[updateKey]; -+ return; -+ } -+ const { -+ promise: inProgressUpdate, -+ resolve: updateSucceeded, -+ reject: updateFailed -+ } = utils_1.createDeferredPromise.call(void 0, { suppressUnhandledRejection: true }); -+ -+ this.inProcessNftFetchingUpdates[updateKey] = inProgressUpdate; -+ let next; -+ let apiNfts= []; -+ let resultNftApi; -+ -+ try{ -+ do { -+ resultNftApi = await this.getOwnerNfts(userAddress, chainId, next) -+ apiNfts = resultNftApi.tokens.filter((elm) => -+ elm.token.isSpam === false && -+ (elm.blockaidResult?.result_type? elm.blockaidResult?.result_type === BlockaidResultType.Benign: true), - ); -- await this.addNft(contract, token_id, { -- nftMetadata, -- userAddress, -- source: "detected" /* Detected */, -- networkClientId -+ const collections = apiNfts.reduce((acc, currValue) => { -+ if (!acc.includes(currValue.token.contract) && currValue.token.contract === currValue?.token?.collection?.id) { -+ acc.push(currValue.token.contract); -+ } -+ return acc; -+ }, []); -+ if (collections.length !== 0) { -+ const collectionResponse = await _chunkNEXY7SE2js.reduceInBatchesSerially.call(void 0, { -+ values: collections, -+ batchSize: MAX_GET_COLLECTION_BATCH_SIZE, -+ eachBatch: async (allResponses, batch) => { -+ const params = new URLSearchParams( -+ batch.map((s) => ["contract", s]) -+ ); -+ params.append("chainId", "1"); -+ const collectionResponseForBatch = await _controllerutils.fetchWithErrorHandling.call(void 0, -+ { -+ url: `${_controllerutils.NFT_API_BASE_URL}/collections?${params.toString()}`, -+ options: { -+ headers: { -+ Version: '1' -+ } -+ }, -+ timeout: 15000 -+ } -+ ); -+ return { -+ ...allResponses, -+ ...collectionResponseForBatch -+ }; -+ }, -+ initialResult: {} -+ }); -+ if (collectionResponse.collections?.length) { -+ apiNfts.forEach((singleNFT) => { -+ const found = collectionResponse.collections.find( -+ (elm) => elm.id?.toLowerCase() === singleNFT.token.contract.toLowerCase() -+ ); -+ if (found) { -+ singleNFT.token = { -+ ...singleNFT.token, -+ collection: { -+ ...singleNFT.token.collection ? singleNFT.token.collection : {}, -+ creator: found?.creator, -+ openseaVerificationStatus: found?.openseaVerificationStatus, -+ contractDeployedAt: found.contractDeployedAt, -+ ownerCount: found.ownerCount, -+ topBid: found.topBid -+ } -+ }; -+ } -+ }); -+ } -+ } -+ const addNftPromises = apiNfts.map(async (nft) => { -+ const { -+ tokenId: token_id, -+ contract, -+ kind, -+ image: image_url, -+ imageSmall: image_thumbnail_url, -+ metadata: { imageOriginal: image_original_url } = {}, -+ name, -+ description, -+ attributes, -+ topBid, -+ lastSale, -+ rarityRank, -+ rarityScore, -+ collection -+ } = nft.token; -+ let ignored; -+ const { ignoredNfts } = this.getNftState(); -+ if (ignoredNfts.length) { -+ ignored = ignoredNfts.find((c) => { -+ return c.address === _controllerutils.toChecksumHexAddress.call(void 0, contract) && c.tokenId === token_id; -+ }); -+ } -+ if (!ignored) { -+ const nftMetadata = Object.assign( -+ {}, -+ { name }, -+ description && { description }, -+ image_url && { image: image_url }, -+ image_thumbnail_url && { imageThumbnail: image_thumbnail_url }, -+ image_original_url && { imageOriginal: image_original_url }, -+ kind && { standard: kind.toUpperCase() }, -+ lastSale && { lastSale }, -+ attributes && { attributes }, -+ topBid && { topBid }, -+ rarityRank && { rarityRank }, -+ rarityScore && { rarityScore }, -+ collection && { collection } -+ ); -+ await this.addNft(contract, token_id, { -+ nftMetadata, -+ userAddress, -+ source: "detected" /* Detected */, -+ networkClientId -+ }); -+ } - }); -- } -- }); -- await Promise.all(addNftPromises); -+ await Promise.all(addNftPromises); -+ } while(next = resultNftApi.continuation) -+ updateSucceeded(); -+ }catch (error) { -+ updateFailed(error); -+ throw error; -+ } finally { -+ delete this.inProcessNftFetchingUpdates[updateKey]; -+ } - } - }; - var NftDetectionController_default = NftDetectionController; -diff --git a/node_modules/@metamask/assets-controllers/dist/chunk-HDI4L2DD.js b/node_modules/@metamask/assets-controllers/dist/chunk-HDI4L2DD.js -index 76e3362..057c90e 100644 ---- a/node_modules/@metamask/assets-controllers/dist/chunk-HDI4L2DD.js -+++ b/node_modules/@metamask/assets-controllers/dist/chunk-HDI4L2DD.js -@@ -34,7 +34,7 @@ var STATIC_MAINNET_TOKEN_LIST = Object.entries( - }; - }, {}); - var controllerName = "TokenDetectionController"; --var _intervalId, _selectedAddress, _networkClientId, _tokenList, _disabled, _isUnlocked, _isDetectionEnabledFromPreferences, _isDetectionEnabledForNetwork, _getBalancesInSingleCall, _trackMetaMetricsEvent, _registerEventListeners, registerEventListeners_fn, _stopPolling, stopPolling_fn, _startPolling, startPolling_fn, _getCorrectChainIdAndNetworkClientId, getCorrectChainIdAndNetworkClientId_fn, _restartTokenDetection, restartTokenDetection_fn, _getSlicesOfTokensToDetect, getSlicesOfTokensToDetect_fn, _addDetectedTokens, addDetectedTokens_fn; -+var _intervalId, _selectedAddress, _networkClientId, _tokenList, _disabled, _isUnlocked, _isDetectionEnabledFromPreferences, _isDetectionEnabledForNetwork, _getBalancesInSingleCall, _getTokensState, _trackMetaMetricsEvent, _registerEventListeners, registerEventListeners_fn, _stopPolling, stopPolling_fn, _startPolling, startPolling_fn, _getCorrectChainIdAndNetworkClientId, getCorrectChainIdAndNetworkClientId_fn, _restartTokenDetection, restartTokenDetection_fn, _getSlicesOfTokensToDetect, getSlicesOfTokensToDetect_fn, _addDetectedTokens, addDetectedTokens_fn; - var TokenDetectionController = class extends _pollingcontroller.StaticIntervalPollingController { - /** - * Creates a TokenDetectionController instance. -@@ -52,6 +52,7 @@ var TokenDetectionController = class extends _pollingcontroller.StaticIntervalPo - interval = DEFAULT_INTERVAL, - disabled = true, - getBalancesInSingleCall, -+ getTokensState, - trackMetaMetricsEvent, - messenger - }) { -@@ -91,6 +92,7 @@ var TokenDetectionController = class extends _pollingcontroller.StaticIntervalPo - _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _isDetectionEnabledFromPreferences, void 0); - _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _isDetectionEnabledForNetwork, void 0); - _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _getBalancesInSingleCall, void 0); -+ _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _getTokensState, void 0); - _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _trackMetaMetricsEvent, void 0); - _chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _disabled, disabled); - this.setIntervalLength(interval); -@@ -101,6 +103,7 @@ var TokenDetectionController = class extends _pollingcontroller.StaticIntervalPo - _chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _isDetectionEnabledFromPreferences, defaultUseTokenDetection); - _chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _isDetectionEnabledForNetwork, _chunkNEXY7SE2js.isTokenDetectionSupportedForNetwork.call(void 0, chainId)); - _chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _getBalancesInSingleCall, getBalancesInSingleCall); -+ _chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _getTokensState, getTokensState); - _chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _trackMetaMetricsEvent, trackMetaMetricsEvent); - const { isUnlocked } = this.messagingSystem.call( - "KeyringController:getState" -@@ -165,7 +168,9 @@ var TokenDetectionController = class extends _pollingcontroller.StaticIntervalPo - if (!this.isActive) { - return; - } -- const addressAgainstWhichToDetect = selectedAddress ?? _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _selectedAddress); -+ const currentAddress = _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _selectedAddress); -+ const currentAddressChecksum = _controllerutils.toChecksumHexAddress.call(void 0, currentAddress) -+ const addressAgainstWhichToDetect = _controllerutils.toChecksumHexAddress.call(void 0, selectedAddress) ?? currentAddressChecksum; - const { chainId, networkClientId: selectedNetworkClientId } = _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _getCorrectChainIdAndNetworkClientId, getCorrectChainIdAndNetworkClientId_fn).call(this, networkClientId); - const chainIdAgainstWhichToDetect = chainId; - const networkClientIdAgainstWhichToDetect = selectedNetworkClientId; -@@ -203,6 +208,7 @@ _isDetectionEnabledFromPreferences = new WeakMap(); - _isDetectionEnabledForNetwork = new WeakMap(); - _getBalancesInSingleCall = new WeakMap(); - _trackMetaMetricsEvent = new WeakMap(); -+_getTokensState = new WeakMap(); - _registerEventListeners = new WeakSet(); - registerEventListeners_fn = function() { - this.messagingSystem.subscribe("KeyringController:unlock", async () => { -@@ -224,12 +230,10 @@ registerEventListeners_fn = function() { - ); - this.messagingSystem.subscribe( - "PreferencesController:stateChange", -- async ({ selectedAddress: newSelectedAddress, useTokenDetection }) => { -- const isSelectedAddressChanged = _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _selectedAddress) !== newSelectedAddress; -+ async ({ useTokenDetection }) => { - const isDetectionChangedFromPreferences = _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _isDetectionEnabledFromPreferences) !== useTokenDetection; -- _chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _selectedAddress, newSelectedAddress); - _chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _isDetectionEnabledFromPreferences, useTokenDetection); -- if (isSelectedAddressChanged || isDetectionChangedFromPreferences) { -+ if (isDetectionChangedFromPreferences) { - await _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _restartTokenDetection, restartTokenDetection_fn).call(this, { - selectedAddress: _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _selectedAddress) - }); -@@ -324,7 +328,7 @@ getSlicesOfTokensToDetect_fn = function({ - chainId, - selectedAddress - }) { -- const { allTokens, allDetectedTokens, allIgnoredTokens } = this.messagingSystem.call("TokensController:getState"); -+ const { allTokens, allDetectedTokens, allIgnoredTokens } = _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _getTokensState).call(this); - const [tokensAddresses, detectedTokensAddresses, ignoredTokensAddresses] = [ - allTokens, - allDetectedTokens, -diff --git a/node_modules/@metamask/assets-controllers/dist/chunk-LAU6ZDZR.js b/node_modules/@metamask/assets-controllers/dist/chunk-LAU6ZDZR.js -index d429be1..6fef22b 100644 ---- a/node_modules/@metamask/assets-controllers/dist/chunk-LAU6ZDZR.js -+++ b/node_modules/@metamask/assets-controllers/dist/chunk-LAU6ZDZR.js -@@ -33,6 +33,11 @@ var getDefaultNftState = () => { - ignoredNfts: [] - }; - }; -+ -+/** -+ * Changes regarding displayNftMedia, TokenURI and error nft metadata property are not on the core repo and needed to be refactor to be removed from the patch -+ * updateNftMetadata changes will be introduced on latest versions of changes of assets controllers, v^30 or next -+ */ - var NftController = class extends _basecontroller.BaseControllerV1 { - /** - * Creates an NftController instance. -@@ -82,7 +87,7 @@ var NftController = class extends _basecontroller.BaseControllerV1 { - selectedAddress: "", - chainId: initialChainId, - ipfsGateway: _controllerutils.IPFS_DEFAULT_GATEWAY_URL, -- openSeaEnabled: false, -+ displayNftMedia: false, - useIPFSSubdomains: true, - isIpfsGatewayEnabled: true - }; -@@ -101,16 +106,16 @@ var NftController = class extends _basecontroller.BaseControllerV1 { - async ({ - selectedAddress, - ipfsGateway, -- openSeaEnabled, -+ displayNftMedia, - isIpfsGatewayEnabled - }) => { - this.configure({ - selectedAddress, - ipfsGateway, -- openSeaEnabled, -+ displayNftMedia, - isIpfsGatewayEnabled - }); -- const needsUpdateNftMetadata = isIpfsGatewayEnabled && ipfsGateway !== "" || openSeaEnabled; -+ const needsUpdateNftMetadata = isIpfsGatewayEnabled && ipfsGateway !== "" || displayNftMedia; - if (needsUpdateNftMetadata) { - const { chainId } = this.config; - const nfts = this.state.allNfts[selectedAddress]?.[chainId] ?? []; -@@ -184,12 +189,25 @@ var NftController = class extends _basecontroller.BaseControllerV1 { - } - } - }); -+ const getCollectionParams = new URLSearchParams({ -+ chainId: "1", -+ id: `${nftInformation?.tokens[0]?.token?.collection?.id}` -+ }).toString(); -+ const collectionInformation = await _controllerutils.fetchWithErrorHandling.call(void 0, { -+ url: `${_controllerutils.NFT_API_BASE_URL}/collections?${getCollectionParams}`, -+ options: { -+ headers: { -+ Version: "1" -+ } -+ } -+ }); - if (!nftInformation?.tokens?.[0]?.token) { - return { - name: null, - description: null, - image: null, -- standard: null -+ standard: null, -+ error: 'Opensea import error', - }; - } - const { -@@ -221,7 +239,16 @@ var NftController = class extends _basecontroller.BaseControllerV1 { - }, - rarityRank && { rarityRank }, - rarity && { rarity }, -- collection && { collection } -+ (collection || collectionInformation) && { -+ collection: { -+ ...collection || {}, -+ creator: collection?.creator || collectionInformation?.collections[0].creator, -+ openseaVerificationStatus: collectionInformation?.collections[0].openseaVerificationStatus, -+ contractDeployedAt: collectionInformation?.collections[0].contractDeployedAt, -+ ownerCount: collectionInformation?.collections[0].ownerCount, -+ topBid: collectionInformation?.collections[0].topBid -+ } -+ } - ); - return nftMetadata; - } -@@ -234,7 +261,7 @@ var NftController = class extends _basecontroller.BaseControllerV1 { - * @returns Promise resolving to the current NFT name and image. - */ - async getNftInformationFromTokenURI(contractAddress, tokenId, networkClientId) { -- const { ipfsGateway, useIPFSSubdomains, isIpfsGatewayEnabled } = this.config; -+ const { ipfsGateway, useIPFSSubdomains, isIpfsGatewayEnabled, displayNftMedia, } = this.config; - const result = await this.getNftURIAndStandard( - contractAddress, - tokenId, -@@ -242,6 +269,18 @@ var NftController = class extends _basecontroller.BaseControllerV1 { - ); - let tokenURI = result[0]; - const standard = result[1]; -+ -+ if (!displayNftMedia && !isIpfsGatewayEnabled) { -+ return { -+ image: null, -+ name: null, -+ description: null, -+ standard: standard || null, -+ favorite: false, -+ tokenURI, -+ }; -+ } -+ - const hasIpfsTokenURI = tokenURI.startsWith("ipfs://"); - if (hasIpfsTokenURI && !isIpfsGatewayEnabled) { - return { -@@ -253,15 +292,15 @@ var NftController = class extends _basecontroller.BaseControllerV1 { - tokenURI: tokenURI ?? null - }; - } -- const isDisplayNFTMediaToggleEnabled = this.config.openSeaEnabled; -- if (!hasIpfsTokenURI && !isDisplayNFTMediaToggleEnabled) { -+ if (!hasIpfsTokenURI && !displayNftMedia) { - return { - image: null, - name: null, - description: null, - standard: standard || null, - favorite: false, -- tokenURI: tokenURI ?? null -+ tokenURI: tokenURI ?? null, -+ error: 'URI import error', - }; - } - if (hasIpfsTokenURI) { -@@ -288,7 +327,8 @@ var NftController = class extends _basecontroller.BaseControllerV1 { - description: null, - standard: standard || null, - favorite: false, -- tokenURI: tokenURI ?? null -+ tokenURI: tokenURI ?? null, -+ error: 'URI import error', - }; - } - } -@@ -345,15 +385,28 @@ var NftController = class extends _basecontroller.BaseControllerV1 { - networkClientId - ) - ), -- this.config.openSeaEnabled && chainId === "0x1" ? _controllerutils.safelyExecute.call(void 0, -+ this.config.displayNftMedia && chainId === "0x1" ? _controllerutils.safelyExecute.call(void 0, - () => this.getNftInformationFromApi(contractAddress, tokenId) - ) : void 0 - ]); -+ -+ if (blockchainMetadata?.error && nftApiMetadata?.error) { -+ return { -+ image: null, -+ name: null, -+ description: null, -+ standard: blockchainMetadata.standard ?? null, -+ favorite: false, -+ tokenURI: blockchainMetadata.tokenURI ?? null, -+ error: 'Both import failed', -+ }; -+ } -+ - return { - ...nftApiMetadata, - name: blockchainMetadata?.name ?? nftApiMetadata?.name ?? null, - description: blockchainMetadata?.description ?? nftApiMetadata?.description ?? null, -- image: blockchainMetadata?.image ?? nftApiMetadata?.image ?? null, -+ image: nftApiMetadata?.image ?? blockchainMetadata?.image ?? null, - standard: blockchainMetadata?.standard ?? nftApiMetadata?.standard ?? null, - tokenURI: blockchainMetadata?.tokenURI ?? null - }; -@@ -443,7 +496,8 @@ var NftController = class extends _basecontroller.BaseControllerV1 { - nftMetadata, - existingEntry - ); -- if (differentMetadata || !existingEntry.isCurrentlyOwned) { -+ const hasNewFields = _chunkNEXY7SE2js.hasNewCollectionFields(nftMetadata, existingEntry); -+ if (differentMetadata || hasNewFields || !existingEntry.isCurrentlyOwned) { - const indexToRemove = nfts.findIndex( - (nft) => nft.address.toLowerCase() === tokenAddress.toLowerCase() && nft.tokenId === tokenId - ); -@@ -472,7 +526,8 @@ var NftController = class extends _basecontroller.BaseControllerV1 { - symbol: nftContract.symbol, - tokenId: tokenId.toString(), - standard: nftMetadata.standard, -- source -+ source, -+ tokenURI: nftMetadata.tokenURI, - }); - } - return newNfts; -@@ -850,7 +905,7 @@ var NftController = class extends _basecontroller.BaseControllerV1 { - ); - } - } -- /** -+ /** - * Refetches NFT metadata and updates the state - * - * @param options - Options for refetching NFT metadata -@@ -858,11 +913,13 @@ var NftController = class extends _basecontroller.BaseControllerV1 { - * @param options.userAddress - The current user address - * @param options.networkClientId - The networkClientId that can be used to identify the network client to use for this request. - */ -- async updateNftMetadata({ -- nfts, -- userAddress = this.config.selectedAddress, -- networkClientId -- }) { -+ async updateNftMetadata({ -+ nfts, -+ userAddress = this.config.selectedAddress, -+ networkClientId -+}) { -+ const releaseLock = await this.mutex.acquire(); -+ try { - const chainId = this.getCorrectChainId({ networkClientId }); - const nftsWithChecksumAdr = nfts.map((nft) => { - return { -@@ -870,7 +927,7 @@ var NftController = class extends _basecontroller.BaseControllerV1 { - address: _controllerutils.toChecksumHexAddress.call(void 0, nft.address) - }; - }); -- const nftMetadataResults = await Promise.allSettled( -+ const nftMetadataResults = await Promise.all( - nftsWithChecksumAdr.map(async (nft) => { - const resMetadata = await this.getNftInformation( - nft.address, -@@ -883,19 +940,16 @@ var NftController = class extends _basecontroller.BaseControllerV1 { - }; - }) - ); -- const successfulNewFetchedNfts = nftMetadataResults.filter( -- (result) => result.status === "fulfilled" -- ); - const nftsWithDifferentMetadata = []; - const { allNfts } = this.state; - const stateNfts = allNfts[userAddress]?.[chainId] || []; -- successfulNewFetchedNfts.forEach((singleNft) => { -+ nftMetadataResults.forEach((singleNft) => { - const existingEntry = stateNfts.find( -- (nft) => nft.address.toLowerCase() === singleNft.value.nft.address.toLowerCase() && nft.tokenId === singleNft.value.nft.tokenId -+ (nft) => nft.address.toLowerCase() === singleNft.nft.address.toLowerCase() && nft.tokenId === singleNft.nft.tokenId - ); - if (existingEntry) { - const differentMetadata = _chunkNEXY7SE2js.compareNftMetadata.call(void 0, -- singleNft.value.newMetadata, -+ singleNft.newMetadata, - existingEntry - ); - if (differentMetadata) { -@@ -905,15 +959,13 @@ var NftController = class extends _basecontroller.BaseControllerV1 { - }); - if (nftsWithDifferentMetadata.length !== 0) { - nftsWithDifferentMetadata.forEach( -- (elm) => this.updateNft( -- elm.value.nft, -- elm.value.newMetadata, -- userAddress, -- chainId -- ) -+ (elm) => this.updateNft(elm.nft, elm.newMetadata, userAddress, chainId) - ); - } -+ } finally { -+ releaseLock(); - } -+} - /** - * Removes an NFT from the stored token list. - * -diff --git a/node_modules/@metamask/assets-controllers/dist/chunk-LD4GC7OR.js b/node_modules/@metamask/assets-controllers/dist/chunk-LD4GC7OR.js -index cd8f792..b20db8a 100644 ---- a/node_modules/@metamask/assets-controllers/dist/chunk-LD4GC7OR.js -+++ b/node_modules/@metamask/assets-controllers/dist/chunk-LD4GC7OR.js -@@ -19,7 +19,7 @@ function getDefaultTokenBalancesState() { - contractBalances: {} - }; - } --var _handle, _getERC20BalanceOf, _interval, _tokens, _disabled; -+var _handle, _getERC20BalanceOf, _interval, _tokens, _disabled, _updateInProgress; - var TokenBalancesController = class extends _basecontroller.BaseController { - /** - * Construct a Token Balances Controller. -@@ -28,6 +28,7 @@ var TokenBalancesController = class extends _basecontroller.BaseController { - * @param options.interval - Polling interval used to fetch new token balances. - * @param options.tokens - List of tokens to track balances for. - * @param options.disabled - If set to true, all tracked tokens contract balances updates are blocked. -+ * @param options.onTokensStateChange - Allows subscribing to token controller state changes. - * @param options.getERC20BalanceOf - Gets the balance of the given account at the given contract address. - * @param options.state - Initial state to set on this controller. - * @param options.messenger - The controller restricted messenger. -@@ -36,6 +37,7 @@ var TokenBalancesController = class extends _basecontroller.BaseController { - interval = DEFAULT_INTERVAL, - tokens = [], - disabled = false, -+ onTokensStateChange, - getERC20BalanceOf, - messenger, - state = {} -@@ -54,16 +56,14 @@ var TokenBalancesController = class extends _basecontroller.BaseController { - _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _interval, void 0); - _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _tokens, void 0); - _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _disabled, void 0); -+ _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _updateInProgress, false); - _chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _disabled, disabled); - _chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _interval, interval); - _chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _tokens, tokens); -- this.messagingSystem.subscribe( -- "TokensController:stateChange", -- ({ tokens: newTokens, detectedTokens }) => { -- _chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _tokens, [...newTokens, ...detectedTokens]); -- this.updateBalances(); -- } -- ); -+ onTokensStateChange(async ({ tokens: newTokens, detectedTokens }) => { -+ _chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _tokens, [...newTokens, ...detectedTokens]); -+ await this.updateBalances(); -+ }); - _chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _getERC20BalanceOf, getERC20BalanceOf); - this.poll(); - } -@@ -96,39 +96,50 @@ var TokenBalancesController = class extends _basecontroller.BaseController { - this.poll(_chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _interval)); - }, _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _interval))); - } -- /** -+ /** - * Updates balances for all tokens. - */ -- async updateBalances() { -- if (_chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _disabled)) { -+ async updateBalances() { -+ if (_chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _disabled) || _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _updateInProgress)) { - return; - } -+ _chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _updateInProgress, true); - const newContractBalances = {}; -- for (const token of _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _tokens)) { -+ const balancePromises = _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _tokens).map((token) => { - const { address } = token; - const { selectedAddress } = this.messagingSystem.call( - "PreferencesController:getState" - ); -- try { -- newContractBalances[address] = _controllerutils.toHex.call(void 0, -- await _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _getERC20BalanceOf).call(this, address, selectedAddress) -- ); -+ return _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _getERC20BalanceOf).call(this, address, selectedAddress).then((balance) => { -+ newContractBalances[address] = _controllerutils.toHex.call(void 0, balance); - token.balanceError = null; -- } catch (error) { -+ }).catch((error) => { - newContractBalances[address] = _controllerutils.toHex.call(void 0, 0); - token.balanceError = error; -- } -- } -+ }); -+ }); -+ await Promise.all(balancePromises); - this.update((state) => { - state.contractBalances = newContractBalances; - }); -+ _chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _updateInProgress, false); - } -+ /** -+ * THIS FUNCTIONS IS CURRENTLY PATCHED AND STILL NEEDS TO BE IMPLEMENTED ON THE CORE REPO -+ * Resets to the default state -+ */ -+ reset() { -+ this.update((state) => { -+ state.contractBalances = {}; -+ }); -+ } - }; - _handle = new WeakMap(); - _getERC20BalanceOf = new WeakMap(); - _interval = new WeakMap(); - _tokens = new WeakMap(); - _disabled = new WeakMap(); -+_updateInProgress = new WeakMap(); - var TokenBalancesController_default = TokenBalancesController; - - -diff --git a/node_modules/@metamask/assets-controllers/dist/chunk-MBCN3MNX.js b/node_modules/@metamask/assets-controllers/dist/chunk-MBCN3MNX.js -index b8722af..dbff48b 100644 ---- a/node_modules/@metamask/assets-controllers/dist/chunk-MBCN3MNX.js -+++ b/node_modules/@metamask/assets-controllers/dist/chunk-MBCN3MNX.js -@@ -103,10 +103,14 @@ var TokensController = class extends _basecontroller.BaseControllerV1 { - ); - this.messagingSystem.subscribe( - "NetworkController:networkDidChange", -- ({ providerConfig }) => { -+ ({selectedNetworkClientId}) => { - const { allTokens, allIgnoredTokens, allDetectedTokens } = this.state; - const { selectedAddress } = this.config; -- const { chainId } = providerConfig; -+ const selectedNetworkClient = this.messagingSystem.call( -+ 'NetworkController:getNetworkClientById', -+ selectedNetworkClientId, -+ ); -+ const { chainId } = selectedNetworkClient.configuration; - this.abortController.abort(); - this.abortController = new AbortController(); - this.configure({ chainId }); -diff --git a/node_modules/@metamask/assets-controllers/dist/chunk-NEXY7SE2.js b/node_modules/@metamask/assets-controllers/dist/chunk-NEXY7SE2.js -index 8c506d9..bd798ec 100644 ---- a/node_modules/@metamask/assets-controllers/dist/chunk-NEXY7SE2.js -+++ b/node_modules/@metamask/assets-controllers/dist/chunk-NEXY7SE2.js -@@ -27,6 +27,17 @@ function compareNftMetadata(newNftMetadata, nft) { - }, 0); - return differentValues > 0; - } -+ -+function hasNewCollectionFields( -+ newNftMetadata, -+ nft, -+) { -+ const keysNewNftMetadata = Object.keys(newNftMetadata.collection || {}); -+ const keysExistingNft = new Set(Object.keys(nft.collection || {})); -+ -+ return keysNewNftMetadata.some((key) => !keysExistingNft.has(key)); -+} -+ - var aggregatorNameByKey = { - aave: "Aave", - bancor: "Bancor", -@@ -182,7 +193,7 @@ async function fetchTokenContractExchangeRates({ - (obj, [tokenAddress, tokenPrice]) => { - return { - ...obj, -- [_controllerutils.toChecksumHexAddress.call(void 0, tokenAddress)]: tokenPrice?.value -+ [_controllerutils.toChecksumHexAddress.call(void 0, tokenAddress)]: tokenPrice?.price - }; - }, - {} -@@ -205,5 +216,5 @@ async function fetchTokenContractExchangeRates({ - - - --exports.TOKEN_PRICES_BATCH_SIZE = TOKEN_PRICES_BATCH_SIZE; exports.compareNftMetadata = compareNftMetadata; exports.formatAggregatorNames = formatAggregatorNames; exports.formatIconUrlWithProxy = formatIconUrlWithProxy; exports.SupportedTokenDetectionNetworks = SupportedTokenDetectionNetworks; exports.isTokenDetectionSupportedForNetwork = isTokenDetectionSupportedForNetwork; exports.isTokenListSupportedForNetwork = isTokenListSupportedForNetwork; exports.removeIpfsProtocolPrefix = removeIpfsProtocolPrefix; exports.getIpfsCIDv1AndPath = getIpfsCIDv1AndPath; exports.getFormattedIpfsUrl = getFormattedIpfsUrl; exports.addUrlProtocolPrefix = addUrlProtocolPrefix; exports.ethersBigNumberToBN = ethersBigNumberToBN; exports.divideIntoBatches = divideIntoBatches; exports.reduceInBatchesSerially = reduceInBatchesSerially; exports.fetchTokenContractExchangeRates = fetchTokenContractExchangeRates; -+exports.TOKEN_PRICES_BATCH_SIZE = TOKEN_PRICES_BATCH_SIZE; exports.compareNftMetadata = compareNftMetadata; exports.hasNewCollectionFields = hasNewCollectionFields; exports.formatAggregatorNames = formatAggregatorNames; exports.formatIconUrlWithProxy = formatIconUrlWithProxy; exports.SupportedTokenDetectionNetworks = SupportedTokenDetectionNetworks; exports.isTokenDetectionSupportedForNetwork = isTokenDetectionSupportedForNetwork; exports.isTokenListSupportedForNetwork = isTokenListSupportedForNetwork; exports.removeIpfsProtocolPrefix = removeIpfsProtocolPrefix; exports.getIpfsCIDv1AndPath = getIpfsCIDv1AndPath; exports.getFormattedIpfsUrl = getFormattedIpfsUrl; exports.addUrlProtocolPrefix = addUrlProtocolPrefix; exports.ethersBigNumberToBN = ethersBigNumberToBN; exports.divideIntoBatches = divideIntoBatches; exports.reduceInBatchesSerially = reduceInBatchesSerially; exports.fetchTokenContractExchangeRates = fetchTokenContractExchangeRates; - //# sourceMappingURL=chunk-NEXY7SE2.js.map -\ No newline at end of file -diff --git a/node_modules/@metamask/assets-controllers/dist/chunk-V4ZO3F2S.js b/node_modules/@metamask/assets-controllers/dist/chunk-V4ZO3F2S.js -index 0430e5c..038398c 100644 ---- a/node_modules/@metamask/assets-controllers/dist/chunk-V4ZO3F2S.js -+++ b/node_modules/@metamask/assets-controllers/dist/chunk-V4ZO3F2S.js -@@ -61,7 +61,7 @@ var AccountTrackerController = class extends _pollingcontroller.StaticIntervalPo - this.syncAccounts(chainId); - const { accounts, accountsByChainId } = this.state; - const isMultiAccountBalancesEnabled = this.getMultiAccountBalancesEnabled(); -- const accountsToUpdate = isMultiAccountBalancesEnabled ? Object.keys(accounts) : [this.getSelectedAddress()]; -+ const accountsToUpdate = isMultiAccountBalancesEnabled ? Object.keys(accounts) : [_controllerutils.toChecksumHexAddress.call(void 0, this.getSelectedAddress())]; - const accountsForChain = { ...accountsByChainId[chainId] }; - for (const address of accountsToUpdate) { - const balance = await this.getBalanceFromChain(address, ethQuery); -@@ -80,9 +80,11 @@ var AccountTrackerController = class extends _pollingcontroller.StaticIntervalPo - [chainId]: accountsForChain - } - }); -- } catch (err) { -+ } finally { -+ /** -+ * This change is not present on the core repo -+ */ - releaseLock(); -- throw err; - } - }; - this.defaultConfig = { -diff --git a/node_modules/@metamask/assets-controllers/dist/chunk-Z6TBQQE5.js b/node_modules/@metamask/assets-controllers/dist/chunk-Z6TBQQE5.js -index 2f1b66f..60cbc0f 100644 ---- a/node_modules/@metamask/assets-controllers/dist/chunk-Z6TBQQE5.js -+++ b/node_modules/@metamask/assets-controllers/dist/chunk-Z6TBQQE5.js -@@ -295,13 +295,12 @@ var CodefiTokenPricesServiceV2 = class { - (obj, tokenAddress) => { - const lowercasedTokenAddress = tokenAddress.toLowerCase(); - const marketData = addressCryptoDataMap[lowercasedTokenAddress]; -- if (marketData === void 0) { -+ // This is fixed on v31 of assets controllers -+ if (!marketData) { - return obj; - } -- const { price } = marketData; - const token = { - tokenAddress, -- value: price, - currency, - ...marketData - }; -diff --git a/node_modules/@metamask/assets-controllers/dist/types/NftController.d.ts b/node_modules/@metamask/assets-controllers/dist/types/NftController.d.ts -index 42a321a..b4554f5 100644 ---- a/node_modules/@metamask/assets-controllers/dist/types/NftController.d.ts -+++ b/node_modules/@metamask/assets-controllers/dist/types/NftController.d.ts -@@ -8,7 +8,7 @@ import type { Hex } from '@metamask/utils'; - import { EventEmitter } from 'events'; - import type { AssetsContractController } from './AssetsContractController'; - import { Source } from './constants'; --import type { Collection, Attributes, LastSale } from './NftDetectionController'; -+import type { Collection, Attributes, LastSale, TopBid } from './NftDetectionController'; - type NFTStandardType = 'ERC721' | 'ERC1155'; - type SuggestedNftMeta = { - asset: { -@@ -109,11 +109,13 @@ export interface NftMetadata { - creator?: string; - transactionId?: string; - tokenURI?: string | null; -+ error?: string; - collection?: Collection; - address?: string; -- attributes?: Attributes; -+ attributes?: Attributes[]; - lastSale?: LastSale; - rarityRank?: string; -+ topBid?: TopBid; - } - /** - * @type NftConfig -@@ -125,7 +127,7 @@ export interface NftConfig extends BaseConfig { - selectedAddress: string; - chainId: Hex; - ipfsGateway: string; -- openSeaEnabled: boolean; -+ displayNftMedia: boolean; - useIPFSSubdomains: boolean; - isIpfsGatewayEnabled: boolean; - } -@@ -350,7 +352,7 @@ export declare class NftController extends BaseControllerV1 - source: string; - }) => void; - messenger: NftControllerMessenger; -- }, config?: Partial, state?: Partial); -+ }, config?: Partial, state?: Partial); - private validateWatchNft; - private getCorrectChainId; - /** -diff --git a/node_modules/@metamask/assets-controllers/dist/types/NftDetectionController.d.ts b/node_modules/@metamask/assets-controllers/dist/types/NftDetectionController.d.ts -index 9016c5f..a24805e 100644 ---- a/node_modules/@metamask/assets-controllers/dist/types/NftDetectionController.d.ts -+++ b/node_modules/@metamask/assets-controllers/dist/types/NftDetectionController.d.ts -@@ -234,7 +234,42 @@ export type Attributes = { - topBidValue?: number | null; - createdAt?: string; - }; --export type Collection = { -+export type GetCollectionsResponse = { -+ collections: CollectionResponse[]; -+ }; -+ -+export type CollectionResponse = { -+ id?: string; -+ openseaVerificationStatus?: string; -+ contractDeployedAt?: string; -+ creator?: string; -+ ownerCount?: string; -+ topBid?: TopBid & { -+ sourceDomain?: string; -+ }; -+}; -+ -+export type FloorAskCollection = { -+ id?: string; -+ price?: Price; -+ maker?: string; -+ kind?: string; -+ validFrom?: number; -+ validUntil?: number; -+ source?: SourceCollection; -+ rawData?: Metadata; -+ isNativeOffChainCancellable?: boolean; -+}; -+ -+export type SourceCollection = { -+ id: string; -+ domain: string; -+ name: string; -+ icon: string; -+ url: string; -+}; -+ -+export type TokenCollection = { - id?: string; - name?: string; - slug?: string; -@@ -250,7 +285,11 @@ export type Collection = { - floorAskPrice?: Price; - royaltiesBps?: number; - royalties?: Royalties[]; --}; -+ floorAsk?: FloorAskCollection; -+ }; -+ -+export type Collection = TokenCollection & CollectionResponse; -+ - export type Royalties = { - bps?: number; - recipient?: string; -diff --git a/node_modules/@metamask/assets-controllers/dist/types/TokenBalancesController.d.ts b/node_modules/@metamask/assets-controllers/dist/types/TokenBalancesController.d.ts -index 52bb3ac..1f4d15d 100644 ---- a/node_modules/@metamask/assets-controllers/dist/types/TokenBalancesController.d.ts -+++ b/node_modules/@metamask/assets-controllers/dist/types/TokenBalancesController.d.ts -@@ -56,11 +56,12 @@ export declare class TokenBalancesController extends BaseController; -+ /** -+ * THIS FUNCTIONS IS CURRENTLY PATCHED AND STILL NEEDS TO BE IMPLEMENTED ON THE CORE REPO -+ * Resets to the default state -+ */ -+ reset(): void; - } - export default TokenBalancesController; - //# sourceMappingURL=TokenBalancesController.d.ts.map -\ No newline at end of file -diff --git a/node_modules/@metamask/assets-controllers/dist/types/TokenDetectionController.d.ts b/node_modules/@metamask/assets-controllers/dist/types/TokenDetectionController.d.ts -index 220d78d..795b96e 100644 ---- a/node_modules/@metamask/assets-controllers/dist/types/TokenDetectionController.d.ts -+++ b/node_modules/@metamask/assets-controllers/dist/types/TokenDetectionController.d.ts -@@ -6,7 +6,7 @@ import { StaticIntervalPollingController } from '@metamask/polling-controller'; - import type { PreferencesControllerGetStateAction, PreferencesControllerStateChangeEvent } from '@metamask/preferences-controller'; - import type { AssetsContractController } from './AssetsContractController'; - import type { GetTokenListState, TokenListMap, TokenListStateChange } from './TokenListController'; --import type { TokensControllerAddDetectedTokensAction, TokensControllerGetStateAction } from './TokensController'; -+import type { TokensControllerAddDetectedTokensAction, TokensControllerGetStateAction, TokensState } from './TokensController'; - /** - * Compare 2 given strings and return boolean - * eg: "foo" and "FOO" => true -@@ -54,11 +54,12 @@ export declare class TokenDetectionController extends StaticIntervalPollingContr - * @param options.getBalancesInSingleCall - Gets the balances of a list of tokens for the given address. - * @param options.trackMetaMetricsEvent - Sets options for MetaMetrics event tracking. - */ -- constructor({ selectedAddress, interval, disabled, getBalancesInSingleCall, trackMetaMetricsEvent, messenger, }: { -+ constructor({ selectedAddress, interval, disabled, getBalancesInSingleCall, getTokensState, trackMetaMetricsEvent, messenger, }: { - selectedAddress?: string; - interval?: number; - disabled?: boolean; - getBalancesInSingleCall: AssetsContractController['getBalancesInSingleCall']; -+ getTokensState: () => TokensState; - trackMetaMetricsEvent: (options: { - event: string; - category: string; -diff --git a/node_modules/@metamask/assets-controllers/dist/types/index.d.ts b/node_modules/@metamask/assets-controllers/dist/types/index.d.ts -index a71f4a7..df1ddc9 100644 ---- a/node_modules/@metamask/assets-controllers/dist/types/index.d.ts -+++ b/node_modules/@metamask/assets-controllers/dist/types/index.d.ts -@@ -3,7 +3,7 @@ export * from './AssetsContractController'; - export * from './CurrencyRateController'; - export * from './NftController'; - export * from './NftDetectionController'; --export type { TokenBalancesControllerMessenger, TokenBalancesControllerActions, TokenBalancesControllerGetStateAction, TokenBalancesControllerEvents, TokenBalancesControllerStateChangeEvent, } from './TokenBalancesController'; -+export type { TokenBalancesControllerMessenger, TokenBalancesControllerActions, TokenBalancesControllerGetStateAction, TokenBalancesControllerEvents, TokenBalancesControllerStateChangeEvent, TokenBalancesControllerState } from './TokenBalancesController'; - export { TokenBalancesController } from './TokenBalancesController'; - export type { TokenDetectionControllerMessenger, TokenDetectionControllerActions, TokenDetectionControllerGetStateAction, TokenDetectionControllerEvents, TokenDetectionControllerStateChangeEvent, } from './TokenDetectionController'; - export { TokenDetectionController } from './TokenDetectionController'; diff --git a/patches/@metamask+transaction-controller+35.0.0.patch b/patches/@metamask+transaction-controller+35.0.0.patch deleted file mode 100644 index f09526d72f1..00000000000 --- a/patches/@metamask+transaction-controller+35.0.0.patch +++ /dev/null @@ -1,4109 +0,0 @@ -diff --git a/node_modules/@metamask/transaction-controller/dist/.patch.txt b/node_modules/@metamask/transaction-controller/dist/.patch.txt -new file mode 100644 -index 0000000..550de56 ---- /dev/null -+++ b/node_modules/@metamask/transaction-controller/dist/.patch.txt -@@ -0,0 +1,7 @@ -+PATCH GENERATED FROM MetaMask/core branch: patch/mobile-transaction-controller-35-0-0 -+This patch backports various transaction controller features from the main branch of MetaMask/core -+Steps to update patch: -+* Create a new core branch from: patch/mobile-transaction-controller-35-0-0 -+* Run "yarn build" in the core monorepo -+* Run "yarn patch:tx " in the mobile repo -+* Once the new patch is merged, add your changes to: patch/mobile-transaction-controller-35-0-0 -diff --git a/node_modules/@metamask/transaction-controller/dist/TransactionController.js b/node_modules/@metamask/transaction-controller/dist/TransactionController.js -index bdb836a..babb928 100644 ---- a/node_modules/@metamask/transaction-controller/dist/TransactionController.js -+++ b/node_modules/@metamask/transaction-controller/dist/TransactionController.js -@@ -4,12 +4,13 @@ - - - --var _chunkS7Q622ISjs = require('./chunk-S7Q622IS.js'); -+var _chunk4JSQYVM4js = require('./chunk-4JSQYVM4.js'); - require('./chunk-PRUNMTRD.js'); --require('./chunk-74W7X6BE.js'); --require('./chunk-KT6UAKBB.js'); -+require('./chunk-QBQLNTTJ.js'); -+require('./chunk-AT7DP6HE.js'); -+require('./chunk-L7HIDFC5.js'); - require('./chunk-SD6CWFDF.js'); --require('./chunk-RXIUMVA5.js'); -+require('./chunk-MPJQFAVC.js'); - require('./chunk-ULD4JC3Q.js'); - require('./chunk-7LXE4KHV.js'); - require('./chunk-V72C4MCR.js'); -@@ -18,22 +19,22 @@ require('./chunk-NYKRCWBG.js'); - require('./chunk-WR5F34OW.js'); - require('./chunk-YVCX6Z75.js'); - require('./chunk-TJMQEH57.js'); --require('./chunk-2EU6346V.js'); -+require('./chunk-T6E2PUIA.js'); - require('./chunk-2XKEAKQG.js'); - require('./chunk-RHDPOIS4.js'); - require('./chunk-6OLJWLKK.js'); - require('./chunk-7NMV2NPM.js'); - require('./chunk-XVYXRCRL.js'); - require('./chunk-HMOSP33F.js'); --require('./chunk-ARZHJFVG.js'); --require('./chunk-QTKXIDGE.js'); --require('./chunk-C3WC4OJ3.js'); --require('./chunk-QH2H4W3N.js'); --require('./chunk-OZ6UB42C.js'); --require('./chunk-76FONEDA.js'); -+require('./chunk-DFHIQE5D.js'); -+require('./chunk-3T3U64NO.js'); -+require('./chunk-YOLCLUTK.js'); -+require('./chunk-36I5CWGQ.js'); -+require('./chunk-EVJRYRCR.js'); -+require('./chunk-WCSGEGPW.js'); - require('./chunk-UGN7PBON.js'); - require('./chunk-S6VGOPUY.js'); --require('./chunk-AYTU4HU5.js'); -+require('./chunk-M3VM35ID.js'); - require('./chunk-Z4BLTVTB.js'); - - -@@ -41,5 +42,5 @@ require('./chunk-Z4BLTVTB.js'); - - - --exports.ApprovalState = _chunkS7Q622ISjs.ApprovalState; exports.CANCEL_RATE = _chunkS7Q622ISjs.CANCEL_RATE; exports.HARDFORK = _chunkS7Q622ISjs.HARDFORK; exports.SPEED_UP_RATE = _chunkS7Q622ISjs.SPEED_UP_RATE; exports.TransactionController = _chunkS7Q622ISjs.TransactionController; -+exports.ApprovalState = _chunk4JSQYVM4js.ApprovalState; exports.CANCEL_RATE = _chunk4JSQYVM4js.CANCEL_RATE; exports.HARDFORK = _chunk4JSQYVM4js.HARDFORK; exports.SPEED_UP_RATE = _chunk4JSQYVM4js.SPEED_UP_RATE; exports.TransactionController = _chunk4JSQYVM4js.TransactionController; - //# sourceMappingURL=TransactionController.js.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/TransactionController.mjs b/node_modules/@metamask/transaction-controller/dist/TransactionController.mjs -index ac7d4c2..f7e6008 100644 ---- a/node_modules/@metamask/transaction-controller/dist/TransactionController.mjs -+++ b/node_modules/@metamask/transaction-controller/dist/TransactionController.mjs -@@ -4,12 +4,13 @@ import { - HARDFORK, - SPEED_UP_RATE, - TransactionController --} from "./chunk-UKV5HIMT.mjs"; -+} from "./chunk-PBSMFYZI.mjs"; - import "./chunk-6DDVVUJC.mjs"; --import "./chunk-EVL6KODQ.mjs"; --import "./chunk-K4KOSAGM.mjs"; -+import "./chunk-GRDPR767.mjs"; -+import "./chunk-D7MMS3XU.mjs"; -+import "./chunk-4AO3XGIE.mjs"; - import "./chunk-KG4UW4K4.mjs"; --import "./chunk-5ZEJT5SN.mjs"; -+import "./chunk-TQS7IKY6.mjs"; - import "./chunk-6B5BEO3R.mjs"; - import "./chunk-FRKQ3Z2L.mjs"; - import "./chunk-5G6OHAXI.mjs"; -@@ -18,22 +19,22 @@ import "./chunk-VEVVBHP3.mjs"; - import "./chunk-Z4GV3YQQ.mjs"; - import "./chunk-FG74Z3F5.mjs"; - import "./chunk-FMRLPVFZ.mjs"; --import "./chunk-SFFTNB2X.mjs"; -+import "./chunk-5TW7WBKX.mjs"; - import "./chunk-NOHEXQ7Y.mjs"; - import "./chunk-3ZV5YEUV.mjs"; - import "./chunk-4V4XIPCI.mjs"; - import "./chunk-EKJXGERC.mjs"; - import "./chunk-EGQCE3FK.mjs"; - import "./chunk-HQSNKCXI.mjs"; --import "./chunk-UHG2LLVV.mjs"; --import "./chunk-H2KZOK3J.mjs"; --import "./chunk-VXNPVIYL.mjs"; --import "./chunk-GNAL5HC2.mjs"; --import "./chunk-Q56I5ONX.mjs"; --import "./chunk-JXXTNVU4.mjs"; -+import "./chunk-OAXKMLDD.mjs"; -+import "./chunk-O6TBIZZ3.mjs"; -+import "./chunk-3KWZRCW5.mjs"; -+import "./chunk-UNXUIJLG.mjs"; -+import "./chunk-F7IJZOCR.mjs"; -+import "./chunk-BS5IK7HD.mjs"; - import "./chunk-O6ZZVIFH.mjs"; - import "./chunk-UQQWZT6C.mjs"; --import "./chunk-6SJYXSF3.mjs"; -+import "./chunk-KPA3AQWZ.mjs"; - import "./chunk-XUI43LEZ.mjs"; - export { - ApprovalState, -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-2EU6346V.js.map b/node_modules/@metamask/transaction-controller/dist/chunk-2EU6346V.js.map -deleted file mode 100644 -index 2fcdf92..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-2EU6346V.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/helpers/GasFeePoller.ts"],"names":[],"mappings":"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","sourcesContent":["import EthQuery from '@metamask/eth-query';\nimport type {\n FetchGasFeeEstimateOptions,\n GasFeeState,\n} from '@metamask/gas-fee-controller';\nimport type { NetworkClientId, Provider } from '@metamask/network-controller';\nimport type { Hex } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\nimport EventEmitter from 'events';\n\nimport { projectLogger } from '../logger';\nimport type {\n GasFeeEstimates,\n GasFeeFlow,\n GasFeeFlowRequest,\n Layer1GasFeeFlow,\n} from '../types';\nimport { TransactionStatus, type TransactionMeta } from '../types';\nimport { getGasFeeFlow } from '../utils/gas-flow';\nimport { getTransactionLayer1GasFee } from '../utils/layer1-gas-fee-flow';\n\nconst log = createModuleLogger(projectLogger, 'gas-fee-poller');\n\nconst INTERVAL_MILLISECONDS = 10000;\n\n/**\n * Automatically polls and updates suggested gas fees on unapproved transactions.\n */\nexport class GasFeePoller {\n hub: EventEmitter = new EventEmitter();\n\n #findNetworkClientIdByChainId: (chainId: Hex) => NetworkClientId | undefined;\n\n #gasFeeFlows: GasFeeFlow[];\n\n #getGasFeeControllerEstimates: (\n options: FetchGasFeeEstimateOptions,\n ) => Promise;\n\n #getProvider: (chainId: Hex, networkClientId?: NetworkClientId) => Provider;\n\n #getTransactions: () => TransactionMeta[];\n\n #layer1GasFeeFlows: Layer1GasFeeFlow[];\n\n #timeout: ReturnType | undefined;\n\n #running = false;\n\n /**\n * Constructs a new instance of the GasFeePoller.\n * @param options - The options for this instance.\n * @param options.findNetworkClientIdByChainId - Callback to find the network client ID by chain ID.\n * @param options.gasFeeFlows - The gas fee flows to use to obtain suitable gas fees.\n * @param options.getGasFeeControllerEstimates - Callback to obtain the default fee estimates.\n * @param options.getProvider - Callback to obtain a provider instance.\n * @param options.getTransactions - Callback to obtain the transaction data.\n * @param options.layer1GasFeeFlows - The layer 1 gas fee flows to use to obtain suitable layer 1 gas fees.\n * @param options.onStateChange - Callback to register a listener for controller state changes.\n */\n constructor({\n findNetworkClientIdByChainId,\n gasFeeFlows,\n getGasFeeControllerEstimates,\n getProvider,\n getTransactions,\n layer1GasFeeFlows,\n onStateChange,\n }: {\n findNetworkClientIdByChainId: (chainId: Hex) => NetworkClientId | undefined;\n gasFeeFlows: GasFeeFlow[];\n getGasFeeControllerEstimates: (\n options: FetchGasFeeEstimateOptions,\n ) => Promise;\n getProvider: (chainId: Hex, networkClientId?: NetworkClientId) => Provider;\n getTransactions: () => TransactionMeta[];\n layer1GasFeeFlows: Layer1GasFeeFlow[];\n onStateChange: (listener: () => void) => void;\n }) {\n this.#findNetworkClientIdByChainId = findNetworkClientIdByChainId;\n this.#gasFeeFlows = gasFeeFlows;\n this.#layer1GasFeeFlows = layer1GasFeeFlows;\n this.#getGasFeeControllerEstimates = getGasFeeControllerEstimates;\n this.#getProvider = getProvider;\n this.#getTransactions = getTransactions;\n\n onStateChange(() => {\n const unapprovedTransactions = this.#getUnapprovedTransactions();\n\n if (unapprovedTransactions.length) {\n this.#start();\n } else {\n this.#stop();\n }\n });\n }\n\n #start() {\n if (this.#running) {\n return;\n }\n\n // Intentionally not awaiting since this starts the timeout chain.\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.#onTimeout();\n\n this.#running = true;\n\n log('Started polling');\n }\n\n #stop() {\n if (!this.#running) {\n return;\n }\n\n clearTimeout(this.#timeout);\n\n this.#timeout = undefined;\n this.#running = false;\n\n log('Stopped polling');\n }\n\n async #onTimeout() {\n await this.#updateUnapprovedTransactions();\n\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n this.#timeout = setTimeout(() => this.#onTimeout(), INTERVAL_MILLISECONDS);\n }\n\n async #updateUnapprovedTransactions() {\n const unapprovedTransactions = this.#getUnapprovedTransactions();\n\n if (!unapprovedTransactions.length) {\n return;\n }\n\n log('Found unapproved transactions', unapprovedTransactions.length);\n\n const gasFeeControllerDataByChainId = await this.#getGasFeeControllerData(\n unapprovedTransactions,\n );\n\n log('Retrieved gas fee controller data', gasFeeControllerDataByChainId);\n\n await Promise.all(\n unapprovedTransactions.flatMap((tx) => {\n const { chainId } = tx;\n\n const gasFeeControllerData = gasFeeControllerDataByChainId.get(\n chainId,\n ) as GasFeeState;\n\n return this.#updateUnapprovedTransaction(tx, gasFeeControllerData);\n }),\n );\n }\n\n async #updateUnapprovedTransaction(\n transactionMeta: TransactionMeta,\n gasFeeControllerData: GasFeeState,\n ) {\n const { id } = transactionMeta;\n\n const [gasFeeEstimatesResponse, layer1GasFee] = await Promise.all([\n this.#updateTransactionGasFeeEstimates(\n transactionMeta,\n gasFeeControllerData,\n ),\n this.#updateTransactionLayer1GasFee(transactionMeta),\n ]);\n\n if (!gasFeeEstimatesResponse && !layer1GasFee) {\n return;\n }\n\n this.hub.emit('transaction-updated', {\n transactionId: id,\n gasFeeEstimates: gasFeeEstimatesResponse?.gasFeeEstimates,\n gasFeeEstimatesLoaded: gasFeeEstimatesResponse?.gasFeeEstimatesLoaded,\n layer1GasFee,\n });\n }\n\n async #updateTransactionGasFeeEstimates(\n transactionMeta: TransactionMeta,\n gasFeeControllerData: GasFeeState,\n ): Promise<\n | { gasFeeEstimates?: GasFeeEstimates; gasFeeEstimatesLoaded: boolean }\n | undefined\n > {\n const { chainId, networkClientId } = transactionMeta;\n\n const ethQuery = new EthQuery(this.#getProvider(chainId, networkClientId));\n const gasFeeFlow = getGasFeeFlow(transactionMeta, this.#gasFeeFlows);\n\n if (gasFeeFlow) {\n log(\n 'Found gas fee flow',\n gasFeeFlow.constructor.name,\n transactionMeta.id,\n );\n }\n\n const request: GasFeeFlowRequest = {\n ethQuery,\n gasFeeControllerData,\n transactionMeta,\n };\n\n let gasFeeEstimates: GasFeeEstimates | undefined;\n\n if (gasFeeFlow) {\n try {\n const response = await gasFeeFlow.getGasFees(request);\n gasFeeEstimates = response.estimates;\n } catch (error) {\n log('Failed to get suggested gas fees', transactionMeta.id, error);\n }\n }\n\n if (!gasFeeEstimates && transactionMeta.gasFeeEstimatesLoaded) {\n return undefined;\n }\n\n log('Updated gas fee estimates', {\n gasFeeEstimates,\n transaction: transactionMeta.id,\n });\n\n return { gasFeeEstimates, gasFeeEstimatesLoaded: true };\n }\n\n async #updateTransactionLayer1GasFee(\n transactionMeta: TransactionMeta,\n ): Promise {\n const { chainId, networkClientId } = transactionMeta;\n const provider = this.#getProvider(chainId, networkClientId);\n\n const layer1GasFee = await getTransactionLayer1GasFee({\n layer1GasFeeFlows: this.#layer1GasFeeFlows,\n provider,\n transactionMeta,\n });\n\n if (layer1GasFee) {\n log('Updated layer 1 gas fee', layer1GasFee, transactionMeta.id);\n }\n\n return layer1GasFee;\n }\n\n #getUnapprovedTransactions() {\n return this.#getTransactions().filter(\n (tx) => tx.status === TransactionStatus.unapproved,\n );\n }\n\n async #getGasFeeControllerData(\n transactions: TransactionMeta[],\n ): Promise> {\n const networkClientIdsByChainId = new Map();\n\n for (const transaction of transactions) {\n const { chainId, networkClientId: transactionNetworkClientId } =\n transaction;\n\n if (networkClientIdsByChainId.has(chainId)) {\n continue;\n }\n\n const networkClientId =\n transactionNetworkClientId ??\n (this.#findNetworkClientIdByChainId(chainId) as string);\n\n networkClientIdsByChainId.set(chainId, networkClientId);\n }\n\n log('Extracted network client IDs by chain ID', networkClientIdsByChainId);\n\n const entryPromises = Array.from(networkClientIdsByChainId.entries()).map(\n async ([chainId, networkClientId]) => {\n return [\n chainId,\n await this.#getGasFeeControllerEstimates({ networkClientId }),\n ] as const;\n },\n );\n\n return new Map(await Promise.all(entryPromises));\n }\n}\n"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-2XKEAKQG.js.map b/node_modules/@metamask/transaction-controller/dist/chunk-2XKEAKQG.js.map -deleted file mode 100644 -index 9af28b8..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-2XKEAKQG.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/utils/layer1-gas-fee-flow.ts"],"names":[],"mappings":";;;;;AACA,SAAS,0BAAoC;AAK7C,IAAM,MAAM,mBAAmB,eAAe,sBAAsB;AAepE,eAAsB,8BACpB,SACA;AACA,QAAM,eAAe,MAAM,2BAA2B,OAAO;AAE7D,MAAI,CAAC,cAAc;AACjB;AAAA,EACF;AAEA,QAAM,EAAE,gBAAgB,IAAI;AAE5B,kBAAgB,eAAe;AAE/B,MAAI,2BAA2B,cAAc,gBAAgB,EAAE;AACjE;AAQA,SAAS,oBACP,iBACA,mBAC8B;AAC9B,SAAO,kBAAkB;AAAA,IAAK,CAAC,qBAC7B,iBAAiB,mBAAmB,eAAe;AAAA,EACrD;AACF;AASA,eAAsB,2BAA2B;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AACF,GAAwD;AACtD,QAAM,mBAAmB;AAAA,IACvB;AAAA,IACA;AAAA,EACF;AAEA,MAAI,CAAC,kBAAkB;AACrB,WAAO;AAAA,EACT;AAEA;AAAA,IACE;AAAA,IACA,iBAAiB,YAAY;AAAA,IAC7B,gBAAgB;AAAA,EAClB;AAEA,MAAI;AACF,UAAM,EAAE,UAAU,IAAI,MAAM,iBAAiB,aAAa;AAAA,MACxD;AAAA,MACA;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT,SAAS,OAAO;AACd,QAAI,iCAAiC,gBAAgB,IAAI,KAAK;AAC9D,WAAO;AAAA,EACT;AACF","sourcesContent":["import type { Provider } from '@metamask/network-controller';\nimport { createModuleLogger, type Hex } from '@metamask/utils';\n\nimport { projectLogger } from '../logger';\nimport type { Layer1GasFeeFlow, TransactionMeta } from '../types';\n\nconst log = createModuleLogger(projectLogger, 'layer-1-gas-fee-flow');\n\nexport type UpdateLayer1GasFeeRequest = {\n layer1GasFeeFlows: Layer1GasFeeFlow[];\n provider: Provider;\n transactionMeta: TransactionMeta;\n};\n\n/**\n * Updates the given transactionMeta with the layer 1 gas fee.\n * @param request - The request to use when getting the layer 1 gas fee.\n * @param request.provider - Provider used to create a new underlying EthQuery instance\n * @param request.transactionMeta - The transaction to get the layer 1 gas fee for.\n * @param request.layer1GasFeeFlows - The layer 1 gas fee flows to search.\n */\nexport async function updateTransactionLayer1GasFee(\n request: UpdateLayer1GasFeeRequest,\n) {\n const layer1GasFee = await getTransactionLayer1GasFee(request);\n\n if (!layer1GasFee) {\n return;\n }\n\n const { transactionMeta } = request;\n\n transactionMeta.layer1GasFee = layer1GasFee;\n\n log('Updated layer 1 gas fee', layer1GasFee, transactionMeta.id);\n}\n\n/**\n * Get the layer 1 gas fee flow for a transaction.\n * @param transactionMeta - The transaction to get the layer 1 gas fee flow for.\n * @param layer1GasFeeFlows - The layer 1 gas fee flows to search.\n * @returns The layer 1 gas fee flow for the transaction, or undefined if none match.\n */\nfunction getLayer1GasFeeFlow(\n transactionMeta: TransactionMeta,\n layer1GasFeeFlows: Layer1GasFeeFlow[],\n): Layer1GasFeeFlow | undefined {\n return layer1GasFeeFlows.find((layer1GasFeeFlow) =>\n layer1GasFeeFlow.matchesTransaction(transactionMeta),\n );\n}\n\n/**\n * Get the layer 1 gas fee for a transaction and return the layer1Fee.\n * @param request - The request to use when getting the layer 1 gas fee.\n * @param request.layer1GasFeeFlows - The layer 1 gas fee flows to search.\n * @param request.provider - The provider to use to get the layer 1 gas fee.\n * @param request.transactionMeta - The transaction to get the layer 1 gas fee for.\n */\nexport async function getTransactionLayer1GasFee({\n layer1GasFeeFlows,\n provider,\n transactionMeta,\n}: UpdateLayer1GasFeeRequest): Promise {\n const layer1GasFeeFlow = getLayer1GasFeeFlow(\n transactionMeta,\n layer1GasFeeFlows,\n );\n\n if (!layer1GasFeeFlow) {\n return undefined;\n }\n\n log(\n 'Found layer 1 gas fee flow',\n layer1GasFeeFlow.constructor.name,\n transactionMeta.id,\n );\n\n try {\n const { layer1Fee } = await layer1GasFeeFlow.getLayer1Fee({\n provider,\n transactionMeta,\n });\n return layer1Fee;\n } catch (error) {\n log('Failed to get layer 1 gas fee', transactionMeta.id, error);\n return undefined;\n }\n}\n"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-QH2H4W3N.js b/node_modules/@metamask/transaction-controller/dist/chunk-36I5CWGQ.js -similarity index 96% -rename from node_modules/@metamask/transaction-controller/dist/chunk-QH2H4W3N.js -rename to node_modules/@metamask/transaction-controller/dist/chunk-36I5CWGQ.js -index 10c4797..d8ff863 100644 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-QH2H4W3N.js -+++ b/node_modules/@metamask/transaction-controller/dist/chunk-36I5CWGQ.js -@@ -1,6 +1,6 @@ - "use strict";Object.defineProperty(exports, "__esModule", {value: true}); - --var _chunkOZ6UB42Cjs = require('./chunk-OZ6UB42C.js'); -+var _chunkEVJRYRCRjs = require('./chunk-EVJRYRCR.js'); - - - var _chunkUGN7PBONjs = require('./chunk-UGN7PBON.js'); -@@ -172,7 +172,7 @@ function updateSwapTransaction(transactionMeta, { - estimatedBaseFee, - approvalTxId - }) { -- _chunkOZ6UB42Cjs.validateIfTransactionUnapproved.call(void 0, transactionMeta, "updateSwapTransaction"); -+ _chunkEVJRYRCRjs.validateIfTransactionUnapproved.call(void 0, transactionMeta, "updateSwapTransaction"); - let swapTransaction = { - sourceTokenSymbol, - destinationTokenSymbol, -@@ -203,7 +203,7 @@ function updateSwapAndSendTransaction(transactionMeta, { - swapTokenValue, - type - }) { -- _chunkOZ6UB42Cjs.validateIfTransactionUnapproved.call(void 0, transactionMeta, "updateSwapTransaction"); -+ _chunkEVJRYRCRjs.validateIfTransactionUnapproved.call(void 0, transactionMeta, "updateSwapTransaction"); - let swapTransaction = { - approvalTxId, - destinationTokenAddress, -@@ -224,7 +224,7 @@ function updateSwapAndSendTransaction(transactionMeta, { - return _lodash.merge.call(void 0, {}, transactionMeta, swapTransaction); - } - function updateSwapApprovalTransaction(transactionMeta, { type, sourceTokenSymbol }) { -- _chunkOZ6UB42Cjs.validateIfTransactionUnapproved.call(void 0, -+ _chunkEVJRYRCRjs.validateIfTransactionUnapproved.call(void 0, - transactionMeta, - "updateSwapApprovalTransaction" - ); -@@ -254,4 +254,4 @@ function sleep(ms) { - - - exports.UPDATE_POST_TX_BALANCE_TIMEOUT = UPDATE_POST_TX_BALANCE_TIMEOUT; exports.UPDATE_POST_TX_BALANCE_ATTEMPTS = UPDATE_POST_TX_BALANCE_ATTEMPTS; exports.DEFAULT_TOKEN_ADDRESS = DEFAULT_TOKEN_ADDRESS; exports.SWAPS_CHAINID_DEFAULT_TOKEN_MAP = SWAPS_CHAINID_DEFAULT_TOKEN_MAP; exports.SWAP_TRANSACTION_TYPES = SWAP_TRANSACTION_TYPES; exports.updateSwapsTransaction = updateSwapsTransaction; exports.updatePostTransactionBalance = updatePostTransactionBalance; --//# sourceMappingURL=chunk-QH2H4W3N.js.map -\ No newline at end of file -+//# sourceMappingURL=chunk-36I5CWGQ.js.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-VXNPVIYL.mjs b/node_modules/@metamask/transaction-controller/dist/chunk-3KWZRCW5.mjs -similarity index 98% -rename from node_modules/@metamask/transaction-controller/dist/chunk-VXNPVIYL.mjs -rename to node_modules/@metamask/transaction-controller/dist/chunk-3KWZRCW5.mjs -index 6c9ad0e..4dd365f 100644 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-VXNPVIYL.mjs -+++ b/node_modules/@metamask/transaction-controller/dist/chunk-3KWZRCW5.mjs -@@ -1,9 +1,9 @@ - import { - SWAP_TRANSACTION_TYPES --} from "./chunk-GNAL5HC2.mjs"; -+} from "./chunk-UNXUIJLG.mjs"; - import { - getGasFeeFlow --} from "./chunk-JXXTNVU4.mjs"; -+} from "./chunk-BS5IK7HD.mjs"; - import { - projectLogger - } from "./chunk-UQQWZT6C.mjs"; -@@ -223,4 +223,4 @@ export { - updateGasFees, - gweiDecimalToWeiHex - }; --//# sourceMappingURL=chunk-VXNPVIYL.mjs.map -\ No newline at end of file -+//# sourceMappingURL=chunk-3KWZRCW5.mjs.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-QTKXIDGE.js b/node_modules/@metamask/transaction-controller/dist/chunk-3T3U64NO.js -similarity index 87% -rename from node_modules/@metamask/transaction-controller/dist/chunk-QTKXIDGE.js -rename to node_modules/@metamask/transaction-controller/dist/chunk-3T3U64NO.js -index 7d80744..bf4a0f7 100644 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-QTKXIDGE.js -+++ b/node_modules/@metamask/transaction-controller/dist/chunk-3T3U64NO.js -@@ -1,12 +1,12 @@ - "use strict";Object.defineProperty(exports, "__esModule", {value: true}); - --var _chunkC3WC4OJ3js = require('./chunk-C3WC4OJ3.js'); -+var _chunkYOLCLUTKjs = require('./chunk-YOLCLUTK.js'); - - - var _chunkS6VGOPUYjs = require('./chunk-S6VGOPUY.js'); - - --var _chunkAYTU4HU5js = require('./chunk-AYTU4HU5.js'); -+var _chunkM3VM35IDjs = require('./chunk-M3VM35ID.js'); - - - -@@ -55,7 +55,7 @@ var DefaultGasFeeFlow = class { - }; - _getFeeMarkEstimates = new WeakSet(); - getFeeMarkEstimates_fn = function(gasFeeEstimates) { -- const levels = Object.values(_chunkAYTU4HU5js.GasFeeEstimateLevel).reduce( -+ const levels = Object.values(_chunkM3VM35IDjs.GasFeeEstimateLevel).reduce( - (result, level) => ({ - ...result, - [level]: _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _getFeeMarketLevel, getFeeMarketLevel_fn).call(this, gasFeeEstimates, level) -@@ -69,7 +69,7 @@ getFeeMarkEstimates_fn = function(gasFeeEstimates) { - }; - _getLegacyEstimates = new WeakSet(); - getLegacyEstimates_fn = function(gasFeeEstimates) { -- const levels = Object.values(_chunkAYTU4HU5js.GasFeeEstimateLevel).reduce( -+ const levels = Object.values(_chunkM3VM35IDjs.GasFeeEstimateLevel).reduce( - (result, level) => ({ - ...result, - [level]: _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _getLegacyLevel, getLegacyLevel_fn).call(this, gasFeeEstimates, level) -@@ -85,15 +85,15 @@ _getGasPriceEstimates = new WeakSet(); - getGasPriceEstimates_fn = function(gasFeeEstimates) { - return { - type: "eth_gasPrice" /* GasPrice */, -- gasPrice: _chunkC3WC4OJ3js.gweiDecimalToWeiHex.call(void 0, gasFeeEstimates.gasPrice) -+ gasPrice: _chunkYOLCLUTKjs.gweiDecimalToWeiHex.call(void 0, gasFeeEstimates.gasPrice) - }; - }; - _getFeeMarketLevel = new WeakSet(); - getFeeMarketLevel_fn = function(gasFeeEstimates, level) { -- const maxFeePerGas = _chunkC3WC4OJ3js.gweiDecimalToWeiHex.call(void 0, -+ const maxFeePerGas = _chunkYOLCLUTKjs.gweiDecimalToWeiHex.call(void 0, - gasFeeEstimates[level].suggestedMaxFeePerGas - ); -- const maxPriorityFeePerGas = _chunkC3WC4OJ3js.gweiDecimalToWeiHex.call(void 0, -+ const maxPriorityFeePerGas = _chunkYOLCLUTKjs.gweiDecimalToWeiHex.call(void 0, - gasFeeEstimates[level].suggestedMaxPriorityFeePerGas - ); - return { -@@ -103,10 +103,10 @@ getFeeMarketLevel_fn = function(gasFeeEstimates, level) { - }; - _getLegacyLevel = new WeakSet(); - getLegacyLevel_fn = function(gasFeeEstimates, level) { -- return _chunkC3WC4OJ3js.gweiDecimalToWeiHex.call(void 0, gasFeeEstimates[level]); -+ return _chunkYOLCLUTKjs.gweiDecimalToWeiHex.call(void 0, gasFeeEstimates[level]); - }; - - - - exports.DefaultGasFeeFlow = DefaultGasFeeFlow; --//# sourceMappingURL=chunk-QTKXIDGE.js.map -\ No newline at end of file -+//# sourceMappingURL=chunk-3T3U64NO.js.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-3ZV5YEUV.mjs.map b/node_modules/@metamask/transaction-controller/dist/chunk-3ZV5YEUV.mjs.map -deleted file mode 100644 -index 70a90d4..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-3ZV5YEUV.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/helpers/IncomingTransactionHelper.ts"],"sourcesContent":["import type { AccountsController } from '@metamask/accounts-controller';\nimport type { BlockTracker } from '@metamask/network-controller';\nimport type { Hex } from '@metamask/utils';\nimport { Mutex } from 'async-mutex';\nimport EventEmitter from 'events';\n\nimport { incomingTransactionsLogger as log } from '../logger';\nimport type { RemoteTransactionSource, TransactionMeta } from '../types';\n\nconst RECENT_HISTORY_BLOCK_RANGE = 10;\n\n// TODO: Replace `any` with type\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst UPDATE_CHECKS: ((txMeta: TransactionMeta) => any)[] = [\n (txMeta) => txMeta.status,\n (txMeta) => txMeta.txParams.gasUsed,\n];\n\n/**\n * Configuration options for the IncomingTransactionHelper\n *\n * @property includeTokenTransfers - Whether or not to include ERC20 token transfers.\n * @property isEnabled - Whether or not incoming transaction retrieval is enabled.\n * @property queryEntireHistory - Whether to initially query the entire transaction history or only recent blocks.\n * @property updateTransactions - Whether to update local transactions using remote transaction data.\n */\nexport type IncomingTransactionOptions = {\n includeTokenTransfers?: boolean;\n isEnabled?: () => boolean;\n queryEntireHistory?: boolean;\n updateTransactions?: boolean;\n};\n\nexport class IncomingTransactionHelper {\n hub: EventEmitter;\n\n #blockTracker: BlockTracker;\n\n #getCurrentAccount: () => ReturnType<\n AccountsController['getSelectedAccount']\n >;\n\n #getLastFetchedBlockNumbers: () => Record;\n\n #getLocalTransactions: () => TransactionMeta[];\n\n #getChainId: () => Hex;\n\n #isEnabled: () => boolean;\n\n #isRunning: boolean;\n\n #mutex = new Mutex();\n\n #onLatestBlock: (blockNumberHex: Hex) => Promise;\n\n #queryEntireHistory: boolean;\n\n #remoteTransactionSource: RemoteTransactionSource;\n\n #transactionLimit?: number;\n\n #updateTransactions: boolean;\n\n constructor({\n blockTracker,\n getCurrentAccount,\n getLastFetchedBlockNumbers,\n getLocalTransactions,\n getChainId,\n isEnabled,\n queryEntireHistory,\n remoteTransactionSource,\n transactionLimit,\n updateTransactions,\n }: {\n blockTracker: BlockTracker;\n getCurrentAccount: () => ReturnType<\n AccountsController['getSelectedAccount']\n >;\n getLastFetchedBlockNumbers: () => Record;\n getLocalTransactions?: () => TransactionMeta[];\n getChainId: () => Hex;\n isEnabled?: () => boolean;\n queryEntireHistory?: boolean;\n remoteTransactionSource: RemoteTransactionSource;\n transactionLimit?: number;\n updateTransactions?: boolean;\n }) {\n this.hub = new EventEmitter();\n\n this.#blockTracker = blockTracker;\n this.#getCurrentAccount = getCurrentAccount;\n this.#getLastFetchedBlockNumbers = getLastFetchedBlockNumbers;\n this.#getLocalTransactions = getLocalTransactions || (() => []);\n this.#getChainId = getChainId;\n this.#isEnabled = isEnabled ?? (() => true);\n this.#isRunning = false;\n this.#queryEntireHistory = queryEntireHistory ?? true;\n this.#remoteTransactionSource = remoteTransactionSource;\n this.#transactionLimit = transactionLimit;\n this.#updateTransactions = updateTransactions ?? false;\n\n // Using a property instead of a method to provide a listener reference\n // with the correct scope that we can remove later if stopped.\n this.#onLatestBlock = async (blockNumberHex: Hex) => {\n try {\n await this.update(blockNumberHex);\n } catch (error) {\n console.error('Error while checking incoming transactions', error);\n }\n };\n }\n\n start() {\n if (this.#isRunning) {\n return;\n }\n\n if (!this.#canStart()) {\n return;\n }\n\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n this.#blockTracker.addListener('latest', this.#onLatestBlock);\n this.#isRunning = true;\n }\n\n stop() {\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n this.#blockTracker.removeListener('latest', this.#onLatestBlock);\n this.#isRunning = false;\n }\n\n async update(latestBlockNumberHex?: Hex): Promise {\n const releaseLock = await this.#mutex.acquire();\n\n log('Checking for incoming transactions');\n\n try {\n if (!this.#canStart()) {\n return;\n }\n\n const latestBlockNumber = parseInt(\n latestBlockNumberHex || (await this.#blockTracker.getLatestBlock()),\n 16,\n );\n\n const additionalLastFetchedKeys =\n this.#remoteTransactionSource.getLastBlockVariations?.() ?? [];\n\n const fromBlock = this.#getFromBlock(latestBlockNumber);\n const account = this.#getCurrentAccount();\n const currentChainId = this.#getChainId();\n\n let remoteTransactions = [];\n\n try {\n remoteTransactions =\n await this.#remoteTransactionSource.fetchTransactions({\n address: account.address,\n currentChainId,\n fromBlock,\n limit: this.#transactionLimit,\n });\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n log('Error while fetching remote transactions', error);\n return;\n }\n if (!this.#updateTransactions) {\n const address = account.address.toLowerCase();\n remoteTransactions = remoteTransactions.filter(\n (tx) => tx.txParams.to?.toLowerCase() === address,\n );\n }\n\n const localTransactions = !this.#updateTransactions\n ? []\n : this.#getLocalTransactions();\n\n const newTransactions = this.#getNewTransactions(\n remoteTransactions,\n localTransactions,\n );\n\n const updatedTransactions = this.#getUpdatedTransactions(\n remoteTransactions,\n localTransactions,\n );\n\n if (newTransactions.length > 0 || updatedTransactions.length > 0) {\n this.#sortTransactionsByTime(newTransactions);\n this.#sortTransactionsByTime(updatedTransactions);\n\n log('Found incoming transactions', {\n new: newTransactions,\n updated: updatedTransactions,\n });\n\n this.hub.emit('transactions', {\n added: newTransactions,\n updated: updatedTransactions,\n });\n }\n this.#updateLastFetchedBlockNumber(\n remoteTransactions,\n additionalLastFetchedKeys,\n );\n } finally {\n releaseLock();\n }\n }\n\n #sortTransactionsByTime(transactions: TransactionMeta[]) {\n transactions.sort((a, b) => (a.time < b.time ? -1 : 1));\n }\n\n #getNewTransactions(\n remoteTxs: TransactionMeta[],\n localTxs: TransactionMeta[],\n ): TransactionMeta[] {\n return remoteTxs.filter(\n (tx) => !localTxs.some(({ hash }) => hash === tx.hash),\n );\n }\n\n #getUpdatedTransactions(\n remoteTxs: TransactionMeta[],\n localTxs: TransactionMeta[],\n ): TransactionMeta[] {\n return remoteTxs.filter((remoteTx) =>\n localTxs.some(\n (localTx) =>\n remoteTx.hash === localTx.hash &&\n this.#isTransactionOutdated(remoteTx, localTx),\n ),\n );\n }\n\n #isTransactionOutdated(\n remoteTx: TransactionMeta,\n localTx: TransactionMeta,\n ): boolean {\n return UPDATE_CHECKS.some(\n (getValue) => getValue(remoteTx) !== getValue(localTx),\n );\n }\n\n #getLastFetchedBlockNumberDec(): number {\n const additionalLastFetchedKeys =\n this.#remoteTransactionSource.getLastBlockVariations?.() ?? [];\n const lastFetchedKey = this.#getBlockNumberKey(additionalLastFetchedKeys);\n const lastFetchedBlockNumbers = this.#getLastFetchedBlockNumbers();\n return lastFetchedBlockNumbers[lastFetchedKey];\n }\n\n #getFromBlock(latestBlockNumber: number): number | undefined {\n const lastFetchedBlockNumber = this.#getLastFetchedBlockNumberDec();\n\n if (lastFetchedBlockNumber) {\n return lastFetchedBlockNumber + 1;\n }\n\n return this.#queryEntireHistory\n ? undefined\n : latestBlockNumber - RECENT_HISTORY_BLOCK_RANGE;\n }\n\n #updateLastFetchedBlockNumber(\n remoteTxs: TransactionMeta[],\n additionalKeys: string[],\n ) {\n let lastFetchedBlockNumber = -1;\n\n for (const tx of remoteTxs) {\n const currentBlockNumberValue = tx.blockNumber\n ? parseInt(tx.blockNumber, 10)\n : -1;\n\n lastFetchedBlockNumber = Math.max(\n lastFetchedBlockNumber,\n currentBlockNumberValue,\n );\n }\n\n if (lastFetchedBlockNumber === -1) {\n return;\n }\n\n const lastFetchedKey = this.#getBlockNumberKey(additionalKeys);\n const lastFetchedBlockNumbers = this.#getLastFetchedBlockNumbers();\n const previousValue = lastFetchedBlockNumbers[lastFetchedKey];\n\n if (previousValue >= lastFetchedBlockNumber) {\n return;\n }\n\n this.hub.emit('updatedLastFetchedBlockNumbers', {\n lastFetchedBlockNumbers: {\n ...lastFetchedBlockNumbers,\n [lastFetchedKey]: lastFetchedBlockNumber,\n },\n blockNumber: lastFetchedBlockNumber,\n });\n }\n\n #getBlockNumberKey(additionalKeys: string[]): string {\n const currentChainId = this.#getChainId();\n const currentAccount = this.#getCurrentAccount()?.address.toLowerCase();\n\n return [currentChainId, currentAccount, ...additionalKeys].join('#');\n }\n\n #canStart(): boolean {\n const isEnabled = this.#isEnabled();\n const currentChainId = this.#getChainId();\n\n const isSupportedNetwork =\n this.#remoteTransactionSource.isSupportedNetwork(currentChainId);\n\n return isEnabled && isSupportedNetwork;\n }\n}\n"],"mappings":"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","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-K4KOSAGM.mjs b/node_modules/@metamask/transaction-controller/dist/chunk-4AO3XGIE.mjs -similarity index 97% -rename from node_modules/@metamask/transaction-controller/dist/chunk-K4KOSAGM.mjs -rename to node_modules/@metamask/transaction-controller/dist/chunk-4AO3XGIE.mjs -index 43c4367..fec7c55 100644 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-K4KOSAGM.mjs -+++ b/node_modules/@metamask/transaction-controller/dist/chunk-4AO3XGIE.mjs -@@ -58,4 +58,4 @@ function getUrl(subdomain) { - export { - simulateTransactions - }; --//# sourceMappingURL=chunk-K4KOSAGM.mjs.map -\ No newline at end of file -+//# sourceMappingURL=chunk-4AO3XGIE.mjs.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-S7Q622IS.js b/node_modules/@metamask/transaction-controller/dist/chunk-4JSQYVM4.js -similarity index 92% -rename from node_modules/@metamask/transaction-controller/dist/chunk-S7Q622IS.js -rename to node_modules/@metamask/transaction-controller/dist/chunk-4JSQYVM4.js -index 295d59e..ca58434 100644 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-S7Q622IS.js -+++ b/node_modules/@metamask/transaction-controller/dist/chunk-4JSQYVM4.js -@@ -4,14 +4,18 @@ - var _chunkPRUNMTRDjs = require('./chunk-PRUNMTRD.js'); - - --var _chunk74W7X6BEjs = require('./chunk-74W7X6BE.js'); -+ -+var _chunkQBQLNTTJjs = require('./chunk-QBQLNTTJ.js'); -+ -+ -+var _chunkAT7DP6HEjs = require('./chunk-AT7DP6HE.js'); - - - var _chunkSD6CWFDFjs = require('./chunk-SD6CWFDF.js'); - - - --var _chunkRXIUMVA5js = require('./chunk-RXIUMVA5.js'); -+var _chunkMPJQFAVCjs = require('./chunk-MPJQFAVC.js'); - - - var _chunkULD4JC3Qjs = require('./chunk-ULD4JC3Q.js'); -@@ -38,7 +42,7 @@ var _chunkWR5F34OWjs = require('./chunk-WR5F34OW.js'); - var _chunkTJMQEH57js = require('./chunk-TJMQEH57.js'); - - --var _chunk2EU6346Vjs = require('./chunk-2EU6346V.js'); -+var _chunkT6E2PUIAjs = require('./chunk-T6E2PUIA.js'); - - - -@@ -54,17 +58,17 @@ var _chunk6OLJWLKKjs = require('./chunk-6OLJWLKK.js'); - var _chunk7NMV2NPMjs = require('./chunk-7NMV2NPM.js'); - - --var _chunkARZHJFVGjs = require('./chunk-ARZHJFVG.js'); -+var _chunkDFHIQE5Djs = require('./chunk-DFHIQE5D.js'); - - --var _chunkQTKXIDGEjs = require('./chunk-QTKXIDGE.js'); -+var _chunk3T3U64NOjs = require('./chunk-3T3U64NO.js'); - - --var _chunkC3WC4OJ3js = require('./chunk-C3WC4OJ3.js'); -+var _chunkYOLCLUTKjs = require('./chunk-YOLCLUTK.js'); - - - --var _chunkQH2H4W3Njs = require('./chunk-QH2H4W3N.js'); -+var _chunk36I5CWGQjs = require('./chunk-36I5CWGQ.js'); - - - -@@ -76,10 +80,10 @@ var _chunkQH2H4W3Njs = require('./chunk-QH2H4W3N.js'); - - - --var _chunkOZ6UB42Cjs = require('./chunk-OZ6UB42C.js'); -+var _chunkEVJRYRCRjs = require('./chunk-EVJRYRCR.js'); - - --var _chunk76FONEDAjs = require('./chunk-76FONEDA.js'); -+var _chunkWCSGEGPWjs = require('./chunk-WCSGEGPW.js'); - - - var _chunkS6VGOPUYjs = require('./chunk-S6VGOPUY.js'); -@@ -124,9 +128,14 @@ var metadata = { - lastFetchedBlockNumbers: { - persist: true, - anonymous: false -+ }, -+ submitHistory: { -+ persist: true, -+ anonymous: false - } - }; - var HARDFORK = _common.Hardfork.London; -+var SUBMIT_HISTORY_LIMIT = 100; - var CANCEL_RATE = 1.1; - var SPEED_UP_RATE = 1.1; - var controllerName = "TransactionController"; -@@ -140,10 +149,11 @@ function getDefaultTransactionControllerState() { - return { - methodData: {}, - transactions: [], -- lastFetchedBlockNumbers: {} -+ lastFetchedBlockNumbers: {}, -+ submitHistory: [] - }; - } --var _internalEvents, _incomingTransactionOptions, _pendingTransactionOptions, _transactionHistoryLimit, _isSimulationEnabled, _testGasFeeFlows, _multichainTrackingHelper, _createNonceTracker, createNonceTracker_fn, _createIncomingTransactionHelper, createIncomingTransactionHelper_fn, _createPendingTransactionTracker, createPendingTransactionTracker_fn, _checkForPendingTransactionAndStartPolling, _stopAllTracking, stopAllTracking_fn, _removeIncomingTransactionHelperListeners, removeIncomingTransactionHelperListeners_fn, _addIncomingTransactionHelperListeners, addIncomingTransactionHelperListeners_fn, _removePendingTransactionTrackerListeners, removePendingTransactionTrackerListeners_fn, _addPendingTransactionTrackerListeners, addPendingTransactionTrackerListeners_fn, _getNonceTrackerPendingTransactions, getNonceTrackerPendingTransactions_fn, _getGasFeeFlows, getGasFeeFlows_fn, _getLayer1GasFeeFlows, getLayer1GasFeeFlows_fn, _updateTransactionInternal, updateTransactionInternal_fn, _checkIfTransactionParamsUpdated, checkIfTransactionParamsUpdated_fn, _onTransactionParamsUpdated, onTransactionParamsUpdated_fn, _updateSimulationData, updateSimulationData_fn, _onGasFeePollerTransactionUpdate, onGasFeePollerTransactionUpdate_fn, _getNetworkClientId, getNetworkClientId_fn, _getGlobalNetworkClientId, getGlobalNetworkClientId_fn, _getGlobalChainId, getGlobalChainId_fn, _isCustomNetwork, isCustomNetwork_fn, _getSelectedAccount, getSelectedAccount_fn; -+var _internalEvents, _incomingTransactionOptions, _pendingTransactionOptions, _transactionHistoryLimit, _isSimulationEnabled, _testGasFeeFlows, _multichainTrackingHelper, _createNonceTracker, createNonceTracker_fn, _createIncomingTransactionHelper, createIncomingTransactionHelper_fn, _createPendingTransactionTracker, createPendingTransactionTracker_fn, _checkForPendingTransactionAndStartPolling, _stopAllTracking, stopAllTracking_fn, _removeIncomingTransactionHelperListeners, removeIncomingTransactionHelperListeners_fn, _addIncomingTransactionHelperListeners, addIncomingTransactionHelperListeners_fn, _removePendingTransactionTrackerListeners, removePendingTransactionTrackerListeners_fn, _addPendingTransactionTrackerListeners, addPendingTransactionTrackerListeners_fn, _getNonceTrackerPendingTransactions, getNonceTrackerPendingTransactions_fn, _getGasFeeFlows, getGasFeeFlows_fn, _getLayer1GasFeeFlows, getLayer1GasFeeFlows_fn, _updateTransactionInternal, updateTransactionInternal_fn, _updateSimulationData, updateSimulationData_fn, _onGasFeePollerTransactionUpdate, onGasFeePollerTransactionUpdate_fn, _getNetworkClientId, getNetworkClientId_fn, _getGlobalNetworkClientId, getGlobalNetworkClientId_fn, _getGlobalChainId, getGlobalChainId_fn, _isCustomNetwork, isCustomNetwork_fn, _getSelectedAccount, getSelectedAccount_fn, _updateSubmitHistory, updateSubmitHistory_fn; - var TransactionController = class extends _basecontroller.BaseController { - /** - * Constructs a TransactionController. -@@ -223,8 +233,6 @@ var TransactionController = class extends _basecontroller.BaseController { - _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _getGasFeeFlows); - _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _getLayer1GasFeeFlows); - _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _updateTransactionInternal); -- _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _checkIfTransactionParamsUpdated); -- _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _onTransactionParamsUpdated); - _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _updateSimulationData); - _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _onGasFeePollerTransactionUpdate); - _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _getNetworkClientId); -@@ -232,6 +240,7 @@ var TransactionController = class extends _basecontroller.BaseController { - _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _getGlobalChainId); - _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _isCustomNetwork); - _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _getSelectedAccount); -+ _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _updateSubmitHistory); - _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _internalEvents, new (0, _events.EventEmitter)()); - this.approvingTransactionIds = /* @__PURE__ */ new Set(); - this.mutex = new (0, _asyncmutex.Mutex)(); -@@ -321,7 +330,7 @@ var TransactionController = class extends _basecontroller.BaseController { - }); - this.gasFeeFlows = _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _getGasFeeFlows, getGasFeeFlows_fn).call(this); - this.layer1GasFeeFlows = _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _getLayer1GasFeeFlows, getLayer1GasFeeFlows_fn).call(this); -- const gasFeePoller = new (0, _chunk2EU6346Vjs.GasFeePoller)({ -+ const gasFeePoller = new (0, _chunkT6E2PUIAjs.GasFeePoller)({ - findNetworkClientIdByChainId, - gasFeeFlows: this.gasFeeFlows, - getGasFeeControllerEstimates: this.getGasFeeEstimates, -@@ -356,7 +365,7 @@ var TransactionController = class extends _basecontroller.BaseController { - } - failTransaction(transactionMeta, error, actionId) { - const newTransactionMeta = _lodash.merge.call(void 0, {}, transactionMeta, { -- error: _chunkOZ6UB42Cjs.normalizeTxError.call(void 0, error), -+ error: _chunkEVJRYRCRjs.normalizeTxError.call(void 0, error), - status: "failed" /* failed */ - }); - this.messagingSystem.publish(`${controllerName}:transactionFailed`, { -@@ -454,7 +463,7 @@ var TransactionController = class extends _basecontroller.BaseController { - networkClientId: requestNetworkClientId - } = {}) { - _chunkS6VGOPUYjs.projectLogger.call(void 0, "Adding transaction", txParams); -- txParams = _chunkOZ6UB42Cjs.normalizeTransactionParams.call(void 0, txParams); -+ txParams = _chunkEVJRYRCRjs.normalizeTransactionParams.call(void 0, txParams); - if (requestNetworkClientId && !_chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _multichainTrackingHelper).has(requestNetworkClientId)) { - throw new Error( - "The networkClientId for this transaction could not be found" -@@ -464,9 +473,9 @@ var TransactionController = class extends _basecontroller.BaseController { - const isEIP1559Compatible = await this.getEIP1559Compatibility( - networkClientId - ); -- _chunkRXIUMVA5js.validateTxParams.call(void 0, txParams, isEIP1559Compatible); -- if (origin) { -- await _chunkRXIUMVA5js.validateTransactionOrigin.call(void 0, -+ _chunkMPJQFAVCjs.validateTxParams.call(void 0, txParams, isEIP1559Compatible); -+ if (origin && this.getPermittedAccounts) { -+ await _chunkMPJQFAVCjs.validateTransactionOrigin.call(void 0, - await this.getPermittedAccounts(origin), - _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _getSelectedAccount, getSelectedAccount_fn).call(this).address, - txParams.from, -@@ -516,7 +525,7 @@ var TransactionController = class extends _basecontroller.BaseController { - if (!this.isHistoryDisabled) { - addedTransactionMeta = _chunkQP75SWIQjs.addInitialHistorySnapshot.call(void 0, addedTransactionMeta); - } -- addedTransactionMeta = _chunkQH2H4W3Njs.updateSwapsTransaction.call(void 0, -+ addedTransactionMeta = _chunk36I5CWGQjs.updateSwapsTransaction.call(void 0, - addedTransactionMeta, - transactionType, - swaps, -@@ -595,8 +604,8 @@ var TransactionController = class extends _basecontroller.BaseController { - return; - } - if (gasValues) { -- gasValues = _chunkOZ6UB42Cjs.normalizeGasFeeValues.call(void 0, gasValues); -- _chunkOZ6UB42Cjs.validateGasValues.call(void 0, gasValues); -+ gasValues = _chunkEVJRYRCRjs.normalizeGasFeeValues.call(void 0, gasValues); -+ _chunkEVJRYRCRjs.validateGasValues.call(void 0, gasValues); - } - _chunkS6VGOPUYjs.projectLogger.call(void 0, "Creating cancel transaction", transactionId, gasValues); - const transactionMeta = this.getTransaction(transactionId); -@@ -606,26 +615,26 @@ var TransactionController = class extends _basecontroller.BaseController { - if (!this.sign) { - throw new Error("No sign method defined."); - } -- const minGasPrice = _chunkOZ6UB42Cjs.getIncreasedPriceFromExisting.call(void 0, -+ const minGasPrice = _chunkEVJRYRCRjs.getIncreasedPriceFromExisting.call(void 0, - transactionMeta.txParams.gasPrice, - CANCEL_RATE - ); -- const gasPriceFromValues = _chunkOZ6UB42Cjs.isGasPriceValue.call(void 0, gasValues) && gasValues.gasPrice; -- const newGasPrice = gasPriceFromValues && _chunkOZ6UB42Cjs.validateMinimumIncrease.call(void 0, gasPriceFromValues, minGasPrice) || minGasPrice; -+ const gasPriceFromValues = _chunkEVJRYRCRjs.isGasPriceValue.call(void 0, gasValues) && gasValues.gasPrice; -+ const newGasPrice = gasPriceFromValues && _chunkEVJRYRCRjs.validateMinimumIncrease.call(void 0, gasPriceFromValues, minGasPrice) || minGasPrice; - const existingMaxFeePerGas = transactionMeta.txParams?.maxFeePerGas; -- const minMaxFeePerGas = _chunkOZ6UB42Cjs.getIncreasedPriceFromExisting.call(void 0, -+ const minMaxFeePerGas = _chunkEVJRYRCRjs.getIncreasedPriceFromExisting.call(void 0, - existingMaxFeePerGas, - CANCEL_RATE - ); -- const maxFeePerGasValues = _chunkOZ6UB42Cjs.isFeeMarketEIP1559Values.call(void 0, gasValues) && gasValues.maxFeePerGas; -- const newMaxFeePerGas = maxFeePerGasValues && _chunkOZ6UB42Cjs.validateMinimumIncrease.call(void 0, maxFeePerGasValues, minMaxFeePerGas) || existingMaxFeePerGas && minMaxFeePerGas; -+ const maxFeePerGasValues = _chunkEVJRYRCRjs.isFeeMarketEIP1559Values.call(void 0, gasValues) && gasValues.maxFeePerGas; -+ const newMaxFeePerGas = maxFeePerGasValues && _chunkEVJRYRCRjs.validateMinimumIncrease.call(void 0, maxFeePerGasValues, minMaxFeePerGas) || existingMaxFeePerGas && minMaxFeePerGas; - const existingMaxPriorityFeePerGas = transactionMeta.txParams?.maxPriorityFeePerGas; -- const minMaxPriorityFeePerGas = _chunkOZ6UB42Cjs.getIncreasedPriceFromExisting.call(void 0, -+ const minMaxPriorityFeePerGas = _chunkEVJRYRCRjs.getIncreasedPriceFromExisting.call(void 0, - existingMaxPriorityFeePerGas, - CANCEL_RATE - ); -- const maxPriorityFeePerGasValues = _chunkOZ6UB42Cjs.isFeeMarketEIP1559Values.call(void 0, gasValues) && gasValues.maxPriorityFeePerGas; -- const newMaxPriorityFeePerGas = maxPriorityFeePerGasValues && _chunkOZ6UB42Cjs.validateMinimumIncrease.call(void 0, -+ const maxPriorityFeePerGasValues = _chunkEVJRYRCRjs.isFeeMarketEIP1559Values.call(void 0, gasValues) && gasValues.maxPriorityFeePerGas; -+ const newMaxPriorityFeePerGas = maxPriorityFeePerGasValues && _chunkEVJRYRCRjs.validateMinimumIncrease.call(void 0, - maxPriorityFeePerGasValues, - minMaxPriorityFeePerGas - ) || existingMaxPriorityFeePerGas && minMaxPriorityFeePerGas; -@@ -669,7 +678,9 @@ var TransactionController = class extends _basecontroller.BaseController { - const hash = await this.publishTransactionForRetry( - ethQuery, - rawTx, -- transactionMeta -+ newTxParams, -+ transactionMeta, -+ "cancel" - ); - const cancelTransactionMeta = { - actionId, -@@ -719,8 +730,8 @@ var TransactionController = class extends _basecontroller.BaseController { - return; - } - if (gasValues) { -- gasValues = _chunkOZ6UB42Cjs.normalizeGasFeeValues.call(void 0, gasValues); -- _chunkOZ6UB42Cjs.validateGasValues.call(void 0, gasValues); -+ gasValues = _chunkEVJRYRCRjs.normalizeGasFeeValues.call(void 0, gasValues); -+ _chunkEVJRYRCRjs.validateGasValues.call(void 0, gasValues); - } - _chunkS6VGOPUYjs.projectLogger.call(void 0, "Creating speed up transaction", transactionId, gasValues); - const transactionMeta = this.getTransaction(transactionId); -@@ -730,26 +741,26 @@ var TransactionController = class extends _basecontroller.BaseController { - if (!this.sign) { - throw new Error("No sign method defined."); - } -- const minGasPrice = _chunkOZ6UB42Cjs.getIncreasedPriceFromExisting.call(void 0, -+ const minGasPrice = _chunkEVJRYRCRjs.getIncreasedPriceFromExisting.call(void 0, - transactionMeta.txParams.gasPrice, - SPEED_UP_RATE - ); -- const gasPriceFromValues = _chunkOZ6UB42Cjs.isGasPriceValue.call(void 0, gasValues) && gasValues.gasPrice; -- const newGasPrice = gasPriceFromValues && _chunkOZ6UB42Cjs.validateMinimumIncrease.call(void 0, gasPriceFromValues, minGasPrice) || minGasPrice; -+ const gasPriceFromValues = _chunkEVJRYRCRjs.isGasPriceValue.call(void 0, gasValues) && gasValues.gasPrice; -+ const newGasPrice = gasPriceFromValues && _chunkEVJRYRCRjs.validateMinimumIncrease.call(void 0, gasPriceFromValues, minGasPrice) || minGasPrice; - const existingMaxFeePerGas = transactionMeta.txParams?.maxFeePerGas; -- const minMaxFeePerGas = _chunkOZ6UB42Cjs.getIncreasedPriceFromExisting.call(void 0, -+ const minMaxFeePerGas = _chunkEVJRYRCRjs.getIncreasedPriceFromExisting.call(void 0, - existingMaxFeePerGas, - SPEED_UP_RATE - ); -- const maxFeePerGasValues = _chunkOZ6UB42Cjs.isFeeMarketEIP1559Values.call(void 0, gasValues) && gasValues.maxFeePerGas; -- const newMaxFeePerGas = maxFeePerGasValues && _chunkOZ6UB42Cjs.validateMinimumIncrease.call(void 0, maxFeePerGasValues, minMaxFeePerGas) || existingMaxFeePerGas && minMaxFeePerGas; -+ const maxFeePerGasValues = _chunkEVJRYRCRjs.isFeeMarketEIP1559Values.call(void 0, gasValues) && gasValues.maxFeePerGas; -+ const newMaxFeePerGas = maxFeePerGasValues && _chunkEVJRYRCRjs.validateMinimumIncrease.call(void 0, maxFeePerGasValues, minMaxFeePerGas) || existingMaxFeePerGas && minMaxFeePerGas; - const existingMaxPriorityFeePerGas = transactionMeta.txParams?.maxPriorityFeePerGas; -- const minMaxPriorityFeePerGas = _chunkOZ6UB42Cjs.getIncreasedPriceFromExisting.call(void 0, -+ const minMaxPriorityFeePerGas = _chunkEVJRYRCRjs.getIncreasedPriceFromExisting.call(void 0, - existingMaxPriorityFeePerGas, - SPEED_UP_RATE - ); -- const maxPriorityFeePerGasValues = _chunkOZ6UB42Cjs.isFeeMarketEIP1559Values.call(void 0, gasValues) && gasValues.maxPriorityFeePerGas; -- const newMaxPriorityFeePerGas = maxPriorityFeePerGasValues && _chunkOZ6UB42Cjs.validateMinimumIncrease.call(void 0, -+ const maxPriorityFeePerGasValues = _chunkEVJRYRCRjs.isFeeMarketEIP1559Values.call(void 0, gasValues) && gasValues.maxPriorityFeePerGas; -+ const newMaxPriorityFeePerGas = maxPriorityFeePerGasValues && _chunkEVJRYRCRjs.validateMinimumIncrease.call(void 0, - maxPriorityFeePerGasValues, - minMaxPriorityFeePerGas - ) || existingMaxPriorityFeePerGas && minMaxPriorityFeePerGas; -@@ -787,7 +798,9 @@ var TransactionController = class extends _basecontroller.BaseController { - const hash = await this.publishTransactionForRetry( - ethQuery, - rawTx, -- transactionMeta -+ txParams, -+ transactionMeta, -+ _controllerutils.ORIGIN_METAMASK - ); - const baseTransactionMeta = { - ...transactionMetaWithRsv, -@@ -989,7 +1002,7 @@ var TransactionController = class extends _basecontroller.BaseController { - `Cannot update send flow history as no transaction metadata found` - ); - } -- _chunkOZ6UB42Cjs.validateIfTransactionUnapproved.call(void 0, -+ _chunkEVJRYRCRjs.validateIfTransactionUnapproved.call(void 0, - transactionMeta, - "updateTransactionSendFlowHistory" - ); -@@ -1043,7 +1056,7 @@ var TransactionController = class extends _basecontroller.BaseController { - `Cannot update transaction as no transaction metadata found` - ); - } -- _chunkOZ6UB42Cjs.validateIfTransactionUnapproved.call(void 0, -+ _chunkEVJRYRCRjs.validateIfTransactionUnapproved.call(void 0, - transactionMeta, - "updateTransactionGasFees" - ); -@@ -1094,7 +1107,7 @@ var TransactionController = class extends _basecontroller.BaseController { - `Cannot update transaction as no transaction metadata found` - ); - } -- _chunkOZ6UB42Cjs.validateIfTransactionUnapproved.call(void 0, transactionMeta, "updatePreviousGasParams"); -+ _chunkEVJRYRCRjs.validateIfTransactionUnapproved.call(void 0, transactionMeta, "updatePreviousGasParams"); - const transactionPreviousGas = { - previousGas: { - gasLimit, -@@ -1147,7 +1160,7 @@ var TransactionController = class extends _basecontroller.BaseController { - `Cannot update editable params as no transaction metadata found` - ); - } -- _chunkOZ6UB42Cjs.validateIfTransactionUnapproved.call(void 0, transactionMeta, "updateEditableParams"); -+ _chunkEVJRYRCRjs.validateIfTransactionUnapproved.call(void 0, transactionMeta, "updateEditableParams"); - const editableParams = { - txParams: { - data, -@@ -1282,7 +1295,7 @@ var TransactionController = class extends _basecontroller.BaseController { - updatedTransactionMeta.submittedTime = (/* @__PURE__ */ new Date()).getTime(); - } - if (updatedTransactionMeta.status === "failed" /* failed */) { -- updatedTransactionMeta.error = _chunkOZ6UB42Cjs.normalizeTxError.call(void 0, new Error(errorMessage)); -+ updatedTransactionMeta.error = _chunkEVJRYRCRjs.normalizeTxError.call(void 0, new Error(errorMessage)); - } - this.updateTransaction( - updatedTransactionMeta, -@@ -1396,7 +1409,7 @@ var TransactionController = class extends _basecontroller.BaseController { - chainId, - networkClientId - }; -- const gasFeeFlow = _chunk76FONEDAjs.getGasFeeFlow.call(void 0, -+ const gasFeeFlow = _chunkWCSGEGPWjs.getGasFeeFlow.call(void 0, - transactionMeta, - this.gasFeeFlows - ); -@@ -1443,8 +1456,8 @@ var TransactionController = class extends _basecontroller.BaseController { - if (!this.sign) { - throw new Error("No sign method defined."); - } -- const normalizedTransactionParams = _chunkOZ6UB42Cjs.normalizeTransactionParams.call(void 0, transactionParams); -- const type = _chunkOZ6UB42Cjs.isEIP1559Transaction.call(void 0, normalizedTransactionParams) ? "0x2" /* feeMarket */ : "0x0" /* legacy */; -+ const normalizedTransactionParams = _chunkEVJRYRCRjs.normalizeTransactionParams.call(void 0, transactionParams); -+ const type = _chunkEVJRYRCRjs.isEIP1559Transaction.call(void 0, normalizedTransactionParams) ? "0x2" /* feeMarket */ : "0x0" /* legacy */; - const updatedTransactionParams = { - ...normalizedTransactionParams, - type, -@@ -1517,7 +1530,7 @@ var TransactionController = class extends _basecontroller.BaseController { - isCustomNetwork, - txMeta: transactionMeta - }); -- await _chunkC3WC4OJ3js.updateGasFees.call(void 0, { -+ await _chunkYOLCLUTKjs.updateGasFees.call(void 0, { - eip1559: isEIP1559Compatible, - ethQuery, - gasFeeFlows: this.gasFeeFlows, -@@ -1678,7 +1691,7 @@ var TransactionController = class extends _basecontroller.BaseController { - nonce, - chainId, - gasLimit: txParams.gas, -- ..._chunkOZ6UB42Cjs.isEIP1559Transaction.call(void 0, txParams) && { -+ ..._chunkEVJRYRCRjs.isEIP1559Transaction.call(void 0, txParams) && { - type: "0x2" /* feeMarket */ - } - }; -@@ -1717,7 +1730,13 @@ var TransactionController = class extends _basecontroller.BaseController { - rawTx - ); - if (hash === void 0) { -- hash = await this.publishTransaction(ethQuery, rawTx); -+ hash = await this.publishTransaction( -+ ethQuery, -+ rawTx, -+ transactionMeta.txParams, -+ transactionMeta.chainId, -+ transactionMeta.origin -+ ); - } - _chunkS6VGOPUYjs.projectLogger.call(void 0, "Publish successful", hash); - transactionMeta = _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _updateTransactionInternal, updateTransactionInternal_fn).call(this, { -@@ -1749,8 +1768,12 @@ var TransactionController = class extends _basecontroller.BaseController { - cleanupTasks.forEach((task) => task()); - } - } -- async publishTransaction(ethQuery, rawTransaction) { -- return await _controllerutils.query.call(void 0, ethQuery, "sendRawTransaction", [rawTransaction]); -+ async publishTransaction(ethQuery, rawTransaction, transaction, chainId, origin) { -+ const transactionHash = await _controllerutils.query.call(void 0, ethQuery, "sendRawTransaction", [ -+ rawTransaction -+ ]); -+ _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _updateSubmitHistory, updateSubmitHistory_fn).call(this, rawTransaction, transactionHash, transaction, chainId, origin); -+ return transactionHash; - } - /** - * Cancels a transaction based on its ID by setting its status to "rejected" -@@ -2188,7 +2211,7 @@ var TransactionController = class extends _basecontroller.BaseController { - networkClientId: transactionMeta.networkClientId, - chainId: transactionMeta.chainId - }); -- const { updatedTransactionMeta, approvalTransactionMeta } = await _chunkQH2H4W3Njs.updatePostTransactionBalance.call(void 0, transactionMeta, { -+ const { updatedTransactionMeta, approvalTransactionMeta } = await _chunk36I5CWGQjs.updatePostTransactionBalance.call(void 0, transactionMeta, { - ethQuery, - getTransaction: this.getTransaction.bind(this), - updateTransaction: this.updateTransaction.bind(this) -@@ -2204,10 +2227,15 @@ var TransactionController = class extends _basecontroller.BaseController { - _chunkS6VGOPUYjs.projectLogger.call(void 0, "Error while updating post transaction balance", error); - } - } -- async publishTransactionForRetry(ethQuery, rawTx, transactionMeta) { -+ async publishTransactionForRetry(ethQuery, rawTx, params, transactionMeta, origin) { - try { -- const hash = await this.publishTransaction(ethQuery, rawTx); -- return hash; -+ return await this.publishTransaction( -+ ethQuery, -+ rawTx, -+ params, -+ transactionMeta.chainId, -+ origin -+ ); - } catch (error) { - if (this.isTransactionAlreadyConfirmedError(error)) { - await this.pendingTransactionTracker.forceCheckTransaction( -@@ -2248,7 +2276,7 @@ createNonceTracker_fn = function({ - // TODO: Fix types - // eslint-disable-next-line @typescript-eslint/no-explicit-any - provider, -- // @ts-expect-error TODO: Fix types -+ // @ts-expect-error - TODO: Fix types - blockTracker, - getPendingTransactions: _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _getNonceTrackerPendingTransactions, getNonceTrackerPendingTransactions_fn).bind( - this, -@@ -2270,6 +2298,7 @@ createIncomingTransactionHelper_fn = function({ - blockTracker, - getCurrentAccount: () => _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _getSelectedAccount, getSelectedAccount_fn).call(this), - getLastFetchedBlockNumbers: () => this.state.lastFetchedBlockNumbers, -+ getLocalTransactions: () => this.state.transactions, - getChainId: chainId ? () => chainId : this.getChainId.bind(this), - isEnabled: _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _incomingTransactionOptions).isEnabled, - queryEntireHistory: _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _incomingTransactionOptions).queryEntireHistory, -@@ -2300,7 +2329,7 @@ createPendingTransactionTracker_fn = function({ - getGlobalLock: () => _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _multichainTrackingHelper).acquireNonceLockForChainIdKey({ - chainId: getChainId() - }), -- publishTransaction: this.publishTransaction.bind(this), -+ publishTransaction: (_ethQuery, rawTx) => _controllerutils.query.call(void 0, _ethQuery, "sendRawTransaction", [rawTx]), - hooks: { - beforeCheckPendingTransaction: this.beforeCheckPendingTransaction.bind(this), - beforePublish: this.beforePublish.bind(this) -@@ -2380,7 +2409,7 @@ getGasFeeFlows_fn = function() { - if (_chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _testGasFeeFlows)) { - return [new (0, _chunkTJMQEH57js.TestGasFeeFlow)()]; - } -- return [new (0, _chunkARZHJFVGjs.LineaGasFeeFlow)(), new (0, _chunkQTKXIDGEjs.DefaultGasFeeFlow)()]; -+ return [new (0, _chunkDFHIQE5Djs.LineaGasFeeFlow)(), new (0, _chunk3T3U64NOjs.DefaultGasFeeFlow)()]; - }; - _getLayer1GasFeeFlows = new WeakSet(); - getLayer1GasFeeFlows_fn = function() { -@@ -2390,20 +2419,27 @@ _updateTransactionInternal = new WeakSet(); - updateTransactionInternal_fn = function({ - transactionId, - note, -- skipHistory -+ skipHistory, -+ skipResimulateCheck - }, callback) { -- let updatedTransactionParams = []; -+ let resimulateResponse; - this.update((state) => { - const index = state.transactions.findIndex( - ({ id }) => id === transactionId - ); - let transactionMeta2 = state.transactions[index]; -+ const originalTransactionMeta = _lodash.cloneDeep.call(void 0, transactionMeta2); - transactionMeta2 = callback(transactionMeta2) ?? transactionMeta2; -- transactionMeta2.txParams = _chunkOZ6UB42Cjs.normalizeTransactionParams.call(void 0, -+ transactionMeta2.txParams = _chunkEVJRYRCRjs.normalizeTransactionParams.call(void 0, - transactionMeta2.txParams - ); -- _chunkRXIUMVA5js.validateTxParams.call(void 0, transactionMeta2.txParams); -- updatedTransactionParams = _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _checkIfTransactionParamsUpdated, checkIfTransactionParamsUpdated_fn).call(this, transactionMeta2); -+ _chunkMPJQFAVCjs.validateTxParams.call(void 0, transactionMeta2.txParams); -+ if (!skipResimulateCheck && _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _isSimulationEnabled).call(this)) { -+ resimulateResponse = _chunkQBQLNTTJjs.shouldResimulate.call(void 0, -+ originalTransactionMeta, -+ transactionMeta2 -+ ); -+ } - const shouldSkipHistory = this.isHistoryDisabled || skipHistory; - if (!shouldSkipHistory) { - transactionMeta2 = _chunkQP75SWIQjs.updateTransactionHistory.call(void 0, -@@ -2416,43 +2452,26 @@ updateTransactionInternal_fn = function({ - const transactionMeta = this.getTransaction( - transactionId - ); -- if (updatedTransactionParams.length > 0) { -- _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _onTransactionParamsUpdated, onTransactionParamsUpdated_fn).call(this, transactionMeta, updatedTransactionParams); -+ if (resimulateResponse?.resimulate) { -+ _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _updateSimulationData, updateSimulationData_fn).call(this, transactionMeta, { -+ blockTime: resimulateResponse.blockTime -+ }).catch((error) => { -+ _chunkS6VGOPUYjs.projectLogger.call(void 0, "Error during re-simulation", error); -+ throw error; -+ }); - } - return transactionMeta; - }; --_checkIfTransactionParamsUpdated = new WeakSet(); --checkIfTransactionParamsUpdated_fn = function(newTransactionMeta) { -- const { id: transactionId, txParams: newParams } = newTransactionMeta; -- const originalParams = this.getTransaction(transactionId)?.txParams; -- if (!originalParams || _lodash.isEqual.call(void 0, originalParams, newParams)) { -- return []; -- } -- const params = Object.keys(newParams); -- const updatedProperties = params.filter( -- (param) => newParams[param] !== originalParams[param] -- ); -- _chunkS6VGOPUYjs.projectLogger.call(void 0, -- "Transaction parameters have been updated", -- transactionId, -- updatedProperties, -- originalParams, -- newParams -- ); -- return updatedProperties; --}; --_onTransactionParamsUpdated = new WeakSet(); --onTransactionParamsUpdated_fn = function(transactionMeta, updatedParams) { -- if (["to", "value", "data"].some( -- (param) => updatedParams.includes(param) -- )) { -- _chunkS6VGOPUYjs.projectLogger.call(void 0, "Updating simulation data due to transaction parameter update"); -- _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _updateSimulationData, updateSimulationData_fn).call(this, transactionMeta); -- } --}; - _updateSimulationData = new WeakSet(); --updateSimulationData_fn = async function(transactionMeta) { -- const { id: transactionId, chainId, txParams } = transactionMeta; -+updateSimulationData_fn = async function(transactionMeta, { -+ blockTime -+} = {}) { -+ const { -+ id: transactionId, -+ chainId, -+ txParams, -+ simulationData: prevSimulationData -+ } = transactionMeta; - const { from, to, value, data } = txParams; - let simulationData = { - error: { -@@ -2465,13 +2484,24 @@ updateSimulationData_fn = async function(transactionMeta) { - _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _updateTransactionInternal, updateTransactionInternal_fn).call(this, { transactionId, skipHistory: true }, (txMeta) => { - txMeta.simulationData = void 0; - }); -- simulationData = await _chunk74W7X6BEjs.getSimulationData.call(void 0, { -- chainId, -- from, -- to, -- value, -- data -- }); -+ simulationData = await _chunkAT7DP6HEjs.getSimulationData.call(void 0, -+ { -+ chainId, -+ from, -+ to, -+ value, -+ data -+ }, -+ { -+ blockTime -+ } -+ ); -+ if (blockTime && prevSimulationData && _chunkQBQLNTTJjs.hasSimulationDataChanged.call(void 0, prevSimulationData, simulationData)) { -+ simulationData = { -+ ...simulationData, -+ isUpdatedAfterSecurityCheck: true -+ }; -+ } - } - const finalTransactionMeta = this.getTransaction(transactionId); - if (!finalTransactionMeta) { -@@ -2484,7 +2514,8 @@ updateSimulationData_fn = async function(transactionMeta) { - } - _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _updateTransactionInternal, updateTransactionInternal_fn).call(this, { - transactionId, -- note: "TransactionController#updateSimulationData - Update simulation data" -+ note: "TransactionController#updateSimulationData - Update simulation data", -+ skipResimulateCheck: Boolean(blockTime) - }, (txMeta) => { - txMeta.simulationData = simulationData; - }); -@@ -2555,6 +2586,32 @@ _getSelectedAccount = new WeakSet(); - getSelectedAccount_fn = function() { - return this.messagingSystem.call("AccountsController:getSelectedAccount"); - }; -+_updateSubmitHistory = new WeakSet(); -+updateSubmitHistory_fn = function(rawTransaction, hash, transaction, chainId, origin) { -+ const { networkConfigurations, selectedNetworkClientId } = this.getNetworkState(); -+ const networkConfiguration = networkConfigurations[selectedNetworkClientId]; -+ const networkUrl = networkConfiguration?.rpcUrl; -+ const networkType = networkConfiguration?.nickname || selectedNetworkClientId; -+ const submitHistoryEntry = { -+ chainId, -+ hash, -+ networkType, -+ networkUrl, -+ origin, -+ time: Date.now(), -+ transaction, -+ rawTransaction -+ }; -+ _chunkS6VGOPUYjs.projectLogger.call(void 0, "Updating submit history", submitHistoryEntry); -+ this.update((state) => { -+ const { submitHistory: currentSubmitHistory } = state; -+ const newSubmitHistory = [submitHistoryEntry, ...currentSubmitHistory]; -+ if (newSubmitHistory.length > SUBMIT_HISTORY_LIMIT) { -+ newSubmitHistory.pop(); -+ } -+ state.submitHistory = newSubmitHistory; -+ }); -+}; - - - -@@ -2563,4 +2620,4 @@ getSelectedAccount_fn = function() { - - - exports.HARDFORK = HARDFORK; exports.CANCEL_RATE = CANCEL_RATE; exports.SPEED_UP_RATE = SPEED_UP_RATE; exports.ApprovalState = ApprovalState; exports.TransactionController = TransactionController; --//# sourceMappingURL=chunk-S7Q622IS.js.map -\ No newline at end of file -+//# sourceMappingURL=chunk-4JSQYVM4.js.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-4V4XIPCI.mjs.map b/node_modules/@metamask/transaction-controller/dist/chunk-4V4XIPCI.mjs.map -deleted file mode 100644 -index 4f02dc7..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-4V4XIPCI.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/helpers/MultichainTrackingHelper.ts"],"sourcesContent":["import EthQuery from '@metamask/eth-query';\nimport type {\n NetworkClientId,\n NetworkController,\n NetworkClient,\n BlockTracker,\n Provider,\n NetworkControllerStateChangeEvent,\n} from '@metamask/network-controller';\nimport type { NonceLock, NonceTracker } from '@metamask/nonce-tracker';\nimport type { Hex } from '@metamask/utils';\nimport { Mutex } from 'async-mutex';\n\nimport { incomingTransactionsLogger as log } from '../logger';\nimport { EtherscanRemoteTransactionSource } from './EtherscanRemoteTransactionSource';\nimport type {\n IncomingTransactionHelper,\n IncomingTransactionOptions,\n} from './IncomingTransactionHelper';\nimport type { PendingTransactionTracker } from './PendingTransactionTracker';\n\n/**\n * Registry of network clients provided by the NetworkController\n */\ntype NetworkClientRegistry = ReturnType<\n NetworkController['getNetworkClientRegistry']\n>;\n\nexport type MultichainTrackingHelperOptions = {\n isMultichainEnabled: boolean;\n provider: Provider;\n nonceTracker: NonceTracker;\n incomingTransactionOptions: IncomingTransactionOptions;\n\n findNetworkClientIdByChainId: NetworkController['findNetworkClientIdByChainId'];\n getNetworkClientById: NetworkController['getNetworkClientById'];\n getNetworkClientRegistry: NetworkController['getNetworkClientRegistry'];\n\n removeIncomingTransactionHelperListeners: (\n IncomingTransactionHelper: IncomingTransactionHelper,\n ) => void;\n removePendingTransactionTrackerListeners: (\n pendingTransactionTracker: PendingTransactionTracker,\n ) => void;\n createNonceTracker: (opts: {\n provider: Provider;\n blockTracker: BlockTracker;\n chainId?: Hex;\n }) => NonceTracker;\n createIncomingTransactionHelper: (opts: {\n blockTracker: BlockTracker;\n etherscanRemoteTransactionSource: EtherscanRemoteTransactionSource;\n chainId?: Hex;\n }) => IncomingTransactionHelper;\n createPendingTransactionTracker: (opts: {\n provider: Provider;\n blockTracker: BlockTracker;\n chainId?: Hex;\n }) => PendingTransactionTracker;\n onNetworkStateChange: (\n listener: (\n ...payload: NetworkControllerStateChangeEvent['payload']\n ) => void,\n ) => void;\n};\n\nexport class MultichainTrackingHelper {\n #isMultichainEnabled: boolean;\n\n readonly #provider: Provider;\n\n readonly #nonceTracker: NonceTracker;\n\n readonly #incomingTransactionOptions: IncomingTransactionOptions;\n\n readonly #findNetworkClientIdByChainId: NetworkController['findNetworkClientIdByChainId'];\n\n readonly #getNetworkClientById: NetworkController['getNetworkClientById'];\n\n readonly #getNetworkClientRegistry: NetworkController['getNetworkClientRegistry'];\n\n readonly #removeIncomingTransactionHelperListeners: (\n IncomingTransactionHelper: IncomingTransactionHelper,\n ) => void;\n\n readonly #removePendingTransactionTrackerListeners: (\n pendingTransactionTracker: PendingTransactionTracker,\n ) => void;\n\n readonly #createNonceTracker: (opts: {\n provider: Provider;\n blockTracker: BlockTracker;\n chainId?: Hex;\n }) => NonceTracker;\n\n readonly #createIncomingTransactionHelper: (opts: {\n blockTracker: BlockTracker;\n chainId?: Hex;\n etherscanRemoteTransactionSource: EtherscanRemoteTransactionSource;\n }) => IncomingTransactionHelper;\n\n readonly #createPendingTransactionTracker: (opts: {\n provider: Provider;\n blockTracker: BlockTracker;\n chainId?: Hex;\n }) => PendingTransactionTracker;\n\n readonly #nonceMutexesByChainId = new Map>();\n\n readonly #trackingMap: Map<\n NetworkClientId,\n {\n nonceTracker: NonceTracker;\n pendingTransactionTracker: PendingTransactionTracker;\n incomingTransactionHelper: IncomingTransactionHelper;\n }\n > = new Map();\n\n readonly #etherscanRemoteTransactionSourcesMap: Map<\n Hex,\n EtherscanRemoteTransactionSource\n > = new Map();\n\n constructor({\n isMultichainEnabled,\n provider,\n nonceTracker,\n incomingTransactionOptions,\n findNetworkClientIdByChainId,\n getNetworkClientById,\n getNetworkClientRegistry,\n removeIncomingTransactionHelperListeners,\n removePendingTransactionTrackerListeners,\n createNonceTracker,\n createIncomingTransactionHelper,\n createPendingTransactionTracker,\n onNetworkStateChange,\n }: MultichainTrackingHelperOptions) {\n this.#isMultichainEnabled = isMultichainEnabled;\n this.#provider = provider;\n this.#nonceTracker = nonceTracker;\n this.#incomingTransactionOptions = incomingTransactionOptions;\n\n this.#findNetworkClientIdByChainId = findNetworkClientIdByChainId;\n this.#getNetworkClientById = getNetworkClientById;\n this.#getNetworkClientRegistry = getNetworkClientRegistry;\n\n this.#removeIncomingTransactionHelperListeners =\n removeIncomingTransactionHelperListeners;\n this.#removePendingTransactionTrackerListeners =\n removePendingTransactionTrackerListeners;\n this.#createNonceTracker = createNonceTracker;\n this.#createIncomingTransactionHelper = createIncomingTransactionHelper;\n this.#createPendingTransactionTracker = createPendingTransactionTracker;\n\n onNetworkStateChange((_, patches) => {\n if (this.#isMultichainEnabled) {\n const networkClients = this.#getNetworkClientRegistry();\n patches.forEach(({ op, path }) => {\n if (op === 'remove' && path[0] === 'networkConfigurations') {\n const networkClientId = path[1] as NetworkClientId;\n delete networkClients[networkClientId];\n }\n });\n\n this.#refreshTrackingMap(networkClients);\n }\n });\n }\n\n initialize() {\n if (!this.#isMultichainEnabled) {\n return;\n }\n const networkClients = this.#getNetworkClientRegistry();\n this.#refreshTrackingMap(networkClients);\n }\n\n has(networkClientId: NetworkClientId) {\n return this.#trackingMap.has(networkClientId);\n }\n\n getEthQuery({\n networkClientId,\n chainId,\n }: {\n networkClientId?: NetworkClientId;\n chainId?: Hex;\n } = {}): EthQuery {\n if (!this.#isMultichainEnabled) {\n return new EthQuery(this.getProvider());\n }\n return new EthQuery(this.getProvider({ networkClientId, chainId }));\n }\n\n getProvider({\n networkClientId,\n chainId,\n }: {\n networkClientId?: NetworkClientId;\n chainId?: Hex;\n } = {}): Provider {\n if (!this.#isMultichainEnabled) {\n return this.#provider;\n }\n\n const networkClient = this.#getNetworkClient({\n networkClientId,\n chainId,\n });\n\n return networkClient?.provider || this.#provider;\n }\n\n /**\n * Gets the mutex intended to guard the nonceTracker for a particular chainId and key .\n *\n * @param opts - The options object.\n * @param opts.chainId - The hex chainId.\n * @param opts.key - The hex address (or constant) pertaining to the chainId\n * @returns Mutex instance for the given chainId and key pair\n */\n async acquireNonceLockForChainIdKey({\n chainId,\n key = 'global',\n }: {\n chainId: Hex;\n key?: string;\n }): Promise<() => void> {\n let nonceMutexesForChainId = this.#nonceMutexesByChainId.get(chainId);\n if (!nonceMutexesForChainId) {\n nonceMutexesForChainId = new Map();\n this.#nonceMutexesByChainId.set(chainId, nonceMutexesForChainId);\n }\n let nonceMutexForKey = nonceMutexesForChainId.get(key);\n if (!nonceMutexForKey) {\n nonceMutexForKey = new Mutex();\n nonceMutexesForChainId.set(key, nonceMutexForKey);\n }\n\n return await nonceMutexForKey.acquire();\n }\n\n /**\n * Gets the next nonce according to the nonce-tracker.\n * Ensure `releaseLock` is called once processing of the `nonce` value is complete.\n *\n * @param address - The hex string address for the transaction.\n * @param networkClientId - The network client ID for the transaction, used to fetch the correct nonce tracker.\n * @returns object with the `nextNonce` `nonceDetails`, and the releaseLock.\n */\n async getNonceLock(\n address: string,\n networkClientId?: NetworkClientId,\n ): Promise {\n let releaseLockForChainIdKey: (() => void) | undefined;\n let nonceTracker = this.#nonceTracker;\n if (networkClientId && this.#isMultichainEnabled) {\n const networkClient = this.#getNetworkClientById(networkClientId);\n releaseLockForChainIdKey = await this.acquireNonceLockForChainIdKey({\n chainId: networkClient.configuration.chainId,\n key: address,\n });\n const trackers = this.#trackingMap.get(networkClientId);\n if (!trackers) {\n throw new Error('missing nonceTracker for networkClientId');\n }\n nonceTracker = trackers.nonceTracker;\n }\n\n // Acquires the lock for the chainId + address and the nonceLock from the nonceTracker, then\n // couples them together by replacing the nonceLock's releaseLock method with\n // an anonymous function that calls releases both the original nonceLock and the\n // lock for the chainId.\n try {\n const nonceLock = await nonceTracker.getNonceLock(address);\n return {\n ...nonceLock,\n releaseLock: () => {\n nonceLock.releaseLock();\n releaseLockForChainIdKey?.();\n },\n };\n } catch (err) {\n releaseLockForChainIdKey?.();\n throw err;\n }\n }\n\n startIncomingTransactionPolling(networkClientIds: NetworkClientId[] = []) {\n networkClientIds.forEach((networkClientId) => {\n this.#trackingMap.get(networkClientId)?.incomingTransactionHelper.start();\n });\n }\n\n stopIncomingTransactionPolling(networkClientIds: NetworkClientId[] = []) {\n networkClientIds.forEach((networkClientId) => {\n this.#trackingMap.get(networkClientId)?.incomingTransactionHelper.stop();\n });\n }\n\n stopAllIncomingTransactionPolling() {\n for (const [, trackers] of this.#trackingMap) {\n trackers.incomingTransactionHelper.stop();\n }\n }\n\n async updateIncomingTransactions(networkClientIds: NetworkClientId[] = []) {\n const promises = await Promise.allSettled(\n networkClientIds.map(async (networkClientId) => {\n return await this.#trackingMap\n .get(networkClientId)\n ?.incomingTransactionHelper.update();\n }),\n );\n\n promises\n .filter((result) => result.status === 'rejected')\n .forEach((result) => {\n log(\n 'failed to update incoming transactions',\n (result as PromiseRejectedResult).reason,\n );\n });\n }\n\n checkForPendingTransactionAndStartPolling = () => {\n for (const [, trackers] of this.#trackingMap) {\n trackers.pendingTransactionTracker.startIfPendingTransactions();\n }\n };\n\n stopAllTracking() {\n for (const [networkClientId] of this.#trackingMap) {\n this.#stopTrackingByNetworkClientId(networkClientId);\n }\n }\n\n #refreshTrackingMap = (networkClients: NetworkClientRegistry) => {\n this.#refreshEtherscanRemoteTransactionSources(networkClients);\n\n const networkClientIds = Object.keys(networkClients);\n const existingNetworkClientIds = Array.from(this.#trackingMap.keys());\n\n // Remove tracking for NetworkClientIds that no longer exist\n const networkClientIdsToRemove = existingNetworkClientIds.filter(\n (id) => !networkClientIds.includes(id),\n );\n networkClientIdsToRemove.forEach((id) => {\n this.#stopTrackingByNetworkClientId(id);\n });\n\n // Start tracking new NetworkClientIds from the registry\n const networkClientIdsToAdd = networkClientIds.filter(\n (id) => !existingNetworkClientIds.includes(id),\n );\n networkClientIdsToAdd.forEach((id) => {\n this.#startTrackingByNetworkClientId(id);\n });\n };\n\n #stopTrackingByNetworkClientId(networkClientId: NetworkClientId) {\n const trackers = this.#trackingMap.get(networkClientId);\n if (trackers) {\n trackers.pendingTransactionTracker.stop();\n this.#removePendingTransactionTrackerListeners(\n trackers.pendingTransactionTracker,\n );\n trackers.incomingTransactionHelper.stop();\n this.#removeIncomingTransactionHelperListeners(\n trackers.incomingTransactionHelper,\n );\n this.#trackingMap.delete(networkClientId);\n }\n }\n\n #startTrackingByNetworkClientId(networkClientId: NetworkClientId) {\n const trackers = this.#trackingMap.get(networkClientId);\n if (trackers) {\n return;\n }\n\n const {\n provider,\n blockTracker,\n configuration: { chainId },\n } = this.#getNetworkClientById(networkClientId);\n\n let etherscanRemoteTransactionSource =\n this.#etherscanRemoteTransactionSourcesMap.get(chainId);\n if (!etherscanRemoteTransactionSource) {\n etherscanRemoteTransactionSource = new EtherscanRemoteTransactionSource({\n includeTokenTransfers:\n this.#incomingTransactionOptions.includeTokenTransfers,\n });\n this.#etherscanRemoteTransactionSourcesMap.set(\n chainId,\n etherscanRemoteTransactionSource,\n );\n }\n\n const nonceTracker = this.#createNonceTracker({\n provider,\n blockTracker,\n chainId,\n });\n\n const incomingTransactionHelper = this.#createIncomingTransactionHelper({\n blockTracker,\n etherscanRemoteTransactionSource,\n chainId,\n });\n\n const pendingTransactionTracker = this.#createPendingTransactionTracker({\n provider,\n blockTracker,\n chainId,\n });\n\n this.#trackingMap.set(networkClientId, {\n nonceTracker,\n incomingTransactionHelper,\n pendingTransactionTracker,\n });\n }\n\n #refreshEtherscanRemoteTransactionSources = (\n networkClients: NetworkClientRegistry,\n ) => {\n // this will be prettier when we have consolidated network clients with a single chainId:\n // check if there are still other network clients using the same chainId\n // if not remove the etherscanRemoteTransaction source from the map\n const chainIdsInRegistry = new Set();\n Object.values(networkClients).forEach((networkClient) =>\n chainIdsInRegistry.add(networkClient.configuration.chainId),\n );\n const existingChainIds = Array.from(\n this.#etherscanRemoteTransactionSourcesMap.keys(),\n );\n const chainIdsToRemove = existingChainIds.filter(\n (chainId) => !chainIdsInRegistry.has(chainId),\n );\n\n chainIdsToRemove.forEach((chainId) => {\n this.#etherscanRemoteTransactionSourcesMap.delete(chainId);\n });\n };\n\n #getNetworkClient({\n networkClientId,\n chainId,\n }: {\n networkClientId?: NetworkClientId;\n chainId?: Hex;\n } = {}): NetworkClient | undefined {\n let networkClient: NetworkClient | undefined;\n\n if (networkClientId) {\n try {\n networkClient = this.#getNetworkClientById(networkClientId);\n } catch (err) {\n log('failed to get network client by networkClientId');\n }\n }\n if (!networkClient && chainId) {\n try {\n const networkClientIdForChainId =\n this.#findNetworkClientIdByChainId(chainId);\n networkClient = this.#getNetworkClientById(networkClientIdForChainId);\n } catch (err) {\n log('failed to get network client by chainId');\n }\n }\n return networkClient;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA,OAAO,cAAc;AAWrB,SAAS,aAAa;AAXtB;AAkEO,IAAM,2BAAN,MAA+B;AAAA,EAyDpC,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAoC;AAgOpC;AAeA;AAwEA;AA7XA;AAEA,uBAAS,WAAT;AAEA,uBAAS,eAAT;AAEA,uBAAS,6BAAT;AAEA,uBAAS,+BAAT;AAEA,uBAAS,uBAAT;AAEA,uBAAS,2BAAT;AAEA,uBAAS,2CAAT;AAIA,uBAAS,2CAAT;AAIA,uBAAS,qBAAT;AAMA,uBAAS,kCAAT;AAMA,uBAAS,kCAAT;AAMA,uBAAS,wBAAyB,oBAAI,IAA6B;AAEnE,uBAAS,cAOL,oBAAI,IAAI;AAEZ,uBAAS,uCAGL,oBAAI,IAAI;AA6MZ,qDAA4C,MAAM;AAChD,iBAAW,CAAC,EAAE,QAAQ,KAAK,mBAAK,eAAc;AAC5C,iBAAS,0BAA0B,2BAA2B;AAAA,MAChE;AAAA,IACF;AAQA,4CAAsB,CAAC,mBAA0C;AAC/D,yBAAK,2CAAL,WAA+C;AAE/C,YAAM,mBAAmB,OAAO,KAAK,cAAc;AACnD,YAAM,2BAA2B,MAAM,KAAK,mBAAK,cAAa,KAAK,CAAC;AAGpE,YAAM,2BAA2B,yBAAyB;AAAA,QACxD,CAAC,OAAO,CAAC,iBAAiB,SAAS,EAAE;AAAA,MACvC;AACA,+BAAyB,QAAQ,CAAC,OAAO;AACvC,8BAAK,kEAAL,WAAoC;AAAA,MACtC,CAAC;AAGD,YAAM,wBAAwB,iBAAiB;AAAA,QAC7C,CAAC,OAAO,CAAC,yBAAyB,SAAS,EAAE;AAAA,MAC/C;AACA,4BAAsB,QAAQ,CAAC,OAAO;AACpC,8BAAK,oEAAL,WAAqC;AAAA,MACvC,CAAC;AAAA,IACH;AAmEA,kEAA4C,CAC1C,mBACG;AAIH,YAAM,qBAAqB,oBAAI,IAAI;AACnC,aAAO,OAAO,cAAc,EAAE;AAAA,QAAQ,CAAC,kBACrC,mBAAmB,IAAI,cAAc,cAAc,OAAO;AAAA,MAC5D;AACA,YAAM,mBAAmB,MAAM;AAAA,QAC7B,mBAAK,uCAAsC,KAAK;AAAA,MAClD;AACA,YAAM,mBAAmB,iBAAiB;AAAA,QACxC,CAAC,YAAY,CAAC,mBAAmB,IAAI,OAAO;AAAA,MAC9C;AAEA,uBAAiB,QAAQ,CAAC,YAAY;AACpC,2BAAK,uCAAsC,OAAO,OAAO;AAAA,MAC3D,CAAC;AAAA,IACH;AApTE,uBAAK,sBAAuB;AAC5B,uBAAK,WAAY;AACjB,uBAAK,eAAgB;AACrB,uBAAK,6BAA8B;AAEnC,uBAAK,+BAAgC;AACrC,uBAAK,uBAAwB;AAC7B,uBAAK,2BAA4B;AAEjC,uBAAK,2CACH;AACF,uBAAK,2CACH;AACF,uBAAK,qBAAsB;AAC3B,uBAAK,kCAAmC;AACxC,uBAAK,kCAAmC;AAExC,yBAAqB,CAAC,GAAG,YAAY;AACnC,UAAI,mBAAK,uBAAsB;AAC7B,cAAM,iBAAiB,mBAAK,2BAAL;AACvB,gBAAQ,QAAQ,CAAC,EAAE,IAAI,KAAK,MAAM;AAChC,cAAI,OAAO,YAAY,KAAK,CAAC,MAAM,yBAAyB;AAC1D,kBAAM,kBAAkB,KAAK,CAAC;AAC9B,mBAAO,eAAe,eAAe;AAAA,UACvC;AAAA,QACF,CAAC;AAED,2BAAK,qBAAL,WAAyB;AAAA,MAC3B;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,aAAa;AACX,QAAI,CAAC,mBAAK,uBAAsB;AAC9B;AAAA,IACF;AACA,UAAM,iBAAiB,mBAAK,2BAAL;AACvB,uBAAK,qBAAL,WAAyB;AAAA,EAC3B;AAAA,EAEA,IAAI,iBAAkC;AACpC,WAAO,mBAAK,cAAa,IAAI,eAAe;AAAA,EAC9C;AAAA,EAEA,YAAY;AAAA,IACV;AAAA,IACA;AAAA,EACF,IAGI,CAAC,GAAa;AAChB,QAAI,CAAC,mBAAK,uBAAsB;AAC9B,aAAO,IAAI,SAAS,KAAK,YAAY,CAAC;AAAA,IACxC;AACA,WAAO,IAAI,SAAS,KAAK,YAAY,EAAE,iBAAiB,QAAQ,CAAC,CAAC;AAAA,EACpE;AAAA,EAEA,YAAY;AAAA,IACV;AAAA,IACA;AAAA,EACF,IAGI,CAAC,GAAa;AAChB,QAAI,CAAC,mBAAK,uBAAsB;AAC9B,aAAO,mBAAK;AAAA,IACd;AAEA,UAAM,gBAAgB,sBAAK,wCAAL,WAAuB;AAAA,MAC3C;AAAA,MACA;AAAA,IACF;AAEA,WAAO,eAAe,YAAY,mBAAK;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,8BAA8B;AAAA,IAClC;AAAA,IACA,MAAM;AAAA,EACR,GAGwB;AACtB,QAAI,yBAAyB,mBAAK,wBAAuB,IAAI,OAAO;AACpE,QAAI,CAAC,wBAAwB;AAC3B,+BAAyB,oBAAI,IAAmB;AAChD,yBAAK,wBAAuB,IAAI,SAAS,sBAAsB;AAAA,IACjE;AACA,QAAI,mBAAmB,uBAAuB,IAAI,GAAG;AACrD,QAAI,CAAC,kBAAkB;AACrB,yBAAmB,IAAI,MAAM;AAC7B,6BAAuB,IAAI,KAAK,gBAAgB;AAAA,IAClD;AAEA,WAAO,MAAM,iBAAiB,QAAQ;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,aACJ,SACA,iBACoB;AACpB,QAAI;AACJ,QAAI,eAAe,mBAAK;AACxB,QAAI,mBAAmB,mBAAK,uBAAsB;AAChD,YAAM,gBAAgB,mBAAK,uBAAL,WAA2B;AACjD,iCAA2B,MAAM,KAAK,8BAA8B;AAAA,QAClE,SAAS,cAAc,cAAc;AAAA,QACrC,KAAK;AAAA,MACP,CAAC;AACD,YAAM,WAAW,mBAAK,cAAa,IAAI,eAAe;AACtD,UAAI,CAAC,UAAU;AACb,cAAM,IAAI,MAAM,0CAA0C;AAAA,MAC5D;AACA,qBAAe,SAAS;AAAA,IAC1B;AAMA,QAAI;AACF,YAAM,YAAY,MAAM,aAAa,aAAa,OAAO;AACzD,aAAO;AAAA,QACL,GAAG;AAAA,QACH,aAAa,MAAM;AACjB,oBAAU,YAAY;AACtB,qCAA2B;AAAA,QAC7B;AAAA,MACF;AAAA,IACF,SAAS,KAAK;AACZ,iCAA2B;AAC3B,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,gCAAgC,mBAAsC,CAAC,GAAG;AACxE,qBAAiB,QAAQ,CAAC,oBAAoB;AAC5C,yBAAK,cAAa,IAAI,eAAe,GAAG,0BAA0B,MAAM;AAAA,IAC1E,CAAC;AAAA,EACH;AAAA,EAEA,+BAA+B,mBAAsC,CAAC,GAAG;AACvE,qBAAiB,QAAQ,CAAC,oBAAoB;AAC5C,yBAAK,cAAa,IAAI,eAAe,GAAG,0BAA0B,KAAK;AAAA,IACzE,CAAC;AAAA,EACH;AAAA,EAEA,oCAAoC;AAClC,eAAW,CAAC,EAAE,QAAQ,KAAK,mBAAK,eAAc;AAC5C,eAAS,0BAA0B,KAAK;AAAA,IAC1C;AAAA,EACF;AAAA,EAEA,MAAM,2BAA2B,mBAAsC,CAAC,GAAG;AACzE,UAAM,WAAW,MAAM,QAAQ;AAAA,MAC7B,iBAAiB,IAAI,OAAO,oBAAoB;AAC9C,eAAO,MAAM,mBAAK,cACf,IAAI,eAAe,GAClB,0BAA0B,OAAO;AAAA,MACvC,CAAC;AAAA,IACH;AAEA,aACG,OAAO,CAAC,WAAW,OAAO,WAAW,UAAU,EAC/C,QAAQ,CAAC,WAAW;AACnB;AAAA,QACE;AAAA,QACC,OAAiC;AAAA,MACpC;AAAA,IACF,CAAC;AAAA,EACL;AAAA,EAQA,kBAAkB;AAChB,eAAW,CAAC,eAAe,KAAK,mBAAK,eAAc;AACjD,4BAAK,kEAAL,WAAoC;AAAA,IACtC;AAAA,EACF;AA2IF;AAxZE;AAES;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAIA;AAIA;AAMA;AAMA;AAMA;AAEA;AASA;AA4NT;AAuBA;AAAA,mCAA8B,SAAC,iBAAkC;AAC/D,QAAM,WAAW,mBAAK,cAAa,IAAI,eAAe;AACtD,MAAI,UAAU;AACZ,aAAS,0BAA0B,KAAK;AACxC,uBAAK,2CAAL,WACE,SAAS;AAEX,aAAS,0BAA0B,KAAK;AACxC,uBAAK,2CAAL,WACE,SAAS;AAEX,uBAAK,cAAa,OAAO,eAAe;AAAA,EAC1C;AACF;AAEA;AAAA,oCAA+B,SAAC,iBAAkC;AAChE,QAAM,WAAW,mBAAK,cAAa,IAAI,eAAe;AACtD,MAAI,UAAU;AACZ;AAAA,EACF;AAEA,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,eAAe,EAAE,QAAQ;AAAA,EAC3B,IAAI,mBAAK,uBAAL,WAA2B;AAE/B,MAAI,mCACF,mBAAK,uCAAsC,IAAI,OAAO;AACxD,MAAI,CAAC,kCAAkC;AACrC,uCAAmC,IAAI,iCAAiC;AAAA,MACtE,uBACE,mBAAK,6BAA4B;AAAA,IACrC,CAAC;AACD,uBAAK,uCAAsC;AAAA,MACzC;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,eAAe,mBAAK,qBAAL,WAAyB;AAAA,IAC5C;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,4BAA4B,mBAAK,kCAAL,WAAsC;AAAA,IACtE;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,4BAA4B,mBAAK,kCAAL,WAAsC;AAAA,IACtE;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,qBAAK,cAAa,IAAI,iBAAiB;AAAA,IACrC;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAEA;AAsBA;AAAA,sBAAiB,SAAC;AAAA,EAChB;AAAA,EACA;AACF,IAGI,CAAC,GAA8B;AACjC,MAAI;AAEJ,MAAI,iBAAiB;AACnB,QAAI;AACF,sBAAgB,mBAAK,uBAAL,WAA2B;AAAA,IAC7C,SAAS,KAAK;AACZ,iCAAI,iDAAiD;AAAA,IACvD;AAAA,EACF;AACA,MAAI,CAAC,iBAAiB,SAAS;AAC7B,QAAI;AACF,YAAM,4BACJ,mBAAK,+BAAL,WAAmC;AACrC,sBAAgB,mBAAK,uBAAL,WAA2B;AAAA,IAC7C,SAAS,KAAK;AACZ,iCAAI,yCAAyC;AAAA,IAC/C;AAAA,EACF;AACA,SAAO;AACT;","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-5G6OHAXI.mjs.map b/node_modules/@metamask/transaction-controller/dist/chunk-5G6OHAXI.mjs.map -deleted file mode 100644 -index bf0922d..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-5G6OHAXI.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/utils/gas.ts"],"sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\n\nimport {\n BNToHex,\n fractionBN,\n hexToBN,\n query,\n} from '@metamask/controller-utils';\nimport type EthQuery from '@metamask/eth-query';\nimport type { Hex } from '@metamask/utils';\nimport { add0x, createModuleLogger } from '@metamask/utils';\n\nimport { GAS_BUFFER_CHAIN_OVERRIDES } from '../constants';\nimport { projectLogger } from '../logger';\nimport type { TransactionMeta, TransactionParams } from '../types';\n\nexport type UpdateGasRequest = {\n ethQuery: EthQuery;\n isCustomNetwork: boolean;\n chainId: Hex;\n txMeta: TransactionMeta;\n};\n\nexport const log = createModuleLogger(projectLogger, 'gas');\n\nexport const FIXED_GAS = '0x5208';\nexport const DEFAULT_GAS_MULTIPLIER = 1.5;\n\nexport async function updateGas(request: UpdateGasRequest) {\n const { txMeta } = request;\n const initialParams = { ...txMeta.txParams };\n\n const [gas, simulationFails] = await getGas(request);\n\n txMeta.txParams.gas = gas;\n txMeta.simulationFails = simulationFails;\n\n if (!initialParams.gas) {\n txMeta.originalGasEstimate = txMeta.txParams.gas;\n }\n\n if (!txMeta.defaultGasEstimates) {\n txMeta.defaultGasEstimates = {};\n }\n\n txMeta.defaultGasEstimates.gas = txMeta.txParams.gas;\n}\n\nexport async function estimateGas(\n txParams: TransactionParams,\n ethQuery: EthQuery,\n) {\n const request = { ...txParams };\n const { data, value } = request;\n\n const { gasLimit: gasLimitHex, number: blockNumber } = await getLatestBlock(\n ethQuery,\n );\n\n const gasLimitBN = hexToBN(gasLimitHex);\n\n request.data = data ? add0x(data) : data;\n request.gas = BNToHex(fractionBN(gasLimitBN, 19, 20));\n request.value = value || '0x0';\n\n let estimatedGas = request.gas;\n let simulationFails;\n\n try {\n estimatedGas = await query(ethQuery, 'estimateGas', [request]);\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n simulationFails = {\n reason: error.message,\n errorKey: error.errorKey,\n debug: {\n blockNumber,\n blockGasLimit: gasLimitHex,\n },\n };\n\n log('Estimation failed', { ...simulationFails, fallback: estimateGas });\n }\n\n return {\n blockGasLimit: gasLimitHex,\n estimatedGas,\n simulationFails,\n };\n}\n\nexport function addGasBuffer(\n estimatedGas: string,\n blockGasLimit: string,\n multiplier: number,\n) {\n const estimatedGasBN = hexToBN(estimatedGas);\n const maxGasBN = hexToBN(blockGasLimit).muln(0.9);\n const paddedGasBN = estimatedGasBN.muln(multiplier);\n\n if (estimatedGasBN.gt(maxGasBN)) {\n const estimatedGasHex = add0x(estimatedGas);\n log('Using estimated value', estimatedGasHex);\n return estimatedGasHex;\n }\n\n if (paddedGasBN.lt(maxGasBN)) {\n const paddedHex = add0x(BNToHex(paddedGasBN));\n log('Using padded estimate', paddedHex, multiplier);\n return paddedHex;\n }\n\n const maxHex = add0x(BNToHex(maxGasBN));\n log('Using 90% of block gas limit', maxHex);\n return maxHex;\n}\n\nasync function getGas(\n request: UpdateGasRequest,\n): Promise<[string, TransactionMeta['simulationFails']?]> {\n const { isCustomNetwork, chainId, txMeta } = request;\n\n if (txMeta.txParams.gas) {\n log('Using value from request', txMeta.txParams.gas);\n return [txMeta.txParams.gas];\n }\n\n if (await requiresFixedGas(request)) {\n log('Using fixed value', FIXED_GAS);\n return [FIXED_GAS];\n }\n\n const { blockGasLimit, estimatedGas, simulationFails } = await estimateGas(\n txMeta.txParams,\n request.ethQuery,\n );\n\n if (isCustomNetwork) {\n log('Using original estimate as custom network');\n return [estimatedGas, simulationFails];\n }\n\n const bufferMultiplier =\n GAS_BUFFER_CHAIN_OVERRIDES[\n chainId as keyof typeof GAS_BUFFER_CHAIN_OVERRIDES\n ] ?? DEFAULT_GAS_MULTIPLIER;\n\n const bufferedGas = addGasBuffer(\n estimatedGas,\n blockGasLimit,\n bufferMultiplier,\n );\n\n return [bufferedGas, simulationFails];\n}\n\nasync function requiresFixedGas({\n ethQuery,\n txMeta,\n isCustomNetwork,\n}: UpdateGasRequest): Promise {\n const {\n txParams: { to, data },\n } = txMeta;\n\n if (isCustomNetwork || !to || data) {\n return false;\n }\n\n const code = await getCode(ethQuery, to);\n\n return !code || code === '0x';\n}\n\nasync function getCode(\n ethQuery: EthQuery,\n address: string,\n): Promise {\n return await query(ethQuery, 'getCode', [address]);\n}\n\nasync function getLatestBlock(\n ethQuery: EthQuery,\n): Promise<{ gasLimit: string; number: string }> {\n return await query(ethQuery, 'getBlockByNumber', ['latest', false]);\n}\n"],"mappings":"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","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-SFFTNB2X.mjs b/node_modules/@metamask/transaction-controller/dist/chunk-5TW7WBKX.mjs -similarity index 99% -rename from node_modules/@metamask/transaction-controller/dist/chunk-SFFTNB2X.mjs -rename to node_modules/@metamask/transaction-controller/dist/chunk-5TW7WBKX.mjs -index 23b3af2..685ee67 100644 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-SFFTNB2X.mjs -+++ b/node_modules/@metamask/transaction-controller/dist/chunk-5TW7WBKX.mjs -@@ -3,7 +3,7 @@ import { - } from "./chunk-NOHEXQ7Y.mjs"; - import { - getGasFeeFlow --} from "./chunk-JXXTNVU4.mjs"; -+} from "./chunk-BS5IK7HD.mjs"; - import { - projectLogger - } from "./chunk-UQQWZT6C.mjs"; -@@ -225,4 +225,4 @@ getGasFeeControllerData_fn = async function(transactions) { - export { - GasFeePoller - }; --//# sourceMappingURL=chunk-SFFTNB2X.mjs.map -\ No newline at end of file -+//# sourceMappingURL=chunk-5TW7WBKX.mjs.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-5ZEJT5SN.mjs.map b/node_modules/@metamask/transaction-controller/dist/chunk-5ZEJT5SN.mjs.map -deleted file mode 100644 -index 1eb61ac..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-5ZEJT5SN.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/utils/validation.ts"],"sourcesContent":["import { Interface } from '@ethersproject/abi';\nimport { ORIGIN_METAMASK, isValidHexAddress } from '@metamask/controller-utils';\nimport { abiERC20 } from '@metamask/metamask-eth-abis';\nimport { providerErrors, rpcErrors } from '@metamask/rpc-errors';\n\nimport { TransactionEnvelopeType, type TransactionParams } from '../types';\nimport { isEIP1559Transaction } from './utils';\n\ntype GasFieldsToValidate = 'gasPrice' | 'maxFeePerGas' | 'maxPriorityFeePerGas';\n\n/**\n * Validates whether a transaction initiated by a specific 'from' address is permitted by the origin.\n *\n * @param permittedAddresses - The permitted accounts for the given origin.\n * @param selectedAddress - The currently selected Ethereum address in the wallet.\n * @param from - The address from which the transaction is initiated.\n * @param origin - The origin or source of the transaction.\n * @throws Throws an error if the transaction is not permitted.\n */\nexport async function validateTransactionOrigin(\n permittedAddresses: string[],\n selectedAddress: string,\n from: string,\n origin: string,\n) {\n if (origin === ORIGIN_METAMASK) {\n // Ensure the 'from' address matches the currently selected address\n if (from !== selectedAddress) {\n throw rpcErrors.internal({\n message: `Internally initiated transaction is using invalid account.`,\n data: {\n origin,\n fromAddress: from,\n selectedAddress,\n },\n });\n }\n return;\n }\n\n // Check if the origin has permissions to initiate transactions from the specified address\n if (!permittedAddresses.includes(from)) {\n throw providerErrors.unauthorized({ data: { origin } });\n }\n}\n\n/**\n * Validates the transaction params for required properties and throws in\n * the event of any validation error.\n *\n * @param txParams - Transaction params object to validate.\n * @param isEIP1559Compatible - whether or not the current network supports EIP-1559 transactions.\n */\nexport function validateTxParams(\n txParams: TransactionParams,\n isEIP1559Compatible = true,\n) {\n validateEIP1559Compatibility(txParams, isEIP1559Compatible);\n validateParamFrom(txParams.from);\n validateParamRecipient(txParams);\n validateParamValue(txParams.value);\n validateParamData(txParams.data);\n validateParamChainId(txParams.chainId);\n validateGasFeeParams(txParams);\n}\n\n/**\n * Validates EIP-1559 compatibility for transaction creation.\n *\n * @param txParams - The transaction parameters to validate.\n * @param isEIP1559Compatible - Indicates if the current network supports EIP-1559.\n * @throws Throws invalid params if the transaction specifies EIP-1559 but the network does not support it.\n */\nfunction validateEIP1559Compatibility(\n txParams: TransactionParams,\n isEIP1559Compatible: boolean,\n) {\n if (isEIP1559Transaction(txParams) && !isEIP1559Compatible) {\n throw rpcErrors.invalidParams(\n 'Invalid transaction params: params specify an EIP-1559 transaction but the current network does not support EIP-1559',\n );\n }\n}\n\n/**\n * Validates value property, ensuring it is a valid positive integer number\n * denominated in wei.\n *\n * @param value - The value to validate, expressed as a string.\n * @throws Throws an error if the value is not a valid positive integer\n * number denominated in wei.\n * - If the value contains a hyphen (-), it is considered invalid.\n * - If the value contains a decimal point (.), it is considered invalid.\n * - If the value is not a finite number, is NaN, or is not a safe integer, it is considered invalid.\n */\nfunction validateParamValue(value?: string) {\n if (value !== undefined) {\n if (value.includes('-')) {\n throw rpcErrors.invalidParams(\n `Invalid transaction value \"${value}\": not a positive number.`,\n );\n }\n\n if (value.includes('.')) {\n throw rpcErrors.invalidParams(\n `Invalid transaction value \"${value}\": number must be in wei.`,\n );\n }\n const intValue = parseInt(value, 10);\n const isValid =\n Number.isFinite(intValue) &&\n !Number.isNaN(intValue) &&\n !isNaN(Number(value)) &&\n Number.isSafeInteger(intValue);\n if (!isValid) {\n throw rpcErrors.invalidParams(\n `Invalid transaction value ${value}: number must be a valid number.`,\n );\n }\n }\n}\n\n/**\n * Validates the recipient address in a transaction's parameters.\n *\n * @param txParams - The transaction parameters object to validate.\n * @throws Throws an error if the recipient address is invalid:\n * - If the recipient address is an empty string ('0x') or undefined and the transaction contains data,\n * the \"to\" field is removed from the transaction parameters.\n * - If the recipient address is not a valid hexadecimal Ethereum address, an error is thrown.\n */\nfunction validateParamRecipient(txParams: TransactionParams) {\n if (txParams.to === '0x' || txParams.to === undefined) {\n if (txParams.data) {\n delete txParams.to;\n } else {\n throw rpcErrors.invalidParams(`Invalid \"to\" address.`);\n }\n } else if (txParams.to !== undefined && !isValidHexAddress(txParams.to)) {\n throw rpcErrors.invalidParams(`Invalid \"to\" address.`);\n }\n}\n\n/**\n * Validates the recipient address in a transaction's parameters.\n *\n * @param from - The from property to validate.\n * @throws Throws an error if the recipient address is invalid:\n * - If the recipient address is an empty string ('0x') or undefined and the transaction contains data,\n * the \"to\" field is removed from the transaction parameters.\n * - If the recipient address is not a valid hexadecimal Ethereum address, an error is thrown.\n */\nfunction validateParamFrom(from: string) {\n if (!from || typeof from !== 'string') {\n throw rpcErrors.invalidParams(\n `Invalid \"from\" address ${from}: not a string.`,\n );\n }\n if (!isValidHexAddress(from)) {\n throw rpcErrors.invalidParams('Invalid \"from\" address.');\n }\n}\n\n/**\n * Validates input data for transactions.\n *\n * @param value - The input data to validate.\n * @throws Throws invalid params if the input data is invalid.\n */\nfunction validateParamData(value?: string) {\n if (value) {\n const ERC20Interface = new Interface(abiERC20);\n try {\n ERC20Interface.parseTransaction({ data: value });\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n if (error.message.match(/BUFFER_OVERRUN/u)) {\n throw rpcErrors.invalidParams(\n 'Invalid transaction params: data out-of-bounds, BUFFER_OVERRUN.',\n );\n }\n }\n }\n}\n\n/**\n * Validates chainId type.\n *\n * @param chainId - The chainId to validate.\n */\nfunction validateParamChainId(chainId: number | string | undefined) {\n if (\n chainId !== undefined &&\n typeof chainId !== 'number' &&\n typeof chainId !== 'string'\n ) {\n throw rpcErrors.invalidParams(\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `Invalid transaction params: chainId is not a Number or hex string. got: (${chainId})`,\n );\n }\n}\n\n/**\n * Validates gas values.\n *\n * @param txParams - The transaction parameters to validate.\n */\nfunction validateGasFeeParams(txParams: TransactionParams) {\n if (txParams.gasPrice) {\n ensureProperTransactionEnvelopeTypeProvided(txParams, 'gasPrice');\n ensureMutuallyExclusiveFieldsNotProvided(\n txParams,\n 'gasPrice',\n 'maxFeePerGas',\n );\n ensureMutuallyExclusiveFieldsNotProvided(\n txParams,\n 'gasPrice',\n 'maxPriorityFeePerGas',\n );\n ensureFieldIsString(txParams, 'gasPrice');\n }\n\n if (txParams.maxFeePerGas) {\n ensureProperTransactionEnvelopeTypeProvided(txParams, 'maxFeePerGas');\n ensureMutuallyExclusiveFieldsNotProvided(\n txParams,\n 'maxFeePerGas',\n 'gasPrice',\n );\n ensureFieldIsString(txParams, 'maxFeePerGas');\n }\n\n if (txParams.maxPriorityFeePerGas) {\n ensureProperTransactionEnvelopeTypeProvided(\n txParams,\n 'maxPriorityFeePerGas',\n );\n ensureMutuallyExclusiveFieldsNotProvided(\n txParams,\n 'maxPriorityFeePerGas',\n 'gasPrice',\n );\n ensureFieldIsString(txParams, 'maxPriorityFeePerGas');\n }\n}\n\n/**\n * Ensures that the provided txParams has the proper 'type' specified for the\n * given field, if it is provided. If types do not match throws an\n * invalidParams error.\n *\n * @param txParams - The transaction parameters object\n * @param field - The current field being validated\n * @throws {ethErrors.rpc.invalidParams} Throws if type does not match the\n * expectations for provided field.\n */\nfunction ensureProperTransactionEnvelopeTypeProvided(\n txParams: TransactionParams,\n field: GasFieldsToValidate,\n) {\n switch (field) {\n case 'maxFeePerGas':\n case 'maxPriorityFeePerGas':\n if (\n txParams.type &&\n txParams.type !== TransactionEnvelopeType.feeMarket\n ) {\n throw rpcErrors.invalidParams(\n `Invalid transaction envelope type: specified type \"${txParams.type}\" but including maxFeePerGas and maxPriorityFeePerGas requires type: \"${TransactionEnvelopeType.feeMarket}\"`,\n );\n }\n break;\n case 'gasPrice':\n default:\n if (\n txParams.type &&\n txParams.type === TransactionEnvelopeType.feeMarket\n ) {\n throw rpcErrors.invalidParams(\n `Invalid transaction envelope type: specified type \"${txParams.type}\" but included a gasPrice instead of maxFeePerGas and maxPriorityFeePerGas`,\n );\n }\n }\n}\n\n/**\n * Given two fields, ensure that the second field is not included in txParams,\n * and if it is throw an invalidParams error.\n *\n * @param txParams - The transaction parameters object\n * @param fieldBeingValidated - The current field being validated\n * @param mutuallyExclusiveField - The field to ensure is not provided\n * @throws {ethErrors.rpc.invalidParams} Throws if mutuallyExclusiveField is\n * present in txParams.\n */\nfunction ensureMutuallyExclusiveFieldsNotProvided(\n txParams: TransactionParams,\n fieldBeingValidated: GasFieldsToValidate,\n mutuallyExclusiveField: GasFieldsToValidate,\n) {\n if (typeof txParams[mutuallyExclusiveField] !== 'undefined') {\n throw rpcErrors.invalidParams(\n `Invalid transaction params: specified ${fieldBeingValidated} but also included ${mutuallyExclusiveField}, these cannot be mixed`,\n );\n }\n}\n\n/**\n * Ensures that the provided value for field is a string, throws an\n * invalidParams error if field is not a string.\n *\n * @param txParams - The transaction parameters object\n * @param field - The current field being validated\n * @throws {rpcErrors.invalidParams} Throws if field is not a string\n */\nfunction ensureFieldIsString(\n txParams: TransactionParams,\n field: GasFieldsToValidate,\n) {\n if (typeof txParams[field] !== 'string') {\n throw rpcErrors.invalidParams(\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `Invalid transaction params: ${field} is not a string. got: (${txParams[field]})`,\n );\n }\n}\n"],"mappings":"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","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-6B5BEO3R.mjs.map b/node_modules/@metamask/transaction-controller/dist/chunk-6B5BEO3R.mjs.map -deleted file mode 100644 -index 662567a..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-6B5BEO3R.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/helpers/PendingTransactionTracker.ts"],"sourcesContent":["import { query } from '@metamask/controller-utils';\nimport type EthQuery from '@metamask/eth-query';\nimport type {\n BlockTracker,\n NetworkClientId,\n} from '@metamask/network-controller';\nimport EventEmitter from 'events';\nimport { cloneDeep, merge } from 'lodash';\n\nimport { createModuleLogger, projectLogger } from '../logger';\nimport type { TransactionMeta, TransactionReceipt } from '../types';\nimport { TransactionStatus, TransactionType } from '../types';\n\n/**\n * We wait this many blocks before emitting a 'transaction-dropped' event\n * This is because we could be talking to a node that is out of sync\n */\nconst DROPPED_BLOCK_COUNT = 3;\n\nconst RECEIPT_STATUS_SUCCESS = '0x1';\nconst RECEIPT_STATUS_FAILURE = '0x0';\nconst MAX_RETRY_BLOCK_DISTANCE = 50;\n\nconst KNOWN_TRANSACTION_ERRORS = [\n 'replacement transaction underpriced',\n 'known transaction',\n 'gas price too low to replace',\n 'transaction with the same hash was already imported',\n 'gateway timeout',\n 'nonce too low',\n];\n\nconst log = createModuleLogger(projectLogger, 'pending-transactions');\n\ntype SuccessfulTransactionReceipt = TransactionReceipt & {\n blockNumber: string;\n blockHash: string;\n};\n\ntype Events = {\n 'transaction-confirmed': [txMeta: TransactionMeta];\n 'transaction-dropped': [txMeta: TransactionMeta];\n 'transaction-failed': [txMeta: TransactionMeta, error: Error];\n 'transaction-updated': [txMeta: TransactionMeta, note: string];\n};\n\n// This interface was created before this ESLint rule was added.\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface PendingTransactionTrackerEventEmitter extends EventEmitter {\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n on(\n eventName: T,\n listener: (...args: Events[T]) => void,\n ): this;\n\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n emit(eventName: T, ...args: Events[T]): boolean;\n}\n\nexport class PendingTransactionTracker {\n hub: PendingTransactionTrackerEventEmitter;\n\n #approveTransaction: (transactionId: string) => Promise;\n\n #blockTracker: BlockTracker;\n\n #droppedBlockCountByHash: Map;\n\n #getChainId: () => string;\n\n #getEthQuery: (networkClientId?: NetworkClientId) => EthQuery;\n\n #getTransactions: () => TransactionMeta[];\n\n #isResubmitEnabled: () => boolean;\n\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n #listener: any;\n\n #getGlobalLock: () => Promise<() => void>;\n\n #publishTransaction: (ethQuery: EthQuery, rawTx: string) => Promise;\n\n #running: boolean;\n\n #beforeCheckPendingTransaction: (transactionMeta: TransactionMeta) => boolean;\n\n #beforePublish: (transactionMeta: TransactionMeta) => boolean;\n\n constructor({\n approveTransaction,\n blockTracker,\n getChainId,\n getEthQuery,\n getTransactions,\n isResubmitEnabled,\n getGlobalLock,\n publishTransaction,\n hooks,\n }: {\n approveTransaction: (transactionId: string) => Promise;\n blockTracker: BlockTracker;\n getChainId: () => string;\n getEthQuery: (networkClientId?: NetworkClientId) => EthQuery;\n getTransactions: () => TransactionMeta[];\n isResubmitEnabled?: () => boolean;\n getGlobalLock: () => Promise<() => void>;\n publishTransaction: (ethQuery: EthQuery, rawTx: string) => Promise;\n hooks?: {\n beforeCheckPendingTransaction?: (\n transactionMeta: TransactionMeta,\n ) => boolean;\n beforePublish?: (transactionMeta: TransactionMeta) => boolean;\n };\n }) {\n this.hub = new EventEmitter() as PendingTransactionTrackerEventEmitter;\n\n this.#approveTransaction = approveTransaction;\n this.#blockTracker = blockTracker;\n this.#droppedBlockCountByHash = new Map();\n this.#getChainId = getChainId;\n this.#getEthQuery = getEthQuery;\n this.#getTransactions = getTransactions;\n this.#isResubmitEnabled = isResubmitEnabled ?? (() => true);\n this.#listener = this.#onLatestBlock.bind(this);\n this.#getGlobalLock = getGlobalLock;\n this.#publishTransaction = publishTransaction;\n this.#running = false;\n this.#beforePublish = hooks?.beforePublish ?? (() => true);\n this.#beforeCheckPendingTransaction =\n hooks?.beforeCheckPendingTransaction ?? (() => true);\n }\n\n startIfPendingTransactions = () => {\n const pendingTransactions = this.#getPendingTransactions();\n\n if (pendingTransactions.length) {\n this.#start();\n } else {\n this.stop();\n }\n };\n\n /**\n * Force checks the network if the given transaction is confirmed and updates it's status.\n *\n * @param txMeta - The transaction to check\n */\n async forceCheckTransaction(txMeta: TransactionMeta) {\n const releaseLock = await this.#getGlobalLock();\n\n try {\n await this.#checkTransaction(txMeta);\n } catch (error) {\n /* istanbul ignore next */\n log('Failed to check transaction', error);\n } finally {\n releaseLock();\n }\n }\n\n #start() {\n if (this.#running) {\n return;\n }\n\n this.#blockTracker.on('latest', this.#listener);\n this.#running = true;\n\n log('Started polling');\n }\n\n stop() {\n if (!this.#running) {\n return;\n }\n\n this.#blockTracker.removeListener('latest', this.#listener);\n this.#running = false;\n\n log('Stopped polling');\n }\n\n async #onLatestBlock(latestBlockNumber: string) {\n const releaseLock = await this.#getGlobalLock();\n\n try {\n await this.#checkTransactions();\n } catch (error) {\n /* istanbul ignore next */\n log('Failed to check transactions', error);\n } finally {\n releaseLock();\n }\n\n try {\n await this.#resubmitTransactions(latestBlockNumber);\n } catch (error) {\n /* istanbul ignore next */\n log('Failed to resubmit transactions', error);\n }\n }\n\n async #checkTransactions() {\n log('Checking transactions');\n\n const pendingTransactions = this.#getPendingTransactions();\n\n if (!pendingTransactions.length) {\n log('No pending transactions to check');\n return;\n }\n\n log('Found pending transactions to check', {\n count: pendingTransactions.length,\n ids: pendingTransactions.map((tx) => tx.id),\n });\n\n await Promise.all(\n pendingTransactions.map((tx) => this.#checkTransaction(tx)),\n );\n }\n\n async #resubmitTransactions(latestBlockNumber: string) {\n if (!this.#isResubmitEnabled() || !this.#running) {\n return;\n }\n\n log('Resubmitting transactions');\n\n const pendingTransactions = this.#getPendingTransactions();\n\n if (!pendingTransactions.length) {\n log('No pending transactions to resubmit');\n return;\n }\n\n log('Found pending transactions to resubmit', {\n count: pendingTransactions.length,\n ids: pendingTransactions.map((tx) => tx.id),\n });\n\n for (const txMeta of pendingTransactions) {\n try {\n await this.#resubmitTransaction(txMeta, latestBlockNumber);\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n /* istanbul ignore next */\n const errorMessage =\n error.value?.message?.toLowerCase() || error.message.toLowerCase();\n\n if (this.#isKnownTransactionError(errorMessage)) {\n log('Ignoring known transaction error', errorMessage);\n return;\n }\n\n this.#warnTransaction(\n txMeta,\n error.message,\n 'There was an error when resubmitting this transaction.',\n );\n }\n }\n }\n\n #isKnownTransactionError(errorMessage: string) {\n return KNOWN_TRANSACTION_ERRORS.some((knownError) =>\n errorMessage.includes(knownError),\n );\n }\n\n async #resubmitTransaction(\n txMeta: TransactionMeta,\n latestBlockNumber: string,\n ) {\n if (!this.#isResubmitDue(txMeta, latestBlockNumber)) {\n return;\n }\n\n const { rawTx } = txMeta;\n\n if (!this.#beforePublish(txMeta)) {\n return;\n }\n\n if (!rawTx?.length) {\n log('Approving transaction as no raw value');\n await this.#approveTransaction(txMeta.id);\n return;\n }\n\n const ethQuery = this.#getEthQuery(txMeta.networkClientId);\n await this.#publishTransaction(ethQuery, rawTx);\n\n const retryCount = (txMeta.retryCount ?? 0) + 1;\n\n this.#updateTransaction(\n merge({}, txMeta, { retryCount }),\n 'PendingTransactionTracker:transaction-retry - Retry count increased',\n );\n }\n\n #isResubmitDue(txMeta: TransactionMeta, latestBlockNumber: string): boolean {\n const txMetaWithFirstRetryBlockNumber = cloneDeep(txMeta);\n\n if (!txMetaWithFirstRetryBlockNumber.firstRetryBlockNumber) {\n txMetaWithFirstRetryBlockNumber.firstRetryBlockNumber = latestBlockNumber;\n\n this.#updateTransaction(\n txMetaWithFirstRetryBlockNumber,\n 'PendingTransactionTracker:#isResubmitDue - First retry block number set',\n );\n }\n\n const { firstRetryBlockNumber } = txMetaWithFirstRetryBlockNumber;\n\n const blocksSinceFirstRetry =\n Number.parseInt(latestBlockNumber, 16) -\n Number.parseInt(firstRetryBlockNumber, 16);\n\n const retryCount = txMeta.retryCount || 0;\n\n // Exponential backoff to limit retries at publishing\n // Capped at ~15 minutes between retries\n const requiredBlocksSinceFirstRetry = Math.min(\n MAX_RETRY_BLOCK_DISTANCE,\n Math.pow(2, retryCount),\n );\n\n return blocksSinceFirstRetry >= requiredBlocksSinceFirstRetry;\n }\n\n async #checkTransaction(txMeta: TransactionMeta) {\n const { hash, id } = txMeta;\n\n if (!hash && this.#beforeCheckPendingTransaction(txMeta)) {\n const error = new Error(\n 'We had an error while submitting this transaction, please try again.',\n );\n\n error.name = 'NoTxHashError';\n\n this.#failTransaction(txMeta, error);\n\n return;\n }\n\n if (this.#isNonceTaken(txMeta)) {\n log('Nonce already taken', id);\n this.#dropTransaction(txMeta);\n return;\n }\n\n try {\n const receipt = await this.#getTransactionReceipt(hash);\n const isSuccess = receipt?.status === RECEIPT_STATUS_SUCCESS;\n const isFailure = receipt?.status === RECEIPT_STATUS_FAILURE;\n\n if (isFailure) {\n log('Transaction receipt has failed status');\n\n this.#failTransaction(\n txMeta,\n new Error('Transaction dropped or replaced'),\n );\n\n return;\n }\n\n const { blockNumber, blockHash } = receipt || {};\n\n if (isSuccess && blockNumber && blockHash) {\n await this.#onTransactionConfirmed(txMeta, {\n ...receipt,\n blockNumber,\n blockHash,\n });\n\n return;\n }\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n log('Failed to check transaction', id, error);\n\n this.#warnTransaction(\n txMeta,\n error.message,\n 'There was a problem loading this transaction.',\n );\n\n return;\n }\n\n if (await this.#isTransactionDropped(txMeta)) {\n this.#dropTransaction(txMeta);\n }\n }\n\n async #onTransactionConfirmed(\n txMeta: TransactionMeta,\n receipt: SuccessfulTransactionReceipt,\n ) {\n const { id } = txMeta;\n const { blockHash } = receipt;\n\n log('Transaction confirmed', id);\n\n const { baseFeePerGas, timestamp: blockTimestamp } =\n await this.#getBlockByHash(blockHash, false);\n\n const updatedTxMeta = cloneDeep(txMeta);\n updatedTxMeta.baseFeePerGas = baseFeePerGas;\n updatedTxMeta.blockTimestamp = blockTimestamp;\n updatedTxMeta.status = TransactionStatus.confirmed;\n updatedTxMeta.txParams = {\n ...updatedTxMeta.txParams,\n gasUsed: receipt.gasUsed,\n };\n updatedTxMeta.txReceipt = receipt;\n updatedTxMeta.verifiedOnBlockchain = true;\n\n this.#updateTransaction(\n updatedTxMeta,\n 'PendingTransactionTracker:#onTransactionConfirmed - Transaction confirmed',\n );\n\n this.hub.emit('transaction-confirmed', updatedTxMeta);\n }\n\n async #isTransactionDropped(txMeta: TransactionMeta) {\n const {\n hash,\n id,\n txParams: { nonce, from },\n } = txMeta;\n\n /* istanbul ignore next */\n if (!nonce || !hash) {\n return false;\n }\n\n const networkNextNonceHex = await this.#getNetworkTransactionCount(from);\n const networkNextNonceNumber = parseInt(networkNextNonceHex, 16);\n const nonceNumber = parseInt(nonce, 16);\n\n if (nonceNumber >= networkNextNonceNumber) {\n return false;\n }\n\n let droppedBlockCount = this.#droppedBlockCountByHash.get(hash);\n\n if (droppedBlockCount === undefined) {\n droppedBlockCount = 0;\n this.#droppedBlockCountByHash.set(hash, droppedBlockCount);\n }\n\n if (droppedBlockCount < DROPPED_BLOCK_COUNT) {\n log('Incrementing dropped block count', { id, droppedBlockCount });\n this.#droppedBlockCountByHash.set(hash, droppedBlockCount + 1);\n return false;\n }\n\n log('Hit dropped block count', id);\n\n this.#droppedBlockCountByHash.delete(hash);\n return true;\n }\n\n #isNonceTaken(txMeta: TransactionMeta): boolean {\n const { id, txParams } = txMeta;\n\n return this.#getCurrentChainTransactions().some(\n (tx) =>\n tx.id !== id &&\n tx.txParams.from === txParams.from &&\n tx.status === TransactionStatus.confirmed &&\n tx.txParams.nonce === txParams.nonce &&\n tx.type !== TransactionType.incoming,\n );\n }\n\n #getPendingTransactions(): TransactionMeta[] {\n return this.#getCurrentChainTransactions().filter(\n (tx) =>\n tx.status === TransactionStatus.submitted &&\n !tx.verifiedOnBlockchain &&\n !tx.isUserOperation,\n );\n }\n\n #warnTransaction(txMeta: TransactionMeta, error: string, message: string) {\n this.#updateTransaction(\n {\n ...txMeta,\n warning: { error, message },\n },\n 'PendingTransactionTracker:#warnTransaction - Warning added',\n );\n }\n\n #failTransaction(txMeta: TransactionMeta, error: Error) {\n log('Transaction failed', txMeta.id, error);\n this.hub.emit('transaction-failed', txMeta, error);\n }\n\n #dropTransaction(txMeta: TransactionMeta) {\n log('Transaction dropped', txMeta.id);\n this.hub.emit('transaction-dropped', txMeta);\n }\n\n #updateTransaction(txMeta: TransactionMeta, note: string) {\n this.hub.emit('transaction-updated', txMeta, note);\n }\n\n async #getTransactionReceipt(\n txHash?: string,\n ): Promise {\n return await query(this.#getEthQuery(), 'getTransactionReceipt', [txHash]);\n }\n\n async #getBlockByHash(\n blockHash: string,\n includeTransactionDetails: boolean,\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): Promise {\n return await query(this.#getEthQuery(), 'getBlockByHash', [\n blockHash,\n includeTransactionDetails,\n ]);\n }\n\n async #getNetworkTransactionCount(address: string): Promise {\n return await query(this.#getEthQuery(), 'getTransactionCount', [address]);\n }\n\n #getCurrentChainTransactions(): TransactionMeta[] {\n const currentChainId = this.#getChainId();\n\n return this.#getTransactions().filter(\n (tx) => tx.chainId === currentChainId,\n );\n }\n}\n"],"mappings":"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","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-6DDVVUJC.mjs.map b/node_modules/@metamask/transaction-controller/dist/chunk-6DDVVUJC.mjs.map -deleted file mode 100644 -index 0bbef05..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-6DDVVUJC.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/utils/nonce.ts"],"sourcesContent":["import { toHex } from '@metamask/controller-utils';\nimport type {\n NonceLock,\n Transaction as NonceTrackerTransaction,\n} from '@metamask/nonce-tracker';\n\nimport { createModuleLogger, projectLogger } from '../logger';\nimport type { TransactionMeta, TransactionStatus } from '../types';\n\nconst log = createModuleLogger(projectLogger, 'nonce');\n\n/**\n * Determine the next nonce to be used for a transaction.\n *\n * @param txMeta - The transaction metadata.\n * @param getNonceLock - An anonymous function that acquires the nonce lock for an address\n * @returns The next hexadecimal nonce to be used for the given transaction, and optionally a function to release the nonce lock.\n */\nexport async function getNextNonce(\n txMeta: TransactionMeta,\n getNonceLock: (address: string) => Promise,\n): Promise<[string, (() => void) | undefined]> {\n const {\n customNonceValue,\n txParams: { from, nonce: existingNonce },\n } = txMeta;\n\n const customNonce = customNonceValue ? toHex(customNonceValue) : undefined;\n\n if (customNonce) {\n log('Using custom nonce', customNonce);\n return [customNonce, undefined];\n }\n\n if (existingNonce) {\n log('Using existing nonce', existingNonce);\n return [existingNonce, undefined];\n }\n\n const nonceLock = await getNonceLock(from);\n const nonce = toHex(nonceLock.nextNonce);\n const releaseLock = nonceLock.releaseLock.bind(nonceLock);\n\n log('Using nonce from nonce tracker', nonce, nonceLock.nonceDetails);\n\n return [nonce, releaseLock];\n}\n\n/**\n * Filter and format transactions for the nonce tracker.\n *\n * @param currentChainId - Chain ID of the current network.\n * @param fromAddress - Address of the account from which the transactions to filter from are sent.\n * @param transactionStatus - Status of the transactions for which to filter.\n * @param transactions - Array of transactionMeta objects that have been prefiltered.\n * @returns Array of transactions formatted for the nonce tracker.\n */\nexport function getAndFormatTransactionsForNonceTracker(\n currentChainId: string,\n fromAddress: string,\n transactionStatus: TransactionStatus,\n transactions: TransactionMeta[],\n): NonceTrackerTransaction[] {\n return transactions\n .filter(\n ({ chainId, isTransfer, isUserOperation, status, txParams: { from } }) =>\n !isTransfer &&\n !isUserOperation &&\n chainId === currentChainId &&\n status === transactionStatus &&\n from.toLowerCase() === fromAddress.toLowerCase(),\n )\n .map(({ status, txParams: { from, gas, value, nonce } }) => {\n // the only value we care about is the nonce\n // but we need to return the other values to satisfy the type\n // TODO: refactor nonceTracker to not require this\n /* istanbul ignore next */\n return {\n status,\n history: [{}],\n txParams: {\n from: from ?? '',\n gas: gas ?? '',\n value: value ?? '',\n nonce: nonce ?? '',\n },\n };\n });\n}\n"],"mappings":";;;;;;AAAA,SAAS,aAAa;AAStB,IAAM,MAAM,mBAAmB,eAAe,OAAO;AASrD,eAAsB,aACpB,QACA,cAC6C;AAC7C,QAAM;AAAA,IACJ;AAAA,IACA,UAAU,EAAE,MAAM,OAAO,cAAc;AAAA,EACzC,IAAI;AAEJ,QAAM,cAAc,mBAAmB,MAAM,gBAAgB,IAAI;AAEjE,MAAI,aAAa;AACf,QAAI,sBAAsB,WAAW;AACrC,WAAO,CAAC,aAAa,MAAS;AAAA,EAChC;AAEA,MAAI,eAAe;AACjB,QAAI,wBAAwB,aAAa;AACzC,WAAO,CAAC,eAAe,MAAS;AAAA,EAClC;AAEA,QAAM,YAAY,MAAM,aAAa,IAAI;AACzC,QAAM,QAAQ,MAAM,UAAU,SAAS;AACvC,QAAM,cAAc,UAAU,YAAY,KAAK,SAAS;AAExD,MAAI,kCAAkC,OAAO,UAAU,YAAY;AAEnE,SAAO,CAAC,OAAO,WAAW;AAC5B;AAWO,SAAS,wCACd,gBACA,aACA,mBACA,cAC2B;AAC3B,SAAO,aACJ;AAAA,IACC,CAAC,EAAE,SAAS,YAAY,iBAAiB,QAAQ,UAAU,EAAE,KAAK,EAAE,MAClE,CAAC,cACD,CAAC,mBACD,YAAY,kBACZ,WAAW,qBACX,KAAK,YAAY,MAAM,YAAY,YAAY;AAAA,EACnD,EACC,IAAI,CAAC,EAAE,QAAQ,UAAU,EAAE,MAAM,KAAK,OAAO,MAAM,EAAE,MAAM;AAK1D,WAAO;AAAA,MACL;AAAA,MACA,SAAS,CAAC,CAAC,CAAC;AAAA,MACZ,UAAU;AAAA,QACR,MAAM,QAAQ;AAAA,QACd,KAAK,OAAO;AAAA,QACZ,OAAO,SAAS;AAAA,QAChB,OAAO,SAAS;AAAA,MAClB;AAAA,IACF;AAAA,EACF,CAAC;AACL;","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-6OLJWLKK.js.map b/node_modules/@metamask/transaction-controller/dist/chunk-6OLJWLKK.js.map -deleted file mode 100644 -index d4d48cb..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-6OLJWLKK.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/helpers/MultichainTrackingHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import EthQuery from '@metamask/eth-query';\nimport type {\n NetworkClientId,\n NetworkController,\n NetworkClient,\n BlockTracker,\n Provider,\n NetworkControllerStateChangeEvent,\n} from '@metamask/network-controller';\nimport type { NonceLock, NonceTracker } from '@metamask/nonce-tracker';\nimport type { Hex } from '@metamask/utils';\nimport { Mutex } from 'async-mutex';\n\nimport { incomingTransactionsLogger as log } from '../logger';\nimport { EtherscanRemoteTransactionSource } from './EtherscanRemoteTransactionSource';\nimport type {\n IncomingTransactionHelper,\n IncomingTransactionOptions,\n} from './IncomingTransactionHelper';\nimport type { PendingTransactionTracker } from './PendingTransactionTracker';\n\n/**\n * Registry of network clients provided by the NetworkController\n */\ntype NetworkClientRegistry = ReturnType<\n NetworkController['getNetworkClientRegistry']\n>;\n\nexport type MultichainTrackingHelperOptions = {\n isMultichainEnabled: boolean;\n provider: Provider;\n nonceTracker: NonceTracker;\n incomingTransactionOptions: IncomingTransactionOptions;\n\n findNetworkClientIdByChainId: NetworkController['findNetworkClientIdByChainId'];\n getNetworkClientById: NetworkController['getNetworkClientById'];\n getNetworkClientRegistry: NetworkController['getNetworkClientRegistry'];\n\n removeIncomingTransactionHelperListeners: (\n IncomingTransactionHelper: IncomingTransactionHelper,\n ) => void;\n removePendingTransactionTrackerListeners: (\n pendingTransactionTracker: PendingTransactionTracker,\n ) => void;\n createNonceTracker: (opts: {\n provider: Provider;\n blockTracker: BlockTracker;\n chainId?: Hex;\n }) => NonceTracker;\n createIncomingTransactionHelper: (opts: {\n blockTracker: BlockTracker;\n etherscanRemoteTransactionSource: EtherscanRemoteTransactionSource;\n chainId?: Hex;\n }) => IncomingTransactionHelper;\n createPendingTransactionTracker: (opts: {\n provider: Provider;\n blockTracker: BlockTracker;\n chainId?: Hex;\n }) => PendingTransactionTracker;\n onNetworkStateChange: (\n listener: (\n ...payload: NetworkControllerStateChangeEvent['payload']\n ) => void,\n ) => void;\n};\n\nexport class MultichainTrackingHelper {\n #isMultichainEnabled: boolean;\n\n readonly #provider: Provider;\n\n readonly #nonceTracker: NonceTracker;\n\n readonly #incomingTransactionOptions: IncomingTransactionOptions;\n\n readonly #findNetworkClientIdByChainId: NetworkController['findNetworkClientIdByChainId'];\n\n readonly #getNetworkClientById: NetworkController['getNetworkClientById'];\n\n readonly #getNetworkClientRegistry: NetworkController['getNetworkClientRegistry'];\n\n readonly #removeIncomingTransactionHelperListeners: (\n IncomingTransactionHelper: IncomingTransactionHelper,\n ) => void;\n\n readonly #removePendingTransactionTrackerListeners: (\n pendingTransactionTracker: PendingTransactionTracker,\n ) => void;\n\n readonly #createNonceTracker: (opts: {\n provider: Provider;\n blockTracker: BlockTracker;\n chainId?: Hex;\n }) => NonceTracker;\n\n readonly #createIncomingTransactionHelper: (opts: {\n blockTracker: BlockTracker;\n chainId?: Hex;\n etherscanRemoteTransactionSource: EtherscanRemoteTransactionSource;\n }) => IncomingTransactionHelper;\n\n readonly #createPendingTransactionTracker: (opts: {\n provider: Provider;\n blockTracker: BlockTracker;\n chainId?: Hex;\n }) => PendingTransactionTracker;\n\n readonly #nonceMutexesByChainId = new Map>();\n\n readonly #trackingMap: Map<\n NetworkClientId,\n {\n nonceTracker: NonceTracker;\n pendingTransactionTracker: PendingTransactionTracker;\n incomingTransactionHelper: IncomingTransactionHelper;\n }\n > = new Map();\n\n readonly #etherscanRemoteTransactionSourcesMap: Map<\n Hex,\n EtherscanRemoteTransactionSource\n > = new Map();\n\n constructor({\n isMultichainEnabled,\n provider,\n nonceTracker,\n incomingTransactionOptions,\n findNetworkClientIdByChainId,\n getNetworkClientById,\n getNetworkClientRegistry,\n removeIncomingTransactionHelperListeners,\n removePendingTransactionTrackerListeners,\n createNonceTracker,\n createIncomingTransactionHelper,\n createPendingTransactionTracker,\n onNetworkStateChange,\n }: MultichainTrackingHelperOptions) {\n this.#isMultichainEnabled = isMultichainEnabled;\n this.#provider = provider;\n this.#nonceTracker = nonceTracker;\n this.#incomingTransactionOptions = incomingTransactionOptions;\n\n this.#findNetworkClientIdByChainId = findNetworkClientIdByChainId;\n this.#getNetworkClientById = getNetworkClientById;\n this.#getNetworkClientRegistry = getNetworkClientRegistry;\n\n this.#removeIncomingTransactionHelperListeners =\n removeIncomingTransactionHelperListeners;\n this.#removePendingTransactionTrackerListeners =\n removePendingTransactionTrackerListeners;\n this.#createNonceTracker = createNonceTracker;\n this.#createIncomingTransactionHelper = createIncomingTransactionHelper;\n this.#createPendingTransactionTracker = createPendingTransactionTracker;\n\n onNetworkStateChange((_, patches) => {\n if (this.#isMultichainEnabled) {\n const networkClients = this.#getNetworkClientRegistry();\n patches.forEach(({ op, path }) => {\n if (op === 'remove' && path[0] === 'networkConfigurations') {\n const networkClientId = path[1] as NetworkClientId;\n delete networkClients[networkClientId];\n }\n });\n\n this.#refreshTrackingMap(networkClients);\n }\n });\n }\n\n initialize() {\n if (!this.#isMultichainEnabled) {\n return;\n }\n const networkClients = this.#getNetworkClientRegistry();\n this.#refreshTrackingMap(networkClients);\n }\n\n has(networkClientId: NetworkClientId) {\n return this.#trackingMap.has(networkClientId);\n }\n\n getEthQuery({\n networkClientId,\n chainId,\n }: {\n networkClientId?: NetworkClientId;\n chainId?: Hex;\n } = {}): EthQuery {\n if (!this.#isMultichainEnabled) {\n return new EthQuery(this.getProvider());\n }\n return new EthQuery(this.getProvider({ networkClientId, chainId }));\n }\n\n getProvider({\n networkClientId,\n chainId,\n }: {\n networkClientId?: NetworkClientId;\n chainId?: Hex;\n } = {}): Provider {\n if (!this.#isMultichainEnabled) {\n return this.#provider;\n }\n\n const networkClient = this.#getNetworkClient({\n networkClientId,\n chainId,\n });\n\n return networkClient?.provider || this.#provider;\n }\n\n /**\n * Gets the mutex intended to guard the nonceTracker for a particular chainId and key .\n *\n * @param opts - The options object.\n * @param opts.chainId - The hex chainId.\n * @param opts.key - The hex address (or constant) pertaining to the chainId\n * @returns Mutex instance for the given chainId and key pair\n */\n async acquireNonceLockForChainIdKey({\n chainId,\n key = 'global',\n }: {\n chainId: Hex;\n key?: string;\n }): Promise<() => void> {\n let nonceMutexesForChainId = this.#nonceMutexesByChainId.get(chainId);\n if (!nonceMutexesForChainId) {\n nonceMutexesForChainId = new Map();\n this.#nonceMutexesByChainId.set(chainId, nonceMutexesForChainId);\n }\n let nonceMutexForKey = nonceMutexesForChainId.get(key);\n if (!nonceMutexForKey) {\n nonceMutexForKey = new Mutex();\n nonceMutexesForChainId.set(key, nonceMutexForKey);\n }\n\n return await nonceMutexForKey.acquire();\n }\n\n /**\n * Gets the next nonce according to the nonce-tracker.\n * Ensure `releaseLock` is called once processing of the `nonce` value is complete.\n *\n * @param address - The hex string address for the transaction.\n * @param networkClientId - The network client ID for the transaction, used to fetch the correct nonce tracker.\n * @returns object with the `nextNonce` `nonceDetails`, and the releaseLock.\n */\n async getNonceLock(\n address: string,\n networkClientId?: NetworkClientId,\n ): Promise {\n let releaseLockForChainIdKey: (() => void) | undefined;\n let nonceTracker = this.#nonceTracker;\n if (networkClientId && this.#isMultichainEnabled) {\n const networkClient = this.#getNetworkClientById(networkClientId);\n releaseLockForChainIdKey = await this.acquireNonceLockForChainIdKey({\n chainId: networkClient.configuration.chainId,\n key: address,\n });\n const trackers = this.#trackingMap.get(networkClientId);\n if (!trackers) {\n throw new Error('missing nonceTracker for networkClientId');\n }\n nonceTracker = trackers.nonceTracker;\n }\n\n // Acquires the lock for the chainId + address and the nonceLock from the nonceTracker, then\n // couples them together by replacing the nonceLock's releaseLock method with\n // an anonymous function that calls releases both the original nonceLock and the\n // lock for the chainId.\n try {\n const nonceLock = await nonceTracker.getNonceLock(address);\n return {\n ...nonceLock,\n releaseLock: () => {\n nonceLock.releaseLock();\n releaseLockForChainIdKey?.();\n },\n };\n } catch (err) {\n releaseLockForChainIdKey?.();\n throw err;\n }\n }\n\n startIncomingTransactionPolling(networkClientIds: NetworkClientId[] = []) {\n networkClientIds.forEach((networkClientId) => {\n this.#trackingMap.get(networkClientId)?.incomingTransactionHelper.start();\n });\n }\n\n stopIncomingTransactionPolling(networkClientIds: NetworkClientId[] = []) {\n networkClientIds.forEach((networkClientId) => {\n this.#trackingMap.get(networkClientId)?.incomingTransactionHelper.stop();\n });\n }\n\n stopAllIncomingTransactionPolling() {\n for (const [, trackers] of this.#trackingMap) {\n trackers.incomingTransactionHelper.stop();\n }\n }\n\n async updateIncomingTransactions(networkClientIds: NetworkClientId[] = []) {\n const promises = await Promise.allSettled(\n networkClientIds.map(async (networkClientId) => {\n return await this.#trackingMap\n .get(networkClientId)\n ?.incomingTransactionHelper.update();\n }),\n );\n\n promises\n .filter((result) => result.status === 'rejected')\n .forEach((result) => {\n log(\n 'failed to update incoming transactions',\n (result as PromiseRejectedResult).reason,\n );\n });\n }\n\n checkForPendingTransactionAndStartPolling = () => {\n for (const [, trackers] of this.#trackingMap) {\n trackers.pendingTransactionTracker.startIfPendingTransactions();\n }\n };\n\n stopAllTracking() {\n for (const [networkClientId] of this.#trackingMap) {\n this.#stopTrackingByNetworkClientId(networkClientId);\n }\n }\n\n #refreshTrackingMap = (networkClients: NetworkClientRegistry) => {\n this.#refreshEtherscanRemoteTransactionSources(networkClients);\n\n const networkClientIds = Object.keys(networkClients);\n const existingNetworkClientIds = Array.from(this.#trackingMap.keys());\n\n // Remove tracking for NetworkClientIds that no longer exist\n const networkClientIdsToRemove = existingNetworkClientIds.filter(\n (id) => !networkClientIds.includes(id),\n );\n networkClientIdsToRemove.forEach((id) => {\n this.#stopTrackingByNetworkClientId(id);\n });\n\n // Start tracking new NetworkClientIds from the registry\n const networkClientIdsToAdd = networkClientIds.filter(\n (id) => !existingNetworkClientIds.includes(id),\n );\n networkClientIdsToAdd.forEach((id) => {\n this.#startTrackingByNetworkClientId(id);\n });\n };\n\n #stopTrackingByNetworkClientId(networkClientId: NetworkClientId) {\n const trackers = this.#trackingMap.get(networkClientId);\n if (trackers) {\n trackers.pendingTransactionTracker.stop();\n this.#removePendingTransactionTrackerListeners(\n trackers.pendingTransactionTracker,\n );\n trackers.incomingTransactionHelper.stop();\n this.#removeIncomingTransactionHelperListeners(\n trackers.incomingTransactionHelper,\n );\n this.#trackingMap.delete(networkClientId);\n }\n }\n\n #startTrackingByNetworkClientId(networkClientId: NetworkClientId) {\n const trackers = this.#trackingMap.get(networkClientId);\n if (trackers) {\n return;\n }\n\n const {\n provider,\n blockTracker,\n configuration: { chainId },\n } = this.#getNetworkClientById(networkClientId);\n\n let etherscanRemoteTransactionSource =\n this.#etherscanRemoteTransactionSourcesMap.get(chainId);\n if (!etherscanRemoteTransactionSource) {\n etherscanRemoteTransactionSource = new EtherscanRemoteTransactionSource({\n includeTokenTransfers:\n this.#incomingTransactionOptions.includeTokenTransfers,\n });\n this.#etherscanRemoteTransactionSourcesMap.set(\n chainId,\n etherscanRemoteTransactionSource,\n );\n }\n\n const nonceTracker = this.#createNonceTracker({\n provider,\n blockTracker,\n chainId,\n });\n\n const incomingTransactionHelper = this.#createIncomingTransactionHelper({\n blockTracker,\n etherscanRemoteTransactionSource,\n chainId,\n });\n\n const pendingTransactionTracker = this.#createPendingTransactionTracker({\n provider,\n blockTracker,\n chainId,\n });\n\n this.#trackingMap.set(networkClientId, {\n nonceTracker,\n incomingTransactionHelper,\n pendingTransactionTracker,\n });\n }\n\n #refreshEtherscanRemoteTransactionSources = (\n networkClients: NetworkClientRegistry,\n ) => {\n // this will be prettier when we have consolidated network clients with a single chainId:\n // check if there are still other network clients using the same chainId\n // if not remove the etherscanRemoteTransaction source from the map\n const chainIdsInRegistry = new Set();\n Object.values(networkClients).forEach((networkClient) =>\n chainIdsInRegistry.add(networkClient.configuration.chainId),\n );\n const existingChainIds = Array.from(\n this.#etherscanRemoteTransactionSourcesMap.keys(),\n );\n const chainIdsToRemove = existingChainIds.filter(\n (chainId) => !chainIdsInRegistry.has(chainId),\n );\n\n chainIdsToRemove.forEach((chainId) => {\n this.#etherscanRemoteTransactionSourcesMap.delete(chainId);\n });\n };\n\n #getNetworkClient({\n networkClientId,\n chainId,\n }: {\n networkClientId?: NetworkClientId;\n chainId?: Hex;\n } = {}): NetworkClient | undefined {\n let networkClient: NetworkClient | undefined;\n\n if (networkClientId) {\n try {\n networkClient = this.#getNetworkClientById(networkClientId);\n } catch (err) {\n log('failed to get network client by networkClientId');\n }\n }\n if (!networkClient && chainId) {\n try {\n const networkClientIdForChainId =\n this.#findNetworkClientIdByChainId(chainId);\n networkClient = this.#getNetworkClientById(networkClientIdForChainId);\n } catch (err) {\n log('failed to get network client by chainId');\n }\n }\n return networkClient;\n }\n}\n"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-6SJYXSF3.mjs.map b/node_modules/@metamask/transaction-controller/dist/chunk-6SJYXSF3.mjs.map -deleted file mode 100644 -index 82d5415..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-6SJYXSF3.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type { AccessList } from '@ethereumjs/tx';\nimport type EthQuery from '@metamask/eth-query';\nimport type { GasFeeState } from '@metamask/gas-fee-controller';\nimport type { NetworkClientId, Provider } from '@metamask/network-controller';\nimport type { Hex, Json } from '@metamask/utils';\nimport type { Operation } from 'fast-json-patch';\n\n/**\n * Given a record, ensures that each property matches the `Json` type.\n */\n// TODO: Either fix this lint violation or explain why it's necessary to ignore.\n// eslint-disable-next-line @typescript-eslint/naming-convention\ntype MakeJsonCompatible = T extends Json\n ? T\n : {\n [K in keyof T]: T[K] extends Json ? T[K] : never;\n };\n\n/**\n * `Json` from `@metamask/utils` is defined as a recursive type alias, but\n * `Operation` is defined as an interface, and the two are not compatible with\n * each other. Therefore, this is a variant of Operation from `fast-json-patch`\n * which is guaranteed to be type-compatible with `Json`.\n */\ntype JsonCompatibleOperation = MakeJsonCompatible;\n\n/**\n * Representation of transaction metadata.\n */\nexport type TransactionMeta = TransactionMetaBase &\n (\n | {\n status: Exclude;\n }\n | {\n status: TransactionStatus.failed;\n error: TransactionError;\n }\n );\n\n/**\n * Information about a single transaction such as status and block number.\n */\ntype TransactionMetaBase = {\n /**\n * ID of the transaction that approved the swap token transfer.\n */\n approvalTxId?: string;\n\n /**\n * Unique ID to prevent duplicate requests.\n */\n actionId?: string;\n\n /**\n * Base fee of the block as a hex value, introduced in EIP-1559.\n */\n baseFeePerGas?: Hex;\n\n /**\n * Number of the block where the transaction has been included.\n */\n blockNumber?: string;\n\n /**\n * The timestamp for when the block was collated.\n */\n blockTimestamp?: string;\n\n /**\n * Network code as per EIP-155 for this transaction.\n */\n chainId: Hex;\n\n /**\n * A string representing a name of transaction contract method.\n */\n contractMethodName?: string;\n\n /**\n * The balance of the token that is being sent.\n */\n currentTokenBalance?: string;\n\n /**\n * Unique ID for custodian transaction.\n */\n custodyId?: string;\n\n /**\n * Custodian transaction status.\n */\n custodyStatus?: string;\n\n /** The optional custom nonce override as a decimal string. */\n customNonceValue?: string;\n\n /**\n * The custom token amount is the amount set by the user.\n */\n customTokenAmount?: string;\n\n /**\n * The dapp proposed token amount.\n */\n dappProposedTokenAmount?: string;\n\n /**\n * Gas values provided by the dApp.\n */\n dappSuggestedGasFees?: DappSuggestedGasFees;\n\n /**\n * The initial gas values set when the transaction was first created.\n */\n defaultGasEstimates?: DefaultGasEstimates;\n\n /**\n * String to indicate what device the transaction was confirmed on.\n */\n deviceConfirmedOn?: WalletDevice;\n\n /**\n * The address of the token being received of swap transaction.\n */\n destinationTokenAddress?: string;\n\n /**\n * The raw amount of the destination token\n */\n destinationTokenAmount?: string;\n\n /**\n * The decimals of the token being received of swap transaction.\n */\n destinationTokenDecimals?: number;\n\n /**\n * The symbol of the token being received with swap.\n */\n destinationTokenSymbol?: string;\n\n /**\n * The estimated base fee of the transaction.\n */\n estimatedBaseFee?: string;\n\n /**\n * Which estimate level that the API suggested.\n */\n estimateSuggested?: string;\n\n /**\n * Which estimate level was used\n */\n estimateUsed?: string;\n\n /**\n * The chosen amount which will be the same as the originally proposed token\n * amount if the user does not edit the amount or will be a custom token\n * amount set by the user.\n */\n finalApprovalAmount?: string;\n\n /**\n * The number of the latest block when the transaction submit was first retried.\n */\n firstRetryBlockNumber?: string;\n\n /** Alternate EIP-1559 gas fee estimates for multiple priority levels. */\n gasFeeEstimates?: GasFeeEstimates;\n\n /** Whether the gas fee estimates have been checked at least once. */\n gasFeeEstimatesLoaded?: boolean;\n\n /**\n * A hex string of the transaction hash, used to identify the transaction on the network.\n */\n hash?: string;\n\n /**\n * A history of mutations to TransactionMeta.\n */\n history?: TransactionHistory;\n\n /**\n * Generated UUID associated with this transaction.\n */\n id: string;\n\n /**\n * Whether the transaction is a transfer.\n */\n isTransfer?: boolean;\n\n /**\n * Whether the transaction entry is generated from a user operation.\n */\n isUserOperation?: boolean;\n\n /**\n * Additional gas fees to cover the cost of persisting data on layer 1 for layer 2 networks.\n */\n layer1GasFee?: Hex;\n\n /**\n * The ID of the network client used by the transaction.\n */\n networkClientId?: NetworkClientId;\n\n /**\n * Network code as per EIP-155 for this transaction\n *\n * @deprecated Use `chainId` instead.\n */\n readonly networkID?: string;\n\n /**\n * Origin this transaction was sent from.\n */\n origin?: string;\n\n /**\n * The original dapp proposed token approval amount before edit by user.\n */\n originalApprovalAmount?: string;\n\n /**\n * The original gas estimation of the transaction.\n */\n originalGasEstimate?: string;\n\n /**\n * When we speed up a transaction, we set the type as Retry and we lose\n * information about type of transaction that is being set up, so we use\n * original type to track that information.\n */\n originalType?: TransactionType;\n\n /**\n * Account transaction balance after swap.\n */\n postTxBalance?: string;\n\n /**\n * Account transaction balance before swap.\n */\n preTxBalance?: string;\n\n /**\n * The previous gas properties before they were updated.\n */\n previousGas?: {\n /**\n * Maxmimum number of units of gas to use for this transaction.\n */\n gasLimit?: string;\n\n /**\n * Maximum amount per gas to pay for the transaction, including the priority fee.\n */\n maxFeePerGas?: string;\n\n /**\n * Maximum amount per gas to give to validator as incentive.\n */\n maxPriorityFeePerGas?: string;\n };\n\n /**\n * The transaction's 'r' value as a hex string.\n */\n r?: string;\n\n /**\n * Hex representation of the underlying transaction.\n */\n rawTx?: string;\n\n /**\n * When the transaction is dropped, this is the replacement transaction hash.\n */\n replacedBy?: string;\n\n /**\n * When the transaction is dropped, this is the replacement transaction ID.\n */\n replacedById?: string;\n\n /**\n * The number of times that the transaction submit has been retried.\n */\n retryCount?: number;\n\n /**\n * The transaction's 's' value as a hex string.\n */\n s?: string;\n\n /**\n * Response from security validator.\n */\n securityAlertResponse?: SecurityAlertResponse;\n\n /**\n * Response from security provider.\n */\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n securityProviderResponse?: Record;\n\n /**\n * An array of entries that describe the user's journey through the send flow.\n * This is purely attached to state logs for troubleshooting and support.\n */\n sendFlowHistory?: SendFlowHistoryEntry[];\n\n /**\n * Simulation data for the transaction used to predict its outcome.\n */\n simulationData?: SimulationData;\n\n /**\n * If the gas estimation fails, an object containing error and block information.\n */\n simulationFails?: {\n reason?: string;\n errorKey?: string;\n debug: {\n blockNumber?: string;\n blockGasLimit?: string;\n };\n };\n\n /**\n * The time the transaction was submitted to the network, in Unix epoch time (ms).\n */\n submittedTime?: number;\n\n /**\n * The address of the token being swapped\n */\n sourceTokenAddress?: string;\n\n /**\n * The raw amount of the source swap token\n */\n sourceTokenAmount?: string;\n\n /**\n * The decimals of the token being swapped.\n */\n sourceTokenDecimals?: number;\n\n /**\n * The symbol of the token being swapped.\n */\n sourceTokenSymbol?: string;\n\n /**\n * The address of the swap recipient.\n */\n swapAndSendRecipient?: string;\n\n /**\n * The metadata of the swap transaction.\n */\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n swapMetaData?: Record;\n\n /**\n * The value of the token being swapped.\n */\n swapTokenValue?: string;\n\n /**\n * Timestamp associated with this transaction.\n */\n time: number;\n\n /**\n * Whether transaction recipient is a smart contract.\n */\n toSmartContract?: boolean;\n\n /**\n * Additional transfer information.\n */\n transferInformation?: {\n contractAddress: string;\n decimals: number;\n symbol: string;\n };\n\n /**\n * Underlying Transaction object.\n */\n txParams: TransactionParams;\n\n /**\n * Transaction receipt.\n */\n txReceipt?: TransactionReceipt;\n\n /**\n * The type of transaction such as `cancel` or `swap`.\n */\n type?: TransactionType;\n\n /**\n * The gas limit supplied by user.\n */\n userEditedGasLimit?: boolean;\n\n /**\n * Estimate level user selected.\n */\n userFeeLevel?: string;\n\n /**\n * The transaction's 'v' value as a hex string.\n */\n v?: string;\n\n /**\n * Whether the transaction is verified on the blockchain.\n */\n verifiedOnBlockchain?: boolean;\n\n /**\n * Warning information for the transaction.\n */\n warning?: {\n error: string;\n message: string;\n };\n};\n\nexport type SendFlowHistoryEntry = {\n /**\n * String to indicate user interaction information.\n */\n entry: string;\n\n /**\n * Timestamp associated with this entry.\n */\n timestamp: number;\n};\n\n/**\n * Represents the status of a transaction within the wallet.\n * Each status reflects the state of the transaction internally,\n * with some statuses corresponding to the transaction's state on the network.\n *\n * The typical transaction lifecycle follows this state machine:\n * unapproved -> approved -> signed -> submitted -> FINAL_STATE\n * where FINAL_STATE is one of: confirmed, failed, dropped, or rejected.\n */\nexport enum TransactionStatus {\n /**\n * The initial state of a transaction before user approval.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n unapproved = 'unapproved',\n\n /**\n * The transaction has been approved by the user but is not yet signed.\n * This status is usually brief but may be longer for scenarios like hardware wallet usage.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n approved = 'approved',\n\n /**\n * The transaction is signed and in the process of being submitted to the network.\n * This status is typically short-lived but can be longer for certain cases, such as smart transactions.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n signed = 'signed',\n\n /**\n * The transaction has been submitted to the network and is awaiting confirmation.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n submitted = 'submitted',\n\n /**\n * The transaction has been successfully executed and confirmed on the blockchain.\n * This is a final state.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n confirmed = 'confirmed',\n\n /**\n * The transaction encountered an error during execution on the blockchain and failed.\n * This is a final state.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n failed = 'failed',\n\n /**\n * The transaction was superseded by another transaction, resulting in its dismissal.\n * This is a final state.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n dropped = 'dropped',\n\n /**\n * The transaction was rejected by the user and not processed further.\n * This is a final state.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n rejected = 'rejected',\n\n /**\n * @deprecated This status is no longer used.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n cancelled = 'cancelled',\n}\n\n/**\n * Options for wallet device.\n */\nexport enum WalletDevice {\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n MM_MOBILE = 'metamask_mobile',\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n MM_EXTENSION = 'metamask_extension',\n OTHER = 'other_device',\n}\n\n/**\n * The type of the transaction.\n */\nexport enum TransactionType {\n /**\n * A transaction sending a network's native asset to a recipient.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n cancel = 'cancel',\n\n /**\n * A transaction that is interacting with a smart contract's methods that we\n * have not treated as a special case, such as approve, transfer, and\n * transferfrom.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n contractInteraction = 'contractInteraction',\n\n /**\n * A transaction that deployed a smart contract.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n deployContract = 'contractDeployment',\n\n /**\n * A transaction for Ethereum decryption.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ethDecrypt = 'eth_decrypt',\n\n /**\n * A transaction for getting an encryption public key.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ethGetEncryptionPublicKey = 'eth_getEncryptionPublicKey',\n\n /**\n * An incoming (deposit) transaction.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n incoming = 'incoming',\n\n /**\n * A transaction for personal sign.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n personalSign = 'personal_sign',\n\n /**\n * When a transaction is failed it can be retried by\n * resubmitting the same transaction with a higher gas fee. This type is also used\n * to speed up pending transactions. This is accomplished by creating a new tx with\n * the same nonce and higher gas fees.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n retry = 'retry',\n\n /**\n * A transaction sending a network's native asset to a recipient.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n simpleSend = 'simpleSend',\n\n /**\n * A transaction that is signing typed data.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n signTypedData = 'eth_signTypedData',\n\n /**\n * A transaction sending a network's native asset to a recipient.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n smart = 'smart',\n\n /**\n * A transaction swapping one token for another through MetaMask Swaps.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n swap = 'swap',\n\n /**\n * A transaction swapping one token for another through MetaMask Swaps, then sending the swapped token to a recipient.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n swapAndSend = 'swapAndSend',\n\n /**\n * Similar to the approve type, a swap approval is a special case of ERC20\n * approve method that requests an allowance of the token to spend on behalf\n * of the user for the MetaMask Swaps contract. The first swap for any token\n * will have an accompanying swapApproval transaction.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n swapApproval = 'swapApproval',\n\n /**\n * A token transaction requesting an allowance of the token to spend on\n * behalf of the user.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n tokenMethodApprove = 'approve',\n\n /**\n * A token transaction transferring tokens from an account that the sender\n * has an allowance of. The method is prefixed with safe because when calling\n * this method the contract checks to ensure that the receiver is an address\n * capable of handling the token being sent.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n tokenMethodSafeTransferFrom = 'safetransferfrom',\n\n /**\n * A token transaction where the user is sending tokens that they own to\n * another address.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n tokenMethodTransfer = 'transfer',\n\n /**\n * A token transaction transferring tokens from an account that the sender\n * has an allowance of. For more information on allowances, see the approve\n * type.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n tokenMethodTransferFrom = 'transferfrom',\n\n /**\n * A token transaction requesting an allowance of all of a user's tokens to\n * spend on behalf of the user.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n tokenMethodSetApprovalForAll = 'setapprovalforall',\n\n /**\n * Increase the allowance by a given increment\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n tokenMethodIncreaseAllowance = 'increaseAllowance',\n}\n\n/**\n * Standard data concerning a transaction to be processed by the blockchain.\n */\nexport type TransactionParams = {\n /**\n * A list of addresses and storage keys that the transaction plans to access.\n */\n accessList?: AccessList;\n\n /**\n * Network ID as per EIP-155.\n */\n chainId?: Hex;\n\n /**\n * Data to pass with this transaction.\n */\n data?: string;\n\n /**\n * Error message for gas estimation failure.\n */\n estimateGasError?: string;\n\n /**\n * Estimated base fee for this transaction.\n */\n estimatedBaseFee?: string;\n\n /**\n * Which estimate level that the API suggested.\n */\n estimateSuggested?: string;\n\n /**\n * Which estimate level was used\n */\n estimateUsed?: string;\n\n /**\n * Address to send this transaction from.\n */\n from: string;\n\n /**\n * same as gasLimit?\n */\n gas?: string;\n\n /**\n * Maxmimum number of units of gas to use for this transaction.\n */\n gasLimit?: string;\n\n /**\n * Price per gas for legacy txs\n */\n gasPrice?: string;\n\n /**\n * Gas used in the transaction.\n */\n gasUsed?: string;\n\n /**\n * Maximum amount per gas to pay for the transaction, including the priority\n * fee.\n */\n maxFeePerGas?: string;\n\n /**\n * Maximum amount per gas to give to validator as incentive.\n */\n maxPriorityFeePerGas?: string;\n\n /**\n * Unique number to prevent replay attacks.\n */\n nonce?: string;\n\n /**\n * Address to send this transaction to.\n */\n to?: string;\n\n /**\n * Value associated with this transaction.\n */\n value?: string;\n\n /**\n * Type of transaction.\n * 0x0 indicates a legacy transaction.\n */\n type?: string;\n};\n\n/**\n * Standard data concerning a transaction processed by the blockchain.\n */\nexport type TransactionReceipt = {\n /**\n * The block hash of the block that this transaction was included in.\n */\n blockHash?: string;\n\n /**\n * The block number of the block that this transaction was included in.\n */\n blockNumber?: string;\n\n /**\n * Effective gas price the transaction was charged at.\n */\n effectiveGasPrice?: string;\n\n /**\n * Gas used in the transaction.\n */\n gasUsed?: string;\n\n /**\n * Total used gas in hex.\n */\n l1Fee?: string;\n\n /**\n * All the logs emitted by this transaction.\n */\n logs?: Log[];\n\n /**\n * The status of the transaction.\n */\n status?: string;\n\n /**\n * The hexadecimal index of this transaction in the list of transactions included in the block this transaction was mined in.\n */\n transactionIndex?: string;\n};\n\n/**\n * Represents an event that has been included in a transaction using the EVM `LOG` opcode.\n */\nexport type Log = {\n /**\n * Address of the contract that generated log.\n */\n address?: string;\n /**\n * List of topics for log.\n */\n topics?: string;\n};\n\n/**\n * The configuration required to fetch transaction data from a RemoteTransactionSource.\n */\n// This interface was created before this ESLint rule was added.\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface RemoteTransactionSourceRequest {\n /**\n * The address of the account to fetch transactions for.\n */\n address: string;\n\n /**\n * The chainId of the current network.\n */\n currentChainId: Hex;\n\n /**\n * Block number to start fetching transactions from.\n */\n fromBlock?: number;\n\n /**\n * Maximum number of transactions to retrieve.\n */\n limit?: number;\n}\n\n/**\n * An object capable of fetching transaction data from a remote source.\n * Used by the IncomingTransactionHelper to retrieve remote transaction data.\n */\n// This interface was created before this ESLint rule was added.\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface RemoteTransactionSource {\n /**\n * @param chainId - The chainId of the current network.\n * @returns Whether the remote transaction source supports the specified network.\n */\n isSupportedNetwork: (chainId: Hex) => boolean;\n\n /**\n * @returns An array of additional keys to use when caching the last fetched block number.\n */\n getLastBlockVariations?: () => string[];\n\n /**\n * @param request - A request object containing data such as the address and chain ID.\n * @returns An array of transaction metadata for the retrieved transactions.\n */\n fetchTransactions: (\n request: RemoteTransactionSourceRequest,\n ) => Promise;\n}\n\n/**\n * Gas values initially suggested by the dApp.\n */\nexport type DappSuggestedGasFees = {\n gas?: string;\n gasPrice?: string;\n maxFeePerGas?: string;\n maxPriorityFeePerGas?: string;\n};\n\n/**\n * Gas values saved by the user for a specific chain.\n */\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface SavedGasFees {\n maxBaseFee: string;\n priorityFee: string;\n}\n\n/**\n * A transaction history operation that includes a note and timestamp.\n */\ntype ExtendedHistoryOperation = JsonCompatibleOperation & {\n note?: string;\n timestamp?: number;\n};\n\n/**\n * A transaction history entry that includes the ExtendedHistoryOperation as the first element.\n */\nexport type TransactionHistoryEntry = [\n ExtendedHistoryOperation,\n ...JsonCompatibleOperation[],\n];\n\n/**\n * A transaction history that includes the transaction meta as the first element.\n * And the rest of the elements are the operation arrays that were applied to the transaction meta.\n */\nexport type TransactionHistory = [\n TransactionMeta,\n ...TransactionHistoryEntry[],\n];\n\n/**\n * Result of inferring the transaction type.\n */\nexport type InferTransactionTypeResult = {\n /**\n * The contract code, in hex format if it exists. '0x0' or\n * '0x' are also indicators of non-existent contract code.\n */\n getCodeResponse?: string | null;\n\n /**\n * The type of transaction\n */\n type: TransactionType;\n};\n\n/**\n * A function for verifying a transaction, whether it is malicious or not.\n */\nexport type SecurityProviderRequest = (\n requestData: TransactionMeta,\n messageType: string,\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n) => Promise;\n\n/**\n * Specifies the shape of the base transaction parameters.\n * Added in EIP-2718.\n */\nexport enum TransactionEnvelopeType {\n /**\n * A legacy transaction, the very first type.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n legacy = '0x0',\n\n /**\n * EIP-2930 defined the access list transaction type that allowed for\n * specifying the state that a transaction would act upon in advance and\n * theoretically save on gas fees.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n accessList = '0x1',\n\n /**\n * The type introduced comes from EIP-1559, Fee Market describes the addition\n * of a baseFee to blocks that will be burned instead of distributed to\n * miners. Transactions of this type have both a maxFeePerGas (maximum total\n * amount in gwei per gas to spend on the transaction) which is inclusive of\n * the maxPriorityFeePerGas (maximum amount of gwei per gas from the\n * transaction fee to distribute to miner).\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n feeMarket = '0x2',\n}\n\n/**\n * The source of the gas fee parameters on a transaction.\n */\nexport enum UserFeeLevel {\n CUSTOM = 'custom',\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n DAPP_SUGGESTED = 'dappSuggested',\n MEDIUM = 'medium',\n}\n\n/**\n * Initial gas values set when the transaction was first created.\n */\nexport type DefaultGasEstimates = {\n /**\n * Source of the gas fee values, such as `dappSuggested` or `medium`.\n */\n estimateType?: string;\n\n /**\n * Maxmimum number of units of gas to use for this transaction.\n */\n gas?: string;\n\n /**\n * Price per gas for legacy transactions.\n */\n gasPrice?: string;\n\n /**\n * Maximum amount per gas to pay for the transaction, including the priority fee.\n */\n maxFeePerGas?: string;\n\n /**\n * Maximum amount per gas to give to validator as incentive.\n */\n maxPriorityFeePerGas?: string;\n};\n\n/**\n * Data concerning an error while processing a transaction.\n */\nexport type TransactionError = {\n /**\n * A descriptive error name.\n */\n name: string;\n\n /**\n * A descriptive error message providing details about the encountered error.\n */\n message: string;\n\n /**\n * The stack trace associated with the error, if available.\n */\n stack?: string;\n\n /**\n * An optional error code associated with the error.\n */\n code?: string;\n\n /**\n * The rpc property holds additional information related to the error.\n */\n // We are intentionally using `any` here instead of `Json` because it causes\n // `WritableDraft` from Immer to cause TypeScript to error\n // with \"Type instantiation is excessively deep and possibly infinite\". See:\n // \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rpc?: any;\n};\n\n/**\n * Type for security alert response from transaction validator.\n */\nexport type SecurityAlertResponse = {\n reason: string;\n features?: string[];\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n result_type: string;\n providerRequestsCount?: Record;\n};\n\n/** Alternate priority levels for which values are provided in gas fee estimates. */\nexport enum GasFeeEstimateLevel {\n Low = 'low',\n Medium = 'medium',\n High = 'high',\n}\n\n/** Type of gas fee estimate generated by a GasFeeFlow. */\nexport enum GasFeeEstimateType {\n FeeMarket = 'fee-market',\n Legacy = 'legacy',\n GasPrice = 'eth_gasPrice',\n}\n\n/** Gas fee estimates for a specific priority level. */\nexport type FeeMarketGasFeeEstimateForLevel = {\n /** Maximum amount to pay per gas. */\n maxFeePerGas: Hex;\n\n /** Maximum amount per gas to give to the validator as an incentive. */\n maxPriorityFeePerGas: Hex;\n};\n\n/** Gas fee estimates for a EIP-1559 transaction. */\nexport type FeeMarketGasFeeEstimates = {\n type: GasFeeEstimateType.FeeMarket;\n [GasFeeEstimateLevel.Low]: FeeMarketGasFeeEstimateForLevel;\n [GasFeeEstimateLevel.Medium]: FeeMarketGasFeeEstimateForLevel;\n [GasFeeEstimateLevel.High]: FeeMarketGasFeeEstimateForLevel;\n};\n\n/** Gas fee estimates for a legacy transaction. */\nexport type LegacyGasFeeEstimates = {\n type: GasFeeEstimateType.Legacy;\n [GasFeeEstimateLevel.Low]: Hex;\n [GasFeeEstimateLevel.Medium]: Hex;\n [GasFeeEstimateLevel.High]: Hex;\n};\n\n/** Gas fee estimates for a transaction retrieved with the eth_gasPrice method. */\nexport type GasPriceGasFeeEstimates = {\n type: GasFeeEstimateType.GasPrice;\n gasPrice: Hex;\n};\n\n/** Gas fee estimates for a transaction. */\nexport type GasFeeEstimates =\n | FeeMarketGasFeeEstimates\n | LegacyGasFeeEstimates\n | GasPriceGasFeeEstimates;\n\n/** Request to a gas fee flow to obtain gas fee estimates. */\nexport type GasFeeFlowRequest = {\n /** An EthQuery instance to enable queries to the associated RPC provider. */\n ethQuery: EthQuery;\n\n /** Gas fee controller data matching the chain ID of the transaction. */\n gasFeeControllerData: GasFeeState;\n\n /** The metadata of the transaction to obtain estimates for. */\n transactionMeta: TransactionMeta;\n};\n\n/** Response from a gas fee flow containing gas fee estimates. */\nexport type GasFeeFlowResponse = {\n /** The gas fee estimates for the transaction. */\n estimates: GasFeeEstimates;\n};\n\n/** A method of obtaining gas fee estimates for a specific transaction. */\nexport type GasFeeFlow = {\n /**\n * Determine if the gas fee flow supports the specified transaction.\n * @param transactionMeta - The transaction metadata.\n * @returns Whether the gas fee flow supports the transaction.\n */\n matchesTransaction(transactionMeta: TransactionMeta): boolean;\n\n /**\n * Get gas fee estimates for a specific transaction.\n * @param request - The gas fee flow request.\n * @returns The gas fee flow response containing the gas fee estimates.\n */\n getGasFees: (request: GasFeeFlowRequest) => Promise;\n};\n\n/** Request to a layer 1 gas fee flow to obtain layer 1 fee estimate. */\nexport type Layer1GasFeeFlowRequest = {\n /** RPC Provider instance. */\n provider: Provider;\n\n /** The metadata of the transaction to obtain estimates for. */\n transactionMeta: TransactionMeta;\n};\n\n/** Response from a layer 1 gas fee flow containing layer 1 fee estimate. */\nexport type Layer1GasFeeFlowResponse = {\n /** The gas fee estimates for the transaction. */\n layer1Fee: Hex;\n};\n\n/** A method of obtaining layer 1 gas fee estimates for a specific transaction. */\nexport type Layer1GasFeeFlow = {\n /**\n * Determine if the gas fee flow supports the specified transaction.\n * @param transactionMeta - The transaction metadata.\n * @returns Whether the layer1 gas fee flow supports the transaction.\n */\n matchesTransaction(transactionMeta: TransactionMeta): boolean;\n\n /**\n * Get layer 1 gas fee estimates for a specific transaction.\n * @param request - The gas fee flow request.\n * @returns The gas fee flow response containing the layer 1 gas fee estimate.\n */\n getLayer1Fee: (\n request: Layer1GasFeeFlowRequest,\n ) => Promise;\n};\n\n/** Simulation data concerning an update to a native or token balance. */\nexport type SimulationBalanceChange = {\n /** The balance before the transaction. */\n previousBalance: Hex;\n\n /** The balance after the transaction. */\n newBalance: Hex;\n\n /** The difference in balance. */\n difference: Hex;\n\n /** Whether the balance is increasing or decreasing. */\n isDecrease: boolean;\n};\n\n/** Token standards supported by simulation. */\nexport enum SimulationTokenStandard {\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n erc20 = 'erc20',\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n erc721 = 'erc721',\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n erc1155 = 'erc1155',\n}\n\n/** Simulation data concerning an updated token. */\nexport type SimulationToken = {\n /** The token's contract address. */\n address: Hex;\n\n /** The standard of the token. */\n standard: SimulationTokenStandard;\n\n /** The ID of the token if supported by the standard. */\n id?: Hex;\n};\n\n/** Simulation data concerning a change to the a token balance. */\nexport type SimulationTokenBalanceChange = SimulationToken &\n SimulationBalanceChange;\n\nexport enum SimulationErrorCode {\n ChainNotSupported = 'chain-not-supported',\n Disabled = 'disabled',\n InvalidResponse = 'invalid-response',\n Reverted = 'reverted',\n}\n\n/** Error data for a failed simulation. */\nexport type SimulationError = {\n /** Error code to identify the error type. */\n code?: string | number;\n\n /** Error message to describe the error. */\n message?: string;\n};\n\n/** Simulation data for a transaction. */\nexport type SimulationData = {\n /** Error data if the simulation failed or the transaction reverted. */\n error?: SimulationError;\n\n /** Data concerning a change to the user's native balance. */\n nativeBalanceChange?: SimulationBalanceChange;\n\n /** Data concerning a change to the user's token balances. */\n tokenBalanceChanges: SimulationTokenBalanceChange[];\n};\n"],"mappings":";AA4cO,IAAK,oBAAL,kBAAKA,uBAAL;AAML,EAAAA,mBAAA,gBAAa;AAQb,EAAAA,mBAAA,cAAW;AAQX,EAAAA,mBAAA,YAAS;AAOT,EAAAA,mBAAA,eAAY;AAQZ,EAAAA,mBAAA,eAAY;AAQZ,EAAAA,mBAAA,YAAS;AAQT,EAAAA,mBAAA,aAAU;AAQV,EAAAA,mBAAA,cAAW;AAOX,EAAAA,mBAAA,eAAY;AApEF,SAAAA;AAAA,GAAA;AA0EL,IAAK,eAAL,kBAAKC,kBAAL;AAGL,EAAAA,cAAA,eAAY;AAGZ,EAAAA,cAAA,kBAAe;AACf,EAAAA,cAAA,WAAQ;AAPE,SAAAA;AAAA,GAAA;AAaL,IAAK,kBAAL,kBAAKC,qBAAL;AAML,EAAAA,iBAAA,YAAS;AAST,EAAAA,iBAAA,yBAAsB;AAOtB,EAAAA,iBAAA,oBAAiB;AAOjB,EAAAA,iBAAA,gBAAa;AAOb,EAAAA,iBAAA,+BAA4B;AAO5B,EAAAA,iBAAA,cAAW;AAOX,EAAAA,iBAAA,kBAAe;AAUf,EAAAA,iBAAA,WAAQ;AAOR,EAAAA,iBAAA,gBAAa;AAOb,EAAAA,iBAAA,mBAAgB;AAOhB,EAAAA,iBAAA,WAAQ;AAOR,EAAAA,iBAAA,UAAO;AAOP,EAAAA,iBAAA,iBAAc;AAUd,EAAAA,iBAAA,kBAAe;AAQf,EAAAA,iBAAA,wBAAqB;AAUrB,EAAAA,iBAAA,iCAA8B;AAQ9B,EAAAA,iBAAA,yBAAsB;AAStB,EAAAA,iBAAA,6BAA0B;AAQ1B,EAAAA,iBAAA,kCAA+B;AAO/B,EAAAA,iBAAA,kCAA+B;AA3JrB,SAAAA;AAAA,GAAA;AA6bL,IAAK,0BAAL,kBAAKC,6BAAL;AAML,EAAAA,yBAAA,YAAS;AAST,EAAAA,yBAAA,gBAAa;AAYb,EAAAA,yBAAA,eAAY;AA3BF,SAAAA;AAAA,GAAA;AAiCL,IAAK,eAAL,kBAAKC,kBAAL;AACL,EAAAA,cAAA,YAAS;AAGT,EAAAA,cAAA,oBAAiB;AACjB,EAAAA,cAAA,YAAS;AALC,SAAAA;AAAA,GAAA;AAsFL,IAAK,sBAAL,kBAAKC,yBAAL;AACL,EAAAA,qBAAA,SAAM;AACN,EAAAA,qBAAA,YAAS;AACT,EAAAA,qBAAA,UAAO;AAHG,SAAAA;AAAA,GAAA;AAOL,IAAK,qBAAL,kBAAKC,wBAAL;AACL,EAAAA,oBAAA,eAAY;AACZ,EAAAA,oBAAA,YAAS;AACT,EAAAA,oBAAA,cAAW;AAHD,SAAAA;AAAA,GAAA;AAgIL,IAAK,0BAAL,kBAAKC,6BAAL;AAGL,EAAAA,yBAAA,WAAQ;AAGR,EAAAA,yBAAA,YAAS;AAGT,EAAAA,yBAAA,aAAU;AATA,SAAAA;AAAA,GAAA;AA4BL,IAAK,sBAAL,kBAAKC,yBAAL;AACL,EAAAA,qBAAA,uBAAoB;AACpB,EAAAA,qBAAA,cAAW;AACX,EAAAA,qBAAA,qBAAkB;AAClB,EAAAA,qBAAA,cAAW;AAJD,SAAAA;AAAA,GAAA;","names":["TransactionStatus","WalletDevice","TransactionType","TransactionEnvelopeType","UserFeeLevel","GasFeeEstimateLevel","GasFeeEstimateType","SimulationTokenStandard","SimulationErrorCode"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-74W7X6BE.js.map b/node_modules/@metamask/transaction-controller/dist/chunk-74W7X6BE.js.map -deleted file mode 100644 -index 0473d04..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-74W7X6BE.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/utils/simulation.ts"],"names":["SupportedToken"],"mappings":"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","sourcesContent":["import type { Fragment, LogDescription, Result } from '@ethersproject/abi';\nimport { Interface } from '@ethersproject/abi';\nimport { hexToBN, toHex } from '@metamask/controller-utils';\nimport { abiERC20, abiERC721, abiERC1155 } from '@metamask/metamask-eth-abis';\nimport { createModuleLogger, type Hex } from '@metamask/utils';\n\nimport {\n ABI_SIMULATION_ERC20_WRAPPED,\n ABI_SIMULATION_ERC721_LEGACY,\n} from '../constants';\nimport {\n SimulationError,\n SimulationInvalidResponseError,\n SimulationRevertedError,\n} from '../errors';\nimport { projectLogger } from '../logger';\nimport type {\n SimulationBalanceChange,\n SimulationData,\n SimulationTokenBalanceChange,\n SimulationToken,\n} from '../types';\nimport { SimulationTokenStandard } from '../types';\nimport { simulateTransactions } from './simulation-api';\nimport type {\n SimulationResponseLog,\n SimulationRequestTransaction,\n SimulationResponse,\n SimulationResponseCallTrace,\n SimulationResponseTransaction,\n} from './simulation-api';\n\nexport enum SupportedToken {\n ERC20 = 'erc20',\n ERC721 = 'erc721',\n ERC1155 = 'erc1155',\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ERC20_WRAPPED = 'erc20Wrapped',\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ERC721_LEGACY = 'erc721Legacy',\n}\n\ntype ABI = Fragment[];\n\nexport type GetSimulationDataRequest = {\n chainId: Hex;\n from: Hex;\n to?: Hex;\n value?: Hex;\n data?: Hex;\n};\n\ntype ParsedEvent = {\n contractAddress: Hex;\n tokenStandard: SimulationTokenStandard;\n name: string;\n args: Record;\n abi: ABI;\n};\n\nconst log = createModuleLogger(projectLogger, 'simulation');\n\nconst SUPPORTED_EVENTS = [\n 'Transfer',\n 'TransferSingle',\n 'TransferBatch',\n 'Deposit',\n 'Withdrawal',\n];\n\nconst SUPPORTED_TOKEN_ABIS = {\n [SupportedToken.ERC20]: {\n abi: abiERC20,\n standard: SimulationTokenStandard.erc20,\n },\n [SupportedToken.ERC721]: {\n abi: abiERC721,\n standard: SimulationTokenStandard.erc721,\n },\n [SupportedToken.ERC1155]: {\n abi: abiERC1155,\n standard: SimulationTokenStandard.erc1155,\n },\n [SupportedToken.ERC20_WRAPPED]: {\n abi: ABI_SIMULATION_ERC20_WRAPPED,\n standard: SimulationTokenStandard.erc20,\n },\n [SupportedToken.ERC721_LEGACY]: {\n abi: ABI_SIMULATION_ERC721_LEGACY,\n standard: SimulationTokenStandard.erc721,\n },\n};\n\nconst REVERTED_ERRORS = ['execution reverted', 'insufficient funds for gas'];\n\ntype BalanceTransactionMap = Map;\n\n/**\n * Generate simulation data for a transaction.\n * @param request - The transaction to simulate.\n * @param request.chainId - The chain ID of the transaction.\n * @param request.from - The sender of the transaction.\n * @param request.to - The recipient of the transaction.\n * @param request.value - The value of the transaction.\n * @param request.data - The data of the transaction.\n * @returns The simulation data.\n */\nexport async function getSimulationData(\n request: GetSimulationDataRequest,\n): Promise {\n const { chainId, from, to, value, data } = request;\n\n log('Getting simulation data', request);\n\n try {\n const response = await simulateTransactions(chainId, {\n transactions: [\n {\n data,\n from,\n maxFeePerGas: '0x0',\n maxPriorityFeePerGas: '0x0',\n to,\n value,\n },\n ],\n withCallTrace: true,\n withLogs: true,\n });\n\n const transactionError = response.transactions?.[0]?.error;\n\n if (transactionError) {\n throw new SimulationError(transactionError);\n }\n\n const nativeBalanceChange = getNativeBalanceChange(request.from, response);\n const events = getEvents(response);\n\n log('Parsed events', events);\n\n const tokenBalanceChanges = await getTokenBalanceChanges(request, events);\n\n return {\n nativeBalanceChange,\n tokenBalanceChanges,\n };\n } catch (error) {\n log('Failed to get simulation data', error, request);\n\n let simulationError = error as SimulationError;\n\n if (\n REVERTED_ERRORS.some((revertErrorMessage) =>\n simulationError.message?.includes(revertErrorMessage),\n )\n ) {\n simulationError = new SimulationRevertedError();\n }\n\n const { code, message } = simulationError;\n\n return {\n tokenBalanceChanges: [],\n error: {\n code,\n message,\n },\n };\n }\n}\n\n/**\n * Extract the native balance change from a simulation response.\n * @param userAddress - The user's account address.\n * @param response - The simulation response.\n * @returns The native balance change or undefined if unchanged.\n */\nfunction getNativeBalanceChange(\n userAddress: Hex,\n response: SimulationResponse,\n): SimulationBalanceChange | undefined {\n const transactionResponse = response.transactions[0];\n\n /* istanbul ignore next */\n if (!transactionResponse) {\n return undefined;\n }\n\n const { stateDiff } = transactionResponse;\n const previousBalance = stateDiff?.pre?.[userAddress]?.balance;\n const newBalance = stateDiff?.post?.[userAddress]?.balance;\n\n if (!previousBalance || !newBalance) {\n return undefined;\n }\n\n return getSimulationBalanceChange(previousBalance, newBalance);\n}\n\n/**\n * Extract events from a simulation response.\n * @param response - The simulation response.\n * @returns The parsed events.\n */\nexport function getEvents(response: SimulationResponse): ParsedEvent[] {\n /* istanbul ignore next */\n const logs = extractLogs(\n response.transactions[0]?.callTrace ?? ({} as SimulationResponseCallTrace),\n );\n\n log('Extracted logs', logs);\n\n const interfaces = getContractInterfaces();\n\n return logs\n .map((currentLog) => {\n const event = parseLog(currentLog, interfaces);\n\n if (!event) {\n log('Failed to parse log', currentLog);\n return undefined;\n }\n\n /* istanbul ignore next */\n const inputs = event.abi.find((e) => e.name === event.name)?.inputs;\n\n /* istanbul ignore if */\n if (!inputs) {\n log('Failed to find inputs for event', event);\n return undefined;\n }\n\n const args = parseEventArgs(event.args, inputs);\n\n return {\n contractAddress: currentLog.address,\n tokenStandard: event.standard,\n name: event.name,\n args,\n abi: event.abi,\n };\n })\n .filter((e) => e !== undefined) as ParsedEvent[];\n}\n\n/**\n * Parse event arguments using ABI input definitions.\n * @param args - The raw event arguments.\n * @param abiInputs - The ABI input definitions.\n * @returns The parsed event arguments.\n */\nfunction parseEventArgs(\n args: Result,\n abiInputs: { name: string }[],\n): Record {\n return args.reduce((result, arg, index) => {\n const name = abiInputs[index].name.replace('_', '');\n const value = parseEventArgValue(arg);\n\n result[name] = value;\n\n return result;\n }, {});\n}\n\n/**\n * Parse an event argument value.\n * @param value - The event argument value.\n * @returns The parsed event argument value.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction parseEventArgValue(value: any): Hex | Hex[] {\n if (Array.isArray(value)) {\n return value.map(parseEventArgValue) as Hex[];\n }\n\n return (value.toHexString?.() ?? value).toLowerCase();\n}\n\n/**\n * Generate token balance changes from parsed events.\n * @param request - The transaction that was simulated.\n * @param events - The parsed events.\n * @returns An array of token balance changes.\n */\nasync function getTokenBalanceChanges(\n request: GetSimulationDataRequest,\n events: ParsedEvent[],\n): Promise {\n const balanceTxs = getTokenBalanceTransactions(request, events);\n\n log('Generated balance transactions', [...balanceTxs.after.values()]);\n\n const transactions = [\n ...balanceTxs.before.values(),\n request,\n ...balanceTxs.after.values(),\n ];\n\n if (transactions.length === 1) {\n return [];\n }\n\n const response = await simulateTransactions(request.chainId as Hex, {\n transactions,\n });\n\n log('Balance simulation response', response);\n\n if (response.transactions.length !== transactions.length) {\n throw new SimulationInvalidResponseError();\n }\n\n let prevBalanceTxIndex = 0;\n return [...balanceTxs.after.keys()]\n .map((token, index) => {\n const previousBalanceCheckSkipped = !balanceTxs.before.get(token);\n const previousBalance = previousBalanceCheckSkipped\n ? '0x0'\n : getValueFromBalanceTransaction(\n request.from,\n token,\n // eslint-disable-next-line no-plusplus\n response.transactions[prevBalanceTxIndex++],\n );\n\n const newBalance = getValueFromBalanceTransaction(\n request.from,\n token,\n response.transactions[index + balanceTxs.before.size + 1],\n );\n\n const balanceChange = getSimulationBalanceChange(\n previousBalance,\n newBalance,\n );\n\n if (!balanceChange) {\n return undefined;\n }\n\n return {\n ...token,\n ...balanceChange,\n };\n })\n .filter((change) => change !== undefined) as SimulationTokenBalanceChange[];\n}\n\n/**\n * Generate transactions to check token balances.\n * @param request - The transaction that was simulated.\n * @param events - The parsed events.\n * @returns A map of token balance transactions keyed by token.\n */\nfunction getTokenBalanceTransactions(\n request: GetSimulationDataRequest,\n events: ParsedEvent[],\n): {\n before: BalanceTransactionMap;\n after: BalanceTransactionMap;\n} {\n const tokenKeys = new Set();\n const before = new Map();\n const after = new Map();\n\n const userEvents = events.filter(\n (event) =>\n SUPPORTED_EVENTS.includes(event.name) &&\n [event.args.from, event.args.to].includes(request.from),\n );\n\n log('Filtered user events', userEvents);\n\n for (const event of userEvents) {\n const tokenIds = getEventTokenIds(event);\n\n log('Extracted token ids', tokenIds);\n\n for (const tokenId of tokenIds) {\n const simulationToken: SimulationToken = {\n address: event.contractAddress,\n standard: event.tokenStandard,\n id: tokenId,\n };\n\n const tokenKey = JSON.stringify(simulationToken);\n\n if (tokenKeys.has(tokenKey)) {\n log(\n 'Ignoring additional event with same contract and token ID',\n simulationToken,\n );\n continue;\n }\n\n tokenKeys.add(tokenKey);\n\n const data = getBalanceTransactionData(\n event.tokenStandard,\n request.from,\n tokenId,\n );\n\n const transaction: SimulationRequestTransaction = {\n from: request.from,\n to: event.contractAddress,\n data,\n };\n\n if (skipPriorBalanceCheck(event)) {\n after.set(simulationToken, transaction);\n } else {\n before.set(simulationToken, transaction);\n after.set(simulationToken, transaction);\n }\n }\n }\n\n return { before, after };\n}\n\n/**\n * Check if an event needs to check the previous balance.\n * @param event - The parsed event.\n * @returns True if the prior balance check should be skipped.\n */\nfunction skipPriorBalanceCheck(event: ParsedEvent): boolean {\n // In the case of an NFT mint, we cannot check the NFT owner before the mint\n // as the balance check transaction would revert.\n return (\n event.name === 'Transfer' &&\n event.tokenStandard === SimulationTokenStandard.erc721 &&\n parseInt(event.args.from as string, 16) === 0\n );\n}\n\n/**\n * Extract token IDs from a parsed event.\n * @param event - The parsed event.\n * @returns An array of token IDs.\n */\nfunction getEventTokenIds(event: ParsedEvent): (Hex | undefined)[] {\n if (event.tokenStandard === SimulationTokenStandard.erc721) {\n return [event.args.tokenId as Hex];\n }\n\n if (\n event.tokenStandard === SimulationTokenStandard.erc1155 &&\n event.name === 'TransferSingle'\n ) {\n return [event.args.id as Hex];\n }\n\n if (\n event.tokenStandard === SimulationTokenStandard.erc1155 &&\n event.name === 'TransferBatch'\n ) {\n return event.args.ids as Hex[];\n }\n\n // ERC-20 does not have a token ID so default to undefined.\n return [undefined];\n}\n\n/**\n * Extract the value from a balance transaction response.\n * @param from - The address to check the balance of.\n * @param token - The token to check the balance of.\n * @param response - The balance transaction response.\n * @returns The value of the balance transaction.\n */\nfunction getValueFromBalanceTransaction(\n from: Hex,\n token: SimulationToken,\n response: SimulationResponseTransaction,\n): Hex {\n const normalizedReturn = normalizeReturnValue(response.return);\n\n if (token.standard === SimulationTokenStandard.erc721) {\n return normalizedReturn === from ? '0x1' : '0x0';\n }\n\n return normalizedReturn;\n}\n\n/**\n * Generate the balance transaction data for a token.\n * @param tokenStandard - The token standard.\n * @param from - The address to check the balance of.\n * @param tokenId - The token ID to check the balance of.\n * @returns The balance transaction data.\n */\nfunction getBalanceTransactionData(\n tokenStandard: SimulationTokenStandard,\n from: Hex,\n tokenId?: Hex,\n): Hex {\n switch (tokenStandard) {\n case SimulationTokenStandard.erc721:\n return new Interface(abiERC721).encodeFunctionData('ownerOf', [\n tokenId,\n ]) as Hex;\n\n case SimulationTokenStandard.erc1155:\n return new Interface(abiERC1155).encodeFunctionData('balanceOf', [\n from,\n tokenId,\n ]) as Hex;\n\n default:\n return new Interface(abiERC20).encodeFunctionData('balanceOf', [\n from,\n ]) as Hex;\n }\n}\n\n/**\n * Parse a raw event log using known ABIs.\n * @param eventLog - The raw event log.\n * @param interfaces - The contract interfaces.\n * @returns The parsed event log or undefined if it could not be parsed.\n */\nfunction parseLog(\n eventLog: SimulationResponseLog,\n interfaces: Map,\n):\n | (LogDescription & { abi: ABI; standard: SimulationTokenStandard })\n | undefined {\n const supportedTokens = Object.values(SupportedToken);\n\n for (const token of supportedTokens) {\n try {\n const contractInterface = interfaces.get(token) as Interface;\n const { abi, standard } = SUPPORTED_TOKEN_ABIS[token];\n\n return {\n ...contractInterface.parseLog(eventLog),\n abi,\n standard,\n };\n } catch (e) {\n continue;\n }\n }\n\n return undefined;\n}\n\n/**\n * Extract all logs from a call trace tree.\n * @param call - The root call trace.\n * @returns An array of logs.\n */\nfunction extractLogs(\n call: SimulationResponseCallTrace,\n): SimulationResponseLog[] {\n /* istanbul ignore next */\n const logs = call.logs ?? [];\n\n /* istanbul ignore next */\n const nestedCalls = call.calls ?? [];\n\n return [\n ...logs,\n ...nestedCalls.map((nestedCall) => extractLogs(nestedCall)).flat(),\n ];\n}\n\n/**\n * Generate balance change data from previous and new balances.\n * @param previousBalance - The previous balance.\n * @param newBalance - The new balance.\n * @returns The balance change data or undefined if unchanged.\n */\nfunction getSimulationBalanceChange(\n previousBalance: Hex,\n newBalance: Hex,\n): SimulationBalanceChange | undefined {\n const differenceBN = hexToBN(newBalance).sub(hexToBN(previousBalance));\n const isDecrease = differenceBN.isNeg();\n const difference = toHex(differenceBN.abs());\n\n if (differenceBN.isZero()) {\n log('Balance change is zero');\n return undefined;\n }\n\n return {\n previousBalance,\n newBalance,\n difference,\n isDecrease,\n };\n}\n\n/**\n * Normalize a return value.\n * @param value - The return value to normalize.\n * @returns The normalized return value.\n */\nfunction normalizeReturnValue(value: Hex): Hex {\n return toHex(hexToBN(value));\n}\n\n/**\n * Get the contract interfaces for all supported tokens.\n * @returns A map of supported tokens to their contract interfaces.\n */\nfunction getContractInterfaces(): Map {\n const supportedTokens = Object.values(SupportedToken);\n\n return new Map(\n supportedTokens.map((tokenType) => {\n const { abi } = SUPPORTED_TOKEN_ABIS[tokenType];\n const contractInterface = new Interface(abi);\n return [tokenType, contractInterface];\n }),\n );\n}\n"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-76FONEDA.js.map b/node_modules/@metamask/transaction-controller/dist/chunk-76FONEDA.js.map -deleted file mode 100644 -index 9798470..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-76FONEDA.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/utils/gas-flow.ts"],"names":[],"mappings":";;;;;AAAA,SAAS,uBAAuB;AAwCzB,SAAS,cACd,iBACA,aACwB;AACxB,SAAO,YAAY;AAAA,IAAK,CAAC,eACvB,WAAW,mBAAmB,eAAe;AAAA,EAC/C;AACF;AASO,SAAS,qBAAqB;AAAA,EACnC;AAAA,EACA;AACF,GAAgE;AAC9D,QAAM,0BAA0B,2BAA2B;AAE3D,MAAI,0DAA0D;AAC5D,WAAO,OAAO,OAAO,mBAAmB,EAAE;AAAA,MACxC,CAAC,QAAQ,WAAW;AAAA,QAClB,GAAG;AAAA,QACH,CAAC,KAAK,GAAG;AAAA,UACN,4BAAgD,KAAK;AAAA,UACtD,2BAA2B,KAAK;AAAA,QAClC;AAAA,MACF;AAAA,MACA,EAAE,GAAG,0BAA0B;AAAA,IACjC;AAAA,EACF;AAEA,MAAI,mDAAuD;AACzD,WAAO,OAAO,OAAO,mBAAmB,EAAE;AAAA,MACxC,CAAC,QAAQ,WAAW;AAAA,QAClB,GAAG;AAAA,QACH,CAAC,KAAK,GAAG,kBAAkB,4BAA4B,KAAK;AAAA,MAC9D;AAAA,MACA,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,2DAAyD;AAC3D,WAAO;AAAA,MACL,UAAU,oBAAoB,0BAA0B;AAAA,IAC1D;AAAA,EACF;AAEA,SAAO;AACT;AAQA,SAAS,uBACP,0BACA,2BACe;AACf,SAAO;AAAA,IACL,GAAG;AAAA,IACH,uBAAuB;AAAA,MACrB,0BAA0B;AAAA,IAC5B;AAAA,IACA,+BAA+B;AAAA,MAC7B,0BAA0B;AAAA,IAC5B;AAAA,EACF;AACF;AAQA,SAAS,kBACP,2BACA,OACQ;AACR,SAAO,gBAAgB,0BAA0B,KAAK,CAAC;AACzD;AAOA,SAAS,oBACP,2BACQ;AACR,SAAO,gBAAgB,0BAA0B,QAAQ;AAC3D","sourcesContent":["import { weiHexToGweiDec } from '@metamask/controller-utils';\nimport type {\n Eip1559GasFee,\n EthGasPriceEstimate,\n GasFeeEstimates,\n LegacyGasPriceEstimate,\n} from '@metamask/gas-fee-controller';\nimport { type GasFeeState } from '@metamask/gas-fee-controller';\n\nimport type {\n FeeMarketGasFeeEstimates,\n GasPriceGasFeeEstimates,\n LegacyGasFeeEstimates,\n} from '../types';\nimport {\n type GasFeeFlow,\n type TransactionMeta,\n type FeeMarketGasFeeEstimateForLevel,\n GasFeeEstimateLevel,\n GasFeeEstimateType,\n} from '../types';\n\ntype MergeGasFeeEstimatesRequest = {\n gasFeeControllerEstimates:\n | GasFeeEstimates\n | LegacyGasPriceEstimate\n | EthGasPriceEstimate;\n transactionGasFeeEstimates:\n | FeeMarketGasFeeEstimates\n | LegacyGasFeeEstimates\n | GasPriceGasFeeEstimates;\n};\n\n/**\n * Returns the first gas fee flow that matches the transaction.\n *\n * @param transactionMeta - The transaction metadata to find a gas fee flow for.\n * @param gasFeeFlows - The gas fee flows to search.\n * @returns The first gas fee flow that matches the transaction, or undefined if none match.\n */\nexport function getGasFeeFlow(\n transactionMeta: TransactionMeta,\n gasFeeFlows: GasFeeFlow[],\n): GasFeeFlow | undefined {\n return gasFeeFlows.find((gasFeeFlow) =>\n gasFeeFlow.matchesTransaction(transactionMeta),\n );\n}\n\n/**\n * Merge the gas fee estimates from the gas fee controller with the gas fee estimates from a transaction.\n * @param request - Data required to merge gas fee estimates.\n * @param request.gasFeeControllerEstimates - Gas fee estimates from the GasFeeController.\n * @param request.transactionGasFeeEstimates - Gas fee estimates from the transaction.\n * @returns The merged gas fee estimates.\n */\nexport function mergeGasFeeEstimates({\n gasFeeControllerEstimates,\n transactionGasFeeEstimates,\n}: MergeGasFeeEstimatesRequest): GasFeeState['gasFeeEstimates'] {\n const transactionEstimateType = transactionGasFeeEstimates.type;\n\n if (transactionEstimateType === GasFeeEstimateType.FeeMarket) {\n return Object.values(GasFeeEstimateLevel).reduce(\n (result, level) => ({\n ...result,\n [level]: mergeFeeMarketEstimate(\n (gasFeeControllerEstimates as GasFeeEstimates)?.[level],\n transactionGasFeeEstimates[level],\n ),\n }),\n { ...gasFeeControllerEstimates } as GasFeeEstimates,\n );\n }\n\n if (transactionEstimateType === GasFeeEstimateType.Legacy) {\n return Object.values(GasFeeEstimateLevel).reduce(\n (result, level) => ({\n ...result,\n [level]: getLegacyEstimate(transactionGasFeeEstimates, level),\n }),\n {} as LegacyGasPriceEstimate,\n );\n }\n\n if (transactionEstimateType === GasFeeEstimateType.GasPrice) {\n return {\n gasPrice: getGasPriceEstimate(transactionGasFeeEstimates),\n };\n }\n\n return gasFeeControllerEstimates;\n}\n\n/**\n * Merge a specific priority level of EIP-1559 gas fee estimates.\n * @param gasFeeControllerEstimate - The gas fee estimate from the gas fee controller.\n * @param transactionGasFeeEstimate - The gas fee estimate from the transaction.\n * @returns The merged gas fee estimate.\n */\nfunction mergeFeeMarketEstimate(\n gasFeeControllerEstimate: Eip1559GasFee | undefined,\n transactionGasFeeEstimate: FeeMarketGasFeeEstimateForLevel,\n): Eip1559GasFee {\n return {\n ...gasFeeControllerEstimate,\n suggestedMaxFeePerGas: weiHexToGweiDec(\n transactionGasFeeEstimate.maxFeePerGas,\n ),\n suggestedMaxPriorityFeePerGas: weiHexToGweiDec(\n transactionGasFeeEstimate.maxPriorityFeePerGas,\n ),\n } as Eip1559GasFee;\n}\n\n/**\n * Generate a specific priority level for a legacy gas fee estimate.\n * @param transactionGasFeeEstimate - The gas fee estimate from the transaction.\n * @param level - The gas fee estimate level.\n * @returns The legacy gas fee estimate.\n */\nfunction getLegacyEstimate(\n transactionGasFeeEstimate: LegacyGasFeeEstimates,\n level: GasFeeEstimateLevel,\n): string {\n return weiHexToGweiDec(transactionGasFeeEstimate[level]);\n}\n\n/**\n * Generate the value for a gas price gas fee estimate.\n * @param transactionGasFeeEstimate - The gas fee estimate from the transaction.\n * @returns The legacy gas fee estimate.\n */\nfunction getGasPriceEstimate(\n transactionGasFeeEstimate: GasPriceGasFeeEstimates,\n): string {\n return weiHexToGweiDec(transactionGasFeeEstimate.gasPrice);\n}\n"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-7LXE4KHV.js.map b/node_modules/@metamask/transaction-controller/dist/chunk-7LXE4KHV.js.map -deleted file mode 100644 -index 1c3d017..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-7LXE4KHV.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/utils/external-transactions.ts"],"names":[],"mappings":";AACA,SAAS,iBAAiB;AAYnB,SAAS,qCACd,iBACA,cACA,YACA;AACA,MAAI,CAAC,mBAAmB,CAAC,gBAAgB,UAAU;AACjD,UAAM,UAAU;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAEA,MAAI,gBAAgB,wCAAwC;AAC1D,UAAM,UAAU;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAEA,QAAM,kBAAkB,gBAAgB,SAAS;AACjD,MAAI,cAAc,WAAW,SAAS,GAAG;AACvC,UAAM,wBAAwB,WAAW;AAAA,MACvC,CAAC,OAAO,GAAG,UAAU,UAAU;AAAA,IACjC;AACA,QAAI,uBAAuB;AACzB,YAAM,UAAU;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,gBAAgB,aAAa,SAAS,GAAG;AAC3C,UAAM,0BAA0B,aAAa;AAAA,MAC3C,CAAC,OAAO,GAAG,UAAU,UAAU;AAAA,IACjC;AACA,QAAI,yBAAyB;AAC3B,YAAM,UAAU;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF","sourcesContent":["// These utility functions are exclusively used by `confirmExternalTransaction` method in controller\nimport { rpcErrors } from '@metamask/rpc-errors';\n\nimport { TransactionStatus } from '../types';\nimport type { TransactionMeta } from '../types';\n\n/**\n * Validates the external provided transaction meta.\n *\n * @param transactionMeta - The transaction meta to validate.\n * @param confirmedTxs - The confirmed transactions in controller state.\n * @param pendingTxs - The submitted transactions in controller state.\n */\nexport function validateConfirmedExternalTransaction(\n transactionMeta?: TransactionMeta,\n confirmedTxs?: TransactionMeta[],\n pendingTxs?: TransactionMeta[],\n) {\n if (!transactionMeta || !transactionMeta.txParams) {\n throw rpcErrors.invalidParams(\n '\"transactionMeta\" or \"transactionMeta.txParams\" is missing',\n );\n }\n\n if (transactionMeta.status !== TransactionStatus.confirmed) {\n throw rpcErrors.invalidParams(\n 'External transaction status should be \"confirmed\"',\n );\n }\n\n const externalTxNonce = transactionMeta.txParams.nonce;\n if (pendingTxs && pendingTxs.length > 0) {\n const foundPendingTxByNonce = pendingTxs.find(\n (tx) => tx.txParams?.nonce === externalTxNonce,\n );\n if (foundPendingTxByNonce) {\n throw rpcErrors.invalidParams(\n 'External transaction nonce should not be in pending txs',\n );\n }\n }\n\n if (confirmedTxs && confirmedTxs.length > 0) {\n const foundConfirmedTxByNonce = confirmedTxs.find(\n (tx) => tx.txParams?.nonce === externalTxNonce,\n );\n if (foundConfirmedTxByNonce) {\n throw rpcErrors.invalidParams(\n 'External transaction nonce should not be in confirmed txs',\n );\n }\n }\n}\n"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-7NMV2NPM.js.map b/node_modules/@metamask/transaction-controller/dist/chunk-7NMV2NPM.js.map -deleted file mode 100644 -index c2b01c3..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-7NMV2NPM.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/helpers/EtherscanRemoteTransactionSource.ts"],"names":[],"mappings":"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","sourcesContent":["import { BNToHex } from '@metamask/controller-utils';\nimport type { Hex } from '@metamask/utils';\nimport { Mutex } from 'async-mutex';\nimport BN from 'bn.js';\nimport { v1 as random } from 'uuid';\n\nimport { ETHERSCAN_SUPPORTED_NETWORKS } from '../constants';\nimport { incomingTransactionsLogger as log } from '../logger';\nimport type {\n RemoteTransactionSource,\n RemoteTransactionSourceRequest,\n TransactionMeta,\n} from '../types';\nimport { TransactionStatus, TransactionType } from '../types';\nimport {\n fetchEtherscanTokenTransactions,\n fetchEtherscanTransactions,\n} from '../utils/etherscan';\nimport type {\n EtherscanTokenTransactionMeta,\n EtherscanTransactionMeta,\n EtherscanTransactionMetaBase,\n EtherscanTransactionRequest,\n EtherscanTransactionResponse,\n} from '../utils/etherscan';\n\nconst ETHERSCAN_RATE_LIMIT_INTERVAL = 5000;\n/**\n * A RemoteTransactionSource that fetches transaction data from Etherscan.\n */\nexport class EtherscanRemoteTransactionSource\n implements RemoteTransactionSource\n{\n #includeTokenTransfers: boolean;\n\n #isTokenRequestPending: boolean;\n\n #mutex = new Mutex();\n\n constructor({\n includeTokenTransfers,\n }: { includeTokenTransfers?: boolean } = {}) {\n this.#includeTokenTransfers = includeTokenTransfers ?? true;\n this.#isTokenRequestPending = false;\n }\n\n isSupportedNetwork(chainId: Hex): boolean {\n return Object.keys(ETHERSCAN_SUPPORTED_NETWORKS).includes(chainId);\n }\n\n getLastBlockVariations(): string[] {\n return [this.#isTokenRequestPending ? 'token' : 'normal'];\n }\n\n async fetchTransactions(\n request: RemoteTransactionSourceRequest,\n ): Promise {\n const releaseLock = await this.#mutex.acquire();\n const acquiredTime = Date.now();\n\n const etherscanRequest: EtherscanTransactionRequest = {\n ...request,\n chainId: request.currentChainId,\n };\n\n try {\n const transactions = this.#isTokenRequestPending\n ? await this.#fetchTokenTransactions(request, etherscanRequest)\n : await this.#fetchNormalTransactions(request, etherscanRequest);\n\n if (this.#includeTokenTransfers) {\n this.#isTokenRequestPending = !this.#isTokenRequestPending;\n }\n\n return transactions;\n } finally {\n this.#releaseLockAfterInterval(acquiredTime, releaseLock);\n }\n }\n\n #releaseLockAfterInterval(acquireTime: number, releaseLock: () => void) {\n const elapsedTime = Date.now() - acquireTime;\n const remainingTime = Math.max(\n 0,\n ETHERSCAN_RATE_LIMIT_INTERVAL - elapsedTime,\n );\n // Wait for the remaining time if it hasn't been 5 seconds yet\n if (remainingTime > 0) {\n setTimeout(releaseLock, remainingTime);\n } else {\n releaseLock();\n }\n }\n\n #fetchNormalTransactions = async (\n request: RemoteTransactionSourceRequest,\n etherscanRequest: EtherscanTransactionRequest,\n ) => {\n const { currentChainId } = request;\n\n const etherscanTransactions = await fetchEtherscanTransactions(\n etherscanRequest,\n );\n\n return this.#getResponseTransactions(etherscanTransactions).map((tx) =>\n this.#normalizeTransaction(tx, currentChainId),\n );\n };\n\n #fetchTokenTransactions = async (\n request: RemoteTransactionSourceRequest,\n etherscanRequest: EtherscanTransactionRequest,\n ) => {\n const { currentChainId } = request;\n\n const etherscanTransactions = await fetchEtherscanTokenTransactions(\n etherscanRequest,\n );\n\n return this.#getResponseTransactions(etherscanTransactions).map((tx) =>\n this.#normalizeTokenTransaction(tx, currentChainId),\n );\n };\n\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n #getResponseTransactions(\n response: EtherscanTransactionResponse,\n ): T[] {\n let result = response.result as T[];\n\n if (response.status === '0') {\n result = [];\n\n if (response.result.length) {\n log('Ignored Etherscan request error', {\n message: response.result,\n type: this.#isTokenRequestPending ? 'token' : 'normal',\n });\n }\n }\n\n return result;\n }\n\n #normalizeTransaction(\n txMeta: EtherscanTransactionMeta,\n currentChainId: Hex,\n ): TransactionMeta {\n const base = this.#normalizeTransactionBase(txMeta, currentChainId);\n\n return {\n ...base,\n txParams: {\n ...base.txParams,\n data: txMeta.input,\n },\n ...(txMeta.isError === '0'\n ? { status: TransactionStatus.confirmed }\n : {\n error: new Error('Transaction failed'),\n status: TransactionStatus.failed,\n }),\n };\n }\n\n #normalizeTokenTransaction(\n txMeta: EtherscanTokenTransactionMeta,\n currentChainId: Hex,\n ): TransactionMeta {\n const base = this.#normalizeTransactionBase(txMeta, currentChainId);\n\n return {\n ...base,\n isTransfer: true,\n transferInformation: {\n contractAddress: txMeta.contractAddress,\n decimals: Number(txMeta.tokenDecimal),\n symbol: txMeta.tokenSymbol,\n },\n };\n }\n\n #normalizeTransactionBase(\n txMeta: EtherscanTransactionMetaBase,\n currentChainId: Hex,\n ): TransactionMeta {\n const time = parseInt(txMeta.timeStamp, 10) * 1000;\n\n return {\n blockNumber: txMeta.blockNumber,\n chainId: currentChainId,\n hash: txMeta.hash,\n id: random({ msecs: time }),\n status: TransactionStatus.confirmed,\n time,\n txParams: {\n chainId: currentChainId,\n from: txMeta.from,\n gas: BNToHex(new BN(txMeta.gas)),\n gasPrice: BNToHex(new BN(txMeta.gasPrice)),\n gasUsed: BNToHex(new BN(txMeta.gasUsed)),\n nonce: BNToHex(new BN(txMeta.nonce)),\n to: txMeta.to,\n value: BNToHex(new BN(txMeta.value)),\n },\n type: TransactionType.incoming,\n verifiedOnBlockchain: false,\n };\n }\n}\n"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-ARZHJFVG.js.map b/node_modules/@metamask/transaction-controller/dist/chunk-ARZHJFVG.js.map -deleted file mode 100644 -index aec3c7d..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-ARZHJFVG.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/gas-flows/LineaGasFeeFlow.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChainId, hexToBN, query, toHex } from '@metamask/controller-utils';\nimport type EthQuery from '@metamask/eth-query';\nimport { createModuleLogger, type Hex } from '@metamask/utils';\nimport type BN from 'bn.js';\n\nimport { projectLogger } from '../logger';\nimport type {\n GasFeeEstimates,\n GasFeeFlow,\n GasFeeFlowRequest,\n GasFeeFlowResponse,\n TransactionMeta,\n} from '../types';\nimport { GasFeeEstimateLevel, GasFeeEstimateType } from '../types';\nimport { DefaultGasFeeFlow } from './DefaultGasFeeFlow';\n\ntype LineaEstimateGasResponse = {\n baseFeePerGas: Hex;\n priorityFeePerGas: Hex;\n};\n\ntype FeesByLevel = {\n [key in GasFeeEstimateLevel]: BN;\n};\n\nconst log = createModuleLogger(projectLogger, 'linea-gas-fee-flow');\n\nconst LINEA_CHAIN_IDS: Hex[] = [\n ChainId['linea-mainnet'],\n ChainId['linea-goerli'],\n ChainId['linea-sepolia'],\n];\n\nconst BASE_FEE_MULTIPLIERS = {\n low: 1,\n medium: 1.35,\n high: 1.7,\n};\n\nconst PRIORITY_FEE_MULTIPLIERS = {\n low: 1,\n medium: 1.05,\n high: 1.1,\n};\n\n/**\n * Implementation of a gas fee flow specific to Linea networks that obtains gas fee estimates using:\n * - The `linea_estimateGas` RPC method to obtain the base fee and lowest priority fee.\n * - Static multipliers to increase the base and priority fees.\n */\nexport class LineaGasFeeFlow implements GasFeeFlow {\n matchesTransaction(transactionMeta: TransactionMeta): boolean {\n return LINEA_CHAIN_IDS.includes(transactionMeta.chainId);\n }\n\n async getGasFees(request: GasFeeFlowRequest): Promise {\n try {\n return await this.#getLineaGasFees(request);\n } catch (error) {\n log('Using default flow as fallback due to error', error);\n return new DefaultGasFeeFlow().getGasFees(request);\n }\n }\n\n async #getLineaGasFees(\n request: GasFeeFlowRequest,\n ): Promise {\n const { ethQuery, transactionMeta } = request;\n\n const lineaResponse = await this.#getLineaResponse(\n transactionMeta,\n ethQuery,\n );\n\n log('Received Linea response', lineaResponse);\n\n const baseFees = this.#getValuesFromMultipliers(\n lineaResponse.baseFeePerGas,\n BASE_FEE_MULTIPLIERS,\n );\n\n log('Generated base fees', this.#feesToString(baseFees));\n\n const priorityFees = this.#getValuesFromMultipliers(\n lineaResponse.priorityFeePerGas,\n PRIORITY_FEE_MULTIPLIERS,\n );\n\n log('Generated priority fees', this.#feesToString(priorityFees));\n\n const maxFees = this.#getMaxFees(baseFees, priorityFees);\n\n log('Generated max fees', this.#feesToString(maxFees));\n\n const estimates = Object.values(GasFeeEstimateLevel).reduce(\n (result, level) => ({\n ...result,\n [level]: {\n maxFeePerGas: toHex(maxFees[level]),\n maxPriorityFeePerGas: toHex(priorityFees[level]),\n },\n }),\n { type: GasFeeEstimateType.FeeMarket } as GasFeeEstimates,\n );\n\n return { estimates };\n }\n\n #getLineaResponse(\n transactionMeta: TransactionMeta,\n ethQuery: EthQuery,\n ): Promise {\n return query(ethQuery, 'linea_estimateGas', [\n {\n from: transactionMeta.txParams.from,\n to: transactionMeta.txParams.to,\n value: transactionMeta.txParams.value,\n input: transactionMeta.txParams.data,\n // Required in request but no impact on response.\n gasPrice: '0x100000000',\n },\n ]);\n }\n\n #getValuesFromMultipliers(\n value: Hex,\n multipliers: { low: number; medium: number; high: number },\n ): FeesByLevel {\n const base = hexToBN(value);\n const low = base.muln(multipliers.low);\n const medium = base.muln(multipliers.medium);\n const high = base.muln(multipliers.high);\n\n return {\n low,\n medium,\n high,\n };\n }\n\n #getMaxFees(\n baseFees: Record,\n priorityFees: Record,\n ): FeesByLevel {\n return {\n low: baseFees.low.add(priorityFees.low),\n medium: baseFees.medium.add(priorityFees.medium),\n high: baseFees.high.add(priorityFees.high),\n };\n }\n\n #feesToString(fees: FeesByLevel) {\n return Object.values(GasFeeEstimateLevel).map((level) =>\n fees[level].toString(10),\n );\n }\n}\n"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-74W7X6BE.js b/node_modules/@metamask/transaction-controller/dist/chunk-AT7DP6HE.js -similarity index 92% -rename from node_modules/@metamask/transaction-controller/dist/chunk-74W7X6BE.js -rename to node_modules/@metamask/transaction-controller/dist/chunk-AT7DP6HE.js -index 1bdf50a..ecf3af6 100644 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-74W7X6BE.js -+++ b/node_modules/@metamask/transaction-controller/dist/chunk-AT7DP6HE.js -@@ -1,6 +1,6 @@ - "use strict";Object.defineProperty(exports, "__esModule", {value: true}); - --var _chunkKT6UAKBBjs = require('./chunk-KT6UAKBB.js'); -+var _chunkL7HIDFC5js = require('./chunk-L7HIDFC5.js'); - - - -@@ -58,11 +58,12 @@ var SUPPORTED_TOKEN_ABIS = { - } - }; - var REVERTED_ERRORS = ["execution reverted", "insufficient funds for gas"]; --async function getSimulationData(request) { -+async function getSimulationData(request, options = {}) { - const { chainId, from, to, value, data } = request; -+ const { blockTime } = options; - log("Getting simulation data", request); - try { -- const response = await _chunkKT6UAKBBjs.simulateTransactions.call(void 0, chainId, { -+ const response = await _chunkL7HIDFC5js.simulateTransactions.call(void 0, chainId, { - transactions: [ - { - data, -@@ -74,7 +75,12 @@ async function getSimulationData(request) { - } - ], - withCallTrace: true, -- withLogs: true -+ withLogs: true, -+ ...blockTime && { -+ blockOverrides: { -+ time: _controllerutils.toHex.call(void 0, blockTime) -+ } -+ } - }); - const transactionError = response.transactions?.[0]?.error; - if (transactionError) { -@@ -83,7 +89,11 @@ async function getSimulationData(request) { - const nativeBalanceChange = getNativeBalanceChange(request.from, response); - const events = getEvents(response); - log("Parsed events", events); -- const tokenBalanceChanges = await getTokenBalanceChanges(request, events); -+ const tokenBalanceChanges = await getTokenBalanceChanges( -+ request, -+ events, -+ options -+ ); - return { - nativeBalanceChange, - tokenBalanceChanges -@@ -160,7 +170,8 @@ function parseEventArgValue(value) { - } - return (value.toHexString?.() ?? value).toLowerCase(); - } --async function getTokenBalanceChanges(request, events) { -+async function getTokenBalanceChanges(request, events, options) { -+ const { blockTime } = options; - const balanceTxs = getTokenBalanceTransactions(request, events); - log("Generated balance transactions", [...balanceTxs.after.values()]); - const transactions = [ -@@ -171,8 +182,13 @@ async function getTokenBalanceChanges(request, events) { - if (transactions.length === 1) { - return []; - } -- const response = await _chunkKT6UAKBBjs.simulateTransactions.call(void 0, request.chainId, { -- transactions -+ const response = await _chunkL7HIDFC5js.simulateTransactions.call(void 0, request.chainId, { -+ transactions, -+ ...blockTime && { -+ blockOverrides: { -+ time: _controllerutils.toHex.call(void 0, blockTime) -+ } -+ } - }); - log("Balance simulation response", response); - if (response.transactions.length !== transactions.length) { -@@ -349,4 +365,4 @@ function getContractInterfaces() { - - - exports.SupportedToken = SupportedToken; exports.getSimulationData = getSimulationData; exports.getEvents = getEvents; --//# sourceMappingURL=chunk-74W7X6BE.js.map -\ No newline at end of file -+//# sourceMappingURL=chunk-AT7DP6HE.js.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-AYTU4HU5.js.map b/node_modules/@metamask/transaction-controller/dist/chunk-AYTU4HU5.js.map -deleted file mode 100644 -index 1157255..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-AYTU4HU5.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/types.ts"],"names":["TransactionStatus","WalletDevice","TransactionType","TransactionEnvelopeType","UserFeeLevel","GasFeeEstimateLevel","GasFeeEstimateType","SimulationTokenStandard","SimulationErrorCode"],"mappings":";AA4cO,IAAK,oBAAL,kBAAKA,uBAAL;AAML,EAAAA,mBAAA,gBAAa;AAQb,EAAAA,mBAAA,cAAW;AAQX,EAAAA,mBAAA,YAAS;AAOT,EAAAA,mBAAA,eAAY;AAQZ,EAAAA,mBAAA,eAAY;AAQZ,EAAAA,mBAAA,YAAS;AAQT,EAAAA,mBAAA,aAAU;AAQV,EAAAA,mBAAA,cAAW;AAOX,EAAAA,mBAAA,eAAY;AApEF,SAAAA;AAAA,GAAA;AA0EL,IAAK,eAAL,kBAAKC,kBAAL;AAGL,EAAAA,cAAA,eAAY;AAGZ,EAAAA,cAAA,kBAAe;AACf,EAAAA,cAAA,WAAQ;AAPE,SAAAA;AAAA,GAAA;AAaL,IAAK,kBAAL,kBAAKC,qBAAL;AAML,EAAAA,iBAAA,YAAS;AAST,EAAAA,iBAAA,yBAAsB;AAOtB,EAAAA,iBAAA,oBAAiB;AAOjB,EAAAA,iBAAA,gBAAa;AAOb,EAAAA,iBAAA,+BAA4B;AAO5B,EAAAA,iBAAA,cAAW;AAOX,EAAAA,iBAAA,kBAAe;AAUf,EAAAA,iBAAA,WAAQ;AAOR,EAAAA,iBAAA,gBAAa;AAOb,EAAAA,iBAAA,mBAAgB;AAOhB,EAAAA,iBAAA,WAAQ;AAOR,EAAAA,iBAAA,UAAO;AAOP,EAAAA,iBAAA,iBAAc;AAUd,EAAAA,iBAAA,kBAAe;AAQf,EAAAA,iBAAA,wBAAqB;AAUrB,EAAAA,iBAAA,iCAA8B;AAQ9B,EAAAA,iBAAA,yBAAsB;AAStB,EAAAA,iBAAA,6BAA0B;AAQ1B,EAAAA,iBAAA,kCAA+B;AAO/B,EAAAA,iBAAA,kCAA+B;AA3JrB,SAAAA;AAAA,GAAA;AA6bL,IAAK,0BAAL,kBAAKC,6BAAL;AAML,EAAAA,yBAAA,YAAS;AAST,EAAAA,yBAAA,gBAAa;AAYb,EAAAA,yBAAA,eAAY;AA3BF,SAAAA;AAAA,GAAA;AAiCL,IAAK,eAAL,kBAAKC,kBAAL;AACL,EAAAA,cAAA,YAAS;AAGT,EAAAA,cAAA,oBAAiB;AACjB,EAAAA,cAAA,YAAS;AALC,SAAAA;AAAA,GAAA;AAsFL,IAAK,sBAAL,kBAAKC,yBAAL;AACL,EAAAA,qBAAA,SAAM;AACN,EAAAA,qBAAA,YAAS;AACT,EAAAA,qBAAA,UAAO;AAHG,SAAAA;AAAA,GAAA;AAOL,IAAK,qBAAL,kBAAKC,wBAAL;AACL,EAAAA,oBAAA,eAAY;AACZ,EAAAA,oBAAA,YAAS;AACT,EAAAA,oBAAA,cAAW;AAHD,SAAAA;AAAA,GAAA;AAgIL,IAAK,0BAAL,kBAAKC,6BAAL;AAGL,EAAAA,yBAAA,WAAQ;AAGR,EAAAA,yBAAA,YAAS;AAGT,EAAAA,yBAAA,aAAU;AATA,SAAAA;AAAA,GAAA;AA4BL,IAAK,sBAAL,kBAAKC,yBAAL;AACL,EAAAA,qBAAA,uBAAoB;AACpB,EAAAA,qBAAA,cAAW;AACX,EAAAA,qBAAA,qBAAkB;AAClB,EAAAA,qBAAA,cAAW;AAJD,SAAAA;AAAA,GAAA","sourcesContent":["import type { AccessList } from '@ethereumjs/tx';\nimport type EthQuery from '@metamask/eth-query';\nimport type { GasFeeState } from '@metamask/gas-fee-controller';\nimport type { NetworkClientId, Provider } from '@metamask/network-controller';\nimport type { Hex, Json } from '@metamask/utils';\nimport type { Operation } from 'fast-json-patch';\n\n/**\n * Given a record, ensures that each property matches the `Json` type.\n */\n// TODO: Either fix this lint violation or explain why it's necessary to ignore.\n// eslint-disable-next-line @typescript-eslint/naming-convention\ntype MakeJsonCompatible = T extends Json\n ? T\n : {\n [K in keyof T]: T[K] extends Json ? T[K] : never;\n };\n\n/**\n * `Json` from `@metamask/utils` is defined as a recursive type alias, but\n * `Operation` is defined as an interface, and the two are not compatible with\n * each other. Therefore, this is a variant of Operation from `fast-json-patch`\n * which is guaranteed to be type-compatible with `Json`.\n */\ntype JsonCompatibleOperation = MakeJsonCompatible;\n\n/**\n * Representation of transaction metadata.\n */\nexport type TransactionMeta = TransactionMetaBase &\n (\n | {\n status: Exclude;\n }\n | {\n status: TransactionStatus.failed;\n error: TransactionError;\n }\n );\n\n/**\n * Information about a single transaction such as status and block number.\n */\ntype TransactionMetaBase = {\n /**\n * ID of the transaction that approved the swap token transfer.\n */\n approvalTxId?: string;\n\n /**\n * Unique ID to prevent duplicate requests.\n */\n actionId?: string;\n\n /**\n * Base fee of the block as a hex value, introduced in EIP-1559.\n */\n baseFeePerGas?: Hex;\n\n /**\n * Number of the block where the transaction has been included.\n */\n blockNumber?: string;\n\n /**\n * The timestamp for when the block was collated.\n */\n blockTimestamp?: string;\n\n /**\n * Network code as per EIP-155 for this transaction.\n */\n chainId: Hex;\n\n /**\n * A string representing a name of transaction contract method.\n */\n contractMethodName?: string;\n\n /**\n * The balance of the token that is being sent.\n */\n currentTokenBalance?: string;\n\n /**\n * Unique ID for custodian transaction.\n */\n custodyId?: string;\n\n /**\n * Custodian transaction status.\n */\n custodyStatus?: string;\n\n /** The optional custom nonce override as a decimal string. */\n customNonceValue?: string;\n\n /**\n * The custom token amount is the amount set by the user.\n */\n customTokenAmount?: string;\n\n /**\n * The dapp proposed token amount.\n */\n dappProposedTokenAmount?: string;\n\n /**\n * Gas values provided by the dApp.\n */\n dappSuggestedGasFees?: DappSuggestedGasFees;\n\n /**\n * The initial gas values set when the transaction was first created.\n */\n defaultGasEstimates?: DefaultGasEstimates;\n\n /**\n * String to indicate what device the transaction was confirmed on.\n */\n deviceConfirmedOn?: WalletDevice;\n\n /**\n * The address of the token being received of swap transaction.\n */\n destinationTokenAddress?: string;\n\n /**\n * The raw amount of the destination token\n */\n destinationTokenAmount?: string;\n\n /**\n * The decimals of the token being received of swap transaction.\n */\n destinationTokenDecimals?: number;\n\n /**\n * The symbol of the token being received with swap.\n */\n destinationTokenSymbol?: string;\n\n /**\n * The estimated base fee of the transaction.\n */\n estimatedBaseFee?: string;\n\n /**\n * Which estimate level that the API suggested.\n */\n estimateSuggested?: string;\n\n /**\n * Which estimate level was used\n */\n estimateUsed?: string;\n\n /**\n * The chosen amount which will be the same as the originally proposed token\n * amount if the user does not edit the amount or will be a custom token\n * amount set by the user.\n */\n finalApprovalAmount?: string;\n\n /**\n * The number of the latest block when the transaction submit was first retried.\n */\n firstRetryBlockNumber?: string;\n\n /** Alternate EIP-1559 gas fee estimates for multiple priority levels. */\n gasFeeEstimates?: GasFeeEstimates;\n\n /** Whether the gas fee estimates have been checked at least once. */\n gasFeeEstimatesLoaded?: boolean;\n\n /**\n * A hex string of the transaction hash, used to identify the transaction on the network.\n */\n hash?: string;\n\n /**\n * A history of mutations to TransactionMeta.\n */\n history?: TransactionHistory;\n\n /**\n * Generated UUID associated with this transaction.\n */\n id: string;\n\n /**\n * Whether the transaction is a transfer.\n */\n isTransfer?: boolean;\n\n /**\n * Whether the transaction entry is generated from a user operation.\n */\n isUserOperation?: boolean;\n\n /**\n * Additional gas fees to cover the cost of persisting data on layer 1 for layer 2 networks.\n */\n layer1GasFee?: Hex;\n\n /**\n * The ID of the network client used by the transaction.\n */\n networkClientId?: NetworkClientId;\n\n /**\n * Network code as per EIP-155 for this transaction\n *\n * @deprecated Use `chainId` instead.\n */\n readonly networkID?: string;\n\n /**\n * Origin this transaction was sent from.\n */\n origin?: string;\n\n /**\n * The original dapp proposed token approval amount before edit by user.\n */\n originalApprovalAmount?: string;\n\n /**\n * The original gas estimation of the transaction.\n */\n originalGasEstimate?: string;\n\n /**\n * When we speed up a transaction, we set the type as Retry and we lose\n * information about type of transaction that is being set up, so we use\n * original type to track that information.\n */\n originalType?: TransactionType;\n\n /**\n * Account transaction balance after swap.\n */\n postTxBalance?: string;\n\n /**\n * Account transaction balance before swap.\n */\n preTxBalance?: string;\n\n /**\n * The previous gas properties before they were updated.\n */\n previousGas?: {\n /**\n * Maxmimum number of units of gas to use for this transaction.\n */\n gasLimit?: string;\n\n /**\n * Maximum amount per gas to pay for the transaction, including the priority fee.\n */\n maxFeePerGas?: string;\n\n /**\n * Maximum amount per gas to give to validator as incentive.\n */\n maxPriorityFeePerGas?: string;\n };\n\n /**\n * The transaction's 'r' value as a hex string.\n */\n r?: string;\n\n /**\n * Hex representation of the underlying transaction.\n */\n rawTx?: string;\n\n /**\n * When the transaction is dropped, this is the replacement transaction hash.\n */\n replacedBy?: string;\n\n /**\n * When the transaction is dropped, this is the replacement transaction ID.\n */\n replacedById?: string;\n\n /**\n * The number of times that the transaction submit has been retried.\n */\n retryCount?: number;\n\n /**\n * The transaction's 's' value as a hex string.\n */\n s?: string;\n\n /**\n * Response from security validator.\n */\n securityAlertResponse?: SecurityAlertResponse;\n\n /**\n * Response from security provider.\n */\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n securityProviderResponse?: Record;\n\n /**\n * An array of entries that describe the user's journey through the send flow.\n * This is purely attached to state logs for troubleshooting and support.\n */\n sendFlowHistory?: SendFlowHistoryEntry[];\n\n /**\n * Simulation data for the transaction used to predict its outcome.\n */\n simulationData?: SimulationData;\n\n /**\n * If the gas estimation fails, an object containing error and block information.\n */\n simulationFails?: {\n reason?: string;\n errorKey?: string;\n debug: {\n blockNumber?: string;\n blockGasLimit?: string;\n };\n };\n\n /**\n * The time the transaction was submitted to the network, in Unix epoch time (ms).\n */\n submittedTime?: number;\n\n /**\n * The address of the token being swapped\n */\n sourceTokenAddress?: string;\n\n /**\n * The raw amount of the source swap token\n */\n sourceTokenAmount?: string;\n\n /**\n * The decimals of the token being swapped.\n */\n sourceTokenDecimals?: number;\n\n /**\n * The symbol of the token being swapped.\n */\n sourceTokenSymbol?: string;\n\n /**\n * The address of the swap recipient.\n */\n swapAndSendRecipient?: string;\n\n /**\n * The metadata of the swap transaction.\n */\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n swapMetaData?: Record;\n\n /**\n * The value of the token being swapped.\n */\n swapTokenValue?: string;\n\n /**\n * Timestamp associated with this transaction.\n */\n time: number;\n\n /**\n * Whether transaction recipient is a smart contract.\n */\n toSmartContract?: boolean;\n\n /**\n * Additional transfer information.\n */\n transferInformation?: {\n contractAddress: string;\n decimals: number;\n symbol: string;\n };\n\n /**\n * Underlying Transaction object.\n */\n txParams: TransactionParams;\n\n /**\n * Transaction receipt.\n */\n txReceipt?: TransactionReceipt;\n\n /**\n * The type of transaction such as `cancel` or `swap`.\n */\n type?: TransactionType;\n\n /**\n * The gas limit supplied by user.\n */\n userEditedGasLimit?: boolean;\n\n /**\n * Estimate level user selected.\n */\n userFeeLevel?: string;\n\n /**\n * The transaction's 'v' value as a hex string.\n */\n v?: string;\n\n /**\n * Whether the transaction is verified on the blockchain.\n */\n verifiedOnBlockchain?: boolean;\n\n /**\n * Warning information for the transaction.\n */\n warning?: {\n error: string;\n message: string;\n };\n};\n\nexport type SendFlowHistoryEntry = {\n /**\n * String to indicate user interaction information.\n */\n entry: string;\n\n /**\n * Timestamp associated with this entry.\n */\n timestamp: number;\n};\n\n/**\n * Represents the status of a transaction within the wallet.\n * Each status reflects the state of the transaction internally,\n * with some statuses corresponding to the transaction's state on the network.\n *\n * The typical transaction lifecycle follows this state machine:\n * unapproved -> approved -> signed -> submitted -> FINAL_STATE\n * where FINAL_STATE is one of: confirmed, failed, dropped, or rejected.\n */\nexport enum TransactionStatus {\n /**\n * The initial state of a transaction before user approval.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n unapproved = 'unapproved',\n\n /**\n * The transaction has been approved by the user but is not yet signed.\n * This status is usually brief but may be longer for scenarios like hardware wallet usage.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n approved = 'approved',\n\n /**\n * The transaction is signed and in the process of being submitted to the network.\n * This status is typically short-lived but can be longer for certain cases, such as smart transactions.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n signed = 'signed',\n\n /**\n * The transaction has been submitted to the network and is awaiting confirmation.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n submitted = 'submitted',\n\n /**\n * The transaction has been successfully executed and confirmed on the blockchain.\n * This is a final state.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n confirmed = 'confirmed',\n\n /**\n * The transaction encountered an error during execution on the blockchain and failed.\n * This is a final state.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n failed = 'failed',\n\n /**\n * The transaction was superseded by another transaction, resulting in its dismissal.\n * This is a final state.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n dropped = 'dropped',\n\n /**\n * The transaction was rejected by the user and not processed further.\n * This is a final state.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n rejected = 'rejected',\n\n /**\n * @deprecated This status is no longer used.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n cancelled = 'cancelled',\n}\n\n/**\n * Options for wallet device.\n */\nexport enum WalletDevice {\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n MM_MOBILE = 'metamask_mobile',\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n MM_EXTENSION = 'metamask_extension',\n OTHER = 'other_device',\n}\n\n/**\n * The type of the transaction.\n */\nexport enum TransactionType {\n /**\n * A transaction sending a network's native asset to a recipient.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n cancel = 'cancel',\n\n /**\n * A transaction that is interacting with a smart contract's methods that we\n * have not treated as a special case, such as approve, transfer, and\n * transferfrom.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n contractInteraction = 'contractInteraction',\n\n /**\n * A transaction that deployed a smart contract.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n deployContract = 'contractDeployment',\n\n /**\n * A transaction for Ethereum decryption.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ethDecrypt = 'eth_decrypt',\n\n /**\n * A transaction for getting an encryption public key.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ethGetEncryptionPublicKey = 'eth_getEncryptionPublicKey',\n\n /**\n * An incoming (deposit) transaction.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n incoming = 'incoming',\n\n /**\n * A transaction for personal sign.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n personalSign = 'personal_sign',\n\n /**\n * When a transaction is failed it can be retried by\n * resubmitting the same transaction with a higher gas fee. This type is also used\n * to speed up pending transactions. This is accomplished by creating a new tx with\n * the same nonce and higher gas fees.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n retry = 'retry',\n\n /**\n * A transaction sending a network's native asset to a recipient.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n simpleSend = 'simpleSend',\n\n /**\n * A transaction that is signing typed data.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n signTypedData = 'eth_signTypedData',\n\n /**\n * A transaction sending a network's native asset to a recipient.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n smart = 'smart',\n\n /**\n * A transaction swapping one token for another through MetaMask Swaps.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n swap = 'swap',\n\n /**\n * A transaction swapping one token for another through MetaMask Swaps, then sending the swapped token to a recipient.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n swapAndSend = 'swapAndSend',\n\n /**\n * Similar to the approve type, a swap approval is a special case of ERC20\n * approve method that requests an allowance of the token to spend on behalf\n * of the user for the MetaMask Swaps contract. The first swap for any token\n * will have an accompanying swapApproval transaction.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n swapApproval = 'swapApproval',\n\n /**\n * A token transaction requesting an allowance of the token to spend on\n * behalf of the user.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n tokenMethodApprove = 'approve',\n\n /**\n * A token transaction transferring tokens from an account that the sender\n * has an allowance of. The method is prefixed with safe because when calling\n * this method the contract checks to ensure that the receiver is an address\n * capable of handling the token being sent.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n tokenMethodSafeTransferFrom = 'safetransferfrom',\n\n /**\n * A token transaction where the user is sending tokens that they own to\n * another address.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n tokenMethodTransfer = 'transfer',\n\n /**\n * A token transaction transferring tokens from an account that the sender\n * has an allowance of. For more information on allowances, see the approve\n * type.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n tokenMethodTransferFrom = 'transferfrom',\n\n /**\n * A token transaction requesting an allowance of all of a user's tokens to\n * spend on behalf of the user.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n tokenMethodSetApprovalForAll = 'setapprovalforall',\n\n /**\n * Increase the allowance by a given increment\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n tokenMethodIncreaseAllowance = 'increaseAllowance',\n}\n\n/**\n * Standard data concerning a transaction to be processed by the blockchain.\n */\nexport type TransactionParams = {\n /**\n * A list of addresses and storage keys that the transaction plans to access.\n */\n accessList?: AccessList;\n\n /**\n * Network ID as per EIP-155.\n */\n chainId?: Hex;\n\n /**\n * Data to pass with this transaction.\n */\n data?: string;\n\n /**\n * Error message for gas estimation failure.\n */\n estimateGasError?: string;\n\n /**\n * Estimated base fee for this transaction.\n */\n estimatedBaseFee?: string;\n\n /**\n * Which estimate level that the API suggested.\n */\n estimateSuggested?: string;\n\n /**\n * Which estimate level was used\n */\n estimateUsed?: string;\n\n /**\n * Address to send this transaction from.\n */\n from: string;\n\n /**\n * same as gasLimit?\n */\n gas?: string;\n\n /**\n * Maxmimum number of units of gas to use for this transaction.\n */\n gasLimit?: string;\n\n /**\n * Price per gas for legacy txs\n */\n gasPrice?: string;\n\n /**\n * Gas used in the transaction.\n */\n gasUsed?: string;\n\n /**\n * Maximum amount per gas to pay for the transaction, including the priority\n * fee.\n */\n maxFeePerGas?: string;\n\n /**\n * Maximum amount per gas to give to validator as incentive.\n */\n maxPriorityFeePerGas?: string;\n\n /**\n * Unique number to prevent replay attacks.\n */\n nonce?: string;\n\n /**\n * Address to send this transaction to.\n */\n to?: string;\n\n /**\n * Value associated with this transaction.\n */\n value?: string;\n\n /**\n * Type of transaction.\n * 0x0 indicates a legacy transaction.\n */\n type?: string;\n};\n\n/**\n * Standard data concerning a transaction processed by the blockchain.\n */\nexport type TransactionReceipt = {\n /**\n * The block hash of the block that this transaction was included in.\n */\n blockHash?: string;\n\n /**\n * The block number of the block that this transaction was included in.\n */\n blockNumber?: string;\n\n /**\n * Effective gas price the transaction was charged at.\n */\n effectiveGasPrice?: string;\n\n /**\n * Gas used in the transaction.\n */\n gasUsed?: string;\n\n /**\n * Total used gas in hex.\n */\n l1Fee?: string;\n\n /**\n * All the logs emitted by this transaction.\n */\n logs?: Log[];\n\n /**\n * The status of the transaction.\n */\n status?: string;\n\n /**\n * The hexadecimal index of this transaction in the list of transactions included in the block this transaction was mined in.\n */\n transactionIndex?: string;\n};\n\n/**\n * Represents an event that has been included in a transaction using the EVM `LOG` opcode.\n */\nexport type Log = {\n /**\n * Address of the contract that generated log.\n */\n address?: string;\n /**\n * List of topics for log.\n */\n topics?: string;\n};\n\n/**\n * The configuration required to fetch transaction data from a RemoteTransactionSource.\n */\n// This interface was created before this ESLint rule was added.\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface RemoteTransactionSourceRequest {\n /**\n * The address of the account to fetch transactions for.\n */\n address: string;\n\n /**\n * The chainId of the current network.\n */\n currentChainId: Hex;\n\n /**\n * Block number to start fetching transactions from.\n */\n fromBlock?: number;\n\n /**\n * Maximum number of transactions to retrieve.\n */\n limit?: number;\n}\n\n/**\n * An object capable of fetching transaction data from a remote source.\n * Used by the IncomingTransactionHelper to retrieve remote transaction data.\n */\n// This interface was created before this ESLint rule was added.\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface RemoteTransactionSource {\n /**\n * @param chainId - The chainId of the current network.\n * @returns Whether the remote transaction source supports the specified network.\n */\n isSupportedNetwork: (chainId: Hex) => boolean;\n\n /**\n * @returns An array of additional keys to use when caching the last fetched block number.\n */\n getLastBlockVariations?: () => string[];\n\n /**\n * @param request - A request object containing data such as the address and chain ID.\n * @returns An array of transaction metadata for the retrieved transactions.\n */\n fetchTransactions: (\n request: RemoteTransactionSourceRequest,\n ) => Promise;\n}\n\n/**\n * Gas values initially suggested by the dApp.\n */\nexport type DappSuggestedGasFees = {\n gas?: string;\n gasPrice?: string;\n maxFeePerGas?: string;\n maxPriorityFeePerGas?: string;\n};\n\n/**\n * Gas values saved by the user for a specific chain.\n */\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface SavedGasFees {\n maxBaseFee: string;\n priorityFee: string;\n}\n\n/**\n * A transaction history operation that includes a note and timestamp.\n */\ntype ExtendedHistoryOperation = JsonCompatibleOperation & {\n note?: string;\n timestamp?: number;\n};\n\n/**\n * A transaction history entry that includes the ExtendedHistoryOperation as the first element.\n */\nexport type TransactionHistoryEntry = [\n ExtendedHistoryOperation,\n ...JsonCompatibleOperation[],\n];\n\n/**\n * A transaction history that includes the transaction meta as the first element.\n * And the rest of the elements are the operation arrays that were applied to the transaction meta.\n */\nexport type TransactionHistory = [\n TransactionMeta,\n ...TransactionHistoryEntry[],\n];\n\n/**\n * Result of inferring the transaction type.\n */\nexport type InferTransactionTypeResult = {\n /**\n * The contract code, in hex format if it exists. '0x0' or\n * '0x' are also indicators of non-existent contract code.\n */\n getCodeResponse?: string | null;\n\n /**\n * The type of transaction\n */\n type: TransactionType;\n};\n\n/**\n * A function for verifying a transaction, whether it is malicious or not.\n */\nexport type SecurityProviderRequest = (\n requestData: TransactionMeta,\n messageType: string,\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n) => Promise;\n\n/**\n * Specifies the shape of the base transaction parameters.\n * Added in EIP-2718.\n */\nexport enum TransactionEnvelopeType {\n /**\n * A legacy transaction, the very first type.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n legacy = '0x0',\n\n /**\n * EIP-2930 defined the access list transaction type that allowed for\n * specifying the state that a transaction would act upon in advance and\n * theoretically save on gas fees.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n accessList = '0x1',\n\n /**\n * The type introduced comes from EIP-1559, Fee Market describes the addition\n * of a baseFee to blocks that will be burned instead of distributed to\n * miners. Transactions of this type have both a maxFeePerGas (maximum total\n * amount in gwei per gas to spend on the transaction) which is inclusive of\n * the maxPriorityFeePerGas (maximum amount of gwei per gas from the\n * transaction fee to distribute to miner).\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n feeMarket = '0x2',\n}\n\n/**\n * The source of the gas fee parameters on a transaction.\n */\nexport enum UserFeeLevel {\n CUSTOM = 'custom',\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n DAPP_SUGGESTED = 'dappSuggested',\n MEDIUM = 'medium',\n}\n\n/**\n * Initial gas values set when the transaction was first created.\n */\nexport type DefaultGasEstimates = {\n /**\n * Source of the gas fee values, such as `dappSuggested` or `medium`.\n */\n estimateType?: string;\n\n /**\n * Maxmimum number of units of gas to use for this transaction.\n */\n gas?: string;\n\n /**\n * Price per gas for legacy transactions.\n */\n gasPrice?: string;\n\n /**\n * Maximum amount per gas to pay for the transaction, including the priority fee.\n */\n maxFeePerGas?: string;\n\n /**\n * Maximum amount per gas to give to validator as incentive.\n */\n maxPriorityFeePerGas?: string;\n};\n\n/**\n * Data concerning an error while processing a transaction.\n */\nexport type TransactionError = {\n /**\n * A descriptive error name.\n */\n name: string;\n\n /**\n * A descriptive error message providing details about the encountered error.\n */\n message: string;\n\n /**\n * The stack trace associated with the error, if available.\n */\n stack?: string;\n\n /**\n * An optional error code associated with the error.\n */\n code?: string;\n\n /**\n * The rpc property holds additional information related to the error.\n */\n // We are intentionally using `any` here instead of `Json` because it causes\n // `WritableDraft` from Immer to cause TypeScript to error\n // with \"Type instantiation is excessively deep and possibly infinite\". See:\n // \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rpc?: any;\n};\n\n/**\n * Type for security alert response from transaction validator.\n */\nexport type SecurityAlertResponse = {\n reason: string;\n features?: string[];\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n result_type: string;\n providerRequestsCount?: Record;\n};\n\n/** Alternate priority levels for which values are provided in gas fee estimates. */\nexport enum GasFeeEstimateLevel {\n Low = 'low',\n Medium = 'medium',\n High = 'high',\n}\n\n/** Type of gas fee estimate generated by a GasFeeFlow. */\nexport enum GasFeeEstimateType {\n FeeMarket = 'fee-market',\n Legacy = 'legacy',\n GasPrice = 'eth_gasPrice',\n}\n\n/** Gas fee estimates for a specific priority level. */\nexport type FeeMarketGasFeeEstimateForLevel = {\n /** Maximum amount to pay per gas. */\n maxFeePerGas: Hex;\n\n /** Maximum amount per gas to give to the validator as an incentive. */\n maxPriorityFeePerGas: Hex;\n};\n\n/** Gas fee estimates for a EIP-1559 transaction. */\nexport type FeeMarketGasFeeEstimates = {\n type: GasFeeEstimateType.FeeMarket;\n [GasFeeEstimateLevel.Low]: FeeMarketGasFeeEstimateForLevel;\n [GasFeeEstimateLevel.Medium]: FeeMarketGasFeeEstimateForLevel;\n [GasFeeEstimateLevel.High]: FeeMarketGasFeeEstimateForLevel;\n};\n\n/** Gas fee estimates for a legacy transaction. */\nexport type LegacyGasFeeEstimates = {\n type: GasFeeEstimateType.Legacy;\n [GasFeeEstimateLevel.Low]: Hex;\n [GasFeeEstimateLevel.Medium]: Hex;\n [GasFeeEstimateLevel.High]: Hex;\n};\n\n/** Gas fee estimates for a transaction retrieved with the eth_gasPrice method. */\nexport type GasPriceGasFeeEstimates = {\n type: GasFeeEstimateType.GasPrice;\n gasPrice: Hex;\n};\n\n/** Gas fee estimates for a transaction. */\nexport type GasFeeEstimates =\n | FeeMarketGasFeeEstimates\n | LegacyGasFeeEstimates\n | GasPriceGasFeeEstimates;\n\n/** Request to a gas fee flow to obtain gas fee estimates. */\nexport type GasFeeFlowRequest = {\n /** An EthQuery instance to enable queries to the associated RPC provider. */\n ethQuery: EthQuery;\n\n /** Gas fee controller data matching the chain ID of the transaction. */\n gasFeeControllerData: GasFeeState;\n\n /** The metadata of the transaction to obtain estimates for. */\n transactionMeta: TransactionMeta;\n};\n\n/** Response from a gas fee flow containing gas fee estimates. */\nexport type GasFeeFlowResponse = {\n /** The gas fee estimates for the transaction. */\n estimates: GasFeeEstimates;\n};\n\n/** A method of obtaining gas fee estimates for a specific transaction. */\nexport type GasFeeFlow = {\n /**\n * Determine if the gas fee flow supports the specified transaction.\n * @param transactionMeta - The transaction metadata.\n * @returns Whether the gas fee flow supports the transaction.\n */\n matchesTransaction(transactionMeta: TransactionMeta): boolean;\n\n /**\n * Get gas fee estimates for a specific transaction.\n * @param request - The gas fee flow request.\n * @returns The gas fee flow response containing the gas fee estimates.\n */\n getGasFees: (request: GasFeeFlowRequest) => Promise;\n};\n\n/** Request to a layer 1 gas fee flow to obtain layer 1 fee estimate. */\nexport type Layer1GasFeeFlowRequest = {\n /** RPC Provider instance. */\n provider: Provider;\n\n /** The metadata of the transaction to obtain estimates for. */\n transactionMeta: TransactionMeta;\n};\n\n/** Response from a layer 1 gas fee flow containing layer 1 fee estimate. */\nexport type Layer1GasFeeFlowResponse = {\n /** The gas fee estimates for the transaction. */\n layer1Fee: Hex;\n};\n\n/** A method of obtaining layer 1 gas fee estimates for a specific transaction. */\nexport type Layer1GasFeeFlow = {\n /**\n * Determine if the gas fee flow supports the specified transaction.\n * @param transactionMeta - The transaction metadata.\n * @returns Whether the layer1 gas fee flow supports the transaction.\n */\n matchesTransaction(transactionMeta: TransactionMeta): boolean;\n\n /**\n * Get layer 1 gas fee estimates for a specific transaction.\n * @param request - The gas fee flow request.\n * @returns The gas fee flow response containing the layer 1 gas fee estimate.\n */\n getLayer1Fee: (\n request: Layer1GasFeeFlowRequest,\n ) => Promise;\n};\n\n/** Simulation data concerning an update to a native or token balance. */\nexport type SimulationBalanceChange = {\n /** The balance before the transaction. */\n previousBalance: Hex;\n\n /** The balance after the transaction. */\n newBalance: Hex;\n\n /** The difference in balance. */\n difference: Hex;\n\n /** Whether the balance is increasing or decreasing. */\n isDecrease: boolean;\n};\n\n/** Token standards supported by simulation. */\nexport enum SimulationTokenStandard {\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n erc20 = 'erc20',\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n erc721 = 'erc721',\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n erc1155 = 'erc1155',\n}\n\n/** Simulation data concerning an updated token. */\nexport type SimulationToken = {\n /** The token's contract address. */\n address: Hex;\n\n /** The standard of the token. */\n standard: SimulationTokenStandard;\n\n /** The ID of the token if supported by the standard. */\n id?: Hex;\n};\n\n/** Simulation data concerning a change to the a token balance. */\nexport type SimulationTokenBalanceChange = SimulationToken &\n SimulationBalanceChange;\n\nexport enum SimulationErrorCode {\n ChainNotSupported = 'chain-not-supported',\n Disabled = 'disabled',\n InvalidResponse = 'invalid-response',\n Reverted = 'reverted',\n}\n\n/** Error data for a failed simulation. */\nexport type SimulationError = {\n /** Error code to identify the error type. */\n code?: string | number;\n\n /** Error message to describe the error. */\n message?: string;\n};\n\n/** Simulation data for a transaction. */\nexport type SimulationData = {\n /** Error data if the simulation failed or the transaction reverted. */\n error?: SimulationError;\n\n /** Data concerning a change to the user's native balance. */\n nativeBalanceChange?: SimulationBalanceChange;\n\n /** Data concerning a change to the user's token balances. */\n tokenBalanceChanges: SimulationTokenBalanceChange[];\n};\n"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-JXXTNVU4.mjs b/node_modules/@metamask/transaction-controller/dist/chunk-BS5IK7HD.mjs -similarity index 96% -rename from node_modules/@metamask/transaction-controller/dist/chunk-JXXTNVU4.mjs -rename to node_modules/@metamask/transaction-controller/dist/chunk-BS5IK7HD.mjs -index cfd8bad..2951c36 100644 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-JXXTNVU4.mjs -+++ b/node_modules/@metamask/transaction-controller/dist/chunk-BS5IK7HD.mjs -@@ -1,6 +1,6 @@ - import { - GasFeeEstimateLevel --} from "./chunk-6SJYXSF3.mjs"; -+} from "./chunk-KPA3AQWZ.mjs"; - - // src/utils/gas-flow.ts - import { weiHexToGweiDec } from "@metamask/controller-utils"; -@@ -64,4 +64,4 @@ export { - getGasFeeFlow, - mergeGasFeeEstimates - }; --//# sourceMappingURL=chunk-JXXTNVU4.mjs.map -\ No newline at end of file -+//# sourceMappingURL=chunk-BS5IK7HD.mjs.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-C3WC4OJ3.js.map b/node_modules/@metamask/transaction-controller/dist/chunk-C3WC4OJ3.js.map -deleted file mode 100644 -index 45d1c04..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-C3WC4OJ3.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/utils/gas-fees.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\n\nimport {\n ORIGIN_METAMASK,\n gweiDecToWEIBN,\n query,\n toHex,\n} from '@metamask/controller-utils';\nimport type EthQuery from '@metamask/eth-query';\nimport type {\n FetchGasFeeEstimateOptions,\n GasFeeState,\n} from '@metamask/gas-fee-controller';\nimport type { Hex } from '@metamask/utils';\nimport { add0x, createModuleLogger } from '@metamask/utils';\n\nimport { projectLogger } from '../logger';\nimport type {\n SavedGasFees,\n TransactionParams,\n TransactionMeta,\n TransactionType,\n GasFeeFlow,\n} from '../types';\nimport { GasFeeEstimateType, UserFeeLevel } from '../types';\nimport { getGasFeeFlow } from './gas-flow';\nimport { SWAP_TRANSACTION_TYPES } from './swaps';\n\nexport type UpdateGasFeesRequest = {\n eip1559: boolean;\n ethQuery: EthQuery;\n gasFeeFlows: GasFeeFlow[];\n getGasFeeEstimates: (\n options: FetchGasFeeEstimateOptions,\n ) => Promise;\n getSavedGasFees: (chainId: Hex) => SavedGasFees | undefined;\n txMeta: TransactionMeta;\n};\n\nexport type GetGasFeeRequest = UpdateGasFeesRequest & {\n initialParams: TransactionParams;\n savedGasFees?: SavedGasFees;\n suggestedGasFees: SuggestedGasFees;\n};\n\ntype SuggestedGasFees = {\n maxFeePerGas?: string;\n maxPriorityFeePerGas?: string;\n gasPrice?: string;\n};\n\nconst log = createModuleLogger(projectLogger, 'gas-fees');\n\nexport async function updateGasFees(request: UpdateGasFeesRequest) {\n const { txMeta } = request;\n const initialParams = { ...txMeta.txParams };\n\n const isSwap = SWAP_TRANSACTION_TYPES.includes(\n txMeta.type as TransactionType,\n );\n const savedGasFees = isSwap\n ? undefined\n : request.getSavedGasFees(txMeta.chainId);\n\n const suggestedGasFees = await getSuggestedGasFees(request);\n\n log('Suggested gas fees', suggestedGasFees);\n\n const getGasFeeRequest: GetGasFeeRequest = {\n ...request,\n initialParams,\n savedGasFees,\n suggestedGasFees,\n };\n\n txMeta.txParams.maxFeePerGas = getMaxFeePerGas(getGasFeeRequest);\n\n txMeta.txParams.maxPriorityFeePerGas =\n getMaxPriorityFeePerGas(getGasFeeRequest);\n\n txMeta.txParams.gasPrice = getGasPrice(getGasFeeRequest);\n txMeta.userFeeLevel = getUserFeeLevel(getGasFeeRequest);\n\n log('Updated gas fee properties', {\n maxFeePerGas: txMeta.txParams.maxFeePerGas,\n maxPriorityFeePerGas: txMeta.txParams.maxPriorityFeePerGas,\n gasPrice: txMeta.txParams.gasPrice,\n });\n\n if (txMeta.txParams.maxFeePerGas || txMeta.txParams.maxPriorityFeePerGas) {\n delete txMeta.txParams.gasPrice;\n }\n\n if (txMeta.txParams.gasPrice) {\n delete txMeta.txParams.maxFeePerGas;\n delete txMeta.txParams.maxPriorityFeePerGas;\n }\n\n updateDefaultGasEstimates(txMeta);\n}\n\nexport function gweiDecimalToWeiHex(value: string) {\n return toHex(gweiDecToWEIBN(value));\n}\n\nfunction getMaxFeePerGas(request: GetGasFeeRequest): string | undefined {\n const { savedGasFees, eip1559, initialParams, suggestedGasFees } = request;\n\n if (!eip1559) {\n return undefined;\n }\n\n if (savedGasFees) {\n const maxFeePerGas = gweiDecimalToWeiHex(savedGasFees.maxBaseFee as string);\n log('Using maxFeePerGas from savedGasFees', maxFeePerGas);\n return maxFeePerGas;\n }\n\n if (initialParams.maxFeePerGas) {\n log('Using maxFeePerGas from request', initialParams.maxFeePerGas);\n return initialParams.maxFeePerGas;\n }\n\n if (initialParams.gasPrice && !initialParams.maxPriorityFeePerGas) {\n log(\n 'Setting maxFeePerGas to gasPrice from request',\n initialParams.gasPrice,\n );\n return initialParams.gasPrice;\n }\n\n if (suggestedGasFees.maxFeePerGas) {\n log('Using suggested maxFeePerGas', suggestedGasFees.maxFeePerGas);\n return suggestedGasFees.maxFeePerGas;\n }\n\n if (suggestedGasFees.gasPrice) {\n log(\n 'Setting maxFeePerGas to suggested gasPrice',\n suggestedGasFees.gasPrice,\n );\n return suggestedGasFees.gasPrice;\n }\n\n log('maxFeePerGas not set');\n return undefined;\n}\n\nfunction getMaxPriorityFeePerGas(\n request: GetGasFeeRequest,\n): string | undefined {\n const { eip1559, initialParams, savedGasFees, suggestedGasFees, txMeta } =\n request;\n\n if (!eip1559) {\n return undefined;\n }\n\n if (savedGasFees) {\n const maxPriorityFeePerGas = gweiDecimalToWeiHex(savedGasFees.priorityFee);\n log(\n 'Using maxPriorityFeePerGas from savedGasFees.priorityFee',\n maxPriorityFeePerGas,\n );\n return maxPriorityFeePerGas;\n }\n\n if (initialParams.maxPriorityFeePerGas) {\n log(\n 'Using maxPriorityFeePerGas from request',\n initialParams.maxPriorityFeePerGas,\n );\n return initialParams.maxPriorityFeePerGas;\n }\n\n if (initialParams.gasPrice && !initialParams.maxFeePerGas) {\n log(\n 'Setting maxPriorityFeePerGas to gasPrice from request',\n initialParams.gasPrice,\n );\n return initialParams.gasPrice;\n }\n\n if (suggestedGasFees.maxPriorityFeePerGas) {\n log(\n 'Using suggested maxPriorityFeePerGas',\n suggestedGasFees.maxPriorityFeePerGas,\n );\n return suggestedGasFees.maxPriorityFeePerGas;\n }\n\n if (txMeta.txParams.maxFeePerGas) {\n log(\n 'Setting maxPriorityFeePerGas to maxFeePerGas',\n txMeta.txParams.maxFeePerGas,\n );\n return txMeta.txParams.maxFeePerGas;\n }\n\n log('maxPriorityFeePerGas not set');\n return undefined;\n}\n\nfunction getGasPrice(request: GetGasFeeRequest): string | undefined {\n const { eip1559, initialParams, suggestedGasFees } = request;\n\n if (eip1559) {\n return undefined;\n }\n\n if (initialParams.gasPrice) {\n log('Using gasPrice from request', initialParams.gasPrice);\n return initialParams.gasPrice;\n }\n\n if (suggestedGasFees.maxFeePerGas) {\n log('Using suggested maxFeePerGas', suggestedGasFees.maxFeePerGas);\n return suggestedGasFees.maxFeePerGas;\n }\n\n if (suggestedGasFees.gasPrice) {\n log('Using suggested gasPrice', suggestedGasFees.gasPrice);\n return suggestedGasFees.gasPrice;\n }\n\n log('gasPrice not set');\n return undefined;\n}\n\nfunction getUserFeeLevel(request: GetGasFeeRequest): UserFeeLevel | undefined {\n const { eip1559, initialParams, savedGasFees, suggestedGasFees, txMeta } =\n request;\n\n if (!eip1559) {\n return undefined;\n }\n\n if (savedGasFees) {\n return UserFeeLevel.CUSTOM;\n }\n\n if (\n !initialParams.maxFeePerGas &&\n !initialParams.maxPriorityFeePerGas &&\n initialParams.gasPrice\n ) {\n return txMeta.origin === ORIGIN_METAMASK\n ? UserFeeLevel.CUSTOM\n : UserFeeLevel.DAPP_SUGGESTED;\n }\n\n if (\n !initialParams.maxFeePerGas &&\n !initialParams.maxPriorityFeePerGas &&\n suggestedGasFees.maxFeePerGas &&\n suggestedGasFees.maxPriorityFeePerGas\n ) {\n return UserFeeLevel.MEDIUM;\n }\n\n if (txMeta.origin === ORIGIN_METAMASK) {\n return UserFeeLevel.MEDIUM;\n }\n\n return UserFeeLevel.DAPP_SUGGESTED;\n}\n\nfunction updateDefaultGasEstimates(txMeta: TransactionMeta) {\n if (!txMeta.defaultGasEstimates) {\n txMeta.defaultGasEstimates = {};\n }\n\n txMeta.defaultGasEstimates.maxFeePerGas = txMeta.txParams.maxFeePerGas;\n\n txMeta.defaultGasEstimates.maxPriorityFeePerGas =\n txMeta.txParams.maxPriorityFeePerGas;\n\n txMeta.defaultGasEstimates.gasPrice = txMeta.txParams.gasPrice;\n txMeta.defaultGasEstimates.estimateType = txMeta.userFeeLevel;\n}\n\nasync function getSuggestedGasFees(\n request: UpdateGasFeesRequest,\n): Promise {\n const { eip1559, ethQuery, gasFeeFlows, getGasFeeEstimates, txMeta } =\n request;\n\n const { networkClientId } = txMeta;\n\n if (\n (!eip1559 && txMeta.txParams.gasPrice) ||\n (eip1559 &&\n txMeta.txParams.maxFeePerGas &&\n txMeta.txParams.maxPriorityFeePerGas)\n ) {\n return {};\n }\n\n const gasFeeFlow = getGasFeeFlow(txMeta, gasFeeFlows) as GasFeeFlow;\n\n try {\n const gasFeeControllerData = await getGasFeeEstimates({ networkClientId });\n\n const response = await gasFeeFlow.getGasFees({\n ethQuery,\n gasFeeControllerData,\n transactionMeta: txMeta,\n });\n\n const gasFeeEstimateType = response.estimates?.type;\n\n switch (gasFeeEstimateType) {\n case GasFeeEstimateType.FeeMarket:\n return response.estimates.medium;\n case GasFeeEstimateType.Legacy:\n return {\n gasPrice: response.estimates.medium,\n };\n case GasFeeEstimateType.GasPrice:\n return { gasPrice: response.estimates.gasPrice };\n default:\n throw new Error(\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `Unsupported gas fee estimate type returned from flow: ${gasFeeEstimateType}`,\n );\n }\n } catch (error) {\n log('Failed to get suggested gas fees', error);\n }\n\n const gasPriceDecimal = (await query(ethQuery, 'gasPrice')) as number;\n\n const gasPrice = gasPriceDecimal\n ? add0x(gasPriceDecimal.toString(16))\n : undefined;\n\n return { gasPrice };\n}\n"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-EVL6KODQ.mjs b/node_modules/@metamask/transaction-controller/dist/chunk-D7MMS3XU.mjs -similarity index 94% -rename from node_modules/@metamask/transaction-controller/dist/chunk-EVL6KODQ.mjs -rename to node_modules/@metamask/transaction-controller/dist/chunk-D7MMS3XU.mjs -index 24da206..faf6449 100644 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-EVL6KODQ.mjs -+++ b/node_modules/@metamask/transaction-controller/dist/chunk-D7MMS3XU.mjs -@@ -1,6 +1,6 @@ - import { - simulateTransactions --} from "./chunk-K4KOSAGM.mjs"; -+} from "./chunk-4AO3XGIE.mjs"; - import { - SimulationError, - SimulationInvalidResponseError, -@@ -58,8 +58,9 @@ var SUPPORTED_TOKEN_ABIS = { - } - }; - var REVERTED_ERRORS = ["execution reverted", "insufficient funds for gas"]; --async function getSimulationData(request) { -+async function getSimulationData(request, options = {}) { - const { chainId, from, to, value, data } = request; -+ const { blockTime } = options; - log("Getting simulation data", request); - try { - const response = await simulateTransactions(chainId, { -@@ -74,7 +75,12 @@ async function getSimulationData(request) { - } - ], - withCallTrace: true, -- withLogs: true -+ withLogs: true, -+ ...blockTime && { -+ blockOverrides: { -+ time: toHex(blockTime) -+ } -+ } - }); - const transactionError = response.transactions?.[0]?.error; - if (transactionError) { -@@ -83,7 +89,11 @@ async function getSimulationData(request) { - const nativeBalanceChange = getNativeBalanceChange(request.from, response); - const events = getEvents(response); - log("Parsed events", events); -- const tokenBalanceChanges = await getTokenBalanceChanges(request, events); -+ const tokenBalanceChanges = await getTokenBalanceChanges( -+ request, -+ events, -+ options -+ ); - return { - nativeBalanceChange, - tokenBalanceChanges -@@ -160,7 +170,8 @@ function parseEventArgValue(value) { - } - return (value.toHexString?.() ?? value).toLowerCase(); - } --async function getTokenBalanceChanges(request, events) { -+async function getTokenBalanceChanges(request, events, options) { -+ const { blockTime } = options; - const balanceTxs = getTokenBalanceTransactions(request, events); - log("Generated balance transactions", [...balanceTxs.after.values()]); - const transactions = [ -@@ -172,7 +183,12 @@ async function getTokenBalanceChanges(request, events) { - return []; - } - const response = await simulateTransactions(request.chainId, { -- transactions -+ transactions, -+ ...blockTime && { -+ blockOverrides: { -+ time: toHex(blockTime) -+ } -+ } - }); - log("Balance simulation response", response); - if (response.transactions.length !== transactions.length) { -@@ -349,4 +365,4 @@ export { - getSimulationData, - getEvents - }; --//# sourceMappingURL=chunk-EVL6KODQ.mjs.map -\ No newline at end of file -+//# sourceMappingURL=chunk-D7MMS3XU.mjs.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-ARZHJFVG.js b/node_modules/@metamask/transaction-controller/dist/chunk-DFHIQE5D.js -similarity index 92% -rename from node_modules/@metamask/transaction-controller/dist/chunk-ARZHJFVG.js -rename to node_modules/@metamask/transaction-controller/dist/chunk-DFHIQE5D.js -index 17e99dc..64abdb2 100644 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-ARZHJFVG.js -+++ b/node_modules/@metamask/transaction-controller/dist/chunk-DFHIQE5D.js -@@ -1,12 +1,12 @@ - "use strict";Object.defineProperty(exports, "__esModule", {value: true}); - --var _chunkQTKXIDGEjs = require('./chunk-QTKXIDGE.js'); -+var _chunk3T3U64NOjs = require('./chunk-3T3U64NO.js'); - - - var _chunkS6VGOPUYjs = require('./chunk-S6VGOPUY.js'); - - --var _chunkAYTU4HU5js = require('./chunk-AYTU4HU5.js'); -+var _chunkM3VM35IDjs = require('./chunk-M3VM35ID.js'); - - - -@@ -48,7 +48,7 @@ var LineaGasFeeFlow = class { - return await _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _getLineaGasFees, getLineaGasFees_fn).call(this, request); - } catch (error) { - log("Using default flow as fallback due to error", error); -- return new (0, _chunkQTKXIDGEjs.DefaultGasFeeFlow)().getGasFees(request); -+ return new (0, _chunk3T3U64NOjs.DefaultGasFeeFlow)().getGasFees(request); - } - } - }; -@@ -63,7 +63,7 @@ getLineaGasFees_fn = async function(request) { - log("Generated priority fees", _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _feesToString, feesToString_fn).call(this, priorityFees)); - const maxFees = _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _getMaxFees, getMaxFees_fn).call(this, baseFees, priorityFees); - log("Generated max fees", _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _feesToString, feesToString_fn).call(this, maxFees)); -- const estimates = Object.values(_chunkAYTU4HU5js.GasFeeEstimateLevel).reduce( -+ const estimates = Object.values(_chunkM3VM35IDjs.GasFeeEstimateLevel).reduce( - (result, level) => ({ - ...result, - [level]: { -@@ -110,7 +110,7 @@ getMaxFees_fn = function(baseFees, priorityFees) { - }; - _feesToString = new WeakSet(); - feesToString_fn = function(fees) { -- return Object.values(_chunkAYTU4HU5js.GasFeeEstimateLevel).map( -+ return Object.values(_chunkM3VM35IDjs.GasFeeEstimateLevel).map( - (level) => fees[level].toString(10) - ); - }; -@@ -118,4 +118,4 @@ feesToString_fn = function(fees) { - - - exports.LineaGasFeeFlow = LineaGasFeeFlow; --//# sourceMappingURL=chunk-ARZHJFVG.js.map -\ No newline at end of file -+//# sourceMappingURL=chunk-DFHIQE5D.js.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-EGQCE3FK.mjs.map b/node_modules/@metamask/transaction-controller/dist/chunk-EGQCE3FK.mjs.map -deleted file mode 100644 -index d4edfdb..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-EGQCE3FK.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/utils/etherscan.ts"],"sourcesContent":["import { handleFetch } from '@metamask/controller-utils';\nimport type { Hex } from '@metamask/utils';\n\nimport { ETHERSCAN_SUPPORTED_NETWORKS } from '../constants';\nimport { incomingTransactionsLogger as log } from '../logger';\n\n// This interface was created before this ESLint rule was added.\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface EtherscanTransactionMetaBase {\n blockNumber: string;\n blockHash: string;\n confirmations: string;\n contractAddress: string;\n cumulativeGasUsed: string;\n from: string;\n gas: string;\n gasPrice: string;\n gasUsed: string;\n hash: string;\n nonce: string;\n timeStamp: string;\n to: string;\n transactionIndex: string;\n value: string;\n}\n\n// This interface was created before this ESLint rule was added.\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface EtherscanTransactionMeta extends EtherscanTransactionMetaBase {\n functionName: string;\n input: string;\n isError: string;\n methodId: string;\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n txreceipt_status: string;\n}\n\n// This interface was created before this ESLint rule was added.\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface EtherscanTokenTransactionMeta\n extends EtherscanTransactionMetaBase {\n tokenDecimal: string;\n tokenName: string;\n tokenSymbol: string;\n}\n\n// This interface was created before this ESLint rule was added.\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface EtherscanTransactionResponse<\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n T extends EtherscanTransactionMetaBase,\n> {\n status: '0' | '1';\n message?: string;\n result: string | T[];\n}\n\n// This interface was created before this ESLint rule was added.\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface EtherscanTransactionRequest {\n address: string;\n chainId: Hex;\n fromBlock?: number;\n limit?: number;\n}\n\n/**\n * Retrieves transaction data from Etherscan.\n *\n * @param request - Configuration required to fetch transactions.\n * @param request.address - Address to retrieve transactions for.\n * @param request.chainId - Current chain ID used to determine subdomain and domain.\n * @param request.fromBlock - Block number to start fetching transactions from.\n * @param request.limit - Number of transactions to retrieve.\n * @returns An Etherscan response object containing the request status and an array of token transaction data.\n */\nexport async function fetchEtherscanTransactions({\n address,\n chainId,\n fromBlock,\n limit,\n}: EtherscanTransactionRequest): Promise<\n EtherscanTransactionResponse\n> {\n return await fetchTransactions('txlist', {\n address,\n chainId,\n fromBlock,\n limit,\n });\n}\n\n/**\n * Retrieves token transaction data from Etherscan.\n *\n * @param request - Configuration required to fetch token transactions.\n * @param request.address - Address to retrieve token transactions for.\n * @param request.chainId - Current chain ID used to determine subdomain and domain.\n * @param request.fromBlock - Block number to start fetching token transactions from.\n * @param request.limit - Number of token transactions to retrieve.\n * @returns An Etherscan response object containing the request status and an array of token transaction data.\n */\nexport async function fetchEtherscanTokenTransactions({\n address,\n chainId,\n fromBlock,\n limit,\n}: EtherscanTransactionRequest): Promise<\n EtherscanTransactionResponse\n> {\n return await fetchTransactions('tokentx', {\n address,\n chainId,\n fromBlock,\n limit,\n });\n}\n\n/**\n * Retrieves transaction data from Etherscan from a specific endpoint.\n *\n * @param action - The Etherscan endpoint to use.\n * @param options - Options bag.\n * @param options.address - Address to retrieve transactions for.\n * @param options.chainId - Current chain ID used to determine subdomain and domain.\n * @param options.fromBlock - Block number to start fetching transactions from.\n * @param options.limit - Number of transactions to retrieve.\n * @returns An object containing the request status and an array of transaction data.\n */\n// TODO: Either fix this lint violation or explain why it's necessary to ignore.\n// eslint-disable-next-line @typescript-eslint/naming-convention\nasync function fetchTransactions(\n action: string,\n {\n address,\n chainId,\n fromBlock,\n limit,\n }: {\n address: string;\n chainId: Hex;\n fromBlock?: number;\n limit?: number;\n },\n): Promise> {\n const urlParams = {\n module: 'account',\n address,\n startBlock: fromBlock?.toString(),\n offset: limit?.toString(),\n sort: 'desc',\n };\n\n const etherscanTxUrl = getEtherscanApiUrl(chainId, {\n ...urlParams,\n action,\n });\n\n log('Sending Etherscan request', etherscanTxUrl);\n\n const response = (await handleFetch(\n etherscanTxUrl,\n )) as EtherscanTransactionResponse;\n\n return response;\n}\n\n/**\n * Return a URL that can be used to fetch data from Etherscan.\n *\n * @param chainId - Current chain ID used to determine subdomain and domain.\n * @param urlParams - The parameters used to construct the URL.\n * @returns URL to access Etherscan data.\n */\nfunction getEtherscanApiUrl(\n chainId: Hex,\n urlParams: Record,\n): string {\n const apiUrl = getEtherscanApiHost(chainId);\n let url = `${apiUrl}/api?`;\n\n for (const paramKey of Object.keys(urlParams)) {\n const value = urlParams[paramKey];\n\n if (!value) {\n continue;\n }\n\n url += `${paramKey}=${value}&`;\n }\n\n url += 'tag=latest&page=1';\n\n return url;\n}\n\n/**\n * Return the host url used to fetch data from Etherscan.\n *\n * @param chainId - Current chain ID used to determine subdomain and domain.\n * @returns host URL to access Etherscan data.\n */\nexport function getEtherscanApiHost(chainId: Hex) {\n // @ts-expect-error We account for `chainId` not being a property below\n const networkInfo = ETHERSCAN_SUPPORTED_NETWORKS[chainId];\n\n if (!networkInfo) {\n throw new Error(`Etherscan does not support chain with ID: ${chainId}`);\n }\n\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n return `https://${networkInfo.subdomain}.${networkInfo.domain}`;\n}\n"],"mappings":";;;;;;;;AAAA,SAAS,mBAAmB;AAmF5B,eAAsB,2BAA2B;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEE;AACA,SAAO,MAAM,kBAAkB,UAAU;AAAA,IACvC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAYA,eAAsB,gCAAgC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEE;AACA,SAAO,MAAM,kBAAkB,WAAW;AAAA,IACxC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAeA,eAAe,kBACb,QACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAM0C;AAC1C,QAAM,YAAY;AAAA,IAChB,QAAQ;AAAA,IACR;AAAA,IACA,YAAY,WAAW,SAAS;AAAA,IAChC,QAAQ,OAAO,SAAS;AAAA,IACxB,MAAM;AAAA,EACR;AAEA,QAAM,iBAAiB,mBAAmB,SAAS;AAAA,IACjD,GAAG;AAAA,IACH;AAAA,EACF,CAAC;AAED,6BAAI,6BAA6B,cAAc;AAE/C,QAAM,WAAY,MAAM;AAAA,IACtB;AAAA,EACF;AAEA,SAAO;AACT;AASA,SAAS,mBACP,SACA,WACQ;AACR,QAAM,SAAS,oBAAoB,OAAO;AAC1C,MAAI,MAAM,GAAG,MAAM;AAEnB,aAAW,YAAY,OAAO,KAAK,SAAS,GAAG;AAC7C,UAAM,QAAQ,UAAU,QAAQ;AAEhC,QAAI,CAAC,OAAO;AACV;AAAA,IACF;AAEA,WAAO,GAAG,QAAQ,IAAI,KAAK;AAAA,EAC7B;AAEA,SAAO;AAEP,SAAO;AACT;AAQO,SAAS,oBAAoB,SAAc;AAEhD,QAAM,cAAc,6BAA6B,OAAO;AAExD,MAAI,CAAC,aAAa;AAChB,UAAM,IAAI,MAAM,6CAA6C,OAAO,EAAE;AAAA,EACxE;AAIA,SAAO,WAAW,YAAY,SAAS,IAAI,YAAY,MAAM;AAC/D;","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-EKJXGERC.mjs.map b/node_modules/@metamask/transaction-controller/dist/chunk-EKJXGERC.mjs.map -deleted file mode 100644 -index 70c0b87..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-EKJXGERC.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/helpers/EtherscanRemoteTransactionSource.ts"],"sourcesContent":["import { BNToHex } from '@metamask/controller-utils';\nimport type { Hex } from '@metamask/utils';\nimport { Mutex } from 'async-mutex';\nimport BN from 'bn.js';\nimport { v1 as random } from 'uuid';\n\nimport { ETHERSCAN_SUPPORTED_NETWORKS } from '../constants';\nimport { incomingTransactionsLogger as log } from '../logger';\nimport type {\n RemoteTransactionSource,\n RemoteTransactionSourceRequest,\n TransactionMeta,\n} from '../types';\nimport { TransactionStatus, TransactionType } from '../types';\nimport {\n fetchEtherscanTokenTransactions,\n fetchEtherscanTransactions,\n} from '../utils/etherscan';\nimport type {\n EtherscanTokenTransactionMeta,\n EtherscanTransactionMeta,\n EtherscanTransactionMetaBase,\n EtherscanTransactionRequest,\n EtherscanTransactionResponse,\n} from '../utils/etherscan';\n\nconst ETHERSCAN_RATE_LIMIT_INTERVAL = 5000;\n/**\n * A RemoteTransactionSource that fetches transaction data from Etherscan.\n */\nexport class EtherscanRemoteTransactionSource\n implements RemoteTransactionSource\n{\n #includeTokenTransfers: boolean;\n\n #isTokenRequestPending: boolean;\n\n #mutex = new Mutex();\n\n constructor({\n includeTokenTransfers,\n }: { includeTokenTransfers?: boolean } = {}) {\n this.#includeTokenTransfers = includeTokenTransfers ?? true;\n this.#isTokenRequestPending = false;\n }\n\n isSupportedNetwork(chainId: Hex): boolean {\n return Object.keys(ETHERSCAN_SUPPORTED_NETWORKS).includes(chainId);\n }\n\n getLastBlockVariations(): string[] {\n return [this.#isTokenRequestPending ? 'token' : 'normal'];\n }\n\n async fetchTransactions(\n request: RemoteTransactionSourceRequest,\n ): Promise {\n const releaseLock = await this.#mutex.acquire();\n const acquiredTime = Date.now();\n\n const etherscanRequest: EtherscanTransactionRequest = {\n ...request,\n chainId: request.currentChainId,\n };\n\n try {\n const transactions = this.#isTokenRequestPending\n ? await this.#fetchTokenTransactions(request, etherscanRequest)\n : await this.#fetchNormalTransactions(request, etherscanRequest);\n\n if (this.#includeTokenTransfers) {\n this.#isTokenRequestPending = !this.#isTokenRequestPending;\n }\n\n return transactions;\n } finally {\n this.#releaseLockAfterInterval(acquiredTime, releaseLock);\n }\n }\n\n #releaseLockAfterInterval(acquireTime: number, releaseLock: () => void) {\n const elapsedTime = Date.now() - acquireTime;\n const remainingTime = Math.max(\n 0,\n ETHERSCAN_RATE_LIMIT_INTERVAL - elapsedTime,\n );\n // Wait for the remaining time if it hasn't been 5 seconds yet\n if (remainingTime > 0) {\n setTimeout(releaseLock, remainingTime);\n } else {\n releaseLock();\n }\n }\n\n #fetchNormalTransactions = async (\n request: RemoteTransactionSourceRequest,\n etherscanRequest: EtherscanTransactionRequest,\n ) => {\n const { currentChainId } = request;\n\n const etherscanTransactions = await fetchEtherscanTransactions(\n etherscanRequest,\n );\n\n return this.#getResponseTransactions(etherscanTransactions).map((tx) =>\n this.#normalizeTransaction(tx, currentChainId),\n );\n };\n\n #fetchTokenTransactions = async (\n request: RemoteTransactionSourceRequest,\n etherscanRequest: EtherscanTransactionRequest,\n ) => {\n const { currentChainId } = request;\n\n const etherscanTransactions = await fetchEtherscanTokenTransactions(\n etherscanRequest,\n );\n\n return this.#getResponseTransactions(etherscanTransactions).map((tx) =>\n this.#normalizeTokenTransaction(tx, currentChainId),\n );\n };\n\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n #getResponseTransactions(\n response: EtherscanTransactionResponse,\n ): T[] {\n let result = response.result as T[];\n\n if (response.status === '0') {\n result = [];\n\n if (response.result.length) {\n log('Ignored Etherscan request error', {\n message: response.result,\n type: this.#isTokenRequestPending ? 'token' : 'normal',\n });\n }\n }\n\n return result;\n }\n\n #normalizeTransaction(\n txMeta: EtherscanTransactionMeta,\n currentChainId: Hex,\n ): TransactionMeta {\n const base = this.#normalizeTransactionBase(txMeta, currentChainId);\n\n return {\n ...base,\n txParams: {\n ...base.txParams,\n data: txMeta.input,\n },\n ...(txMeta.isError === '0'\n ? { status: TransactionStatus.confirmed }\n : {\n error: new Error('Transaction failed'),\n status: TransactionStatus.failed,\n }),\n };\n }\n\n #normalizeTokenTransaction(\n txMeta: EtherscanTokenTransactionMeta,\n currentChainId: Hex,\n ): TransactionMeta {\n const base = this.#normalizeTransactionBase(txMeta, currentChainId);\n\n return {\n ...base,\n isTransfer: true,\n transferInformation: {\n contractAddress: txMeta.contractAddress,\n decimals: Number(txMeta.tokenDecimal),\n symbol: txMeta.tokenSymbol,\n },\n };\n }\n\n #normalizeTransactionBase(\n txMeta: EtherscanTransactionMetaBase,\n currentChainId: Hex,\n ): TransactionMeta {\n const time = parseInt(txMeta.timeStamp, 10) * 1000;\n\n return {\n blockNumber: txMeta.blockNumber,\n chainId: currentChainId,\n hash: txMeta.hash,\n id: random({ msecs: time }),\n status: TransactionStatus.confirmed,\n time,\n txParams: {\n chainId: currentChainId,\n from: txMeta.from,\n gas: BNToHex(new BN(txMeta.gas)),\n gasPrice: BNToHex(new BN(txMeta.gasPrice)),\n gasUsed: BNToHex(new BN(txMeta.gasUsed)),\n nonce: BNToHex(new BN(txMeta.nonce)),\n to: txMeta.to,\n value: BNToHex(new BN(txMeta.value)),\n },\n type: TransactionType.incoming,\n verifiedOnBlockchain: false,\n };\n }\n}\n"],"mappings":"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","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-OZ6UB42C.js b/node_modules/@metamask/transaction-controller/dist/chunk-EVJRYRCR.js -similarity index 85% -rename from node_modules/@metamask/transaction-controller/dist/chunk-OZ6UB42C.js -rename to node_modules/@metamask/transaction-controller/dist/chunk-EVJRYRCR.js -index fef26d9..41034c0 100644 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-OZ6UB42C.js -+++ b/node_modules/@metamask/transaction-controller/dist/chunk-EVJRYRCR.js -@@ -1,10 +1,11 @@ --"use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/utils/utils.ts -+"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }// src/utils/utils.ts - var _controllerutils = require('@metamask/controller-utils'); - - - - - var _utils = require('@metamask/utils'); -+var _bnjs = require('bn.js'); var _bnjs2 = _interopRequireDefault(_bnjs); - var ESTIMATE_GAS_ERROR = "eth_estimateGas rpc method error"; - var NORMALIZERS = { - data: (data) => _utils.add0x.call(void 0, padHexToEvenLength(data)), -@@ -108,6 +109,20 @@ function padHexToEvenLength(hex) { - const evenData = data.length % 2 === 0 ? data : `0${data}`; - return prefix + evenData; - } -+function getPercentageChange(originalValue, newValue) { -+ const precisionFactor = new (0, _bnjs2.default)(10).pow(new (0, _bnjs2.default)(18)); -+ const originalValuePrecision = originalValue.mul(precisionFactor); -+ const newValuePrecision = newValue.mul(precisionFactor); -+ const difference = newValuePrecision.sub(originalValuePrecision); -+ if (difference.isZero()) { -+ return 0; -+ } -+ if (originalValuePrecision.isZero() && !newValuePrecision.isZero()) { -+ return 100; -+ } -+ return difference.muln(100).div(originalValuePrecision).abs().toNumber(); -+} -+ - - - -@@ -123,5 +138,5 @@ function padHexToEvenLength(hex) { - - - --exports.ESTIMATE_GAS_ERROR = ESTIMATE_GAS_ERROR; exports.normalizeTransactionParams = normalizeTransactionParams; exports.isEIP1559Transaction = isEIP1559Transaction; exports.validateGasValues = validateGasValues; exports.isFeeMarketEIP1559Values = isFeeMarketEIP1559Values; exports.isGasPriceValue = isGasPriceValue; exports.getIncreasedPriceHex = getIncreasedPriceHex; exports.getIncreasedPriceFromExisting = getIncreasedPriceFromExisting; exports.validateMinimumIncrease = validateMinimumIncrease; exports.validateIfTransactionUnapproved = validateIfTransactionUnapproved; exports.normalizeTxError = normalizeTxError; exports.normalizeGasFeeValues = normalizeGasFeeValues; exports.padHexToEvenLength = padHexToEvenLength; --//# sourceMappingURL=chunk-OZ6UB42C.js.map -\ No newline at end of file -+exports.ESTIMATE_GAS_ERROR = ESTIMATE_GAS_ERROR; exports.normalizeTransactionParams = normalizeTransactionParams; exports.isEIP1559Transaction = isEIP1559Transaction; exports.validateGasValues = validateGasValues; exports.isFeeMarketEIP1559Values = isFeeMarketEIP1559Values; exports.isGasPriceValue = isGasPriceValue; exports.getIncreasedPriceHex = getIncreasedPriceHex; exports.getIncreasedPriceFromExisting = getIncreasedPriceFromExisting; exports.validateMinimumIncrease = validateMinimumIncrease; exports.validateIfTransactionUnapproved = validateIfTransactionUnapproved; exports.normalizeTxError = normalizeTxError; exports.normalizeGasFeeValues = normalizeGasFeeValues; exports.padHexToEvenLength = padHexToEvenLength; exports.getPercentageChange = getPercentageChange; -+//# sourceMappingURL=chunk-EVJRYRCR.js.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-EVL6KODQ.mjs.map b/node_modules/@metamask/transaction-controller/dist/chunk-EVL6KODQ.mjs.map -deleted file mode 100644 -index 861c1dd..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-EVL6KODQ.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/utils/simulation.ts"],"sourcesContent":["import type { Fragment, LogDescription, Result } from '@ethersproject/abi';\nimport { Interface } from '@ethersproject/abi';\nimport { hexToBN, toHex } from '@metamask/controller-utils';\nimport { abiERC20, abiERC721, abiERC1155 } from '@metamask/metamask-eth-abis';\nimport { createModuleLogger, type Hex } from '@metamask/utils';\n\nimport {\n ABI_SIMULATION_ERC20_WRAPPED,\n ABI_SIMULATION_ERC721_LEGACY,\n} from '../constants';\nimport {\n SimulationError,\n SimulationInvalidResponseError,\n SimulationRevertedError,\n} from '../errors';\nimport { projectLogger } from '../logger';\nimport type {\n SimulationBalanceChange,\n SimulationData,\n SimulationTokenBalanceChange,\n SimulationToken,\n} from '../types';\nimport { SimulationTokenStandard } from '../types';\nimport { simulateTransactions } from './simulation-api';\nimport type {\n SimulationResponseLog,\n SimulationRequestTransaction,\n SimulationResponse,\n SimulationResponseCallTrace,\n SimulationResponseTransaction,\n} from './simulation-api';\n\nexport enum SupportedToken {\n ERC20 = 'erc20',\n ERC721 = 'erc721',\n ERC1155 = 'erc1155',\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ERC20_WRAPPED = 'erc20Wrapped',\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ERC721_LEGACY = 'erc721Legacy',\n}\n\ntype ABI = Fragment[];\n\nexport type GetSimulationDataRequest = {\n chainId: Hex;\n from: Hex;\n to?: Hex;\n value?: Hex;\n data?: Hex;\n};\n\ntype ParsedEvent = {\n contractAddress: Hex;\n tokenStandard: SimulationTokenStandard;\n name: string;\n args: Record;\n abi: ABI;\n};\n\nconst log = createModuleLogger(projectLogger, 'simulation');\n\nconst SUPPORTED_EVENTS = [\n 'Transfer',\n 'TransferSingle',\n 'TransferBatch',\n 'Deposit',\n 'Withdrawal',\n];\n\nconst SUPPORTED_TOKEN_ABIS = {\n [SupportedToken.ERC20]: {\n abi: abiERC20,\n standard: SimulationTokenStandard.erc20,\n },\n [SupportedToken.ERC721]: {\n abi: abiERC721,\n standard: SimulationTokenStandard.erc721,\n },\n [SupportedToken.ERC1155]: {\n abi: abiERC1155,\n standard: SimulationTokenStandard.erc1155,\n },\n [SupportedToken.ERC20_WRAPPED]: {\n abi: ABI_SIMULATION_ERC20_WRAPPED,\n standard: SimulationTokenStandard.erc20,\n },\n [SupportedToken.ERC721_LEGACY]: {\n abi: ABI_SIMULATION_ERC721_LEGACY,\n standard: SimulationTokenStandard.erc721,\n },\n};\n\nconst REVERTED_ERRORS = ['execution reverted', 'insufficient funds for gas'];\n\ntype BalanceTransactionMap = Map;\n\n/**\n * Generate simulation data for a transaction.\n * @param request - The transaction to simulate.\n * @param request.chainId - The chain ID of the transaction.\n * @param request.from - The sender of the transaction.\n * @param request.to - The recipient of the transaction.\n * @param request.value - The value of the transaction.\n * @param request.data - The data of the transaction.\n * @returns The simulation data.\n */\nexport async function getSimulationData(\n request: GetSimulationDataRequest,\n): Promise {\n const { chainId, from, to, value, data } = request;\n\n log('Getting simulation data', request);\n\n try {\n const response = await simulateTransactions(chainId, {\n transactions: [\n {\n data,\n from,\n maxFeePerGas: '0x0',\n maxPriorityFeePerGas: '0x0',\n to,\n value,\n },\n ],\n withCallTrace: true,\n withLogs: true,\n });\n\n const transactionError = response.transactions?.[0]?.error;\n\n if (transactionError) {\n throw new SimulationError(transactionError);\n }\n\n const nativeBalanceChange = getNativeBalanceChange(request.from, response);\n const events = getEvents(response);\n\n log('Parsed events', events);\n\n const tokenBalanceChanges = await getTokenBalanceChanges(request, events);\n\n return {\n nativeBalanceChange,\n tokenBalanceChanges,\n };\n } catch (error) {\n log('Failed to get simulation data', error, request);\n\n let simulationError = error as SimulationError;\n\n if (\n REVERTED_ERRORS.some((revertErrorMessage) =>\n simulationError.message?.includes(revertErrorMessage),\n )\n ) {\n simulationError = new SimulationRevertedError();\n }\n\n const { code, message } = simulationError;\n\n return {\n tokenBalanceChanges: [],\n error: {\n code,\n message,\n },\n };\n }\n}\n\n/**\n * Extract the native balance change from a simulation response.\n * @param userAddress - The user's account address.\n * @param response - The simulation response.\n * @returns The native balance change or undefined if unchanged.\n */\nfunction getNativeBalanceChange(\n userAddress: Hex,\n response: SimulationResponse,\n): SimulationBalanceChange | undefined {\n const transactionResponse = response.transactions[0];\n\n /* istanbul ignore next */\n if (!transactionResponse) {\n return undefined;\n }\n\n const { stateDiff } = transactionResponse;\n const previousBalance = stateDiff?.pre?.[userAddress]?.balance;\n const newBalance = stateDiff?.post?.[userAddress]?.balance;\n\n if (!previousBalance || !newBalance) {\n return undefined;\n }\n\n return getSimulationBalanceChange(previousBalance, newBalance);\n}\n\n/**\n * Extract events from a simulation response.\n * @param response - The simulation response.\n * @returns The parsed events.\n */\nexport function getEvents(response: SimulationResponse): ParsedEvent[] {\n /* istanbul ignore next */\n const logs = extractLogs(\n response.transactions[0]?.callTrace ?? ({} as SimulationResponseCallTrace),\n );\n\n log('Extracted logs', logs);\n\n const interfaces = getContractInterfaces();\n\n return logs\n .map((currentLog) => {\n const event = parseLog(currentLog, interfaces);\n\n if (!event) {\n log('Failed to parse log', currentLog);\n return undefined;\n }\n\n /* istanbul ignore next */\n const inputs = event.abi.find((e) => e.name === event.name)?.inputs;\n\n /* istanbul ignore if */\n if (!inputs) {\n log('Failed to find inputs for event', event);\n return undefined;\n }\n\n const args = parseEventArgs(event.args, inputs);\n\n return {\n contractAddress: currentLog.address,\n tokenStandard: event.standard,\n name: event.name,\n args,\n abi: event.abi,\n };\n })\n .filter((e) => e !== undefined) as ParsedEvent[];\n}\n\n/**\n * Parse event arguments using ABI input definitions.\n * @param args - The raw event arguments.\n * @param abiInputs - The ABI input definitions.\n * @returns The parsed event arguments.\n */\nfunction parseEventArgs(\n args: Result,\n abiInputs: { name: string }[],\n): Record {\n return args.reduce((result, arg, index) => {\n const name = abiInputs[index].name.replace('_', '');\n const value = parseEventArgValue(arg);\n\n result[name] = value;\n\n return result;\n }, {});\n}\n\n/**\n * Parse an event argument value.\n * @param value - The event argument value.\n * @returns The parsed event argument value.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction parseEventArgValue(value: any): Hex | Hex[] {\n if (Array.isArray(value)) {\n return value.map(parseEventArgValue) as Hex[];\n }\n\n return (value.toHexString?.() ?? value).toLowerCase();\n}\n\n/**\n * Generate token balance changes from parsed events.\n * @param request - The transaction that was simulated.\n * @param events - The parsed events.\n * @returns An array of token balance changes.\n */\nasync function getTokenBalanceChanges(\n request: GetSimulationDataRequest,\n events: ParsedEvent[],\n): Promise {\n const balanceTxs = getTokenBalanceTransactions(request, events);\n\n log('Generated balance transactions', [...balanceTxs.after.values()]);\n\n const transactions = [\n ...balanceTxs.before.values(),\n request,\n ...balanceTxs.after.values(),\n ];\n\n if (transactions.length === 1) {\n return [];\n }\n\n const response = await simulateTransactions(request.chainId as Hex, {\n transactions,\n });\n\n log('Balance simulation response', response);\n\n if (response.transactions.length !== transactions.length) {\n throw new SimulationInvalidResponseError();\n }\n\n let prevBalanceTxIndex = 0;\n return [...balanceTxs.after.keys()]\n .map((token, index) => {\n const previousBalanceCheckSkipped = !balanceTxs.before.get(token);\n const previousBalance = previousBalanceCheckSkipped\n ? '0x0'\n : getValueFromBalanceTransaction(\n request.from,\n token,\n // eslint-disable-next-line no-plusplus\n response.transactions[prevBalanceTxIndex++],\n );\n\n const newBalance = getValueFromBalanceTransaction(\n request.from,\n token,\n response.transactions[index + balanceTxs.before.size + 1],\n );\n\n const balanceChange = getSimulationBalanceChange(\n previousBalance,\n newBalance,\n );\n\n if (!balanceChange) {\n return undefined;\n }\n\n return {\n ...token,\n ...balanceChange,\n };\n })\n .filter((change) => change !== undefined) as SimulationTokenBalanceChange[];\n}\n\n/**\n * Generate transactions to check token balances.\n * @param request - The transaction that was simulated.\n * @param events - The parsed events.\n * @returns A map of token balance transactions keyed by token.\n */\nfunction getTokenBalanceTransactions(\n request: GetSimulationDataRequest,\n events: ParsedEvent[],\n): {\n before: BalanceTransactionMap;\n after: BalanceTransactionMap;\n} {\n const tokenKeys = new Set();\n const before = new Map();\n const after = new Map();\n\n const userEvents = events.filter(\n (event) =>\n SUPPORTED_EVENTS.includes(event.name) &&\n [event.args.from, event.args.to].includes(request.from),\n );\n\n log('Filtered user events', userEvents);\n\n for (const event of userEvents) {\n const tokenIds = getEventTokenIds(event);\n\n log('Extracted token ids', tokenIds);\n\n for (const tokenId of tokenIds) {\n const simulationToken: SimulationToken = {\n address: event.contractAddress,\n standard: event.tokenStandard,\n id: tokenId,\n };\n\n const tokenKey = JSON.stringify(simulationToken);\n\n if (tokenKeys.has(tokenKey)) {\n log(\n 'Ignoring additional event with same contract and token ID',\n simulationToken,\n );\n continue;\n }\n\n tokenKeys.add(tokenKey);\n\n const data = getBalanceTransactionData(\n event.tokenStandard,\n request.from,\n tokenId,\n );\n\n const transaction: SimulationRequestTransaction = {\n from: request.from,\n to: event.contractAddress,\n data,\n };\n\n if (skipPriorBalanceCheck(event)) {\n after.set(simulationToken, transaction);\n } else {\n before.set(simulationToken, transaction);\n after.set(simulationToken, transaction);\n }\n }\n }\n\n return { before, after };\n}\n\n/**\n * Check if an event needs to check the previous balance.\n * @param event - The parsed event.\n * @returns True if the prior balance check should be skipped.\n */\nfunction skipPriorBalanceCheck(event: ParsedEvent): boolean {\n // In the case of an NFT mint, we cannot check the NFT owner before the mint\n // as the balance check transaction would revert.\n return (\n event.name === 'Transfer' &&\n event.tokenStandard === SimulationTokenStandard.erc721 &&\n parseInt(event.args.from as string, 16) === 0\n );\n}\n\n/**\n * Extract token IDs from a parsed event.\n * @param event - The parsed event.\n * @returns An array of token IDs.\n */\nfunction getEventTokenIds(event: ParsedEvent): (Hex | undefined)[] {\n if (event.tokenStandard === SimulationTokenStandard.erc721) {\n return [event.args.tokenId as Hex];\n }\n\n if (\n event.tokenStandard === SimulationTokenStandard.erc1155 &&\n event.name === 'TransferSingle'\n ) {\n return [event.args.id as Hex];\n }\n\n if (\n event.tokenStandard === SimulationTokenStandard.erc1155 &&\n event.name === 'TransferBatch'\n ) {\n return event.args.ids as Hex[];\n }\n\n // ERC-20 does not have a token ID so default to undefined.\n return [undefined];\n}\n\n/**\n * Extract the value from a balance transaction response.\n * @param from - The address to check the balance of.\n * @param token - The token to check the balance of.\n * @param response - The balance transaction response.\n * @returns The value of the balance transaction.\n */\nfunction getValueFromBalanceTransaction(\n from: Hex,\n token: SimulationToken,\n response: SimulationResponseTransaction,\n): Hex {\n const normalizedReturn = normalizeReturnValue(response.return);\n\n if (token.standard === SimulationTokenStandard.erc721) {\n return normalizedReturn === from ? '0x1' : '0x0';\n }\n\n return normalizedReturn;\n}\n\n/**\n * Generate the balance transaction data for a token.\n * @param tokenStandard - The token standard.\n * @param from - The address to check the balance of.\n * @param tokenId - The token ID to check the balance of.\n * @returns The balance transaction data.\n */\nfunction getBalanceTransactionData(\n tokenStandard: SimulationTokenStandard,\n from: Hex,\n tokenId?: Hex,\n): Hex {\n switch (tokenStandard) {\n case SimulationTokenStandard.erc721:\n return new Interface(abiERC721).encodeFunctionData('ownerOf', [\n tokenId,\n ]) as Hex;\n\n case SimulationTokenStandard.erc1155:\n return new Interface(abiERC1155).encodeFunctionData('balanceOf', [\n from,\n tokenId,\n ]) as Hex;\n\n default:\n return new Interface(abiERC20).encodeFunctionData('balanceOf', [\n from,\n ]) as Hex;\n }\n}\n\n/**\n * Parse a raw event log using known ABIs.\n * @param eventLog - The raw event log.\n * @param interfaces - The contract interfaces.\n * @returns The parsed event log or undefined if it could not be parsed.\n */\nfunction parseLog(\n eventLog: SimulationResponseLog,\n interfaces: Map,\n):\n | (LogDescription & { abi: ABI; standard: SimulationTokenStandard })\n | undefined {\n const supportedTokens = Object.values(SupportedToken);\n\n for (const token of supportedTokens) {\n try {\n const contractInterface = interfaces.get(token) as Interface;\n const { abi, standard } = SUPPORTED_TOKEN_ABIS[token];\n\n return {\n ...contractInterface.parseLog(eventLog),\n abi,\n standard,\n };\n } catch (e) {\n continue;\n }\n }\n\n return undefined;\n}\n\n/**\n * Extract all logs from a call trace tree.\n * @param call - The root call trace.\n * @returns An array of logs.\n */\nfunction extractLogs(\n call: SimulationResponseCallTrace,\n): SimulationResponseLog[] {\n /* istanbul ignore next */\n const logs = call.logs ?? [];\n\n /* istanbul ignore next */\n const nestedCalls = call.calls ?? [];\n\n return [\n ...logs,\n ...nestedCalls.map((nestedCall) => extractLogs(nestedCall)).flat(),\n ];\n}\n\n/**\n * Generate balance change data from previous and new balances.\n * @param previousBalance - The previous balance.\n * @param newBalance - The new balance.\n * @returns The balance change data or undefined if unchanged.\n */\nfunction getSimulationBalanceChange(\n previousBalance: Hex,\n newBalance: Hex,\n): SimulationBalanceChange | undefined {\n const differenceBN = hexToBN(newBalance).sub(hexToBN(previousBalance));\n const isDecrease = differenceBN.isNeg();\n const difference = toHex(differenceBN.abs());\n\n if (differenceBN.isZero()) {\n log('Balance change is zero');\n return undefined;\n }\n\n return {\n previousBalance,\n newBalance,\n difference,\n isDecrease,\n };\n}\n\n/**\n * Normalize a return value.\n * @param value - The return value to normalize.\n * @returns The normalized return value.\n */\nfunction normalizeReturnValue(value: Hex): Hex {\n return toHex(hexToBN(value));\n}\n\n/**\n * Get the contract interfaces for all supported tokens.\n * @returns A map of supported tokens to their contract interfaces.\n */\nfunction getContractInterfaces(): Map {\n const supportedTokens = Object.values(SupportedToken);\n\n return new Map(\n supportedTokens.map((tokenType) => {\n const { abi } = SUPPORTED_TOKEN_ABIS[tokenType];\n const contractInterface = new Interface(abi);\n return [tokenType, contractInterface];\n }),\n );\n}\n"],"mappings":"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","names":["SupportedToken"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-Q56I5ONX.mjs b/node_modules/@metamask/transaction-controller/dist/chunk-F7IJZOCR.mjs -similarity index 87% -rename from node_modules/@metamask/transaction-controller/dist/chunk-Q56I5ONX.mjs -rename to node_modules/@metamask/transaction-controller/dist/chunk-F7IJZOCR.mjs -index 1853adf..6f6e578 100644 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-Q56I5ONX.mjs -+++ b/node_modules/@metamask/transaction-controller/dist/chunk-F7IJZOCR.mjs -@@ -5,6 +5,7 @@ import { - getKnownPropertyNames, - isStrictHexString - } from "@metamask/utils"; -+import BN from "bn.js"; - var ESTIMATE_GAS_ERROR = "eth_estimateGas rpc method error"; - var NORMALIZERS = { - data: (data) => add0x(padHexToEvenLength(data)), -@@ -108,6 +109,19 @@ function padHexToEvenLength(hex) { - const evenData = data.length % 2 === 0 ? data : `0${data}`; - return prefix + evenData; - } -+function getPercentageChange(originalValue, newValue) { -+ const precisionFactor = new BN(10).pow(new BN(18)); -+ const originalValuePrecision = originalValue.mul(precisionFactor); -+ const newValuePrecision = newValue.mul(precisionFactor); -+ const difference = newValuePrecision.sub(originalValuePrecision); -+ if (difference.isZero()) { -+ return 0; -+ } -+ if (originalValuePrecision.isZero() && !newValuePrecision.isZero()) { -+ return 100; -+ } -+ return difference.muln(100).div(originalValuePrecision).abs().toNumber(); -+} - - export { - ESTIMATE_GAS_ERROR, -@@ -122,6 +136,7 @@ export { - validateIfTransactionUnapproved, - normalizeTxError, - normalizeGasFeeValues, -- padHexToEvenLength -+ padHexToEvenLength, -+ getPercentageChange - }; --//# sourceMappingURL=chunk-Q56I5ONX.mjs.map -\ No newline at end of file -+//# sourceMappingURL=chunk-F7IJZOCR.mjs.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-FG74Z3F5.mjs.map b/node_modules/@metamask/transaction-controller/dist/chunk-FG74Z3F5.mjs.map -deleted file mode 100644 -index cb2178d..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-FG74Z3F5.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/gas-flows/OracleLayer1GasFeeFlow.ts"],"sourcesContent":["import { Common, Hardfork } from '@ethereumjs/common';\nimport { TransactionFactory } from '@ethereumjs/tx';\nimport { Contract } from '@ethersproject/contracts';\nimport { Web3Provider, type ExternalProvider } from '@ethersproject/providers';\nimport type { Hex } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\nimport { omit } from 'lodash';\n\nimport { projectLogger } from '../logger';\nimport type {\n Layer1GasFeeFlow,\n Layer1GasFeeFlowRequest,\n Layer1GasFeeFlowResponse,\n TransactionMeta,\n} from '../types';\n\nconst log = createModuleLogger(projectLogger, 'oracle-layer1-gas-fee-flow');\n\nconst DUMMY_KEY =\n 'abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789';\n\nconst GAS_PRICE_ORACLE_ABI = [\n {\n inputs: [{ internalType: 'bytes', name: '_data', type: 'bytes' }],\n name: 'getL1Fee',\n outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],\n stateMutability: 'view',\n type: 'function',\n },\n];\n\n/**\n * Layer 1 gas fee flow that obtains gas fee estimate using an oracle smart contract.\n */\nexport abstract class OracleLayer1GasFeeFlow implements Layer1GasFeeFlow {\n #oracleAddress: Hex;\n\n #signTransaction: boolean;\n\n constructor(oracleAddress: Hex, signTransaction?: boolean) {\n this.#oracleAddress = oracleAddress;\n this.#signTransaction = signTransaction ?? false;\n }\n\n abstract matchesTransaction(transactionMeta: TransactionMeta): boolean;\n\n async getLayer1Fee(\n request: Layer1GasFeeFlowRequest,\n ): Promise {\n try {\n return await this.#getOracleLayer1GasFee(request);\n } catch (error) {\n log('Failed to get oracle layer 1 gas fee', error);\n throw new Error(`Failed to get oracle layer 1 gas fee`);\n }\n }\n\n async #getOracleLayer1GasFee(\n request: Layer1GasFeeFlowRequest,\n ): Promise {\n const { provider, transactionMeta } = request;\n\n const contract = new Contract(\n this.#oracleAddress,\n GAS_PRICE_ORACLE_ABI,\n // Network controller provider type is incompatible with ethers provider\n new Web3Provider(provider as unknown as ExternalProvider),\n );\n\n const serializedTransaction = this.#buildUnserializedTransaction(\n transactionMeta,\n this.#signTransaction,\n ).serialize();\n\n const result = await contract.getL1Fee(serializedTransaction);\n\n if (result === undefined) {\n throw new Error('No value returned from oracle contract');\n }\n\n return {\n layer1Fee: result.toHexString(),\n };\n }\n\n #buildUnserializedTransaction(\n transactionMeta: TransactionMeta,\n sign: boolean,\n ) {\n const txParams = this.#buildTransactionParams(transactionMeta);\n const common = this.#buildTransactionCommon(transactionMeta);\n\n let unserializedTransaction = TransactionFactory.fromTxData(txParams, {\n common,\n });\n\n if (sign) {\n const keyBuffer = Buffer.from(DUMMY_KEY, 'hex');\n unserializedTransaction = unserializedTransaction.sign(keyBuffer);\n }\n\n return unserializedTransaction;\n }\n\n #buildTransactionParams(\n transactionMeta: TransactionMeta,\n ): TransactionMeta['txParams'] {\n return {\n ...omit(transactionMeta.txParams, 'gas'),\n gasLimit: transactionMeta.txParams.gas,\n };\n }\n\n #buildTransactionCommon(transactionMeta: TransactionMeta) {\n const chainId = Number(transactionMeta.chainId);\n\n return Common.custom({\n chainId,\n defaultHardfork: Hardfork.London,\n });\n }\n}\n"],"mappings":";;;;;;;;;;;AAAA,SAAS,QAAQ,gBAAgB;AACjC,SAAS,0BAA0B;AACnC,SAAS,gBAAgB;AACzB,SAAS,oBAA2C;AAEpD,SAAS,0BAA0B;AACnC,SAAS,YAAY;AAUrB,IAAM,MAAM,mBAAmB,eAAe,4BAA4B;AAE1E,IAAM,YACJ;AAEF,IAAM,uBAAuB;AAAA,EAC3B;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,SAAS,MAAM,SAAS,MAAM,QAAQ,CAAC;AAAA,IAChE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;AA7BA;AAkCO,IAAe,yBAAf,MAAkE;AAAA,EAKvE,YAAY,eAAoB,iBAA2B;AAkB3D,uBAAM;AA4BN;AAmBA;AASA;AA9EA;AAEA;AAGE,uBAAK,gBAAiB;AACtB,uBAAK,kBAAmB,mBAAmB;AAAA,EAC7C;AAAA,EAIA,MAAM,aACJ,SACmC;AACnC,QAAI;AACF,aAAO,MAAM,sBAAK,kDAAL,WAA4B;AAAA,IAC3C,SAAS,OAAO;AACd,UAAI,wCAAwC,KAAK;AACjD,YAAM,IAAI,MAAM,sCAAsC;AAAA,IACxD;AAAA,EACF;AAkEF;AAtFE;AAEA;AAoBM;AAAA,2BAAsB,eAC1B,SACmC;AACnC,QAAM,EAAE,UAAU,gBAAgB,IAAI;AAEtC,QAAM,WAAW,IAAI;AAAA,IACnB,mBAAK;AAAA,IACL;AAAA;AAAA,IAEA,IAAI,aAAa,QAAuC;AAAA,EAC1D;AAEA,QAAM,wBAAwB,sBAAK,gEAAL,WAC5B,iBACA,mBAAK,mBACL,UAAU;AAEZ,QAAM,SAAS,MAAM,SAAS,SAAS,qBAAqB;AAE5D,MAAI,WAAW,QAAW;AACxB,UAAM,IAAI,MAAM,wCAAwC;AAAA,EAC1D;AAEA,SAAO;AAAA,IACL,WAAW,OAAO,YAAY;AAAA,EAChC;AACF;AAEA;AAAA,kCAA6B,SAC3B,iBACA,MACA;AACA,QAAM,WAAW,sBAAK,oDAAL,WAA6B;AAC9C,QAAM,SAAS,sBAAK,oDAAL,WAA6B;AAE5C,MAAI,0BAA0B,mBAAmB,WAAW,UAAU;AAAA,IACpE;AAAA,EACF,CAAC;AAED,MAAI,MAAM;AACR,UAAM,YAAY,OAAO,KAAK,WAAW,KAAK;AAC9C,8BAA0B,wBAAwB,KAAK,SAAS;AAAA,EAClE;AAEA,SAAO;AACT;AAEA;AAAA,4BAAuB,SACrB,iBAC6B;AAC7B,SAAO;AAAA,IACL,GAAG,KAAK,gBAAgB,UAAU,KAAK;AAAA,IACvC,UAAU,gBAAgB,SAAS;AAAA,EACrC;AACF;AAEA;AAAA,4BAAuB,SAAC,iBAAkC;AACxD,QAAM,UAAU,OAAO,gBAAgB,OAAO;AAE9C,SAAO,OAAO,OAAO;AAAA,IACnB;AAAA,IACA,iBAAiB,SAAS;AAAA,EAC5B,CAAC;AACH;","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-FMRLPVFZ.mjs.map b/node_modules/@metamask/transaction-controller/dist/chunk-FMRLPVFZ.mjs.map -deleted file mode 100644 -index 7ac03ce..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-FMRLPVFZ.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/gas-flows/TestGasFeeFlow.ts"],"sourcesContent":["import { toHex } from '@metamask/controller-utils';\nimport type { Hex } from '@metamask/utils';\n\nimport {\n GasFeeEstimateType,\n type GasFeeFlow,\n type GasFeeFlowRequest,\n type GasFeeFlowResponse,\n type TransactionMeta,\n} from '../types';\n\nconst INCREMENT = 1e15; // 0.001 ETH\nconst LEVEL_DIFFERENCE = 0.5;\n\n/**\n * A gas fee flow to facilitate testing in the clients.\n * Increments the total gas fee by a fixed amount each time it is called.\n * Relies on the transaction's gas value to generate a distinct total fee in the UI.\n */\nexport class TestGasFeeFlow implements GasFeeFlow {\n #counter = 1;\n\n matchesTransaction(_transactionMeta: TransactionMeta): boolean {\n return true;\n }\n\n async getGasFees(request: GasFeeFlowRequest): Promise {\n const { transactionMeta } = request;\n const { txParams } = transactionMeta;\n const { gas: gasHex } = txParams;\n\n if (!gasHex) {\n throw new Error('Cannot estimate fee without gas value');\n }\n\n const gasDecimal = parseInt(gasHex, 16);\n const difference = INCREMENT * LEVEL_DIFFERENCE;\n\n const mediumMaxTarget = (this.#counter + 1) * INCREMENT;\n const mediumPriorityTarget = this.#counter * INCREMENT;\n\n const lowMaxTarget = mediumMaxTarget - difference;\n const lowPriorityTarget = mediumPriorityTarget - difference;\n\n const highMaxTarget = mediumMaxTarget + difference;\n const highPriorityTarget = mediumPriorityTarget + difference;\n\n this.#counter += 1;\n\n return {\n estimates: {\n type: GasFeeEstimateType.FeeMarket,\n low: {\n maxFeePerGas: this.#getValueForTotalFee(lowMaxTarget, gasDecimal),\n maxPriorityFeePerGas: this.#getValueForTotalFee(\n lowPriorityTarget,\n gasDecimal,\n ),\n },\n medium: {\n maxFeePerGas: this.#getValueForTotalFee(mediumMaxTarget, gasDecimal),\n maxPriorityFeePerGas: this.#getValueForTotalFee(\n mediumPriorityTarget,\n gasDecimal,\n ),\n },\n high: {\n maxFeePerGas: this.#getValueForTotalFee(highMaxTarget, gasDecimal),\n maxPriorityFeePerGas: this.#getValueForTotalFee(\n highPriorityTarget,\n gasDecimal,\n ),\n },\n },\n };\n }\n\n #getValueForTotalFee(totalFee: number, gas: number): Hex {\n const feeDecimal = Math.ceil(totalFee / gas);\n return toHex(feeDecimal);\n }\n}\n"],"mappings":";;;;;;;;AAAA,SAAS,aAAa;AAWtB,IAAM,YAAY;AAClB,IAAM,mBAAmB;AAZzB;AAmBO,IAAM,iBAAN,MAA2C;AAAA,EAA3C;AA0DL;AAzDA,iCAAW;AAAA;AAAA,EAEX,mBAAmB,kBAA4C;AAC7D,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,WAAW,SAAyD;AACxE,UAAM,EAAE,gBAAgB,IAAI;AAC5B,UAAM,EAAE,SAAS,IAAI;AACrB,UAAM,EAAE,KAAK,OAAO,IAAI;AAExB,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,uCAAuC;AAAA,IACzD;AAEA,UAAM,aAAa,SAAS,QAAQ,EAAE;AACtC,UAAM,aAAa,YAAY;AAE/B,UAAM,mBAAmB,mBAAK,YAAW,KAAK;AAC9C,UAAM,uBAAuB,mBAAK,YAAW;AAE7C,UAAM,eAAe,kBAAkB;AACvC,UAAM,oBAAoB,uBAAuB;AAEjD,UAAM,gBAAgB,kBAAkB;AACxC,UAAM,qBAAqB,uBAAuB;AAElD,uBAAK,UAAL,mBAAK,YAAY;AAEjB,WAAO;AAAA,MACL,WAAW;AAAA,QACT;AAAA,QACA,KAAK;AAAA,UACH,cAAc,sBAAK,8CAAL,WAA0B,cAAc;AAAA,UACtD,sBAAsB,sBAAK,8CAAL,WACpB,mBACA;AAAA,QAEJ;AAAA,QACA,QAAQ;AAAA,UACN,cAAc,sBAAK,8CAAL,WAA0B,iBAAiB;AAAA,UACzD,sBAAsB,sBAAK,8CAAL,WACpB,sBACA;AAAA,QAEJ;AAAA,QACA,MAAM;AAAA,UACJ,cAAc,sBAAK,8CAAL,WAA0B,eAAe;AAAA,UACvD,sBAAsB,sBAAK,8CAAL,WACpB,oBACA;AAAA,QAEJ;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAMF;AA7DE;AAyDA;AAAA,yBAAoB,SAAC,UAAkB,KAAkB;AACvD,QAAM,aAAa,KAAK,KAAK,WAAW,GAAG;AAC3C,SAAO,MAAM,UAAU;AACzB;","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-FRKQ3Z2L.mjs.map b/node_modules/@metamask/transaction-controller/dist/chunk-FRKQ3Z2L.mjs.map -deleted file mode 100644 -index a1c5aad..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-FRKQ3Z2L.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/utils/external-transactions.ts"],"sourcesContent":["// These utility functions are exclusively used by `confirmExternalTransaction` method in controller\nimport { rpcErrors } from '@metamask/rpc-errors';\n\nimport { TransactionStatus } from '../types';\nimport type { TransactionMeta } from '../types';\n\n/**\n * Validates the external provided transaction meta.\n *\n * @param transactionMeta - The transaction meta to validate.\n * @param confirmedTxs - The confirmed transactions in controller state.\n * @param pendingTxs - The submitted transactions in controller state.\n */\nexport function validateConfirmedExternalTransaction(\n transactionMeta?: TransactionMeta,\n confirmedTxs?: TransactionMeta[],\n pendingTxs?: TransactionMeta[],\n) {\n if (!transactionMeta || !transactionMeta.txParams) {\n throw rpcErrors.invalidParams(\n '\"transactionMeta\" or \"transactionMeta.txParams\" is missing',\n );\n }\n\n if (transactionMeta.status !== TransactionStatus.confirmed) {\n throw rpcErrors.invalidParams(\n 'External transaction status should be \"confirmed\"',\n );\n }\n\n const externalTxNonce = transactionMeta.txParams.nonce;\n if (pendingTxs && pendingTxs.length > 0) {\n const foundPendingTxByNonce = pendingTxs.find(\n (tx) => tx.txParams?.nonce === externalTxNonce,\n );\n if (foundPendingTxByNonce) {\n throw rpcErrors.invalidParams(\n 'External transaction nonce should not be in pending txs',\n );\n }\n }\n\n if (confirmedTxs && confirmedTxs.length > 0) {\n const foundConfirmedTxByNonce = confirmedTxs.find(\n (tx) => tx.txParams?.nonce === externalTxNonce,\n );\n if (foundConfirmedTxByNonce) {\n throw rpcErrors.invalidParams(\n 'External transaction nonce should not be in confirmed txs',\n );\n }\n }\n}\n"],"mappings":";AACA,SAAS,iBAAiB;AAYnB,SAAS,qCACd,iBACA,cACA,YACA;AACA,MAAI,CAAC,mBAAmB,CAAC,gBAAgB,UAAU;AACjD,UAAM,UAAU;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAEA,MAAI,gBAAgB,wCAAwC;AAC1D,UAAM,UAAU;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAEA,QAAM,kBAAkB,gBAAgB,SAAS;AACjD,MAAI,cAAc,WAAW,SAAS,GAAG;AACvC,UAAM,wBAAwB,WAAW;AAAA,MACvC,CAAC,OAAO,GAAG,UAAU,UAAU;AAAA,IACjC;AACA,QAAI,uBAAuB;AACzB,YAAM,UAAU;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,gBAAgB,aAAa,SAAS,GAAG;AAC3C,UAAM,0BAA0B,aAAa;AAAA,MAC3C,CAAC,OAAO,GAAG,UAAU,UAAU;AAAA,IACjC;AACA,QAAI,yBAAyB;AAC3B,YAAM,UAAU;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-GNAL5HC2.mjs.map b/node_modules/@metamask/transaction-controller/dist/chunk-GNAL5HC2.mjs.map -deleted file mode 100644 -index 26cf9ce..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-GNAL5HC2.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/utils/swaps.ts"],"sourcesContent":["import { query } from '@metamask/controller-utils';\nimport type EthQuery from '@metamask/eth-query';\nimport { merge, pickBy } from 'lodash';\n\nimport { CHAIN_IDS } from '../constants';\nimport { createModuleLogger, projectLogger } from '../logger';\nimport type { TransactionControllerMessenger } from '../TransactionController';\nimport type { TransactionMeta } from '../types';\nimport { TransactionType } from '../types';\nimport { validateIfTransactionUnapproved } from './utils';\n\nconst log = createModuleLogger(projectLogger, 'swaps');\n\n/**\n * Interval in milliseconds between checks of post transaction balance\n */\nexport const UPDATE_POST_TX_BALANCE_TIMEOUT = 5000;\n\n/**\n * Retry attempts for checking post transaction balance\n */\nexport const UPDATE_POST_TX_BALANCE_ATTEMPTS = 6;\n\nconst SWAPS_TESTNET_CHAIN_ID = '0x539';\n\n/**\n * An address that the metaswap-api recognizes as the default token for the current network, in place of the token address that ERC-20 tokens have\n */\nexport const DEFAULT_TOKEN_ADDRESS =\n '0x0000000000000000000000000000000000000000';\n\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\ninterface SwapsTokenObject {\n /**\n * The name for the network\n */\n name: string;\n /**\n * An address that the metaswap-api recognizes as the default token\n */\n address: string;\n /**\n * Number of digits after decimal point\n */\n decimals: number;\n}\n\nconst ETH_SWAPS_TOKEN_OBJECT: SwapsTokenObject = {\n name: 'Ether',\n address: DEFAULT_TOKEN_ADDRESS,\n decimals: 18,\n};\n\nconst BNB_SWAPS_TOKEN_OBJECT: SwapsTokenObject = {\n name: 'Binance Coin',\n address: DEFAULT_TOKEN_ADDRESS,\n decimals: 18,\n} as const;\n\nconst MATIC_SWAPS_TOKEN_OBJECT: SwapsTokenObject = {\n name: 'Matic',\n address: DEFAULT_TOKEN_ADDRESS,\n decimals: 18,\n} as const;\n\nconst AVAX_SWAPS_TOKEN_OBJECT: SwapsTokenObject = {\n name: 'Avalanche',\n address: DEFAULT_TOKEN_ADDRESS,\n decimals: 18,\n} as const;\n\nconst TEST_ETH_SWAPS_TOKEN_OBJECT: SwapsTokenObject = {\n name: 'Test Ether',\n address: DEFAULT_TOKEN_ADDRESS,\n decimals: 18,\n} as const;\n\nconst GOERLI_SWAPS_TOKEN_OBJECT: SwapsTokenObject = {\n name: 'Ether',\n address: DEFAULT_TOKEN_ADDRESS,\n decimals: 18,\n} as const;\n\nconst ARBITRUM_SWAPS_TOKEN_OBJECT: SwapsTokenObject = {\n ...ETH_SWAPS_TOKEN_OBJECT,\n} as const;\n\nconst OPTIMISM_SWAPS_TOKEN_OBJECT: SwapsTokenObject = {\n ...ETH_SWAPS_TOKEN_OBJECT,\n} as const;\n\nconst ZKSYNC_ERA_SWAPS_TOKEN_OBJECT: SwapsTokenObject = {\n ...ETH_SWAPS_TOKEN_OBJECT,\n} as const;\n\nexport const SWAPS_CHAINID_DEFAULT_TOKEN_MAP = {\n [CHAIN_IDS.MAINNET]: ETH_SWAPS_TOKEN_OBJECT,\n [SWAPS_TESTNET_CHAIN_ID]: TEST_ETH_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.BSC]: BNB_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.POLYGON]: MATIC_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.GOERLI]: GOERLI_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.AVALANCHE]: AVAX_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.OPTIMISM]: OPTIMISM_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.ARBITRUM]: ARBITRUM_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.ZKSYNC_ERA]: ZKSYNC_ERA_SWAPS_TOKEN_OBJECT,\n} as const;\n\nexport const SWAP_TRANSACTION_TYPES = [\n TransactionType.swap,\n TransactionType.swapAndSend,\n TransactionType.swapApproval,\n];\n\n/**\n * Updates the transaction meta object with the swap information\n *\n * @param transactionMeta - The transaction meta object to update\n * @param transactionType - The type of the transaction\n * @param swaps - The swaps object\n * @param swaps.hasApproveTx - Whether the swap has an approval transaction\n * @param swaps.meta - The swap meta object\n * @param updateSwapsTransactionRequest - Dependency bag\n * @param updateSwapsTransactionRequest.isSwapsDisabled - Whether swaps are disabled\n * @param updateSwapsTransactionRequest.cancelTransaction - Function to cancel a transaction\n * @param updateSwapsTransactionRequest.messenger - TransactionController messenger\n * @returns A copy of the transaction meta object with updates, or the same\n * transaction meta object if no updates were made.\n */\nexport function updateSwapsTransaction(\n transactionMeta: TransactionMeta,\n transactionType: TransactionType,\n swaps: {\n hasApproveTx?: boolean;\n meta?: Partial;\n },\n {\n isSwapsDisabled,\n cancelTransaction,\n messenger,\n }: {\n isSwapsDisabled: boolean;\n cancelTransaction: (transactionId: string) => void;\n messenger: TransactionControllerMessenger;\n },\n): TransactionMeta {\n if (isSwapsDisabled || !SWAP_TRANSACTION_TYPES.includes(transactionType)) {\n return transactionMeta;\n }\n\n // The simulationFails property is added if the estimateGas call fails. In cases\n // when no swaps approval tx is required, this indicates that the swap will likely\n // fail. There was an earlier estimateGas call made by the swaps controller,\n // but it is possible that external conditions have change since then, and\n // a previously succeeding estimate gas call could now fail. By checking for\n // the `simulationFails` property here, we can reduce the number of swap\n // transactions that get published to the blockchain only to fail and thereby\n // waste the user's funds on gas.\n if (\n transactionType === TransactionType.swap &&\n swaps?.hasApproveTx === false &&\n transactionMeta.simulationFails\n ) {\n cancelTransaction(transactionMeta.id);\n throw new Error('Simulation failed');\n }\n\n const swapsMeta = swaps?.meta as Partial;\n\n if (!swapsMeta) {\n return transactionMeta;\n }\n\n let updatedTransactionMeta = transactionMeta;\n\n if (transactionType === TransactionType.swapApproval) {\n updatedTransactionMeta = updateSwapApprovalTransaction(\n transactionMeta,\n swapsMeta,\n );\n messenger.publish('TransactionController:transactionNewSwapApproval', {\n transactionMeta: updatedTransactionMeta,\n });\n }\n\n if (transactionType === TransactionType.swapAndSend) {\n updatedTransactionMeta = updateSwapAndSendTransaction(\n transactionMeta,\n swapsMeta,\n );\n messenger.publish('TransactionController:transactionNewSwapAndSend', {\n transactionMeta: updatedTransactionMeta,\n });\n }\n\n if (transactionType === TransactionType.swap) {\n updatedTransactionMeta = updateSwapTransaction(transactionMeta, swapsMeta);\n messenger.publish('TransactionController:transactionNewSwap', {\n transactionMeta: updatedTransactionMeta,\n });\n }\n\n return updatedTransactionMeta;\n}\n\n/**\n * Attempts to update the post transaction balance of the provided transaction\n *\n * @param transactionMeta - Transaction meta object to update\n * @param updatePostTransactionBalanceRequest - Dependency bag\n * @param updatePostTransactionBalanceRequest.ethQuery - EthQuery object\n * @param updatePostTransactionBalanceRequest.getTransaction - Reading function for the latest transaction state\n * @param updatePostTransactionBalanceRequest.updateTransaction - Updating transaction function\n */\nexport async function updatePostTransactionBalance(\n transactionMeta: TransactionMeta,\n {\n ethQuery,\n getTransaction,\n updateTransaction,\n }: {\n ethQuery: EthQuery;\n getTransaction: (transactionId: string) => TransactionMeta | undefined;\n updateTransaction: (transactionMeta: TransactionMeta, note: string) => void;\n },\n): Promise<{\n updatedTransactionMeta: TransactionMeta;\n approvalTransactionMeta?: TransactionMeta;\n}> {\n log('Updating post transaction balance', transactionMeta.id);\n\n const transactionId = transactionMeta.id;\n let latestTransactionMeta: TransactionMeta | undefined;\n let approvalTransactionMeta;\n\n for (let i = 0; i < UPDATE_POST_TX_BALANCE_ATTEMPTS; i++) {\n log('Querying balance', { attempt: i });\n\n const postTransactionBalance = await query(ethQuery, 'getBalance', [\n transactionMeta.txParams.from,\n ]);\n\n latestTransactionMeta = {\n ...(getTransaction(transactionId) ?? ({} as TransactionMeta)),\n };\n\n approvalTransactionMeta = latestTransactionMeta.approvalTxId\n ? getTransaction(latestTransactionMeta.approvalTxId)\n : undefined;\n\n latestTransactionMeta.postTxBalance = postTransactionBalance.toString(16);\n\n const isDefaultTokenAddress = isSwapsDefaultTokenAddress(\n transactionMeta.destinationTokenAddress as string,\n transactionMeta.chainId,\n );\n\n if (\n !isDefaultTokenAddress ||\n transactionMeta.preTxBalance !== latestTransactionMeta.postTxBalance\n ) {\n log('Finishing post balance update', {\n isDefaultTokenAddress,\n preTxBalance: transactionMeta.preTxBalance,\n postTxBalance: latestTransactionMeta.postTxBalance,\n });\n\n break;\n }\n\n log('Waiting for balance to update', {\n delay: UPDATE_POST_TX_BALANCE_TIMEOUT,\n });\n\n await sleep(UPDATE_POST_TX_BALANCE_TIMEOUT);\n }\n\n updateTransaction(\n latestTransactionMeta as TransactionMeta,\n 'TransactionController#updatePostTransactionBalance - Add post transaction balance',\n );\n\n log('Completed post balance update', latestTransactionMeta?.postTxBalance);\n\n return {\n updatedTransactionMeta: latestTransactionMeta as TransactionMeta,\n approvalTransactionMeta,\n };\n}\n\n/**\n * Updates the transaction meta object with the swap information\n *\n * @param transactionMeta - Transaction meta object to update\n * @param propsToUpdate - Properties to update\n * @param propsToUpdate.sourceTokenSymbol - Symbol of the token to be swapped\n * @param propsToUpdate.destinationTokenSymbol - Symbol of the token to be received\n * @param propsToUpdate.type - Type of the transaction\n * @param propsToUpdate.destinationTokenDecimals - Decimals of the token to be received\n * @param propsToUpdate.destinationTokenAddress - Address of the token to be received\n * @param propsToUpdate.swapMetaData - Metadata of the swap\n * @param propsToUpdate.swapTokenValue - Value of the token to be swapped\n * @param propsToUpdate.estimatedBaseFee - Estimated base fee of the transaction\n * @param propsToUpdate.approvalTxId - Transaction id of the approval transaction\n * @returns The updated transaction meta object.\n */\nfunction updateSwapTransaction(\n transactionMeta: TransactionMeta,\n {\n sourceTokenSymbol,\n destinationTokenSymbol,\n type,\n destinationTokenDecimals,\n destinationTokenAddress,\n swapMetaData,\n swapTokenValue,\n estimatedBaseFee,\n approvalTxId,\n }: Partial,\n): TransactionMeta {\n validateIfTransactionUnapproved(transactionMeta, 'updateSwapTransaction');\n\n let swapTransaction = {\n sourceTokenSymbol,\n destinationTokenSymbol,\n type,\n destinationTokenDecimals,\n destinationTokenAddress,\n swapMetaData,\n swapTokenValue,\n estimatedBaseFee,\n approvalTxId,\n };\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n swapTransaction = pickBy(swapTransaction) as any;\n\n return merge({}, transactionMeta, swapTransaction);\n}\n\n/**\n * Updates the transaction meta object with the swap information\n *\n * @param transactionMeta - Transaction meta object to update\n * @param propsToUpdate - Properties to update\n * @param propsToUpdate.approvalTxId - Transaction id of the approval transaction\n * @param propsToUpdate.destinationTokenAddress - Address of the token to be received\n * @param propsToUpdate.destinationTokenAmount - The raw amount of the destination token\n * @param propsToUpdate.destinationTokenDecimals - Decimals of the token to be received\n * @param propsToUpdate.destinationTokenSymbol - Symbol of the token to be received\n * @param propsToUpdate.estimatedBaseFee - Estimated base fee of the transaction\n * @param propsToUpdate.sourceTokenAddress - The address of the source token\n * @param propsToUpdate.sourceTokenAmount - The raw amount of the source token\n * @param propsToUpdate.sourceTokenDecimals - The decimals of the source token\n * @param propsToUpdate.sourceTokenSymbol - Symbol of the token to be swapped\n * @param propsToUpdate.swapAndSendRecipient - The recipient of the swap and send transaction\n * @param propsToUpdate.swapMetaData - Metadata of the swap\n * @param propsToUpdate.swapTokenValue - Value of the token to be swapped – possibly the same as sourceTokenAmount; included for consistency\n * @param propsToUpdate.type - Type of the transaction\n * @returns The updated transaction meta object.\n */\nfunction updateSwapAndSendTransaction(\n transactionMeta: TransactionMeta,\n {\n approvalTxId,\n destinationTokenAddress,\n destinationTokenAmount,\n destinationTokenDecimals,\n destinationTokenSymbol,\n estimatedBaseFee,\n sourceTokenAddress,\n sourceTokenAmount,\n sourceTokenDecimals,\n sourceTokenSymbol,\n swapAndSendRecipient,\n swapMetaData,\n swapTokenValue,\n type,\n }: Partial,\n): TransactionMeta {\n validateIfTransactionUnapproved(transactionMeta, 'updateSwapTransaction');\n\n let swapTransaction = {\n approvalTxId,\n destinationTokenAddress,\n destinationTokenAmount,\n destinationTokenDecimals,\n destinationTokenSymbol,\n estimatedBaseFee,\n sourceTokenAddress,\n sourceTokenAmount,\n sourceTokenDecimals,\n sourceTokenSymbol,\n swapAndSendRecipient,\n swapMetaData,\n swapTokenValue,\n type,\n };\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n swapTransaction = pickBy(swapTransaction) as any;\n\n return merge({}, transactionMeta, swapTransaction);\n}\n\n/**\n * Updates the transaction meta object with the swap approval information\n *\n * @param transactionMeta - Transaction meta object to update\n * @param propsToUpdate - Properties to update\n * @param propsToUpdate.type - Type of the transaction\n * @param propsToUpdate.sourceTokenSymbol - Symbol of the token to be swapped\n * @returns The updated transaction meta object.\n */\nfunction updateSwapApprovalTransaction(\n transactionMeta: TransactionMeta,\n { type, sourceTokenSymbol }: Partial,\n): TransactionMeta {\n validateIfTransactionUnapproved(\n transactionMeta,\n 'updateSwapApprovalTransaction',\n );\n\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let swapApprovalTransaction = { type, sourceTokenSymbol } as any;\n swapApprovalTransaction = pickBy({\n type,\n sourceTokenSymbol,\n }) as Partial;\n\n return merge({}, transactionMeta, swapApprovalTransaction);\n}\n\n/**\n * Checks whether the provided address is strictly equal to the address for\n * the default swaps token of the provided chain.\n *\n * @param address - The string to compare to the default token address\n * @param chainId - The hex encoded chain ID of the default swaps token to check\n * @returns Whether the address is the provided chain's default token address\n */\nfunction isSwapsDefaultTokenAddress(address: string, chainId: string) {\n if (!address || !chainId) {\n return false;\n }\n\n return (\n address ===\n SWAPS_CHAINID_DEFAULT_TOKEN_MAP[\n chainId as keyof typeof SWAPS_CHAINID_DEFAULT_TOKEN_MAP\n ]?.address\n );\n}\n\n/**\n * Sleeps for the provided number of milliseconds\n *\n * @param ms - Number of milliseconds to sleep\n * @returns Promise that resolves after the provided number of milliseconds\n */\nfunction sleep(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n"],"mappings":"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","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-GRDPR767.mjs b/node_modules/@metamask/transaction-controller/dist/chunk-GRDPR767.mjs -new file mode 100644 -index 0000000..5214579 ---- /dev/null -+++ b/node_modules/@metamask/transaction-controller/dist/chunk-GRDPR767.mjs -@@ -0,0 +1,160 @@ -+import { -+ getPercentageChange -+} from "./chunk-F7IJZOCR.mjs"; -+import { -+ projectLogger -+} from "./chunk-UQQWZT6C.mjs"; -+ -+// src/utils/resimulate.ts -+import { createModuleLogger, remove0x } from "@metamask/utils"; -+import { BN } from "bn.js"; -+import { isEqual } from "lodash"; -+var log = createModuleLogger(projectLogger, "resimulate"); -+var RESIMULATE_PARAMS = ["to", "value", "data"]; -+var BLOCKAID_RESULT_TYPE_MALICIOUS = "Malicious"; -+var VALUE_COMPARISON_PERCENT_THRESHOLD = 5; -+var BLOCK_TIME_ADDITIONAL_SECONDS = 60; -+function shouldResimulate(originalTransactionMeta, newTransactionMeta) { -+ const { id: transactionId } = newTransactionMeta; -+ const parametersUpdated = isParametersUpdated( -+ originalTransactionMeta, -+ newTransactionMeta -+ ); -+ const securityAlert = hasNewSecurityAlert( -+ originalTransactionMeta, -+ newTransactionMeta -+ ); -+ const valueAndNativeBalanceMismatch = hasValueAndNativeBalanceMismatch( -+ originalTransactionMeta, -+ newTransactionMeta -+ ); -+ const resimulate = parametersUpdated || securityAlert || valueAndNativeBalanceMismatch; -+ let blockTime; -+ if (securityAlert || valueAndNativeBalanceMismatch) { -+ const nowSeconds = Math.floor(Date.now() / 1e3); -+ blockTime = nowSeconds + BLOCK_TIME_ADDITIONAL_SECONDS; -+ } -+ if (resimulate) { -+ log("Transaction should be resimulated", { -+ transactionId, -+ blockTime, -+ parametersUpdated, -+ securityAlert, -+ valueAndNativeBalanceMismatch -+ }); -+ } -+ return { -+ blockTime, -+ resimulate -+ }; -+} -+function hasSimulationDataChanged(originalSimulationData, newSimulationData) { -+ if (isEqual(originalSimulationData, newSimulationData)) { -+ return false; -+ } -+ if (isBalanceChangeUpdated( -+ originalSimulationData?.nativeBalanceChange, -+ newSimulationData?.nativeBalanceChange -+ )) { -+ log("Simulation data native balance changed"); -+ return true; -+ } -+ if (originalSimulationData.tokenBalanceChanges.length !== newSimulationData.tokenBalanceChanges.length) { -+ return true; -+ } -+ for (const originalTokenBalanceChange of originalSimulationData.tokenBalanceChanges) { -+ const newTokenBalanceChange = newSimulationData.tokenBalanceChanges.find( -+ ({ address, id }) => address === originalTokenBalanceChange.address && id === originalTokenBalanceChange.id -+ ); -+ if (!newTokenBalanceChange) { -+ log("Missing new token balance", { -+ address: originalTokenBalanceChange.address, -+ id: originalTokenBalanceChange.id -+ }); -+ return true; -+ } -+ if (isBalanceChangeUpdated(originalTokenBalanceChange, newTokenBalanceChange)) { -+ log("Simulation data token balance changed", { -+ originalTokenBalanceChange, -+ newTokenBalanceChange -+ }); -+ return true; -+ } -+ } -+ return false; -+} -+function isParametersUpdated(originalTransactionMeta, newTransactionMeta) { -+ const { id: transactionId, txParams: newParams } = newTransactionMeta; -+ const { txParams: originalParams } = originalTransactionMeta; -+ if (!originalParams || isEqual(originalParams, newParams)) { -+ return false; -+ } -+ const params = Object.keys(newParams); -+ const updatedProperties = params.filter( -+ (param) => newParams[param] !== originalParams[param] -+ ); -+ log("Transaction parameters updated", { -+ transactionId, -+ updatedProperties, -+ originalParams, -+ newParams -+ }); -+ return RESIMULATE_PARAMS.some((param) => updatedProperties.includes(param)); -+} -+function hasNewSecurityAlert(originalTransactionMeta, newTransactionMeta) { -+ const { securityAlertResponse: originalSecurityAlertResponse } = originalTransactionMeta; -+ const { id: transactionId, securityAlertResponse: newSecurityAlertResponse } = newTransactionMeta; -+ if (isEqual(originalSecurityAlertResponse, newSecurityAlertResponse)) { -+ return false; -+ } -+ log("Security alert updated", { -+ transactionId, -+ originalSecurityAlertResponse, -+ newSecurityAlertResponse -+ }); -+ return newSecurityAlertResponse?.result_type === BLOCKAID_RESULT_TYPE_MALICIOUS; -+} -+function hasValueAndNativeBalanceMismatch(originalTransactionMeta, newTransactionMeta) { -+ const { simulationData: originalSimulationData } = originalTransactionMeta; -+ const { simulationData: newSimulationData, txParams: newTxParams } = newTransactionMeta; -+ if (!newSimulationData || isEqual(originalSimulationData, newSimulationData)) { -+ return false; -+ } -+ const newValue = newTxParams?.value ?? "0x0"; -+ const newNativeBalanceDifference = newSimulationData?.nativeBalanceChange?.difference ?? "0x0"; -+ return !percentageChangeWithinThreshold( -+ newValue, -+ newNativeBalanceDifference, -+ false, -+ newSimulationData?.nativeBalanceChange?.isDecrease === false -+ ); -+} -+function isBalanceChangeUpdated(originalBalanceChange, newBalanceChange) { -+ return !percentageChangeWithinThreshold( -+ originalBalanceChange?.difference ?? "0x0", -+ newBalanceChange?.difference ?? "0x0", -+ originalBalanceChange?.isDecrease === false, -+ newBalanceChange?.isDecrease === false -+ ); -+} -+function percentageChangeWithinThreshold(originalValue, newValue, originalNegative, newNegative) { -+ let originalValueBN = new BN(remove0x(originalValue), "hex"); -+ let newValueBN = new BN(remove0x(newValue), "hex"); -+ if (originalNegative) { -+ originalValueBN = originalValueBN.neg(); -+ } -+ if (newNegative) { -+ newValueBN = newValueBN.neg(); -+ } -+ return getPercentageChange(originalValueBN, newValueBN) <= VALUE_COMPARISON_PERCENT_THRESHOLD; -+} -+ -+export { -+ RESIMULATE_PARAMS, -+ BLOCKAID_RESULT_TYPE_MALICIOUS, -+ VALUE_COMPARISON_PERCENT_THRESHOLD, -+ BLOCK_TIME_ADDITIONAL_SECONDS, -+ shouldResimulate, -+ hasSimulationDataChanged -+}; -+//# sourceMappingURL=chunk-GRDPR767.mjs.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-H2KZOK3J.mjs.map b/node_modules/@metamask/transaction-controller/dist/chunk-H2KZOK3J.mjs.map -deleted file mode 100644 -index ae1d7d0..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-H2KZOK3J.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/gas-flows/DefaultGasFeeFlow.ts"],"sourcesContent":["import type {\n LegacyGasPriceEstimate,\n GasFeeEstimates as FeeMarketGasPriceEstimate,\n EthGasPriceEstimate,\n} from '@metamask/gas-fee-controller';\nimport { GAS_ESTIMATE_TYPES } from '@metamask/gas-fee-controller';\nimport type { Hex } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\n\nimport { projectLogger } from '../logger';\nimport type {\n FeeMarketGasFeeEstimateForLevel,\n FeeMarketGasFeeEstimates,\n GasFeeEstimates,\n GasFeeFlow,\n GasFeeFlowRequest,\n GasFeeFlowResponse,\n GasPriceGasFeeEstimates,\n LegacyGasFeeEstimates,\n TransactionMeta,\n} from '../types';\nimport { GasFeeEstimateLevel, GasFeeEstimateType } from '../types';\nimport { gweiDecimalToWeiHex } from '../utils/gas-fees';\n\nconst log = createModuleLogger(projectLogger, 'default-gas-fee-flow');\n\n/**\n * The standard implementation of a gas fee flow that obtains gas fee estimates using only the GasFeeController.\n */\nexport class DefaultGasFeeFlow implements GasFeeFlow {\n matchesTransaction(_transactionMeta: TransactionMeta): boolean {\n return true;\n }\n\n async getGasFees(request: GasFeeFlowRequest): Promise {\n const { gasFeeControllerData } = request;\n const { gasEstimateType, gasFeeEstimates } = gasFeeControllerData;\n\n let response: GasFeeEstimates;\n\n switch (gasEstimateType) {\n case GAS_ESTIMATE_TYPES.FEE_MARKET:\n log('Using fee market estimates', gasFeeEstimates);\n response = this.#getFeeMarkEstimates(gasFeeEstimates);\n break;\n case GAS_ESTIMATE_TYPES.LEGACY:\n log('Using legacy estimates', gasFeeEstimates);\n response = this.#getLegacyEstimates(\n gasFeeEstimates as LegacyGasPriceEstimate,\n );\n break;\n case GAS_ESTIMATE_TYPES.ETH_GASPRICE:\n log('Using eth_gasPrice estimates', gasFeeEstimates);\n response = this.#getGasPriceEstimates(\n gasFeeEstimates as EthGasPriceEstimate,\n );\n break;\n default:\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n throw new Error(`Unsupported gas estimate type: ${gasEstimateType}`);\n }\n\n return {\n estimates: response,\n };\n }\n\n #getFeeMarkEstimates(\n gasFeeEstimates: FeeMarketGasPriceEstimate,\n ): FeeMarketGasFeeEstimates {\n const levels = Object.values(GasFeeEstimateLevel).reduce(\n (result, level) => ({\n ...result,\n [level]: this.#getFeeMarketLevel(gasFeeEstimates, level),\n }),\n {} as Omit,\n );\n\n return {\n type: GasFeeEstimateType.FeeMarket,\n ...levels,\n };\n }\n\n #getLegacyEstimates(\n gasFeeEstimates: LegacyGasPriceEstimate,\n ): LegacyGasFeeEstimates {\n const levels = Object.values(GasFeeEstimateLevel).reduce(\n (result, level) => ({\n ...result,\n [level]: this.#getLegacyLevel(gasFeeEstimates, level),\n }),\n {} as Omit,\n );\n\n return {\n type: GasFeeEstimateType.Legacy,\n ...levels,\n };\n }\n\n #getGasPriceEstimates(\n gasFeeEstimates: EthGasPriceEstimate,\n ): GasPriceGasFeeEstimates {\n return {\n type: GasFeeEstimateType.GasPrice,\n gasPrice: gweiDecimalToWeiHex(gasFeeEstimates.gasPrice),\n };\n }\n\n #getFeeMarketLevel(\n gasFeeEstimates: FeeMarketGasPriceEstimate,\n level: GasFeeEstimateLevel,\n ): FeeMarketGasFeeEstimateForLevel {\n const maxFeePerGas = gweiDecimalToWeiHex(\n gasFeeEstimates[level].suggestedMaxFeePerGas,\n );\n\n const maxPriorityFeePerGas = gweiDecimalToWeiHex(\n gasFeeEstimates[level].suggestedMaxPriorityFeePerGas,\n );\n\n return {\n maxFeePerGas,\n maxPriorityFeePerGas,\n };\n }\n\n #getLegacyLevel(\n gasFeeEstimates: LegacyGasPriceEstimate,\n level: GasFeeEstimateLevel,\n ): Hex {\n return gweiDecimalToWeiHex(gasFeeEstimates[level]);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AAKA,SAAS,0BAA0B;AAEnC,SAAS,0BAA0B;AAiBnC,IAAM,MAAM,mBAAmB,eAAe,sBAAsB;AAxBpE;AA6BO,IAAM,oBAAN,MAA8C;AAAA,EAA9C;AAuCL;AAiBA;AAiBA;AASA;AAkBA;AAAA;AAAA,EAnGA,mBAAmB,kBAA4C;AAC7D,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,WAAW,SAAyD;AACxE,UAAM,EAAE,qBAAqB,IAAI;AACjC,UAAM,EAAE,iBAAiB,gBAAgB,IAAI;AAE7C,QAAI;AAEJ,YAAQ,iBAAiB;AAAA,MACvB,KAAK,mBAAmB;AACtB,YAAI,8BAA8B,eAAe;AACjD,mBAAW,sBAAK,8CAAL,WAA0B;AACrC;AAAA,MACF,KAAK,mBAAmB;AACtB,YAAI,0BAA0B,eAAe;AAC7C,mBAAW,sBAAK,4CAAL,WACT;AAEF;AAAA,MACF,KAAK,mBAAmB;AACtB,YAAI,gCAAgC,eAAe;AACnD,mBAAW,sBAAK,gDAAL,WACT;AAEF;AAAA,MACF;AAGE,cAAM,IAAI,MAAM,kCAAkC,eAAe,EAAE;AAAA,IACvE;AAEA,WAAO;AAAA,MACL,WAAW;AAAA,IACb;AAAA,EACF;AAqEF;AAnEE;AAAA,yBAAoB,SAClB,iBAC0B;AAC1B,QAAM,SAAS,OAAO,OAAO,mBAAmB,EAAE;AAAA,IAChD,CAAC,QAAQ,WAAW;AAAA,MAClB,GAAG;AAAA,MACH,CAAC,KAAK,GAAG,sBAAK,0CAAL,WAAwB,iBAAiB;AAAA,IACpD;AAAA,IACA,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA,GAAG;AAAA,EACL;AACF;AAEA;AAAA,wBAAmB,SACjB,iBACuB;AACvB,QAAM,SAAS,OAAO,OAAO,mBAAmB,EAAE;AAAA,IAChD,CAAC,QAAQ,WAAW;AAAA,MAClB,GAAG;AAAA,MACH,CAAC,KAAK,GAAG,sBAAK,oCAAL,WAAqB,iBAAiB;AAAA,IACjD;AAAA,IACA,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA,GAAG;AAAA,EACL;AACF;AAEA;AAAA,0BAAqB,SACnB,iBACyB;AACzB,SAAO;AAAA,IACL;AAAA,IACA,UAAU,oBAAoB,gBAAgB,QAAQ;AAAA,EACxD;AACF;AAEA;AAAA,uBAAkB,SAChB,iBACA,OACiC;AACjC,QAAM,eAAe;AAAA,IACnB,gBAAgB,KAAK,EAAE;AAAA,EACzB;AAEA,QAAM,uBAAuB;AAAA,IAC3B,gBAAgB,KAAK,EAAE;AAAA,EACzB;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAEA;AAAA,oBAAe,SACb,iBACA,OACK;AACL,SAAO,oBAAoB,gBAAgB,KAAK,CAAC;AACnD;","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-HMOSP33F.js.map b/node_modules/@metamask/transaction-controller/dist/chunk-HMOSP33F.js.map -deleted file mode 100644 -index 339b07f..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-HMOSP33F.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/errors.ts"],"names":[],"mappings":";AAIO,IAAM,kBAAN,cAA8B,MAAM;AAAA,EAGzC,YAAY,SAAkB,MAAwB;AACpD,UAAM,WAAW,mBAAmB;AAEpC,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,mCAAN,cAA+C,gBAAgB;AAAA,EACpE,YAAY,SAAc;AACxB;AAAA,MACE,2BAA2B,OAAO;AAAA;AAAA,IAEpC;AAAA,EACF;AACF;AAEO,IAAM,iCAAN,cAA6C,gBAAgB;AAAA,EAClE,cAAc;AACZ;AAAA,MACE;AAAA;AAAA,IAEF;AAAA,EACF;AACF;AAEO,IAAM,0BAAN,cAAsC,gBAAgB;AAAA,EAC3D,cAAc;AACZ,UAAM,qDAAwD;AAAA,EAChE;AACF","sourcesContent":["import type { Hex } from '@metamask/utils';\n\nimport { SimulationErrorCode } from './types';\n\nexport class SimulationError extends Error {\n code?: string | number;\n\n constructor(message?: string, code?: string | number) {\n super(message ?? 'Simulation failed');\n\n this.code = code;\n }\n}\n\nexport class SimulationChainNotSupportedError extends SimulationError {\n constructor(chainId: Hex) {\n super(\n `Chain is not supported: ${chainId}`,\n SimulationErrorCode.ChainNotSupported,\n );\n }\n}\n\nexport class SimulationInvalidResponseError extends SimulationError {\n constructor() {\n super(\n 'Invalid response from simulation API',\n SimulationErrorCode.InvalidResponse,\n );\n }\n}\n\nexport class SimulationRevertedError extends SimulationError {\n constructor() {\n super('Transaction was reverted', SimulationErrorCode.Reverted);\n }\n}\n"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-HQSNKCXI.mjs.map b/node_modules/@metamask/transaction-controller/dist/chunk-HQSNKCXI.mjs.map -deleted file mode 100644 -index 0f2efab..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-HQSNKCXI.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/errors.ts"],"sourcesContent":["import type { Hex } from '@metamask/utils';\n\nimport { SimulationErrorCode } from './types';\n\nexport class SimulationError extends Error {\n code?: string | number;\n\n constructor(message?: string, code?: string | number) {\n super(message ?? 'Simulation failed');\n\n this.code = code;\n }\n}\n\nexport class SimulationChainNotSupportedError extends SimulationError {\n constructor(chainId: Hex) {\n super(\n `Chain is not supported: ${chainId}`,\n SimulationErrorCode.ChainNotSupported,\n );\n }\n}\n\nexport class SimulationInvalidResponseError extends SimulationError {\n constructor() {\n super(\n 'Invalid response from simulation API',\n SimulationErrorCode.InvalidResponse,\n );\n }\n}\n\nexport class SimulationRevertedError extends SimulationError {\n constructor() {\n super('Transaction was reverted', SimulationErrorCode.Reverted);\n }\n}\n"],"mappings":";AAIO,IAAM,kBAAN,cAA8B,MAAM;AAAA,EAGzC,YAAY,SAAkB,MAAwB;AACpD,UAAM,WAAW,mBAAmB;AAEpC,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,mCAAN,cAA+C,gBAAgB;AAAA,EACpE,YAAY,SAAc;AACxB;AAAA,MACE,2BAA2B,OAAO;AAAA;AAAA,IAEpC;AAAA,EACF;AACF;AAEO,IAAM,iCAAN,cAA6C,gBAAgB;AAAA,EAClE,cAAc;AACZ;AAAA,MACE;AAAA;AAAA,IAEF;AAAA,EACF;AACF;AAEO,IAAM,0BAAN,cAAsC,gBAAgB;AAAA,EAC3D,cAAc;AACZ,UAAM,qDAAwD;AAAA,EAChE;AACF;","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-JXXTNVU4.mjs.map b/node_modules/@metamask/transaction-controller/dist/chunk-JXXTNVU4.mjs.map -deleted file mode 100644 -index a169c44..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-JXXTNVU4.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/utils/gas-flow.ts"],"sourcesContent":["import { weiHexToGweiDec } from '@metamask/controller-utils';\nimport type {\n Eip1559GasFee,\n EthGasPriceEstimate,\n GasFeeEstimates,\n LegacyGasPriceEstimate,\n} from '@metamask/gas-fee-controller';\nimport { type GasFeeState } from '@metamask/gas-fee-controller';\n\nimport type {\n FeeMarketGasFeeEstimates,\n GasPriceGasFeeEstimates,\n LegacyGasFeeEstimates,\n} from '../types';\nimport {\n type GasFeeFlow,\n type TransactionMeta,\n type FeeMarketGasFeeEstimateForLevel,\n GasFeeEstimateLevel,\n GasFeeEstimateType,\n} from '../types';\n\ntype MergeGasFeeEstimatesRequest = {\n gasFeeControllerEstimates:\n | GasFeeEstimates\n | LegacyGasPriceEstimate\n | EthGasPriceEstimate;\n transactionGasFeeEstimates:\n | FeeMarketGasFeeEstimates\n | LegacyGasFeeEstimates\n | GasPriceGasFeeEstimates;\n};\n\n/**\n * Returns the first gas fee flow that matches the transaction.\n *\n * @param transactionMeta - The transaction metadata to find a gas fee flow for.\n * @param gasFeeFlows - The gas fee flows to search.\n * @returns The first gas fee flow that matches the transaction, or undefined if none match.\n */\nexport function getGasFeeFlow(\n transactionMeta: TransactionMeta,\n gasFeeFlows: GasFeeFlow[],\n): GasFeeFlow | undefined {\n return gasFeeFlows.find((gasFeeFlow) =>\n gasFeeFlow.matchesTransaction(transactionMeta),\n );\n}\n\n/**\n * Merge the gas fee estimates from the gas fee controller with the gas fee estimates from a transaction.\n * @param request - Data required to merge gas fee estimates.\n * @param request.gasFeeControllerEstimates - Gas fee estimates from the GasFeeController.\n * @param request.transactionGasFeeEstimates - Gas fee estimates from the transaction.\n * @returns The merged gas fee estimates.\n */\nexport function mergeGasFeeEstimates({\n gasFeeControllerEstimates,\n transactionGasFeeEstimates,\n}: MergeGasFeeEstimatesRequest): GasFeeState['gasFeeEstimates'] {\n const transactionEstimateType = transactionGasFeeEstimates.type;\n\n if (transactionEstimateType === GasFeeEstimateType.FeeMarket) {\n return Object.values(GasFeeEstimateLevel).reduce(\n (result, level) => ({\n ...result,\n [level]: mergeFeeMarketEstimate(\n (gasFeeControllerEstimates as GasFeeEstimates)?.[level],\n transactionGasFeeEstimates[level],\n ),\n }),\n { ...gasFeeControllerEstimates } as GasFeeEstimates,\n );\n }\n\n if (transactionEstimateType === GasFeeEstimateType.Legacy) {\n return Object.values(GasFeeEstimateLevel).reduce(\n (result, level) => ({\n ...result,\n [level]: getLegacyEstimate(transactionGasFeeEstimates, level),\n }),\n {} as LegacyGasPriceEstimate,\n );\n }\n\n if (transactionEstimateType === GasFeeEstimateType.GasPrice) {\n return {\n gasPrice: getGasPriceEstimate(transactionGasFeeEstimates),\n };\n }\n\n return gasFeeControllerEstimates;\n}\n\n/**\n * Merge a specific priority level of EIP-1559 gas fee estimates.\n * @param gasFeeControllerEstimate - The gas fee estimate from the gas fee controller.\n * @param transactionGasFeeEstimate - The gas fee estimate from the transaction.\n * @returns The merged gas fee estimate.\n */\nfunction mergeFeeMarketEstimate(\n gasFeeControllerEstimate: Eip1559GasFee | undefined,\n transactionGasFeeEstimate: FeeMarketGasFeeEstimateForLevel,\n): Eip1559GasFee {\n return {\n ...gasFeeControllerEstimate,\n suggestedMaxFeePerGas: weiHexToGweiDec(\n transactionGasFeeEstimate.maxFeePerGas,\n ),\n suggestedMaxPriorityFeePerGas: weiHexToGweiDec(\n transactionGasFeeEstimate.maxPriorityFeePerGas,\n ),\n } as Eip1559GasFee;\n}\n\n/**\n * Generate a specific priority level for a legacy gas fee estimate.\n * @param transactionGasFeeEstimate - The gas fee estimate from the transaction.\n * @param level - The gas fee estimate level.\n * @returns The legacy gas fee estimate.\n */\nfunction getLegacyEstimate(\n transactionGasFeeEstimate: LegacyGasFeeEstimates,\n level: GasFeeEstimateLevel,\n): string {\n return weiHexToGweiDec(transactionGasFeeEstimate[level]);\n}\n\n/**\n * Generate the value for a gas price gas fee estimate.\n * @param transactionGasFeeEstimate - The gas fee estimate from the transaction.\n * @returns The legacy gas fee estimate.\n */\nfunction getGasPriceEstimate(\n transactionGasFeeEstimate: GasPriceGasFeeEstimates,\n): string {\n return weiHexToGweiDec(transactionGasFeeEstimate.gasPrice);\n}\n"],"mappings":";;;;;AAAA,SAAS,uBAAuB;AAwCzB,SAAS,cACd,iBACA,aACwB;AACxB,SAAO,YAAY;AAAA,IAAK,CAAC,eACvB,WAAW,mBAAmB,eAAe;AAAA,EAC/C;AACF;AASO,SAAS,qBAAqB;AAAA,EACnC;AAAA,EACA;AACF,GAAgE;AAC9D,QAAM,0BAA0B,2BAA2B;AAE3D,MAAI,0DAA0D;AAC5D,WAAO,OAAO,OAAO,mBAAmB,EAAE;AAAA,MACxC,CAAC,QAAQ,WAAW;AAAA,QAClB,GAAG;AAAA,QACH,CAAC,KAAK,GAAG;AAAA,UACN,4BAAgD,KAAK;AAAA,UACtD,2BAA2B,KAAK;AAAA,QAClC;AAAA,MACF;AAAA,MACA,EAAE,GAAG,0BAA0B;AAAA,IACjC;AAAA,EACF;AAEA,MAAI,mDAAuD;AACzD,WAAO,OAAO,OAAO,mBAAmB,EAAE;AAAA,MACxC,CAAC,QAAQ,WAAW;AAAA,QAClB,GAAG;AAAA,QACH,CAAC,KAAK,GAAG,kBAAkB,4BAA4B,KAAK;AAAA,MAC9D;AAAA,MACA,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,2DAAyD;AAC3D,WAAO;AAAA,MACL,UAAU,oBAAoB,0BAA0B;AAAA,IAC1D;AAAA,EACF;AAEA,SAAO;AACT;AAQA,SAAS,uBACP,0BACA,2BACe;AACf,SAAO;AAAA,IACL,GAAG;AAAA,IACH,uBAAuB;AAAA,MACrB,0BAA0B;AAAA,IAC5B;AAAA,IACA,+BAA+B;AAAA,MAC7B,0BAA0B;AAAA,IAC5B;AAAA,EACF;AACF;AAQA,SAAS,kBACP,2BACA,OACQ;AACR,SAAO,gBAAgB,0BAA0B,KAAK,CAAC;AACzD;AAOA,SAAS,oBACP,2BACQ;AACR,SAAO,gBAAgB,0BAA0B,QAAQ;AAC3D;","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-K4KOSAGM.mjs.map b/node_modules/@metamask/transaction-controller/dist/chunk-K4KOSAGM.mjs.map -deleted file mode 100644 -index 3eaeccc..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-K4KOSAGM.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/utils/simulation-api.ts"],"sourcesContent":["import { convertHexToDecimal } from '@metamask/controller-utils';\nimport { createModuleLogger, type Hex } from '@metamask/utils';\n\nimport { SimulationChainNotSupportedError, SimulationError } from '../errors';\nimport { projectLogger } from '../logger';\n\nconst log = createModuleLogger(projectLogger, 'simulation-api');\n\nconst RPC_METHOD = 'infura_simulateTransactions';\nconst BASE_URL = 'https://tx-sentinel-{0}.api.cx.metamask.io/';\nconst ENDPOINT_NETWORKS = 'networks';\n\n/** Single transaction to simulate in a simulation API request. */\nexport type SimulationRequestTransaction = {\n /** Data to send with the transaction. */\n data?: Hex;\n\n /** Sender of the transaction. */\n from: Hex;\n\n /** Gas limit for the transaction. */\n gas?: Hex;\n\n /** Maximum fee per gas for the transaction. */\n maxFeePerGas?: Hex;\n\n /** Maximum priority fee per gas for the transaction. */\n maxPriorityFeePerGas?: Hex;\n\n /** Recipient of the transaction. */\n to?: Hex;\n\n /** Value to send with the transaction. */\n value?: Hex;\n};\n\n/** Request to the simulation API to simulate transactions. */\nexport type SimulationRequest = {\n /**\n * Transactions to be sequentially simulated.\n * State changes impact subsequent transactions in the list.\n */\n transactions: SimulationRequestTransaction[];\n\n /**\n * Overrides to the state of the blockchain, keyed by smart contract address.\n */\n overrides?: {\n [address: Hex]: {\n /** Overrides to the storage slots for a smart contract account. */\n stateDiff: {\n [slot: Hex]: Hex;\n };\n };\n };\n\n /**\n * Whether to include call traces in the response.\n * Defaults to false.\n */\n withCallTrace?: boolean;\n\n /**\n * Whether to include event logs in the response.\n * Defaults to false.\n */\n withLogs?: boolean;\n};\n\n/** Raw event log emitted by a simulated transaction. */\nexport type SimulationResponseLog = {\n /** Address of the account that created the event. */\n address: Hex;\n\n /** Raw data in the event that is not indexed. */\n data: Hex;\n\n /** Raw indexed data from the event. */\n topics: Hex[];\n};\n\n/** Call trace of a single simulated transaction. */\nexport type SimulationResponseCallTrace = {\n /** Nested calls. */\n calls: SimulationResponseCallTrace[];\n\n /** Raw event logs created by the call. */\n logs: SimulationResponseLog[];\n};\n\n/**\n * Changes to the blockchain state.\n * Keyed by account address.\n */\nexport type SimulationResponseStateDiff = {\n [address: Hex]: {\n /** Native balance of the account. */\n balance?: Hex;\n\n /** Nonce of the account. */\n nonce?: Hex;\n\n /** Storage values per slot. */\n storage?: {\n [slot: Hex]: Hex;\n };\n };\n};\n\n/** Response from the simulation API for a single transaction. */\nexport type SimulationResponseTransaction = {\n /** An error message indicating the transaction could not be simulated. */\n error?: string;\n\n /** Return value of the transaction, such as the balance if calling balanceOf. */\n return: Hex;\n\n /** Hierarchy of call data including nested calls and logs. */\n callTrace?: SimulationResponseCallTrace;\n\n /** Changes to the blockchain state. */\n stateDiff?: {\n /** Initial blockchain state before the transaction. */\n pre?: SimulationResponseStateDiff;\n\n /** Updated blockchain state after the transaction. */\n post?: SimulationResponseStateDiff;\n };\n};\n\n/** Response from the simulation API. */\nexport type SimulationResponse = {\n /** Simulation data for each transaction in the request. */\n transactions: SimulationResponseTransaction[];\n};\n\n/** Data for a network supported by the Simulation API. */\ntype SimulationNetwork = {\n /** Subdomain of the API for the network. */\n network: string;\n\n /** Whether the network supports confirmation simulations. */\n confirmations: boolean;\n};\n\n/** Response from the simulation API containing supported networks. */\ntype SimulationNetworkResponse = {\n [chainIdDecimal: string]: SimulationNetwork;\n};\n\nlet requestIdCounter = 0;\n\n/**\n * Simulate transactions using the transaction simulation API.\n * @param chainId - The chain ID to simulate transactions on.\n * @param request - The request to simulate transactions.\n */\nexport async function simulateTransactions(\n chainId: Hex,\n request: SimulationRequest,\n): Promise {\n const url = await getSimulationUrl(chainId);\n\n log('Sending request', url, request);\n\n const requestId = requestIdCounter;\n requestIdCounter += 1;\n\n const response = await fetch(url, {\n method: 'POST',\n body: JSON.stringify({\n id: String(requestId),\n jsonrpc: '2.0',\n method: RPC_METHOD,\n params: [request],\n }),\n });\n\n const responseJson = await response.json();\n\n log('Received response', responseJson);\n\n if (responseJson.error) {\n const { code, message } = responseJson.error;\n throw new SimulationError(message, code);\n }\n\n return responseJson?.result;\n}\n\n/**\n * Get the URL for the transaction simulation API.\n * @param chainId - The chain ID to get the URL for.\n * @returns The URL for the transaction simulation API.\n */\nasync function getSimulationUrl(chainId: Hex): Promise {\n const networkData = await getNetworkData();\n const chainIdDecimal = convertHexToDecimal(chainId);\n const network = networkData[chainIdDecimal];\n\n if (!network?.confirmations) {\n log('Chain is not supported', chainId);\n throw new SimulationChainNotSupportedError(chainId);\n }\n\n return getUrl(network.network);\n}\n\n/**\n * Retrieve the supported network data from the simulation API.\n */\nasync function getNetworkData(): Promise {\n const url = `${getUrl('ethereum-mainnet')}${ENDPOINT_NETWORKS}`;\n const response = await fetch(url);\n return response.json();\n}\n\n/**\n * Generate the URL for the specified subdomain in the simulation API.\n * @param subdomain - The subdomain to generate the URL for.\n * @returns The URL for the transaction simulation API.\n */\nfunction getUrl(subdomain: string): string {\n return BASE_URL.replace('{0}', subdomain);\n}\n"],"mappings":";;;;;;;;;AAAA,SAAS,2BAA2B;AACpC,SAAS,0BAAoC;AAK7C,IAAM,MAAM,mBAAmB,eAAe,gBAAgB;AAE9D,IAAM,aAAa;AACnB,IAAM,WAAW;AACjB,IAAM,oBAAoB;AA4I1B,IAAI,mBAAmB;AAOvB,eAAsB,qBACpB,SACA,SAC6B;AAC7B,QAAM,MAAM,MAAM,iBAAiB,OAAO;AAE1C,MAAI,mBAAmB,KAAK,OAAO;AAEnC,QAAM,YAAY;AAClB,sBAAoB;AAEpB,QAAM,WAAW,MAAM,MAAM,KAAK;AAAA,IAChC,QAAQ;AAAA,IACR,MAAM,KAAK,UAAU;AAAA,MACnB,IAAI,OAAO,SAAS;AAAA,MACpB,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,QAAQ,CAAC,OAAO;AAAA,IAClB,CAAC;AAAA,EACH,CAAC;AAED,QAAM,eAAe,MAAM,SAAS,KAAK;AAEzC,MAAI,qBAAqB,YAAY;AAErC,MAAI,aAAa,OAAO;AACtB,UAAM,EAAE,MAAM,QAAQ,IAAI,aAAa;AACvC,UAAM,IAAI,gBAAgB,SAAS,IAAI;AAAA,EACzC;AAEA,SAAO,cAAc;AACvB;AAOA,eAAe,iBAAiB,SAA+B;AAC7D,QAAM,cAAc,MAAM,eAAe;AACzC,QAAM,iBAAiB,oBAAoB,OAAO;AAClD,QAAM,UAAU,YAAY,cAAc;AAE1C,MAAI,CAAC,SAAS,eAAe;AAC3B,QAAI,0BAA0B,OAAO;AACrC,UAAM,IAAI,iCAAiC,OAAO;AAAA,EACpD;AAEA,SAAO,OAAO,QAAQ,OAAO;AAC/B;AAKA,eAAe,iBAAqD;AAClE,QAAM,MAAM,GAAG,OAAO,kBAAkB,CAAC,GAAG,iBAAiB;AAC7D,QAAM,WAAW,MAAM,MAAM,GAAG;AAChC,SAAO,SAAS,KAAK;AACvB;AAOA,SAAS,OAAO,WAA2B;AACzC,SAAO,SAAS,QAAQ,OAAO,SAAS;AAC1C;","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-KG4UW4K4.mjs.map b/node_modules/@metamask/transaction-controller/dist/chunk-KG4UW4K4.mjs.map -deleted file mode 100644 -index 6054433..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-KG4UW4K4.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/utils/transaction-type.ts"],"sourcesContent":["import type { TransactionDescription } from '@ethersproject/abi';\nimport { Interface } from '@ethersproject/abi';\nimport { query } from '@metamask/controller-utils';\nimport type EthQuery from '@metamask/eth-query';\nimport {\n abiERC721,\n abiERC20,\n abiERC1155,\n abiFiatTokenV2,\n} from '@metamask/metamask-eth-abis';\n\nimport type { InferTransactionTypeResult, TransactionParams } from '../types';\nimport { TransactionType } from '../types';\n\nexport const ESTIMATE_GAS_ERROR = 'eth_estimateGas rpc method error';\n\nconst ERC20Interface = new Interface(abiERC20);\nconst ERC721Interface = new Interface(abiERC721);\nconst ERC1155Interface = new Interface(abiERC1155);\nconst USDCInterface = new Interface(abiFiatTokenV2);\n\n/**\n * Determines the type of the transaction by analyzing the txParams.\n * It will never return TRANSACTION_TYPE_CANCEL or TRANSACTION_TYPE_RETRY as these\n * represent specific events that we specify manually at transaction creation.\n *\n * @param txParams - Parameters for the transaction.\n * @param ethQuery - EthQuery instance.\n * @returns A object with the transaction type and the contract code response in Hex.\n */\nexport async function determineTransactionType(\n txParams: TransactionParams,\n ethQuery: EthQuery,\n): Promise {\n const { data, to } = txParams;\n\n if (data && !to) {\n return { type: TransactionType.deployContract, getCodeResponse: undefined };\n }\n\n const { contractCode: getCodeResponse, isContractAddress } =\n await readAddressAsContract(ethQuery, to);\n\n if (!isContractAddress) {\n return { type: TransactionType.simpleSend, getCodeResponse };\n }\n\n const hasValue = Number(txParams.value ?? '0') !== 0;\n\n const contractInteractionResult = {\n type: TransactionType.contractInteraction,\n getCodeResponse,\n };\n\n if (!data || hasValue) {\n return contractInteractionResult;\n }\n\n const name = parseStandardTokenTransactionData(data)?.name;\n\n if (!name) {\n return contractInteractionResult;\n }\n\n const tokenMethodName = [\n TransactionType.tokenMethodApprove,\n TransactionType.tokenMethodSetApprovalForAll,\n TransactionType.tokenMethodTransfer,\n TransactionType.tokenMethodTransferFrom,\n TransactionType.tokenMethodSafeTransferFrom,\n TransactionType.tokenMethodIncreaseAllowance,\n ].find(\n (methodName) => methodName.toLowerCase() === (name as string).toLowerCase(),\n );\n\n if (tokenMethodName) {\n return { type: tokenMethodName, getCodeResponse };\n }\n\n return contractInteractionResult;\n}\n\n/**\n * Attempts to decode transaction data using ABIs for three different token standards: ERC20, ERC721, ERC1155.\n * The data will decode correctly if the transaction is an interaction with a contract that matches one of these\n * contract standards\n *\n * @param data - Encoded transaction data.\n * @returns A representation of an ethereum contract call.\n */\nfunction parseStandardTokenTransactionData(\n data?: string,\n): TransactionDescription | undefined {\n if (!data) {\n return undefined;\n }\n\n try {\n return ERC20Interface.parseTransaction({ data });\n } catch {\n // ignore and next try to parse with erc721 ABI\n }\n\n try {\n return ERC721Interface.parseTransaction({ data });\n } catch {\n // ignore and next try to parse with erc1155 ABI\n }\n\n try {\n return ERC1155Interface.parseTransaction({ data });\n } catch {\n // ignore and return undefined\n }\n\n try {\n return USDCInterface.parseTransaction({ data });\n } catch {\n // ignore and return undefined\n }\n\n return undefined;\n}\n\n/**\n * Reads an Ethereum address and determines if it is a contract address.\n *\n * @param ethQuery - The Ethereum query object used to interact with the Ethereum blockchain.\n * @param address - The Ethereum address.\n * @returns An object containing the contract code and a boolean indicating if it is a contract address.\n */\nasync function readAddressAsContract(\n ethQuery: EthQuery,\n address?: string,\n): Promise<{\n contractCode: string | null;\n isContractAddress: boolean;\n}> {\n let contractCode;\n try {\n contractCode = await query(ethQuery, 'getCode', [address]);\n } catch (e) {\n contractCode = null;\n }\n\n const isContractAddress = contractCode\n ? contractCode !== '0x' && contractCode !== '0x0'\n : false;\n return { contractCode, isContractAddress };\n}\n"],"mappings":";AACA,SAAS,iBAAiB;AAC1B,SAAS,aAAa;AAEtB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAKA,IAAM,qBAAqB;AAElC,IAAM,iBAAiB,IAAI,UAAU,QAAQ;AAC7C,IAAM,kBAAkB,IAAI,UAAU,SAAS;AAC/C,IAAM,mBAAmB,IAAI,UAAU,UAAU;AACjD,IAAM,gBAAgB,IAAI,UAAU,cAAc;AAWlD,eAAsB,yBACpB,UACA,UACqC;AACrC,QAAM,EAAE,MAAM,GAAG,IAAI;AAErB,MAAI,QAAQ,CAAC,IAAI;AACf,WAAO,EAAE,iDAAsC,iBAAiB,OAAU;AAAA,EAC5E;AAEA,QAAM,EAAE,cAAc,iBAAiB,kBAAkB,IACvD,MAAM,sBAAsB,UAAU,EAAE;AAE1C,MAAI,CAAC,mBAAmB;AACtB,WAAO,EAAE,qCAAkC,gBAAgB;AAAA,EAC7D;AAEA,QAAM,WAAW,OAAO,SAAS,SAAS,GAAG,MAAM;AAEnD,QAAM,4BAA4B;AAAA,IAChC;AAAA,IACA;AAAA,EACF;AAEA,MAAI,CAAC,QAAQ,UAAU;AACrB,WAAO;AAAA,EACT;AAEA,QAAM,OAAO,kCAAkC,IAAI,GAAG;AAEtD,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,QAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOxB,EAAE;AAAA,IACA,CAAC,eAAe,WAAW,YAAY,MAAO,KAAgB,YAAY;AAAA,EAC5E;AAEA,MAAI,iBAAiB;AACnB,WAAO,EAAE,MAAM,iBAAiB,gBAAgB;AAAA,EAClD;AAEA,SAAO;AACT;AAUA,SAAS,kCACP,MACoC;AACpC,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,MAAI;AACF,WAAO,eAAe,iBAAiB,EAAE,KAAK,CAAC;AAAA,EACjD,QAAQ;AAAA,EAER;AAEA,MAAI;AACF,WAAO,gBAAgB,iBAAiB,EAAE,KAAK,CAAC;AAAA,EAClD,QAAQ;AAAA,EAER;AAEA,MAAI;AACF,WAAO,iBAAiB,iBAAiB,EAAE,KAAK,CAAC;AAAA,EACnD,QAAQ;AAAA,EAER;AAEA,MAAI;AACF,WAAO,cAAc,iBAAiB,EAAE,KAAK,CAAC;AAAA,EAChD,QAAQ;AAAA,EAER;AAEA,SAAO;AACT;AASA,eAAe,sBACb,UACA,SAIC;AACD,MAAI;AACJ,MAAI;AACF,mBAAe,MAAM,MAAM,UAAU,WAAW,CAAC,OAAO,CAAC;AAAA,EAC3D,SAAS,GAAG;AACV,mBAAe;AAAA,EACjB;AAEA,QAAM,oBAAoB,eACtB,iBAAiB,QAAQ,iBAAiB,QAC1C;AACJ,SAAO,EAAE,cAAc,kBAAkB;AAC3C;","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-6SJYXSF3.mjs b/node_modules/@metamask/transaction-controller/dist/chunk-KPA3AQWZ.mjs -similarity index 98% -rename from node_modules/@metamask/transaction-controller/dist/chunk-6SJYXSF3.mjs -rename to node_modules/@metamask/transaction-controller/dist/chunk-KPA3AQWZ.mjs -index 4452732..e9d93b4 100644 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-6SJYXSF3.mjs -+++ b/node_modules/@metamask/transaction-controller/dist/chunk-KPA3AQWZ.mjs -@@ -89,4 +89,4 @@ export { - SimulationTokenStandard, - SimulationErrorCode - }; --//# sourceMappingURL=chunk-6SJYXSF3.mjs.map -\ No newline at end of file -+//# sourceMappingURL=chunk-KPA3AQWZ.mjs.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-KT6UAKBB.js.map b/node_modules/@metamask/transaction-controller/dist/chunk-KT6UAKBB.js.map -deleted file mode 100644 -index c4adeb1..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-KT6UAKBB.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/utils/simulation-api.ts"],"names":[],"mappings":";;;;;;;;;AAAA,SAAS,2BAA2B;AACpC,SAAS,0BAAoC;AAK7C,IAAM,MAAM,mBAAmB,eAAe,gBAAgB;AAE9D,IAAM,aAAa;AACnB,IAAM,WAAW;AACjB,IAAM,oBAAoB;AA4I1B,IAAI,mBAAmB;AAOvB,eAAsB,qBACpB,SACA,SAC6B;AAC7B,QAAM,MAAM,MAAM,iBAAiB,OAAO;AAE1C,MAAI,mBAAmB,KAAK,OAAO;AAEnC,QAAM,YAAY;AAClB,sBAAoB;AAEpB,QAAM,WAAW,MAAM,MAAM,KAAK;AAAA,IAChC,QAAQ;AAAA,IACR,MAAM,KAAK,UAAU;AAAA,MACnB,IAAI,OAAO,SAAS;AAAA,MACpB,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,QAAQ,CAAC,OAAO;AAAA,IAClB,CAAC;AAAA,EACH,CAAC;AAED,QAAM,eAAe,MAAM,SAAS,KAAK;AAEzC,MAAI,qBAAqB,YAAY;AAErC,MAAI,aAAa,OAAO;AACtB,UAAM,EAAE,MAAM,QAAQ,IAAI,aAAa;AACvC,UAAM,IAAI,gBAAgB,SAAS,IAAI;AAAA,EACzC;AAEA,SAAO,cAAc;AACvB;AAOA,eAAe,iBAAiB,SAA+B;AAC7D,QAAM,cAAc,MAAM,eAAe;AACzC,QAAM,iBAAiB,oBAAoB,OAAO;AAClD,QAAM,UAAU,YAAY,cAAc;AAE1C,MAAI,CAAC,SAAS,eAAe;AAC3B,QAAI,0BAA0B,OAAO;AACrC,UAAM,IAAI,iCAAiC,OAAO;AAAA,EACpD;AAEA,SAAO,OAAO,QAAQ,OAAO;AAC/B;AAKA,eAAe,iBAAqD;AAClE,QAAM,MAAM,GAAG,OAAO,kBAAkB,CAAC,GAAG,iBAAiB;AAC7D,QAAM,WAAW,MAAM,MAAM,GAAG;AAChC,SAAO,SAAS,KAAK;AACvB;AAOA,SAAS,OAAO,WAA2B;AACzC,SAAO,SAAS,QAAQ,OAAO,SAAS;AAC1C","sourcesContent":["import { convertHexToDecimal } from '@metamask/controller-utils';\nimport { createModuleLogger, type Hex } from '@metamask/utils';\n\nimport { SimulationChainNotSupportedError, SimulationError } from '../errors';\nimport { projectLogger } from '../logger';\n\nconst log = createModuleLogger(projectLogger, 'simulation-api');\n\nconst RPC_METHOD = 'infura_simulateTransactions';\nconst BASE_URL = 'https://tx-sentinel-{0}.api.cx.metamask.io/';\nconst ENDPOINT_NETWORKS = 'networks';\n\n/** Single transaction to simulate in a simulation API request. */\nexport type SimulationRequestTransaction = {\n /** Data to send with the transaction. */\n data?: Hex;\n\n /** Sender of the transaction. */\n from: Hex;\n\n /** Gas limit for the transaction. */\n gas?: Hex;\n\n /** Maximum fee per gas for the transaction. */\n maxFeePerGas?: Hex;\n\n /** Maximum priority fee per gas for the transaction. */\n maxPriorityFeePerGas?: Hex;\n\n /** Recipient of the transaction. */\n to?: Hex;\n\n /** Value to send with the transaction. */\n value?: Hex;\n};\n\n/** Request to the simulation API to simulate transactions. */\nexport type SimulationRequest = {\n /**\n * Transactions to be sequentially simulated.\n * State changes impact subsequent transactions in the list.\n */\n transactions: SimulationRequestTransaction[];\n\n /**\n * Overrides to the state of the blockchain, keyed by smart contract address.\n */\n overrides?: {\n [address: Hex]: {\n /** Overrides to the storage slots for a smart contract account. */\n stateDiff: {\n [slot: Hex]: Hex;\n };\n };\n };\n\n /**\n * Whether to include call traces in the response.\n * Defaults to false.\n */\n withCallTrace?: boolean;\n\n /**\n * Whether to include event logs in the response.\n * Defaults to false.\n */\n withLogs?: boolean;\n};\n\n/** Raw event log emitted by a simulated transaction. */\nexport type SimulationResponseLog = {\n /** Address of the account that created the event. */\n address: Hex;\n\n /** Raw data in the event that is not indexed. */\n data: Hex;\n\n /** Raw indexed data from the event. */\n topics: Hex[];\n};\n\n/** Call trace of a single simulated transaction. */\nexport type SimulationResponseCallTrace = {\n /** Nested calls. */\n calls: SimulationResponseCallTrace[];\n\n /** Raw event logs created by the call. */\n logs: SimulationResponseLog[];\n};\n\n/**\n * Changes to the blockchain state.\n * Keyed by account address.\n */\nexport type SimulationResponseStateDiff = {\n [address: Hex]: {\n /** Native balance of the account. */\n balance?: Hex;\n\n /** Nonce of the account. */\n nonce?: Hex;\n\n /** Storage values per slot. */\n storage?: {\n [slot: Hex]: Hex;\n };\n };\n};\n\n/** Response from the simulation API for a single transaction. */\nexport type SimulationResponseTransaction = {\n /** An error message indicating the transaction could not be simulated. */\n error?: string;\n\n /** Return value of the transaction, such as the balance if calling balanceOf. */\n return: Hex;\n\n /** Hierarchy of call data including nested calls and logs. */\n callTrace?: SimulationResponseCallTrace;\n\n /** Changes to the blockchain state. */\n stateDiff?: {\n /** Initial blockchain state before the transaction. */\n pre?: SimulationResponseStateDiff;\n\n /** Updated blockchain state after the transaction. */\n post?: SimulationResponseStateDiff;\n };\n};\n\n/** Response from the simulation API. */\nexport type SimulationResponse = {\n /** Simulation data for each transaction in the request. */\n transactions: SimulationResponseTransaction[];\n};\n\n/** Data for a network supported by the Simulation API. */\ntype SimulationNetwork = {\n /** Subdomain of the API for the network. */\n network: string;\n\n /** Whether the network supports confirmation simulations. */\n confirmations: boolean;\n};\n\n/** Response from the simulation API containing supported networks. */\ntype SimulationNetworkResponse = {\n [chainIdDecimal: string]: SimulationNetwork;\n};\n\nlet requestIdCounter = 0;\n\n/**\n * Simulate transactions using the transaction simulation API.\n * @param chainId - The chain ID to simulate transactions on.\n * @param request - The request to simulate transactions.\n */\nexport async function simulateTransactions(\n chainId: Hex,\n request: SimulationRequest,\n): Promise {\n const url = await getSimulationUrl(chainId);\n\n log('Sending request', url, request);\n\n const requestId = requestIdCounter;\n requestIdCounter += 1;\n\n const response = await fetch(url, {\n method: 'POST',\n body: JSON.stringify({\n id: String(requestId),\n jsonrpc: '2.0',\n method: RPC_METHOD,\n params: [request],\n }),\n });\n\n const responseJson = await response.json();\n\n log('Received response', responseJson);\n\n if (responseJson.error) {\n const { code, message } = responseJson.error;\n throw new SimulationError(message, code);\n }\n\n return responseJson?.result;\n}\n\n/**\n * Get the URL for the transaction simulation API.\n * @param chainId - The chain ID to get the URL for.\n * @returns The URL for the transaction simulation API.\n */\nasync function getSimulationUrl(chainId: Hex): Promise {\n const networkData = await getNetworkData();\n const chainIdDecimal = convertHexToDecimal(chainId);\n const network = networkData[chainIdDecimal];\n\n if (!network?.confirmations) {\n log('Chain is not supported', chainId);\n throw new SimulationChainNotSupportedError(chainId);\n }\n\n return getUrl(network.network);\n}\n\n/**\n * Retrieve the supported network data from the simulation API.\n */\nasync function getNetworkData(): Promise {\n const url = `${getUrl('ethereum-mainnet')}${ENDPOINT_NETWORKS}`;\n const response = await fetch(url);\n return response.json();\n}\n\n/**\n * Generate the URL for the specified subdomain in the simulation API.\n * @param subdomain - The subdomain to generate the URL for.\n * @returns The URL for the transaction simulation API.\n */\nfunction getUrl(subdomain: string): string {\n return BASE_URL.replace('{0}', subdomain);\n}\n"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-KT6UAKBB.js b/node_modules/@metamask/transaction-controller/dist/chunk-L7HIDFC5.js -similarity index 97% -rename from node_modules/@metamask/transaction-controller/dist/chunk-KT6UAKBB.js -rename to node_modules/@metamask/transaction-controller/dist/chunk-L7HIDFC5.js -index 24ddd9d..376817d 100644 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-KT6UAKBB.js -+++ b/node_modules/@metamask/transaction-controller/dist/chunk-L7HIDFC5.js -@@ -58,4 +58,4 @@ function getUrl(subdomain) { - - - exports.simulateTransactions = simulateTransactions; --//# sourceMappingURL=chunk-KT6UAKBB.js.map -\ No newline at end of file -+//# sourceMappingURL=chunk-L7HIDFC5.js.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-AYTU4HU5.js b/node_modules/@metamask/transaction-controller/dist/chunk-M3VM35ID.js -similarity index 99% -rename from node_modules/@metamask/transaction-controller/dist/chunk-AYTU4HU5.js -rename to node_modules/@metamask/transaction-controller/dist/chunk-M3VM35ID.js -index ebfda25..4edd15a 100644 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-AYTU4HU5.js -+++ b/node_modules/@metamask/transaction-controller/dist/chunk-M3VM35ID.js -@@ -89,4 +89,4 @@ var SimulationErrorCode = /* @__PURE__ */ ((SimulationErrorCode2) => { - - - exports.TransactionStatus = TransactionStatus; exports.WalletDevice = WalletDevice; exports.TransactionType = TransactionType; exports.TransactionEnvelopeType = TransactionEnvelopeType; exports.UserFeeLevel = UserFeeLevel; exports.GasFeeEstimateLevel = GasFeeEstimateLevel; exports.GasFeeEstimateType = GasFeeEstimateType; exports.SimulationTokenStandard = SimulationTokenStandard; exports.SimulationErrorCode = SimulationErrorCode; --//# sourceMappingURL=chunk-AYTU4HU5.js.map -\ No newline at end of file -+//# sourceMappingURL=chunk-M3VM35ID.js.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-RXIUMVA5.js b/node_modules/@metamask/transaction-controller/dist/chunk-MPJQFAVC.js -similarity index 97% -rename from node_modules/@metamask/transaction-controller/dist/chunk-RXIUMVA5.js -rename to node_modules/@metamask/transaction-controller/dist/chunk-MPJQFAVC.js -index 61f8e4d..b8046dc 100644 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-RXIUMVA5.js -+++ b/node_modules/@metamask/transaction-controller/dist/chunk-MPJQFAVC.js -@@ -1,6 +1,6 @@ - "use strict";Object.defineProperty(exports, "__esModule", {value: true}); - --var _chunkOZ6UB42Cjs = require('./chunk-OZ6UB42C.js'); -+var _chunkEVJRYRCRjs = require('./chunk-EVJRYRCR.js'); - - // src/utils/validation.ts - var _abi = require('@ethersproject/abi'); -@@ -35,7 +35,7 @@ function validateTxParams(txParams, isEIP1559Compatible = true) { - validateGasFeeParams(txParams); - } - function validateEIP1559Compatibility(txParams, isEIP1559Compatible) { -- if (_chunkOZ6UB42Cjs.isEIP1559Transaction.call(void 0, txParams) && !isEIP1559Compatible) { -+ if (_chunkEVJRYRCRjs.isEIP1559Transaction.call(void 0, txParams) && !isEIP1559Compatible) { - throw _rpcerrors.rpcErrors.invalidParams( - "Invalid transaction params: params specify an EIP-1559 transaction but the current network does not support EIP-1559" - ); -@@ -183,4 +183,4 @@ function ensureFieldIsString(txParams, field) { - - - exports.validateTransactionOrigin = validateTransactionOrigin; exports.validateTxParams = validateTxParams; --//# sourceMappingURL=chunk-RXIUMVA5.js.map -\ No newline at end of file -+//# sourceMappingURL=chunk-MPJQFAVC.js.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-NOHEXQ7Y.mjs.map b/node_modules/@metamask/transaction-controller/dist/chunk-NOHEXQ7Y.mjs.map -deleted file mode 100644 -index 808d567..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-NOHEXQ7Y.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/utils/layer1-gas-fee-flow.ts"],"sourcesContent":["import type { Provider } from '@metamask/network-controller';\nimport { createModuleLogger, type Hex } from '@metamask/utils';\n\nimport { projectLogger } from '../logger';\nimport type { Layer1GasFeeFlow, TransactionMeta } from '../types';\n\nconst log = createModuleLogger(projectLogger, 'layer-1-gas-fee-flow');\n\nexport type UpdateLayer1GasFeeRequest = {\n layer1GasFeeFlows: Layer1GasFeeFlow[];\n provider: Provider;\n transactionMeta: TransactionMeta;\n};\n\n/**\n * Updates the given transactionMeta with the layer 1 gas fee.\n * @param request - The request to use when getting the layer 1 gas fee.\n * @param request.provider - Provider used to create a new underlying EthQuery instance\n * @param request.transactionMeta - The transaction to get the layer 1 gas fee for.\n * @param request.layer1GasFeeFlows - The layer 1 gas fee flows to search.\n */\nexport async function updateTransactionLayer1GasFee(\n request: UpdateLayer1GasFeeRequest,\n) {\n const layer1GasFee = await getTransactionLayer1GasFee(request);\n\n if (!layer1GasFee) {\n return;\n }\n\n const { transactionMeta } = request;\n\n transactionMeta.layer1GasFee = layer1GasFee;\n\n log('Updated layer 1 gas fee', layer1GasFee, transactionMeta.id);\n}\n\n/**\n * Get the layer 1 gas fee flow for a transaction.\n * @param transactionMeta - The transaction to get the layer 1 gas fee flow for.\n * @param layer1GasFeeFlows - The layer 1 gas fee flows to search.\n * @returns The layer 1 gas fee flow for the transaction, or undefined if none match.\n */\nfunction getLayer1GasFeeFlow(\n transactionMeta: TransactionMeta,\n layer1GasFeeFlows: Layer1GasFeeFlow[],\n): Layer1GasFeeFlow | undefined {\n return layer1GasFeeFlows.find((layer1GasFeeFlow) =>\n layer1GasFeeFlow.matchesTransaction(transactionMeta),\n );\n}\n\n/**\n * Get the layer 1 gas fee for a transaction and return the layer1Fee.\n * @param request - The request to use when getting the layer 1 gas fee.\n * @param request.layer1GasFeeFlows - The layer 1 gas fee flows to search.\n * @param request.provider - The provider to use to get the layer 1 gas fee.\n * @param request.transactionMeta - The transaction to get the layer 1 gas fee for.\n */\nexport async function getTransactionLayer1GasFee({\n layer1GasFeeFlows,\n provider,\n transactionMeta,\n}: UpdateLayer1GasFeeRequest): Promise {\n const layer1GasFeeFlow = getLayer1GasFeeFlow(\n transactionMeta,\n layer1GasFeeFlows,\n );\n\n if (!layer1GasFeeFlow) {\n return undefined;\n }\n\n log(\n 'Found layer 1 gas fee flow',\n layer1GasFeeFlow.constructor.name,\n transactionMeta.id,\n );\n\n try {\n const { layer1Fee } = await layer1GasFeeFlow.getLayer1Fee({\n provider,\n transactionMeta,\n });\n return layer1Fee;\n } catch (error) {\n log('Failed to get layer 1 gas fee', transactionMeta.id, error);\n return undefined;\n }\n}\n"],"mappings":";;;;;AACA,SAAS,0BAAoC;AAK7C,IAAM,MAAM,mBAAmB,eAAe,sBAAsB;AAepE,eAAsB,8BACpB,SACA;AACA,QAAM,eAAe,MAAM,2BAA2B,OAAO;AAE7D,MAAI,CAAC,cAAc;AACjB;AAAA,EACF;AAEA,QAAM,EAAE,gBAAgB,IAAI;AAE5B,kBAAgB,eAAe;AAE/B,MAAI,2BAA2B,cAAc,gBAAgB,EAAE;AACjE;AAQA,SAAS,oBACP,iBACA,mBAC8B;AAC9B,SAAO,kBAAkB;AAAA,IAAK,CAAC,qBAC7B,iBAAiB,mBAAmB,eAAe;AAAA,EACrD;AACF;AASA,eAAsB,2BAA2B;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AACF,GAAwD;AACtD,QAAM,mBAAmB;AAAA,IACvB;AAAA,IACA;AAAA,EACF;AAEA,MAAI,CAAC,kBAAkB;AACrB,WAAO;AAAA,EACT;AAEA;AAAA,IACE;AAAA,IACA,iBAAiB,YAAY;AAAA,IAC7B,gBAAgB;AAAA,EAClB;AAEA,MAAI;AACF,UAAM,EAAE,UAAU,IAAI,MAAM,iBAAiB,aAAa;AAAA,MACxD;AAAA,MACA;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT,SAAS,OAAO;AACd,QAAI,iCAAiC,gBAAgB,IAAI,KAAK;AAC9D,WAAO;AAAA,EACT;AACF;","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-NYKRCWBG.js.map b/node_modules/@metamask/transaction-controller/dist/chunk-NYKRCWBG.js.map -deleted file mode 100644 -index dbe3864..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-NYKRCWBG.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/gas-flows/OptimismLayer1GasFeeFlow.ts"],"names":[],"mappings":";;;;;;;;AAMA,IAAM,2BAAkC;AAAA,EACtC,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AACZ;AAGA,IAAM,oCACJ;AAKK,IAAM,2BAAN,cAAuC,uBAAuB;AAAA,EACnE,cAAc;AACZ,UAAM,iCAAiC;AAAA,EACzC;AAAA,EAEA,mBAAmB,iBAA2C;AAC5D,WAAO,yBAAyB,SAAS,gBAAgB,OAAO;AAAA,EAClE;AACF","sourcesContent":["import { type Hex } from '@metamask/utils';\n\nimport { CHAIN_IDS } from '../constants';\nimport type { TransactionMeta } from '../types';\nimport { OracleLayer1GasFeeFlow } from './OracleLayer1GasFeeFlow';\n\nconst OPTIMISM_STACK_CHAIN_IDS: Hex[] = [\n CHAIN_IDS.OPTIMISM,\n CHAIN_IDS.OPTIMISM_TESTNET,\n CHAIN_IDS.BASE,\n CHAIN_IDS.BASE_TESTNET,\n CHAIN_IDS.OPBNB,\n CHAIN_IDS.OPBNB_TESTNET,\n CHAIN_IDS.ZORA,\n];\n\n// BlockExplorer link: https://optimistic.etherscan.io/address/0x420000000000000000000000000000000000000f#code\nconst OPTIMISM_GAS_PRICE_ORACLE_ADDRESS =\n '0x420000000000000000000000000000000000000F';\n\n/**\n * Optimism layer 1 gas fee flow that obtains gas fee estimate using an oracle contract.\n */\nexport class OptimismLayer1GasFeeFlow extends OracleLayer1GasFeeFlow {\n constructor() {\n super(OPTIMISM_GAS_PRICE_ORACLE_ADDRESS);\n }\n\n matchesTransaction(transactionMeta: TransactionMeta): boolean {\n return OPTIMISM_STACK_CHAIN_IDS.includes(transactionMeta.chainId);\n }\n}\n"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-H2KZOK3J.mjs b/node_modules/@metamask/transaction-controller/dist/chunk-O6TBIZZ3.mjs -similarity index 97% -rename from node_modules/@metamask/transaction-controller/dist/chunk-H2KZOK3J.mjs -rename to node_modules/@metamask/transaction-controller/dist/chunk-O6TBIZZ3.mjs -index 8f0bd49..b20f771 100644 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-H2KZOK3J.mjs -+++ b/node_modules/@metamask/transaction-controller/dist/chunk-O6TBIZZ3.mjs -@@ -1,12 +1,12 @@ - import { - gweiDecimalToWeiHex --} from "./chunk-VXNPVIYL.mjs"; -+} from "./chunk-3KWZRCW5.mjs"; - import { - projectLogger - } from "./chunk-UQQWZT6C.mjs"; - import { - GasFeeEstimateLevel --} from "./chunk-6SJYXSF3.mjs"; -+} from "./chunk-KPA3AQWZ.mjs"; - import { - __privateAdd, - __privateMethod -@@ -109,4 +109,4 @@ getLegacyLevel_fn = function(gasFeeEstimates, level) { - export { - DefaultGasFeeFlow - }; --//# sourceMappingURL=chunk-H2KZOK3J.mjs.map -\ No newline at end of file -+//# sourceMappingURL=chunk-O6TBIZZ3.mjs.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-O6ZZVIFH.mjs.map b/node_modules/@metamask/transaction-controller/dist/chunk-O6ZZVIFH.mjs.map -deleted file mode 100644 -index 5291170..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-O6ZZVIFH.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/constants.ts"],"sourcesContent":["export const CHAIN_IDS = {\n MAINNET: '0x1',\n GOERLI: '0x5',\n BASE: '0x2105',\n BASE_TESTNET: '0x14a33',\n BSC: '0x38',\n BSC_TESTNET: '0x61',\n OPTIMISM: '0xa',\n OPTIMISM_TESTNET: '0x1a4',\n OPBNB: '0xcc',\n OPBNB_TESTNET: '0x15eb',\n OPTIMISM_SEPOLIA: '0xaa37dc',\n POLYGON: '0x89',\n POLYGON_TESTNET: '0x13881',\n AVALANCHE: '0xa86a',\n AVALANCHE_TESTNET: '0xa869',\n FANTOM: '0xfa',\n FANTOM_TESTNET: '0xfa2',\n SEPOLIA: '0xaa36a7',\n LINEA_GOERLI: '0xe704',\n LINEA_SEPOLIA: '0xe705',\n LINEA_MAINNET: '0xe708',\n MOONBEAM: '0x504',\n MOONBEAM_TESTNET: '0x507',\n MOONRIVER: '0x505',\n GNOSIS: '0x64',\n ARBITRUM: '0xa4b1',\n ZKSYNC_ERA: '0x144',\n ZORA: '0x76adf1',\n SCROLL: '0x82750',\n SCROLL_SEPOLIA: '0x8274f',\n} as const;\n\nexport const DEFAULT_ETHERSCAN_DOMAIN = 'etherscan.io';\nexport const DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX = 'api';\n\nexport const ETHERSCAN_SUPPORTED_NETWORKS = {\n [CHAIN_IDS.GOERLI]: {\n domain: DEFAULT_ETHERSCAN_DOMAIN,\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-goerli`,\n },\n [CHAIN_IDS.MAINNET]: {\n domain: DEFAULT_ETHERSCAN_DOMAIN,\n subdomain: DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,\n },\n [CHAIN_IDS.SEPOLIA]: {\n domain: DEFAULT_ETHERSCAN_DOMAIN,\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-sepolia`,\n },\n [CHAIN_IDS.LINEA_GOERLI]: {\n domain: 'lineascan.build',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-goerli`,\n },\n [CHAIN_IDS.LINEA_SEPOLIA]: {\n domain: 'lineascan.build',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-sepolia`,\n },\n [CHAIN_IDS.LINEA_MAINNET]: {\n domain: 'lineascan.build',\n subdomain: DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,\n },\n [CHAIN_IDS.BSC]: {\n domain: 'bscscan.com',\n subdomain: DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,\n },\n [CHAIN_IDS.BSC_TESTNET]: {\n domain: 'bscscan.com',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-testnet`,\n },\n [CHAIN_IDS.OPTIMISM]: {\n domain: DEFAULT_ETHERSCAN_DOMAIN,\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-optimistic`,\n },\n [CHAIN_IDS.OPTIMISM_SEPOLIA]: {\n domain: DEFAULT_ETHERSCAN_DOMAIN,\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-sepolia-optimistic`,\n },\n [CHAIN_IDS.POLYGON]: {\n domain: 'polygonscan.com',\n subdomain: DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,\n },\n [CHAIN_IDS.POLYGON_TESTNET]: {\n domain: 'polygonscan.com',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-mumbai`,\n },\n [CHAIN_IDS.AVALANCHE]: {\n domain: 'snowtrace.io',\n subdomain: DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,\n },\n [CHAIN_IDS.AVALANCHE_TESTNET]: {\n domain: 'snowtrace.io',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-testnet`,\n },\n [CHAIN_IDS.FANTOM]: {\n domain: 'ftmscan.com',\n subdomain: DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,\n },\n [CHAIN_IDS.FANTOM_TESTNET]: {\n domain: 'ftmscan.com',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-testnet`,\n },\n [CHAIN_IDS.MOONBEAM]: {\n domain: 'moonscan.io',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-moonbeam`,\n },\n [CHAIN_IDS.MOONBEAM_TESTNET]: {\n domain: 'moonscan.io',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-moonbase`,\n },\n [CHAIN_IDS.MOONRIVER]: {\n domain: 'moonscan.io',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-moonriver`,\n },\n [CHAIN_IDS.GNOSIS]: {\n domain: 'gnosisscan.io',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-gnosis`,\n },\n};\n\nexport const GAS_BUFFER_CHAIN_OVERRIDES = {\n [CHAIN_IDS.OPTIMISM]: 1,\n [CHAIN_IDS.OPTIMISM_SEPOLIA]: 1,\n};\n\n/** Extract of the Wrapped ERC-20 ABI required for simulation. */\nexport const ABI_SIMULATION_ERC20_WRAPPED = [\n {\n anonymous: false,\n inputs: [\n { indexed: true, name: 'to', type: 'address' },\n { indexed: false, name: 'wad', type: 'uint256' },\n ],\n name: 'Deposit',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, name: 'from', type: 'address' },\n { indexed: false, name: 'wad', type: 'uint256' },\n ],\n name: 'Withdrawal',\n type: 'event',\n },\n];\n\n/** Extract of the legacy ERC-721 ABI required for simulation. */\nexport const ABI_SIMULATION_ERC721_LEGACY = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n name: '_from',\n type: 'address',\n },\n {\n indexed: false,\n name: '_to',\n type: 'address',\n },\n {\n indexed: false,\n name: '_tokenId',\n type: 'uint256',\n },\n ],\n name: 'Transfer',\n type: 'event',\n },\n];\n"],"mappings":"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","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-UHG2LLVV.mjs b/node_modules/@metamask/transaction-controller/dist/chunk-OAXKMLDD.mjs -similarity index 97% -rename from node_modules/@metamask/transaction-controller/dist/chunk-UHG2LLVV.mjs -rename to node_modules/@metamask/transaction-controller/dist/chunk-OAXKMLDD.mjs -index 48acf26..00bd279 100644 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-UHG2LLVV.mjs -+++ b/node_modules/@metamask/transaction-controller/dist/chunk-OAXKMLDD.mjs -@@ -1,12 +1,12 @@ - import { - DefaultGasFeeFlow --} from "./chunk-H2KZOK3J.mjs"; -+} from "./chunk-O6TBIZZ3.mjs"; - import { - projectLogger - } from "./chunk-UQQWZT6C.mjs"; - import { - GasFeeEstimateLevel --} from "./chunk-6SJYXSF3.mjs"; -+} from "./chunk-KPA3AQWZ.mjs"; - import { - __privateAdd, - __privateMethod -@@ -118,4 +118,4 @@ feesToString_fn = function(fees) { - export { - LineaGasFeeFlow - }; --//# sourceMappingURL=chunk-UHG2LLVV.mjs.map -\ No newline at end of file -+//# sourceMappingURL=chunk-OAXKMLDD.mjs.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-OZ6UB42C.js.map b/node_modules/@metamask/transaction-controller/dist/chunk-OZ6UB42C.js.map -deleted file mode 100644 -index 982c006..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-OZ6UB42C.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/utils/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { convertHexToDecimal } from '@metamask/controller-utils';\nimport {\n add0x,\n getKnownPropertyNames,\n isStrictHexString,\n} from '@metamask/utils';\nimport type { Json } from '@metamask/utils';\n\nimport type {\n GasPriceValue,\n FeeMarketEIP1559Values,\n} from '../TransactionController';\nimport { TransactionStatus } from '../types';\nimport type {\n TransactionParams,\n TransactionMeta,\n TransactionError,\n} from '../types';\n\nexport const ESTIMATE_GAS_ERROR = 'eth_estimateGas rpc method error';\n\n// TODO: Replace `any` with type\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst NORMALIZERS: { [param in keyof TransactionParams]: any } = {\n data: (data: string) => add0x(padHexToEvenLength(data)),\n from: (from: string) => add0x(from).toLowerCase(),\n gas: (gas: string) => add0x(gas),\n gasLimit: (gas: string) => add0x(gas),\n gasPrice: (gasPrice: string) => add0x(gasPrice),\n nonce: (nonce: string) => add0x(nonce),\n to: (to: string) => add0x(to).toLowerCase(),\n value: (value: string) => add0x(value),\n maxFeePerGas: (maxFeePerGas: string) => add0x(maxFeePerGas),\n maxPriorityFeePerGas: (maxPriorityFeePerGas: string) =>\n add0x(maxPriorityFeePerGas),\n estimatedBaseFee: (maxPriorityFeePerGas: string) =>\n add0x(maxPriorityFeePerGas),\n type: (type: string) => add0x(type),\n};\n\n/**\n * Normalizes properties on transaction params.\n *\n * @param txParams - The transaction params to normalize.\n * @returns Normalized transaction params.\n */\nexport function normalizeTransactionParams(txParams: TransactionParams) {\n const normalizedTxParams: TransactionParams = { from: '' };\n\n for (const key of getKnownPropertyNames(NORMALIZERS)) {\n if (txParams[key]) {\n normalizedTxParams[key] = NORMALIZERS[key](txParams[key]);\n }\n }\n\n if (!normalizedTxParams.value) {\n normalizedTxParams.value = '0x0';\n }\n\n return normalizedTxParams;\n}\n\n/**\n * Checks if a transaction is EIP-1559 by checking for the existence of\n * maxFeePerGas and maxPriorityFeePerGas within its parameters.\n *\n * @param txParams - Transaction params object to add.\n * @returns Boolean that is true if the transaction is EIP-1559 (has maxFeePerGas and maxPriorityFeePerGas), otherwise returns false.\n */\nexport function isEIP1559Transaction(txParams: TransactionParams): boolean {\n const hasOwnProp = (obj: TransactionParams, key: string) =>\n Object.prototype.hasOwnProperty.call(obj, key);\n return (\n hasOwnProp(txParams, 'maxFeePerGas') &&\n hasOwnProp(txParams, 'maxPriorityFeePerGas')\n );\n}\n\nexport const validateGasValues = (\n gasValues: GasPriceValue | FeeMarketEIP1559Values,\n) => {\n Object.keys(gasValues).forEach((key) => {\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const value = (gasValues as any)[key];\n if (typeof value !== 'string' || !isStrictHexString(value)) {\n throw new TypeError(\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `expected hex string for ${key} but received: ${value}`,\n );\n }\n });\n};\n\nexport const isFeeMarketEIP1559Values = (\n gasValues?: GasPriceValue | FeeMarketEIP1559Values,\n): gasValues is FeeMarketEIP1559Values =>\n (gasValues as FeeMarketEIP1559Values)?.maxFeePerGas !== undefined ||\n (gasValues as FeeMarketEIP1559Values)?.maxPriorityFeePerGas !== undefined;\n\nexport const isGasPriceValue = (\n gasValues?: GasPriceValue | FeeMarketEIP1559Values,\n): gasValues is GasPriceValue =>\n (gasValues as GasPriceValue)?.gasPrice !== undefined;\n\nexport const getIncreasedPriceHex = (value: number, rate: number): string =>\n add0x(`${parseInt(`${value * rate}`, 10).toString(16)}`);\n\nexport const getIncreasedPriceFromExisting = (\n value: string | undefined,\n rate: number,\n): string => {\n return getIncreasedPriceHex(convertHexToDecimal(value), rate);\n};\n\n/**\n * Validates that the proposed value is greater than or equal to the minimum value.\n *\n * @param proposed - The proposed value.\n * @param min - The minimum value.\n * @returns The proposed value.\n * @throws Will throw if the proposed value is too low.\n */\nexport function validateMinimumIncrease(proposed: string, min: string) {\n const proposedDecimal = convertHexToDecimal(proposed);\n const minDecimal = convertHexToDecimal(min);\n if (proposedDecimal >= minDecimal) {\n return proposed;\n }\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n const errorMsg = `The proposed value: ${proposedDecimal} should meet or exceed the minimum value: ${minDecimal}`;\n throw new Error(errorMsg);\n}\n\n/**\n * Validates that a transaction is unapproved.\n * Throws if the transaction is not unapproved.\n *\n * @param transactionMeta - The transaction metadata to check.\n * @param fnName - The name of the function calling this helper.\n */\nexport function validateIfTransactionUnapproved(\n transactionMeta: TransactionMeta | undefined,\n fnName: string,\n) {\n if (transactionMeta?.status !== TransactionStatus.unapproved) {\n throw new Error(\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `TransactionsController: Can only call ${fnName} on an unapproved transaction.\\n Current tx status: ${transactionMeta?.status}`,\n );\n }\n}\n\n/**\n * Normalizes properties on transaction params.\n *\n * @param error - The error to be normalize.\n * @returns Normalized transaction error.\n */\nexport function normalizeTxError(\n error: Error & { code?: string; value?: unknown },\n): TransactionError {\n return {\n name: error.name,\n message: error.message,\n stack: error.stack,\n code: error.code,\n rpc: isJsonCompatible(error.value) ? error.value : undefined,\n };\n}\n\n/**\n * Normalize an object containing gas fee values.\n *\n * @param gasFeeValues - An object containing gas fee values.\n * @returns An object containing normalized gas fee values.\n */\nexport function normalizeGasFeeValues(\n gasFeeValues: GasPriceValue | FeeMarketEIP1559Values,\n): GasPriceValue | FeeMarketEIP1559Values {\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const normalize = (value: any) =>\n typeof value === 'string' ? add0x(value) : value;\n\n if ('gasPrice' in gasFeeValues) {\n return {\n gasPrice: normalize(gasFeeValues.gasPrice),\n };\n }\n\n return {\n maxFeePerGas: normalize(gasFeeValues.maxFeePerGas),\n maxPriorityFeePerGas: normalize(gasFeeValues.maxPriorityFeePerGas),\n };\n}\n\n/**\n * Determines whether the given value can be encoded as JSON.\n *\n * @param value - The value.\n * @returns True if the value is JSON-encodable, false if not.\n */\nfunction isJsonCompatible(value: unknown): value is Json {\n try {\n JSON.parse(JSON.stringify(value));\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Ensure a hex string is of even length by adding a leading 0 if necessary.\n * Any existing `0x` prefix is preserved but is not added if missing.\n *\n * @param hex - The hex string to ensure is even.\n * @returns The hex string with an even length.\n */\nexport function padHexToEvenLength(hex: string) {\n const prefix = hex.toLowerCase().startsWith('0x') ? hex.slice(0, 2) : '';\n const data = prefix ? hex.slice(2) : hex;\n const evenData = data.length % 2 === 0 ? data : `0${data}`;\n\n return prefix + evenData;\n}\n"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-UKV5HIMT.mjs b/node_modules/@metamask/transaction-controller/dist/chunk-PBSMFYZI.mjs -similarity index 95% -rename from node_modules/@metamask/transaction-controller/dist/chunk-UKV5HIMT.mjs -rename to node_modules/@metamask/transaction-controller/dist/chunk-PBSMFYZI.mjs -index 17eb6a6..11ad41a 100644 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-UKV5HIMT.mjs -+++ b/node_modules/@metamask/transaction-controller/dist/chunk-PBSMFYZI.mjs -@@ -2,16 +2,20 @@ import { - getAndFormatTransactionsForNonceTracker, - getNextNonce - } from "./chunk-6DDVVUJC.mjs"; -+import { -+ hasSimulationDataChanged, -+ shouldResimulate -+} from "./chunk-GRDPR767.mjs"; - import { - getSimulationData --} from "./chunk-EVL6KODQ.mjs"; -+} from "./chunk-D7MMS3XU.mjs"; - import { - determineTransactionType - } from "./chunk-KG4UW4K4.mjs"; - import { - validateTransactionOrigin, - validateTxParams --} from "./chunk-5ZEJT5SN.mjs"; -+} from "./chunk-TQS7IKY6.mjs"; - import { - PendingTransactionTracker - } from "./chunk-6B5BEO3R.mjs"; -@@ -38,7 +42,7 @@ import { - } from "./chunk-FMRLPVFZ.mjs"; - import { - GasFeePoller --} from "./chunk-SFFTNB2X.mjs"; -+} from "./chunk-5TW7WBKX.mjs"; - import { - getTransactionLayer1GasFee, - updateTransactionLayer1GasFee -@@ -54,17 +58,17 @@ import { - } from "./chunk-EKJXGERC.mjs"; - import { - LineaGasFeeFlow --} from "./chunk-UHG2LLVV.mjs"; -+} from "./chunk-OAXKMLDD.mjs"; - import { - DefaultGasFeeFlow --} from "./chunk-H2KZOK3J.mjs"; -+} from "./chunk-O6TBIZZ3.mjs"; - import { - updateGasFees --} from "./chunk-VXNPVIYL.mjs"; -+} from "./chunk-3KWZRCW5.mjs"; - import { - updatePostTransactionBalance, - updateSwapsTransaction --} from "./chunk-GNAL5HC2.mjs"; -+} from "./chunk-UNXUIJLG.mjs"; - import { - getIncreasedPriceFromExisting, - isEIP1559Transaction, -@@ -76,10 +80,10 @@ import { - validateGasValues, - validateIfTransactionUnapproved, - validateMinimumIncrease --} from "./chunk-Q56I5ONX.mjs"; -+} from "./chunk-F7IJZOCR.mjs"; - import { - getGasFeeFlow --} from "./chunk-JXXTNVU4.mjs"; -+} from "./chunk-BS5IK7HD.mjs"; - import { - projectLogger - } from "./chunk-UQQWZT6C.mjs"; -@@ -110,7 +114,7 @@ import { add0x } from "@metamask/utils"; - import { Mutex } from "async-mutex"; - import { MethodRegistry } from "eth-method-registry"; - import { EventEmitter } from "events"; --import { cloneDeep, mapValues, merge, pickBy, sortBy, isEqual } from "lodash"; -+import { cloneDeep, mapValues, merge, pickBy, sortBy } from "lodash"; - import { v1 as random } from "uuid"; - var metadata = { - transactions: { -@@ -124,9 +128,14 @@ var metadata = { - lastFetchedBlockNumbers: { - persist: true, - anonymous: false -+ }, -+ submitHistory: { -+ persist: true, -+ anonymous: false - } - }; - var HARDFORK = Hardfork.London; -+var SUBMIT_HISTORY_LIMIT = 100; - var CANCEL_RATE = 1.1; - var SPEED_UP_RATE = 1.1; - var controllerName = "TransactionController"; -@@ -140,10 +149,11 @@ function getDefaultTransactionControllerState() { - return { - methodData: {}, - transactions: [], -- lastFetchedBlockNumbers: {} -+ lastFetchedBlockNumbers: {}, -+ submitHistory: [] - }; - } --var _internalEvents, _incomingTransactionOptions, _pendingTransactionOptions, _transactionHistoryLimit, _isSimulationEnabled, _testGasFeeFlows, _multichainTrackingHelper, _createNonceTracker, createNonceTracker_fn, _createIncomingTransactionHelper, createIncomingTransactionHelper_fn, _createPendingTransactionTracker, createPendingTransactionTracker_fn, _checkForPendingTransactionAndStartPolling, _stopAllTracking, stopAllTracking_fn, _removeIncomingTransactionHelperListeners, removeIncomingTransactionHelperListeners_fn, _addIncomingTransactionHelperListeners, addIncomingTransactionHelperListeners_fn, _removePendingTransactionTrackerListeners, removePendingTransactionTrackerListeners_fn, _addPendingTransactionTrackerListeners, addPendingTransactionTrackerListeners_fn, _getNonceTrackerPendingTransactions, getNonceTrackerPendingTransactions_fn, _getGasFeeFlows, getGasFeeFlows_fn, _getLayer1GasFeeFlows, getLayer1GasFeeFlows_fn, _updateTransactionInternal, updateTransactionInternal_fn, _checkIfTransactionParamsUpdated, checkIfTransactionParamsUpdated_fn, _onTransactionParamsUpdated, onTransactionParamsUpdated_fn, _updateSimulationData, updateSimulationData_fn, _onGasFeePollerTransactionUpdate, onGasFeePollerTransactionUpdate_fn, _getNetworkClientId, getNetworkClientId_fn, _getGlobalNetworkClientId, getGlobalNetworkClientId_fn, _getGlobalChainId, getGlobalChainId_fn, _isCustomNetwork, isCustomNetwork_fn, _getSelectedAccount, getSelectedAccount_fn; -+var _internalEvents, _incomingTransactionOptions, _pendingTransactionOptions, _transactionHistoryLimit, _isSimulationEnabled, _testGasFeeFlows, _multichainTrackingHelper, _createNonceTracker, createNonceTracker_fn, _createIncomingTransactionHelper, createIncomingTransactionHelper_fn, _createPendingTransactionTracker, createPendingTransactionTracker_fn, _checkForPendingTransactionAndStartPolling, _stopAllTracking, stopAllTracking_fn, _removeIncomingTransactionHelperListeners, removeIncomingTransactionHelperListeners_fn, _addIncomingTransactionHelperListeners, addIncomingTransactionHelperListeners_fn, _removePendingTransactionTrackerListeners, removePendingTransactionTrackerListeners_fn, _addPendingTransactionTrackerListeners, addPendingTransactionTrackerListeners_fn, _getNonceTrackerPendingTransactions, getNonceTrackerPendingTransactions_fn, _getGasFeeFlows, getGasFeeFlows_fn, _getLayer1GasFeeFlows, getLayer1GasFeeFlows_fn, _updateTransactionInternal, updateTransactionInternal_fn, _updateSimulationData, updateSimulationData_fn, _onGasFeePollerTransactionUpdate, onGasFeePollerTransactionUpdate_fn, _getNetworkClientId, getNetworkClientId_fn, _getGlobalNetworkClientId, getGlobalNetworkClientId_fn, _getGlobalChainId, getGlobalChainId_fn, _isCustomNetwork, isCustomNetwork_fn, _getSelectedAccount, getSelectedAccount_fn, _updateSubmitHistory, updateSubmitHistory_fn; - var TransactionController = class extends BaseController { - /** - * Constructs a TransactionController. -@@ -223,8 +233,6 @@ var TransactionController = class extends BaseController { - __privateAdd(this, _getGasFeeFlows); - __privateAdd(this, _getLayer1GasFeeFlows); - __privateAdd(this, _updateTransactionInternal); -- __privateAdd(this, _checkIfTransactionParamsUpdated); -- __privateAdd(this, _onTransactionParamsUpdated); - __privateAdd(this, _updateSimulationData); - __privateAdd(this, _onGasFeePollerTransactionUpdate); - __privateAdd(this, _getNetworkClientId); -@@ -232,6 +240,7 @@ var TransactionController = class extends BaseController { - __privateAdd(this, _getGlobalChainId); - __privateAdd(this, _isCustomNetwork); - __privateAdd(this, _getSelectedAccount); -+ __privateAdd(this, _updateSubmitHistory); - __privateAdd(this, _internalEvents, new EventEmitter()); - this.approvingTransactionIds = /* @__PURE__ */ new Set(); - this.mutex = new Mutex(); -@@ -465,7 +474,7 @@ var TransactionController = class extends BaseController { - networkClientId - ); - validateTxParams(txParams, isEIP1559Compatible); -- if (origin) { -+ if (origin && this.getPermittedAccounts) { - await validateTransactionOrigin( - await this.getPermittedAccounts(origin), - __privateMethod(this, _getSelectedAccount, getSelectedAccount_fn).call(this).address, -@@ -669,7 +678,9 @@ var TransactionController = class extends BaseController { - const hash = await this.publishTransactionForRetry( - ethQuery, - rawTx, -- transactionMeta -+ newTxParams, -+ transactionMeta, -+ "cancel" - ); - const cancelTransactionMeta = { - actionId, -@@ -787,7 +798,9 @@ var TransactionController = class extends BaseController { - const hash = await this.publishTransactionForRetry( - ethQuery, - rawTx, -- transactionMeta -+ txParams, -+ transactionMeta, -+ ORIGIN_METAMASK - ); - const baseTransactionMeta = { - ...transactionMetaWithRsv, -@@ -1717,7 +1730,13 @@ var TransactionController = class extends BaseController { - rawTx - ); - if (hash === void 0) { -- hash = await this.publishTransaction(ethQuery, rawTx); -+ hash = await this.publishTransaction( -+ ethQuery, -+ rawTx, -+ transactionMeta.txParams, -+ transactionMeta.chainId, -+ transactionMeta.origin -+ ); - } - projectLogger("Publish successful", hash); - transactionMeta = __privateMethod(this, _updateTransactionInternal, updateTransactionInternal_fn).call(this, { -@@ -1749,8 +1768,12 @@ var TransactionController = class extends BaseController { - cleanupTasks.forEach((task) => task()); - } - } -- async publishTransaction(ethQuery, rawTransaction) { -- return await query(ethQuery, "sendRawTransaction", [rawTransaction]); -+ async publishTransaction(ethQuery, rawTransaction, transaction, chainId, origin) { -+ const transactionHash = await query(ethQuery, "sendRawTransaction", [ -+ rawTransaction -+ ]); -+ __privateMethod(this, _updateSubmitHistory, updateSubmitHistory_fn).call(this, rawTransaction, transactionHash, transaction, chainId, origin); -+ return transactionHash; - } - /** - * Cancels a transaction based on its ID by setting its status to "rejected" -@@ -2204,10 +2227,15 @@ var TransactionController = class extends BaseController { - projectLogger("Error while updating post transaction balance", error); - } - } -- async publishTransactionForRetry(ethQuery, rawTx, transactionMeta) { -+ async publishTransactionForRetry(ethQuery, rawTx, params, transactionMeta, origin) { - try { -- const hash = await this.publishTransaction(ethQuery, rawTx); -- return hash; -+ return await this.publishTransaction( -+ ethQuery, -+ rawTx, -+ params, -+ transactionMeta.chainId, -+ origin -+ ); - } catch (error) { - if (this.isTransactionAlreadyConfirmedError(error)) { - await this.pendingTransactionTracker.forceCheckTransaction( -@@ -2248,7 +2276,7 @@ createNonceTracker_fn = function({ - // TODO: Fix types - // eslint-disable-next-line @typescript-eslint/no-explicit-any - provider, -- // @ts-expect-error TODO: Fix types -+ // @ts-expect-error - TODO: Fix types - blockTracker, - getPendingTransactions: __privateMethod(this, _getNonceTrackerPendingTransactions, getNonceTrackerPendingTransactions_fn).bind( - this, -@@ -2270,6 +2298,7 @@ createIncomingTransactionHelper_fn = function({ - blockTracker, - getCurrentAccount: () => __privateMethod(this, _getSelectedAccount, getSelectedAccount_fn).call(this), - getLastFetchedBlockNumbers: () => this.state.lastFetchedBlockNumbers, -+ getLocalTransactions: () => this.state.transactions, - getChainId: chainId ? () => chainId : this.getChainId.bind(this), - isEnabled: __privateGet(this, _incomingTransactionOptions).isEnabled, - queryEntireHistory: __privateGet(this, _incomingTransactionOptions).queryEntireHistory, -@@ -2300,7 +2329,7 @@ createPendingTransactionTracker_fn = function({ - getGlobalLock: () => __privateGet(this, _multichainTrackingHelper).acquireNonceLockForChainIdKey({ - chainId: getChainId() - }), -- publishTransaction: this.publishTransaction.bind(this), -+ publishTransaction: (_ethQuery, rawTx) => query(_ethQuery, "sendRawTransaction", [rawTx]), - hooks: { - beforeCheckPendingTransaction: this.beforeCheckPendingTransaction.bind(this), - beforePublish: this.beforePublish.bind(this) -@@ -2390,20 +2419,27 @@ _updateTransactionInternal = new WeakSet(); - updateTransactionInternal_fn = function({ - transactionId, - note, -- skipHistory -+ skipHistory, -+ skipResimulateCheck - }, callback) { -- let updatedTransactionParams = []; -+ let resimulateResponse; - this.update((state) => { - const index = state.transactions.findIndex( - ({ id }) => id === transactionId - ); - let transactionMeta2 = state.transactions[index]; -+ const originalTransactionMeta = cloneDeep(transactionMeta2); - transactionMeta2 = callback(transactionMeta2) ?? transactionMeta2; - transactionMeta2.txParams = normalizeTransactionParams( - transactionMeta2.txParams - ); - validateTxParams(transactionMeta2.txParams); -- updatedTransactionParams = __privateMethod(this, _checkIfTransactionParamsUpdated, checkIfTransactionParamsUpdated_fn).call(this, transactionMeta2); -+ if (!skipResimulateCheck && __privateGet(this, _isSimulationEnabled).call(this)) { -+ resimulateResponse = shouldResimulate( -+ originalTransactionMeta, -+ transactionMeta2 -+ ); -+ } - const shouldSkipHistory = this.isHistoryDisabled || skipHistory; - if (!shouldSkipHistory) { - transactionMeta2 = updateTransactionHistory( -@@ -2416,43 +2452,26 @@ updateTransactionInternal_fn = function({ - const transactionMeta = this.getTransaction( - transactionId - ); -- if (updatedTransactionParams.length > 0) { -- __privateMethod(this, _onTransactionParamsUpdated, onTransactionParamsUpdated_fn).call(this, transactionMeta, updatedTransactionParams); -+ if (resimulateResponse?.resimulate) { -+ __privateMethod(this, _updateSimulationData, updateSimulationData_fn).call(this, transactionMeta, { -+ blockTime: resimulateResponse.blockTime -+ }).catch((error) => { -+ projectLogger("Error during re-simulation", error); -+ throw error; -+ }); - } - return transactionMeta; - }; --_checkIfTransactionParamsUpdated = new WeakSet(); --checkIfTransactionParamsUpdated_fn = function(newTransactionMeta) { -- const { id: transactionId, txParams: newParams } = newTransactionMeta; -- const originalParams = this.getTransaction(transactionId)?.txParams; -- if (!originalParams || isEqual(originalParams, newParams)) { -- return []; -- } -- const params = Object.keys(newParams); -- const updatedProperties = params.filter( -- (param) => newParams[param] !== originalParams[param] -- ); -- projectLogger( -- "Transaction parameters have been updated", -- transactionId, -- updatedProperties, -- originalParams, -- newParams -- ); -- return updatedProperties; --}; --_onTransactionParamsUpdated = new WeakSet(); --onTransactionParamsUpdated_fn = function(transactionMeta, updatedParams) { -- if (["to", "value", "data"].some( -- (param) => updatedParams.includes(param) -- )) { -- projectLogger("Updating simulation data due to transaction parameter update"); -- __privateMethod(this, _updateSimulationData, updateSimulationData_fn).call(this, transactionMeta); -- } --}; - _updateSimulationData = new WeakSet(); --updateSimulationData_fn = async function(transactionMeta) { -- const { id: transactionId, chainId, txParams } = transactionMeta; -+updateSimulationData_fn = async function(transactionMeta, { -+ blockTime -+} = {}) { -+ const { -+ id: transactionId, -+ chainId, -+ txParams, -+ simulationData: prevSimulationData -+ } = transactionMeta; - const { from, to, value, data } = txParams; - let simulationData = { - error: { -@@ -2465,13 +2484,24 @@ updateSimulationData_fn = async function(transactionMeta) { - __privateMethod(this, _updateTransactionInternal, updateTransactionInternal_fn).call(this, { transactionId, skipHistory: true }, (txMeta) => { - txMeta.simulationData = void 0; - }); -- simulationData = await getSimulationData({ -- chainId, -- from, -- to, -- value, -- data -- }); -+ simulationData = await getSimulationData( -+ { -+ chainId, -+ from, -+ to, -+ value, -+ data -+ }, -+ { -+ blockTime -+ } -+ ); -+ if (blockTime && prevSimulationData && hasSimulationDataChanged(prevSimulationData, simulationData)) { -+ simulationData = { -+ ...simulationData, -+ isUpdatedAfterSecurityCheck: true -+ }; -+ } - } - const finalTransactionMeta = this.getTransaction(transactionId); - if (!finalTransactionMeta) { -@@ -2484,7 +2514,8 @@ updateSimulationData_fn = async function(transactionMeta) { - } - __privateMethod(this, _updateTransactionInternal, updateTransactionInternal_fn).call(this, { - transactionId, -- note: "TransactionController#updateSimulationData - Update simulation data" -+ note: "TransactionController#updateSimulationData - Update simulation data", -+ skipResimulateCheck: Boolean(blockTime) - }, (txMeta) => { - txMeta.simulationData = simulationData; - }); -@@ -2555,6 +2586,32 @@ _getSelectedAccount = new WeakSet(); - getSelectedAccount_fn = function() { - return this.messagingSystem.call("AccountsController:getSelectedAccount"); - }; -+_updateSubmitHistory = new WeakSet(); -+updateSubmitHistory_fn = function(rawTransaction, hash, transaction, chainId, origin) { -+ const { networkConfigurations, selectedNetworkClientId } = this.getNetworkState(); -+ const networkConfiguration = networkConfigurations[selectedNetworkClientId]; -+ const networkUrl = networkConfiguration?.rpcUrl; -+ const networkType = networkConfiguration?.nickname || selectedNetworkClientId; -+ const submitHistoryEntry = { -+ chainId, -+ hash, -+ networkType, -+ networkUrl, -+ origin, -+ time: Date.now(), -+ transaction, -+ rawTransaction -+ }; -+ projectLogger("Updating submit history", submitHistoryEntry); -+ this.update((state) => { -+ const { submitHistory: currentSubmitHistory } = state; -+ const newSubmitHistory = [submitHistoryEntry, ...currentSubmitHistory]; -+ if (newSubmitHistory.length > SUBMIT_HISTORY_LIMIT) { -+ newSubmitHistory.pop(); -+ } -+ state.submitHistory = newSubmitHistory; -+ }); -+}; - - export { - HARDFORK, -@@ -2563,4 +2620,4 @@ export { - ApprovalState, - TransactionController - }; --//# sourceMappingURL=chunk-UKV5HIMT.mjs.map -\ No newline at end of file -+//# sourceMappingURL=chunk-PBSMFYZI.mjs.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-PRUNMTRD.js.map b/node_modules/@metamask/transaction-controller/dist/chunk-PRUNMTRD.js.map -deleted file mode 100644 -index d8a63d4..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-PRUNMTRD.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/utils/nonce.ts"],"names":[],"mappings":";;;;;;AAAA,SAAS,aAAa;AAStB,IAAM,MAAM,mBAAmB,eAAe,OAAO;AASrD,eAAsB,aACpB,QACA,cAC6C;AAC7C,QAAM;AAAA,IACJ;AAAA,IACA,UAAU,EAAE,MAAM,OAAO,cAAc;AAAA,EACzC,IAAI;AAEJ,QAAM,cAAc,mBAAmB,MAAM,gBAAgB,IAAI;AAEjE,MAAI,aAAa;AACf,QAAI,sBAAsB,WAAW;AACrC,WAAO,CAAC,aAAa,MAAS;AAAA,EAChC;AAEA,MAAI,eAAe;AACjB,QAAI,wBAAwB,aAAa;AACzC,WAAO,CAAC,eAAe,MAAS;AAAA,EAClC;AAEA,QAAM,YAAY,MAAM,aAAa,IAAI;AACzC,QAAM,QAAQ,MAAM,UAAU,SAAS;AACvC,QAAM,cAAc,UAAU,YAAY,KAAK,SAAS;AAExD,MAAI,kCAAkC,OAAO,UAAU,YAAY;AAEnE,SAAO,CAAC,OAAO,WAAW;AAC5B;AAWO,SAAS,wCACd,gBACA,aACA,mBACA,cAC2B;AAC3B,SAAO,aACJ;AAAA,IACC,CAAC,EAAE,SAAS,YAAY,iBAAiB,QAAQ,UAAU,EAAE,KAAK,EAAE,MAClE,CAAC,cACD,CAAC,mBACD,YAAY,kBACZ,WAAW,qBACX,KAAK,YAAY,MAAM,YAAY,YAAY;AAAA,EACnD,EACC,IAAI,CAAC,EAAE,QAAQ,UAAU,EAAE,MAAM,KAAK,OAAO,MAAM,EAAE,MAAM;AAK1D,WAAO;AAAA,MACL;AAAA,MACA,SAAS,CAAC,CAAC,CAAC;AAAA,MACZ,UAAU;AAAA,QACR,MAAM,QAAQ;AAAA,QACd,KAAK,OAAO;AAAA,QACZ,OAAO,SAAS;AAAA,QAChB,OAAO,SAAS;AAAA,MAClB;AAAA,IACF;AAAA,EACF,CAAC;AACL","sourcesContent":["import { toHex } from '@metamask/controller-utils';\nimport type {\n NonceLock,\n Transaction as NonceTrackerTransaction,\n} from '@metamask/nonce-tracker';\n\nimport { createModuleLogger, projectLogger } from '../logger';\nimport type { TransactionMeta, TransactionStatus } from '../types';\n\nconst log = createModuleLogger(projectLogger, 'nonce');\n\n/**\n * Determine the next nonce to be used for a transaction.\n *\n * @param txMeta - The transaction metadata.\n * @param getNonceLock - An anonymous function that acquires the nonce lock for an address\n * @returns The next hexadecimal nonce to be used for the given transaction, and optionally a function to release the nonce lock.\n */\nexport async function getNextNonce(\n txMeta: TransactionMeta,\n getNonceLock: (address: string) => Promise,\n): Promise<[string, (() => void) | undefined]> {\n const {\n customNonceValue,\n txParams: { from, nonce: existingNonce },\n } = txMeta;\n\n const customNonce = customNonceValue ? toHex(customNonceValue) : undefined;\n\n if (customNonce) {\n log('Using custom nonce', customNonce);\n return [customNonce, undefined];\n }\n\n if (existingNonce) {\n log('Using existing nonce', existingNonce);\n return [existingNonce, undefined];\n }\n\n const nonceLock = await getNonceLock(from);\n const nonce = toHex(nonceLock.nextNonce);\n const releaseLock = nonceLock.releaseLock.bind(nonceLock);\n\n log('Using nonce from nonce tracker', nonce, nonceLock.nonceDetails);\n\n return [nonce, releaseLock];\n}\n\n/**\n * Filter and format transactions for the nonce tracker.\n *\n * @param currentChainId - Chain ID of the current network.\n * @param fromAddress - Address of the account from which the transactions to filter from are sent.\n * @param transactionStatus - Status of the transactions for which to filter.\n * @param transactions - Array of transactionMeta objects that have been prefiltered.\n * @returns Array of transactions formatted for the nonce tracker.\n */\nexport function getAndFormatTransactionsForNonceTracker(\n currentChainId: string,\n fromAddress: string,\n transactionStatus: TransactionStatus,\n transactions: TransactionMeta[],\n): NonceTrackerTransaction[] {\n return transactions\n .filter(\n ({ chainId, isTransfer, isUserOperation, status, txParams: { from } }) =>\n !isTransfer &&\n !isUserOperation &&\n chainId === currentChainId &&\n status === transactionStatus &&\n from.toLowerCase() === fromAddress.toLowerCase(),\n )\n .map(({ status, txParams: { from, gas, value, nonce } }) => {\n // the only value we care about is the nonce\n // but we need to return the other values to satisfy the type\n // TODO: refactor nonceTracker to not require this\n /* istanbul ignore next */\n return {\n status,\n history: [{}],\n txParams: {\n from: from ?? '',\n gas: gas ?? '',\n value: value ?? '',\n nonce: nonce ?? '',\n },\n };\n });\n}\n"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-Q56I5ONX.mjs.map b/node_modules/@metamask/transaction-controller/dist/chunk-Q56I5ONX.mjs.map -deleted file mode 100644 -index 44b7d9f..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-Q56I5ONX.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/utils/utils.ts"],"sourcesContent":["import { convertHexToDecimal } from '@metamask/controller-utils';\nimport {\n add0x,\n getKnownPropertyNames,\n isStrictHexString,\n} from '@metamask/utils';\nimport type { Json } from '@metamask/utils';\n\nimport type {\n GasPriceValue,\n FeeMarketEIP1559Values,\n} from '../TransactionController';\nimport { TransactionStatus } from '../types';\nimport type {\n TransactionParams,\n TransactionMeta,\n TransactionError,\n} from '../types';\n\nexport const ESTIMATE_GAS_ERROR = 'eth_estimateGas rpc method error';\n\n// TODO: Replace `any` with type\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst NORMALIZERS: { [param in keyof TransactionParams]: any } = {\n data: (data: string) => add0x(padHexToEvenLength(data)),\n from: (from: string) => add0x(from).toLowerCase(),\n gas: (gas: string) => add0x(gas),\n gasLimit: (gas: string) => add0x(gas),\n gasPrice: (gasPrice: string) => add0x(gasPrice),\n nonce: (nonce: string) => add0x(nonce),\n to: (to: string) => add0x(to).toLowerCase(),\n value: (value: string) => add0x(value),\n maxFeePerGas: (maxFeePerGas: string) => add0x(maxFeePerGas),\n maxPriorityFeePerGas: (maxPriorityFeePerGas: string) =>\n add0x(maxPriorityFeePerGas),\n estimatedBaseFee: (maxPriorityFeePerGas: string) =>\n add0x(maxPriorityFeePerGas),\n type: (type: string) => add0x(type),\n};\n\n/**\n * Normalizes properties on transaction params.\n *\n * @param txParams - The transaction params to normalize.\n * @returns Normalized transaction params.\n */\nexport function normalizeTransactionParams(txParams: TransactionParams) {\n const normalizedTxParams: TransactionParams = { from: '' };\n\n for (const key of getKnownPropertyNames(NORMALIZERS)) {\n if (txParams[key]) {\n normalizedTxParams[key] = NORMALIZERS[key](txParams[key]);\n }\n }\n\n if (!normalizedTxParams.value) {\n normalizedTxParams.value = '0x0';\n }\n\n return normalizedTxParams;\n}\n\n/**\n * Checks if a transaction is EIP-1559 by checking for the existence of\n * maxFeePerGas and maxPriorityFeePerGas within its parameters.\n *\n * @param txParams - Transaction params object to add.\n * @returns Boolean that is true if the transaction is EIP-1559 (has maxFeePerGas and maxPriorityFeePerGas), otherwise returns false.\n */\nexport function isEIP1559Transaction(txParams: TransactionParams): boolean {\n const hasOwnProp = (obj: TransactionParams, key: string) =>\n Object.prototype.hasOwnProperty.call(obj, key);\n return (\n hasOwnProp(txParams, 'maxFeePerGas') &&\n hasOwnProp(txParams, 'maxPriorityFeePerGas')\n );\n}\n\nexport const validateGasValues = (\n gasValues: GasPriceValue | FeeMarketEIP1559Values,\n) => {\n Object.keys(gasValues).forEach((key) => {\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const value = (gasValues as any)[key];\n if (typeof value !== 'string' || !isStrictHexString(value)) {\n throw new TypeError(\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `expected hex string for ${key} but received: ${value}`,\n );\n }\n });\n};\n\nexport const isFeeMarketEIP1559Values = (\n gasValues?: GasPriceValue | FeeMarketEIP1559Values,\n): gasValues is FeeMarketEIP1559Values =>\n (gasValues as FeeMarketEIP1559Values)?.maxFeePerGas !== undefined ||\n (gasValues as FeeMarketEIP1559Values)?.maxPriorityFeePerGas !== undefined;\n\nexport const isGasPriceValue = (\n gasValues?: GasPriceValue | FeeMarketEIP1559Values,\n): gasValues is GasPriceValue =>\n (gasValues as GasPriceValue)?.gasPrice !== undefined;\n\nexport const getIncreasedPriceHex = (value: number, rate: number): string =>\n add0x(`${parseInt(`${value * rate}`, 10).toString(16)}`);\n\nexport const getIncreasedPriceFromExisting = (\n value: string | undefined,\n rate: number,\n): string => {\n return getIncreasedPriceHex(convertHexToDecimal(value), rate);\n};\n\n/**\n * Validates that the proposed value is greater than or equal to the minimum value.\n *\n * @param proposed - The proposed value.\n * @param min - The minimum value.\n * @returns The proposed value.\n * @throws Will throw if the proposed value is too low.\n */\nexport function validateMinimumIncrease(proposed: string, min: string) {\n const proposedDecimal = convertHexToDecimal(proposed);\n const minDecimal = convertHexToDecimal(min);\n if (proposedDecimal >= minDecimal) {\n return proposed;\n }\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n const errorMsg = `The proposed value: ${proposedDecimal} should meet or exceed the minimum value: ${minDecimal}`;\n throw new Error(errorMsg);\n}\n\n/**\n * Validates that a transaction is unapproved.\n * Throws if the transaction is not unapproved.\n *\n * @param transactionMeta - The transaction metadata to check.\n * @param fnName - The name of the function calling this helper.\n */\nexport function validateIfTransactionUnapproved(\n transactionMeta: TransactionMeta | undefined,\n fnName: string,\n) {\n if (transactionMeta?.status !== TransactionStatus.unapproved) {\n throw new Error(\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `TransactionsController: Can only call ${fnName} on an unapproved transaction.\\n Current tx status: ${transactionMeta?.status}`,\n );\n }\n}\n\n/**\n * Normalizes properties on transaction params.\n *\n * @param error - The error to be normalize.\n * @returns Normalized transaction error.\n */\nexport function normalizeTxError(\n error: Error & { code?: string; value?: unknown },\n): TransactionError {\n return {\n name: error.name,\n message: error.message,\n stack: error.stack,\n code: error.code,\n rpc: isJsonCompatible(error.value) ? error.value : undefined,\n };\n}\n\n/**\n * Normalize an object containing gas fee values.\n *\n * @param gasFeeValues - An object containing gas fee values.\n * @returns An object containing normalized gas fee values.\n */\nexport function normalizeGasFeeValues(\n gasFeeValues: GasPriceValue | FeeMarketEIP1559Values,\n): GasPriceValue | FeeMarketEIP1559Values {\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const normalize = (value: any) =>\n typeof value === 'string' ? add0x(value) : value;\n\n if ('gasPrice' in gasFeeValues) {\n return {\n gasPrice: normalize(gasFeeValues.gasPrice),\n };\n }\n\n return {\n maxFeePerGas: normalize(gasFeeValues.maxFeePerGas),\n maxPriorityFeePerGas: normalize(gasFeeValues.maxPriorityFeePerGas),\n };\n}\n\n/**\n * Determines whether the given value can be encoded as JSON.\n *\n * @param value - The value.\n * @returns True if the value is JSON-encodable, false if not.\n */\nfunction isJsonCompatible(value: unknown): value is Json {\n try {\n JSON.parse(JSON.stringify(value));\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Ensure a hex string is of even length by adding a leading 0 if necessary.\n * Any existing `0x` prefix is preserved but is not added if missing.\n *\n * @param hex - The hex string to ensure is even.\n * @returns The hex string with an even length.\n */\nexport function padHexToEvenLength(hex: string) {\n const prefix = hex.toLowerCase().startsWith('0x') ? hex.slice(0, 2) : '';\n const data = prefix ? hex.slice(2) : hex;\n const evenData = data.length % 2 === 0 ? data : `0${data}`;\n\n return prefix + evenData;\n}\n"],"mappings":";AAAA,SAAS,2BAA2B;AACpC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAcA,IAAM,qBAAqB;AAIlC,IAAM,cAA2D;AAAA,EAC/D,MAAM,CAAC,SAAiB,MAAM,mBAAmB,IAAI,CAAC;AAAA,EACtD,MAAM,CAAC,SAAiB,MAAM,IAAI,EAAE,YAAY;AAAA,EAChD,KAAK,CAAC,QAAgB,MAAM,GAAG;AAAA,EAC/B,UAAU,CAAC,QAAgB,MAAM,GAAG;AAAA,EACpC,UAAU,CAAC,aAAqB,MAAM,QAAQ;AAAA,EAC9C,OAAO,CAAC,UAAkB,MAAM,KAAK;AAAA,EACrC,IAAI,CAAC,OAAe,MAAM,EAAE,EAAE,YAAY;AAAA,EAC1C,OAAO,CAAC,UAAkB,MAAM,KAAK;AAAA,EACrC,cAAc,CAAC,iBAAyB,MAAM,YAAY;AAAA,EAC1D,sBAAsB,CAAC,yBACrB,MAAM,oBAAoB;AAAA,EAC5B,kBAAkB,CAAC,yBACjB,MAAM,oBAAoB;AAAA,EAC5B,MAAM,CAAC,SAAiB,MAAM,IAAI;AACpC;AAQO,SAAS,2BAA2B,UAA6B;AACtE,QAAM,qBAAwC,EAAE,MAAM,GAAG;AAEzD,aAAW,OAAO,sBAAsB,WAAW,GAAG;AACpD,QAAI,SAAS,GAAG,GAAG;AACjB,yBAAmB,GAAG,IAAI,YAAY,GAAG,EAAE,SAAS,GAAG,CAAC;AAAA,IAC1D;AAAA,EACF;AAEA,MAAI,CAAC,mBAAmB,OAAO;AAC7B,uBAAmB,QAAQ;AAAA,EAC7B;AAEA,SAAO;AACT;AASO,SAAS,qBAAqB,UAAsC;AACzE,QAAM,aAAa,CAAC,KAAwB,QAC1C,OAAO,UAAU,eAAe,KAAK,KAAK,GAAG;AAC/C,SACE,WAAW,UAAU,cAAc,KACnC,WAAW,UAAU,sBAAsB;AAE/C;AAEO,IAAM,oBAAoB,CAC/B,cACG;AACH,SAAO,KAAK,SAAS,EAAE,QAAQ,CAAC,QAAQ;AAGtC,UAAM,QAAS,UAAkB,GAAG;AACpC,QAAI,OAAO,UAAU,YAAY,CAAC,kBAAkB,KAAK,GAAG;AAC1D,YAAM,IAAI;AAAA;AAAA;AAAA,QAGR,2BAA2B,GAAG,kBAAkB,KAAK;AAAA,MACvD;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEO,IAAM,2BAA2B,CACtC,cAEC,WAAsC,iBAAiB,UACvD,WAAsC,yBAAyB;AAE3D,IAAM,kBAAkB,CAC7B,cAEC,WAA6B,aAAa;AAEtC,IAAM,uBAAuB,CAAC,OAAe,SAClD,MAAM,GAAG,SAAS,GAAG,QAAQ,IAAI,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE;AAElD,IAAM,gCAAgC,CAC3C,OACA,SACW;AACX,SAAO,qBAAqB,oBAAoB,KAAK,GAAG,IAAI;AAC9D;AAUO,SAAS,wBAAwB,UAAkB,KAAa;AACrE,QAAM,kBAAkB,oBAAoB,QAAQ;AACpD,QAAM,aAAa,oBAAoB,GAAG;AAC1C,MAAI,mBAAmB,YAAY;AACjC,WAAO;AAAA,EACT;AAGA,QAAM,WAAW,uBAAuB,eAAe,6CAA6C,UAAU;AAC9G,QAAM,IAAI,MAAM,QAAQ;AAC1B;AASO,SAAS,gCACd,iBACA,QACA;AACA,MAAI,iBAAiB,0CAAyC;AAC5D,UAAM,IAAI;AAAA;AAAA;AAAA,MAGR,yCAAyC,MAAM;AAAA,2BAA4D,iBAAiB,MAAM;AAAA,IACpI;AAAA,EACF;AACF;AAQO,SAAS,iBACd,OACkB;AAClB,SAAO;AAAA,IACL,MAAM,MAAM;AAAA,IACZ,SAAS,MAAM;AAAA,IACf,OAAO,MAAM;AAAA,IACb,MAAM,MAAM;AAAA,IACZ,KAAK,iBAAiB,MAAM,KAAK,IAAI,MAAM,QAAQ;AAAA,EACrD;AACF;AAQO,SAAS,sBACd,cACwC;AAGxC,QAAM,YAAY,CAAC,UACjB,OAAO,UAAU,WAAW,MAAM,KAAK,IAAI;AAE7C,MAAI,cAAc,cAAc;AAC9B,WAAO;AAAA,MACL,UAAU,UAAU,aAAa,QAAQ;AAAA,IAC3C;AAAA,EACF;AAEA,SAAO;AAAA,IACL,cAAc,UAAU,aAAa,YAAY;AAAA,IACjD,sBAAsB,UAAU,aAAa,oBAAoB;AAAA,EACnE;AACF;AAQA,SAAS,iBAAiB,OAA+B;AACvD,MAAI;AACF,SAAK,MAAM,KAAK,UAAU,KAAK,CAAC;AAChC,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AASO,SAAS,mBAAmB,KAAa;AAC9C,QAAM,SAAS,IAAI,YAAY,EAAE,WAAW,IAAI,IAAI,IAAI,MAAM,GAAG,CAAC,IAAI;AACtE,QAAM,OAAO,SAAS,IAAI,MAAM,CAAC,IAAI;AACrC,QAAM,WAAW,KAAK,SAAS,MAAM,IAAI,OAAO,IAAI,IAAI;AAExD,SAAO,SAAS;AAClB;","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-QBQLNTTJ.js b/node_modules/@metamask/transaction-controller/dist/chunk-QBQLNTTJ.js -new file mode 100644 -index 0000000..d2539dc ---- /dev/null -+++ b/node_modules/@metamask/transaction-controller/dist/chunk-QBQLNTTJ.js -@@ -0,0 +1,160 @@ -+"use strict";Object.defineProperty(exports, "__esModule", {value: true}); -+ -+var _chunkEVJRYRCRjs = require('./chunk-EVJRYRCR.js'); -+ -+ -+var _chunkS6VGOPUYjs = require('./chunk-S6VGOPUY.js'); -+ -+// src/utils/resimulate.ts -+var _utils = require('@metamask/utils'); -+var _bnjs = require('bn.js'); -+var _lodash = require('lodash'); -+var log = _utils.createModuleLogger.call(void 0, _chunkS6VGOPUYjs.projectLogger, "resimulate"); -+var RESIMULATE_PARAMS = ["to", "value", "data"]; -+var BLOCKAID_RESULT_TYPE_MALICIOUS = "Malicious"; -+var VALUE_COMPARISON_PERCENT_THRESHOLD = 5; -+var BLOCK_TIME_ADDITIONAL_SECONDS = 60; -+function shouldResimulate(originalTransactionMeta, newTransactionMeta) { -+ const { id: transactionId } = newTransactionMeta; -+ const parametersUpdated = isParametersUpdated( -+ originalTransactionMeta, -+ newTransactionMeta -+ ); -+ const securityAlert = hasNewSecurityAlert( -+ originalTransactionMeta, -+ newTransactionMeta -+ ); -+ const valueAndNativeBalanceMismatch = hasValueAndNativeBalanceMismatch( -+ originalTransactionMeta, -+ newTransactionMeta -+ ); -+ const resimulate = parametersUpdated || securityAlert || valueAndNativeBalanceMismatch; -+ let blockTime; -+ if (securityAlert || valueAndNativeBalanceMismatch) { -+ const nowSeconds = Math.floor(Date.now() / 1e3); -+ blockTime = nowSeconds + BLOCK_TIME_ADDITIONAL_SECONDS; -+ } -+ if (resimulate) { -+ log("Transaction should be resimulated", { -+ transactionId, -+ blockTime, -+ parametersUpdated, -+ securityAlert, -+ valueAndNativeBalanceMismatch -+ }); -+ } -+ return { -+ blockTime, -+ resimulate -+ }; -+} -+function hasSimulationDataChanged(originalSimulationData, newSimulationData) { -+ if (_lodash.isEqual.call(void 0, originalSimulationData, newSimulationData)) { -+ return false; -+ } -+ if (isBalanceChangeUpdated( -+ originalSimulationData?.nativeBalanceChange, -+ newSimulationData?.nativeBalanceChange -+ )) { -+ log("Simulation data native balance changed"); -+ return true; -+ } -+ if (originalSimulationData.tokenBalanceChanges.length !== newSimulationData.tokenBalanceChanges.length) { -+ return true; -+ } -+ for (const originalTokenBalanceChange of originalSimulationData.tokenBalanceChanges) { -+ const newTokenBalanceChange = newSimulationData.tokenBalanceChanges.find( -+ ({ address, id }) => address === originalTokenBalanceChange.address && id === originalTokenBalanceChange.id -+ ); -+ if (!newTokenBalanceChange) { -+ log("Missing new token balance", { -+ address: originalTokenBalanceChange.address, -+ id: originalTokenBalanceChange.id -+ }); -+ return true; -+ } -+ if (isBalanceChangeUpdated(originalTokenBalanceChange, newTokenBalanceChange)) { -+ log("Simulation data token balance changed", { -+ originalTokenBalanceChange, -+ newTokenBalanceChange -+ }); -+ return true; -+ } -+ } -+ return false; -+} -+function isParametersUpdated(originalTransactionMeta, newTransactionMeta) { -+ const { id: transactionId, txParams: newParams } = newTransactionMeta; -+ const { txParams: originalParams } = originalTransactionMeta; -+ if (!originalParams || _lodash.isEqual.call(void 0, originalParams, newParams)) { -+ return false; -+ } -+ const params = Object.keys(newParams); -+ const updatedProperties = params.filter( -+ (param) => newParams[param] !== originalParams[param] -+ ); -+ log("Transaction parameters updated", { -+ transactionId, -+ updatedProperties, -+ originalParams, -+ newParams -+ }); -+ return RESIMULATE_PARAMS.some((param) => updatedProperties.includes(param)); -+} -+function hasNewSecurityAlert(originalTransactionMeta, newTransactionMeta) { -+ const { securityAlertResponse: originalSecurityAlertResponse } = originalTransactionMeta; -+ const { id: transactionId, securityAlertResponse: newSecurityAlertResponse } = newTransactionMeta; -+ if (_lodash.isEqual.call(void 0, originalSecurityAlertResponse, newSecurityAlertResponse)) { -+ return false; -+ } -+ log("Security alert updated", { -+ transactionId, -+ originalSecurityAlertResponse, -+ newSecurityAlertResponse -+ }); -+ return newSecurityAlertResponse?.result_type === BLOCKAID_RESULT_TYPE_MALICIOUS; -+} -+function hasValueAndNativeBalanceMismatch(originalTransactionMeta, newTransactionMeta) { -+ const { simulationData: originalSimulationData } = originalTransactionMeta; -+ const { simulationData: newSimulationData, txParams: newTxParams } = newTransactionMeta; -+ if (!newSimulationData || _lodash.isEqual.call(void 0, originalSimulationData, newSimulationData)) { -+ return false; -+ } -+ const newValue = newTxParams?.value ?? "0x0"; -+ const newNativeBalanceDifference = newSimulationData?.nativeBalanceChange?.difference ?? "0x0"; -+ return !percentageChangeWithinThreshold( -+ newValue, -+ newNativeBalanceDifference, -+ false, -+ newSimulationData?.nativeBalanceChange?.isDecrease === false -+ ); -+} -+function isBalanceChangeUpdated(originalBalanceChange, newBalanceChange) { -+ return !percentageChangeWithinThreshold( -+ originalBalanceChange?.difference ?? "0x0", -+ newBalanceChange?.difference ?? "0x0", -+ originalBalanceChange?.isDecrease === false, -+ newBalanceChange?.isDecrease === false -+ ); -+} -+function percentageChangeWithinThreshold(originalValue, newValue, originalNegative, newNegative) { -+ let originalValueBN = new (0, _bnjs.BN)(_utils.remove0x.call(void 0, originalValue), "hex"); -+ let newValueBN = new (0, _bnjs.BN)(_utils.remove0x.call(void 0, newValue), "hex"); -+ if (originalNegative) { -+ originalValueBN = originalValueBN.neg(); -+ } -+ if (newNegative) { -+ newValueBN = newValueBN.neg(); -+ } -+ return _chunkEVJRYRCRjs.getPercentageChange.call(void 0, originalValueBN, newValueBN) <= VALUE_COMPARISON_PERCENT_THRESHOLD; -+} -+ -+ -+ -+ -+ -+ -+ -+ -+exports.RESIMULATE_PARAMS = RESIMULATE_PARAMS; exports.BLOCKAID_RESULT_TYPE_MALICIOUS = BLOCKAID_RESULT_TYPE_MALICIOUS; exports.VALUE_COMPARISON_PERCENT_THRESHOLD = VALUE_COMPARISON_PERCENT_THRESHOLD; exports.BLOCK_TIME_ADDITIONAL_SECONDS = BLOCK_TIME_ADDITIONAL_SECONDS; exports.shouldResimulate = shouldResimulate; exports.hasSimulationDataChanged = hasSimulationDataChanged; -+//# sourceMappingURL=chunk-QBQLNTTJ.js.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-QH2H4W3N.js.map b/node_modules/@metamask/transaction-controller/dist/chunk-QH2H4W3N.js.map -deleted file mode 100644 -index 8f45def..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-QH2H4W3N.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/utils/swaps.ts"],"names":[],"mappings":"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","sourcesContent":["import { query } from '@metamask/controller-utils';\nimport type EthQuery from '@metamask/eth-query';\nimport { merge, pickBy } from 'lodash';\n\nimport { CHAIN_IDS } from '../constants';\nimport { createModuleLogger, projectLogger } from '../logger';\nimport type { TransactionControllerMessenger } from '../TransactionController';\nimport type { TransactionMeta } from '../types';\nimport { TransactionType } from '../types';\nimport { validateIfTransactionUnapproved } from './utils';\n\nconst log = createModuleLogger(projectLogger, 'swaps');\n\n/**\n * Interval in milliseconds between checks of post transaction balance\n */\nexport const UPDATE_POST_TX_BALANCE_TIMEOUT = 5000;\n\n/**\n * Retry attempts for checking post transaction balance\n */\nexport const UPDATE_POST_TX_BALANCE_ATTEMPTS = 6;\n\nconst SWAPS_TESTNET_CHAIN_ID = '0x539';\n\n/**\n * An address that the metaswap-api recognizes as the default token for the current network, in place of the token address that ERC-20 tokens have\n */\nexport const DEFAULT_TOKEN_ADDRESS =\n '0x0000000000000000000000000000000000000000';\n\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\ninterface SwapsTokenObject {\n /**\n * The name for the network\n */\n name: string;\n /**\n * An address that the metaswap-api recognizes as the default token\n */\n address: string;\n /**\n * Number of digits after decimal point\n */\n decimals: number;\n}\n\nconst ETH_SWAPS_TOKEN_OBJECT: SwapsTokenObject = {\n name: 'Ether',\n address: DEFAULT_TOKEN_ADDRESS,\n decimals: 18,\n};\n\nconst BNB_SWAPS_TOKEN_OBJECT: SwapsTokenObject = {\n name: 'Binance Coin',\n address: DEFAULT_TOKEN_ADDRESS,\n decimals: 18,\n} as const;\n\nconst MATIC_SWAPS_TOKEN_OBJECT: SwapsTokenObject = {\n name: 'Matic',\n address: DEFAULT_TOKEN_ADDRESS,\n decimals: 18,\n} as const;\n\nconst AVAX_SWAPS_TOKEN_OBJECT: SwapsTokenObject = {\n name: 'Avalanche',\n address: DEFAULT_TOKEN_ADDRESS,\n decimals: 18,\n} as const;\n\nconst TEST_ETH_SWAPS_TOKEN_OBJECT: SwapsTokenObject = {\n name: 'Test Ether',\n address: DEFAULT_TOKEN_ADDRESS,\n decimals: 18,\n} as const;\n\nconst GOERLI_SWAPS_TOKEN_OBJECT: SwapsTokenObject = {\n name: 'Ether',\n address: DEFAULT_TOKEN_ADDRESS,\n decimals: 18,\n} as const;\n\nconst ARBITRUM_SWAPS_TOKEN_OBJECT: SwapsTokenObject = {\n ...ETH_SWAPS_TOKEN_OBJECT,\n} as const;\n\nconst OPTIMISM_SWAPS_TOKEN_OBJECT: SwapsTokenObject = {\n ...ETH_SWAPS_TOKEN_OBJECT,\n} as const;\n\nconst ZKSYNC_ERA_SWAPS_TOKEN_OBJECT: SwapsTokenObject = {\n ...ETH_SWAPS_TOKEN_OBJECT,\n} as const;\n\nexport const SWAPS_CHAINID_DEFAULT_TOKEN_MAP = {\n [CHAIN_IDS.MAINNET]: ETH_SWAPS_TOKEN_OBJECT,\n [SWAPS_TESTNET_CHAIN_ID]: TEST_ETH_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.BSC]: BNB_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.POLYGON]: MATIC_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.GOERLI]: GOERLI_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.AVALANCHE]: AVAX_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.OPTIMISM]: OPTIMISM_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.ARBITRUM]: ARBITRUM_SWAPS_TOKEN_OBJECT,\n [CHAIN_IDS.ZKSYNC_ERA]: ZKSYNC_ERA_SWAPS_TOKEN_OBJECT,\n} as const;\n\nexport const SWAP_TRANSACTION_TYPES = [\n TransactionType.swap,\n TransactionType.swapAndSend,\n TransactionType.swapApproval,\n];\n\n/**\n * Updates the transaction meta object with the swap information\n *\n * @param transactionMeta - The transaction meta object to update\n * @param transactionType - The type of the transaction\n * @param swaps - The swaps object\n * @param swaps.hasApproveTx - Whether the swap has an approval transaction\n * @param swaps.meta - The swap meta object\n * @param updateSwapsTransactionRequest - Dependency bag\n * @param updateSwapsTransactionRequest.isSwapsDisabled - Whether swaps are disabled\n * @param updateSwapsTransactionRequest.cancelTransaction - Function to cancel a transaction\n * @param updateSwapsTransactionRequest.messenger - TransactionController messenger\n * @returns A copy of the transaction meta object with updates, or the same\n * transaction meta object if no updates were made.\n */\nexport function updateSwapsTransaction(\n transactionMeta: TransactionMeta,\n transactionType: TransactionType,\n swaps: {\n hasApproveTx?: boolean;\n meta?: Partial;\n },\n {\n isSwapsDisabled,\n cancelTransaction,\n messenger,\n }: {\n isSwapsDisabled: boolean;\n cancelTransaction: (transactionId: string) => void;\n messenger: TransactionControllerMessenger;\n },\n): TransactionMeta {\n if (isSwapsDisabled || !SWAP_TRANSACTION_TYPES.includes(transactionType)) {\n return transactionMeta;\n }\n\n // The simulationFails property is added if the estimateGas call fails. In cases\n // when no swaps approval tx is required, this indicates that the swap will likely\n // fail. There was an earlier estimateGas call made by the swaps controller,\n // but it is possible that external conditions have change since then, and\n // a previously succeeding estimate gas call could now fail. By checking for\n // the `simulationFails` property here, we can reduce the number of swap\n // transactions that get published to the blockchain only to fail and thereby\n // waste the user's funds on gas.\n if (\n transactionType === TransactionType.swap &&\n swaps?.hasApproveTx === false &&\n transactionMeta.simulationFails\n ) {\n cancelTransaction(transactionMeta.id);\n throw new Error('Simulation failed');\n }\n\n const swapsMeta = swaps?.meta as Partial;\n\n if (!swapsMeta) {\n return transactionMeta;\n }\n\n let updatedTransactionMeta = transactionMeta;\n\n if (transactionType === TransactionType.swapApproval) {\n updatedTransactionMeta = updateSwapApprovalTransaction(\n transactionMeta,\n swapsMeta,\n );\n messenger.publish('TransactionController:transactionNewSwapApproval', {\n transactionMeta: updatedTransactionMeta,\n });\n }\n\n if (transactionType === TransactionType.swapAndSend) {\n updatedTransactionMeta = updateSwapAndSendTransaction(\n transactionMeta,\n swapsMeta,\n );\n messenger.publish('TransactionController:transactionNewSwapAndSend', {\n transactionMeta: updatedTransactionMeta,\n });\n }\n\n if (transactionType === TransactionType.swap) {\n updatedTransactionMeta = updateSwapTransaction(transactionMeta, swapsMeta);\n messenger.publish('TransactionController:transactionNewSwap', {\n transactionMeta: updatedTransactionMeta,\n });\n }\n\n return updatedTransactionMeta;\n}\n\n/**\n * Attempts to update the post transaction balance of the provided transaction\n *\n * @param transactionMeta - Transaction meta object to update\n * @param updatePostTransactionBalanceRequest - Dependency bag\n * @param updatePostTransactionBalanceRequest.ethQuery - EthQuery object\n * @param updatePostTransactionBalanceRequest.getTransaction - Reading function for the latest transaction state\n * @param updatePostTransactionBalanceRequest.updateTransaction - Updating transaction function\n */\nexport async function updatePostTransactionBalance(\n transactionMeta: TransactionMeta,\n {\n ethQuery,\n getTransaction,\n updateTransaction,\n }: {\n ethQuery: EthQuery;\n getTransaction: (transactionId: string) => TransactionMeta | undefined;\n updateTransaction: (transactionMeta: TransactionMeta, note: string) => void;\n },\n): Promise<{\n updatedTransactionMeta: TransactionMeta;\n approvalTransactionMeta?: TransactionMeta;\n}> {\n log('Updating post transaction balance', transactionMeta.id);\n\n const transactionId = transactionMeta.id;\n let latestTransactionMeta: TransactionMeta | undefined;\n let approvalTransactionMeta;\n\n for (let i = 0; i < UPDATE_POST_TX_BALANCE_ATTEMPTS; i++) {\n log('Querying balance', { attempt: i });\n\n const postTransactionBalance = await query(ethQuery, 'getBalance', [\n transactionMeta.txParams.from,\n ]);\n\n latestTransactionMeta = {\n ...(getTransaction(transactionId) ?? ({} as TransactionMeta)),\n };\n\n approvalTransactionMeta = latestTransactionMeta.approvalTxId\n ? getTransaction(latestTransactionMeta.approvalTxId)\n : undefined;\n\n latestTransactionMeta.postTxBalance = postTransactionBalance.toString(16);\n\n const isDefaultTokenAddress = isSwapsDefaultTokenAddress(\n transactionMeta.destinationTokenAddress as string,\n transactionMeta.chainId,\n );\n\n if (\n !isDefaultTokenAddress ||\n transactionMeta.preTxBalance !== latestTransactionMeta.postTxBalance\n ) {\n log('Finishing post balance update', {\n isDefaultTokenAddress,\n preTxBalance: transactionMeta.preTxBalance,\n postTxBalance: latestTransactionMeta.postTxBalance,\n });\n\n break;\n }\n\n log('Waiting for balance to update', {\n delay: UPDATE_POST_TX_BALANCE_TIMEOUT,\n });\n\n await sleep(UPDATE_POST_TX_BALANCE_TIMEOUT);\n }\n\n updateTransaction(\n latestTransactionMeta as TransactionMeta,\n 'TransactionController#updatePostTransactionBalance - Add post transaction balance',\n );\n\n log('Completed post balance update', latestTransactionMeta?.postTxBalance);\n\n return {\n updatedTransactionMeta: latestTransactionMeta as TransactionMeta,\n approvalTransactionMeta,\n };\n}\n\n/**\n * Updates the transaction meta object with the swap information\n *\n * @param transactionMeta - Transaction meta object to update\n * @param propsToUpdate - Properties to update\n * @param propsToUpdate.sourceTokenSymbol - Symbol of the token to be swapped\n * @param propsToUpdate.destinationTokenSymbol - Symbol of the token to be received\n * @param propsToUpdate.type - Type of the transaction\n * @param propsToUpdate.destinationTokenDecimals - Decimals of the token to be received\n * @param propsToUpdate.destinationTokenAddress - Address of the token to be received\n * @param propsToUpdate.swapMetaData - Metadata of the swap\n * @param propsToUpdate.swapTokenValue - Value of the token to be swapped\n * @param propsToUpdate.estimatedBaseFee - Estimated base fee of the transaction\n * @param propsToUpdate.approvalTxId - Transaction id of the approval transaction\n * @returns The updated transaction meta object.\n */\nfunction updateSwapTransaction(\n transactionMeta: TransactionMeta,\n {\n sourceTokenSymbol,\n destinationTokenSymbol,\n type,\n destinationTokenDecimals,\n destinationTokenAddress,\n swapMetaData,\n swapTokenValue,\n estimatedBaseFee,\n approvalTxId,\n }: Partial,\n): TransactionMeta {\n validateIfTransactionUnapproved(transactionMeta, 'updateSwapTransaction');\n\n let swapTransaction = {\n sourceTokenSymbol,\n destinationTokenSymbol,\n type,\n destinationTokenDecimals,\n destinationTokenAddress,\n swapMetaData,\n swapTokenValue,\n estimatedBaseFee,\n approvalTxId,\n };\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n swapTransaction = pickBy(swapTransaction) as any;\n\n return merge({}, transactionMeta, swapTransaction);\n}\n\n/**\n * Updates the transaction meta object with the swap information\n *\n * @param transactionMeta - Transaction meta object to update\n * @param propsToUpdate - Properties to update\n * @param propsToUpdate.approvalTxId - Transaction id of the approval transaction\n * @param propsToUpdate.destinationTokenAddress - Address of the token to be received\n * @param propsToUpdate.destinationTokenAmount - The raw amount of the destination token\n * @param propsToUpdate.destinationTokenDecimals - Decimals of the token to be received\n * @param propsToUpdate.destinationTokenSymbol - Symbol of the token to be received\n * @param propsToUpdate.estimatedBaseFee - Estimated base fee of the transaction\n * @param propsToUpdate.sourceTokenAddress - The address of the source token\n * @param propsToUpdate.sourceTokenAmount - The raw amount of the source token\n * @param propsToUpdate.sourceTokenDecimals - The decimals of the source token\n * @param propsToUpdate.sourceTokenSymbol - Symbol of the token to be swapped\n * @param propsToUpdate.swapAndSendRecipient - The recipient of the swap and send transaction\n * @param propsToUpdate.swapMetaData - Metadata of the swap\n * @param propsToUpdate.swapTokenValue - Value of the token to be swapped – possibly the same as sourceTokenAmount; included for consistency\n * @param propsToUpdate.type - Type of the transaction\n * @returns The updated transaction meta object.\n */\nfunction updateSwapAndSendTransaction(\n transactionMeta: TransactionMeta,\n {\n approvalTxId,\n destinationTokenAddress,\n destinationTokenAmount,\n destinationTokenDecimals,\n destinationTokenSymbol,\n estimatedBaseFee,\n sourceTokenAddress,\n sourceTokenAmount,\n sourceTokenDecimals,\n sourceTokenSymbol,\n swapAndSendRecipient,\n swapMetaData,\n swapTokenValue,\n type,\n }: Partial,\n): TransactionMeta {\n validateIfTransactionUnapproved(transactionMeta, 'updateSwapTransaction');\n\n let swapTransaction = {\n approvalTxId,\n destinationTokenAddress,\n destinationTokenAmount,\n destinationTokenDecimals,\n destinationTokenSymbol,\n estimatedBaseFee,\n sourceTokenAddress,\n sourceTokenAmount,\n sourceTokenDecimals,\n sourceTokenSymbol,\n swapAndSendRecipient,\n swapMetaData,\n swapTokenValue,\n type,\n };\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n swapTransaction = pickBy(swapTransaction) as any;\n\n return merge({}, transactionMeta, swapTransaction);\n}\n\n/**\n * Updates the transaction meta object with the swap approval information\n *\n * @param transactionMeta - Transaction meta object to update\n * @param propsToUpdate - Properties to update\n * @param propsToUpdate.type - Type of the transaction\n * @param propsToUpdate.sourceTokenSymbol - Symbol of the token to be swapped\n * @returns The updated transaction meta object.\n */\nfunction updateSwapApprovalTransaction(\n transactionMeta: TransactionMeta,\n { type, sourceTokenSymbol }: Partial,\n): TransactionMeta {\n validateIfTransactionUnapproved(\n transactionMeta,\n 'updateSwapApprovalTransaction',\n );\n\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let swapApprovalTransaction = { type, sourceTokenSymbol } as any;\n swapApprovalTransaction = pickBy({\n type,\n sourceTokenSymbol,\n }) as Partial;\n\n return merge({}, transactionMeta, swapApprovalTransaction);\n}\n\n/**\n * Checks whether the provided address is strictly equal to the address for\n * the default swaps token of the provided chain.\n *\n * @param address - The string to compare to the default token address\n * @param chainId - The hex encoded chain ID of the default swaps token to check\n * @returns Whether the address is the provided chain's default token address\n */\nfunction isSwapsDefaultTokenAddress(address: string, chainId: string) {\n if (!address || !chainId) {\n return false;\n }\n\n return (\n address ===\n SWAPS_CHAINID_DEFAULT_TOKEN_MAP[\n chainId as keyof typeof SWAPS_CHAINID_DEFAULT_TOKEN_MAP\n ]?.address\n );\n}\n\n/**\n * Sleeps for the provided number of milliseconds\n *\n * @param ms - Number of milliseconds to sleep\n * @returns Promise that resolves after the provided number of milliseconds\n */\nfunction sleep(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-QP75SWIQ.js.map b/node_modules/@metamask/transaction-controller/dist/chunk-QP75SWIQ.js.map -deleted file mode 100644 -index c1690b4..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-QP75SWIQ.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/utils/history.ts"],"names":[],"mappings":";AAAA,OAAO,gBAAgB;AACvB,SAAS,WAAW,aAAa;AAe1B,SAAS,0BACd,iBACiB;AACjB,QAAM,WAAW,4BAA4B,eAAe;AAC5D,SAAO,MAAM,CAAC,GAAG,iBAAiB,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC;AAC3D;AAWO,SAAS,yBACd,iBACA,MACiB;AACjB,MAAI,CAAC,gBAAgB,SAAS;AAC5B,WAAO;AAAA,EACT;AAEA,QAAM,eAAe,4BAA4B,eAAe;AAChE,QAAM,gBAAgB,cAAc,gBAAgB,OAAO;AAC3D,QAAM,eAAe,qBAAqB,eAAe,cAAc,IAAI;AAE3E,MAAI,aAAa,SAAS,GAAG;AAC3B,WAAO,MAAM,CAAC,GAAG,iBAAiB;AAAA,MAChC,SAAS,CAAC,GAAG,gBAAgB,SAAS,YAAY;AAAA,IACpD,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAUA,SAAS,qBAGP,eACA,cACA,MACyB;AACzB,QAAM,yBAAyB,WAAW;AAAA,IACxC;AAAA,IACA;AAAA,EACF;AAEA,MAAI,uBAAuB,CAAC,GAAG;AAC7B,QAAI,MAAM;AACR,6BAAuB,CAAC,EAAE,OAAO;AAAA,IACnC;AACA,2BAAuB,CAAC,EAAE,YAAY,KAAK,IAAI;AAAA,EACjD;AACA,SAAO;AACT;AAQA,SAAS,cACP,oBACiB;AACjB,QAAM,eAAe,UAAU,kBAAkB;AACjD,SAAO,aAAa;AAAA;AAAA;AAAA,IAGlB,CAAC,KAAK,UAAe,WAAW,WAAW,KAAK,KAAK,EAAE;AAAA,EACzD;AACF;AAQA,SAAS,4BACP,iBACiB;AACjB,QAAM,WAAW,EAAE,GAAG,gBAAgB;AACtC,SAAO,SAAS;AAChB,SAAO,UAAU,QAAQ;AAC3B","sourcesContent":["import jsonDiffer from 'fast-json-patch';\nimport { cloneDeep, merge } from 'lodash';\n\nimport type {\n TransactionHistory,\n TransactionHistoryEntry,\n TransactionMeta,\n} from '../types';\n\n/**\n * Build a new version of the provided transaction with an initial history\n * entry, which is just a snapshot of the transaction.\n *\n * @param transactionMeta - TransactionMeta to add initial history snapshot to.\n * @returns A copy of `transactionMeta` with a new `history` property.\n */\nexport function addInitialHistorySnapshot(\n transactionMeta: TransactionMeta,\n): TransactionMeta {\n const snapshot = snapshotFromTransactionMeta(transactionMeta);\n return merge({}, transactionMeta, { history: [snapshot] });\n}\n\n/**\n * Builds a new version of the transaction with a new history entry if\n * it has a `history` property, or just returns the transaction.\n *\n * @param transactionMeta - TransactionMeta to add history entry to.\n * @param note - Note to add to history entry.\n * @returns A copy of `transactionMeta` with a new `history` entry if it has an\n * existing non-empty `history` array.\n */\nexport function updateTransactionHistory(\n transactionMeta: TransactionMeta,\n note: string,\n): TransactionMeta {\n if (!transactionMeta.history) {\n return transactionMeta;\n }\n\n const currentState = snapshotFromTransactionMeta(transactionMeta);\n const previousState = replayHistory(transactionMeta.history);\n const historyEntry = generateHistoryEntry(previousState, currentState, note);\n\n if (historyEntry.length > 0) {\n return merge({}, transactionMeta, {\n history: [...transactionMeta.history, historyEntry],\n });\n }\n return transactionMeta;\n}\n\n/**\n * Generates a history entry from the previous and new transaction metadata.\n *\n * @param previousState - The previous transaction metadata.\n * @param currentState - The new transaction metadata.\n * @param note - A note for the transaction metada update.\n * @returns An array of history operation.\n */\nfunction generateHistoryEntry(\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n previousState: any,\n currentState: TransactionMeta,\n note: string,\n): TransactionHistoryEntry {\n const historyOperationsEntry = jsonDiffer.compare(\n previousState,\n currentState,\n ) as TransactionHistoryEntry;\n // Add a note to the first operation, since it breaks if we append it to the entry\n if (historyOperationsEntry[0]) {\n if (note) {\n historyOperationsEntry[0].note = note;\n }\n historyOperationsEntry[0].timestamp = Date.now();\n }\n return historyOperationsEntry;\n}\n\n/**\n * Recovers previous transactionMeta from passed history array.\n *\n * @param transactionHistory - The transaction metadata to replay.\n * @returns The transaction metadata.\n */\nfunction replayHistory(\n transactionHistory: TransactionHistory,\n): TransactionMeta {\n const shortHistory = cloneDeep(transactionHistory);\n return shortHistory.reduce(\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (val, entry: any) => jsonDiffer.applyPatch(val, entry).newDocument,\n ) as TransactionMeta;\n}\n\n/**\n * Clone the transaction meta data without the history property.\n *\n * @param transactionMeta - The transaction metadata to snapshot.\n * @returns A deep clone of transaction metadata without history property.\n */\nfunction snapshotFromTransactionMeta(\n transactionMeta: TransactionMeta,\n): TransactionMeta {\n const snapshot = { ...transactionMeta };\n delete snapshot.history;\n return cloneDeep(snapshot);\n}\n"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-QTKXIDGE.js.map b/node_modules/@metamask/transaction-controller/dist/chunk-QTKXIDGE.js.map -deleted file mode 100644 -index 32e000d..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-QTKXIDGE.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/gas-flows/DefaultGasFeeFlow.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAKA,SAAS,0BAA0B;AAEnC,SAAS,0BAA0B;AAiBnC,IAAM,MAAM,mBAAmB,eAAe,sBAAsB;AAxBpE;AA6BO,IAAM,oBAAN,MAA8C;AAAA,EAA9C;AAuCL;AAiBA;AAiBA;AASA;AAkBA;AAAA;AAAA,EAnGA,mBAAmB,kBAA4C;AAC7D,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,WAAW,SAAyD;AACxE,UAAM,EAAE,qBAAqB,IAAI;AACjC,UAAM,EAAE,iBAAiB,gBAAgB,IAAI;AAE7C,QAAI;AAEJ,YAAQ,iBAAiB;AAAA,MACvB,KAAK,mBAAmB;AACtB,YAAI,8BAA8B,eAAe;AACjD,mBAAW,sBAAK,8CAAL,WAA0B;AACrC;AAAA,MACF,KAAK,mBAAmB;AACtB,YAAI,0BAA0B,eAAe;AAC7C,mBAAW,sBAAK,4CAAL,WACT;AAEF;AAAA,MACF,KAAK,mBAAmB;AACtB,YAAI,gCAAgC,eAAe;AACnD,mBAAW,sBAAK,gDAAL,WACT;AAEF;AAAA,MACF;AAGE,cAAM,IAAI,MAAM,kCAAkC,eAAe,EAAE;AAAA,IACvE;AAEA,WAAO;AAAA,MACL,WAAW;AAAA,IACb;AAAA,EACF;AAqEF;AAnEE;AAAA,yBAAoB,SAClB,iBAC0B;AAC1B,QAAM,SAAS,OAAO,OAAO,mBAAmB,EAAE;AAAA,IAChD,CAAC,QAAQ,WAAW;AAAA,MAClB,GAAG;AAAA,MACH,CAAC,KAAK,GAAG,sBAAK,0CAAL,WAAwB,iBAAiB;AAAA,IACpD;AAAA,IACA,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA,GAAG;AAAA,EACL;AACF;AAEA;AAAA,wBAAmB,SACjB,iBACuB;AACvB,QAAM,SAAS,OAAO,OAAO,mBAAmB,EAAE;AAAA,IAChD,CAAC,QAAQ,WAAW;AAAA,MAClB,GAAG;AAAA,MACH,CAAC,KAAK,GAAG,sBAAK,oCAAL,WAAqB,iBAAiB;AAAA,IACjD;AAAA,IACA,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA,GAAG;AAAA,EACL;AACF;AAEA;AAAA,0BAAqB,SACnB,iBACyB;AACzB,SAAO;AAAA,IACL;AAAA,IACA,UAAU,oBAAoB,gBAAgB,QAAQ;AAAA,EACxD;AACF;AAEA;AAAA,uBAAkB,SAChB,iBACA,OACiC;AACjC,QAAM,eAAe;AAAA,IACnB,gBAAgB,KAAK,EAAE;AAAA,EACzB;AAEA,QAAM,uBAAuB;AAAA,IAC3B,gBAAgB,KAAK,EAAE;AAAA,EACzB;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAEA;AAAA,oBAAe,SACb,iBACA,OACK;AACL,SAAO,oBAAoB,gBAAgB,KAAK,CAAC;AACnD","sourcesContent":["import type {\n LegacyGasPriceEstimate,\n GasFeeEstimates as FeeMarketGasPriceEstimate,\n EthGasPriceEstimate,\n} from '@metamask/gas-fee-controller';\nimport { GAS_ESTIMATE_TYPES } from '@metamask/gas-fee-controller';\nimport type { Hex } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\n\nimport { projectLogger } from '../logger';\nimport type {\n FeeMarketGasFeeEstimateForLevel,\n FeeMarketGasFeeEstimates,\n GasFeeEstimates,\n GasFeeFlow,\n GasFeeFlowRequest,\n GasFeeFlowResponse,\n GasPriceGasFeeEstimates,\n LegacyGasFeeEstimates,\n TransactionMeta,\n} from '../types';\nimport { GasFeeEstimateLevel, GasFeeEstimateType } from '../types';\nimport { gweiDecimalToWeiHex } from '../utils/gas-fees';\n\nconst log = createModuleLogger(projectLogger, 'default-gas-fee-flow');\n\n/**\n * The standard implementation of a gas fee flow that obtains gas fee estimates using only the GasFeeController.\n */\nexport class DefaultGasFeeFlow implements GasFeeFlow {\n matchesTransaction(_transactionMeta: TransactionMeta): boolean {\n return true;\n }\n\n async getGasFees(request: GasFeeFlowRequest): Promise {\n const { gasFeeControllerData } = request;\n const { gasEstimateType, gasFeeEstimates } = gasFeeControllerData;\n\n let response: GasFeeEstimates;\n\n switch (gasEstimateType) {\n case GAS_ESTIMATE_TYPES.FEE_MARKET:\n log('Using fee market estimates', gasFeeEstimates);\n response = this.#getFeeMarkEstimates(gasFeeEstimates);\n break;\n case GAS_ESTIMATE_TYPES.LEGACY:\n log('Using legacy estimates', gasFeeEstimates);\n response = this.#getLegacyEstimates(\n gasFeeEstimates as LegacyGasPriceEstimate,\n );\n break;\n case GAS_ESTIMATE_TYPES.ETH_GASPRICE:\n log('Using eth_gasPrice estimates', gasFeeEstimates);\n response = this.#getGasPriceEstimates(\n gasFeeEstimates as EthGasPriceEstimate,\n );\n break;\n default:\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n throw new Error(`Unsupported gas estimate type: ${gasEstimateType}`);\n }\n\n return {\n estimates: response,\n };\n }\n\n #getFeeMarkEstimates(\n gasFeeEstimates: FeeMarketGasPriceEstimate,\n ): FeeMarketGasFeeEstimates {\n const levels = Object.values(GasFeeEstimateLevel).reduce(\n (result, level) => ({\n ...result,\n [level]: this.#getFeeMarketLevel(gasFeeEstimates, level),\n }),\n {} as Omit,\n );\n\n return {\n type: GasFeeEstimateType.FeeMarket,\n ...levels,\n };\n }\n\n #getLegacyEstimates(\n gasFeeEstimates: LegacyGasPriceEstimate,\n ): LegacyGasFeeEstimates {\n const levels = Object.values(GasFeeEstimateLevel).reduce(\n (result, level) => ({\n ...result,\n [level]: this.#getLegacyLevel(gasFeeEstimates, level),\n }),\n {} as Omit,\n );\n\n return {\n type: GasFeeEstimateType.Legacy,\n ...levels,\n };\n }\n\n #getGasPriceEstimates(\n gasFeeEstimates: EthGasPriceEstimate,\n ): GasPriceGasFeeEstimates {\n return {\n type: GasFeeEstimateType.GasPrice,\n gasPrice: gweiDecimalToWeiHex(gasFeeEstimates.gasPrice),\n };\n }\n\n #getFeeMarketLevel(\n gasFeeEstimates: FeeMarketGasPriceEstimate,\n level: GasFeeEstimateLevel,\n ): FeeMarketGasFeeEstimateForLevel {\n const maxFeePerGas = gweiDecimalToWeiHex(\n gasFeeEstimates[level].suggestedMaxFeePerGas,\n );\n\n const maxPriorityFeePerGas = gweiDecimalToWeiHex(\n gasFeeEstimates[level].suggestedMaxPriorityFeePerGas,\n );\n\n return {\n maxFeePerGas,\n maxPriorityFeePerGas,\n };\n }\n\n #getLegacyLevel(\n gasFeeEstimates: LegacyGasPriceEstimate,\n level: GasFeeEstimateLevel,\n ): Hex {\n return gweiDecimalToWeiHex(gasFeeEstimates[level]);\n }\n}\n"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-RHDPOIS4.js.map b/node_modules/@metamask/transaction-controller/dist/chunk-RHDPOIS4.js.map -deleted file mode 100644 -index 5f03ad7..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-RHDPOIS4.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/helpers/IncomingTransactionHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AccountsController } from '@metamask/accounts-controller';\nimport type { BlockTracker } from '@metamask/network-controller';\nimport type { Hex } from '@metamask/utils';\nimport { Mutex } from 'async-mutex';\nimport EventEmitter from 'events';\n\nimport { incomingTransactionsLogger as log } from '../logger';\nimport type { RemoteTransactionSource, TransactionMeta } from '../types';\n\nconst RECENT_HISTORY_BLOCK_RANGE = 10;\n\n// TODO: Replace `any` with type\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst UPDATE_CHECKS: ((txMeta: TransactionMeta) => any)[] = [\n (txMeta) => txMeta.status,\n (txMeta) => txMeta.txParams.gasUsed,\n];\n\n/**\n * Configuration options for the IncomingTransactionHelper\n *\n * @property includeTokenTransfers - Whether or not to include ERC20 token transfers.\n * @property isEnabled - Whether or not incoming transaction retrieval is enabled.\n * @property queryEntireHistory - Whether to initially query the entire transaction history or only recent blocks.\n * @property updateTransactions - Whether to update local transactions using remote transaction data.\n */\nexport type IncomingTransactionOptions = {\n includeTokenTransfers?: boolean;\n isEnabled?: () => boolean;\n queryEntireHistory?: boolean;\n updateTransactions?: boolean;\n};\n\nexport class IncomingTransactionHelper {\n hub: EventEmitter;\n\n #blockTracker: BlockTracker;\n\n #getCurrentAccount: () => ReturnType<\n AccountsController['getSelectedAccount']\n >;\n\n #getLastFetchedBlockNumbers: () => Record;\n\n #getLocalTransactions: () => TransactionMeta[];\n\n #getChainId: () => Hex;\n\n #isEnabled: () => boolean;\n\n #isRunning: boolean;\n\n #mutex = new Mutex();\n\n #onLatestBlock: (blockNumberHex: Hex) => Promise;\n\n #queryEntireHistory: boolean;\n\n #remoteTransactionSource: RemoteTransactionSource;\n\n #transactionLimit?: number;\n\n #updateTransactions: boolean;\n\n constructor({\n blockTracker,\n getCurrentAccount,\n getLastFetchedBlockNumbers,\n getLocalTransactions,\n getChainId,\n isEnabled,\n queryEntireHistory,\n remoteTransactionSource,\n transactionLimit,\n updateTransactions,\n }: {\n blockTracker: BlockTracker;\n getCurrentAccount: () => ReturnType<\n AccountsController['getSelectedAccount']\n >;\n getLastFetchedBlockNumbers: () => Record;\n getLocalTransactions?: () => TransactionMeta[];\n getChainId: () => Hex;\n isEnabled?: () => boolean;\n queryEntireHistory?: boolean;\n remoteTransactionSource: RemoteTransactionSource;\n transactionLimit?: number;\n updateTransactions?: boolean;\n }) {\n this.hub = new EventEmitter();\n\n this.#blockTracker = blockTracker;\n this.#getCurrentAccount = getCurrentAccount;\n this.#getLastFetchedBlockNumbers = getLastFetchedBlockNumbers;\n this.#getLocalTransactions = getLocalTransactions || (() => []);\n this.#getChainId = getChainId;\n this.#isEnabled = isEnabled ?? (() => true);\n this.#isRunning = false;\n this.#queryEntireHistory = queryEntireHistory ?? true;\n this.#remoteTransactionSource = remoteTransactionSource;\n this.#transactionLimit = transactionLimit;\n this.#updateTransactions = updateTransactions ?? false;\n\n // Using a property instead of a method to provide a listener reference\n // with the correct scope that we can remove later if stopped.\n this.#onLatestBlock = async (blockNumberHex: Hex) => {\n try {\n await this.update(blockNumberHex);\n } catch (error) {\n console.error('Error while checking incoming transactions', error);\n }\n };\n }\n\n start() {\n if (this.#isRunning) {\n return;\n }\n\n if (!this.#canStart()) {\n return;\n }\n\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n this.#blockTracker.addListener('latest', this.#onLatestBlock);\n this.#isRunning = true;\n }\n\n stop() {\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n this.#blockTracker.removeListener('latest', this.#onLatestBlock);\n this.#isRunning = false;\n }\n\n async update(latestBlockNumberHex?: Hex): Promise {\n const releaseLock = await this.#mutex.acquire();\n\n log('Checking for incoming transactions');\n\n try {\n if (!this.#canStart()) {\n return;\n }\n\n const latestBlockNumber = parseInt(\n latestBlockNumberHex || (await this.#blockTracker.getLatestBlock()),\n 16,\n );\n\n const additionalLastFetchedKeys =\n this.#remoteTransactionSource.getLastBlockVariations?.() ?? [];\n\n const fromBlock = this.#getFromBlock(latestBlockNumber);\n const account = this.#getCurrentAccount();\n const currentChainId = this.#getChainId();\n\n let remoteTransactions = [];\n\n try {\n remoteTransactions =\n await this.#remoteTransactionSource.fetchTransactions({\n address: account.address,\n currentChainId,\n fromBlock,\n limit: this.#transactionLimit,\n });\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n log('Error while fetching remote transactions', error);\n return;\n }\n if (!this.#updateTransactions) {\n const address = account.address.toLowerCase();\n remoteTransactions = remoteTransactions.filter(\n (tx) => tx.txParams.to?.toLowerCase() === address,\n );\n }\n\n const localTransactions = !this.#updateTransactions\n ? []\n : this.#getLocalTransactions();\n\n const newTransactions = this.#getNewTransactions(\n remoteTransactions,\n localTransactions,\n );\n\n const updatedTransactions = this.#getUpdatedTransactions(\n remoteTransactions,\n localTransactions,\n );\n\n if (newTransactions.length > 0 || updatedTransactions.length > 0) {\n this.#sortTransactionsByTime(newTransactions);\n this.#sortTransactionsByTime(updatedTransactions);\n\n log('Found incoming transactions', {\n new: newTransactions,\n updated: updatedTransactions,\n });\n\n this.hub.emit('transactions', {\n added: newTransactions,\n updated: updatedTransactions,\n });\n }\n this.#updateLastFetchedBlockNumber(\n remoteTransactions,\n additionalLastFetchedKeys,\n );\n } finally {\n releaseLock();\n }\n }\n\n #sortTransactionsByTime(transactions: TransactionMeta[]) {\n transactions.sort((a, b) => (a.time < b.time ? -1 : 1));\n }\n\n #getNewTransactions(\n remoteTxs: TransactionMeta[],\n localTxs: TransactionMeta[],\n ): TransactionMeta[] {\n return remoteTxs.filter(\n (tx) => !localTxs.some(({ hash }) => hash === tx.hash),\n );\n }\n\n #getUpdatedTransactions(\n remoteTxs: TransactionMeta[],\n localTxs: TransactionMeta[],\n ): TransactionMeta[] {\n return remoteTxs.filter((remoteTx) =>\n localTxs.some(\n (localTx) =>\n remoteTx.hash === localTx.hash &&\n this.#isTransactionOutdated(remoteTx, localTx),\n ),\n );\n }\n\n #isTransactionOutdated(\n remoteTx: TransactionMeta,\n localTx: TransactionMeta,\n ): boolean {\n return UPDATE_CHECKS.some(\n (getValue) => getValue(remoteTx) !== getValue(localTx),\n );\n }\n\n #getLastFetchedBlockNumberDec(): number {\n const additionalLastFetchedKeys =\n this.#remoteTransactionSource.getLastBlockVariations?.() ?? [];\n const lastFetchedKey = this.#getBlockNumberKey(additionalLastFetchedKeys);\n const lastFetchedBlockNumbers = this.#getLastFetchedBlockNumbers();\n return lastFetchedBlockNumbers[lastFetchedKey];\n }\n\n #getFromBlock(latestBlockNumber: number): number | undefined {\n const lastFetchedBlockNumber = this.#getLastFetchedBlockNumberDec();\n\n if (lastFetchedBlockNumber) {\n return lastFetchedBlockNumber + 1;\n }\n\n return this.#queryEntireHistory\n ? undefined\n : latestBlockNumber - RECENT_HISTORY_BLOCK_RANGE;\n }\n\n #updateLastFetchedBlockNumber(\n remoteTxs: TransactionMeta[],\n additionalKeys: string[],\n ) {\n let lastFetchedBlockNumber = -1;\n\n for (const tx of remoteTxs) {\n const currentBlockNumberValue = tx.blockNumber\n ? parseInt(tx.blockNumber, 10)\n : -1;\n\n lastFetchedBlockNumber = Math.max(\n lastFetchedBlockNumber,\n currentBlockNumberValue,\n );\n }\n\n if (lastFetchedBlockNumber === -1) {\n return;\n }\n\n const lastFetchedKey = this.#getBlockNumberKey(additionalKeys);\n const lastFetchedBlockNumbers = this.#getLastFetchedBlockNumbers();\n const previousValue = lastFetchedBlockNumbers[lastFetchedKey];\n\n if (previousValue >= lastFetchedBlockNumber) {\n return;\n }\n\n this.hub.emit('updatedLastFetchedBlockNumbers', {\n lastFetchedBlockNumbers: {\n ...lastFetchedBlockNumbers,\n [lastFetchedKey]: lastFetchedBlockNumber,\n },\n blockNumber: lastFetchedBlockNumber,\n });\n }\n\n #getBlockNumberKey(additionalKeys: string[]): string {\n const currentChainId = this.#getChainId();\n const currentAccount = this.#getCurrentAccount()?.address.toLowerCase();\n\n return [currentChainId, currentAccount, ...additionalKeys].join('#');\n }\n\n #canStart(): boolean {\n const isEnabled = this.#isEnabled();\n const currentChainId = this.#getChainId();\n\n const isSupportedNetwork =\n this.#remoteTransactionSource.isSupportedNetwork(currentChainId);\n\n return isEnabled && isSupportedNetwork;\n }\n}\n"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-RXIUMVA5.js.map b/node_modules/@metamask/transaction-controller/dist/chunk-RXIUMVA5.js.map -deleted file mode 100644 -index f44a8d6..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-RXIUMVA5.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/utils/validation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Interface } from '@ethersproject/abi';\nimport { ORIGIN_METAMASK, isValidHexAddress } from '@metamask/controller-utils';\nimport { abiERC20 } from '@metamask/metamask-eth-abis';\nimport { providerErrors, rpcErrors } from '@metamask/rpc-errors';\n\nimport { TransactionEnvelopeType, type TransactionParams } from '../types';\nimport { isEIP1559Transaction } from './utils';\n\ntype GasFieldsToValidate = 'gasPrice' | 'maxFeePerGas' | 'maxPriorityFeePerGas';\n\n/**\n * Validates whether a transaction initiated by a specific 'from' address is permitted by the origin.\n *\n * @param permittedAddresses - The permitted accounts for the given origin.\n * @param selectedAddress - The currently selected Ethereum address in the wallet.\n * @param from - The address from which the transaction is initiated.\n * @param origin - The origin or source of the transaction.\n * @throws Throws an error if the transaction is not permitted.\n */\nexport async function validateTransactionOrigin(\n permittedAddresses: string[],\n selectedAddress: string,\n from: string,\n origin: string,\n) {\n if (origin === ORIGIN_METAMASK) {\n // Ensure the 'from' address matches the currently selected address\n if (from !== selectedAddress) {\n throw rpcErrors.internal({\n message: `Internally initiated transaction is using invalid account.`,\n data: {\n origin,\n fromAddress: from,\n selectedAddress,\n },\n });\n }\n return;\n }\n\n // Check if the origin has permissions to initiate transactions from the specified address\n if (!permittedAddresses.includes(from)) {\n throw providerErrors.unauthorized({ data: { origin } });\n }\n}\n\n/**\n * Validates the transaction params for required properties and throws in\n * the event of any validation error.\n *\n * @param txParams - Transaction params object to validate.\n * @param isEIP1559Compatible - whether or not the current network supports EIP-1559 transactions.\n */\nexport function validateTxParams(\n txParams: TransactionParams,\n isEIP1559Compatible = true,\n) {\n validateEIP1559Compatibility(txParams, isEIP1559Compatible);\n validateParamFrom(txParams.from);\n validateParamRecipient(txParams);\n validateParamValue(txParams.value);\n validateParamData(txParams.data);\n validateParamChainId(txParams.chainId);\n validateGasFeeParams(txParams);\n}\n\n/**\n * Validates EIP-1559 compatibility for transaction creation.\n *\n * @param txParams - The transaction parameters to validate.\n * @param isEIP1559Compatible - Indicates if the current network supports EIP-1559.\n * @throws Throws invalid params if the transaction specifies EIP-1559 but the network does not support it.\n */\nfunction validateEIP1559Compatibility(\n txParams: TransactionParams,\n isEIP1559Compatible: boolean,\n) {\n if (isEIP1559Transaction(txParams) && !isEIP1559Compatible) {\n throw rpcErrors.invalidParams(\n 'Invalid transaction params: params specify an EIP-1559 transaction but the current network does not support EIP-1559',\n );\n }\n}\n\n/**\n * Validates value property, ensuring it is a valid positive integer number\n * denominated in wei.\n *\n * @param value - The value to validate, expressed as a string.\n * @throws Throws an error if the value is not a valid positive integer\n * number denominated in wei.\n * - If the value contains a hyphen (-), it is considered invalid.\n * - If the value contains a decimal point (.), it is considered invalid.\n * - If the value is not a finite number, is NaN, or is not a safe integer, it is considered invalid.\n */\nfunction validateParamValue(value?: string) {\n if (value !== undefined) {\n if (value.includes('-')) {\n throw rpcErrors.invalidParams(\n `Invalid transaction value \"${value}\": not a positive number.`,\n );\n }\n\n if (value.includes('.')) {\n throw rpcErrors.invalidParams(\n `Invalid transaction value \"${value}\": number must be in wei.`,\n );\n }\n const intValue = parseInt(value, 10);\n const isValid =\n Number.isFinite(intValue) &&\n !Number.isNaN(intValue) &&\n !isNaN(Number(value)) &&\n Number.isSafeInteger(intValue);\n if (!isValid) {\n throw rpcErrors.invalidParams(\n `Invalid transaction value ${value}: number must be a valid number.`,\n );\n }\n }\n}\n\n/**\n * Validates the recipient address in a transaction's parameters.\n *\n * @param txParams - The transaction parameters object to validate.\n * @throws Throws an error if the recipient address is invalid:\n * - If the recipient address is an empty string ('0x') or undefined and the transaction contains data,\n * the \"to\" field is removed from the transaction parameters.\n * - If the recipient address is not a valid hexadecimal Ethereum address, an error is thrown.\n */\nfunction validateParamRecipient(txParams: TransactionParams) {\n if (txParams.to === '0x' || txParams.to === undefined) {\n if (txParams.data) {\n delete txParams.to;\n } else {\n throw rpcErrors.invalidParams(`Invalid \"to\" address.`);\n }\n } else if (txParams.to !== undefined && !isValidHexAddress(txParams.to)) {\n throw rpcErrors.invalidParams(`Invalid \"to\" address.`);\n }\n}\n\n/**\n * Validates the recipient address in a transaction's parameters.\n *\n * @param from - The from property to validate.\n * @throws Throws an error if the recipient address is invalid:\n * - If the recipient address is an empty string ('0x') or undefined and the transaction contains data,\n * the \"to\" field is removed from the transaction parameters.\n * - If the recipient address is not a valid hexadecimal Ethereum address, an error is thrown.\n */\nfunction validateParamFrom(from: string) {\n if (!from || typeof from !== 'string') {\n throw rpcErrors.invalidParams(\n `Invalid \"from\" address ${from}: not a string.`,\n );\n }\n if (!isValidHexAddress(from)) {\n throw rpcErrors.invalidParams('Invalid \"from\" address.');\n }\n}\n\n/**\n * Validates input data for transactions.\n *\n * @param value - The input data to validate.\n * @throws Throws invalid params if the input data is invalid.\n */\nfunction validateParamData(value?: string) {\n if (value) {\n const ERC20Interface = new Interface(abiERC20);\n try {\n ERC20Interface.parseTransaction({ data: value });\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n if (error.message.match(/BUFFER_OVERRUN/u)) {\n throw rpcErrors.invalidParams(\n 'Invalid transaction params: data out-of-bounds, BUFFER_OVERRUN.',\n );\n }\n }\n }\n}\n\n/**\n * Validates chainId type.\n *\n * @param chainId - The chainId to validate.\n */\nfunction validateParamChainId(chainId: number | string | undefined) {\n if (\n chainId !== undefined &&\n typeof chainId !== 'number' &&\n typeof chainId !== 'string'\n ) {\n throw rpcErrors.invalidParams(\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `Invalid transaction params: chainId is not a Number or hex string. got: (${chainId})`,\n );\n }\n}\n\n/**\n * Validates gas values.\n *\n * @param txParams - The transaction parameters to validate.\n */\nfunction validateGasFeeParams(txParams: TransactionParams) {\n if (txParams.gasPrice) {\n ensureProperTransactionEnvelopeTypeProvided(txParams, 'gasPrice');\n ensureMutuallyExclusiveFieldsNotProvided(\n txParams,\n 'gasPrice',\n 'maxFeePerGas',\n );\n ensureMutuallyExclusiveFieldsNotProvided(\n txParams,\n 'gasPrice',\n 'maxPriorityFeePerGas',\n );\n ensureFieldIsString(txParams, 'gasPrice');\n }\n\n if (txParams.maxFeePerGas) {\n ensureProperTransactionEnvelopeTypeProvided(txParams, 'maxFeePerGas');\n ensureMutuallyExclusiveFieldsNotProvided(\n txParams,\n 'maxFeePerGas',\n 'gasPrice',\n );\n ensureFieldIsString(txParams, 'maxFeePerGas');\n }\n\n if (txParams.maxPriorityFeePerGas) {\n ensureProperTransactionEnvelopeTypeProvided(\n txParams,\n 'maxPriorityFeePerGas',\n );\n ensureMutuallyExclusiveFieldsNotProvided(\n txParams,\n 'maxPriorityFeePerGas',\n 'gasPrice',\n );\n ensureFieldIsString(txParams, 'maxPriorityFeePerGas');\n }\n}\n\n/**\n * Ensures that the provided txParams has the proper 'type' specified for the\n * given field, if it is provided. If types do not match throws an\n * invalidParams error.\n *\n * @param txParams - The transaction parameters object\n * @param field - The current field being validated\n * @throws {ethErrors.rpc.invalidParams} Throws if type does not match the\n * expectations for provided field.\n */\nfunction ensureProperTransactionEnvelopeTypeProvided(\n txParams: TransactionParams,\n field: GasFieldsToValidate,\n) {\n switch (field) {\n case 'maxFeePerGas':\n case 'maxPriorityFeePerGas':\n if (\n txParams.type &&\n txParams.type !== TransactionEnvelopeType.feeMarket\n ) {\n throw rpcErrors.invalidParams(\n `Invalid transaction envelope type: specified type \"${txParams.type}\" but including maxFeePerGas and maxPriorityFeePerGas requires type: \"${TransactionEnvelopeType.feeMarket}\"`,\n );\n }\n break;\n case 'gasPrice':\n default:\n if (\n txParams.type &&\n txParams.type === TransactionEnvelopeType.feeMarket\n ) {\n throw rpcErrors.invalidParams(\n `Invalid transaction envelope type: specified type \"${txParams.type}\" but included a gasPrice instead of maxFeePerGas and maxPriorityFeePerGas`,\n );\n }\n }\n}\n\n/**\n * Given two fields, ensure that the second field is not included in txParams,\n * and if it is throw an invalidParams error.\n *\n * @param txParams - The transaction parameters object\n * @param fieldBeingValidated - The current field being validated\n * @param mutuallyExclusiveField - The field to ensure is not provided\n * @throws {ethErrors.rpc.invalidParams} Throws if mutuallyExclusiveField is\n * present in txParams.\n */\nfunction ensureMutuallyExclusiveFieldsNotProvided(\n txParams: TransactionParams,\n fieldBeingValidated: GasFieldsToValidate,\n mutuallyExclusiveField: GasFieldsToValidate,\n) {\n if (typeof txParams[mutuallyExclusiveField] !== 'undefined') {\n throw rpcErrors.invalidParams(\n `Invalid transaction params: specified ${fieldBeingValidated} but also included ${mutuallyExclusiveField}, these cannot be mixed`,\n );\n }\n}\n\n/**\n * Ensures that the provided value for field is a string, throws an\n * invalidParams error if field is not a string.\n *\n * @param txParams - The transaction parameters object\n * @param field - The current field being validated\n * @throws {rpcErrors.invalidParams} Throws if field is not a string\n */\nfunction ensureFieldIsString(\n txParams: TransactionParams,\n field: GasFieldsToValidate,\n) {\n if (typeof txParams[field] !== 'string') {\n throw rpcErrors.invalidParams(\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `Invalid transaction params: ${field} is not a string. got: (${txParams[field]})`,\n );\n }\n}\n"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-S6VGOPUY.js.map b/node_modules/@metamask/transaction-controller/dist/chunk-S6VGOPUY.js.map -deleted file mode 100644 -index cf80a78..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-S6VGOPUY.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/logger.ts"],"names":[],"mappings":";AAEA,SAAS,qBAAqB,0BAA0B;AAEjD,IAAM,gBAAgB,oBAAoB,wBAAwB;AAElE,IAAM,6BAA6B;AAAA,EACxC;AAAA,EACA;AACF","sourcesContent":["/* istanbul ignore file */\n\nimport { createProjectLogger, createModuleLogger } from '@metamask/utils';\n\nexport const projectLogger = createProjectLogger('transaction-controller');\n\nexport const incomingTransactionsLogger = createModuleLogger(\n projectLogger,\n 'incoming-transactions',\n);\n\nexport { createModuleLogger };\n"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-S7Q622IS.js.map b/node_modules/@metamask/transaction-controller/dist/chunk-S7Q622IS.js.map -deleted file mode 100644 -index a170538..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-S7Q622IS.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/TransactionController.ts"],"names":["ApprovalState","transactionMeta"],"mappings":"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","sourcesContent":["import { Hardfork, Common, type ChainConfig } from '@ethereumjs/common';\nimport type { TypedTransaction } from '@ethereumjs/tx';\nimport { TransactionFactory } from '@ethereumjs/tx';\nimport { bufferToHex } from '@ethereumjs/util';\nimport type { AccountsControllerGetSelectedAccountAction } from '@metamask/accounts-controller';\nimport type {\n AcceptResultCallbacks,\n AddApprovalRequest,\n AddResult,\n} from '@metamask/approval-controller';\nimport type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n RestrictedControllerMessenger,\n} from '@metamask/base-controller';\nimport { BaseController } from '@metamask/base-controller';\nimport {\n query,\n ApprovalType,\n ORIGIN_METAMASK,\n convertHexToDecimal,\n isInfuraNetworkType,\n} from '@metamask/controller-utils';\nimport EthQuery from '@metamask/eth-query';\nimport type {\n FetchGasFeeEstimateOptions,\n GasFeeState,\n} from '@metamask/gas-fee-controller';\nimport type {\n BlockTracker,\n NetworkClientId,\n NetworkController,\n NetworkControllerStateChangeEvent,\n NetworkState,\n Provider,\n NetworkControllerFindNetworkClientIdByChainIdAction,\n NetworkControllerGetNetworkClientByIdAction,\n} from '@metamask/network-controller';\nimport { NetworkClientType } from '@metamask/network-controller';\nimport type {\n NonceLock,\n Transaction as NonceTrackerTransaction,\n} from '@metamask/nonce-tracker';\nimport { NonceTracker } from '@metamask/nonce-tracker';\nimport { errorCodes, rpcErrors, providerErrors } from '@metamask/rpc-errors';\nimport type { Hex } from '@metamask/utils';\nimport { add0x } from '@metamask/utils';\nimport { Mutex } from 'async-mutex';\nimport { MethodRegistry } from 'eth-method-registry';\nimport { EventEmitter } from 'events';\nimport { cloneDeep, mapValues, merge, pickBy, sortBy, isEqual } from 'lodash';\nimport { v1 as random } from 'uuid';\n\nimport { DefaultGasFeeFlow } from './gas-flows/DefaultGasFeeFlow';\nimport { LineaGasFeeFlow } from './gas-flows/LineaGasFeeFlow';\nimport { OptimismLayer1GasFeeFlow } from './gas-flows/OptimismLayer1GasFeeFlow';\nimport { ScrollLayer1GasFeeFlow } from './gas-flows/ScrollLayer1GasFeeFlow';\nimport { TestGasFeeFlow } from './gas-flows/TestGasFeeFlow';\nimport { EtherscanRemoteTransactionSource } from './helpers/EtherscanRemoteTransactionSource';\nimport { GasFeePoller } from './helpers/GasFeePoller';\nimport type { IncomingTransactionOptions } from './helpers/IncomingTransactionHelper';\nimport { IncomingTransactionHelper } from './helpers/IncomingTransactionHelper';\nimport { MultichainTrackingHelper } from './helpers/MultichainTrackingHelper';\nimport { PendingTransactionTracker } from './helpers/PendingTransactionTracker';\nimport { projectLogger as log } from './logger';\nimport type {\n DappSuggestedGasFees,\n Layer1GasFeeFlow,\n SavedGasFees,\n SecurityProviderRequest,\n SendFlowHistoryEntry,\n TransactionParams,\n TransactionMeta,\n TransactionReceipt,\n WalletDevice,\n SecurityAlertResponse,\n GasFeeFlow,\n SimulationData,\n GasFeeEstimates,\n GasFeeFlowResponse,\n} from './types';\nimport {\n TransactionEnvelopeType,\n TransactionType,\n TransactionStatus,\n SimulationErrorCode,\n} from './types';\nimport { validateConfirmedExternalTransaction } from './utils/external-transactions';\nimport { addGasBuffer, estimateGas, updateGas } from './utils/gas';\nimport { updateGasFees } from './utils/gas-fees';\nimport { getGasFeeFlow } from './utils/gas-flow';\nimport {\n addInitialHistorySnapshot,\n updateTransactionHistory,\n} from './utils/history';\nimport {\n getTransactionLayer1GasFee,\n updateTransactionLayer1GasFee,\n} from './utils/layer1-gas-fee-flow';\nimport {\n getAndFormatTransactionsForNonceTracker,\n getNextNonce,\n} from './utils/nonce';\nimport { getSimulationData } from './utils/simulation';\nimport {\n updatePostTransactionBalance,\n updateSwapsTransaction,\n} from './utils/swaps';\nimport { determineTransactionType } from './utils/transaction-type';\nimport {\n getIncreasedPriceFromExisting,\n normalizeTransactionParams,\n isEIP1559Transaction,\n isFeeMarketEIP1559Values,\n isGasPriceValue,\n validateGasValues,\n validateIfTransactionUnapproved,\n validateMinimumIncrease,\n normalizeTxError,\n normalizeGasFeeValues,\n} from './utils/utils';\nimport {\n validateTransactionOrigin,\n validateTxParams,\n} from './utils/validation';\n\n/**\n * Metadata for the TransactionController state, describing how to \"anonymize\"\n * the state and which parts should be persisted.\n */\nconst metadata = {\n transactions: {\n persist: true,\n anonymous: false,\n },\n methodData: {\n persist: true,\n anonymous: false,\n },\n lastFetchedBlockNumbers: {\n persist: true,\n anonymous: false,\n },\n};\n\nexport const HARDFORK = Hardfork.London;\n\n/**\n * Object with new transaction's meta and a promise resolving to the\n * transaction hash if successful.\n *\n * @property result - Promise resolving to a new transaction hash\n * @property transactionMeta - Meta information about this new transaction\n */\n// This interface was created before this ESLint rule was added.\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface Result {\n result: Promise;\n transactionMeta: TransactionMeta;\n}\n\n// This interface was created before this ESLint rule was added.\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface GasPriceValue {\n gasPrice: string;\n}\n\n// This interface was created before this ESLint rule was added.\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface FeeMarketEIP1559Values {\n maxFeePerGas: string;\n maxPriorityFeePerGas: string;\n}\n\n/**\n * Method data registry object\n *\n * @property registryMethod - Registry method raw string\n * @property parsedRegistryMethod - Registry method object, containing name and method arguments\n */\nexport type MethodData = {\n registryMethod: string;\n parsedRegistryMethod:\n | {\n name: string;\n args: { type: string }[];\n }\n | {\n // We're using `any` instead of `undefined` for compatibility with `Json`\n // TODO: Correct this type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n name?: any;\n // We're using `any` instead of `undefined` for compatibility with `Json`\n // TODO: Correct this type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n args?: any;\n };\n};\n\n/**\n * Transaction controller state\n *\n * @property transactions - A list of TransactionMeta objects\n * @property methodData - Object containing all known method data information\n * @property lastFetchedBlockNumbers - Last fetched block numbers.\n */\nexport type TransactionControllerState = {\n transactions: TransactionMeta[];\n methodData: Record;\n lastFetchedBlockNumbers: { [key: string]: number };\n};\n\n/**\n * Multiplier used to determine a transaction's increased gas fee during cancellation\n */\nexport const CANCEL_RATE = 1.1;\n\n/**\n * Multiplier used to determine a transaction's increased gas fee during speed up\n */\nexport const SPEED_UP_RATE = 1.1;\n\n/**\n * Represents the `TransactionController:getState` action.\n */\nexport type TransactionControllerGetStateAction = ControllerGetStateAction<\n typeof controllerName,\n TransactionControllerState\n>;\n\n/**\n * The internal actions available to the TransactionController.\n */\nexport type TransactionControllerActions = TransactionControllerGetStateAction;\n\n/**\n * Configuration options for the PendingTransactionTracker\n *\n * @property isResubmitEnabled - Whether transaction publishing is automatically retried.\n */\nexport type PendingTransactionOptions = {\n isResubmitEnabled?: () => boolean;\n};\n\n/**\n * TransactionController constructor options.\n *\n * @property blockTracker - The block tracker used to poll for new blocks data.\n * @property disableHistory - Whether to disable storing history in transaction metadata.\n * @property disableSendFlowHistory - Explicitly disable transaction metadata history.\n * @property disableSwaps - Whether to disable additional processing on swaps transactions.\n * @property getCurrentAccountEIP1559Compatibility - Whether or not the account supports EIP-1559.\n * @property getCurrentNetworkEIP1559Compatibility - Whether or not the network supports EIP-1559.\n * @property getExternalPendingTransactions - Callback to retrieve pending transactions from external sources.\n * @property getGasFeeEstimates - Callback to retrieve gas fee estimates.\n * @property getNetworkClientRegistry - Gets the network client registry.\n * @property getNetworkState - Gets the state of the network controller.\n * @property getPermittedAccounts - Get accounts that a given origin has permissions for.\n * @property getSavedGasFees - Gets the saved gas fee config.\n * @property getSelectedAddress - Gets the address of the currently selected account.\n * @property incomingTransactions - Configuration options for incoming transaction support.\n * @property isMultichainEnabled - Enable multichain support.\n * @property isSimulationEnabled - Whether new transactions will be automatically simulated.\n * @property messenger - The controller messenger.\n * @property onNetworkStateChange - Allows subscribing to network controller state changes.\n * @property pendingTransactions - Configuration options for pending transaction support.\n * @property provider - The provider used to create the underlying EthQuery instance.\n * @property securityProviderRequest - A function for verifying a transaction, whether it is malicious or not.\n * @property sign - Function used to sign transactions.\n * @property state - Initial state to set on this controller.\n * @property transactionHistoryLimit - Transaction history limit.\n * @property hooks - The controller hooks.\n * @property hooks.afterSign - Additional logic to execute after signing a transaction. Return false to not change the status to signed.\n * @property hooks.beforeApproveOnInit - Additional logic to execute before starting an approval flow for a transaction during initialization. Return false to skip the transaction.\n * @property hooks.beforeCheckPendingTransaction - Additional logic to execute before checking pending transactions. Return false to prevent the broadcast of the transaction.\n * @property hooks.beforePublish - Additional logic to execute before publishing a transaction. Return false to prevent the broadcast of the transaction.\n * @property hooks.getAdditionalSignArguments - Returns additional arguments required to sign a transaction.\n * @property hooks.publish - Alternate logic to publish a transaction.\n */\nexport type TransactionControllerOptions = {\n blockTracker: BlockTracker;\n disableHistory: boolean;\n disableSendFlowHistory: boolean;\n disableSwaps: boolean;\n getCurrentAccountEIP1559Compatibility?: () => Promise;\n getCurrentNetworkEIP1559Compatibility: () => Promise;\n getExternalPendingTransactions?: (\n address: string,\n chainId?: string,\n ) => NonceTrackerTransaction[];\n getGasFeeEstimates?: (\n options: FetchGasFeeEstimateOptions,\n ) => Promise;\n getNetworkClientRegistry: NetworkController['getNetworkClientRegistry'];\n getNetworkState: () => NetworkState;\n getPermittedAccounts: (origin?: string) => Promise;\n getSavedGasFees?: (chainId: Hex) => SavedGasFees | undefined;\n incomingTransactions?: IncomingTransactionOptions;\n isMultichainEnabled: boolean;\n isSimulationEnabled?: () => boolean;\n messenger: TransactionControllerMessenger;\n onNetworkStateChange: (listener: (state: NetworkState) => void) => void;\n pendingTransactions?: PendingTransactionOptions;\n provider: Provider;\n securityProviderRequest?: SecurityProviderRequest;\n sign?: (\n transaction: TypedTransaction,\n from: string,\n transactionMeta?: TransactionMeta,\n ) => Promise;\n state?: Partial;\n testGasFeeFlows?: boolean;\n transactionHistoryLimit: number;\n hooks: {\n afterSign?: (\n transactionMeta: TransactionMeta,\n signedTx: TypedTransaction,\n ) => boolean;\n beforeApproveOnInit?: (transactionMeta: TransactionMeta) => boolean;\n beforeCheckPendingTransaction?: (\n transactionMeta: TransactionMeta,\n ) => boolean;\n beforePublish?: (transactionMeta: TransactionMeta) => boolean;\n getAdditionalSignArguments?: (\n transactionMeta: TransactionMeta,\n ) => (TransactionMeta | undefined)[];\n publish?: (\n transactionMeta: TransactionMeta,\n ) => Promise<{ transactionHash: string }>;\n };\n};\n\n/**\n * The name of the {@link TransactionController}.\n */\nconst controllerName = 'TransactionController';\n\n/**\n * The external actions available to the {@link TransactionController}.\n */\nexport type AllowedActions =\n | AddApprovalRequest\n | NetworkControllerFindNetworkClientIdByChainIdAction\n | NetworkControllerGetNetworkClientByIdAction\n | AccountsControllerGetSelectedAccountAction;\n\n/**\n * The external events available to the {@link TransactionController}.\n */\nexport type AllowedEvents = NetworkControllerStateChangeEvent;\n\n/**\n * Represents the `TransactionController:stateChange` event.\n */\nexport type TransactionControllerStateChangeEvent = ControllerStateChangeEvent<\n typeof controllerName,\n TransactionControllerState\n>;\n\n/**\n * Represents the `TransactionController:incomingTransactionBlockReceived` event.\n */\nexport type TransactionControllerIncomingTransactionBlockReceivedEvent = {\n type: `${typeof controllerName}:incomingTransactionBlockReceived`;\n payload: [blockNumber: number];\n};\n\n/**\n * Represents the `TransactionController:postTransactionBalanceUpdated` event.\n */\nexport type TransactionControllerPostTransactionBalanceUpdatedEvent = {\n type: `${typeof controllerName}:postTransactionBalanceUpdated`;\n payload: [\n {\n transactionMeta: TransactionMeta;\n approvalTransactionMeta?: TransactionMeta;\n },\n ];\n};\n\n/**\n * Represents the `TransactionController:speedUpTransactionAdded` event.\n */\nexport type TransactionControllerSpeedupTransactionAddedEvent = {\n type: `${typeof controllerName}:speedupTransactionAdded`;\n payload: [transactionMeta: TransactionMeta];\n};\n\n/**\n * Represents the `TransactionController:transactionApproved` event.\n */\nexport type TransactionControllerTransactionApprovedEvent = {\n type: `${typeof controllerName}:transactionApproved`;\n payload: [\n {\n transactionMeta: TransactionMeta;\n actionId?: string;\n },\n ];\n};\n\n/**\n * Represents the `TransactionController:transactionConfirmed` event.\n */\nexport type TransactionControllerTransactionConfirmedEvent = {\n type: `${typeof controllerName}:transactionConfirmed`;\n payload: [transactionMeta: TransactionMeta];\n};\n\n/**\n * Represents the `TransactionController:transactionDropped` event.\n */\nexport type TransactionControllerTransactionDroppedEvent = {\n type: `${typeof controllerName}:transactionDropped`;\n payload: [{ transactionMeta: TransactionMeta }];\n};\n\n/**\n * Represents the `TransactionController:transactionFailed` event.\n */\nexport type TransactionControllerTransactionFailedEvent = {\n type: `${typeof controllerName}:transactionFailed`;\n payload: [\n {\n actionId?: string;\n error: string;\n transactionMeta: TransactionMeta;\n },\n ];\n};\n\n/**\n * Represents the `TransactionController:transactionFinished` event.\n */\nexport type TransactionControllerTransactionFinishedEvent = {\n type: `${typeof controllerName}:transactionFinished`;\n payload: [transactionMeta: TransactionMeta];\n};\n\n/**\n * Represents the `TransactionController:transactionNewSwapApproval` event.\n */\nexport type TransactionControllerTransactionNewSwapApprovalEvent = {\n type: `${typeof controllerName}:transactionNewSwapApproval`;\n payload: [{ transactionMeta: TransactionMeta }];\n};\n\n/**\n * Represents the `TransactionController:transactionNewSwap` event.\n */\nexport type TransactionControllerTransactionNewSwapEvent = {\n type: `${typeof controllerName}:transactionNewSwap`;\n payload: [{ transactionMeta: TransactionMeta }];\n};\n\n/**\n * Represents the `TransactionController:transactionNewSwapApproval` event.\n */\nexport type TransactionControllerTransactionNewSwapAndSendEvent = {\n type: `${typeof controllerName}:transactionNewSwapAndSend`;\n payload: [{ transactionMeta: TransactionMeta }];\n};\n\n/**\n * Represents the `TransactionController:transactionPublishingSkipped` event.\n */\nexport type TransactionControllerTransactionPublishingSkipped = {\n type: `${typeof controllerName}:transactionPublishingSkipped`;\n payload: [transactionMeta: TransactionMeta];\n};\n\n/**\n * Represents the `TransactionController:transactionRejected` event.\n */\nexport type TransactionControllerTransactionRejectedEvent = {\n type: `${typeof controllerName}:transactionRejected`;\n payload: [\n {\n transactionMeta: TransactionMeta;\n actionId?: string;\n },\n ];\n};\n\n/**\n * Represents the `TransactionController:transactionStatusUpdated` event.\n */\nexport type TransactionControllerTransactionStatusUpdatedEvent = {\n type: `${typeof controllerName}:transactionStatusUpdated`;\n payload: [\n {\n transactionMeta: TransactionMeta;\n },\n ];\n};\n\n/**\n * Represents the `TransactionController:transactionSubmitted` event.\n */\nexport type TransactionControllerTransactionSubmittedEvent = {\n type: `${typeof controllerName}:transactionSubmitted`;\n payload: [\n {\n transactionMeta: TransactionMeta;\n actionId?: string;\n },\n ];\n};\n\n/**\n * Represents the `TransactionController:unapprovedTransactionAdded` event.\n */\nexport type TransactionControllerUnapprovedTransactionAddedEvent = {\n type: `${typeof controllerName}:unapprovedTransactionAdded`;\n payload: [transactionMeta: TransactionMeta];\n};\n\n/**\n * The internal events available to the {@link TransactionController}.\n */\nexport type TransactionControllerEvents =\n | TransactionControllerIncomingTransactionBlockReceivedEvent\n | TransactionControllerPostTransactionBalanceUpdatedEvent\n | TransactionControllerSpeedupTransactionAddedEvent\n | TransactionControllerStateChangeEvent\n | TransactionControllerTransactionApprovedEvent\n | TransactionControllerTransactionConfirmedEvent\n | TransactionControllerTransactionDroppedEvent\n | TransactionControllerTransactionFailedEvent\n | TransactionControllerTransactionFinishedEvent\n | TransactionControllerTransactionNewSwapApprovalEvent\n | TransactionControllerTransactionNewSwapEvent\n | TransactionControllerTransactionNewSwapAndSendEvent\n | TransactionControllerTransactionPublishingSkipped\n | TransactionControllerTransactionRejectedEvent\n | TransactionControllerTransactionStatusUpdatedEvent\n | TransactionControllerTransactionSubmittedEvent\n | TransactionControllerUnapprovedTransactionAddedEvent;\n\n/**\n * The messenger of the {@link TransactionController}.\n */\nexport type TransactionControllerMessenger = RestrictedControllerMessenger<\n typeof controllerName,\n TransactionControllerActions | AllowedActions,\n TransactionControllerEvents | AllowedEvents,\n AllowedActions['type'],\n AllowedEvents['type']\n>;\n\n/**\n * Possible states of the approve transaction step.\n */\nexport enum ApprovalState {\n Approved = 'approved',\n NotApproved = 'not-approved',\n SkippedViaBeforePublishHook = 'skipped-via-before-publish-hook',\n}\n\n/**\n * Get the default TransactionsController state.\n *\n * @returns The default TransactionsController state.\n */\nfunction getDefaultTransactionControllerState(): TransactionControllerState {\n return {\n methodData: {},\n transactions: [],\n lastFetchedBlockNumbers: {},\n };\n}\n\n/**\n * Controller responsible for submitting and managing transactions.\n */\nexport class TransactionController extends BaseController<\n typeof controllerName,\n TransactionControllerState,\n TransactionControllerMessenger\n> {\n #internalEvents = new EventEmitter();\n\n private readonly isHistoryDisabled: boolean;\n\n private readonly isSwapsDisabled: boolean;\n\n private readonly isSendFlowHistoryDisabled: boolean;\n\n private readonly approvingTransactionIds: Set = new Set();\n\n private readonly nonceTracker: NonceTracker;\n\n private readonly registry: MethodRegistry;\n\n private readonly mutex = new Mutex();\n\n private readonly gasFeeFlows: GasFeeFlow[];\n\n private readonly getSavedGasFees: (chainId: Hex) => SavedGasFees | undefined;\n\n private readonly getNetworkState: () => NetworkState;\n\n private readonly getCurrentAccountEIP1559Compatibility: () => Promise;\n\n private readonly getCurrentNetworkEIP1559Compatibility: (\n networkClientId?: NetworkClientId,\n ) => Promise;\n\n private readonly getGasFeeEstimates: (\n options: FetchGasFeeEstimateOptions,\n ) => Promise;\n\n private readonly getPermittedAccounts: (origin?: string) => Promise;\n\n private readonly getExternalPendingTransactions: (\n address: string,\n chainId?: string,\n ) => NonceTrackerTransaction[];\n\n private readonly layer1GasFeeFlows: Layer1GasFeeFlow[];\n\n readonly #incomingTransactionOptions: IncomingTransactionOptions;\n\n private readonly incomingTransactionHelper: IncomingTransactionHelper;\n\n private readonly securityProviderRequest?: SecurityProviderRequest;\n\n readonly #pendingTransactionOptions: PendingTransactionOptions;\n\n private readonly pendingTransactionTracker: PendingTransactionTracker;\n\n private readonly signAbortCallbacks: Map void> = new Map();\n\n #transactionHistoryLimit: number;\n\n #isSimulationEnabled: () => boolean;\n\n #testGasFeeFlows: boolean;\n\n private readonly afterSign: (\n transactionMeta: TransactionMeta,\n signedTx: TypedTransaction,\n ) => boolean;\n\n private readonly beforeApproveOnInit: (\n transactionMeta: TransactionMeta,\n ) => boolean;\n\n private readonly beforeCheckPendingTransaction: (\n transactionMeta: TransactionMeta,\n ) => boolean;\n\n private readonly beforePublish: (transactionMeta: TransactionMeta) => boolean;\n\n private readonly publish: (\n transactionMeta: TransactionMeta,\n rawTx: string,\n ) => Promise<{ transactionHash?: string }>;\n\n private readonly getAdditionalSignArguments: (\n transactionMeta: TransactionMeta,\n ) => (TransactionMeta | undefined)[];\n\n private failTransaction(\n transactionMeta: TransactionMeta,\n error: Error,\n actionId?: string,\n ) {\n const newTransactionMeta = merge({}, transactionMeta, {\n error: normalizeTxError(error),\n status: TransactionStatus.failed as const,\n });\n this.messagingSystem.publish(`${controllerName}:transactionFailed`, {\n actionId,\n error: error.message,\n transactionMeta: newTransactionMeta,\n });\n this.updateTransaction(\n newTransactionMeta,\n 'TransactionController#failTransaction - Add error message and set status to failed',\n );\n this.onTransactionStatusChange(newTransactionMeta);\n this.messagingSystem.publish(\n `${controllerName}:transactionFinished`,\n newTransactionMeta,\n );\n this.#internalEvents.emit(\n `${transactionMeta.id}:finished`,\n newTransactionMeta,\n );\n }\n\n private async registryLookup(fourBytePrefix: string): Promise {\n const registryMethod = await this.registry.lookup(fourBytePrefix);\n if (!registryMethod) {\n return {\n registryMethod: '',\n parsedRegistryMethod: { name: undefined, args: undefined },\n };\n }\n const parsedRegistryMethod = this.registry.parse(registryMethod);\n return { registryMethod, parsedRegistryMethod };\n }\n\n #multichainTrackingHelper: MultichainTrackingHelper;\n\n /**\n * Method used to sign transactions\n */\n sign?: (\n transaction: TypedTransaction,\n from: string,\n transactionMeta?: TransactionMeta,\n ) => Promise;\n\n /**\n * Constructs a TransactionController.\n *\n * @param options - The controller options.\n * @param options.blockTracker - The block tracker used to poll for new blocks data.\n * @param options.disableHistory - Whether to disable storing history in transaction metadata.\n * @param options.disableSendFlowHistory - Explicitly disable transaction metadata history.\n * @param options.disableSwaps - Whether to disable additional processing on swaps transactions.\n * @param options.getCurrentAccountEIP1559Compatibility - Whether or not the account supports EIP-1559.\n * @param options.getCurrentNetworkEIP1559Compatibility - Whether or not the network supports EIP-1559.\n * @param options.getExternalPendingTransactions - Callback to retrieve pending transactions from external sources.\n * @param options.getGasFeeEstimates - Callback to retrieve gas fee estimates.\n * @param options.getNetworkClientRegistry - Gets the network client registry.\n * @param options.getNetworkState - Gets the state of the network controller.\n * @param options.getPermittedAccounts - Get accounts that a given origin has permissions for.\n * @param options.getSavedGasFees - Gets the saved gas fee config.\n * @param options.incomingTransactions - Configuration options for incoming transaction support.\n * @param options.isMultichainEnabled - Enable multichain support.\n * @param options.isSimulationEnabled - Whether new transactions will be automatically simulated.\n * @param options.messenger - The controller messenger.\n * @param options.onNetworkStateChange - Allows subscribing to network controller state changes.\n * @param options.pendingTransactions - Configuration options for pending transaction support.\n * @param options.provider - The provider used to create the underlying EthQuery instance.\n * @param options.securityProviderRequest - A function for verifying a transaction, whether it is malicious or not.\n * @param options.sign - Function used to sign transactions.\n * @param options.state - Initial state to set on this controller.\n * @param options.testGasFeeFlows - Whether to use the test gas fee flow.\n * @param options.transactionHistoryLimit - Transaction history limit.\n * @param options.hooks - The controller hooks.\n */\n constructor({\n blockTracker,\n disableHistory,\n disableSendFlowHistory,\n disableSwaps,\n getCurrentAccountEIP1559Compatibility,\n getCurrentNetworkEIP1559Compatibility,\n getExternalPendingTransactions,\n getGasFeeEstimates,\n getNetworkClientRegistry,\n getNetworkState,\n getPermittedAccounts,\n getSavedGasFees,\n incomingTransactions = {},\n isMultichainEnabled = false,\n isSimulationEnabled,\n messenger,\n onNetworkStateChange,\n pendingTransactions = {},\n provider,\n securityProviderRequest,\n sign,\n state,\n testGasFeeFlows,\n transactionHistoryLimit = 40,\n hooks,\n }: TransactionControllerOptions) {\n super({\n name: controllerName,\n metadata,\n messenger,\n state: {\n ...getDefaultTransactionControllerState(),\n ...state,\n },\n });\n\n this.messagingSystem = messenger;\n this.getNetworkState = getNetworkState;\n this.isSendFlowHistoryDisabled = disableSendFlowHistory ?? false;\n this.isHistoryDisabled = disableHistory ?? false;\n this.isSwapsDisabled = disableSwaps ?? false;\n this.#isSimulationEnabled = isSimulationEnabled ?? (() => true);\n // @ts-expect-error the type in eth-method-registry is inappropriate and should be changed\n this.registry = new MethodRegistry({ provider });\n this.getSavedGasFees = getSavedGasFees ?? ((_chainId) => undefined);\n this.getCurrentAccountEIP1559Compatibility =\n getCurrentAccountEIP1559Compatibility ?? (() => Promise.resolve(true));\n this.getCurrentNetworkEIP1559Compatibility =\n getCurrentNetworkEIP1559Compatibility;\n this.getGasFeeEstimates =\n getGasFeeEstimates || (() => Promise.resolve({} as GasFeeState));\n this.getPermittedAccounts = getPermittedAccounts;\n this.getExternalPendingTransactions =\n getExternalPendingTransactions ?? (() => []);\n this.securityProviderRequest = securityProviderRequest;\n this.#incomingTransactionOptions = incomingTransactions;\n this.#pendingTransactionOptions = pendingTransactions;\n this.#transactionHistoryLimit = transactionHistoryLimit;\n this.sign = sign;\n this.#testGasFeeFlows = testGasFeeFlows === true;\n\n this.afterSign = hooks?.afterSign ?? (() => true);\n this.beforeApproveOnInit = hooks?.beforeApproveOnInit ?? (() => true);\n this.beforeCheckPendingTransaction =\n hooks?.beforeCheckPendingTransaction ??\n /* istanbul ignore next */\n (() => true);\n this.beforePublish = hooks?.beforePublish ?? (() => true);\n this.getAdditionalSignArguments =\n hooks?.getAdditionalSignArguments ?? (() => []);\n this.publish =\n hooks?.publish ?? (() => Promise.resolve({ transactionHash: undefined }));\n\n this.nonceTracker = this.#createNonceTracker({\n provider,\n blockTracker,\n });\n\n const findNetworkClientIdByChainId = (chainId: Hex) => {\n return this.messagingSystem.call(\n `NetworkController:findNetworkClientIdByChainId`,\n chainId,\n );\n };\n\n this.#multichainTrackingHelper = new MultichainTrackingHelper({\n isMultichainEnabled,\n provider,\n nonceTracker: this.nonceTracker,\n incomingTransactionOptions: incomingTransactions,\n findNetworkClientIdByChainId,\n getNetworkClientById: ((networkClientId: NetworkClientId) => {\n return this.messagingSystem.call(\n `NetworkController:getNetworkClientById`,\n networkClientId,\n );\n }) as NetworkController['getNetworkClientById'],\n getNetworkClientRegistry,\n removeIncomingTransactionHelperListeners:\n this.#removeIncomingTransactionHelperListeners.bind(this),\n removePendingTransactionTrackerListeners:\n this.#removePendingTransactionTrackerListeners.bind(this),\n createNonceTracker: this.#createNonceTracker.bind(this),\n createIncomingTransactionHelper:\n this.#createIncomingTransactionHelper.bind(this),\n createPendingTransactionTracker:\n this.#createPendingTransactionTracker.bind(this),\n onNetworkStateChange: (listener) => {\n this.messagingSystem.subscribe(\n 'NetworkController:stateChange',\n listener,\n );\n },\n });\n this.#multichainTrackingHelper.initialize();\n\n const etherscanRemoteTransactionSource =\n new EtherscanRemoteTransactionSource({\n includeTokenTransfers: incomingTransactions.includeTokenTransfers,\n });\n\n this.incomingTransactionHelper = this.#createIncomingTransactionHelper({\n blockTracker,\n etherscanRemoteTransactionSource,\n });\n\n this.pendingTransactionTracker = this.#createPendingTransactionTracker({\n provider,\n blockTracker,\n });\n\n this.gasFeeFlows = this.#getGasFeeFlows();\n this.layer1GasFeeFlows = this.#getLayer1GasFeeFlows();\n\n const gasFeePoller = new GasFeePoller({\n findNetworkClientIdByChainId,\n gasFeeFlows: this.gasFeeFlows,\n getGasFeeControllerEstimates: this.getGasFeeEstimates,\n getProvider: (chainId, networkClientId) =>\n this.#multichainTrackingHelper.getProvider({\n networkClientId,\n chainId,\n }),\n getTransactions: () => this.state.transactions,\n layer1GasFeeFlows: this.layer1GasFeeFlows,\n onStateChange: (listener) => {\n this.messagingSystem.subscribe(\n 'TransactionController:stateChange',\n listener,\n );\n },\n });\n\n gasFeePoller.hub.on(\n 'transaction-updated',\n this.#onGasFeePollerTransactionUpdate.bind(this),\n );\n\n // when transactionsController state changes\n // check for pending transactions and start polling if there are any\n this.messagingSystem.subscribe(\n 'TransactionController:stateChange',\n this.#checkForPendingTransactionAndStartPolling,\n );\n\n // TODO once v2 is merged make sure this only runs when\n // selectedNetworkClientId changes\n onNetworkStateChange(() => {\n log('Detected network change', this.getChainId());\n this.pendingTransactionTracker.startIfPendingTransactions();\n this.onBootCleanup();\n });\n\n this.onBootCleanup();\n this.#checkForPendingTransactionAndStartPolling();\n }\n\n /**\n * Stops polling and removes listeners to prepare the controller for garbage collection.\n */\n destroy() {\n this.#stopAllTracking();\n }\n\n /**\n * Handle new method data request.\n *\n * @param fourBytePrefix - The method prefix.\n * @returns The method data object corresponding to the given signature prefix.\n */\n async handleMethodData(fourBytePrefix: string): Promise {\n const releaseLock = await this.mutex.acquire();\n try {\n const { methodData } = this.state;\n const knownMethod = Object.keys(methodData).find(\n (knownFourBytePrefix) => fourBytePrefix === knownFourBytePrefix,\n );\n if (knownMethod) {\n return methodData[fourBytePrefix];\n }\n const registry = await this.registryLookup(fourBytePrefix);\n this.update((state) => {\n state.methodData[fourBytePrefix] = registry;\n });\n return registry;\n } finally {\n releaseLock();\n }\n }\n\n /**\n * Add a new unapproved transaction to state. Parameters will be validated, a\n * unique transaction id will be generated, and gas and gasPrice will be calculated\n * if not provided. If A `:unapproved` hub event will be emitted once added.\n *\n * @param txParams - Standard parameters for an Ethereum transaction.\n * @param opts - Additional options to control how the transaction is added.\n * @param opts.actionId - Unique ID to prevent duplicate requests.\n * @param opts.deviceConfirmedOn - An enum to indicate what device confirmed the transaction.\n * @param opts.method - RPC method that requested the transaction.\n * @param opts.origin - The origin of the transaction request, such as a dApp hostname.\n * @param opts.requireApproval - Whether the transaction requires approval by the user, defaults to true unless explicitly disabled.\n * @param opts.securityAlertResponse - Response from security validator.\n * @param opts.sendFlowHistory - The sendFlowHistory entries to add.\n * @param opts.type - Type of transaction to add, such as 'cancel' or 'swap'.\n * @param opts.swaps - Options for swaps transactions.\n * @param opts.swaps.hasApproveTx - Whether the transaction has an approval transaction.\n * @param opts.swaps.meta - Metadata for swap transaction.\n * @param opts.networkClientId - The id of the network client for this transaction.\n * @returns Object containing a promise resolving to the transaction hash if approved.\n */\n async addTransaction(\n txParams: TransactionParams,\n {\n actionId,\n deviceConfirmedOn,\n method,\n origin,\n requireApproval,\n securityAlertResponse,\n sendFlowHistory,\n swaps = {},\n type,\n networkClientId: requestNetworkClientId,\n }: {\n actionId?: string;\n deviceConfirmedOn?: WalletDevice;\n method?: string;\n origin?: string;\n requireApproval?: boolean | undefined;\n securityAlertResponse?: SecurityAlertResponse;\n sendFlowHistory?: SendFlowHistoryEntry[];\n swaps?: {\n hasApproveTx?: boolean;\n meta?: Partial;\n };\n type?: TransactionType;\n networkClientId?: NetworkClientId;\n } = {},\n ): Promise {\n log('Adding transaction', txParams);\n\n txParams = normalizeTransactionParams(txParams);\n if (\n requestNetworkClientId &&\n !this.#multichainTrackingHelper.has(requestNetworkClientId)\n ) {\n throw new Error(\n 'The networkClientId for this transaction could not be found',\n );\n }\n\n const networkClientId =\n requestNetworkClientId ?? this.#getGlobalNetworkClientId();\n\n const isEIP1559Compatible = await this.getEIP1559Compatibility(\n networkClientId,\n );\n\n validateTxParams(txParams, isEIP1559Compatible);\n\n if (origin) {\n await validateTransactionOrigin(\n await this.getPermittedAccounts(origin),\n this.#getSelectedAccount().address,\n txParams.from,\n origin,\n );\n }\n\n const dappSuggestedGasFees = this.generateDappSuggestedGasFees(\n txParams,\n origin,\n );\n\n const chainId = this.getChainId(networkClientId);\n const ethQuery = this.#multichainTrackingHelper.getEthQuery({\n networkClientId,\n chainId,\n });\n\n const transactionType =\n type ?? (await determineTransactionType(txParams, ethQuery)).type;\n\n const existingTransactionMeta = this.getTransactionWithActionId(actionId);\n\n // If a request to add a transaction with the same actionId is submitted again, a new transaction will not be created for it.\n let addedTransactionMeta = existingTransactionMeta\n ? cloneDeep(existingTransactionMeta)\n : {\n // Add actionId to txMeta to check if same actionId is seen again\n actionId,\n chainId,\n dappSuggestedGasFees,\n deviceConfirmedOn,\n id: random(),\n origin,\n securityAlertResponse,\n status: TransactionStatus.unapproved as const,\n time: Date.now(),\n txParams,\n userEditedGasLimit: false,\n verifiedOnBlockchain: false,\n type: transactionType,\n networkClientId,\n };\n\n await this.updateGasProperties(addedTransactionMeta);\n\n // Checks if a transaction already exists with a given actionId\n if (!existingTransactionMeta) {\n // Set security provider response\n if (method && this.securityProviderRequest) {\n const securityProviderResponse = await this.securityProviderRequest(\n addedTransactionMeta,\n method,\n );\n addedTransactionMeta.securityProviderResponse =\n securityProviderResponse;\n }\n\n if (!this.isSendFlowHistoryDisabled) {\n addedTransactionMeta.sendFlowHistory = sendFlowHistory ?? [];\n }\n // Initial history push\n if (!this.isHistoryDisabled) {\n addedTransactionMeta = addInitialHistorySnapshot(addedTransactionMeta);\n }\n\n addedTransactionMeta = updateSwapsTransaction(\n addedTransactionMeta,\n transactionType,\n swaps,\n {\n isSwapsDisabled: this.isSwapsDisabled,\n cancelTransaction: this.cancelTransaction.bind(this),\n messenger: this.messagingSystem,\n },\n );\n\n this.addMetadata(addedTransactionMeta);\n\n if (requireApproval !== false) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.#updateSimulationData(addedTransactionMeta);\n } else {\n log('Skipping simulation as approval not required');\n }\n\n this.messagingSystem.publish(\n `${controllerName}:unapprovedTransactionAdded`,\n addedTransactionMeta,\n );\n }\n\n return {\n result: this.processApproval(addedTransactionMeta, {\n isExisting: Boolean(existingTransactionMeta),\n requireApproval,\n actionId,\n }),\n transactionMeta: addedTransactionMeta,\n };\n }\n\n startIncomingTransactionPolling(networkClientIds: NetworkClientId[] = []) {\n if (networkClientIds.length === 0) {\n this.incomingTransactionHelper.start();\n return;\n }\n this.#multichainTrackingHelper.startIncomingTransactionPolling(\n networkClientIds,\n );\n }\n\n stopIncomingTransactionPolling(networkClientIds: NetworkClientId[] = []) {\n if (networkClientIds.length === 0) {\n this.incomingTransactionHelper.stop();\n return;\n }\n this.#multichainTrackingHelper.stopIncomingTransactionPolling(\n networkClientIds,\n );\n }\n\n stopAllIncomingTransactionPolling() {\n this.incomingTransactionHelper.stop();\n this.#multichainTrackingHelper.stopAllIncomingTransactionPolling();\n }\n\n async updateIncomingTransactions(networkClientIds: NetworkClientId[] = []) {\n if (networkClientIds.length === 0) {\n await this.incomingTransactionHelper.update();\n return;\n }\n await this.#multichainTrackingHelper.updateIncomingTransactions(\n networkClientIds,\n );\n }\n\n /**\n * Attempts to cancel a transaction based on its ID by setting its status to \"rejected\"\n * and emitting a `:finished` hub event.\n *\n * @param transactionId - The ID of the transaction to cancel.\n * @param gasValues - The gas values to use for the cancellation transaction.\n * @param options - The options for the cancellation transaction.\n * @param options.actionId - Unique ID to prevent duplicate requests.\n * @param options.estimatedBaseFee - The estimated base fee of the transaction.\n */\n async stopTransaction(\n transactionId: string,\n gasValues?: GasPriceValue | FeeMarketEIP1559Values,\n {\n estimatedBaseFee,\n actionId,\n }: { estimatedBaseFee?: string; actionId?: string } = {},\n ) {\n // If transaction is found for same action id, do not create a cancel transaction.\n if (this.getTransactionWithActionId(actionId)) {\n return;\n }\n\n if (gasValues) {\n // Not good practice to reassign a parameter but temporarily avoiding a larger refactor.\n gasValues = normalizeGasFeeValues(gasValues);\n validateGasValues(gasValues);\n }\n\n log('Creating cancel transaction', transactionId, gasValues);\n\n const transactionMeta = this.getTransaction(transactionId);\n if (!transactionMeta) {\n return;\n }\n\n if (!this.sign) {\n throw new Error('No sign method defined.');\n }\n\n // gasPrice (legacy non EIP1559)\n const minGasPrice = getIncreasedPriceFromExisting(\n transactionMeta.txParams.gasPrice,\n CANCEL_RATE,\n );\n\n const gasPriceFromValues = isGasPriceValue(gasValues) && gasValues.gasPrice;\n\n const newGasPrice =\n (gasPriceFromValues &&\n validateMinimumIncrease(gasPriceFromValues, minGasPrice)) ||\n minGasPrice;\n\n // maxFeePerGas (EIP1559)\n const existingMaxFeePerGas = transactionMeta.txParams?.maxFeePerGas;\n const minMaxFeePerGas = getIncreasedPriceFromExisting(\n existingMaxFeePerGas,\n CANCEL_RATE,\n );\n const maxFeePerGasValues =\n isFeeMarketEIP1559Values(gasValues) && gasValues.maxFeePerGas;\n const newMaxFeePerGas =\n (maxFeePerGasValues &&\n validateMinimumIncrease(maxFeePerGasValues, minMaxFeePerGas)) ||\n (existingMaxFeePerGas && minMaxFeePerGas);\n\n // maxPriorityFeePerGas (EIP1559)\n const existingMaxPriorityFeePerGas =\n transactionMeta.txParams?.maxPriorityFeePerGas;\n const minMaxPriorityFeePerGas = getIncreasedPriceFromExisting(\n existingMaxPriorityFeePerGas,\n CANCEL_RATE,\n );\n const maxPriorityFeePerGasValues =\n isFeeMarketEIP1559Values(gasValues) && gasValues.maxPriorityFeePerGas;\n const newMaxPriorityFeePerGas =\n (maxPriorityFeePerGasValues &&\n validateMinimumIncrease(\n maxPriorityFeePerGasValues,\n minMaxPriorityFeePerGas,\n )) ||\n (existingMaxPriorityFeePerGas && minMaxPriorityFeePerGas);\n\n const newTxParams: TransactionParams =\n newMaxFeePerGas && newMaxPriorityFeePerGas\n ? {\n from: transactionMeta.txParams.from,\n gasLimit: transactionMeta.txParams.gas,\n maxFeePerGas: newMaxFeePerGas,\n maxPriorityFeePerGas: newMaxPriorityFeePerGas,\n type: TransactionEnvelopeType.feeMarket,\n nonce: transactionMeta.txParams.nonce,\n to: transactionMeta.txParams.from,\n value: '0x0',\n }\n : {\n from: transactionMeta.txParams.from,\n gasLimit: transactionMeta.txParams.gas,\n gasPrice: newGasPrice,\n nonce: transactionMeta.txParams.nonce,\n to: transactionMeta.txParams.from,\n value: '0x0',\n };\n\n const unsignedEthTx = this.prepareUnsignedEthTx(\n transactionMeta.chainId,\n newTxParams,\n );\n\n const signedTx = await this.sign(\n unsignedEthTx,\n transactionMeta.txParams.from,\n );\n\n const rawTx = bufferToHex(signedTx.serialize());\n\n const newFee = newTxParams.maxFeePerGas ?? newTxParams.gasPrice;\n\n const oldFee = newTxParams.maxFeePerGas\n ? transactionMeta.txParams.maxFeePerGas\n : transactionMeta.txParams.gasPrice;\n\n log('Submitting cancel transaction', {\n oldFee,\n newFee,\n txParams: newTxParams,\n });\n\n const ethQuery = this.#multichainTrackingHelper.getEthQuery({\n networkClientId: transactionMeta.networkClientId,\n chainId: transactionMeta.chainId,\n });\n const hash = await this.publishTransactionForRetry(\n ethQuery,\n rawTx,\n transactionMeta,\n );\n\n const cancelTransactionMeta = {\n actionId,\n chainId: transactionMeta.chainId,\n networkClientId: transactionMeta.networkClientId,\n estimatedBaseFee,\n hash,\n id: random(),\n originalGasEstimate: transactionMeta.txParams.gas,\n status: TransactionStatus.submitted as const,\n time: Date.now(),\n type: TransactionType.cancel as const,\n txParams: newTxParams,\n };\n\n this.addMetadata(cancelTransactionMeta);\n\n // stopTransaction has no approval request, so we assume the user has already approved the transaction\n this.messagingSystem.publish(`${controllerName}:transactionApproved`, {\n transactionMeta: cancelTransactionMeta,\n actionId,\n });\n this.messagingSystem.publish(`${controllerName}:transactionSubmitted`, {\n transactionMeta: cancelTransactionMeta,\n actionId,\n });\n\n this.messagingSystem.publish(\n `${controllerName}:transactionFinished`,\n cancelTransactionMeta,\n );\n this.#internalEvents.emit(\n `${transactionMeta.id}:finished`,\n cancelTransactionMeta,\n );\n }\n\n /**\n * Attempts to speed up a transaction increasing transaction gasPrice by ten percent.\n *\n * @param transactionId - The ID of the transaction to speed up.\n * @param gasValues - The gas values to use for the speed up transaction.\n * @param options - The options for the speed up transaction.\n * @param options.actionId - Unique ID to prevent duplicate requests\n * @param options.estimatedBaseFee - The estimated base fee of the transaction.\n */\n async speedUpTransaction(\n transactionId: string,\n gasValues?: GasPriceValue | FeeMarketEIP1559Values,\n {\n actionId,\n estimatedBaseFee,\n }: { actionId?: string; estimatedBaseFee?: string } = {},\n ) {\n // If transaction is found for same action id, do not create a new speed up transaction.\n if (this.getTransactionWithActionId(actionId)) {\n return;\n }\n\n if (gasValues) {\n // Not good practice to reassign a parameter but temporarily avoiding a larger refactor.\n gasValues = normalizeGasFeeValues(gasValues);\n validateGasValues(gasValues);\n }\n\n log('Creating speed up transaction', transactionId, gasValues);\n\n const transactionMeta = this.getTransaction(transactionId);\n /* istanbul ignore next */\n if (!transactionMeta) {\n return;\n }\n\n /* istanbul ignore next */\n if (!this.sign) {\n throw new Error('No sign method defined.');\n }\n\n // gasPrice (legacy non EIP1559)\n const minGasPrice = getIncreasedPriceFromExisting(\n transactionMeta.txParams.gasPrice,\n SPEED_UP_RATE,\n );\n\n const gasPriceFromValues = isGasPriceValue(gasValues) && gasValues.gasPrice;\n\n const newGasPrice =\n (gasPriceFromValues &&\n validateMinimumIncrease(gasPriceFromValues, minGasPrice)) ||\n minGasPrice;\n\n // maxFeePerGas (EIP1559)\n const existingMaxFeePerGas = transactionMeta.txParams?.maxFeePerGas;\n const minMaxFeePerGas = getIncreasedPriceFromExisting(\n existingMaxFeePerGas,\n SPEED_UP_RATE,\n );\n const maxFeePerGasValues =\n isFeeMarketEIP1559Values(gasValues) && gasValues.maxFeePerGas;\n const newMaxFeePerGas =\n (maxFeePerGasValues &&\n validateMinimumIncrease(maxFeePerGasValues, minMaxFeePerGas)) ||\n (existingMaxFeePerGas && minMaxFeePerGas);\n\n // maxPriorityFeePerGas (EIP1559)\n const existingMaxPriorityFeePerGas =\n transactionMeta.txParams?.maxPriorityFeePerGas;\n const minMaxPriorityFeePerGas = getIncreasedPriceFromExisting(\n existingMaxPriorityFeePerGas,\n SPEED_UP_RATE,\n );\n const maxPriorityFeePerGasValues =\n isFeeMarketEIP1559Values(gasValues) && gasValues.maxPriorityFeePerGas;\n const newMaxPriorityFeePerGas =\n (maxPriorityFeePerGasValues &&\n validateMinimumIncrease(\n maxPriorityFeePerGasValues,\n minMaxPriorityFeePerGas,\n )) ||\n (existingMaxPriorityFeePerGas && minMaxPriorityFeePerGas);\n\n const txParams: TransactionParams =\n newMaxFeePerGas && newMaxPriorityFeePerGas\n ? {\n ...transactionMeta.txParams,\n gasLimit: transactionMeta.txParams.gas,\n maxFeePerGas: newMaxFeePerGas,\n maxPriorityFeePerGas: newMaxPriorityFeePerGas,\n type: TransactionEnvelopeType.feeMarket,\n }\n : {\n ...transactionMeta.txParams,\n gasLimit: transactionMeta.txParams.gas,\n gasPrice: newGasPrice,\n };\n\n const unsignedEthTx = this.prepareUnsignedEthTx(\n transactionMeta.chainId,\n txParams,\n );\n\n const signedTx = await this.sign(\n unsignedEthTx,\n transactionMeta.txParams.from,\n );\n\n const transactionMetaWithRsv = this.updateTransactionMetaRSV(\n transactionMeta,\n signedTx,\n );\n const rawTx = bufferToHex(signedTx.serialize());\n\n const newFee = txParams.maxFeePerGas ?? txParams.gasPrice;\n\n const oldFee = txParams.maxFeePerGas\n ? transactionMetaWithRsv.txParams.maxFeePerGas\n : transactionMetaWithRsv.txParams.gasPrice;\n\n log('Submitting speed up transaction', { oldFee, newFee, txParams });\n\n const ethQuery = this.#multichainTrackingHelper.getEthQuery({\n networkClientId: transactionMeta.networkClientId,\n chainId: transactionMeta.chainId,\n });\n const hash = await this.publishTransactionForRetry(\n ethQuery,\n rawTx,\n transactionMeta,\n );\n\n const baseTransactionMeta = {\n ...transactionMetaWithRsv,\n estimatedBaseFee,\n id: random(),\n time: Date.now(),\n hash,\n actionId,\n originalGasEstimate: transactionMeta.txParams.gas,\n type: TransactionType.retry as const,\n originalType: transactionMeta.type,\n };\n\n const newTransactionMeta =\n newMaxFeePerGas && newMaxPriorityFeePerGas\n ? {\n ...baseTransactionMeta,\n txParams: {\n ...transactionMeta.txParams,\n maxFeePerGas: newMaxFeePerGas,\n maxPriorityFeePerGas: newMaxPriorityFeePerGas,\n },\n }\n : {\n ...baseTransactionMeta,\n txParams: {\n ...transactionMeta.txParams,\n gasPrice: newGasPrice,\n },\n };\n\n this.addMetadata(newTransactionMeta);\n\n // speedUpTransaction has no approval request, so we assume the user has already approved the transaction\n this.messagingSystem.publish(`${controllerName}:transactionApproved`, {\n transactionMeta: newTransactionMeta,\n actionId,\n });\n\n this.messagingSystem.publish(`${controllerName}:transactionSubmitted`, {\n transactionMeta: newTransactionMeta,\n actionId,\n });\n\n this.messagingSystem.publish(\n `${controllerName}:speedupTransactionAdded`,\n newTransactionMeta,\n );\n }\n\n /**\n * Estimates required gas for a given transaction.\n *\n * @param transaction - The transaction to estimate gas for.\n * @param networkClientId - The network client id to use for the estimate.\n * @returns The gas and gas price.\n */\n async estimateGas(\n transaction: TransactionParams,\n networkClientId?: NetworkClientId,\n ) {\n const ethQuery = this.#multichainTrackingHelper.getEthQuery({\n networkClientId,\n });\n const { estimatedGas, simulationFails } = await estimateGas(\n transaction,\n ethQuery,\n );\n\n return { gas: estimatedGas, simulationFails };\n }\n\n /**\n * Estimates required gas for a given transaction and add additional gas buffer with the given multiplier.\n *\n * @param transaction - The transaction params to estimate gas for.\n * @param multiplier - The multiplier to use for the gas buffer.\n * @param networkClientId - The network client id to use for the estimate.\n */\n async estimateGasBuffered(\n transaction: TransactionParams,\n multiplier: number,\n networkClientId?: NetworkClientId,\n ) {\n const ethQuery = this.#multichainTrackingHelper.getEthQuery({\n networkClientId,\n });\n const { blockGasLimit, estimatedGas, simulationFails } = await estimateGas(\n transaction,\n ethQuery,\n );\n\n const gas = addGasBuffer(estimatedGas, blockGasLimit, multiplier);\n\n return {\n gas,\n simulationFails,\n };\n }\n\n /**\n * Updates an existing transaction in state.\n *\n * @param transactionMeta - The new transaction to store in state.\n * @param note - A note or update reason to include in the transaction history.\n */\n updateTransaction(transactionMeta: TransactionMeta, note: string) {\n const { id: transactionId } = transactionMeta;\n\n this.#updateTransactionInternal({ transactionId, note }, () => ({\n ...transactionMeta,\n }));\n }\n\n /**\n * Update the security alert response for a transaction.\n *\n * @param transactionId - ID of the transaction.\n * @param securityAlertResponse - The new security alert response for the transaction.\n */\n updateSecurityAlertResponse(\n transactionId: string,\n securityAlertResponse: SecurityAlertResponse,\n ) {\n if (!securityAlertResponse) {\n throw new Error(\n 'updateSecurityAlertResponse: securityAlertResponse should not be null',\n );\n }\n const transactionMeta = this.getTransaction(transactionId);\n if (!transactionMeta) {\n throw new Error(\n `Cannot update security alert response as no transaction metadata found`,\n );\n }\n const updatedTransactionMeta = {\n ...transactionMeta,\n securityAlertResponse,\n };\n this.updateTransaction(\n updatedTransactionMeta,\n `${controllerName}:updatesecurityAlertResponse - securityAlertResponse updated`,\n );\n }\n\n /**\n * Removes all transactions from state, optionally based on the current network.\n *\n * @param ignoreNetwork - Determines whether to wipe all transactions, or just those on the\n * current network. If `true`, all transactions are wiped.\n * @param address - If specified, only transactions originating from this address will be\n * wiped on current network.\n */\n wipeTransactions(ignoreNetwork?: boolean, address?: string) {\n /* istanbul ignore next */\n if (ignoreNetwork && !address) {\n this.update((state) => {\n state.transactions = [];\n });\n return;\n }\n const currentChainId = this.getChainId();\n const newTransactions = this.state.transactions.filter(\n ({ chainId, txParams }) => {\n const isMatchingNetwork = ignoreNetwork || chainId === currentChainId;\n\n if (!isMatchingNetwork) {\n return true;\n }\n\n const isMatchingAddress =\n !address || txParams.from?.toLowerCase() === address.toLowerCase();\n\n return !isMatchingAddress;\n },\n );\n\n this.update((state) => {\n state.transactions = this.trimTransactionsForState(newTransactions);\n });\n }\n\n /**\n * Adds external provided transaction to state as confirmed transaction.\n *\n * @param transactionMeta - TransactionMeta to add transactions.\n * @param transactionReceipt - TransactionReceipt of the external transaction.\n * @param baseFeePerGas - Base fee per gas of the external transaction.\n */\n async confirmExternalTransaction(\n transactionMeta: TransactionMeta,\n transactionReceipt: TransactionReceipt,\n baseFeePerGas: Hex,\n ) {\n // Run validation and add external transaction to state.\n const newTransactionMeta = this.addExternalTransaction(transactionMeta);\n\n try {\n const transactionId = newTransactionMeta.id;\n\n // Make sure status is confirmed and define gasUsed as in receipt.\n const updatedTransactionMeta = {\n ...newTransactionMeta,\n status: TransactionStatus.confirmed as const,\n txReceipt: transactionReceipt,\n };\n if (baseFeePerGas) {\n updatedTransactionMeta.baseFeePerGas = baseFeePerGas;\n }\n\n // Update same nonce local transactions as dropped and define replacedBy properties.\n this.markNonceDuplicatesDropped(transactionId);\n\n // Update external provided transaction with updated gas values and confirmed status.\n this.updateTransaction(\n updatedTransactionMeta,\n `${controllerName}:confirmExternalTransaction - Add external transaction`,\n );\n this.onTransactionStatusChange(updatedTransactionMeta);\n\n // Intentional given potential duration of process.\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.updatePostBalance(updatedTransactionMeta);\n\n this.messagingSystem.publish(\n `${controllerName}:transactionConfirmed`,\n updatedTransactionMeta,\n );\n } catch (error) {\n console.error('Failed to confirm external transaction', error);\n }\n }\n\n /**\n * Append new send flow history to a transaction.\n *\n * @param transactionID - The ID of the transaction to update.\n * @param currentSendFlowHistoryLength - The length of the current sendFlowHistory array.\n * @param sendFlowHistoryToAdd - The sendFlowHistory entries to add.\n * @returns The updated transactionMeta.\n */\n updateTransactionSendFlowHistory(\n transactionID: string,\n currentSendFlowHistoryLength: number,\n sendFlowHistoryToAdd: SendFlowHistoryEntry[],\n ): TransactionMeta {\n if (this.isSendFlowHistoryDisabled) {\n throw new Error(\n 'Send flow history is disabled for the current transaction controller',\n );\n }\n\n const transactionMeta = this.getTransaction(transactionID);\n\n if (!transactionMeta) {\n throw new Error(\n `Cannot update send flow history as no transaction metadata found`,\n );\n }\n\n validateIfTransactionUnapproved(\n transactionMeta,\n 'updateTransactionSendFlowHistory',\n );\n\n const sendFlowHistory = transactionMeta.sendFlowHistory ?? [];\n if (currentSendFlowHistoryLength === sendFlowHistory.length) {\n const updatedTransactionMeta = {\n ...transactionMeta,\n sendFlowHistory: [...sendFlowHistory, ...sendFlowHistoryToAdd],\n };\n this.updateTransaction(\n updatedTransactionMeta,\n `${controllerName}:updateTransactionSendFlowHistory - sendFlowHistory updated`,\n );\n }\n\n return this.getTransaction(transactionID) as TransactionMeta;\n }\n\n /**\n * Update the gas values of a transaction.\n *\n * @param transactionId - The ID of the transaction to update.\n * @param gasValues - Gas values to update.\n * @param gasValues.gas - Same as transaction.gasLimit.\n * @param gasValues.gasLimit - Maxmimum number of units of gas to use for this transaction.\n * @param gasValues.gasPrice - Price per gas for legacy transactions.\n * @param gasValues.maxPriorityFeePerGas - Maximum amount per gas to give to validator as incentive.\n * @param gasValues.maxFeePerGas - Maximum amount per gas to pay for the transaction, including the priority fee.\n * @param gasValues.estimateUsed - Which estimate level was used.\n * @param gasValues.estimateSuggested - Which estimate level that the API suggested.\n * @param gasValues.defaultGasEstimates - The default estimate for gas.\n * @param gasValues.originalGasEstimate - Original estimate for gas.\n * @param gasValues.userEditedGasLimit - The gas limit supplied by user.\n * @param gasValues.userFeeLevel - Estimate level user selected.\n * @returns The updated transactionMeta.\n */\n updateTransactionGasFees(\n transactionId: string,\n {\n defaultGasEstimates,\n estimateUsed,\n estimateSuggested,\n gas,\n gasLimit,\n gasPrice,\n maxPriorityFeePerGas,\n maxFeePerGas,\n originalGasEstimate,\n userEditedGasLimit,\n userFeeLevel,\n }: {\n defaultGasEstimates?: string;\n estimateUsed?: string;\n estimateSuggested?: string;\n gas?: string;\n gasLimit?: string;\n gasPrice?: string;\n maxPriorityFeePerGas?: string;\n maxFeePerGas?: string;\n originalGasEstimate?: string;\n userEditedGasLimit?: boolean;\n userFeeLevel?: string;\n },\n ): TransactionMeta {\n const transactionMeta = this.getTransaction(transactionId);\n\n if (!transactionMeta) {\n throw new Error(\n `Cannot update transaction as no transaction metadata found`,\n );\n }\n\n validateIfTransactionUnapproved(\n transactionMeta,\n 'updateTransactionGasFees',\n );\n\n let transactionGasFees = {\n txParams: {\n gas,\n gasLimit,\n gasPrice,\n maxPriorityFeePerGas,\n maxFeePerGas,\n },\n defaultGasEstimates,\n estimateUsed,\n estimateSuggested,\n originalGasEstimate,\n userEditedGasLimit,\n userFeeLevel,\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } as any;\n\n // only update what is defined\n transactionGasFees.txParams = pickBy(transactionGasFees.txParams);\n transactionGasFees = pickBy(transactionGasFees);\n\n // merge updated gas values with existing transaction meta\n const updatedMeta = merge({}, transactionMeta, transactionGasFees);\n\n this.updateTransaction(\n updatedMeta,\n `${controllerName}:updateTransactionGasFees - gas values updated`,\n );\n\n return this.getTransaction(transactionId) as TransactionMeta;\n }\n\n /**\n * Update the previous gas values of a transaction.\n *\n * @param transactionId - The ID of the transaction to update.\n * @param previousGas - Previous gas values to update.\n * @param previousGas.gasLimit - Maxmimum number of units of gas to use for this transaction.\n * @param previousGas.maxFeePerGas - Maximum amount per gas to pay for the transaction, including the priority fee.\n * @param previousGas.maxPriorityFeePerGas - Maximum amount per gas to give to validator as incentive.\n * @returns The updated transactionMeta.\n */\n updatePreviousGasParams(\n transactionId: string,\n {\n gasLimit,\n maxFeePerGas,\n maxPriorityFeePerGas,\n }: {\n gasLimit?: string;\n maxFeePerGas?: string;\n maxPriorityFeePerGas?: string;\n },\n ): TransactionMeta {\n const transactionMeta = this.getTransaction(transactionId);\n\n if (!transactionMeta) {\n throw new Error(\n `Cannot update transaction as no transaction metadata found`,\n );\n }\n\n validateIfTransactionUnapproved(transactionMeta, 'updatePreviousGasParams');\n\n const transactionPreviousGas = {\n previousGas: {\n gasLimit,\n maxFeePerGas,\n maxPriorityFeePerGas,\n },\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } as any;\n\n // only update what is defined\n transactionPreviousGas.previousGas = pickBy(\n transactionPreviousGas.previousGas,\n );\n\n // merge updated previous gas values with existing transaction meta\n const updatedMeta = merge({}, transactionMeta, transactionPreviousGas);\n\n this.updateTransaction(\n updatedMeta,\n `${controllerName}:updatePreviousGasParams - Previous gas values updated`,\n );\n\n return this.getTransaction(transactionId) as TransactionMeta;\n }\n\n async getNonceLock(\n address: string,\n networkClientId?: NetworkClientId,\n ): Promise {\n return this.#multichainTrackingHelper.getNonceLock(\n address,\n networkClientId,\n );\n }\n\n /**\n * Updates the editable parameters of a transaction.\n *\n * @param txId - The ID of the transaction to update.\n * @param params - The editable parameters to update.\n * @param params.data - Data to pass with the transaction.\n * @param params.gas - Maximum number of units of gas to use for the transaction.\n * @param params.gasPrice - Price per gas for legacy transactions.\n * @param params.from - Address to send the transaction from.\n * @param params.to - Address to send the transaction to.\n * @param params.value - Value associated with the transaction.\n * @returns The updated transaction metadata.\n */\n async updateEditableParams(\n txId: string,\n {\n data,\n gas,\n gasPrice,\n from,\n to,\n value,\n }: {\n data?: string;\n gas?: string;\n gasPrice?: string;\n from?: string;\n to?: string;\n value?: string;\n },\n ) {\n const transactionMeta = this.getTransaction(txId);\n if (!transactionMeta) {\n throw new Error(\n `Cannot update editable params as no transaction metadata found`,\n );\n }\n\n validateIfTransactionUnapproved(transactionMeta, 'updateEditableParams');\n\n const editableParams = {\n txParams: {\n data,\n from,\n to,\n value,\n gas,\n gasPrice,\n },\n } as Partial;\n\n editableParams.txParams = pickBy(\n editableParams.txParams,\n ) as TransactionParams;\n\n const updatedTransaction = merge({}, transactionMeta, editableParams);\n const provider = this.#multichainTrackingHelper.getProvider({\n chainId: transactionMeta.chainId,\n networkClientId: transactionMeta.networkClientId,\n });\n const ethQuery = new EthQuery(provider);\n const { type } = await determineTransactionType(\n updatedTransaction.txParams,\n ethQuery,\n );\n updatedTransaction.type = type;\n\n await updateTransactionLayer1GasFee({\n layer1GasFeeFlows: this.layer1GasFeeFlows,\n provider,\n transactionMeta: updatedTransaction,\n });\n\n this.updateTransaction(\n updatedTransaction,\n `Update Editable Params for ${txId}`,\n );\n return this.getTransaction(txId);\n }\n\n /**\n * Signs and returns the raw transaction data for provided transaction params list.\n *\n * @param listOfTxParams - The list of transaction params to approve.\n * @param opts - Options bag.\n * @param opts.hasNonce - Whether the transactions already have a nonce.\n * @returns The raw transactions.\n */\n async approveTransactionsWithSameNonce(\n listOfTxParams: (TransactionParams & { chainId: Hex })[] = [],\n { hasNonce }: { hasNonce?: boolean } = {},\n ): Promise {\n log('Approving transactions with same nonce', {\n transactions: listOfTxParams,\n });\n\n if (listOfTxParams.length === 0) {\n return '';\n }\n\n const initialTx = listOfTxParams[0];\n const common = this.getCommonConfiguration(initialTx.chainId);\n\n // We need to ensure we get the nonce using the the NonceTracker on the chain matching\n // the txParams. In this context we only have chainId available to us, but the\n // NonceTrackers are keyed by networkClientId. To workaround this, we attempt to find\n // a networkClientId that matches the chainId. As a fallback, the globally selected\n // network's NonceTracker will be used instead.\n let networkClientId: NetworkClientId | undefined;\n try {\n networkClientId = this.messagingSystem.call(\n `NetworkController:findNetworkClientIdByChainId`,\n initialTx.chainId,\n );\n } catch (err) {\n log('failed to find networkClientId from chainId', err);\n }\n\n const initialTxAsEthTx = TransactionFactory.fromTxData(initialTx, {\n common,\n });\n const initialTxAsSerializedHex = bufferToHex(initialTxAsEthTx.serialize());\n\n if (this.approvingTransactionIds.has(initialTxAsSerializedHex)) {\n return '';\n }\n this.approvingTransactionIds.add(initialTxAsSerializedHex);\n\n let rawTransactions, nonceLock;\n try {\n // TODO: we should add a check to verify that all transactions have the same from address\n const fromAddress = initialTx.from;\n const requiresNonce = hasNonce !== true;\n\n nonceLock = requiresNonce\n ? await this.getNonceLock(fromAddress, networkClientId)\n : undefined;\n\n const nonce = nonceLock\n ? add0x(nonceLock.nextNonce.toString(16))\n : initialTx.nonce;\n\n if (nonceLock) {\n log('Using nonce from nonce tracker', nonce, nonceLock.nonceDetails);\n }\n\n rawTransactions = await Promise.all(\n listOfTxParams.map((txParams) => {\n txParams.nonce = nonce;\n return this.signExternalTransaction(txParams.chainId, txParams);\n }),\n );\n } catch (err) {\n log('Error while signing transactions with same nonce', err);\n // Must set transaction to submitted/failed before releasing lock\n // continue with error chain\n throw err;\n } finally {\n nonceLock?.releaseLock();\n this.approvingTransactionIds.delete(initialTxAsSerializedHex);\n }\n return rawTransactions;\n }\n\n /**\n * Update a custodial transaction.\n *\n * @param transactionId - The ID of the transaction to update.\n * @param options - The custodial transaction options to update.\n * @param options.errorMessage - The error message to be assigned in case transaction status update to failed.\n * @param options.hash - The new hash value to be assigned.\n * @param options.status - The new status value to be assigned.\n */\n updateCustodialTransaction(\n transactionId: string,\n {\n errorMessage,\n hash,\n status,\n }: {\n errorMessage?: string;\n hash?: string;\n status?: TransactionStatus;\n },\n ) {\n const transactionMeta = this.getTransaction(transactionId);\n\n if (!transactionMeta) {\n throw new Error(\n `Cannot update custodial transaction as no transaction metadata found`,\n );\n }\n\n if (!transactionMeta.custodyId) {\n throw new Error('Transaction must be a custodian transaction');\n }\n\n if (\n status &&\n ![\n TransactionStatus.submitted,\n TransactionStatus.signed,\n TransactionStatus.failed,\n ].includes(status)\n ) {\n throw new Error(\n `Cannot update custodial transaction with status: ${status}`,\n );\n }\n\n const updatedTransactionMeta = merge(\n {},\n transactionMeta,\n pickBy({ hash, status }),\n ) as TransactionMeta;\n\n if (updatedTransactionMeta.status === TransactionStatus.submitted) {\n updatedTransactionMeta.submittedTime = new Date().getTime();\n }\n\n if (updatedTransactionMeta.status === TransactionStatus.failed) {\n updatedTransactionMeta.error = normalizeTxError(new Error(errorMessage));\n }\n\n this.updateTransaction(\n updatedTransactionMeta,\n `${controllerName}:updateCustodialTransaction - Custodial transaction updated`,\n );\n\n if (\n [TransactionStatus.submitted, TransactionStatus.failed].includes(\n status as TransactionStatus,\n )\n ) {\n this.messagingSystem.publish(\n `${controllerName}:transactionFinished`,\n updatedTransactionMeta,\n );\n this.#internalEvents.emit(\n `${updatedTransactionMeta.id}:finished`,\n updatedTransactionMeta,\n );\n }\n }\n\n /**\n * Creates approvals for all unapproved transactions persisted.\n */\n initApprovals() {\n const chainId = this.getChainId();\n const unapprovedTxs = this.state.transactions.filter(\n (transaction) =>\n transaction.status === TransactionStatus.unapproved &&\n transaction.chainId === chainId &&\n !transaction.isUserOperation,\n );\n\n for (const txMeta of unapprovedTxs) {\n this.processApproval(txMeta, {\n shouldShowRequest: false,\n }).catch((error) => {\n if (error?.code === errorCodes.provider.userRejectedRequest) {\n return;\n }\n console.error('Error during persisted transaction approval', error);\n });\n }\n }\n\n /**\n * Search transaction metadata for matching entries.\n *\n * @param opts - Options bag.\n * @param opts.searchCriteria - An object containing values or functions for transaction properties to filter transactions with.\n * @param opts.initialList - The transactions to search. Defaults to the current state.\n * @param opts.filterToCurrentNetwork - Whether to filter the results to the current network. Defaults to true.\n * @param opts.limit - The maximum number of transactions to return. No limit by default.\n * @returns An array of transactions matching the provided options.\n */\n getTransactions({\n searchCriteria = {},\n initialList,\n filterToCurrentNetwork = true,\n limit,\n }: {\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n searchCriteria?: any;\n initialList?: TransactionMeta[];\n filterToCurrentNetwork?: boolean;\n limit?: number;\n } = {}): TransactionMeta[] {\n const chainId = this.getChainId();\n // searchCriteria is an object that might have values that aren't predicate\n // methods. When providing any other value type (string, number, etc), we\n // consider this shorthand for \"check the value at key for strict equality\n // with the provided value\". To conform this object to be only methods, we\n // mapValues (lodash) such that every value on the object is a method that\n // returns a boolean.\n const predicateMethods = mapValues(searchCriteria, (predicate) => {\n return typeof predicate === 'function'\n ? predicate\n : // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (v: any) => v === predicate;\n });\n\n const transactionsToFilter = initialList ?? this.state.transactions;\n\n // Combine sortBy and pickBy to transform our state object into an array of\n // matching transactions that are sorted by time.\n const filteredTransactions = sortBy(\n pickBy(transactionsToFilter, (transaction) => {\n if (filterToCurrentNetwork && transaction.chainId !== chainId) {\n return false;\n }\n // iterate over the predicateMethods keys to check if the transaction\n // matches the searchCriteria\n for (const [key, predicate] of Object.entries(predicateMethods)) {\n // We return false early as soon as we know that one of the specified\n // search criteria do not match the transaction. This prevents\n // needlessly checking all criteria when we already know the criteria\n // are not fully satisfied. We check both txParams and the base\n // object as predicate keys can be either.\n if (key in transaction.txParams) {\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (predicate((transaction.txParams as any)[key]) === false) {\n return false;\n }\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } else if (predicate((transaction as any)[key]) === false) {\n return false;\n }\n }\n\n return true;\n }),\n 'time',\n );\n if (limit !== undefined) {\n // We need to have all transactions of a given nonce in order to display\n // necessary details in the UI. We use the size of this set to determine\n // whether we have reached the limit provided, thus ensuring that all\n // transactions of nonces we include will be sent to the UI.\n const nonces = new Set();\n const txs = [];\n // By default, the transaction list we filter from is sorted by time ASC.\n // To ensure that filtered results prefers the newest transactions we\n // iterate from right to left, inserting transactions into front of a new\n // array. The original order is preserved, but we ensure that newest txs\n // are preferred.\n for (let i = filteredTransactions.length - 1; i > -1; i--) {\n const txMeta = filteredTransactions[i];\n const { nonce } = txMeta.txParams;\n if (!nonces.has(nonce)) {\n if (nonces.size < limit) {\n nonces.add(nonce);\n } else {\n continue;\n }\n }\n // Push transaction into the beginning of our array to ensure the\n // original order is preserved.\n txs.unshift(txMeta);\n }\n return txs;\n }\n return filteredTransactions;\n }\n\n async estimateGasFee({\n transactionParams,\n chainId,\n networkClientId: requestNetworkClientId,\n }: {\n transactionParams: TransactionParams;\n chainId?: Hex;\n networkClientId?: NetworkClientId;\n }): Promise {\n const networkClientId = this.#getNetworkClientId({\n networkClientId: requestNetworkClientId,\n chainId,\n });\n\n const transactionMeta = {\n txParams: transactionParams,\n chainId,\n networkClientId,\n } as TransactionMeta;\n\n // Guaranteed as the default gas fee flow matches all transactions.\n const gasFeeFlow = getGasFeeFlow(\n transactionMeta,\n this.gasFeeFlows,\n ) as GasFeeFlow;\n\n const ethQuery = this.#multichainTrackingHelper.getEthQuery({\n networkClientId,\n chainId,\n });\n\n const gasFeeControllerData = await this.getGasFeeEstimates({\n networkClientId,\n });\n\n return gasFeeFlow.getGasFees({\n ethQuery,\n gasFeeControllerData,\n transactionMeta,\n });\n }\n\n /**\n * Determine the layer 1 gas fee for the given transaction parameters.\n *\n * @param request - The request object.\n * @param request.transactionParams - The transaction parameters to estimate the layer 1 gas fee for.\n * @param request.chainId - The ID of the chain where the transaction will be executed.\n * @param request.networkClientId - The ID of a specific network client to process the transaction.\n */\n async getLayer1GasFee({\n transactionParams,\n chainId,\n networkClientId,\n }: {\n transactionParams: TransactionParams;\n chainId?: Hex;\n networkClientId?: NetworkClientId;\n }): Promise {\n const provider = this.#multichainTrackingHelper.getProvider({\n networkClientId,\n chainId,\n });\n\n return await getTransactionLayer1GasFee({\n layer1GasFeeFlows: this.layer1GasFeeFlows,\n provider,\n transactionMeta: {\n txParams: transactionParams,\n chainId,\n } as TransactionMeta,\n });\n }\n\n private async signExternalTransaction(\n chainId: Hex,\n transactionParams: TransactionParams,\n ): Promise {\n if (!this.sign) {\n throw new Error('No sign method defined.');\n }\n\n const normalizedTransactionParams =\n normalizeTransactionParams(transactionParams);\n const type = isEIP1559Transaction(normalizedTransactionParams)\n ? TransactionEnvelopeType.feeMarket\n : TransactionEnvelopeType.legacy;\n const updatedTransactionParams = {\n ...normalizedTransactionParams,\n type,\n gasLimit: normalizedTransactionParams.gas,\n chainId,\n };\n\n const { from } = updatedTransactionParams;\n const common = this.getCommonConfiguration(chainId);\n const unsignedTransaction = TransactionFactory.fromTxData(\n updatedTransactionParams,\n { common },\n );\n const signedTransaction = await this.sign(unsignedTransaction, from);\n\n const rawTransaction = bufferToHex(signedTransaction.serialize());\n return rawTransaction;\n }\n\n /**\n * Removes unapproved transactions from state.\n */\n clearUnapprovedTransactions() {\n const transactions = this.state.transactions.filter(\n ({ status }) => status !== TransactionStatus.unapproved,\n );\n this.update((state) => {\n state.transactions = this.trimTransactionsForState(transactions);\n });\n }\n\n /**\n * Stop the signing process for a specific transaction.\n * Throws an error causing the transaction status to be set to failed.\n * @param transactionId - The ID of the transaction to stop signing.\n */\n abortTransactionSigning(transactionId: string) {\n const transactionMeta = this.getTransaction(transactionId);\n\n if (!transactionMeta) {\n throw new Error(`Cannot abort signing as no transaction metadata found`);\n }\n\n const abortCallback = this.signAbortCallbacks.get(transactionId);\n\n if (!abortCallback) {\n throw new Error(\n `Cannot abort signing as transaction is not waiting for signing`,\n );\n }\n\n abortCallback();\n\n this.signAbortCallbacks.delete(transactionId);\n }\n\n private addMetadata(transactionMeta: TransactionMeta) {\n this.update((state) => {\n state.transactions = this.trimTransactionsForState([\n ...state.transactions,\n transactionMeta,\n ]);\n });\n }\n\n private async updateGasProperties(transactionMeta: TransactionMeta) {\n const isEIP1559Compatible =\n (await this.getEIP1559Compatibility(transactionMeta.networkClientId)) &&\n transactionMeta.txParams.type !== TransactionEnvelopeType.legacy;\n\n const { networkClientId, chainId } = transactionMeta;\n\n const isCustomNetwork = this.#isCustomNetwork(networkClientId);\n\n const ethQuery = this.#multichainTrackingHelper.getEthQuery({\n networkClientId,\n chainId,\n });\n\n const provider = this.#multichainTrackingHelper.getProvider({\n networkClientId,\n chainId,\n });\n\n await updateGas({\n ethQuery,\n chainId,\n isCustomNetwork,\n txMeta: transactionMeta,\n });\n\n await updateGasFees({\n eip1559: isEIP1559Compatible,\n ethQuery,\n gasFeeFlows: this.gasFeeFlows,\n getGasFeeEstimates: this.getGasFeeEstimates,\n getSavedGasFees: this.getSavedGasFees.bind(this),\n txMeta: transactionMeta,\n });\n\n await updateTransactionLayer1GasFee({\n layer1GasFeeFlows: this.layer1GasFeeFlows,\n provider,\n transactionMeta,\n });\n }\n\n private onBootCleanup() {\n this.submitApprovedTransactions();\n }\n\n /**\n * Force submit approved transactions for all chains.\n */\n private submitApprovedTransactions() {\n const approvedTransactions = this.state.transactions.filter(\n (transaction) => transaction.status === TransactionStatus.approved,\n );\n\n for (const transactionMeta of approvedTransactions) {\n if (this.beforeApproveOnInit(transactionMeta)) {\n this.approveTransaction(transactionMeta.id).catch((error) => {\n /* istanbul ignore next */\n console.error('Error while submitting persisted transaction', error);\n });\n }\n }\n }\n\n private async processApproval(\n transactionMeta: TransactionMeta,\n {\n isExisting = false,\n requireApproval,\n shouldShowRequest = true,\n actionId,\n }: {\n isExisting?: boolean;\n requireApproval?: boolean | undefined;\n shouldShowRequest?: boolean;\n actionId?: string;\n },\n ): Promise {\n const transactionId = transactionMeta.id;\n let resultCallbacks: AcceptResultCallbacks | undefined;\n const { meta, isCompleted } = this.isTransactionCompleted(transactionId);\n const finishedPromise = isCompleted\n ? Promise.resolve(meta)\n : this.waitForTransactionFinished(transactionId);\n\n if (meta && !isExisting && !isCompleted) {\n try {\n if (requireApproval !== false) {\n const acceptResult = await this.requestApproval(transactionMeta, {\n shouldShowRequest,\n });\n resultCallbacks = acceptResult.resultCallbacks;\n\n const approvalValue = acceptResult.value as\n | {\n txMeta?: TransactionMeta;\n }\n | undefined;\n\n const updatedTransaction = approvalValue?.txMeta;\n\n if (updatedTransaction) {\n log('Updating transaction with approval data', {\n customNonce: updatedTransaction.customNonceValue,\n params: updatedTransaction.txParams,\n });\n\n this.updateTransaction(\n updatedTransaction,\n 'TransactionController#processApproval - Updated with approval data',\n );\n }\n }\n\n const { isCompleted: isTxCompleted } =\n this.isTransactionCompleted(transactionId);\n\n if (!isTxCompleted) {\n const approvalResult = await this.approveTransaction(transactionId);\n if (\n approvalResult === ApprovalState.SkippedViaBeforePublishHook &&\n resultCallbacks\n ) {\n resultCallbacks.success();\n }\n const updatedTransactionMeta = this.getTransaction(\n transactionId,\n ) as TransactionMeta;\n this.messagingSystem.publish(\n `${controllerName}:transactionApproved`,\n {\n transactionMeta: updatedTransactionMeta,\n actionId,\n },\n );\n }\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n const { isCompleted: isTxCompleted } =\n this.isTransactionCompleted(transactionId);\n if (!isTxCompleted) {\n if (error?.code === errorCodes.provider.userRejectedRequest) {\n this.cancelTransaction(transactionId, actionId);\n\n throw providerErrors.userRejectedRequest(\n 'MetaMask Tx Signature: User denied transaction signature.',\n );\n } else {\n this.failTransaction(meta, error, actionId);\n }\n }\n }\n }\n\n const finalMeta = await finishedPromise;\n\n switch (finalMeta?.status) {\n case TransactionStatus.failed:\n resultCallbacks?.error(finalMeta.error);\n throw rpcErrors.internal(finalMeta.error.message);\n\n case TransactionStatus.submitted:\n resultCallbacks?.success();\n return finalMeta.hash as string;\n\n default:\n const internalError = rpcErrors.internal(\n `MetaMask Tx Signature: Unknown problem: ${JSON.stringify(\n finalMeta || transactionId,\n )}`,\n );\n\n resultCallbacks?.error(internalError);\n throw internalError;\n }\n }\n\n /**\n * Approves a transaction and updates it's status in state. If this is not a\n * retry transaction, a nonce will be generated. The transaction is signed\n * using the sign configuration property, then published to the blockchain.\n * A `:finished` hub event is fired after success or failure.\n *\n * @param transactionId - The ID of the transaction to approve.\n */\n private async approveTransaction(transactionId: string) {\n const cleanupTasks = new Array<() => void>();\n cleanupTasks.push(await this.mutex.acquire());\n\n let transactionMeta = this.getTransactionOrThrow(transactionId);\n\n try {\n if (!this.sign) {\n this.failTransaction(\n transactionMeta,\n new Error('No sign method defined.'),\n );\n return ApprovalState.NotApproved;\n } else if (!transactionMeta.chainId) {\n this.failTransaction(transactionMeta, new Error('No chainId defined.'));\n return ApprovalState.NotApproved;\n }\n\n if (this.approvingTransactionIds.has(transactionId)) {\n log('Skipping approval as signing in progress', transactionId);\n return ApprovalState.NotApproved;\n }\n this.approvingTransactionIds.add(transactionId);\n cleanupTasks.push(() =>\n this.approvingTransactionIds.delete(transactionId),\n );\n\n const [nonce, releaseNonce] = await getNextNonce(\n transactionMeta,\n (address: string) =>\n this.#multichainTrackingHelper.getNonceLock(\n address,\n transactionMeta.networkClientId,\n ),\n );\n\n // must set transaction to submitted/failed before releasing lock\n releaseNonce && cleanupTasks.push(releaseNonce);\n\n transactionMeta = this.#updateTransactionInternal(\n {\n transactionId,\n note: 'TransactionController#approveTransaction - Transaction approved',\n },\n (draftTxMeta) => {\n const { txParams, chainId } = draftTxMeta;\n\n draftTxMeta.status = TransactionStatus.approved;\n draftTxMeta.txParams = {\n ...txParams,\n nonce,\n chainId,\n gasLimit: txParams.gas,\n ...(isEIP1559Transaction(txParams) && {\n type: TransactionEnvelopeType.feeMarket,\n }),\n };\n },\n );\n\n this.onTransactionStatusChange(transactionMeta);\n\n const rawTx = await this.signTransaction(\n transactionMeta,\n transactionMeta.txParams,\n );\n\n if (!this.beforePublish(transactionMeta)) {\n log('Skipping publishing transaction based on hook');\n this.messagingSystem.publish(\n `${controllerName}:transactionPublishingSkipped`,\n transactionMeta,\n );\n return ApprovalState.SkippedViaBeforePublishHook;\n }\n\n if (!rawTx) {\n return ApprovalState.NotApproved;\n }\n\n const ethQuery = this.#multichainTrackingHelper.getEthQuery({\n networkClientId: transactionMeta.networkClientId,\n chainId: transactionMeta.chainId,\n });\n\n let preTxBalance: string | undefined;\n const shouldUpdatePreTxBalance =\n transactionMeta.type === TransactionType.swap;\n\n if (shouldUpdatePreTxBalance) {\n log('Determining pre-transaction balance');\n\n preTxBalance = await query(ethQuery, 'getBalance', [\n transactionMeta.txParams.from,\n ]);\n }\n\n log('Publishing transaction', transactionMeta.txParams);\n\n let { transactionHash: hash } = await this.publish(\n transactionMeta,\n rawTx,\n );\n\n if (hash === undefined) {\n hash = await this.publishTransaction(ethQuery, rawTx);\n }\n\n log('Publish successful', hash);\n\n transactionMeta = this.#updateTransactionInternal(\n {\n transactionId,\n note: 'TransactionController#approveTransaction - Transaction submitted',\n },\n (draftTxMeta) => {\n draftTxMeta.hash = hash;\n draftTxMeta.status = TransactionStatus.submitted;\n draftTxMeta.submittedTime = new Date().getTime();\n if (shouldUpdatePreTxBalance) {\n draftTxMeta.preTxBalance = preTxBalance;\n log('Updated pre-transaction balance', preTxBalance);\n }\n },\n );\n\n this.messagingSystem.publish(`${controllerName}:transactionSubmitted`, {\n transactionMeta,\n });\n\n this.messagingSystem.publish(\n `${controllerName}:transactionFinished`,\n transactionMeta,\n );\n this.#internalEvents.emit(`${transactionId}:finished`, transactionMeta);\n\n this.onTransactionStatusChange(transactionMeta);\n return ApprovalState.Approved;\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n this.failTransaction(transactionMeta, error);\n return ApprovalState.NotApproved;\n } finally {\n cleanupTasks.forEach((task) => task());\n }\n }\n\n private async publishTransaction(\n ethQuery: EthQuery,\n rawTransaction: string,\n ): Promise {\n return await query(ethQuery, 'sendRawTransaction', [rawTransaction]);\n }\n\n /**\n * Cancels a transaction based on its ID by setting its status to \"rejected\"\n * and emitting a `:finished` hub event.\n *\n * @param transactionId - The ID of the transaction to cancel.\n * @param actionId - The actionId passed from UI\n */\n private cancelTransaction(transactionId: string, actionId?: string) {\n const transactionMeta = this.state.transactions.find(\n ({ id }) => id === transactionId,\n );\n if (!transactionMeta) {\n return;\n }\n this.update((state) => {\n const transactions = state.transactions.filter(\n ({ id }) => id !== transactionId,\n );\n state.transactions = this.trimTransactionsForState(transactions);\n });\n const updatedTransactionMeta = {\n ...transactionMeta,\n status: TransactionStatus.rejected as const,\n };\n this.messagingSystem.publish(\n `${controllerName}:transactionFinished`,\n updatedTransactionMeta,\n );\n this.#internalEvents.emit(\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `${transactionMeta.id}:finished`,\n updatedTransactionMeta,\n );\n this.messagingSystem.publish(`${controllerName}:transactionRejected`, {\n transactionMeta: updatedTransactionMeta,\n actionId,\n });\n this.onTransactionStatusChange(updatedTransactionMeta);\n }\n\n /**\n * Trim the amount of transactions that are set on the state. Checks\n * if the length of the tx history is longer then desired persistence\n * limit and then if it is removes the oldest confirmed or rejected tx.\n * Pending or unapproved transactions will not be removed by this\n * operation. For safety of presenting a fully functional transaction UI\n * representation, this function will not break apart transactions with the\n * same nonce, created on the same day, per network. Not accounting for\n * transactions of the same nonce, same day and network combo can result in\n * confusing or broken experiences in the UI.\n *\n * @param transactions - The transactions to be applied to the state.\n * @returns The trimmed list of transactions.\n */\n private trimTransactionsForState(\n transactions: TransactionMeta[],\n ): TransactionMeta[] {\n const nonceNetworkSet = new Set();\n\n const txsToKeep = [...transactions]\n .sort((a, b) => (a.time > b.time ? -1 : 1)) // Descending time order\n .filter((tx) => {\n const { chainId, status, txParams, time } = tx;\n\n if (txParams) {\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n const key = `${String(txParams.nonce)}-${convertHexToDecimal(\n chainId,\n )}-${new Date(time).toDateString()}`;\n\n if (nonceNetworkSet.has(key)) {\n return true;\n } else if (\n nonceNetworkSet.size < this.#transactionHistoryLimit ||\n !this.isFinalState(status)\n ) {\n nonceNetworkSet.add(key);\n return true;\n }\n }\n\n return false;\n });\n\n txsToKeep.reverse(); // Ascending time order\n return txsToKeep;\n }\n\n /**\n * Determines if the transaction is in a final state.\n *\n * @param status - The transaction status.\n * @returns Whether the transaction is in a final state.\n */\n private isFinalState(status: TransactionStatus): boolean {\n return (\n status === TransactionStatus.rejected ||\n status === TransactionStatus.confirmed ||\n status === TransactionStatus.failed\n );\n }\n\n /**\n * Whether the transaction has at least completed all local processing.\n *\n * @param status - The transaction status.\n * @returns Whether the transaction is in a final state.\n */\n private isLocalFinalState(status: TransactionStatus): boolean {\n return [\n TransactionStatus.confirmed,\n TransactionStatus.failed,\n TransactionStatus.rejected,\n TransactionStatus.submitted,\n ].includes(status);\n }\n\n private async requestApproval(\n txMeta: TransactionMeta,\n { shouldShowRequest }: { shouldShowRequest: boolean },\n ): Promise {\n const id = this.getApprovalId(txMeta);\n const { origin } = txMeta;\n const type = ApprovalType.Transaction;\n const requestData = { txId: txMeta.id };\n\n return (await this.messagingSystem.call(\n 'ApprovalController:addRequest',\n {\n id,\n origin: origin || ORIGIN_METAMASK,\n type,\n requestData,\n expectsResult: true,\n },\n shouldShowRequest,\n )) as Promise;\n }\n\n private getTransaction(\n transactionId: string,\n ): Readonly | undefined {\n const { transactions } = this.state;\n return transactions.find(({ id }) => id === transactionId);\n }\n\n private getTransactionOrThrow(\n transactionId: string,\n errorMessagePrefix = 'TransactionController',\n ): Readonly {\n const txMeta = this.getTransaction(transactionId);\n if (!txMeta) {\n throw new Error(\n `${errorMessagePrefix}: No transaction found with id ${transactionId}`,\n );\n }\n return txMeta;\n }\n\n private getApprovalId(txMeta: TransactionMeta) {\n return String(txMeta.id);\n }\n\n private isTransactionCompleted(transactionId: string): {\n meta?: TransactionMeta;\n isCompleted: boolean;\n } {\n const transaction = this.getTransaction(transactionId);\n\n if (!transaction) {\n return { meta: undefined, isCompleted: false };\n }\n\n const isCompleted = this.isLocalFinalState(transaction.status);\n\n return { meta: transaction, isCompleted };\n }\n\n private getChainId(networkClientId?: NetworkClientId): Hex {\n const globalChainId = this.#getGlobalChainId();\n const globalNetworkClientId = this.#getGlobalNetworkClientId();\n\n if (!networkClientId || networkClientId === globalNetworkClientId) {\n return globalChainId;\n }\n\n return this.messagingSystem.call(\n `NetworkController:getNetworkClientById`,\n networkClientId,\n ).configuration.chainId;\n }\n\n private prepareUnsignedEthTx(\n chainId: Hex,\n txParams: TransactionParams,\n ): TypedTransaction {\n return TransactionFactory.fromTxData(txParams, {\n freeze: false,\n common: this.getCommonConfiguration(chainId),\n });\n }\n\n /**\n * `@ethereumjs/tx` uses `@ethereumjs/common` as a configuration tool for\n * specifying which chain, network, hardfork and EIPs to support for\n * a transaction. By referencing this configuration, and analyzing the fields\n * specified in txParams, @ethereumjs/tx is able to determine which EIP-2718\n * transaction type to use.\n *\n * @param chainId - The chainId to use for the configuration.\n * @returns common configuration object\n */\n private getCommonConfiguration(chainId: Hex): Common {\n const customChainParams: Partial = {\n chainId: parseInt(chainId, 16),\n defaultHardfork: HARDFORK,\n };\n\n return Common.custom(customChainParams);\n }\n\n private onIncomingTransactions({\n added,\n updated,\n }: {\n added: TransactionMeta[];\n updated: TransactionMeta[];\n }) {\n this.update((state) => {\n const { transactions: currentTransactions } = state;\n const updatedTransactions = [\n ...added,\n ...currentTransactions.map((originalTransaction) => {\n const updatedTransaction = updated.find(\n ({ hash }) => hash === originalTransaction.hash,\n );\n\n return updatedTransaction ?? originalTransaction;\n }),\n ];\n\n state.transactions = this.trimTransactionsForState(updatedTransactions);\n });\n }\n\n private onUpdatedLastFetchedBlockNumbers({\n lastFetchedBlockNumbers,\n blockNumber,\n }: {\n lastFetchedBlockNumbers: {\n [key: string]: number;\n };\n blockNumber: number;\n }) {\n this.update((state) => {\n state.lastFetchedBlockNumbers = lastFetchedBlockNumbers;\n });\n this.messagingSystem.publish(\n `${controllerName}:incomingTransactionBlockReceived`,\n blockNumber,\n );\n }\n\n private generateDappSuggestedGasFees(\n txParams: TransactionParams,\n origin?: string,\n ): DappSuggestedGasFees | undefined {\n if (!origin || origin === ORIGIN_METAMASK) {\n return undefined;\n }\n\n const { gasPrice, maxFeePerGas, maxPriorityFeePerGas, gas } = txParams;\n\n if (\n gasPrice === undefined &&\n maxFeePerGas === undefined &&\n maxPriorityFeePerGas === undefined &&\n gas === undefined\n ) {\n return undefined;\n }\n\n const dappSuggestedGasFees: DappSuggestedGasFees = {};\n\n if (gasPrice !== undefined) {\n dappSuggestedGasFees.gasPrice = gasPrice;\n } else if (\n maxFeePerGas !== undefined ||\n maxPriorityFeePerGas !== undefined\n ) {\n dappSuggestedGasFees.maxFeePerGas = maxFeePerGas;\n dappSuggestedGasFees.maxPriorityFeePerGas = maxPriorityFeePerGas;\n }\n\n if (gas !== undefined) {\n dappSuggestedGasFees.gas = gas;\n }\n\n return dappSuggestedGasFees;\n }\n\n /**\n * Validates and adds external provided transaction to state.\n *\n * @param transactionMeta - Nominated external transaction to be added to state.\n * @returns The new transaction.\n */\n private addExternalTransaction(transactionMeta: TransactionMeta) {\n const { chainId } = transactionMeta;\n const { transactions } = this.state;\n const fromAddress = transactionMeta?.txParams?.from;\n const sameFromAndNetworkTransactions = transactions.filter(\n (transaction) =>\n transaction.txParams.from === fromAddress &&\n transaction.chainId === chainId,\n );\n const confirmedTxs = sameFromAndNetworkTransactions.filter(\n (transaction) => transaction.status === TransactionStatus.confirmed,\n );\n const pendingTxs = sameFromAndNetworkTransactions.filter(\n (transaction) => transaction.status === TransactionStatus.submitted,\n );\n\n validateConfirmedExternalTransaction(\n transactionMeta,\n confirmedTxs,\n pendingTxs,\n );\n\n // Make sure provided external transaction has non empty history array\n const newTransactionMeta =\n (transactionMeta.history ?? []).length === 0 && !this.isHistoryDisabled\n ? addInitialHistorySnapshot(transactionMeta)\n : transactionMeta;\n\n this.update((state) => {\n state.transactions = this.trimTransactionsForState([\n ...state.transactions,\n newTransactionMeta,\n ]);\n });\n\n return newTransactionMeta;\n }\n\n /**\n * Sets other txMeta statuses to dropped if the txMeta that has been confirmed has other transactions\n * in the transactions have the same nonce.\n *\n * @param transactionId - Used to identify original transaction.\n */\n private markNonceDuplicatesDropped(transactionId: string) {\n const transactionMeta = this.getTransaction(transactionId);\n if (!transactionMeta) {\n return;\n }\n const nonce = transactionMeta.txParams?.nonce;\n const from = transactionMeta.txParams?.from;\n const { chainId } = transactionMeta;\n\n const sameNonceTransactions = this.state.transactions.filter(\n (transaction) =>\n transaction.id !== transactionId &&\n transaction.txParams.from === from &&\n transaction.txParams.nonce === nonce &&\n transaction.chainId === chainId &&\n transaction.type !== TransactionType.incoming,\n );\n const sameNonceTransactionIds = sameNonceTransactions.map(\n (transaction) => transaction.id,\n );\n\n if (sameNonceTransactions.length === 0) {\n return;\n }\n\n this.update((state) => {\n for (const transaction of state.transactions) {\n if (sameNonceTransactionIds.includes(transaction.id)) {\n transaction.replacedBy = transactionMeta?.hash;\n transaction.replacedById = transactionMeta?.id;\n }\n }\n });\n\n for (const transaction of this.state.transactions) {\n if (\n sameNonceTransactionIds.includes(transaction.id) &&\n transaction.status !== TransactionStatus.failed\n ) {\n this.setTransactionStatusDropped(transaction);\n }\n }\n }\n\n /**\n * Method to set transaction status to dropped.\n *\n * @param transactionMeta - TransactionMeta of transaction to be marked as dropped.\n */\n private setTransactionStatusDropped(transactionMeta: TransactionMeta) {\n const updatedTransactionMeta = {\n ...transactionMeta,\n status: TransactionStatus.dropped as const,\n };\n this.messagingSystem.publish(`${controllerName}:transactionDropped`, {\n transactionMeta: updatedTransactionMeta,\n });\n this.updateTransaction(\n updatedTransactionMeta,\n 'TransactionController#setTransactionStatusDropped - Transaction dropped',\n );\n this.onTransactionStatusChange(updatedTransactionMeta);\n }\n\n /**\n * Get transaction with provided actionId.\n *\n * @param actionId - Unique ID to prevent duplicate requests\n * @returns the filtered transaction\n */\n private getTransactionWithActionId(actionId?: string) {\n return this.state.transactions.find(\n (transaction) => actionId && transaction.actionId === actionId,\n );\n }\n\n private async waitForTransactionFinished(\n transactionId: string,\n ): Promise {\n return new Promise((resolve) => {\n this.#internalEvents.once(`${transactionId}:finished`, (txMeta) => {\n resolve(txMeta);\n });\n });\n }\n\n /**\n * Updates the r, s, and v properties of a TransactionMeta object\n * with values from a signed transaction.\n *\n * @param transactionMeta - The TransactionMeta object to update.\n * @param signedTx - The encompassing type for all transaction types containing r, s, and v values.\n * @returns The updated TransactionMeta object.\n */\n private updateTransactionMetaRSV(\n transactionMeta: TransactionMeta,\n signedTx: TypedTransaction,\n ): TransactionMeta {\n const transactionMetaWithRsv = cloneDeep(transactionMeta);\n\n for (const key of ['r', 's', 'v'] as const) {\n const value = signedTx[key];\n\n if (value === undefined || value === null) {\n continue;\n }\n\n transactionMetaWithRsv[key] = add0x(value.toString(16));\n }\n\n return transactionMetaWithRsv;\n }\n\n private async getEIP1559Compatibility(networkClientId?: NetworkClientId) {\n const currentNetworkIsEIP1559Compatible =\n await this.getCurrentNetworkEIP1559Compatibility(networkClientId);\n\n const currentAccountIsEIP1559Compatible =\n await this.getCurrentAccountEIP1559Compatibility();\n\n return (\n currentNetworkIsEIP1559Compatible && currentAccountIsEIP1559Compatible\n );\n }\n\n private async signTransaction(\n transactionMeta: TransactionMeta,\n txParams: TransactionParams,\n ): Promise {\n log('Signing transaction', txParams);\n\n const unsignedEthTx = this.prepareUnsignedEthTx(\n transactionMeta.chainId,\n txParams,\n );\n\n this.approvingTransactionIds.add(transactionMeta.id);\n\n const signedTx = await new Promise((resolve, reject) => {\n this.sign?.(\n unsignedEthTx,\n txParams.from,\n ...this.getAdditionalSignArguments(transactionMeta),\n ).then(resolve, reject);\n\n this.signAbortCallbacks.set(transactionMeta.id, () =>\n reject(new Error('Signing aborted by user')),\n );\n });\n\n this.signAbortCallbacks.delete(transactionMeta.id);\n\n if (!signedTx) {\n log('Skipping signed status as no signed transaction');\n return undefined;\n }\n\n const transactionMetaFromHook = cloneDeep(transactionMeta);\n if (!this.afterSign(transactionMetaFromHook, signedTx)) {\n this.updateTransaction(\n transactionMetaFromHook,\n 'TransactionController#signTransaction - Update after sign',\n );\n\n log('Skipping signed status based on hook');\n\n return undefined;\n }\n\n const transactionMetaWithRsv = {\n ...this.updateTransactionMetaRSV(transactionMetaFromHook, signedTx),\n status: TransactionStatus.signed as const,\n };\n\n this.updateTransaction(\n transactionMetaWithRsv,\n 'TransactionController#approveTransaction - Transaction signed',\n );\n\n this.onTransactionStatusChange(transactionMetaWithRsv);\n\n const rawTx = bufferToHex(signedTx.serialize());\n\n const transactionMetaWithRawTx = merge({}, transactionMetaWithRsv, {\n rawTx,\n });\n\n this.updateTransaction(\n transactionMetaWithRawTx,\n 'TransactionController#approveTransaction - RawTransaction added',\n );\n\n return rawTx;\n }\n\n private onTransactionStatusChange(transactionMeta: TransactionMeta) {\n this.messagingSystem.publish(`${controllerName}:transactionStatusUpdated`, {\n transactionMeta,\n });\n }\n\n private getNonceTrackerTransactions(\n status: TransactionStatus,\n address: string,\n chainId: string = this.getChainId(),\n ) {\n return getAndFormatTransactionsForNonceTracker(\n chainId,\n address,\n status,\n this.state.transactions,\n );\n }\n\n private onConfirmedTransaction(transactionMeta: TransactionMeta) {\n log('Processing confirmed transaction', transactionMeta.id);\n\n this.markNonceDuplicatesDropped(transactionMeta.id);\n\n this.messagingSystem.publish(\n `${controllerName}:transactionConfirmed`,\n transactionMeta,\n );\n\n this.onTransactionStatusChange(transactionMeta);\n\n // Intentional given potential duration of process.\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.updatePostBalance(transactionMeta);\n }\n\n private async updatePostBalance(transactionMeta: TransactionMeta) {\n try {\n if (transactionMeta.type !== TransactionType.swap) {\n return;\n }\n\n const ethQuery = this.#multichainTrackingHelper.getEthQuery({\n networkClientId: transactionMeta.networkClientId,\n chainId: transactionMeta.chainId,\n });\n const { updatedTransactionMeta, approvalTransactionMeta } =\n await updatePostTransactionBalance(transactionMeta, {\n ethQuery,\n getTransaction: this.getTransaction.bind(this),\n updateTransaction: this.updateTransaction.bind(this),\n });\n\n this.messagingSystem.publish(\n `${controllerName}:postTransactionBalanceUpdated`,\n {\n transactionMeta: updatedTransactionMeta,\n approvalTransactionMeta,\n },\n );\n } catch (error) {\n /* istanbul ignore next */\n log('Error while updating post transaction balance', error);\n }\n }\n\n #createNonceTracker({\n provider,\n blockTracker,\n chainId,\n }: {\n provider: Provider;\n blockTracker: BlockTracker;\n chainId?: Hex;\n }): NonceTracker {\n return new NonceTracker({\n // TODO: Fix types\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n provider: provider as any,\n // @ts-expect-error TODO: Fix types\n blockTracker,\n getPendingTransactions: this.#getNonceTrackerPendingTransactions.bind(\n this,\n chainId,\n ),\n getConfirmedTransactions: this.getNonceTrackerTransactions.bind(\n this,\n TransactionStatus.confirmed,\n ),\n });\n }\n\n #createIncomingTransactionHelper({\n blockTracker,\n etherscanRemoteTransactionSource,\n chainId,\n }: {\n blockTracker: BlockTracker;\n etherscanRemoteTransactionSource: EtherscanRemoteTransactionSource;\n chainId?: Hex;\n }): IncomingTransactionHelper {\n const incomingTransactionHelper = new IncomingTransactionHelper({\n blockTracker,\n getCurrentAccount: () => this.#getSelectedAccount(),\n getLastFetchedBlockNumbers: () => this.state.lastFetchedBlockNumbers,\n getChainId: chainId ? () => chainId : this.getChainId.bind(this),\n isEnabled: this.#incomingTransactionOptions.isEnabled,\n queryEntireHistory: this.#incomingTransactionOptions.queryEntireHistory,\n remoteTransactionSource: etherscanRemoteTransactionSource,\n transactionLimit: this.#transactionHistoryLimit,\n updateTransactions: this.#incomingTransactionOptions.updateTransactions,\n });\n\n this.#addIncomingTransactionHelperListeners(incomingTransactionHelper);\n\n return incomingTransactionHelper;\n }\n\n #createPendingTransactionTracker({\n provider,\n blockTracker,\n chainId,\n }: {\n provider: Provider;\n blockTracker: BlockTracker;\n chainId?: Hex;\n }): PendingTransactionTracker {\n const ethQuery = new EthQuery(provider);\n const getChainId = chainId ? () => chainId : this.getChainId.bind(this);\n\n const pendingTransactionTracker = new PendingTransactionTracker({\n approveTransaction: async (transactionId: string) => {\n await this.approveTransaction(transactionId);\n },\n blockTracker,\n getChainId,\n getEthQuery: () => ethQuery,\n getTransactions: () => this.state.transactions,\n isResubmitEnabled: this.#pendingTransactionOptions.isResubmitEnabled,\n getGlobalLock: () =>\n this.#multichainTrackingHelper.acquireNonceLockForChainIdKey({\n chainId: getChainId(),\n }),\n publishTransaction: this.publishTransaction.bind(this),\n hooks: {\n beforeCheckPendingTransaction:\n this.beforeCheckPendingTransaction.bind(this),\n beforePublish: this.beforePublish.bind(this),\n },\n });\n\n this.#addPendingTransactionTrackerListeners(pendingTransactionTracker);\n\n return pendingTransactionTracker;\n }\n\n #checkForPendingTransactionAndStartPolling = () => {\n // PendingTransactionTracker reads state through its getTransactions hook\n this.pendingTransactionTracker.startIfPendingTransactions();\n this.#multichainTrackingHelper.checkForPendingTransactionAndStartPolling();\n };\n\n #stopAllTracking() {\n this.pendingTransactionTracker.stop();\n this.#removePendingTransactionTrackerListeners(\n this.pendingTransactionTracker,\n );\n this.incomingTransactionHelper.stop();\n this.#removeIncomingTransactionHelperListeners(\n this.incomingTransactionHelper,\n );\n\n this.#multichainTrackingHelper.stopAllTracking();\n }\n\n #removeIncomingTransactionHelperListeners(\n incomingTransactionHelper: IncomingTransactionHelper,\n ) {\n incomingTransactionHelper.hub.removeAllListeners('transactions');\n incomingTransactionHelper.hub.removeAllListeners(\n 'updatedLastFetchedBlockNumbers',\n );\n }\n\n #addIncomingTransactionHelperListeners(\n incomingTransactionHelper: IncomingTransactionHelper,\n ) {\n incomingTransactionHelper.hub.on(\n 'transactions',\n this.onIncomingTransactions.bind(this),\n );\n incomingTransactionHelper.hub.on(\n 'updatedLastFetchedBlockNumbers',\n this.onUpdatedLastFetchedBlockNumbers.bind(this),\n );\n }\n\n #removePendingTransactionTrackerListeners(\n pendingTransactionTracker: PendingTransactionTracker,\n ) {\n pendingTransactionTracker.hub.removeAllListeners('transaction-confirmed');\n pendingTransactionTracker.hub.removeAllListeners('transaction-dropped');\n pendingTransactionTracker.hub.removeAllListeners('transaction-failed');\n pendingTransactionTracker.hub.removeAllListeners('transaction-updated');\n }\n\n #addPendingTransactionTrackerListeners(\n pendingTransactionTracker: PendingTransactionTracker,\n ) {\n pendingTransactionTracker.hub.on(\n 'transaction-confirmed',\n this.onConfirmedTransaction.bind(this),\n );\n\n pendingTransactionTracker.hub.on(\n 'transaction-dropped',\n this.setTransactionStatusDropped.bind(this),\n );\n\n pendingTransactionTracker.hub.on(\n 'transaction-failed',\n this.failTransaction.bind(this),\n );\n\n pendingTransactionTracker.hub.on(\n 'transaction-updated',\n this.updateTransaction.bind(this),\n );\n }\n\n #getNonceTrackerPendingTransactions(\n chainId: string | undefined,\n address: string,\n ) {\n const standardPendingTransactions = this.getNonceTrackerTransactions(\n TransactionStatus.submitted,\n address,\n chainId,\n );\n\n const externalPendingTransactions = this.getExternalPendingTransactions(\n address,\n chainId,\n );\n return [...standardPendingTransactions, ...externalPendingTransactions];\n }\n\n private async publishTransactionForRetry(\n ethQuery: EthQuery,\n rawTx: string,\n transactionMeta: TransactionMeta,\n ): Promise {\n try {\n const hash = await this.publishTransaction(ethQuery, rawTx);\n return hash;\n } catch (error: unknown) {\n if (this.isTransactionAlreadyConfirmedError(error as Error)) {\n await this.pendingTransactionTracker.forceCheckTransaction(\n transactionMeta,\n );\n throw new Error('Previous transaction is already confirmed');\n }\n throw error;\n }\n }\n\n /**\n * Ensures that error is a nonce issue\n *\n * @param error - The error to check\n * @returns Whether or not the error is a nonce issue\n */\n // TODO: Replace `any` with type\n // Some networks are returning original error in the data field\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private isTransactionAlreadyConfirmedError(error: any): boolean {\n return (\n error?.message?.includes('nonce too low') ||\n error?.data?.message?.includes('nonce too low')\n );\n }\n\n #getGasFeeFlows(): GasFeeFlow[] {\n if (this.#testGasFeeFlows) {\n return [new TestGasFeeFlow()];\n }\n\n return [new LineaGasFeeFlow(), new DefaultGasFeeFlow()];\n }\n\n #getLayer1GasFeeFlows(): Layer1GasFeeFlow[] {\n return [new OptimismLayer1GasFeeFlow(), new ScrollLayer1GasFeeFlow()];\n }\n\n #updateTransactionInternal(\n {\n transactionId,\n note,\n skipHistory,\n }: { transactionId: string; note?: string; skipHistory?: boolean },\n callback: (transactionMeta: TransactionMeta) => TransactionMeta | void,\n ): Readonly {\n let updatedTransactionParams: (keyof TransactionParams)[] = [];\n\n this.update((state) => {\n const index = state.transactions.findIndex(\n ({ id }) => id === transactionId,\n );\n\n let transactionMeta = state.transactions[index];\n\n // eslint-disable-next-line n/callback-return\n transactionMeta = callback(transactionMeta) ?? transactionMeta;\n\n transactionMeta.txParams = normalizeTransactionParams(\n transactionMeta.txParams,\n );\n\n validateTxParams(transactionMeta.txParams);\n\n updatedTransactionParams =\n this.#checkIfTransactionParamsUpdated(transactionMeta);\n\n const shouldSkipHistory = this.isHistoryDisabled || skipHistory;\n\n if (!shouldSkipHistory) {\n transactionMeta = updateTransactionHistory(\n transactionMeta,\n note ?? 'Transaction updated',\n );\n }\n state.transactions[index] = transactionMeta;\n });\n\n const transactionMeta = this.getTransaction(\n transactionId,\n ) as TransactionMeta;\n\n if (updatedTransactionParams.length > 0) {\n this.#onTransactionParamsUpdated(\n transactionMeta,\n updatedTransactionParams,\n );\n }\n\n return transactionMeta;\n }\n\n #checkIfTransactionParamsUpdated(newTransactionMeta: TransactionMeta) {\n const { id: transactionId, txParams: newParams } = newTransactionMeta;\n\n const originalParams = this.getTransaction(transactionId)?.txParams;\n\n if (!originalParams || isEqual(originalParams, newParams)) {\n return [];\n }\n\n const params = Object.keys(newParams) as (keyof TransactionParams)[];\n\n const updatedProperties = params.filter(\n (param) => newParams[param] !== originalParams[param],\n );\n\n log(\n 'Transaction parameters have been updated',\n transactionId,\n updatedProperties,\n originalParams,\n newParams,\n );\n\n return updatedProperties;\n }\n\n #onTransactionParamsUpdated(\n transactionMeta: TransactionMeta,\n updatedParams: (keyof TransactionParams)[],\n ) {\n if (\n (['to', 'value', 'data'] as const).some((param) =>\n updatedParams.includes(param),\n )\n ) {\n log('Updating simulation data due to transaction parameter update');\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.#updateSimulationData(transactionMeta);\n }\n }\n\n async #updateSimulationData(transactionMeta: TransactionMeta) {\n const { id: transactionId, chainId, txParams } = transactionMeta;\n const { from, to, value, data } = txParams;\n\n let simulationData: SimulationData = {\n error: {\n code: SimulationErrorCode.Disabled,\n message: 'Simulation disabled',\n },\n tokenBalanceChanges: [],\n };\n\n if (this.#isSimulationEnabled()) {\n this.#updateTransactionInternal(\n { transactionId, skipHistory: true },\n (txMeta) => {\n txMeta.simulationData = undefined;\n },\n );\n\n simulationData = await getSimulationData({\n chainId,\n from: from as Hex,\n to: to as Hex,\n value: value as Hex,\n data: data as Hex,\n });\n }\n\n const finalTransactionMeta = this.getTransaction(transactionId);\n\n /* istanbul ignore if */\n if (!finalTransactionMeta) {\n log(\n 'Cannot update simulation data as transaction not found',\n transactionId,\n simulationData,\n );\n\n return;\n }\n\n this.#updateTransactionInternal(\n {\n transactionId,\n note: 'TransactionController#updateSimulationData - Update simulation data',\n },\n (txMeta) => {\n txMeta.simulationData = simulationData;\n },\n );\n\n log('Updated simulation data', transactionId, simulationData);\n }\n\n #onGasFeePollerTransactionUpdate({\n transactionId,\n gasFeeEstimates,\n gasFeeEstimatesLoaded,\n layer1GasFee,\n }: {\n transactionId: string;\n gasFeeEstimates?: GasFeeEstimates;\n gasFeeEstimatesLoaded?: boolean;\n layer1GasFee?: Hex;\n }) {\n this.#updateTransactionInternal(\n { transactionId, skipHistory: true },\n (txMeta) => {\n if (gasFeeEstimates) {\n txMeta.gasFeeEstimates = gasFeeEstimates;\n }\n\n if (gasFeeEstimatesLoaded !== undefined) {\n txMeta.gasFeeEstimatesLoaded = gasFeeEstimatesLoaded;\n }\n\n if (layer1GasFee) {\n txMeta.layer1GasFee = layer1GasFee;\n }\n },\n );\n }\n\n #getNetworkClientId({\n networkClientId: requestNetworkClientId,\n chainId,\n }: {\n networkClientId?: NetworkClientId;\n chainId?: Hex;\n }) {\n const globalChainId = this.#getGlobalChainId();\n const globalNetworkClientId = this.#getGlobalNetworkClientId();\n\n if (requestNetworkClientId) {\n return requestNetworkClientId;\n }\n\n if (!chainId || chainId === globalChainId) {\n return globalNetworkClientId;\n }\n\n return this.messagingSystem.call(\n `NetworkController:findNetworkClientIdByChainId`,\n chainId,\n );\n }\n\n #getGlobalNetworkClientId() {\n return this.getNetworkState().selectedNetworkClientId;\n }\n\n #getGlobalChainId() {\n return this.messagingSystem.call(\n `NetworkController:getNetworkClientById`,\n this.getNetworkState().selectedNetworkClientId,\n ).configuration.chainId;\n }\n\n #isCustomNetwork(networkClientId?: NetworkClientId) {\n const globalNetworkClientId = this.#getGlobalNetworkClientId();\n\n if (!networkClientId || networkClientId === globalNetworkClientId) {\n return !isInfuraNetworkType(\n this.getNetworkState().selectedNetworkClientId,\n );\n }\n\n return (\n this.messagingSystem.call(\n `NetworkController:getNetworkClientById`,\n networkClientId,\n ).configuration.type === NetworkClientType.Custom\n );\n }\n\n #getSelectedAccount() {\n return this.messagingSystem.call('AccountsController:getSelectedAccount');\n }\n}\n"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-SD6CWFDF.js.map b/node_modules/@metamask/transaction-controller/dist/chunk-SD6CWFDF.js.map -deleted file mode 100644 -index 0e4276d..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-SD6CWFDF.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/utils/transaction-type.ts"],"names":[],"mappings":";AACA,SAAS,iBAAiB;AAC1B,SAAS,aAAa;AAEtB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAKA,IAAM,qBAAqB;AAElC,IAAM,iBAAiB,IAAI,UAAU,QAAQ;AAC7C,IAAM,kBAAkB,IAAI,UAAU,SAAS;AAC/C,IAAM,mBAAmB,IAAI,UAAU,UAAU;AACjD,IAAM,gBAAgB,IAAI,UAAU,cAAc;AAWlD,eAAsB,yBACpB,UACA,UACqC;AACrC,QAAM,EAAE,MAAM,GAAG,IAAI;AAErB,MAAI,QAAQ,CAAC,IAAI;AACf,WAAO,EAAE,iDAAsC,iBAAiB,OAAU;AAAA,EAC5E;AAEA,QAAM,EAAE,cAAc,iBAAiB,kBAAkB,IACvD,MAAM,sBAAsB,UAAU,EAAE;AAE1C,MAAI,CAAC,mBAAmB;AACtB,WAAO,EAAE,qCAAkC,gBAAgB;AAAA,EAC7D;AAEA,QAAM,WAAW,OAAO,SAAS,SAAS,GAAG,MAAM;AAEnD,QAAM,4BAA4B;AAAA,IAChC;AAAA,IACA;AAAA,EACF;AAEA,MAAI,CAAC,QAAQ,UAAU;AACrB,WAAO;AAAA,EACT;AAEA,QAAM,OAAO,kCAAkC,IAAI,GAAG;AAEtD,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,QAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOxB,EAAE;AAAA,IACA,CAAC,eAAe,WAAW,YAAY,MAAO,KAAgB,YAAY;AAAA,EAC5E;AAEA,MAAI,iBAAiB;AACnB,WAAO,EAAE,MAAM,iBAAiB,gBAAgB;AAAA,EAClD;AAEA,SAAO;AACT;AAUA,SAAS,kCACP,MACoC;AACpC,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,MAAI;AACF,WAAO,eAAe,iBAAiB,EAAE,KAAK,CAAC;AAAA,EACjD,QAAQ;AAAA,EAER;AAEA,MAAI;AACF,WAAO,gBAAgB,iBAAiB,EAAE,KAAK,CAAC;AAAA,EAClD,QAAQ;AAAA,EAER;AAEA,MAAI;AACF,WAAO,iBAAiB,iBAAiB,EAAE,KAAK,CAAC;AAAA,EACnD,QAAQ;AAAA,EAER;AAEA,MAAI;AACF,WAAO,cAAc,iBAAiB,EAAE,KAAK,CAAC;AAAA,EAChD,QAAQ;AAAA,EAER;AAEA,SAAO;AACT;AASA,eAAe,sBACb,UACA,SAIC;AACD,MAAI;AACJ,MAAI;AACF,mBAAe,MAAM,MAAM,UAAU,WAAW,CAAC,OAAO,CAAC;AAAA,EAC3D,SAAS,GAAG;AACV,mBAAe;AAAA,EACjB;AAEA,QAAM,oBAAoB,eACtB,iBAAiB,QAAQ,iBAAiB,QAC1C;AACJ,SAAO,EAAE,cAAc,kBAAkB;AAC3C","sourcesContent":["import type { TransactionDescription } from '@ethersproject/abi';\nimport { Interface } from '@ethersproject/abi';\nimport { query } from '@metamask/controller-utils';\nimport type EthQuery from '@metamask/eth-query';\nimport {\n abiERC721,\n abiERC20,\n abiERC1155,\n abiFiatTokenV2,\n} from '@metamask/metamask-eth-abis';\n\nimport type { InferTransactionTypeResult, TransactionParams } from '../types';\nimport { TransactionType } from '../types';\n\nexport const ESTIMATE_GAS_ERROR = 'eth_estimateGas rpc method error';\n\nconst ERC20Interface = new Interface(abiERC20);\nconst ERC721Interface = new Interface(abiERC721);\nconst ERC1155Interface = new Interface(abiERC1155);\nconst USDCInterface = new Interface(abiFiatTokenV2);\n\n/**\n * Determines the type of the transaction by analyzing the txParams.\n * It will never return TRANSACTION_TYPE_CANCEL or TRANSACTION_TYPE_RETRY as these\n * represent specific events that we specify manually at transaction creation.\n *\n * @param txParams - Parameters for the transaction.\n * @param ethQuery - EthQuery instance.\n * @returns A object with the transaction type and the contract code response in Hex.\n */\nexport async function determineTransactionType(\n txParams: TransactionParams,\n ethQuery: EthQuery,\n): Promise {\n const { data, to } = txParams;\n\n if (data && !to) {\n return { type: TransactionType.deployContract, getCodeResponse: undefined };\n }\n\n const { contractCode: getCodeResponse, isContractAddress } =\n await readAddressAsContract(ethQuery, to);\n\n if (!isContractAddress) {\n return { type: TransactionType.simpleSend, getCodeResponse };\n }\n\n const hasValue = Number(txParams.value ?? '0') !== 0;\n\n const contractInteractionResult = {\n type: TransactionType.contractInteraction,\n getCodeResponse,\n };\n\n if (!data || hasValue) {\n return contractInteractionResult;\n }\n\n const name = parseStandardTokenTransactionData(data)?.name;\n\n if (!name) {\n return contractInteractionResult;\n }\n\n const tokenMethodName = [\n TransactionType.tokenMethodApprove,\n TransactionType.tokenMethodSetApprovalForAll,\n TransactionType.tokenMethodTransfer,\n TransactionType.tokenMethodTransferFrom,\n TransactionType.tokenMethodSafeTransferFrom,\n TransactionType.tokenMethodIncreaseAllowance,\n ].find(\n (methodName) => methodName.toLowerCase() === (name as string).toLowerCase(),\n );\n\n if (tokenMethodName) {\n return { type: tokenMethodName, getCodeResponse };\n }\n\n return contractInteractionResult;\n}\n\n/**\n * Attempts to decode transaction data using ABIs for three different token standards: ERC20, ERC721, ERC1155.\n * The data will decode correctly if the transaction is an interaction with a contract that matches one of these\n * contract standards\n *\n * @param data - Encoded transaction data.\n * @returns A representation of an ethereum contract call.\n */\nfunction parseStandardTokenTransactionData(\n data?: string,\n): TransactionDescription | undefined {\n if (!data) {\n return undefined;\n }\n\n try {\n return ERC20Interface.parseTransaction({ data });\n } catch {\n // ignore and next try to parse with erc721 ABI\n }\n\n try {\n return ERC721Interface.parseTransaction({ data });\n } catch {\n // ignore and next try to parse with erc1155 ABI\n }\n\n try {\n return ERC1155Interface.parseTransaction({ data });\n } catch {\n // ignore and return undefined\n }\n\n try {\n return USDCInterface.parseTransaction({ data });\n } catch {\n // ignore and return undefined\n }\n\n return undefined;\n}\n\n/**\n * Reads an Ethereum address and determines if it is a contract address.\n *\n * @param ethQuery - The Ethereum query object used to interact with the Ethereum blockchain.\n * @param address - The Ethereum address.\n * @returns An object containing the contract code and a boolean indicating if it is a contract address.\n */\nasync function readAddressAsContract(\n ethQuery: EthQuery,\n address?: string,\n): Promise<{\n contractCode: string | null;\n isContractAddress: boolean;\n}> {\n let contractCode;\n try {\n contractCode = await query(ethQuery, 'getCode', [address]);\n } catch (e) {\n contractCode = null;\n }\n\n const isContractAddress = contractCode\n ? contractCode !== '0x' && contractCode !== '0x0'\n : false;\n return { contractCode, isContractAddress };\n}\n"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-SFFTNB2X.mjs.map b/node_modules/@metamask/transaction-controller/dist/chunk-SFFTNB2X.mjs.map -deleted file mode 100644 -index abed464..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-SFFTNB2X.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/helpers/GasFeePoller.ts"],"sourcesContent":["import EthQuery from '@metamask/eth-query';\nimport type {\n FetchGasFeeEstimateOptions,\n GasFeeState,\n} from '@metamask/gas-fee-controller';\nimport type { NetworkClientId, Provider } from '@metamask/network-controller';\nimport type { Hex } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\nimport EventEmitter from 'events';\n\nimport { projectLogger } from '../logger';\nimport type {\n GasFeeEstimates,\n GasFeeFlow,\n GasFeeFlowRequest,\n Layer1GasFeeFlow,\n} from '../types';\nimport { TransactionStatus, type TransactionMeta } from '../types';\nimport { getGasFeeFlow } from '../utils/gas-flow';\nimport { getTransactionLayer1GasFee } from '../utils/layer1-gas-fee-flow';\n\nconst log = createModuleLogger(projectLogger, 'gas-fee-poller');\n\nconst INTERVAL_MILLISECONDS = 10000;\n\n/**\n * Automatically polls and updates suggested gas fees on unapproved transactions.\n */\nexport class GasFeePoller {\n hub: EventEmitter = new EventEmitter();\n\n #findNetworkClientIdByChainId: (chainId: Hex) => NetworkClientId | undefined;\n\n #gasFeeFlows: GasFeeFlow[];\n\n #getGasFeeControllerEstimates: (\n options: FetchGasFeeEstimateOptions,\n ) => Promise;\n\n #getProvider: (chainId: Hex, networkClientId?: NetworkClientId) => Provider;\n\n #getTransactions: () => TransactionMeta[];\n\n #layer1GasFeeFlows: Layer1GasFeeFlow[];\n\n #timeout: ReturnType | undefined;\n\n #running = false;\n\n /**\n * Constructs a new instance of the GasFeePoller.\n * @param options - The options for this instance.\n * @param options.findNetworkClientIdByChainId - Callback to find the network client ID by chain ID.\n * @param options.gasFeeFlows - The gas fee flows to use to obtain suitable gas fees.\n * @param options.getGasFeeControllerEstimates - Callback to obtain the default fee estimates.\n * @param options.getProvider - Callback to obtain a provider instance.\n * @param options.getTransactions - Callback to obtain the transaction data.\n * @param options.layer1GasFeeFlows - The layer 1 gas fee flows to use to obtain suitable layer 1 gas fees.\n * @param options.onStateChange - Callback to register a listener for controller state changes.\n */\n constructor({\n findNetworkClientIdByChainId,\n gasFeeFlows,\n getGasFeeControllerEstimates,\n getProvider,\n getTransactions,\n layer1GasFeeFlows,\n onStateChange,\n }: {\n findNetworkClientIdByChainId: (chainId: Hex) => NetworkClientId | undefined;\n gasFeeFlows: GasFeeFlow[];\n getGasFeeControllerEstimates: (\n options: FetchGasFeeEstimateOptions,\n ) => Promise;\n getProvider: (chainId: Hex, networkClientId?: NetworkClientId) => Provider;\n getTransactions: () => TransactionMeta[];\n layer1GasFeeFlows: Layer1GasFeeFlow[];\n onStateChange: (listener: () => void) => void;\n }) {\n this.#findNetworkClientIdByChainId = findNetworkClientIdByChainId;\n this.#gasFeeFlows = gasFeeFlows;\n this.#layer1GasFeeFlows = layer1GasFeeFlows;\n this.#getGasFeeControllerEstimates = getGasFeeControllerEstimates;\n this.#getProvider = getProvider;\n this.#getTransactions = getTransactions;\n\n onStateChange(() => {\n const unapprovedTransactions = this.#getUnapprovedTransactions();\n\n if (unapprovedTransactions.length) {\n this.#start();\n } else {\n this.#stop();\n }\n });\n }\n\n #start() {\n if (this.#running) {\n return;\n }\n\n // Intentionally not awaiting since this starts the timeout chain.\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.#onTimeout();\n\n this.#running = true;\n\n log('Started polling');\n }\n\n #stop() {\n if (!this.#running) {\n return;\n }\n\n clearTimeout(this.#timeout);\n\n this.#timeout = undefined;\n this.#running = false;\n\n log('Stopped polling');\n }\n\n async #onTimeout() {\n await this.#updateUnapprovedTransactions();\n\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n this.#timeout = setTimeout(() => this.#onTimeout(), INTERVAL_MILLISECONDS);\n }\n\n async #updateUnapprovedTransactions() {\n const unapprovedTransactions = this.#getUnapprovedTransactions();\n\n if (!unapprovedTransactions.length) {\n return;\n }\n\n log('Found unapproved transactions', unapprovedTransactions.length);\n\n const gasFeeControllerDataByChainId = await this.#getGasFeeControllerData(\n unapprovedTransactions,\n );\n\n log('Retrieved gas fee controller data', gasFeeControllerDataByChainId);\n\n await Promise.all(\n unapprovedTransactions.flatMap((tx) => {\n const { chainId } = tx;\n\n const gasFeeControllerData = gasFeeControllerDataByChainId.get(\n chainId,\n ) as GasFeeState;\n\n return this.#updateUnapprovedTransaction(tx, gasFeeControllerData);\n }),\n );\n }\n\n async #updateUnapprovedTransaction(\n transactionMeta: TransactionMeta,\n gasFeeControllerData: GasFeeState,\n ) {\n const { id } = transactionMeta;\n\n const [gasFeeEstimatesResponse, layer1GasFee] = await Promise.all([\n this.#updateTransactionGasFeeEstimates(\n transactionMeta,\n gasFeeControllerData,\n ),\n this.#updateTransactionLayer1GasFee(transactionMeta),\n ]);\n\n if (!gasFeeEstimatesResponse && !layer1GasFee) {\n return;\n }\n\n this.hub.emit('transaction-updated', {\n transactionId: id,\n gasFeeEstimates: gasFeeEstimatesResponse?.gasFeeEstimates,\n gasFeeEstimatesLoaded: gasFeeEstimatesResponse?.gasFeeEstimatesLoaded,\n layer1GasFee,\n });\n }\n\n async #updateTransactionGasFeeEstimates(\n transactionMeta: TransactionMeta,\n gasFeeControllerData: GasFeeState,\n ): Promise<\n | { gasFeeEstimates?: GasFeeEstimates; gasFeeEstimatesLoaded: boolean }\n | undefined\n > {\n const { chainId, networkClientId } = transactionMeta;\n\n const ethQuery = new EthQuery(this.#getProvider(chainId, networkClientId));\n const gasFeeFlow = getGasFeeFlow(transactionMeta, this.#gasFeeFlows);\n\n if (gasFeeFlow) {\n log(\n 'Found gas fee flow',\n gasFeeFlow.constructor.name,\n transactionMeta.id,\n );\n }\n\n const request: GasFeeFlowRequest = {\n ethQuery,\n gasFeeControllerData,\n transactionMeta,\n };\n\n let gasFeeEstimates: GasFeeEstimates | undefined;\n\n if (gasFeeFlow) {\n try {\n const response = await gasFeeFlow.getGasFees(request);\n gasFeeEstimates = response.estimates;\n } catch (error) {\n log('Failed to get suggested gas fees', transactionMeta.id, error);\n }\n }\n\n if (!gasFeeEstimates && transactionMeta.gasFeeEstimatesLoaded) {\n return undefined;\n }\n\n log('Updated gas fee estimates', {\n gasFeeEstimates,\n transaction: transactionMeta.id,\n });\n\n return { gasFeeEstimates, gasFeeEstimatesLoaded: true };\n }\n\n async #updateTransactionLayer1GasFee(\n transactionMeta: TransactionMeta,\n ): Promise {\n const { chainId, networkClientId } = transactionMeta;\n const provider = this.#getProvider(chainId, networkClientId);\n\n const layer1GasFee = await getTransactionLayer1GasFee({\n layer1GasFeeFlows: this.#layer1GasFeeFlows,\n provider,\n transactionMeta,\n });\n\n if (layer1GasFee) {\n log('Updated layer 1 gas fee', layer1GasFee, transactionMeta.id);\n }\n\n return layer1GasFee;\n }\n\n #getUnapprovedTransactions() {\n return this.#getTransactions().filter(\n (tx) => tx.status === TransactionStatus.unapproved,\n );\n }\n\n async #getGasFeeControllerData(\n transactions: TransactionMeta[],\n ): Promise> {\n const networkClientIdsByChainId = new Map();\n\n for (const transaction of transactions) {\n const { chainId, networkClientId: transactionNetworkClientId } =\n transaction;\n\n if (networkClientIdsByChainId.has(chainId)) {\n continue;\n }\n\n const networkClientId =\n transactionNetworkClientId ??\n (this.#findNetworkClientIdByChainId(chainId) as string);\n\n networkClientIdsByChainId.set(chainId, networkClientId);\n }\n\n log('Extracted network client IDs by chain ID', networkClientIdsByChainId);\n\n const entryPromises = Array.from(networkClientIdsByChainId.entries()).map(\n async ([chainId, networkClientId]) => {\n return [\n chainId,\n await this.#getGasFeeControllerEstimates({ networkClientId }),\n ] as const;\n },\n );\n\n return new Map(await Promise.all(entryPromises));\n }\n}\n"],"mappings":"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","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-2EU6346V.js b/node_modules/@metamask/transaction-controller/dist/chunk-T6E2PUIA.js -similarity index 98% -rename from node_modules/@metamask/transaction-controller/dist/chunk-2EU6346V.js -rename to node_modules/@metamask/transaction-controller/dist/chunk-T6E2PUIA.js -index 6e53a30..b5cfdff 100644 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-2EU6346V.js -+++ b/node_modules/@metamask/transaction-controller/dist/chunk-T6E2PUIA.js -@@ -3,7 +3,7 @@ - var _chunk2XKEAKQGjs = require('./chunk-2XKEAKQG.js'); - - --var _chunk76FONEDAjs = require('./chunk-76FONEDA.js'); -+var _chunkWCSGEGPWjs = require('./chunk-WCSGEGPW.js'); - - - var _chunkS6VGOPUYjs = require('./chunk-S6VGOPUY.js'); -@@ -148,7 +148,7 @@ _updateTransactionGasFeeEstimates = new WeakSet(); - updateTransactionGasFeeEstimates_fn = async function(transactionMeta, gasFeeControllerData) { - const { chainId, networkClientId } = transactionMeta; - const ethQuery = new (0, _ethquery2.default)(_chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _getProvider).call(this, chainId, networkClientId)); -- const gasFeeFlow = _chunk76FONEDAjs.getGasFeeFlow.call(void 0, transactionMeta, _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _gasFeeFlows)); -+ const gasFeeFlow = _chunkWCSGEGPWjs.getGasFeeFlow.call(void 0, transactionMeta, _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _gasFeeFlows)); - if (gasFeeFlow) { - log( - "Found gas fee flow", -@@ -225,4 +225,4 @@ getGasFeeControllerData_fn = async function(transactions) { - - - exports.GasFeePoller = GasFeePoller; --//# sourceMappingURL=chunk-2EU6346V.js.map -\ No newline at end of file -+//# sourceMappingURL=chunk-T6E2PUIA.js.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-TJMQEH57.js.map b/node_modules/@metamask/transaction-controller/dist/chunk-TJMQEH57.js.map -deleted file mode 100644 -index fe3a4f0..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-TJMQEH57.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/gas-flows/TestGasFeeFlow.ts"],"names":[],"mappings":";;;;;;;;AAAA,SAAS,aAAa;AAWtB,IAAM,YAAY;AAClB,IAAM,mBAAmB;AAZzB;AAmBO,IAAM,iBAAN,MAA2C;AAAA,EAA3C;AA0DL;AAzDA,iCAAW;AAAA;AAAA,EAEX,mBAAmB,kBAA4C;AAC7D,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,WAAW,SAAyD;AACxE,UAAM,EAAE,gBAAgB,IAAI;AAC5B,UAAM,EAAE,SAAS,IAAI;AACrB,UAAM,EAAE,KAAK,OAAO,IAAI;AAExB,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,uCAAuC;AAAA,IACzD;AAEA,UAAM,aAAa,SAAS,QAAQ,EAAE;AACtC,UAAM,aAAa,YAAY;AAE/B,UAAM,mBAAmB,mBAAK,YAAW,KAAK;AAC9C,UAAM,uBAAuB,mBAAK,YAAW;AAE7C,UAAM,eAAe,kBAAkB;AACvC,UAAM,oBAAoB,uBAAuB;AAEjD,UAAM,gBAAgB,kBAAkB;AACxC,UAAM,qBAAqB,uBAAuB;AAElD,uBAAK,UAAL,mBAAK,YAAY;AAEjB,WAAO;AAAA,MACL,WAAW;AAAA,QACT;AAAA,QACA,KAAK;AAAA,UACH,cAAc,sBAAK,8CAAL,WAA0B,cAAc;AAAA,UACtD,sBAAsB,sBAAK,8CAAL,WACpB,mBACA;AAAA,QAEJ;AAAA,QACA,QAAQ;AAAA,UACN,cAAc,sBAAK,8CAAL,WAA0B,iBAAiB;AAAA,UACzD,sBAAsB,sBAAK,8CAAL,WACpB,sBACA;AAAA,QAEJ;AAAA,QACA,MAAM;AAAA,UACJ,cAAc,sBAAK,8CAAL,WAA0B,eAAe;AAAA,UACvD,sBAAsB,sBAAK,8CAAL,WACpB,oBACA;AAAA,QAEJ;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAMF;AA7DE;AAyDA;AAAA,yBAAoB,SAAC,UAAkB,KAAkB;AACvD,QAAM,aAAa,KAAK,KAAK,WAAW,GAAG;AAC3C,SAAO,MAAM,UAAU;AACzB","sourcesContent":["import { toHex } from '@metamask/controller-utils';\nimport type { Hex } from '@metamask/utils';\n\nimport {\n GasFeeEstimateType,\n type GasFeeFlow,\n type GasFeeFlowRequest,\n type GasFeeFlowResponse,\n type TransactionMeta,\n} from '../types';\n\nconst INCREMENT = 1e15; // 0.001 ETH\nconst LEVEL_DIFFERENCE = 0.5;\n\n/**\n * A gas fee flow to facilitate testing in the clients.\n * Increments the total gas fee by a fixed amount each time it is called.\n * Relies on the transaction's gas value to generate a distinct total fee in the UI.\n */\nexport class TestGasFeeFlow implements GasFeeFlow {\n #counter = 1;\n\n matchesTransaction(_transactionMeta: TransactionMeta): boolean {\n return true;\n }\n\n async getGasFees(request: GasFeeFlowRequest): Promise {\n const { transactionMeta } = request;\n const { txParams } = transactionMeta;\n const { gas: gasHex } = txParams;\n\n if (!gasHex) {\n throw new Error('Cannot estimate fee without gas value');\n }\n\n const gasDecimal = parseInt(gasHex, 16);\n const difference = INCREMENT * LEVEL_DIFFERENCE;\n\n const mediumMaxTarget = (this.#counter + 1) * INCREMENT;\n const mediumPriorityTarget = this.#counter * INCREMENT;\n\n const lowMaxTarget = mediumMaxTarget - difference;\n const lowPriorityTarget = mediumPriorityTarget - difference;\n\n const highMaxTarget = mediumMaxTarget + difference;\n const highPriorityTarget = mediumPriorityTarget + difference;\n\n this.#counter += 1;\n\n return {\n estimates: {\n type: GasFeeEstimateType.FeeMarket,\n low: {\n maxFeePerGas: this.#getValueForTotalFee(lowMaxTarget, gasDecimal),\n maxPriorityFeePerGas: this.#getValueForTotalFee(\n lowPriorityTarget,\n gasDecimal,\n ),\n },\n medium: {\n maxFeePerGas: this.#getValueForTotalFee(mediumMaxTarget, gasDecimal),\n maxPriorityFeePerGas: this.#getValueForTotalFee(\n mediumPriorityTarget,\n gasDecimal,\n ),\n },\n high: {\n maxFeePerGas: this.#getValueForTotalFee(highMaxTarget, gasDecimal),\n maxPriorityFeePerGas: this.#getValueForTotalFee(\n highPriorityTarget,\n gasDecimal,\n ),\n },\n },\n };\n }\n\n #getValueForTotalFee(totalFee: number, gas: number): Hex {\n const feeDecimal = Math.ceil(totalFee / gas);\n return toHex(feeDecimal);\n }\n}\n"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-5ZEJT5SN.mjs b/node_modules/@metamask/transaction-controller/dist/chunk-TQS7IKY6.mjs -similarity index 98% -rename from node_modules/@metamask/transaction-controller/dist/chunk-5ZEJT5SN.mjs -rename to node_modules/@metamask/transaction-controller/dist/chunk-TQS7IKY6.mjs -index a89ce83..1708759 100644 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-5ZEJT5SN.mjs -+++ b/node_modules/@metamask/transaction-controller/dist/chunk-TQS7IKY6.mjs -@@ -1,6 +1,6 @@ - import { - isEIP1559Transaction --} from "./chunk-Q56I5ONX.mjs"; -+} from "./chunk-F7IJZOCR.mjs"; - - // src/utils/validation.ts - import { Interface } from "@ethersproject/abi"; -@@ -183,4 +183,4 @@ export { - validateTransactionOrigin, - validateTxParams - }; --//# sourceMappingURL=chunk-5ZEJT5SN.mjs.map -\ No newline at end of file -+//# sourceMappingURL=chunk-TQS7IKY6.mjs.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-UGN7PBON.js.map b/node_modules/@metamask/transaction-controller/dist/chunk-UGN7PBON.js.map -deleted file mode 100644 -index 2d4abdf..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-UGN7PBON.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/constants.ts"],"names":[],"mappings":"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","sourcesContent":["export const CHAIN_IDS = {\n MAINNET: '0x1',\n GOERLI: '0x5',\n BASE: '0x2105',\n BASE_TESTNET: '0x14a33',\n BSC: '0x38',\n BSC_TESTNET: '0x61',\n OPTIMISM: '0xa',\n OPTIMISM_TESTNET: '0x1a4',\n OPBNB: '0xcc',\n OPBNB_TESTNET: '0x15eb',\n OPTIMISM_SEPOLIA: '0xaa37dc',\n POLYGON: '0x89',\n POLYGON_TESTNET: '0x13881',\n AVALANCHE: '0xa86a',\n AVALANCHE_TESTNET: '0xa869',\n FANTOM: '0xfa',\n FANTOM_TESTNET: '0xfa2',\n SEPOLIA: '0xaa36a7',\n LINEA_GOERLI: '0xe704',\n LINEA_SEPOLIA: '0xe705',\n LINEA_MAINNET: '0xe708',\n MOONBEAM: '0x504',\n MOONBEAM_TESTNET: '0x507',\n MOONRIVER: '0x505',\n GNOSIS: '0x64',\n ARBITRUM: '0xa4b1',\n ZKSYNC_ERA: '0x144',\n ZORA: '0x76adf1',\n SCROLL: '0x82750',\n SCROLL_SEPOLIA: '0x8274f',\n} as const;\n\nexport const DEFAULT_ETHERSCAN_DOMAIN = 'etherscan.io';\nexport const DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX = 'api';\n\nexport const ETHERSCAN_SUPPORTED_NETWORKS = {\n [CHAIN_IDS.GOERLI]: {\n domain: DEFAULT_ETHERSCAN_DOMAIN,\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-goerli`,\n },\n [CHAIN_IDS.MAINNET]: {\n domain: DEFAULT_ETHERSCAN_DOMAIN,\n subdomain: DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,\n },\n [CHAIN_IDS.SEPOLIA]: {\n domain: DEFAULT_ETHERSCAN_DOMAIN,\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-sepolia`,\n },\n [CHAIN_IDS.LINEA_GOERLI]: {\n domain: 'lineascan.build',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-goerli`,\n },\n [CHAIN_IDS.LINEA_SEPOLIA]: {\n domain: 'lineascan.build',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-sepolia`,\n },\n [CHAIN_IDS.LINEA_MAINNET]: {\n domain: 'lineascan.build',\n subdomain: DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,\n },\n [CHAIN_IDS.BSC]: {\n domain: 'bscscan.com',\n subdomain: DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,\n },\n [CHAIN_IDS.BSC_TESTNET]: {\n domain: 'bscscan.com',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-testnet`,\n },\n [CHAIN_IDS.OPTIMISM]: {\n domain: DEFAULT_ETHERSCAN_DOMAIN,\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-optimistic`,\n },\n [CHAIN_IDS.OPTIMISM_SEPOLIA]: {\n domain: DEFAULT_ETHERSCAN_DOMAIN,\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-sepolia-optimistic`,\n },\n [CHAIN_IDS.POLYGON]: {\n domain: 'polygonscan.com',\n subdomain: DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,\n },\n [CHAIN_IDS.POLYGON_TESTNET]: {\n domain: 'polygonscan.com',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-mumbai`,\n },\n [CHAIN_IDS.AVALANCHE]: {\n domain: 'snowtrace.io',\n subdomain: DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,\n },\n [CHAIN_IDS.AVALANCHE_TESTNET]: {\n domain: 'snowtrace.io',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-testnet`,\n },\n [CHAIN_IDS.FANTOM]: {\n domain: 'ftmscan.com',\n subdomain: DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,\n },\n [CHAIN_IDS.FANTOM_TESTNET]: {\n domain: 'ftmscan.com',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-testnet`,\n },\n [CHAIN_IDS.MOONBEAM]: {\n domain: 'moonscan.io',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-moonbeam`,\n },\n [CHAIN_IDS.MOONBEAM_TESTNET]: {\n domain: 'moonscan.io',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-moonbase`,\n },\n [CHAIN_IDS.MOONRIVER]: {\n domain: 'moonscan.io',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-moonriver`,\n },\n [CHAIN_IDS.GNOSIS]: {\n domain: 'gnosisscan.io',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-gnosis`,\n },\n};\n\nexport const GAS_BUFFER_CHAIN_OVERRIDES = {\n [CHAIN_IDS.OPTIMISM]: 1,\n [CHAIN_IDS.OPTIMISM_SEPOLIA]: 1,\n};\n\n/** Extract of the Wrapped ERC-20 ABI required for simulation. */\nexport const ABI_SIMULATION_ERC20_WRAPPED = [\n {\n anonymous: false,\n inputs: [\n { indexed: true, name: 'to', type: 'address' },\n { indexed: false, name: 'wad', type: 'uint256' },\n ],\n name: 'Deposit',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, name: 'from', type: 'address' },\n { indexed: false, name: 'wad', type: 'uint256' },\n ],\n name: 'Withdrawal',\n type: 'event',\n },\n];\n\n/** Extract of the legacy ERC-721 ABI required for simulation. */\nexport const ABI_SIMULATION_ERC721_LEGACY = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n name: '_from',\n type: 'address',\n },\n {\n indexed: false,\n name: '_to',\n type: 'address',\n },\n {\n indexed: false,\n name: '_tokenId',\n type: 'uint256',\n },\n ],\n name: 'Transfer',\n type: 'event',\n },\n];\n"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-UHG2LLVV.mjs.map b/node_modules/@metamask/transaction-controller/dist/chunk-UHG2LLVV.mjs.map -deleted file mode 100644 -index fb3df62..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-UHG2LLVV.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/gas-flows/LineaGasFeeFlow.ts"],"sourcesContent":["import { ChainId, hexToBN, query, toHex } from '@metamask/controller-utils';\nimport type EthQuery from '@metamask/eth-query';\nimport { createModuleLogger, type Hex } from '@metamask/utils';\nimport type BN from 'bn.js';\n\nimport { projectLogger } from '../logger';\nimport type {\n GasFeeEstimates,\n GasFeeFlow,\n GasFeeFlowRequest,\n GasFeeFlowResponse,\n TransactionMeta,\n} from '../types';\nimport { GasFeeEstimateLevel, GasFeeEstimateType } from '../types';\nimport { DefaultGasFeeFlow } from './DefaultGasFeeFlow';\n\ntype LineaEstimateGasResponse = {\n baseFeePerGas: Hex;\n priorityFeePerGas: Hex;\n};\n\ntype FeesByLevel = {\n [key in GasFeeEstimateLevel]: BN;\n};\n\nconst log = createModuleLogger(projectLogger, 'linea-gas-fee-flow');\n\nconst LINEA_CHAIN_IDS: Hex[] = [\n ChainId['linea-mainnet'],\n ChainId['linea-goerli'],\n ChainId['linea-sepolia'],\n];\n\nconst BASE_FEE_MULTIPLIERS = {\n low: 1,\n medium: 1.35,\n high: 1.7,\n};\n\nconst PRIORITY_FEE_MULTIPLIERS = {\n low: 1,\n medium: 1.05,\n high: 1.1,\n};\n\n/**\n * Implementation of a gas fee flow specific to Linea networks that obtains gas fee estimates using:\n * - The `linea_estimateGas` RPC method to obtain the base fee and lowest priority fee.\n * - Static multipliers to increase the base and priority fees.\n */\nexport class LineaGasFeeFlow implements GasFeeFlow {\n matchesTransaction(transactionMeta: TransactionMeta): boolean {\n return LINEA_CHAIN_IDS.includes(transactionMeta.chainId);\n }\n\n async getGasFees(request: GasFeeFlowRequest): Promise {\n try {\n return await this.#getLineaGasFees(request);\n } catch (error) {\n log('Using default flow as fallback due to error', error);\n return new DefaultGasFeeFlow().getGasFees(request);\n }\n }\n\n async #getLineaGasFees(\n request: GasFeeFlowRequest,\n ): Promise {\n const { ethQuery, transactionMeta } = request;\n\n const lineaResponse = await this.#getLineaResponse(\n transactionMeta,\n ethQuery,\n );\n\n log('Received Linea response', lineaResponse);\n\n const baseFees = this.#getValuesFromMultipliers(\n lineaResponse.baseFeePerGas,\n BASE_FEE_MULTIPLIERS,\n );\n\n log('Generated base fees', this.#feesToString(baseFees));\n\n const priorityFees = this.#getValuesFromMultipliers(\n lineaResponse.priorityFeePerGas,\n PRIORITY_FEE_MULTIPLIERS,\n );\n\n log('Generated priority fees', this.#feesToString(priorityFees));\n\n const maxFees = this.#getMaxFees(baseFees, priorityFees);\n\n log('Generated max fees', this.#feesToString(maxFees));\n\n const estimates = Object.values(GasFeeEstimateLevel).reduce(\n (result, level) => ({\n ...result,\n [level]: {\n maxFeePerGas: toHex(maxFees[level]),\n maxPriorityFeePerGas: toHex(priorityFees[level]),\n },\n }),\n { type: GasFeeEstimateType.FeeMarket } as GasFeeEstimates,\n );\n\n return { estimates };\n }\n\n #getLineaResponse(\n transactionMeta: TransactionMeta,\n ethQuery: EthQuery,\n ): Promise {\n return query(ethQuery, 'linea_estimateGas', [\n {\n from: transactionMeta.txParams.from,\n to: transactionMeta.txParams.to,\n value: transactionMeta.txParams.value,\n input: transactionMeta.txParams.data,\n // Required in request but no impact on response.\n gasPrice: '0x100000000',\n },\n ]);\n }\n\n #getValuesFromMultipliers(\n value: Hex,\n multipliers: { low: number; medium: number; high: number },\n ): FeesByLevel {\n const base = hexToBN(value);\n const low = base.muln(multipliers.low);\n const medium = base.muln(multipliers.medium);\n const high = base.muln(multipliers.high);\n\n return {\n low,\n medium,\n high,\n };\n }\n\n #getMaxFees(\n baseFees: Record,\n priorityFees: Record,\n ): FeesByLevel {\n return {\n low: baseFees.low.add(priorityFees.low),\n medium: baseFees.medium.add(priorityFees.medium),\n high: baseFees.high.add(priorityFees.high),\n };\n }\n\n #feesToString(fees: FeesByLevel) {\n return Object.values(GasFeeEstimateLevel).map((level) =>\n fees[level].toString(10),\n );\n }\n}\n"],"mappings":"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","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-UKV5HIMT.mjs.map b/node_modules/@metamask/transaction-controller/dist/chunk-UKV5HIMT.mjs.map -deleted file mode 100644 -index d562a47..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-UKV5HIMT.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/TransactionController.ts"],"sourcesContent":["import { Hardfork, Common, type ChainConfig } from '@ethereumjs/common';\nimport type { TypedTransaction } from '@ethereumjs/tx';\nimport { TransactionFactory } from '@ethereumjs/tx';\nimport { bufferToHex } from '@ethereumjs/util';\nimport type { AccountsControllerGetSelectedAccountAction } from '@metamask/accounts-controller';\nimport type {\n AcceptResultCallbacks,\n AddApprovalRequest,\n AddResult,\n} from '@metamask/approval-controller';\nimport type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n RestrictedControllerMessenger,\n} from '@metamask/base-controller';\nimport { BaseController } from '@metamask/base-controller';\nimport {\n query,\n ApprovalType,\n ORIGIN_METAMASK,\n convertHexToDecimal,\n isInfuraNetworkType,\n} from '@metamask/controller-utils';\nimport EthQuery from '@metamask/eth-query';\nimport type {\n FetchGasFeeEstimateOptions,\n GasFeeState,\n} from '@metamask/gas-fee-controller';\nimport type {\n BlockTracker,\n NetworkClientId,\n NetworkController,\n NetworkControllerStateChangeEvent,\n NetworkState,\n Provider,\n NetworkControllerFindNetworkClientIdByChainIdAction,\n NetworkControllerGetNetworkClientByIdAction,\n} from '@metamask/network-controller';\nimport { NetworkClientType } from '@metamask/network-controller';\nimport type {\n NonceLock,\n Transaction as NonceTrackerTransaction,\n} from '@metamask/nonce-tracker';\nimport { NonceTracker } from '@metamask/nonce-tracker';\nimport { errorCodes, rpcErrors, providerErrors } from '@metamask/rpc-errors';\nimport type { Hex } from '@metamask/utils';\nimport { add0x } from '@metamask/utils';\nimport { Mutex } from 'async-mutex';\nimport { MethodRegistry } from 'eth-method-registry';\nimport { EventEmitter } from 'events';\nimport { cloneDeep, mapValues, merge, pickBy, sortBy, isEqual } from 'lodash';\nimport { v1 as random } from 'uuid';\n\nimport { DefaultGasFeeFlow } from './gas-flows/DefaultGasFeeFlow';\nimport { LineaGasFeeFlow } from './gas-flows/LineaGasFeeFlow';\nimport { OptimismLayer1GasFeeFlow } from './gas-flows/OptimismLayer1GasFeeFlow';\nimport { ScrollLayer1GasFeeFlow } from './gas-flows/ScrollLayer1GasFeeFlow';\nimport { TestGasFeeFlow } from './gas-flows/TestGasFeeFlow';\nimport { EtherscanRemoteTransactionSource } from './helpers/EtherscanRemoteTransactionSource';\nimport { GasFeePoller } from './helpers/GasFeePoller';\nimport type { IncomingTransactionOptions } from './helpers/IncomingTransactionHelper';\nimport { IncomingTransactionHelper } from './helpers/IncomingTransactionHelper';\nimport { MultichainTrackingHelper } from './helpers/MultichainTrackingHelper';\nimport { PendingTransactionTracker } from './helpers/PendingTransactionTracker';\nimport { projectLogger as log } from './logger';\nimport type {\n DappSuggestedGasFees,\n Layer1GasFeeFlow,\n SavedGasFees,\n SecurityProviderRequest,\n SendFlowHistoryEntry,\n TransactionParams,\n TransactionMeta,\n TransactionReceipt,\n WalletDevice,\n SecurityAlertResponse,\n GasFeeFlow,\n SimulationData,\n GasFeeEstimates,\n GasFeeFlowResponse,\n} from './types';\nimport {\n TransactionEnvelopeType,\n TransactionType,\n TransactionStatus,\n SimulationErrorCode,\n} from './types';\nimport { validateConfirmedExternalTransaction } from './utils/external-transactions';\nimport { addGasBuffer, estimateGas, updateGas } from './utils/gas';\nimport { updateGasFees } from './utils/gas-fees';\nimport { getGasFeeFlow } from './utils/gas-flow';\nimport {\n addInitialHistorySnapshot,\n updateTransactionHistory,\n} from './utils/history';\nimport {\n getTransactionLayer1GasFee,\n updateTransactionLayer1GasFee,\n} from './utils/layer1-gas-fee-flow';\nimport {\n getAndFormatTransactionsForNonceTracker,\n getNextNonce,\n} from './utils/nonce';\nimport { getSimulationData } from './utils/simulation';\nimport {\n updatePostTransactionBalance,\n updateSwapsTransaction,\n} from './utils/swaps';\nimport { determineTransactionType } from './utils/transaction-type';\nimport {\n getIncreasedPriceFromExisting,\n normalizeTransactionParams,\n isEIP1559Transaction,\n isFeeMarketEIP1559Values,\n isGasPriceValue,\n validateGasValues,\n validateIfTransactionUnapproved,\n validateMinimumIncrease,\n normalizeTxError,\n normalizeGasFeeValues,\n} from './utils/utils';\nimport {\n validateTransactionOrigin,\n validateTxParams,\n} from './utils/validation';\n\n/**\n * Metadata for the TransactionController state, describing how to \"anonymize\"\n * the state and which parts should be persisted.\n */\nconst metadata = {\n transactions: {\n persist: true,\n anonymous: false,\n },\n methodData: {\n persist: true,\n anonymous: false,\n },\n lastFetchedBlockNumbers: {\n persist: true,\n anonymous: false,\n },\n};\n\nexport const HARDFORK = Hardfork.London;\n\n/**\n * Object with new transaction's meta and a promise resolving to the\n * transaction hash if successful.\n *\n * @property result - Promise resolving to a new transaction hash\n * @property transactionMeta - Meta information about this new transaction\n */\n// This interface was created before this ESLint rule was added.\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface Result {\n result: Promise;\n transactionMeta: TransactionMeta;\n}\n\n// This interface was created before this ESLint rule was added.\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface GasPriceValue {\n gasPrice: string;\n}\n\n// This interface was created before this ESLint rule was added.\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface FeeMarketEIP1559Values {\n maxFeePerGas: string;\n maxPriorityFeePerGas: string;\n}\n\n/**\n * Method data registry object\n *\n * @property registryMethod - Registry method raw string\n * @property parsedRegistryMethod - Registry method object, containing name and method arguments\n */\nexport type MethodData = {\n registryMethod: string;\n parsedRegistryMethod:\n | {\n name: string;\n args: { type: string }[];\n }\n | {\n // We're using `any` instead of `undefined` for compatibility with `Json`\n // TODO: Correct this type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n name?: any;\n // We're using `any` instead of `undefined` for compatibility with `Json`\n // TODO: Correct this type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n args?: any;\n };\n};\n\n/**\n * Transaction controller state\n *\n * @property transactions - A list of TransactionMeta objects\n * @property methodData - Object containing all known method data information\n * @property lastFetchedBlockNumbers - Last fetched block numbers.\n */\nexport type TransactionControllerState = {\n transactions: TransactionMeta[];\n methodData: Record;\n lastFetchedBlockNumbers: { [key: string]: number };\n};\n\n/**\n * Multiplier used to determine a transaction's increased gas fee during cancellation\n */\nexport const CANCEL_RATE = 1.1;\n\n/**\n * Multiplier used to determine a transaction's increased gas fee during speed up\n */\nexport const SPEED_UP_RATE = 1.1;\n\n/**\n * Represents the `TransactionController:getState` action.\n */\nexport type TransactionControllerGetStateAction = ControllerGetStateAction<\n typeof controllerName,\n TransactionControllerState\n>;\n\n/**\n * The internal actions available to the TransactionController.\n */\nexport type TransactionControllerActions = TransactionControllerGetStateAction;\n\n/**\n * Configuration options for the PendingTransactionTracker\n *\n * @property isResubmitEnabled - Whether transaction publishing is automatically retried.\n */\nexport type PendingTransactionOptions = {\n isResubmitEnabled?: () => boolean;\n};\n\n/**\n * TransactionController constructor options.\n *\n * @property blockTracker - The block tracker used to poll for new blocks data.\n * @property disableHistory - Whether to disable storing history in transaction metadata.\n * @property disableSendFlowHistory - Explicitly disable transaction metadata history.\n * @property disableSwaps - Whether to disable additional processing on swaps transactions.\n * @property getCurrentAccountEIP1559Compatibility - Whether or not the account supports EIP-1559.\n * @property getCurrentNetworkEIP1559Compatibility - Whether or not the network supports EIP-1559.\n * @property getExternalPendingTransactions - Callback to retrieve pending transactions from external sources.\n * @property getGasFeeEstimates - Callback to retrieve gas fee estimates.\n * @property getNetworkClientRegistry - Gets the network client registry.\n * @property getNetworkState - Gets the state of the network controller.\n * @property getPermittedAccounts - Get accounts that a given origin has permissions for.\n * @property getSavedGasFees - Gets the saved gas fee config.\n * @property getSelectedAddress - Gets the address of the currently selected account.\n * @property incomingTransactions - Configuration options for incoming transaction support.\n * @property isMultichainEnabled - Enable multichain support.\n * @property isSimulationEnabled - Whether new transactions will be automatically simulated.\n * @property messenger - The controller messenger.\n * @property onNetworkStateChange - Allows subscribing to network controller state changes.\n * @property pendingTransactions - Configuration options for pending transaction support.\n * @property provider - The provider used to create the underlying EthQuery instance.\n * @property securityProviderRequest - A function for verifying a transaction, whether it is malicious or not.\n * @property sign - Function used to sign transactions.\n * @property state - Initial state to set on this controller.\n * @property transactionHistoryLimit - Transaction history limit.\n * @property hooks - The controller hooks.\n * @property hooks.afterSign - Additional logic to execute after signing a transaction. Return false to not change the status to signed.\n * @property hooks.beforeApproveOnInit - Additional logic to execute before starting an approval flow for a transaction during initialization. Return false to skip the transaction.\n * @property hooks.beforeCheckPendingTransaction - Additional logic to execute before checking pending transactions. Return false to prevent the broadcast of the transaction.\n * @property hooks.beforePublish - Additional logic to execute before publishing a transaction. Return false to prevent the broadcast of the transaction.\n * @property hooks.getAdditionalSignArguments - Returns additional arguments required to sign a transaction.\n * @property hooks.publish - Alternate logic to publish a transaction.\n */\nexport type TransactionControllerOptions = {\n blockTracker: BlockTracker;\n disableHistory: boolean;\n disableSendFlowHistory: boolean;\n disableSwaps: boolean;\n getCurrentAccountEIP1559Compatibility?: () => Promise;\n getCurrentNetworkEIP1559Compatibility: () => Promise;\n getExternalPendingTransactions?: (\n address: string,\n chainId?: string,\n ) => NonceTrackerTransaction[];\n getGasFeeEstimates?: (\n options: FetchGasFeeEstimateOptions,\n ) => Promise;\n getNetworkClientRegistry: NetworkController['getNetworkClientRegistry'];\n getNetworkState: () => NetworkState;\n getPermittedAccounts: (origin?: string) => Promise;\n getSavedGasFees?: (chainId: Hex) => SavedGasFees | undefined;\n incomingTransactions?: IncomingTransactionOptions;\n isMultichainEnabled: boolean;\n isSimulationEnabled?: () => boolean;\n messenger: TransactionControllerMessenger;\n onNetworkStateChange: (listener: (state: NetworkState) => void) => void;\n pendingTransactions?: PendingTransactionOptions;\n provider: Provider;\n securityProviderRequest?: SecurityProviderRequest;\n sign?: (\n transaction: TypedTransaction,\n from: string,\n transactionMeta?: TransactionMeta,\n ) => Promise;\n state?: Partial;\n testGasFeeFlows?: boolean;\n transactionHistoryLimit: number;\n hooks: {\n afterSign?: (\n transactionMeta: TransactionMeta,\n signedTx: TypedTransaction,\n ) => boolean;\n beforeApproveOnInit?: (transactionMeta: TransactionMeta) => boolean;\n beforeCheckPendingTransaction?: (\n transactionMeta: TransactionMeta,\n ) => boolean;\n beforePublish?: (transactionMeta: TransactionMeta) => boolean;\n getAdditionalSignArguments?: (\n transactionMeta: TransactionMeta,\n ) => (TransactionMeta | undefined)[];\n publish?: (\n transactionMeta: TransactionMeta,\n ) => Promise<{ transactionHash: string }>;\n };\n};\n\n/**\n * The name of the {@link TransactionController}.\n */\nconst controllerName = 'TransactionController';\n\n/**\n * The external actions available to the {@link TransactionController}.\n */\nexport type AllowedActions =\n | AddApprovalRequest\n | NetworkControllerFindNetworkClientIdByChainIdAction\n | NetworkControllerGetNetworkClientByIdAction\n | AccountsControllerGetSelectedAccountAction;\n\n/**\n * The external events available to the {@link TransactionController}.\n */\nexport type AllowedEvents = NetworkControllerStateChangeEvent;\n\n/**\n * Represents the `TransactionController:stateChange` event.\n */\nexport type TransactionControllerStateChangeEvent = ControllerStateChangeEvent<\n typeof controllerName,\n TransactionControllerState\n>;\n\n/**\n * Represents the `TransactionController:incomingTransactionBlockReceived` event.\n */\nexport type TransactionControllerIncomingTransactionBlockReceivedEvent = {\n type: `${typeof controllerName}:incomingTransactionBlockReceived`;\n payload: [blockNumber: number];\n};\n\n/**\n * Represents the `TransactionController:postTransactionBalanceUpdated` event.\n */\nexport type TransactionControllerPostTransactionBalanceUpdatedEvent = {\n type: `${typeof controllerName}:postTransactionBalanceUpdated`;\n payload: [\n {\n transactionMeta: TransactionMeta;\n approvalTransactionMeta?: TransactionMeta;\n },\n ];\n};\n\n/**\n * Represents the `TransactionController:speedUpTransactionAdded` event.\n */\nexport type TransactionControllerSpeedupTransactionAddedEvent = {\n type: `${typeof controllerName}:speedupTransactionAdded`;\n payload: [transactionMeta: TransactionMeta];\n};\n\n/**\n * Represents the `TransactionController:transactionApproved` event.\n */\nexport type TransactionControllerTransactionApprovedEvent = {\n type: `${typeof controllerName}:transactionApproved`;\n payload: [\n {\n transactionMeta: TransactionMeta;\n actionId?: string;\n },\n ];\n};\n\n/**\n * Represents the `TransactionController:transactionConfirmed` event.\n */\nexport type TransactionControllerTransactionConfirmedEvent = {\n type: `${typeof controllerName}:transactionConfirmed`;\n payload: [transactionMeta: TransactionMeta];\n};\n\n/**\n * Represents the `TransactionController:transactionDropped` event.\n */\nexport type TransactionControllerTransactionDroppedEvent = {\n type: `${typeof controllerName}:transactionDropped`;\n payload: [{ transactionMeta: TransactionMeta }];\n};\n\n/**\n * Represents the `TransactionController:transactionFailed` event.\n */\nexport type TransactionControllerTransactionFailedEvent = {\n type: `${typeof controllerName}:transactionFailed`;\n payload: [\n {\n actionId?: string;\n error: string;\n transactionMeta: TransactionMeta;\n },\n ];\n};\n\n/**\n * Represents the `TransactionController:transactionFinished` event.\n */\nexport type TransactionControllerTransactionFinishedEvent = {\n type: `${typeof controllerName}:transactionFinished`;\n payload: [transactionMeta: TransactionMeta];\n};\n\n/**\n * Represents the `TransactionController:transactionNewSwapApproval` event.\n */\nexport type TransactionControllerTransactionNewSwapApprovalEvent = {\n type: `${typeof controllerName}:transactionNewSwapApproval`;\n payload: [{ transactionMeta: TransactionMeta }];\n};\n\n/**\n * Represents the `TransactionController:transactionNewSwap` event.\n */\nexport type TransactionControllerTransactionNewSwapEvent = {\n type: `${typeof controllerName}:transactionNewSwap`;\n payload: [{ transactionMeta: TransactionMeta }];\n};\n\n/**\n * Represents the `TransactionController:transactionNewSwapApproval` event.\n */\nexport type TransactionControllerTransactionNewSwapAndSendEvent = {\n type: `${typeof controllerName}:transactionNewSwapAndSend`;\n payload: [{ transactionMeta: TransactionMeta }];\n};\n\n/**\n * Represents the `TransactionController:transactionPublishingSkipped` event.\n */\nexport type TransactionControllerTransactionPublishingSkipped = {\n type: `${typeof controllerName}:transactionPublishingSkipped`;\n payload: [transactionMeta: TransactionMeta];\n};\n\n/**\n * Represents the `TransactionController:transactionRejected` event.\n */\nexport type TransactionControllerTransactionRejectedEvent = {\n type: `${typeof controllerName}:transactionRejected`;\n payload: [\n {\n transactionMeta: TransactionMeta;\n actionId?: string;\n },\n ];\n};\n\n/**\n * Represents the `TransactionController:transactionStatusUpdated` event.\n */\nexport type TransactionControllerTransactionStatusUpdatedEvent = {\n type: `${typeof controllerName}:transactionStatusUpdated`;\n payload: [\n {\n transactionMeta: TransactionMeta;\n },\n ];\n};\n\n/**\n * Represents the `TransactionController:transactionSubmitted` event.\n */\nexport type TransactionControllerTransactionSubmittedEvent = {\n type: `${typeof controllerName}:transactionSubmitted`;\n payload: [\n {\n transactionMeta: TransactionMeta;\n actionId?: string;\n },\n ];\n};\n\n/**\n * Represents the `TransactionController:unapprovedTransactionAdded` event.\n */\nexport type TransactionControllerUnapprovedTransactionAddedEvent = {\n type: `${typeof controllerName}:unapprovedTransactionAdded`;\n payload: [transactionMeta: TransactionMeta];\n};\n\n/**\n * The internal events available to the {@link TransactionController}.\n */\nexport type TransactionControllerEvents =\n | TransactionControllerIncomingTransactionBlockReceivedEvent\n | TransactionControllerPostTransactionBalanceUpdatedEvent\n | TransactionControllerSpeedupTransactionAddedEvent\n | TransactionControllerStateChangeEvent\n | TransactionControllerTransactionApprovedEvent\n | TransactionControllerTransactionConfirmedEvent\n | TransactionControllerTransactionDroppedEvent\n | TransactionControllerTransactionFailedEvent\n | TransactionControllerTransactionFinishedEvent\n | TransactionControllerTransactionNewSwapApprovalEvent\n | TransactionControllerTransactionNewSwapEvent\n | TransactionControllerTransactionNewSwapAndSendEvent\n | TransactionControllerTransactionPublishingSkipped\n | TransactionControllerTransactionRejectedEvent\n | TransactionControllerTransactionStatusUpdatedEvent\n | TransactionControllerTransactionSubmittedEvent\n | TransactionControllerUnapprovedTransactionAddedEvent;\n\n/**\n * The messenger of the {@link TransactionController}.\n */\nexport type TransactionControllerMessenger = RestrictedControllerMessenger<\n typeof controllerName,\n TransactionControllerActions | AllowedActions,\n TransactionControllerEvents | AllowedEvents,\n AllowedActions['type'],\n AllowedEvents['type']\n>;\n\n/**\n * Possible states of the approve transaction step.\n */\nexport enum ApprovalState {\n Approved = 'approved',\n NotApproved = 'not-approved',\n SkippedViaBeforePublishHook = 'skipped-via-before-publish-hook',\n}\n\n/**\n * Get the default TransactionsController state.\n *\n * @returns The default TransactionsController state.\n */\nfunction getDefaultTransactionControllerState(): TransactionControllerState {\n return {\n methodData: {},\n transactions: [],\n lastFetchedBlockNumbers: {},\n };\n}\n\n/**\n * Controller responsible for submitting and managing transactions.\n */\nexport class TransactionController extends BaseController<\n typeof controllerName,\n TransactionControllerState,\n TransactionControllerMessenger\n> {\n #internalEvents = new EventEmitter();\n\n private readonly isHistoryDisabled: boolean;\n\n private readonly isSwapsDisabled: boolean;\n\n private readonly isSendFlowHistoryDisabled: boolean;\n\n private readonly approvingTransactionIds: Set = new Set();\n\n private readonly nonceTracker: NonceTracker;\n\n private readonly registry: MethodRegistry;\n\n private readonly mutex = new Mutex();\n\n private readonly gasFeeFlows: GasFeeFlow[];\n\n private readonly getSavedGasFees: (chainId: Hex) => SavedGasFees | undefined;\n\n private readonly getNetworkState: () => NetworkState;\n\n private readonly getCurrentAccountEIP1559Compatibility: () => Promise;\n\n private readonly getCurrentNetworkEIP1559Compatibility: (\n networkClientId?: NetworkClientId,\n ) => Promise;\n\n private readonly getGasFeeEstimates: (\n options: FetchGasFeeEstimateOptions,\n ) => Promise;\n\n private readonly getPermittedAccounts: (origin?: string) => Promise;\n\n private readonly getExternalPendingTransactions: (\n address: string,\n chainId?: string,\n ) => NonceTrackerTransaction[];\n\n private readonly layer1GasFeeFlows: Layer1GasFeeFlow[];\n\n readonly #incomingTransactionOptions: IncomingTransactionOptions;\n\n private readonly incomingTransactionHelper: IncomingTransactionHelper;\n\n private readonly securityProviderRequest?: SecurityProviderRequest;\n\n readonly #pendingTransactionOptions: PendingTransactionOptions;\n\n private readonly pendingTransactionTracker: PendingTransactionTracker;\n\n private readonly signAbortCallbacks: Map void> = new Map();\n\n #transactionHistoryLimit: number;\n\n #isSimulationEnabled: () => boolean;\n\n #testGasFeeFlows: boolean;\n\n private readonly afterSign: (\n transactionMeta: TransactionMeta,\n signedTx: TypedTransaction,\n ) => boolean;\n\n private readonly beforeApproveOnInit: (\n transactionMeta: TransactionMeta,\n ) => boolean;\n\n private readonly beforeCheckPendingTransaction: (\n transactionMeta: TransactionMeta,\n ) => boolean;\n\n private readonly beforePublish: (transactionMeta: TransactionMeta) => boolean;\n\n private readonly publish: (\n transactionMeta: TransactionMeta,\n rawTx: string,\n ) => Promise<{ transactionHash?: string }>;\n\n private readonly getAdditionalSignArguments: (\n transactionMeta: TransactionMeta,\n ) => (TransactionMeta | undefined)[];\n\n private failTransaction(\n transactionMeta: TransactionMeta,\n error: Error,\n actionId?: string,\n ) {\n const newTransactionMeta = merge({}, transactionMeta, {\n error: normalizeTxError(error),\n status: TransactionStatus.failed as const,\n });\n this.messagingSystem.publish(`${controllerName}:transactionFailed`, {\n actionId,\n error: error.message,\n transactionMeta: newTransactionMeta,\n });\n this.updateTransaction(\n newTransactionMeta,\n 'TransactionController#failTransaction - Add error message and set status to failed',\n );\n this.onTransactionStatusChange(newTransactionMeta);\n this.messagingSystem.publish(\n `${controllerName}:transactionFinished`,\n newTransactionMeta,\n );\n this.#internalEvents.emit(\n `${transactionMeta.id}:finished`,\n newTransactionMeta,\n );\n }\n\n private async registryLookup(fourBytePrefix: string): Promise {\n const registryMethod = await this.registry.lookup(fourBytePrefix);\n if (!registryMethod) {\n return {\n registryMethod: '',\n parsedRegistryMethod: { name: undefined, args: undefined },\n };\n }\n const parsedRegistryMethod = this.registry.parse(registryMethod);\n return { registryMethod, parsedRegistryMethod };\n }\n\n #multichainTrackingHelper: MultichainTrackingHelper;\n\n /**\n * Method used to sign transactions\n */\n sign?: (\n transaction: TypedTransaction,\n from: string,\n transactionMeta?: TransactionMeta,\n ) => Promise;\n\n /**\n * Constructs a TransactionController.\n *\n * @param options - The controller options.\n * @param options.blockTracker - The block tracker used to poll for new blocks data.\n * @param options.disableHistory - Whether to disable storing history in transaction metadata.\n * @param options.disableSendFlowHistory - Explicitly disable transaction metadata history.\n * @param options.disableSwaps - Whether to disable additional processing on swaps transactions.\n * @param options.getCurrentAccountEIP1559Compatibility - Whether or not the account supports EIP-1559.\n * @param options.getCurrentNetworkEIP1559Compatibility - Whether or not the network supports EIP-1559.\n * @param options.getExternalPendingTransactions - Callback to retrieve pending transactions from external sources.\n * @param options.getGasFeeEstimates - Callback to retrieve gas fee estimates.\n * @param options.getNetworkClientRegistry - Gets the network client registry.\n * @param options.getNetworkState - Gets the state of the network controller.\n * @param options.getPermittedAccounts - Get accounts that a given origin has permissions for.\n * @param options.getSavedGasFees - Gets the saved gas fee config.\n * @param options.incomingTransactions - Configuration options for incoming transaction support.\n * @param options.isMultichainEnabled - Enable multichain support.\n * @param options.isSimulationEnabled - Whether new transactions will be automatically simulated.\n * @param options.messenger - The controller messenger.\n * @param options.onNetworkStateChange - Allows subscribing to network controller state changes.\n * @param options.pendingTransactions - Configuration options for pending transaction support.\n * @param options.provider - The provider used to create the underlying EthQuery instance.\n * @param options.securityProviderRequest - A function for verifying a transaction, whether it is malicious or not.\n * @param options.sign - Function used to sign transactions.\n * @param options.state - Initial state to set on this controller.\n * @param options.testGasFeeFlows - Whether to use the test gas fee flow.\n * @param options.transactionHistoryLimit - Transaction history limit.\n * @param options.hooks - The controller hooks.\n */\n constructor({\n blockTracker,\n disableHistory,\n disableSendFlowHistory,\n disableSwaps,\n getCurrentAccountEIP1559Compatibility,\n getCurrentNetworkEIP1559Compatibility,\n getExternalPendingTransactions,\n getGasFeeEstimates,\n getNetworkClientRegistry,\n getNetworkState,\n getPermittedAccounts,\n getSavedGasFees,\n incomingTransactions = {},\n isMultichainEnabled = false,\n isSimulationEnabled,\n messenger,\n onNetworkStateChange,\n pendingTransactions = {},\n provider,\n securityProviderRequest,\n sign,\n state,\n testGasFeeFlows,\n transactionHistoryLimit = 40,\n hooks,\n }: TransactionControllerOptions) {\n super({\n name: controllerName,\n metadata,\n messenger,\n state: {\n ...getDefaultTransactionControllerState(),\n ...state,\n },\n });\n\n this.messagingSystem = messenger;\n this.getNetworkState = getNetworkState;\n this.isSendFlowHistoryDisabled = disableSendFlowHistory ?? false;\n this.isHistoryDisabled = disableHistory ?? false;\n this.isSwapsDisabled = disableSwaps ?? false;\n this.#isSimulationEnabled = isSimulationEnabled ?? (() => true);\n // @ts-expect-error the type in eth-method-registry is inappropriate and should be changed\n this.registry = new MethodRegistry({ provider });\n this.getSavedGasFees = getSavedGasFees ?? ((_chainId) => undefined);\n this.getCurrentAccountEIP1559Compatibility =\n getCurrentAccountEIP1559Compatibility ?? (() => Promise.resolve(true));\n this.getCurrentNetworkEIP1559Compatibility =\n getCurrentNetworkEIP1559Compatibility;\n this.getGasFeeEstimates =\n getGasFeeEstimates || (() => Promise.resolve({} as GasFeeState));\n this.getPermittedAccounts = getPermittedAccounts;\n this.getExternalPendingTransactions =\n getExternalPendingTransactions ?? (() => []);\n this.securityProviderRequest = securityProviderRequest;\n this.#incomingTransactionOptions = incomingTransactions;\n this.#pendingTransactionOptions = pendingTransactions;\n this.#transactionHistoryLimit = transactionHistoryLimit;\n this.sign = sign;\n this.#testGasFeeFlows = testGasFeeFlows === true;\n\n this.afterSign = hooks?.afterSign ?? (() => true);\n this.beforeApproveOnInit = hooks?.beforeApproveOnInit ?? (() => true);\n this.beforeCheckPendingTransaction =\n hooks?.beforeCheckPendingTransaction ??\n /* istanbul ignore next */\n (() => true);\n this.beforePublish = hooks?.beforePublish ?? (() => true);\n this.getAdditionalSignArguments =\n hooks?.getAdditionalSignArguments ?? (() => []);\n this.publish =\n hooks?.publish ?? (() => Promise.resolve({ transactionHash: undefined }));\n\n this.nonceTracker = this.#createNonceTracker({\n provider,\n blockTracker,\n });\n\n const findNetworkClientIdByChainId = (chainId: Hex) => {\n return this.messagingSystem.call(\n `NetworkController:findNetworkClientIdByChainId`,\n chainId,\n );\n };\n\n this.#multichainTrackingHelper = new MultichainTrackingHelper({\n isMultichainEnabled,\n provider,\n nonceTracker: this.nonceTracker,\n incomingTransactionOptions: incomingTransactions,\n findNetworkClientIdByChainId,\n getNetworkClientById: ((networkClientId: NetworkClientId) => {\n return this.messagingSystem.call(\n `NetworkController:getNetworkClientById`,\n networkClientId,\n );\n }) as NetworkController['getNetworkClientById'],\n getNetworkClientRegistry,\n removeIncomingTransactionHelperListeners:\n this.#removeIncomingTransactionHelperListeners.bind(this),\n removePendingTransactionTrackerListeners:\n this.#removePendingTransactionTrackerListeners.bind(this),\n createNonceTracker: this.#createNonceTracker.bind(this),\n createIncomingTransactionHelper:\n this.#createIncomingTransactionHelper.bind(this),\n createPendingTransactionTracker:\n this.#createPendingTransactionTracker.bind(this),\n onNetworkStateChange: (listener) => {\n this.messagingSystem.subscribe(\n 'NetworkController:stateChange',\n listener,\n );\n },\n });\n this.#multichainTrackingHelper.initialize();\n\n const etherscanRemoteTransactionSource =\n new EtherscanRemoteTransactionSource({\n includeTokenTransfers: incomingTransactions.includeTokenTransfers,\n });\n\n this.incomingTransactionHelper = this.#createIncomingTransactionHelper({\n blockTracker,\n etherscanRemoteTransactionSource,\n });\n\n this.pendingTransactionTracker = this.#createPendingTransactionTracker({\n provider,\n blockTracker,\n });\n\n this.gasFeeFlows = this.#getGasFeeFlows();\n this.layer1GasFeeFlows = this.#getLayer1GasFeeFlows();\n\n const gasFeePoller = new GasFeePoller({\n findNetworkClientIdByChainId,\n gasFeeFlows: this.gasFeeFlows,\n getGasFeeControllerEstimates: this.getGasFeeEstimates,\n getProvider: (chainId, networkClientId) =>\n this.#multichainTrackingHelper.getProvider({\n networkClientId,\n chainId,\n }),\n getTransactions: () => this.state.transactions,\n layer1GasFeeFlows: this.layer1GasFeeFlows,\n onStateChange: (listener) => {\n this.messagingSystem.subscribe(\n 'TransactionController:stateChange',\n listener,\n );\n },\n });\n\n gasFeePoller.hub.on(\n 'transaction-updated',\n this.#onGasFeePollerTransactionUpdate.bind(this),\n );\n\n // when transactionsController state changes\n // check for pending transactions and start polling if there are any\n this.messagingSystem.subscribe(\n 'TransactionController:stateChange',\n this.#checkForPendingTransactionAndStartPolling,\n );\n\n // TODO once v2 is merged make sure this only runs when\n // selectedNetworkClientId changes\n onNetworkStateChange(() => {\n log('Detected network change', this.getChainId());\n this.pendingTransactionTracker.startIfPendingTransactions();\n this.onBootCleanup();\n });\n\n this.onBootCleanup();\n this.#checkForPendingTransactionAndStartPolling();\n }\n\n /**\n * Stops polling and removes listeners to prepare the controller for garbage collection.\n */\n destroy() {\n this.#stopAllTracking();\n }\n\n /**\n * Handle new method data request.\n *\n * @param fourBytePrefix - The method prefix.\n * @returns The method data object corresponding to the given signature prefix.\n */\n async handleMethodData(fourBytePrefix: string): Promise {\n const releaseLock = await this.mutex.acquire();\n try {\n const { methodData } = this.state;\n const knownMethod = Object.keys(methodData).find(\n (knownFourBytePrefix) => fourBytePrefix === knownFourBytePrefix,\n );\n if (knownMethod) {\n return methodData[fourBytePrefix];\n }\n const registry = await this.registryLookup(fourBytePrefix);\n this.update((state) => {\n state.methodData[fourBytePrefix] = registry;\n });\n return registry;\n } finally {\n releaseLock();\n }\n }\n\n /**\n * Add a new unapproved transaction to state. Parameters will be validated, a\n * unique transaction id will be generated, and gas and gasPrice will be calculated\n * if not provided. If A `:unapproved` hub event will be emitted once added.\n *\n * @param txParams - Standard parameters for an Ethereum transaction.\n * @param opts - Additional options to control how the transaction is added.\n * @param opts.actionId - Unique ID to prevent duplicate requests.\n * @param opts.deviceConfirmedOn - An enum to indicate what device confirmed the transaction.\n * @param opts.method - RPC method that requested the transaction.\n * @param opts.origin - The origin of the transaction request, such as a dApp hostname.\n * @param opts.requireApproval - Whether the transaction requires approval by the user, defaults to true unless explicitly disabled.\n * @param opts.securityAlertResponse - Response from security validator.\n * @param opts.sendFlowHistory - The sendFlowHistory entries to add.\n * @param opts.type - Type of transaction to add, such as 'cancel' or 'swap'.\n * @param opts.swaps - Options for swaps transactions.\n * @param opts.swaps.hasApproveTx - Whether the transaction has an approval transaction.\n * @param opts.swaps.meta - Metadata for swap transaction.\n * @param opts.networkClientId - The id of the network client for this transaction.\n * @returns Object containing a promise resolving to the transaction hash if approved.\n */\n async addTransaction(\n txParams: TransactionParams,\n {\n actionId,\n deviceConfirmedOn,\n method,\n origin,\n requireApproval,\n securityAlertResponse,\n sendFlowHistory,\n swaps = {},\n type,\n networkClientId: requestNetworkClientId,\n }: {\n actionId?: string;\n deviceConfirmedOn?: WalletDevice;\n method?: string;\n origin?: string;\n requireApproval?: boolean | undefined;\n securityAlertResponse?: SecurityAlertResponse;\n sendFlowHistory?: SendFlowHistoryEntry[];\n swaps?: {\n hasApproveTx?: boolean;\n meta?: Partial;\n };\n type?: TransactionType;\n networkClientId?: NetworkClientId;\n } = {},\n ): Promise {\n log('Adding transaction', txParams);\n\n txParams = normalizeTransactionParams(txParams);\n if (\n requestNetworkClientId &&\n !this.#multichainTrackingHelper.has(requestNetworkClientId)\n ) {\n throw new Error(\n 'The networkClientId for this transaction could not be found',\n );\n }\n\n const networkClientId =\n requestNetworkClientId ?? this.#getGlobalNetworkClientId();\n\n const isEIP1559Compatible = await this.getEIP1559Compatibility(\n networkClientId,\n );\n\n validateTxParams(txParams, isEIP1559Compatible);\n\n if (origin) {\n await validateTransactionOrigin(\n await this.getPermittedAccounts(origin),\n this.#getSelectedAccount().address,\n txParams.from,\n origin,\n );\n }\n\n const dappSuggestedGasFees = this.generateDappSuggestedGasFees(\n txParams,\n origin,\n );\n\n const chainId = this.getChainId(networkClientId);\n const ethQuery = this.#multichainTrackingHelper.getEthQuery({\n networkClientId,\n chainId,\n });\n\n const transactionType =\n type ?? (await determineTransactionType(txParams, ethQuery)).type;\n\n const existingTransactionMeta = this.getTransactionWithActionId(actionId);\n\n // If a request to add a transaction with the same actionId is submitted again, a new transaction will not be created for it.\n let addedTransactionMeta = existingTransactionMeta\n ? cloneDeep(existingTransactionMeta)\n : {\n // Add actionId to txMeta to check if same actionId is seen again\n actionId,\n chainId,\n dappSuggestedGasFees,\n deviceConfirmedOn,\n id: random(),\n origin,\n securityAlertResponse,\n status: TransactionStatus.unapproved as const,\n time: Date.now(),\n txParams,\n userEditedGasLimit: false,\n verifiedOnBlockchain: false,\n type: transactionType,\n networkClientId,\n };\n\n await this.updateGasProperties(addedTransactionMeta);\n\n // Checks if a transaction already exists with a given actionId\n if (!existingTransactionMeta) {\n // Set security provider response\n if (method && this.securityProviderRequest) {\n const securityProviderResponse = await this.securityProviderRequest(\n addedTransactionMeta,\n method,\n );\n addedTransactionMeta.securityProviderResponse =\n securityProviderResponse;\n }\n\n if (!this.isSendFlowHistoryDisabled) {\n addedTransactionMeta.sendFlowHistory = sendFlowHistory ?? [];\n }\n // Initial history push\n if (!this.isHistoryDisabled) {\n addedTransactionMeta = addInitialHistorySnapshot(addedTransactionMeta);\n }\n\n addedTransactionMeta = updateSwapsTransaction(\n addedTransactionMeta,\n transactionType,\n swaps,\n {\n isSwapsDisabled: this.isSwapsDisabled,\n cancelTransaction: this.cancelTransaction.bind(this),\n messenger: this.messagingSystem,\n },\n );\n\n this.addMetadata(addedTransactionMeta);\n\n if (requireApproval !== false) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.#updateSimulationData(addedTransactionMeta);\n } else {\n log('Skipping simulation as approval not required');\n }\n\n this.messagingSystem.publish(\n `${controllerName}:unapprovedTransactionAdded`,\n addedTransactionMeta,\n );\n }\n\n return {\n result: this.processApproval(addedTransactionMeta, {\n isExisting: Boolean(existingTransactionMeta),\n requireApproval,\n actionId,\n }),\n transactionMeta: addedTransactionMeta,\n };\n }\n\n startIncomingTransactionPolling(networkClientIds: NetworkClientId[] = []) {\n if (networkClientIds.length === 0) {\n this.incomingTransactionHelper.start();\n return;\n }\n this.#multichainTrackingHelper.startIncomingTransactionPolling(\n networkClientIds,\n );\n }\n\n stopIncomingTransactionPolling(networkClientIds: NetworkClientId[] = []) {\n if (networkClientIds.length === 0) {\n this.incomingTransactionHelper.stop();\n return;\n }\n this.#multichainTrackingHelper.stopIncomingTransactionPolling(\n networkClientIds,\n );\n }\n\n stopAllIncomingTransactionPolling() {\n this.incomingTransactionHelper.stop();\n this.#multichainTrackingHelper.stopAllIncomingTransactionPolling();\n }\n\n async updateIncomingTransactions(networkClientIds: NetworkClientId[] = []) {\n if (networkClientIds.length === 0) {\n await this.incomingTransactionHelper.update();\n return;\n }\n await this.#multichainTrackingHelper.updateIncomingTransactions(\n networkClientIds,\n );\n }\n\n /**\n * Attempts to cancel a transaction based on its ID by setting its status to \"rejected\"\n * and emitting a `:finished` hub event.\n *\n * @param transactionId - The ID of the transaction to cancel.\n * @param gasValues - The gas values to use for the cancellation transaction.\n * @param options - The options for the cancellation transaction.\n * @param options.actionId - Unique ID to prevent duplicate requests.\n * @param options.estimatedBaseFee - The estimated base fee of the transaction.\n */\n async stopTransaction(\n transactionId: string,\n gasValues?: GasPriceValue | FeeMarketEIP1559Values,\n {\n estimatedBaseFee,\n actionId,\n }: { estimatedBaseFee?: string; actionId?: string } = {},\n ) {\n // If transaction is found for same action id, do not create a cancel transaction.\n if (this.getTransactionWithActionId(actionId)) {\n return;\n }\n\n if (gasValues) {\n // Not good practice to reassign a parameter but temporarily avoiding a larger refactor.\n gasValues = normalizeGasFeeValues(gasValues);\n validateGasValues(gasValues);\n }\n\n log('Creating cancel transaction', transactionId, gasValues);\n\n const transactionMeta = this.getTransaction(transactionId);\n if (!transactionMeta) {\n return;\n }\n\n if (!this.sign) {\n throw new Error('No sign method defined.');\n }\n\n // gasPrice (legacy non EIP1559)\n const minGasPrice = getIncreasedPriceFromExisting(\n transactionMeta.txParams.gasPrice,\n CANCEL_RATE,\n );\n\n const gasPriceFromValues = isGasPriceValue(gasValues) && gasValues.gasPrice;\n\n const newGasPrice =\n (gasPriceFromValues &&\n validateMinimumIncrease(gasPriceFromValues, minGasPrice)) ||\n minGasPrice;\n\n // maxFeePerGas (EIP1559)\n const existingMaxFeePerGas = transactionMeta.txParams?.maxFeePerGas;\n const minMaxFeePerGas = getIncreasedPriceFromExisting(\n existingMaxFeePerGas,\n CANCEL_RATE,\n );\n const maxFeePerGasValues =\n isFeeMarketEIP1559Values(gasValues) && gasValues.maxFeePerGas;\n const newMaxFeePerGas =\n (maxFeePerGasValues &&\n validateMinimumIncrease(maxFeePerGasValues, minMaxFeePerGas)) ||\n (existingMaxFeePerGas && minMaxFeePerGas);\n\n // maxPriorityFeePerGas (EIP1559)\n const existingMaxPriorityFeePerGas =\n transactionMeta.txParams?.maxPriorityFeePerGas;\n const minMaxPriorityFeePerGas = getIncreasedPriceFromExisting(\n existingMaxPriorityFeePerGas,\n CANCEL_RATE,\n );\n const maxPriorityFeePerGasValues =\n isFeeMarketEIP1559Values(gasValues) && gasValues.maxPriorityFeePerGas;\n const newMaxPriorityFeePerGas =\n (maxPriorityFeePerGasValues &&\n validateMinimumIncrease(\n maxPriorityFeePerGasValues,\n minMaxPriorityFeePerGas,\n )) ||\n (existingMaxPriorityFeePerGas && minMaxPriorityFeePerGas);\n\n const newTxParams: TransactionParams =\n newMaxFeePerGas && newMaxPriorityFeePerGas\n ? {\n from: transactionMeta.txParams.from,\n gasLimit: transactionMeta.txParams.gas,\n maxFeePerGas: newMaxFeePerGas,\n maxPriorityFeePerGas: newMaxPriorityFeePerGas,\n type: TransactionEnvelopeType.feeMarket,\n nonce: transactionMeta.txParams.nonce,\n to: transactionMeta.txParams.from,\n value: '0x0',\n }\n : {\n from: transactionMeta.txParams.from,\n gasLimit: transactionMeta.txParams.gas,\n gasPrice: newGasPrice,\n nonce: transactionMeta.txParams.nonce,\n to: transactionMeta.txParams.from,\n value: '0x0',\n };\n\n const unsignedEthTx = this.prepareUnsignedEthTx(\n transactionMeta.chainId,\n newTxParams,\n );\n\n const signedTx = await this.sign(\n unsignedEthTx,\n transactionMeta.txParams.from,\n );\n\n const rawTx = bufferToHex(signedTx.serialize());\n\n const newFee = newTxParams.maxFeePerGas ?? newTxParams.gasPrice;\n\n const oldFee = newTxParams.maxFeePerGas\n ? transactionMeta.txParams.maxFeePerGas\n : transactionMeta.txParams.gasPrice;\n\n log('Submitting cancel transaction', {\n oldFee,\n newFee,\n txParams: newTxParams,\n });\n\n const ethQuery = this.#multichainTrackingHelper.getEthQuery({\n networkClientId: transactionMeta.networkClientId,\n chainId: transactionMeta.chainId,\n });\n const hash = await this.publishTransactionForRetry(\n ethQuery,\n rawTx,\n transactionMeta,\n );\n\n const cancelTransactionMeta = {\n actionId,\n chainId: transactionMeta.chainId,\n networkClientId: transactionMeta.networkClientId,\n estimatedBaseFee,\n hash,\n id: random(),\n originalGasEstimate: transactionMeta.txParams.gas,\n status: TransactionStatus.submitted as const,\n time: Date.now(),\n type: TransactionType.cancel as const,\n txParams: newTxParams,\n };\n\n this.addMetadata(cancelTransactionMeta);\n\n // stopTransaction has no approval request, so we assume the user has already approved the transaction\n this.messagingSystem.publish(`${controllerName}:transactionApproved`, {\n transactionMeta: cancelTransactionMeta,\n actionId,\n });\n this.messagingSystem.publish(`${controllerName}:transactionSubmitted`, {\n transactionMeta: cancelTransactionMeta,\n actionId,\n });\n\n this.messagingSystem.publish(\n `${controllerName}:transactionFinished`,\n cancelTransactionMeta,\n );\n this.#internalEvents.emit(\n `${transactionMeta.id}:finished`,\n cancelTransactionMeta,\n );\n }\n\n /**\n * Attempts to speed up a transaction increasing transaction gasPrice by ten percent.\n *\n * @param transactionId - The ID of the transaction to speed up.\n * @param gasValues - The gas values to use for the speed up transaction.\n * @param options - The options for the speed up transaction.\n * @param options.actionId - Unique ID to prevent duplicate requests\n * @param options.estimatedBaseFee - The estimated base fee of the transaction.\n */\n async speedUpTransaction(\n transactionId: string,\n gasValues?: GasPriceValue | FeeMarketEIP1559Values,\n {\n actionId,\n estimatedBaseFee,\n }: { actionId?: string; estimatedBaseFee?: string } = {},\n ) {\n // If transaction is found for same action id, do not create a new speed up transaction.\n if (this.getTransactionWithActionId(actionId)) {\n return;\n }\n\n if (gasValues) {\n // Not good practice to reassign a parameter but temporarily avoiding a larger refactor.\n gasValues = normalizeGasFeeValues(gasValues);\n validateGasValues(gasValues);\n }\n\n log('Creating speed up transaction', transactionId, gasValues);\n\n const transactionMeta = this.getTransaction(transactionId);\n /* istanbul ignore next */\n if (!transactionMeta) {\n return;\n }\n\n /* istanbul ignore next */\n if (!this.sign) {\n throw new Error('No sign method defined.');\n }\n\n // gasPrice (legacy non EIP1559)\n const minGasPrice = getIncreasedPriceFromExisting(\n transactionMeta.txParams.gasPrice,\n SPEED_UP_RATE,\n );\n\n const gasPriceFromValues = isGasPriceValue(gasValues) && gasValues.gasPrice;\n\n const newGasPrice =\n (gasPriceFromValues &&\n validateMinimumIncrease(gasPriceFromValues, minGasPrice)) ||\n minGasPrice;\n\n // maxFeePerGas (EIP1559)\n const existingMaxFeePerGas = transactionMeta.txParams?.maxFeePerGas;\n const minMaxFeePerGas = getIncreasedPriceFromExisting(\n existingMaxFeePerGas,\n SPEED_UP_RATE,\n );\n const maxFeePerGasValues =\n isFeeMarketEIP1559Values(gasValues) && gasValues.maxFeePerGas;\n const newMaxFeePerGas =\n (maxFeePerGasValues &&\n validateMinimumIncrease(maxFeePerGasValues, minMaxFeePerGas)) ||\n (existingMaxFeePerGas && minMaxFeePerGas);\n\n // maxPriorityFeePerGas (EIP1559)\n const existingMaxPriorityFeePerGas =\n transactionMeta.txParams?.maxPriorityFeePerGas;\n const minMaxPriorityFeePerGas = getIncreasedPriceFromExisting(\n existingMaxPriorityFeePerGas,\n SPEED_UP_RATE,\n );\n const maxPriorityFeePerGasValues =\n isFeeMarketEIP1559Values(gasValues) && gasValues.maxPriorityFeePerGas;\n const newMaxPriorityFeePerGas =\n (maxPriorityFeePerGasValues &&\n validateMinimumIncrease(\n maxPriorityFeePerGasValues,\n minMaxPriorityFeePerGas,\n )) ||\n (existingMaxPriorityFeePerGas && minMaxPriorityFeePerGas);\n\n const txParams: TransactionParams =\n newMaxFeePerGas && newMaxPriorityFeePerGas\n ? {\n ...transactionMeta.txParams,\n gasLimit: transactionMeta.txParams.gas,\n maxFeePerGas: newMaxFeePerGas,\n maxPriorityFeePerGas: newMaxPriorityFeePerGas,\n type: TransactionEnvelopeType.feeMarket,\n }\n : {\n ...transactionMeta.txParams,\n gasLimit: transactionMeta.txParams.gas,\n gasPrice: newGasPrice,\n };\n\n const unsignedEthTx = this.prepareUnsignedEthTx(\n transactionMeta.chainId,\n txParams,\n );\n\n const signedTx = await this.sign(\n unsignedEthTx,\n transactionMeta.txParams.from,\n );\n\n const transactionMetaWithRsv = this.updateTransactionMetaRSV(\n transactionMeta,\n signedTx,\n );\n const rawTx = bufferToHex(signedTx.serialize());\n\n const newFee = txParams.maxFeePerGas ?? txParams.gasPrice;\n\n const oldFee = txParams.maxFeePerGas\n ? transactionMetaWithRsv.txParams.maxFeePerGas\n : transactionMetaWithRsv.txParams.gasPrice;\n\n log('Submitting speed up transaction', { oldFee, newFee, txParams });\n\n const ethQuery = this.#multichainTrackingHelper.getEthQuery({\n networkClientId: transactionMeta.networkClientId,\n chainId: transactionMeta.chainId,\n });\n const hash = await this.publishTransactionForRetry(\n ethQuery,\n rawTx,\n transactionMeta,\n );\n\n const baseTransactionMeta = {\n ...transactionMetaWithRsv,\n estimatedBaseFee,\n id: random(),\n time: Date.now(),\n hash,\n actionId,\n originalGasEstimate: transactionMeta.txParams.gas,\n type: TransactionType.retry as const,\n originalType: transactionMeta.type,\n };\n\n const newTransactionMeta =\n newMaxFeePerGas && newMaxPriorityFeePerGas\n ? {\n ...baseTransactionMeta,\n txParams: {\n ...transactionMeta.txParams,\n maxFeePerGas: newMaxFeePerGas,\n maxPriorityFeePerGas: newMaxPriorityFeePerGas,\n },\n }\n : {\n ...baseTransactionMeta,\n txParams: {\n ...transactionMeta.txParams,\n gasPrice: newGasPrice,\n },\n };\n\n this.addMetadata(newTransactionMeta);\n\n // speedUpTransaction has no approval request, so we assume the user has already approved the transaction\n this.messagingSystem.publish(`${controllerName}:transactionApproved`, {\n transactionMeta: newTransactionMeta,\n actionId,\n });\n\n this.messagingSystem.publish(`${controllerName}:transactionSubmitted`, {\n transactionMeta: newTransactionMeta,\n actionId,\n });\n\n this.messagingSystem.publish(\n `${controllerName}:speedupTransactionAdded`,\n newTransactionMeta,\n );\n }\n\n /**\n * Estimates required gas for a given transaction.\n *\n * @param transaction - The transaction to estimate gas for.\n * @param networkClientId - The network client id to use for the estimate.\n * @returns The gas and gas price.\n */\n async estimateGas(\n transaction: TransactionParams,\n networkClientId?: NetworkClientId,\n ) {\n const ethQuery = this.#multichainTrackingHelper.getEthQuery({\n networkClientId,\n });\n const { estimatedGas, simulationFails } = await estimateGas(\n transaction,\n ethQuery,\n );\n\n return { gas: estimatedGas, simulationFails };\n }\n\n /**\n * Estimates required gas for a given transaction and add additional gas buffer with the given multiplier.\n *\n * @param transaction - The transaction params to estimate gas for.\n * @param multiplier - The multiplier to use for the gas buffer.\n * @param networkClientId - The network client id to use for the estimate.\n */\n async estimateGasBuffered(\n transaction: TransactionParams,\n multiplier: number,\n networkClientId?: NetworkClientId,\n ) {\n const ethQuery = this.#multichainTrackingHelper.getEthQuery({\n networkClientId,\n });\n const { blockGasLimit, estimatedGas, simulationFails } = await estimateGas(\n transaction,\n ethQuery,\n );\n\n const gas = addGasBuffer(estimatedGas, blockGasLimit, multiplier);\n\n return {\n gas,\n simulationFails,\n };\n }\n\n /**\n * Updates an existing transaction in state.\n *\n * @param transactionMeta - The new transaction to store in state.\n * @param note - A note or update reason to include in the transaction history.\n */\n updateTransaction(transactionMeta: TransactionMeta, note: string) {\n const { id: transactionId } = transactionMeta;\n\n this.#updateTransactionInternal({ transactionId, note }, () => ({\n ...transactionMeta,\n }));\n }\n\n /**\n * Update the security alert response for a transaction.\n *\n * @param transactionId - ID of the transaction.\n * @param securityAlertResponse - The new security alert response for the transaction.\n */\n updateSecurityAlertResponse(\n transactionId: string,\n securityAlertResponse: SecurityAlertResponse,\n ) {\n if (!securityAlertResponse) {\n throw new Error(\n 'updateSecurityAlertResponse: securityAlertResponse should not be null',\n );\n }\n const transactionMeta = this.getTransaction(transactionId);\n if (!transactionMeta) {\n throw new Error(\n `Cannot update security alert response as no transaction metadata found`,\n );\n }\n const updatedTransactionMeta = {\n ...transactionMeta,\n securityAlertResponse,\n };\n this.updateTransaction(\n updatedTransactionMeta,\n `${controllerName}:updatesecurityAlertResponse - securityAlertResponse updated`,\n );\n }\n\n /**\n * Removes all transactions from state, optionally based on the current network.\n *\n * @param ignoreNetwork - Determines whether to wipe all transactions, or just those on the\n * current network. If `true`, all transactions are wiped.\n * @param address - If specified, only transactions originating from this address will be\n * wiped on current network.\n */\n wipeTransactions(ignoreNetwork?: boolean, address?: string) {\n /* istanbul ignore next */\n if (ignoreNetwork && !address) {\n this.update((state) => {\n state.transactions = [];\n });\n return;\n }\n const currentChainId = this.getChainId();\n const newTransactions = this.state.transactions.filter(\n ({ chainId, txParams }) => {\n const isMatchingNetwork = ignoreNetwork || chainId === currentChainId;\n\n if (!isMatchingNetwork) {\n return true;\n }\n\n const isMatchingAddress =\n !address || txParams.from?.toLowerCase() === address.toLowerCase();\n\n return !isMatchingAddress;\n },\n );\n\n this.update((state) => {\n state.transactions = this.trimTransactionsForState(newTransactions);\n });\n }\n\n /**\n * Adds external provided transaction to state as confirmed transaction.\n *\n * @param transactionMeta - TransactionMeta to add transactions.\n * @param transactionReceipt - TransactionReceipt of the external transaction.\n * @param baseFeePerGas - Base fee per gas of the external transaction.\n */\n async confirmExternalTransaction(\n transactionMeta: TransactionMeta,\n transactionReceipt: TransactionReceipt,\n baseFeePerGas: Hex,\n ) {\n // Run validation and add external transaction to state.\n const newTransactionMeta = this.addExternalTransaction(transactionMeta);\n\n try {\n const transactionId = newTransactionMeta.id;\n\n // Make sure status is confirmed and define gasUsed as in receipt.\n const updatedTransactionMeta = {\n ...newTransactionMeta,\n status: TransactionStatus.confirmed as const,\n txReceipt: transactionReceipt,\n };\n if (baseFeePerGas) {\n updatedTransactionMeta.baseFeePerGas = baseFeePerGas;\n }\n\n // Update same nonce local transactions as dropped and define replacedBy properties.\n this.markNonceDuplicatesDropped(transactionId);\n\n // Update external provided transaction with updated gas values and confirmed status.\n this.updateTransaction(\n updatedTransactionMeta,\n `${controllerName}:confirmExternalTransaction - Add external transaction`,\n );\n this.onTransactionStatusChange(updatedTransactionMeta);\n\n // Intentional given potential duration of process.\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.updatePostBalance(updatedTransactionMeta);\n\n this.messagingSystem.publish(\n `${controllerName}:transactionConfirmed`,\n updatedTransactionMeta,\n );\n } catch (error) {\n console.error('Failed to confirm external transaction', error);\n }\n }\n\n /**\n * Append new send flow history to a transaction.\n *\n * @param transactionID - The ID of the transaction to update.\n * @param currentSendFlowHistoryLength - The length of the current sendFlowHistory array.\n * @param sendFlowHistoryToAdd - The sendFlowHistory entries to add.\n * @returns The updated transactionMeta.\n */\n updateTransactionSendFlowHistory(\n transactionID: string,\n currentSendFlowHistoryLength: number,\n sendFlowHistoryToAdd: SendFlowHistoryEntry[],\n ): TransactionMeta {\n if (this.isSendFlowHistoryDisabled) {\n throw new Error(\n 'Send flow history is disabled for the current transaction controller',\n );\n }\n\n const transactionMeta = this.getTransaction(transactionID);\n\n if (!transactionMeta) {\n throw new Error(\n `Cannot update send flow history as no transaction metadata found`,\n );\n }\n\n validateIfTransactionUnapproved(\n transactionMeta,\n 'updateTransactionSendFlowHistory',\n );\n\n const sendFlowHistory = transactionMeta.sendFlowHistory ?? [];\n if (currentSendFlowHistoryLength === sendFlowHistory.length) {\n const updatedTransactionMeta = {\n ...transactionMeta,\n sendFlowHistory: [...sendFlowHistory, ...sendFlowHistoryToAdd],\n };\n this.updateTransaction(\n updatedTransactionMeta,\n `${controllerName}:updateTransactionSendFlowHistory - sendFlowHistory updated`,\n );\n }\n\n return this.getTransaction(transactionID) as TransactionMeta;\n }\n\n /**\n * Update the gas values of a transaction.\n *\n * @param transactionId - The ID of the transaction to update.\n * @param gasValues - Gas values to update.\n * @param gasValues.gas - Same as transaction.gasLimit.\n * @param gasValues.gasLimit - Maxmimum number of units of gas to use for this transaction.\n * @param gasValues.gasPrice - Price per gas for legacy transactions.\n * @param gasValues.maxPriorityFeePerGas - Maximum amount per gas to give to validator as incentive.\n * @param gasValues.maxFeePerGas - Maximum amount per gas to pay for the transaction, including the priority fee.\n * @param gasValues.estimateUsed - Which estimate level was used.\n * @param gasValues.estimateSuggested - Which estimate level that the API suggested.\n * @param gasValues.defaultGasEstimates - The default estimate for gas.\n * @param gasValues.originalGasEstimate - Original estimate for gas.\n * @param gasValues.userEditedGasLimit - The gas limit supplied by user.\n * @param gasValues.userFeeLevel - Estimate level user selected.\n * @returns The updated transactionMeta.\n */\n updateTransactionGasFees(\n transactionId: string,\n {\n defaultGasEstimates,\n estimateUsed,\n estimateSuggested,\n gas,\n gasLimit,\n gasPrice,\n maxPriorityFeePerGas,\n maxFeePerGas,\n originalGasEstimate,\n userEditedGasLimit,\n userFeeLevel,\n }: {\n defaultGasEstimates?: string;\n estimateUsed?: string;\n estimateSuggested?: string;\n gas?: string;\n gasLimit?: string;\n gasPrice?: string;\n maxPriorityFeePerGas?: string;\n maxFeePerGas?: string;\n originalGasEstimate?: string;\n userEditedGasLimit?: boolean;\n userFeeLevel?: string;\n },\n ): TransactionMeta {\n const transactionMeta = this.getTransaction(transactionId);\n\n if (!transactionMeta) {\n throw new Error(\n `Cannot update transaction as no transaction metadata found`,\n );\n }\n\n validateIfTransactionUnapproved(\n transactionMeta,\n 'updateTransactionGasFees',\n );\n\n let transactionGasFees = {\n txParams: {\n gas,\n gasLimit,\n gasPrice,\n maxPriorityFeePerGas,\n maxFeePerGas,\n },\n defaultGasEstimates,\n estimateUsed,\n estimateSuggested,\n originalGasEstimate,\n userEditedGasLimit,\n userFeeLevel,\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } as any;\n\n // only update what is defined\n transactionGasFees.txParams = pickBy(transactionGasFees.txParams);\n transactionGasFees = pickBy(transactionGasFees);\n\n // merge updated gas values with existing transaction meta\n const updatedMeta = merge({}, transactionMeta, transactionGasFees);\n\n this.updateTransaction(\n updatedMeta,\n `${controllerName}:updateTransactionGasFees - gas values updated`,\n );\n\n return this.getTransaction(transactionId) as TransactionMeta;\n }\n\n /**\n * Update the previous gas values of a transaction.\n *\n * @param transactionId - The ID of the transaction to update.\n * @param previousGas - Previous gas values to update.\n * @param previousGas.gasLimit - Maxmimum number of units of gas to use for this transaction.\n * @param previousGas.maxFeePerGas - Maximum amount per gas to pay for the transaction, including the priority fee.\n * @param previousGas.maxPriorityFeePerGas - Maximum amount per gas to give to validator as incentive.\n * @returns The updated transactionMeta.\n */\n updatePreviousGasParams(\n transactionId: string,\n {\n gasLimit,\n maxFeePerGas,\n maxPriorityFeePerGas,\n }: {\n gasLimit?: string;\n maxFeePerGas?: string;\n maxPriorityFeePerGas?: string;\n },\n ): TransactionMeta {\n const transactionMeta = this.getTransaction(transactionId);\n\n if (!transactionMeta) {\n throw new Error(\n `Cannot update transaction as no transaction metadata found`,\n );\n }\n\n validateIfTransactionUnapproved(transactionMeta, 'updatePreviousGasParams');\n\n const transactionPreviousGas = {\n previousGas: {\n gasLimit,\n maxFeePerGas,\n maxPriorityFeePerGas,\n },\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } as any;\n\n // only update what is defined\n transactionPreviousGas.previousGas = pickBy(\n transactionPreviousGas.previousGas,\n );\n\n // merge updated previous gas values with existing transaction meta\n const updatedMeta = merge({}, transactionMeta, transactionPreviousGas);\n\n this.updateTransaction(\n updatedMeta,\n `${controllerName}:updatePreviousGasParams - Previous gas values updated`,\n );\n\n return this.getTransaction(transactionId) as TransactionMeta;\n }\n\n async getNonceLock(\n address: string,\n networkClientId?: NetworkClientId,\n ): Promise {\n return this.#multichainTrackingHelper.getNonceLock(\n address,\n networkClientId,\n );\n }\n\n /**\n * Updates the editable parameters of a transaction.\n *\n * @param txId - The ID of the transaction to update.\n * @param params - The editable parameters to update.\n * @param params.data - Data to pass with the transaction.\n * @param params.gas - Maximum number of units of gas to use for the transaction.\n * @param params.gasPrice - Price per gas for legacy transactions.\n * @param params.from - Address to send the transaction from.\n * @param params.to - Address to send the transaction to.\n * @param params.value - Value associated with the transaction.\n * @returns The updated transaction metadata.\n */\n async updateEditableParams(\n txId: string,\n {\n data,\n gas,\n gasPrice,\n from,\n to,\n value,\n }: {\n data?: string;\n gas?: string;\n gasPrice?: string;\n from?: string;\n to?: string;\n value?: string;\n },\n ) {\n const transactionMeta = this.getTransaction(txId);\n if (!transactionMeta) {\n throw new Error(\n `Cannot update editable params as no transaction metadata found`,\n );\n }\n\n validateIfTransactionUnapproved(transactionMeta, 'updateEditableParams');\n\n const editableParams = {\n txParams: {\n data,\n from,\n to,\n value,\n gas,\n gasPrice,\n },\n } as Partial;\n\n editableParams.txParams = pickBy(\n editableParams.txParams,\n ) as TransactionParams;\n\n const updatedTransaction = merge({}, transactionMeta, editableParams);\n const provider = this.#multichainTrackingHelper.getProvider({\n chainId: transactionMeta.chainId,\n networkClientId: transactionMeta.networkClientId,\n });\n const ethQuery = new EthQuery(provider);\n const { type } = await determineTransactionType(\n updatedTransaction.txParams,\n ethQuery,\n );\n updatedTransaction.type = type;\n\n await updateTransactionLayer1GasFee({\n layer1GasFeeFlows: this.layer1GasFeeFlows,\n provider,\n transactionMeta: updatedTransaction,\n });\n\n this.updateTransaction(\n updatedTransaction,\n `Update Editable Params for ${txId}`,\n );\n return this.getTransaction(txId);\n }\n\n /**\n * Signs and returns the raw transaction data for provided transaction params list.\n *\n * @param listOfTxParams - The list of transaction params to approve.\n * @param opts - Options bag.\n * @param opts.hasNonce - Whether the transactions already have a nonce.\n * @returns The raw transactions.\n */\n async approveTransactionsWithSameNonce(\n listOfTxParams: (TransactionParams & { chainId: Hex })[] = [],\n { hasNonce }: { hasNonce?: boolean } = {},\n ): Promise {\n log('Approving transactions with same nonce', {\n transactions: listOfTxParams,\n });\n\n if (listOfTxParams.length === 0) {\n return '';\n }\n\n const initialTx = listOfTxParams[0];\n const common = this.getCommonConfiguration(initialTx.chainId);\n\n // We need to ensure we get the nonce using the the NonceTracker on the chain matching\n // the txParams. In this context we only have chainId available to us, but the\n // NonceTrackers are keyed by networkClientId. To workaround this, we attempt to find\n // a networkClientId that matches the chainId. As a fallback, the globally selected\n // network's NonceTracker will be used instead.\n let networkClientId: NetworkClientId | undefined;\n try {\n networkClientId = this.messagingSystem.call(\n `NetworkController:findNetworkClientIdByChainId`,\n initialTx.chainId,\n );\n } catch (err) {\n log('failed to find networkClientId from chainId', err);\n }\n\n const initialTxAsEthTx = TransactionFactory.fromTxData(initialTx, {\n common,\n });\n const initialTxAsSerializedHex = bufferToHex(initialTxAsEthTx.serialize());\n\n if (this.approvingTransactionIds.has(initialTxAsSerializedHex)) {\n return '';\n }\n this.approvingTransactionIds.add(initialTxAsSerializedHex);\n\n let rawTransactions, nonceLock;\n try {\n // TODO: we should add a check to verify that all transactions have the same from address\n const fromAddress = initialTx.from;\n const requiresNonce = hasNonce !== true;\n\n nonceLock = requiresNonce\n ? await this.getNonceLock(fromAddress, networkClientId)\n : undefined;\n\n const nonce = nonceLock\n ? add0x(nonceLock.nextNonce.toString(16))\n : initialTx.nonce;\n\n if (nonceLock) {\n log('Using nonce from nonce tracker', nonce, nonceLock.nonceDetails);\n }\n\n rawTransactions = await Promise.all(\n listOfTxParams.map((txParams) => {\n txParams.nonce = nonce;\n return this.signExternalTransaction(txParams.chainId, txParams);\n }),\n );\n } catch (err) {\n log('Error while signing transactions with same nonce', err);\n // Must set transaction to submitted/failed before releasing lock\n // continue with error chain\n throw err;\n } finally {\n nonceLock?.releaseLock();\n this.approvingTransactionIds.delete(initialTxAsSerializedHex);\n }\n return rawTransactions;\n }\n\n /**\n * Update a custodial transaction.\n *\n * @param transactionId - The ID of the transaction to update.\n * @param options - The custodial transaction options to update.\n * @param options.errorMessage - The error message to be assigned in case transaction status update to failed.\n * @param options.hash - The new hash value to be assigned.\n * @param options.status - The new status value to be assigned.\n */\n updateCustodialTransaction(\n transactionId: string,\n {\n errorMessage,\n hash,\n status,\n }: {\n errorMessage?: string;\n hash?: string;\n status?: TransactionStatus;\n },\n ) {\n const transactionMeta = this.getTransaction(transactionId);\n\n if (!transactionMeta) {\n throw new Error(\n `Cannot update custodial transaction as no transaction metadata found`,\n );\n }\n\n if (!transactionMeta.custodyId) {\n throw new Error('Transaction must be a custodian transaction');\n }\n\n if (\n status &&\n ![\n TransactionStatus.submitted,\n TransactionStatus.signed,\n TransactionStatus.failed,\n ].includes(status)\n ) {\n throw new Error(\n `Cannot update custodial transaction with status: ${status}`,\n );\n }\n\n const updatedTransactionMeta = merge(\n {},\n transactionMeta,\n pickBy({ hash, status }),\n ) as TransactionMeta;\n\n if (updatedTransactionMeta.status === TransactionStatus.submitted) {\n updatedTransactionMeta.submittedTime = new Date().getTime();\n }\n\n if (updatedTransactionMeta.status === TransactionStatus.failed) {\n updatedTransactionMeta.error = normalizeTxError(new Error(errorMessage));\n }\n\n this.updateTransaction(\n updatedTransactionMeta,\n `${controllerName}:updateCustodialTransaction - Custodial transaction updated`,\n );\n\n if (\n [TransactionStatus.submitted, TransactionStatus.failed].includes(\n status as TransactionStatus,\n )\n ) {\n this.messagingSystem.publish(\n `${controllerName}:transactionFinished`,\n updatedTransactionMeta,\n );\n this.#internalEvents.emit(\n `${updatedTransactionMeta.id}:finished`,\n updatedTransactionMeta,\n );\n }\n }\n\n /**\n * Creates approvals for all unapproved transactions persisted.\n */\n initApprovals() {\n const chainId = this.getChainId();\n const unapprovedTxs = this.state.transactions.filter(\n (transaction) =>\n transaction.status === TransactionStatus.unapproved &&\n transaction.chainId === chainId &&\n !transaction.isUserOperation,\n );\n\n for (const txMeta of unapprovedTxs) {\n this.processApproval(txMeta, {\n shouldShowRequest: false,\n }).catch((error) => {\n if (error?.code === errorCodes.provider.userRejectedRequest) {\n return;\n }\n console.error('Error during persisted transaction approval', error);\n });\n }\n }\n\n /**\n * Search transaction metadata for matching entries.\n *\n * @param opts - Options bag.\n * @param opts.searchCriteria - An object containing values or functions for transaction properties to filter transactions with.\n * @param opts.initialList - The transactions to search. Defaults to the current state.\n * @param opts.filterToCurrentNetwork - Whether to filter the results to the current network. Defaults to true.\n * @param opts.limit - The maximum number of transactions to return. No limit by default.\n * @returns An array of transactions matching the provided options.\n */\n getTransactions({\n searchCriteria = {},\n initialList,\n filterToCurrentNetwork = true,\n limit,\n }: {\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n searchCriteria?: any;\n initialList?: TransactionMeta[];\n filterToCurrentNetwork?: boolean;\n limit?: number;\n } = {}): TransactionMeta[] {\n const chainId = this.getChainId();\n // searchCriteria is an object that might have values that aren't predicate\n // methods. When providing any other value type (string, number, etc), we\n // consider this shorthand for \"check the value at key for strict equality\n // with the provided value\". To conform this object to be only methods, we\n // mapValues (lodash) such that every value on the object is a method that\n // returns a boolean.\n const predicateMethods = mapValues(searchCriteria, (predicate) => {\n return typeof predicate === 'function'\n ? predicate\n : // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (v: any) => v === predicate;\n });\n\n const transactionsToFilter = initialList ?? this.state.transactions;\n\n // Combine sortBy and pickBy to transform our state object into an array of\n // matching transactions that are sorted by time.\n const filteredTransactions = sortBy(\n pickBy(transactionsToFilter, (transaction) => {\n if (filterToCurrentNetwork && transaction.chainId !== chainId) {\n return false;\n }\n // iterate over the predicateMethods keys to check if the transaction\n // matches the searchCriteria\n for (const [key, predicate] of Object.entries(predicateMethods)) {\n // We return false early as soon as we know that one of the specified\n // search criteria do not match the transaction. This prevents\n // needlessly checking all criteria when we already know the criteria\n // are not fully satisfied. We check both txParams and the base\n // object as predicate keys can be either.\n if (key in transaction.txParams) {\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (predicate((transaction.txParams as any)[key]) === false) {\n return false;\n }\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } else if (predicate((transaction as any)[key]) === false) {\n return false;\n }\n }\n\n return true;\n }),\n 'time',\n );\n if (limit !== undefined) {\n // We need to have all transactions of a given nonce in order to display\n // necessary details in the UI. We use the size of this set to determine\n // whether we have reached the limit provided, thus ensuring that all\n // transactions of nonces we include will be sent to the UI.\n const nonces = new Set();\n const txs = [];\n // By default, the transaction list we filter from is sorted by time ASC.\n // To ensure that filtered results prefers the newest transactions we\n // iterate from right to left, inserting transactions into front of a new\n // array. The original order is preserved, but we ensure that newest txs\n // are preferred.\n for (let i = filteredTransactions.length - 1; i > -1; i--) {\n const txMeta = filteredTransactions[i];\n const { nonce } = txMeta.txParams;\n if (!nonces.has(nonce)) {\n if (nonces.size < limit) {\n nonces.add(nonce);\n } else {\n continue;\n }\n }\n // Push transaction into the beginning of our array to ensure the\n // original order is preserved.\n txs.unshift(txMeta);\n }\n return txs;\n }\n return filteredTransactions;\n }\n\n async estimateGasFee({\n transactionParams,\n chainId,\n networkClientId: requestNetworkClientId,\n }: {\n transactionParams: TransactionParams;\n chainId?: Hex;\n networkClientId?: NetworkClientId;\n }): Promise {\n const networkClientId = this.#getNetworkClientId({\n networkClientId: requestNetworkClientId,\n chainId,\n });\n\n const transactionMeta = {\n txParams: transactionParams,\n chainId,\n networkClientId,\n } as TransactionMeta;\n\n // Guaranteed as the default gas fee flow matches all transactions.\n const gasFeeFlow = getGasFeeFlow(\n transactionMeta,\n this.gasFeeFlows,\n ) as GasFeeFlow;\n\n const ethQuery = this.#multichainTrackingHelper.getEthQuery({\n networkClientId,\n chainId,\n });\n\n const gasFeeControllerData = await this.getGasFeeEstimates({\n networkClientId,\n });\n\n return gasFeeFlow.getGasFees({\n ethQuery,\n gasFeeControllerData,\n transactionMeta,\n });\n }\n\n /**\n * Determine the layer 1 gas fee for the given transaction parameters.\n *\n * @param request - The request object.\n * @param request.transactionParams - The transaction parameters to estimate the layer 1 gas fee for.\n * @param request.chainId - The ID of the chain where the transaction will be executed.\n * @param request.networkClientId - The ID of a specific network client to process the transaction.\n */\n async getLayer1GasFee({\n transactionParams,\n chainId,\n networkClientId,\n }: {\n transactionParams: TransactionParams;\n chainId?: Hex;\n networkClientId?: NetworkClientId;\n }): Promise {\n const provider = this.#multichainTrackingHelper.getProvider({\n networkClientId,\n chainId,\n });\n\n return await getTransactionLayer1GasFee({\n layer1GasFeeFlows: this.layer1GasFeeFlows,\n provider,\n transactionMeta: {\n txParams: transactionParams,\n chainId,\n } as TransactionMeta,\n });\n }\n\n private async signExternalTransaction(\n chainId: Hex,\n transactionParams: TransactionParams,\n ): Promise {\n if (!this.sign) {\n throw new Error('No sign method defined.');\n }\n\n const normalizedTransactionParams =\n normalizeTransactionParams(transactionParams);\n const type = isEIP1559Transaction(normalizedTransactionParams)\n ? TransactionEnvelopeType.feeMarket\n : TransactionEnvelopeType.legacy;\n const updatedTransactionParams = {\n ...normalizedTransactionParams,\n type,\n gasLimit: normalizedTransactionParams.gas,\n chainId,\n };\n\n const { from } = updatedTransactionParams;\n const common = this.getCommonConfiguration(chainId);\n const unsignedTransaction = TransactionFactory.fromTxData(\n updatedTransactionParams,\n { common },\n );\n const signedTransaction = await this.sign(unsignedTransaction, from);\n\n const rawTransaction = bufferToHex(signedTransaction.serialize());\n return rawTransaction;\n }\n\n /**\n * Removes unapproved transactions from state.\n */\n clearUnapprovedTransactions() {\n const transactions = this.state.transactions.filter(\n ({ status }) => status !== TransactionStatus.unapproved,\n );\n this.update((state) => {\n state.transactions = this.trimTransactionsForState(transactions);\n });\n }\n\n /**\n * Stop the signing process for a specific transaction.\n * Throws an error causing the transaction status to be set to failed.\n * @param transactionId - The ID of the transaction to stop signing.\n */\n abortTransactionSigning(transactionId: string) {\n const transactionMeta = this.getTransaction(transactionId);\n\n if (!transactionMeta) {\n throw new Error(`Cannot abort signing as no transaction metadata found`);\n }\n\n const abortCallback = this.signAbortCallbacks.get(transactionId);\n\n if (!abortCallback) {\n throw new Error(\n `Cannot abort signing as transaction is not waiting for signing`,\n );\n }\n\n abortCallback();\n\n this.signAbortCallbacks.delete(transactionId);\n }\n\n private addMetadata(transactionMeta: TransactionMeta) {\n this.update((state) => {\n state.transactions = this.trimTransactionsForState([\n ...state.transactions,\n transactionMeta,\n ]);\n });\n }\n\n private async updateGasProperties(transactionMeta: TransactionMeta) {\n const isEIP1559Compatible =\n (await this.getEIP1559Compatibility(transactionMeta.networkClientId)) &&\n transactionMeta.txParams.type !== TransactionEnvelopeType.legacy;\n\n const { networkClientId, chainId } = transactionMeta;\n\n const isCustomNetwork = this.#isCustomNetwork(networkClientId);\n\n const ethQuery = this.#multichainTrackingHelper.getEthQuery({\n networkClientId,\n chainId,\n });\n\n const provider = this.#multichainTrackingHelper.getProvider({\n networkClientId,\n chainId,\n });\n\n await updateGas({\n ethQuery,\n chainId,\n isCustomNetwork,\n txMeta: transactionMeta,\n });\n\n await updateGasFees({\n eip1559: isEIP1559Compatible,\n ethQuery,\n gasFeeFlows: this.gasFeeFlows,\n getGasFeeEstimates: this.getGasFeeEstimates,\n getSavedGasFees: this.getSavedGasFees.bind(this),\n txMeta: transactionMeta,\n });\n\n await updateTransactionLayer1GasFee({\n layer1GasFeeFlows: this.layer1GasFeeFlows,\n provider,\n transactionMeta,\n });\n }\n\n private onBootCleanup() {\n this.submitApprovedTransactions();\n }\n\n /**\n * Force submit approved transactions for all chains.\n */\n private submitApprovedTransactions() {\n const approvedTransactions = this.state.transactions.filter(\n (transaction) => transaction.status === TransactionStatus.approved,\n );\n\n for (const transactionMeta of approvedTransactions) {\n if (this.beforeApproveOnInit(transactionMeta)) {\n this.approveTransaction(transactionMeta.id).catch((error) => {\n /* istanbul ignore next */\n console.error('Error while submitting persisted transaction', error);\n });\n }\n }\n }\n\n private async processApproval(\n transactionMeta: TransactionMeta,\n {\n isExisting = false,\n requireApproval,\n shouldShowRequest = true,\n actionId,\n }: {\n isExisting?: boolean;\n requireApproval?: boolean | undefined;\n shouldShowRequest?: boolean;\n actionId?: string;\n },\n ): Promise {\n const transactionId = transactionMeta.id;\n let resultCallbacks: AcceptResultCallbacks | undefined;\n const { meta, isCompleted } = this.isTransactionCompleted(transactionId);\n const finishedPromise = isCompleted\n ? Promise.resolve(meta)\n : this.waitForTransactionFinished(transactionId);\n\n if (meta && !isExisting && !isCompleted) {\n try {\n if (requireApproval !== false) {\n const acceptResult = await this.requestApproval(transactionMeta, {\n shouldShowRequest,\n });\n resultCallbacks = acceptResult.resultCallbacks;\n\n const approvalValue = acceptResult.value as\n | {\n txMeta?: TransactionMeta;\n }\n | undefined;\n\n const updatedTransaction = approvalValue?.txMeta;\n\n if (updatedTransaction) {\n log('Updating transaction with approval data', {\n customNonce: updatedTransaction.customNonceValue,\n params: updatedTransaction.txParams,\n });\n\n this.updateTransaction(\n updatedTransaction,\n 'TransactionController#processApproval - Updated with approval data',\n );\n }\n }\n\n const { isCompleted: isTxCompleted } =\n this.isTransactionCompleted(transactionId);\n\n if (!isTxCompleted) {\n const approvalResult = await this.approveTransaction(transactionId);\n if (\n approvalResult === ApprovalState.SkippedViaBeforePublishHook &&\n resultCallbacks\n ) {\n resultCallbacks.success();\n }\n const updatedTransactionMeta = this.getTransaction(\n transactionId,\n ) as TransactionMeta;\n this.messagingSystem.publish(\n `${controllerName}:transactionApproved`,\n {\n transactionMeta: updatedTransactionMeta,\n actionId,\n },\n );\n }\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n const { isCompleted: isTxCompleted } =\n this.isTransactionCompleted(transactionId);\n if (!isTxCompleted) {\n if (error?.code === errorCodes.provider.userRejectedRequest) {\n this.cancelTransaction(transactionId, actionId);\n\n throw providerErrors.userRejectedRequest(\n 'MetaMask Tx Signature: User denied transaction signature.',\n );\n } else {\n this.failTransaction(meta, error, actionId);\n }\n }\n }\n }\n\n const finalMeta = await finishedPromise;\n\n switch (finalMeta?.status) {\n case TransactionStatus.failed:\n resultCallbacks?.error(finalMeta.error);\n throw rpcErrors.internal(finalMeta.error.message);\n\n case TransactionStatus.submitted:\n resultCallbacks?.success();\n return finalMeta.hash as string;\n\n default:\n const internalError = rpcErrors.internal(\n `MetaMask Tx Signature: Unknown problem: ${JSON.stringify(\n finalMeta || transactionId,\n )}`,\n );\n\n resultCallbacks?.error(internalError);\n throw internalError;\n }\n }\n\n /**\n * Approves a transaction and updates it's status in state. If this is not a\n * retry transaction, a nonce will be generated. The transaction is signed\n * using the sign configuration property, then published to the blockchain.\n * A `:finished` hub event is fired after success or failure.\n *\n * @param transactionId - The ID of the transaction to approve.\n */\n private async approveTransaction(transactionId: string) {\n const cleanupTasks = new Array<() => void>();\n cleanupTasks.push(await this.mutex.acquire());\n\n let transactionMeta = this.getTransactionOrThrow(transactionId);\n\n try {\n if (!this.sign) {\n this.failTransaction(\n transactionMeta,\n new Error('No sign method defined.'),\n );\n return ApprovalState.NotApproved;\n } else if (!transactionMeta.chainId) {\n this.failTransaction(transactionMeta, new Error('No chainId defined.'));\n return ApprovalState.NotApproved;\n }\n\n if (this.approvingTransactionIds.has(transactionId)) {\n log('Skipping approval as signing in progress', transactionId);\n return ApprovalState.NotApproved;\n }\n this.approvingTransactionIds.add(transactionId);\n cleanupTasks.push(() =>\n this.approvingTransactionIds.delete(transactionId),\n );\n\n const [nonce, releaseNonce] = await getNextNonce(\n transactionMeta,\n (address: string) =>\n this.#multichainTrackingHelper.getNonceLock(\n address,\n transactionMeta.networkClientId,\n ),\n );\n\n // must set transaction to submitted/failed before releasing lock\n releaseNonce && cleanupTasks.push(releaseNonce);\n\n transactionMeta = this.#updateTransactionInternal(\n {\n transactionId,\n note: 'TransactionController#approveTransaction - Transaction approved',\n },\n (draftTxMeta) => {\n const { txParams, chainId } = draftTxMeta;\n\n draftTxMeta.status = TransactionStatus.approved;\n draftTxMeta.txParams = {\n ...txParams,\n nonce,\n chainId,\n gasLimit: txParams.gas,\n ...(isEIP1559Transaction(txParams) && {\n type: TransactionEnvelopeType.feeMarket,\n }),\n };\n },\n );\n\n this.onTransactionStatusChange(transactionMeta);\n\n const rawTx = await this.signTransaction(\n transactionMeta,\n transactionMeta.txParams,\n );\n\n if (!this.beforePublish(transactionMeta)) {\n log('Skipping publishing transaction based on hook');\n this.messagingSystem.publish(\n `${controllerName}:transactionPublishingSkipped`,\n transactionMeta,\n );\n return ApprovalState.SkippedViaBeforePublishHook;\n }\n\n if (!rawTx) {\n return ApprovalState.NotApproved;\n }\n\n const ethQuery = this.#multichainTrackingHelper.getEthQuery({\n networkClientId: transactionMeta.networkClientId,\n chainId: transactionMeta.chainId,\n });\n\n let preTxBalance: string | undefined;\n const shouldUpdatePreTxBalance =\n transactionMeta.type === TransactionType.swap;\n\n if (shouldUpdatePreTxBalance) {\n log('Determining pre-transaction balance');\n\n preTxBalance = await query(ethQuery, 'getBalance', [\n transactionMeta.txParams.from,\n ]);\n }\n\n log('Publishing transaction', transactionMeta.txParams);\n\n let { transactionHash: hash } = await this.publish(\n transactionMeta,\n rawTx,\n );\n\n if (hash === undefined) {\n hash = await this.publishTransaction(ethQuery, rawTx);\n }\n\n log('Publish successful', hash);\n\n transactionMeta = this.#updateTransactionInternal(\n {\n transactionId,\n note: 'TransactionController#approveTransaction - Transaction submitted',\n },\n (draftTxMeta) => {\n draftTxMeta.hash = hash;\n draftTxMeta.status = TransactionStatus.submitted;\n draftTxMeta.submittedTime = new Date().getTime();\n if (shouldUpdatePreTxBalance) {\n draftTxMeta.preTxBalance = preTxBalance;\n log('Updated pre-transaction balance', preTxBalance);\n }\n },\n );\n\n this.messagingSystem.publish(`${controllerName}:transactionSubmitted`, {\n transactionMeta,\n });\n\n this.messagingSystem.publish(\n `${controllerName}:transactionFinished`,\n transactionMeta,\n );\n this.#internalEvents.emit(`${transactionId}:finished`, transactionMeta);\n\n this.onTransactionStatusChange(transactionMeta);\n return ApprovalState.Approved;\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n this.failTransaction(transactionMeta, error);\n return ApprovalState.NotApproved;\n } finally {\n cleanupTasks.forEach((task) => task());\n }\n }\n\n private async publishTransaction(\n ethQuery: EthQuery,\n rawTransaction: string,\n ): Promise {\n return await query(ethQuery, 'sendRawTransaction', [rawTransaction]);\n }\n\n /**\n * Cancels a transaction based on its ID by setting its status to \"rejected\"\n * and emitting a `:finished` hub event.\n *\n * @param transactionId - The ID of the transaction to cancel.\n * @param actionId - The actionId passed from UI\n */\n private cancelTransaction(transactionId: string, actionId?: string) {\n const transactionMeta = this.state.transactions.find(\n ({ id }) => id === transactionId,\n );\n if (!transactionMeta) {\n return;\n }\n this.update((state) => {\n const transactions = state.transactions.filter(\n ({ id }) => id !== transactionId,\n );\n state.transactions = this.trimTransactionsForState(transactions);\n });\n const updatedTransactionMeta = {\n ...transactionMeta,\n status: TransactionStatus.rejected as const,\n };\n this.messagingSystem.publish(\n `${controllerName}:transactionFinished`,\n updatedTransactionMeta,\n );\n this.#internalEvents.emit(\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `${transactionMeta.id}:finished`,\n updatedTransactionMeta,\n );\n this.messagingSystem.publish(`${controllerName}:transactionRejected`, {\n transactionMeta: updatedTransactionMeta,\n actionId,\n });\n this.onTransactionStatusChange(updatedTransactionMeta);\n }\n\n /**\n * Trim the amount of transactions that are set on the state. Checks\n * if the length of the tx history is longer then desired persistence\n * limit and then if it is removes the oldest confirmed or rejected tx.\n * Pending or unapproved transactions will not be removed by this\n * operation. For safety of presenting a fully functional transaction UI\n * representation, this function will not break apart transactions with the\n * same nonce, created on the same day, per network. Not accounting for\n * transactions of the same nonce, same day and network combo can result in\n * confusing or broken experiences in the UI.\n *\n * @param transactions - The transactions to be applied to the state.\n * @returns The trimmed list of transactions.\n */\n private trimTransactionsForState(\n transactions: TransactionMeta[],\n ): TransactionMeta[] {\n const nonceNetworkSet = new Set();\n\n const txsToKeep = [...transactions]\n .sort((a, b) => (a.time > b.time ? -1 : 1)) // Descending time order\n .filter((tx) => {\n const { chainId, status, txParams, time } = tx;\n\n if (txParams) {\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n const key = `${String(txParams.nonce)}-${convertHexToDecimal(\n chainId,\n )}-${new Date(time).toDateString()}`;\n\n if (nonceNetworkSet.has(key)) {\n return true;\n } else if (\n nonceNetworkSet.size < this.#transactionHistoryLimit ||\n !this.isFinalState(status)\n ) {\n nonceNetworkSet.add(key);\n return true;\n }\n }\n\n return false;\n });\n\n txsToKeep.reverse(); // Ascending time order\n return txsToKeep;\n }\n\n /**\n * Determines if the transaction is in a final state.\n *\n * @param status - The transaction status.\n * @returns Whether the transaction is in a final state.\n */\n private isFinalState(status: TransactionStatus): boolean {\n return (\n status === TransactionStatus.rejected ||\n status === TransactionStatus.confirmed ||\n status === TransactionStatus.failed\n );\n }\n\n /**\n * Whether the transaction has at least completed all local processing.\n *\n * @param status - The transaction status.\n * @returns Whether the transaction is in a final state.\n */\n private isLocalFinalState(status: TransactionStatus): boolean {\n return [\n TransactionStatus.confirmed,\n TransactionStatus.failed,\n TransactionStatus.rejected,\n TransactionStatus.submitted,\n ].includes(status);\n }\n\n private async requestApproval(\n txMeta: TransactionMeta,\n { shouldShowRequest }: { shouldShowRequest: boolean },\n ): Promise {\n const id = this.getApprovalId(txMeta);\n const { origin } = txMeta;\n const type = ApprovalType.Transaction;\n const requestData = { txId: txMeta.id };\n\n return (await this.messagingSystem.call(\n 'ApprovalController:addRequest',\n {\n id,\n origin: origin || ORIGIN_METAMASK,\n type,\n requestData,\n expectsResult: true,\n },\n shouldShowRequest,\n )) as Promise;\n }\n\n private getTransaction(\n transactionId: string,\n ): Readonly | undefined {\n const { transactions } = this.state;\n return transactions.find(({ id }) => id === transactionId);\n }\n\n private getTransactionOrThrow(\n transactionId: string,\n errorMessagePrefix = 'TransactionController',\n ): Readonly {\n const txMeta = this.getTransaction(transactionId);\n if (!txMeta) {\n throw new Error(\n `${errorMessagePrefix}: No transaction found with id ${transactionId}`,\n );\n }\n return txMeta;\n }\n\n private getApprovalId(txMeta: TransactionMeta) {\n return String(txMeta.id);\n }\n\n private isTransactionCompleted(transactionId: string): {\n meta?: TransactionMeta;\n isCompleted: boolean;\n } {\n const transaction = this.getTransaction(transactionId);\n\n if (!transaction) {\n return { meta: undefined, isCompleted: false };\n }\n\n const isCompleted = this.isLocalFinalState(transaction.status);\n\n return { meta: transaction, isCompleted };\n }\n\n private getChainId(networkClientId?: NetworkClientId): Hex {\n const globalChainId = this.#getGlobalChainId();\n const globalNetworkClientId = this.#getGlobalNetworkClientId();\n\n if (!networkClientId || networkClientId === globalNetworkClientId) {\n return globalChainId;\n }\n\n return this.messagingSystem.call(\n `NetworkController:getNetworkClientById`,\n networkClientId,\n ).configuration.chainId;\n }\n\n private prepareUnsignedEthTx(\n chainId: Hex,\n txParams: TransactionParams,\n ): TypedTransaction {\n return TransactionFactory.fromTxData(txParams, {\n freeze: false,\n common: this.getCommonConfiguration(chainId),\n });\n }\n\n /**\n * `@ethereumjs/tx` uses `@ethereumjs/common` as a configuration tool for\n * specifying which chain, network, hardfork and EIPs to support for\n * a transaction. By referencing this configuration, and analyzing the fields\n * specified in txParams, @ethereumjs/tx is able to determine which EIP-2718\n * transaction type to use.\n *\n * @param chainId - The chainId to use for the configuration.\n * @returns common configuration object\n */\n private getCommonConfiguration(chainId: Hex): Common {\n const customChainParams: Partial = {\n chainId: parseInt(chainId, 16),\n defaultHardfork: HARDFORK,\n };\n\n return Common.custom(customChainParams);\n }\n\n private onIncomingTransactions({\n added,\n updated,\n }: {\n added: TransactionMeta[];\n updated: TransactionMeta[];\n }) {\n this.update((state) => {\n const { transactions: currentTransactions } = state;\n const updatedTransactions = [\n ...added,\n ...currentTransactions.map((originalTransaction) => {\n const updatedTransaction = updated.find(\n ({ hash }) => hash === originalTransaction.hash,\n );\n\n return updatedTransaction ?? originalTransaction;\n }),\n ];\n\n state.transactions = this.trimTransactionsForState(updatedTransactions);\n });\n }\n\n private onUpdatedLastFetchedBlockNumbers({\n lastFetchedBlockNumbers,\n blockNumber,\n }: {\n lastFetchedBlockNumbers: {\n [key: string]: number;\n };\n blockNumber: number;\n }) {\n this.update((state) => {\n state.lastFetchedBlockNumbers = lastFetchedBlockNumbers;\n });\n this.messagingSystem.publish(\n `${controllerName}:incomingTransactionBlockReceived`,\n blockNumber,\n );\n }\n\n private generateDappSuggestedGasFees(\n txParams: TransactionParams,\n origin?: string,\n ): DappSuggestedGasFees | undefined {\n if (!origin || origin === ORIGIN_METAMASK) {\n return undefined;\n }\n\n const { gasPrice, maxFeePerGas, maxPriorityFeePerGas, gas } = txParams;\n\n if (\n gasPrice === undefined &&\n maxFeePerGas === undefined &&\n maxPriorityFeePerGas === undefined &&\n gas === undefined\n ) {\n return undefined;\n }\n\n const dappSuggestedGasFees: DappSuggestedGasFees = {};\n\n if (gasPrice !== undefined) {\n dappSuggestedGasFees.gasPrice = gasPrice;\n } else if (\n maxFeePerGas !== undefined ||\n maxPriorityFeePerGas !== undefined\n ) {\n dappSuggestedGasFees.maxFeePerGas = maxFeePerGas;\n dappSuggestedGasFees.maxPriorityFeePerGas = maxPriorityFeePerGas;\n }\n\n if (gas !== undefined) {\n dappSuggestedGasFees.gas = gas;\n }\n\n return dappSuggestedGasFees;\n }\n\n /**\n * Validates and adds external provided transaction to state.\n *\n * @param transactionMeta - Nominated external transaction to be added to state.\n * @returns The new transaction.\n */\n private addExternalTransaction(transactionMeta: TransactionMeta) {\n const { chainId } = transactionMeta;\n const { transactions } = this.state;\n const fromAddress = transactionMeta?.txParams?.from;\n const sameFromAndNetworkTransactions = transactions.filter(\n (transaction) =>\n transaction.txParams.from === fromAddress &&\n transaction.chainId === chainId,\n );\n const confirmedTxs = sameFromAndNetworkTransactions.filter(\n (transaction) => transaction.status === TransactionStatus.confirmed,\n );\n const pendingTxs = sameFromAndNetworkTransactions.filter(\n (transaction) => transaction.status === TransactionStatus.submitted,\n );\n\n validateConfirmedExternalTransaction(\n transactionMeta,\n confirmedTxs,\n pendingTxs,\n );\n\n // Make sure provided external transaction has non empty history array\n const newTransactionMeta =\n (transactionMeta.history ?? []).length === 0 && !this.isHistoryDisabled\n ? addInitialHistorySnapshot(transactionMeta)\n : transactionMeta;\n\n this.update((state) => {\n state.transactions = this.trimTransactionsForState([\n ...state.transactions,\n newTransactionMeta,\n ]);\n });\n\n return newTransactionMeta;\n }\n\n /**\n * Sets other txMeta statuses to dropped if the txMeta that has been confirmed has other transactions\n * in the transactions have the same nonce.\n *\n * @param transactionId - Used to identify original transaction.\n */\n private markNonceDuplicatesDropped(transactionId: string) {\n const transactionMeta = this.getTransaction(transactionId);\n if (!transactionMeta) {\n return;\n }\n const nonce = transactionMeta.txParams?.nonce;\n const from = transactionMeta.txParams?.from;\n const { chainId } = transactionMeta;\n\n const sameNonceTransactions = this.state.transactions.filter(\n (transaction) =>\n transaction.id !== transactionId &&\n transaction.txParams.from === from &&\n transaction.txParams.nonce === nonce &&\n transaction.chainId === chainId &&\n transaction.type !== TransactionType.incoming,\n );\n const sameNonceTransactionIds = sameNonceTransactions.map(\n (transaction) => transaction.id,\n );\n\n if (sameNonceTransactions.length === 0) {\n return;\n }\n\n this.update((state) => {\n for (const transaction of state.transactions) {\n if (sameNonceTransactionIds.includes(transaction.id)) {\n transaction.replacedBy = transactionMeta?.hash;\n transaction.replacedById = transactionMeta?.id;\n }\n }\n });\n\n for (const transaction of this.state.transactions) {\n if (\n sameNonceTransactionIds.includes(transaction.id) &&\n transaction.status !== TransactionStatus.failed\n ) {\n this.setTransactionStatusDropped(transaction);\n }\n }\n }\n\n /**\n * Method to set transaction status to dropped.\n *\n * @param transactionMeta - TransactionMeta of transaction to be marked as dropped.\n */\n private setTransactionStatusDropped(transactionMeta: TransactionMeta) {\n const updatedTransactionMeta = {\n ...transactionMeta,\n status: TransactionStatus.dropped as const,\n };\n this.messagingSystem.publish(`${controllerName}:transactionDropped`, {\n transactionMeta: updatedTransactionMeta,\n });\n this.updateTransaction(\n updatedTransactionMeta,\n 'TransactionController#setTransactionStatusDropped - Transaction dropped',\n );\n this.onTransactionStatusChange(updatedTransactionMeta);\n }\n\n /**\n * Get transaction with provided actionId.\n *\n * @param actionId - Unique ID to prevent duplicate requests\n * @returns the filtered transaction\n */\n private getTransactionWithActionId(actionId?: string) {\n return this.state.transactions.find(\n (transaction) => actionId && transaction.actionId === actionId,\n );\n }\n\n private async waitForTransactionFinished(\n transactionId: string,\n ): Promise {\n return new Promise((resolve) => {\n this.#internalEvents.once(`${transactionId}:finished`, (txMeta) => {\n resolve(txMeta);\n });\n });\n }\n\n /**\n * Updates the r, s, and v properties of a TransactionMeta object\n * with values from a signed transaction.\n *\n * @param transactionMeta - The TransactionMeta object to update.\n * @param signedTx - The encompassing type for all transaction types containing r, s, and v values.\n * @returns The updated TransactionMeta object.\n */\n private updateTransactionMetaRSV(\n transactionMeta: TransactionMeta,\n signedTx: TypedTransaction,\n ): TransactionMeta {\n const transactionMetaWithRsv = cloneDeep(transactionMeta);\n\n for (const key of ['r', 's', 'v'] as const) {\n const value = signedTx[key];\n\n if (value === undefined || value === null) {\n continue;\n }\n\n transactionMetaWithRsv[key] = add0x(value.toString(16));\n }\n\n return transactionMetaWithRsv;\n }\n\n private async getEIP1559Compatibility(networkClientId?: NetworkClientId) {\n const currentNetworkIsEIP1559Compatible =\n await this.getCurrentNetworkEIP1559Compatibility(networkClientId);\n\n const currentAccountIsEIP1559Compatible =\n await this.getCurrentAccountEIP1559Compatibility();\n\n return (\n currentNetworkIsEIP1559Compatible && currentAccountIsEIP1559Compatible\n );\n }\n\n private async signTransaction(\n transactionMeta: TransactionMeta,\n txParams: TransactionParams,\n ): Promise {\n log('Signing transaction', txParams);\n\n const unsignedEthTx = this.prepareUnsignedEthTx(\n transactionMeta.chainId,\n txParams,\n );\n\n this.approvingTransactionIds.add(transactionMeta.id);\n\n const signedTx = await new Promise((resolve, reject) => {\n this.sign?.(\n unsignedEthTx,\n txParams.from,\n ...this.getAdditionalSignArguments(transactionMeta),\n ).then(resolve, reject);\n\n this.signAbortCallbacks.set(transactionMeta.id, () =>\n reject(new Error('Signing aborted by user')),\n );\n });\n\n this.signAbortCallbacks.delete(transactionMeta.id);\n\n if (!signedTx) {\n log('Skipping signed status as no signed transaction');\n return undefined;\n }\n\n const transactionMetaFromHook = cloneDeep(transactionMeta);\n if (!this.afterSign(transactionMetaFromHook, signedTx)) {\n this.updateTransaction(\n transactionMetaFromHook,\n 'TransactionController#signTransaction - Update after sign',\n );\n\n log('Skipping signed status based on hook');\n\n return undefined;\n }\n\n const transactionMetaWithRsv = {\n ...this.updateTransactionMetaRSV(transactionMetaFromHook, signedTx),\n status: TransactionStatus.signed as const,\n };\n\n this.updateTransaction(\n transactionMetaWithRsv,\n 'TransactionController#approveTransaction - Transaction signed',\n );\n\n this.onTransactionStatusChange(transactionMetaWithRsv);\n\n const rawTx = bufferToHex(signedTx.serialize());\n\n const transactionMetaWithRawTx = merge({}, transactionMetaWithRsv, {\n rawTx,\n });\n\n this.updateTransaction(\n transactionMetaWithRawTx,\n 'TransactionController#approveTransaction - RawTransaction added',\n );\n\n return rawTx;\n }\n\n private onTransactionStatusChange(transactionMeta: TransactionMeta) {\n this.messagingSystem.publish(`${controllerName}:transactionStatusUpdated`, {\n transactionMeta,\n });\n }\n\n private getNonceTrackerTransactions(\n status: TransactionStatus,\n address: string,\n chainId: string = this.getChainId(),\n ) {\n return getAndFormatTransactionsForNonceTracker(\n chainId,\n address,\n status,\n this.state.transactions,\n );\n }\n\n private onConfirmedTransaction(transactionMeta: TransactionMeta) {\n log('Processing confirmed transaction', transactionMeta.id);\n\n this.markNonceDuplicatesDropped(transactionMeta.id);\n\n this.messagingSystem.publish(\n `${controllerName}:transactionConfirmed`,\n transactionMeta,\n );\n\n this.onTransactionStatusChange(transactionMeta);\n\n // Intentional given potential duration of process.\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.updatePostBalance(transactionMeta);\n }\n\n private async updatePostBalance(transactionMeta: TransactionMeta) {\n try {\n if (transactionMeta.type !== TransactionType.swap) {\n return;\n }\n\n const ethQuery = this.#multichainTrackingHelper.getEthQuery({\n networkClientId: transactionMeta.networkClientId,\n chainId: transactionMeta.chainId,\n });\n const { updatedTransactionMeta, approvalTransactionMeta } =\n await updatePostTransactionBalance(transactionMeta, {\n ethQuery,\n getTransaction: this.getTransaction.bind(this),\n updateTransaction: this.updateTransaction.bind(this),\n });\n\n this.messagingSystem.publish(\n `${controllerName}:postTransactionBalanceUpdated`,\n {\n transactionMeta: updatedTransactionMeta,\n approvalTransactionMeta,\n },\n );\n } catch (error) {\n /* istanbul ignore next */\n log('Error while updating post transaction balance', error);\n }\n }\n\n #createNonceTracker({\n provider,\n blockTracker,\n chainId,\n }: {\n provider: Provider;\n blockTracker: BlockTracker;\n chainId?: Hex;\n }): NonceTracker {\n return new NonceTracker({\n // TODO: Fix types\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n provider: provider as any,\n // @ts-expect-error TODO: Fix types\n blockTracker,\n getPendingTransactions: this.#getNonceTrackerPendingTransactions.bind(\n this,\n chainId,\n ),\n getConfirmedTransactions: this.getNonceTrackerTransactions.bind(\n this,\n TransactionStatus.confirmed,\n ),\n });\n }\n\n #createIncomingTransactionHelper({\n blockTracker,\n etherscanRemoteTransactionSource,\n chainId,\n }: {\n blockTracker: BlockTracker;\n etherscanRemoteTransactionSource: EtherscanRemoteTransactionSource;\n chainId?: Hex;\n }): IncomingTransactionHelper {\n const incomingTransactionHelper = new IncomingTransactionHelper({\n blockTracker,\n getCurrentAccount: () => this.#getSelectedAccount(),\n getLastFetchedBlockNumbers: () => this.state.lastFetchedBlockNumbers,\n getChainId: chainId ? () => chainId : this.getChainId.bind(this),\n isEnabled: this.#incomingTransactionOptions.isEnabled,\n queryEntireHistory: this.#incomingTransactionOptions.queryEntireHistory,\n remoteTransactionSource: etherscanRemoteTransactionSource,\n transactionLimit: this.#transactionHistoryLimit,\n updateTransactions: this.#incomingTransactionOptions.updateTransactions,\n });\n\n this.#addIncomingTransactionHelperListeners(incomingTransactionHelper);\n\n return incomingTransactionHelper;\n }\n\n #createPendingTransactionTracker({\n provider,\n blockTracker,\n chainId,\n }: {\n provider: Provider;\n blockTracker: BlockTracker;\n chainId?: Hex;\n }): PendingTransactionTracker {\n const ethQuery = new EthQuery(provider);\n const getChainId = chainId ? () => chainId : this.getChainId.bind(this);\n\n const pendingTransactionTracker = new PendingTransactionTracker({\n approveTransaction: async (transactionId: string) => {\n await this.approveTransaction(transactionId);\n },\n blockTracker,\n getChainId,\n getEthQuery: () => ethQuery,\n getTransactions: () => this.state.transactions,\n isResubmitEnabled: this.#pendingTransactionOptions.isResubmitEnabled,\n getGlobalLock: () =>\n this.#multichainTrackingHelper.acquireNonceLockForChainIdKey({\n chainId: getChainId(),\n }),\n publishTransaction: this.publishTransaction.bind(this),\n hooks: {\n beforeCheckPendingTransaction:\n this.beforeCheckPendingTransaction.bind(this),\n beforePublish: this.beforePublish.bind(this),\n },\n });\n\n this.#addPendingTransactionTrackerListeners(pendingTransactionTracker);\n\n return pendingTransactionTracker;\n }\n\n #checkForPendingTransactionAndStartPolling = () => {\n // PendingTransactionTracker reads state through its getTransactions hook\n this.pendingTransactionTracker.startIfPendingTransactions();\n this.#multichainTrackingHelper.checkForPendingTransactionAndStartPolling();\n };\n\n #stopAllTracking() {\n this.pendingTransactionTracker.stop();\n this.#removePendingTransactionTrackerListeners(\n this.pendingTransactionTracker,\n );\n this.incomingTransactionHelper.stop();\n this.#removeIncomingTransactionHelperListeners(\n this.incomingTransactionHelper,\n );\n\n this.#multichainTrackingHelper.stopAllTracking();\n }\n\n #removeIncomingTransactionHelperListeners(\n incomingTransactionHelper: IncomingTransactionHelper,\n ) {\n incomingTransactionHelper.hub.removeAllListeners('transactions');\n incomingTransactionHelper.hub.removeAllListeners(\n 'updatedLastFetchedBlockNumbers',\n );\n }\n\n #addIncomingTransactionHelperListeners(\n incomingTransactionHelper: IncomingTransactionHelper,\n ) {\n incomingTransactionHelper.hub.on(\n 'transactions',\n this.onIncomingTransactions.bind(this),\n );\n incomingTransactionHelper.hub.on(\n 'updatedLastFetchedBlockNumbers',\n this.onUpdatedLastFetchedBlockNumbers.bind(this),\n );\n }\n\n #removePendingTransactionTrackerListeners(\n pendingTransactionTracker: PendingTransactionTracker,\n ) {\n pendingTransactionTracker.hub.removeAllListeners('transaction-confirmed');\n pendingTransactionTracker.hub.removeAllListeners('transaction-dropped');\n pendingTransactionTracker.hub.removeAllListeners('transaction-failed');\n pendingTransactionTracker.hub.removeAllListeners('transaction-updated');\n }\n\n #addPendingTransactionTrackerListeners(\n pendingTransactionTracker: PendingTransactionTracker,\n ) {\n pendingTransactionTracker.hub.on(\n 'transaction-confirmed',\n this.onConfirmedTransaction.bind(this),\n );\n\n pendingTransactionTracker.hub.on(\n 'transaction-dropped',\n this.setTransactionStatusDropped.bind(this),\n );\n\n pendingTransactionTracker.hub.on(\n 'transaction-failed',\n this.failTransaction.bind(this),\n );\n\n pendingTransactionTracker.hub.on(\n 'transaction-updated',\n this.updateTransaction.bind(this),\n );\n }\n\n #getNonceTrackerPendingTransactions(\n chainId: string | undefined,\n address: string,\n ) {\n const standardPendingTransactions = this.getNonceTrackerTransactions(\n TransactionStatus.submitted,\n address,\n chainId,\n );\n\n const externalPendingTransactions = this.getExternalPendingTransactions(\n address,\n chainId,\n );\n return [...standardPendingTransactions, ...externalPendingTransactions];\n }\n\n private async publishTransactionForRetry(\n ethQuery: EthQuery,\n rawTx: string,\n transactionMeta: TransactionMeta,\n ): Promise {\n try {\n const hash = await this.publishTransaction(ethQuery, rawTx);\n return hash;\n } catch (error: unknown) {\n if (this.isTransactionAlreadyConfirmedError(error as Error)) {\n await this.pendingTransactionTracker.forceCheckTransaction(\n transactionMeta,\n );\n throw new Error('Previous transaction is already confirmed');\n }\n throw error;\n }\n }\n\n /**\n * Ensures that error is a nonce issue\n *\n * @param error - The error to check\n * @returns Whether or not the error is a nonce issue\n */\n // TODO: Replace `any` with type\n // Some networks are returning original error in the data field\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private isTransactionAlreadyConfirmedError(error: any): boolean {\n return (\n error?.message?.includes('nonce too low') ||\n error?.data?.message?.includes('nonce too low')\n );\n }\n\n #getGasFeeFlows(): GasFeeFlow[] {\n if (this.#testGasFeeFlows) {\n return [new TestGasFeeFlow()];\n }\n\n return [new LineaGasFeeFlow(), new DefaultGasFeeFlow()];\n }\n\n #getLayer1GasFeeFlows(): Layer1GasFeeFlow[] {\n return [new OptimismLayer1GasFeeFlow(), new ScrollLayer1GasFeeFlow()];\n }\n\n #updateTransactionInternal(\n {\n transactionId,\n note,\n skipHistory,\n }: { transactionId: string; note?: string; skipHistory?: boolean },\n callback: (transactionMeta: TransactionMeta) => TransactionMeta | void,\n ): Readonly {\n let updatedTransactionParams: (keyof TransactionParams)[] = [];\n\n this.update((state) => {\n const index = state.transactions.findIndex(\n ({ id }) => id === transactionId,\n );\n\n let transactionMeta = state.transactions[index];\n\n // eslint-disable-next-line n/callback-return\n transactionMeta = callback(transactionMeta) ?? transactionMeta;\n\n transactionMeta.txParams = normalizeTransactionParams(\n transactionMeta.txParams,\n );\n\n validateTxParams(transactionMeta.txParams);\n\n updatedTransactionParams =\n this.#checkIfTransactionParamsUpdated(transactionMeta);\n\n const shouldSkipHistory = this.isHistoryDisabled || skipHistory;\n\n if (!shouldSkipHistory) {\n transactionMeta = updateTransactionHistory(\n transactionMeta,\n note ?? 'Transaction updated',\n );\n }\n state.transactions[index] = transactionMeta;\n });\n\n const transactionMeta = this.getTransaction(\n transactionId,\n ) as TransactionMeta;\n\n if (updatedTransactionParams.length > 0) {\n this.#onTransactionParamsUpdated(\n transactionMeta,\n updatedTransactionParams,\n );\n }\n\n return transactionMeta;\n }\n\n #checkIfTransactionParamsUpdated(newTransactionMeta: TransactionMeta) {\n const { id: transactionId, txParams: newParams } = newTransactionMeta;\n\n const originalParams = this.getTransaction(transactionId)?.txParams;\n\n if (!originalParams || isEqual(originalParams, newParams)) {\n return [];\n }\n\n const params = Object.keys(newParams) as (keyof TransactionParams)[];\n\n const updatedProperties = params.filter(\n (param) => newParams[param] !== originalParams[param],\n );\n\n log(\n 'Transaction parameters have been updated',\n transactionId,\n updatedProperties,\n originalParams,\n newParams,\n );\n\n return updatedProperties;\n }\n\n #onTransactionParamsUpdated(\n transactionMeta: TransactionMeta,\n updatedParams: (keyof TransactionParams)[],\n ) {\n if (\n (['to', 'value', 'data'] as const).some((param) =>\n updatedParams.includes(param),\n )\n ) {\n log('Updating simulation data due to transaction parameter update');\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.#updateSimulationData(transactionMeta);\n }\n }\n\n async #updateSimulationData(transactionMeta: TransactionMeta) {\n const { id: transactionId, chainId, txParams } = transactionMeta;\n const { from, to, value, data } = txParams;\n\n let simulationData: SimulationData = {\n error: {\n code: SimulationErrorCode.Disabled,\n message: 'Simulation disabled',\n },\n tokenBalanceChanges: [],\n };\n\n if (this.#isSimulationEnabled()) {\n this.#updateTransactionInternal(\n { transactionId, skipHistory: true },\n (txMeta) => {\n txMeta.simulationData = undefined;\n },\n );\n\n simulationData = await getSimulationData({\n chainId,\n from: from as Hex,\n to: to as Hex,\n value: value as Hex,\n data: data as Hex,\n });\n }\n\n const finalTransactionMeta = this.getTransaction(transactionId);\n\n /* istanbul ignore if */\n if (!finalTransactionMeta) {\n log(\n 'Cannot update simulation data as transaction not found',\n transactionId,\n simulationData,\n );\n\n return;\n }\n\n this.#updateTransactionInternal(\n {\n transactionId,\n note: 'TransactionController#updateSimulationData - Update simulation data',\n },\n (txMeta) => {\n txMeta.simulationData = simulationData;\n },\n );\n\n log('Updated simulation data', transactionId, simulationData);\n }\n\n #onGasFeePollerTransactionUpdate({\n transactionId,\n gasFeeEstimates,\n gasFeeEstimatesLoaded,\n layer1GasFee,\n }: {\n transactionId: string;\n gasFeeEstimates?: GasFeeEstimates;\n gasFeeEstimatesLoaded?: boolean;\n layer1GasFee?: Hex;\n }) {\n this.#updateTransactionInternal(\n { transactionId, skipHistory: true },\n (txMeta) => {\n if (gasFeeEstimates) {\n txMeta.gasFeeEstimates = gasFeeEstimates;\n }\n\n if (gasFeeEstimatesLoaded !== undefined) {\n txMeta.gasFeeEstimatesLoaded = gasFeeEstimatesLoaded;\n }\n\n if (layer1GasFee) {\n txMeta.layer1GasFee = layer1GasFee;\n }\n },\n );\n }\n\n #getNetworkClientId({\n networkClientId: requestNetworkClientId,\n chainId,\n }: {\n networkClientId?: NetworkClientId;\n chainId?: Hex;\n }) {\n const globalChainId = this.#getGlobalChainId();\n const globalNetworkClientId = this.#getGlobalNetworkClientId();\n\n if (requestNetworkClientId) {\n return requestNetworkClientId;\n }\n\n if (!chainId || chainId === globalChainId) {\n return globalNetworkClientId;\n }\n\n return this.messagingSystem.call(\n `NetworkController:findNetworkClientIdByChainId`,\n chainId,\n );\n }\n\n #getGlobalNetworkClientId() {\n return this.getNetworkState().selectedNetworkClientId;\n }\n\n #getGlobalChainId() {\n return this.messagingSystem.call(\n `NetworkController:getNetworkClientById`,\n this.getNetworkState().selectedNetworkClientId,\n ).configuration.chainId;\n }\n\n #isCustomNetwork(networkClientId?: NetworkClientId) {\n const globalNetworkClientId = this.#getGlobalNetworkClientId();\n\n if (!networkClientId || networkClientId === globalNetworkClientId) {\n return !isInfuraNetworkType(\n this.getNetworkState().selectedNetworkClientId,\n );\n }\n\n return (\n this.messagingSystem.call(\n `NetworkController:getNetworkClientById`,\n networkClientId,\n ).configuration.type === NetworkClientType.Custom\n );\n }\n\n #getSelectedAccount() {\n return this.messagingSystem.call('AccountsController:getSelectedAccount');\n }\n}\n"],"mappings":"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","names":["ApprovalState","transactionMeta"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-ULD4JC3Q.js.map b/node_modules/@metamask/transaction-controller/dist/chunk-ULD4JC3Q.js.map -deleted file mode 100644 -index d2b47f8..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-ULD4JC3Q.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/helpers/PendingTransactionTracker.ts"],"names":[],"mappings":"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","sourcesContent":["import { query } from '@metamask/controller-utils';\nimport type EthQuery from '@metamask/eth-query';\nimport type {\n BlockTracker,\n NetworkClientId,\n} from '@metamask/network-controller';\nimport EventEmitter from 'events';\nimport { cloneDeep, merge } from 'lodash';\n\nimport { createModuleLogger, projectLogger } from '../logger';\nimport type { TransactionMeta, TransactionReceipt } from '../types';\nimport { TransactionStatus, TransactionType } from '../types';\n\n/**\n * We wait this many blocks before emitting a 'transaction-dropped' event\n * This is because we could be talking to a node that is out of sync\n */\nconst DROPPED_BLOCK_COUNT = 3;\n\nconst RECEIPT_STATUS_SUCCESS = '0x1';\nconst RECEIPT_STATUS_FAILURE = '0x0';\nconst MAX_RETRY_BLOCK_DISTANCE = 50;\n\nconst KNOWN_TRANSACTION_ERRORS = [\n 'replacement transaction underpriced',\n 'known transaction',\n 'gas price too low to replace',\n 'transaction with the same hash was already imported',\n 'gateway timeout',\n 'nonce too low',\n];\n\nconst log = createModuleLogger(projectLogger, 'pending-transactions');\n\ntype SuccessfulTransactionReceipt = TransactionReceipt & {\n blockNumber: string;\n blockHash: string;\n};\n\ntype Events = {\n 'transaction-confirmed': [txMeta: TransactionMeta];\n 'transaction-dropped': [txMeta: TransactionMeta];\n 'transaction-failed': [txMeta: TransactionMeta, error: Error];\n 'transaction-updated': [txMeta: TransactionMeta, note: string];\n};\n\n// This interface was created before this ESLint rule was added.\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface PendingTransactionTrackerEventEmitter extends EventEmitter {\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n on(\n eventName: T,\n listener: (...args: Events[T]) => void,\n ): this;\n\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n emit(eventName: T, ...args: Events[T]): boolean;\n}\n\nexport class PendingTransactionTracker {\n hub: PendingTransactionTrackerEventEmitter;\n\n #approveTransaction: (transactionId: string) => Promise;\n\n #blockTracker: BlockTracker;\n\n #droppedBlockCountByHash: Map;\n\n #getChainId: () => string;\n\n #getEthQuery: (networkClientId?: NetworkClientId) => EthQuery;\n\n #getTransactions: () => TransactionMeta[];\n\n #isResubmitEnabled: () => boolean;\n\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n #listener: any;\n\n #getGlobalLock: () => Promise<() => void>;\n\n #publishTransaction: (ethQuery: EthQuery, rawTx: string) => Promise;\n\n #running: boolean;\n\n #beforeCheckPendingTransaction: (transactionMeta: TransactionMeta) => boolean;\n\n #beforePublish: (transactionMeta: TransactionMeta) => boolean;\n\n constructor({\n approveTransaction,\n blockTracker,\n getChainId,\n getEthQuery,\n getTransactions,\n isResubmitEnabled,\n getGlobalLock,\n publishTransaction,\n hooks,\n }: {\n approveTransaction: (transactionId: string) => Promise;\n blockTracker: BlockTracker;\n getChainId: () => string;\n getEthQuery: (networkClientId?: NetworkClientId) => EthQuery;\n getTransactions: () => TransactionMeta[];\n isResubmitEnabled?: () => boolean;\n getGlobalLock: () => Promise<() => void>;\n publishTransaction: (ethQuery: EthQuery, rawTx: string) => Promise;\n hooks?: {\n beforeCheckPendingTransaction?: (\n transactionMeta: TransactionMeta,\n ) => boolean;\n beforePublish?: (transactionMeta: TransactionMeta) => boolean;\n };\n }) {\n this.hub = new EventEmitter() as PendingTransactionTrackerEventEmitter;\n\n this.#approveTransaction = approveTransaction;\n this.#blockTracker = blockTracker;\n this.#droppedBlockCountByHash = new Map();\n this.#getChainId = getChainId;\n this.#getEthQuery = getEthQuery;\n this.#getTransactions = getTransactions;\n this.#isResubmitEnabled = isResubmitEnabled ?? (() => true);\n this.#listener = this.#onLatestBlock.bind(this);\n this.#getGlobalLock = getGlobalLock;\n this.#publishTransaction = publishTransaction;\n this.#running = false;\n this.#beforePublish = hooks?.beforePublish ?? (() => true);\n this.#beforeCheckPendingTransaction =\n hooks?.beforeCheckPendingTransaction ?? (() => true);\n }\n\n startIfPendingTransactions = () => {\n const pendingTransactions = this.#getPendingTransactions();\n\n if (pendingTransactions.length) {\n this.#start();\n } else {\n this.stop();\n }\n };\n\n /**\n * Force checks the network if the given transaction is confirmed and updates it's status.\n *\n * @param txMeta - The transaction to check\n */\n async forceCheckTransaction(txMeta: TransactionMeta) {\n const releaseLock = await this.#getGlobalLock();\n\n try {\n await this.#checkTransaction(txMeta);\n } catch (error) {\n /* istanbul ignore next */\n log('Failed to check transaction', error);\n } finally {\n releaseLock();\n }\n }\n\n #start() {\n if (this.#running) {\n return;\n }\n\n this.#blockTracker.on('latest', this.#listener);\n this.#running = true;\n\n log('Started polling');\n }\n\n stop() {\n if (!this.#running) {\n return;\n }\n\n this.#blockTracker.removeListener('latest', this.#listener);\n this.#running = false;\n\n log('Stopped polling');\n }\n\n async #onLatestBlock(latestBlockNumber: string) {\n const releaseLock = await this.#getGlobalLock();\n\n try {\n await this.#checkTransactions();\n } catch (error) {\n /* istanbul ignore next */\n log('Failed to check transactions', error);\n } finally {\n releaseLock();\n }\n\n try {\n await this.#resubmitTransactions(latestBlockNumber);\n } catch (error) {\n /* istanbul ignore next */\n log('Failed to resubmit transactions', error);\n }\n }\n\n async #checkTransactions() {\n log('Checking transactions');\n\n const pendingTransactions = this.#getPendingTransactions();\n\n if (!pendingTransactions.length) {\n log('No pending transactions to check');\n return;\n }\n\n log('Found pending transactions to check', {\n count: pendingTransactions.length,\n ids: pendingTransactions.map((tx) => tx.id),\n });\n\n await Promise.all(\n pendingTransactions.map((tx) => this.#checkTransaction(tx)),\n );\n }\n\n async #resubmitTransactions(latestBlockNumber: string) {\n if (!this.#isResubmitEnabled() || !this.#running) {\n return;\n }\n\n log('Resubmitting transactions');\n\n const pendingTransactions = this.#getPendingTransactions();\n\n if (!pendingTransactions.length) {\n log('No pending transactions to resubmit');\n return;\n }\n\n log('Found pending transactions to resubmit', {\n count: pendingTransactions.length,\n ids: pendingTransactions.map((tx) => tx.id),\n });\n\n for (const txMeta of pendingTransactions) {\n try {\n await this.#resubmitTransaction(txMeta, latestBlockNumber);\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n /* istanbul ignore next */\n const errorMessage =\n error.value?.message?.toLowerCase() || error.message.toLowerCase();\n\n if (this.#isKnownTransactionError(errorMessage)) {\n log('Ignoring known transaction error', errorMessage);\n return;\n }\n\n this.#warnTransaction(\n txMeta,\n error.message,\n 'There was an error when resubmitting this transaction.',\n );\n }\n }\n }\n\n #isKnownTransactionError(errorMessage: string) {\n return KNOWN_TRANSACTION_ERRORS.some((knownError) =>\n errorMessage.includes(knownError),\n );\n }\n\n async #resubmitTransaction(\n txMeta: TransactionMeta,\n latestBlockNumber: string,\n ) {\n if (!this.#isResubmitDue(txMeta, latestBlockNumber)) {\n return;\n }\n\n const { rawTx } = txMeta;\n\n if (!this.#beforePublish(txMeta)) {\n return;\n }\n\n if (!rawTx?.length) {\n log('Approving transaction as no raw value');\n await this.#approveTransaction(txMeta.id);\n return;\n }\n\n const ethQuery = this.#getEthQuery(txMeta.networkClientId);\n await this.#publishTransaction(ethQuery, rawTx);\n\n const retryCount = (txMeta.retryCount ?? 0) + 1;\n\n this.#updateTransaction(\n merge({}, txMeta, { retryCount }),\n 'PendingTransactionTracker:transaction-retry - Retry count increased',\n );\n }\n\n #isResubmitDue(txMeta: TransactionMeta, latestBlockNumber: string): boolean {\n const txMetaWithFirstRetryBlockNumber = cloneDeep(txMeta);\n\n if (!txMetaWithFirstRetryBlockNumber.firstRetryBlockNumber) {\n txMetaWithFirstRetryBlockNumber.firstRetryBlockNumber = latestBlockNumber;\n\n this.#updateTransaction(\n txMetaWithFirstRetryBlockNumber,\n 'PendingTransactionTracker:#isResubmitDue - First retry block number set',\n );\n }\n\n const { firstRetryBlockNumber } = txMetaWithFirstRetryBlockNumber;\n\n const blocksSinceFirstRetry =\n Number.parseInt(latestBlockNumber, 16) -\n Number.parseInt(firstRetryBlockNumber, 16);\n\n const retryCount = txMeta.retryCount || 0;\n\n // Exponential backoff to limit retries at publishing\n // Capped at ~15 minutes between retries\n const requiredBlocksSinceFirstRetry = Math.min(\n MAX_RETRY_BLOCK_DISTANCE,\n Math.pow(2, retryCount),\n );\n\n return blocksSinceFirstRetry >= requiredBlocksSinceFirstRetry;\n }\n\n async #checkTransaction(txMeta: TransactionMeta) {\n const { hash, id } = txMeta;\n\n if (!hash && this.#beforeCheckPendingTransaction(txMeta)) {\n const error = new Error(\n 'We had an error while submitting this transaction, please try again.',\n );\n\n error.name = 'NoTxHashError';\n\n this.#failTransaction(txMeta, error);\n\n return;\n }\n\n if (this.#isNonceTaken(txMeta)) {\n log('Nonce already taken', id);\n this.#dropTransaction(txMeta);\n return;\n }\n\n try {\n const receipt = await this.#getTransactionReceipt(hash);\n const isSuccess = receipt?.status === RECEIPT_STATUS_SUCCESS;\n const isFailure = receipt?.status === RECEIPT_STATUS_FAILURE;\n\n if (isFailure) {\n log('Transaction receipt has failed status');\n\n this.#failTransaction(\n txMeta,\n new Error('Transaction dropped or replaced'),\n );\n\n return;\n }\n\n const { blockNumber, blockHash } = receipt || {};\n\n if (isSuccess && blockNumber && blockHash) {\n await this.#onTransactionConfirmed(txMeta, {\n ...receipt,\n blockNumber,\n blockHash,\n });\n\n return;\n }\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n log('Failed to check transaction', id, error);\n\n this.#warnTransaction(\n txMeta,\n error.message,\n 'There was a problem loading this transaction.',\n );\n\n return;\n }\n\n if (await this.#isTransactionDropped(txMeta)) {\n this.#dropTransaction(txMeta);\n }\n }\n\n async #onTransactionConfirmed(\n txMeta: TransactionMeta,\n receipt: SuccessfulTransactionReceipt,\n ) {\n const { id } = txMeta;\n const { blockHash } = receipt;\n\n log('Transaction confirmed', id);\n\n const { baseFeePerGas, timestamp: blockTimestamp } =\n await this.#getBlockByHash(blockHash, false);\n\n const updatedTxMeta = cloneDeep(txMeta);\n updatedTxMeta.baseFeePerGas = baseFeePerGas;\n updatedTxMeta.blockTimestamp = blockTimestamp;\n updatedTxMeta.status = TransactionStatus.confirmed;\n updatedTxMeta.txParams = {\n ...updatedTxMeta.txParams,\n gasUsed: receipt.gasUsed,\n };\n updatedTxMeta.txReceipt = receipt;\n updatedTxMeta.verifiedOnBlockchain = true;\n\n this.#updateTransaction(\n updatedTxMeta,\n 'PendingTransactionTracker:#onTransactionConfirmed - Transaction confirmed',\n );\n\n this.hub.emit('transaction-confirmed', updatedTxMeta);\n }\n\n async #isTransactionDropped(txMeta: TransactionMeta) {\n const {\n hash,\n id,\n txParams: { nonce, from },\n } = txMeta;\n\n /* istanbul ignore next */\n if (!nonce || !hash) {\n return false;\n }\n\n const networkNextNonceHex = await this.#getNetworkTransactionCount(from);\n const networkNextNonceNumber = parseInt(networkNextNonceHex, 16);\n const nonceNumber = parseInt(nonce, 16);\n\n if (nonceNumber >= networkNextNonceNumber) {\n return false;\n }\n\n let droppedBlockCount = this.#droppedBlockCountByHash.get(hash);\n\n if (droppedBlockCount === undefined) {\n droppedBlockCount = 0;\n this.#droppedBlockCountByHash.set(hash, droppedBlockCount);\n }\n\n if (droppedBlockCount < DROPPED_BLOCK_COUNT) {\n log('Incrementing dropped block count', { id, droppedBlockCount });\n this.#droppedBlockCountByHash.set(hash, droppedBlockCount + 1);\n return false;\n }\n\n log('Hit dropped block count', id);\n\n this.#droppedBlockCountByHash.delete(hash);\n return true;\n }\n\n #isNonceTaken(txMeta: TransactionMeta): boolean {\n const { id, txParams } = txMeta;\n\n return this.#getCurrentChainTransactions().some(\n (tx) =>\n tx.id !== id &&\n tx.txParams.from === txParams.from &&\n tx.status === TransactionStatus.confirmed &&\n tx.txParams.nonce === txParams.nonce &&\n tx.type !== TransactionType.incoming,\n );\n }\n\n #getPendingTransactions(): TransactionMeta[] {\n return this.#getCurrentChainTransactions().filter(\n (tx) =>\n tx.status === TransactionStatus.submitted &&\n !tx.verifiedOnBlockchain &&\n !tx.isUserOperation,\n );\n }\n\n #warnTransaction(txMeta: TransactionMeta, error: string, message: string) {\n this.#updateTransaction(\n {\n ...txMeta,\n warning: { error, message },\n },\n 'PendingTransactionTracker:#warnTransaction - Warning added',\n );\n }\n\n #failTransaction(txMeta: TransactionMeta, error: Error) {\n log('Transaction failed', txMeta.id, error);\n this.hub.emit('transaction-failed', txMeta, error);\n }\n\n #dropTransaction(txMeta: TransactionMeta) {\n log('Transaction dropped', txMeta.id);\n this.hub.emit('transaction-dropped', txMeta);\n }\n\n #updateTransaction(txMeta: TransactionMeta, note: string) {\n this.hub.emit('transaction-updated', txMeta, note);\n }\n\n async #getTransactionReceipt(\n txHash?: string,\n ): Promise {\n return await query(this.#getEthQuery(), 'getTransactionReceipt', [txHash]);\n }\n\n async #getBlockByHash(\n blockHash: string,\n includeTransactionDetails: boolean,\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): Promise {\n return await query(this.#getEthQuery(), 'getBlockByHash', [\n blockHash,\n includeTransactionDetails,\n ]);\n }\n\n async #getNetworkTransactionCount(address: string): Promise {\n return await query(this.#getEthQuery(), 'getTransactionCount', [address]);\n }\n\n #getCurrentChainTransactions(): TransactionMeta[] {\n const currentChainId = this.#getChainId();\n\n return this.#getTransactions().filter(\n (tx) => tx.chainId === currentChainId,\n );\n }\n}\n"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-GNAL5HC2.mjs b/node_modules/@metamask/transaction-controller/dist/chunk-UNXUIJLG.mjs -similarity index 99% -rename from node_modules/@metamask/transaction-controller/dist/chunk-GNAL5HC2.mjs -rename to node_modules/@metamask/transaction-controller/dist/chunk-UNXUIJLG.mjs -index 9cb873d..5d0d344 100644 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-GNAL5HC2.mjs -+++ b/node_modules/@metamask/transaction-controller/dist/chunk-UNXUIJLG.mjs -@@ -1,6 +1,6 @@ - import { - validateIfTransactionUnapproved --} from "./chunk-Q56I5ONX.mjs"; -+} from "./chunk-F7IJZOCR.mjs"; - import { - CHAIN_IDS - } from "./chunk-O6ZZVIFH.mjs"; -@@ -254,4 +254,4 @@ export { - updateSwapsTransaction, - updatePostTransactionBalance - }; --//# sourceMappingURL=chunk-GNAL5HC2.mjs.map -\ No newline at end of file -+//# sourceMappingURL=chunk-UNXUIJLG.mjs.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-UQQWZT6C.mjs.map b/node_modules/@metamask/transaction-controller/dist/chunk-UQQWZT6C.mjs.map -deleted file mode 100644 -index bfaab44..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-UQQWZT6C.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/logger.ts"],"sourcesContent":["/* istanbul ignore file */\n\nimport { createProjectLogger, createModuleLogger } from '@metamask/utils';\n\nexport const projectLogger = createProjectLogger('transaction-controller');\n\nexport const incomingTransactionsLogger = createModuleLogger(\n projectLogger,\n 'incoming-transactions',\n);\n\nexport { createModuleLogger };\n"],"mappings":";AAEA,SAAS,qBAAqB,0BAA0B;AAEjD,IAAM,gBAAgB,oBAAoB,wBAAwB;AAElE,IAAM,6BAA6B;AAAA,EACxC;AAAA,EACA;AACF;","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-V72C4MCR.js.map b/node_modules/@metamask/transaction-controller/dist/chunk-V72C4MCR.js.map -deleted file mode 100644 -index 76f62ea..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-V72C4MCR.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/utils/gas.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\n\nimport {\n BNToHex,\n fractionBN,\n hexToBN,\n query,\n} from '@metamask/controller-utils';\nimport type EthQuery from '@metamask/eth-query';\nimport type { Hex } from '@metamask/utils';\nimport { add0x, createModuleLogger } from '@metamask/utils';\n\nimport { GAS_BUFFER_CHAIN_OVERRIDES } from '../constants';\nimport { projectLogger } from '../logger';\nimport type { TransactionMeta, TransactionParams } from '../types';\n\nexport type UpdateGasRequest = {\n ethQuery: EthQuery;\n isCustomNetwork: boolean;\n chainId: Hex;\n txMeta: TransactionMeta;\n};\n\nexport const log = createModuleLogger(projectLogger, 'gas');\n\nexport const FIXED_GAS = '0x5208';\nexport const DEFAULT_GAS_MULTIPLIER = 1.5;\n\nexport async function updateGas(request: UpdateGasRequest) {\n const { txMeta } = request;\n const initialParams = { ...txMeta.txParams };\n\n const [gas, simulationFails] = await getGas(request);\n\n txMeta.txParams.gas = gas;\n txMeta.simulationFails = simulationFails;\n\n if (!initialParams.gas) {\n txMeta.originalGasEstimate = txMeta.txParams.gas;\n }\n\n if (!txMeta.defaultGasEstimates) {\n txMeta.defaultGasEstimates = {};\n }\n\n txMeta.defaultGasEstimates.gas = txMeta.txParams.gas;\n}\n\nexport async function estimateGas(\n txParams: TransactionParams,\n ethQuery: EthQuery,\n) {\n const request = { ...txParams };\n const { data, value } = request;\n\n const { gasLimit: gasLimitHex, number: blockNumber } = await getLatestBlock(\n ethQuery,\n );\n\n const gasLimitBN = hexToBN(gasLimitHex);\n\n request.data = data ? add0x(data) : data;\n request.gas = BNToHex(fractionBN(gasLimitBN, 19, 20));\n request.value = value || '0x0';\n\n let estimatedGas = request.gas;\n let simulationFails;\n\n try {\n estimatedGas = await query(ethQuery, 'estimateGas', [request]);\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n simulationFails = {\n reason: error.message,\n errorKey: error.errorKey,\n debug: {\n blockNumber,\n blockGasLimit: gasLimitHex,\n },\n };\n\n log('Estimation failed', { ...simulationFails, fallback: estimateGas });\n }\n\n return {\n blockGasLimit: gasLimitHex,\n estimatedGas,\n simulationFails,\n };\n}\n\nexport function addGasBuffer(\n estimatedGas: string,\n blockGasLimit: string,\n multiplier: number,\n) {\n const estimatedGasBN = hexToBN(estimatedGas);\n const maxGasBN = hexToBN(blockGasLimit).muln(0.9);\n const paddedGasBN = estimatedGasBN.muln(multiplier);\n\n if (estimatedGasBN.gt(maxGasBN)) {\n const estimatedGasHex = add0x(estimatedGas);\n log('Using estimated value', estimatedGasHex);\n return estimatedGasHex;\n }\n\n if (paddedGasBN.lt(maxGasBN)) {\n const paddedHex = add0x(BNToHex(paddedGasBN));\n log('Using padded estimate', paddedHex, multiplier);\n return paddedHex;\n }\n\n const maxHex = add0x(BNToHex(maxGasBN));\n log('Using 90% of block gas limit', maxHex);\n return maxHex;\n}\n\nasync function getGas(\n request: UpdateGasRequest,\n): Promise<[string, TransactionMeta['simulationFails']?]> {\n const { isCustomNetwork, chainId, txMeta } = request;\n\n if (txMeta.txParams.gas) {\n log('Using value from request', txMeta.txParams.gas);\n return [txMeta.txParams.gas];\n }\n\n if (await requiresFixedGas(request)) {\n log('Using fixed value', FIXED_GAS);\n return [FIXED_GAS];\n }\n\n const { blockGasLimit, estimatedGas, simulationFails } = await estimateGas(\n txMeta.txParams,\n request.ethQuery,\n );\n\n if (isCustomNetwork) {\n log('Using original estimate as custom network');\n return [estimatedGas, simulationFails];\n }\n\n const bufferMultiplier =\n GAS_BUFFER_CHAIN_OVERRIDES[\n chainId as keyof typeof GAS_BUFFER_CHAIN_OVERRIDES\n ] ?? DEFAULT_GAS_MULTIPLIER;\n\n const bufferedGas = addGasBuffer(\n estimatedGas,\n blockGasLimit,\n bufferMultiplier,\n );\n\n return [bufferedGas, simulationFails];\n}\n\nasync function requiresFixedGas({\n ethQuery,\n txMeta,\n isCustomNetwork,\n}: UpdateGasRequest): Promise {\n const {\n txParams: { to, data },\n } = txMeta;\n\n if (isCustomNetwork || !to || data) {\n return false;\n }\n\n const code = await getCode(ethQuery, to);\n\n return !code || code === '0x';\n}\n\nasync function getCode(\n ethQuery: EthQuery,\n address: string,\n): Promise {\n return await query(ethQuery, 'getCode', [address]);\n}\n\nasync function getLatestBlock(\n ethQuery: EthQuery,\n): Promise<{ gasLimit: string; number: string }> {\n return await query(ethQuery, 'getBlockByNumber', ['latest', false]);\n}\n"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-VEVVBHP3.mjs.map b/node_modules/@metamask/transaction-controller/dist/chunk-VEVVBHP3.mjs.map -deleted file mode 100644 -index 0881f0f..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-VEVVBHP3.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/gas-flows/OptimismLayer1GasFeeFlow.ts"],"sourcesContent":["import { type Hex } from '@metamask/utils';\n\nimport { CHAIN_IDS } from '../constants';\nimport type { TransactionMeta } from '../types';\nimport { OracleLayer1GasFeeFlow } from './OracleLayer1GasFeeFlow';\n\nconst OPTIMISM_STACK_CHAIN_IDS: Hex[] = [\n CHAIN_IDS.OPTIMISM,\n CHAIN_IDS.OPTIMISM_TESTNET,\n CHAIN_IDS.BASE,\n CHAIN_IDS.BASE_TESTNET,\n CHAIN_IDS.OPBNB,\n CHAIN_IDS.OPBNB_TESTNET,\n CHAIN_IDS.ZORA,\n];\n\n// BlockExplorer link: https://optimistic.etherscan.io/address/0x420000000000000000000000000000000000000f#code\nconst OPTIMISM_GAS_PRICE_ORACLE_ADDRESS =\n '0x420000000000000000000000000000000000000F';\n\n/**\n * Optimism layer 1 gas fee flow that obtains gas fee estimate using an oracle contract.\n */\nexport class OptimismLayer1GasFeeFlow extends OracleLayer1GasFeeFlow {\n constructor() {\n super(OPTIMISM_GAS_PRICE_ORACLE_ADDRESS);\n }\n\n matchesTransaction(transactionMeta: TransactionMeta): boolean {\n return OPTIMISM_STACK_CHAIN_IDS.includes(transactionMeta.chainId);\n }\n}\n"],"mappings":";;;;;;;;AAMA,IAAM,2BAAkC;AAAA,EACtC,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AACZ;AAGA,IAAM,oCACJ;AAKK,IAAM,2BAAN,cAAuC,uBAAuB;AAAA,EACnE,cAAc;AACZ,UAAM,iCAAiC;AAAA,EACzC;AAAA,EAEA,mBAAmB,iBAA2C;AAC5D,WAAO,yBAAyB,SAAS,gBAAgB,OAAO;AAAA,EAClE;AACF;","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-VXNPVIYL.mjs.map b/node_modules/@metamask/transaction-controller/dist/chunk-VXNPVIYL.mjs.map -deleted file mode 100644 -index 1380bb8..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-VXNPVIYL.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/utils/gas-fees.ts"],"sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\n\nimport {\n ORIGIN_METAMASK,\n gweiDecToWEIBN,\n query,\n toHex,\n} from '@metamask/controller-utils';\nimport type EthQuery from '@metamask/eth-query';\nimport type {\n FetchGasFeeEstimateOptions,\n GasFeeState,\n} from '@metamask/gas-fee-controller';\nimport type { Hex } from '@metamask/utils';\nimport { add0x, createModuleLogger } from '@metamask/utils';\n\nimport { projectLogger } from '../logger';\nimport type {\n SavedGasFees,\n TransactionParams,\n TransactionMeta,\n TransactionType,\n GasFeeFlow,\n} from '../types';\nimport { GasFeeEstimateType, UserFeeLevel } from '../types';\nimport { getGasFeeFlow } from './gas-flow';\nimport { SWAP_TRANSACTION_TYPES } from './swaps';\n\nexport type UpdateGasFeesRequest = {\n eip1559: boolean;\n ethQuery: EthQuery;\n gasFeeFlows: GasFeeFlow[];\n getGasFeeEstimates: (\n options: FetchGasFeeEstimateOptions,\n ) => Promise;\n getSavedGasFees: (chainId: Hex) => SavedGasFees | undefined;\n txMeta: TransactionMeta;\n};\n\nexport type GetGasFeeRequest = UpdateGasFeesRequest & {\n initialParams: TransactionParams;\n savedGasFees?: SavedGasFees;\n suggestedGasFees: SuggestedGasFees;\n};\n\ntype SuggestedGasFees = {\n maxFeePerGas?: string;\n maxPriorityFeePerGas?: string;\n gasPrice?: string;\n};\n\nconst log = createModuleLogger(projectLogger, 'gas-fees');\n\nexport async function updateGasFees(request: UpdateGasFeesRequest) {\n const { txMeta } = request;\n const initialParams = { ...txMeta.txParams };\n\n const isSwap = SWAP_TRANSACTION_TYPES.includes(\n txMeta.type as TransactionType,\n );\n const savedGasFees = isSwap\n ? undefined\n : request.getSavedGasFees(txMeta.chainId);\n\n const suggestedGasFees = await getSuggestedGasFees(request);\n\n log('Suggested gas fees', suggestedGasFees);\n\n const getGasFeeRequest: GetGasFeeRequest = {\n ...request,\n initialParams,\n savedGasFees,\n suggestedGasFees,\n };\n\n txMeta.txParams.maxFeePerGas = getMaxFeePerGas(getGasFeeRequest);\n\n txMeta.txParams.maxPriorityFeePerGas =\n getMaxPriorityFeePerGas(getGasFeeRequest);\n\n txMeta.txParams.gasPrice = getGasPrice(getGasFeeRequest);\n txMeta.userFeeLevel = getUserFeeLevel(getGasFeeRequest);\n\n log('Updated gas fee properties', {\n maxFeePerGas: txMeta.txParams.maxFeePerGas,\n maxPriorityFeePerGas: txMeta.txParams.maxPriorityFeePerGas,\n gasPrice: txMeta.txParams.gasPrice,\n });\n\n if (txMeta.txParams.maxFeePerGas || txMeta.txParams.maxPriorityFeePerGas) {\n delete txMeta.txParams.gasPrice;\n }\n\n if (txMeta.txParams.gasPrice) {\n delete txMeta.txParams.maxFeePerGas;\n delete txMeta.txParams.maxPriorityFeePerGas;\n }\n\n updateDefaultGasEstimates(txMeta);\n}\n\nexport function gweiDecimalToWeiHex(value: string) {\n return toHex(gweiDecToWEIBN(value));\n}\n\nfunction getMaxFeePerGas(request: GetGasFeeRequest): string | undefined {\n const { savedGasFees, eip1559, initialParams, suggestedGasFees } = request;\n\n if (!eip1559) {\n return undefined;\n }\n\n if (savedGasFees) {\n const maxFeePerGas = gweiDecimalToWeiHex(savedGasFees.maxBaseFee as string);\n log('Using maxFeePerGas from savedGasFees', maxFeePerGas);\n return maxFeePerGas;\n }\n\n if (initialParams.maxFeePerGas) {\n log('Using maxFeePerGas from request', initialParams.maxFeePerGas);\n return initialParams.maxFeePerGas;\n }\n\n if (initialParams.gasPrice && !initialParams.maxPriorityFeePerGas) {\n log(\n 'Setting maxFeePerGas to gasPrice from request',\n initialParams.gasPrice,\n );\n return initialParams.gasPrice;\n }\n\n if (suggestedGasFees.maxFeePerGas) {\n log('Using suggested maxFeePerGas', suggestedGasFees.maxFeePerGas);\n return suggestedGasFees.maxFeePerGas;\n }\n\n if (suggestedGasFees.gasPrice) {\n log(\n 'Setting maxFeePerGas to suggested gasPrice',\n suggestedGasFees.gasPrice,\n );\n return suggestedGasFees.gasPrice;\n }\n\n log('maxFeePerGas not set');\n return undefined;\n}\n\nfunction getMaxPriorityFeePerGas(\n request: GetGasFeeRequest,\n): string | undefined {\n const { eip1559, initialParams, savedGasFees, suggestedGasFees, txMeta } =\n request;\n\n if (!eip1559) {\n return undefined;\n }\n\n if (savedGasFees) {\n const maxPriorityFeePerGas = gweiDecimalToWeiHex(savedGasFees.priorityFee);\n log(\n 'Using maxPriorityFeePerGas from savedGasFees.priorityFee',\n maxPriorityFeePerGas,\n );\n return maxPriorityFeePerGas;\n }\n\n if (initialParams.maxPriorityFeePerGas) {\n log(\n 'Using maxPriorityFeePerGas from request',\n initialParams.maxPriorityFeePerGas,\n );\n return initialParams.maxPriorityFeePerGas;\n }\n\n if (initialParams.gasPrice && !initialParams.maxFeePerGas) {\n log(\n 'Setting maxPriorityFeePerGas to gasPrice from request',\n initialParams.gasPrice,\n );\n return initialParams.gasPrice;\n }\n\n if (suggestedGasFees.maxPriorityFeePerGas) {\n log(\n 'Using suggested maxPriorityFeePerGas',\n suggestedGasFees.maxPriorityFeePerGas,\n );\n return suggestedGasFees.maxPriorityFeePerGas;\n }\n\n if (txMeta.txParams.maxFeePerGas) {\n log(\n 'Setting maxPriorityFeePerGas to maxFeePerGas',\n txMeta.txParams.maxFeePerGas,\n );\n return txMeta.txParams.maxFeePerGas;\n }\n\n log('maxPriorityFeePerGas not set');\n return undefined;\n}\n\nfunction getGasPrice(request: GetGasFeeRequest): string | undefined {\n const { eip1559, initialParams, suggestedGasFees } = request;\n\n if (eip1559) {\n return undefined;\n }\n\n if (initialParams.gasPrice) {\n log('Using gasPrice from request', initialParams.gasPrice);\n return initialParams.gasPrice;\n }\n\n if (suggestedGasFees.maxFeePerGas) {\n log('Using suggested maxFeePerGas', suggestedGasFees.maxFeePerGas);\n return suggestedGasFees.maxFeePerGas;\n }\n\n if (suggestedGasFees.gasPrice) {\n log('Using suggested gasPrice', suggestedGasFees.gasPrice);\n return suggestedGasFees.gasPrice;\n }\n\n log('gasPrice not set');\n return undefined;\n}\n\nfunction getUserFeeLevel(request: GetGasFeeRequest): UserFeeLevel | undefined {\n const { eip1559, initialParams, savedGasFees, suggestedGasFees, txMeta } =\n request;\n\n if (!eip1559) {\n return undefined;\n }\n\n if (savedGasFees) {\n return UserFeeLevel.CUSTOM;\n }\n\n if (\n !initialParams.maxFeePerGas &&\n !initialParams.maxPriorityFeePerGas &&\n initialParams.gasPrice\n ) {\n return txMeta.origin === ORIGIN_METAMASK\n ? UserFeeLevel.CUSTOM\n : UserFeeLevel.DAPP_SUGGESTED;\n }\n\n if (\n !initialParams.maxFeePerGas &&\n !initialParams.maxPriorityFeePerGas &&\n suggestedGasFees.maxFeePerGas &&\n suggestedGasFees.maxPriorityFeePerGas\n ) {\n return UserFeeLevel.MEDIUM;\n }\n\n if (txMeta.origin === ORIGIN_METAMASK) {\n return UserFeeLevel.MEDIUM;\n }\n\n return UserFeeLevel.DAPP_SUGGESTED;\n}\n\nfunction updateDefaultGasEstimates(txMeta: TransactionMeta) {\n if (!txMeta.defaultGasEstimates) {\n txMeta.defaultGasEstimates = {};\n }\n\n txMeta.defaultGasEstimates.maxFeePerGas = txMeta.txParams.maxFeePerGas;\n\n txMeta.defaultGasEstimates.maxPriorityFeePerGas =\n txMeta.txParams.maxPriorityFeePerGas;\n\n txMeta.defaultGasEstimates.gasPrice = txMeta.txParams.gasPrice;\n txMeta.defaultGasEstimates.estimateType = txMeta.userFeeLevel;\n}\n\nasync function getSuggestedGasFees(\n request: UpdateGasFeesRequest,\n): Promise {\n const { eip1559, ethQuery, gasFeeFlows, getGasFeeEstimates, txMeta } =\n request;\n\n const { networkClientId } = txMeta;\n\n if (\n (!eip1559 && txMeta.txParams.gasPrice) ||\n (eip1559 &&\n txMeta.txParams.maxFeePerGas &&\n txMeta.txParams.maxPriorityFeePerGas)\n ) {\n return {};\n }\n\n const gasFeeFlow = getGasFeeFlow(txMeta, gasFeeFlows) as GasFeeFlow;\n\n try {\n const gasFeeControllerData = await getGasFeeEstimates({ networkClientId });\n\n const response = await gasFeeFlow.getGasFees({\n ethQuery,\n gasFeeControllerData,\n transactionMeta: txMeta,\n });\n\n const gasFeeEstimateType = response.estimates?.type;\n\n switch (gasFeeEstimateType) {\n case GasFeeEstimateType.FeeMarket:\n return response.estimates.medium;\n case GasFeeEstimateType.Legacy:\n return {\n gasPrice: response.estimates.medium,\n };\n case GasFeeEstimateType.GasPrice:\n return { gasPrice: response.estimates.gasPrice };\n default:\n throw new Error(\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `Unsupported gas fee estimate type returned from flow: ${gasFeeEstimateType}`,\n );\n }\n } catch (error) {\n log('Failed to get suggested gas fees', error);\n }\n\n const gasPriceDecimal = (await query(ethQuery, 'gasPrice')) as number;\n\n const gasPrice = gasPriceDecimal\n ? add0x(gasPriceDecimal.toString(16))\n : undefined;\n\n return { gasPrice };\n}\n"],"mappings":"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","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-76FONEDA.js b/node_modules/@metamask/transaction-controller/dist/chunk-WCSGEGPW.js -similarity index 89% -rename from node_modules/@metamask/transaction-controller/dist/chunk-76FONEDA.js -rename to node_modules/@metamask/transaction-controller/dist/chunk-WCSGEGPW.js -index 5ea273a..2a06fa6 100644 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-76FONEDA.js -+++ b/node_modules/@metamask/transaction-controller/dist/chunk-WCSGEGPW.js -@@ -1,6 +1,6 @@ - "use strict";Object.defineProperty(exports, "__esModule", {value: true}); - --var _chunkAYTU4HU5js = require('./chunk-AYTU4HU5.js'); -+var _chunkM3VM35IDjs = require('./chunk-M3VM35ID.js'); - - // src/utils/gas-flow.ts - var _controllerutils = require('@metamask/controller-utils'); -@@ -15,7 +15,7 @@ function mergeGasFeeEstimates({ - }) { - const transactionEstimateType = transactionGasFeeEstimates.type; - if (transactionEstimateType === "fee-market" /* FeeMarket */) { -- return Object.values(_chunkAYTU4HU5js.GasFeeEstimateLevel).reduce( -+ return Object.values(_chunkM3VM35IDjs.GasFeeEstimateLevel).reduce( - (result, level) => ({ - ...result, - [level]: mergeFeeMarketEstimate( -@@ -27,7 +27,7 @@ function mergeGasFeeEstimates({ - ); - } - if (transactionEstimateType === "legacy" /* Legacy */) { -- return Object.values(_chunkAYTU4HU5js.GasFeeEstimateLevel).reduce( -+ return Object.values(_chunkM3VM35IDjs.GasFeeEstimateLevel).reduce( - (result, level) => ({ - ...result, - [level]: getLegacyEstimate(transactionGasFeeEstimates, level) -@@ -64,4 +64,4 @@ function getGasPriceEstimate(transactionGasFeeEstimate) { - - - exports.getGasFeeFlow = getGasFeeFlow; exports.mergeGasFeeEstimates = mergeGasFeeEstimates; --//# sourceMappingURL=chunk-76FONEDA.js.map -\ No newline at end of file -+//# sourceMappingURL=chunk-WCSGEGPW.js.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-WR5F34OW.js.map b/node_modules/@metamask/transaction-controller/dist/chunk-WR5F34OW.js.map -deleted file mode 100644 -index a5a36e3..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-WR5F34OW.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/gas-flows/ScrollLayer1GasFeeFlow.ts"],"names":[],"mappings":";;;;;;;;AAMA,IAAM,mBAA0B,CAAC,UAAU,QAAQ,UAAU,cAAc;AAG3E,IAAM,kCACJ;AAKK,IAAM,yBAAN,cAAqC,uBAAuB;AAAA,EACjE,cAAc;AACZ,UAAM,iCAAiC,IAAI;AAAA,EAC7C;AAAA,EAEA,mBAAmB,iBAA2C;AAC5D,WAAO,iBAAiB,SAAS,gBAAgB,OAAO;AAAA,EAC1D;AACF","sourcesContent":["import { type Hex } from '@metamask/utils';\n\nimport { CHAIN_IDS } from '../constants';\nimport type { TransactionMeta } from '../types';\nimport { OracleLayer1GasFeeFlow } from './OracleLayer1GasFeeFlow';\n\nconst SCROLL_CHAIN_IDS: Hex[] = [CHAIN_IDS.SCROLL, CHAIN_IDS.SCROLL_SEPOLIA];\n\n// BlockExplorer link: https://scrollscan.com/address/0x5300000000000000000000000000000000000002#code\nconst SCROLL_GAS_PRICE_ORACLE_ADDRESS =\n '0x5300000000000000000000000000000000000002';\n\n/**\n * Scroll layer 1 gas fee flow that obtains gas fee estimate using an oracle contract.\n */\nexport class ScrollLayer1GasFeeFlow extends OracleLayer1GasFeeFlow {\n constructor() {\n super(SCROLL_GAS_PRICE_ORACLE_ADDRESS, true);\n }\n\n matchesTransaction(transactionMeta: TransactionMeta): boolean {\n return SCROLL_CHAIN_IDS.includes(transactionMeta.chainId);\n }\n}\n"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-XGRAHX6T.mjs.map b/node_modules/@metamask/transaction-controller/dist/chunk-XGRAHX6T.mjs.map -deleted file mode 100644 -index 1d80dc6..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-XGRAHX6T.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/utils/history.ts"],"sourcesContent":["import jsonDiffer from 'fast-json-patch';\nimport { cloneDeep, merge } from 'lodash';\n\nimport type {\n TransactionHistory,\n TransactionHistoryEntry,\n TransactionMeta,\n} from '../types';\n\n/**\n * Build a new version of the provided transaction with an initial history\n * entry, which is just a snapshot of the transaction.\n *\n * @param transactionMeta - TransactionMeta to add initial history snapshot to.\n * @returns A copy of `transactionMeta` with a new `history` property.\n */\nexport function addInitialHistorySnapshot(\n transactionMeta: TransactionMeta,\n): TransactionMeta {\n const snapshot = snapshotFromTransactionMeta(transactionMeta);\n return merge({}, transactionMeta, { history: [snapshot] });\n}\n\n/**\n * Builds a new version of the transaction with a new history entry if\n * it has a `history` property, or just returns the transaction.\n *\n * @param transactionMeta - TransactionMeta to add history entry to.\n * @param note - Note to add to history entry.\n * @returns A copy of `transactionMeta` with a new `history` entry if it has an\n * existing non-empty `history` array.\n */\nexport function updateTransactionHistory(\n transactionMeta: TransactionMeta,\n note: string,\n): TransactionMeta {\n if (!transactionMeta.history) {\n return transactionMeta;\n }\n\n const currentState = snapshotFromTransactionMeta(transactionMeta);\n const previousState = replayHistory(transactionMeta.history);\n const historyEntry = generateHistoryEntry(previousState, currentState, note);\n\n if (historyEntry.length > 0) {\n return merge({}, transactionMeta, {\n history: [...transactionMeta.history, historyEntry],\n });\n }\n return transactionMeta;\n}\n\n/**\n * Generates a history entry from the previous and new transaction metadata.\n *\n * @param previousState - The previous transaction metadata.\n * @param currentState - The new transaction metadata.\n * @param note - A note for the transaction metada update.\n * @returns An array of history operation.\n */\nfunction generateHistoryEntry(\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n previousState: any,\n currentState: TransactionMeta,\n note: string,\n): TransactionHistoryEntry {\n const historyOperationsEntry = jsonDiffer.compare(\n previousState,\n currentState,\n ) as TransactionHistoryEntry;\n // Add a note to the first operation, since it breaks if we append it to the entry\n if (historyOperationsEntry[0]) {\n if (note) {\n historyOperationsEntry[0].note = note;\n }\n historyOperationsEntry[0].timestamp = Date.now();\n }\n return historyOperationsEntry;\n}\n\n/**\n * Recovers previous transactionMeta from passed history array.\n *\n * @param transactionHistory - The transaction metadata to replay.\n * @returns The transaction metadata.\n */\nfunction replayHistory(\n transactionHistory: TransactionHistory,\n): TransactionMeta {\n const shortHistory = cloneDeep(transactionHistory);\n return shortHistory.reduce(\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (val, entry: any) => jsonDiffer.applyPatch(val, entry).newDocument,\n ) as TransactionMeta;\n}\n\n/**\n * Clone the transaction meta data without the history property.\n *\n * @param transactionMeta - The transaction metadata to snapshot.\n * @returns A deep clone of transaction metadata without history property.\n */\nfunction snapshotFromTransactionMeta(\n transactionMeta: TransactionMeta,\n): TransactionMeta {\n const snapshot = { ...transactionMeta };\n delete snapshot.history;\n return cloneDeep(snapshot);\n}\n"],"mappings":";AAAA,OAAO,gBAAgB;AACvB,SAAS,WAAW,aAAa;AAe1B,SAAS,0BACd,iBACiB;AACjB,QAAM,WAAW,4BAA4B,eAAe;AAC5D,SAAO,MAAM,CAAC,GAAG,iBAAiB,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC;AAC3D;AAWO,SAAS,yBACd,iBACA,MACiB;AACjB,MAAI,CAAC,gBAAgB,SAAS;AAC5B,WAAO;AAAA,EACT;AAEA,QAAM,eAAe,4BAA4B,eAAe;AAChE,QAAM,gBAAgB,cAAc,gBAAgB,OAAO;AAC3D,QAAM,eAAe,qBAAqB,eAAe,cAAc,IAAI;AAE3E,MAAI,aAAa,SAAS,GAAG;AAC3B,WAAO,MAAM,CAAC,GAAG,iBAAiB;AAAA,MAChC,SAAS,CAAC,GAAG,gBAAgB,SAAS,YAAY;AAAA,IACpD,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAUA,SAAS,qBAGP,eACA,cACA,MACyB;AACzB,QAAM,yBAAyB,WAAW;AAAA,IACxC;AAAA,IACA;AAAA,EACF;AAEA,MAAI,uBAAuB,CAAC,GAAG;AAC7B,QAAI,MAAM;AACR,6BAAuB,CAAC,EAAE,OAAO;AAAA,IACnC;AACA,2BAAuB,CAAC,EAAE,YAAY,KAAK,IAAI;AAAA,EACjD;AACA,SAAO;AACT;AAQA,SAAS,cACP,oBACiB;AACjB,QAAM,eAAe,UAAU,kBAAkB;AACjD,SAAO,aAAa;AAAA;AAAA;AAAA,IAGlB,CAAC,KAAK,UAAe,WAAW,WAAW,KAAK,KAAK,EAAE;AAAA,EACzD;AACF;AAQA,SAAS,4BACP,iBACiB;AACjB,QAAM,WAAW,EAAE,GAAG,gBAAgB;AACtC,SAAO,SAAS;AAChB,SAAO,UAAU,QAAQ;AAC3B;","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-XUI43LEZ.mjs.map b/node_modules/@metamask/transaction-controller/dist/chunk-XUI43LEZ.mjs.map -deleted file mode 100644 -index 84c51b2..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-XUI43LEZ.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-XVYXRCRL.js.map b/node_modules/@metamask/transaction-controller/dist/chunk-XVYXRCRL.js.map -deleted file mode 100644 -index c9da047..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-XVYXRCRL.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/utils/etherscan.ts"],"names":[],"mappings":";;;;;;;;AAAA,SAAS,mBAAmB;AAmF5B,eAAsB,2BAA2B;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEE;AACA,SAAO,MAAM,kBAAkB,UAAU;AAAA,IACvC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAYA,eAAsB,gCAAgC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEE;AACA,SAAO,MAAM,kBAAkB,WAAW;AAAA,IACxC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAeA,eAAe,kBACb,QACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAM0C;AAC1C,QAAM,YAAY;AAAA,IAChB,QAAQ;AAAA,IACR;AAAA,IACA,YAAY,WAAW,SAAS;AAAA,IAChC,QAAQ,OAAO,SAAS;AAAA,IACxB,MAAM;AAAA,EACR;AAEA,QAAM,iBAAiB,mBAAmB,SAAS;AAAA,IACjD,GAAG;AAAA,IACH;AAAA,EACF,CAAC;AAED,6BAAI,6BAA6B,cAAc;AAE/C,QAAM,WAAY,MAAM;AAAA,IACtB;AAAA,EACF;AAEA,SAAO;AACT;AASA,SAAS,mBACP,SACA,WACQ;AACR,QAAM,SAAS,oBAAoB,OAAO;AAC1C,MAAI,MAAM,GAAG,MAAM;AAEnB,aAAW,YAAY,OAAO,KAAK,SAAS,GAAG;AAC7C,UAAM,QAAQ,UAAU,QAAQ;AAEhC,QAAI,CAAC,OAAO;AACV;AAAA,IACF;AAEA,WAAO,GAAG,QAAQ,IAAI,KAAK;AAAA,EAC7B;AAEA,SAAO;AAEP,SAAO;AACT;AAQO,SAAS,oBAAoB,SAAc;AAEhD,QAAM,cAAc,6BAA6B,OAAO;AAExD,MAAI,CAAC,aAAa;AAChB,UAAM,IAAI,MAAM,6CAA6C,OAAO,EAAE;AAAA,EACxE;AAIA,SAAO,WAAW,YAAY,SAAS,IAAI,YAAY,MAAM;AAC/D","sourcesContent":["import { handleFetch } from '@metamask/controller-utils';\nimport type { Hex } from '@metamask/utils';\n\nimport { ETHERSCAN_SUPPORTED_NETWORKS } from '../constants';\nimport { incomingTransactionsLogger as log } from '../logger';\n\n// This interface was created before this ESLint rule was added.\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface EtherscanTransactionMetaBase {\n blockNumber: string;\n blockHash: string;\n confirmations: string;\n contractAddress: string;\n cumulativeGasUsed: string;\n from: string;\n gas: string;\n gasPrice: string;\n gasUsed: string;\n hash: string;\n nonce: string;\n timeStamp: string;\n to: string;\n transactionIndex: string;\n value: string;\n}\n\n// This interface was created before this ESLint rule was added.\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface EtherscanTransactionMeta extends EtherscanTransactionMetaBase {\n functionName: string;\n input: string;\n isError: string;\n methodId: string;\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n txreceipt_status: string;\n}\n\n// This interface was created before this ESLint rule was added.\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface EtherscanTokenTransactionMeta\n extends EtherscanTransactionMetaBase {\n tokenDecimal: string;\n tokenName: string;\n tokenSymbol: string;\n}\n\n// This interface was created before this ESLint rule was added.\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface EtherscanTransactionResponse<\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n T extends EtherscanTransactionMetaBase,\n> {\n status: '0' | '1';\n message?: string;\n result: string | T[];\n}\n\n// This interface was created before this ESLint rule was added.\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface EtherscanTransactionRequest {\n address: string;\n chainId: Hex;\n fromBlock?: number;\n limit?: number;\n}\n\n/**\n * Retrieves transaction data from Etherscan.\n *\n * @param request - Configuration required to fetch transactions.\n * @param request.address - Address to retrieve transactions for.\n * @param request.chainId - Current chain ID used to determine subdomain and domain.\n * @param request.fromBlock - Block number to start fetching transactions from.\n * @param request.limit - Number of transactions to retrieve.\n * @returns An Etherscan response object containing the request status and an array of token transaction data.\n */\nexport async function fetchEtherscanTransactions({\n address,\n chainId,\n fromBlock,\n limit,\n}: EtherscanTransactionRequest): Promise<\n EtherscanTransactionResponse\n> {\n return await fetchTransactions('txlist', {\n address,\n chainId,\n fromBlock,\n limit,\n });\n}\n\n/**\n * Retrieves token transaction data from Etherscan.\n *\n * @param request - Configuration required to fetch token transactions.\n * @param request.address - Address to retrieve token transactions for.\n * @param request.chainId - Current chain ID used to determine subdomain and domain.\n * @param request.fromBlock - Block number to start fetching token transactions from.\n * @param request.limit - Number of token transactions to retrieve.\n * @returns An Etherscan response object containing the request status and an array of token transaction data.\n */\nexport async function fetchEtherscanTokenTransactions({\n address,\n chainId,\n fromBlock,\n limit,\n}: EtherscanTransactionRequest): Promise<\n EtherscanTransactionResponse\n> {\n return await fetchTransactions('tokentx', {\n address,\n chainId,\n fromBlock,\n limit,\n });\n}\n\n/**\n * Retrieves transaction data from Etherscan from a specific endpoint.\n *\n * @param action - The Etherscan endpoint to use.\n * @param options - Options bag.\n * @param options.address - Address to retrieve transactions for.\n * @param options.chainId - Current chain ID used to determine subdomain and domain.\n * @param options.fromBlock - Block number to start fetching transactions from.\n * @param options.limit - Number of transactions to retrieve.\n * @returns An object containing the request status and an array of transaction data.\n */\n// TODO: Either fix this lint violation or explain why it's necessary to ignore.\n// eslint-disable-next-line @typescript-eslint/naming-convention\nasync function fetchTransactions(\n action: string,\n {\n address,\n chainId,\n fromBlock,\n limit,\n }: {\n address: string;\n chainId: Hex;\n fromBlock?: number;\n limit?: number;\n },\n): Promise> {\n const urlParams = {\n module: 'account',\n address,\n startBlock: fromBlock?.toString(),\n offset: limit?.toString(),\n sort: 'desc',\n };\n\n const etherscanTxUrl = getEtherscanApiUrl(chainId, {\n ...urlParams,\n action,\n });\n\n log('Sending Etherscan request', etherscanTxUrl);\n\n const response = (await handleFetch(\n etherscanTxUrl,\n )) as EtherscanTransactionResponse;\n\n return response;\n}\n\n/**\n * Return a URL that can be used to fetch data from Etherscan.\n *\n * @param chainId - Current chain ID used to determine subdomain and domain.\n * @param urlParams - The parameters used to construct the URL.\n * @returns URL to access Etherscan data.\n */\nfunction getEtherscanApiUrl(\n chainId: Hex,\n urlParams: Record,\n): string {\n const apiUrl = getEtherscanApiHost(chainId);\n let url = `${apiUrl}/api?`;\n\n for (const paramKey of Object.keys(urlParams)) {\n const value = urlParams[paramKey];\n\n if (!value) {\n continue;\n }\n\n url += `${paramKey}=${value}&`;\n }\n\n url += 'tag=latest&page=1';\n\n return url;\n}\n\n/**\n * Return the host url used to fetch data from Etherscan.\n *\n * @param chainId - Current chain ID used to determine subdomain and domain.\n * @returns host URL to access Etherscan data.\n */\nexport function getEtherscanApiHost(chainId: Hex) {\n // @ts-expect-error We account for `chainId` not being a property below\n const networkInfo = ETHERSCAN_SUPPORTED_NETWORKS[chainId];\n\n if (!networkInfo) {\n throw new Error(`Etherscan does not support chain with ID: ${chainId}`);\n }\n\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n return `https://${networkInfo.subdomain}.${networkInfo.domain}`;\n}\n"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-C3WC4OJ3.js b/node_modules/@metamask/transaction-controller/dist/chunk-YOLCLUTK.js -similarity index 96% -rename from node_modules/@metamask/transaction-controller/dist/chunk-C3WC4OJ3.js -rename to node_modules/@metamask/transaction-controller/dist/chunk-YOLCLUTK.js -index 90936a0..a35f8ee 100644 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-C3WC4OJ3.js -+++ b/node_modules/@metamask/transaction-controller/dist/chunk-YOLCLUTK.js -@@ -1,9 +1,9 @@ - "use strict";Object.defineProperty(exports, "__esModule", {value: true}); - --var _chunkQH2H4W3Njs = require('./chunk-QH2H4W3N.js'); -+var _chunk36I5CWGQjs = require('./chunk-36I5CWGQ.js'); - - --var _chunk76FONEDAjs = require('./chunk-76FONEDA.js'); -+var _chunkWCSGEGPWjs = require('./chunk-WCSGEGPW.js'); - - - var _chunkS6VGOPUYjs = require('./chunk-S6VGOPUY.js'); -@@ -20,7 +20,7 @@ var log = _utils.createModuleLogger.call(void 0, _chunkS6VGOPUYjs.projectLogger, - async function updateGasFees(request) { - const { txMeta } = request; - const initialParams = { ...txMeta.txParams }; -- const isSwap = _chunkQH2H4W3Njs.SWAP_TRANSACTION_TYPES.includes( -+ const isSwap = _chunk36I5CWGQjs.SWAP_TRANSACTION_TYPES.includes( - txMeta.type - ); - const savedGasFees = isSwap ? void 0 : request.getSavedGasFees(txMeta.chainId); -@@ -186,7 +186,7 @@ async function getSuggestedGasFees(request) { - if (!eip1559 && txMeta.txParams.gasPrice || eip1559 && txMeta.txParams.maxFeePerGas && txMeta.txParams.maxPriorityFeePerGas) { - return {}; - } -- const gasFeeFlow = _chunk76FONEDAjs.getGasFeeFlow.call(void 0, txMeta, gasFeeFlows); -+ const gasFeeFlow = _chunkWCSGEGPWjs.getGasFeeFlow.call(void 0, txMeta, gasFeeFlows); - try { - const gasFeeControllerData = await getGasFeeEstimates({ networkClientId }); - const response = await gasFeeFlow.getGasFees({ -@@ -223,4 +223,4 @@ async function getSuggestedGasFees(request) { - - - exports.updateGasFees = updateGasFees; exports.gweiDecimalToWeiHex = gweiDecimalToWeiHex; --//# sourceMappingURL=chunk-C3WC4OJ3.js.map -\ No newline at end of file -+//# sourceMappingURL=chunk-YOLCLUTK.js.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-YVCX6Z75.js.map b/node_modules/@metamask/transaction-controller/dist/chunk-YVCX6Z75.js.map -deleted file mode 100644 -index eea7ed3..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-YVCX6Z75.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/gas-flows/OracleLayer1GasFeeFlow.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,SAAS,QAAQ,gBAAgB;AACjC,SAAS,0BAA0B;AACnC,SAAS,gBAAgB;AACzB,SAAS,oBAA2C;AAEpD,SAAS,0BAA0B;AACnC,SAAS,YAAY;AAUrB,IAAM,MAAM,mBAAmB,eAAe,4BAA4B;AAE1E,IAAM,YACJ;AAEF,IAAM,uBAAuB;AAAA,EAC3B;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,SAAS,MAAM,SAAS,MAAM,QAAQ,CAAC;AAAA,IAChE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;AA7BA;AAkCO,IAAe,yBAAf,MAAkE;AAAA,EAKvE,YAAY,eAAoB,iBAA2B;AAkB3D,uBAAM;AA4BN;AAmBA;AASA;AA9EA;AAEA;AAGE,uBAAK,gBAAiB;AACtB,uBAAK,kBAAmB,mBAAmB;AAAA,EAC7C;AAAA,EAIA,MAAM,aACJ,SACmC;AACnC,QAAI;AACF,aAAO,MAAM,sBAAK,kDAAL,WAA4B;AAAA,IAC3C,SAAS,OAAO;AACd,UAAI,wCAAwC,KAAK;AACjD,YAAM,IAAI,MAAM,sCAAsC;AAAA,IACxD;AAAA,EACF;AAkEF;AAtFE;AAEA;AAoBM;AAAA,2BAAsB,eAC1B,SACmC;AACnC,QAAM,EAAE,UAAU,gBAAgB,IAAI;AAEtC,QAAM,WAAW,IAAI;AAAA,IACnB,mBAAK;AAAA,IACL;AAAA;AAAA,IAEA,IAAI,aAAa,QAAuC;AAAA,EAC1D;AAEA,QAAM,wBAAwB,sBAAK,gEAAL,WAC5B,iBACA,mBAAK,mBACL,UAAU;AAEZ,QAAM,SAAS,MAAM,SAAS,SAAS,qBAAqB;AAE5D,MAAI,WAAW,QAAW;AACxB,UAAM,IAAI,MAAM,wCAAwC;AAAA,EAC1D;AAEA,SAAO;AAAA,IACL,WAAW,OAAO,YAAY;AAAA,EAChC;AACF;AAEA;AAAA,kCAA6B,SAC3B,iBACA,MACA;AACA,QAAM,WAAW,sBAAK,oDAAL,WAA6B;AAC9C,QAAM,SAAS,sBAAK,oDAAL,WAA6B;AAE5C,MAAI,0BAA0B,mBAAmB,WAAW,UAAU;AAAA,IACpE;AAAA,EACF,CAAC;AAED,MAAI,MAAM;AACR,UAAM,YAAY,OAAO,KAAK,WAAW,KAAK;AAC9C,8BAA0B,wBAAwB,KAAK,SAAS;AAAA,EAClE;AAEA,SAAO;AACT;AAEA;AAAA,4BAAuB,SACrB,iBAC6B;AAC7B,SAAO;AAAA,IACL,GAAG,KAAK,gBAAgB,UAAU,KAAK;AAAA,IACvC,UAAU,gBAAgB,SAAS;AAAA,EACrC;AACF;AAEA;AAAA,4BAAuB,SAAC,iBAAkC;AACxD,QAAM,UAAU,OAAO,gBAAgB,OAAO;AAE9C,SAAO,OAAO,OAAO;AAAA,IACnB;AAAA,IACA,iBAAiB,SAAS;AAAA,EAC5B,CAAC;AACH","sourcesContent":["import { Common, Hardfork } from '@ethereumjs/common';\nimport { TransactionFactory } from '@ethereumjs/tx';\nimport { Contract } from '@ethersproject/contracts';\nimport { Web3Provider, type ExternalProvider } from '@ethersproject/providers';\nimport type { Hex } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\nimport { omit } from 'lodash';\n\nimport { projectLogger } from '../logger';\nimport type {\n Layer1GasFeeFlow,\n Layer1GasFeeFlowRequest,\n Layer1GasFeeFlowResponse,\n TransactionMeta,\n} from '../types';\n\nconst log = createModuleLogger(projectLogger, 'oracle-layer1-gas-fee-flow');\n\nconst DUMMY_KEY =\n 'abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789';\n\nconst GAS_PRICE_ORACLE_ABI = [\n {\n inputs: [{ internalType: 'bytes', name: '_data', type: 'bytes' }],\n name: 'getL1Fee',\n outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],\n stateMutability: 'view',\n type: 'function',\n },\n];\n\n/**\n * Layer 1 gas fee flow that obtains gas fee estimate using an oracle smart contract.\n */\nexport abstract class OracleLayer1GasFeeFlow implements Layer1GasFeeFlow {\n #oracleAddress: Hex;\n\n #signTransaction: boolean;\n\n constructor(oracleAddress: Hex, signTransaction?: boolean) {\n this.#oracleAddress = oracleAddress;\n this.#signTransaction = signTransaction ?? false;\n }\n\n abstract matchesTransaction(transactionMeta: TransactionMeta): boolean;\n\n async getLayer1Fee(\n request: Layer1GasFeeFlowRequest,\n ): Promise {\n try {\n return await this.#getOracleLayer1GasFee(request);\n } catch (error) {\n log('Failed to get oracle layer 1 gas fee', error);\n throw new Error(`Failed to get oracle layer 1 gas fee`);\n }\n }\n\n async #getOracleLayer1GasFee(\n request: Layer1GasFeeFlowRequest,\n ): Promise {\n const { provider, transactionMeta } = request;\n\n const contract = new Contract(\n this.#oracleAddress,\n GAS_PRICE_ORACLE_ABI,\n // Network controller provider type is incompatible with ethers provider\n new Web3Provider(provider as unknown as ExternalProvider),\n );\n\n const serializedTransaction = this.#buildUnserializedTransaction(\n transactionMeta,\n this.#signTransaction,\n ).serialize();\n\n const result = await contract.getL1Fee(serializedTransaction);\n\n if (result === undefined) {\n throw new Error('No value returned from oracle contract');\n }\n\n return {\n layer1Fee: result.toHexString(),\n };\n }\n\n #buildUnserializedTransaction(\n transactionMeta: TransactionMeta,\n sign: boolean,\n ) {\n const txParams = this.#buildTransactionParams(transactionMeta);\n const common = this.#buildTransactionCommon(transactionMeta);\n\n let unserializedTransaction = TransactionFactory.fromTxData(txParams, {\n common,\n });\n\n if (sign) {\n const keyBuffer = Buffer.from(DUMMY_KEY, 'hex');\n unserializedTransaction = unserializedTransaction.sign(keyBuffer);\n }\n\n return unserializedTransaction;\n }\n\n #buildTransactionParams(\n transactionMeta: TransactionMeta,\n ): TransactionMeta['txParams'] {\n return {\n ...omit(transactionMeta.txParams, 'gas'),\n gasLimit: transactionMeta.txParams.gas,\n };\n }\n\n #buildTransactionCommon(transactionMeta: TransactionMeta) {\n const chainId = Number(transactionMeta.chainId);\n\n return Common.custom({\n chainId,\n defaultHardfork: Hardfork.London,\n });\n }\n}\n"]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-Z4BLTVTB.js.map b/node_modules/@metamask/transaction-controller/dist/chunk-Z4BLTVTB.js.map -deleted file mode 100644 -index a464c67..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-Z4BLTVTB.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":[],"names":[],"mappings":""} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/chunk-Z4GV3YQQ.mjs.map b/node_modules/@metamask/transaction-controller/dist/chunk-Z4GV3YQQ.mjs.map -deleted file mode 100644 -index 6c9acc5..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/chunk-Z4GV3YQQ.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":["../src/gas-flows/ScrollLayer1GasFeeFlow.ts"],"sourcesContent":["import { type Hex } from '@metamask/utils';\n\nimport { CHAIN_IDS } from '../constants';\nimport type { TransactionMeta } from '../types';\nimport { OracleLayer1GasFeeFlow } from './OracleLayer1GasFeeFlow';\n\nconst SCROLL_CHAIN_IDS: Hex[] = [CHAIN_IDS.SCROLL, CHAIN_IDS.SCROLL_SEPOLIA];\n\n// BlockExplorer link: https://scrollscan.com/address/0x5300000000000000000000000000000000000002#code\nconst SCROLL_GAS_PRICE_ORACLE_ADDRESS =\n '0x5300000000000000000000000000000000000002';\n\n/**\n * Scroll layer 1 gas fee flow that obtains gas fee estimate using an oracle contract.\n */\nexport class ScrollLayer1GasFeeFlow extends OracleLayer1GasFeeFlow {\n constructor() {\n super(SCROLL_GAS_PRICE_ORACLE_ADDRESS, true);\n }\n\n matchesTransaction(transactionMeta: TransactionMeta): boolean {\n return SCROLL_CHAIN_IDS.includes(transactionMeta.chainId);\n }\n}\n"],"mappings":";;;;;;;;AAMA,IAAM,mBAA0B,CAAC,UAAU,QAAQ,UAAU,cAAc;AAG3E,IAAM,kCACJ;AAKK,IAAM,yBAAN,cAAqC,uBAAuB;AAAA,EACjE,cAAc;AACZ,UAAM,iCAAiC,IAAI;AAAA,EAC7C;AAAA,EAEA,mBAAmB,iBAA2C;AAC5D,WAAO,iBAAiB,SAAS,gBAAgB,OAAO;AAAA,EAC1D;AACF;","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/constants.js.map b/node_modules/@metamask/transaction-controller/dist/constants.js.map -deleted file mode 100644 -index a464c67..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/constants.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":[],"names":[],"mappings":""} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/constants.mjs.map b/node_modules/@metamask/transaction-controller/dist/constants.mjs.map -deleted file mode 100644 -index 84c51b2..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/constants.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/errors.js b/node_modules/@metamask/transaction-controller/dist/errors.js -index 8b748b2..c0600b0 100644 ---- a/node_modules/@metamask/transaction-controller/dist/errors.js -+++ b/node_modules/@metamask/transaction-controller/dist/errors.js -@@ -4,7 +4,7 @@ - - - var _chunkHMOSP33Fjs = require('./chunk-HMOSP33F.js'); --require('./chunk-AYTU4HU5.js'); -+require('./chunk-M3VM35ID.js'); - require('./chunk-Z4BLTVTB.js'); - - -diff --git a/node_modules/@metamask/transaction-controller/dist/errors.js.map b/node_modules/@metamask/transaction-controller/dist/errors.js.map -deleted file mode 100644 -index a464c67..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/errors.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":[],"names":[],"mappings":""} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/errors.mjs b/node_modules/@metamask/transaction-controller/dist/errors.mjs -index ec9b63b..0c46fe8 100644 ---- a/node_modules/@metamask/transaction-controller/dist/errors.mjs -+++ b/node_modules/@metamask/transaction-controller/dist/errors.mjs -@@ -4,7 +4,7 @@ import { - SimulationInvalidResponseError, - SimulationRevertedError - } from "./chunk-HQSNKCXI.mjs"; --import "./chunk-6SJYXSF3.mjs"; -+import "./chunk-KPA3AQWZ.mjs"; - import "./chunk-XUI43LEZ.mjs"; - export { - SimulationChainNotSupportedError, -diff --git a/node_modules/@metamask/transaction-controller/dist/errors.mjs.map b/node_modules/@metamask/transaction-controller/dist/errors.mjs.map -deleted file mode 100644 -index 84c51b2..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/errors.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/gas-flows/DefaultGasFeeFlow.js b/node_modules/@metamask/transaction-controller/dist/gas-flows/DefaultGasFeeFlow.js -index 3bdd160..d8bd6a9 100644 ---- a/node_modules/@metamask/transaction-controller/dist/gas-flows/DefaultGasFeeFlow.js -+++ b/node_modules/@metamask/transaction-controller/dist/gas-flows/DefaultGasFeeFlow.js -@@ -1,15 +1,15 @@ - "use strict";Object.defineProperty(exports, "__esModule", {value: true}); - --var _chunkQTKXIDGEjs = require('../chunk-QTKXIDGE.js'); --require('../chunk-C3WC4OJ3.js'); --require('../chunk-QH2H4W3N.js'); --require('../chunk-OZ6UB42C.js'); --require('../chunk-76FONEDA.js'); -+var _chunk3T3U64NOjs = require('../chunk-3T3U64NO.js'); -+require('../chunk-YOLCLUTK.js'); -+require('../chunk-36I5CWGQ.js'); -+require('../chunk-EVJRYRCR.js'); -+require('../chunk-WCSGEGPW.js'); - require('../chunk-UGN7PBON.js'); - require('../chunk-S6VGOPUY.js'); --require('../chunk-AYTU4HU5.js'); -+require('../chunk-M3VM35ID.js'); - require('../chunk-Z4BLTVTB.js'); - - --exports.DefaultGasFeeFlow = _chunkQTKXIDGEjs.DefaultGasFeeFlow; -+exports.DefaultGasFeeFlow = _chunk3T3U64NOjs.DefaultGasFeeFlow; - //# sourceMappingURL=DefaultGasFeeFlow.js.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/gas-flows/DefaultGasFeeFlow.mjs b/node_modules/@metamask/transaction-controller/dist/gas-flows/DefaultGasFeeFlow.mjs -index 5a924af..6480653 100644 ---- a/node_modules/@metamask/transaction-controller/dist/gas-flows/DefaultGasFeeFlow.mjs -+++ b/node_modules/@metamask/transaction-controller/dist/gas-flows/DefaultGasFeeFlow.mjs -@@ -1,13 +1,13 @@ - import { - DefaultGasFeeFlow --} from "../chunk-H2KZOK3J.mjs"; --import "../chunk-VXNPVIYL.mjs"; --import "../chunk-GNAL5HC2.mjs"; --import "../chunk-Q56I5ONX.mjs"; --import "../chunk-JXXTNVU4.mjs"; -+} from "../chunk-O6TBIZZ3.mjs"; -+import "../chunk-3KWZRCW5.mjs"; -+import "../chunk-UNXUIJLG.mjs"; -+import "../chunk-F7IJZOCR.mjs"; -+import "../chunk-BS5IK7HD.mjs"; - import "../chunk-O6ZZVIFH.mjs"; - import "../chunk-UQQWZT6C.mjs"; --import "../chunk-6SJYXSF3.mjs"; -+import "../chunk-KPA3AQWZ.mjs"; - import "../chunk-XUI43LEZ.mjs"; - export { - DefaultGasFeeFlow -diff --git a/node_modules/@metamask/transaction-controller/dist/gas-flows/LineaGasFeeFlow.js b/node_modules/@metamask/transaction-controller/dist/gas-flows/LineaGasFeeFlow.js -index 752de8c..73eeae7 100644 ---- a/node_modules/@metamask/transaction-controller/dist/gas-flows/LineaGasFeeFlow.js -+++ b/node_modules/@metamask/transaction-controller/dist/gas-flows/LineaGasFeeFlow.js -@@ -1,16 +1,16 @@ - "use strict";Object.defineProperty(exports, "__esModule", {value: true}); - --var _chunkARZHJFVGjs = require('../chunk-ARZHJFVG.js'); --require('../chunk-QTKXIDGE.js'); --require('../chunk-C3WC4OJ3.js'); --require('../chunk-QH2H4W3N.js'); --require('../chunk-OZ6UB42C.js'); --require('../chunk-76FONEDA.js'); -+var _chunkDFHIQE5Djs = require('../chunk-DFHIQE5D.js'); -+require('../chunk-3T3U64NO.js'); -+require('../chunk-YOLCLUTK.js'); -+require('../chunk-36I5CWGQ.js'); -+require('../chunk-EVJRYRCR.js'); -+require('../chunk-WCSGEGPW.js'); - require('../chunk-UGN7PBON.js'); - require('../chunk-S6VGOPUY.js'); --require('../chunk-AYTU4HU5.js'); -+require('../chunk-M3VM35ID.js'); - require('../chunk-Z4BLTVTB.js'); - - --exports.LineaGasFeeFlow = _chunkARZHJFVGjs.LineaGasFeeFlow; -+exports.LineaGasFeeFlow = _chunkDFHIQE5Djs.LineaGasFeeFlow; - //# sourceMappingURL=LineaGasFeeFlow.js.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/gas-flows/LineaGasFeeFlow.mjs b/node_modules/@metamask/transaction-controller/dist/gas-flows/LineaGasFeeFlow.mjs -index 9ab8e8b..40543e3 100644 ---- a/node_modules/@metamask/transaction-controller/dist/gas-flows/LineaGasFeeFlow.mjs -+++ b/node_modules/@metamask/transaction-controller/dist/gas-flows/LineaGasFeeFlow.mjs -@@ -1,14 +1,14 @@ - import { - LineaGasFeeFlow --} from "../chunk-UHG2LLVV.mjs"; --import "../chunk-H2KZOK3J.mjs"; --import "../chunk-VXNPVIYL.mjs"; --import "../chunk-GNAL5HC2.mjs"; --import "../chunk-Q56I5ONX.mjs"; --import "../chunk-JXXTNVU4.mjs"; -+} from "../chunk-OAXKMLDD.mjs"; -+import "../chunk-O6TBIZZ3.mjs"; -+import "../chunk-3KWZRCW5.mjs"; -+import "../chunk-UNXUIJLG.mjs"; -+import "../chunk-F7IJZOCR.mjs"; -+import "../chunk-BS5IK7HD.mjs"; - import "../chunk-O6ZZVIFH.mjs"; - import "../chunk-UQQWZT6C.mjs"; --import "../chunk-6SJYXSF3.mjs"; -+import "../chunk-KPA3AQWZ.mjs"; - import "../chunk-XUI43LEZ.mjs"; - export { - LineaGasFeeFlow -diff --git a/node_modules/@metamask/transaction-controller/dist/gas-flows/TestGasFeeFlow.js b/node_modules/@metamask/transaction-controller/dist/gas-flows/TestGasFeeFlow.js -index e3c4153..5193bed 100644 ---- a/node_modules/@metamask/transaction-controller/dist/gas-flows/TestGasFeeFlow.js -+++ b/node_modules/@metamask/transaction-controller/dist/gas-flows/TestGasFeeFlow.js -@@ -1,7 +1,7 @@ - "use strict";Object.defineProperty(exports, "__esModule", {value: true}); - - var _chunkTJMQEH57js = require('../chunk-TJMQEH57.js'); --require('../chunk-AYTU4HU5.js'); -+require('../chunk-M3VM35ID.js'); - require('../chunk-Z4BLTVTB.js'); - - -diff --git a/node_modules/@metamask/transaction-controller/dist/gas-flows/TestGasFeeFlow.mjs b/node_modules/@metamask/transaction-controller/dist/gas-flows/TestGasFeeFlow.mjs -index ba49f8e..f1b131e 100644 ---- a/node_modules/@metamask/transaction-controller/dist/gas-flows/TestGasFeeFlow.mjs -+++ b/node_modules/@metamask/transaction-controller/dist/gas-flows/TestGasFeeFlow.mjs -@@ -1,7 +1,7 @@ - import { - TestGasFeeFlow - } from "../chunk-FMRLPVFZ.mjs"; --import "../chunk-6SJYXSF3.mjs"; -+import "../chunk-KPA3AQWZ.mjs"; - import "../chunk-XUI43LEZ.mjs"; - export { - TestGasFeeFlow -diff --git a/node_modules/@metamask/transaction-controller/dist/helpers/EtherscanRemoteTransactionSource.js b/node_modules/@metamask/transaction-controller/dist/helpers/EtherscanRemoteTransactionSource.js -index 3dd45d8..4d5d3e1 100644 ---- a/node_modules/@metamask/transaction-controller/dist/helpers/EtherscanRemoteTransactionSource.js -+++ b/node_modules/@metamask/transaction-controller/dist/helpers/EtherscanRemoteTransactionSource.js -@@ -4,7 +4,7 @@ var _chunk7NMV2NPMjs = require('../chunk-7NMV2NPM.js'); - require('../chunk-XVYXRCRL.js'); - require('../chunk-UGN7PBON.js'); - require('../chunk-S6VGOPUY.js'); --require('../chunk-AYTU4HU5.js'); -+require('../chunk-M3VM35ID.js'); - require('../chunk-Z4BLTVTB.js'); - - -diff --git a/node_modules/@metamask/transaction-controller/dist/helpers/EtherscanRemoteTransactionSource.mjs b/node_modules/@metamask/transaction-controller/dist/helpers/EtherscanRemoteTransactionSource.mjs -index fbda172..7895a72 100644 ---- a/node_modules/@metamask/transaction-controller/dist/helpers/EtherscanRemoteTransactionSource.mjs -+++ b/node_modules/@metamask/transaction-controller/dist/helpers/EtherscanRemoteTransactionSource.mjs -@@ -4,7 +4,7 @@ import { - import "../chunk-EGQCE3FK.mjs"; - import "../chunk-O6ZZVIFH.mjs"; - import "../chunk-UQQWZT6C.mjs"; --import "../chunk-6SJYXSF3.mjs"; -+import "../chunk-KPA3AQWZ.mjs"; - import "../chunk-XUI43LEZ.mjs"; - export { - EtherscanRemoteTransactionSource -diff --git a/node_modules/@metamask/transaction-controller/dist/helpers/GasFeePoller.js b/node_modules/@metamask/transaction-controller/dist/helpers/GasFeePoller.js -index 6c196cd..74c67a1 100644 ---- a/node_modules/@metamask/transaction-controller/dist/helpers/GasFeePoller.js -+++ b/node_modules/@metamask/transaction-controller/dist/helpers/GasFeePoller.js -@@ -1,12 +1,12 @@ - "use strict";Object.defineProperty(exports, "__esModule", {value: true}); - --var _chunk2EU6346Vjs = require('../chunk-2EU6346V.js'); -+var _chunkT6E2PUIAjs = require('../chunk-T6E2PUIA.js'); - require('../chunk-2XKEAKQG.js'); --require('../chunk-76FONEDA.js'); -+require('../chunk-WCSGEGPW.js'); - require('../chunk-S6VGOPUY.js'); --require('../chunk-AYTU4HU5.js'); -+require('../chunk-M3VM35ID.js'); - require('../chunk-Z4BLTVTB.js'); - - --exports.GasFeePoller = _chunk2EU6346Vjs.GasFeePoller; -+exports.GasFeePoller = _chunkT6E2PUIAjs.GasFeePoller; - //# sourceMappingURL=GasFeePoller.js.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/helpers/GasFeePoller.mjs b/node_modules/@metamask/transaction-controller/dist/helpers/GasFeePoller.mjs -index 6989a3a..a4feba1 100644 ---- a/node_modules/@metamask/transaction-controller/dist/helpers/GasFeePoller.mjs -+++ b/node_modules/@metamask/transaction-controller/dist/helpers/GasFeePoller.mjs -@@ -1,10 +1,10 @@ - import { - GasFeePoller --} from "../chunk-SFFTNB2X.mjs"; -+} from "../chunk-5TW7WBKX.mjs"; - import "../chunk-NOHEXQ7Y.mjs"; --import "../chunk-JXXTNVU4.mjs"; -+import "../chunk-BS5IK7HD.mjs"; - import "../chunk-UQQWZT6C.mjs"; --import "../chunk-6SJYXSF3.mjs"; -+import "../chunk-KPA3AQWZ.mjs"; - import "../chunk-XUI43LEZ.mjs"; - export { - GasFeePoller -diff --git a/node_modules/@metamask/transaction-controller/dist/helpers/MultichainTrackingHelper.js b/node_modules/@metamask/transaction-controller/dist/helpers/MultichainTrackingHelper.js -index e7a0bad..834b9d0 100644 ---- a/node_modules/@metamask/transaction-controller/dist/helpers/MultichainTrackingHelper.js -+++ b/node_modules/@metamask/transaction-controller/dist/helpers/MultichainTrackingHelper.js -@@ -5,7 +5,7 @@ require('../chunk-7NMV2NPM.js'); - require('../chunk-XVYXRCRL.js'); - require('../chunk-UGN7PBON.js'); - require('../chunk-S6VGOPUY.js'); --require('../chunk-AYTU4HU5.js'); -+require('../chunk-M3VM35ID.js'); - require('../chunk-Z4BLTVTB.js'); - - -diff --git a/node_modules/@metamask/transaction-controller/dist/helpers/MultichainTrackingHelper.mjs b/node_modules/@metamask/transaction-controller/dist/helpers/MultichainTrackingHelper.mjs -index 59b4c85..fc37976 100644 ---- a/node_modules/@metamask/transaction-controller/dist/helpers/MultichainTrackingHelper.mjs -+++ b/node_modules/@metamask/transaction-controller/dist/helpers/MultichainTrackingHelper.mjs -@@ -5,7 +5,7 @@ import "../chunk-EKJXGERC.mjs"; - import "../chunk-EGQCE3FK.mjs"; - import "../chunk-O6ZZVIFH.mjs"; - import "../chunk-UQQWZT6C.mjs"; --import "../chunk-6SJYXSF3.mjs"; -+import "../chunk-KPA3AQWZ.mjs"; - import "../chunk-XUI43LEZ.mjs"; - export { - MultichainTrackingHelper -diff --git a/node_modules/@metamask/transaction-controller/dist/helpers/PendingTransactionTracker.js b/node_modules/@metamask/transaction-controller/dist/helpers/PendingTransactionTracker.js -index 339a778..ccee2b4 100644 ---- a/node_modules/@metamask/transaction-controller/dist/helpers/PendingTransactionTracker.js -+++ b/node_modules/@metamask/transaction-controller/dist/helpers/PendingTransactionTracker.js -@@ -2,7 +2,7 @@ - - var _chunkULD4JC3Qjs = require('../chunk-ULD4JC3Q.js'); - require('../chunk-S6VGOPUY.js'); --require('../chunk-AYTU4HU5.js'); -+require('../chunk-M3VM35ID.js'); - require('../chunk-Z4BLTVTB.js'); - - -diff --git a/node_modules/@metamask/transaction-controller/dist/helpers/PendingTransactionTracker.mjs b/node_modules/@metamask/transaction-controller/dist/helpers/PendingTransactionTracker.mjs -index e942405..f6ab4ed 100644 ---- a/node_modules/@metamask/transaction-controller/dist/helpers/PendingTransactionTracker.mjs -+++ b/node_modules/@metamask/transaction-controller/dist/helpers/PendingTransactionTracker.mjs -@@ -2,7 +2,7 @@ import { - PendingTransactionTracker - } from "../chunk-6B5BEO3R.mjs"; - import "../chunk-UQQWZT6C.mjs"; --import "../chunk-6SJYXSF3.mjs"; -+import "../chunk-KPA3AQWZ.mjs"; - import "../chunk-XUI43LEZ.mjs"; - export { - PendingTransactionTracker -diff --git a/node_modules/@metamask/transaction-controller/dist/index.js b/node_modules/@metamask/transaction-controller/dist/index.js -index 16f7e96..67c3685 100644 ---- a/node_modules/@metamask/transaction-controller/dist/index.js -+++ b/node_modules/@metamask/transaction-controller/dist/index.js -@@ -2,14 +2,16 @@ - - - --var _chunkS7Q622ISjs = require('./chunk-S7Q622IS.js'); -+ -+var _chunk4JSQYVM4js = require('./chunk-4JSQYVM4.js'); - require('./chunk-PRUNMTRD.js'); --require('./chunk-74W7X6BE.js'); --require('./chunk-KT6UAKBB.js'); -+require('./chunk-QBQLNTTJ.js'); -+require('./chunk-AT7DP6HE.js'); -+require('./chunk-L7HIDFC5.js'); - - - var _chunkSD6CWFDFjs = require('./chunk-SD6CWFDF.js'); --require('./chunk-RXIUMVA5.js'); -+require('./chunk-MPJQFAVC.js'); - require('./chunk-ULD4JC3Q.js'); - require('./chunk-7LXE4KHV.js'); - require('./chunk-V72C4MCR.js'); -@@ -18,25 +20,28 @@ require('./chunk-NYKRCWBG.js'); - require('./chunk-WR5F34OW.js'); - require('./chunk-YVCX6Z75.js'); - require('./chunk-TJMQEH57.js'); --require('./chunk-2EU6346V.js'); -+require('./chunk-T6E2PUIA.js'); - require('./chunk-2XKEAKQG.js'); - require('./chunk-RHDPOIS4.js'); - require('./chunk-6OLJWLKK.js'); - require('./chunk-7NMV2NPM.js'); - require('./chunk-XVYXRCRL.js'); - require('./chunk-HMOSP33F.js'); --require('./chunk-ARZHJFVG.js'); --require('./chunk-QTKXIDGE.js'); --require('./chunk-C3WC4OJ3.js'); --require('./chunk-QH2H4W3N.js'); -+require('./chunk-DFHIQE5D.js'); -+require('./chunk-3T3U64NO.js'); -+require('./chunk-YOLCLUTK.js'); -+require('./chunk-36I5CWGQ.js'); -+ -+ -+ -+var _chunkEVJRYRCRjs = require('./chunk-EVJRYRCR.js'); - - -+var _chunkWCSGEGPWjs = require('./chunk-WCSGEGPW.js'); - --var _chunkOZ6UB42Cjs = require('./chunk-OZ6UB42C.js'); - - --var _chunk76FONEDAjs = require('./chunk-76FONEDA.js'); --require('./chunk-UGN7PBON.js'); -+var _chunkUGN7PBONjs = require('./chunk-UGN7PBON.js'); - require('./chunk-S6VGOPUY.js'); - - -@@ -48,7 +53,7 @@ require('./chunk-S6VGOPUY.js'); - - - --var _chunkAYTU4HU5js = require('./chunk-AYTU4HU5.js'); -+var _chunkM3VM35IDjs = require('./chunk-M3VM35ID.js'); - require('./chunk-Z4BLTVTB.js'); - - -@@ -67,5 +72,8 @@ require('./chunk-Z4BLTVTB.js'); - - - --exports.CANCEL_RATE = _chunkS7Q622ISjs.CANCEL_RATE; exports.GasFeeEstimateLevel = _chunkAYTU4HU5js.GasFeeEstimateLevel; exports.GasFeeEstimateType = _chunkAYTU4HU5js.GasFeeEstimateType; exports.HARDFORK = _chunkS7Q622ISjs.HARDFORK; exports.SimulationErrorCode = _chunkAYTU4HU5js.SimulationErrorCode; exports.SimulationTokenStandard = _chunkAYTU4HU5js.SimulationTokenStandard; exports.TransactionController = _chunkS7Q622ISjs.TransactionController; exports.TransactionEnvelopeType = _chunkAYTU4HU5js.TransactionEnvelopeType; exports.TransactionStatus = _chunkAYTU4HU5js.TransactionStatus; exports.TransactionType = _chunkAYTU4HU5js.TransactionType; exports.UserFeeLevel = _chunkAYTU4HU5js.UserFeeLevel; exports.WalletDevice = _chunkAYTU4HU5js.WalletDevice; exports.determineTransactionType = _chunkSD6CWFDFjs.determineTransactionType; exports.isEIP1559Transaction = _chunkOZ6UB42Cjs.isEIP1559Transaction; exports.mergeGasFeeEstimates = _chunk76FONEDAjs.mergeGasFeeEstimates; exports.normalizeTransactionParams = _chunkOZ6UB42Cjs.normalizeTransactionParams; -+ -+ -+ -+exports.CANCEL_RATE = _chunk4JSQYVM4js.CANCEL_RATE; exports.CHAIN_IDS = _chunkUGN7PBONjs.CHAIN_IDS; exports.ETHERSCAN_SUPPORTED_NETWORKS = _chunkUGN7PBONjs.ETHERSCAN_SUPPORTED_NETWORKS; exports.GasFeeEstimateLevel = _chunkM3VM35IDjs.GasFeeEstimateLevel; exports.GasFeeEstimateType = _chunkM3VM35IDjs.GasFeeEstimateType; exports.HARDFORK = _chunk4JSQYVM4js.HARDFORK; exports.SPEED_UP_RATE = _chunk4JSQYVM4js.SPEED_UP_RATE; exports.SimulationErrorCode = _chunkM3VM35IDjs.SimulationErrorCode; exports.SimulationTokenStandard = _chunkM3VM35IDjs.SimulationTokenStandard; exports.TransactionController = _chunk4JSQYVM4js.TransactionController; exports.TransactionEnvelopeType = _chunkM3VM35IDjs.TransactionEnvelopeType; exports.TransactionStatus = _chunkM3VM35IDjs.TransactionStatus; exports.TransactionType = _chunkM3VM35IDjs.TransactionType; exports.UserFeeLevel = _chunkM3VM35IDjs.UserFeeLevel; exports.WalletDevice = _chunkM3VM35IDjs.WalletDevice; exports.determineTransactionType = _chunkSD6CWFDFjs.determineTransactionType; exports.isEIP1559Transaction = _chunkEVJRYRCRjs.isEIP1559Transaction; exports.mergeGasFeeEstimates = _chunkWCSGEGPWjs.mergeGasFeeEstimates; exports.normalizeTransactionParams = _chunkEVJRYRCRjs.normalizeTransactionParams; - //# sourceMappingURL=index.js.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/index.js.map b/node_modules/@metamask/transaction-controller/dist/index.js.map -deleted file mode 100644 -index a464c67..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/index.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":[],"names":[],"mappings":""} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/index.mjs b/node_modules/@metamask/transaction-controller/dist/index.mjs -index edca04b..fe99cff 100644 ---- a/node_modules/@metamask/transaction-controller/dist/index.mjs -+++ b/node_modules/@metamask/transaction-controller/dist/index.mjs -@@ -1,15 +1,17 @@ - import { - CANCEL_RATE, - HARDFORK, -+ SPEED_UP_RATE, - TransactionController --} from "./chunk-UKV5HIMT.mjs"; -+} from "./chunk-PBSMFYZI.mjs"; - import "./chunk-6DDVVUJC.mjs"; --import "./chunk-EVL6KODQ.mjs"; --import "./chunk-K4KOSAGM.mjs"; -+import "./chunk-GRDPR767.mjs"; -+import "./chunk-D7MMS3XU.mjs"; -+import "./chunk-4AO3XGIE.mjs"; - import { - determineTransactionType - } from "./chunk-KG4UW4K4.mjs"; --import "./chunk-5ZEJT5SN.mjs"; -+import "./chunk-TQS7IKY6.mjs"; - import "./chunk-6B5BEO3R.mjs"; - import "./chunk-FRKQ3Z2L.mjs"; - import "./chunk-5G6OHAXI.mjs"; -@@ -18,25 +20,28 @@ import "./chunk-VEVVBHP3.mjs"; - import "./chunk-Z4GV3YQQ.mjs"; - import "./chunk-FG74Z3F5.mjs"; - import "./chunk-FMRLPVFZ.mjs"; --import "./chunk-SFFTNB2X.mjs"; -+import "./chunk-5TW7WBKX.mjs"; - import "./chunk-NOHEXQ7Y.mjs"; - import "./chunk-3ZV5YEUV.mjs"; - import "./chunk-4V4XIPCI.mjs"; - import "./chunk-EKJXGERC.mjs"; - import "./chunk-EGQCE3FK.mjs"; - import "./chunk-HQSNKCXI.mjs"; --import "./chunk-UHG2LLVV.mjs"; --import "./chunk-H2KZOK3J.mjs"; --import "./chunk-VXNPVIYL.mjs"; --import "./chunk-GNAL5HC2.mjs"; -+import "./chunk-OAXKMLDD.mjs"; -+import "./chunk-O6TBIZZ3.mjs"; -+import "./chunk-3KWZRCW5.mjs"; -+import "./chunk-UNXUIJLG.mjs"; - import { - isEIP1559Transaction, - normalizeTransactionParams --} from "./chunk-Q56I5ONX.mjs"; -+} from "./chunk-F7IJZOCR.mjs"; - import { - mergeGasFeeEstimates --} from "./chunk-JXXTNVU4.mjs"; --import "./chunk-O6ZZVIFH.mjs"; -+} from "./chunk-BS5IK7HD.mjs"; -+import { -+ CHAIN_IDS, -+ ETHERSCAN_SUPPORTED_NETWORKS -+} from "./chunk-O6ZZVIFH.mjs"; - import "./chunk-UQQWZT6C.mjs"; - import { - GasFeeEstimateLevel, -@@ -48,13 +53,16 @@ import { - TransactionType, - UserFeeLevel, - WalletDevice --} from "./chunk-6SJYXSF3.mjs"; -+} from "./chunk-KPA3AQWZ.mjs"; - import "./chunk-XUI43LEZ.mjs"; - export { - CANCEL_RATE, -+ CHAIN_IDS, -+ ETHERSCAN_SUPPORTED_NETWORKS, - GasFeeEstimateLevel, - GasFeeEstimateType, - HARDFORK, -+ SPEED_UP_RATE, - SimulationErrorCode, - SimulationTokenStandard, - TransactionController, -diff --git a/node_modules/@metamask/transaction-controller/dist/index.mjs.map b/node_modules/@metamask/transaction-controller/dist/index.mjs.map -deleted file mode 100644 -index 84c51b2..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/index.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/logger.js.map b/node_modules/@metamask/transaction-controller/dist/logger.js.map -deleted file mode 100644 -index a464c67..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/logger.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":[],"names":[],"mappings":""} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/logger.mjs.map b/node_modules/@metamask/transaction-controller/dist/logger.mjs.map -deleted file mode 100644 -index 84c51b2..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/logger.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/tsconfig.build.tsbuildinfo b/node_modules/@metamask/transaction-controller/dist/tsconfig.build.tsbuildinfo -index 21fa115..c0615e6 100644 ---- a/node_modules/@metamask/transaction-controller/dist/tsconfig.build.tsbuildinfo -+++ b/node_modules/@metamask/transaction-controller/dist/tsconfig.build.tsbuildinfo -@@ -1 +1 @@ --{"program":{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../types/eth-ens-namehash.d.ts","../../../types/ethereum-ens-network-map.d.ts","../../../types/ethjs-query.d.ts","../../../types/global.d.ts","../../../types/single-call-balance-checker-abi.d.ts","../../../types/@metamask/contract-metadata.d.ts","../../../types/@metamask/eth-hd-keyring.d.ts","../../../types/@metamask/eth-simple-keyring.d.ts","../../../types/@metamask/ethjs-provider-http.d.ts","../../../types/@metamask/ethjs-unit.d.ts","../../../types/@metamask/metamask-eth-abis.d.ts","../../../types/eth-json-rpc-infura/src/createProvider.d.ts","../../../types/eth-phishing-detect/src/config.json.d.ts","../../../types/eth-phishing-detect/src/detector.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/dom-events.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/globals.global.d.ts","../../../node_modules/@types/node/index.d.ts","../../../node_modules/@ethereumjs/common/dist/enums.d.ts","../../../node_modules/@ethereumjs/common/dist/types.d.ts","../../../node_modules/buffer/index.d.ts","../../../node_modules/@ethereumjs/util/dist/constants.d.ts","../../../node_modules/@ethereumjs/util/dist/units.d.ts","../../../node_modules/@ethereumjs/util/dist/address.d.ts","../../../node_modules/@ethereumjs/util/dist/bytes.d.ts","../../../node_modules/@ethereumjs/util/dist/types.d.ts","../../../node_modules/@ethereumjs/util/dist/account.d.ts","../../../node_modules/@ethereumjs/util/dist/withdrawal.d.ts","../../../node_modules/@ethereumjs/util/dist/signature.d.ts","../../../node_modules/@ethereumjs/util/dist/encoding.d.ts","../../../node_modules/@ethereumjs/util/dist/asyncEventEmitter.d.ts","../../../node_modules/@ethereumjs/util/dist/internal.d.ts","../../../node_modules/@ethereumjs/util/dist/lock.d.ts","../../../node_modules/@ethereumjs/util/dist/provider.d.ts","../../../node_modules/@ethereumjs/util/dist/index.d.ts","../../../node_modules/@ethereumjs/common/dist/common.d.ts","../../../node_modules/@ethereumjs/common/dist/utils.d.ts","../../../node_modules/@ethereumjs/common/dist/index.d.ts","../../../node_modules/@ethereumjs/tx/dist/eip2930Transaction.d.ts","../../../node_modules/@ethereumjs/tx/dist/legacyTransaction.d.ts","../../../node_modules/@ethereumjs/tx/dist/types.d.ts","../../../node_modules/@ethereumjs/tx/dist/baseTransaction.d.ts","../../../node_modules/@ethereumjs/tx/dist/eip1559Transaction.d.ts","../../../node_modules/@ethereumjs/tx/dist/transactionFactory.d.ts","../../../node_modules/@ethereumjs/tx/dist/index.d.ts","../../base-controller/dist/types/BaseControllerV1.d.ts","../../../node_modules/superstruct/dist/error.d.ts","../../../node_modules/superstruct/dist/utils.d.ts","../../../node_modules/superstruct/dist/struct.d.ts","../../../node_modules/superstruct/dist/structs/coercions.d.ts","../../../node_modules/superstruct/dist/structs/refinements.d.ts","../../../node_modules/superstruct/dist/structs/types.d.ts","../../../node_modules/superstruct/dist/structs/utilities.d.ts","../../../node_modules/superstruct/dist/index.d.ts","../../../node_modules/@metamask/utils/dist/types/assert.d.ts","../../../node_modules/@metamask/utils/dist/types/base64.d.ts","../../../node_modules/@metamask/utils/dist/types/hex.d.ts","../../../node_modules/@metamask/utils/dist/types/bytes.d.ts","../../../node_modules/@metamask/utils/dist/types/caip-types.d.ts","../../../node_modules/@metamask/utils/dist/types/checksum.d.ts","../../../node_modules/@metamask/utils/dist/types/coercers.d.ts","../../../node_modules/@metamask/utils/dist/types/collections.d.ts","../../../node_modules/@metamask/utils/dist/types/encryption-types.d.ts","../../../node_modules/@metamask/utils/dist/types/errors.d.ts","../../../node_modules/@metamask/utils/dist/types/json.d.ts","../../../node_modules/@metamask/utils/dist/types/keyring.d.ts","../../../node_modules/@types/ms/index.d.ts","../../../node_modules/@types/debug/index.d.ts","../../../node_modules/@metamask/utils/dist/types/logging.d.ts","../../../node_modules/@metamask/utils/dist/types/misc.d.ts","../../../node_modules/@metamask/utils/dist/types/number.d.ts","../../../node_modules/@metamask/utils/dist/types/opaque.d.ts","../../../node_modules/@metamask/utils/dist/types/promise.d.ts","../../../node_modules/@metamask/utils/dist/types/time.d.ts","../../../node_modules/@metamask/utils/dist/types/transaction-types.d.ts","../../../node_modules/@metamask/utils/dist/types/versions.d.ts","../../../node_modules/@metamask/utils/dist/types/index.d.ts","../../../node_modules/immer/dist/utils/env.d.ts","../../../node_modules/immer/dist/utils/errors.d.ts","../../../node_modules/immer/dist/types/types-external.d.ts","../../../node_modules/immer/dist/types/types-internal.d.ts","../../../node_modules/immer/dist/utils/common.d.ts","../../../node_modules/immer/dist/utils/plugins.d.ts","../../../node_modules/immer/dist/core/scope.d.ts","../../../node_modules/immer/dist/core/finalize.d.ts","../../../node_modules/immer/dist/core/proxy.d.ts","../../../node_modules/immer/dist/core/immerClass.d.ts","../../../node_modules/immer/dist/core/current.d.ts","../../../node_modules/immer/dist/internal.d.ts","../../../node_modules/immer/dist/plugins/es5.d.ts","../../../node_modules/immer/dist/plugins/patches.d.ts","../../../node_modules/immer/dist/plugins/mapset.d.ts","../../../node_modules/immer/dist/plugins/all.d.ts","../../../node_modules/immer/dist/immer.d.ts","../../base-controller/dist/types/RestrictedControllerMessenger.d.ts","../../base-controller/dist/types/ControllerMessenger.d.ts","../../base-controller/dist/types/BaseControllerV2.d.ts","../../base-controller/dist/types/index.d.ts","../../../node_modules/@metamask/keyring-api/dist/api/account.d.ts","../../../node_modules/@metamask/keyring-api/dist/api/balance.d.ts","../../../node_modules/@metamask/keyring-api/dist/api/caip.d.ts","../../../node_modules/@metamask/keyring-api/dist/api/export.d.ts","../../../node_modules/@metamask/keyring-api/dist/superstruct.d.ts","../../../node_modules/@metamask/keyring-api/dist/api/request.d.ts","../../../node_modules/@metamask/keyring-api/dist/api/response.d.ts","../../../node_modules/@metamask/keyring-api/dist/api/keyring.d.ts","../../../node_modules/@metamask/keyring-api/dist/api/index.d.ts","../../../node_modules/@metamask/keyring-api/dist/btc/types.d.ts","../../../node_modules/@metamask/keyring-api/dist/btc/index.d.ts","../../../node_modules/@metamask/keyring-api/dist/contexts.d.ts","../../../node_modules/@metamask/keyring-api/dist/eth/erc4337/types.d.ts","../../../node_modules/@metamask/keyring-api/dist/eth/erc4337/index.d.ts","../../../node_modules/@metamask/keyring-api/dist/eth/types.d.ts","../../../node_modules/@metamask/keyring-api/dist/eth/utils.d.ts","../../../node_modules/@metamask/keyring-api/dist/eth/index.d.ts","../../../node_modules/@metamask/keyring-api/dist/events.d.ts","../../../node_modules/@metamask/keyring-api/dist/internal/api.d.ts","../../../node_modules/@metamask/keyring-api/dist/internal/eth/EthKeyring.d.ts","../../../node_modules/@metamask/keyring-api/dist/internal/eth/index.d.ts","../../../node_modules/@metamask/keyring-api/dist/internal/events.d.ts","../../../node_modules/@metamask/keyring-api/dist/internal/rpc.d.ts","../../../node_modules/@metamask/keyring-api/dist/internal/types.d.ts","../../../node_modules/@metamask/keyring-api/dist/internal/index.d.ts","../../../node_modules/@metamask/keyring-api/dist/JsonRpcRequest.d.ts","../../../node_modules/@metamask/keyring-api/dist/KeyringClient.d.ts","../../../node_modules/@metamask/safe-event-emitter/dist/cjs/index.d.ts","../../json-rpc-engine/dist/types/JsonRpcEngine.d.ts","../../json-rpc-engine/dist/types/createAsyncMiddleware.d.ts","../../json-rpc-engine/dist/types/createScaffoldMiddleware.d.ts","../../json-rpc-engine/dist/types/getUniqueId.d.ts","../../json-rpc-engine/dist/types/idRemapMiddleware.d.ts","../../json-rpc-engine/dist/types/mergeMiddleware.d.ts","../../json-rpc-engine/dist/types/index.d.ts","../../../node_modules/@metamask/providers/dist/types/utils.d.ts","../../../node_modules/@metamask/providers/dist/types/BaseProvider.d.ts","../../../node_modules/@metamask/providers/dist/types/EIP6963.d.ts","../../../node_modules/@types/readable-stream/node_modules/safe-buffer/index.d.ts","../../../node_modules/@types/readable-stream/index.d.ts","../../../node_modules/@metamask/providers/dist/types/StreamProvider.d.ts","../../../node_modules/@metamask/providers/dist/types/extension-provider/createExternalExtensionProvider.d.ts","../../../node_modules/@metamask/providers/dist/types/MetaMaskInpageProvider.d.ts","../../../node_modules/@metamask/providers/dist/types/initializeInpageProvider.d.ts","../../../node_modules/@metamask/providers/dist/types/shimWeb3.d.ts","../../../node_modules/@metamask/providers/dist/types/index.d.ts","../../../node_modules/@metamask/keyring-api/dist/KeyringSnapRpcClient.d.ts","../../../node_modules/@metamask/keyring-api/dist/rpc-handler.d.ts","../../../node_modules/@metamask/rpc-errors/dist/types/utils.d.ts","../../../node_modules/@metamask/rpc-errors/dist/types/classes.d.ts","../../../node_modules/@metamask/rpc-errors/dist/types/errors.d.ts","../../../node_modules/@metamask/rpc-errors/dist/types/error-constants.d.ts","../../../node_modules/@metamask/rpc-errors/dist/types/index.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/errors.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/internals/error-wrappers.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/internals/errors.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/internals/helpers.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/internals/structs.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/create-interface.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/dialog.d.ts","../../../node_modules/@metamask/key-tree/dist/constants.d.cts","../../../node_modules/@metamask/key-tree/node_modules/@noble/curves/abstract/modular.d.ts","../../../node_modules/@metamask/key-tree/node_modules/@noble/curves/abstract/utils.d.ts","../../../node_modules/@metamask/key-tree/node_modules/@noble/curves/abstract/curve.d.ts","../../../node_modules/@metamask/key-tree/dist/curves/ed25519.d.cts","../../../node_modules/@metamask/key-tree/dist/curves/ed25519Bip32.d.cts","../../../node_modules/@metamask/key-tree/node_modules/@noble/curves/abstract/weierstrass.d.ts","../../../node_modules/@metamask/key-tree/dist/curves/secp256k1.d.cts","../../../node_modules/@metamask/key-tree/dist/curves/curve.d.cts","../../../node_modules/@metamask/key-tree/dist/curves/index.d.cts","../../../node_modules/@metamask/key-tree/dist/utils.d.cts","../../../node_modules/@metamask/key-tree/dist/BIP44CoinTypeNode.d.cts","../../../node_modules/@metamask/key-tree/dist/SLIP10Node.d.cts","../../../node_modules/@metamask/key-tree/dist/BIP44Node.d.cts","../../../node_modules/@metamask/key-tree/dist/derivers/bip32.d.cts","../../../node_modules/@metamask/key-tree/dist/derivers/bip39.d.cts","../../../node_modules/@metamask/key-tree/dist/derivers/cip3.d.cts","../../../node_modules/@metamask/key-tree/dist/derivers/slip10.d.cts","../../../node_modules/@metamask/key-tree/dist/derivers/index.d.cts","../../../node_modules/@metamask/key-tree/dist/index.d.cts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/caip.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/permissions.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/get-bip32-entropy.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/get-bip32-public-key.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/get-bip44-entropy.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/get-client-status.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/get-entropy.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/get-file.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/component.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/Address.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/Box.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/Copyable.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/Divider.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/form/Button.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/form/Option.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/form/Dropdown.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/form/Input.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/form/Field.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/form/Form.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/form/index.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/formatting/Bold.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/formatting/Italic.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/formatting/index.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/Heading.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/Image.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/Link.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/Text.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/Value.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/Row.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/Spinner.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/index.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/jsx-runtime.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/jsx-dev-runtime.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/validation.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/index.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/ui/nodes.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/ui/components/address.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/ui/components/copyable.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/ui/components/divider.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/ui/components/heading.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/ui/components/image.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/ui/components/panel.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/ui/components/spinner.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/ui/components/text.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/ui/components/row.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/ui/components/button.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/ui/components/input.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/ui/components/form.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/ui/components/index.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/ui/component.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/ui/index.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/interface.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/get-interface-state.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/get-locale.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/snap.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/get-snaps.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/invoke-snap.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/invoke-keyring.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/manage-accounts.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/manage-state.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/notify.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/request-snaps.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/update-interface.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/methods.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/index.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/provider.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/global.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/images.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/handlers/cronjob.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/handlers/home-page.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/handlers/keyring.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/handlers/lifecycle.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/handlers/name-lookup.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/handlers/rpc-request.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/handlers/transaction.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/handlers/signature.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/handlers/user-input.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/handlers/index.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/index.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/internals/jsx.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/internals/svg.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/internals/index.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/error-wrappers.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/images.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/index.d.ts","../../../node_modules/@metamask/keyring-api/dist/snap-utils.d.ts","../../../node_modules/@metamask/keyring-api/dist/index.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/patchCBOR.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/lib/DataItem.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/lib/cbor-sync.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/lib/index.d.ts","../../../node_modules/@ngraveio/bc-ur/dist/ur.d.ts","../../../node_modules/@ngraveio/bc-ur/dist/urEncoder.d.ts","../../../node_modules/@ngraveio/bc-ur/dist/fountainEncoder.d.ts","../../../node_modules/@ngraveio/bc-ur/dist/fountainDecoder.d.ts","../../../node_modules/@ngraveio/bc-ur/dist/urDecoder.d.ts","../../../node_modules/@ngraveio/bc-ur/dist/index.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/RegistryType.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/RegistryItem.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/CryptoCoinInfo.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/PathComponent.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/CryptoKeypath.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/types.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/CryptoHDKey.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/CryptoECKey.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/Bytes.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/MultiKey.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/ScriptExpression.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/CryptoOutput.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/CryptoPSBT.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/CryptoAccount.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/Decoder/index.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/extended/CryptoMultiAccounts.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/errors/index.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/extended/DerivationSchema.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/extended/KeyDerivation.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/extended/QRHardwareCall.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/utils.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/index.d.ts","../../../node_modules/@keystonehq/bc-ur-registry-eth/dist/EthSignRequest.d.ts","../../../node_modules/@keystonehq/bc-ur-registry-eth/dist/EthSignature.d.ts","../../../node_modules/@keystonehq/bc-ur-registry-eth/dist/ETHNFTItem.d.ts","../../../node_modules/@keystonehq/bc-ur-registry-eth/dist/utlis.d.ts","../../../node_modules/@keystonehq/bc-ur-registry-eth/dist/index.d.ts","../../../node_modules/@keystonehq/base-eth-keyring/dist/InteractionProvider.d.ts","../../../node_modules/@keystonehq/base-eth-keyring/dist/BaseKeyring.d.ts","../../../node_modules/@keystonehq/base-eth-keyring/dist/index.d.ts","../../../node_modules/@metamask/obs-store/dist/ObservableStore.d.ts","../../../node_modules/@metamask/obs-store/dist/asStream.d.ts","../../../node_modules/@metamask/obs-store/dist/ComposedStore.d.ts","../../../node_modules/@metamask/obs-store/dist/MergedStore.d.ts","../../../node_modules/@metamask/obs-store/dist/transform.d.ts","../../../node_modules/@metamask/obs-store/dist/index.d.ts","../../../node_modules/@keystonehq/metamask-airgapped-keyring/dist/MetaMaskInteractionProvider.d.ts","../../../node_modules/@keystonehq/metamask-airgapped-keyring/dist/MetaMaskKeyring.d.ts","../../../node_modules/@keystonehq/metamask-airgapped-keyring/dist/index.d.ts","../../../node_modules/@metamask/browser-passworder/dist/index.d.ts","../../message-manager/dist/types/AbstractMessageManager.d.ts","../../controller-utils/dist/types/types.d.ts","../../controller-utils/dist/types/constants.d.ts","../../../node_modules/@metamask/eth-query/index.d.ts","../../../node_modules/@types/bn.js/index.d.ts","../../controller-utils/dist/types/util.d.ts","../../../node_modules/@spruceid/siwe-parser/dist/abnf.d.ts","../../../node_modules/@spruceid/siwe-parser/dist/utils.d.ts","../../../node_modules/@spruceid/siwe-parser/dist/parsers.d.ts","../../controller-utils/dist/types/siwe.d.ts","../../controller-utils/dist/types/index.d.ts","../../message-manager/dist/types/PersonalMessageManager.d.ts","../../message-manager/dist/types/TypedMessageManager.d.ts","../../message-manager/dist/types/EncryptionPublicKeyManager.d.ts","../../message-manager/dist/types/DecryptMessageManager.d.ts","../../message-manager/dist/types/index.d.ts","../../keyring-controller/dist/types/KeyringController.d.ts","../../keyring-controller/dist/types/index.d.ts","../../../node_modules/@metamask/object-multiplex/dist/Substream.d.ts","../../../node_modules/@metamask/object-multiplex/dist/ObjectMultiplex.d.ts","../../../node_modules/@metamask/object-multiplex/dist/index.d.ts","../../../node_modules/@metamask/post-message-stream/dist/utils.d.ts","../../../node_modules/@metamask/post-message-stream/dist/BasePostMessageStream.d.ts","../../../node_modules/@metamask/post-message-stream/dist/window/WindowPostMessageStream.d.ts","../../../node_modules/@metamask/post-message-stream/dist/WebWorker/WebWorkerPostMessageStream.d.ts","../../../node_modules/@metamask/post-message-stream/dist/WebWorker/WebWorkerParentPostMessageStream.d.ts","../../../node_modules/@metamask/post-message-stream/dist/node-process/ProcessParentMessageStream.d.ts","../../../node_modules/@metamask/post-message-stream/dist/node-process/ProcessMessageStream.d.ts","../../../node_modules/@metamask/post-message-stream/dist/node-thread/ThreadParentMessageStream.d.ts","../../../node_modules/@metamask/post-message-stream/dist/node-thread/ThreadMessageStream.d.ts","../../../node_modules/@metamask/post-message-stream/dist/runtime/BrowserRuntimePostMessageStream.d.ts","../../../node_modules/@metamask/post-message-stream/dist/index.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/array.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/auxiliary-files.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/virtual-file/VirtualFile.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/virtual-file/index.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/base64.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/bytes.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/caveats.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/checksum.d.ts","../../../node_modules/cron-parser/types/common.d.ts","../../../node_modules/cron-parser/types/index.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/cronjob.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/deep-clone.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/default-endowments.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/derivation-paths.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/entropy.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/errors.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/handler-types.d.ts","../../../node_modules/@metamask/snaps-sdk/jsx.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/handlers.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/iframe.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/json.d.ts","../../../node_modules/nanoid/index.d.ts","../../approval-controller/dist/types/ApprovalController.d.ts","../../approval-controller/dist/types/errors.d.ts","../../approval-controller/dist/types/index.d.ts","../../../node_modules/@types/deep-freeze-strict/index.d.ts","../../permission-controller/src/permission-middleware.ts","../../permission-controller/src/SubjectMetadataController.ts","../../permission-controller/src/utils.ts","../../permission-controller/src/PermissionController.ts","../../permission-controller/src/Permission.ts","../../permission-controller/src/errors.ts","../../permission-controller/src/Caveat.ts","../../permission-controller/src/rpc-methods/getPermissions.ts","../../permission-controller/src/rpc-methods/requestPermissions.ts","../../permission-controller/src/rpc-methods/revokePermissions.ts","../../permission-controller/src/rpc-methods/index.ts","../../permission-controller/src/index.ts","../../../node_modules/@metamask/snaps-utils/dist/types/json-rpc.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/structs.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/manifest/validation.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/manifest/index.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/localization.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/logging.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/namespace.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/path.d.ts","../../../node_modules/@metamask/snaps-registry/dist/verify.d.ts","../../../node_modules/@metamask/snaps-registry/dist/index.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/types.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/snaps.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/strings.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/ui.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/validation.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/versions.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/index.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/snaps/Timer.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/services/ExecutionService.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/services/AbstractExecutionService.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/services/ProxyPostMessageStream.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/services/iframe/IframeExecutionService.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/services/iframe/index.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/services/proxy/ProxyExecutionService.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/services/offscreen/OffscreenExecutionService.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/services/offscreen/index.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/services/webworker/WebWorkerExecutionService.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/services/webworker/index.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/services/index.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/snaps/location/npm.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/snaps/location/location.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/snaps/location/http.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/snaps/location/local.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/snaps/location/index.d.ts","../../../node_modules/@xstate/fsm/lib/types.d.ts","../../../node_modules/@xstate/fsm/lib/index.d.ts","../../../node_modules/@types/punycode/index.d.ts","../../../node_modules/fastest-levenshtein/mod.d.ts","../../phishing-controller/src/utils.ts","../../phishing-controller/src/PhishingDetector.ts","../../phishing-controller/src/PhishingController.ts","../../phishing-controller/src/index.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/interface/SnapInterfaceController.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/interface/index.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/types/encryptor.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/types/index.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/snaps/registry/registry.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/snaps/registry/json.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/snaps/registry/index.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/snaps/SnapController.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/snaps/selectors.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/snaps/index.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/utils.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/cronjob/CronjobController.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/cronjob/index.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/index.d.ts","../../accounts-controller/dist/types/AccountsController.d.ts","../../../node_modules/@types/uuid/index.d.ts","../../accounts-controller/dist/types/utils.d.ts","../../accounts-controller/dist/types/index.d.ts","../../../node_modules/@metamask/swappable-obj-proxy/dist/types.d.ts","../../../node_modules/@metamask/swappable-obj-proxy/dist/createEventEmitterProxy.d.ts","../../../node_modules/@metamask/swappable-obj-proxy/dist/createSwappableProxy.d.ts","../../../node_modules/@metamask/swappable-obj-proxy/dist/index.d.ts","../../../node_modules/loglevel/index.d.ts","../../network-controller/dist/types/constants.d.ts","../../eth-json-rpc-provider/dist/types/safe-event-emitter-provider.d.ts","../../eth-json-rpc-provider/dist/types/provider-from-engine.d.ts","../../eth-json-rpc-provider/dist/types/provider-from-middleware.d.ts","../../eth-json-rpc-provider/dist/types/index.d.ts","../../../node_modules/@metamask/eth-block-tracker/dist/BlockTracker.d.ts","../../../node_modules/@metamask/eth-block-tracker/dist/PollingBlockTracker.d.ts","../../../node_modules/@metamask/eth-block-tracker/dist/SubscribeBlockTracker.d.ts","../../../node_modules/@metamask/eth-block-tracker/dist/index.d.ts","../../network-controller/dist/types/types.d.ts","../../network-controller/dist/types/create-auto-managed-network-client.d.ts","../../network-controller/dist/types/NetworkController.d.ts","../../network-controller/dist/types/create-network-client.d.ts","../../network-controller/dist/types/index.d.ts","../../polling-controller/dist/types/types.d.ts","../../polling-controller/dist/types/BlockTrackerPollingController.d.ts","../../polling-controller/dist/types/StaticIntervalPollingController.d.ts","../../polling-controller/dist/types/index.d.ts","../../gas-fee-controller/dist/types/GasFeeController.d.ts","../../gas-fee-controller/dist/types/index.d.ts","../../../node_modules/@metamask/nonce-tracker/node_modules/async-mutex/lib/MutexInterface.d.ts","../../../node_modules/@metamask/nonce-tracker/node_modules/async-mutex/lib/Mutex.d.ts","../../../node_modules/@metamask/nonce-tracker/node_modules/async-mutex/lib/SemaphoreInterface.d.ts","../../../node_modules/@metamask/nonce-tracker/node_modules/async-mutex/lib/Semaphore.d.ts","../../../node_modules/@metamask/nonce-tracker/node_modules/async-mutex/lib/withTimeout.d.ts","../../../node_modules/@metamask/nonce-tracker/node_modules/async-mutex/lib/tryAcquire.d.ts","../../../node_modules/@metamask/nonce-tracker/node_modules/async-mutex/lib/errors.d.ts","../../../node_modules/@metamask/nonce-tracker/node_modules/async-mutex/lib/index.d.ts","../../../node_modules/@metamask/nonce-tracker/dist/NonceTracker.d.ts","../../../node_modules/@metamask/nonce-tracker/dist/index.d.ts","../../../node_modules/async-mutex/lib/MutexInterface.d.ts","../../../node_modules/async-mutex/lib/Mutex.d.ts","../../../node_modules/async-mutex/lib/SemaphoreInterface.d.ts","../../../node_modules/async-mutex/lib/Semaphore.d.ts","../../../node_modules/async-mutex/lib/withTimeout.d.ts","../../../node_modules/async-mutex/lib/tryAcquire.d.ts","../../../node_modules/async-mutex/lib/errors.d.ts","../../../node_modules/async-mutex/lib/index.d.ts","../../../node_modules/eth-method-registry/dist/index.d.ts","../../../node_modules/@types/lodash/common/common.d.ts","../../../node_modules/@types/lodash/common/array.d.ts","../../../node_modules/@types/lodash/common/collection.d.ts","../../../node_modules/@types/lodash/common/date.d.ts","../../../node_modules/@types/lodash/common/function.d.ts","../../../node_modules/@types/lodash/common/lang.d.ts","../../../node_modules/@types/lodash/common/math.d.ts","../../../node_modules/@types/lodash/common/number.d.ts","../../../node_modules/@types/lodash/common/object.d.ts","../../../node_modules/@types/lodash/common/seq.d.ts","../../../node_modules/@types/lodash/common/string.d.ts","../../../node_modules/@types/lodash/common/util.d.ts","../../../node_modules/@types/lodash/index.d.ts","../src/logger.ts","../../../node_modules/fast-json-patch/module/helpers.d.ts","../../../node_modules/fast-json-patch/module/core.d.ts","../../../node_modules/fast-json-patch/module/duplex.d.ts","../../../node_modules/fast-json-patch/index.d.ts","../src/types.ts","../src/utils/gas-flow.ts","../src/constants.ts","../src/utils/utils.ts","../src/utils/swaps.ts","../src/utils/gas-fees.ts","../src/gas-flows/DefaultGasFeeFlow.ts","../src/gas-flows/LineaGasFeeFlow.ts","../../../node_modules/@ethersproject/bytes/lib/index.d.ts","../../../node_modules/@ethersproject/bignumber/lib/bignumber.d.ts","../../../node_modules/@ethersproject/bignumber/lib/fixednumber.d.ts","../../../node_modules/@ethersproject/bignumber/lib/index.d.ts","../../../node_modules/@ethersproject/abi/lib/fragments.d.ts","../../../node_modules/@ethersproject/abi/lib/coders/abstract-coder.d.ts","../../../node_modules/@ethersproject/abi/lib/abi-coder.d.ts","../../../node_modules/@ethersproject/properties/lib/index.d.ts","../../../node_modules/@ethersproject/abi/lib/interface.d.ts","../../../node_modules/@ethersproject/abi/lib/index.d.ts","../../../node_modules/@ethersproject/networks/lib/types.d.ts","../../../node_modules/@ethersproject/networks/lib/index.d.ts","../../../node_modules/@ethersproject/transactions/lib/index.d.ts","../../../node_modules/@ethersproject/web/lib/index.d.ts","../../../node_modules/@ethersproject/abstract-provider/lib/index.d.ts","../../../node_modules/@ethersproject/abstract-signer/lib/index.d.ts","../../../node_modules/@ethersproject/contracts/lib/index.d.ts","../../../node_modules/@ethersproject/providers/lib/formatter.d.ts","../../../node_modules/@ethersproject/providers/lib/base-provider.d.ts","../../../node_modules/@ethersproject/providers/lib/json-rpc-provider.d.ts","../../../node_modules/@ethersproject/providers/lib/websocket-provider.d.ts","../../../node_modules/@ethersproject/providers/lib/url-json-rpc-provider.d.ts","../../../node_modules/@ethersproject/providers/lib/alchemy-provider.d.ts","../../../node_modules/@ethersproject/providers/lib/ankr-provider.d.ts","../../../node_modules/@ethersproject/providers/lib/cloudflare-provider.d.ts","../../../node_modules/@ethersproject/providers/lib/etherscan-provider.d.ts","../../../node_modules/@ethersproject/providers/lib/fallback-provider.d.ts","../../../node_modules/@ethersproject/providers/lib/ipc-provider.d.ts","../../../node_modules/@ethersproject/providers/lib/infura-provider.d.ts","../../../node_modules/@ethersproject/providers/lib/json-rpc-batch-provider.d.ts","../../../node_modules/@ethersproject/providers/lib/nodesmith-provider.d.ts","../../../node_modules/@ethersproject/providers/lib/pocket-provider.d.ts","../../../node_modules/@ethersproject/providers/lib/web3-provider.d.ts","../../../node_modules/@ethersproject/providers/lib/index.d.ts","../src/gas-flows/OracleLayer1GasFeeFlow.ts","../src/gas-flows/OptimismLayer1GasFeeFlow.ts","../src/gas-flows/ScrollLayer1GasFeeFlow.ts","../src/gas-flows/TestGasFeeFlow.ts","../src/utils/etherscan.ts","../src/helpers/EtherscanRemoteTransactionSource.ts","../src/utils/layer1-gas-fee-flow.ts","../src/helpers/GasFeePoller.ts","../src/helpers/IncomingTransactionHelper.ts","../src/helpers/PendingTransactionTracker.ts","../src/helpers/MultichainTrackingHelper.ts","../src/utils/external-transactions.ts","../src/utils/gas.ts","../src/utils/history.ts","../src/utils/nonce.ts","../../../node_modules/@metamask/metamask-eth-abis/dist/abis/abiERC20.d.ts","../../../node_modules/@metamask/metamask-eth-abis/dist/abis/abiERC721.d.ts","../../../node_modules/@metamask/metamask-eth-abis/dist/abis/abiERC1155.d.ts","../../../node_modules/@metamask/metamask-eth-abis/dist/abis/fiatTokenV2.d.ts","../../../node_modules/@metamask/metamask-eth-abis/dist/index.d.ts","../src/errors.ts","../src/utils/simulation-api.ts","../src/utils/simulation.ts","../src/utils/transaction-type.ts","../src/utils/validation.ts","../src/TransactionController.ts","../src/index.ts","../../../node_modules/@babel/types/lib/index.d.ts","../../../node_modules/@types/babel__generator/index.d.ts","../../../node_modules/@babel/parser/typings/babel-parser.d.ts","../../../node_modules/@types/babel__template/index.d.ts","../../../node_modules/@types/babel__traverse/index.d.ts","../../../node_modules/@types/babel__core/index.d.ts","../../../node_modules/@types/eslint/helpers.d.ts","../../../node_modules/@types/estree/index.d.ts","../../../node_modules/@types/json-schema/index.d.ts","../../../node_modules/@types/eslint/index.d.ts","../../../node_modules/@types/graceful-fs/index.d.ts","../../../node_modules/@types/istanbul-lib-coverage/index.d.ts","../../../node_modules/@types/istanbul-lib-report/index.d.ts","../../../node_modules/@types/istanbul-reports/index.d.ts","../../../node_modules/chalk/index.d.ts","../../../node_modules/jest-diff/build/cleanupSemantic.d.ts","../../../node_modules/pretty-format/build/types.d.ts","../../../node_modules/pretty-format/build/index.d.ts","../../../node_modules/jest-diff/build/types.d.ts","../../../node_modules/jest-diff/build/diffLines.d.ts","../../../node_modules/jest-diff/build/printDiffs.d.ts","../../../node_modules/jest-diff/build/index.d.ts","../../../node_modules/jest-matcher-utils/build/index.d.ts","../../../node_modules/@types/jest/index.d.ts","../../../node_modules/@types/jest-when/index.d.ts","../../../node_modules/@types/json5/index.d.ts","../../../node_modules/@types/minimatch/index.d.ts","../../../node_modules/@types/parse-json/index.d.ts","../../../node_modules/@types/pbkdf2/index.d.ts","../../../node_modules/@types/prettier/index.d.ts","../../../node_modules/@types/secp256k1/index.d.ts","../../../node_modules/@types/semver/classes/semver.d.ts","../../../node_modules/@types/semver/functions/parse.d.ts","../../../node_modules/@types/semver/functions/valid.d.ts","../../../node_modules/@types/semver/functions/clean.d.ts","../../../node_modules/@types/semver/functions/inc.d.ts","../../../node_modules/@types/semver/functions/diff.d.ts","../../../node_modules/@types/semver/functions/major.d.ts","../../../node_modules/@types/semver/functions/minor.d.ts","../../../node_modules/@types/semver/functions/patch.d.ts","../../../node_modules/@types/semver/functions/prerelease.d.ts","../../../node_modules/@types/semver/functions/compare.d.ts","../../../node_modules/@types/semver/functions/rcompare.d.ts","../../../node_modules/@types/semver/functions/compare-loose.d.ts","../../../node_modules/@types/semver/functions/compare-build.d.ts","../../../node_modules/@types/semver/functions/sort.d.ts","../../../node_modules/@types/semver/functions/rsort.d.ts","../../../node_modules/@types/semver/functions/gt.d.ts","../../../node_modules/@types/semver/functions/lt.d.ts","../../../node_modules/@types/semver/functions/eq.d.ts","../../../node_modules/@types/semver/functions/neq.d.ts","../../../node_modules/@types/semver/functions/gte.d.ts","../../../node_modules/@types/semver/functions/lte.d.ts","../../../node_modules/@types/semver/functions/cmp.d.ts","../../../node_modules/@types/semver/functions/coerce.d.ts","../../../node_modules/@types/semver/classes/comparator.d.ts","../../../node_modules/@types/semver/classes/range.d.ts","../../../node_modules/@types/semver/functions/satisfies.d.ts","../../../node_modules/@types/semver/ranges/max-satisfying.d.ts","../../../node_modules/@types/semver/ranges/min-satisfying.d.ts","../../../node_modules/@types/semver/ranges/to-comparators.d.ts","../../../node_modules/@types/semver/ranges/min-version.d.ts","../../../node_modules/@types/semver/ranges/valid.d.ts","../../../node_modules/@types/semver/ranges/outside.d.ts","../../../node_modules/@types/semver/ranges/gtr.d.ts","../../../node_modules/@types/semver/ranges/ltr.d.ts","../../../node_modules/@types/semver/ranges/intersects.d.ts","../../../node_modules/@types/semver/ranges/simplify.d.ts","../../../node_modules/@types/semver/ranges/subset.d.ts","../../../node_modules/@types/semver/internals/identifiers.d.ts","../../../node_modules/@types/semver/index.d.ts","../../../node_modules/@types/sinonjs__fake-timers/index.d.ts","../../../node_modules/@types/sinon/index.d.ts","../../../node_modules/@types/stack-utils/index.d.ts","../../../node_modules/@types/yargs-parser/index.d.ts","../../../node_modules/@types/yargs/index.d.ts"],"fileInfos":[{"version":"8730f4bf322026ff5229336391a18bcaa1f94d4f82416c8b2f3954e2ccaae2ba","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","4b421cbfb3a38a27c279dec1e9112c3d1da296f77a1a85ddadf7e7a425d45d18","1fc5ab7a764205c68fa10d381b08417795fc73111d6dd16b5b1ed36badb743d9",{"version":"3aafcb693fe5b5c3bd277bd4c3a617b53db474fe498fc5df067c5603b1eebde7","affectsGlobalScope":true},{"version":"adb996790133eb33b33aadb9c09f15c2c575e71fb57a62de8bf74dbf59ec7dfb","affectsGlobalScope":true},{"version":"8cc8c5a3bac513368b0157f3d8b31cfdcfe78b56d3724f30f80ed9715e404af8","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"c5c05907c02476e4bde6b7e76a79ffcd948aedd14b6a8f56e4674221b0417398","affectsGlobalScope":true},{"version":"5f406584aef28a331c36523df688ca3650288d14f39c5d2e555c95f0d2ff8f6f","affectsGlobalScope":true},{"version":"22f230e544b35349cfb3bd9110b6ef37b41c6d6c43c3314a31bd0d9652fcec72","affectsGlobalScope":true},{"version":"7ea0b55f6b315cf9ac2ad622b0a7813315bb6e97bf4bb3fbf8f8affbca7dc695","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"eb26de841c52236d8222f87e9e6a235332e0788af8c87a71e9e210314300410a","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"81cac4cbc92c0c839c70f8ffb94eb61e2d32dc1c3cf6d95844ca099463cf37ea","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"d154ea5bb7f7f9001ed9153e876b2d5b8f5c2bb9ec02b3ae0d239ec769f1f2ae","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true},{"version":"6e7997ef61de3132e4d4b2250e75343f487903ddf5370e7ce33cf1b9db9a63ed","affectsGlobalScope":true},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true},{"version":"5e5e095c4470c8bab227dbbc61374878ecead104c74ab9960d3adcccfee23205","affectsGlobalScope":true},{"version":"09aa50414b80c023553090e2f53827f007a301bc34b0495bfb2c3c08ab9ad1eb","affectsGlobalScope":true},{"version":"d7f680a43f8cd12a6b6122c07c54ba40952b0c8aa140dcfcf32eb9e6cb028596","affectsGlobalScope":true},{"version":"3787b83e297de7c315d55d4a7c546ae28e5f6c0a361b7a1dcec1f1f50a54ef11","affectsGlobalScope":true},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true},{"version":"2768ef564cfc0689a1b76106c421a2909bdff0acbe87da010785adab80efdd5c","affectsGlobalScope":true},{"version":"b248e32ca52e8f5571390a4142558ae4f203ae2f94d5bac38a3084d529ef4e58","affectsGlobalScope":true},{"version":"52d1bb7ab7a3306fd0375c8bff560feed26ed676a5b0457fa8027b563aecb9a4","affectsGlobalScope":true},"70bbfaec021ac4a0c805374225b55d70887f987df8b8dd7711d79464bb7b4385","869089d60b67219f63e6aca810284c89bae1b384b5cbc7ce64e53d82ad223ed5","fe8f00e1ffe6c8069f2568844debb342a661980c30e52b132f002b93f66de47e",{"version":"f31113ac9492fdd6e78bf6151b338c92e5b1837be426ef4aa0648ce82d13b518","affectsGlobalScope":true},"62a0875a0397b35a2364f1d401c0ce17975dfa4d47bf6844de858ae04da349f9","ee7491d0318d1fafcba97d5b72b450eb52671570f7a4ecd9e8898d40eaae9472","e3e7d217d89b380c1f34395eadc9289542851b0f0a64007dfe1fb7cf7423d24e","fd79909e93b4d50fd0ed9f3d39ddf8ba0653290bac25c295aac49f6befbd081b","345a9cc2945406f53051cd0e9b51f82e1e53929848eab046fdda91ee8aa7da31","9debe2de883da37a914e5e784a7be54c201b8f1d783822ad6f443ff409a5ea21","dee5d5c5440cda1f3668f11809a5503c30db0476ad117dd450f7ba5a45300e8f","f5e396c1424c391078c866d6f84afe0b4d2f7f85a160b9c756cd63b5b1775d93","5caa6f4fff16066d377d4e254f6c34c16540da3809cd66cd626a303bc33c419f","730d055528bdf12c8524870bb33d237991be9084c57634e56e5d8075f6605e02","5b3cd03ae354ea96eff1f74d7c410fe4852e6382227e8b0ecf87ab5e3a5bbcd4","7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419",{"version":"056097110efd16869ec118cedb44ecbac9a019576eee808d61304ca6d5cb2cbe","affectsGlobalScope":true},"f51b4042a3ac86f1f707500a9768f88d0b0c1fc3f3e45a73333283dea720cdc6",{"version":"6fb8358e10ed92a7f515b7d79da3904c955a3ffd4e14aa9df6f0ea113041f1cf","affectsGlobalScope":true},"45c831238c6dac21c72da5f335747736a56a3847192bf03c84b958a7e9ec93e2","661a11d16ad2e3543a77c53bcd4017ee9a450f47ab7def3ab493a86eae4d550c",{"version":"8cdc646cec7819581ef343b83855b1bfe4fe674f2c84f4fb8dc90d82fb56bd3a","affectsGlobalScope":true},"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb","9dd56225cc2d8cb8fe5ceb0043ff386987637e12fecc6078896058a99deae284","2375ed4b439215aa3b6d0c6fd175c78a4384b30cb43cbadaecbf0a18954c98cb","7693b90b3075deaccafd5efb467bf9f2b747a3075be888652ef73e64396d8628","41231da15bb5e3e806a8395bd15c7befd2ec90f9f4e3c9d0ae1356bccb76dbb0","fccfef201d057cb407fa515311bd608549bab6c7b8adcf8f2df31f5d3b796478",{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true},"5f20d20b7607174caf1a6da9141aeb9f2142159ae2410ca30c7a0fccd1d19c99",{"version":"464762c6213566d072f1ced5e8e9a954785ec5e53883b7397198abb5ef5b8f71","affectsGlobalScope":true},"6387920dc3e18927335b086deec75bf8e50f879a5e273d32ee7bb7a55ba50572","9bba37424094688c4663c177a1379b229f919b8912889a472f32fdc5f08ddb4d","29a4be13b3a30d3e66667b75c58ec61fb2df8fa0422534fdee3cfb30c5dbf450","83366d901beda79d6eb37aaaf6ca248dcd88946302b2a7d975590783be51e88e","bf268a0aea37ad4ae3b7a9b58559190b6fc01ea16a31e35cd05817a0a60f895a","43ec77c369473e92e2ecebf0554a0fdaa9c256644a6070f28228dfcceec77351",{"version":"d7dad6db394a3d9f7b49755e4b610fbf8ed6eb0c9810ae5f1a119f6b5d76de45","affectsGlobalScope":true},"95ed02bacb4502c985b69742ec82a4576d4ff4a6620ecc91593f611d502ae546","bf755525c4e6f85a970b98c4755d98e8aa1b6dbd83a5d8fcc57d3d497351b936","dd67d2b5e4e8a182a38de8e69fb736945eaa4588e0909c14e01a14bd3cc1fd1e",{"version":"28084e15b63e6211769db2fe646d8bc5c4c6776321e0deffe2d12eefd52cb6b9","affectsGlobalScope":true},{"version":"aed37dabf86c99d6c8508700576ecede86688397bc12523541858705a0c737c2","affectsGlobalScope":true},"cc6ef5733d4ea6d2e06310a32dffd2c16418b467c5033d49cecc4f3a25de7497","94768454c3348b6ebe48e45fbad8c92e2bb7af4a35243edbe2b90823d0bd7f9a","0be79b3ff0f16b6c2f9bc8c4cc7097ea417d8d67f8267f7e1eec8e32b548c2ff","1c61ffa3a71b77363b30d19832c269ef62fba787f5610cac7254728d3b69ab2e","84da3c28344e621fd1d591f2c09e9595292d2b70018da28a553268ac122597d4","269929a24b2816343a178008ac9ae9248304d92a8ba8e233055e0ed6dbe6ef71","6e191fea1db6e9e4fa828259cf489e820ec9170effff57fb081a2f3295db4722","aed943465fbce1efe49ee16b5ea409050f15cd8eaf116f6fadb64ef0772e7d95","70d08483a67bf7050dbedace398ef3fee9f436fcd60517c97c4c1e22e3c6f3e8","c40fdf7b2e18df49ce0568e37f0292c12807a0748be79e272745e7216bed2606",{"version":"e933de8143e1d12dd51d89b398760fd5a9081896be366dad88a922d0b29f3c69","affectsGlobalScope":true},"4e228e78c1e9b0a75c70588d59288f63a6258e8b1fe4a67b0c53fe03461421d9","b38d55d08708c2410a3039687db70b4a5bfa69fc4845617c313b5a10d9c5c637","205d50c24359ead003dc537b9b65d2a64208dfdffe368f403cf9e0357831db9e","1265fddcd0c68be9d2a3b29805d0280484c961264dd95e0b675f7bd91f777e78",{"version":"a05e2d784c9be7051c4ac87a407c66d2106e23490c18c038bbd0712bde7602fd","affectsGlobalScope":true},{"version":"df90b9d0e9980762da8daf8adf6ffa0c853e76bfd269c377be0d07a9ad87acd2","affectsGlobalScope":true},"cf434b5c04792f62d6f4bdd5e2c8673f36e638e910333c172614d5def9b17f98","1d65d4798df9c2df008884035c41d3e67731f29db5ecb64cd7378797c7c53a2f","0faee6b555890a1cb106e2adc5d3ffd89545b1da894d474e9d436596d654998f","c6c01ea1c42508edf11a36d13b70f6e35774f74355ba5d358354d4a77cc67ea1","867f95abf1df444aab146b19847391fc2f922a55f6a970a27ed8226766cee29f",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"b0297b09e607bec9698cac7cf55463d6731406efb1161ee4d448293b47397c84","175323e2a79a6076e0bada8a390d535a3ea817158bf1b1f46e31efca9028a0a2","7a10053aadc19335532a4d02756db4865974fd69bea5439ddcc5bfdf062d9476","4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","aed9e712a9b168345362e8f3a949f16c99ca1e05d21328f05735dfdbb24414ef","b04fe6922ed3db93afdbd49cdda8576aa75f744592fceea96fb0d5f32158c4f5","ed8d6c8de90fc2a4faaebc28e91f2469928738efd5208fb75ade0fa607e892b7","d7c52b198d680fe65b1a8d1b001f0173ffa2536ca2e7082431d726ce1f6714cd","c07f251e1c4e415a838e5498380b55cfea94f3513229de292d2aa85ae52fc3e9","0ed401424892d6bf294a5374efe512d6951b54a71e5dd0290c55b6d0d915f6f7","b945be6da6a3616ef3a250bfe223362b1c7c6872e775b0c4d82a1bf7a28ff902","beea49237dd7c7110fabf3c7509919c9cb9da841d847c53cac162dc3479e2f87","0f45f8a529c450d8f394106cc622bff79e44a1716e1ac9c3cc68b43f7ecf65ee","c624ce90b04c27ce4f318ba6330d39bde3d4e306f0f497ce78d4bda5ab8e22ca","9b8253aa5cb2c82d505f72afdbf96e83b15cc6b9a6f4fadbbbab46210d5f1977","86a8f52e4b1ac49155e889376bcfa8528a634c90c27fec65aa0e949f77b740c5","aab5dd41c1e2316cc0b42a7dd15684f8582d5a1d16c0516276a2a8a7d0fecd9c","59948226626ee210045296ba1fc6cb0fe748d1ff613204e08e7157ab6862dee7","ec3e54d8b713c170fdc8110a7e4a6a97513a7ab6b05ac9e1100cb064d2bb7349","43beb30ecb39a603fde4376554887310b0699f25f7f39c5c91e3147b51bb3a26","666b77d7f06f49da114b090a399abbfa66d5b6c01a3fd9dc4f063a52ace28507","31997714a93fbc570f52d47d6a8ebfb021a34a68ea9ba58bbb69cdec9565657e","6032e4262822160128e644de3fc4410bcd7517c2f137525fd2623d2bb23cb0d3","8bd5c9b1016629c144fd228983395b9dbf0676a576716bc3d316cab612c33cd5","2ed90bd3925b23aed8f859ffd0e885250be0424ca2b57e9866dabef152e1d6b7","93f6bd17d92dab9db7897e1430a5aeaa03bcf51623156213d8397710367a76ce","3f62b770a42e8c47c7008726f95aa383e69d97e85e680d237b99fcb0ee601dd8","5b84cfe78028c35c3bb89c042f18bf08d09da11e82d275c378ae4d07d8477e6c","75b22c74010ba649de1a1676a4c4b8b5bb4294fecd05089e2094429b16d7840c","5615ccf831db2ffc82145243081ebdb60ea8e1005ee8f975d1c0c1401a9c894e","38682ed3630bb6ecdace80d5a9adc811fc20a419f1940446e306c3a020d083b9","cc182e6e4f691cd6f7bf7cb491247a4c7818f9f1cb2db1d45c65ff906e3f741b","a50599c08934a62f11657bdbe0dc929ab66da1b1f09974408fd9a33ec1bb8060","5a20e7d6c630b91be15e9b837853173829d00273197481dc8d3e94df61105a71","8d478048d71cc16f806d4b71b252ecb67c7444ccf4f4b09b29a312712184f859","e0eda929c6b9b628cdeb0e54cd3582cb97e64f28aab34612fc1431c545899584","9df4662ca3dbc2522bc115833ee04faa1afbb4e249a85ef4a0a09c621346bd08","b25d9065cf1c1f537a140bbc508e953ed2262f77134574c432d206ff36f4bdbf","1b103313097041aa9cd705a682c652f08613cb5cf8663321061c0902f845e81c","68ccec8662818911d8a12b8ed028bc5729fb4f1d34793c4701265ba60bc73cf4","5f85b8b79dc4d36af672c035b2beb71545de63a5d60bccbeee64c260941672ab","b3d48529ae61dc27d0bfbfa2cb3e0dff8189644bd155bdf5df1e8e14669f7043","40fe4b689225816b31fe5794c0fbf3534568819709e40295ead998a2bc1ab237","f65b5e33b9ad545a1eebbd6afe857314725ad42aaf069913e33f928ab3e4990a","fb6f2a87beb7fb1f4c2b762d0c76a9459fc91f557231569b0ee21399e22aa13d","31c858dc85996fac4b7fa944e1016d5c72f514930a72357ab5001097bf6511c7","3de30a871b3340be8b679c52aa12f90dd1c8c60874517be58968fdbcc4d79445","6fd985bd31eaf77542625306fb0404d32bff978990f0a06428e5f0b9a3b58109","980d21b0081cbf81774083b1e3a46f4bbdcd2b68858df0f66d7fad9c82bc34bc","68cc8d6fcc2f270d7108f02f3ebc59480a54615be3e09a47e14527f349e9d53e","3eb11dbf3489064a47a2e1cf9d261b1f100ef0b3b50ffca6c44dd99d6dd81ac1","b17f3bb7d8333479c7e45e5f3d876761b9bca58f97594eca3f6a944fd825e632","3c1f1236cce6d6e0c4e2c1b4371e6f72d7c14842ecd76a98ed0748ee5730c8f3","6d7f58d5ea72d7834946fd7104a734dc7d40661be8b2e1eaced1ddce3268ebaf","4c26222991e6c97d5a8f541d4f2c67585eda9e8b33cf9f52931b098045236e88","277983d414aa99d78655186c3ee1e1c38c302e336aff1d77b47fcdc39d8273fe","47383b45796d525a4039cd22d2840ac55a1ff03a43d027f7f867ba7314a9cf53","6548773b3abbc18de29176c2141f766d4e437e40596ee480447abf83575445ad","6ddd27af0436ce59dd4c1896e2bfdb2bdb2529847d078b83ce67a144dff05491","816264799aef3fd5a09a3b6c25217d5ec26a9dfc7465eac7d6073bcdc7d88f3f","4df0891b133884cd9ed752d31c7d0ec0a09234e9ed5394abffd3c660761598db","b603b62d3dcd31ef757dc7339b4fa8acdbca318b0fb9ac485f9a1351955615f9","e642bd47b75ad6b53cbf0dfd7ddfa0f120bd10193f0c58ec37d87b59bf604aca","be90b24d2ee6f875ce3aaa482e7c41a54278856b03d04212681c4032df62baf9","78f5ff400b3cb37e7b90eef1ff311253ed31c8cb66505e9828fad099bffde021","372c47090e1131305d163469a895ff2938f33fa73aad988df31cd31743f9efb6","71c67dc6987bdbd5599353f90009ff825dd7db0450ef9a0aee5bb0c574d18512","6f12403b5eca6ae7ca8e3efe3eeb9c683b06ce3e3844ccfd04098d83cd7e4957","282c535df88175d64d9df4550d2fd1176fd940c1c6822f1e7584003237f179d3","c3a4752cf103e4c6034d5bd449c8f9d5e7b352d22a5f8f9a41a8efb11646f9c2","11a9e38611ac3c77c74240c58b6bd64a0032128b29354e999650f1de1e034b1c","4ed103ca6fff9cb244f7c4b86d1eb28ce8069c32db720784329946731badb5bb","d738f282842970e058672663311c6875482ee36607c88b98ffb6604fba99cb2a","ec859cd8226aa623e41bbb47c249a55ee16dc1b8647359585244d57d3a5ed0c7","8891c6e959d253a66434ff5dc9ae46058fb3493e84b4ca39f710ef2d350656b1","c4463cf02535444dcbc3e67ecd29f1972490f74e49957d6fd4282a1013796ba6","0cb0a957ff02de0b25fd0f3f37130ca7f22d1e0dea256569c714c1f73c6791f8","2f5075dc512d51786b1ba3b1696565641dfaae3ac854f5f13d61fa12ef81a47e","ca3353cc82b1981f0d25d71d7432d583a6ef882ccdea82d65fbe49af37be51cb","50679a8e27aacf72f8c40bcab15d7ef5e83494089b4726b83eec4554344d5cdc","45351e0d51780b6f4088277a4457b9879506ee2720a887de232df0f1efcb33d8","e2d6963e7bf7186e30b7a4c9859aba4e96eda6d1be537e5b1a43bdddc7e9dc8f","10afdd7bba6ec9b7f95a4b419b2dbb64245fea4a61bbe7d68e2f841b414f7312","413121b26b3bd9f7fea237f15f564ee2b95bcd0cceec1b1621075375ccc0c0e0","d2af215963d01cef397ce8fa2f7ad08ee8beffdd39fe14b96021ddf26554b59f","2fc9848431d0f5e2b49bb312aaf07dd2d5a34300a2ced60200a2da49e6a82b43","c5ee2b685431ea2b9aacd9bb9e15cac1ecfa5c448972b188432313354d47c848","3e69be1137d88eb0730332aed359caedea4a27903da15dbe6a1615fa11206807","2283d079c3945b6e5ca8b9355311a213e03b74bffc65a3234c3c141a0a795700","f47272f05bd57f4356abc81232bded724d13e54f0fd801e0fb93a58237db1829","07ae8e9890f49ef6ebe629e339ac590025606a1e96754965bbb2bf889199ced2","d5c19655468e29f60c871b21e73af8ebc653f736e7123ade916f22c4a5f80ce5","6a8649609161e2794b383ba275b0a6cb4a072dde7b954648f83dc6cdf1bfe4a8","601d4a40a69c782addaf84185d4547568ec072095ab9976610d89922d1291f8b","d5c19655468e29f60c871b21e73af8ebc653f736e7123ade916f22c4a5f80ce5","b5c9c8c4a2cd1cb9f76d849fb472d475c3cebdd48306414a4a19bd11d82c4055","b61e6a808f5f50873ac03f35d5a38fa8d4dd23a24f80ab69df1a032e8c71562d","c8be9283a381044a392a0687af5d98d3f51cbada2320b1801a82c948b6e39499","85052c71d72b9b017c88179f57a464d66e22619c7acd7d83b117a79cf1608979","502cd7c30fe21e2c36b62913d0cb5d20affc8779b3ad40881b26d90a22de3aaa","6d3101b183ea67ef606b93fe42127f30b2db5ac3b72c34ca9d6d8b00eb85d0f6","f5d7a36ff056cc314b0f61c89a03c4c36a24183b246e61d958e75e86521304cd","ff30e8237e23dde68041b5f09526ee86835b12c5d8b6421c1153093fdbeb9438","f516fc1e77e5ffd71fbe705b679797c3c5eb76bf76a88549e6316a29f3e197f7","b5b1110565ac688b660a893654a6c1bce6747f3aa6f847001a8a5ff4412394ba","3a971ea3e36685b96f24fbd53a94ad8dc061711b84e51fde4cf201f7041e618d","9b6c162d20e2ad4abdcff61a24082564ac59e63092220618162aef6e440c9228","7804ff981554ba1a0592481072806fc39dc1484791beda43eb7a60e16e70a360","fcc8beef29f39f09b1d9c9f99c42f9fed605ab1c28d2a630185f732b9ba53763","d6e6620a30d582182acc3f0a992a0c311adc589f111096aea11ab83fc09a5ccc","6213b8f686f56beab22b59a0f468590fd3a4c5fa931236a017efeca91d7c9584","c451cec9a588b1f105a5ea2c6063d4fca112b9d70105cacdadda0e1ef67e9379","cb047832dc68f5a2c41c62c5e95ddcacbae3a8b034d40cd15319a8cb7f25104a","980336ccdfc3c08f3c3b201aa6662e6016e20f15847f8465b68f3e8e67b4665c","5a3493939995f46ff3d9073cd534fb8961c3bf4e08c71db27066ff03d906dea8","8f333214062532989f190aed5f99c62eb820722e41956e8229e17cd246fbdd10","d1f010c19eb9c8190bd0859fa3b6f4975543b912b8b85e20bbb0b5bfbdf4d2b3","de4ccc96cef3f97fab148640799abb32a24b567a902a8233913f98481e3131bf",{"version":"801934aa449fe6df584bccdcc5d5b9280295cb7ac84918b6014fc5086e6f9ff6","affectsGlobalScope":true},"5e379df3d61561c2ed7789b5995b9ba2143bbba21a905e2381e16efe7d1fa424","f07a137bbe2de7a122c37bfea00e761975fb264c49f18003d398d71b3fb35a5f","6af760fb9ea02dc807c5053d8aee86389c4fce72fbb26af7b9568cac6c4710d5","c62c4ba5e910b4523f7e7adf4a55ec45c2bac99d9d8e9b0fe0c2a800a6f641b9","92131434f876fdd6fcbc40bd54a9d7500c66974362b16bd42641f990468587f4","8cf023c0bd57992fdd2ce6a7030a1874f49c8edc62eaffa9bfffcf18d2a2a1a2","8ea8f3040e38fb50d7dc3653f3b8a0dbb5244e82111576f99ce096bdc0fbf94c","48ed788ad126545a6156fcc37cd3bcf17de18a3e3fe6b6ef62cfb8140d1a45a2","63c271a745f628ffd4bd7ad0a63b021c362c9bd6bf8b18441a7162892395a214","8d3457e6c7c5cb890729fb60cb8db18f261226a3ea3ff6a4db4b84ea78313ace","9f9e5bae412fa5909fae636d6733aee27a108cc2ed5b13980611016336774d3c","662fe197bba64bd3f17ee118058cd2d0d2dbe33d7c0c865fd6365d90bfc44e1e","030519c351f800551cac2658038804969ca4584d2c0175a710602ac234ca1340","0278a6939ca83cd040b08ff8c5fc7838b6693ddc52f22526bf158e6b10e0246c","c2d6206e5ba4fd3063b01218c2b3b997afc1cfbeb49fcee991fa8595842ce53d","6a8096993458a3d71229031aa7415974eb5b47b320213e29660adfb519d6a3f4","cb7996a1af5b1d276483cd0c9b9de6540eff021abc90a720511ff4464519a2ff","9df6ec68878d65bc690ea3a33ce3ef5aa8254c36bc5f8346c0c2fd1f3b88a35c","a4fad04c4acc8a4b195cbbccef4c55019104753d547d5c94441643ccc89108a0","0244c23ea642361f7c192c1f0cfff9c12cfa5f51f9b155edd5c0a89fef308d34","c7298e68632ab03155f6de963d3d09cc4a5874c28a81524f56c667d8a052e538","3c69a83bde847af6fc3a53e1bb6b13cd06d38a27a142814b8dacc374f3b93284","5b46f7113f54565e7ffc83f2b474f557a1f54c7e5946769d5be220454656be73","fb58035d39c5759283cb73cfb3548aefe370aa3ad4e81fdb4e46f0979eb7669f","1311c325948b2d5576cebc70b1bf968d3446b4630802bef54120daf04ce1f625","d0b3609e8e7afed0fd0570152255458407e67249b94f6603afdfd68599423f21","17f4c5a1d6eaa87ea27eadcdff9085af3190533d98f799dda79a3af6f9a630ea","3e6f734ddf40e2e99ff7fff9568b7d9720663af9a0632c26a352c8d3270a3f0e","ec13f78303abcf550c5569dfae1446b8ceb89050f68ce04491481e72e8122ae2","a3fc57dbaa7f1efb010399ad4ef4fd9b462aa4e93bf74a9a34b099b97ffcc9cb","ffddd7ec6a450b0cb6f2f73f80de1df963ead312d7c81a8440268f34146ecb87","5d6a36ca0087fd6876df654d1b4192f0e402adfde994ad47e5c065da33692f9c","eb157a09c5f543d98644e2a99a785f9e0e91f054f9fecbf1c3e15831ff5d63a7","edd5530e2b1ccdf65093296e40a8634fcb11ecda3c164c31383a8c34cb04bc9d","9dfaf96d090fe8d96143465d85b4837661ae535143eea9ef99cd20df2e66338e","209d45c27e03c1417c42985252de6c25a2ec23abdc199d88e6139c88b93abd11","0ee5cdba58cfde3012bb9ff2e9edcc4e35a651373a2aa2c83ff9eb7df635419a","540f4dca27ea5a232828b6d91e1b2fce2720bdabaa4c1f3fbf59b672cc58bd8a","ba086b99d545ec6c9ff356989f076b5652ea1b09bcc65b87dfc43a5195a2efcc","c85d9776b36166b928ab1488d9224ebf970d41b0a35f09a3ee0b9bee3e698061","683196f606c5dab1c8c4a24a66d26e00f16f2d4b2a5abe25ebedd37d2954f930","9c3a1b01cba1238fb723ce06b6c163ef6c53be755394406782564d5c42c636b2","6e795e6270d39e918c7a0e62ac73793cda06fcf4b3692ee46583e15f5bf57ab8","0e821ef1eb67fa6144ea4de4277d913f5b1982d7407afd5f93754a8239d41554","5c09195ef359ffa9c6bbdb4fefb101d87ede4b9e9c28213faf5b45d102e4c609","80b4d93a4dcc90a12f6f4bb7c6851a8182ae29e556716d0d80b5c012a5ef554a","2556ef9d1820e0b6bbca6dd65a50ea64f525c4d8247ab50dff44c3f0d14a5643","cbd1c836db190d6e3add07165afc228f04e1f6170e1fe3aa5e6fc24a7e9573a3","9b13881feb958237232586d888a10a39d47cdffe3ee34688ed41888fa7baad94","122fe82cf5af80f0b26832b258b537b7dfe3ec28449c301b259ab10204b50d45","c467dada8fea6d60dff8a8be2675f737cacc76e14e50b72daa0f0710376df84b","9cb80bba611c2dd155a446ce424fe4bb1df2129751bc9416b7e42c055d1ddbff","6ee568039016b81ed70292a595ab781ab978cba4243a5fe49507040ee4f7ac8a","043783bebe87efb440183c9ebc8c4fdc1bb92060a5a0f7ce847e30dee7013ac3","e3dc0a97a59dea936b4fb7b1f6f4117b4aac9c86d0cd08b69bab2d0532a8a5e3","5d897601f8a4fe913057019d8211b99b06e3138f625a0cfb601d074f4278271d","a68bb369c4ba8ab43a78f3fad2d3ec130e1418bc946521b9c84e9b336d6e88f1","65f219e6e1f9d27c677a49d41ae7989b83bf6baa56debbeb50d95c3ab21632e2","cfde5d194dd858ad68f910defaed5b0d28730f8bf38359a9265a93ab29bc7bef","c89354ae268153d965011e484150f0c92faa87f3f66507c25b496973178e0400","f20aae41b169cddcbf3fde8ac380443182c8d7225194e788c404d9e11e6dc75d","a6f4816a634bb1ceb513634c1ef7c0535f461ed2565336eed69f6ac2babbe15b","c48566cb13403fca44192b4528e3f2ac993869d39526bd42cd2f2167c0285add","efae20e0c581240c7522e04829da4f0453ca263068596554d4b0e27878c7dfac","3af68ef927788cda7daab34be513fa4508229fdc6e5130d564a0a1ccb3fefafe","bbbd2cbb15a37d5f4dd54ad8c7c537d3df8352117523030fcec7dcbe62a05a58","b50d24ebc117f8805332e7e260e9587f572bb7b2ff0ca1ff6cfafb38015781f3","5cc8b8e18fe7fefab4b3c53a39467b5a0deb4200abae7f063ff0624b9e856c51","8e990781eb0107c25429b1274a31a4f3866a9a46290cce40f354b2a6e71c6c21","608c45069e89c4c8f0ab29f896cc93c6553808072d6304b23611b6c6de3c24bb","22cbabe752781b5f35482af9d1fcf1455cb1ece74e8b84700d4abcb44abe3776","b9ce4613536386a98897f1e3d8f61a851ce6cb34dc3c9db4f2ef5f55f007e9e1","a5d1209c7bf277af86281392d46e12ce3dd6052586053f757fb2e606cc75c0f3","31b5f53e3d57470830e87f9e03c02d4569ac81d4a758fdda75092f9a3f58beba","d765fbab22fd7003a65ed670100362ec1c90d55a772e6773a774135594e7ea41","c1f11d9b42bfb0823d34d93c58df91ffb6690b5a717b7d310d83f258f1784e58","775b207f00d4df5b3b0b536aa696d572cdd2cabe8ea18dd28e8b52f691fa2a55","f75cd30f162c2af5e5aca39c01c1a521bfa034fae523793de872815a3468bc08","0cf1123db73dabd86466a462375a6addae52f58d23030c6033f8aadc23539a36","e29cef4158591ed213b1c2cba8988237b1ff369f7a6ecd8cb8ac0302bad1fba8","5307876e4d0021ea01235eb2f7c24671f3d8b37590f4b446cd132a4e1dc9a335","92550acd737790dc60c4c130e6aac78656dd48a8334a4882f40e7f86bdf7a590","3df821880914f8bb3c8107b1107be75c8ddbe2120a2cefabbaf9b65936b5f4dd","f46ba7c6fa7fcc8b3d57c4618c18db3f4d8bfe1fcab5551d7f6d9a82cf4d6078","078b7043bea0968860374bf4671ed74dd9f6be4e28ab659517d81f74be463c51","68b139ebb9a7f3ee4ded6286d74f978a47968727665120f3bfc560476ce33c4d","56d02c29b2fd39b1b1a1265df291f3f98e6ec3e6119aff9f4cfa44fe888efaa7","2d01884891da6495cb4a2f060e4898209a507e711464c4c1480df85264e863ed","c485c6497f7587314c4c4a59b74850cbca4c0c4bc08146a918cfd237ef821dbb","e9eec004735b1bf7015edf5400aeb914a53132134d230e93786590d904d094cc","080b1aa93227952b4dd74b9d2c6e4f6002eb8403533749116a1c53bb9961c02d","874087eec1d457f6e3baf5ac46c42ea200e55040b394fac667aa3a64c49f5f6c","6e8a5b04a18abb192abc89d7219b9c6f633cb3136777ec808673a65f111ca749","4e7ac7e5dd58a6c29c724728b031669e3068b194b62c2b83f92e76a36cb34dbb","d74d2a92b54f95e47d2b76bd5ee516aab7ae93afb79cd34c6681dd29eb09e72a","747e6326a724bc54f799a466a5b5c4978a601a04a063a5bdabe150af2f25b9e2","b57e22e53b56cca7a57bfcfb234aa6a66f9b9e4c07159d7388f94f17a3eaee2c","e47709ec4d1618ef429648cd8ef967aef2005526b34fcbfac33037add347dc71","b81abb3e47fbbb3af41fa75bada89bbcfa4b0feed9a0d6d4b19ed1ce1033b53c","15b330546e9784461058e5fd6e2346bf272140fa6f0cda34e193ae501d8b17b1","4d8ce72fd080bf9a46bdcc274bcbacccedd66d84e203966b197ac25a96932183","73327e6ae34e3f6591877fb75b451cf620cbbd76ee2b678213a9f793633cd0d3","3f1ba2f69944fa346789db7f60d53c9bec00032de0d797967978dea42e77b941","3f5df31539fee4816b97d4e45b4344fbdaf3ca59f6df941f8d780ee441e92cc1","50aaf44eb4d0e086af13729b3471a0a7dce95ea35ebd21c762ba26e203134b2e","3857c1773b8503c3ca45b7bc09ac89c3930c85ce93021054503f73d5d9101b5c","72702bd07fd6fb3ef64aadbcb909103aadfe71ee76e9fdeb11e0c92693cff6cb","f0dd6f7c9783637655478db7d7caf6becd41a79d54482aa59578ce88ab38e9bf",{"version":"cd756ccdabf433dd02b84d755383e489f14b3c1aede0477783aa04830fd5d695","affectsGlobalScope":true},"a4c88dbecdf8ee0c79f5b7c2bf31cd77e593f5d78384e2b674f67d754a549a9e","9cbdff04326da794ba008c0fc977ab062d1fe3fa2e9759654c72ffbe54b64a7c","aa60f8d20d36116fe05edaab24adee3c275209f71b65e272692cf99daf9489e1","150855f967a6490161d5aeed4cc4adf31fcb8f5dbe54b75799c12b8687fc9cc2","79576487ac18e047e8192fc582ff488ce375fe4df0cb028a17f831cf42b976f2","47ddb601df40bfa01cebdd06ee8b87d0b72aa1259a4ceba3ad3b5cf68130112a","6b6392704ddb3f50e647dbbb716782bdd0cf8ea9cc134aae256a26223e632b47","afc3ad2a50f7f4de908e26fcf467e09ab8528c0e90f91e602b4865d953839228","df90b0c6b1d81851364c4d97fa23b91a993482bcf4a7bed7c7a24aa41632d494","db34610570eed46b8b72bc662a91261200b8578af0ac02781ce7d9aca99bc683","11ee9ab699b4619d217c640d917ca198f58066a86bd58c2917197d62aa6601e0","cf9d589d9e73bf32c8e7a6cae6b4a1cf9bef39e5594072533fdce985581a6ddc","959544feb1ca2df29eec6c500f27ea10f4885df245ebd8418fb4b87914614383","6548ab4b57eb9d092471a04513091673345f2fd95d5b876f600402ea8d603ee0","2793e8c6a023d26f78d6777a6d7f20fae3a9a8169863d46d8d54c73071851232","d0f11e830aa1350a31d9c00a0197243e9711e4882947aef53a96c629f405cb10","6610b9f45f1f71d2b1fb67df49cbcabe3f9e668a1ccb7d8328a51407b259ffb3","abbcc437e0792ab2fe08797ceca1ec85a95ec413c51612313b18ab8e75f690f6","e29d76ef1183ac0edf94b4712b6e51730c447c7e773e75ceb44a720b0c9a9fd9","4ee6dc3424998eede9a2a9b114acaaf7969cdda67baf82ba2c9cf88a8eec0ab1","8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","25139d6a726e0e19d9fc4fa3197367b4a82ec34a08a5ecf23963e142c202c0f3","e3328bffc8eab74665a4fe9c59d6f12f4c8570c3d858497e241eb37efe17dfcf","29389551e426a46421134b55182d6fcf5b143670998bf81db2619c1228235392","c18f7e16982695bdd04e3e183a327d116185f77f1a37b9b2e849d7d93269cd74","2cfb37011989c21dc70b91d521a2d5a4e0f18507f5f536b5dfe504edb15916e8","bb5e02df7aaec7a4ea642639a9963b24b8d9fd6798351f07d8c58616942fbcbf","299a899cb4d061f5d83843ec453e936e9659b2c435746823f90c40eddaef4745","d5610c0fd12870f644b0f42c1bcc4fa2295ac3e3ca01916bdb42c3bdc4c80c36","2c56a8e249b1f45dbdf973100cd37fe2ea68709573cf1fdf2e3052c593be68d8","3553da417ee7b07e388b13bd12a70a1c03e65a6132ba5427fe68f5b362373e6f","612358502042d351c227ba779fdcf6d875d827e424930e60297c533524e50668","d2b5be376ef162aa0c24a826e7dd2d77671a045c085e16d1c1276db4bdccbac7","c4138d8dcccedaff6621e009cf0a54a7bed2a5ad4c509a3513bccc4f417ef939","ad8747fe978dff3e80f4b12b48d37cc8dff11b61d04c035aefbc982ce21201ce","b154f789fd65298e1ba6cbba6944ea892d564c95f3d3700ed85baf8f80748473","c660265aedd7c5b236e2017e53095cb98da66200eb0e8d023b5bf713c36494e8","0efc36bf5c0daca6217fec7063359ccdab8c3a23bb405d25340fae22cf72d74f","5abff0c87d4f9c89715107042d4c73b68ef7a128759f451c8a0fc450cbaaf660","5a03308fbd1af441065149a84c692931bebc7e7735afc23be8684f4e10d3aa06","c787bf4f8f0abbf815cfbd348be41046f2b8f270be24fe7aa8a8fcdd2b7df8c2","e7a5191c663a3228f30104961d548b372e51c5936c01ffc8eddd262bb98d7d7c","43fdc9abe6f8640fda4cdc55a1ee5f666d3fce554277043df925c383137ddf69","f0b09665c9d52de465687fbd3cfb65111d3ffc59ae00c6f42654150f3db05518","72f8c078d06cff690e24ff2b0e118a9de2833dcebf7c53e762dcb505ddf36a68","9705efb0fd901180de84ca4dd11d86f87fd73f99d6a5660a664c048a7487e385","f9b9d0950fdfb90f57e3f045fe73dce7fa6e7921b37622fc12e64fcd90afbd0f","e61b36e7fde608f8bb4b9c973d81556553a715eaef42a181a16ddd7a28da4ac7","03b8389b222af729eae0fb3c33366dcbb1f5a0102ce319bf1d7d5ee987e59fd0","2bf6be7c04db280fdd9b786764f8650c23f9f4d533791cb25a11b25314b76a55","dbb5fc7edd36bfba95cc4dd564e4458276ced30eed18bc05fbda948b3fda8686","c2b556c7cff0dabce2e31cb373ac61c14d8ebc35f1086dff30b39e9ec5357d0d","f958af01131076e8af55d28c4835a51063226ab488ca8738fdee38aeef7d0d33","9f3797b01e3d83d4e4b875699ae984f380ca86aa0a0c9df43ac5bba1cb1f8b7b","752b15ad1b34887adeaa838fc55f5d4ca399026afd266d4ed4db0e3db02eae4e","778331eaea1093451e50be9844bd2b6937c3bb81b0b1ee700624c9774ecfcf2b","0ca0dfc9f657d0822eca9530c7870b22a1d2a5fc48182bdd4d0e6e88e4ad9c35","5c746f034288e6842dd1589b169dcfcc16c5ce5abbd928889ab67aea4fe0b501","92ce6dbbcc135cffd09a58e19fef34bf351391bec92c40d849e4e9997d475769","99e77d092fed72b6b8578d00c7af004f76e98b30ba99f1947535eb4c04a51676","b5ef52a9f9083724decc5d060f0b34e3a480deed71c32d55ca16c214eb4cc928","5d3d7938b2d7d0a9f851276741327c2ae4c013e7eb420fc3f7caed3b79c8f37f","14df6b81e50a035e9e391558cf30a0420d03e2eb42c7db9c57f44b818e5d5179","f100912a3785eed4a3d29c12f5910b101af9353454de5ddba9b4d43456c56dd1","446439eacf81a163fd7dfc53b28f80deca3d13b250d67639739aa25aa4491090","98034cd285344125f7165a3bb68246d38ab35fabe7f6d6a7c8f80407d31f548d","06b4a23064991251512df4edc12341d5bc69a17b942da18372312d383c90eee7","0f898802705f9a534b537f1be6c57265080e0abd6993d935554c255e6d56cc1a","745efa7b6e27b7216cccede166a822b56acc41b10a8090966c8cf2c96239cb83","6ab2a6257ae7bb05559841100c786c845fe465a90be7b904db9096c2fb14696b","6da6c94bdde76f309cf5823d2a4e77894423d51c80e9d6a7a6eb62998db39dbb","5d697a4b315cc5bb3042ae869abffd10c3b0d7b182cda0e4c45d8819937e5796","89b040dec8fcfc1de98827e1f4d4977e6ff5d3302c6790e9f10b54b916e1c742","6ee58aa536dabb19b09bc036f1abe83feb51e13d63b23d30b2d0631a2de99b8f","8aceb205dcc6f814ad99635baf1e40b6e01d06d3fe27b72fd766c6d0b8c0c600","299567f84bfedd1468dca2755a829cb19e607a6811673788807dc8921e211bc9","795d9fb85aad92221504db74dd179b506bd189bba0c104426f7e7bb8a66ffee5","1311bc194e0a69fe61031e852c1c0b439e2a2a3d1d5e2d8ff795499b9f283459","4b7ce19369d7e7fae76720c2c6c7f671bf3fa0f7093edb864f1ac358ca7c456c","c972ef44deca1fa8fab465915ffa00f82e126aacf3dfc8979c03b1b066ce5bb6","30285a1011c6d6b52f3ba3abb0a984be8148c05cdefb8eb6eb562335a3991f35","e0de9f50e80fed1cc161b50e8e68dc056e38df75a4ef667a06b1922e372de169","6a8b31be08b212d1fc96de0ddd1ea49f32382ba712fea24c70bb56447f643f82","19ac6d624e4c18de4584db4bbdbc55387dbe3d19b3c134e50346bdf165658a17","54e3798c2801e8f3bc7a825d3d26c6a80ce763e19e6cb0b714594c430ef72332","70b8333214aadaccda8d38435911d3e3a686e503837dfda6b8c3f8c83e05729b","fe849e916564b8172f31a547395516668f3c122bfe017f82e7140d8dac402208","d42c6e985bdb10a2aaa3dae14d9b0d8589e74a7c2f9475bf543b855bb3c010ba","56c48fb5bb6316dfc27fbad065966b4ddbc38e9a0a1a5060d19b5da405ae7d6e","7091568b9a1b74b699ad09df6c130db712ed089d173a235e301a7a7ee0a4ca44","de33aa2a38affd9e71297ef7ec001a4525502878b09744308fb6518159f77d2d","57476e482c9b4e152bd23d0dc3c29375e48afee0de775674a3c1ea63cb4cf843","3ec4ecf6502ebdb1f3e24c712eb70160c606214ba2e71b4304b5a50fc2e4f293","83f7b6c1dc91deece32c3bee746a43f3616b7cc9f6510764bd53451f6712ff25","c23f2e8772304163fa7e4335be11f3dbdfd720d2209057566b7dfef746ef1862","2a26cb78d3de9708cd656787a663902270c9421ef89188286c3b7ec89b63bb15","e61fda2800677c210116c397dd85079a0956c87fd714826c08b25b10fdd56546","ef7bdfb4f157f9c9b9bd7f5766f0f8e07fac8e7482eec071673f3c9d08082982","d2f2ac1436cbb7c8d122cc7de96521345254e5b36591d9d064d9763de2a7b254","3cd2ba07285d01224f9595924dc7f760c7babb386a6eb825cb551f8d829fe6fa","3ae9770861c2ece5849778e9f15567d95b87df0165c0a5b1312181df19458a56","37b51656ff8302a4556e29c775f311eb9ad813948d2c527405cea041dba3baf3","00abf32ca3af92f8be9ecbc9b63090b4909a756317d791927a83cffd24e9c8ac","cd28efe88fac7a92f3f5cfc7dd3c764f0b31bdaaa061ff044de1639810d6a7da","8b2100d3ba68063b7baf5038f26eefe46543dcebf1e7dbaf46277f24307cefcb","131b7f32092aa78e12fcb2a6db7c71e17f85e076c0635ad8d991b80d10130c19","d1c84af1e6d5fa4a5f4badd45b03b67c9255a675df235a3ec25307a0f5524278","aa4d6dc9282133162a76109d99c5795583276c4fd27284f128d484acf12b0841","3355c4c572f076ad963d95f0e28075b8558e2ab492c84eb94f9e2c48f1c2368b","5638cfd48b0c56bc9ed0c779d53a40b92c9cd9c9d6312e3a21c52542d38094f3","827eb54656695635a6e25543f711f0fe86d1083e5e1c0e84f394ffc122bd3ad7","2309cee540edc190aa607149b673b437cb8807f4e8d921bf7f5a50e6aa8d609c","703509e96cc30dce834ef8188c958c69306473b8a7e5cb3a6f324cee05a1f7bb","900daf04dc607dc3858c0f976d6f9e17b829a07de58d62dc6f730eaf06986075","08e0ac95e650bd4c87145b6ab2257b70c06254bf76a0b9f8a7d60c51fb8ed6b8","4b57ec505a035491c692b89af2c6902c312ec22f8fa9b6dae3e93686659fb7e0","7d796672940d3b2d37f2edea4d7bcf4c7993966286006228cbc8fa35ac92871d","132fd53917ed7f55275faa52c35e4d4d41e9576fea231d12740b723df2bade93","de2ecf9b1d6f60338f7b59b6f593ef77af9abd0e70ba8f2942953d0c6e1850af","cf18e9d003f1d3d1d61a04eb2d1cff3e8a8cf9cd306d0532ea82700069f2fc42","393192a39f26f9247a74ecbaea6668972af8e9125c955d1798234dceca6010f7","27ca878cf70b3030e8403f51ce65949d364fa776d6dae3527f91635a40836672","178e2de7a8702742957ad24deaeddec84a48cd913b5d932b16afd2a707b3e416","a45ee7555d019a67fbe092898d1aef0b1d02a9f6679ab84461ff515b4460d706","29c188a2c660f99f1b4835022e011c4268d7af989d4b7dda33c0a69ca1a777f8","1ed0bf138e87912d741e28333b58cbf814ae863783b3b404d2454cbabb9c5fc0","3452ee7d8ef0b1bbd47b2a56924a1dc3c79dc84a19d212e9dc496f92e4943aa0","8c95f96ccd4be0674944077aec1e4f2cccd515ca06d4327562dd017250e7d3fc","6fe7571c8a80808224648046008d1366ba4e29206ac79ce4c56d6fab3350492b","a98be76d8c257aa9e316bdb305b8c4228f0cf904d4b70547fc2999f3f99b5a01","7419d99dfe020d543c8ee736ab7ec17127d6a2c61c40e5f245c6dbd3fa6eaea4","2495815b16258136f98d91e441f4462f9b694520af86bb8c8373724cdc410096","a64568c16a5821575de4f6280ba1ea4686a1ceecd649fa90ba957c8b1b007013","ac46f284c80582f7c1284eef93f2d1c80add2d3b0e8a4076d6ca3db58d3af747","dee4dbaef83bb1061a44f39a91a59300d3dc02528eb57f748222235dd8e02159","a39c32b055d2e6103e5c49b9aed2d7bb5b06571c98fc31105264d280431bdbd7","618ebb93311695a13844118cdc9a7314dd3a2c6f35092d87f76828cac555ddc9","d36c3d116ce59a3f072c0014f0c020c76e916ba906066ddc4f193f546a43bceb","9bed8447acaa89be63540ec500b165442fcb0de020015175b5a5c66d42a61c4a","f128a2d1209d243ba2f7755c2fc313be2c7569fa0d9b4dc5cc60714fb0cc6634","a17e6861b709149f29a2bd896cee94526df2f06b24a2b60614b56649b5e9aabe","9c79ace686f720f4dd833740f7190e12cdce363362c982c164745527a412ef40","439850ca5075c6db55487b2c7fb27a6051fecbf180eee0809b67bb2783a89813","75d48857bc4216880443a24d985071262bb8b89a9952c77fd430cb0caa21f9bf","33e40cf77499b3d9712db82e15683373925e85817dbe82a24ee0ee6e44bffb70","d5bbd453310990e851908183fbbef9e6e2db8e0c86d97b42b723fd5238f71c81","95e76bed30f6e993e1fcc1b90a4675682e4800ae43403547a775d6e3c7ab2b0f","8b206b995edc6dd849b85c1c56531b9780e3ba75302fd02a2d173f008028707e","97040b190f0daa10cf9a15e51a2fac66b26ddefd7b65998bd6027d1dd67647b7","877c25dfae100e555014e45d1d80364496a0c876201e5dea91a0fd0a6a4ff765","d53f9f96afd41359edeb2d5ad98559f3bfad261391d5aef95320fefb0c6a8742","23d98226adf3be74e1f0470f85e7fd154cd7aa979d60b43190a7437f0d0426eb","639f9321a98b734242a3573764d7f1de5369b0b0b10c768ae37639e8bda5dd03","a42c39d8b7d1b1eccb69c7919ea60dcc2670ea672a0af90b70a730974ec0e9fb","dc5fe5f6b39c3fdfaeba333bcd5f0cc98bb3068797a4d7010f585366f549ddf7","4a3ab8cb278bfd1f18f24cc45a02188b63afa6aef50035df6d79c4638f24059a","e724c9ce92f2a8a31ed260764c5455852a13d292e2a31d26acc6840ec0e83208","40220ba1b091aff0cb20df5467202b62af561b09fcf3b24c22a60066d46f9e62","30abf588759f9e828a94f0c7f031eae094bb668c6dd4d902fa296779267c05c5","bd875d031474860131eadb42300aa57a71527bbb2b239d5b31ab6a9e352c84f0","773bf9af93b5027de9b5b4c779d5cda35f0eb92c7f43a97f2ef3ca081495a191","617f2b4f5115969c7b0f225d4962e6bec1cec7e5c687d84370eba4931b7dd047","59625b1fcc91f2686751fd5b623126f434d7b405bd8d866a555963ce2ac69846","5e0dc1bd24b45c46f2188d2f7f4b67f311610c72b706f963c5bf04c2e1fcc35d","fc69ffd599d3e525aba38f80c7cc2ecd187dbf148287364c75f199c8294a00e6","2ad138be6972de52ed966e6402aa6403af79e9f183486e0a725ffa075a0555fb","480274a4f75a7b3bd5c697a55e1905887b62a928592c0db3c282525fb235ba70","967fb6e86b55db228ab50c81f85f39d6a23a0c15bcfa6e19d255e0952d33a65a","c39e7d32dddfcdaa93b18b99fa430ebb1d6ba366459563d400add22f92e3644b","e3932de252bbe43132ad3226865b2a376ad945dbc1d767540c01b7bddc6477c2","b2f52f3cbd863dc4e690614b5cddbf412dea435d0de099db6d8adfd3cbefcd65","557c93b35f3b58e6844a9b8817559da1e0641f7f08f918e3cd1a8efee126746f","80ad2ae93d57dadac5e377ec6743df5e0211ea30bafd4b648c52366af057bb2b","07f90213b5800a0b43a6d6f309517dcca5afc6ffeb4bed396878a29fc5d6ceb0","bb0e637020f81cb40d16f202c3a783f0e269e29547fb84ca9f187a5ea8556965","462da802b50ac0d94a3c8f7f58a6a0aa08108bfc1394449ea56f1e0f63f5132e","2ccea88888048bbfcacbc9531a5596ea48a3e7dcd0a25f531a81bb717903ba4f","b7eece07762a9a944f097ee05d6f6b642b1e2dd87e6fc1b09600d881e5475377","1916218868966583a3c9f18501ee78929cab8450ebb8076ebd609873c258154d","98ca5ae10ab02fe747a7a53138f43525e0129aa1107892ea4e1fe9c99575809c","9760678d20c9faa0d0e1269806bce578bb76598a4a188a4d3987171263be20c5","21f706150e32f03ecd1714d7a7ac55ce3caadc7c7a2a960ba57cc5d39ad84c9d","6954ec87361b77bb8895426909fecfd154e3fd72a2b82f681c8bb15bc46f2389","da1963f37d566ff9f71bf8ca5c628656bae02fc9509050041547e9c7063cc58f","57e4bed825036f7f1328505bc512af492f28b1b57a48f1ff9b6d90b930041a52","3ef0957915b7719ac58153eaea6ce810ff8688276e570f8938455f3ec7930df7","05e0ad043fdd4e2d4874a97bd716174af64d63e43851c09830c00e819a80d395","2dff0ed1eb2046fbdbc2c13914117e1ff1112e217f90542ea5e7f41e39f0393e","a0ba1e2711c2520189ed980225e7a429b0706a1eabf9113e53f0e72550a1b23d","169b66aee819a4b165c397b832b31691f0be8d35cf8f2ec6364c23ee727b20b8","badb4cfbfc6eca3a038be22c76297bec0b5c1478d8b73d60e8b50725b7dcc15c","21e7e0eddddc112f2b891d1066eac74680291db768d3ef9b908965935380ab98","489e195150979dc291520e6f3289f055516cf342f314931c6b4553aebf2859bb","516efe800aaa0b7504b71f2d7e7e9bed5f28eb6c9c739bfdf237f09c7addea46","10ae729013e6620dc937df5dd7077c34e29ad313a28aa75cec39957640cdc8b0","ac5f95dee5e4787fa7c68a81a052cdfa0e03adec8331d3276389384df36cb849","0aaa321f1f662ec931e55c85867d316d8af16b59337111e22901516a0e1caacb","fab58e600970e66547644a44bc9918e3223aa2cbd9e8763cec004b2cfb48827e","a120dfb4736e6ec4c78f1bff5ff7f977d346152e6b7020659ee1ce4717f6f66f","9eda7b58498bed72dd98ebf1d6f8dd3bf5df5004b2f91c610093bf48f970c615","8e7adb22c0adecf7464861fc58ae3fc617b41ffbd70c97aa8493dc0966a82273","755f3cd1d9c1b564cff090e3b0e29200ae55690a91b87cb9e7a64c2dbeb314d3","d6bb7e0a6877b7856c183bff13d09dd9ae599ea43c6f6b33d3d5f72a830ed460","f1b51ae93c762d7c43f559933cd4842dd870367e8d92e90704ffa685dd5b29a3","4aa7fdc017a0a097c71ada2ca187e1475c987b4f933960c0792eb143997e4709","3f450762fd7c34ed545e738abccb0af6a703572a10521643cf8fc88e3724c99c","c56e9d223c1b5682aba7b1a761897e3b52a96d1a1e557d6a60241f3fa0430098","8516469eb90e723b0eb03df1be098f7e6a4709f6f48fd4532868d20a0a934f6e","d60e9ab369a72d234aac49adbe2900d8ef1408a6ea4db552cf2a48c9d8d6a1bc","0ebb4698803f01e2e7df6acce572fff068f4a20c47221721dafd70a27e372831","03460a54d0e0481d1e11097f66ad43f054bc95efdafe5f81bbc7a82be181af75","ded24ddc7157689a5aa14bd651272ab8cd6e7812da2196a65d8c5e63131cfb23","2cea9689efa8591732096235abe7f084fc29c92badd5b0897a5e876b77e71887","4ed4e504126014fee13aaef5e3fc140f2ff7031ff3a8b5386717905820ea2d09","00e77e0bf106bc1e4f303ab02724df5173506d44acb6c22b4f582a88f22c3250","30d2170e1a718b5035611af55e3618b4ba8f42f0749bb52ee593da6082c4e2ce","f910705a0f7b484f66cc58a71a862984d2ca6f5df8f5a96201f569d564e1c2bd","a3b8b6be7620897d1e481e8650c980a210a138fceb6e710eaf95fd9dd0dfe94a","12c89d0e32758c120a569045f21cf5b77244f86792611ced8de7f86b37e77781","14bd47270e654c8eb3b1489fa8c095912ee62a0a29bb92743393203722347c53","235ac682dd51a0fd9714ea306bfebc6e32ca997aae0695fbc76d29dab5d4be32","bbb0c464f84002efad8c8df37297703738bc457a39bd801e2df05bf45f7a7f26","92cb686a9ca5eb5dd7d5d8d43a3707194c1e91ea07a027b3bcb60b6011b24632","da3ab7396ab4fe390f01091bd0d4c4a4e1e2a15a46d47446d6fb7194897d0f6c","66bbae6120d307ec2021ebd2241b8ad23f832b663e13363ca8b4c8dbc131a4e6","fb14266ae4070bd16db6b071e98887452bc359695c40742e38515a89dbc80a63","4a24d83c0d8f489465c4d38ed9fd87121c8a2cf50c47efe09c2eca93d39fa908","c052e32b9de53cd2596f196a0901801961bd7a31be9fac4ac2f117e4103e3a07","b15cdbb45919bc3b8e6b6f962d65382e85061d70bc26a968604f3dce4ad3a891","d6b58d955981bc1742501b792f1ab9f4cba0c4611f28dcf1c99376c1c33c9f9c","f0b9f6d5db82c3d1679f71b187c4451dbc2875ba734ce416a4804ad47390970a","a5c38939c3e22954a7166d80ab931ac6757283737b000f1e6dc924c6f4402b88","31a863da9da2a3edec16665695bdbc3134e853195f82dafec58e98c8e1bb3119","a00417f73bbba413d1345dd77252ede0bd0c957e37a9cadc9abb4c34cbd0eac1","90d1ad8d2983cb003d6f237b41c56a8f252f72071bbc53576e02b3c96d7ea47a","f3815045e126ec1b9d224782805a915ae01876a1c7d1eb9b3e320ffadbd63535","d07557f21b2ad690bfe37864aa28090bd7d01c7152b77938d92d97c8419c7144","b843ea5227a9873512aa1226b546a7e52ea5e922b89461f8b202a2f2a3f0b013","64b4d440f905da272e0568224ef8d62c5cd730755c6d453043f2e606e060ec5a","d6b58d955981bc1742501b792f1ab9f4cba0c4611f28dcf1c99376c1c33c9f9c","f0b9f6d5db82c3d1679f71b187c4451dbc2875ba734ce416a4804ad47390970a","a5c38939c3e22954a7166d80ab931ac6757283737b000f1e6dc924c6f4402b88","31a863da9da2a3edec16665695bdbc3134e853195f82dafec58e98c8e1bb3119","c0e03327bc548757709a7e2ca3063ca8b46227b5e13cd981ca3483035ef5ac44","b8442e9db28157344d1bc5d8a5a256f1692de213f0c0ddeb84359834015a008c","458111fc89d11d2151277c822dfdc1a28fa5b6b2493cf942e37d4cd0a6ee5f22","da2b6356b84a40111aaecb18304ea4e4fcb43d70efb1c13ca7d7a906445ee0d3","187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","febf0b2de54781102b00f61653b21377390a048fbf5262718c91860d11ff34a6","6f294731b495c65ecf46a5694f0082954b961cf05463bea823f8014098eaffa0","0aaef8cded245bf5036a7a40b65622dd6c4da71f7a35343112edbe112b348a1e","00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","68a0d0c508e1b6d8d23a519a8a0a3303dc5baa4849ca049f21e5bad41945e3fc","3c92b6dfd43cc1c2485d9eba5ff0b74a19bb8725b692773ef1d66dac48cda4bd","b03afe4bec768ae333582915146f48b161e567a81b5ebc31c4d78af089770ac9","df996e25faa505f85aeb294d15ebe61b399cf1d1e49959cdfaf2cc0815c203f9","4f6a12044ee6f458db11964153830abbc499e73d065c51c329ec97407f4b13dd",{"version":"99e8bb8d262bece129ac203f0c7436a07771e9cf5ba06a308d1b16993606eaf2","signature":"8705a9680ed4afb15edbd7bb9ee24af33060d1165117f293559f3073bf8d0101"},"ebf6e19cb84d78da20d022a95f05e8aef12e56f816a1ee12835a4da40d7b14cf","589357c2f88f1188a0dfc48c4c4cf4d22fac9f654805df5f2789a01b5616b74f","6abe62ec5b9b6a747c1a7687d58ff179cdfb61adee717b6e4882120f7da4399f","5c1301f550be26133f4fd34eadf38815db096ecaf9b75948b444a063097f496d",{"version":"26e64fa5fc9c7fce9daf4131f396fb5012dbdd92fb2e2bcda5aa083a76d18888","signature":"cdca22d444beb7cbe168d11a666b994be4b19c5ed7df1856612ac4dd7c2242fe"},{"version":"34ef3dd636b7074beec81346987a81ac245e1cfd75adf0babc68e6cb6c572ca3","signature":"82065c62b6a8089452cb40191a55299b2d0718ddce833446faa6c01f48f05b29"},{"version":"c1eb1aa5e32fd31d4564bffb458942d8caf500d86388c811cbb853c274e4773a","signature":"a7fe41f597b2631d3fb439d9b3ee32d1606c651a45ce2fa0d170a2614e68d280"},{"version":"327fd9ca522780f73a64e32e400a6c5bcdd89a5e706314d57ff1611bf1a99a0d","signature":"70b3082385b926b4bb0dbcef0b2f444c4f807d312546f27ee248d50b0dfa5877"},{"version":"3b1ea19c2b95501c5d8e87fe4c8044d204c4402a8b48f282bd348f973355f3c5","signature":"01b86f9481ddaf74b65f12e90ae2d5bedbc0e67e64e8cb273c7a1907cc66dbec"},{"version":"897a42f20db3ee955b1cc64506c040b0b1dcebe45d9ba3147e133d110f487f6e","signature":"3089238aed154b07430dd80de65df3115d268f21f1afcd8568a58d65c7827c5f"},{"version":"2d41bac312ef892971b2344a102feb99985e87f79edc18ed2c43ece97703fb91","signature":"2642375958909546f682d51f9c3682f553ae5f919f7b4a77d49262c200bca248"},{"version":"db3db9885deb334e6606785a0bfe7aecdcae172d36a6b4bd55958c756b92ac6c","signature":"79cdba32abf1fd279e588363d3048cb4b3d537a81530d32079cea1df22d66f93"},"1fcb8b15db812281d69a3090d488903f9e93033004aef9d8889ca3ad0753a96f","bdf5a95eb0a2dd1d39805bdf51b46ba012bb9b92b2ddaae16219595bba7678a5","9f794a0e8550a03baff865a3961cc22afbd85bc4ba9672bdda036971928f85f4","66a697d1e4cdbf25cdce4644a8085a8563041fa8c7731d4d9f5e8f22e66ba72c","a0c8e17f4d1ea2704c62d7349bc3b8d9a12e3761b5960cb44144d3f0333b3fcb","3471c0df3d0391e1dffe6e8bf150294531b2b71a2afa5f2b86e52bf84a5db60a","5d4df4de055eddf3187094f938a640f8d96e4c551a47d6686596fdb6ba4c3014","8bc2cad630da1033c1fd8d7df2bffb18af0da6113bd086a8bbec04a2471a1e00","a1059d1bbc8ad46bfe668b8450e7e8002887c4ab987bdb96d6108d8023f8bb8f","5134885e9648e2c6745f8aa1c3e7f5ab3b3617258b3d81ca02de6655ede3d74e","4f1ae3f24125216cf07c5211a3f00d2bb4782d7cc76c0681603f8249f9232ff0","d3fb92a5640f83f7844d60b35317a0f95c27e3658a749d76d218c461ad091668","d1f8bfcd91b284657ef8187c55ace7db91a3c43e642c3f14e54364154932f7e4","f54c92bfcae54f360fe79514746efce4870e4ddabc064e95d406bba291e9f672","175fd7186fa6a70f9db9b270a04a503cae23cf01cb77e3905bac115c38424cf7","c993f7ed1b8e1023c1f2ee5b262dbc3b70b27475674e40a53a58591f9972dacc","c914014ab7c7001178663f29d31a495398234a41219af61f26d7e8e91b46af96","277afd6ab6ec72889e2988e0ddd7d138c1f512e68a1fa4e90eedfd71e2097a51","c0908f85f2b645d375127a3b53a17a65f782e17962d5c1eb68f08b1188acbf15","3fadac5d409cc2f27b1d2f4e7568600f02840205f301c9ae7a3068b46476438b","da6aae64ad559286830fd44c81e3d33303348f184af7db4fde8dd99ae9749407","3633f87c97d359cb55fa7bf0668fb2be8a23342951af6ec2d06e6d0cf7409371","cc3a5427d44fc77ff25e80b3edee4650a51f83de761faf5e633994ecf1ab1b44","b350eda75c6e47299b36002b31d5b220c405c21c365e708989829db013fadbb4","f421882756b6714834ae4687ab1aeadf344a1cc45437d2edffbac020ff3801c1","1d61d6ad832dabafbf63b86c5a79d704f2c8763ada9318e135b17a3cb2d09b32","e5cef5de3e5ad3436d414d20743231e284733b9cf4375dc79eff4fcca4282f99","e624419ba84e33e661e89a28083119ca41f6953dba09a4f82b660684087afe6d","942be430bd0feaced2e3e598273b17e50ea565ec9dac840b580b0b99e1a3cd5c","73350006cec5a0c6b71d53b0b0ddbfb82be96752a9c4e3c904c59e633bc9485e","a7df5c2e9594966c7e0d4a763b13ed5727506d892669df5f7bc9826f539c1d35","258cc5cd6891f6bcbaccefd953997038844e7f65d582cac987ffabf7181bcd4c","00a6db28fc4df6ddf10adbe630d9df620ec13af19039c1869653e60dafa739d2","649324d5abb5464aabe35d86cd0eef16562df811f0971481cee664afa5acbc88",{"version":"628749b6edfc907c32583a77f7dde111642dbfc13265fa566e9a8fa47f224b51","signature":"495944b274165419ec08446dbd612d6276e2c12b92caa1f1e6c645cbc044ef25"},{"version":"e2f7d4348da1a42007547574ec71504de5e9df04d270bcc4c672bec1068257e4","signature":"0d7e153773886e59a74ffe1fac08bef805541411de160b9f3af36f8a6a3c6022"},{"version":"70fa251413c8e1926804d27e8aa01f96bf56141270e8adaeedfeaf0cc7147cef","signature":"2e85c128d27849ff4bd436f75d32d8a64d9013d420f09c82c6eae63cb7131020"},{"version":"334a6eff67fdb6feabbe5a612552a0714c424ccd07abbb096672085e7d43fb4a","signature":"19756a360a54eda2a10138b94b37a87519fd1a27c678a1b82187295e40bbfacd"},{"version":"722e48bdd1c494feabfb081d7d582d4554276abacce92f69128511918c125273","signature":"b195f1ad5886c1600c53bc7296210f9ded9a9a673e01988eecf9f20f48a4d9d5"},{"version":"1b5f109f8e1b74f648bf19b878188928678f443c2b2a21db0861f57d0715ef69","signature":"55310e6719d6bd9462e76cbba6a582712b30a85ee4949b8d98e14e0f46738e78"},{"version":"d184310a8c121c1ed754995dc55f8ca212bb1ef94979f99423dcdc48569b3c51","signature":"99ec28bacd04a3185d90660fe18bae48f33cbb1d50c73c64cae98e67f7c0ca01"},{"version":"48d475a0c6f91f62a89b128923cdec08f1f30a12df0068493f0d9b2774125b01","signature":"6a90b1b75bb0eb776ae223adc1f3f1cc343abf3e68df619933a3248910061290"},{"version":"e581d928f182594fe6aa7c0dd2e0ce02fe65fb53b7d40a59af9c2f171eee6428","signature":"1ac721bca31657133deb33e2ae005d557e8e6e0aa9a466142a2b0388e2e2638c"},{"version":"f18e14371215da28d2375c023017adcbd420314020f2a4ca4e9d9369ca80c1f4","signature":"0aeb9a7ce850134709dee9ecb63c1883e387eb70f960e0510100f4b2bb70caa4"},{"version":"bcc7e1fd0b70240f11846f0c5a284be69834446899b64477371cee7aaca38965","signature":"bab97a4f0736f1c1cd0546f79f993ecf30b34404cf4479a4f39068915880cb1c"},{"version":"6720778d4192df7ececcfd9dfebed8a006c9c44f88fe8b74880ab3ba7e14cce4","signature":"121c82998e23aa414d41a2f08e108074760318a1c11a2a5183b88b0d9be4ef60"},{"version":"e3fe28954899e21bf8a7db496cb4b90313e826bb5ae938d84bc73c3bdaa31cc9","signature":"4e1f22dbfc0754b698f1e291c7c92bf1220834bd5620207084236399cfd02e2d"},{"version":"7f2a2cdf8eecbe353d449055d91c6ee619f90ca3b3a49ba5a44563c44aab5d1a","signature":"8e6165fa13e0d2f40e2403ab20b72804d02c663709a3f7383a320050e893fe8b"},{"version":"a02cb9d0a7363cbbce45fa86bbd7d64615811e30f2a7c47a2718fcf53f20eae7","signature":"9af2721670eb3402e476cd827256d4af7ab1d6db57f1615cbef18c75164df9e5"},"14c94f7888c75007a94132f03caef0f6b58bcb136c2994213fd2d3b99f3d7f85","4695042a55a75a6c62dc57f2efe60ef3c7bbe19adedb5081f6e51dd664bbc3f7","b006ad8d854471e7a270bd8918508090961bdc1cfe77ed51f13f471fe682acac","310901df1081433ff7c3b7918496cabb92ded208b04294d3d2bd35acae2de836","c8646410cd2a6bf05eb7e7a51c881776410d07fd5d8f75092a2c815c9c6fda52",{"version":"127604bb56d364ecc35cbb4927ba7c53f552353fc7913b07a4f5cc957210aabd","signature":"973a1e0a155ab26d66226ff9d64a36cf61227e9240b21cabdc67df29847a6599"},{"version":"dcea5769c8b69d7b7a5ee6ffd4d22260e47d53d22990e91d504cbdc0c0120c14","signature":"16c51743932253da5b661b0a5068eb1423a6f020f62e6783ce8ac5259cff10f2"},{"version":"67be5e00299e02d108b294758dcc0218da9f2a2823dea61d708ddbe705771ae5","signature":"05fe3dec4dc02961a8959758da54c6ff9d32a232183041163d4d52cc6bf39015"},{"version":"e2e5ebf01c7004f157b8c750fdddb9f227fbf3119a87297e3a014db04c3f0887","signature":"fc6fe9c667e291d0bbdc904c921d2c1d385175f8c135d9e549298c96265acaec"},{"version":"6b0da45d7a1027dd4a9b14ac009b018761e8851c84a9e54ecc1be9086f0516c6","signature":"38fd30580198d072da98f6dbcb7535f47359ca91ffe57e3b9bfd1961a3b209ab"},{"version":"b75a82fbc994a947805538c6652361c50c70f121e173c9ae62b190b8936790e0","signature":"0e92b9a9c01325fa2e1bc7574a0ff68328f69f8db609be2156a4c3da5ce493df"},{"version":"4c408d170f00539f8957a9cfce1d7f3e4a2d36651dbf4b16337a7af5c568d7e5","signature":"a0c04e7f7ac63b60e113ff0a7ad4fbf9214babb1db0572641709a5859710e27c"},"4489c6a9fde8934733aa7df6f7911461ee6e9e4ad092736bd416f6b2cc20b2c6","2c8e55457aaf4902941dfdba4061935922e8ee6e120539c9801cd7b400fae050","8041cfce439ff29d339742389de04c136e3029d6b1817f07b2d7fcbfb7534990","670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","9d38964b57191567a14b396422c87488cecd48f405c642daa734159875ee81d9","069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9",{"version":"64d4b35c5456adf258d2cf56c341e203a073253f229ef3208fc0d5020253b241","affectsGlobalScope":true},"ee7d8894904b465b072be0d2e4b45cf6b887cdba16a467645c4e200982ece7ea","f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","bc3cba7b0af2d52e7425299aee518db479d44004eff6fbbd206d1ee7e5ec3fb5","afe73051ff6a03a9565cbd8ebb0e956ee3df5e913ad5c1ded64218aabfa3dcb5","035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","a4809f4d92317535e6b22b01019437030077a76fec1d93b9881c9ed4738fcc54","5f53fa0bd22096d2a78533f94e02c899143b8f0f9891a46965294ee8b91a9434","0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","d8aab31ba8e618cc3eea10b0945de81cb93b7e8150a013a482332263b9305322","462bccdf75fcafc1ae8c30400c9425e1a4681db5d605d1a0edb4f990a54d8094","5923d8facbac6ecf7c84739a5c701a57af94a6f6648d6229a6c768cf28f0f8cb","7adecb2c3238794c378d336a8182d4c3dd2c4fa6fa1785e2797a3db550edea62","dc12dc0e5aa06f4e1a7692149b78f89116af823b9e1f1e4eae140cd3e0e674e6","1bfc6565b90c8771615cd8cfcf9b36efc0275e5e83ac7d9181307e96eb495161","8a8a96898906f065f296665e411f51010b51372fa260d5373bf9f64356703190","7f82ef88bdb67d9a850dd1c7cd2d690f33e0f0acd208e3c9eba086f3670d4f73",{"version":"ccfd8774cd9b929f63ff7dcf657977eb0652e3547f1fcac1b3a1dc5db22d4d58","affectsGlobalScope":true},"d92dc90fecd2552db74d8dc3c6fb4db9145b2aa0efe2c127236ba035969068d4","96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","8841e2aa774b89bd23302dede20663306dc1b9902431ac64b24be8b8d0e3f649","916be7d770b0ae0406be9486ac12eb9825f21514961dd050594c4b250617d5a8","254d9fb8c872d73d34594be8a200fd7311dbfa10a4116bfc465fba408052f2b3","d88a5e779faf033be3d52142a04fbe1cb96009868e3bbdd296b2bc6c59e06c0e","d8f7109e14f20eb735225a62fd3f8366da1a8349e90331cdad57f4b04caf6c5a","cf3d384d082b933d987c4e2fe7bfb8710adfd9dc8155190056ed6695a25a559e","9871b7ee672bc16c78833bdab3052615834b08375cb144e4d2cba74473f4a589","c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","86c73f2ee1752bac8eeeece234fd05dfcf0637a4fbd8032e4f5f43102faa8eec","42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","f4e9bf9103191ef3b3612d3ec0044ca4044ca5be27711fe648ada06fad4bcc85","0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","7d8ddf0f021c53099e34ee831a06c394d50371816caa98684812f089b4c6b3d4","7d2a0ba1297be385a89b5515b88cd31b4a1eeef5236f710166dc1b36b1741e1b","9d92b037978bb9525bc4b673ebddd443277542e010c0aef019c03a170ccdaa73","ab82804a14454734010dcdcd43f564ff7b0389bee4c5692eec76ff5b30d4cf66","bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","ae271d475b632ce7b03fea6d9cf6da72439e57a109672671cbc79f54e1386938"],"options":{"composite":true,"declaration":true,"declarationMap":true,"emitDeclarationOnly":true,"esModuleInterop":true,"inlineSources":true,"module":1,"outDir":"./types","rootDir":"../src","sourceMap":true,"strict":true,"target":7},"fileIdsList":[[668],[73,109,110,111,126],[110,111,127,128],[109,110],[109,126,129,132],[109,129,132,133],[130,131,132,134,135],[109,132],[109,126,129,130,131,134],[109,117],[109],[73,109],[61,109],[113,114,115,116,117,118,119,120,121,122,123,124,125],[109,115,116],[109,115,117],[607,611,612],[607,610],[610],[611,613,615],[607,610,611,612,613,614],[607,610,614,618,619,620],[607,610,614,621],[607],[607,608],[608,609],[607,610,616,619,621,622],[617],[618,620,624,627,628],[618,620,628],[109,610,614,618,619,621,624],[618,628],[618,621,625],[610,619,621],[618,621,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639],[618,626],[109,626],[607,614,618,619,620,621,622,625],[618,620,624,626],[618,625,626],[109,136,393,394],[393],[394,395],[109,388],[388,389,390,391,392],[109,360,367,368],[109,360,367,368,388],[109,360,367,368,372],[109,360,367,368,369,371,372],[109,360,367,368,370],[109,360,367,368,373,374,376,377],[366,388],[358,367,368,373,374],[360,366,367],[109,360,367,368,373],[109,360,367,368,371],[109,360,367,368,384],[109,360,367,368,385],[112,357,360,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387],[358],[358,359],[73,109,393,396,402],[396,403],[403,404],[217],[217,546,547],[547,548,549],[250,259,260,263],[250,259,262],[250,259,261,263],[251,254,255,257],[251,252,253],[254,255,257,258],[251,252,256],[262,268],[250,259,262,268],[259,262,268],[259,262,264,265,266,267],[250,259,260,261,262,263,268],[250,259],[251],[145,168,194],[168,198,215],[168,215,216,235],[145,168],[145],[190,191,192,193,195,196,197],[168,190,191,192,193,195,196],[199],[202],[145,194],[203,204,205],[198],[194,198,200,201,206,207,214,216,236,237,355],[168,201,206],[209],[208,210,211,212,213],[145,168,194,198],[168,207,354],[139,145],[656,657,658,659],[550,569],[570],[562],[564],[562,563,564,565,566,567,568],[562,564],[109,229,425],[109,229,426],[426],[397],[109,229,397],[397,398,399,400,401],[109,229],[229,428],[229,429],[229,428,429],[428,429,430,431,432,433,434,435,436,437],[62,109,229,428,429],[106,109,229,428,429],[168,217,224,225],[226],[109,168,226,229,230],[109,168,217,224,226,229],[230],[225,226,227,230,231,232,233,234],[109,227,229,232],[225,232],[168,224],[168,238],[238,239],[238,239,240,241],[168],[189,354,476,493,494,507,532],[530],[168,505,520,528,529,531],[189,354,456,518],[519],[109,224,229,427,438,493,494,495,507],[168,189,493,507],[168,438],[438,496],[498],[495,496,497,499,502,504],[496,500,505],[501],[438,496,497],[496,497],[503],[168,185,189,354,463,476,486,493,494,505,507,510,512,520,522,525],[510,525,526,527],[493,507],[506,507,508,509],[493,507,508],[168,493,506,507],[168,493,507],[523,524],[168,189,486,523],[168,354,486],[521],[168,354,476,493,494,507,528],[145,168,485],[109,168,243],[168,351],[320],[168,243,320,348,351,352,353],[109,168,242,243],[244,245,246,247,349,350],[139,145,348],[139,145,246],[278],[278,292],[278,279,294,296,297],[278,292,295],[278,284],[278,283,285,286],[278,283,287],[283,284,285,286,287,288],[290,291],[279,280,281,282,289,292,293,294,295,296,297,298,299],[278,300,301,302,303],[145,278,300,351],[335],[348],[338,339,340,341,342,343,344,345,346],[168,270],[320,344,351],[270,348,351],[145,321],[270,271,321,324,334,335,336,347],[145,168,304,320],[348,351],[269,271],[271],[351],[321],[168,324],[248,249,272,273,274,275,276,277,322,323,325,326,327,328,329,330,331,332,333],[168,326],[248,249,272,273,274,275,276,277,322,323,325,326,327,328,329,330,331,332,351],[168,269,270],[235,334],[168,271],[318],[145,305],[306,307,308,309,310,311,312,313,314,315,316,317],[305,318,319],[304],[354],[442],[441],[145,168,448],[269],[168,242,354],[145,354,455,456],[439,440,442,443,444,445,446,449,450,451,452,453,454,455,457,458,459,477,478,480,481,482,483,484,487,488,489,490,491,492],[145,168,476],[145,168,354,442,480],[159],[479],[145,168,269,354,478],[145,354,478],[145,354,476,479,481,486,487],[145,168,442,445,457,480,481],[354,456],[487],[537],[537,538,539],[148],[145,148],[146,147,148,149,150,151,152,153,154,155,156,157,160,161,162,163,164,165,166,167],[139,145,146],[136,148,154,156],[148,149],[145,163],[109,363],[361,362,365],[361,364],[109,361],[413,414],[668,669,670,671,672],[668,670],[158],[674,675,676],[74,109],[679],[680],[691],[685,690],[581,583,584,585,586,587,588,589,590,591,592,593],[581,582,584,585,586,587,588,589,590,591,592,593],[582,583,584,585,586,587,588,589,590,591,592,593],[581,582,583,585,586,587,588,589,590,591,592,593],[581,582,583,584,586,587,588,589,590,591,592,593],[581,582,583,584,585,587,588,589,590,591,592,593],[581,582,583,584,585,586,588,589,590,591,592,593],[581,582,583,584,585,586,587,589,590,591,592,593],[581,582,583,584,585,586,587,588,590,591,592,593],[581,582,583,584,585,586,587,588,589,591,592,593],[581,582,583,584,585,586,587,588,589,590,592,593],[581,582,583,584,585,586,587,588,589,590,591,593],[581,582,583,584,585,586,587,588,589,590,591,592],[57],[60],[61,66,93],[62,73,74,81,90,101],[62,63,73,81],[64,102],[65,66,74,82],[66,90,98],[67,69,73,81],[68],[69,70],[73],[72,73],[60,73],[73,74,75,90,101],[73,74,75,90],[73,76,81,90,101],[73,74,76,77,81,90,98,101],[76,78,90,98,101],[57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108],[73,79],[80,101,106],[69,73,81,90],[82],[83],[60,84],[85,100,106],[86],[87],[73,88],[88,89,102,104],[61,73,90,91,92],[61,90,92],[90,91],[93],[94],[73,96,97],[96,97],[66,81,90,98],[99],[81,100],[61,76,87,101],[66,102],[90,103],[104],[105],[61,66,73,75,84,90,101,104,106],[90,107],[109,228],[699,738],[699,723,738],[738],[699],[699,724,738],[699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737],[724,738],[739],[742],[511],[572],[574],[572,573,574,575,576,577,578],[572,574],[447],[595,596,597],[595],[596],[180],[180,181,182,183,184],[169,170,171,172,173,174,175,176,177,178,179],[683,686],[683,686,687,688],[685],[682,689],[684],[138,140,141,142,143,144],[138,139],[140],[139,140],[138,140],[168,189,356,424,532],[533,535],[424,534],[168,189,242],[461,462],[168,185,186,187],[186],[187],[137,186,187,188],[408],[408,409,412,416],[415],[168,410,411],[543,544,545],[224,543],[168,224,543],[168,217,224],[168,189,555,559],[560],[168,217],[168,218],[218,219,220,221,222,223],[136,168,185,189,356,405,406,422],[423],[73,109,168,189],[407],[407,417],[407,418,419,420,421],[168,189,410,417,540,541,542,551,552],[551],[542,551,553,554],[168,417,546,550],[168,468,469,470],[168,189,417,460,466,468,471],[168,185,189,242,417,460,463,464,465,466,467,469,470,471],[168,189,468],[242,468,469,471],[466,467,468,469,470,471,475],[168,224,468,470,476],[168,224,467,468,469],[472,473,474],[168,224,417,467,469,470],[168,224,467,469,470],[168,224,469,471],[189,417,513,515,516],[514,515],[517],[516,517],[168,189,555,556],[109,168,189,555,556],[556,557,558],[168,555],[73,126,129,136,168,189,242,410,417,463,534,536,555,561,571,579,580,593,594,599,600,602,603,604,605,606,642,643,644,646,647,648,649,650,651,652,653,654,655,663,664,665],[168,599],[168,561,594,599,604],[168,410,411,417,594,599,605],[168,599,601,641],[129,136,168,593,594,599,623,640],[168,417,599],[168,411,417,534,579,594,599,601,645],[73,168,410,555,561,594,599,600,647],[73,168,536,555,579,594,599],[168,410,555,571,579,594,646,649,650],[73,410,417,555,593,594,599],[599,600,602,645,664,666],[136,168,410,555,561,598],[168,417,594,601],[242,599],[168,410,417,561,594,599,600,603],[417,561,599],[168,410,417,594,599,601],[593,598,599],[168,555,594,599],[417,571,594,599],[168,417,594,661],[53,168,417,594,599,601,616,661,662],[410,417,593,594,599,601,602,666],[53,410,417,599,616],[168,417,599,666],[53,242,417,599,602,616],[129,136,168,189,463,536,555,561,571,599,649],[599],[599,641],[73,168,555,561,599],[73,168,536,555,599],[168,410,555,571,646,649,650],[73,410,555,599],[159,168],[168,410,561,599],[561,599],[159,168,410,599],[168,555,599],[571,599],[168,599,616,662],[410,599,666],[410,599],[599,666]],"referencedMap":[[670,1],[127,2],[129,3],[111,4],[133,5],[134,6],[130,6],[136,7],[131,6],[135,8],[132,9],[118,10],[115,11],[122,12],[116,10],[113,13],[126,14],[120,11],[117,15],[119,16],[613,17],[612,18],[611,19],[616,20],[615,21],[621,22],[622,23],[608,24],[609,25],[610,26],[623,27],[618,28],[629,29],[630,30],[625,31],[631,32],[632,33],[633,33],[624,34],[640,35],[635,29],[634,36],[636,37],[626,38],[637,32],[638,30],[628,39],[639,36],[627,40],[619,18],[395,41],[394,42],[396,43],[391,44],[389,44],[390,44],[393,45],[375,46],[380,47],[369,46],[374,48],[373,49],[371,50],[378,51],[379,46],[381,52],[376,53],[368,54],[382,55],[384,56],[385,57],[386,58],[388,59],[359,60],[360,61],[403,62],[404,63],[405,64],[547,65],[548,66],[549,66],[550,67],[261,68],[263,69],[262,70],[258,71],[254,72],[255,72],[259,73],[257,74],[264,75],[265,76],[266,77],[268,78],[267,75],[269,79],[260,80],[253,81],[256,72],[215,82],[216,83],[236,84],[190,85],[191,86],[192,86],[193,85],[198,87],[197,88],[195,82],[196,85],[200,89],[199,85],[203,90],[202,91],[206,92],[204,85],[205,93],[356,94],[208,82],[209,95],[210,96],[211,82],[214,97],[213,98],[237,83],[355,99],[194,100],[660,101],[570,102],[571,103],[563,104],[565,105],[569,106],[567,107],[566,107],[426,108],[425,109],[427,110],[399,111],[400,111],[397,65],[398,112],[402,113],[401,114],[429,115],[432,116],[431,117],[438,118],[434,117],[433,119],[436,117],[435,120],[437,116],[430,116],[226,121],[227,122],[232,123],[230,124],[231,125],[235,126],[233,127],[234,128],[225,129],[239,130],[240,131],[242,132],[238,133],[217,12],[530,134],[531,135],[532,136],[519,137],[520,138],[496,139],[495,140],[497,141],[498,142],[499,143],[505,144],[501,145],[502,146],[500,147],[503,148],[504,149],[526,150],[528,151],[508,152],[510,153],[509,154],[507,155],[506,156],[525,157],[524,158],[523,159],[527,152],[521,133],[522,160],[529,161],[486,162],[485,85],[352,163],[243,164],[353,165],[354,166],[244,167],[245,133],[246,133],[351,168],[349,169],[247,170],[278,133],[279,171],[280,171],[281,171],[282,171],[293,171],[294,171],[295,172],[298,173],[299,171],[296,174],[297,171],[283,171],[285,175],[287,176],[288,177],[286,171],[284,171],[289,178],[290,171],[291,171],[292,179],[300,180],[304,181],[302,171],[301,171],[303,182],[336,183],[338,133],[339,184],[347,185],[340,133],[342,186],[343,133],[345,187],[344,188],[346,189],[348,190],[321,191],[248,184],[249,192],[272,193],[273,194],[274,193],[276,133],[277,195],[322,196],[325,197],[334,198],[327,199],[326,133],[328,133],[329,164],[333,200],[330,195],[331,197],[332,184],[271,201],[335,202],[324,203],[319,204],[306,205],[315,205],[307,205],[308,205],[317,205],[309,205],[310,205],[318,206],[316,205],[311,205],[314,205],[312,205],[313,205],[320,207],[305,86],[456,208],[440,209],[443,210],[444,211],[446,210],[449,212],[452,213],[454,214],[457,215],[493,216],[477,217],[459,133],[481,218],[482,219],[480,220],[479,221],[483,222],[488,223],[478,100],[487,224],[490,225],[491,226],[492,133],[442,211],[538,227],[539,227],[540,228],[146,86],[147,86],[149,229],[150,86],[151,86],[152,230],[148,86],[168,231],[156,232],[157,233],[160,219],[166,234],[167,235],[364,236],[363,11],[366,237],[361,11],[365,238],[362,239],[415,240],[673,241],[669,1],[671,242],[672,1],[411,11],[159,243],[677,244],[678,245],[680,246],[681,247],[692,248],[691,249],[582,250],[583,251],[581,252],[584,253],[585,254],[586,255],[587,256],[588,257],[589,258],[590,259],[591,260],[592,261],[593,262],[57,263],[58,263],[60,264],[61,265],[62,266],[63,267],[64,268],[65,269],[66,270],[67,271],[68,272],[69,273],[70,273],[71,274],[72,275],[73,276],[74,277],[75,278],[76,279],[77,280],[78,281],[109,282],[79,283],[80,284],[81,285],[82,286],[83,287],[84,288],[85,289],[86,290],[87,291],[88,292],[89,293],[90,294],[92,295],[91,296],[93,297],[94,298],[96,299],[97,300],[98,301],[99,302],[100,303],[101,304],[102,305],[103,306],[104,307],[105,308],[106,309],[107,310],[696,11],[229,311],[698,11],[723,312],[724,313],[699,314],[702,314],[721,312],[722,312],[712,312],[711,315],[709,312],[704,312],[717,312],[715,312],[719,312],[703,312],[716,312],[720,312],[705,312],[706,312],[718,312],[700,312],[707,312],[708,312],[710,312],[714,312],[725,316],[713,312],[701,312],[738,317],[732,316],[734,318],[733,316],[726,316],[727,316],[729,316],[731,316],[735,318],[736,318],[728,318],[730,318],[740,319],[743,320],[512,321],[573,322],[575,323],[579,324],[577,325],[576,325],[448,326],[598,327],[596,328],[597,329],[176,330],[178,330],[177,330],[175,330],[185,331],[180,332],[171,330],[172,330],[173,330],[174,330],[687,333],[689,334],[688,333],[686,335],[690,336],[685,337],[145,338],[140,339],[141,340],[142,340],[143,341],[144,341],[139,342],[533,343],[536,344],[535,345],[461,346],[463,347],[188,348],[187,349],[186,350],[189,351],[409,352],[417,353],[416,354],[412,355],[546,356],[544,357],[545,358],[543,359],[560,360],[561,361],[218,362],[219,363],[220,363],[222,363],[224,364],[223,363],[423,365],[424,366],[407,367],[421,368],[420,368],[418,369],[419,368],[422,370],[553,371],[552,372],[554,372],[555,373],[551,374],[471,375],[469,376],[468,377],[466,378],[470,379],[476,380],[465,381],[472,382],[475,383],[473,384],[474,385],[467,386],[517,387],[516,388],[518,389],[515,390],[557,391],[558,392],[559,393],[556,394],[666,395],[661,396],[605,397],[606,398],[642,399],[641,400],[643,399],[644,401],[646,402],[648,403],[649,404],[651,405],[650,406],[667,407],[594,133],[599,408],[645,409],[652,410],[604,411],[600,412],[653,413],[654,414],[647,415],[655,416],[662,417],[663,418],[603,419],[664,420],[602,421],[665,422]],"exportedModulesMap":[[670,1],[127,2],[129,3],[111,4],[133,5],[134,6],[130,6],[136,7],[131,6],[135,8],[132,9],[118,10],[115,11],[122,12],[116,10],[113,13],[126,14],[120,11],[117,15],[119,16],[613,17],[612,18],[611,19],[616,20],[615,21],[621,22],[622,23],[608,24],[609,25],[610,26],[623,27],[618,28],[629,29],[630,30],[625,31],[631,32],[632,33],[633,33],[624,34],[640,35],[635,29],[634,36],[636,37],[626,38],[637,32],[638,30],[628,39],[639,36],[627,40],[619,18],[395,41],[394,42],[396,43],[391,44],[389,44],[390,44],[393,45],[375,46],[380,47],[369,46],[374,48],[373,49],[371,50],[378,51],[379,46],[381,52],[376,53],[368,54],[382,55],[384,56],[385,57],[386,58],[388,59],[359,60],[360,61],[403,62],[404,63],[405,64],[547,65],[548,66],[549,66],[550,67],[261,68],[263,69],[262,70],[258,71],[254,72],[255,72],[259,73],[257,74],[264,75],[265,76],[266,77],[268,78],[267,75],[269,79],[260,80],[253,81],[256,72],[215,82],[216,83],[236,84],[190,85],[191,86],[192,86],[193,85],[198,87],[197,88],[195,82],[196,85],[200,89],[199,85],[203,90],[202,91],[206,92],[204,85],[205,93],[356,94],[208,82],[209,95],[210,96],[211,82],[214,97],[213,98],[237,83],[355,99],[194,100],[660,101],[570,102],[571,103],[563,104],[565,105],[569,106],[567,107],[566,107],[426,108],[425,109],[427,110],[399,111],[400,111],[397,65],[398,112],[402,113],[401,114],[429,115],[432,116],[431,117],[438,118],[434,117],[433,119],[436,117],[435,120],[437,116],[430,116],[226,121],[227,122],[232,123],[230,124],[231,125],[235,126],[233,127],[234,128],[225,129],[239,130],[240,131],[242,132],[238,133],[217,12],[530,134],[531,135],[532,136],[519,137],[520,138],[496,139],[495,140],[497,141],[498,142],[499,143],[505,144],[501,145],[502,146],[500,147],[503,148],[504,149],[526,150],[528,151],[508,152],[510,153],[509,154],[507,155],[506,156],[525,157],[524,158],[523,159],[527,152],[521,133],[522,160],[529,161],[486,162],[485,85],[352,163],[243,164],[353,165],[354,166],[244,167],[245,133],[246,133],[351,168],[349,169],[247,170],[278,133],[279,171],[280,171],[281,171],[282,171],[293,171],[294,171],[295,172],[298,173],[299,171],[296,174],[297,171],[283,171],[285,175],[287,176],[288,177],[286,171],[284,171],[289,178],[290,171],[291,171],[292,179],[300,180],[304,181],[302,171],[301,171],[303,182],[336,183],[338,133],[339,184],[347,185],[340,133],[342,186],[343,133],[345,187],[344,188],[346,189],[348,190],[321,191],[248,184],[249,192],[272,193],[273,194],[274,193],[276,133],[277,195],[322,196],[325,197],[334,198],[327,199],[326,133],[328,133],[329,164],[333,200],[330,195],[331,197],[332,184],[271,201],[335,202],[324,203],[319,204],[306,205],[315,205],[307,205],[308,205],[317,205],[309,205],[310,205],[318,206],[316,205],[311,205],[314,205],[312,205],[313,205],[320,207],[305,86],[456,208],[440,209],[443,210],[444,211],[446,210],[449,212],[452,213],[454,214],[457,215],[493,216],[477,217],[459,133],[481,218],[482,219],[480,220],[479,221],[483,222],[488,223],[478,100],[487,224],[490,225],[491,226],[492,133],[442,211],[538,227],[539,227],[540,228],[146,86],[147,86],[149,229],[150,86],[151,86],[152,230],[148,86],[168,231],[156,232],[157,233],[160,219],[166,234],[167,235],[364,236],[363,11],[366,237],[361,11],[365,238],[362,239],[415,240],[673,241],[669,1],[671,242],[672,1],[411,11],[159,243],[677,244],[678,245],[680,246],[681,247],[692,248],[691,249],[582,250],[583,251],[581,252],[584,253],[585,254],[586,255],[587,256],[588,257],[589,258],[590,259],[591,260],[592,261],[593,262],[57,263],[58,263],[60,264],[61,265],[62,266],[63,267],[64,268],[65,269],[66,270],[67,271],[68,272],[69,273],[70,273],[71,274],[72,275],[73,276],[74,277],[75,278],[76,279],[77,280],[78,281],[109,282],[79,283],[80,284],[81,285],[82,286],[83,287],[84,288],[85,289],[86,290],[87,291],[88,292],[89,293],[90,294],[92,295],[91,296],[93,297],[94,298],[96,299],[97,300],[98,301],[99,302],[100,303],[101,304],[102,305],[103,306],[104,307],[105,308],[106,309],[107,310],[696,11],[229,311],[698,11],[723,312],[724,313],[699,314],[702,314],[721,312],[722,312],[712,312],[711,315],[709,312],[704,312],[717,312],[715,312],[719,312],[703,312],[716,312],[720,312],[705,312],[706,312],[718,312],[700,312],[707,312],[708,312],[710,312],[714,312],[725,316],[713,312],[701,312],[738,317],[732,316],[734,318],[733,316],[726,316],[727,316],[729,316],[731,316],[735,318],[736,318],[728,318],[730,318],[740,319],[743,320],[512,321],[573,322],[575,323],[579,324],[577,325],[576,325],[448,326],[598,327],[596,328],[597,329],[176,330],[178,330],[177,330],[175,330],[185,331],[180,332],[171,330],[172,330],[173,330],[174,330],[687,333],[689,334],[688,333],[686,335],[690,336],[685,337],[145,338],[140,339],[141,340],[142,340],[143,341],[144,341],[139,342],[533,343],[536,344],[535,345],[461,346],[463,347],[188,348],[187,349],[186,350],[189,351],[409,352],[417,353],[416,354],[412,355],[546,356],[544,357],[545,358],[543,359],[560,360],[561,361],[218,362],[219,363],[220,363],[222,363],[224,364],[223,363],[423,365],[424,366],[407,367],[421,368],[420,368],[418,369],[419,368],[422,370],[553,371],[552,372],[554,372],[555,373],[551,374],[471,375],[469,376],[468,377],[466,378],[470,379],[476,380],[465,381],[472,382],[475,383],[473,384],[474,385],[467,386],[517,387],[516,388],[518,389],[515,390],[557,391],[558,392],[559,393],[556,394],[666,423],[661,133],[605,424],[606,424],[642,425],[641,396],[643,425],[644,424],[646,396],[648,426],[649,427],[651,428],[650,429],[667,407],[594,430],[599,408],[645,133],[652,424],[604,431],[600,432],[653,433],[654,424],[647,434],[655,435],[662,133],[663,436],[603,437],[664,438],[602,439],[665,424]],"semanticDiagnosticsPerFile":[670,668,127,110,129,111,128,133,134,130,136,131,135,132,118,115,122,116,113,121,126,123,124,125,120,117,114,119,613,612,611,616,615,621,622,608,609,610,607,623,618,617,614,629,630,625,631,632,633,624,640,635,634,636,626,637,638,628,639,627,619,620,395,394,396,391,389,390,393,392,375,380,369,374,373,371,378,379,381,376,370,368,367,377,383,382,384,385,386,388,358,359,360,357,372,387,403,404,405,406,547,548,549,550,410,261,263,262,250,258,254,255,259,257,264,265,266,268,267,269,260,253,251,252,256,215,216,236,190,191,192,193,198,197,195,196,200,199,201,203,202,206,204,205,207,356,208,209,210,211,214,212,213,237,355,194,658,656,657,659,660,570,571,563,562,565,564,568,569,567,566,426,425,427,399,400,397,398,402,401,429,432,431,438,434,433,436,435,437,428,430,226,227,232,230,231,235,233,234,225,239,241,240,242,238,217,530,531,532,519,520,496,495,497,498,499,505,501,502,500,503,504,526,494,528,508,510,509,507,506,525,524,523,527,521,522,529,486,485,352,243,353,354,244,245,246,351,349,247,350,278,279,280,281,282,293,294,295,298,299,296,297,283,285,287,288,286,284,289,290,291,292,300,304,302,301,303,270,336,338,339,347,340,341,342,343,345,344,346,337,348,321,248,249,272,273,274,275,276,277,322,323,325,334,327,326,328,329,333,330,331,332,271,335,324,319,306,315,307,308,317,309,310,318,316,311,314,312,313,320,305,456,439,440,443,444,445,446,449,450,451,452,453,454,455,457,458,493,477,459,481,482,480,479,483,484,488,489,478,487,490,491,492,441,442,538,539,540,537,146,147,149,150,151,152,153,154,155,148,168,156,157,160,161,162,163,164,165,166,167,364,363,366,361,365,362,413,415,414,673,669,671,672,411,159,464,674,677,675,678,679,680,681,692,691,676,693,582,583,581,584,585,586,587,588,589,590,591,592,593,694,158,57,58,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,59,108,76,77,78,109,79,80,81,82,83,84,85,86,87,88,89,90,92,91,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,695,696,697,513,229,228,698,723,724,699,702,721,722,712,711,709,704,717,715,719,703,716,720,705,706,718,700,707,708,710,714,725,713,701,738,737,732,734,733,726,727,729,731,735,736,728,730,740,739,741,534,742,743,512,511,573,572,575,574,578,579,577,576,112,682,447,448,580,598,596,597,595,514,179,176,178,177,175,185,180,184,181,183,182,171,172,173,169,170,174,683,687,689,688,686,690,541,460,685,684,138,145,140,141,142,143,144,139,8,10,9,2,11,12,13,14,15,16,17,18,3,4,22,19,20,21,23,24,25,5,26,27,28,29,6,33,30,31,32,34,7,35,40,41,36,37,38,39,1,42,533,536,535,461,462,463,137,188,187,186,189,409,417,416,408,412,546,544,545,543,560,561,218,219,220,221,222,224,223,423,424,407,421,420,418,419,422,553,542,552,554,555,551,471,469,468,466,470,476,465,472,475,473,474,467,517,516,518,515,557,558,559,556,666,601,661,605,606,642,641,643,644,646,648,649,651,650,667,594,599,645,652,604,600,653,654,647,655,662,663,603,664,602,665,48,49,50,51,52,53,43,54,55,56,44,45,46,47],"latestChangedDtsFile":"./types/index.d.ts"},"version":"4.9.5"} -\ No newline at end of file -+{"program":{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../types/eth-ens-namehash.d.ts","../../../types/ethereum-ens-network-map.d.ts","../../../types/ethjs-query.d.ts","../../../types/global.d.ts","../../../types/single-call-balance-checker-abi.d.ts","../../../types/@metamask/contract-metadata.d.ts","../../../types/@metamask/eth-hd-keyring.d.ts","../../../types/@metamask/eth-simple-keyring.d.ts","../../../types/@metamask/ethjs-provider-http.d.ts","../../../types/@metamask/ethjs-unit.d.ts","../../../types/@metamask/metamask-eth-abis.d.ts","../../../types/eth-json-rpc-infura/src/createprovider.d.ts","../../../types/eth-phishing-detect/src/config.json.d.ts","../../../types/eth-phishing-detect/src/detector.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/dom-events.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/globals.global.d.ts","../../../node_modules/@types/node/index.d.ts","../../../node_modules/@ethereumjs/common/dist/enums.d.ts","../../../node_modules/@ethereumjs/common/dist/types.d.ts","../../../node_modules/buffer/index.d.ts","../../../node_modules/@ethereumjs/util/dist/constants.d.ts","../../../node_modules/@ethereumjs/util/dist/units.d.ts","../../../node_modules/@ethereumjs/util/dist/address.d.ts","../../../node_modules/@ethereumjs/util/dist/bytes.d.ts","../../../node_modules/@ethereumjs/util/dist/types.d.ts","../../../node_modules/@ethereumjs/util/dist/account.d.ts","../../../node_modules/@ethereumjs/util/dist/withdrawal.d.ts","../../../node_modules/@ethereumjs/util/dist/signature.d.ts","../../../node_modules/@ethereumjs/util/dist/encoding.d.ts","../../../node_modules/@ethereumjs/util/dist/asynceventemitter.d.ts","../../../node_modules/@ethereumjs/util/dist/internal.d.ts","../../../node_modules/@ethereumjs/util/dist/lock.d.ts","../../../node_modules/@ethereumjs/util/dist/provider.d.ts","../../../node_modules/@ethereumjs/util/dist/index.d.ts","../../../node_modules/@ethereumjs/common/dist/common.d.ts","../../../node_modules/@ethereumjs/common/dist/utils.d.ts","../../../node_modules/@ethereumjs/common/dist/index.d.ts","../../../node_modules/@ethereumjs/tx/dist/eip2930transaction.d.ts","../../../node_modules/@ethereumjs/tx/dist/legacytransaction.d.ts","../../../node_modules/@ethereumjs/tx/dist/types.d.ts","../../../node_modules/@ethereumjs/tx/dist/basetransaction.d.ts","../../../node_modules/@ethereumjs/tx/dist/eip1559transaction.d.ts","../../../node_modules/@ethereumjs/tx/dist/transactionfactory.d.ts","../../../node_modules/@ethereumjs/tx/dist/index.d.ts","../../base-controller/dist/types/basecontrollerv1.d.ts","../../../node_modules/superstruct/dist/error.d.ts","../../../node_modules/superstruct/dist/utils.d.ts","../../../node_modules/superstruct/dist/struct.d.ts","../../../node_modules/superstruct/dist/structs/coercions.d.ts","../../../node_modules/superstruct/dist/structs/refinements.d.ts","../../../node_modules/superstruct/dist/structs/types.d.ts","../../../node_modules/superstruct/dist/structs/utilities.d.ts","../../../node_modules/superstruct/dist/index.d.ts","../../../node_modules/@metamask/utils/dist/types/assert.d.ts","../../../node_modules/@metamask/utils/dist/types/base64.d.ts","../../../node_modules/@metamask/utils/dist/types/hex.d.ts","../../../node_modules/@metamask/utils/dist/types/bytes.d.ts","../../../node_modules/@metamask/utils/dist/types/caip-types.d.ts","../../../node_modules/@metamask/utils/dist/types/checksum.d.ts","../../../node_modules/@metamask/utils/dist/types/coercers.d.ts","../../../node_modules/@metamask/utils/dist/types/collections.d.ts","../../../node_modules/@metamask/utils/dist/types/encryption-types.d.ts","../../../node_modules/@metamask/utils/dist/types/errors.d.ts","../../../node_modules/@metamask/utils/dist/types/json.d.ts","../../../node_modules/@metamask/utils/dist/types/keyring.d.ts","../../../node_modules/@types/ms/index.d.ts","../../../node_modules/@types/debug/index.d.ts","../../../node_modules/@metamask/utils/dist/types/logging.d.ts","../../../node_modules/@metamask/utils/dist/types/misc.d.ts","../../../node_modules/@metamask/utils/dist/types/number.d.ts","../../../node_modules/@metamask/utils/dist/types/opaque.d.ts","../../../node_modules/@metamask/utils/dist/types/promise.d.ts","../../../node_modules/@metamask/utils/dist/types/time.d.ts","../../../node_modules/@metamask/utils/dist/types/transaction-types.d.ts","../../../node_modules/@metamask/utils/dist/types/versions.d.ts","../../../node_modules/@metamask/utils/dist/types/index.d.ts","../../../node_modules/immer/dist/utils/env.d.ts","../../../node_modules/immer/dist/utils/errors.d.ts","../../../node_modules/immer/dist/types/types-external.d.ts","../../../node_modules/immer/dist/types/types-internal.d.ts","../../../node_modules/immer/dist/utils/common.d.ts","../../../node_modules/immer/dist/utils/plugins.d.ts","../../../node_modules/immer/dist/core/scope.d.ts","../../../node_modules/immer/dist/core/finalize.d.ts","../../../node_modules/immer/dist/core/proxy.d.ts","../../../node_modules/immer/dist/core/immerclass.d.ts","../../../node_modules/immer/dist/core/current.d.ts","../../../node_modules/immer/dist/internal.d.ts","../../../node_modules/immer/dist/plugins/es5.d.ts","../../../node_modules/immer/dist/plugins/patches.d.ts","../../../node_modules/immer/dist/plugins/mapset.d.ts","../../../node_modules/immer/dist/plugins/all.d.ts","../../../node_modules/immer/dist/immer.d.ts","../../base-controller/dist/types/restrictedcontrollermessenger.d.ts","../../base-controller/dist/types/controllermessenger.d.ts","../../base-controller/dist/types/basecontrollerv2.d.ts","../../base-controller/dist/types/index.d.ts","../../../node_modules/@metamask/keyring-api/dist/api/account.d.ts","../../../node_modules/@metamask/keyring-api/dist/api/balance.d.ts","../../../node_modules/@metamask/keyring-api/dist/api/caip.d.ts","../../../node_modules/@metamask/keyring-api/dist/api/export.d.ts","../../../node_modules/@metamask/keyring-api/dist/superstruct.d.ts","../../../node_modules/@metamask/keyring-api/dist/api/request.d.ts","../../../node_modules/@metamask/keyring-api/dist/api/response.d.ts","../../../node_modules/@metamask/keyring-api/dist/api/keyring.d.ts","../../../node_modules/@metamask/keyring-api/dist/api/index.d.ts","../../../node_modules/@metamask/keyring-api/dist/btc/types.d.ts","../../../node_modules/@metamask/keyring-api/dist/btc/index.d.ts","../../../node_modules/@metamask/keyring-api/dist/contexts.d.ts","../../../node_modules/@metamask/keyring-api/dist/eth/erc4337/types.d.ts","../../../node_modules/@metamask/keyring-api/dist/eth/erc4337/index.d.ts","../../../node_modules/@metamask/keyring-api/dist/eth/types.d.ts","../../../node_modules/@metamask/keyring-api/dist/eth/utils.d.ts","../../../node_modules/@metamask/keyring-api/dist/eth/index.d.ts","../../../node_modules/@metamask/keyring-api/dist/events.d.ts","../../../node_modules/@metamask/keyring-api/dist/internal/api.d.ts","../../../node_modules/@metamask/keyring-api/dist/internal/eth/ethkeyring.d.ts","../../../node_modules/@metamask/keyring-api/dist/internal/eth/index.d.ts","../../../node_modules/@metamask/keyring-api/dist/internal/events.d.ts","../../../node_modules/@metamask/keyring-api/dist/internal/rpc.d.ts","../../../node_modules/@metamask/keyring-api/dist/internal/types.d.ts","../../../node_modules/@metamask/keyring-api/dist/internal/index.d.ts","../../../node_modules/@metamask/keyring-api/dist/jsonrpcrequest.d.ts","../../../node_modules/@metamask/keyring-api/dist/keyringclient.d.ts","../../../node_modules/@metamask/safe-event-emitter/dist/cjs/index.d.ts","../../json-rpc-engine/dist/types/jsonrpcengine.d.ts","../../json-rpc-engine/dist/types/createasyncmiddleware.d.ts","../../json-rpc-engine/dist/types/createscaffoldmiddleware.d.ts","../../json-rpc-engine/dist/types/getuniqueid.d.ts","../../json-rpc-engine/dist/types/idremapmiddleware.d.ts","../../json-rpc-engine/dist/types/mergemiddleware.d.ts","../../json-rpc-engine/dist/types/index.d.ts","../../../node_modules/@metamask/providers/dist/types/utils.d.ts","../../../node_modules/@metamask/providers/dist/types/baseprovider.d.ts","../../../node_modules/@metamask/providers/dist/types/eip6963.d.ts","../../../node_modules/@types/readable-stream/node_modules/safe-buffer/index.d.ts","../../../node_modules/@types/readable-stream/index.d.ts","../../../node_modules/@metamask/providers/dist/types/streamprovider.d.ts","../../../node_modules/@metamask/providers/dist/types/extension-provider/createexternalextensionprovider.d.ts","../../../node_modules/@metamask/providers/dist/types/metamaskinpageprovider.d.ts","../../../node_modules/@metamask/providers/dist/types/initializeinpageprovider.d.ts","../../../node_modules/@metamask/providers/dist/types/shimweb3.d.ts","../../../node_modules/@metamask/providers/dist/types/index.d.ts","../../../node_modules/@metamask/keyring-api/dist/keyringsnaprpcclient.d.ts","../../../node_modules/@metamask/keyring-api/dist/rpc-handler.d.ts","../../../node_modules/@metamask/rpc-errors/dist/types/utils.d.ts","../../../node_modules/@metamask/rpc-errors/dist/types/classes.d.ts","../../../node_modules/@metamask/rpc-errors/dist/types/errors.d.ts","../../../node_modules/@metamask/rpc-errors/dist/types/error-constants.d.ts","../../../node_modules/@metamask/rpc-errors/dist/types/index.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/errors.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/internals/error-wrappers.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/internals/errors.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/internals/helpers.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/internals/structs.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/create-interface.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/dialog.d.ts","../../../node_modules/@metamask/key-tree/dist/constants.d.cts","../../../node_modules/@metamask/key-tree/node_modules/@noble/curves/abstract/modular.d.ts","../../../node_modules/@metamask/key-tree/node_modules/@noble/curves/abstract/utils.d.ts","../../../node_modules/@metamask/key-tree/node_modules/@noble/curves/abstract/curve.d.ts","../../../node_modules/@metamask/key-tree/dist/curves/ed25519.d.cts","../../../node_modules/@metamask/key-tree/dist/curves/ed25519bip32.d.cts","../../../node_modules/@metamask/key-tree/node_modules/@noble/curves/abstract/weierstrass.d.ts","../../../node_modules/@metamask/key-tree/dist/curves/secp256k1.d.cts","../../../node_modules/@metamask/key-tree/dist/curves/curve.d.cts","../../../node_modules/@metamask/key-tree/dist/curves/index.d.cts","../../../node_modules/@metamask/key-tree/dist/utils.d.cts","../../../node_modules/@metamask/key-tree/dist/bip44cointypenode.d.cts","../../../node_modules/@metamask/key-tree/dist/slip10node.d.cts","../../../node_modules/@metamask/key-tree/dist/bip44node.d.cts","../../../node_modules/@metamask/key-tree/dist/derivers/bip32.d.cts","../../../node_modules/@metamask/key-tree/dist/derivers/bip39.d.cts","../../../node_modules/@metamask/key-tree/dist/derivers/cip3.d.cts","../../../node_modules/@metamask/key-tree/dist/derivers/slip10.d.cts","../../../node_modules/@metamask/key-tree/dist/derivers/index.d.cts","../../../node_modules/@metamask/key-tree/dist/index.d.cts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/caip.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/permissions.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/get-bip32-entropy.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/get-bip32-public-key.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/get-bip44-entropy.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/get-client-status.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/get-entropy.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/get-file.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/component.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/address.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/box.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/copyable.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/divider.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/form/button.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/form/option.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/form/dropdown.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/form/input.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/form/field.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/form/form.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/form/index.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/formatting/bold.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/formatting/italic.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/formatting/index.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/heading.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/image.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/link.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/text.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/value.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/row.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/spinner.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/components/index.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/jsx-runtime.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/jsx-dev-runtime.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/validation.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/jsx/index.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/ui/nodes.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/ui/components/address.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/ui/components/copyable.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/ui/components/divider.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/ui/components/heading.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/ui/components/image.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/ui/components/panel.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/ui/components/spinner.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/ui/components/text.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/ui/components/row.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/ui/components/button.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/ui/components/input.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/ui/components/form.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/ui/components/index.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/ui/component.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/ui/index.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/interface.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/get-interface-state.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/get-locale.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/snap.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/get-snaps.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/invoke-snap.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/invoke-keyring.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/manage-accounts.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/manage-state.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/notify.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/request-snaps.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/update-interface.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/methods.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/methods/index.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/provider.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/global.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/images.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/handlers/cronjob.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/handlers/home-page.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/handlers/keyring.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/handlers/lifecycle.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/handlers/name-lookup.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/handlers/rpc-request.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/handlers/transaction.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/handlers/signature.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/handlers/user-input.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/handlers/index.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/types/index.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/internals/jsx.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/internals/svg.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/internals/index.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/error-wrappers.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/images.d.ts","../../../node_modules/@metamask/snaps-sdk/dist/types/index.d.ts","../../../node_modules/@metamask/keyring-api/dist/snap-utils.d.ts","../../../node_modules/@metamask/keyring-api/dist/index.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/patchcbor.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/lib/dataitem.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/lib/cbor-sync.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/lib/index.d.ts","../../../node_modules/@ngraveio/bc-ur/dist/ur.d.ts","../../../node_modules/@ngraveio/bc-ur/dist/urencoder.d.ts","../../../node_modules/@ngraveio/bc-ur/dist/fountainencoder.d.ts","../../../node_modules/@ngraveio/bc-ur/dist/fountaindecoder.d.ts","../../../node_modules/@ngraveio/bc-ur/dist/urdecoder.d.ts","../../../node_modules/@ngraveio/bc-ur/dist/index.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/registrytype.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/registryitem.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/cryptocoininfo.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/pathcomponent.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/cryptokeypath.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/types.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/cryptohdkey.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/cryptoeckey.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/bytes.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/multikey.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/scriptexpression.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/cryptooutput.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/cryptopsbt.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/cryptoaccount.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/decoder/index.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/extended/cryptomultiaccounts.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/errors/index.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/extended/derivationschema.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/extended/keyderivation.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/extended/qrhardwarecall.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/utils.d.ts","../../../node_modules/@keystonehq/bc-ur-registry/dist/index.d.ts","../../../node_modules/@keystonehq/bc-ur-registry-eth/dist/ethsignrequest.d.ts","../../../node_modules/@keystonehq/bc-ur-registry-eth/dist/ethsignature.d.ts","../../../node_modules/@keystonehq/bc-ur-registry-eth/dist/ethnftitem.d.ts","../../../node_modules/@keystonehq/bc-ur-registry-eth/dist/utlis.d.ts","../../../node_modules/@keystonehq/bc-ur-registry-eth/dist/index.d.ts","../../../node_modules/@keystonehq/base-eth-keyring/dist/interactionprovider.d.ts","../../../node_modules/@keystonehq/base-eth-keyring/dist/basekeyring.d.ts","../../../node_modules/@keystonehq/base-eth-keyring/dist/index.d.ts","../../../node_modules/@metamask/obs-store/dist/observablestore.d.ts","../../../node_modules/@metamask/obs-store/dist/asstream.d.ts","../../../node_modules/@metamask/obs-store/dist/composedstore.d.ts","../../../node_modules/@metamask/obs-store/dist/mergedstore.d.ts","../../../node_modules/@metamask/obs-store/dist/transform.d.ts","../../../node_modules/@metamask/obs-store/dist/index.d.ts","../../../node_modules/@keystonehq/metamask-airgapped-keyring/dist/metamaskinteractionprovider.d.ts","../../../node_modules/@keystonehq/metamask-airgapped-keyring/dist/metamaskkeyring.d.ts","../../../node_modules/@keystonehq/metamask-airgapped-keyring/dist/index.d.ts","../../../node_modules/@metamask/browser-passworder/dist/index.d.ts","../../message-manager/dist/types/abstractmessagemanager.d.ts","../../controller-utils/dist/types/types.d.ts","../../controller-utils/dist/types/constants.d.ts","../../../node_modules/@metamask/eth-query/index.d.ts","../../../node_modules/@types/bn.js/index.d.ts","../../controller-utils/dist/types/util.d.ts","../../../node_modules/@spruceid/siwe-parser/dist/abnf.d.ts","../../../node_modules/@spruceid/siwe-parser/dist/utils.d.ts","../../../node_modules/@spruceid/siwe-parser/dist/parsers.d.ts","../../controller-utils/dist/types/siwe.d.ts","../../controller-utils/dist/types/index.d.ts","../../message-manager/dist/types/personalmessagemanager.d.ts","../../message-manager/dist/types/typedmessagemanager.d.ts","../../message-manager/dist/types/encryptionpublickeymanager.d.ts","../../message-manager/dist/types/decryptmessagemanager.d.ts","../../message-manager/dist/types/index.d.ts","../../keyring-controller/dist/types/keyringcontroller.d.ts","../../keyring-controller/dist/types/index.d.ts","../../../node_modules/@metamask/object-multiplex/dist/substream.d.ts","../../../node_modules/@metamask/object-multiplex/dist/objectmultiplex.d.ts","../../../node_modules/@metamask/object-multiplex/dist/index.d.ts","../../../node_modules/@metamask/post-message-stream/dist/utils.d.ts","../../../node_modules/@metamask/post-message-stream/dist/basepostmessagestream.d.ts","../../../node_modules/@metamask/post-message-stream/dist/window/windowpostmessagestream.d.ts","../../../node_modules/@metamask/post-message-stream/dist/webworker/webworkerpostmessagestream.d.ts","../../../node_modules/@metamask/post-message-stream/dist/webworker/webworkerparentpostmessagestream.d.ts","../../../node_modules/@metamask/post-message-stream/dist/node-process/processparentmessagestream.d.ts","../../../node_modules/@metamask/post-message-stream/dist/node-process/processmessagestream.d.ts","../../../node_modules/@metamask/post-message-stream/dist/node-thread/threadparentmessagestream.d.ts","../../../node_modules/@metamask/post-message-stream/dist/node-thread/threadmessagestream.d.ts","../../../node_modules/@metamask/post-message-stream/dist/runtime/browserruntimepostmessagestream.d.ts","../../../node_modules/@metamask/post-message-stream/dist/index.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/array.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/auxiliary-files.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/virtual-file/virtualfile.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/virtual-file/index.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/base64.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/bytes.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/caveats.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/checksum.d.ts","../../../node_modules/cron-parser/types/common.d.ts","../../../node_modules/cron-parser/types/index.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/cronjob.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/deep-clone.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/default-endowments.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/derivation-paths.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/entropy.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/errors.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/handler-types.d.ts","../../../node_modules/@metamask/snaps-sdk/jsx.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/handlers.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/iframe.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/json.d.ts","../../../node_modules/nanoid/index.d.ts","../../approval-controller/dist/types/approvalcontroller.d.ts","../../approval-controller/dist/types/errors.d.ts","../../approval-controller/dist/types/index.d.ts","../../../node_modules/@types/deep-freeze-strict/index.d.ts","../../permission-controller/src/permission-middleware.ts","../../permission-controller/src/subjectmetadatacontroller.ts","../../permission-controller/src/utils.ts","../../permission-controller/src/permissioncontroller.ts","../../permission-controller/src/permission.ts","../../permission-controller/src/errors.ts","../../permission-controller/src/caveat.ts","../../permission-controller/src/rpc-methods/getpermissions.ts","../../permission-controller/src/rpc-methods/requestpermissions.ts","../../permission-controller/src/rpc-methods/revokepermissions.ts","../../permission-controller/src/rpc-methods/index.ts","../../permission-controller/src/index.ts","../../../node_modules/@metamask/snaps-utils/dist/types/json-rpc.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/structs.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/manifest/validation.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/manifest/index.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/localization.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/logging.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/namespace.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/path.d.ts","../../../node_modules/@metamask/snaps-registry/dist/verify.d.ts","../../../node_modules/@metamask/snaps-registry/dist/index.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/types.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/snaps.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/strings.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/ui.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/validation.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/versions.d.ts","../../../node_modules/@metamask/snaps-utils/dist/types/index.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/snaps/timer.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/services/executionservice.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/services/abstractexecutionservice.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/services/proxypostmessagestream.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/services/iframe/iframeexecutionservice.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/services/iframe/index.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/services/proxy/proxyexecutionservice.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/services/offscreen/offscreenexecutionservice.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/services/offscreen/index.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/services/webworker/webworkerexecutionservice.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/services/webworker/index.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/services/index.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/snaps/location/npm.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/snaps/location/location.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/snaps/location/http.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/snaps/location/local.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/snaps/location/index.d.ts","../../../node_modules/@xstate/fsm/lib/types.d.ts","../../../node_modules/@xstate/fsm/lib/index.d.ts","../../../node_modules/@types/punycode/index.d.ts","../../../node_modules/fastest-levenshtein/mod.d.ts","../../phishing-controller/src/utils.ts","../../phishing-controller/src/phishingdetector.ts","../../phishing-controller/src/phishingcontroller.ts","../../phishing-controller/src/index.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/interface/snapinterfacecontroller.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/interface/index.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/types/encryptor.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/types/index.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/snaps/registry/registry.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/snaps/registry/json.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/snaps/registry/index.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/snaps/snapcontroller.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/snaps/selectors.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/snaps/index.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/utils.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/cronjob/cronjobcontroller.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/cronjob/index.d.ts","../../../node_modules/@metamask/snaps-controllers/dist/types/index.d.ts","../../accounts-controller/dist/types/accountscontroller.d.ts","../../../node_modules/@types/uuid/index.d.ts","../../accounts-controller/dist/types/utils.d.ts","../../accounts-controller/dist/types/index.d.ts","../../../node_modules/@metamask/swappable-obj-proxy/dist/types.d.ts","../../../node_modules/@metamask/swappable-obj-proxy/dist/createeventemitterproxy.d.ts","../../../node_modules/@metamask/swappable-obj-proxy/dist/createswappableproxy.d.ts","../../../node_modules/@metamask/swappable-obj-proxy/dist/index.d.ts","../../../node_modules/loglevel/index.d.ts","../../network-controller/dist/types/constants.d.ts","../../eth-json-rpc-provider/dist/types/safe-event-emitter-provider.d.ts","../../eth-json-rpc-provider/dist/types/provider-from-engine.d.ts","../../eth-json-rpc-provider/dist/types/provider-from-middleware.d.ts","../../eth-json-rpc-provider/dist/types/index.d.ts","../../../node_modules/@metamask/eth-block-tracker/dist/blocktracker.d.ts","../../../node_modules/@metamask/eth-block-tracker/dist/pollingblocktracker.d.ts","../../../node_modules/@metamask/eth-block-tracker/dist/subscribeblocktracker.d.ts","../../../node_modules/@metamask/eth-block-tracker/dist/index.d.ts","../../network-controller/dist/types/types.d.ts","../../network-controller/dist/types/create-auto-managed-network-client.d.ts","../../network-controller/dist/types/networkcontroller.d.ts","../../network-controller/dist/types/create-network-client.d.ts","../../network-controller/dist/types/index.d.ts","../../polling-controller/dist/types/types.d.ts","../../polling-controller/dist/types/blocktrackerpollingcontroller.d.ts","../../polling-controller/dist/types/staticintervalpollingcontroller.d.ts","../../polling-controller/dist/types/index.d.ts","../../gas-fee-controller/dist/types/gasfeecontroller.d.ts","../../gas-fee-controller/dist/types/index.d.ts","../../../node_modules/@metamask/nonce-tracker/node_modules/async-mutex/lib/mutexinterface.d.ts","../../../node_modules/@metamask/nonce-tracker/node_modules/async-mutex/lib/mutex.d.ts","../../../node_modules/@metamask/nonce-tracker/node_modules/async-mutex/lib/semaphoreinterface.d.ts","../../../node_modules/@metamask/nonce-tracker/node_modules/async-mutex/lib/semaphore.d.ts","../../../node_modules/@metamask/nonce-tracker/node_modules/async-mutex/lib/withtimeout.d.ts","../../../node_modules/@metamask/nonce-tracker/node_modules/async-mutex/lib/tryacquire.d.ts","../../../node_modules/@metamask/nonce-tracker/node_modules/async-mutex/lib/errors.d.ts","../../../node_modules/@metamask/nonce-tracker/node_modules/async-mutex/lib/index.d.ts","../../../node_modules/@metamask/nonce-tracker/dist/noncetracker.d.ts","../../../node_modules/@metamask/nonce-tracker/dist/index.d.ts","../../../node_modules/async-mutex/lib/mutexinterface.d.ts","../../../node_modules/async-mutex/lib/mutex.d.ts","../../../node_modules/async-mutex/lib/semaphoreinterface.d.ts","../../../node_modules/async-mutex/lib/semaphore.d.ts","../../../node_modules/async-mutex/lib/withtimeout.d.ts","../../../node_modules/async-mutex/lib/tryacquire.d.ts","../../../node_modules/async-mutex/lib/errors.d.ts","../../../node_modules/async-mutex/lib/index.d.ts","../../../node_modules/eth-method-registry/dist/index.d.ts","../../../node_modules/@types/lodash/common/common.d.ts","../../../node_modules/@types/lodash/common/array.d.ts","../../../node_modules/@types/lodash/common/collection.d.ts","../../../node_modules/@types/lodash/common/date.d.ts","../../../node_modules/@types/lodash/common/function.d.ts","../../../node_modules/@types/lodash/common/lang.d.ts","../../../node_modules/@types/lodash/common/math.d.ts","../../../node_modules/@types/lodash/common/number.d.ts","../../../node_modules/@types/lodash/common/object.d.ts","../../../node_modules/@types/lodash/common/seq.d.ts","../../../node_modules/@types/lodash/common/string.d.ts","../../../node_modules/@types/lodash/common/util.d.ts","../../../node_modules/@types/lodash/index.d.ts","../src/logger.ts","../../../node_modules/fast-json-patch/module/helpers.d.ts","../../../node_modules/fast-json-patch/module/core.d.ts","../../../node_modules/fast-json-patch/module/duplex.d.ts","../../../node_modules/fast-json-patch/index.d.ts","../src/types.ts","../src/utils/gas-flow.ts","../src/constants.ts","../src/utils/utils.ts","../src/utils/swaps.ts","../src/utils/gas-fees.ts","../src/gas-flows/defaultgasfeeflow.ts","../src/gas-flows/lineagasfeeflow.ts","../../../node_modules/@ethersproject/bytes/lib/index.d.ts","../../../node_modules/@ethersproject/bignumber/lib/bignumber.d.ts","../../../node_modules/@ethersproject/bignumber/lib/fixednumber.d.ts","../../../node_modules/@ethersproject/bignumber/lib/index.d.ts","../../../node_modules/@ethersproject/abi/lib/fragments.d.ts","../../../node_modules/@ethersproject/abi/lib/coders/abstract-coder.d.ts","../../../node_modules/@ethersproject/abi/lib/abi-coder.d.ts","../../../node_modules/@ethersproject/properties/lib/index.d.ts","../../../node_modules/@ethersproject/abi/lib/interface.d.ts","../../../node_modules/@ethersproject/abi/lib/index.d.ts","../../../node_modules/@ethersproject/networks/lib/types.d.ts","../../../node_modules/@ethersproject/networks/lib/index.d.ts","../../../node_modules/@ethersproject/transactions/lib/index.d.ts","../../../node_modules/@ethersproject/web/lib/index.d.ts","../../../node_modules/@ethersproject/abstract-provider/lib/index.d.ts","../../../node_modules/@ethersproject/abstract-signer/lib/index.d.ts","../../../node_modules/@ethersproject/contracts/lib/index.d.ts","../../../node_modules/@ethersproject/providers/lib/formatter.d.ts","../../../node_modules/@ethersproject/providers/lib/base-provider.d.ts","../../../node_modules/@ethersproject/providers/lib/json-rpc-provider.d.ts","../../../node_modules/@ethersproject/providers/lib/websocket-provider.d.ts","../../../node_modules/@ethersproject/providers/lib/url-json-rpc-provider.d.ts","../../../node_modules/@ethersproject/providers/lib/alchemy-provider.d.ts","../../../node_modules/@ethersproject/providers/lib/ankr-provider.d.ts","../../../node_modules/@ethersproject/providers/lib/cloudflare-provider.d.ts","../../../node_modules/@ethersproject/providers/lib/etherscan-provider.d.ts","../../../node_modules/@ethersproject/providers/lib/fallback-provider.d.ts","../../../node_modules/@ethersproject/providers/lib/ipc-provider.d.ts","../../../node_modules/@ethersproject/providers/lib/infura-provider.d.ts","../../../node_modules/@ethersproject/providers/lib/json-rpc-batch-provider.d.ts","../../../node_modules/@ethersproject/providers/lib/nodesmith-provider.d.ts","../../../node_modules/@ethersproject/providers/lib/pocket-provider.d.ts","../../../node_modules/@ethersproject/providers/lib/web3-provider.d.ts","../../../node_modules/@ethersproject/providers/lib/index.d.ts","../src/gas-flows/oraclelayer1gasfeeflow.ts","../src/gas-flows/optimismlayer1gasfeeflow.ts","../src/gas-flows/scrolllayer1gasfeeflow.ts","../src/gas-flows/testgasfeeflow.ts","../src/utils/etherscan.ts","../src/helpers/etherscanremotetransactionsource.ts","../src/utils/layer1-gas-fee-flow.ts","../src/helpers/gasfeepoller.ts","../src/helpers/incomingtransactionhelper.ts","../src/helpers/pendingtransactiontracker.ts","../src/helpers/multichaintrackinghelper.ts","../src/utils/external-transactions.ts","../src/utils/gas.ts","../src/utils/history.ts","../src/utils/nonce.ts","../src/utils/resimulate.ts","../../../node_modules/@metamask/metamask-eth-abis/dist/abis/abierc20.d.ts","../../../node_modules/@metamask/metamask-eth-abis/dist/abis/abierc721.d.ts","../../../node_modules/@metamask/metamask-eth-abis/dist/abis/abierc1155.d.ts","../../../node_modules/@metamask/metamask-eth-abis/dist/abis/fiattokenv2.d.ts","../../../node_modules/@metamask/metamask-eth-abis/dist/index.d.ts","../src/errors.ts","../src/utils/simulation-api.ts","../src/utils/simulation.ts","../src/utils/transaction-type.ts","../src/utils/validation.ts","../src/transactioncontroller.ts","../src/index.ts","../../../node_modules/@babel/types/lib/index.d.ts","../../../node_modules/@types/babel__generator/index.d.ts","../../../node_modules/@babel/parser/typings/babel-parser.d.ts","../../../node_modules/@types/babel__template/index.d.ts","../../../node_modules/@types/babel__traverse/index.d.ts","../../../node_modules/@types/babel__core/index.d.ts","../../../node_modules/@types/eslint/helpers.d.ts","../../../node_modules/@types/estree/index.d.ts","../../../node_modules/@types/json-schema/index.d.ts","../../../node_modules/@types/eslint/index.d.ts","../../../node_modules/@types/graceful-fs/index.d.ts","../../../node_modules/@types/istanbul-lib-coverage/index.d.ts","../../../node_modules/@types/istanbul-lib-report/index.d.ts","../../../node_modules/@types/istanbul-reports/index.d.ts","../../../node_modules/chalk/index.d.ts","../../../node_modules/jest-diff/build/cleanupsemantic.d.ts","../../../node_modules/pretty-format/build/types.d.ts","../../../node_modules/pretty-format/build/index.d.ts","../../../node_modules/jest-diff/build/types.d.ts","../../../node_modules/jest-diff/build/difflines.d.ts","../../../node_modules/jest-diff/build/printdiffs.d.ts","../../../node_modules/jest-diff/build/index.d.ts","../../../node_modules/jest-matcher-utils/build/index.d.ts","../../../node_modules/@types/jest/index.d.ts","../../../node_modules/@types/jest-when/index.d.ts","../../../node_modules/@types/json5/index.d.ts","../../../node_modules/@types/minimatch/index.d.ts","../../../node_modules/@types/parse-json/index.d.ts","../../../node_modules/@types/pbkdf2/index.d.ts","../../../node_modules/@types/prettier/index.d.ts","../../../node_modules/@types/secp256k1/index.d.ts","../../../node_modules/@types/semver/classes/semver.d.ts","../../../node_modules/@types/semver/functions/parse.d.ts","../../../node_modules/@types/semver/functions/valid.d.ts","../../../node_modules/@types/semver/functions/clean.d.ts","../../../node_modules/@types/semver/functions/inc.d.ts","../../../node_modules/@types/semver/functions/diff.d.ts","../../../node_modules/@types/semver/functions/major.d.ts","../../../node_modules/@types/semver/functions/minor.d.ts","../../../node_modules/@types/semver/functions/patch.d.ts","../../../node_modules/@types/semver/functions/prerelease.d.ts","../../../node_modules/@types/semver/functions/compare.d.ts","../../../node_modules/@types/semver/functions/rcompare.d.ts","../../../node_modules/@types/semver/functions/compare-loose.d.ts","../../../node_modules/@types/semver/functions/compare-build.d.ts","../../../node_modules/@types/semver/functions/sort.d.ts","../../../node_modules/@types/semver/functions/rsort.d.ts","../../../node_modules/@types/semver/functions/gt.d.ts","../../../node_modules/@types/semver/functions/lt.d.ts","../../../node_modules/@types/semver/functions/eq.d.ts","../../../node_modules/@types/semver/functions/neq.d.ts","../../../node_modules/@types/semver/functions/gte.d.ts","../../../node_modules/@types/semver/functions/lte.d.ts","../../../node_modules/@types/semver/functions/cmp.d.ts","../../../node_modules/@types/semver/functions/coerce.d.ts","../../../node_modules/@types/semver/classes/comparator.d.ts","../../../node_modules/@types/semver/classes/range.d.ts","../../../node_modules/@types/semver/functions/satisfies.d.ts","../../../node_modules/@types/semver/ranges/max-satisfying.d.ts","../../../node_modules/@types/semver/ranges/min-satisfying.d.ts","../../../node_modules/@types/semver/ranges/to-comparators.d.ts","../../../node_modules/@types/semver/ranges/min-version.d.ts","../../../node_modules/@types/semver/ranges/valid.d.ts","../../../node_modules/@types/semver/ranges/outside.d.ts","../../../node_modules/@types/semver/ranges/gtr.d.ts","../../../node_modules/@types/semver/ranges/ltr.d.ts","../../../node_modules/@types/semver/ranges/intersects.d.ts","../../../node_modules/@types/semver/ranges/simplify.d.ts","../../../node_modules/@types/semver/ranges/subset.d.ts","../../../node_modules/@types/semver/internals/identifiers.d.ts","../../../node_modules/@types/semver/index.d.ts","../../../node_modules/@types/sinonjs__fake-timers/index.d.ts","../../../node_modules/@types/sinon/index.d.ts","../../../node_modules/@types/stack-utils/index.d.ts","../../../node_modules/@types/yargs-parser/index.d.ts","../../../node_modules/@types/yargs/index.d.ts"],"fileInfos":[{"version":"8730f4bf322026ff5229336391a18bcaa1f94d4f82416c8b2f3954e2ccaae2ba","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","4b421cbfb3a38a27c279dec1e9112c3d1da296f77a1a85ddadf7e7a425d45d18","1fc5ab7a764205c68fa10d381b08417795fc73111d6dd16b5b1ed36badb743d9",{"version":"3aafcb693fe5b5c3bd277bd4c3a617b53db474fe498fc5df067c5603b1eebde7","affectsGlobalScope":true},{"version":"adb996790133eb33b33aadb9c09f15c2c575e71fb57a62de8bf74dbf59ec7dfb","affectsGlobalScope":true},{"version":"8cc8c5a3bac513368b0157f3d8b31cfdcfe78b56d3724f30f80ed9715e404af8","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"c5c05907c02476e4bde6b7e76a79ffcd948aedd14b6a8f56e4674221b0417398","affectsGlobalScope":true},{"version":"5f406584aef28a331c36523df688ca3650288d14f39c5d2e555c95f0d2ff8f6f","affectsGlobalScope":true},{"version":"22f230e544b35349cfb3bd9110b6ef37b41c6d6c43c3314a31bd0d9652fcec72","affectsGlobalScope":true},{"version":"7ea0b55f6b315cf9ac2ad622b0a7813315bb6e97bf4bb3fbf8f8affbca7dc695","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"eb26de841c52236d8222f87e9e6a235332e0788af8c87a71e9e210314300410a","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"81cac4cbc92c0c839c70f8ffb94eb61e2d32dc1c3cf6d95844ca099463cf37ea","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"d154ea5bb7f7f9001ed9153e876b2d5b8f5c2bb9ec02b3ae0d239ec769f1f2ae","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true},{"version":"6e7997ef61de3132e4d4b2250e75343f487903ddf5370e7ce33cf1b9db9a63ed","affectsGlobalScope":true},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true},{"version":"5e5e095c4470c8bab227dbbc61374878ecead104c74ab9960d3adcccfee23205","affectsGlobalScope":true},{"version":"09aa50414b80c023553090e2f53827f007a301bc34b0495bfb2c3c08ab9ad1eb","affectsGlobalScope":true},{"version":"d7f680a43f8cd12a6b6122c07c54ba40952b0c8aa140dcfcf32eb9e6cb028596","affectsGlobalScope":true},{"version":"3787b83e297de7c315d55d4a7c546ae28e5f6c0a361b7a1dcec1f1f50a54ef11","affectsGlobalScope":true},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true},{"version":"2768ef564cfc0689a1b76106c421a2909bdff0acbe87da010785adab80efdd5c","affectsGlobalScope":true},{"version":"b248e32ca52e8f5571390a4142558ae4f203ae2f94d5bac38a3084d529ef4e58","affectsGlobalScope":true},{"version":"52d1bb7ab7a3306fd0375c8bff560feed26ed676a5b0457fa8027b563aecb9a4","affectsGlobalScope":true},"70bbfaec021ac4a0c805374225b55d70887f987df8b8dd7711d79464bb7b4385","869089d60b67219f63e6aca810284c89bae1b384b5cbc7ce64e53d82ad223ed5","fe8f00e1ffe6c8069f2568844debb342a661980c30e52b132f002b93f66de47e",{"version":"f31113ac9492fdd6e78bf6151b338c92e5b1837be426ef4aa0648ce82d13b518","affectsGlobalScope":true},"62a0875a0397b35a2364f1d401c0ce17975dfa4d47bf6844de858ae04da349f9","ee7491d0318d1fafcba97d5b72b450eb52671570f7a4ecd9e8898d40eaae9472","e3e7d217d89b380c1f34395eadc9289542851b0f0a64007dfe1fb7cf7423d24e","fd79909e93b4d50fd0ed9f3d39ddf8ba0653290bac25c295aac49f6befbd081b","345a9cc2945406f53051cd0e9b51f82e1e53929848eab046fdda91ee8aa7da31","9debe2de883da37a914e5e784a7be54c201b8f1d783822ad6f443ff409a5ea21","dee5d5c5440cda1f3668f11809a5503c30db0476ad117dd450f7ba5a45300e8f","f5e396c1424c391078c866d6f84afe0b4d2f7f85a160b9c756cd63b5b1775d93","5caa6f4fff16066d377d4e254f6c34c16540da3809cd66cd626a303bc33c419f","730d055528bdf12c8524870bb33d237991be9084c57634e56e5d8075f6605e02","5b3cd03ae354ea96eff1f74d7c410fe4852e6382227e8b0ecf87ab5e3a5bbcd4","7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419",{"version":"056097110efd16869ec118cedb44ecbac9a019576eee808d61304ca6d5cb2cbe","affectsGlobalScope":true},"f51b4042a3ac86f1f707500a9768f88d0b0c1fc3f3e45a73333283dea720cdc6",{"version":"6fb8358e10ed92a7f515b7d79da3904c955a3ffd4e14aa9df6f0ea113041f1cf","affectsGlobalScope":true},"45c831238c6dac21c72da5f335747736a56a3847192bf03c84b958a7e9ec93e2","661a11d16ad2e3543a77c53bcd4017ee9a450f47ab7def3ab493a86eae4d550c",{"version":"8cdc646cec7819581ef343b83855b1bfe4fe674f2c84f4fb8dc90d82fb56bd3a","affectsGlobalScope":true},"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb","9dd56225cc2d8cb8fe5ceb0043ff386987637e12fecc6078896058a99deae284","2375ed4b439215aa3b6d0c6fd175c78a4384b30cb43cbadaecbf0a18954c98cb","7693b90b3075deaccafd5efb467bf9f2b747a3075be888652ef73e64396d8628","41231da15bb5e3e806a8395bd15c7befd2ec90f9f4e3c9d0ae1356bccb76dbb0","fccfef201d057cb407fa515311bd608549bab6c7b8adcf8f2df31f5d3b796478",{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true},"5f20d20b7607174caf1a6da9141aeb9f2142159ae2410ca30c7a0fccd1d19c99",{"version":"464762c6213566d072f1ced5e8e9a954785ec5e53883b7397198abb5ef5b8f71","affectsGlobalScope":true},"6387920dc3e18927335b086deec75bf8e50f879a5e273d32ee7bb7a55ba50572","9bba37424094688c4663c177a1379b229f919b8912889a472f32fdc5f08ddb4d","29a4be13b3a30d3e66667b75c58ec61fb2df8fa0422534fdee3cfb30c5dbf450","83366d901beda79d6eb37aaaf6ca248dcd88946302b2a7d975590783be51e88e","bf268a0aea37ad4ae3b7a9b58559190b6fc01ea16a31e35cd05817a0a60f895a","43ec77c369473e92e2ecebf0554a0fdaa9c256644a6070f28228dfcceec77351",{"version":"d7dad6db394a3d9f7b49755e4b610fbf8ed6eb0c9810ae5f1a119f6b5d76de45","affectsGlobalScope":true},"95ed02bacb4502c985b69742ec82a4576d4ff4a6620ecc91593f611d502ae546","bf755525c4e6f85a970b98c4755d98e8aa1b6dbd83a5d8fcc57d3d497351b936","dd67d2b5e4e8a182a38de8e69fb736945eaa4588e0909c14e01a14bd3cc1fd1e",{"version":"28084e15b63e6211769db2fe646d8bc5c4c6776321e0deffe2d12eefd52cb6b9","affectsGlobalScope":true},{"version":"aed37dabf86c99d6c8508700576ecede86688397bc12523541858705a0c737c2","affectsGlobalScope":true},"cc6ef5733d4ea6d2e06310a32dffd2c16418b467c5033d49cecc4f3a25de7497","94768454c3348b6ebe48e45fbad8c92e2bb7af4a35243edbe2b90823d0bd7f9a","0be79b3ff0f16b6c2f9bc8c4cc7097ea417d8d67f8267f7e1eec8e32b548c2ff","1c61ffa3a71b77363b30d19832c269ef62fba787f5610cac7254728d3b69ab2e","84da3c28344e621fd1d591f2c09e9595292d2b70018da28a553268ac122597d4","269929a24b2816343a178008ac9ae9248304d92a8ba8e233055e0ed6dbe6ef71","6e191fea1db6e9e4fa828259cf489e820ec9170effff57fb081a2f3295db4722","aed943465fbce1efe49ee16b5ea409050f15cd8eaf116f6fadb64ef0772e7d95","70d08483a67bf7050dbedace398ef3fee9f436fcd60517c97c4c1e22e3c6f3e8","c40fdf7b2e18df49ce0568e37f0292c12807a0748be79e272745e7216bed2606",{"version":"e933de8143e1d12dd51d89b398760fd5a9081896be366dad88a922d0b29f3c69","affectsGlobalScope":true},"4e228e78c1e9b0a75c70588d59288f63a6258e8b1fe4a67b0c53fe03461421d9","b38d55d08708c2410a3039687db70b4a5bfa69fc4845617c313b5a10d9c5c637","205d50c24359ead003dc537b9b65d2a64208dfdffe368f403cf9e0357831db9e","1265fddcd0c68be9d2a3b29805d0280484c961264dd95e0b675f7bd91f777e78",{"version":"a05e2d784c9be7051c4ac87a407c66d2106e23490c18c038bbd0712bde7602fd","affectsGlobalScope":true},{"version":"df90b9d0e9980762da8daf8adf6ffa0c853e76bfd269c377be0d07a9ad87acd2","affectsGlobalScope":true},"cf434b5c04792f62d6f4bdd5e2c8673f36e638e910333c172614d5def9b17f98","1d65d4798df9c2df008884035c41d3e67731f29db5ecb64cd7378797c7c53a2f","0faee6b555890a1cb106e2adc5d3ffd89545b1da894d474e9d436596d654998f","c6c01ea1c42508edf11a36d13b70f6e35774f74355ba5d358354d4a77cc67ea1","867f95abf1df444aab146b19847391fc2f922a55f6a970a27ed8226766cee29f",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"b0297b09e607bec9698cac7cf55463d6731406efb1161ee4d448293b47397c84","175323e2a79a6076e0bada8a390d535a3ea817158bf1b1f46e31efca9028a0a2","7a10053aadc19335532a4d02756db4865974fd69bea5439ddcc5bfdf062d9476","4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","aed9e712a9b168345362e8f3a949f16c99ca1e05d21328f05735dfdbb24414ef","b04fe6922ed3db93afdbd49cdda8576aa75f744592fceea96fb0d5f32158c4f5","ed8d6c8de90fc2a4faaebc28e91f2469928738efd5208fb75ade0fa607e892b7","d7c52b198d680fe65b1a8d1b001f0173ffa2536ca2e7082431d726ce1f6714cd","c07f251e1c4e415a838e5498380b55cfea94f3513229de292d2aa85ae52fc3e9","0ed401424892d6bf294a5374efe512d6951b54a71e5dd0290c55b6d0d915f6f7","b945be6da6a3616ef3a250bfe223362b1c7c6872e775b0c4d82a1bf7a28ff902","beea49237dd7c7110fabf3c7509919c9cb9da841d847c53cac162dc3479e2f87","0f45f8a529c450d8f394106cc622bff79e44a1716e1ac9c3cc68b43f7ecf65ee","c624ce90b04c27ce4f318ba6330d39bde3d4e306f0f497ce78d4bda5ab8e22ca","9b8253aa5cb2c82d505f72afdbf96e83b15cc6b9a6f4fadbbbab46210d5f1977","86a8f52e4b1ac49155e889376bcfa8528a634c90c27fec65aa0e949f77b740c5","aab5dd41c1e2316cc0b42a7dd15684f8582d5a1d16c0516276a2a8a7d0fecd9c","59948226626ee210045296ba1fc6cb0fe748d1ff613204e08e7157ab6862dee7","ec3e54d8b713c170fdc8110a7e4a6a97513a7ab6b05ac9e1100cb064d2bb7349","43beb30ecb39a603fde4376554887310b0699f25f7f39c5c91e3147b51bb3a26","666b77d7f06f49da114b090a399abbfa66d5b6c01a3fd9dc4f063a52ace28507","31997714a93fbc570f52d47d6a8ebfb021a34a68ea9ba58bbb69cdec9565657e","6032e4262822160128e644de3fc4410bcd7517c2f137525fd2623d2bb23cb0d3","8bd5c9b1016629c144fd228983395b9dbf0676a576716bc3d316cab612c33cd5","2ed90bd3925b23aed8f859ffd0e885250be0424ca2b57e9866dabef152e1d6b7","93f6bd17d92dab9db7897e1430a5aeaa03bcf51623156213d8397710367a76ce","3f62b770a42e8c47c7008726f95aa383e69d97e85e680d237b99fcb0ee601dd8","5b84cfe78028c35c3bb89c042f18bf08d09da11e82d275c378ae4d07d8477e6c","75b22c74010ba649de1a1676a4c4b8b5bb4294fecd05089e2094429b16d7840c","5615ccf831db2ffc82145243081ebdb60ea8e1005ee8f975d1c0c1401a9c894e","38682ed3630bb6ecdace80d5a9adc811fc20a419f1940446e306c3a020d083b9","cc182e6e4f691cd6f7bf7cb491247a4c7818f9f1cb2db1d45c65ff906e3f741b","a50599c08934a62f11657bdbe0dc929ab66da1b1f09974408fd9a33ec1bb8060","5a20e7d6c630b91be15e9b837853173829d00273197481dc8d3e94df61105a71","8d478048d71cc16f806d4b71b252ecb67c7444ccf4f4b09b29a312712184f859","e0eda929c6b9b628cdeb0e54cd3582cb97e64f28aab34612fc1431c545899584","9df4662ca3dbc2522bc115833ee04faa1afbb4e249a85ef4a0a09c621346bd08","b25d9065cf1c1f537a140bbc508e953ed2262f77134574c432d206ff36f4bdbf","1b103313097041aa9cd705a682c652f08613cb5cf8663321061c0902f845e81c","68ccec8662818911d8a12b8ed028bc5729fb4f1d34793c4701265ba60bc73cf4","5f85b8b79dc4d36af672c035b2beb71545de63a5d60bccbeee64c260941672ab","b3d48529ae61dc27d0bfbfa2cb3e0dff8189644bd155bdf5df1e8e14669f7043","40fe4b689225816b31fe5794c0fbf3534568819709e40295ead998a2bc1ab237","f65b5e33b9ad545a1eebbd6afe857314725ad42aaf069913e33f928ab3e4990a","fb6f2a87beb7fb1f4c2b762d0c76a9459fc91f557231569b0ee21399e22aa13d","31c858dc85996fac4b7fa944e1016d5c72f514930a72357ab5001097bf6511c7","3de30a871b3340be8b679c52aa12f90dd1c8c60874517be58968fdbcc4d79445","6fd985bd31eaf77542625306fb0404d32bff978990f0a06428e5f0b9a3b58109","980d21b0081cbf81774083b1e3a46f4bbdcd2b68858df0f66d7fad9c82bc34bc","68cc8d6fcc2f270d7108f02f3ebc59480a54615be3e09a47e14527f349e9d53e","3eb11dbf3489064a47a2e1cf9d261b1f100ef0b3b50ffca6c44dd99d6dd81ac1","b17f3bb7d8333479c7e45e5f3d876761b9bca58f97594eca3f6a944fd825e632","3c1f1236cce6d6e0c4e2c1b4371e6f72d7c14842ecd76a98ed0748ee5730c8f3","6d7f58d5ea72d7834946fd7104a734dc7d40661be8b2e1eaced1ddce3268ebaf","4c26222991e6c97d5a8f541d4f2c67585eda9e8b33cf9f52931b098045236e88","277983d414aa99d78655186c3ee1e1c38c302e336aff1d77b47fcdc39d8273fe","47383b45796d525a4039cd22d2840ac55a1ff03a43d027f7f867ba7314a9cf53","6548773b3abbc18de29176c2141f766d4e437e40596ee480447abf83575445ad","6ddd27af0436ce59dd4c1896e2bfdb2bdb2529847d078b83ce67a144dff05491","816264799aef3fd5a09a3b6c25217d5ec26a9dfc7465eac7d6073bcdc7d88f3f","4df0891b133884cd9ed752d31c7d0ec0a09234e9ed5394abffd3c660761598db","b603b62d3dcd31ef757dc7339b4fa8acdbca318b0fb9ac485f9a1351955615f9","e642bd47b75ad6b53cbf0dfd7ddfa0f120bd10193f0c58ec37d87b59bf604aca","be90b24d2ee6f875ce3aaa482e7c41a54278856b03d04212681c4032df62baf9","78f5ff400b3cb37e7b90eef1ff311253ed31c8cb66505e9828fad099bffde021","372c47090e1131305d163469a895ff2938f33fa73aad988df31cd31743f9efb6","71c67dc6987bdbd5599353f90009ff825dd7db0450ef9a0aee5bb0c574d18512","6f12403b5eca6ae7ca8e3efe3eeb9c683b06ce3e3844ccfd04098d83cd7e4957","282c535df88175d64d9df4550d2fd1176fd940c1c6822f1e7584003237f179d3","c3a4752cf103e4c6034d5bd449c8f9d5e7b352d22a5f8f9a41a8efb11646f9c2","11a9e38611ac3c77c74240c58b6bd64a0032128b29354e999650f1de1e034b1c","4ed103ca6fff9cb244f7c4b86d1eb28ce8069c32db720784329946731badb5bb","d738f282842970e058672663311c6875482ee36607c88b98ffb6604fba99cb2a","ec859cd8226aa623e41bbb47c249a55ee16dc1b8647359585244d57d3a5ed0c7","8891c6e959d253a66434ff5dc9ae46058fb3493e84b4ca39f710ef2d350656b1","c4463cf02535444dcbc3e67ecd29f1972490f74e49957d6fd4282a1013796ba6","0cb0a957ff02de0b25fd0f3f37130ca7f22d1e0dea256569c714c1f73c6791f8","2f5075dc512d51786b1ba3b1696565641dfaae3ac854f5f13d61fa12ef81a47e","ca3353cc82b1981f0d25d71d7432d583a6ef882ccdea82d65fbe49af37be51cb","50679a8e27aacf72f8c40bcab15d7ef5e83494089b4726b83eec4554344d5cdc","45351e0d51780b6f4088277a4457b9879506ee2720a887de232df0f1efcb33d8","e2d6963e7bf7186e30b7a4c9859aba4e96eda6d1be537e5b1a43bdddc7e9dc8f","10afdd7bba6ec9b7f95a4b419b2dbb64245fea4a61bbe7d68e2f841b414f7312","413121b26b3bd9f7fea237f15f564ee2b95bcd0cceec1b1621075375ccc0c0e0","d2af215963d01cef397ce8fa2f7ad08ee8beffdd39fe14b96021ddf26554b59f","2fc9848431d0f5e2b49bb312aaf07dd2d5a34300a2ced60200a2da49e6a82b43","c5ee2b685431ea2b9aacd9bb9e15cac1ecfa5c448972b188432313354d47c848","3e69be1137d88eb0730332aed359caedea4a27903da15dbe6a1615fa11206807","2283d079c3945b6e5ca8b9355311a213e03b74bffc65a3234c3c141a0a795700","f47272f05bd57f4356abc81232bded724d13e54f0fd801e0fb93a58237db1829","07ae8e9890f49ef6ebe629e339ac590025606a1e96754965bbb2bf889199ced2","d5c19655468e29f60c871b21e73af8ebc653f736e7123ade916f22c4a5f80ce5","6a8649609161e2794b383ba275b0a6cb4a072dde7b954648f83dc6cdf1bfe4a8","601d4a40a69c782addaf84185d4547568ec072095ab9976610d89922d1291f8b","d5c19655468e29f60c871b21e73af8ebc653f736e7123ade916f22c4a5f80ce5","b5c9c8c4a2cd1cb9f76d849fb472d475c3cebdd48306414a4a19bd11d82c4055","b61e6a808f5f50873ac03f35d5a38fa8d4dd23a24f80ab69df1a032e8c71562d","c8be9283a381044a392a0687af5d98d3f51cbada2320b1801a82c948b6e39499","85052c71d72b9b017c88179f57a464d66e22619c7acd7d83b117a79cf1608979","502cd7c30fe21e2c36b62913d0cb5d20affc8779b3ad40881b26d90a22de3aaa","6d3101b183ea67ef606b93fe42127f30b2db5ac3b72c34ca9d6d8b00eb85d0f6","f5d7a36ff056cc314b0f61c89a03c4c36a24183b246e61d958e75e86521304cd","ff30e8237e23dde68041b5f09526ee86835b12c5d8b6421c1153093fdbeb9438","f516fc1e77e5ffd71fbe705b679797c3c5eb76bf76a88549e6316a29f3e197f7","b5b1110565ac688b660a893654a6c1bce6747f3aa6f847001a8a5ff4412394ba","3a971ea3e36685b96f24fbd53a94ad8dc061711b84e51fde4cf201f7041e618d","9b6c162d20e2ad4abdcff61a24082564ac59e63092220618162aef6e440c9228","7804ff981554ba1a0592481072806fc39dc1484791beda43eb7a60e16e70a360","fcc8beef29f39f09b1d9c9f99c42f9fed605ab1c28d2a630185f732b9ba53763","d6e6620a30d582182acc3f0a992a0c311adc589f111096aea11ab83fc09a5ccc","6213b8f686f56beab22b59a0f468590fd3a4c5fa931236a017efeca91d7c9584","c451cec9a588b1f105a5ea2c6063d4fca112b9d70105cacdadda0e1ef67e9379","cb047832dc68f5a2c41c62c5e95ddcacbae3a8b034d40cd15319a8cb7f25104a","980336ccdfc3c08f3c3b201aa6662e6016e20f15847f8465b68f3e8e67b4665c","5a3493939995f46ff3d9073cd534fb8961c3bf4e08c71db27066ff03d906dea8","8f333214062532989f190aed5f99c62eb820722e41956e8229e17cd246fbdd10","d1f010c19eb9c8190bd0859fa3b6f4975543b912b8b85e20bbb0b5bfbdf4d2b3","de4ccc96cef3f97fab148640799abb32a24b567a902a8233913f98481e3131bf",{"version":"801934aa449fe6df584bccdcc5d5b9280295cb7ac84918b6014fc5086e6f9ff6","affectsGlobalScope":true},"5e379df3d61561c2ed7789b5995b9ba2143bbba21a905e2381e16efe7d1fa424","f07a137bbe2de7a122c37bfea00e761975fb264c49f18003d398d71b3fb35a5f","6af760fb9ea02dc807c5053d8aee86389c4fce72fbb26af7b9568cac6c4710d5","c62c4ba5e910b4523f7e7adf4a55ec45c2bac99d9d8e9b0fe0c2a800a6f641b9","92131434f876fdd6fcbc40bd54a9d7500c66974362b16bd42641f990468587f4","8cf023c0bd57992fdd2ce6a7030a1874f49c8edc62eaffa9bfffcf18d2a2a1a2","8ea8f3040e38fb50d7dc3653f3b8a0dbb5244e82111576f99ce096bdc0fbf94c","48ed788ad126545a6156fcc37cd3bcf17de18a3e3fe6b6ef62cfb8140d1a45a2","63c271a745f628ffd4bd7ad0a63b021c362c9bd6bf8b18441a7162892395a214","8d3457e6c7c5cb890729fb60cb8db18f261226a3ea3ff6a4db4b84ea78313ace","9f9e5bae412fa5909fae636d6733aee27a108cc2ed5b13980611016336774d3c","662fe197bba64bd3f17ee118058cd2d0d2dbe33d7c0c865fd6365d90bfc44e1e","030519c351f800551cac2658038804969ca4584d2c0175a710602ac234ca1340","0278a6939ca83cd040b08ff8c5fc7838b6693ddc52f22526bf158e6b10e0246c","c2d6206e5ba4fd3063b01218c2b3b997afc1cfbeb49fcee991fa8595842ce53d","6a8096993458a3d71229031aa7415974eb5b47b320213e29660adfb519d6a3f4","cb7996a1af5b1d276483cd0c9b9de6540eff021abc90a720511ff4464519a2ff","9df6ec68878d65bc690ea3a33ce3ef5aa8254c36bc5f8346c0c2fd1f3b88a35c","a4fad04c4acc8a4b195cbbccef4c55019104753d547d5c94441643ccc89108a0","0244c23ea642361f7c192c1f0cfff9c12cfa5f51f9b155edd5c0a89fef308d34","c7298e68632ab03155f6de963d3d09cc4a5874c28a81524f56c667d8a052e538","3c69a83bde847af6fc3a53e1bb6b13cd06d38a27a142814b8dacc374f3b93284","5b46f7113f54565e7ffc83f2b474f557a1f54c7e5946769d5be220454656be73","fb58035d39c5759283cb73cfb3548aefe370aa3ad4e81fdb4e46f0979eb7669f","1311c325948b2d5576cebc70b1bf968d3446b4630802bef54120daf04ce1f625","d0b3609e8e7afed0fd0570152255458407e67249b94f6603afdfd68599423f21","17f4c5a1d6eaa87ea27eadcdff9085af3190533d98f799dda79a3af6f9a630ea","3e6f734ddf40e2e99ff7fff9568b7d9720663af9a0632c26a352c8d3270a3f0e","ec13f78303abcf550c5569dfae1446b8ceb89050f68ce04491481e72e8122ae2","a3fc57dbaa7f1efb010399ad4ef4fd9b462aa4e93bf74a9a34b099b97ffcc9cb","ffddd7ec6a450b0cb6f2f73f80de1df963ead312d7c81a8440268f34146ecb87","5d6a36ca0087fd6876df654d1b4192f0e402adfde994ad47e5c065da33692f9c","eb157a09c5f543d98644e2a99a785f9e0e91f054f9fecbf1c3e15831ff5d63a7","edd5530e2b1ccdf65093296e40a8634fcb11ecda3c164c31383a8c34cb04bc9d","9dfaf96d090fe8d96143465d85b4837661ae535143eea9ef99cd20df2e66338e","209d45c27e03c1417c42985252de6c25a2ec23abdc199d88e6139c88b93abd11","0ee5cdba58cfde3012bb9ff2e9edcc4e35a651373a2aa2c83ff9eb7df635419a","540f4dca27ea5a232828b6d91e1b2fce2720bdabaa4c1f3fbf59b672cc58bd8a","ba086b99d545ec6c9ff356989f076b5652ea1b09bcc65b87dfc43a5195a2efcc","c85d9776b36166b928ab1488d9224ebf970d41b0a35f09a3ee0b9bee3e698061","683196f606c5dab1c8c4a24a66d26e00f16f2d4b2a5abe25ebedd37d2954f930","9c3a1b01cba1238fb723ce06b6c163ef6c53be755394406782564d5c42c636b2","6e795e6270d39e918c7a0e62ac73793cda06fcf4b3692ee46583e15f5bf57ab8","0e821ef1eb67fa6144ea4de4277d913f5b1982d7407afd5f93754a8239d41554","5c09195ef359ffa9c6bbdb4fefb101d87ede4b9e9c28213faf5b45d102e4c609","80b4d93a4dcc90a12f6f4bb7c6851a8182ae29e556716d0d80b5c012a5ef554a","2556ef9d1820e0b6bbca6dd65a50ea64f525c4d8247ab50dff44c3f0d14a5643","cbd1c836db190d6e3add07165afc228f04e1f6170e1fe3aa5e6fc24a7e9573a3","9b13881feb958237232586d888a10a39d47cdffe3ee34688ed41888fa7baad94","122fe82cf5af80f0b26832b258b537b7dfe3ec28449c301b259ab10204b50d45","c467dada8fea6d60dff8a8be2675f737cacc76e14e50b72daa0f0710376df84b","9cb80bba611c2dd155a446ce424fe4bb1df2129751bc9416b7e42c055d1ddbff","6ee568039016b81ed70292a595ab781ab978cba4243a5fe49507040ee4f7ac8a","043783bebe87efb440183c9ebc8c4fdc1bb92060a5a0f7ce847e30dee7013ac3","e3dc0a97a59dea936b4fb7b1f6f4117b4aac9c86d0cd08b69bab2d0532a8a5e3","5d897601f8a4fe913057019d8211b99b06e3138f625a0cfb601d074f4278271d","a68bb369c4ba8ab43a78f3fad2d3ec130e1418bc946521b9c84e9b336d6e88f1","65f219e6e1f9d27c677a49d41ae7989b83bf6baa56debbeb50d95c3ab21632e2","cfde5d194dd858ad68f910defaed5b0d28730f8bf38359a9265a93ab29bc7bef","c89354ae268153d965011e484150f0c92faa87f3f66507c25b496973178e0400","f20aae41b169cddcbf3fde8ac380443182c8d7225194e788c404d9e11e6dc75d","a6f4816a634bb1ceb513634c1ef7c0535f461ed2565336eed69f6ac2babbe15b","c48566cb13403fca44192b4528e3f2ac993869d39526bd42cd2f2167c0285add","efae20e0c581240c7522e04829da4f0453ca263068596554d4b0e27878c7dfac","3af68ef927788cda7daab34be513fa4508229fdc6e5130d564a0a1ccb3fefafe","bbbd2cbb15a37d5f4dd54ad8c7c537d3df8352117523030fcec7dcbe62a05a58","b50d24ebc117f8805332e7e260e9587f572bb7b2ff0ca1ff6cfafb38015781f3","5cc8b8e18fe7fefab4b3c53a39467b5a0deb4200abae7f063ff0624b9e856c51","8e990781eb0107c25429b1274a31a4f3866a9a46290cce40f354b2a6e71c6c21","608c45069e89c4c8f0ab29f896cc93c6553808072d6304b23611b6c6de3c24bb","22cbabe752781b5f35482af9d1fcf1455cb1ece74e8b84700d4abcb44abe3776","b9ce4613536386a98897f1e3d8f61a851ce6cb34dc3c9db4f2ef5f55f007e9e1","a5d1209c7bf277af86281392d46e12ce3dd6052586053f757fb2e606cc75c0f3","31b5f53e3d57470830e87f9e03c02d4569ac81d4a758fdda75092f9a3f58beba","d765fbab22fd7003a65ed670100362ec1c90d55a772e6773a774135594e7ea41","c1f11d9b42bfb0823d34d93c58df91ffb6690b5a717b7d310d83f258f1784e58","775b207f00d4df5b3b0b536aa696d572cdd2cabe8ea18dd28e8b52f691fa2a55","f75cd30f162c2af5e5aca39c01c1a521bfa034fae523793de872815a3468bc08","0cf1123db73dabd86466a462375a6addae52f58d23030c6033f8aadc23539a36","e29cef4158591ed213b1c2cba8988237b1ff369f7a6ecd8cb8ac0302bad1fba8","5307876e4d0021ea01235eb2f7c24671f3d8b37590f4b446cd132a4e1dc9a335","92550acd737790dc60c4c130e6aac78656dd48a8334a4882f40e7f86bdf7a590","3df821880914f8bb3c8107b1107be75c8ddbe2120a2cefabbaf9b65936b5f4dd","f46ba7c6fa7fcc8b3d57c4618c18db3f4d8bfe1fcab5551d7f6d9a82cf4d6078","078b7043bea0968860374bf4671ed74dd9f6be4e28ab659517d81f74be463c51","68b139ebb9a7f3ee4ded6286d74f978a47968727665120f3bfc560476ce33c4d","56d02c29b2fd39b1b1a1265df291f3f98e6ec3e6119aff9f4cfa44fe888efaa7","2d01884891da6495cb4a2f060e4898209a507e711464c4c1480df85264e863ed","c485c6497f7587314c4c4a59b74850cbca4c0c4bc08146a918cfd237ef821dbb","e9eec004735b1bf7015edf5400aeb914a53132134d230e93786590d904d094cc","080b1aa93227952b4dd74b9d2c6e4f6002eb8403533749116a1c53bb9961c02d","874087eec1d457f6e3baf5ac46c42ea200e55040b394fac667aa3a64c49f5f6c","6e8a5b04a18abb192abc89d7219b9c6f633cb3136777ec808673a65f111ca749","4e7ac7e5dd58a6c29c724728b031669e3068b194b62c2b83f92e76a36cb34dbb","d74d2a92b54f95e47d2b76bd5ee516aab7ae93afb79cd34c6681dd29eb09e72a","747e6326a724bc54f799a466a5b5c4978a601a04a063a5bdabe150af2f25b9e2","b57e22e53b56cca7a57bfcfb234aa6a66f9b9e4c07159d7388f94f17a3eaee2c","e47709ec4d1618ef429648cd8ef967aef2005526b34fcbfac33037add347dc71","b81abb3e47fbbb3af41fa75bada89bbcfa4b0feed9a0d6d4b19ed1ce1033b53c","15b330546e9784461058e5fd6e2346bf272140fa6f0cda34e193ae501d8b17b1","4d8ce72fd080bf9a46bdcc274bcbacccedd66d84e203966b197ac25a96932183","73327e6ae34e3f6591877fb75b451cf620cbbd76ee2b678213a9f793633cd0d3","3f1ba2f69944fa346789db7f60d53c9bec00032de0d797967978dea42e77b941","3f5df31539fee4816b97d4e45b4344fbdaf3ca59f6df941f8d780ee441e92cc1","50aaf44eb4d0e086af13729b3471a0a7dce95ea35ebd21c762ba26e203134b2e","3857c1773b8503c3ca45b7bc09ac89c3930c85ce93021054503f73d5d9101b5c","72702bd07fd6fb3ef64aadbcb909103aadfe71ee76e9fdeb11e0c92693cff6cb","f0dd6f7c9783637655478db7d7caf6becd41a79d54482aa59578ce88ab38e9bf",{"version":"cd756ccdabf433dd02b84d755383e489f14b3c1aede0477783aa04830fd5d695","affectsGlobalScope":true},"a4c88dbecdf8ee0c79f5b7c2bf31cd77e593f5d78384e2b674f67d754a549a9e","9cbdff04326da794ba008c0fc977ab062d1fe3fa2e9759654c72ffbe54b64a7c","aa60f8d20d36116fe05edaab24adee3c275209f71b65e272692cf99daf9489e1","150855f967a6490161d5aeed4cc4adf31fcb8f5dbe54b75799c12b8687fc9cc2","79576487ac18e047e8192fc582ff488ce375fe4df0cb028a17f831cf42b976f2","47ddb601df40bfa01cebdd06ee8b87d0b72aa1259a4ceba3ad3b5cf68130112a","6b6392704ddb3f50e647dbbb716782bdd0cf8ea9cc134aae256a26223e632b47","afc3ad2a50f7f4de908e26fcf467e09ab8528c0e90f91e602b4865d953839228","df90b0c6b1d81851364c4d97fa23b91a993482bcf4a7bed7c7a24aa41632d494","db34610570eed46b8b72bc662a91261200b8578af0ac02781ce7d9aca99bc683","11ee9ab699b4619d217c640d917ca198f58066a86bd58c2917197d62aa6601e0","cf9d589d9e73bf32c8e7a6cae6b4a1cf9bef39e5594072533fdce985581a6ddc","959544feb1ca2df29eec6c500f27ea10f4885df245ebd8418fb4b87914614383","6548ab4b57eb9d092471a04513091673345f2fd95d5b876f600402ea8d603ee0","2793e8c6a023d26f78d6777a6d7f20fae3a9a8169863d46d8d54c73071851232","d0f11e830aa1350a31d9c00a0197243e9711e4882947aef53a96c629f405cb10","6610b9f45f1f71d2b1fb67df49cbcabe3f9e668a1ccb7d8328a51407b259ffb3","abbcc437e0792ab2fe08797ceca1ec85a95ec413c51612313b18ab8e75f690f6","e29d76ef1183ac0edf94b4712b6e51730c447c7e773e75ceb44a720b0c9a9fd9","4ee6dc3424998eede9a2a9b114acaaf7969cdda67baf82ba2c9cf88a8eec0ab1","8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","25139d6a726e0e19d9fc4fa3197367b4a82ec34a08a5ecf23963e142c202c0f3","e3328bffc8eab74665a4fe9c59d6f12f4c8570c3d858497e241eb37efe17dfcf","29389551e426a46421134b55182d6fcf5b143670998bf81db2619c1228235392","c18f7e16982695bdd04e3e183a327d116185f77f1a37b9b2e849d7d93269cd74","2cfb37011989c21dc70b91d521a2d5a4e0f18507f5f536b5dfe504edb15916e8","bb5e02df7aaec7a4ea642639a9963b24b8d9fd6798351f07d8c58616942fbcbf","299a899cb4d061f5d83843ec453e936e9659b2c435746823f90c40eddaef4745","d5610c0fd12870f644b0f42c1bcc4fa2295ac3e3ca01916bdb42c3bdc4c80c36","2c56a8e249b1f45dbdf973100cd37fe2ea68709573cf1fdf2e3052c593be68d8","3553da417ee7b07e388b13bd12a70a1c03e65a6132ba5427fe68f5b362373e6f","612358502042d351c227ba779fdcf6d875d827e424930e60297c533524e50668","d2b5be376ef162aa0c24a826e7dd2d77671a045c085e16d1c1276db4bdccbac7","c4138d8dcccedaff6621e009cf0a54a7bed2a5ad4c509a3513bccc4f417ef939","ad8747fe978dff3e80f4b12b48d37cc8dff11b61d04c035aefbc982ce21201ce","b154f789fd65298e1ba6cbba6944ea892d564c95f3d3700ed85baf8f80748473","c660265aedd7c5b236e2017e53095cb98da66200eb0e8d023b5bf713c36494e8","0efc36bf5c0daca6217fec7063359ccdab8c3a23bb405d25340fae22cf72d74f","5abff0c87d4f9c89715107042d4c73b68ef7a128759f451c8a0fc450cbaaf660","5a03308fbd1af441065149a84c692931bebc7e7735afc23be8684f4e10d3aa06","c787bf4f8f0abbf815cfbd348be41046f2b8f270be24fe7aa8a8fcdd2b7df8c2","e7a5191c663a3228f30104961d548b372e51c5936c01ffc8eddd262bb98d7d7c","43fdc9abe6f8640fda4cdc55a1ee5f666d3fce554277043df925c383137ddf69","f0b09665c9d52de465687fbd3cfb65111d3ffc59ae00c6f42654150f3db05518","72f8c078d06cff690e24ff2b0e118a9de2833dcebf7c53e762dcb505ddf36a68","9705efb0fd901180de84ca4dd11d86f87fd73f99d6a5660a664c048a7487e385","f9b9d0950fdfb90f57e3f045fe73dce7fa6e7921b37622fc12e64fcd90afbd0f","e61b36e7fde608f8bb4b9c973d81556553a715eaef42a181a16ddd7a28da4ac7","03b8389b222af729eae0fb3c33366dcbb1f5a0102ce319bf1d7d5ee987e59fd0","2bf6be7c04db280fdd9b786764f8650c23f9f4d533791cb25a11b25314b76a55","dbb5fc7edd36bfba95cc4dd564e4458276ced30eed18bc05fbda948b3fda8686","c2b556c7cff0dabce2e31cb373ac61c14d8ebc35f1086dff30b39e9ec5357d0d","f958af01131076e8af55d28c4835a51063226ab488ca8738fdee38aeef7d0d33","9f3797b01e3d83d4e4b875699ae984f380ca86aa0a0c9df43ac5bba1cb1f8b7b","752b15ad1b34887adeaa838fc55f5d4ca399026afd266d4ed4db0e3db02eae4e","778331eaea1093451e50be9844bd2b6937c3bb81b0b1ee700624c9774ecfcf2b","0ca0dfc9f657d0822eca9530c7870b22a1d2a5fc48182bdd4d0e6e88e4ad9c35","5c746f034288e6842dd1589b169dcfcc16c5ce5abbd928889ab67aea4fe0b501","92ce6dbbcc135cffd09a58e19fef34bf351391bec92c40d849e4e9997d475769","99e77d092fed72b6b8578d00c7af004f76e98b30ba99f1947535eb4c04a51676","b5ef52a9f9083724decc5d060f0b34e3a480deed71c32d55ca16c214eb4cc928","5d3d7938b2d7d0a9f851276741327c2ae4c013e7eb420fc3f7caed3b79c8f37f","14df6b81e50a035e9e391558cf30a0420d03e2eb42c7db9c57f44b818e5d5179","f100912a3785eed4a3d29c12f5910b101af9353454de5ddba9b4d43456c56dd1","446439eacf81a163fd7dfc53b28f80deca3d13b250d67639739aa25aa4491090","98034cd285344125f7165a3bb68246d38ab35fabe7f6d6a7c8f80407d31f548d","06b4a23064991251512df4edc12341d5bc69a17b942da18372312d383c90eee7","0f898802705f9a534b537f1be6c57265080e0abd6993d935554c255e6d56cc1a","745efa7b6e27b7216cccede166a822b56acc41b10a8090966c8cf2c96239cb83","6ab2a6257ae7bb05559841100c786c845fe465a90be7b904db9096c2fb14696b","6da6c94bdde76f309cf5823d2a4e77894423d51c80e9d6a7a6eb62998db39dbb","5d697a4b315cc5bb3042ae869abffd10c3b0d7b182cda0e4c45d8819937e5796","89b040dec8fcfc1de98827e1f4d4977e6ff5d3302c6790e9f10b54b916e1c742","6ee58aa536dabb19b09bc036f1abe83feb51e13d63b23d30b2d0631a2de99b8f","8aceb205dcc6f814ad99635baf1e40b6e01d06d3fe27b72fd766c6d0b8c0c600","299567f84bfedd1468dca2755a829cb19e607a6811673788807dc8921e211bc9","795d9fb85aad92221504db74dd179b506bd189bba0c104426f7e7bb8a66ffee5","1311bc194e0a69fe61031e852c1c0b439e2a2a3d1d5e2d8ff795499b9f283459","4b7ce19369d7e7fae76720c2c6c7f671bf3fa0f7093edb864f1ac358ca7c456c","c972ef44deca1fa8fab465915ffa00f82e126aacf3dfc8979c03b1b066ce5bb6","30285a1011c6d6b52f3ba3abb0a984be8148c05cdefb8eb6eb562335a3991f35","e0de9f50e80fed1cc161b50e8e68dc056e38df75a4ef667a06b1922e372de169","6a8b31be08b212d1fc96de0ddd1ea49f32382ba712fea24c70bb56447f643f82","19ac6d624e4c18de4584db4bbdbc55387dbe3d19b3c134e50346bdf165658a17","54e3798c2801e8f3bc7a825d3d26c6a80ce763e19e6cb0b714594c430ef72332","70b8333214aadaccda8d38435911d3e3a686e503837dfda6b8c3f8c83e05729b","fe849e916564b8172f31a547395516668f3c122bfe017f82e7140d8dac402208","d42c6e985bdb10a2aaa3dae14d9b0d8589e74a7c2f9475bf543b855bb3c010ba","56c48fb5bb6316dfc27fbad065966b4ddbc38e9a0a1a5060d19b5da405ae7d6e","7091568b9a1b74b699ad09df6c130db712ed089d173a235e301a7a7ee0a4ca44","de33aa2a38affd9e71297ef7ec001a4525502878b09744308fb6518159f77d2d","57476e482c9b4e152bd23d0dc3c29375e48afee0de775674a3c1ea63cb4cf843","3ec4ecf6502ebdb1f3e24c712eb70160c606214ba2e71b4304b5a50fc2e4f293","83f7b6c1dc91deece32c3bee746a43f3616b7cc9f6510764bd53451f6712ff25","c23f2e8772304163fa7e4335be11f3dbdfd720d2209057566b7dfef746ef1862","2a26cb78d3de9708cd656787a663902270c9421ef89188286c3b7ec89b63bb15","e61fda2800677c210116c397dd85079a0956c87fd714826c08b25b10fdd56546","ef7bdfb4f157f9c9b9bd7f5766f0f8e07fac8e7482eec071673f3c9d08082982","d2f2ac1436cbb7c8d122cc7de96521345254e5b36591d9d064d9763de2a7b254","3cd2ba07285d01224f9595924dc7f760c7babb386a6eb825cb551f8d829fe6fa","3ae9770861c2ece5849778e9f15567d95b87df0165c0a5b1312181df19458a56","37b51656ff8302a4556e29c775f311eb9ad813948d2c527405cea041dba3baf3","00abf32ca3af92f8be9ecbc9b63090b4909a756317d791927a83cffd24e9c8ac","cd28efe88fac7a92f3f5cfc7dd3c764f0b31bdaaa061ff044de1639810d6a7da","8b2100d3ba68063b7baf5038f26eefe46543dcebf1e7dbaf46277f24307cefcb","131b7f32092aa78e12fcb2a6db7c71e17f85e076c0635ad8d991b80d10130c19","d1c84af1e6d5fa4a5f4badd45b03b67c9255a675df235a3ec25307a0f5524278","aa4d6dc9282133162a76109d99c5795583276c4fd27284f128d484acf12b0841","3355c4c572f076ad963d95f0e28075b8558e2ab492c84eb94f9e2c48f1c2368b","5638cfd48b0c56bc9ed0c779d53a40b92c9cd9c9d6312e3a21c52542d38094f3","827eb54656695635a6e25543f711f0fe86d1083e5e1c0e84f394ffc122bd3ad7","2309cee540edc190aa607149b673b437cb8807f4e8d921bf7f5a50e6aa8d609c","703509e96cc30dce834ef8188c958c69306473b8a7e5cb3a6f324cee05a1f7bb","900daf04dc607dc3858c0f976d6f9e17b829a07de58d62dc6f730eaf06986075","08e0ac95e650bd4c87145b6ab2257b70c06254bf76a0b9f8a7d60c51fb8ed6b8","4b57ec505a035491c692b89af2c6902c312ec22f8fa9b6dae3e93686659fb7e0","7d796672940d3b2d37f2edea4d7bcf4c7993966286006228cbc8fa35ac92871d","132fd53917ed7f55275faa52c35e4d4d41e9576fea231d12740b723df2bade93","de2ecf9b1d6f60338f7b59b6f593ef77af9abd0e70ba8f2942953d0c6e1850af","cf18e9d003f1d3d1d61a04eb2d1cff3e8a8cf9cd306d0532ea82700069f2fc42","393192a39f26f9247a74ecbaea6668972af8e9125c955d1798234dceca6010f7","27ca878cf70b3030e8403f51ce65949d364fa776d6dae3527f91635a40836672","178e2de7a8702742957ad24deaeddec84a48cd913b5d932b16afd2a707b3e416","a45ee7555d019a67fbe092898d1aef0b1d02a9f6679ab84461ff515b4460d706","29c188a2c660f99f1b4835022e011c4268d7af989d4b7dda33c0a69ca1a777f8","1ed0bf138e87912d741e28333b58cbf814ae863783b3b404d2454cbabb9c5fc0","3452ee7d8ef0b1bbd47b2a56924a1dc3c79dc84a19d212e9dc496f92e4943aa0","8c95f96ccd4be0674944077aec1e4f2cccd515ca06d4327562dd017250e7d3fc","6fe7571c8a80808224648046008d1366ba4e29206ac79ce4c56d6fab3350492b","a98be76d8c257aa9e316bdb305b8c4228f0cf904d4b70547fc2999f3f99b5a01","7419d99dfe020d543c8ee736ab7ec17127d6a2c61c40e5f245c6dbd3fa6eaea4","2495815b16258136f98d91e441f4462f9b694520af86bb8c8373724cdc410096","a64568c16a5821575de4f6280ba1ea4686a1ceecd649fa90ba957c8b1b007013","ac46f284c80582f7c1284eef93f2d1c80add2d3b0e8a4076d6ca3db58d3af747","dee4dbaef83bb1061a44f39a91a59300d3dc02528eb57f748222235dd8e02159","a39c32b055d2e6103e5c49b9aed2d7bb5b06571c98fc31105264d280431bdbd7","618ebb93311695a13844118cdc9a7314dd3a2c6f35092d87f76828cac555ddc9","d36c3d116ce59a3f072c0014f0c020c76e916ba906066ddc4f193f546a43bceb","9bed8447acaa89be63540ec500b165442fcb0de020015175b5a5c66d42a61c4a","f128a2d1209d243ba2f7755c2fc313be2c7569fa0d9b4dc5cc60714fb0cc6634","a17e6861b709149f29a2bd896cee94526df2f06b24a2b60614b56649b5e9aabe","9c79ace686f720f4dd833740f7190e12cdce363362c982c164745527a412ef40","439850ca5075c6db55487b2c7fb27a6051fecbf180eee0809b67bb2783a89813","75d48857bc4216880443a24d985071262bb8b89a9952c77fd430cb0caa21f9bf","33e40cf77499b3d9712db82e15683373925e85817dbe82a24ee0ee6e44bffb70","d5bbd453310990e851908183fbbef9e6e2db8e0c86d97b42b723fd5238f71c81","95e76bed30f6e993e1fcc1b90a4675682e4800ae43403547a775d6e3c7ab2b0f","8b206b995edc6dd849b85c1c56531b9780e3ba75302fd02a2d173f008028707e","97040b190f0daa10cf9a15e51a2fac66b26ddefd7b65998bd6027d1dd67647b7","877c25dfae100e555014e45d1d80364496a0c876201e5dea91a0fd0a6a4ff765","d53f9f96afd41359edeb2d5ad98559f3bfad261391d5aef95320fefb0c6a8742","23d98226adf3be74e1f0470f85e7fd154cd7aa979d60b43190a7437f0d0426eb","639f9321a98b734242a3573764d7f1de5369b0b0b10c768ae37639e8bda5dd03","a42c39d8b7d1b1eccb69c7919ea60dcc2670ea672a0af90b70a730974ec0e9fb","dc5fe5f6b39c3fdfaeba333bcd5f0cc98bb3068797a4d7010f585366f549ddf7","4a3ab8cb278bfd1f18f24cc45a02188b63afa6aef50035df6d79c4638f24059a","e724c9ce92f2a8a31ed260764c5455852a13d292e2a31d26acc6840ec0e83208","40220ba1b091aff0cb20df5467202b62af561b09fcf3b24c22a60066d46f9e62","30abf588759f9e828a94f0c7f031eae094bb668c6dd4d902fa296779267c05c5","bd875d031474860131eadb42300aa57a71527bbb2b239d5b31ab6a9e352c84f0","773bf9af93b5027de9b5b4c779d5cda35f0eb92c7f43a97f2ef3ca081495a191","617f2b4f5115969c7b0f225d4962e6bec1cec7e5c687d84370eba4931b7dd047","59625b1fcc91f2686751fd5b623126f434d7b405bd8d866a555963ce2ac69846","5e0dc1bd24b45c46f2188d2f7f4b67f311610c72b706f963c5bf04c2e1fcc35d","fc69ffd599d3e525aba38f80c7cc2ecd187dbf148287364c75f199c8294a00e6","2ad138be6972de52ed966e6402aa6403af79e9f183486e0a725ffa075a0555fb","480274a4f75a7b3bd5c697a55e1905887b62a928592c0db3c282525fb235ba70","967fb6e86b55db228ab50c81f85f39d6a23a0c15bcfa6e19d255e0952d33a65a","c39e7d32dddfcdaa93b18b99fa430ebb1d6ba366459563d400add22f92e3644b","e3932de252bbe43132ad3226865b2a376ad945dbc1d767540c01b7bddc6477c2","b2f52f3cbd863dc4e690614b5cddbf412dea435d0de099db6d8adfd3cbefcd65","557c93b35f3b58e6844a9b8817559da1e0641f7f08f918e3cd1a8efee126746f","80ad2ae93d57dadac5e377ec6743df5e0211ea30bafd4b648c52366af057bb2b","07f90213b5800a0b43a6d6f309517dcca5afc6ffeb4bed396878a29fc5d6ceb0","bb0e637020f81cb40d16f202c3a783f0e269e29547fb84ca9f187a5ea8556965","462da802b50ac0d94a3c8f7f58a6a0aa08108bfc1394449ea56f1e0f63f5132e","2ccea88888048bbfcacbc9531a5596ea48a3e7dcd0a25f531a81bb717903ba4f","b7eece07762a9a944f097ee05d6f6b642b1e2dd87e6fc1b09600d881e5475377","1916218868966583a3c9f18501ee78929cab8450ebb8076ebd609873c258154d","98ca5ae10ab02fe747a7a53138f43525e0129aa1107892ea4e1fe9c99575809c","9760678d20c9faa0d0e1269806bce578bb76598a4a188a4d3987171263be20c5","21f706150e32f03ecd1714d7a7ac55ce3caadc7c7a2a960ba57cc5d39ad84c9d","6954ec87361b77bb8895426909fecfd154e3fd72a2b82f681c8bb15bc46f2389","da1963f37d566ff9f71bf8ca5c628656bae02fc9509050041547e9c7063cc58f","57e4bed825036f7f1328505bc512af492f28b1b57a48f1ff9b6d90b930041a52","3ef0957915b7719ac58153eaea6ce810ff8688276e570f8938455f3ec7930df7","05e0ad043fdd4e2d4874a97bd716174af64d63e43851c09830c00e819a80d395","2dff0ed1eb2046fbdbc2c13914117e1ff1112e217f90542ea5e7f41e39f0393e","a0ba1e2711c2520189ed980225e7a429b0706a1eabf9113e53f0e72550a1b23d","169b66aee819a4b165c397b832b31691f0be8d35cf8f2ec6364c23ee727b20b8","badb4cfbfc6eca3a038be22c76297bec0b5c1478d8b73d60e8b50725b7dcc15c","21e7e0eddddc112f2b891d1066eac74680291db768d3ef9b908965935380ab98","489e195150979dc291520e6f3289f055516cf342f314931c6b4553aebf2859bb","516efe800aaa0b7504b71f2d7e7e9bed5f28eb6c9c739bfdf237f09c7addea46","10ae729013e6620dc937df5dd7077c34e29ad313a28aa75cec39957640cdc8b0","ac5f95dee5e4787fa7c68a81a052cdfa0e03adec8331d3276389384df36cb849","0aaa321f1f662ec931e55c85867d316d8af16b59337111e22901516a0e1caacb","fab58e600970e66547644a44bc9918e3223aa2cbd9e8763cec004b2cfb48827e","a120dfb4736e6ec4c78f1bff5ff7f977d346152e6b7020659ee1ce4717f6f66f","9eda7b58498bed72dd98ebf1d6f8dd3bf5df5004b2f91c610093bf48f970c615","8e7adb22c0adecf7464861fc58ae3fc617b41ffbd70c97aa8493dc0966a82273","755f3cd1d9c1b564cff090e3b0e29200ae55690a91b87cb9e7a64c2dbeb314d3","d6bb7e0a6877b7856c183bff13d09dd9ae599ea43c6f6b33d3d5f72a830ed460","f1b51ae93c762d7c43f559933cd4842dd870367e8d92e90704ffa685dd5b29a3","4aa7fdc017a0a097c71ada2ca187e1475c987b4f933960c0792eb143997e4709","3f450762fd7c34ed545e738abccb0af6a703572a10521643cf8fc88e3724c99c","c56e9d223c1b5682aba7b1a761897e3b52a96d1a1e557d6a60241f3fa0430098","8516469eb90e723b0eb03df1be098f7e6a4709f6f48fd4532868d20a0a934f6e","d60e9ab369a72d234aac49adbe2900d8ef1408a6ea4db552cf2a48c9d8d6a1bc","0ebb4698803f01e2e7df6acce572fff068f4a20c47221721dafd70a27e372831","03460a54d0e0481d1e11097f66ad43f054bc95efdafe5f81bbc7a82be181af75","ded24ddc7157689a5aa14bd651272ab8cd6e7812da2196a65d8c5e63131cfb23","2cea9689efa8591732096235abe7f084fc29c92badd5b0897a5e876b77e71887","4ed4e504126014fee13aaef5e3fc140f2ff7031ff3a8b5386717905820ea2d09","00e77e0bf106bc1e4f303ab02724df5173506d44acb6c22b4f582a88f22c3250","30d2170e1a718b5035611af55e3618b4ba8f42f0749bb52ee593da6082c4e2ce","f910705a0f7b484f66cc58a71a862984d2ca6f5df8f5a96201f569d564e1c2bd","a3b8b6be7620897d1e481e8650c980a210a138fceb6e710eaf95fd9dd0dfe94a","12c89d0e32758c120a569045f21cf5b77244f86792611ced8de7f86b37e77781","14bd47270e654c8eb3b1489fa8c095912ee62a0a29bb92743393203722347c53","235ac682dd51a0fd9714ea306bfebc6e32ca997aae0695fbc76d29dab5d4be32","bbb0c464f84002efad8c8df37297703738bc457a39bd801e2df05bf45f7a7f26","92cb686a9ca5eb5dd7d5d8d43a3707194c1e91ea07a027b3bcb60b6011b24632","da3ab7396ab4fe390f01091bd0d4c4a4e1e2a15a46d47446d6fb7194897d0f6c","66bbae6120d307ec2021ebd2241b8ad23f832b663e13363ca8b4c8dbc131a4e6","fb14266ae4070bd16db6b071e98887452bc359695c40742e38515a89dbc80a63","4a24d83c0d8f489465c4d38ed9fd87121c8a2cf50c47efe09c2eca93d39fa908","c052e32b9de53cd2596f196a0901801961bd7a31be9fac4ac2f117e4103e3a07","b15cdbb45919bc3b8e6b6f962d65382e85061d70bc26a968604f3dce4ad3a891","d6b58d955981bc1742501b792f1ab9f4cba0c4611f28dcf1c99376c1c33c9f9c","f0b9f6d5db82c3d1679f71b187c4451dbc2875ba734ce416a4804ad47390970a","a5c38939c3e22954a7166d80ab931ac6757283737b000f1e6dc924c6f4402b88","31a863da9da2a3edec16665695bdbc3134e853195f82dafec58e98c8e1bb3119","a00417f73bbba413d1345dd77252ede0bd0c957e37a9cadc9abb4c34cbd0eac1","90d1ad8d2983cb003d6f237b41c56a8f252f72071bbc53576e02b3c96d7ea47a","f3815045e126ec1b9d224782805a915ae01876a1c7d1eb9b3e320ffadbd63535","d07557f21b2ad690bfe37864aa28090bd7d01c7152b77938d92d97c8419c7144","b843ea5227a9873512aa1226b546a7e52ea5e922b89461f8b202a2f2a3f0b013","64b4d440f905da272e0568224ef8d62c5cd730755c6d453043f2e606e060ec5a","d6b58d955981bc1742501b792f1ab9f4cba0c4611f28dcf1c99376c1c33c9f9c","f0b9f6d5db82c3d1679f71b187c4451dbc2875ba734ce416a4804ad47390970a","a5c38939c3e22954a7166d80ab931ac6757283737b000f1e6dc924c6f4402b88","31a863da9da2a3edec16665695bdbc3134e853195f82dafec58e98c8e1bb3119","c0e03327bc548757709a7e2ca3063ca8b46227b5e13cd981ca3483035ef5ac44","b8442e9db28157344d1bc5d8a5a256f1692de213f0c0ddeb84359834015a008c","458111fc89d11d2151277c822dfdc1a28fa5b6b2493cf942e37d4cd0a6ee5f22","da2b6356b84a40111aaecb18304ea4e4fcb43d70efb1c13ca7d7a906445ee0d3","187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","febf0b2de54781102b00f61653b21377390a048fbf5262718c91860d11ff34a6","6f294731b495c65ecf46a5694f0082954b961cf05463bea823f8014098eaffa0","0aaef8cded245bf5036a7a40b65622dd6c4da71f7a35343112edbe112b348a1e","00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","68a0d0c508e1b6d8d23a519a8a0a3303dc5baa4849ca049f21e5bad41945e3fc","3c92b6dfd43cc1c2485d9eba5ff0b74a19bb8725b692773ef1d66dac48cda4bd","b03afe4bec768ae333582915146f48b161e567a81b5ebc31c4d78af089770ac9","df996e25faa505f85aeb294d15ebe61b399cf1d1e49959cdfaf2cc0815c203f9","4f6a12044ee6f458db11964153830abbc499e73d065c51c329ec97407f4b13dd",{"version":"99e8bb8d262bece129ac203f0c7436a07771e9cf5ba06a308d1b16993606eaf2","signature":"8705a9680ed4afb15edbd7bb9ee24af33060d1165117f293559f3073bf8d0101"},"ebf6e19cb84d78da20d022a95f05e8aef12e56f816a1ee12835a4da40d7b14cf","589357c2f88f1188a0dfc48c4c4cf4d22fac9f654805df5f2789a01b5616b74f","6abe62ec5b9b6a747c1a7687d58ff179cdfb61adee717b6e4882120f7da4399f","5c1301f550be26133f4fd34eadf38815db096ecaf9b75948b444a063097f496d",{"version":"a9da7f568572f17ff34f392fbb2e14d54af485c5a91c7c16236c5128a0244877","signature":"26e21c167c2fac8abb3012a81444fe86f7e1b4763be9ff78e0c1461c96fd4cb5"},{"version":"34ef3dd636b7074beec81346987a81ac245e1cfd75adf0babc68e6cb6c572ca3","signature":"82065c62b6a8089452cb40191a55299b2d0718ddce833446faa6c01f48f05b29"},{"version":"c1eb1aa5e32fd31d4564bffb458942d8caf500d86388c811cbb853c274e4773a","signature":"a7fe41f597b2631d3fb439d9b3ee32d1606c651a45ce2fa0d170a2614e68d280"},{"version":"688f5be456e9d21efc3175f1a63fa16bcf7ff298f7c07d3139dff4d3dca4f1c5","signature":"a02c4f63755323897ac2609e4355b3f499b779b247cba3440a8019b2e6df9652"},{"version":"3b1ea19c2b95501c5d8e87fe4c8044d204c4402a8b48f282bd348f973355f3c5","signature":"01b86f9481ddaf74b65f12e90ae2d5bedbc0e67e64e8cb273c7a1907cc66dbec"},{"version":"897a42f20db3ee955b1cc64506c040b0b1dcebe45d9ba3147e133d110f487f6e","signature":"3089238aed154b07430dd80de65df3115d268f21f1afcd8568a58d65c7827c5f"},{"version":"2d41bac312ef892971b2344a102feb99985e87f79edc18ed2c43ece97703fb91","signature":"2642375958909546f682d51f9c3682f553ae5f919f7b4a77d49262c200bca248"},{"version":"db3db9885deb334e6606785a0bfe7aecdcae172d36a6b4bd55958c756b92ac6c","signature":"79cdba32abf1fd279e588363d3048cb4b3d537a81530d32079cea1df22d66f93"},"1fcb8b15db812281d69a3090d488903f9e93033004aef9d8889ca3ad0753a96f","bdf5a95eb0a2dd1d39805bdf51b46ba012bb9b92b2ddaae16219595bba7678a5","9f794a0e8550a03baff865a3961cc22afbd85bc4ba9672bdda036971928f85f4","66a697d1e4cdbf25cdce4644a8085a8563041fa8c7731d4d9f5e8f22e66ba72c","a0c8e17f4d1ea2704c62d7349bc3b8d9a12e3761b5960cb44144d3f0333b3fcb","3471c0df3d0391e1dffe6e8bf150294531b2b71a2afa5f2b86e52bf84a5db60a","5d4df4de055eddf3187094f938a640f8d96e4c551a47d6686596fdb6ba4c3014","8bc2cad630da1033c1fd8d7df2bffb18af0da6113bd086a8bbec04a2471a1e00","a1059d1bbc8ad46bfe668b8450e7e8002887c4ab987bdb96d6108d8023f8bb8f","5134885e9648e2c6745f8aa1c3e7f5ab3b3617258b3d81ca02de6655ede3d74e","4f1ae3f24125216cf07c5211a3f00d2bb4782d7cc76c0681603f8249f9232ff0","d3fb92a5640f83f7844d60b35317a0f95c27e3658a749d76d218c461ad091668","d1f8bfcd91b284657ef8187c55ace7db91a3c43e642c3f14e54364154932f7e4","f54c92bfcae54f360fe79514746efce4870e4ddabc064e95d406bba291e9f672","175fd7186fa6a70f9db9b270a04a503cae23cf01cb77e3905bac115c38424cf7","c993f7ed1b8e1023c1f2ee5b262dbc3b70b27475674e40a53a58591f9972dacc","c914014ab7c7001178663f29d31a495398234a41219af61f26d7e8e91b46af96","277afd6ab6ec72889e2988e0ddd7d138c1f512e68a1fa4e90eedfd71e2097a51","c0908f85f2b645d375127a3b53a17a65f782e17962d5c1eb68f08b1188acbf15","3fadac5d409cc2f27b1d2f4e7568600f02840205f301c9ae7a3068b46476438b","da6aae64ad559286830fd44c81e3d33303348f184af7db4fde8dd99ae9749407","3633f87c97d359cb55fa7bf0668fb2be8a23342951af6ec2d06e6d0cf7409371","cc3a5427d44fc77ff25e80b3edee4650a51f83de761faf5e633994ecf1ab1b44","b350eda75c6e47299b36002b31d5b220c405c21c365e708989829db013fadbb4","f421882756b6714834ae4687ab1aeadf344a1cc45437d2edffbac020ff3801c1","1d61d6ad832dabafbf63b86c5a79d704f2c8763ada9318e135b17a3cb2d09b32","e5cef5de3e5ad3436d414d20743231e284733b9cf4375dc79eff4fcca4282f99","e624419ba84e33e661e89a28083119ca41f6953dba09a4f82b660684087afe6d","942be430bd0feaced2e3e598273b17e50ea565ec9dac840b580b0b99e1a3cd5c","73350006cec5a0c6b71d53b0b0ddbfb82be96752a9c4e3c904c59e633bc9485e","a7df5c2e9594966c7e0d4a763b13ed5727506d892669df5f7bc9826f539c1d35","258cc5cd6891f6bcbaccefd953997038844e7f65d582cac987ffabf7181bcd4c","00a6db28fc4df6ddf10adbe630d9df620ec13af19039c1869653e60dafa739d2","649324d5abb5464aabe35d86cd0eef16562df811f0971481cee664afa5acbc88",{"version":"628749b6edfc907c32583a77f7dde111642dbfc13265fa566e9a8fa47f224b51","signature":"495944b274165419ec08446dbd612d6276e2c12b92caa1f1e6c645cbc044ef25"},{"version":"e2f7d4348da1a42007547574ec71504de5e9df04d270bcc4c672bec1068257e4","signature":"0d7e153773886e59a74ffe1fac08bef805541411de160b9f3af36f8a6a3c6022"},{"version":"70fa251413c8e1926804d27e8aa01f96bf56141270e8adaeedfeaf0cc7147cef","signature":"2e85c128d27849ff4bd436f75d32d8a64d9013d420f09c82c6eae63cb7131020"},{"version":"334a6eff67fdb6feabbe5a612552a0714c424ccd07abbb096672085e7d43fb4a","signature":"19756a360a54eda2a10138b94b37a87519fd1a27c678a1b82187295e40bbfacd"},{"version":"722e48bdd1c494feabfb081d7d582d4554276abacce92f69128511918c125273","signature":"b195f1ad5886c1600c53bc7296210f9ded9a9a673e01988eecf9f20f48a4d9d5"},{"version":"1b5f109f8e1b74f648bf19b878188928678f443c2b2a21db0861f57d0715ef69","signature":"55310e6719d6bd9462e76cbba6a582712b30a85ee4949b8d98e14e0f46738e78"},{"version":"d184310a8c121c1ed754995dc55f8ca212bb1ef94979f99423dcdc48569b3c51","signature":"99ec28bacd04a3185d90660fe18bae48f33cbb1d50c73c64cae98e67f7c0ca01"},{"version":"48d475a0c6f91f62a89b128923cdec08f1f30a12df0068493f0d9b2774125b01","signature":"6a90b1b75bb0eb776ae223adc1f3f1cc343abf3e68df619933a3248910061290"},{"version":"e581d928f182594fe6aa7c0dd2e0ce02fe65fb53b7d40a59af9c2f171eee6428","signature":"1ac721bca31657133deb33e2ae005d557e8e6e0aa9a466142a2b0388e2e2638c"},{"version":"f18e14371215da28d2375c023017adcbd420314020f2a4ca4e9d9369ca80c1f4","signature":"0aeb9a7ce850134709dee9ecb63c1883e387eb70f960e0510100f4b2bb70caa4"},{"version":"bcc7e1fd0b70240f11846f0c5a284be69834446899b64477371cee7aaca38965","signature":"bab97a4f0736f1c1cd0546f79f993ecf30b34404cf4479a4f39068915880cb1c"},{"version":"6720778d4192df7ececcfd9dfebed8a006c9c44f88fe8b74880ab3ba7e14cce4","signature":"121c82998e23aa414d41a2f08e108074760318a1c11a2a5183b88b0d9be4ef60"},{"version":"e3fe28954899e21bf8a7db496cb4b90313e826bb5ae938d84bc73c3bdaa31cc9","signature":"4e1f22dbfc0754b698f1e291c7c92bf1220834bd5620207084236399cfd02e2d"},{"version":"7f2a2cdf8eecbe353d449055d91c6ee619f90ca3b3a49ba5a44563c44aab5d1a","signature":"8e6165fa13e0d2f40e2403ab20b72804d02c663709a3f7383a320050e893fe8b"},{"version":"a02cb9d0a7363cbbce45fa86bbd7d64615811e30f2a7c47a2718fcf53f20eae7","signature":"9af2721670eb3402e476cd827256d4af7ab1d6db57f1615cbef18c75164df9e5"},{"version":"96fab8386aaa39540fcc5df6c52161609fe3206e61617c539bb2013fc4fb6475","signature":"2d5322e915df8eb4f61ad57010853aae63ae3aa431929848785d35f28a2ad99e"},"14c94f7888c75007a94132f03caef0f6b58bcb136c2994213fd2d3b99f3d7f85","4695042a55a75a6c62dc57f2efe60ef3c7bbe19adedb5081f6e51dd664bbc3f7","b006ad8d854471e7a270bd8918508090961bdc1cfe77ed51f13f471fe682acac","310901df1081433ff7c3b7918496cabb92ded208b04294d3d2bd35acae2de836","c8646410cd2a6bf05eb7e7a51c881776410d07fd5d8f75092a2c815c9c6fda52",{"version":"127604bb56d364ecc35cbb4927ba7c53f552353fc7913b07a4f5cc957210aabd","signature":"973a1e0a155ab26d66226ff9d64a36cf61227e9240b21cabdc67df29847a6599"},{"version":"29af388cdb81bc168f119d2a58cfa29d5233d6319f2169c830a83e01818f2e71","signature":"724b8eab276d860692561bd3ae63a51491d93745ae398f437cad1ce6a955a0a6"},{"version":"52d75f505afb08392b783002ba3ad07889d29d26757f569ce42f6197263a766a","signature":"f62c377f7962d9789011ad7f0e51e18154bf5aa5a2bf02cf0f488ae3deb3cefb"},{"version":"e2e5ebf01c7004f157b8c750fdddb9f227fbf3119a87297e3a014db04c3f0887","signature":"fc6fe9c667e291d0bbdc904c921d2c1d385175f8c135d9e549298c96265acaec"},{"version":"6b0da45d7a1027dd4a9b14ac009b018761e8851c84a9e54ecc1be9086f0516c6","signature":"38fd30580198d072da98f6dbcb7535f47359ca91ffe57e3b9bfd1961a3b209ab"},{"version":"02a77981b5d1cf9385b93a69c9889b8efd16cbc3cb2f06a09cb8cbf80d9d6f3f","signature":"8f66f88862d836fda897b274e48358cf19c6ab47a9a2461fc91077ea53d2fec3"},{"version":"30894a023b87abcdd14c2e5f372ec72ad6a901bfeaf03641d92064aac397ac6f","signature":"08a9bf13b7fdb54e98360f24721f172380ad8b1ae0e50f15f542c740671aa84c"},"4489c6a9fde8934733aa7df6f7911461ee6e9e4ad092736bd416f6b2cc20b2c6","2c8e55457aaf4902941dfdba4061935922e8ee6e120539c9801cd7b400fae050","8041cfce439ff29d339742389de04c136e3029d6b1817f07b2d7fcbfb7534990","670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","9d38964b57191567a14b396422c87488cecd48f405c642daa734159875ee81d9","069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9",{"version":"64d4b35c5456adf258d2cf56c341e203a073253f229ef3208fc0d5020253b241","affectsGlobalScope":true},"ee7d8894904b465b072be0d2e4b45cf6b887cdba16a467645c4e200982ece7ea","f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","bc3cba7b0af2d52e7425299aee518db479d44004eff6fbbd206d1ee7e5ec3fb5","afe73051ff6a03a9565cbd8ebb0e956ee3df5e913ad5c1ded64218aabfa3dcb5","035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","a4809f4d92317535e6b22b01019437030077a76fec1d93b9881c9ed4738fcc54","5f53fa0bd22096d2a78533f94e02c899143b8f0f9891a46965294ee8b91a9434","0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","d8aab31ba8e618cc3eea10b0945de81cb93b7e8150a013a482332263b9305322","462bccdf75fcafc1ae8c30400c9425e1a4681db5d605d1a0edb4f990a54d8094","5923d8facbac6ecf7c84739a5c701a57af94a6f6648d6229a6c768cf28f0f8cb","7adecb2c3238794c378d336a8182d4c3dd2c4fa6fa1785e2797a3db550edea62","dc12dc0e5aa06f4e1a7692149b78f89116af823b9e1f1e4eae140cd3e0e674e6","1bfc6565b90c8771615cd8cfcf9b36efc0275e5e83ac7d9181307e96eb495161","8a8a96898906f065f296665e411f51010b51372fa260d5373bf9f64356703190","7f82ef88bdb67d9a850dd1c7cd2d690f33e0f0acd208e3c9eba086f3670d4f73",{"version":"ccfd8774cd9b929f63ff7dcf657977eb0652e3547f1fcac1b3a1dc5db22d4d58","affectsGlobalScope":true},"d92dc90fecd2552db74d8dc3c6fb4db9145b2aa0efe2c127236ba035969068d4","96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","8841e2aa774b89bd23302dede20663306dc1b9902431ac64b24be8b8d0e3f649","916be7d770b0ae0406be9486ac12eb9825f21514961dd050594c4b250617d5a8","254d9fb8c872d73d34594be8a200fd7311dbfa10a4116bfc465fba408052f2b3","d88a5e779faf033be3d52142a04fbe1cb96009868e3bbdd296b2bc6c59e06c0e","d8f7109e14f20eb735225a62fd3f8366da1a8349e90331cdad57f4b04caf6c5a","cf3d384d082b933d987c4e2fe7bfb8710adfd9dc8155190056ed6695a25a559e","9871b7ee672bc16c78833bdab3052615834b08375cb144e4d2cba74473f4a589","c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","86c73f2ee1752bac8eeeece234fd05dfcf0637a4fbd8032e4f5f43102faa8eec","42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","f4e9bf9103191ef3b3612d3ec0044ca4044ca5be27711fe648ada06fad4bcc85","0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","7d8ddf0f021c53099e34ee831a06c394d50371816caa98684812f089b4c6b3d4","7d2a0ba1297be385a89b5515b88cd31b4a1eeef5236f710166dc1b36b1741e1b","9d92b037978bb9525bc4b673ebddd443277542e010c0aef019c03a170ccdaa73","ab82804a14454734010dcdcd43f564ff7b0389bee4c5692eec76ff5b30d4cf66","bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","ae271d475b632ce7b03fea6d9cf6da72439e57a109672671cbc79f54e1386938"],"options":{"composite":true,"declaration":true,"declarationMap":true,"emitDeclarationOnly":true,"esModuleInterop":true,"inlineSources":true,"module":1,"outDir":"./types","rootDir":"../src","sourceMap":true,"strict":true,"target":7},"fileIdsList":[[669],[73,109,110,111,126],[110,111,127,128],[109,110],[109,126,129,132],[109,129,132,133],[130,131,132,134,135],[109,132],[109,126,129,130,131,134],[109,117],[109],[73,109],[61,109],[113,114,115,116,117,118,119,120,121,122,123,124,125],[109,115,116],[109,115,117],[607,611,612],[607,610],[610],[611,613,615],[607,610,611,612,613,614],[607,610,614,618,619,620],[607,610,614,621],[607],[607,608],[608,609],[607,610,616,619,621,622],[617],[618,620,624,627,628],[618,620,628],[109,610,614,618,619,621,624],[618,628],[618,621,625],[610,619,621],[618,621,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639],[618,626],[109,626],[607,614,618,619,620,621,622,625],[618,620,624,626],[618,625,626],[109,136,393,394],[394,395],[393],[109,388],[388,389,390,391,392],[109,360,367,368],[109,360,367,368,388],[109,360,367,368,372],[109,360,367,368,369,371,372],[109,360,367,368,370],[109,360,367,368,373,374,376,377],[366,388],[109,360,367,368,373],[109,360,367,368,371],[109,360,367,368,384],[109,360,367,368,385],[112,357,360,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387],[358],[358,359],[358,367,368,373,374],[360,366,367],[403,404],[73,109,393,396,402],[396,403],[217],[547,548,549],[217,546,547],[250,259,260,263],[250,259,262],[251,254,255,257],[251,252,253],[254,255,257,258],[251,252,256],[262,268],[250,259,262,268],[259,262,268],[259,262,264,265,266,267],[250,259,260,261,262,263,268],[250,259,261,263],[250,259],[251],[145,168],[145],[190,191,192,193,195,196,197],[168,190,191,192,193,195,196],[145,168,194],[199],[202],[145,194],[203,204,205],[198],[194,198,200,201,206,207,214,216,236,237,355],[168,201,206],[209],[208,210,211,212,213],[145,168,194,198],[168,198,215],[168,215,216,235],[168,207,354],[139,145],[657,658,659,660],[570],[550,569],[562,563,564,565,566,567,568],[562],[564],[562,564],[426],[109,229,425],[109,229,426],[109,229,397],[397],[397,398,399,400,401],[109,229],[229,428],[428,429,430,431,432,433,434,435,436,437],[229,428,429],[62,109,229,428,429],[106,109,229,428,429],[229,429],[168,217,224,225],[226],[230],[225,226,227,230,231,232,233,234],[109,227,229,232],[109,168,226,229,230],[225,232],[109,168,217,224,226,229],[168,224],[168,238],[238,239],[238,239,240,241],[168],[189,354,476,493,494,507,532],[530],[168,505,520,528,529,531],[519],[189,354,456,518],[109,224,229,427,438,493,494,495,507],[168,189,493,507],[438,496],[498],[495,496,497,499,502,504],[501],[496,500,505],[438,496,497],[168,438],[503],[496,497],[510,525,526,527],[493,507],[506,507,508,509],[493,507,508],[168,493,506,507],[168,493,507],[523,524],[168,189,486,523],[168,354,486],[168,185,189,354,463,476,486,493,494,505,507,510,512,520,522,525],[521],[168,354,476,493,494,507,528],[145,168,485],[109,168,243],[168,351],[320],[168,243,320,348,351,352,353],[109,168,242,243],[244,245,246,247,349,350],[139,145,348],[139,145,246],[278],[278,284],[278,283,285,286],[278,283,287],[283,284,285,286,287,288],[290,291],[279,280,281,282,289,292,293,294,295,296,297,298,299],[278,292],[278,279,294,296,297],[278,292,295],[278,300,301,302,303],[145,278,300,351],[335],[348],[338,339,340,341,342,343,344,345,346],[168,270],[320,344,351],[270,348,351],[145,321],[270,271,321,324,334,335,336,347],[145,168,304,320],[348,351],[269,271],[271],[351],[321],[168,324],[248,249,272,273,274,275,276,277,322,323,325,326,327,328,329,330,331,332,333],[168,326],[248,249,272,273,274,275,276,277,322,323,325,326,327,328,329,330,331,332,351],[168,269,270],[235,334],[168,271],[318],[145,305],[306,307,308,309,310,311,312,313,314,315,316,317],[305,318,319],[304],[354],[442],[441],[145,168,448],[269],[168,242,354],[145,354,455,456],[439,440,442,443,444,445,446,449,450,451,452,453,454,455,457,458,459,477,478,480,481,482,483,484,487,488,489,490,491,492],[145,168,476],[145,168,354,442,480],[159],[479],[145,168,269,354,478],[145,354,478],[145,354,476,479,481,486,487],[145,168,442,445,457,480,481],[354,456],[487],[537],[537,538,539],[148],[145,148],[146,147,148,149,150,151,152,153,154,155,156,157,160,161,162,163,164,165,166,167],[139,145,146],[136,148,154,156],[148,149],[145,163],[109,363],[361,362,365],[361,364],[109,361],[413,414],[669,670,671,672,673],[669,671],[158],[675,676,677],[74,109],[680],[681],[692],[686,691],[581,583,584,585,586,587,588,589,590,591,592,593],[581,582,584,585,586,587,588,589,590,591,592,593],[582,583,584,585,586,587,588,589,590,591,592,593],[581,582,583,585,586,587,588,589,590,591,592,593],[581,582,583,584,586,587,588,589,590,591,592,593],[581,582,583,584,585,587,588,589,590,591,592,593],[581,582,583,584,585,586,588,589,590,591,592,593],[581,582,583,584,585,586,587,589,590,591,592,593],[581,582,583,584,585,586,587,588,590,591,592,593],[581,582,583,584,585,586,587,588,589,591,592,593],[581,582,583,584,585,586,587,588,589,590,592,593],[581,582,583,584,585,586,587,588,589,590,591,593],[581,582,583,584,585,586,587,588,589,590,591,592],[57],[60],[61,66,93],[62,73,74,81,90,101],[62,63,73,81],[64,102],[65,66,74,82],[66,90,98],[67,69,73,81],[68],[69,70],[73],[72,73],[60,73],[73,74,75,90,101],[73,74,75,90],[73,76,81,90,101],[73,74,76,77,81,90,98,101],[76,78,90,98,101],[57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108],[73,79],[80,101,106],[69,73,81,90],[82],[83],[60,84],[85,100,106],[86],[87],[73,88],[88,89,102,104],[61,73,90,91,92],[61,90,92],[90,91],[93],[94],[73,96,97],[96,97],[66,81,90,98],[99],[81,100],[61,76,87,101],[66,102],[90,103],[104],[105],[61,66,73,75,84,90,101,104,106],[90,107],[109,228],[700,739],[700,724,739],[739],[700],[700,725,739],[700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738],[725,739],[740],[743],[511],[572,573,574,575,576,577,578],[572],[574],[572,574],[447],[595,596,597],[595],[596],[180],[180,181,182,183,184],[169,170,171,172,173,174,175,176,177,178,179],[684,687],[684,687,688,689],[686],[683,690],[685],[138,140,141,142,143,144],[138,139],[140],[139,140],[138,140],[168,189,356,424,532],[533,535],[424,534],[168,189,242],[461,462],[168,185,186,187],[186],[137,186,187,188],[187],[408],[408,409,412,416],[415],[168,410,411],[543,544,545],[224,543],[168,224,543],[168,217,224],[168,189,555,559],[560],[168,218],[218,219,220,221,222,223],[168,217],[423],[136,168,185,189,356,405,406,422],[73,109,168,189],[407],[407,418,419,420,421],[407,417],[551],[542,551,553,554],[168,189,410,417,540,541,542,551,552],[168,417,546,550],[168,468,469,470],[242,468,469,471],[466,467,468,469,470,471,475],[168,224,468,470,476],[168,189,417,460,466,468,471],[168,185,189,242,417,460,463,464,465,466,467,469,470,471],[168,224,467,468,469],[472,473,474],[168,224,417,467,469,470],[168,224,467,469,470],[168,189,468],[168,224,469,471],[517],[189,417,513,515,516],[514,515],[516,517],[168,189,555,556],[556,557,558],[109,168,189,555,556],[168,555],[168,599],[168,561,594,599,604],[168,410,411,417,594,599,605],[168,599,601,641],[129,136,168,593,594,599,623,640],[168,417,599],[168,411,417,534,579,594,599,601,645],[73,168,410,555,561,594,599,600,647],[73,168,536,555,579,594,599],[168,410,555,571,579,594,646,649,650],[73,410,417,555,593,594,599],[599,600,601,602,645,665,667],[73,126,129,136,168,189,242,410,417,463,534,536,555,561,571,579,580,593,594,599,600,602,603,604,605,606,642,643,644,646,647,648,649,650,651,652,653,654,655,656,664,665,666],[136,168,410,555,561,598],[168,417,594,601],[242,599],[168,410,417,561,594,599,600,603],[417,561,599],[168,410,417,594,599,601],[593,598,599],[168,555,594,599],[417,571,594,599],[168,411,593,594,599,602],[168,417,594,662],[53,168,417,594,599,601,616,662,663],[410,417,593,594,599,601,602,667],[53,410,417,599,616],[168,411,417,599,667],[53,242,417,599,602,616],[599],[599,641],[73,168,555,561,599],[73,168,536,555,599],[168,410,555,571,646,649,650],[73,410,555,599],[159,168],[129,136,168,189,463,536,555,561,571,599,649],[168,410,561,599],[561,599],[159,168,410,599],[168,555,599],[571,599],[168,599,616,663],[410,599,667],[410,599],[411,599,667]],"referencedMap":[[671,1],[127,2],[129,3],[111,4],[133,5],[134,6],[130,6],[136,7],[131,6],[135,8],[132,9],[118,10],[115,11],[122,12],[116,10],[113,13],[126,14],[120,11],[117,15],[119,16],[613,17],[612,18],[611,19],[616,20],[615,21],[621,22],[622,23],[608,24],[609,25],[610,26],[623,27],[618,28],[629,29],[630,30],[625,31],[631,32],[632,33],[633,33],[624,34],[640,35],[635,29],[634,36],[636,37],[626,38],[637,32],[638,30],[628,39],[639,36],[627,40],[619,18],[395,41],[396,42],[394,43],[391,44],[390,44],[389,44],[393,45],[375,46],[380,47],[369,46],[374,48],[373,49],[371,50],[378,51],[379,46],[381,52],[382,53],[384,54],[385,55],[386,56],[388,57],[359,58],[360,59],[376,60],[368,61],[405,62],[403,63],[404,64],[547,65],[550,66],[548,67],[549,67],[261,68],[263,69],[258,70],[254,71],[255,71],[259,72],[257,73],[264,74],[265,75],[266,76],[268,77],[267,74],[269,78],[262,79],[260,80],[253,81],[256,71],[190,82],[191,83],[192,83],[193,82],[198,84],[197,85],[195,86],[196,82],[200,87],[199,82],[203,88],[202,89],[206,90],[204,82],[205,91],[356,92],[208,86],[209,93],[210,94],[211,86],[214,95],[213,96],[215,86],[216,97],[236,98],[237,97],[355,99],[194,100],[661,101],[571,102],[570,103],[569,104],[563,105],[565,106],[567,107],[566,107],[427,108],[426,109],[425,110],[398,111],[399,112],[402,113],[400,112],[397,65],[401,114],[429,115],[438,116],[434,117],[433,118],[436,117],[435,119],[437,120],[432,120],[431,117],[430,120],[226,121],[227,122],[231,123],[235,124],[233,125],[232,126],[234,127],[230,128],[225,129],[239,130],[240,131],[242,132],[238,133],[217,12],[530,134],[531,135],[532,136],[520,137],[519,138],[496,139],[495,140],[498,141],[499,142],[505,143],[502,144],[501,145],[500,146],[497,147],[504,148],[503,149],[528,150],[508,151],[510,152],[509,153],[507,154],[506,155],[525,156],[524,157],[523,158],[527,151],[526,159],[521,133],[522,160],[529,161],[486,162],[485,82],[352,163],[243,164],[353,165],[354,166],[244,167],[245,133],[246,133],[351,168],[349,169],[247,170],[278,133],[279,171],[280,171],[281,171],[282,171],[283,171],[285,172],[287,173],[288,174],[289,175],[286,171],[284,171],[290,171],[292,176],[291,171],[293,171],[294,171],[300,177],[295,178],[298,179],[299,171],[296,180],[297,171],[304,181],[302,171],[301,171],[303,182],[336,183],[338,133],[339,184],[347,185],[340,133],[342,186],[343,133],[345,187],[344,188],[346,189],[348,190],[321,191],[248,184],[249,192],[272,193],[273,194],[274,193],[276,133],[277,195],[322,196],[325,197],[334,198],[327,199],[326,133],[328,133],[329,164],[333,200],[330,195],[331,197],[332,184],[271,201],[335,202],[324,203],[319,204],[306,205],[315,205],[307,205],[308,205],[317,205],[309,205],[310,205],[318,206],[316,205],[311,205],[314,205],[312,205],[313,205],[320,207],[305,83],[456,208],[440,209],[443,210],[444,211],[446,210],[449,212],[452,213],[454,214],[457,215],[493,216],[477,217],[459,133],[481,218],[482,219],[480,220],[479,221],[483,222],[488,223],[478,100],[487,224],[490,225],[491,226],[492,133],[442,211],[538,227],[539,227],[540,228],[146,83],[147,83],[149,229],[150,83],[151,83],[152,230],[148,83],[168,231],[156,232],[157,233],[160,219],[166,234],[167,235],[364,236],[363,11],[366,237],[361,11],[365,238],[362,239],[415,240],[674,241],[670,1],[672,242],[673,1],[411,11],[159,243],[678,244],[679,245],[681,246],[682,247],[693,248],[692,249],[582,250],[583,251],[581,252],[584,253],[585,254],[586,255],[587,256],[588,257],[589,258],[590,259],[591,260],[592,261],[593,262],[57,263],[58,263],[60,264],[61,265],[62,266],[63,267],[64,268],[65,269],[66,270],[67,271],[68,272],[69,273],[70,273],[71,274],[72,275],[73,276],[74,277],[75,278],[76,279],[77,280],[78,281],[109,282],[79,283],[80,284],[81,285],[82,286],[83,287],[84,288],[85,289],[86,290],[87,291],[88,292],[89,293],[90,294],[92,295],[91,296],[93,297],[94,298],[96,299],[97,300],[98,301],[99,302],[100,303],[101,304],[102,305],[103,306],[104,307],[105,308],[106,309],[107,310],[697,11],[229,311],[699,11],[724,312],[725,313],[700,314],[703,314],[722,312],[723,312],[713,312],[712,315],[710,312],[705,312],[718,312],[716,312],[720,312],[704,312],[717,312],[721,312],[706,312],[707,312],[719,312],[701,312],[708,312],[709,312],[711,312],[715,312],[726,316],[714,312],[702,312],[739,317],[733,316],[735,318],[734,316],[727,316],[728,316],[730,316],[732,316],[736,318],[737,318],[729,318],[731,318],[741,319],[744,320],[512,321],[579,322],[573,323],[575,324],[577,325],[576,325],[448,326],[598,327],[596,328],[597,329],[176,330],[178,330],[177,330],[175,330],[185,331],[180,332],[171,330],[172,330],[173,330],[174,330],[688,333],[690,334],[689,333],[687,335],[691,336],[686,337],[145,338],[140,339],[141,340],[142,340],[143,341],[144,341],[139,342],[533,343],[536,344],[535,345],[461,346],[463,347],[188,348],[187,349],[189,350],[186,351],[409,352],[417,353],[416,354],[412,355],[546,356],[544,357],[545,358],[543,359],[560,360],[561,361],[219,362],[220,362],[222,362],[224,363],[218,364],[223,362],[424,365],[423,366],[407,367],[421,368],[420,368],[422,369],[418,370],[419,368],[552,371],[554,371],[555,372],[553,373],[551,374],[471,375],[470,376],[476,377],[465,378],[469,379],[468,380],[472,381],[475,382],[473,383],[474,384],[466,385],[467,386],[518,387],[517,388],[516,389],[515,390],[557,391],[559,392],[558,393],[556,394],[662,395],[605,396],[606,397],[642,398],[641,399],[643,398],[644,400],[646,401],[648,402],[649,403],[651,404],[650,405],[668,406],[594,133],[667,407],[599,408],[645,409],[652,410],[604,411],[600,412],[653,413],[654,414],[647,415],[655,416],[656,417],[663,418],[664,419],[603,420],[665,421],[602,422],[666,423]],"exportedModulesMap":[[671,1],[127,2],[129,3],[111,4],[133,5],[134,6],[130,6],[136,7],[131,6],[135,8],[132,9],[118,10],[115,11],[122,12],[116,10],[113,13],[126,14],[120,11],[117,15],[119,16],[613,17],[612,18],[611,19],[616,20],[615,21],[621,22],[622,23],[608,24],[609,25],[610,26],[623,27],[618,28],[629,29],[630,30],[625,31],[631,32],[632,33],[633,33],[624,34],[640,35],[635,29],[634,36],[636,37],[626,38],[637,32],[638,30],[628,39],[639,36],[627,40],[619,18],[395,41],[396,42],[394,43],[391,44],[390,44],[389,44],[393,45],[375,46],[380,47],[369,46],[374,48],[373,49],[371,50],[378,51],[379,46],[381,52],[382,53],[384,54],[385,55],[386,56],[388,57],[359,58],[360,59],[376,60],[368,61],[405,62],[403,63],[404,64],[547,65],[550,66],[548,67],[549,67],[261,68],[263,69],[258,70],[254,71],[255,71],[259,72],[257,73],[264,74],[265,75],[266,76],[268,77],[267,74],[269,78],[262,79],[260,80],[253,81],[256,71],[190,82],[191,83],[192,83],[193,82],[198,84],[197,85],[195,86],[196,82],[200,87],[199,82],[203,88],[202,89],[206,90],[204,82],[205,91],[356,92],[208,86],[209,93],[210,94],[211,86],[214,95],[213,96],[215,86],[216,97],[236,98],[237,97],[355,99],[194,100],[661,101],[571,102],[570,103],[569,104],[563,105],[565,106],[567,107],[566,107],[427,108],[426,109],[425,110],[398,111],[399,112],[402,113],[400,112],[397,65],[401,114],[429,115],[438,116],[434,117],[433,118],[436,117],[435,119],[437,120],[432,120],[431,117],[430,120],[226,121],[227,122],[231,123],[235,124],[233,125],[232,126],[234,127],[230,128],[225,129],[239,130],[240,131],[242,132],[238,133],[217,12],[530,134],[531,135],[532,136],[520,137],[519,138],[496,139],[495,140],[498,141],[499,142],[505,143],[502,144],[501,145],[500,146],[497,147],[504,148],[503,149],[528,150],[508,151],[510,152],[509,153],[507,154],[506,155],[525,156],[524,157],[523,158],[527,151],[526,159],[521,133],[522,160],[529,161],[486,162],[485,82],[352,163],[243,164],[353,165],[354,166],[244,167],[245,133],[246,133],[351,168],[349,169],[247,170],[278,133],[279,171],[280,171],[281,171],[282,171],[283,171],[285,172],[287,173],[288,174],[289,175],[286,171],[284,171],[290,171],[292,176],[291,171],[293,171],[294,171],[300,177],[295,178],[298,179],[299,171],[296,180],[297,171],[304,181],[302,171],[301,171],[303,182],[336,183],[338,133],[339,184],[347,185],[340,133],[342,186],[343,133],[345,187],[344,188],[346,189],[348,190],[321,191],[248,184],[249,192],[272,193],[273,194],[274,193],[276,133],[277,195],[322,196],[325,197],[334,198],[327,199],[326,133],[328,133],[329,164],[333,200],[330,195],[331,197],[332,184],[271,201],[335,202],[324,203],[319,204],[306,205],[315,205],[307,205],[308,205],[317,205],[309,205],[310,205],[318,206],[316,205],[311,205],[314,205],[312,205],[313,205],[320,207],[305,83],[456,208],[440,209],[443,210],[444,211],[446,210],[449,212],[452,213],[454,214],[457,215],[493,216],[477,217],[459,133],[481,218],[482,219],[480,220],[479,221],[483,222],[488,223],[478,100],[487,224],[490,225],[491,226],[492,133],[442,211],[538,227],[539,227],[540,228],[146,83],[147,83],[149,229],[150,83],[151,83],[152,230],[148,83],[168,231],[156,232],[157,233],[160,219],[166,234],[167,235],[364,236],[363,11],[366,237],[361,11],[365,238],[362,239],[415,240],[674,241],[670,1],[672,242],[673,1],[411,11],[159,243],[678,244],[679,245],[681,246],[682,247],[693,248],[692,249],[582,250],[583,251],[581,252],[584,253],[585,254],[586,255],[587,256],[588,257],[589,258],[590,259],[591,260],[592,261],[593,262],[57,263],[58,263],[60,264],[61,265],[62,266],[63,267],[64,268],[65,269],[66,270],[67,271],[68,272],[69,273],[70,273],[71,274],[72,275],[73,276],[74,277],[75,278],[76,279],[77,280],[78,281],[109,282],[79,283],[80,284],[81,285],[82,286],[83,287],[84,288],[85,289],[86,290],[87,291],[88,292],[89,293],[90,294],[92,295],[91,296],[93,297],[94,298],[96,299],[97,300],[98,301],[99,302],[100,303],[101,304],[102,305],[103,306],[104,307],[105,308],[106,309],[107,310],[697,11],[229,311],[699,11],[724,312],[725,313],[700,314],[703,314],[722,312],[723,312],[713,312],[712,315],[710,312],[705,312],[718,312],[716,312],[720,312],[704,312],[717,312],[721,312],[706,312],[707,312],[719,312],[701,312],[708,312],[709,312],[711,312],[715,312],[726,316],[714,312],[702,312],[739,317],[733,316],[735,318],[734,316],[727,316],[728,316],[730,316],[732,316],[736,318],[737,318],[729,318],[731,318],[741,319],[744,320],[512,321],[579,322],[573,323],[575,324],[577,325],[576,325],[448,326],[598,327],[596,328],[597,329],[176,330],[178,330],[177,330],[175,330],[185,331],[180,332],[171,330],[172,330],[173,330],[174,330],[688,333],[690,334],[689,333],[687,335],[691,336],[686,337],[145,338],[140,339],[141,340],[142,340],[143,341],[144,341],[139,342],[533,343],[536,344],[535,345],[461,346],[463,347],[188,348],[187,349],[189,350],[186,351],[409,352],[417,353],[416,354],[412,355],[546,356],[544,357],[545,358],[543,359],[560,360],[561,361],[219,362],[220,362],[222,362],[224,363],[218,364],[223,362],[424,365],[423,366],[407,367],[421,368],[420,368],[422,369],[418,370],[419,368],[552,371],[554,371],[555,372],[553,373],[551,374],[471,375],[470,376],[476,377],[465,378],[469,379],[468,380],[472,381],[475,382],[473,383],[474,384],[466,385],[467,386],[518,387],[517,388],[516,389],[515,390],[557,391],[559,392],[558,393],[556,394],[662,133],[605,424],[606,424],[642,425],[641,395],[643,425],[644,424],[646,395],[648,426],[649,427],[651,428],[650,429],[668,406],[594,430],[667,431],[599,408],[645,133],[652,424],[604,432],[600,433],[653,434],[654,424],[647,435],[655,436],[656,424],[663,133],[664,437],[603,438],[665,439],[602,440],[666,424]],"semanticDiagnosticsPerFile":[671,669,127,110,129,111,128,133,134,130,136,131,135,132,118,115,122,116,113,121,126,123,124,125,120,117,114,119,613,612,611,616,615,621,622,608,609,610,607,623,618,617,614,629,630,625,631,632,633,624,640,635,634,636,626,637,638,628,639,627,619,620,395,396,394,391,390,389,393,392,375,380,369,374,373,371,378,379,381,383,382,384,385,386,388,359,358,360,376,357,370,368,367,377,372,387,405,403,404,406,547,550,548,549,410,261,263,250,258,254,255,259,257,264,265,266,268,267,269,262,260,253,251,252,256,190,191,192,193,198,197,195,196,200,199,201,203,202,206,204,205,207,356,208,209,210,211,214,212,213,215,216,236,237,355,194,659,657,658,660,661,571,570,568,569,563,562,565,564,567,566,427,426,425,398,399,402,400,397,401,429,438,434,433,436,435,437,428,432,431,430,226,227,231,235,233,232,234,230,225,239,241,240,242,238,217,530,531,532,520,519,496,495,498,499,505,502,501,500,497,504,503,528,508,510,509,507,506,525,524,523,527,526,494,521,522,529,486,485,352,243,353,354,244,245,246,351,349,247,350,278,279,280,281,282,283,285,287,288,289,286,284,290,292,291,293,294,300,295,298,299,296,297,304,302,301,303,270,336,338,339,347,340,341,342,343,345,344,346,337,348,321,248,249,272,273,274,275,276,277,322,323,325,334,327,326,328,329,333,330,331,332,271,335,324,319,306,315,307,308,317,309,310,318,316,311,314,312,313,320,305,456,439,440,443,444,445,446,449,450,451,452,453,454,455,457,458,493,477,459,481,482,480,479,483,484,488,489,478,487,490,491,492,442,441,538,539,540,537,146,147,149,150,151,152,153,154,155,148,168,156,157,160,161,162,163,164,165,166,167,364,363,366,361,365,362,413,415,414,674,670,672,673,411,159,464,675,678,676,679,680,681,682,693,692,677,694,582,583,581,584,585,586,587,588,589,590,591,592,593,695,158,57,58,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,59,108,76,77,78,109,79,80,81,82,83,84,85,86,87,88,89,90,92,91,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,696,697,698,513,229,228,699,724,725,700,703,722,723,713,712,710,705,718,716,720,704,717,721,706,707,719,701,708,709,711,715,726,714,702,739,738,733,735,734,727,728,730,732,736,737,729,731,741,740,742,534,743,744,512,511,578,579,573,572,575,574,577,576,112,683,447,448,580,598,596,597,595,514,179,176,178,177,175,185,180,184,181,183,182,171,172,173,169,170,174,684,688,690,689,687,691,541,460,686,685,138,145,140,141,142,143,144,139,8,10,9,2,11,12,13,14,15,16,17,18,3,4,22,19,20,21,23,24,25,5,26,27,28,29,6,33,30,31,32,34,7,35,40,41,36,37,38,39,1,42,533,536,535,461,462,463,137,188,187,189,186,409,417,416,408,412,546,544,545,543,560,561,219,220,221,222,224,218,223,424,423,407,421,420,422,418,419,542,552,554,555,553,551,471,470,476,465,469,468,472,475,473,474,466,467,518,517,516,515,557,559,558,556,601,662,605,606,642,641,643,644,646,648,649,651,650,668,594,667,599,645,652,604,600,653,654,647,655,656,663,664,603,665,602,666,48,49,50,51,52,53,43,54,55,56,44,45,46,47],"latestChangedDtsFile":"./types/index.d.ts"},"version":"4.9.5"} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/types.js b/node_modules/@metamask/transaction-controller/dist/types.js -index 5e00e89..db29e0e 100644 ---- a/node_modules/@metamask/transaction-controller/dist/types.js -+++ b/node_modules/@metamask/transaction-controller/dist/types.js -@@ -8,7 +8,7 @@ - - - --var _chunkAYTU4HU5js = require('./chunk-AYTU4HU5.js'); -+var _chunkM3VM35IDjs = require('./chunk-M3VM35ID.js'); - require('./chunk-Z4BLTVTB.js'); - - -@@ -20,5 +20,5 @@ require('./chunk-Z4BLTVTB.js'); - - - --exports.GasFeeEstimateLevel = _chunkAYTU4HU5js.GasFeeEstimateLevel; exports.GasFeeEstimateType = _chunkAYTU4HU5js.GasFeeEstimateType; exports.SimulationErrorCode = _chunkAYTU4HU5js.SimulationErrorCode; exports.SimulationTokenStandard = _chunkAYTU4HU5js.SimulationTokenStandard; exports.TransactionEnvelopeType = _chunkAYTU4HU5js.TransactionEnvelopeType; exports.TransactionStatus = _chunkAYTU4HU5js.TransactionStatus; exports.TransactionType = _chunkAYTU4HU5js.TransactionType; exports.UserFeeLevel = _chunkAYTU4HU5js.UserFeeLevel; exports.WalletDevice = _chunkAYTU4HU5js.WalletDevice; -+exports.GasFeeEstimateLevel = _chunkM3VM35IDjs.GasFeeEstimateLevel; exports.GasFeeEstimateType = _chunkM3VM35IDjs.GasFeeEstimateType; exports.SimulationErrorCode = _chunkM3VM35IDjs.SimulationErrorCode; exports.SimulationTokenStandard = _chunkM3VM35IDjs.SimulationTokenStandard; exports.TransactionEnvelopeType = _chunkM3VM35IDjs.TransactionEnvelopeType; exports.TransactionStatus = _chunkM3VM35IDjs.TransactionStatus; exports.TransactionType = _chunkM3VM35IDjs.TransactionType; exports.UserFeeLevel = _chunkM3VM35IDjs.UserFeeLevel; exports.WalletDevice = _chunkM3VM35IDjs.WalletDevice; - //# sourceMappingURL=types.js.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/types.js.map b/node_modules/@metamask/transaction-controller/dist/types.js.map -deleted file mode 100644 -index a464c67..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/types.js.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":[],"names":[],"mappings":""} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/types.mjs b/node_modules/@metamask/transaction-controller/dist/types.mjs -index 5141bef..9c6da6d 100644 ---- a/node_modules/@metamask/transaction-controller/dist/types.mjs -+++ b/node_modules/@metamask/transaction-controller/dist/types.mjs -@@ -8,7 +8,7 @@ import { - TransactionType, - UserFeeLevel, - WalletDevice --} from "./chunk-6SJYXSF3.mjs"; -+} from "./chunk-KPA3AQWZ.mjs"; - import "./chunk-XUI43LEZ.mjs"; - export { - GasFeeEstimateLevel, -diff --git a/node_modules/@metamask/transaction-controller/dist/types.mjs.map b/node_modules/@metamask/transaction-controller/dist/types.mjs.map -deleted file mode 100644 -index 84c51b2..0000000 ---- a/node_modules/@metamask/transaction-controller/dist/types.mjs.map -+++ /dev/null -@@ -1 +0,0 @@ --{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/types/TransactionController.d.ts b/node_modules/@metamask/transaction-controller/dist/types/TransactionController.d.ts -index f4c0fa6..907115a 100644 ---- a/node_modules/@metamask/transaction-controller/dist/types/TransactionController.d.ts -+++ b/node_modules/@metamask/transaction-controller/dist/types/TransactionController.d.ts -@@ -9,7 +9,7 @@ import type { BlockTracker, NetworkClientId, NetworkController, NetworkControlle - import type { NonceLock, Transaction as NonceTrackerTransaction } from '@metamask/nonce-tracker'; - import type { Hex } from '@metamask/utils'; - import type { IncomingTransactionOptions } from './helpers/IncomingTransactionHelper'; --import type { SavedGasFees, SecurityProviderRequest, SendFlowHistoryEntry, TransactionParams, TransactionMeta, TransactionReceipt, WalletDevice, SecurityAlertResponse, GasFeeFlowResponse } from './types'; -+import type { SavedGasFees, SecurityProviderRequest, SendFlowHistoryEntry, TransactionParams, TransactionMeta, TransactionReceipt, WalletDevice, SecurityAlertResponse, GasFeeFlowResponse, SubmitHistoryEntry } from './types'; - import { TransactionType, TransactionStatus } from './types'; - export declare const HARDFORK = Hardfork.London; - /** -@@ -61,6 +61,7 @@ export type TransactionControllerState = { - lastFetchedBlockNumbers: { - [key: string]: number; - }; -+ submitHistory: SubmitHistoryEntry[]; - }; - /** - * Multiplier used to determine a transaction's increased gas fee during cancellation -@@ -132,7 +133,7 @@ export type TransactionControllerOptions = { - getGasFeeEstimates?: (options: FetchGasFeeEstimateOptions) => Promise; - getNetworkClientRegistry: NetworkController['getNetworkClientRegistry']; - getNetworkState: () => NetworkState; -- getPermittedAccounts: (origin?: string) => Promise; -+ getPermittedAccounts?: (origin?: string) => Promise; - getSavedGasFees?: (chainId: Hex) => SavedGasFees | undefined; - incomingTransactions?: IncomingTransactionOptions; - isMultichainEnabled: boolean; -@@ -357,7 +358,7 @@ export declare class TransactionController extends BaseController; -+}; - export {}; - //# sourceMappingURL=types.d.ts.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/types/types.d.ts.map b/node_modules/@metamask/transaction-controller/dist/types/types.d.ts.map -index 54b97e8..994163e 100644 ---- a/node_modules/@metamask/transaction-controller/dist/types/types.d.ts.map -+++ b/node_modules/@metamask/transaction-controller/dist/types/types.d.ts.map -@@ -1 +1 @@ --{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"} -\ No newline at end of file -+{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/types/utils/resimulate.d.ts b/node_modules/@metamask/transaction-controller/dist/types/utils/resimulate.d.ts -new file mode 100644 -index 0000000..11dcbc1 ---- /dev/null -+++ b/node_modules/@metamask/transaction-controller/dist/types/utils/resimulate.d.ts -@@ -0,0 +1,27 @@ -+import type { SimulationData, TransactionMeta } from '../types'; -+export declare const RESIMULATE_PARAMS: readonly ["to", "value", "data"]; -+export declare const BLOCKAID_RESULT_TYPE_MALICIOUS = "Malicious"; -+export declare const VALUE_COMPARISON_PERCENT_THRESHOLD = 5; -+export declare const BLOCK_TIME_ADDITIONAL_SECONDS = 60; -+export type ResimulateResponse = { -+ blockTime?: number; -+ resimulate: boolean; -+}; -+/** -+ * Determine if a transaction should be resimulated. -+ * @param originalTransactionMeta - The original transaction metadata. -+ * @param newTransactionMeta - The new transaction metadata. -+ * @returns Whether the transaction should be resimulated. -+ */ -+export declare function shouldResimulate(originalTransactionMeta: TransactionMeta, newTransactionMeta: TransactionMeta): { -+ blockTime: number | undefined; -+ resimulate: boolean; -+}; -+/** -+ * Determine if the simulation data has changed. -+ * @param originalSimulationData - The original simulation data. -+ * @param newSimulationData - The new simulation data. -+ * @returns Whether the simulation data has changed. -+ */ -+export declare function hasSimulationDataChanged(originalSimulationData: SimulationData, newSimulationData: SimulationData): boolean; -+//# sourceMappingURL=resimulate.d.ts.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/types/utils/resimulate.d.ts.map b/node_modules/@metamask/transaction-controller/dist/types/utils/resimulate.d.ts.map -new file mode 100644 -index 0000000..722455d ---- /dev/null -+++ b/node_modules/@metamask/transaction-controller/dist/types/utils/resimulate.d.ts.map -@@ -0,0 +1 @@ -+{"version":3,"file":"resimulate.d.ts","sourceRoot":"","sources":["../../../src/utils/resimulate.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAEV,cAAc,EACd,eAAe,EAEhB,MAAM,UAAU,CAAC;AAKlB,eAAO,MAAM,iBAAiB,kCAAmC,CAAC;AAClE,eAAO,MAAM,8BAA8B,cAAc,CAAC;AAC1D,eAAO,MAAM,kCAAkC,IAAI,CAAC;AACpD,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAEhD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,uBAAuB,EAAE,eAAe,EACxC,kBAAkB,EAAE,eAAe;;;EA2CpC;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,sBAAsB,EAAE,cAAc,EACtC,iBAAiB,EAAE,cAAc,GAChC,OAAO,CAmDT"} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/types/utils/simulation-api.d.ts b/node_modules/@metamask/transaction-controller/dist/types/utils/simulation-api.d.ts -index ce65648..0199c69 100644 ---- a/node_modules/@metamask/transaction-controller/dist/types/utils/simulation-api.d.ts -+++ b/node_modules/@metamask/transaction-controller/dist/types/utils/simulation-api.d.ts -@@ -23,6 +23,9 @@ export type SimulationRequest = { - * State changes impact subsequent transactions in the list. - */ - transactions: SimulationRequestTransaction[]; -+ blockOverrides?: { -+ time?: Hex; -+ }; - /** - * Overrides to the state of the blockchain, keyed by smart contract address. - */ -diff --git a/node_modules/@metamask/transaction-controller/dist/types/utils/simulation-api.d.ts.map b/node_modules/@metamask/transaction-controller/dist/types/utils/simulation-api.d.ts.map -index f6d63ee..ecdd17c 100644 ---- a/node_modules/@metamask/transaction-controller/dist/types/utils/simulation-api.d.ts.map -+++ b/node_modules/@metamask/transaction-controller/dist/types/utils/simulation-api.d.ts.map -@@ -1 +1 @@ --{"version":3,"file":"simulation-api.d.ts","sourceRoot":"","sources":["../../../src/utils/simulation-api.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAW/D,mEAAmE;AACnE,MAAM,MAAM,4BAA4B,GAAG;IACzC,yCAAyC;IACzC,IAAI,CAAC,EAAE,GAAG,CAAC;IAEX,iCAAiC;IACjC,IAAI,EAAE,GAAG,CAAC;IAEV,qCAAqC;IACrC,GAAG,CAAC,EAAE,GAAG,CAAC;IAEV,+CAA+C;IAC/C,YAAY,CAAC,EAAE,GAAG,CAAC;IAEnB,wDAAwD;IACxD,oBAAoB,CAAC,EAAE,GAAG,CAAC;IAE3B,oCAAoC;IACpC,EAAE,CAAC,EAAE,GAAG,CAAC;IAET,0CAA0C;IAC1C,KAAK,CAAC,EAAE,GAAG,CAAC;CACb,CAAC;AAEF,8DAA8D;AAC9D,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;OAGG;IACH,YAAY,EAAE,4BAA4B,EAAE,CAAC;IAE7C;;OAEG;IACH,SAAS,CAAC,EAAE;QACV,CAAC,OAAO,EAAE,GAAG,GAAG;YACd,mEAAmE;YACnE,SAAS,EAAE;gBACT,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC;aAClB,CAAC;SACH,CAAC;KACH,CAAC;IAEF;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,wDAAwD;AACxD,MAAM,MAAM,qBAAqB,GAAG;IAClC,qDAAqD;IACrD,OAAO,EAAE,GAAG,CAAC;IAEb,iDAAiD;IACjD,IAAI,EAAE,GAAG,CAAC;IAEV,uCAAuC;IACvC,MAAM,EAAE,GAAG,EAAE,CAAC;CACf,CAAC;AAEF,oDAAoD;AACpD,MAAM,MAAM,2BAA2B,GAAG;IACxC,oBAAoB;IACpB,KAAK,EAAE,2BAA2B,EAAE,CAAC;IAErC,0CAA0C;IAC1C,IAAI,EAAE,qBAAqB,EAAE,CAAC;CAC/B,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,2BAA2B,GAAG;IACxC,CAAC,OAAO,EAAE,GAAG,GAAG;QACd,qCAAqC;QACrC,OAAO,CAAC,EAAE,GAAG,CAAC;QAEd,4BAA4B;QAC5B,KAAK,CAAC,EAAE,GAAG,CAAC;QAEZ,+BAA+B;QAC/B,OAAO,CAAC,EAAE;YACR,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC;SAClB,CAAC;KACH,CAAC;CACH,CAAC;AAEF,iEAAiE;AACjE,MAAM,MAAM,6BAA6B,GAAG;IAC1C,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,iFAAiF;IACjF,MAAM,EAAE,GAAG,CAAC;IAEZ,8DAA8D;IAC9D,SAAS,CAAC,EAAE,2BAA2B,CAAC;IAExC,uCAAuC;IACvC,SAAS,CAAC,EAAE;QACV,uDAAuD;QACvD,GAAG,CAAC,EAAE,2BAA2B,CAAC;QAElC,sDAAsD;QACtD,IAAI,CAAC,EAAE,2BAA2B,CAAC;KACpC,CAAC;CACH,CAAC;AAEF,wCAAwC;AACxC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,2DAA2D;IAC3D,YAAY,EAAE,6BAA6B,EAAE,CAAC;CAC/C,CAAC;AAkBF;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,kBAAkB,CAAC,CA4B7B"} -\ No newline at end of file -+{"version":3,"file":"simulation-api.d.ts","sourceRoot":"","sources":["../../../src/utils/simulation-api.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAW/D,mEAAmE;AACnE,MAAM,MAAM,4BAA4B,GAAG;IACzC,yCAAyC;IACzC,IAAI,CAAC,EAAE,GAAG,CAAC;IAEX,iCAAiC;IACjC,IAAI,EAAE,GAAG,CAAC;IAEV,qCAAqC;IACrC,GAAG,CAAC,EAAE,GAAG,CAAC;IAEV,+CAA+C;IAC/C,YAAY,CAAC,EAAE,GAAG,CAAC;IAEnB,wDAAwD;IACxD,oBAAoB,CAAC,EAAE,GAAG,CAAC;IAE3B,oCAAoC;IACpC,EAAE,CAAC,EAAE,GAAG,CAAC;IAET,0CAA0C;IAC1C,KAAK,CAAC,EAAE,GAAG,CAAC;CACb,CAAC;AAEF,8DAA8D;AAC9D,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;OAGG;IACH,YAAY,EAAE,4BAA4B,EAAE,CAAC;IAE7C,cAAc,CAAC,EAAE;QACf,IAAI,CAAC,EAAE,GAAG,CAAC;KACZ,CAAC;IAEF;;OAEG;IACH,SAAS,CAAC,EAAE;QACV,CAAC,OAAO,EAAE,GAAG,GAAG;YACd,mEAAmE;YACnE,SAAS,EAAE;gBACT,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC;aAClB,CAAC;SACH,CAAC;KACH,CAAC;IAEF;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,wDAAwD;AACxD,MAAM,MAAM,qBAAqB,GAAG;IAClC,qDAAqD;IACrD,OAAO,EAAE,GAAG,CAAC;IAEb,iDAAiD;IACjD,IAAI,EAAE,GAAG,CAAC;IAEV,uCAAuC;IACvC,MAAM,EAAE,GAAG,EAAE,CAAC;CACf,CAAC;AAEF,oDAAoD;AACpD,MAAM,MAAM,2BAA2B,GAAG;IACxC,oBAAoB;IACpB,KAAK,EAAE,2BAA2B,EAAE,CAAC;IAErC,0CAA0C;IAC1C,IAAI,EAAE,qBAAqB,EAAE,CAAC;CAC/B,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,2BAA2B,GAAG;IACxC,CAAC,OAAO,EAAE,GAAG,GAAG;QACd,qCAAqC;QACrC,OAAO,CAAC,EAAE,GAAG,CAAC;QAEd,4BAA4B;QAC5B,KAAK,CAAC,EAAE,GAAG,CAAC;QAEZ,+BAA+B;QAC/B,OAAO,CAAC,EAAE;YACR,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC;SAClB,CAAC;KACH,CAAC;CACH,CAAC;AAEF,iEAAiE;AACjE,MAAM,MAAM,6BAA6B,GAAG;IAC1C,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,iFAAiF;IACjF,MAAM,EAAE,GAAG,CAAC;IAEZ,8DAA8D;IAC9D,SAAS,CAAC,EAAE,2BAA2B,CAAC;IAExC,uCAAuC;IACvC,SAAS,CAAC,EAAE;QACV,uDAAuD;QACvD,GAAG,CAAC,EAAE,2BAA2B,CAAC;QAElC,sDAAsD;QACtD,IAAI,CAAC,EAAE,2BAA2B,CAAC;KACpC,CAAC;CACH,CAAC;AAEF,wCAAwC;AACxC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,2DAA2D;IAC3D,YAAY,EAAE,6BAA6B,EAAE,CAAC;CAC/C,CAAC;AAkBF;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,kBAAkB,CAAC,CA4B7B"} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/types/utils/simulation.d.ts b/node_modules/@metamask/transaction-controller/dist/types/utils/simulation.d.ts -index 5d6b81a..af414b1 100644 ---- a/node_modules/@metamask/transaction-controller/dist/types/utils/simulation.d.ts -+++ b/node_modules/@metamask/transaction-controller/dist/types/utils/simulation.d.ts -@@ -13,10 +13,10 @@ export declare enum SupportedToken { - type ABI = Fragment[]; - export type GetSimulationDataRequest = { - chainId: Hex; -+ data?: Hex; - from: Hex; - to?: Hex; - value?: Hex; -- data?: Hex; - }; - type ParsedEvent = { - contractAddress: Hex; -@@ -25,6 +25,9 @@ type ParsedEvent = { - args: Record; - abi: ABI; - }; -+type GetSimulationDataOptions = { -+ blockTime?: number; -+}; - /** - * Generate simulation data for a transaction. - * @param request - The transaction to simulate. -@@ -33,9 +36,11 @@ type ParsedEvent = { - * @param request.to - The recipient of the transaction. - * @param request.value - The value of the transaction. - * @param request.data - The data of the transaction. -+ * @param options - Additional options. -+ * @param options.blockTime - An optional block time to simulate the transaction at. - * @returns The simulation data. - */ --export declare function getSimulationData(request: GetSimulationDataRequest): Promise; -+export declare function getSimulationData(request: GetSimulationDataRequest, options?: GetSimulationDataOptions): Promise; - /** - * Extract events from a simulation response. - * @param response - The simulation response. -diff --git a/node_modules/@metamask/transaction-controller/dist/types/utils/simulation.d.ts.map b/node_modules/@metamask/transaction-controller/dist/types/utils/simulation.d.ts.map -index 65388b0..93c8fdf 100644 ---- a/node_modules/@metamask/transaction-controller/dist/types/utils/simulation.d.ts.map -+++ b/node_modules/@metamask/transaction-controller/dist/types/utils/simulation.d.ts.map -@@ -1 +1 @@ --{"version":3,"file":"simulation.d.ts","sourceRoot":"","sources":["../../../src/utils/simulation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAA0B,MAAM,oBAAoB,CAAC;AAI3E,OAAO,EAAsB,KAAK,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAY/D,OAAO,KAAK,EAEV,cAAc,EAGf,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAEnD,OAAO,KAAK,EAGV,kBAAkB,EAGnB,MAAM,kBAAkB,CAAC;AAE1B,oBAAY,cAAc;IACxB,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,OAAO,YAAY;IAGnB,aAAa,iBAAiB;IAG9B,aAAa,iBAAiB;CAC/B;AAED,KAAK,GAAG,GAAG,QAAQ,EAAE,CAAC;AAEtB,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,GAAG,CAAC;IACb,IAAI,EAAE,GAAG,CAAC;IACV,EAAE,CAAC,EAAE,GAAG,CAAC;IACT,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,eAAe,EAAE,GAAG,CAAC;IACrB,aAAa,EAAE,uBAAuB,CAAC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC;IAClC,GAAG,EAAE,GAAG,CAAC;CACV,CAAC;AAuCF;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,cAAc,CAAC,CA6DzB;AA8BD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,kBAAkB,GAAG,WAAW,EAAE,CAuCrE"} -\ No newline at end of file -+{"version":3,"file":"simulation.d.ts","sourceRoot":"","sources":["../../../src/utils/simulation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAA0B,MAAM,oBAAoB,CAAC;AAI3E,OAAO,EAAsB,KAAK,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAY/D,OAAO,KAAK,EAEV,cAAc,EAGf,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAEnD,OAAO,KAAK,EAGV,kBAAkB,EAGnB,MAAM,kBAAkB,CAAC;AAE1B,oBAAY,cAAc;IACxB,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,OAAO,YAAY;IAGnB,aAAa,iBAAiB;IAG9B,aAAa,iBAAiB;CAC/B;AAED,KAAK,GAAG,GAAG,QAAQ,EAAE,CAAC;AAEtB,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,GAAG,CAAC;IACb,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,IAAI,EAAE,GAAG,CAAC;IACV,EAAE,CAAC,EAAE,GAAG,CAAC;IACT,KAAK,CAAC,EAAE,GAAG,CAAC;CACb,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,eAAe,EAAE,GAAG,CAAC;IACrB,aAAa,EAAE,uBAAuB,CAAC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC;IAClC,GAAG,EAAE,GAAG,CAAC;CACV,CAAC;AAEF,KAAK,wBAAwB,GAAG;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAuCF;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,wBAAwB,EACjC,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,cAAc,CAAC,CAuEzB;AA8BD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,kBAAkB,GAAG,WAAW,EAAE,CAuCrE"} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/types/utils/utils.d.ts b/node_modules/@metamask/transaction-controller/dist/types/utils/utils.d.ts -index 38f2f6d..d70fe54 100644 ---- a/node_modules/@metamask/transaction-controller/dist/types/utils/utils.d.ts -+++ b/node_modules/@metamask/transaction-controller/dist/types/utils/utils.d.ts -@@ -1,3 +1,4 @@ -+import BN from 'bn.js'; - import type { GasPriceValue, FeeMarketEIP1559Values } from '../TransactionController'; - import type { TransactionParams, TransactionMeta, TransactionError } from '../types'; - export declare const ESTIMATE_GAS_ERROR = "eth_estimateGas rpc method error"; -@@ -63,4 +64,13 @@ export declare function normalizeGasFeeValues(gasFeeValues: GasPriceValue | FeeM - * @returns The hex string with an even length. - */ - export declare function padHexToEvenLength(hex: string): string; -+/** -+ * Calculate the absolute percentage change between two values. -+ * -+ * @param originalValue - The first value. -+ * @param newValue - The second value. -+ * @returns The percentage change from the first value to the second value. -+ * If the original value is zero and the new value is not, returns 100. -+ */ -+export declare function getPercentageChange(originalValue: BN, newValue: BN): number; - //# sourceMappingURL=utils.d.ts.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/types/utils/utils.d.ts.map b/node_modules/@metamask/transaction-controller/dist/types/utils/utils.d.ts.map -index a327a4c..7ee7e1a 100644 ---- a/node_modules/@metamask/transaction-controller/dist/types/utils/utils.d.ts.map -+++ b/node_modules/@metamask/transaction-controller/dist/types/utils/utils.d.ts.map -@@ -1 +1 @@ --{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/utils/utils.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,aAAa,EACb,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAElB,eAAO,MAAM,kBAAkB,qCAAqC,CAAC;AAqBrE;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,iBAAiB,qBAcrE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAOzE;AAED,eAAO,MAAM,iBAAiB,cACjB,aAAa,GAAG,sBAAsB,SAclD,CAAC;AAEF,eAAO,MAAM,wBAAwB,eACvB,aAAa,GAAG,sBAAsB,wCAGuB,CAAC;AAE5E,eAAO,MAAM,eAAe,eACd,aAAa,GAAG,sBAAsB,+BAEE,CAAC;AAEvD,eAAO,MAAM,oBAAoB,UAAW,MAAM,QAAQ,MAAM,KAAG,MACT,CAAC;AAE3D,eAAO,MAAM,6BAA6B,UACjC,MAAM,GAAG,SAAS,QACnB,MAAM,KACX,MAEF,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,UAUpE;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAC7C,eAAe,EAAE,eAAe,GAAG,SAAS,EAC5C,MAAM,EAAE,MAAM,QASf;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,KAAK,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAChD,gBAAgB,CAQlB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,aAAa,GAAG,sBAAsB,GACnD,aAAa,GAAG,sBAAsB,CAgBxC;AAiBD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,UAM7C"} -\ No newline at end of file -+{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/utils/utils.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,MAAM,OAAO,CAAC;AAEvB,OAAO,KAAK,EACV,aAAa,EACb,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAElB,eAAO,MAAM,kBAAkB,qCAAqC,CAAC;AAqBrE;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,iBAAiB,qBAcrE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAOzE;AAED,eAAO,MAAM,iBAAiB,cACjB,aAAa,GAAG,sBAAsB,SAclD,CAAC;AAEF,eAAO,MAAM,wBAAwB,eACvB,aAAa,GAAG,sBAAsB,wCAGuB,CAAC;AAE5E,eAAO,MAAM,eAAe,eACd,aAAa,GAAG,sBAAsB,+BAEE,CAAC;AAEvD,eAAO,MAAM,oBAAoB,UAAW,MAAM,QAAQ,MAAM,KAAG,MACT,CAAC;AAE3D,eAAO,MAAM,6BAA6B,UACjC,MAAM,GAAG,SAAS,QACnB,MAAM,KACX,MAEF,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,UAUpE;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAC7C,eAAe,EAAE,eAAe,GAAG,SAAS,EAC5C,MAAM,EAAE,MAAM,QASf;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,KAAK,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAChD,gBAAgB,CAQlB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,aAAa,GAAG,sBAAsB,GACnD,aAAa,GAAG,sBAAsB,CAgBxC;AAiBD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,UAM7C;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,GAAG,MAAM,CAgB3E"} -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/utils/external-transactions.js b/node_modules/@metamask/transaction-controller/dist/utils/external-transactions.js -index 9c4875a..d9b22c3 100644 ---- a/node_modules/@metamask/transaction-controller/dist/utils/external-transactions.js -+++ b/node_modules/@metamask/transaction-controller/dist/utils/external-transactions.js -@@ -1,7 +1,7 @@ - "use strict";Object.defineProperty(exports, "__esModule", {value: true}); - - var _chunk7LXE4KHVjs = require('../chunk-7LXE4KHV.js'); --require('../chunk-AYTU4HU5.js'); -+require('../chunk-M3VM35ID.js'); - require('../chunk-Z4BLTVTB.js'); - - -diff --git a/node_modules/@metamask/transaction-controller/dist/utils/external-transactions.mjs b/node_modules/@metamask/transaction-controller/dist/utils/external-transactions.mjs -index e688b01..9fa8fc1 100644 ---- a/node_modules/@metamask/transaction-controller/dist/utils/external-transactions.mjs -+++ b/node_modules/@metamask/transaction-controller/dist/utils/external-transactions.mjs -@@ -1,7 +1,7 @@ - import { - validateConfirmedExternalTransaction - } from "../chunk-FRKQ3Z2L.mjs"; --import "../chunk-6SJYXSF3.mjs"; -+import "../chunk-KPA3AQWZ.mjs"; - import "../chunk-XUI43LEZ.mjs"; - export { - validateConfirmedExternalTransaction -diff --git a/node_modules/@metamask/transaction-controller/dist/utils/gas-fees.js b/node_modules/@metamask/transaction-controller/dist/utils/gas-fees.js -index 6061d37..0e323e8 100644 ---- a/node_modules/@metamask/transaction-controller/dist/utils/gas-fees.js -+++ b/node_modules/@metamask/transaction-controller/dist/utils/gas-fees.js -@@ -1,16 +1,16 @@ - "use strict";Object.defineProperty(exports, "__esModule", {value: true}); - - --var _chunkC3WC4OJ3js = require('../chunk-C3WC4OJ3.js'); --require('../chunk-QH2H4W3N.js'); --require('../chunk-OZ6UB42C.js'); --require('../chunk-76FONEDA.js'); -+var _chunkYOLCLUTKjs = require('../chunk-YOLCLUTK.js'); -+require('../chunk-36I5CWGQ.js'); -+require('../chunk-EVJRYRCR.js'); -+require('../chunk-WCSGEGPW.js'); - require('../chunk-UGN7PBON.js'); - require('../chunk-S6VGOPUY.js'); --require('../chunk-AYTU4HU5.js'); -+require('../chunk-M3VM35ID.js'); - require('../chunk-Z4BLTVTB.js'); - - - --exports.gweiDecimalToWeiHex = _chunkC3WC4OJ3js.gweiDecimalToWeiHex; exports.updateGasFees = _chunkC3WC4OJ3js.updateGasFees; -+exports.gweiDecimalToWeiHex = _chunkYOLCLUTKjs.gweiDecimalToWeiHex; exports.updateGasFees = _chunkYOLCLUTKjs.updateGasFees; - //# sourceMappingURL=gas-fees.js.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/utils/gas-fees.mjs b/node_modules/@metamask/transaction-controller/dist/utils/gas-fees.mjs -index c98b201..a28ecda 100644 ---- a/node_modules/@metamask/transaction-controller/dist/utils/gas-fees.mjs -+++ b/node_modules/@metamask/transaction-controller/dist/utils/gas-fees.mjs -@@ -1,13 +1,13 @@ - import { - gweiDecimalToWeiHex, - updateGasFees --} from "../chunk-VXNPVIYL.mjs"; --import "../chunk-GNAL5HC2.mjs"; --import "../chunk-Q56I5ONX.mjs"; --import "../chunk-JXXTNVU4.mjs"; -+} from "../chunk-3KWZRCW5.mjs"; -+import "../chunk-UNXUIJLG.mjs"; -+import "../chunk-F7IJZOCR.mjs"; -+import "../chunk-BS5IK7HD.mjs"; - import "../chunk-O6ZZVIFH.mjs"; - import "../chunk-UQQWZT6C.mjs"; --import "../chunk-6SJYXSF3.mjs"; -+import "../chunk-KPA3AQWZ.mjs"; - import "../chunk-XUI43LEZ.mjs"; - export { - gweiDecimalToWeiHex, -diff --git a/node_modules/@metamask/transaction-controller/dist/utils/gas-flow.js b/node_modules/@metamask/transaction-controller/dist/utils/gas-flow.js -index 3532305..d45464f 100644 ---- a/node_modules/@metamask/transaction-controller/dist/utils/gas-flow.js -+++ b/node_modules/@metamask/transaction-controller/dist/utils/gas-flow.js -@@ -1,11 +1,11 @@ - "use strict";Object.defineProperty(exports, "__esModule", {value: true}); - - --var _chunk76FONEDAjs = require('../chunk-76FONEDA.js'); --require('../chunk-AYTU4HU5.js'); -+var _chunkWCSGEGPWjs = require('../chunk-WCSGEGPW.js'); -+require('../chunk-M3VM35ID.js'); - require('../chunk-Z4BLTVTB.js'); - - - --exports.getGasFeeFlow = _chunk76FONEDAjs.getGasFeeFlow; exports.mergeGasFeeEstimates = _chunk76FONEDAjs.mergeGasFeeEstimates; -+exports.getGasFeeFlow = _chunkWCSGEGPWjs.getGasFeeFlow; exports.mergeGasFeeEstimates = _chunkWCSGEGPWjs.mergeGasFeeEstimates; - //# sourceMappingURL=gas-flow.js.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/utils/gas-flow.mjs b/node_modules/@metamask/transaction-controller/dist/utils/gas-flow.mjs -index 3e3ab87..a778724 100644 ---- a/node_modules/@metamask/transaction-controller/dist/utils/gas-flow.mjs -+++ b/node_modules/@metamask/transaction-controller/dist/utils/gas-flow.mjs -@@ -1,8 +1,8 @@ - import { - getGasFeeFlow, - mergeGasFeeEstimates --} from "../chunk-JXXTNVU4.mjs"; --import "../chunk-6SJYXSF3.mjs"; -+} from "../chunk-BS5IK7HD.mjs"; -+import "../chunk-KPA3AQWZ.mjs"; - import "../chunk-XUI43LEZ.mjs"; - export { - getGasFeeFlow, -diff --git a/node_modules/@metamask/transaction-controller/dist/utils/resimulate.js b/node_modules/@metamask/transaction-controller/dist/utils/resimulate.js -new file mode 100644 -index 0000000..e2fb797 ---- /dev/null -+++ b/node_modules/@metamask/transaction-controller/dist/utils/resimulate.js -@@ -0,0 +1,21 @@ -+"use strict";Object.defineProperty(exports, "__esModule", {value: true}); -+ -+ -+ -+ -+ -+ -+var _chunkQBQLNTTJjs = require('../chunk-QBQLNTTJ.js'); -+require('../chunk-EVJRYRCR.js'); -+require('../chunk-S6VGOPUY.js'); -+require('../chunk-M3VM35ID.js'); -+require('../chunk-Z4BLTVTB.js'); -+ -+ -+ -+ -+ -+ -+ -+exports.BLOCKAID_RESULT_TYPE_MALICIOUS = _chunkQBQLNTTJjs.BLOCKAID_RESULT_TYPE_MALICIOUS; exports.BLOCK_TIME_ADDITIONAL_SECONDS = _chunkQBQLNTTJjs.BLOCK_TIME_ADDITIONAL_SECONDS; exports.RESIMULATE_PARAMS = _chunkQBQLNTTJjs.RESIMULATE_PARAMS; exports.VALUE_COMPARISON_PERCENT_THRESHOLD = _chunkQBQLNTTJjs.VALUE_COMPARISON_PERCENT_THRESHOLD; exports.hasSimulationDataChanged = _chunkQBQLNTTJjs.hasSimulationDataChanged; exports.shouldResimulate = _chunkQBQLNTTJjs.shouldResimulate; -+//# sourceMappingURL=resimulate.js.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/TransactionController.js.map b/node_modules/@metamask/transaction-controller/dist/utils/resimulate.js.map -similarity index 100% -rename from node_modules/@metamask/transaction-controller/dist/TransactionController.js.map -rename to node_modules/@metamask/transaction-controller/dist/utils/resimulate.js.map -diff --git a/node_modules/@metamask/transaction-controller/dist/utils/resimulate.mjs b/node_modules/@metamask/transaction-controller/dist/utils/resimulate.mjs -new file mode 100644 -index 0000000..d055d3e ---- /dev/null -+++ b/node_modules/@metamask/transaction-controller/dist/utils/resimulate.mjs -@@ -0,0 +1,21 @@ -+import { -+ BLOCKAID_RESULT_TYPE_MALICIOUS, -+ BLOCK_TIME_ADDITIONAL_SECONDS, -+ RESIMULATE_PARAMS, -+ VALUE_COMPARISON_PERCENT_THRESHOLD, -+ hasSimulationDataChanged, -+ shouldResimulate -+} from "../chunk-GRDPR767.mjs"; -+import "../chunk-F7IJZOCR.mjs"; -+import "../chunk-UQQWZT6C.mjs"; -+import "../chunk-KPA3AQWZ.mjs"; -+import "../chunk-XUI43LEZ.mjs"; -+export { -+ BLOCKAID_RESULT_TYPE_MALICIOUS, -+ BLOCK_TIME_ADDITIONAL_SECONDS, -+ RESIMULATE_PARAMS, -+ VALUE_COMPARISON_PERCENT_THRESHOLD, -+ hasSimulationDataChanged, -+ shouldResimulate -+}; -+//# sourceMappingURL=resimulate.mjs.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/TransactionController.mjs.map b/node_modules/@metamask/transaction-controller/dist/utils/resimulate.mjs.map -similarity index 100% -rename from node_modules/@metamask/transaction-controller/dist/TransactionController.mjs.map -rename to node_modules/@metamask/transaction-controller/dist/utils/resimulate.mjs.map -diff --git a/node_modules/@metamask/transaction-controller/dist/utils/simulation-api.js b/node_modules/@metamask/transaction-controller/dist/utils/simulation-api.js -index c4b2f32..aec13fd 100644 ---- a/node_modules/@metamask/transaction-controller/dist/utils/simulation-api.js -+++ b/node_modules/@metamask/transaction-controller/dist/utils/simulation-api.js -@@ -1,11 +1,11 @@ - "use strict";Object.defineProperty(exports, "__esModule", {value: true}); - --var _chunkKT6UAKBBjs = require('../chunk-KT6UAKBB.js'); -+var _chunkL7HIDFC5js = require('../chunk-L7HIDFC5.js'); - require('../chunk-HMOSP33F.js'); - require('../chunk-S6VGOPUY.js'); --require('../chunk-AYTU4HU5.js'); -+require('../chunk-M3VM35ID.js'); - require('../chunk-Z4BLTVTB.js'); - - --exports.simulateTransactions = _chunkKT6UAKBBjs.simulateTransactions; -+exports.simulateTransactions = _chunkL7HIDFC5js.simulateTransactions; - //# sourceMappingURL=simulation-api.js.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/utils/simulation-api.mjs b/node_modules/@metamask/transaction-controller/dist/utils/simulation-api.mjs -index fff3f37..073179c 100644 ---- a/node_modules/@metamask/transaction-controller/dist/utils/simulation-api.mjs -+++ b/node_modules/@metamask/transaction-controller/dist/utils/simulation-api.mjs -@@ -1,9 +1,9 @@ - import { - simulateTransactions --} from "../chunk-K4KOSAGM.mjs"; -+} from "../chunk-4AO3XGIE.mjs"; - import "../chunk-HQSNKCXI.mjs"; - import "../chunk-UQQWZT6C.mjs"; --import "../chunk-6SJYXSF3.mjs"; -+import "../chunk-KPA3AQWZ.mjs"; - import "../chunk-XUI43LEZ.mjs"; - export { - simulateTransactions -diff --git a/node_modules/@metamask/transaction-controller/dist/utils/simulation.js b/node_modules/@metamask/transaction-controller/dist/utils/simulation.js -index 42eb1f4..2fa1116 100644 ---- a/node_modules/@metamask/transaction-controller/dist/utils/simulation.js -+++ b/node_modules/@metamask/transaction-controller/dist/utils/simulation.js -@@ -2,16 +2,16 @@ - - - --var _chunk74W7X6BEjs = require('../chunk-74W7X6BE.js'); --require('../chunk-KT6UAKBB.js'); -+var _chunkAT7DP6HEjs = require('../chunk-AT7DP6HE.js'); -+require('../chunk-L7HIDFC5.js'); - require('../chunk-HMOSP33F.js'); - require('../chunk-UGN7PBON.js'); - require('../chunk-S6VGOPUY.js'); --require('../chunk-AYTU4HU5.js'); -+require('../chunk-M3VM35ID.js'); - require('../chunk-Z4BLTVTB.js'); - - - - --exports.SupportedToken = _chunk74W7X6BEjs.SupportedToken; exports.getEvents = _chunk74W7X6BEjs.getEvents; exports.getSimulationData = _chunk74W7X6BEjs.getSimulationData; -+exports.SupportedToken = _chunkAT7DP6HEjs.SupportedToken; exports.getEvents = _chunkAT7DP6HEjs.getEvents; exports.getSimulationData = _chunkAT7DP6HEjs.getSimulationData; - //# sourceMappingURL=simulation.js.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/utils/simulation.mjs b/node_modules/@metamask/transaction-controller/dist/utils/simulation.mjs -index c6d4a22..39ada85 100644 ---- a/node_modules/@metamask/transaction-controller/dist/utils/simulation.mjs -+++ b/node_modules/@metamask/transaction-controller/dist/utils/simulation.mjs -@@ -2,12 +2,12 @@ import { - SupportedToken, - getEvents, - getSimulationData --} from "../chunk-EVL6KODQ.mjs"; --import "../chunk-K4KOSAGM.mjs"; -+} from "../chunk-D7MMS3XU.mjs"; -+import "../chunk-4AO3XGIE.mjs"; - import "../chunk-HQSNKCXI.mjs"; - import "../chunk-O6ZZVIFH.mjs"; - import "../chunk-UQQWZT6C.mjs"; --import "../chunk-6SJYXSF3.mjs"; -+import "../chunk-KPA3AQWZ.mjs"; - import "../chunk-XUI43LEZ.mjs"; - export { - SupportedToken, -diff --git a/node_modules/@metamask/transaction-controller/dist/utils/swaps.js b/node_modules/@metamask/transaction-controller/dist/utils/swaps.js -index 150a63e..c5b5c32 100644 ---- a/node_modules/@metamask/transaction-controller/dist/utils/swaps.js -+++ b/node_modules/@metamask/transaction-controller/dist/utils/swaps.js -@@ -6,11 +6,11 @@ - - - --var _chunkQH2H4W3Njs = require('../chunk-QH2H4W3N.js'); --require('../chunk-OZ6UB42C.js'); -+var _chunk36I5CWGQjs = require('../chunk-36I5CWGQ.js'); -+require('../chunk-EVJRYRCR.js'); - require('../chunk-UGN7PBON.js'); - require('../chunk-S6VGOPUY.js'); --require('../chunk-AYTU4HU5.js'); -+require('../chunk-M3VM35ID.js'); - require('../chunk-Z4BLTVTB.js'); - - -@@ -20,5 +20,5 @@ require('../chunk-Z4BLTVTB.js'); - - - --exports.DEFAULT_TOKEN_ADDRESS = _chunkQH2H4W3Njs.DEFAULT_TOKEN_ADDRESS; exports.SWAPS_CHAINID_DEFAULT_TOKEN_MAP = _chunkQH2H4W3Njs.SWAPS_CHAINID_DEFAULT_TOKEN_MAP; exports.SWAP_TRANSACTION_TYPES = _chunkQH2H4W3Njs.SWAP_TRANSACTION_TYPES; exports.UPDATE_POST_TX_BALANCE_ATTEMPTS = _chunkQH2H4W3Njs.UPDATE_POST_TX_BALANCE_ATTEMPTS; exports.UPDATE_POST_TX_BALANCE_TIMEOUT = _chunkQH2H4W3Njs.UPDATE_POST_TX_BALANCE_TIMEOUT; exports.updatePostTransactionBalance = _chunkQH2H4W3Njs.updatePostTransactionBalance; exports.updateSwapsTransaction = _chunkQH2H4W3Njs.updateSwapsTransaction; -+exports.DEFAULT_TOKEN_ADDRESS = _chunk36I5CWGQjs.DEFAULT_TOKEN_ADDRESS; exports.SWAPS_CHAINID_DEFAULT_TOKEN_MAP = _chunk36I5CWGQjs.SWAPS_CHAINID_DEFAULT_TOKEN_MAP; exports.SWAP_TRANSACTION_TYPES = _chunk36I5CWGQjs.SWAP_TRANSACTION_TYPES; exports.UPDATE_POST_TX_BALANCE_ATTEMPTS = _chunk36I5CWGQjs.UPDATE_POST_TX_BALANCE_ATTEMPTS; exports.UPDATE_POST_TX_BALANCE_TIMEOUT = _chunk36I5CWGQjs.UPDATE_POST_TX_BALANCE_TIMEOUT; exports.updatePostTransactionBalance = _chunk36I5CWGQjs.updatePostTransactionBalance; exports.updateSwapsTransaction = _chunk36I5CWGQjs.updateSwapsTransaction; - //# sourceMappingURL=swaps.js.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/utils/swaps.mjs b/node_modules/@metamask/transaction-controller/dist/utils/swaps.mjs -index 528aed6..eea5246 100644 ---- a/node_modules/@metamask/transaction-controller/dist/utils/swaps.mjs -+++ b/node_modules/@metamask/transaction-controller/dist/utils/swaps.mjs -@@ -6,11 +6,11 @@ import { - UPDATE_POST_TX_BALANCE_TIMEOUT, - updatePostTransactionBalance, - updateSwapsTransaction --} from "../chunk-GNAL5HC2.mjs"; --import "../chunk-Q56I5ONX.mjs"; -+} from "../chunk-UNXUIJLG.mjs"; -+import "../chunk-F7IJZOCR.mjs"; - import "../chunk-O6ZZVIFH.mjs"; - import "../chunk-UQQWZT6C.mjs"; --import "../chunk-6SJYXSF3.mjs"; -+import "../chunk-KPA3AQWZ.mjs"; - import "../chunk-XUI43LEZ.mjs"; - export { - DEFAULT_TOKEN_ADDRESS, -diff --git a/node_modules/@metamask/transaction-controller/dist/utils/transaction-type.js b/node_modules/@metamask/transaction-controller/dist/utils/transaction-type.js -index f0ed984..48b5c4d 100644 ---- a/node_modules/@metamask/transaction-controller/dist/utils/transaction-type.js -+++ b/node_modules/@metamask/transaction-controller/dist/utils/transaction-type.js -@@ -2,7 +2,7 @@ - - - var _chunkSD6CWFDFjs = require('../chunk-SD6CWFDF.js'); --require('../chunk-AYTU4HU5.js'); -+require('../chunk-M3VM35ID.js'); - require('../chunk-Z4BLTVTB.js'); - - -diff --git a/node_modules/@metamask/transaction-controller/dist/utils/transaction-type.mjs b/node_modules/@metamask/transaction-controller/dist/utils/transaction-type.mjs -index 1a12d1a..19e64bb 100644 ---- a/node_modules/@metamask/transaction-controller/dist/utils/transaction-type.mjs -+++ b/node_modules/@metamask/transaction-controller/dist/utils/transaction-type.mjs -@@ -2,7 +2,7 @@ import { - ESTIMATE_GAS_ERROR, - determineTransactionType - } from "../chunk-KG4UW4K4.mjs"; --import "../chunk-6SJYXSF3.mjs"; -+import "../chunk-KPA3AQWZ.mjs"; - import "../chunk-XUI43LEZ.mjs"; - export { - ESTIMATE_GAS_ERROR, -diff --git a/node_modules/@metamask/transaction-controller/dist/utils/utils.js b/node_modules/@metamask/transaction-controller/dist/utils/utils.js -index 520598f..4137728 100644 ---- a/node_modules/@metamask/transaction-controller/dist/utils/utils.js -+++ b/node_modules/@metamask/transaction-controller/dist/utils/utils.js -@@ -12,8 +12,9 @@ - - - --var _chunkOZ6UB42Cjs = require('../chunk-OZ6UB42C.js'); --require('../chunk-AYTU4HU5.js'); -+ -+var _chunkEVJRYRCRjs = require('../chunk-EVJRYRCR.js'); -+require('../chunk-M3VM35ID.js'); - require('../chunk-Z4BLTVTB.js'); - - -@@ -29,5 +30,6 @@ require('../chunk-Z4BLTVTB.js'); - - - --exports.ESTIMATE_GAS_ERROR = _chunkOZ6UB42Cjs.ESTIMATE_GAS_ERROR; exports.getIncreasedPriceFromExisting = _chunkOZ6UB42Cjs.getIncreasedPriceFromExisting; exports.getIncreasedPriceHex = _chunkOZ6UB42Cjs.getIncreasedPriceHex; exports.isEIP1559Transaction = _chunkOZ6UB42Cjs.isEIP1559Transaction; exports.isFeeMarketEIP1559Values = _chunkOZ6UB42Cjs.isFeeMarketEIP1559Values; exports.isGasPriceValue = _chunkOZ6UB42Cjs.isGasPriceValue; exports.normalizeGasFeeValues = _chunkOZ6UB42Cjs.normalizeGasFeeValues; exports.normalizeTransactionParams = _chunkOZ6UB42Cjs.normalizeTransactionParams; exports.normalizeTxError = _chunkOZ6UB42Cjs.normalizeTxError; exports.padHexToEvenLength = _chunkOZ6UB42Cjs.padHexToEvenLength; exports.validateGasValues = _chunkOZ6UB42Cjs.validateGasValues; exports.validateIfTransactionUnapproved = _chunkOZ6UB42Cjs.validateIfTransactionUnapproved; exports.validateMinimumIncrease = _chunkOZ6UB42Cjs.validateMinimumIncrease; -+ -+exports.ESTIMATE_GAS_ERROR = _chunkEVJRYRCRjs.ESTIMATE_GAS_ERROR; exports.getIncreasedPriceFromExisting = _chunkEVJRYRCRjs.getIncreasedPriceFromExisting; exports.getIncreasedPriceHex = _chunkEVJRYRCRjs.getIncreasedPriceHex; exports.getPercentageChange = _chunkEVJRYRCRjs.getPercentageChange; exports.isEIP1559Transaction = _chunkEVJRYRCRjs.isEIP1559Transaction; exports.isFeeMarketEIP1559Values = _chunkEVJRYRCRjs.isFeeMarketEIP1559Values; exports.isGasPriceValue = _chunkEVJRYRCRjs.isGasPriceValue; exports.normalizeGasFeeValues = _chunkEVJRYRCRjs.normalizeGasFeeValues; exports.normalizeTransactionParams = _chunkEVJRYRCRjs.normalizeTransactionParams; exports.normalizeTxError = _chunkEVJRYRCRjs.normalizeTxError; exports.padHexToEvenLength = _chunkEVJRYRCRjs.padHexToEvenLength; exports.validateGasValues = _chunkEVJRYRCRjs.validateGasValues; exports.validateIfTransactionUnapproved = _chunkEVJRYRCRjs.validateIfTransactionUnapproved; exports.validateMinimumIncrease = _chunkEVJRYRCRjs.validateMinimumIncrease; - //# sourceMappingURL=utils.js.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/utils/utils.mjs b/node_modules/@metamask/transaction-controller/dist/utils/utils.mjs -index 5ca1460..a916ea1 100644 ---- a/node_modules/@metamask/transaction-controller/dist/utils/utils.mjs -+++ b/node_modules/@metamask/transaction-controller/dist/utils/utils.mjs -@@ -2,6 +2,7 @@ import { - ESTIMATE_GAS_ERROR, - getIncreasedPriceFromExisting, - getIncreasedPriceHex, -+ getPercentageChange, - isEIP1559Transaction, - isFeeMarketEIP1559Values, - isGasPriceValue, -@@ -12,13 +13,14 @@ import { - validateGasValues, - validateIfTransactionUnapproved, - validateMinimumIncrease --} from "../chunk-Q56I5ONX.mjs"; --import "../chunk-6SJYXSF3.mjs"; -+} from "../chunk-F7IJZOCR.mjs"; -+import "../chunk-KPA3AQWZ.mjs"; - import "../chunk-XUI43LEZ.mjs"; - export { - ESTIMATE_GAS_ERROR, - getIncreasedPriceFromExisting, - getIncreasedPriceHex, -+ getPercentageChange, - isEIP1559Transaction, - isFeeMarketEIP1559Values, - isGasPriceValue, -diff --git a/node_modules/@metamask/transaction-controller/dist/utils/validation.js b/node_modules/@metamask/transaction-controller/dist/utils/validation.js -index 0f9b5a5..94f90d3 100644 ---- a/node_modules/@metamask/transaction-controller/dist/utils/validation.js -+++ b/node_modules/@metamask/transaction-controller/dist/utils/validation.js -@@ -1,12 +1,12 @@ - "use strict";Object.defineProperty(exports, "__esModule", {value: true}); - - --var _chunkRXIUMVA5js = require('../chunk-RXIUMVA5.js'); --require('../chunk-OZ6UB42C.js'); --require('../chunk-AYTU4HU5.js'); -+var _chunkMPJQFAVCjs = require('../chunk-MPJQFAVC.js'); -+require('../chunk-EVJRYRCR.js'); -+require('../chunk-M3VM35ID.js'); - require('../chunk-Z4BLTVTB.js'); - - - --exports.validateTransactionOrigin = _chunkRXIUMVA5js.validateTransactionOrigin; exports.validateTxParams = _chunkRXIUMVA5js.validateTxParams; -+exports.validateTransactionOrigin = _chunkMPJQFAVCjs.validateTransactionOrigin; exports.validateTxParams = _chunkMPJQFAVCjs.validateTxParams; - //# sourceMappingURL=validation.js.map -\ No newline at end of file -diff --git a/node_modules/@metamask/transaction-controller/dist/utils/validation.mjs b/node_modules/@metamask/transaction-controller/dist/utils/validation.mjs -index 4d098e7..de0f877 100644 ---- a/node_modules/@metamask/transaction-controller/dist/utils/validation.mjs -+++ b/node_modules/@metamask/transaction-controller/dist/utils/validation.mjs -@@ -1,9 +1,9 @@ - import { - validateTransactionOrigin, - validateTxParams --} from "../chunk-5ZEJT5SN.mjs"; --import "../chunk-Q56I5ONX.mjs"; --import "../chunk-6SJYXSF3.mjs"; -+} from "../chunk-TQS7IKY6.mjs"; -+import "../chunk-F7IJZOCR.mjs"; -+import "../chunk-KPA3AQWZ.mjs"; - import "../chunk-XUI43LEZ.mjs"; - export { - validateTransactionOrigin,