export interface ServerActionSuccess { data: TData; meta?: Record; links?: Record; status?: number; } export interface ServerActionFailure { error: string; errors?: unknown[]; status?: number; } // Discriminate with `"error" in result` / `"data" in result`. export type ServerActionResult = | ServerActionSuccess | ServerActionFailure; export interface ApiErrorResult extends ServerActionFailure { status: number; data?: never; } export interface ApiNoContentResult { success: true; status: number; data?: never; } // handleApiResponse resolves the raw JSON:API payload on success, but also // resolves truthy no-data shapes: {error, status} for 4xx and // {success, status} for 204/empty bodies. `data?: never` on those members // keeps `result?.data?.attributes` guards compiling and narrowing correctly. export type ApiResult = | TResponse | ApiErrorResult | ApiNoContentResult;