@metamask-previews/transaction-controller 54.1.0-preview-772debef → 54.2.0-preview-bad0bc3

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.
@@ -1,19 +1,19 @@
1
1
  "use strict";
2
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
3
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
4
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
5
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
6
- };
7
2
  var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
8
3
  if (kind === "m") throw new TypeError("Private method is not writable");
9
4
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
10
5
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
11
6
  return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
12
7
  };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
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_afterAdd, _TransactionController_internalEvents, _TransactionController_methodDataHelper, _TransactionController_incomingTransactionHelper, _TransactionController_incomingTransactionOptions, _TransactionController_pendingTransactionOptions, _TransactionController_publishBatchHook, _TransactionController_publicKeyEIP7702, _TransactionController_trace, _TransactionController_transactionHistoryLimit, _TransactionController_isFirstTimeInteractionEnabled, _TransactionController_isSimulationEnabled, _TransactionController_testGasFeeFlows, _TransactionController_multichainTrackingHelper, _TransactionController_retryTransaction, _TransactionController_rejectTransaction, _TransactionController_getChainId, _TransactionController_getNetworkClientId, _TransactionController_getEthQuery, _TransactionController_getProvider, _TransactionController_markNonceDuplicatesDropped, _TransactionController_signTransaction, _TransactionController_onConfirmedTransaction, _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, _TransactionController_registerActionHandlers, _TransactionController_deleteTransaction, _TransactionController_isRejectError, _TransactionController_rejectTransactionAndThrow;
16
+ var _TransactionController_instances, _TransactionController_afterAdd, _TransactionController_afterSign, _TransactionController_approvingTransactionIds, _TransactionController_beforeCheckPendingTransaction, _TransactionController_beforePublish, _TransactionController_gasFeeFlows, _TransactionController_getAdditionalSignArguments, _TransactionController_getCurrentAccountEIP1559Compatibility, _TransactionController_getCurrentNetworkEIP1559Compatibility, _TransactionController_getExternalPendingTransactions, _TransactionController_getGasFeeEstimates, _TransactionController_getNetworkState, _TransactionController_getPermittedAccounts, _TransactionController_getSavedGasFees, _TransactionController_incomingTransactionHelper, _TransactionController_incomingTransactionOptions, _TransactionController_internalEvents, _TransactionController_isAutomaticGasFeeUpdateEnabled, _TransactionController_isFirstTimeInteractionEnabled, _TransactionController_isHistoryDisabled, _TransactionController_isSendFlowHistoryDisabled, _TransactionController_isSimulationEnabled, _TransactionController_isSwapsDisabled, _TransactionController_layer1GasFeeFlows, _TransactionController_methodDataHelper, _TransactionController_multichainTrackingHelper, _TransactionController_pendingTransactionOptions, _TransactionController_publicKeyEIP7702, _TransactionController_publish, _TransactionController_publishBatchHook, _TransactionController_securityProviderRequest, _TransactionController_sign, _TransactionController_signAbortCallbacks, _TransactionController_testGasFeeFlows, _TransactionController_trace, _TransactionController_transactionHistoryLimit, _TransactionController_retryTransaction, _TransactionController_signExternalTransaction, _TransactionController_addMetadata, _TransactionController_updateGasProperties, _TransactionController_onBootCleanup, _TransactionController_failIncompleteTransactions, _TransactionController_processApproval, _TransactionController_approveTransaction, _TransactionController_publishTransaction, _TransactionController_rejectTransaction, _TransactionController_trimTransactionsForState, _TransactionController_isFinalState, _TransactionController_isLocalFinalState, _TransactionController_requestApproval, _TransactionController_getTransaction, _TransactionController_getTransactionOrThrow, _TransactionController_getApprovalId, _TransactionController_isTransactionCompleted, _TransactionController_getChainId, _TransactionController_getNetworkClientId, _TransactionController_getEthQuery, _TransactionController_getProvider, _TransactionController_onIncomingTransactions, _TransactionController_generateDappSuggestedGasFees, _TransactionController_addExternalTransaction, _TransactionController_markNonceDuplicatesDropped, _TransactionController_setTransactionStatusDropped, _TransactionController_getTransactionWithActionId, _TransactionController_waitForTransactionFinished, _TransactionController_updateTransactionMetaRSV, _TransactionController_getEIP1559Compatibility, _TransactionController_signTransaction, _TransactionController_onTransactionStatusChange, _TransactionController_getNonceTrackerTransactions, _TransactionController_onConfirmedTransaction, _TransactionController_updatePostBalance, _TransactionController_createNonceTracker, _TransactionController_createPendingTransactionTracker, _TransactionController_checkForPendingTransactionAndStartPolling, _TransactionController_stopAllTracking, _TransactionController_addIncomingTransactionHelperListeners, _TransactionController_removePendingTransactionTrackerListeners, _TransactionController_addPendingTransactionTrackerListeners, _TransactionController_getNonceTrackerPendingTransactions, _TransactionController_publishTransactionForRetry, _TransactionController_isTransactionAlreadyConfirmedError, _TransactionController_getGasFeeFlows, _TransactionController_getLayer1GasFeeFlows, _TransactionController_updateTransactionInternal, _TransactionController_updateFirstTimeInteraction, _TransactionController_updateSimulationData, _TransactionController_onGasFeePollerTransactionUpdate, _TransactionController_getSelectedAccount, _TransactionController_getInternalAccounts, _TransactionController_updateSubmitHistory, _TransactionController_updateGasEstimate, _TransactionController_registerActionHandlers, _TransactionController_deleteTransaction, _TransactionController_isRejectError, _TransactionController_rejectTransactionAndThrow, _TransactionController_failTransaction;
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");
@@ -122,42 +122,13 @@ function getDefaultTransactionControllerState() {
122
122
  * Controller responsible for submitting and managing transactions.
123
123
  */
124
124
  class TransactionController extends base_controller_1.BaseController {
125
- failTransaction(transactionMeta, error, actionId) {
126
- let newTransactionMeta;
127
- try {
128
- newTransactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
129
- transactionId: transactionMeta.id,
130
- note: 'TransactionController#failTransaction - Add error message and set status to failed',
131
- skipValidation: true,
132
- }, (draftTransactionMeta) => {
133
- draftTransactionMeta.status = types_1.TransactionStatus.failed;
134
- draftTransactionMeta.error = (0, utils_2.normalizeTxError)(error);
135
- });
136
- }
137
- catch (err) {
138
- (0, logger_1.projectLogger)('Failed to mark transaction as failed', err);
139
- newTransactionMeta = {
140
- ...transactionMeta,
141
- status: types_1.TransactionStatus.failed,
142
- error: (0, utils_2.normalizeTxError)(error),
143
- };
144
- }
145
- this.messagingSystem.publish(`${controllerName}:transactionFailed`, {
146
- actionId,
147
- error: error.message,
148
- transactionMeta: newTransactionMeta,
149
- });
150
- this.onTransactionStatusChange(newTransactionMeta);
151
- this.messagingSystem.publish(`${controllerName}:transactionFinished`, newTransactionMeta);
152
- __classPrivateFieldGet(this, _TransactionController_internalEvents, "f").emit(`${transactionMeta.id}:finished`, newTransactionMeta);
153
- }
154
125
  /**
155
126
  * Constructs a TransactionController.
156
127
  *
157
128
  * @param options - The controller options.
158
129
  */
159
130
  constructor(options) {
160
- const { disableHistory, disableSendFlowHistory, disableSwaps, isAutomaticGasFeeUpdateEnabled, getCurrentAccountEIP1559Compatibility, getCurrentNetworkEIP1559Compatibility, getExternalPendingTransactions, getGasFeeEstimates, getNetworkClientRegistry, getNetworkState, getPermittedAccounts, getSavedGasFees, incomingTransactions = {}, isFirstTimeInteractionEnabled, isSimulationEnabled, messenger, pendingTransactions = {}, publicKeyEIP7702, securityProviderRequest, sign, state, testGasFeeFlows, trace, transactionHistoryLimit = 40, hooks, } = options;
131
+ const { disableHistory, disableSendFlowHistory, disableSwaps, getCurrentAccountEIP1559Compatibility, getCurrentNetworkEIP1559Compatibility, getExternalPendingTransactions, getGasFeeEstimates, getNetworkClientRegistry, getNetworkState, getPermittedAccounts, getSavedGasFees, hooks, incomingTransactions = {}, isAutomaticGasFeeUpdateEnabled, isFirstTimeInteractionEnabled, isSimulationEnabled, messenger, pendingTransactions = {}, publicKeyEIP7702, securityProviderRequest, sign, state, testGasFeeFlows, trace, transactionHistoryLimit = 40, } = options;
161
132
  super({
162
133
  name: controllerName,
163
134
  metadata,
@@ -169,62 +140,75 @@ class TransactionController extends base_controller_1.BaseController {
169
140
  });
170
141
  _TransactionController_instances.add(this);
171
142
  _TransactionController_afterAdd.set(this, void 0);
172
- _TransactionController_internalEvents.set(this, new events_1.EventEmitter());
173
- this.approvingTransactionIds = new Set();
174
- _TransactionController_methodDataHelper.set(this, void 0);
143
+ _TransactionController_afterSign.set(this, void 0);
144
+ _TransactionController_approvingTransactionIds.set(this, new Set());
145
+ _TransactionController_beforeCheckPendingTransaction.set(this, void 0);
146
+ _TransactionController_beforePublish.set(this, void 0);
147
+ _TransactionController_gasFeeFlows.set(this, void 0);
148
+ _TransactionController_getAdditionalSignArguments.set(this, void 0);
149
+ _TransactionController_getCurrentAccountEIP1559Compatibility.set(this, void 0);
150
+ _TransactionController_getCurrentNetworkEIP1559Compatibility.set(this, void 0);
151
+ _TransactionController_getExternalPendingTransactions.set(this, void 0);
152
+ _TransactionController_getGasFeeEstimates.set(this, void 0);
153
+ _TransactionController_getNetworkState.set(this, void 0);
154
+ _TransactionController_getPermittedAccounts.set(this, void 0);
155
+ _TransactionController_getSavedGasFees.set(this, void 0);
175
156
  _TransactionController_incomingTransactionHelper.set(this, void 0);
176
157
  _TransactionController_incomingTransactionOptions.set(this, void 0);
158
+ _TransactionController_internalEvents.set(this, new events_1.EventEmitter());
159
+ _TransactionController_isAutomaticGasFeeUpdateEnabled.set(this, void 0);
160
+ _TransactionController_isFirstTimeInteractionEnabled.set(this, void 0);
161
+ _TransactionController_isHistoryDisabled.set(this, void 0);
162
+ _TransactionController_isSendFlowHistoryDisabled.set(this, void 0);
163
+ _TransactionController_isSimulationEnabled.set(this, void 0);
164
+ _TransactionController_isSwapsDisabled.set(this, void 0);
165
+ _TransactionController_layer1GasFeeFlows.set(this, void 0);
166
+ _TransactionController_methodDataHelper.set(this, void 0);
167
+ _TransactionController_multichainTrackingHelper.set(this, void 0);
177
168
  _TransactionController_pendingTransactionOptions.set(this, void 0);
178
- _TransactionController_publishBatchHook.set(this, void 0);
179
169
  _TransactionController_publicKeyEIP7702.set(this, void 0);
180
- this.signAbortCallbacks = new Map();
170
+ _TransactionController_publish.set(this, void 0);
171
+ _TransactionController_publishBatchHook.set(this, void 0);
172
+ _TransactionController_securityProviderRequest.set(this, void 0);
173
+ _TransactionController_sign.set(this, void 0);
174
+ _TransactionController_signAbortCallbacks.set(this, new Map());
175
+ _TransactionController_testGasFeeFlows.set(this, void 0);
181
176
  _TransactionController_trace.set(this, void 0);
182
177
  _TransactionController_transactionHistoryLimit.set(this, void 0);
183
- _TransactionController_isFirstTimeInteractionEnabled.set(this, void 0);
184
- _TransactionController_isSimulationEnabled.set(this, void 0);
185
- _TransactionController_testGasFeeFlows.set(this, void 0);
186
- _TransactionController_multichainTrackingHelper.set(this, void 0);
187
178
  _TransactionController_checkForPendingTransactionAndStartPolling.set(this, () => {
188
179
  __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").checkForPendingTransactionAndStartPolling();
189
180
  });
190
181
  this.messagingSystem = messenger;
191
- this.isTxParamsGasFeeUpdatesEnabled =
192
- isAutomaticGasFeeUpdateEnabled ?? ((_txMeta) => false);
193
- this.getNetworkState = getNetworkState;
194
- this.isSendFlowHistoryDisabled = disableSendFlowHistory ?? false;
195
- this.isHistoryDisabled = disableHistory ?? false;
196
- this.isSwapsDisabled = disableSwaps ?? false;
182
+ __classPrivateFieldSet(this, _TransactionController_afterAdd, hooks?.afterAdd ?? (() => Promise.resolve({})), "f");
183
+ __classPrivateFieldSet(this, _TransactionController_afterSign, hooks?.afterSign ?? (() => true), "f");
184
+ __classPrivateFieldSet(this, _TransactionController_beforeCheckPendingTransaction,
185
+ /* istanbul ignore next */
186
+ hooks?.beforeCheckPendingTransaction ?? (() => Promise.resolve(true)), "f");
187
+ __classPrivateFieldSet(this, _TransactionController_beforePublish, hooks?.beforePublish ?? (() => Promise.resolve(true)), "f");
188
+ __classPrivateFieldSet(this, _TransactionController_getAdditionalSignArguments, hooks?.getAdditionalSignArguments ?? (() => []), "f");
189
+ __classPrivateFieldSet(this, _TransactionController_getCurrentAccountEIP1559Compatibility, getCurrentAccountEIP1559Compatibility ?? (() => Promise.resolve(true)), "f");
190
+ __classPrivateFieldSet(this, _TransactionController_getCurrentNetworkEIP1559Compatibility, getCurrentNetworkEIP1559Compatibility, "f");
191
+ __classPrivateFieldSet(this, _TransactionController_getExternalPendingTransactions, getExternalPendingTransactions ?? (() => []), "f");
192
+ __classPrivateFieldSet(this, _TransactionController_getGasFeeEstimates, getGasFeeEstimates || (() => Promise.resolve({})), "f");
193
+ __classPrivateFieldSet(this, _TransactionController_getNetworkState, getNetworkState, "f");
194
+ __classPrivateFieldSet(this, _TransactionController_getPermittedAccounts, getPermittedAccounts, "f");
195
+ __classPrivateFieldSet(this, _TransactionController_getSavedGasFees, getSavedGasFees ?? ((_chainId) => undefined), "f");
196
+ __classPrivateFieldSet(this, _TransactionController_incomingTransactionOptions, incomingTransactions, "f");
197
+ __classPrivateFieldSet(this, _TransactionController_isAutomaticGasFeeUpdateEnabled, isAutomaticGasFeeUpdateEnabled ?? ((_txMeta) => false), "f");
197
198
  __classPrivateFieldSet(this, _TransactionController_isFirstTimeInteractionEnabled, isFirstTimeInteractionEnabled ?? (() => true), "f");
199
+ __classPrivateFieldSet(this, _TransactionController_isHistoryDisabled, disableHistory ?? false, "f");
200
+ __classPrivateFieldSet(this, _TransactionController_isSendFlowHistoryDisabled, disableSendFlowHistory ?? false, "f");
198
201
  __classPrivateFieldSet(this, _TransactionController_isSimulationEnabled, isSimulationEnabled ?? (() => true), "f");
199
- this.getSavedGasFees = getSavedGasFees ?? ((_chainId) => undefined);
200
- this.getCurrentAccountEIP1559Compatibility =
201
- getCurrentAccountEIP1559Compatibility ?? (() => Promise.resolve(true));
202
- this.getCurrentNetworkEIP1559Compatibility =
203
- getCurrentNetworkEIP1559Compatibility;
204
- this.getGasFeeEstimates =
205
- getGasFeeEstimates || (() => Promise.resolve({}));
206
- this.getPermittedAccounts = getPermittedAccounts;
207
- this.getExternalPendingTransactions =
208
- getExternalPendingTransactions ?? (() => []);
209
- this.securityProviderRequest = securityProviderRequest;
210
- __classPrivateFieldSet(this, _TransactionController_incomingTransactionOptions, incomingTransactions, "f");
202
+ __classPrivateFieldSet(this, _TransactionController_isSwapsDisabled, disableSwaps ?? false, "f");
211
203
  __classPrivateFieldSet(this, _TransactionController_pendingTransactionOptions, pendingTransactions, "f");
212
- __classPrivateFieldSet(this, _TransactionController_publishBatchHook, hooks?.publishBatch, "f");
213
204
  __classPrivateFieldSet(this, _TransactionController_publicKeyEIP7702, publicKeyEIP7702, "f");
214
- __classPrivateFieldSet(this, _TransactionController_transactionHistoryLimit, transactionHistoryLimit, "f");
215
- this.sign = sign;
205
+ __classPrivateFieldSet(this, _TransactionController_publish, hooks?.publish ?? (() => Promise.resolve({ transactionHash: undefined })), "f");
206
+ __classPrivateFieldSet(this, _TransactionController_publishBatchHook, hooks?.publishBatch, "f");
207
+ __classPrivateFieldSet(this, _TransactionController_securityProviderRequest, securityProviderRequest, "f");
208
+ __classPrivateFieldSet(this, _TransactionController_sign, sign, "f");
216
209
  __classPrivateFieldSet(this, _TransactionController_testGasFeeFlows, testGasFeeFlows === true, "f");
217
210
  __classPrivateFieldSet(this, _TransactionController_trace, trace ?? ((_request, fn) => fn?.()), "f");
218
- __classPrivateFieldSet(this, _TransactionController_afterAdd, hooks?.afterAdd ?? (() => Promise.resolve({})), "f");
219
- this.afterSign = hooks?.afterSign ?? (() => true);
220
- this.beforeCheckPendingTransaction =
221
- /* istanbul ignore next */
222
- hooks?.beforeCheckPendingTransaction ?? (() => Promise.resolve(true));
223
- this.beforePublish = hooks?.beforePublish ?? (() => Promise.resolve(true));
224
- this.getAdditionalSignArguments =
225
- hooks?.getAdditionalSignArguments ?? (() => []);
226
- this.publish =
227
- hooks?.publish ?? (() => Promise.resolve({ transactionHash: undefined }));
211
+ __classPrivateFieldSet(this, _TransactionController_transactionHistoryLimit, transactionHistoryLimit, "f");
228
212
  const findNetworkClientIdByChainId = (chainId) => {
229
213
  return this.messagingSystem.call(`NetworkController:findNetworkClientIdByChainId`, chainId);
230
214
  };
@@ -242,15 +226,15 @@ class TransactionController extends base_controller_1.BaseController {
242
226
  },
243
227
  }), "f");
