Untitled

 avatar
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...