import { isRailDeckApiError, type RailDeckDirectIntegrationClient as Client } from '@raildeck/frontend-sdk/direct-integration'; type SaveInput = Parameters[2]; /** * Submit one reviewed save and distinguish an SDK failure from an unexpected failure. * @param client - Configured integration client with caller-owned authority. * @param accountId - Account containing the selected vehicle. * @param vehicleId - Vehicle whose version the person reviewed. * @param input - Original save, including its expectedUpdatedAt concurrency fence. * @returns A discriminated result; failures preserve the original intent without replay. */ export async function saveVehicleWithOutcome( client: Client, accountId: string, vehicleId: string, input: SaveInput, ) { try { const vehicle = await client.rollingStock.update(accountId, vehicleId, input); return { kind: 'saved' as const, vehicle }; } catch (error: unknown) { if (!isRailDeckApiError(error)) throw error; return { kind: 'needs-review' as const, errorKind: error.kind, errorCode: error.errorCode, statusCode: error.statusCode, correlationId: error.correlationId, retryAfterSeconds: error.retryAfterSeconds, }; } }