hyperttp 0.2.2 → 0.2.4

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 (49) 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 +311 -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/dist/Hyperttp/Request.d.ts +9 -20
  42. package/dist/Hyperttp/Request.d.ts.map +1 -1
  43. package/dist/Hyperttp/Request.js +93 -85
  44. package/dist/Hyperttp/Request.js.map +1 -1
  45. package/dist/Types/index.d.ts +1 -0
  46. package/dist/Types/index.d.ts.map +1 -1
  47. package/dist/Types/request.d.ts +2 -3
  48. package/dist/Types/request.d.ts.map +1 -1
  49. package/package.json +4 -4
@@ -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"}
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.ResponseTransformer = void 0;
40
+ const zlib = __importStar(require("zlib"));
41
+ const util_1 = require("util");
42
+ const fast_xml_parser_1 = require("fast-xml-parser");
43
+ const fast_xml_builder_1 = __importDefault(require("fast-xml-builder"));
44
+ const Types_1 = require("../../Types");
45
+ const gunzip = (0, util_1.promisify)(zlib.gunzip);
46
+ const inflate = (0, util_1.promisify)(zlib.inflate);
47
+ const brotliDecompress = (0, util_1.promisify)(zlib.brotliDecompress);
48
+ /**
49
+ * @class ResponseTransformer
50
+ * @en Handles stream reading, decompression (Gzip/Brotli), and parsing (JSON/XML/Text).
51
+ * @ru Обрабатывает чтение стримов, декомпрессию (Gzip/Brotli) и парсинг (JSON/XML/Text).
52
+ */
53
+ class ResponseTransformer {
54
+ maxResponseBytes;
55
+ logger;
56
+ xmlParser;
57
+ constructor(maxResponseBytes = 1024 * 1024, logger) {
58
+ this.maxResponseBytes = maxResponseBytes;
59
+ this.logger = logger;
60
+ this.xmlParser = new fast_xml_parser_1.XMLParser({
61
+ ignoreAttributes: false,
62
+ allowBooleanAttributes: true,
63
+ });
64
+ }
65
+ /**
66
+ * @en Reads the response stream into a Buffer while respecting the byte limit.
67
+ * @ru Читает поток ответа в Buffer с соблюдением лимита байтов.
68
+ * @throws {HttpClientError} If response size exceeds maxResponseBytes.
69
+ */
70
+ async readBodyWithLimit(body) {
71
+ const chunks = [];
72
+ let receivedBytes = 0;
73
+ for await (const chunk of body) {
74
+ receivedBytes += chunk.length;
75
+ if (this.maxResponseBytes > 0 && receivedBytes > this.maxResponseBytes) {
76
+ if (typeof body.destroy === "function")
77
+ body.destroy();
78
+ throw new Types_1.HttpClientError(`Response size limit exceeded (${this.maxResponseBytes} bytes)`, "HTTP_ERROR", 0);
79
+ }
80
+ chunks.push(Buffer.from(chunk));
81
+ }
82
+ return Buffer.concat(chunks);
83
+ }
84
+ /**
85
+ * @en Decompresses the buffer based on the Content-Encoding header.
86
+ * @ru Декомпрессия данных (gzip, deflate, br) на основе заголовка Content-Encoding.
87
+ */
88
+ async decompress(buf, enc, charset = "utf-8") {
89
+ if (!enc || buf.length === 0)
90
+ return buf.toString(charset);
91
+ try {
92
+ switch (enc.toLowerCase()) {
93
+ case "gzip":
94
+ return (await gunzip(buf)).toString(charset);
95
+ case "deflate":
96
+ return (await inflate(buf)).toString(charset);
97
+ case "br":
98
+ return (await brotliDecompress(buf)).toString(charset);
99
+ default:
100
+ return buf.toString(charset);
101
+ }
102
+ }
103
+ catch (error) {
104
+ this.logger?.("error", `Decompression failed for encoding ${enc}`, error);
105
+ return buf.toString(charset);
106
+ }
107
+ }
108
+ /**
109
+ * @en Parses the decompressed text content into the requested format.
110
+ * @ru Основной метод парсинга ответа в указанный формат.
111
+ * @param res - Object containing status, headers and raw body buffer.
112
+ * @param responseType - Targeted format (json, xml, text, buffer, auto).
113
+ */
114
+ async parseResponse(res, responseType = "auto") {
115
+ try {
116
+ const text = await this.decompress(res.body, res.headers["content-encoding"]);
117
+ const trimmed = text.trim();
118
+ switch (responseType) {
119
+ case "json": {
120
+ if (trimmed.startsWith("{") || trimmed.startsWith("[")) {
121
+ return JSON.parse(trimmed);
122
+ }
123
+ if (trimmed.startsWith("<")) {
124
+ return this.xmlParser.parse(trimmed);
125
+ }
126
+ return { data: trimmed };
127
+ }
128
+ case "xml": {
129
+ if (trimmed.startsWith("<"))
130
+ return trimmed;
131
+ try {
132
+ const obj = JSON.parse(trimmed);
133
+ const builder = new fast_xml_builder_1.default({
134
+ format: true,
135
+ indentBy: " ",
136
+ ignoreAttributes: false,
137
+ });
138
+ return builder.build(obj);
139
+ }
140
+ catch {
141
+ return text;
142
+ }
143
+ }
144
+ case "text":
145
+ return text;
146
+ case "buffer":
147
+ return res.body;
148
+ case "auto":
149
+ default: {
150
+ const contentType = (res.headers["content-type"] || "").toLowerCase();
151
+ if (contentType.includes("json") ||
152
+ trimmed.startsWith("{") ||
153
+ trimmed.startsWith("[")) {
154
+ try {
155
+ return JSON.parse(trimmed);
156
+ }
157
+ catch {
158
+ return text;
159
+ }
160
+ }
161
+ return text;
162
+ }
163
+ }
164
+ }
165
+ catch (err) {
166
+ throw new Types_1.HttpClientError(`Parsing failed: ${err?.message ?? String(err)}`, "PARSING_ERROR", res.status);
167
+ }
168
+ }
169
+ }
170
+ exports.ResponseTransformer = ResponseTransformer;
171
+ //# sourceMappingURL=ResponseTransformer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResponseTransformer.js","sourceRoot":"","sources":["../../../src/Hyperttp/Core/ResponseTransformer.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,9 @@ export { QueueManager } from "./QueueManager.js";
18
18
  export { CacheManager } from "./CacheManager.js";
