import type { Client } from '../../clients/createClient.js'; import type { Transport } from '../../clients/transports/createTransport.js'; import type { ErrorType } from '../../errors/utils.js'; import type { BlockTag } from '../../types/block.js'; import type { Chain } from '../../types/chain.js'; import type { GetTransportConfig } from '../../types/transport.js'; import { type PollErrorType } from '../../utils/poll.js'; import { type StringifyErrorType } from '../../utils/stringify.js'; import { type GetBlockReturnType } from './getBlock.js'; export type OnBlockParameter = GetBlockReturnType; export type OnBlock = (block: OnBlockParameter, prevBlock: OnBlockParameter | undefined) => void; type PollOptions = { /** The block tag. Defaults to "latest". */ blockTag?: TBlockTag | BlockTag; /** Whether or not to emit the missed blocks to the callback. */ emitMissed?: boolean; /** Whether or not to emit the block to the callback when the subscription opens. */ emitOnBegin?: boolean; /** Whether or not to include transaction data in the response. */ includeTransactions?: TIncludeTransactions; /** Polling frequency (in ms). Defaults to the client's pollingInterval config. */ pollingInterval?: number; }; export type WatchBlocksParameters = { /** The callback to call when a new block is received. */ onBlock: OnBlock; /** The callback to call when an error occurred when trying to get for a new block. */ onError?: (error: Error) => void; } & (GetTransportConfig['type'] extends 'webSocket' ? { blockTag?: never; emitMissed?: never; emitOnBegin?: never; includeTransactions?: never; /** Whether or not the WebSocket Transport should poll the JSON-RPC, rather than using `eth_subscribe`. */ poll?: false; pollingInterval?: never; } | (PollOptions & { poll?: true; }) : PollOptions & { poll?: true; }); export type WatchBlocksReturnType = () => void; export type WatchBlocksErrorType = StringifyErrorType | PollErrorType | ErrorType; /** * Watches and returns information for incoming blocks. * * - Docs: https://viem.sh/docs/actions/public/watchBlocks.html * - Examples: https://stackblitz.com/github/wagmi-dev/viem/tree/main/examples/blocks/watching-blocks * - JSON-RPC Methods: * - When `poll: true`, calls [`eth_getBlockByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getBlockByNumber) on a polling interval. * - When `poll: false` & WebSocket Transport, uses a WebSocket subscription via [`eth_subscribe`](https://docs.alchemy.com/reference/eth-subscribe-polygon) and the `"newHeads"` event. * * @param client - Client to use * @param parameters - {@link WatchBlocksParameters} * @returns A function that can be invoked to stop watching for new block numbers. {@link WatchBlocksReturnType} * * @example * import { createPublicClient, watchBlocks, http } from 'viem' * import { mainnet } from 'viem/chains' * * const client = createPublicClient({ * chain: mainnet, * transport: http(), * }) * const unwatch = watchBlocks(client, { * onBlock: (block) => console.log(block), * }) */ export declare function watchBlocks(client: Client, { blockTag, emitMissed, emitOnBegin, onBlock, onError, includeTransactions: includeTransactions_, poll: poll_, pollingInterval, }: WatchBlocksParameters): WatchBlocksReturnType; export {}; //# sourceMappingURL=watchBlocks.d.ts.map