fix(telegram): prevent duplicate messages with slow LLM providers (#41932)

Merged via squash.

Prepared head SHA: 2f50c51d5a
Co-authored-by: hougangdev <105773686+hougangdev@users.noreply.github.com>
Co-authored-by: obviyus <22031114+obviyus@users.noreply.github.com>
Reviewed-by: @obviyus
This commit is contained in:
Wayne
2026-03-11 13:49:55 +08:00
committed by GitHub
parent 7761e7626f
commit e37e1ed24e
10 changed files with 299 additions and 20 deletions

View File

@@ -1,5 +1,10 @@
import { describe, expect, it } from "vitest";
import { isRecoverableTelegramNetworkError, isSafeToRetrySendError } from "./network-errors.js";
import {
isRecoverableTelegramNetworkError,
isSafeToRetrySendError,
isTelegramClientRejection,
isTelegramServerError,
} from "./network-errors.js";
describe("isRecoverableTelegramNetworkError", () => {
it("detects recoverable error codes", () => {
@@ -164,3 +169,51 @@ describe("isSafeToRetrySendError", () => {
expect(isSafeToRetrySendError(wrapped)).toBe(true);
});
});
describe("isTelegramServerError", () => {
it("returns true for error_code 500", () => {
const err = Object.assign(new Error("Internal Server Error"), { error_code: 500 });
expect(isTelegramServerError(err)).toBe(true);
});
it("returns true for error_code 502", () => {
const err = Object.assign(new Error("Bad Gateway"), { error_code: 502 });
expect(isTelegramServerError(err)).toBe(true);
});
it("returns false for error_code 403", () => {
const err = Object.assign(new Error("Forbidden"), { error_code: 403 });
expect(isTelegramServerError(err)).toBe(false);
});
it("returns false for plain Error", () => {
expect(isTelegramServerError(new Error("500: Internal Server Error"))).toBe(false);
});
});
describe("isTelegramClientRejection", () => {
it("returns true for error_code 400", () => {
const err = Object.assign(new Error("Bad Request"), { error_code: 400 });
expect(isTelegramClientRejection(err)).toBe(true);
});
it("returns true for error_code 403", () => {
const err = Object.assign(new Error("Forbidden"), { error_code: 403 });
expect(isTelegramClientRejection(err)).toBe(true);
});
it("returns false for error_code 502", () => {
const err = Object.assign(new Error("Bad Gateway"), { error_code: 502 });
expect(isTelegramClientRejection(err)).toBe(false);
});
it("returns false for plain Error", () => {
expect(isTelegramClientRejection(new Error("400: Bad Request"))).toBe(false);
});
it("detects error_code in nested cause", () => {
const inner = Object.assign(new Error("Forbidden"), { error_code: 403 });
const outer = Object.assign(new Error("wrapped"), { cause: inner });
expect(isTelegramClientRejection(outer)).toBe(true);
});
});