mirror of https://github.com/openclaw/openclaw.git
28 lines
1.1 KiB
TypeScript
28 lines
1.1 KiB
TypeScript
import { vi } from "vitest";
|
|
import { withFetchPreconnect } from "./fetch-mock.js";
|
|
|
|
type UsageFetchInput = string | Request | URL;
|
|
type UsageFetchHandler = (url: string, init?: RequestInit) => Promise<Response> | Response;
|
|
type UsageFetchMock = ReturnType<
|
|
typeof vi.fn<(input: UsageFetchInput, init?: RequestInit) => Promise<Response>>
|
|
>;
|
|
|
|
export function makeResponse(status: number, body: unknown): Response {
|
|
const payload = typeof body === "string" ? body : JSON.stringify(body);
|
|
const headers = typeof body === "string" ? undefined : { "Content-Type": "application/json" };
|
|
return new Response(payload, { status, headers });
|
|
}
|
|
|
|
export function toRequestUrl(input: UsageFetchInput): string {
|
|
return typeof input === "string" ? input : input instanceof URL ? input.toString() : input.url;
|
|
}
|
|
|
|
export function createProviderUsageFetch(
|
|
handler: UsageFetchHandler,
|
|
): typeof fetch & UsageFetchMock {
|
|
const mockFetch = vi.fn(async (input: UsageFetchInput, init?: RequestInit) =>
|
|
handler(toRequestUrl(input), init),
|
|
);
|
|
return withFetchPreconnect(mockFetch) as typeof fetch & UsageFetchMock;
|
|
}
|