hyperttp 0.2.4 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/README.md +129 -16
  2. package/dist/Hyperttp/Core/CacheManager.d.ts +63 -40
  3. package/dist/Hyperttp/Core/CacheManager.d.ts.map +1 -1
  4. package/dist/Hyperttp/Core/CacheManager.js +64 -62
  5. package/dist/Hyperttp/Core/CacheManager.js.map +1 -1
  6. package/dist/Hyperttp/Core/HttpClientImproved.d.ts +55 -33
  7. package/dist/Hyperttp/Core/HttpClientImproved.d.ts.map +1 -1
  8. package/dist/Hyperttp/Core/HttpClientImproved.js +315 -211
  9. package/dist/Hyperttp/Core/HttpClientImproved.js.map +1 -1
  10. package/dist/Hyperttp/Core/InterceptorManager.d.ts +11 -11
  11. package/dist/Hyperttp/Core/InterceptorManager.d.ts.map +1 -1
  12. package/dist/Hyperttp/Core/InterceptorManager.js +10 -10
  13. package/dist/Hyperttp/Core/InterceptorManager.js.map +1 -1
  14. package/dist/Hyperttp/Core/MetricsManager.d.ts +33 -42
  15. package/dist/Hyperttp/Core/MetricsManager.d.ts.map +1 -1
  16. package/dist/Hyperttp/Core/MetricsManager.js +165 -59
  17. package/dist/Hyperttp/Core/MetricsManager.js.map +1 -1
  18. package/dist/Hyperttp/Core/QueueManager.d.ts +6 -4
  19. package/dist/Hyperttp/Core/QueueManager.d.ts.map +1 -1
  20. package/dist/Hyperttp/Core/QueueManager.js +42 -34
  21. package/dist/Hyperttp/Core/QueueManager.js.map +1 -1
  22. package/dist/Hyperttp/Core/RateLimiter.d.ts +29 -36
  23. package/dist/Hyperttp/Core/RateLimiter.d.ts.map +1 -1
  24. package/dist/Hyperttp/Core/RateLimiter.js +100 -36
  25. package/dist/Hyperttp/Core/RateLimiter.js.map +1 -1
  26. package/dist/Hyperttp/Core/RequestBuilder.d.ts +4 -2
  27. package/dist/Hyperttp/Core/RequestBuilder.d.ts.map +1 -1
  28. package/dist/Hyperttp/Core/RequestBuilder.js +10 -3
  29. package/dist/Hyperttp/Core/RequestBuilder.js.map +1 -1
  30. package/dist/Hyperttp/Core/RequestExecutor.d.ts +7 -34
  31. package/dist/Hyperttp/Core/RequestExecutor.d.ts.map +1 -1
  32. package/dist/Hyperttp/Core/RequestExecutor.js +121 -114
  33. package/dist/Hyperttp/Core/RequestExecutor.js.map +1 -1
  34. package/dist/Hyperttp/Core/RequestProfiler.d.ts +10 -0
  35. package/dist/Hyperttp/Core/RequestProfiler.d.ts.map +1 -0
  36. package/dist/Hyperttp/Core/RequestProfiler.js +55 -0
  37. package/dist/Hyperttp/Core/RequestProfiler.js.map +1 -0
  38. package/dist/Hyperttp/Core/ResponseConverter.d.ts +23 -0
  39. package/dist/Hyperttp/Core/ResponseConverter.d.ts.map +1 -0
  40. package/dist/Hyperttp/Core/ResponseConverter.js +369 -0
  41. package/dist/Hyperttp/Core/ResponseConverter.js.map +1 -0
  42. package/dist/Hyperttp/Core/index.d.ts +8 -10
  43. package/dist/Hyperttp/Core/index.d.ts.map +1 -1
  44. package/dist/Hyperttp/Core/index.js +28 -15
  45. package/dist/Hyperttp/Core/index.js.map +1 -1
  46. package/dist/Hyperttp/UrlExtractor.d.ts +1 -1
  47. package/dist/Hyperttp/UrlExtractor.d.ts.map +1 -1
  48. package/dist/Hyperttp/index.d.ts +1 -3
  49. package/dist/Hyperttp/index.d.ts.map +1 -1
  50. package/dist/Hyperttp/index.js +8 -8
  51. package/dist/Hyperttp/index.js.map +1 -1
  52. package/dist/Types/cache.d.ts +10 -0
  53. package/dist/Types/cache.d.ts.map +1 -0
  54. package/dist/Types/cache.js +3 -0
  55. package/dist/Types/cache.js.map +1 -0
  56. package/dist/Types/errors.d.ts +15 -0
  57. package/dist/Types/errors.d.ts.map +1 -0
  58. package/dist/Types/errors.js +34 -0
  59. package/dist/Types/errors.js.map +1 -0
  60. package/dist/Types/http-client.d.ts +39 -0
  61. package/dist/Types/http-client.d.ts.map +1 -0
  62. package/dist/Types/http-client.js +3 -0
  63. package/dist/Types/http-client.js.map +1 -0
  64. package/dist/Types/http.d.ts +5 -0
  65. package/dist/Types/http.d.ts.map +1 -0
  66. package/dist/Types/http.js +3 -0
  67. package/dist/Types/http.js.map +1 -0
  68. package/dist/Types/index.d.ts +12 -127
  69. package/dist/Types/index.d.ts.map +1 -1
  70. package/dist/Types/index.js +12 -39
  71. package/dist/Types/index.js.map +1 -1
  72. package/dist/Types/interceptors.d.ts +13 -0
  73. package/dist/Types/interceptors.d.ts.map +1 -0
  74. package/dist/Types/interceptors.js +3 -0
  75. package/dist/Types/interceptors.js.map +1 -0
  76. package/dist/Types/metrics.d.ts +90 -0
  77. package/dist/Types/metrics.d.ts.map +1 -0
  78. package/dist/Types/metrics.js +3 -0
  79. package/dist/Types/metrics.js.map +1 -0
  80. package/dist/Types/options.d.ts +233 -0
  81. package/dist/Types/options.d.ts.map +1 -0
  82. package/dist/Types/options.js +3 -0
  83. package/dist/Types/options.js.map +1 -0
  84. package/dist/Types/queue.d.ts +8 -0
  85. package/dist/Types/queue.d.ts.map +1 -0
  86. package/dist/Types/queue.js +3 -0
  87. package/dist/Types/queue.js.map +1 -0
  88. package/dist/Types/request.d.ts +148 -9
  89. package/dist/Types/request.d.ts.map +1 -1
  90. package/dist/Types/response.d.ts +28 -0
  91. package/dist/Types/response.d.ts.map +1 -0
  92. package/dist/Types/response.js +3 -0
  93. package/dist/Types/response.js.map +1 -0
  94. package/dist/Types/stream.d.ts +39 -0
  95. package/dist/Types/stream.d.ts.map +1 -0
  96. package/dist/Types/stream.js +3 -0
  97. package/dist/Types/stream.js.map +1 -0
  98. package/dist/Types/url-extractor.d.ts +10 -0
  99. package/dist/Types/url-extractor.d.ts.map +1 -0
  100. package/dist/Types/url-extractor.js +3 -0
  101. package/dist/Types/url-extractor.js.map +1 -0
  102. package/dist/index.d.ts +1 -2
  103. package/dist/index.d.ts.map +1 -1
  104. package/dist/index.js +8 -3
  105. package/dist/index.js.map +1 -1
  106. package/package.json +7 -5
  107. package/dist/Hyperttp/Core/ResponseTransformer.d.ts +0 -35
  108. package/dist/Hyperttp/Core/ResponseTransformer.d.ts.map +0 -1
  109. package/dist/Hyperttp/Core/ResponseTransformer.js +0 -171
  110. package/dist/Hyperttp/Core/ResponseTransformer.js.map +0 -1
