@metamask-previews/transaction-controller 46.0.0-preview-af470a9 → 46.0.0-preview-e951f896

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.
package/CHANGELOG.md CHANGED
@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
9
9
 
10
10
  ### Added
11
11
 
12
+ - Add `updateAtomicBatchData` method ([#5380](https://github.com/MetaMask/core/pull/5380))
12
13
  - Support atomic batch transactions ([#5306](https://github.com/MetaMask/core/pull/5306))
13
14
  - Add methods:
14
15
  - `addTransactionBatch`
@@ -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_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;
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");
@@ -372,7 +372,6 @@ class TransactionController extends base_controller_1.BaseController {
372
372
  const selectedAddress = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getSelectedAccount).call(this).address;
373
373
  const internalAccounts = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getInternalAccounts).call(this);
374
374
  await (0, validation_1.validateTransactionOrigin)({
375
- data: txParams.data,
376
375
  from: txParams.from,
377
376
  internalAccounts,
378
377
  origin,
@@ -1104,6 +1103,54 @@ class TransactionController extends base_controller_1.BaseController {
1104
1103
  abortCallback();
1105
1104
  this.signAbortCallbacks.delete(transactionId);
1106
1105
  }
1106
+ /**
1107
+ * Update the transaction data of a single nested transaction within an atomic batch transaction.
1108
+ *
1109
+ * @param options - The options bag.
1110
+ * @param options.transactionId - ID of the atomic batch transaction.
1111
+ * @param options.transactionIndex - Index of the nested transaction within the atomic batch transaction.
1112
+ * @param options.transactionData - New data to set for the nested transaction.
1113
+ * @returns The updated data for the atomic batch transaction.
1114
+ */
1115
+ async updateAtomicBatchData({ transactionId, transactionIndex, transactionData, }) {
1116
+ (0, logger_1.projectLogger)('Updating atomic batch data', {
1117
+ transactionId,
1118
+ transactionIndex,
1119
+ transactionData,
1120
+ });
1121
+ const updatedTransactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
1122
+ transactionId,
1123
+ note: 'TransactionController#updateAtomicBatchData - Atomic batch data updated',
1124
+ }, (transactionMeta) => {
1125
+ const { nestedTransactions, txParams } = transactionMeta;
1126
+ const from = txParams.from;
1127
+ const nestedTransaction = nestedTransactions?.[transactionIndex];
1128
+ if (!nestedTransaction) {
1129
+ throw new Error(`Nested transaction not found with index - ${transactionIndex}`);
1130
+ }
1131
+ nestedTransaction.data = transactionData;
1132
+ const batchTransaction = (0, eip7702_1.generateEIP7702BatchTransaction)(from, nestedTransactions);
1133
+ transactionMeta.txParams.data = batchTransaction.data;
1134
+ });
1135
+ const draftTransaction = (0, lodash_1.cloneDeep)({
1136
+ ...updatedTransactionMeta,
1137
+ txParams: {
1138
+ ...updatedTransactionMeta.txParams,
1139
+ // Clear existing gas to force estimation
1140
+ gas: undefined,
1141
+ },
1142
+ });
1143
+ await __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateGasEstimate).call(this, draftTransaction);
1144
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
1145
+ transactionId,
1146
+ note: 'TransactionController#updateAtomicBatchData - Gas estimate updated',
1147
+ }, (transactionMeta) => {
1148
+ transactionMeta.txParams.gas = draftTransaction.txParams.gas;
1149
+ transactionMeta.simulationFails = draftTransaction.simulationFails;
1150
+ transactionMeta.gasLimitNoBuffer = draftTransaction.gasLimitNoBuffer;
1151
+ });
1152
+ return updatedTransactionMeta.txParams.data;
1153
+ }
1107
1154
  addMetadata(transactionMeta) {
1108
1155
  (0, validation_1.validateTxParams)(transactionMeta.txParams);
1109
1156
  this.update((state) => {
@@ -1116,18 +1163,11 @@ class TransactionController extends base_controller_1.BaseController {
1116
1163
  async updateGasProperties(transactionMeta, { traceContext } = {}) {
1117
1164
  const isEIP1559Compatible = transactionMeta.txParams.type !== types_1.TransactionEnvelopeType.legacy &&
1118
1165
  (await this.getEIP1559Compatibility(transactionMeta.networkClientId));
1119
- const { networkClientId, chainId } = transactionMeta;
1120
- const isCustomNetwork = __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").getNetworkClient({ networkClientId })
1121
- .configuration.type === network_controller_1.NetworkClientType.Custom;
1166
+ const { networkClientId } = transactionMeta;
1122
1167
  const ethQuery = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getEthQuery).call(this, { networkClientId });
1123
1168
  const provider = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getProvider).call(this, { networkClientId });
1124
1169
  await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Update Gas', parentContext: traceContext }, async () => {
1125
- await (0, gas_1.updateGas)({
1126
- ethQuery,
1127
- chainId,
1128
- isCustomNetwork,
1129
- txMeta: transactionMeta,
1130
- });
1170
+ await __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateGasEstimate).call(this, transactionMeta);
1131
1171
  });
1132
1172
  await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Update Gas Fees', parentContext: traceContext }, async () => await (0, gas_fees_1.updateGasFees)({
1133
1173
  eip1559: isEIP1559Compatible,
@@ -1889,6 +1929,9 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
1889
1929
  let resimulateResponse;
1890
1930
  this.update((state) => {
1891
1931
  const index = state.transactions.findIndex(({ id }) => id === transactionId);
1932
+ if (index === -1) {
1933
+ throw new Error(`Cannot update transaction as ID not found - ${transactionId}`);
1934
+ }
1892
1935
  let transactionMeta = state.transactions[index];
1893
1936
  const originalTransactionMeta = (0, lodash_1.cloneDeep)(transactionMeta);
1894
1937
  transactionMeta = callback(transactionMeta) ?? transactionMeta;
@@ -2044,5 +2087,16 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
2044
2087
  }
2045
2088
  submitHistory.unshift(submitHistoryEntry);
2046
2089
  });
2090
+ }, _TransactionController_updateGasEstimate = async function _TransactionController_updateGasEstimate(transactionMeta) {
2091
+ const { chainId, networkClientId } = transactionMeta;
2092
+ const isCustomNetwork = __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").getNetworkClient({ networkClientId })
2093
+ .configuration.type === network_controller_1.NetworkClientType.Custom;
2094
+ const ethQuery = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getEthQuery).call(this, { networkClientId });
2095
+ await (0, gas_1.updateGas)({
2096
+ chainId,
2097
+ ethQuery,
2098
+ isCustomNetwork,
2099
+ txMeta: transactionMeta,
2100
+ });
2047
2101
  };
2048
2102
  //# sourceMappingURL=TransactionController.cjs.map