@hyperttp/core 1.3.1 → 1.4.0

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 (46) hide show
  1. package/Core/HyperCore.d.ts +135 -77
  2. package/Core/HyperCore.d.ts.map +1 -1
  3. package/Core/HyperCore.js +280 -246
  4. package/Core/HyperCore.js.map +1 -1
  5. package/README.md +169 -96
  6. package/package.json +14 -8
  7. package/transports/browser.d.ts +228 -0
  8. package/transports/browser.d.ts.map +1 -0
  9. package/transports/browser.js +451 -0
  10. package/transports/browser.js.map +1 -0
  11. package/transports/manager.d.ts +9 -85
  12. package/transports/manager.d.ts.map +1 -1
  13. package/transports/manager.js +152 -222
  14. package/transports/manager.js.map +1 -1
  15. package/transports/node.d.ts +4 -36
  16. package/transports/node.d.ts.map +1 -1
  17. package/transports/node.js +119 -159
  18. package/transports/node.js.map +1 -1
  19. package/utils/decompress.d.ts +16 -20
  20. package/utils/decompress.d.ts.map +1 -1
  21. package/utils/decompress.js +151 -60
  22. package/utils/decompress.js.map +1 -1
  23. package/utils/errors.d.ts +0 -10
  24. package/utils/errors.d.ts.map +1 -1
  25. package/utils/errors.js +1 -11
  26. package/utils/errors.js.map +1 -1
  27. package/utils/merge.d.ts +0 -3
  28. package/utils/merge.d.ts.map +1 -1
  29. package/utils/merge.js +12 -22
  30. package/utils/merge.js.map +1 -1
  31. package/utils/normalize.d.ts +40 -21
  32. package/utils/normalize.d.ts.map +1 -1
  33. package/utils/normalize.js +217 -138
  34. package/utils/normalize.js.map +1 -1
  35. package/utils/pipeline.d.ts +10 -30
  36. package/utils/pipeline.d.ts.map +1 -1
  37. package/utils/pipeline.js +44 -44
  38. package/utils/pipeline.js.map +1 -1
  39. package/utils/response.d.ts +105 -23
  40. package/utils/response.d.ts.map +1 -1
  41. package/utils/response.js +308 -38
  42. package/utils/response.js.map +1 -1
  43. package/utils/retryUtils.d.ts +2 -10
  44. package/utils/retryUtils.d.ts.map +1 -1
  45. package/utils/retryUtils.js +17 -21
  46. package/utils/retryUtils.js.map +1 -1
@@ -1,173 +1,133 @@
1
- import http from "node:http";
2
- import https from "node:https";
3
- import { Readable } from "node:stream";
4
- import { ReadableStream } from "node:stream/web";
1
+ const fetchFn = globalThis.fetch;
2
+ function installReadableStreamDump() {
3
+ if (typeof ReadableStream === "undefined")
4
+ return;
5
+ const proto = ReadableStream.prototype;
6
+ if (typeof proto.dump === "function")
7
+ return;
8
+ Object.defineProperty(proto, "dump", {
9
+ value: async function () {
10
+ try {
11
+ return await this.cancel();
12
+ }
13
+ catch {
14
+ //
15
+ }
16
+ },
17
+ writable: true,
18
+ configurable: true,
19
+ });
20
+ }
21
+ installReadableStreamDump();
22
+ function isAbsoluteHttpUrl(url) {
23
+ return url.startsWith("http://") || url.startsWith("https://");
24
+ }
25
+ function resolveUrl(baseUrl, url) {
26
+ if (isAbsoluteHttpUrl(url))
27
+ return url;
28
+ return url.charCodeAt(0) === 47 ? baseUrl + url : baseUrl + "/" + url;
29
+ }
30
+ function isLocalhostUrl(url) {
31
+ const schemeIdx = url.indexOf("://");
32
+ if (schemeIdx === -1)
33
+ return false;
34
+ const hostStart = schemeIdx + 3;
35
+ let hostEnd = url.indexOf("/", hostStart);
36
+ if (hostEnd === -1)
37
+ hostEnd = url.length;
38
+ const host = url.slice(hostStart, hostEnd);
39
+ return host === "localhost" || host.startsWith("localhost:");
40
+ }
41
+ function normalizeHeaders(headers) {
42
+ if (!headers)
43
+ return undefined;
44
+ if (headers instanceof Headers) {
45
+ const out = Object.create(null);
46
+ headers.forEach((value, key) => {
47
+ out[key] = value;
48
+ });
49
+ return out;
50
+ }
51
+ if (Array.isArray(headers)) {
52
+ const out = Object.create(null);
53
+ for (let i = 0; i < headers.length; i++) {
54
+ const pair = headers[i];
55
+ if (!pair)
56
+ continue;
57
+ out[pair[0]] = pair[1];
58
+ }
59
+ return out;
60
+ }
61
+ const out = Object.create(null);
62
+ const src = headers;
63
+ for (const key in src) {
64
+ const value = src[key];
65
+ if (value == null)
66
+ continue;
67
+ if (Array.isArray(value)) {
68
+ out[key] = key.toLowerCase() === "cookie" ? value.join("; ") : value.join(", ");
69
+ continue;
70
+ }
71
+ out[key] = String(value);
72
+ }
73
+ return out;
74
+ }
75
+ function normalizeBody(body) {
76
+ if (body === undefined || body === null)
77
+ return undefined;
78
+ if (typeof body === "string" ||
79
+ body instanceof Uint8Array ||
80
+ body instanceof ArrayBuffer ||
81
+ ArrayBuffer.isView(body) ||
82
+ (typeof ReadableStream !== "undefined" && body instanceof ReadableStream) ||
83
+ (typeof URLSearchParams !== "undefined" && body instanceof URLSearchParams) ||
84
+ (typeof FormData !== "undefined" && body instanceof FormData) ||
85
+ (typeof Blob !== "undefined" && body instanceof Blob)) {
86
+ return body;
87
+ }
88
+ if (typeof body === "object") {
89
+ return JSON.stringify(body);
90
+ }
91
+ return String(body);
92
+ }
5
93
  /**
6
- * @ru Реализация HTTP-транспорта на основе встроенных модулей Node.js (http/https). Поддерживает keep-alive, пулы соединений, автоматический Content-Length, обработку abort-сигналов.
7
- * @en HTTP transport implementation based on Node.js built-in modules (http/https). Supports keep-alive, connection pools, automatic Content-Length, and abort signal handling.
94
+ * @ru Реализация транспорта для Node.js с использованием fetch.
95
+ * @en Node.js transport implementation using fetch.
8
96
  */
