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.
Files changed (61) hide show
  1. package/dist/Hyperttp/Core/CacheManager.d.ts +40 -3
  2. package/dist/Hyperttp/Core/CacheManager.d.ts.map +1 -1
  3. package/dist/Hyperttp/Core/CacheManager.js +61 -12
  4. package/dist/Hyperttp/Core/CacheManager.js.map +1 -1
  5. package/dist/Hyperttp/Core/HttpClientImproved.d.ts +69 -97
  6. package/dist/Hyperttp/Core/HttpClientImproved.d.ts.map +1 -1
  7. package/dist/Hyperttp/Core/HttpClientImproved.js +331 -642
  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 +80 -0
  14. package/dist/Hyperttp/Core/MetricsManager.d.ts.map +1 -0
  15. package/dist/Hyperttp/Core/MetricsManager.js +140 -0
  16. package/dist/Hyperttp/Core/MetricsManager.js.map +1 -0
  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 -47
  20. package/dist/Hyperttp/Core/QueueManager.js.map +1 -1
  21. package/dist/Hyperttp/Core/RateLimiter.d.ts +40 -20
  22. package/dist/Hyperttp/Core/RateLimiter.d.ts.map +1 -1
  23. package/dist/Hyperttp/Core/RateLimiter.js +65 -44
  24. package/dist/Hyperttp/Core/RateLimiter.js.map +1 -1
  25. package/dist/Hyperttp/Core/RequestBuilder.d.ts +48 -64
  26. package/dist/Hyperttp/Core/RequestBuilder.d.ts.map +1 -1
  27. package/dist/Hyperttp/Core/RequestBuilder.js +87 -99
  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 +7 -1
  38. package/dist/Hyperttp/Core/index.d.ts.map +1 -1
  39. package/dist/Hyperttp/Core/index.js +17 -5
  40. package/dist/Hyperttp/Core/index.js.map +1 -1
  41. package/dist/Hyperttp/Request.d.ts +5 -0
  42. package/dist/Hyperttp/Request.d.ts.map +1 -1
  43. package/dist/Hyperttp/Request.js +17 -35
  44. package/dist/Hyperttp/Request.js.map +1 -1
  45. package/dist/Hyperttp/UrlExtractor.d.ts +1 -1
  46. package/dist/Hyperttp/UrlExtractor.d.ts.map +1 -1
  47. package/dist/Hyperttp/UrlExtractor.js.map +1 -1
  48. package/dist/Hyperttp/index.d.ts +3 -1
  49. package/dist/Hyperttp/index.d.ts.map +1 -1
  50. package/dist/Hyperttp/index.js +6 -1
  51. package/dist/Hyperttp/index.js.map +1 -1
  52. package/dist/Types/index.d.ts +45 -206
  53. package/dist/Types/index.d.ts.map +1 -1
  54. package/dist/Types/index.js +7 -16
  55. package/dist/Types/index.js.map +1 -1
  56. package/dist/Types/request.d.ts +15 -100
  57. package/dist/Types/request.d.ts.map +1 -1
  58. package/dist/Types/request.js.map +1 -1
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js.map +1 -1
  61. package/package.json +2 -2
