index.js 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. var __create = Object.create;
  2. var __defProp = Object.defineProperty;
  3. var __defProps = Object.defineProperties;
  4. var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
  5. var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
  6. var __getOwnPropNames = Object.getOwnPropertyNames;
  7. var __getOwnPropSymbols = Object.getOwnPropertySymbols;
  8. var __getProtoOf = Object.getPrototypeOf;
  9. var __hasOwnProp = Object.prototype.hasOwnProperty;
  10. var __propIsEnum = Object.prototype.propertyIsEnumerable;
  11. var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  12. var __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. };
  23. var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
  24. var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
  25. var __export = (target, all) => {
  26. for (var name in all)
  27. __defProp(target, name, { get: all[name], enumerable: true });
  28. };
  29. var __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. };
  37. var __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. };
  40. var __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);
  45. var __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. };
  65. var src_exports = {};
  66. __export(src_exports, {
  67. default: () => fetchCookie
  68. });
  69. var tough = __toESM(require("tough-cookie"), 1);
  70. var import_set_cookie_parser = require("set-cookie-parser");
  71. function 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. }
  76. const 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. ]);
  87. function 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. }
  97. function doNothing(init, name) {
  98. }
  99. function callDeleteMethod(init, name) {
  100. init.headers.delete(name);
  101. }
  102. function 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. }
  110. function 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. }
  119. const redirectStatus = /* @__PURE__ */ new Set([301, 302, 303, 307, 308]);
  120. function isRedirect(status) {
  121. return redirectStatus.has(status);
  122. }
  123. function 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. }
  172. function 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. }
  187. function 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. }
  205. function 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. }
  233. fetchCookie.toughCookie = tough;
  234. module.exports = __toCommonJS(src_exports);