migros-api-wrapper
Version:
Making the api of migros more accessible to the public.
80 lines • 3.46 kB
JavaScript
;
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