rekwest
Version:
The robust request library that humanity deserves 🌐
87 lines (86 loc) • 2.87 kB
JavaScript
;
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;