@@ -1,15 +1,13 @@
1
1
  import { Agent } from "undici";
2
- import { RetryOptions, LogLevel, RequestMetrics } from "../../Types";
3
2
  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
- */
3
+ import { RetryOptions } from "../../Types/options";
4
+ import { LogLevel } from "../../Types/http";
5
+ import { RequestMetrics } from "../../Types/metrics";
9
6
  export declare class RequestExecutor {
10
7
  private agent;
11
8
  private interceptors;
12
9
  private options;
10
+ private readonly redirectStatusCodes;
13
11
  constructor(agent: Agent, interceptors: InterceptorManager, options: {
14
12
  timeout: number;
15
13
  maxRetries: number;
@@ -19,36 +17,11 @@ export declare class RequestExecutor {
19
17
  verbose?: boolean;
20
18
  logger?: (level: LogLevel, message: string, meta?: any) => void;
21
19
  });
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
20
  private calcDelay;
32
- /** @en Simple async sleep helper. */
33
21
  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<{
22
+ private drainBody;
23
+ private executeCore;
24
+ execute(method: string, url: string, headers: Record<string, string>, body: string | Buffer | undefined, metrics?: RequestMetrics, signal?: AbortSignal): Promise<{
52
25
  status: number;
53
26
  headers: Record<string, any>;
54
27
  body: any;
@@ -1 +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"}
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,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAUrD,qBAAa,eAAe;IAIxB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,OAAO;IALjB,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAsC;gBAGhE,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,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,KAAK;YAIC,SAAS;YAoBT,WAAW;IAsLnB,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,GACnB,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;CAWH"}
@@ -2,159 +2,166 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RequestExecutor = void 0;
4
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
- */
5
+ const errors_1 = require("../../Types/errors");
11
6
  class RequestExecutor {
12
7
  agent;
13
8
  interceptors;
14
9
  options;
10
+ redirectStatusCodes = new Set([301, 302, 303, 307, 308]);
15
11
  constructor(agent, interceptors, options) {
16
12
  this.agent = agent;
17
13
  this.interceptors = interceptors;
18
14
  this.options = options;
19
15
  }
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
16
  calcDelay(attempt) {
34
17
  const { baseDelay, maxDelay, jitter } = this.options.retryOptions;
35
18
  const base = Math.min(baseDelay * Math.pow(2, attempt), maxDelay);
36
- // Jitter помогает избежать "эффекта стада", распределяя запросы во времени
37
19
  return jitter ? base * (0.75 + Math.random() * 0.5) : base;
38
20
  }
39
- /** @en Simple async sleep helper. */
40
21
  sleep(ms) {
41
22
  return new Promise((resolve) => setTimeout(resolve, ms));
42
23
  }
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;
24
+ async drainBody(body) {
25
+ if (!body)
26
+ return;
27
+ try {
28
+ if (typeof body.dump === "function") {
29
+ await body.dump();
30
+ return;
31
+ }
32
+ if (typeof body.resume === "function") {
33
+ body.resume();
34
+ return;
35
+ }
36
+ if (typeof body.destroy === "function") {
37
+ body.destroy();
38
+ }
39
+ }
40
+ catch {
41
+ /* ignore */
42
+ }
58
43
  }
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) {
44
+ async executeCore(method, url, headers, body, metrics, signal, parser) {
45
+ let currentUrl = url;
46
+ let currentMethod = method;
47
+ let currentHeaders = headers;
48
+ let currentBody = body;
49
+ let redirects = 0;
50
+ let attempt = 0;
72
51
  const timeoutController = new AbortController();
73
52
  const timer = setTimeout(() => timeoutController.abort(), this.options.timeout);
74
53
  const abortHandler = () => timeoutController.abort();
75
54
  if (signal) {
76
55
  if (signal.aborted) {
77
56
  clearTimeout(timer);
78
- throw new Types_1.HttpClientError("Request aborted by user", "ABORTED", 0, undefined, url, method);
57
+ throw new errors_1.HttpClientError("Request aborted by user", "ABORTED", 0, undefined, url, method);
79
58
  }
80
- signal.addEventListener("abort", abortHandler);
59
+ signal.addEventListener("abort", abortHandler, { once: true });
81
60
  }
82
61
  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"];
62
+ while (true) {
63
+ try {
64
+ const config = await this.interceptors.applyRequest({
65
+ url: currentUrl,
66
+ method: currentMethod,
67
+ headers: currentHeaders,
68
+ body: currentBody,
69
+ });
70
+ const res = await (0, undici_1.request)(config.url, {
71
+ method: config.method,
72
+ headers: config.headers,
73
+ body: config.body,
74
+ dispatcher: this.agent,
75
+ signal: timeoutController.signal,
76
+ });
77
+ const status = res.statusCode;
78
+ const resHeaders = res.headers;
79
+ if (this.options.followRedirects &&
80
+ this.redirectStatusCodes.has(status)) {
81
+ if (redirects >= this.options.maxRedirects) {
82
+ await this.drainBody(res.body);
83
+ throw new errors_1.HttpClientError("Too many redirects", "TOO_MANY_REDIRECTS", status);
84
+ }
85
+ const location = resHeaders.location;
86
+ if (location) {
87
+ await this.drainBody(res.body);
88
+ const nextUrl = new URL(location, config.url).toString();
89
+ const nextMethod = status === 303 ? "GET" : currentMethod;
90
+ currentUrl = nextUrl;
91
+ currentMethod = nextMethod;
92
+ currentBody = nextMethod === "GET" ? undefined : currentBody;
93
+ if (nextMethod === "GET") {
94
+ if (currentHeaders["content-type"] ||
95
+ currentHeaders["Content-Type"] ||
96
+ currentHeaders["content-length"] ||
97
+ currentHeaders["Content-Length"]) {
98
+ const nextHeaders = { ...currentHeaders };
99
+ delete nextHeaders["content-type"];
100
+ delete nextHeaders["Content-Type"];
101
+ delete nextHeaders["content-length"];
102
+ delete nextHeaders["Content-Length"];
103
+ currentHeaders = nextHeaders;
104
+ }
105
+ }
106
+ redirects++;
107
+ continue;
108
+ }
110
109
  }
111
- return this.execute(nextMethod, nextUrl, nextHeaders, nextMethod === "GET" ? undefined : body, metrics, signal, redirects + 1);
110
+ if (status >= 500) {
111
+ if (attempt < this.options.maxRetries) {
112
+ if (metrics)
113
+ metrics.retries += 1;
114
+ await this.drainBody(res.body);
115
+ const delay = this.calcDelay(attempt);
116
+ if (delay > 0)
117
+ await this.sleep(delay);
118
+ attempt++;
119
+ continue;
120
+ }
121
+ throw new errors_1.HttpClientError(`HTTP ${status}`, "HTTP_ERROR", status, undefined, config.url, currentMethod);
122
+ }
123
+ const transformed = await this.interceptors.applyResponse({
124
+ status,
125
+ headers: resHeaders,
126
+ body: res.body,
127
+ url: config.url,
128
+ });
129
+ const parsed = await parser(transformed);
130
+ return {
131
+ status: transformed.status,
132
+ headers: transformed.headers,
133
+ body: parsed,
134
+ url: transformed.url,
135
+ };
112
136
  }
113
- }
114
- if (this.options.retryOptions.retryStatusCodes.includes(res.statusCode)) {
115
- if (attempt < this.options.maxRetries) {
116
- if (metrics) {
117
- metrics.retries += 1;
137
+ catch (err) {
138
+ if (err?.name === "AbortError") {
139
+ if (signal?.aborted) {
140
+ throw new errors_1.HttpClientError("Request aborted by user", "ABORTED", 0, err, url, method);
141
+ }
142
+ throw new errors_1.TimeoutError(url, this.options.timeout);
118
143
  }
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;
144
+ if (attempt < this.options.maxRetries &&
145
+ (err?.code === "ECONNREFUSED" || err?.code === "ETIMEDOUT")) {
146
+ if (metrics)
147
+ metrics.retries += 1;
148
+ await this.sleep(this.calcDelay(attempt));
149
+ attempt++;
150
+ continue;
124
151
  }
125
- await this.sleep(delay);
126
- return this.execute(method, url, headers, body, metrics, signal, redirects, attempt + 1);
152
+ throw err;
127
153
  }
128
154
  }
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
155
  }
153
156
  finally {
157
+ clearTimeout(timer);
154
158
  if (signal)
155
159
  signal.removeEventListener("abort", abortHandler);
156
160
  }
157
161
  }
162
+ async execute(method, url, headers, body, metrics, signal) {
163
+ return this.executeCore(method, url, headers, body, metrics, signal, async (res) => res.body);
164
+ }
158
165
  }
159
166
  exports.RequestExecutor = RequestExecutor;
160
167
  //# sourceMappingURL=RequestExecutor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RequestExecutor.js","sourceRoot":"","sources":["../../../src/Hyperttp/Core/RequestExecutor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RequestExecutor.js","sourceRoot":"","sources":["../../../src/Hyperttp/Core/RequestExecutor.ts"],"names":[],"mappings":";;;AAAA,mCAAwC;AAKxC,+CAAmE;AASnE,MAAa,eAAe;IAIhB;IACA;IACA;IALO,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAE1E,YACU,KAAY,EACZ,YAAgC,EAChC,OAQP;QAVO,UAAK,GAAL,KAAK,CAAO;QACZ,iBAAY,GAAZ,YAAY,CAAoB;QAChC,YAAO,GAAP,OAAO,CAQd;IACA,CAAC;IAEI,SAAS,CAAC,OAAe;QAC/B,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;QAClE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,QAAS,CAAC,CAAC;QACpE,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7D,CAAC;IAEO,KAAK,CAAC,EAAU;QACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,IAAS;QAC/B,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,IAAI,CAAC;YACH,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBACpC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;gBAClB,OAAO;YACT,CAAC;YACD,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBACtC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACd,OAAO;YACT,CAAC;YACD,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;gBACvC,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,WAAW,CACvB,MAAc,EACd,GAAW,EACX,OAA+B,EAC/B,IAAiC,EACjC,OAAmC,EACnC,MAA+B,EAC/B,MAAiD;QAOjD,IAAI,UAAU,GAAG,GAAG,CAAC;QACrB,IAAI,aAAa,GAAG,MAAM,CAAC;QAC3B,IAAI,cAAc,GAAG,OAAO,CAAC;QAC7B,IAAI,WAAW,GAAG,IAAI,CAAC;QAEvB,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,MAAM,iBAAiB,GAAG,IAAI,eAAe,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,UAAU,CACtB,GAAG,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,EAC/B,IAAI,CAAC,OAAO,CAAC,OAAO,CACrB,CAAC;QAEF,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAErD,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,MAAM,IAAI,wBAAe,CACvB,yBAAyB,EACzB,SAAS,EACT,CAAC,EACD,SAAS,EACT,GAAG,EACH,MAAM,CACP,CAAC;YACJ,CAAC;YACD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,CAAC;QAED,IAAI,CAAC;YACH,OAAO,IAAI,EAAE,CAAC;gBACZ,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;wBAClD,GAAG,EAAE,UAAU;wBACf,MAAM,EAAE,aAAa;wBACrB,OAAO,EAAE,cAAc;wBACvB,IAAI,EAAE,WAAW;qBAClB,CAAC,CAAC;oBAEH,MAAM,GAAG,GAAG,MAAM,IAAA,gBAAO,EAAC,MAAM,CAAC,GAAG,EAAE;wBACpC,MAAM,EAAE,MAAM,CAAC,MAAa;wBAC5B,OAAO,EAAE,MAAM,CAAC,OAAO;wBACvB,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,UAAU,EAAE,IAAI,CAAC,KAAK;wBACtB,MAAM,EAAE,iBAAiB,CAAC,MAAM;qBACjC,CAAC,CAAC;oBAEH,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC;oBAC9B,MAAM,UAAU,GAAG,GAAG,CAAC,OAA8B,CAAC;oBAEtD,IACE,IAAI,CAAC,OAAO,CAAC,eAAe;wBAC5B,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,EACpC,CAAC;wBACD,IAAI,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;4BAC3C,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;4BAC/B,MAAM,IAAI,wBAAe,CACvB,oBAAoB,EACpB,oBAAoB,EACpB,MAAM,CACP,CAAC;wBACJ,CAAC;wBAED,MAAM,QAAQ,GAAG,UAAU,CAAC,QAA8B,CAAC;wBAC3D,IAAI,QAAQ,EAAE,CAAC;4BACb,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;4BAE/B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;4BACzD,MAAM,UAAU,GAAG,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC;4BAE1D,UAAU,GAAG,OAAO,CAAC;4BACrB,aAAa,GAAG,UAAU,CAAC;4BAC3B,WAAW,GAAG,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;4BAE7D,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;gCACzB,IACE,cAAc,CAAC,cAAc,CAAC;oCAC9B,cAAc,CAAC,cAAc,CAAC;oCAC9B,cAAc,CAAC,gBAAgB,CAAC;oCAChC,cAAc,CAAC,gBAAgB,CAAC,EAChC,CAAC;oCACD,MAAM,WAAW,GAAG,EAAE,GAAG,cAAc,EAAE,CAAC;oCAC1C,OAAO,WAAW,CAAC,cAAc,CAAC,CAAC;oCACnC,OAAO,WAAW,CAAC,cAAc,CAAC,CAAC;oCACnC,OAAO,WAAW,CAAC,gBAAgB,CAAC,CAAC;oCACrC,OAAO,WAAW,CAAC,gBAAgB,CAAC,CAAC;oCACrC,cAAc,GAAG,WAAW,CAAC;gCAC/B,CAAC;4BACH,CAAC;4BAED,SAAS,EAAE,CAAC;4BACZ,SAAS;wBACX,CAAC;oBACH,CAAC;oBAED,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;wBAClB,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;4BACtC,IAAI,OAAO;gCAAE,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;4BAElC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;4BAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;4BACtC,IAAI,KAAK,GAAG,CAAC;gCAAE,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;4BAEvC,OAAO,EAAE,CAAC;4BACV,SAAS;wBACX,CAAC;wBAED,MAAM,IAAI,wBAAe,CACvB,QAAQ,MAAM,EAAE,EAChB,YAAY,EACZ,MAAM,EACN,SAAS,EACT,MAAM,CAAC,GAAG,EACV,aAAa,CACd,CAAC;oBACJ,CAAC;oBAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;wBACxD,MAAM;wBACN,OAAO,EAAE,UAAU;wBACnB,IAAI,EAAE,GAAG,CAAC,IAAW;wBACrB,GAAG,EAAE,MAAM,CAAC,GAAG;qBAChB,CAAC,CAAC;oBAEH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAA+B,CAAC,CAAC;oBAE7D,OAAO;wBACL,MAAM,EAAE,WAAW,CAAC,MAAM;wBAC1B,OAAO,EAAE,WAAW,CAAC,OAAO;wBAC5B,IAAI,EAAE,MAAM;wBACZ,GAAG,EAAE,WAAW,CAAC,GAAG;qBACrB,CAAC;gBACJ,CAAC;gBAAC,OAAO,GAAQ,EAAE,CAAC;oBAClB,IAAI,GAAG,EAAE,IAAI,KAAK,YAAY,EAAE,CAAC;wBAC/B,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;4BACpB,MAAM,IAAI,wBAAe,CACvB,yBAAyB,EACzB,SAAS,EACT,CAAC,EACD,GAAG,EACH,GAAG,EACH,MAAM,CACP,CAAC;wBACJ,CAAC;wBACD,MAAM,IAAI,qBAAY,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBACpD,CAAC;oBAED,IACE,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU;wBACjC,CAAC,GAAG,EAAE,IAAI,KAAK,cAAc,IAAI,GAAG,EAAE,IAAI,KAAK,WAAW,CAAC,EAC3D,CAAC;wBACD,IAAI,OAAO;4BAAE,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;wBAClC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;wBAC1C,OAAO,EAAE,CAAC;wBACV,SAAS;oBACX,CAAC;oBAED,MAAM,GAAG,CAAC;gBACZ,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,MAAM;gBAAE,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CACX,MAAc,EACd,GAAW,EACX,OAA+B,EAC/B,IAAiC,EACjC,OAAwB,EACxB,MAAoB;QAOpB,OAAO,IAAI,CAAC,WAAW,CACrB,MAAM,EACN,GAAG,EACH,OAAO,EACP,IAAI,EACJ,OAAO,EACP,MAAM,EACN,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CACxB,CAAC;IACJ,CAAC;CACF;AA5PD,0CA4PC"}
@@ -0,0 +1,10 @@
1
+ import type { RequestPerformanceProfile } from "../../Types/metrics.js";
2
+ type ProfiledResult<T> = {
3
+ result: T;
4
+ profile: RequestPerformanceProfile;
5
+ };
6
+ export declare class RequestProfiler {
7
+ static profile<T>(executor: () => Promise<T>): Promise<ProfiledResult<T>>;
8
+ }
9
+ export type { ProfiledResult };
10
+ //# sourceMappingURL=RequestProfiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequestProfiler.d.ts","sourceRoot":"","sources":["../../../src/Hyperttp/Core/RequestProfiler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,yBAAyB,EAC1B,MAAM,wBAAwB,CAAC;AAEhC,KAAK,cAAc,CAAC,CAAC,IAAI;IACvB,MAAM,EAAE,CAAC,CAAC;IACV,OAAO,EAAE,yBAAyB,CAAC;CACpC,CAAC;AAaF,qBAAa,eAAe;WACb,OAAO,CAAC,CAAC,EACpB,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACzB,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;CA2C9B;AAED,YAAY,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RequestProfiler = void 0;
4
+ function toMemorySnapshot() {
5
+ const usage = process.memoryUsage();
6
+ return {
7
+ rss: usage.rss,
8
+ heapTotal: usage.heapTotal,
9
+ heapUsed: usage.heapUsed,
10
+ external: usage.external,
11
+ arrayBuffers: usage.arrayBuffers,
12
+ };
13
+ }
14
+ class RequestProfiler {
15
+ static async profile(executor) {
16
+ const startedAt = Date.now();
17
+ const hrStart = process.hrtime.bigint();
18
+ const cpuStart = process.cpuUsage();
19
+ const memoryBefore = toMemorySnapshot();
20
+ const result = await executor();
21
+ const hrEnd = process.hrtime.bigint();
22
+ const finishedAt = Date.now();
23
+ const cpuDiff = process.cpuUsage(cpuStart);
24
+ const memoryAfter = toMemorySnapshot();
25
+ const durationMs = Number(hrEnd - hrStart) / 1_000_000;
26
+ const cpuUserMs = cpuDiff.user / 1000;
27
+ const cpuSystemMs = cpuDiff.system / 1000;
28
+ const cpuTotalMs = cpuUserMs + cpuSystemMs;
29
+ const profile = {
30
+ wallClockStart: startedAt,
31
+ wallClockEnd: finishedAt,
32
+ durationMs,
33
+ cpu: {
34
+ userMs: cpuUserMs,
35
+ systemMs: cpuSystemMs,
36
+ totalMs: cpuTotalMs,
37
+ percent: durationMs > 0 ? (cpuTotalMs / durationMs) * 100 : 0,
38
+ },
39
+ memory: {
40
+ before: memoryBefore,
41
+ after: memoryAfter,
42
+ delta: {
43
+ rss: memoryAfter.rss - memoryBefore.rss,
44
+ heapTotal: memoryAfter.heapTotal - memoryBefore.heapTotal,
45
+ heapUsed: memoryAfter.heapUsed - memoryBefore.heapUsed,
46
+ external: memoryAfter.external - memoryBefore.external,
47
+ arrayBuffers: memoryAfter.arrayBuffers - memoryBefore.arrayBuffers,
48
+ },
49
+ },
50
+ };
51
+ return { result, profile };
52
+ }
53
+ }
54
+ exports.RequestProfiler = RequestProfiler;
55
+ //# sourceMappingURL=RequestProfiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequestProfiler.js","sourceRoot":"","sources":["../../../src/Hyperttp/Core/RequestProfiler.ts"],"names":[],"mappings":";;;AAUA,SAAS,gBAAgB;IACvB,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACpC,OAAO;QACL,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,YAAY,EAAE,KAAK,CAAC,YAAY;KACjC,CAAC;AACJ,CAAC;AAED,MAAa,eAAe;IAC1B,MAAM,CAAC,KAAK,CAAC,OAAO,CAClB,QAA0B;QAE1B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,YAAY,GAAG,gBAAgB,EAAE,CAAC;QAExC,MAAM,MAAM,GAAG,MAAM,QAAQ,EAAE,CAAC;QAEhC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,WAAW,GAAG,gBAAgB,EAAE,CAAC;QAEvC,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,SAAS,CAAC;QACvD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QACtC,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;QAC1C,MAAM,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC;QAE3C,MAAM,OAAO,GAA8B;YACzC,cAAc,EAAE,SAAS;YACzB,YAAY,EAAE,UAAU;YACxB,UAAU;YACV,GAAG,EAAE;gBACH,MAAM,EAAE,SAAS;gBACjB,QAAQ,EAAE,WAAW;gBACrB,OAAO,EAAE,UAAU;gBACnB,OAAO,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;aAC9D;YACD,MAAM,EAAE;gBACN,MAAM,EAAE,YAAY;gBACpB,KAAK,EAAE,WAAW;gBAClB,KAAK,EAAE;oBACL,GAAG,EAAE,WAAW,CAAC,GAAG,GAAG,YAAY,CAAC,GAAG;oBACvC,SAAS,EAAE,WAAW,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS;oBACzD,QAAQ,EAAE,WAAW,CAAC,QAAQ,GAAG,YAAY,CAAC,QAAQ;oBACtD,QAAQ,EAAE,WAAW,CAAC,QAAQ,GAAG,YAAY,CAAC,QAAQ;oBACtD,YAAY,EAAE,WAAW,CAAC,YAAY,GAAG,YAAY,CAAC,YAAY;iBACnE;aACF;SACF,CAAC;QAEF,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC7B,CAAC;CACF;AA9CD,0CA8CC"}
@@ -0,0 +1,23 @@
1
+ import { ResponseType, SourceType } from "../../Types/http";
2
+ import { ConversionMeta } from "../../Types/request";
3
+ import { ResponseConverterOptions, ParsedResponse } from "../../Types/response";
4
+ export declare class ResponseConverter {
5
+ private readonly options;
6
+ private readonly xmlParser;
7
+ private readonly xmlBuilder;
8
+ constructor(options?: ResponseConverterOptions);
9
+ readBody(body: any): Promise<Buffer>;
10
+ decodeBody(body: Buffer, encoding?: string, charset?: BufferEncoding): Promise<string>;
11
+ detectSourceType(contentType?: string, text?: string, url?: string): SourceType;
12
+ convert(body: Buffer, targetType: ResponseType, meta?: ConversionMeta): Promise<ParsedResponse>;
13
+ private toAuto;
14
+ private toJson;
15
+ private toXml;
16
+ private toHtml;
17
+ private htmlToJson;
18
+ private safeJsonParse;
19
+ private normalizeResponseShape;
20
+ private escapeXml;
21
+ toBuffer(input: any): Buffer;
22
+ }
23
+ //# sourceMappingURL=ResponseConverter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResponseConverter.d.ts","sourceRoot":"","sources":["../../../src/Hyperttp/Core/ResponseConverter.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAWhF,qBAAa,iBAAiB;IAIhB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkC;gBAEhC,OAAO,GAAE,wBAA6B;IAgB7D,QAAQ,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAgCpC,UAAU,CACd,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,GAAE,cAAgD,GACxD,OAAO,CAAC,MAAM,CAAC;IAqBlB,gBAAgB,CACd,WAAW,CAAC,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,MAAM,EACb,GAAG,CAAC,EAAE,MAAM,GACX,UAAU;IA6CP,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,YAAY,EACxB,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,cAAc,CAAC;IAgC1B,OAAO,CAAC,MAAM;IAiCd,OAAO,CAAC,MAAM;IAyCd,OAAO,CAAC,KAAK;IAoBb,OAAO,CAAC,MAAM;IAwBd,OAAO,CAAC,UAAU;IAkDlB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,sBAAsB;IAyC9B,OAAO,CAAC,SAAS;IASjB,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM;CAK7B"}