@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.
Files changed (133) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +189 -0
  3. package/bin/copilot-quota.ts +374 -0
  4. package/bin/glm-quota.ts +467 -0
  5. package/bin/install.js +439 -0
  6. package/bin/kimi-quota.ts +314 -0
  7. package/dist/bin/copilot-quota.d.ts +8 -0
  8. package/dist/bin/copilot-quota.d.ts.map +1 -0
  9. package/dist/bin/copilot-quota.js +298 -0
  10. package/dist/bin/copilot-quota.js.map +1 -0
  11. package/dist/bin/glm-quota.d.ts +8 -0
  12. package/dist/bin/glm-quota.d.ts.map +1 -0
  13. package/dist/bin/glm-quota.js +367 -0
  14. package/dist/bin/glm-quota.js.map +1 -0
  15. package/dist/bin/kimi-quota.d.ts +3 -0
  16. package/dist/bin/kimi-quota.d.ts.map +1 -0
  17. package/dist/bin/kimi-quota.js +241 -0
  18. package/dist/bin/kimi-quota.js.map +1 -0
  19. package/dist/src/api/client.d.ts +76 -0
  20. package/dist/src/api/client.d.ts.map +1 -0
  21. package/dist/src/api/client.js +203 -0
  22. package/dist/src/api/client.js.map +1 -0
  23. package/dist/src/api/endpoints.d.ts +22 -0
  24. package/dist/src/api/endpoints.d.ts.map +1 -0
  25. package/dist/src/api/endpoints.js +41 -0
  26. package/dist/src/api/endpoints.js.map +1 -0
  27. package/dist/src/api/platforms.d.ts +20 -0
  28. package/dist/src/api/platforms.d.ts.map +1 -0
  29. package/dist/src/api/platforms.js +38 -0
  30. package/dist/src/api/platforms.js.map +1 -0
  31. package/dist/src/index.d.ts +10 -0
  32. package/dist/src/index.d.ts.map +1 -0
  33. package/dist/src/index.js +723 -0
  34. package/dist/src/index.js.map +1 -0
  35. package/dist/src/shared/logging.d.ts +7 -0
  36. package/dist/src/shared/logging.d.ts.map +1 -0
  37. package/dist/src/shared/logging.js +29 -0
  38. package/dist/src/shared/logging.js.map +1 -0
  39. package/dist/src/utils/box-constants.d.ts +43 -0
  40. package/dist/src/utils/box-constants.d.ts.map +1 -0
  41. package/dist/src/utils/box-constants.js +43 -0
  42. package/dist/src/utils/box-constants.js.map +1 -0
  43. package/dist/src/utils/date-formatter.d.ts +17 -0
  44. package/dist/src/utils/date-formatter.d.ts.map +1 -0
  45. package/dist/src/utils/date-formatter.js +33 -0
  46. package/dist/src/utils/date-formatter.js.map +1 -0
  47. package/dist/src/utils/error-formatter.d.ts +17 -0
  48. package/dist/src/utils/error-formatter.d.ts.map +1 -0
  49. package/dist/src/utils/error-formatter.js +60 -0
  50. package/dist/src/utils/error-formatter.js.map +1 -0
  51. package/dist/src/utils/progress-bar.d.ts +35 -0
  52. package/dist/src/utils/progress-bar.d.ts.map +1 -0
  53. package/dist/src/utils/progress-bar.js +43 -0
  54. package/dist/src/utils/progress-bar.js.map +1 -0
  55. package/dist/src/utils/reset-timer.d.ts +11 -0
  56. package/dist/src/utils/reset-timer.d.ts.map +1 -0
  57. package/dist/src/utils/reset-timer.js +32 -0
  58. package/dist/src/utils/reset-timer.js.map +1 -0
  59. package/dist/src/utils/time-window.d.ts +30 -0
  60. package/dist/src/utils/time-window.d.ts.map +1 -0
  61. package/dist/src/utils/time-window.js +34 -0
  62. package/dist/src/utils/time-window.js.map +1 -0
  63. package/dist/tests/error-handling/api-errors.test.d.ts +7 -0
  64. package/dist/tests/error-handling/api-errors.test.d.ts.map +1 -0
  65. package/dist/tests/error-handling/api-errors.test.js +110 -0
  66. package/dist/tests/error-handling/api-errors.test.js.map +1 -0
  67. package/dist/tests/error-handling/auth-errors.test.d.ts +7 -0
  68. package/dist/tests/error-handling/auth-errors.test.d.ts.map +1 -0
  69. package/dist/tests/error-handling/auth-errors.test.js +110 -0
  70. package/dist/tests/error-handling/auth-errors.test.js.map +1 -0
  71. package/dist/tests/error-handling/network-errors.test.d.ts +7 -0
  72. package/dist/tests/error-handling/network-errors.test.d.ts.map +1 -0
  73. package/dist/tests/error-handling/network-errors.test.js +94 -0
  74. package/dist/tests/error-handling/network-errors.test.js.map +1 -0
  75. package/dist/tests/error-handling/parse-errors.test.d.ts +7 -0
  76. package/dist/tests/error-handling/parse-errors.test.d.ts.map +1 -0
  77. package/dist/tests/error-handling/parse-errors.test.js +87 -0
  78. package/dist/tests/error-handling/parse-errors.test.js.map +1 -0
  79. package/dist/tests/error-handling/token-sanitization.test.d.ts +2 -0
  80. package/dist/tests/error-handling/token-sanitization.test.d.ts.map +1 -0
  81. package/dist/tests/error-handling/token-sanitization.test.js +59 -0
  82. package/dist/tests/error-handling/token-sanitization.test.js.map +1 -0
  83. package/dist/tests/functional/date-formatter.test.d.ts +5 -0
  84. package/dist/tests/functional/date-formatter.test.d.ts.map +1 -0
  85. package/dist/tests/functional/date-formatter.test.js +46 -0
  86. package/dist/tests/functional/date-formatter.test.js.map +1 -0
  87. package/dist/tests/functional/progress-bar.test.d.ts +5 -0
  88. package/dist/tests/functional/progress-bar.test.d.ts.map +1 -0
  89. package/dist/tests/functional/progress-bar.test.js +82 -0
  90. package/dist/tests/functional/progress-bar.test.js.map +1 -0
  91. package/dist/tests/functional/reset-timer.test.d.ts +6 -0
  92. package/dist/tests/functional/reset-timer.test.d.ts.map +1 -0
  93. package/dist/tests/functional/reset-timer.test.js +67 -0
  94. package/dist/tests/functional/reset-timer.test.js.map +1 -0
  95. package/dist/tests/functional/time-window.test.d.ts +5 -0
  96. package/dist/tests/functional/time-window.test.d.ts.map +1 -0
  97. package/dist/tests/functional/time-window.test.js +46 -0
  98. package/dist/tests/functional/time-window.test.js.map +1 -0
  99. package/dist/tests/integration/box-alignment.test.d.ts +8 -0
  100. package/dist/tests/integration/box-alignment.test.d.ts.map +1 -0
  101. package/dist/tests/integration/box-alignment.test.js +238 -0
  102. package/dist/tests/integration/box-alignment.test.js.map +1 -0
  103. package/dist/tests/integration/error-handling.test.d.ts +2 -0
  104. package/dist/tests/integration/error-handling.test.d.ts.map +1 -0
  105. package/dist/tests/integration/error-handling.test.js +36 -0
  106. package/dist/tests/integration/error-handling.test.js.map +1 -0
  107. package/dist/tests/integration/installer-config.test.d.ts +2 -0
  108. package/dist/tests/integration/installer-config.test.d.ts.map +1 -0
  109. package/dist/tests/integration/installer-config.test.js +65 -0
  110. package/dist/tests/integration/installer-config.test.js.map +1 -0
  111. package/dist/tests/integration/plugin-catch-block.test.d.ts +2 -0
  112. package/dist/tests/integration/plugin-catch-block.test.d.ts.map +1 -0
  113. package/dist/tests/integration/plugin-catch-block.test.js +134 -0
  114. package/dist/tests/integration/plugin-catch-block.test.js.map +1 -0
  115. package/dist/tests/integration/reset-time-display.test.d.ts +6 -0
  116. package/dist/tests/integration/reset-time-display.test.d.ts.map +1 -0
  117. package/dist/tests/integration/reset-time-display.test.js +138 -0
  118. package/dist/tests/integration/reset-time-display.test.js.map +1 -0
  119. package/dist/tests/module/http-client.test.d.ts +2 -0
  120. package/dist/tests/module/http-client.test.d.ts.map +1 -0
  121. package/dist/tests/module/http-client.test.js +49 -0
  122. package/dist/tests/module/http-client.test.js.map +1 -0
  123. package/dist/tests/module/platform-detection.test.d.ts +5 -0
  124. package/dist/tests/module/platform-detection.test.d.ts.map +1 -0
  125. package/dist/tests/module/platform-detection.test.js +48 -0
  126. package/dist/tests/module/platform-detection.test.js.map +1 -0
  127. package/integration/agents/copilot-quota-exec.md +20 -0
  128. package/integration/agents/glm-quota-exec.md +20 -0
  129. package/integration/command/copilot_quota.md +6 -0
  130. package/integration/command/glm_quota.md +6 -0
  131. package/integration/skills/copilot-quota/SKILL.md +11 -0
  132. package/integration/skills/glm-quota/SKILL.md +11 -0
  133. 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"}