@metamask-previews/transaction-controller 49.0.0-preview-674a490 → 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.
Files changed (54) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/TransactionController.cjs +50 -47
  3. package/dist/TransactionController.cjs.map +1 -1
  4. package/dist/TransactionController.d.cts +0 -11
  5. package/dist/TransactionController.d.cts.map +1 -1
  6. package/dist/TransactionController.d.mts +0 -11
  7. package/dist/TransactionController.d.mts.map +1 -1
  8. package/dist/TransactionController.mjs +51 -48
  9. package/dist/TransactionController.mjs.map +1 -1
  10. package/dist/index.cjs.map +1 -1
  11. package/dist/index.d.cts +1 -1
  12. package/dist/index.d.cts.map +1 -1
  13. package/dist/index.d.mts +1 -1
  14. package/dist/index.d.mts.map +1 -1
  15. package/dist/index.mjs.map +1 -1
  16. package/dist/types.cjs.map +1 -1
  17. package/dist/types.d.cts +21 -12
  18. package/dist/types.d.cts.map +1 -1
  19. package/dist/types.d.mts +21 -12
  20. package/dist/types.d.mts.map +1 -1
  21. package/dist/types.mjs.map +1 -1
  22. package/dist/utils/batch.cjs +24 -12
  23. package/dist/utils/batch.cjs.map +1 -1
  24. package/dist/utils/batch.d.cts +1 -3
  25. package/dist/utils/batch.d.cts.map +1 -1
  26. package/dist/utils/batch.d.mts +1 -3
  27. package/dist/utils/batch.d.mts.map +1 -1
  28. package/dist/utils/batch.mjs +24 -12
  29. package/dist/utils/batch.mjs.map +1 -1
  30. package/dist/utils/eip7702.cjs +2 -3
  31. package/dist/utils/eip7702.cjs.map +1 -1
  32. package/dist/utils/eip7702.d.cts +1 -2
  33. package/dist/utils/eip7702.d.cts.map +1 -1
  34. package/dist/utils/eip7702.d.mts +1 -2
  35. package/dist/utils/eip7702.d.mts.map +1 -1
  36. package/dist/utils/eip7702.mjs +2 -3
  37. package/dist/utils/eip7702.mjs.map +1 -1
  38. package/dist/utils/feature-flags.cjs +4 -10
  39. package/dist/utils/feature-flags.cjs.map +1 -1
  40. package/dist/utils/feature-flags.d.cts +5 -12
  41. package/dist/utils/feature-flags.d.cts.map +1 -1
  42. package/dist/utils/feature-flags.d.mts +5 -12
  43. package/dist/utils/feature-flags.d.mts.map +1 -1
  44. package/dist/utils/feature-flags.mjs +4 -10
  45. package/dist/utils/feature-flags.mjs.map +1 -1
  46. package/package.json +2 -3
  47. package/dist/utils/signature.cjs +0 -21
  48. package/dist/utils/signature.cjs.map +0 -1
  49. package/dist/utils/signature.d.cts +0 -11
  50. package/dist/utils/signature.d.cts.map +0 -1
  51. package/dist/utils/signature.d.mts +0 -11
  52. package/dist/utils/signature.d.mts.map +0 -1
  53. package/dist/utils/signature.mjs +0 -17
  54. package/dist/utils/signature.mjs.map +0 -1
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_incomingTransactionChainIds, _TransactionController_incomingTransactionHelper, _TransactionController_incomingTransactionOptions, _TransactionController_pendingTransactionOptions, _TransactionController_publicKeyEIP7702, _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");
@@ -156,7 +156,7 @@ class TransactionController extends base_controller_1.BaseController {
156
156
  * @param options - The controller options.
157
157
  */
158
158
  constructor(options) {
159
- const { disableHistory, disableSendFlowHistory, disableSwaps, getCurrentAccountEIP1559Compatibility, getCurrentNetworkEIP1559Compatibility, getExternalPendingTransactions, getGasFeeEstimates, getNetworkClientRegistry, getNetworkState, getPermittedAccounts, getSavedGasFees, incomingTransactions = {}, isFirstTimeInteractionEnabled, isSimulationEnabled, messenger, pendingTransactions = {}, publicKeyEIP7702, securityProviderRequest, sign, state, testGasFeeFlows, trace, transactionHistoryLimit = 40, hooks, } = options;
159
+ const { disableHistory, disableSendFlowHistory, disableSwaps, getCurrentAccountEIP1559Compatibility, getCurrentNetworkEIP1559Compatibility, getExternalPendingTransactions, getGasFeeEstimates, getNetworkClientRegistry, getNetworkState, getPermittedAccounts, getSavedGasFees, incomingTransactions = {}, isFirstTimeInteractionEnabled, isSimulationEnabled, messenger, pendingTransactions = {}, securityProviderRequest, sign, state, testGasFeeFlows, trace, transactionHistoryLimit = 40, hooks, } = options;
160
160
  super({
161
161
  name: controllerName,
162
162
  metadata,
@@ -175,7 +175,6 @@ class TransactionController extends base_controller_1.BaseController {
175
175
  _TransactionController_incomingTransactionHelper.set(this, void 0);
176
176
  _TransactionController_incomingTransactionOptions.set(this, void 0);
177
177
  _TransactionController_pendingTransactionOptions.set(this, void 0);
178
- _TransactionController_publicKeyEIP7702.set(this, void 0);
179
178
  this.signAbortCallbacks = new Map();
180
179
  _TransactionController_trace.set(this, void 0);
181
180
  _TransactionController_transactionHistoryLimit.set(this, void 0);
@@ -206,7 +205,6 @@ class TransactionController extends base_controller_1.BaseController {
206
205
  this.securityProviderRequest = securityProviderRequest;
207
206
  __classPrivateFieldSet(this, _TransactionController_incomingTransactionOptions, incomingTransactions, "f");
208
207
  __classPrivateFieldSet(this, _TransactionController_pendingTransactionOptions, pendingTransactions, "f");
209
- __classPrivateFieldSet(this, _TransactionController_publicKeyEIP7702, publicKeyEIP7702, "f");
210
208
  __classPrivateFieldSet(this, _TransactionController_transactionHistoryLimit, transactionHistoryLimit, "f");
211
209
  this.sign = sign;
212
210
  __classPrivateFieldSet(this, _TransactionController_testGasFeeFlows, testGasFeeFlows === true, "f");
@@ -322,7 +320,6 @@ class TransactionController extends base_controller_1.BaseController {
322
320
  getEthQuery: (networkClientId) => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getEthQuery).call(this, { networkClientId }),
323
321
  getInternalAccounts: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getInternalAccounts).bind(this),
324
322
  messenger: this.messagingSystem,
325
- publicKeyEIP7702: __classPrivateFieldGet(this, _TransactionController_publicKeyEIP7702, "f"),
326
323
  request,
327
324
  });
328
325
  }
@@ -337,7 +334,6 @@ class TransactionController extends base_controller_1.BaseController {
337
334
  address,
338
335
  getEthQuery: (chainId) => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getEthQuery).call(this, { chainId }),
339
336
  messenger: this.messagingSystem,
340
- publicKeyEIP7702: __classPrivateFieldGet(this, _TransactionController_publicKeyEIP7702, "f"),
341
337
  });