19
19
  export { RateLimiter } from "./RateLimiter.js";
20
20
  export { MetricsManager } from "./MetricsManager.js";
21
+ export { InterceptorManager } from "./InterceptorManager.js";
22
+ export { RequestExecutor } from "./RequestExecutor.js";
23
+ export { ResponseTransformer } from "./ResponseTransformer.js";
21
24
  export { HttpClientError, TimeoutError, RateLimitError, } from "../../Types/index.js";
22
25
  export type { HttpClientInterface, HttpClientOptions, RequestInterface, RequestConfig, RequestBodyData, RequestHeaders, RequestQuery, ResponseType, StreamResponse, RequestMetrics, RequestInterceptor, ResponseInterceptor, RetryOptions, LogLevel, Method, } from "../../Types/index.js";
23
26
  export type { CacheManagerOptions } from "./CacheManager.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Hyperttp/Core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EACL,eAAe,EACf,YAAY,EACZ,cAAc,GACf,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACV,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,QAAQ,EACR,MAAM,GACP,MAAM,sBAAsB,CAAC;AAG9B,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Hyperttp/Core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EACL,eAAe,EACf,YAAY,EACZ,cAAc,GACf,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACV,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,QAAQ,EACR,MAAM,GACP,MAAM,sBAAsB,CAAC;AAG9B,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.RateLimitError = exports.TimeoutError = exports.HttpClientError = exports.MetricsManager = exports.RateLimiter = exports.CacheManager = exports.QueueManager = exports.RequestBuilder = exports.HttpClientImproved = void 0;
