@metamask/transaction-controller 63.3.1 → 64.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.
Files changed (162) hide show
  1. package/CHANGELOG.md +31 -1
  2. package/dist/TransactionController.cjs +85 -103
  3. package/dist/TransactionController.cjs.map +1 -1
  4. package/dist/TransactionController.d.cts.map +1 -1
  5. package/dist/TransactionController.d.mts.map +1 -1
  6. package/dist/TransactionController.mjs +86 -108
  7. package/dist/TransactionController.mjs.map +1 -1
  8. package/dist/gas-flows/LineaGasFeeFlow.cjs +22 -11
  9. package/dist/gas-flows/LineaGasFeeFlow.cjs.map +1 -1
  10. package/dist/gas-flows/LineaGasFeeFlow.d.cts.map +1 -1
  11. package/dist/gas-flows/LineaGasFeeFlow.d.mts.map +1 -1
  12. package/dist/gas-flows/LineaGasFeeFlow.mjs +23 -12
  13. package/dist/gas-flows/LineaGasFeeFlow.mjs.map +1 -1
  14. package/dist/helpers/AccountsApiRemoteTransactionSource.cjs +2 -2
  15. package/dist/helpers/AccountsApiRemoteTransactionSource.cjs.map +1 -1
  16. package/dist/helpers/AccountsApiRemoteTransactionSource.d.cts.map +1 -1
  17. package/dist/helpers/AccountsApiRemoteTransactionSource.d.mts.map +1 -1
  18. package/dist/helpers/AccountsApiRemoteTransactionSource.mjs +1 -1
  19. package/dist/helpers/AccountsApiRemoteTransactionSource.mjs.map +1 -1
  20. package/dist/helpers/GasFeePoller.cjs +5 -19
  21. package/dist/helpers/GasFeePoller.cjs.map +1 -1
  22. package/dist/helpers/GasFeePoller.d.cts +1 -6
  23. package/dist/helpers/GasFeePoller.d.cts.map +1 -1
  24. package/dist/helpers/GasFeePoller.d.mts +1 -6
  25. package/dist/helpers/GasFeePoller.d.mts.map +1 -1
  26. package/dist/helpers/GasFeePoller.mjs +5 -26
  27. package/dist/helpers/GasFeePoller.mjs.map +1 -1
  28. package/dist/helpers/MethodDataHelper.cjs +10 -6
  29. package/dist/helpers/MethodDataHelper.cjs.map +1 -1
  30. package/dist/helpers/MethodDataHelper.d.cts +4 -4
  31. package/dist/helpers/MethodDataHelper.d.cts.map +1 -1
  32. package/dist/helpers/MethodDataHelper.d.mts +4 -4
  33. package/dist/helpers/MethodDataHelper.d.mts.map +1 -1
  34. package/dist/helpers/MethodDataHelper.mjs +10 -6
  35. package/dist/helpers/MethodDataHelper.mjs.map +1 -1
  36. package/dist/helpers/MultichainTrackingHelper.cjs +0 -2
  37. package/dist/helpers/MultichainTrackingHelper.cjs.map +1 -1
  38. package/dist/helpers/MultichainTrackingHelper.d.cts +0 -2
  39. package/dist/helpers/MultichainTrackingHelper.d.cts.map +1 -1
  40. package/dist/helpers/MultichainTrackingHelper.d.mts +0 -2
  41. package/dist/helpers/MultichainTrackingHelper.d.mts.map +1 -1
  42. package/dist/helpers/MultichainTrackingHelper.mjs +0 -2
  43. package/dist/helpers/MultichainTrackingHelper.mjs.map +1 -1
  44. package/dist/helpers/PendingTransactionTracker.cjs +38 -24
  45. package/dist/helpers/PendingTransactionTracker.cjs.map +1 -1
  46. package/dist/helpers/PendingTransactionTracker.d.cts +3 -7
  47. package/dist/helpers/PendingTransactionTracker.d.cts.map +1 -1
  48. package/dist/helpers/PendingTransactionTracker.d.mts +3 -7
  49. package/dist/helpers/PendingTransactionTracker.d.mts.map +1 -1
  50. package/dist/helpers/PendingTransactionTracker.mjs +38 -24
  51. package/dist/helpers/PendingTransactionTracker.mjs.map +1 -1
  52. package/dist/hooks/SequentialPublishBatchHook.cjs +4 -6
  53. package/dist/hooks/SequentialPublishBatchHook.cjs.map +1 -1
  54. package/dist/hooks/SequentialPublishBatchHook.d.cts +2 -4
  55. package/dist/hooks/SequentialPublishBatchHook.d.cts.map +1 -1
  56. package/dist/hooks/SequentialPublishBatchHook.d.mts +2 -4
  57. package/dist/hooks/SequentialPublishBatchHook.d.mts.map +1 -1
  58. package/dist/hooks/SequentialPublishBatchHook.mjs +4 -6
  59. package/dist/hooks/SequentialPublishBatchHook.mjs.map +1 -1
  60. package/dist/index.cjs +3 -3
  61. package/dist/index.cjs.map +1 -1
  62. package/dist/index.d.cts +2 -1
  63. package/dist/index.d.cts.map +1 -1
  64. package/dist/index.d.mts +2 -1
  65. package/dist/index.d.mts.map +1 -1
  66. package/dist/index.mjs +1 -1
  67. package/dist/index.mjs.map +1 -1
  68. package/dist/types.cjs.map +1 -1
  69. package/dist/types.d.cts +14 -3
  70. package/dist/types.d.cts.map +1 -1
  71. package/dist/types.d.mts +14 -3
  72. package/dist/types.d.mts.map +1 -1
  73. package/dist/types.mjs.map +1 -1
  74. package/dist/utils/balance-changes.cjs +2 -2
  75. package/dist/utils/balance-changes.cjs.map +1 -1
  76. package/dist/utils/balance-changes.d.cts +4 -2
  77. package/dist/utils/balance-changes.d.cts.map +1 -1
  78. package/dist/utils/balance-changes.d.mts +4 -2
  79. package/dist/utils/balance-changes.d.mts.map +1 -1
  80. package/dist/utils/balance-changes.mjs +2 -2
  81. package/dist/utils/balance-changes.mjs.map +1 -1
  82. package/dist/utils/balance.cjs +14 -10
  83. package/dist/utils/balance.cjs.map +1 -1
  84. package/dist/utils/balance.d.cts +8 -5
  85. package/dist/utils/balance.d.cts.map +1 -1
  86. package/dist/utils/balance.d.mts +8 -5
  87. package/dist/utils/balance.d.mts.map +1 -1
  88. package/dist/utils/balance.mjs +14 -10
  89. package/dist/utils/balance.mjs.map +1 -1
  90. package/dist/utils/batch.cjs +19 -19
  91. package/dist/utils/batch.cjs.map +1 -1
  92. package/dist/utils/batch.d.cts +1 -5
  93. package/dist/utils/batch.d.cts.map +1 -1
  94. package/dist/utils/batch.d.mts +1 -5
  95. package/dist/utils/batch.d.mts.map +1 -1
  96. package/dist/utils/batch.mjs +20 -20
  97. package/dist/utils/batch.mjs.map +1 -1
  98. package/dist/utils/eip7702.cjs +13 -6
  99. package/dist/utils/eip7702.cjs.map +1 -1
  100. package/dist/utils/eip7702.d.cts +6 -5
  101. package/dist/utils/eip7702.d.cts.map +1 -1
  102. package/dist/utils/eip7702.d.mts +6 -5
  103. package/dist/utils/eip7702.d.mts.map +1 -1
  104. package/dist/utils/eip7702.mjs +14 -7
  105. package/dist/utils/eip7702.mjs.map +1 -1
  106. package/dist/utils/gas-fee-tokens.cjs +4 -3
  107. package/dist/utils/gas-fee-tokens.cjs.map +1 -1
  108. package/dist/utils/gas-fee-tokens.d.cts +6 -4
  109. package/dist/utils/gas-fee-tokens.d.cts.map +1 -1
  110. package/dist/utils/gas-fee-tokens.d.mts +6 -4
  111. package/dist/utils/gas-fee-tokens.d.mts.map +1 -1
  112. package/dist/utils/gas-fee-tokens.mjs +4 -3
  113. package/dist/utils/gas-fee-tokens.mjs.map +1 -1
  114. package/dist/utils/gas-fees.cjs +8 -6
  115. package/dist/utils/gas-fees.cjs.map +1 -1
  116. package/dist/utils/gas-fees.d.cts +0 -2
  117. package/dist/utils/gas-fees.d.cts.map +1 -1
  118. package/dist/utils/gas-fees.d.mts +0 -2
  119. package/dist/utils/gas-fees.d.mts.map +1 -1
  120. package/dist/utils/gas-fees.mjs +9 -7
  121. package/dist/utils/gas-fees.mjs.map +1 -1
  122. package/dist/utils/gas.cjs +60 -34
  123. package/dist/utils/gas.cjs.map +1 -1
  124. package/dist/utils/gas.d.cts +6 -11
  125. package/dist/utils/gas.d.cts.map +1 -1
  126. package/dist/utils/gas.d.mts +6 -11
  127. package/dist/utils/gas.d.mts.map +1 -1
  128. package/dist/utils/gas.mjs +61 -35
  129. package/dist/utils/gas.mjs.map +1 -1
  130. package/dist/utils/layer1-gas-fee-flow.cjs +7 -3
  131. package/dist/utils/layer1-gas-fee-flow.cjs.map +1 -1
  132. package/dist/utils/layer1-gas-fee-flow.d.cts +2 -5
  133. package/dist/utils/layer1-gas-fee-flow.d.cts.map +1 -1
  134. package/dist/utils/layer1-gas-fee-flow.d.mts +2 -5
  135. package/dist/utils/layer1-gas-fee-flow.d.mts.map +1 -1
  136. package/dist/utils/layer1-gas-fee-flow.mjs +7 -3
  137. package/dist/utils/layer1-gas-fee-flow.mjs.map +1 -1
  138. package/dist/utils/provider.cjs +74 -0
  139. package/dist/utils/provider.cjs.map +1 -0
  140. package/dist/utils/provider.d.cts +65 -0
  141. package/dist/utils/provider.d.cts.map +1 -0
  142. package/dist/utils/provider.d.mts +65 -0
  143. package/dist/utils/provider.d.mts.map +1 -0
  144. package/dist/utils/provider.mjs +67 -0
  145. package/dist/utils/provider.mjs.map +1 -0
  146. package/dist/utils/swaps.cjs +11 -7
  147. package/dist/utils/swaps.cjs.map +1 -1
  148. package/dist/utils/swaps.d.cts +6 -4
  149. package/dist/utils/swaps.d.cts.map +1 -1
  150. package/dist/utils/swaps.d.mts +6 -4
  151. package/dist/utils/swaps.d.mts.map +1 -1
  152. package/dist/utils/swaps.mjs +11 -7
  153. package/dist/utils/swaps.mjs.map +1 -1
  154. package/dist/utils/transaction-type.cjs +17 -8
  155. package/dist/utils/transaction-type.cjs.map +1 -1
  156. package/dist/utils/transaction-type.d.cts +9 -3
  157. package/dist/utils/transaction-type.d.cts.map +1 -1
  158. package/dist/utils/transaction-type.d.mts +9 -3
  159. package/dist/utils/transaction-type.d.mts.map +1 -1
  160. package/dist/utils/transaction-type.mjs +17 -8
  161. package/dist/utils/transaction-type.mjs.map +1 -1
  162. package/package.json +7 -6
