/** JSON/메타데이터 API 의 기본 상한. 대부분의 Google·Apple·Meta·Jenkins 호출. */ export declare const HTTP_TIMEOUT_MS = 60000; /** * 바이트 전송(업로드 청크, 에셋 다운로드)용 상한. * * 스트리밍 응답에도 signal 이 적용되므로 — body 를 다 읽기 전에 abort 되면 전송이 * 중간에 끊긴다 — 60초는 수백 MB 짜리 미리보기 영상에 너무 짧다. 목적은 "빨리 실패"가 * 아니라 "무한 대기 금지"이므로 넉넉하게 두되 상한은 반드시 존재하게 한다. */ export declare const HTTP_TRANSFER_TIMEOUT_MS = 600000; /** 총 시도 횟수 (최초 1회 + 재시도 2회). */ export declare const HTTP_MAX_ATTEMPTS = 3; /** * `Retry-After` 해석. 초 단위 숫자와 HTTP-date 두 형식을 모두 받는다. * 해석 실패나 음수면 null (호출부가 지수 백오프로 폴백). */ export declare function parseRetryAfter(value: string | null, nowMs: number): number | null; export interface FetchOptions { /** 한 **시도당** 상한. 총 소요 시간의 상한은 아래 RETRY_WINDOW_MS 를 더한 값이다. */ timeoutMs?: number; /** 총 시도 횟수. 1 이면 재시도하지 않는다. */ maxAttempts?: number; } /** * 타임아웃 + 재시도가 붙은 `fetch`. * * 재시도 정책: * - **429** 는 메서드와 무관하게 재시도한다. 레이트 리미터는 요청을 처리하기 전에 * 거절하므로 POST 라도 중복 생성이 일어나지 않는다. * - **5xx / 빠른 네트워크 오류**(ECONNRESET·DNS 등)는 idempotent 메서드에서만. * POST 는 서버가 이미 처리했는지 알 수 없어 재요청이 중복 생성을 만든다. * - **타임아웃은 재시도하지 않는다.** 아래 시간 예산 참고. * - `Retry-After` 가 있으면 그 값을 쓰고, 없으면 지수 백오프 + 지터. * - 재전송 불가능한 본문(스트림)이면 재시도하지 않는다. * * 호출부가 `signal` 을 넘기면 그쪽 취소를 존중하고 **재시도하지 않는다** — 취소 주체가 * 둘이 되면 안 되고, Node 20.0 에는 AbortSignal.any 가 없어 합성도 못 한다. * * 세 번째 인자는 숫자(=timeoutMs)도 받는다 — 기존 호출부 호환. */ export declare function fetchWithTimeout(input: string | URL, init?: RequestInit, options?: number | FetchOptions): Promise;