import got from "got"; import loc from "../sub/loc.js"; import { services } from "../config.js"; const configSt = services.twitter; async function fetchTweetInfo(obj) { let cantConnect = { error: loc('en', 'apiError', 'cantConnectToAPI', 'twitter') } try { let _headers = { "Authorization": `Bearer ${configSt.token}`, "Host": configSt.api, "Content-Type": "application/json", "Content-Length": 0 }; let req_act = await got.post(`https://${configSt.api}/${configSt.apiURLs.activate}`, { headers: _headers }); req_act.on('error', (err) => { return cantConnect }) _headers["x-guest-token"] = req_act.body["guest_token"]; let req_status = await got.get(`https://${configSt.api}/${configSt.apiURLs.status_show}?id=${obj.id}&tweet_mode=extended`, { headers: _headers }); req_status.on('error', (err) => { return cantConnect }) return JSON.parse(req_status.body); } catch (err) { return { error: cantConnect }; } } export default async function (obj) { let nothing = { error: loc('en', 'apiError', 'nothingToDownload') } try { let parsbod = await fetchTweetInfo(obj); if (!parsbod.error) { if (parsbod.hasOwnProperty("extended_entities") && parsbod["extended_entities"].hasOwnProperty("media")) { if (parsbod["extended_entities"]["media"][0]["type"] === "video" || parsbod["extended_entities"]["media"][0]["type"] === "animated_gif") { let variants = parsbod["extended_entities"]["media"][0]["video_info"]["variants"] return variants.filter((v) => { if (v["content_type"] == "video/mp4") { return true } }).sort((a, b) => Number(b.bitrate) - Number(a.bitrate))[0]["url"] } else { return nothing } } else { return nothing } } else return parsbod; } catch (err) { return { error: loc("en", "apiError", "youtubeBroke") }; } }