Untitled
unknown
javascript
2 years ago
12 kB
10
Indexable
"use strict"; (()=>{ var O = e=>{ let t = /^\[object (\S+?)\]$/; return (Object.prototype.toString.call(e).match(t) || [])[1].toLowerCase() || "undefined" } ; var f = e=>O(e) === "array" && Array.isArray(e) && typeof e == "object"; var s = async()=>{ let e = { active: !0, currentWindow: !0 }; return (await chrome.tabs.query(e))[0] } ; var g = e=>new Promise(t=>setTimeout(t, e)) , i = (e=0,t=100)=>{ let o = Math.ceil(e) , n = Math.floor(t); return Math.floor(Math.random() * (n - o) + o) } , p = (e,t)=>{ let o; return ()=>{ clearTimeout(o), o = setTimeout(()=>e(), t) } } ; var E = async()=>chrome.tabs.create({}) , A = async e=>{ let {url: t, timeout: o} = e; return new Promise(n=>{ setTimeout(async()=>{ let a = await s(); await chrome.tabs.update(a.id, { url: t }), chrome.tabs.onUpdated.addListener((r,c)=>{ c.status === "complete" && n() } ) } , o || i(100, 300)) } ) } , M = async e=>{ let {timeout: t} = e; return new Promise(o=>{ setTimeout(async()=>{ let n = await s(); await chrome.tabs.reload(n.id), chrome.tabs.onUpdated.addListener((a,r)=>{ r.status === "complete" && o() } ) } , t || i(100, 300)) } ) } , N = async()=>{ let e = await s(); return chrome.tabs.remove(e.id) } , v = async e=>{ let {timeout: t} = e; return new Promise(o=>{ setTimeout(async()=>{ let n = await s(); await chrome.scripting.executeScript({ target: { tabId: n.id, allFrames: !0 }, func: ()=>window.history.back() }), chrome.tabs.onUpdated.addListener((a,r)=>{ r.status === "complete" && o() } ) } , t || i(100, 300)) } ) } , L = async e=>new Promise(t=>{ setTimeout(async()=>{ let o = await s(); await chrome.tabs.sendMessage(o.id, { type: "input-content", data: e }) && t() } , i(100, 300)) } ) , _ = async e=>new Promise(t=>{ setTimeout(async()=>{ let o = await s(); await chrome.tabs.sendMessage(o.id, { type: "click-element", data: e }), chrome.tabs.onUpdated.addListener((n,a)=>{ a.status === "complete" && t() } ) } , i(100, 300)) } ) , W = async e=>new Promise(t=>{ setTimeout(async()=>{ let o = await s(); await chrome.tabs.sendMessage(o.id, { type: "scroll-page", data: e }) && t() } , i(100, 300)) } ) , R = async e=>new Promise(t=>{ setTimeout(async()=>{ let {name: o, path: n, format: a, quality: r} = e , c = await chrome.windows.getCurrent() , C = a === "png" ? { format: a } : { format: a, quality: r } , x = await chrome.tabs.captureVisibleTab(c.id, C) , I = `${n}${o || "screenshot"}.${a}`; await chrome.downloads.download({ url: x, filename: I }), t() } , i(100, 300)) } ) , U = async e=>{ let {times: t=1, children: o} = e; if (!f(o)) throw new Error("ForTimes children is not array"); if (!!o.length) for (let n of new Array(t)) await w(o), await g(2e3) } , $ = e=>new Promise(t=>{ setTimeout(async()=>{ let o = await s(); await chrome.tabs.sendMessage(o.id, { type: "drop-down-selector", data: e }) && t() } , i(100, 300)) } ) , w = async e=>{ for (let t of e) switch (console.log("operation: ", t), t.type) { case "newTab": await E(); break; case "closePage": await N(); break; case "goBack": await v(t.config); break; case "refresh": await M(t.config); break; case "visitWebsite": await A(t.config); break; case "inputContent": await L(t.config); break; case "clickElement": await _(t.config); break; case "screenshot": await R(t.config); break; case "scrollPage": await W(t.config); break; case "forTimes": await U(t.config); break; case "dropDownSelector": await $(t.config); break; default: break } } , h = async e=>{ let t = JSON.parse(e); console.log("automationTask: ", t), await w(t) } ; var b = { url: "http://127.0.0.1", port: 36912 }; var u, m, y, d, D = !1, T = p(l, 5e3); chrome.cookies.getProfileId = ()=>m; chrome.cookies.getProfileName = ()=>y; chrome.contextMenus.create({ id: "humanTyping", title: "Paste like typing (Ctrl+Shift+F)", contexts: ["editable"] }); chrome.contextMenus.onClicked.addListener(e=>{ e.menuItemId === "humanTyping" && S() } ); chrome.commands.onCommand.addListener(e=>{ e === "automationTask" ? h(d) : e === "humanTyping" && S() } ); chrome.cookies.onChanged.addListener(()=>{ D && T() } ); chrome.windows.onRemoved.addListener(()=>{ l() } ); chrome.tabs.onRemoved.addListener(()=>{ chrome.tabs.query({}, e=>{ e.length === 0 && l(()=>{ fetch(`${u}/close/${m}`) } ) } ) } ); var S = async()=>{ let e = await s(); return chrome.tabs.sendMessage(e.id, { type: "human-typing" }) } , j = (e,t,o)=>{ let n = e.startsWith(".") ? e.substring(1) : e; return "http" + (t ? "s" : "") + "://" + n + o } , B = e=>e.startsWith("__Host-") || e.startsWith("__Secure-") , H = e=>{ e.url = e.url.replace("http:", "https:"), e.secure = !0, e.name.startsWith("__Host-") && delete e.domain } , q = e=>[/(http|https):\/\/mail.google.com\//.test(e.url) && ["OSID", "__Secure-OSID"].includes(e.name), /(http|https):\/\/ads.google.com\//.test(e.url) && ["OSID"].includes(e.name), /(http|https):\/\/outlook.live.com/.test(e.url) && ["DefaultAnchorMailbox"].includes(e.name)].some(o=>o) , G = e=>{ delete e.browserType, delete e.storeId, e.session && delete e.expirationDate, delete e.session, e.hostOnly && !(e != null && e.domain.startsWith(".")) && delete e.domain, delete e.hostOnly } , J = e=>e instanceof Date && e.toString() !== "Invalid Date" , K = (e,t)=>{ let o = new Date(Number(e)); return o.setDate(e.getDate() + t), o } , Y = e=>{ if (e.expirationDate) { if (/(http|https):\/\/mail.google.com\//.test(e.url) && e.name === "COMPASS") { delete e.expirationDate; return } let t = new Date , o = new Date(e.expirationDate * 1e3); if (J(o) && o < t) { let n = K(t, 3); e.expirationDate = n.getTime() / 1e3 } } } , z = e=>new Promise(t=>{ chrome.cookies.set(e, ()=>{ chrome.runtime.lastError ? (console.error("Cannot set cookie." + chrome.runtime.lastError.message), t({ status: "error", data: e, message: chrome.runtime.lastError.message })) : t({ status: "success", data: e }) } ) } ) , Q = e=>{ if (e && Array.isArray(e)) { console.log("Set cookies..."); let t = [] , o = []; for (let n of e) n.url || (n.url = j(n.domain, n.secure, n.path)), n != null && n.domain.startsWith(".") || (n.hostOnly = !0), G(n), Y(n), B(n.name) && H(n), q(n) ? o.push(n) : t.push(z(n)); return console.log("Skip cookies", o), Promise.all(t) } return Promise.resolve([]) } , X = ()=>{ fetch(`${u}/session/ready`).then(()=>console.log("Everything is ready")).catch(e=>console.error(e.message)) } ; function l(e) { return e && e(), !0 } var P = e=>({domain: t, name: o, path: n})=>{ let a = e != null && e.domain.startsWith(".") ? e.domain.substring(1) : e.domain , r = t.startsWith(".") ? t.substring(1) : t; return a === r && e.name === o && e.path === n } , Z = e=>{ setInterval(()=>fetch(`${u}/timer/update/${m}`), 5e3), X(), chrome.cookies.remove({ url: "https://myip.gologin.app", name: "gologin.cookie" }), chrome.cookies.getAll({}, o=>{ let n = { dbCookiesCount: e.length, chromeApiCount: o.length, cookiesDifferenceValues: [], uniqueDbCookies: [] }; e.length !== o.length && (n.uniqueDbCookies = e.filter(r=>o.findIndex(P(r)) === -1)), e.forEach(r=>{ let c = o.find(P(r)); c && c.value !== r.value && n.cookiesDifferenceValues.push({ db: r, chrome: c }) } ); let a = [...n.uniqueDbCookies, ...n.cookiesDifferenceValues.map(({db: r})=>r)]; Q(a).then(()=>{ D = !0, chrome.cookies.getAll({}, r=>{ T = r.length > 1e3 ? p(l, 1e4) : p(l, 5e3) } ) } ) } ) } , F = async()=>{ try { let e = chrome.runtime.getURL("uid.json") , t = await fetch(e).then(n=>n.json()) , o = t.port || b.port; m = t.uid, u = `${b.url}:${o}`, y = t.profileName || "", d = t.automationTask || "[]" } catch (e) { console.error(`Can't get configuration file: ${e}`) } if (console.log("UID: ", m), console.log("AUTOMATION_TASK: ", d), console.log("PROFILE_NAME: ", y), console.log("BASE_URL: ", u), !m) { console.error("UID is empty"); return } try { let e = (await fetch(`${u}/cookies/${m}`, { method: "GET" })).json(); Z(e) } catch (e) { console.error(`Failed to load data: ${e.message}`) } await h(d).catch(e=>console.error("runAutomationTask error -> ", e)) } ; F(); } )();
Editor is loading...