rezo 1.0.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 (135) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +1507 -0
  3. package/assets/icon.svg +37 -0
  4. package/assets/logo-dark.svg +47 -0
  5. package/assets/logo.svg +58 -0
  6. package/dist/adapters/curl.cjs +1034 -0
  7. package/dist/adapters/curl.js +1031 -0
  8. package/dist/adapters/entries/curl.cjs +4 -0
  9. package/dist/adapters/entries/curl.d.ts +2136 -0
  10. package/dist/adapters/entries/curl.js +2 -0
  11. package/dist/adapters/entries/fetch.cjs +2 -0
  12. package/dist/adapters/entries/fetch.d.ts +2127 -0
  13. package/dist/adapters/entries/fetch.js +1 -0
  14. package/dist/adapters/entries/http.cjs +2 -0
  15. package/dist/adapters/entries/http.d.ts +2126 -0
  16. package/dist/adapters/entries/http.js +1 -0
  17. package/dist/adapters/entries/http2.cjs +4 -0
  18. package/dist/adapters/entries/http2.d.ts +2136 -0
  19. package/dist/adapters/entries/http2.js +2 -0
  20. package/dist/adapters/entries/react-native.cjs +2 -0
  21. package/dist/adapters/entries/react-native.d.ts +2126 -0
  22. package/dist/adapters/entries/react-native.js +1 -0
  23. package/dist/adapters/entries/xhr.cjs +2 -0
  24. package/dist/adapters/entries/xhr.d.ts +2127 -0
  25. package/dist/adapters/entries/xhr.js +1 -0
  26. package/dist/adapters/fetch.cjs +740 -0
  27. package/dist/adapters/fetch.js +739 -0
  28. package/dist/adapters/http.cjs +1153 -0
  29. package/dist/adapters/http.js +1151 -0
  30. package/dist/adapters/http2.cjs +957 -0
  31. package/dist/adapters/http2.js +956 -0
  32. package/dist/adapters/index.cjs +6 -0
  33. package/dist/adapters/index.js +7 -0
  34. package/dist/adapters/picker.cjs +342 -0
  35. package/dist/adapters/picker.js +331 -0
  36. package/dist/adapters/react-native.cjs +545 -0
  37. package/dist/adapters/react-native.js +544 -0
  38. package/dist/adapters/xhr.cjs +622 -0
  39. package/dist/adapters/xhr.js +621 -0
  40. package/dist/cache/dns-cache.cjs +118 -0
  41. package/dist/cache/dns-cache.js +113 -0
  42. package/dist/cache/file-cacher.cjs +264 -0
  43. package/dist/cache/file-cacher.js +261 -0
  44. package/dist/cache/index.cjs +13 -0
  45. package/dist/cache/index.js +5 -0
  46. package/dist/cache/lru-cache.cjs +96 -0
  47. package/dist/cache/lru-cache.js +93 -0
  48. package/dist/cache/response-cache.cjs +314 -0
  49. package/dist/cache/response-cache.js +310 -0
  50. package/dist/cache/url-store.cjs +288 -0
  51. package/dist/cache/url-store.js +285 -0
  52. package/dist/core/hooks.cjs +133 -0
  53. package/dist/core/hooks.js +120 -0
  54. package/dist/core/rezo.cjs +464 -0
  55. package/dist/core/rezo.js +458 -0
  56. package/dist/crawler.d.ts +6255 -0
  57. package/dist/dom/index.cjs +1 -0
  58. package/dist/dom/index.d.ts +23 -0
  59. package/dist/dom/index.js +1 -0
  60. package/dist/entries/crawler.cjs +5 -0
  61. package/dist/entries/crawler.js +2 -0
  62. package/dist/errors/rezo-error.cjs +722 -0
  63. package/dist/errors/rezo-error.js +716 -0
  64. package/dist/index.cjs +34 -0
  65. package/dist/index.d.ts +3335 -0
  66. package/dist/index.js +26 -0
  67. package/dist/platform/browser.cjs +9 -0
  68. package/dist/platform/browser.d.ts +3203 -0
  69. package/dist/platform/browser.js +7 -0
  70. package/dist/platform/bun.cjs +9 -0
  71. package/dist/platform/bun.d.ts +3203 -0
  72. package/dist/platform/bun.js +7 -0
  73. package/dist/platform/deno.cjs +9 -0
  74. package/dist/platform/deno.d.ts +3203 -0
  75. package/dist/platform/deno.js +7 -0
  76. package/dist/platform/node.cjs +9 -0
  77. package/dist/platform/node.d.ts +3203 -0
  78. package/dist/platform/node.js +7 -0
  79. package/dist/platform/react-native.cjs +9 -0
  80. package/dist/platform/react-native.d.ts +3203 -0
  81. package/dist/platform/react-native.js +7 -0
  82. package/dist/platform/worker.cjs +9 -0
  83. package/dist/platform/worker.d.ts +3203 -0
  84. package/dist/platform/worker.js +7 -0
  85. package/dist/plugin/addon/decodo/index.cjs +1 -0
  86. package/dist/plugin/addon/decodo/index.js +1 -0
  87. package/dist/plugin/addon/decodo/options.cjs +1 -0
  88. package/dist/plugin/addon/decodo/options.js +1 -0
  89. package/dist/plugin/addon/oxylabs/index.cjs +1 -0
  90. package/dist/plugin/addon/oxylabs/index.js +1 -0
  91. package/dist/plugin/addon/oxylabs/options.cjs +1 -0
  92. package/dist/plugin/addon/oxylabs/options.js +1 -0
  93. package/dist/plugin/crawler-options.cjs +1 -0
  94. package/dist/plugin/crawler-options.js +1 -0
  95. package/dist/plugin/crawler.cjs +519 -0
  96. package/dist/plugin/crawler.js +517 -0
  97. package/dist/plugin/index.cjs +36 -0
  98. package/dist/plugin/index.js +32 -0
  99. package/dist/proxy/index.cjs +142 -0
  100. package/dist/proxy/index.js +139 -0
  101. package/dist/responses/buildError.cjs +452 -0
  102. package/dist/responses/buildError.js +441 -0
  103. package/dist/responses/buildResponse.cjs +365 -0
  104. package/dist/responses/buildResponse.js +361 -0
  105. package/dist/responses/download.cjs +54 -0
  106. package/dist/responses/download.js +52 -0
  107. package/dist/responses/stream.cjs +60 -0
  108. package/dist/responses/stream.js +58 -0
  109. package/dist/responses/upload.cjs +54 -0
  110. package/dist/responses/upload.js +52 -0
  111. package/dist/types/cookies.cjs +394 -0
  112. package/dist/types/cookies.js +391 -0
  113. package/dist/types/download.cjs +10 -0
  114. package/dist/types/download.js +10 -0
  115. package/dist/types/rezo-request.cjs +131 -0
  116. package/dist/types/rezo-request.js +131 -0
  117. package/dist/utils/agent-merger.cjs +111 -0
  118. package/dist/utils/agent-merger.js +108 -0
  119. package/dist/utils/compression.cjs +84 -0
  120. package/dist/utils/compression.js +82 -0
  121. package/dist/utils/cookies.cjs +514 -0
  122. package/dist/utils/cookies.js +511 -0
  123. package/dist/utils/data-operations.cjs +75 -0
  124. package/dist/utils/data-operations.js +73 -0
  125. package/dist/utils/form-data.cjs +164 -0
  126. package/dist/utils/form-data.js +161 -0
  127. package/dist/utils/headers.cjs +162 -0
  128. package/dist/utils/headers.js +161 -0
  129. package/dist/utils/http-config.cjs +723 -0
  130. package/dist/utils/http-config.js +718 -0
  131. package/dist/utils/index.cjs +8 -0
  132. package/dist/utils/index.js +8 -0
  133. package/dist/utils/tools.cjs +18 -0
  134. package/dist/utils/tools.js +15 -0
  135. package/package.json +172 -0
