({
attempt,
baseMs,
maxMs,
factor,
jitter,
random,
}: {
attempt: number;
baseMs: number;
maxMs: number;
factor: number;
jitter: number;
random: () => number;
})
| 150 | }; |
| 151 | |
| 152 | const getReconnectSchedule = ({ |
| 153 | attempt, |
| 154 | baseMs, |
| 155 | maxMs, |
| 156 | factor, |
| 157 | jitter, |
| 158 | random, |
| 159 | }: { |
| 160 | attempt: number; |
| 161 | baseMs: number; |
| 162 | maxMs: number; |
| 163 | factor: number; |
| 164 | jitter: number; |
| 165 | random: () => number; |
| 166 | }): ReconnectSchedule => { |
| 167 | const safeMaxMs = normalizeDelayMs(maxMs, 0); |
| 168 | const rawDelayMs = normalizeDelayMs( |
| 169 | baseMs * factor ** (attempt - 1), |
| 170 | safeMaxMs, |
| 171 | ); |
| 172 | const cappedDelayMs = Math.min(rawDelayMs, safeMaxMs); |
| 173 | const jitteredDelayMs = applyReconnectJitter({ |
| 174 | delayMs: cappedDelayMs, |
| 175 | jitter, |
| 176 | random, |
| 177 | }); |
| 178 | const delayMs = Math.min(jitteredDelayMs, safeMaxMs); |
| 179 | return { |
| 180 | attempt, |
| 181 | delayMs, |
| 182 | retryingAt: new Date(Date.now() + delayMs).toISOString(), |
| 183 | }; |
| 184 | }; |
| 185 | |
| 186 | /** |
| 187 | * Creates a self-reconnecting WebSocket connection with capped |
no test coverage detected