@metamask-previews/bridge-status-controller 15.0.0-preview-83a6970d → 16.0.0-preview-836a8df
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -1
- package/dist/bridge-status-controller.cjs +2 -30
- package/dist/bridge-status-controller.cjs.map +1 -1
- package/dist/bridge-status-controller.d.cts.map +1 -1
- package/dist/bridge-status-controller.d.mts.map +1 -1
- package/dist/bridge-status-controller.mjs +3 -31
- package/dist/bridge-status-controller.mjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +1 -2
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +1 -2
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/package.json +3 -5
package/CHANGELOG.md
CHANGED
@@ -7,6 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
7
7
|
|
8
8
|
## [Unreleased]
|
9
9
|
|
10
|
+
## [16.0.0]
|
11
|
+
|
12
|
+
### Changed
|
13
|
+
|
14
|
+
- **BREAKING:** Bump `@metamask/bridge-controller` peer dependency to `^19.0.0` ([#5717](https://github.com/MetaMask/core/pull/5717))
|
15
|
+
- Remove `@metamask/assets-controllers` peer dependency ([#5716](https://github.com/MetaMask/core/pull/5716))
|
16
|
+
|
17
|
+
### Fixed
|
18
|
+
|
19
|
+
- Fixes transaction polling failures caused by adding tokens with the incorrect account address to the TokensControler ([#5716](https://github.com/MetaMask/core/pull/5716))
|
20
|
+
|
10
21
|
## [15.0.0]
|
11
22
|
|
12
23
|
### Changed
|
@@ -161,7 +172,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
161
172
|
|
162
173
|
- Initial release ([#5317](https://github.com/MetaMask/core/pull/5317))
|
163
174
|
|
164
|
-
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/bridge-status-controller@
|
175
|
+
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/bridge-status-controller@16.0.0...HEAD
|
176
|
+
[16.0.0]: https://github.com/MetaMask/core/compare/@metamask/bridge-status-controller@15.0.0...@metamask/bridge-status-controller@16.0.0
|
165
177
|
[15.0.0]: https://github.com/MetaMask/core/compare/@metamask/bridge-status-controller@14.0.0...@metamask/bridge-status-controller@15.0.0
|
166
178
|
[14.0.0]: https://github.com/MetaMask/core/compare/@metamask/bridge-status-controller@13.1.0...@metamask/bridge-status-controller@14.0.0
|
167
179
|
[13.1.0]: https://github.com/MetaMask/core/compare/@metamask/bridge-status-controller@13.0.0...@metamask/bridge-status-controller@13.1.0
|
@@ -10,7 +10,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
10
10
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
11
11
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
12
12
|
};
|
13
|
-
var _BridgeStatusController_instances, _BridgeStatusController_pollingTokensByTxMetaId, _BridgeStatusController_clientId, _BridgeStatusController_fetchFn, _BridgeStatusController_config, _BridgeStatusController_addTransactionFn, _BridgeStatusController_estimateGasFeeFn, _BridgeStatusController_addUserOperationFromTransactionFn, _BridgeStatusController_restartPollingForIncompleteHistoryItems, _BridgeStatusController_getMultichainSelectedAccount, _BridgeStatusController_getMultichainSelectedAccountAddress, _BridgeStatusController_fetchBridgeTxStatus, _BridgeStatusController_getSrcTxHash, _BridgeStatusController_updateSrcTxHash, _BridgeStatusController_wipeBridgeStatusByChainId, _BridgeStatusController_handleSolanaTx, _BridgeStatusController_waitForHashAndReturnFinalTxMeta, _BridgeStatusController_handleApprovalTx, _BridgeStatusController_handleEvmSmartTransaction, _BridgeStatusController_handleEvmTransaction,
|
13
|
+
var _BridgeStatusController_instances, _BridgeStatusController_pollingTokensByTxMetaId, _BridgeStatusController_clientId, _BridgeStatusController_fetchFn, _BridgeStatusController_config, _BridgeStatusController_addTransactionFn, _BridgeStatusController_estimateGasFeeFn, _BridgeStatusController_addUserOperationFromTransactionFn, _BridgeStatusController_restartPollingForIncompleteHistoryItems, _BridgeStatusController_getMultichainSelectedAccount, _BridgeStatusController_getMultichainSelectedAccountAddress, _BridgeStatusController_fetchBridgeTxStatus, _BridgeStatusController_getSrcTxHash, _BridgeStatusController_updateSrcTxHash, _BridgeStatusController_wipeBridgeStatusByChainId, _BridgeStatusController_handleSolanaTx, _BridgeStatusController_waitForHashAndReturnFinalTxMeta, _BridgeStatusController_handleApprovalTx, _BridgeStatusController_handleEvmSmartTransaction, _BridgeStatusController_handleEvmTransaction, _BridgeStatusController_handleUSDTAllowanceReset, _BridgeStatusController_calculateGasFees, _BridgeStatusController_trackUnifiedSwapBridgeEvent;
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
15
15
|
exports.BridgeStatusController = void 0;
|
16
16
|
const bridge_controller_1 = require("@metamask/bridge-controller");
|
@@ -349,36 +349,11 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
|
|
349
349
|
if (shouldWaitForHash) {
|
350
350
|
return await __classPrivateFieldGet(this, _BridgeStatusController_waitForHashAndReturnFinalTxMeta, "f").call(this, result);
|
351
351
|
}
|
352
|
-
// TODO why is this needed?
|
353
|
-
// Note that updateTransaction doesn't actually error if you add fields that don't conform the to the txMeta type
|
354
|
-
// they will be there at runtime, but you just don't get any type safety checks on them
|
355
|
-
// const fieldsToAddToTxMeta = getTxMetaFields(quoteResponse, approvalTxId);
|
356
|
-
// dispatch(updateTransaction(completeTxMeta);
|
357
352
|
return {
|
358
353
|
...(0, transaction_1.getTxMetaFields)(quoteResponse, approvalTxId),
|
359
354
|
...transactionMeta,
|
360
355
|
};
|
361
356
|
});
|
362
|
-
// Only adds tokens if the source or dest chain is an EVM chain bc non-evm tokens
|
363
|
-
// are detected by the multichain asset controllers
|
364
|
-
_BridgeStatusController_addTokens.set(this, (asset) => {
|
365
|
-
if ((0, bridge_controller_1.isNativeAddress)(asset.address) || (0, bridge_controller_1.isSolanaChainId)(asset.chainId)) {
|
366
|
-
return;
|
367
|
-
}
|
368
|
-
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
369
|
-
this.messagingSystem.call('TokensController:addDetectedTokens', [
|
370
|
-
{
|
371
|
-
address: asset.address,
|
372
|
-
decimals: asset.decimals,
|
373
|
-
image: asset.iconUrl,
|
374
|
-
name: asset.name,
|
375
|
-
symbol: asset.symbol,
|
376
|
-
},
|
377
|
-
], {
|
378
|
-
chainId: (0, bridge_controller_1.formatChainIdToHex)(asset.chainId),
|
379
|
-
selectedAddress: __classPrivateFieldGet(this, _BridgeStatusController_instances, "m", _BridgeStatusController_getMultichainSelectedAccountAddress).call(this),
|
380
|
-
});
|
381
|
-
});
|
382
357
|
_BridgeStatusController_handleUSDTAllowanceReset.set(this, async (quoteResponse) => {
|
383
358
|
const hexChainId = (0, bridge_controller_1.formatChainIdToHex)(quoteResponse.quote.srcChainId);
|
384
359
|
if (quoteResponse.approval &&
|
@@ -457,9 +432,6 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
|
|
457
432
|
approvalTxId,
|
458
433
|
});
|
459
434
|
__classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, bridge_controller_1.UnifiedSwapBridgeEventName.Submitted, txMeta.id);
|
460
|
-
// Add tokens to the token list
|
461
|
-
__classPrivateFieldGet(this, _BridgeStatusController_addTokens, "f").call(this, quoteResponse.quote.srcAsset);
|
462
|
-
__classPrivateFieldGet(this, _BridgeStatusController_addTokens, "f").call(this, quoteResponse.quote.destAsset);
|
463
435
|
}
|
464
436
|
catch {
|
465
437
|
// Ignore errors here, we don't want to crash the app if this fails and tx submission succeeds
|
@@ -519,7 +491,7 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
|
|
519
491
|
}
|
520
492
|
}
|
521
493
|
exports.BridgeStatusController = BridgeStatusController;
|
522
|
-
_BridgeStatusController_pollingTokensByTxMetaId = new WeakMap(), _BridgeStatusController_clientId = new WeakMap(), _BridgeStatusController_fetchFn = new WeakMap(), _BridgeStatusController_config = new WeakMap(), _BridgeStatusController_addTransactionFn = new WeakMap(), _BridgeStatusController_estimateGasFeeFn = new WeakMap(), _BridgeStatusController_addUserOperationFromTransactionFn = new WeakMap(), _BridgeStatusController_restartPollingForIncompleteHistoryItems = new WeakMap(), _BridgeStatusController_fetchBridgeTxStatus = new WeakMap(), _BridgeStatusController_getSrcTxHash = new WeakMap(), _BridgeStatusController_updateSrcTxHash = new WeakMap(), _BridgeStatusController_wipeBridgeStatusByChainId = new WeakMap(), _BridgeStatusController_handleSolanaTx = new WeakMap(), _BridgeStatusController_waitForHashAndReturnFinalTxMeta = new WeakMap(), _BridgeStatusController_handleApprovalTx = new WeakMap(), _BridgeStatusController_handleEvmSmartTransaction = new WeakMap(), _BridgeStatusController_handleEvmTransaction = new WeakMap(),
|
494
|
+
_BridgeStatusController_pollingTokensByTxMetaId = new WeakMap(), _BridgeStatusController_clientId = new WeakMap(), _BridgeStatusController_fetchFn = new WeakMap(), _BridgeStatusController_config = new WeakMap(), _BridgeStatusController_addTransactionFn = new WeakMap(), _BridgeStatusController_estimateGasFeeFn = new WeakMap(), _BridgeStatusController_addUserOperationFromTransactionFn = new WeakMap(), _BridgeStatusController_restartPollingForIncompleteHistoryItems = new WeakMap(), _BridgeStatusController_fetchBridgeTxStatus = new WeakMap(), _BridgeStatusController_getSrcTxHash = new WeakMap(), _BridgeStatusController_updateSrcTxHash = new WeakMap(), _BridgeStatusController_wipeBridgeStatusByChainId = new WeakMap(), _BridgeStatusController_handleSolanaTx = new WeakMap(), _BridgeStatusController_waitForHashAndReturnFinalTxMeta = new WeakMap(), _BridgeStatusController_handleApprovalTx = new WeakMap(), _BridgeStatusController_handleEvmSmartTransaction = new WeakMap(), _BridgeStatusController_handleEvmTransaction = new WeakMap(), _BridgeStatusController_handleUSDTAllowanceReset = new WeakMap(), _BridgeStatusController_calculateGasFees = new WeakMap(), _BridgeStatusController_trackUnifiedSwapBridgeEvent = new WeakMap(), _BridgeStatusController_instances = new WeakSet(), _BridgeStatusController_getMultichainSelectedAccount = function _BridgeStatusController_getMultichainSelectedAccount() {
|
523
495
|
return this.messagingSystem.call('AccountsController:getSelectedMultichainAccount');
|
524
496
|
}, _BridgeStatusController_getMultichainSelectedAccountAddress = function _BridgeStatusController_getMultichainSelectedAccountAddress() {
|
525
497
|
return __classPrivateFieldGet(this, _BridgeStatusController_instances, "m", _BridgeStatusController_getMultichainSelectedAccount).call(this)?.address ?? '';
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"bridge-status-controller.cjs","sourceRoot":"","sources":["../src/bridge-status-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { StateMetadata } from '@metamask/base-controller';\nimport type {\n BridgeAsset,\n QuoteMetadata,\n RequiredEventContextFromClient,\n TxData,\n QuoteResponse,\n} from '@metamask/bridge-controller';\nimport {\n formatChainIdToHex,\n getEthUsdtResetData,\n isEthUsdt,\n isNativeAddress,\n isSolanaChainId,\n StatusTypes,\n UnifiedSwapBridgeEventName,\n getActionType,\n} from '@metamask/bridge-controller';\nimport { toHex } from '@metamask/controller-utils';\nimport { EthAccountType } from '@metamask/keyring-api';\nimport { StaticIntervalPollingController } from '@metamask/polling-controller';\nimport type {\n TransactionController,\n TransactionParams,\n} from '@metamask/transaction-controller';\nimport {\n TransactionStatus,\n TransactionType,\n type TransactionMeta,\n} from '@metamask/transaction-controller';\nimport type { UserOperationController } from '@metamask/user-operation-controller';\nimport { numberToHex, type Hex } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport {\n BRIDGE_PROD_API_BASE_URL,\n BRIDGE_STATUS_CONTROLLER_NAME,\n DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE,\n REFRESH_INTERVAL_MS,\n} from './constants';\nimport { type BridgeStatusControllerMessenger } from './types';\nimport type {\n BridgeStatusControllerState,\n StartPollingForBridgeTxStatusArgsSerialized,\n FetchFunction,\n BridgeClientId,\n SolanaTransactionMeta,\n BridgeHistoryItem,\n} from './types';\nimport {\n fetchBridgeTxStatus,\n getStatusRequestWithSrcTxHash,\n} from './utils/bridge-status';\nimport { getTxGasEstimates } from './utils/gas';\nimport {\n getFinalizedTxProperties,\n getRequestMetadataFromHistory,\n getRequestParamFromHistory,\n getTradeDataFromHistory,\n getTxStatusesFromHistory,\n} from './utils/metrics';\nimport {\n getKeyringRequest,\n getStatusRequestParams,\n getTxMetaFields,\n handleLineaDelay,\n handleSolanaTxResponse,\n} from './utils/transaction';\nimport { generateActionId } from './utils/transaction';\n\nconst metadata: StateMetadata<BridgeStatusControllerState> = {\n // We want to persist the bridge status state so that we can show the proper data for the Activity list\n // basically match the behavior of TransactionController\n txHistory: {\n persist: true,\n anonymous: false,\n },\n};\n\n/** The input to start polling for the {@link BridgeStatusController} */\ntype BridgeStatusPollingInput = FetchBridgeTxStatusArgs;\n\ntype SrcTxMetaId = string;\nexport type FetchBridgeTxStatusArgs = {\n bridgeTxMetaId: string;\n};\nexport class BridgeStatusController extends StaticIntervalPollingController<BridgeStatusPollingInput>()<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerState,\n BridgeStatusControllerMessenger\n> {\n #pollingTokensByTxMetaId: Record<SrcTxMetaId, string> = {};\n\n readonly #clientId: BridgeClientId;\n\n readonly #fetchFn: FetchFunction;\n\n readonly #config: {\n customBridgeApiBaseUrl: string;\n };\n\n readonly #addTransactionFn: typeof TransactionController.prototype.addTransaction;\n\n readonly #estimateGasFeeFn: typeof TransactionController.prototype.estimateGasFee;\n\n readonly #addUserOperationFromTransactionFn?: typeof UserOperationController.prototype.addUserOperationFromTransaction;\n\n constructor({\n messenger,\n state,\n clientId,\n fetchFn,\n addTransactionFn,\n addUserOperationFromTransactionFn,\n estimateGasFeeFn,\n config,\n }: {\n messenger: BridgeStatusControllerMessenger;\n state?: Partial<BridgeStatusControllerState>;\n clientId: BridgeClientId;\n fetchFn: FetchFunction;\n addTransactionFn: typeof TransactionController.prototype.addTransaction;\n estimateGasFeeFn: typeof TransactionController.prototype.estimateGasFee;\n addUserOperationFromTransactionFn?: typeof UserOperationController.prototype.addUserOperationFromTransaction;\n config?: {\n customBridgeApiBaseUrl?: string;\n };\n }) {\n super({\n name: BRIDGE_STATUS_CONTROLLER_NAME,\n metadata,\n messenger,\n // Restore the persisted state\n state: {\n ...DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE,\n ...state,\n },\n });\n\n this.#clientId = clientId;\n this.#fetchFn = fetchFn;\n this.#addTransactionFn = addTransactionFn;\n this.#addUserOperationFromTransactionFn = addUserOperationFromTransactionFn;\n this.#estimateGasFeeFn = estimateGasFeeFn;\n this.#config = {\n customBridgeApiBaseUrl:\n config?.customBridgeApiBaseUrl ?? BRIDGE_PROD_API_BASE_URL,\n };\n\n // Register action handlers\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:startPollingForBridgeTxStatus`,\n this.startPollingForBridgeTxStatus.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:wipeBridgeStatus`,\n this.wipeBridgeStatus.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:resetState`,\n this.resetState.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:submitTx`,\n this.submitTx.bind(this),\n );\n\n // Set interval\n this.setIntervalLength(REFRESH_INTERVAL_MS);\n\n // If you close the extension, but keep the browser open, the polling continues\n // If you close the browser, the polling stops\n // Check for historyItems that do not have a status of complete and restart polling\n this.#restartPollingForIncompleteHistoryItems();\n }\n\n resetState = () => {\n this.update((state) => {\n state.txHistory = DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE.txHistory;\n });\n };\n\n wipeBridgeStatus = ({\n address,\n ignoreNetwork,\n }: {\n address: string;\n ignoreNetwork: boolean;\n }) => {\n // Wipe all networks for this address\n if (ignoreNetwork) {\n this.update((state) => {\n state.txHistory = DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE.txHistory;\n });\n } else {\n const { selectedNetworkClientId } = this.messagingSystem.call(\n 'NetworkController:getState',\n );\n const selectedNetworkClient = this.messagingSystem.call(\n 'NetworkController:getNetworkClientById',\n selectedNetworkClientId,\n );\n const selectedChainId = selectedNetworkClient.configuration.chainId;\n\n this.#wipeBridgeStatusByChainId(address, selectedChainId);\n }\n };\n\n readonly #restartPollingForIncompleteHistoryItems = () => {\n // Check for historyItems that do not have a status of complete and restart polling\n const { txHistory } = this.state;\n const historyItems = Object.values(txHistory);\n const incompleteHistoryItems = historyItems\n .filter(\n (historyItem) =>\n historyItem.status.status === StatusTypes.PENDING ||\n historyItem.status.status === StatusTypes.UNKNOWN,\n )\n .filter((historyItem) => {\n // Check if we are already polling this tx, if so, skip restarting polling for that\n const srcTxMetaId = historyItem.txMetaId;\n const pollingToken = this.#pollingTokensByTxMetaId[srcTxMetaId];\n return !pollingToken;\n });\n\n incompleteHistoryItems.forEach((historyItem) => {\n const bridgeTxMetaId = historyItem.txMetaId;\n\n // We manually call startPolling() here rather than go through startPollingForBridgeTxStatus()\n // because we don't want to overwrite the existing historyItem in state\n this.#pollingTokensByTxMetaId[bridgeTxMetaId] = this.startPolling({\n bridgeTxMetaId,\n });\n });\n };\n\n /**\n * Starts polling for the bridge tx status\n *\n * @param startPollingForBridgeTxStatusArgs - The args to start polling for the bridge tx status\n */\n startPollingForBridgeTxStatus = (\n startPollingForBridgeTxStatusArgs: StartPollingForBridgeTxStatusArgsSerialized,\n ) => {\n const {\n bridgeTxMeta,\n statusRequest,\n quoteResponse,\n startTime,\n slippagePercentage,\n initialDestAssetBalance,\n targetContractAddress,\n approvalTxId,\n isStxEnabled,\n } = startPollingForBridgeTxStatusArgs;\n const accountAddress = this.#getMultichainSelectedAccountAddress();\n // Write all non-status fields to state so we can reference the quote in Activity list without the Bridge API\n // We know it's in progress but not the exact status yet\n const txHistoryItem = {\n txMetaId: bridgeTxMeta.id,\n quote: quoteResponse.quote,\n startTime,\n estimatedProcessingTimeInSeconds:\n quoteResponse.estimatedProcessingTimeInSeconds,\n slippagePercentage,\n pricingData: {\n amountSent: quoteResponse.sentAmount.amount,\n amountSentInUsd: quoteResponse.sentAmount.usd ?? undefined,\n quotedGasInUsd: quoteResponse.gasFee.usd ?? undefined,\n quotedReturnInUsd: quoteResponse.toTokenAmount.usd ?? undefined,\n },\n initialDestAssetBalance,\n targetContractAddress,\n account: accountAddress,\n status: {\n // We always have a PENDING status when we start polling for a tx, don't need the Bridge API for that\n // Also we know the bare minimum fields for status at this point in time\n status: StatusTypes.PENDING,\n srcChain: {\n chainId: statusRequest.srcChainId,\n txHash: statusRequest.srcTxHash,\n },\n },\n hasApprovalTx: Boolean(quoteResponse.approval),\n approvalTxId,\n isStxEnabled: isStxEnabled ?? false,\n };\n this.update((state) => {\n // Use the txMeta.id as the key so we can reference the txMeta in TransactionController\n state.txHistory[bridgeTxMeta.id] = txHistoryItem;\n });\n\n this.#pollingTokensByTxMetaId[bridgeTxMeta.id] = this.startPolling({\n bridgeTxMetaId: bridgeTxMeta.id,\n });\n };\n\n // This will be called after you call this.startPolling()\n // The args passed in are the args you passed in to startPolling()\n _executePoll = async (pollingInput: BridgeStatusPollingInput) => {\n await this.#fetchBridgeTxStatus(pollingInput);\n };\n\n #getMultichainSelectedAccount() {\n return this.messagingSystem.call(\n 'AccountsController:getSelectedMultichainAccount',\n );\n }\n\n #getMultichainSelectedAccountAddress() {\n return this.#getMultichainSelectedAccount()?.address ?? '';\n }\n\n readonly #fetchBridgeTxStatus = async ({\n bridgeTxMetaId,\n }: FetchBridgeTxStatusArgs) => {\n const { txHistory } = this.state;\n\n try {\n // We try here because we receive 500 errors from Bridge API if we try to fetch immediately after submitting the source tx\n // Oddly mostly happens on Optimism, never on Arbitrum. By the 2nd fetch, the Bridge API responds properly.\n // Also srcTxHash may not be available immediately for STX, so we don't want to fetch in those cases\n const historyItem = txHistory[bridgeTxMetaId];\n const srcTxHash = this.#getSrcTxHash(bridgeTxMetaId);\n if (!srcTxHash) {\n return;\n }\n\n this.#updateSrcTxHash(bridgeTxMetaId, srcTxHash);\n\n const statusRequest = getStatusRequestWithSrcTxHash(\n historyItem.quote,\n srcTxHash,\n );\n const status = await fetchBridgeTxStatus(\n statusRequest,\n this.#clientId,\n this.#fetchFn,\n this.#config.customBridgeApiBaseUrl,\n );\n const newBridgeHistoryItem = {\n ...historyItem,\n status,\n completionTime:\n status.status === StatusTypes.COMPLETE ||\n status.status === StatusTypes.FAILED\n ? Date.now()\n : undefined, // TODO make this more accurate by looking up dest txHash block time\n };\n\n // No need to purge these on network change or account change, TransactionController does not purge either.\n // TODO In theory we can skip checking status if it's not the current account/network\n // we need to keep track of the account that this is associated with as well so that we don't show it in Activity list for other accounts\n // First stab at this will not stop polling when you are on a different account\n this.update((state) => {\n state.txHistory[bridgeTxMetaId] = newBridgeHistoryItem;\n });\n\n const pollingToken = this.#pollingTokensByTxMetaId[bridgeTxMetaId];\n\n if (\n (status.status === StatusTypes.COMPLETE ||\n status.status === StatusTypes.FAILED) &&\n pollingToken\n ) {\n this.stopPollingByPollingToken(pollingToken);\n\n if (status.status === StatusTypes.COMPLETE) {\n this.messagingSystem.publish(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:bridgeTransactionComplete`,\n { bridgeHistoryItem: newBridgeHistoryItem },\n );\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Completed,\n bridgeTxMetaId,\n );\n }\n if (status.status === StatusTypes.FAILED) {\n this.messagingSystem.publish(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:bridgeTransactionFailed`,\n { bridgeHistoryItem: newBridgeHistoryItem },\n );\n\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Failed,\n bridgeTxMetaId,\n );\n }\n }\n } catch (e) {\n console.log('Failed to fetch bridge tx status', e);\n }\n };\n\n readonly #getSrcTxHash = (bridgeTxMetaId: string): string | undefined => {\n const { txHistory } = this.state;\n // Prefer the srcTxHash from bridgeStatusState so we don't have to l ook up in TransactionController\n // But it is possible to have bridgeHistoryItem in state without the srcTxHash yet when it is an STX\n const srcTxHash = txHistory[bridgeTxMetaId].status.srcChain.txHash;\n\n if (srcTxHash) {\n return srcTxHash;\n }\n\n // Look up in TransactionController if txMeta has been updated with the srcTxHash\n const txControllerState = this.messagingSystem.call(\n 'TransactionController:getState',\n );\n const txMeta = txControllerState.transactions.find(\n (tx: TransactionMeta) => tx.id === bridgeTxMetaId,\n );\n return txMeta?.hash;\n };\n\n readonly #updateSrcTxHash = (bridgeTxMetaId: string, srcTxHash: string) => {\n const { txHistory } = this.state;\n if (txHistory[bridgeTxMetaId].status.srcChain.txHash) {\n return;\n }\n\n this.update((state) => {\n state.txHistory[bridgeTxMetaId].status.srcChain.txHash = srcTxHash;\n });\n };\n\n // Wipes the bridge status for the given address and chainId\n // Will match only source chainId to the selectedChainId\n readonly #wipeBridgeStatusByChainId = (\n address: string,\n selectedChainId: Hex,\n ) => {\n const sourceTxMetaIdsToDelete = Object.keys(this.state.txHistory).filter(\n (txMetaId) => {\n const bridgeHistoryItem = this.state.txHistory[txMetaId];\n\n const hexSourceChainId = numberToHex(\n bridgeHistoryItem.quote.srcChainId,\n );\n\n return (\n bridgeHistoryItem.account === address &&\n hexSourceChainId === selectedChainId\n );\n },\n );\n\n sourceTxMetaIdsToDelete.forEach((sourceTxMetaId) => {\n const pollingToken = this.#pollingTokensByTxMetaId[sourceTxMetaId];\n\n if (pollingToken) {\n this.stopPollingByPollingToken(\n this.#pollingTokensByTxMetaId[sourceTxMetaId],\n );\n }\n });\n\n this.update((state) => {\n state.txHistory = sourceTxMetaIdsToDelete.reduce(\n (acc, sourceTxMetaId) => {\n delete acc[sourceTxMetaId];\n return acc;\n },\n state.txHistory,\n );\n });\n };\n\n /**\n * ******************************************************\n * TX SUBMISSION HANDLING\n *******************************************************\n */\n\n /**\n * Submits the transaction to the snap using the keyring rpc method\n * This adds an approval tx to the ApprovalsController in the background\n * The client needs to handle the approval tx by redirecting to the confirmation page with the approvalTxId in the URL\n *\n * @param quoteResponse - The quote response\n * @param quoteResponse.quote - The quote\n * @returns The transaction meta\n */\n readonly #handleSolanaTx = async (\n quoteResponse: QuoteResponse<string> & QuoteMetadata,\n ) => {\n const selectedAccount = this.#getMultichainSelectedAccount();\n if (!selectedAccount) {\n throw new Error(\n 'Failed to submit cross-chain swap transaction: undefined multichain account',\n );\n }\n if (!selectedAccount?.metadata?.snap?.id) {\n throw new Error(\n 'Failed to submit cross-chain swap transaction: undefined snap id',\n );\n }\n const keyringRequest = getKeyringRequest(quoteResponse, selectedAccount);\n const keyringResponse = (await this.messagingSystem.call(\n 'SnapController:handleRequest',\n keyringRequest,\n )) as string | { result: Record<string, string> };\n\n // The extension client actually redirects before it can do anytyhing with this meta\n const txMeta = handleSolanaTxResponse(\n keyringResponse,\n quoteResponse,\n selectedAccount,\n );\n\n // TODO remove this eventually, just returning it now to match extension behavior\n // OR if the snap can propagate the snapRequestId or keyringReqId to the ApprovalsController, this can return the approvalTxId instead and clients won't need to subscribe to the ApprovalsController state to redirect\n return txMeta;\n };\n\n readonly #waitForHashAndReturnFinalTxMeta = async (\n hashPromise?:\n | Awaited<ReturnType<TransactionController['addTransaction']>>['result']\n | Awaited<\n ReturnType<UserOperationController['addUserOperationFromTransaction']>\n >['hash'],\n ): Promise<TransactionMeta | undefined> => {\n const transactionHash = await hashPromise;\n const finalTransactionMeta: TransactionMeta | undefined =\n this.messagingSystem\n .call('TransactionController:getState')\n .transactions.find(\n (tx: TransactionMeta) => tx.hash === transactionHash,\n );\n return finalTransactionMeta;\n };\n\n readonly #handleApprovalTx = async (\n quoteResponse: QuoteResponse<string | TxData> & QuoteMetadata,\n ): Promise<TransactionMeta | undefined> => {\n if (quoteResponse.approval) {\n await this.#handleUSDTAllowanceReset(quoteResponse);\n const approvalTxMeta = await this.#handleEvmTransaction(\n TransactionType.bridgeApproval,\n quoteResponse.approval,\n quoteResponse,\n );\n if (!approvalTxMeta) {\n throw new Error(\n 'Failed to submit bridge tx: approval txMeta is undefined',\n );\n }\n\n await handleLineaDelay(quoteResponse);\n return approvalTxMeta;\n }\n return undefined;\n };\n\n readonly #handleEvmSmartTransaction = async (\n trade: TxData,\n quoteResponse: Omit<QuoteResponse, 'approval' | 'trade'> & QuoteMetadata,\n approvalTxId?: string,\n ) => {\n return await this.#handleEvmTransaction(\n TransactionType.bridge,\n trade,\n quoteResponse,\n approvalTxId,\n false, // Set to false to indicate we don't want to wait for hash\n );\n };\n\n /**\n * Submits an EVM transaction to the TransactionController\n *\n * @param transactionType - The type of transaction to submit\n * @param trade - The trade data to confirm\n * @param quoteResponse - The quote response\n * @param quoteResponse.quote - The quote\n * @param approvalTxId - The tx id of the approval tx\n * @param shouldWaitForHash - Whether to wait for the hash of the transaction\n * @returns The transaction meta\n */\n readonly #handleEvmTransaction = async (\n transactionType: TransactionType,\n trade: TxData,\n quoteResponse: Omit<QuoteResponse, 'approval' | 'trade'> & QuoteMetadata,\n approvalTxId?: string,\n shouldWaitForHash = true,\n ): Promise<TransactionMeta | undefined> => {\n const actionId = generateActionId().toString();\n\n const selectedAccount = this.messagingSystem.call(\n 'AccountsController:getAccountByAddress',\n trade.from,\n );\n if (!selectedAccount) {\n throw new Error(\n 'Failed to submit cross-chain swap transaction: unknown account in trade data',\n );\n }\n const hexChainId = formatChainIdToHex(trade.chainId);\n const networkClientId = this.messagingSystem.call(\n 'NetworkController:findNetworkClientIdByChainId',\n hexChainId,\n );\n\n const requestOptions = {\n actionId,\n networkClientId,\n requireApproval: false,\n type: transactionType,\n origin: 'metamask',\n };\n const transactionParams: Parameters<\n TransactionController['addTransaction']\n >[0] = {\n ...trade,\n chainId: hexChainId,\n gasLimit: trade.gasLimit?.toString(),\n gas: trade.gasLimit?.toString(),\n };\n const transactionParamsWithMaxGas: TransactionParams = {\n ...transactionParams,\n ...(await this.#calculateGasFees(\n transactionParams,\n networkClientId,\n hexChainId,\n )),\n };\n\n let result:\n | Awaited<ReturnType<TransactionController['addTransaction']>>['result']\n | Awaited<\n ReturnType<UserOperationController['addUserOperationFromTransaction']>\n >['hash']\n | undefined;\n let transactionMeta: TransactionMeta | undefined;\n\n const isSmartContractAccount =\n selectedAccount.type === EthAccountType.Erc4337;\n if (isSmartContractAccount && this.#addUserOperationFromTransactionFn) {\n const smartAccountTxResult =\n await this.#addUserOperationFromTransactionFn(\n transactionParamsWithMaxGas,\n requestOptions,\n );\n result = smartAccountTxResult.transactionHash;\n transactionMeta = {\n ...requestOptions,\n chainId: hexChainId,\n txParams: transactionParamsWithMaxGas,\n time: Date.now(),\n id: smartAccountTxResult.id,\n status: TransactionStatus.confirmed,\n };\n } else {\n const addTransactionResult = await this.#addTransactionFn(\n transactionParamsWithMaxGas,\n requestOptions,\n );\n result = addTransactionResult.result;\n transactionMeta = addTransactionResult.transactionMeta;\n }\n\n if (shouldWaitForHash) {\n return await this.#waitForHashAndReturnFinalTxMeta(result);\n }\n\n // TODO why is this needed?\n // Note that updateTransaction doesn't actually error if you add fields that don't conform the to the txMeta type\n // they will be there at runtime, but you just don't get any type safety checks on them\n // const fieldsToAddToTxMeta = getTxMetaFields(quoteResponse, approvalTxId);\n // dispatch(updateTransaction(completeTxMeta);\n\n return {\n ...getTxMetaFields(quoteResponse, approvalTxId),\n ...transactionMeta,\n };\n };\n\n // Only adds tokens if the source or dest chain is an EVM chain bc non-evm tokens\n // are detected by the multichain asset controllers\n readonly #addTokens = (asset: BridgeAsset) => {\n if (isNativeAddress(asset.address) || isSolanaChainId(asset.chainId)) {\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.messagingSystem.call(\n 'TokensController:addDetectedTokens',\n [\n {\n address: asset.address,\n decimals: asset.decimals,\n image: asset.iconUrl,\n name: asset.name,\n symbol: asset.symbol,\n },\n ],\n {\n chainId: formatChainIdToHex(asset.chainId),\n selectedAddress: this.#getMultichainSelectedAccountAddress(),\n },\n );\n };\n\n readonly #handleUSDTAllowanceReset = async (\n quoteResponse: QuoteResponse<TxData | string> & QuoteMetadata,\n ) => {\n const hexChainId = formatChainIdToHex(quoteResponse.quote.srcChainId);\n if (\n quoteResponse.approval &&\n isEthUsdt(hexChainId, quoteResponse.quote.srcAsset.address)\n ) {\n const allowance = new BigNumber(\n await this.messagingSystem.call(\n 'BridgeController:getBridgeERC20Allowance',\n quoteResponse.quote.srcAsset.address,\n hexChainId,\n ),\n );\n const shouldResetApproval =\n allowance.lt(quoteResponse.sentAmount.amount) && allowance.gt(0);\n if (shouldResetApproval) {\n await this.#handleEvmTransaction(\n TransactionType.bridgeApproval,\n { ...quoteResponse.approval, data: getEthUsdtResetData() },\n quoteResponse,\n );\n }\n }\n };\n\n readonly #calculateGasFees = async (\n transactionParams: TransactionParams,\n networkClientId: string,\n chainId: Hex,\n ) => {\n const { gasFeeEstimates } = this.messagingSystem.call(\n 'GasFeeController:getState',\n );\n const { estimates: txGasFeeEstimates } = await this.#estimateGasFeeFn({\n transactionParams,\n chainId,\n networkClientId,\n });\n const { maxFeePerGas, maxPriorityFeePerGas } = getTxGasEstimates({\n networkGasFeeEstimates: gasFeeEstimates,\n txGasFeeEstimates,\n });\n const maxGasLimit = toHex(transactionParams.gas ?? 0);\n\n return {\n maxFeePerGas,\n maxPriorityFeePerGas,\n gas: maxGasLimit,\n };\n };\n\n /**\n * Submits a cross-chain swap transaction\n *\n * @param quoteResponse - The quote response\n * @param isStxEnabledOnClient - Whether smart transactions are enabled on the client, for example the getSmartTransactionsEnabled selector value from the extension\n * @returns The transaction meta\n */\n submitTx = async (\n quoteResponse: QuoteResponse<TxData | string> & QuoteMetadata,\n isStxEnabledOnClient: boolean,\n ) => {\n let txMeta: (TransactionMeta & Partial<SolanaTransactionMeta>) | undefined;\n // Submit SOLANA tx\n if (\n isSolanaChainId(quoteResponse.quote.srcChainId) &&\n typeof quoteResponse.trade === 'string'\n ) {\n txMeta = await this.#handleSolanaTx(\n quoteResponse as QuoteResponse<string> & QuoteMetadata,\n );\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.SnapConfirmationViewed,\n txMeta.id,\n );\n }\n // Submit EVM tx\n let approvalTime: number | undefined, approvalTxId: string | undefined;\n if (\n !isSolanaChainId(quoteResponse.quote.srcChainId) &&\n typeof quoteResponse.trade !== 'string'\n ) {\n // Set approval time and id if an approval tx is needed\n const approvalTxMeta = await this.#handleApprovalTx(quoteResponse);\n approvalTime = approvalTxMeta?.time;\n approvalTxId = approvalTxMeta?.id;\n // Handle smart transactions if enabled\n if (isStxEnabledOnClient) {\n txMeta = await this.#handleEvmSmartTransaction(\n quoteResponse.trade,\n quoteResponse,\n approvalTxId,\n );\n } else {\n txMeta = await this.#handleEvmTransaction(\n TransactionType.bridge,\n quoteResponse.trade,\n quoteResponse,\n approvalTxId,\n );\n }\n }\n\n if (!txMeta) {\n throw new Error('Failed to submit bridge tx: txMeta is undefined');\n }\n\n try {\n // Start polling for bridge tx status\n this.startPollingForBridgeTxStatus({\n bridgeTxMeta: txMeta, // Only the id field is used by the BridgeStatusController\n statusRequest: {\n ...getStatusRequestParams(quoteResponse),\n srcTxHash: txMeta.hash,\n },\n quoteResponse,\n slippagePercentage: 0, // TODO include slippage provided by quote if using dynamic slippage, or slippage from quote request\n isStxEnabled: isStxEnabledOnClient,\n startTime: approvalTime ?? Date.now(),\n approvalTxId,\n });\n\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Submitted,\n txMeta.id,\n );\n\n // Add tokens to the token list\n this.#addTokens(quoteResponse.quote.srcAsset);\n this.#addTokens(quoteResponse.quote.destAsset);\n } catch {\n // Ignore errors here, we don't want to crash the app if this fails and tx submission succeeds\n }\n return txMeta;\n };\n\n /**\n * Tracks post-submission events for a cross-chain swap based on the history item\n *\n * @param eventName - The name of the event to track\n * @param txMetaId - The txMetaId of the history item to track the event for\n */\n readonly #trackUnifiedSwapBridgeEvent = <\n T extends\n | typeof UnifiedSwapBridgeEventName.Submitted\n | typeof UnifiedSwapBridgeEventName.Failed\n | typeof UnifiedSwapBridgeEventName.SnapConfirmationViewed\n | typeof UnifiedSwapBridgeEventName.Completed,\n >(\n eventName: T,\n txMetaId: string,\n ) => {\n const historyItem: BridgeHistoryItem | undefined =\n this.state.txHistory[txMetaId];\n if (!historyItem) {\n this.messagingSystem.call(\n 'BridgeController:trackUnifiedSwapBridgeEvent',\n eventName,\n {},\n );\n return;\n }\n\n let requiredEventProperties: Pick<RequiredEventContextFromClient, T>[T];\n const selectedAccount = this.messagingSystem.call(\n 'AccountsController:getAccountByAddress',\n historyItem.account,\n );\n\n switch (eventName) {\n case UnifiedSwapBridgeEventName.Submitted:\n case UnifiedSwapBridgeEventName.Completed:\n case UnifiedSwapBridgeEventName.Failed:\n default:\n requiredEventProperties = {\n action_type: getActionType(\n historyItem.quote.srcChainId,\n historyItem.quote.destChainId,\n ),\n ...getRequestParamFromHistory(historyItem),\n ...getRequestMetadataFromHistory(historyItem, selectedAccount),\n ...getTradeDataFromHistory(historyItem),\n ...getTxStatusesFromHistory(historyItem),\n ...getFinalizedTxProperties(historyItem),\n error_message: 'error_message',\n };\n }\n\n this.messagingSystem.call(\n 'BridgeController:trackUnifiedSwapBridgeEvent',\n eventName,\n requiredEventProperties,\n );\n };\n}\n"]}
|
1
|
+
{"version":3,"file":"bridge-status-controller.cjs","sourceRoot":"","sources":["../src/bridge-status-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { StateMetadata } from '@metamask/base-controller';\nimport type {\n QuoteMetadata,\n RequiredEventContextFromClient,\n TxData,\n QuoteResponse,\n} from '@metamask/bridge-controller';\nimport {\n formatChainIdToHex,\n getEthUsdtResetData,\n isEthUsdt,\n isSolanaChainId,\n StatusTypes,\n UnifiedSwapBridgeEventName,\n getActionType,\n} from '@metamask/bridge-controller';\nimport { toHex } from '@metamask/controller-utils';\nimport { EthAccountType } from '@metamask/keyring-api';\nimport { StaticIntervalPollingController } from '@metamask/polling-controller';\nimport type {\n TransactionController,\n TransactionParams,\n} from '@metamask/transaction-controller';\nimport {\n TransactionStatus,\n TransactionType,\n type TransactionMeta,\n} from '@metamask/transaction-controller';\nimport type { UserOperationController } from '@metamask/user-operation-controller';\nimport { numberToHex, type Hex } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport {\n BRIDGE_PROD_API_BASE_URL,\n BRIDGE_STATUS_CONTROLLER_NAME,\n DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE,\n REFRESH_INTERVAL_MS,\n} from './constants';\nimport { type BridgeStatusControllerMessenger } from './types';\nimport type {\n BridgeStatusControllerState,\n StartPollingForBridgeTxStatusArgsSerialized,\n FetchFunction,\n BridgeClientId,\n SolanaTransactionMeta,\n BridgeHistoryItem,\n} from './types';\nimport {\n fetchBridgeTxStatus,\n getStatusRequestWithSrcTxHash,\n} from './utils/bridge-status';\nimport { getTxGasEstimates } from './utils/gas';\nimport {\n getFinalizedTxProperties,\n getRequestMetadataFromHistory,\n getRequestParamFromHistory,\n getTradeDataFromHistory,\n getTxStatusesFromHistory,\n} from './utils/metrics';\nimport {\n getKeyringRequest,\n getStatusRequestParams,\n getTxMetaFields,\n handleLineaDelay,\n handleSolanaTxResponse,\n} from './utils/transaction';\nimport { generateActionId } from './utils/transaction';\n\nconst metadata: StateMetadata<BridgeStatusControllerState> = {\n // We want to persist the bridge status state so that we can show the proper data for the Activity list\n // basically match the behavior of TransactionController\n txHistory: {\n persist: true,\n anonymous: false,\n },\n};\n\n/** The input to start polling for the {@link BridgeStatusController} */\ntype BridgeStatusPollingInput = FetchBridgeTxStatusArgs;\n\ntype SrcTxMetaId = string;\nexport type FetchBridgeTxStatusArgs = {\n bridgeTxMetaId: string;\n};\nexport class BridgeStatusController extends StaticIntervalPollingController<BridgeStatusPollingInput>()<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerState,\n BridgeStatusControllerMessenger\n> {\n #pollingTokensByTxMetaId: Record<SrcTxMetaId, string> = {};\n\n readonly #clientId: BridgeClientId;\n\n readonly #fetchFn: FetchFunction;\n\n readonly #config: {\n customBridgeApiBaseUrl: string;\n };\n\n readonly #addTransactionFn: typeof TransactionController.prototype.addTransaction;\n\n readonly #estimateGasFeeFn: typeof TransactionController.prototype.estimateGasFee;\n\n readonly #addUserOperationFromTransactionFn?: typeof UserOperationController.prototype.addUserOperationFromTransaction;\n\n constructor({\n messenger,\n state,\n clientId,\n fetchFn,\n addTransactionFn,\n addUserOperationFromTransactionFn,\n estimateGasFeeFn,\n config,\n }: {\n messenger: BridgeStatusControllerMessenger;\n state?: Partial<BridgeStatusControllerState>;\n clientId: BridgeClientId;\n fetchFn: FetchFunction;\n addTransactionFn: typeof TransactionController.prototype.addTransaction;\n estimateGasFeeFn: typeof TransactionController.prototype.estimateGasFee;\n addUserOperationFromTransactionFn?: typeof UserOperationController.prototype.addUserOperationFromTransaction;\n config?: {\n customBridgeApiBaseUrl?: string;\n };\n }) {\n super({\n name: BRIDGE_STATUS_CONTROLLER_NAME,\n metadata,\n messenger,\n // Restore the persisted state\n state: {\n ...DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE,\n ...state,\n },\n });\n\n this.#clientId = clientId;\n this.#fetchFn = fetchFn;\n this.#addTransactionFn = addTransactionFn;\n this.#addUserOperationFromTransactionFn = addUserOperationFromTransactionFn;\n this.#estimateGasFeeFn = estimateGasFeeFn;\n this.#config = {\n customBridgeApiBaseUrl:\n config?.customBridgeApiBaseUrl ?? BRIDGE_PROD_API_BASE_URL,\n };\n\n // Register action handlers\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:startPollingForBridgeTxStatus`,\n this.startPollingForBridgeTxStatus.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:wipeBridgeStatus`,\n this.wipeBridgeStatus.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:resetState`,\n this.resetState.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:submitTx`,\n this.submitTx.bind(this),\n );\n\n // Set interval\n this.setIntervalLength(REFRESH_INTERVAL_MS);\n\n // If you close the extension, but keep the browser open, the polling continues\n // If you close the browser, the polling stops\n // Check for historyItems that do not have a status of complete and restart polling\n this.#restartPollingForIncompleteHistoryItems();\n }\n\n resetState = () => {\n this.update((state) => {\n state.txHistory = DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE.txHistory;\n });\n };\n\n wipeBridgeStatus = ({\n address,\n ignoreNetwork,\n }: {\n address: string;\n ignoreNetwork: boolean;\n }) => {\n // Wipe all networks for this address\n if (ignoreNetwork) {\n this.update((state) => {\n state.txHistory = DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE.txHistory;\n });\n } else {\n const { selectedNetworkClientId } = this.messagingSystem.call(\n 'NetworkController:getState',\n );\n const selectedNetworkClient = this.messagingSystem.call(\n 'NetworkController:getNetworkClientById',\n selectedNetworkClientId,\n );\n const selectedChainId = selectedNetworkClient.configuration.chainId;\n\n this.#wipeBridgeStatusByChainId(address, selectedChainId);\n }\n };\n\n readonly #restartPollingForIncompleteHistoryItems = () => {\n // Check for historyItems that do not have a status of complete and restart polling\n const { txHistory } = this.state;\n const historyItems = Object.values(txHistory);\n const incompleteHistoryItems = historyItems\n .filter(\n (historyItem) =>\n historyItem.status.status === StatusTypes.PENDING ||\n historyItem.status.status === StatusTypes.UNKNOWN,\n )\n .filter((historyItem) => {\n // Check if we are already polling this tx, if so, skip restarting polling for that\n const srcTxMetaId = historyItem.txMetaId;\n const pollingToken = this.#pollingTokensByTxMetaId[srcTxMetaId];\n return !pollingToken;\n });\n\n incompleteHistoryItems.forEach((historyItem) => {\n const bridgeTxMetaId = historyItem.txMetaId;\n\n // We manually call startPolling() here rather than go through startPollingForBridgeTxStatus()\n // because we don't want to overwrite the existing historyItem in state\n this.#pollingTokensByTxMetaId[bridgeTxMetaId] = this.startPolling({\n bridgeTxMetaId,\n });\n });\n };\n\n /**\n * Starts polling for the bridge tx status\n *\n * @param startPollingForBridgeTxStatusArgs - The args to start polling for the bridge tx status\n */\n startPollingForBridgeTxStatus = (\n startPollingForBridgeTxStatusArgs: StartPollingForBridgeTxStatusArgsSerialized,\n ) => {\n const {\n bridgeTxMeta,\n statusRequest,\n quoteResponse,\n startTime,\n slippagePercentage,\n initialDestAssetBalance,\n targetContractAddress,\n approvalTxId,\n isStxEnabled,\n } = startPollingForBridgeTxStatusArgs;\n const accountAddress = this.#getMultichainSelectedAccountAddress();\n // Write all non-status fields to state so we can reference the quote in Activity list without the Bridge API\n // We know it's in progress but not the exact status yet\n const txHistoryItem = {\n txMetaId: bridgeTxMeta.id,\n quote: quoteResponse.quote,\n startTime,\n estimatedProcessingTimeInSeconds:\n quoteResponse.estimatedProcessingTimeInSeconds,\n slippagePercentage,\n pricingData: {\n amountSent: quoteResponse.sentAmount.amount,\n amountSentInUsd: quoteResponse.sentAmount.usd ?? undefined,\n quotedGasInUsd: quoteResponse.gasFee.usd ?? undefined,\n quotedReturnInUsd: quoteResponse.toTokenAmount.usd ?? undefined,\n },\n initialDestAssetBalance,\n targetContractAddress,\n account: accountAddress,\n status: {\n // We always have a PENDING status when we start polling for a tx, don't need the Bridge API for that\n // Also we know the bare minimum fields for status at this point in time\n status: StatusTypes.PENDING,\n srcChain: {\n chainId: statusRequest.srcChainId,\n txHash: statusRequest.srcTxHash,\n },\n },\n hasApprovalTx: Boolean(quoteResponse.approval),\n approvalTxId,\n isStxEnabled: isStxEnabled ?? false,\n };\n this.update((state) => {\n // Use the txMeta.id as the key so we can reference the txMeta in TransactionController\n state.txHistory[bridgeTxMeta.id] = txHistoryItem;\n });\n\n this.#pollingTokensByTxMetaId[bridgeTxMeta.id] = this.startPolling({\n bridgeTxMetaId: bridgeTxMeta.id,\n });\n };\n\n // This will be called after you call this.startPolling()\n // The args passed in are the args you passed in to startPolling()\n _executePoll = async (pollingInput: BridgeStatusPollingInput) => {\n await this.#fetchBridgeTxStatus(pollingInput);\n };\n\n #getMultichainSelectedAccount() {\n return this.messagingSystem.call(\n 'AccountsController:getSelectedMultichainAccount',\n );\n }\n\n #getMultichainSelectedAccountAddress() {\n return this.#getMultichainSelectedAccount()?.address ?? '';\n }\n\n readonly #fetchBridgeTxStatus = async ({\n bridgeTxMetaId,\n }: FetchBridgeTxStatusArgs) => {\n const { txHistory } = this.state;\n\n try {\n // We try here because we receive 500 errors from Bridge API if we try to fetch immediately after submitting the source tx\n // Oddly mostly happens on Optimism, never on Arbitrum. By the 2nd fetch, the Bridge API responds properly.\n // Also srcTxHash may not be available immediately for STX, so we don't want to fetch in those cases\n const historyItem = txHistory[bridgeTxMetaId];\n const srcTxHash = this.#getSrcTxHash(bridgeTxMetaId);\n if (!srcTxHash) {\n return;\n }\n\n this.#updateSrcTxHash(bridgeTxMetaId, srcTxHash);\n\n const statusRequest = getStatusRequestWithSrcTxHash(\n historyItem.quote,\n srcTxHash,\n );\n const status = await fetchBridgeTxStatus(\n statusRequest,\n this.#clientId,\n this.#fetchFn,\n this.#config.customBridgeApiBaseUrl,\n );\n const newBridgeHistoryItem = {\n ...historyItem,\n status,\n completionTime:\n status.status === StatusTypes.COMPLETE ||\n status.status === StatusTypes.FAILED\n ? Date.now()\n : undefined, // TODO make this more accurate by looking up dest txHash block time\n };\n\n // No need to purge these on network change or account change, TransactionController does not purge either.\n // TODO In theory we can skip checking status if it's not the current account/network\n // we need to keep track of the account that this is associated with as well so that we don't show it in Activity list for other accounts\n // First stab at this will not stop polling when you are on a different account\n this.update((state) => {\n state.txHistory[bridgeTxMetaId] = newBridgeHistoryItem;\n });\n\n const pollingToken = this.#pollingTokensByTxMetaId[bridgeTxMetaId];\n\n if (\n (status.status === StatusTypes.COMPLETE ||\n status.status === StatusTypes.FAILED) &&\n pollingToken\n ) {\n this.stopPollingByPollingToken(pollingToken);\n\n if (status.status === StatusTypes.COMPLETE) {\n this.messagingSystem.publish(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:bridgeTransactionComplete`,\n { bridgeHistoryItem: newBridgeHistoryItem },\n );\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Completed,\n bridgeTxMetaId,\n );\n }\n if (status.status === StatusTypes.FAILED) {\n this.messagingSystem.publish(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:bridgeTransactionFailed`,\n { bridgeHistoryItem: newBridgeHistoryItem },\n );\n\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Failed,\n bridgeTxMetaId,\n );\n }\n }\n } catch (e) {\n console.log('Failed to fetch bridge tx status', e);\n }\n };\n\n readonly #getSrcTxHash = (bridgeTxMetaId: string): string | undefined => {\n const { txHistory } = this.state;\n // Prefer the srcTxHash from bridgeStatusState so we don't have to l ook up in TransactionController\n // But it is possible to have bridgeHistoryItem in state without the srcTxHash yet when it is an STX\n const srcTxHash = txHistory[bridgeTxMetaId].status.srcChain.txHash;\n\n if (srcTxHash) {\n return srcTxHash;\n }\n\n // Look up in TransactionController if txMeta has been updated with the srcTxHash\n const txControllerState = this.messagingSystem.call(\n 'TransactionController:getState',\n );\n const txMeta = txControllerState.transactions.find(\n (tx: TransactionMeta) => tx.id === bridgeTxMetaId,\n );\n return txMeta?.hash;\n };\n\n readonly #updateSrcTxHash = (bridgeTxMetaId: string, srcTxHash: string) => {\n const { txHistory } = this.state;\n if (txHistory[bridgeTxMetaId].status.srcChain.txHash) {\n return;\n }\n\n this.update((state) => {\n state.txHistory[bridgeTxMetaId].status.srcChain.txHash = srcTxHash;\n });\n };\n\n // Wipes the bridge status for the given address and chainId\n // Will match only source chainId to the selectedChainId\n readonly #wipeBridgeStatusByChainId = (\n address: string,\n selectedChainId: Hex,\n ) => {\n const sourceTxMetaIdsToDelete = Object.keys(this.state.txHistory).filter(\n (txMetaId) => {\n const bridgeHistoryItem = this.state.txHistory[txMetaId];\n\n const hexSourceChainId = numberToHex(\n bridgeHistoryItem.quote.srcChainId,\n );\n\n return (\n bridgeHistoryItem.account === address &&\n hexSourceChainId === selectedChainId\n );\n },\n );\n\n sourceTxMetaIdsToDelete.forEach((sourceTxMetaId) => {\n const pollingToken = this.#pollingTokensByTxMetaId[sourceTxMetaId];\n\n if (pollingToken) {\n this.stopPollingByPollingToken(\n this.#pollingTokensByTxMetaId[sourceTxMetaId],\n );\n }\n });\n\n this.update((state) => {\n state.txHistory = sourceTxMetaIdsToDelete.reduce(\n (acc, sourceTxMetaId) => {\n delete acc[sourceTxMetaId];\n return acc;\n },\n state.txHistory,\n );\n });\n };\n\n /**\n * ******************************************************\n * TX SUBMISSION HANDLING\n *******************************************************\n */\n\n /**\n * Submits the transaction to the snap using the keyring rpc method\n * This adds an approval tx to the ApprovalsController in the background\n * The client needs to handle the approval tx by redirecting to the confirmation page with the approvalTxId in the URL\n *\n * @param quoteResponse - The quote response\n * @param quoteResponse.quote - The quote\n * @returns The transaction meta\n */\n readonly #handleSolanaTx = async (\n quoteResponse: QuoteResponse<string> & QuoteMetadata,\n ) => {\n const selectedAccount = this.#getMultichainSelectedAccount();\n if (!selectedAccount) {\n throw new Error(\n 'Failed to submit cross-chain swap transaction: undefined multichain account',\n );\n }\n if (!selectedAccount?.metadata?.snap?.id) {\n throw new Error(\n 'Failed to submit cross-chain swap transaction: undefined snap id',\n );\n }\n const keyringRequest = getKeyringRequest(quoteResponse, selectedAccount);\n const keyringResponse = (await this.messagingSystem.call(\n 'SnapController:handleRequest',\n keyringRequest,\n )) as string | { result: Record<string, string> };\n\n // The extension client actually redirects before it can do anytyhing with this meta\n const txMeta = handleSolanaTxResponse(\n keyringResponse,\n quoteResponse,\n selectedAccount,\n );\n\n // TODO remove this eventually, just returning it now to match extension behavior\n // OR if the snap can propagate the snapRequestId or keyringReqId to the ApprovalsController, this can return the approvalTxId instead and clients won't need to subscribe to the ApprovalsController state to redirect\n return txMeta;\n };\n\n readonly #waitForHashAndReturnFinalTxMeta = async (\n hashPromise?:\n | Awaited<ReturnType<TransactionController['addTransaction']>>['result']\n | Awaited<\n ReturnType<UserOperationController['addUserOperationFromTransaction']>\n >['hash'],\n ): Promise<TransactionMeta | undefined> => {\n const transactionHash = await hashPromise;\n const finalTransactionMeta: TransactionMeta | undefined =\n this.messagingSystem\n .call('TransactionController:getState')\n .transactions.find(\n (tx: TransactionMeta) => tx.hash === transactionHash,\n );\n return finalTransactionMeta;\n };\n\n readonly #handleApprovalTx = async (\n quoteResponse: QuoteResponse<string | TxData> & QuoteMetadata,\n ): Promise<TransactionMeta | undefined> => {\n if (quoteResponse.approval) {\n await this.#handleUSDTAllowanceReset(quoteResponse);\n const approvalTxMeta = await this.#handleEvmTransaction(\n TransactionType.bridgeApproval,\n quoteResponse.approval,\n quoteResponse,\n );\n if (!approvalTxMeta) {\n throw new Error(\n 'Failed to submit bridge tx: approval txMeta is undefined',\n );\n }\n\n await handleLineaDelay(quoteResponse);\n return approvalTxMeta;\n }\n return undefined;\n };\n\n readonly #handleEvmSmartTransaction = async (\n trade: TxData,\n quoteResponse: Omit<QuoteResponse, 'approval' | 'trade'> & QuoteMetadata,\n approvalTxId?: string,\n ) => {\n return await this.#handleEvmTransaction(\n TransactionType.bridge,\n trade,\n quoteResponse,\n approvalTxId,\n false, // Set to false to indicate we don't want to wait for hash\n );\n };\n\n /**\n * Submits an EVM transaction to the TransactionController\n *\n * @param transactionType - The type of transaction to submit\n * @param trade - The trade data to confirm\n * @param quoteResponse - The quote response\n * @param quoteResponse.quote - The quote\n * @param approvalTxId - The tx id of the approval tx\n * @param shouldWaitForHash - Whether to wait for the hash of the transaction\n * @returns The transaction meta\n */\n readonly #handleEvmTransaction = async (\n transactionType: TransactionType,\n trade: TxData,\n quoteResponse: Omit<QuoteResponse, 'approval' | 'trade'> & QuoteMetadata,\n approvalTxId?: string,\n shouldWaitForHash = true,\n ): Promise<TransactionMeta | undefined> => {\n const actionId = generateActionId().toString();\n\n const selectedAccount = this.messagingSystem.call(\n 'AccountsController:getAccountByAddress',\n trade.from,\n );\n if (!selectedAccount) {\n throw new Error(\n 'Failed to submit cross-chain swap transaction: unknown account in trade data',\n );\n }\n const hexChainId = formatChainIdToHex(trade.chainId);\n const networkClientId = this.messagingSystem.call(\n 'NetworkController:findNetworkClientIdByChainId',\n hexChainId,\n );\n\n const requestOptions = {\n actionId,\n networkClientId,\n requireApproval: false,\n type: transactionType,\n origin: 'metamask',\n };\n const transactionParams: Parameters<\n TransactionController['addTransaction']\n >[0] = {\n ...trade,\n chainId: hexChainId,\n gasLimit: trade.gasLimit?.toString(),\n gas: trade.gasLimit?.toString(),\n };\n const transactionParamsWithMaxGas: TransactionParams = {\n ...transactionParams,\n ...(await this.#calculateGasFees(\n transactionParams,\n networkClientId,\n hexChainId,\n )),\n };\n\n let result:\n | Awaited<ReturnType<TransactionController['addTransaction']>>['result']\n | Awaited<\n ReturnType<UserOperationController['addUserOperationFromTransaction']>\n >['hash']\n | undefined;\n let transactionMeta: TransactionMeta | undefined;\n\n const isSmartContractAccount =\n selectedAccount.type === EthAccountType.Erc4337;\n if (isSmartContractAccount && this.#addUserOperationFromTransactionFn) {\n const smartAccountTxResult =\n await this.#addUserOperationFromTransactionFn(\n transactionParamsWithMaxGas,\n requestOptions,\n );\n result = smartAccountTxResult.transactionHash;\n transactionMeta = {\n ...requestOptions,\n chainId: hexChainId,\n txParams: transactionParamsWithMaxGas,\n time: Date.now(),\n id: smartAccountTxResult.id,\n status: TransactionStatus.confirmed,\n };\n } else {\n const addTransactionResult = await this.#addTransactionFn(\n transactionParamsWithMaxGas,\n requestOptions,\n );\n result = addTransactionResult.result;\n transactionMeta = addTransactionResult.transactionMeta;\n }\n\n if (shouldWaitForHash) {\n return await this.#waitForHashAndReturnFinalTxMeta(result);\n }\n\n return {\n ...getTxMetaFields(quoteResponse, approvalTxId),\n ...transactionMeta,\n };\n };\n\n readonly #handleUSDTAllowanceReset = async (\n quoteResponse: QuoteResponse<TxData | string> & QuoteMetadata,\n ) => {\n const hexChainId = formatChainIdToHex(quoteResponse.quote.srcChainId);\n if (\n quoteResponse.approval &&\n isEthUsdt(hexChainId, quoteResponse.quote.srcAsset.address)\n ) {\n const allowance = new BigNumber(\n await this.messagingSystem.call(\n 'BridgeController:getBridgeERC20Allowance',\n quoteResponse.quote.srcAsset.address,\n hexChainId,\n ),\n );\n const shouldResetApproval =\n allowance.lt(quoteResponse.sentAmount.amount) && allowance.gt(0);\n if (shouldResetApproval) {\n await this.#handleEvmTransaction(\n TransactionType.bridgeApproval,\n { ...quoteResponse.approval, data: getEthUsdtResetData() },\n quoteResponse,\n );\n }\n }\n };\n\n readonly #calculateGasFees = async (\n transactionParams: TransactionParams,\n networkClientId: string,\n chainId: Hex,\n ) => {\n const { gasFeeEstimates } = this.messagingSystem.call(\n 'GasFeeController:getState',\n );\n const { estimates: txGasFeeEstimates } = await this.#estimateGasFeeFn({\n transactionParams,\n chainId,\n networkClientId,\n });\n const { maxFeePerGas, maxPriorityFeePerGas } = getTxGasEstimates({\n networkGasFeeEstimates: gasFeeEstimates,\n txGasFeeEstimates,\n });\n const maxGasLimit = toHex(transactionParams.gas ?? 0);\n\n return {\n maxFeePerGas,\n maxPriorityFeePerGas,\n gas: maxGasLimit,\n };\n };\n\n /**\n * Submits a cross-chain swap transaction\n *\n * @param quoteResponse - The quote response\n * @param isStxEnabledOnClient - Whether smart transactions are enabled on the client, for example the getSmartTransactionsEnabled selector value from the extension\n * @returns The transaction meta\n */\n submitTx = async (\n quoteResponse: QuoteResponse<TxData | string> & QuoteMetadata,\n isStxEnabledOnClient: boolean,\n ) => {\n let txMeta: (TransactionMeta & Partial<SolanaTransactionMeta>) | undefined;\n // Submit SOLANA tx\n if (\n isSolanaChainId(quoteResponse.quote.srcChainId) &&\n typeof quoteResponse.trade === 'string'\n ) {\n txMeta = await this.#handleSolanaTx(\n quoteResponse as QuoteResponse<string> & QuoteMetadata,\n );\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.SnapConfirmationViewed,\n txMeta.id,\n );\n }\n // Submit EVM tx\n let approvalTime: number | undefined, approvalTxId: string | undefined;\n if (\n !isSolanaChainId(quoteResponse.quote.srcChainId) &&\n typeof quoteResponse.trade !== 'string'\n ) {\n // Set approval time and id if an approval tx is needed\n const approvalTxMeta = await this.#handleApprovalTx(quoteResponse);\n approvalTime = approvalTxMeta?.time;\n approvalTxId = approvalTxMeta?.id;\n // Handle smart transactions if enabled\n if (isStxEnabledOnClient) {\n txMeta = await this.#handleEvmSmartTransaction(\n quoteResponse.trade,\n quoteResponse,\n approvalTxId,\n );\n } else {\n txMeta = await this.#handleEvmTransaction(\n TransactionType.bridge,\n quoteResponse.trade,\n quoteResponse,\n approvalTxId,\n );\n }\n }\n\n if (!txMeta) {\n throw new Error('Failed to submit bridge tx: txMeta is undefined');\n }\n\n try {\n // Start polling for bridge tx status\n this.startPollingForBridgeTxStatus({\n bridgeTxMeta: txMeta, // Only the id field is used by the BridgeStatusController\n statusRequest: {\n ...getStatusRequestParams(quoteResponse),\n srcTxHash: txMeta.hash,\n },\n quoteResponse,\n slippagePercentage: 0, // TODO include slippage provided by quote if using dynamic slippage, or slippage from quote request\n isStxEnabled: isStxEnabledOnClient,\n startTime: approvalTime ?? Date.now(),\n approvalTxId,\n });\n\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Submitted,\n txMeta.id,\n );\n } catch {\n // Ignore errors here, we don't want to crash the app if this fails and tx submission succeeds\n }\n return txMeta;\n };\n\n /**\n * Tracks post-submission events for a cross-chain swap based on the history item\n *\n * @param eventName - The name of the event to track\n * @param txMetaId - The txMetaId of the history item to track the event for\n */\n readonly #trackUnifiedSwapBridgeEvent = <\n T extends\n | typeof UnifiedSwapBridgeEventName.Submitted\n | typeof UnifiedSwapBridgeEventName.Failed\n | typeof UnifiedSwapBridgeEventName.SnapConfirmationViewed\n | typeof UnifiedSwapBridgeEventName.Completed,\n >(\n eventName: T,\n txMetaId: string,\n ) => {\n const historyItem: BridgeHistoryItem | undefined =\n this.state.txHistory[txMetaId];\n if (!historyItem) {\n this.messagingSystem.call(\n 'BridgeController:trackUnifiedSwapBridgeEvent',\n eventName,\n {},\n );\n return;\n }\n\n let requiredEventProperties: Pick<RequiredEventContextFromClient, T>[T];\n const selectedAccount = this.messagingSystem.call(\n 'AccountsController:getAccountByAddress',\n historyItem.account,\n );\n\n switch (eventName) {\n case UnifiedSwapBridgeEventName.Submitted:\n case UnifiedSwapBridgeEventName.Completed:\n case UnifiedSwapBridgeEventName.Failed:\n default:\n requiredEventProperties = {\n action_type: getActionType(\n historyItem.quote.srcChainId,\n historyItem.quote.destChainId,\n ),\n ...getRequestParamFromHistory(historyItem),\n ...getRequestMetadataFromHistory(historyItem, selectedAccount),\n ...getTradeDataFromHistory(historyItem),\n ...getTxStatusesFromHistory(historyItem),\n ...getFinalizedTxProperties(historyItem),\n error_message: 'error_message',\n };\n }\n\n this.messagingSystem.call(\n 'BridgeController:trackUnifiedSwapBridgeEvent',\n eventName,\n requiredEventProperties,\n );\n };\n}\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"bridge-status-controller.d.cts","sourceRoot":"","sources":["../src/bridge-status-controller.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
1
|
+
{"version":3,"file":"bridge-status-controller.d.cts","sourceRoot":"","sources":["../src/bridge-status-controller.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EAEb,MAAM,EACN,aAAa,EACd,oCAAoC;AAarC,OAAO,KAAK,EACV,qBAAqB,EAEtB,yCAAyC;AAC1C,OAAO,EAGL,KAAK,eAAe,EACrB,yCAAyC;AAC1C,OAAO,KAAK,EAAE,uBAAuB,EAAE,4CAA4C;AAInF,OAAO,EAEL,6BAA6B,EAG9B,wBAAoB;AACrB,OAAO,EAAE,KAAK,+BAA+B,EAAE,oBAAgB;AAC/D,OAAO,KAAK,EACV,2BAA2B,EAC3B,2CAA2C,EAC3C,aAAa,EACb,cAAc,EACd,qBAAqB,EAEtB,oBAAgB;AA+BjB,wEAAwE;AACxE,KAAK,wBAAwB,GAAG,uBAAuB,CAAC;AAGxD,MAAM,MAAM,uBAAuB,GAAG;IACpC,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;;;;;;;;;;;;;;;;AACF,qBAAa,sBAAuB,SAAQ,4BAC1C,OAAO,6BAA6B,EACpC,2BAA2B,EAC3B,+BAA+B,CAChC;;gBAiBa,EACV,SAAS,EACT,KAAK,EACL,QAAQ,EACR,OAAO,EACP,gBAAgB,EAChB,iCAAiC,EACjC,gBAAgB,EAChB,MAAM,GACP,EAAE;QACD,SAAS,EAAE,+BAA+B,CAAC;QAC3C,KAAK,CAAC,EAAE,OAAO,CAAC,2BAA2B,CAAC,CAAC;QAC7C,QAAQ,EAAE,cAAc,CAAC;QACzB,OAAO,EAAE,aAAa,CAAC;QACvB,gBAAgB,EAAE,OAAO,qBAAqB,CAAC,SAAS,CAAC,cAAc,CAAC;QACxE,gBAAgB,EAAE,OAAO,qBAAqB,CAAC,SAAS,CAAC,cAAc,CAAC;QACxE,iCAAiC,CAAC,EAAE,OAAO,uBAAuB,CAAC,SAAS,CAAC,+BAA+B,CAAC;QAC7G,MAAM,CAAC,EAAE;YACP,sBAAsB,CAAC,EAAE,MAAM,CAAC;SACjC,CAAC;KACH;IAiDD,UAAU,aAIR;IAEF,gBAAgB;iBAIL,MAAM;uBACA,OAAO;eAmBtB;IA8BF;;;;OAIG;IACH,6BAA6B,sCACQ,2CAA2C,UAqD9E;IAIF,YAAY,iBAAwB,wBAAwB,mBAE1D;IAsaF;;;;;;OAMG;IACH,QAAQ,kBACS,cAAc,MAAM,GAAG,MAAM,CAAC,GAAG,aAAa,wBACvC,OAAO,+DAsE7B;CA4DH"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"bridge-status-controller.d.mts","sourceRoot":"","sources":["../src/bridge-status-controller.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
1
|
+
{"version":3,"file":"bridge-status-controller.d.mts","sourceRoot":"","sources":["../src/bridge-status-controller.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EAEb,MAAM,EACN,aAAa,EACd,oCAAoC;AAarC,OAAO,KAAK,EACV,qBAAqB,EAEtB,yCAAyC;AAC1C,OAAO,EAGL,KAAK,eAAe,EACrB,yCAAyC;AAC1C,OAAO,KAAK,EAAE,uBAAuB,EAAE,4CAA4C;AAInF,OAAO,EAEL,6BAA6B,EAG9B,wBAAoB;AACrB,OAAO,EAAE,KAAK,+BAA+B,EAAE,oBAAgB;AAC/D,OAAO,KAAK,EACV,2BAA2B,EAC3B,2CAA2C,EAC3C,aAAa,EACb,cAAc,EACd,qBAAqB,EAEtB,oBAAgB;AA+BjB,wEAAwE;AACxE,KAAK,wBAAwB,GAAG,uBAAuB,CAAC;AAGxD,MAAM,MAAM,uBAAuB,GAAG;IACpC,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;;;;;;;;;;;;;;;;AACF,qBAAa,sBAAuB,SAAQ,4BAC1C,OAAO,6BAA6B,EACpC,2BAA2B,EAC3B,+BAA+B,CAChC;;gBAiBa,EACV,SAAS,EACT,KAAK,EACL,QAAQ,EACR,OAAO,EACP,gBAAgB,EAChB,iCAAiC,EACjC,gBAAgB,EAChB,MAAM,GACP,EAAE;QACD,SAAS,EAAE,+BAA+B,CAAC;QAC3C,KAAK,CAAC,EAAE,OAAO,CAAC,2BAA2B,CAAC,CAAC;QAC7C,QAAQ,EAAE,cAAc,CAAC;QACzB,OAAO,EAAE,aAAa,CAAC;QACvB,gBAAgB,EAAE,OAAO,qBAAqB,CAAC,SAAS,CAAC,cAAc,CAAC;QACxE,gBAAgB,EAAE,OAAO,qBAAqB,CAAC,SAAS,CAAC,cAAc,CAAC;QACxE,iCAAiC,CAAC,EAAE,OAAO,uBAAuB,CAAC,SAAS,CAAC,+BAA+B,CAAC;QAC7G,MAAM,CAAC,EAAE;YACP,sBAAsB,CAAC,EAAE,MAAM,CAAC;SACjC,CAAC;KACH;IAiDD,UAAU,aAIR;IAEF,gBAAgB;iBAIL,MAAM;uBACA,OAAO;eAmBtB;IA8BF;;;;OAIG;IACH,6BAA6B,sCACQ,2CAA2C,UAqD9E;IAIF,YAAY,iBAAwB,wBAAwB,mBAE1D;IAsaF;;;;;;OAMG;IACH,QAAQ,kBACS,cAAc,MAAM,GAAG,MAAM,CAAC,GAAG,aAAa,wBACvC,OAAO,+DAsE7B;CA4DH"}
|
@@ -9,8 +9,8 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
9
9
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
10
10
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
11
11
|
};
|
12
|
-
var _BridgeStatusController_instances, _BridgeStatusController_pollingTokensByTxMetaId, _BridgeStatusController_clientId, _BridgeStatusController_fetchFn, _BridgeStatusController_config, _BridgeStatusController_addTransactionFn, _BridgeStatusController_estimateGasFeeFn, _BridgeStatusController_addUserOperationFromTransactionFn, _BridgeStatusController_restartPollingForIncompleteHistoryItems, _BridgeStatusController_getMultichainSelectedAccount, _BridgeStatusController_getMultichainSelectedAccountAddress, _BridgeStatusController_fetchBridgeTxStatus, _BridgeStatusController_getSrcTxHash, _BridgeStatusController_updateSrcTxHash, _BridgeStatusController_wipeBridgeStatusByChainId, _BridgeStatusController_handleSolanaTx, _BridgeStatusController_waitForHashAndReturnFinalTxMeta, _BridgeStatusController_handleApprovalTx, _BridgeStatusController_handleEvmSmartTransaction, _BridgeStatusController_handleEvmTransaction,
|
13
|
-
import { formatChainIdToHex, getEthUsdtResetData, isEthUsdt,
|
12
|
+
var _BridgeStatusController_instances, _BridgeStatusController_pollingTokensByTxMetaId, _BridgeStatusController_clientId, _BridgeStatusController_fetchFn, _BridgeStatusController_config, _BridgeStatusController_addTransactionFn, _BridgeStatusController_estimateGasFeeFn, _BridgeStatusController_addUserOperationFromTransactionFn, _BridgeStatusController_restartPollingForIncompleteHistoryItems, _BridgeStatusController_getMultichainSelectedAccount, _BridgeStatusController_getMultichainSelectedAccountAddress, _BridgeStatusController_fetchBridgeTxStatus, _BridgeStatusController_getSrcTxHash, _BridgeStatusController_updateSrcTxHash, _BridgeStatusController_wipeBridgeStatusByChainId, _BridgeStatusController_handleSolanaTx, _BridgeStatusController_waitForHashAndReturnFinalTxMeta, _BridgeStatusController_handleApprovalTx, _BridgeStatusController_handleEvmSmartTransaction, _BridgeStatusController_handleEvmTransaction, _BridgeStatusController_handleUSDTAllowanceReset, _BridgeStatusController_calculateGasFees, _BridgeStatusController_trackUnifiedSwapBridgeEvent;
|
13
|
+
import { formatChainIdToHex, getEthUsdtResetData, isEthUsdt, isSolanaChainId, StatusTypes, UnifiedSwapBridgeEventName, getActionType } from "@metamask/bridge-controller";
|
14
14
|
import { toHex } from "@metamask/controller-utils";
|
15
15
|
import { EthAccountType } from "@metamask/keyring-api";
|
16
16
|
import { StaticIntervalPollingController } from "@metamask/polling-controller";
|
@@ -346,36 +346,11 @@ export class BridgeStatusController extends StaticIntervalPollingController() {
|
|
346
346
|
if (shouldWaitForHash) {
|
347
347
|
return await __classPrivateFieldGet(this, _BridgeStatusController_waitForHashAndReturnFinalTxMeta, "f").call(this, result);
|
348
348
|
}
|
349
|
-
// TODO why is this needed?
|
350
|
-
// Note that updateTransaction doesn't actually error if you add fields that don't conform the to the txMeta type
|
351
|
-
// they will be there at runtime, but you just don't get any type safety checks on them
|
352
|
-
// const fieldsToAddToTxMeta = getTxMetaFields(quoteResponse, approvalTxId);
|
353
|
-
// dispatch(updateTransaction(completeTxMeta);
|
354
349
|
return {
|
355
350
|
...getTxMetaFields(quoteResponse, approvalTxId),
|
356
351
|
...transactionMeta,
|
357
352
|
};
|
358
353
|
});
|
359
|
-
// Only adds tokens if the source or dest chain is an EVM chain bc non-evm tokens
|
360
|
-
// are detected by the multichain asset controllers
|
361
|
-
_BridgeStatusController_addTokens.set(this, (asset) => {
|
362
|
-
if (isNativeAddress(asset.address) || isSolanaChainId(asset.chainId)) {
|
363
|
-
return;
|
364
|
-
}
|
365
|
-
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
366
|
-
this.messagingSystem.call('TokensController:addDetectedTokens', [
|
367
|
-
{
|
368
|
-
address: asset.address,
|
369
|
-
decimals: asset.decimals,
|
370
|
-
image: asset.iconUrl,
|
371
|
-
name: asset.name,
|
372
|
-
symbol: asset.symbol,
|
373
|
-
},
|
374
|
-
], {
|
375
|
-
chainId: formatChainIdToHex(asset.chainId),
|
376
|
-
selectedAddress: __classPrivateFieldGet(this, _BridgeStatusController_instances, "m", _BridgeStatusController_getMultichainSelectedAccountAddress).call(this),
|
377
|
-
});
|
378
|
-
});
|
379
354
|
_BridgeStatusController_handleUSDTAllowanceReset.set(this, async (quoteResponse) => {
|
380
355
|
const hexChainId = formatChainIdToHex(quoteResponse.quote.srcChainId);
|
381
356
|
if (quoteResponse.approval &&
|
@@ -454,9 +429,6 @@ export class BridgeStatusController extends StaticIntervalPollingController() {
|
|
454
429
|
approvalTxId,
|
455
430
|
});
|
456
431
|
__classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, UnifiedSwapBridgeEventName.Submitted, txMeta.id);
|
457
|
-
// Add tokens to the token list
|
458
|
-
__classPrivateFieldGet(this, _BridgeStatusController_addTokens, "f").call(this, quoteResponse.quote.srcAsset);
|
459
|
-
__classPrivateFieldGet(this, _BridgeStatusController_addTokens, "f").call(this, quoteResponse.quote.destAsset);
|
460
432
|
}
|
461
433
|
catch {
|
462
434
|
// Ignore errors here, we don't want to crash the app if this fails and tx submission succeeds
|
@@ -515,7 +487,7 @@ export class BridgeStatusController extends StaticIntervalPollingController() {
|
|
515
487
|
__classPrivateFieldGet(this, _BridgeStatusController_restartPollingForIncompleteHistoryItems, "f").call(this);
|
516
488
|
}
|
517
489
|
}
|
518
|
-
_BridgeStatusController_pollingTokensByTxMetaId = new WeakMap(), _BridgeStatusController_clientId = new WeakMap(), _BridgeStatusController_fetchFn = new WeakMap(), _BridgeStatusController_config = new WeakMap(), _BridgeStatusController_addTransactionFn = new WeakMap(), _BridgeStatusController_estimateGasFeeFn = new WeakMap(), _BridgeStatusController_addUserOperationFromTransactionFn = new WeakMap(), _BridgeStatusController_restartPollingForIncompleteHistoryItems = new WeakMap(), _BridgeStatusController_fetchBridgeTxStatus = new WeakMap(), _BridgeStatusController_getSrcTxHash = new WeakMap(), _BridgeStatusController_updateSrcTxHash = new WeakMap(), _BridgeStatusController_wipeBridgeStatusByChainId = new WeakMap(), _BridgeStatusController_handleSolanaTx = new WeakMap(), _BridgeStatusController_waitForHashAndReturnFinalTxMeta = new WeakMap(), _BridgeStatusController_handleApprovalTx = new WeakMap(), _BridgeStatusController_handleEvmSmartTransaction = new WeakMap(), _BridgeStatusController_handleEvmTransaction = new WeakMap(),
|
490
|
+
_BridgeStatusController_pollingTokensByTxMetaId = new WeakMap(), _BridgeStatusController_clientId = new WeakMap(), _BridgeStatusController_fetchFn = new WeakMap(), _BridgeStatusController_config = new WeakMap(), _BridgeStatusController_addTransactionFn = new WeakMap(), _BridgeStatusController_estimateGasFeeFn = new WeakMap(), _BridgeStatusController_addUserOperationFromTransactionFn = new WeakMap(), _BridgeStatusController_restartPollingForIncompleteHistoryItems = new WeakMap(), _BridgeStatusController_fetchBridgeTxStatus = new WeakMap(), _BridgeStatusController_getSrcTxHash = new WeakMap(), _BridgeStatusController_updateSrcTxHash = new WeakMap(), _BridgeStatusController_wipeBridgeStatusByChainId = new WeakMap(), _BridgeStatusController_handleSolanaTx = new WeakMap(), _BridgeStatusController_waitForHashAndReturnFinalTxMeta = new WeakMap(), _BridgeStatusController_handleApprovalTx = new WeakMap(), _BridgeStatusController_handleEvmSmartTransaction = new WeakMap(), _BridgeStatusController_handleEvmTransaction = new WeakMap(), _BridgeStatusController_handleUSDTAllowanceReset = new WeakMap(), _BridgeStatusController_calculateGasFees = new WeakMap(), _BridgeStatusController_trackUnifiedSwapBridgeEvent = new WeakMap(), _BridgeStatusController_instances = new WeakSet(), _BridgeStatusController_getMultichainSelectedAccount = function _BridgeStatusController_getMultichainSelectedAccount() {
|
519
491
|
return this.messagingSystem.call('AccountsController:getSelectedMultichainAccount');
|
520
492
|
}, _BridgeStatusController_getMultichainSelectedAccountAddress = function _BridgeStatusController_getMultichainSelectedAccountAddress() {
|
521
493
|
return __classPrivateFieldGet(this, _BridgeStatusController_instances, "m", _BridgeStatusController_getMultichainSelectedAccount).call(this)?.address ?? '';
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"bridge-status-controller.mjs","sourceRoot":"","sources":["../src/bridge-status-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { StateMetadata } from '@metamask/base-controller';\nimport type {\n BridgeAsset,\n QuoteMetadata,\n RequiredEventContextFromClient,\n TxData,\n QuoteResponse,\n} from '@metamask/bridge-controller';\nimport {\n formatChainIdToHex,\n getEthUsdtResetData,\n isEthUsdt,\n isNativeAddress,\n isSolanaChainId,\n StatusTypes,\n UnifiedSwapBridgeEventName,\n getActionType,\n} from '@metamask/bridge-controller';\nimport { toHex } from '@metamask/controller-utils';\nimport { EthAccountType } from '@metamask/keyring-api';\nimport { StaticIntervalPollingController } from '@metamask/polling-controller';\nimport type {\n TransactionController,\n TransactionParams,\n} from '@metamask/transaction-controller';\nimport {\n TransactionStatus,\n TransactionType,\n type TransactionMeta,\n} from '@metamask/transaction-controller';\nimport type { UserOperationController } from '@metamask/user-operation-controller';\nimport { numberToHex, type Hex } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport {\n BRIDGE_PROD_API_BASE_URL,\n BRIDGE_STATUS_CONTROLLER_NAME,\n DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE,\n REFRESH_INTERVAL_MS,\n} from './constants';\nimport { type BridgeStatusControllerMessenger } from './types';\nimport type {\n BridgeStatusControllerState,\n StartPollingForBridgeTxStatusArgsSerialized,\n FetchFunction,\n BridgeClientId,\n SolanaTransactionMeta,\n BridgeHistoryItem,\n} from './types';\nimport {\n fetchBridgeTxStatus,\n getStatusRequestWithSrcTxHash,\n} from './utils/bridge-status';\nimport { getTxGasEstimates } from './utils/gas';\nimport {\n getFinalizedTxProperties,\n getRequestMetadataFromHistory,\n getRequestParamFromHistory,\n getTradeDataFromHistory,\n getTxStatusesFromHistory,\n} from './utils/metrics';\nimport {\n getKeyringRequest,\n getStatusRequestParams,\n getTxMetaFields,\n handleLineaDelay,\n handleSolanaTxResponse,\n} from './utils/transaction';\nimport { generateActionId } from './utils/transaction';\n\nconst metadata: StateMetadata<BridgeStatusControllerState> = {\n // We want to persist the bridge status state so that we can show the proper data for the Activity list\n // basically match the behavior of TransactionController\n txHistory: {\n persist: true,\n anonymous: false,\n },\n};\n\n/** The input to start polling for the {@link BridgeStatusController} */\ntype BridgeStatusPollingInput = FetchBridgeTxStatusArgs;\n\ntype SrcTxMetaId = string;\nexport type FetchBridgeTxStatusArgs = {\n bridgeTxMetaId: string;\n};\nexport class BridgeStatusController extends StaticIntervalPollingController<BridgeStatusPollingInput>()<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerState,\n BridgeStatusControllerMessenger\n> {\n #pollingTokensByTxMetaId: Record<SrcTxMetaId, string> = {};\n\n readonly #clientId: BridgeClientId;\n\n readonly #fetchFn: FetchFunction;\n\n readonly #config: {\n customBridgeApiBaseUrl: string;\n };\n\n readonly #addTransactionFn: typeof TransactionController.prototype.addTransaction;\n\n readonly #estimateGasFeeFn: typeof TransactionController.prototype.estimateGasFee;\n\n readonly #addUserOperationFromTransactionFn?: typeof UserOperationController.prototype.addUserOperationFromTransaction;\n\n constructor({\n messenger,\n state,\n clientId,\n fetchFn,\n addTransactionFn,\n addUserOperationFromTransactionFn,\n estimateGasFeeFn,\n config,\n }: {\n messenger: BridgeStatusControllerMessenger;\n state?: Partial<BridgeStatusControllerState>;\n clientId: BridgeClientId;\n fetchFn: FetchFunction;\n addTransactionFn: typeof TransactionController.prototype.addTransaction;\n estimateGasFeeFn: typeof TransactionController.prototype.estimateGasFee;\n addUserOperationFromTransactionFn?: typeof UserOperationController.prototype.addUserOperationFromTransaction;\n config?: {\n customBridgeApiBaseUrl?: string;\n };\n }) {\n super({\n name: BRIDGE_STATUS_CONTROLLER_NAME,\n metadata,\n messenger,\n // Restore the persisted state\n state: {\n ...DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE,\n ...state,\n },\n });\n\n this.#clientId = clientId;\n this.#fetchFn = fetchFn;\n this.#addTransactionFn = addTransactionFn;\n this.#addUserOperationFromTransactionFn = addUserOperationFromTransactionFn;\n this.#estimateGasFeeFn = estimateGasFeeFn;\n this.#config = {\n customBridgeApiBaseUrl:\n config?.customBridgeApiBaseUrl ?? BRIDGE_PROD_API_BASE_URL,\n };\n\n // Register action handlers\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:startPollingForBridgeTxStatus`,\n this.startPollingForBridgeTxStatus.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:wipeBridgeStatus`,\n this.wipeBridgeStatus.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:resetState`,\n this.resetState.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:submitTx`,\n this.submitTx.bind(this),\n );\n\n // Set interval\n this.setIntervalLength(REFRESH_INTERVAL_MS);\n\n // If you close the extension, but keep the browser open, the polling continues\n // If you close the browser, the polling stops\n // Check for historyItems that do not have a status of complete and restart polling\n this.#restartPollingForIncompleteHistoryItems();\n }\n\n resetState = () => {\n this.update((state) => {\n state.txHistory = DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE.txHistory;\n });\n };\n\n wipeBridgeStatus = ({\n address,\n ignoreNetwork,\n }: {\n address: string;\n ignoreNetwork: boolean;\n }) => {\n // Wipe all networks for this address\n if (ignoreNetwork) {\n this.update((state) => {\n state.txHistory = DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE.txHistory;\n });\n } else {\n const { selectedNetworkClientId } = this.messagingSystem.call(\n 'NetworkController:getState',\n );\n const selectedNetworkClient = this.messagingSystem.call(\n 'NetworkController:getNetworkClientById',\n selectedNetworkClientId,\n );\n const selectedChainId = selectedNetworkClient.configuration.chainId;\n\n this.#wipeBridgeStatusByChainId(address, selectedChainId);\n }\n };\n\n readonly #restartPollingForIncompleteHistoryItems = () => {\n // Check for historyItems that do not have a status of complete and restart polling\n const { txHistory } = this.state;\n const historyItems = Object.values(txHistory);\n const incompleteHistoryItems = historyItems\n .filter(\n (historyItem) =>\n historyItem.status.status === StatusTypes.PENDING ||\n historyItem.status.status === StatusTypes.UNKNOWN,\n )\n .filter((historyItem) => {\n // Check if we are already polling this tx, if so, skip restarting polling for that\n const srcTxMetaId = historyItem.txMetaId;\n const pollingToken = this.#pollingTokensByTxMetaId[srcTxMetaId];\n return !pollingToken;\n });\n\n incompleteHistoryItems.forEach((historyItem) => {\n const bridgeTxMetaId = historyItem.txMetaId;\n\n // We manually call startPolling() here rather than go through startPollingForBridgeTxStatus()\n // because we don't want to overwrite the existing historyItem in state\n this.#pollingTokensByTxMetaId[bridgeTxMetaId] = this.startPolling({\n bridgeTxMetaId,\n });\n });\n };\n\n /**\n * Starts polling for the bridge tx status\n *\n * @param startPollingForBridgeTxStatusArgs - The args to start polling for the bridge tx status\n */\n startPollingForBridgeTxStatus = (\n startPollingForBridgeTxStatusArgs: StartPollingForBridgeTxStatusArgsSerialized,\n ) => {\n const {\n bridgeTxMeta,\n statusRequest,\n quoteResponse,\n startTime,\n slippagePercentage,\n initialDestAssetBalance,\n targetContractAddress,\n approvalTxId,\n isStxEnabled,\n } = startPollingForBridgeTxStatusArgs;\n const accountAddress = this.#getMultichainSelectedAccountAddress();\n // Write all non-status fields to state so we can reference the quote in Activity list without the Bridge API\n // We know it's in progress but not the exact status yet\n const txHistoryItem = {\n txMetaId: bridgeTxMeta.id,\n quote: quoteResponse.quote,\n startTime,\n estimatedProcessingTimeInSeconds:\n quoteResponse.estimatedProcessingTimeInSeconds,\n slippagePercentage,\n pricingData: {\n amountSent: quoteResponse.sentAmount.amount,\n amountSentInUsd: quoteResponse.sentAmount.usd ?? undefined,\n quotedGasInUsd: quoteResponse.gasFee.usd ?? undefined,\n quotedReturnInUsd: quoteResponse.toTokenAmount.usd ?? undefined,\n },\n initialDestAssetBalance,\n targetContractAddress,\n account: accountAddress,\n status: {\n // We always have a PENDING status when we start polling for a tx, don't need the Bridge API for that\n // Also we know the bare minimum fields for status at this point in time\n status: StatusTypes.PENDING,\n srcChain: {\n chainId: statusRequest.srcChainId,\n txHash: statusRequest.srcTxHash,\n },\n },\n hasApprovalTx: Boolean(quoteResponse.approval),\n approvalTxId,\n isStxEnabled: isStxEnabled ?? false,\n };\n this.update((state) => {\n // Use the txMeta.id as the key so we can reference the txMeta in TransactionController\n state.txHistory[bridgeTxMeta.id] = txHistoryItem;\n });\n\n this.#pollingTokensByTxMetaId[bridgeTxMeta.id] = this.startPolling({\n bridgeTxMetaId: bridgeTxMeta.id,\n });\n };\n\n // This will be called after you call this.startPolling()\n // The args passed in are the args you passed in to startPolling()\n _executePoll = async (pollingInput: BridgeStatusPollingInput) => {\n await this.#fetchBridgeTxStatus(pollingInput);\n };\n\n #getMultichainSelectedAccount() {\n return this.messagingSystem.call(\n 'AccountsController:getSelectedMultichainAccount',\n );\n }\n\n #getMultichainSelectedAccountAddress() {\n return this.#getMultichainSelectedAccount()?.address ?? '';\n }\n\n readonly #fetchBridgeTxStatus = async ({\n bridgeTxMetaId,\n }: FetchBridgeTxStatusArgs) => {\n const { txHistory } = this.state;\n\n try {\n // We try here because we receive 500 errors from Bridge API if we try to fetch immediately after submitting the source tx\n // Oddly mostly happens on Optimism, never on Arbitrum. By the 2nd fetch, the Bridge API responds properly.\n // Also srcTxHash may not be available immediately for STX, so we don't want to fetch in those cases\n const historyItem = txHistory[bridgeTxMetaId];\n const srcTxHash = this.#getSrcTxHash(bridgeTxMetaId);\n if (!srcTxHash) {\n return;\n }\n\n this.#updateSrcTxHash(bridgeTxMetaId, srcTxHash);\n\n const statusRequest = getStatusRequestWithSrcTxHash(\n historyItem.quote,\n srcTxHash,\n );\n const status = await fetchBridgeTxStatus(\n statusRequest,\n this.#clientId,\n this.#fetchFn,\n this.#config.customBridgeApiBaseUrl,\n );\n const newBridgeHistoryItem = {\n ...historyItem,\n status,\n completionTime:\n status.status === StatusTypes.COMPLETE ||\n status.status === StatusTypes.FAILED\n ? Date.now()\n : undefined, // TODO make this more accurate by looking up dest txHash block time\n };\n\n // No need to purge these on network change or account change, TransactionController does not purge either.\n // TODO In theory we can skip checking status if it's not the current account/network\n // we need to keep track of the account that this is associated with as well so that we don't show it in Activity list for other accounts\n // First stab at this will not stop polling when you are on a different account\n this.update((state) => {\n state.txHistory[bridgeTxMetaId] = newBridgeHistoryItem;\n });\n\n const pollingToken = this.#pollingTokensByTxMetaId[bridgeTxMetaId];\n\n if (\n (status.status === StatusTypes.COMPLETE ||\n status.status === StatusTypes.FAILED) &&\n pollingToken\n ) {\n this.stopPollingByPollingToken(pollingToken);\n\n if (status.status === StatusTypes.COMPLETE) {\n this.messagingSystem.publish(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:bridgeTransactionComplete`,\n { bridgeHistoryItem: newBridgeHistoryItem },\n );\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Completed,\n bridgeTxMetaId,\n );\n }\n if (status.status === StatusTypes.FAILED) {\n this.messagingSystem.publish(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:bridgeTransactionFailed`,\n { bridgeHistoryItem: newBridgeHistoryItem },\n );\n\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Failed,\n bridgeTxMetaId,\n );\n }\n }\n } catch (e) {\n console.log('Failed to fetch bridge tx status', e);\n }\n };\n\n readonly #getSrcTxHash = (bridgeTxMetaId: string): string | undefined => {\n const { txHistory } = this.state;\n // Prefer the srcTxHash from bridgeStatusState so we don't have to l ook up in TransactionController\n // But it is possible to have bridgeHistoryItem in state without the srcTxHash yet when it is an STX\n const srcTxHash = txHistory[bridgeTxMetaId].status.srcChain.txHash;\n\n if (srcTxHash) {\n return srcTxHash;\n }\n\n // Look up in TransactionController if txMeta has been updated with the srcTxHash\n const txControllerState = this.messagingSystem.call(\n 'TransactionController:getState',\n );\n const txMeta = txControllerState.transactions.find(\n (tx: TransactionMeta) => tx.id === bridgeTxMetaId,\n );\n return txMeta?.hash;\n };\n\n readonly #updateSrcTxHash = (bridgeTxMetaId: string, srcTxHash: string) => {\n const { txHistory } = this.state;\n if (txHistory[bridgeTxMetaId].status.srcChain.txHash) {\n return;\n }\n\n this.update((state) => {\n state.txHistory[bridgeTxMetaId].status.srcChain.txHash = srcTxHash;\n });\n };\n\n // Wipes the bridge status for the given address and chainId\n // Will match only source chainId to the selectedChainId\n readonly #wipeBridgeStatusByChainId = (\n address: string,\n selectedChainId: Hex,\n ) => {\n const sourceTxMetaIdsToDelete = Object.keys(this.state.txHistory).filter(\n (txMetaId) => {\n const bridgeHistoryItem = this.state.txHistory[txMetaId];\n\n const hexSourceChainId = numberToHex(\n bridgeHistoryItem.quote.srcChainId,\n );\n\n return (\n bridgeHistoryItem.account === address &&\n hexSourceChainId === selectedChainId\n );\n },\n );\n\n sourceTxMetaIdsToDelete.forEach((sourceTxMetaId) => {\n const pollingToken = this.#pollingTokensByTxMetaId[sourceTxMetaId];\n\n if (pollingToken) {\n this.stopPollingByPollingToken(\n this.#pollingTokensByTxMetaId[sourceTxMetaId],\n );\n }\n });\n\n this.update((state) => {\n state.txHistory = sourceTxMetaIdsToDelete.reduce(\n (acc, sourceTxMetaId) => {\n delete acc[sourceTxMetaId];\n return acc;\n },\n state.txHistory,\n );\n });\n };\n\n /**\n * ******************************************************\n * TX SUBMISSION HANDLING\n *******************************************************\n */\n\n /**\n * Submits the transaction to the snap using the keyring rpc method\n * This adds an approval tx to the ApprovalsController in the background\n * The client needs to handle the approval tx by redirecting to the confirmation page with the approvalTxId in the URL\n *\n * @param quoteResponse - The quote response\n * @param quoteResponse.quote - The quote\n * @returns The transaction meta\n */\n readonly #handleSolanaTx = async (\n quoteResponse: QuoteResponse<string> & QuoteMetadata,\n ) => {\n const selectedAccount = this.#getMultichainSelectedAccount();\n if (!selectedAccount) {\n throw new Error(\n 'Failed to submit cross-chain swap transaction: undefined multichain account',\n );\n }\n if (!selectedAccount?.metadata?.snap?.id) {\n throw new Error(\n 'Failed to submit cross-chain swap transaction: undefined snap id',\n );\n }\n const keyringRequest = getKeyringRequest(quoteResponse, selectedAccount);\n const keyringResponse = (await this.messagingSystem.call(\n 'SnapController:handleRequest',\n keyringRequest,\n )) as string | { result: Record<string, string> };\n\n // The extension client actually redirects before it can do anytyhing with this meta\n const txMeta = handleSolanaTxResponse(\n keyringResponse,\n quoteResponse,\n selectedAccount,\n );\n\n // TODO remove this eventually, just returning it now to match extension behavior\n // OR if the snap can propagate the snapRequestId or keyringReqId to the ApprovalsController, this can return the approvalTxId instead and clients won't need to subscribe to the ApprovalsController state to redirect\n return txMeta;\n };\n\n readonly #waitForHashAndReturnFinalTxMeta = async (\n hashPromise?:\n | Awaited<ReturnType<TransactionController['addTransaction']>>['result']\n | Awaited<\n ReturnType<UserOperationController['addUserOperationFromTransaction']>\n >['hash'],\n ): Promise<TransactionMeta | undefined> => {\n const transactionHash = await hashPromise;\n const finalTransactionMeta: TransactionMeta | undefined =\n this.messagingSystem\n .call('TransactionController:getState')\n .transactions.find(\n (tx: TransactionMeta) => tx.hash === transactionHash,\n );\n return finalTransactionMeta;\n };\n\n readonly #handleApprovalTx = async (\n quoteResponse: QuoteResponse<string | TxData> & QuoteMetadata,\n ): Promise<TransactionMeta | undefined> => {\n if (quoteResponse.approval) {\n await this.#handleUSDTAllowanceReset(quoteResponse);\n const approvalTxMeta = await this.#handleEvmTransaction(\n TransactionType.bridgeApproval,\n quoteResponse.approval,\n quoteResponse,\n );\n if (!approvalTxMeta) {\n throw new Error(\n 'Failed to submit bridge tx: approval txMeta is undefined',\n );\n }\n\n await handleLineaDelay(quoteResponse);\n return approvalTxMeta;\n }\n return undefined;\n };\n\n readonly #handleEvmSmartTransaction = async (\n trade: TxData,\n quoteResponse: Omit<QuoteResponse, 'approval' | 'trade'> & QuoteMetadata,\n approvalTxId?: string,\n ) => {\n return await this.#handleEvmTransaction(\n TransactionType.bridge,\n trade,\n quoteResponse,\n approvalTxId,\n false, // Set to false to indicate we don't want to wait for hash\n );\n };\n\n /**\n * Submits an EVM transaction to the TransactionController\n *\n * @param transactionType - The type of transaction to submit\n * @param trade - The trade data to confirm\n * @param quoteResponse - The quote response\n * @param quoteResponse.quote - The quote\n * @param approvalTxId - The tx id of the approval tx\n * @param shouldWaitForHash - Whether to wait for the hash of the transaction\n * @returns The transaction meta\n */\n readonly #handleEvmTransaction = async (\n transactionType: TransactionType,\n trade: TxData,\n quoteResponse: Omit<QuoteResponse, 'approval' | 'trade'> & QuoteMetadata,\n approvalTxId?: string,\n shouldWaitForHash = true,\n ): Promise<TransactionMeta | undefined> => {\n const actionId = generateActionId().toString();\n\n const selectedAccount = this.messagingSystem.call(\n 'AccountsController:getAccountByAddress',\n trade.from,\n );\n if (!selectedAccount) {\n throw new Error(\n 'Failed to submit cross-chain swap transaction: unknown account in trade data',\n );\n }\n const hexChainId = formatChainIdToHex(trade.chainId);\n const networkClientId = this.messagingSystem.call(\n 'NetworkController:findNetworkClientIdByChainId',\n hexChainId,\n );\n\n const requestOptions = {\n actionId,\n networkClientId,\n requireApproval: false,\n type: transactionType,\n origin: 'metamask',\n };\n const transactionParams: Parameters<\n TransactionController['addTransaction']\n >[0] = {\n ...trade,\n chainId: hexChainId,\n gasLimit: trade.gasLimit?.toString(),\n gas: trade.gasLimit?.toString(),\n };\n const transactionParamsWithMaxGas: TransactionParams = {\n ...transactionParams,\n ...(await this.#calculateGasFees(\n transactionParams,\n networkClientId,\n hexChainId,\n )),\n };\n\n let result:\n | Awaited<ReturnType<TransactionController['addTransaction']>>['result']\n | Awaited<\n ReturnType<UserOperationController['addUserOperationFromTransaction']>\n >['hash']\n | undefined;\n let transactionMeta: TransactionMeta | undefined;\n\n const isSmartContractAccount =\n selectedAccount.type === EthAccountType.Erc4337;\n if (isSmartContractAccount && this.#addUserOperationFromTransactionFn) {\n const smartAccountTxResult =\n await this.#addUserOperationFromTransactionFn(\n transactionParamsWithMaxGas,\n requestOptions,\n );\n result = smartAccountTxResult.transactionHash;\n transactionMeta = {\n ...requestOptions,\n chainId: hexChainId,\n txParams: transactionParamsWithMaxGas,\n time: Date.now(),\n id: smartAccountTxResult.id,\n status: TransactionStatus.confirmed,\n };\n } else {\n const addTransactionResult = await this.#addTransactionFn(\n transactionParamsWithMaxGas,\n requestOptions,\n );\n result = addTransactionResult.result;\n transactionMeta = addTransactionResult.transactionMeta;\n }\n\n if (shouldWaitForHash) {\n return await this.#waitForHashAndReturnFinalTxMeta(result);\n }\n\n // TODO why is this needed?\n // Note that updateTransaction doesn't actually error if you add fields that don't conform the to the txMeta type\n // they will be there at runtime, but you just don't get any type safety checks on them\n // const fieldsToAddToTxMeta = getTxMetaFields(quoteResponse, approvalTxId);\n // dispatch(updateTransaction(completeTxMeta);\n\n return {\n ...getTxMetaFields(quoteResponse, approvalTxId),\n ...transactionMeta,\n };\n };\n\n // Only adds tokens if the source or dest chain is an EVM chain bc non-evm tokens\n // are detected by the multichain asset controllers\n readonly #addTokens = (asset: BridgeAsset) => {\n if (isNativeAddress(asset.address) || isSolanaChainId(asset.chainId)) {\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.messagingSystem.call(\n 'TokensController:addDetectedTokens',\n [\n {\n address: asset.address,\n decimals: asset.decimals,\n image: asset.iconUrl,\n name: asset.name,\n symbol: asset.symbol,\n },\n ],\n {\n chainId: formatChainIdToHex(asset.chainId),\n selectedAddress: this.#getMultichainSelectedAccountAddress(),\n },\n );\n };\n\n readonly #handleUSDTAllowanceReset = async (\n quoteResponse: QuoteResponse<TxData | string> & QuoteMetadata,\n ) => {\n const hexChainId = formatChainIdToHex(quoteResponse.quote.srcChainId);\n if (\n quoteResponse.approval &&\n isEthUsdt(hexChainId, quoteResponse.quote.srcAsset.address)\n ) {\n const allowance = new BigNumber(\n await this.messagingSystem.call(\n 'BridgeController:getBridgeERC20Allowance',\n quoteResponse.quote.srcAsset.address,\n hexChainId,\n ),\n );\n const shouldResetApproval =\n allowance.lt(quoteResponse.sentAmount.amount) && allowance.gt(0);\n if (shouldResetApproval) {\n await this.#handleEvmTransaction(\n TransactionType.bridgeApproval,\n { ...quoteResponse.approval, data: getEthUsdtResetData() },\n quoteResponse,\n );\n }\n }\n };\n\n readonly #calculateGasFees = async (\n transactionParams: TransactionParams,\n networkClientId: string,\n chainId: Hex,\n ) => {\n const { gasFeeEstimates } = this.messagingSystem.call(\n 'GasFeeController:getState',\n );\n const { estimates: txGasFeeEstimates } = await this.#estimateGasFeeFn({\n transactionParams,\n chainId,\n networkClientId,\n });\n const { maxFeePerGas, maxPriorityFeePerGas } = getTxGasEstimates({\n networkGasFeeEstimates: gasFeeEstimates,\n txGasFeeEstimates,\n });\n const maxGasLimit = toHex(transactionParams.gas ?? 0);\n\n return {\n maxFeePerGas,\n maxPriorityFeePerGas,\n gas: maxGasLimit,\n };\n };\n\n /**\n * Submits a cross-chain swap transaction\n *\n * @param quoteResponse - The quote response\n * @param isStxEnabledOnClient - Whether smart transactions are enabled on the client, for example the getSmartTransactionsEnabled selector value from the extension\n * @returns The transaction meta\n */\n submitTx = async (\n quoteResponse: QuoteResponse<TxData | string> & QuoteMetadata,\n isStxEnabledOnClient: boolean,\n ) => {\n let txMeta: (TransactionMeta & Partial<SolanaTransactionMeta>) | undefined;\n // Submit SOLANA tx\n if (\n isSolanaChainId(quoteResponse.quote.srcChainId) &&\n typeof quoteResponse.trade === 'string'\n ) {\n txMeta = await this.#handleSolanaTx(\n quoteResponse as QuoteResponse<string> & QuoteMetadata,\n );\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.SnapConfirmationViewed,\n txMeta.id,\n );\n }\n // Submit EVM tx\n let approvalTime: number | undefined, approvalTxId: string | undefined;\n if (\n !isSolanaChainId(quoteResponse.quote.srcChainId) &&\n typeof quoteResponse.trade !== 'string'\n ) {\n // Set approval time and id if an approval tx is needed\n const approvalTxMeta = await this.#handleApprovalTx(quoteResponse);\n approvalTime = approvalTxMeta?.time;\n approvalTxId = approvalTxMeta?.id;\n // Handle smart transactions if enabled\n if (isStxEnabledOnClient) {\n txMeta = await this.#handleEvmSmartTransaction(\n quoteResponse.trade,\n quoteResponse,\n approvalTxId,\n );\n } else {\n txMeta = await this.#handleEvmTransaction(\n TransactionType.bridge,\n quoteResponse.trade,\n quoteResponse,\n approvalTxId,\n );\n }\n }\n\n if (!txMeta) {\n throw new Error('Failed to submit bridge tx: txMeta is undefined');\n }\n\n try {\n // Start polling for bridge tx status\n this.startPollingForBridgeTxStatus({\n bridgeTxMeta: txMeta, // Only the id field is used by the BridgeStatusController\n statusRequest: {\n ...getStatusRequestParams(quoteResponse),\n srcTxHash: txMeta.hash,\n },\n quoteResponse,\n slippagePercentage: 0, // TODO include slippage provided by quote if using dynamic slippage, or slippage from quote request\n isStxEnabled: isStxEnabledOnClient,\n startTime: approvalTime ?? Date.now(),\n approvalTxId,\n });\n\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Submitted,\n txMeta.id,\n );\n\n // Add tokens to the token list\n this.#addTokens(quoteResponse.quote.srcAsset);\n this.#addTokens(quoteResponse.quote.destAsset);\n } catch {\n // Ignore errors here, we don't want to crash the app if this fails and tx submission succeeds\n }\n return txMeta;\n };\n\n /**\n * Tracks post-submission events for a cross-chain swap based on the history item\n *\n * @param eventName - The name of the event to track\n * @param txMetaId - The txMetaId of the history item to track the event for\n */\n readonly #trackUnifiedSwapBridgeEvent = <\n T extends\n | typeof UnifiedSwapBridgeEventName.Submitted\n | typeof UnifiedSwapBridgeEventName.Failed\n | typeof UnifiedSwapBridgeEventName.SnapConfirmationViewed\n | typeof UnifiedSwapBridgeEventName.Completed,\n >(\n eventName: T,\n txMetaId: string,\n ) => {\n const historyItem: BridgeHistoryItem | undefined =\n this.state.txHistory[txMetaId];\n if (!historyItem) {\n this.messagingSystem.call(\n 'BridgeController:trackUnifiedSwapBridgeEvent',\n eventName,\n {},\n );\n return;\n }\n\n let requiredEventProperties: Pick<RequiredEventContextFromClient, T>[T];\n const selectedAccount = this.messagingSystem.call(\n 'AccountsController:getAccountByAddress',\n historyItem.account,\n );\n\n switch (eventName) {\n case UnifiedSwapBridgeEventName.Submitted:\n case UnifiedSwapBridgeEventName.Completed:\n case UnifiedSwapBridgeEventName.Failed:\n default:\n requiredEventProperties = {\n action_type: getActionType(\n historyItem.quote.srcChainId,\n historyItem.quote.destChainId,\n ),\n ...getRequestParamFromHistory(historyItem),\n ...getRequestMetadataFromHistory(historyItem, selectedAccount),\n ...getTradeDataFromHistory(historyItem),\n ...getTxStatusesFromHistory(historyItem),\n ...getFinalizedTxProperties(historyItem),\n error_message: 'error_message',\n };\n }\n\n this.messagingSystem.call(\n 'BridgeController:trackUnifiedSwapBridgeEvent',\n eventName,\n requiredEventProperties,\n );\n };\n}\n"]}
|
1
|
+
{"version":3,"file":"bridge-status-controller.mjs","sourceRoot":"","sources":["../src/bridge-status-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { StateMetadata } from '@metamask/base-controller';\nimport type {\n QuoteMetadata,\n RequiredEventContextFromClient,\n TxData,\n QuoteResponse,\n} from '@metamask/bridge-controller';\nimport {\n formatChainIdToHex,\n getEthUsdtResetData,\n isEthUsdt,\n isSolanaChainId,\n StatusTypes,\n UnifiedSwapBridgeEventName,\n getActionType,\n} from '@metamask/bridge-controller';\nimport { toHex } from '@metamask/controller-utils';\nimport { EthAccountType } from '@metamask/keyring-api';\nimport { StaticIntervalPollingController } from '@metamask/polling-controller';\nimport type {\n TransactionController,\n TransactionParams,\n} from '@metamask/transaction-controller';\nimport {\n TransactionStatus,\n TransactionType,\n type TransactionMeta,\n} from '@metamask/transaction-controller';\nimport type { UserOperationController } from '@metamask/user-operation-controller';\nimport { numberToHex, type Hex } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport {\n BRIDGE_PROD_API_BASE_URL,\n BRIDGE_STATUS_CONTROLLER_NAME,\n DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE,\n REFRESH_INTERVAL_MS,\n} from './constants';\nimport { type BridgeStatusControllerMessenger } from './types';\nimport type {\n BridgeStatusControllerState,\n StartPollingForBridgeTxStatusArgsSerialized,\n FetchFunction,\n BridgeClientId,\n SolanaTransactionMeta,\n BridgeHistoryItem,\n} from './types';\nimport {\n fetchBridgeTxStatus,\n getStatusRequestWithSrcTxHash,\n} from './utils/bridge-status';\nimport { getTxGasEstimates } from './utils/gas';\nimport {\n getFinalizedTxProperties,\n getRequestMetadataFromHistory,\n getRequestParamFromHistory,\n getTradeDataFromHistory,\n getTxStatusesFromHistory,\n} from './utils/metrics';\nimport {\n getKeyringRequest,\n getStatusRequestParams,\n getTxMetaFields,\n handleLineaDelay,\n handleSolanaTxResponse,\n} from './utils/transaction';\nimport { generateActionId } from './utils/transaction';\n\nconst metadata: StateMetadata<BridgeStatusControllerState> = {\n // We want to persist the bridge status state so that we can show the proper data for the Activity list\n // basically match the behavior of TransactionController\n txHistory: {\n persist: true,\n anonymous: false,\n },\n};\n\n/** The input to start polling for the {@link BridgeStatusController} */\ntype BridgeStatusPollingInput = FetchBridgeTxStatusArgs;\n\ntype SrcTxMetaId = string;\nexport type FetchBridgeTxStatusArgs = {\n bridgeTxMetaId: string;\n};\nexport class BridgeStatusController extends StaticIntervalPollingController<BridgeStatusPollingInput>()<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerState,\n BridgeStatusControllerMessenger\n> {\n #pollingTokensByTxMetaId: Record<SrcTxMetaId, string> = {};\n\n readonly #clientId: BridgeClientId;\n\n readonly #fetchFn: FetchFunction;\n\n readonly #config: {\n customBridgeApiBaseUrl: string;\n };\n\n readonly #addTransactionFn: typeof TransactionController.prototype.addTransaction;\n\n readonly #estimateGasFeeFn: typeof TransactionController.prototype.estimateGasFee;\n\n readonly #addUserOperationFromTransactionFn?: typeof UserOperationController.prototype.addUserOperationFromTransaction;\n\n constructor({\n messenger,\n state,\n clientId,\n fetchFn,\n addTransactionFn,\n addUserOperationFromTransactionFn,\n estimateGasFeeFn,\n config,\n }: {\n messenger: BridgeStatusControllerMessenger;\n state?: Partial<BridgeStatusControllerState>;\n clientId: BridgeClientId;\n fetchFn: FetchFunction;\n addTransactionFn: typeof TransactionController.prototype.addTransaction;\n estimateGasFeeFn: typeof TransactionController.prototype.estimateGasFee;\n addUserOperationFromTransactionFn?: typeof UserOperationController.prototype.addUserOperationFromTransaction;\n config?: {\n customBridgeApiBaseUrl?: string;\n };\n }) {\n super({\n name: BRIDGE_STATUS_CONTROLLER_NAME,\n metadata,\n messenger,\n // Restore the persisted state\n state: {\n ...DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE,\n ...state,\n },\n });\n\n this.#clientId = clientId;\n this.#fetchFn = fetchFn;\n this.#addTransactionFn = addTransactionFn;\n this.#addUserOperationFromTransactionFn = addUserOperationFromTransactionFn;\n this.#estimateGasFeeFn = estimateGasFeeFn;\n this.#config = {\n customBridgeApiBaseUrl:\n config?.customBridgeApiBaseUrl ?? BRIDGE_PROD_API_BASE_URL,\n };\n\n // Register action handlers\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:startPollingForBridgeTxStatus`,\n this.startPollingForBridgeTxStatus.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:wipeBridgeStatus`,\n this.wipeBridgeStatus.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:resetState`,\n this.resetState.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:submitTx`,\n this.submitTx.bind(this),\n );\n\n // Set interval\n this.setIntervalLength(REFRESH_INTERVAL_MS);\n\n // If you close the extension, but keep the browser open, the polling continues\n // If you close the browser, the polling stops\n // Check for historyItems that do not have a status of complete and restart polling\n this.#restartPollingForIncompleteHistoryItems();\n }\n\n resetState = () => {\n this.update((state) => {\n state.txHistory = DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE.txHistory;\n });\n };\n\n wipeBridgeStatus = ({\n address,\n ignoreNetwork,\n }: {\n address: string;\n ignoreNetwork: boolean;\n }) => {\n // Wipe all networks for this address\n if (ignoreNetwork) {\n this.update((state) => {\n state.txHistory = DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE.txHistory;\n });\n } else {\n const { selectedNetworkClientId } = this.messagingSystem.call(\n 'NetworkController:getState',\n );\n const selectedNetworkClient = this.messagingSystem.call(\n 'NetworkController:getNetworkClientById',\n selectedNetworkClientId,\n );\n const selectedChainId = selectedNetworkClient.configuration.chainId;\n\n this.#wipeBridgeStatusByChainId(address, selectedChainId);\n }\n };\n\n readonly #restartPollingForIncompleteHistoryItems = () => {\n // Check for historyItems that do not have a status of complete and restart polling\n const { txHistory } = this.state;\n const historyItems = Object.values(txHistory);\n const incompleteHistoryItems = historyItems\n .filter(\n (historyItem) =>\n historyItem.status.status === StatusTypes.PENDING ||\n historyItem.status.status === StatusTypes.UNKNOWN,\n )\n .filter((historyItem) => {\n // Check if we are already polling this tx, if so, skip restarting polling for that\n const srcTxMetaId = historyItem.txMetaId;\n const pollingToken = this.#pollingTokensByTxMetaId[srcTxMetaId];\n return !pollingToken;\n });\n\n incompleteHistoryItems.forEach((historyItem) => {\n const bridgeTxMetaId = historyItem.txMetaId;\n\n // We manually call startPolling() here rather than go through startPollingForBridgeTxStatus()\n // because we don't want to overwrite the existing historyItem in state\n this.#pollingTokensByTxMetaId[bridgeTxMetaId] = this.startPolling({\n bridgeTxMetaId,\n });\n });\n };\n\n /**\n * Starts polling for the bridge tx status\n *\n * @param startPollingForBridgeTxStatusArgs - The args to start polling for the bridge tx status\n */\n startPollingForBridgeTxStatus = (\n startPollingForBridgeTxStatusArgs: StartPollingForBridgeTxStatusArgsSerialized,\n ) => {\n const {\n bridgeTxMeta,\n statusRequest,\n quoteResponse,\n startTime,\n slippagePercentage,\n initialDestAssetBalance,\n targetContractAddress,\n approvalTxId,\n isStxEnabled,\n } = startPollingForBridgeTxStatusArgs;\n const accountAddress = this.#getMultichainSelectedAccountAddress();\n // Write all non-status fields to state so we can reference the quote in Activity list without the Bridge API\n // We know it's in progress but not the exact status yet\n const txHistoryItem = {\n txMetaId: bridgeTxMeta.id,\n quote: quoteResponse.quote,\n startTime,\n estimatedProcessingTimeInSeconds:\n quoteResponse.estimatedProcessingTimeInSeconds,\n slippagePercentage,\n pricingData: {\n amountSent: quoteResponse.sentAmount.amount,\n amountSentInUsd: quoteResponse.sentAmount.usd ?? undefined,\n quotedGasInUsd: quoteResponse.gasFee.usd ?? undefined,\n quotedReturnInUsd: quoteResponse.toTokenAmount.usd ?? undefined,\n },\n initialDestAssetBalance,\n targetContractAddress,\n account: accountAddress,\n status: {\n // We always have a PENDING status when we start polling for a tx, don't need the Bridge API for that\n // Also we know the bare minimum fields for status at this point in time\n status: StatusTypes.PENDING,\n srcChain: {\n chainId: statusRequest.srcChainId,\n txHash: statusRequest.srcTxHash,\n },\n },\n hasApprovalTx: Boolean(quoteResponse.approval),\n approvalTxId,\n isStxEnabled: isStxEnabled ?? false,\n };\n this.update((state) => {\n // Use the txMeta.id as the key so we can reference the txMeta in TransactionController\n state.txHistory[bridgeTxMeta.id] = txHistoryItem;\n });\n\n this.#pollingTokensByTxMetaId[bridgeTxMeta.id] = this.startPolling({\n bridgeTxMetaId: bridgeTxMeta.id,\n });\n };\n\n // This will be called after you call this.startPolling()\n // The args passed in are the args you passed in to startPolling()\n _executePoll = async (pollingInput: BridgeStatusPollingInput) => {\n await this.#fetchBridgeTxStatus(pollingInput);\n };\n\n #getMultichainSelectedAccount() {\n return this.messagingSystem.call(\n 'AccountsController:getSelectedMultichainAccount',\n );\n }\n\n #getMultichainSelectedAccountAddress() {\n return this.#getMultichainSelectedAccount()?.address ?? '';\n }\n\n readonly #fetchBridgeTxStatus = async ({\n bridgeTxMetaId,\n }: FetchBridgeTxStatusArgs) => {\n const { txHistory } = this.state;\n\n try {\n // We try here because we receive 500 errors from Bridge API if we try to fetch immediately after submitting the source tx\n // Oddly mostly happens on Optimism, never on Arbitrum. By the 2nd fetch, the Bridge API responds properly.\n // Also srcTxHash may not be available immediately for STX, so we don't want to fetch in those cases\n const historyItem = txHistory[bridgeTxMetaId];\n const srcTxHash = this.#getSrcTxHash(bridgeTxMetaId);\n if (!srcTxHash) {\n return;\n }\n\n this.#updateSrcTxHash(bridgeTxMetaId, srcTxHash);\n\n const statusRequest = getStatusRequestWithSrcTxHash(\n historyItem.quote,\n srcTxHash,\n );\n const status = await fetchBridgeTxStatus(\n statusRequest,\n this.#clientId,\n this.#fetchFn,\n this.#config.customBridgeApiBaseUrl,\n );\n const newBridgeHistoryItem = {\n ...historyItem,\n status,\n completionTime:\n status.status === StatusTypes.COMPLETE ||\n status.status === StatusTypes.FAILED\n ? Date.now()\n : undefined, // TODO make this more accurate by looking up dest txHash block time\n };\n\n // No need to purge these on network change or account change, TransactionController does not purge either.\n // TODO In theory we can skip checking status if it's not the current account/network\n // we need to keep track of the account that this is associated with as well so that we don't show it in Activity list for other accounts\n // First stab at this will not stop polling when you are on a different account\n this.update((state) => {\n state.txHistory[bridgeTxMetaId] = newBridgeHistoryItem;\n });\n\n const pollingToken = this.#pollingTokensByTxMetaId[bridgeTxMetaId];\n\n if (\n (status.status === StatusTypes.COMPLETE ||\n status.status === StatusTypes.FAILED) &&\n pollingToken\n ) {\n this.stopPollingByPollingToken(pollingToken);\n\n if (status.status === StatusTypes.COMPLETE) {\n this.messagingSystem.publish(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:bridgeTransactionComplete`,\n { bridgeHistoryItem: newBridgeHistoryItem },\n );\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Completed,\n bridgeTxMetaId,\n );\n }\n if (status.status === StatusTypes.FAILED) {\n this.messagingSystem.publish(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:bridgeTransactionFailed`,\n { bridgeHistoryItem: newBridgeHistoryItem },\n );\n\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Failed,\n bridgeTxMetaId,\n );\n }\n }\n } catch (e) {\n console.log('Failed to fetch bridge tx status', e);\n }\n };\n\n readonly #getSrcTxHash = (bridgeTxMetaId: string): string | undefined => {\n const { txHistory } = this.state;\n // Prefer the srcTxHash from bridgeStatusState so we don't have to l ook up in TransactionController\n // But it is possible to have bridgeHistoryItem in state without the srcTxHash yet when it is an STX\n const srcTxHash = txHistory[bridgeTxMetaId].status.srcChain.txHash;\n\n if (srcTxHash) {\n return srcTxHash;\n }\n\n // Look up in TransactionController if txMeta has been updated with the srcTxHash\n const txControllerState = this.messagingSystem.call(\n 'TransactionController:getState',\n );\n const txMeta = txControllerState.transactions.find(\n (tx: TransactionMeta) => tx.id === bridgeTxMetaId,\n );\n return txMeta?.hash;\n };\n\n readonly #updateSrcTxHash = (bridgeTxMetaId: string, srcTxHash: string) => {\n const { txHistory } = this.state;\n if (txHistory[bridgeTxMetaId].status.srcChain.txHash) {\n return;\n }\n\n this.update((state) => {\n state.txHistory[bridgeTxMetaId].status.srcChain.txHash = srcTxHash;\n });\n };\n\n // Wipes the bridge status for the given address and chainId\n // Will match only source chainId to the selectedChainId\n readonly #wipeBridgeStatusByChainId = (\n address: string,\n selectedChainId: Hex,\n ) => {\n const sourceTxMetaIdsToDelete = Object.keys(this.state.txHistory).filter(\n (txMetaId) => {\n const bridgeHistoryItem = this.state.txHistory[txMetaId];\n\n const hexSourceChainId = numberToHex(\n bridgeHistoryItem.quote.srcChainId,\n );\n\n return (\n bridgeHistoryItem.account === address &&\n hexSourceChainId === selectedChainId\n );\n },\n );\n\n sourceTxMetaIdsToDelete.forEach((sourceTxMetaId) => {\n const pollingToken = this.#pollingTokensByTxMetaId[sourceTxMetaId];\n\n if (pollingToken) {\n this.stopPollingByPollingToken(\n this.#pollingTokensByTxMetaId[sourceTxMetaId],\n );\n }\n });\n\n this.update((state) => {\n state.txHistory = sourceTxMetaIdsToDelete.reduce(\n (acc, sourceTxMetaId) => {\n delete acc[sourceTxMetaId];\n return acc;\n },\n state.txHistory,\n );\n });\n };\n\n /**\n * ******************************************************\n * TX SUBMISSION HANDLING\n *******************************************************\n */\n\n /**\n * Submits the transaction to the snap using the keyring rpc method\n * This adds an approval tx to the ApprovalsController in the background\n * The client needs to handle the approval tx by redirecting to the confirmation page with the approvalTxId in the URL\n *\n * @param quoteResponse - The quote response\n * @param quoteResponse.quote - The quote\n * @returns The transaction meta\n */\n readonly #handleSolanaTx = async (\n quoteResponse: QuoteResponse<string> & QuoteMetadata,\n ) => {\n const selectedAccount = this.#getMultichainSelectedAccount();\n if (!selectedAccount) {\n throw new Error(\n 'Failed to submit cross-chain swap transaction: undefined multichain account',\n );\n }\n if (!selectedAccount?.metadata?.snap?.id) {\n throw new Error(\n 'Failed to submit cross-chain swap transaction: undefined snap id',\n );\n }\n const keyringRequest = getKeyringRequest(quoteResponse, selectedAccount);\n const keyringResponse = (await this.messagingSystem.call(\n 'SnapController:handleRequest',\n keyringRequest,\n )) as string | { result: Record<string, string> };\n\n // The extension client actually redirects before it can do anytyhing with this meta\n const txMeta = handleSolanaTxResponse(\n keyringResponse,\n quoteResponse,\n selectedAccount,\n );\n\n // TODO remove this eventually, just returning it now to match extension behavior\n // OR if the snap can propagate the snapRequestId or keyringReqId to the ApprovalsController, this can return the approvalTxId instead and clients won't need to subscribe to the ApprovalsController state to redirect\n return txMeta;\n };\n\n readonly #waitForHashAndReturnFinalTxMeta = async (\n hashPromise?:\n | Awaited<ReturnType<TransactionController['addTransaction']>>['result']\n | Awaited<\n ReturnType<UserOperationController['addUserOperationFromTransaction']>\n >['hash'],\n ): Promise<TransactionMeta | undefined> => {\n const transactionHash = await hashPromise;\n const finalTransactionMeta: TransactionMeta | undefined =\n this.messagingSystem\n .call('TransactionController:getState')\n .transactions.find(\n (tx: TransactionMeta) => tx.hash === transactionHash,\n );\n return finalTransactionMeta;\n };\n\n readonly #handleApprovalTx = async (\n quoteResponse: QuoteResponse<string | TxData> & QuoteMetadata,\n ): Promise<TransactionMeta | undefined> => {\n if (quoteResponse.approval) {\n await this.#handleUSDTAllowanceReset(quoteResponse);\n const approvalTxMeta = await this.#handleEvmTransaction(\n TransactionType.bridgeApproval,\n quoteResponse.approval,\n quoteResponse,\n );\n if (!approvalTxMeta) {\n throw new Error(\n 'Failed to submit bridge tx: approval txMeta is undefined',\n );\n }\n\n await handleLineaDelay(quoteResponse);\n return approvalTxMeta;\n }\n return undefined;\n };\n\n readonly #handleEvmSmartTransaction = async (\n trade: TxData,\n quoteResponse: Omit<QuoteResponse, 'approval' | 'trade'> & QuoteMetadata,\n approvalTxId?: string,\n ) => {\n return await this.#handleEvmTransaction(\n TransactionType.bridge,\n trade,\n quoteResponse,\n approvalTxId,\n false, // Set to false to indicate we don't want to wait for hash\n );\n };\n\n /**\n * Submits an EVM transaction to the TransactionController\n *\n * @param transactionType - The type of transaction to submit\n * @param trade - The trade data to confirm\n * @param quoteResponse - The quote response\n * @param quoteResponse.quote - The quote\n * @param approvalTxId - The tx id of the approval tx\n * @param shouldWaitForHash - Whether to wait for the hash of the transaction\n * @returns The transaction meta\n */\n readonly #handleEvmTransaction = async (\n transactionType: TransactionType,\n trade: TxData,\n quoteResponse: Omit<QuoteResponse, 'approval' | 'trade'> & QuoteMetadata,\n approvalTxId?: string,\n shouldWaitForHash = true,\n ): Promise<TransactionMeta | undefined> => {\n const actionId = generateActionId().toString();\n\n const selectedAccount = this.messagingSystem.call(\n 'AccountsController:getAccountByAddress',\n trade.from,\n );\n if (!selectedAccount) {\n throw new Error(\n 'Failed to submit cross-chain swap transaction: unknown account in trade data',\n );\n }\n const hexChainId = formatChainIdToHex(trade.chainId);\n const networkClientId = this.messagingSystem.call(\n 'NetworkController:findNetworkClientIdByChainId',\n hexChainId,\n );\n\n const requestOptions = {\n actionId,\n networkClientId,\n requireApproval: false,\n type: transactionType,\n origin: 'metamask',\n };\n const transactionParams: Parameters<\n TransactionController['addTransaction']\n >[0] = {\n ...trade,\n chainId: hexChainId,\n gasLimit: trade.gasLimit?.toString(),\n gas: trade.gasLimit?.toString(),\n };\n const transactionParamsWithMaxGas: TransactionParams = {\n ...transactionParams,\n ...(await this.#calculateGasFees(\n transactionParams,\n networkClientId,\n hexChainId,\n )),\n };\n\n let result:\n | Awaited<ReturnType<TransactionController['addTransaction']>>['result']\n | Awaited<\n ReturnType<UserOperationController['addUserOperationFromTransaction']>\n >['hash']\n | undefined;\n let transactionMeta: TransactionMeta | undefined;\n\n const isSmartContractAccount =\n selectedAccount.type === EthAccountType.Erc4337;\n if (isSmartContractAccount && this.#addUserOperationFromTransactionFn) {\n const smartAccountTxResult =\n await this.#addUserOperationFromTransactionFn(\n transactionParamsWithMaxGas,\n requestOptions,\n );\n result = smartAccountTxResult.transactionHash;\n transactionMeta = {\n ...requestOptions,\n chainId: hexChainId,\n txParams: transactionParamsWithMaxGas,\n time: Date.now(),\n id: smartAccountTxResult.id,\n status: TransactionStatus.confirmed,\n };\n } else {\n const addTransactionResult = await this.#addTransactionFn(\n transactionParamsWithMaxGas,\n requestOptions,\n );\n result = addTransactionResult.result;\n transactionMeta = addTransactionResult.transactionMeta;\n }\n\n if (shouldWaitForHash) {\n return await this.#waitForHashAndReturnFinalTxMeta(result);\n }\n\n return {\n ...getTxMetaFields(quoteResponse, approvalTxId),\n ...transactionMeta,\n };\n };\n\n readonly #handleUSDTAllowanceReset = async (\n quoteResponse: QuoteResponse<TxData | string> & QuoteMetadata,\n ) => {\n const hexChainId = formatChainIdToHex(quoteResponse.quote.srcChainId);\n if (\n quoteResponse.approval &&\n isEthUsdt(hexChainId, quoteResponse.quote.srcAsset.address)\n ) {\n const allowance = new BigNumber(\n await this.messagingSystem.call(\n 'BridgeController:getBridgeERC20Allowance',\n quoteResponse.quote.srcAsset.address,\n hexChainId,\n ),\n );\n const shouldResetApproval =\n allowance.lt(quoteResponse.sentAmount.amount) && allowance.gt(0);\n if (shouldResetApproval) {\n await this.#handleEvmTransaction(\n TransactionType.bridgeApproval,\n { ...quoteResponse.approval, data: getEthUsdtResetData() },\n quoteResponse,\n );\n }\n }\n };\n\n readonly #calculateGasFees = async (\n transactionParams: TransactionParams,\n networkClientId: string,\n chainId: Hex,\n ) => {\n const { gasFeeEstimates } = this.messagingSystem.call(\n 'GasFeeController:getState',\n );\n const { estimates: txGasFeeEstimates } = await this.#estimateGasFeeFn({\n transactionParams,\n chainId,\n networkClientId,\n });\n const { maxFeePerGas, maxPriorityFeePerGas } = getTxGasEstimates({\n networkGasFeeEstimates: gasFeeEstimates,\n txGasFeeEstimates,\n });\n const maxGasLimit = toHex(transactionParams.gas ?? 0);\n\n return {\n maxFeePerGas,\n maxPriorityFeePerGas,\n gas: maxGasLimit,\n };\n };\n\n /**\n * Submits a cross-chain swap transaction\n *\n * @param quoteResponse - The quote response\n * @param isStxEnabledOnClient - Whether smart transactions are enabled on the client, for example the getSmartTransactionsEnabled selector value from the extension\n * @returns The transaction meta\n */\n submitTx = async (\n quoteResponse: QuoteResponse<TxData | string> & QuoteMetadata,\n isStxEnabledOnClient: boolean,\n ) => {\n let txMeta: (TransactionMeta & Partial<SolanaTransactionMeta>) | undefined;\n // Submit SOLANA tx\n if (\n isSolanaChainId(quoteResponse.quote.srcChainId) &&\n typeof quoteResponse.trade === 'string'\n ) {\n txMeta = await this.#handleSolanaTx(\n quoteResponse as QuoteResponse<string> & QuoteMetadata,\n );\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.SnapConfirmationViewed,\n txMeta.id,\n );\n }\n // Submit EVM tx\n let approvalTime: number | undefined, approvalTxId: string | undefined;\n if (\n !isSolanaChainId(quoteResponse.quote.srcChainId) &&\n typeof quoteResponse.trade !== 'string'\n ) {\n // Set approval time and id if an approval tx is needed\n const approvalTxMeta = await this.#handleApprovalTx(quoteResponse);\n approvalTime = approvalTxMeta?.time;\n approvalTxId = approvalTxMeta?.id;\n // Handle smart transactions if enabled\n if (isStxEnabledOnClient) {\n txMeta = await this.#handleEvmSmartTransaction(\n quoteResponse.trade,\n quoteResponse,\n approvalTxId,\n );\n } else {\n txMeta = await this.#handleEvmTransaction(\n TransactionType.bridge,\n quoteResponse.trade,\n quoteResponse,\n approvalTxId,\n );\n }\n }\n\n if (!txMeta) {\n throw new Error('Failed to submit bridge tx: txMeta is undefined');\n }\n\n try {\n // Start polling for bridge tx status\n this.startPollingForBridgeTxStatus({\n bridgeTxMeta: txMeta, // Only the id field is used by the BridgeStatusController\n statusRequest: {\n ...getStatusRequestParams(quoteResponse),\n srcTxHash: txMeta.hash,\n },\n quoteResponse,\n slippagePercentage: 0, // TODO include slippage provided by quote if using dynamic slippage, or slippage from quote request\n isStxEnabled: isStxEnabledOnClient,\n startTime: approvalTime ?? Date.now(),\n approvalTxId,\n });\n\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Submitted,\n txMeta.id,\n );\n } catch {\n // Ignore errors here, we don't want to crash the app if this fails and tx submission succeeds\n }\n return txMeta;\n };\n\n /**\n * Tracks post-submission events for a cross-chain swap based on the history item\n *\n * @param eventName - The name of the event to track\n * @param txMetaId - The txMetaId of the history item to track the event for\n */\n readonly #trackUnifiedSwapBridgeEvent = <\n T extends\n | typeof UnifiedSwapBridgeEventName.Submitted\n | typeof UnifiedSwapBridgeEventName.Failed\n | typeof UnifiedSwapBridgeEventName.SnapConfirmationViewed\n | typeof UnifiedSwapBridgeEventName.Completed,\n >(\n eventName: T,\n txMetaId: string,\n ) => {\n const historyItem: BridgeHistoryItem | undefined =\n this.state.txHistory[txMetaId];\n if (!historyItem) {\n this.messagingSystem.call(\n 'BridgeController:trackUnifiedSwapBridgeEvent',\n eventName,\n {},\n );\n return;\n }\n\n let requiredEventProperties: Pick<RequiredEventContextFromClient, T>[T];\n const selectedAccount = this.messagingSystem.call(\n 'AccountsController:getAccountByAddress',\n historyItem.account,\n );\n\n switch (eventName) {\n case UnifiedSwapBridgeEventName.Submitted:\n case UnifiedSwapBridgeEventName.Completed:\n case UnifiedSwapBridgeEventName.Failed:\n default:\n requiredEventProperties = {\n action_type: getActionType(\n historyItem.quote.srcChainId,\n historyItem.quote.destChainId,\n ),\n ...getRequestParamFromHistory(historyItem),\n ...getRequestMetadataFromHistory(historyItem, selectedAccount),\n ...getTradeDataFromHistory(historyItem),\n ...getTxStatusesFromHistory(historyItem),\n ...getFinalizedTxProperties(historyItem),\n error_message: 'error_message',\n };\n }\n\n this.messagingSystem.call(\n 'BridgeController:trackUnifiedSwapBridgeEvent',\n eventName,\n requiredEventProperties,\n );\n };\n}\n"]}
|
package/dist/types.cjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.cjs","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAmCA,8EAA8E;AAC9E,2BAA2B;AAE3B,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,yCAAuB,CAAA;IACvB,mCAAiB,CAAA;AACnB,CAAC,EAHW,cAAc,8BAAd,cAAc,QAGzB;AA2ED,IAAY,QAaX;AAbD,WAAY,QAAQ;IAClB,uBAAW,CAAA;IACX,2BAAe,CAAA;IACf,uCAA2B,CAAA;IAC3B,+BAAmB,CAAA;IACnB,+BAAmB,CAAA;IACnB,mCAAuB,CAAA;IACvB,qCAAyB,CAAA;IACzB,6BAAiB,CAAA;IACjB,6BAAiB,CAAA;IACjB,iCAAqB,CAAA;IACrB,2BAAe,CAAA;IACf,2BAAe,CAAA;AACjB,CAAC,EAbW,QAAQ,wBAAR,QAAQ,QAanB;AAED,IAAY,OAGX;AAHD,WAAY,OAAO;IACjB,oCAAyB,CAAA;IACzB,4BAAiB,CAAA;AACnB,CAAC,EAHW,OAAO,uBAAP,OAAO,QAGlB;AAaD,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,gCAAiB,CAAA;IACjB,4BAAa,CAAA;IACb,gCAAiB,CAAA;AACnB,CAAC,EAJW,WAAW,2BAAX,WAAW,QAItB;AAsDD,IAAY,kBAMX;AAND,WAAY,kBAAkB;IAC5B,0FAAoE,CAAA;IACpE,6DAAuC,CAAA;IACvC,4CAAsB,CAAA;IACtB,gDAA0B,CAAA;IAC1B,4CAAsB,CAAA;AACxB,CAAC,EANW,kBAAkB,kCAAlB,kBAAkB,QAM7B","sourcesContent":["import type {\n AccountsControllerGetAccountByAddressAction,\n AccountsControllerGetSelectedMultichainAccountAction,\n} from '@metamask/accounts-controller';\nimport type { TokensControllerAddDetectedTokensAction } from '@metamask/assets-controllers';\nimport type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n RestrictedMessenger,\n} from '@metamask/base-controller';\nimport type {\n BridgeBackgroundAction,\n BridgeControllerAction,\n ChainId,\n Quote,\n QuoteMetadata,\n QuoteResponse,\n StatusTypes,\n TxData,\n} from '@metamask/bridge-controller';\nimport type { GetGasFeeState } from '@metamask/gas-fee-controller';\nimport type {\n NetworkControllerFindNetworkClientIdByChainIdAction,\n NetworkControllerGetNetworkClientByIdAction,\n NetworkControllerGetStateAction,\n} from '@metamask/network-controller';\nimport type { HandleSnapRequest } from '@metamask/snaps-controllers';\nimport type {\n TransactionControllerGetStateAction,\n TransactionMeta,\n} from '@metamask/transaction-controller';\n\nimport type { BridgeStatusController } from './bridge-status-controller';\nimport type { BRIDGE_STATUS_CONTROLLER_NAME } from './constants';\n\n// All fields need to be types not interfaces, same with their children fields\n// o/w you get a type error\n\nexport enum BridgeClientId {\n EXTENSION = 'extension',\n MOBILE = 'mobile',\n}\n\nexport type FetchFunction = (\n input: RequestInfo | URL,\n init?: RequestInit,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n) => Promise<any>;\n\n/**\n * These fields are specific to Solana transactions and can likely be infered from TransactionMeta\n *\n * @deprecated these should be removed eventually\n */\nexport type SolanaTransactionMeta = {\n isSolana: boolean;\n isBridgeTx: boolean;\n};\n\nexport type StatusRequest = {\n bridgeId: string; // lifi, socket, squid\n srcTxHash?: string; // lifi, socket, squid, might be undefined for STX\n bridge: string; // lifi, socket, squid\n srcChainId: ChainId; // lifi, socket, squid\n destChainId: ChainId; // lifi, socket, squid\n quote?: Quote; // squid\n refuel?: boolean; // lifi\n};\n\nexport type StatusRequestDto = Omit<\n StatusRequest,\n 'quote' | 'srcChainId' | 'destChainId' | 'refuel'\n> & {\n srcChainId: string; // lifi, socket, squid\n destChainId: string; // lifi, socket, squid\n requestId?: string;\n refuel?: string; // lifi\n};\n\nexport type StatusRequestWithSrcTxHash = StatusRequest & {\n srcTxHash: string;\n};\n\nexport type Asset = {\n chainId: ChainId;\n address: string;\n symbol: string;\n name: string;\n decimals: number;\n icon?: string | null;\n};\n\nexport type SrcChainStatus = {\n chainId: ChainId;\n /**\n * The txHash of the transaction on the source chain.\n * This might be undefined for smart transactions (STX)\n */\n txHash?: string;\n /**\n * The atomic amount of the token sent minus fees on the source chain\n */\n amount?: string;\n token?: Record<string, never> | Asset;\n};\n\nexport type DestChainStatus = {\n chainId: ChainId;\n txHash?: string;\n /**\n * The atomic amount of the token received on the destination chain\n */\n amount?: string;\n token?: Record<string, never> | Asset;\n};\n\nexport enum BridgeId {\n HOP = 'hop',\n CELER = 'celer',\n CELERCIRCLE = 'celercircle',\n CONNEXT = 'connext',\n POLYGON = 'polygon',\n AVALANCHE = 'avalanche',\n MULTICHAIN = 'multichain',\n AXELAR = 'axelar',\n ACROSS = 'across',\n STARGATE = 'stargate',\n RELAY = 'relay',\n MAYAN = 'mayan',\n}\n\nexport enum FeeType {\n METABRIDGE = 'metabridge',\n REFUEL = 'refuel',\n}\n\nexport type FeeData = {\n amount: string;\n asset: Asset;\n};\n\nexport type Protocol = {\n displayName?: string;\n icon?: string;\n name?: string; // for legacy quotes\n};\n\nexport enum ActionTypes {\n BRIDGE = 'bridge',\n SWAP = 'swap',\n REFUEL = 'refuel',\n}\n\nexport type Step = {\n action: ActionTypes;\n srcChainId: ChainId;\n destChainId?: ChainId;\n srcAsset: Asset;\n destAsset: Asset;\n srcAmount: string;\n destAmount: string;\n protocol: Protocol;\n};\n\nexport type StatusResponse = {\n status: StatusTypes;\n srcChain: SrcChainStatus;\n destChain?: DestChainStatus;\n bridge?: BridgeId;\n isExpectedToken?: boolean;\n isUnrecognizedRouterAddress?: boolean;\n refuel?: RefuelStatusResponse;\n};\n\nexport type RefuelStatusResponse = object & StatusResponse;\n\nexport type RefuelData = object & Step;\n\nexport type BridgeHistoryItem = {\n txMetaId: string; // Need this to handle STX that might not have a txHash immediately\n quote: Quote;\n status: StatusResponse;\n startTime?: number; // timestamp in ms\n estimatedProcessingTimeInSeconds: number;\n slippagePercentage: number;\n completionTime?: number; // timestamp in ms\n pricingData?: {\n /**\n * From QuoteMetadata.sentAmount.amount, the actual amount sent by user in non-atomic decimal form\n */\n amountSent: string;\n amountSentInUsd?: string;\n quotedGasInUsd?: string; // from QuoteMetadata.gasFee.usd\n quotedReturnInUsd?: string; // from QuoteMetadata.toTokenAmount.usd\n quotedRefuelSrcAmountInUsd?: string;\n quotedRefuelDestAmountInUsd?: string;\n };\n initialDestAssetBalance?: string;\n targetContractAddress?: string;\n account: string;\n hasApprovalTx: boolean;\n approvalTxId?: string;\n isStxEnabled?: boolean;\n};\n\nexport enum BridgeStatusAction {\n START_POLLING_FOR_BRIDGE_TX_STATUS = 'startPollingForBridgeTxStatus',\n WIPE_BRIDGE_STATUS = 'wipeBridgeStatus',\n GET_STATE = 'getState',\n RESET_STATE = 'resetState',\n SUBMIT_TX = 'submitTx',\n}\n\nexport type TokenAmountValuesSerialized = {\n amount: string;\n valueInCurrency: string | null;\n usd: string | null;\n};\n\nexport type QuoteMetadataSerialized = {\n gasFee: TokenAmountValuesSerialized;\n /**\n * The total network fee for the bridge transaction\n * estimatedGasFees + relayerFees\n */\n totalNetworkFee: TokenAmountValuesSerialized;\n /**\n * The total max network fee for the bridge transaction\n * maxGasFees + relayerFees\n */\n totalMaxNetworkFee: TokenAmountValuesSerialized;\n toTokenAmount: TokenAmountValuesSerialized;\n /**\n * The adjusted return for the bridge transaction\n * destTokenAmount - totalNetworkFee\n */\n adjustedReturn: Omit<TokenAmountValuesSerialized, 'amount'>;\n /**\n * The actual amount sent by user in non-atomic decimal form\n * srcTokenAmount + metabridgeFee\n */\n sentAmount: TokenAmountValuesSerialized;\n swapRate: string; // destTokenAmount / sentAmount\n /**\n * The cost of the bridge transaction\n * sentAmount - adjustedReturn\n */\n cost: Omit<TokenAmountValuesSerialized, 'amount'>;\n};\n\nexport type StartPollingForBridgeTxStatusArgs = {\n bridgeTxMeta: TransactionMeta;\n statusRequest: StatusRequest;\n quoteResponse: QuoteResponse & QuoteMetadata;\n startTime?: BridgeHistoryItem['startTime'];\n slippagePercentage: BridgeHistoryItem['slippagePercentage'];\n initialDestAssetBalance?: BridgeHistoryItem['initialDestAssetBalance'];\n targetContractAddress?: BridgeHistoryItem['targetContractAddress'];\n approvalTxId?: BridgeHistoryItem['approvalTxId'];\n isStxEnabled?: BridgeHistoryItem['isStxEnabled'];\n};\n\n/**\n * Chrome: The BigNumber values are automatically serialized to strings when sent to the background\n * Firefox: The BigNumber values are not serialized to strings when sent to the background,\n * so we force the ui to do it manually, by using StartPollingForBridgeTxStatusArgsSerialized type on the startPollingForBridgeTxStatus action\n */\nexport type StartPollingForBridgeTxStatusArgsSerialized = Omit<\n StartPollingForBridgeTxStatusArgs,\n 'quoteResponse'\n> & {\n quoteResponse: QuoteResponse<string | TxData> & QuoteMetadata;\n};\n\nexport type SourceChainTxMetaId = string;\n\nexport type BridgeStatusControllerState = {\n txHistory: Record<SourceChainTxMetaId, BridgeHistoryItem>;\n};\n\n// Actions\ntype BridgeStatusControllerAction<\n FunctionName extends keyof BridgeStatusController,\n> = {\n type: `${typeof BRIDGE_STATUS_CONTROLLER_NAME}:${FunctionName}`;\n handler: BridgeStatusController[FunctionName];\n};\n\nexport type BridgeStatusControllerGetStateAction = ControllerGetStateAction<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerState\n>;\n\n// Maps to BridgeController function names\nexport type BridgeStatusControllerStartPollingForBridgeTxStatusAction =\n BridgeStatusControllerAction<BridgeStatusAction.START_POLLING_FOR_BRIDGE_TX_STATUS>;\n\nexport type BridgeStatusControllerWipeBridgeStatusAction =\n BridgeStatusControllerAction<BridgeStatusAction.WIPE_BRIDGE_STATUS>;\n\nexport type BridgeStatusControllerResetStateAction =\n BridgeStatusControllerAction<BridgeStatusAction.RESET_STATE>;\n\nexport type BridgeStatusControllerSubmitTxAction =\n BridgeStatusControllerAction<BridgeStatusAction.SUBMIT_TX>;\n\nexport type BridgeStatusControllerActions =\n | BridgeStatusControllerStartPollingForBridgeTxStatusAction\n | BridgeStatusControllerWipeBridgeStatusAction\n | BridgeStatusControllerResetStateAction\n | BridgeStatusControllerGetStateAction\n | BridgeStatusControllerSubmitTxAction;\n\n// Events\nexport type BridgeStatusControllerStateChangeEvent = ControllerStateChangeEvent<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerState\n>;\n\nexport type BridgeStatusControllerBridgeTransactionCompleteEvent = {\n type: `${typeof BRIDGE_STATUS_CONTROLLER_NAME}:bridgeTransactionComplete`;\n payload: [{ bridgeHistoryItem: BridgeHistoryItem }];\n};\n\nexport type BridgeStatusControllerBridgeTransactionFailedEvent = {\n type: `${typeof BRIDGE_STATUS_CONTROLLER_NAME}:bridgeTransactionFailed`;\n payload: [{ bridgeHistoryItem: BridgeHistoryItem }];\n};\n\nexport type BridgeStatusControllerEvents =\n | BridgeStatusControllerStateChangeEvent\n | BridgeStatusControllerBridgeTransactionCompleteEvent\n | BridgeStatusControllerBridgeTransactionFailedEvent;\n\n/**\n * The external actions available to the BridgeStatusController.\n */\ntype AllowedActions =\n | NetworkControllerFindNetworkClientIdByChainIdAction\n | NetworkControllerGetStateAction\n | NetworkControllerGetNetworkClientByIdAction\n | AccountsControllerGetSelectedMultichainAccountAction\n | HandleSnapRequest\n | TransactionControllerGetStateAction\n | BridgeControllerAction<BridgeBackgroundAction.GET_BRIDGE_ERC20_ALLOWANCE>\n | BridgeControllerAction<BridgeBackgroundAction.TRACK_METAMETRICS_EVENT>\n | GetGasFeeState\n | AccountsControllerGetAccountByAddressAction\n | TokensControllerAddDetectedTokensAction;\n\n/**\n * The external events available to the BridgeStatusController.\n */\ntype AllowedEvents = never;\n\n/**\n * The messenger for the BridgeStatusController.\n */\nexport type BridgeStatusControllerMessenger = RestrictedMessenger<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerActions | AllowedActions,\n BridgeStatusControllerEvents | AllowedEvents,\n AllowedActions['type'],\n AllowedEvents['type']\n>;\n"]}
|
1
|
+
{"version":3,"file":"types.cjs","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAkCA,8EAA8E;AAC9E,2BAA2B;AAE3B,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,yCAAuB,CAAA;IACvB,mCAAiB,CAAA;AACnB,CAAC,EAHW,cAAc,8BAAd,cAAc,QAGzB;AA2ED,IAAY,QAaX;AAbD,WAAY,QAAQ;IAClB,uBAAW,CAAA;IACX,2BAAe,CAAA;IACf,uCAA2B,CAAA;IAC3B,+BAAmB,CAAA;IACnB,+BAAmB,CAAA;IACnB,mCAAuB,CAAA;IACvB,qCAAyB,CAAA;IACzB,6BAAiB,CAAA;IACjB,6BAAiB,CAAA;IACjB,iCAAqB,CAAA;IACrB,2BAAe,CAAA;IACf,2BAAe,CAAA;AACjB,CAAC,EAbW,QAAQ,wBAAR,QAAQ,QAanB;AAED,IAAY,OAGX;AAHD,WAAY,OAAO;IACjB,oCAAyB,CAAA;IACzB,4BAAiB,CAAA;AACnB,CAAC,EAHW,OAAO,uBAAP,OAAO,QAGlB;AAaD,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,gCAAiB,CAAA;IACjB,4BAAa,CAAA;IACb,gCAAiB,CAAA;AACnB,CAAC,EAJW,WAAW,2BAAX,WAAW,QAItB;AAsDD,IAAY,kBAMX;AAND,WAAY,kBAAkB;IAC5B,0FAAoE,CAAA;IACpE,6DAAuC,CAAA;IACvC,4CAAsB,CAAA;IACtB,gDAA0B,CAAA;IAC1B,4CAAsB,CAAA;AACxB,CAAC,EANW,kBAAkB,kCAAlB,kBAAkB,QAM7B","sourcesContent":["import type {\n AccountsControllerGetAccountByAddressAction,\n AccountsControllerGetSelectedMultichainAccountAction,\n} from '@metamask/accounts-controller';\nimport type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n RestrictedMessenger,\n} from '@metamask/base-controller';\nimport type {\n BridgeBackgroundAction,\n BridgeControllerAction,\n ChainId,\n Quote,\n QuoteMetadata,\n QuoteResponse,\n StatusTypes,\n TxData,\n} from '@metamask/bridge-controller';\nimport type { GetGasFeeState } from '@metamask/gas-fee-controller';\nimport type {\n NetworkControllerFindNetworkClientIdByChainIdAction,\n NetworkControllerGetNetworkClientByIdAction,\n NetworkControllerGetStateAction,\n} from '@metamask/network-controller';\nimport type { HandleSnapRequest } from '@metamask/snaps-controllers';\nimport type {\n TransactionControllerGetStateAction,\n TransactionMeta,\n} from '@metamask/transaction-controller';\n\nimport type { BridgeStatusController } from './bridge-status-controller';\nimport type { BRIDGE_STATUS_CONTROLLER_NAME } from './constants';\n\n// All fields need to be types not interfaces, same with their children fields\n// o/w you get a type error\n\nexport enum BridgeClientId {\n EXTENSION = 'extension',\n MOBILE = 'mobile',\n}\n\nexport type FetchFunction = (\n input: RequestInfo | URL,\n init?: RequestInit,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n) => Promise<any>;\n\n/**\n * These fields are specific to Solana transactions and can likely be infered from TransactionMeta\n *\n * @deprecated these should be removed eventually\n */\nexport type SolanaTransactionMeta = {\n isSolana: boolean;\n isBridgeTx: boolean;\n};\n\nexport type StatusRequest = {\n bridgeId: string; // lifi, socket, squid\n srcTxHash?: string; // lifi, socket, squid, might be undefined for STX\n bridge: string; // lifi, socket, squid\n srcChainId: ChainId; // lifi, socket, squid\n destChainId: ChainId; // lifi, socket, squid\n quote?: Quote; // squid\n refuel?: boolean; // lifi\n};\n\nexport type StatusRequestDto = Omit<\n StatusRequest,\n 'quote' | 'srcChainId' | 'destChainId' | 'refuel'\n> & {\n srcChainId: string; // lifi, socket, squid\n destChainId: string; // lifi, socket, squid\n requestId?: string;\n refuel?: string; // lifi\n};\n\nexport type StatusRequestWithSrcTxHash = StatusRequest & {\n srcTxHash: string;\n};\n\nexport type Asset = {\n chainId: ChainId;\n address: string;\n symbol: string;\n name: string;\n decimals: number;\n icon?: string | null;\n};\n\nexport type SrcChainStatus = {\n chainId: ChainId;\n /**\n * The txHash of the transaction on the source chain.\n * This might be undefined for smart transactions (STX)\n */\n txHash?: string;\n /**\n * The atomic amount of the token sent minus fees on the source chain\n */\n amount?: string;\n token?: Record<string, never> | Asset;\n};\n\nexport type DestChainStatus = {\n chainId: ChainId;\n txHash?: string;\n /**\n * The atomic amount of the token received on the destination chain\n */\n amount?: string;\n token?: Record<string, never> | Asset;\n};\n\nexport enum BridgeId {\n HOP = 'hop',\n CELER = 'celer',\n CELERCIRCLE = 'celercircle',\n CONNEXT = 'connext',\n POLYGON = 'polygon',\n AVALANCHE = 'avalanche',\n MULTICHAIN = 'multichain',\n AXELAR = 'axelar',\n ACROSS = 'across',\n STARGATE = 'stargate',\n RELAY = 'relay',\n MAYAN = 'mayan',\n}\n\nexport enum FeeType {\n METABRIDGE = 'metabridge',\n REFUEL = 'refuel',\n}\n\nexport type FeeData = {\n amount: string;\n asset: Asset;\n};\n\nexport type Protocol = {\n displayName?: string;\n icon?: string;\n name?: string; // for legacy quotes\n};\n\nexport enum ActionTypes {\n BRIDGE = 'bridge',\n SWAP = 'swap',\n REFUEL = 'refuel',\n}\n\nexport type Step = {\n action: ActionTypes;\n srcChainId: ChainId;\n destChainId?: ChainId;\n srcAsset: Asset;\n destAsset: Asset;\n srcAmount: string;\n destAmount: string;\n protocol: Protocol;\n};\n\nexport type StatusResponse = {\n status: StatusTypes;\n srcChain: SrcChainStatus;\n destChain?: DestChainStatus;\n bridge?: BridgeId;\n isExpectedToken?: boolean;\n isUnrecognizedRouterAddress?: boolean;\n refuel?: RefuelStatusResponse;\n};\n\nexport type RefuelStatusResponse = object & StatusResponse;\n\nexport type RefuelData = object & Step;\n\nexport type BridgeHistoryItem = {\n txMetaId: string; // Need this to handle STX that might not have a txHash immediately\n quote: Quote;\n status: StatusResponse;\n startTime?: number; // timestamp in ms\n estimatedProcessingTimeInSeconds: number;\n slippagePercentage: number;\n completionTime?: number; // timestamp in ms\n pricingData?: {\n /**\n * From QuoteMetadata.sentAmount.amount, the actual amount sent by user in non-atomic decimal form\n */\n amountSent: string;\n amountSentInUsd?: string;\n quotedGasInUsd?: string; // from QuoteMetadata.gasFee.usd\n quotedReturnInUsd?: string; // from QuoteMetadata.toTokenAmount.usd\n quotedRefuelSrcAmountInUsd?: string;\n quotedRefuelDestAmountInUsd?: string;\n };\n initialDestAssetBalance?: string;\n targetContractAddress?: string;\n account: string;\n hasApprovalTx: boolean;\n approvalTxId?: string;\n isStxEnabled?: boolean;\n};\n\nexport enum BridgeStatusAction {\n START_POLLING_FOR_BRIDGE_TX_STATUS = 'startPollingForBridgeTxStatus',\n WIPE_BRIDGE_STATUS = 'wipeBridgeStatus',\n GET_STATE = 'getState',\n RESET_STATE = 'resetState',\n SUBMIT_TX = 'submitTx',\n}\n\nexport type TokenAmountValuesSerialized = {\n amount: string;\n valueInCurrency: string | null;\n usd: string | null;\n};\n\nexport type QuoteMetadataSerialized = {\n gasFee: TokenAmountValuesSerialized;\n /**\n * The total network fee for the bridge transaction\n * estimatedGasFees + relayerFees\n */\n totalNetworkFee: TokenAmountValuesSerialized;\n /**\n * The total max network fee for the bridge transaction\n * maxGasFees + relayerFees\n */\n totalMaxNetworkFee: TokenAmountValuesSerialized;\n toTokenAmount: TokenAmountValuesSerialized;\n /**\n * The adjusted return for the bridge transaction\n * destTokenAmount - totalNetworkFee\n */\n adjustedReturn: Omit<TokenAmountValuesSerialized, 'amount'>;\n /**\n * The actual amount sent by user in non-atomic decimal form\n * srcTokenAmount + metabridgeFee\n */\n sentAmount: TokenAmountValuesSerialized;\n swapRate: string; // destTokenAmount / sentAmount\n /**\n * The cost of the bridge transaction\n * sentAmount - adjustedReturn\n */\n cost: Omit<TokenAmountValuesSerialized, 'amount'>;\n};\n\nexport type StartPollingForBridgeTxStatusArgs = {\n bridgeTxMeta: TransactionMeta;\n statusRequest: StatusRequest;\n quoteResponse: QuoteResponse & QuoteMetadata;\n startTime?: BridgeHistoryItem['startTime'];\n slippagePercentage: BridgeHistoryItem['slippagePercentage'];\n initialDestAssetBalance?: BridgeHistoryItem['initialDestAssetBalance'];\n targetContractAddress?: BridgeHistoryItem['targetContractAddress'];\n approvalTxId?: BridgeHistoryItem['approvalTxId'];\n isStxEnabled?: BridgeHistoryItem['isStxEnabled'];\n};\n\n/**\n * Chrome: The BigNumber values are automatically serialized to strings when sent to the background\n * Firefox: The BigNumber values are not serialized to strings when sent to the background,\n * so we force the ui to do it manually, by using StartPollingForBridgeTxStatusArgsSerialized type on the startPollingForBridgeTxStatus action\n */\nexport type StartPollingForBridgeTxStatusArgsSerialized = Omit<\n StartPollingForBridgeTxStatusArgs,\n 'quoteResponse'\n> & {\n quoteResponse: QuoteResponse<string | TxData> & QuoteMetadata;\n};\n\nexport type SourceChainTxMetaId = string;\n\nexport type BridgeStatusControllerState = {\n txHistory: Record<SourceChainTxMetaId, BridgeHistoryItem>;\n};\n\n// Actions\ntype BridgeStatusControllerAction<\n FunctionName extends keyof BridgeStatusController,\n> = {\n type: `${typeof BRIDGE_STATUS_CONTROLLER_NAME}:${FunctionName}`;\n handler: BridgeStatusController[FunctionName];\n};\n\nexport type BridgeStatusControllerGetStateAction = ControllerGetStateAction<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerState\n>;\n\n// Maps to BridgeController function names\nexport type BridgeStatusControllerStartPollingForBridgeTxStatusAction =\n BridgeStatusControllerAction<BridgeStatusAction.START_POLLING_FOR_BRIDGE_TX_STATUS>;\n\nexport type BridgeStatusControllerWipeBridgeStatusAction =\n BridgeStatusControllerAction<BridgeStatusAction.WIPE_BRIDGE_STATUS>;\n\nexport type BridgeStatusControllerResetStateAction =\n BridgeStatusControllerAction<BridgeStatusAction.RESET_STATE>;\n\nexport type BridgeStatusControllerSubmitTxAction =\n BridgeStatusControllerAction<BridgeStatusAction.SUBMIT_TX>;\n\nexport type BridgeStatusControllerActions =\n | BridgeStatusControllerStartPollingForBridgeTxStatusAction\n | BridgeStatusControllerWipeBridgeStatusAction\n | BridgeStatusControllerResetStateAction\n | BridgeStatusControllerGetStateAction\n | BridgeStatusControllerSubmitTxAction;\n\n// Events\nexport type BridgeStatusControllerStateChangeEvent = ControllerStateChangeEvent<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerState\n>;\n\nexport type BridgeStatusControllerBridgeTransactionCompleteEvent = {\n type: `${typeof BRIDGE_STATUS_CONTROLLER_NAME}:bridgeTransactionComplete`;\n payload: [{ bridgeHistoryItem: BridgeHistoryItem }];\n};\n\nexport type BridgeStatusControllerBridgeTransactionFailedEvent = {\n type: `${typeof BRIDGE_STATUS_CONTROLLER_NAME}:bridgeTransactionFailed`;\n payload: [{ bridgeHistoryItem: BridgeHistoryItem }];\n};\n\nexport type BridgeStatusControllerEvents =\n | BridgeStatusControllerStateChangeEvent\n | BridgeStatusControllerBridgeTransactionCompleteEvent\n | BridgeStatusControllerBridgeTransactionFailedEvent;\n\n/**\n * The external actions available to the BridgeStatusController.\n */\ntype AllowedActions =\n | NetworkControllerFindNetworkClientIdByChainIdAction\n | NetworkControllerGetStateAction\n | NetworkControllerGetNetworkClientByIdAction\n | AccountsControllerGetSelectedMultichainAccountAction\n | HandleSnapRequest\n | TransactionControllerGetStateAction\n | BridgeControllerAction<BridgeBackgroundAction.GET_BRIDGE_ERC20_ALLOWANCE>\n | BridgeControllerAction<BridgeBackgroundAction.TRACK_METAMETRICS_EVENT>\n | GetGasFeeState\n | AccountsControllerGetAccountByAddressAction;\n\n/**\n * The external events available to the BridgeStatusController.\n */\ntype AllowedEvents = never;\n\n/**\n * The messenger for the BridgeStatusController.\n */\nexport type BridgeStatusControllerMessenger = RestrictedMessenger<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerActions | AllowedActions,\n BridgeStatusControllerEvents | AllowedEvents,\n AllowedActions['type'],\n AllowedEvents['type']\n>;\n"]}
|
package/dist/types.d.cts
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
import type { AccountsControllerGetAccountByAddressAction, AccountsControllerGetSelectedMultichainAccountAction } from "@metamask/accounts-controller";
|
2
|
-
import type { TokensControllerAddDetectedTokensAction } from "@metamask/assets-controllers";
|
3
2
|
import type { ControllerGetStateAction, ControllerStateChangeEvent, RestrictedMessenger } from "@metamask/base-controller";
|
4
3
|
import type { BridgeBackgroundAction, BridgeControllerAction, ChainId, Quote, QuoteMetadata, QuoteResponse, StatusTypes, TxData } from "@metamask/bridge-controller";
|
5
4
|
import type { GetGasFeeState } from "@metamask/gas-fee-controller";
|
@@ -241,7 +240,7 @@ export type BridgeStatusControllerEvents = BridgeStatusControllerStateChangeEven
|
|
241
240
|
/**
|
242
241
|
* The external actions available to the BridgeStatusController.
|
243
242
|
*/
|
244
|
-
type AllowedActions = NetworkControllerFindNetworkClientIdByChainIdAction | NetworkControllerGetStateAction | NetworkControllerGetNetworkClientByIdAction | AccountsControllerGetSelectedMultichainAccountAction | HandleSnapRequest | TransactionControllerGetStateAction | BridgeControllerAction<BridgeBackgroundAction.GET_BRIDGE_ERC20_ALLOWANCE> | BridgeControllerAction<BridgeBackgroundAction.TRACK_METAMETRICS_EVENT> | GetGasFeeState | AccountsControllerGetAccountByAddressAction
|
243
|
+
type AllowedActions = NetworkControllerFindNetworkClientIdByChainIdAction | NetworkControllerGetStateAction | NetworkControllerGetNetworkClientByIdAction | AccountsControllerGetSelectedMultichainAccountAction | HandleSnapRequest | TransactionControllerGetStateAction | BridgeControllerAction<BridgeBackgroundAction.GET_BRIDGE_ERC20_ALLOWANCE> | BridgeControllerAction<BridgeBackgroundAction.TRACK_METAMETRICS_EVENT> | GetGasFeeState | AccountsControllerGetAccountByAddressAction;
|
245
244
|
/**
|
246
245
|
* The external events available to the BridgeStatusController.
|
247
246
|
*/
|
package/dist/types.d.cts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.d.cts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,2CAA2C,EAC3C,oDAAoD,EACrD,sCAAsC;AACvC,OAAO,KAAK,
|
1
|
+
{"version":3,"file":"types.d.cts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,2CAA2C,EAC3C,oDAAoD,EACrD,sCAAsC;AACvC,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAC1B,mBAAmB,EACpB,kCAAkC;AACnC,OAAO,KAAK,EACV,sBAAsB,EACtB,sBAAsB,EACtB,OAAO,EACP,KAAK,EACL,aAAa,EACb,aAAa,EACb,WAAW,EACX,MAAM,EACP,oCAAoC;AACrC,OAAO,KAAK,EAAE,cAAc,EAAE,qCAAqC;AACnE,OAAO,KAAK,EACV,mDAAmD,EACnD,2CAA2C,EAC3C,+BAA+B,EAChC,qCAAqC;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,oCAAoC;AACrE,OAAO,KAAK,EACV,mCAAmC,EACnC,eAAe,EAChB,yCAAyC;AAE1C,OAAO,KAAK,EAAE,sBAAsB,EAAE,uCAAmC;AACzE,OAAO,KAAK,EAAE,6BAA6B,EAAE,wBAAoB;AAKjE,oBAAY,cAAc;IACxB,SAAS,cAAc;IACvB,MAAM,WAAW;CAClB;AAED,MAAM,MAAM,aAAa,GAAG,CAC1B,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,CAAC,EAAE,WAAW,KAEf,OAAO,CAAC,GAAG,CAAC,CAAC;AAElB;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,IAAI,CACjC,aAAa,EACb,OAAO,GAAG,YAAY,GAAG,aAAa,GAAG,QAAQ,CAClD,GAAG;IACF,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,aAAa,GAAG;IACvD,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;CACvC,CAAC;AAEF,oBAAY,QAAQ;IAClB,GAAG,QAAQ;IACX,KAAK,UAAU;IACf,WAAW,gBAAgB;IAC3B,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,KAAK,UAAU;IACf,KAAK,UAAU;CAChB;AAED,oBAAY,OAAO;IACjB,UAAU,eAAe;IACzB,MAAM,WAAW;CAClB;AAED,MAAM,MAAM,OAAO,GAAG;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,oBAAY,WAAW;IACrB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,MAAM,WAAW;CAClB;AAED,MAAM,MAAM,IAAI,GAAG;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,KAAK,CAAC;IAChB,SAAS,EAAE,KAAK,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,cAAc,CAAC;IACzB,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,MAAM,CAAC,EAAE,oBAAoB,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,cAAc,CAAC;AAE3D,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,IAAI,CAAC;AAEvC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gCAAgC,EAAE,MAAM,CAAC;IACzC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE;QACZ;;WAEG;QACH,UAAU,EAAE,MAAM,CAAC;QACnB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,0BAA0B,CAAC,EAAE,MAAM,CAAC;QACpC,2BAA2B,CAAC,EAAE,MAAM,CAAC;KACtC,CAAC;IACF,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,oBAAY,kBAAkB;IAC5B,kCAAkC,kCAAkC;IACpE,kBAAkB,qBAAqB;IACvC,SAAS,aAAa;IACtB,WAAW,eAAe;IAC1B,SAAS,aAAa;CACvB;AAED,MAAM,MAAM,2BAA2B,GAAG;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,2BAA2B,CAAC;IACpC;;;OAGG;IACH,eAAe,EAAE,2BAA2B,CAAC;IAC7C;;;OAGG;IACH,kBAAkB,EAAE,2BAA2B,CAAC;IAChD,aAAa,EAAE,2BAA2B,CAAC;IAC3C;;;OAGG;IACH,cAAc,EAAE,IAAI,CAAC,2BAA2B,EAAE,QAAQ,CAAC,CAAC;IAC5D;;;OAGG;IACH,UAAU,EAAE,2BAA2B,CAAC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,IAAI,EAAE,IAAI,CAAC,2BAA2B,EAAE,QAAQ,CAAC,CAAC;CACnD,CAAC;AAEF,MAAM,MAAM,iCAAiC,GAAG;IAC9C,YAAY,EAAE,eAAe,CAAC;IAC9B,aAAa,EAAE,aAAa,CAAC;IAC7B,aAAa,EAAE,aAAa,GAAG,aAAa,CAAC;IAC7C,SAAS,CAAC,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC3C,kBAAkB,EAAE,iBAAiB,CAAC,oBAAoB,CAAC,CAAC;IAC5D,uBAAuB,CAAC,EAAE,iBAAiB,CAAC,yBAAyB,CAAC,CAAC;IACvE,qBAAqB,CAAC,EAAE,iBAAiB,CAAC,uBAAuB,CAAC,CAAC;IACnE,YAAY,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACjD,YAAY,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC;CAClD,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,2CAA2C,GAAG,IAAI,CAC5D,iCAAiC,EACjC,eAAe,CAChB,GAAG;IACF,aAAa,EAAE,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,aAAa,CAAC;CAC/D,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEzC,MAAM,MAAM,2BAA2B,GAAG;IACxC,SAAS,EAAE,MAAM,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;CAC3D,CAAC;AAGF,KAAK,4BAA4B,CAC/B,YAAY,SAAS,MAAM,sBAAsB,IAC/C;IACF,IAAI,EAAE,GAAG,OAAO,6BAA6B,IAAI,YAAY,EAAE,CAAC;IAChE,OAAO,EAAE,sBAAsB,CAAC,YAAY,CAAC,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,oCAAoC,GAAG,wBAAwB,CACzE,OAAO,6BAA6B,EACpC,2BAA2B,CAC5B,CAAC;AAGF,MAAM,MAAM,yDAAyD,GACnE,4BAA4B,CAAC,kBAAkB,CAAC,kCAAkC,CAAC,CAAC;AAEtF,MAAM,MAAM,4CAA4C,GACtD,4BAA4B,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;AAEtE,MAAM,MAAM,sCAAsC,GAChD,4BAA4B,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;AAE/D,MAAM,MAAM,oCAAoC,GAC9C,4BAA4B,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;AAE7D,MAAM,MAAM,6BAA6B,GACrC,yDAAyD,GACzD,4CAA4C,GAC5C,sCAAsC,GACtC,oCAAoC,GACpC,oCAAoC,CAAC;AAGzC,MAAM,MAAM,sCAAsC,GAAG,0BAA0B,CAC7E,OAAO,6BAA6B,EACpC,2BAA2B,CAC5B,CAAC;AAEF,MAAM,MAAM,oDAAoD,GAAG;IACjE,IAAI,EAAE,GAAG,OAAO,6BAA6B,4BAA4B,CAAC;IAC1E,OAAO,EAAE,CAAC;QAAE,iBAAiB,EAAE,iBAAiB,CAAA;KAAE,CAAC,CAAC;CACrD,CAAC;AAEF,MAAM,MAAM,kDAAkD,GAAG;IAC/D,IAAI,EAAE,GAAG,OAAO,6BAA6B,0BAA0B,CAAC;IACxE,OAAO,EAAE,CAAC;QAAE,iBAAiB,EAAE,iBAAiB,CAAA;KAAE,CAAC,CAAC;CACrD,CAAC;AAEF,MAAM,MAAM,4BAA4B,GACpC,sCAAsC,GACtC,oDAAoD,GACpD,kDAAkD,CAAC;AAEvD;;GAEG;AACH,KAAK,cAAc,GACf,mDAAmD,GACnD,+BAA+B,GAC/B,2CAA2C,GAC3C,oDAAoD,GACpD,iBAAiB,GACjB,mCAAmC,GACnC,sBAAsB,CAAC,sBAAsB,CAAC,0BAA0B,CAAC,GACzE,sBAAsB,CAAC,sBAAsB,CAAC,uBAAuB,CAAC,GACtE,cAAc,GACd,2CAA2C,CAAC;AAEhD;;GAEG;AACH,KAAK,aAAa,GAAG,KAAK,CAAC;AAE3B;;GAEG;AACH,MAAM,MAAM,+BAA+B,GAAG,mBAAmB,CAC/D,OAAO,6BAA6B,EACpC,6BAA6B,GAAG,cAAc,EAC9C,4BAA4B,GAAG,aAAa,EAC5C,cAAc,CAAC,MAAM,CAAC,EACtB,aAAa,CAAC,MAAM,CAAC,CACtB,CAAC"}
|
package/dist/types.d.mts
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
import type { AccountsControllerGetAccountByAddressAction, AccountsControllerGetSelectedMultichainAccountAction } from "@metamask/accounts-controller";
|
2
|
-
import type { TokensControllerAddDetectedTokensAction } from "@metamask/assets-controllers";
|
3
2
|
import type { ControllerGetStateAction, ControllerStateChangeEvent, RestrictedMessenger } from "@metamask/base-controller";
|
4
3
|
import type { BridgeBackgroundAction, BridgeControllerAction, ChainId, Quote, QuoteMetadata, QuoteResponse, StatusTypes, TxData } from "@metamask/bridge-controller";
|
5
4
|
import type { GetGasFeeState } from "@metamask/gas-fee-controller";
|
@@ -241,7 +240,7 @@ export type BridgeStatusControllerEvents = BridgeStatusControllerStateChangeEven
|
|
241
240
|
/**
|
242
241
|
* The external actions available to the BridgeStatusController.
|
243
242
|
*/
|
244
|
-
type AllowedActions = NetworkControllerFindNetworkClientIdByChainIdAction | NetworkControllerGetStateAction | NetworkControllerGetNetworkClientByIdAction | AccountsControllerGetSelectedMultichainAccountAction | HandleSnapRequest | TransactionControllerGetStateAction | BridgeControllerAction<BridgeBackgroundAction.GET_BRIDGE_ERC20_ALLOWANCE> | BridgeControllerAction<BridgeBackgroundAction.TRACK_METAMETRICS_EVENT> | GetGasFeeState | AccountsControllerGetAccountByAddressAction
|
243
|
+
type AllowedActions = NetworkControllerFindNetworkClientIdByChainIdAction | NetworkControllerGetStateAction | NetworkControllerGetNetworkClientByIdAction | AccountsControllerGetSelectedMultichainAccountAction | HandleSnapRequest | TransactionControllerGetStateAction | BridgeControllerAction<BridgeBackgroundAction.GET_BRIDGE_ERC20_ALLOWANCE> | BridgeControllerAction<BridgeBackgroundAction.TRACK_METAMETRICS_EVENT> | GetGasFeeState | AccountsControllerGetAccountByAddressAction;
|
245
244
|
/**
|
246
245
|
* The external events available to the BridgeStatusController.
|
247
246
|
*/
|
package/dist/types.d.mts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.d.mts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,2CAA2C,EAC3C,oDAAoD,EACrD,sCAAsC;AACvC,OAAO,KAAK,
|
1
|
+
{"version":3,"file":"types.d.mts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.mjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.mjs","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAmCA,8EAA8E;AAC9E,2BAA2B;AAE3B,MAAM,CAAN,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,yCAAuB,CAAA;IACvB,mCAAiB,CAAA;AACnB,CAAC,EAHW,cAAc,KAAd,cAAc,QAGzB;AA2ED,MAAM,CAAN,IAAY,QAaX;AAbD,WAAY,QAAQ;IAClB,uBAAW,CAAA;IACX,2BAAe,CAAA;IACf,uCAA2B,CAAA;IAC3B,+BAAmB,CAAA;IACnB,+BAAmB,CAAA;IACnB,mCAAuB,CAAA;IACvB,qCAAyB,CAAA;IACzB,6BAAiB,CAAA;IACjB,6BAAiB,CAAA;IACjB,iCAAqB,CAAA;IACrB,2BAAe,CAAA;IACf,2BAAe,CAAA;AACjB,CAAC,EAbW,QAAQ,KAAR,QAAQ,QAanB;AAED,MAAM,CAAN,IAAY,OAGX;AAHD,WAAY,OAAO;IACjB,oCAAyB,CAAA;IACzB,4BAAiB,CAAA;AACnB,CAAC,EAHW,OAAO,KAAP,OAAO,QAGlB;AAaD,MAAM,CAAN,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,gCAAiB,CAAA;IACjB,4BAAa,CAAA;IACb,gCAAiB,CAAA;AACnB,CAAC,EAJW,WAAW,KAAX,WAAW,QAItB;AAsDD,MAAM,CAAN,IAAY,kBAMX;AAND,WAAY,kBAAkB;IAC5B,0FAAoE,CAAA;IACpE,6DAAuC,CAAA;IACvC,4CAAsB,CAAA;IACtB,gDAA0B,CAAA;IAC1B,4CAAsB,CAAA;AACxB,CAAC,EANW,kBAAkB,KAAlB,kBAAkB,QAM7B","sourcesContent":["import type {\n AccountsControllerGetAccountByAddressAction,\n AccountsControllerGetSelectedMultichainAccountAction,\n} from '@metamask/accounts-controller';\nimport type { TokensControllerAddDetectedTokensAction } from '@metamask/assets-controllers';\nimport type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n RestrictedMessenger,\n} from '@metamask/base-controller';\nimport type {\n BridgeBackgroundAction,\n BridgeControllerAction,\n ChainId,\n Quote,\n QuoteMetadata,\n QuoteResponse,\n StatusTypes,\n TxData,\n} from '@metamask/bridge-controller';\nimport type { GetGasFeeState } from '@metamask/gas-fee-controller';\nimport type {\n NetworkControllerFindNetworkClientIdByChainIdAction,\n NetworkControllerGetNetworkClientByIdAction,\n NetworkControllerGetStateAction,\n} from '@metamask/network-controller';\nimport type { HandleSnapRequest } from '@metamask/snaps-controllers';\nimport type {\n TransactionControllerGetStateAction,\n TransactionMeta,\n} from '@metamask/transaction-controller';\n\nimport type { BridgeStatusController } from './bridge-status-controller';\nimport type { BRIDGE_STATUS_CONTROLLER_NAME } from './constants';\n\n// All fields need to be types not interfaces, same with their children fields\n// o/w you get a type error\n\nexport enum BridgeClientId {\n EXTENSION = 'extension',\n MOBILE = 'mobile',\n}\n\nexport type FetchFunction = (\n input: RequestInfo | URL,\n init?: RequestInit,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n) => Promise<any>;\n\n/**\n * These fields are specific to Solana transactions and can likely be infered from TransactionMeta\n *\n * @deprecated these should be removed eventually\n */\nexport type SolanaTransactionMeta = {\n isSolana: boolean;\n isBridgeTx: boolean;\n};\n\nexport type StatusRequest = {\n bridgeId: string; // lifi, socket, squid\n srcTxHash?: string; // lifi, socket, squid, might be undefined for STX\n bridge: string; // lifi, socket, squid\n srcChainId: ChainId; // lifi, socket, squid\n destChainId: ChainId; // lifi, socket, squid\n quote?: Quote; // squid\n refuel?: boolean; // lifi\n};\n\nexport type StatusRequestDto = Omit<\n StatusRequest,\n 'quote' | 'srcChainId' | 'destChainId' | 'refuel'\n> & {\n srcChainId: string; // lifi, socket, squid\n destChainId: string; // lifi, socket, squid\n requestId?: string;\n refuel?: string; // lifi\n};\n\nexport type StatusRequestWithSrcTxHash = StatusRequest & {\n srcTxHash: string;\n};\n\nexport type Asset = {\n chainId: ChainId;\n address: string;\n symbol: string;\n name: string;\n decimals: number;\n icon?: string | null;\n};\n\nexport type SrcChainStatus = {\n chainId: ChainId;\n /**\n * The txHash of the transaction on the source chain.\n * This might be undefined for smart transactions (STX)\n */\n txHash?: string;\n /**\n * The atomic amount of the token sent minus fees on the source chain\n */\n amount?: string;\n token?: Record<string, never> | Asset;\n};\n\nexport type DestChainStatus = {\n chainId: ChainId;\n txHash?: string;\n /**\n * The atomic amount of the token received on the destination chain\n */\n amount?: string;\n token?: Record<string, never> | Asset;\n};\n\nexport enum BridgeId {\n HOP = 'hop',\n CELER = 'celer',\n CELERCIRCLE = 'celercircle',\n CONNEXT = 'connext',\n POLYGON = 'polygon',\n AVALANCHE = 'avalanche',\n MULTICHAIN = 'multichain',\n AXELAR = 'axelar',\n ACROSS = 'across',\n STARGATE = 'stargate',\n RELAY = 'relay',\n MAYAN = 'mayan',\n}\n\nexport enum FeeType {\n METABRIDGE = 'metabridge',\n REFUEL = 'refuel',\n}\n\nexport type FeeData = {\n amount: string;\n asset: Asset;\n};\n\nexport type Protocol = {\n displayName?: string;\n icon?: string;\n name?: string; // for legacy quotes\n};\n\nexport enum ActionTypes {\n BRIDGE = 'bridge',\n SWAP = 'swap',\n REFUEL = 'refuel',\n}\n\nexport type Step = {\n action: ActionTypes;\n srcChainId: ChainId;\n destChainId?: ChainId;\n srcAsset: Asset;\n destAsset: Asset;\n srcAmount: string;\n destAmount: string;\n protocol: Protocol;\n};\n\nexport type StatusResponse = {\n status: StatusTypes;\n srcChain: SrcChainStatus;\n destChain?: DestChainStatus;\n bridge?: BridgeId;\n isExpectedToken?: boolean;\n isUnrecognizedRouterAddress?: boolean;\n refuel?: RefuelStatusResponse;\n};\n\nexport type RefuelStatusResponse = object & StatusResponse;\n\nexport type RefuelData = object & Step;\n\nexport type BridgeHistoryItem = {\n txMetaId: string; // Need this to handle STX that might not have a txHash immediately\n quote: Quote;\n status: StatusResponse;\n startTime?: number; // timestamp in ms\n estimatedProcessingTimeInSeconds: number;\n slippagePercentage: number;\n completionTime?: number; // timestamp in ms\n pricingData?: {\n /**\n * From QuoteMetadata.sentAmount.amount, the actual amount sent by user in non-atomic decimal form\n */\n amountSent: string;\n amountSentInUsd?: string;\n quotedGasInUsd?: string; // from QuoteMetadata.gasFee.usd\n quotedReturnInUsd?: string; // from QuoteMetadata.toTokenAmount.usd\n quotedRefuelSrcAmountInUsd?: string;\n quotedRefuelDestAmountInUsd?: string;\n };\n initialDestAssetBalance?: string;\n targetContractAddress?: string;\n account: string;\n hasApprovalTx: boolean;\n approvalTxId?: string;\n isStxEnabled?: boolean;\n};\n\nexport enum BridgeStatusAction {\n START_POLLING_FOR_BRIDGE_TX_STATUS = 'startPollingForBridgeTxStatus',\n WIPE_BRIDGE_STATUS = 'wipeBridgeStatus',\n GET_STATE = 'getState',\n RESET_STATE = 'resetState',\n SUBMIT_TX = 'submitTx',\n}\n\nexport type TokenAmountValuesSerialized = {\n amount: string;\n valueInCurrency: string | null;\n usd: string | null;\n};\n\nexport type QuoteMetadataSerialized = {\n gasFee: TokenAmountValuesSerialized;\n /**\n * The total network fee for the bridge transaction\n * estimatedGasFees + relayerFees\n */\n totalNetworkFee: TokenAmountValuesSerialized;\n /**\n * The total max network fee for the bridge transaction\n * maxGasFees + relayerFees\n */\n totalMaxNetworkFee: TokenAmountValuesSerialized;\n toTokenAmount: TokenAmountValuesSerialized;\n /**\n * The adjusted return for the bridge transaction\n * destTokenAmount - totalNetworkFee\n */\n adjustedReturn: Omit<TokenAmountValuesSerialized, 'amount'>;\n /**\n * The actual amount sent by user in non-atomic decimal form\n * srcTokenAmount + metabridgeFee\n */\n sentAmount: TokenAmountValuesSerialized;\n swapRate: string; // destTokenAmount / sentAmount\n /**\n * The cost of the bridge transaction\n * sentAmount - adjustedReturn\n */\n cost: Omit<TokenAmountValuesSerialized, 'amount'>;\n};\n\nexport type StartPollingForBridgeTxStatusArgs = {\n bridgeTxMeta: TransactionMeta;\n statusRequest: StatusRequest;\n quoteResponse: QuoteResponse & QuoteMetadata;\n startTime?: BridgeHistoryItem['startTime'];\n slippagePercentage: BridgeHistoryItem['slippagePercentage'];\n initialDestAssetBalance?: BridgeHistoryItem['initialDestAssetBalance'];\n targetContractAddress?: BridgeHistoryItem['targetContractAddress'];\n approvalTxId?: BridgeHistoryItem['approvalTxId'];\n isStxEnabled?: BridgeHistoryItem['isStxEnabled'];\n};\n\n/**\n * Chrome: The BigNumber values are automatically serialized to strings when sent to the background\n * Firefox: The BigNumber values are not serialized to strings when sent to the background,\n * so we force the ui to do it manually, by using StartPollingForBridgeTxStatusArgsSerialized type on the startPollingForBridgeTxStatus action\n */\nexport type StartPollingForBridgeTxStatusArgsSerialized = Omit<\n StartPollingForBridgeTxStatusArgs,\n 'quoteResponse'\n> & {\n quoteResponse: QuoteResponse<string | TxData> & QuoteMetadata;\n};\n\nexport type SourceChainTxMetaId = string;\n\nexport type BridgeStatusControllerState = {\n txHistory: Record<SourceChainTxMetaId, BridgeHistoryItem>;\n};\n\n// Actions\ntype BridgeStatusControllerAction<\n FunctionName extends keyof BridgeStatusController,\n> = {\n type: `${typeof BRIDGE_STATUS_CONTROLLER_NAME}:${FunctionName}`;\n handler: BridgeStatusController[FunctionName];\n};\n\nexport type BridgeStatusControllerGetStateAction = ControllerGetStateAction<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerState\n>;\n\n// Maps to BridgeController function names\nexport type BridgeStatusControllerStartPollingForBridgeTxStatusAction =\n BridgeStatusControllerAction<BridgeStatusAction.START_POLLING_FOR_BRIDGE_TX_STATUS>;\n\nexport type BridgeStatusControllerWipeBridgeStatusAction =\n BridgeStatusControllerAction<BridgeStatusAction.WIPE_BRIDGE_STATUS>;\n\nexport type BridgeStatusControllerResetStateAction =\n BridgeStatusControllerAction<BridgeStatusAction.RESET_STATE>;\n\nexport type BridgeStatusControllerSubmitTxAction =\n BridgeStatusControllerAction<BridgeStatusAction.SUBMIT_TX>;\n\nexport type BridgeStatusControllerActions =\n | BridgeStatusControllerStartPollingForBridgeTxStatusAction\n | BridgeStatusControllerWipeBridgeStatusAction\n | BridgeStatusControllerResetStateAction\n | BridgeStatusControllerGetStateAction\n | BridgeStatusControllerSubmitTxAction;\n\n// Events\nexport type BridgeStatusControllerStateChangeEvent = ControllerStateChangeEvent<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerState\n>;\n\nexport type BridgeStatusControllerBridgeTransactionCompleteEvent = {\n type: `${typeof BRIDGE_STATUS_CONTROLLER_NAME}:bridgeTransactionComplete`;\n payload: [{ bridgeHistoryItem: BridgeHistoryItem }];\n};\n\nexport type BridgeStatusControllerBridgeTransactionFailedEvent = {\n type: `${typeof BRIDGE_STATUS_CONTROLLER_NAME}:bridgeTransactionFailed`;\n payload: [{ bridgeHistoryItem: BridgeHistoryItem }];\n};\n\nexport type BridgeStatusControllerEvents =\n | BridgeStatusControllerStateChangeEvent\n | BridgeStatusControllerBridgeTransactionCompleteEvent\n | BridgeStatusControllerBridgeTransactionFailedEvent;\n\n/**\n * The external actions available to the BridgeStatusController.\n */\ntype AllowedActions =\n | NetworkControllerFindNetworkClientIdByChainIdAction\n | NetworkControllerGetStateAction\n | NetworkControllerGetNetworkClientByIdAction\n | AccountsControllerGetSelectedMultichainAccountAction\n | HandleSnapRequest\n | TransactionControllerGetStateAction\n | BridgeControllerAction<BridgeBackgroundAction.GET_BRIDGE_ERC20_ALLOWANCE>\n | BridgeControllerAction<BridgeBackgroundAction.TRACK_METAMETRICS_EVENT>\n | GetGasFeeState\n | AccountsControllerGetAccountByAddressAction\n | TokensControllerAddDetectedTokensAction;\n\n/**\n * The external events available to the BridgeStatusController.\n */\ntype AllowedEvents = never;\n\n/**\n * The messenger for the BridgeStatusController.\n */\nexport type BridgeStatusControllerMessenger = RestrictedMessenger<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerActions | AllowedActions,\n BridgeStatusControllerEvents | AllowedEvents,\n AllowedActions['type'],\n AllowedEvents['type']\n>;\n"]}
|
1
|
+
{"version":3,"file":"types.mjs","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAkCA,8EAA8E;AAC9E,2BAA2B;AAE3B,MAAM,CAAN,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,yCAAuB,CAAA;IACvB,mCAAiB,CAAA;AACnB,CAAC,EAHW,cAAc,KAAd,cAAc,QAGzB;AA2ED,MAAM,CAAN,IAAY,QAaX;AAbD,WAAY,QAAQ;IAClB,uBAAW,CAAA;IACX,2BAAe,CAAA;IACf,uCAA2B,CAAA;IAC3B,+BAAmB,CAAA;IACnB,+BAAmB,CAAA;IACnB,mCAAuB,CAAA;IACvB,qCAAyB,CAAA;IACzB,6BAAiB,CAAA;IACjB,6BAAiB,CAAA;IACjB,iCAAqB,CAAA;IACrB,2BAAe,CAAA;IACf,2BAAe,CAAA;AACjB,CAAC,EAbW,QAAQ,KAAR,QAAQ,QAanB;AAED,MAAM,CAAN,IAAY,OAGX;AAHD,WAAY,OAAO;IACjB,oCAAyB,CAAA;IACzB,4BAAiB,CAAA;AACnB,CAAC,EAHW,OAAO,KAAP,OAAO,QAGlB;AAaD,MAAM,CAAN,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,gCAAiB,CAAA;IACjB,4BAAa,CAAA;IACb,gCAAiB,CAAA;AACnB,CAAC,EAJW,WAAW,KAAX,WAAW,QAItB;AAsDD,MAAM,CAAN,IAAY,kBAMX;AAND,WAAY,kBAAkB;IAC5B,0FAAoE,CAAA;IACpE,6DAAuC,CAAA;IACvC,4CAAsB,CAAA;IACtB,gDAA0B,CAAA;IAC1B,4CAAsB,CAAA;AACxB,CAAC,EANW,kBAAkB,KAAlB,kBAAkB,QAM7B","sourcesContent":["import type {\n AccountsControllerGetAccountByAddressAction,\n AccountsControllerGetSelectedMultichainAccountAction,\n} from '@metamask/accounts-controller';\nimport type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n RestrictedMessenger,\n} from '@metamask/base-controller';\nimport type {\n BridgeBackgroundAction,\n BridgeControllerAction,\n ChainId,\n Quote,\n QuoteMetadata,\n QuoteResponse,\n StatusTypes,\n TxData,\n} from '@metamask/bridge-controller';\nimport type { GetGasFeeState } from '@metamask/gas-fee-controller';\nimport type {\n NetworkControllerFindNetworkClientIdByChainIdAction,\n NetworkControllerGetNetworkClientByIdAction,\n NetworkControllerGetStateAction,\n} from '@metamask/network-controller';\nimport type { HandleSnapRequest } from '@metamask/snaps-controllers';\nimport type {\n TransactionControllerGetStateAction,\n TransactionMeta,\n} from '@metamask/transaction-controller';\n\nimport type { BridgeStatusController } from './bridge-status-controller';\nimport type { BRIDGE_STATUS_CONTROLLER_NAME } from './constants';\n\n// All fields need to be types not interfaces, same with their children fields\n// o/w you get a type error\n\nexport enum BridgeClientId {\n EXTENSION = 'extension',\n MOBILE = 'mobile',\n}\n\nexport type FetchFunction = (\n input: RequestInfo | URL,\n init?: RequestInit,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n) => Promise<any>;\n\n/**\n * These fields are specific to Solana transactions and can likely be infered from TransactionMeta\n *\n * @deprecated these should be removed eventually\n */\nexport type SolanaTransactionMeta = {\n isSolana: boolean;\n isBridgeTx: boolean;\n};\n\nexport type StatusRequest = {\n bridgeId: string; // lifi, socket, squid\n srcTxHash?: string; // lifi, socket, squid, might be undefined for STX\n bridge: string; // lifi, socket, squid\n srcChainId: ChainId; // lifi, socket, squid\n destChainId: ChainId; // lifi, socket, squid\n quote?: Quote; // squid\n refuel?: boolean; // lifi\n};\n\nexport type StatusRequestDto = Omit<\n StatusRequest,\n 'quote' | 'srcChainId' | 'destChainId' | 'refuel'\n> & {\n srcChainId: string; // lifi, socket, squid\n destChainId: string; // lifi, socket, squid\n requestId?: string;\n refuel?: string; // lifi\n};\n\nexport type StatusRequestWithSrcTxHash = StatusRequest & {\n srcTxHash: string;\n};\n\nexport type Asset = {\n chainId: ChainId;\n address: string;\n symbol: string;\n name: string;\n decimals: number;\n icon?: string | null;\n};\n\nexport type SrcChainStatus = {\n chainId: ChainId;\n /**\n * The txHash of the transaction on the source chain.\n * This might be undefined for smart transactions (STX)\n */\n txHash?: string;\n /**\n * The atomic amount of the token sent minus fees on the source chain\n */\n amount?: string;\n token?: Record<string, never> | Asset;\n};\n\nexport type DestChainStatus = {\n chainId: ChainId;\n txHash?: string;\n /**\n * The atomic amount of the token received on the destination chain\n */\n amount?: string;\n token?: Record<string, never> | Asset;\n};\n\nexport enum BridgeId {\n HOP = 'hop',\n CELER = 'celer',\n CELERCIRCLE = 'celercircle',\n CONNEXT = 'connext',\n POLYGON = 'polygon',\n AVALANCHE = 'avalanche',\n MULTICHAIN = 'multichain',\n AXELAR = 'axelar',\n ACROSS = 'across',\n STARGATE = 'stargate',\n RELAY = 'relay',\n MAYAN = 'mayan',\n}\n\nexport enum FeeType {\n METABRIDGE = 'metabridge',\n REFUEL = 'refuel',\n}\n\nexport type FeeData = {\n amount: string;\n asset: Asset;\n};\n\nexport type Protocol = {\n displayName?: string;\n icon?: string;\n name?: string; // for legacy quotes\n};\n\nexport enum ActionTypes {\n BRIDGE = 'bridge',\n SWAP = 'swap',\n REFUEL = 'refuel',\n}\n\nexport type Step = {\n action: ActionTypes;\n srcChainId: ChainId;\n destChainId?: ChainId;\n srcAsset: Asset;\n destAsset: Asset;\n srcAmount: string;\n destAmount: string;\n protocol: Protocol;\n};\n\nexport type StatusResponse = {\n status: StatusTypes;\n srcChain: SrcChainStatus;\n destChain?: DestChainStatus;\n bridge?: BridgeId;\n isExpectedToken?: boolean;\n isUnrecognizedRouterAddress?: boolean;\n refuel?: RefuelStatusResponse;\n};\n\nexport type RefuelStatusResponse = object & StatusResponse;\n\nexport type RefuelData = object & Step;\n\nexport type BridgeHistoryItem = {\n txMetaId: string; // Need this to handle STX that might not have a txHash immediately\n quote: Quote;\n status: StatusResponse;\n startTime?: number; // timestamp in ms\n estimatedProcessingTimeInSeconds: number;\n slippagePercentage: number;\n completionTime?: number; // timestamp in ms\n pricingData?: {\n /**\n * From QuoteMetadata.sentAmount.amount, the actual amount sent by user in non-atomic decimal form\n */\n amountSent: string;\n amountSentInUsd?: string;\n quotedGasInUsd?: string; // from QuoteMetadata.gasFee.usd\n quotedReturnInUsd?: string; // from QuoteMetadata.toTokenAmount.usd\n quotedRefuelSrcAmountInUsd?: string;\n quotedRefuelDestAmountInUsd?: string;\n };\n initialDestAssetBalance?: string;\n targetContractAddress?: string;\n account: string;\n hasApprovalTx: boolean;\n approvalTxId?: string;\n isStxEnabled?: boolean;\n};\n\nexport enum BridgeStatusAction {\n START_POLLING_FOR_BRIDGE_TX_STATUS = 'startPollingForBridgeTxStatus',\n WIPE_BRIDGE_STATUS = 'wipeBridgeStatus',\n GET_STATE = 'getState',\n RESET_STATE = 'resetState',\n SUBMIT_TX = 'submitTx',\n}\n\nexport type TokenAmountValuesSerialized = {\n amount: string;\n valueInCurrency: string | null;\n usd: string | null;\n};\n\nexport type QuoteMetadataSerialized = {\n gasFee: TokenAmountValuesSerialized;\n /**\n * The total network fee for the bridge transaction\n * estimatedGasFees + relayerFees\n */\n totalNetworkFee: TokenAmountValuesSerialized;\n /**\n * The total max network fee for the bridge transaction\n * maxGasFees + relayerFees\n */\n totalMaxNetworkFee: TokenAmountValuesSerialized;\n toTokenAmount: TokenAmountValuesSerialized;\n /**\n * The adjusted return for the bridge transaction\n * destTokenAmount - totalNetworkFee\n */\n adjustedReturn: Omit<TokenAmountValuesSerialized, 'amount'>;\n /**\n * The actual amount sent by user in non-atomic decimal form\n * srcTokenAmount + metabridgeFee\n */\n sentAmount: TokenAmountValuesSerialized;\n swapRate: string; // destTokenAmount / sentAmount\n /**\n * The cost of the bridge transaction\n * sentAmount - adjustedReturn\n */\n cost: Omit<TokenAmountValuesSerialized, 'amount'>;\n};\n\nexport type StartPollingForBridgeTxStatusArgs = {\n bridgeTxMeta: TransactionMeta;\n statusRequest: StatusRequest;\n quoteResponse: QuoteResponse & QuoteMetadata;\n startTime?: BridgeHistoryItem['startTime'];\n slippagePercentage: BridgeHistoryItem['slippagePercentage'];\n initialDestAssetBalance?: BridgeHistoryItem['initialDestAssetBalance'];\n targetContractAddress?: BridgeHistoryItem['targetContractAddress'];\n approvalTxId?: BridgeHistoryItem['approvalTxId'];\n isStxEnabled?: BridgeHistoryItem['isStxEnabled'];\n};\n\n/**\n * Chrome: The BigNumber values are automatically serialized to strings when sent to the background\n * Firefox: The BigNumber values are not serialized to strings when sent to the background,\n * so we force the ui to do it manually, by using StartPollingForBridgeTxStatusArgsSerialized type on the startPollingForBridgeTxStatus action\n */\nexport type StartPollingForBridgeTxStatusArgsSerialized = Omit<\n StartPollingForBridgeTxStatusArgs,\n 'quoteResponse'\n> & {\n quoteResponse: QuoteResponse<string | TxData> & QuoteMetadata;\n};\n\nexport type SourceChainTxMetaId = string;\n\nexport type BridgeStatusControllerState = {\n txHistory: Record<SourceChainTxMetaId, BridgeHistoryItem>;\n};\n\n// Actions\ntype BridgeStatusControllerAction<\n FunctionName extends keyof BridgeStatusController,\n> = {\n type: `${typeof BRIDGE_STATUS_CONTROLLER_NAME}:${FunctionName}`;\n handler: BridgeStatusController[FunctionName];\n};\n\nexport type BridgeStatusControllerGetStateAction = ControllerGetStateAction<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerState\n>;\n\n// Maps to BridgeController function names\nexport type BridgeStatusControllerStartPollingForBridgeTxStatusAction =\n BridgeStatusControllerAction<BridgeStatusAction.START_POLLING_FOR_BRIDGE_TX_STATUS>;\n\nexport type BridgeStatusControllerWipeBridgeStatusAction =\n BridgeStatusControllerAction<BridgeStatusAction.WIPE_BRIDGE_STATUS>;\n\nexport type BridgeStatusControllerResetStateAction =\n BridgeStatusControllerAction<BridgeStatusAction.RESET_STATE>;\n\nexport type BridgeStatusControllerSubmitTxAction =\n BridgeStatusControllerAction<BridgeStatusAction.SUBMIT_TX>;\n\nexport type BridgeStatusControllerActions =\n | BridgeStatusControllerStartPollingForBridgeTxStatusAction\n | BridgeStatusControllerWipeBridgeStatusAction\n | BridgeStatusControllerResetStateAction\n | BridgeStatusControllerGetStateAction\n | BridgeStatusControllerSubmitTxAction;\n\n// Events\nexport type BridgeStatusControllerStateChangeEvent = ControllerStateChangeEvent<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerState\n>;\n\nexport type BridgeStatusControllerBridgeTransactionCompleteEvent = {\n type: `${typeof BRIDGE_STATUS_CONTROLLER_NAME}:bridgeTransactionComplete`;\n payload: [{ bridgeHistoryItem: BridgeHistoryItem }];\n};\n\nexport type BridgeStatusControllerBridgeTransactionFailedEvent = {\n type: `${typeof BRIDGE_STATUS_CONTROLLER_NAME}:bridgeTransactionFailed`;\n payload: [{ bridgeHistoryItem: BridgeHistoryItem }];\n};\n\nexport type BridgeStatusControllerEvents =\n | BridgeStatusControllerStateChangeEvent\n | BridgeStatusControllerBridgeTransactionCompleteEvent\n | BridgeStatusControllerBridgeTransactionFailedEvent;\n\n/**\n * The external actions available to the BridgeStatusController.\n */\ntype AllowedActions =\n | NetworkControllerFindNetworkClientIdByChainIdAction\n | NetworkControllerGetStateAction\n | NetworkControllerGetNetworkClientByIdAction\n | AccountsControllerGetSelectedMultichainAccountAction\n | HandleSnapRequest\n | TransactionControllerGetStateAction\n | BridgeControllerAction<BridgeBackgroundAction.GET_BRIDGE_ERC20_ALLOWANCE>\n | BridgeControllerAction<BridgeBackgroundAction.TRACK_METAMETRICS_EVENT>\n | GetGasFeeState\n | AccountsControllerGetAccountByAddressAction;\n\n/**\n * The external events available to the BridgeStatusController.\n */\ntype AllowedEvents = never;\n\n/**\n * The messenger for the BridgeStatusController.\n */\nexport type BridgeStatusControllerMessenger = RestrictedMessenger<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerActions | AllowedActions,\n BridgeStatusControllerEvents | AllowedEvents,\n AllowedActions['type'],\n AllowedEvents['type']\n>;\n"]}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@metamask-previews/bridge-status-controller",
|
3
|
-
"version": "
|
3
|
+
"version": "16.0.0-preview-836a8df",
|
4
4
|
"description": "Manages bridge-related status fetching functionality for MetaMask",
|
5
5
|
"keywords": [
|
6
6
|
"MetaMask",
|
@@ -59,9 +59,8 @@
|
|
59
59
|
},
|
60
60
|
"devDependencies": {
|
61
61
|
"@metamask/accounts-controller": "^27.0.0",
|
62
|
-
"@metamask/assets-controllers": "^59.0.0",
|
63
62
|
"@metamask/auto-changelog": "^3.4.4",
|
64
|
-
"@metamask/bridge-controller": "^
|
63
|
+
"@metamask/bridge-controller": "^19.0.0",
|
65
64
|
"@metamask/gas-fee-controller": "^23.0.0",
|
66
65
|
"@metamask/network-controller": "^23.2.0",
|
67
66
|
"@metamask/snaps-controllers": "^11.2.1",
|
@@ -79,8 +78,7 @@
|
|
79
78
|
},
|
80
79
|
"peerDependencies": {
|
81
80
|
"@metamask/accounts-controller": "^27.0.0",
|
82
|
-
"@metamask/
|
83
|
-
"@metamask/bridge-controller": "^18.0.0",
|
81
|
+
"@metamask/bridge-controller": "^19.0.0",
|
84
82
|
"@metamask/gas-fee-controller": "^23.0.0",
|
85
83
|
"@metamask/network-controller": "^23.0.0",
|
86
84
|
"@metamask/snaps-controllers": "^11.0.0",
|