@@ -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,148 +19,142 @@ class RequestBuilder {
25
19
  _method = "GET";
26
20
  _headers = {};
27
21
  _body;
28
- _responseType = "json";
29
- /**
30
- * Creates a new request builder for the specified URL.
31
- * @param url - The target URL for the request
32
- */
33
- constructor(url) {
22
+ _responseType = "auto";
23
+ _client;
24
+ _signal;
25
+ constructor(url, client) {
34
26
  this._url = url;
27
+ this._client = client;
35
28
  }
36
29
  /**
37
- * Sets HTTP headers for the request.
38
- * @param headers - Object containing header key-value pairs
39
- * @returns The builder instance for chaining
30
+ * @en Appends multiple headers to the request.
31
+ * @ru Добавляет несколько заголовков к запросу.
40
32
  */
41
33
  headers(headers) {
42
- this._headers = headers;
34
+ Object.assign(this._headers, headers);
43
35
  return this;
44
36
  }
45
37
  /**
46
- * Sets the request body data.
47
- * @param bodyData - The body data to send with the request
48
- * @returns The builder instance for chaining
38
+ * @en Sets the request body.
39
+ * @ru Устанавливает тело запроса.
49
40
  */
50
41
  body(bodyData) {
51
42
  this._body = bodyData;
52
43
  return this;
53
44
  }
54
45
  /**
55
- * Sets the response type to JSON.
56
- * @returns The builder instance for chaining
57
- */
58
- json() {
59
- this._responseType = "json";
60
- return this;
61
- }
62
- /**
63
- * Sets the response type to plain text.
64
- * @returns The builder instance for chaining
46
+ * @en Sets the body and ensures Content-Type is application/json.
47
+ * @ru Устанавливает тело запроса и заголовок Content-Type: application/json.
65
48
  */
66
- text() {
67
- this._responseType = "text";
49
+ jsonBody(body) {
50
+ this._body = body;
51
+ this._headers["Content-Type"] = "application/json; charset=utf-8";
68
52
  return this;
69
53
  }
70
54
  /**
71
- * Sets the response type to XML.
72
- * @returns The builder instance for chaining
55
+ * @en Adds URL query parameters.
56
+ * @ru Добавляет параметры запроса в URL (search params).
73
57
  */
74
- xml() {
75
- 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();
76
62
  return this;
77
63
  }
78
- /**
79
- * Sets the HTTP method to POST.
80
- * @returns The builder instance for chaining
81
- */
64
+ /** @en Set method to POST */
82
65
  post() {
83
66
  this._method = "POST";
84
67
  return this;
85
68
  }
86
- /**
87
- * @ru Устанавливает потоковый режим ответа.
88
- * @en Sets streaming response mode.
89
- */
90
- stream() {
91
- this._responseType = "stream";
92
- return this;
93
- }
94
- /**
95
- * Sets the HTTP method to PUT.
96
- * @returns The builder instance for chaining
97
- */
69
+ /** @en Set method to PUT */
98
70
  put() {
99
71
  this._method = "PUT";
100
72
  return this;
101
73
  }
102
- /**
103
- * Sets the HTTP method to PATCH.
104
- * @returns The builder instance for chaining
105
- */
74
+ /** @en Set method to PATCH */
106
75
  patch() {
107
76
  this._method = "PATCH";
108
77
  return this;
109
78
  }
110
- /**
111
- * Sets the HTTP method to DELETE.
112
- * @returns The builder instance for chaining
113
- */
79
+ /** @en Set method to DELETE */
114
80
  delete() {
115
81
  this._method = "DELETE";
116
82
  return this;
117
83
  }
84
+ /** @en Set method to HEAD */
85
+ head() {
86
+ this._method = "HEAD";
87
+ return this;
88
+ }
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";
112
+ return this;
113
+ }
118
114
  /**
119
- * Adds query parameters to the URL.
120
- * @param params - Object containing query parameter key-value pairs
121
- * @returns The builder instance for chaining
115
+ * @en Attaches an external AbortSignal for manual cancellation.
116
+ * @ru Привязывает внешний AbortSignal для ручной отмены запроса.
122
117
  */
123
- query(params) {
124
- const urlObj = new URL(this._url);
125
- Object.entries(params).forEach(([k, v]) => urlObj.searchParams.set(k, String(v)));
126
- this._url = urlObj.toString();
118
+ signal(signal) {
119
+ this._signal = signal;
127
120
  return this;
128
121
  }
129
122
  /**
130
- * Sets a JSON body for the request.
131
- * Automatically sets the Content-Type header to application/json.
132
- * @param body - The JSON body data
133
- * @returns The builder instance for chaining
123
+ * @en Creates a timeout signal for this specific request.
124
+ * @ru Устанавливает таймаут для конкретно этого запроса.
134
125
  */
135
- jsonBody(body) {
136
- this._body = body;
137
- this._headers["Content-Type"] = "application/json; charset=utf-8";
126
+ timeout(ms) {
127
+ this._signal = AbortSignal.timeout(ms);
138
128
  return this;
139
129
  }
140
130
  /**
141
- * Sends the HTTP request and returns the response.
142
- * @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.
143
134
  */
144
135
  async send() {
145
- const client = defaultClient ?? (defaultClient = new HttpClientImproved_1.default());
146
136
  const req = {
147
137
  getURL: () => this._url,
148
138
  getBodyData: () => this._body,
149
139
  getHeaders: () => this._headers,
140
+ getSignal: () => this._signal,
150
141
  };
142
+ if (this._responseType === "stream") {
143
+ return (await this._client.stream(req));
144
+ }
151
145
  switch (this._method) {
152
- case "GET":
153
- if (this._responseType === "stream") {
154
- return client.stream(req);
155
- }
156
- return client.get(req, this._responseType);
157
146
  case "POST":
158
- return client.post(req, this._body, this._responseType);
147
+ return this._client.post(req, this._body, this._responseType);
159
148
  case "PUT":
160
- return client.put(req, this._body, this._responseType);
161
- case "DELETE":
162
- return client.delete(req, this._responseType);
149
+ return this._client.put(req, this._body, this._responseType);
163
150
  case "PATCH":
164
- return client.patch(req, this._body, this._responseType);
151
+ return this._client.patch(req, this._body, this._responseType);
152
+ case "DELETE":
153
+ return this._client.delete(req, this._responseType);
154
+ case "HEAD":
155
+ return (await this._client.head(req));
165
156
  default:
166
- if (this._responseType === "stream") {
167
- return client.stream(req);
168
- }
169
- return client.get(req, this._responseType);
157
+ return this._client.get(req, this._responseType);
170
158
  }
171
159
  }
172
160
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RequestBuilder.js","sourceRoot":"","sources":["../../../../src/Hyperttp/Core/RequestBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RequestBuilder.js","sourceRoot":"","sources":["../../../src/Hyperttp/Core/RequestBuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { Agent } from "undici";
2
+ import { RetryOptions, LogLevel, RequestMetrics } from "../../Types";
3
+ import { InterceptorManager } from "./InterceptorManager";
4
+ /**
5
+ * @class RequestExecutor
6
+ * @en The core engine responsible for low-level HTTP execution, retries, and redirect logic.
7
+ * @ru Основной движок, отвечающий за низкоуровневое выполнение HTTP-запросов, повторы и логику редиректов.
8
+ */
9
+ export declare class RequestExecutor {
10
+ private agent;
11
+ private interceptors;
12
+ private options;
13
+ constructor(agent: Agent, interceptors: InterceptorManager, options: {
14
+ timeout: number;
15
+ maxRetries: number;
16
+ followRedirects: boolean;
17
+ maxRedirects: number;
18
+ retryOptions: RetryOptions;
19
+ verbose?: boolean;
20
+ logger?: (level: LogLevel, message: string, meta?: any) => void;
21
+ });
22
+ /**
23
+ * @en Internal logger wrapper.
24
+ * @ru Внутренняя обертка для логирования.
25
+ */
26
+ private log;
27
+ /**
28
+ * @en Calculates the delay before the next retry using Exponential Backoff and Jitter.
29
+ * @ru Вычисляет задержку перед следующим повтором, используя экспоненциальный рост и Jitter (джиттер).
30
+ */
31
+ private calcDelay;
32
+ /** @en Simple async sleep helper. */
33
+ private sleep;
34
+ /**
35
+ * @en Parses the 'Retry-After' header (can be seconds or a Date string).
36
+ * @ru Парсит заголовок 'Retry-After' (может быть в секундах или в формате даты).
37
+ */
38
+ private parseRetryAfterMs;
39
+ /**
40
+ * @en Executes an HTTP request with full retry and redirect lifecycle management.
41
+ * @ru Выполняет HTTP-запрос с полным циклом управления повторами и редиректами.
42
+ * @param method - HTTP method
43
+ * @param url - Destination URL
44
+ * @param headers - Request headers
45
+ * @param body - Request payload
46
+ * @param metrics - Performance metrics object to update
47
+ * @param signal - External AbortSignal for user cancellation
48
+ * @param redirects - Internal redirect counter
49
+ * @param attempt - Internal retry attempt counter
50
+ */
51
+ execute(method: string, url: string, headers: Record<string, string>, body: string | Buffer | undefined, metrics?: RequestMetrics, signal?: AbortSignal, redirects?: number, attempt?: number): Promise<{
52
+ status: number;
53
+ headers: Record<string, any>;
54
+ body: any;
55
+ url: string;
56
+ }>;
57
+ }
58
+ //# sourceMappingURL=RequestExecutor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequestExecutor.d.ts","sourceRoot":"","sources":["../../../src/Hyperttp/Core/RequestExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAGL,YAAY,EACZ,QAAQ,EACR,cAAc,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;;;GAIG;AACH,qBAAa,eAAe;IAExB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,OAAO;gBAFP,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,kBAAkB,EAChC,OAAO,EAAE;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,eAAe,EAAE,OAAO,CAAC;QACzB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,YAAY,CAAC;QAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;KACjE;IAGH;;;OAGG;IACH,OAAO,CAAC,GAAG;IAMX;;;OAGG;IACH,OAAO,CAAC,SAAS;IAOjB,qCAAqC;IACrC,OAAO,CAAC,KAAK;IAIb;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;;;;;;;;;;OAWG;IACG,OAAO,CACX,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EACjC,OAAO,CAAC,EAAE,cAAc,EACxB,MAAM,CAAC,EAAE,WAAW,EACpB,SAAS,SAAI,EACb,OAAO,SAAI,GACV,OAAO,CAAC;QACT,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC7B,IAAI,EAAE,GAAG,CAAC;QACV,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;CAsJH"}
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RequestExecutor = void 0;
4
+ const undici_1 = require("undici");
5
+ const Types_1 = require("../../Types");
6
+ /**
7
+ * @class RequestExecutor
8
+ * @en The core engine responsible for low-level HTTP execution, retries, and redirect logic.
9
+ * @ru Основной движок, отвечающий за низкоуровневое выполнение HTTP-запросов, повторы и логику редиректов.
10
+ */
11
+ class RequestExecutor {
12
+ agent;
13
+ interceptors;
14
+ options;
15
+ constructor(agent, interceptors, options) {
16
+ this.agent = agent;
17
+ this.interceptors = interceptors;
18
+ this.options = options;
19
+ }
20
+ /**
21
+ * @en Internal logger wrapper.
22
+ * @ru Внутренняя обертка для логирования.
23
+ */
24
+ log(level, msg, meta) {
25
+ if (this.options.verbose && this.options.logger) {
26
+ this.options.logger(level, msg, meta);
27
+ }
28
+ }
29
+ /**
30
+ * @en Calculates the delay before the next retry using Exponential Backoff and Jitter.
31
+ * @ru Вычисляет задержку перед следующим повтором, используя экспоненциальный рост и Jitter (джиттер).
32
+ */
33
+ calcDelay(attempt) {
34
+ const { baseDelay, maxDelay, jitter } = this.options.retryOptions;
35
+ const base = Math.min(baseDelay * Math.pow(2, attempt), maxDelay);
36
+ // Jitter помогает избежать "эффекта стада", распределяя запросы во времени
37
+ return jitter ? base * (0.75 + Math.random() * 0.5) : base;
38
+ }
39
+ /** @en Simple async sleep helper. */
40
+ sleep(ms) {
41
+ return new Promise((resolve) => setTimeout(resolve, ms));
42
+ }
43
+ /**
44
+ * @en Parses the 'Retry-After' header (can be seconds or a Date string).
45
+ * @ru Парсит заголовок 'Retry-After' (может быть в секундах или в формате даты).
46
+ */
47
+ parseRetryAfterMs(header) {
48
+ if (!header)
49
+ return undefined;
50
+ const raw = Array.isArray(header) ? header[0] : String(header);
51
+ const asSeconds = Number(raw);
52
+ if (Number.isFinite(asSeconds))
53
+ return Math.max(0, Math.floor(asSeconds * 1000));
54
+ const asDate = Date.parse(raw);
55
+ if (!Number.isNaN(asDate))
56
+ return Math.max(0, asDate - Date.now());
57
+ return undefined;
58
+ }
59
+ /**
60
+ * @en Executes an HTTP request with full retry and redirect lifecycle management.
61
+ * @ru Выполняет HTTP-запрос с полным циклом управления повторами и редиректами.
62
+ * @param method - HTTP method
63
+ * @param url - Destination URL
64
+ * @param headers - Request headers
65
+ * @param body - Request payload
66
+ * @param metrics - Performance metrics object to update
67
+ * @param signal - External AbortSignal for user cancellation
68
+ * @param redirects - Internal redirect counter
69
+ * @param attempt - Internal retry attempt counter
70
+ */
71
+ async execute(method, url, headers, body, metrics, signal, redirects = 0, attempt = 0) {
72
+ const timeoutController = new AbortController();
73
+ const timer = setTimeout(() => timeoutController.abort(), this.options.timeout);
74
+ const abortHandler = () => timeoutController.abort();
75
+ if (signal) {
76
+ if (signal.aborted) {
77
+ clearTimeout(timer);
78
+ throw new Types_1.HttpClientError("Request aborted by user", "ABORTED", 0, undefined, url, method);
79
+ }
80
+ signal.addEventListener("abort", abortHandler);
81
+ }
82
+ try {
83
+ const config = await this.interceptors.applyRequest({
84
+ url,
85
+ method,
86
+ headers,
87
+ body,
88
+ });
89
+ const res = await (0, undici_1.request)(config.url, {
90
+ method: config.method,
91
+ headers: config.headers,
92
+ body: config.body,
93
+ dispatcher: this.agent,
94
+ signal: timeoutController.signal,
95
+ });
96
+ clearTimeout(timer);
97
+ if (this.options.followRedirects &&
98
+ [301, 302, 303, 307, 308].includes(res.statusCode)) {
99
+ if (redirects >= this.options.maxRedirects) {
100
+ throw new Types_1.HttpClientError("Too many redirects", "TOO_MANY_REDIRECTS", res.statusCode);
101
+ }
102
+ const location = res.headers.location;
103
+ if (location) {
104
+ const nextUrl = new URL(location, config.url).toString();
105
+ const nextMethod = res.statusCode === 303 ? "GET" : method;
106
+ const nextHeaders = { ...headers };
107
+ if (nextMethod === "GET") {
108
+ delete nextHeaders["content-type"];
109
+ delete nextHeaders["content-length"];
110
+ }
111
+ return this.execute(nextMethod, nextUrl, nextHeaders, nextMethod === "GET" ? undefined : body, metrics, signal, redirects + 1);
112
+ }
113
+ }
114
+ if (this.options.retryOptions.retryStatusCodes.includes(res.statusCode)) {
115
+ if (attempt < this.options.maxRetries) {
116
+ if (metrics) {
117
+ metrics.retries += 1;
118
+ }
119
+ let delay = this.calcDelay(attempt);
120
+ if (res.statusCode === 429) {
121
+ const retryAfter = this.parseRetryAfterMs(res.headers["retry-after"]);
122
+ if (retryAfter !== undefined)
123
+ delay = retryAfter;
124
+ }
125
+ await this.sleep(delay);
126
+ return this.execute(method, url, headers, body, metrics, signal, redirects, attempt + 1);
127
+ }
128
+ }
129
+ return await this.interceptors.applyResponse({
130
+ status: res.statusCode,
131
+ headers: res.headers,
132
+ body: res.body,
133
+ url: config.url,
134
+ });
135
+ }
136
+ catch (err) {
137
+ clearTimeout(timer);
138
+ if (err.name === "AbortError") {
139
+ if (signal?.aborted)
140
+ throw new Types_1.HttpClientError("Request aborted by user", "ABORTED", 0, err, url, method);
141
+ throw new Types_1.TimeoutError(url, this.options.timeout);
142
+ }
143
+ if (attempt < this.options.maxRetries &&
144
+ (err.code === "ECONNREFUSED" || err.code === "ETIMEDOUT")) {
145
+ if (metrics) {
146
+ metrics.retries += 1;
147
+ }
148
+ await this.sleep(this.calcDelay(attempt));
149
+ return this.execute(method, url, headers, body, metrics, signal, redirects, attempt + 1);
150
+ }
151
+ throw err;
152
+ }
153
+ finally {
154
+ if (signal)
155
+ signal.removeEventListener("abort", abortHandler);
156
+ }
157
+ }
158
+ }
159
+ exports.RequestExecutor = RequestExecutor;
160
+ //# sourceMappingURL=RequestExecutor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequestExecutor.js","sourceRoot":"","sources":["../../../src/Hyperttp/Core/RequestExecutor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { ResponseType, LogLevel } from "../../Types";
2
+ /**
3
+ * @class ResponseTransformer
4
+ * @en Handles stream reading, decompression (Gzip/Brotli), and parsing (JSON/XML/Text).
5
+ * @ru Обрабатывает чтение стримов, декомпрессию (Gzip/Brotli) и парсинг (JSON/XML/Text).
6
+ */
7
+ export declare class ResponseTransformer {
8
+ private maxResponseBytes;
9
+ private logger?;
10
+ private xmlParser;
11
+ constructor(maxResponseBytes?: number, logger?: ((level: LogLevel, message: string, meta?: any) => void) | undefined);
12
+ /**
13
+ * @en Reads the response stream into a Buffer while respecting the byte limit.
14
+ * @ru Читает поток ответа в Buffer с соблюдением лимита байтов.
15
+ * @throws {HttpClientError} If response size exceeds maxResponseBytes.
16
+ */
17
+ readBodyWithLimit(body: any): Promise<Buffer>;
18
+ /**
19
+ * @en Decompresses the buffer based on the Content-Encoding header.
20
+ * @ru Декомпрессия данных (gzip, deflate, br) на основе заголовка Content-Encoding.
21
+ */
22
+ decompress(buf: Buffer, enc?: string, charset?: BufferEncoding): Promise<string>;
23
+ /**
24
+ * @en Parses the decompressed text content into the requested format.
25
+ * @ru Основной метод парсинга ответа в указанный формат.
26
+ * @param res - Object containing status, headers and raw body buffer.
27
+ * @param responseType - Targeted format (json, xml, text, buffer, auto).
28
+ */
29
+ parseResponse(res: {
30
+ status: number;
31
+ headers: Record<string, any>;
32
+ body: Buffer;
33
+ }, responseType?: ResponseType): Promise<any>;
34
+ }
35
+ //# sourceMappingURL=ResponseTransformer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResponseTransformer.d.ts","sourceRoot":"","sources":["../../../src/Hyperttp/Core/ResponseTransformer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAmB,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAMtE;;;;GAIG;AACH,qBAAa,mBAAmB;IAI5B,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,MAAM,CAAC;IAJjB,OAAO,CAAC,SAAS,CAAY;gBAGnB,gBAAgB,GAAE,MAAoB,EACtC,MAAM,CAAC,GAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,aAAA;IAQzE;;;;OAIG;IACG,iBAAiB,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAoBnD;;;OAGG;IACG,UAAU,CACd,GAAG,EAAE,MAAM,EACX,GAAG,CAAC,EAAE,MAAM,EACZ,OAAO,GAAE,cAAwB,GAChC,OAAO,CAAC,MAAM,CAAC;IAoBlB;;;;;OAKG;IACG,aAAa,CACjB,GAAG,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EACnE,YAAY,GAAE,YAAqB,GAClC,OAAO,CAAC,GAAG,CAAC;CAkEhB"}