mono项目开发模板,内置cli管理构建
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

45 lines
1.2 KiB

import { XllmError } from "../core/errors";
import type { ProviderAdapter, ProviderHttpRequest } from "../providers/types";
const toNetworkError = (error: unknown, provider: string): XllmError => {
if (error instanceof XllmError) return error;
const err = error as Error;
return new XllmError({
code: "NETWORK_ERROR",
message: err?.message || "Network request failed",
provider,
raw: error,
});
};
export const postJSON = async (
fetchImpl: typeof fetch,
request: ProviderHttpRequest,
adapter: ProviderAdapter,
): Promise<Response> => {
try {
return await fetchImpl(request.url, {
method: request.method,
headers: request.headers,
body: JSON.stringify(request.body),
});
} catch (error) {
throw toNetworkError(error, adapter.name);
}
};
export const throwForBadStatus = async (response: Response, adapter: ProviderAdapter): Promise<void> => {
if (response.ok) return;
let raw: unknown = undefined;
const textBody = await response.text();
try {
raw = JSON.parse(textBody);
} catch {
raw = textBody;
}
throw adapter.normalizeError({
statusCode: response.status,
message: (raw as any)?.error?.message ?? `HTTP ${response.status}`,
raw,
});
};