@metamask/transaction-controller 39.1.0 → 40.1.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.
- package/CHANGELOG.md +18 -1
- package/dist/TransactionController.cjs +58 -6
- package/dist/TransactionController.cjs.map +1 -1
- package/dist/TransactionController.d.cts +3 -1
- package/dist/TransactionController.d.cts.map +1 -1
- package/dist/TransactionController.d.mts +3 -1
- package/dist/TransactionController.d.mts.map +1 -1
- package/dist/TransactionController.mjs +60 -8
- package/dist/TransactionController.mjs.map +1 -1
- package/dist/api/accounts-api.cjs +47 -0
- package/dist/api/accounts-api.cjs.map +1 -0
- package/dist/api/accounts-api.d.cts +43 -0
- package/dist/api/accounts-api.d.cts.map +1 -0
- package/dist/api/accounts-api.d.mts +43 -0
- package/dist/api/accounts-api.d.mts.map +1 -0
- package/dist/api/accounts-api.mjs +43 -0
- package/dist/api/accounts-api.mjs.map +1 -0
- package/dist/errors.cjs +8 -1
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.d.cts +4 -0
- package/dist/errors.d.cts.map +1 -1
- package/dist/errors.d.mts +4 -0
- package/dist/errors.d.mts.map +1 -1
- package/dist/errors.mjs +6 -0
- package/dist/errors.mjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +6 -0
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +6 -0
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/dist/utils/validation.cjs +13 -1
- package/dist/utils/validation.cjs.map +1 -1
- package/dist/utils/validation.d.cts +7 -0
- package/dist/utils/validation.d.cts.map +1 -1
- package/dist/utils/validation.d.mts +7 -0
- package/dist/utils/validation.d.mts.map +1 -1
- package/dist/utils/validation.mjs +11 -0
- package/dist/utils/validation.mjs.map +1 -1
- package/package.json +3 -4
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [40.1.0]
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Add `firstTimeInteraction` to transaction meta ([#4895](https://github.com/MetaMask/core/pull/4895))
|
|
15
|
+
- This is a boolean value that indicates whether the transaction is the first time the user has interacted with it.
|
|
16
|
+
- Add `isFirstTimeInteractionEnabled` callback constructor option ([#4895](https://github.com/MetaMask/core/pull/4895))
|
|
17
|
+
- This is a function that returns a boolean value indicating whether the first time interaction check should be enabled.
|
|
18
|
+
|
|
19
|
+
## [40.0.0]
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
|
|
23
|
+
- **BREAKING:** Bump `@metamask/accounts-controller` peer dependency from `^19.0.0` to `^20.0.0` ([#4195](https://github.com/MetaMask/core/pull/4956))
|
|
24
|
+
|
|
10
25
|
## [39.1.0]
|
|
11
26
|
|
|
12
27
|
### Changed
|
|
@@ -1127,7 +1142,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
1127
1142
|
|
|
1128
1143
|
All changes listed after this point were applied to this package following the monorepo conversion.
|
|
1129
1144
|
|
|
1130
|
-
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@
|
|
1145
|
+
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@40.1.0...HEAD
|
|
1146
|
+
[40.1.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@40.0.0...@metamask/transaction-controller@40.1.0
|
|
1147
|
+
[40.0.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@39.1.0...@metamask/transaction-controller@40.0.0
|
|
1131
1148
|
[39.1.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@39.0.0...@metamask/transaction-controller@39.1.0
|
|
1132
1149
|
[39.0.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@38.3.0...@metamask/transaction-controller@39.0.0
|
|
1133
1150
|
[38.3.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@38.2.0...@metamask/transaction-controller@38.3.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_incomingTransactionOptions, _TransactionController_pendingTransactionOptions, _TransactionController_trace, _TransactionController_transactionHistoryLimit, _TransactionController_isSimulationEnabled, _TransactionController_testGasFeeFlows, _TransactionController_multichainTrackingHelper, _TransactionController_retryTransaction, _TransactionController_createNonceTracker, _TransactionController_createIncomingTransactionHelper, _TransactionController_createPendingTransactionTracker, _TransactionController_checkForPendingTransactionAndStartPolling, _TransactionController_stopAllTracking, _TransactionController_removeIncomingTransactionHelperListeners, _TransactionController_addIncomingTransactionHelperListeners, _TransactionController_removePendingTransactionTrackerListeners, _TransactionController_addPendingTransactionTrackerListeners, _TransactionController_getNonceTrackerPendingTransactions, _TransactionController_getGasFeeFlows, _TransactionController_getLayer1GasFeeFlows, _TransactionController_updateTransactionInternal, _TransactionController_updateSimulationData, _TransactionController_onGasFeePollerTransactionUpdate, _TransactionController_getNetworkClientId, _TransactionController_getGlobalNetworkClientId, _TransactionController_getGlobalChainId, _TransactionController_isCustomNetwork, _TransactionController_getSelectedAccount, _TransactionController_updateSubmitHistory;
|
|
16
|
+
var _TransactionController_instances, _TransactionController_internalEvents, _TransactionController_incomingTransactionOptions, _TransactionController_pendingTransactionOptions, _TransactionController_trace, _TransactionController_transactionHistoryLimit, _TransactionController_isFirstTimeInteractionEnabled, _TransactionController_isSimulationEnabled, _TransactionController_testGasFeeFlows, _TransactionController_multichainTrackingHelper, _TransactionController_retryTransaction, _TransactionController_createNonceTracker, _TransactionController_createIncomingTransactionHelper, _TransactionController_createPendingTransactionTracker, _TransactionController_checkForPendingTransactionAndStartPolling, _TransactionController_stopAllTracking, _TransactionController_removeIncomingTransactionHelperListeners, _TransactionController_addIncomingTransactionHelperListeners, _TransactionController_removePendingTransactionTrackerListeners, _TransactionController_addPendingTransactionTrackerListeners, _TransactionController_getNonceTrackerPendingTransactions, _TransactionController_getGasFeeFlows, _TransactionController_getLayer1GasFeeFlows, _TransactionController_updateTransactionInternal, _TransactionController_updateFirstTimeInteraction, _TransactionController_updateSimulationData, _TransactionController_onGasFeePollerTransactionUpdate, _TransactionController_getNetworkClientId, _TransactionController_getGlobalNetworkClientId, _TransactionController_getGlobalChainId, _TransactionController_isCustomNetwork, _TransactionController_getSelectedAccount, _TransactionController_updateSubmitHistory;
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
18
|
exports.TransactionController = exports.ApprovalState = exports.SPEED_UP_RATE = exports.CANCEL_RATE = exports.HARDFORK = void 0;
|
|
19
19
|
const common_1 = require("@ethereumjs/common");
|
|
@@ -31,6 +31,7 @@ const eth_method_registry_1 = require("eth-method-registry");
|
|
|
31
31
|
const events_1 = require("events");
|
|
32
32
|
const lodash_1 = require("lodash");
|
|
33
33
|
const uuid_1 = require("uuid");
|
|
34
|
+
const accounts_api_1 = require("./api/accounts-api.cjs");
|
|
34
35
|
const DefaultGasFeeFlow_1 = require("./gas-flows/DefaultGasFeeFlow.cjs");
|
|
35
36
|
const LineaGasFeeFlow_1 = require("./gas-flows/LineaGasFeeFlow.cjs");
|
|
36
37
|
const OptimismLayer1GasFeeFlow_1 = require("./gas-flows/OptimismLayer1GasFeeFlow.cjs");
|
|
@@ -177,6 +178,7 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
177
178
|
* @param options.getSavedGasFees - Gets the saved gas fee config.
|
|
178
179
|
* @param options.incomingTransactions - Configuration options for incoming transaction support.
|
|
179
180
|
* @param options.isMultichainEnabled - Enable multichain support.
|
|
181
|
+
* @param options.isFirstTimeInteractionEnabled - Whether first time interaction checks are enabled.
|
|
180
182
|
* @param options.isSimulationEnabled - Whether new transactions will be automatically simulated.
|
|
181
183
|
* @param options.messenger - The controller messenger.
|
|
182
184
|
* @param options.onNetworkStateChange - Allows subscribing to network controller state changes.
|
|
@@ -190,7 +192,7 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
190
192
|
* @param options.transactionHistoryLimit - Transaction history limit.
|
|
191
193
|
* @param options.hooks - The controller hooks.
|
|
192
194
|
*/
|
|
193
|
-
constructor({ blockTracker, disableHistory, disableSendFlowHistory, disableSwaps, getCurrentAccountEIP1559Compatibility, getCurrentNetworkEIP1559Compatibility, getExternalPendingTransactions, getGasFeeEstimates, getNetworkClientRegistry, getNetworkState, getPermittedAccounts, getSavedGasFees, incomingTransactions = {}, isMultichainEnabled = false, isSimulationEnabled, messenger, onNetworkStateChange, pendingTransactions = {}, provider, securityProviderRequest, sign, state, testGasFeeFlows, trace, transactionHistoryLimit = 40, hooks, }) {
|
|
195
|
+
constructor({ blockTracker, disableHistory, disableSendFlowHistory, disableSwaps, getCurrentAccountEIP1559Compatibility, getCurrentNetworkEIP1559Compatibility, getExternalPendingTransactions, getGasFeeEstimates, getNetworkClientRegistry, getNetworkState, getPermittedAccounts, getSavedGasFees, incomingTransactions = {}, isMultichainEnabled = false, isFirstTimeInteractionEnabled, isSimulationEnabled, messenger, onNetworkStateChange, pendingTransactions = {}, provider, securityProviderRequest, sign, state, testGasFeeFlows, trace, transactionHistoryLimit = 40, hooks, }) {
|
|
194
196
|
super({
|
|
195
197
|
name: controllerName,
|
|
196
198
|
metadata,
|
|
@@ -209,6 +211,7 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
209
211
|
this.signAbortCallbacks = new Map();
|
|
210
212
|
_TransactionController_trace.set(this, void 0);
|
|
211
213
|
_TransactionController_transactionHistoryLimit.set(this, void 0);
|
|
214
|
+
_TransactionController_isFirstTimeInteractionEnabled.set(this, void 0);
|
|
212
215
|
_TransactionController_isSimulationEnabled.set(this, void 0);
|
|
213
216
|
_TransactionController_testGasFeeFlows.set(this, void 0);
|
|
214
217
|
_TransactionController_multichainTrackingHelper.set(this, void 0);
|
|
@@ -222,6 +225,7 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
222
225
|
this.isSendFlowHistoryDisabled = disableSendFlowHistory ?? false;
|
|
223
226
|
this.isHistoryDisabled = disableHistory ?? false;
|
|
224
227
|
this.isSwapsDisabled = disableSwaps ?? false;
|
|
228
|
+
__classPrivateFieldSet(this, _TransactionController_isFirstTimeInteractionEnabled, isFirstTimeInteractionEnabled ?? (() => true), "f");
|
|
225
229
|
__classPrivateFieldSet(this, _TransactionController_isSimulationEnabled, isSimulationEnabled ?? (() => true), "f");
|
|
226
230
|
// @ts-expect-error the type in eth-method-registry is inappropriate and should be changed
|
|
227
231
|
this.registry = new eth_method_registry_1.MethodRegistry({ provider });
|
|
@@ -403,15 +407,16 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
403
407
|
dappSuggestedGasFees,
|
|
404
408
|
deviceConfirmedOn,
|
|
405
409
|
id: (0, uuid_1.v1)(),
|
|
410
|
+
isFirstTimeInteraction: undefined,
|
|
411
|
+
networkClientId,
|
|
406
412
|
origin,
|
|
407
413
|
securityAlertResponse,
|
|
408
414
|
status: types_1.TransactionStatus.unapproved,
|
|
409
415
|
time: Date.now(),
|
|
410
416
|
txParams,
|
|
417
|
+
type: transactionType,
|
|
411
418
|
userEditedGasLimit: false,
|
|
412
419
|
verifiedOnBlockchain: false,
|
|
413
|
-
type: transactionType,
|
|
414
|
-
networkClientId,
|
|
415
420
|
};
|
|
416
421
|
await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Estimate Gas Properties', parentContext: traceContext }, (context) => this.updateGasProperties(addedTransactionMeta, {
|
|
417
422
|
traceContext: context,
|
|
@@ -444,9 +449,14 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
444
449
|
(0, logger_1.projectLogger)('Error while updating simulation data', error);
|
|
445
450
|
throw error;
|
|
446
451
|
});
|
|
452
|
+
__classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateFirstTimeInteraction).call(this, addedTransactionMeta, {
|
|
453
|
+
traceContext,
|
|
454
|
+
}).catch((error) => {
|
|
455
|
+
(0, logger_1.projectLogger)('Error while updating first interaction properties', error);
|
|
456
|
+
});
|
|
447
457
|
}
|
|
448
458
|
else {
|
|
449
|
-
(0, logger_1.projectLogger)('Skipping simulation as approval not required');
|
|
459
|
+
(0, logger_1.projectLogger)('Skipping simulation & first interaction update as approval not required');
|
|
450
460
|
}
|
|
451
461
|
this.messagingSystem.publish(`${controllerName}:unapprovedTransactionAdded`, addedTransactionMeta);
|
|
452
462
|
}
|
|
@@ -1785,7 +1795,7 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1785
1795
|
}
|
|
1786
1796
|
}
|
|
1787
1797
|
exports.TransactionController = TransactionController;
|
|
1788
|
-
_TransactionController_internalEvents = new WeakMap(), _TransactionController_incomingTransactionOptions = new WeakMap(), _TransactionController_pendingTransactionOptions = new WeakMap(), _TransactionController_trace = new WeakMap(), _TransactionController_transactionHistoryLimit = 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, }) {
|
|
1798
|
+
_TransactionController_internalEvents = 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, }) {
|
|
1789
1799
|
// If transaction is found for same action id, do not create a new transaction.
|
|
1790
1800
|
if (this.getTransactionWithActionId(actionId)) {
|
|
1791
1801
|
return;
|
|
@@ -1963,6 +1973,48 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_in
|
|
|
1963
1973
|
});
|
|
1964
1974
|
}
|
|
1965
1975
|
return transactionMeta;
|
|
1976
|
+
}, _TransactionController_updateFirstTimeInteraction = async function _TransactionController_updateFirstTimeInteraction(transactionMeta, { traceContext, } = {}) {
|
|
1977
|
+
if (!__classPrivateFieldGet(this, _TransactionController_isFirstTimeInteractionEnabled, "f").call(this)) {
|
|
1978
|
+
return;
|
|
1979
|
+
}
|
|
1980
|
+
const { chainId, id: transactionId, txParams: { to, from }, } = transactionMeta;
|
|
1981
|
+
const request = {
|
|
1982
|
+
chainId: (0, utils_1.hexToNumber)(chainId),
|
|
1983
|
+
to: to,
|
|
1984
|
+
from,
|
|
1985
|
+
};
|
|
1986
|
+
(0, validation_1.validateParamTo)(to);
|
|
1987
|
+
const existingTransaction = this.state.transactions.find((tx) => tx.chainId === chainId &&
|
|
1988
|
+
tx.txParams.from === from &&
|
|
1989
|
+
tx.txParams.to === to &&
|
|
1990
|
+
tx.id !== transactionId);
|
|
1991
|
+
// Check if there is an existing transaction with the same from, to, and chainId
|
|
1992
|
+
// else we continue to check the account address relationship from API
|
|
1993
|
+
if (existingTransaction) {
|
|
1994
|
+
return;
|
|
1995
|
+
}
|
|
1996
|
+
try {
|
|
1997
|
+
const { count } = await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Account Address Relationship', parentContext: traceContext }, () => (0, accounts_api_1.getAccountAddressRelationship)(request));
|
|
1998
|
+
const isFirstTimeInteraction = count === undefined ? undefined : count === 0;
|
|
1999
|
+
const finalTransactionMeta = this.getTransaction(transactionId);
|
|
2000
|
+
/* istanbul ignore if */
|
|
2001
|
+
if (!finalTransactionMeta) {
|
|
2002
|
+
(0, logger_1.projectLogger)('Cannot update first time interaction as transaction not found', transactionId);
|
|
2003
|
+
return;
|
|
2004
|
+
}
|
|
2005
|
+
__classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
|
|
2006
|
+
transactionId,
|
|
2007
|
+
note: 'TransactionController#updateFirstInteraction - Update first time interaction',
|
|
2008
|
+
}, (txMeta) => {
|
|
2009
|
+
txMeta.isFirstTimeInteraction = isFirstTimeInteraction;
|
|
2010
|
+
});
|
|
2011
|
+
(0, logger_1.projectLogger)('Updated first time interaction', transactionId, {
|
|
2012
|
+
isFirstTimeInteraction,
|
|
2013
|
+
});
|
|
2014
|
+
}
|
|
2015
|
+
catch (error) {
|
|
2016
|
+
(0, logger_1.projectLogger)('Error fetching account address relationship, skipping first time interaction update', error);
|
|
2017
|
+
}
|
|
1966
2018
|
}, _TransactionController_updateSimulationData = async function _TransactionController_updateSimulationData(transactionMeta, { blockTime, traceContext, } = {}) {
|
|
1967
2019
|
const { id: transactionId, chainId, txParams, simulationData: prevSimulationData, } = transactionMeta;
|
|
1968
2020
|
const { from, to, value, data } = txParams;
|