mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-16 20:22:21 +03:00
109 lines
2.6 KiB
TypeScript
109 lines
2.6 KiB
TypeScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
|
|
const originalFetch = globalThis.fetch;
|
|
|
|
const { validateProviderApiKey } = await import("../../src/lib/providers/validation.ts");
|
|
|
|
let nextStatus = 200;
|
|
let lastRequest: {
|
|
url: string;
|
|
method: string;
|
|
authorization: string;
|
|
cookie: string;
|
|
} | null = null;
|
|
|
|
let lastResponse: Response | null = null;
|
|
|
|
globalThis.fetch = (async (input: RequestInfo | URL, init?: RequestInit) => {
|
|
const headers = new Headers(init?.headers);
|
|
|
|
lastRequest = {
|
|
url: String(input),
|
|
method: String(init?.method || "GET"),
|
|
authorization: headers.get("authorization") || "",
|
|
cookie: headers.get("cookie") || "",
|
|
};
|
|
|
|
lastResponse = new Response(
|
|
JSON.stringify({
|
|
secret: "response-body-must-not-be-consumed",
|
|
}),
|
|
{
|
|
status: nextStatus,
|
|
headers: {
|
|
"content-type": "application/json",
|
|
},
|
|
}
|
|
);
|
|
|
|
return lastResponse;
|
|
}) as typeof fetch;
|
|
|
|
test.after(() => {
|
|
globalThis.fetch = originalFetch;
|
|
});
|
|
|
|
async function validate(status: number) {
|
|
nextStatus = status;
|
|
lastRequest = null;
|
|
lastResponse = null;
|
|
|
|
return validateProviderApiKey({
|
|
provider: "zai-web",
|
|
apiKey: "synthetic-zai-token",
|
|
providerSpecificData: {},
|
|
});
|
|
}
|
|
|
|
test("zai-web uses the token-only authenticated user-settings GET", async () => {
|
|
const result = await validate(200);
|
|
|
|
assert.equal(result.valid, true);
|
|
|
|
assert.equal(lastRequest?.url, "https://chat.z.ai/api/v1/users/user/settings");
|
|
|
|
assert.equal(lastRequest?.method, "GET");
|
|
|
|
assert.equal(lastRequest?.authorization, "Bearer synthetic-zai-token");
|
|
|
|
assert.equal(lastRequest?.cookie, "");
|
|
|
|
assert.equal(lastResponse?.bodyUsed, false);
|
|
});
|
|
|
|
test("zai-web preserves exact 401 as credential rejection", async () => {
|
|
const result = await validate(401);
|
|
|
|
assert.equal(result.valid, false);
|
|
assert.equal(result.statusCode, 401);
|
|
|
|
assert.match(result.error, /invalid or expired/i);
|
|
|
|
assert.equal(lastResponse?.bodyUsed, false);
|
|
});
|
|
|
|
test("zai-web preserves 403 without calling it expired", async () => {
|
|
const result = await validate(403);
|
|
|
|
assert.equal(result.valid, false);
|
|
assert.equal(result.statusCode, 403);
|
|
|
|
assert.doesNotMatch(result.error, /invalid or expired/i);
|
|
|
|
assert.equal(lastResponse?.bodyUsed, false);
|
|
});
|
|
|
|
test("zai-web preserves rate-limit and server statuses", async () => {
|
|
for (const status of [429, 503]) {
|
|
const result = await validate(status);
|
|
|
|
assert.equal(result.valid, false);
|
|
assert.equal(result.statusCode, status);
|
|
|
|
assert.doesNotMatch(result.error, /invalid or expired/i);
|
|
|
|
assert.equal(lastResponse?.bodyUsed, false);
|
|
}
|
|
});
|