Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion src/activation/treeView.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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)
*/
Expand Down Expand Up @@ -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) => {
Expand Down
10 changes: 8 additions & 2 deletions src/shared/http/RetryableHttpClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
*/
Expand Down Expand Up @@ -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);
}
}

Expand Down