123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 |
- 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
- };
|