




























@@ -169,6 +169,75 @@ describe("web auto-reply connection", () => {
169169}
170170});
171171172+it("retries opening-phase Boom 428 through the reconnect policy", async () => {
173+const boom428 = {
174+output: {
175+statusCode: 428,
176+payload: { error: "Precondition Required", message: "Connection Terminated" },
177+},
178+};
179+const listenerFactory = vi.fn(async () => {
180+throw boom428;
181+});
182+183+const sleep = vi.fn(async () => {});
184+const { runtime, run } = startWebAutoReplyMonitor({
185+monitorWebChannelFn: monitorWebChannel as never,
186+ listenerFactory,
187+ sleep,
188+reconnect: { initialMs: 10, maxMs: 10, maxAttempts: 2, factor: 1.1 },
189+});
190+191+await run;
192+193+expect(listenerFactory).toHaveBeenCalledTimes(2);
194+expect(sleep).toHaveBeenCalled();
195+expectErrorContaining(runtime.error, "status 428");
196+expectErrorContaining(runtime.error, "Retry 1/2");
197+expectErrorContaining(runtime.error, "2/2 attempts");
198+});
199+200+it("keeps post-open Baileys 428 on the reconnect path", async () => {
201+const sleep = vi.fn(async () => {});
202+const scripted = createScriptedWebListenerFactory();
203+const { controller, run } = startWebAutoReplyMonitor({
204+monitorWebChannelFn: monitorWebChannel as never,
205+listenerFactory: scripted.listenerFactory,
206+ sleep,
207+reconnect: { initialMs: 10, maxMs: 10, maxAttempts: 3, factor: 1.1 },
208+});
209+210+await vi.waitFor(
211+() => {
212+expect(scripted.getListenerCount()).toBe(1);
213+},
214+{ timeout: 250, interval: 2 },
215+);
216+scripted.resolveClose(0, {
217+status: 428,
218+isLoggedOut: false,
219+error: "Connection Terminated",
220+});
221+222+await vi.waitFor(
223+() => {
224+expect(scripted.getListenerCount()).toBeGreaterThanOrEqual(2);
225+},
226+{ timeout: 250, interval: 2 },
227+);
228+229+controller.abort();
230+scripted.resolveClose(scripted.getListenerCount() - 1, {
231+status: 499,
232+isLoggedOut: false,
233+error: "aborted",
234+});
235+await run;
236+237+expect(scripted.getListenerCount()).toBeGreaterThanOrEqual(2);
238+expect(sleep).toHaveBeenCalled();
239+});
240+172241it("treats status 440 as non-retryable and stops without retrying", async () => {
173242const sleep = vi.fn(async () => {});
174243const scripted = createScriptedWebListenerFactory();
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。