@metamask/transaction-controller 55.0.2 → 56.1.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 (62) hide show
  1. package/CHANGELOG.md +27 -1
  2. package/dist/TransactionController.cjs +57 -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 +59 -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 +32 -8
  33. package/dist/helpers/IncomingTransactionHelper.cjs.map +1 -1
  34. package/dist/helpers/IncomingTransactionHelper.d.cts +7 -2
  35. package/dist/helpers/IncomingTransactionHelper.d.cts.map +1 -1
  36. package/dist/helpers/IncomingTransactionHelper.d.mts +7 -2
  37. package/dist/helpers/IncomingTransactionHelper.d.mts.map +1 -1
  38. package/dist/helpers/IncomingTransactionHelper.mjs +32 -8
  39. package/dist/helpers/IncomingTransactionHelper.mjs.map +1 -1
  40. package/dist/types.cjs.map +1 -1
  41. package/dist/types.d.cts +4 -0
  42. package/dist/types.d.cts.map +1 -1
  43. package/dist/types.d.mts +4 -0
  44. package/dist/types.d.mts.map +1 -1
  45. package/dist/types.mjs.map +1 -1
  46. package/dist/utils/feature-flags.cjs +16 -1
  47. package/dist/utils/feature-flags.cjs.map +1 -1
  48. package/dist/utils/feature-flags.d.cts +14 -0
  49. package/dist/utils/feature-flags.d.cts.map +1 -1
  50. package/dist/utils/feature-flags.d.mts +14 -0
  51. package/dist/utils/feature-flags.d.mts.map +1 -1
  52. package/dist/utils/feature-flags.mjs +14 -0
  53. package/dist/utils/feature-flags.mjs.map +1 -1
  54. package/dist/utils/validation.cjs +1 -0
  55. package/dist/utils/validation.cjs.map +1 -1
  56. package/dist/utils/validation.d.cts +2 -1
  57. package/dist/utils/validation.d.cts.map +1 -1
  58. package/dist/utils/validation.d.mts +2 -1
  59. package/dist/utils/validation.d.mts.map +1 -1
  60. package/dist/utils/validation.mjs +1 -0
  61. package/dist/utils/validation.mjs.map +1 -1
  62. package/package.json +5 -5
