import { type SoftwareExec } from './software'; export declare const COMMUNITY_REHEARSAL_VERSION = "3.11.14"; export declare const COMMUNITY_REHEARSAL_ROOT = "/opt/forgezero-rehearsals/community-cluster-api"; export declare const COMMUNITY_DATABASE_ROOT = "/var/lib/forgezero-rehearsal-cluster"; export declare const COMMUNITY_CREDENTIAL_PARENT = "/etc/forgezero-rehearsal"; export declare const COMMUNITY_CREDENTIAL_ROOT = "/etc/forgezero-rehearsal/creds"; export declare const COMMUNITY_REHEARSAL_STARTER_PORT = 18528; export declare const COMMUNITY_REHEARSAL_COORDINATOR_PORT = 18529; export declare const COMMUNITY_REHEARSAL_DATABASE_PORT_RANGE = "18528:18539"; export declare const COMMUNITY_REHEARSAL_API_PORT = 18787; export declare const COMMUNITY_REHEARSAL_FIREWALL_COMMENT = "fz-community-rehearsal"; export declare const COMMUNITY_REHEARSAL_EGRESS_TABLE = "forgezero_agent_egress"; export declare const COMMUNITY_REHEARSAL_EGRESS_CHAIN = "output"; export interface CommunityRehearsalNode { name: string; address: string; agency: boolean; starter: boolean; readPreferred: boolean; } export type CommunityRehearsalApiOperation = 'health' | 'init' | 'write' | 'read' | 'query' | 'cluster'; export type CommunityRehearsalHostRequest = { action: 'prepare'; node: string; address: string; agency: boolean; topology: readonly CommunityRehearsalNode[]; release: string; archivePath: string; archiveSha256: string; jwt: string; } | { action: 'cleanup'; node: string; topology: readonly CommunityRehearsalNode[]; } | { action: 'database-enable' | 'api-enable' | 'database-ready' | 'starter-ready' | 'api-ready' | 'database-status' | 'api-status'; node: string; topology: readonly CommunityRehearsalNode[]; } | { action: 'api'; node: string; topology: readonly CommunityRehearsalNode[]; operation: CommunityRehearsalApiOperation; key?: string; value?: string; }; export type CommunityHostOperation = { kind: 'remove-tree'; path: typeof COMMUNITY_DATABASE_ROOT | typeof COMMUNITY_REHEARSAL_ROOT | typeof COMMUNITY_CREDENTIAL_PARENT; } | { kind: 'clear-firewall'; } | { kind: 'prepare-egress'; addresses: readonly string[]; } | { kind: 'clear-egress'; } | { kind: 'write'; path: string; content: string; mode: number; } | { kind: 'unlink'; path: string; } | { kind: 'symlink'; target: string; path: string; } | { kind: 'exec'; argv: readonly string[]; stdin?: string; accepted?: readonly number[]; }; export declare function ensureCommunityRehearsalArango(execute?: SoftwareExec): Promise; export declare const validateCommunityRehearsalTopology: (value: unknown) => readonly CommunityRehearsalNode[]; export declare function parseCommunityRehearsalHostRequest(value: unknown): CommunityRehearsalHostRequest; export declare function planCommunityRehearsalPrepare(request: Extract): CommunityHostOperation[]; /** Remove only the dedicated rehearsal units, credentials, release and data. */ export declare function planCommunityRehearsalCleanup(): CommunityHostOperation[]; export declare function communityRehearsalFirewallRuleNumbers(status: string): number[]; export declare function communityRehearsalEgressRuleHandles(ruleset: string): number[]; export declare function communityRehearsalEgressRuleArguments(uid: string, addresses: readonly string[]): readonly (readonly string[])[]; /** Execute only the dedicated four-node rehearsal operation selected by a typed request. */ export declare function runCommunityRehearsalHost(request: CommunityRehearsalHostRequest): Promise>;