diff --git a/src/activation/treeView.ts b/src/activation/treeView.ts index d3eff88..7b62a5e 100644 --- a/src/activation/treeView.ts +++ b/src/activation/treeView.ts @@ -3,6 +3,11 @@ import { UniversalTicketsProvider } from "@shared/views/UniversalTicketsProvider import { getLogger } from "@shared/utils/logger"; import { debounce } from "@shared/utils/debounce"; +/** + * Debounce delay for tree view refresh on visibility changes (in milliseconds) + */ +const TREE_VIEW_REFRESH_DEBOUNCE_MS = 500; + /** * Register the tickets tree view (sidebar) */ @@ -30,7 +35,7 @@ export async function registerTreeView(context: vscode.ExtensionContext): Promis ticketsProvider?.refresh(); hasInitialData = true; } - }, 500); + }, TREE_VIEW_REFRESH_DEBOUNCE_MS); // Trigger refresh when the tree view becomes visible (debounced) treeView.onDidChangeVisibility((e) => { diff --git a/src/shared/http/RetryableHttpClient.ts b/src/shared/http/RetryableHttpClient.ts index 5afa283..2df1fe0 100644 --- a/src/shared/http/RetryableHttpClient.ts +++ b/src/shared/http/RetryableHttpClient.ts @@ -70,6 +70,12 @@ export class HttpError extends Error { } } +/** + * Minimum delay in milliseconds for rate limit retries when no Retry-After header is present. + * This ensures we wait long enough to avoid immediately hitting the rate limit again. + */ +const MIN_RATE_LIMIT_DELAY_MS = 30000; // 30 seconds + /** * Default retry configuration */ @@ -325,8 +331,8 @@ export class RetryableHttpClient { if (retryAfter !== null) { delay = Math.min(retryAfter, retryConfig.maxDelay); } else { - // Default delay for rate limiting without Retry-After - delay = Math.max(delay, 30000); // At least 30 seconds + // When no Retry-After header, use minimum delay to avoid immediately re-triggering rate limit + delay = Math.max(delay, MIN_RATE_LIMIT_DELAY_MS); } }