2020-06-21 06:06:30 +00:00
const NodeFetch = require ( "./request_backends/node-fetch" )
const Got = require ( "./request_backends/got" )
2020-06-21 12:34:46 +00:00
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" )
2022-07-24 13:48:44 +00:00
const userAgent = "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0"
const headers = {
"User-Agent" : userAgent ,
2022-07-28 11:31:05 +00:00
"X-IG-App-ID" : "936619743392459" , // needed for profile iweb to work
"Sec-Fetch-Mode" : "navigate" , // needed for profile html to work
2022-07-24 13:48:44 +00:00
}
2020-03-15 06:50:29 +00:00
const backendStatusLineMap = new Map ( [
[ "node-fetch" , "NF " ] ,
2020-06-21 12:34:46 +00:00
[ "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?
2020-06-21 12:34:46 +00:00
const save = ! ! settings . save
2020-03-15 06:50:29 +00:00
if ( constants . request _backend === "node-fetch" ) {
return new NodeFetch ( url , Object . assign ( {
2022-07-24 13:48:44 +00:00
headers ,
2020-03-15 06:50:29 +00:00
redirect : "manual"
} , options ) )
} else if ( constants . request _backend === "got" ) {
return new Got ( url , Object . assign ( {
2022-07-24 13:48:44 +00:00
headers ,
2020-03-22 04:10:50 +00:00
followRedirect : false ,
throwHttpErrors : false
2020-03-15 06:50:29 +00:00
} , options ) )
2020-06-21 12:34:46 +00:00
} 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