@tevm/actions
Version:
A typesafe library for writing forge scripts in typescript
124 lines (106 loc) • 4.54 kB
text/typescript
import type { Filter } from '@tevm/utils'
import type { GetAccountResult } from '../GetAccount/GetAccountResult.js'
import type { TevmJsonRpcRequest } from '../TevmJsonRpcRequest.js'
import type { AnvilJsonRpcRequest } from '../anvil/AnvilJsonRpcRequest.js'
import type { TransactionParams } from '../common/TransactionParams.js'
import type { DebugJsonRpcRequest } from '../debug/DebugJsonRpcRequest.js'
import type { EthJsonRpcRequest } from '../eth/EthJsonRpcRequest.js'
import type { TevmJsonRpcBulkRequestHandler } from './TevmJsonRpcBulkRequestHandler.js'
/**
* Options for the EIP1193 request handler
* @see
*/
export interface EIP1193RequestOptions {
// The base delay (in ms) between retries.
retryDelay?: number
// The max number of times to retry.
retryCount?: number
}
export type TevmRequest = TevmJsonRpcRequest | EthJsonRpcRequest | AnvilJsonRpcRequest | DebugJsonRpcRequest
export type TevmEIP1193RequestFn<TParameters extends TevmRequest['params'] = TevmRequest['params']> = (
args: {
params: TParameters
method: TevmRequest['method']
},
options?: EIP1193RequestOptions,
) => Promise<unknown>
// EIP-1193: Ethereum Provider JavaScript API
// Interface for the Provider
// Interface for request arguments
export interface RequestArguments {
method: string
params?: readonly unknown[] | object
}
// Interface for the ProviderRpcError as specified
export interface ProviderRpcError extends Error {
code: number
data?: unknown
}
// Interface for the 'connect' event information
export interface ProviderConnectInfo {
chainId: string // Specifies the integer ID of the connected chain as a hexadecimal string
}
// Interface for the 'message' event information
export interface ProviderMessage {
type: string
data: unknown
}
// Interface for the Ethereum subscription message (e.g., from eth_subscribe)
export interface EthSubscription extends ProviderMessage {
type: 'eth_subscription'
data: {
subscription: string
result: unknown
}
}
// Define event listener types for specific events
export type ConnectListener = (connectInfo: ProviderConnectInfo) => void
export type DisconnectListener = (error: ProviderRpcError) => void
export type ChainChangedListener = (chainId: string) => void
export type AccountsChangedListener = (accounts: string[]) => void
export type MessageListener = (message: ProviderMessage) => void
export type NewBlockListener = (blockNumber: string) => void
export type PendingTxListener = (tx: TransactionParams) => void
export type PendingTxRevertedListener = (tx: TransactionParams) => void
export type PendingTxConfirmedListener = (tx: TransactionParams) => void
export type ErrorListener = (error: ProviderRpcError) => void
export type EventListener = (filter?: Filter) => void
export type AcountUpdatedListener = (account?: GetAccountResult) => void
export type DebugListener = (message: string) => void
type TODO = any
type TevmActionsApi = TODO
export interface TevmEIP1193Provider {
request: TevmEIP1193RequestFn
on(event: 'connect', listener: ConnectListener): this
on(event: 'disconnect', listener: DisconnectListener): this
// never happens included for compatibility
on(event: 'chainChanged', listener: ChainChangedListener): this
// never happens included for compatibility
on(event: 'accountsChanged', listener: AccountsChangedListener): this
on(event: 'message', listener: MessageListener): this
on(event: 'newBlock', listener: NewBlockListener): this
on(event: 'pendingTx', listener: PendingTxListener): this
on(event: 'pendingTxReverted', listener: PendingTxRevertedListener): this
on(event: 'pendingTxConfirmed', listener: PendingTxConfirmedListener): this
on(event: 'error', listener: ErrorListener): this
on(event: 'event', listener: EventListener): this
on(event: 'accountUpdated', listener: AcountUpdatedListener): this
on(event: 'debug', listener: DebugListener): this
removeListener(event: 'connect', listener: ConnectListener): this
removeListener(event: 'disconnect', listener: DisconnectListener): this
removeListener(event: 'chainChanged', listener: ChainChangedListener): this
removeListener(event: 'accountsChanged', listener: AccountsChangedListener): this
removeListener(event: 'message', listener: MessageListener): this
}
export type TevmClient = TevmEIP1193Provider &
TevmActionsApi & {
/**
* Whether the provider is polling for block updates
*/
polling: boolean
/**
* Frequency in MS to poll for block updates
*/
pollingInterval: number
requestBulk: TevmJsonRpcBulkRequestHandler
}