@i14ks/ccv 0.16.0 → 0.16.1
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/bundle/ccv.mjs +19 -7
- package/package.json +1 -1
package/bundle/ccv.mjs
CHANGED
|
@@ -5946,6 +5946,7 @@ var HandoffStore = class {
|
|
|
5946
5946
|
return path18.join(this.#dir, `${sessionId}.json`);
|
|
5947
5947
|
}
|
|
5948
5948
|
};
|
|
5949
|
+
var SAME_WINDOW_MS = 5 * 6e4;
|
|
5949
5950
|
var LimitStopState = class {
|
|
5950
5951
|
#fired = {};
|
|
5951
5952
|
#storePath;
|
|
@@ -5965,9 +5966,19 @@ var LimitStopState = class {
|
|
|
5965
5966
|
this.#fired = {};
|
|
5966
5967
|
}
|
|
5967
5968
|
}
|
|
5968
|
-
/**
|
|
5969
|
-
|
|
5970
|
-
|
|
5969
|
+
/**
|
|
5970
|
+
* Окно `limit` со сроком сброса `resets` уже сработало и ещё не сбросилось.
|
|
5971
|
+
*
|
|
5972
|
+
* Срок сверяется с допуском: окно со сроком сброса дальше `SAME_WINDOW_MS`
|
|
5973
|
+
* от записанного — уже другое, даже если прежний срок не наступил (так
|
|
5974
|
+
* 7.10 новое окно до 21:20 пропустили, приняв его за сработавшее до 20:30).
|
|
5975
|
+
* `null` — срок не разобрать, сверять не с чем, решает только записанный.
|
|
5976
|
+
*/
|
|
5977
|
+
fired(limit, resets, now = Date.now()) {
|
|
5978
|
+
const until = this.#fired[limit] ?? 0;
|
|
5979
|
+
if (until <= now)
|
|
5980
|
+
return false;
|
|
5981
|
+
return resets === null || Math.abs(resets - until) <= SAME_WINDOW_MS;
|
|
5971
5982
|
}
|
|
5972
5983
|
/** Запомнить срабатывание до `until` (момент сброса окна). */
|
|
5973
5984
|
async mark(limit, until) {
|
|
@@ -5999,10 +6010,11 @@ function crossedLimit(usage, settings, fired, now = Date.now()) {
|
|
|
5999
6010
|
for (const [limit, window, threshold] of checks) {
|
|
6000
6011
|
if (!window || threshold <= 0 || window.utilization < threshold)
|
|
6001
6012
|
continue;
|
|
6002
|
-
|
|
6013
|
+
const parsed = Date.parse(window.resetsAt);
|
|
6014
|
+
const resets = Number.isFinite(parsed) && parsed > now ? parsed : null;
|
|
6015
|
+
if (fired(limit, resets))
|
|
6003
6016
|
continue;
|
|
6004
|
-
const
|
|
6005
|
-
const until = Number.isFinite(resets) && resets > now ? resets : now + WINDOW_SPAN_MS[limit];
|
|
6017
|
+
const until = resets ?? now + WINDOW_SPAN_MS[limit];
|
|
6006
6018
|
return { limit, window, until };
|
|
6007
6019
|
}
|
|
6008
6020
|
return null;
|
|
@@ -8313,7 +8325,7 @@ var HostServer = class {
|
|
|
8313
8325
|
async #checkLimit(usage) {
|
|
8314
8326
|
if (this.#limitStopping)
|
|
8315
8327
|
return;
|
|
8316
|
-
const hit = crossedLimit(usage, this.#settings.current, (limit) => this.#limitStop.fired(limit));
|
|
8328
|
+
const hit = crossedLimit(usage, this.#settings.current, (limit, resets) => this.#limitStop.fired(limit, resets));
|
|
8317
8329
|
if (!hit)
|
|
8318
8330
|
return;
|
|
8319
8331
|
this.#limitStopping = true;
|
package/package.json
CHANGED