import { Data_SuiCall, Data_SuiEvent, Data_SuiObjectChange, MoveFetchConfig } from '@sentio/protos';
import { ListStateStorage } from '@sentio/runtime';
import { IotaNetwork } from './network.js';
import { IotaContext, IotaObjectChangeContext } from './context.js';
import { MoveCallIotaTransaction, IotaEvent, IotaTransactionBlockResponse, IotaObjectChange } from '@iota/iota-sdk/client';
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<IotaBindOptions, 'startCheckpoint' | 'network'>;
export declare function configure(options: IotaBindOptions): IndexConfigure;
export interface IotaBindOptions {
    address: string;
    network?: IotaNetwork;
    startCheckpoint?: bigint;
    endCheckpoint?: bigint;
    baseLabels?: Labels;
}
export declare class IotaProcessorState extends ListStateStorage<IotaBaseProcessor> {
    static INSTANCE: IotaProcessorState;
}
export declare class IotaBaseProcessor {
    readonly moduleName: string;
    config: IndexConfigure;
    eventHandlers: EventHandler<Data_SuiEvent>[];
    callHandlers: CallHandler<Data_SuiCall>[];
    objectChangeHandlers: ObjectChangeHandler<Data_SuiObjectChange>[];
    coder: MoveCoder;
    constructor(name: string, options: IotaBindOptions);
    getChainId(): string;
    protected onMoveEvent(handler: (event: IotaEvent, ctx: IotaContext) => PromiseOrVoid, filter: EventFilter | EventFilter[], handlerOptions?: HandlerOptions<MoveFetchConfig, IotaEvent>): IotaBaseProcessor;
    protected onEntryFunctionCall(handler: (call: MoveCallIotaTransaction, ctx: IotaContext) => PromiseOrVoid, filter: FunctionNameAndCallFilter | FunctionNameAndCallFilter[], handlerOptions?: HandlerOptions<MoveFetchConfig, MoveCallIotaTransaction>): IotaBaseProcessor;
    onEvent(handler: (event: IotaEvent, ctx: IotaContext) => void, handlerOptions?: HandlerOptions<MoveFetchConfig, IotaEvent>): this;
    onTransactionBlock(handler: (transaction: IotaTransactionBlockResponse, ctx: IotaContext) => PromiseOrVoid, filter?: TransactionFilter, handlerOptions?: HandlerOptions<MoveFetchConfig, IotaTransactionBlockResponse>): this;
    protected onObjectChange(handler: (changes: IotaObjectChange[], ctx: IotaObjectChangeContext) => PromiseOrVoid, type: string | string[]): this;
}
export declare class IotaModulesProcessor extends IotaBaseProcessor {
    static bind(options: IotaBindOptions): IotaModulesProcessor;
}
export declare class IotaGlobalProcessor extends IotaBaseProcessor {
    static bind(options: Omit<IotaBindOptions, 'address'>): IotaGlobalProcessor;
    onTransactionBlock(handler: (transaction: IotaTransactionBlockResponse, ctx: IotaContext) => void, filter: TransactionFilter, fetchConfig?: Partial<MoveFetchConfig>): this;
    onObjectChange(handler: (changes: IotaObjectChange[], ctx: IotaObjectChangeContext) => void, type: string | string[]): this;
}
//# sourceMappingURL=iota-processor.d.ts.map