import { vi } from "vitest"; import { withFetchPreconnect } from "./fetch-mock.js"; type UsageFetchInput = string | Request | URL; type UsageFetchHandler = (url: string, init?: RequestInit) => Promise | Response; type UsageFetchMock = ReturnType< typeof vi.fn<(input: UsageFetchInput, init?: RequestInit) => Promise> >; 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; }