@metamask-previews/transaction-controller 48.0.0-preview-a615cdf2 → 48.2.0-preview-c1633ccd

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 (60) hide show
  1. package/CHANGELOG.md +33 -1
  2. package/dist/TransactionController.cjs +25 -7
  3. package/dist/TransactionController.cjs.map +1 -1
  4. package/dist/TransactionController.d.cts +5 -3
  5. package/dist/TransactionController.d.cts.map +1 -1
  6. package/dist/TransactionController.d.mts +5 -3
  7. package/dist/TransactionController.d.mts.map +1 -1
  8. package/dist/TransactionController.mjs +25 -7
  9. package/dist/TransactionController.mjs.map +1 -1
  10. package/dist/gas-flows/OracleLayer1GasFeeFlow.cjs +1 -2
  11. package/dist/gas-flows/OracleLayer1GasFeeFlow.cjs.map +1 -1
  12. package/dist/gas-flows/OracleLayer1GasFeeFlow.d.cts.map +1 -1
  13. package/dist/gas-flows/OracleLayer1GasFeeFlow.d.mts.map +1 -1
  14. package/dist/gas-flows/OracleLayer1GasFeeFlow.mjs +1 -3
  15. package/dist/gas-flows/OracleLayer1GasFeeFlow.mjs.map +1 -1
  16. package/dist/helpers/AccountsApiRemoteTransactionSource.cjs +8 -3
  17. package/dist/helpers/AccountsApiRemoteTransactionSource.cjs.map +1 -1
  18. package/dist/helpers/AccountsApiRemoteTransactionSource.d.cts.map +1 -1
  19. package/dist/helpers/AccountsApiRemoteTransactionSource.d.mts.map +1 -1
  20. package/dist/helpers/AccountsApiRemoteTransactionSource.mjs +8 -3
  21. package/dist/helpers/AccountsApiRemoteTransactionSource.mjs.map +1 -1
  22. package/dist/helpers/IncomingTransactionHelper.cjs +12 -4
  23. package/dist/helpers/IncomingTransactionHelper.cjs.map +1 -1
  24. package/dist/helpers/IncomingTransactionHelper.d.cts +3 -1
  25. package/dist/helpers/IncomingTransactionHelper.d.cts.map +1 -1
  26. package/dist/helpers/IncomingTransactionHelper.d.mts +3 -1
  27. package/dist/helpers/IncomingTransactionHelper.d.mts.map +1 -1
  28. package/dist/helpers/IncomingTransactionHelper.mjs +12 -4
  29. package/dist/helpers/IncomingTransactionHelper.mjs.map +1 -1
  30. package/dist/types.cjs +5 -0
  31. package/dist/types.cjs.map +1 -1
  32. package/dist/types.d.cts +23 -3
  33. package/dist/types.d.cts.map +1 -1
  34. package/dist/types.d.mts +23 -3
  35. package/dist/types.d.mts.map +1 -1
  36. package/dist/types.mjs +5 -0
  37. package/dist/types.mjs.map +1 -1
  38. package/dist/utils/batch.cjs +15 -3
  39. package/dist/utils/batch.cjs.map +1 -1
  40. package/dist/utils/batch.d.cts +2 -2
  41. package/dist/utils/batch.d.cts.map +1 -1
  42. package/dist/utils/batch.d.mts +2 -2
  43. package/dist/utils/batch.d.mts.map +1 -1
  44. package/dist/utils/batch.mjs +16 -4
  45. package/dist/utils/batch.mjs.map +1 -1
  46. package/dist/utils/utils.cjs +3 -0
  47. package/dist/utils/utils.cjs.map +1 -1
  48. package/dist/utils/utils.d.cts.map +1 -1
  49. package/dist/utils/utils.d.mts.map +1 -1
  50. package/dist/utils/utils.mjs +3 -0
  51. package/dist/utils/utils.mjs.map +1 -1
  52. package/dist/utils/validation.cjs +6 -3
  53. package/dist/utils/validation.cjs.map +1 -1
  54. package/dist/utils/validation.d.cts +3 -1
  55. package/dist/utils/validation.d.cts.map +1 -1
  56. package/dist/utils/validation.d.mts +3 -1
  57. package/dist/utils/validation.d.mts.map +1 -1
  58. package/dist/utils/validation.mjs +6 -3
  59. package/dist/utils/validation.mjs.map +1 -1
  60. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -7,6 +7,36 @@ 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 `revertDelegation` to `TransactionType` ([#5468](https://github.com/MetaMask/core/pull/5468))
13
+ - Add optional batch ID to metadata ([#5462](https://github.com/MetaMask/core/pull/5462))
14
+ - Add optional `batchId` property to `TransactionMeta`.
15
+ - Add optional `transactionHash` to `TransactionReceipt`.
16
+ - Add optional `data` to `Log`.
17
+ - Add optional `batchId` to `TransactionBatchRequest`.
18
+ - Add optional `batchId` to `addTransaction` options.
19
+ - Throw if `batchId` already exists on a transaction.
20
+
21
+ ### Changed
22
+
23
+ - **BREAKING:** Add optional batch ID to metadata ([#5462](https://github.com/MetaMask/core/pull/5462))
24
+ - Change `batchId` in `TransactionBatchResult` to `Hex`.
25
+ - Return `batchId` from `addTransactionBatch` if provided.
26
+ - Generate random batch ID if no `batchId` provided.
27
+
28
+ ## [48.2.0]
29
+
30
+ ### Changed
31
+
32
+ - Normalize gas limit using `gas` and `gasLimit` properties ([#5396](https://github.com/MetaMask/core/pull/5396))
33
+
34
+ ## [48.1.0]
35
+
36
+ ### Changed
37
+
38
+ - Prevent external transactions to internal accounts if `data` included ([#5418](https://github.com/MetaMask/core/pull/5418))
39
+
10
40
  ## [48.0.0]
11
41
 
12
42
  ### Changed
@@ -1326,7 +1356,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1326
1356
 
1327
1357
  All changes listed after this point were applied to this package following the monorepo conversion.
1328
1358
 
1329
- [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@48.0.0...HEAD
1359
+ [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@48.2.0...HEAD
1360
+ [48.2.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@48.1.0...@metamask/transaction-controller@48.2.0
1361
+ [48.1.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@48.0.0...@metamask/transaction-controller@48.1.0
1330
1362
  [48.0.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@47.0.0...@metamask/transaction-controller@48.0.0
1331
1363
  [47.0.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@46.0.0...@metamask/transaction-controller@47.0.0
1332
1364
  [46.0.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@45.1.0...@metamask/transaction-controller@46.0.0
@@ -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_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;
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,
@@ -342,6 +344,7 @@ class TransactionController extends base_controller_1.BaseController {
342
344
  * @param txParams - Standard parameters for an Ethereum transaction.
343
345
  * @param options - Additional options to control how the transaction is added.
344
346
  * @param options.actionId - Unique ID to prevent duplicate requests.
347
+ * @param options.batchId - A custom ID for the batch this transaction belongs to.
345
348
  * @param options.deviceConfirmedOn - An enum to indicate what device confirmed the transaction.
346
349
  * @param options.method - RPC method that requested the transaction.
347
350
  * @param options.nestedTransactions - Params for any nested transactions encoded in the data.
@@ -359,7 +362,7 @@ class TransactionController extends base_controller_1.BaseController {
359
362
  */
360
363
  async addTransaction(txParams, options) {
361
364
  (0, logger_1.projectLogger)('Adding transaction', txParams, options);
362
- const { actionId, deviceConfirmedOn, method, nestedTransactions, networkClientId, origin, requireApproval, securityAlertResponse, sendFlowHistory, swaps = {}, traceContext, type, } = options;
365
+ const { actionId, batchId, deviceConfirmedOn, method, nestedTransactions, networkClientId, origin, requireApproval, securityAlertResponse, sendFlowHistory, swaps = {}, traceContext, type, } = options;
363
366
  txParams = (0, utils_2.normalizeTransactionParams)(txParams);
364
367
  if (!__classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").has(networkClientId)) {
365
368
  throw new Error(`Network client not found - ${networkClientId}`);
@@ -370,6 +373,7 @@ class TransactionController extends base_controller_1.BaseController {
370
373
  const selectedAddress = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getSelectedAccount).call(this).address;
371
374
  const internalAccounts = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getInternalAccounts).call(this);
372
375
  await (0, validation_1.validateTransactionOrigin)({
376
+ data: txParams.data,
373
377
  from: txParams.from,
374
378
  internalAccounts,
375
379
  origin,
@@ -380,6 +384,11 @@ class TransactionController extends base_controller_1.BaseController {
380
384
  });
381
385
  const isEIP1559Compatible = await this.getEIP1559Compatibility(networkClientId);
382
386
  (0, validation_1.validateTxParams)(txParams, isEIP1559Compatible);
387
+ const isDuplicateBatchId = batchId?.length &&
388
+ this.state.transactions.some((tx) => tx.batchId?.toLowerCase() === batchId?.toLowerCase());
389
+ if (isDuplicateBatchId) {
390
+ throw rpc_errors_1.rpcErrors.invalidInput('Batch ID already exists');
391
+ }
383
392
  const dappSuggestedGasFees = this.generateDappSuggestedGasFees(txParams, origin);
384
393
  const chainId = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getChainId).call(this, networkClientId);
385
394
  const ethQuery = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getEthQuery).call(this, {
@@ -393,6 +402,7 @@ class TransactionController extends base_controller_1.BaseController {
393
402
  : {
394
403
  // Add actionId to txMeta to check if same actionId is seen again
395
404
  actionId,
405
+ batchId,
396
406
  chainId,
397
407
  dappSuggestedGasFees,
398
408
  deviceConfirmedOn,
@@ -461,13 +471,21 @@ class TransactionController extends base_controller_1.BaseController {
461
471
  transactionMeta: addedTransactionMeta,
462
472
  };
463
473
  }
464
- startIncomingTransactionPolling() {
474
+ startIncomingTransactionPolling(chainIds) {
475
+ chainIds.forEach((chainId) => __classPrivateFieldGet(this, _TransactionController_incomingTransactionChainIds, "f").add(chainId));
465
476
  __classPrivateFieldGet(this, _TransactionController_incomingTransactionHelper, "f").start();
466
477
  }
467
- stopIncomingTransactionPolling() {
468
- __classPrivateFieldGet(this, _TransactionController_incomingTransactionHelper, "f").stop();
478
+ stopIncomingTransactionPolling(chainIds) {
479
+ chainIds?.forEach((chainId) => __classPrivateFieldGet(this, _TransactionController_incomingTransactionChainIds, "f").delete(chainId));
480
+ if (!chainIds) {
481
+ __classPrivateFieldGet(this, _TransactionController_incomingTransactionChainIds, "f").clear();
482
+ }
483
+ if (__classPrivateFieldGet(this, _TransactionController_incomingTransactionChainIds, "f").size === 0) {
484
+ __classPrivateFieldGet(this, _TransactionController_incomingTransactionHelper, "f").stop();
485
+ }
469
486
  }
470
- async updateIncomingTransactions() {
487
+ async updateIncomingTransactions(chainIds) {
488
+ chainIds.forEach((chainId) => __classPrivateFieldGet(this, _TransactionController_incomingTransactionChainIds, "f").add(chainId));
471
489
  await __classPrivateFieldGet(this, _TransactionController_incomingTransactionHelper, "f").update();
472
490
  }
473
491
  /**
@@ -1776,7 +1794,7 @@ class TransactionController extends base_controller_1.BaseController {
1776
1794
  }
1777
1795
  }
1778
1796
  exports.TransactionController = TransactionController;
1779
- _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, }) {
1797
+ _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, }) {
1780
1798
  // If transaction is found for same action id, do not create a new transaction.
1781
1799
  if (this.getTransactionWithActionId(actionId)) {
1782
1800
  return;