mirror of
https://github.com/DanielnetoDotCom/YouPHPTube
synced 2025-10-03 09:49:28 +02:00
207 lines
7.3 KiB
JavaScript
207 lines
7.3 KiB
JavaScript
var __defProp = Object.defineProperty;
|
|
var __defProps = Object.defineProperties;
|
|
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
var __spreadValues = (a, b) => {
|
|
for (var prop in b || (b = {}))
|
|
if (__hasOwnProp.call(b, prop))
|
|
__defNormalProp(a, prop, b[prop]);
|
|
if (__getOwnPropSymbols)
|
|
for (var prop of __getOwnPropSymbols(b)) {
|
|
if (__propIsEnum.call(b, prop))
|
|
__defNormalProp(a, prop, b[prop]);
|
|
}
|
|
return a;
|
|
};
|
|
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
var __async = (__this, __arguments, generator) => {
|
|
return new Promise((resolve, reject) => {
|
|
var fulfilled = (value) => {
|
|
try {
|
|
step(generator.next(value));
|
|
} catch (e) {
|
|
reject(e);
|
|
}
|
|
};
|
|
var rejected = (value) => {
|
|
try {
|
|
step(generator.throw(value));
|
|
} catch (e) {
|
|
reject(e);
|
|
}
|
|
};
|
|
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
step((generator = generator.apply(__this, __arguments)).next());
|
|
});
|
|
};
|
|
import * as tough from "tough-cookie";
|
|
import { splitCookiesString } from "set-cookie-parser";
|
|
function isDomainOrSubdomain(destination, original) {
|
|
const orig = new URL(original).hostname;
|
|
const dest = new URL(destination).hostname;
|
|
return orig === dest || orig.endsWith(`.${dest}`);
|
|
}
|
|
const referrerPolicy = /* @__PURE__ */ new Set([
|
|
"",
|
|
"no-referrer",
|
|
"no-referrer-when-downgrade",
|
|
"same-origin",
|
|
"origin",
|
|
"strict-origin",
|
|
"origin-when-cross-origin",
|
|
"strict-origin-when-cross-origin",
|
|
"unsafe-url"
|
|
]);
|
|
function parseReferrerPolicy(policyHeader) {
|
|
const policyTokens = policyHeader.split(/[,\s]+/);
|
|
let policy = "";
|
|
for (const token of policyTokens) {
|
|
if (token !== "" && referrerPolicy.has(token)) {
|
|
policy = token;
|
|
}
|
|
}
|
|
return policy;
|
|
}
|
|
function doNothing(init, name) {
|
|
}
|
|
function callDeleteMethod(init, name) {
|
|
init.headers.delete(name);
|
|
}
|
|
function deleteFromObject(init, name) {
|
|
const headers = init.headers;
|
|
for (const key of Object.keys(headers)) {
|
|
if (key.toLowerCase() === name) {
|
|
delete headers[key];
|
|
}
|
|
}
|
|
}
|
|
function identifyDeleteHeader(init) {
|
|
if (init.headers == null) {
|
|
return doNothing;
|
|
}
|
|
if (typeof init.headers.delete === "function") {
|
|
return callDeleteMethod;
|
|
}
|
|
return deleteFromObject;
|
|
}
|
|
const redirectStatus = /* @__PURE__ */ new Set([301, 302, 303, 307, 308]);
|
|
function isRedirect(status) {
|
|
return redirectStatus.has(status);
|
|
}
|
|
function handleRedirect(fetchImpl, init, response) {
|
|
return __async(this, null, function* () {
|
|
var _a, _b, _c;
|
|
switch ((_a = init.redirect) != null ? _a : "follow") {
|
|
case "error":
|
|
throw new TypeError(`URI requested responded with a redirect and redirect mode is set to error: ${response.url}`);
|
|
case "manual":
|
|
return response;
|
|
case "follow":
|
|
break;
|
|
default:
|
|
throw new TypeError(`Invalid redirect option: ${init.redirect}`);
|
|
}
|
|
const locationUrl = response.headers.get("location");
|
|
if (locationUrl === null) {
|
|
return response;
|
|
}
|
|
const requestUrl = response.url;
|
|
const redirectUrl = new URL(locationUrl, requestUrl).toString();
|
|
const redirectCount = (_b = init.redirectCount) != null ? _b : 0;
|
|
const maxRedirect = (_c = init.maxRedirect) != null ? _c : 20;
|
|
if (redirectCount >= maxRedirect) {
|
|
throw new TypeError(`Reached maximum redirect of ${maxRedirect} for URL: ${requestUrl}`);
|
|
}
|
|
init = __spreadProps(__spreadValues({}, init), {
|
|
redirectCount: redirectCount + 1
|
|
});
|
|
const deleteHeader = identifyDeleteHeader(init);
|
|
if (!isDomainOrSubdomain(requestUrl, redirectUrl)) {
|
|
for (const name of ["authorization", "www-authenticate", "cookie", "cookie2"]) {
|
|
deleteHeader(init, name);
|
|
}
|
|
}
|
|
const maybeNodeStreamBody = init.body;
|
|
const maybeStreamBody = init.body;
|
|
if (response.status !== 303 && init.body != null && (typeof maybeNodeStreamBody.pipe === "function" || typeof maybeStreamBody.pipeTo === "function")) {
|
|
throw new TypeError("Cannot follow redirect with body being a readable stream");
|
|
}
|
|
if (response.status === 303 || (response.status === 301 || response.status === 302) && init.method === "POST") {
|
|
init.method = "GET";
|
|
init.body = void 0;
|
|
deleteHeader(init, "content-length");
|
|
}
|
|
if (response.headers.has("referrer-policy")) {
|
|
init.referrerPolicy = parseReferrerPolicy(response.headers.get("referrer-policy"));
|
|
}
|
|
return yield fetchImpl(redirectUrl, init);
|
|
});
|
|
}
|
|
function addCookiesToRequest(input, init, cookie) {
|
|
if (cookie === "") {
|
|
return init;
|
|
}
|
|
const maybeRequest = input;
|
|
const maybeHeaders = init.headers;
|
|
if (maybeRequest.headers && typeof maybeRequest.headers.append === "function") {
|
|
maybeRequest.headers.append("cookie", cookie);
|
|
} else if (maybeHeaders && typeof maybeHeaders.append === "function") {
|
|
maybeHeaders.append("cookie", cookie);
|
|
} else {
|
|
init = __spreadProps(__spreadValues({}, init), { headers: __spreadProps(__spreadValues({}, init.headers), { cookie }) });
|
|
}
|
|
return init;
|
|
}
|
|
function getCookiesFromResponse(response) {
|
|
const maybeNodeFetchHeaders = response.headers;
|
|
if (typeof maybeNodeFetchHeaders.getAll === "function") {
|
|
return maybeNodeFetchHeaders.getAll("set-cookie");
|
|
}
|
|
if (typeof maybeNodeFetchHeaders.raw === "function") {
|
|
const headers = maybeNodeFetchHeaders.raw();
|
|
if (Array.isArray(headers["set-cookie"])) {
|
|
return headers["set-cookie"];
|
|
}
|
|
return [];
|
|
}
|
|
const cookieString = response.headers.get("set-cookie");
|
|
if (cookieString !== null) {
|
|
return splitCookiesString(cookieString);
|
|
}
|
|
return [];
|
|
}
|
|
function fetchCookie(fetch, jar, ignoreError = true) {
|
|
const actualFetch = fetch;
|
|
const actualJar = jar != null ? jar : new tough.CookieJar();
|
|
function fetchCookieWrapper(input, init) {
|
|
return __async(this, null, function* () {
|
|
var _a, _b;
|
|
const originalInit = init != null ? init : {};
|
|
init = __spreadProps(__spreadValues({}, init), { redirect: "manual" });
|
|
const requestUrl = typeof input === "string" ? input : (_a = input.url) != null ? _a : input.href;
|
|
const cookie = yield actualJar.getCookieString(requestUrl);
|
|
init = addCookiesToRequest(input, init, cookie);
|
|
const response = yield actualFetch(input, init);
|
|
const cookies = getCookiesFromResponse(response);
|
|
yield Promise.all(cookies.map((cookie2) => __async(this, null, function* () {
|
|
return yield actualJar.setCookie(cookie2, response.url, { ignoreError });
|
|
})));
|
|
if (((_b = init.redirectCount) != null ? _b : 0) > 0) {
|
|
Object.defineProperty(response, "redirected", { value: true });
|
|
}
|
|
if (!isRedirect(response.status)) {
|
|
return response;
|
|
}
|
|
return yield handleRedirect(fetchCookieWrapper, originalInit, response);
|
|
});
|
|
}
|
|
fetchCookieWrapper.toughCookie = tough;
|
|
return fetchCookieWrapper;
|
|
}
|
|
fetchCookie.toughCookie = tough;
|
|
export {
|
|
fetchCookie as default
|
|
};
|