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