diff --git a/src/infra/retry-policy.test.ts b/src/infra/retry-policy.test.ts index be0e4d91de3..6b74e07ce21 100644 --- a/src/infra/retry-policy.test.ts +++ b/src/infra/retry-policy.test.ts @@ -81,6 +81,22 @@ describe("createTelegramRetryRunner", () => { expectedCalls: 1, expectedError: "permission denied", }, + { + name: "retries misdirected request errors from Telegram edge nodes", + runnerOptions: { + retry: ZERO_DELAY_RETRY, + }, + fnSteps: [ + { + type: "reject" as const, + value: Object.assign(new Error("421 Misdirected Request"), { + status: 421, + }), + }, + ], + expectedCalls: 3, + expectedError: "421 Misdirected Request", + }, { name: "keeps retrying retriable errors until attempts are exhausted", runnerOptions: { diff --git a/src/infra/retry-policy.ts b/src/infra/retry-policy.ts index e28142b117f..c99596878c6 100644 --- a/src/infra/retry-policy.ts +++ b/src/infra/retry-policy.ts @@ -11,7 +11,8 @@ export const TELEGRAM_RETRY_DEFAULTS = { jitter: 0.1, }; -const TELEGRAM_RETRY_RE = /429|timeout|connect|reset|closed|unavailable|temporarily/i; +const TELEGRAM_RETRY_RE = + /429|421|timeout|connect|reset|closed|unavailable|temporarily|misdirected request/i; const log = createSubsystemLogger("retry-policy"); function resolveTelegramShouldRetry(params: {