@@ -1 +1 @@
1
- {"version":3,"file":"PendingTransactionTracker.mjs","sourceRoot":"","sources":["../../src/helpers/PendingTransactionTracker.ts"],"names":[],"mappings":"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","sourcesContent":["import { query } from '@metamask/controller-utils';\nimport type EthQuery from '@metamask/eth-query';\nimport type {\n BlockTracker,\n NetworkClientId,\n} from '@metamask/network-controller';\nimport type { Hex, Json } from '@metamask/utils';\n// This package purposefully relies on Node's EventEmitter module.\n// eslint-disable-next-line import-x/no-nodejs-modules\nimport EventEmitter from 'events';\nimport { cloneDeep, merge } from 'lodash';\n\nimport { TransactionPoller } from './TransactionPoller';\nimport { createModuleLogger, projectLogger } from '../logger';\nimport type { TransactionControllerMessenger } from '../TransactionController';\nimport type { TransactionMeta, TransactionReceipt } from '../types';\nimport { TransactionStatus, TransactionType } from '../types';\nimport {\n getAcceleratedPollingParams,\n getTimeoutAttempts,\n} from '../utils/feature-flags';\n\n/**\n * We wait this many blocks before emitting a 'transaction-dropped' event\n * This is because we could be talking to a node that is out of sync\n */\nconst DROPPED_BLOCK_COUNT = 3;\n\nconst RECEIPT_STATUS_SUCCESS = '0x1';\nconst RECEIPT_STATUS_FAILURE = '0x0';\nconst MAX_RETRY_BLOCK_DISTANCE = 50;\n\nconst KNOWN_TRANSACTION_ERRORS = [\n 'replacement transaction underpriced',\n 'known transaction',\n 'gas price too low to replace',\n 'transaction with the same hash was already imported',\n 'gateway timeout',\n 'nonce too low',\n];\n\nconst log = createModuleLogger(projectLogger, 'pending-transactions');\n\ntype SuccessfulTransactionReceipt = TransactionReceipt & {\n blockNumber: string;\n blockHash: string;\n};\n\ntype Events = {\n 'transaction-confirmed': [txMeta: TransactionMeta];\n 'transaction-dropped': [txMeta: TransactionMeta];\n 'transaction-failed': [txMeta: TransactionMeta, error: Error];\n 'transaction-updated': [txMeta: TransactionMeta, note: string];\n};\n\n// This interface was created before this ESLint rule was added.\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface PendingTransactionTrackerEventEmitter extends EventEmitter {\n on<EventName extends keyof Events>(\n eventName: EventName,\n listener: (...args: Events[EventName]) => void,\n ): this;\n\n emit<EventName extends keyof Events>(\n eventName: EventName,\n ...args: Events[EventName]\n ): boolean;\n}\n\nexport class PendingTransactionTracker {\n hub: PendingTransactionTrackerEventEmitter;\n\n readonly #beforeCheckPendingTransaction: (\n transactionMeta: TransactionMeta,\n ) => Promise<boolean>;\n\n readonly #droppedBlockCountByHash: Map<string, number>;\n\n readonly #isTimeoutEnabled: (transactionMeta: TransactionMeta) => boolean;\n\n readonly #getChainId: () => string;\n\n readonly #getEthQuery: (networkClientId?: NetworkClientId) => EthQuery;\n\n readonly #getGlobalLock: () => Promise<() => void>;\n\n readonly #getNetworkClientId: () => NetworkClientId;\n\n readonly #getTransactions: () => TransactionMeta[];\n\n readonly #isResubmitEnabled: () => boolean;\n\n readonly #lastSeenTimestampByHash: Map<string, number>;\n\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n readonly #listener: any;\n\n readonly #log: debug.Debugger;\n\n readonly #messenger: TransactionControllerMessenger;\n\n readonly #publishTransaction: (\n ethQuery: EthQuery,\n transactionMeta: TransactionMeta,\n ) => Promise<string>;\n\n #running: boolean;\n\n readonly #transactionPoller: TransactionPoller;\n\n #transactionToForcePoll: TransactionMeta | undefined;\n\n constructor({\n blockTracker,\n getChainId,\n getEthQuery,\n getGlobalLock,\n getNetworkClientId,\n getTransactions,\n isTimeoutEnabled,\n hooks,\n isResubmitEnabled,\n messenger,\n publishTransaction,\n }: {\n blockTracker: BlockTracker;\n getChainId: () => Hex;\n getEthQuery: (networkClientId?: NetworkClientId) => EthQuery;\n getGlobalLock: () => Promise<() => void>;\n getNetworkClientId: () => string;\n getTransactions: () => TransactionMeta[];\n hooks?: {\n beforeCheckPendingTransaction?: (\n transactionMeta: TransactionMeta,\n ) => Promise<boolean>;\n };\n isResubmitEnabled?: () => boolean;\n isTimeoutEnabled: (transactionMeta: TransactionMeta) => boolean;\n messenger: TransactionControllerMessenger;\n publishTransaction: (\n ethQuery: EthQuery,\n transactionMeta: TransactionMeta,\n ) => Promise<string>;\n }) {\n this.hub = new EventEmitter() as PendingTransactionTrackerEventEmitter;\n\n this.#droppedBlockCountByHash = new Map();\n this.#getChainId = getChainId;\n this.#getEthQuery = getEthQuery;\n this.#getGlobalLock = getGlobalLock;\n this.#getNetworkClientId = getNetworkClientId;\n this.#getTransactions = getTransactions;\n this.#isResubmitEnabled = isResubmitEnabled ?? ((): boolean => true);\n this.#lastSeenTimestampByHash = new Map();\n this.#listener = this.#onLatestBlock.bind(this);\n this.#messenger = messenger;\n this.#publishTransaction = publishTransaction;\n this.#running = false;\n this.#transactionToForcePoll = undefined;\n\n this.#transactionPoller = new TransactionPoller({\n blockTracker,\n chainId: getChainId(),\n messenger,\n });\n\n this.#beforeCheckPendingTransaction =\n hooks?.beforeCheckPendingTransaction ??\n /* istanbul ignore next */\n ((): Promise<boolean> => Promise.resolve(true));\n\n this.#isTimeoutEnabled = isTimeoutEnabled;\n\n this.#log = createModuleLogger(\n log,\n `${getChainId()}:${getNetworkClientId()}`,\n );\n }\n\n startIfPendingTransactions = (): void => {\n const pendingTransactions = this.#getPendingTransactions();\n\n if (pendingTransactions.length) {\n this.#start(pendingTransactions);\n } else {\n this.stop();\n }\n };\n\n /**\n * Adds a transaction to the polling mechanism for monitoring its status.\n *\n * This method forcefully adds a single transaction to the list of transactions\n * being polled, ensuring that its status is checked, event emitted but no update is performed.\n * It overrides the default behavior by prioritizing the given transaction for polling.\n *\n * @param transactionMeta - The transaction metadata to be added for polling.\n *\n * The transaction will now be monitored for updates, such as confirmation or failure.\n */\n addTransactionToPoll(transactionMeta: TransactionMeta): void {\n this.#start([transactionMeta]);\n this.#transactionToForcePoll = transactionMeta;\n }\n\n /**\n * Force checks the network if the given transaction is confirmed and updates it's status.\n *\n * @param txMeta - The transaction to check\n */\n async forceCheckTransaction(txMeta: TransactionMeta): Promise<void> {\n const releaseLock = await this.#getGlobalLock();\n\n try {\n await this.#checkTransaction(txMeta);\n } catch (error) {\n /* istanbul ignore next */\n this.#log('Failed to check transaction', error);\n } finally {\n releaseLock();\n }\n }\n\n #start(pendingTransactions: TransactionMeta[]): void {\n this.#transactionPoller.setPendingTransactions(pendingTransactions);\n\n if (this.#running) {\n return;\n }\n\n this.#transactionPoller.start(this.#listener);\n this.#running = true;\n\n this.#log('Started polling');\n }\n\n stop(): void {\n if (!this.#running) {\n return;\n }\n\n this.#transactionPoller.stop();\n this.#running = false;\n\n this.#log('Stopped polling');\n }\n\n async #onLatestBlock(latestBlockNumber: string): Promise<void> {\n const releaseLock = await this.#getGlobalLock();\n\n try {\n await this.#checkTransactions();\n } catch (error) {\n /* istanbul ignore next */\n this.#log('Failed to check transactions', error);\n } finally {\n releaseLock();\n }\n\n try {\n await this.#resubmitTransactions(latestBlockNumber);\n } catch (error) {\n /* istanbul ignore next */\n this.#log('Failed to resubmit transactions', error);\n }\n }\n\n async #checkTransactions(): Promise<void> {\n this.#log('Checking transactions');\n\n const pendingTransactions: TransactionMeta[] = [\n ...this.#getPendingTransactions(),\n ...(this.#transactionToForcePoll ? [this.#transactionToForcePoll] : []),\n ];\n\n if (!pendingTransactions.length) {\n this.#log('No pending transactions to check');\n return;\n }\n\n this.#log('Found pending transactions to check', {\n count: pendingTransactions.length,\n ids: pendingTransactions.map((tx) => tx.id),\n });\n\n await Promise.all(\n pendingTransactions.map((tx) => this.#checkTransaction(tx)),\n );\n }\n\n async #resubmitTransactions(latestBlockNumber: string): Promise<void> {\n if (!this.#isResubmitEnabled() || !this.#running) {\n return;\n }\n\n this.#log('Resubmitting transactions');\n\n const pendingTransactions = this.#getPendingTransactions();\n\n if (!pendingTransactions.length) {\n this.#log('No pending transactions to resubmit');\n return;\n }\n\n this.#log('Found pending transactions to resubmit', {\n count: pendingTransactions.length,\n ids: pendingTransactions.map((tx) => tx.id),\n });\n\n for (const txMeta of pendingTransactions) {\n try {\n await this.#resubmitTransaction(txMeta, latestBlockNumber);\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n /* istanbul ignore next */\n const errorMessage =\n error.value?.message?.toLowerCase() ??\n error.message?.toLowerCase() ??\n String(error);\n\n if (this.#isKnownTransactionError(errorMessage)) {\n this.#log('Ignoring known transaction error', errorMessage);\n continue;\n }\n\n this.#warnTransaction(\n txMeta,\n error.message,\n 'There was an error when resubmitting this transaction.',\n );\n }\n }\n }\n\n #isKnownTransactionError(errorMessage: string): boolean {\n return KNOWN_TRANSACTION_ERRORS.some((knownError) =>\n errorMessage.includes(knownError),\n );\n }\n\n async #resubmitTransaction(\n txMeta: TransactionMeta,\n latestBlockNumber: string,\n ): Promise<void> {\n if (!this.#isResubmitDue(txMeta, latestBlockNumber)) {\n return;\n }\n\n if (!(await this.#beforeCheckPendingTransaction(txMeta))) {\n return;\n }\n\n const ethQuery = this.#getEthQuery(txMeta.networkClientId);\n await this.#publishTransaction(ethQuery, txMeta);\n\n const retryCount = (txMeta.retryCount ?? 0) + 1;\n\n this.#updateTransaction(\n merge({}, txMeta, { retryCount }),\n 'PendingTransactionTracker:transaction-retry - Retry count increased',\n );\n }\n\n #isResubmitDue(txMeta: TransactionMeta, latestBlockNumber: string): boolean {\n const txMetaWithFirstRetryBlockNumber = cloneDeep(txMeta);\n\n if (!txMetaWithFirstRetryBlockNumber.firstRetryBlockNumber) {\n txMetaWithFirstRetryBlockNumber.firstRetryBlockNumber = latestBlockNumber;\n\n this.#updateTransaction(\n txMetaWithFirstRetryBlockNumber,\n 'PendingTransactionTracker:#isResubmitDue - First retry block number set',\n );\n }\n\n const { firstRetryBlockNumber } = txMetaWithFirstRetryBlockNumber;\n\n const blocksSinceFirstRetry =\n Number.parseInt(latestBlockNumber, 16) -\n Number.parseInt(firstRetryBlockNumber, 16);\n\n const retryCount = txMeta.retryCount ?? 0;\n\n // Exponential backoff to limit retries at publishing\n // Capped at ~15 minutes between retries\n const requiredBlocksSinceFirstRetry = Math.min(\n MAX_RETRY_BLOCK_DISTANCE,\n Math.pow(2, retryCount),\n );\n\n return blocksSinceFirstRetry >= requiredBlocksSinceFirstRetry;\n }\n\n #cleanTransaction(txMeta: TransactionMeta): void {\n const { hash, id } = txMeta;\n\n if (this.#transactionToForcePoll?.id === id) {\n this.#transactionToForcePoll = undefined;\n }\n\n if (hash) {\n this.#lastSeenTimestampByHash.delete(hash);\n }\n }\n\n async #checkTransaction(txMeta: TransactionMeta): Promise<void> {\n const {\n hash,\n id,\n isIntentComplete,\n txParams: { from },\n } = txMeta;\n\n if (isIntentComplete) {\n await this.#onTransactionConfirmed(txMeta);\n return;\n }\n\n if (!hash && (await this.#beforeCheckPendingTransaction(txMeta))) {\n const error = new Error(\n 'We had an error while submitting this transaction, please try again.',\n );\n\n error.name = 'NoTxHashError';\n\n this.#failTransaction(txMeta, error);\n\n return;\n }\n\n if (this.#isNonceTaken(txMeta)) {\n this.#log('Nonce already taken', id);\n this.#dropTransaction(txMeta);\n return;\n }\n\n try {\n const receipt = await this.#getTransactionReceipt(hash);\n const isSuccess = receipt?.status === RECEIPT_STATUS_SUCCESS;\n const isFailure = receipt?.status === RECEIPT_STATUS_FAILURE;\n\n if (isFailure) {\n this.#log('Transaction receipt has failed status');\n\n this.#failTransaction(txMeta, new Error('Transaction failed on-chain'));\n\n return;\n }\n\n const { blockNumber, blockHash } = receipt ?? {};\n\n if (isSuccess && blockNumber && blockHash) {\n await this.#onTransactionConfirmed(txMeta, {\n ...receipt,\n blockNumber,\n blockHash,\n });\n\n return;\n }\n\n this.#log('No receipt status', { hash, receipt });\n\n const nextNonceHex = await this.#getNetworkTransactionCount(from);\n const nextNonce = parseInt(nextNonceHex, 16);\n\n // Check if transaction should be failed due to no receipt\n if (!receipt && (await this.#isTransactionTimeout(txMeta, nextNonce))) {\n return;\n }\n\n if (await this.#isTransactionDropped(txMeta, nextNonce)) {\n this.#dropTransaction(txMeta);\n }\n } catch (error) {\n this.#log('Failed to check transaction', id, error);\n\n this.#warnTransaction(\n txMeta,\n (error as { message: string }).message,\n 'There was a problem loading this transaction.',\n );\n }\n }\n\n async #onTransactionConfirmed(\n txMeta: TransactionMeta,\n receipt?: SuccessfulTransactionReceipt,\n ): Promise<void> {\n const { id } = txMeta;\n const { blockHash } = receipt ?? {};\n\n this.#log('Transaction confirmed', id);\n\n const isForcePollTransaction = this.#transactionToForcePoll?.id === id;\n\n this.#cleanTransaction(txMeta);\n\n if (isForcePollTransaction) {\n this.hub.emit('transaction-confirmed', txMeta);\n return;\n }\n\n const updatedTxMeta = cloneDeep(txMeta);\n\n if (receipt && blockHash) {\n const { baseFeePerGas, timestamp: blockTimestamp } =\n await this.#getBlockByHash(blockHash, false);\n\n updatedTxMeta.baseFeePerGas = baseFeePerGas;\n updatedTxMeta.blockTimestamp = blockTimestamp;\n updatedTxMeta.txParams = {\n ...updatedTxMeta.txParams,\n gasUsed: receipt.gasUsed,\n };\n updatedTxMeta.txReceipt = receipt;\n updatedTxMeta.verifiedOnBlockchain = true;\n }\n\n updatedTxMeta.status = TransactionStatus.confirmed;\n\n this.#updateTransaction(\n updatedTxMeta,\n 'PendingTransactionTracker:#onTransactionConfirmed - Transaction confirmed',\n );\n\n this.hub.emit('transaction-confirmed', updatedTxMeta);\n }\n\n async #isTransactionTimeout(\n txMeta: TransactionMeta,\n nextNonce: number,\n ): Promise<boolean> {\n const {\n chainId,\n hash,\n id: transactionId,\n submittedTime,\n txParams: { nonce },\n } = txMeta;\n\n if (!hash || !nonce) {\n return false;\n }\n\n if (!this.#isTimeoutEnabled(txMeta)) {\n this.#log('Timeout disabled for transaction', txMeta);\n return false;\n }\n\n const threshold = getTimeoutAttempts(chainId, this.#messenger);\n\n // Feature is disabled if threshold is undefined or zero\n if (threshold === undefined || threshold === 0) {\n this.#log('Timeout disabled due to threshold', { chainId, threshold });\n return false;\n }\n\n // Skip timeout if this transaction's nonce is a queued transaction with a future nonce\n const nonceNumber = parseInt(nonce, 16);\n\n if (nonceNumber > nextNonce) {\n this.#log('Skipping timeout as queued transaction', {\n transactionNonce: nonceNumber,\n nextNonce,\n });\n return false;\n }\n\n try {\n // Check if transaction exists on the network\n const transaction = await this.#getTransactionByHash(hash);\n\n // If transaction exists, record the timestamp\n if (transaction !== null) {\n const currentTimestamp = Date.now();\n\n this.#log(\n 'Transaction found on network, recording timestamp',\n transactionId,\n );\n\n this.#lastSeenTimestampByHash.set(hash, currentTimestamp);\n return false;\n }\n\n const lastSeenTimestamp =\n this.#lastSeenTimestampByHash.get(hash) ?? submittedTime;\n\n if (lastSeenTimestamp === undefined) {\n this.#log(\n 'Transaction not yet seen on network and has no submitted time, skipping timeout check',\n transactionId,\n );\n\n return false;\n }\n\n const { blockTime } = getAcceleratedPollingParams(\n chainId,\n this.#messenger,\n );\n\n const currentTimestamp = Date.now();\n const durationSinceLastSeen = currentTimestamp - lastSeenTimestamp;\n const timeoutDuration = blockTime * threshold;\n\n this.#log('Checking timeout duration', {\n transactionId,\n durationSinceLastSeen,\n timeoutDuration,\n threshold,\n blockTime,\n });\n\n if (durationSinceLastSeen < timeoutDuration) {\n return false;\n }\n\n this.#log('Hit timeout duration threshold', transactionId);\n this.#lastSeenTimestampByHash.delete(hash);\n\n this.#failTransaction(\n txMeta,\n new Error('Transaction not found on network after timeout'),\n );\n\n return true;\n } catch (error) {\n this.#log('Failed to check transaction by hash', transactionId, error);\n return false;\n }\n }\n\n async #isTransactionDropped(\n txMeta: TransactionMeta,\n nextNonce: number,\n ): Promise<boolean> {\n const {\n hash,\n id,\n txParams: { nonce },\n } = txMeta;\n\n /* istanbul ignore next */\n if (!nonce || !hash) {\n return false;\n }\n\n const nonceNumber = parseInt(nonce, 16);\n\n if (nonceNumber >= nextNonce) {\n return false;\n }\n\n let droppedBlockCount = this.#droppedBlockCountByHash.get(hash);\n\n if (droppedBlockCount === undefined) {\n droppedBlockCount = 0;\n this.#droppedBlockCountByHash.set(hash, droppedBlockCount);\n }\n\n if (droppedBlockCount < DROPPED_BLOCK_COUNT) {\n this.#log('Incrementing dropped block count', { id, droppedBlockCount });\n this.#droppedBlockCountByHash.set(hash, droppedBlockCount + 1);\n return false;\n }\n\n this.#log('Hit dropped block count', id);\n\n this.#droppedBlockCountByHash.delete(hash);\n return true;\n }\n\n #isNonceTaken(txMeta: TransactionMeta): boolean {\n const { id, txParams } = txMeta;\n\n return this.#getChainTransactions().some(\n (tx) =>\n tx.id !== id &&\n tx.txParams.from === txParams.from &&\n tx.status === TransactionStatus.confirmed &&\n tx.txParams.nonce &&\n tx.txParams.nonce === txParams.nonce &&\n tx.type !== TransactionType.incoming &&\n tx.isTransfer === undefined,\n );\n }\n\n #getPendingTransactions(): TransactionMeta[] {\n return this.#getNetworkClientTransactions().filter(\n (tx) =>\n tx.status === TransactionStatus.submitted &&\n !tx.verifiedOnBlockchain &&\n !tx.isUserOperation &&\n !tx.isStateOnly,\n );\n }\n\n #warnTransaction(\n txMeta: TransactionMeta,\n error: string,\n message: string,\n ): void {\n this.#updateTransaction(\n {\n ...txMeta,\n warning: { error, message },\n },\n 'PendingTransactionTracker:#warnTransaction - Warning added',\n );\n }\n\n #failTransaction(txMeta: TransactionMeta, error: Error): void {\n this.#log('Transaction failed', txMeta.id, error);\n this.#cleanTransaction(txMeta);\n this.hub.emit('transaction-failed', txMeta, error);\n }\n\n #dropTransaction(txMeta: TransactionMeta): void {\n this.#log('Transaction dropped', txMeta.id);\n this.#cleanTransaction(txMeta);\n this.hub.emit('transaction-dropped', txMeta);\n }\n\n #updateTransaction(txMeta: TransactionMeta, note: string): void {\n this.hub.emit('transaction-updated', txMeta, note);\n }\n\n async #getTransactionReceipt(\n txHash?: string,\n ): Promise<TransactionReceipt | undefined> {\n return await query(this.#getEthQuery(), 'getTransactionReceipt', [txHash]);\n }\n\n async #getTransactionByHash(txHash?: string): Promise<Json> {\n return await query(this.#getEthQuery(), 'getTransactionByHash', [txHash]);\n }\n\n async #getBlockByHash(\n blockHash: string,\n includeTransactionDetails: boolean,\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): Promise<any> {\n return await query(this.#getEthQuery(), 'getBlockByHash', [\n blockHash,\n includeTransactionDetails,\n ]);\n }\n\n async #getNetworkTransactionCount(address: string): Promise<string> {\n return await query(this.#getEthQuery(), 'getTransactionCount', [address]);\n }\n\n #getChainTransactions(): TransactionMeta[] {\n const chainId = this.#getChainId();\n return this.#getTransactions().filter((tx) => tx.chainId === chainId);\n }\n\n #getNetworkClientTransactions(): TransactionMeta[] {\n const networkClientId = this.#getNetworkClientId();\n return this.#getTransactions().filter(\n (tx) => tx.networkClientId === networkClientId,\n );\n }\n}\n"]}
1
+ {"version":3,"file":"PendingTransactionTracker.mjs","sourceRoot":"","sources":["../../src/helpers/PendingTransactionTracker.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n BlockTracker,\n NetworkClientId,\n} from '@metamask/network-controller';\nimport type { Json } from '@metamask/utils';\n// This package purposefully relies on Node's EventEmitter module.\n// eslint-disable-next-line import-x/no-nodejs-modules\nimport EventEmitter from 'events';\nimport { cloneDeep, merge } from 'lodash';\n\nimport { TransactionPoller } from './TransactionPoller';\nimport { createModuleLogger, projectLogger } from '../logger';\nimport type { TransactionControllerMessenger } from '../TransactionController';\nimport type { TransactionMeta, TransactionReceipt } from '../types';\nimport { TransactionStatus, TransactionType } from '../types';\nimport {\n getAcceleratedPollingParams,\n getTimeoutAttempts,\n} from '../utils/feature-flags';\nimport { getChainId, rpcRequest } from '../utils/provider';\n\n/**\n * We wait this many blocks before emitting a 'transaction-dropped' event\n * This is because we could be talking to a node that is out of sync\n */\nconst DROPPED_BLOCK_COUNT = 3;\n\nconst RECEIPT_STATUS_SUCCESS = '0x1';\nconst RECEIPT_STATUS_FAILURE = '0x0';\nconst MAX_RETRY_BLOCK_DISTANCE = 50;\n\nconst KNOWN_TRANSACTION_ERRORS = [\n 'replacement transaction underpriced',\n 'known transaction',\n 'gas price too low to replace',\n 'transaction with the same hash was already imported',\n 'gateway timeout',\n 'nonce too low',\n];\n\nconst log = createModuleLogger(projectLogger, 'pending-transactions');\n\ntype SuccessfulTransactionReceipt = TransactionReceipt & {\n blockNumber: string;\n blockHash: string;\n};\n\ntype Events = {\n 'transaction-confirmed': [txMeta: TransactionMeta];\n 'transaction-dropped': [txMeta: TransactionMeta];\n 'transaction-failed': [txMeta: TransactionMeta, error: Error];\n 'transaction-updated': [txMeta: TransactionMeta, note: string];\n};\n\n// This interface was created before this ESLint rule was added.\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface PendingTransactionTrackerEventEmitter extends EventEmitter {\n on<EventName extends keyof Events>(\n eventName: EventName,\n listener: (...args: Events[EventName]) => void,\n ): this;\n\n emit<EventName extends keyof Events>(\n eventName: EventName,\n ...args: Events[EventName]\n ): boolean;\n}\n\nexport class PendingTransactionTracker {\n hub: PendingTransactionTrackerEventEmitter;\n\n readonly #beforeCheckPendingTransaction: (\n transactionMeta: TransactionMeta,\n ) => Promise<boolean>;\n\n readonly #droppedBlockCountByHash: Map<string, number>;\n\n readonly #isTimeoutEnabled: (transactionMeta: TransactionMeta) => boolean;\n\n readonly #getGlobalLock: () => Promise<() => void>;\n\n readonly #chainId: string;\n\n readonly #networkClientId: NetworkClientId;\n\n readonly #getTransactions: () => TransactionMeta[];\n\n readonly #isResubmitEnabled: () => boolean;\n\n readonly #lastSeenTimestampByHash: Map<string, number>;\n\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n readonly #listener: any;\n\n readonly #log: debug.Debugger;\n\n readonly #messenger: TransactionControllerMessenger;\n\n readonly #publishTransaction: (\n transactionMeta: TransactionMeta,\n ) => Promise<string>;\n\n #running: boolean;\n\n readonly #transactionPoller: TransactionPoller;\n\n #transactionToForcePoll: TransactionMeta | undefined;\n\n constructor({\n blockTracker,\n getGlobalLock,\n getTransactions,\n isTimeoutEnabled,\n hooks,\n isResubmitEnabled,\n messenger,\n networkClientId,\n publishTransaction,\n }: {\n blockTracker: BlockTracker;\n getGlobalLock: () => Promise<() => void>;\n getTransactions: () => TransactionMeta[];\n hooks?: {\n beforeCheckPendingTransaction?: (\n transactionMeta: TransactionMeta,\n ) => Promise<boolean>;\n };\n isResubmitEnabled?: () => boolean;\n isTimeoutEnabled: (transactionMeta: TransactionMeta) => boolean;\n messenger: TransactionControllerMessenger;\n networkClientId: NetworkClientId;\n publishTransaction: (transactionMeta: TransactionMeta) => Promise<string>;\n }) {\n this.hub = new EventEmitter() as PendingTransactionTrackerEventEmitter;\n\n const chainId = getChainId({ messenger, networkClientId });\n\n this.#chainId = chainId;\n this.#droppedBlockCountByHash = new Map();\n this.#getGlobalLock = getGlobalLock;\n this.#networkClientId = networkClientId;\n this.#getTransactions = getTransactions;\n this.#isResubmitEnabled = isResubmitEnabled ?? ((): boolean => true);\n this.#lastSeenTimestampByHash = new Map();\n this.#listener = this.#onLatestBlock.bind(this);\n this.#messenger = messenger;\n this.#publishTransaction = publishTransaction;\n this.#running = false;\n this.#transactionToForcePoll = undefined;\n\n this.#transactionPoller = new TransactionPoller({\n blockTracker,\n chainId,\n messenger,\n });\n\n this.#beforeCheckPendingTransaction =\n hooks?.beforeCheckPendingTransaction ??\n /* istanbul ignore next */\n ((): Promise<boolean> => Promise.resolve(true));\n\n this.#isTimeoutEnabled = isTimeoutEnabled;\n\n this.#log = createModuleLogger(log, `${chainId}:${networkClientId}`);\n }\n\n startIfPendingTransactions = (): void => {\n const pendingTransactions = this.#getPendingTransactions();\n\n if (pendingTransactions.length) {\n this.#start(pendingTransactions);\n } else {\n this.stop();\n }\n };\n\n /**\n * Adds a transaction to the polling mechanism for monitoring its status.\n *\n * This method forcefully adds a single transaction to the list of transactions\n * being polled, ensuring that its status is checked, event emitted but no update is performed.\n * It overrides the default behavior by prioritizing the given transaction for polling.\n *\n * @param transactionMeta - The transaction metadata to be added for polling.\n *\n * The transaction will now be monitored for updates, such as confirmation or failure.\n */\n addTransactionToPoll(transactionMeta: TransactionMeta): void {\n this.#start([transactionMeta]);\n this.#transactionToForcePoll = transactionMeta;\n }\n\n /**\n * Force checks the network if the given transaction is confirmed and updates it's status.\n *\n * @param txMeta - The transaction to check\n */\n async forceCheckTransaction(txMeta: TransactionMeta): Promise<void> {\n const releaseLock = await this.#getGlobalLock();\n\n try {\n await this.#checkTransaction(txMeta);\n } catch (error) {\n /* istanbul ignore next */\n this.#log('Failed to check transaction', error);\n } finally {\n releaseLock();\n }\n }\n\n #start(pendingTransactions: TransactionMeta[]): void {\n this.#transactionPoller.setPendingTransactions(pendingTransactions);\n\n if (this.#running) {\n return;\n }\n\n this.#transactionPoller.start(this.#listener);\n this.#running = true;\n\n this.#log('Started polling');\n }\n\n stop(): void {\n if (!this.#running) {\n return;\n }\n\n this.#transactionPoller.stop();\n this.#running = false;\n\n this.#log('Stopped polling');\n }\n\n async #onLatestBlock(latestBlockNumber: string): Promise<void> {\n const releaseLock = await this.#getGlobalLock();\n\n try {\n await this.#checkTransactions();\n } catch (error) {\n /* istanbul ignore next */\n this.#log('Failed to check transactions', error);\n } finally {\n releaseLock();\n }\n\n try {\n await this.#resubmitTransactions(latestBlockNumber);\n } catch (error) {\n /* istanbul ignore next */\n this.#log('Failed to resubmit transactions', error);\n }\n }\n\n async #checkTransactions(): Promise<void> {\n this.#log('Checking transactions');\n\n const pendingTransactions: TransactionMeta[] = [\n ...this.#getPendingTransactions(),\n ...(this.#transactionToForcePoll ? [this.#transactionToForcePoll] : []),\n ];\n\n if (!pendingTransactions.length) {\n this.#log('No pending transactions to check');\n return;\n }\n\n this.#log('Found pending transactions to check', {\n count: pendingTransactions.length,\n ids: pendingTransactions.map((tx) => tx.id),\n });\n\n await Promise.all(\n pendingTransactions.map((tx) => this.#checkTransaction(tx)),\n );\n }\n\n async #resubmitTransactions(latestBlockNumber: string): Promise<void> {\n if (!this.#isResubmitEnabled() || !this.#running) {\n return;\n }\n\n this.#log('Resubmitting transactions');\n\n const pendingTransactions = this.#getPendingTransactions();\n\n if (!pendingTransactions.length) {\n this.#log('No pending transactions to resubmit');\n return;\n }\n\n this.#log('Found pending transactions to resubmit', {\n count: pendingTransactions.length,\n ids: pendingTransactions.map((tx) => tx.id),\n });\n\n for (const txMeta of pendingTransactions) {\n try {\n await this.#resubmitTransaction(txMeta, latestBlockNumber);\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n /* istanbul ignore next */\n const errorMessage =\n error.value?.message?.toLowerCase() ??\n error.message?.toLowerCase() ??\n String(error);\n\n if (this.#isKnownTransactionError(errorMessage)) {\n this.#log('Ignoring known transaction error', errorMessage);\n continue;\n }\n\n this.#warnTransaction(\n txMeta,\n error.message,\n 'There was an error when resubmitting this transaction.',\n );\n }\n }\n }\n\n #isKnownTransactionError(errorMessage: string): boolean {\n return KNOWN_TRANSACTION_ERRORS.some((knownError) =>\n errorMessage.includes(knownError),\n );\n }\n\n async #resubmitTransaction(\n txMeta: TransactionMeta,\n latestBlockNumber: string,\n ): Promise<void> {\n if (!this.#isResubmitDue(txMeta, latestBlockNumber)) {\n return;\n }\n\n if (!(await this.#beforeCheckPendingTransaction(txMeta))) {\n return;\n }\n\n await this.#publishTransaction(txMeta);\n\n const retryCount = (txMeta.retryCount ?? 0) + 1;\n\n this.#updateTransaction(\n merge({}, txMeta, { retryCount }),\n 'PendingTransactionTracker:transaction-retry - Retry count increased',\n );\n }\n\n #isResubmitDue(txMeta: TransactionMeta, latestBlockNumber: string): boolean {\n const txMetaWithFirstRetryBlockNumber = cloneDeep(txMeta);\n\n if (!txMetaWithFirstRetryBlockNumber.firstRetryBlockNumber) {\n txMetaWithFirstRetryBlockNumber.firstRetryBlockNumber = latestBlockNumber;\n\n this.#updateTransaction(\n txMetaWithFirstRetryBlockNumber,\n 'PendingTransactionTracker:#isResubmitDue - First retry block number set',\n );\n }\n\n const { firstRetryBlockNumber } = txMetaWithFirstRetryBlockNumber;\n\n const blocksSinceFirstRetry =\n Number.parseInt(latestBlockNumber, 16) -\n Number.parseInt(firstRetryBlockNumber, 16);\n\n const retryCount = txMeta.retryCount ?? 0;\n\n // Exponential backoff to limit retries at publishing\n // Capped at ~15 minutes between retries\n const requiredBlocksSinceFirstRetry = Math.min(\n MAX_RETRY_BLOCK_DISTANCE,\n Math.pow(2, retryCount),\n );\n\n return blocksSinceFirstRetry >= requiredBlocksSinceFirstRetry;\n }\n\n #cleanTransaction(txMeta: TransactionMeta): void {\n const { hash, id } = txMeta;\n\n if (this.#transactionToForcePoll?.id === id) {\n this.#transactionToForcePoll = undefined;\n }\n\n if (hash) {\n this.#lastSeenTimestampByHash.delete(hash);\n }\n }\n\n async #checkTransaction(txMeta: TransactionMeta): Promise<void> {\n const {\n hash,\n id,\n isIntentComplete,\n txParams: { from },\n } = txMeta;\n\n if (isIntentComplete) {\n await this.#onTransactionConfirmed(txMeta);\n return;\n }\n\n if (!hash && (await this.#beforeCheckPendingTransaction(txMeta))) {\n const error = new Error(\n 'We had an error while submitting this transaction, please try again.',\n );\n\n error.name = 'NoTxHashError';\n\n this.#failTransaction(txMeta, error);\n\n return;\n }\n\n if (this.#isNonceTaken(txMeta)) {\n this.#log('Nonce already taken', id);\n this.#dropTransaction(txMeta);\n return;\n }\n\n try {\n const receipt = await this.#getTransactionReceipt(hash);\n const isSuccess = receipt?.status === RECEIPT_STATUS_SUCCESS;\n const isFailure = receipt?.status === RECEIPT_STATUS_FAILURE;\n\n if (isFailure) {\n this.#log('Transaction receipt has failed status');\n\n this.#failTransaction(txMeta, new Error('Transaction failed on-chain'));\n\n return;\n }\n\n const { blockNumber, blockHash } = receipt ?? {};\n\n if (isSuccess && blockNumber && blockHash) {\n await this.#onTransactionConfirmed(txMeta, {\n ...receipt,\n blockNumber,\n blockHash,\n });\n\n return;\n }\n\n this.#log('No receipt status', { hash, receipt });\n\n const nextNonceHex = await this.#getNetworkTransactionCount(from);\n const nextNonce = parseInt(nextNonceHex, 16);\n\n // Check if transaction should be failed due to no receipt\n if (!receipt && (await this.#isTransactionTimeout(txMeta, nextNonce))) {\n return;\n }\n\n if (await this.#isTransactionDropped(txMeta, nextNonce)) {\n this.#dropTransaction(txMeta);\n }\n } catch (error) {\n this.#log('Failed to check transaction', id, error);\n\n this.#warnTransaction(\n txMeta,\n (error as { message: string }).message,\n 'There was a problem loading this transaction.',\n );\n }\n }\n\n async #onTransactionConfirmed(\n txMeta: TransactionMeta,\n receipt?: SuccessfulTransactionReceipt,\n ): Promise<void> {\n const { id } = txMeta;\n const { blockHash } = receipt ?? {};\n\n this.#log('Transaction confirmed', id);\n\n const isForcePollTransaction = this.#transactionToForcePoll?.id === id;\n\n this.#cleanTransaction(txMeta);\n\n if (isForcePollTransaction) {\n this.hub.emit('transaction-confirmed', txMeta);\n return;\n }\n\n const updatedTxMeta = cloneDeep(txMeta);\n\n if (receipt && blockHash) {\n const { baseFeePerGas, timestamp: blockTimestamp } =\n await this.#getBlockByHash(blockHash, false);\n\n updatedTxMeta.baseFeePerGas = baseFeePerGas;\n updatedTxMeta.blockTimestamp = blockTimestamp;\n updatedTxMeta.txParams = {\n ...updatedTxMeta.txParams,\n gasUsed: receipt.gasUsed,\n };\n updatedTxMeta.txReceipt = receipt;\n updatedTxMeta.verifiedOnBlockchain = true;\n }\n\n updatedTxMeta.status = TransactionStatus.confirmed;\n\n this.#updateTransaction(\n updatedTxMeta,\n 'PendingTransactionTracker:#onTransactionConfirmed - Transaction confirmed',\n );\n\n this.hub.emit('transaction-confirmed', updatedTxMeta);\n }\n\n async #isTransactionTimeout(\n txMeta: TransactionMeta,\n nextNonce: number,\n ): Promise<boolean> {\n const {\n chainId,\n hash,\n id: transactionId,\n submittedTime,\n txParams: { nonce },\n } = txMeta;\n\n if (!hash || !nonce) {\n return false;\n }\n\n if (!this.#isTimeoutEnabled(txMeta)) {\n this.#log('Timeout disabled for transaction', txMeta);\n return false;\n }\n\n const threshold = getTimeoutAttempts(chainId, this.#messenger);\n\n // Feature is disabled if threshold is undefined or zero\n if (threshold === undefined || threshold === 0) {\n this.#log('Timeout disabled due to threshold', { chainId, threshold });\n return false;\n }\n\n // Skip timeout if this transaction's nonce is a queued transaction with a future nonce\n const nonceNumber = parseInt(nonce, 16);\n\n if (nonceNumber > nextNonce) {\n this.#log('Skipping timeout as queued transaction', {\n transactionNonce: nonceNumber,\n nextNonce,\n });\n return false;\n }\n\n try {\n // Check if transaction exists on the network\n const transaction = await this.#getTransactionByHash(hash);\n\n // If transaction exists, record the timestamp\n if (transaction !== null) {\n const currentTimestamp = Date.now();\n\n this.#log(\n 'Transaction found on network, recording timestamp',\n transactionId,\n );\n\n this.#lastSeenTimestampByHash.set(hash, currentTimestamp);\n return false;\n }\n\n const lastSeenTimestamp =\n this.#lastSeenTimestampByHash.get(hash) ?? submittedTime;\n\n if (lastSeenTimestamp === undefined) {\n this.#log(\n 'Transaction not yet seen on network and has no submitted time, skipping timeout check',\n transactionId,\n );\n\n return false;\n }\n\n const { blockTime } = getAcceleratedPollingParams(\n chainId,\n this.#messenger,\n );\n\n const currentTimestamp = Date.now();\n const durationSinceLastSeen = currentTimestamp - lastSeenTimestamp;\n const timeoutDuration = blockTime * threshold;\n\n this.#log('Checking timeout duration', {\n transactionId,\n durationSinceLastSeen,\n timeoutDuration,\n threshold,\n blockTime,\n });\n\n if (durationSinceLastSeen < timeoutDuration) {\n return false;\n }\n\n this.#log('Hit timeout duration threshold', transactionId);\n this.#lastSeenTimestampByHash.delete(hash);\n\n this.#failTransaction(\n txMeta,\n new Error('Transaction not found on network after timeout'),\n );\n\n return true;\n } catch (error) {\n this.#log('Failed to check transaction by hash', transactionId, error);\n return false;\n }\n }\n\n async #isTransactionDropped(\n txMeta: TransactionMeta,\n nextNonce: number,\n ): Promise<boolean> {\n const {\n hash,\n id,\n txParams: { nonce },\n } = txMeta;\n\n /* istanbul ignore next */\n if (!nonce || !hash) {\n return false;\n }\n\n const nonceNumber = parseInt(nonce, 16);\n\n if (nonceNumber >= nextNonce) {\n return false;\n }\n\n let droppedBlockCount = this.#droppedBlockCountByHash.get(hash);\n\n if (droppedBlockCount === undefined) {\n droppedBlockCount = 0;\n this.#droppedBlockCountByHash.set(hash, droppedBlockCount);\n }\n\n if (droppedBlockCount < DROPPED_BLOCK_COUNT) {\n this.#log('Incrementing dropped block count', { id, droppedBlockCount });\n this.#droppedBlockCountByHash.set(hash, droppedBlockCount + 1);\n return false;\n }\n\n this.#log('Hit dropped block count', id);\n\n this.#droppedBlockCountByHash.delete(hash);\n return true;\n }\n\n #isNonceTaken(txMeta: TransactionMeta): boolean {\n const { id, txParams } = txMeta;\n\n return this.#getChainTransactions().some(\n (tx) =>\n tx.id !== id &&\n tx.txParams.from === txParams.from &&\n tx.status === TransactionStatus.confirmed &&\n tx.txParams.nonce &&\n tx.txParams.nonce === txParams.nonce &&\n tx.type !== TransactionType.incoming &&\n tx.isTransfer === undefined,\n );\n }\n\n #getPendingTransactions(): TransactionMeta[] {\n return this.#getNetworkClientTransactions().filter(\n (tx) =>\n tx.status === TransactionStatus.submitted &&\n !tx.verifiedOnBlockchain &&\n !tx.isUserOperation &&\n !tx.isStateOnly,\n );\n }\n\n #warnTransaction(\n txMeta: TransactionMeta,\n error: string,\n message: string,\n ): void {\n this.#updateTransaction(\n {\n ...txMeta,\n warning: { error, message },\n },\n 'PendingTransactionTracker:#warnTransaction - Warning added',\n );\n }\n\n #failTransaction(txMeta: TransactionMeta, error: Error): void {\n this.#log('Transaction failed', txMeta.id, error);\n this.#cleanTransaction(txMeta);\n this.hub.emit('transaction-failed', txMeta, error);\n }\n\n #dropTransaction(txMeta: TransactionMeta): void {\n this.#log('Transaction dropped', txMeta.id);\n this.#cleanTransaction(txMeta);\n this.hub.emit('transaction-dropped', txMeta);\n }\n\n #updateTransaction(txMeta: TransactionMeta, note: string): void {\n this.hub.emit('transaction-updated', txMeta, note);\n }\n\n async #getTransactionReceipt(\n txHash?: string,\n ): Promise<TransactionReceipt | undefined> {\n return (await rpcRequest({\n messenger: this.#messenger,\n networkClientId: this.#networkClientId,\n method: 'eth_getTransactionReceipt',\n params: [txHash as string],\n })) as TransactionReceipt | undefined;\n }\n\n async #getTransactionByHash(txHash?: string): Promise<Json> {\n return (await rpcRequest({\n messenger: this.#messenger,\n networkClientId: this.#networkClientId,\n method: 'eth_getTransactionByHash',\n params: [txHash as string],\n })) as Json;\n }\n\n async #getBlockByHash(\n blockHash: string,\n includeTransactionDetails: boolean,\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): Promise<any> {\n return await rpcRequest({\n messenger: this.#messenger,\n networkClientId: this.#networkClientId,\n method: 'eth_getBlockByHash',\n params: [blockHash, includeTransactionDetails],\n });\n }\n\n async #getNetworkTransactionCount(address: string): Promise<string> {\n return (await rpcRequest({\n messenger: this.#messenger,\n networkClientId: this.#networkClientId,\n method: 'eth_getTransactionCount',\n params: [address, 'latest'],\n })) as string;\n }\n\n #getChainTransactions(): TransactionMeta[] {\n return this.#getTransactions().filter((tx) => tx.chainId === this.#chainId);\n }\n\n #getNetworkClientTransactions(): TransactionMeta[] {\n const networkClientId = this.#networkClientId;\n return this.#getTransactions().filter(\n (tx) => tx.networkClientId === networkClientId,\n );\n }\n}\n"]}
@@ -10,7 +10,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
10
10
  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");
