Import source: src/api/client

Import the existing local project snapshot. This commit organizes existing files; it does not represent newly developed functionality.
This commit is contained in:
arsam
2026-09-18 23:09:57 +03:30
parent ef9bc24a28
commit 2e6a4991cc
+41
View File
@@ -0,0 +1,41 @@
import type { ApiErrorCode, ApiResponse } from "@/api/contracts/common";
export type MockClientOptions = {
latencyMs?: number;
errorRate?: number;
};
const defaultOptions: Required<MockClientOptions> = {
latencyMs: 45,
errorRate: 0,
};
let options = defaultOptions;
export function configureMockClient(next: MockClientOptions) {
options = { ...options, ...next };
}
export async function mockResponse<T>(
data: T,
overrides?: { errorCode?: ApiErrorCode; message?: string; latencyMs?: number },
): Promise<ApiResponse<T>> {
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,
};
}