From a3e67ad4f4784c5d1dfa7d708fd518ef2f265ccc Mon Sep 17 00:00:00 2001 From: Justin Warkentin Date: Sat, 9 Apr 2022 18:06:22 -0700 Subject: [PATCH] Fix latest security notices --- dist/monkey.js | 2 +- dist/monkey.js.map | 2 +- dist/server.js | 2 +- dist/server.js.map | 2 +- package-lock.json | 483 ++++++++++++++++++++------------------------- package.json | 18 +- 6 files changed, 231 insertions(+), 278 deletions(-) diff --git a/dist/monkey.js b/dist/monkey.js index e45c16e..4859b7f 100644 --- a/dist/monkey.js +++ b/dist/monkey.js @@ -1,3 +1,3 @@ /*! For license information please see monkey.js.LICENSE.txt */ -!function(e,o){"object"==typeof exports&&"object"==typeof module?module.exports=o():"function"==typeof define&&define.amd?define([],o):"object"==typeof exports?exports.NodeMonkey=o():e.NodeMonkey=o()}(self,(function(){return(()=>{"use strict";var __webpack_modules__={"./src/client/convert-styles.js":(e,o,t)=>{t.r(o),t.d(o,{default:()=>i});var n=t("./src/client/utils.js"),r={"":"text-decoration: none","":"font-weight: normal","":"font-weight: bold","":"font-style: italic","":"text-decoration: underline","":"font-style: normal","":"color: ","":"color: white","":"color: grey","":"color: black","":"color: magenta","":"color: yellow","":"color: red","":"color: cyan","":"color: blue","":"color: green"},c=/(\u001b\[.*?m)+/g,_=/(?:^|[^%])%(s|d|i|o|f|c)/g;const i=function(e,o){e.length||e.push("");var t,i=1,l=[];n.default.isObject(e[0])&&(e.splice(1,0,e[0]),e[0]="%o");for(var a=e[0];t=_.exec(a);)"o"==t[1]&&(e[0]=e[0].replace(t[0],t[0].slice(0,t[0].length-2)+"%o")),i++;if(e.length>i)for(var u=i;u{t.r(o),t.d(o,{default:()=>r});var n=t("./src/lib/common-utils.js");const r=Object.assign({getClientHost:function(){for(var e=document.getElementsByTagName("script"),o=/\/monkey\.js/,t=null,n=e.length-1;n>=0;--n)if(o.test(e[n].src)){t=e[n];break}if(t){var r=document.createElement("a");return r.href=t.src,"".concat(r.protocol,"//").concat(r.host)}return"".concat(location.protocol,"//").concat(location.host)},addHeadScript:function(e){var o=document.createElement("script");return o.type="text/javascript",o.src=e,document.getElementsByTagName("head")[0].appendChild(o),o}},n.default)},"./src/lib/common-utils.js":(e,o,t)=>{t.r(o),t.d(o,{default:()=>r});var n=t("./node_modules/@babel/runtime/helpers/esm/typeof.js");const r={isObject:function(e){var o=(0,n.default)(e);return!!e&&("object"==o||"function"==o)},invert:function(e){var o={};for(var t in e)e.hasOwnProperty(t)&&(o[e[t]]=t);return o}}},"./src/lib/cycle.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/@babel/runtime/helpers/esm/typeof.js"),origJSON=__webpack_require__.g.JSON,JSON={};const __WEBPACK_DEFAULT_EXPORT__=JSON;"function"!=typeof JSON.decycle&&(JSON.decycle=function(e,o){var t=[],n=[];return function e(r,c){var _,i;return void 0!==o&&(r=o(r)),"object"!==(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__.default)(r)||null===r||r instanceof Boolean||r instanceof Date||r instanceof Number||r instanceof RegExp||r instanceof String?r:(_=t.indexOf(r))>=0?{$ref:n[_]}:(t.push(r),n.push(c),Array.isArray(r)?(i=[],r.forEach((function(o,t){i[t]=e(o,c+"["+t+"]")}))):(i={},Object.keys(r).forEach((function(o){i[o]=e(r[o],c+"["+JSON.stringify(o)+"]")}))),i)}(e,"$")}),"function"!=typeof JSON.retrocycle&&(JSON.retrocycle=function retrocycle($){var px=/^\$(?:\[(?:\d+|\"(?:[^\\\"\u0000-\u001f]|\\([\\\"\/bfnrt]|u[0-9a-zA-Z]{4}))*\")\])*$/;return function rez(value){value&&"object"===(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__.default)(value)&&(Array.isArray(value)?value.forEach((function(element,i){if("object"===(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__.default)(element)&&null!==element){var path=element.$ref;"string"==typeof path&&px.test(path)?value[i]=eval(path):rez(element)}})):Object.keys(value).forEach((function(name){var item=value[name];if("object"===(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__.default)(item)&&null!==item){var path=item.$ref;"string"==typeof path&&px.test(path)?value[name]=eval(path):rez(item)}})))}($),$}),JSON=origJSON},"./node_modules/@babel/runtime/helpers/esm/typeof.js":(e,o,t)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}t.r(o),t.d(o,{default:()=>n})}},__webpack_module_cache__={};function __webpack_require__(e){var o=__webpack_module_cache__[e];if(void 0!==o)return o.exports;var t=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e](t,t.exports,__webpack_require__),t.exports}__webpack_require__.d=(e,o)=>{for(var t in o)__webpack_require__.o(o,t)&&!__webpack_require__.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:o[t]})},__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),__webpack_require__.o=(e,o)=>Object.prototype.hasOwnProperty.call(e,o),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};return(()=>{__webpack_require__.r(__webpack_exports__);var e=__webpack_require__("./src/client/utils.js"),o=__webpack_require__("./src/lib/cycle.js"),t=__webpack_require__("./src/client/convert-styles.js"),n=!1,r=window.monkey={cmdId:0,runningCmd:{},connect:null,disconnect:null,init:function(){if(!n)return n=!0,new Promise((function(n,c){e.default.addHeadScript("".concat(e.default.getClientHost(),"/monkey.io-client/socket.io.js")).addEventListener("load",(function(){new Promise((function(e,o){var t=io("".concat(location.origin,"/nm"),{path:"/monkey.io"});t.on("connect",(function(){})),t.on("error",(function(e){console.error(e)})),t.on("connect_error",(function(e){console.error(e)})),t.on("reconnect_error",(function(e){console.error(e)})),t.on("connect_timeout",(function(){console.error(new Error("Socket.IO connection timed out"))})),e(t)})).then((function(e){var c=0,_=null,i=t.default,l={convertStyles:!0};r.client=e,r.connect=e.connect.bind(e),r.disconnect=function(){c=0,_=null,e.disconnect.call(e)};var a=function(){var o,t;c>2?r.disconnect():(_||(o=prompt("Node Monkey username"),t=prompt("Node Monkey password"),_={username:o,password:t}),++c,e.emit("auth",_))};e.on("cmdResponse",(function(e,o,t){if(r.runningCmd[e]){var n=r.runningCmd[e],c=n.resolve,_=n.reject;delete r.runningCmd[e],o?_(o):c(t)}})),e.on("settings",(function(e){Object.assign(l,e),l.convertStyles||(i=function(e,o){return e.concat([o])})})),e.on("auth",a),e.on("authResponse",(function(e,o){e||(_=null,console.warn("Auth failed:",o),a())})),e.on("console",(function(e){var t,n=(e=o.default.retrocycle(e)).callerInfo;n&&(t=" -- Called from "+n.file+":"+n.line+":"+n.column+(n.caller?"(function "+n.caller+")":"")),"dir"===e.method?(console.dir(e.args[0]),t&&console.log.apply(console,i(["^^^"],t))):console[e.method].apply(console,i(e.args,t))})),e.on("prompt",(function(o,t,n){n||(n={}),e.emit("promptResponse",o,prompt(t))})),n()})).catch(c)}))}));r.connect()},cmd:function(e,o){if(r.client){var t=new Promise((function(o,t){var n=r.cmdId++;r.client.emit("cmd",n,e),r.runningCmd[n]={resolve:o,reject:t}}));return o||t.then((function(e){return null!==e&&console.log(e)})).catch((function(e){null!==e&&(console.error(e),alert(e.message))})),t}console.error("Must be connected to a server to execute a command")}}})(),__webpack_exports__=__webpack_exports__.default,__webpack_exports__})()})); +!function(e,o){"object"==typeof exports&&"object"==typeof module?module.exports=o():"function"==typeof define&&define.amd?define([],o):"object"==typeof exports?exports.NodeMonkey=o():e.NodeMonkey=o()}(self,(()=>(()=>{"use strict";var __webpack_modules__={"./src/client/convert-styles.js":(e,o,t)=>{t.r(o),t.d(o,{default:()=>l});var n=t("./src/client/utils.js"),r={"":"text-decoration: none","":"font-weight: normal","":"font-weight: bold","":"font-style: italic","":"text-decoration: underline","":"font-style: normal","":"color: ","":"color: white","":"color: grey","":"color: black","":"color: magenta","":"color: yellow","":"color: red","":"color: cyan","":"color: blue","":"color: green"},c=/(\u001b\[.*?m)+/g,_=/(?:^|[^%])%(s|d|i|o|f|c)/g;const l=function(e,o){e.length||e.push("");var t,l=1,i=[];n.default.isObject(e[0])&&(e.splice(1,0,e[0]),e[0]="%o");for(var a=e[0];t=_.exec(a);)"o"==t[1]&&(e[0]=e[0].replace(t[0],t[0].slice(0,t[0].length-2)+"%o")),l++;if(e.length>l)for(var u=l;u{t.r(o),t.d(o,{default:()=>r});var n=t("./src/lib/common-utils.js");const r=Object.assign({getClientHost:function(){for(var e=document.getElementsByTagName("script"),o=/\/monkey\.js/,t=null,n=e.length-1;n>=0;--n)if(o.test(e[n].src)){t=e[n];break}if(t){var r=document.createElement("a");return r.href=t.src,"".concat(r.protocol,"//").concat(r.host)}return"".concat(location.protocol,"//").concat(location.host)},addHeadScript:function(e){var o=document.createElement("script");return o.type="text/javascript",o.src=e,document.getElementsByTagName("head")[0].appendChild(o),o}},n.default)},"./src/lib/common-utils.js":(e,o,t)=>{t.r(o),t.d(o,{default:()=>r});var n=t("./node_modules/@babel/runtime/helpers/esm/typeof.js");const r={isObject:function(e){var o=(0,n.default)(e);return!!e&&("object"==o||"function"==o)},invert:function(e){var o={};for(var t in e)e.hasOwnProperty(t)&&(o[e[t]]=t);return o}}},"./src/lib/cycle.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/@babel/runtime/helpers/esm/typeof.js"),origJSON=__webpack_require__.g.JSON,JSON={};const __WEBPACK_DEFAULT_EXPORT__=JSON;"function"!=typeof JSON.decycle&&(JSON.decycle=function(e,o){var t=[],n=[];return function e(r,c){var _,l;return void 0!==o&&(r=o(r)),"object"!==(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__.default)(r)||null===r||r instanceof Boolean||r instanceof Date||r instanceof Number||r instanceof RegExp||r instanceof String?r:(_=t.indexOf(r))>=0?{$ref:n[_]}:(t.push(r),n.push(c),Array.isArray(r)?(l=[],r.forEach((function(o,t){l[t]=e(o,c+"["+t+"]")}))):(l={},Object.keys(r).forEach((function(o){l[o]=e(r[o],c+"["+JSON.stringify(o)+"]")}))),l)}(e,"$")}),"function"!=typeof JSON.retrocycle&&(JSON.retrocycle=function retrocycle($){var px=/^\$(?:\[(?:\d+|\"(?:[^\\\"\u0000-\u001f]|\\([\\\"\/bfnrt]|u[0-9a-zA-Z]{4}))*\")\])*$/;return function rez(value){value&&"object"===(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__.default)(value)&&(Array.isArray(value)?value.forEach((function(element,i){if("object"===(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__.default)(element)&&null!==element){var path=element.$ref;"string"==typeof path&&px.test(path)?value[i]=eval(path):rez(element)}})):Object.keys(value).forEach((function(name){var item=value[name];if("object"===(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__.default)(item)&&null!==item){var path=item.$ref;"string"==typeof path&&px.test(path)?value[name]=eval(path):rez(item)}})))}($),$}),JSON=origJSON},"./node_modules/@babel/runtime/helpers/esm/typeof.js":(e,o,t)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}t.r(o),t.d(o,{default:()=>n})}},__webpack_module_cache__={};function __webpack_require__(e){var o=__webpack_module_cache__[e];if(void 0!==o)return o.exports;var t=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e](t,t.exports,__webpack_require__),t.exports}__webpack_require__.d=(e,o)=>{for(var t in o)__webpack_require__.o(o,t)&&!__webpack_require__.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:o[t]})},__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),__webpack_require__.o=(e,o)=>Object.prototype.hasOwnProperty.call(e,o),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};return(()=>{__webpack_require__.r(__webpack_exports__);var e=__webpack_require__("./src/client/utils.js"),o=__webpack_require__("./src/lib/cycle.js"),t=__webpack_require__("./src/client/convert-styles.js"),n=!1,r=window.monkey={cmdId:0,runningCmd:{},connect:null,disconnect:null,init:function(){if(!n)return n=!0,new Promise((function(n,c){e.default.addHeadScript("".concat(e.default.getClientHost(),"/monkey.io-client/socket.io.js")).addEventListener("load",(function(){new Promise((function(e,o){var t=io("".concat(location.origin,"/nm"),{path:"/monkey.io"});t.on("connect",(function(){})),t.on("error",(function(e){console.error(e)})),t.on("connect_error",(function(e){console.error(e)})),t.on("reconnect_error",(function(e){console.error(e)})),t.on("connect_timeout",(function(){console.error(new Error("Socket.IO connection timed out"))})),e(t)})).then((function(e){var c=0,_=null,l=t.default,i={convertStyles:!0};r.client=e,r.connect=e.connect.bind(e),r.disconnect=function(){c=0,_=null,e.disconnect.call(e)};var a=function(){var o,t;c>2?r.disconnect():(_||(o=prompt("Node Monkey username"),t=prompt("Node Monkey password"),_={username:o,password:t}),++c,e.emit("auth",_))};e.on("cmdResponse",(function(e,o,t){if(r.runningCmd[e]){var n=r.runningCmd[e],c=n.resolve,_=n.reject;delete r.runningCmd[e],o?_(o):c(t)}})),e.on("settings",(function(e){Object.assign(i,e),i.convertStyles||(l=function(e,o){return e.concat([o])})})),e.on("auth",a),e.on("authResponse",(function(e,o){e||(_=null,console.warn("Auth failed:",o),a())})),e.on("console",(function(e){var t,n=(e=o.default.retrocycle(e)).callerInfo;n&&(t=" -- Called from "+n.file+":"+n.line+":"+n.column+(n.caller?"(function "+n.caller+")":"")),"dir"===e.method?(console.dir(e.args[0]),t&&console.log.apply(console,l(["^^^"],t))):console[e.method].apply(console,l(e.args,t))})),e.on("prompt",(function(o,t,n){n||(n={}),e.emit("promptResponse",o,prompt(t))})),n()})).catch(c)}))}));r.connect()},cmd:function(e,o){if(r.client){var t=new Promise((function(o,t){var n=r.cmdId++;r.client.emit("cmd",n,e),r.runningCmd[n]={resolve:o,reject:t}}));return o||t.then((function(e){return null!==e&&console.log(e)})).catch((function(e){null!==e&&(console.error(e),alert(e.message))})),t}console.error("Must be connected to a server to execute a command")}}})(),__webpack_exports__=__webpack_exports__.default,__webpack_exports__})())); //# sourceMappingURL=monkey.js.map \ No newline at end of file diff --git a/dist/monkey.js.map b/dist/monkey.js.map index b5e9a4b..7377149 100644 --- a/dist/monkey.js.map +++ b/dist/monkey.js.map @@ -1 +1 @@ -{"version":3,"file":"monkey.js","mappings":"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","sources":["webpack://NodeMonkey/webpack/universalModuleDefinition","webpack://NodeMonkey/./src/client/convert-styles.js","webpack://NodeMonkey/./src/client/utils.js","webpack://NodeMonkey/./src/lib/common-utils.js","webpack://NodeMonkey/./src/lib/cycle.js","webpack://NodeMonkey/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://NodeMonkey/webpack/bootstrap","webpack://NodeMonkey/webpack/runtime/define property getters","webpack://NodeMonkey/webpack/runtime/global","webpack://NodeMonkey/webpack/runtime/hasOwnProperty shorthand","webpack://NodeMonkey/webpack/runtime/make namespace object","webpack://NodeMonkey/./src/client/index.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"NodeMonkey\"] = factory();\n\telse\n\t\troot[\"NodeMonkey\"] = factory();\n})(self, function() {\nreturn ","import utils from \"./utils\"\n\nlet styleMap = {\n // Styles\n \"\\u001b[24m\": \"text-decoration: none\",\n \"\\u001b[22m\": \"font-weight: normal\",\n \"\\u001b[1m\": \"font-weight: bold\",\n \"\\u001b[3m\": \"font-style: italic\",\n \"\\u001b[4m\": \"text-decoration: underline\",\n \"\\u001b[23m\": \"font-style: normal\",\n\n // Colors\n \"\\u001b[39m\": \"color: \",\n \"\\u001b[37m\": \"color: white\",\n \"\\u001b[90m\": \"color: grey\",\n \"\\u001b[30m\": \"color: black\",\n \"\\u001b[35m\": \"color: magenta\",\n \"\\u001b[33m\": \"color: yellow\",\n \"\\u001b[31m\": \"color: red\",\n \"\\u001b[36m\": \"color: cyan\",\n \"\\u001b[34m\": \"color: blue\",\n \"\\u001b[32m\": \"color: green\",\n },\n // Styles for the caller data.\n traceStyle = \"color: grey; font-family: Helvetica, Arial, sans-serif\",\n // RegExp pattern for styles\n stylePattern = /(\\u001b\\[.*?m)+/g,\n // RegExp pattern for format specifiers (like '%o', '%s')\n formatPattern = /(?:^|[^%])%(s|d|i|o|f|c)/g\n\nfunction stylize(data, cdata) {\n if (!data.length) {\n data.push(\"\")\n }\n\n // If `data` has multiple arguments, we are going to merge everything into\n // the first argument, so style-specifiers can be used throughout all arguments.\n\n let cap,\n mergeArgsStart = 1,\n formatSpecifiers = []\n\n // If the first argument is an object, we need to replace it with `%o`\n // (always preemptively reset the color)\n if (utils.isObject(data[0])) {\n data.splice(1, 0, data[0])\n data[0] = \"%o\"\n }\n\n // Count all format specifiers in the first argument to see from where we need to\n // start merging\n let txt = data[0]\n while ((cap = formatPattern.exec(txt))) {\n if (cap[1] == \"o\") {\n // Insert color resetter\n data[0] = data[0].replace(cap[0], cap[0].slice(0, cap[0].length - 2) + \"\\u001b[39m%o\")\n }\n mergeArgsStart++\n }\n\n // Start merging...\n if (data.length > mergeArgsStart) {\n for (let i = mergeArgsStart; i < data.length; i++) {\n let arg = data[i],\n specifier\n\n if (typeof arg == \"string\") {\n // Since this argument is a string and may be styled as well, put it right in...\n specifier = \" \" + arg\n // ...and remove the argument...\n data.splice(i, 1)\n // ...and adapt the iterator.\n i--\n } else {\n // Otherwise use the '%o'-specifier (preemptively reset color)\n specifier = \" \\u001b[39m%o\"\n }\n\n data[0] += specifier\n }\n }\n\n // Now let's collect all format specifiers and their positions as well,\n // so we know where to put our style-specifiers.\n while ((cap = formatPattern.exec(data[0]))) {\n formatSpecifiers.push(cap)\n }\n\n let added = 0\n txt = data[0]\n\n // Let's do some styling...\n while ((cap = stylePattern.exec(txt))) {\n let styles = [],\n capsplit = cap[0].split(\"m\")\n\n // Get the needed styles\n for (let j = 0; j < capsplit.length; j++) {\n let s\n if ((s = styleMap[capsplit[j] + \"m\"])) styles.push(s)\n }\n\n // Check if the style must be added before other specifiers\n if (styles.length) {\n let k\n for (k = 0; k < formatSpecifiers.length; k++) {\n let sp = formatSpecifiers[k]\n if (cap[\"index\"] < sp[\"index\"]) {\n break\n }\n }\n\n // Add them at the right position\n let pos = k + 1 + added\n data.splice(pos, 0, styles.join(\";\"))\n added++\n\n // Replace original with `%c`-specifier\n data[0] = data[0].replace(cap[0], \"%c\")\n }\n }\n // ...done!\n\n // At last, add caller data, if present.\n if (cdata) {\n data[0] += \"%c\" + cdata\n data.push(traceStyle)\n }\n\n return data\n}\n\nexport default stylize\n","import commonUtils from \"../lib/common-utils\"\n\nexport default Object.assign(\n {\n getClientHost() {\n let scripts = document.getElementsByTagName(\"script\"),\n scriptRe = /\\/monkey\\.js/,\n script = null\n\n // Loop in reverse since the correct script will be the last one except when the `async` attribute is set on the script\n for (let i = scripts.length - 1; i >= 0; --i) {\n if (scriptRe.test(scripts[i].src)) {\n script = scripts[i]\n break\n }\n }\n\n if (script) {\n let parser = document.createElement(\"a\")\n parser.href = script.src\n\n return `${parser.protocol}//${parser.host}`\n }\n\n return `${location.protocol}//${location.host}`\n },\n\n addHeadScript(src) {\n let script = document.createElement(\"script\")\n script.type = \"text/javascript\"\n script.src = src\n document.getElementsByTagName(\"head\")[0].appendChild(script)\n\n return script\n },\n },\n commonUtils,\n)\n","export default {\n isObject(value) {\n let type = typeof value\n return !!value && (type == \"object\" || type == \"function\")\n },\n\n invert(obj) {\n let inverted = {}\n for (let k in obj) {\n if (obj.hasOwnProperty(k)) {\n inverted[obj[k]] = k\n }\n }\n\n return inverted\n },\n}\n","/*\n cycle.js\n 2016-05-01\n\n Public Domain.\n\n NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n\n This code should be minified before deployment.\n See http://javascript.crockford.com/jsmin.html\n\n USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n NOT CONTROL.\n*/\n\n/*jslint eval, for */\n\n/*property\n $ref, decycle, forEach, isArray, keys, length, push, retrocycle, stringify,\n test\n*/\n\nlet origJSON = global.JSON,\n JSON = {}\nexport default JSON\n\nif (typeof JSON.decycle !== \"function\") {\n JSON.decycle = function decycle(object, replacer) {\n \"use strict\"\n\n // Make a deep copy of an object or array, assuring that there is at most\n // one instance of each object or array in the resulting structure. The\n // duplicate references (which might be forming cycles) are replaced with\n // an object of the form\n\n // {\"$ref\": PATH}\n\n // where the PATH is a JSONPath string that locates the first occurance.\n\n // So,\n\n // var a = [];\n // a[0] = a;\n // return JSON.stringify(JSON.decycle(a));\n\n // produces the string '[{\"$ref\":\"$\"}]'.\n\n // If a replacer function is provided, then it will be called for each value.\n // A replacer function receives a value and returns a replacement value.\n\n // JSONPath is used to locate the unique object. $ indicates the top level of\n // the object or array. [NUMBER] or [STRING] indicates a child element or\n // property.\n\n var objects = [] // Keep a reference to each unique object or array\n var paths = [] // Keep the path to each unique object or array\n\n return (function derez(value, path) {\n // The derez function recurses through the object, producing the deep copy.\n\n var i // The loop counter\n var nu // The new object or array\n\n // If a replacer function was provided, then call it to get a replacement value.\n\n if (replacer !== undefined) {\n value = replacer(value)\n }\n\n // typeof null === \"object\", so go on if this value is really an object but not\n // one of the weird builtin objects.\n\n if (\n typeof value === \"object\" &&\n value !== null &&\n !(value instanceof Boolean) &&\n !(value instanceof Date) &&\n !(value instanceof Number) &&\n !(value instanceof RegExp) &&\n !(value instanceof String)\n ) {\n // If the value is an object or array, look to see if we have already\n // encountered it. If so, return a {\"$ref\":PATH} object. This is a hard\n // linear search that will get slower as the number of unique objects grows.\n // Someday, this should be replaced with an ES6 WeakMap.\n\n i = objects.indexOf(value)\n if (i >= 0) {\n return { $ref: paths[i] }\n }\n\n // Otherwise, accumulate the unique value and its path.\n\n objects.push(value)\n paths.push(path)\n\n // If it is an array, replicate the array.\n\n if (Array.isArray(value)) {\n nu = []\n value.forEach(function (element, i) {\n nu[i] = derez(element, path + \"[\" + i + \"]\")\n })\n } else {\n // If it is an object, replicate the object.\n\n nu = {}\n Object.keys(value).forEach(function (name) {\n nu[name] = derez(value[name], path + \"[\" + JSON.stringify(name) + \"]\")\n })\n }\n return nu\n }\n return value\n })(object, \"$\")\n }\n}\n\nif (typeof JSON.retrocycle !== \"function\") {\n JSON.retrocycle = function retrocycle($) {\n \"use strict\"\n\n // Restore an object that was reduced by decycle. Members whose values are\n // objects of the form\n // {$ref: PATH}\n // are replaced with references to the value found by the PATH. This will\n // restore cycles. The object will be mutated.\n\n // The eval function is used to locate the values described by a PATH. The\n // root object is kept in a $ variable. A regular expression is used to\n // assure that the PATH is extremely well formed. The regexp contains nested\n // * quantifiers. That has been known to have extremely bad performance\n // problems on some browsers for very long strings. A PATH is expected to be\n // reasonably short. A PATH is allowed to belong to a very restricted subset of\n // Goessner's JSONPath.\n\n // So,\n // var s = '[{\"$ref\":\"$\"}]';\n // return JSON.retrocycle(JSON.parse(s));\n // produces an array containing a single element which is the array itself.\n\n var px = /^\\$(?:\\[(?:\\d+|\\\"(?:[^\\\\\\\"\\u0000-\\u001f]|\\\\([\\\\\\\"\\/bfnrt]|u[0-9a-zA-Z]{4}))*\\\")\\])*$/\n\n ;(function rez(value) {\n // The rez function walks recursively through the object looking for $ref\n // properties. When it finds one that has a value that is a path, then it\n // replaces the $ref object with a reference to the value that is found by\n // the path.\n\n if (value && typeof value === \"object\") {\n if (Array.isArray(value)) {\n value.forEach(function (element, i) {\n if (typeof element === \"object\" && element !== null) {\n var path = element.$ref\n if (typeof path === \"string\" && px.test(path)) {\n value[i] = eval(path)\n } else {\n rez(element)\n }\n }\n })\n } else {\n Object.keys(value).forEach(function (name) {\n var item = value[name]\n if (typeof item === \"object\" && item !== null) {\n var path = item.$ref\n if (typeof path === \"string\" && px.test(path)) {\n value[name] = eval(path)\n } else {\n rez(item)\n }\n }\n })\n }\n }\n })($)\n return $\n }\n}\n\nJSON = origJSON\n","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import utils from \"./utils\"\nimport cycle from \"../lib/cycle\"\nimport convertStyles from \"./convert-styles\"\n\nlet initialized = false\nconst monkey = (window.monkey = {\n cmdId: 0,\n runningCmd: {},\n connect: null,\n disconnect: null,\n\n init() {\n if (initialized) {\n monkey.connect()\n return\n }\n initialized = true\n\n return new Promise((resolve, reject) => {\n utils.addHeadScript(`${utils.getClientHost()}/monkey.io-client/socket.io.js`).addEventListener(\"load\", () => {\n initClient()\n .then((client) => {\n let authAttempts = 0,\n creds = null,\n stylize = convertStyles,\n settings = {\n convertStyles: true,\n }\n\n monkey.client = client\n monkey.connect = client.connect.bind(client)\n monkey.disconnect = () => {\n authAttempts = 0\n creds = null\n client.disconnect.call(client)\n }\n\n let doAuth = () => {\n if (authAttempts > 2) {\n monkey.disconnect()\n return\n }\n\n let username, password\n if (!creds) {\n username = prompt(\"Node Monkey username\")\n password = prompt(\"Node Monkey password\")\n creds = { username, password }\n }\n\n ++authAttempts\n client.emit(\"auth\", creds)\n }\n\n client.on(\"cmdResponse\", (cmdId, error, output) => {\n if (monkey.runningCmd[cmdId]) {\n let { resolve, reject } = monkey.runningCmd[cmdId]\n delete monkey.runningCmd[cmdId]\n\n if (error) {\n reject(error)\n } else {\n resolve(output)\n }\n }\n })\n\n client.on(\"settings\", (data) => {\n Object.assign(settings, data)\n\n if (!settings.convertStyles) {\n stylize = function (args, trace) {\n return args.concat([trace])\n }\n }\n })\n\n client.on(\"auth\", doAuth)\n\n client.on(\"authResponse\", (result, err) => {\n if (!result) {\n creds = null\n console.warn(\"Auth failed:\", err)\n doAuth()\n }\n })\n\n client.on(\"console\", (data) => {\n data = cycle.retrocycle(data)\n\n let trace,\n cdata = data.callerInfo\n if (cdata) {\n trace =\n \" -- Called from \" +\n cdata.file +\n \":\" +\n cdata.line +\n \":\" +\n cdata.column +\n (cdata.caller ? \"(function \" + cdata.caller + \")\" : \"\")\n }\n if (data.method === \"dir\") {\n console.dir(data.args[0])\n if (trace) {\n console.log.apply(console, stylize([\"^^^\"], trace))\n }\n } else {\n console[data.method].apply(console, stylize(data.args, trace))\n }\n })\n\n client.on(\"prompt\", (promptId, promptTxt, opts) => {\n opts || (opts = {})\n\n client.emit(\"promptResponse\", promptId, prompt(promptTxt))\n })\n\n resolve()\n })\n .catch(reject)\n })\n })\n },\n\n cmd(command, noOutput) {\n if (!monkey.client) {\n console.error(`Must be connected to a server to execute a command`)\n return\n }\n\n let p = new Promise((resolve, reject) => {\n let cmdId = monkey.cmdId++\n monkey.client.emit(\"cmd\", cmdId, command)\n monkey.runningCmd[cmdId] = { resolve, reject }\n })\n\n if (!noOutput) {\n p.then((output) => output !== null && console.log(output)).catch((error) => {\n if (error !== null) {\n console.error(error)\n alert(error.message)\n }\n })\n }\n\n return p\n },\n})\n\nfunction initClient() {\n return new Promise((resolve, reject) => {\n let client = io(`${location.origin}/nm`, {\n path: \"/monkey.io\"\n })\n\n client.on(\"connect\", function () {})\n\n client.on(\"error\", (err) => {\n console.error(err)\n })\n\n client.on(\"connect_error\", (err) => {\n console.error(err)\n })\n\n client.on(\"reconnect_error\", (err) => {\n console.error(err)\n })\n\n client.on(\"connect_timeout\", () => {\n console.error(new Error(\"Socket.IO connection timed out\"))\n })\n\n resolve(client)\n })\n}\n"],"names":["root","factory","exports","module","define","amd","self","styleMap","stylePattern","formatPattern","data","cdata","length","push","cap","mergeArgsStart","formatSpecifiers","utils","splice","txt","exec","replace","slice","i","arg","specifier","added","styles","capsplit","split","j","s","k","sp","pos","join","Object","assign","getClientHost","scripts","document","getElementsByTagName","scriptRe","script","test","src","parser","createElement","href","protocol","host","location","addHeadScript","type","appendChild","commonUtils","isObject","value","invert","obj","inverted","hasOwnProperty","origJSON","global","JSON","decycle","object","replacer","objects","paths","derez","path","nu","undefined","Boolean","Date","Number","RegExp","String","indexOf","$ref","Array","isArray","forEach","element","keys","name","stringify","retrocycle","$","px","rez","eval","item","_typeof","Symbol","iterator","constructor","prototype","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","d","definition","key","o","defineProperty","enumerable","get","g","globalThis","this","Function","e","window","prop","call","r","toStringTag","initialized","monkey","cmdId","runningCmd","connect","disconnect","init","Promise","resolve","reject","addEventListener","client","io","origin","on","err","console","error","Error","then","authAttempts","creds","stylize","convertStyles","settings","bind","doAuth","username","password","prompt","emit","output","args","trace","concat","result","warn","cycle","callerInfo","file","line","column","caller","method","dir","log","apply","promptId","promptTxt","opts","catch","cmd","command","noOutput","p","alert","message"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"monkey.js","mappings":"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","sources":["webpack://NodeMonkey/webpack/universalModuleDefinition","webpack://NodeMonkey/./src/client/convert-styles.js","webpack://NodeMonkey/./src/client/utils.js","webpack://NodeMonkey/./src/lib/common-utils.js","webpack://NodeMonkey/./src/lib/cycle.js","webpack://NodeMonkey/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://NodeMonkey/webpack/bootstrap","webpack://NodeMonkey/webpack/runtime/define property getters","webpack://NodeMonkey/webpack/runtime/global","webpack://NodeMonkey/webpack/runtime/hasOwnProperty shorthand","webpack://NodeMonkey/webpack/runtime/make namespace object","webpack://NodeMonkey/./src/client/index.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"NodeMonkey\"] = factory();\n\telse\n\t\troot[\"NodeMonkey\"] = factory();\n})(self, () => {\nreturn ","import utils from \"./utils\"\n\nlet styleMap = {\n // Styles\n \"\\u001b[24m\": \"text-decoration: none\",\n \"\\u001b[22m\": \"font-weight: normal\",\n \"\\u001b[1m\": \"font-weight: bold\",\n \"\\u001b[3m\": \"font-style: italic\",\n \"\\u001b[4m\": \"text-decoration: underline\",\n \"\\u001b[23m\": \"font-style: normal\",\n\n // Colors\n \"\\u001b[39m\": \"color: \",\n \"\\u001b[37m\": \"color: white\",\n \"\\u001b[90m\": \"color: grey\",\n \"\\u001b[30m\": \"color: black\",\n \"\\u001b[35m\": \"color: magenta\",\n \"\\u001b[33m\": \"color: yellow\",\n \"\\u001b[31m\": \"color: red\",\n \"\\u001b[36m\": \"color: cyan\",\n \"\\u001b[34m\": \"color: blue\",\n \"\\u001b[32m\": \"color: green\",\n },\n // Styles for the caller data.\n traceStyle = \"color: grey; font-family: Helvetica, Arial, sans-serif\",\n // RegExp pattern for styles\n stylePattern = /(\\u001b\\[.*?m)+/g,\n // RegExp pattern for format specifiers (like '%o', '%s')\n formatPattern = /(?:^|[^%])%(s|d|i|o|f|c)/g\n\nfunction stylize(data, cdata) {\n if (!data.length) {\n data.push(\"\")\n }\n\n // If `data` has multiple arguments, we are going to merge everything into\n // the first argument, so style-specifiers can be used throughout all arguments.\n\n let cap,\n mergeArgsStart = 1,\n formatSpecifiers = []\n\n // If the first argument is an object, we need to replace it with `%o`\n // (always preemptively reset the color)\n if (utils.isObject(data[0])) {\n data.splice(1, 0, data[0])\n data[0] = \"%o\"\n }\n\n // Count all format specifiers in the first argument to see from where we need to\n // start merging\n let txt = data[0]\n while ((cap = formatPattern.exec(txt))) {\n if (cap[1] == \"o\") {\n // Insert color resetter\n data[0] = data[0].replace(cap[0], cap[0].slice(0, cap[0].length - 2) + \"\\u001b[39m%o\")\n }\n mergeArgsStart++\n }\n\n // Start merging...\n if (data.length > mergeArgsStart) {\n for (let i = mergeArgsStart; i < data.length; i++) {\n let arg = data[i],\n specifier\n\n if (typeof arg == \"string\") {\n // Since this argument is a string and may be styled as well, put it right in...\n specifier = \" \" + arg\n // ...and remove the argument...\n data.splice(i, 1)\n // ...and adapt the iterator.\n i--\n } else {\n // Otherwise use the '%o'-specifier (preemptively reset color)\n specifier = \" \\u001b[39m%o\"\n }\n\n data[0] += specifier\n }\n }\n\n // Now let's collect all format specifiers and their positions as well,\n // so we know where to put our style-specifiers.\n while ((cap = formatPattern.exec(data[0]))) {\n formatSpecifiers.push(cap)\n }\n\n let added = 0\n txt = data[0]\n\n // Let's do some styling...\n while ((cap = stylePattern.exec(txt))) {\n let styles = [],\n capsplit = cap[0].split(\"m\")\n\n // Get the needed styles\n for (let j = 0; j < capsplit.length; j++) {\n let s\n if ((s = styleMap[capsplit[j] + \"m\"])) styles.push(s)\n }\n\n // Check if the style must be added before other specifiers\n if (styles.length) {\n let k\n for (k = 0; k < formatSpecifiers.length; k++) {\n let sp = formatSpecifiers[k]\n if (cap[\"index\"] < sp[\"index\"]) {\n break\n }\n }\n\n // Add them at the right position\n let pos = k + 1 + added\n data.splice(pos, 0, styles.join(\";\"))\n added++\n\n // Replace original with `%c`-specifier\n data[0] = data[0].replace(cap[0], \"%c\")\n }\n }\n // ...done!\n\n // At last, add caller data, if present.\n if (cdata) {\n data[0] += \"%c\" + cdata\n data.push(traceStyle)\n }\n\n return data\n}\n\nexport default stylize\n","import commonUtils from \"../lib/common-utils\"\n\nexport default Object.assign(\n {\n getClientHost() {\n let scripts = document.getElementsByTagName(\"script\"),\n scriptRe = /\\/monkey\\.js/,\n script = null\n\n // Loop in reverse since the correct script will be the last one except when the `async` attribute is set on the script\n for (let i = scripts.length - 1; i >= 0; --i) {\n if (scriptRe.test(scripts[i].src)) {\n script = scripts[i]\n break\n }\n }\n\n if (script) {\n let parser = document.createElement(\"a\")\n parser.href = script.src\n\n return `${parser.protocol}//${parser.host}`\n }\n\n return `${location.protocol}//${location.host}`\n },\n\n addHeadScript(src) {\n let script = document.createElement(\"script\")\n script.type = \"text/javascript\"\n script.src = src\n document.getElementsByTagName(\"head\")[0].appendChild(script)\n\n return script\n },\n },\n commonUtils,\n)\n","export default {\n isObject(value) {\n let type = typeof value\n return !!value && (type == \"object\" || type == \"function\")\n },\n\n invert(obj) {\n let inverted = {}\n for (let k in obj) {\n if (obj.hasOwnProperty(k)) {\n inverted[obj[k]] = k\n }\n }\n\n return inverted\n },\n}\n","/*\n cycle.js\n 2016-05-01\n\n Public Domain.\n\n NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n\n This code should be minified before deployment.\n See http://javascript.crockford.com/jsmin.html\n\n USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n NOT CONTROL.\n*/\n\n/*jslint eval, for */\n\n/*property\n $ref, decycle, forEach, isArray, keys, length, push, retrocycle, stringify,\n test\n*/\n\nlet origJSON = global.JSON,\n JSON = {}\nexport default JSON\n\nif (typeof JSON.decycle !== \"function\") {\n JSON.decycle = function decycle(object, replacer) {\n \"use strict\"\n\n // Make a deep copy of an object or array, assuring that there is at most\n // one instance of each object or array in the resulting structure. The\n // duplicate references (which might be forming cycles) are replaced with\n // an object of the form\n\n // {\"$ref\": PATH}\n\n // where the PATH is a JSONPath string that locates the first occurance.\n\n // So,\n\n // var a = [];\n // a[0] = a;\n // return JSON.stringify(JSON.decycle(a));\n\n // produces the string '[{\"$ref\":\"$\"}]'.\n\n // If a replacer function is provided, then it will be called for each value.\n // A replacer function receives a value and returns a replacement value.\n\n // JSONPath is used to locate the unique object. $ indicates the top level of\n // the object or array. [NUMBER] or [STRING] indicates a child element or\n // property.\n\n var objects = [] // Keep a reference to each unique object or array\n var paths = [] // Keep the path to each unique object or array\n\n return (function derez(value, path) {\n // The derez function recurses through the object, producing the deep copy.\n\n var i // The loop counter\n var nu // The new object or array\n\n // If a replacer function was provided, then call it to get a replacement value.\n\n if (replacer !== undefined) {\n value = replacer(value)\n }\n\n // typeof null === \"object\", so go on if this value is really an object but not\n // one of the weird builtin objects.\n\n if (\n typeof value === \"object\" &&\n value !== null &&\n !(value instanceof Boolean) &&\n !(value instanceof Date) &&\n !(value instanceof Number) &&\n !(value instanceof RegExp) &&\n !(value instanceof String)\n ) {\n // If the value is an object or array, look to see if we have already\n // encountered it. If so, return a {\"$ref\":PATH} object. This is a hard\n // linear search that will get slower as the number of unique objects grows.\n // Someday, this should be replaced with an ES6 WeakMap.\n\n i = objects.indexOf(value)\n if (i >= 0) {\n return { $ref: paths[i] }\n }\n\n // Otherwise, accumulate the unique value and its path.\n\n objects.push(value)\n paths.push(path)\n\n // If it is an array, replicate the array.\n\n if (Array.isArray(value)) {\n nu = []\n value.forEach(function (element, i) {\n nu[i] = derez(element, path + \"[\" + i + \"]\")\n })\n } else {\n // If it is an object, replicate the object.\n\n nu = {}\n Object.keys(value).forEach(function (name) {\n nu[name] = derez(value[name], path + \"[\" + JSON.stringify(name) + \"]\")\n })\n }\n return nu\n }\n return value\n })(object, \"$\")\n }\n}\n\nif (typeof JSON.retrocycle !== \"function\") {\n JSON.retrocycle = function retrocycle($) {\n \"use strict\"\n\n // Restore an object that was reduced by decycle. Members whose values are\n // objects of the form\n // {$ref: PATH}\n // are replaced with references to the value found by the PATH. This will\n // restore cycles. The object will be mutated.\n\n // The eval function is used to locate the values described by a PATH. The\n // root object is kept in a $ variable. A regular expression is used to\n // assure that the PATH is extremely well formed. The regexp contains nested\n // * quantifiers. That has been known to have extremely bad performance\n // problems on some browsers for very long strings. A PATH is expected to be\n // reasonably short. A PATH is allowed to belong to a very restricted subset of\n // Goessner's JSONPath.\n\n // So,\n // var s = '[{\"$ref\":\"$\"}]';\n // return JSON.retrocycle(JSON.parse(s));\n // produces an array containing a single element which is the array itself.\n\n var px = /^\\$(?:\\[(?:\\d+|\\\"(?:[^\\\\\\\"\\u0000-\\u001f]|\\\\([\\\\\\\"\\/bfnrt]|u[0-9a-zA-Z]{4}))*\\\")\\])*$/\n\n ;(function rez(value) {\n // The rez function walks recursively through the object looking for $ref\n // properties. When it finds one that has a value that is a path, then it\n // replaces the $ref object with a reference to the value that is found by\n // the path.\n\n if (value && typeof value === \"object\") {\n if (Array.isArray(value)) {\n value.forEach(function (element, i) {\n if (typeof element === \"object\" && element !== null) {\n var path = element.$ref\n if (typeof path === \"string\" && px.test(path)) {\n value[i] = eval(path)\n } else {\n rez(element)\n }\n }\n })\n } else {\n Object.keys(value).forEach(function (name) {\n var item = value[name]\n if (typeof item === \"object\" && item !== null) {\n var path = item.$ref\n if (typeof path === \"string\" && px.test(path)) {\n value[name] = eval(path)\n } else {\n rez(item)\n }\n }\n })\n }\n }\n })($)\n return $\n }\n}\n\nJSON = origJSON\n","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import utils from \"./utils\"\nimport cycle from \"../lib/cycle\"\nimport convertStyles from \"./convert-styles\"\n\nlet initialized = false\nconst monkey = (window.monkey = {\n cmdId: 0,\n runningCmd: {},\n connect: null,\n disconnect: null,\n\n init() {\n if (initialized) {\n monkey.connect()\n return\n }\n initialized = true\n\n return new Promise((resolve, reject) => {\n utils.addHeadScript(`${utils.getClientHost()}/monkey.io-client/socket.io.js`).addEventListener(\"load\", () => {\n initClient()\n .then((client) => {\n let authAttempts = 0,\n creds = null,\n stylize = convertStyles,\n settings = {\n convertStyles: true,\n }\n\n monkey.client = client\n monkey.connect = client.connect.bind(client)\n monkey.disconnect = () => {\n authAttempts = 0\n creds = null\n client.disconnect.call(client)\n }\n\n let doAuth = () => {\n if (authAttempts > 2) {\n monkey.disconnect()\n return\n }\n\n let username, password\n if (!creds) {\n username = prompt(\"Node Monkey username\")\n password = prompt(\"Node Monkey password\")\n creds = { username, password }\n }\n\n ++authAttempts\n client.emit(\"auth\", creds)\n }\n\n client.on(\"cmdResponse\", (cmdId, error, output) => {\n if (monkey.runningCmd[cmdId]) {\n let { resolve, reject } = monkey.runningCmd[cmdId]\n delete monkey.runningCmd[cmdId]\n\n if (error) {\n reject(error)\n } else {\n resolve(output)\n }\n }\n })\n\n client.on(\"settings\", (data) => {\n Object.assign(settings, data)\n\n if (!settings.convertStyles) {\n stylize = function (args, trace) {\n return args.concat([trace])\n }\n }\n })\n\n client.on(\"auth\", doAuth)\n\n client.on(\"authResponse\", (result, err) => {\n if (!result) {\n creds = null\n console.warn(\"Auth failed:\", err)\n doAuth()\n }\n })\n\n client.on(\"console\", (data) => {\n data = cycle.retrocycle(data)\n\n let trace,\n cdata = data.callerInfo\n if (cdata) {\n trace =\n \" -- Called from \" +\n cdata.file +\n \":\" +\n cdata.line +\n \":\" +\n cdata.column +\n (cdata.caller ? \"(function \" + cdata.caller + \")\" : \"\")\n }\n if (data.method === \"dir\") {\n console.dir(data.args[0])\n if (trace) {\n console.log.apply(console, stylize([\"^^^\"], trace))\n }\n } else {\n console[data.method].apply(console, stylize(data.args, trace))\n }\n })\n\n client.on(\"prompt\", (promptId, promptTxt, opts) => {\n opts || (opts = {})\n\n client.emit(\"promptResponse\", promptId, prompt(promptTxt))\n })\n\n resolve()\n })\n .catch(reject)\n })\n })\n },\n\n cmd(command, noOutput) {\n if (!monkey.client) {\n console.error(`Must be connected to a server to execute a command`)\n return\n }\n\n let p = new Promise((resolve, reject) => {\n let cmdId = monkey.cmdId++\n monkey.client.emit(\"cmd\", cmdId, command)\n monkey.runningCmd[cmdId] = { resolve, reject }\n })\n\n if (!noOutput) {\n p.then((output) => output !== null && console.log(output)).catch((error) => {\n if (error !== null) {\n console.error(error)\n alert(error.message)\n }\n })\n }\n\n return p\n },\n})\n\nfunction initClient() {\n return new Promise((resolve, reject) => {\n let client = io(`${location.origin}/nm`, {\n path: \"/monkey.io\"\n })\n\n client.on(\"connect\", function () {})\n\n client.on(\"error\", (err) => {\n console.error(err)\n })\n\n client.on(\"connect_error\", (err) => {\n console.error(err)\n })\n\n client.on(\"reconnect_error\", (err) => {\n console.error(err)\n })\n\n client.on(\"connect_timeout\", () => {\n console.error(new Error(\"Socket.IO connection timed out\"))\n })\n\n resolve(client)\n })\n}\n"],"names":["root","factory","exports","module","define","amd","self","styleMap","stylePattern","formatPattern","data","cdata","length","push","cap","mergeArgsStart","formatSpecifiers","utils","splice","txt","exec","replace","slice","i","arg","specifier","added","styles","capsplit","split","j","s","k","sp","pos","join","Object","assign","getClientHost","scripts","document","getElementsByTagName","scriptRe","script","test","src","parser","createElement","href","protocol","host","location","addHeadScript","type","appendChild","commonUtils","isObject","value","invert","obj","inverted","hasOwnProperty","origJSON","global","JSON","decycle","object","replacer","objects","paths","derez","path","nu","undefined","Boolean","Date","Number","RegExp","String","indexOf","$ref","Array","isArray","forEach","element","keys","name","stringify","retrocycle","$","px","rez","eval","item","_typeof","Symbol","iterator","constructor","prototype","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","d","definition","key","o","defineProperty","enumerable","get","g","globalThis","this","Function","e","window","prop","call","r","toStringTag","initialized","monkey","cmdId","runningCmd","connect","disconnect","init","Promise","resolve","reject","addEventListener","client","io","origin","on","err","console","error","Error","then","authAttempts","creds","stylize","convertStyles","settings","bind","doAuth","username","password","prompt","emit","output","args","trace","concat","result","warn","cycle","callerInfo","file","line","column","caller","method","dir","log","apply","promptId","promptTxt","opts","catch","cmd","command","noOutput","p","alert","message"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/server.js b/dist/server.js index d6ff819..8ab5a14 100644 --- a/dist/server.js +++ b/dist/server.js @@ -1,3 +1,3 @@ /*! For license information please see server.js.LICENSE.txt */ -require("source-map-support").install(),function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.NodeMonkey=t():e.NodeMonkey=t()}(global,(function(){return(()=>{"use strict";var __webpack_modules__={"./src/lib/common-utils.js":(e,t,r)=>{r.r(t),r.d(t,{default:()=>i});var n=r("@babel/runtime/helpers/typeof"),s=r.n(n);const i={isObject:function(e){var t=s()(e);return!!e&&("object"==t||"function"==t)},invert:function(e){var t={};for(var r in e)e.hasOwnProperty(r)&&(t[e[r]]=r);return t}}},"./src/lib/cycle.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("@babel/runtime/helpers/typeof"),_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__),origJSON=global.JSON,JSON={};const __WEBPACK_DEFAULT_EXPORT__=JSON;"function"!=typeof JSON.decycle&&(JSON.decycle=function(e,t){var r=[],n=[];return function e(s,i){var a,o;return void 0!==t&&(s=t(s)),"object"!==_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(s)||null===s||s instanceof Boolean||s instanceof Date||s instanceof Number||s instanceof RegExp||s instanceof String?s:(a=r.indexOf(s))>=0?{$ref:n[a]}:(r.push(s),n.push(i),Array.isArray(s)?(o=[],s.forEach((function(t,r){o[r]=e(t,i+"["+r+"]")}))):(o={},Object.keys(s).forEach((function(t){o[t]=e(s[t],i+"["+JSON.stringify(t)+"]")}))),o)}(e,"$")}),"function"!=typeof JSON.retrocycle&&(JSON.retrocycle=function retrocycle($){var px=/^\$(?:\[(?:\d+|\"(?:[^\\\"\u0000-\u001f]|\\([\\\"\/bfnrt]|u[0-9a-zA-Z]{4}))*\")\])*$/;return function rez(value){value&&"object"===_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(value)&&(Array.isArray(value)?value.forEach((function(element,i){if("object"===_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(element)&&null!==element){var path=element.$ref;"string"==typeof path&&px.test(path)?value[i]=eval(path):rez(element)}})):Object.keys(value).forEach((function(name){var item=value[name];if("object"===_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(item)&&null!==item){var path=item.$ref;"string"==typeof path&&px.test(path)?value[name]=eval(path):rez(item)}})))}($),$}),JSON=origJSON},"./src/server/bunyan-stream.js":(e,t,r)=>{r.r(t),r.d(t,{default:()=>i});var n={trace:10,debug:20,info:30,warn:40,error:50,fatal:60},s=r("./src/server/utils.js").default.invert(n);const i=function(e){return{write:function(t){t=JSON.parse(t),e._sendMessage({method:s[t.level]||"info",args:[t.msg,t]})}}}},"./src/server/command-interface.js":(e,t,r)=>{r.r(t),r.d(t,{default:()=>c});var n=r("@babel/runtime/helpers/createClass"),s=r.n(n),i=r("@babel/runtime/helpers/classCallCheck"),a=r.n(i),o=r("@babel/runtime/helpers/defineProperty"),u=r.n(o);const c=s()((function e(t,r,n,s,i){a()(this,e),u()(this,"commandManager",null),u()(this,"write",(function(e,t){console.log(e)})),u()(this,"writeLn",(function(e,t){console.log(e)})),u()(this,"error",(function(e,t){console.error(e)})),u()(this,"prompt",(function(e,t,r){"function"==typeof t&&(t,t=void 0),t||(t={}),console.warn("Prompt not implemented")})),this.commandManager=t,this.write=r,this.writeLn=n,this.error=s,this.prompt=i}))},"./src/server/command-manager.js":(e,t,r)=>{r.r(t),r.d(t,{default:()=>v});var n=r("@babel/runtime/helpers/asyncToGenerator"),s=r.n(n),i=r("@babel/runtime/helpers/createClass"),a=r.n(i),o=r("@babel/runtime/helpers/classCallCheck"),u=r.n(o),c=r("@babel/runtime/helpers/defineProperty"),l=r.n(c),p=r("@babel/runtime/regenerator"),h=r.n(p),f=(r("lodash"),r("./src/server/utils.js")),_=r("minimist"),m=r.n(_),d=a()((function e(){var t=this;u()(this,e),l()(this,"commands",{}),l()(this,"addCmd",(function(e,r,n){if(t.commands[e])throw new Error("'".concat(e,"' is already registered as a command"));"function"==typeof r&&(n=r,r={}),t.commands[e]={opts:r,exec:n}})),l()(this,"runCmd",function(){var e=s()(h().mark((function e(r,n,s){var i,a,o,u,c,l;return h().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(i=f.default.parseCommand(r),a=i[0],o=t.commands[a],n){e.next=5;break}throw new Error("Missing user context for command '".concat(a,"'"));case 5:if(o){e.next=7;break}throw new Error("Command not found: '".concat(a,"'"));case 7:return u=m()(i.slice(1)),c=f.default.getPromiseObj(),l=o.exec({args:u,username:n},{write:s.write,writeLn:s.writeLn,error:s.error,prompt:s.prompt},c.resolve),e.abrupt("return",l.then?l:c.promise);case 11:case"end":return e.stop()}}),e)})));return function(t,r,n){return e.apply(this,arguments)}}())}));const v=d},"./src/server/setup-server.js":(e,t,r)=>{r.r(t),r.d(t,{default:()=>_});var n=r("@babel/runtime/helpers/asyncToGenerator"),s=r.n(n),i=r("@babel/runtime/regenerator"),a=r.n(i),o=r("path"),u=r("http"),c=r("fs/promises"),l={html:"text/html",js:"application/javascript",json:"application/json",map:"application/json"},p=new Map;function h(e){return f.apply(this,arguments)}function f(){return(f=s()(a().mark((function e(t){return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(p.has(t)){e.next=7;break}return e.t0=p,e.t1=t,e.next=5,(0,c.readFile)(t);case 5:e.t2=e.sent,e.t0.set.call(e.t0,e.t1,e.t2);case 7:return e.abrupt("return",p.get(t));case 8:case"end":return e.stop()}}),e)})))).apply(this,arguments)}const _=function(e){var t=e.filePaths||{},r=(0,u.createServer)(function(){var e=s()(a().mark((function e(r,n){var s,i,u;return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!(s=t[r.url])){e.next=11;break}return i=l[((0,o.extname)(s)||"").slice(1)]||"text/plain",e.next=5,h(s);case 5:u=e.sent,n.setHeader("Content-Type",i),n.writeHead(200),n.end(u),e.next=13;break;case 11:n.writeHead(404),n.end();case 13:case"end":return e.stop()}}),e)})));return function(t,r){return e.apply(this,arguments)}}());return r}},"./src/server/setup-socket.js":(e,t,r)=>{r.r(t),r.d(t,{default:()=>u});var n=r("lodash"),s=r.n(n),i=r("socket.io"),a=r.n(i),o=r("./src/server/command-interface.js");const u=function(e){var t=a()();t.attach(e.server,{path:"/monkey.io",autoUnref:!0});var r=t.of("/nm");return r.on("connection",(function(t){var r=null;t.emit("settings",e.clientSettings),t.emit("auth"),t.on("auth",(function(r){e.userManager.verifyUser(r.username,r.password).then((function(n){t.emit("authResponse",n,n?void 0:"Incorrect password"),n&&(t.username=r.username,t.join("authed"),e.onAuth&&e.onAuth(t))})).catch((function(e){t.emit("authResponse",!1,e)}))})),t.on("cmd",(function(n,s){t.username?(r||(r=function(e,t){var r=0,n={},s=function(e,r){e&&t.emit("console",{method:"log",args:[e]})},i=function(e,r){e&&t.emit("console",{method:"error",args:[e]})},a=function(e,s,i){"function"==typeof s&&(i=s,s=void 0),s||(s={});var a=r++;t.emit("prompt",a,e,s),n[a]=i};return t.on("promptResponse",(function(e,t){var r=n[e];r&&r(null,t)})),new o.default(e,s,s,i,a)}(e.cmdManager,t)),e.cmdManager.runCmd(s,t.username,r).then((function(e){t.emit("cmdResponse",n,null,e)})).catch((function(e){t.emit("cmdResponse",n,e&&e.message||e,null)}))):t.emit("cmdResponse",n,"You are not authorized to run commands")}))})),s().each(e.handlers,(function(e,r){t.on(r,e)})),r}},"./src/server/ssh-manager.js":(e,t,r)=>{r.r(t),r.d(t,{default:()=>x});var n=r("@babel/runtime/helpers/classCallCheck"),s=r.n(n),i=r("@babel/runtime/helpers/createClass"),a=r.n(i),o=r("@babel/runtime/helpers/defineProperty"),u=r.n(o),c=r("fs"),l=r.n(c),p=r("tty"),h=r.n(p),f=r("node-pty"),_=r("ssh2"),m=r.n(_),d=r("terminal-kit"),v=r.n(d),y=r("./src/server/command-interface.js");function b(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(!e)return;if("string"==typeof e)return w(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return w(e,t)}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,s=function(){};return{s,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:s}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,o=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return a=e.done,e},e:function(e){o=!0,i=e},f:function(){try{a||null==r.return||r.return()}finally{if(o)throw i}}}}function w(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&void 0!==arguments[0]?arguments[0]:"",r=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;"function"==typeof r&&(n=r,r=void 0),r||(r={});var s={};r.hideInput&&(s.echo=!1),e.term(t),e.term.inputField(s,n)}))}},{key:"write",value:function(e,t){var r=t.style,n=void 0===r?void 0:r;this.term&&(n?this.term[n](e):this.term(e))}},{key:"close",value:function(){this.stream&&this.stream.end(),this.onClose()}},{key:"onAuth",value:function(e){var t=this;"password"==e.method?this.userManager.verifyUser(e.username,e.password).then((function(r){r?(t.username=e.username,e.accept()):e.reject()})).catch((function(t){e.reject()})):(e.method,e.reject())}},{key:"onReady",value:function(){var e=this;this.client.on("session",(function(t,r){e.session=t(),e.session.once("pty",(function(t,r,n){e.ptyInfo=n,t&&t()})).on("window-change",(function(t,r,n){Object.assign(e.ptyInfo,n),e._resize(),t&&t()})).once("shell",(function(t,r){e.stream=t(),e._initCmdMan(),e._initStream(),e._initPty(),e._initTerm()}))}))}},{key:"onClose",value:function(){var e=this.options.onClose;e&&e()}},{key:"onKey",value:function(e,t,r){var n=this;if("CTRL_L"===e)this.clearScreen();else if("CTRL_C"===e)this.inputActive=!1,this.inputField.abort(),this.term("\n^^C\n"),this.prompt();else if("CTRL_D"===e){this.inputField.getInput().length||(this.term.nextLine(),setTimeout((function(){n.close()}),0))}}},{key:"_resize",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this,t=e.term;t&&t.stdout.emit("resize")}},{key:"_initStream",value:function(){var e=this.stream;e.name=this.title,e.isTTY=!0,e.setRawMode=function(){},e.on("error",(function(e){console.error("SSH stream error:",e.message)}))}},{key:"_initPty",value:function(){var e=this,t=f.native.open(this.ptyInfo.cols,this.ptyInfo.rows);this.pty={master_fd:t.master,slave_fd:t.slave,master:new(h().WriteStream)(t.master),slave:new(h().ReadStream)(t.slave)},Object.defineProperty(this.pty.slave,"columns",{enumerable:!0,get:function(){return e.ptyInfo.cols}}),Object.defineProperty(this.pty.slave,"rows",{enumerable:!0,get:function(){return e.ptyInfo.rows}}),this.stream.stdin.pipe(this.pty.master),this.pty.master.pipe(this.stream.stdout)}},{key:"_initTerm",value:function(){var e=this.term=v().createTerminal({stdin:this.pty.slave,stdout:this.pty.slave,stderr:this.pty.slave,generic:this.ptyInfo.term,appName:this.title,isSSH:!0,isTTY:!0});e.on("key",this.onKey.bind(this)),e.windowTitle(this._interpolate(this.title)),this.clearScreen()}},{key:"_interpolate",value:function(e){for(var t,r=/{@(.+?)}/g,n={username:this.username};t=r.exec(e);)n[t[1]]&&(e=e.replace(t[0],n[t[1]]));return e}},{key:"clearScreen",value:function(){this.term.clear(),this.prompt()}},{key:"prompt",value:function(){var e=this,t=this.term;t.windowTitle(this._interpolate(this.title)),t.bold(this._interpolate(this.promptTxt)),this.inputActive||(this.inputActive=!0,this.inputField=t.inputField({history:this.cmdHistory,autoComplete:Object.keys(this.options.cmdManager.commands),autoCompleteHint:!0,autoCompleteMenu:!0},(function(r,n){return e.inputActive=!1,t.nextLine(),r?t.error(r.message||r):n?(" "!==n[0]&&e.cmdHistory.push(n),void("exit"===n?setTimeout(e.close.bind(e)):"clear"===n?e.clearScreen():n?e.options.cmdManager.runCmd(n,e.username,e.cmdInterface).then((function(t){"string"!=typeof t&&(t=JSON.stringify(t,null," ")),e.term(t),e.term.nextLine(),e.prompt()})).catch((function(t){"string"!=typeof t&&(t=t.message||JSON.stringify(t,null," ")),e.term.red.error(t),e.term.nextLine(),e.prompt()})):e.prompt())):e.prompt()})))}}]),e}();const x=g},"./src/server/user-manager.js":(e,t,r)=>{r.r(t),r.d(t,{default:()=>y});var n=r("@babel/runtime/helpers/asyncToGenerator"),s=r.n(n),i=r("@babel/runtime/helpers/classCallCheck"),a=r.n(i),o=r("@babel/runtime/helpers/createClass"),u=r.n(o),c=r("@babel/runtime/helpers/defineProperty"),l=r.n(c),p=r("@babel/runtime/regenerator"),h=r.n(p),f=r("fs"),_=r.n(f),m=r("scrypt-kdf"),d=r.n(m),v=function(){function e(t){a()(this,e),l()(this,"userFile",void 0),l()(this,"userFileCache",null),l()(this,"userFileCreated",!1),this.userFile=t.userFile,t.silent||this.getUsers().then((function(e){var t=Object.keys(e);t.length?1===t.length&&"guest"===t[0]&&console.warn("[WARN] No users detected. You can login with default user 'guest' and password 'guest' when prompted.\nThis user will be disabled when you create a user account.\n"):"production"===process.env.NODE_ENV?console.warn("No users have been created and you are running in production mode so you will not be able to login.\n"):console.warn("It seems there are no users and you are not running in production mode so you will not be able to login. This is probably a bug. Please report it!\n")}))}var t,r,n,i,o,c,p,f;return u()(e,[{key:"getUsers",value:(f=s()(h().mark((function e(){var t,r=this;return h().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.userFileCache){e.next=2;break}return e.abrupt("return",this.userFileCache);case 2:if(e.prev=2,this.userFile){e.next=7;break}throw(t=new Error("No user file specified")).code="ENOENT",t;case 7:return this.userFileCache=JSON.parse(_().readFileSync(this.userFile).toString("base64")),this.userFileCreated=!0,setTimeout((function(){r.userFileCache=null}),5e3),e.abrupt("return",this.userFileCache);case 13:if(e.prev=13,e.t0=e.catch(2),"ENOENT"!==e.t0.code){e.next=17;break}return e.abrupt("return","production"===process.env.NODE_ENV?{}:{guest:{password:"c2NyeXB0AA8AAAAIAAAAAc8D4r96lep3aBQSBeAqf0a+9MX6KyB6zKTF9Nk3ruTPIXrzy8IM7vjSLpIKuVZMNTZZ72CMqKp/PQmnyXmf7wGup1bWBGSwoV5ymA72ZzZg"}});case 17:throw e.t0;case 18:case"end":return e.stop()}}),e,this,[[2,13]])}))),function(){return f.apply(this,arguments)})},{key:"_writeFile",value:function(e){this.userFileCache=null,_().writeFileSync(this.userFile,JSON.stringify(e,null," ")),this.userFileCreated=!0}},{key:"_hashPassword",value:(p=s()(h().mark((function e(t){return h().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,d().kdf(t,{logN:15,r:8,p:1});case 2:return e.abrupt("return",e.sent.toString("base64"));case 3:case"end":return e.stop()}}),e)}))),function(e){return p.apply(this,arguments)})},{key:"_verifyPassword",value:(c=s()(h().mark((function e(t,r){return h().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",d().verify(Buffer.from(t,"base64"),r));case 1:case"end":return e.stop()}}),e)}))),function(e,t){return c.apply(this,arguments)})},{key:"createUser",value:(o=s()(h().mark((function e(t,r){var n;return h().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.userFile){e.next=2;break}throw new Error("No user file found. Did you forget to set the 'dataDir' option?");case 2:return e.next=4,this.getUsers();case 4:if(!(n=e.sent)[t]){e.next=7;break}throw new Error("User '".concat(t,"' already exists"));case 7:return this.userFileCreated||delete n.guest,e.next=10,this._hashPassword(r);case 10:e.t0=e.sent,n[t]={password:e.t0},this._writeFile(n);case 13:case"end":return e.stop()}}),e,this)}))),function(e,t){return o.apply(this,arguments)})},{key:"deleteUser",value:(i=s()(h().mark((function e(t){var r;return h().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.userFile){e.next=2;break}throw new Error("No user file found. Did you forget to set the 'dataDir' option?");case 2:return e.next=4,this.getUsers();case 4:if((r=e.sent)[t]){e.next=7;break}throw new Error("User '".concat(t,"' does not exist"));case 7:if(this.userFileCreated){e.next=9;break}throw new Error("User file has not been created");case 9:delete r[t],this._writeFile(r);case 11:case"end":return e.stop()}}),e,this)}))),function(e){return i.apply(this,arguments)})},{key:"setPassword",value:(n=s()(h().mark((function e(t,r){var n;return h().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.userFile){e.next=2;break}throw new Error("No user file found. Did you forget to set the 'dataDir' option?");case 2:return e.next=4,this.getUsers();case 4:return n=e.sent,e.next=7,this._hashPassword(r);case 7:n[t].password=e.sent,this._writeFile(n);case 9:case"end":return e.stop()}}),e,this)}))),function(e,t){return n.apply(this,arguments)})},{key:"getUserData",value:(r=s()(h().mark((function e(t){var r;return h().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.getUsers();case 2:if((r=e.sent)[t]){e.next=5;break}throw new Error("User '".concat(t,"' does not exist"));case 5:return e.abrupt("return",r[t]);case 6:case"end":return e.stop()}}),e,this)}))),function(e){return r.apply(this,arguments)})},{key:"verifyUser",value:(t=s()(h().mark((function e(t,r){var n;return h().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.getUserData(t);case 2:return n=e.sent,e.abrupt("return",this._verifyPassword(n.password,r));case 4:case"end":return e.stop()}}),e,this)}))),function(e,r){return t.apply(this,arguments)})}]),e}();const y=v},"./src/server/utils.js":(e,t,r)=>{r.r(t),r.d(t,{default:()=>a});var n=r("./src/lib/common-utils.js"),s=r("source-map-support"),i=r.n(s);const a=Object.assign({parseCommand:function(e){var t,r=/"(.*?)"|'(.*?)'|`(.*?)`|([^\s"]+)/gi,n=[];do{null!==(t=r.exec(e))&&n.push(t[1]||t[2]||t[3]||t[4])}while(null!==t);return n},getStack:function(){var e=Error.prepareStackTrace,t=Error.stackTraceLimit;Error.prepareStackTrace=function(e,t){return t.map(i().wrapCallSite)},Error.stackTraceLimit=30;var r=(new Error).stack;return Error.prepareStackTrace=e,Error.stackTraceLimit=t,r.slice(1)},getPromiseObj:function(){var e={};return e.promise=new Promise((function(t,r){Object.assign(e,{resolve:t,reject:r})})),e}},n.default)},"@babel/runtime/helpers/asyncToGenerator":e=>{e.exports=require("@babel/runtime/helpers/asyncToGenerator")},"@babel/runtime/helpers/classCallCheck":e=>{e.exports=require("@babel/runtime/helpers/classCallCheck")},"@babel/runtime/helpers/createClass":e=>{e.exports=require("@babel/runtime/helpers/createClass")},"@babel/runtime/helpers/defineProperty":e=>{e.exports=require("@babel/runtime/helpers/defineProperty")},"@babel/runtime/helpers/typeof":e=>{e.exports=require("@babel/runtime/helpers/typeof")},"@babel/runtime/regenerator":e=>{e.exports=require("@babel/runtime/regenerator")},events:e=>{e.exports=require("events")},keypair:e=>{e.exports=require("keypair")},lodash:e=>{e.exports=require("lodash")},minimist:e=>{e.exports=require("minimist")},"node-pty":e=>{e.exports=require("node-pty")},"scrypt-kdf":e=>{e.exports=require("scrypt-kdf")},"socket.io":e=>{e.exports=require("socket.io")},"source-map-support":e=>{e.exports=require("source-map-support")},ssh2:e=>{e.exports=require("ssh2")},"terminal-kit":e=>{e.exports=require("terminal-kit")},fs:e=>{e.exports=require("fs")},"fs/promises":e=>{e.exports=require("fs/promises")},http:e=>{e.exports=require("http")},os:e=>{e.exports=require("os")},path:e=>{e.exports=require("path")},tty:e=>{e.exports=require("tty")}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var r=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e](r,r.exports,__webpack_require__),r.exports}__webpack_require__.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=(e,t)=>{for(var r in t)__webpack_require__.o(t,r)&&!__webpack_require__.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};return(()=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{NodeMonkey:()=>L,default:()=>R});var e=__webpack_require__("@babel/runtime/helpers/asyncToGenerator"),t=__webpack_require__.n(e),r=__webpack_require__("@babel/runtime/helpers/classCallCheck"),n=__webpack_require__.n(r),s=__webpack_require__("@babel/runtime/helpers/createClass"),i=__webpack_require__.n(s),a=__webpack_require__("@babel/runtime/helpers/defineProperty"),o=__webpack_require__.n(a),u=__webpack_require__("@babel/runtime/regenerator"),c=__webpack_require__.n(u),l=__webpack_require__("os"),p=__webpack_require__.n(l),h=__webpack_require__("fs"),f=__webpack_require__.n(h),_=__webpack_require__("path"),m=__webpack_require__.n(_),d=__webpack_require__("events"),v=__webpack_require__("lodash"),y=__webpack_require__.n(v),b=__webpack_require__("keypair"),w=__webpack_require__.n(b),g=__webpack_require__("./src/lib/cycle.js"),k=__webpack_require__("./src/server/bunyan-stream.js"),x=__webpack_require__("./src/server/setup-server.js"),S=__webpack_require__("./src/server/setup-socket.js"),C=__webpack_require__("./src/server/ssh-manager.js"),j=__webpack_require__("./src/server/command-manager.js"),M=__webpack_require__("./src/server/user-manager.js"),q=__webpack_require__("./src/server/utils.js");function O(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(!e)return;if("string"==typeof e)return E(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return E(e,t)}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,s=function(){};return{s,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:s}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,o=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return a=e.done,e},e:function(e){o=!0,i=e},f:function(){try{a||null==r.return||r.return()}finally{if(o)throw i}}}}function E(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);rthis.options.server.bufferSize&&this.msgBuffer.shift(),this._sendMessages()}},{key:"_sendMessages",value:function(){var e=this.remoteClients;y().size(e.adapter.rooms.get("authed"))&&(y().each(this.msgBuffer,(function(t){e.to("authed").emit("console",g.default.decycle(t))})),this.msgBuffer=[])}},{key:"_createLocal",value:function(){this.local=P}},{key:"_createRemote",value:function(){var e=this,t=this.remote={};I.forEach((function(r){e.remote[r]=function(){for(var t=arguments.length,n=new Array(t),s=0;s1&&void 0!==arguments[1]?arguments[1]:"default";if("string"==typeof e&&(t=e,e=void 0),!D[t]){e||(e={});var r=y().get(e,"server.port");r?U=+r:(y().set(e,"server.port",++U),y().set(e,"ssh.port",++U)),D[t]=new L(e)}return D[t]}})(),__webpack_exports__=__webpack_exports__.default,__webpack_exports__})()})); +require("source-map-support").install(),function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.NodeMonkey=t():e.NodeMonkey=t()}(global,(()=>(()=>{"use strict";var __webpack_modules__={"./src/lib/common-utils.js":(e,t,r)=>{r.r(t),r.d(t,{default:()=>i});var n=r("@babel/runtime/helpers/typeof"),s=r.n(n);const i={isObject:function(e){var t=s()(e);return!!e&&("object"==t||"function"==t)},invert:function(e){var t={};for(var r in e)e.hasOwnProperty(r)&&(t[e[r]]=r);return t}}},"./src/lib/cycle.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("@babel/runtime/helpers/typeof"),_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__),origJSON=global.JSON,JSON={};const __WEBPACK_DEFAULT_EXPORT__=JSON;"function"!=typeof JSON.decycle&&(JSON.decycle=function(e,t){var r=[],n=[];return function e(s,i){var a,o;return void 0!==t&&(s=t(s)),"object"!==_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(s)||null===s||s instanceof Boolean||s instanceof Date||s instanceof Number||s instanceof RegExp||s instanceof String?s:(a=r.indexOf(s))>=0?{$ref:n[a]}:(r.push(s),n.push(i),Array.isArray(s)?(o=[],s.forEach((function(t,r){o[r]=e(t,i+"["+r+"]")}))):(o={},Object.keys(s).forEach((function(t){o[t]=e(s[t],i+"["+JSON.stringify(t)+"]")}))),o)}(e,"$")}),"function"!=typeof JSON.retrocycle&&(JSON.retrocycle=function retrocycle($){var px=/^\$(?:\[(?:\d+|\"(?:[^\\\"\u0000-\u001f]|\\([\\\"\/bfnrt]|u[0-9a-zA-Z]{4}))*\")\])*$/;return function rez(value){value&&"object"===_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(value)&&(Array.isArray(value)?value.forEach((function(element,i){if("object"===_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(element)&&null!==element){var path=element.$ref;"string"==typeof path&&px.test(path)?value[i]=eval(path):rez(element)}})):Object.keys(value).forEach((function(name){var item=value[name];if("object"===_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(item)&&null!==item){var path=item.$ref;"string"==typeof path&&px.test(path)?value[name]=eval(path):rez(item)}})))}($),$}),JSON=origJSON},"./src/server/bunyan-stream.js":(e,t,r)=>{r.r(t),r.d(t,{default:()=>i});var n={trace:10,debug:20,info:30,warn:40,error:50,fatal:60},s=r("./src/server/utils.js").default.invert(n);const i=function(e){return{write:function(t){t=JSON.parse(t),e._sendMessage({method:s[t.level]||"info",args:[t.msg,t]})}}}},"./src/server/command-interface.js":(e,t,r)=>{r.r(t),r.d(t,{default:()=>c});var n=r("@babel/runtime/helpers/createClass"),s=r.n(n),i=r("@babel/runtime/helpers/classCallCheck"),a=r.n(i),o=r("@babel/runtime/helpers/defineProperty"),u=r.n(o);const c=s()((function e(t,r,n,s,i){a()(this,e),u()(this,"commandManager",null),u()(this,"write",(function(e,t){console.log(e)})),u()(this,"writeLn",(function(e,t){console.log(e)})),u()(this,"error",(function(e,t){console.error(e)})),u()(this,"prompt",(function(e,t,r){"function"==typeof t&&(t,t=void 0),t||(t={}),console.warn("Prompt not implemented")})),this.commandManager=t,this.write=r,this.writeLn=n,this.error=s,this.prompt=i}))},"./src/server/command-manager.js":(e,t,r)=>{r.r(t),r.d(t,{default:()=>d});var n=r("@babel/runtime/helpers/asyncToGenerator"),s=r.n(n),i=r("@babel/runtime/helpers/createClass"),a=r.n(i),o=r("@babel/runtime/helpers/classCallCheck"),u=r.n(o),c=r("@babel/runtime/helpers/defineProperty"),l=r.n(c),p=r("@babel/runtime/regenerator"),h=r.n(p),f=(r("lodash"),r("./src/server/utils.js")),_=r("minimist"),m=r.n(_);const d=a()((function e(){var t=this;u()(this,e),l()(this,"commands",{}),l()(this,"addCmd",(function(e,r,n){if(t.commands[e])throw new Error("'".concat(e,"' is already registered as a command"));"function"==typeof r&&(n=r,r={}),t.commands[e]={opts:r,exec:n}})),l()(this,"runCmd",function(){var e=s()(h().mark((function e(r,n,s){var i,a,o,u,c,l;return h().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(i=f.default.parseCommand(r),a=i[0],o=t.commands[a],n){e.next=5;break}throw new Error("Missing user context for command '".concat(a,"'"));case 5:if(o){e.next=7;break}throw new Error("Command not found: '".concat(a,"'"));case 7:return u=m()(i.slice(1)),c=f.default.getPromiseObj(),l=o.exec({args:u,username:n},{write:s.write,writeLn:s.writeLn,error:s.error,prompt:s.prompt},c.resolve),e.abrupt("return",l.then?l:c.promise);case 11:case"end":return e.stop()}}),e)})));return function(t,r,n){return e.apply(this,arguments)}}())}))},"./src/server/setup-server.js":(e,t,r)=>{r.r(t),r.d(t,{default:()=>_});var n=r("@babel/runtime/helpers/asyncToGenerator"),s=r.n(n),i=r("@babel/runtime/regenerator"),a=r.n(i),o=r("path"),u=r("http"),c=r("fs/promises"),l={html:"text/html",js:"application/javascript",json:"application/json",map:"application/json"},p=new Map;function h(e){return f.apply(this,arguments)}function f(){return(f=s()(a().mark((function e(t){return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(p.has(t)){e.next=7;break}return e.t0=p,e.t1=t,e.next=5,(0,c.readFile)(t);case 5:e.t2=e.sent,e.t0.set.call(e.t0,e.t1,e.t2);case 7:return e.abrupt("return",p.get(t));case 8:case"end":return e.stop()}}),e)})))).apply(this,arguments)}const _=function(e){var t=e.filePaths||{},r=(0,u.createServer)(function(){var e=s()(a().mark((function e(r,n){var s,i,u;return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!(s=t[r.url])){e.next=11;break}return i=l[((0,o.extname)(s)||"").slice(1)]||"text/plain",e.next=5,h(s);case 5:u=e.sent,n.setHeader("Content-Type",i),n.writeHead(200),n.end(u),e.next=13;break;case 11:n.writeHead(404),n.end();case 13:case"end":return e.stop()}}),e)})));return function(t,r){return e.apply(this,arguments)}}());return r}},"./src/server/setup-socket.js":(e,t,r)=>{r.r(t),r.d(t,{default:()=>u});var n=r("lodash"),s=r.n(n),i=r("socket.io"),a=r.n(i),o=r("./src/server/command-interface.js");const u=function(e){var t=a()();t.attach(e.server,{path:"/monkey.io",autoUnref:!0});var r=t.of("/nm");return r.on("connection",(function(t){var r=null;t.emit("settings",e.clientSettings),t.emit("auth"),t.on("auth",(function(r){e.userManager.verifyUser(r.username,r.password).then((function(n){t.emit("authResponse",n,n?void 0:"Incorrect password"),n&&(t.username=r.username,t.join("authed"),e.onAuth&&e.onAuth(t))})).catch((function(e){t.emit("authResponse",!1,e)}))})),t.on("cmd",(function(n,s){t.username?(r||(r=function(e,t){var r=0,n={},s=function(e,r){e&&t.emit("console",{method:"log",args:[e]})},i=function(e,r){e&&t.emit("console",{method:"error",args:[e]})},a=function(e,s,i){"function"==typeof s&&(i=s,s=void 0),s||(s={});var a=r++;t.emit("prompt",a,e,s),n[a]=i};return t.on("promptResponse",(function(e,t){var r=n[e];r&&r(null,t)})),new o.default(e,s,s,i,a)}(e.cmdManager,t)),e.cmdManager.runCmd(s,t.username,r).then((function(e){t.emit("cmdResponse",n,null,e)})).catch((function(e){t.emit("cmdResponse",n,e&&e.message||e,null)}))):t.emit("cmdResponse",n,"You are not authorized to run commands")}))})),s().each(e.handlers,(function(e,r){t.on(r,e)})),r}},"./src/server/ssh-manager.js":(e,t,r)=>{r.r(t),r.d(t,{default:()=>x});var n=r("@babel/runtime/helpers/classCallCheck"),s=r.n(n),i=r("@babel/runtime/helpers/createClass"),a=r.n(i),o=r("@babel/runtime/helpers/defineProperty"),u=r.n(o),c=r("fs"),l=r.n(c),p=r("tty"),h=r.n(p),f=r("node-pty"),_=r("ssh2"),m=r.n(_),d=r("terminal-kit"),v=r.n(d),y=r("./src/server/command-interface.js");function b(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(!e)return;if("string"==typeof e)return w(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return w(e,t)}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,s=function(){};return{s,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:s}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,o=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return a=e.done,e},e:function(e){o=!0,i=e},f:function(){try{a||null==r.return||r.return()}finally{if(o)throw i}}}}function w(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&void 0!==arguments[0]?arguments[0]:"",r=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;"function"==typeof r&&(n=r,r=void 0),r||(r={});var s={};r.hideInput&&(s.echo=!1),e.term(t),e.term.inputField(s,n)}))}},{key:"write",value:function(e,t){var r=t.style,n=void 0===r?void 0:r;this.term&&(n?this.term[n](e):this.term(e))}},{key:"close",value:function(){this.stream&&this.stream.end(),this.onClose()}},{key:"onAuth",value:function(e){var t=this;"password"==e.method?this.userManager.verifyUser(e.username,e.password).then((function(r){r?(t.username=e.username,e.accept()):e.reject()})).catch((function(t){e.reject()})):(e.method,e.reject())}},{key:"onReady",value:function(){var e=this;this.client.on("session",(function(t,r){e.session=t(),e.session.once("pty",(function(t,r,n){e.ptyInfo=n,t&&t()})).on("window-change",(function(t,r,n){Object.assign(e.ptyInfo,n),e._resize(),t&&t()})).once("shell",(function(t,r){e.stream=t(),e._initCmdMan(),e._initStream(),e._initPty(),e._initTerm()}))}))}},{key:"onClose",value:function(){var e=this.options.onClose;e&&e()}},{key:"onKey",value:function(e,t,r){var n=this;if("CTRL_L"===e)this.clearScreen();else if("CTRL_C"===e)this.inputActive=!1,this.inputField.abort(),this.term("\n^^C\n"),this.prompt();else if("CTRL_D"===e){this.inputField.getInput().length||(this.term.nextLine(),setTimeout((function(){n.close()}),0))}}},{key:"_resize",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this,t=e.term;t&&t.stdout.emit("resize")}},{key:"_initStream",value:function(){var e=this.stream;e.name=this.title,e.isTTY=!0,e.setRawMode=function(){},e.on("error",(function(e){console.error("SSH stream error:",e.message)}))}},{key:"_initPty",value:function(){var e=this,t=f.native.open(this.ptyInfo.cols,this.ptyInfo.rows);this.pty={master_fd:t.master,slave_fd:t.slave,master:new(h().WriteStream)(t.master),slave:new(h().ReadStream)(t.slave)},Object.defineProperty(this.pty.slave,"columns",{enumerable:!0,get:function(){return e.ptyInfo.cols}}),Object.defineProperty(this.pty.slave,"rows",{enumerable:!0,get:function(){return e.ptyInfo.rows}}),this.stream.stdin.pipe(this.pty.master),this.pty.master.pipe(this.stream.stdout)}},{key:"_initTerm",value:function(){var e=this.term=v().createTerminal({stdin:this.pty.slave,stdout:this.pty.slave,stderr:this.pty.slave,generic:this.ptyInfo.term,appName:this.title,isSSH:!0,isTTY:!0});e.on("key",this.onKey.bind(this)),e.windowTitle(this._interpolate(this.title)),this.clearScreen()}},{key:"_interpolate",value:function(e){for(var t,r=/{@(.+?)}/g,n={username:this.username};t=r.exec(e);)n[t[1]]&&(e=e.replace(t[0],n[t[1]]));return e}},{key:"clearScreen",value:function(){this.term.clear(),this.prompt()}},{key:"prompt",value:function(){var e=this,t=this.term;t.windowTitle(this._interpolate(this.title)),t.bold(this._interpolate(this.promptTxt)),this.inputActive||(this.inputActive=!0,this.inputField=t.inputField({history:this.cmdHistory,autoComplete:Object.keys(this.options.cmdManager.commands),autoCompleteHint:!0,autoCompleteMenu:!0},(function(r,n){return e.inputActive=!1,t.nextLine(),r?t.error(r.message||r):n?(" "!==n[0]&&e.cmdHistory.push(n),void("exit"===n?setTimeout(e.close.bind(e)):"clear"===n?e.clearScreen():n?e.options.cmdManager.runCmd(n,e.username,e.cmdInterface).then((function(t){"string"!=typeof t&&(t=JSON.stringify(t,null," ")),e.term(t),e.term.nextLine(),e.prompt()})).catch((function(t){"string"!=typeof t&&(t=t.message||JSON.stringify(t,null," ")),e.term.red.error(t),e.term.nextLine(),e.prompt()})):e.prompt())):e.prompt()})))}}]),e}();const x=g},"./src/server/user-manager.js":(e,t,r)=>{r.r(t),r.d(t,{default:()=>v});var n=r("@babel/runtime/helpers/asyncToGenerator"),s=r.n(n),i=r("@babel/runtime/helpers/classCallCheck"),a=r.n(i),o=r("@babel/runtime/helpers/createClass"),u=r.n(o),c=r("@babel/runtime/helpers/defineProperty"),l=r.n(c),p=r("@babel/runtime/regenerator"),h=r.n(p),f=r("fs"),_=r.n(f),m=r("scrypt-kdf"),d=r.n(m);const v=function(){function e(t){a()(this,e),l()(this,"userFile",void 0),l()(this,"userFileCache",null),l()(this,"userFileCreated",!1),this.userFile=t.userFile,t.silent||this.getUsers().then((function(e){var t=Object.keys(e);t.length?1===t.length&&"guest"===t[0]&&console.warn("[WARN] No users detected. You can login with default user 'guest' and password 'guest' when prompted.\nThis user will be disabled when you create a user account.\n"):"production"===process.env.NODE_ENV?console.warn("No users have been created and you are running in production mode so you will not be able to login.\n"):console.warn("It seems there are no users and you are not running in production mode so you will not be able to login. This is probably a bug. Please report it!\n")}))}var t,r,n,i,o,c,p,f;return u()(e,[{key:"getUsers",value:(f=s()(h().mark((function e(){var t,r=this;return h().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.userFileCache){e.next=2;break}return e.abrupt("return",this.userFileCache);case 2:if(e.prev=2,this.userFile){e.next=7;break}throw(t=new Error("No user file specified")).code="ENOENT",t;case 7:return this.userFileCache=JSON.parse(_().readFileSync(this.userFile).toString("base64")),this.userFileCreated=!0,setTimeout((function(){r.userFileCache=null}),5e3),e.abrupt("return",this.userFileCache);case 13:if(e.prev=13,e.t0=e.catch(2),"ENOENT"!==e.t0.code){e.next=17;break}return e.abrupt("return","production"===process.env.NODE_ENV?{}:{guest:{password:"c2NyeXB0AA8AAAAIAAAAAc8D4r96lep3aBQSBeAqf0a+9MX6KyB6zKTF9Nk3ruTPIXrzy8IM7vjSLpIKuVZMNTZZ72CMqKp/PQmnyXmf7wGup1bWBGSwoV5ymA72ZzZg"}});case 17:throw e.t0;case 18:case"end":return e.stop()}}),e,this,[[2,13]])}))),function(){return f.apply(this,arguments)})},{key:"_writeFile",value:function(e){this.userFileCache=null,_().writeFileSync(this.userFile,JSON.stringify(e,null," ")),this.userFileCreated=!0}},{key:"_hashPassword",value:(p=s()(h().mark((function e(t){return h().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,d().kdf(t,{logN:15,r:8,p:1});case 2:return e.abrupt("return",e.sent.toString("base64"));case 3:case"end":return e.stop()}}),e)}))),function(e){return p.apply(this,arguments)})},{key:"_verifyPassword",value:(c=s()(h().mark((function e(t,r){return h().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",d().verify(Buffer.from(t,"base64"),r));case 1:case"end":return e.stop()}}),e)}))),function(e,t){return c.apply(this,arguments)})},{key:"createUser",value:(o=s()(h().mark((function e(t,r){var n;return h().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.userFile){e.next=2;break}throw new Error("No user file found. Did you forget to set the 'dataDir' option?");case 2:return e.next=4,this.getUsers();case 4:if(!(n=e.sent)[t]){e.next=7;break}throw new Error("User '".concat(t,"' already exists"));case 7:return this.userFileCreated||delete n.guest,e.next=10,this._hashPassword(r);case 10:e.t0=e.sent,n[t]={password:e.t0},this._writeFile(n);case 13:case"end":return e.stop()}}),e,this)}))),function(e,t){return o.apply(this,arguments)})},{key:"deleteUser",value:(i=s()(h().mark((function e(t){var r;return h().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.userFile){e.next=2;break}throw new Error("No user file found. Did you forget to set the 'dataDir' option?");case 2:return e.next=4,this.getUsers();case 4:if((r=e.sent)[t]){e.next=7;break}throw new Error("User '".concat(t,"' does not exist"));case 7:if(this.userFileCreated){e.next=9;break}throw new Error("User file has not been created");case 9:delete r[t],this._writeFile(r);case 11:case"end":return e.stop()}}),e,this)}))),function(e){return i.apply(this,arguments)})},{key:"setPassword",value:(n=s()(h().mark((function e(t,r){var n;return h().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.userFile){e.next=2;break}throw new Error("No user file found. Did you forget to set the 'dataDir' option?");case 2:return e.next=4,this.getUsers();case 4:return n=e.sent,e.next=7,this._hashPassword(r);case 7:n[t].password=e.sent,this._writeFile(n);case 9:case"end":return e.stop()}}),e,this)}))),function(e,t){return n.apply(this,arguments)})},{key:"getUserData",value:(r=s()(h().mark((function e(t){var r;return h().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.getUsers();case 2:if((r=e.sent)[t]){e.next=5;break}throw new Error("User '".concat(t,"' does not exist"));case 5:return e.abrupt("return",r[t]);case 6:case"end":return e.stop()}}),e,this)}))),function(e){return r.apply(this,arguments)})},{key:"verifyUser",value:(t=s()(h().mark((function e(t,r){var n;return h().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.getUserData(t);case 2:return n=e.sent,e.abrupt("return",this._verifyPassword(n.password,r));case 4:case"end":return e.stop()}}),e,this)}))),function(e,r){return t.apply(this,arguments)})}]),e}()},"./src/server/utils.js":(e,t,r)=>{r.r(t),r.d(t,{default:()=>a});var n=r("./src/lib/common-utils.js"),s=r("source-map-support"),i=r.n(s);const a=Object.assign({parseCommand:function(e){var t,r=/"(.*?)"|'(.*?)'|`(.*?)`|([^\s"]+)/gi,n=[];do{null!==(t=r.exec(e))&&n.push(t[1]||t[2]||t[3]||t[4])}while(null!==t);return n},getStack:function(){var e=Error.prepareStackTrace,t=Error.stackTraceLimit;Error.prepareStackTrace=function(e,t){return t.map(i().wrapCallSite)},Error.stackTraceLimit=30;var r=(new Error).stack;return Error.prepareStackTrace=e,Error.stackTraceLimit=t,r.slice(1)},getPromiseObj:function(){var e={};return e.promise=new Promise((function(t,r){Object.assign(e,{resolve:t,reject:r})})),e}},n.default)},"@babel/runtime/helpers/asyncToGenerator":e=>{e.exports=require("@babel/runtime/helpers/asyncToGenerator")},"@babel/runtime/helpers/classCallCheck":e=>{e.exports=require("@babel/runtime/helpers/classCallCheck")},"@babel/runtime/helpers/createClass":e=>{e.exports=require("@babel/runtime/helpers/createClass")},"@babel/runtime/helpers/defineProperty":e=>{e.exports=require("@babel/runtime/helpers/defineProperty")},"@babel/runtime/helpers/typeof":e=>{e.exports=require("@babel/runtime/helpers/typeof")},"@babel/runtime/regenerator":e=>{e.exports=require("@babel/runtime/regenerator")},events:e=>{e.exports=require("events")},keypair:e=>{e.exports=require("keypair")},lodash:e=>{e.exports=require("lodash")},minimist:e=>{e.exports=require("minimist")},"node-pty":e=>{e.exports=require("node-pty")},"scrypt-kdf":e=>{e.exports=require("scrypt-kdf")},"socket.io":e=>{e.exports=require("socket.io")},"source-map-support":e=>{e.exports=require("source-map-support")},ssh2:e=>{e.exports=require("ssh2")},"terminal-kit":e=>{e.exports=require("terminal-kit")},fs:e=>{e.exports=require("fs")},"fs/promises":e=>{e.exports=require("fs/promises")},http:e=>{e.exports=require("http")},os:e=>{e.exports=require("os")},path:e=>{e.exports=require("path")},tty:e=>{e.exports=require("tty")}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var r=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e](r,r.exports,__webpack_require__),r.exports}__webpack_require__.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=(e,t)=>{for(var r in t)__webpack_require__.o(t,r)&&!__webpack_require__.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};return(()=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{NodeMonkey:()=>L,default:()=>R});var e=__webpack_require__("@babel/runtime/helpers/asyncToGenerator"),t=__webpack_require__.n(e),r=__webpack_require__("@babel/runtime/helpers/classCallCheck"),n=__webpack_require__.n(r),s=__webpack_require__("@babel/runtime/helpers/createClass"),i=__webpack_require__.n(s),a=__webpack_require__("@babel/runtime/helpers/defineProperty"),o=__webpack_require__.n(a),u=__webpack_require__("@babel/runtime/regenerator"),c=__webpack_require__.n(u),l=__webpack_require__("os"),p=__webpack_require__.n(l),h=__webpack_require__("fs"),f=__webpack_require__.n(h),_=__webpack_require__("path"),m=__webpack_require__.n(_),d=__webpack_require__("events"),v=__webpack_require__("lodash"),y=__webpack_require__.n(v),b=__webpack_require__("keypair"),w=__webpack_require__.n(b),g=__webpack_require__("./src/lib/cycle.js"),k=__webpack_require__("./src/server/bunyan-stream.js"),x=__webpack_require__("./src/server/setup-server.js"),S=__webpack_require__("./src/server/setup-socket.js"),C=__webpack_require__("./src/server/ssh-manager.js"),j=__webpack_require__("./src/server/command-manager.js"),M=__webpack_require__("./src/server/user-manager.js"),q=__webpack_require__("./src/server/utils.js");function O(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(!e)return;if("string"==typeof e)return E(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return E(e,t)}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,s=function(){};return{s,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:s}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,o=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return a=e.done,e},e:function(e){o=!0,i=e},f:function(){try{a||null==r.return||r.return()}finally{if(o)throw i}}}}function E(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);rthis.options.server.bufferSize&&this.msgBuffer.shift(),this._sendMessages()}},{key:"_sendMessages",value:function(){var e=this.remoteClients;y().size(e.adapter.rooms.get("authed"))&&(y().each(this.msgBuffer,(function(t){e.to("authed").emit("console",g.default.decycle(t))})),this.msgBuffer=[])}},{key:"_createLocal",value:function(){this.local=P}},{key:"_createRemote",value:function(){var e=this,t=this.remote={};I.forEach((function(r){e.remote[r]=function(){for(var t=arguments.length,n=new Array(t),s=0;s1&&void 0!==arguments[1]?arguments[1]:"default";if("string"==typeof e&&(t=e,e=void 0),!D[t]){e||(e={});var r=y().get(e,"server.port");r?U=+r:(y().set(e,"server.port",++U),y().set(e,"ssh.port",++U)),D[t]=new L(e)}return D[t]}})(),__webpack_exports__=__webpack_exports__.default,__webpack_exports__})())); //# sourceMappingURL=server.js.map \ No newline at end of file diff --git a/dist/server.js.map b/dist/server.js.map index 9922620..97a2012 100644 --- a/dist/server.js.map +++ b/dist/server.js.map @@ -1 +1 @@ -{"version":3,"file":"server.js","mappings":"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","sources":["webpack://NodeMonkey/webpack/universalModuleDefinition","webpack://NodeMonkey/./src/lib/common-utils.js","webpack://NodeMonkey/./src/lib/cycle.js","webpack://NodeMonkey/./src/server/bunyan-stream.js","webpack://NodeMonkey/./src/server/command-interface.js","webpack://NodeMonkey/./src/server/command-manager.js","webpack://NodeMonkey/./src/server/setup-server.js","webpack://NodeMonkey/./src/server/setup-socket.js","webpack://NodeMonkey/./src/server/ssh-manager.js","webpack://NodeMonkey/./src/server/user-manager.js","webpack://NodeMonkey/./src/server/utils.js","webpack://NodeMonkey/external commonjs \"@babel/runtime/helpers/asyncToGenerator\"","webpack://NodeMonkey/external commonjs \"@babel/runtime/helpers/classCallCheck\"","webpack://NodeMonkey/external commonjs \"@babel/runtime/helpers/createClass\"","webpack://NodeMonkey/external commonjs \"@babel/runtime/helpers/defineProperty\"","webpack://NodeMonkey/external commonjs \"@babel/runtime/helpers/typeof\"","webpack://NodeMonkey/external commonjs \"@babel/runtime/regenerator\"","webpack://NodeMonkey/external commonjs \"events\"","webpack://NodeMonkey/external commonjs \"keypair\"","webpack://NodeMonkey/external commonjs \"lodash\"","webpack://NodeMonkey/external commonjs \"minimist\"","webpack://NodeMonkey/external commonjs \"node-pty\"","webpack://NodeMonkey/external commonjs \"scrypt-kdf\"","webpack://NodeMonkey/external commonjs \"socket.io\"","webpack://NodeMonkey/external commonjs \"source-map-support\"","webpack://NodeMonkey/external commonjs \"ssh2\"","webpack://NodeMonkey/external commonjs \"terminal-kit\"","webpack://NodeMonkey/external node-commonjs \"fs\"","webpack://NodeMonkey/external node-commonjs \"fs/promises\"","webpack://NodeMonkey/external node-commonjs \"http\"","webpack://NodeMonkey/external node-commonjs \"os\"","webpack://NodeMonkey/external node-commonjs \"path\"","webpack://NodeMonkey/external node-commonjs \"tty\"","webpack://NodeMonkey/webpack/bootstrap","webpack://NodeMonkey/webpack/runtime/compat get default export","webpack://NodeMonkey/webpack/runtime/define property getters","webpack://NodeMonkey/webpack/runtime/hasOwnProperty shorthand","webpack://NodeMonkey/webpack/runtime/make namespace object","webpack://NodeMonkey/./src/server/index.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"NodeMonkey\"] = factory();\n\telse\n\t\troot[\"NodeMonkey\"] = factory();\n})(global, function() {\nreturn ","export default {\n isObject(value) {\n let type = typeof value\n return !!value && (type == \"object\" || type == \"function\")\n },\n\n invert(obj) {\n let inverted = {}\n for (let k in obj) {\n if (obj.hasOwnProperty(k)) {\n inverted[obj[k]] = k\n }\n }\n\n return inverted\n },\n}\n","/*\n cycle.js\n 2016-05-01\n\n Public Domain.\n\n NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n\n This code should be minified before deployment.\n See http://javascript.crockford.com/jsmin.html\n\n USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n NOT CONTROL.\n*/\n\n/*jslint eval, for */\n\n/*property\n $ref, decycle, forEach, isArray, keys, length, push, retrocycle, stringify,\n test\n*/\n\nlet origJSON = global.JSON,\n JSON = {}\nexport default JSON\n\nif (typeof JSON.decycle !== \"function\") {\n JSON.decycle = function decycle(object, replacer) {\n \"use strict\"\n\n // Make a deep copy of an object or array, assuring that there is at most\n // one instance of each object or array in the resulting structure. The\n // duplicate references (which might be forming cycles) are replaced with\n // an object of the form\n\n // {\"$ref\": PATH}\n\n // where the PATH is a JSONPath string that locates the first occurance.\n\n // So,\n\n // var a = [];\n // a[0] = a;\n // return JSON.stringify(JSON.decycle(a));\n\n // produces the string '[{\"$ref\":\"$\"}]'.\n\n // If a replacer function is provided, then it will be called for each value.\n // A replacer function receives a value and returns a replacement value.\n\n // JSONPath is used to locate the unique object. $ indicates the top level of\n // the object or array. [NUMBER] or [STRING] indicates a child element or\n // property.\n\n var objects = [] // Keep a reference to each unique object or array\n var paths = [] // Keep the path to each unique object or array\n\n return (function derez(value, path) {\n // The derez function recurses through the object, producing the deep copy.\n\n var i // The loop counter\n var nu // The new object or array\n\n // If a replacer function was provided, then call it to get a replacement value.\n\n if (replacer !== undefined) {\n value = replacer(value)\n }\n\n // typeof null === \"object\", so go on if this value is really an object but not\n // one of the weird builtin objects.\n\n if (\n typeof value === \"object\" &&\n value !== null &&\n !(value instanceof Boolean) &&\n !(value instanceof Date) &&\n !(value instanceof Number) &&\n !(value instanceof RegExp) &&\n !(value instanceof String)\n ) {\n // If the value is an object or array, look to see if we have already\n // encountered it. If so, return a {\"$ref\":PATH} object. This is a hard\n // linear search that will get slower as the number of unique objects grows.\n // Someday, this should be replaced with an ES6 WeakMap.\n\n i = objects.indexOf(value)\n if (i >= 0) {\n return { $ref: paths[i] }\n }\n\n // Otherwise, accumulate the unique value and its path.\n\n objects.push(value)\n paths.push(path)\n\n // If it is an array, replicate the array.\n\n if (Array.isArray(value)) {\n nu = []\n value.forEach(function (element, i) {\n nu[i] = derez(element, path + \"[\" + i + \"]\")\n })\n } else {\n // If it is an object, replicate the object.\n\n nu = {}\n Object.keys(value).forEach(function (name) {\n nu[name] = derez(value[name], path + \"[\" + JSON.stringify(name) + \"]\")\n })\n }\n return nu\n }\n return value\n })(object, \"$\")\n }\n}\n\nif (typeof JSON.retrocycle !== \"function\") {\n JSON.retrocycle = function retrocycle($) {\n \"use strict\"\n\n // Restore an object that was reduced by decycle. Members whose values are\n // objects of the form\n // {$ref: PATH}\n // are replaced with references to the value found by the PATH. This will\n // restore cycles. The object will be mutated.\n\n // The eval function is used to locate the values described by a PATH. The\n // root object is kept in a $ variable. A regular expression is used to\n // assure that the PATH is extremely well formed. The regexp contains nested\n // * quantifiers. That has been known to have extremely bad performance\n // problems on some browsers for very long strings. A PATH is expected to be\n // reasonably short. A PATH is allowed to belong to a very restricted subset of\n // Goessner's JSONPath.\n\n // So,\n // var s = '[{\"$ref\":\"$\"}]';\n // return JSON.retrocycle(JSON.parse(s));\n // produces an array containing a single element which is the array itself.\n\n var px = /^\\$(?:\\[(?:\\d+|\\\"(?:[^\\\\\\\"\\u0000-\\u001f]|\\\\([\\\\\\\"\\/bfnrt]|u[0-9a-zA-Z]{4}))*\\\")\\])*$/\n\n ;(function rez(value) {\n // The rez function walks recursively through the object looking for $ref\n // properties. When it finds one that has a value that is a path, then it\n // replaces the $ref object with a reference to the value that is found by\n // the path.\n\n if (value && typeof value === \"object\") {\n if (Array.isArray(value)) {\n value.forEach(function (element, i) {\n if (typeof element === \"object\" && element !== null) {\n var path = element.$ref\n if (typeof path === \"string\" && px.test(path)) {\n value[i] = eval(path)\n } else {\n rez(element)\n }\n }\n })\n } else {\n Object.keys(value).forEach(function (name) {\n var item = value[name]\n if (typeof item === \"object\" && item !== null) {\n var path = item.$ref\n if (typeof path === \"string\" && px.test(path)) {\n value[name] = eval(path)\n } else {\n rez(item)\n }\n }\n })\n }\n }\n })($)\n return $\n }\n}\n\nJSON = origJSON\n","import utils from \"./utils\"\n\nconst BUNYAN_TRACE = 10\nconst BUNYAN_DEBUG = 20\nconst BUNYAN_INFO = 30\nconst BUNYAN_WARN = 40\nconst BUNYAN_ERROR = 50\nconst BUNYAN_FATAL = 60\n\nlet levelFromName = {\n trace: BUNYAN_TRACE,\n debug: BUNYAN_DEBUG,\n info: BUNYAN_INFO,\n warn: BUNYAN_WARN,\n error: BUNYAN_ERROR,\n fatal: BUNYAN_FATAL,\n}\nlet nameFromLevel = utils.invert(levelFromName)\n\nexport default (inst) => {\n return {\n write: function (rec) {\n rec = JSON.parse(rec)\n inst._sendMessage({\n method: nameFromLevel[rec.level] || \"info\",\n args: [rec.msg, rec],\n })\n },\n }\n}\n","class CommandInterface {\n commandManager = null\n\n write = (val, opts) => {\n console.log(val)\n }\n\n writeLn = (val, opts) => {\n console.log(val)\n }\n\n error = (val, opts) => {\n console.error(val)\n }\n\n prompt = (promptTxt, opts, cb) => {\n if (typeof opts === \"function\") {\n cb = opts\n opts = undefined\n }\n opts || (opts = {})\n\n console.warn(\"Prompt not implemented\")\n }\n\n constructor(commandManager, writeFn, writeLnFn, errorFn, promptFn) {\n this.commandManager = commandManager\n this.write = writeFn\n this.writeLn = writeLnFn\n this.error = errorFn\n this.prompt = promptFn\n }\n}\n\nexport default CommandInterface\n","import _ from \"lodash\"\nimport utils from \"./utils\"\nimport minimist from \"minimist\"\n\nclass CommandManager {\n commands = {}\n\n addCmd = (cmdName, opts, exec) => {\n if (this.commands[cmdName]) {\n throw new Error(`'${cmdName}' is already registered as a command`)\n }\n\n if (typeof opts === \"function\") {\n exec = opts\n opts = {}\n }\n\n this.commands[cmdName] = {\n opts,\n exec,\n }\n }\n\n runCmd = async (rawCommand, asUser, io) => {\n const parsed = utils.parseCommand(rawCommand)\n const cmdName = parsed[0]\n const cmd = this.commands[cmdName]\n\n if (!asUser) {\n throw new Error(`Missing user context for command '${cmdName}'`)\n }\n\n if (!cmd) {\n throw new Error(`Command not found: '${cmdName}'`)\n }\n\n const args = minimist(parsed.slice(1))\n const doneP = utils.getPromiseObj()\n const result = cmd.exec(\n {\n args,\n username: asUser,\n },\n {\n write: io.write,\n writeLn: io.writeLn,\n error: io.error,\n prompt: io.prompt,\n },\n doneP.resolve,\n )\n\n return result.then ? result : doneP.promise\n }\n}\n\nexport default CommandManager\n","import { extname, } from \"path\"\nimport { createServer, } from \"http\"\nimport { readFile, } from \"fs/promises\"\n\nconst extMap = {\n html: \"text/html\",\n js: \"application/javascript\",\n json: \"application/json\",\n map: \"application/json\",\n}\n\nconst loadedFiles = new Map()\nasync function loadFile(file) {\n if (!loadedFiles.has(file)) {\n loadedFiles.set(file, await readFile(file))\n }\n return loadedFiles.get(file)\n}\n\nexport default (options) => {\n const filePaths = options.filePaths || {}\n const server = createServer(async (req, res) => {\n const filePath = filePaths[req.url]\n if (filePath) {\n const contentType = extMap[(extname(filePath) || \"\").slice(1)] || \"text/plain\"\n const content = await loadFile(filePath)\n\n res.setHeader(\"Content-Type\", contentType)\n res.writeHead(200)\n res.end(content)\n } else {\n res.writeHead(404)\n res.end()\n }\n })\n\n return server\n}\n","import _ from \"lodash\"\nimport socketio from \"socket.io\"\nimport CommandInterface from \"./command-interface\"\n\nexport default (options) => {\n const io = socketio()\n io.attach(options.server, {\n path: \"/monkey.io\",\n autoUnref: true,\n })\n\n const ns = io.of(\"/nm\")\n ns.on(\"connection\", (socket) => {\n let cmdInterface = null\n socket.emit(\"settings\", options.clientSettings)\n socket.emit(\"auth\")\n\n socket.on(\"auth\", (creds) => {\n options.userManager\n .verifyUser(creds.username, creds.password)\n .then((result) => {\n socket.emit(\"authResponse\", result, result ? undefined : \"Incorrect password\")\n if (result) {\n socket.username = creds.username\n socket.join(\"authed\")\n if (options.onAuth) {\n options.onAuth(socket)\n }\n }\n })\n .catch((err) => {\n socket.emit(\"authResponse\", false, err)\n })\n })\n\n socket.on(\"cmd\", (cmdId, command) => {\n if (!socket.username) {\n socket.emit(\"cmdResponse\", cmdId, `You are not authorized to run commands`)\n return\n }\n\n if (!cmdInterface) {\n cmdInterface = createCmdInterface(options.cmdManager, socket)\n }\n\n options.cmdManager\n .runCmd(command, socket.username, cmdInterface)\n .then((output) => {\n socket.emit(\"cmdResponse\", cmdId, null, output)\n })\n .catch((err) => {\n socket.emit(\"cmdResponse\", cmdId, (err && err.message) || err, null)\n })\n })\n })\n\n _.each(options.handlers, function (handler, event) {\n io.on(event, handler)\n })\n\n return ns\n}\n\nfunction createCmdInterface(cmdManager, socket) {\n let promptId = 0\n const prompts = {}\n\n const writeFn = (val, opts) => {\n if (!val) return\n\n socket.emit(\"console\", {\n method: \"log\",\n args: [val],\n })\n }\n\n const errorFn = (val, opts) => {\n if (!val) return\n\n socket.emit(\"console\", {\n method: \"error\",\n args: [val],\n })\n }\n\n const promptFn = (promptTxt, opts, cb) => {\n if (typeof opts === \"function\") {\n cb = opts\n opts = undefined\n }\n opts || (opts = {})\n\n let pid = promptId++\n socket.emit(\"prompt\", pid, promptTxt, opts)\n\n prompts[pid] = cb\n }\n\n socket.on(\"promptResponse\", (promptId, response) => {\n const cb = prompts[promptId]\n if (cb) {\n cb(null, response)\n }\n })\n\n return new CommandInterface(cmdManager, writeFn, writeFn, errorFn, promptFn)\n}\n","import fs from \"fs\"\nimport tty from \"tty\"\nimport { native as nativePty } from \"node-pty\"\nimport ssh2 from \"ssh2\"\nimport termkit from \"terminal-kit\"\nimport CommandInterface from \"./command-interface\"\n\nclass SSHManager {\n options = {\n host: \"127.0.0.1\",\n port: 50501,\n title: \"Node Monkey\",\n prompt: \"Node Monkey:\",\n silent: false,\n }\n server\n clients = new Set()\n\n constructor(options) {\n options = Object.assign(this.options, options)\n\n this.server = new ssh2.Server(\n {\n hostKeys: options.hostKeys.map((file) => {\n return fs.readFileSync(file)\n }),\n },\n this.onClient.bind(this),\n )\n\n const monkey = this.options.monkey\n this.server.listen(options.port, options.host, function () {\n options.silent || monkey.local.log(`SSH listening on ${this.address().port}`)\n })\n }\n\n shutdown() {\n const clients = this.clients\n for (const c of clients) {\n c.write(\"\\nShutting down\")\n c.close()\n }\n }\n\n onClient(client) {\n const { cmdManager, userManager, title, prompt } = this.options\n\n this.clients.add(\n new SSHClient({\n client,\n cmdManager,\n userManager,\n title,\n prompt,\n onClose: () => this.clients.delete(client),\n }),\n )\n }\n}\n\nclass SSHClient {\n constructor(options) {\n this.options = options\n this.client = options.client\n this.cmdInterface = null\n this.userManager = options.userManager\n this.session = null\n this.stream = null\n this.pty = null\n this.term = null\n this.ptyInfo = null\n\n this.title = options.title\n this.promptTxt = `${options.prompt} `\n this.inputActive = false\n this.cmdHistory = []\n\n this.username = null\n\n this.client.on(\"authentication\", this.onAuth.bind(this))\n this.client.on(\"ready\", this.onReady.bind(this))\n this.client.on(\"end\", this.onClose.bind(this))\n }\n\n _initCmdMan() {\n const writeFn = (val, opts) => {\n opts || (opts = {})\n val || (val = \"\")\n\n if (opts.bold) {\n this.term.bold(val)\n } else {\n this.term(val)\n }\n\n if (opts.newline) {\n this.term.nextLine()\n }\n }\n\n const writeLnFn = (val, opts) => {\n opts || (opts = {})\n opts.newline = true\n writeFn(val, opts)\n }\n\n const errorFn = (val, opts) => {\n opts || (opts = {})\n\n // TODO: Apparently by sending this to stdout there is a timing issue and anything sent to\n // stdout appears before this value is sent to stderr for some reason.\n // this.term.red.error(val)\n this.term.red(val)\n\n if (opts.newline) {\n this.term.nextLine()\n }\n }\n\n const promptFn = (promptTxt = \"\", opts, cb) => {\n if (typeof opts === \"function\") {\n cb = opts\n opts = undefined\n }\n opts || (opts = {})\n\n let inputOpts = {}\n if (opts.hideInput) {\n inputOpts.echo = false\n }\n\n this.term(promptTxt)\n this.term.inputField(inputOpts, cb)\n }\n\n this.cmdInterface = new CommandInterface(this.options.cmdManager, writeFn, writeLnFn, errorFn, promptFn)\n }\n\n write(msg, { style = undefined }) {\n if (this.term) {\n if (style) {\n this.term[style](msg)\n } else {\n this.term(msg)\n }\n }\n }\n\n close() {\n if (this.stream) {\n this.stream.end()\n }\n this.onClose()\n }\n\n onAuth(ctx) {\n if (ctx.method == \"password\") {\n this.userManager\n .verifyUser(ctx.username, ctx.password)\n .then((result) => {\n if (result) {\n this.username = ctx.username\n ctx.accept()\n } else {\n ctx.reject()\n }\n })\n .catch((err) => {\n ctx.reject()\n })\n } else if (ctx.method == \"publickey\") {\n ctx.reject()\n } else {\n ctx.reject()\n }\n }\n\n onReady() {\n this.client.on(\"session\", (accept, reject) => {\n this.session = accept()\n\n this.session\n .once(\"pty\", (accept, reject, info) => {\n this.ptyInfo = info\n accept && accept()\n })\n .on(\"window-change\", (accept, reject, info) => {\n Object.assign(this.ptyInfo, info)\n this._resize()\n accept && accept()\n })\n .once(\"shell\", (accept, reject) => {\n this.stream = accept()\n this._initCmdMan()\n this._initStream()\n this._initPty()\n this._initTerm()\n })\n })\n }\n\n onClose() {\n let onClose = this.options.onClose\n onClose && onClose()\n }\n\n onKey(name, matches, data) {\n if (name === \"CTRL_L\") {\n this.clearScreen()\n } else if (name === \"CTRL_C\") {\n this.inputActive = false\n this.inputField.abort()\n this.term(\"\\n^^C\\n\")\n this.prompt()\n } else if (name === \"CTRL_D\") {\n let input = this.inputField.getInput()\n if (!input.length) {\n this.term.nextLine()\n setTimeout(() => {\n this.close()\n }, 0)\n }\n }\n }\n\n _resize({ term } = this) {\n if (term) {\n term.stdout.emit(\"resize\")\n }\n }\n\n _initStream() {\n const stream = this.stream\n stream.name = this.title\n stream.isTTY = true\n stream.setRawMode = () => {}\n stream.on(\"error\", (error) => {\n console.error(\"SSH stream error:\", error.message)\n })\n }\n\n _initPty() {\n const newPty = nativePty.open(this.ptyInfo.cols, this.ptyInfo.rows)\n this.pty = {\n master_fd: newPty.master,\n slave_fd: newPty.slave,\n master: new tty.WriteStream(newPty.master),\n slave: new tty.ReadStream(newPty.slave),\n }\n\n Object.defineProperty(this.pty.slave, \"columns\", {\n enumerable: true,\n get: () => this.ptyInfo.cols,\n })\n Object.defineProperty(this.pty.slave, \"rows\", {\n enumerable: true,\n get: () => this.ptyInfo.rows,\n })\n\n this.stream.stdin.pipe(this.pty.master)\n this.pty.master.pipe(this.stream.stdout)\n }\n\n _initTerm() {\n const term = (this.term = termkit.createTerminal({\n stdin: this.pty.slave,\n stdout: this.pty.slave,\n stderr: this.pty.slave,\n generic: this.ptyInfo.term,\n appName: this.title,\n isSSH: true,\n isTTY: true,\n }))\n\n term.on(\"key\", this.onKey.bind(this))\n term.windowTitle(this._interpolate(this.title))\n this.clearScreen()\n }\n\n _interpolate(str) {\n let varRe = /{@(.+?)}/g\n let vars = {\n username: this.username,\n }\n\n let match\n while ((match = varRe.exec(str))) {\n if (vars[match[1]]) {\n str = str.replace(match[0], vars[match[1]])\n }\n }\n\n return str\n }\n\n clearScreen() {\n this.term.clear()\n this.prompt()\n }\n\n prompt() {\n const { term } = this\n term.windowTitle(this._interpolate(this.title))\n term.bold(this._interpolate(this.promptTxt))\n\n if (!this.inputActive) {\n this.inputActive = true\n this.inputField = term.inputField(\n {\n history: this.cmdHistory,\n autoComplete: Object.keys(this.options.cmdManager.commands),\n autoCompleteHint: true,\n autoCompleteMenu: true,\n },\n (error, input) => {\n this.inputActive = false\n term.nextLine()\n\n if (error) {\n return term.error(error.message || error)\n }\n\n if (!input) {\n return this.prompt()\n }\n input[0] !== \" \" && this.cmdHistory.push(input)\n\n if (input === \"exit\") {\n // This is delayed briefly so the newline can be echoed to the client, creating cleaner output when exiting\n setTimeout(this.close.bind(this))\n } else if (input === \"clear\") {\n this.clearScreen()\n } else if (input) {\n this.options.cmdManager\n .runCmd(input, this.username, this.cmdInterface)\n .then((output) => {\n if (typeof output !== \"string\") {\n output = JSON.stringify(output, null, \" \")\n }\n this.term(output)\n this.term.nextLine()\n this.prompt()\n })\n .catch((err) => {\n if (typeof err !== \"string\") {\n err = err.message || JSON.stringify(err, null, \" \")\n }\n this.term.red.error(err)\n this.term.nextLine()\n this.prompt()\n })\n } else {\n this.prompt()\n }\n },\n )\n }\n }\n}\n\nexport default SSHManager\n","import fs from \"fs\"\nimport scrypt from \"scrypt-kdf\"\n\nclass UserManager {\n userFile\n userFileCache = null\n userFileCreated = false\n\n constructor(options) {\n this.userFile = options.userFile\n\n if (!options.silent) {\n this.getUsers().then((users) => {\n const usernames = Object.keys(users)\n if (!usernames.length) {\n if (process.env.NODE_ENV === \"production\") {\n console.warn(\n `No users have been created and you are running in production mode so you will not be able to login.\\n`,\n )\n } else {\n console.warn(\n `It seems there are no users and you are not running in production mode so you will not be able to login. This is probably a bug. Please report it!\\n`,\n )\n }\n } else if (usernames.length === 1 && usernames[0] === \"guest\") {\n console.warn(\n `[WARN] No users detected. You can login with default user 'guest' and password 'guest' when prompted.\\n` +\n `This user will be disabled when you create a user account.\\n`,\n )\n }\n })\n }\n }\n\n async getUsers() {\n if (this.userFileCache) {\n return this.userFileCache\n }\n\n try {\n if (!this.userFile) {\n let err = new Error(`No user file specified`)\n err.code = \"ENOENT\"\n throw err\n }\n\n this.userFileCache = JSON.parse(fs.readFileSync(this.userFile).toString(\"base64\"))\n this.userFileCreated = true\n setTimeout(() => {\n this.userFileCache = null\n }, 5000)\n\n return this.userFileCache\n } catch (err) {\n if (err.code === \"ENOENT\") {\n return process.env.NODE_ENV === \"production\"\n ? {}\n : {\n guest: {\n password:\n \"c2NyeXB0AA8AAAAIAAAAAc8D4r96lep3aBQSBeAqf0a+9MX6KyB6zKTF9Nk3ruTPIXrzy8IM7vjSLpIKuVZMNTZZ72CMqKp/PQmnyXmf7wGup1bWBGSwoV5ymA72ZzZg\",\n },\n }\n }\n throw err\n }\n }\n\n _writeFile(data) {\n this.userFileCache = null\n fs.writeFileSync(this.userFile, JSON.stringify(data, null, \" \"))\n this.userFileCreated = true\n }\n\n async _hashPassword(passwd) {\n return (await scrypt.kdf(passwd, { logN: 15, r: 8, p: 1 })).toString(\"base64\")\n }\n\n async _verifyPassword(actualPasswd, testPasswd) {\n return scrypt.verify(Buffer.from(actualPasswd, \"base64\"), testPasswd)\n }\n\n async createUser(username, password) {\n if (!this.userFile) {\n throw new Error(`No user file found. Did you forget to set the 'dataDir' option?`)\n }\n\n const users = await this.getUsers()\n if (users[username]) {\n throw new Error(`User '${username}' already exists`)\n }\n\n if (!this.userFileCreated) {\n delete users[\"guest\"]\n }\n\n users[username] = {\n password: await this._hashPassword(password),\n }\n this._writeFile(users)\n }\n\n async deleteUser(username) {\n if (!this.userFile) {\n throw new Error(`No user file found. Did you forget to set the 'dataDir' option?`)\n }\n\n const users = await this.getUsers()\n if (!users[username]) {\n throw new Error(`User '${username}' does not exist`)\n }\n\n if (!this.userFileCreated) {\n throw new Error(`User file has not been created`)\n }\n\n delete users[username]\n this._writeFile(users)\n }\n\n async setPassword(username, password) {\n if (!this.userFile) {\n throw new Error(`No user file found. Did you forget to set the 'dataDir' option?`)\n }\n\n const users = await this.getUsers()\n users[username].password = await this._hashPassword(password)\n this._writeFile(users)\n }\n\n async getUserData(username) {\n const users = await this.getUsers()\n if (!users[username]) {\n throw new Error(`User '${username}' does not exist`)\n }\n\n return users[username]\n }\n\n async verifyUser(username, passwd) {\n const userData = await this.getUserData(username)\n return this._verifyPassword(userData.password, passwd)\n }\n}\n\nexport default UserManager\n","import commonUtils from \"../lib/common-utils\"\nimport sourceMapSupport from \"source-map-support\"\n\nexport default Object.assign(\n {\n parseCommand(str) {\n const reg = /\"(.*?)\"|'(.*?)'|`(.*?)`|([^\\s\"]+)/gi\n const arr = []\n let match\n\n do {\n match = reg.exec(str)\n if (match !== null) {\n arr.push(match[1] || match[2] || match[3] || match[4])\n }\n } while (match !== null)\n\n return arr\n },\n\n getStack() {\n let prep = Error.prepareStackTrace\n let limit = Error.stackTraceLimit\n Error.prepareStackTrace = (error, trace) => trace.map(sourceMapSupport.wrapCallSite)\n Error.stackTraceLimit = 30\n\n let stack = new Error().stack\n Error.prepareStackTrace = prep\n Error.stackTraceLimit = limit\n\n return stack.slice(1)\n },\n\n getPromiseObj() {\n const pobj = {}\n pobj.promise = new Promise((resolve, reject) => {\n Object.assign(pobj, {\n resolve,\n reject,\n })\n })\n return pobj\n },\n },\n commonUtils,\n)\n","module.exports = require(\"@babel/runtime/helpers/asyncToGenerator\");","module.exports = require(\"@babel/runtime/helpers/classCallCheck\");","module.exports = require(\"@babel/runtime/helpers/createClass\");","module.exports = require(\"@babel/runtime/helpers/defineProperty\");","module.exports = require(\"@babel/runtime/helpers/typeof\");","module.exports = require(\"@babel/runtime/regenerator\");","module.exports = require(\"events\");","module.exports = require(\"keypair\");","module.exports = require(\"lodash\");","module.exports = require(\"minimist\");","module.exports = require(\"node-pty\");","module.exports = require(\"scrypt-kdf\");","module.exports = require(\"socket.io\");","module.exports = require(\"source-map-support\");","module.exports = require(\"ssh2\");","module.exports = require(\"terminal-kit\");","module.exports = require(\"fs\");","module.exports = require(\"fs/promises\");","module.exports = require(\"http\");","module.exports = require(\"os\");","module.exports = require(\"path\");","module.exports = require(\"tty\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import os from \"os\"\nimport fs from \"fs\"\nimport path from \"path\"\nimport { EventEmitter } from \"events\"\nimport _ from \"lodash\"\nimport keypair from \"keypair\"\nimport cycle from \"../lib/cycle\"\nimport bunyanStream from \"./bunyan-stream\"\nimport setupServer from \"./setup-server\"\nimport setupSocket from \"./setup-socket\"\nimport SSHMan from \"./ssh-manager\"\nimport CommandManager from \"./command-manager\"\nimport UserManager from \"./user-manager\"\nimport utils from \"./utils\"\n\nconst NODE_ENV = process.env.NODE_ENV\nconst DEFAULT_PORT = 50500\nconst CONSOLE = _.mapValues(console)\nconst ConsoleEvent = new EventEmitter()\nconst HANDLE_TYPES = [\"log\", \"info\", \"warn\", \"error\", \"dir\"]\n\nlet attachedCount = 0\n\nclass NodeMonkey {\n msgBuffer = []\n BUNYAN_STREAM = bunyanStream(this)\n _attached = false\n _typeHandlers = {}\n\n constructor(opts) {\n const options = (this.options = _.merge(\n {\n server: {\n // You can provide your own server and Node Monkey will use it instead of creating its own.\n // However, this MUST be the underlying http server instance, not the express/restify/whatever app.\n server: null,\n\n host: \"0.0.0.0\",\n port: DEFAULT_PORT,\n silent: false,\n bufferSize: 50,\n attachOnStart: true,\n\n // Only takes effect when Node Monkey is attached to the console\n disableLocalOutput: false,\n },\n client: {\n showCallerInfo: NODE_ENV === \"production\" ? false : true,\n convertStyles: true,\n },\n ssh: {\n enabled: false,\n host: \"0.0.0.0\",\n port: DEFAULT_PORT + 1,\n title: `Node Monkey on ${os.hostname()}`,\n prompt: `[Node Monkey] {@username}@${os.hostname()}:`,\n },\n\n // Needed for storing things like user files and SSH host keys\n dataDir: null,\n },\n opts,\n ))\n\n this._createLocal()\n this._createRemote()\n this._setupCmdMan()\n this._setupUserManager()\n this._setupServer()\n this._setupSSH()\n\n if (options.server.attachOnStart) {\n this.attachConsole()\n }\n\n // TODO: Deprecated. Remove everything after this line by v1.0.0\n console.local = _.mapValues(this.local, (fn, method) => {\n const localFn = (...args) => {\n return fn(...args)\n }\n Object.defineProperty(localFn, \"name\", { value: method })\n return localFn\n })\n console.remote = _.mapValues(this.remote, (fn, method) => {\n const remoteFn = (...args) => {\n return fn({ callerStackDistance: 2 }, ...args)\n }\n Object.defineProperty(remoteFn, \"name\", { value: method })\n return remoteFn\n })\n }\n\n _getServerProtocol(server) {\n if (server._events && server._events.tlsClientError) {\n return \"https\"\n }\n return \"http\"\n }\n\n getServerPaths() {\n const resolve = __non_webpack_require__ ? __non_webpack_require__.resolve : resolve\n const basePath = path.normalize(`${__dirname}/../dist`)\n const sioBasePath = path.normalize(`${path.dirname(resolve(\"socket.io\"))}/../client-dist`)\n\n const files = {\n \"/\": `${basePath}/index.html`,\n \"/monkey.js\": `${basePath}/monkey.js`,\n \"/monkey.js.map\": `${basePath}/monkey.js.map`,\n }\n\n fs.readdirSync(sioBasePath).forEach(fileName => {\n files[`/monkey.io-client/${fileName}`] = `${sioBasePath}/${fileName}`\n })\n\n return files\n }\n\n _displayServerWelcome() {\n if (!this.options.server.silent) {\n const server = this.serverApp\n const address = typeof server.address === \"function\" && server.address()\n if (server.listening && address) {\n const proto = this._getServerProtocol(server)\n const { address, port } = server.address()\n this.local.log(`Node Monkey listening at ${proto}://${address}:${port}`)\n } else {\n server.on(\"listening\", this._displayServerWelcome.bind(this))\n }\n }\n }\n\n _setupCmdMan() {\n this._cmdMan = new CommandManager({\n write: (val, opts) => {\n console.log(val)\n },\n writeLn: (val, opts) => {\n console.log(val)\n },\n error: (val, opts) => {\n console.error(val)\n },\n prompt: (promptTxt, opts, cb) => {\n if (typeof opts === \"function\") {\n cb = opts\n opts = undefined\n }\n opts || (opts = {})\n\n console.warn(\"Prompt not implemented\")\n },\n })\n\n this.addCmd = this._cmdMan.addCmd\n this.runCmd = this._cmdMan.runCmd\n }\n\n _setupUserManager() {\n const dataDir = this.options.dataDir\n const userMan = (this.userManager = new UserManager({\n userFile: dataDir ? `${dataDir}/users.json` : undefined,\n silent: this.options.server.silent,\n }))\n\n this.addCmd(\"showusers\", async (opts, term) => {\n const users = await userMan.getUsers()\n term.writeLn(Object.keys(users).join(\"\\n\"))\n })\n\n this.addCmd(\"adduser\", (opts, term, done) => {\n const args = opts.args\n const username = args._[0]\n\n if (!username) {\n term.error(`You must specify a username`)\n return done()\n }\n\n term.prompt(\"Password: \", { hideInput: true }, (error, password) => {\n term.writeLn()\n term.prompt(\"Again: \", { hideInput: true }, (error, passwordAgain) => {\n term.writeLn()\n if (password === passwordAgain) {\n userMan\n .createUser(username, password)\n .then(() => term.write(`Created user '${username}'`))\n .catch(term.error)\n .then(done)\n } else {\n term.error(\"Passwords do not match\")\n done()\n }\n })\n })\n })\n\n this.addCmd(\"deluser\", (opts, term, done) => {\n const args = opts.args\n const username = args._[0]\n\n if (!username) {\n term.error(`You must specify a username`)\n return done()\n }\n\n userMan\n .deleteUser(username)\n .then(() => term.write(`Deleted user '${username}'`))\n .catch(term.error)\n .then(done)\n })\n\n this.addCmd(\"passwd\", (opts, term, done) => {\n const args = opts.args\n const user = opts.username\n\n term.prompt(\"Current password: \", { hideInput: true }, (error, curpwd) => {\n term.writeLn()\n userMan.verifyUser(user, curpwd).then((matches) => {\n if (matches) {\n term.prompt(\"Password: \", { hideInput: true }, (error, password) => {\n term.writeLn()\n term.prompt(\"Again: \", { hideInput: true }, (error, passwordAgain) => {\n term.writeLn()\n if (password === passwordAgain) {\n userMan\n .setPassword(user, password)\n .then(() => term.write(`Updated password for ${user}`))\n .catch(term.error)\n .then(done)\n } else {\n term.error(\"Passwords do not match\")\n done()\n }\n })\n })\n } else {\n term.error(\"Incorrect password\")\n done()\n }\n })\n })\n })\n }\n\n _setupServer() {\n const options = this.options\n const srvOpts = options.server\n\n if (srvOpts.server) {\n this.serverApp = srvOpts.server\n } else {\n this.serverApp = setupServer({\n filePaths: this.getServerPaths(),\n })\n this.serverApp.listen(srvOpts.port, srvOpts.host)\n }\n\n this._displayServerWelcome()\n this.remoteClients = setupSocket({\n server: this.serverApp,\n cmdManager: this._cmdMan,\n userManager: this.userManager,\n onAuth: this._sendMessages.bind(this),\n clientSettings: options.client,\n })\n }\n\n _setupSSH() {\n const sshOpts = this.options.ssh\n if (sshOpts.enabled) {\n const dataDir = this.options.dataDir\n if (!dataDir) {\n throw new Error(`Options 'dataDir' is required to enable SSH`)\n }\n\n // Get host keys\n const files = fs.readdirSync(dataDir)\n const keyRe = /\\.key$/\n let hostKeys = []\n for (let file of files) {\n if (keyRe.test(file)) {\n hostKeys.push(`${dataDir}/${file}`)\n }\n }\n\n if (!hostKeys.length) {\n console.log(\"No SSH host key found. Generating new host key...\")\n let keys = keypair()\n fs.writeFileSync(`${dataDir}/rsa.key`, keys.private)\n fs.writeFileSync(`${dataDir}/rsa.key.pub`, keys.public)\n hostKeys = [`${dataDir}/rsa.key`]\n }\n\n this.SSHMan = new SSHMan({\n monkey: this,\n userManager: this.userManager,\n cmdManager: this._cmdMan,\n silent: this.options.server.silent,\n host: sshOpts.host,\n port: sshOpts.port,\n title: _.result(sshOpts, \"title\"),\n prompt: _.result(sshOpts, \"prompt\"),\n hostKeys,\n })\n }\n }\n\n // TODO: This whole process of trying to identify the true source of the call is so fucking messy and fragile. Need to think\n // of a better way to identify the call source and rewrite all this shitty code handling it right now.\n _getCallerInfo(callerStackDistance) {\n if (this.options.client.showCallerInfo) {\n const stack = utils.getStack().map((frame) => {\n return {\n functionName: frame.getFunctionName(),\n methodName: frame.getMethodName(),\n fileName: frame.getFileName(),\n lineNumber: frame.getLineNumber(),\n columnNumber: frame.getColumnNumber(),\n }\n })\n\n let caller = stack.find((frame, index, stack) => {\n // We're either looking for a console method call or a bunyan log call. This logic will break down if method names change.\n const twoBack = stack[index - 2]\n const sixBack = stack[index - 4]\n if (twoBack && twoBack.functionName === \"Logger._emit\" && /\\/bunyan\\.js$/.test(twoBack.fileName)) {\n return true\n } else if (twoBack && sixBack && twoBack.methodName === \"emit\" && sixBack.methodName === \"_sendMessage\") {\n return true\n }\n })\n\n if (!caller && typeof callerStackDistance === \"number\") {\n caller = stack[callerStackDistance]\n }\n\n if (caller) {\n return {\n caller: caller.functionName || caller.methodName,\n file: caller.fileName,\n line: caller.lineNumber,\n column: caller.columnNumber,\n }\n }\n }\n }\n\n _sendMessage(info, callerStackDistance) {\n this.msgBuffer.push({\n method: info.method,\n args: info.args,\n callerInfo: info.callerInfo || this._getCallerInfo(callerStackDistance + 1),\n })\n if (this.msgBuffer.length > this.options.server.bufferSize) {\n this.msgBuffer.shift()\n }\n this._sendMessages()\n }\n\n _sendMessages() {\n const remoteClients = this.remoteClients\n if (_.size(remoteClients.adapter.rooms.get(\"authed\"))) {\n _.each(this.msgBuffer, (info) => {\n remoteClients.to(\"authed\").emit(\"console\", cycle.decycle(info))\n })\n\n this.msgBuffer = []\n }\n }\n\n _createLocal() {\n // NOTE: The console functions here should not be wrapped since these values are used to restore the defaults\n // when `detachConsole()` is called.\n this.local = CONSOLE\n }\n\n _createRemote() {\n let remote = (this.remote = {})\n HANDLE_TYPES.forEach((method) => {\n this.remote[method] = (...args) => {\n const stackdist = args[0] && args[0].callerStackDistance\n this._sendMessage(\n {\n method,\n args: stackdist ? args.slice(1) : args,\n },\n stackdist ? stackdist + 1 : 2,\n )\n }\n Object.defineProperty(remote[method], \"name\", { value: method })\n })\n }\n\n attachConsole(disableLocalOutput) {\n if (this._attached) {\n return\n }\n\n if (!attachedCount) {\n // If this function is in the process of handling the log call we will try and prevent potential infinite recursion\n let handlersActive = 0\n HANDLE_TYPES.forEach((method) => {\n console[method] = (...args) => {\n if (handlersActive) {\n return this.local[method](...args)\n }\n\n ++handlersActive\n ConsoleEvent.emit(method, ...args)\n --handlersActive\n }\n Object.defineProperty(console[method], \"name\", { value: method })\n })\n }\n\n ++attachedCount\n\n const serverOptions = this.options.server\n disableLocalOutput = disableLocalOutput !== undefined ? disableLocalOutput : serverOptions.disableLocalOutput\n\n _.each(this.remote, (fn, method) => {\n const handler = (this._typeHandlers[method] = (...args) => {\n fn({ callerStackDistance: 4 }, ...args)\n\n if (!disableLocalOutput) {\n this.local[method](...args)\n }\n })\n Object.defineProperty(handler, \"name\", { value: method })\n\n ConsoleEvent.on(method, handler)\n })\n\n this._attached = true\n }\n\n detachConsole() {\n Object.assign(console, this.local)\n this._attached = false\n --attachedCount\n\n HANDLE_TYPES.forEach((method) => {\n ConsoleEvent.removeListener(method, this._typeHandlers[method])\n delete this._typeHandlers[method]\n })\n }\n\n stop() {\n this.serverApp.close()\n }\n}\n\nconst instances = {}\nlet lastPort = DEFAULT_PORT - 1\nexport default function createInst(options, name = \"default\") {\n if (typeof options === \"string\") {\n name = options\n options = undefined\n }\n\n if (!instances[name]) {\n options || (options = {})\n let port = _.get(options, \"server.port\")\n if (port) {\n lastPort = +port\n } else {\n _.set(options, \"server.port\", ++lastPort)\n _.set(options, \"ssh.port\", ++lastPort)\n }\n instances[name] = new NodeMonkey(options)\n }\n\n return instances[name]\n}\n\n// Just exporting in case someone needs to wrap this or access the internals for some reason\nexport { NodeMonkey }\n"],"names":["root","factory","exports","module","define","amd","global","isObject","value","type","invert","obj","inverted","k","hasOwnProperty","origJSON","JSON","decycle","object","replacer","objects","paths","derez","path","i","nu","undefined","Boolean","Date","Number","RegExp","String","indexOf","$ref","push","Array","isArray","forEach","element","Object","keys","name","stringify","retrocycle","$","px","rez","test","eval","item","levelFromName","trace","debug","info","warn","error","fatal","nameFromLevel","utils","inst","write","rec","parse","_sendMessage","method","level","args","msg","CommandInterface","commandManager","writeFn","writeLnFn","errorFn","promptFn","val","opts","console","log","promptTxt","cb","this","writeLn","prompt","CommandManager","cmdName","exec","commands","Error","rawCommand","asUser","io","parsed","cmd","minimist","slice","doneP","result","username","resolve","then","promise","extMap","html","js","json","map","loadedFiles","Map","loadFile","file","has","readFile","set","get","options","filePaths","server","createServer","req","res","filePath","url","contentType","extname","content","setHeader","writeHead","end","socketio","attach","autoUnref","ns","of","on","socket","cmdInterface","emit","clientSettings","creds","userManager","verifyUser","password","join","onAuth","catch","err","cmdId","command","cmdManager","promptId","prompts","pid","response","createCmdInterface","runCmd","output","message","_","handlers","handler","event","SSHManager","host","port","title","silent","Set","assign","ssh2","hostKeys","fs","onClient","bind","monkey","listen","local","address","clients","c","close","client","add","SSHClient","onClose","delete","session","stream","pty","term","ptyInfo","inputActive","cmdHistory","onReady","bold","newline","nextLine","red","inputOpts","hideInput","echo","inputField","style","ctx","accept","reject","once","_resize","_initCmdMan","_initStream","_initPty","_initTerm","matches","data","clearScreen","abort","getInput","length","setTimeout","stdout","isTTY","setRawMode","newPty","nativePty","cols","rows","master_fd","master","slave_fd","slave","tty","defineProperty","enumerable","stdin","pipe","termkit","stderr","generic","appName","isSSH","onKey","windowTitle","_interpolate","str","match","varRe","vars","replace","clear","history","autoComplete","autoCompleteHint","autoCompleteMenu","input","UserManager","userFile","getUsers","users","usernames","process","env","NODE_ENV","userFileCache","code","toString","userFileCreated","guest","passwd","scrypt","logN","r","p","actualPasswd","testPasswd","Buffer","from","_hashPassword","_writeFile","getUserData","userData","_verifyPassword","parseCommand","reg","arr","getStack","prep","prepareStackTrace","limit","stackTraceLimit","sourceMapSupport","stack","getPromiseObj","pobj","Promise","commonUtils","require","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","n","getter","__esModule","d","a","definition","key","o","prop","prototype","call","Symbol","toStringTag","DEFAULT_PORT","CONSOLE","ConsoleEvent","EventEmitter","HANDLE_TYPES","attachedCount","NodeMonkey","bunyanStream","bufferSize","attachOnStart","disableLocalOutput","showCallerInfo","convertStyles","ssh","enabled","os","dataDir","_createLocal","_createRemote","_setupCmdMan","_setupUserManager","_setupServer","_setupSSH","attachConsole","fn","localFn","remote","remoteFn","callerStackDistance","_events","tlsClientError","__non_webpack_require__","basePath","__dirname","sioBasePath","files","fileName","serverApp","listening","proto","_getServerProtocol","_displayServerWelcome","_cmdMan","addCmd","userMan","done","passwordAgain","createUser","deleteUser","user","curpwd","setPassword","srvOpts","setupServer","getServerPaths","remoteClients","setupSocket","_sendMessages","sshOpts","keyRe","keypair","private","public","SSHMan","frame","functionName","getFunctionName","methodName","getMethodName","getFileName","lineNumber","getLineNumber","columnNumber","getColumnNumber","caller","find","index","twoBack","sixBack","line","column","msgBuffer","callerInfo","_getCallerInfo","shift","adapter","rooms","to","cycle","stackdist","_attached","handlersActive","serverOptions","_typeHandlers","removeListener","instances","lastPort","createInst"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"server.js","mappings":"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","sources":["webpack://NodeMonkey/webpack/universalModuleDefinition","webpack://NodeMonkey/./src/lib/common-utils.js","webpack://NodeMonkey/./src/lib/cycle.js","webpack://NodeMonkey/./src/server/bunyan-stream.js","webpack://NodeMonkey/./src/server/command-interface.js","webpack://NodeMonkey/./src/server/command-manager.js","webpack://NodeMonkey/./src/server/setup-server.js","webpack://NodeMonkey/./src/server/setup-socket.js","webpack://NodeMonkey/./src/server/ssh-manager.js","webpack://NodeMonkey/./src/server/user-manager.js","webpack://NodeMonkey/./src/server/utils.js","webpack://NodeMonkey/external commonjs \"@babel/runtime/helpers/asyncToGenerator\"","webpack://NodeMonkey/external commonjs \"@babel/runtime/helpers/classCallCheck\"","webpack://NodeMonkey/external commonjs \"@babel/runtime/helpers/createClass\"","webpack://NodeMonkey/external commonjs \"@babel/runtime/helpers/defineProperty\"","webpack://NodeMonkey/external commonjs \"@babel/runtime/helpers/typeof\"","webpack://NodeMonkey/external commonjs \"@babel/runtime/regenerator\"","webpack://NodeMonkey/external commonjs \"events\"","webpack://NodeMonkey/external commonjs \"keypair\"","webpack://NodeMonkey/external commonjs \"lodash\"","webpack://NodeMonkey/external commonjs \"minimist\"","webpack://NodeMonkey/external commonjs \"node-pty\"","webpack://NodeMonkey/external commonjs \"scrypt-kdf\"","webpack://NodeMonkey/external commonjs \"socket.io\"","webpack://NodeMonkey/external commonjs \"source-map-support\"","webpack://NodeMonkey/external commonjs \"ssh2\"","webpack://NodeMonkey/external commonjs \"terminal-kit\"","webpack://NodeMonkey/external node-commonjs \"fs\"","webpack://NodeMonkey/external node-commonjs \"fs/promises\"","webpack://NodeMonkey/external node-commonjs \"http\"","webpack://NodeMonkey/external node-commonjs \"os\"","webpack://NodeMonkey/external node-commonjs \"path\"","webpack://NodeMonkey/external node-commonjs \"tty\"","webpack://NodeMonkey/webpack/bootstrap","webpack://NodeMonkey/webpack/runtime/compat get default export","webpack://NodeMonkey/webpack/runtime/define property getters","webpack://NodeMonkey/webpack/runtime/hasOwnProperty shorthand","webpack://NodeMonkey/webpack/runtime/make namespace object","webpack://NodeMonkey/./src/server/index.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"NodeMonkey\"] = factory();\n\telse\n\t\troot[\"NodeMonkey\"] = factory();\n})(global, () => {\nreturn ","export default {\n isObject(value) {\n let type = typeof value\n return !!value && (type == \"object\" || type == \"function\")\n },\n\n invert(obj) {\n let inverted = {}\n for (let k in obj) {\n if (obj.hasOwnProperty(k)) {\n inverted[obj[k]] = k\n }\n }\n\n return inverted\n },\n}\n","/*\n cycle.js\n 2016-05-01\n\n Public Domain.\n\n NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n\n This code should be minified before deployment.\n See http://javascript.crockford.com/jsmin.html\n\n USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n NOT CONTROL.\n*/\n\n/*jslint eval, for */\n\n/*property\n $ref, decycle, forEach, isArray, keys, length, push, retrocycle, stringify,\n test\n*/\n\nlet origJSON = global.JSON,\n JSON = {}\nexport default JSON\n\nif (typeof JSON.decycle !== \"function\") {\n JSON.decycle = function decycle(object, replacer) {\n \"use strict\"\n\n // Make a deep copy of an object or array, assuring that there is at most\n // one instance of each object or array in the resulting structure. The\n // duplicate references (which might be forming cycles) are replaced with\n // an object of the form\n\n // {\"$ref\": PATH}\n\n // where the PATH is a JSONPath string that locates the first occurance.\n\n // So,\n\n // var a = [];\n // a[0] = a;\n // return JSON.stringify(JSON.decycle(a));\n\n // produces the string '[{\"$ref\":\"$\"}]'.\n\n // If a replacer function is provided, then it will be called for each value.\n // A replacer function receives a value and returns a replacement value.\n\n // JSONPath is used to locate the unique object. $ indicates the top level of\n // the object or array. [NUMBER] or [STRING] indicates a child element or\n // property.\n\n var objects = [] // Keep a reference to each unique object or array\n var paths = [] // Keep the path to each unique object or array\n\n return (function derez(value, path) {\n // The derez function recurses through the object, producing the deep copy.\n\n var i // The loop counter\n var nu // The new object or array\n\n // If a replacer function was provided, then call it to get a replacement value.\n\n if (replacer !== undefined) {\n value = replacer(value)\n }\n\n // typeof null === \"object\", so go on if this value is really an object but not\n // one of the weird builtin objects.\n\n if (\n typeof value === \"object\" &&\n value !== null &&\n !(value instanceof Boolean) &&\n !(value instanceof Date) &&\n !(value instanceof Number) &&\n !(value instanceof RegExp) &&\n !(value instanceof String)\n ) {\n // If the value is an object or array, look to see if we have already\n // encountered it. If so, return a {\"$ref\":PATH} object. This is a hard\n // linear search that will get slower as the number of unique objects grows.\n // Someday, this should be replaced with an ES6 WeakMap.\n\n i = objects.indexOf(value)\n if (i >= 0) {\n return { $ref: paths[i] }\n }\n\n // Otherwise, accumulate the unique value and its path.\n\n objects.push(value)\n paths.push(path)\n\n // If it is an array, replicate the array.\n\n if (Array.isArray(value)) {\n nu = []\n value.forEach(function (element, i) {\n nu[i] = derez(element, path + \"[\" + i + \"]\")\n })\n } else {\n // If it is an object, replicate the object.\n\n nu = {}\n Object.keys(value).forEach(function (name) {\n nu[name] = derez(value[name], path + \"[\" + JSON.stringify(name) + \"]\")\n })\n }\n return nu\n }\n return value\n })(object, \"$\")\n }\n}\n\nif (typeof JSON.retrocycle !== \"function\") {\n JSON.retrocycle = function retrocycle($) {\n \"use strict\"\n\n // Restore an object that was reduced by decycle. Members whose values are\n // objects of the form\n // {$ref: PATH}\n // are replaced with references to the value found by the PATH. This will\n // restore cycles. The object will be mutated.\n\n // The eval function is used to locate the values described by a PATH. The\n // root object is kept in a $ variable. A regular expression is used to\n // assure that the PATH is extremely well formed. The regexp contains nested\n // * quantifiers. That has been known to have extremely bad performance\n // problems on some browsers for very long strings. A PATH is expected to be\n // reasonably short. A PATH is allowed to belong to a very restricted subset of\n // Goessner's JSONPath.\n\n // So,\n // var s = '[{\"$ref\":\"$\"}]';\n // return JSON.retrocycle(JSON.parse(s));\n // produces an array containing a single element which is the array itself.\n\n var px = /^\\$(?:\\[(?:\\d+|\\\"(?:[^\\\\\\\"\\u0000-\\u001f]|\\\\([\\\\\\\"\\/bfnrt]|u[0-9a-zA-Z]{4}))*\\\")\\])*$/\n\n ;(function rez(value) {\n // The rez function walks recursively through the object looking for $ref\n // properties. When it finds one that has a value that is a path, then it\n // replaces the $ref object with a reference to the value that is found by\n // the path.\n\n if (value && typeof value === \"object\") {\n if (Array.isArray(value)) {\n value.forEach(function (element, i) {\n if (typeof element === \"object\" && element !== null) {\n var path = element.$ref\n if (typeof path === \"string\" && px.test(path)) {\n value[i] = eval(path)\n } else {\n rez(element)\n }\n }\n })\n } else {\n Object.keys(value).forEach(function (name) {\n var item = value[name]\n if (typeof item === \"object\" && item !== null) {\n var path = item.$ref\n if (typeof path === \"string\" && px.test(path)) {\n value[name] = eval(path)\n } else {\n rez(item)\n }\n }\n })\n }\n }\n })($)\n return $\n }\n}\n\nJSON = origJSON\n","import utils from \"./utils\"\n\nconst BUNYAN_TRACE = 10\nconst BUNYAN_DEBUG = 20\nconst BUNYAN_INFO = 30\nconst BUNYAN_WARN = 40\nconst BUNYAN_ERROR = 50\nconst BUNYAN_FATAL = 60\n\nlet levelFromName = {\n trace: BUNYAN_TRACE,\n debug: BUNYAN_DEBUG,\n info: BUNYAN_INFO,\n warn: BUNYAN_WARN,\n error: BUNYAN_ERROR,\n fatal: BUNYAN_FATAL,\n}\nlet nameFromLevel = utils.invert(levelFromName)\n\nexport default (inst) => {\n return {\n write: function (rec) {\n rec = JSON.parse(rec)\n inst._sendMessage({\n method: nameFromLevel[rec.level] || \"info\",\n args: [rec.msg, rec],\n })\n },\n }\n}\n","class CommandInterface {\n commandManager = null\n\n write = (val, opts) => {\n console.log(val)\n }\n\n writeLn = (val, opts) => {\n console.log(val)\n }\n\n error = (val, opts) => {\n console.error(val)\n }\n\n prompt = (promptTxt, opts, cb) => {\n if (typeof opts === \"function\") {\n cb = opts\n opts = undefined\n }\n opts || (opts = {})\n\n console.warn(\"Prompt not implemented\")\n }\n\n constructor(commandManager, writeFn, writeLnFn, errorFn, promptFn) {\n this.commandManager = commandManager\n this.write = writeFn\n this.writeLn = writeLnFn\n this.error = errorFn\n this.prompt = promptFn\n }\n}\n\nexport default CommandInterface\n","import _ from \"lodash\"\nimport utils from \"./utils\"\nimport minimist from \"minimist\"\n\nclass CommandManager {\n commands = {}\n\n addCmd = (cmdName, opts, exec) => {\n if (this.commands[cmdName]) {\n throw new Error(`'${cmdName}' is already registered as a command`)\n }\n\n if (typeof opts === \"function\") {\n exec = opts\n opts = {}\n }\n\n this.commands[cmdName] = {\n opts,\n exec,\n }\n }\n\n runCmd = async (rawCommand, asUser, io) => {\n const parsed = utils.parseCommand(rawCommand)\n const cmdName = parsed[0]\n const cmd = this.commands[cmdName]\n\n if (!asUser) {\n throw new Error(`Missing user context for command '${cmdName}'`)\n }\n\n if (!cmd) {\n throw new Error(`Command not found: '${cmdName}'`)\n }\n\n const args = minimist(parsed.slice(1))\n const doneP = utils.getPromiseObj()\n const result = cmd.exec(\n {\n args,\n username: asUser,\n },\n {\n write: io.write,\n writeLn: io.writeLn,\n error: io.error,\n prompt: io.prompt,\n },\n doneP.resolve,\n )\n\n return result.then ? result : doneP.promise\n }\n}\n\nexport default CommandManager\n","import { extname, } from \"path\"\nimport { createServer, } from \"http\"\nimport { readFile, } from \"fs/promises\"\n\nconst extMap = {\n html: \"text/html\",\n js: \"application/javascript\",\n json: \"application/json\",\n map: \"application/json\",\n}\n\nconst loadedFiles = new Map()\nasync function loadFile(file) {\n if (!loadedFiles.has(file)) {\n loadedFiles.set(file, await readFile(file))\n }\n return loadedFiles.get(file)\n}\n\nexport default (options) => {\n const filePaths = options.filePaths || {}\n const server = createServer(async (req, res) => {\n const filePath = filePaths[req.url]\n if (filePath) {\n const contentType = extMap[(extname(filePath) || \"\").slice(1)] || \"text/plain\"\n const content = await loadFile(filePath)\n\n res.setHeader(\"Content-Type\", contentType)\n res.writeHead(200)\n res.end(content)\n } else {\n res.writeHead(404)\n res.end()\n }\n })\n\n return server\n}\n","import _ from \"lodash\"\nimport socketio from \"socket.io\"\nimport CommandInterface from \"./command-interface\"\n\nexport default (options) => {\n const io = socketio()\n io.attach(options.server, {\n path: \"/monkey.io\",\n autoUnref: true,\n })\n\n const ns = io.of(\"/nm\")\n ns.on(\"connection\", (socket) => {\n let cmdInterface = null\n socket.emit(\"settings\", options.clientSettings)\n socket.emit(\"auth\")\n\n socket.on(\"auth\", (creds) => {\n options.userManager\n .verifyUser(creds.username, creds.password)\n .then((result) => {\n socket.emit(\"authResponse\", result, result ? undefined : \"Incorrect password\")\n if (result) {\n socket.username = creds.username\n socket.join(\"authed\")\n if (options.onAuth) {\n options.onAuth(socket)\n }\n }\n })\n .catch((err) => {\n socket.emit(\"authResponse\", false, err)\n })\n })\n\n socket.on(\"cmd\", (cmdId, command) => {\n if (!socket.username) {\n socket.emit(\"cmdResponse\", cmdId, `You are not authorized to run commands`)\n return\n }\n\n if (!cmdInterface) {\n cmdInterface = createCmdInterface(options.cmdManager, socket)\n }\n\n options.cmdManager\n .runCmd(command, socket.username, cmdInterface)\n .then((output) => {\n socket.emit(\"cmdResponse\", cmdId, null, output)\n })\n .catch((err) => {\n socket.emit(\"cmdResponse\", cmdId, (err && err.message) || err, null)\n })\n })\n })\n\n _.each(options.handlers, function (handler, event) {\n io.on(event, handler)\n })\n\n return ns\n}\n\nfunction createCmdInterface(cmdManager, socket) {\n let promptId = 0\n const prompts = {}\n\n const writeFn = (val, opts) => {\n if (!val) return\n\n socket.emit(\"console\", {\n method: \"log\",\n args: [val],\n })\n }\n\n const errorFn = (val, opts) => {\n if (!val) return\n\n socket.emit(\"console\", {\n method: \"error\",\n args: [val],\n })\n }\n\n const promptFn = (promptTxt, opts, cb) => {\n if (typeof opts === \"function\") {\n cb = opts\n opts = undefined\n }\n opts || (opts = {})\n\n let pid = promptId++\n socket.emit(\"prompt\", pid, promptTxt, opts)\n\n prompts[pid] = cb\n }\n\n socket.on(\"promptResponse\", (promptId, response) => {\n const cb = prompts[promptId]\n if (cb) {\n cb(null, response)\n }\n })\n\n return new CommandInterface(cmdManager, writeFn, writeFn, errorFn, promptFn)\n}\n","import fs from \"fs\"\nimport tty from \"tty\"\nimport { native as nativePty } from \"node-pty\"\nimport ssh2 from \"ssh2\"\nimport termkit from \"terminal-kit\"\nimport CommandInterface from \"./command-interface\"\n\nclass SSHManager {\n options = {\n host: \"127.0.0.1\",\n port: 50501,\n title: \"Node Monkey\",\n prompt: \"Node Monkey:\",\n silent: false,\n }\n server\n clients = new Set()\n\n constructor(options) {\n options = Object.assign(this.options, options)\n\n this.server = new ssh2.Server(\n {\n hostKeys: options.hostKeys.map((file) => {\n return fs.readFileSync(file)\n }),\n },\n this.onClient.bind(this),\n )\n\n const monkey = this.options.monkey\n this.server.listen(options.port, options.host, function () {\n options.silent || monkey.local.log(`SSH listening on ${this.address().port}`)\n })\n }\n\n shutdown() {\n const clients = this.clients\n for (const c of clients) {\n c.write(\"\\nShutting down\")\n c.close()\n }\n }\n\n onClient(client) {\n const { cmdManager, userManager, title, prompt } = this.options\n\n this.clients.add(\n new SSHClient({\n client,\n cmdManager,\n userManager,\n title,\n prompt,\n onClose: () => this.clients.delete(client),\n }),\n )\n }\n}\n\nclass SSHClient {\n constructor(options) {\n this.options = options\n this.client = options.client\n this.cmdInterface = null\n this.userManager = options.userManager\n this.session = null\n this.stream = null\n this.pty = null\n this.term = null\n this.ptyInfo = null\n\n this.title = options.title\n this.promptTxt = `${options.prompt} `\n this.inputActive = false\n this.cmdHistory = []\n\n this.username = null\n\n this.client.on(\"authentication\", this.onAuth.bind(this))\n this.client.on(\"ready\", this.onReady.bind(this))\n this.client.on(\"end\", this.onClose.bind(this))\n }\n\n _initCmdMan() {\n const writeFn = (val, opts) => {\n opts || (opts = {})\n val || (val = \"\")\n\n if (opts.bold) {\n this.term.bold(val)\n } else {\n this.term(val)\n }\n\n if (opts.newline) {\n this.term.nextLine()\n }\n }\n\n const writeLnFn = (val, opts) => {\n opts || (opts = {})\n opts.newline = true\n writeFn(val, opts)\n }\n\n const errorFn = (val, opts) => {\n opts || (opts = {})\n\n // TODO: Apparently by sending this to stdout there is a timing issue and anything sent to\n // stdout appears before this value is sent to stderr for some reason.\n // this.term.red.error(val)\n this.term.red(val)\n\n if (opts.newline) {\n this.term.nextLine()\n }\n }\n\n const promptFn = (promptTxt = \"\", opts, cb) => {\n if (typeof opts === \"function\") {\n cb = opts\n opts = undefined\n }\n opts || (opts = {})\n\n let inputOpts = {}\n if (opts.hideInput) {\n inputOpts.echo = false\n }\n\n this.term(promptTxt)\n this.term.inputField(inputOpts, cb)\n }\n\n this.cmdInterface = new CommandInterface(this.options.cmdManager, writeFn, writeLnFn, errorFn, promptFn)\n }\n\n write(msg, { style = undefined }) {\n if (this.term) {\n if (style) {\n this.term[style](msg)\n } else {\n this.term(msg)\n }\n }\n }\n\n close() {\n if (this.stream) {\n this.stream.end()\n }\n this.onClose()\n }\n\n onAuth(ctx) {\n if (ctx.method == \"password\") {\n this.userManager\n .verifyUser(ctx.username, ctx.password)\n .then((result) => {\n if (result) {\n this.username = ctx.username\n ctx.accept()\n } else {\n ctx.reject()\n }\n })\n .catch((err) => {\n ctx.reject()\n })\n } else if (ctx.method == \"publickey\") {\n ctx.reject()\n } else {\n ctx.reject()\n }\n }\n\n onReady() {\n this.client.on(\"session\", (accept, reject) => {\n this.session = accept()\n\n this.session\n .once(\"pty\", (accept, reject, info) => {\n this.ptyInfo = info\n accept && accept()\n })\n .on(\"window-change\", (accept, reject, info) => {\n Object.assign(this.ptyInfo, info)\n this._resize()\n accept && accept()\n })\n .once(\"shell\", (accept, reject) => {\n this.stream = accept()\n this._initCmdMan()\n this._initStream()\n this._initPty()\n this._initTerm()\n })\n })\n }\n\n onClose() {\n let onClose = this.options.onClose\n onClose && onClose()\n }\n\n onKey(name, matches, data) {\n if (name === \"CTRL_L\") {\n this.clearScreen()\n } else if (name === \"CTRL_C\") {\n this.inputActive = false\n this.inputField.abort()\n this.term(\"\\n^^C\\n\")\n this.prompt()\n } else if (name === \"CTRL_D\") {\n let input = this.inputField.getInput()\n if (!input.length) {\n this.term.nextLine()\n setTimeout(() => {\n this.close()\n }, 0)\n }\n }\n }\n\n _resize({ term } = this) {\n if (term) {\n term.stdout.emit(\"resize\")\n }\n }\n\n _initStream() {\n const stream = this.stream\n stream.name = this.title\n stream.isTTY = true\n stream.setRawMode = () => {}\n stream.on(\"error\", (error) => {\n console.error(\"SSH stream error:\", error.message)\n })\n }\n\n _initPty() {\n const newPty = nativePty.open(this.ptyInfo.cols, this.ptyInfo.rows)\n this.pty = {\n master_fd: newPty.master,\n slave_fd: newPty.slave,\n master: new tty.WriteStream(newPty.master),\n slave: new tty.ReadStream(newPty.slave),\n }\n\n Object.defineProperty(this.pty.slave, \"columns\", {\n enumerable: true,\n get: () => this.ptyInfo.cols,\n })\n Object.defineProperty(this.pty.slave, \"rows\", {\n enumerable: true,\n get: () => this.ptyInfo.rows,\n })\n\n this.stream.stdin.pipe(this.pty.master)\n this.pty.master.pipe(this.stream.stdout)\n }\n\n _initTerm() {\n const term = (this.term = termkit.createTerminal({\n stdin: this.pty.slave,\n stdout: this.pty.slave,\n stderr: this.pty.slave,\n generic: this.ptyInfo.term,\n appName: this.title,\n isSSH: true,\n isTTY: true,\n }))\n\n term.on(\"key\", this.onKey.bind(this))\n term.windowTitle(this._interpolate(this.title))\n this.clearScreen()\n }\n\n _interpolate(str) {\n let varRe = /{@(.+?)}/g\n let vars = {\n username: this.username,\n }\n\n let match\n while ((match = varRe.exec(str))) {\n if (vars[match[1]]) {\n str = str.replace(match[0], vars[match[1]])\n }\n }\n\n return str\n }\n\n clearScreen() {\n this.term.clear()\n this.prompt()\n }\n\n prompt() {\n const { term } = this\n term.windowTitle(this._interpolate(this.title))\n term.bold(this._interpolate(this.promptTxt))\n\n if (!this.inputActive) {\n this.inputActive = true\n this.inputField = term.inputField(\n {\n history: this.cmdHistory,\n autoComplete: Object.keys(this.options.cmdManager.commands),\n autoCompleteHint: true,\n autoCompleteMenu: true,\n },\n (error, input) => {\n this.inputActive = false\n term.nextLine()\n\n if (error) {\n return term.error(error.message || error)\n }\n\n if (!input) {\n return this.prompt()\n }\n input[0] !== \" \" && this.cmdHistory.push(input)\n\n if (input === \"exit\") {\n // This is delayed briefly so the newline can be echoed to the client, creating cleaner output when exiting\n setTimeout(this.close.bind(this))\n } else if (input === \"clear\") {\n this.clearScreen()\n } else if (input) {\n this.options.cmdManager\n .runCmd(input, this.username, this.cmdInterface)\n .then((output) => {\n if (typeof output !== \"string\") {\n output = JSON.stringify(output, null, \" \")\n }\n this.term(output)\n this.term.nextLine()\n this.prompt()\n })\n .catch((err) => {\n if (typeof err !== \"string\") {\n err = err.message || JSON.stringify(err, null, \" \")\n }\n this.term.red.error(err)\n this.term.nextLine()\n this.prompt()\n })\n } else {\n this.prompt()\n }\n },\n )\n }\n }\n}\n\nexport default SSHManager\n","import fs from \"fs\"\nimport scrypt from \"scrypt-kdf\"\n\nclass UserManager {\n userFile\n userFileCache = null\n userFileCreated = false\n\n constructor(options) {\n this.userFile = options.userFile\n\n if (!options.silent) {\n this.getUsers().then((users) => {\n const usernames = Object.keys(users)\n if (!usernames.length) {\n if (process.env.NODE_ENV === \"production\") {\n console.warn(\n `No users have been created and you are running in production mode so you will not be able to login.\\n`,\n )\n } else {\n console.warn(\n `It seems there are no users and you are not running in production mode so you will not be able to login. This is probably a bug. Please report it!\\n`,\n )\n }\n } else if (usernames.length === 1 && usernames[0] === \"guest\") {\n console.warn(\n `[WARN] No users detected. You can login with default user 'guest' and password 'guest' when prompted.\\n` +\n `This user will be disabled when you create a user account.\\n`,\n )\n }\n })\n }\n }\n\n async getUsers() {\n if (this.userFileCache) {\n return this.userFileCache\n }\n\n try {\n if (!this.userFile) {\n let err = new Error(`No user file specified`)\n err.code = \"ENOENT\"\n throw err\n }\n\n this.userFileCache = JSON.parse(fs.readFileSync(this.userFile).toString(\"base64\"))\n this.userFileCreated = true\n setTimeout(() => {\n this.userFileCache = null\n }, 5000)\n\n return this.userFileCache\n } catch (err) {\n if (err.code === \"ENOENT\") {\n return process.env.NODE_ENV === \"production\"\n ? {}\n : {\n guest: {\n password:\n \"c2NyeXB0AA8AAAAIAAAAAc8D4r96lep3aBQSBeAqf0a+9MX6KyB6zKTF9Nk3ruTPIXrzy8IM7vjSLpIKuVZMNTZZ72CMqKp/PQmnyXmf7wGup1bWBGSwoV5ymA72ZzZg\",\n },\n }\n }\n throw err\n }\n }\n\n _writeFile(data) {\n this.userFileCache = null\n fs.writeFileSync(this.userFile, JSON.stringify(data, null, \" \"))\n this.userFileCreated = true\n }\n\n async _hashPassword(passwd) {\n return (await scrypt.kdf(passwd, { logN: 15, r: 8, p: 1 })).toString(\"base64\")\n }\n\n async _verifyPassword(actualPasswd, testPasswd) {\n return scrypt.verify(Buffer.from(actualPasswd, \"base64\"), testPasswd)\n }\n\n async createUser(username, password) {\n if (!this.userFile) {\n throw new Error(`No user file found. Did you forget to set the 'dataDir' option?`)\n }\n\n const users = await this.getUsers()\n if (users[username]) {\n throw new Error(`User '${username}' already exists`)\n }\n\n if (!this.userFileCreated) {\n delete users[\"guest\"]\n }\n\n users[username] = {\n password: await this._hashPassword(password),\n }\n this._writeFile(users)\n }\n\n async deleteUser(username) {\n if (!this.userFile) {\n throw new Error(`No user file found. Did you forget to set the 'dataDir' option?`)\n }\n\n const users = await this.getUsers()\n if (!users[username]) {\n throw new Error(`User '${username}' does not exist`)\n }\n\n if (!this.userFileCreated) {\n throw new Error(`User file has not been created`)\n }\n\n delete users[username]\n this._writeFile(users)\n }\n\n async setPassword(username, password) {\n if (!this.userFile) {\n throw new Error(`No user file found. Did you forget to set the 'dataDir' option?`)\n }\n\n const users = await this.getUsers()\n users[username].password = await this._hashPassword(password)\n this._writeFile(users)\n }\n\n async getUserData(username) {\n const users = await this.getUsers()\n if (!users[username]) {\n throw new Error(`User '${username}' does not exist`)\n }\n\n return users[username]\n }\n\n async verifyUser(username, passwd) {\n const userData = await this.getUserData(username)\n return this._verifyPassword(userData.password, passwd)\n }\n}\n\nexport default UserManager\n","import commonUtils from \"../lib/common-utils\"\nimport sourceMapSupport from \"source-map-support\"\n\nexport default Object.assign(\n {\n parseCommand(str) {\n const reg = /\"(.*?)\"|'(.*?)'|`(.*?)`|([^\\s\"]+)/gi\n const arr = []\n let match\n\n do {\n match = reg.exec(str)\n if (match !== null) {\n arr.push(match[1] || match[2] || match[3] || match[4])\n }\n } while (match !== null)\n\n return arr\n },\n\n getStack() {\n let prep = Error.prepareStackTrace\n let limit = Error.stackTraceLimit\n Error.prepareStackTrace = (error, trace) => trace.map(sourceMapSupport.wrapCallSite)\n Error.stackTraceLimit = 30\n\n let stack = new Error().stack\n Error.prepareStackTrace = prep\n Error.stackTraceLimit = limit\n\n return stack.slice(1)\n },\n\n getPromiseObj() {\n const pobj = {}\n pobj.promise = new Promise((resolve, reject) => {\n Object.assign(pobj, {\n resolve,\n reject,\n })\n })\n return pobj\n },\n },\n commonUtils,\n)\n","module.exports = require(\"@babel/runtime/helpers/asyncToGenerator\");","module.exports = require(\"@babel/runtime/helpers/classCallCheck\");","module.exports = require(\"@babel/runtime/helpers/createClass\");","module.exports = require(\"@babel/runtime/helpers/defineProperty\");","module.exports = require(\"@babel/runtime/helpers/typeof\");","module.exports = require(\"@babel/runtime/regenerator\");","module.exports = require(\"events\");","module.exports = require(\"keypair\");","module.exports = require(\"lodash\");","module.exports = require(\"minimist\");","module.exports = require(\"node-pty\");","module.exports = require(\"scrypt-kdf\");","module.exports = require(\"socket.io\");","module.exports = require(\"source-map-support\");","module.exports = require(\"ssh2\");","module.exports = require(\"terminal-kit\");","module.exports = require(\"fs\");","module.exports = require(\"fs/promises\");","module.exports = require(\"http\");","module.exports = require(\"os\");","module.exports = require(\"path\");","module.exports = require(\"tty\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import os from \"os\"\nimport fs from \"fs\"\nimport path from \"path\"\nimport { EventEmitter } from \"events\"\nimport _ from \"lodash\"\nimport keypair from \"keypair\"\nimport cycle from \"../lib/cycle\"\nimport bunyanStream from \"./bunyan-stream\"\nimport setupServer from \"./setup-server\"\nimport setupSocket from \"./setup-socket\"\nimport SSHMan from \"./ssh-manager\"\nimport CommandManager from \"./command-manager\"\nimport UserManager from \"./user-manager\"\nimport utils from \"./utils\"\n\nconst NODE_ENV = process.env.NODE_ENV\nconst DEFAULT_PORT = 50500\nconst CONSOLE = _.mapValues(console)\nconst ConsoleEvent = new EventEmitter()\nconst HANDLE_TYPES = [\"log\", \"info\", \"warn\", \"error\", \"dir\"]\n\nlet attachedCount = 0\n\nclass NodeMonkey {\n msgBuffer = []\n BUNYAN_STREAM = bunyanStream(this)\n _attached = false\n _typeHandlers = {}\n\n constructor(opts) {\n const options = (this.options = _.merge(\n {\n server: {\n // You can provide your own server and Node Monkey will use it instead of creating its own.\n // However, this MUST be the underlying http server instance, not the express/restify/whatever app.\n server: null,\n\n host: \"0.0.0.0\",\n port: DEFAULT_PORT,\n silent: false,\n bufferSize: 50,\n attachOnStart: true,\n\n // Only takes effect when Node Monkey is attached to the console\n disableLocalOutput: false,\n },\n client: {\n showCallerInfo: NODE_ENV === \"production\" ? false : true,\n convertStyles: true,\n },\n ssh: {\n enabled: false,\n host: \"0.0.0.0\",\n port: DEFAULT_PORT + 1,\n title: `Node Monkey on ${os.hostname()}`,\n prompt: `[Node Monkey] {@username}@${os.hostname()}:`,\n },\n\n // Needed for storing things like user files and SSH host keys\n dataDir: null,\n },\n opts,\n ))\n\n this._createLocal()\n this._createRemote()\n this._setupCmdMan()\n this._setupUserManager()\n this._setupServer()\n this._setupSSH()\n\n if (options.server.attachOnStart) {\n this.attachConsole()\n }\n\n // TODO: Deprecated. Remove everything after this line by v1.0.0\n console.local = _.mapValues(this.local, (fn, method) => {\n const localFn = (...args) => {\n return fn(...args)\n }\n Object.defineProperty(localFn, \"name\", { value: method })\n return localFn\n })\n console.remote = _.mapValues(this.remote, (fn, method) => {\n const remoteFn = (...args) => {\n return fn({ callerStackDistance: 2 }, ...args)\n }\n Object.defineProperty(remoteFn, \"name\", { value: method })\n return remoteFn\n })\n }\n\n _getServerProtocol(server) {\n if (server._events && server._events.tlsClientError) {\n return \"https\"\n }\n return \"http\"\n }\n\n getServerPaths() {\n const resolve = __non_webpack_require__ ? __non_webpack_require__.resolve : resolve\n const basePath = path.normalize(`${__dirname}/../dist`)\n const sioBasePath = path.normalize(`${path.dirname(resolve(\"socket.io\"))}/../client-dist`)\n\n const files = {\n \"/\": `${basePath}/index.html`,\n \"/monkey.js\": `${basePath}/monkey.js`,\n \"/monkey.js.map\": `${basePath}/monkey.js.map`,\n }\n\n fs.readdirSync(sioBasePath).forEach(fileName => {\n files[`/monkey.io-client/${fileName}`] = `${sioBasePath}/${fileName}`\n })\n\n return files\n }\n\n _displayServerWelcome() {\n if (!this.options.server.silent) {\n const server = this.serverApp\n const address = typeof server.address === \"function\" && server.address()\n if (server.listening && address) {\n const proto = this._getServerProtocol(server)\n const { address, port } = server.address()\n this.local.log(`Node Monkey listening at ${proto}://${address}:${port}`)\n } else {\n server.on(\"listening\", this._displayServerWelcome.bind(this))\n }\n }\n }\n\n _setupCmdMan() {\n this._cmdMan = new CommandManager({\n write: (val, opts) => {\n console.log(val)\n },\n writeLn: (val, opts) => {\n console.log(val)\n },\n error: (val, opts) => {\n console.error(val)\n },\n prompt: (promptTxt, opts, cb) => {\n if (typeof opts === \"function\") {\n cb = opts\n opts = undefined\n }\n opts || (opts = {})\n\n console.warn(\"Prompt not implemented\")\n },\n })\n\n this.addCmd = this._cmdMan.addCmd\n this.runCmd = this._cmdMan.runCmd\n }\n\n _setupUserManager() {\n const dataDir = this.options.dataDir\n const userMan = (this.userManager = new UserManager({\n userFile: dataDir ? `${dataDir}/users.json` : undefined,\n silent: this.options.server.silent,\n }))\n\n this.addCmd(\"showusers\", async (opts, term) => {\n const users = await userMan.getUsers()\n term.writeLn(Object.keys(users).join(\"\\n\"))\n })\n\n this.addCmd(\"adduser\", (opts, term, done) => {\n const args = opts.args\n const username = args._[0]\n\n if (!username) {\n term.error(`You must specify a username`)\n return done()\n }\n\n term.prompt(\"Password: \", { hideInput: true }, (error, password) => {\n term.writeLn()\n term.prompt(\"Again: \", { hideInput: true }, (error, passwordAgain) => {\n term.writeLn()\n if (password === passwordAgain) {\n userMan\n .createUser(username, password)\n .then(() => term.write(`Created user '${username}'`))\n .catch(term.error)\n .then(done)\n } else {\n term.error(\"Passwords do not match\")\n done()\n }\n })\n })\n })\n\n this.addCmd(\"deluser\", (opts, term, done) => {\n const args = opts.args\n const username = args._[0]\n\n if (!username) {\n term.error(`You must specify a username`)\n return done()\n }\n\n userMan\n .deleteUser(username)\n .then(() => term.write(`Deleted user '${username}'`))\n .catch(term.error)\n .then(done)\n })\n\n this.addCmd(\"passwd\", (opts, term, done) => {\n const args = opts.args\n const user = opts.username\n\n term.prompt(\"Current password: \", { hideInput: true }, (error, curpwd) => {\n term.writeLn()\n userMan.verifyUser(user, curpwd).then((matches) => {\n if (matches) {\n term.prompt(\"Password: \", { hideInput: true }, (error, password) => {\n term.writeLn()\n term.prompt(\"Again: \", { hideInput: true }, (error, passwordAgain) => {\n term.writeLn()\n if (password === passwordAgain) {\n userMan\n .setPassword(user, password)\n .then(() => term.write(`Updated password for ${user}`))\n .catch(term.error)\n .then(done)\n } else {\n term.error(\"Passwords do not match\")\n done()\n }\n })\n })\n } else {\n term.error(\"Incorrect password\")\n done()\n }\n })\n })\n })\n }\n\n _setupServer() {\n const options = this.options\n const srvOpts = options.server\n\n if (srvOpts.server) {\n this.serverApp = srvOpts.server\n } else {\n this.serverApp = setupServer({\n filePaths: this.getServerPaths(),\n })\n this.serverApp.listen(srvOpts.port, srvOpts.host)\n }\n\n this._displayServerWelcome()\n this.remoteClients = setupSocket({\n server: this.serverApp,\n cmdManager: this._cmdMan,\n userManager: this.userManager,\n onAuth: this._sendMessages.bind(this),\n clientSettings: options.client,\n })\n }\n\n _setupSSH() {\n const sshOpts = this.options.ssh\n if (sshOpts.enabled) {\n const dataDir = this.options.dataDir\n if (!dataDir) {\n throw new Error(`Options 'dataDir' is required to enable SSH`)\n }\n\n // Get host keys\n const files = fs.readdirSync(dataDir)\n const keyRe = /\\.key$/\n let hostKeys = []\n for (let file of files) {\n if (keyRe.test(file)) {\n hostKeys.push(`${dataDir}/${file}`)\n }\n }\n\n if (!hostKeys.length) {\n console.log(\"No SSH host key found. Generating new host key...\")\n let keys = keypair()\n fs.writeFileSync(`${dataDir}/rsa.key`, keys.private)\n fs.writeFileSync(`${dataDir}/rsa.key.pub`, keys.public)\n hostKeys = [`${dataDir}/rsa.key`]\n }\n\n this.SSHMan = new SSHMan({\n monkey: this,\n userManager: this.userManager,\n cmdManager: this._cmdMan,\n silent: this.options.server.silent,\n host: sshOpts.host,\n port: sshOpts.port,\n title: _.result(sshOpts, \"title\"),\n prompt: _.result(sshOpts, \"prompt\"),\n hostKeys,\n })\n }\n }\n\n // TODO: This whole process of trying to identify the true source of the call is so fucking messy and fragile. Need to think\n // of a better way to identify the call source and rewrite all this shitty code handling it right now.\n _getCallerInfo(callerStackDistance) {\n if (this.options.client.showCallerInfo) {\n const stack = utils.getStack().map((frame) => {\n return {\n functionName: frame.getFunctionName(),\n methodName: frame.getMethodName(),\n fileName: frame.getFileName(),\n lineNumber: frame.getLineNumber(),\n columnNumber: frame.getColumnNumber(),\n }\n })\n\n let caller = stack.find((frame, index, stack) => {\n // We're either looking for a console method call or a bunyan log call. This logic will break down if method names change.\n const twoBack = stack[index - 2]\n const sixBack = stack[index - 4]\n if (twoBack && twoBack.functionName === \"Logger._emit\" && /\\/bunyan\\.js$/.test(twoBack.fileName)) {\n return true\n } else if (twoBack && sixBack && twoBack.methodName === \"emit\" && sixBack.methodName === \"_sendMessage\") {\n return true\n }\n })\n\n if (!caller && typeof callerStackDistance === \"number\") {\n caller = stack[callerStackDistance]\n }\n\n if (caller) {\n return {\n caller: caller.functionName || caller.methodName,\n file: caller.fileName,\n line: caller.lineNumber,\n column: caller.columnNumber,\n }\n }\n }\n }\n\n _sendMessage(info, callerStackDistance) {\n this.msgBuffer.push({\n method: info.method,\n args: info.args,\n callerInfo: info.callerInfo || this._getCallerInfo(callerStackDistance + 1),\n })\n if (this.msgBuffer.length > this.options.server.bufferSize) {\n this.msgBuffer.shift()\n }\n this._sendMessages()\n }\n\n _sendMessages() {\n const remoteClients = this.remoteClients\n if (_.size(remoteClients.adapter.rooms.get(\"authed\"))) {\n _.each(this.msgBuffer, (info) => {\n remoteClients.to(\"authed\").emit(\"console\", cycle.decycle(info))\n })\n\n this.msgBuffer = []\n }\n }\n\n _createLocal() {\n // NOTE: The console functions here should not be wrapped since these values are used to restore the defaults\n // when `detachConsole()` is called.\n this.local = CONSOLE\n }\n\n _createRemote() {\n let remote = (this.remote = {})\n HANDLE_TYPES.forEach((method) => {\n this.remote[method] = (...args) => {\n const stackdist = args[0] && args[0].callerStackDistance\n this._sendMessage(\n {\n method,\n args: stackdist ? args.slice(1) : args,\n },\n stackdist ? stackdist + 1 : 2,\n )\n }\n Object.defineProperty(remote[method], \"name\", { value: method })\n })\n }\n\n attachConsole(disableLocalOutput) {\n if (this._attached) {\n return\n }\n\n if (!attachedCount) {\n // If this function is in the process of handling the log call we will try and prevent potential infinite recursion\n let handlersActive = 0\n HANDLE_TYPES.forEach((method) => {\n console[method] = (...args) => {\n if (handlersActive) {\n return this.local[method](...args)\n }\n\n ++handlersActive\n ConsoleEvent.emit(method, ...args)\n --handlersActive\n }\n Object.defineProperty(console[method], \"name\", { value: method })\n })\n }\n\n ++attachedCount\n\n const serverOptions = this.options.server\n disableLocalOutput = disableLocalOutput !== undefined ? disableLocalOutput : serverOptions.disableLocalOutput\n\n _.each(this.remote, (fn, method) => {\n const handler = (this._typeHandlers[method] = (...args) => {\n fn({ callerStackDistance: 4 }, ...args)\n\n if (!disableLocalOutput) {\n this.local[method](...args)\n }\n })\n Object.defineProperty(handler, \"name\", { value: method })\n\n ConsoleEvent.on(method, handler)\n })\n\n this._attached = true\n }\n\n detachConsole() {\n Object.assign(console, this.local)\n this._attached = false\n --attachedCount\n\n HANDLE_TYPES.forEach((method) => {\n ConsoleEvent.removeListener(method, this._typeHandlers[method])\n delete this._typeHandlers[method]\n })\n }\n\n stop() {\n this.serverApp.close()\n }\n}\n\nconst instances = {}\nlet lastPort = DEFAULT_PORT - 1\nexport default function createInst(options, name = \"default\") {\n if (typeof options === \"string\") {\n name = options\n options = undefined\n }\n\n if (!instances[name]) {\n options || (options = {})\n let port = _.get(options, \"server.port\")\n if (port) {\n lastPort = +port\n } else {\n _.set(options, \"server.port\", ++lastPort)\n _.set(options, \"ssh.port\", ++lastPort)\n }\n instances[name] = new NodeMonkey(options)\n }\n\n return instances[name]\n}\n\n// Just exporting in case someone needs to wrap this or access the internals for some reason\nexport { NodeMonkey }\n"],"names":["root","factory","exports","module","define","amd","global","isObject","value","type","invert","obj","inverted","k","hasOwnProperty","origJSON","JSON","decycle","object","replacer","objects","paths","derez","path","i","nu","undefined","Boolean","Date","Number","RegExp","String","indexOf","$ref","push","Array","isArray","forEach","element","Object","keys","name","stringify","retrocycle","$","px","rez","test","eval","item","levelFromName","trace","debug","info","warn","error","fatal","nameFromLevel","utils","inst","write","rec","parse","_sendMessage","method","level","args","msg","CommandInterface","commandManager","writeFn","writeLnFn","errorFn","promptFn","val","opts","console","log","promptTxt","cb","this","writeLn","prompt","CommandManager","cmdName","exec","commands","Error","rawCommand","asUser","io","parsed","cmd","minimist","slice","doneP","result","username","resolve","then","promise","extMap","html","js","json","map","loadedFiles","Map","loadFile","file","has","readFile","set","get","options","filePaths","server","createServer","req","res","filePath","url","contentType","extname","content","setHeader","writeHead","end","socketio","attach","autoUnref","ns","of","on","socket","cmdInterface","emit","clientSettings","creds","userManager","verifyUser","password","join","onAuth","catch","err","cmdId","command","cmdManager","promptId","prompts","pid","response","createCmdInterface","runCmd","output","message","_","handlers","handler","event","SSHManager","host","port","title","silent","Set","assign","ssh2","hostKeys","fs","onClient","bind","monkey","listen","local","address","clients","c","close","client","add","SSHClient","onClose","delete","session","stream","pty","term","ptyInfo","inputActive","cmdHistory","onReady","bold","newline","nextLine","red","inputOpts","hideInput","echo","inputField","style","ctx","accept","reject","once","_resize","_initCmdMan","_initStream","_initPty","_initTerm","matches","data","clearScreen","abort","getInput","length","setTimeout","stdout","isTTY","setRawMode","newPty","nativePty","cols","rows","master_fd","master","slave_fd","slave","tty","defineProperty","enumerable","stdin","pipe","termkit","stderr","generic","appName","isSSH","onKey","windowTitle","_interpolate","str","match","varRe","vars","replace","clear","history","autoComplete","autoCompleteHint","autoCompleteMenu","input","UserManager","userFile","getUsers","users","usernames","process","env","NODE_ENV","userFileCache","code","toString","userFileCreated","guest","passwd","scrypt","logN","r","p","actualPasswd","testPasswd","Buffer","from","_hashPassword","_writeFile","getUserData","userData","_verifyPassword","parseCommand","reg","arr","getStack","prep","prepareStackTrace","limit","stackTraceLimit","sourceMapSupport","stack","getPromiseObj","pobj","Promise","commonUtils","require","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","n","getter","__esModule","d","a","definition","key","o","prop","prototype","call","Symbol","toStringTag","DEFAULT_PORT","CONSOLE","ConsoleEvent","EventEmitter","HANDLE_TYPES","attachedCount","NodeMonkey","bunyanStream","bufferSize","attachOnStart","disableLocalOutput","showCallerInfo","convertStyles","ssh","enabled","os","dataDir","_createLocal","_createRemote","_setupCmdMan","_setupUserManager","_setupServer","_setupSSH","attachConsole","fn","localFn","remote","remoteFn","callerStackDistance","_events","tlsClientError","__non_webpack_require__","basePath","__dirname","sioBasePath","files","fileName","serverApp","listening","proto","_getServerProtocol","_displayServerWelcome","_cmdMan","addCmd","userMan","done","passwordAgain","createUser","deleteUser","user","curpwd","setPassword","srvOpts","setupServer","getServerPaths","remoteClients","setupSocket","_sendMessages","sshOpts","keyRe","keypair","private","public","SSHMan","frame","functionName","getFunctionName","methodName","getMethodName","getFileName","lineNumber","getLineNumber","columnNumber","getColumnNumber","caller","find","index","twoBack","sixBack","line","column","msgBuffer","callerInfo","_getCallerInfo","shift","adapter","rooms","to","cycle","stackdist","_attached","handlersActive","serverOptions","_typeHandlers","removeListener","instances","lastPort","createInst"],"sourceRoot":""} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 9ec9726..96a5559 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,36 +9,36 @@ "version": "1.1.4", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.17.2", + "@babel/runtime": "^7.17.9", "keypair": "^1.0.4", "lodash": "^4.17.21", - "minimist": "^1.2.5", + "minimist": "^1.2.6", "node-pty": "^0.10.1", "scrypt-kdf": "^2.0.1", "socket.io": "^4.4.1", "source-map-support": "^0.5.21", - "ssh2": "^1.7.0", + "ssh2": "^1.9.0", "terminal-kit": "^2.4.0" }, "devDependencies": { - "@babel/core": "^7.17.5", + "@babel/core": "^7.17.9", "@babel/node": "^7.16.8", "@babel/plugin-proposal-class-properties": "^7.16.7", "@babel/plugin-transform-runtime": "^7.17.0", "@babel/preset-env": "^7.16.11", - "@babel/register": "^7.17.0", + "@babel/register": "^7.17.7", "babel-eslint": "^10.1.0", - "babel-loader": "^8.2.3", + "babel-loader": "^8.2.4", "babel-plugin-source-map-support": "^2.1.1", "bunyan": "^1.8.15", - "eslint": "^8.10.0", + "eslint": "^8.13.0", "eslint-config-prettier": "^8.5.0", "eslint-plugin-prettier": "^4.0.0", "html-webpack-plugin": "^5.5.0", "ignore-loader": "^0.1.2", - "prettier": "^2.5.1", + "prettier": "^2.6.2", "terser-webpack-plugin": "^5.3.1", - "webpack": "^5.70.0", + "webpack": "^5.72.0", "webpack-cli": "^4.9.2", "webpack-node-externals": "^3.0.0" } @@ -68,34 +68,34 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", - "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.7.tgz", + "integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.17.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz", - "integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.9.tgz", + "integrity": "sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.3", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.17.2", - "@babel/parser": "^7.17.3", + "@babel/generator": "^7.17.9", + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helpers": "^7.17.9", + "@babel/parser": "^7.17.9", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", + "@babel/traverse": "^7.17.9", "@babel/types": "^7.17.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", + "json5": "^2.2.1", "semver": "^6.3.0" }, "engines": { @@ -107,9 +107,9 @@ } }, "node_modules/@babel/generator": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", - "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz", + "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==", "dev": true, "dependencies": { "@babel/types": "^7.17.0", @@ -146,12 +146,12 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", - "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz", + "integrity": "sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.16.4", + "@babel/compat-data": "^7.17.7", "@babel/helper-validator-option": "^7.16.7", "browserslist": "^4.17.5", "semver": "^6.3.0" @@ -244,26 +244,13 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", + "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", "dev": true, "dependencies": { - "@babel/helper-get-function-arity": "^7.16.7", "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.17.0" }, "engines": { "node": ">=6.9.0" @@ -306,14 +293,14 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.17.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.6.tgz", - "integrity": "sha512-2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", + "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", "@babel/helper-split-export-declaration": "^7.16.7", "@babel/helper-validator-identifier": "^7.16.7", "@babel/template": "^7.16.7", @@ -376,12 +363,12 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", + "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.17.0" }, "engines": { "node": ">=6.9.0" @@ -445,13 +432,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", - "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", + "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", "dev": true, "dependencies": { "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", + "@babel/traverse": "^7.17.9", "@babel/types": "^7.17.0" }, "engines": { @@ -496,9 +483,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", - "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.9.tgz", + "integrity": "sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -1595,9 +1582,9 @@ } }, "node_modules/@babel/register": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.17.0.tgz", - "integrity": "sha512-UNZsMAZ7uKoGHo1HlEXfteEOYssf64n/PNLHGqOKq/bgYcu/4LrQWAHJwSCb3BRZK8Hi5gkJdRcwrGTO2wtRCg==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.17.7.tgz", + "integrity": "sha512-fg56SwvXRifootQEDQAu1mKdjh5uthPzdO0N6t358FktfL4XjAVXuH58ULoiW8mesxiOgNIrxiImqEwv0+hRRA==", "dev": true, "dependencies": { "clone-deep": "^4.0.1", @@ -1614,9 +1601,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz", - "integrity": "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz", + "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==", "dependencies": { "regenerator-runtime": "^0.13.4" }, @@ -1639,18 +1626,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", - "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.9.tgz", + "integrity": "sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw==", "dev": true, "dependencies": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.3", + "@babel/generator": "^7.17.9", "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.3", + "@babel/parser": "^7.17.9", "@babel/types": "^7.17.0", "debug": "^4.1.0", "globals": "^11.1.0" @@ -1695,16 +1682,16 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.0.tgz", - "integrity": "sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", + "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.3.1", "globals": "^13.9.0", - "ignore": "^4.0.6", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.0.4", @@ -1715,9 +1702,9 @@ } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "version": "13.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", + "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -1729,15 +1716,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/@humanwhocodes/config-array": { "version": "0.9.5", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", @@ -2167,13 +2145,13 @@ } }, "node_modules/babel-loader": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz", - "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.4.tgz", + "integrity": "sha512-8dytA3gcvPPPv4Grjhnt8b5IIiTcq/zeXOPk4iTYI0SVXcsmuGg7JtBRDp8S9X+gJfhQ8ektjXZlDu1Bb33U8A==", "dev": true, "dependencies": { "find-cache-dir": "^3.3.1", - "loader-utils": "^1.4.0", + "loader-utils": "^2.0.0", "make-dir": "^3.1.0", "schema-utils": "^2.6.5" }, @@ -2407,6 +2385,15 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, + "node_modules/buildcheck": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.3.tgz", + "integrity": "sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA==", + "optional": true, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/bunyan": { "version": "1.8.15", "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", @@ -2650,16 +2637,17 @@ } }, "node_modules/cpu-features": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.2.tgz", - "integrity": "sha512-/2yieBqvMcRj8McNzkycjW2v3OIUOibBfd2dLEJ0nWts8NobAxwiyw9phVNS6oDL8x8tz9F7uNVFEVpJncQpeA==", + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz", + "integrity": "sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A==", "hasInstallScript": true, "optional": true, "dependencies": { - "nan": "^2.14.1" + "buildcheck": "0.0.3", + "nan": "^2.15.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=10.0.0" } }, "node_modules/cross-spawn": { @@ -2998,12 +2986,12 @@ } }, "node_modules/eslint": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.10.0.tgz", - "integrity": "sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.13.0.tgz", + "integrity": "sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.2.0", + "@eslint/eslintrc": "^1.2.1", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -4136,13 +4124,10 @@ "dev": true }, "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, "bin": { "json5": "lib/cli.js" }, @@ -4195,29 +4180,17 @@ } }, "node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", "dev": true, "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "json5": "^2.1.2" }, "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/loader-utils/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" + "node": ">=8.9.0" } }, "node_modules/locate-path": { @@ -4328,9 +4301,9 @@ } }, "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "node_modules/mkdirp": { "version": "0.5.5", @@ -4346,9 +4319,9 @@ } }, "node_modules/moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "version": "2.29.2", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.2.tgz", + "integrity": "sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg==", "dev": true, "optional": true, "engines": { @@ -4813,15 +4786,18 @@ } }, "node_modules/prettier": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", - "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", + "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", "dev": true, "bin": { "prettier": "bin-prettier.js" }, "engines": { "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/prettier-linter-helpers": { @@ -5222,9 +5198,9 @@ } }, "node_modules/ssh2": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.7.0.tgz", - "integrity": "sha512-u1gdFfqKV1PTGR2szS5FImhFii40o+8FOUpg1M//iimNaS4BkTyUVfVdoydXS93M1SquOU02Z4KFhYDBNqQO+g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.9.0.tgz", + "integrity": "sha512-rhhIZT0eMPvCBSOG8CpqZZ7gre2vgXaIqmb3Jb83t88rjsxIsFzDanqBJM9Ns8BmP1835A5IbQ199io4EUZwOA==", "hasInstallScript": true, "dependencies": { "asn1": "^0.2.4", @@ -5234,7 +5210,7 @@ "node": ">=10.16.0" }, "optionalDependencies": { - "cpu-features": "0.0.2", + "cpu-features": "~0.0.4", "nan": "^2.15.0" } }, @@ -5605,9 +5581,9 @@ } }, "node_modules/webpack": { - "version": "5.70.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.70.0.tgz", - "integrity": "sha512-ZMWWy8CeuTTjCxbeaQI21xSswseF2oNOwc70QSKNePvmxE7XW36i7vpBMYZFAUHPwQiEbNGCEYIOOlyRbdGmxw==", + "version": "5.72.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.72.0.tgz", + "integrity": "sha512-qmSmbspI0Qo5ld49htys8GY9XhS9CGqFoHTsOVAnjBdg0Zn79y135R+k4IR4rKK6+eKaabMhJwiVB7xw0SJu5w==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.3", @@ -5845,38 +5821,38 @@ } }, "@babel/compat-data": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", - "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.7.tgz", + "integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==", "dev": true }, "@babel/core": { - "version": "7.17.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz", - "integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.9.tgz", + "integrity": "sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw==", "dev": true, "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.3", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.17.2", - "@babel/parser": "^7.17.3", + "@babel/generator": "^7.17.9", + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helpers": "^7.17.9", + "@babel/parser": "^7.17.9", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", + "@babel/traverse": "^7.17.9", "@babel/types": "^7.17.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", + "json5": "^2.2.1", "semver": "^6.3.0" } }, "@babel/generator": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", - "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz", + "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==", "dev": true, "requires": { "@babel/types": "^7.17.0", @@ -5904,12 +5880,12 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", - "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz", + "integrity": "sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==", "dev": true, "requires": { - "@babel/compat-data": "^7.16.4", + "@babel/compat-data": "^7.17.7", "@babel/helper-validator-option": "^7.16.7", "browserslist": "^4.17.5", "semver": "^6.3.0" @@ -5975,23 +5951,13 @@ } }, "@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", + "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.16.7", "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.17.0" } }, "@babel/helper-hoist-variables": { @@ -6022,14 +5988,14 @@ } }, "@babel/helper-module-transforms": { - "version": "7.17.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.6.tgz", - "integrity": "sha512-2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", + "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", "@babel/helper-split-export-declaration": "^7.16.7", "@babel/helper-validator-identifier": "^7.16.7", "@babel/template": "^7.16.7", @@ -6077,12 +6043,12 @@ } }, "@babel/helper-simple-access": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", + "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.17.0" } }, "@babel/helper-skip-transparent-expression-wrappers": { @@ -6128,13 +6094,13 @@ } }, "@babel/helpers": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", - "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", + "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", "dev": true, "requires": { "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", + "@babel/traverse": "^7.17.9", "@babel/types": "^7.17.0" } }, @@ -6164,9 +6130,9 @@ } }, "@babel/parser": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", - "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.9.tgz", + "integrity": "sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==", "dev": true }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { @@ -6897,9 +6863,9 @@ } }, "@babel/register": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.17.0.tgz", - "integrity": "sha512-UNZsMAZ7uKoGHo1HlEXfteEOYssf64n/PNLHGqOKq/bgYcu/4LrQWAHJwSCb3BRZK8Hi5gkJdRcwrGTO2wtRCg==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.17.7.tgz", + "integrity": "sha512-fg56SwvXRifootQEDQAu1mKdjh5uthPzdO0N6t358FktfL4XjAVXuH58ULoiW8mesxiOgNIrxiImqEwv0+hRRA==", "dev": true, "requires": { "clone-deep": "^4.0.1", @@ -6910,9 +6876,9 @@ } }, "@babel/runtime": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz", - "integrity": "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz", + "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -6929,18 +6895,18 @@ } }, "@babel/traverse": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", - "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.9.tgz", + "integrity": "sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw==", "dev": true, "requires": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.3", + "@babel/generator": "^7.17.9", "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.3", + "@babel/parser": "^7.17.9", "@babel/types": "^7.17.0", "debug": "^4.1.0", "globals": "^11.1.0" @@ -6976,16 +6942,16 @@ "dev": true }, "@eslint/eslintrc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.0.tgz", - "integrity": "sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", + "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.3.1", "globals": "^13.9.0", - "ignore": "^4.0.6", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.0.4", @@ -6993,19 +6959,13 @@ }, "dependencies": { "globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "version": "13.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", + "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", "dev": true, "requires": { "type-fest": "^0.20.2" } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true } } }, @@ -7384,13 +7344,13 @@ } }, "babel-loader": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz", - "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.4.tgz", + "integrity": "sha512-8dytA3gcvPPPv4Grjhnt8b5IIiTcq/zeXOPk4iTYI0SVXcsmuGg7JtBRDp8S9X+gJfhQ8ektjXZlDu1Bb33U8A==", "dev": true, "requires": { "find-cache-dir": "^3.3.1", - "loader-utils": "^1.4.0", + "loader-utils": "^2.0.0", "make-dir": "^3.1.0", "schema-utils": "^2.6.5" }, @@ -7567,6 +7527,12 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, + "buildcheck": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.3.tgz", + "integrity": "sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA==", + "optional": true + }, "bunyan": { "version": "1.8.15", "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", @@ -7764,12 +7730,13 @@ } }, "cpu-features": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.2.tgz", - "integrity": "sha512-/2yieBqvMcRj8McNzkycjW2v3OIUOibBfd2dLEJ0nWts8NobAxwiyw9phVNS6oDL8x8tz9F7uNVFEVpJncQpeA==", + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz", + "integrity": "sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A==", "optional": true, "requires": { - "nan": "^2.14.1" + "buildcheck": "0.0.3", + "nan": "^2.15.0" } }, "cross-spawn": { @@ -8021,12 +7988,12 @@ "dev": true }, "eslint": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.10.0.tgz", - "integrity": "sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.13.0.tgz", + "integrity": "sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.2.0", + "@eslint/eslintrc": "^1.2.1", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -8844,13 +8811,10 @@ "dev": true }, "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true }, "keypair": { "version": "1.0.4", @@ -8885,25 +8849,14 @@ "dev": true }, "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", "dev": true, "requires": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - } + "json5": "^2.1.2" } }, "locate-path": { @@ -8995,9 +8948,9 @@ } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "mkdirp": { "version": "0.5.5", @@ -9010,9 +8963,9 @@ } }, "moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "version": "2.29.2", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.2.tgz", + "integrity": "sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg==", "dev": true, "optional": true }, @@ -9375,9 +9328,9 @@ "dev": true }, "prettier": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", - "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", + "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", "dev": true }, "prettier-linter-helpers": { @@ -9699,13 +9652,13 @@ } }, "ssh2": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.7.0.tgz", - "integrity": "sha512-u1gdFfqKV1PTGR2szS5FImhFii40o+8FOUpg1M//iimNaS4BkTyUVfVdoydXS93M1SquOU02Z4KFhYDBNqQO+g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.9.0.tgz", + "integrity": "sha512-rhhIZT0eMPvCBSOG8CpqZZ7gre2vgXaIqmb3Jb83t88rjsxIsFzDanqBJM9Ns8BmP1835A5IbQ199io4EUZwOA==", "requires": { "asn1": "^0.2.4", "bcrypt-pbkdf": "^1.0.2", - "cpu-features": "0.0.2", + "cpu-features": "~0.0.4", "nan": "^2.15.0" } }, @@ -9977,9 +9930,9 @@ } }, "webpack": { - "version": "5.70.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.70.0.tgz", - "integrity": "sha512-ZMWWy8CeuTTjCxbeaQI21xSswseF2oNOwc70QSKNePvmxE7XW36i7vpBMYZFAUHPwQiEbNGCEYIOOlyRbdGmxw==", + "version": "5.72.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.72.0.tgz", + "integrity": "sha512-qmSmbspI0Qo5ld49htys8GY9XhS9CGqFoHTsOVAnjBdg0Zn79y135R+k4IR4rKK6+eKaabMhJwiVB7xw0SJu5w==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.3", diff --git a/package.json b/package.json index 607e164..d95dbfa 100644 --- a/package.json +++ b/package.json @@ -28,36 +28,36 @@ "url": "https://github.com/jwarkentin/node-monkey.git" }, "dependencies": { - "@babel/runtime": "^7.17.2", + "@babel/runtime": "^7.17.9", "keypair": "^1.0.4", "lodash": "^4.17.21", - "minimist": "^1.2.5", + "minimist": "^1.2.6", "node-pty": "^0.10.1", "scrypt-kdf": "^2.0.1", "socket.io": "^4.4.1", "source-map-support": "^0.5.21", - "ssh2": "^1.7.0", + "ssh2": "^1.9.0", "terminal-kit": "^2.4.0" }, "devDependencies": { - "@babel/core": "^7.17.5", + "@babel/core": "^7.17.9", "@babel/node": "^7.16.8", "@babel/plugin-proposal-class-properties": "^7.16.7", "@babel/plugin-transform-runtime": "^7.17.0", "@babel/preset-env": "^7.16.11", - "@babel/register": "^7.17.0", + "@babel/register": "^7.17.7", "babel-eslint": "^10.1.0", - "babel-loader": "^8.2.3", + "babel-loader": "^8.2.4", "babel-plugin-source-map-support": "^2.1.1", "bunyan": "^1.8.15", - "eslint": "^8.10.0", + "eslint": "^8.13.0", "eslint-config-prettier": "^8.5.0", "eslint-plugin-prettier": "^4.0.0", "html-webpack-plugin": "^5.5.0", "ignore-loader": "^0.1.2", - "prettier": "^2.5.1", + "prettier": "^2.6.2", "terser-webpack-plugin": "^5.3.1", - "webpack": "^5.70.0", + "webpack": "^5.72.0", "webpack-cli": "^4.9.2", "webpack-node-externals": "^3.0.0" }