@metamask-previews/transaction-controller 37.3.0-preview-c77aebdb → 37.3.0-preview-8518e617

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 (38) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/TransactionController.cjs +75 -19
  3. package/dist/TransactionController.cjs.map +1 -1
  4. package/dist/TransactionController.d.cts.map +1 -1
  5. package/dist/TransactionController.d.mts.map +1 -1
  6. package/dist/TransactionController.mjs +77 -21
  7. package/dist/TransactionController.mjs.map +1 -1
  8. package/dist/types.cjs +2 -1
  9. package/dist/types.cjs.map +1 -1
  10. package/dist/types.d.cts +3 -0
  11. package/dist/types.d.cts.map +1 -1
  12. package/dist/types.d.mts +3 -0
  13. package/dist/types.d.mts.map +1 -1
  14. package/dist/types.mjs +1 -0
  15. package/dist/types.mjs.map +1 -1
  16. package/dist/utils/simulation-api.cjs.map +1 -1
  17. package/dist/utils/simulation-api.d.cts +3 -0
  18. package/dist/utils/simulation-api.d.cts.map +1 -1
  19. package/dist/utils/simulation-api.d.mts +3 -0
  20. package/dist/utils/simulation-api.d.mts.map +1 -1
  21. package/dist/utils/simulation-api.mjs.map +1 -1
  22. package/dist/utils/simulation.cjs +10 -1
  23. package/dist/utils/simulation.cjs.map +1 -1
  24. package/dist/utils/simulation.d.cts +5 -1
  25. package/dist/utils/simulation.d.cts.map +1 -1
  26. package/dist/utils/simulation.d.mts +5 -1
  27. package/dist/utils/simulation.d.mts.map +1 -1
  28. package/dist/utils/simulation.mjs +10 -1
  29. package/dist/utils/simulation.mjs.map +1 -1
  30. package/dist/utils/utils.cjs +25 -1
  31. package/dist/utils/utils.cjs.map +1 -1
  32. package/dist/utils/utils.d.cts +10 -0
  33. package/dist/utils/utils.d.cts.map +1 -1
  34. package/dist/utils/utils.d.mts +10 -0
  35. package/dist/utils/utils.d.mts.map +1 -1
  36. package/dist/utils/utils.mjs +20 -0
  37. package/dist/utils/utils.mjs.map +1 -1
  38. package/package.json +5 -4
