28 lines
915 B
TypeScript
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;
|
|
}
|
|
}
|