@metamask/transaction-controller 48.2.0 → 50.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/CHANGELOG.md +45 -1
  2. package/dist/TransactionController.cjs +67 -48
  3. package/dist/TransactionController.cjs.map +1 -1
  4. package/dist/TransactionController.d.cts +5 -8
  5. package/dist/TransactionController.d.cts.map +1 -1
  6. package/dist/TransactionController.d.mts +5 -8
  7. package/dist/TransactionController.d.mts.map +1 -1
  8. package/dist/TransactionController.mjs +68 -49
  9. package/dist/TransactionController.mjs.map +1 -1
  10. package/dist/index.cjs.map +1 -1
  11. package/dist/index.d.cts +1 -1
  12. package/dist/index.d.cts.map +1 -1
  13. package/dist/index.d.mts +1 -1
  14. package/dist/index.d.mts.map +1 -1
  15. package/dist/index.mjs.map +1 -1
  16. package/dist/types.cjs +5 -0
  17. package/dist/types.cjs.map +1 -1
  18. package/dist/types.d.cts +36 -13
  19. package/dist/types.d.cts.map +1 -1
  20. package/dist/types.d.mts +36 -13
  21. package/dist/types.d.mts.map +1 -1
  22. package/dist/types.mjs +5 -0
  23. package/dist/types.mjs.map +1 -1
  24. package/dist/utils/batch.cjs +47 -9
  25. package/dist/utils/batch.cjs.map +1 -1
  26. package/dist/utils/batch.d.cts +4 -2
  27. package/dist/utils/batch.d.cts.map +1 -1
  28. package/dist/utils/batch.d.mts +4 -2
  29. package/dist/utils/batch.d.mts.map +1 -1
  30. package/dist/utils/batch.mjs +49 -11
  31. package/dist/utils/batch.mjs.map +1 -1
  32. package/dist/utils/eip7702.cjs +21 -9
  33. package/dist/utils/eip7702.cjs.map +1 -1
  34. package/dist/utils/eip7702.d.cts +10 -1
  35. package/dist/utils/eip7702.d.cts.map +1 -1
  36. package/dist/utils/eip7702.d.mts +10 -1
  37. package/dist/utils/eip7702.d.mts.map +1 -1
  38. package/dist/utils/eip7702.mjs +19 -8
  39. package/dist/utils/eip7702.mjs.map +1 -1
  40. package/dist/utils/feature-flags.cjs +26 -5
  41. package/dist/utils/feature-flags.cjs.map +1 -1
  42. package/dist/utils/feature-flags.d.cts +27 -7
  43. package/dist/utils/feature-flags.d.cts.map +1 -1
  44. package/dist/utils/feature-flags.d.mts +27 -7
  45. package/dist/utils/feature-flags.d.mts.map +1 -1
  46. package/dist/utils/feature-flags.mjs +24 -4
  47. package/dist/utils/feature-flags.mjs.map +1 -1
  48. package/dist/utils/signature.cjs +26 -0
  49. package/dist/utils/signature.cjs.map +1 -0
  50. package/dist/utils/signature.d.cts +11 -0
  51. package/dist/utils/signature.d.cts.map +1 -0
  52. package/dist/utils/signature.d.mts +11 -0
  53. package/dist/utils/signature.d.mts.map +1 -0
  54. package/dist/utils/signature.mjs +22 -0
  55. package/dist/utils/signature.mjs.map +1 -0
  56. package/dist/utils/validation.cjs +5 -1
  57. package/dist/utils/validation.cjs.map +1 -1
  58. package/dist/utils/validation.d.cts +3 -1
  59. package/dist/utils/validation.d.cts.map +1 -1
  60. package/dist/utils/validation.d.mts +3 -1
  61. package/dist/utils/validation.d.mts.map +1 -1
  62. package/dist/utils/validation.mjs +5 -1
  63. package/dist/utils/validation.mjs.map +1 -1
  64. package/package.json +3 -2
