@metamask-previews/bridge-status-controller 63.1.0-preview-159e76e4 → 64.0.0-preview-7cfbb337
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 +8 -2
- package/dist/bridge-status-controller.cjs +61 -51
- 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 +29 -19
- package/dist/bridge-status-controller.mjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +1 -1
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +1 -1
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/dist/utils/transaction.cjs +3 -17
- package/dist/utils/transaction.cjs.map +1 -1
- package/dist/utils/transaction.d.cts +1 -38
- package/dist/utils/transaction.d.cts.map +1 -1
- package/dist/utils/transaction.d.mts +1 -38
- package/dist/utils/transaction.d.mts.map +1 -1
- package/dist/utils/transaction.mjs +3 -16
- package/dist/utils/transaction.mjs.map +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -7,10 +7,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [64.0.0]
|
|
11
|
+
|
|
10
12
|
### Changed
|
|
11
13
|
|
|
14
|
+
- **BREAKING:** Bump `@metamask/bridge-controller` from `^63.2.0` to `^64.0.0` ([#7295](https://github.com/MetaMask/core/pull/7295))
|
|
15
|
+
- Improve type safety by replacing tx data type assertions with type predicates ([#7228](https://github.com/MetaMask/core/pull/7228))
|
|
16
|
+
- Submit `resetApproval` tx before the tx approval if it is included in the quoteResponse ([#7228](https://github.com/MetaMask/core/pull/7228))
|
|
12
17
|
- Bump `@metamask/network-controller` from `^26.0.0` to `^27.0.0` ([#7258](https://github.com/MetaMask/core/pull/7258))
|
|
13
|
-
- Bump `@metamask/transaction-controller` from `^62.3.0` to `^62.
|
|
18
|
+
- Bump `@metamask/transaction-controller` from `^62.3.0` to `^62.4.0` ([#7257](https://github.com/MetaMask/core/pull/7257), [#7289](https://github.com/MetaMask/core/pull/7289))
|
|
14
19
|
|
|
15
20
|
## [63.1.0]
|
|
16
21
|
|
|
@@ -804,7 +809,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
804
809
|
|
|
805
810
|
- Initial release ([#5317](https://github.com/MetaMask/core/pull/5317))
|
|
806
811
|
|
|
807
|
-
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/bridge-status-controller@
|
|
812
|
+
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/bridge-status-controller@64.0.0...HEAD
|
|
813
|
+
[64.0.0]: https://github.com/MetaMask/core/compare/@metamask/bridge-status-controller@63.1.0...@metamask/bridge-status-controller@64.0.0
|
|
808
814
|
[63.1.0]: https://github.com/MetaMask/core/compare/@metamask/bridge-status-controller@63.0.0...@metamask/bridge-status-controller@63.1.0
|
|
809
815
|
[63.0.0]: https://github.com/MetaMask/core/compare/@metamask/bridge-status-controller@62.0.0...@metamask/bridge-status-controller@63.0.0
|
|
810
816
|
[62.0.0]: https://github.com/MetaMask/core/compare/@metamask/bridge-status-controller@61.0.0...@metamask/bridge-status-controller@62.0.0
|
|
@@ -14,6 +14,7 @@ var _BridgeStatusController_instances, _BridgeStatusController_pollingTokensByTx
|
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.BridgeStatusController = void 0;
|
|
16
16
|
const bridge_controller_1 = require("@metamask/bridge-controller");
|
|
17
|
+
const bridge_controller_2 = require("@metamask/bridge-controller");
|
|
17
18
|
const controller_utils_1 = require("@metamask/controller-utils");
|
|
18
19
|
const polling_controller_1 = require("@metamask/polling-controller");
|
|
19
20
|
const transaction_controller_1 = require("@metamask/transaction-controller");
|
|
@@ -65,7 +66,7 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
|
|
|
65
66
|
return;
|
|
66
67
|
}
|
|
67
68
|
this.update((statusState) => {
|
|
68
|
-
statusState.txHistory[txHistoryKey].status.status =
|
|
69
|
+
statusState.txHistory[txHistoryKey].status.status = bridge_controller_2.StatusTypes.FAILED;
|
|
69
70
|
});
|
|
70
71
|
});
|
|
71
72
|
this.resetState = () => {
|
|
@@ -123,7 +124,7 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
|
|
|
123
124
|
}
|
|
124
125
|
});
|
|
125
126
|
// Restart polling if it was stopped and this is a bridge transaction
|
|
126
|
-
const isBridgeTx = (0,
|
|
127
|
+
const isBridgeTx = (0, bridge_controller_2.isCrossChain)(historyItem.quote.srcChainId, historyItem.quote.destChainId);
|
|
127
128
|
if (isBridgeTx) {
|
|
128
129
|
// Check if polling was stopped (no active polling token)
|
|
129
130
|
const existingPollingToken = __classPrivateFieldGet(this, _BridgeStatusController_pollingTokensByTxMetaId, "f")[targetTxMetaId];
|
|
@@ -151,8 +152,8 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
|
|
|
151
152
|
const { txHistory } = this.state;
|
|
152
153
|
const historyItems = Object.values(txHistory);
|
|
153
154
|
const incompleteHistoryItems = historyItems
|
|
154
|
-
.filter((historyItem) => historyItem.status.status ===
|
|
155
|
-
historyItem.status.status ===
|
|
155
|
+
.filter((historyItem) => historyItem.status.status === bridge_controller_2.StatusTypes.PENDING ||
|
|
156
|
+
historyItem.status.status === bridge_controller_2.StatusTypes.UNKNOWN)
|
|
156
157
|
.filter((historyItem) => {
|
|
157
158
|
// Check if we are already polling this tx, if so, skip restarting polling for that
|
|
158
159
|
const pollingToken = __classPrivateFieldGet(this, _BridgeStatusController_pollingTokensByTxMetaId, "f")[historyItem.txMetaId];
|
|
@@ -160,7 +161,7 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
|
|
|
160
161
|
})
|
|
161
162
|
// Swap txs don't need to have their statuses polled
|
|
162
163
|
.filter((historyItem) => {
|
|
163
|
-
const isBridgeTx = (0,
|
|
164
|
+
const isBridgeTx = (0, bridge_controller_2.isCrossChain)(historyItem.quote.srcChainId, historyItem.quote.destChainId);
|
|
164
165
|
return isBridgeTx;
|
|
165
166
|
});
|
|
166
167
|
incompleteHistoryItems.forEach((historyItem) => {
|
|
@@ -198,7 +199,7 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
|
|
|
198
199
|
status: {
|
|
199
200
|
// We always have a PENDING status when we start polling for a tx, don't need the Bridge API for that
|
|
200
201
|
// Also we know the bare minimum fields for status at this point in time
|
|
201
|
-
status:
|
|
202
|
+
status: bridge_controller_2.StatusTypes.PENDING,
|
|
202
203
|
srcChain: {
|
|
203
204
|
chainId: statusRequest.srcChainId,
|
|
204
205
|
txHash: statusRequest.srcTxHash,
|
|
@@ -225,7 +226,7 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
|
|
|
225
226
|
return;
|
|
226
227
|
}
|
|
227
228
|
const { quote } = txHistoryItem;
|
|
228
|
-
const isBridgeTx = (0,
|
|
229
|
+
const isBridgeTx = (0, bridge_controller_2.isCrossChain)(quote.srcChainId, quote.destChainId);
|
|
229
230
|
if (isBridgeTx) {
|
|
230
231
|
__classPrivateFieldGet(this, _BridgeStatusController_pollingTokensByTxMetaId, "f")[txId] = this.startPolling({
|
|
231
232
|
bridgeTxMetaId: txId,
|
|
@@ -301,7 +302,7 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
|
|
|
301
302
|
const statusRequest = (0, bridge_status_1.getStatusRequestWithSrcTxHash)(historyItem.quote, srcTxHash);
|
|
302
303
|
const { status, validationFailures } = await (0, bridge_status_1.fetchBridgeTxStatus)(statusRequest, __classPrivateFieldGet(this, _BridgeStatusController_clientId, "f"), __classPrivateFieldGet(this, _BridgeStatusController_fetchFn, "f"), __classPrivateFieldGet(this, _BridgeStatusController_config, "f").customBridgeApiBaseUrl);
|
|
303
304
|
if (validationFailures.length > 0) {
|
|
304
|
-
__classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this,
|
|
305
|
+
__classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, bridge_controller_2.UnifiedSwapBridgeEventName.StatusValidationFailed, bridgeTxMetaId, {
|
|
305
306
|
failures: validationFailures,
|
|
306
307
|
});
|
|
307
308
|
throw new Error(`Bridge status validation failed: ${validationFailures.join(', ')}`);
|
|
@@ -309,8 +310,8 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
|
|
|
309
310
|
const newBridgeHistoryItem = {
|
|
310
311
|
...historyItem,
|
|
311
312
|
status,
|
|
312
|
-
completionTime: status.status ===
|
|
313
|
-
status.status ===
|
|
313
|
+
completionTime: status.status === bridge_controller_2.StatusTypes.COMPLETE ||
|
|
314
|
+
status.status === bridge_controller_2.StatusTypes.FAILED
|
|
314
315
|
? Date.now()
|
|
315
316
|
: undefined, // TODO make this more accurate by looking up dest txHash block time
|
|
316
317
|
attempts: undefined,
|
|
@@ -323,8 +324,8 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
|
|
|
323
324
|
state.txHistory[bridgeTxMetaId] = newBridgeHistoryItem;
|
|
324
325
|
});
|
|
325
326
|
const pollingToken = __classPrivateFieldGet(this, _BridgeStatusController_pollingTokensByTxMetaId, "f")[bridgeTxMetaId];
|
|
326
|
-
const isFinalStatus = status.status ===
|
|
327
|
-
status.status ===
|
|
327
|
+
const isFinalStatus = status.status === bridge_controller_2.StatusTypes.COMPLETE ||
|
|
328
|
+
status.status === bridge_controller_2.StatusTypes.FAILED;
|
|
328
329
|
if (isFinalStatus && pollingToken) {
|
|
329
330
|
this.stopPollingByPollingToken(pollingToken);
|
|
330
331
|
delete __classPrivateFieldGet(this, _BridgeStatusController_pollingTokensByTxMetaId, "f")[bridgeTxMetaId];
|
|
@@ -332,12 +333,12 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
|
|
|
332
333
|
if (historyItem.featureId) {
|
|
333
334
|
return;
|
|
334
335
|
}
|
|
335
|
-
if (status.status ===
|
|
336
|
-
__classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this,
|
|
336
|
+
if (status.status === bridge_controller_2.StatusTypes.COMPLETE) {
|
|
337
|
+
__classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, bridge_controller_2.UnifiedSwapBridgeEventName.Completed, bridgeTxMetaId);
|
|
337
338
|
this.messenger.publish('BridgeStatusController:destinationTransactionCompleted', historyItem.quote.destAsset.assetId);
|
|
338
339
|
}
|
|
339
|
-
if (status.status ===
|
|
340
|
-
__classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this,
|
|
340
|
+
if (status.status === bridge_controller_2.StatusTypes.FAILED) {
|
|
341
|
+
__classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, bridge_controller_2.UnifiedSwapBridgeEventName.Failed, bridgeTxMetaId);
|
|
341
342
|
}
|
|
342
343
|
}
|
|
343
344
|
}
|
|
@@ -433,11 +434,10 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
|
|
|
433
434
|
}
|
|
434
435
|
return finalTransactionMeta;
|
|
435
436
|
});
|
|
436
|
-
_BridgeStatusController_handleApprovalTx.set(this, async (isBridgeTx,
|
|
437
|
-
const { approval } = quoteResponse;
|
|
437
|
+
_BridgeStatusController_handleApprovalTx.set(this, async (isBridgeTx, srcChainId, approval, resetApproval, requireApproval) => {
|
|
438
438
|
if (approval) {
|
|
439
439
|
const approveTx = async () => {
|
|
440
|
-
await __classPrivateFieldGet(this, _BridgeStatusController_handleUSDTAllowanceReset, "f").call(this,
|
|
440
|
+
await __classPrivateFieldGet(this, _BridgeStatusController_handleUSDTAllowanceReset, "f").call(this, resetApproval);
|
|
441
441
|
const approvalTxMeta = await __classPrivateFieldGet(this, _BridgeStatusController_handleEvmTransaction, "f").call(this, {
|
|
442
442
|
transactionType: isBridgeTx
|
|
443
443
|
? transaction_controller_1.TransactionType.bridgeApproval
|
|
@@ -445,7 +445,7 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
|
|
|
445
445
|
trade: approval,
|
|
446
446
|
requireApproval,
|
|
447
447
|
});
|
|
448
|
-
await (0, transaction_1.handleApprovalDelay)(
|
|
448
|
+
await (0, transaction_1.handleApprovalDelay)(srcChainId);
|
|
449
449
|
return approvalTxMeta;
|
|
450
450
|
};
|
|
451
451
|
return await __classPrivateFieldGet(this, _BridgeStatusController_trace, "f").call(this, {
|
|
@@ -453,7 +453,7 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
|
|
|
453
453
|
? constants_1.TraceName.BridgeTransactionApprovalCompleted
|
|
454
454
|
: constants_1.TraceName.SwapTransactionApprovalCompleted,
|
|
455
455
|
data: {
|
|
456
|
-
srcChainId: (0,
|
|
456
|
+
srcChainId: (0, bridge_controller_2.formatChainIdToCaip)(srcChainId),
|
|
457
457
|
stxEnabled: false,
|
|
458
458
|
},
|
|
459
459
|
}, approveTx);
|
|
@@ -475,7 +475,7 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
|
|
|
475
475
|
if (!selectedAccount) {
|
|
476
476
|
throw new Error('Failed to submit cross-chain swap transaction: unknown account in trade data');
|
|
477
477
|
}
|
|
478
|
-
const hexChainId = (0,
|
|
478
|
+
const hexChainId = (0, bridge_controller_2.formatChainIdToHex)(trade.chainId);
|
|
479
479
|
const networkClientId = this.messenger.call('NetworkController:findNetworkClientIdByChainId', hexChainId);
|
|
480
480
|
const requestOptions = {
|
|
481
481
|
actionId,
|
|
@@ -497,8 +497,7 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
|
|
|
497
497
|
const { result } = await __classPrivateFieldGet(this, _BridgeStatusController_addTransactionFn, "f").call(this, transactionParamsWithMaxGas, requestOptions);
|
|
498
498
|
return await __classPrivateFieldGet(this, _BridgeStatusController_waitForHashAndReturnFinalTxMeta, "f").call(this, result);
|
|
499
499
|
});
|
|
500
|
-
_BridgeStatusController_handleUSDTAllowanceReset.set(this, async (
|
|
501
|
-
const resetApproval = await (0, transaction_1.getUSDTAllowanceResetTx)(this.messenger, quoteResponse);
|
|
500
|
+
_BridgeStatusController_handleUSDTAllowanceReset.set(this, async (resetApproval) => {
|
|
502
501
|
if (resetApproval) {
|
|
503
502
|
await __classPrivateFieldGet(this, _BridgeStatusController_handleEvmTransaction, "f").call(this, {
|
|
504
503
|
transactionType: transaction_controller_1.TransactionType.bridgeApproval,
|
|
@@ -570,7 +569,7 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
|
|
|
570
569
|
* @returns The transaction meta
|
|
571
570
|
*/
|
|
572
571
|
this.submitTx = async (accountAddress, quoteResponse, isStxEnabledOnClient, quotesReceivedContext) => {
|
|
573
|
-
this.messenger.call('BridgeController:stopPollingForQuotes',
|
|
572
|
+
this.messenger.call('BridgeController:stopPollingForQuotes', bridge_controller_2.AbortReason.TransactionSubmitted,
|
|
574
573
|
// If trade is submitted before all quotes are loaded, the QuotesReceived event is published
|
|
575
574
|
// 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
|
|
576
575
|
quoteResponse.featureId ? undefined : quotesReceivedContext);
|
|
@@ -578,38 +577,37 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
|
|
|
578
577
|
if (!selectedAccount) {
|
|
579
578
|
throw new Error('Failed to submit cross-chain swap transaction: undefined multichain account');
|
|
580
579
|
}
|
|
581
|
-
const isHardwareAccount = (0,
|
|
580
|
+
const isHardwareAccount = (0, bridge_controller_2.isHardwareWallet)(selectedAccount);
|
|
582
581
|
const preConfirmationProperties = (0, metrics_1.getPreConfirmationPropertiesFromQuote)(quoteResponse, isStxEnabledOnClient, isHardwareAccount);
|
|
583
582
|
// Emit Submitted event after submit button is clicked
|
|
584
583
|
!quoteResponse.featureId &&
|
|
585
|
-
__classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this,
|
|
584
|
+
__classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, bridge_controller_2.UnifiedSwapBridgeEventName.Submitted, undefined, preConfirmationProperties);
|
|
586
585
|
let txMeta;
|
|
587
586
|
let approvalTxId;
|
|
588
587
|
const startTime = Date.now();
|
|
589
|
-
const isBridgeTx = (0,
|
|
588
|
+
const isBridgeTx = (0, bridge_controller_2.isCrossChain)(quoteResponse.quote.srcChainId, quoteResponse.quote.destChainId);
|
|
590
589
|
// Submit non-EVM tx (Solana, BTC, Tron)
|
|
591
|
-
|
|
592
|
-
(typeof quoteResponse.trade === 'string' ||
|
|
593
|
-
(0, bridge_controller_1.isBitcoinTrade)(quoteResponse.trade) ||
|
|
594
|
-
(0, bridge_controller_1.isTronTrade)(quoteResponse.trade));
|
|
595
|
-
if (isNonEvmTrade) {
|
|
590
|
+
if ((0, bridge_controller_2.isNonEvmChainId)(quoteResponse.quote.srcChainId)) {
|
|
596
591
|
// Handle non-EVM approval if present (e.g., Tron token approvals)
|
|
597
|
-
if (quoteResponse.approval) {
|
|
592
|
+
if (quoteResponse.approval && (0, bridge_controller_2.isTronTrade)(quoteResponse.approval)) {
|
|
598
593
|
const approvalTxMeta = await __classPrivateFieldGet(this, _BridgeStatusController_trace, "f").call(this, {
|
|
599
594
|
name: isBridgeTx
|
|
600
595
|
? constants_1.TraceName.BridgeTransactionApprovalCompleted
|
|
601
596
|
: constants_1.TraceName.SwapTransactionApprovalCompleted,
|
|
602
597
|
data: {
|
|
603
|
-
srcChainId: (0,
|
|
598
|
+
srcChainId: (0, bridge_controller_2.formatChainIdToCaip)(quoteResponse.quote.srcChainId),
|
|
604
599
|
stxEnabled: false,
|
|
605
600
|
},
|
|
606
601
|
}, async () => {
|
|
607
602
|
try {
|
|
608
|
-
return
|
|
603
|
+
return quoteResponse.approval &&
|
|
604
|
+
(0, bridge_controller_2.isTronTrade)(quoteResponse.approval)
|
|
605
|
+
? await __classPrivateFieldGet(this, _BridgeStatusController_handleNonEvmTx, "f").call(this, quoteResponse.approval, quoteResponse, selectedAccount)
|
|
606
|
+
: undefined;
|
|
609
607
|
}
|
|
610
608
|
catch (error) {
|
|
611
609
|
!quoteResponse.featureId &&
|
|
612
|
-
__classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this,
|
|
610
|
+
__classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, bridge_controller_2.UnifiedSwapBridgeEventName.Failed, undefined, {
|
|
613
611
|
error_message: error?.message,
|
|
614
612
|
...preConfirmationProperties,
|
|
615
613
|
});
|
|
@@ -618,23 +616,28 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
|
|
|
618
616
|
});
|
|
619
617
|
approvalTxId = approvalTxMeta?.id;
|
|
620
618
|
// Add delay after approval similar to EVM flow
|
|
621
|
-
await (0, transaction_1.handleApprovalDelay)(quoteResponse);
|
|
619
|
+
await (0, transaction_1.handleApprovalDelay)(quoteResponse.quote.srcChainId);
|
|
622
620
|
}
|
|
623
621
|
txMeta = await __classPrivateFieldGet(this, _BridgeStatusController_trace, "f").call(this, {
|
|
624
622
|
name: isBridgeTx
|
|
625
623
|
? constants_1.TraceName.BridgeTransactionCompleted
|
|
626
624
|
: constants_1.TraceName.SwapTransactionCompleted,
|
|
627
625
|
data: {
|
|
628
|
-
srcChainId: (0,
|
|
626
|
+
srcChainId: (0, bridge_controller_2.formatChainIdToCaip)(quoteResponse.quote.srcChainId),
|
|
629
627
|
stxEnabled: false,
|
|
630
628
|
},
|
|
631
629
|
}, async () => {
|
|
632
630
|
try {
|
|
631
|
+
if (!((0, bridge_controller_2.isTronTrade)(quoteResponse.trade) ||
|
|
632
|
+
(0, bridge_controller_2.isBitcoinTrade)(quoteResponse.trade) ||
|
|
633
|
+
typeof quoteResponse.trade === 'string')) {
|
|
634
|
+
throw new Error('Failed to submit cross-chain swap transaction: trade is not a non-EVM transaction');
|
|
635
|
+
}
|
|
633
636
|
return await __classPrivateFieldGet(this, _BridgeStatusController_handleNonEvmTx, "f").call(this, quoteResponse.trade, quoteResponse, selectedAccount);
|
|
634
637
|
}
|
|
635
638
|
catch (error) {
|
|
636
639
|
!quoteResponse.featureId &&
|
|
637
|
-
__classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this,
|
|
640
|
+
__classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, bridge_controller_2.UnifiedSwapBridgeEventName.Failed, txMeta?.id, {
|
|
638
641
|
error_message: error?.message,
|
|
639
642
|
...preConfirmationProperties,
|
|
640
643
|
});
|
|
@@ -653,15 +656,20 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
|
|
|
653
656
|
? constants_1.TraceName.BridgeTransactionCompleted
|
|
654
657
|
: constants_1.TraceName.SwapTransactionCompleted,
|
|
655
658
|
data: {
|
|
656
|
-
srcChainId: (0,
|
|
659
|
+
srcChainId: (0, bridge_controller_2.formatChainIdToCaip)(quoteResponse.quote.srcChainId),
|
|
657
660
|
stxEnabled: isStxEnabledOnClient,
|
|
658
661
|
},
|
|
659
662
|
}, async () => {
|
|
663
|
+
if (!(0, bridge_controller_1.isEvmTxData)(quoteResponse.trade)) {
|
|
664
|
+
throw new Error('Failed to submit cross-chain swap transaction: trade is not an EVM transaction');
|
|
665
|
+
}
|
|
660
666
|
if (isStxEnabledOnClient || quoteResponse.quote.gasIncluded7702) {
|
|
661
667
|
const { tradeMeta, approvalMeta } = await __classPrivateFieldGet(this, _BridgeStatusController_handleEvmTransactionBatch, "f").call(this, {
|
|
662
668
|
isBridgeTx,
|
|
663
|
-
resetApproval:
|
|
664
|
-
approval: quoteResponse.approval,
|
|
669
|
+
resetApproval: quoteResponse.resetApproval,
|
|
670
|
+
approval: quoteResponse.approval && (0, bridge_controller_1.isEvmTxData)(quoteResponse.approval)
|
|
671
|
+
? quoteResponse.approval
|
|
672
|
+
: undefined,
|
|
665
673
|
trade: quoteResponse.trade,
|
|
666
674
|
quoteResponse,
|
|
667
675
|
requireApproval,
|
|
@@ -670,7 +678,9 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
|
|
|
670
678
|
return tradeMeta;
|
|
671
679
|
}
|
|
672
680
|
// Set approval time and id if an approval tx is needed
|
|
673
|
-
const approvalTxMeta = await __classPrivateFieldGet(this, _BridgeStatusController_handleApprovalTx, "f").call(this, isBridgeTx, quoteResponse,
|
|
681
|
+
const approvalTxMeta = await __classPrivateFieldGet(this, _BridgeStatusController_handleApprovalTx, "f").call(this, isBridgeTx, quoteResponse.quote.srcChainId, quoteResponse.approval && (0, bridge_controller_1.isEvmTxData)(quoteResponse.approval)
|
|
682
|
+
? quoteResponse.approval
|
|
683
|
+
: undefined, quoteResponse.resetApproval, requireApproval);
|
|
674
684
|
approvalTxId = approvalTxMeta?.id;
|
|
675
685
|
await (0, transaction_1.handleMobileHardwareWalletDelay)(requireApproval);
|
|
676
686
|
return await __classPrivateFieldGet(this, _BridgeStatusController_handleEvmTransaction, "f").call(this, {
|
|
@@ -697,12 +707,12 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
|
|
|
697
707
|
startTime,
|
|
698
708
|
approvalTxId,
|
|
699
709
|
});
|
|
700
|
-
if ((0,
|
|
710
|
+
if ((0, bridge_controller_2.isNonEvmChainId)(quoteResponse.quote.srcChainId)) {
|
|
701
711
|
// Start polling for bridge tx status
|
|
702
712
|
__classPrivateFieldGet(this, _BridgeStatusController_startPollingForTxId, "f").call(this, txMeta.id);
|
|
703
713
|
// Track non-EVM Swap completed event
|
|
704
714
|
if (!isBridgeTx) {
|
|
705
|
-
__classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this,
|
|
715
|
+
__classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, bridge_controller_2.UnifiedSwapBridgeEventName.Completed, txMeta.id);
|
|
706
716
|
}
|
|
707
717
|
}
|
|
708
718
|
}
|
|
@@ -720,7 +730,7 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
|
|
|
720
730
|
*/
|
|
721
731
|
_BridgeStatusController_trackUnifiedSwapBridgeEvent.set(this, (eventName, txMetaId, eventProperties) => {
|
|
722
732
|
const baseProperties = {
|
|
723
|
-
action_type:
|
|
733
|
+
action_type: bridge_controller_2.MetricsActionType.SWAPBRIDGE_V1,
|
|
724
734
|
...(eventProperties ?? {}),
|
|
725
735
|
};
|
|
726
736
|
// This will publish events for PERPS dropped tx failures as well
|
|
@@ -735,7 +745,7 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
|
|
|
735
745
|
}
|
|
736
746
|
const requestParamProperties = (0, metrics_1.getRequestParamFromHistory)(historyItem);
|
|
737
747
|
// Always publish StatusValidationFailed event, regardless of featureId
|
|
738
|
-
if (eventName ===
|
|
748
|
+
if (eventName === bridge_controller_2.UnifiedSwapBridgeEventName.StatusValidationFailed) {
|
|
739
749
|
const { chain_id_source, chain_id_destination, token_address_source, token_address_destination, } = requestParamProperties;
|
|
740
750
|
this.messenger.call('BridgeController:trackUnifiedSwapBridgeEvent', eventName, {
|
|
741
751
|
...baseProperties,
|
|
@@ -803,16 +813,16 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
|
|
|
803
813
|
__classPrivateFieldGet(this, _BridgeStatusController_markTxAsFailed, "f").call(this, transactionMeta);
|
|
804
814
|
// Track failed event
|
|
805
815
|
if (status !== transaction_controller_1.TransactionStatus.rejected) {
|
|
806
|
-
__classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this,
|
|
816
|
+
__classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, bridge_controller_2.UnifiedSwapBridgeEventName.Failed, id, (0, metrics_1.getEVMTxPropertiesFromTransactionMeta)(transactionMeta));
|
|
807
817
|
}
|
|
808
818
|
}
|
|
809
819
|
});
|
|
810
820
|
this.messenger.subscribe('TransactionController:transactionConfirmed', (transactionMeta) => {
|
|
811
821
|
const { type, id, chainId } = transactionMeta;
|
|
812
822
|
if (type === transaction_controller_1.TransactionType.swap) {
|
|
813
|
-
__classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this,
|
|
823
|
+
__classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, bridge_controller_2.UnifiedSwapBridgeEventName.Completed, id);
|
|
814
824
|
}
|
|
815
|
-
if (type === transaction_controller_1.TransactionType.bridge && !(0,
|
|
825
|
+
if (type === transaction_controller_1.TransactionType.bridge && !(0, bridge_controller_2.isNonEvmChainId)(chainId)) {
|
|
816
826
|
__classPrivateFieldGet(this, _BridgeStatusController_startPollingForTxId, "f").call(this, id);
|
|
817
827
|
}
|
|
818
828
|
});
|