@metamask/transaction-controller 56.0.0 → 56.2.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.
Files changed (90) hide show
  1. package/CHANGELOG.md +32 -1
  2. package/dist/TransactionController.cjs +64 -18
  3. package/dist/TransactionController.cjs.map +1 -1
  4. package/dist/TransactionController.d.cts +10 -2
  5. package/dist/TransactionController.d.cts.map +1 -1
  6. package/dist/TransactionController.d.mts +10 -2
  7. package/dist/TransactionController.d.mts.map +1 -1
  8. package/dist/TransactionController.mjs +66 -20
  9. package/dist/TransactionController.mjs.map +1 -1
  10. package/dist/api/accounts-api.cjs +3 -2
  11. package/dist/api/accounts-api.cjs.map +1 -1
  12. package/dist/api/accounts-api.d.cts +1 -0
  13. package/dist/api/accounts-api.d.cts.map +1 -1
  14. package/dist/api/accounts-api.d.mts +1 -0
  15. package/dist/api/accounts-api.d.mts.map +1 -1
  16. package/dist/api/accounts-api.mjs +3 -2
  17. package/dist/api/accounts-api.mjs.map +1 -1
  18. package/dist/helpers/AccountsApiRemoteTransactionSource.cjs +2 -1
  19. package/dist/helpers/AccountsApiRemoteTransactionSource.cjs.map +1 -1
  20. package/dist/helpers/AccountsApiRemoteTransactionSource.d.cts.map +1 -1
  21. package/dist/helpers/AccountsApiRemoteTransactionSource.d.mts.map +1 -1
  22. package/dist/helpers/AccountsApiRemoteTransactionSource.mjs +2 -1
  23. package/dist/helpers/AccountsApiRemoteTransactionSource.mjs.map +1 -1
  24. package/dist/helpers/GasFeePoller.cjs +76 -48
  25. package/dist/helpers/GasFeePoller.cjs.map +1 -1
  26. package/dist/helpers/GasFeePoller.d.cts +15 -3
  27. package/dist/helpers/GasFeePoller.d.cts.map +1 -1
  28. package/dist/helpers/GasFeePoller.d.mts +15 -3
  29. package/dist/helpers/GasFeePoller.d.mts.map +1 -1
  30. package/dist/helpers/GasFeePoller.mjs +73 -46
  31. package/dist/helpers/GasFeePoller.mjs.map +1 -1
  32. package/dist/helpers/IncomingTransactionHelper.cjs +22 -4
  33. package/dist/helpers/IncomingTransactionHelper.cjs.map +1 -1
  34. package/dist/helpers/IncomingTransactionHelper.d.cts +5 -2
  35. package/dist/helpers/IncomingTransactionHelper.d.cts.map +1 -1
  36. package/dist/helpers/IncomingTransactionHelper.d.mts +5 -2
  37. package/dist/helpers/IncomingTransactionHelper.d.mts.map +1 -1
  38. package/dist/helpers/IncomingTransactionHelper.mjs +22 -4
  39. package/dist/helpers/IncomingTransactionHelper.mjs.map +1 -1
  40. package/dist/helpers/PendingTransactionTracker.cjs +34 -3
  41. package/dist/helpers/PendingTransactionTracker.cjs.map +1 -1
  42. package/dist/helpers/PendingTransactionTracker.d.cts +12 -0
  43. package/dist/helpers/PendingTransactionTracker.d.cts.map +1 -1
  44. package/dist/helpers/PendingTransactionTracker.d.mts +12 -0
  45. package/dist/helpers/PendingTransactionTracker.d.mts.map +1 -1
  46. package/dist/helpers/PendingTransactionTracker.mjs +34 -3
  47. package/dist/helpers/PendingTransactionTracker.mjs.map +1 -1
  48. package/dist/hooks/SequentialPublishBatchHook.cjs +114 -0
  49. package/dist/hooks/SequentialPublishBatchHook.cjs.map +1 -0
  50. package/dist/hooks/SequentialPublishBatchHook.d.cts +24 -0
  51. package/dist/hooks/SequentialPublishBatchHook.d.cts.map +1 -0
  52. package/dist/hooks/SequentialPublishBatchHook.d.mts +24 -0
  53. package/dist/hooks/SequentialPublishBatchHook.d.mts.map +1 -0
  54. package/dist/hooks/SequentialPublishBatchHook.mjs +110 -0
  55. package/dist/hooks/SequentialPublishBatchHook.mjs.map +1 -0
  56. package/dist/types.cjs.map +1 -1
  57. package/dist/types.d.cts +4 -0
  58. package/dist/types.d.cts.map +1 -1
  59. package/dist/types.d.mts +4 -0
  60. package/dist/types.d.mts.map +1 -1
  61. package/dist/types.mjs.map +1 -1
  62. package/dist/utils/batch.cjs +12 -6
  63. package/dist/utils/batch.cjs.map +1 -1
  64. package/dist/utils/batch.d.cts +3 -0
  65. package/dist/utils/batch.d.cts.map +1 -1
  66. package/dist/utils/batch.d.mts +3 -0
  67. package/dist/utils/batch.d.mts.map +1 -1
  68. package/dist/utils/batch.mjs +12 -6
  69. package/dist/utils/batch.mjs.map +1 -1
  70. package/dist/utils/gas-fees.cjs +3 -7
  71. package/dist/utils/gas-fees.cjs.map +1 -1
  72. package/dist/utils/gas-fees.d.cts.map +1 -1
  73. package/dist/utils/gas-fees.d.mts.map +1 -1
  74. package/dist/utils/gas-fees.mjs +3 -7
  75. package/dist/utils/gas-fees.mjs.map +1 -1
  76. package/dist/utils/transaction-type.cjs +4 -1
  77. package/dist/utils/transaction-type.cjs.map +1 -1
  78. package/dist/utils/transaction-type.d.cts.map +1 -1
  79. package/dist/utils/transaction-type.d.mts.map +1 -1
  80. package/dist/utils/transaction-type.mjs +4 -1
  81. package/dist/utils/transaction-type.mjs.map +1 -1
  82. package/dist/utils/validation.cjs +1 -0
  83. package/dist/utils/validation.cjs.map +1 -1
  84. package/dist/utils/validation.d.cts +2 -1
  85. package/dist/utils/validation.d.cts.map +1 -1
  86. package/dist/utils/validation.d.mts +2 -1
  87. package/dist/utils/validation.d.mts.map +1 -1
  88. package/dist/utils/validation.mjs +1 -0
  89. package/dist/utils/validation.mjs.map +1 -1
  90. package/package.json +3 -3