244
228
  __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").initialize();
245
- this.gasFeeFlows = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getGasFeeFlows).call(this);
246
- this.layer1GasFeeFlows = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getLayer1GasFeeFlows).call(this);
229
+ __classPrivateFieldSet(this, _TransactionController_gasFeeFlows, __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getGasFeeFlows).call(this), "f");
230
+ __classPrivateFieldSet(this, _TransactionController_layer1GasFeeFlows, __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getLayer1GasFeeFlows).call(this), "f");
247
231
  const gasFeePoller = new GasFeePoller_1.GasFeePoller({
248
232
  findNetworkClientIdByChainId,
249
- gasFeeFlows: this.gasFeeFlows,
250
- getGasFeeControllerEstimates: this.getGasFeeEstimates,
233
+ gasFeeFlows: __classPrivateFieldGet(this, _TransactionController_gasFeeFlows, "f"),
234
+ getGasFeeControllerEstimates: __classPrivateFieldGet(this, _TransactionController_getGasFeeEstimates, "f"),
251
235
  getProvider: (networkClientId) => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getProvider).call(this, { networkClientId }),
252
236
  getTransactions: () => this.state.transactions,
253
- layer1GasFeeFlows: this.layer1GasFeeFlows,
237
+ layer1GasFeeFlows: __classPrivateFieldGet(this, _TransactionController_layer1GasFeeFlows, "f"),
254
238
  messenger: this.messagingSystem,
255
239
  onStateChange: (listener) => {
256
240
  this.messagingSystem.subscribe('TransactionController:stateChange', listener);
@@ -279,7 +263,7 @@ class TransactionController extends base_controller_1.BaseController {
279
263
  isEnabled: __classPrivateFieldGet(this, _TransactionController_incomingTransactionOptions, "f").isEnabled,
280
264
  queryEntireHistory: __classPrivateFieldGet(this, _TransactionController_incomingTransactionOptions, "f").queryEntireHistory,
281
265
  remoteTransactionSource: new AccountsApiRemoteTransactionSource_1.AccountsApiRemoteTransactionSource(),
282
- trimTransactions: this.trimTransactionsForState.bind(this),
266
+ trimTransactions: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_trimTransactionsForState).bind(this),
283
267
  updateCache,
284
268
  updateTransactions: __classPrivateFieldGet(this, _TransactionController_incomingTransactionOptions, "f").updateTransactions,
285
269
  }), "f");
@@ -294,7 +278,7 @@ class TransactionController extends base_controller_1.BaseController {
294
278
  },
295
279
  getTransactions: () => this.state.transactions,
296
280
  });
297
- this.onBootCleanup();
281
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_onBootCleanup).call(this);
298
282
  __classPrivateFieldGet(this, _TransactionController_checkForPendingTransactionAndStartPolling, "f").call(this);
299
283
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_registerActionHandlers).call(this);
300
284
  }
@@ -326,7 +310,7 @@ class TransactionController extends base_controller_1.BaseController {
326
310
  getChainId: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getChainId).bind(this),
327
311
  getEthQuery: (networkClientId) => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getEthQuery).call(this, { networkClientId }),
328
312
  getInternalAccounts: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getInternalAccounts).bind(this),
329
- getTransaction: (transactionId) => this.getTransactionOrThrow(transactionId),
313
+ getTransaction: (transactionId) => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransactionOrThrow).call(this, transactionId),
330
314
  messenger: this.messagingSystem,
331
315
  publishBatchHook: __classPrivateFieldGet(this, _TransactionController_publishBatchHook, "f"),
332
316
  publicKeyEIP7702: __classPrivateFieldGet(this, _TransactionController_publicKeyEIP7702, "f"),
@@ -387,7 +371,7 @@ class TransactionController extends base_controller_1.BaseController {
387
371
  });
388
372
  const permittedAddresses = origin === undefined
389
373
  ? undefined
390
- : await this.getPermittedAccounts?.(origin);
374
+ : await __classPrivateFieldGet(this, _TransactionController_getPermittedAccounts, "f")?.call(this, origin);
391
375
  const selectedAddress = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getSelectedAccount).call(this).address;
392
376
  const internalAccounts = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getInternalAccounts).call(this);
393
377
  await (0, validation_1.validateTransactionOrigin)({
@@ -401,7 +385,7 @@ class TransactionController extends base_controller_1.BaseController {
401
385
  type,
402
386
  });
403
387
  const delegationAddressPromise = (0, eip7702_1.getDelegationAddress)(txParams.from, ethQuery).catch(() => undefined);
404
- const isEIP1559Compatible = await this.getEIP1559Compatibility(networkClientId);
388
+ const isEIP1559Compatible = await __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getEIP1559Compatibility).call(this, networkClientId);
405
389
  (0, validation_1.validateTxParams)(txParams, isEIP1559Compatible, chainId);
406
390
  if (!txParams.type) {
407
391
  // Determine transaction type based on transaction parameters and network compatibility
@@ -412,10 +396,10 @@ class TransactionController extends base_controller_1.BaseController {
412
396
  if (isDuplicateBatchId && origin && origin !== controller_utils_1.ORIGIN_METAMASK) {
413
397
  throw new rpc_errors_1.JsonRpcError(validation_1.ErrorCode.DuplicateBundleId, 'Batch ID already exists');
414
398
  }
415
- const dappSuggestedGasFees = this.generateDappSuggestedGasFees(txParams, origin);
399
+ const dappSuggestedGasFees = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_generateDappSuggestedGasFees).call(this, txParams, origin);
416
400
  const transactionType = type ?? (await (0, transaction_type_1.determineTransactionType)(txParams, ethQuery)).type;
417
401
  const delegationAddress = await delegationAddressPromise;
418
- const existingTransactionMeta = this.getTransactionWithActionId(actionId);
402
+ const existingTransactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransactionWithActionId).call(this, actionId);
419
403
  // If a request to add a transaction with the same actionId is submitted again, a new transaction will not be created for it.
420
404
  let addedTransactionMeta = existingTransactionMeta
421
405
  ? (0, lodash_1.cloneDeep)(existingTransactionMeta)
@@ -449,30 +433,30 @@ class TransactionController extends base_controller_1.BaseController {
449
433
  addedTransactionMeta.txParamsOriginal = (0, lodash_1.cloneDeep)(addedTransactionMeta.txParams);
450
434
  updateTransaction(addedTransactionMeta);
451
435
  }
452
- await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Estimate Gas Properties', parentContext: traceContext }, (context) => this.updateGasProperties(addedTransactionMeta, {
436
+ await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Estimate Gas Properties', parentContext: traceContext }, (context) => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateGasProperties).call(this, addedTransactionMeta, {
453
437
  traceContext: context,
454
438
  }));
455
439
  // Checks if a transaction already exists with a given actionId
