( key: MockHeaderKey, value: string | undefined, )
| 98 | |
| 99 | // New approach: Toggle individual headers |
| 100 | export function setMockHeader( |
| 101 | key: MockHeaderKey, |
| 102 | value: string | undefined, |
| 103 | ): void { |
| 104 | if (process.env.USER_TYPE !== 'ant') { |
| 105 | return |
| 106 | } |
| 107 | |
| 108 | mockEnabled = true |
| 109 | |
| 110 | // Special case for retry-after which doesn't have the prefix |
| 111 | const fullKey = ( |
| 112 | key === 'retry-after' ? 'retry-after' : `anthropic-ratelimit-unified-${key}` |
| 113 | ) as keyof MockHeaders |
| 114 | |
| 115 | if (value === undefined || value === 'clear') { |
| 116 | delete mockHeaders[fullKey] |
| 117 | if (key === 'claim') { |
| 118 | exceededLimits = [] |
| 119 | } |
| 120 | // Update retry-after if status changed |
| 121 | if (key === 'status' || key === 'overage-status') { |
| 122 | updateRetryAfter() |
| 123 | } |
| 124 | return |
| 125 | } else { |
| 126 | // Handle special cases for reset times |
| 127 | if (key === 'reset' || key === 'overage-reset') { |
| 128 | // If user provides a number, treat it as hours from now |
| 129 | const hours = Number(value) |
| 130 | if (!isNaN(hours)) { |
| 131 | value = String(Math.floor(Date.now() / 1000) + hours * 3600) |
| 132 | } |
| 133 | } |
| 134 | |
| 135 | // Handle claims - add to exceeded limits |
| 136 | if (key === 'claim') { |
| 137 | const validClaims = [ |
| 138 | 'five_hour', |
| 139 | 'seven_day', |
| 140 | 'seven_day_opus', |
| 141 | 'seven_day_sonnet', |
| 142 | ] |
| 143 | if (validClaims.includes(value)) { |
| 144 | // Determine reset time based on claim type |
| 145 | let resetsAt: number |
| 146 | if (value === 'five_hour') { |
| 147 | resetsAt = Math.floor(Date.now() / 1000) + 5 * 3600 |
| 148 | } else if ( |
| 149 | value === 'seven_day' || |
| 150 | value === 'seven_day_opus' || |
| 151 | value === 'seven_day_sonnet' |
| 152 | ) { |
| 153 | resetsAt = Math.floor(Date.now() / 1000) + 7 * 24 * 3600 |
| 154 | } else { |
| 155 | resetsAt = Math.floor(Date.now() / 1000) + 3600 |
| 156 | } |
| 157 |
nothing calls this directly
no test coverage detected