6
+ exports.RateLimitError = exports.TimeoutError = exports.HttpClientError = exports.ResponseTransformer = exports.RequestExecutor = exports.InterceptorManager = exports.MetricsManager = exports.RateLimiter = exports.CacheManager = exports.QueueManager = exports.RequestBuilder = exports.HttpClientImproved = void 0;
7
7
  /**
8
8
  * HTTP Client Library
9
9
  *
@@ -30,6 +30,12 @@ var RateLimiter_js_1 = require("./RateLimiter.js");
30
30
  Object.defineProperty(exports, "RateLimiter", { enumerable: true, get: function () { return RateLimiter_js_1.RateLimiter; } });
31
31
  var MetricsManager_js_1 = require("./MetricsManager.js");
32
32
  Object.defineProperty(exports, "MetricsManager", { enumerable: true, get: function () { return MetricsManager_js_1.MetricsManager; } });
33
+ var InterceptorManager_js_1 = require("./InterceptorManager.js");
34
+ Object.defineProperty(exports, "InterceptorManager", { enumerable: true, get: function () { return InterceptorManager_js_1.InterceptorManager; } });
35
+ var RequestExecutor_js_1 = require("./RequestExecutor.js");
36
+ Object.defineProperty(exports, "RequestExecutor", { enumerable: true, get: function () { return RequestExecutor_js_1.RequestExecutor; } });
37
+ var ResponseTransformer_js_1 = require("./ResponseTransformer.js");
38
+ Object.defineProperty(exports, "ResponseTransformer", { enumerable: true, get: function () { return ResponseTransformer_js_1.ResponseTransformer; } });
33
39
  var index_js_1 = require("../../Types/index.js");
34
40
  Object.defineProperty(exports, "HttpClientError", { enumerable: true, get: function () { return index_js_1.HttpClientError; } });
35
41
  Object.defineProperty(exports, "TimeoutError", { enumerable: true, get: function () { return index_js_1.TimeoutError; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Hyperttp/Core/index.ts"],"names":[],"mappings":";;;;;;AAAA;;;;;;;;;;;;;GAaG;AACH,iEAAwE;AAA/D,4IAAA,OAAO,OAAsB;AACtC,yDAAqD;AAA5C,mHAAA,cAAc,OAAA;AACvB,qDAAiD;AAAxC,+GAAA,YAAY,OAAA;AACrB,qDAAiD;AAAxC,+GAAA,YAAY,OAAA;AACrB,mDAA+C;AAAtC,6GAAA,WAAW,OAAA;AACpB,yDAAqD;AAA5C,mHAAA,cAAc,OAAA;AAEvB,iDAI8B;AAH5B,2GAAA,eAAe,OAAA;AACf,wGAAA,YAAY,OAAA;AACZ,0GAAA,cAAc,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Hyperttp/Core/index.ts"],"names":[],"mappings":";;;;;;AAAA;;;;;;;;;;;;;GAaG;AACH,iEAAwE;AAA/D,4IAAA,OAAO,OAAsB;AACtC,yDAAqD;AAA5C,mHAAA,cAAc,OAAA;AACvB,qDAAiD;AAAxC,+GAAA,YAAY,OAAA;AACrB,qDAAiD;AAAxC,+GAAA,YAAY,OAAA;AACrB,mDAA+C;AAAtC,6GAAA,WAAW,OAAA;AACpB,yDAAqD;AAA5C,mHAAA,cAAc,OAAA;AACvB,iEAA6D;AAApD,2HAAA,kBAAkB,OAAA;AAC3B,2DAAuD;AAA9C,qHAAA,eAAe,OAAA;AACxB,mEAA+D;AAAtD,6HAAA,mBAAmB,OAAA;AAE5B,iDAI8B;AAH5B,2GAAA,eAAe,OAAA;AACf,wGAAA,YAAY,OAAA;AACZ,0GAAA,cAAc,OAAA"}
@@ -27,6 +27,9 @@ export default class Request implements RequestInterface {
27
27
  private query;
28
28
  private bodyData;
29
29
  private signal?;
30
+ private method;
31
+ private bodyType;
32
+ private buildURL;
30
33
  constructor(config: RequestConfig);
31
34
  private normalizePath;
32
35
  setPath(path: string): this;
@@ -40,12 +43,16 @@ export default class Request implements RequestInterface {
40
43
  getQueryAsString(): string;
41
44
  getBodyData(): RequestBodyData;
42
45
  getBodyDataString(): string;
46
+ toFetchInit(): RequestInit;
43
47
  setBodyData(bodyData: RequestBodyData): this;
44
48
  addBodyData(bodyData: RequestBodyData): this;
45
- getURI(): string;
49
+ setBodyType(type: "json" | "form"): this;
50
+ setMethod(method: string): this;
46
51
  getURL(): string;
47
52
  setSignal(signal: AbortSignal): this;
48
53
  getSignal(): AbortSignal | undefined;
54
+ clone(): Request;
55
+ withQuery(query: RequestQuery): Request;
49
56
  }
50
57
  /**
51
58
  * PreparedRequest is a wrapper around Request that parses a base URL and provides the same RequestInterface methods.
@@ -59,25 +66,7 @@ export default class Request implements RequestInterface {
59
66
  * console.log(prepReq.getURL()); // "https://api.example.com:443/v1/users?page=2"
60
67
  * ```
61
68
  */
