/** * Timer node factories for workflow delays * * Features: * - Fixed delay nodes * - Dynamic delay from state * - Cron-based wait nodes * - Cancellation support * - Integration with timer store */ import type { TimerEntry, TimerStore } from '@cogitator-ai/types'; /** * Timer node type */ export type TimerNodeType = 'fixed' | 'dynamic' | 'cron' | 'until'; /** * Base timer node config */ export interface TimerNodeConfig { name: string; type: TimerNodeType; persist?: boolean; onScheduled?: (entry: TimerEntry) => void; onFired?: (entry: TimerEntry) => void; onCancelled?: (entry: TimerEntry) => void; } /** * Fixed delay node config */ export interface FixedDelayConfig extends TimerNodeConfig { type: 'fixed'; delay: number; } /** * Dynamic delay node config */ export interface DynamicDelayConfig extends TimerNodeConfig { type: 'dynamic'; getDelay: (state: S) => number; } /** * Cron wait node config */ export interface CronWaitConfig extends TimerNodeConfig { type: 'cron'; expression: string; timezone?: string; waitForNext?: boolean; } /** * Until date node config */ export interface UntilDateConfig extends TimerNodeConfig { type: 'until'; getDate: (state: S) => Date | number; skipIfPast?: boolean; } /** * Union of all timer node configs */ export type AnyTimerNodeConfig = FixedDelayConfig | DynamicDelayConfig | CronWaitConfig | UntilDateConfig; /** * Timer node result */ export interface TimerNodeResult { timerId: string; scheduledAt: number; firesAt: number; waited: number; cancelled: boolean; } /** * Timer execution context */ export interface TimerExecutionContext { workflowId: string; runId: string; nodeId: string; timerStore?: TimerStore; signal?: AbortSignal; } /** * Create a fixed delay node */ export declare function delayNode(name: string, delay: number, options?: Partial>): FixedDelayConfig; /** * Create a dynamic delay node */ export declare function dynamicDelayNode(name: string, getDelay: (state: S) => number, options?: Partial, 'type' | 'getDelay'>>): DynamicDelayConfig; /** * Create a cron wait node */ export declare function cronWaitNode(name: string, expression: string, options?: Partial>): CronWaitConfig; /** * Create an until-date node */ export declare function untilNode(name: string, getDate: (state: S) => Date | number, options?: Partial, 'type' | 'getDate'>>): UntilDateConfig; /** * Calculate the delay for a timer node */ export declare function calculateTimerDelay(config: AnyTimerNodeConfig, state: S): number; /** * Execute a timer node */ export declare function executeTimerNode(config: AnyTimerNodeConfig, state: S, context: TimerExecutionContext): Promise; /** * Abort error for timer cancellation */ export declare class AbortError extends Error { constructor(message?: string); } /** * Create timer node helpers with bound store */ export declare function createTimerNodeHelpers(timerStore: TimerStore): { delayNode: (name: string, delay: number, options?: Partial>) => FixedDelayConfig; dynamicDelayNode: (name: string, getDelay: (state: S) => number, options?: Partial, "type" | "getDelay">>) => DynamicDelayConfig; cronWaitNode: (name: string, expression: string, options?: Partial>) => CronWaitConfig; untilNode: (name: string, getDate: (state: S) => Date | number, options?: Partial, "type" | "getDate">>) => UntilDateConfig; executeTimerNode: (config: AnyTimerNodeConfig, state: S, context: Omit) => Promise; }; /** * Duration helpers for readable delays */ export declare const Duration: { readonly milliseconds: (n: number) => number; readonly seconds: (n: number) => number; readonly minutes: (n: number) => number; readonly hours: (n: number) => number; readonly days: (n: number) => number; readonly weeks: (n: number) => number; }; /** * Parse duration string to milliseconds * Supports: "1s", "5m", "2h", "1d", "1w" */ export declare function parseDuration(duration: string): number; /** * Format duration to human-readable string */ export declare function formatDuration(ms: number): string; //# sourceMappingURL=timer-node.d.ts.map