( maxRetries = DEFAULT_MAX_RETRIES, )
| 313 | } |
| 314 | |
| 315 | async function fetchUserSettings( |
| 316 | maxRetries = DEFAULT_MAX_RETRIES, |
| 317 | ): Promise<SettingsSyncFetchResult> { |
| 318 | let lastResult: SettingsSyncFetchResult | null = null |
| 319 | |
| 320 | for (let attempt = 1; attempt <= maxRetries + 1; attempt++) { |
| 321 | lastResult = await fetchUserSettingsOnce() |
| 322 | |
| 323 | if (lastResult.success) { |
| 324 | return lastResult |
| 325 | } |
| 326 | |
| 327 | if (lastResult.skipRetry) { |
| 328 | return lastResult |
| 329 | } |
| 330 | |
| 331 | if (attempt > maxRetries) { |
| 332 | return lastResult |
| 333 | } |
| 334 | |
| 335 | const delayMs = getRetryDelay(attempt) |
| 336 | logForDiagnosticsNoPII('info', 'settings_sync_retry', { |
| 337 | attempt, |
| 338 | maxRetries, |
| 339 | delayMs, |
| 340 | }) |
| 341 | await sleep(delayMs) |
| 342 | } |
| 343 | |
| 344 | return lastResult! |
| 345 | } |
| 346 | |
| 347 | async function uploadUserSettings( |
| 348 | entries: Record<string, string>, |
no test coverage detected