62
- export declare class PreparedRequest implements RequestInterface {
63
- private request;
69
+ export declare class PreparedRequest extends Request {
64
70
  constructor(baseUrl: string);
65
- setPath(path: string): this;
66
- setHost(host: string): this;
67
- getHeaders(): RequestHeaders;
68
- setHeaders(headers: RequestHeaders): this;
69
- addHeaders(headers: RequestHeaders): this;
70
- getQuery(): RequestQuery;
71
- setQuery(query: RequestQuery): this;
72
- addQuery(query: RequestQuery): this;
73
- getQueryAsString(): string;
74
- getBodyData(): RequestBodyData;
75
- getBodyDataString(): string;
76
- setBodyData(bodyData: RequestBodyData): this;
77
- addBodyData(bodyData: RequestBodyData): this;
78
- getURI(): string;
79
- getURL(): string;
80
- setSignal(signal: AbortSignal): RequestInterface;
81
- getSignal(): AbortSignal | undefined;
82
71
  }
83
72
  //# sourceMappingURL=Request.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Request.d.ts","sourceRoot":"","sources":["../../src/Hyperttp/Request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,eAAe,EACf,aAAa,EACb,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;AAG1B;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,OAAO,OAAO,OAAQ,YAAW,gBAAgB;IACtD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,MAAM,CAAC,CAAc;gBAEjB,MAAM,EAAE,aAAa;IAWjC,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3B,UAAU,IAAI,cAAc;IAI5B,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAKzC,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAKzC,QAAQ,IAAI,YAAY;IAIxB,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAKnC,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAKnC,gBAAgB,IAAI,MAAM;IAU1B,WAAW,IAAI,eAAe;IAI9B,iBAAiB,IAAI,MAAM;IAI3B,WAAW,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAK5C,WAAW,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAK5C,MAAM,IAAI,MAAM;IAMhB,MAAM,IAAI,MAAM;IAShB,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAKpC,SAAS,IAAI,WAAW,GAAG,SAAS;CAGrC;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,OAAO,CAAC,OAAO,CAAU;gBAEb,OAAO,EAAE,MAAM;IAgB3B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B,UAAU,IAAI,cAAc;IAG5B,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAIzC,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAIzC,QAAQ,IAAI,YAAY;IAGxB,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAInC,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAInC,gBAAgB,IAAI,MAAM;IAG1B,WAAW,IAAI,eAAe;IAG9B,iBAAiB,IAAI,MAAM;IAG3B,WAAW,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAI5C,WAAW,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAI5C,MAAM,IAAI,MAAM;IAGhB,MAAM,IAAI,MAAM;IAGhB,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,gBAAgB;IAGhD,SAAS,IAAI,WAAW,GAAG,SAAS;CAGrC"}
1
+ {"version":3,"file":"Request.d.ts","sourceRoot":"","sources":["../../src/Hyperttp/Request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,eAAe,EACf,aAAa,EACb,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;AAE1B;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,OAAO,OAAO,OAAQ,YAAW,gBAAgB;IACtD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,MAAM,CAAC,CAAc;IAC7B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,QAAQ,CAA2B;IAE3C,OAAO,CAAC,QAAQ;gBAkBJ,MAAM,EAAE,aAAa;IAWjC,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3B,UAAU,IAAI,cAAc;IAI5B,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAKzC,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAKzC,QAAQ,IAAI,YAAY;IAIxB,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAKnC,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAKnC,gBAAgB,IAAI,MAAM;IAY1B,WAAW,IAAI,eAAe;IAI9B,iBAAiB,IAAI,MAAM;IAc3B,WAAW,IAAI,WAAW;IAW1B,WAAW,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAK5C,WAAW,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAK5C,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAKxC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK/B,MAAM,IAAI,MAAM;IAIhB,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAKpC,SAAS,IAAI,WAAW,GAAG,SAAS;IAIpC,KAAK,IAAI,OAAO;IAkBhB,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO;CAiBxC;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,eAAgB,SAAQ,OAAO;gBAC9B,OAAO,EAAE,MAAM;CAW5B"}