Untitled
unknown
javascript
2 years ago
12 kB
13
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...