@metamask-previews/transaction-controller 46.0.0-preview-5b37150f → 46.0.0-preview-edbe12d8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/TransactionController.cjs +17 -53
- package/dist/TransactionController.cjs.map +1 -1
- package/dist/TransactionController.d.cts +2 -20
- package/dist/TransactionController.d.cts.map +1 -1
- package/dist/TransactionController.d.mts +2 -20
- package/dist/TransactionController.d.mts.map +1 -1
- package/dist/TransactionController.mjs +17 -53
- package/dist/TransactionController.mjs.map +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +0 -71
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +0 -71
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/dist/utils/batch.cjs +1 -123
- package/dist/utils/batch.cjs.map +1 -1
- package/dist/utils/batch.d.cts +1 -7
- package/dist/utils/batch.d.cts.map +1 -1
- package/dist/utils/batch.d.mts +1 -7
- package/dist/utils/batch.d.mts.map +1 -1
- package/dist/utils/batch.mjs +1 -123
- package/dist/utils/batch.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/hooks/CollectPublishHook.cjs +0 -84
- package/dist/hooks/CollectPublishHook.cjs.map +0 -1
- package/dist/hooks/CollectPublishHook.d.cts +0 -29
- package/dist/hooks/CollectPublishHook.d.cts.map +0 -1
- package/dist/hooks/CollectPublishHook.d.mts +0 -29
- package/dist/hooks/CollectPublishHook.d.mts.map +0 -1
- package/dist/hooks/CollectPublishHook.mjs +0 -80
- package/dist/hooks/CollectPublishHook.mjs.map +0 -1
- package/dist/hooks/ExtraTransactionsPublishHook.cjs +0 -76
- package/dist/hooks/ExtraTransactionsPublishHook.cjs.map +0 -1
- package/dist/hooks/ExtraTransactionsPublishHook.d.cts +0 -18
- package/dist/hooks/ExtraTransactionsPublishHook.d.cts.map +0 -1
- package/dist/hooks/ExtraTransactionsPublishHook.d.mts +0 -18
- package/dist/hooks/ExtraTransactionsPublishHook.d.mts.map +0 -1
- package/dist/hooks/ExtraTransactionsPublishHook.mjs +0 -72
- package/dist/hooks/ExtraTransactionsPublishHook.mjs.map +0 -1
|
@@ -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,
|
|
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;
|
|
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");
|
|
@@ -23,6 +23,7 @@ const network_controller_1 = require("@metamask/network-controller");
|
|
|
23
23
|
const nonce_tracker_1 = require("@metamask/nonce-tracker");
|
|
24
24
|
const rpc_errors_1 = require("@metamask/rpc-errors");
|
|
25
25
|
const utils_1 = require("@metamask/utils");
|
|
26
|
+
const async_mutex_1 = require("async-mutex");
|
|
26
27
|
// This package purposefully relies on Node's EventEmitter module.
|
|
27
28
|
// eslint-disable-next-line import-x/no-nodejs-modules
|
|
28
29
|
const events_1 = require("events");
|
|
@@ -41,7 +42,6 @@ const MethodDataHelper_1 = require("./helpers/MethodDataHelper.cjs");
|
|
|
41
42
|
const MultichainTrackingHelper_1 = require("./helpers/MultichainTrackingHelper.cjs");
|
|
42
43
|
const PendingTransactionTracker_1 = require("./helpers/PendingTransactionTracker.cjs");
|
|
43
44
|
const ResimulateHelper_1 = require("./helpers/ResimulateHelper.cjs");
|
|
44
|
-
const ExtraTransactionsPublishHook_1 = require("./hooks/ExtraTransactionsPublishHook.cjs");
|
|
45
45
|
const logger_1 = require("./logger.cjs");
|
|
46
46
|
const types_1 = require("./types.cjs");
|
|
47
47
|
const batch_1 = require("./utils/batch.cjs");
|
|
@@ -192,11 +192,11 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
192
192
|
_TransactionController_internalEvents.set(this, new events_1.EventEmitter());
|
|
193
193
|
this.approvingTransactionIds = new Set();
|
|
194
194
|
_TransactionController_methodDataHelper.set(this, void 0);
|
|
195
|
+
this.mutex = new async_mutex_1.Mutex();
|
|
195
196
|
_TransactionController_incomingTransactionChainIds.set(this, new Set());
|
|
196
197
|
_TransactionController_incomingTransactionHelper.set(this, void 0);
|
|
197
198
|
_TransactionController_incomingTransactionOptions.set(this, void 0);
|
|
198
199
|
_TransactionController_pendingTransactionOptions.set(this, void 0);
|
|
199
|
-
_TransactionController_publishBatchHook.set(this, void 0);
|
|
200
200
|
this.signAbortCallbacks = new Map();
|
|
201
201
|
_TransactionController_trace.set(this, void 0);
|
|
202
202
|
_TransactionController_transactionHistoryLimit.set(this, void 0);
|
|
@@ -227,7 +227,6 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
227
227
|
this.securityProviderRequest = securityProviderRequest;
|
|
228
228
|
__classPrivateFieldSet(this, _TransactionController_incomingTransactionOptions, incomingTransactions, "f");
|
|
229
229
|
__classPrivateFieldSet(this, _TransactionController_pendingTransactionOptions, pendingTransactions, "f");
|
|
230
|
-
__classPrivateFieldSet(this, _TransactionController_publishBatchHook, hooks?.publishBatch, "f");
|
|
231
230
|
__classPrivateFieldSet(this, _TransactionController_transactionHistoryLimit, transactionHistoryLimit, "f");
|
|
232
231
|
this.sign = sign;
|
|
233
232
|
__classPrivateFieldSet(this, _TransactionController_testGasFeeFlows, testGasFeeFlows === true, "f");
|
|
@@ -342,11 +341,8 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
342
341
|
getChainId: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getChainId).bind(this),
|
|
343
342
|
getEthQuery: (networkClientId) => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getEthQuery).call(this, { networkClientId }),
|
|
344
343
|
getInternalAccounts: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getInternalAccounts).bind(this),
|
|
345
|
-
getTransaction: (transactionId) => this.getTransactionOrThrow(transactionId),
|
|
346
344
|
messenger: this.messagingSystem,
|
|
347
|
-
publishBatchHook: __classPrivateFieldGet(this, _TransactionController_publishBatchHook, "f"),
|
|
348
345
|
request,
|
|
349
|
-
updateTransaction: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).bind(this),
|
|
350
346
|
});
|
|
351
347
|
}
|
|
352
348
|
/**
|
|
@@ -370,12 +366,10 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
370
366
|
* @param txParams - Standard parameters for an Ethereum transaction.
|
|
371
367
|
* @param options - Additional options to control how the transaction is added.
|
|
372
368
|
* @param options.actionId - Unique ID to prevent duplicate requests.
|
|
373
|
-
* @param options.batchId - ID of the batch this transaction belongs to.
|
|
374
369
|
* @param options.deviceConfirmedOn - An enum to indicate what device confirmed the transaction.
|
|
375
370
|
* @param options.method - RPC method that requested the transaction.
|
|
376
371
|
* @param options.nestedTransactions - Params for any nested transactions encoded in the data.
|
|
377
372
|
* @param options.origin - The origin of the transaction request, such as a dApp hostname.
|
|
378
|
-
* @param options.publishHook - Custom logic to publish the transaction.
|
|
379
373
|
* @param options.requireApproval - Whether the transaction requires approval by the user, defaults to true unless explicitly disabled.
|
|
380
374
|
* @param options.securityAlertResponse - Response from security validator.
|
|
381
375
|
* @param options.sendFlowHistory - The sendFlowHistory entries to add.
|
|
@@ -389,7 +383,7 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
389
383
|
*/
|
|
390
384
|
async addTransaction(txParams, options) {
|
|
391
385
|
(0, logger_1.projectLogger)('Adding transaction', txParams, options);
|
|
392
|
-
const { actionId,
|
|
386
|
+
const { actionId, deviceConfirmedOn, method, nestedTransactions, networkClientId, origin, requireApproval, securityAlertResponse, sendFlowHistory, swaps = {}, traceContext, type, } = options;
|
|
393
387
|
txParams = (0, utils_2.normalizeTransactionParams)(txParams);
|
|
394
388
|
if (!__classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").has(networkClientId)) {
|
|
395
389
|
throw new Error(`Network client not found - ${networkClientId}`);
|
|
@@ -423,7 +417,6 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
423
417
|
: {
|
|
424
418
|
// Add actionId to txMeta to check if same actionId is seen again
|
|
425
419
|
actionId,
|
|
426
|
-
batchId,
|
|
427
420
|
chainId,
|
|
428
421
|
dappSuggestedGasFees,
|
|
429
422
|
deviceConfirmedOn,
|
|
@@ -484,10 +477,9 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
484
477
|
}
|
|
485
478
|
return {
|
|
486
479
|
result: this.processApproval(addedTransactionMeta, {
|
|
487
|
-
actionId,
|
|
488
480
|
isExisting: Boolean(existingTransactionMeta),
|
|
489
|
-
publishHook,
|
|
490
481
|
requireApproval,
|
|
482
|
+
actionId,
|
|
491
483
|
traceContext,
|
|
492
484
|
}),
|
|
493
485
|
transactionMeta: addedTransactionMeta,
|
|
@@ -1131,22 +1123,6 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1131
1123
|
abortCallback();
|
|
1132
1124
|
this.signAbortCallbacks.delete(transactionId);
|
|
1133
1125
|
}
|
|
1134
|
-
/**
|
|
1135
|
-
* Update the batch transactions associated with a transaction.
|
|
1136
|
-
* These transactions will be submitted with the main transaction as a batch.
|
|
1137
|
-
*
|
|
1138
|
-
* @param request - The request object.
|
|
1139
|
-
* @param request.transactionId - The ID of the transaction to update.
|
|
1140
|
-
* @param request.batchTransactions - The new batch transactions.
|
|
1141
|
-
*/
|
|
1142
|
-
updateBatchTransactions({ transactionId, batchTransactions, }) {
|
|
1143
|
-
__classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
|
|
1144
|
-
transactionId,
|
|
1145
|
-
note: 'TransactionController#updateBatchTransactions - Batch transactions updated',
|
|
1146
|
-
}, (transactionMeta) => {
|
|
1147
|
-
transactionMeta.batchTransactions = batchTransactions;
|
|
1148
|
-
});
|
|
1149
|
-
}
|
|
1150
1126
|
addMetadata(transactionMeta) {
|
|
1151
1127
|
(0, validation_1.validateTxParams)(transactionMeta.txParams);
|
|
1152
1128
|
this.update((state) => {
|
|
@@ -1196,7 +1172,7 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1196
1172
|
this.failTransaction(transactionMeta, new Error('Transaction incomplete at startup'));
|
|
1197
1173
|
}
|
|
1198
1174
|
}
|
|
1199
|
-
async processApproval(transactionMeta, {
|
|
1175
|
+
async processApproval(transactionMeta, { isExisting = false, requireApproval, shouldShowRequest = true, actionId, traceContext, }) {
|
|
1200
1176
|
const transactionId = transactionMeta.id;
|
|
1201
1177
|
let resultCallbacks;
|
|
1202
1178
|
const { meta, isCompleted } = this.isTransactionCompleted(transactionId);
|
|
@@ -1223,7 +1199,7 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1223
1199
|
}
|
|
1224
1200
|
const { isCompleted: isTxCompleted } = this.isTransactionCompleted(transactionId);
|
|
1225
1201
|
if (!isTxCompleted) {
|
|
1226
|
-
const approvalResult = await this.approveTransaction(transactionId, traceContext
|
|
1202
|
+
const approvalResult = await this.approveTransaction(transactionId, traceContext);
|
|
1227
1203
|
if (approvalResult === ApprovalState.SkippedViaBeforePublishHook &&
|
|
1228
1204
|
resultCallbacks) {
|
|
1229
1205
|
resultCallbacks.success();
|
|
@@ -1257,7 +1233,7 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1257
1233
|
switch (finalMeta?.status) {
|
|
1258
1234
|
case types_1.TransactionStatus.failed:
|
|
1259
1235
|
resultCallbacks?.error(finalMeta.error);
|
|
1260
|
-
throw rpc_errors_1.rpcErrors.internal(finalMeta.error.
|
|
1236
|
+
throw rpc_errors_1.rpcErrors.internal(finalMeta.error.message);
|
|
1261
1237
|
case types_1.TransactionStatus.submitted:
|
|
1262
1238
|
resultCallbacks?.success();
|
|
1263
1239
|
return finalMeta.hash;
|
|
@@ -1275,12 +1251,10 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1275
1251
|
*
|
|
1276
1252
|
* @param transactionId - The ID of the transaction to approve.
|
|
1277
1253
|
* @param traceContext - The parent context for any new traces.
|
|
1278
|
-
* @param publishHookOverride - Custom logic to publish the transaction.
|
|
1279
|
-
* @returns The approval state of the transaction.
|
|
1280
1254
|
*/
|
|
1281
|
-
async approveTransaction(transactionId, traceContext
|
|
1282
|
-
|
|
1283
|
-
|
|
1255
|
+
async approveTransaction(transactionId, traceContext) {
|
|
1256
|
+
const cleanupTasks = new Array();
|
|
1257
|
+
cleanupTasks.push(await this.mutex.acquire());
|
|
1284
1258
|
let transactionMeta = this.getTransactionOrThrow(transactionId);
|
|
1285
1259
|
try {
|
|
1286
1260
|
if (!this.sign) {
|
|
@@ -1296,9 +1270,10 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1296
1270
|
return ApprovalState.NotApproved;
|
|
1297
1271
|
}
|
|
1298
1272
|
this.approvingTransactionIds.add(transactionId);
|
|
1299
|
-
|
|
1273
|
+
cleanupTasks.push(() => this.approvingTransactionIds.delete(transactionId));
|
|
1300
1274
|
const [nonce, releaseNonce] = await (0, nonce_1.getNextNonce)(transactionMeta, (address) => __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").getNonceLock(address, transactionMeta.networkClientId));
|
|
1301
|
-
|
|
1275
|
+
// must set transaction to submitted/failed before releasing lock
|
|
1276
|
+
releaseNonce && cleanupTasks.push(releaseNonce);
|
|
1302
1277
|
transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
|
|
1303
1278
|
transactionId,
|
|
1304
1279
|
note: 'TransactionController#approveTransaction - Transaction approved',
|
|
@@ -1335,18 +1310,8 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1335
1310
|
}
|
|
1336
1311
|
(0, logger_1.projectLogger)('Publishing transaction', transactionMeta.txParams);
|
|
1337
1312
|
let hash;
|
|
1338
|
-
clearNonceLock?.();
|
|
1339
|
-
clearNonceLock = undefined;
|
|
1340
|
-
if (transactionMeta.batchTransactions?.length) {
|
|
1341
|
-
const extraTransactionsPublishHook = new ExtraTransactionsPublishHook_1.ExtraTransactionsPublishHook({
|
|
1342
|
-
addTransactionBatch: this.addTransactionBatch.bind(this),
|
|
1343
|
-
transactions: transactionMeta.batchTransactions,
|
|
1344
|
-
});
|
|
1345
|
-
publishHookOverride = extraTransactionsPublishHook.getHook();
|
|
1346
|
-
}
|
|
1347
1313
|
await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Publish', parentContext: traceContext }, async () => {
|
|
1348
|
-
|
|
1349
|
-
({ transactionHash: hash } = await publishHook(transactionMeta, rawTx));
|
|
1314
|
+
({ transactionHash: hash } = await this.publish(transactionMeta, rawTx));
|
|
1350
1315
|
if (hash === undefined) {
|
|
1351
1316
|
hash = await this.publishTransaction(ethQuery, {
|
|
1352
1317
|
...transactionMeta,
|
|
@@ -1382,8 +1347,7 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1382
1347
|
return ApprovalState.NotApproved;
|
|
1383
1348
|
}
|
|
1384
1349
|
finally {
|
|
1385
|
-
|
|
1386
|
-
clearNonceLock?.();
|
|
1350
|
+
cleanupTasks.forEach((task) => task());
|
|
1387
1351
|
}
|
|
1388
1352
|
}
|
|
1389
1353
|
async publishTransaction(ethQuery, transactionMeta, { skipSubmitHistory } = {}) {
|
|
@@ -1800,7 +1764,7 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1800
1764
|
}
|
|
1801
1765
|
}
|
|
1802
1766
|
exports.TransactionController = TransactionController;
|
|
1803
|
-
_TransactionController_internalEvents = new WeakMap(), _TransactionController_methodDataHelper = new WeakMap(), _TransactionController_incomingTransactionChainIds = new WeakMap(), _TransactionController_incomingTransactionHelper = new WeakMap(), _TransactionController_incomingTransactionOptions = new WeakMap(), _TransactionController_pendingTransactionOptions = new WeakMap(),
|
|
1767
|
+
_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, }) {
|
|
1804
1768
|
// If transaction is found for same action id, do not create a new transaction.
|
|
1805
1769
|
if (this.getTransactionWithActionId(actionId)) {
|
|
1806
1770
|
return;
|