@@ -357,6 +357,26 @@ export type TransactionControllerAddTransactionBatchAction = {
357357 handler : TransactionController [ 'addTransactionBatch' ] ;
358358} ;
359359
360+ /**
361+ * Emulate a new transaction.
362+ *
363+ * @param transactionId - The transaction ID.
364+ */
365+ export type TransactionControllerEmulateNewTransaction = {
366+ type : `${typeof controllerName } :emulateNewTransaction`;
367+ handler : TransactionController [ 'emulateNewTransaction' ] ;
368+ } ;
369+
370+ /**
371+ * Emmulate a transaction update.
372+ *
373+ * @param transactionMeta - Transaction metadata.
374+ */
375+ export type TransactionControllerEmulateTransactionUpdate = {
376+ type : `${typeof controllerName } :emulateTransactionUpdate`;
377+ handler : TransactionController [ 'emulateTransactionUpdate' ] ;
378+ } ;
379+
360380/**
361381 * The internal actions available to the TransactionController.
362382 */
@@ -369,7 +389,9 @@ export type TransactionControllerActions =
369389 | TransactionControllerGetStateAction
370390 | TransactionControllerGetTransactionsAction
371391 | TransactionControllerUpdateCustodialTransactionAction
372- | TransactionControllerUpdateTransactionAction ;
392+ | TransactionControllerUpdateTransactionAction
393+ | TransactionControllerEmulateNewTransaction
394+ | TransactionControllerEmulateTransactionUpdate ;
373395
374396/**
375397 * Configuration options for the PendingTransactionTracker
@@ -4552,4 +4574,66 @@ export class TransactionController extends BaseController<
45524574
45534575 return { transactionHash } ;
45544576 }
4577+
4578+ /**
4579+ * Emulate a new transaction.
4580+ *
4581+ * @param transactionId - The transaction ID.
4582+ */
4583+ emulateNewTransaction ( transactionId : string ) {
4584+ const transactionMeta = this . state . transactions . find (
4585+ ( tx ) => tx . id === transactionId ,
4586+ ) ;
4587+
4588+ if ( ! transactionMeta ) {
4589+ return ;
4590+ }
4591+
4592+ if ( transactionMeta . type === TransactionType . swap ) {
4593+ this . messagingSystem . publish ( 'TransactionController:transactionNewSwap' , {
4594+ transactionMeta,
4595+ } ) ;
4596+ } else if ( transactionMeta . type === TransactionType . swapApproval ) {
4597+ this . messagingSystem . publish (
4598+ 'TransactionController:transactionNewSwapApproval' ,
4599+ { transactionMeta } ,
4600+ ) ;
4601+ }
4602+ }
4603+
4604+ /**
4605+ * Emmulate a transaction update.
4606+ *
4607+ * @param transactionMeta - Transaction metadata.
4608+ */
4609+ emulateTransactionUpdate ( transactionMeta : TransactionMeta ) {
4610+ const updatedTransactionMeta = {
4611+ ...transactionMeta ,
4612+ txParams : {
4613+ ...transactionMeta . txParams ,
4614+ from : this . messagingSystem . call ( 'AccountsController:getSelectedAccount' )
4615+ . address ,
4616+ } ,
4617+ } ;
4618+
4619+ const transactionExists = this . state . transactions . some (
4620+ ( tx ) => tx . id === updatedTransactionMeta . id ,
4621+ ) ;
4622+
4623+ if ( ! transactionExists ) {
4624+ this . update ( ( state ) => {
4625+ state . transactions . push ( updatedTransactionMeta ) ;
4626+ } ) ;
4627+ }
4628+
4629+ this . updateTransaction (
4630+ updatedTransactionMeta ,
4631+ 'Generated from user operation' ,
4632+ ) ;
4633+
4634+ this . messagingSystem . publish (
4635+ 'TransactionController:transactionStatusUpdated' ,
4636+ { transactionMeta : updatedTransactionMeta } ,
4637+ ) ;
4638+ }
45554639}
0 commit comments