




















@@ -65,7 +65,7 @@ async function resolveAutoApiMode(
6565if (
6666cached.mode !== "container" ||
6767!options.requireContainerReceive ||
68-cached.receiveAccount === options.account
68+(Boolean(options.account?.trim()) && cached.receiveAccount === options.account?.trim())
6969) {
7070return cached.mode;
7171}
@@ -103,32 +103,29 @@ async function resolveApiModeForOperation(params: {
103103104104/**
105105 * Detect which Signal API mode is available by probing endpoints.
106- * First endpoint to respond OK wins.
106+ * Native wins when both APIs are healthy because it preserves the richer JSON-RPC contract.
107107 */
108108export async function detectSignalApiMode(
109109baseUrl: string,
110110timeoutMs = DEFAULT_TIMEOUT_MS,
111111options: { account?: string; requireContainerReceive?: boolean } = {},
112112): Promise<"native" | "container"> {
113-const nativePromise = nativeCheck(baseUrl, timeoutMs).then((r) =>
114-r.ok ? ("native" as const) : Promise.reject(new Error("native not ok")),
115-);
116113const containerAccount = options.requireContainerReceive ? options.account?.trim() : undefined;
114+const nativePromise = nativeCheck(baseUrl, timeoutMs).catch(() => ({ ok: false }));
117115const containerPromise = containerAccount
118- ? containerCheck(baseUrl, timeoutMs, containerAccount).then((r) =>
119-r.ok ? ("container" as const) : Promise.reject(new Error("container not ok")),
120-)
116+ ? containerCheck(baseUrl, timeoutMs, containerAccount).catch(() => ({ ok: false }))
121117 : options.requireContainerReceive
122- ? Promise.reject(new Error("container receive account required"))
123- : containerCheck(baseUrl, timeoutMs).then((r) =>
124-r.ok ? ("container" as const) : Promise.reject(new Error("container not ok")),
125-);
118+ ? Promise.resolve({ ok: false })
119+ : containerCheck(baseUrl, timeoutMs).catch(() => ({ ok: false }));
126120127-try {
128-return await Promise.any([nativePromise, containerPromise]);
129-} catch {
130-throw new Error(`Signal API not reachable at ${baseUrl}`);
121+const [nativeResult, containerResult] = await Promise.all([nativePromise, containerPromise]);
122+if (nativeResult.ok) {
123+return "native";
131124}
125+if (containerResult.ok) {
126+return "container";
127+}
128+throw new Error(`Signal API not reachable at ${baseUrl}`);
132129}
133130134131/**
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。