import type { ReleaseSpec } from "./namespaces/deploy.types.js";
export declare const RUN402_APP_SCHEMA_ID: "https://run402.com/schemas/run402-app.v1.schema.json";
export declare const RUN402_APP_MANIFEST_FILENAME: "run402.json";
export declare const RUN402_RELEASE_MANIFEST_FILENAME: "run402.release.json";
export declare const RUN402_APP_SPEC_VERSION: 1;
export declare const RUN402_APP_INSTALL_GRAPH_VERSION: "run402.app_install_graph.v1";
export declare const RUN402_APP_UP_RESULT_KIND: "run402.up.result";
export declare const RUN402_APP_UP_RESULT_SCHEMA_VERSION: "run402.up.result.v1";
export declare const RUN402_APP_UP_RESULT_SCHEMA_URL: "https://run402.com/schemas/run402-up-result.v1.schema.json";
export declare const RUN402_BINDING_CLASSES: readonly ["generated_config_binding", "generated_secret_binding", "user_secret"];
export declare const RUN402_BINDING_SCOPES: readonly ["build", "runtime", "client", "verify", "template"];
export interface Run402AppSpec {
    $schema: typeof RUN402_APP_SCHEMA_ID;
    spec_version: typeof RUN402_APP_SPEC_VERSION;
    app: {
        id: string;
        display_name?: string;
        description?: string;
    };
    project: {
        name?: string;
        id?: string;
        origin?: {
            subdomain?: string;
        };
    };
    resources?: {
        mailboxes?: Record<string, Run402AppMailboxSpec>;
        webhooks?: Record<string, Run402AppWebhookSpec>;
    };
    secrets?: Record<string, Run402AppSecretSpec>;
    build?: Run402AppBuildSpec;
    release: Run402AppReleaseSpec;
    lifecycle?: {
        project?: "per_app" | "shared";
        prune?: "approval_required" | "disabled";
    };
    verify?: {
        http?: Run402AppHttpVerifySpec[];
    };
}
export interface Run402AppMailboxSpec {
    slug?: string;
    roles?: ("default_outbound" | "auth_sender")[];
    description?: string;
}
export interface Run402AppWebhookSpec {
    mailbox: string;
    url: string;
    events: string[];
    enabled?: boolean;
    signing?: {
        required?: boolean;
    };
}
export interface Run402AppSecretSpec {
    required?: boolean;
    source_env?: string;
    description?: string;
}
export interface Run402AppBuildSpec {
    mode?: "local" | "remote" | "sandbox";
    commands?: Run402AppBuildCommand[];
}
export interface Run402AppBuildCommand {
    id: string;
    argv?: string[];
    shell?: string;
    cwd?: string;
}
export type Run402AppReleaseSpec = Omit<Partial<ReleaseSpec>, "project_id"> & {
    project_id?: never;
};
export interface Run402AppHttpVerifySpec {
    id: string;
    path?: string;
    url?: string;
    expect: {
        status: number;
    };
    retries?: number;
}
export type Run402AppSourceMetadata = {
    kind: "local";
    path: string;
    commit?: string;
} | {
    kind: "repo";
    repo_url: string;
    commit?: string;
};
export interface CompileRun402AppInstallGraphOptions {
    source?: Run402AppSourceMetadata;
    name?: string;
    root_idempotency_key?: string;
}
export type Run402AppInstallNodeStatus = "planned" | "running" | "succeeded" | "blocked" | "failed" | "skipped" | "propagation_pending";
export type Run402AppInstallMutation = "none" | "local" | "remote" | "destructive";
export type Run402AppUpStatus = "planned" | "running" | "succeeded" | "blocked" | "failed" | "partial" | "deployed_unverified" | "propagation_pending";
export type Run402AppUpErrorCode = "APP_SPEC_INVALID" | "PROJECT_REQUIRED" | "PROJECT_CONFLICT" | "TIER_REQUIRED" | "SPEND_APPROVAL_REQUIRED" | "BUILD_APPROVAL_REQUIRED" | "BUILD_FAILED" | "MISSING_SECRET" | "RESOURCE_CONFLICT" | "RESOURCE_PRUNE_REQUIRES_APPROVAL" | "UNSUPPORTED_RESOURCE_KIND" | "RELEASE_APPLY_FAILED" | "VERIFY_FAILED" | "VERIFY_PROPAGATION_PENDING" | "CONCURRENT_UP_IN_PROGRESS" | "APP_INSTALL_STATE_UNAVAILABLE" | "REMOTE_BUILD_UNSUPPORTED";
export type Run402BindingClass = typeof RUN402_BINDING_CLASSES[number];
export type Run402BindingScope = typeof RUN402_BINDING_SCOPES[number];
export interface Run402AppUpSpendImpact {
    amount_usd_micros?: number;
    currency?: "USD";
    description?: string;
}
export interface Run402AppUpNextAction {
    type: string;
    code?: Run402AppUpErrorCode;
    message?: string;
    command?: string;
    argv?: string[];
    field_path?: string;
    node_id?: string;
    spend?: Run402AppUpSpendImpact;
    docs_url?: string;
}
export interface Run402AppUpDiagnostic {
    code: Run402AppUpErrorCode;
    message: string;
    severity: "info" | "warning" | "error";
    node_id?: string;
    field_path?: string;
    details?: Record<string, unknown>;
}
export interface Run402AppBinding {
    env: string;
    binding_class: Run402BindingClass;
    scopes: Run402BindingScope[];
    source: string;
    value?: string;
    redacted?: boolean;
}
export interface Run402AppUpApprovalPolicy {
    yes: boolean;
    allow_prune: boolean;
    max_spend_usd: number | null;
    build_mode: "local" | "remote" | "sandbox" | null;
    shell_build_approved: boolean;
}
export interface Run402AppUpStep {
    id: string;
    kind: string;
    status: Run402AppInstallNodeStatus;
    mutation: Run402AppInstallMutation;
    destructive: boolean;
    spend: boolean;
    idempotent: boolean;
    ensure_key?: string;
    input_digest: `sha256:${string}`;
    depends_on: string[];
    diagnostics?: Run402AppUpDiagnostic[];
    next_actions?: Run402AppUpNextAction[];
}
export interface Run402AppUpResourceSummary {
    mailboxes: Record<string, {
        id: string | null;
        address: string | null;
        bindings: Run402AppBinding[];
    }>;
    webhooks: Record<string, {
        id: string | null;
        mailbox: string;
        url: string;
        events: string[];
        enabled: boolean;
    }>;
    bindings: Run402AppBinding[];
    user_secrets: Record<string, {
        required: boolean;
        source_env: string | null;
        satisfied: boolean;
    }>;
}
export type Run402AppVerifyStatus = "verified" | "propagation_pending" | "failed";
/** Header evidence from one HTTP response, not proof of release stability. */
export interface Run402ObservedRelease {
    release_id: string | null;
    generation: number | null;
    source: "response_headers";
    url: string;
    observed_at: string;
    unavailable_reason: "headers_missing_or_invalid" | "request_failed" | null;
}
export interface Run402AppUpVerifyResult {
    status: Run402AppVerifyStatus;
    warnings: Run402AppUpDiagnostic[];
    next_action: Run402AppUpNextAction | null;
    propagation_wait_ms: number;
}
export interface Run402AppUpResultEnvelope {
    kind: typeof RUN402_APP_UP_RESULT_KIND;
    schema_version: typeof RUN402_APP_UP_RESULT_SCHEMA_VERSION;
    schema_url: typeof RUN402_APP_UP_RESULT_SCHEMA_URL;
    status: Run402AppUpStatus;
    operation_id: string | null;
    install_id: string | null;
    spec_digest: `sha256:${string}`;
    graph_digest: `sha256:${string}`;
    source: Run402AppSourceMetadata | null;
    manifest_path: string;
    started_at: string;
    ended_at: string;
    duration_ms: number;
    approval_policy: Run402AppUpApprovalPolicy;
    dry_run: boolean;
    project: {
        id: string | null;
        name: string | null;
        public_origin: string | null;
    };
    steps: Run402AppUpStep[];
    resources: Run402AppUpResourceSummary;
    release: {
        operation_id: string | null;
        release_id: string | null;
        spec: Run402AppReleaseSpec;
    };
    verification: {
        http: Array<{
            id: string;
            status: Run402AppInstallNodeStatus;
            path?: string;
            url?: string;
            expected_status: number;
            actual_status?: number | null;
            observed_release?: Run402ObservedRelease;
            propagation_wait_ms?: number;
            diagnostic?: Record<string, unknown>;
        }>;
    };
    verify?: Run402AppUpVerifyResult;
    diagnostics: Run402AppUpDiagnostic[];
    next_actions: Run402AppUpNextAction[];
    graph: Run402AppInstallGraph;
}
export interface Run402AppInstallGraphNode {
    id: string;
    kind: string;
    depends_on: string[];
    input_digest: `sha256:${string}`;
    status: Run402AppInstallNodeStatus;
    mutation: Run402AppInstallMutation;
    idempotent: boolean;
    ensure_key?: string;
    destructive: boolean;
    spend: boolean;
    details?: Record<string, unknown>;
}
export interface Run402GeneratedMailboxBindings {
    id: string;
    address: string;
}
export interface Run402AppInstallBindings {
    mailboxes: Record<string, Run402GeneratedMailboxBindings>;
}
export interface Run402AppInstallGraph {
    schema_version: typeof RUN402_APP_INSTALL_GRAPH_VERSION;
    app_id: string;
    source: Run402AppSourceMetadata | null;
    spec_digest: `sha256:${string}`;
    graph_digest: `sha256:${string}`;
    nodes: Run402AppInstallGraphNode[];
    release_spec: Run402AppReleaseSpec;
    bindings: Run402AppInstallBindings;
}
export declare function compileRun402AppInstallGraph(spec: Run402AppSpec, opts?: CompileRun402AppInstallGraphOptions): Promise<Run402AppInstallGraph>;
export declare function generatedMailboxBindings(logicalName: string): Run402GeneratedMailboxBindings;
export declare function mailboxRuntimeBindings(logicalName: string): Run402AppBinding[];
export declare function platformMetadataBindings(opts?: {
    publicOriginKnown?: boolean;
}): Run402AppBinding[];
export declare function createRun402AppUpResult(input: {
    graph: Run402AppInstallGraph;
    manifest_path: string;
    status: Run402AppUpStatus;
    started_at: string;
    ended_at?: string;
    dry_run: boolean;
    project_id?: string | null;
    project_name?: string | null;
    public_origin?: string | null;
    approval_policy?: Partial<Run402AppUpApprovalPolicy>;
    operation_id?: string | null;
    install_id?: string | null;
    diagnostics?: Run402AppUpDiagnostic[];
    next_actions?: Run402AppUpNextAction[];
    blocked_node_id?: string;
    verify?: Run402AppUpVerifyResult;
}): Run402AppUpResultEnvelope;
//# sourceMappingURL=app-up.d.ts.map