456
440
  if (!existingTransactionMeta) {
457
441
  // Set security provider response
458
- if (method && this.securityProviderRequest) {
459
- const securityProviderResponse = await this.securityProviderRequest(addedTransactionMeta, method);
442
+ if (method && __classPrivateFieldGet(this, _TransactionController_securityProviderRequest, "f")) {
443
+ const securityProviderResponse = await __classPrivateFieldGet(this, _TransactionController_securityProviderRequest, "f").call(this, addedTransactionMeta, method);
460
444
  addedTransactionMeta.securityProviderResponse =
461
445
  securityProviderResponse;
462
446
  }
463
- if (!this.isSendFlowHistoryDisabled) {
447
+ if (!__classPrivateFieldGet(this, _TransactionController_isSendFlowHistoryDisabled, "f")) {
464
448
  addedTransactionMeta.sendFlowHistory = sendFlowHistory ?? [];
465
449
  }
466
450
  // Initial history push
467
- if (!this.isHistoryDisabled) {
451
+ if (!__classPrivateFieldGet(this, _TransactionController_isHistoryDisabled, "f")) {
468
452
  addedTransactionMeta = (0, history_1.addInitialHistorySnapshot)(addedTransactionMeta);
469
453
  }
470
454
  addedTransactionMeta = (0, swaps_1.updateSwapsTransaction)(addedTransactionMeta, transactionType, swaps, {
471
- isSwapsDisabled: this.isSwapsDisabled,
455
+ isSwapsDisabled: __classPrivateFieldGet(this, _TransactionController_isSwapsDisabled, "f"),
472
456
  cancelTransaction: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_rejectTransaction).bind(this),
473
457
  messenger: this.messagingSystem,
474
458
  });
475
- this.addMetadata(addedTransactionMeta);
459
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_addMetadata).call(this, addedTransactionMeta);
476
460
  if (requireApproval !== false) {
477
461
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateSimulationData).call(this, addedTransactionMeta, {
478
462
  traceContext,
@@ -492,7 +476,7 @@ class TransactionController extends base_controller_1.BaseController {
492
476
  this.messagingSystem.publish(`${controllerName}:unapprovedTransactionAdded`, addedTransactionMeta);
493
477
  }
494
478
  return {
495
- result: this.processApproval(addedTransactionMeta, {
479
+ result: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_processApproval).call(this, addedTransactionMeta, {
496
480
  actionId,
497
481
  isExisting: Boolean(existingTransactionMeta),
498
482
  publishHook,
@@ -631,7 +615,7 @@ class TransactionController extends base_controller_1.BaseController {
631
615
  if (!securityAlertResponse) {
632
616
  throw new Error('updateSecurityAlertResponse: securityAlertResponse should not be null');
633
617
  }
634
- const transactionMeta = this.getTransaction(transactionId);
618
+ const transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionId);
635
619
  if (!transactionMeta) {
636
620
  throw new Error(`Cannot update security alert response as no transaction metadata found`);
637
621
  }
@@ -664,7 +648,7 @@ class TransactionController extends base_controller_1.BaseController {
664
648
  return !isMatchingAddress;
665
649
  });
666
650
  this.update((state) => {
667
- state.transactions = this.trimTransactionsForState(newTransactions);
651
+ state.transactions = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_trimTransactionsForState).call(this, newTransactions);
668
652
  });
669
653
  }
670
654
  /**
@@ -676,7 +660,7 @@ class TransactionController extends base_controller_1.BaseController {
676
660
  */
677
661
  async confirmExternalTransaction(transactionMeta, transactionReceipt, baseFeePerGas) {
678
662
  // Run validation and add external transaction to state.
679
- const newTransactionMeta = this.addExternalTransaction(transactionMeta);
663
+ const newTransactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_addExternalTransaction).call(this, transactionMeta);
680
664
  try {
681
665
  const transactionId = newTransactionMeta.id;
682
666
  // Make sure status is confirmed and define gasUsed as in receipt.
@@ -692,9 +676,9 @@ class TransactionController extends base_controller_1.BaseController {
692
676
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_markNonceDuplicatesDropped).call(this, transactionId);
693
677
  // Update external provided transaction with updated gas values and confirmed status.
694
678
  this.updateTransaction(updatedTransactionMeta, `${controllerName}:confirmExternalTransaction - Add external transaction`);
695
- this.onTransactionStatusChange(updatedTransactionMeta);
679
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_onTransactionStatusChange).call(this, updatedTransactionMeta);
696
680
  // Intentional given potential duration of process.
697
- this.updatePostBalance(updatedTransactionMeta).catch((error) => {
681
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updatePostBalance).call(this, updatedTransactionMeta).catch((error) => {
698
682
  /* istanbul ignore next */
699
683
  (0, logger_1.projectLogger)('Error while updating post balance', error);
700
684
  throw error;
@@ -714,10 +698,10 @@ class TransactionController extends base_controller_1.BaseController {
714
698
  * @returns The updated transactionMeta.
715
699
  */
716
700
  updateTransactionSendFlowHistory(transactionID, currentSendFlowHistoryLength, sendFlowHistoryToAdd) {
717
- if (this.isSendFlowHistoryDisabled) {
701
+ if (__classPrivateFieldGet(this, _TransactionController_isSendFlowHistoryDisabled, "f")) {
718
702
  throw new Error('Send flow history is disabled for the current transaction controller');
719
703
  }
720
- const transactionMeta = this.getTransaction(transactionID);
704
+ const transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionID);
721
705
  if (!transactionMeta) {
722
706
  throw new Error(`Cannot update send flow history as no transaction metadata found`);
723
707
  }
@@ -730,7 +714,7 @@ class TransactionController extends base_controller_1.BaseController {
730
714
  };
731
715
  this.updateTransaction(updatedTransactionMeta, `${controllerName}:updateTransactionSendFlowHistory - sendFlowHistory updated`);
732
716
  }
733
- return this.getTransaction(transactionID);
717
+ return __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionID);
734
718
  }
735
719
  /**
736
720
  * Update the gas values of a transaction.
@@ -751,7 +735,7 @@ class TransactionController extends base_controller_1.BaseController {
751
735
  * @returns The updated transactionMeta.
752
736
  */
753
737
  updateTransactionGasFees(transactionId, { defaultGasEstimates, estimateUsed, estimateSuggested, gas, gasLimit, gasPrice, maxPriorityFeePerGas, maxFeePerGas, originalGasEstimate, userEditedGasLimit, userFeeLevel, }) {
754
- const transactionMeta = this.getTransaction(transactionId);
738
+ const transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionId);
755
739
  if (!transactionMeta) {
756
740
  throw new Error(`Cannot update transaction as no transaction metadata found`);
757
741
  }
@@ -779,7 +763,7 @@ class TransactionController extends base_controller_1.BaseController {
779
763
  // merge updated gas values with existing transaction meta
780
764
  const updatedMeta = (0, lodash_1.merge)({}, transactionMeta, transactionGasFees);
781
765
  this.updateTransaction(updatedMeta, `${controllerName}:updateTransactionGasFees - gas values updated`);
782
- return this.getTransaction(transactionId);
766
+ return __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionId);
783
767
  }
784
768
  /**
785
769
  * Update the previous gas values of a transaction.
@@ -792,7 +776,7 @@ class TransactionController extends base_controller_1.BaseController {
792
776
  * @returns The updated transactionMeta.
793
777
  */
794
778
  updatePreviousGasParams(transactionId, { gasLimit, maxFeePerGas, maxPriorityFeePerGas, }) {
795
- const transactionMeta = this.getTransaction(transactionId);
779
+ const transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionId);
796
780
  if (!transactionMeta) {
797
781
  throw new Error(`Cannot update transaction as no transaction metadata found`);
798
782
  }
@@ -811,7 +795,7 @@ class TransactionController extends base_controller_1.BaseController {
811
795
  // merge updated previous gas values with existing transaction meta
812
796
  const updatedMeta = (0, lodash_1.merge)({}, transactionMeta, transactionPreviousGas);
813
797
  this.updateTransaction(updatedMeta, `${controllerName}:updatePreviousGasParams - Previous gas values updated`);
814
- return this.getTransaction(transactionId);
798
+ return __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionId);
815
799
  }
816
800
  async getNonceLock(address, networkClientId) {
817
801
  return __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").getNonceLock(address, networkClientId);
@@ -832,7 +816,7 @@ class TransactionController extends base_controller_1.BaseController {
832
816
  * @returns The updated transaction metadata.
833
817
  */
834
818
  async updateEditableParams(txId, { data, from, gas, gasPrice, maxFeePerGas, maxPriorityFeePerGas, to, value, }) {
835
- const transactionMeta = this.getTransaction(txId);
819
+ const transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, txId);
836
820
  if (!transactionMeta) {
837
821
  throw new Error(`Cannot update editable params as no transaction metadata found`);
838
822
  }
@@ -857,13 +841,13 @@ class TransactionController extends base_controller_1.BaseController {
857
841
  const { type } = await (0, transaction_type_1.determineTransactionType)(updatedTransaction.txParams, ethQuery);
858
842
  updatedTransaction.type = type;
859
843
  await (0, layer1_gas_fee_flow_1.updateTransactionLayer1GasFee)({
860
- layer1GasFeeFlows: this.layer1GasFeeFlows,
844
+ layer1GasFeeFlows: __classPrivateFieldGet(this, _TransactionController_layer1GasFeeFlows, "f"),
861
845
  messenger: this.messagingSystem,
862
846
  provider,
863
847
  transactionMeta: updatedTransaction,
864
848
  });
865
849
  this.updateTransaction(updatedTransaction, `Update Editable Params for ${txId}`);
866
- return this.getTransaction(txId);
850
+ return __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, txId);
867
851
  }
868
852
  /**
869
853
  * Update the isActive state of a transaction.
@@ -872,7 +856,7 @@ class TransactionController extends base_controller_1.BaseController {
872
856
  * @param isActive - The active state.
873
857
  */
874
858
  setTransactionActive(transactionId, isActive) {
875
- const transactionMeta = this.getTransaction(transactionId);
859
+ const transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionId);
876
860
  if (!transactionMeta) {
877
861
  throw new Error(`Transaction with id ${transactionId} not found`);
878
862
  }
@@ -906,10 +890,10 @@ class TransactionController extends base_controller_1.BaseController {
906
890
  const networkClientId = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getNetworkClientId).call(this, { chainId });
907
891
  const initialTxAsEthTx = (0, prepare_1.prepareTransaction)(chainId, initialTx);
908
892
  const initialTxAsSerializedHex = (0, prepare_1.serializeTransaction)(initialTxAsEthTx);
909
- if (this.approvingTransactionIds.has(initialTxAsSerializedHex)) {
893
+ if (__classPrivateFieldGet(this, _TransactionController_approvingTransactionIds, "f").has(initialTxAsSerializedHex)) {
910
894
  return '';
911
895
  }
912
- this.approvingTransactionIds.add(initialTxAsSerializedHex);
896
+ __classPrivateFieldGet(this, _TransactionController_approvingTransactionIds, "f").add(initialTxAsSerializedHex);
913
897
  let rawTransactions, nonceLock;
914
898
  try {
915
899
  // TODO: we should add a check to verify that all transactions have the same from address
@@ -926,7 +910,7 @@ class TransactionController extends base_controller_1.BaseController {
926
910
  }
927
911
  rawTransactions = await Promise.all(listOfTxParams.map((txParams) => {
928
912
  txParams.nonce = nonce;
929
- return this.signExternalTransaction(txParams.chainId, txParams);
913
+ return __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_signExternalTransaction).call(this, txParams.chainId, txParams);
930
914
  }));
931
915
  }
932
916
  catch (err) {
@@ -937,7 +921,7 @@ class TransactionController extends base_controller_1.BaseController {
937
921
  }
938
922
  finally {
939
923
  nonceLock?.releaseLock();
940
- this.approvingTransactionIds.delete(initialTxAsSerializedHex);
924
+ __classPrivateFieldGet(this, _TransactionController_approvingTransactionIds, "f").delete(initialTxAsSerializedHex);
941
925
  }
942
926
  return rawTransactions;
943
927
  }
@@ -950,7 +934,7 @@ class TransactionController extends base_controller_1.BaseController {
950
934
  */
951
935
  updateCustodialTransaction(request) {
952
936
  const { transactionId, errorMessage, hash, status, gasLimit, gasPrice, maxFeePerGas, maxPriorityFeePerGas, nonce, type, } = request;
953
- const transactionMeta = this.getTransaction(transactionId);
937
+ const transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionId);
954
938
  if (!transactionMeta) {
955
939
  throw new Error(`Cannot update custodial transaction as no transaction metadata found`);
956
940
  }
@@ -1083,9 +1067,9 @@ class TransactionController extends base_controller_1.BaseController {
1083
1067
  networkClientId,
1084
1068
  };
1085
1069
  // Guaranteed as the default gas fee flow matches all transactions.
1086
- const gasFeeFlow = (0, gas_flow_1.getGasFeeFlow)(transactionMeta, this.gasFeeFlows, this.messagingSystem);
1070
+ const gasFeeFlow = (0, gas_flow_1.getGasFeeFlow)(transactionMeta, __classPrivateFieldGet(this, _TransactionController_gasFeeFlows, "f"), this.messagingSystem);
1087
1071
  const ethQuery = new eth_query_1.default(provider);
1088
- const gasFeeControllerData = await this.getGasFeeEstimates({
1072
+ const gasFeeControllerData = await __classPrivateFieldGet(this, _TransactionController_getGasFeeEstimates, "f").call(this, {
1089
1073
  networkClientId,
1090
1074
  });
1091
1075
  return gasFeeFlow.getGasFees({
@@ -1110,7 +1094,7 @@ class TransactionController extends base_controller_1.BaseController {
1110
1094
  networkClientId,
1111
1095
  });
1112
1096
  return await (0, layer1_gas_fee_flow_1.getTransactionLayer1GasFee)({
1113
- layer1GasFeeFlows: this.layer1GasFeeFlows,
1097
+ layer1GasFeeFlows: __classPrivateFieldGet(this, _TransactionController_layer1GasFeeFlows, "f"),
1114
1098
  messenger: this.messagingSystem,
1115
1099
  provider,
1116
1100
  transactionMeta: {
@@ -1119,33 +1103,13 @@ class TransactionController extends base_controller_1.BaseController {
1119
1103
  },
1120
1104
  });
1121
1105
  }
1122
- async signExternalTransaction(chainId, transactionParams) {
1123
- if (!this.sign) {
1124
- throw new Error('No sign method defined.');
1125
- }
1126
- const normalizedTransactionParams = (0, utils_2.normalizeTransactionParams)(transactionParams);
1127
- const type = (0, utils_2.isEIP1559Transaction)(normalizedTransactionParams)
1128
- ? types_1.TransactionEnvelopeType.feeMarket
1129
- : types_1.TransactionEnvelopeType.legacy;
1130
- const updatedTransactionParams = {
1131
- ...normalizedTransactionParams,
1132
- type,
1133
- gasLimit: normalizedTransactionParams.gas,
1134
- chainId,
1135
- };
1136
- const { from } = updatedTransactionParams;
1137
- const unsignedTransaction = (0, prepare_1.prepareTransaction)(chainId, updatedTransactionParams);
1138
- const signedTransaction = await this.sign(unsignedTransaction, from);
1139
- const rawTransaction = (0, prepare_1.serializeTransaction)(signedTransaction);
1140
- return rawTransaction;
1141
- }
1142
1106
  /**
1143
1107
  * Removes unapproved transactions from state.
1144
1108
  */
1145
1109
  clearUnapprovedTransactions() {
1146
1110
  const transactions = this.state.transactions.filter(({ status }) => status !== types_1.TransactionStatus.unapproved);
1147
1111
  this.update((state) => {
1148
- state.transactions = this.trimTransactionsForState(transactions);
1112
+ state.transactions = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_trimTransactionsForState).call(this, transactions);
1149
1113
  });
1150
1114
  }
1151
1115
  /**
@@ -1155,16 +1119,16 @@ class TransactionController extends base_controller_1.BaseController {
1155
1119
  * @param transactionId - The ID of the transaction to stop signing.
1156
1120
  */
1157
1121
  abortTransactionSigning(transactionId) {
1158
- const transactionMeta = this.getTransaction(transactionId);
1122
+ const transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionId);
1159
1123
  if (!transactionMeta) {
1160
1124
  throw new Error(`Cannot abort signing as no transaction metadata found`);
1161
1125
  }
1162
- const abortCallback = this.signAbortCallbacks.get(transactionId);
1126
+ const abortCallback = __classPrivateFieldGet(this, _TransactionController_signAbortCallbacks, "f").get(transactionId);
1163
1127
  if (!abortCallback) {
1164
1128
  throw new Error(`Cannot abort signing as transaction is not waiting for signing`);
1165
1129
  }
1166
1130
  abortCallback();
1167
- this.signAbortCallbacks.delete(transactionId);
1131
+ __classPrivateFieldGet(this, _TransactionController_signAbortCallbacks, "f").delete(transactionId);
1168
1132
  }
1169
1133
  /**
1170
1134
  * Update the transaction data of a single nested transaction within an atomic batch transaction.
@@ -1246,537 +1210,11 @@ class TransactionController extends base_controller_1.BaseController {
1246
1210
  transactionMeta.selectedGasFeeToken = contractAddress;
1247
1211
  });
1248
1212
  }
1249
- addMetadata(transactionMeta) {
1250
- (0, validation_1.validateTxParams)(transactionMeta.txParams);
1251
- this.update((state) => {
1252
- state.transactions = this.trimTransactionsForState([
1253
- ...state.transactions,
1254
- transactionMeta,
1255
- ]);
1256
- });
1257
- }
1258
- async updateGasProperties(transactionMeta, { traceContext } = {}) {
1259
- const isEIP1559Compatible = transactionMeta.txParams.type !== types_1.TransactionEnvelopeType.legacy &&
1260
- (await this.getEIP1559Compatibility(transactionMeta.networkClientId));
1261
- const { networkClientId } = transactionMeta;
1262
- const ethQuery = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getEthQuery).call(this, { networkClientId });
1263
- const provider = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getProvider).call(this, { networkClientId });
1264
- await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Update Gas', parentContext: traceContext }, async () => {
1265
- await __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateGasEstimate).call(this, transactionMeta);
1266
- });
1267
- await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Update Gas Fees', parentContext: traceContext }, async () => await (0, gas_fees_1.updateGasFees)({
1268
- eip1559: isEIP1559Compatible,
1269
- ethQuery,
1270
- gasFeeFlows: this.gasFeeFlows,
1271
- getGasFeeEstimates: this.getGasFeeEstimates,
1272
- getSavedGasFees: this.getSavedGasFees.bind(this),
1273
- messenger: this.messagingSystem,
1274
- txMeta: transactionMeta,
1275
- }));
1276
- await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Update Layer 1 Gas Fees', parentContext: traceContext }, async () => await (0, layer1_gas_fee_flow_1.updateTransactionLayer1GasFee)({
1277
- layer1GasFeeFlows: this.layer1GasFeeFlows,
1278
- messenger: this.messagingSystem,
1279
- provider,
1280
- transactionMeta,
1281
- }));
1282
- }
1283
- onBootCleanup() {
1284
- this.clearUnapprovedTransactions();
1285
- this.failIncompleteTransactions();
1286
- }
1287
- failIncompleteTransactions() {
1288
- const incompleteTransactions = this.state.transactions.filter((transaction) => [types_1.TransactionStatus.approved, types_1.TransactionStatus.signed].includes(transaction.status));
1289
- for (const transactionMeta of incompleteTransactions) {
1290
- this.failTransaction(transactionMeta, new Error('Transaction incomplete at startup'));
1291
- }
1292
- }
1293
- async processApproval(transactionMeta, { actionId, isExisting = false, publishHook, requireApproval, shouldShowRequest = true, traceContext, }) {
1294
- const transactionId = transactionMeta.id;
1295
- let resultCallbacks;
1296
- const { meta, isCompleted } = this.isTransactionCompleted(transactionId);
1297
- const finishedPromise = isCompleted
1298
- ? Promise.resolve(meta)
1299
- : this.waitForTransactionFinished(transactionId);
1300
- if (meta && !isExisting && !isCompleted) {
1301
- try {
1302
- if (requireApproval !== false) {
1303
- const acceptResult = await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Await Approval', parentContext: traceContext }, (context) => this.requestApproval(transactionMeta, {
1304
- shouldShowRequest,
1305
- traceContext: context,
1306
- }));
1307
- resultCallbacks = acceptResult.resultCallbacks;
1308
- const approvalValue = acceptResult.value;
1309
- const updatedTransaction = approvalValue?.txMeta;
1310
- if (updatedTransaction) {
1311
- (0, logger_1.projectLogger)('Updating transaction with approval data', {
1312
- customNonce: updatedTransaction.customNonceValue,
1313
- params: updatedTransaction.txParams,
1314
- });
1315
- this.updateTransaction(updatedTransaction, 'TransactionController#processApproval - Updated with approval data');
1316
- }
1317
- }
1318
- const { isCompleted: isTxCompleted } = this.isTransactionCompleted(transactionId);
1319
- if (!isTxCompleted) {
1320
- const approvalResult = await this.approveTransaction(transactionId, traceContext, publishHook);
1321
- if (approvalResult === ApprovalState.SkippedViaBeforePublishHook &&
1322
- resultCallbacks) {
1323
- resultCallbacks.success();
1324
- }
1325
- const updatedTransactionMeta = this.getTransaction(transactionId);
1326
- this.messagingSystem.publish(`${controllerName}:transactionApproved`, {
1327
- transactionMeta: updatedTransactionMeta,
1328
- actionId,
1329
- });
1330
- }
1331
- }
1332
- catch (rawError) {
1333
- const error = rawError;
1334
- const { isCompleted: isTxCompleted } = this.isTransactionCompleted(transactionId);
1335
- if (!isTxCompleted) {
1336
- if (__classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_isRejectError).call(this, error)) {
1337
- __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_rejectTransactionAndThrow).call(this, transactionId, actionId, error);
1338
- }
1339
- else {
1340
- this.failTransaction(meta, error, actionId);
1341
- }
1342
- }
1343
- }
1344
- }
1345
- const finalMeta = await finishedPromise;
1346
- switch (finalMeta?.status) {
1347
- case types_1.TransactionStatus.failed:
1348
- const error = finalMeta.error;
1349
- resultCallbacks?.error(error);
1350
- throw rpc_errors_1.rpcErrors.internal(error.message);
1351
- case types_1.TransactionStatus.submitted:
1352
- resultCallbacks?.success();
1353
- return finalMeta.hash;
1354
- default:
1355
- const internalError = rpc_errors_1.rpcErrors.internal(`MetaMask Tx Signature: Unknown problem: ${JSON.stringify(finalMeta || transactionId)}`);
1356
- resultCallbacks?.error(internalError);
1357
- throw internalError;
1358
- }
1359
- }
1360
- /**
1361
- * Approves a transaction and updates it's status in state. If this is not a
1362
- * retry transaction, a nonce will be generated. The transaction is signed
1363
- * using the sign configuration property, then published to the blockchain.
1364
- * A `<tx.id>:finished` hub event is fired after success or failure.
1365
- *
1366
- * @param transactionId - The ID of the transaction to approve.
1367
- * @param traceContext - The parent context for any new traces.
1368
- * @param publishHookOverride - Custom logic to publish the transaction.
1369
- * @returns The state of the approval.
1370
- */
1371
- async approveTransaction(transactionId, traceContext, publishHookOverride) {
1372
- let clearApprovingTransactionId;
1373
- let clearNonceLock;
1374
- let transactionMeta = this.getTransactionOrThrow(transactionId);
1375
- (0, logger_1.projectLogger)('Approving transaction', transactionMeta);
1376
- try {
1377
- if (!this.sign) {
1378
- this.failTransaction(transactionMeta, new Error('No sign method defined.'));
1379
- return ApprovalState.NotApproved;
1380
- }
1381
- else if (!transactionMeta.chainId) {
1382
- this.failTransaction(transactionMeta, new Error('No chainId defined.'));
1383
- return ApprovalState.NotApproved;
1384
- }
1385
- if (this.approvingTransactionIds.has(transactionId)) {
1386
- (0, logger_1.projectLogger)('Skipping approval as signing in progress', transactionId);
1387
- return ApprovalState.NotApproved;
1388
- }
1389
- this.approvingTransactionIds.add(transactionId);
1390
- clearApprovingTransactionId = () => this.approvingTransactionIds.delete(transactionId);
1391
- const [nonce, releaseNonce] = await (0, nonce_1.getNextNonce)(transactionMeta, (address) => __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").getNonceLock(address, transactionMeta.networkClientId));
1392
- clearNonceLock = releaseNonce;
1393
- transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
1394
- transactionId,
1395
- note: 'TransactionController#approveTransaction - Transaction approved',
1396
- }, (draftTxMeta) => {
1397
- const { chainId, txParams } = draftTxMeta;
1398
- const { gas, type } = txParams;
1399
- draftTxMeta.status = types_1.TransactionStatus.approved;
1400
- draftTxMeta.txParams.chainId = chainId;
1401
- draftTxMeta.txParams.gasLimit = gas;
1402
- draftTxMeta.txParams.nonce = nonce;
1403
- if (!type && (0, utils_2.isEIP1559Transaction)(txParams)) {
1404
- draftTxMeta.txParams.type = types_1.TransactionEnvelopeType.feeMarket;
1405
- }
1406
- });
1407
- this.onTransactionStatusChange(transactionMeta);
1408
- const rawTx = await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Sign', parentContext: traceContext }, () => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_signTransaction).call(this, transactionMeta));
1409
- if (!(await this.beforePublish(transactionMeta))) {
1410
- (0, logger_1.projectLogger)('Skipping publishing transaction based on hook');
1411
- this.messagingSystem.publish(`${controllerName}:transactionPublishingSkipped`, transactionMeta);
1412
- return ApprovalState.SkippedViaBeforePublishHook;
1413
- }
1414
- if (!rawTx && !transactionMeta.isExternalSign) {
1415
- return ApprovalState.NotApproved;
1416
- }
1417
- const { networkClientId } = transactionMeta;
1418
- const ethQuery = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getEthQuery).call(this, { networkClientId });
1419
- let preTxBalance;
1420
- const shouldUpdatePreTxBalance = transactionMeta.type === types_1.TransactionType.swap;
1421
- if (shouldUpdatePreTxBalance) {
1422
- (0, logger_1.projectLogger)('Determining pre-transaction balance');
1423
- preTxBalance = await (0, controller_utils_1.query)(ethQuery, 'getBalance', [
1424
- transactionMeta.txParams.from,
1425
- ]);
1426
- }
1427
- (0, logger_1.projectLogger)('Publishing transaction', transactionMeta.txParams);
1428
- let hash;
1429
- clearNonceLock?.();
1430
- clearNonceLock = undefined;
1431
- if (transactionMeta.batchTransactions?.length) {
1432
- (0, logger_1.projectLogger)('Found batch transactions', transactionMeta.batchTransactions);
1433
- const extraTransactionsPublishHook = new ExtraTransactionsPublishHook_1.ExtraTransactionsPublishHook({
1434
- addTransactionBatch: this.addTransactionBatch.bind(this),
1435
- transactions: transactionMeta.batchTransactions,
1436
- });
1437
- publishHookOverride = extraTransactionsPublishHook.getHook();
1438
- }
1439
- await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Publish', parentContext: traceContext }, async () => {
1440
- const publishHook = publishHookOverride ?? this.publish;
1441
- ({ transactionHash: hash } = await publishHook(transactionMeta, rawTx ?? '0x'));
1442
- if (hash === undefined) {
1443
- hash = await this.publishTransaction(ethQuery, {
1444
- ...transactionMeta,
1445
- rawTx,
1446
- });
1447
- }
1448
- });
1449
- (0, logger_1.projectLogger)('Publish successful', hash);
1450
- transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
1451
- transactionId,
1452
- note: 'TransactionController#approveTransaction - Transaction submitted',
1453
- }, (draftTxMeta) => {
1454
- draftTxMeta.hash = hash;
1455
- draftTxMeta.status = types_1.TransactionStatus.submitted;
1456
- draftTxMeta.submittedTime = new Date().getTime();
1457
- if (shouldUpdatePreTxBalance) {
1458
- draftTxMeta.preTxBalance = preTxBalance;
1459
- (0, logger_1.projectLogger)('Updated pre-transaction balance', preTxBalance);
1460
- }
1461
- });
1462
- this.messagingSystem.publish(`${controllerName}:transactionSubmitted`, {
1463
- transactionMeta,
1464
- });
1465
- this.messagingSystem.publish(`${controllerName}:transactionFinished`, transactionMeta);
1466
- __classPrivateFieldGet(this, _TransactionController_internalEvents, "f").emit(`${transactionId}:finished`, transactionMeta);
1467
- this.onTransactionStatusChange(transactionMeta);
1468
- return ApprovalState.Approved;
1469
- // TODO: Replace `any` with type
1470
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
1471
- }
1472
- catch (error) {
1473
- this.failTransaction(transactionMeta, error);
1474
- return ApprovalState.NotApproved;
1475
- }
1476
- finally {
1477
- clearApprovingTransactionId?.();
1478
- clearNonceLock?.();
1479
- }
1480
- }
1481
- async publishTransaction(ethQuery, transactionMeta, { skipSubmitHistory } = {}) {
1482
- const transactionHash = await (0, controller_utils_1.query)(ethQuery, 'sendRawTransaction', [
1483
- transactionMeta.rawTx,
1484
- ]);
1485
- if (skipSubmitHistory !== true) {
1486
- __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateSubmitHistory).call(this, transactionMeta, transactionHash);
1487
- }
1488
- return transactionHash;
1489
- }
1490
- /**
1491
- * Trim the amount of transactions that are set on the state. Checks
1492
- * if the length of the tx history is longer then desired persistence
1493
- * limit and then if it is removes the oldest confirmed or rejected tx.
1494
- * Pending or unapproved transactions will not be removed by this
1495
- * operation. For safety of presenting a fully functional transaction UI
1496
- * representation, this function will not break apart transactions with the
1497
- * same nonce, created on the same day, per network. Not accounting for
1498
- * transactions of the same nonce, same day and network combo can result in
1499
- * confusing or broken experiences in the UI.
1500
- *
1501
- * @param transactions - The transactions to be applied to the state.
1502
- * @returns The trimmed list of transactions.
1503
- */
1504
- trimTransactionsForState(transactions) {
1505
- const nonceNetworkSet = new Set();
1506
- const txsToKeep = [...transactions]
1507
- .sort((a, b) => (a.time > b.time ? -1 : 1)) // Descending time order
1508
- .filter((tx) => {
1509
- const { chainId, status, txParams, time } = tx;
1510
- if (txParams) {
1511
- const key = `${String(txParams.nonce)}-${(0, controller_utils_1.convertHexToDecimal)(chainId)}-${new Date(time).toDateString()}`;
1512
- if (nonceNetworkSet.has(key)) {
1513
- return true;
1514
- }
1515
- else if (nonceNetworkSet.size < __classPrivateFieldGet(this, _TransactionController_transactionHistoryLimit, "f") ||
1516
- !this.isFinalState(status)) {
1517
- nonceNetworkSet.add(key);
1518
- return true;
1519
- }
1520
- }
1521
- return false;
1522
- });
1523
- txsToKeep.reverse(); // Ascending time order
1524
- return txsToKeep;
1525
- }
1526
- /**
1527
- * Determines if the transaction is in a final state.
1528
- *
1529
- * @param status - The transaction status.
1530
- * @returns Whether the transaction is in a final state.
1531
- */
1532
- isFinalState(status) {
1533
- return (status === types_1.TransactionStatus.rejected ||
1534
- status === types_1.TransactionStatus.confirmed ||
1535
- status === types_1.TransactionStatus.failed);
1536
- }
1537
- /**
1538
- * Whether the transaction has at least completed all local processing.
1539
- *
1540
- * @param status - The transaction status.
1541
- * @returns Whether the transaction is in a final state.
1542
- */
1543
- isLocalFinalState(status) {
1544
- return [
1545
- types_1.TransactionStatus.confirmed,
1546
- types_1.TransactionStatus.failed,
1547
- types_1.TransactionStatus.rejected,
1548
- types_1.TransactionStatus.submitted,
1549
- ].includes(status);
1550
- }
1551
- async requestApproval(txMeta, { shouldShowRequest, traceContext, }) {
1552
- const id = this.getApprovalId(txMeta);
1553
- const { origin } = txMeta;
1554
- const type = controller_utils_1.ApprovalType.Transaction;
1555
- const requestData = { txId: txMeta.id };
1556
- await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, {
1557
- name: 'Notification Display',
1558
- id,
1559
- parentContext: traceContext,
1560
- });
1561
- return (await this.messagingSystem.call('ApprovalController:addRequest', {
1562
- id,
1563
- origin: origin || controller_utils_1.ORIGIN_METAMASK,
1564
- type,
1565
- requestData,
1566
- expectsResult: true,
1567
- }, shouldShowRequest));
1568
- }
1569
- getTransaction(transactionId) {
1570
- const { transactions } = this.state;
1571
- return transactions.find(({ id }) => id === transactionId);
1572
- }
1573
- getTransactionOrThrow(transactionId, errorMessagePrefix = 'TransactionController') {
1574
- const txMeta = this.getTransaction(transactionId);
1575
- if (!txMeta) {
1576
- throw new Error(`${errorMessagePrefix}: No transaction found with id ${transactionId}`);
1577
- }
1578
- return txMeta;
1579
- }
1580
- getApprovalId(txMeta) {
1581
- return String(txMeta.id);
1582
- }
1583
- isTransactionCompleted(transactionId) {
1584
- const transaction = this.getTransaction(transactionId);
1585
- if (!transaction) {
1586
- return { meta: undefined, isCompleted: false };
1587
- }
1588
- const isCompleted = this.isLocalFinalState(transaction.status);
1589
- return { meta: transaction, isCompleted };
1590
- }
1591
- onIncomingTransactions(transactions) {
1592
- if (!transactions.length) {
1593
- return;
1594
- }
1595
- const finalTransactions = transactions.map((tx) => {
1596
- const { chainId } = tx;
1597
- const networkClientId = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getNetworkClientId).call(this, { chainId });
1598
- return {
1599
- ...tx,
1600
- networkClientId,
1601
- };
1602
- });
1603
- this.update((state) => {
1604
- const { transactions: currentTransactions } = state;
1605
- state.transactions = this.trimTransactionsForState([
1606
- ...finalTransactions,
1607
- ...currentTransactions,
1608
- ]);
1609
- (0, logger_1.projectLogger)('Added incoming transactions to state', finalTransactions.length, finalTransactions);
1610
- });
1611
- this.messagingSystem.publish(`${controllerName}:incomingTransactionsReceived`, finalTransactions);
1612
- }
1613
- generateDappSuggestedGasFees(txParams, origin) {
1614
- if (!origin || origin === controller_utils_1.ORIGIN_METAMASK) {
1615
- return undefined;
1616
- }
1617
- const { gasPrice, maxFeePerGas, maxPriorityFeePerGas, gas } = txParams;
1618
- if (gasPrice === undefined &&
1619
- maxFeePerGas === undefined &&
1620
- maxPriorityFeePerGas === undefined &&
1621
- gas === undefined) {
1622
- return undefined;
1623
- }
1624
- const dappSuggestedGasFees = {};
1625
- if (gasPrice !== undefined) {
1626
- dappSuggestedGasFees.gasPrice = gasPrice;
1627
- }
1628
- else if (maxFeePerGas !== undefined ||
1629
- maxPriorityFeePerGas !== undefined) {
1630
- dappSuggestedGasFees.maxFeePerGas = maxFeePerGas;
1631
- dappSuggestedGasFees.maxPriorityFeePerGas = maxPriorityFeePerGas;
1632
- }
1633
- if (gas !== undefined) {
1634
- dappSuggestedGasFees.gas = gas;
1635
- }
1636
- return dappSuggestedGasFees;
1637
- }
1638
- /**
1639
- * Validates and adds external provided transaction to state.
1640
- *
1641
- * @param transactionMeta - Nominated external transaction to be added to state.
1642
- * @returns The new transaction.
1643
- */
1644
- addExternalTransaction(transactionMeta) {
1645
- const { chainId } = transactionMeta;
1646
- const { transactions } = this.state;
1647
- const fromAddress = transactionMeta?.txParams?.from;
1648
- const sameFromAndNetworkTransactions = transactions.filter((transaction) => transaction.txParams.from === fromAddress &&
1649
- transaction.chainId === chainId);
1650
- const confirmedTxs = sameFromAndNetworkTransactions.filter((transaction) => transaction.status === types_1.TransactionStatus.confirmed);
1651
- const pendingTxs = sameFromAndNetworkTransactions.filter((transaction) => transaction.status === types_1.TransactionStatus.submitted);
1652
- (0, external_transactions_1.validateConfirmedExternalTransaction)(transactionMeta, confirmedTxs, pendingTxs);
1653
- // Make sure provided external transaction has non empty history array
1654
- const newTransactionMeta = (transactionMeta.history ?? []).length === 0 && !this.isHistoryDisabled
1655
- ? (0, history_1.addInitialHistorySnapshot)(transactionMeta)
1656
- : transactionMeta;
1657
- this.update((state) => {
1658
- state.transactions = this.trimTransactionsForState([
1659
- ...state.transactions,
1660
- newTransactionMeta,
1661
- ]);
1662
- });
1663
- return newTransactionMeta;
1664
- }
1665
- /**
1666
- * Method to set transaction status to dropped.
1667
- *
1668
- * @param transactionMeta - TransactionMeta of transaction to be marked as dropped.
1669
- */
1670
- setTransactionStatusDropped(transactionMeta) {
1671
- const updatedTransactionMeta = {
1672
- ...transactionMeta,
1673
- status: types_1.TransactionStatus.dropped,
1674
- };
1675
- this.messagingSystem.publish(`${controllerName}:transactionDropped`, {
1676
- transactionMeta: updatedTransactionMeta,
1677
- });
1678
- this.updateTransaction(updatedTransactionMeta, 'TransactionController#setTransactionStatusDropped - Transaction dropped');
1679
- this.onTransactionStatusChange(updatedTransactionMeta);
1680
- }
1681
- /**
1682
- * Get transaction with provided actionId.
1683
- *
1684
- * @param actionId - Unique ID to prevent duplicate requests
1685
- * @returns the filtered transaction
1686
- */
1687
- getTransactionWithActionId(actionId) {
1688
- return this.state.transactions.find((transaction) => actionId && transaction.actionId === actionId);
1689
- }
1690
- async waitForTransactionFinished(transactionId) {
1691
- return new Promise((resolve) => {
1692
- __classPrivateFieldGet(this, _TransactionController_internalEvents, "f").once(`${transactionId}:finished`, (txMeta) => {
1693
- resolve(txMeta);
1694
- });
1695
- });
1696
- }
1697
- /**
1698
- * Updates the r, s, and v properties of a TransactionMeta object
1699
- * with values from a signed transaction.
1700
- *
1701
- * @param transactionMeta - The TransactionMeta object to update.
1702
- * @param signedTx - The encompassing type for all transaction types containing r, s, and v values.
1703
- * @returns The updated TransactionMeta object.
1704
- */
1705
- updateTransactionMetaRSV(transactionMeta, signedTx) {
1706
- const transactionMetaWithRsv = (0, lodash_1.cloneDeep)(transactionMeta);
1707
- for (const key of ['r', 's', 'v']) {
1708
- const value = signedTx[key];
1709
- if (value === undefined || value === null) {
1710
- continue;
1711
- }
1712
- transactionMetaWithRsv[key] = (0, utils_1.add0x)(value.toString(16));
1713
- }
1714
- return transactionMetaWithRsv;
1715
- }
1716
- async getEIP1559Compatibility(networkClientId) {
1717
- const currentNetworkIsEIP1559Compatible = await this.getCurrentNetworkEIP1559Compatibility(networkClientId);
1718
- const currentAccountIsEIP1559Compatible = await this.getCurrentAccountEIP1559Compatibility();
1719
- return (currentNetworkIsEIP1559Compatible && currentAccountIsEIP1559Compatible);
1720
- }
1721
- onTransactionStatusChange(transactionMeta) {
1722
- this.messagingSystem.publish(`${controllerName}:transactionStatusUpdated`, {
1723
- transactionMeta,
1724
- });
1725
- }
1726
- getNonceTrackerTransactions(statuses, address, chainId) {
1727
- return (0, nonce_1.getAndFormatTransactionsForNonceTracker)(chainId, address, statuses, this.state.transactions);
1728
- }
1729
- async updatePostBalance(transactionMeta) {
1730
- try {
1731
- const { networkClientId, type } = transactionMeta;
1732
- if (type !== types_1.TransactionType.swap) {
1733
- return;
1734
- }
1735
- const ethQuery = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getEthQuery).call(this, { networkClientId });
1736
- const { updatedTransactionMeta, approvalTransactionMeta } = await (0, swaps_1.updatePostTransactionBalance)(transactionMeta, {
1737
- ethQuery,
1738
- getTransaction: this.getTransaction.bind(this),
1739
- updateTransaction: this.updateTransaction.bind(this),
1740
- });
1741
- this.messagingSystem.publish(`${controllerName}:postTransactionBalanceUpdated`, {
1742
- transactionMeta: updatedTransactionMeta,
1743
- approvalTransactionMeta,
1744
- });
1745
- }
1746
- catch (error) {
1747
- /* istanbul ignore next */
1748
- (0, logger_1.projectLogger)('Error while updating post transaction balance', error);
1749
- }
1750
- }
1751
- async publishTransactionForRetry(ethQuery, transactionMeta) {
1752
- try {
1753
- return await this.publishTransaction(ethQuery, transactionMeta);
1754
- }
1755
- catch (error) {
1756
- if (this.isTransactionAlreadyConfirmedError(error)) {
1757
- throw new Error('Previous transaction is already confirmed');
1758
- }
1759
- throw error;
1760
- }
1761
- }
1762
- /**
1763
- * Ensures that error is a nonce issue
1764
- *
1765
- * @param error - The error to check
1766
- * @returns Whether or not the error is a nonce issue
1767
- */
1768
- // TODO: Replace `any` with type
1769
- // Some networks are returning original error in the data field
1770
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
1771
- isTransactionAlreadyConfirmedError(error) {
1772
- return (error?.message?.includes('nonce too low') ||
1773
- error?.data?.message?.includes('nonce too low'));
1774
- }
1775
1213
  }
