hyperttp 0.2.2 → 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.
Files changed (41) hide show
  1. package/dist/Hyperttp/Core/CacheManager.d.ts +26 -2
  2. package/dist/Hyperttp/Core/CacheManager.d.ts.map +1 -1
  3. package/dist/Hyperttp/Core/CacheManager.js +30 -13
  4. package/dist/Hyperttp/Core/CacheManager.js.map +1 -1
  5. package/dist/Hyperttp/Core/HttpClientImproved.d.ts +68 -98
  6. package/dist/Hyperttp/Core/HttpClientImproved.d.ts.map +1 -1
  7. package/dist/Hyperttp/Core/HttpClientImproved.js +313 -631
  8. package/dist/Hyperttp/Core/HttpClientImproved.js.map +1 -1
  9. package/dist/Hyperttp/Core/InterceptorManager.d.ts +62 -0
  10. package/dist/Hyperttp/Core/InterceptorManager.d.ts.map +1 -0
  11. package/dist/Hyperttp/Core/InterceptorManager.js +64 -0
  12. package/dist/Hyperttp/Core/InterceptorManager.js.map +1 -0
  13. package/dist/Hyperttp/Core/MetricsManager.d.ts +50 -2
  14. package/dist/Hyperttp/Core/MetricsManager.d.ts.map +1 -1
  15. package/dist/Hyperttp/Core/MetricsManager.js +48 -4
  16. package/dist/Hyperttp/Core/MetricsManager.js.map +1 -1
  17. package/dist/Hyperttp/Core/QueueManager.d.ts +5 -40
  18. package/dist/Hyperttp/Core/QueueManager.d.ts.map +1 -1
  19. package/dist/Hyperttp/Core/QueueManager.js +41 -54
  20. package/dist/Hyperttp/Core/QueueManager.js.map +1 -1
  21. package/dist/Hyperttp/Core/RateLimiter.d.ts +50 -0
  22. package/dist/Hyperttp/Core/RateLimiter.d.ts.map +1 -1
  23. package/dist/Hyperttp/Core/RateLimiter.js +39 -1
  24. package/dist/Hyperttp/Core/RateLimiter.js.map +1 -1
  25. package/dist/Hyperttp/Core/RequestBuilder.d.ts +44 -73
  26. package/dist/Hyperttp/Core/RequestBuilder.d.ts.map +1 -1
  27. package/dist/Hyperttp/Core/RequestBuilder.js +71 -106
  28. package/dist/Hyperttp/Core/RequestBuilder.js.map +1 -1
  29. package/dist/Hyperttp/Core/RequestExecutor.d.ts +58 -0
  30. package/dist/Hyperttp/Core/RequestExecutor.d.ts.map +1 -0
  31. package/dist/Hyperttp/Core/RequestExecutor.js +160 -0
  32. package/dist/Hyperttp/Core/RequestExecutor.js.map +1 -0
  33. package/dist/Hyperttp/Core/ResponseTransformer.d.ts +35 -0
  34. package/dist/Hyperttp/Core/ResponseTransformer.d.ts.map +1 -0
  35. package/dist/Hyperttp/Core/ResponseTransformer.js +171 -0
  36. package/dist/Hyperttp/Core/ResponseTransformer.js.map +1 -0
  37. package/dist/Hyperttp/Core/index.d.ts +3 -0
  38. package/dist/Hyperttp/Core/index.d.ts.map +1 -1
  39. package/dist/Hyperttp/Core/index.js +7 -1
  40. package/dist/Hyperttp/Core/index.js.map +1 -1
  41. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"QueueManager.js","sourceRoot":"","sources":["../../../src/Hyperttp/Core/QueueManager.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;GAUG;AACH,MAAa,YAAY;IAQH;IAPZ,KAAK,GAAmB,EAAE,CAAC;IAC3B,OAAO,GAAG,CAAC,CAAC;IAEpB;;;OAGG;IACH,YAAoB,gBAAgB,EAAE;QAAlB,kBAAa,GAAb,aAAa,CAAK;IAAG,CAAC;IAE1C;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,OAAO,CAAI,QAA0B;QACzC,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACtC,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBAClC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC;YACH,OAAO,MAAM,QAAQ,EAAE,CAAC;QAC1B,CAAC;gBAAS,CAAC;YACT,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YAChC,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,EAAE,CAAC;YACT,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;;OAGG;IACH,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;CACF;AA9DD,oCA8DC"}
