fix(apns): cap relay timeout · openclaw/openclaw@8f2e520
steipete
·
2026-05-30
·
via Recent Commits to openclaw:main
| Original file line number | Diff line number | Diff line change |
|---|
|
1 | 1 | import { generateKeyPairSync } from "node:crypto"; |
2 | 2 | import { afterEach, describe, expect, it, vi } from "vitest"; |
| 3 | +import { MAX_TIMER_TIMEOUT_MS } from "../shared/number-coercion.js"; |
3 | 4 | import { |
4 | 5 | deriveDeviceIdFromPublicKey, |
5 | 6 | publicKeyRawBase64UrlFromPem, |
@@ -122,6 +123,18 @@ describe("push-apns.relay", () => {
|
122 | 123 | }); |
123 | 124 | }); |
124 | 125 | |
| 126 | +it("caps oversized timeout values before they reach AbortSignal.timeout", () => { |
| 127 | +const resolved = resolveApnsRelayConfigFromEnv({ |
| 128 | +OPENCLAW_APNS_RELAY_BASE_URL: "https://relay.example.com", |
| 129 | +OPENCLAW_APNS_RELAY_TIMEOUT_MS: String(Number.MAX_SAFE_INTEGER), |
| 130 | +} as NodeJS.ProcessEnv); |
| 131 | + |
| 132 | +expectRelayConfig(resolved, { |
| 133 | +baseUrl: "https://relay.example.com", |
| 134 | +timeoutMs: MAX_TIMER_TIMEOUT_MS, |
| 135 | +}); |
| 136 | +}); |
| 137 | + |
125 | 138 | it("allows loopback http URLs for alternate truthy env values", () => { |
126 | 139 | const resolved = resolveApnsRelayConfigFromEnv({ |
127 | 140 | OPENCLAW_APNS_RELAY_BASE_URL: "http://[::1]:8787", |
|
| Original file line number | Diff line number | Diff line change |
|---|
|
1 | 1 | import { URL } from "node:url"; |
2 | 2 | import type { GatewayConfig } from "../config/types.gateway.js"; |
| 3 | +import { resolveTimerTimeoutMs } from "../shared/number-coercion.js"; |
3 | 4 | import { |
4 | 5 | normalizeLowercaseStringOrEmpty, |
5 | 6 | normalizeOptionalString, |
@@ -71,10 +72,7 @@ function normalizeTimeoutMs(value: string | number | undefined): number {
|
71 | 72 | return DEFAULT_APNS_RELAY_TIMEOUT_MS; |
72 | 73 | } |
73 | 74 | const parsed = Number(raw); |
74 | | -if (!Number.isFinite(parsed)) { |
75 | | -return DEFAULT_APNS_RELAY_TIMEOUT_MS; |
76 | | -} |
77 | | -return Math.max(1000, Math.trunc(parsed)); |
| 75 | +return resolveTimerTimeoutMs(parsed, DEFAULT_APNS_RELAY_TIMEOUT_MS, 1000); |
78 | 76 | } |
79 | 77 | |
80 | 78 | function readAllowHttp(value: string | undefined): boolean { |
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。