/**
 * Deterministic cron schedule computation (plan M3 trigger layer).
 *
 * `validateCron` (trigger-validation.ts) guarantees a stored schedule is structurally valid; this
 * module turns a validated cron string into a concrete "next fire time" so the in-process
 * WorkflowScheduler can arm a timer. Pure, side-effect-free, and UTC-based for determinism — the
 * scheduler injects its own clock, and tests pin time exactly. (A future local-timezone offset is a
 * caller concern; the engine itself is UTC so the same input always yields the same output.)
 *
 * Grammar matches validateCron exactly: 5-field (min hour dom month dow) or 6-field (+ leading
 * seconds); each field is a comma-list of star / star-step / value / range / stepped-range, with
 * 3-letter month and day-of-week names, and dow accepting both 0 and 7 for Sunday.
 */
export interface ParsedCron {
    hasSeconds: boolean;
    seconds: Set<number>;
    minutes: Set<number>;
    hours: Set<number>;
    /** days-of-month, 1-31 */
    doms: Set<number>;
    /** months, 1-12 */
    months: Set<number>;
    /** days-of-week, 0-6 (Sunday=0; 7 is normalized to 0) */
    dows: Set<number>;
    /** true ⇔ the day-of-month field is restricted (not "*") */
    domRestricted: boolean;
    /** true ⇔ the day-of-week field is restricted (not "*") */
    dowRestricted: boolean;
}
/** Parse a validated cron string into expanded numeric sets. Throws on malformed input (fail-loud). */
export declare function parseCron(cron: string): ParsedCron;
/**
 * The next instant strictly after `afterMs` (UTC epoch ms) that matches `cron`. Throws if no match
 * exists within a ~5-year horizon (e.g. an impossible date like "0 0 30 2 *"). Deterministic: the
 * same (cron, afterMs) always returns the same value.
 */
export declare function nextCronTime(cron: string, afterMs: number): number;
