@metamask-previews/transaction-controller 46.0.0-preview-1b0ea93a → 46.0.0-preview-90578fc4

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");
@@ -1103,6 +1103,54 @@ class TransactionController extends base_controller_1.BaseController {
1103
1103
  abortCallback();
1104
1104
  this.signAbortCallbacks.delete(transactionId);
1105
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
+ }
1106
1154
  addMetadata(transactionMeta) {
1107
1155
  (0, validation_1.validateTxParams)(transactionMeta.txParams);
1108
1156
  this.update((state) => {
@@ -1115,18 +1163,11 @@ class TransactionController extends base_controller_1.BaseController {
1115
1163
  async updateGasProperties(transactionMeta, { traceContext } = {}) {
1116
1164
  const isEIP1559Compatible = transactionMeta.txParams.type !== types_1.TransactionEnvelopeType.legacy &&
1117
1165
  (await this.getEIP1559Compatibility(transactionMeta.networkClientId));
1118
- const { networkClientId, chainId } = transactionMeta;
1119
- const isCustomNetwork = __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").getNetworkClient({ networkClientId })
1120
- .configuration.type === network_controller_1.NetworkClientType.Custom;
1166
+ const { networkClientId } = transactionMeta;
1121
1167
  const ethQuery = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getEthQuery).call(this, { networkClientId });
1122
1168
  const provider = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getProvider).call(this, { networkClientId });
1123
1169
  await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Update Gas', parentContext: traceContext }, async () => {
1124
- await (0, gas_1.updateGas)({
1125
- ethQuery,
1126
- chainId,
1127
- isCustomNetwork,
1128
- txMeta: transactionMeta,
1129
- });
1170
+ await __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateGasEstimate).call(this, transactionMeta);
1130
1171
  });
1131
1172
  await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Update Gas Fees', parentContext: traceContext }, async () => await (0, gas_fees_1.updateGasFees)({
1132
1173
  eip1559: isEIP1559Compatible,
@@ -1888,6 +1929,9 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
1888
1929
  let resimulateResponse;
1889
1930
  this.update((state) => {
1890
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
+ }
1891
1935
  let transactionMeta = state.transactions[index];
1892
1936
  const originalTransactionMeta = (0, lodash_1.cloneDeep)(transactionMeta);
1893
1937
  transactionMeta = callback(transactionMeta) ?? transactionMeta;
@@ -2043,5 +2087,16 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
2043
2087
  }
2044
2088
  submitHistory.unshift(submitHistoryEntry);
2045
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
+ });
2046
2101
  };
2047
2102
  //# sourceMappingURL=TransactionController.cjs.map