UNPKG

migros-api-wrapper

Version:

Making the api of migros more accessible to the public.

80 lines 3.46 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.postRequest = exports.getRequestBypassStrong = exports.getRequestBypass = exports.getRequest = void 0; const appendParametersToUrl_1 = require("./appendParametersToUrl"); const addCookieToHeaders_1 = require("./addCookieToHeaders"); const tls_1 = __importDefault(require("tls")); const axios_1 = __importDefault(require("axios")); const child_process_1 = require("child_process"); async function getRequest(url, options, headers = {}, cookies = {}) { url = (0, appendParametersToUrl_1.appendParametersToUrl)(url, options); headers = (0, addCookieToHeaders_1.addCookieToHeaders)(headers, cookies); const response = await fetch(url, { method: "GET", headers: headers, }); return response; } exports.getRequest = getRequest; async function getRequestBypass(url, options, headers = {}, cookies = {}) { if (!headers["User-Agent"] && process.env.MIGROS_API_WRAPPER_USERAGENT) { headers["User-Agent"] = process.env.MIGROS_API_WRAPPER_USERAGENT; } if (process.env.MIGROS_API_WRAPPER_USECURL) { console.warn("Using curl to bypass cloudflare protection."); return getRequestBypassStrong(url, options, headers, cookies); } url = (0, appendParametersToUrl_1.appendParametersToUrl)(url, options); headers = (0, addCookieToHeaders_1.addCookieToHeaders)(headers, cookies); const previousMinVersion = tls_1.default.DEFAULT_MIN_VERSION; tls_1.default.DEFAULT_MIN_VERSION = "TLSv1.3"; const response = await (0, axios_1.default)(url, { method: "GET", headers: headers, }); tls_1.default.DEFAULT_MIN_VERSION = previousMinVersion; return response; } exports.getRequestBypass = getRequestBypass; const execPromise = (cmd) => { return new Promise(function (resolve, reject) { (0, child_process_1.exec)(cmd, function (err, stdout) { if (err) return reject(err); resolve(stdout); }); }); }; async function getRequestBypassStrong(url, options, headers = {}, cookies = {}) { url = (0, appendParametersToUrl_1.appendParametersToUrl)(url, options); headers = (0, addCookieToHeaders_1.addCookieToHeaders)(headers, cookies); const response = (await execPromise(`curl -v --tlsv1.3 ${url} ${Object.keys(headers) .map((key) => `-H "${key}: ${headers[key]}"`) .join(" ")} -D -`)); const [headersString, data] = response.split("\r\n\r\n"); const headersArray = headersString.split("\r\n").slice(1); const headersObject = {}; headersArray.forEach((header) => { const [key, value] = header.split(": "); headersObject[key] = value; }); return { headers: headersObject, data: JSON.parse(data), }; } exports.getRequestBypassStrong = getRequestBypassStrong; async function postRequest(url, body, options, headers = {}, cookies = {}) { url = (0, appendParametersToUrl_1.appendParametersToUrl)(url, options); headers = (0, addCookieToHeaders_1.addCookieToHeaders)(headers, cookies); return await fetch(url, { method: "POST", body: JSON.stringify(body) || undefined, headers: headers, }); } exports.postRequest = postRequest; //# sourceMappingURL=requests.js.map