1776
1214
  exports.TransactionController = TransactionController;
1777
- _TransactionController_afterAdd = new WeakMap(), _TransactionController_internalEvents = new WeakMap(), _TransactionController_methodDataHelper = new WeakMap(), _TransactionController_incomingTransactionHelper = new WeakMap(), _TransactionController_incomingTransactionOptions = new WeakMap(), _TransactionController_pendingTransactionOptions = new WeakMap(), _TransactionController_publishBatchHook = new WeakMap(), _TransactionController_publicKeyEIP7702 = new WeakMap(), _TransactionController_trace = new WeakMap(), _TransactionController_transactionHistoryLimit = new WeakMap(), _TransactionController_isFirstTimeInteractionEnabled = new WeakMap(), _TransactionController_isSimulationEnabled = new WeakMap(), _TransactionController_testGasFeeFlows = new WeakMap(), _TransactionController_multichainTrackingHelper = new WeakMap(), _TransactionController_checkForPendingTransactionAndStartPolling = new WeakMap(), _TransactionController_instances = new WeakSet(), _TransactionController_retryTransaction = async function _TransactionController_retryTransaction({ actionId, afterSubmit, estimatedBaseFee, gasValues, label, prepareTransactionParams, rate, transactionId, transactionType, }) {
1215
+ _TransactionController_afterAdd = new WeakMap(), _TransactionController_afterSign = new WeakMap(), _TransactionController_approvingTransactionIds = new WeakMap(), _TransactionController_beforeCheckPendingTransaction = new WeakMap(), _TransactionController_beforePublish = new WeakMap(), _TransactionController_gasFeeFlows = new WeakMap(), _TransactionController_getAdditionalSignArguments = new WeakMap(), _TransactionController_getCurrentAccountEIP1559Compatibility = new WeakMap(), _TransactionController_getCurrentNetworkEIP1559Compatibility = new WeakMap(), _TransactionController_getExternalPendingTransactions = new WeakMap(), _TransactionController_getGasFeeEstimates = new WeakMap(), _TransactionController_getNetworkState = new WeakMap(), _TransactionController_getPermittedAccounts = new WeakMap(), _TransactionController_getSavedGasFees = new WeakMap(), _TransactionController_incomingTransactionHelper = new WeakMap(), _TransactionController_incomingTransactionOptions = new WeakMap(), _TransactionController_internalEvents = new WeakMap(), _TransactionController_isAutomaticGasFeeUpdateEnabled = new WeakMap(), _TransactionController_isFirstTimeInteractionEnabled = new WeakMap(), _TransactionController_isHistoryDisabled = new WeakMap(), _TransactionController_isSendFlowHistoryDisabled = new WeakMap(), _TransactionController_isSimulationEnabled = new WeakMap(), _TransactionController_isSwapsDisabled = new WeakMap(), _TransactionController_layer1GasFeeFlows = new WeakMap(), _TransactionController_methodDataHelper = new WeakMap(), _TransactionController_multichainTrackingHelper = new WeakMap(), _TransactionController_pendingTransactionOptions = new WeakMap(), _TransactionController_publicKeyEIP7702 = new WeakMap(), _TransactionController_publish = new WeakMap(), _TransactionController_publishBatchHook = new WeakMap(), _TransactionController_securityProviderRequest = new WeakMap(), _TransactionController_sign = new WeakMap(), _TransactionController_signAbortCallbacks = new WeakMap(), _TransactionController_testGasFeeFlows = new WeakMap(), _TransactionController_trace = new WeakMap(), _TransactionController_transactionHistoryLimit = new WeakMap(), _TransactionController_checkForPendingTransactionAndStartPolling = new WeakMap(), _TransactionController_instances = new WeakSet(), _TransactionController_retryTransaction = async function _TransactionController_retryTransaction({ actionId, afterSubmit, estimatedBaseFee, gasValues, label, prepareTransactionParams, rate, transactionId, transactionType, }) {
1778
1216
  // If transaction is found for same action id, do not create a new transaction.
1779
- if (this.getTransactionWithActionId(actionId)) {
1217
+ if (__classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransactionWithActionId).call(this, actionId)) {
1780
1218
  return;
1781
1219
  }
1782
1220
  if (gasValues) {
@@ -1785,20 +1223,20 @@ _TransactionController_afterAdd = new WeakMap(), _TransactionController_internal
1785
1223
  (0, utils_2.validateGasValues)(gasValues);
1786
1224
  }
1787
1225
  (0, logger_1.projectLogger)(`Creating ${label} transaction`, transactionId, gasValues);
1788
- const transactionMeta = this.getTransaction(transactionId);
1226
+ const transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionId);
1789
1227
  /* istanbul ignore next */
1790
1228
  if (!transactionMeta) {
1791
1229
  return;
1792
1230
  }
1793
1231
  /* istanbul ignore next */
1794
- if (!this.sign) {
1232
+ if (!__classPrivateFieldGet(this, _TransactionController_sign, "f")) {
1795
1233
  throw new Error('No sign method defined.');
1796
1234
  }
1797
1235
  const newTxParams = (0, retry_1.getTransactionParamsWithIncreasedGasFee)(transactionMeta.txParams, rate, gasValues);
1798
1236
  prepareTransactionParams?.(newTxParams);
1799
1237
  const unsignedEthTx = (0, prepare_1.prepareTransaction)(transactionMeta.chainId, newTxParams);
1800
- const signedTx = await this.sign(unsignedEthTx, transactionMeta.txParams.from);
1801
- const transactionMetaWithRsv = this.updateTransactionMetaRSV(transactionMeta, signedTx);
1238
+ const signedTx = await __classPrivateFieldGet(this, _TransactionController_sign, "f").call(this, unsignedEthTx, transactionMeta.txParams.from);
1239
+ const transactionMetaWithRsv = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionMetaRSV).call(this, transactionMeta, signedTx);
1802
1240
  const rawTx = (0, prepare_1.serializeTransaction)(signedTx);
1803
1241
  const newFee = newTxParams.maxFeePerGas ?? newTxParams.gasPrice;
1804
1242
  const oldFee = newTxParams.maxFeePerGas
@@ -1823,12 +1261,12 @@ _TransactionController_afterAdd = new WeakMap(), _TransactionController_internal
1823
1261
  txParams: newTxParams,
1824
1262
  type: transactionType,
1825
1263
  };
