fix(retry): address PR #15 code review feedback

- Re-export RETRY_BACKOFF_DELAYS and RETRY_JITTER_FACTOR from Defaults
  for backwards compatibility with existing imports
- Add 'as const' to RETRY_JITTER_FACTOR for type consistency
- Improve documentation explaining why values are hardcoded in retryConfigs
  (ESM initialization order issues with indirect circular imports)
This commit is contained in:
Claude
2026-01-20 14:34:47 +00:00
parent 890a80da48
commit baf9123d0c
2 changed files with 14 additions and 10 deletions
+11 -6
View File
@@ -28,7 +28,7 @@ export const RETRY_BACKOFF_DELAYS = [1000, 2000, 5000, 10000, 20000] as const
* Jitter factor for retry delays (0.15 = ±15% randomization)
* Helps prevent thundering herd problem
*/
export const RETRY_JITTER_FACTOR = 0.15
export const RETRY_JITTER_FACTOR = 0.15 as const
/**
* Backoff strategies
@@ -656,14 +656,19 @@ export const retryConfigs = {
/**
* RSocket-style retry with stepped delays
* Uses fixed delay array: 1s, 2s, 5s, 10s, 20s (with ±15% jitter)
* Values hardcoded to avoid initialization order issues in ESM
*
* NOTE: Values are hardcoded instead of referencing RETRY_BACKOFF_DELAYS/RETRY_JITTER_FACTOR
* to prevent "Cannot access before initialization" errors in ESM environments.
* This occurs when modules are loaded in specific orders due to indirect circular imports
* (e.g., via prometheus-metrics.ts -> circuit-breaker.ts chain).
* Keep these values in sync with the constants above (lines 25, 31).
*/
rsocket: {
maxAttempts: 5, // RETRY_BACKOFF_DELAYS.length
baseDelay: 1000, // RETRY_BACKOFF_DELAYS[0]
maxDelay: 20000, // RETRY_BACKOFF_DELAYS[4]
maxAttempts: 5, // = RETRY_BACKOFF_DELAYS.length
baseDelay: 1000, // = RETRY_BACKOFF_DELAYS[0]
maxDelay: 20000, // = RETRY_BACKOFF_DELAYS[4]
backoffStrategy: 'stepped' as const,
jitter: 0.15, // RETRY_JITTER_FACTOR
jitter: 0.15, // = RETRY_JITTER_FACTOR
},
}