@metamask-previews/transaction-controller 49.0.0-preview-2084c06c → 49.0.0-preview-b4d33c51
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 -0
- package/dist/TransactionController.cjs +63 -46
- package/dist/TransactionController.cjs.map +1 -1
- package/dist/TransactionController.d.cts +3 -11
- package/dist/TransactionController.d.cts.map +1 -1
- package/dist/TransactionController.d.mts +3 -11
- package/dist/TransactionController.d.mts.map +1 -1
- package/dist/TransactionController.mjs +64 -47
- package/dist/TransactionController.mjs.map +1 -1
- package/dist/helpers/AccountsApiRemoteTransactionSource.cjs +8 -3
- package/dist/helpers/AccountsApiRemoteTransactionSource.cjs.map +1 -1
- package/dist/helpers/AccountsApiRemoteTransactionSource.d.cts.map +1 -1
- package/dist/helpers/AccountsApiRemoteTransactionSource.d.mts.map +1 -1
- package/dist/helpers/AccountsApiRemoteTransactionSource.mjs +8 -3
- package/dist/helpers/AccountsApiRemoteTransactionSource.mjs.map +1 -1
- package/dist/helpers/IncomingTransactionHelper.cjs +12 -4
- package/dist/helpers/IncomingTransactionHelper.cjs.map +1 -1
- package/dist/helpers/IncomingTransactionHelper.d.cts +3 -1
- package/dist/helpers/IncomingTransactionHelper.d.cts.map +1 -1
- package/dist/helpers/IncomingTransactionHelper.d.mts +3 -1
- package/dist/helpers/IncomingTransactionHelper.d.mts.map +1 -1
- package/dist/helpers/IncomingTransactionHelper.mjs +12 -4
- package/dist/helpers/IncomingTransactionHelper.mjs.map +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +25 -12
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +25 -12
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/dist/utils/batch.cjs +19 -1
- package/dist/utils/batch.cjs.map +1 -1
- package/dist/utils/batch.d.cts +1 -1
- package/dist/utils/batch.d.cts.map +1 -1
- package/dist/utils/batch.d.mts +1 -1
- package/dist/utils/batch.d.mts.map +1 -1
- package/dist/utils/batch.mjs +19 -1
- package/dist/utils/batch.mjs.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Add additional metadata for batch metrics ([#5488](https://github.com/MetaMask/core/pull/5488))
|
|
13
|
+
- Add `delegationAddress` to `TransactionMetadata`.
|
|
14
|
+
- Add `NestedTransactionMetadata` type containing `BatchTransactionParams` and `type`.
|
|
15
|
+
- Add optional `type` to `TransactionBatchSingleRequest`.
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- **BREAKING:** Add additional metadata for batch metrics ([#5488](https://github.com/MetaMask/core/pull/5488))
|
|
20
|
+
- Change `error` in `TransactionMetadata` to optional for all statuses.
|
|
21
|
+
- Change `nestedTransactions` in `TransactionMetadata` to array of `NestedTransactionMetadata`.
|
|
22
|
+
|
|
10
23
|
## [49.0.0]
|
|
11
24
|
|
|
12
25
|
### Added
|
|
@@ -13,7 +13,7 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
|
|
|
13
13
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
14
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
15
|
};
|
|
16
|
-
var _TransactionController_instances, _TransactionController_internalEvents, _TransactionController_methodDataHelper, _TransactionController_incomingTransactionHelper, _TransactionController_incomingTransactionOptions, _TransactionController_pendingTransactionOptions, _TransactionController_trace, _TransactionController_transactionHistoryLimit, _TransactionController_isFirstTimeInteractionEnabled, _TransactionController_isSimulationEnabled, _TransactionController_testGasFeeFlows, _TransactionController_multichainTrackingHelper, _TransactionController_retryTransaction, _TransactionController_getChainId, _TransactionController_getNetworkClientId, _TransactionController_getEthQuery, _TransactionController_getProvider, _TransactionController_createNonceTracker, _TransactionController_createPendingTransactionTracker, _TransactionController_checkForPendingTransactionAndStartPolling, _TransactionController_stopAllTracking, _TransactionController_addIncomingTransactionHelperListeners, _TransactionController_removePendingTransactionTrackerListeners, _TransactionController_addPendingTransactionTrackerListeners, _TransactionController_getNonceTrackerPendingTransactions, _TransactionController_getGasFeeFlows, _TransactionController_getLayer1GasFeeFlows, _TransactionController_updateTransactionInternal, _TransactionController_updateFirstTimeInteraction, _TransactionController_updateSimulationData, _TransactionController_onGasFeePollerTransactionUpdate, _TransactionController_getSelectedAccount, _TransactionController_getInternalAccounts, _TransactionController_updateSubmitHistory, _TransactionController_updateGasEstimate;
|
|
16
|
+
var _TransactionController_instances, _TransactionController_internalEvents, _TransactionController_methodDataHelper, _TransactionController_incomingTransactionChainIds, _TransactionController_incomingTransactionHelper, _TransactionController_incomingTransactionOptions, _TransactionController_pendingTransactionOptions, _TransactionController_trace, _TransactionController_transactionHistoryLimit, _TransactionController_isFirstTimeInteractionEnabled, _TransactionController_isSimulationEnabled, _TransactionController_testGasFeeFlows, _TransactionController_multichainTrackingHelper, _TransactionController_retryTransaction, _TransactionController_rejectTransaction, _TransactionController_getChainId, _TransactionController_getNetworkClientId, _TransactionController_getEthQuery, _TransactionController_getProvider, _TransactionController_createNonceTracker, _TransactionController_createPendingTransactionTracker, _TransactionController_checkForPendingTransactionAndStartPolling, _TransactionController_stopAllTracking, _TransactionController_addIncomingTransactionHelperListeners, _TransactionController_removePendingTransactionTrackerListeners, _TransactionController_addPendingTransactionTrackerListeners, _TransactionController_getNonceTrackerPendingTransactions, _TransactionController_getGasFeeFlows, _TransactionController_getLayer1GasFeeFlows, _TransactionController_updateTransactionInternal, _TransactionController_updateFirstTimeInteraction, _TransactionController_updateSimulationData, _TransactionController_onGasFeePollerTransactionUpdate, _TransactionController_getSelectedAccount, _TransactionController_getInternalAccounts, _TransactionController_updateSubmitHistory, _TransactionController_updateGasEstimate, _TransactionController_deleteTransaction, _TransactionController_isRejectError, _TransactionController_rejectTransactionAndThrow;
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
18
|
exports.TransactionController = exports.ApprovalState = exports.SPEED_UP_RATE = exports.CANCEL_RATE = void 0;
|
|
19
19
|
const base_controller_1 = require("@metamask/base-controller");
|
|
@@ -171,6 +171,7 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
171
171
|
this.approvingTransactionIds = new Set();
|
|
172
172
|
_TransactionController_methodDataHelper.set(this, void 0);
|
|
173
173
|
this.mutex = new async_mutex_1.Mutex();
|
|
174
|
+
_TransactionController_incomingTransactionChainIds.set(this, new Set());
|
|
174
175
|
_TransactionController_incomingTransactionHelper.set(this, void 0);
|
|
175
176
|
_TransactionController_incomingTransactionOptions.set(this, void 0);
|
|
176
177
|
_TransactionController_pendingTransactionOptions.set(this, void 0);
|
|
@@ -265,6 +266,7 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
265
266
|
};
|
|
266
267
|
__classPrivateFieldSet(this, _TransactionController_incomingTransactionHelper, new IncomingTransactionHelper_1.IncomingTransactionHelper({
|
|
267
268
|
getCache: () => this.state.lastFetchedBlockNumbers,
|
|
269
|
+
getChainIds: () => [...__classPrivateFieldGet(this, _TransactionController_incomingTransactionChainIds, "f")],
|
|
268
270
|
getCurrentAccount: () => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getSelectedAccount).call(this),
|
|
269
271
|
getLocalTransactions: () => this.state.transactions,
|
|
270
272
|
includeTokenTransfers: __classPrivateFieldGet(this, _TransactionController_incomingTransactionOptions, "f").includeTokenTransfers,
|
|
@@ -393,6 +395,7 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
393
395
|
networkClientId,
|
|
394
396
|
});
|
|
395
397
|
const transactionType = type ?? (await (0, transaction_type_1.determineTransactionType)(txParams, ethQuery)).type;
|
|
398
|
+
const { delegationAddress } = await (0, eip7702_1.isAccountUpgradedToEIP7702)(txParams.from, chainId, this.messagingSystem, ethQuery);
|
|
396
399
|
const existingTransactionMeta = this.getTransactionWithActionId(actionId);
|
|
397
400
|
// If a request to add a transaction with the same actionId is submitted again, a new transaction will not be created for it.
|
|
398
401
|
let addedTransactionMeta = existingTransactionMeta
|
|
@@ -403,6 +406,7 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
403
406
|
batchId,
|
|
404
407
|
chainId,
|
|
405
408
|
dappSuggestedGasFees,
|
|
409
|
+
delegationAddress,
|
|
406
410
|
deviceConfirmedOn,
|
|
407
411
|
id: (0, uuid_1.v1)(),
|
|
408
412
|
isFirstTimeInteraction: undefined,
|
|
@@ -437,7 +441,7 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
437
441
|
}
|
|
438
442
|
addedTransactionMeta = (0, swaps_1.updateSwapsTransaction)(addedTransactionMeta, transactionType, swaps, {
|
|
439
443
|
isSwapsDisabled: this.isSwapsDisabled,
|
|
440
|
-
cancelTransaction: this.
|
|
444
|
+
cancelTransaction: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_rejectTransaction).bind(this),
|
|
441
445
|
messenger: this.messagingSystem,
|
|
442
446
|
});
|
|
443
447
|
this.addMetadata(addedTransactionMeta);
|
|
@@ -469,13 +473,21 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
469
473
|
transactionMeta: addedTransactionMeta,
|
|
470
474
|
};
|
|
471
475
|
}
|
|
472
|
-
startIncomingTransactionPolling() {
|
|
476
|
+
startIncomingTransactionPolling(chainIds) {
|
|
477
|
+
chainIds.forEach((chainId) => __classPrivateFieldGet(this, _TransactionController_incomingTransactionChainIds, "f").add(chainId));
|
|
473
478
|
__classPrivateFieldGet(this, _TransactionController_incomingTransactionHelper, "f").start();
|
|
474
479
|
}
|
|
475
|
-
stopIncomingTransactionPolling() {
|
|
476
|
-
__classPrivateFieldGet(this,
|
|
480
|
+
stopIncomingTransactionPolling(chainIds) {
|
|
481
|
+
chainIds?.forEach((chainId) => __classPrivateFieldGet(this, _TransactionController_incomingTransactionChainIds, "f").delete(chainId));
|
|
482
|
+
if (!chainIds) {
|
|
483
|
+
__classPrivateFieldGet(this, _TransactionController_incomingTransactionChainIds, "f").clear();
|
|
484
|
+
}
|
|
485
|
+
if (__classPrivateFieldGet(this, _TransactionController_incomingTransactionChainIds, "f").size === 0) {
|
|
486
|
+
__classPrivateFieldGet(this, _TransactionController_incomingTransactionHelper, "f").stop();
|
|
487
|
+
}
|
|
477
488
|
}
|
|
478
|
-
async updateIncomingTransactions() {
|
|
489
|
+
async updateIncomingTransactions(chainIds) {
|
|
490
|
+
chainIds.forEach((chainId) => __classPrivateFieldGet(this, _TransactionController_incomingTransactionChainIds, "f").add(chainId));
|
|
479
491
|
await __classPrivateFieldGet(this, _TransactionController_incomingTransactionHelper, "f").update();
|
|
480
492
|
}
|
|
481
493
|
/**
|
|
@@ -1229,18 +1241,13 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1229
1241
|
actionId,
|
|
1230
1242
|
});
|
|
1231
1243
|
}
|
|
1232
|
-
// TODO: Replace `any` with type
|
|
1233
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1234
1244
|
}
|
|
1235
|
-
catch (
|
|
1245
|
+
catch (rawError) {
|
|
1246
|
+
const error = rawError;
|
|
1236
1247
|
const { isCompleted: isTxCompleted } = this.isTransactionCompleted(transactionId);
|
|
1237
1248
|
if (!isTxCompleted) {
|
|
1238
|
-
if (
|
|
1239
|
-
this.
|
|
1240
|
-
throw rpc_errors_1.providerErrors.userRejectedRequest({
|
|
1241
|
-
message: 'MetaMask Tx Signature: User denied transaction signature.',
|
|
1242
|
-
data: error?.data,
|
|
1243
|
-
});
|
|
1249
|
+
if (__classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_isRejectError).call(this, error)) {
|
|
1250
|
+
__classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_rejectTransactionAndThrow).call(this, transactionId, actionId, error);
|
|
1244
1251
|
}
|
|
1245
1252
|
else {
|
|
1246
1253
|
this.failTransaction(meta, error, actionId);
|
|
@@ -1251,8 +1258,9 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1251
1258
|
const finalMeta = await finishedPromise;
|
|
1252
1259
|
switch (finalMeta?.status) {
|
|
1253
1260
|
case types_1.TransactionStatus.failed:
|
|
1254
|
-
|
|
1255
|
-
|
|
1261
|
+
const error = finalMeta.error;
|
|
1262
|
+
resultCallbacks?.error(error);
|
|
1263
|
+
throw rpc_errors_1.rpcErrors.internal(error.message);
|
|
1256
1264
|
case types_1.TransactionStatus.submitted:
|
|
1257
1265
|
resultCallbacks?.success();
|
|
1258
1266
|
return finalMeta.hash;
|
|
@@ -1379,34 +1387,6 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1379
1387
|
}
|
|
1380
1388
|
return transactionHash;
|
|
1381
1389
|
}
|
|
1382
|
-
/**
|
|
1383
|
-
* Cancels a transaction based on its ID by setting its status to "rejected"
|
|
1384
|
-
* and emitting a `<tx.id>:finished` hub event.
|
|
1385
|
-
*
|
|
1386
|
-
* @param transactionId - The ID of the transaction to cancel.
|
|
1387
|
-
* @param actionId - The actionId passed from UI
|
|
1388
|
-
*/
|
|
1389
|
-
cancelTransaction(transactionId, actionId) {
|
|
1390
|
-
const transactionMeta = this.state.transactions.find(({ id }) => id === transactionId);
|
|
1391
|
-
if (!transactionMeta) {
|
|
1392
|
-
return;
|
|
1393
|
-
}
|
|
1394
|
-
this.update((state) => {
|
|
1395
|
-
const transactions = state.transactions.filter(({ id }) => id !== transactionId);
|
|
1396
|
-
state.transactions = this.trimTransactionsForState(transactions);
|
|
1397
|
-
});
|
|
1398
|
-
const updatedTransactionMeta = {
|
|
1399
|
-
...transactionMeta,
|
|
1400
|
-
status: types_1.TransactionStatus.rejected,
|
|
1401
|
-
};
|
|
1402
|
-
this.messagingSystem.publish(`${controllerName}:transactionFinished`, updatedTransactionMeta);
|
|
1403
|
-
__classPrivateFieldGet(this, _TransactionController_internalEvents, "f").emit(`${transactionMeta.id}:finished`, updatedTransactionMeta);
|
|
1404
|
-
this.messagingSystem.publish(`${controllerName}:transactionRejected`, {
|
|
1405
|
-
transactionMeta: updatedTransactionMeta,
|
|
1406
|
-
actionId,
|
|
1407
|
-
});
|
|
1408
|
-
this.onTransactionStatusChange(updatedTransactionMeta);
|
|
1409
|
-
}
|
|
1410
1390
|
/**
|
|
1411
1391
|
* Trim the amount of transactions that are set on the state. Checks
|
|
1412
1392
|
* if the length of the tx history is longer then desired persistence
|
|
@@ -1784,7 +1764,7 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1784
1764
|
}
|
|
1785
1765
|
}
|
|
1786
1766
|
exports.TransactionController = TransactionController;
|
|
1787
|
-
_TransactionController_internalEvents = new WeakMap(), _TransactionController_methodDataHelper = new WeakMap(), _TransactionController_incomingTransactionHelper = new WeakMap(), _TransactionController_incomingTransactionOptions = new WeakMap(), _TransactionController_pendingTransactionOptions = new WeakMap(), _TransactionController_trace = new WeakMap(), _TransactionController_transactionHistoryLimit = new WeakMap(), _TransactionController_isFirstTimeInteractionEnabled = new WeakMap(), _TransactionController_isSimulationEnabled = new WeakMap(), _TransactionController_testGasFeeFlows = new WeakMap(), _TransactionController_multichainTrackingHelper = new WeakMap(), _TransactionController_checkForPendingTransactionAndStartPolling = new WeakMap(), _TransactionController_instances = new WeakSet(), _TransactionController_retryTransaction = async function _TransactionController_retryTransaction({ actionId, afterSubmit, estimatedBaseFee, gasValues, label, prepareTransactionParams, rate, transactionId, transactionType, }) {
|
|
1767
|
+
_TransactionController_internalEvents = new WeakMap(), _TransactionController_methodDataHelper = new WeakMap(), _TransactionController_incomingTransactionChainIds = new WeakMap(), _TransactionController_incomingTransactionHelper = new WeakMap(), _TransactionController_incomingTransactionOptions = new WeakMap(), _TransactionController_pendingTransactionOptions = new WeakMap(), _TransactionController_trace = new WeakMap(), _TransactionController_transactionHistoryLimit = new WeakMap(), _TransactionController_isFirstTimeInteractionEnabled = new WeakMap(), _TransactionController_isSimulationEnabled = new WeakMap(), _TransactionController_testGasFeeFlows = new WeakMap(), _TransactionController_multichainTrackingHelper = new WeakMap(), _TransactionController_checkForPendingTransactionAndStartPolling = new WeakMap(), _TransactionController_instances = new WeakSet(), _TransactionController_retryTransaction = async function _TransactionController_retryTransaction({ actionId, afterSubmit, estimatedBaseFee, gasValues, label, prepareTransactionParams, rate, transactionId, transactionType, }) {
|
|
1788
1768
|
// If transaction is found for same action id, do not create a new transaction.
|
|
1789
1769
|
if (this.getTransactionWithActionId(actionId)) {
|
|
1790
1770
|
return;
|
|
@@ -1849,6 +1829,24 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
|
|
|
1849
1829
|
actionId,
|
|
1850
1830
|
});
|
|
1851
1831
|
afterSubmit?.(newTransactionMeta);
|
|
1832
|
+
}, _TransactionController_rejectTransaction = function _TransactionController_rejectTransaction(transactionId, actionId, error) {
|
|
1833
|
+
const transactionMeta = this.getTransaction(transactionId);
|
|
1834
|
+
if (!transactionMeta) {
|
|
1835
|
+
return;
|
|
1836
|
+
}
|
|
1837
|
+
__classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_deleteTransaction).call(this, transactionId);
|
|
1838
|
+
const updatedTransactionMeta = {
|
|
1839
|
+
...transactionMeta,
|
|
1840
|
+
status: types_1.TransactionStatus.rejected,
|
|
1841
|
+
error: (0, utils_2.normalizeTxError)(error ?? rpc_errors_1.providerErrors.userRejectedRequest()),
|
|
1842
|
+
};
|
|
1843
|
+
this.messagingSystem.publish(`${controllerName}:transactionFinished`, updatedTransactionMeta);
|
|
1844
|
+
__classPrivateFieldGet(this, _TransactionController_internalEvents, "f").emit(`${transactionMeta.id}:finished`, updatedTransactionMeta);
|
|
1845
|
+
this.messagingSystem.publish(`${controllerName}:transactionRejected`, {
|
|
1846
|
+
transactionMeta: updatedTransactionMeta,
|
|
1847
|
+
actionId,
|
|
1848
|
+
});
|
|
1849
|
+
this.onTransactionStatusChange(updatedTransactionMeta);
|
|
1852
1850
|
}, _TransactionController_getChainId = function _TransactionController_getChainId(networkClientId) {
|
|
1853
1851
|
return __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").getNetworkClient({ networkClientId })
|
|
1854
1852
|
.configuration.chainId;
|
|
@@ -2096,5 +2094,24 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
|
|
|
2096
2094
|
isCustomNetwork,
|
|
2097
2095
|
txMeta: transactionMeta,
|
|
2098
2096
|
});
|
|
2097
|
+
}, _TransactionController_deleteTransaction = function _TransactionController_deleteTransaction(transactionId) {
|
|
2098
|
+
this.update((state) => {
|
|
2099
|
+
const transactions = state.transactions.filter(({ id }) => id !== transactionId);
|
|
2100
|
+
state.transactions = this.trimTransactionsForState(transactions);
|
|
2101
|
+
});
|
|
2102
|
+
}, _TransactionController_isRejectError = function _TransactionController_isRejectError(error) {
|
|
2103
|
+
return [
|
|
2104
|
+
rpc_errors_1.errorCodes.provider.userRejectedRequest,
|
|
2105
|
+
rpc_errors_1.errorCodes.rpc.methodNotSupported,
|
|
2106
|
+
].includes(error.code);
|
|
2107
|
+
}, _TransactionController_rejectTransactionAndThrow = function _TransactionController_rejectTransactionAndThrow(transactionId, actionId, error) {
|
|
2108
|
+
__classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_rejectTransaction).call(this, transactionId, actionId, error);
|
|
2109
|
+
if (error.code === rpc_errors_1.errorCodes.provider.userRejectedRequest) {
|
|
2110
|
+
throw rpc_errors_1.providerErrors.userRejectedRequest({
|
|
2111
|
+
message: 'MetaMask Tx Signature: User denied transaction signature.',
|
|
2112
|
+
data: error?.data,
|
|
2113
|
+
});
|
|
2114
|
+
}
|
|
2115
|
+
throw error;
|
|
2099
2116
|
};
|
|
2100
2117
|
//# sourceMappingURL=TransactionController.cjs.map
|