import type { EmailTriggerEvent, FsFileSource, FunctionEmailTriggerSpec, FunctionSpec, FunctionScheduleTriggerSpec, FunctionTriggerRunSpec, LocalDirRef, ReleaseSpec } from "./namespaces/deploy.types.js";
export type Run402ExecutionMode = "apply" | "check" | "printSpec" | "printManifest" | "plan" | {
    kind: "applyReviewed";
    planId: string;
    planFingerprint?: string;
};
export interface Run402ReviewedPlanRequirement {
    planId: string;
    planFingerprint?: string;
}
export interface Run402FileConfigOptions {
    contentType?: string;
    content_type?: string;
}
export interface Run402DirConfigOptions {
    prefix?: string;
    ignore?: ReadonlyArray<string>;
    includeSensitive?: boolean;
}
export type Run402SqlFileConfigOptions = {
    id?: string;
    name?: never;
    checksum?: string;
    transaction?: "required" | "none";
} | {
    /** Content-tracked migration name. The SDK compiles this to
     *  `<name>_<sha256(sql)[0:16]>`; SQL MUST be idempotent because changed
     *  content applies again against a database with prior versions. */
    name: string;
    id?: never;
    checksum?: string;
    transaction?: "required" | "none";
};
export interface Run402SqlFileConfigBaseMigration {
    sql_file: string;
    checksum?: string;
    transaction?: "required" | "none";
}
export interface Run402NodeFunctionConfigOptions extends Omit<FunctionSpec, "source" | "files" | "runtime"> {
    runtime?: "node22";
    source?: never;
    files?: never;
}
export interface Run402ScheduleTriggerOptions {
    timezone?: string;
    misfirePolicy?: "skip";
    misfire_policy?: "skip";
    overlapPolicy?: "allow";
    overlap_policy?: "allow";
    run: FunctionTriggerRunSpec;
}
export interface Run402EmailTriggerOptions {
    events: readonly EmailTriggerEvent[];
    run: FunctionTriggerRunSpec;
}
export interface Run402FileConfigSource extends FsFileSource {
    readonly content_type?: string;
}
export interface Run402SqlFileConfigIdMigration extends Run402SqlFileConfigBaseMigration {
    id: string;
    name?: never;
}
export interface Run402SqlFileConfigNameMigration extends Run402SqlFileConfigBaseMigration {
    name: string;
    id?: never;
}
export type Run402SqlFileConfigMigration = Run402SqlFileConfigIdMigration | Run402SqlFileConfigNameMigration;
export type Run402ReleaseConfig = Omit<ReleaseSpec, "project_id"> & {
    project_id?: string;
    idempotency_key?: string;
};
export interface Run402ConfigEnv {
    readonly accessed: readonly string[];
    get(name: string): string | undefined;
    required(name: string): string;
    readonly [name: `RUN402_${string}`]: string | undefined;
}
export interface Run402ConfigContext {
    manifestPath: string;
    rootDir: string;
    env: Run402ConfigEnv;
}
export type Run402ExecutableConfigExport = Run402ReleaseConfig | ((context: Run402ConfigContext) => Run402ReleaseConfig | Promise<Run402ReleaseConfig>);
export declare function defineConfig<const T extends Run402ExecutableConfigExport>(config: T): T;
export declare function dir(path: string, options?: Run402DirConfigOptions): LocalDirRef;
export declare function file(path: string, options?: Run402FileConfigOptions): Run402FileConfigSource;
export declare function sqlFile(path: string, options?: Run402SqlFileConfigOptions): Run402SqlFileConfigMigration;
export declare function nodeFunction(path: string, options?: Run402NodeFunctionConfigOptions): FunctionSpec;
export declare function scheduleTrigger(id: string, cron: string, options: Run402ScheduleTriggerOptions): FunctionScheduleTriggerSpec;
export declare function emailTrigger(id: string, mailbox: string, options: Run402EmailTriggerOptions): FunctionEmailTriggerSpec;
//# sourceMappingURL=config.d.ts.map