import { Data_SuiCall, Data_SuiEvent, Data_SuiObjectChange, MoveFetchConfig } from '@sentio/protos';
import { ListStateStorage } from '@sentio/runtime';
import { SuiNetwork } from './network.js';
import { SuiContext, SuiObjectChangeContext } from './context.js';
import { MoveCallSuiTransaction, SuiEvent, SuiTransactionBlockResponse, SuiObjectChange } from '@mysten/sui/jsonRpc';
import { CallHandler, EventFilter, EventHandler, FunctionNameAndCallFilter, ObjectChangeHandler, TransactionFilter } from '../move/index.js';
import { MoveCoder } from './index.js';
import { Labels, PromiseOrVoid } from '../core/index.js';
import { Required } from 'utility-types';
import { HandlerOptions } from './models.js';
export declare const DEFAULT_FETCH_CONFIG: MoveFetchConfig;
export type IndexConfigure = Required<SuiBindOptions, 'startCheckpoint' | 'network'>;
export declare function configure(options: SuiBindOptions): IndexConfigure;
export interface SuiBindOptions {
    address: string;
    network?: SuiNetwork;
    startCheckpoint?: bigint;
    endCheckpoint?: bigint;
    baseLabels?: Labels;
}
export declare class SuiProcessorState extends ListStateStorage<SuiBaseProcessor> {
    static INSTANCE: SuiProcessorState;
}
export declare class SuiBaseProcessor {
    readonly moduleName: string;
    config: IndexConfigure;
    eventHandlers: EventHandler<Data_SuiEvent>[];
    callHandlers: CallHandler<Data_SuiCall>[];
    objectChangeHandlers: ObjectChangeHandler<Data_SuiObjectChange>[];
    coder: MoveCoder;
    constructor(name: string, options: SuiBindOptions);
    getChainId(): string;
    protected onMoveEvent(handler: (event: SuiEvent, ctx: SuiContext) => PromiseOrVoid, filter: EventFilter | EventFilter[], handlerOptions?: HandlerOptions<MoveFetchConfig, SuiEvent>): SuiBaseProcessor;
    protected onEntryFunctionCall(handler: (call: MoveCallSuiTransaction, ctx: SuiContext) => PromiseOrVoid, filter: FunctionNameAndCallFilter | FunctionNameAndCallFilter[], handlerOptions?: HandlerOptions<MoveFetchConfig, MoveCallSuiTransaction>): SuiBaseProcessor;
    onEvent(handler: (event: SuiEvent, ctx: SuiContext) => void, handlerOptions?: HandlerOptions<MoveFetchConfig, SuiEvent>): this;
    onTransactionBlock(handler: (transaction: SuiTransactionBlockResponse, ctx: SuiContext) => PromiseOrVoid, filter?: TransactionFilter, handlerOptions?: HandlerOptions<MoveFetchConfig, SuiTransactionBlockResponse>): this;
    protected onObjectChange(handler: (changes: SuiObjectChange[], ctx: SuiObjectChangeContext) => PromiseOrVoid, type: string | string[]): this;
}
export declare class SuiModulesProcessor extends SuiBaseProcessor {
    static bind(options: SuiBindOptions): SuiModulesProcessor;
}
export declare class SuiGlobalProcessor extends SuiBaseProcessor {
    static bind(options: Omit<SuiBindOptions, 'address'>): SuiGlobalProcessor;
    onTransactionBlock(handler: (transaction: SuiTransactionBlockResponse, ctx: SuiContext) => void, filter: TransactionFilter, fetchConfig?: Partial<MoveFetchConfig>): this;
    onObjectChange(handler: (changes: SuiObjectChange[], ctx: SuiObjectChangeContext) => void, type: string | string[]): this;
}
//# sourceMappingURL=sui-processor.d.ts.map