@kaitranntt/ccs 7.52.2-dev.4 → 7.52.2-dev.6
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 +4 -0
- package/dist/api/services/index.d.ts +3 -1
- package/dist/api/services/index.d.ts.map +1 -1
- package/dist/api/services/index.js +10 -1
- package/dist/api/services/index.js.map +1 -1
- package/dist/api/services/profile-lifecycle-service.d.ts +24 -0
- package/dist/api/services/profile-lifecycle-service.d.ts.map +1 -0
- package/dist/api/services/profile-lifecycle-service.js +364 -0
- package/dist/api/services/profile-lifecycle-service.js.map +1 -0
- package/dist/api/services/profile-lifecycle-validation.d.ts +11 -0
- package/dist/api/services/profile-lifecycle-validation.d.ts.map +1 -0
- package/dist/api/services/profile-lifecycle-validation.js +87 -0
- package/dist/api/services/profile-lifecycle-validation.js.map +1 -0
- package/dist/api/services/profile-types.d.ts +66 -0
- package/dist/api/services/profile-types.d.ts.map +1 -1
- package/dist/cliproxy/auth/gemini-token-refresh.d.ts.map +1 -1
- package/dist/cliproxy/auth/gemini-token-refresh.js +42 -14
- package/dist/cliproxy/auth/gemini-token-refresh.js.map +1 -1
- package/dist/cliproxy/binary-manager.d.ts.map +1 -1
- package/dist/cliproxy/binary-manager.js +13 -14
- package/dist/cliproxy/binary-manager.js.map +1 -1
- package/dist/cliproxy/quota-fetcher-codex.d.ts.map +1 -1
- package/dist/cliproxy/quota-fetcher-codex.js +199 -63
- package/dist/cliproxy/quota-fetcher-codex.js.map +1 -1
- package/dist/cliproxy/quota-fetcher.d.ts +12 -0
- package/dist/cliproxy/quota-fetcher.d.ts.map +1 -1
- package/dist/cliproxy/quota-fetcher.js +328 -260
- package/dist/cliproxy/quota-fetcher.js.map +1 -1
- package/dist/cliproxy/quota-types.d.ts +18 -4
- package/dist/cliproxy/quota-types.d.ts.map +1 -1
- package/dist/commands/api-command.d.ts.map +1 -1
- package/dist/commands/api-command.js +275 -1
- package/dist/commands/api-command.js.map +1 -1
- package/dist/commands/help-command.d.ts.map +1 -1
- package/dist/commands/help-command.js +4 -0
- package/dist/commands/help-command.js.map +1 -1
- package/dist/ui/assets/accounts-C19R3bH_.js +1 -0
- package/dist/ui/assets/{alert-dialog-QYUhRzXK.js → alert-dialog-HJSnKjIs.js} +1 -1
- package/dist/ui/assets/api-DSqH5CNY.js +4 -0
- package/dist/ui/assets/auth-section-CYKSK386.js +1 -0
- package/dist/ui/assets/backups-section-DG3ZbzbF.js +1 -0
- package/dist/ui/assets/{checkbox-DGiQ22i1.js → checkbox-Du_1Cq1z.js} +1 -1
- package/dist/ui/assets/cliproxy-CrhOC0jn.js +3 -0
- package/dist/ui/assets/cliproxy-control-panel-DLzDKBdd.js +1 -0
- package/dist/ui/assets/{confirm-dialog-DDdeYI2H.js → confirm-dialog-D5ln-pf7.js} +1 -1
- package/dist/ui/assets/{copilot-DFaXcekY.js → copilot-Bhp7sQwN.js} +2 -2
- package/dist/ui/assets/{cursor-DepYQY1w.js → cursor-Dfn3jHV4.js} +1 -1
- package/dist/ui/assets/{droid-CTtRivEr.js → droid-Vjl6_n7D.js} +1 -1
- package/dist/ui/assets/globalenv-section-CcmKdM4g.js +1 -0
- package/dist/ui/assets/{health-D6oasd62.js → health-3zy8jvwf.js} +1 -1
- package/dist/ui/assets/{icons-BYZM_9Gm.js → icons-D2eEmpHv.js} +1 -1
- package/dist/ui/assets/index-BusjPRWX.css +1 -0
- package/dist/ui/assets/index-CP_OIR4n.js +1 -0
- package/dist/ui/assets/index-DbxzdeHz.js +1 -0
- package/dist/ui/assets/index-f_yPeQQQ.js +1 -0
- package/dist/ui/assets/{index-Diuv26bz.js → index-iOpyYqld.js} +1 -1
- package/dist/ui/assets/index-uTmtgDew.js +47 -0
- package/dist/ui/assets/proxy-status-widget-1lHBE3f2.js +1 -0
- package/dist/ui/assets/{separator-CSt5QZvu.js → separator-CsVbirkY.js} +1 -1
- package/dist/ui/assets/shared-DGq6uQfx.js +8 -0
- package/dist/ui/assets/{switch-CTrO47Q-.js → switch-BR0F3O9R.js} +1 -1
- package/dist/ui/assets/{updates-BBghSoYr.js → updates-ZSQz4CLF.js} +1 -1
- package/dist/ui/index.html +3 -3
- package/dist/web-server/routes/cliproxy-stats-routes.d.ts +12 -0
- package/dist/web-server/routes/cliproxy-stats-routes.d.ts.map +1 -1
- package/dist/web-server/routes/cliproxy-stats-routes.js +22 -9
- package/dist/web-server/routes/cliproxy-stats-routes.js.map +1 -1
- package/dist/web-server/routes/profile-routes.d.ts.map +1 -1
- package/dist/web-server/routes/profile-routes.js +206 -9
- package/dist/web-server/routes/profile-routes.js.map +1 -1
- package/dist/web-server/services/cliproxy-dashboard-install-service.d.ts +21 -0
- package/dist/web-server/services/cliproxy-dashboard-install-service.d.ts.map +1 -0
- package/dist/web-server/services/cliproxy-dashboard-install-service.js +51 -0
- package/dist/web-server/services/cliproxy-dashboard-install-service.js.map +1 -0
- package/package.json +1 -1
- package/dist/ui/assets/accounts-IsT_BiCd.js +0 -1
- package/dist/ui/assets/api-BYUVLPig.js +0 -1
- package/dist/ui/assets/auth-section-CqMQGbDM.js +0 -1
- package/dist/ui/assets/backups-section-htDdMLh5.js +0 -1
- package/dist/ui/assets/cliproxy-BpQHL05v.js +0 -3
- package/dist/ui/assets/cliproxy-control-panel-CCdMLyj2.js +0 -1
- package/dist/ui/assets/globalenv-section-CljFwX-s.js +0 -1
- package/dist/ui/assets/index-CGPdFYiT.js +0 -1
- package/dist/ui/assets/index-CK9IG4x4.js +0 -1
- package/dist/ui/assets/index-CeXOFv5d.js +0 -1
- package/dist/ui/assets/index-CmZS09IA.js +0 -47
- package/dist/ui/assets/index-WBo504Wu.css +0 -1
- package/dist/ui/assets/proxy-status-widget-exblPwy_.js +0 -1
- package/dist/ui/assets/shared-CbdTTMNS.js +0 -8
|
@@ -48,4 +48,70 @@ export interface UpdateApiProfileTargetResult {
|
|
|
48
48
|
target?: TargetType;
|
|
49
49
|
error?: string;
|
|
50
50
|
}
|
|
51
|
+
/** Validation severity for profile lifecycle checks */
|
|
52
|
+
export type ProfileValidationLevel = 'error' | 'warning';
|
|
53
|
+
/** Field-level validation issue emitted by lifecycle operations */
|
|
54
|
+
export interface ProfileValidationIssue {
|
|
55
|
+
level: ProfileValidationLevel;
|
|
56
|
+
code: string;
|
|
57
|
+
message: string;
|
|
58
|
+
field?: string;
|
|
59
|
+
hint?: string;
|
|
60
|
+
}
|
|
61
|
+
/** Validation summary for settings payload */
|
|
62
|
+
export interface ProfileValidationSummary {
|
|
63
|
+
valid: boolean;
|
|
64
|
+
issues: ProfileValidationIssue[];
|
|
65
|
+
}
|
|
66
|
+
/** Orphan settings file candidate discovered on disk */
|
|
67
|
+
export interface ApiProfileOrphanCandidate {
|
|
68
|
+
name: string;
|
|
69
|
+
settingsPath: string;
|
|
70
|
+
validation: ProfileValidationSummary;
|
|
71
|
+
}
|
|
72
|
+
/** Discovery result for orphan settings files */
|
|
73
|
+
export interface DiscoverApiProfileOrphansResult {
|
|
74
|
+
orphans: ApiProfileOrphanCandidate[];
|
|
75
|
+
}
|
|
76
|
+
/** Registration result for orphan settings files */
|
|
77
|
+
export interface RegisterApiProfileOrphansResult {
|
|
78
|
+
registered: string[];
|
|
79
|
+
skipped: Array<{
|
|
80
|
+
name: string;
|
|
81
|
+
reason: string;
|
|
82
|
+
}>;
|
|
83
|
+
}
|
|
84
|
+
/** Copy result for API profile duplication */
|
|
85
|
+
export interface CopyApiProfileResult {
|
|
86
|
+
success: boolean;
|
|
87
|
+
name?: string;
|
|
88
|
+
settingsPath?: string;
|
|
89
|
+
warnings?: string[];
|
|
90
|
+
error?: string;
|
|
91
|
+
}
|
|
92
|
+
/** Portable export bundle schema */
|
|
93
|
+
export interface ApiProfileExportBundle {
|
|
94
|
+
schemaVersion: 1;
|
|
95
|
+
exportedAt: string;
|
|
96
|
+
profile: {
|
|
97
|
+
name: string;
|
|
98
|
+
target: TargetType;
|
|
99
|
+
};
|
|
100
|
+
settings: Record<string, unknown>;
|
|
101
|
+
}
|
|
102
|
+
/** Export operation result */
|
|
103
|
+
export interface ExportApiProfileResult {
|
|
104
|
+
success: boolean;
|
|
105
|
+
bundle?: ApiProfileExportBundle;
|
|
106
|
+
redacted?: boolean;
|
|
107
|
+
error?: string;
|
|
108
|
+
}
|
|
109
|
+
/** Import operation result */
|
|
110
|
+
export interface ImportApiProfileResult {
|
|
111
|
+
success: boolean;
|
|
112
|
+
name?: string;
|
|
113
|
+
warnings?: string[];
|
|
114
|
+
validation?: ProfileValidationSummary;
|
|
115
|
+
error?: string;
|
|
116
|
+
}
|
|
51
117
|
//# sourceMappingURL=profile-types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile-types.d.ts","sourceRoot":"","sources":["../../../src/api/services/profile-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE/D,qCAAqC;AACrC,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,mCAAmC;AACnC,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,SAAS,GAAG,QAAQ,CAAC;IACnC,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,4BAA4B;AAC5B,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,iCAAiC;AACjC,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,QAAQ,EAAE,mBAAmB,EAAE,CAAC;CACjC;AAED,mCAAmC;AACnC,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,mCAAmC;AACnC,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,8CAA8C;AAC9C,MAAM,WAAW,4BAA4B;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
|
1
|
+
{"version":3,"file":"profile-types.d.ts","sourceRoot":"","sources":["../../../src/api/services/profile-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini-token-refresh.d.ts","sourceRoot":"","sources":["../../../src/cliproxy/auth/gemini-token-refresh.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"gemini-token-refresh.d.ts","sourceRoot":"","sources":["../../../src/cliproxy/auth/gemini-token-refresh.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAsEH;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AA+ND;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAUrE;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACpE,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC,CAkED;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,UAAQ,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC;IACT,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAwBD"}
|
|
@@ -40,21 +40,15 @@ const os = __importStar(require("os"));
|
|
|
40
40
|
const config_generator_1 = require("../config-generator");
|
|
41
41
|
const account_manager_1 = require("../account-manager");
|
|
42
42
|
const token_manager_1 = require("./token-manager");
|
|
43
|
-
/**
|
|
44
|
-
* Gemini OAuth credentials - PUBLIC from official Gemini CLI source code
|
|
45
|
-
* These are not secrets - they're public OAuth client credentials that Google
|
|
46
|
-
* distributes with their official applications. See:
|
|
47
|
-
* https://github.com/google/generative-ai-python (Gemini CLI source)
|
|
48
|
-
*
|
|
49
|
-
* GitHub secret scanning may flag these, but they are intentionally hardcoded
|
|
50
|
-
* as they're required for OAuth token refresh and are publicly documented.
|
|
51
|
-
*/
|
|
52
|
-
const GEMINI_CLIENT_ID = '681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com';
|
|
53
|
-
const GEMINI_CLIENT_SECRET = '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';
|
|
54
43
|
/** Google OAuth token endpoint */
|
|
55
44
|
const GOOGLE_TOKEN_URL = 'https://oauth2.googleapis.com/token';
|
|
56
45
|
/** Refresh tokens 5 minutes before expiry */
|
|
57
46
|
const REFRESH_LEAD_TIME_MS = 5 * 60 * 1000;
|
|
47
|
+
const GEMINI_CLIENT_ID_ENV_KEYS = ['CCS_GEMINI_OAUTH_CLIENT_ID', 'OPENCLAW_GEMINI_OAUTH_CLIENT_ID'];
|
|
48
|
+
const GEMINI_CLIENT_SECRET_ENV_KEYS = [
|
|
49
|
+
'CCS_GEMINI_OAUTH_CLIENT_SECRET',
|
|
50
|
+
'OPENCLAW_GEMINI_OAUTH_CLIENT_SECRET',
|
|
51
|
+
];
|
|
58
52
|
/**
|
|
59
53
|
* Get path to Gemini OAuth credentials file
|
|
60
54
|
*/
|
|
@@ -71,6 +65,9 @@ function mapCliproxyToGeminiCreds(cliproxy) {
|
|
|
71
65
|
refresh_token: cliproxy.token.refresh_token,
|
|
72
66
|
expiry_date: cliproxy.token.expiry,
|
|
73
67
|
token_type: 'Bearer',
|
|
68
|
+
client_id: cliproxy.token.client_id,
|
|
69
|
+
client_secret: cliproxy.token.client_secret,
|
|
70
|
+
token_uri: cliproxy.token.token_uri,
|
|
74
71
|
};
|
|
75
72
|
}
|
|
76
73
|
/**
|
|
@@ -87,6 +84,32 @@ function isValidCliproxyToken(data) {
|
|
|
87
84
|
const token = obj.token;
|
|
88
85
|
return typeof token.access_token === 'string';
|
|
89
86
|
}
|
|
87
|
+
function getFirstEnvValue(keys) {
|
|
88
|
+
for (const key of keys) {
|
|
89
|
+
const value = process.env[key]?.trim();
|
|
90
|
+
if (value) {
|
|
91
|
+
return value;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
function resolveGeminiRefreshCredentials(creds) {
|
|
97
|
+
const clientId = creds.client_id?.trim() || getFirstEnvValue(GEMINI_CLIENT_ID_ENV_KEYS);
|
|
98
|
+
const clientSecret = creds.client_secret?.trim() || getFirstEnvValue(GEMINI_CLIENT_SECRET_ENV_KEYS);
|
|
99
|
+
if (!clientId || !clientSecret) {
|
|
100
|
+
return {
|
|
101
|
+
error: 'Gemini token refresh unavailable: missing OAuth client credentials in the token file. ' +
|
|
102
|
+
'Re-authenticate with CLIProxy or set CCS_GEMINI_OAUTH_CLIENT_ID and CCS_GEMINI_OAUTH_CLIENT_SECRET.',
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
return {
|
|
106
|
+
credentials: {
|
|
107
|
+
clientId,
|
|
108
|
+
clientSecret,
|
|
109
|
+
tokenUrl: creds.token_uri?.trim() || GOOGLE_TOKEN_URL,
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
}
|
|
90
113
|
/**
|
|
91
114
|
* Read Gemini token from CLIProxy auth directory
|
|
92
115
|
* Returns credentials with source path, or null if no valid token found
|
|
@@ -263,10 +286,15 @@ async function refreshGeminiToken(accountId) {
|
|
|
263
286
|
return { success: false, error: 'No refresh token available' };
|
|
264
287
|
}
|
|
265
288
|
const { creds, sourcePath } = result;
|
|
289
|
+
const resolvedCredentials = resolveGeminiRefreshCredentials(creds);
|
|
290
|
+
if (!resolvedCredentials.credentials) {
|
|
291
|
+
return { success: false, error: resolvedCredentials.error };
|
|
292
|
+
}
|
|
293
|
+
const { clientId, clientSecret, tokenUrl } = resolvedCredentials.credentials;
|
|
266
294
|
const controller = new AbortController();
|
|
267
295
|
const timeoutId = setTimeout(() => controller.abort(), 10000);
|
|
268
296
|
try {
|
|
269
|
-
const response = await fetch(
|
|
297
|
+
const response = await fetch(tokenUrl, {
|
|
270
298
|
method: 'POST',
|
|
271
299
|
signal: controller.signal,
|
|
272
300
|
headers: {
|
|
@@ -275,8 +303,8 @@ async function refreshGeminiToken(accountId) {
|
|
|
275
303
|
body: new URLSearchParams({
|
|
276
304
|
grant_type: 'refresh_token',
|
|
277
305
|
refresh_token: creds.refresh_token, // Already validated above
|
|
278
|
-
client_id:
|
|
279
|
-
client_secret:
|
|
306
|
+
client_id: clientId,
|
|
307
|
+
client_secret: clientSecret,
|
|
280
308
|
}).toString(),
|
|
281
309
|
});
|
|
282
310
|
clearTimeout(timeoutId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini-token-refresh.js","sourceRoot":"","sources":["../../../src/cliproxy/auth/gemini-token-refresh.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AACzB,0DAAyD;AACzD,wDAA4E;AAC5E,mDAAyD;AAEzD
|
|
1
|
+
{"version":3,"file":"gemini-token-refresh.js","sourceRoot":"","sources":["../../../src/cliproxy/auth/gemini-token-refresh.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AACzB,0DAAyD;AACzD,wDAA4E;AAC5E,mDAAyD;AAEzD,kCAAkC;AAClC,MAAM,gBAAgB,GAAG,qCAAqC,CAAC;AAE/D,6CAA6C;AAC7C,MAAM,oBAAoB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAE3C,MAAM,yBAAyB,GAAG,CAAC,4BAA4B,EAAE,iCAAiC,CAAC,CAAC;AACpG,MAAM,6BAA6B,GAAG;IACpC,gCAAgC;IAChC,qCAAqC;CACtC,CAAC;AAmDF;;GAEG;AACH,SAAgB,kBAAkB;IAChC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC;AAChE,CAAC;AAFD,gDAEC;AAED;;GAEG;AACH,SAAS,wBAAwB,CAAC,QAA6B;IAC7D,OAAO;QACL,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,YAAY;QACzC,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,aAAa;QAC3C,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM;QAClC,UAAU,EAAE,QAAQ;QACpB,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,SAAS;QACnC,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,aAAa;QAC3C,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,SAAS;KACpC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,IAAa;IACzC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC5D,MAAM,GAAG,GAAG,IAA+B,CAAC;IAC5C,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACtE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAgC,CAAC;IACnD,OAAO,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,CAAC;AAChD,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAuB;IAC/C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;QACvC,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,+BAA+B,CAAC,KAAuB;IAI9D,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,gBAAgB,CAAC,yBAAyB,CAAC,CAAC;IACxF,MAAM,YAAY,GAChB,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,gBAAgB,CAAC,6BAA6B,CAAC,CAAC;IAEjF,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;QAC/B,OAAO;YACL,KAAK,EACH,wFAAwF;gBACxF,qGAAqG;SACxG,CAAC;IACJ,CAAC;IAED,OAAO;QACL,WAAW,EAAE;YACX,QAAQ;YACR,YAAY;YACZ,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,gBAAgB;SACtD;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,uBAAuB,CAAC,SAAkB;IACjD,MAAM,OAAO,GAAG,IAAA,qCAAkB,EAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzC,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,MAAM,mBAAmB,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAA,qCAAmB,EAAC,QAAQ,CAAC,CAAC;IAE/C,4DAA4D;IAC5D,IAAI,mBAAmB,EAAE,CAAC;QACxB,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,mBAAmB,CAAC,CAAC;QACrF,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzB,2CAA2C;QAC3C,MAAM,cAAc,GAAG,IAAA,mCAAiB,EAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,cAAc,EAAE,CAAC;YACnB,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;YACzD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;gBAAE,SAAS,GAAG,IAAI,CAAC;QAClD,CAAC;QAED,+CAA+C;QAC/C,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACtD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;gBAAE,SAAS,GAAG,IAAI,CAAC;QAClD,CAAC;QAED,uDAAuD;QACvD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;gBACzE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;oBAC1C,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,IAAA,sCAAsB,EAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;wBAC7E,SAAS,GAAG,QAAQ,CAAC;wBACrB,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,kDAAkD;gBAClD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACnD,MAAM,IAAI,GAAY,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAE1C,wDAAwD;QACxD,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,OAAO;gBACL,KAAK,EAAE,wBAAwB,CAAC,IAAI,CAAC;gBACrC,UAAU,EAAE,SAAS;aACtB,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,SAAkB;IACzC,4DAA4D;IAC5D,MAAM,cAAc,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC;IAC1D,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,uEAAuE;IACvE,0DAA0D;IAC1D,IAAI,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+CAA+C;IAC/C,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;IACvC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACnD,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAqB;YAC9C,UAAU,EAAE,SAAS;SACtB,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,wBAAwB,CAAC,SAAiB,EAAE,KAAuB;IAC1E,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG;YACd,GAAG,QAAQ;YACX,KAAK,EAAE;gBACL,GAAG,QAAQ,CAAC,KAAK;gBACjB,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,aAAa,EAAE,KAAK,CAAC,aAAa;gBAClC,MAAM,EAAE,KAAK,CAAC,WAAW;aAC1B;SACF,CAAC;QACF,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/E,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B,CAAC;IAC5E,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,KAAuB,EAAE,UAAkB;IACnE,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAC;IAE7C,sEAAsE;IACtE,IAAI,UAAU,KAAK,eAAe,EAAE,CAAC;QACnC,OAAO,wBAAwB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,kDAAkD;IAClD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC1C,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,EAAE,CAAC,aAAa,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACnF,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B,CAAC;IAC5E,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,yBAAyB,CAAC,SAAkB;IAC1D,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC,CAAC,wBAAwB;IACvC,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,CAAC,gCAAgC;IAChD,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACxD,OAAO,SAAS,GAAG,oBAAoB,CAAC;AAC1C,CAAC;AAVD,8DAUC;AAED;;;;GAIG;AACI,KAAK,UAAU,kBAAkB,CAAC,SAAkB;IAKzD,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QAC3C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC;IACjE,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IACrC,MAAM,mBAAmB,GAAG,+BAA+B,CAAC,KAAK,CAAC,CAAC;IACnE,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,CAAC;QACrC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,CAAC,KAAK,EAAE,CAAC;IAC9D,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,mBAAmB,CAAC,WAAW,CAAC;IAC7E,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;IAE9D,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;YACrC,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,OAAO,EAAE;gBACP,cAAc,EAAE,mCAAmC;aACpD;YACD,IAAI,EAAE,IAAI,eAAe,CAAC;gBACxB,UAAU,EAAE,eAAe;gBAC3B,aAAa,EAAE,KAAK,CAAC,aAAuB,EAAE,0BAA0B;gBACxE,SAAS,EAAE,QAAQ;gBACnB,aAAa,EAAE,YAAY;aAC5B,CAAC,CAAC,QAAQ,EAAE;SACd,CAAC,CAAC;QAEH,YAAY,CAAC,SAAS,CAAC,CAAC;QAExB,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAyB,CAAC;QAE7D,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC/B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,KAAK,IAAI,gBAAgB,QAAQ,CAAC,MAAM,EAAE;aACjF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC;QAClE,CAAC;QAED,yCAAyC;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC;QAChE,MAAM,YAAY,GAAqB;YACrC,GAAG,KAAK;YACR,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,WAAW,EAAE,SAAS;SACvB,CAAC;QACF,MAAM,UAAU,GAAG,gBAAgB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAC9D,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,uCAAuC,UAAU,EAAE,EAAE,CAAC;QACxF,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,YAAY,CAAC,SAAS,CAAC,CAAC;QACxB,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACtD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;QAC5D,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;IACzF,CAAC;AACH,CAAC;AAtED,gDAsEC;AAED;;;;;GAKG;AACI,KAAK,UAAU,sBAAsB,CAC1C,OAAO,GAAG,KAAK,EACf,SAAkB;IAMlB,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QAC1C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC;IAClF,CAAC;IAED,IAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC3C,CAAC;IAED,qDAAqD;IACrD,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC1D,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;QAC1B,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,CAAC;AACxE,CAAC;AA/BD,wDA+BC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binary-manager.d.ts","sourceRoot":"","sources":["../../src/cliproxy/binary-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAK1D,OAAO,EACL,iBAAiB,EAMjB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EAGjB,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAqC/C;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,OAAO,CAAkB;gBAErB,MAAM,GAAE,OAAO,CAAC,mBAAmB,CAAM,EAAE,OAAO,CAAC,EAAE,eAAe;IAMhF,2EAA2E;IACrE,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAIrC,2EAA2E;IACrE,eAAe,IAAI,OAAO,CAAC,iBAAiB,CAAC;IASnD,yCAAyC;IACzC,aAAa,IAAI,MAAM;IAIvB,6BAA6B;IAC7B,iBAAiB,IAAI,OAAO;IAI5B,mCAAmC;IAC7B,aAAa,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAIjD,+CAA+C;IAC/C,YAAY,IAAI,IAAI;CAGrB;AAED,kDAAkD;AAClD,wBAAsB,oBAAoB,CAAC,OAAO,UAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAmB3E;AAED,+CAA+C;AAC/C,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAGtE;AAED,kDAAkD;AAClD,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,MAAM,CAGjE;AAED,2DAA2D;AAC3D,wBAAgB,2BAA2B,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,MAAM,CAM7E;AAED,gDAAgD;AAChD,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,OAAO,UAAQ,EACf,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"binary-manager.d.ts","sourceRoot":"","sources":["../../src/cliproxy/binary-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAK1D,OAAO,EACL,iBAAiB,EAMjB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EAGjB,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAqC/C;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,OAAO,CAAkB;gBAErB,MAAM,GAAE,OAAO,CAAC,mBAAmB,CAAM,EAAE,OAAO,CAAC,EAAE,eAAe;IAMhF,2EAA2E;IACrE,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAIrC,2EAA2E;IACrE,eAAe,IAAI,OAAO,CAAC,iBAAiB,CAAC;IASnD,yCAAyC;IACzC,aAAa,IAAI,MAAM;IAIvB,6BAA6B;IAC7B,iBAAiB,IAAI,OAAO;IAI5B,mCAAmC;IAC7B,aAAa,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAIjD,+CAA+C;IAC/C,YAAY,IAAI,IAAI;CAGrB;AAED,kDAAkD;AAClD,wBAAsB,oBAAoB,CAAC,OAAO,UAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAmB3E;AAED,+CAA+C;AAC/C,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAGtE;AAED,kDAAkD;AAClD,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,MAAM,CAGjE;AAED,2DAA2D;AAC3D,wBAAgB,2BAA2B,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,MAAM,CAM7E;AAED,gDAAgD;AAChD,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,OAAO,UAAQ,EACf,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,IAAI,CAAC,CA+Bf;AAED,2DAA2D;AAC3D,wBAAsB,0BAA0B,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAI3F;AAED,2CAA2C;AAC3C,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAElB,OAAO,EAAE,eAAe,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IAErB,QAAQ,EAAE,OAAO,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,2CAA2C;AAC3C,wBAAsB,mBAAmB,CACvC,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,yBAAyB,CAAC,CAqBpC;AAGD,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,GAClB,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -151,22 +151,21 @@ exports.getInstalledCliproxyVersion = getInstalledCliproxyVersion;
|
|
|
151
151
|
async function installCliproxyVersion(version, verbose = false, backend) {
|
|
152
152
|
const effectiveBackend = backend ?? getConfiguredBackend();
|
|
153
153
|
const manager = new BinaryManager({ version, verbose, forceVersion: true }, effectiveBackend);
|
|
154
|
-
//
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
else if (verbose && result.error) {
|
|
167
|
-
console.log((0, ui_1.warn)(`Could not stop proxy: ${result.error}`));
|
|
154
|
+
// Always attempt a best-effort stop first so we also catch untracked proxies
|
|
155
|
+
// that are running without a session lock.
|
|
156
|
+
if (verbose)
|
|
157
|
+
console.log((0, ui_1.info)('Stopping running CLIProxy before update...'));
|
|
158
|
+
const result = await (0, proxy_lifecycle_service_1.stopProxy)();
|
|
159
|
+
if (result.stopped) {
|
|
160
|
+
// Wait for port to be fully released
|
|
161
|
+
const portFree = await (0, port_utils_1.waitForPortFree)(config_generator_1.CLIPROXY_DEFAULT_PORT, 5000);
|
|
162
|
+
if (!portFree && verbose) {
|
|
163
|
+
console.log((0, ui_1.warn)('Port did not free up in time, proceeding anyway...'));
|
|
168
164
|
}
|
|
169
165
|
}
|
|
166
|
+
else if (verbose && result.error && result.error !== 'No active CLIProxy session found') {
|
|
167
|
+
console.log((0, ui_1.warn)(`Could not stop proxy: ${result.error}`));
|
|
168
|
+
}
|
|
170
169
|
if (manager.isBinaryInstalled()) {
|
|
171
170
|
const label = effectiveBackend === 'plus' ? 'CLIProxy Plus' : 'CLIProxy';
|
|
172
171
|
if (verbose)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binary-manager.js","sourceRoot":"","sources":["../../src/cliproxy/binary-manager.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,oCAAyC;AACzC,yDAAsE;AAEtE,2DAAmG;AACnG,gFAA+
|
|
1
|
+
{"version":3,"file":"binary-manager.js","sourceRoot":"","sources":["../../src/cliproxy/binary-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quota-fetcher-codex.d.ts","sourceRoot":"","sources":["../../src/cliproxy/quota-fetcher-codex.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"quota-fetcher-codex.d.ts","sourceRoot":"","sources":["../../src/cliproxy/quota-fetcher-codex.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAc/F,+CAA+C;AAC/C,UAAU,aAAa;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,iCAAiC;AACjC,UAAU,kBAAkB;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,sBAAsB,CAAC,EAAE,oBAAoB,CAAC;IAC9C,mBAAmB,CAAC,EAAE,oBAAoB,CAAC;CAC5C;AAED,iCAAiC;AACjC,UAAU,oBAAoB;IAC5B,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,aAAa,CAAC,EAAE,eAAe,CAAC;IAChC,gBAAgB,CAAC,EAAE,eAAe,CAAC;IACnC,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED,6BAA6B;AAC7B,UAAU,eAAe;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAiCD,iBAAS,2BAA2B,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,MAAM,EAAE,CAM1E;AAQD;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,qBAAqB,CA8D7F;AAED;;GAEG;AACH,iBAAS,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAkDlE;AAED;;;GAGG;AACH,iBAAS,sBAAsB,CAAC,OAAO,EAAE,kBAAkB,GAAG,gBAAgB,EAAE,CAmD/E;AA6ND;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,OAAO,UAAQ,GACd,OAAO,CAAC,gBAAgB,CAAC,CA4I3B;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,UAAQ,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,gBAAgB,CAAA;CAAE,EAAE,CAAC,CAezD;AAGD,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,CAAC"}
|
|
@@ -39,6 +39,7 @@ const auth_utils_1 = require("./auth-utils");
|
|
|
39
39
|
const CODEX_API_BASE = 'https://chatgpt.com/backend-api';
|
|
40
40
|
const CODEX_QUOTA_TIMEOUT_MS = 12000;
|
|
41
41
|
const CODEX_QUOTA_MAX_ATTEMPTS = 2;
|
|
42
|
+
const CODEX_ERROR_DETAIL_MAX_LENGTH = 240;
|
|
42
43
|
/**
|
|
43
44
|
* User agent matching Codex CLI for API compatibility.
|
|
44
45
|
* Update when Codex CLI releases new versions to maintain compatibility.
|
|
@@ -234,6 +235,180 @@ function buildCodexQuotaWindows(payload) {
|
|
|
234
235
|
return windows;
|
|
235
236
|
}
|
|
236
237
|
exports.buildCodexQuotaWindows = buildCodexQuotaWindows;
|
|
238
|
+
function buildCodexFailureResult(accountId, options) {
|
|
239
|
+
return {
|
|
240
|
+
success: false,
|
|
241
|
+
windows: [],
|
|
242
|
+
planType: null,
|
|
243
|
+
lastUpdated: Date.now(),
|
|
244
|
+
accountId,
|
|
245
|
+
error: options.error,
|
|
246
|
+
httpStatus: options.httpStatus,
|
|
247
|
+
errorCode: options.errorCode,
|
|
248
|
+
errorDetail: options.errorDetail,
|
|
249
|
+
actionHint: options.actionHint,
|
|
250
|
+
retryable: options.retryable,
|
|
251
|
+
needsReauth: options.needsReauth,
|
|
252
|
+
isForbidden: options.isForbidden,
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
function sanitizeCodexErrorDetail(bodyText) {
|
|
256
|
+
const trimmed = bodyText.trim();
|
|
257
|
+
if (!trimmed) {
|
|
258
|
+
return undefined;
|
|
259
|
+
}
|
|
260
|
+
if (/^<!doctype html/i.test(trimmed) || /^<html/i.test(trimmed) || /^<[^>]+>/.test(trimmed)) {
|
|
261
|
+
return '[HTML error response omitted]';
|
|
262
|
+
}
|
|
263
|
+
let sanitized = trimmed
|
|
264
|
+
.replace(/"(access[_-]?token|refresh[_-]?token|authorization|cookie|set-cookie|api[_-]?key|session[_-]?token|token)"\s*:\s*"[^"]*"/gi, '"$1":"[redacted]"')
|
|
265
|
+
.replace(/Bearer\s+[A-Za-z0-9._-]+/g, 'Bearer [redacted]')
|
|
266
|
+
.replace(/\s+/g, ' ');
|
|
267
|
+
if (sanitized.length > CODEX_ERROR_DETAIL_MAX_LENGTH) {
|
|
268
|
+
sanitized = `${sanitized.slice(0, CODEX_ERROR_DETAIL_MAX_LENGTH - 14)}...[truncated]`;
|
|
269
|
+
}
|
|
270
|
+
return sanitized;
|
|
271
|
+
}
|
|
272
|
+
function parseCodexErrorBody(bodyText) {
|
|
273
|
+
const trimmed = bodyText.trim();
|
|
274
|
+
if (!trimmed) {
|
|
275
|
+
return {};
|
|
276
|
+
}
|
|
277
|
+
const sanitizedDetail = sanitizeCodexErrorDetail(trimmed);
|
|
278
|
+
try {
|
|
279
|
+
const parsed = JSON.parse(trimmed);
|
|
280
|
+
const topLevelMessage = typeof parsed.message === 'string'
|
|
281
|
+
? parsed.message
|
|
282
|
+
: typeof parsed.detail === 'string'
|
|
283
|
+
? parsed.detail
|
|
284
|
+
: undefined;
|
|
285
|
+
const topLevelCode = typeof parsed.code === 'string' ? parsed.code : undefined;
|
|
286
|
+
if (parsed.error && typeof parsed.error === 'object') {
|
|
287
|
+
const error = parsed.error;
|
|
288
|
+
const errorCode = typeof error.code === 'string' ? error.code : topLevelCode;
|
|
289
|
+
const errorMessage = typeof error.message === 'string'
|
|
290
|
+
? error.message
|
|
291
|
+
: typeof error.error === 'string'
|
|
292
|
+
? error.error
|
|
293
|
+
: topLevelMessage;
|
|
294
|
+
return {
|
|
295
|
+
errorCode,
|
|
296
|
+
errorDetail: sanitizedDetail,
|
|
297
|
+
message: errorMessage,
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
if (parsed.detail && typeof parsed.detail === 'object') {
|
|
301
|
+
const detail = parsed.detail;
|
|
302
|
+
return {
|
|
303
|
+
errorCode: typeof detail.code === 'string'
|
|
304
|
+
? detail.code
|
|
305
|
+
: typeof detail.type === 'string'
|
|
306
|
+
? detail.type
|
|
307
|
+
: topLevelCode,
|
|
308
|
+
errorDetail: sanitizedDetail,
|
|
309
|
+
message: typeof detail.message === 'string'
|
|
310
|
+
? detail.message
|
|
311
|
+
: typeof detail.error === 'string'
|
|
312
|
+
? detail.error
|
|
313
|
+
: topLevelMessage,
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
return {
|
|
317
|
+
errorCode: topLevelCode,
|
|
318
|
+
errorDetail: sanitizedDetail,
|
|
319
|
+
message: topLevelMessage,
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
catch {
|
|
323
|
+
return {
|
|
324
|
+
errorDetail: sanitizedDetail,
|
|
325
|
+
message: trimmed,
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
function buildCodexHttpFailureResult(accountId, status, bodyText) {
|
|
330
|
+
const parsed = parseCodexErrorBody(bodyText);
|
|
331
|
+
if (status === 401) {
|
|
332
|
+
return buildCodexFailureResult(accountId, {
|
|
333
|
+
error: 'Token expired or invalid',
|
|
334
|
+
httpStatus: 401,
|
|
335
|
+
errorCode: parsed.errorCode || 'reauth_required',
|
|
336
|
+
errorDetail: parsed.errorDetail,
|
|
337
|
+
actionHint: 'Run ccs cliproxy auth codex to re-authenticate this account.',
|
|
338
|
+
needsReauth: true,
|
|
339
|
+
retryable: false,
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
if (status === 402) {
|
|
343
|
+
if (parsed.errorCode === 'deactivated_workspace') {
|
|
344
|
+
return buildCodexFailureResult(accountId, {
|
|
345
|
+
error: 'Workspace deactivated (HTTP 402)',
|
|
346
|
+
httpStatus: 402,
|
|
347
|
+
errorCode: parsed.errorCode,
|
|
348
|
+
errorDetail: parsed.errorDetail,
|
|
349
|
+
actionHint: 'Remove and re-add this account from an active ChatGPT workspace before retrying.',
|
|
350
|
+
retryable: false,
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
return buildCodexFailureResult(accountId, {
|
|
354
|
+
error: parsed.message || 'Payment or workspace access required (HTTP 402)',
|
|
355
|
+
httpStatus: 402,
|
|
356
|
+
errorCode: parsed.errorCode || 'payment_required',
|
|
357
|
+
errorDetail: parsed.errorDetail,
|
|
358
|
+
actionHint: 'Confirm the ChatGPT workspace/subscription is active, then retry.',
|
|
359
|
+
retryable: false,
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
if (status === 403) {
|
|
363
|
+
return buildCodexFailureResult(accountId, {
|
|
364
|
+
error: 'Quota API access forbidden (HTTP 403)',
|
|
365
|
+
httpStatus: 403,
|
|
366
|
+
errorCode: parsed.errorCode || 'quota_api_forbidden',
|
|
367
|
+
errorDetail: parsed.errorDetail,
|
|
368
|
+
actionHint: 'This account cannot access the Codex quota endpoint.',
|
|
369
|
+
isForbidden: true,
|
|
370
|
+
retryable: false,
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
if (status === 404) {
|
|
374
|
+
return buildCodexFailureResult(accountId, {
|
|
375
|
+
error: 'Codex quota endpoint not found (HTTP 404)',
|
|
376
|
+
httpStatus: 404,
|
|
377
|
+
errorCode: parsed.errorCode || 'quota_endpoint_not_found',
|
|
378
|
+
errorDetail: parsed.errorDetail,
|
|
379
|
+
actionHint: 'The upstream Codex quota endpoint changed or is unavailable.',
|
|
380
|
+
retryable: false,
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
if (status === 429) {
|
|
384
|
+
return buildCodexFailureResult(accountId, {
|
|
385
|
+
error: 'Rate limited - try again later',
|
|
386
|
+
httpStatus: 429,
|
|
387
|
+
errorCode: parsed.errorCode || 'rate_limited',
|
|
388
|
+
errorDetail: parsed.errorDetail,
|
|
389
|
+
actionHint: 'Retry after a short delay.',
|
|
390
|
+
retryable: true,
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
if (status >= 500) {
|
|
394
|
+
return buildCodexFailureResult(accountId, {
|
|
395
|
+
error: `Codex quota service unavailable (HTTP ${status})`,
|
|
396
|
+
httpStatus: status,
|
|
397
|
+
errorCode: parsed.errorCode || 'provider_unavailable',
|
|
398
|
+
errorDetail: parsed.errorDetail,
|
|
399
|
+
actionHint: 'Retry later. This looks like a temporary upstream problem.',
|
|
400
|
+
retryable: true,
|
|
401
|
+
});
|
|
402
|
+
}
|
|
403
|
+
return buildCodexFailureResult(accountId, {
|
|
404
|
+
error: parsed.message || `Codex quota request failed (HTTP ${status})`,
|
|
405
|
+
httpStatus: status,
|
|
406
|
+
errorCode: parsed.errorCode || 'unknown_upstream_error',
|
|
407
|
+
errorDetail: parsed.errorDetail,
|
|
408
|
+
actionHint: 'Inspect the upstream response details and retry if appropriate.',
|
|
409
|
+
retryable: false,
|
|
410
|
+
});
|
|
411
|
+
}
|
|
237
412
|
/**
|
|
238
413
|
* Fetch quota for a single Codex account
|
|
239
414
|
*
|
|
@@ -249,41 +424,35 @@ async function fetchCodexQuota(accountId, verbose = false) {
|
|
|
249
424
|
const error = 'Auth file not found for Codex account';
|
|
250
425
|
if (verbose)
|
|
251
426
|
console.error(`[!] Error: ${error}`);
|
|
252
|
-
return {
|
|
253
|
-
success: false,
|
|
254
|
-
windows: [],
|
|
255
|
-
planType: null,
|
|
256
|
-
lastUpdated: Date.now(),
|
|
427
|
+
return buildCodexFailureResult(accountId, {
|
|
257
428
|
error,
|
|
258
|
-
|
|
259
|
-
|
|
429
|
+
errorCode: 'auth_file_missing',
|
|
430
|
+
actionHint: 'Remove the stale account or authenticate again with ccs cliproxy auth codex.',
|
|
431
|
+
retryable: false,
|
|
432
|
+
});
|
|
260
433
|
}
|
|
261
434
|
if (authData.isExpired) {
|
|
262
435
|
const error = 'Token expired - re-authenticate with ccs cliproxy auth codex';
|
|
263
436
|
if (verbose)
|
|
264
437
|
console.error(`[!] Error: ${error}`);
|
|
265
|
-
return {
|
|
266
|
-
success: false,
|
|
267
|
-
windows: [],
|
|
268
|
-
planType: null,
|
|
269
|
-
lastUpdated: Date.now(),
|
|
438
|
+
return buildCodexFailureResult(accountId, {
|
|
270
439
|
error,
|
|
271
|
-
|
|
440
|
+
errorCode: 'token_expired',
|
|
441
|
+
actionHint: 'Run ccs cliproxy auth codex to refresh the token for this account.',
|
|
272
442
|
needsReauth: true,
|
|
273
|
-
|
|
443
|
+
retryable: false,
|
|
444
|
+
});
|
|
274
445
|
}
|
|
275
446
|
if (!authData.accountId) {
|
|
276
447
|
const error = 'Missing ChatGPT-Account-Id in auth file';
|
|
277
448
|
if (verbose)
|
|
278
449
|
console.error(`[!] Error: ${error}`);
|
|
279
|
-
return {
|
|
280
|
-
success: false,
|
|
281
|
-
windows: [],
|
|
282
|
-
planType: null,
|
|
283
|
-
lastUpdated: Date.now(),
|
|
450
|
+
return buildCodexFailureResult(accountId, {
|
|
284
451
|
error,
|
|
285
|
-
|
|
286
|
-
|
|
452
|
+
errorCode: 'missing_account_id',
|
|
453
|
+
actionHint: 'Remove and re-add this Codex account to refresh workspace metadata.',
|
|
454
|
+
retryable: false,
|
|
455
|
+
});
|
|
287
456
|
}
|
|
288
457
|
const url = `${CODEX_API_BASE}/wham/usage`;
|
|
289
458
|
let lastErrorMsg = 'Unknown error';
|
|
@@ -303,49 +472,9 @@ async function fetchCodexQuota(accountId, verbose = false) {
|
|
|
303
472
|
clearTimeout(timeoutId);
|
|
304
473
|
if (verbose)
|
|
305
474
|
console.error(`[i] Codex API status: ${response.status} (attempt ${attempt})`);
|
|
306
|
-
if (response.status === 401) {
|
|
307
|
-
return {
|
|
308
|
-
success: false,
|
|
309
|
-
windows: [],
|
|
310
|
-
planType: null,
|
|
311
|
-
lastUpdated: Date.now(),
|
|
312
|
-
error: 'Token expired or invalid',
|
|
313
|
-
accountId,
|
|
314
|
-
needsReauth: true,
|
|
315
|
-
};
|
|
316
|
-
}
|
|
317
|
-
if (response.status === 403) {
|
|
318
|
-
// 403 = account lacks API access (not same as quota exhausted)
|
|
319
|
-
// Keep success=false with isForbidden flag for UI to show distinct "403" badge
|
|
320
|
-
return {
|
|
321
|
-
success: false,
|
|
322
|
-
windows: [],
|
|
323
|
-
planType: null,
|
|
324
|
-
lastUpdated: Date.now(),
|
|
325
|
-
error: '403 Forbidden - No quota API access',
|
|
326
|
-
accountId,
|
|
327
|
-
isForbidden: true,
|
|
328
|
-
};
|
|
329
|
-
}
|
|
330
|
-
if (response.status === 429) {
|
|
331
|
-
return {
|
|
332
|
-
success: false,
|
|
333
|
-
windows: [],
|
|
334
|
-
planType: null,
|
|
335
|
-
lastUpdated: Date.now(),
|
|
336
|
-
error: 'Rate limited - try again later',
|
|
337
|
-
accountId,
|
|
338
|
-
};
|
|
339
|
-
}
|
|
340
475
|
if (!response.ok) {
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
windows: [],
|
|
344
|
-
planType: null,
|
|
345
|
-
lastUpdated: Date.now(),
|
|
346
|
-
error: `API error: ${response.status}`,
|
|
347
|
-
accountId,
|
|
348
|
-
};
|
|
476
|
+
const bodyText = await response.text();
|
|
477
|
+
return buildCodexHttpFailureResult(accountId, response.status, bodyText);
|
|
349
478
|
}
|
|
350
479
|
const data = (await response.json());
|
|
351
480
|
const windows = buildCodexQuotaWindows(data);
|
|
@@ -400,6 +529,11 @@ async function fetchCodexQuota(accountId, verbose = false) {
|
|
|
400
529
|
lastUpdated: Date.now(),
|
|
401
530
|
error: lastErrorMsg,
|
|
402
531
|
accountId,
|
|
532
|
+
errorCode: isAbortError ? 'network_timeout' : 'network_error',
|
|
533
|
+
actionHint: isAbortError
|
|
534
|
+
? 'Retry later. The Codex quota endpoint timed out.'
|
|
535
|
+
: 'Retry later or inspect network connectivity.',
|
|
536
|
+
retryable: true,
|
|
403
537
|
};
|
|
404
538
|
}
|
|
405
539
|
}
|
|
@@ -410,6 +544,8 @@ async function fetchCodexQuota(accountId, verbose = false) {
|
|
|
410
544
|
lastUpdated: Date.now(),
|
|
411
545
|
error: lastErrorMsg,
|
|
412
546
|
accountId,
|
|
547
|
+
errorCode: 'unknown_error',
|
|
548
|
+
retryable: true,
|
|
413
549
|
};
|
|
414
550
|
}
|
|
415
551
|
exports.fetchCodexQuota = fetchCodexQuota;
|