@metamask/bridge-status-controller 66.0.1 → 66.1.0
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 +25 -1
- package/dist/bridge-status-controller.cjs +16 -6
- package/dist/bridge-status-controller.cjs.map +1 -1
- package/dist/bridge-status-controller.d.cts +5 -2
- package/dist/bridge-status-controller.d.cts.map +1 -1
- package/dist/bridge-status-controller.d.mts +5 -2
- package/dist/bridge-status-controller.d.mts.map +1 -1
- package/dist/bridge-status-controller.mjs +17 -7
- package/dist/bridge-status-controller.mjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +7 -1
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +7 -1
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/dist/utils/metrics.cjs +4 -2
- package/dist/utils/metrics.cjs.map +1 -1
- package/dist/utils/metrics.d.cts +4 -2
- package/dist/utils/metrics.d.cts.map +1 -1
- package/dist/utils/metrics.d.mts +4 -2
- package/dist/utils/metrics.d.mts.map +1 -1
- package/dist/utils/metrics.mjs +5 -3
- package/dist/utils/metrics.mjs.map +1 -1
- package/package.json +2 -2
|
@@ -10,7 +10,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
10
10
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
11
|
};
|
|
12
12
|
var _BridgeStatusController_instances, _BridgeStatusController_pollingTokensByTxMetaId, _BridgeStatusController_intentStatusManager, _BridgeStatusController_clientId, _BridgeStatusController_fetchFn, _BridgeStatusController_config, _BridgeStatusController_addTransactionFn, _BridgeStatusController_addTransactionBatchFn, _BridgeStatusController_updateTransactionFn, _BridgeStatusController_estimateGasFeeFn, _BridgeStatusController_trace, _BridgeStatusController_markTxAsFailed, _BridgeStatusController_restartPollingForIncompleteHistoryItems, _BridgeStatusController_addTxToHistory, _BridgeStatusController_rekeyHistoryItem, _BridgeStatusController_startPollingForTxId, _BridgeStatusController_shouldPollHistoryItem, _BridgeStatusController_getMultichainSelectedAccount, _BridgeStatusController_handleFetchFailure, _BridgeStatusController_fetchBridgeTxStatus, _BridgeStatusController_getSrcTxHash, _BridgeStatusController_updateSrcTxHash, _BridgeStatusController_wipeBridgeStatusByChainId, _BridgeStatusController_handleNonEvmTx, _BridgeStatusController_waitForHashAndReturnFinalTxMeta, _BridgeStatusController_waitForTxConfirmation, _BridgeStatusController_handleApprovalTx, _BridgeStatusController_handleEvmTransaction, _BridgeStatusController_handleUSDTAllowanceReset, _BridgeStatusController_calculateGasFees, _BridgeStatusController_handleEvmTransactionBatch, _BridgeStatusController_trackUnifiedSwapBridgeEvent;
|
|
13
|
-
import { formatChainIdToHex, isNonEvmChainId, StatusTypes, UnifiedSwapBridgeEventName, formatChainIdToCaip, isCrossChain, isTronChainId, isEvmTxData, isHardwareWallet, MetricsActionType, isBitcoinTrade, isTronTrade, AbortReason, PollingStatus } from "@metamask/bridge-controller";
|
|
13
|
+
import { formatChainIdToHex, isNonEvmChainId, StatusTypes, UnifiedSwapBridgeEventName, formatChainIdToCaip, isCrossChain, isTronChainId, isEvmTxData, isHardwareWallet, MetricsActionType, MetaMetricsSwapsEventSource, isBitcoinTrade, isTronTrade, AbortReason, PollingStatus } from "@metamask/bridge-controller";
|
|
14
14
|
import { toHex } from "@metamask/controller-utils";
|
|
15
15
|
import { StaticIntervalPollingController } from "@metamask/polling-controller";
|
|
16
16
|
import { TransactionStatus, TransactionType } from "@metamask/transaction-controller";
|
|
@@ -204,7 +204,7 @@ export class BridgeStatusController extends StaticIntervalPollingController() {
|
|
|
204
204
|
});
|
|
205
205
|
});
|
|
206
206
|
_BridgeStatusController_addTxToHistory.set(this, (startPollingForBridgeTxStatusArgs, actionId) => {
|
|
207
|
-
const { bridgeTxMeta, statusRequest, quoteResponse, startTime, slippagePercentage, initialDestAssetBalance, targetContractAddress, approvalTxId, isStxEnabled, accountAddress: selectedAddress, } = startPollingForBridgeTxStatusArgs;
|
|
207
|
+
const { bridgeTxMeta, statusRequest, quoteResponse, startTime, slippagePercentage, initialDestAssetBalance, targetContractAddress, approvalTxId, isStxEnabled, location, accountAddress: selectedAddress, } = startPollingForBridgeTxStatusArgs;
|
|
208
208
|
// Determine the key for this history item:
|
|
209
209
|
// - For pre-submission (non-batch EVM): use actionId
|
|
210
210
|
// - For post-submission or other cases: use bridgeTxMeta.id
|
|
@@ -244,6 +244,7 @@ export class BridgeStatusController extends StaticIntervalPollingController() {
|
|
|
244
244
|
approvalTxId,
|
|
245
245
|
isStxEnabled: isStxEnabled ?? false,
|
|
246
246
|
featureId: quoteResponse.featureId,
|
|
247
|
+
location,
|
|
247
248
|
};
|
|
248
249
|
this.update((state) => {
|
|
249
250
|
// Use actionId as key for pre-submission, or txMeta.id for post-submission
|
|
@@ -403,6 +404,7 @@ export class BridgeStatusController extends StaticIntervalPollingController() {
|
|
|
403
404
|
if (validationFailures.length > 0) {
|
|
404
405
|
__classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, UnifiedSwapBridgeEventName.StatusValidationFailed, bridgeTxMetaId, {
|
|
405
406
|
failures: validationFailures,
|
|
407
|
+
refresh_count: historyItem.attempts?.counter ?? 0,
|
|
406
408
|
});
|
|
407
409
|
throw new Error(`Bridge status validation failed: ${validationFailures.join(', ')}`);
|
|
408
410
|
}
|
|
@@ -698,9 +700,10 @@ export class BridgeStatusController extends StaticIntervalPollingController() {
|
|
|
698
700
|
* @param quoteResponse - The quote response
|
|
699
701
|
* @param isStxEnabledOnClient - Whether smart transactions are enabled on the client, for example the getSmartTransactionsEnabled selector value from the extension
|
|
700
702
|
* @param quotesReceivedContext - The context for the QuotesReceived event
|
|
703
|
+
* @param location - The entry point from which the user initiated the swap or bridge (e.g. Main View, Token View, Trending Explore)
|
|
701
704
|
* @returns The transaction meta
|
|
702
705
|
*/
|
|
703
|
-
this.submitTx = async (accountAddress, quoteResponse, isStxEnabledOnClient, quotesReceivedContext) => {
|
|
706
|
+
this.submitTx = async (accountAddress, quoteResponse, isStxEnabledOnClient, quotesReceivedContext, location = MetaMetricsSwapsEventSource.MainView) => {
|
|
704
707
|
this.messenger.call('BridgeController:stopPollingForQuotes', AbortReason.TransactionSubmitted,
|
|
705
708
|
// If trade is submitted before all quotes are loaded, the QuotesReceived event is published
|
|
706
709
|
// If the trade has a featureId, it means it was submitted outside of the Unified Swap and Bridge experience, so no QuotesReceived event is published
|
|
@@ -710,7 +713,7 @@ export class BridgeStatusController extends StaticIntervalPollingController() {
|
|
|
710
713
|
throw new Error('Failed to submit cross-chain swap transaction: undefined multichain account');
|
|
711
714
|
}
|
|
712
715
|
const isHardwareAccount = isHardwareWallet(selectedAccount);
|
|
713
|
-
const preConfirmationProperties = getPreConfirmationPropertiesFromQuote(quoteResponse, isStxEnabledOnClient, isHardwareAccount);
|
|
716
|
+
const preConfirmationProperties = getPreConfirmationPropertiesFromQuote(quoteResponse, isStxEnabledOnClient, isHardwareAccount, location);
|
|
714
717
|
// Emit Submitted event after submit button is clicked
|
|
715
718
|
!quoteResponse.featureId &&
|
|
716
719
|
__classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, UnifiedSwapBridgeEventName.Submitted, undefined, preConfirmationProperties);
|
|
@@ -831,6 +834,7 @@ export class BridgeStatusController extends StaticIntervalPollingController() {
|
|
|
831
834
|
isStxEnabled: isStxEnabledOnClient,
|
|
832
835
|
startTime,
|
|
833
836
|
approvalTxId,
|
|
837
|
+
location,
|
|
834
838
|
}, actionId);
|
|
835
839
|
// Pass txFee when gasIncluded is true to use the quote's gas fees
|
|
836
840
|
// instead of re-estimating (which would fail for max native token swaps)
|
|
@@ -870,6 +874,7 @@ export class BridgeStatusController extends StaticIntervalPollingController() {
|
|
|
870
874
|
isStxEnabled: isStxEnabledOnClient,
|
|
871
875
|
startTime,
|
|
872
876
|
approvalTxId,
|
|
877
|
+
location,
|
|
873
878
|
});
|
|
874
879
|
}
|
|
875
880
|
if (isNonEvmChainId(quoteResponse.quote.srcChainId)) {
|
|
@@ -894,15 +899,16 @@ export class BridgeStatusController extends StaticIntervalPollingController() {
|
|
|
894
899
|
* @param params.quoteResponse - Quote carrying intent data
|
|
895
900
|
* @param params.signature - Hex signature produced by eth_signTypedData_v4
|
|
896
901
|
* @param params.accountAddress - The EOA submitting the order
|
|
902
|
+
* @param params.location - The entry point from which the user initiated the swap or bridge
|
|
897
903
|
* @returns A lightweight TransactionMeta-like object for history linking
|
|
898
904
|
*/
|
|
899
905
|
this.submitIntent = async (params) => {
|
|
900
|
-
const { quoteResponse, signature, accountAddress } = params;
|
|
906
|
+
const { quoteResponse, signature, accountAddress, location } = params;
|
|
901
907
|
this.messenger.call('BridgeController:stopPollingForQuotes', AbortReason.TransactionSubmitted);
|
|
902
908
|
// Build pre-confirmation properties for error tracking parity with submitTx
|
|
903
909
|
const account = __classPrivateFieldGet(this, _BridgeStatusController_instances, "m", _BridgeStatusController_getMultichainSelectedAccount).call(this, accountAddress);
|
|
904
910
|
const isHardwareAccount = Boolean(account) && isHardwareWallet(account);
|
|
905
|
-
const preConfirmationProperties = getPreConfirmationPropertiesFromQuote(quoteResponse, false, isHardwareAccount);
|
|
911
|
+
const preConfirmationProperties = getPreConfirmationPropertiesFromQuote(quoteResponse, false, isHardwareAccount, location);
|
|
906
912
|
try {
|
|
907
913
|
const intent = getIntentFromQuote(quoteResponse);
|
|
908
914
|
// If backend provided an approval tx for this intent quote, submit it first (on-chain),
|
|
@@ -997,6 +1003,7 @@ export class BridgeStatusController extends StaticIntervalPollingController() {
|
|
|
997
1003
|
isStxEnabled: false,
|
|
998
1004
|
approvalTxId,
|
|
999
1005
|
startTime,
|
|
1006
|
+
location,
|
|
1000
1007
|
});
|
|
1001
1008
|
// Start polling using the orderId key to route to intent manager
|
|
1002
1009
|
__classPrivateFieldGet(this, _BridgeStatusController_startPollingForTxId, "f").call(this, bridgeHistoryKey);
|
|
@@ -1025,6 +1032,9 @@ export class BridgeStatusController extends StaticIntervalPollingController() {
|
|
|
1025
1032
|
_BridgeStatusController_trackUnifiedSwapBridgeEvent.set(this, (eventName, txMetaId, eventProperties) => {
|
|
1026
1033
|
const baseProperties = {
|
|
1027
1034
|
action_type: MetricsActionType.SWAPBRIDGE_V1,
|
|
1035
|
+
location: eventProperties?.location ??
|
|
1036
|
+
(txMetaId ? this.state.txHistory?.[txMetaId]?.location : undefined) ??
|
|
1037
|
+
MetaMetricsSwapsEventSource.MainView,
|
|
1028
1038
|
...(eventProperties ?? {}),
|
|
1029
1039
|
};
|
|
1030
1040
|
// This will publish events for PERPS dropped tx failures as well
|
|
@@ -1034,7 +1044,7 @@ export class BridgeStatusController extends StaticIntervalPollingController() {
|
|
|
1034
1044
|
}
|
|
1035
1045
|
const historyItem = this.state.txHistory[txMetaId];
|
|
1036
1046
|
if (!historyItem) {
|
|
1037
|
-
this.messenger.call('BridgeController:trackUnifiedSwapBridgeEvent', eventName,
|
|
1047
|
+
this.messenger.call('BridgeController:trackUnifiedSwapBridgeEvent', eventName, baseProperties);
|
|
1038
1048
|
return;
|
|
1039
1049
|
}
|
|
1040
1050
|
const requestParamProperties = getRequestParamFromHistory(historyItem);
|