transicion-desordenada-diablo/downloader/network.js

51 lines
1.2 KiB
JavaScript
Raw Permalink Normal View History

2023-12-18 15:13:09 +00:00
import { Dispatcher, request, Agent } from "undici";
2023-12-16 14:15:27 +00:00
import { userAgent } from "./config.js";
2023-12-18 15:13:09 +00:00
const dispatcher = new Agent({
connect: { timeout: 60 * 1000 },
2023-12-18 15:13:09 +00:00
bodyTimeout: 15 * 60 * 1000,
maxRedirections: 20,
});
2023-12-16 14:15:27 +00:00
export class StatusCodeError extends Error {
/**
* @param {number} code
*/
constructor(code) {
super(`Status code: ${code}`);
this.code = code;
}
}
export class TooManyRedirectsError extends Error {}
/**
2023-12-18 15:13:09 +00:00
* genera los headers para hacer un pedido dependiendo de la url
2023-12-16 14:15:27 +00:00
* @param {URL} url
*/
2023-12-18 15:13:09 +00:00
function getHeaders(url) {
2023-12-16 14:15:27 +00:00
// sharepoint no le gusta compartir a bots lol
const spoofUserAgent = url.host.endsWith("sharepoint.com");
2023-12-18 15:13:09 +00:00
return {
"User-Agent": spoofUserAgent
? "Mozilla/5.0 (X11; Linux x86_64; rv:120.0) Gecko/20100101 Firefox/120.0"
: userAgent,
};
}
/**
* @param {URL} url
*/
2023-12-19 15:01:37 +00:00
export async function customRequest(url) {
const res = await request(url.toString(), {
2023-12-18 15:13:09 +00:00
headers: getHeaders(url),
dispatcher,
2023-12-16 14:15:27 +00:00
});
if (res.statusCode >= 300 && res.statusCode <= 399)
throw new TooManyRedirectsError();
if (res.statusCode < 200 || res.statusCode > 299)
throw new StatusCodeError(res.statusCode);
2023-12-16 14:15:27 +00:00
return res;
}