1826
- const hash = await this.publishTransactionForRetry(ethQuery, {
1264
+ const hash = await __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_publishTransactionForRetry).call(this, ethQuery, {
1827
1265
  ...newTransactionMeta,
1828
1266
  origin: label,
1829
1267
  });
1830
1268
  newTransactionMeta.hash = hash;
1831
- this.addMetadata(newTransactionMeta);
1269
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_addMetadata).call(this, newTransactionMeta);
1832
1270
  // speedUpTransaction has no approval request, so we assume the user has already approved the transaction
1833
1271
  this.messagingSystem.publish(`${controllerName}:transactionApproved`, {
1834
1272
  transactionMeta: newTransactionMeta,
@@ -1839,8 +1277,262 @@ _TransactionController_afterAdd = new WeakMap(), _TransactionController_internal
1839
1277
  actionId,
1840
1278
  });
1841
1279
  afterSubmit?.(newTransactionMeta);
1280
+ }, _TransactionController_signExternalTransaction = async function _TransactionController_signExternalTransaction(chainId, transactionParams) {
1281
+ if (!__classPrivateFieldGet(this, _TransactionController_sign, "f")) {
1282
+ throw new Error('No sign method defined.');
1283
+ }
1284
+ const normalizedTransactionParams = (0, utils_2.normalizeTransactionParams)(transactionParams);
1285
+ const type = (0, utils_2.isEIP1559Transaction)(normalizedTransactionParams)
1286
+ ? types_1.TransactionEnvelopeType.feeMarket
1287
+ : types_1.TransactionEnvelopeType.legacy;
1288
+ const updatedTransactionParams = {
1289
+ ...normalizedTransactionParams,
1290
+ type,
1291
+ gasLimit: normalizedTransactionParams.gas,
1292
+ chainId,
1293
+ };
1294
+ const { from } = updatedTransactionParams;
1295
+ const unsignedTransaction = (0, prepare_1.prepareTransaction)(chainId, updatedTransactionParams);
1296
+ const signedTransaction = await __classPrivateFieldGet(this, _TransactionController_sign, "f").call(this, unsignedTransaction, from);
1297
+ const rawTransaction = (0, prepare_1.serializeTransaction)(signedTransaction);
1298
+ return rawTransaction;
1299
+ }, _TransactionController_addMetadata = function _TransactionController_addMetadata(transactionMeta) {
1300
+ (0, validation_1.validateTxParams)(transactionMeta.txParams);
1301
+ this.update((state) => {
1302
+ state.transactions = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_trimTransactionsForState).call(this, [
1303
+ ...state.transactions,
1304
+ transactionMeta,
1305
+ ]);
1306
+ });
1307
+ }, _TransactionController_updateGasProperties = async function _TransactionController_updateGasProperties(transactionMeta, { traceContext } = {}) {
1308
+ const isEIP1559Compatible = transactionMeta.txParams.type !== types_1.TransactionEnvelopeType.legacy &&
1309
+ (await __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getEIP1559Compatibility).call(this, transactionMeta.networkClientId));
1310
+ const { networkClientId } = transactionMeta;
1311
+ const ethQuery = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getEthQuery).call(this, { networkClientId });
1312
+ const provider = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getProvider).call(this, { networkClientId });
1313
+ await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Update Gas', parentContext: traceContext }, async () => {
1314
+ await __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateGasEstimate).call(this, transactionMeta);
1315
+ });
1316
+ await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Update Gas Fees', parentContext: traceContext }, async () => await (0, gas_fees_1.updateGasFees)({
1317
+ eip1559: isEIP1559Compatible,
1318
+ ethQuery,
1319
+ gasFeeFlows: __classPrivateFieldGet(this, _TransactionController_gasFeeFlows, "f"),
1320
+ getGasFeeEstimates: __classPrivateFieldGet(this, _TransactionController_getGasFeeEstimates, "f"),
1321
+ getSavedGasFees: __classPrivateFieldGet(this, _TransactionController_getSavedGasFees, "f").bind(this),
1322
+ messenger: this.messagingSystem,
1323
+ txMeta: transactionMeta,
1324
+ }));
1325
+ await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Update Layer 1 Gas Fees', parentContext: traceContext }, async () => await (0, layer1_gas_fee_flow_1.updateTransactionLayer1GasFee)({
1326
+ layer1GasFeeFlows: __classPrivateFieldGet(this, _TransactionController_layer1GasFeeFlows, "f"),
1327
+ messenger: this.messagingSystem,
1328
+ provider,
1329
+ transactionMeta,
1330
+ }));
1331
+ }, _TransactionController_onBootCleanup = function _TransactionController_onBootCleanup() {
1332
+ this.clearUnapprovedTransactions();
1333
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_failIncompleteTransactions).call(this);
1334
+ }, _TransactionController_failIncompleteTransactions = function _TransactionController_failIncompleteTransactions() {
1335
+ const incompleteTransactions = this.state.transactions.filter((transaction) => [types_1.TransactionStatus.approved, types_1.TransactionStatus.signed].includes(transaction.status));
1336
+ for (const transactionMeta of incompleteTransactions) {
1337
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_failTransaction).call(this, transactionMeta, new Error('Transaction incomplete at startup'));
1338
+ }
1339
+ }, _TransactionController_processApproval = async function _TransactionController_processApproval(transactionMeta, { actionId, isExisting = false, publishHook, requireApproval, shouldShowRequest = true, traceContext, }) {
1340
+ const transactionId = transactionMeta.id;
1341
+ let resultCallbacks;
1342
+ const { meta, isCompleted } = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_isTransactionCompleted).call(this, transactionId);
1343
+ const finishedPromise = isCompleted
1344
+ ? Promise.resolve(meta)
1345
+ : __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_waitForTransactionFinished).call(this, transactionId);
1346
+ if (meta && !isExisting && !isCompleted) {
1347
+ try {
1348
+ if (requireApproval !== false) {
1349
+ const acceptResult = await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Await Approval', parentContext: traceContext }, (context) => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_requestApproval).call(this, transactionMeta, {
1350
+ shouldShowRequest,
1351
+ traceContext: context,
1352
+ }));
1353
+ resultCallbacks = acceptResult.resultCallbacks;
1354
+ const approvalValue = acceptResult.value;
1355
+ const updatedTransaction = approvalValue?.txMeta;
1356
+ if (updatedTransaction) {
1357
+ (0, logger_1.projectLogger)('Updating transaction with approval data', {
1358
+ customNonce: updatedTransaction.customNonceValue,
1359
+ params: updatedTransaction.txParams,
1360
+ });
1361
+ this.updateTransaction(updatedTransaction, 'TransactionController#processApproval - Updated with approval data');
1362
+ }
1363
+ }
1364
+ const { isCompleted: isTxCompleted } = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_isTransactionCompleted).call(this, transactionId);
1365
+ if (!isTxCompleted) {
1366
+ const approvalResult = await __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_approveTransaction).call(this, transactionId, traceContext, publishHook);
1367
+ if (approvalResult === ApprovalState.SkippedViaBeforePublishHook &&
1368
+ resultCallbacks) {
1369
+ resultCallbacks.success();
1370
+ }
1371
+ const updatedTransactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionId);
1372
+ this.messagingSystem.publish(`${controllerName}:transactionApproved`, {
1373
+ transactionMeta: updatedTransactionMeta,
1374
+ actionId,
1375
+ });
1376
+ }
1377
+ }
1378
+ catch (rawError) {
1379
+ const error = rawError;
1380
+ const { isCompleted: isTxCompleted } = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_isTransactionCompleted).call(this, transactionId);
1381
+ if (!isTxCompleted) {
1382
+ if (__classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_isRejectError).call(this, error)) {
1383
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_rejectTransactionAndThrow).call(this, transactionId, actionId, error);
1384
+ }
1385
+ else {
1386
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_failTransaction).call(this, meta, error, actionId);
1387
+ }
1388
+ }
1389
+ }
1390
+ }
1391
+ const finalMeta = await finishedPromise;
1392
+ switch (finalMeta?.status) {
1393
+ case types_1.TransactionStatus.failed:
1394
+ const error = finalMeta.error;
1395
+ resultCallbacks?.error(error);
1396
+ throw rpc_errors_1.rpcErrors.internal(error.message);
1397
+ case types_1.TransactionStatus.submitted:
1398
+ resultCallbacks?.success();
1399
+ return finalMeta.hash;
1400
+ default:
1401
+ const internalError = rpc_errors_1.rpcErrors.internal(`MetaMask Tx Signature: Unknown problem: ${JSON.stringify(finalMeta || transactionId)}`);
1402
+ resultCallbacks?.error(internalError);
1403
+ throw internalError;
1404
+ }
1405
+ }, _TransactionController_approveTransaction =
1406
+ /**
1407
+ * Approves a transaction and updates it's status in state. If this is not a
1408
+ * retry transaction, a nonce will be generated. The transaction is signed
1409
+ * using the sign configuration property, then published to the blockchain.
1410
+ * A `<tx.id>:finished` hub event is fired after success or failure.
1411
+ *
1412
+ * @param transactionId - The ID of the transaction to approve.
1413
+ * @param traceContext - The parent context for any new traces.
1414
+ * @param publishHookOverride - Custom logic to publish the transaction.
1415
+ * @returns The state of the approval.
1416
+ */
1417
+ async function _TransactionController_approveTransaction(transactionId, traceContext, publishHookOverride) {
1418
+ let clearApprovingTransactionId;
1419
+ let clearNonceLock;
1420
+ let transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransactionOrThrow).call(this, transactionId);
1421
+ (0, logger_1.projectLogger)('Approving transaction', transactionMeta);
1422
+ try {
1423
+ if (!__classPrivateFieldGet(this, _TransactionController_sign, "f")) {
1424
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_failTransaction).call(this, transactionMeta, new Error('No sign method defined.'));
1425
+ return ApprovalState.NotApproved;
1426
+ }
1427
+ else if (!transactionMeta.chainId) {
1428
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_failTransaction).call(this, transactionMeta, new Error('No chainId defined.'));
1429
+ return ApprovalState.NotApproved;
1430
+ }
1431
+ if (__classPrivateFieldGet(this, _TransactionController_approvingTransactionIds, "f").has(transactionId)) {
1432
+ (0, logger_1.projectLogger)('Skipping approval as signing in progress', transactionId);
1433
+ return ApprovalState.NotApproved;
1434
+ }
1435
+ __classPrivateFieldGet(this, _TransactionController_approvingTransactionIds, "f").add(transactionId);
1436
+ clearApprovingTransactionId = () => __classPrivateFieldGet(this, _TransactionController_approvingTransactionIds, "f").delete(transactionId);
1437
+ const [nonce, releaseNonce] = await (0, nonce_1.getNextNonce)(transactionMeta, (address) => __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").getNonceLock(address, transactionMeta.networkClientId));
1438
+ clearNonceLock = releaseNonce;
1439
+ transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
1440
+ transactionId,
1441
+ note: 'TransactionController#approveTransaction - Transaction approved',
1442
+ }, (draftTxMeta) => {
1443
+ const { chainId, txParams } = draftTxMeta;
1444
+ const { gas, type } = txParams;
1445
+ draftTxMeta.status = types_1.TransactionStatus.approved;
1446
+ draftTxMeta.txParams.chainId = chainId;
1447
+ draftTxMeta.txParams.gasLimit = gas;
1448
+ draftTxMeta.txParams.nonce = nonce;
1449
+ if (!type && (0, utils_2.isEIP1559Transaction)(txParams)) {
1450
+ draftTxMeta.txParams.type = types_1.TransactionEnvelopeType.feeMarket;
1451
+ }
1452
+ });
1453
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_onTransactionStatusChange).call(this, transactionMeta);
1454
+ const rawTx = await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Sign', parentContext: traceContext }, () => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_signTransaction).call(this, transactionMeta));
1455
+ if (!(await __classPrivateFieldGet(this, _TransactionController_beforePublish, "f").call(this, transactionMeta))) {
1456
+ (0, logger_1.projectLogger)('Skipping publishing transaction based on hook');
1457
+ this.messagingSystem.publish(`${controllerName}:transactionPublishingSkipped`, transactionMeta);
1458
+ return ApprovalState.SkippedViaBeforePublishHook;
1459
+ }
1460
+ if (!rawTx && !transactionMeta.isExternalSign) {
1461
+ return ApprovalState.NotApproved;
1462
+ }
1463
+ const { networkClientId } = transactionMeta;
1464
+ const ethQuery = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getEthQuery).call(this, { networkClientId });
1465
+ let preTxBalance;
1466
+ const shouldUpdatePreTxBalance = transactionMeta.type === types_1.TransactionType.swap;
1467
+ if (shouldUpdatePreTxBalance) {
1468
+ (0, logger_1.projectLogger)('Determining pre-transaction balance');
1469
+ preTxBalance = await (0, controller_utils_1.query)(ethQuery, 'getBalance', [
1470
+ transactionMeta.txParams.from,
1471
+ ]);
1472
+ }
1473
+ (0, logger_1.projectLogger)('Publishing transaction', transactionMeta.txParams);
1474
+ let hash;
1475
+ clearNonceLock?.();
1476
+ clearNonceLock = undefined;
1477
+ if (transactionMeta.batchTransactions?.length) {
1478
+ (0, logger_1.projectLogger)('Found batch transactions', transactionMeta.batchTransactions);
1479
+ const extraTransactionsPublishHook = new ExtraTransactionsPublishHook_1.ExtraTransactionsPublishHook({
1480
+ addTransactionBatch: this.addTransactionBatch.bind(this),
1481
+ transactions: transactionMeta.batchTransactions,
1482
+ });
1483
+ publishHookOverride = extraTransactionsPublishHook.getHook();
1484
+ }
1485
+ await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Publish', parentContext: traceContext }, async () => {
1486
+ const publishHook = publishHookOverride ?? __classPrivateFieldGet(this, _TransactionController_publish, "f");
1487
+ ({ transactionHash: hash } = await publishHook(transactionMeta, rawTx ?? '0x'));
1488
+ if (hash === undefined) {
1489
+ hash = await __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_publishTransaction).call(this, ethQuery, {
1490
+ ...transactionMeta,
1491
+ rawTx,
1492
+ });
1493
+ }
1494
+ });
1495
+ (0, logger_1.projectLogger)('Publish successful', hash);
1496
+ transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
1497
+ transactionId,
1498
+ note: 'TransactionController#approveTransaction - Transaction submitted',
1499
+ }, (draftTxMeta) => {
1500
+ draftTxMeta.hash = hash;
1501
+ draftTxMeta.status = types_1.TransactionStatus.submitted;
1502
+ draftTxMeta.submittedTime = new Date().getTime();
1503
+ if (shouldUpdatePreTxBalance) {
1504
+ draftTxMeta.preTxBalance = preTxBalance;
1505
+ (0, logger_1.projectLogger)('Updated pre-transaction balance', preTxBalance);
1506
+ }
1507
+ });
1508
+ this.messagingSystem.publish(`${controllerName}:transactionSubmitted`, {
1509
+ transactionMeta,
1510
+ });
1511
+ this.messagingSystem.publish(`${controllerName}:transactionFinished`, transactionMeta);
1512
+ __classPrivateFieldGet(this, _TransactionController_internalEvents, "f").emit(`${transactionId}:finished`, transactionMeta);
1513
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_onTransactionStatusChange).call(this, transactionMeta);
1514
+ return ApprovalState.Approved;
1515
+ // TODO: Replace `any` with type
1516
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1517
+ }
1518
+ catch (error) {
1519
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_failTransaction).call(this, transactionMeta, error);
1520
+ return ApprovalState.NotApproved;
1521
+ }
1522
+ finally {
1523
+ clearApprovingTransactionId?.();
1524
+ clearNonceLock?.();
1525
+ }
1526
+ }, _TransactionController_publishTransaction = async function _TransactionController_publishTransaction(ethQuery, transactionMeta, { skipSubmitHistory } = {}) {
1527
+ const transactionHash = await (0, controller_utils_1.query)(ethQuery, 'sendRawTransaction', [
1528
+ transactionMeta.rawTx,
1529
+ ]);
1530
+ if (skipSubmitHistory !== true) {
1531
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateSubmitHistory).call(this, transactionMeta, transactionHash);
1532
+ }
1533
+ return transactionHash;
1842
1534
  }, _TransactionController_rejectTransaction = function _TransactionController_rejectTransaction(transactionId, actionId, error) {
1843
- const transactionMeta = this.getTransaction(transactionId);
1535
+ const transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionId);
1844
1536
  if (!transactionMeta) {
1845
1537
  return;
1846
1538
  }
