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