import { Job } from 'node-schedule';
export declare type Delayed = (id: string, data: Uint8Array, scheduleFor: number | Date) => Promise<boolean>;
export interface Deferred<A> {
    done: (value: A) => void;
    promise: Promise<A>;
}
export declare type DelayedFn = (data: Uint8Array[]) => Promise<void> | void;
export declare type StopFn = () => Promise<void>;
export declare type GracefulShutdown = {
    schedule: Job;
    stop: StopFn;
};
export interface RecurringOptions {
    lockExpireMs?: number;
    persistScheduledMs?: number;
}
export declare type Rule = string | {
    rule: string;
    tz: string;
};
export declare type RunFn = (date: Date) => Promise<void> | void;
export declare type Recurring = (id: string, rule: Rule, runFn: RunFn, options?: RecurringOptions) => GracefulShutdown;
export interface DelayedOptions {
    rule?: Rule;
    lockExpireMs?: number;
    limit?: number;
}
export declare type RunDelayed = (id: string, runFn: DelayedFn, options?: DelayedOptions) => GracefulShutdown;
export declare type Events = 'recurring:schedule' | 'recurring:run' | 'delayed:schedule' | 'delayed:run';