@@ -0,0 +1,361 @@
1
+ import { RezoCookieJar } from '../utils/cookies.js';
2
+ import RezoHeaders from '../utils/headers.js';
3
+ const textRelatedTypes = [
4
+ "text",
5
+ "xml",
6
+ "xhtml+xml",
7
+ "html",
8
+ "php",
9
+ "javascript",
10
+ "ecmascript",
11
+ "x-javascript",
12
+ "typescript",
13
+ "x-httpd-php",
14
+ "x-php",
15
+ "x-python",
16
+ "x-python",
17
+ "x-ruby",
18
+ "x-ruby",
19
+ "x-sh",
20
+ "x-bash",
21
+ "x-java",
22
+ "x-java-source",
23
+ "x-c",
24
+ "x-c++",
25
+ "x-csrc",
26
+ "x-chdr",
27
+ "x-csharp",
28
+ "x-csh",
29
+ "x-go",
30
+ "x-go",
31
+ "x-scala",
32
+ "x-scala",
33
+ "x-rust",
34
+ "rust",
35
+ "x-swift",
36
+ "x-swift",
37
+ "x-kotlin",
38
+ "x-kotlin",
39
+ "x-perl",
40
+ "x-perl",
41
+ "x-lua",
42
+ "x-lua",
43
+ "x-haskell",
44
+ "x-haskell",
45
+ "x-sql",
46
+ "sql",
47
+ "css",
48
+ "csv",
49
+ "plain",
50
+ "markdown",
51
+ "x-markdown",
52
+ "x-latex",
53
+ "x-tex"
54
+ ];
55
+ const jsonRelatedTypes = [
56
+ "application/json",
57
+ "application/dns-json",
58
+ "application/jsonrequest",
59
+ "application/x-json",
60
+ "text/json",
61
+ "application/jsonc",
62
+ "application/x-jsonc",
63
+ "application/json-lines",
64
+ "application/jsonl",
65
+ "application/x-jsonl",
66
+ "application/ndjson",
67
+ "application/x-ndjson"
68
+ ];
69
+ function isNodeEnvironment() {
70
+ return !!(typeof process !== "undefined" && process.versions && process.versions.node);
71
+ }
72
+ function isBrowserEnvironment() {
73
+ return typeof window !== "undefined" && typeof window.document !== "undefined";
74
+ }
75
+ function supportsBlob() {
76
+ return isBrowserEnvironment() && typeof Blob !== "undefined";
77
+ }
78
+ function supportsBuffer() {
79
+ return isNodeEnvironment() && typeof Buffer !== "undefined";
80
+ }
81
+ function supportsArrayBuffer() {
82
+ return typeof ArrayBuffer !== "undefined";
83
+ }
84
+ function formatResponse(data, config, headers) {
85
+ const contentType = headers.get("Content-Type");
86
+ const responseType = config.responseType;
87
+ if (responseType === "buffer" || responseType === "binary") {
88
+ config.responseType = "buffer";
89
+ if (supportsBuffer()) {
90
+ return data instanceof Buffer ? data : Buffer.from(data);
91
+ }
92
+ return data;
93
+ }
94
+ if (responseType === "arrayBuffer") {
95
+ if (supportsArrayBuffer()) {
96
+ if (data instanceof ArrayBuffer)
97
+ return data;
98
+ if (typeof data === "string") {
99
+ const encoder = new TextEncoder;
100
+ return encoder.encode(data).buffer;
101
+ }
102
+ if (supportsBuffer() && data instanceof Buffer) {
103
+ return data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);
104
+ }
105
+ }
106
+ return data;
107
+ }
108
+ if (responseType === "blob") {
109
+ if (supportsBlob()) {
110
+ if (typeof data === "string") {
111
+ return new Blob([data]);
112
+ }
113
+ if (data instanceof ArrayBuffer || supportsBuffer() && data instanceof Buffer) {
114
+ return new Blob([data]);
115
+ }
116
+ }
117
+ return data;
118
+ }
119
+ if (responseType === "text") {
120
+ if (typeof data === "string")
121
+ return data;
122
+ if (supportsBuffer() && data instanceof Buffer) {
123
+ return data.toString("utf-8");
124
+ }
125
+ if (data instanceof ArrayBuffer) {
126
+ return new TextDecoder().decode(data);
127
+ }
128
+ return String(data);
129
+ }
130
+ if (responseType === "json") {
131
+ return parseJsonData(data);
132
+ }
133
+ return parseResponseBodyWithAutoDetect(data, contentType, config);
134
+ }
135
+ function parseResponseBodyWithAutoDetect(data, contentType, config) {
136
+ if (contentType && jsonRelatedTypes.some((type) => contentType.includes(type))) {
137
+ config.responseType = "json";
138
+ return parseJsonData(data);
139
+ }
140
+ if (contentType && (contentType.includes("image/") || contentType.includes("video/") || contentType.includes("audio/"))) {
141
+ config.responseType = "buffer";
142
+ if (supportsBuffer()) {
143
+ return data instanceof Buffer ? data : Buffer.from(data);
144
+ }
145
+ return data;
146
+ }
147
+ if (contentType && contentType.includes("application/octet-stream")) {
148
+ config.responseType = "buffer";
149
+ if (supportsBuffer()) {
150
+ return data instanceof Buffer ? data : Buffer.from(data);
151
+ }
152
+ return data;
153
+ }
154
+ if (contentType && textRelatedTypes.some((type) => contentType.includes(type))) {
155
+ config.responseType = "text";
156
+ if (typeof data === "string")
157
+ return data;
158
+ if (supportsBuffer() && data instanceof Buffer) {
159
+ return data.toString("utf-8");
160
+ }
161
+ if (data instanceof ArrayBuffer) {
162
+ return new TextDecoder().decode(data);
163
+ }
164
+ return String(data);
165
+ }
166
+ config.responseType = "buffer";
167
+ if (supportsBuffer()) {
168
+ return data instanceof Buffer ? data : Buffer.from(data);
169
+ }
170
+ if (supportsArrayBuffer()) {
171
+ if (data instanceof ArrayBuffer)
172
+ return data;
173
+ if (typeof data === "string") {
174
+ const encoder = new TextEncoder;
175
+ return encoder.encode(data).buffer;
176
+ }
177
+ }
178
+ return data;
179
+ }
180
+ function parseResponseBody(data, contentType, responseType) {
181
+ if (contentType && jsonRelatedTypes.some((type) => contentType.includes(type))) {
182
+ return parseJsonData(data);
183
+ }
184
+ if (contentType && contentType.includes("image/") || contentType && contentType.includes("video/") || contentType && contentType.includes("audio/")) {
185
+ if (responseType === "blob" && supportsBlob()) {
186
+ if (typeof data === "string") {
187
+ return new Blob([data]);
188
+ }
189
+ return new Blob([data]);
190
+ }
191
+ if (responseType === "arrayBuffer" && supportsArrayBuffer()) {
192
+ if (data instanceof ArrayBuffer)
193
+ return data;
194
+ if (supportsBuffer() && data instanceof Buffer) {
195
+ return data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);
196
+ }
197
+ }
198
+ }
199
+ if (contentType && contentType.includes("application/octet-stream")) {
200
+ if (responseType === "arrayBuffer" && supportsArrayBuffer()) {
201
+ if (data instanceof ArrayBuffer)
202
+ return data;
203
+ if (supportsBuffer() && data instanceof Buffer) {
204
+ return data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);
205
+ }
206
+ }
207
+ if (supportsBuffer()) {
208
+ return data instanceof Buffer ? data : Buffer.from(data);
209
+ }
210
+ return data;
211
+ }
212
+ if (contentType && textRelatedTypes.some((type) => contentType.includes(type))) {
213
+ if (typeof data === "string")
214
+ return data;
215
+ if (supportsBuffer() && data instanceof Buffer) {
216
+ return data.toString("utf-8");
217
+ }
218
+ if (data instanceof ArrayBuffer) {
219
+ return new TextDecoder().decode(data);
220
+ }
221
+ return String(data);
222
+ }
223
+ if (supportsBuffer()) {
224
+ return data instanceof Buffer ? data : Buffer.from(data);
225
+ }
226
+ if (supportsArrayBuffer()) {
227
+ if (data instanceof ArrayBuffer)
228
+ return data;
229
+ if (typeof data === "string") {
230
+ const encoder = new TextEncoder;
231
+ return encoder.encode(data).buffer;
232
+ }
233
+ }
234
+ return data;
235
+ }
236
+ function parseJsonData(body) {
237
+ try {
238
+ let jsonString;
239
+ if (typeof body === "string") {
240
+ if (body.length < 3)
241
+ return body;
242
+ jsonString = body;
243
+ } else if (supportsBuffer() && body instanceof Buffer) {
244
+ jsonString = body.toString("utf-8");
245
+ } else if (body instanceof ArrayBuffer) {
246
+ jsonString = new TextDecoder().decode(body);
247
+ } else {
248
+ jsonString = String(body);
249
+ }
250
+ jsonString = jsonString.trim();
251
+ if (jsonString.includes(`
252
+ `) && !jsonString.startsWith("[") && !jsonString.startsWith("{")) {
253
+ const lines = jsonString.split(`
254
+ `).filter((line) => line.trim());
255
+ return lines.map((line) => JSON.parse(line.trim()));
256
+ }
257
+ let cleanJsonString = jsonString;
258
+ if (jsonString.includes("//") || jsonString.includes("/*")) {
259
+ cleanJsonString = jsonString.replace(/\/\*[\s\S]*?\*\//g, "").replace(/\/\/.*$/gm, "").replace(/,\s*([}\]])/g, "$1");
260
+ }
261
+ return JSON.parse(cleanJsonString);
262
+ } catch {
263
+ try {
264
+ if (supportsBuffer()) {
265
+ return JSON.parse(Buffer.from(body, "base64").toString("utf-8"));
266
+ }
267
+ const base64String = typeof body === "string" ? body : String(body);
268
+ const decodedString = atob ? atob(base64String) : base64String;
269
+ return JSON.parse(decodedString);
270
+ } catch {
271
+ if (typeof body === "string")
272
+ return body;
273
+ if (supportsBuffer() && body instanceof Buffer) {
274
+ return body.toString("utf-8");
275
+ }
276
+ if (body instanceof ArrayBuffer) {
277
+ return new TextDecoder().decode(body);
278
+ }
279
+ return String(body);
280
+ }
281
+ }
282
+ }
283
+ export function buildResponse(params) {
284
+ const {
285
+ statusCode,
286
+ statusMessage,
287
+ headers,
288
+ body,
289
+ contentType,
290
+ contentLength,
291
+ cookies = [],
292
+ url,
293
+ finalUrl,
294
+ urls,
295
+ config
296
+ } = params;
297
+ const rezoHeaders = new RezoHeaders(headers);
298
+ rezoHeaders.delete("set-cookie");
299
+ let cookieData;
300
+ if (config.responseCookies && config.responseCookies.array && config.responseCookies.array.length > 0) {
301
+ cookieData = config.responseCookies;
302
+ } else if (cookies.length > 0) {
303
+ const cookieJar = new RezoCookieJar;
304
+ cookieData = cookieJar.setCookiesSync(cookies, url);
305
+ } else {
306
+ cookieData = {
307
+ array: [],
308
+ serialized: [],
309
+ netscape: `# Netscape HTTP Cookie File
310
+ # This file was generated by Rezo HTTP client
311
+ # Based on uniqhtt cookie implementation
312
+ `,
313
+ string: "",
314
+ setCookiesString: []
315
+ };
316
+ }
317
+ return {
318
+ data: formatResponse(body, config, rezoHeaders),
319
+ status: statusCode,
320
+ statusText: statusMessage,
321
+ finalUrl,
322
+ cookies: cookieData,
323
+ headers: rezoHeaders,
324
+ contentType,
325
+ contentLength: typeof contentLength === "string" ? parseInt(contentLength, 10) : contentLength,
326
+ urls,
327
+ config
328
+ };
329
+ }
330
+ export function buildResponseFromIncoming(response, body, config, finalUrl, urls, optionalStatus, optionalStatusText, actualContentLength) {
331
+ const cookies = response.headers["set-cookie"] || [];
332
+ const contentLength = actualContentLength !== undefined ? actualContentLength : response.headers["content-length"] || "0";
333
+ return buildResponse({
334
+ statusCode: response.statusCode || optionalStatus || 200,
335
+ statusMessage: response.statusMessage || optionalStatusText || "OK",
336
+ headers: response.headers,
337
+ body,
338
+ contentType: response.headers["content-type"],
339
+ contentLength,
340
+ cookies,
341
+ url: response.url || finalUrl,
342
+ finalUrl,
343
+ urls,
344
+ config
345
+ });
346
+ }
347
+ export function buildDownloadResponse(statusCode, statusMessage, headers, contentLength, cookies, url, finalUrl, urls, config) {
348
+ return buildResponse({
349
+ statusCode,
350
+ statusMessage,
351
+ headers,
352
+ body: null,
353
+ contentType: headers["content-type"],
354
+ contentLength,
355
+ cookies,
356
+ url,
357
+ finalUrl,
358
+ urls,
359
+ config
360
+ });
361
+ }
@@ -0,0 +1,54 @@
1
+ const { EventEmitter } = require("node:events");
2
+
3
+ class DownloadResponse extends EventEmitter {
4
+ fileName;
5
+ url;
6
+ status;
7
+ statusText;
8
+ _finished = false;
9
+ constructor(fileName, url) {
10
+ super();
11
+ this.fileName = fileName;
12
+ this.url = url;
13
+ }
14
+ isFinished() {
15
+ return this._finished;
16
+ }
17
+ _markFinished() {
18
+ this._finished = true;
19
+ }
20
+ on(event, listener) {
21
+ super.on(event, listener);
22
+ return this;
23
+ }
24
+ once(event, listener) {
25
+ super.once(event, listener);
26
+ return this;
27
+ }
28
+ addListener(event, listener) {
29
+ super.addListener(event, listener);
30
+ return this;
31
+ }
32
+ prependListener(event, listener) {
33
+ super.prependListener(event, listener);
34
+ return this;
35
+ }
36
+ prependOnceListener(event, listener) {
37
+ super.prependOnceListener(event, listener);
38
+ return this;
39
+ }
40
+ off(event, listener) {
41
+ super.off(event, listener);
42
+ return this;
43
+ }
44
+ removeListener(event, listener) {
45
+ super.removeListener(event, listener);
46
+ return this;
47
+ }
48
+ removeAllListeners(event) {
49
+ super.removeAllListeners(event);
50
+ return this;
51
+ }
52
+ }
53
+
54
+ exports.DownloadResponse = DownloadResponse;
@@ -0,0 +1,52 @@
1
+ import { EventEmitter } from "node:events";
2
+
3
+ export class DownloadResponse extends EventEmitter {
4
+ fileName;
5
+ url;
6
+ status;
7
+ statusText;
8
+ _finished = false;
9
+ constructor(fileName, url) {
10
+ super();
11
+ this.fileName = fileName;
12
+ this.url = url;
13
+ }
14
+ isFinished() {
15
+ return this._finished;
16
+ }
17
+ _markFinished() {
18
+ this._finished = true;
19
+ }
20
+ on(event, listener) {
21
+ super.on(event, listener);
22
+ return this;
23
+ }
24
+ once(event, listener) {
25
+ super.once(event, listener);
26
+ return this;
27
+ }
28
+ addListener(event, listener) {
29
+ super.addListener(event, listener);
30
+ return this;
31
+ }
32
+ prependListener(event, listener) {
33
+ super.prependListener(event, listener);
34
+ return this;
35
+ }
36
+ prependOnceListener(event, listener) {
37
+ super.prependOnceListener(event, listener);
38
+ return this;
39
+ }
40
+ off(event, listener) {
41
+ super.off(event, listener);
42
+ return this;
43
+ }
44
+ removeListener(event, listener) {
45
+ super.removeListener(event, listener);
46
+ return this;
47
+ }
48
+ removeAllListeners(event) {
49
+ super.removeAllListeners(event);
50
+ return this;
51
+ }
52
+ }
@@ -0,0 +1,60 @@
1
+ const { Writable } = require("node:stream");
2
+
3
+ class StreamResponse extends Writable {
4
+ _finished = false;
5
+ _encoding;
6
+ constructor(opts) {
7
+ super(opts);
8
+ }
9
+ setEncoding(encoding) {
10
+ this._encoding = encoding;
11
+ return this;
12
+ }
13
+ getEncoding() {
14
+ return this._encoding;
15
+ }
16
+ isFinished() {
17
+ return this._finished;
18
+ }
19
+ _markFinished() {
20
+ this._finished = true;
21
+ }
22
+ _write(chunk, _encoding, callback) {
23
+ this.emit("data", chunk);
24
+ callback();
25
+ }
26
+ on(event, listener) {
27
+ super.on(event, listener);
28
+ return this;
29
+ }
30
+ once(event, listener) {
31
+ super.once(event, listener);
32
+ return this;
33
+ }
34
+ addListener(event, listener) {
35
+ super.addListener(event, listener);
36
+ return this;
37
+ }
38
+ prependListener(event, listener) {
39
+ super.prependListener(event, listener);
40
+ return this;
41
+ }
42
+ prependOnceListener(event, listener) {
43
+ super.prependOnceListener(event, listener);
44
+ return this;
45
+ }
46
+ off(event, listener) {
47
+ super.off(event, listener);
48
+ return this;
49
+ }
50
+ removeListener(event, listener) {
51
+ super.removeListener(event, listener);
52
+ return this;
53
+ }
54
+ removeAllListeners(event) {
55
+ super.removeAllListeners(event);
56
+ return this;
57
+ }
58
+ }
59
+
60
+ exports.StreamResponse = StreamResponse;
@@ -0,0 +1,58 @@
1
+ import { Writable } from "node:stream";
2
+
3
+ export class StreamResponse extends Writable {
4
+ _finished = false;
5
+ _encoding;
6
+ constructor(opts) {
7
+ super(opts);
8
+ }
9
+ setEncoding(encoding) {
10
+ this._encoding = encoding;
11
+ return this;
12
+ }
13
+ getEncoding() {
14
+ return this._encoding;
15
+ }
16
+ isFinished() {
17
+ return this._finished;
18
+ }
19
+ _markFinished() {
20
+ this._finished = true;
21
+ }
22
+ _write(chunk, _encoding, callback) {
23
+ this.emit("data", chunk);
24
+ callback();
25
+ }
26
+ on(event, listener) {
27
+ super.on(event, listener);
28
+ return this;
29
+ }
30
+ once(event, listener) {
31
+ super.once(event, listener);
32
+ return this;
33
+ }
34
+ addListener(event, listener) {
35
+ super.addListener(event, listener);
36
+ return this;
37
+ }
38
+ prependListener(event, listener) {
39
+ super.prependListener(event, listener);
40
+ return this;
41
+ }
42
+ prependOnceListener(event, listener) {
43
+ super.prependOnceListener(event, listener);
44
+ return this;
45
+ }
46
+ off(event, listener) {
47
+ super.off(event, listener);
48
+ return this;
49
+ }
50
+ removeListener(event, listener) {
51
+ super.removeListener(event, listener);
52
+ return this;
53
+ }
54
+ removeAllListeners(event) {
55
+ super.removeAllListeners(event);
56
+ return this;
57
+ }
58
+ }
@@ -0,0 +1,54 @@
1
+ const { EventEmitter } = require("node:events");
2
+
3
+ class UploadResponse extends EventEmitter {
4
+ url;
5
+ fileName;
6
+ status;
7
+ statusText;
8
+ _finished = false;
9
+ constructor(url, fileName) {
10
+ super();
11
+ this.url = url;
12
+ this.fileName = fileName;
13
+ }
14
+ isFinished() {
15
+ return this._finished;
16
+ }
17
+ _markFinished() {
18
+ this._finished = true;
19
+ }
20
+ on(event, listener) {
21
+ super.on(event, listener);
22
+ return this;
23
+ }
24
+ once(event, listener) {
25
+ super.once(event, listener);
26
+ return this;
27
+ }
28
+ addListener(event, listener) {
29
+ super.addListener(event, listener);
30
+ return this;
31
+ }
32
+ prependListener(event, listener) {
33
+ super.prependListener(event, listener);
34
+ return this;
35
+ }
36
+ prependOnceListener(event, listener) {
37
+ super.prependOnceListener(event, listener);
38
+ return this;
39
+ }
40
+ off(event, listener) {
41
+ super.off(event, listener);
42
+ return this;
43
+ }
44
+ removeListener(event, listener) {
45
+ super.removeListener(event, listener);
46
+ return this;
47
+ }
48
+ removeAllListeners(event) {
49
+ super.removeAllListeners(event);
50
+ return this;
51
+ }
52
+ }
53
+
54
+ exports.UploadResponse = UploadResponse;
@@ -0,0 +1,52 @@
1
+ import { EventEmitter } from "node:events";
2
+
3
+ export class UploadResponse extends EventEmitter {
4
+ url;
5
+ fileName;
6
+ status;
7
+ statusText;
8
+ _finished = false;
9
+ constructor(url, fileName) {
10
+ super();
11
+ this.url = url;
12
+ this.fileName = fileName;
13
+ }
14
+ isFinished() {
15
+ return this._finished;
16
+ }
17
+ _markFinished() {
18
+ this._finished = true;
19
+ }
20
+ on(event, listener) {
21
+ super.on(event, listener);
22
+ return this;
23
+ }
24
+ once(event, listener) {
25
+ super.once(event, listener);
26
+ return this;
27
+ }
28
+ addListener(event, listener) {
29
+ super.addListener(event, listener);
30
+ return this;
31
+ }
32
+ prependListener(event, listener) {
33
+ super.prependListener(event, listener);
34
+ return this;
35
+ }
36
+ prependOnceListener(event, listener) {
37
+ super.prependOnceListener(event, listener);
38
+ return this;
39
+ }
40
+ off(event, listener) {
41
+ super.off(event, listener);
42
+ return this;
43
+ }
44
+ removeListener(event, listener) {
45
+ super.removeListener(event, listener);
46
+ return this;
47
+ }
48
+ removeAllListeners(event) {
49
+ super.removeAllListeners(event);
50
+ return this;
51
+ }
52
+ }