11
11
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
12
  };
13
- var _SequentialPublishBatchHook_instances, _SequentialPublishBatchHook_publishTransaction, _SequentialPublishBatchHook_getTransaction, _SequentialPublishBatchHook_getEthQuery, _SequentialPublishBatchHook_getPendingTransactionTracker, _SequentialPublishBatchHook_boundListeners, _SequentialPublishBatchHook_hook, _SequentialPublishBatchHook_waitForTransactionEvent, _SequentialPublishBatchHook_onConfirmed, _SequentialPublishBatchHook_onFailedOrDropped, _SequentialPublishBatchHook_removeListeners;
13
+ var _SequentialPublishBatchHook_instances, _SequentialPublishBatchHook_publishTransaction, _SequentialPublishBatchHook_getTransaction, _SequentialPublishBatchHook_getPendingTransactionTracker, _SequentialPublishBatchHook_boundListeners, _SequentialPublishBatchHook_hook, _SequentialPublishBatchHook_waitForTransactionEvent, _SequentialPublishBatchHook_onConfirmed, _SequentialPublishBatchHook_onFailedOrDropped, _SequentialPublishBatchHook_removeListeners;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.SequentialPublishBatchHook = void 0;
16
16
  const rpc_errors_1 = require("@metamask/rpc-errors");
