


















@@ -1,3 +1,5 @@
1+import { parseDiscordRetryAfterBodySeconds, parseRetryAfterHeaderSeconds } from "../retry-after.js";
2+13export function readDiscordCode(body: unknown): number | undefined {
24const value =
35body && typeof body === "object" && "code" in body
@@ -12,9 +14,6 @@ export function readDiscordCode(body: unknown): number | undefined {
1214return undefined;
1315}
141615-const RETRY_AFTER_HEADER_DELAY_RE = /^\d+$/;
16-const RETRY_AFTER_BODY_SECONDS_RE = /^(?:\d+\.?\d*|\.\d+)$/;
17-1817export function readDiscordMessage(body: unknown, fallback: string): string {
1918const value =
2019body && typeof body === "object" && "message" in body
@@ -23,36 +22,14 @@ export function readDiscordMessage(body: unknown, fallback: string): string {
2322return typeof value === "string" && value.trim() ? value : fallback;
2423}
252426-function readRetryAfterHeader(value: string | null, now = Date.now()): number | undefined {
27-if (!value) {
28-return undefined;
29-}
30-const trimmed = value.trim();
31-if (RETRY_AFTER_HEADER_DELAY_RE.test(trimmed)) {
32-return Number(trimmed);
33-}
34-const retryAt = Date.parse(trimmed);
35-return Number.isFinite(retryAt) ? (retryAt - now) / 1000 : undefined;
36-}
37-38-function coerceRetryAfterSeconds(value: unknown): number | undefined {
39-const seconds =
40-typeof value === "number"
41- ? value
42- : typeof value === "string" && RETRY_AFTER_BODY_SECONDS_RE.test(value.trim())
43- ? Number(value.trim())
44- : undefined;
45-return Number.isFinite(seconds) && seconds >= 0 ? Math.max(0, seconds) : undefined;
46-}
47-4825export function readRetryAfter(body: unknown, response: Response, fallbackSeconds = 0): number {
4926const bodyValue =
5027body && typeof body === "object" && "retry_after" in body
5128 ? (body as { retry_after?: unknown }).retry_after
5229 : undefined;
5330return (
54-coerceRetryAfterSeconds(bodyValue) ??
55-coerceRetryAfterSeconds(readRetryAfterHeader(response.headers.get("Retry-After"))) ??
31+parseDiscordRetryAfterBodySeconds(bodyValue) ??
32+parseRetryAfterHeaderSeconds(response.headers.get("Retry-After")) ??
5633fallbackSeconds
5734);
5835}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。