package/CHANGELOG.md CHANGED
@@ -7,6 +7,30 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [56.1.0]
11
+
12
+ ### Added
13
+
14
+ - Automatically update gas fee properties in `txParams` when `updateTransactionGasFees` method is called with `userFeeLevel` ([#5800](https://github.com/MetaMask/core/pull/5800))
15
+ - Support additional debug of incoming transaction requests ([#5803](https://github.com/MetaMask/core/pull/5803))
16
+ - Add optional `incomingTransactions.client` constructor property.
17
+ - Add optional `tags` property to `updateIncomingTransactions` method.
18
+
19
+ ### Changed
20
+
21
+ - Bump `@metamask/controller-utils` to `^11.9.0` ([#5812](https://github.com/MetaMask/core/pull/5812))
22
+
23
+ ### Fixed
24
+
25
+ - Throw correct error code if upgrade rejected ([#5814](https://github.com/MetaMask/core/pull/5814))
26
+
27
+ ## [56.0.0]
28
+
29
+ ### Changed
30
+
31
+ - **BREAKING:** bump `@metamask/accounts-controller` peer dependency to `^29.0.0` ([#5802](https://github.com/MetaMask/core/pull/5802))
32
+ - Configure incoming transaction polling interval using feature flag ([#5792](https://github.com/MetaMask/core/pull/5792))
33
+
10
34
  ## [55.0.2]
11
35
 
12
36
  ### Fixed
@@ -1577,7 +1601,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1577
1601
 
1578
1602
  All changes listed after this point were applied to this package following the monorepo conversion.
1579
1603
 
1580
- [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@55.0.2...HEAD
1604
+ [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@56.1.0...HEAD
1605
+ [56.1.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@56.0.0...@metamask/transaction-controller@56.1.0
1606
+ [56.0.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@55.0.2...@metamask/transaction-controller@56.0.0
1581
1607
  [55.0.2]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@55.0.1...@metamask/transaction-controller@55.0.2
1582
1608
  [55.0.1]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@55.0.0...@metamask/transaction-controller@55.0.1
1583
1609
  [55.0.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@54.4.0...@metamask/transaction-controller@55.0.0
@@ -259,11 +259,13 @@ 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,
265
266
  includeTokenTransfers: __classPrivateFieldGet(this, _TransactionController_incomingTransactionOptions, "f").includeTokenTransfers,
266
267
  isEnabled: __classPrivateFieldGet(this, _TransactionController_incomingTransactionOptions, "f").isEnabled,
268
+ messenger: this.messagingSystem,
267
269
  queryEntireHistory: __classPrivateFieldGet(this, _TransactionController_incomingTransactionOptions, "f").queryEntireHistory,
268
270
  remoteTransactionSource: new AccountsApiRemoteTransactionSource_1.AccountsApiRemoteTransactionSource(),
269
271
  trimTransactions: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_trimTransactionsForState).bind(this),
@@ -493,8 +495,14 @@ class TransactionController extends base_controller_1.BaseController {
493
495
  stopIncomingTransactionPolling() {
494
496
  __classPrivateFieldGet(this, _TransactionController_incomingTransactionHelper, "f").stop();
495
497
  }
496
- async updateIncomingTransactions() {
497
- await __classPrivateFieldGet(this, _TransactionController_incomingTransactionHelper, "f").update();
498
+ /**
499
+ * Update the incoming transactions by polling the remote transaction source.
500
+ *
501
+ * @param request - Request object.
502
+ * @param request.tags - Additional tags to identify the source of the request.
503
+ */
504
+ async updateIncomingTransactions({ tags } = {}) {
505
+ await __classPrivateFieldGet(this, _TransactionController_incomingTransactionHelper, "f").update({ tags });
498
506
  }
499
507
  /**
500
508
  * Attempts to cancel a transaction based on its ID by setting its status to "rejected"
@@ -735,35 +743,66 @@ class TransactionController extends base_controller_1.BaseController {
735
743
  * @param gasValues.userFeeLevel - Estimate level user selected.
736
744
  * @returns The updated transactionMeta.
737
745
  */
738
- updateTransactionGasFees(transactionId, { defaultGasEstimates, estimateUsed, estimateSuggested, gas, gasLimit, gasPrice, maxPriorityFeePerGas, maxFeePerGas, originalGasEstimate, userEditedGasLimit, userFeeLevel, }) {
746
+ updateTransactionGasFees(transactionId, { defaultGasEstimates, estimateUsed, estimateSuggested, gas, gasLimit, gasPrice, maxPriorityFeePerGas, maxFeePerGas, originalGasEstimate, userEditedGasLimit, userFeeLevel: userFeeLevelParam, }) {
739
747
  const transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionId);
740
748
  if (!transactionMeta) {
741
749
  throw new Error(`Cannot update transaction as no transaction metadata found`);
742
750
  }
743
751
  (0, utils_2.validateIfTransactionUnapproved)(transactionMeta, 'updateTransactionGasFees');
744
- let transactionGasFees = {
745
- txParams: {
746
- gas,
747
- gasLimit,
752
+ const clonedTransactionMeta = (0, lodash_1.cloneDeep)(transactionMeta);
753
+ const isTransactionGasFeeEstimatesExists = transactionMeta.gasFeeEstimates;
754
+ const isAutomaticGasFeeUpdateEnabled = __classPrivateFieldGet(this, _TransactionController_isAutomaticGasFeeUpdateEnabled, "f").call(this, transactionMeta);
755
+ const userFeeLevel = userFeeLevelParam;
756
+ const isOneOfFeeLevelSelected = Object.values(types_1.GasFeeEstimateLevel).includes(userFeeLevel);
757
+ const shouldUpdateTxParamsGasFees = isTransactionGasFeeEstimatesExists &&
758
+ isAutomaticGasFeeUpdateEnabled &&
759
+ isOneOfFeeLevelSelected;
760
+ if (shouldUpdateTxParamsGasFees) {
761
+ (0, GasFeePoller_1.updateTransactionGasEstimates)({
762
+ txMeta: clonedTransactionMeta,
763
+ userFeeLevel,
764
+ });
765
+ }
766
+ const txParamsUpdate = {
767
+ gas,
768
+ gasLimit,
769
+ };
770
+ if (shouldUpdateTxParamsGasFees) {
771
+ // Get updated values from clonedTransactionMeta if we're using automated fee updates
772
+ Object.assign(txParamsUpdate, {
773
+ gasPrice: clonedTransactionMeta.txParams.gasPrice,
774
+ maxPriorityFeePerGas: clonedTransactionMeta.txParams.maxPriorityFeePerGas,
775
+ maxFeePerGas: clonedTransactionMeta.txParams.maxFeePerGas,
776
+ });
777
+ }
778
+ else {
779
+ Object.assign(txParamsUpdate, {
748
780
  gasPrice,
749
781
  maxPriorityFeePerGas,
750
782
  maxFeePerGas,
751
- },
783
+ });
784
+ }
785
+ const transactionGasFees = {
786
+ txParams: (0, lodash_1.pickBy)(txParamsUpdate),
752
787
  defaultGasEstimates,
753
788
  estimateUsed,
754
789
  estimateSuggested,
755
790
  originalGasEstimate,
756
791
  userEditedGasLimit,
757
792
  userFeeLevel,
758
- // TODO: Replace `any` with type
759
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
760
793
  };
761
- // only update what is defined
762
- transactionGasFees.txParams = (0, lodash_1.pickBy)(transactionGasFees.txParams);
763
- transactionGasFees = (0, lodash_1.pickBy)(transactionGasFees);
764
- // merge updated gas values with existing transaction meta
765
- const updatedMeta = (0, lodash_1.merge)({}, transactionMeta, transactionGasFees);
766
- this.updateTransaction(updatedMeta, `${controllerName}:updateTransactionGasFees - gas values updated`);
794
+ const filteredTransactionGasFees = (0, lodash_1.pickBy)(transactionGasFees);
795
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
796
+ transactionId,
797
+ note: `${controllerName}:updateTransactionGasFees - gas values updated`,
798
+ skipResimulateCheck: true,
799
+ }, (draftTxMeta) => {
800
+ const { txParams, ...otherProps } = filteredTransactionGasFees;
801
+ Object.assign(draftTxMeta, otherProps);
802
+ if (txParams) {
803
+ Object.assign(draftTxMeta.txParams, txParams);
804
+ }
805
+ });
767
806
  return __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionId);
768
807
  }
769
808
  /**
@@ -2041,7 +2080,7 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
2041
2080
  (0, logger_1.projectLogger)('Updated simulation data', transactionId, simulationData);
2042
2081
  }, _TransactionController_onGasFeePollerTransactionUpdate = function _TransactionController_onGasFeePollerTransactionUpdate({ transactionId, gasFeeEstimates, gasFeeEstimatesLoaded, layer1GasFee, }) {
2043
2082
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, { transactionId, skipHistory: true }, (txMeta) => {
2044
- (0, GasFeePoller_1.updateTransactionGasFees)({
2083
+ (0, GasFeePoller_1.updateTransactionGasProperties)({
2045
2084
  txMeta,
2046
2085
  gasFeeEstimates,
2047
2086
  gasFeeEstimatesLoaded,
@@ -2104,7 +2143,7 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
2104
2143
  }, _TransactionController_isRejectError = function _TransactionController_isRejectError(error) {
2105
2144
  return [
2106
2145
  rpc_errors_1.errorCodes.provider.userRejectedRequest,
2107
- rpc_errors_1.errorCodes.rpc.methodNotSupported,
2146
+ validation_1.ErrorCode.RejectedUpgrade,
2108
2147
  ].includes(error.code);
2109
2148
  }, _TransactionController_rejectTransactionAndThrow = function _TransactionController_rejectTransactionAndThrow(transactionId, actionId, error) {
2110
2149
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_rejectTransaction).call(this, transactionId, actionId, error);