@duyquangnvx/webnovel-downloader 0.4.1 → 0.4.2
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.
- package/dist/index.cjs +30 -11
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +29 -11
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -551,7 +551,10 @@ var EventBus = class {
|
|
|
551
551
|
// src/http/client.ts
|
|
552
552
|
var import_undici = require("undici");
|
|
553
553
|
init_errors();
|
|
554
|
+
init_primitives();
|
|
554
555
|
var DEFAULT_TIMEOUT_MS = 3e4;
|
|
556
|
+
var MAX_REDIRECTS = 5;
|
|
557
|
+
var REDIRECT_STATUSES = /* @__PURE__ */ new Set([301, 302, 303, 307, 308]);
|
|
555
558
|
var UndiciHttpClient = class {
|
|
556
559
|
#logger;
|
|
557
560
|
#dispatcher;
|
|
@@ -566,23 +569,28 @@ var UndiciHttpClient = class {
|
|
|
566
569
|
const half = Math.max(1, Math.floor(timeoutMs / 2));
|
|
567
570
|
let res;
|
|
568
571
|
try {
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
572
|
+
let currentUrl = url;
|
|
573
|
+
for (let hop = 0; ; hop++) {
|
|
574
|
+
res = await (0, import_undici.request)(currentUrl, {
|
|
575
|
+
method: "GET",
|
|
576
|
+
dispatcher: this.#dispatcher,
|
|
577
|
+
...opts?.headers !== void 0 ? { headers: opts.headers } : {},
|
|
578
|
+
...opts?.signal !== void 0 ? { signal: opts.signal } : {},
|
|
579
|
+
headersTimeout: half,
|
|
580
|
+
bodyTimeout: half
|
|
581
|
+
});
|
|
582
|
+
const next = hop < MAX_REDIRECTS ? redirectTarget(res.statusCode, res.headers, currentUrl) : void 0;
|
|
583
|
+
if (next === void 0) break;
|
|
584
|
+
await res.body.dump();
|
|
585
|
+
currentUrl = next;
|
|
586
|
+
}
|
|
578
587
|
const body = await res.body.text();
|
|
579
588
|
const headers = normalizeHeaders(res.headers);
|
|
580
|
-
const finalUrl = url;
|
|
581
589
|
return {
|
|
582
590
|
status: res.statusCode,
|
|
583
591
|
headers,
|
|
584
592
|
body,
|
|
585
|
-
url:
|
|
593
|
+
url: currentUrl
|
|
586
594
|
};
|
|
587
595
|
} catch (cause) {
|
|
588
596
|
if (res !== void 0) await res.body.dump().catch(() => {
|
|
@@ -603,6 +611,17 @@ var UndiciHttpClient = class {
|
|
|
603
611
|
if (this.#ownsDispatcher) await this.#dispatcher.close();
|
|
604
612
|
}
|
|
605
613
|
};
|
|
614
|
+
function redirectTarget(status, headers, currentUrl) {
|
|
615
|
+
if (!REDIRECT_STATUSES.has(status)) return void 0;
|
|
616
|
+
const raw = headers["location"];
|
|
617
|
+
const location = Array.isArray(raw) ? raw[0] : raw;
|
|
618
|
+
if (location === void 0 || location === "") return void 0;
|
|
619
|
+
try {
|
|
620
|
+
return unsafeBrandUrl(new URL(location, currentUrl).href);
|
|
621
|
+
} catch {
|
|
622
|
+
return void 0;
|
|
623
|
+
}
|
|
624
|
+
}
|
|
606
625
|
function normalizeHeaders(h) {
|
|
607
626
|
const out = {};
|
|
608
627
|
for (const [k, v] of Object.entries(h)) {
|