hyperttp 0.2.1 → 0.2.3
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/dist/Hyperttp/Core/CacheManager.d.ts +40 -3
- package/dist/Hyperttp/Core/CacheManager.d.ts.map +1 -1
- package/dist/Hyperttp/Core/CacheManager.js +61 -12
- package/dist/Hyperttp/Core/CacheManager.js.map +1 -1
- package/dist/Hyperttp/Core/HttpClientImproved.d.ts +69 -97
- package/dist/Hyperttp/Core/HttpClientImproved.d.ts.map +1 -1
- package/dist/Hyperttp/Core/HttpClientImproved.js +331 -642
- package/dist/Hyperttp/Core/HttpClientImproved.js.map +1 -1
- package/dist/Hyperttp/Core/InterceptorManager.d.ts +62 -0
- package/dist/Hyperttp/Core/InterceptorManager.d.ts.map +1 -0
- package/dist/Hyperttp/Core/InterceptorManager.js +64 -0
- package/dist/Hyperttp/Core/InterceptorManager.js.map +1 -0
- package/dist/Hyperttp/Core/MetricsManager.d.ts +80 -0
- package/dist/Hyperttp/Core/MetricsManager.d.ts.map +1 -0
- package/dist/Hyperttp/Core/MetricsManager.js +140 -0
- package/dist/Hyperttp/Core/MetricsManager.js.map +1 -0
- package/dist/Hyperttp/Core/QueueManager.d.ts +5 -40
- package/dist/Hyperttp/Core/QueueManager.d.ts.map +1 -1
- package/dist/Hyperttp/Core/QueueManager.js +41 -47
- package/dist/Hyperttp/Core/QueueManager.js.map +1 -1
- package/dist/Hyperttp/Core/RateLimiter.d.ts +40 -20
- package/dist/Hyperttp/Core/RateLimiter.d.ts.map +1 -1
- package/dist/Hyperttp/Core/RateLimiter.js +65 -44
- package/dist/Hyperttp/Core/RateLimiter.js.map +1 -1
- package/dist/Hyperttp/Core/RequestBuilder.d.ts +48 -64
- package/dist/Hyperttp/Core/RequestBuilder.d.ts.map +1 -1
- package/dist/Hyperttp/Core/RequestBuilder.js +87 -99
- package/dist/Hyperttp/Core/RequestBuilder.js.map +1 -1
- package/dist/Hyperttp/Core/RequestExecutor.d.ts +58 -0
- package/dist/Hyperttp/Core/RequestExecutor.d.ts.map +1 -0
- package/dist/Hyperttp/Core/RequestExecutor.js +160 -0
- package/dist/Hyperttp/Core/RequestExecutor.js.map +1 -0
- package/dist/Hyperttp/Core/ResponseTransformer.d.ts +35 -0
- package/dist/Hyperttp/Core/ResponseTransformer.d.ts.map +1 -0
- package/dist/Hyperttp/Core/ResponseTransformer.js +171 -0
- package/dist/Hyperttp/Core/ResponseTransformer.js.map +1 -0
- package/dist/Hyperttp/Core/index.d.ts +7 -1
- package/dist/Hyperttp/Core/index.d.ts.map +1 -1
- package/dist/Hyperttp/Core/index.js +17 -5
- package/dist/Hyperttp/Core/index.js.map +1 -1
- package/dist/Hyperttp/Request.d.ts +5 -0
- package/dist/Hyperttp/Request.d.ts.map +1 -1
- package/dist/Hyperttp/Request.js +17 -35
- package/dist/Hyperttp/Request.js.map +1 -1
- package/dist/Hyperttp/UrlExtractor.d.ts +1 -1
- package/dist/Hyperttp/UrlExtractor.d.ts.map +1 -1
- package/dist/Hyperttp/UrlExtractor.js.map +1 -1
- package/dist/Hyperttp/index.d.ts +3 -1
- package/dist/Hyperttp/index.d.ts.map +1 -1
- package/dist/Hyperttp/index.js +6 -1
- package/dist/Hyperttp/index.js.map +1 -1
- package/dist/Types/index.d.ts +45 -206
- package/dist/Types/index.d.ts.map +1 -1
- package/dist/Types/index.js +7 -16
- package/dist/Types/index.js.map +1 -1
- package/dist/Types/request.d.ts +15 -100
- package/dist/Types/request.d.ts.map +1 -1
- package/dist/Types/request.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,50 +1,70 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* @interface RateLimiterConfig
|
|
3
|
+
* @en Configuration for the token bucket rate limiter.
|
|
4
|
+
* @ru Конфигурация для ограничителя частоты запросов (алгоритм Token Bucket).
|
|
3
5
|
*/
|
|
4
6
|
export interface RateLimiterConfig {
|
|
5
|
-
/** Maximum number of requests allowed within the
|
|
7
|
+
/** * @en Maximum number of requests allowed within the window.
|
|
8
|
+
* @ru Максимальное количество запросов, разрешенных в пределах окна.
|
|
9
|
+
* @default 100
|
|
10
|
+
*/
|
|
6
11
|
maxRequests?: number;
|
|
7
|
-
/** Time window in milliseconds
|
|
12
|
+
/** * @en Time window in milliseconds.
|
|
13
|
+
* @ru Временное окно в миллисекундах.
|
|
14
|
+
* @default 60000 (1 minute)
|
|
15
|
+
*/
|
|
8
16
|
windowMs?: number;
|
|
9
|
-
/** Maximum array size before aggressive cleanup (default: maxRequests * 2) */
|
|
10
|
-
maxArraySize?: number;
|
|
11
17
|
}
|
|
12
18
|
/**
|
|
13
|
-
*
|
|
19
|
+
* @class RateLimiter
|
|
20
|
+
* @en Smooth rate limiting using the Token Bucket algorithm.
|
|
21
|
+
* Allows for short bursts while maintaining a steady long-term rate.
|
|
22
|
+
* @ru Плавное ограничение частоты запросов с использованием алгоритма Token Bucket.
|
|
23
|
+
* Позволяет кратковременные всплески, сохраняя стабильную скорость в долгосрочной перспективе.
|
|
14
24
|
*/
|
|
15
25
|
export declare class RateLimiter {
|
|
16
|
-
private
|
|
26
|
+
private tokens;
|
|
27
|
+
private lastRefill;
|
|
17
28
|
private readonly max;
|
|
18
29
|
private readonly window;
|
|
19
|
-
private readonly
|
|
30
|
+
private readonly refillRate;
|
|
20
31
|
constructor(config?: RateLimiterConfig);
|
|
21
32
|
/**
|
|
22
|
-
*
|
|
33
|
+
* @en Waits until enough tokens are available and consumes them.
|
|
34
|
+
* @ru Ожидает появления достаточного количества токенов и потребляет их.
|
|
35
|
+
* @param tokensNeeded - Number of tokens to consume (default: 1)
|
|
36
|
+
*/
|
|
37
|
+
wait(tokensNeeded?: number): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* @en Attempts to consume tokens immediately.
|
|
40
|
+
* @ru Пытается немедленно потребить токены.
|
|
41
|
+
* @returns true if tokens were consumed, false otherwise (limit exceeded).
|
|
23
42
|
*/
|
|
24
|
-
|
|
43
|
+
tryConsume(tokensNeeded?: number): boolean;
|
|
25
44
|
/**
|
|
26
|
-
*
|
|
45
|
+
* @en Internal method to refill the bucket based on elapsed time.
|
|
46
|
+
* @ru Внутренний метод для пополнения корзины на основе прошедшего времени.
|
|
27
47
|
*/
|
|
28
|
-
|
|
48
|
+
private refill;
|
|
29
49
|
/**
|
|
30
|
-
*
|
|
50
|
+
* @en Returns the number of currently "used" slots.
|
|
51
|
+
* @ru Возвращает количество текущих "занятых" слотов.
|
|
31
52
|
*/
|
|
32
53
|
get currentCount(): number;
|
|
33
54
|
/**
|
|
34
|
-
*
|
|
55
|
+
* @en Returns how many requests can be made right now.
|
|
56
|
+
* @ru Возвращает количество запросов, которые можно выполнить прямо сейчас.
|
|
35
57
|
*/
|
|
36
58
|
get remainingRequests(): number;
|
|
37
59
|
/**
|
|
38
|
-
*
|
|
60
|
+
* @en Estimated time in ms until the next token is available.
|
|
61
|
+
* @ru Ожидаемое время в мс до появления следующего токена.
|
|
39
62
|
*/
|
|
40
63
|
get timeToReset(): number;
|
|
41
64
|
/**
|
|
42
|
-
*
|
|
65
|
+
* @en Instantly refills the bucket to its maximum capacity.
|
|
66
|
+
* @ru Мгновенно пополняет корзину до максимальной емкости.
|
|
43
67
|
*/
|
|
44
68
|
reset(): void;
|
|
45
|
-
/**
|
|
46
|
-
* Removes a specific timestamp (для removeToken pattern)
|
|
47
|
-
*/
|
|
48
|
-
removeToken(timestamp: number): boolean;
|
|
49
69
|
}
|
|
50
70
|
//# sourceMappingURL=RateLimiter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RateLimiter.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"RateLimiter.d.ts","sourceRoot":"","sources":["../../../src/Hyperttp/Core/RateLimiter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;GAMG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,MAAM,CAAC,EAAE,iBAAiB;IAQtC;;;;OAIG;IACG,IAAI,CAAC,YAAY,SAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB3C;;;;OAIG;IACH,UAAU,CAAC,YAAY,SAAI,GAAG,OAAO;IAUrC;;;OAGG;IACH,OAAO,CAAC,MAAM;IASd;;;OAGG;IACH,IAAI,YAAY,IAAI,MAAM,CAGzB;IAED;;;OAGG;IACH,IAAI,iBAAiB,IAAI,MAAM,CAG9B;IAED;;;OAGG;IACH,IAAI,WAAW,IAAI,MAAM,CAMxB;IAED;;;OAGG;IACH,KAAK,IAAI,IAAI;CAId"}
|
|
@@ -2,83 +2,104 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.RateLimiter = void 0;
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* @class RateLimiter
|
|
6
|
+
* @en Smooth rate limiting using the Token Bucket algorithm.
|
|
7
|
+
* Allows for short bursts while maintaining a steady long-term rate.
|
|
8
|
+
* @ru Плавное ограничение частоты запросов с использованием алгоритма Token Bucket.
|
|
9
|
+
* Позволяет кратковременные всплески, сохраняя стабильную скорость в долгосрочной перспективе.
|
|
6
10
|
*/
|
|
7
11
|
class RateLimiter {
|
|
8
|
-
|
|
12
|
+
tokens;
|
|
13
|
+
lastRefill;
|
|
9
14
|
max;
|
|
10
15
|
window;
|
|
11
|
-
|
|
16
|
+
refillRate; // tokens per ms
|
|
12
17
|
constructor(config) {
|
|
13
18
|
this.max = Math.max(1, config?.maxRequests ?? 100);
|
|
14
19
|
this.window = Math.max(1, config?.windowMs ?? 60_000);
|
|
15
|
-
this.
|
|
20
|
+
this.refillRate = this.max / this.window;
|
|
21
|
+
this.tokens = this.max;
|
|
22
|
+
this.lastRefill = Date.now();
|
|
16
23
|
}
|
|
17
24
|
/**
|
|
18
|
-
*
|
|
25
|
+
* @en Waits until enough tokens are available and consumes them.
|
|
26
|
+
* @ru Ожидает появления достаточного количества токенов и потребляет их.
|
|
27
|
+
* @param tokensNeeded - Number of tokens to consume (default: 1)
|
|
19
28
|
*/
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
29
|
+
async wait(tokensNeeded = 1) {
|
|
30
|
+
this.refill();
|
|
31
|
+
tokensNeeded = Math.max(1, tokensNeeded);
|
|
32
|
+
if (this.tokens >= tokensNeeded) {
|
|
33
|
+
this.tokens -= tokensNeeded;
|
|
24
34
|
return;
|
|
25
35
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
36
|
+
const deficit = tokensNeeded - this.tokens;
|
|
37
|
+
const waitTimeMs = Math.ceil(deficit / this.refillRate);
|
|
38
|
+
// Приостанавливаем выполнение на расчетное время
|
|
39
|
+
await new Promise((resolve) => setTimeout(resolve, waitTimeMs));
|
|
40
|
+
this.refill();
|
|
41
|
+
this.tokens -= tokensNeeded;
|
|
42
|
+
this.tokens = Math.max(0, this.tokens);
|
|
30
43
|
}
|
|
31
44
|
/**
|
|
32
|
-
*
|
|
45
|
+
* @en Attempts to consume tokens immediately.
|
|
46
|
+
* @ru Пытается немедленно потребить токены.
|
|
47
|
+
* @returns true if tokens were consumed, false otherwise (limit exceeded).
|
|
33
48
|
*/
|
|
34
|
-
|
|
35
|
-
this.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
49
|
+
tryConsume(tokensNeeded = 1) {
|
|
50
|
+
this.refill();
|
|
51
|
+
tokensNeeded = Math.max(1, tokensNeeded);
|
|
52
|
+
if (this.tokens >= tokensNeeded) {
|
|
53
|
+
this.tokens -= tokensNeeded;
|
|
54
|
+
return true;
|
|
41
55
|
}
|
|
42
|
-
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* @en Internal method to refill the bucket based on elapsed time.
|
|
60
|
+
* @ru Внутренний метод для пополнения корзины на основе прошедшего времени.
|
|
61
|
+
*/
|
|
62
|
+
refill() {
|
|
63
|
+
const now = Date.now();
|
|
64
|
+
const elapsedMs = now - this.lastRefill;
|
|
65
|
+
const newTokens = elapsedMs * this.refillRate;
|
|
66
|
+
this.tokens = Math.min(this.max, this.tokens + newTokens);
|
|
67
|
+
this.lastRefill = now;
|
|
43
68
|
}
|
|
44
69
|
/**
|
|
45
|
-
*
|
|
70
|
+
* @en Returns the number of currently "used" slots.
|
|
71
|
+
* @ru Возвращает количество текущих "занятых" слотов.
|
|
46
72
|
*/
|
|
47
73
|
get currentCount() {
|
|
48
|
-
this.
|
|
49
|
-
return this.
|
|
74
|
+
this.refill();
|
|
75
|
+
return Math.floor(this.max - this.tokens);
|
|
50
76
|
}
|
|
51
77
|
/**
|
|
52
|
-
*
|
|
78
|
+
* @en Returns how many requests can be made right now.
|
|
79
|
+
* @ru Возвращает количество запросов, которые можно выполнить прямо сейчас.
|
|
53
80
|
*/
|
|
54
81
|
get remainingRequests() {
|
|
55
|
-
|
|
82
|
+
this.refill();
|
|
83
|
+
return Math.floor(this.tokens);
|
|
56
84
|
}
|
|
57
85
|
/**
|
|
58
|
-
*
|
|
86
|
+
* @en Estimated time in ms until the next token is available.
|
|
87
|
+
* @ru Ожидаемое время в мс до появления следующего токена.
|
|
59
88
|
*/
|
|
60
89
|
get timeToReset() {
|
|
61
|
-
|
|
90
|
+
this.refill();
|
|
91
|
+
if (this.tokens >= 1)
|
|
62
92
|
return 0;
|
|
63
|
-
const
|
|
64
|
-
return
|
|
93
|
+
const deficitToOne = 1 - this.tokens;
|
|
94
|
+
return Math.max(0, Math.ceil(deficitToOne / this.refillRate));
|
|
65
95
|
}
|
|
66
96
|
/**
|
|
67
|
-
*
|
|
97
|
+
* @en Instantly refills the bucket to its maximum capacity.
|
|
98
|
+
* @ru Мгновенно пополняет корзину до максимальной емкости.
|
|
68
99
|
*/
|
|
69
100
|
reset() {
|
|
70
|
-
this.
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Removes a specific timestamp (для removeToken pattern)
|
|
74
|
-
*/
|
|
75
|
-
removeToken(timestamp) {
|
|
76
|
-
const index = this.timestamps.indexOf(timestamp);
|
|
77
|
-
if (index > -1) {
|
|
78
|
-
this.timestamps.splice(index, 1);
|
|
79
|
-
return true;
|
|
80
|
-
}
|
|
81
|
-
return false;
|
|
101
|
+
this.tokens = this.max;
|
|
102
|
+
this.lastRefill = Date.now();
|
|
82
103
|
}
|
|
83
104
|
}
|
|
84
105
|
exports.RateLimiter = RateLimiter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RateLimiter.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"RateLimiter.js","sourceRoot":"","sources":["../../../src/Hyperttp/Core/RateLimiter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
+
import HttpClientImproved from "./HttpClientImproved";
|
|
1
2
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* @example
|
|
3
|
+
* @class RequestBuilder
|
|
4
|
+
* @en Fluent request builder for creating HTTP requests with a chainable API.
|
|
5
|
+
* @ru Fluent request builder для создания HTTP-запросов. Позволяет собирать параметры запроса в цепочку.
|
|
6
|
+
* * @example
|
|
6
7
|
* ```ts
|
|
7
|
-
* const
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* .send();
|
|
8
|
+
* const user = await client.request('[https://api.example.com/users](https://api.example.com/users)')
|
|
9
|
+
* .post()
|
|
10
|
+
* .jsonBody({ name: 'John' })
|
|
11
|
+
* .headers({ 'X-Custom-Header': 'value' })
|
|
12
|
+
* .send();
|
|
13
13
|
* ```
|
|
14
14
|
*/
|
|
15
15
|
export declare class RequestBuilder<T = any> {
|
|
@@ -18,79 +18,63 @@ export declare class RequestBuilder<T = any> {
|
|
|
18
18
|
private _headers;
|
|
19
19
|
private _body?;
|
|
20
20
|
private _responseType;
|
|
21
|
+
private _client;
|
|
22
|
+
private _signal?;
|
|
23
|
+
constructor(url: string, client: HttpClientImproved);
|
|
21
24
|
/**
|
|
22
|
-
*
|
|
23
|
-
* @
|
|
24
|
-
*/
|
|
25
|
-
constructor(url: string);
|
|
26
|
-
/**
|
|
27
|
-
* Sets HTTP headers for the request.
|
|
28
|
-
* @param headers - Object containing header key-value pairs
|
|
29
|
-
* @returns The builder instance for chaining
|
|
25
|
+
* @en Appends multiple headers to the request.
|
|
26
|
+
* @ru Добавляет несколько заголовков к запросу.
|
|
30
27
|
*/
|
|
31
28
|
headers(headers: Record<string, string>): this;
|
|
32
29
|
/**
|
|
33
|
-
* Sets the request body
|
|
34
|
-
* @
|
|
35
|
-
* @returns The builder instance for chaining
|
|
30
|
+
* @en Sets the request body.
|
|
31
|
+
* @ru Устанавливает тело запроса.
|
|
36
32
|
*/
|
|
37
33
|
body(bodyData: any): this;
|
|
38
34
|
/**
|
|
39
|
-
* Sets the
|
|
40
|
-
* @
|
|
41
|
-
*/
|
|
42
|
-
json(): this;
|
|
43
|
-
/**
|
|
44
|
-
* Sets the response type to plain text.
|
|
45
|
-
* @returns The builder instance for chaining
|
|
46
|
-
*/
|
|
47
|
-
text(): this;
|
|
48
|
-
/**
|
|
49
|
-
* Sets the response type to XML.
|
|
50
|
-
* @returns The builder instance for chaining
|
|
35
|
+
* @en Sets the body and ensures Content-Type is application/json.
|
|
36
|
+
* @ru Устанавливает тело запроса и заголовок Content-Type: application/json.
|
|
51
37
|
*/
|
|
52
|
-
|
|
38
|
+
jsonBody<B>(body: B): this;
|
|
53
39
|
/**
|
|
54
|
-
*
|
|
55
|
-
* @
|
|
40
|
+
* @en Adds URL query parameters.
|
|
41
|
+
* @ru Добавляет параметры запроса в URL (search params).
|
|
56
42
|
*/
|
|
43
|
+
query(params: Record<string, string | number | boolean>): this;
|
|
44
|
+
/** @en Set method to POST */
|
|
57
45
|
post(): this;
|
|
58
|
-
/**
|
|
59
|
-
* @ru Устанавливает потоковый режим ответа.
|
|
60
|
-
* @en Sets streaming response mode.
|
|
61
|
-
*/
|
|
62
|
-
stream(): this;
|
|
63
|
-
/**
|
|
64
|
-
* Sets the HTTP method to PUT.
|
|
65
|
-
* @returns The builder instance for chaining
|
|
66
|
-
*/
|
|
46
|
+
/** @en Set method to PUT */
|
|
67
47
|
put(): this;
|
|
68
|
-
/**
|
|
69
|
-
* Sets the HTTP method to PATCH.
|
|
70
|
-
* @returns The builder instance for chaining
|
|
71
|
-
*/
|
|
48
|
+
/** @en Set method to PATCH */
|
|
72
49
|
patch(): this;
|
|
73
|
-
/**
|
|
74
|
-
* Sets the HTTP method to DELETE.
|
|
75
|
-
* @returns The builder instance for chaining
|
|
76
|
-
*/
|
|
50
|
+
/** @en Set method to DELETE */
|
|
77
51
|
delete(): this;
|
|
52
|
+
/** @en Set method to HEAD */
|
|
53
|
+
head(): this;
|
|
54
|
+
/** @en Set response type to JSON */
|
|
55
|
+
json(): this;
|
|
56
|
+
/** @en Set response type to Plain Text */
|
|
57
|
+
text(): this;
|
|
58
|
+
/** @en Set response type to XML */
|
|
59
|
+
xml(): this;
|
|
60
|
+
/** @en Set response type to Buffer */
|
|
61
|
+
buffer(): this;
|
|
62
|
+
/** @en Set response type to Stream (AsyncIterable) */
|
|
63
|
+
stream(): this;
|
|
78
64
|
/**
|
|
79
|
-
*
|
|
80
|
-
* @
|
|
81
|
-
* @returns The builder instance for chaining
|
|
65
|
+
* @en Attaches an external AbortSignal for manual cancellation.
|
|
66
|
+
* @ru Привязывает внешний AbortSignal для ручной отмены запроса.
|
|
82
67
|
*/
|
|
83
|
-
|
|
68
|
+
signal(signal: AbortSignal): this;
|
|
84
69
|
/**
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
* @param body - The JSON body data
|
|
88
|
-
* @returns The builder instance for chaining
|
|
70
|
+
* @en Creates a timeout signal for this specific request.
|
|
71
|
+
* @ru Устанавливает таймаут для конкретно этого запроса.
|
|
89
72
|
*/
|
|
90
|
-
|
|
73
|
+
timeout(ms: number): this;
|
|
91
74
|
/**
|
|
92
|
-
*
|
|
93
|
-
* @
|
|
75
|
+
* @en Finalizes and sends the request.
|
|
76
|
+
* @ru Финализирует и отправляет запрос.
|
|
77
|
+
* @returns Promise resolving to the expected type T or StreamResponse.
|
|
94
78
|
*/
|
|
95
79
|
send(): Promise<T>;
|
|
96
80
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RequestBuilder.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"RequestBuilder.d.ts","sourceRoot":"","sources":["../../../src/Hyperttp/Core/RequestBuilder.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AAEtD;;;;;;;;;;;;GAYG;AACH,qBAAa,cAAc,CAAC,CAAC,GAAG,GAAG;IACjC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,OAAO,CAA+D;IAC9E,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,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,CAAC,CAAC;CA2BzB"}
|