bibliogram/src/lib/utils/request.js

49 lines
1.5 KiB
JavaScript
Raw Normal View History

2020-06-21 06:06:30 +00:00
const NodeFetch = require("./request_backends/node-fetch")
const Got = require("./request_backends/got")
const SavedRequestManager = require("./saved_requests/manager")
2020-01-12 12:50:21 +00:00
2020-03-15 06:50:29 +00:00
const constants = require("../constants")
const userAgent = "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0"
const headers = {
"User-Agent": userAgent,
"X-IG-App-ID": "936619743392459", // needed for profile iweb to work
"Sec-Fetch-Mode": "navigate", // needed for profile html to work
}
2020-03-15 06:50:29 +00:00
const backendStatusLineMap = new Map([
["node-fetch", "NF "],
["got", "GOT"],
["saved", "SAV"]
2020-03-15 06:50:29 +00:00
])
/**
2020-06-21 06:06:30 +00:00
* @returns {import("./request_backends/reference")}
2020-03-15 06:50:29 +00:00
*/
2020-02-02 11:43:56 +00:00
function request(url, options = {}, settings = {}) {
if (settings.statusLine === undefined) settings.statusLine = "OUT"
if (settings.log === undefined) settings.log = true
2020-03-15 06:50:29 +00:00
if (settings.log) console.log(` -> [${settings.statusLine}-${backendStatusLineMap.get(constants.request_backend)}] ${url}`) // todo: make more like pinski?
const save = !!settings.save
2020-03-15 06:50:29 +00:00
if (constants.request_backend === "node-fetch") {
return new NodeFetch(url, Object.assign({
headers,
2020-03-15 06:50:29 +00:00
redirect: "manual"
}, options))
} else if (constants.request_backend === "got") {
return new Got(url, Object.assign({
headers,
followRedirect: false,
throwHttpErrors: false
2020-03-15 06:50:29 +00:00
}, options))
} else if (constants.request_backend === "saved") {
return new SavedRequestManager(url).request()
2020-03-15 06:50:29 +00:00
} else {
throw new Error("Invalid value for setting `request_backend`.")
}
2020-01-12 12:50:21 +00:00
}
module.exports.request = request