openclaw/src/discord/monitor/rest-fetch.ts
2026-02-18 03:50:30 +00:00

28 lines
915 B
TypeScript

import { ProxyAgent, fetch as undiciFetch } from "undici";
import { danger } from "../../globals.js";
import { wrapFetchWithAbortSignal } from "../../infra/fetch.js";
import type { RuntimeEnv } from "../../runtime.js";
export function resolveDiscordRestFetch(
proxyUrl: string | undefined,
runtime: RuntimeEnv,
): typeof fetch {
const proxy = proxyUrl?.trim();
if (!proxy) {
return fetch;
}
try {
const agent = new ProxyAgent(proxy);
const fetcher = ((input: RequestInfo | URL, init?: RequestInit) =>
undiciFetch(input as string | URL, {
...(init as Record<string, unknown>),
dispatcher: agent,
}) as unknown as Promise<Response>) as typeof fetch;
runtime.log?.("discord: rest proxy enabled");
return wrapFetchWithAbortSignal(fetcher);
} catch (err) {
runtime.error?.(danger(`discord: invalid rest proxy: ${String(err)}`));
return fetch;
}
}