UNPKG

8.99 kBJavaScriptView Raw
1var __create = Object.create;
2var __defProp = Object.defineProperty;
3var __defProps = Object.defineProperties;
4var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
6var __getOwnPropNames = Object.getOwnPropertyNames;
7var __getOwnPropSymbols = Object.getOwnPropertySymbols;
8var __getProtoOf = Object.getPrototypeOf;
9var __hasOwnProp = Object.prototype.hasOwnProperty;
10var __propIsEnum = Object.prototype.propertyIsEnumerable;
11var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
12var __spreadValues = (a, b) => {
13 for (var prop in b || (b = {}))
14 if (__hasOwnProp.call(b, prop))
15 __defNormalProp(a, prop, b[prop]);
16 if (__getOwnPropSymbols)
17 for (var prop of __getOwnPropSymbols(b)) {
18 if (__propIsEnum.call(b, prop))
19 __defNormalProp(a, prop, b[prop]);
20 }
21 return a;
22};
23var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
24var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
25var __export = (target, all) => {
26 for (var name in all)
27 __defProp(target, name, { get: all[name], enumerable: true });
28};
29var __reExport = (target, module2, copyDefault, desc) => {
30 if (module2 && typeof module2 === "object" || typeof module2 === "function") {
31 for (let key of __getOwnPropNames(module2))
32 if (!__hasOwnProp.call(target, key) && (copyDefault || key !== "default"))
33 __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
34 }
35 return target;
36};
37var __toESM = (module2, isNodeMode) => {
38 return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", !isNodeMode && module2 && module2.__esModule ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
39};
40var __toCommonJS = /* @__PURE__ */ ((cache) => {
41 return (module2, temp) => {
42 return cache && cache.get(module2) || (temp = __reExport(__markAsModule({}), module2, 1), cache && cache.set(module2, temp), temp);
43 };
44})(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0);
45var __async = (__this, __arguments, generator) => {
46 return new Promise((resolve, reject) => {
47 var fulfilled = (value) => {
48 try {
49 step(generator.next(value));
50 } catch (e) {
51 reject(e);
52 }
53 };
54 var rejected = (value) => {
55 try {
56 step(generator.throw(value));
57 } catch (e) {
58 reject(e);
59 }
60 };
61 var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
62 step((generator = generator.apply(__this, __arguments)).next());
63 });
64};
65var src_exports = {};
66__export(src_exports, {
67 default: () => fetchCookie
68});
69var tough = __toESM(require("tough-cookie"), 1);
70var import_set_cookie_parser = require("set-cookie-parser");
71function isDomainOrSubdomain(destination, original) {
72 const orig = new URL(original).hostname;
73 const dest = new URL(destination).hostname;
74 return orig === dest || orig.endsWith(`.${dest}`);
75}
76const referrerPolicy = /* @__PURE__ */ new Set([
77 "",
78 "no-referrer",
79 "no-referrer-when-downgrade",
80 "same-origin",
81 "origin",
82 "strict-origin",
83 "origin-when-cross-origin",
84 "strict-origin-when-cross-origin",
85 "unsafe-url"
86]);
87function parseReferrerPolicy(policyHeader) {
88 const policyTokens = policyHeader.split(/[,\s]+/);
89 let policy = "";
90 for (const token of policyTokens) {
91 if (token !== "" && referrerPolicy.has(token)) {
92 policy = token;
93 }
94 }
95 return policy;
96}
97function doNothing(init, name) {
98}
99function callDeleteMethod(init, name) {
100 init.headers.delete(name);
101}
102function deleteFromObject(init, name) {
103 const headers = init.headers;
104 for (const key of Object.keys(headers)) {
105 if (key.toLowerCase() === name) {
106 delete headers[key];
107 }
108 }
109}
110function identifyDeleteHeader(init) {
111 if (init.headers == null) {
112 return doNothing;
113 }
114 if (typeof init.headers.delete === "function") {
115 return callDeleteMethod;
116 }
117 return deleteFromObject;
118}
119const redirectStatus = /* @__PURE__ */ new Set([301, 302, 303, 307, 308]);
120function isRedirect(status) {
121 return redirectStatus.has(status);
122}
123function handleRedirect(fetchImpl, init, response) {
124 return __async(this, null, function* () {
125 var _a, _b, _c;
126 switch ((_a = init.redirect) != null ? _a : "follow") {
127 case "error":
128 throw new TypeError(`URI requested responded with a redirect and redirect mode is set to error: ${response.url}`);
129 case "manual":
130 return response;
131 case "follow":
132 break;
133 default:
134 throw new TypeError(`Invalid redirect option: ${init.redirect}`);
135 }
136 const locationUrl = response.headers.get("location");
137 if (locationUrl === null) {
138 return response;
139 }
140 const requestUrl = response.url;
141 const redirectUrl = new URL(locationUrl, requestUrl).toString();
142 const redirectCount = (_b = init.redirectCount) != null ? _b : 0;
143 const maxRedirect = (_c = init.maxRedirect) != null ? _c : 20;
144 if (redirectCount >= maxRedirect) {
145 throw new TypeError(`Reached maximum redirect of ${maxRedirect} for URL: ${requestUrl}`);
146 }
147 init = __spreadProps(__spreadValues({}, init), {
148 redirectCount: redirectCount + 1
149 });
150 const deleteHeader = identifyDeleteHeader(init);
151 if (!isDomainOrSubdomain(requestUrl, redirectUrl)) {
152 for (const name of ["authorization", "www-authenticate", "cookie", "cookie2"]) {
153 deleteHeader(init, name);
154 }
155 }
156 const maybeNodeStreamBody = init.body;
157 const maybeStreamBody = init.body;
158 if (response.status !== 303 && init.body != null && (typeof maybeNodeStreamBody.pipe === "function" || typeof maybeStreamBody.pipeTo === "function")) {
159 throw new TypeError("Cannot follow redirect with body being a readable stream");
160 }
161 if (response.status === 303 || (response.status === 301 || response.status === 302) && init.method === "POST") {
162 init.method = "GET";
163 init.body = void 0;
164 deleteHeader(init, "content-length");
165 }
166 if (response.headers.has("referrer-policy")) {
167 init.referrerPolicy = parseReferrerPolicy(response.headers.get("referrer-policy"));
168 }
169 return yield fetchImpl(redirectUrl, init);
170 });
171}
172function addCookiesToRequest(input, init, cookie) {
173 if (cookie === "") {
174 return init;
175 }
176 const maybeRequest = input;
177 const maybeHeaders = init.headers;
178 if (maybeRequest.headers && typeof maybeRequest.headers.append === "function") {
179 maybeRequest.headers.append("cookie", cookie);
180 } else if (maybeHeaders && typeof maybeHeaders.append === "function") {
181 maybeHeaders.append("cookie", cookie);
182 } else {
183 init = __spreadProps(__spreadValues({}, init), { headers: __spreadProps(__spreadValues({}, init.headers), { cookie }) });
184 }
185 return init;
186}
187function getCookiesFromResponse(response) {
188 const maybeNodeFetchHeaders = response.headers;
189 if (typeof maybeNodeFetchHeaders.getAll === "function") {
190 return maybeNodeFetchHeaders.getAll("set-cookie");
191 }
192 if (typeof maybeNodeFetchHeaders.raw === "function") {
193 const headers = maybeNodeFetchHeaders.raw();
194 if (Array.isArray(headers["set-cookie"])) {
195 return headers["set-cookie"];
196 }
197 return [];
198 }
199 const cookieString = response.headers.get("set-cookie");
200 if (cookieString !== null) {
201 return (0, import_set_cookie_parser.splitCookiesString)(cookieString);
202 }
203 return [];
204}
205function fetchCookie(fetch, jar, ignoreError = true) {
206 const actualFetch = fetch;
207 const actualJar = jar != null ? jar : new tough.CookieJar();
208 function fetchCookieWrapper(input, init) {
209 return __async(this, null, function* () {
210 var _a, _b;
211 const originalInit = init != null ? init : {};
212 init = __spreadProps(__spreadValues({}, init), { redirect: "manual" });
213 const requestUrl = typeof input === "string" ? input : (_a = input.url) != null ? _a : input.href;
214 const cookie = yield actualJar.getCookieString(requestUrl);
215 init = addCookiesToRequest(input, init, cookie);
216 const response = yield actualFetch(input, init);
217 const cookies = getCookiesFromResponse(response);
218 yield Promise.all(cookies.map((cookie2) => __async(this, null, function* () {
219 return yield actualJar.setCookie(cookie2, response.url, { ignoreError });
220 })));
221 if (((_b = init.redirectCount) != null ? _b : 0) > 0) {
222 Object.defineProperty(response, "redirected", { value: true });
223 }
224 if (!isRedirect(response.status)) {
225 return response;
226 }
227 return yield handleRedirect(fetchCookieWrapper, originalInit, response);
228 });
229 }
230 fetchCookieWrapper.toughCookie = tough;
231 return fetchCookieWrapper;
232}
233fetchCookie.toughCookie = tough;
234module.exports = __toCommonJS(src_exports);