import type { EventPayloadDef, ListenerDef } from "../events/index.js";
import type { JobDef } from "../jobs/index.js";
import type { OutboxRegistry } from "../outbox/index.js";
import type { ScheduleDef } from "../schedules/index.js";
import type { TaskDef } from "../tasks/index.js";
export type RuntimeIntegrityArtifact = "listener" | "schedule" | "task" | "outboxEvent" | "outboxJob";
export type RuntimeIntegrityFindingCode = "missing_listener_registration" | "missing_schedule_registration" | "missing_task_registration" | "missing_outbox_event_registration" | "missing_outbox_job_registration" | "duplicate_runtime_manifest_entry" | "duplicate_runtime_registry_entry";
export type RuntimeIntegrityFindingLocation = "manifest" | "registry";
export interface RuntimeIntegrityFinding {
    readonly code: RuntimeIntegrityFindingCode;
    readonly artifact: RuntimeIntegrityArtifact;
    readonly name: string;
    readonly message: string;
    readonly location?: RuntimeIntegrityFindingLocation;
}
export interface RuntimeIntegrityResult {
    readonly ok: boolean;
    readonly findings: readonly RuntimeIntegrityFinding[];
}
export interface RuntimeOutboxManifest {
    readonly events?: readonly EventPayloadDef[];
    readonly jobs?: readonly JobDef[];
}
export interface RuntimeManifestInput {
    readonly listeners?: readonly ListenerDef[];
    readonly schedules?: readonly ScheduleDef[];
    readonly tasks?: readonly TaskDef[];
    readonly outbox?: RuntimeOutboxManifest;
}
export interface RuntimeManifest {
    readonly listeners: readonly ListenerDef[];
    readonly schedules: readonly ScheduleDef[];
    readonly tasks: readonly TaskDef[];
    readonly outbox: {
        readonly events: readonly EventPayloadDef[];
        readonly jobs: readonly JobDef[];
    };
}
export interface RuntimeRegistriesInput {
    readonly listeners?: readonly ListenerDef[];
    readonly schedules?: readonly ScheduleDef[];
    readonly tasks?: readonly TaskDef[];
    readonly outbox?: OutboxRegistry;
}
export interface RuntimeRegistries {
    readonly listeners: readonly ListenerDef[];
    readonly schedules: readonly ScheduleDef[];
    readonly tasks: readonly TaskDef[];
    readonly outbox?: OutboxRegistry;
}
export type RuntimeIntegrityMode = "error" | "warn";
export interface RuntimeIntegrityLogger {
    warn(message: string): void;
}
export interface CreateRuntimeIntegrityOptions {
    readonly manifest: RuntimeManifest;
    readonly registries: RuntimeRegistries;
    /**
     * How to handle integrity findings.
     *
     * @default "error"
     */
    readonly mode?: RuntimeIntegrityMode;
    /**
     * Logger used when `mode` is `"warn"`.
     *
     * @default console
     */
    readonly logger?: RuntimeIntegrityLogger;
}
export interface RuntimeIntegrityCheck {
    readonly kind: "runtime-integrity";
    check(): RuntimeIntegrityResult;
}
export declare class RuntimeIntegrityError extends Error {
    readonly findings: readonly RuntimeIntegrityFinding[];
    constructor(findings: readonly RuntimeIntegrityFinding[]);
}
export declare function defineRuntimeManifest(input: RuntimeManifestInput): RuntimeManifest;
export declare function defineRuntimeRegistries(input: RuntimeRegistriesInput): RuntimeRegistries;
export declare function inspectRuntimeIntegrity(manifest: RuntimeManifest, registries: RuntimeRegistries): RuntimeIntegrityResult;
export declare function createRuntimeIntegrity(options: CreateRuntimeIntegrityOptions): RuntimeIntegrityCheck;
export declare function runRuntimeIntegrityCheck(check: RuntimeIntegrityCheck | undefined): RuntimeIntegrityResult | undefined;
//# sourceMappingURL=runtime-integrity.d.ts.map