// Test-only preload. Never imported by the application. Blocks real provider access.
import fs from "node:fs";
import { setTimeout as delay } from "node:timers/promises";
const modeFile = process.env.CONTEXT_FAULT_FILE;
if (!modeFile || process.env.CONTEXT_PORT !== "4198")
throw new Error("Fault provider requires isolated loopback test port 4198.");
let epoch,
calls = 0,
active = 0,
peak = 0,
aborted = 0;
const record = () =>
fs.writeFileSync(
modeFile + ".stats",
JSON.stringify({ epoch, calls, active, peak, aborted }),
);
globalThis.fetch = async (url, options) => {
if (
url !== "https://synthetic.services.ai.azure.com/openai/v1/chat/completions"
)
throw new Error("Fault tests prohibit real provider calls.");
const mode = JSON.parse(fs.readFileSync(modeFile, "utf8"));
if (epoch !== mode.epoch) {
epoch = mode.epoch;
calls = 0;
active = 0;
peak = 0;
aborted = 0;
}
calls++;
active++;
peak = Math.max(peak, active);
record();
const call = calls;
try {
if (mode.kind === "hang")
await delay(60000, undefined, { signal: options.signal });
if (mode.kind === "slow")
await delay(mode.ms || 6000, undefined, { signal: options.signal });
if (mode.kind === "network") throw new Error("PRIVATE PROVIDER ERROR");
if (mode.kind === "503" || (mode.kind === "recover" && call === 1))
return new Response("", { status: 503 });
if (mode.kind === "401")
return new Response("PRIVATE KEY", { status: 401 });
if (mode.kind === "rate-date")
return new Response("", {
status: 429,
headers: { "Retry-After": new Date(Date.now() + 30000).toUTCString() },
});
if (mode.kind === "rate-short" && call === 1)
return new Response("", { status: 429, headers: { "Retry-After": "1" } });
if (mode.kind === "null") return new Response("null");
if (mode.kind === "body-hang") {
return new Response(
new ReadableStream({
start(controller) {
options.signal.addEventListener(
"abort",
() => controller.error(new Error("body aborted")),
{ once: true },
);
},
}),
);
}
const lines = JSON.parse(JSON.parse(options.body).messages[1].content);
const line = lines.find(([, text]) => /Metformin/i.test(text));
const content =
mode.kind === "malformed"
? "not JSON"
: JSON.stringify({
facts: line
? [
[
line[0],
"Medication: Metformin; strength: 500 mg; frequency: 2/day",
],
]
: [],
});
return new Response(
JSON.stringify({
choices: [
{
finish_reason: mode.kind === "truncated" ? "length" : "stop",
message: { content },
},
],
}),
);
} catch (e) {
if (options.signal.aborted) aborted++;
throw e;
} finally {
active--;
record();
}
};