package/CHANGELOG.md CHANGED
@@ -7,6 +7,35 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [56.2.0]
11
+
12
+ ### Added
13
+
14
+ - Add sequential batch support when `publishBatchHook` is not defined ([#5762](https://github.com/MetaMask/core/pull/5762))
15
+
16
+ ### Fixed
17
+
18
+ - Fix `userFeeLevel` as `dappSuggested` initially when dApp suggested gas values for legacy transactions ([#5821](https://github.com/MetaMask/core/pull/5821))
19
+ - Fix `addTransaction` function to correctly identify a transaction as a `simpleSend` type when the recipient is a smart account ([#5822](https://github.com/MetaMask/core/pull/5822))
20
+ - Fix gas fee randomisation with many decimal places ([#5839](https://github.com/MetaMask/core/pull/5839))
21
+
22
+ ## [56.1.0]
23
+
24
+ ### Added
25
+
26
+ - Automatically update gas fee properties in `txParams` when `updateTransactionGasFees` method is called with `userFeeLevel` ([#5800](https://github.com/MetaMask/core/pull/5800))
27
+ - Support additional debug of incoming transaction requests ([#5803](https://github.com/MetaMask/core/pull/5803))
28
+ - Add optional `incomingTransactions.client` constructor property.
29
+ - Add optional `tags` property to `updateIncomingTransactions` method.
30
+
31
+ ### Changed
32
+
33
+ - Bump `@metamask/controller-utils` to `^11.9.0` ([#5812](https://github.com/MetaMask/core/pull/5812))
34
+
35
+ ### Fixed
36
+
37
+ - Throw correct error code if upgrade rejected ([#5814](https://github.com/MetaMask/core/pull/5814))
38
+
10
39
  ## [56.0.0]
11
40
 
12
41
  ### Changed
@@ -1584,7 +1613,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1584
1613
 
1585
1614
  All changes listed after this point were applied to this package following the monorepo conversion.
1586
1615
 
1587
- [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@56.0.0...HEAD
1616
+ [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@56.2.0...HEAD
1617
+ [56.2.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@56.1.0...@metamask/transaction-controller@56.2.0
1618
+ [56.1.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@56.0.0...@metamask/transaction-controller@56.1.0
1588
1619
  [56.0.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@55.0.2...@metamask/transaction-controller@56.0.0
1589
1620
  [55.0.2]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@55.0.1...@metamask/transaction-controller@55.0.2
1590
1621
  [55.0.1]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@55.0.0...@metamask/transaction-controller@55.0.1
@@ -259,6 +259,7 @@ class TransactionController extends base_controller_1.BaseController {
259
259
  });
260
260
  };
261
261
  __classPrivateFieldSet(this, _TransactionController_incomingTransactionHelper, new IncomingTransactionHelper_1.IncomingTransactionHelper({
262
+ client: __classPrivateFieldGet(this, _TransactionController_incomingTransactionOptions, "f").client,
262
263
  getCache: () => this.state.lastFetchedBlockNumbers,
263
264
  getCurrentAccount: () => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getSelectedAccount).call(this),
264
265
  getLocalTransactions: () => this.state.transactions,
@@ -309,6 +310,7 @@ class TransactionController extends base_controller_1.BaseController {
309
310
  * @returns Result object containing the generated batch ID.
310
311
  */
311
312
  async addTransactionBatch(request) {
313
+ const { blockTracker } = this.messagingSystem.call(`NetworkController:getNetworkClientById`, request.networkClientId);
312
314
  return await (0, batch_1.addTransactionBatch)({
313
315
  addTransaction: this.addTransaction.bind(this),
314
316
  getChainId: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getChainId).bind(this),
@@ -320,6 +322,13 @@ class TransactionController extends base_controller_1.BaseController {
320
322
  publicKeyEIP7702: __classPrivateFieldGet(this, _TransactionController_publicKeyEIP7702, "f"),
321
323
  request,
322
324
  updateTransaction: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).bind(this),
325
+ publishTransaction: (ethQuery, transactionMeta) => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_publishTransaction).call(this, ethQuery, transactionMeta),
326
+ getPendingTransactionTracker: (networkClientId) => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_createPendingTransactionTracker).call(this, {
327
+ provider: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getProvider).call(this, { networkClientId }),
328
+ blockTracker,
329
+ chainId: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getChainId).call(this, networkClientId),
330
+ networkClientId,
331
+ }),
323
332
  });
324
333
  }
325
334
  /**
@@ -494,8 +503,14 @@ class TransactionController extends base_controller_1.BaseController {
494
503
  stopIncomingTransactionPolling() {
495
504
  __classPrivateFieldGet(this, _TransactionController_incomingTransactionHelper, "f").stop();
496
505
  }
497
- async updateIncomingTransactions() {
498
- await __classPrivateFieldGet(this, _TransactionController_incomingTransactionHelper, "f").update();
506
+ /**
507
+ * Update the incoming transactions by polling the remote transaction source.
508
+ *
509
+ * @param request - Request object.
510
+ * @param request.tags - Additional tags to identify the source of the request.
511
+ */
512
+ async updateIncomingTransactions({ tags } = {}) {
513
+ await __classPrivateFieldGet(this, _TransactionController_incomingTransactionHelper, "f").update({ tags });
499
514
  }
500
515
  /**
501
516
  * Attempts to cancel a transaction based on its ID by setting its status to "rejected"
@@ -736,35 +751,66 @@ class TransactionController extends base_controller_1.BaseController {
736
751
  * @param gasValues.userFeeLevel - Estimate level user selected.
737
752
  * @returns The updated transactionMeta.
738
753
  */
739
- updateTransactionGasFees(transactionId, { defaultGasEstimates, estimateUsed, estimateSuggested, gas, gasLimit, gasPrice, maxPriorityFeePerGas, maxFeePerGas, originalGasEstimate, userEditedGasLimit, userFeeLevel, }) {
754
+ updateTransactionGasFees(transactionId, { defaultGasEstimates, estimateUsed, estimateSuggested, gas, gasLimit, gasPrice, maxPriorityFeePerGas, maxFeePerGas, originalGasEstimate, userEditedGasLimit, userFeeLevel: userFeeLevelParam, }) {
740
755
  const transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionId);
741
756
  if (!transactionMeta) {
742
757
  throw new Error(`Cannot update transaction as no transaction metadata found`);
743
758
  }
744
759
  (0, utils_2.validateIfTransactionUnapproved)(transactionMeta, 'updateTransactionGasFees');
745
- let transactionGasFees = {
746
- txParams: {
747
- gas,
748
- gasLimit,
760
+ const clonedTransactionMeta = (0, lodash_1.cloneDeep)(transactionMeta);
761
+ const isTransactionGasFeeEstimatesExists = transactionMeta.gasFeeEstimates;
762
+ const isAutomaticGasFeeUpdateEnabled = __classPrivateFieldGet(this, _TransactionController_isAutomaticGasFeeUpdateEnabled, "f").call(this, transactionMeta);
763
+ const userFeeLevel = userFeeLevelParam;
764
+ const isOneOfFeeLevelSelected = Object.values(types_1.GasFeeEstimateLevel).includes(userFeeLevel);
765
+ const shouldUpdateTxParamsGasFees = isTransactionGasFeeEstimatesExists &&
766
+ isAutomaticGasFeeUpdateEnabled &&
767
+ isOneOfFeeLevelSelected;
768
+ if (shouldUpdateTxParamsGasFees) {
769
+ (0, GasFeePoller_1.updateTransactionGasEstimates)({
770
+ txMeta: clonedTransactionMeta,
771
+ userFeeLevel,
772
+ });
773
+ }
774
+ const txParamsUpdate = {
775
+ gas,
776
+ gasLimit,
777
+ };
778
+ if (shouldUpdateTxParamsGasFees) {
779
+ // Get updated values from clonedTransactionMeta if we're using automated fee updates
780
+ Object.assign(txParamsUpdate, {
781
+ gasPrice: clonedTransactionMeta.txParams.gasPrice,
782
+ maxPriorityFeePerGas: clonedTransactionMeta.txParams.maxPriorityFeePerGas,
783
+ maxFeePerGas: clonedTransactionMeta.txParams.maxFeePerGas,
784
+ });
785
+ }
786
+ else {
787
+ Object.assign(txParamsUpdate, {
749
788
  gasPrice,
750
789
  maxPriorityFeePerGas,
751
790
  maxFeePerGas,
752
- },
791
+ });
792
+ }
793
+ const transactionGasFees = {
794
+ txParams: (0, lodash_1.pickBy)(txParamsUpdate),
753
795
  defaultGasEstimates,
754
796
  estimateUsed,
755
797
  estimateSuggested,
756
798
  originalGasEstimate,
757
799
  userEditedGasLimit,
758
800
  userFeeLevel,
759
- // TODO: Replace `any` with type
760
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
761
801
  };
762
- // only update what is defined
763
- transactionGasFees.txParams = (0, lodash_1.pickBy)(transactionGasFees.txParams);
764
- transactionGasFees = (0, lodash_1.pickBy)(transactionGasFees);
765
- // merge updated gas values with existing transaction meta
766
- const updatedMeta = (0, lodash_1.merge)({}, transactionMeta, transactionGasFees);
767
- this.updateTransaction(updatedMeta, `${controllerName}:updateTransactionGasFees - gas values updated`);
802
+ const filteredTransactionGasFees = (0, lodash_1.pickBy)(transactionGasFees);
803
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
804
+ transactionId,
805
+ note: `${controllerName}:updateTransactionGasFees - gas values updated`,
806
+ skipResimulateCheck: true,
807
+ }, (draftTxMeta) => {
808
+ const { txParams, ...otherProps } = filteredTransactionGasFees;
809
+ Object.assign(draftTxMeta, otherProps);
810
+ if (txParams) {
811
+ Object.assign(draftTxMeta.txParams, txParams);
812
+ }
813
+ });
768
814
  return __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionId);
769
815
  }
770
816
  /**
@@ -2042,7 +2088,7 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
2042
2088
  (0, logger_1.projectLogger)('Updated simulation data', transactionId, simulationData);
2043
2089
  }, _TransactionController_onGasFeePollerTransactionUpdate = function _TransactionController_onGasFeePollerTransactionUpdate({ transactionId, gasFeeEstimates, gasFeeEstimatesLoaded, layer1GasFee, }) {
2044
2090
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, { transactionId, skipHistory: true }, (txMeta) => {
2045
- (0, GasFeePoller_1.updateTransactionGasFees)({
2091
+ (0, GasFeePoller_1.updateTransactionGasProperties)({
2046
2092
  txMeta,
2047
2093
  gasFeeEstimates,
2048
2094
  gasFeeEstimatesLoaded,
@@ -2105,7 +2151,7 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
2105
2151
  }, _TransactionController_isRejectError = function _TransactionController_isRejectError(error) {
2106
2152
  return [
2107
2153
  rpc_errors_1.errorCodes.provider.userRejectedRequest,
2108
- rpc_errors_1.errorCodes.rpc.methodNotSupported,
2154
+ validation_1.ErrorCode.RejectedUpgrade,
2109
2155
  ].includes(error.code);
2110
2156
  }, _TransactionController_rejectTransactionAndThrow = function _TransactionController_rejectTransactionAndThrow(transactionId, actionId, error) {
2111
2157
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_rejectTransaction).call(this, transactionId, actionId, error);