1
+ {"version":3,"file":"QueueManager.js","sourceRoot":"","sources":["../../../src/Hyperttp/Core/QueueManager.ts"],"names":[],"mappings":";;;AAOA,MAAa,YAAY;IAOH;IANZ,OAAO,GAAG,CAAC,CAAC;IACZ,IAAI,GAAG,CAAC,CAAC;IAET,IAAI,GAAqB,IAAI,CAAC;IAC9B,IAAI,GAAqB,IAAI,CAAC;IAEtC,YAAoB,gBAAgB,EAAE;QAAlB,kBAAa,GAAb,aAAa,CAAK;IAAG,CAAC;IAE1C,KAAK,CAAC,OAAO,CAAI,QAA0B;QACzC,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxC,MAAM,OAAO,GAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YAErE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACf,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;gBACpB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;gBACzB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;YACtB,CAAC;YACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,OAAO,CACnB,QAA0B,EAC1B,OAAwB,EACxB,MAAyB;QAEzB,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,QAAQ,EAAE,CAAC;YAChC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;YAClB,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;YAChB,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAEO,YAAY;QAClB,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACtD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAEvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACnB,CAAC;YAED,IAAI,CAAC,IAAI,EAAE,CAAC;YAEZ,cAAc,CAAC,GAAG,EAAE;gBAClB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACzD,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;CACF;AAvED,oCAuEC"}
@@ -1,7 +1,27 @@
1
+ /**
2
+ * @interface RateLimiterConfig
3
+ * @en Configuration for the token bucket rate limiter.
4
+ * @ru Конфигурация для ограничителя частоты запросов (алгоритм Token Bucket).
5
+ */
1
6
  export interface RateLimiterConfig {
7
+ /** * @en Maximum number of requests allowed within the window.
8
+ * @ru Максимальное количество запросов, разрешенных в пределах окна.
9
+ * @default 100
10
+ */
2
11
  maxRequests?: number;
12
+ /** * @en Time window in milliseconds.
13
+ * @ru Временное окно в миллисекундах.
14
+ * @default 60000 (1 minute)
15
+ */
3
16
  windowMs?: number;
4
17
  }
18
+ /**
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
+ * Позволяет кратковременные всплески, сохраняя стабильную скорость в долгосрочной перспективе.
24
+ */
5
25
  export declare class RateLimiter {
6
26
  private tokens;
7
27
  private lastRefill;
@@ -9,12 +29,42 @@ export declare class RateLimiter {
9
29
  private readonly window;
10
30
  private readonly refillRate;
11
31
  constructor(config?: RateLimiterConfig);
32
+ /**
33
+ * @en Waits until enough tokens are available and consumes them.
34
+ * @ru Ожидает появления достаточного количества токенов и потребляет их.
35
+ * @param tokensNeeded - Number of tokens to consume (default: 1)
36
+ */
12
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).
42
+ */
13
43
  tryConsume(tokensNeeded?: number): boolean;
44
+ /**
45
+ * @en Internal method to refill the bucket based on elapsed time.
46
+ * @ru Внутренний метод для пополнения корзины на основе прошедшего времени.
47
+ */
14
48
  private refill;
49
+ /**
50
+ * @en Returns the number of currently "used" slots.
51
+ * @ru Возвращает количество текущих "занятых" слотов.
52
+ */
15
53
  get currentCount(): number;
54
+ /**
55
+ * @en Returns how many requests can be made right now.
56
+ * @ru Возвращает количество запросов, которые можно выполнить прямо сейчас.
57
+ */
16
58
  get remainingRequests(): number;
59
+ /**
60
+ * @en Estimated time in ms until the next token is available.
61
+ * @ru Ожидаемое время в мс до появления следующего токена.
62
+ */
17
63
  get timeToReset(): number;
64
+ /**
65
+ * @en Instantly refills the bucket to its maximum capacity.
66
+ * @ru Мгновенно пополняет корзину до максимальной емкости.
67
+ */
18
68
  reset(): void;
19
69
  }
