@kaitranntt/ccs 7.47.0-dev.2 → 7.47.0-dev.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/cliproxy/config/generator.d.ts +3 -1
- package/dist/cliproxy/config/generator.d.ts.map +1 -1
- package/dist/cliproxy/config/generator.js +210 -39
- package/dist/cliproxy/config/generator.js.map +1 -1
- package/dist/cliproxy/executor/index.d.ts.map +1 -1
- package/dist/cliproxy/executor/index.js +7 -4
- package/dist/cliproxy/executor/index.js.map +1 -1
- package/dist/cliproxy/executor/retry-handler.d.ts +1 -1
- package/dist/cliproxy/executor/retry-handler.js +2 -2
- package/dist/cliproxy/executor/retry-handler.js.map +1 -1
- package/dist/cliproxy/provider-capabilities.d.ts +1 -1
- package/dist/cliproxy/provider-capabilities.d.ts.map +1 -1
- package/dist/cliproxy/provider-capabilities.js +1 -0
- package/dist/cliproxy/provider-capabilities.js.map +1 -1
- package/dist/cliproxy/quota-fetcher-claude-normalizer.d.ts +18 -0
- package/dist/cliproxy/quota-fetcher-claude-normalizer.d.ts.map +1 -0
- package/dist/cliproxy/quota-fetcher-claude-normalizer.js +291 -0
- package/dist/cliproxy/quota-fetcher-claude-normalizer.js.map +1 -0
- package/dist/cliproxy/quota-fetcher-claude.d.ts +21 -0
- package/dist/cliproxy/quota-fetcher-claude.d.ts.map +1 -0
- package/dist/cliproxy/quota-fetcher-claude.js +263 -0
- package/dist/cliproxy/quota-fetcher-claude.js.map +1 -0
- package/dist/cliproxy/quota-manager.d.ts +7 -4
- package/dist/cliproxy/quota-manager.d.ts.map +1 -1
- package/dist/cliproxy/quota-manager.js +80 -21
- package/dist/cliproxy/quota-manager.js.map +1 -1
- package/dist/cliproxy/quota-types.d.ts +74 -2
- package/dist/cliproxy/quota-types.d.ts.map +1 -1
- package/dist/cliproxy/quota-types.js +1 -1
- package/dist/commands/cliproxy/help-subcommand.js +1 -1
- package/dist/commands/cliproxy/help-subcommand.js.map +1 -1
- package/dist/commands/cliproxy/index.d.ts +13 -0
- package/dist/commands/cliproxy/index.d.ts.map +1 -1
- package/dist/commands/cliproxy/index.js +12 -6
- package/dist/commands/cliproxy/index.js.map +1 -1
- package/dist/commands/cliproxy/quota-subcommand.d.ts.map +1 -1
- package/dist/commands/cliproxy/quota-subcommand.js +116 -0
- package/dist/commands/cliproxy/quota-subcommand.js.map +1 -1
- package/dist/ui/assets/{accounts-X_MzF4zx.js → accounts-Csuq50JA.js} +1 -1
- package/dist/ui/assets/{alert-dialog-Cw-P0uZM.js → alert-dialog-B-nO52FC.js} +1 -1
- package/dist/ui/assets/{api-BcwoMARb.js → api-Dz4UxbUO.js} +1 -1
- package/dist/ui/assets/{auth-section-BqSvZ_5J.js → auth-section-6MSrICDI.js} +1 -1
- package/dist/ui/assets/{backups-section-CGOotFRy.js → backups-section-BJDqaVBs.js} +1 -1
- package/dist/ui/assets/cliproxy-DFTUws_w.js +3 -0
- package/dist/ui/assets/cliproxy-control-panel-DPEAjKWZ.js +1 -0
- package/dist/ui/assets/{confirm-dialog-BjFaR6B6.js → confirm-dialog-CxhIMzB8.js} +1 -1
- package/dist/ui/assets/{copilot-DCp1_azM.js → copilot-DyIdb-Nr.js} +2 -2
- package/dist/ui/assets/{cursor-DEUfi3ZN.js → cursor-Q4ZUz5Ke.js} +1 -1
- package/dist/ui/assets/{globalenv-section-Cu4vanAq.js → globalenv-section-G9Q_fX5q.js} +1 -1
- package/dist/ui/assets/{health-ChhDKSPa.js → health-DmO_4pj3.js} +1 -1
- package/dist/ui/assets/{index-s9bW25En.js → index-BCj0-1-0.js} +1 -1
- package/dist/ui/assets/{index-FdjOeYn2.js → index-BwWyN9C_.js} +1 -1
- package/dist/ui/assets/{index-BZ51hp4b.js → index-Cxgfp-I6.js} +1 -1
- package/dist/ui/assets/index-D9cHG4aj.js +47 -0
- package/dist/ui/assets/{index-CHArFy3-.js → index-XQf_c0I-.js} +1 -1
- package/dist/ui/assets/{proxy-status-widget-BLLMunUG.js → proxy-status-widget-ekvuv7fK.js} +1 -1
- package/dist/ui/assets/{separator-Nl0gQ6QN.js → separator-B5Y1il4Z.js} +1 -1
- package/dist/ui/assets/{shared-D7ILUK83.js → shared-KqwOidWM.js} +1 -1
- package/dist/ui/assets/{switch-P5H3pmrk.js → switch-DsFqtACB.js} +1 -1
- package/dist/ui/index.html +1 -1
- package/dist/web-server/routes/cliproxy-stats-routes.d.ts.map +1 -1
- package/dist/web-server/routes/cliproxy-stats-routes.js +105 -3
- package/dist/web-server/routes/cliproxy-stats-routes.js.map +1 -1
- package/package.json +1 -1
- package/dist/ui/assets/cliproxy-CWhMMbBa.js +0 -3
- package/dist/ui/assets/cliproxy-control-panel-DAirmXSD.js +0 -1
- package/dist/ui/assets/index-UX7yyQwV.js +0 -47
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-capabilities.js","sourceRoot":"","sources":["../../src/cliproxy/provider-capabilities.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"provider-capabilities.js","sourceRoot":"","sources":["../../src/cliproxy/provider-capabilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Quota Response Normalization Helpers
|
|
3
|
+
*
|
|
4
|
+
* Parses Anthropic policy limits payload into normalized windows and core usage summary.
|
|
5
|
+
*/
|
|
6
|
+
import type { ClaudeCoreUsageSummary, ClaudeQuotaWindow } from './quota-types';
|
|
7
|
+
/**
|
|
8
|
+
* Parse raw policy limits response into normalized windows.
|
|
9
|
+
* Supports both array and object-map `restrictions` shapes.
|
|
10
|
+
*/
|
|
11
|
+
export declare function buildClaudeQuotaWindows(payload: Record<string, unknown>): ClaudeQuotaWindow[];
|
|
12
|
+
export declare function isClaudeWeeklyRateLimitType(rateLimitType: string): boolean;
|
|
13
|
+
export declare function pickMostRestrictiveClaudeWeeklyWindow(windows: ClaudeQuotaWindow[]): ClaudeQuotaWindow | null;
|
|
14
|
+
/**
|
|
15
|
+
* Build explicit 5h + weekly usage summary from Claude policy windows.
|
|
16
|
+
*/
|
|
17
|
+
export declare function buildClaudeCoreUsageSummary(windows: ClaudeQuotaWindow[]): ClaudeCoreUsageSummary;
|
|
18
|
+
//# sourceMappingURL=quota-fetcher-claude-normalizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quota-fetcher-claude-normalizer.d.ts","sourceRoot":"","sources":["../../src/cliproxy/quota-fetcher-claude-normalizer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAmL/E;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iBAAiB,EAAE,CAkC7F;AA0CD,wBAAgB,2BAA2B,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAE1E;AAED,wBAAgB,qCAAqC,CACnD,OAAO,EAAE,iBAAiB,EAAE,GAC3B,iBAAiB,GAAG,IAAI,CAK1B;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,sBAAsB,CAsChG"}
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Claude Quota Response Normalization Helpers
|
|
4
|
+
*
|
|
5
|
+
* Parses Anthropic policy limits payload into normalized windows and core usage summary.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.buildClaudeCoreUsageSummary = exports.pickMostRestrictiveClaudeWeeklyWindow = exports.isClaudeWeeklyRateLimitType = exports.buildClaudeQuotaWindows = void 0;
|
|
9
|
+
const percentage_1 = require("../utils/percentage");
|
|
10
|
+
// Distinguishes epoch milliseconds from seconds (1e12 ~= 2001-09-09T01:46:40Z).
|
|
11
|
+
const EPOCH_MS_THRESHOLD = 1e12;
|
|
12
|
+
function asString(value) {
|
|
13
|
+
return typeof value === 'string' && value.trim().length > 0 ? value.trim() : null;
|
|
14
|
+
}
|
|
15
|
+
function asBoolean(value) {
|
|
16
|
+
if (typeof value === 'boolean')
|
|
17
|
+
return value;
|
|
18
|
+
if (typeof value === 'string') {
|
|
19
|
+
if (value === 'true')
|
|
20
|
+
return true;
|
|
21
|
+
if (value === 'false')
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
function asNumber(value) {
|
|
27
|
+
if (typeof value === 'number' && isFinite(value))
|
|
28
|
+
return value;
|
|
29
|
+
if (typeof value === 'string') {
|
|
30
|
+
const parsed = Number(value);
|
|
31
|
+
return isFinite(parsed) ? parsed : null;
|
|
32
|
+
}
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
function normalizeTimestamp(value) {
|
|
36
|
+
const asNum = asNumber(value);
|
|
37
|
+
if (asNum !== null) {
|
|
38
|
+
const millis = asNum > EPOCH_MS_THRESHOLD ? asNum : asNum * 1000;
|
|
39
|
+
const date = new Date(millis);
|
|
40
|
+
return isNaN(date.getTime()) ? null : date.toISOString();
|
|
41
|
+
}
|
|
42
|
+
const str = asString(value);
|
|
43
|
+
if (!str)
|
|
44
|
+
return null;
|
|
45
|
+
// Numeric strings can be either epoch seconds or epoch milliseconds.
|
|
46
|
+
if (/^\d+$/.test(str)) {
|
|
47
|
+
const numeric = Number(str);
|
|
48
|
+
if (isFinite(numeric)) {
|
|
49
|
+
const millis = numeric > EPOCH_MS_THRESHOLD ? numeric : numeric * 1000;
|
|
50
|
+
const date = new Date(millis);
|
|
51
|
+
return isNaN(date.getTime()) ? null : date.toISOString();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const date = new Date(str);
|
|
55
|
+
return isNaN(date.getTime()) ? null : date.toISOString();
|
|
56
|
+
}
|
|
57
|
+
function getClaudeWindowLabel(rateLimitType) {
|
|
58
|
+
switch (rateLimitType) {
|
|
59
|
+
case 'five_hour':
|
|
60
|
+
return 'Session limit';
|
|
61
|
+
case 'seven_day':
|
|
62
|
+
return 'Weekly limit';
|
|
63
|
+
case 'seven_day_opus':
|
|
64
|
+
return 'Opus limit';
|
|
65
|
+
case 'seven_day_sonnet':
|
|
66
|
+
return 'Sonnet limit';
|
|
67
|
+
case 'seven_day_oauth_apps':
|
|
68
|
+
return 'OAuth apps limit';
|
|
69
|
+
case 'seven_day_cowork':
|
|
70
|
+
return 'Cowork limit';
|
|
71
|
+
case 'overage':
|
|
72
|
+
return 'Extra usage';
|
|
73
|
+
default:
|
|
74
|
+
return rateLimitType || 'Unknown limit';
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function clampUnit(value) {
|
|
78
|
+
return Math.max(0, Math.min(1, value));
|
|
79
|
+
}
|
|
80
|
+
function normalizeUtilization(raw) {
|
|
81
|
+
const utilizationRaw = asNumber(raw['utilization']);
|
|
82
|
+
const usedPercentRaw = asNumber(raw['usedPercent'] ?? raw['used_percent']);
|
|
83
|
+
const remainingPercentRaw = asNumber(raw['remainingPercent'] ?? raw['remaining_percent']);
|
|
84
|
+
if (utilizationRaw !== null) {
|
|
85
|
+
const ratio = utilizationRaw <= 1 ? utilizationRaw : utilizationRaw / 100;
|
|
86
|
+
const normalizedRatio = clampUnit(ratio);
|
|
87
|
+
const usedPercent = (0, percentage_1.clampPercent)(normalizedRatio * 100);
|
|
88
|
+
return {
|
|
89
|
+
utilization: normalizedRatio,
|
|
90
|
+
usedPercent,
|
|
91
|
+
remainingPercent: (0, percentage_1.clampPercent)(100 - usedPercent),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
if (usedPercentRaw !== null) {
|
|
95
|
+
const usedPercent = (0, percentage_1.clampPercent)(usedPercentRaw);
|
|
96
|
+
return {
|
|
97
|
+
utilization: usedPercent / 100,
|
|
98
|
+
usedPercent,
|
|
99
|
+
remainingPercent: (0, percentage_1.clampPercent)(100 - usedPercent),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
if (remainingPercentRaw !== null) {
|
|
103
|
+
const remainingPercent = (0, percentage_1.clampPercent)(remainingPercentRaw);
|
|
104
|
+
const usedPercent = (0, percentage_1.clampPercent)(100 - remainingPercent);
|
|
105
|
+
return {
|
|
106
|
+
utilization: usedPercent / 100,
|
|
107
|
+
usedPercent,
|
|
108
|
+
remainingPercent,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
utilization: null,
|
|
113
|
+
usedPercent: 0,
|
|
114
|
+
remainingPercent: 100,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
function normalizeRateLimitType(value, fallbackKey) {
|
|
118
|
+
const direct = asString(value);
|
|
119
|
+
if (direct)
|
|
120
|
+
return direct;
|
|
121
|
+
if (fallbackKey)
|
|
122
|
+
return fallbackKey;
|
|
123
|
+
return 'unknown';
|
|
124
|
+
}
|
|
125
|
+
function toObject(value) {
|
|
126
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
127
|
+
return null;
|
|
128
|
+
return value;
|
|
129
|
+
}
|
|
130
|
+
function normalizeRestriction(raw, fallbackKey) {
|
|
131
|
+
const rateLimitType = normalizeRateLimitType(raw['rateLimitType'] ?? raw['rate_limit_type'] ?? raw['claim'] ?? raw['claimAbbrev'], fallbackKey);
|
|
132
|
+
if (!rateLimitType || rateLimitType === 'unknown')
|
|
133
|
+
return null;
|
|
134
|
+
const status = asString(raw['status']) || 'unknown';
|
|
135
|
+
const resetAt = normalizeTimestamp(raw['resetsAt'] ?? raw['resets_at'] ?? raw['resetAt'] ?? raw['reset_at']) ||
|
|
136
|
+
null;
|
|
137
|
+
const overageResetsAt = normalizeTimestamp(raw['overageResetsAt'] ??
|
|
138
|
+
raw['overage_resets_at'] ??
|
|
139
|
+
raw['overageResetAt'] ??
|
|
140
|
+
raw['overage_reset_at']) || null;
|
|
141
|
+
const { utilization, usedPercent, remainingPercent } = normalizeUtilization(raw);
|
|
142
|
+
return {
|
|
143
|
+
rateLimitType,
|
|
144
|
+
label: getClaudeWindowLabel(rateLimitType),
|
|
145
|
+
status,
|
|
146
|
+
utilization,
|
|
147
|
+
usedPercent,
|
|
148
|
+
remainingPercent,
|
|
149
|
+
resetAt,
|
|
150
|
+
surpassedThreshold: asBoolean(raw['surpassedThreshold'] ?? raw['surpassed_threshold']),
|
|
151
|
+
severity: asString(raw['severity']) || undefined,
|
|
152
|
+
overageStatus: asString(raw['overageStatus'] ?? raw['overage_status']) || undefined,
|
|
153
|
+
overageResetsAt,
|
|
154
|
+
overageDisabledReason: asString(raw['overageDisabledReason'] ?? raw['overage_disabled_reason']) || undefined,
|
|
155
|
+
isUsingOverage: asBoolean(raw['isUsingOverage'] ?? raw['is_using_overage']),
|
|
156
|
+
hasExtraUsageEnabled: asBoolean(raw['hasExtraUsageEnabled'] ?? raw['has_extra_usage_enabled']),
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Parse raw policy limits response into normalized windows.
|
|
161
|
+
* Supports both array and object-map `restrictions` shapes.
|
|
162
|
+
*/
|
|
163
|
+
function buildClaudeQuotaWindows(payload) {
|
|
164
|
+
const rawRestrictions = payload['restrictions'];
|
|
165
|
+
const windows = [];
|
|
166
|
+
if (Array.isArray(rawRestrictions)) {
|
|
167
|
+
for (const item of rawRestrictions) {
|
|
168
|
+
const raw = toObject(item);
|
|
169
|
+
if (!raw)
|
|
170
|
+
continue;
|
|
171
|
+
const window = normalizeRestriction(raw);
|
|
172
|
+
if (window)
|
|
173
|
+
windows.push(window);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
else if (toObject(rawRestrictions)) {
|
|
177
|
+
for (const [key, value] of Object.entries(rawRestrictions)) {
|
|
178
|
+
const raw = toObject(value);
|
|
179
|
+
if (!raw)
|
|
180
|
+
continue;
|
|
181
|
+
const window = normalizeRestriction(raw, key);
|
|
182
|
+
if (window)
|
|
183
|
+
windows.push(window);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
else if (toObject(payload)) {
|
|
187
|
+
// Some responses may contain a single restriction object directly.
|
|
188
|
+
const direct = normalizeRestriction(payload);
|
|
189
|
+
if (direct)
|
|
190
|
+
windows.push(direct);
|
|
191
|
+
}
|
|
192
|
+
const seen = new Set();
|
|
193
|
+
const unique = [];
|
|
194
|
+
for (const window of windows) {
|
|
195
|
+
const key = `${window.rateLimitType}:${window.resetAt ?? ''}:${window.status}`;
|
|
196
|
+
if (seen.has(key))
|
|
197
|
+
continue;
|
|
198
|
+
seen.add(key);
|
|
199
|
+
unique.push(window);
|
|
200
|
+
}
|
|
201
|
+
return unique.sort((a, b) => a.rateLimitType.localeCompare(b.rateLimitType));
|
|
202
|
+
}
|
|
203
|
+
exports.buildClaudeQuotaWindows = buildClaudeQuotaWindows;
|
|
204
|
+
function toEpochMs(iso) {
|
|
205
|
+
if (!iso)
|
|
206
|
+
return null;
|
|
207
|
+
const value = new Date(iso).getTime();
|
|
208
|
+
return isNaN(value) ? null : value;
|
|
209
|
+
}
|
|
210
|
+
function pickMostRestrictiveWeekly(windows) {
|
|
211
|
+
if (windows.length === 0)
|
|
212
|
+
return null;
|
|
213
|
+
return [...windows].sort((a, b) => {
|
|
214
|
+
if (a.remainingPercent !== b.remainingPercent) {
|
|
215
|
+
return a.remainingPercent - b.remainingPercent;
|
|
216
|
+
}
|
|
217
|
+
const aReset = toEpochMs(a.resetAt);
|
|
218
|
+
const bReset = toEpochMs(b.resetAt);
|
|
219
|
+
if (aReset === null && bReset === null)
|
|
220
|
+
return 0;
|
|
221
|
+
if (aReset === null)
|
|
222
|
+
return 1;
|
|
223
|
+
if (bReset === null)
|
|
224
|
+
return -1;
|
|
225
|
+
return aReset - bReset;
|
|
226
|
+
})[0];
|
|
227
|
+
}
|
|
228
|
+
function mapCoreWindow(window) {
|
|
229
|
+
if (!window)
|
|
230
|
+
return null;
|
|
231
|
+
return {
|
|
232
|
+
rateLimitType: window.rateLimitType,
|
|
233
|
+
label: window.label,
|
|
234
|
+
remainingPercent: window.remainingPercent,
|
|
235
|
+
resetAt: window.resetAt,
|
|
236
|
+
status: window.status,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
const WEEKLY_RATE_LIMIT_TYPES = new Set([
|
|
240
|
+
'seven_day',
|
|
241
|
+
'seven_day_opus',
|
|
242
|
+
'seven_day_sonnet',
|
|
243
|
+
'seven_day_oauth_apps',
|
|
244
|
+
'seven_day_cowork',
|
|
245
|
+
]);
|
|
246
|
+
function isClaudeWeeklyRateLimitType(rateLimitType) {
|
|
247
|
+
return WEEKLY_RATE_LIMIT_TYPES.has(rateLimitType);
|
|
248
|
+
}
|
|
249
|
+
exports.isClaudeWeeklyRateLimitType = isClaudeWeeklyRateLimitType;
|
|
250
|
+
function pickMostRestrictiveClaudeWeeklyWindow(windows) {
|
|
251
|
+
const weeklyCandidates = windows.filter((window) => isClaudeWeeklyRateLimitType(window.rateLimitType));
|
|
252
|
+
return pickMostRestrictiveWeekly(weeklyCandidates);
|
|
253
|
+
}
|
|
254
|
+
exports.pickMostRestrictiveClaudeWeeklyWindow = pickMostRestrictiveClaudeWeeklyWindow;
|
|
255
|
+
/**
|
|
256
|
+
* Build explicit 5h + weekly usage summary from Claude policy windows.
|
|
257
|
+
*/
|
|
258
|
+
function buildClaudeCoreUsageSummary(windows) {
|
|
259
|
+
if (!windows || windows.length === 0) {
|
|
260
|
+
return { fiveHour: null, weekly: null };
|
|
261
|
+
}
|
|
262
|
+
const fiveHourWindow = windows.find((window) => window.rateLimitType === 'five_hour') || null;
|
|
263
|
+
const weeklyWindow = pickMostRestrictiveClaudeWeeklyWindow(windows);
|
|
264
|
+
if (fiveHourWindow && weeklyWindow) {
|
|
265
|
+
return {
|
|
266
|
+
fiveHour: mapCoreWindow(fiveHourWindow),
|
|
267
|
+
weekly: mapCoreWindow(weeklyWindow),
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
// Fallback: infer shortest/longest reset windows from non-overage limits.
|
|
271
|
+
const nonOverage = windows.filter((window) => window.rateLimitType !== 'overage');
|
|
272
|
+
const withReset = nonOverage
|
|
273
|
+
.map((window) => ({
|
|
274
|
+
window,
|
|
275
|
+
resetMs: toEpochMs(window.resetAt),
|
|
276
|
+
}))
|
|
277
|
+
.filter((entry) => entry.resetMs !== null)
|
|
278
|
+
.sort((a, b) => a.resetMs - b.resetMs);
|
|
279
|
+
const inferredWeekly = weeklyWindow ||
|
|
280
|
+
[...withReset].reverse().find((entry) => entry.window !== fiveHourWindow)?.window ||
|
|
281
|
+
pickMostRestrictiveWeekly(nonOverage.filter((window) => window !== fiveHourWindow));
|
|
282
|
+
const inferredFiveHour = fiveHourWindow ||
|
|
283
|
+
withReset.find((entry) => entry.window !== inferredWeekly)?.window ||
|
|
284
|
+
pickMostRestrictiveWeekly(nonOverage.filter((window) => window !== inferredWeekly));
|
|
285
|
+
return {
|
|
286
|
+
fiveHour: mapCoreWindow(inferredFiveHour),
|
|
287
|
+
weekly: mapCoreWindow(inferredWeekly),
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
exports.buildClaudeCoreUsageSummary = buildClaudeCoreUsageSummary;
|
|
291
|
+
//# sourceMappingURL=quota-fetcher-claude-normalizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quota-fetcher-claude-normalizer.js","sourceRoot":"","sources":["../../src/cliproxy/quota-fetcher-claude-normalizer.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAGH,oDAAmD;AAEnD,gFAAgF;AAChF,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEhC,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACpF,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,KAAK,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;QAClC,IAAI,KAAK,KAAK,OAAO;YAAE,OAAO,KAAK,CAAC;IACtC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7B,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,KAAK,GAAG,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC;QACjE,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IAC3D,CAAC;IAED,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5B,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAEtB,qEAAqE;IACrE,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,OAAO,GAAG,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;YACvE,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,oBAAoB,CAAC,aAAqB;IACjD,QAAQ,aAAa,EAAE,CAAC;QACtB,KAAK,WAAW;YACd,OAAO,eAAe,CAAC;QACzB,KAAK,WAAW;YACd,OAAO,cAAc,CAAC;QACxB,KAAK,gBAAgB;YACnB,OAAO,YAAY,CAAC;QACtB,KAAK,kBAAkB;YACrB,OAAO,cAAc,CAAC;QACxB,KAAK,sBAAsB;YACzB,OAAO,kBAAkB,CAAC;QAC5B,KAAK,kBAAkB;YACrB,OAAO,cAAc,CAAC;QACxB,KAAK,SAAS;YACZ,OAAO,aAAa,CAAC;QACvB;YACE,OAAO,aAAa,IAAI,eAAe,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,oBAAoB,CAAC,GAA4B;IAKxD,MAAM,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;IACpD,MAAM,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;IAC3E,MAAM,mBAAmB,GAAG,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAE1F,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,cAAc,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,GAAG,GAAG,CAAC;QAC1E,MAAM,eAAe,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,WAAW,GAAG,IAAA,yBAAY,EAAC,eAAe,GAAG,GAAG,CAAC,CAAC;QACxD,OAAO;YACL,WAAW,EAAE,eAAe;YAC5B,WAAW;YACX,gBAAgB,EAAE,IAAA,yBAAY,EAAC,GAAG,GAAG,WAAW,CAAC;SAClD,CAAC;IACJ,CAAC;IAED,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;QAC5B,MAAM,WAAW,GAAG,IAAA,yBAAY,EAAC,cAAc,CAAC,CAAC;QACjD,OAAO;YACL,WAAW,EAAE,WAAW,GAAG,GAAG;YAC9B,WAAW;YACX,gBAAgB,EAAE,IAAA,yBAAY,EAAC,GAAG,GAAG,WAAW,CAAC;SAClD,CAAC;IACJ,CAAC;IAED,IAAI,mBAAmB,KAAK,IAAI,EAAE,CAAC;QACjC,MAAM,gBAAgB,GAAG,IAAA,yBAAY,EAAC,mBAAmB,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,IAAA,yBAAY,EAAC,GAAG,GAAG,gBAAgB,CAAC,CAAC;QACzD,OAAO;YACL,WAAW,EAAE,WAAW,GAAG,GAAG;YAC9B,WAAW;YACX,gBAAgB;SACjB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,WAAW,EAAE,IAAI;QACjB,WAAW,EAAE,CAAC;QACd,gBAAgB,EAAE,GAAG;KACtB,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAc,EAAE,WAAoB;IAClE,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,IAAI,WAAW;QAAE,OAAO,WAAW,CAAC;IACpC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrF,OAAO,KAAgC,CAAC;AAC1C,CAAC;AAED,SAAS,oBAAoB,CAC3B,GAA4B,EAC5B,WAAoB;IAEpB,MAAM,aAAa,GAAG,sBAAsB,CAC1C,GAAG,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,aAAa,CAAC,EACpF,WAAW,CACZ,CAAC;IACF,IAAI,CAAC,aAAa,IAAI,aAAa,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAE/D,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,SAAS,CAAC;IACpD,MAAM,OAAO,GACX,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5F,IAAI,CAAC;IACP,MAAM,eAAe,GACnB,kBAAkB,CAChB,GAAG,CAAC,iBAAiB,CAAC;QACpB,GAAG,CAAC,mBAAmB,CAAC;QACxB,GAAG,CAAC,gBAAgB,CAAC;QACrB,GAAG,CAAC,kBAAkB,CAAC,CAC1B,IAAI,IAAI,CAAC;IAEZ,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAEjF,OAAO;QACL,aAAa;QACb,KAAK,EAAE,oBAAoB,CAAC,aAAa,CAAC;QAC1C,MAAM;QACN,WAAW;QACX,WAAW;QACX,gBAAgB;QAChB,OAAO;QACP,kBAAkB,EAAE,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACtF,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,SAAS;QAChD,aAAa,EAAE,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC,IAAI,SAAS;QACnF,eAAe;QACf,qBAAqB,EACnB,QAAQ,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,GAAG,CAAC,yBAAyB,CAAC,CAAC,IAAI,SAAS;QACvF,cAAc,EAAE,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAC3E,oBAAoB,EAAE,SAAS,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,GAAG,CAAC,yBAAyB,CAAC,CAAC;KAC/F,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,uBAAuB,CAAC,OAAgC;IACtE,MAAM,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAChD,MAAM,OAAO,GAAwB,EAAE,CAAC;IAExC,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;QACnC,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,CAAC,GAAG;gBAAE,SAAS;YACnB,MAAM,MAAM,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;YACzC,IAAI,MAAM;gBAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;SAAM,IAAI,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QACrC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAA0C,CAAC,EAAE,CAAC;YACtF,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,CAAC,GAAG;gBAAE,SAAS;YACnB,MAAM,MAAM,GAAG,oBAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC9C,IAAI,MAAM;gBAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;SAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,mEAAmE;QACnE,MAAM,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,MAAM;YAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,OAAO,IAAI,EAAE,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAC/E,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AAC/E,CAAC;AAlCD,0DAkCC;AAED,SAAS,SAAS,CAAC,GAAkB;IACnC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;IACtC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;AACrC,CAAC;AAED,SAAS,yBAAyB,CAAC,OAA4B;IAC7D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAChC,IAAI,CAAC,CAAC,gBAAgB,KAAK,CAAC,CAAC,gBAAgB,EAAE,CAAC;YAC9C,OAAO,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,gBAAgB,CAAC;QACjD,CAAC;QACD,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,CAAC,CAAC;QACjD,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,CAAC,CAAC;QAC9B,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,CAAC,CAAC,CAAC;QAC/B,OAAO,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACR,CAAC;AAED,SAAS,aAAa,CAAC,MAAgC;IACrD,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,OAAO;QACL,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC;IACtC,WAAW;IACX,gBAAgB;IAChB,kBAAkB;IAClB,sBAAsB;IACtB,kBAAkB;CACnB,CAAC,CAAC;AAEH,SAAgB,2BAA2B,CAAC,aAAqB;IAC/D,OAAO,uBAAuB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AACpD,CAAC;AAFD,kEAEC;AAED,SAAgB,qCAAqC,CACnD,OAA4B;IAE5B,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CACjD,2BAA2B,CAAC,MAAM,CAAC,aAAa,CAAC,CAClD,CAAC;IACF,OAAO,yBAAyB,CAAC,gBAAgB,CAAC,CAAC;AACrD,CAAC;AAPD,sFAOC;AAED;;GAEG;AACH,SAAgB,2BAA2B,CAAC,OAA4B;IACtE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC;IAED,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,KAAK,WAAW,CAAC,IAAI,IAAI,CAAC;IAC9F,MAAM,YAAY,GAAG,qCAAqC,CAAC,OAAO,CAAC,CAAC;IAEpE,IAAI,cAAc,IAAI,YAAY,EAAE,CAAC;QACnC,OAAO;YACL,QAAQ,EAAE,aAAa,CAAC,cAAc,CAAC;YACvC,MAAM,EAAE,aAAa,CAAC,YAAY,CAAC;SACpC,CAAC;IACJ,CAAC;IAED,0EAA0E;IAC1E,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC;IAClF,MAAM,SAAS,GAAG,UAAU;SACzB,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAChB,MAAM;QACN,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;KACnC,CAAC,CAAC;SACF,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC;SACzC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAE,CAAC,CAAC,OAAkB,GAAI,CAAC,CAAC,OAAkB,CAAC,CAAC;IAEjE,MAAM,cAAc,GAClB,YAAY;QACZ,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,cAAc,CAAC,EAAE,MAAM;QACjF,yBAAyB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,cAAc,CAAC,CAAC,CAAC;IACtF,MAAM,gBAAgB,GACpB,cAAc;QACd,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,cAAc,CAAC,EAAE,MAAM;QAClE,yBAAyB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,cAAc,CAAC,CAAC,CAAC;IAEtF,OAAO;QACL,QAAQ,EAAE,aAAa,CAAC,gBAAgB,CAAC;QACzC,MAAM,EAAE,aAAa,CAAC,cAAc,CAAC;KACtC,CAAC;AACJ,CAAC;AAtCD,kEAsCC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quota Fetcher for Claude (Anthropic) Accounts
|
|
3
|
+
*
|
|
4
|
+
* Fetches policy limits from Claude API and normalizes 5h + weekly windows.
|
|
5
|
+
*/
|
|
6
|
+
import type { ClaudeQuotaResult } from './quota-types';
|
|
7
|
+
import { buildClaudeQuotaWindows, buildClaudeCoreUsageSummary } from './quota-fetcher-claude-normalizer';
|
|
8
|
+
export { buildClaudeQuotaWindows, buildClaudeCoreUsageSummary };
|
|
9
|
+
export declare const CLAUDE_POLICY_LIMITS_URL = "https://api.anthropic.com/api/claude_code/policy_limits";
|
|
10
|
+
/**
|
|
11
|
+
* Fetch quota for a single Claude account.
|
|
12
|
+
*/
|
|
13
|
+
export declare function fetchClaudeQuota(accountId: string, verbose?: boolean): Promise<ClaudeQuotaResult>;
|
|
14
|
+
/**
|
|
15
|
+
* Fetch quota for all Claude accounts.
|
|
16
|
+
*/
|
|
17
|
+
export declare function fetchAllClaudeQuotas(verbose?: boolean): Promise<{
|
|
18
|
+
account: string;
|
|
19
|
+
quota: ClaudeQuotaResult;
|
|
20
|
+
}[]>;
|
|
21
|
+
//# sourceMappingURL=quota-fetcher-claude.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quota-fetcher-claude.d.ts","sourceRoot":"","sources":["../../src/cliproxy/quota-fetcher-claude.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC5B,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,CAAC;AAEhE,eAAO,MAAM,wBAAwB,4DAA4D,CAAC;AAgJlG;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,OAAO,UAAQ,GACd,OAAO,CAAC,iBAAiB,CAAC,CA+G5B;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,UAAQ,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,iBAAiB,CAAA;CAAE,EAAE,CAAC,CAS1D"}
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Quota Fetcher for Claude (Anthropic) Accounts
|
|
4
|
+
*
|
|
5
|
+
* Fetches policy limits from Claude API and normalizes 5h + weekly windows.
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
24
|
+
if (mod && mod.__esModule) return mod;
|
|
25
|
+
var result = {};
|
|
26
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
27
|
+
__setModuleDefault(result, mod);
|
|
28
|
+
return result;
|
|
29
|
+
};
|
|
30
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
+
exports.fetchAllClaudeQuotas = exports.fetchClaudeQuota = exports.CLAUDE_POLICY_LIMITS_URL = exports.buildClaudeCoreUsageSummary = exports.buildClaudeQuotaWindows = void 0;
|
|
32
|
+
const path = __importStar(require("node:path"));
|
|
33
|
+
const fsp = __importStar(require("node:fs/promises"));
|
|
34
|
+
const config_generator_1 = require("./config-generator");
|
|
35
|
+
const account_manager_1 = require("./account-manager");
|
|
36
|
+
const auth_utils_1 = require("./auth-utils");
|
|
37
|
+
const quota_fetcher_claude_normalizer_1 = require("./quota-fetcher-claude-normalizer");
|
|
38
|
+
Object.defineProperty(exports, "buildClaudeQuotaWindows", { enumerable: true, get: function () { return quota_fetcher_claude_normalizer_1.buildClaudeQuotaWindows; } });
|
|
39
|
+
Object.defineProperty(exports, "buildClaudeCoreUsageSummary", { enumerable: true, get: function () { return quota_fetcher_claude_normalizer_1.buildClaudeCoreUsageSummary; } });
|
|
40
|
+
exports.CLAUDE_POLICY_LIMITS_URL = 'https://api.anthropic.com/api/claude_code/policy_limits';
|
|
41
|
+
const CLAUDE_QUOTA_TIMEOUT_MS = 10000;
|
|
42
|
+
const CLAUDE_QUOTA_MAX_ATTEMPTS = 2;
|
|
43
|
+
const CLAUDE_USER_AGENT = 'ccs-cli/claude-quota';
|
|
44
|
+
function asString(value) {
|
|
45
|
+
return typeof value === 'string' && value.trim().length > 0 ? value.trim() : null;
|
|
46
|
+
}
|
|
47
|
+
function toObject(value) {
|
|
48
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
49
|
+
return null;
|
|
50
|
+
return value;
|
|
51
|
+
}
|
|
52
|
+
function extractAccessToken(data) {
|
|
53
|
+
const direct = asString(data['access_token']);
|
|
54
|
+
if (direct)
|
|
55
|
+
return direct;
|
|
56
|
+
const nested = toObject(data['token']);
|
|
57
|
+
if (nested) {
|
|
58
|
+
const nestedToken = asString(nested['access_token']);
|
|
59
|
+
if (nestedToken)
|
|
60
|
+
return nestedToken;
|
|
61
|
+
}
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
function extractExpiry(data) {
|
|
65
|
+
const direct = asString(data['expired']);
|
|
66
|
+
if (direct)
|
|
67
|
+
return direct;
|
|
68
|
+
const nested = toObject(data['token']);
|
|
69
|
+
if (nested) {
|
|
70
|
+
return asString(nested['expiry']);
|
|
71
|
+
}
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
function isAuthExpired(expiry) {
|
|
75
|
+
return expiry ? (0, auth_utils_1.isTokenExpired)(expiry) : false;
|
|
76
|
+
}
|
|
77
|
+
async function readJsonFile(filePath) {
|
|
78
|
+
try {
|
|
79
|
+
const raw = await fsp.readFile(filePath, 'utf-8');
|
|
80
|
+
const parsed = JSON.parse(raw);
|
|
81
|
+
return toObject(parsed);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
async function readAuthCandidate(filePath) {
|
|
88
|
+
const data = await readJsonFile(filePath);
|
|
89
|
+
if (!data)
|
|
90
|
+
return null;
|
|
91
|
+
const accessToken = extractAccessToken(data);
|
|
92
|
+
if (!accessToken)
|
|
93
|
+
return null;
|
|
94
|
+
const expiry = extractExpiry(data);
|
|
95
|
+
return {
|
|
96
|
+
accessToken,
|
|
97
|
+
isExpired: isAuthExpired(expiry),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
async function readClaudeAuthData(accountId) {
|
|
101
|
+
const authDirs = [(0, config_generator_1.getAuthDir)(), (0, account_manager_1.getPausedDir)()];
|
|
102
|
+
const sanitizedId = (0, auth_utils_1.sanitizeEmail)(accountId);
|
|
103
|
+
const expectedFiles = [`claude-${sanitizedId}.json`, `anthropic-${sanitizedId}.json`];
|
|
104
|
+
for (const authDir of authDirs) {
|
|
105
|
+
for (const expectedFile of expectedFiles) {
|
|
106
|
+
const filePath = path.join(authDir, expectedFile);
|
|
107
|
+
const authData = await readAuthCandidate(filePath);
|
|
108
|
+
if (authData) {
|
|
109
|
+
return authData;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
let files;
|
|
113
|
+
try {
|
|
114
|
+
files = await fsp.readdir(authDir);
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
for (const file of files) {
|
|
120
|
+
if (!file.endsWith('.json') ||
|
|
121
|
+
(!file.startsWith('claude-') && !file.startsWith('anthropic-'))) {
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
const filePath = path.join(authDir, file);
|
|
125
|
+
const data = await readJsonFile(filePath);
|
|
126
|
+
if (!data)
|
|
127
|
+
continue;
|
|
128
|
+
const accessToken = extractAccessToken(data);
|
|
129
|
+
if (!accessToken)
|
|
130
|
+
continue;
|
|
131
|
+
const fileEmail = asString(data['email']);
|
|
132
|
+
const typeValue = asString(data['type']);
|
|
133
|
+
const isClaudeType = typeValue === null || typeValue === 'claude' || typeValue === 'anthropic';
|
|
134
|
+
const matchesEmail = fileEmail === accountId;
|
|
135
|
+
const matchesFile = file.includes(sanitizedId);
|
|
136
|
+
if ((matchesEmail || matchesFile) && isClaudeType) {
|
|
137
|
+
const expiry = extractExpiry(data);
|
|
138
|
+
return {
|
|
139
|
+
accessToken,
|
|
140
|
+
isExpired: isAuthExpired(expiry),
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
function buildEmptyResult(error, accountId, needsReauth = false) {
|
|
148
|
+
return {
|
|
149
|
+
success: false,
|
|
150
|
+
windows: [],
|
|
151
|
+
coreUsage: { fiveHour: null, weekly: null },
|
|
152
|
+
lastUpdated: Date.now(),
|
|
153
|
+
error,
|
|
154
|
+
accountId,
|
|
155
|
+
needsReauth,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Fetch quota for a single Claude account.
|
|
160
|
+
*/
|
|
161
|
+
async function fetchClaudeQuota(accountId, verbose = false) {
|
|
162
|
+
const authData = await readClaudeAuthData(accountId);
|
|
163
|
+
if (!authData) {
|
|
164
|
+
return buildEmptyResult('Auth file not found for Claude account', accountId);
|
|
165
|
+
}
|
|
166
|
+
if (authData.isExpired) {
|
|
167
|
+
return buildEmptyResult('Token expired - re-authenticate with ccs cliproxy auth claude', accountId, true);
|
|
168
|
+
}
|
|
169
|
+
let lastError = 'Unknown error';
|
|
170
|
+
for (let attempt = 1; attempt <= CLAUDE_QUOTA_MAX_ATTEMPTS; attempt++) {
|
|
171
|
+
const controller = new AbortController();
|
|
172
|
+
const timeoutId = setTimeout(() => controller.abort(), CLAUDE_QUOTA_TIMEOUT_MS);
|
|
173
|
+
try {
|
|
174
|
+
const response = await fetch(exports.CLAUDE_POLICY_LIMITS_URL, {
|
|
175
|
+
method: 'GET',
|
|
176
|
+
signal: controller.signal,
|
|
177
|
+
headers: {
|
|
178
|
+
Authorization: `Bearer ${authData.accessToken}`,
|
|
179
|
+
Accept: 'application/json',
|
|
180
|
+
'User-Agent': CLAUDE_USER_AGENT,
|
|
181
|
+
},
|
|
182
|
+
});
|
|
183
|
+
clearTimeout(timeoutId);
|
|
184
|
+
if (verbose) {
|
|
185
|
+
console.error(`[i] Claude policy limits status: ${response.status} (attempt ${attempt})`);
|
|
186
|
+
}
|
|
187
|
+
if (response.status === 401) {
|
|
188
|
+
return buildEmptyResult('Authentication required for policy limits', accountId, true);
|
|
189
|
+
}
|
|
190
|
+
if (response.status === 404) {
|
|
191
|
+
// Some accounts may not expose policy limits; treat as empty but successful.
|
|
192
|
+
return {
|
|
193
|
+
success: true,
|
|
194
|
+
windows: [],
|
|
195
|
+
coreUsage: { fiveHour: null, weekly: null },
|
|
196
|
+
lastUpdated: Date.now(),
|
|
197
|
+
accountId,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
if (response.status === 403) {
|
|
201
|
+
return buildEmptyResult('Not authorized for policy limits', accountId);
|
|
202
|
+
}
|
|
203
|
+
if (!response.ok) {
|
|
204
|
+
lastError = `Policy limits API error: ${response.status}`;
|
|
205
|
+
if (attempt < CLAUDE_QUOTA_MAX_ATTEMPTS &&
|
|
206
|
+
(response.status === 429 || response.status >= 500)) {
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
return buildEmptyResult(lastError, accountId);
|
|
210
|
+
}
|
|
211
|
+
let payload;
|
|
212
|
+
try {
|
|
213
|
+
payload = await response.json();
|
|
214
|
+
}
|
|
215
|
+
catch {
|
|
216
|
+
return buildEmptyResult('Invalid policy limits format', accountId);
|
|
217
|
+
}
|
|
218
|
+
if (!toObject(payload)) {
|
|
219
|
+
return buildEmptyResult('Invalid policy limits format', accountId);
|
|
220
|
+
}
|
|
221
|
+
const windows = (0, quota_fetcher_claude_normalizer_1.buildClaudeQuotaWindows)(payload);
|
|
222
|
+
const coreUsage = (0, quota_fetcher_claude_normalizer_1.buildClaudeCoreUsageSummary)(windows);
|
|
223
|
+
return {
|
|
224
|
+
success: true,
|
|
225
|
+
windows,
|
|
226
|
+
coreUsage,
|
|
227
|
+
lastUpdated: Date.now(),
|
|
228
|
+
accountId,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
clearTimeout(timeoutId);
|
|
233
|
+
lastError =
|
|
234
|
+
error instanceof Error && error.name === 'AbortError'
|
|
235
|
+
? 'Policy limits request timeout'
|
|
236
|
+
: error instanceof Error
|
|
237
|
+
? error.message
|
|
238
|
+
: 'Unknown error';
|
|
239
|
+
if (verbose) {
|
|
240
|
+
const errorDetails = error instanceof Error ? (error.stack ?? error.message) : JSON.stringify(error);
|
|
241
|
+
console.error(`[!] Claude policy limits failed (attempt ${attempt}): ${lastError}${errorDetails ? `\n${errorDetails}` : ''}`);
|
|
242
|
+
}
|
|
243
|
+
if (attempt >= CLAUDE_QUOTA_MAX_ATTEMPTS) {
|
|
244
|
+
return buildEmptyResult(lastError, accountId);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return buildEmptyResult(lastError, accountId);
|
|
249
|
+
}
|
|
250
|
+
exports.fetchClaudeQuota = fetchClaudeQuota;
|
|
251
|
+
/**
|
|
252
|
+
* Fetch quota for all Claude accounts.
|
|
253
|
+
*/
|
|
254
|
+
async function fetchAllClaudeQuotas(verbose = false) {
|
|
255
|
+
const accounts = (0, account_manager_1.getProviderAccounts)('claude');
|
|
256
|
+
const results = await Promise.all(accounts.map(async (account) => ({
|
|
257
|
+
account: account.id,
|
|
258
|
+
quota: await fetchClaudeQuota(account.id, verbose),
|
|
259
|
+
})));
|
|
260
|
+
return results;
|
|
261
|
+
}
|
|
262
|
+
exports.fetchAllClaudeQuotas = fetchAllClaudeQuotas;
|
|
263
|
+
//# sourceMappingURL=quota-fetcher-claude.js.map
|