const Clash = require('clash-proxy'); const axios = require('axios'); const cp = require('child_process'); const path = require("path"); const fs = require("fs"); const parser = require('./parser') const http = require("http"); const ProgressBar = require('./process-bar') const config = require("./config"); const os = require("os"); let file = null; let list = null; let resList = []; let finalList = []; let clash; async function startClash(){ return new Promise((res,rej)=>{ let subProgress = cp.spawn(getPath('clash'),['-f','./config.yml'],{cwd:path.join(process.cwd())}) subProgress.stdout.on('data',(d)=>{ let dataAfter = Buffer.from(d).toString('utf8') if(dataAfter.includes('level=info msg="RESTful API listening at: [::]:38888"')){ res() } }) }) } async function convert(){ const base64 = Buffer.from(file, 'utf-8').toString('base64'); http.createServer(((req, res) => { res.writeHead(200); res.end(base64) })).listen(7867); let result = await axios('http://127.0.0.1:25500/sub?target=clash&remove_emoji=false&url=http%3A%2F%2F127.0.0.1%3A7867%2F'); fs.writeFileSync('config.yml',result.data.replace('7890','6688').replace('7891','6699').replace('9090','38888')) } async function startSub(){ return new Promise((res,rej)=>{ let subProgress = cp.spawn(getPath('subconverter'),[],{cwd:path.join(process.cwd(),'./subconverter/'),shell:true}) subProgress.stderr.on('data',(d)=>{ let dataAfter = Buffer.from(d).toString('utf8') if(dataAfter.includes('Startup completed. Serving HTTP @ http://0.0.0.0:25500')){ res() } }) }) } async function start(){ file = fs.readFileSync('out',"utf-8") list = parser.read('out') await startSub(); console.log('Subconverter start ok!!!'); await convert(); console.log('Convert ok!!!'); await startClash(); console.log('Clash ok!!!'); clash = Clash({ secret: '', api: 'http://127.0.0.1:38888' }); await axios.patch('http://127.0.0.1:38888/configs',{"mode":"Global"}); await test(); await finish(); process.exit(0); } async function test(){ let pb = new ProgressBar('Progressing...', 50); let num = 0, total = list.length; for(let i=0;i