/** *Returnstrueiftheerrorissafetoretryforanon-idempotentTelegramsendoperation *(e.g.sendMessage).Onlymatcheserrorsthatareguaranteedtohaveoccurred*before* *therequestreachedTelegram'sservers,preventingduplicatemessagedelivery. * *UsethisinsteadofisRecoverableTelegramNetworkErrorforsendMessage/sendPhoto/etc. *callswherearetrywouldcreateaduplicatevisiblemessage.
*/
export function isSafeToRetrySendError(err: unknown): boolean { if (!err) { returnfalse;
} for (const candidate of collectTelegramErrorCandidates(err)) { const code = normalizeCode(getErrorCode(candidate)); if (code && PRE_CONNECT_ERROR_CODES.has(code)) { returntrue;
}
} returnfalse;
}
function hasTelegramErrorCode(err: unknown, matches: (code: number) => boolean): boolean { for (const candidate of collectTelegramErrorCandidates(err)) { if (!candidate || typeof candidate !== "object" || !("error_code" in candidate)) { continue;
} const code = (candidate as { error_code: unknown }).error_code; if (typeof code === "number" && matches(code)) { returntrue;
}
} returnfalse;
}
function hasTelegramRetryAfter(err: unknown): boolean { for (const candidate of collectTelegramErrorCandidates(err)) { if (!candidate || typeof candidate !== "object") { continue;
} const retryAfter = "parameters" in candidate && candidate.parameters && typeof candidate.parameters === "object"
? (candidate.parameters as { retry_after?: unknown }).retry_after
: "response" in candidate &&
candidate.response && typeof candidate.response === "object" && "parameters" in candidate.response
? (
candidate.response as {
parameters?: { retry_after?: unknown };
}
).parameters?.retry_after
: "error" in candidate &&
candidate.error && typeof candidate.error === "object" && "parameters" in candidate.error
? (candidate.error as { parameters?: { retry_after?: unknown } }).parameters
?.retry_after
: undefined; if (typeof retryAfter === "number" && Number.isFinite(retryAfter)) { returntrue;
}
} returnfalse;
}
/** Returns true for HTTP 5xx server errors (error may have been processed). */
export function isTelegramServerError(err: unknown): boolean { return hasTelegramErrorCode(err, (code) => code >= 500);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.