import type { ZombieGame } from './map-aliases.js'; export interface LaunchFileSummary { name: string; kind: 'script' | 'plugin' | 'config'; path: string; versionId: number | null; version: number | null; sha256: string; size: number; } export interface LaunchRecipeSummary { game: ZombieGame; mapSlug: string; mapName: string; expectedMap: string; capturedAt: string; image: string; configFile: string; configSource: string; files: LaunchFileSummary[]; fingerprint: string; } export interface BlueprintSummary { id: string; name: string; description: string; createdAt: string; recipe: LaunchRecipeSummary; entries: { count: number; recipe: LaunchRecipeSummary }[]; totalServers: number; } export interface CollectionPreview { id: string; expiresAt: string; blueprintName: string; entries: { count: number; existing: number; missing: number; existingServers: string[]; recipe: LaunchRecipeSummary }[]; servers: { entryIndex: number; name: string | null; port: number | null; hasSavedKey: boolean }[]; blockers: string[]; ready: boolean; } export interface CollectionSummary { id: string; name: string; created_at: string; total: number; done: number; failed: number; active: number; } export interface CollectionDetail { collection: CollectionSummary; servers: { id: string; server: string; port: number; map_slug: string; state: string; stage: string; started_at: string; finished_at: string | null; error: string | null; server_exists: number }[]; } export interface LaunchPreview { id: string; expiresAt: string; name: string | null; port: number | null; hasSavedKey: boolean; recipe: LaunchRecipeSummary; blueprintName: string | null; checks: { label: string; state: 'pass' | 'blocked' | 'info'; detail: string }[]; ready: boolean; }