


























@@ -153,4 +153,48 @@ describe("getOrCreateAccountThrottler", () => {
153153firstGate.resolve();
154154await Promise.all([first, second]);
155155});
156+157+it("uses strict decimal string ids for fair group lanes", async () => {
158+const firstGate = deferred<void>();
159+const entered: string[] = [];
160+const throttler = createTelegramAccountThrottler(
161+() => async (prev, method, payload, signal) => prev(method, payload, signal),
162+);
163+const prev = vi.fn(async (_method: string, payload: unknown) => {
164+const request = payload as { message_thread_id?: string; text?: string };
165+entered.push(`${request.message_thread_id}:${request.text}`);
166+if (entered.length === 1) {
167+await firstGate.promise;
168+}
169+return { ok: true, result: request.text ?? "" };
170+}) as unknown as TelegramPreviousCall;
171+172+const first = throttler(
173+prev,
174+"sendMessage",
175+{ chat_id: "-100123", message_thread_id: "+10", text: "first" },
176+undefined,
177+);
178+await vi.waitFor(() => expect(entered).toEqual(["+10:first"]));
179+180+const sameTopic = throttler(
181+prev,
182+"sendMessage",
183+{ chat_id: "-100123", message_thread_id: "+10", text: "second" },
184+undefined,
185+);
186+const otherTopic = throttler(
187+prev,
188+"sendMessage",
189+{ chat_id: "-100123", message_thread_id: "0x20", text: "hex" },
190+undefined,
191+);
192+193+firstGate.resolve();
194+await vi.waitFor(() => expect(entered.length).toBeGreaterThanOrEqual(2));
195+expect(entered[1]).toBe("0x20:hex");
196+await Promise.all([first, sameTopic, otherTopic]);
197+198+expect(entered).toEqual(["+10:first", "0x20:hex", "+10:second"]);
199+});
156200});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。