@@ -1856,7 +1548,74 @@ _TransactionController_afterAdd = new WeakMap(), _TransactionController_internal
1856
1548
  transactionMeta: updatedTransactionMeta,
1857
1549
  actionId,
1858
1550
  });
1859
- this.onTransactionStatusChange(updatedTransactionMeta);
1551
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_onTransactionStatusChange).call(this, updatedTransactionMeta);
1552
+ }, _TransactionController_trimTransactionsForState = function _TransactionController_trimTransactionsForState(transactions) {
1553
+ const nonceNetworkSet = new Set();
1554
+ const txsToKeep = [...transactions]
1555
+ .sort((a, b) => (a.time > b.time ? -1 : 1)) // Descending time order
1556
+ .filter((tx) => {
1557
+ const { chainId, status, txParams, time } = tx;
1558
+ if (txParams) {
1559
+ const key = `${String(txParams.nonce)}-${(0, controller_utils_1.convertHexToDecimal)(chainId)}-${new Date(time).toDateString()}`;
1560
+ if (nonceNetworkSet.has(key)) {
1561
+ return true;
1562
+ }
1563
+ else if (nonceNetworkSet.size < __classPrivateFieldGet(this, _TransactionController_transactionHistoryLimit, "f") ||
1564
+ !__classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_isFinalState).call(this, status)) {
1565
+ nonceNetworkSet.add(key);
1566
+ return true;
1567
+ }
1568
+ }
1569
+ return false;
1570
+ });
1571
+ txsToKeep.reverse(); // Ascending time order
1572
+ return txsToKeep;
1573
+ }, _TransactionController_isFinalState = function _TransactionController_isFinalState(status) {
1574
+ return (status === types_1.TransactionStatus.rejected ||
1575
+ status === types_1.TransactionStatus.confirmed ||
1576
+ status === types_1.TransactionStatus.failed);
1577
+ }, _TransactionController_isLocalFinalState = function _TransactionController_isLocalFinalState(status) {
1578
+ return [
1579
+ types_1.TransactionStatus.confirmed,
1580
+ types_1.TransactionStatus.failed,
1581
+ types_1.TransactionStatus.rejected,
1582
+ types_1.TransactionStatus.submitted,
1583
+ ].includes(status);
1584
+ }, _TransactionController_requestApproval = async function _TransactionController_requestApproval(txMeta, { shouldShowRequest, traceContext, }) {
1585
+ const id = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getApprovalId).call(this, txMeta);
1586
+ const { origin } = txMeta;
1587
+ const type = controller_utils_1.ApprovalType.Transaction;
1588
+ const requestData = { txId: txMeta.id };
1589
+ await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, {
1590
+ name: 'Notification Display',
1591
+ id,
1592
+ parentContext: traceContext,
1593
+ });
1594
+ return (await this.messagingSystem.call('ApprovalController:addRequest', {
1595
+ id,
1596
+ origin: origin || controller_utils_1.ORIGIN_METAMASK,
1597
+ type,
1598
+ requestData,
1599
+ expectsResult: true,
1600
+ }, shouldShowRequest));
1601
+ }, _TransactionController_getTransaction = function _TransactionController_getTransaction(transactionId) {
1602
+ const { transactions } = this.state;
1603
+ return transactions.find(({ id }) => id === transactionId);
1604
+ }, _TransactionController_getTransactionOrThrow = function _TransactionController_getTransactionOrThrow(transactionId, errorMessagePrefix = 'TransactionController') {
1605
+ const txMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionId);
1606
+ if (!txMeta) {
1607
+ throw new Error(`${errorMessagePrefix}: No transaction found with id ${transactionId}`);
1608
+ }
1609
+ return txMeta;
1610
+ }, _TransactionController_getApprovalId = function _TransactionController_getApprovalId(txMeta) {
1611
+ return String(txMeta.id);
1612
+ }, _TransactionController_isTransactionCompleted = function _TransactionController_isTransactionCompleted(transactionId) {
1613
+ const transaction = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionId);
1614
+ if (!transaction) {
1615
+ return { meta: undefined, isCompleted: false };
1616
+ }
1617
+ const isCompleted = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_isLocalFinalState).call(this, transaction.status);
1618
+ return { meta: transaction, isCompleted };
1860
1619
  }, _TransactionController_getChainId = function _TransactionController_getChainId(networkClientId) {
1861
1620
  return __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").getNetworkClient({ networkClientId })
1862
1621
  .configuration.chainId;
@@ -1874,8 +1633,73 @@ _TransactionController_afterAdd = new WeakMap(), _TransactionController_internal
1874
1633
  chainId,
1875
1634
  networkClientId,
1876
1635
  }).provider;