@@ -22,16 +22,14 @@ const log = (0, utils_1.createModuleLogger)(logger_1.projectLogger, 'sequential-
22
22
  * Requires the batch to be successful to resolve.
23
23
  */
24
24
  class SequentialPublishBatchHook {
25
- constructor({ publishTransaction, getTransaction, getPendingTransactionTracker, getEthQuery, }) {
25
+ constructor({ publishTransaction, getTransaction, getPendingTransactionTracker, }) {
26
26
  _SequentialPublishBatchHook_instances.add(this);
27
27
  _SequentialPublishBatchHook_publishTransaction.set(this, void 0);
28
28
  _SequentialPublishBatchHook_getTransaction.set(this, void 0);
29
- _SequentialPublishBatchHook_getEthQuery.set(this, void 0);
30
29
  _SequentialPublishBatchHook_getPendingTransactionTracker.set(this, void 0);
31
30
  _SequentialPublishBatchHook_boundListeners.set(this, {});
32
31
  __classPrivateFieldSet(this, _SequentialPublishBatchHook_publishTransaction, publishTransaction, "f");
33
32
  __classPrivateFieldSet(this, _SequentialPublishBatchHook_getTransaction, getTransaction, "f");
34
- __classPrivateFieldSet(this, _SequentialPublishBatchHook_getEthQuery, getEthQuery, "f");
35
33
  __classPrivateFieldSet(this, _SequentialPublishBatchHook_getPendingTransactionTracker, getPendingTransactionTracker, "f");
36
34
  }
37
35
  /**
@@ -42,14 +40,14 @@ class SequentialPublishBatchHook {
42
40
  }
43
41
  }
44
42
  exports.SequentialPublishBatchHook = SequentialPublishBatchHook;
45
- _SequentialPublishBatchHook_publishTransaction = new WeakMap(), _SequentialPublishBatchHook_getTransaction = new WeakMap(), _SequentialPublishBatchHook_getEthQuery = new WeakMap(), _SequentialPublishBatchHook_getPendingTransactionTracker = new WeakMap(), _SequentialPublishBatchHook_boundListeners = new WeakMap(), _SequentialPublishBatchHook_instances = new WeakSet(), _SequentialPublishBatchHook_hook = async function _SequentialPublishBatchHook_hook({ from, networkClientId, transactions, }) {
43
+ _SequentialPublishBatchHook_publishTransaction = new WeakMap(), _SequentialPublishBatchHook_getTransaction = new WeakMap(), _SequentialPublishBatchHook_getPendingTransactionTracker = new WeakMap(), _SequentialPublishBatchHook_boundListeners = new WeakMap(), _SequentialPublishBatchHook_instances = new WeakSet(), _SequentialPublishBatchHook_hook = async function _SequentialPublishBatchHook_hook({ from, networkClientId, transactions, }) {
46
44
  log('Starting sequential publish batch hook', { from, networkClientId });
47
45
  const pendingTransactionTracker = __classPrivateFieldGet(this, _SequentialPublishBatchHook_getPendingTransactionTracker, "f").call(this, networkClientId);
48
46
  const results = [];
49
47
  for (const transaction of transactions) {
50
48
  try {
51
49
  const transactionMeta = __classPrivateFieldGet(this, _SequentialPublishBatchHook_getTransaction, "f").call(this, String(transaction.id));
52
- const transactionHash = await __classPrivateFieldGet(this, _SequentialPublishBatchHook_publishTransaction, "f").call(this, __classPrivateFieldGet(this, _SequentialPublishBatchHook_getEthQuery, "f").call(this, networkClientId), transactionMeta);
50
+ const transactionHash = await __classPrivateFieldGet(this, _SequentialPublishBatchHook_publishTransaction, "f").call(this, transactionMeta);
53
51
  log('Transaction published', { transactionHash });
54
52
  const transactionUpdated = {
55
53
  ...transactionMeta,
@@ -1 +1 @@
1
- {"version":3,"file":"SequentialPublishBatchHook.cjs","sourceRoot":"","sources":["../../src/hooks/SequentialPublishBatchHook.ts"],"names":[],"mappings":"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","sourcesContent":["import type EthQuery from '@metamask/eth-query';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport { createModuleLogger } from '@metamask/utils';\nimport type { Hex } from '@metamask/utils';\n\nimport type { PendingTransactionTracker } from '../helpers/PendingTransactionTracker';\nimport { projectLogger } from '../logger';\nimport type {\n PublishBatchHook,\n PublishBatchHookRequest,\n PublishBatchHookResult,\n TransactionMeta,\n} from '../types';\n\nconst log = createModuleLogger(projectLogger, 'sequential-publish-batch-hook');\n\ntype SequentialPublishBatchHookOptions = {\n publishTransaction: (\n ethQuery: EthQuery,\n transactionMeta: TransactionMeta,\n ) => Promise<Hex>;\n getTransaction: (id: string) => TransactionMeta;\n getEthQuery: (networkClientId: string) => EthQuery;\n getPendingTransactionTracker: (\n networkClientId: string,\n ) => PendingTransactionTracker;\n};\n\n/**\n * Custom publish logic that also publishes additional sequential transactions in a batch.\n * Requires the batch to be successful to resolve.\n */\nexport class SequentialPublishBatchHook {\n readonly #publishTransaction: (\n ethQuery: EthQuery,\n transactionMeta: TransactionMeta,\n ) => Promise<Hex>;\n\n readonly #getTransaction: (id: string) => TransactionMeta;\n\n readonly #getEthQuery: (networkClientId: string) => EthQuery;\n\n readonly #getPendingTransactionTracker: (\n networkClientId: string,\n ) => PendingTransactionTracker;\n\n #boundListeners: Record<\n string,\n {\n onConfirmed: (txMeta: TransactionMeta) => void;\n onFailedOrDropped: (txMeta: TransactionMeta, error?: Error) => void;\n }\n > = {};\n\n constructor({\n publishTransaction,\n getTransaction,\n getPendingTransactionTracker,\n getEthQuery,\n }: SequentialPublishBatchHookOptions) {\n this.#publishTransaction = publishTransaction;\n this.#getTransaction = getTransaction;\n this.#getEthQuery = getEthQuery;\n this.#getPendingTransactionTracker = getPendingTransactionTracker;\n }\n\n /**\n * @returns The publish batch hook function.\n */\n getHook(): PublishBatchHook {\n return this.#hook.bind(this);\n }\n\n async #hook({\n from,\n networkClientId,\n transactions,\n }: PublishBatchHookRequest): Promise<PublishBatchHookResult> {\n log('Starting sequential publish batch hook', { from, networkClientId });\n\n const pendingTransactionTracker =\n this.#getPendingTransactionTracker(networkClientId);\n const results = [];\n\n for (const transaction of transactions) {\n try {\n const transactionMeta = this.#getTransaction(String(transaction.id));\n\n const transactionHash = await this.#publishTransaction(\n this.#getEthQuery(networkClientId),\n transactionMeta,\n );\n log('Transaction published', { transactionHash });\n\n const transactionUpdated = {\n ...transactionMeta,\n hash: transactionHash,\n };\n\n const confirmationPromise = this.#waitForTransactionEvent(\n pendingTransactionTracker,\n transactionUpdated.id,\n transactionUpdated.hash,\n );\n\n pendingTransactionTracker.addTransactionToPoll(transactionUpdated);\n\n await confirmationPromise;\n results.push({ transactionHash });\n } catch (error) {\n log('Batch transaction failed', { transaction, error });\n pendingTransactionTracker.stop();\n throw rpcErrors.internal(`Failed to publish batch transaction`);\n }\n }\n\n log('Sequential publish batch hook completed', { results });\n pendingTransactionTracker.stop();\n\n return { results };\n }\n\n /**\n * Waits for a transaction event (confirmed, failed, or dropped) and resolves/rejects accordingly.\n *\n * @param pendingTransactionTracker - The tracker instance to subscribe to events.\n * @param transactionId - The transaction ID.\n * @param transactionHash - The hash of the transaction.\n * @returns A promise that resolves when the transaction is confirmed or rejects if it fails or is dropped.\n */\n async #waitForTransactionEvent(\n pendingTransactionTracker: PendingTransactionTracker,\n transactionId: string,\n transactionHash: string,\n ): Promise<TransactionMeta> {\n return new Promise((resolve, reject) => {\n const onConfirmed = this.#onConfirmed.bind(\n this,\n transactionId,\n transactionHash,\n resolve,\n pendingTransactionTracker,\n );\n\n const onFailedOrDropped = this.#onFailedOrDropped.bind(\n this,\n transactionId,\n transactionHash,\n reject,\n pendingTransactionTracker,\n );\n\n this.#boundListeners[transactionId] = {\n onConfirmed,\n onFailedOrDropped,\n };\n\n pendingTransactionTracker.hub.on('transaction-confirmed', onConfirmed);\n pendingTransactionTracker.hub.on('transaction-failed', onFailedOrDropped);\n pendingTransactionTracker.hub.on(\n 'transaction-dropped',\n onFailedOrDropped,\n );\n });\n }\n\n #onConfirmed(\n transactionId: string,\n transactionHash: string,\n resolve: (txMeta: TransactionMeta) => void,\n pendingTransactionTracker: PendingTransactionTracker,\n txMeta: TransactionMeta,\n ): void {\n if (txMeta.id !== transactionId) {\n return;\n }\n\n log('Transaction confirmed', { transactionHash });\n this.#removeListeners(pendingTransactionTracker, transactionId);\n resolve(txMeta);\n }\n\n #onFailedOrDropped(\n transactionId: string,\n transactionHash: string,\n reject: (error: Error) => void,\n pendingTransactionTracker: PendingTransactionTracker,\n txMeta: TransactionMeta,\n error?: Error,\n ): void {\n if (txMeta.id !== transactionId) {\n return;\n }\n\n log('Transaction failed or dropped', { transactionHash, error });\n this.#removeListeners(pendingTransactionTracker, transactionId);\n reject(new Error(`Transaction ${transactionHash} failed or dropped.`));\n }\n\n #removeListeners(\n pendingTransactionTracker: PendingTransactionTracker,\n transactionId: string,\n ): void {\n const listeners = this.#boundListeners[transactionId];\n\n pendingTransactionTracker.hub.off(\n 'transaction-confirmed',\n listeners.onConfirmed,\n );\n pendingTransactionTracker.hub.off(\n 'transaction-failed',\n listeners.onFailedOrDropped,\n );\n pendingTransactionTracker.hub.off(\n 'transaction-dropped',\n listeners.onFailedOrDropped,\n );\n\n delete this.#boundListeners[transactionId];\n }\n}\n"]}
1
+ {"version":3,"file":"SequentialPublishBatchHook.cjs","sourceRoot":"","sources":["../../src/hooks/SequentialPublishBatchHook.ts"],"names":[],"mappings":"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","sourcesContent":["import { rpcErrors } from '@metamask/rpc-errors';\nimport { createModuleLogger } from '@metamask/utils';\nimport type { Hex } from '@metamask/utils';\n\nimport type { PendingTransactionTracker } from '../helpers/PendingTransactionTracker';\nimport { projectLogger } from '../logger';\nimport type {\n PublishBatchHook,\n PublishBatchHookRequest,\n PublishBatchHookResult,\n TransactionMeta,\n} from '../types';\n\nconst log = createModuleLogger(projectLogger, 'sequential-publish-batch-hook');\n\ntype SequentialPublishBatchHookOptions = {\n publishTransaction: (transactionMeta: TransactionMeta) => Promise<Hex>;\n getTransaction: (id: string) => TransactionMeta;\n getPendingTransactionTracker: (\n networkClientId: string,\n ) => PendingTransactionTracker;\n};\n\n/**\n * Custom publish logic that also publishes additional sequential transactions in a batch.\n * Requires the batch to be successful to resolve.\n */\nexport class SequentialPublishBatchHook {\n readonly #publishTransaction: (\n transactionMeta: TransactionMeta,\n ) => Promise<Hex>;\n\n readonly #getTransaction: (id: string) => TransactionMeta;\n\n readonly #getPendingTransactionTracker: (\n networkClientId: string,\n ) => PendingTransactionTracker;\n\n #boundListeners: Record<\n string,\n {\n onConfirmed: (txMeta: TransactionMeta) => void;\n onFailedOrDropped: (txMeta: TransactionMeta, error?: Error) => void;\n }\n > = {};\n\n constructor({\n publishTransaction,\n getTransaction,\n getPendingTransactionTracker,\n }: SequentialPublishBatchHookOptions) {\n this.#publishTransaction = publishTransaction;\n this.#getTransaction = getTransaction;\n this.#getPendingTransactionTracker = getPendingTransactionTracker;\n }\n\n /**\n * @returns The publish batch hook function.\n */\n getHook(): PublishBatchHook {\n return this.#hook.bind(this);\n }\n\n async #hook({\n from,\n networkClientId,\n transactions,\n }: PublishBatchHookRequest): Promise<PublishBatchHookResult> {\n log('Starting sequential publish batch hook', { from, networkClientId });\n\n const pendingTransactionTracker =\n this.#getPendingTransactionTracker(networkClientId);\n const results = [];\n\n for (const transaction of transactions) {\n try {\n const transactionMeta = this.#getTransaction(String(transaction.id));\n\n const transactionHash = await this.#publishTransaction(transactionMeta);\n log('Transaction published', { transactionHash });\n\n const transactionUpdated = {\n ...transactionMeta,\n hash: transactionHash,\n };\n\n const confirmationPromise = this.#waitForTransactionEvent(\n pendingTransactionTracker,\n transactionUpdated.id,\n transactionUpdated.hash,\n );\n\n pendingTransactionTracker.addTransactionToPoll(transactionUpdated);\n\n await confirmationPromise;\n results.push({ transactionHash });\n } catch (error) {\n log('Batch transaction failed', { transaction, error });\n pendingTransactionTracker.stop();\n throw rpcErrors.internal(`Failed to publish batch transaction`);\n }\n }\n\n log('Sequential publish batch hook completed', { results });\n pendingTransactionTracker.stop();\n\n return { results };\n }\n\n /**\n * Waits for a transaction event (confirmed, failed, or dropped) and resolves/rejects accordingly.\n *\n * @param pendingTransactionTracker - The tracker instance to subscribe to events.\n * @param transactionId - The transaction ID.\n * @param transactionHash - The hash of the transaction.\n * @returns A promise that resolves when the transaction is confirmed or rejects if it fails or is dropped.\n */\n async #waitForTransactionEvent(\n pendingTransactionTracker: PendingTransactionTracker,\n transactionId: string,\n transactionHash: string,\n ): Promise<TransactionMeta> {\n return new Promise((resolve, reject) => {\n const onConfirmed = this.#onConfirmed.bind(\n this,\n transactionId,\n transactionHash,\n resolve,\n pendingTransactionTracker,\n );\n\n const onFailedOrDropped = this.#onFailedOrDropped.bind(\n this,\n transactionId,\n transactionHash,\n reject,\n pendingTransactionTracker,\n );\n\n this.#boundListeners[transactionId] = {\n onConfirmed,\n onFailedOrDropped,\n };\n\n pendingTransactionTracker.hub.on('transaction-confirmed', onConfirmed);\n pendingTransactionTracker.hub.on('transaction-failed', onFailedOrDropped);\n pendingTransactionTracker.hub.on(\n 'transaction-dropped',\n onFailedOrDropped,\n );\n });\n }\n\n #onConfirmed(\n transactionId: string,\n transactionHash: string,\n resolve: (txMeta: TransactionMeta) => void,\n pendingTransactionTracker: PendingTransactionTracker,\n txMeta: TransactionMeta,\n ): void {\n if (txMeta.id !== transactionId) {\n return;\n }\n\n log('Transaction confirmed', { transactionHash });\n this.#removeListeners(pendingTransactionTracker, transactionId);\n resolve(txMeta);\n }\n\n #onFailedOrDropped(\n transactionId: string,\n transactionHash: string,\n reject: (error: Error) => void,\n pendingTransactionTracker: PendingTransactionTracker,\n txMeta: TransactionMeta,\n error?: Error,\n ): void {\n if (txMeta.id !== transactionId) {\n return;\n }\n\n log('Transaction failed or dropped', { transactionHash, error });\n this.#removeListeners(pendingTransactionTracker, transactionId);\n reject(new Error(`Transaction ${transactionHash} failed or dropped.`));\n }\n\n #removeListeners(\n pendingTransactionTracker: PendingTransactionTracker,\n transactionId: string,\n ): void {\n const listeners = this.#boundListeners[transactionId];\n\n pendingTransactionTracker.hub.off(\n 'transaction-confirmed',\n listeners.onConfirmed,\n );\n pendingTransactionTracker.hub.off(\n 'transaction-failed',\n listeners.onFailedOrDropped,\n );\n pendingTransactionTracker.hub.off(\n 'transaction-dropped',\n listeners.onFailedOrDropped,\n );\n\n delete this.#boundListeners[transactionId];\n }\n}\n"]}
@@ -1,11 +1,9 @@
1
- import type EthQuery from "@metamask/eth-query";
2
1
  import type { Hex } from "@metamask/utils";
3
2
  import type { PendingTransactionTracker } from "../helpers/PendingTransactionTracker.cjs";
4
3
  import type { PublishBatchHook, TransactionMeta } from "../types.cjs";
5
4
  type SequentialPublishBatchHookOptions = {
6
- publishTransaction: (ethQuery: EthQuery, transactionMeta: TransactionMeta) => Promise<Hex>;
5
+ publishTransaction: (transactionMeta: TransactionMeta) => Promise<Hex>;
7
6
  getTransaction: (id: string) => TransactionMeta;
8
- getEthQuery: (networkClientId: string) => EthQuery;
9
7
  getPendingTransactionTracker: (networkClientId: string) => PendingTransactionTracker;
10
8
  };
11
9
  /**
@@ -14,7 +12,7 @@ type SequentialPublishBatchHookOptions = {
14
12
  */
15
13
  export declare class SequentialPublishBatchHook {
16
14
  #private;
17
- constructor({ publishTransaction, getTransaction, getPendingTransactionTracker, getEthQuery, }: SequentialPublishBatchHookOptions);
15
+ constructor({ publishTransaction, getTransaction, getPendingTransactionTracker, }: SequentialPublishBatchHookOptions);
18
16
  /**
19
17
  * @returns The publish batch hook function.
20
18
  */
@@ -1 +1 @@
1
- {"version":3,"file":"SequentialPublishBatchHook.d.cts","sourceRoot":"","sources":["../../src/hooks/SequentialPublishBatchHook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,4BAA4B;AAGhD,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAE3C,OAAO,KAAK,EAAE,yBAAyB,EAAE,iDAA6C;AAEtF,OAAO,KAAK,EACV,gBAAgB,EAGhB,eAAe,EAChB,qBAAiB;AAIlB,KAAK,iCAAiC,GAAG;IACvC,kBAAkB,EAAE,CAClB,QAAQ,EAAE,QAAQ,EAClB,eAAe,EAAE,eAAe,KAC7B,OAAO,CAAC,GAAG,CAAC,CAAC;IAClB,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,eAAe,CAAC;IAChD,WAAW,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,QAAQ,CAAC;IACnD,4BAA4B,EAAE,CAC5B,eAAe,EAAE,MAAM,KACpB,yBAAyB,CAAC;CAChC,CAAC;AAEF;;;GAGG;AACH,qBAAa,0BAA0B;;gBAsBzB,EACV,kBAAkB,EAClB,cAAc,EACd,4BAA4B,EAC5B,WAAW,GACZ,EAAE,iCAAiC;IAOpC;;OAEG;IACH,OAAO,IAAI,gBAAgB;CAuJ5B"}
1
+ {"version":3,"file":"SequentialPublishBatchHook.d.cts","sourceRoot":"","sources":["../../src/hooks/SequentialPublishBatchHook.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAE3C,OAAO,KAAK,EAAE,yBAAyB,EAAE,iDAA6C;AAEtF,OAAO,KAAK,EACV,gBAAgB,EAGhB,eAAe,EAChB,qBAAiB;AAIlB,KAAK,iCAAiC,GAAG;IACvC,kBAAkB,EAAE,CAAC,eAAe,EAAE,eAAe,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IACvE,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,eAAe,CAAC;IAChD,4BAA4B,EAAE,CAC5B,eAAe,EAAE,MAAM,KACpB,yBAAyB,CAAC;CAChC,CAAC;AAEF;;;GAGG;AACH,qBAAa,0BAA0B;;gBAmBzB,EACV,kBAAkB,EAClB,cAAc,EACd,4BAA4B,GAC7B,EAAE,iCAAiC;IAMpC;;OAEG;IACH,OAAO,IAAI,gBAAgB;CAoJ5B"}
@@ -1,11 +1,9 @@
1
- import type EthQuery from "@metamask/eth-query";
2
1
  import type { Hex } from "@metamask/utils";
3
2
  import type { PendingTransactionTracker } from "../helpers/PendingTransactionTracker.mjs";
4
3
  import type { PublishBatchHook, TransactionMeta } from "../types.mjs";
5
4
  type SequentialPublishBatchHookOptions = {
6
- publishTransaction: (ethQuery: EthQuery, transactionMeta: TransactionMeta) => Promise<Hex>;
5
+ publishTransaction: (transactionMeta: TransactionMeta) => Promise<Hex>;
7
6
  getTransaction: (id: string) => TransactionMeta;
8
- getEthQuery: (networkClientId: string) => EthQuery;
9
7
  getPendingTransactionTracker: (networkClientId: string) => PendingTransactionTracker;
10
8
  };
11
9
  /**
@@ -14,7 +12,7 @@ type SequentialPublishBatchHookOptions = {
14
12
  */
15
13
  export declare class SequentialPublishBatchHook {
16
14
  #private;
17
- constructor({ publishTransaction, getTransaction, getPendingTransactionTracker, getEthQuery, }: SequentialPublishBatchHookOptions);
15
+ constructor({ publishTransaction, getTransaction, getPendingTransactionTracker, }: SequentialPublishBatchHookOptions);
18
16
  /**
19
17
  * @returns The publish batch hook function.
20
18
  */
@@ -1 +1 @@
1
- {"version":3,"file":"SequentialPublishBatchHook.d.mts","sourceRoot":"","sources":["../../src/hooks/SequentialPublishBatchHook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,4BAA4B;AAGhD,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAE3C,OAAO,KAAK,EAAE,yBAAyB,EAAE,iDAA6C;AAEtF,OAAO,KAAK,EACV,gBAAgB,EAGhB,eAAe,EAChB,qBAAiB;AAIlB,KAAK,iCAAiC,GAAG;IACvC,kBAAkB,EAAE,CAClB,QAAQ,EAAE,QAAQ,EAClB,eAAe,EAAE,eAAe,KAC7B,OAAO,CAAC,GAAG,CAAC,CAAC;IAClB,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,eAAe,CAAC;IAChD,WAAW,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,QAAQ,CAAC;IACnD,4BAA4B,EAAE,CAC5B,eAAe,EAAE,MAAM,KACpB,yBAAyB,CAAC;CAChC,CAAC;AAEF;;;GAGG;AACH,qBAAa,0BAA0B;;gBAsBzB,EACV,kBAAkB,EAClB,cAAc,EACd,4BAA4B,EAC5B,WAAW,GACZ,EAAE,iCAAiC;IAOpC;;OAEG;IACH,OAAO,IAAI,gBAAgB;CAuJ5B"}
1
+ {"version":3,"file":"SequentialPublishBatchHook.d.mts","sourceRoot":"","sources":["../../src/hooks/SequentialPublishBatchHook.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAE3C,OAAO,KAAK,EAAE,yBAAyB,EAAE,iDAA6C;AAEtF,OAAO,KAAK,EACV,gBAAgB,EAGhB,eAAe,EAChB,qBAAiB;AAIlB,KAAK,iCAAiC,GAAG;IACvC,kBAAkB,EAAE,CAAC,eAAe,EAAE,eAAe,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IACvE,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,eAAe,CAAC;IAChD,4BAA4B,EAAE,CAC5B,eAAe,EAAE,MAAM,KACpB,yBAAyB,CAAC;CAChC,CAAC;AAEF;;;GAGG;AACH,qBAAa,0BAA0B;;gBAmBzB,EACV,kBAAkB,EAClB,cAAc,EACd,4BAA4B,GAC7B,EAAE,iCAAiC;IAMpC;;OAEG;IACH,OAAO,IAAI,gBAAgB;CAoJ5B"}
@@ -9,7 +9,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
9
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
10
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
11
  };
12
- var _SequentialPublishBatchHook_instances, _SequentialPublishBatchHook_publishTransaction, _SequentialPublishBatchHook_getTransaction, _SequentialPublishBatchHook_getEthQuery, _SequentialPublishBatchHook_getPendingTransactionTracker, _SequentialPublishBatchHook_boundListeners, _SequentialPublishBatchHook_hook, _SequentialPublishBatchHook_waitForTransactionEvent, _SequentialPublishBatchHook_onConfirmed, _SequentialPublishBatchHook_onFailedOrDropped, _SequentialPublishBatchHook_removeListeners;
12
+ var _SequentialPublishBatchHook_instances, _SequentialPublishBatchHook_publishTransaction, _SequentialPublishBatchHook_getTransaction, _SequentialPublishBatchHook_getPendingTransactionTracker, _SequentialPublishBatchHook_boundListeners, _SequentialPublishBatchHook_hook, _SequentialPublishBatchHook_waitForTransactionEvent, _SequentialPublishBatchHook_onConfirmed, _SequentialPublishBatchHook_onFailedOrDropped, _SequentialPublishBatchHook_removeListeners;
13
13
  import { rpcErrors } from "@metamask/rpc-errors";
14
14
  import { createModuleLogger } from "@metamask/utils";
15
15
  import { projectLogger } from "../logger.mjs";
@@ -19,16 +19,14 @@ const log = createModuleLogger(projectLogger, 'sequential-publish-batch-hook');
19
19
  * Requires the batch to be successful to resolve.
20
20
  */
21
21
  export class SequentialPublishBatchHook {
22
- constructor({ publishTransaction, getTransaction, getPendingTransactionTracker, getEthQuery, }) {
22
+ constructor({ publishTransaction, getTransaction, getPendingTransactionTracker, }) {
23
23
  _SequentialPublishBatchHook_instances.add(this);
24
24
  _SequentialPublishBatchHook_publishTransaction.set(this, void 0);
25
25
  _SequentialPublishBatchHook_getTransaction.set(this, void 0);
26
- _SequentialPublishBatchHook_getEthQuery.set(this, void 0);
27
26
  _SequentialPublishBatchHook_getPendingTransactionTracker.set(this, void 0);
28
27
  _SequentialPublishBatchHook_boundListeners.set(this, {});
29
28
  __classPrivateFieldSet(this, _SequentialPublishBatchHook_publishTransaction, publishTransaction, "f");
30
29
  __classPrivateFieldSet(this, _SequentialPublishBatchHook_getTransaction, getTransaction, "f");
31
- __classPrivateFieldSet(this, _SequentialPublishBatchHook_getEthQuery, getEthQuery, "f");
32
30
  __classPrivateFieldSet(this, _SequentialPublishBatchHook_getPendingTransactionTracker, getPendingTransactionTracker, "f");
33
31
  }
34
32
  /**
@@ -38,14 +36,14 @@ export class SequentialPublishBatchHook {
38
36
  return __classPrivateFieldGet(this, _SequentialPublishBatchHook_instances, "m", _SequentialPublishBatchHook_hook).bind(this);
39
37
  }
40
38
  }
41
- _SequentialPublishBatchHook_publishTransaction = new WeakMap(), _SequentialPublishBatchHook_getTransaction = new WeakMap(), _SequentialPublishBatchHook_getEthQuery = new WeakMap(), _SequentialPublishBatchHook_getPendingTransactionTracker = new WeakMap(), _SequentialPublishBatchHook_boundListeners = new WeakMap(), _SequentialPublishBatchHook_instances = new WeakSet(), _SequentialPublishBatchHook_hook = async function _SequentialPublishBatchHook_hook({ from, networkClientId, transactions, }) {
39
+ _SequentialPublishBatchHook_publishTransaction = new WeakMap(), _SequentialPublishBatchHook_getTransaction = new WeakMap(), _SequentialPublishBatchHook_getPendingTransactionTracker = new WeakMap(), _SequentialPublishBatchHook_boundListeners = new WeakMap(), _SequentialPublishBatchHook_instances = new WeakSet(), _SequentialPublishBatchHook_hook = async function _SequentialPublishBatchHook_hook({ from, networkClientId, transactions, }) {
42
40
  log('Starting sequential publish batch hook', { from, networkClientId });
43
41
  const pendingTransactionTracker = __classPrivateFieldGet(this, _SequentialPublishBatchHook_getPendingTransactionTracker, "f").call(this, networkClientId);
44
42
  const results = [];
45
43
  for (const transaction of transactions) {
46
44
  try {
47
45
  const transactionMeta = __classPrivateFieldGet(this, _SequentialPublishBatchHook_getTransaction, "f").call(this, String(transaction.id));
48
- const transactionHash = await __classPrivateFieldGet(this, _SequentialPublishBatchHook_publishTransaction, "f").call(this, __classPrivateFieldGet(this, _SequentialPublishBatchHook_getEthQuery, "f").call(this, networkClientId), transactionMeta);
46
+ const transactionHash = await __classPrivateFieldGet(this, _SequentialPublishBatchHook_publishTransaction, "f").call(this, transactionMeta);
49
47
  log('Transaction published', { transactionHash });
50
48
  const transactionUpdated = {
51
49
  ...transactionMeta,
@@ -1 +1 @@
1
- {"version":3,"file":"SequentialPublishBatchHook.mjs","sourceRoot":"","sources":["../../src/hooks/SequentialPublishBatchHook.ts"],"names":[],"mappings":"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","sourcesContent":["import type EthQuery from '@metamask/eth-query';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport { createModuleLogger } from '@metamask/utils';\nimport type { Hex } from '@metamask/utils';\n\nimport type { PendingTransactionTracker } from '../helpers/PendingTransactionTracker';\nimport { projectLogger } from '../logger';\nimport type {\n PublishBatchHook,\n PublishBatchHookRequest,\n PublishBatchHookResult,\n TransactionMeta,\n} from '../types';\n\nconst log = createModuleLogger(projectLogger, 'sequential-publish-batch-hook');\n\ntype SequentialPublishBatchHookOptions = {\n publishTransaction: (\n ethQuery: EthQuery,\n transactionMeta: TransactionMeta,\n ) => Promise<Hex>;\n getTransaction: (id: string) => TransactionMeta;\n getEthQuery: (networkClientId: string) => EthQuery;\n getPendingTransactionTracker: (\n networkClientId: string,\n ) => PendingTransactionTracker;\n};\n\n/**\n * Custom publish logic that also publishes additional sequential transactions in a batch.\n * Requires the batch to be successful to resolve.\n */\nexport class SequentialPublishBatchHook {\n readonly #publishTransaction: (\n ethQuery: EthQuery,\n transactionMeta: TransactionMeta,\n ) => Promise<Hex>;\n\n readonly #getTransaction: (id: string) => TransactionMeta;\n\n readonly #getEthQuery: (networkClientId: string) => EthQuery;\n\n readonly #getPendingTransactionTracker: (\n networkClientId: string,\n ) => PendingTransactionTracker;\n\n #boundListeners: Record<\n string,\n {\n onConfirmed: (txMeta: TransactionMeta) => void;\n onFailedOrDropped: (txMeta: TransactionMeta, error?: Error) => void;\n }\n > = {};\n\n constructor({\n publishTransaction,\n getTransaction,\n getPendingTransactionTracker,\n getEthQuery,\n }: SequentialPublishBatchHookOptions) {\n this.#publishTransaction = publishTransaction;\n this.#getTransaction = getTransaction;\n this.#getEthQuery = getEthQuery;\n this.#getPendingTransactionTracker = getPendingTransactionTracker;\n }\n\n /**\n * @returns The publish batch hook function.\n */\n getHook(): PublishBatchHook {\n return this.#hook.bind(this);\n }\n\n async #hook({\n from,\n networkClientId,\n transactions,\n }: PublishBatchHookRequest): Promise<PublishBatchHookResult> {\n log('Starting sequential publish batch hook', { from, networkClientId });\n\n const pendingTransactionTracker =\n this.#getPendingTransactionTracker(networkClientId);\n const results = [];\n\n for (const transaction of transactions) {\n try {\n const transactionMeta = this.#getTransaction(String(transaction.id));\n\n const transactionHash = await this.#publishTransaction(\n this.#getEthQuery(networkClientId),\n transactionMeta,\n );\n log('Transaction published', { transactionHash });\n\n const transactionUpdated = {\n ...transactionMeta,\n hash: transactionHash,\n };\n\n const confirmationPromise = this.#waitForTransactionEvent(\n pendingTransactionTracker,\n transactionUpdated.id,\n transactionUpdated.hash,\n );\n\n pendingTransactionTracker.addTransactionToPoll(transactionUpdated);\n\n await confirmationPromise;\n results.push({ transactionHash });\n } catch (error) {\n log('Batch transaction failed', { transaction, error });\n pendingTransactionTracker.stop();\n throw rpcErrors.internal(`Failed to publish batch transaction`);\n }\n }\n\n log('Sequential publish batch hook completed', { results });\n pendingTransactionTracker.stop();\n\n return { results };\n }\n\n /**\n * Waits for a transaction event (confirmed, failed, or dropped) and resolves/rejects accordingly.\n *\n * @param pendingTransactionTracker - The tracker instance to subscribe to events.\n * @param transactionId - The transaction ID.\n * @param transactionHash - The hash of the transaction.\n * @returns A promise that resolves when the transaction is confirmed or rejects if it fails or is dropped.\n */\n async #waitForTransactionEvent(\n pendingTransactionTracker: PendingTransactionTracker,\n transactionId: string,\n transactionHash: string,\n ): Promise<TransactionMeta> {\n return new Promise((resolve, reject) => {\n const onConfirmed = this.#onConfirmed.bind(\n this,\n transactionId,\n transactionHash,\n resolve,\n pendingTransactionTracker,\n );\n\n const onFailedOrDropped = this.#onFailedOrDropped.bind(\n this,\n transactionId,\n transactionHash,\n reject,\n pendingTransactionTracker,\n );\n\n this.#boundListeners[transactionId] = {\n onConfirmed,\n onFailedOrDropped,\n };\n\n pendingTransactionTracker.hub.on('transaction-confirmed', onConfirmed);\n pendingTransactionTracker.hub.on('transaction-failed', onFailedOrDropped);\n pendingTransactionTracker.hub.on(\n 'transaction-dropped',\n onFailedOrDropped,\n );\n });\n }\n\n #onConfirmed(\n transactionId: string,\n transactionHash: string,\n resolve: (txMeta: TransactionMeta) => void,\n pendingTransactionTracker: PendingTransactionTracker,\n txMeta: TransactionMeta,\n ): void {\n if (txMeta.id !== transactionId) {\n return;\n }\n\n log('Transaction confirmed', { transactionHash });\n this.#removeListeners(pendingTransactionTracker, transactionId);\n resolve(txMeta);\n }\n\n #onFailedOrDropped(\n transactionId: string,\n transactionHash: string,\n reject: (error: Error) => void,\n pendingTransactionTracker: PendingTransactionTracker,\n txMeta: TransactionMeta,\n error?: Error,\n ): void {\n if (txMeta.id !== transactionId) {\n return;\n }\n\n log('Transaction failed or dropped', { transactionHash, error });\n this.#removeListeners(pendingTransactionTracker, transactionId);\n reject(new Error(`Transaction ${transactionHash} failed or dropped.`));\n }\n\n #removeListeners(\n pendingTransactionTracker: PendingTransactionTracker,\n transactionId: string,\n ): void {\n const listeners = this.#boundListeners[transactionId];\n\n pendingTransactionTracker.hub.off(\n 'transaction-confirmed',\n listeners.onConfirmed,\n );\n pendingTransactionTracker.hub.off(\n 'transaction-failed',\n listeners.onFailedOrDropped,\n );\n pendingTransactionTracker.hub.off(\n 'transaction-dropped',\n listeners.onFailedOrDropped,\n );\n\n delete this.#boundListeners[transactionId];\n }\n}\n"]}
1
+ {"version":3,"file":"SequentialPublishBatchHook.mjs","sourceRoot":"","sources":["../../src/hooks/SequentialPublishBatchHook.ts"],"names":[],"mappings":"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","sourcesContent":["import { rpcErrors } from '@metamask/rpc-errors';\nimport { createModuleLogger } from '@metamask/utils';\nimport type { Hex } from '@metamask/utils';\n\nimport type { PendingTransactionTracker } from '../helpers/PendingTransactionTracker';\nimport { projectLogger } from '../logger';\nimport type {\n PublishBatchHook,\n PublishBatchHookRequest,\n PublishBatchHookResult,\n TransactionMeta,\n} from '../types';\n\nconst log = createModuleLogger(projectLogger, 'sequential-publish-batch-hook');\n\ntype SequentialPublishBatchHookOptions = {\n publishTransaction: (transactionMeta: TransactionMeta) => Promise<Hex>;\n getTransaction: (id: string) => TransactionMeta;\n getPendingTransactionTracker: (\n networkClientId: string,\n ) => PendingTransactionTracker;\n};\n\n/**\n * Custom publish logic that also publishes additional sequential transactions in a batch.\n * Requires the batch to be successful to resolve.\n */\nexport class SequentialPublishBatchHook {\n readonly #publishTransaction: (\n transactionMeta: TransactionMeta,\n ) => Promise<Hex>;\n\n readonly #getTransaction: (id: string) => TransactionMeta;\n\n readonly #getPendingTransactionTracker: (\n networkClientId: string,\n ) => PendingTransactionTracker;\n\n #boundListeners: Record<\n string,\n {\n onConfirmed: (txMeta: TransactionMeta) => void;\n onFailedOrDropped: (txMeta: TransactionMeta, error?: Error) => void;\n }\n > = {};\n\n constructor({\n publishTransaction,\n getTransaction,\n getPendingTransactionTracker,\n }: SequentialPublishBatchHookOptions) {\n this.#publishTransaction = publishTransaction;\n this.#getTransaction = getTransaction;\n this.#getPendingTransactionTracker = getPendingTransactionTracker;\n }\n\n /**\n * @returns The publish batch hook function.\n */\n getHook(): PublishBatchHook {\n return this.#hook.bind(this);\n }\n\n async #hook({\n from,\n networkClientId,\n transactions,\n }: PublishBatchHookRequest): Promise<PublishBatchHookResult> {\n log('Starting sequential publish batch hook', { from, networkClientId });\n\n const pendingTransactionTracker =\n this.#getPendingTransactionTracker(networkClientId);\n const results = [];\n\n for (const transaction of transactions) {\n try {\n const transactionMeta = this.#getTransaction(String(transaction.id));\n\n const transactionHash = await this.#publishTransaction(transactionMeta);\n log('Transaction published', { transactionHash });\n\n const transactionUpdated = {\n ...transactionMeta,\n hash: transactionHash,\n };\n\n const confirmationPromise = this.#waitForTransactionEvent(\n pendingTransactionTracker,\n transactionUpdated.id,\n transactionUpdated.hash,\n );\n\n pendingTransactionTracker.addTransactionToPoll(transactionUpdated);\n\n await confirmationPromise;\n results.push({ transactionHash });\n } catch (error) {\n log('Batch transaction failed', { transaction, error });\n pendingTransactionTracker.stop();\n throw rpcErrors.internal(`Failed to publish batch transaction`);\n }\n }\n\n log('Sequential publish batch hook completed', { results });\n pendingTransactionTracker.stop();\n\n return { results };\n }\n\n /**\n * Waits for a transaction event (confirmed, failed, or dropped) and resolves/rejects accordingly.\n *\n * @param pendingTransactionTracker - The tracker instance to subscribe to events.\n * @param transactionId - The transaction ID.\n * @param transactionHash - The hash of the transaction.\n * @returns A promise that resolves when the transaction is confirmed or rejects if it fails or is dropped.\n */\n async #waitForTransactionEvent(\n pendingTransactionTracker: PendingTransactionTracker,\n transactionId: string,\n transactionHash: string,\n ): Promise<TransactionMeta> {\n return new Promise((resolve, reject) => {\n const onConfirmed = this.#onConfirmed.bind(\n this,\n transactionId,\n transactionHash,\n resolve,\n pendingTransactionTracker,\n );\n\n const onFailedOrDropped = this.#onFailedOrDropped.bind(\n this,\n transactionId,\n transactionHash,\n reject,\n pendingTransactionTracker,\n );\n\n this.#boundListeners[transactionId] = {\n onConfirmed,\n onFailedOrDropped,\n };\n\n pendingTransactionTracker.hub.on('transaction-confirmed', onConfirmed);\n pendingTransactionTracker.hub.on('transaction-failed', onFailedOrDropped);\n pendingTransactionTracker.hub.on(\n 'transaction-dropped',\n onFailedOrDropped,\n );\n });\n }\n\n #onConfirmed(\n transactionId: string,\n transactionHash: string,\n resolve: (txMeta: TransactionMeta) => void,\n pendingTransactionTracker: PendingTransactionTracker,\n txMeta: TransactionMeta,\n ): void {\n if (txMeta.id !== transactionId) {\n return;\n }\n\n log('Transaction confirmed', { transactionHash });\n this.#removeListeners(pendingTransactionTracker, transactionId);\n resolve(txMeta);\n }\n\n #onFailedOrDropped(\n transactionId: string,\n transactionHash: string,\n reject: (error: Error) => void,\n pendingTransactionTracker: PendingTransactionTracker,\n txMeta: TransactionMeta,\n error?: Error,\n ): void {\n if (txMeta.id !== transactionId) {\n return;\n }\n\n log('Transaction failed or dropped', { transactionHash, error });\n this.#removeListeners(pendingTransactionTracker, transactionId);\n reject(new Error(`Transaction ${transactionHash} failed or dropped.`));\n }\n\n #removeListeners(\n pendingTransactionTracker: PendingTransactionTracker,\n transactionId: string,\n ): void {\n const listeners = this.#boundListeners[transactionId];\n\n pendingTransactionTracker.hub.off(\n 'transaction-confirmed',\n listeners.onConfirmed,\n );\n pendingTransactionTracker.hub.off(\n 'transaction-failed',\n listeners.onFailedOrDropped,\n );\n pendingTransactionTracker.hub.off(\n 'transaction-dropped',\n listeners.onFailedOrDropped,\n );\n\n delete this.#boundListeners[transactionId];\n }\n}\n"]}
package/dist/index.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.HARDFORK = exports.INCOMING_TRANSACTIONS_SUPPORTED_CHAIN_IDS = exports.CHAIN_IDS = exports.normalizeTransactionParams = exports.isEIP1559Transaction = exports.mergeGasFeeEstimates = exports.determineTransactionType = exports.WalletDevice = exports.UserFeeLevel = exports.TransactionType = exports.TransactionStatus = exports.TransactionEnvelopeType = exports.TransactionContainerType = exports.SimulationTokenStandard = exports.SimulationErrorCode = exports.GasFeeEstimateType = exports.GasFeeEstimateLevel = exports.TransactionController = exports.SPEED_UP_RATE = exports.CANCEL_RATE = void 0;
3
+ exports.getAccountAddressRelationship = exports.HARDFORK = exports.INCOMING_TRANSACTIONS_SUPPORTED_CHAIN_IDS = exports.CHAIN_IDS = exports.normalizeTransactionParams = exports.isEIP1559Transaction = exports.mergeGasFeeEstimates = exports.WalletDevice = exports.UserFeeLevel = exports.TransactionType = exports.TransactionStatus = exports.TransactionEnvelopeType = exports.TransactionContainerType = exports.SimulationTokenStandard = exports.SimulationErrorCode = exports.GasFeeEstimateType = exports.GasFeeEstimateLevel = exports.TransactionController = exports.SPEED_UP_RATE = exports.CANCEL_RATE = void 0;
4
4
  var TransactionController_1 = require("./TransactionController.cjs");
5
5
  Object.defineProperty(exports, "CANCEL_RATE", { enumerable: true, get: function () { return TransactionController_1.CANCEL_RATE; } });
6
6
  Object.defineProperty(exports, "SPEED_UP_RATE", { enumerable: true, get: function () { return TransactionController_1.SPEED_UP_RATE; } });
@@ -16,8 +16,6 @@ Object.defineProperty(exports, "TransactionStatus", { enumerable: true, get: fun
16
16
  Object.defineProperty(exports, "TransactionType", { enumerable: true, get: function () { return types_1.TransactionType; } });
17
17
  Object.defineProperty(exports, "UserFeeLevel", { enumerable: true, get: function () { return types_1.UserFeeLevel; } });
18
18
  Object.defineProperty(exports, "WalletDevice", { enumerable: true, get: function () { return types_1.WalletDevice; } });
19
- var transaction_type_1 = require("./utils/transaction-type.cjs");
20
- Object.defineProperty(exports, "determineTransactionType", { enumerable: true, get: function () { return transaction_type_1.determineTransactionType; } });
21
19
  var gas_flow_1 = require("./utils/gas-flow.cjs");
22
20
  Object.defineProperty(exports, "mergeGasFeeEstimates", { enumerable: true, get: function () { return gas_flow_1.mergeGasFeeEstimates; } });
23
21
  var utils_1 = require("./utils/utils.cjs");
@@ -29,4 +27,6 @@ var AccountsApiRemoteTransactionSource_1 = require("./helpers/AccountsApiRemoteT
29
27
  Object.defineProperty(exports, "INCOMING_TRANSACTIONS_SUPPORTED_CHAIN_IDS", { enumerable: true, get: function () { return AccountsApiRemoteTransactionSource_1.SUPPORTED_CHAIN_IDS; } });
30
28
  var prepare_1 = require("./utils/prepare.cjs");
31
29
  Object.defineProperty(exports, "HARDFORK", { enumerable: true, get: function () { return prepare_1.HARDFORK; } });
30
+ var accounts_api_1 = require("./api/accounts-api.cjs");
31
+ Object.defineProperty(exports, "getAccountAddressRelationship", { enumerable: true, get: function () { return accounts_api_1.getAccountAddressRelationship; } });
32
32
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAwDA,qEAIiC;AAH/B,oHAAA,WAAW,OAAA;AACX,sHAAA,aAAa,OAAA;AACb,8HAAA,qBAAqB,OAAA;AA0DvB,qCAWiB;AAVf,4GAAA,mBAAmB,OAAA;AACnB,2GAAA,kBAAkB,OAAA;AAClB,4GAAA,mBAAmB,OAAA;AACnB,gHAAA,uBAAuB,OAAA;AACvB,iHAAA,wBAAwB,OAAA;AACxB,gHAAA,uBAAuB,OAAA;AACvB,0GAAA,iBAAiB,OAAA;AACjB,wGAAA,eAAe,OAAA;AACf,qGAAA,YAAY,OAAA;AACZ,qGAAA,YAAY,OAAA;AAEd,iEAAoE;AAA3D,4HAAA,wBAAwB,OAAA;AACjC,iDAAwD;AAA/C,gHAAA,oBAAoB,OAAA;AAC7B,2CAGuB;AAFrB,6GAAA,oBAAoB,OAAA;AACpB,mHAAA,0BAA0B,OAAA;AAE5B,6CAAwC;AAA/B,sGAAA,SAAS,OAAA;AAClB,uGAAgI;AAAvH,+JAAA,mBAAmB,OAA6C;AACzE,+CAA2C;AAAlC,mGAAA,QAAQ,OAAA","sourcesContent":["export type {\n MethodData,\n Result,\n TransactionControllerActions,\n TransactionControllerEvents,\n TransactionControllerGetStateAction,\n TransactionControllerIncomingTransactionsReceivedEvent,\n TransactionControllerPostTransactionBalanceUpdatedEvent,\n TransactionControllerSpeedupTransactionAddedEvent,\n TransactionControllerState,\n TransactionControllerStateChangeEvent,\n TransactionControllerTransactionApprovedEvent,\n TransactionControllerTransactionConfirmedEvent,\n TransactionControllerTransactionDroppedEvent,\n TransactionControllerTransactionFailedEvent,\n TransactionControllerTransactionFinishedEvent,\n TransactionControllerTransactionNewSwapApprovalEvent,\n TransactionControllerTransactionNewSwapEvent,\n TransactionControllerTransactionPublishingSkipped,\n TransactionControllerTransactionRejectedEvent,\n TransactionControllerTransactionStatusUpdatedEvent,\n TransactionControllerTransactionSubmittedEvent,\n TransactionControllerUnapprovedTransactionAddedEvent,\n TransactionControllerMessenger,\n TransactionControllerOptions,\n} from './TransactionController';\nexport type {\n TransactionControllerAddTransactionAction,\n TransactionControllerAddTransactionBatchAction,\n TransactionControllerConfirmExternalTransactionAction,\n TransactionControllerEmulateNewTransactionAction,\n TransactionControllerEmulateTransactionUpdateAction,\n TransactionControllerEstimateGasAction,\n TransactionControllerEstimateGasBatchAction,\n TransactionControllerGetGasFeeTokensAction,\n TransactionControllerGetNonceLockAction,\n TransactionControllerGetTransactionsAction,\n TransactionControllerUpdateCustodialTransactionAction,\n TransactionControllerUpdateTransactionAction,\n TransactionControllerHandleMethodDataAction,\n TransactionControllerIsAtomicBatchSupportedAction,\n TransactionControllerStartIncomingTransactionPollingAction,\n TransactionControllerStopIncomingTransactionPollingAction,\n TransactionControllerUpdateIncomingTransactionsAction,\n TransactionControllerStopTransactionAction,\n TransactionControllerSpeedUpTransactionAction,\n TransactionControllerEstimateGasBufferedAction,\n TransactionControllerUpdateEditableParamsAction,\n TransactionControllerSetTransactionActiveAction,\n TransactionControllerApproveTransactionsWithSameNonceAction,\n TransactionControllerEstimateGasFeeAction,\n TransactionControllerGetLayer1GasFeeAction,\n TransactionControllerClearUnapprovedTransactionsAction,\n TransactionControllerAbortTransactionSigningAction,\n TransactionControllerUpdateAtomicBatchDataAction,\n} from './TransactionController-method-action-types';\nexport {\n CANCEL_RATE,\n SPEED_UP_RATE,\n TransactionController,\n} from './TransactionController';\nexport type {\n AddTransactionOptions,\n AfterAddHook,\n AfterSimulateHook,\n Authorization,\n AuthorizationList,\n BatchTransaction,\n BatchTransactionParams,\n BeforeSignHook,\n DappSuggestedGasFees,\n DefaultGasEstimates,\n FeeMarketEIP1559Values,\n FeeMarketGasFeeEstimateForLevel,\n FeeMarketGasFeeEstimates,\n GasFeeEstimates,\n GasFeeToken,\n GasPriceGasFeeEstimates,\n GasPriceValue,\n GetGasFeeTokensRequest,\n GetSimulationConfig,\n InferTransactionTypeResult,\n IsAtomicBatchSupportedRequest,\n IsAtomicBatchSupportedResult,\n IsAtomicBatchSupportedResultEntry,\n LegacyGasFeeEstimates,\n Log,\n MetamaskPayMetadata,\n NestedTransactionMetadata,\n PublishBatchHook,\n PublishBatchHookRequest,\n PublishBatchHookResult,\n PublishBatchHookTransaction,\n PublishHook,\n PublishHookResult,\n RequiredAsset,\n SavedGasFees,\n SecurityAlertResponse,\n SecurityProviderRequest,\n SendFlowHistoryEntry,\n SimulationBalanceChange,\n SimulationData,\n SimulationError,\n SimulationToken,\n SimulationTokenBalanceChange,\n TransactionBatchMeta,\n TransactionBatchRequest,\n TransactionBatchResult,\n TransactionBatchSingleRequest,\n TransactionError,\n TransactionHistory,\n TransactionHistoryEntry,\n TransactionMeta,\n TransactionParams,\n TransactionReceipt,\n ValidateSecurityRequest,\n} from './types';\nexport {\n GasFeeEstimateLevel,\n GasFeeEstimateType,\n SimulationErrorCode,\n SimulationTokenStandard,\n TransactionContainerType,\n TransactionEnvelopeType,\n TransactionStatus,\n TransactionType,\n UserFeeLevel,\n WalletDevice,\n} from './types';\nexport { determineTransactionType } from './utils/transaction-type';\nexport { mergeGasFeeEstimates } from './utils/gas-flow';\nexport {\n isEIP1559Transaction,\n normalizeTransactionParams,\n} from './utils/utils';\nexport { CHAIN_IDS } from './constants';\nexport { SUPPORTED_CHAIN_IDS as INCOMING_TRANSACTIONS_SUPPORTED_CHAIN_IDS } from './helpers/AccountsApiRemoteTransactionSource';\nexport { HARDFORK } from './utils/prepare';\n"]}
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAwDA,qEAIiC;AAH/B,oHAAA,WAAW,OAAA;AACX,sHAAA,aAAa,OAAA;AACb,8HAAA,qBAAqB,OAAA;AA0DvB,qCAWiB;AAVf,4GAAA,mBAAmB,OAAA;AACnB,2GAAA,kBAAkB,OAAA;AAClB,4GAAA,mBAAmB,OAAA;AACnB,gHAAA,uBAAuB,OAAA;AACvB,iHAAA,wBAAwB,OAAA;AACxB,gHAAA,uBAAuB,OAAA;AACvB,0GAAA,iBAAiB,OAAA;AACjB,wGAAA,eAAe,OAAA;AACf,qGAAA,YAAY,OAAA;AACZ,qGAAA,YAAY,OAAA;AAEd,iDAAwD;AAA/C,gHAAA,oBAAoB,OAAA;AAC7B,2CAGuB;AAFrB,6GAAA,oBAAoB,OAAA;AACpB,mHAAA,0BAA0B,OAAA;AAE5B,6CAAwC;AAA/B,sGAAA,SAAS,OAAA;AAClB,uGAAgI;AAAvH,+JAAA,mBAAmB,OAA6C;AACzE,+CAA2C;AAAlC,mGAAA,QAAQ,OAAA;AACjB,uDAAmE;AAA1D,6HAAA,6BAA6B,OAAA","sourcesContent":["export type {\n MethodData,\n Result,\n TransactionControllerActions,\n TransactionControllerEvents,\n TransactionControllerGetStateAction,\n TransactionControllerIncomingTransactionsReceivedEvent,\n TransactionControllerPostTransactionBalanceUpdatedEvent,\n TransactionControllerSpeedupTransactionAddedEvent,\n TransactionControllerState,\n TransactionControllerStateChangeEvent,\n TransactionControllerTransactionApprovedEvent,\n TransactionControllerTransactionConfirmedEvent,\n TransactionControllerTransactionDroppedEvent,\n TransactionControllerTransactionFailedEvent,\n TransactionControllerTransactionFinishedEvent,\n TransactionControllerTransactionNewSwapApprovalEvent,\n TransactionControllerTransactionNewSwapEvent,\n TransactionControllerTransactionPublishingSkipped,\n TransactionControllerTransactionRejectedEvent,\n TransactionControllerTransactionStatusUpdatedEvent,\n TransactionControllerTransactionSubmittedEvent,\n TransactionControllerUnapprovedTransactionAddedEvent,\n TransactionControllerMessenger,\n TransactionControllerOptions,\n} from './TransactionController';\nexport type {\n TransactionControllerAddTransactionAction,\n TransactionControllerAddTransactionBatchAction,\n TransactionControllerConfirmExternalTransactionAction,\n TransactionControllerEmulateNewTransactionAction,\n TransactionControllerEmulateTransactionUpdateAction,\n TransactionControllerEstimateGasAction,\n TransactionControllerEstimateGasBatchAction,\n TransactionControllerGetGasFeeTokensAction,\n TransactionControllerGetNonceLockAction,\n TransactionControllerGetTransactionsAction,\n TransactionControllerUpdateCustodialTransactionAction,\n TransactionControllerUpdateTransactionAction,\n TransactionControllerHandleMethodDataAction,\n TransactionControllerIsAtomicBatchSupportedAction,\n TransactionControllerStartIncomingTransactionPollingAction,\n TransactionControllerStopIncomingTransactionPollingAction,\n TransactionControllerUpdateIncomingTransactionsAction,\n TransactionControllerStopTransactionAction,\n TransactionControllerSpeedUpTransactionAction,\n TransactionControllerEstimateGasBufferedAction,\n TransactionControllerUpdateEditableParamsAction,\n TransactionControllerSetTransactionActiveAction,\n TransactionControllerApproveTransactionsWithSameNonceAction,\n TransactionControllerEstimateGasFeeAction,\n TransactionControllerGetLayer1GasFeeAction,\n TransactionControllerClearUnapprovedTransactionsAction,\n TransactionControllerAbortTransactionSigningAction,\n TransactionControllerUpdateAtomicBatchDataAction,\n} from './TransactionController-method-action-types';\nexport {\n CANCEL_RATE,\n SPEED_UP_RATE,\n TransactionController,\n} from './TransactionController';\nexport type {\n AddTransactionOptions,\n AfterAddHook,\n AfterSimulateHook,\n Authorization,\n AuthorizationList,\n BatchTransaction,\n BatchTransactionParams,\n BeforeSignHook,\n DappSuggestedGasFees,\n DefaultGasEstimates,\n FeeMarketEIP1559Values,\n FeeMarketGasFeeEstimateForLevel,\n FeeMarketGasFeeEstimates,\n GasFeeEstimates,\n GasFeeToken,\n GasPriceGasFeeEstimates,\n GasPriceValue,\n GetGasFeeTokensRequest,\n GetSimulationConfig,\n InferTransactionTypeResult,\n IsAtomicBatchSupportedRequest,\n IsAtomicBatchSupportedResult,\n IsAtomicBatchSupportedResultEntry,\n LegacyGasFeeEstimates,\n Log,\n MetamaskPayMetadata,\n NestedTransactionMetadata,\n PublishBatchHook,\n PublishBatchHookRequest,\n PublishBatchHookResult,\n PublishBatchHookTransaction,\n PublishHook,\n PublishHookResult,\n RequiredAsset,\n SavedGasFees,\n SecurityAlertResponse,\n SecurityProviderRequest,\n SendFlowHistoryEntry,\n SimulationBalanceChange,\n SimulationData,\n SimulationError,\n SimulationToken,\n SimulationTokenBalanceChange,\n TransactionBatchMeta,\n TransactionBatchRequest,\n TransactionBatchResult,\n TransactionBatchSingleRequest,\n TransactionError,\n TransactionHistory,\n TransactionHistoryEntry,\n TransactionMeta,\n TransactionParams,\n TransactionReceipt,\n ValidateSecurityRequest,\n} from './types';\nexport {\n GasFeeEstimateLevel,\n GasFeeEstimateType,\n SimulationErrorCode,\n SimulationTokenStandard,\n TransactionContainerType,\n TransactionEnvelopeType,\n TransactionStatus,\n TransactionType,\n UserFeeLevel,\n WalletDevice,\n} from './types';\nexport { mergeGasFeeEstimates } from './utils/gas-flow';\nexport {\n isEIP1559Transaction,\n normalizeTransactionParams,\n} from './utils/utils';\nexport { CHAIN_IDS } from './constants';\nexport { SUPPORTED_CHAIN_IDS as INCOMING_TRANSACTIONS_SUPPORTED_CHAIN_IDS } from './helpers/AccountsApiRemoteTransactionSource';\nexport { HARDFORK } from './utils/prepare';\nexport { getAccountAddressRelationship } from './api/accounts-api';\nexport type {\n GetAccountAddressRelationshipRequest,\n AccountAddressRelationshipResult,\n} from './api/accounts-api';\n"]}
package/dist/index.d.cts CHANGED
@@ -3,10 +3,11 @@ export type { TransactionControllerAddTransactionAction, TransactionControllerAd
3
3
  export { CANCEL_RATE, SPEED_UP_RATE, TransactionController, } from "./TransactionController.cjs";
4
4
  export type { AddTransactionOptions, AfterAddHook, AfterSimulateHook, Authorization, AuthorizationList, BatchTransaction, BatchTransactionParams, BeforeSignHook, DappSuggestedGasFees, DefaultGasEstimates, FeeMarketEIP1559Values, FeeMarketGasFeeEstimateForLevel, FeeMarketGasFeeEstimates, GasFeeEstimates, GasFeeToken, GasPriceGasFeeEstimates, GasPriceValue, GetGasFeeTokensRequest, GetSimulationConfig, InferTransactionTypeResult, IsAtomicBatchSupportedRequest, IsAtomicBatchSupportedResult, IsAtomicBatchSupportedResultEntry, LegacyGasFeeEstimates, Log, MetamaskPayMetadata, NestedTransactionMetadata, PublishBatchHook, PublishBatchHookRequest, PublishBatchHookResult, PublishBatchHookTransaction, PublishHook, PublishHookResult, RequiredAsset, SavedGasFees, SecurityAlertResponse, SecurityProviderRequest, SendFlowHistoryEntry, SimulationBalanceChange, SimulationData, SimulationError, SimulationToken, SimulationTokenBalanceChange, TransactionBatchMeta, TransactionBatchRequest, TransactionBatchResult, TransactionBatchSingleRequest, TransactionError, TransactionHistory, TransactionHistoryEntry, TransactionMeta, TransactionParams, TransactionReceipt, ValidateSecurityRequest, } from "./types.cjs";
5
5
  export { GasFeeEstimateLevel, GasFeeEstimateType, SimulationErrorCode, SimulationTokenStandard, TransactionContainerType, TransactionEnvelopeType, TransactionStatus, TransactionType, UserFeeLevel, WalletDevice, } from "./types.cjs";
6
- export { determineTransactionType } from "./utils/transaction-type.cjs";
7
6
  export { mergeGasFeeEstimates } from "./utils/gas-flow.cjs";
8
7
  export { isEIP1559Transaction, normalizeTransactionParams, } from "./utils/utils.cjs";
9
8
  export { CHAIN_IDS } from "./constants.cjs";
10
9
  export { SUPPORTED_CHAIN_IDS as INCOMING_TRANSACTIONS_SUPPORTED_CHAIN_IDS } from "./helpers/AccountsApiRemoteTransactionSource.cjs";
11
10
  export { HARDFORK } from "./utils/prepare.cjs";
11
+ export { getAccountAddressRelationship } from "./api/accounts-api.cjs";
12
+ export type { GetAccountAddressRelationshipRequest, AccountAddressRelationshipResult, } from "./api/accounts-api.cjs";
12
13
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,UAAU,EACV,MAAM,EACN,4BAA4B,EAC5B,2BAA2B,EAC3B,mCAAmC,EACnC,sDAAsD,EACtD,uDAAuD,EACvD,iDAAiD,EACjD,0BAA0B,EAC1B,qCAAqC,EACrC,6CAA6C,EAC7C,8CAA8C,EAC9C,4CAA4C,EAC5C,2CAA2C,EAC3C,6CAA6C,EAC7C,oDAAoD,EACpD,4CAA4C,EAC5C,iDAAiD,EACjD,6CAA6C,EAC7C,kDAAkD,EAClD,8CAA8C,EAC9C,oDAAoD,EACpD,8BAA8B,EAC9B,4BAA4B,GAC7B,oCAAgC;AACjC,YAAY,EACV,yCAAyC,EACzC,8CAA8C,EAC9C,qDAAqD,EACrD,gDAAgD,EAChD,mDAAmD,EACnD,sCAAsC,EACtC,2CAA2C,EAC3C,0CAA0C,EAC1C,uCAAuC,EACvC,0CAA0C,EAC1C,qDAAqD,EACrD,4CAA4C,EAC5C,2CAA2C,EAC3C,iDAAiD,EACjD,0DAA0D,EAC1D,yDAAyD,EACzD,qDAAqD,EACrD,0CAA0C,EAC1C,6CAA6C,EAC7C,8CAA8C,EAC9C,+CAA+C,EAC/C,+CAA+C,EAC/C,2DAA2D,EAC3D,yCAAyC,EACzC,0CAA0C,EAC1C,sDAAsD,EACtD,kDAAkD,EAClD,gDAAgD,GACjD,wDAAoD;AACrD,OAAO,EACL,WAAW,EACX,aAAa,EACb,qBAAqB,GACtB,oCAAgC;AACjC,YAAY,EACV,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,+BAA+B,EAC/B,wBAAwB,EACxB,eAAe,EACf,WAAW,EACX,uBAAuB,EACvB,aAAa,EACb,sBAAsB,EACtB,mBAAmB,EACnB,0BAA0B,EAC1B,6BAA6B,EAC7B,4BAA4B,EAC5B,iCAAiC,EACjC,qBAAqB,EACrB,GAAG,EACH,mBAAmB,EACnB,yBAAyB,EACzB,gBAAgB,EAChB,uBAAuB,EACvB,sBAAsB,EACtB,2BAA2B,EAC3B,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,EACvB,cAAc,EACd,eAAe,EACf,eAAe,EACf,4BAA4B,EAC5B,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,EACtB,6BAA6B,EAC7B,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,EACvB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,GACxB,oBAAgB;AACjB,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,YAAY,GACb,oBAAgB;AACjB,OAAO,EAAE,wBAAwB,EAAE,qCAAiC;AACpE,OAAO,EAAE,oBAAoB,EAAE,6BAAyB;AACxD,OAAO,EACL,oBAAoB,EACpB,0BAA0B,GAC3B,0BAAsB;AACvB,OAAO,EAAE,SAAS,EAAE,wBAAoB;AACxC,OAAO,EAAE,mBAAmB,IAAI,yCAAyC,EAAE,yDAAqD;AAChI,OAAO,EAAE,QAAQ,EAAE,4BAAwB"}
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,UAAU,EACV,MAAM,EACN,4BAA4B,EAC5B,2BAA2B,EAC3B,mCAAmC,EACnC,sDAAsD,EACtD,uDAAuD,EACvD,iDAAiD,EACjD,0BAA0B,EAC1B,qCAAqC,EACrC,6CAA6C,EAC7C,8CAA8C,EAC9C,4CAA4C,EAC5C,2CAA2C,EAC3C,6CAA6C,EAC7C,oDAAoD,EACpD,4CAA4C,EAC5C,iDAAiD,EACjD,6CAA6C,EAC7C,kDAAkD,EAClD,8CAA8C,EAC9C,oDAAoD,EACpD,8BAA8B,EAC9B,4BAA4B,GAC7B,oCAAgC;AACjC,YAAY,EACV,yCAAyC,EACzC,8CAA8C,EAC9C,qDAAqD,EACrD,gDAAgD,EAChD,mDAAmD,EACnD,sCAAsC,EACtC,2CAA2C,EAC3C,0CAA0C,EAC1C,uCAAuC,EACvC,0CAA0C,EAC1C,qDAAqD,EACrD,4CAA4C,EAC5C,2CAA2C,EAC3C,iDAAiD,EACjD,0DAA0D,EAC1D,yDAAyD,EACzD,qDAAqD,EACrD,0CAA0C,EAC1C,6CAA6C,EAC7C,8CAA8C,EAC9C,+CAA+C,EAC/C,+CAA+C,EAC/C,2DAA2D,EAC3D,yCAAyC,EACzC,0CAA0C,EAC1C,sDAAsD,EACtD,kDAAkD,EAClD,gDAAgD,GACjD,wDAAoD;AACrD,OAAO,EACL,WAAW,EACX,aAAa,EACb,qBAAqB,GACtB,oCAAgC;AACjC,YAAY,EACV,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,+BAA+B,EAC/B,wBAAwB,EACxB,eAAe,EACf,WAAW,EACX,uBAAuB,EACvB,aAAa,EACb,sBAAsB,EACtB,mBAAmB,EACnB,0BAA0B,EAC1B,6BAA6B,EAC7B,4BAA4B,EAC5B,iCAAiC,EACjC,qBAAqB,EACrB,GAAG,EACH,mBAAmB,EACnB,yBAAyB,EACzB,gBAAgB,EAChB,uBAAuB,EACvB,sBAAsB,EACtB,2BAA2B,EAC3B,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,EACvB,cAAc,EACd,eAAe,EACf,eAAe,EACf,4BAA4B,EAC5B,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,EACtB,6BAA6B,EAC7B,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,EACvB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,GACxB,oBAAgB;AACjB,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,YAAY,GACb,oBAAgB;AACjB,OAAO,EAAE,oBAAoB,EAAE,6BAAyB;AACxD,OAAO,EACL,oBAAoB,EACpB,0BAA0B,GAC3B,0BAAsB;AACvB,OAAO,EAAE,SAAS,EAAE,wBAAoB;AACxC,OAAO,EAAE,mBAAmB,IAAI,yCAAyC,EAAE,yDAAqD;AAChI,OAAO,EAAE,QAAQ,EAAE,4BAAwB;AAC3C,OAAO,EAAE,6BAA6B,EAAE,+BAA2B;AACnE,YAAY,EACV,oCAAoC,EACpC,gCAAgC,GACjC,+BAA2B"}
package/dist/index.d.mts CHANGED
@@ -3,10 +3,11 @@ export type { TransactionControllerAddTransactionAction, TransactionControllerAd
3
3
  export { CANCEL_RATE, SPEED_UP_RATE, TransactionController, } from "./TransactionController.mjs";
4
4
  export type { AddTransactionOptions, AfterAddHook, AfterSimulateHook, Authorization, AuthorizationList, BatchTransaction, BatchTransactionParams, BeforeSignHook, DappSuggestedGasFees, DefaultGasEstimates, FeeMarketEIP1559Values, FeeMarketGasFeeEstimateForLevel, FeeMarketGasFeeEstimates, GasFeeEstimates, GasFeeToken, GasPriceGasFeeEstimates, GasPriceValue, GetGasFeeTokensRequest, GetSimulationConfig, InferTransactionTypeResult, IsAtomicBatchSupportedRequest, IsAtomicBatchSupportedResult, IsAtomicBatchSupportedResultEntry, LegacyGasFeeEstimates, Log, MetamaskPayMetadata, NestedTransactionMetadata, PublishBatchHook, PublishBatchHookRequest, PublishBatchHookResult, PublishBatchHookTransaction, PublishHook, PublishHookResult, RequiredAsset, SavedGasFees, SecurityAlertResponse, SecurityProviderRequest, SendFlowHistoryEntry, SimulationBalanceChange, SimulationData, SimulationError, SimulationToken, SimulationTokenBalanceChange, TransactionBatchMeta, TransactionBatchRequest, TransactionBatchResult, TransactionBatchSingleRequest, TransactionError, TransactionHistory, TransactionHistoryEntry, TransactionMeta, TransactionParams, TransactionReceipt, ValidateSecurityRequest, } from "./types.mjs";
5
5
  export { GasFeeEstimateLevel, GasFeeEstimateType, SimulationErrorCode, SimulationTokenStandard, TransactionContainerType, TransactionEnvelopeType, TransactionStatus, TransactionType, UserFeeLevel, WalletDevice, } from "./types.mjs";
6
- export { determineTransactionType } from "./utils/transaction-type.mjs";
7
6
  export { mergeGasFeeEstimates } from "./utils/gas-flow.mjs";
8
7
  export { isEIP1559Transaction, normalizeTransactionParams, } from "./utils/utils.mjs";
9
8
  export { CHAIN_IDS } from "./constants.mjs";
10
9
  export { SUPPORTED_CHAIN_IDS as INCOMING_TRANSACTIONS_SUPPORTED_CHAIN_IDS } from "./helpers/AccountsApiRemoteTransactionSource.mjs";
11
10
  export { HARDFORK } from "./utils/prepare.mjs";
11
+ export { getAccountAddressRelationship } from "./api/accounts-api.mjs";
12
+ export type { GetAccountAddressRelationshipRequest, AccountAddressRelationshipResult, } from "./api/accounts-api.mjs";
12
13
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,UAAU,EACV,MAAM,EACN,4BAA4B,EAC5B,2BAA2B,EAC3B,mCAAmC,EACnC,sDAAsD,EACtD,uDAAuD,EACvD,iDAAiD,EACjD,0BAA0B,EAC1B,qCAAqC,EACrC,6CAA6C,EAC7C,8CAA8C,EAC9C,4CAA4C,EAC5C,2CAA2C,EAC3C,6CAA6C,EAC7C,oDAAoD,EACpD,4CAA4C,EAC5C,iDAAiD,EACjD,6CAA6C,EAC7C,kDAAkD,EAClD,8CAA8C,EAC9C,oDAAoD,EACpD,8BAA8B,EAC9B,4BAA4B,GAC7B,oCAAgC;AACjC,YAAY,EACV,yCAAyC,EACzC,8CAA8C,EAC9C,qDAAqD,EACrD,gDAAgD,EAChD,mDAAmD,EACnD,sCAAsC,EACtC,2CAA2C,EAC3C,0CAA0C,EAC1C,uCAAuC,EACvC,0CAA0C,EAC1C,qDAAqD,EACrD,4CAA4C,EAC5C,2CAA2C,EAC3C,iDAAiD,EACjD,0DAA0D,EAC1D,yDAAyD,EACzD,qDAAqD,EACrD,0CAA0C,EAC1C,6CAA6C,EAC7C,8CAA8C,EAC9C,+CAA+C,EAC/C,+CAA+C,EAC/C,2DAA2D,EAC3D,yCAAyC,EACzC,0CAA0C,EAC1C,sDAAsD,EACtD,kDAAkD,EAClD,gDAAgD,GACjD,wDAAoD;AACrD,OAAO,EACL,WAAW,EACX,aAAa,EACb,qBAAqB,GACtB,oCAAgC;AACjC,YAAY,EACV,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,+BAA+B,EAC/B,wBAAwB,EACxB,eAAe,EACf,WAAW,EACX,uBAAuB,EACvB,aAAa,EACb,sBAAsB,EACtB,mBAAmB,EACnB,0BAA0B,EAC1B,6BAA6B,EAC7B,4BAA4B,EAC5B,iCAAiC,EACjC,qBAAqB,EACrB,GAAG,EACH,mBAAmB,EACnB,yBAAyB,EACzB,gBAAgB,EAChB,uBAAuB,EACvB,sBAAsB,EACtB,2BAA2B,EAC3B,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,EACvB,cAAc,EACd,eAAe,EACf,eAAe,EACf,4BAA4B,EAC5B,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,EACtB,6BAA6B,EAC7B,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,EACvB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,GACxB,oBAAgB;AACjB,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,YAAY,GACb,oBAAgB;AACjB,OAAO,EAAE,wBAAwB,EAAE,qCAAiC;AACpE,OAAO,EAAE,oBAAoB,EAAE,6BAAyB;AACxD,OAAO,EACL,oBAAoB,EACpB,0BAA0B,GAC3B,0BAAsB;AACvB,OAAO,EAAE,SAAS,EAAE,wBAAoB;AACxC,OAAO,EAAE,mBAAmB,IAAI,yCAAyC,EAAE,yDAAqD;AAChI,OAAO,EAAE,QAAQ,EAAE,4BAAwB"}
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,UAAU,EACV,MAAM,EACN,4BAA4B,EAC5B,2BAA2B,EAC3B,mCAAmC,EACnC,sDAAsD,EACtD,uDAAuD,EACvD,iDAAiD,EACjD,0BAA0B,EAC1B,qCAAqC,EACrC,6CAA6C,EAC7C,8CAA8C,EAC9C,4CAA4C,EAC5C,2CAA2C,EAC3C,6CAA6C,EAC7C,oDAAoD,EACpD,4CAA4C,EAC5C,iDAAiD,EACjD,6CAA6C,EAC7C,kDAAkD,EAClD,8CAA8C,EAC9C,oDAAoD,EACpD,8BAA8B,EAC9B,4BAA4B,GAC7B,oCAAgC;AACjC,YAAY,EACV,yCAAyC,EACzC,8CAA8C,EAC9C,qDAAqD,EACrD,gDAAgD,EAChD,mDAAmD,EACnD,sCAAsC,EACtC,2CAA2C,EAC3C,0CAA0C,EAC1C,uCAAuC,EACvC,0CAA0C,EAC1C,qDAAqD,EACrD,4CAA4C,EAC5C,2CAA2C,EAC3C,iDAAiD,EACjD,0DAA0D,EAC1D,yDAAyD,EACzD,qDAAqD,EACrD,0CAA0C,EAC1C,6CAA6C,EAC7C,8CAA8C,EAC9C,+CAA+C,EAC/C,+CAA+C,EAC/C,2DAA2D,EAC3D,yCAAyC,EACzC,0CAA0C,EAC1C,sDAAsD,EACtD,kDAAkD,EAClD,gDAAgD,GACjD,wDAAoD;AACrD,OAAO,EACL,WAAW,EACX,aAAa,EACb,qBAAqB,GACtB,oCAAgC;AACjC,YAAY,EACV,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,+BAA+B,EAC/B,wBAAwB,EACxB,eAAe,EACf,WAAW,EACX,uBAAuB,EACvB,aAAa,EACb,sBAAsB,EACtB,mBAAmB,EACnB,0BAA0B,EAC1B,6BAA6B,EAC7B,4BAA4B,EAC5B,iCAAiC,EACjC,qBAAqB,EACrB,GAAG,EACH,mBAAmB,EACnB,yBAAyB,EACzB,gBAAgB,EAChB,uBAAuB,EACvB,sBAAsB,EACtB,2BAA2B,EAC3B,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,EACvB,cAAc,EACd,eAAe,EACf,eAAe,EACf,4BAA4B,EAC5B,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,EACtB,6BAA6B,EAC7B,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,EACvB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,GACxB,oBAAgB;AACjB,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,YAAY,GACb,oBAAgB;AACjB,OAAO,EAAE,oBAAoB,EAAE,6BAAyB;AACxD,OAAO,EACL,oBAAoB,EACpB,0BAA0B,GAC3B,0BAAsB;AACvB,OAAO,EAAE,SAAS,EAAE,wBAAoB;AACxC,OAAO,EAAE,mBAAmB,IAAI,yCAAyC,EAAE,yDAAqD;AAChI,OAAO,EAAE,QAAQ,EAAE,4BAAwB;AAC3C,OAAO,EAAE,6BAA6B,EAAE,+BAA2B;AACnE,YAAY,EACV,oCAAoC,EACpC,gCAAgC,GACjC,+BAA2B"}
package/dist/index.mjs CHANGED
@@ -1,9 +1,9 @@
1
1
  export { CANCEL_RATE, SPEED_UP_RATE, TransactionController } from "./TransactionController.mjs";
2
2
  export { GasFeeEstimateLevel, GasFeeEstimateType, SimulationErrorCode, SimulationTokenStandard, TransactionContainerType, TransactionEnvelopeType, TransactionStatus, TransactionType, UserFeeLevel, WalletDevice } from "./types.mjs";
3
- export { determineTransactionType } from "./utils/transaction-type.mjs";
4
3
  export { mergeGasFeeEstimates } from "./utils/gas-flow.mjs";
5
4
  export { isEIP1559Transaction, normalizeTransactionParams } from "./utils/utils.mjs";
6
5
  export { CHAIN_IDS } from "./constants.mjs";
7
6
  export { SUPPORTED_CHAIN_IDS as INCOMING_TRANSACTIONS_SUPPORTED_CHAIN_IDS } from "./helpers/AccountsApiRemoteTransactionSource.mjs";
8
7
  export { HARDFORK } from "./utils/prepare.mjs";
8
+ export { getAccountAddressRelationship } from "./api/accounts-api.mjs";
9
9
  //# sourceMappingURL=index.mjs.map