mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-07-27 04:49:49 -07:00
27 lines
898 B
TypeScript
27 lines
898 B
TypeScript
const DEFAULT_YOMITAN_API_TIMEOUT_MS = 10_000;
|
|
|
|
export async function fetchYomitanApi(
|
|
input: RequestInfo | URL,
|
|
init?: RequestInit,
|
|
timeoutMs = DEFAULT_YOMITAN_API_TIMEOUT_MS,
|
|
): Promise<Response> {
|
|
const controller = new AbortController();
|
|
const requestSignal = input instanceof Request ? input.signal : undefined;
|
|
const signals = [controller.signal, init?.signal, requestSignal].filter(
|
|
(signal): signal is AbortSignal => signal != null,
|
|
);
|
|
const signal = signals.length === 1 ? controller.signal : AbortSignal.any(signals);
|
|
const timeout = setTimeout(() => controller.abort(), timeoutMs);
|
|
|
|
try {
|
|
return await fetch(input, { ...init, signal });
|
|
} catch (error) {
|
|
if (controller.signal.aborted) {
|
|
throw new Error(`Yomitan API request timed out after ${timeoutMs}ms`, { cause: error });
|
|
}
|
|
throw error;
|
|
} finally {
|
|
clearTimeout(timeout);
|
|
}
|
|
}
|