9
97
  export class NodeTransport {
10
- /** @ru Конфигурация транспорта. @en Transport configuration. */
11
98
  config;
12
- httpAgent;
13
- httpsAgent;
14
- /**
15
- * @ru Создаёт экземпляр NodeTransport.
16
- * @en Creates a NodeTransport instance.
17
- * @param config - Transport configuration.
18
- */
99
+ isProduction;
100
+ cleanBaseUrl;
19
101
  constructor(config) {
20
102
  this.config = config;
21
- const agentOptions = {
22
- keepAlive: true,
23
- keepAliveMsecs: config.network?.keepAliveTimeout ?? 30000,
24
- maxSockets: config.network?.maxConcurrent ?? 500,
25
- maxFreeSockets: Math.min(256, Math.floor((config.network?.maxConcurrent ?? 500) / 2)),
26
- scheduling: "lifo",
27
- };
28
- this.httpAgent = new http.Agent(agentOptions);
29
- this.httpsAgent = new https.Agent(agentOptions);
30
- }
31
- get baseUrl() {
32
- return this.config.baseUrl ?? "http://localhost:3000";
103
+ this.isProduction = process.env.NODE_ENV === "production";
104
+ const base = config.baseUrl ?? "http://localhost:3000";
105
+ this.cleanBaseUrl = base.endsWith("/") ? base.slice(0, -1) : base;
33
106
  }
34
- /**
35
- * @ru Выполняет HTTP-запрос.
36
- * @en Executes an HTTP request.
37
- * @param req - Request parameters (url, method, headers, body, signal).
38
- * @returns Promise with the transport response.
39
- * @throws If the request is aborted (AbortError).
40
- * @throws If localhost URL is used in production environment.
41
- * @throws On network or protocol errors.
42
- */
43
107
  async execute(req) {
44
- const fullUrl = new URL(req.url, this.baseUrl);
45
- if (process.env.NODE_ENV === "production" &&
46
- fullUrl.hostname === "localhost") {
108
+ const fullUrl = resolveUrl(this.cleanBaseUrl, req.url);
109
+ if (this.isProduction && isLocalhostUrl(fullUrl)) {
47
110
  throw new Error("Localhost URL detected in production environment");
48
111
  }
49
- if (req.signal?.aborted) {
50
- const abortError = req.signal.reason || new Error("The operation was aborted.");
51
- if (abortError instanceof Error && !abortError.name)
52
- abortError.name = "AbortError";
53
- throw abortError;
54
- }
55
- const headers = { ...req.headers };
56
- const hasHeader = (name) => Object.keys(headers).some((k) => k.toLowerCase() === name.toLowerCase());
57
- let finalBody = req.body;
58
- if (finalBody !== undefined && finalBody !== null) {
59
- if (Buffer.isBuffer(finalBody)) {
60
- if (!hasHeader("content-length")) {
61
- headers["Content-Length"] = String(finalBody.byteLength);
62
- }
63
- }
64
- else if (typeof finalBody === "string") {
65
- if (!hasHeader("content-length")) {
66
- headers["Content-Length"] = String(Buffer.byteLength(finalBody, "utf-8"));
67
- }
68
- }
69
- else if (!(finalBody instanceof ReadableStream)) {
70
- finalBody = JSON.stringify(finalBody);
71
- if (!hasHeader("content-length")) {
72
- headers["Content-Length"] = String(Buffer.byteLength(finalBody, "utf-8"));
73
- }
74
- }
75
- }
76
- return new Promise((resolve, reject) => {
77
- const isHttps = fullUrl.protocol === "https:";
78
- const requestFn = isHttps ? https.request : http.request;
79
- const agent = isHttps ? this.httpsAgent : this.httpAgent;
80
- let isDone = false;
81
- let nodeResInstance = null;
82
- const reqOptions = {
83
- method: req.method,
84
- headers: headers,
85
- agent,
86
- };
87
- const nodeReq = requestFn(fullUrl, reqOptions, (nodeRes) => {
88
- nodeResInstance = nodeRes;
89
- nodeRes.on("end", () => {
90
- isDone = true;
91
- cleanupSignal();
92
- });
93
- nodeRes.on("close", () => {
94
- isDone = true;
95
- cleanupSignal();
96
- });
97
- const webStream = Readable.toWeb(nodeRes);
98
- const dump = async () => {
99
- isDone = true;
100
- cleanupSignal();
101
- nodeRes.destroy();
102
- };
103
- const bodyPayload = Object.assign(webStream, {
104
- dump,
105
- });
106
- resolve({
107
- status: nodeRes.statusCode ?? 200,
108
- headers: nodeRes.headers,
109
- url: fullUrl.toString(),
110
- body: bodyPayload,
111
- });
112
- });
113
- let onAbort;
114
- if (req.signal) {
115
- onAbort = () => {
116
- if (isDone)
117
- return;
118
- isDone = true;
119
- nodeReq.destroy();
120
- if (nodeResInstance) {
121
- nodeResInstance.destroy();
122
- }
123
- const err = req.signal?.reason || new Error("The operation was aborted.");
124
- if (err instanceof Error && !err.name)
125
- err.name = "AbortError";
126
- reject(err);
127
- };
128
- req.signal.addEventListener("abort", onAbort, { once: true });
129
- }
130
- function cleanupSignal() {
131
- if (req.signal && onAbort) {
132
- req.signal.removeEventListener("abort", onAbort);
133
- }
134
- }
135
- nodeReq.on("error", (err) => {
136
- if (isDone)
137
- return;
138
- isDone = true;
139
- cleanupSignal();
140
- reject(err);
141
- });
142
- if (finalBody !== undefined && finalBody !== null) {
143
- if (Buffer.isBuffer(finalBody) || typeof finalBody === "string") {
144
- nodeReq.end(finalBody);
145
- }
146
- else if (finalBody instanceof ReadableStream) {
147
- Readable.fromWeb(finalBody).pipe(nodeReq);
148
- }
149
- }
150
- else {
151
- nodeReq.end();
152
- }
112
+ const headers = normalizeHeaders(req.headers);
113
+ const body = normalizeBody(req.body);
114
+ const res = await fetchFn(fullUrl, {
115
+ method: req.method,
116
+ headers,
117
+ body,
118
+ signal: req.signal,
153
119
  });
154
- }
155
- /**
156
- * @ru Закрывает все активные соединения (graceful shutdown). Уничтожает HTTP/HTTPS агенты.
157
- * @en Closes all active connections (graceful shutdown). Destroys HTTP/HTTPS agents.
158
- * @returns Promise that resolves after closing.
159
- */
160
- async close() {
161
- this.httpAgent.destroy();
162
- this.httpsAgent.destroy();
163
- }
164
- /**
165
- * @ru Принудительно уничтожает транспорт (аналог close).
166
- * @en Forcefully destroys the transport (alias for close).
167
- * @returns Promise that resolves after destruction.
168
- */
169
- async destroy() {
170
- await this.close();
120
+ const stream = (res.body ?? new ReadableStream());
121
+ const resHeaders = Object.create(null);
122
+ res.headers.forEach((value, key) => {
123
+ resHeaders[key] = value;
124
+ });
125
+ return {
126
+ status: res.status,
127
+ headers: resHeaders,
128
+ url: res.url,
129
+ body: stream,
130
+ };
171
131
  }
172
132
  }
173
133
  //# sourceMappingURL=node.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/transports/node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/transports/node.ts"],"names":[],"mappings":"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"}
@@ -1,29 +1,25 @@
1
1
  import type { TransportStreamExtensions } from "@hyperttp/types";
2
- /**
3
- * @ru Тип потока с расширениями транспорта (метод dump).
4
- * @en Stream type with transport extensions (dump method).
5
- */
6
2
  type StreamPayload = ReadableStream<Uint8Array> & TransportStreamExtensions;
7
- /**
8
- * @ru Тип буфера с расширениями транспорта (метод dump).
9
- * @en Buffer type with transport extensions (dump method).
10
- */
11
3
  type BufferPayload = Uint8Array & TransportStreamExtensions;
12
4
  /**
13
- * @ru Декомпрессирует буфер, последовательно применяя все кодировки из Content-Encoding.
14
- * @en Decompresses a buffer by sequentially applying all encodings from Content-Encoding.
15
- * @param body - Compressed buffer (Uint8Array).
16
- * @param encoding - Content-Encoding header value (e.g., 'gzip, deflate').
17
- * @returns Decompressed buffer with a no-op dump method.
5
+ * @ru Декомпрессирует буфер с поддержкой множественных кодировок.
6
+ * Сначала пытается Web API, затем fallback на node:zlib для серверных сред.
7
+ * @en Decompresses a buffer with support for multiple encodings.
8
+ * Tries Web API first, then falls back to node:zlib for server environments.
9
+ * @param body - The compressed Uint8Array.
10
+ * @param encoding - The Content-Encoding header value (e.g., 'gzip, br').
11
+ * @returns The decompressed buffer with dump() method attached.
18
12
  */
19
- export declare function decompressBuffer(body: Uint8Array, encoding: string): BufferPayload;
13
+ export declare function decompressBuffer(body: Uint8Array, encoding: string): Promise<BufferPayload>;
20
14
  /**
21
- * @ru Создаёт декомпрессирующий поток для тела ответа, поддерживая цепочку кодировок. Использует DecompressionStream (если доступен) или Node.js zlib.
22
- * @en Creates a decompressing stream for the response body, supporting chained encodings. Uses DecompressionStream (if available) or Node.js zlib.
23
- * @param body - Source compressed stream.
24
- * @param encoding - Content-Encoding header value.
25
- * @returns Transformed stream with a dump method that cancels the stream.
15
+ * @ru Создаёт декомпрессированный стрим с поддержкой множественных кодировок.
16
+ * Использует DecompressionStream для Web и node:zlib для Node.js.
17
+ * @en Creates a decompressed stream with support for multiple encodings.
18
+ * Uses DecompressionStream for Web and node:zlib for Node.js.
19
+ * @param body - The compressed ReadableStream.
20
+ * @param encoding - The Content-Encoding header value (e.g., 'gzip, br').
21
+ * @returns The decompressed stream with dump() method attached.
26
22
  */
27
- export declare function createDecompressStream(body: ReadableStream<Uint8Array>, encoding: string): StreamPayload;
23
+ export declare function createDecompressStream(body: ReadableStream<Uint8Array>, encoding: string): Promise<StreamPayload>;
28
24
  export {};
29
25
  //# sourceMappingURL=decompress.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"decompress.d.ts","sourceRoot":"","sources":["../../src/utils/decompress.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAEjE;;;GAGG;AACH,KAAK,aAAa,GAAG,cAAc,CAAC,UAAU,CAAC,GAAG,yBAAyB,CAAC;AAE5E;;;GAGG;AACH,KAAK,aAAa,GAAG,UAAU,GAAG,yBAAyB,CAAC;AAuE5D;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,MAAM,GACf,aAAa,CAQf;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,EAChC,QAAQ,EAAE,MAAM,GACf,aAAa,CA0Df"}
1
+ {"version":3,"file":"decompress.d.ts","sourceRoot":"","sources":["../../src/utils/decompress.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAGjE,KAAK,aAAa,GAAG,cAAc,CAAC,UAAU,CAAC,GAAG,yBAAyB,CAAC;AAC5E,KAAK,aAAa,GAAG,UAAU,GAAG,yBAAyB,CAAC;AAiJ5D;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAsBjG;AAED;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,EAChC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,CAAC,CAoCxB"}