{"version":3,"sources":["jsdelivr-header.js","/npm/panel-admin@0.1.0/admin.js"],"names":[],"mappings":"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","file":"/npm/panel-admin@0.1.0/admin.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/panel-admin@0.1.0/admin.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","#!/usr/bin/env node\n\n\"use strict\";\n\n/** @module adminPanel */\n/**\n * @file admin.js\n * @copyright V.H 2k18\n * @license ISC\n * @author V.H <alternativexxxy@gmail.com>\n */\n/**\n * @requires socket.io\n * @requires fs-extra\n * @requires http\n * @requires https\n * @requires path\n * @requires crypto\n * @requires extra-url\n * @requires util\n * @requires domain\n * @requires string_decoder\n * @requires chillout-es7\n * @requires stream\n * @requires child_process\n */\n \n /**\n  * @TODO add http2\n  */\n\nconst io = require(\"socket.io\"),\nfs = require(\"fs-extra\"),\nhttp = require(\"http\"),\nhttps = require(\"https\"),\ncrypto = require(\"crypto\"),\nurl = require(\"extra-url\"),\npath = require(\"path\"),\nutil = require(\"util\"),\nstream = require(\"stream\"),\ndecoder = new (require(\"string_decoder\").StringDecoder)(),\ndebug = util.debuglog(\"adminPanel\"),\ncp = require(\"child_process\"),\nc = require(\"chillout-es7\"),\ncc = require(\"./lib/Classes.js\"),\nd = require(\"domain\").create(),\n\nERR = {\n\tENOENT: new URIError(\"No such File or Directory.\")\n},\n_void = () => { },\n\n/**\n * Admin options\n * @prop {number} port\n * @prop {number} pingTimeout - Socket.io\n * @prop {number} pingInterval - Socket.io\n * @prop {string} path - Server path\n * @prop {string} root - Local path\n * @prop {string} index - Main page\n * @prop {string} ws - WebSocket directory\n * @prop {string} session - Cookie to bind\n * @prop {string} param - Query to bind to\n * @prop {string} password - Admin password\n * @prop {string|Buffer} seed - Crypto seed\n * @prop {number} max - Max connections\n * @prop {string} dir - Directory indexer\n * @prop {string} type - Server type\n * @prop {string} template - Templating character\n * @prop {string} panel - Panel page\n * @prop {string} upload - Upload directory\n * @prop {number} delay - DOS protection\n * @prop {number} timeout - Request/Response timeout\n */\nopt = {\n\tport: (process.env.adminPort || 9999) | 0,\n\tpingTimeout: (process.env.adminPingTimeout || 50000) | 0, //socket.io\n\tpingInterval: (process.env.adminPingInterval || 30000) | 0, //socket.io\n\tpath: process.env.adminPath || \"/admin\", //server bound subpath\n\tns: process.env.adminNs || \"/admin\", //socket.io namespace\n\tws: process.env.adminWs || \"/ws\", //path+ws\n\troot: process.env.adminRoot || (__dirname + \"/src\"), //panel root\n\tsession: process.env.adminSession || \"adminSession\", //cookie\n\tparam: process.env.adminParam || \"pass\", //username, parameter\n\tpassword: process.env.adminPass || \"root\", //pass\n\tseed: process.env.adminSeed || process.env.RANDOM || random(), //session crypto key\n\tmax: (process.env.adminMax || 100) | 0, //max connections\n\tindex: process.env.adminIndex ||  \"HTML/index.html\", //auth page, Obsolete\n\tdir: process.env.adminDir || \"HTML/dir.htm\", //directory indexer\n\tpanel: process.env.adminPanel || \"HTML/panel.html\", //main page\n\ttype: process.env.adminType || \"http\", //OBSOLETE\n\ttemplate: process.env.adminTemplate || \"$$\", //DONT CHANGE ON DEFAULT MODE!!\n\tupload: process.env.adminUpload || \"/upload\", //upload dir\n\tdelay: (process.env.adminDelay || 500) | 0, //POST protection delay\n\ttimeout: (process.env.adminTimeout || 60000) | 0, //req/res timeout\n\tRunStats: process.env.adminRunStats || {\n\t\tdb: __dirname + '/src/runstats.json',\n\t\tinterval: 1000,\n\t\topts: {\n\t\t\tmax: 10,\n\t\t\tchunks: 10,\n\t\t\tautostart: true\n\t\t}\n\t}\n};\n\nd.enter();\nd.on(\"error\", err => process.emitWarning(err, \"AdminPanel\"));\n\nfunction random(to = 1000, from = 0, rounded = true) {\n\tlet rnd = Math.random() * (to - from) + from;\n\trnd = rounded ? Math.round(rnd) : rnd;\n\treturn rnd;\n} //random\n\n/**\n * Parse cookies from string to object.\n * @summary Parse\n * @param {string|string[]} cookie - Cookie\n * @return {Object} cookies\n */\nfunction parseCookies(cookie) {\n\tcookie = typeof cookie == \"string\" ? cookie.split(\";\") : Array.from(cookie);\n\tcookie = cookie.filter(c => c.includes(\"=\")).map(c => c.split(\"=\"));\n\tlet cookies = { };\n\tfor (let c of cookie) {\n\t\tcookies[c[0].trim()] = c[1].trim();\n\t}\n\treturn cookies;\n} //parseCookies\n\nasync function stats(path = \"./\") {\n\treturn new Promise((rsl, rjc) => {\n\t\tfs.stat(path, (err, stats) => {\n\t\t\tif (err) {\n\t\t\t\trjc(err);\n\t\t\t} else {\n\t\t\t\trsl(stats);\n\t\t\t}\n\t\t});\n\t});\n} //stats\n\n/**\n * Stream Reader.\n * @summary Reader\n * @async\n * @param {stream.Readable} rdbl - Stream to suck\n * @return {Buffer} Output\n */\nasync function readAll(rdbl) {\n\treturn new Promise((rsl, rjc) => {\n\t\tlet out = Buffer.alloc(0);\n\t\trdbl.on(\"data\", data => out = Buffer.concat([out, data]));\n\t\trdbl.once(\"end\", () => rsl(out));\n\t\trdbl.once(\"error\", rjc);\n\t});\n} //readAll\n\n/**\n * Push data from one Readable to another.\n * @param {stream.Readable} rd1 - from\n * @param {stream.Readable} rd2 - to\n * @returns {stream.Readable} to\n */\nfunction readPush(rd1, rd2) {\n\tlet w = new stream.Writable({\n\t\twrite(chunk, enc, cb) {\n\t\t\trd2.push(chunk);\n\t\t\tcb();\n\t\t}\n\t});\n\t\n\trd1.pipe(w);\n\treturn rd2;\n} //readPush\n\n/**\n * ReadStream Transformer for templating.\n * @summary Template\n * @param {string} src - Local file path\n * @param {http.IncomingMessage} data - Request object\n * @param {string[]} [allowTypes=[\".js\",\".html\",\".html\",\".css\", \".json\", \".txt\", \".md\"]] - Filetypes to be templated\n * @return {stream.Readable} stream\n */\nfunction prox(src, ctx, allowtypes = [\".txt\", \".js\", \".html\", \".htm\", \".css\", \".json\", \".md\"]) {\n\tlet s = src/*,\n\tzip = zlib.createGzip({\n\t\tmemLevel: 5,\n\t\tflush: zlib.Z_PARTIAL_FLUSH\n\t})*/;\n\tif (typeof s == \"string\") {\n\t\ts = fs.createReadStream(src);\n\t}\n\t\n\tif (allowtypes.includes(path.extname(src.path || src))) {\n\t\tlet st = new stream.Readable({\n\t\t\tread(size, encoding = \"utf8\", callback = () => { }) { }\n\t\t});\n\t\treadAll(s).then(async s => {\n\t\t\tst.push(await process(s, ctx));\n\t\t\tst.push(null);\n\t\t});\n\t\treturn st;\n\t} else {\n\t\treturn s;\n\t}\n\t\n\tasync function process(data, DATA) {\n\t\tlet out = data.toString(\"utf8\").split(DATA.handler.opts.template);\n\t\tfor (let i = 1; i < out.length; i += 2) {\n\t\t\tout[i] = await eval(\"'use strict';\\n(async DATA => {\" + out[i] + \"})(DATA)\");\n\t\t}\n\t\treturn Buffer.from(out.join(\"\"));\n\t} //process\n} //prox\n\n/**\n * Server Listener.\n * @summary Listener\n * @async\n * @param {http.IncomingMessage} req - Request\n * @param {http.ServerResponse} res - Response\n */\nasync function listener(req, res) {\n\td.add(req);\n\td.add(res);\n\treq.handler = this; //!!!\n\treq.url = this.type + \"://void:0@127.0.0.1:\" + this.address().port + req.url;\n\tlet uri = req.uri = url.parse(req.url, false),\n\tcookies = req.cookies = this.parseCookies(req.headers.cookie || \"\");\n\turi.pathnameraw = path.normalize(uri.pathname).replace(/\\/$/, \"\");\n\tif (req.method == \"POST\") {\n\t\treq.data = decoder.write(await this.readAll(req));\n\t}\n\treq.carriage = { };\n\treq.setTimeout(60000, () => req.destroy(\"TIMEOUT\"));\n\tif (this.bans.has(req.socket.remoteAddress)) {\n\t\tres.writeHead(403, http.STATUS_CODES[403], {\n\t\t\t\"Set-Cookie\": this.opts.session + \"=; HttpOnly; Expires=Session; SameSite=Strict; path=\" + this.opts.path + (this.type == \"https\" ? \"; Secure\" : \"\"),\n\t\t\t\"Location\": \"data:text/html,<h1 align=center>You have been Banned.</h1>\"\n\t\t});\n\t\tres.end(\"<html><script>location.href='data:text/html,<h1 align=center>You have been Banned.</h1>'</script>BANNED</html>\");\n\t\treturn;\n\t} else if (req.headers.authorization && cookies[this.opts.session.trim()] != this.pass.trim()) {\n\t\tlet auth = req.headers.authorization.split(\" \").pop();\n\t\tauth = Buffer.from(auth, \"base64\").toString(\"utf8\");\n\t\turi.auth = auth != \":\" ? auth : null;\n\t\turi._revoke();\n\t\turi.query = uri.query || { };\n\t\turi.query[auth.split(\":\").shift() || \"void\"] = auth.split(\":\").pop() || \"0\";\n\t\tif (uri.query[this.opts.param.trim()] == this.opts.password.trim()) {\n\t\t\tlet w;\n\t\t\tres.writeHead(200, http.STATUS_CODES[200], {\n\t\t\t\t\"Set-Cookie\": [this.opts.session.trim() + \"=\" + this.pass.trim() + \"; HttpOnly; Expires=Session; SameSite=Strict; path=\" + this.opts.path + (this.type == \"https\" ? \"; Secure\" : \"\"),\n\t\t\t\t\t\"ws=\" + this.opts.path + this.opts.ws + \"; Expires=Session; SameSite=Strict; path=\" + this.opts.path + (this.type == \"https\" ? \"; Secure\" : \"\"),\n\t\t\t\t\t\"domain=\" + this.opts.path + \"; Expires=Session; SameSite=Strict; path=\" + this.opts.path + (this.type == \"https\" ? \"; Secure\" : \"\")],\n\t\t\t\t\"Location\": (w = this.opts.path + \"/\" + ((this.opts.expose === \"false\" ? uri.pathname : uri.path).replace(new RegExp(\"^\" + this.opts.path + \"/?\", \"g\"), \"\") || this.opts.panel))\n\t\t\t});\n\t\t\tres.end(\"<!DOCTYPE html><html><head><meta http-equiv=\\\"refresh\\\" content=\\\"0; url=\" + w + \"\\\" /></head></html>\");\n\t\t} else {\n\t\t\tres.writeHead(401, http.STATUS_CODES[401], {\n\t\t\t\t\"Set-Cookie\": this.opts.session + \"=; HttpOnly; Expires=Session; SameSite=Strict; path=\" + this.opts.path + (this.type == \"https\" ? \"; Secure\" : \"\")\n\t\t\t});\n\t\t\tres.end(http.STATUS_CODES[403]);\n\t\t}\n\t\treturn;\n\t}\n\tif (uri.pathname.startsWith(this.opts.path)) {\n\t\t\n\t\tres.sendDate = true;\n\t\tres.setTimeout(60000, () => res.end(http.STATUS_CODES[408]));\n\t\tres.setHeader(\"Cache-Control\", \"private, no-store, must-revalidate\");\n\t\tres.setHeader(\"WWW-Authenticate\", \"Basic realm=\\\"Access Admin Panel\\\", charset=\\\"UTF-8\\\"\");\n\t\tif (this.type == \"http\") res.setHeader(\"Warning\", \"199 adminPanel \\\"Not Secure!\\\"\");\n\t\tres.setHeader(\"Keep-Alive\", \"timeout=2, max=100\");\n\t\tres.setHeader(\"Connection\", \"close\");\n\t\tres.setHeader(\"Origin\", \"\");\n\t\tres.setHeader(\"Referer-Policy\", \"strict-origin-when-cross-origin\");\n\t\tres.setHeader(\"Tk\", \"N\");\n\t\tres.setHeader(\"Vary\", \"*\");\n\t\tres.setHeader(\"Server\", \"adminPanel\");\n\t\tres.setHeader(\"X-XSS-Protection\", \"1; mode=block\");\n\t\tres.setHeader(\"X-Frame-Options\", \"SAMEORIGIN\");\n\t\tres.setHeader(\"Accept-Ranges\", \"none\"); //bytes, for continue sending...\n\t\tres.setHeader(\"Content-Location\", uri.pathname);\n\t\tres.setHeader(\"Access-Control-Allow-Origin\", \"*\");\n\t\tres.setHeader(\"Timing-Allow-Origin\", \"*\");\n\t\tres.setHeader(\"Access-Control-Allow-Credentials\", \"true\");\n\t\tres.setHeader(\"Access-Control-Allow-Methods\", \"OPTIONS, GET, POST, PUT, DELETE, PATCH, TRACE, COPY, MOVE\");\n\t\tres.setHeader(\"Content-Disposition\", \"inline\"); //Content-Disposition: attachment; filename=\"filename.jpg\"\n\t\t\n\t\tdebug(req.method, uri.href, req.socket.remoteAddress, cookies[this.opts.session], Date());\n\t\t\n\t\tif (cookies[this.opts.session.trim()] == this.pass.trim()) {\n\t\t\ttry {\n\t\t\t\tswitch (req.method) {\n\t\t\t\t\tcase \"POST\":\n\t\t\t\t\t\tif (this.sess[req.socket.remoteAddress] && this.sess[req.socket.remoteAddress] - (new Date()).getTime() <= this.opts.delay) {\n\t\t\t\t\t\t\tres.writeHead(429, http.STATUS_CODES[429]);\n\t\t\t\t\t\t\tres.end(http.STATUS_CODES[429]);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.sess[req.socket.remoteAddress] = (new Date()).getTime();\n\t\t\t\t\t\t\tres.writeContinue();\n\t\t\t\t\t\t}\n\t\t\t\t\tcase \"GET\":\n\t\t\t\t\tcase \"TRACE\":\n\t\t\t\t\t\tres.writeHead(200, http.STATUS_CODES[200]);\n\t\t\t\t\t\tif ((await stats(this.opts.root + path.sep + uri.pathname.replace(new RegExp(\"^\" + this.opts.path + \"/?\", \"g\"), \"\"))).isFile()) {\n\t\t\t\t\t\t\tprox(this.opts.root + path.sep + uri.pathname.replace(new RegExp(\"^\" + this.opts.path + \"/?\", \"g\"), \"\"), req).pipe(res);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tprox(this.opts.root + path.sep + this.opts.dir, req).pipe(res);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"PUT\":\n\t\t\t\t\tcase \"PATCH\":\n\t\t\t\t\t\tlet pth = this.opts.root + path.sep + uri.pathname.replace(new RegExp(\"^\" + this.opts.path + \"/?\", \"g\"), \"\"),\n\t\t\t\t\t\tstr;\n\t\t\t\t\t\tfs.ensureFile(pth, err => {\n\t\t\t\t\t\t\tif (!err) {\n\t\t\t\t\t\t\t\treq.pipe(str = fs.createWriteStream(pth));\n\t\t\t\t\t\t\t\tstr.once(\"unpipe\", () => {\n\t\t\t\t\t\t\t\t\tres.writeHead(201, http.STATUS_CODES[201]);\n\t\t\t\t\t\t\t\t\tres.end(http.STATUS_CODES[204]);\n\t\t\t\t\t\t\t\t}).once(\"error\", err => {\n\t\t\t\t\t\t\t\t\tres.writeHead(409, http.STATUS_CODES[409]);\n\t\t\t\t\t\t\t\t\tres.end(http.STATUS_CODES[409]);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tres.writeHead(409, http.STATUS_CODES[409]);\n\t\t\t\t\t\t\t\tres.end(http.STATUS_CODES[409]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"COPY\":\n\t\t\t\t\t\tlet from = uri.pathname.replace(new RegExp(\"^\" + this.opts.path + \"/?\", \"g\"), \"\"),\n\t\t\t\t\t\tto = req.headers.destination;\n\t\t\t\t\t\tfs.copy(from, to, err => res.end(err || http.STATUS_CODES[204]));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"MOVE\":\n\t\t\t\t\t\tfrom = uri.pathname.replace(new RegExp(\"^\" + this.opts.path + \"/?\", \"g\"), \"\"),\n\t\t\t\t\t\tto = req.headers.destination;\n\t\t\t\t\t\tfs.move(from, to, err => res.end(err || http.STATUS_CODES[204]));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"OPTIONS\":\n\t\t\t\t\t\tres.writeHead(200, http.STATUS_CODES[200], {\n\t\t\t\t\t\t\t\"Allow\": \"OPTIONS, GET, POST, PUT, PATCH, TRACE, DELETE, COPY, MOVE\"\n\t\t\t\t\t\t});\n\t\t\t\t\t\tres.end(\"OPTIONS, GET, POST, PUT, PATCH, TRACE, DELETE, COPY, MOVE\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"DELETE\":\n\t\t\t\t\t\tres.writeHead(202, http.STATUS_CODES[202]);\n\t\t\t\t\t\tfs.remove(uri.pathname.replace(new RegExp(\"^\" + this.opts.path + \"/?\", \"g\"), \"\"), err => res.end(err || http.STATUS_CODES[204]));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tres.writeHead(501, http.STATUS_CODES[501]);\n\t\t\t\t\t\tres.end(http.STATUS_CODES[501]);\n\t\t\t\t}\n\t\t\t} catch(err) {\n\t\t\t\tres.end(this.ERRS.ENOENT.message);\n\t\t\t}\n\t\t} else {\n\t\t\tres.writeHead(401, http.STATUS_CODES[401], {\n\t\t\t\t\"Set-Cookie\": this.opts.session + \"=; HttpOnly; Expires=Session; SameSite=Strict; path=\" + this.opts.path + (this.type == \"https\" ? \"; Secure\" : \"\")\n\t\t\t});\n\t\t\treq.carriage.authErr = \"Login Required.\";\n\t\t\tprox(this.opts.root + path.sep + this.opts.index, req).pipe(res);\n\t\t}\n\t}\n\treturn this;\n} //listener\n\n/**\n * Convert a server to an Admin Panel.\n * @summary Inherit\n * @param {http.Server|https.Server} server - The server to bound\n * @param {Object} opts - Options\n * @return {http.Server|https.Server} server\n */\nfunction inherit(server, opts = opt) {\n\tlet typ = server instanceof http.Server ? http : https,\n\to = { };\n\tObject.assign(o, opt);\n\tObject.assign(o, opts);\n\to.port = server.address().port;\n\tserver.opts = o;\n\tserver.type = typ === http ? \"http\" : \"https\";\n\tserver.typ = typ;\n\tserver.ERRS = ERR;\n\tserver.sess = { };\n\tserver.crypt = crypto.createCipher(\"aes192\", server.opts.seed);\n\tserver.pass = server.crypt.update(server.opts.password, \"utf8\", \"hex\");\n\tserver.pass += server.crypt.final(\"hex\");\n\tserver.parseCookies = d.bind(parseCookies.bind(server));\n\tserver.readAll = d.bind(readAll.bind(server));\n\tserver.prox = d.bind(prox.bind(server));\n\tserver.start = d.bind(start.bind(server));\n\t/** @todo add logging */\n\t//server.log\n\tserver.inherit = d.bind(inherit.bind(server));\n\tserver.listener = d.bind(listener.bind(server));\n\tserver.bans = new Set();\n\ttry {\n\t\tserver.removeListener(\"request\", server.listener);\n\t} catch(err) { }\n\tserver.on(\"request\", server.listener); //PREPEND\n\tserver.socket = setup(new io(server, {\n\t\tpingTimeout: server.opts.pingTimeout,\n\t\tpingInterval: server.opts.pingInterval,\n\t\tserveClient: false,\n\t\tpath: server.opts.path + server.opts.ws\n\t}));\n\td.add(server.socket);\n\tif (server.opts.RunStats) server.runstats = new cc.RunStats(server.opts.RunStats.db, server.opts.RunStats.interval, server.opts.RunStats.opts);\n\tserver.reload = d.bind(function reload() {\n\t\tdebug(\"reload\", Date());\n\t\tserver.socket.of(\"/admin\").in(\"admin\").emit(\"reload\");\n\t}).bind(server);\n\tserver.kick = d.bind(function kick() {\n\t\tdebug(\"kick\", Date());\n\t\tserver.socket.of(\"/admin\").in(\"admin\").emit(\"kick\");\n\t\tserver.crypt = crypto.createCipher(\"aes192\", random(9999).toString());\n\t\tserver.pass = server.crypt.update(server.opts.password, \"utf8\", \"hex\");\n\t\tserver.pass += server.crypt.final(\"hex\");\n\t}).bind(server);\n\tserver.restart = d.bind(async function restart() {\n\t\tdebug(\"restart\", Date());\n\t\tserver.reload();\n\t\tawait server.stop();\n\t\treturn server = await server.start(server, server.opts, server.type);\n\t}).bind(server);\n\tserver.stop = d.bind(async function close() {\n\t\tdebug(\"stop\", Date());\n\t\treturn new Promise((rsl, rjc) => {\n\t\t\tserver.close(rsl);\n\t\t});\n\t}).bind(server);\n\tserver.kill = d.bind(function kill(c) {\n\t\tprocess.nextTick(() => process.exit(c));\n\t}).bind(server);\n\tserver.ondisconnect = d.bind(function disconnect(socket) {\n\t\t--server.socket.socks;\n\t}).bind(server);\n\tserver.onlist = d.bind(async function list(path = \"./\", cb = _void) {\n\t\tdebug(\"list\", path, Date());\n\t\tstats(path).then(d => {\n\t\t\tif (d.isFile()) {\n\t\t\t\tfs.readFile(path, (err, data) => cb(err && err.message ? err.message : null, data.toString(\"utf8\")));\n\t\t\t} else {\n\t\t\t\tfs.readdir(path, (err, data) => cb(err && err.message ? err.message : null, data));\n\t\t\t}\n\t\t}).catch(err => cb(err && err.message ? err.message : null));\n\t}).bind(server);\n\tserver.onsave = d.bind(async function save(file, data, cb = _void) {\n\t\tdebug(\"save\", file, Date());\n\t\tfs.ensureFile(file, err => {\n\t\t\tif (err) {\n\t\t\t\tcb(err);\n\t\t\t} else {\n\t\t\t\tfs.writeFile(file, data, err => cb(err && err.message ? err.message : null));\n\t\t\t}\n\t\t});\n\t}).bind(server);\n\tserver.onrename = d.bind(async function rename(file, to, cb = _void) {\n\t\tdebug(\"rename\", file, \"-->\", to, Date());\n\t\tfs.rename(file, to, err => cb(err && err.message ? err.message : null));\n\t}).bind(server);\n\tserver.onmove = d.bind(async function move(file, to, cb = _void) {\n\t\tdebug(\"move\", file, \"-->\", to, Date());\n\t\tfs.move(file, to, err => cb(err && err.message ? err.message : null));\n\t}).bind(server);\n\tserver.oncopy = d.bind(async function copy(file, to, cb = _void) {\n\t\tdebug(\"copy\", file, \"-->\", to, Date());\n\t\tfs.copy(file, to, err => cb(err && err.message ? err.message : null));\n\t}).bind(server);\n\tserver.ondelete = d.bind(async function del(file, cb = _void) {\n\t\tdebug(\"delete\", file, Date());\n\t\tfs.remove(file, err => cb(err && err.message ? err.message : null));\n\t}).bind(server);\n\tserver.onmake = d.bind(async function make(file, cb = _void) {\n\t\tdebug(\"make\", file, Date());\n\t\tif (/\\/.+\\..+$/.test(file)) {\n\t\t\tfs.ensureFile(file, err => cb(err && err.message ? err.message : null));\n\t\t} else {\n\t\t\tfs.ensureDir(file, err => cb(err && err.message ? err.message : null));\n\t\t}\n\t}).bind(server);\n\tserver.oneval = d.bind(function evaluate(code, cb = _void) {\n\t\tdebug(\"eval\", code, Date());\n\t\ttry {\n\t\t\tcb(null, util.inspect(eval(code)));\n\t\t} catch(err) {\n\t\t\tcb(util.inspect(err), null);\n\t\t}\n\t}).bind(server);\n\td.add(server.watcher = fs.watch(\"./\", {\n\t\trecursive: true,\n\t\tpersistent: false\n\t}, (evt, file) => {\n\t\tif (file.endsWith('.js') || file.endsWith('.css') || file.endsWith('.html') || file.endsWith('.htm'))\n\t\t\tserver.emit(\"needs\", \"reload\", {reason: {[evt]: file}}); //FIX SUB\n\t\tserver.socket.of(\"/admin\").in(\"admin\").emit(\"change\", evt, file);\n\t}));\n\tdebug(\"listening\", server.type, server.opts.port);\n\td.add(server);\n\treturn server;\n} //server\n\n/**\n * Create a new Admin Server.\n * @summary Start\n * @param {string|number|Object} prt - Port/Path/Server to bound\n * @param {string} [type=\"http\"] - http/https\n * @return {http.Server|https.Server} server\n * @async\n */\nasync function start(prt, opts = opt, type = opts.type || \"http\") {\n\tlet o = { };\n\tif (typeof prt == \"object\") {\n\t\topts = prt;\n\t\tprt = opts.port;\n\t}\n\tObject.assign(o, opt);\n\tObject.assign(o, opts);\n\tlet params = type == \"http\" ? [] : [o],\n\ttyp = type == \"http\" ? http : https,\n\tserver = typ.createServer(...params);\n\tawait (async () => {\n\t\treturn new Promise((rsl, rjc) => server.listen(prt || opts.port || opts.path, undefined, opts.max, () => {try {server.listen(opts.path, rsl)} catch(e) {}}));\n\t})();\n\treturn inherit(server, opts);\n} //start\n\n/**\n * Setup server sockets.\n * @summary Setup\n * @param {io.Server} socket - Socket.io server\n * @return {io.Server} socket\n */\nfunction setup(socket) {\n\tsocket.socks = 0;\n\tlet server = socket.httpServer;\n\tsocket.of(\"/admin\").on(\"connect\", sock => { //REL\n\t\tlet cookies = socket.httpServer.parseCookies(sock.request.headers.cookie || sock.handshake.headers.cookie);\n\t\tdebug(\"sock\", sock.request.socket.remoteAddress, cookies[socket.httpServer.opts.session], Date());\n\t\tif (cookies[socket.httpServer.opts.session] == socket.httpServer.pass) {\n\t\t\tsocket.socks++;\n\t\t\tsock.once(\"diconnect\", () => {\n\t\t\t\tsocket.httpServer.ondisconnect(sock);\n\t\t\t});\n\t\t\tif (socket.socks >= socket.httpServer.opts.max) {\n\t\t\t\tsock.broadcast.volatile.to(\"admin\").emit(\"kick\");\n\t\t\t}\n\t\t\tsock.join(\"admin\"); //REL\n\t\t\tsock.emit(\"OK\"); //\n\t\t\tsock.on(\"list\", socket.list = (path, cb) => {\n\t\t\t\tsocket.httpServer.onlist(path, cb);\n\t\t\t});\n\t\t\tsock.on(\"read\", socket.list);\n\t\t\tsock.on(\"save\", socket.save = (file, data, cb) => {\n\t\t\t\tsocket.httpServer.onsave(file, data, cb);\n\t\t\t});\n\t\t\tsock.on(\"rename\", socket.rename = (file, to, cb) => {\n\t\t\t\tsocket.httpServer.onrename(file, to, cb);\n\t\t\t});\n\t\t\tsock.on(\"delete\", socket.delete = (file, cb) => {\n\t\t\t\tsocket.httpServer.ondelete(file, cb);\n\t\t\t});\n\t\t\tsock.on(\"move\", socket.move = (file, to, cb) => {\n\t\t\t\tsocket.httpServer.onmove(file, to, cb);\n\t\t\t});\n\t\t\tsock.on(\"copy\", socket.copy = (file, to, cb) => {\n\t\t\t\tsocket.httpServer.oncopy(file, to, cb);\n\t\t\t});\n\t\t\tsock.once(\"kill\", socket.kill = socket.httpServer.kill);\n\t\t\tsock.once(\"stop\", socket.stop = socket.httpServer.stop);\n\t\t\tsock.once(\"restart\", socket.restart = socket.httpServer.restart);\n\t\t\tsock.on(\"make\", socket.make = (file, cb) => {\n\t\t\t\tsocket.httpServer.onmake(file, cb);\n\t\t\t});\n\t\t\tsock.on(\"eval\", socket.eval = (code, cb) => {\n\t\t\t\tsocket.httpServer.oneval(code, cb);\n\t\t\t});\n\t\t} else {\n\t\t\tsock.emit(\"kick\");\n\t\t}\n\t});\n\treturn socket;\n} //setup\n\nmodule.exports = { start, listener, parseCookies, inherit, setup, readAll, readPush };\n"]}