export type FalImageEditTaskStatus = "queued" | "running" | "completed" | "failed"; export interface FalImageEditTaskMetadata { taskKind: "fal_gpt_image_2_edit"; provider: "fal-image"; providerId: string; endpointId: string; requestId: string; modelId: string; modelRef: string; modelDisplayName: string; prompt: string; optimizedPrompt?: string; userPrompt?: string; requestedImageCount: number; aspectRatio?: string; imageSize?: string; outputSizeLabel: string; sourceImageUrls: string[]; sourceAssetIds?: string[]; relationType?: "generated_from" | "edited_from"; sourceType?: string; projectId?: string | null; contextSource?: string | null; status: FalImageEditTaskStatus; startedAt: number; updatedAt: number; queuePosition?: number | null; lastLogs?: Array<{ message?: string; level?: string; timestamp?: string; }>; error?: string | null; } export function isFalImageEditTaskMetadata( value: unknown, ): value is FalImageEditTaskMetadata { if (!value || typeof value !== "object") return false; const maybe = value as Record; return ( maybe.taskKind === "fal_gpt_image_2_edit" && maybe.provider === "fal-image" && typeof maybe.providerId === "string" && typeof maybe.endpointId === "string" && typeof maybe.requestId === "string" ); } export function isPendingFalImageEditTaskMetadata( value: unknown, ): value is FalImageEditTaskMetadata { return ( isFalImageEditTaskMetadata(value) && (value.status === "queued" || value.status === "running") ); }