import { HandleInterval, MoveAccountFetchConfig, MoveFetchConfig } from '@sentio/protos';
import { ListStateStorage } from '@sentio/runtime';
import { SuiAddressContext, SuiContext, SuiObjectContext } from './context.js';
import { SuiMoveObject, SuiTransactionBlockResponse } from '@mysten/sui/jsonRpc';
import { PromiseOrVoid } from '../core/index.js';
import { SuiAddressProcessor, SuiBaseObjectOrAddressProcessor, SuiObjectBindOptions, SuiObjectProcessor, SuiWrappedObjectProcessor } from './sui-object-processor.js';
import { SuiBindOptions } from './sui-processor.js';
import { TransactionFilter } from '../move/index.js';
declare class ObjectHandler<HandlerType> {
    type?: string;
    checkpointInterval?: HandleInterval;
    timeIntervalInMinutes?: HandleInterval;
    handlerName: string;
    handler: HandlerType;
    fetchConfig: MoveAccountFetchConfig;
}
export declare class SuiAccountProcessorTemplateState extends ListStateStorage<SuiObjectOrAddressProcessorTemplate<any, any, any>> {
    static INSTANCE: SuiAccountProcessorTemplateState;
}
export declare abstract class SuiObjectOrAddressProcessorTemplate<HandlerType, OptionType extends SuiObjectBindOptions | SuiBindOptions, ProcessorType extends SuiBaseObjectOrAddressProcessor<HandlerType>> {
    id: number;
    objectHandlers: ObjectHandler<HandlerType>[];
    instances: Set<string>;
    constructor();
    protected abstract createProcessor(options: SuiObjectBindOptions | SuiBindOptions): ProcessorType;
    bind(options: OptionType, ctx: SuiContext): void;
    startInstance(options: OptionType, ctx: SuiContext): void;
    unbind(options: OptionType, ctx: SuiContext): void;
    protected onInterval(handler: HandlerType, timeInterval: HandleInterval | undefined, checkpointInterval: HandleInterval | undefined, type: string | undefined, fetchConfig: Partial<MoveAccountFetchConfig> | undefined): this;
    onTimeInterval(handler: HandlerType, timeIntervalInMinutes?: number, backfillTimeIntervalInMinutes?: number, type?: string, fetchConfig?: Partial<MoveAccountFetchConfig>): this;
    onCheckpointInterval(handler: HandlerType, checkpointInterval?: number, backfillCheckpointInterval?: number, type?: string, fetchConfig?: Partial<MoveAccountFetchConfig>): this;
}
export declare class SuiAddressProcessorTemplate extends SuiObjectOrAddressProcessorTemplate<(objects: SuiMoveObject[], ctx: SuiAddressContext) => PromiseOrVoid, SuiBindOptions, SuiAddressProcessor> {
    private handlers;
    createProcessor(options: SuiBindOptions): SuiAddressProcessor;
    onTransactionBlock(handler: (transaction: SuiTransactionBlockResponse, ctx: SuiContext) => void, filter?: TransactionFilter, fetchConfig?: Partial<MoveFetchConfig>): this;
}
export declare class SuiObjectProcessorTemplate extends SuiObjectOrAddressProcessorTemplate<(self: SuiMoveObject, dynamicFieldObjects: SuiMoveObject[], ctx: SuiObjectContext) => PromiseOrVoid, SuiObjectBindOptions, SuiObjectProcessor> {
    createProcessor(options: SuiObjectBindOptions): SuiObjectProcessor;
}
export declare class SuiWrappedObjectProcessorTemplate extends SuiObjectOrAddressProcessorTemplate<(dynamicFieldObjects: SuiMoveObject[], ctx: SuiObjectContext) => PromiseOrVoid, SuiObjectBindOptions, SuiWrappedObjectProcessor> {
    createProcessor(options: SuiObjectBindOptions): SuiWrappedObjectProcessor;
}
export {};
//# sourceMappingURL=sui-object-processor-template.d.ts.map