1636
+ }, _TransactionController_onIncomingTransactions = function _TransactionController_onIncomingTransactions(transactions) {
1637
+ if (!transactions.length) {
1638
+ return;
1639
+ }
1640
+ const finalTransactions = transactions.map((tx) => {
1641
+ const { chainId } = tx;
1642
+ const networkClientId = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getNetworkClientId).call(this, { chainId });
1643
+ return {
1644
+ ...tx,
1645
+ networkClientId,
1646
+ };
1647
+ });
1648
+ this.update((state) => {
1649
+ const { transactions: currentTransactions } = state;
1650
+ state.transactions = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_trimTransactionsForState).call(this, [
1651
+ ...finalTransactions,
1652
+ ...currentTransactions,
1653
+ ]);
1654
+ (0, logger_1.projectLogger)('Added incoming transactions to state', finalTransactions.length, finalTransactions);
1655
+ });
1656
+ this.messagingSystem.publish(`${controllerName}:incomingTransactionsReceived`, finalTransactions);
1657
+ }, _TransactionController_generateDappSuggestedGasFees = function _TransactionController_generateDappSuggestedGasFees(txParams, origin) {
1658
+ if (!origin || origin === controller_utils_1.ORIGIN_METAMASK) {
1659
+ return undefined;
1660
+ }
1661
+ const { gasPrice, maxFeePerGas, maxPriorityFeePerGas, gas } = txParams;
1662
+ if (gasPrice === undefined &&
1663
+ maxFeePerGas === undefined &&
1664
+ maxPriorityFeePerGas === undefined &&
1665
+ gas === undefined) {
1666
+ return undefined;
1667
+ }
1668
+ const dappSuggestedGasFees = {};
1669
+ if (gasPrice !== undefined) {
1670
+ dappSuggestedGasFees.gasPrice = gasPrice;
1671
+ }
1672
+ else if (maxFeePerGas !== undefined ||
1673
+ maxPriorityFeePerGas !== undefined) {
1674
+ dappSuggestedGasFees.maxFeePerGas = maxFeePerGas;
1675
+ dappSuggestedGasFees.maxPriorityFeePerGas = maxPriorityFeePerGas;
1676
+ }
1677
+ if (gas !== undefined) {
1678
+ dappSuggestedGasFees.gas = gas;
1679
+ }
1680
+ return dappSuggestedGasFees;
1681
+ }, _TransactionController_addExternalTransaction = function _TransactionController_addExternalTransaction(transactionMeta) {
1682
+ const { chainId } = transactionMeta;
1683
+ const { transactions } = this.state;
1684
+ const fromAddress = transactionMeta?.txParams?.from;
1685
+ const sameFromAndNetworkTransactions = transactions.filter((transaction) => transaction.txParams.from === fromAddress &&
1686
+ transaction.chainId === chainId);
1687
+ const confirmedTxs = sameFromAndNetworkTransactions.filter((transaction) => transaction.status === types_1.TransactionStatus.confirmed);
1688
+ const pendingTxs = sameFromAndNetworkTransactions.filter((transaction) => transaction.status === types_1.TransactionStatus.submitted);
1689
+ (0, external_transactions_1.validateConfirmedExternalTransaction)(transactionMeta, confirmedTxs, pendingTxs);
1690
+ // Make sure provided external transaction has non empty history array
1691
+ const newTransactionMeta = (transactionMeta.history ?? []).length === 0 && !__classPrivateFieldGet(this, _TransactionController_isHistoryDisabled, "f")
1692
+ ? (0, history_1.addInitialHistorySnapshot)(transactionMeta)
1693
+ : transactionMeta;
1694
+ this.update((state) => {
1695
+ state.transactions = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_trimTransactionsForState).call(this, [
1696
+ ...state.transactions,
1697
+ newTransactionMeta,
1698
+ ]);
1699
+ });
1700
+ return newTransactionMeta;
1877
1701
  }, _TransactionController_markNonceDuplicatesDropped = function _TransactionController_markNonceDuplicatesDropped(transactionId) {
1878
- const transactionMeta = this.getTransaction(transactionId);
1702
+ const transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionId);
1879
1703
  if (!transactionMeta) {
1880
1704
  return;
1881
1705
  }
@@ -1903,9 +1727,41 @@ _TransactionController_afterAdd = new WeakMap(), _TransactionController_internal
1903
1727
  for (const transaction of this.state.transactions) {
1904
1728
  if (sameNonceTransactionIds.includes(transaction.id) &&
1905
1729
  transaction.status !== types_1.TransactionStatus.failed) {
1906
- this.setTransactionStatusDropped(transaction);
1730
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_setTransactionStatusDropped).call(this, transaction);
1907
1731
  }
1908
1732
  }
1733
+ }, _TransactionController_setTransactionStatusDropped = function _TransactionController_setTransactionStatusDropped(transactionMeta) {
1734
+ const updatedTransactionMeta = {
1735
+ ...transactionMeta,
1736
+ status: types_1.TransactionStatus.dropped,
1737
+ };
1738
+ this.messagingSystem.publish(`${controllerName}:transactionDropped`, {
1739
+ transactionMeta: updatedTransactionMeta,
1740
+ });
1741
+ this.updateTransaction(updatedTransactionMeta, 'TransactionController#setTransactionStatusDropped - Transaction dropped');
1742
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_onTransactionStatusChange).call(this, updatedTransactionMeta);
1743
+ }, _TransactionController_getTransactionWithActionId = function _TransactionController_getTransactionWithActionId(actionId) {
1744
+ return this.state.transactions.find((transaction) => actionId && transaction.actionId === actionId);
1745
+ }, _TransactionController_waitForTransactionFinished = async function _TransactionController_waitForTransactionFinished(transactionId) {
1746
+ return new Promise((resolve) => {
1747
+ __classPrivateFieldGet(this, _TransactionController_internalEvents, "f").once(`${transactionId}:finished`, (txMeta) => {
1748
+ resolve(txMeta);
1749
+ });
1750
+ });
1751
+ }, _TransactionController_updateTransactionMetaRSV = function _TransactionController_updateTransactionMetaRSV(transactionMeta, signedTx) {
1752
+ const transactionMetaWithRsv = (0, lodash_1.cloneDeep)(transactionMeta);
1753
+ for (const key of ['r', 's', 'v']) {
1754
+ const value = signedTx[key];
1755
+ if (value === undefined || value === null) {
1756
+ continue;
1757
+ }
1758
+ transactionMetaWithRsv[key] = (0, utils_1.add0x)(value.toString(16));
1759
+ }
1760
+ return transactionMetaWithRsv;
1761
+ }, _TransactionController_getEIP1559Compatibility = async function _TransactionController_getEIP1559Compatibility(networkClientId) {
1762
+ const currentNetworkIsEIP1559Compatible = await __classPrivateFieldGet(this, _TransactionController_getCurrentNetworkEIP1559Compatibility, "f").call(this, networkClientId);
1763
+ const currentAccountIsEIP1559Compatible = await __classPrivateFieldGet(this, _TransactionController_getCurrentAccountEIP1559Compatibility, "f").call(this);
1764
+ return (currentNetworkIsEIP1559Compatible && currentAccountIsEIP1559Compatible);
1909
1765
  }, _TransactionController_signTransaction = async function _TransactionController_signTransaction(transactionMeta) {
1910
1766
  const { isExternalSign, txParams } = transactionMeta;
1911
1767
  if (isExternalSign) {
@@ -1921,45 +1777,72 @@ _TransactionController_afterAdd = new WeakMap(), _TransactionController_internal
1921
1777
  transactionMeta,
1922
1778
  });
1923
1779
  const unsignedEthTx = (0, prepare_1.prepareTransaction)(transactionMeta.chainId, finalTxParams);
1924
- this.approvingTransactionIds.add(transactionMeta.id);
1780
+ __classPrivateFieldGet(this, _TransactionController_approvingTransactionIds, "f").add(transactionMeta.id);
1925
1781
  const signedTx = await new Promise((resolve, reject) => {
1926
- this.sign?.(unsignedEthTx, from, ...this.getAdditionalSignArguments(transactionMeta)).then(resolve, reject);
1927
- this.signAbortCallbacks.set(transactionMeta.id, () => reject(new Error('Signing aborted by user')));
1782
+ __classPrivateFieldGet(this, _TransactionController_sign, "f")?.call(this, unsignedEthTx, from, ...__classPrivateFieldGet(this, _TransactionController_getAdditionalSignArguments, "f").call(this, transactionMeta)).then(resolve, reject);
1783
+ __classPrivateFieldGet(this, _TransactionController_signAbortCallbacks, "f").set(transactionMeta.id, () => reject(new Error('Signing aborted by user')));
1928
1784
  });
1929
- this.signAbortCallbacks.delete(transactionMeta.id);
1785
+ __classPrivateFieldGet(this, _TransactionController_signAbortCallbacks, "f").delete(transactionMeta.id);
1930
1786
  if (!signedTx) {
1931
1787
  (0, logger_1.projectLogger)('Skipping signed status as no signed transaction');
1932
1788
  return undefined;
1933
1789
  }
1934
1790
  const transactionMetaFromHook = (0, lodash_1.cloneDeep)(transactionMeta);
1935
- if (!this.afterSign(transactionMetaFromHook, signedTx)) {
1791
+ if (!__classPrivateFieldGet(this, _TransactionController_afterSign, "f").call(this, transactionMetaFromHook, signedTx)) {
1936
1792
  this.updateTransaction(transactionMetaFromHook, 'TransactionController#signTransaction - Update after sign');
1937
1793
  (0, logger_1.projectLogger)('Skipping signed status based on hook');
1938
1794
  return undefined;
1939
1795
  }
1940
1796
  const transactionMetaWithRsv = {
1941
- ...this.updateTransactionMetaRSV(transactionMetaFromHook, signedTx),
1797
+ ...__classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionMetaRSV).call(this, transactionMetaFromHook, signedTx),
1942
1798
  status: types_1.TransactionStatus.signed,
1943
1799
  txParams: finalTxParams,
1944
1800
  };
1945
1801
  this.updateTransaction(transactionMetaWithRsv, 'TransactionController#approveTransaction - Transaction signed');
1946
- this.onTransactionStatusChange(transactionMetaWithRsv);
1802
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_onTransactionStatusChange).call(this, transactionMetaWithRsv);
1947
1803
  const rawTx = (0, prepare_1.serializeTransaction)(signedTx);
1948
1804
  const transactionMetaWithRawTx = (0, lodash_1.merge)({}, transactionMetaWithRsv, {
1949
1805
  rawTx,
1950
1806
  });
1951
1807
  this.updateTransaction(transactionMetaWithRawTx, 'TransactionController#approveTransaction - RawTransaction added');