package/CHANGELOG.md CHANGED
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ### Changed
11
+
12
+ - **BREAKING:** Bump `@metamask/network-controller` peer dependency from `^21.0.0` to `^22.0.0` ([#4841](https://github.com/MetaMask/core/pull/4841))
13
+
10
14
  ## [37.3.0]
11
15
 
12
16
  ### 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_incomingTransactionOptions, _TransactionController_pendingTransactionOptions, _TransactionController_trace, _TransactionController_transactionHistoryLimit, _TransactionController_isSimulationEnabled, _TransactionController_testGasFeeFlows, _TransactionController_multichainTrackingHelper, _TransactionController_retryTransaction, _TransactionController_createNonceTracker, _TransactionController_createIncomingTransactionHelper, _TransactionController_createPendingTransactionTracker, _TransactionController_checkForPendingTransactionAndStartPolling, _TransactionController_stopAllTracking, _TransactionController_removeIncomingTransactionHelperListeners, _TransactionController_addIncomingTransactionHelperListeners, _TransactionController_removePendingTransactionTrackerListeners, _TransactionController_addPendingTransactionTrackerListeners, _TransactionController_getNonceTrackerPendingTransactions, _TransactionController_getGasFeeFlows, _TransactionController_getLayer1GasFeeFlows, _TransactionController_updateTransactionInternal, _TransactionController_checkIfTransactionParamsUpdated, _TransactionController_onTransactionParamsUpdated, _TransactionController_updateSimulationData, _TransactionController_onGasFeePollerTransactionUpdate, _TransactionController_getNetworkClientId, _TransactionController_getGlobalNetworkClientId, _TransactionController_getGlobalChainId, _TransactionController_isCustomNetwork, _TransactionController_getSelectedAccount, _TransactionController_updateSubmitHistory;
16
+ var _TransactionController_instances, _TransactionController_internalEvents, _TransactionController_incomingTransactionOptions, _TransactionController_pendingTransactionOptions, _TransactionController_trace, _TransactionController_transactionHistoryLimit, _TransactionController_isSimulationEnabled, _TransactionController_testGasFeeFlows, _TransactionController_multichainTrackingHelper, _TransactionController_retryTransaction, _TransactionController_createNonceTracker, _TransactionController_createIncomingTransactionHelper, _TransactionController_createPendingTransactionTracker, _TransactionController_checkForPendingTransactionAndStartPolling, _TransactionController_stopAllTracking, _TransactionController_removeIncomingTransactionHelperListeners, _TransactionController_addIncomingTransactionHelperListeners, _TransactionController_removePendingTransactionTrackerListeners, _TransactionController_addPendingTransactionTrackerListeners, _TransactionController_getNonceTrackerPendingTransactions, _TransactionController_getGasFeeFlows, _TransactionController_getLayer1GasFeeFlows, _TransactionController_updateTransactionInternal, _TransactionController_shouldReSimulateDueToThreshold, _TransactionController_shouldReSimulateDueToSecurityAlert, _TransactionController_isSecurityAlertUpdated, _TransactionController_isSimulationUpdated, _TransactionController_shouldReSimulateDueToTxParamUpdate, _TransactionController_updateSimulationData, _TransactionController_onGasFeePollerTransactionUpdate, _TransactionController_getNetworkClientId, _TransactionController_getGlobalNetworkClientId, _TransactionController_getGlobalChainId, _TransactionController_isCustomNetwork, _TransactionController_getSelectedAccount, _TransactionController_updateSubmitHistory;
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.TransactionController = exports.ApprovalState = exports.SPEED_UP_RATE = exports.CANCEL_RATE = exports.HARDFORK = void 0;
19
19
  const common_1 = require("@ethereumjs/common");
@@ -1932,7 +1932,9 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_in
1932
1932
  }, _TransactionController_getLayer1GasFeeFlows = function _TransactionController_getLayer1GasFeeFlows() {
1933
1933
  return [new OptimismLayer1GasFeeFlow_1.OptimismLayer1GasFeeFlow(), new ScrollLayer1GasFeeFlow_1.ScrollLayer1GasFeeFlow()];
1934
1934
  }, _TransactionController_updateTransactionInternal = function _TransactionController_updateTransactionInternal({ transactionId, note, skipHistory, skipValidation, }, callback) {
1935
- let updatedTransactionParams = [];
1935
+ let isReSimulateNeedDueToTxParamsUpdated = false;
1936
+ let isReSimulateNeedDueToSecurityAlert = false;
1937
+ let isReSimulateNeedDueToThreshold = false;
1936
1938
  this.update((state) => {
1937
1939
  const index = state.transactions.findIndex(({ id }) => id === transactionId);
1938
1940
  let transactionMeta = state.transactions[index];
@@ -1942,8 +1944,12 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_in
1942
1944
  transactionMeta.txParams = (0, utils_2.normalizeTransactionParams)(transactionMeta.txParams);
1943
1945
  (0, validation_1.validateTxParams)(transactionMeta.txParams);
1944
1946
  }
1945
- updatedTransactionParams =
1946
- __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_checkIfTransactionParamsUpdated).call(this, transactionMeta);
1947
+ isReSimulateNeedDueToTxParamsUpdated =
1948
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_shouldReSimulateDueToTxParamUpdate).call(this, transactionMeta);
1949
+ isReSimulateNeedDueToSecurityAlert =
1950
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_shouldReSimulateDueToSecurityAlert).call(this, transactionMeta);
1951
+ isReSimulateNeedDueToThreshold =
1952
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_shouldReSimulateDueToThreshold).call(this, transactionMeta);
1947
1953
  const shouldSkipHistory = this.isHistoryDisabled || skipHistory;
