UNPKG

rekwest

Version:

The robust request library that humanity deserves 🌐

87 lines (86 loc) 2.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.preflight = void 0; var _nodeHttp = _interopRequireDefault(require("node:http2")); var _config = require("./config"); var _constants = require("./constants"); var _cookies = require("./cookies"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const { HTTP2_HEADER_ACCEPT_ENCODING, HTTP2_HEADER_AUTHORITY, HTTP2_HEADER_AUTHORIZATION, HTTP2_HEADER_COOKIE, HTTP2_HEADER_METHOD, HTTP2_HEADER_PATH, HTTP2_HEADER_SCHEME, HTTP2_METHOD_GET, HTTP2_METHOD_HEAD } = _nodeHttp.default.constants; const preflight = options => { const { cookies, credentials, h2, headers, method, url } = options; if (h2) { options.endStream = [HTTP2_METHOD_GET, HTTP2_METHOD_HEAD].includes(method); } if (cookies !== false && credentials !== _constants.requestCredentials.omit) { let cookie = _cookies.Cookies.jar.has(url.origin); if (cookies === Object(cookies) && [_constants.requestCredentials.include, _constants.requestCredentials.sameOrigin].includes(credentials)) { if (cookie) { cookie = new _cookies.Cookies(cookies, options); _cookies.Cookies.jar.get(url.origin).forEach((val, key) => { if (!cookie.has(key)) { cookie.set(key, val); } }); _cookies.Cookies.jar.set(url.origin, cookie); } else { cookie = new _cookies.Cookies(cookies, options); _cookies.Cookies.jar.set(url.origin, cookie); } } else { cookie &&= _cookies.Cookies.jar.get(url.origin); } options.headers = { ...(cookie && { [HTTP2_HEADER_COOKIE]: cookie }), ...headers }; } if (credentials === _constants.requestCredentials.omit) { options.cookies = false; for (const it of Object.keys(options.headers ?? {}).filter(val => new RegExp(`^(${HTTP2_HEADER_AUTHORIZATION}|${HTTP2_HEADER_COOKIE})$`, 'i').test(val))) { Reflect.deleteProperty(options.headers, it); } url.password = url.username = ''; } options.headers = { ...Object.entries(options.headers ?? {}).reduce((acc, [key, val]) => { acc[key.toLowerCase()] = val; if (acc[HTTP2_HEADER_ACCEPT_ENCODING]?.match(/\bzstd\b/i) && !_config.isZstdSupported) { acc[HTTP2_HEADER_ACCEPT_ENCODING] = val.replace(/\s?zstd,?/gi, '').trim(); if (!acc[HTTP2_HEADER_ACCEPT_ENCODING]) { Reflect.deleteProperty(acc, HTTP2_HEADER_ACCEPT_ENCODING); } } return acc; }, {}), ...(h2 && { [HTTP2_HEADER_AUTHORITY]: url.host, [HTTP2_HEADER_METHOD]: method, [HTTP2_HEADER_PATH]: `${url.pathname}${url.search}`, [HTTP2_HEADER_SCHEME]: url.protocol.replace(/\p{Punctuation}/gu, '') }) }; return options; }; exports.preflight = preflight;