blob: a0010b105dd4fae1fbf43323dda09202e3d753de (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
/**
* @license
* Copyright 2025 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
/**
* Testing utilities for simulating 429 errors in unit tests
*/
let requestCounter = 0;
let simulate429Enabled = false;
let simulate429AfterRequests = 0;
let simulate429ForAuthType: string | undefined;
let fallbackOccurred = false;
/**
* Check if we should simulate a 429 error for the current request
*/
export function shouldSimulate429(authType?: string): boolean {
if (!simulate429Enabled || fallbackOccurred) {
return false;
}
// If auth type filter is set, only simulate for that auth type
if (simulate429ForAuthType && authType !== simulate429ForAuthType) {
return false;
}
requestCounter++;
// If afterRequests is set, only simulate after that many requests
if (simulate429AfterRequests > 0) {
return requestCounter > simulate429AfterRequests;
}
// Otherwise, simulate for every request
return true;
}
/**
* Reset the request counter (useful for tests)
*/
export function resetRequestCounter(): void {
requestCounter = 0;
}
/**
* Disable 429 simulation after successful fallback
*/
export function disableSimulationAfterFallback(): void {
fallbackOccurred = true;
}
/**
* Create a simulated 429 error response
*/
export function createSimulated429Error(): Error {
const error = new Error('Rate limit exceeded (simulated)') as Error & {
status: number;
};
error.status = 429;
return error;
}
/**
* Reset simulation state when switching auth methods
*/
export function resetSimulationState(): void {
fallbackOccurred = false;
resetRequestCounter();
}
/**
* Enable/disable 429 simulation programmatically (for tests)
*/
export function setSimulate429(
enabled: boolean,
afterRequests = 0,
forAuthType?: string,
): void {
simulate429Enabled = enabled;
simulate429AfterRequests = afterRequests;
simulate429ForAuthType = forAuthType;
fallbackOccurred = false; // Reset fallback state when simulation is re-enabled
resetRequestCounter();
}
|