hyperttp 0.2.4 → 0.2.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 +129 -16
- package/dist/Hyperttp/Core/CacheManager.d.ts +63 -40
- package/dist/Hyperttp/Core/CacheManager.d.ts.map +1 -1
- package/dist/Hyperttp/Core/CacheManager.js +64 -62
- package/dist/Hyperttp/Core/CacheManager.js.map +1 -1
- package/dist/Hyperttp/Core/HttpClientImproved.d.ts +55 -33
- package/dist/Hyperttp/Core/HttpClientImproved.d.ts.map +1 -1
- package/dist/Hyperttp/Core/HttpClientImproved.js +315 -211
- package/dist/Hyperttp/Core/HttpClientImproved.js.map +1 -1
- package/dist/Hyperttp/Core/InterceptorManager.d.ts +11 -11
- package/dist/Hyperttp/Core/InterceptorManager.d.ts.map +1 -1
- package/dist/Hyperttp/Core/InterceptorManager.js +10 -10
- package/dist/Hyperttp/Core/InterceptorManager.js.map +1 -1
- package/dist/Hyperttp/Core/MetricsManager.d.ts +33 -42
- package/dist/Hyperttp/Core/MetricsManager.d.ts.map +1 -1
- package/dist/Hyperttp/Core/MetricsManager.js +165 -59
- package/dist/Hyperttp/Core/MetricsManager.js.map +1 -1
- package/dist/Hyperttp/Core/QueueManager.d.ts +6 -4
- package/dist/Hyperttp/Core/QueueManager.d.ts.map +1 -1
- package/dist/Hyperttp/Core/QueueManager.js +42 -34
- package/dist/Hyperttp/Core/QueueManager.js.map +1 -1
- package/dist/Hyperttp/Core/RateLimiter.d.ts +29 -36
- package/dist/Hyperttp/Core/RateLimiter.d.ts.map +1 -1
- package/dist/Hyperttp/Core/RateLimiter.js +100 -36
- package/dist/Hyperttp/Core/RateLimiter.js.map +1 -1
- package/dist/Hyperttp/Core/RequestBuilder.d.ts +4 -2
- package/dist/Hyperttp/Core/RequestBuilder.d.ts.map +1 -1
- package/dist/Hyperttp/Core/RequestBuilder.js +10 -3
- package/dist/Hyperttp/Core/RequestBuilder.js.map +1 -1
- package/dist/Hyperttp/Core/RequestExecutor.d.ts +7 -34
- package/dist/Hyperttp/Core/RequestExecutor.d.ts.map +1 -1
- package/dist/Hyperttp/Core/RequestExecutor.js +121 -114
- package/dist/Hyperttp/Core/RequestExecutor.js.map +1 -1
- package/dist/Hyperttp/Core/RequestProfiler.d.ts +10 -0
- package/dist/Hyperttp/Core/RequestProfiler.d.ts.map +1 -0
- package/dist/Hyperttp/Core/RequestProfiler.js +55 -0
- package/dist/Hyperttp/Core/RequestProfiler.js.map +1 -0
- package/dist/Hyperttp/Core/ResponseConverter.d.ts +23 -0
- package/dist/Hyperttp/Core/ResponseConverter.d.ts.map +1 -0
- package/dist/Hyperttp/Core/ResponseConverter.js +369 -0
- package/dist/Hyperttp/Core/ResponseConverter.js.map +1 -0
- package/dist/Hyperttp/Core/index.d.ts +8 -10
- package/dist/Hyperttp/Core/index.d.ts.map +1 -1
- package/dist/Hyperttp/Core/index.js +28 -15
- package/dist/Hyperttp/Core/index.js.map +1 -1
- package/dist/Hyperttp/UrlExtractor.d.ts +1 -1
- package/dist/Hyperttp/UrlExtractor.d.ts.map +1 -1
- package/dist/Hyperttp/index.d.ts +1 -3
- package/dist/Hyperttp/index.d.ts.map +1 -1
- package/dist/Hyperttp/index.js +8 -8
- package/dist/Hyperttp/index.js.map +1 -1
- package/dist/Types/cache.d.ts +10 -0
- package/dist/Types/cache.d.ts.map +1 -0
- package/dist/Types/cache.js +3 -0
- package/dist/Types/cache.js.map +1 -0
- package/dist/Types/errors.d.ts +15 -0
- package/dist/Types/errors.d.ts.map +1 -0
- package/dist/Types/errors.js +34 -0
- package/dist/Types/errors.js.map +1 -0
- package/dist/Types/http-client.d.ts +39 -0
- package/dist/Types/http-client.d.ts.map +1 -0
- package/dist/Types/http-client.js +3 -0
- package/dist/Types/http-client.js.map +1 -0
- package/dist/Types/http.d.ts +5 -0
- package/dist/Types/http.d.ts.map +1 -0
- package/dist/Types/http.js +3 -0
- package/dist/Types/http.js.map +1 -0
- package/dist/Types/index.d.ts +12 -127
- package/dist/Types/index.d.ts.map +1 -1
- package/dist/Types/index.js +12 -39
- package/dist/Types/index.js.map +1 -1
- package/dist/Types/interceptors.d.ts +13 -0
- package/dist/Types/interceptors.d.ts.map +1 -0
- package/dist/Types/interceptors.js +3 -0
- package/dist/Types/interceptors.js.map +1 -0
- package/dist/Types/metrics.d.ts +90 -0
- package/dist/Types/metrics.d.ts.map +1 -0
- package/dist/Types/metrics.js +3 -0
- package/dist/Types/metrics.js.map +1 -0
- package/dist/Types/options.d.ts +233 -0
- package/dist/Types/options.d.ts.map +1 -0
- package/dist/Types/options.js +3 -0
- package/dist/Types/options.js.map +1 -0
- package/dist/Types/queue.d.ts +8 -0
- package/dist/Types/queue.d.ts.map +1 -0
- package/dist/Types/queue.js +3 -0
- package/dist/Types/queue.js.map +1 -0
- package/dist/Types/request.d.ts +148 -9
- package/dist/Types/request.d.ts.map +1 -1
- package/dist/Types/response.d.ts +28 -0
- package/dist/Types/response.d.ts.map +1 -0
- package/dist/Types/response.js +3 -0
- package/dist/Types/response.js.map +1 -0
- package/dist/Types/stream.d.ts +39 -0
- package/dist/Types/stream.d.ts.map +1 -0
- package/dist/Types/stream.js +3 -0
- package/dist/Types/stream.js.map +1 -0
- package/dist/Types/url-extractor.d.ts +10 -0
- package/dist/Types/url-extractor.d.ts.map +1 -0
- package/dist/Types/url-extractor.js +3 -0
- package/dist/Types/url-extractor.js.map +1 -0
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -3
- package/dist/index.js.map +1 -1
- package/package.json +7 -5
- package/dist/Hyperttp/Core/ResponseTransformer.d.ts +0 -35
- package/dist/Hyperttp/Core/ResponseTransformer.d.ts.map +0 -1
- package/dist/Hyperttp/Core/ResponseTransformer.js +0 -171
- package/dist/Hyperttp/Core/ResponseTransformer.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetricsManager.js","sourceRoot":"","sources":["../../../src/Hyperttp/Core/MetricsManager.ts"],"names":[],"mappings":";;;AAAA,yCAAqC;
|
|
1
|
+
{"version":3,"file":"MetricsManager.js","sourceRoot":"","sources":["../../../src/Hyperttp/Core/MetricsManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
export declare class QueueManager {
|
|
2
|
-
private maxConcurrent;
|
|
2
|
+
private readonly maxConcurrent;
|
|
3
3
|
private running;
|
|
4
|
-
private
|
|
4
|
+
private queued;
|
|
5
5
|
private head;
|
|
6
6
|
private tail;
|
|
7
7
|
constructor(maxConcurrent?: number);
|
|
8
8
|
enqueue<T>(executor: () => Promise<T>): Promise<T>;
|
|
9
|
-
private
|
|
10
|
-
|
|
9
|
+
private drain;
|
|
10
|
+
clear(): void;
|
|
11
11
|
get activeCount(): number;
|
|
12
12
|
get queuedCount(): number;
|
|
13
|
+
get pending(): number;
|
|
14
|
+
get isIdle(): boolean;
|
|
13
15
|
}
|
|
14
16
|
//# sourceMappingURL=QueueManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueueManager.d.ts","sourceRoot":"","sources":["../../../src/Hyperttp/Core/QueueManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"QueueManager.d.ts","sourceRoot":"","sources":["../../../src/Hyperttp/Core/QueueManager.ts"],"names":[],"mappings":"AAEA,qBAAa,YAAY;IAMX,OAAO,CAAC,QAAQ,CAAC,aAAa;IAL1C,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,IAAI,CAA0B;IACtC,OAAO,CAAC,IAAI,CAA0B;gBAET,aAAa,SAAK;IAE/C,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAqBlD,OAAO,CAAC,KAAK;IAsBb,KAAK,IAAI,IAAI;IAcb,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,MAAM,IAAI,OAAO,CAEpB;CACF"}
|
|
@@ -4,63 +4,71 @@ exports.QueueManager = void 0;
|
|
|
4
4
|
class QueueManager {
|
|
5
5
|
maxConcurrent;
|
|
6
6
|
running = 0;
|
|
7
|
-
|
|
7
|
+
queued = 0;
|
|
8
8
|
head = null;
|
|
9
9
|
tail = null;
|
|
10
10
|
constructor(maxConcurrent = 50) {
|
|
11
11
|
this.maxConcurrent = maxConcurrent;
|
|
12
12
|
}
|
|
13
|
-
|
|
14
|
-
if (this.running < this.maxConcurrent) {
|
|
15
|
-
return this.runTask(executor);
|
|
16
|
-
}
|
|
13
|
+
enqueue(executor) {
|
|
17
14
|
return new Promise((resolve, reject) => {
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
const node = {
|
|
16
|
+
executor,
|
|
17
|
+
resolve: resolve,
|
|
18
|
+
reject,
|
|
19
|
+
next: null,
|
|
20
|
+
};
|
|
21
|
+
if (this.tail) {
|
|
22
|
+
this.tail.next = node;
|
|
22
23
|
}
|
|
23
24
|
else {
|
|
24
|
-
this.
|
|
25
|
-
this.tail = newNode;
|
|
25
|
+
this.head = node;
|
|
26
26
|
}
|
|
27
|
-
this.
|
|
27
|
+
this.tail = node;
|
|
28
|
+
this.queued++;
|
|
29
|
+
this.drain();
|
|
28
30
|
});
|
|
29
31
|
}
|
|
30
|
-
|
|
31
|
-
this.running++;
|
|
32
|
-
try {
|
|
33
|
-
const result = await executor();
|
|
34
|
-
resolve?.(result);
|
|
35
|
-
return result;
|
|
36
|
-
}
|
|
37
|
-
catch (error) {
|
|
38
|
-
reject?.(error);
|
|
39
|
-
throw error;
|
|
40
|
-
}
|
|
41
|
-
finally {
|
|
42
|
-
this.running--;
|
|
43
|
-
this.processQueue();
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
processQueue() {
|
|
32
|
+
drain() {
|
|
47
33
|
while (this.running < this.maxConcurrent && this.head) {
|
|
48
34
|
const task = this.head;
|
|
49
|
-
this.head =
|
|
35
|
+
this.head = task.next;
|
|
50
36
|
if (!this.head) {
|
|
51
37
|
this.tail = null;
|
|
52
38
|
}
|
|
53
|
-
this.
|
|
54
|
-
|
|
55
|
-
|
|
39
|
+
this.queued--;
|
|
40
|
+
this.running++;
|
|
41
|
+
Promise.resolve()
|
|
42
|
+
.then(task.executor)
|
|
43
|
+
.then(task.resolve, task.reject)
|
|
44
|
+
.finally(() => {
|
|
45
|
+
this.running--;
|
|
46
|
+
this.drain();
|
|
56
47
|
});
|
|
57
48
|
}
|
|
58
49
|
}
|
|
50
|
+
clear() {
|
|
51
|
+
const error = new Error("Queue has been cleared");
|
|
52
|
+
while (this.head) {
|
|
53
|
+
const node = this.head;
|
|
54
|
+
this.head = node.next;
|
|
55
|
+
node.reject(error);
|
|
56
|
+
}
|
|
57
|
+
this.head = null;
|
|
58
|
+
this.tail = null;
|
|
59
|
+
this.queued = 0;
|
|
60
|
+
}
|
|
59
61
|
get activeCount() {
|
|
60
62
|
return this.running;
|
|
61
63
|
}
|
|
62
64
|
get queuedCount() {
|
|
63
|
-
return this.
|
|
65
|
+
return this.queued;
|
|
66
|
+
}
|
|
67
|
+
get pending() {
|
|
68
|
+
return this.running + this.queued;
|
|
69
|
+
}
|
|
70
|
+
get isIdle() {
|
|
71
|
+
return this.running === 0 && this.queued === 0;
|
|
64
72
|
}
|
|
65
73
|
}
|
|
66
74
|
exports.QueueManager = QueueManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueueManager.js","sourceRoot":"","sources":["../../../src/Hyperttp/Core/QueueManager.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"QueueManager.js","sourceRoot":"","sources":["../../../src/Hyperttp/Core/QueueManager.ts"],"names":[],"mappings":";;;AAEA,MAAa,YAAY;IAMM;IALrB,OAAO,GAAG,CAAC,CAAC;IACZ,MAAM,GAAG,CAAC,CAAC;IACX,IAAI,GAAqB,IAAI,CAAC;IAC9B,IAAI,GAAqB,IAAI,CAAC;IAEtC,YAA6B,gBAAgB,EAAE;QAAlB,kBAAa,GAAb,aAAa,CAAK;IAAG,CAAC;IAEnD,OAAO,CAAI,QAA0B;QACnC,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxC,MAAM,IAAI,GAAc;gBACtB,QAAQ;gBACR,OAAO,EAAE,OAAmC;gBAC5C,MAAM;gBACN,IAAI,EAAE,IAAI;aACX,CAAC;YAEF,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACnB,CAAC;YAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK;QACX,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACtD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAEtB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACnB,CAAC;YAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,OAAO,EAAE,CAAC;YAEf,OAAO,CAAC,OAAO,EAAE;iBACd,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;iBACnB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;iBAC/B,OAAO,CAAC,GAAG,EAAE;gBACZ,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,CAAC,CAAC,CAAC;QACP,CAAC;IACH,CAAC;IAED,KAAK;QACH,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAElD,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;IACpC,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC;IACjD,CAAC;CACF;AAhFD,oCAgFC"}
|
|
@@ -1,69 +1,62 @@
|
|
|
1
|
-
|
|
2
|
-
* @interface RateLimiterConfig
|
|
3
|
-
* @en Configuration for the token bucket rate limiter.
|
|
4
|
-
* @ru Конфигурация для ограничителя частоты запросов (алгоритм Token Bucket).
|
|
5
|
-
*/
|
|
6
|
-
export interface RateLimiterConfig {
|
|
7
|
-
/** * @en Maximum number of requests allowed within the window.
|
|
8
|
-
* @ru Максимальное количество запросов, разрешенных в пределах окна.
|
|
9
|
-
* @default 100
|
|
10
|
-
*/
|
|
11
|
-
maxRequests?: number;
|
|
12
|
-
/** * @en Time window in milliseconds.
|
|
13
|
-
* @ru Временное окно в миллисекундах.
|
|
14
|
-
* @default 60000 (1 minute)
|
|
15
|
-
*/
|
|
16
|
-
windowMs?: number;
|
|
17
|
-
}
|
|
1
|
+
import type { RateLimitOptions } from "../../Types/options";
|
|
18
2
|
/**
|
|
19
3
|
* @class RateLimiter
|
|
20
|
-
* @en
|
|
21
|
-
*
|
|
22
|
-
* @ru Плавное ограничение частоты запросов с использованием алгоритма Token Bucket.
|
|
23
|
-
* Позволяет кратковременные всплески, сохраняя стабильную скорость в долгосрочной перспективе.
|
|
4
|
+
* @en Token bucket rate limiter with FIFO wait queue.
|
|
5
|
+
* @ru Rate limiter на основе token bucket с FIFO-очередью ожидания.
|
|
24
6
|
*/
|
|
25
7
|
export declare class RateLimiter {
|
|
26
|
-
private
|
|
27
|
-
private lastRefill;
|
|
8
|
+
private readonly enabled;
|
|
28
9
|
private readonly max;
|
|
29
10
|
private readonly window;
|
|
30
11
|
private readonly refillRate;
|
|
31
|
-
|
|
12
|
+
private tokens;
|
|
13
|
+
private lastRefill;
|
|
14
|
+
private waiters;
|
|
15
|
+
private timer;
|
|
16
|
+
constructor(config?: RateLimitOptions);
|
|
32
17
|
/**
|
|
33
18
|
* @en Waits until enough tokens are available and consumes them.
|
|
34
|
-
* @ru
|
|
35
|
-
* @param tokensNeeded - Number of tokens to consume (default: 1)
|
|
19
|
+
* @ru Ждёт появления достаточного числа токенов и потребляет их.
|
|
36
20
|
*/
|
|
37
21
|
wait(tokensNeeded?: number): Promise<void>;
|
|
38
22
|
/**
|
|
39
23
|
* @en Attempts to consume tokens immediately.
|
|
40
24
|
* @ru Пытается немедленно потребить токены.
|
|
41
|
-
* @returns true if tokens were consumed, false otherwise (limit exceeded).
|
|
42
25
|
*/
|
|
43
26
|
tryConsume(tokensNeeded?: number): boolean;
|
|
44
27
|
/**
|
|
45
28
|
* @en Internal method to refill the bucket based on elapsed time.
|
|
46
|
-
* @ru Внутренний метод
|
|
29
|
+
* @ru Внутренний метод пополнения корзины на основе прошедшего времени.
|
|
47
30
|
*/
|
|
48
31
|
private refill;
|
|
49
32
|
/**
|
|
50
|
-
* @en
|
|
51
|
-
* @ru
|
|
33
|
+
* @en Processes queued waiters in FIFO order.
|
|
34
|
+
* @ru Обрабатывает ожидающие запросы в FIFO-порядке.
|
|
52
35
|
*/
|
|
53
|
-
|
|
36
|
+
private drainQueue;
|
|
37
|
+
/**
|
|
38
|
+
* @en Schedules the next queue drain based on the next token refill time.
|
|
39
|
+
* @ru Планирует следующий проход по очереди с учётом времени до следующего токена.
|
|
40
|
+
*/
|
|
41
|
+
private scheduleDrain;
|
|
54
42
|
/**
|
|
55
|
-
* @en Returns
|
|
56
|
-
* @ru Возвращает
|
|
43
|
+
* @en Returns the number of currently available tokens.
|
|
44
|
+
* @ru Возвращает текущее число доступных токенов.
|
|
57
45
|
*/
|
|
58
46
|
get remainingRequests(): number;
|
|
47
|
+
/**
|
|
48
|
+
* @en Returns the number of currently "used" slots.
|
|
49
|
+
* @ru Возвращает число уже занятых слотов.
|
|
50
|
+
*/
|
|
51
|
+
get currentCount(): number;
|
|
59
52
|
/**
|
|
60
53
|
* @en Estimated time in ms until the next token is available.
|
|
61
|
-
* @ru
|
|
54
|
+
* @ru Оценка времени в мс до появления следующего токена.
|
|
62
55
|
*/
|
|
63
56
|
get timeToReset(): number;
|
|
64
57
|
/**
|
|
65
|
-
* @en Instantly refills the bucket to
|
|
66
|
-
* @ru Мгновенно пополняет корзину до
|
|
58
|
+
* @en Instantly refills the bucket to max capacity and clears waiting timers.
|
|
59
|
+
* @ru Мгновенно пополняет корзину до максимума и очищает таймеры ожидания.
|
|
67
60
|
*/
|
|
68
61
|
reset(): void;
|
|
69
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RateLimiter.d.ts","sourceRoot":"","sources":["../../../src/Hyperttp/Core/RateLimiter.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"RateLimiter.d.ts","sourceRoot":"","sources":["../../../src/Hyperttp/Core/RateLimiter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAQ5D;;;;GAIG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAEpC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAS;IAE3B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,KAAK,CAA8C;gBAE/C,MAAM,CAAC,EAAE,gBAAgB;IAUrC;;;OAGG;IACG,IAAI,CAAC,YAAY,SAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB3C;;;OAGG;IACH,UAAU,CAAC,YAAY,SAAI,GAAG,OAAO;IAkBrC;;;OAGG;IACH,OAAO,CAAC,MAAM;IAad;;;OAGG;IACH,OAAO,CAAC,UAAU;IAqBlB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAqBrB;;;OAGG;IACH,IAAI,iBAAiB,IAAI,MAAM,CAI9B;IAED;;;OAGG;IACH,IAAI,YAAY,IAAI,MAAM,CAIzB;IAED;;;OAGG;IACH,IAAI,WAAW,IAAI,MAAM,CAQxB;IAED;;;OAGG;IACH,KAAK,IAAI,IAAI;CAgBd"}
|
|
@@ -3,18 +3,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.RateLimiter = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* @class RateLimiter
|
|
6
|
-
* @en
|
|
7
|
-
*
|
|
8
|
-
* @ru Плавное ограничение частоты запросов с использованием алгоритма Token Bucket.
|
|
9
|
-
* Позволяет кратковременные всплески, сохраняя стабильную скорость в долгосрочной перспективе.
|
|
6
|
+
* @en Token bucket rate limiter with FIFO wait queue.
|
|
7
|
+
* @ru Rate limiter на основе token bucket с FIFO-очередью ожидания.
|
|
10
8
|
*/
|
|
11
9
|
class RateLimiter {
|
|
12
|
-
|
|
13
|
-
lastRefill;
|
|
10
|
+
enabled;
|
|
14
11
|
max;
|
|
15
12
|
window;
|
|
16
13
|
refillRate; // tokens per ms
|
|
14
|
+
tokens;
|
|
15
|
+
lastRefill;
|
|
16
|
+
waiters = [];
|
|
17
|
+
timer = null;
|
|
17
18
|
constructor(config) {
|
|
19
|
+
this.enabled = config?.enabled ?? false;
|
|
18
20
|
this.max = Math.max(1, config?.maxRequests ?? 100);
|
|
19
21
|
this.window = Math.max(1, config?.windowMs ?? 60_000);
|
|
20
22
|
this.refillRate = this.max / this.window;
|
|
@@ -23,33 +25,38 @@ class RateLimiter {
|
|
|
23
25
|
}
|
|
24
26
|
/**
|
|
25
27
|
* @en Waits until enough tokens are available and consumes them.
|
|
26
|
-
* @ru
|
|
27
|
-
* @param tokensNeeded - Number of tokens to consume (default: 1)
|
|
28
|
+
* @ru Ждёт появления достаточного числа токенов и потребляет их.
|
|
28
29
|
*/
|
|
29
30
|
async wait(tokensNeeded = 1) {
|
|
31
|
+
if (!this.enabled)
|
|
32
|
+
return;
|
|
33
|
+
tokensNeeded = Math.max(1, Math.floor(tokensNeeded));
|
|
34
|
+
if (tokensNeeded > this.max) {
|
|
35
|
+
tokensNeeded = this.max;
|
|
36
|
+
}
|
|
30
37
|
this.refill();
|
|
31
|
-
|
|
32
|
-
if (this.tokens >= tokensNeeded) {
|
|
38
|
+
if (this.waiters.length === 0 && this.tokens >= tokensNeeded) {
|
|
33
39
|
this.tokens -= tokensNeeded;
|
|
34
40
|
return;
|
|
35
41
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
this.refill();
|
|
41
|
-
this.tokens -= tokensNeeded;
|
|
42
|
-
this.tokens = Math.max(0, this.tokens);
|
|
42
|
+
return new Promise((resolve, reject) => {
|
|
43
|
+
this.waiters.push({ tokensNeeded, resolve, reject });
|
|
44
|
+
this.scheduleDrain();
|
|
45
|
+
});
|
|
43
46
|
}
|
|
44
47
|
/**
|
|
45
48
|
* @en Attempts to consume tokens immediately.
|
|
46
49
|
* @ru Пытается немедленно потребить токены.
|
|
47
|
-
* @returns true if tokens were consumed, false otherwise (limit exceeded).
|
|
48
50
|
*/
|
|
49
51
|
tryConsume(tokensNeeded = 1) {
|
|
52
|
+
if (!this.enabled)
|
|
53
|
+
return true;
|
|
54
|
+
tokensNeeded = Math.max(1, Math.floor(tokensNeeded));
|
|
55
|
+
if (tokensNeeded > this.max) {
|
|
56
|
+
tokensNeeded = this.max;
|
|
57
|
+
}
|
|
50
58
|
this.refill();
|
|
51
|
-
|
|
52
|
-
if (this.tokens >= tokensNeeded) {
|
|
59
|
+
if (this.waiters.length === 0 && this.tokens >= tokensNeeded) {
|
|
53
60
|
this.tokens -= tokensNeeded;
|
|
54
61
|
return true;
|
|
55
62
|
}
|
|
@@ -57,49 +64,106 @@ class RateLimiter {
|
|
|
57
64
|
}
|
|
58
65
|
/**
|
|
59
66
|
* @en Internal method to refill the bucket based on elapsed time.
|
|
60
|
-
* @ru Внутренний метод
|
|
67
|
+
* @ru Внутренний метод пополнения корзины на основе прошедшего времени.
|
|
61
68
|
*/
|
|
62
69
|
refill() {
|
|
63
70
|
const now = Date.now();
|
|
64
71
|
const elapsedMs = now - this.lastRefill;
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
72
|
+
if (elapsedMs <= 0)
|
|
73
|
+
return;
|
|
74
|
+
const added = elapsedMs * this.refillRate;
|
|
75
|
+
if (added > 0) {
|
|
76
|
+
this.tokens = Math.min(this.max, this.tokens + added);
|
|
77
|
+
this.lastRefill = now;
|
|
78
|
+
}
|
|
68
79
|
}
|
|
69
80
|
/**
|
|
70
|
-
* @en
|
|
71
|
-
* @ru
|
|
81
|
+
* @en Processes queued waiters in FIFO order.
|
|
82
|
+
* @ru Обрабатывает ожидающие запросы в FIFO-порядке.
|
|
72
83
|
*/
|
|
73
|
-
|
|
84
|
+
drainQueue() {
|
|
85
|
+
this.timer = null;
|
|
74
86
|
this.refill();
|
|
75
|
-
|
|
87
|
+
while (this.waiters.length > 0) {
|
|
88
|
+
const next = this.waiters[0];
|
|
89
|
+
if (this.tokens < next.tokensNeeded) {
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
this.tokens -= next.tokensNeeded;
|
|
93
|
+
this.waiters.shift();
|
|
94
|
+
next.resolve();
|
|
95
|
+
}
|
|
96
|
+
if (this.waiters.length > 0) {
|
|
97
|
+
this.scheduleDrain();
|
|
98
|
+
}
|
|
76
99
|
}
|
|
77
100
|
/**
|
|
78
|
-
* @en
|
|
79
|
-
* @ru
|
|
101
|
+
* @en Schedules the next queue drain based on the next token refill time.
|
|
102
|
+
* @ru Планирует следующий проход по очереди с учётом времени до следующего токена.
|
|
103
|
+
*/
|
|
104
|
+
scheduleDrain() {
|
|
105
|
+
if (this.timer || this.waiters.length === 0)
|
|
106
|
+
return;
|
|
107
|
+
const first = this.waiters[0];
|
|
108
|
+
const needed = Math.max(0, first.tokensNeeded - this.tokens);
|
|
109
|
+
if (needed <= 0) {
|
|
110
|
+
queueMicrotask(() => this.drainQueue());
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
const waitMs = Math.ceil(needed / this.refillRate);
|
|
114
|
+
this.timer = setTimeout(() => {
|
|
115
|
+
this.drainQueue();
|
|
116
|
+
}, Math.max(1, waitMs));
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* @en Returns the number of currently available tokens.
|
|
120
|
+
* @ru Возвращает текущее число доступных токенов.
|
|
80
121
|
*/
|
|
81
122
|
get remainingRequests() {
|
|
123
|
+
if (!this.enabled)
|
|
124
|
+
return Number.POSITIVE_INFINITY;
|
|
82
125
|
this.refill();
|
|
83
|
-
return Math.floor(this.tokens);
|
|
126
|
+
return Math.max(0, Math.floor(this.tokens));
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* @en Returns the number of currently "used" slots.
|
|
130
|
+
* @ru Возвращает число уже занятых слотов.
|
|
131
|
+
*/
|
|
132
|
+
get currentCount() {
|
|
133
|
+
if (!this.enabled)
|
|
134
|
+
return 0;
|
|
135
|
+
this.refill();
|
|
136
|
+
return Math.max(0, Math.floor(this.max - this.tokens));
|
|
84
137
|
}
|
|
85
138
|
/**
|
|
86
139
|
* @en Estimated time in ms until the next token is available.
|
|
87
|
-
* @ru
|
|
140
|
+
* @ru Оценка времени в мс до появления следующего токена.
|
|
88
141
|
*/
|
|
89
142
|
get timeToReset() {
|
|
143
|
+
if (!this.enabled)
|
|
144
|
+
return 0;
|
|
90
145
|
this.refill();
|
|
91
146
|
if (this.tokens >= 1)
|
|
92
147
|
return 0;
|
|
93
|
-
const
|
|
94
|
-
return Math.max(0, Math.ceil(
|
|
148
|
+
const deficit = 1 - this.tokens;
|
|
149
|
+
return Math.max(0, Math.ceil(deficit / this.refillRate));
|
|
95
150
|
}
|
|
96
151
|
/**
|
|
97
|
-
* @en Instantly refills the bucket to
|
|
98
|
-
* @ru Мгновенно пополняет корзину до
|
|
152
|
+
* @en Instantly refills the bucket to max capacity and clears waiting timers.
|
|
153
|
+
* @ru Мгновенно пополняет корзину до максимума и очищает таймеры ожидания.
|
|
99
154
|
*/
|
|
100
155
|
reset() {
|
|
156
|
+
const error = new Error("Rate limiter has been reset");
|
|
157
|
+
while (this.waiters.length > 0) {
|
|
158
|
+
const waiter = this.waiters.shift();
|
|
159
|
+
waiter?.reject(error);
|
|
160
|
+
}
|
|
101
161
|
this.tokens = this.max;
|
|
102
162
|
this.lastRefill = Date.now();
|
|
163
|
+
if (this.timer) {
|
|
164
|
+
clearTimeout(this.timer);
|
|
165
|
+
this.timer = null;
|
|
166
|
+
}
|
|
103
167
|
}
|
|
104
168
|
}
|
|
105
169
|
exports.RateLimiter = RateLimiter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RateLimiter.js","sourceRoot":"","sources":["../../../src/Hyperttp/Core/RateLimiter.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"RateLimiter.js","sourceRoot":"","sources":["../../../src/Hyperttp/Core/RateLimiter.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,7 @@ import HttpClientImproved from "./HttpClientImproved";
|
|
|
12
12
|
* .send();
|
|
13
13
|
* ```
|
|
14
14
|
*/
|
|
15
|
-
export declare class RequestBuilder
|
|
15
|
+
export declare class RequestBuilder {
|
|
16
16
|
private _url;
|
|
17
17
|
private _method;
|
|
18
18
|
private _headers;
|
|
@@ -51,6 +51,8 @@ export declare class RequestBuilder<T = any> {
|
|
|
51
51
|
delete(): this;
|
|
52
52
|
/** @en Set method to HEAD */
|
|
53
53
|
head(): this;
|
|
54
|
+
/** @en Set method to OPTIONS */
|
|
55
|
+
options(): this;
|
|
54
56
|
/** @en Set response type to JSON */
|
|
55
57
|
json(): this;
|
|
56
58
|
/** @en Set response type to Plain Text */
|
|
@@ -76,6 +78,6 @@ export declare class RequestBuilder<T = any> {
|
|
|
76
78
|
* @ru Финализирует и отправляет запрос.
|
|
77
79
|
* @returns Promise resolving to the expected type T or StreamResponse.
|
|
78
80
|
*/
|
|
79
|
-
send(): Promise<
|
|
81
|
+
send(): Promise<any>;
|
|
80
82
|
}
|
|
81
83
|
//# sourceMappingURL=RequestBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RequestBuilder.d.ts","sourceRoot":"","sources":["../../../src/Hyperttp/Core/RequestBuilder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RequestBuilder.d.ts","sourceRoot":"","sources":["../../../src/Hyperttp/Core/RequestBuilder.ts"],"names":[],"mappings":"AAEA,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AAEtD;;;;;;;;;;;;GAYG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,KAAK,CAAC,CAAM;IACpB,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,OAAO,CAAC,CAAc;gBAElB,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB;IAKnD;;;OAGG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAK9C;;;OAGG;IACH,IAAI,CAAC,QAAQ,EAAE,GAAG,GAAG,IAAI;IAKzB;;;OAGG;IACH,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;IAM1B;;;OAGG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI;IAS9D,6BAA6B;IAC7B,IAAI,IAAI,IAAI;IAKZ,4BAA4B;IAC5B,GAAG,IAAI,IAAI;IAKX,8BAA8B;IAC9B,KAAK,IAAI,IAAI;IAKb,+BAA+B;IAC/B,MAAM,IAAI,IAAI;IAKd,6BAA6B;IAC7B,IAAI,IAAI,IAAI;IAKZ,gCAAgC;IAChC,OAAO,IAAI,IAAI;IAKf,oCAAoC;IACpC,IAAI,IAAI,IAAI;IAKZ,0CAA0C;IAC1C,IAAI,IAAI,IAAI;IAKZ,mCAAmC;IACnC,GAAG,IAAI,IAAI;IAKX,sCAAsC;IACtC,MAAM,IAAI,IAAI;IAKd,sDAAsD;IACtD,MAAM,IAAI,IAAI;IAKd;;;OAGG;IACH,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAKjC;;;OAGG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKzB;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC;CA6B3B"}
|
|
@@ -16,7 +16,7 @@ exports.RequestBuilder = void 0;
|
|
|
16
16
|
*/
|
|
17
17
|
class RequestBuilder {
|
|
18
18
|
_url;
|
|
19
|
-
_method
|
|
19
|
+
_method;
|
|
20
20
|
_headers = {};
|
|
21
21
|
_body;
|
|
22
22
|
_responseType = "auto";
|
|
@@ -86,6 +86,11 @@ class RequestBuilder {
|
|
|
86
86
|
this._method = "HEAD";
|
|
87
87
|
return this;
|
|
88
88
|
}
|
|
89
|
+
/** @en Set method to OPTIONS */
|
|
90
|
+
options() {
|
|
91
|
+
this._method = "OPTIONS";
|
|
92
|
+
return this;
|
|
93
|
+
}
|
|
89
94
|
/** @en Set response type to JSON */
|
|
90
95
|
json() {
|
|
91
96
|
this._responseType = "json";
|
|
@@ -140,7 +145,7 @@ class RequestBuilder {
|
|
|
140
145
|
getSignal: () => this._signal,
|
|
141
146
|
};
|
|
142
147
|
if (this._responseType === "stream") {
|
|
143
|
-
return
|
|
148
|
+
return this._client.stream(req);
|
|
144
149
|
}
|
|
145
150
|
switch (this._method) {
|
|
146
151
|
case "POST":
|
|
@@ -151,8 +156,10 @@ class RequestBuilder {
|
|
|
151
156
|
return this._client.patch(req, this._body, this._responseType);
|
|
152
157
|
case "DELETE":
|
|
153
158
|
return this._client.delete(req, this._responseType);
|
|
159
|
+
case "OPTIONS":
|
|
160
|
+
return this._client.options(req, this._body, this._responseType);
|
|
154
161
|
case "HEAD":
|
|
155
|
-
return
|
|
162
|
+
return this._client.head(req);
|
|
156
163
|
default:
|
|
157
164
|
return this._client.get(req, this._responseType);
|
|
158
165
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RequestBuilder.js","sourceRoot":"","sources":["../../../src/Hyperttp/Core/RequestBuilder.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"RequestBuilder.js","sourceRoot":"","sources":["../../../src/Hyperttp/Core/RequestBuilder.ts"],"names":[],"mappings":"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"}
|