Files
dify/sdks/nodejs-client/src/http/retry.ts
T
Stephen Zhouandautofix-ci[bot] a84c2d36a3 style: format with vp fmt (#38803)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-07-12 15:57:46 +00:00

37 lines
937 B
TypeScript

import { RateLimitError, NetworkError, TimeoutError } from '../errors/dify-error'
export const sleep = (ms: number): Promise<void> =>
new Promise((resolve) => {
setTimeout(resolve, ms)
})
export const getRetryDelayMs = (
attempt: number,
retryDelaySeconds: number,
retryAfterSeconds?: number,
): number => {
if (retryAfterSeconds && retryAfterSeconds > 0) {
return retryAfterSeconds * 1000
}
const base = retryDelaySeconds * 1000
const exponential = base * Math.pow(2, Math.max(0, attempt - 1))
const jitter = Math.random() * base
return exponential + jitter
}
export const shouldRetry = (error: unknown, attempt: number, maxRetries: number): boolean => {
if (attempt >= maxRetries) {
return false
}
if (error instanceof TimeoutError) {
return true
}
if (error instanceof NetworkError) {
return true
}
if (error instanceof RateLimitError) {
return true
}
return false
}