@mdrv/opencode-quota 262.0.0
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/LICENSE +21 -0
- package/README.md +189 -0
- package/bin/copilot-quota.ts +374 -0
- package/bin/glm-quota.ts +467 -0
- package/bin/install.js +439 -0
- package/bin/kimi-quota.ts +314 -0
- package/dist/bin/copilot-quota.d.ts +8 -0
- package/dist/bin/copilot-quota.d.ts.map +1 -0
- package/dist/bin/copilot-quota.js +298 -0
- package/dist/bin/copilot-quota.js.map +1 -0
- package/dist/bin/glm-quota.d.ts +8 -0
- package/dist/bin/glm-quota.d.ts.map +1 -0
- package/dist/bin/glm-quota.js +367 -0
- package/dist/bin/glm-quota.js.map +1 -0
- package/dist/bin/kimi-quota.d.ts +3 -0
- package/dist/bin/kimi-quota.d.ts.map +1 -0
- package/dist/bin/kimi-quota.js +241 -0
- package/dist/bin/kimi-quota.js.map +1 -0
- package/dist/src/api/client.d.ts +76 -0
- package/dist/src/api/client.d.ts.map +1 -0
- package/dist/src/api/client.js +203 -0
- package/dist/src/api/client.js.map +1 -0
- package/dist/src/api/endpoints.d.ts +22 -0
- package/dist/src/api/endpoints.d.ts.map +1 -0
- package/dist/src/api/endpoints.js +41 -0
- package/dist/src/api/endpoints.js.map +1 -0
- package/dist/src/api/platforms.d.ts +20 -0
- package/dist/src/api/platforms.d.ts.map +1 -0
- package/dist/src/api/platforms.js +38 -0
- package/dist/src/api/platforms.js.map +1 -0
- package/dist/src/index.d.ts +10 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +723 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/shared/logging.d.ts +7 -0
- package/dist/src/shared/logging.d.ts.map +1 -0
- package/dist/src/shared/logging.js +29 -0
- package/dist/src/shared/logging.js.map +1 -0
- package/dist/src/utils/box-constants.d.ts +43 -0
- package/dist/src/utils/box-constants.d.ts.map +1 -0
- package/dist/src/utils/box-constants.js +43 -0
- package/dist/src/utils/box-constants.js.map +1 -0
- package/dist/src/utils/date-formatter.d.ts +17 -0
- package/dist/src/utils/date-formatter.d.ts.map +1 -0
- package/dist/src/utils/date-formatter.js +33 -0
- package/dist/src/utils/date-formatter.js.map +1 -0
- package/dist/src/utils/error-formatter.d.ts +17 -0
- package/dist/src/utils/error-formatter.d.ts.map +1 -0
- package/dist/src/utils/error-formatter.js +60 -0
- package/dist/src/utils/error-formatter.js.map +1 -0
- package/dist/src/utils/progress-bar.d.ts +35 -0
- package/dist/src/utils/progress-bar.d.ts.map +1 -0
- package/dist/src/utils/progress-bar.js +43 -0
- package/dist/src/utils/progress-bar.js.map +1 -0
- package/dist/src/utils/reset-timer.d.ts +11 -0
- package/dist/src/utils/reset-timer.d.ts.map +1 -0
- package/dist/src/utils/reset-timer.js +32 -0
- package/dist/src/utils/reset-timer.js.map +1 -0
- package/dist/src/utils/time-window.d.ts +30 -0
- package/dist/src/utils/time-window.d.ts.map +1 -0
- package/dist/src/utils/time-window.js +34 -0
- package/dist/src/utils/time-window.js.map +1 -0
- package/dist/tests/error-handling/api-errors.test.d.ts +7 -0
- package/dist/tests/error-handling/api-errors.test.d.ts.map +1 -0
- package/dist/tests/error-handling/api-errors.test.js +110 -0
- package/dist/tests/error-handling/api-errors.test.js.map +1 -0
- package/dist/tests/error-handling/auth-errors.test.d.ts +7 -0
- package/dist/tests/error-handling/auth-errors.test.d.ts.map +1 -0
- package/dist/tests/error-handling/auth-errors.test.js +110 -0
- package/dist/tests/error-handling/auth-errors.test.js.map +1 -0
- package/dist/tests/error-handling/network-errors.test.d.ts +7 -0
- package/dist/tests/error-handling/network-errors.test.d.ts.map +1 -0
- package/dist/tests/error-handling/network-errors.test.js +94 -0
- package/dist/tests/error-handling/network-errors.test.js.map +1 -0
- package/dist/tests/error-handling/parse-errors.test.d.ts +7 -0
- package/dist/tests/error-handling/parse-errors.test.d.ts.map +1 -0
- package/dist/tests/error-handling/parse-errors.test.js +87 -0
- package/dist/tests/error-handling/parse-errors.test.js.map +1 -0
- package/dist/tests/error-handling/token-sanitization.test.d.ts +2 -0
- package/dist/tests/error-handling/token-sanitization.test.d.ts.map +1 -0
- package/dist/tests/error-handling/token-sanitization.test.js +59 -0
- package/dist/tests/error-handling/token-sanitization.test.js.map +1 -0
- package/dist/tests/functional/date-formatter.test.d.ts +5 -0
- package/dist/tests/functional/date-formatter.test.d.ts.map +1 -0
- package/dist/tests/functional/date-formatter.test.js +46 -0
- package/dist/tests/functional/date-formatter.test.js.map +1 -0
- package/dist/tests/functional/progress-bar.test.d.ts +5 -0
- package/dist/tests/functional/progress-bar.test.d.ts.map +1 -0
- package/dist/tests/functional/progress-bar.test.js +82 -0
- package/dist/tests/functional/progress-bar.test.js.map +1 -0
- package/dist/tests/functional/reset-timer.test.d.ts +6 -0
- package/dist/tests/functional/reset-timer.test.d.ts.map +1 -0
- package/dist/tests/functional/reset-timer.test.js +67 -0
- package/dist/tests/functional/reset-timer.test.js.map +1 -0
- package/dist/tests/functional/time-window.test.d.ts +5 -0
- package/dist/tests/functional/time-window.test.d.ts.map +1 -0
- package/dist/tests/functional/time-window.test.js +46 -0
- package/dist/tests/functional/time-window.test.js.map +1 -0
- package/dist/tests/integration/box-alignment.test.d.ts +8 -0
- package/dist/tests/integration/box-alignment.test.d.ts.map +1 -0
- package/dist/tests/integration/box-alignment.test.js +238 -0
- package/dist/tests/integration/box-alignment.test.js.map +1 -0
- package/dist/tests/integration/error-handling.test.d.ts +2 -0
- package/dist/tests/integration/error-handling.test.d.ts.map +1 -0
- package/dist/tests/integration/error-handling.test.js +36 -0
- package/dist/tests/integration/error-handling.test.js.map +1 -0
- package/dist/tests/integration/installer-config.test.d.ts +2 -0
- package/dist/tests/integration/installer-config.test.d.ts.map +1 -0
- package/dist/tests/integration/installer-config.test.js +65 -0
- package/dist/tests/integration/installer-config.test.js.map +1 -0
- package/dist/tests/integration/plugin-catch-block.test.d.ts +2 -0
- package/dist/tests/integration/plugin-catch-block.test.d.ts.map +1 -0
- package/dist/tests/integration/plugin-catch-block.test.js +134 -0
- package/dist/tests/integration/plugin-catch-block.test.js.map +1 -0
- package/dist/tests/integration/reset-time-display.test.d.ts +6 -0
- package/dist/tests/integration/reset-time-display.test.d.ts.map +1 -0
- package/dist/tests/integration/reset-time-display.test.js +138 -0
- package/dist/tests/integration/reset-time-display.test.js.map +1 -0
- package/dist/tests/module/http-client.test.d.ts +2 -0
- package/dist/tests/module/http-client.test.d.ts.map +1 -0
- package/dist/tests/module/http-client.test.js +49 -0
- package/dist/tests/module/http-client.test.js.map +1 -0
- package/dist/tests/module/platform-detection.test.d.ts +5 -0
- package/dist/tests/module/platform-detection.test.d.ts.map +1 -0
- package/dist/tests/module/platform-detection.test.js +48 -0
- package/dist/tests/module/platform-detection.test.js.map +1 -0
- package/integration/agents/copilot-quota-exec.md +20 -0
- package/integration/agents/glm-quota-exec.md +20 -0
- package/integration/command/copilot_quota.md +6 -0
- package/integration/command/glm_quota.md +6 -0
- package/integration/skills/copilot-quota/SKILL.md +11 -0
- package/integration/skills/glm-quota/SKILL.md +11 -0
- package/package.json +69 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP client module
|
|
3
|
+
* Makes HTTPS requests to Z.ai API endpoints
|
|
4
|
+
*/
|
|
5
|
+
import { createBoxedError } from '../utils/error-formatter.js';
|
|
6
|
+
import type { Endpoints } from './endpoints.js';
|
|
7
|
+
/**
|
|
8
|
+
* API response type
|
|
9
|
+
*/
|
|
10
|
+
interface ApiResponse {
|
|
11
|
+
data?: Record<string, unknown>;
|
|
12
|
+
[key: string]: unknown;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Network error with code property
|
|
16
|
+
*/
|
|
17
|
+
interface NetworkError extends Error {
|
|
18
|
+
code?: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* HTTP request options
|
|
22
|
+
*/
|
|
23
|
+
interface RequestOptions {
|
|
24
|
+
url: string;
|
|
25
|
+
authToken: string;
|
|
26
|
+
queryParams?: string;
|
|
27
|
+
customHeaders?: Record<string, string>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Format network error with boxed message
|
|
31
|
+
* @param error - Network error object
|
|
32
|
+
* @param authToken - Auth token to sanitize from error messages
|
|
33
|
+
* @returns Formatted error with boxed message
|
|
34
|
+
*/
|
|
35
|
+
declare function formatNetworkError(error: NetworkError, authToken: string): Error;
|
|
36
|
+
/**
|
|
37
|
+
* Format authentication error with boxed message
|
|
38
|
+
* @param statusCode - HTTP status code (401, 403)
|
|
39
|
+
* @param responseBody - Response body from API
|
|
40
|
+
* @param authToken - Auth token to sanitize from error messages
|
|
41
|
+
* @returns Formatted error with boxed message
|
|
42
|
+
*/
|
|
43
|
+
declare function formatAuthError(statusCode: number, responseBody: string, authToken: string): Error;
|
|
44
|
+
/**
|
|
45
|
+
* Format API error with boxed message
|
|
46
|
+
* @param statusCode - HTTP status code (429, 500, etc.)
|
|
47
|
+
* @param responseBody - Response body from API
|
|
48
|
+
* @param authToken - Auth token to sanitize from error messages
|
|
49
|
+
* @returns Formatted error with boxed message
|
|
50
|
+
*/
|
|
51
|
+
declare function formatApiError(statusCode: number, responseBody: string, authToken: string): Error;
|
|
52
|
+
/**
|
|
53
|
+
* Format JSON parse error with boxed message
|
|
54
|
+
* @param responseBody - Response body that failed to parse
|
|
55
|
+
* @param authToken - Auth token to sanitize from error messages
|
|
56
|
+
* @returns Formatted error with boxed message
|
|
57
|
+
*/
|
|
58
|
+
declare function formatParseError(responseBody: string, authToken: string): Error;
|
|
59
|
+
/**
|
|
60
|
+
* Make HTTPS request to API endpoint
|
|
61
|
+
* @param options - Request options
|
|
62
|
+
* @returns Promise resolving to API response
|
|
63
|
+
*/
|
|
64
|
+
declare function makeRequest(options: RequestOptions): Promise<ApiResponse>;
|
|
65
|
+
/**
|
|
66
|
+
* Query a single endpoint
|
|
67
|
+
* @param endpoints - Endpoints configuration
|
|
68
|
+
* @param authToken - Authentication token
|
|
69
|
+
* @param endpointKey - Which endpoint to query ('modelUsage' | 'toolUsage' | 'quotaLimit')
|
|
70
|
+
* @param queryParams - Optional query parameters
|
|
71
|
+
* @returns Promise resolving to API response
|
|
72
|
+
*/
|
|
73
|
+
declare function queryEndpoint(endpoints: Endpoints, authToken: string, endpointKey: 'modelUsage' | 'toolUsage' | 'quotaLimit', queryParams?: string): Promise<ApiResponse>;
|
|
74
|
+
export type { ApiResponse };
|
|
75
|
+
export { createBoxedError, formatApiError, formatAuthError, formatNetworkError, formatParseError, makeRequest, queryEndpoint, };
|
|
76
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/api/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,gBAAgB,EAAiB,MAAM,6BAA6B,CAAA;AAC7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAuB/C;;GAEG;AACH,UAAU,WAAW;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACtB;AAED;;GAEG;AACH,UAAU,YAAa,SAAQ,KAAK;IACnC,IAAI,CAAC,EAAE,MAAM,CAAA;CACb;AAED;;GAEG;AACH,UAAU,cAAc;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACtC;AAED;;;;;GAKG;AACH,iBAAS,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,KAAK,CAgBzE;AAcD;;;;;;GAMG;AACH,iBAAS,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,KAAK,CAuB3F;AAED;;;;;;GAMG;AACH,iBAAS,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,KAAK,CAuB1F;AAED;;;;;GAKG;AACH,iBAAS,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,KAAK,CAiBxE;AAED;;;;GAIG;AACH,iBAAS,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,CAsElE;AAED;;;;;;;GAOG;AACH,iBAAe,aAAa,CAC3B,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,YAAY,GAAG,WAAW,GAAG,YAAY,EACtD,WAAW,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,WAAW,CAAC,CAGtB;AAED,YAAY,EAAE,WAAW,EAAE,CAAA;AAC3B,OAAO,EACN,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,aAAa,GACb,CAAA"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP client module
|
|
3
|
+
* Makes HTTPS requests to Z.ai API endpoints
|
|
4
|
+
*/
|
|
5
|
+
import * as https from 'node:https';
|
|
6
|
+
import { createBoxedError, sanitizeToken } from '../utils/error-formatter.js';
|
|
7
|
+
/**
|
|
8
|
+
* HTTP request timeout in milliseconds (10 seconds)
|
|
9
|
+
*/
|
|
10
|
+
const REQUEST_TIMEOUT_MS = 10000;
|
|
11
|
+
/**
|
|
12
|
+
* Maximum length for response body in parse errors before truncation
|
|
13
|
+
* Long response bodies are truncated to fit in boxed error format
|
|
14
|
+
*/
|
|
15
|
+
const MAX_PARSE_ERROR_BODY_LENGTH = 200;
|
|
16
|
+
const AUTH_401_DEFAULT_BODY = 'Unauthorized';
|
|
17
|
+
const AUTH_403_DEFAULT_BODY = 'Forbidden';
|
|
18
|
+
const API_429_DEFAULT_BODY = 'Too Many Requests';
|
|
19
|
+
const API_5XX_DEFAULT_BODIES = [
|
|
20
|
+
'Internal Server Error',
|
|
21
|
+
'Bad Gateway',
|
|
22
|
+
'Service Unavailable',
|
|
23
|
+
'Gateway Timeout',
|
|
24
|
+
];
|
|
25
|
+
/**
|
|
26
|
+
* Format network error with boxed message
|
|
27
|
+
* @param error - Network error object
|
|
28
|
+
* @param authToken - Auth token to sanitize from error messages
|
|
29
|
+
* @returns Formatted error with boxed message
|
|
30
|
+
*/
|
|
31
|
+
function formatNetworkError(error, authToken) {
|
|
32
|
+
const code = error.code;
|
|
33
|
+
let message = '';
|
|
34
|
+
if (code === 'ETIMEDOUT') {
|
|
35
|
+
message = createBoxedError('Request timed out. Please try again.');
|
|
36
|
+
}
|
|
37
|
+
else if (code === 'ECONNREFUSED') {
|
|
38
|
+
message = createBoxedError('Unable to connect to server.');
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
// Other network errors - sanitize token from original message
|
|
42
|
+
message = sanitizeToken(error.message, authToken);
|
|
43
|
+
}
|
|
44
|
+
const formattedError = new Error(message);
|
|
45
|
+
formattedError.code = code;
|
|
46
|
+
return formattedError;
|
|
47
|
+
}
|
|
48
|
+
function formatErrorWithDetails(baseMessage, sanitizedBody, ignoredBodies) {
|
|
49
|
+
if (sanitizedBody && !ignoredBodies.includes(sanitizedBody)) {
|
|
50
|
+
return createBoxedError(`${baseMessage} Details: ${sanitizedBody}`);
|
|
51
|
+
}
|
|
52
|
+
return createBoxedError(baseMessage);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Format authentication error with boxed message
|
|
56
|
+
* @param statusCode - HTTP status code (401, 403)
|
|
57
|
+
* @param responseBody - Response body from API
|
|
58
|
+
* @param authToken - Auth token to sanitize from error messages
|
|
59
|
+
* @returns Formatted error with boxed message
|
|
60
|
+
*/
|
|
61
|
+
function formatAuthError(statusCode, responseBody, authToken) {
|
|
62
|
+
// Sanitize response body first to prevent token exposure
|
|
63
|
+
const sanitizedBody = sanitizeToken(responseBody, authToken);
|
|
64
|
+
let message = '';
|
|
65
|
+
if (statusCode === 401) {
|
|
66
|
+
message = formatErrorWithDetails('Authentication failed. Please check your credentials.', sanitizedBody, [AUTH_401_DEFAULT_BODY]);
|
|
67
|
+
}
|
|
68
|
+
else if (statusCode === 403) {
|
|
69
|
+
message = formatErrorWithDetails("Access denied. You don't have permission.", sanitizedBody, [AUTH_403_DEFAULT_BODY]);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
// For other auth errors, use sanitized response body
|
|
73
|
+
message = createBoxedError(sanitizedBody);
|
|
74
|
+
}
|
|
75
|
+
return new Error(message);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Format API error with boxed message
|
|
79
|
+
* @param statusCode - HTTP status code (429, 500, etc.)
|
|
80
|
+
* @param responseBody - Response body from API
|
|
81
|
+
* @param authToken - Auth token to sanitize from error messages
|
|
82
|
+
* @returns Formatted error with boxed message
|
|
83
|
+
*/
|
|
84
|
+
function formatApiError(statusCode, responseBody, authToken) {
|
|
85
|
+
// Sanitize response body first to prevent token exposure
|
|
86
|
+
const sanitizedBody = sanitizeToken(responseBody, authToken);
|
|
87
|
+
let message = '';
|
|
88
|
+
if (statusCode === 429) {
|
|
89
|
+
message = formatErrorWithDetails('Too many requests. Please try again later.', sanitizedBody, [API_429_DEFAULT_BODY]);
|
|
90
|
+
}
|
|
91
|
+
else if (statusCode >= 500) {
|
|
92
|
+
message = formatErrorWithDetails('Server error. Please try again later.', sanitizedBody, API_5XX_DEFAULT_BODIES);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
// For other API errors, use sanitized response body
|
|
96
|
+
message = createBoxedError(sanitizedBody);
|
|
97
|
+
}
|
|
98
|
+
return new Error(message);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Format JSON parse error with boxed message
|
|
102
|
+
* @param responseBody - Response body that failed to parse
|
|
103
|
+
* @param authToken - Auth token to sanitize from error messages
|
|
104
|
+
* @returns Formatted error with boxed message
|
|
105
|
+
*/
|
|
106
|
+
function formatParseError(responseBody, authToken) {
|
|
107
|
+
// Sanitize response body first to prevent token exposure
|
|
108
|
+
const sanitizedBody = sanitizeToken(responseBody, authToken);
|
|
109
|
+
// Use simple message if body is empty
|
|
110
|
+
if (!sanitizedBody) {
|
|
111
|
+
return new Error(createBoxedError('Invalid JSON response. The server returned malformed data.'));
|
|
112
|
+
}
|
|
113
|
+
// Truncate extremely long response bodies to fit in boxed format
|
|
114
|
+
// createBoxedError will handle word wrapping across multiple lines
|
|
115
|
+
const bodyToDisplay = sanitizedBody.length > MAX_PARSE_ERROR_BODY_LENGTH
|
|
116
|
+
? `${sanitizedBody.substring(0, MAX_PARSE_ERROR_BODY_LENGTH)}...`
|
|
117
|
+
: sanitizedBody;
|
|
118
|
+
const message = createBoxedError(`Invalid JSON response. Details: ${bodyToDisplay}`);
|
|
119
|
+
return new Error(message);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Make HTTPS request to API endpoint
|
|
123
|
+
* @param options - Request options
|
|
124
|
+
* @returns Promise resolving to API response
|
|
125
|
+
*/
|
|
126
|
+
function makeRequest(options) {
|
|
127
|
+
return new Promise((resolve, reject) => {
|
|
128
|
+
const parsedUrl = new URL(options.url);
|
|
129
|
+
const fullPath = options.queryParams
|
|
130
|
+
? `${parsedUrl.pathname}?${options.queryParams}`
|
|
131
|
+
: parsedUrl.pathname;
|
|
132
|
+
const port = parsedUrl.port ? Number(parsedUrl.port) : 443;
|
|
133
|
+
const httpsOptions = {
|
|
134
|
+
hostname: parsedUrl.hostname,
|
|
135
|
+
port,
|
|
136
|
+
path: fullPath,
|
|
137
|
+
method: 'GET',
|
|
138
|
+
headers: options.customHeaders || {
|
|
139
|
+
'Authorization': options.authToken, // NO "Bearer" prefix
|
|
140
|
+
'Accept-Language': 'en-US,en',
|
|
141
|
+
'Content-Type': 'application/json',
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
const req = https.request(httpsOptions, (res) => {
|
|
145
|
+
let data = '';
|
|
146
|
+
res.on('data', (chunk) => {
|
|
147
|
+
data += chunk;
|
|
148
|
+
});
|
|
149
|
+
res.on('end', () => {
|
|
150
|
+
if (res.statusCode !== 200) {
|
|
151
|
+
// Use appropriate error formatter based on status code
|
|
152
|
+
const statusCode = res.statusCode;
|
|
153
|
+
if (statusCode === 401 || statusCode === 403) {
|
|
154
|
+
reject(formatAuthError(statusCode, data, options.authToken));
|
|
155
|
+
}
|
|
156
|
+
else if (statusCode >= 400 && statusCode < 500) {
|
|
157
|
+
// 429 and other client errors
|
|
158
|
+
reject(formatApiError(statusCode, data, options.authToken));
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
// 500+ server errors
|
|
162
|
+
reject(formatApiError(statusCode, data, options.authToken));
|
|
163
|
+
}
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
try {
|
|
167
|
+
const json = JSON.parse(data);
|
|
168
|
+
resolve(json);
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
// Use formatParseError for invalid JSON responses
|
|
172
|
+
reject(formatParseError(data, options.authToken));
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
// Set request timeout
|
|
177
|
+
req.setTimeout(REQUEST_TIMEOUT_MS);
|
|
178
|
+
req.on('timeout', () => {
|
|
179
|
+
req.destroy();
|
|
180
|
+
const timeoutError = new Error('Request timeout');
|
|
181
|
+
timeoutError.code = 'ETIMEDOUT';
|
|
182
|
+
reject(formatNetworkError(timeoutError, options.authToken));
|
|
183
|
+
});
|
|
184
|
+
req.on('error', (error) => {
|
|
185
|
+
reject(formatNetworkError(error, options.authToken));
|
|
186
|
+
});
|
|
187
|
+
req.end();
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Query a single endpoint
|
|
192
|
+
* @param endpoints - Endpoints configuration
|
|
193
|
+
* @param authToken - Authentication token
|
|
194
|
+
* @param endpointKey - Which endpoint to query ('modelUsage' | 'toolUsage' | 'quotaLimit')
|
|
195
|
+
* @param queryParams - Optional query parameters
|
|
196
|
+
* @returns Promise resolving to API response
|
|
197
|
+
*/
|
|
198
|
+
async function queryEndpoint(endpoints, authToken, endpointKey, queryParams) {
|
|
199
|
+
const url = endpoints[endpointKey];
|
|
200
|
+
return makeRequest({ url, authToken, queryParams });
|
|
201
|
+
}
|
|
202
|
+
export { createBoxedError, formatApiError, formatAuthError, formatNetworkError, formatParseError, makeRequest, queryEndpoint, };
|
|
203
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/api/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API endpoints module
|
|
3
|
+
* Defines all API endpoints for ZAI and ZHIPU platforms
|
|
4
|
+
*/
|
|
5
|
+
import type { Platform } from './platforms.js';
|
|
6
|
+
/**
|
|
7
|
+
* Endpoint URLs type
|
|
8
|
+
*/
|
|
9
|
+
type Endpoints = {
|
|
10
|
+
readonly modelUsage: string;
|
|
11
|
+
readonly toolUsage: string;
|
|
12
|
+
readonly quotaLimit: string;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Get endpoints for a platform
|
|
16
|
+
* @param platform - The platform type
|
|
17
|
+
* @returns Endpoints configuration
|
|
18
|
+
*/
|
|
19
|
+
declare function getEndpoints(platform: Platform): Endpoints;
|
|
20
|
+
export type { Endpoints };
|
|
21
|
+
export { getEndpoints };
|
|
22
|
+
//# sourceMappingURL=endpoints.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoints.d.ts","sourceRoot":"","sources":["../../../src/api/endpoints.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAuB9C;;GAEG;AACH,KAAK,SAAS,GAAG;IAChB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED;;;;GAIG;AACH,iBAAS,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,CASnD;AAED,YAAY,EAAE,SAAS,EAAE,CAAA;AACzB,OAAO,EAAE,YAAY,EAAE,CAAA"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API endpoints module
|
|
3
|
+
* Defines all API endpoints for ZAI and ZHIPU platforms
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* API endpoints configuration by platform
|
|
7
|
+
*/
|
|
8
|
+
const ENDPOINTS = {
|
|
9
|
+
ZAI: {
|
|
10
|
+
modelUsage: 'https://api.z.ai/api/monitor/usage/model-usage',
|
|
11
|
+
toolUsage: 'https://api.z.ai/api/monitor/usage/tool-usage',
|
|
12
|
+
quotaLimit: 'https://api.z.ai/api/monitor/usage/quota/limit',
|
|
13
|
+
},
|
|
14
|
+
ZHIPU: {
|
|
15
|
+
modelUsage: 'https://open.bigmodel.cn/api/monitor/usage/model-usage',
|
|
16
|
+
toolUsage: 'https://open.bigmodel.cn/api/monitor/usage/tool-usage',
|
|
17
|
+
quotaLimit: 'https://open.bigmodel.cn/api/monitor/usage/quota/limit',
|
|
18
|
+
},
|
|
19
|
+
ZHIPU_DEV: {
|
|
20
|
+
modelUsage: 'https://dev.bigmodel.cn/api/monitor/usage/model-usage',
|
|
21
|
+
toolUsage: 'https://dev.bigmodel.cn/api/monitor/usage/tool-usage',
|
|
22
|
+
quotaLimit: 'https://dev.bigmodel.cn/api/monitor/usage/quota/limit',
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Get endpoints for a platform
|
|
27
|
+
* @param platform - The platform type
|
|
28
|
+
* @returns Endpoints configuration
|
|
29
|
+
*/
|
|
30
|
+
function getEndpoints(platform) {
|
|
31
|
+
switch (platform) {
|
|
32
|
+
case 'ZAI':
|
|
33
|
+
return ENDPOINTS.ZAI;
|
|
34
|
+
case 'ZHIPU':
|
|
35
|
+
return ENDPOINTS.ZHIPU;
|
|
36
|
+
default:
|
|
37
|
+
return ENDPOINTS.ZAI;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export { getEndpoints };
|
|
41
|
+
//# sourceMappingURL=endpoints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoints.js","sourceRoot":"","sources":["../../../src/api/endpoints.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,MAAM,SAAS,GAAG;IACjB,GAAG,EAAE;QACJ,UAAU,EAAE,gDAAgD;QAC5D,SAAS,EAAE,+CAA+C;QAC1D,UAAU,EAAE,gDAAgD;KAC5D;IACD,KAAK,EAAE;QACN,UAAU,EAAE,wDAAwD;QACpE,SAAS,EAAE,uDAAuD;QAClE,UAAU,EAAE,wDAAwD;KACpE;IACD,SAAS,EAAE;QACV,UAAU,EAAE,uDAAuD;QACnE,SAAS,EAAE,sDAAsD;QACjE,UAAU,EAAE,uDAAuD;KACnE;CACQ,CAAA;AAWV;;;;GAIG;AACH,SAAS,YAAY,CAAC,QAAkB;IACvC,QAAQ,QAAQ,EAAE,CAAC;QAClB,KAAK,KAAK;YACT,OAAO,SAAS,CAAC,GAAG,CAAA;QACrB,KAAK,OAAO;YACX,OAAO,SAAS,CAAC,KAAK,CAAA;QACvB;YACC,OAAO,SAAS,CAAC,GAAG,CAAA;IACtB,CAAC;AACF,CAAC;AAGD,OAAO,EAAE,YAAY,EAAE,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Platform detection module
|
|
3
|
+
* Maps provider IDs to platforms (ZAI or ZHIPU)
|
|
4
|
+
*/
|
|
5
|
+
type Platform = 'ZAI' | 'ZHIPU';
|
|
6
|
+
/**
|
|
7
|
+
* Detect platform from provider ID
|
|
8
|
+
* @param providerId - The provider ID from OpenCode authentication
|
|
9
|
+
* @returns Platform type or null if unknown
|
|
10
|
+
*/
|
|
11
|
+
declare function detectPlatform(providerId: string): Platform | null;
|
|
12
|
+
/**
|
|
13
|
+
* Get platform display name
|
|
14
|
+
* @param platform - The platform type
|
|
15
|
+
* @returns Human-readable platform name
|
|
16
|
+
*/
|
|
17
|
+
declare function getPlatformName(platform: Platform): string;
|
|
18
|
+
export type { Platform };
|
|
19
|
+
export { detectPlatform, getPlatformName };
|
|
20
|
+
//# sourceMappingURL=platforms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platforms.d.ts","sourceRoot":"","sources":["../../../src/api/platforms.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,KAAK,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAA;AAE/B;;;;GAIG;AACH,iBAAS,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAc3D;AAED;;;;GAIG;AACH,iBAAS,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CASnD;AAED,YAAY,EAAE,QAAQ,EAAE,CAAA;AACxB,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,CAAA"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Platform detection module
|
|
3
|
+
* Maps provider IDs to platforms (ZAI or ZHIPU)
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Detect platform from provider ID
|
|
7
|
+
* @param providerId - The provider ID from OpenCode authentication
|
|
8
|
+
* @returns Platform type or null if unknown
|
|
9
|
+
*/
|
|
10
|
+
function detectPlatform(providerId) {
|
|
11
|
+
const lower = providerId.toLowerCase();
|
|
12
|
+
// Check for ZHIPU first (more specific)
|
|
13
|
+
if (lower.includes('zhipu') || lower.includes('bigmodel')) {
|
|
14
|
+
return 'ZHIPU';
|
|
15
|
+
}
|
|
16
|
+
// Check for ZAI
|
|
17
|
+
if (lower.includes('zai') || lower === 'z.ai' || lower === 'z-ai') {
|
|
18
|
+
return 'ZAI';
|
|
19
|
+
}
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Get platform display name
|
|
24
|
+
* @param platform - The platform type
|
|
25
|
+
* @returns Human-readable platform name
|
|
26
|
+
*/
|
|
27
|
+
function getPlatformName(platform) {
|
|
28
|
+
switch (platform) {
|
|
29
|
+
case 'ZAI':
|
|
30
|
+
return 'Z.AI';
|
|
31
|
+
case 'ZHIPU':
|
|
32
|
+
return 'ZHIPU';
|
|
33
|
+
default:
|
|
34
|
+
return platform;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export { detectPlatform, getPlatformName };
|
|
38
|
+
//# sourceMappingURL=platforms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platforms.js","sourceRoot":"","sources":["../../../src/api/platforms.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;;GAIG;AACH,SAAS,cAAc,CAAC,UAAkB;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,WAAW,EAAE,CAAA;IAEtC,wCAAwC;IACxC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3D,OAAO,OAAO,CAAA;IACf,CAAC;IAED,gBAAgB;IAChB,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACnE,OAAO,KAAK,CAAA;IACb,CAAC;IAED,OAAO,IAAI,CAAA;AACZ,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,QAAkB;IAC1C,QAAQ,QAAQ,EAAE,CAAC;QAClB,KAAK,KAAK;YACT,OAAO,MAAM,CAAA;QACd,KAAK,OAAO;YACX,OAAO,OAAO,CAAA;QACf;YACC,OAAO,QAAQ,CAAA;IACjB,CAAC;AACF,CAAC;AAGD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenCode GLM Quota Plugin
|
|
3
|
+
*
|
|
4
|
+
* Query Z.ai GLM Coding Plan usage statistics including quota limits,
|
|
5
|
+
* model usage, and MCP tool usage.
|
|
6
|
+
*/
|
|
7
|
+
import { type Plugin } from '@opencode-ai/plugin';
|
|
8
|
+
export declare const GlmQuotaPlugin: Plugin;
|
|
9
|
+
export default GlmQuotaPlugin;
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAw4BjD,eAAO,MAAM,cAAc,EAAE,MAyD5B,CAAA;AAED,eAAe,cAAc,CAAA"}
|