opencode-kimi-rotator 1.2.9 → 1.2.10

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.
@@ -6246,6 +6246,8 @@ var HARD_BILLING_LIMIT_PATTERNS = [
6246
6246
  "from=quota-upgrade"
6247
6247
  ];
6248
6248
  var MEMBERSHIP_VERIFICATION_PATTERNS = [
6249
+ "we're unable to verify your membership benefits at this time",
6250
+ "unable to verify your membership benefits at this time",
6249
6251
  "unable to verify your membership benefits",
6250
6252
  "please ensure your membership is active"
6251
6253
  ];
@@ -6258,6 +6260,18 @@ function debugLog(message, data) {
6258
6260
  console.log(`[KimiRotator Debug] ${message}`, data ?? "");
6259
6261
  }
6260
6262
  }
6263
+ function normalizeResponseText(text) {
6264
+ return text.toLowerCase().replace(/[’]/g, "'").replace(/\s+/g, " ").trim();
6265
+ }
6266
+ async function readResponseText(response) {
6267
+ try {
6268
+ const clonedResponse = response.clone();
6269
+ return await clonedResponse.text();
6270
+ } catch (error) {
6271
+ debugLog("Error reading response body:", error);
6272
+ return null;
6273
+ }
6274
+ }
6261
6275
  async function getAccountManager() {
6262
6276
  if (!accountManager) {
6263
6277
  accountManager = new KimiAccountManager();
@@ -6362,37 +6376,25 @@ var KimiRotatorPlugin = async ({ client }) => {
6362
6376
  const attemptInput = input instanceof Request ? input.clone() : input;
6363
6377
  const response = await originalFetch(attemptInput, { ...init, headers });
6364
6378
  const responseTime = Date.now() - requestStartTime;
6365
- if (response.status === 429) {
6366
- const retryAfter = response.headers.get("retry-after");
6367
- const retryAfterMs = retryAfter ? parseInt(retryAfter, 10) * 1e3 : 6e4;
6368
- await accountManager.markAccountRateLimited(requestAccountIndex, retryAfterMs);
6369
- await showToast(`\u26A0\uFE0F Key ${String(position)} rate limited`, "warning");
6370
- if (attempt < maxAttempts - 1) {
6371
- lastResponse = response;
6372
- continue;
6373
- }
6374
- } else if (response.ok) {
6379
+ if (response.ok) {
6375
6380
  await accountManager.markAccountSuccess(requestAccountIndex, responseTime, today);
6376
6381
  return response;
6377
- } else if (response.status >= 500) {
6378
- await accountManager.markAccountFailure(requestAccountIndex);
6379
- return response;
6380
- } else if (response.status === 400 || response.status === 403) {
6381
- const clonedResponse = response.clone();
6382
- try {
6383
- const bodyText = await clonedResponse.text();
6384
- const bodyLower = bodyText.toLowerCase();
6382
+ }
6383
+ if (response.status >= 400 && response.status < 500) {
6384
+ const bodyText = await readResponseText(response);
6385
+ if (bodyText !== null) {
6386
+ const bodyNormalized = normalizeResponseText(bodyText);
6385
6387
  debugLog(`HTTP ${response.status} for key ${String(position)}`, {
6386
6388
  bodyPreview: bodyText.substring(0, 200).replace(/\s+/g, " ")
6387
6389
  });
6388
6390
  const isBillingLimit = BILLING_LIMIT_PATTERNS.some(
6389
- (pattern) => bodyLower.includes(pattern)
6391
+ (pattern) => bodyNormalized.includes(pattern)
6390
6392
  );
6391
6393
  const isHardBillingLimit = HARD_BILLING_LIMIT_PATTERNS.some(
6392
- (pattern) => bodyLower.includes(pattern)
6394
+ (pattern) => bodyNormalized.includes(pattern)
6393
6395
  );
6394
6396
  const isMembershipVerificationFailure = MEMBERSHIP_VERIFICATION_PATTERNS.some(
6395
- (pattern) => bodyLower.includes(pattern)
6397
+ (pattern) => bodyNormalized.includes(pattern)
6396
6398
  );
6397
6399
  if (isMembershipVerificationFailure && accountManager) {
6398
6400
  await accountManager.markAccountMembershipVerificationFailed(
@@ -6452,15 +6454,23 @@ var KimiRotatorPlugin = async ({ client }) => {
6452
6454
  }
6453
6455
  return response;
6454
6456
  }
6455
- debugLog(`HTTP ${response.status} but not billing limit for key ${String(position)}`);
6456
- await accountManager.resetBillingLimitHits(requestAccountIndex);
6457
- await accountManager.markAccountFailure(requestAccountIndex);
6458
- return response;
6459
- } catch (error) {
6460
- debugLog("Error reading response body:", error);
6461
- return response;
6462
6457
  }
6458
+ }
6459
+ if (response.status === 429) {
6460
+ const retryAfter = response.headers.get("retry-after");
6461
+ const retryAfterMs = retryAfter ? parseInt(retryAfter, 10) * 1e3 : 6e4;
6462
+ await accountManager.markAccountRateLimited(requestAccountIndex, retryAfterMs);
6463
+ await showToast(`\u26A0\uFE0F Key ${String(position)} rate limited`, "warning");
6464
+ if (attempt < maxAttempts - 1) {
6465
+ lastResponse = response;
6466
+ continue;
6467
+ }
6468
+ } else if (response.status >= 500) {
6469
+ await accountManager.markAccountFailure(requestAccountIndex);
6470
+ return response;
6463
6471
  } else {
6472
+ debugLog(`HTTP ${response.status} not matched for retry on key ${String(position)}`);
6473
+ await accountManager.resetBillingLimitHits(requestAccountIndex);
6464
6474
  await accountManager.markAccountFailure(requestAccountIndex);
6465
6475
  return response;
6466
6476
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA6H9C,eAAO,MAAM,iBAAiB,EAAE,MA4O/B,CAAC;AAEF,eAAe,iBAAiB,CAAC;AACjC,YAAY,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA6I9C,eAAO,MAAM,iBAAiB,EAAE,MAyO/B,CAAC;AAEF,eAAe,iBAAiB,CAAC;AACjC,YAAY,EAAE,WAAW,EAAE,CAAC"}
package/dist/plugin.js CHANGED
@@ -13,6 +13,8 @@ const HARD_BILLING_LIMIT_PATTERNS = [
13
13
  'from=quota-upgrade',
14
14
  ];
15
15
  const MEMBERSHIP_VERIFICATION_PATTERNS = [
16
+ "we're unable to verify your membership benefits at this time",
17
+ 'unable to verify your membership benefits at this time',
16
18
  'unable to verify your membership benefits',
17
19
  'please ensure your membership is active',
18
20
  ];
@@ -25,6 +27,19 @@ function debugLog(message, data) {
25
27
  console.log(`[KimiRotator Debug] ${message}`, data ?? '');
26
28
  }
27
29
  }
30
+ function normalizeResponseText(text) {
31
+ return text.toLowerCase().replace(/[’]/g, "'").replace(/\s+/g, ' ').trim();
32
+ }
33
+ async function readResponseText(response) {
34
+ try {
35
+ const clonedResponse = response.clone();
36
+ return await clonedResponse.text();
37
+ }
38
+ catch (error) {
39
+ debugLog('Error reading response body:', error);
40
+ return null;
41
+ }
42
+ }
28
43
  async function getAccountManager() {
29
44
  if (!accountManager) {
30
45
  accountManager = new KimiAccountManager();
@@ -135,35 +150,20 @@ export const KimiRotatorPlugin = async ({ client }) => {
135
150
  const attemptInput = input instanceof Request ? input.clone() : input;
136
151
  const response = await originalFetch(attemptInput, { ...init, headers });
137
152
  const responseTime = Date.now() - requestStartTime;
138
- if (response.status === 429) {
139
- const retryAfter = response.headers.get('retry-after');
140
- const retryAfterMs = retryAfter ? parseInt(retryAfter, 10) * 1000 : 60000;
141
- await accountManager.markAccountRateLimited(requestAccountIndex, retryAfterMs);
142
- await showToast(`⚠️ Key ${String(position)} rate limited`, 'warning');
143
- if (attempt < maxAttempts - 1) {
144
- lastResponse = response;
145
- continue;
146
- }
147
- }
148
- else if (response.ok) {
153
+ if (response.ok) {
149
154
  await accountManager.markAccountSuccess(requestAccountIndex, responseTime, today);
150
155
  return response;
151
156
  }
152
- else if (response.status >= 500) {
153
- await accountManager.markAccountFailure(requestAccountIndex);
154
- return response;
155
- }
156
- else if (response.status === 400 || response.status === 403) {
157
- const clonedResponse = response.clone();
158
- try {
159
- const bodyText = await clonedResponse.text();
160
- const bodyLower = bodyText.toLowerCase();
157
+ if (response.status >= 400 && response.status < 500) {
158
+ const bodyText = await readResponseText(response);
159
+ if (bodyText !== null) {
160
+ const bodyNormalized = normalizeResponseText(bodyText);
161
161
  debugLog(`HTTP ${response.status} for key ${String(position)}`, {
162
162
  bodyPreview: bodyText.substring(0, 200).replace(/\s+/g, ' '),
163
163
  });
164
- const isBillingLimit = BILLING_LIMIT_PATTERNS.some((pattern) => bodyLower.includes(pattern));
165
- const isHardBillingLimit = HARD_BILLING_LIMIT_PATTERNS.some((pattern) => bodyLower.includes(pattern));
166
- const isMembershipVerificationFailure = MEMBERSHIP_VERIFICATION_PATTERNS.some((pattern) => bodyLower.includes(pattern));
164
+ const isBillingLimit = BILLING_LIMIT_PATTERNS.some((pattern) => bodyNormalized.includes(pattern));
165
+ const isHardBillingLimit = HARD_BILLING_LIMIT_PATTERNS.some((pattern) => bodyNormalized.includes(pattern));
166
+ const isMembershipVerificationFailure = MEMBERSHIP_VERIFICATION_PATTERNS.some((pattern) => bodyNormalized.includes(pattern));
167
167
  if (isMembershipVerificationFailure && accountManager) {
168
168
  await accountManager.markAccountMembershipVerificationFailed(requestAccountIndex, MEMBERSHIP_VERIFICATION_COOLDOWN_MS);
169
169
  await showToast(`🚫 Key ${String(position)} membership verification failed - skipped for 24h`, 'warning');
@@ -206,17 +206,25 @@ export const KimiRotatorPlugin = async ({ client }) => {
206
206
  }
207
207
  return response;
208
208
  }
209
- debugLog(`HTTP ${response.status} but not billing limit for key ${String(position)}`);
210
- await accountManager.resetBillingLimitHits(requestAccountIndex);
211
- await accountManager.markAccountFailure(requestAccountIndex);
212
- return response;
213
209
  }
214
- catch (error) {
215
- debugLog('Error reading response body:', error);
216
- return response;
210
+ }
211
+ if (response.status === 429) {
212
+ const retryAfter = response.headers.get('retry-after');
213
+ const retryAfterMs = retryAfter ? parseInt(retryAfter, 10) * 1000 : 60000;
214
+ await accountManager.markAccountRateLimited(requestAccountIndex, retryAfterMs);
215
+ await showToast(`⚠️ Key ${String(position)} rate limited`, 'warning');
216
+ if (attempt < maxAttempts - 1) {
217
+ lastResponse = response;
218
+ continue;
217
219
  }
218
220
  }
221
+ else if (response.status >= 500) {
222
+ await accountManager.markAccountFailure(requestAccountIndex);
223
+ return response;
224
+ }
219
225
  else {
226
+ debugLog(`HTTP ${response.status} not matched for retry on key ${String(position)}`);
227
+ await accountManager.resetBillingLimitHits(requestAccountIndex);
220
228
  await accountManager.markAccountFailure(requestAccountIndex);
221
229
  return response;
222
230
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-kimi-rotator",
3
- "version": "1.2.9",
3
+ "version": "1.2.10",
4
4
  "description": "Kimi API Key Rotator for OpenCode - Automatically rotate between multiple Kimi API keys to handle rate limits",
5
5
  "main": "./dist/plugin.js",
6
6
  "types": "dist/index.d.ts",
package/src/plugin.ts CHANGED
@@ -23,6 +23,8 @@ const HARD_BILLING_LIMIT_PATTERNS = [
23
23
  ];
24
24
 
25
25
  const MEMBERSHIP_VERIFICATION_PATTERNS = [
26
+ "we're unable to verify your membership benefits at this time",
27
+ 'unable to verify your membership benefits at this time',
26
28
  'unable to verify your membership benefits',
27
29
  'please ensure your membership is active',
28
30
  ];
@@ -40,6 +42,20 @@ function debugLog(message: string, data?: unknown) {
40
42
  }
41
43
  }
42
44
 
45
+ function normalizeResponseText(text: string): string {
46
+ return text.toLowerCase().replace(/[’]/g, "'").replace(/\s+/g, ' ').trim();
47
+ }
48
+
49
+ async function readResponseText(response: Response): Promise<string | null> {
50
+ try {
51
+ const clonedResponse = response.clone();
52
+ return await clonedResponse.text();
53
+ } catch (error) {
54
+ debugLog('Error reading response body:', error);
55
+ return null;
56
+ }
57
+ }
58
+
43
59
  async function getAccountManager(): Promise<KimiAccountManager> {
44
60
  if (!accountManager) {
45
61
  accountManager = new KimiAccountManager();
@@ -183,40 +199,28 @@ export const KimiRotatorPlugin: Plugin = async ({ client }) => {
183
199
  const response = await originalFetch(attemptInput, { ...init, headers });
184
200
  const responseTime = Date.now() - requestStartTime;
185
201
 
186
- if (response.status === 429) {
187
- const retryAfter = response.headers.get('retry-after');
188
- const retryAfterMs = retryAfter ? parseInt(retryAfter, 10) * 1000 : 60000;
189
- await accountManager.markAccountRateLimited(requestAccountIndex, retryAfterMs);
190
- await showToast(`⚠️ Key ${String(position)} rate limited`, 'warning');
191
-
192
- if (attempt < maxAttempts - 1) {
193
- lastResponse = response;
194
- continue;
195
- }
196
- } else if (response.ok) {
202
+ if (response.ok) {
197
203
  await accountManager.markAccountSuccess(requestAccountIndex, responseTime, today);
198
204
  return response;
199
- } else if (response.status >= 500) {
200
- await accountManager.markAccountFailure(requestAccountIndex);
201
- return response;
202
- } else if (response.status === 400 || response.status === 403) {
203
- const clonedResponse = response.clone();
204
- try {
205
- const bodyText = await clonedResponse.text();
206
- const bodyLower = bodyText.toLowerCase();
205
+ }
206
+
207
+ if (response.status >= 400 && response.status < 500) {
208
+ const bodyText = await readResponseText(response);
209
+ if (bodyText !== null) {
210
+ const bodyNormalized = normalizeResponseText(bodyText);
207
211
 
208
212
  debugLog(`HTTP ${response.status} for key ${String(position)}`, {
209
213
  bodyPreview: bodyText.substring(0, 200).replace(/\s+/g, ' '),
210
214
  });
211
215
 
212
216
  const isBillingLimit = BILLING_LIMIT_PATTERNS.some((pattern) =>
213
- bodyLower.includes(pattern)
217
+ bodyNormalized.includes(pattern)
214
218
  );
215
219
  const isHardBillingLimit = HARD_BILLING_LIMIT_PATTERNS.some((pattern) =>
216
- bodyLower.includes(pattern)
220
+ bodyNormalized.includes(pattern)
217
221
  );
218
222
  const isMembershipVerificationFailure = MEMBERSHIP_VERIFICATION_PATTERNS.some(
219
- (pattern) => bodyLower.includes(pattern)
223
+ (pattern) => bodyNormalized.includes(pattern)
220
224
  );
221
225
 
222
226
  if (isMembershipVerificationFailure && accountManager) {
@@ -283,16 +287,25 @@ export const KimiRotatorPlugin: Plugin = async ({ client }) => {
283
287
 
284
288
  return response;
285
289
  }
290
+ }
291
+ }
292
+
293
+ if (response.status === 429) {
294
+ const retryAfter = response.headers.get('retry-after');
295
+ const retryAfterMs = retryAfter ? parseInt(retryAfter, 10) * 1000 : 60000;
296
+ await accountManager.markAccountRateLimited(requestAccountIndex, retryAfterMs);
297
+ await showToast(`⚠️ Key ${String(position)} rate limited`, 'warning');
286
298
 
287
- debugLog(`HTTP ${response.status} but not billing limit for key ${String(position)}`);
288
- await accountManager.resetBillingLimitHits(requestAccountIndex);
289
- await accountManager.markAccountFailure(requestAccountIndex);
290
- return response;
291
- } catch (error) {
292
- debugLog('Error reading response body:', error);
293
- return response;
299
+ if (attempt < maxAttempts - 1) {
300
+ lastResponse = response;
301
+ continue;
294
302
  }
303
+ } else if (response.status >= 500) {
304
+ await accountManager.markAccountFailure(requestAccountIndex);
305
+ return response;
295
306
  } else {
307
+ debugLog(`HTTP ${response.status} not matched for retry on key ${String(position)}`);
308
+ await accountManager.resetBillingLimitHits(requestAccountIndex);
296
309
  await accountManager.markAccountFailure(requestAccountIndex);
297
310
  return response;
298
311
  }