20
70
  //# sourceMappingURL=RateLimiter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RateLimiter.d.ts","sourceRoot":"","sources":["../../../src/Hyperttp/Core/RateLimiter.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,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;IAQhC,IAAI,CAAC,YAAY,SAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB3C,UAAU,CAAC,YAAY,SAAI,GAAG,OAAO;IAUrC,OAAO,CAAC,MAAM;IASd,IAAI,YAAY,IAAI,MAAM,CAGzB;IAED,IAAI,iBAAiB,IAAI,MAAM,CAG9B;IAED,IAAI,WAAW,IAAI,MAAM,CAMxB;IAED,KAAK,IAAI,IAAI;CAId"}
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"}
@@ -1,6 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RateLimiter = void 0;
4
+ /**
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
+ * Позволяет кратковременные всплески, сохраняя стабильную скорость в долгосрочной перспективе.
10
+ */
4
11
  class RateLimiter {
5
12
  tokens;
6
13
  lastRefill;
@@ -14,6 +21,11 @@ class RateLimiter {
14
21
  this.tokens = this.max;
15
22
  this.lastRefill = Date.now();
16
23
  }
24
+ /**
25
+ * @en Waits until enough tokens are available and consumes them.
26
+ * @ru Ожидает появления достаточного количества токенов и потребляет их.
27
+ * @param tokensNeeded - Number of tokens to consume (default: 1)
28
+ */
17
29
  async wait(tokensNeeded = 1) {
18
30
  this.refill();
19
31
  tokensNeeded = Math.max(1, tokensNeeded);
@@ -23,11 +35,17 @@ class RateLimiter {
23
35
  }
24
36
  const deficit = tokensNeeded - this.tokens;
25
37
  const waitTimeMs = Math.ceil(deficit / this.refillRate);
38
+ // Приостанавливаем выполнение на расчетное время
26
39
  await new Promise((resolve) => setTimeout(resolve, waitTimeMs));
27
40
  this.refill();
28
41
  this.tokens -= tokensNeeded;
29
42
  this.tokens = Math.max(0, this.tokens);
30
43
  }
44
+ /**
45
+ * @en Attempts to consume tokens immediately.
46
+ * @ru Пытается немедленно потребить токены.
47
+ * @returns true if tokens were consumed, false otherwise (limit exceeded).
48
+ */
31
49
  tryConsume(tokensNeeded = 1) {
32
50
  this.refill();
33
51
  tokensNeeded = Math.max(1, tokensNeeded);
@@ -37,6 +55,10 @@ class RateLimiter {
37
55
  }
38
56
  return false;
39
57
  }
58
+ /**
59
+ * @en Internal method to refill the bucket based on elapsed time.
60
+ * @ru Внутренний метод для пополнения корзины на основе прошедшего времени.
61
+ */
40
62
  refill() {
41
63
  const now = Date.now();
42
64
  const elapsedMs = now - this.lastRefill;
@@ -44,21 +66,37 @@ class RateLimiter {
44
66
  this.tokens = Math.min(this.max, this.tokens + newTokens);
45
67
  this.lastRefill = now;
46
68
  }
69
+ /**
70
+ * @en Returns the number of currently "used" slots.
71
+ * @ru Возвращает количество текущих "занятых" слотов.
72
+ */
47
73
  get currentCount() {
48
74
  this.refill();
49
75
  return Math.floor(this.max - this.tokens);
50
76
  }
77
+ /**
78
+ * @en Returns how many requests can be made right now.
79
+ * @ru Возвращает количество запросов, которые можно выполнить прямо сейчас.
80
+ */
51
81
  get remainingRequests() {
52
82
  this.refill();
53
83
  return Math.floor(this.tokens);
54
84
  }
85
+ /**
86
+ * @en Estimated time in ms until the next token is available.
87
+ * @ru Ожидаемое время в мс до появления следующего токена.
88
+ */
55
89
  get timeToReset() {
56
90
  this.refill();
57
91
  if (this.tokens >= 1)
58
92
  return 0;
59
93
  const deficitToOne = 1 - this.tokens;
60
- return Math.ceil(deficitToOne / this.refillRate);
94
+ return Math.max(0, Math.ceil(deficitToOne / this.refillRate));
61
95
  }
96
+ /**
97
+ * @en Instantly refills the bucket to its maximum capacity.
98
+ * @ru Мгновенно пополняет корзину до максимальной емкости.
99
+ */
62
100
  reset() {
63
101
  this.tokens = this.max;
64
102
  this.lastRefill = Date.now();
@@ -1 +1 @@
1
- {"version":3,"file":"RateLimiter.js","sourceRoot":"","sources":["../../../src/Hyperttp/Core/RateLimiter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RateLimiter.js","sourceRoot":"","sources":["../../../src/Hyperttp/Core/RateLimiter.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,15 @@
1
- import { StreamResponse } from "../../Types";
2
1
  import HttpClientImproved from "./HttpClientImproved";
3
2
  /**
4
- * Fluent request builder for making HTTP requests with a chainable API.
5
- * Provides a convenient way to build and send HTTP requests with various options.
6
- *
7
- * @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
8
7
  * ```ts
9
- * const client = new HttpClientImproved();
10
- * const response = await client.request('https://api.example.com/data')
11
- * .headers({ 'Authorization': 'Bearer token' })
12
- * .query({ limit: 10, offset: 0 })
13
- * .json()
14
- * .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();
15
13
  * ```
16
14
  */
17
15
  export declare class RequestBuilder<T = any> {
@@ -20,91 +18,64 @@ export declare class RequestBuilder<T = any> {
20
18
  private _headers;
21
19
  private _body?;
22
20
  private _responseType;
23
- private _client?;
21
+ private _client;
24
22
  private _signal?;
23
+ constructor(url: string, client: HttpClientImproved);
25
24
  /**
26
- * Creates a new request builder for the specified URL.
27
- * @param url - The target URL for the request
28
- */
29
- constructor(url: string, client?: HttpClientImproved);
30
- /**
31
- * Sets HTTP headers for the request.
32
- * @param headers - Object containing header key-value pairs
33
- * @returns The builder instance for chaining
25
+ * @en Appends multiple headers to the request.
26
+ * @ru Добавляет несколько заголовков к запросу.
34
27
  */
35
28
  headers(headers: Record<string, string>): this;
36
29
  /**
37
- * Sets the request body data.
38
- * @param bodyData - The body data to send with the request
39
- * @returns The builder instance for chaining
30
+ * @en Sets the request body.
31
+ * @ru Устанавливает тело запроса.
40
32
  */
41
33
  body(bodyData: any): this;
42
34
  /**
43
- * Sets the response type to JSON.
44
- * @returns The builder instance for chaining
35
+ * @en Sets the body and ensures Content-Type is application/json.
36
+ * @ru Устанавливает тело запроса и заголовок Content-Type: application/json.
45
37
  */
46
- json(): this;
38
+ jsonBody<B>(body: B): this;
47
39
  /**
48
- * Sets the response type to plain text.
49
- * @returns The builder instance for chaining
50
- */
51
- text(): this;
52
- /**
53
- * Sets the response type to XML.
54
- * @returns The builder instance for chaining
55
- */
56
- xml(): this;
57
- /**
58
- * Sets the HTTP method to POST.
59
- * @returns The builder instance for chaining
40
+ * @en Adds URL query parameters.
41
+ * @ru Добавляет параметры запроса в URL (search params).
60
42
  */
43
+ query(params: Record<string, string | number | boolean>): this;
44
+ /** @en Set method to POST */
61
45
  post(): this;
62
- /**
63
- * @ru Выполняет запрос в режиме потока.
64
- * @en Executes the request in streaming mode.
65
- */
66
- stream(): Promise<StreamResponse>;
67
- /**
68
- * Sets the HTTP method to PUT.
69
- * @returns The builder instance for chaining
70
- */
46
+ /** @en Set method to PUT */
71
47
  put(): this;
72
- /**
73
- * Sets the HTTP method to PATCH.
74
- * @returns The builder instance for chaining
75
- */
48
+ /** @en Set method to PATCH */
76
49
  patch(): this;
77
- /**
78
- * Sets the HTTP method to DELETE.
79
- * @returns The builder instance for chaining
80
- */
50
+ /** @en Set method to DELETE */
81
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;
82
64
  /**
83
- * Adds query parameters to the URL.
84
- * @param params - Object containing query parameter key-value pairs
85
- * @returns The builder instance for chaining
86
- */
87
- query(params: Record<string, string | number | boolean>): this;
88
- /**
89
- * Sets a JSON body for the request.
90
- * Automatically sets the Content-Type header to application/json.
91
- * @param body - The JSON body data
92
- * @returns The builder instance for chaining
93
- */
94
- jsonBody<T>(body: T): this;
95
- /**
96
- * @ru Устанавливает AbortSignal для отмены запроса.
65
+ * @en Attaches an external AbortSignal for manual cancellation.
66
+ * @ru Привязывает внешний AbortSignal для ручной отмены запроса.
97
67
  */
98
68
  signal(signal: AbortSignal): this;
99
69
  /**
100
- * @ru Устанавливает специфичный таймаут для этого запроса.
70
+ * @en Creates a timeout signal for this specific request.
71
+ * @ru Устанавливает таймаут для конкретно этого запроса.
101
72
  */
102
73
  timeout(ms: number): this;
103
74
  /**
104
- * Sends the HTTP request and returns the response.
105
- * @returns Promise resolving to the response data
75
+ * @en Finalizes and sends the request.
76
+ * @ru Финализирует и отправляет запрос.
77
+ * @returns Promise resolving to the expected type T or StreamResponse.
106
78
  */
107
79
  send(): Promise<T>;
108
- private ensureClient;
109
80
  }
110
81
  //# sourceMappingURL=RequestBuilder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RequestBuilder.d.ts","sourceRoot":"","sources":["../../../src/Hyperttp/Core/RequestBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AAItD;;;;;;;;;;;;;GAaG;AACH,qBAAa,cAAc,CAAC,CAAC,GAAG,GAAG;IACjC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,OAAO,CAAsD;IACrE,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,KAAK,CAAC,CAAM;IACpB,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,OAAO,CAAC,CAAqB;IACrC,OAAO,CAAC,OAAO,CAAC,CAAc;IAE9B;;;OAGG;gBACS,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB;IAKpD;;;;OAIG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAK9C;;;;OAIG;IACH,IAAI,CAAC,QAAQ,EAAE,GAAG,GAAG,IAAI;IAKzB;;;OAGG;IACH,IAAI,IAAI,IAAI;IAKZ;;;OAGG;IACH,IAAI,IAAI,IAAI;IAKZ;;;OAGG;IACH,GAAG,IAAI,IAAI;IAKX;;;OAGG;IACH,IAAI,IAAI,IAAI;IAKZ;;;OAGG;IACG,MAAM,IAAI,OAAO,CAAC,cAAc,CAAC;IAUvC;;;OAGG;IACH,GAAG,IAAI,IAAI;IAKX;;;OAGG;IACH,KAAK,IAAI,IAAI;IAKb;;;OAGG;IACH,MAAM,IAAI,IAAI;IAKd;;;;OAIG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI;IAS9D;;;;;OAKG;IACH,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;IAM1B;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAKjC;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKzB;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC;IA4BxB,OAAO,CAAC,YAAY;CAOrB"}
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"}
@@ -1,23 +1,17 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.RequestBuilder = void 0;
7
- const HttpClientImproved_1 = __importDefault(require("./HttpClientImproved"));
8
- let defaultClient = null;
9
4
  /**
10
- * Fluent request builder for making HTTP requests with a chainable API.
11
- * Provides a convenient way to build and send HTTP requests with various options.
12
- *
13
- * @example
5
+ * @class RequestBuilder
6
+ * @en Fluent request builder for creating HTTP requests with a chainable API.
7
+ * @ru Fluent request builder для создания HTTP-запросов. Позволяет собирать параметры запроса в цепочку.
8
+ * * @example
14
9
  * ```ts
15
- * const client = new HttpClientImproved();
16
- * const response = await client.request('https://api.example.com/data')
17
- * .headers({ 'Authorization': 'Bearer token' })
18
- * .query({ limit: 10, offset: 0 })
19
- * .json()
20
- * .send();
10
+ * const user = await client.request('[https://api.example.com/users](https://api.example.com/users)')
11
+ * .post()
12
+ * .jsonBody({ name: 'John' })
13
+ * .headers({ 'X-Custom-Header': 'value' })
14
+ * .send();
21
15
  * ```
22
16
  */
23
17
  class RequestBuilder {
@@ -25,146 +19,120 @@ class RequestBuilder {
25
19
  _method = "GET";
26
20
  _headers = {};
27
21
  _body;
28
- _responseType = "auto"; // Помним про наш новый дефолт
22
+ _responseType = "auto";
29
23
  _client;
30
24
  _signal;
31
- /**
32
- * Creates a new request builder for the specified URL.
33
- * @param url - The target URL for the request
34
- */
35
25
  constructor(url, client) {
36
26
  this._url = url;
37
27
  this._client = client;
38
28
  }
39
29
  /**
40
- * Sets HTTP headers for the request.
41
- * @param headers - Object containing header key-value pairs
42
- * @returns The builder instance for chaining
30
+ * @en Appends multiple headers to the request.
31
+ * @ru Добавляет несколько заголовков к запросу.
43
32
  */
44
33
  headers(headers) {
45
- this._headers = headers;
34
+ Object.assign(this._headers, headers);
46
35
  return this;
47
36
  }
48
37
  /**
49
- * Sets the request body data.
50
- * @param bodyData - The body data to send with the request
51
- * @returns The builder instance for chaining
38
+ * @en Sets the request body.
39
+ * @ru Устанавливает тело запроса.
52
40
  */
53
41
  body(bodyData) {
54
42
  this._body = bodyData;
55
43
  return this;
56
44
  }
57
45
  /**
58
- * Sets the response type to JSON.
59
- * @returns The builder instance for chaining
60
- */
61
- json() {
62
- this._responseType = "json";
63
- return this;
64
- }
65
- /**
66
- * Sets the response type to plain text.
67
- * @returns The builder instance for chaining
46
+ * @en Sets the body and ensures Content-Type is application/json.
47
+ * @ru Устанавливает тело запроса и заголовок Content-Type: application/json.
68
48
  */
69
- text() {
70
- this._responseType = "text";
49
+ jsonBody(body) {
50
+ this._body = body;
51
+ this._headers["Content-Type"] = "application/json; charset=utf-8";
71
52
  return this;
72
53
  }
73
54
  /**
74
- * Sets the response type to XML.
75
- * @returns The builder instance for chaining
55
+ * @en Adds URL query parameters.
56
+ * @ru Добавляет параметры запроса в URL (search params).
76
57
  */
77
- xml() {
78
- this._responseType = "xml";
58
+ query(params) {
59
+ const urlObj = new URL(this._url);
60
+ Object.entries(params).forEach(([k, v]) => urlObj.searchParams.set(k, String(v)));
61
+ this._url = urlObj.toString();
79
62
  return this;
80
63
  }
81
- /**
82
- * Sets the HTTP method to POST.
83
- * @returns The builder instance for chaining
84
- */
64
+ /** @en Set method to POST */
85
65
  post() {
86
66
  this._method = "POST";
87
67
  return this;
88
68
  }
89
- /**
90
- * @ru Выполняет запрос в режиме потока.
91
- * @en Executes the request in streaming mode.
92
- */
93
- async stream() {
94
- const client = this.ensureClient();
95
- return client.stream({
96
- getURL: () => this._url,
97
- getHeaders: () => this._headers,
98
- getBodyData: () => this._body,
99
- getSignal: () => this._signal,
100
- });
101
- }
102
- /**
103
- * Sets the HTTP method to PUT.
104
- * @returns The builder instance for chaining
105
- */
69
+ /** @en Set method to PUT */
106
70
  put() {
107
71
  this._method = "PUT";
108
72
  return this;
109
73
  }
110
- /**
111
- * Sets the HTTP method to PATCH.
112
- * @returns The builder instance for chaining
113
- */
74
+ /** @en Set method to PATCH */
114
75
  patch() {
115
76
  this._method = "PATCH";
116
77
  return this;
117
78
  }
118
- /**
119
- * Sets the HTTP method to DELETE.
120
- * @returns The builder instance for chaining
121
- */
79
+ /** @en Set method to DELETE */
122
80
  delete() {
123
81
  this._method = "DELETE";
124
82
  return this;
125
83
  }
126
- /**
127
- * Adds query parameters to the URL.
128
- * @param params - Object containing query parameter key-value pairs
129
- * @returns The builder instance for chaining
130
- */
131
- query(params) {
132
- const urlObj = new URL(this._url);
133
- Object.entries(params).forEach(([k, v]) => urlObj.searchParams.set(k, String(v)));
134
- this._url = urlObj.toString();
84
+ /** @en Set method to HEAD */
85
+ head() {
86
+ this._method = "HEAD";
135
87
  return this;
136
88
  }
137
- /**
138
- * Sets a JSON body for the request.
139
- * Automatically sets the Content-Type header to application/json.
140
- * @param body - The JSON body data
141
- * @returns The builder instance for chaining
142
- */
143
- jsonBody(body) {
144
- this._body = body;
145
- this._headers["Content-Type"] = "application/json; charset=utf-8";
89
+ /** @en Set response type to JSON */
90
+ json() {
91
+ this._responseType = "json";
92
+ return this;
93
+ }
94
+ /** @en Set response type to Plain Text */
95
+ text() {
96
+ this._responseType = "text";
97
+ return this;
98
+ }
99
+ /** @en Set response type to XML */
100
+ xml() {
101
+ this._responseType = "xml";
102
+ return this;
103
+ }
104
+ /** @en Set response type to Buffer */
105
+ buffer() {
106
+ this._responseType = "buffer";
107
+ return this;
108
+ }
109
+ /** @en Set response type to Stream (AsyncIterable) */
110
+ stream() {
111
+ this._responseType = "stream";
146
112
  return this;
147
113
  }
148
114
  /**
149
- * @ru Устанавливает AbortSignal для отмены запроса.
115
+ * @en Attaches an external AbortSignal for manual cancellation.
116
+ * @ru Привязывает внешний AbortSignal для ручной отмены запроса.
150
117
  */
151
118
  signal(signal) {
152
119
  this._signal = signal;
153
120
  return this;
154
121
  }
155
122
  /**
156
- * @ru Устанавливает специфичный таймаут для этого запроса.
123
+ * @en Creates a timeout signal for this specific request.
124
+ * @ru Устанавливает таймаут для конкретно этого запроса.
157
125
  */
158
126
  timeout(ms) {
159
127
  this._signal = AbortSignal.timeout(ms);
160
128
  return this;
161
129
  }
162
130
  /**
163
- * Sends the HTTP request and returns the response.
164
- * @returns Promise resolving to the response data
131
+ * @en Finalizes and sends the request.
132
+ * @ru Финализирует и отправляет запрос.
133
+ * @returns Promise resolving to the expected type T or StreamResponse.
165
134
  */
166
135
  async send() {
167
- const client = this.ensureClient();
168
136
  const req = {
169
137
  getURL: () => this._url,
170
138
  getBodyData: () => this._body,
@@ -172,26 +140,23 @@ class RequestBuilder {
172
140
  getSignal: () => this._signal,
173
141
  };
174
142
  if (this._responseType === "stream") {
175
- return (await client.stream(req));
143
+ return (await this._client.stream(req));
176
144
  }
177
145
  switch (this._method) {
178
146
  case "POST":
179
- return client.post(req, this._body, this._responseType);
147
+ return this._client.post(req, this._body, this._responseType);
180
148
  case "PUT":
181
- return client.put(req, this._body, this._responseType);
149
+ return this._client.put(req, this._body, this._responseType);
182
150
  case "PATCH":
183
- return client.patch(req, this._body, this._responseType);
151
+ return this._client.patch(req, this._body, this._responseType);
184
152
  case "DELETE":
185
- return client.delete(req, this._responseType);
153
+ return this._client.delete(req, this._responseType);
154
+ case "HEAD":
155
+ return (await this._client.head(req));
186
156
  default:
187
- return client.get(req, this._responseType);
157
+ return this._client.get(req, this._responseType);
188
158
  }
189
159
  }
190
- ensureClient() {
191
- return (this._client ??
192
- defaultClient ??
193
- (defaultClient = new HttpClientImproved_1.default()));
194
- }
195
160
  }
196
161
  exports.RequestBuilder = RequestBuilder;
197
162
  //# sourceMappingURL=RequestBuilder.js.map