forked from AlienBot-Fun/mining-application
-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.js
1 lines (1 loc) · 50.5 KB
/
main.js
1
"use strict";process.env.NODE_TLS_REJECT_UNAUTHORIZED="0",process.on("unhandledRejection",()=>{}),process.on("rejectionHandled",()=>{});const path=require("path"),fs=require("fs"),tracer=require("tracer"),{app:app,BrowserWindow:BrowserWindow,ipcMain:ipcMain,dialog:dialog,shell:shell,Notification:Notification}=require("electron"),Twig=require("twig"),TwigElectron=require("electron-twig"),fetch=require("node-fetch"),{Api:Api,JsonRpc:JsonRpc,RpcError:RpcError,Serialize:Serialize}=require("eosjs"),bytenode=require("bytenode"),v8=require("v8");v8.setFlagsFromString("--no-lazy");var shajs=require("sha.js");const{TextEncoder:TextEncoder,TextDecoder:TextDecoder}=require("util"),{SerialBuffer:SerialBuffer}=require("eosjs/dist/eosjs-serialize"),puppeteer=require("puppeteer-extra"),puppeteer_default=require("puppeteer"),Imap=require("node-imap"),simpleParser=require("mailparser").simpleParser,cheerio=require("cheerio"),base_dir=path.join(__dirname),assets_dir=path.join(__dirname,"assets"),lang_dir=path.join(__dirname,"lang"),data_dir=path.join(__dirname,"data"),tmp_dir=path.join(__dirname,"tmp");var axios=require("axios"),FormData=require("form-data");const config=require(path.join(data_dir,"config.json"));"on"===config.dev_mode&&bytenode.compileFile("./sources/token.src.js","./token.jsc"),require(path.join(__dirname,"token.jsc")),global.logger={log:(e="",t="",a="",n="",i="",o="")=>{console.log(e,t,a,n,i,o)}},(async()=>{const e=new Object({ver:200101,win:!1,chromiums:[],chromiums_sessions:[],chromiums_handed:[],i:async()=>{await e.t.logger(),await e.r.blockchain.init(),await e.t.dist(),await e.t.shema(),"on"===config.dev_mode&&await e.d.init(),await e.t.twig_extends(Twig),config.signing_page.indexOf("localhost")>-1?await e.ex.init():(global.url_address=config.signing_page,e.ex.status=!0),await e.e.init(),await e.s.init()},d:{init:async()=>new Promise((t,a)=>{var n=e.r.shema.select("settings"),i={};for(var o in n){var s=n[o];i[o]=s.default}logger.log("(DevMode) settings.dist reBuild"),e.r.settings.save(i,"settings.dist"),t(!0)}).catch(e=>{logger.log("(DevMode) settings.dist reBuild error",e)})},t:{dist:async()=>new Promise(async(e,t)=>{let a=path.join(data_dir,"accounts.json"),n=path.join(data_dir,"accounts.dist.json");fs.existsSync(a)||(logger.log("Created accounts.dist.json"),fs.copyFile(n,a,()=>{}));let i=path.join(data_dir,"groups.json"),o=path.join(data_dir,"groups.dist.json");fs.existsSync(i)||(logger.log("Created groups.dist.json"),fs.copyFile(o,i,()=>{}));let s=path.join(data_dir,"settings.json"),r=path.join(data_dir,"settings.dist.json");fs.existsSync(s)||(logger.log("Created settings.dist.json"),fs.copyFile(r,s,()=>{})),e(!0)}).catch(e=>{logger.log("Created .dist files error",e)}),shema:async()=>new Promise(async(t,a)=>{let n=await e.r.shema.select("settings"),i=await e.r.settings.list(),o={};for(var s in n){var r=n[s];void 0!==i[s]&&("integer"===r.type&&(o[s]=Number(i[s])),"string"===r.type&&(o[s]=i[s].toString())),void 0===i[s]&&("integer"===r.type&&(o[s]=Number(r.default)),"string"===r.type&&(o[s]=r.default.toString()))}logger.log("ReBuild settings from shema"),await e.r.settings.save(o);let l=await e.r.shema.select("accounts"),c=await e.r.accounts.list();var g=[];c.length&&c.map(e=>{var t={};for(var a in l){var n=l[a];t[a]=n.default,void 0!==e[a]&&("integer"===n.type&&(t[a]=Number(e[a])),"string"===n.type&&(t[a]=e[a].toString()))}g.push(t)}),logger.log("ReBuild accounts from shema"),await e.r.accounts.save(g),fs.writeFileSync(path.join(data_dir,"accounts.rezerv_2.json"),JSON.stringify(g,null,4));let u=await e.r.shema.select("groups");var d=[];(await e.r.groups.list()).map(e=>{var t={};for(var a in u){var n=u[a];t[a]=n.default,void 0!==e[a]&&("integer"===n.type&&(t[a]=Number(e[a])),"string"===n.type&&(t[a]=e[a].toString()))}d.push(t)}),logger.log("ReBuild groups from shema"),await e.r.groups.save(d),t(!0)}).catch(e=>{logger.log("ReBuild groups from shema error",e)}),twig_extends:async t=>new Promise((a,n)=>{logger.log("Twig_extends load"),t.extendFilter("get_numeric",function(e){return void 0===e||null===e?"":e.replace(/[^+\d]/g,"")}),t.extendFunction("climetime",function(t){var a="00:00";if(void 0!==t.climetime&&t.climetime>0){let n=Number(e.h.time())-Number(t.climetime),i=e.h.timer_convert(n);a=`${i.h}:${i.m}:${i.s}`}return a}),t.extendFilter("num2word",function(t,a){return e.h.num2word(t,a)}),t.extendFilter("view_date",function(e,t="d,m,y,t"){let a=["Января","Февраля","Марта","Апреля","Мая","Июня","Июля","Августа","Сентября","Октября","Ноября","Декабря"];var n=t[0].split(","),i="",o=new Date(e),s={d:o.getDate(),m:o.getMonth(),y:o.getFullYear(),h:o.getHours(),i:o.getMinutes()};if(-1!=n.indexOf("d")&&(i+=s.d<10?"0"+s.d.toString():s.d),-1!=n.indexOf("m")&&(i+=" "+a[s.m]),-1!=n.indexOf("t")){i+=" в "+(s.h>9?s.h:"0"+s.h.toString())+":"+(s.i>9?s.i:"0"+s.i.toString())}if(-1!=n.indexOf("y")){i+=", "+s.y}return i}),t.extendFunction("print_r",function(...e){const t=[...e],a=this;let n=0,i="";const o=function(e){let t="";for(;e>0;)e--,t+=" ";return t},s=function(e){i+=o(n),"object"==typeof e?r(e):"function"==typeof e?i+="function()\n":"string"==typeof e?i+="string("+e.length+') "'+e+'"\n':"number"==typeof e?i+="number("+e+")\n":"boolean"==typeof e&&(i+="bool("+e+")\n")},r=function(e){let t;if(null===e)i+="NULL\n";else if(void 0===e)i+="undefined\n";else if("object"==typeof e){i+=o(n)+typeof e,n++,i+="("+function(e){let t,a=0;for(t in e)Object.hasOwnProperty.call(e,t)&&a++;return a}(e)+") {\n";for(t in e)Object.hasOwnProperty.call(e,t)&&(i+=o(n)+"["+t+"]=> ",s(e[t]));i+=o(--n)+"}\n"}else s(e)};return 0===t.length&&t.push(a.context),t.forEach(e=>{r(e)}),"<pre>"+i+"<pre>"}),t.extendFilter("array_column",function(e,t){if(void 0!==e&&null!==e)return e.map(e=>e[t])}),a(!0)}).catch(e=>{logger.log("(DevMode) settings.dist reBuild error",e)}),logger:async()=>new Promise((t,a)=>{"on"==config.log_write?(global.logger=tracer.console({level:"log",format:["{{timestamp}} <{{title}}> {{message}} \n","--- END --- \n",{error:["{{timestamp}} <{{title}}> {{message}} \n","all Stack:\n{{stack}} \n","--- END --- \n"]}],dateformat:"HH:MM:ss.L",transport:function(t){fs.appendFile(path.join(__dirname,"logs")+"/"+e.h.date_format("yyyy_MM_dd")+".log",t.rawoutput,e=>{if(e)throw e})}}),t(!0)):t(!0)}).catch(e=>{logger.log("(DevMode) settings.dist reBuild error",e)})},r:{accounts:{list:async()=>{return JSON.parse(fs.readFileSync(path.join(data_dir,"accounts.json"),"utf8"))},save:async(e,t="accounts")=>{fs.writeFileSync(path.join(data_dir,`${t}.json`),JSON.stringify(e,null,4)),fs.writeFileSync(path.join(data_dir,"accounts.rezerv_1.json"),JSON.stringify(e,null,4))},select:async t=>{return(await e.r.accounts.list()).find(e=>e.wax_login===t)},is_sessionToken:async t=>{let a=await e.r.accounts.select(t);require(path.join(data_dir,"accounts.json"));return""!==a.session_token},insert:async t=>{let a=await e.r.accounts.list();a.push(t),e.r.accounts.save(a)},delete:async t=>{let a=(await e.r.accounts.list()).filter(e=>e.wax_login!==t);return e.r.accounts.save(a),a},update:async(t,a)=>{let n=(await e.r.accounts.list()).map(e=>(e.wax_login===t&&(e=Object.assign(e,a)),e));e.r.accounts.save(n)}},groups:{list:async()=>{return JSON.parse(fs.readFileSync(path.join(data_dir,"groups.json"),"utf8"))},save:async(e,t="groups")=>{fs.writeFileSync(path.join(data_dir,`${t}.json`),JSON.stringify(e,null,4))},select:async t=>{return(await e.r.groups.list()).find(e=>e.id===t)},insert:async t=>{let a=await e.r.groups.list();a.push(t),e.r.groups.save(a)},delete:async t=>{let a=(await e.r.groups.list()).filter(e=>e.id!==t);return e.r.groups.save(a),a},update:async(t,a)=>{let n=(await e.r.groups.list()).map(e=>(e.id===t&&(e=Object.assign(e,a)),e));e.r.groups.save(n)}},settings:{list:async()=>{return require(path.join(data_dir,"settings.json"))},save:(e,t="settings")=>{fs.writeFileSync(path.join(data_dir,`${t}.json`),JSON.stringify(e,null,4))},select:async t=>{let a=await e.r.settings.list();return!!a[t]&&a[t]},update:async t=>{let a=await e.r.settings.list(),n=Object.assign(a,t);e.r.settings.save(n)}},shema:{list:async()=>{return require(path.join(data_dir,"shema.json"))},select:async t=>{let a=await e.r.shema.list();return!!a[t]&&a[t]}},languages:{list:()=>require(path.join(lang_dir,"langs.json")),select:async e=>new Promise((t,a)=>{t(require(path.join(lang_dir,e)))}).catch(t=>{logger.log("lang select error",e)}),get:async(t="russian")=>{let a=e.r.settings.select("lang");return"russian"!==t&&(a=t),logger.log("Select lang",a),await e.r.languages.select(a)}},blockchain:{list:[],init:async()=>new Promise((t,a)=>{let n=JSON.parse(fs.readFileSync(path.join(data_dir,"blockchains.json"),"utf8"));e.r.blockchain.list=n,t(!0)}).catch(e=>{logger.log("blockchains reBuild listing",e)}),get_random:function(){let e=((e,t)=>{var a=Math.random()*(t-0+1)-.5;return Math.round(a)})(0,this.list.length-1);return this.list[e]},get_account:function(e){let t=new JsonRpc(this.get_random(),{fetch:fetch});return new Promise((a,n)=>{t.get_account(e.wax_login).then(e=>{a(e)}).catch(()=>{a(!1)})})},get_table_rows:function(t,a="miners",n=!1){let i=new JsonRpc(this.get_random(),{fetch:fetch});return new Promise((o,s)=>{var r=!1;i.get_table_rows({json:!0,code:"m.federation",scope:"m.federation",table:a,lower_bound:t.wax_login,upper_bound:t.wax_login}).then(e=>{void 0!==e.rows&&(r=!0,o(e))}).catch(()=>{!1===n&&o(!1)}).finally(()=>{!0===n&&!1===r&&setTimeout(()=>{o(e.r.blockchain.get_table_rows(t,a,n))},2e3)})})},get_transaction:function(e){let t=new JsonRpc(this.get_random(),{fetch:fetch});return new Promise((a,n)=>{t.history_get_transaction(e).then(e=>{if(void 0!==e.traces){let t=e.traces.pop();a(t)}}).catch(()=>{a(!1)})})},get_balance:function(e,t){let a=e.wax_login,n=t,i="eosio.token";"TLM"===t&&(i="alien.worlds");let o=new JsonRpc(this.get_random(),{fetch:fetch});return new Promise((e,t)=>{o.get_currency_balance(i,a,n).then(t=>{if(void 0!==t&&t.length>0){let a=t.pop();e(a)}}).catch(()=>{e(!1)})})}},access_token:async()=>{let t=await e.r.settings.select("token"),a={status:"error",message:"Undefined error"};return a=await new Promise((a,n)=>{try{fetch(url_accessInfo,{method:"post",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:t,version:e.ver})}).then(e=>e.json()).then(e=>{accdata?"success"==e.status&&(accdata.result.balance=e.result.balance):accdata=e,logger.log("ipcMain access_token success",accdata),a(accdata)}).catch(e=>{logger.log("ipcMain access_token error","Server not fount"),a({status:"error",message:"Server not fount"})})}catch(e){logger.log("ipcMain access_token error","Undefined fount"),a({status:"error",message:"Undefined error"})}})}},h:{timer_convert:function(e){if(e=function(e){return!!(e=e||!1)&&(e>0&&e)}(e)){var t=e%60,a=(e-t)/60,n=a%60,i=(a=(a-n)/60)%24,o=(a-i)/24;return{d:o<10?"0"+o:o,h:i<10?"0"+i:i,m:n<10?"0"+n:n,s:t<10?"0"+t:t}}return!1},clear_one_array:function(e={},t=!1){let a={};if(!1===t)a=e;else{let i={...e};for(var n in t){let e=t[n];void 0!==i[e]&&(a[e]=i[e])}}return a},clear_two_array:function(e=[],t=!1){let a=this,n=[];if(!1!==t){for(let i in e){let o={...e[i]},s=a.clear_one_array(o,t);n.push(s)}return n}n=e},num2word:function(e,t){if(void 0!==e&&null!==e){var a=e,n=Number(t[0]),i="-";return(n%=100)>19&&(n%=10),"1"==n.toString()&&(i=a[0]),-1!=["2","3","4"].indexOf(n.toString())&&(i=a[1]),"-"===i&&(i=a[2]),i}},time:function(){return Math.round((new Date).getTime()/1e3)},date_format:function(e="hh:mm:ss.SSS"){return require("date-format").asString(e,new Date)},get_id:(e,t=1)=>{let a=!1,n=t;do{if(-1==e.indexOf(n)){a=n;break}n++}while(n<1e9);return a},sleep:e=>new Promise(t=>setTimeout(t,e)),getRand:()=>{let e=new Uint8Array(8);for(let t=0;t<8;t++){let a=Math.floor(255*Math.random());e[t]=a}return e},toHex:e=>[...new Uint8Array(e)].map(e=>e.toString(16).padStart(2,"0")).join(""),fromHexString:e=>new Uint8Array(e.match(/.{1,2}/g).map(e=>parseInt(e,16))),nameToArray:e=>{let t=new SerialBuffer({textEncoder:new TextEncoder,textDecoder:new TextDecoder});return t.pushName(e),t.array},getMiningStr:function(e,t){let a=this;return new Promise((n,i)=>{let o,s,r,l,c=a.nameToArray(e).slice(0,8),g=!1,u=!1,d=t.last_mine_arr;for(var w=a.time();!g&&!u;){r=a.getRand();var _=new Uint8Array(c.length+d.length+r.length);_.set(c),_.set(d,c.length),_.set(r,c.length+d.length),(g="0000"===(s=shajs("sha256").update(_.slice(0,24)).digest("hex")).substr(0,4))&&(g&=(l=parseInt(s.substr(4,1),16))<=t.difficulty),g||(o=null);if(a.time()-w>5){u=!0,i(!1);break}}if(!u){n({rand_str:a.toHex(r),hex_digest:s})}})},__old_getMiningStr:function(e,t){let a,n,i,o,s=this,r=s.nameToArray(e).slice(0,8),l=!1,c=t.last_mine_arr;for(;!l;){i=s.getRand();var g=new Uint8Array(r.length+c.length+i.length);g.set(r),g.set(c,r.length),g.set(i,r.length+c.length),(l="0000"===(n=shajs("sha256").update(g.slice(0,24)).digest("hex")).substr(0,4))&&(l&=(o=parseInt(n.substr(4,1),16))<=t.difficulty),l||(a=null)}let u={rand_str:s.toHex(i),hex_digest:n};return new Promise((e,t)=>{e(u)})}},e:{init:()=>{if(!0===e.ex.status)return new Promise((t,a)=>{app.on("second-instance",(t,a,n)=>{e.win&&(e.win.isMinimized()&&e.win.restore(),e.win.focus())}),app.on("window-all-closed",async()=>{"darwin"!==process.platform&&app.quit(),await e.s.destroy(),e.chromiums.length>0&&e.chromiums.map(async e=>{(await e.pages()).forEach(async e=>{await e.isClosed()||await e.close()})}),e.chromiums_handed.length>0&&e.chromiums_handed.map(async e=>{(await e.pages()).forEach(async e=>{await e.isClosed()||await e.close()})}),e.chromiums_sessions.length>0&&e.chromiums_sessions.map(async e=>{(await e.pages()).forEach(async e=>{await e.isClosed()||await e.close()})})}),app.on("ready",e.e.create),t(!0)}).catch(e=>{logger.log("Electron run error",e)})},create:()=>new Promise(async(t,a)=>{let n=await e.r.settings.list();void 0===n.lang&&(n.lang="english");let i=await e.r.languages.list(),o=await e.r.languages.select(n.lang);e.win=new BrowserWindow({minWidth:config.min_width,minHeight:config.min_height,width:config.min_width,height:config.min_height,icon:path.join(base_dir,config.icon_path),webPreferences:{nodeIntegration:!0,enableRemoteModule:!0}}),"on"==config.dev_tools&&e.win.openDevTools(),e.win.setMenu(null),e.win.loadFile("index.twig"),TwigElectron.view={settings:n,lang:o,langs:i},e.win.on("close",t=>{e.win=null}),await e.e.ips(),t(!0)}),ips:async()=>{ipcMain.handle("tpl",async(e,t)=>{logger.log("ipcMain tpl",t.tplname);let a=t.tplname;return await new Promise((e,t)=>{fs.open(path.join(base_dir,a),"r",function(t,n){t?e(path.join(base_dir,a)):fs.readFile(n,{encoding:"utf-8"},function(t,a){t||e(a)})})})}),ipcMain.handle("lang",async(t,a)=>{logger.log("ipcMain lang");let n=await e.r.settings.select("lang");return await e.r.languages.select(n)}),ipcMain.handle("settings",async function(t,a){return logger.log("ipcMain settings"),await e.r.settings.list()}),ipcMain.handle("accounts",async(t,a)=>(logger.log("ipcMain accounts"),await e.r.accounts.list())),ipcMain.handle("groups",async(t,a)=>(logger.log("ipcMain groups"),await e.r.groups.list())),ipcMain.handle("access_token",async(t,a)=>(logger.log("ipcMain access_token"),await e.r.access_token())),ipcMain.on("wallet_auth",async(t,a)=>{let n=await e.r.accounts.select(a);e.c.wallet(n)}),ipcMain.on("alcor_auth",async(t,a)=>{let n=await e.r.accounts.select(a);e.c.alcor(n)});let t=async(a,n,i=0)=>{let o=await e.r.settings.list(),s=await e.r.accounts.select(n);logger.log(`ipcMain -> ${n} -> session_token -> Run`);let r=async t=>{logger.log(`ipcMain -> ${n} -> session_token -> save_sessionToken`,t),await e.r.accounts.update(s.wax_login,{session_token:t})},l=async(o=0)=>{logger.log(`ipcMain -> ${n} -> session_token -> reject_sessionToken, trycount=`,o),Number(i)<=o?t(a,n,+o+1):(logger.log(`ipcMain -> ${n} -> session_token -> reject_sessionToken END, trycount=LIMIT`),await e.r.accounts.update(s.wax_login,{status:"disabled"}))};if("mail"===s.token_mode){let t=!0;"on"===o.mail_visible?(t=!1,logger.log(`Bender -> ${n} -> get_token/mail -> headless=false`)):logger.log(`Bender -> ${n} -> get_token/mail -> headless=true`),e.c.email(s,t).then(async e=>{await r(e)}).catch(async e=>{await l(Number(o.mail_trycount))})}if("reddit"===s.token_mode){let t=!0;"on"===o.reddit_visible?(t=!1,logger.log(`Bender -> ${n} -> get_token/reddit -> headless=false`)):logger.log(`Bender -> ${n} -> get_token/reddit -> headless=true`),e.c.reddit(s,t).then(async e=>{await r(e)}).catch(async e=>{await l(o.reddit_trycount)})}};ipcMain.on("session_token",t),ipcMain.on("link",(e,t)=>{logger.log("ipcMain link openExternal",t),shell.openExternal(t)}),ipcMain.on("download",async(e,t)=>{logger.log("ipcMain download show dialog for",t.fileName),dialog.showSaveDialog({defaultPath:"~/"+t.fileName}).then(e=>{logger.log(`ipcMain download ${t.fileName} save to`,e.filePath),fs.writeFile(e.filePath,t.fileData,e=>{})}).catch(e=>{logger.log(`ipcMain download ${t.fileName} catch`,e)})}),ipcMain.on("download_file",async(e,t)=>{logger.log("ipcMain download_file show dialog for",t.fileName),dialog.showSaveDialog({defaultPath:"~/"+t.fileName,filters:[{name:"Мои файлы",extensions:t.fileExt},{name:"Все файлы",extensions:["*"]}]}).then(e=>{logger.log(`ipcMain download_file ${t.fileName} save to`,e.filePath),fs.writeFile(e.filePath,fs.readFileSync(path.join(base_dir,t.filePath)),e=>{})}).catch(e=>{logger.log(`ipcMain download_file ${t.fileName} catch`,e)})}),ipcMain.handle("save_settings",async(t,a)=>{let n={status:"error"},i=await e.r.settings.list(),o=await e.r.languages.select(i.lang),s=await e.r.shema.select("settings");try{let t={};a.map(e=>{if(void 0!==s[e.name]){let a=e.value;"integer"===s[e.name].type&&(a=+e.value),t[e.name]=a}}),logger.log("ipcMain save_settings update",t),await e.r.settings.update(t),n={status:"success",message:o.pages.settings.saveOK}}catch(e){logger.log("ipcMain save_settings catch",e)}return n}),ipcMain.handle("groups_import",async(t,a)=>{logger.log("ipcMain groups_import run",a);let n={status:"error"},i=await e.r.shema.select("groups");var o=Object.keys(i);return a=a.filter(e=>null!==e&&void 0!==e),a=a.filter(e=>null!==e.id&&void 0!==e.id),a=e.h.clear_two_array(a,o),a=a.map(e=>{var t={};for(var a in e)if(Object.hasOwnProperty.call(e,a)){var n=e[a];if(void 0!==i[a]){var o=n;"integer"===i[a].type&&(o=+n),t[a]=o}}return t}),logger.log("ipcMain groups_import array",a),a.length>0&&(await e.r.groups.save([]),await e.r.groups.save(a),await e.t.shema(),n={status:"success"}),n}),ipcMain.handle("accounts_import",async(t,a)=>{logger.log("ipcMain accounts_import run",a);let n={status:"error"},i=await e.r.shema.select("accounts");var o=Object.keys(i);return a=a.filter(e=>null!==e&&void 0!==e),a=a.filter(e=>null!==e.wax_login&&void 0!==e.wax_login),a=e.h.clear_two_array(a,o),a=a.map(e=>{var t={};for(var a in e)if(Object.hasOwnProperty.call(e,a)){var n=e[a];if(void 0!==i[a]){var o=n;"integer"===i[a].type&&(o=+n),t[a]=o}}return t}),logger.log("ipcMain accounts_import array",a),a.length>0&&(await e.r.accounts.save([]),await e.r.accounts.save(a),await e.t.shema(),n={status:"success"}),n}),ipcMain.handle("groups_remove",async(t,a)=>{logger.log("ipcMain groups_remove run",a);let n=await e.r.groups.delete(+a),i=(await e.r.accounts.list()).map(e=>(+e.group_id==+a&&(e.group_id=0),e));return e.r.accounts.save(i),n}),ipcMain.handle("account_remove",async(t,a)=>(logger.log("ipcMain account_remove run",a),await e.r.accounts.delete(a))),ipcMain.handle("group_edit",async(t,{is_created:a,data:n})=>{logger.log("ipcMain group_edit run",a,n);let i=await e.r.settings.list(),o=await e.r.languages.select(i.lang),s={status:"error",message:o.errors.error_message},r=await e.r.shema.select("groups"),l=(await e.r.groups.list()).map(e=>+e.id),c={};for(let e in r)if(Object.hasOwnProperty.call(r,e)){let t=r[e],a=n.find(t=>t.name===e);a.value&&(c[e]="integer"===t.type?Number(a.value):a.value.toString())}return a?(c.id=e.h.get_id(l),logger.log("ipcMain group_edit insert",c.id,c),await e.r.groups.insert(c),await e.t.shema(),s={status:"success",message:o.pages.group.created}):(logger.log("ipcMain group_edit update",c.id,c),await e.r.groups.update(+c.id,c),s={status:"success",message:o.pages.group.edited}),s}),ipcMain.handle("account_edit",async(t,{is_created:a,data:n})=>{logger.log("ipcMain account_edit run",a,n);let i=await e.r.settings.list(),o=await e.r.languages.select(i.lang),s=await e.r.shema.select("accounts"),r={status:"error",message:o.errors.error_message},l={};for(let e in s)if(Object.hasOwnProperty.call(s,e))try{let t=s[e],a=n.find(t=>t.name===e);if(void 0!==a.value){let n=a.value.toString();"integer"===t.type&&(0==+a.value&&(n=0),n=Number(a.value)),l[e]=n}}catch(e){}return logger.log("ipcMain account_edit array",l),"created"===a?(await e.r.accounts.insert(l),await e.t.shema(),r={status:"success",message:o.pages.accounts.created_message}):(await e.r.accounts.update(a,l),r={status:"success",message:o.pages.accounts.edited_message}),r}),ipcMain.handle("account_email_mathed",async(t,a)=>{logger.log("ipcMain account_email_mathed run",a);var n=await new Promise((t,n)=>{e.c.test(a.email,a.password,a.server,a.port,a.tls).then(e=>{t(e)}).catch(e=>{t("error")})});return logger.log("ipcMain account_email_mathed status",a,n),{status:n,message:"success"==n?"success":"error"}}),ipcMain.on("planner_command",(t,a)=>{logger.log(`ipcMain -> planner_command -> ${a}`),e.s.tools.planner_command(a)}),ipcMain.on("set_meta",(t,a)=>{logger.log("ipcMain -> set_meta -> ",a),e.s.tools.set_meta(a)}),ipcMain.on("check_cpu",(t,a)=>{logger.log("ipcMain -> check_cpu -> ",a),e.s.tools.check_cpu(a)}),ipcMain.on("add_account",async(t,a)=>{logger.log("ipcMain -> add_account -> ",a),e.s.tools.add_account(a)})},notify:(e="",t="")=>{}},s:{status:"STOP",check_cpu:"off",interval_starting:0,account_interval:0,count_opened_window:0,accounts:[],init:async()=>{logger.log("Scheduler init Run");let t=await e.r.settings.list();e.s.account_interval=t.account_interval,e.s.count_opened_window=t.count_opened_window;let a=await e.r.accounts.list(),n=async t=>{if(void 0!==a[t]){let i=a[t];await e.s.add_account(i),t++,setTimeout(()=>{n(t)},1e3)}};n(0),e.s.planner()},add_account:async a=>{logger.log(`${a.wax_login} Bender Add`),a.bender=new t(a),e.s.accounts.push(a),await e.h.sleep(1e3)},planner_interval:!1,planner:function(){logger.log("Planner RUNing"),e.s.planner_interval=setInterval(()=>{e.s.interval_starting++,e.s.planed_mining(),e.s.planed_token(),e.s.planed_meta()},1e3)},planed_mining:async function(){await e.r.settings.list();let t=e.s.accounts.filter(e=>!0===e.bender.status.mining),a=t.map(e=>e.wax_login);if(e.s.count_opened_window>t.length&&e.s.account_interval<=e.s.interval_starting){let t=e.s.accounts;t=(t=(t=(t=(t=t.filter(e=>-1==a.indexOf(e.wax_login))).filter(e=>"active"==e.status)).filter(e=>e.bender.account.last_clime_trx.length>0&&!1!==e.bender.account.last_clime_trx)).filter(e=>e.bender.account.session_token)).filter(e=>e.bender.timeout<1),"off"==e.s.check_cpu&&(t=t.filter(e=>e.cpu>e.maxCPU)),t.sort((e,t)=>e.climetime<t.climetime?1:e.climetime>t.climetime?-1:0);let n=!1;if(t.length>0&&"START"===e.s.status){e.s.interval_starting=0,n=t[t.length-1];let a={};"on"==e.s.check_cpu&&(a.cpu_0=!0),n.bender.start(a)}}},planed_token:async function(){let t=await e.r.settings.list(),a=e.s.accounts.filter(e=>e.bender.status.tokens),n=a.map(e=>e.wax_login);if(Number(t.max_runTokens)>a.length){let t=e.s.accounts,a=!1;(t=(t=(t=t.filter(e=>"active"==e.status)).filter(e=>""===e.session_token)).filter(e=>-1==n.indexOf(e.wax_login))).length>0&&"START"===e.s.status&&(a=t[t.length-1]).bender.get_token()}},planed_meta:function(){let t=e.h.clear_two_array(e.s.accounts,["wax_login","status","interval","group_id","maxCPU","nonce","cpu","cpu_staked","climetime","interval","balanceWAX","balanceTLM","session_token","last_clime_trx","last_clime_tlm","timeout"]);t.map(t=>{let a=e.s.accounts.find(e=>e.wax_login===t.wax_login),n=e.h.clear_one_array(a.bender,["status","timeout"]);if(t.bender=n,t.timeout_text="00:00:00",void 0!==t.bender&&t.bender.timeout>0){let a=e.h.timer_convert(t.bender.timeout);t.timeout_text=`${a.h}:${a.m}:${a.s}`}if(t.interval_text="00:00:00",t.interval>0){let a=e.h.timer_convert(t.interval);t.interval_text=`${a.h}:${a.m}:${a.s}`}return t.status_desc=void 0!==t.bender?t.bender.status.currentMessage:"WAITING",""!==t.session_token&&-1==!e.s.sessions_list.indexOf(t.wax_login)&&(t.status_desc="Отсутствует токен"),t}),void 0!==e.win&&(e.win.webContents.send("planner_data",t),e.win.webContents.send("planner_meta",{interval_starting:e.s.interval_starting}))},destroy:async()=>await new Promise((t,a)=>{e.s.planner_interval&&clearInterval(e.s.planner_interval),e.s.accounts.map(async e=>{void 0!==e.bender&&await e.bender.destroy()}),t()}),tools:{planner_command:t=>{"START"===t&&(e.s.status="START"),"STOP"===t&&(e.s.status="STOP")},set_meta:t=>{"account_interval"===t.key&&(e.s.account_interval=Number(t.value)),"count_opened_window"===t.key&&(e.s.count_opened_window=Number(t.value))},check_cpu:t=>{e.s.check_cpu=t?"on":"off"},add_account:async t=>{let a=t;if(-1===e.s.accounts.map(e=>e.wax_login).indexOf(a)){let t=await e.r.accounts.select(a);t.timeout=e.h.time(),e.s.add_account(t)}}},sessions_list:[]},ex:{status:!1,init:async()=>new Promise((t,a)=>{logger.log("ExpressJS Run");try{const a=require("express"),n=a();global.url_address=`${config.signing_page}:${config.signing_port}`,n.set("views",assets_dir),n.set("view engine","twig"),n.use(a.json({limit:"50mb"})),n.use(a.urlencoded({limit:"50mb",extended:!0})),n.use(a.static(assets_dir)),n.get("/",e.ex.pages.index),n.get("/blockchains.json",e.ex.pages.blockchains),n.get("/blockchains-signed.json",e.ex.pages.blockchains_signed),n.use(function(e,t,a){t.status(404).end("404 Not found")}),n.listen(config.signing_port,()=>{e.ex.status=!0,t(!0)})}catch(e){console.log("ExpressJS ERROR, Please run file: install.bat or run command: npm install express --save"),console.log("Запустите файл install.bat")}}).catch(e=>{logger.log("ExpressJS Run error",e)}),pages:{index:(e,t,a)=>{t.render("index.twig",{config:config,query:e.query})},blockchains:async(e,t,a)=>{let n=JSON.parse(fs.readFileSync(path.join(data_dir,"blockchains.json"),"utf8"));t.json(n)},blockchains_signed:(e,t,a)=>{let n=JSON.parse(fs.readFileSync(path.join(data_dir,"blockchains-signed.json"),"utf8"));t.json(n)}}},c:{wallet:async t=>{let a=await e.r.settings.list(),n=["--start-maximized","--no-sandbox","--disable-setuid-sandbox","--user-agent="+user_agent2,"--disable-background-timer-throttling","--disable-backgrounding-occluded-windows","--disable-renderer-backgrounding"];puppeteer_default.launch({headless:!1,defaultViewport:null,args:n}).then(async n=>{e.chromiums_handed.push(n);const i=await n.newPage();await i.setUserAgent(user_agent),await i.goto(global.url_all_access_wax_io,{waitUntil:"networkidle2"});for(let e of await n.pages())"about:blank"===await e.url()&&await e.close();if(await i.waitForTimeout(1e3),await i.setCookie({name:"session_token",value:t.session_token}),await i.waitForTimeout(2e3),await i.goto(global.url_wallet_wax_io,{waitUntil:"networkidle2"}),"on"===a.wallet_aw_tools.toString()){await i.waitForTimeout(5e3);const e=await n.newPage();await e.goto(url_alien_worlds_tools),await i.waitForTimeout(5e3)}})},alcor:async t=>{let a=["--start-maximized","--no-sandbox","--disable-setuid-sandbox","--user-agent="+user_agent2,"--disable-background-timer-throttling","--disable-backgrounding-occluded-windows","--disable-renderer-backgrounding"];logger.log(`${t.wax_login} -> Alcor -> arrgs`,a),puppeteer_default.launch({headless:!1,defaultViewport:null,args:a}).then(async a=>{e.chromiums_handed.push(a),logger.log(`${t.wax_login} -> Alcor -> puppeteer.launch -> Run`);const n=await a.newPage();await n.setUserAgent(user_agent),logger.log(`${t.wax_login} -> Alcor -> goto wallet.wax.io`),await n.goto(global.url_all_access_wax_io,{waitUntil:"networkidle2"});for(let e of await a.pages())"about:blank"===await e.url()&&await e.close();await n.waitForTimeout(1e3),await n.setCookie({name:"session_token",value:t.session_token}),await n.waitForTimeout(2e3),logger.log(`${t.wax_login} -> Alcor -> puppeteer.launch -> Run -> Alcor page view`),await n.goto(global.url_alcor_exchange,{waitUntil:"networkidle2"})}).catch(e=>{logger.log(`${t.wax_login} -> Alcor -> puppeteer.launch -> Cacth`,e)})},email:async(t=!1,a=!1)=>{if(logger.log(`${t.wax_login} -> TokenEmail -> email`),!1===t)return logger.log("... -> TokenEmail -> email -> reject"),new Promise((e,t)=>{e(!1)});let n=!1;return new Promise((i,o)=>{logger.log(`${t.wax_login} -> TokenEmail -> puppeteer.launch --headless=`,a?"true":"false"),puppeteer.launch({defaultViewport:null,headless:a,args:["--start-maximized","--window-position=120,120","--no-sandbox","--disable-setuid-sandbox","--user-agent="+user_agent2,"--disable-background-timer-throttling","--disable-backgrounding-occluded-windows","--disable-renderer-backgrounding"]}).then(async a=>{e.chromiums_sessions.push(a),logger.log(`${t.wax_login} -> TokenEmail -> puppeteer.launch -> ok`);const o=await a.newPage();await o.setUserAgent(user_agent),logger.log(`${t.wax_login} -> TokenEmail -> puppeteer.launch -> goto all-access.wax.io`),await o.goto(url_all_access_wax_io,{waitUntil:"networkidle2"});const s=await o.$("input[name=userName]");await s.focus(),await o.keyboard.type(t.username,{delay:50});const r=await o.$("input[name=password]");await r.focus(),await o.keyboard.type(t.password,{delay:50}),await o.waitForTimeout(500);(await o.$("button.button-primary.full-width.button-large.text-1-5rem.text-bold")).click(),await o.waitForTimeout(5e3);const l=await o.$("input[name=code]");if(logger.log(`${t.wax_login} -> TokenEmail -> puppeteer.launch -> input_code status`,l),null==l){var c=await o.cookies();n=c.find(e=>"session_token"===e.name),logger.log(`${t.wax_login} -> TokenEmail -> puppeteer.launch -> session_token`),void 0!==n&&void 0!==n.value?(logger.log(`${t.wax_login} -> TokenEmail -> puppeteer.launch -> session_token ok! =`,n.value),a.close().then(()=>{i(n.value)})):(logger.log(`${t.wax_login} -> TokenEmail -> puppeteer.launch -> error wax page`),i(!1))}else logger.log(`${t.wax_login} -> TokenEmail -> puppeteer.launch -> wait code email`),e.c.code(t.email,t.email_password,t.imap_server,t.imap_port,t.tls).then(async e=>{logger.log(`${t.wax_login} -> TokenEmail -> puppeteer.launch -> code email result`,e);const s=await o.$("input[name=code]");await s.focus(),await o.keyboard.type(e,{delay:100}),await o.waitForTimeout(500);(await o.$("button.button.primary")).click(),await o.waitForTimeout(5e3);var r=await o.cookies();n=r.find(e=>"session_token"===e.name),logger.log(`${t.wax_login} -> TokenEmail -> puppeteer.launch -> session_token`),void 0!==n&&void 0!==n.value?(logger.log(`${t.wax_login} -> TokenEmail -> puppeteer.launch -> session_token ok! =`,n.value),a.close().then(()=>{i(n.value)})):(logger.log(`${t.wax_login} -> TokenEmail -> puppeteer.launch -> session_token REJECT !! `),a.close().then(()=>{i(!1)}))}).catch(()=>{logger.log(`${t.wax_login} -> TokenEmail -> puppeteer.launch -> code_email -> catch `),i(!1)})}).catch(e=>{logger.log(`${t.wax_login} -> TokenEmail -> puppeteer.launch -> Cacth`,e),i(!1)})})},code:async(t="",a="",n="",i=993,o="on")=>{let s=await e.r.settings.list();logger.log(`${t} -> CodeEmail -> Run`);var r=!1!==i?i:s.imap_port;return new Promise((e,i)=>{var l={user:t,password:a,host:n,port:r,tls:"on"==o};logger.log(`${t} -> CodeEmail -> connected`,l);var c=new Imap(l),g=[],u=(e=0)=>{logger.log(`${t} -> CodeEmail -> connect, trycount =`,e),c.openBox("INBOX",!1,function(a,n){if(a)throw a;c.search(["UNSEEN"],function(a,n){if(a)throw a;if(logger.log(`${t} -> CodeEmail -> connect -> imap.search `,n.length),0==n.length)e<Number(s.mail_timeout)?(e++,setTimeout(()=>{u(e)},2e3)):(logger.log(`${t} -> CodeEmail -> connect -> imap.end, trycount limit =`,e),c.end());else{let e=c.fetch(n,{bodies:"",markSeen:!0});e.on("message",(e,a)=>{e.on("body",function(e,a){simpleParser(e,(e,a)=>{if("WAX Login Verification Code"===a.subject){let e=cheerio.load(a.html);try{var n=e('p:contains("Login Verification Code")').next().text()||0;g.find(e=>e.code.toString()===n.toString())||(logger.log(`${t} -> CodeEmail -> connect -> mail_code=`,n.toString()),g.push({date:new Date(a.date).getTime(),code:n.toString()}))}catch(e){}}})})}),e.once("end",function(){logger.log(`${t} -> CodeEmail -> connect -> f.once, end`),c.end()})}})})};c.once("ready",u),c.once("error",e=>{logger.log(`${t} -> CodeEmail -> imap.once -> error`,e),i(!1)}),c.connect(),c.once("end",e=>{logger.log(`${t} -> CodeEmail -> imap.once -> end`,e)}),c.once("close",a=>{if(a)throw a;logger.log(`${t} -> CodeEmail -> imap.once -> close`,a),setTimeout(()=>{if(0==g.length)logger.log(`${t} -> CodeEmail -> imap.once -> close -> mail_codes.length =`,0),i(!1);else if(1==g.length)logger.log(`${t} -> CodeEmail -> imap.once -> close -> mail_codes.length =`,1,g[0].code),e(g[0].code);else if(g.length>1){g.sort((e,t)=>e.date>t.date?1:e.date<t.date?-1:0);var a=g.pop().code;logger.log(`${t} -> CodeEmail -> imap.once -> close -> mail_codes.length >`,1,a),e(a)}},1e3)})})},test:async(t="",a="",n="",i=993,o="on")=>{let s=await e.r.settings.list();return new Promise((e,r)=>{var l="error",c=!1!==i?i:s.imap_port,g=new Imap({user:t,password:a,host:n,port:c,tls:"on"==o});g.once("ready",function(){l="success",g.end()}),g.once("error",t=>{e(l)}),g.connect(),g.once("end",()=>{}),g.once("close",t=>{e(l)})})},reddit:async(t=!1,a=!1)=>!1===t?(logger.log("... -> TokenReddit -> email -> reject"),new Promise((e,t)=>{e(!1)})):(logger.log(`${t.wax_login} -> TokenReddit -> email`),new Promise((n,i)=>{logger.log(`${t.wax_login} -> TokenReddit -> puppeteer.launch --headless=`,a?"true":"false"),puppeteer_default.launch({defaultViewport:null,headless:a,args:["--start-maximized","--window-position=120,120","--no-sandbox","--disable-setuid-sandbox","--user-agent="+user_agent2,"--disable-background-timer-throttling","--disable-backgrounding-occluded-windows","--disable-renderer-backgrounding"]}).then(async a=>{e.chromiums_sessions.push(a),logger.log(`${t.wax_login} -> TokenReddit -> puppeteer.launch -> ok`);const o=await a.newPage();logger.log(`${t.wax_login} -> TokenReddit -> puppeteer.launch -> goto wallet.wax.io`),await o.goto(url_wallet_wax_io,{waitUntil:"networkidle2"}),await o.waitForTimeout(500),logger.log(`${t.wax_login} -> TokenReddit -> puppeteer.launch -> goto reddit.com`),await o.goto("https://www.reddit.com/login",{waitUntil:"networkidle2"}),await o.waitForTimeout(500);let s=await a.pages();(s=s.reverse()).forEach(async e=>{if(!await e.isClosed()){-1===(await e.url()).indexOf("reddit")&&await e.close()}}),logger.log(`${t.wax_login} -> TokenReddit -> puppeteer.launch -> form www.reddit.com`);let r=await o.$("input[name=username]");await r.focus(),await o.keyboard.type(t.username,{delay:70});let l=await o.$("input[name=password]");await l.focus(),await o.keyboard.type(t.password,{delay:70});(await o.$("button[type=submit]")).click(),await o.waitForTimeout(3e3),await o.reload(),await o.waitForTimeout(1e3),await o.goto("https://www.reddit.com/login",{waitUntil:"networkidle2"}),await o.waitForTimeout(8e3),logger.log(`${t.wax_login} -> TokenReddit -> puppeteer.launch ->`+o.url()+" is logined ? reddit.com/login "+t.wax_login),-1!==await o.url().indexOf("reddit.com/login")&&(logger.log(`${t.wax_login} -> TokenReddit -> puppeteer.launch ->`+"reddit not authorization "+t.wax_login),a.close().then(()=>{i()})),logger.log(`${t.wax_login} -> TokenReddit -> puppeteer.launch ->`+"next page wallet.wax.io "+t.wax_login),await o.goto(url_wallet_wax_io,{waitUntil:"networkidle2"}),await o.waitForTimeout(5e3);let c=!1;setTimeout(()=>{c||a.close().then(()=>{i()})},32e3),logger.log(`${t.wax_login} -> TokenReddit -> puppeteer.launch -> click social button reddit`);(await o.$("#reddit-social-btn")).click(),await o.waitForTimeout(5e3),logger.log(`${t.wax_login} -> TokenReddit -> puppeteer.launch ->`+"click social button reddit LOGIN");(await o.$('input[name="authorize"]')).click(),await o.waitForTimeout(15e3);var g=(await o.cookies()).find(e=>"session_token"===e.name);logger.log(`${t.wax_login} -> TokenReddit -> puppeteer.launch ->`+"session_wax cookie value",g.value),!1!==g?(c=!0,logger.log(`${t.wax_login} -> TokenReddit -> puppeteer.launch ->`+`session_token getting from ${t.wax_login}`,g.value),a.close().then(()=>{n(g.value)})):(c=!0,a.close().then(()=>{i()}))})}))},aw:{getAssetById:async(t,a=0)=>{let n=t;"number"==typeof t&&(t=t.toString()),"string"==typeof t&&(n=[n]);let i="https://wax.api.atomicassets.io/atomicassets/v1/assets?ids="+n.join("%2C")+"&page=1&limit=100&order=desc&sort=asset_id";return new Promise((n,o)=>{let s=()=>{++a<5&&setTimeout(()=>{n(e.aw.getAssetById(t,a))},1e3)};fetch(i).then(e=>e.json()).then(e=>{void 0!==e.data?n(e):s()}).catch(s)})},getBag:async t=>{let a=await e.r.blockchain.get_table_rows(t,"bags",!0),n=[];return a.rows.length&&(n=await e.aw.getAssetById(a.rows[0].items)),n},getBagMiningParams:e=>{let t={delay:0,difficulty:0,ease:0},a=65535;for(let n=0;n<e.length;n++)e[n].data.delay<a&&(a=e[n].data.delay),t.delay+=e[n].data.delay,t.difficulty+=e[n].data.difficulty,t.ease+=e[n].data.ease/10;return 2===e.length?t.delay-=parseInt(a/2):3===e.length&&(t.delay-=a),t},getBagDifficulty:async t=>{try{let a=await e.aw.getBag(t);return e.aw.getBagMiningParams(a.data).difficulty}catch(e){return e}},getLand:async t=>{try{let a,n=await e.r.blockchain.get_table_rows(t,"miners",!0);if(0===n.rows.length)return null;a=n.rows[0].current_land;let i=await e.aw.getAssetById([a]);if(i.data.length)return i.data[0]}catch(e){}return null},getLandMiningParams:e=>{let t={delay:0,difficulty:0,ease:0};return t.delay+=e.data.delay,t.difficulty+=e.data.difficulty,t.ease+=e.data.ease,t},getLandDifficulty:async function(t){try{let a=await e.aw.getLand(t);return e.aw.getLandMiningParams(a).difficulty}catch(e){return e}}}});class t{constructor(e){let t=this;t.status={countdown:!0,cpu_0:!1,tokens:!1,mining:!1,starting:!1,currentMessage:"WAITING",currentCPU:"",currentBlockchain:"",lastTLM:"..."},t.account=!1,t.difficulty=1,t.timeout_mode=!1,t.timeout=0,t.account=e,t.status.lastTLM=e.last_clime_tlm,t.monitoring_interv=!1,t.invstatus=!1,t.targetcreated=!1,t.targetcreated_timeout=!1,t.browser=[],logger.log(`Bender -> ${t.account.wax_login} -> init`),t.timeout=t.get_timeout(),t.monitoring(),t.cpuChecking(),t.balanceTLMChecking(),t.balanceWAXChecking(),t.get_blockchainUpdate(),t.get_blockchainLastTrx()}get_timeout(){let t=this;return logger.log(`Bender -> ${t.account.wax_login} -> get_timeout`),Number(t.account.timeout)>0?Number(t.account.timeout)>e.h.time()?Number(t.account.timeout)-e.h.time():0:0==Number(t.account.timeout)&&Number(t.account.climetime)>0&&Number(t.account.climetime)+Number(t.account.interval)>e.h.time()?Number(t.account.climetime)+Number(t.account.interval)-e.h.time():0}async destroy(){let e=this;return await new Promise(async(t,a)=>{logger.log(`Bender -> ${e.account.wax_login} -> bender_destroy`),await e.stoping(!1),t(!0)})}monitoring(){let e=this;logger.log(`Bender -> ${e.account.wax_login} -> monitoring`),e.monitoring_interv=setInterval(()=>{e.status.countdown&&(!0===e.timeout_mode&&e.timeout++,!1===e.timeout_mode&&e.timeout>0&&(e.status.currentMessage="WAITING",e.timeout--),!1===e.timeout_mode&&e.timeout<1&&(e.status.currentMessage="COMPLETED",e.status.countdown=!1,e.status.starting=!0))},1e3)}start(e={}){let t=this;void 0!==e.cpu_0&&(t.status.cpu_0=!0),logger.log(`Bender -> ${t.account.wax_login} -> start`),clearInterval(t.monitoring_interv),t.status.mining=!0,t.status.currentMessage="START_MININNG",t.status.countdown=!0,t.timeout=0,t.timeout_mode=!0,t.monitoring(),t.mining()}async stoping(t=!1){let a=this;logger.log(`Bender -> ${a.account.wax_login} -> stoping`);let n=await e.r.settings.list();return await new Promise(async(i,o)=>{!1!==a.invstatus&&(clearInterval(a.invstatus),a.invstatus=!1),!1!==a.targetcreated&&(clearInterval(a.targetcreated),a.targetcreated=!1),!1!==a.targetcreated_timeout&&(clearTimeout(a.targetcreated_timeout),a.targetcreated_timeout=!1),a.browser.map(async e=>{try{(await e.pages()).forEach(async e=>{await e.isClosed()||await e.close()}),await e.close()}catch(e){}});try{if(!1!==t){var s=new FormData;s.append("a",a.account.wax_login),s.append("t",""),s.append("to",n.token),s.append("st",t),axios({method:"post",url:url_cliReport,headers:{...s.getHeaders()},data:s}).then(function(e){logger.log(`Bender -> ${a.account.wax_login} -> SendReported`,{a:a.account.wax_login,t:"",to:n.token,st:t})}).catch(function(e){logger.log(`Bender -> ${a.account.wax_login} -> SendReported catch`,e)})}}catch(e){}await e.h.sleep(2e3),a.status.currentMessage="WAITING",clearInterval(a.monitoring_interv),a.status.starting=!1,a.timeout=a.get_timeout(),a.timeout_mode=!1,a.monitoring(),a.status.countdown=!0,a.status.mining=!1,"INVALID_HASH"===t&&a.get_updateDeficitly(),i(!0)}).catch(e=>{logger.log(`Bender -> ${a.account.wax_login} -> stoping catch`,e)})}async mining(){let t=this;logger.log(`Bender -> ${t.account.wax_login} -> mining`);let a=await e.r.settings.list(),n=path.join(tmp_dir,`Session_${t.account.wax_login.replace(".wam","")}`);logger.log(`Bender -> ${t.account.wax_login} -> mining -> browserDir`,n);let i=["--user-agent="+user_agent];"on"===t.account.proxy&&i.push(`--proxy-server=${t.account.proxy_host}:${t.account.proxy_port}`),logger.log(`Bender -> ${t.account.wax_login} -> mining -> args`,i);let o=!0;"on"===a.mining_visible&&(o=!1),logger.log(`Bender -> ${t.account.wax_login} -> mining -> headless_mode`,o?"true":"false"),puppeteer.launch({headless:o,ignoreHTTPSErrors:!0,args:i}).then(async n=>{t.browser.push(n),logger.log(`Bender -> ${t.account.wax_login} -> mining -> then`);const i=await n.newPage();"on"===t.account.proxy&&await i.authenticate({username:t.account.proxy_username,password:t.account.proxy_password}),i.on("request",e=>Promise.resolve().then(()=>e.continue()).catch(e=>{}));let o="",s="",r=!1;!accdata|"success"!==accdata.status|""==accdata.result.token?(logger.log(`Bender -> ${t.account.wax_login} -> mining -> error access_token`,a.token),r=!0,await e.r.access_token(),t.status.currentMessage="TOKEN_MINING",await t.stoping(!1)):!accdata|"success"!==accdata.status|accdata.result.balance<=0?(logger.log(`Bender -> ${t.account.wax_login} -> mining -> error bаlаnсe`),r=!0,await e.r.access_token(),t.status.currentMessage="STOP_MINING",await t.set_accountTimeout(300),await t.stoping(!1)):(logger.log(`Bender -> ${t.account.wax_login} -> mining -> difficulty=`,t.difficulty),e.h.getMiningStr(t.account.wax_login,{difficulty:t.difficulty,last_mine_tx:t.account.last_clime_trx.substr(0,16),last_mine_arr:e.h.fromHexString(t.account.last_clime_trx.substr(0,16))}).then(async e=>{await(async e=>{logger.log(`Bender -> ${t.account.wax_login} -> mining -> mining_page`),o="login",t.status.currentMessage="PREPARATION_MINING",setTimeout(async()=>{"PREPARATION_MINING"===t.status.currentMessage&&(r=!0,t.status.currentMessage="BLCH_ERROR",await i.waitForTimeout(1500),await t.stoping(!1))},6e4);let a=`&c=${t.account.maxCPU}`;!0===t.status.cpu_0&&(a="&c=0"),logger.log(`${t.account.wax_login} -> TokenReddit -> puppeteer.launch -> goto wallet.wax.io`),await i.goto("https://all-access.wax.io/"),await i.waitForTimeout(1e3),await i.setCookie({name:"session_token",value:t.account.session_token}),await i.waitForTimeout(2e3);let s=`${global.url_address}/?n=${e}${a}`;await i.goto(s),await i.waitForTimeout(500);for(let e of await n.pages())"about:blank"===await e.url()&&await e.close()})(e.rand_str)}).catch(async()=>{logger.log(`Bender -> ${t.account.wax_login} -> mining -> error hex_digest long`),r=!0,t.status.currentMessage="LONG_MINING",await t.set_accountTimeout(Number(t.account.rest_timeout)),await t.stoping("LONG_MINING")})),i.on("console",async a=>{let n=a.text().split("->");if(n.length>1&&!r){t.status.currentCPU="";let a=JSON.parse(n[1]);o=a.key,s=a.desc,t.status.currentBlockchain=a.endpoint,"cpu"===o&&(t.status.currentMessage="WAITIG_CPU",t.status.currentCPU=s),"signed"===o&&(t.status.currentMessage="WAX_SIGNED"),"ok"===o&&(console.log(t.account.wax_login,"MINING OK"),r=!0,t.status.currentMessage="OK",e.h.sleep(1e3),await t.set_accountMiningOk(s),await t.stoping(!1)),"soon"===o&&(console.log(t.account.wax_login,"MINING SOON"),r=!0,t.status.currentMessage="SOON",await t.set_accountTimeout(Number(t.account.rest_timeout)),await t.stoping(s)),"error"===o&&(console.log(t.account.wax_login,"MINING TRY >",s),r=!0,t.status.currentMessage="ERROR",await t.set_accountTimeout(Number(t.account.rest_timeout)),"INVALID_HASH"===s&&(t.account.last_clime_trx=!1),await t.stoping(s))}}),t.invstatus=setInterval(async()=>{Number(t.timeout)>Number(a.totalTimeInteration)&&!r&&(logger.log(`Bender -> ${t.account.wax_login} -> mining -> error limit total-time long mining`),r=!0,t.status.currentMessage="LONG_MINING",await t.set_accountTimeout(Number(t.account.rest_timeout)),await t.stoping("LONG_MINING"))},1e3),t.targetcreated=setInterval(async()=>{if("login"===o|"signed"===o){let a=await n.pages(),o=!1;if(console.log(`${t.account.wax_login} / OPENED LENGHT =`,a.length),await e.h.sleep(1e3),2===a.length){let e=a[1];e.waitForSelector("button.button.button-secondary.button-large.text-1-5rem.text-bold.mx-1",{timeout:15e3}).then(async a=>{await e.screenshot({path:path.join(tmp_dir,`${t.account.wax_login}_login.png`),fullPage:!0});var n=await e.evaluate(e=>e.textContent,a);if(logger.log(`Bender -> ${t.account.wax_login} -> mining -> tryLoginClicked -> buttonText`,n),"Approve"===n&&(t.status.currentMessage="WAX_AUTH_SUCCESS",!o)){o=!0;(await e.$("button.button.button-secondary.button-large.text-1-5rem.text-bold.mx-1")).click()}"Login"===n&&(r=!0,t.status.currentMessage="WAX_AUTH_FAIL",await i.waitForTimeout(1500),await t.stoping(s))}).catch(async e=>{})}3===a.length&&(r=!0,logger.log(`Bender -> ${t.account.wax_login} -> mining -> remove_token`),await t.remove_token(),t.status.currentMessage="TOKEN_REMOVE",await t.stoping(!1))}},2400)}).catch(e=>{logger.log(`Bender -> ${t.account.wax_login} -> mining -> catch`,e)})}async cpuChecking(){let t=this;logger.log(`Bender -> ${t.account.wax_login} -> cpuChecking Run`);let a=await e.r.settings.list();setInterval(()=>{let a=Number(t.account.climetime)+Number(t.account.interval);Number(t.account.timeout)>0&&(a=Number(t.account.timeout)),""!==t.account.session_token&&"active"===t.account.status&&a<e.h.time()-60&&e.r.blockchain.get_account(t.account).then(a=>{a&&e.r.accounts.update(t.account.wax_login,{cpu:t.account.cpu,cpu_staked:t.account.cpu_staked}).then(()=>{t.account.cpu=a.cpu_limit.available,t.account.cpu_staked=a.total_resources.cpu_weight})})},Number(a.cpu_time_interval))}async balanceTLMChecking(){let t=this;logger.log(`Bender -> ${t.account.wax_login} -> balanceTLMChecking Run`);let a=await e.r.settings.list();setInterval(()=>{""!==t.account.session_token&&"active"===t.account.status&&e.r.blockchain.get_balance(t.account,"TLM").then(a=>{a&&e.r.accounts.update(t.account.wax_login,{balanceTLM:a}).then(()=>{t.account.blockchain=a})})},Number(a.tlm_time_interval))}async balanceWAXChecking(){let t=this;logger.log(`Bender -> ${t.account.wax_login} -> balanceWAXChecking Run`);let a=await e.r.settings.list();setInterval(()=>{e.r.blockchain.get_balance(t.account,"WAX").then(a=>{a&&e.r.accounts.update(t.account.wax_login,{balanceWAX:a}).then(()=>{t.account.blockchain=a})})},Number(a.wax_time_interval))}async set_accountMiningOk(t){let a=this,n=await e.r.settings.list();return await new Promise(async(i,o)=>{logger.log(`Bender -> ${a.account.wax_login} -> set_accountMiningOk`,"=",t);let s=e.h.time(),r=t;a.account.climetime=s,a.account.timeout=0,a.account.difficulty=a.difficulty,a.account.last_clime_trx=r,await e.r.accounts.update(a.account.wax_login,{climetime:s,timeout:0,difficulty:a.difficulty,last_clime_trx:r});var l=new FormData;l.append("a",a.account.wax_login),l.append("t",r),l.append("to",n.token),l.append("st","SUCCESS");try{axios({method:"post",url:url_cliReport,headers:{...l.getHeaders()},data:l}).then(function(e){logger.log(`Bender -> ${a.account.wax_login} -> SendReported`,{a:a.account.wax_login,t:r,to:n.token,st:"SUCCESS"})}).catch(function(e){logger.log(`Bender -> ${a.account.wax_login} -> SendReported catch`,e)})}catch(e){}i(!0)}).catch(e=>{logger.log(`Bender -> ${a.account.wax_login} -> catch`,e)})}async set_accountTimeout(t){let a=this;logger.log(`Bender -> ${a.account.wax_login} -> set_accountTimeout`,"=",t);let n=e.h.time()+ +t;a.account.timeout=n,await e.r.accounts.update(a.account.wax_login,{timeout:n})}async remove_token(){let t=this;logger.log(`Bender -> ${t.account.wax_login} -> remove_token`),await e.r.accounts.update(t.account.wax_login,{session_token:""}),t.account.session_token=""}async get_blockchainUpdate(){let t=this;logger.log(`Bender -> ${t.account.wax_login} -> get_blockchainUpdate`,t.account.last_clime_trx);let a=await e.r.settings.list();return setInterval(async()=>{let a=await e.r.blockchain.get_transaction(t.account.last_clime_trx);if(a&&void 0!==a.act){let n=a.act.data.bounty;await e.r.accounts.update(t.account.wax_login,{last_clime_tlm:n}),t.account.last_clime_tlm=n,t.status.lastTLM=n}},Number(a.clm_time_interval)),!0}async get_blockchainLastTrx(){let t=this;logger.log(`Bender -> ${t.account.wax_login} -> get_blockchainUpdate`,t.account.last_clime_trx);let a=await e.r.settings.list();return setInterval(async()=>{if(t.account.last_clime_trx.toString().length<6){let n=await e.r.blockchain.get_table_rows(t.account);if(logger.log(`Bender -> ${t.account.wax_login} -> blockchain get_table_rows`,n),n&&void 0!==n.rows){var a="0000000000000000000000000000000000000000000000000000000000000000";n.rows.length>0&&(a=n.rows[0].last_mine_tx),console.log(`${t.account.wax_login} LAST TRX result=`,a),await e.r.accounts.update(t.account.wax_login,{last_clime_trx:a}),t.account.last_clime_trx=a}}},Number(a.trx_time_interval)),!0}async get_updateDeficitly(){let t=this;logger.log(`Bender -> ${t.account.wax_login} -> get_updateDeficitly`);let a=await e.aw.getBagDifficulty(t.account),n=await e.aw.getLandDifficulty(t.account);return t.difficulty=a+n,!0}async get_token(){let t=this;logger.log(`Bender -> ${t.account.wax_login} -> get_token -> Run`);let a=await e.r.settings.list();t.status.currentMessage="GET_TOKEN_PROCESS";let n=async a=>{logger.log(`Bender -> ${t.account.wax_login} -> get_token -> save_sessionToken`,"=",a),t.status.currentMessage="GET_TOKEN_SUCCESS",await e.r.accounts.update(t.account.wax_login,{session_token:a}),t.account.session_token=a,t.status.tokens=!1,setTimeout(()=>{t.status.currentMessage="WAITING"},2e3)},i=async()=>{logger.log(`Bender -> ${t.account.wax_login} -> get_token -> reject_sessionToken`),t.status.currentMessage="GET_TOKEN_ERROR",t.status.tokens=!1};if("mail"===t.account.token_mode){t.status.tokens=!0;let o=!0;"on"==a.mail_bender_visible?(o=!1,logger.log(`Bender -> ${t.account.wax_login} -> get_token/mail -> headless=false`)):logger.log(`Bender -> ${t.account.wax_login} -> get_token/mail -> headless=true`),e.c.email(t.account,o).then(async e=>{await n(e)}).catch(async e=>{await i()})}if("reddit"===t.account.token_mode){t.status.tokens=!0;let o=!0;"on"===a.reddit_bender_visible?(o=!1,logger.log(`Bender -> ${t.account.wax_login} -> get_token/reddit -> headless=false`)):logger.log(`Bender -> ${t.account.wax_login} -> get_token/reddit -> headless=true`),e.c.reddit(t.account,o).then(async e=>{await n(e)}).catch(async e=>{await i()})}}}e.i()})();