openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
69 lines (68 loc) • 1.55 kB
JavaScript
import "./proxy-env-BepksPz2.js";
import "./managed-proxy-undici-B8Nor2ch.js";
import "./undici-runtime-BMM5FOrP.js";
import "./ssrf-0QyXWOVG.js";
import "./fetch-guard-BMdGQhbb.js";
import "./node-proxy-agent-Dh7ZolpU.js";
import "./proxy-fetch-BdRrrR-3.js";
import "./fetch-Dg9e8ALx.js";
//#region src/plugin-sdk/fetch-runtime.ts
const NULL_BODY_STATUSES = /* @__PURE__ */ new Set([
101,
103,
204,
205,
304
]);
function responseWithRelease(response, release) {
let released = false;
let canceling;
const releaseOnce = async () => {
if (released) return;
released = true;
await release();
};
if (!response.body || NULL_BODY_STATUSES.has(response.status)) {
releaseOnce();
return response;
}
const reader = response.body.getReader();
const body = new ReadableStream({
async pull(controller) {
try {
const next = await reader.read();
if (canceling) {
await canceling;
await releaseOnce();
return;
}
if (next.done) {
controller.close();
await releaseOnce();
return;
}
controller.enqueue(next.value);
} catch (error) {
if (canceling) {
await canceling;
await releaseOnce();
return;
}
await releaseOnce();
throw error;
}
},
async cancel(reason) {
canceling = reader.cancel(reason).catch(() => void 0);
await canceling;
await releaseOnce();
}
});
return new Response(body, {
status: response.status,
statusText: response.statusText,
headers: response.headers
});
}
//#endregion
export { responseWithRelease as t };