1948
1954
  if (!shouldSkipHistory) {
1949
1955
  transactionMeta = (0, history_1.updateTransactionHistory)(transactionMeta, note ?? 'Transaction updated');
@@ -1951,31 +1957,73 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_in
1951
1957
  state.transactions[index] = transactionMeta;
1952
1958
  });
1953
1959
  const transactionMeta = this.getTransaction(transactionId);
1954
- if (updatedTransactionParams.length > 0) {
1955
- __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_onTransactionParamsUpdated).call(this, transactionMeta, updatedTransactionParams);
1960
+ if (isReSimulateNeedDueToTxParamsUpdated ||
1961
+ isReSimulateNeedDueToSecurityAlert ||
1962
+ isReSimulateNeedDueToThreshold) {
1963
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateSimulationData).call(this, transactionMeta, {
1964
+ isReSimulatedDueToSecurityAlert: isReSimulateNeedDueToSecurityAlert,
1965
+ isReSimulatedDueToThreshold: isReSimulateNeedDueToThreshold,
1966
+ }).catch((error) => {
1967
+ (0, logger_1.projectLogger)('Error updating simulation data', error);
1968
+ throw error;
1969
+ });
1956
1970
  }
1957
1971
  return transactionMeta;
1958
- }, _TransactionController_checkIfTransactionParamsUpdated = function _TransactionController_checkIfTransactionParamsUpdated(newTransactionMeta) {
1972
+ }, _TransactionController_shouldReSimulateDueToThreshold = function _TransactionController_shouldReSimulateDueToThreshold(transactionMeta) {
1973
+ const isSimulationUpdated = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_isSimulationUpdated).call(this, transactionMeta);
1974
+ if (!isSimulationUpdated) {
1975
+ return false;
1976
+ }
1977
+ const { simulationData, txParams: { value }, } = transactionMeta;
1978
+ const isSimulationDataAvailable = Boolean(simulationData);
1979
+ const simulationNativeBalanceDifference = simulationData?.nativeBalanceChange?.difference;
1980
+ const isTxValueAndSimulationNativeBalanceDefined = value !== undefined && simulationNativeBalanceDifference !== undefined;
1981
+ const isTxValueVsBalanceAbovePercentageThreshold = isTxValueAndSimulationNativeBalanceDefined &&
1982
+ !(0, utils_2.isPercentageDifferenceWithinThreshold)(simulationNativeBalanceDifference, value, 5);
1983
+ return (isSimulationDataAvailable && isTxValueVsBalanceAbovePercentageThreshold);
1984
+ }, _TransactionController_shouldReSimulateDueToSecurityAlert = function _TransactionController_shouldReSimulateDueToSecurityAlert(transactionMeta) {
1985
+ const isSecurityAlertUpdated = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_isSecurityAlertUpdated).call(this, transactionMeta);
1986
+ if (!isSecurityAlertUpdated) {
1987
+ return false;
1988
+ }
1989
+ const { securityAlertResponse } = transactionMeta;
1990
+ const isMaliciousTransfer = securityAlertResponse?.result_type === types_1.BLOCKAID_RESULT_TYPE_MALICIOUS;
1991
+ return isMaliciousTransfer;
1992
+ }, _TransactionController_isSecurityAlertUpdated = function _TransactionController_isSecurityAlertUpdated(newTransactionMeta) {
1993
+ const { id: transactionId, securityAlertResponse: newSecurityAlertResponse, } = (0, lodash_1.cloneDeep)(newTransactionMeta);
1994
+ const { securityAlertResponse: originalSecurityAlertResponse } = (0, lodash_1.cloneDeep)(this.getTransaction(transactionId));
1995
+ return !(0, lodash_1.isEqual)(originalSecurityAlertResponse, newSecurityAlertResponse);
1996
+ }, _TransactionController_isSimulationUpdated = function _TransactionController_isSimulationUpdated(newTransactionMeta) {
1997
+ const { id: transactionId, simulationData: newSimulationData } = (0, lodash_1.cloneDeep)(newTransactionMeta);
1998
+ const newTransactionProps = {
1999
+ simulationData: newSimulationData,
2000
+ simulationNativeBalanceDifference: newSimulationData?.nativeBalanceChange?.difference,
2001
+ };
2002
+ const { simulationData: originalSimulationData } = (0, lodash_1.cloneDeep)(this.getTransaction(transactionId));
2003
+ const originalTransactionProps = {
2004
+ simulationData: originalSimulationData,
2005
+ simulationNativeBalanceDifference: originalSimulationData?.nativeBalanceChange?.difference,
2006
+ };
2007
+ // Skip the case where simulationData fetch started
2008
+ const shouldSkip = !newTransactionProps.simulationData;
2009
+ if (shouldSkip) {
2010
+ return false;
2011
+ }
2012
+ return !(0, lodash_1.isEqual)(originalTransactionProps, newTransactionProps);
2013
+ }, _TransactionController_shouldReSimulateDueToTxParamUpdate = function _TransactionController_shouldReSimulateDueToTxParamUpdate(newTransactionMeta) {
1959
2014
  const { id: transactionId, txParams: newParams } = newTransactionMeta;
1960
2015
  const originalParams = this.getTransaction(transactionId)?.txParams;
1961
2016
  if (!originalParams || (0, lodash_1.isEqual)(originalParams, newParams)) {
1962
- return [];
2017
+ return false;
1963
2018
  }
1964
2019
  const params = Object.keys(newParams);
1965
2020
  const updatedProperties = params.filter((param) => newParams[param] !== originalParams[param]);
1966
2021
  (0, logger_1.projectLogger)('Transaction parameters have been updated', transactionId, updatedProperties, originalParams, newParams);
1967
- return updatedProperties;
1968
- }, _TransactionController_onTransactionParamsUpdated = function _TransactionController_onTransactionParamsUpdated(transactionMeta, updatedParams) {
1969
- if (['to', 'value', 'data'].some((param) => updatedParams.includes(param))) {
1970
- (0, logger_1.projectLogger)('Updating simulation data due to transaction parameter update');
1971
- __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateSimulationData).call(this, transactionMeta).catch((error) => {
1972
- (0, logger_1.projectLogger)('Error updating simulation data', error);
1973
- throw error;
1974
- });
1975
- }
1976
- }, _TransactionController_updateSimulationData = async function _TransactionController_updateSimulationData(transactionMeta, { traceContext } = {}) {
1977
- const { id: transactionId, chainId, txParams } = transactionMeta;
2022
+ return ['to', 'value', 'data'].some((param) => updatedProperties.includes(param));
2023
+ }, _TransactionController_updateSimulationData = async function _TransactionController_updateSimulationData(transactionMeta, { traceContext, isReSimulatedDueToSecurityAlert, isReSimulatedDueToThreshold, } = {}) {
2024
+ const { id: transactionId, chainId, txParams, simulationData: prevSimulationData, } = transactionMeta;
1978
2025
  const { from, to, value, data } = txParams;
2026
+ const isReSimulatedDueToSecurity = Boolean(isReSimulatedDueToSecurityAlert || isReSimulatedDueToThreshold);
1979
2027
  let simulationData = {
1980
2028
  error: {
1981
2029
  code: types_1.SimulationErrorCode.Disabled,
@@ -1993,7 +2041,15 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_in
1993
2041
  to: to,
1994
2042
  value: value,
1995
2043
  data: data,
2044
+ }, {
2045
+ isReSimulatedDueToSecurity,
1996
2046
  }));
2047
+ if (prevSimulationData && !(0, lodash_1.isEqual)(simulationData, prevSimulationData)) {
2048
+ simulationData = {
2049
+ ...simulationData,
2050
+ isReSimulatedDueToSecurity,
2051
+ };
2052
+ }
1997
2053
  }
1998
2054
  const finalTransactionMeta = this.getTransaction(transactionId);
1999
2055
  /* istanbul ignore if */