342
338
  }
343
339
  /**
@@ -399,6 +395,7 @@ class TransactionController extends base_controller_1.BaseController {
399
395
  networkClientId,
400
396
  });
401
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);
402
399
  const existingTransactionMeta = this.getTransactionWithActionId(actionId);
403
400
  // If a request to add a transaction with the same actionId is submitted again, a new transaction will not be created for it.
404
401
  let addedTransactionMeta = existingTransactionMeta
@@ -409,6 +406,7 @@ class TransactionController extends base_controller_1.BaseController {
409
406
  batchId,
410
407
  chainId,
411
408
  dappSuggestedGasFees,
409
+ delegationAddress,
412
410
  deviceConfirmedOn,
413
411
  id: (0, uuid_1.v1)(),
414
412
  isFirstTimeInteraction: undefined,
@@ -443,7 +441,7 @@ class TransactionController extends base_controller_1.BaseController {
443
441
  }
444
442
  addedTransactionMeta = (0, swaps_1.updateSwapsTransaction)(addedTransactionMeta, transactionType, swaps, {
445
443
  isSwapsDisabled: this.isSwapsDisabled,
446
- cancelTransaction: this.cancelTransaction.bind(this),
444
+ cancelTransaction: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_rejectTransaction).bind(this),
447
445
  messenger: this.messagingSystem,
448
446
  });
449
447
  this.addMetadata(addedTransactionMeta);
@@ -1243,18 +1241,13 @@ class TransactionController extends base_controller_1.BaseController {
1243
1241
  actionId,
1244
1242
  });
1245
1243
  }
1246
- // TODO: Replace `any` with type
1247
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
1248
1244
  }
1249
- catch (error) {
1245
+ catch (rawError) {
1246
+ const error = rawError;
1250
1247
  const { isCompleted: isTxCompleted } = this.isTransactionCompleted(transactionId);
1251
1248
  if (!isTxCompleted) {
1252
- if (error?.code === rpc_errors_1.errorCodes.provider.userRejectedRequest) {
1253
- this.cancelTransaction(transactionId, actionId);
1254
- throw rpc_errors_1.providerErrors.userRejectedRequest({
1255
- message: 'MetaMask Tx Signature: User denied transaction signature.',
1256
- data: error?.data,
1257
- });
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);
1258
1251
  }
1259
1252
  else {
1260
1253
  this.failTransaction(meta, error, actionId);
@@ -1265,8 +1258,9 @@ class TransactionController extends base_controller_1.BaseController {
1265
1258
  const finalMeta = await finishedPromise;
1266
1259
  switch (finalMeta?.status) {
1267
1260
  case types_1.TransactionStatus.failed:
1268
- resultCallbacks?.error(finalMeta.error);
1269
- throw rpc_errors_1.rpcErrors.internal(finalMeta.error.message);
1261
+ const error = finalMeta.error;
1262
+ resultCallbacks?.error(error);
1263
+ throw rpc_errors_1.rpcErrors.internal(error.message);
1270
1264
  case types_1.TransactionStatus.submitted:
1271
1265
  resultCallbacks?.success();
1272
1266
  return finalMeta.hash;
@@ -1393,34 +1387,6 @@ class TransactionController extends base_controller_1.BaseController {
1393
1387
  }
1394
1388
  return transactionHash;
1395
1389
  }
1396
- /**
1397
- * Cancels a transaction based on its ID by setting its status to "rejected"
1398
- * and emitting a `<tx.id>:finished` hub event.
1399
- *
1400
- * @param transactionId - The ID of the transaction to cancel.
1401
- * @param actionId - The actionId passed from UI
1402
- */
1403
- cancelTransaction(transactionId, actionId) {
1404
- const transactionMeta = this.state.transactions.find(({ id }) => id === transactionId);
1405
- if (!transactionMeta) {
1406
- return;
1407
- }
1408
- this.update((state) => {
1409
- const transactions = state.transactions.filter(({ id }) => id !== transactionId);
1410
- state.transactions = this.trimTransactionsForState(transactions);
1411
- });
1412
- const updatedTransactionMeta = {
1413
- ...transactionMeta,
1414
- status: types_1.TransactionStatus.rejected,
1415
- };
1416
- this.messagingSystem.publish(`${controllerName}:transactionFinished`, updatedTransactionMeta);
1417
- __classPrivateFieldGet(this, _TransactionController_internalEvents, "f").emit(`${transactionMeta.id}:finished`, updatedTransactionMeta);
1418
- this.messagingSystem.publish(`${controllerName}:transactionRejected`, {
1419
- transactionMeta: updatedTransactionMeta,
1420
- actionId,
1421
- });
1422
- this.onTransactionStatusChange(updatedTransactionMeta);
1423
- }
1424
1390
  /**
1425
1391
  * Trim the amount of transactions that are set on the state. Checks
1426
1392
  * if the length of the tx history is longer then desired persistence
@@ -1798,7 +1764,7 @@ class TransactionController extends base_controller_1.BaseController {
1798
1764
  }
1799
1765
  }
1800
1766
  exports.TransactionController = TransactionController;
1801
- _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_publicKeyEIP7702 = 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, }) {
1802
1768
  // If transaction is found for same action id, do not create a new transaction.
1803
1769
  if (this.getTransactionWithActionId(actionId)) {
1804
1770
  return;
@@ -1863,6 +1829,24 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
1863
1829
  actionId,
1864
1830
  });
1865
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);
1866
1850
  }, _TransactionController_getChainId = function _TransactionController_getChainId(networkClientId) {
1867
1851
  return __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").getNetworkClient({ networkClientId })
1868
1852
  .configuration.chainId;
@@ -2110,5 +2094,24 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
2110
2094
  isCustomNetwork,
2111
2095
  txMeta: transactionMeta,
2112
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;
2113
2116
  };
2114
2117
  //# sourceMappingURL=TransactionController.cjs.map