package/CHANGELOG.md CHANGED
@@ -7,6 +7,48 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [50.0.0]
11
+
12
+ ### Added
13
+
14
+ - Add additional metadata for batch metrics ([#5488](https://github.com/MetaMask/core/pull/5488))
15
+ - Add `delegationAddress` to `TransactionMetadata`.
16
+ - Add `NestedTransactionMetadata` type containing `BatchTransactionParams` and `type`.
17
+ - Add optional `type` to `TransactionBatchSingleRequest`.
18
+ - Verify EIP-7702 contract address using signatures ([#5472](https://github.com/MetaMask/core/pull/5472))
19
+ - Add optional `publicKeyEIP7702` property to constructor.
20
+ - Add dependency on `^5.7.0` of `@ethersproject/wallet`.
21
+
22
+ ### Changed
23
+
24
+ - **BREAKING:** Bump `@metamask/accounts-controller` peer dependency to `^26.1.0` ([#5481](https://github.com/MetaMask/core/pull/5481))
25
+ - **BREAKING:** Add additional metadata for batch metrics ([#5488](https://github.com/MetaMask/core/pull/5488))
26
+ - Change `error` in `TransactionMetadata` to optional for all statuses.
27
+ - Change `nestedTransactions` in `TransactionMetadata` to array of `NestedTransactionMetadata`.
28
+ - Throw if `addTransactionBatch` called with external origin and size limit exceeded ([#5489](https://github.com/MetaMask/core/pull/5489))
29
+ - Verify EIP-7702 contract address using signatures ([#5472](https://github.com/MetaMask/core/pull/5472))
30
+ - Use new `contracts` property from feature flags instead of `contractAddresses`.
31
+
32
+ ## [49.0.0]
33
+
34
+ ### Added
35
+
36
+ - Add `revertDelegation` to `TransactionType` ([#5468](https://github.com/MetaMask/core/pull/5468))
37
+ - Add optional batch ID to metadata ([#5462](https://github.com/MetaMask/core/pull/5462))
38
+ - Add optional `batchId` property to `TransactionMeta`.
39
+ - Add optional `transactionHash` to `TransactionReceipt`.
40
+ - Add optional `data` to `Log`.
41
+ - Add optional `batchId` to `TransactionBatchRequest`.
42
+ - Add optional `batchId` to `addTransaction` options.
43
+ - Throw if `batchId` already exists on a transaction.
44
+
45
+ ### Changed
46
+
47
+ - **BREAKING:** Add optional batch ID to metadata ([#5462](https://github.com/MetaMask/core/pull/5462))
48
+ - Change `batchId` in `TransactionBatchResult` to `Hex`.
49
+ - Return `batchId` from `addTransactionBatch` if provided.
50
+ - Generate random batch ID if no `batchId` provided.
51
+
10
52
  ## [48.2.0]
11
53
 
12
54
  ### Changed
@@ -1338,7 +1380,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1338
1380
 
1339
1381
  All changes listed after this point were applied to this package following the monorepo conversion.
1340
1382
 
1341
- [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@48.2.0...HEAD
1383
+ [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@50.0.0...HEAD
1384
+ [50.0.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@49.0.0...@metamask/transaction-controller@50.0.0
1385
+ [49.0.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@48.2.0...@metamask/transaction-controller@49.0.0
1342
1386
  [48.2.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@48.1.0...@metamask/transaction-controller@48.2.0
1343
1387
  [48.1.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@48.0.0...@metamask/transaction-controller@48.1.0
1344
1388
  [48.0.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@47.0.0...@metamask/transaction-controller@48.0.0
@@ -13,7 +13,7 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
13
13
  var __importDefault = (this && this.__importDefault) || function (mod) {
14
14
  return (mod && mod.__esModule) ? mod : { "default": mod };
15
15
  };
16
- var _TransactionController_instances, _TransactionController_internalEvents, _TransactionController_methodDataHelper, _TransactionController_incomingTransactionChainIds, _TransactionController_incomingTransactionHelper, _TransactionController_incomingTransactionOptions, _TransactionController_pendingTransactionOptions, _TransactionController_trace, _TransactionController_transactionHistoryLimit, _TransactionController_isFirstTimeInteractionEnabled, _TransactionController_isSimulationEnabled, _TransactionController_testGasFeeFlows, _TransactionController_multichainTrackingHelper, _TransactionController_retryTransaction, _TransactionController_getChainId, _TransactionController_getNetworkClientId, _TransactionController_getEthQuery, _TransactionController_getProvider, _TransactionController_createNonceTracker, _TransactionController_createPendingTransactionTracker, _TransactionController_checkForPendingTransactionAndStartPolling, _TransactionController_stopAllTracking, _TransactionController_addIncomingTransactionHelperListeners, _TransactionController_removePendingTransactionTrackerListeners, _TransactionController_addPendingTransactionTrackerListeners, _TransactionController_getNonceTrackerPendingTransactions, _TransactionController_getGasFeeFlows, _TransactionController_getLayer1GasFeeFlows, _TransactionController_updateTransactionInternal, _TransactionController_updateFirstTimeInteraction, _TransactionController_updateSimulationData, _TransactionController_onGasFeePollerTransactionUpdate, _TransactionController_getSelectedAccount, _TransactionController_getInternalAccounts, _TransactionController_updateSubmitHistory, _TransactionController_updateGasEstimate;
16
+ var _TransactionController_instances, _TransactionController_internalEvents, _TransactionController_methodDataHelper, _TransactionController_incomingTransactionChainIds, _TransactionController_incomingTransactionHelper, _TransactionController_incomingTransactionOptions, _TransactionController_pendingTransactionOptions, _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_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_deleteTransaction, _TransactionController_isRejectError, _TransactionController_rejectTransactionAndThrow;
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.TransactionController = exports.ApprovalState = exports.SPEED_UP_RATE = exports.CANCEL_RATE = void 0;
19
19
  const base_controller_1 = require("@metamask/base-controller");
@@ -156,7 +156,7 @@ class TransactionController extends base_controller_1.BaseController {
156
156
  * @param options - The controller options.
157
157
  */
158
158
  constructor(options) {
159
- const { disableHistory, disableSendFlowHistory, disableSwaps, getCurrentAccountEIP1559Compatibility, getCurrentNetworkEIP1559Compatibility, getExternalPendingTransactions, getGasFeeEstimates, getNetworkClientRegistry, getNetworkState, getPermittedAccounts, getSavedGasFees, incomingTransactions = {}, isFirstTimeInteractionEnabled, isSimulationEnabled, messenger, pendingTransactions = {}, securityProviderRequest, sign, state, testGasFeeFlows, trace, transactionHistoryLimit = 40, hooks, } = options;
159
+ const { disableHistory, disableSendFlowHistory, disableSwaps, getCurrentAccountEIP1559Compatibility, getCurrentNetworkEIP1559Compatibility, getExternalPendingTransactions, getGasFeeEstimates, getNetworkClientRegistry, getNetworkState, getPermittedAccounts, getSavedGasFees, incomingTransactions = {}, isFirstTimeInteractionEnabled, isSimulationEnabled, messenger, pendingTransactions = {}, publicKeyEIP7702, securityProviderRequest, sign, state, testGasFeeFlows, trace, transactionHistoryLimit = 40, hooks, } = options;
160
160
  super({
161
161
  name: controllerName,
162
162
  metadata,
@@ -175,6 +175,7 @@ class TransactionController extends base_controller_1.BaseController {
175
175
  _TransactionController_incomingTransactionHelper.set(this, void 0);
176
176
  _TransactionController_incomingTransactionOptions.set(this, void 0);
177
177
  _TransactionController_pendingTransactionOptions.set(this, void 0);
178
+ _TransactionController_publicKeyEIP7702.set(this, void 0);
178
179
  this.signAbortCallbacks = new Map();
179
180
  _TransactionController_trace.set(this, void 0);
180
181
  _TransactionController_transactionHistoryLimit.set(this, void 0);
@@ -205,6 +206,7 @@ class TransactionController extends base_controller_1.BaseController {
205
206
  this.securityProviderRequest = securityProviderRequest;
206
207
  __classPrivateFieldSet(this, _TransactionController_incomingTransactionOptions, incomingTransactions, "f");
207
208
  __classPrivateFieldSet(this, _TransactionController_pendingTransactionOptions, pendingTransactions, "f");
209
+ __classPrivateFieldSet(this, _TransactionController_publicKeyEIP7702, publicKeyEIP7702, "f");
208
210
  __classPrivateFieldSet(this, _TransactionController_transactionHistoryLimit, transactionHistoryLimit, "f");
209
211
  this.sign = sign;
210
212
  __classPrivateFieldSet(this, _TransactionController_testGasFeeFlows, testGasFeeFlows === true, "f");
@@ -320,6 +322,7 @@ class TransactionController extends base_controller_1.BaseController {
320
322
  getEthQuery: (networkClientId) => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getEthQuery).call(this, { networkClientId }),
321
323
  getInternalAccounts: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getInternalAccounts).bind(this),
322
324
  messenger: this.messagingSystem,
325
+ publicKeyEIP7702: __classPrivateFieldGet(this, _TransactionController_publicKeyEIP7702, "f"),
323
326
  request,
324
327
  });
325
328
  }
@@ -334,6 +337,7 @@ class TransactionController extends base_controller_1.BaseController {
334
337
  address,
335
338
  getEthQuery: (chainId) => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getEthQuery).call(this, { chainId }),
336
339
  messenger: this.messagingSystem,
340
+ publicKeyEIP7702: __classPrivateFieldGet(this, _TransactionController_publicKeyEIP7702, "f"),
337
341
  });
338
342
  }
339
343
  /**
@@ -344,6 +348,7 @@ class TransactionController extends base_controller_1.BaseController {
344
348
  * @param txParams - Standard parameters for an Ethereum transaction.
345
349
  * @param options - Additional options to control how the transaction is added.
346
350
  * @param options.actionId - Unique ID to prevent duplicate requests.
351
+ * @param options.batchId - A custom ID for the batch this transaction belongs to.
347
352
  * @param options.deviceConfirmedOn - An enum to indicate what device confirmed the transaction.
348
353
  * @param options.method - RPC method that requested the transaction.
349
354
  * @param options.nestedTransactions - Params for any nested transactions encoded in the data.
@@ -361,11 +366,15 @@ class TransactionController extends base_controller_1.BaseController {
361
366
  */
362
367
  async addTransaction(txParams, options) {
363
368
  (0, logger_1.projectLogger)('Adding transaction', txParams, options);
364
- const { actionId, deviceConfirmedOn, method, nestedTransactions, networkClientId, origin, requireApproval, securityAlertResponse, sendFlowHistory, swaps = {}, traceContext, type, } = options;
369
+ const { actionId, batchId, deviceConfirmedOn, method, nestedTransactions, networkClientId, origin, requireApproval, securityAlertResponse, sendFlowHistory, swaps = {}, traceContext, type, } = options;
365
370
  txParams = (0, utils_2.normalizeTransactionParams)(txParams);
366
371
  if (!__classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").has(networkClientId)) {
367
372
  throw new Error(`Network client not found - ${networkClientId}`);
368
373
  }
374
+ const chainId = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getChainId).call(this, networkClientId);
375
+ const ethQuery = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getEthQuery).call(this, {
376
+ networkClientId,
377
+ });
369
378
  const permittedAddresses = origin === undefined
370
379
  ? undefined
371
380
  : await this.getPermittedAccounts?.(origin);
@@ -381,14 +390,17 @@ class TransactionController extends base_controller_1.BaseController {
381
390
  txParams,
382
391
  type,
383
392
  });
393
+ const delegationAddressPromise = (0, eip7702_1.getDelegationAddress)(txParams.from, ethQuery).catch(() => undefined);
384
394
  const isEIP1559Compatible = await this.getEIP1559Compatibility(networkClientId);
385
395
  (0, validation_1.validateTxParams)(txParams, isEIP1559Compatible);
396
+ const isDuplicateBatchId = batchId?.length &&
397
+ this.state.transactions.some((tx) => tx.batchId?.toLowerCase() === batchId?.toLowerCase());
398
+ if (isDuplicateBatchId) {
399
+ throw rpc_errors_1.rpcErrors.invalidInput('Batch ID already exists');
400
+ }
386
401
  const dappSuggestedGasFees = this.generateDappSuggestedGasFees(txParams, origin);
387
- const chainId = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getChainId).call(this, networkClientId);
388
- const ethQuery = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getEthQuery).call(this, {
389
- networkClientId,
390
- });
391
402
  const transactionType = type ?? (await (0, transaction_type_1.determineTransactionType)(txParams, ethQuery)).type;
403
+ const delegationAddress = await delegationAddressPromise;
392
404
  const existingTransactionMeta = this.getTransactionWithActionId(actionId);
393
405
  // If a request to add a transaction with the same actionId is submitted again, a new transaction will not be created for it.
394
406
  let addedTransactionMeta = existingTransactionMeta
@@ -396,8 +408,10 @@ class TransactionController extends base_controller_1.BaseController {
396
408
  : {
397
409
  // Add actionId to txMeta to check if same actionId is seen again
398
410
  actionId,
411
+ batchId,
399
412
  chainId,
400
413
  dappSuggestedGasFees,
414
+ delegationAddress,
401
415
  deviceConfirmedOn,
402
416
  id: (0, uuid_1.v1)(),
403
417
  isFirstTimeInteraction: undefined,
@@ -432,7 +446,7 @@ class TransactionController extends base_controller_1.BaseController {
432
446
  }
433
447
  addedTransactionMeta = (0, swaps_1.updateSwapsTransaction)(addedTransactionMeta, transactionType, swaps, {
434
448
  isSwapsDisabled: this.isSwapsDisabled,
435
- cancelTransaction: this.cancelTransaction.bind(this),
449
+ cancelTransaction: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_rejectTransaction).bind(this),
436
450
  messenger: this.messagingSystem,
437
451
  });
438
452
  this.addMetadata(addedTransactionMeta);
@@ -1232,18 +1246,13 @@ class TransactionController extends base_controller_1.BaseController {
1232
1246
  actionId,
1233
1247
  });
1234
1248
  }
1235
- // TODO: Replace `any` with type
1236
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
1237
1249
  }
1238
- catch (error) {
1250
+ catch (rawError) {
1251
+ const error = rawError;
1239
1252
  const { isCompleted: isTxCompleted } = this.isTransactionCompleted(transactionId);
1240
1253
  if (!isTxCompleted) {
1241
- if (error?.code === rpc_errors_1.errorCodes.provider.userRejectedRequest) {
1242
- this.cancelTransaction(transactionId, actionId);
1243
- throw rpc_errors_1.providerErrors.userRejectedRequest({
1244
- message: 'MetaMask Tx Signature: User denied transaction signature.',
1245
- data: error?.data,
1246
- });
1254
+ if (__classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_isRejectError).call(this, error)) {
1255
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_rejectTransactionAndThrow).call(this, transactionId, actionId, error);
1247
1256
  }
1248
1257
  else {
1249
1258
  this.failTransaction(meta, error, actionId);
@@ -1254,8 +1263,9 @@ class TransactionController extends base_controller_1.BaseController {
1254
1263
  const finalMeta = await finishedPromise;
1255
1264
  switch (finalMeta?.status) {
1256
1265
  case types_1.TransactionStatus.failed:
1257
- resultCallbacks?.error(finalMeta.error);
1258
- throw rpc_errors_1.rpcErrors.internal(finalMeta.error.message);
1266
+ const error = finalMeta.error;
1267
+ resultCallbacks?.error(error);
1268
+ throw rpc_errors_1.rpcErrors.internal(error.message);
1259
1269
  case types_1.TransactionStatus.submitted:
1260
1270
  resultCallbacks?.success();
1261
1271
  return finalMeta.hash;
@@ -1382,34 +1392,6 @@ class TransactionController extends base_controller_1.BaseController {
1382
1392
  }
1383
1393
  return transactionHash;
1384
1394
  }
1385
- /**
1386
- * Cancels a transaction based on its ID by setting its status to "rejected"
1387
- * and emitting a `<tx.id>:finished` hub event.
1388
- *
1389
- * @param transactionId - The ID of the transaction to cancel.
1390
- * @param actionId - The actionId passed from UI
1391
- */
1392
- cancelTransaction(transactionId, actionId) {
1393
- const transactionMeta = this.state.transactions.find(({ id }) => id === transactionId);
1394
- if (!transactionMeta) {
1395
- return;
1396
- }
1397
- this.update((state) => {
1398
- const transactions = state.transactions.filter(({ id }) => id !== transactionId);
1399
- state.transactions = this.trimTransactionsForState(transactions);
1400
- });
1401
- const updatedTransactionMeta = {
1402
- ...transactionMeta,
1403
- status: types_1.TransactionStatus.rejected,
1404
- };
1405
- this.messagingSystem.publish(`${controllerName}:transactionFinished`, updatedTransactionMeta);
1406
- __classPrivateFieldGet(this, _TransactionController_internalEvents, "f").emit(`${transactionMeta.id}:finished`, updatedTransactionMeta);
1407
- this.messagingSystem.publish(`${controllerName}:transactionRejected`, {
1408
- transactionMeta: updatedTransactionMeta,
1409
- actionId,
1410
- });
1411
- this.onTransactionStatusChange(updatedTransactionMeta);
1412
- }
1413
1395
  /**
1414
1396
  * Trim the amount of transactions that are set on the state. Checks
1415
1397
  * if the length of the tx history is longer then desired persistence
@@ -1787,7 +1769,7 @@ class TransactionController extends base_controller_1.BaseController {
1787
1769
  }
1788
1770
  }
1789
1771
  exports.TransactionController = TransactionController;
1790
- _TransactionController_internalEvents = new WeakMap(), _TransactionController_methodDataHelper = new WeakMap(), _TransactionController_incomingTransactionChainIds = new WeakMap(), _TransactionController_incomingTransactionHelper = new WeakMap(), _TransactionController_incomingTransactionOptions = new WeakMap(), _TransactionController_pendingTransactionOptions = 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, }) {
1772
+ _TransactionController_internalEvents = new WeakMap(), _TransactionController_methodDataHelper = new WeakMap(), _TransactionController_incomingTransactionChainIds = new WeakMap(), _TransactionController_incomingTransactionHelper = new WeakMap(), _TransactionController_incomingTransactionOptions = new WeakMap(), _TransactionController_pendingTransactionOptions = 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, }) {
1791
1773
  // If transaction is found for same action id, do not create a new transaction.
1792
1774
  if (this.getTransactionWithActionId(actionId)) {
1793
1775
  return;
@@ -1852,6 +1834,24 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
1852
1834
  actionId,
1853
1835
  });
1854
1836
  afterSubmit?.(newTransactionMeta);
1837
+ }, _TransactionController_rejectTransaction = function _TransactionController_rejectTransaction(transactionId, actionId, error) {
1838
+ const transactionMeta = this.getTransaction(transactionId);
1839
+ if (!transactionMeta) {
1840
+ return;
1841
+ }
1842
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_deleteTransaction).call(this, transactionId);
1843
+ const updatedTransactionMeta = {
1844
+ ...transactionMeta,
1845
+ status: types_1.TransactionStatus.rejected,
1846
+ error: (0, utils_2.normalizeTxError)(error ?? rpc_errors_1.providerErrors.userRejectedRequest()),
1847
+ };
1848
+ this.messagingSystem.publish(`${controllerName}:transactionFinished`, updatedTransactionMeta);
1849
+ __classPrivateFieldGet(this, _TransactionController_internalEvents, "f").emit(`${transactionMeta.id}:finished`, updatedTransactionMeta);
1850
+ this.messagingSystem.publish(`${controllerName}:transactionRejected`, {
1851
+ transactionMeta: updatedTransactionMeta,
1852
+ actionId,
1853
+ });
1854
+ this.onTransactionStatusChange(updatedTransactionMeta);
1855
1855
  }, _TransactionController_getChainId = function _TransactionController_getChainId(networkClientId) {
1856
1856
  return __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").getNetworkClient({ networkClientId })
1857
1857
  .configuration.chainId;
@@ -2099,5 +2099,24 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
2099
2099
  isCustomNetwork,
2100
2100
  txMeta: transactionMeta,
2101
2101
  });
2102
+ }, _TransactionController_deleteTransaction = function _TransactionController_deleteTransaction(transactionId) {
2103
+ this.update((state) => {
2104
+ const transactions = state.transactions.filter(({ id }) => id !== transactionId);
2105
+ state.transactions = this.trimTransactionsForState(transactions);
2106
+ });
2107
+ }, _TransactionController_isRejectError = function _TransactionController_isRejectError(error) {
2108
+ return [
2109
+ rpc_errors_1.errorCodes.provider.userRejectedRequest,
2110
+ rpc_errors_1.errorCodes.rpc.methodNotSupported,
2111
+ ].includes(error.code);
2112
+ }, _TransactionController_rejectTransactionAndThrow = function _TransactionController_rejectTransactionAndThrow(transactionId, actionId, error) {
2113
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_rejectTransaction).call(this, transactionId, actionId, error);
2114
+ if (error.code === rpc_errors_1.errorCodes.provider.userRejectedRequest) {
2115
+ throw rpc_errors_1.providerErrors.userRejectedRequest({
2116
+ message: 'MetaMask Tx Signature: User denied transaction signature.',
2117
+ data: error?.data,
2118
+ });
2119
+ }
2120
+ throw error;
2102
2121
  };
2103
2122
  //# sourceMappingURL=TransactionController.cjs.map