import type { ApiErrorCode, ApiResponse } from "@/api/contracts/common"; export type MockClientOptions = { latencyMs?: number; errorRate?: number; }; const defaultOptions: Required = { latencyMs: 45, errorRate: 0, }; let options = defaultOptions; export function configureMockClient(next: MockClientOptions) { options = { ...options, ...next }; } export async function mockResponse( data: T, overrides?: { errorCode?: ApiErrorCode; message?: string; latencyMs?: number }, ): Promise> { const latencyMs = overrides?.latencyMs ?? options.latencyMs; await new Promise((resolve) => setTimeout(resolve, latencyMs)); const requestId = `req_${Math.random().toString(16).slice(2, 10)}`; if (overrides?.errorCode || Math.random() < options.errorRate) { return { data: null, meta: { requestId, latencyMs }, error: { code: overrides?.errorCode ?? "NETWORK_ERROR", message: overrides?.message ?? "The mock service could not complete the request.", }, }; } return { data, meta: { requestId, latencyMs }, error: null, }; }