1952
1808
  return rawTx;
1809
+ }, _TransactionController_onTransactionStatusChange = function _TransactionController_onTransactionStatusChange(transactionMeta) {
1810
+ this.messagingSystem.publish(`${controllerName}:transactionStatusUpdated`, {
1811
+ transactionMeta,
1812
+ });
1813
+ }, _TransactionController_getNonceTrackerTransactions = function _TransactionController_getNonceTrackerTransactions(statuses, address, chainId) {
1814
+ return (0, nonce_1.getAndFormatTransactionsForNonceTracker)(chainId, address, statuses, this.state.transactions);
1953
1815
  }, _TransactionController_onConfirmedTransaction = function _TransactionController_onConfirmedTransaction(transactionMeta) {
1954
1816
  (0, logger_1.projectLogger)('Processing confirmed transaction', transactionMeta.id);
1955
1817
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_markNonceDuplicatesDropped).call(this, transactionMeta.id);
1956
1818
  this.messagingSystem.publish(`${controllerName}:transactionConfirmed`, transactionMeta);
1957
- this.onTransactionStatusChange(transactionMeta);
1819
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_onTransactionStatusChange).call(this, transactionMeta);
1958
1820
  // Intentional given potential duration of process.
1959
- this.updatePostBalance(transactionMeta).catch((error) => {
1821
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updatePostBalance).call(this, transactionMeta).catch((error) => {
1960
1822
  (0, logger_1.projectLogger)('Error while updating post balance', error);
1961
1823
  throw error;
1962
1824
  });
1825
+ }, _TransactionController_updatePostBalance = async function _TransactionController_updatePostBalance(transactionMeta) {
1826
+ try {
1827
+ const { networkClientId, type } = transactionMeta;
1828
+ if (type !== types_1.TransactionType.swap) {
1829
+ return;
1830
+ }
1831
+ const ethQuery = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getEthQuery).call(this, { networkClientId });
1832
+ const { updatedTransactionMeta, approvalTransactionMeta } = await (0, swaps_1.updatePostTransactionBalance)(transactionMeta, {
1833
+ ethQuery,
1834
+ getTransaction: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).bind(this),
1835
+ updateTransaction: this.updateTransaction.bind(this),
1836
+ });
1837
+ this.messagingSystem.publish(`${controllerName}:postTransactionBalanceUpdated`, {
1838
+ transactionMeta: updatedTransactionMeta,
1839
+ approvalTransactionMeta,
1840
+ });
1841
+ }
1842
+ catch (error) {
1843
+ /* istanbul ignore next */
1844
+ (0, logger_1.projectLogger)('Error while updating post transaction balance', error);
1845
+ }
1963
1846
  }, _TransactionController_createNonceTracker = function _TransactionController_createNonceTracker({ provider, blockTracker, chainId, }) {
1964
1847
  return new nonce_tracker_1.NonceTracker({
1965
1848
  // TODO: Fix types
@@ -1968,7 +1851,7 @@ _TransactionController_afterAdd = new WeakMap(), _TransactionController_internal
1968
1851
  // TODO: Fix types
1969
1852
  blockTracker,
1970
1853
  getPendingTransactions: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getNonceTrackerPendingTransactions).bind(this, chainId),
1971
- getConfirmedTransactions: this.getNonceTrackerTransactions.bind(this, [types_1.TransactionStatus.confirmed], chainId),
1854
+ getConfirmedTransactions: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getNonceTrackerTransactions).bind(this, [types_1.TransactionStatus.confirmed], chainId),
1972
1855
  });
1973
1856
  }, _TransactionController_createPendingTransactionTracker = function _TransactionController_createPendingTransactionTracker({ provider, blockTracker, chainId, networkClientId, }) {
1974
1857
  const ethQuery = new eth_query_1.default(provider);
@@ -1983,11 +1866,11 @@ _TransactionController_afterAdd = new WeakMap(), _TransactionController_internal
1983
1866
  chainId,
1984
1867
  }),
1985
1868
  messenger: this.messagingSystem,
1986
- publishTransaction: (_ethQuery, transactionMeta) => this.publishTransaction(_ethQuery, transactionMeta, {
1869
+ publishTransaction: (_ethQuery, transactionMeta) => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_publishTransaction).call(this, _ethQuery, transactionMeta, {
1987
1870
  skipSubmitHistory: true,
1988
1871
  }),
1989
1872
  hooks: {
1990
- beforeCheckPendingTransaction: this.beforeCheckPendingTransaction.bind(this),
1873
+ beforeCheckPendingTransaction: __classPrivateFieldGet(this, _TransactionController_beforeCheckPendingTransaction, "f").bind(this),
1991
1874
  },
1992
1875
  });
1993
1876
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_addPendingTransactionTrackerListeners).call(this, pendingTransactionTracker);
@@ -1995,7 +1878,7 @@ _TransactionController_afterAdd = new WeakMap(), _TransactionController_internal
1995
1878
  }, _TransactionController_stopAllTracking = function _TransactionController_stopAllTracking() {
1996
1879
  __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").stopAllTracking();
1997
1880
  }, _TransactionController_addIncomingTransactionHelperListeners = function _TransactionController_addIncomingTransactionHelperListeners(incomingTransactionHelper) {
1998
- incomingTransactionHelper.hub.on('transactions', this.onIncomingTransactions.bind(this));
1881
+ incomingTransactionHelper.hub.on('transactions', __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_onIncomingTransactions).bind(this));
1999
1882
  }, _TransactionController_removePendingTransactionTrackerListeners = function _TransactionController_removePendingTransactionTrackerListeners(pendingTransactionTracker) {
2000
1883
  pendingTransactionTracker.hub.removeAllListeners('transaction-confirmed');
2001
1884
  pendingTransactionTracker.hub.removeAllListeners('transaction-dropped');
@@ -2003,17 +1886,30 @@ _TransactionController_afterAdd = new WeakMap(), _TransactionController_internal
2003
1886
  pendingTransactionTracker.hub.removeAllListeners('transaction-updated');
2004
1887
  }, _TransactionController_addPendingTransactionTrackerListeners = function _TransactionController_addPendingTransactionTrackerListeners(pendingTransactionTracker) {
2005
1888
  pendingTransactionTracker.hub.on('transaction-confirmed', __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_onConfirmedTransaction).bind(this));
2006
- pendingTransactionTracker.hub.on('transaction-dropped', this.setTransactionStatusDropped.bind(this));
2007
- pendingTransactionTracker.hub.on('transaction-failed', this.failTransaction.bind(this));
1889
+ pendingTransactionTracker.hub.on('transaction-dropped', __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_setTransactionStatusDropped).bind(this));
1890
+ pendingTransactionTracker.hub.on('transaction-failed', __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_failTransaction).bind(this));
2008
1891
  pendingTransactionTracker.hub.on('transaction-updated', this.updateTransaction.bind(this));
2009
1892
  }, _TransactionController_getNonceTrackerPendingTransactions = function _TransactionController_getNonceTrackerPendingTransactions(chainId, address) {
2010
- const standardPendingTransactions = this.getNonceTrackerTransactions([
1893
+ const standardPendingTransactions = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getNonceTrackerTransactions).call(this, [
2011
1894
  types_1.TransactionStatus.approved,
2012
1895
  types_1.TransactionStatus.signed,
2013
1896
  types_1.TransactionStatus.submitted,
2014
1897
  ], address, chainId);
2015
- const externalPendingTransactions = this.getExternalPendingTransactions(address, chainId);
1898
+ const externalPendingTransactions = __classPrivateFieldGet(this, _TransactionController_getExternalPendingTransactions, "f").call(this, address, chainId);
2016
1899
  return [...standardPendingTransactions, ...externalPendingTransactions];
1900
+ }, _TransactionController_publishTransactionForRetry = async function _TransactionController_publishTransactionForRetry(ethQuery, transactionMeta) {
1901
+ try {
1902
+ return await __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_publishTransaction).call(this, ethQuery, transactionMeta);
1903
+ }
1904
+ catch (error) {
1905
+ if (__classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_isTransactionAlreadyConfirmedError).call(this, error)) {
1906
+ throw new Error('Previous transaction is already confirmed');
1907
+ }
1908
+ throw error;
1909
+ }
1910
+ }, _TransactionController_isTransactionAlreadyConfirmedError = function _TransactionController_isTransactionAlreadyConfirmedError(error) {
1911
+ return (error?.message?.includes('nonce too low') ||
1912
+ error?.data?.message?.includes('nonce too low'));
2017
1913
  }, _TransactionController_getGasFeeFlows = function _TransactionController_getGasFeeFlows() {
2018
1914
  if (__classPrivateFieldGet(this, _TransactionController_testGasFeeFlows, "f")) {
2019
1915
  return [new TestGasFeeFlow_1.TestGasFeeFlow()];
@@ -2042,13 +1938,13 @@ _TransactionController_afterAdd = new WeakMap(), _TransactionController_internal
2042
1938
  if (!skipResimulateCheck && __classPrivateFieldGet(this, _TransactionController_isSimulationEnabled, "f").call(this)) {
2043
1939
  resimulateResponse = (0, ResimulateHelper_1.shouldResimulate)(originalTransactionMeta, transactionMeta);
2044
1940
  }
2045
- const shouldSkipHistory = this.isHistoryDisabled || skipHistory;
1941
+ const shouldSkipHistory = __classPrivateFieldGet(this, _TransactionController_isHistoryDisabled, "f") || skipHistory;
2046
1942
  if (!shouldSkipHistory) {
2047
1943
  transactionMeta = (0, history_1.updateTransactionHistory)(transactionMeta, note ?? 'Transaction updated');
2048
1944
  }
2049
1945
  state.transactions[index] = transactionMeta;
2050
1946
  });
2051
- const transactionMeta = this.getTransaction(transactionId);
1947
+ const transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionId);
2052
1948
  if (resimulateResponse?.resimulate) {
2053
1949
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateSimulationData).call(this, transactionMeta, {
2054
1950
  blockTime: resimulateResponse.blockTime,
@@ -2081,7 +1977,7 @@ _TransactionController_afterAdd = new WeakMap(), _TransactionController_internal
2081
1977
  try {
2082
1978
  const { count } = await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Account Address Relationship', parentContext: traceContext }, () => (0, accounts_api_1.getAccountAddressRelationship)(request));
2083
1979
  const isFirstTimeInteraction = count === undefined ? undefined : count === 0;
2084
- const finalTransactionMeta = this.getTransaction(transactionId);
1980
+ const finalTransactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionId);
2085
1981
  /* istanbul ignore if */
2086
1982
  if (!finalTransactionMeta) {
2087
1983
  (0, logger_1.projectLogger)('Cannot update first time interaction as transaction not found', transactionId);
@@ -2136,7 +2032,7 @@ _TransactionController_afterAdd = new WeakMap(), _TransactionController_internal
2136
2032
  };
2137
2033
  }
2138
2034
  }
2139
- const finalTransactionMeta = this.getTransaction(transactionId);
2035
+ const finalTransactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionId);
2140
2036
  /* istanbul ignore if */
2141
2037
  if (!finalTransactionMeta) {
2142
2038
  (0, logger_1.projectLogger)('Cannot update simulation data as transaction not found', transactionId, simulationData);
@@ -2157,7 +2053,7 @@ _TransactionController_afterAdd = new WeakMap(), _TransactionController_internal
2157
2053
  txMeta,
2158
2054
  gasFeeEstimates,
2159
2055
  gasFeeEstimatesLoaded,
2160
- isTxParamsGasFeeUpdatesEnabled: this.isTxParamsGasFeeUpdatesEnabled,
2056
+ isTxParamsGasFeeUpdatesEnabled: __classPrivateFieldGet(this, _TransactionController_isAutomaticGasFeeUpdateEnabled, "f"),
2161
2057
  layer1GasFee,
2162
2058
  });
2163
2059
  });
@@ -2170,7 +2066,7 @@ _TransactionController_afterAdd = new WeakMap(), _TransactionController_internal
2170
2066
  .map((account) => account.address);
2171
2067
  }, _TransactionController_updateSubmitHistory = function _TransactionController_updateSubmitHistory(transactionMeta, hash) {
2172
2068
  const { chainId, networkClientId, origin, rawTx, txParams } = transactionMeta;
2173
- const { networkConfigurationsByChainId } = this.getNetworkState();
2069
+ const { networkConfigurationsByChainId } = __classPrivateFieldGet(this, _TransactionController_getNetworkState, "f").call(this);
2174
2070
  const networkConfiguration = networkConfigurationsByChainId[chainId];
2175
2071
  const endpoint = networkConfiguration?.rpcEndpoints.find((currentEndpoint) => currentEndpoint.networkClientId === networkClientId);
2176
2072
  const networkUrl = endpoint?.url;
@@ -2211,7 +2107,7 @@ _TransactionController_afterAdd = new WeakMap(), _TransactionController_internal
2211
2107
  }, _TransactionController_deleteTransaction = function _TransactionController_deleteTransaction(transactionId) {
2212
2108
  this.update((state) => {
2213
2109
  const transactions = state.transactions.filter(({ id }) => id !== transactionId);
2214
- state.transactions = this.trimTransactionsForState(transactions);
2110
+ state.transactions = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_trimTransactionsForState).call(this, transactions);
2215
2111
  });
2216
2112
  }, _TransactionController_isRejectError = function _TransactionController_isRejectError(error) {
2217
2113
  return [
@@ -2227,5 +2123,33 @@ _TransactionController_afterAdd = new WeakMap(), _TransactionController_internal
2227
2123
  });
2228
2124
  }
2229
2125
  throw error;
2126
+ }, _TransactionController_failTransaction = function _TransactionController_failTransaction(transactionMeta, error, actionId) {
2127
+ let newTransactionMeta;
2128
+ try {
2129
+ newTransactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
2130
+ transactionId: transactionMeta.id,
2131
+ note: 'TransactionController#failTransaction - Add error message and set status to failed',
2132
+ skipValidation: true,
2133
+ }, (draftTransactionMeta) => {
2134
+ draftTransactionMeta.status = types_1.TransactionStatus.failed;
2135
+ draftTransactionMeta.error = (0, utils_2.normalizeTxError)(error);
2136
+ });
2137
+ }
2138
+ catch (err) {
2139
+ (0, logger_1.projectLogger)('Failed to mark transaction as failed', err);
2140
+ newTransactionMeta = {
2141
+ ...transactionMeta,
2142
+ status: types_1.TransactionStatus.failed,
2143
+ error: (0, utils_2.normalizeTxError)(error),
2144
+ };
2145
+ }
2146
+ this.messagingSystem.publish(`${controllerName}:transactionFailed`, {
2147
+ actionId,
2148
+ error: error.message,
2149
+ transactionMeta: newTransactionMeta,
2150
+ });
2151
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_onTransactionStatusChange).call(this, newTransactionMeta);
2152
+ this.messagingSystem.publish(`${controllerName}:transactionFinished`, newTransactionMeta);
2153
+ __classPrivateFieldGet(this, _TransactionController_internalEvents, "f").emit(`${transactionMeta.id}:finished`, newTransactionMeta);
2230
2154
  };
2231
2155
  //# sourceMappingURL=TransactionController.cjs.map