aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormarzavec <admin@marzavec.com>2020-03-12 19:28:20 +0100
committermarzavec <admin@marzavec.com>2020-03-12 19:28:20 +0100
commit2b6e771383f4c6f392b32ce26e4d759b56791132 (patch)
treeb8c1cefecbd7f5816a3fb5ddc4bdb6bdfe463ba2
parentMerge pull request #96 from MinusGix/fixKickHash (diff)
downloadhackchat-2b6e771383f4c6f392b32ce26e4d759b56791132.tar.gz
hackchat-2b6e771383f4c6f392b32ce26e4d759b56791132.zip
Protocol Updates and Bug Fixes
-rw-r--r--CHANGELOG.md23
-rw-r--r--clientSource/README.md2
-rw-r--r--clientSource/index.js1
-rw-r--r--clientSource/package-lock.json194
-rw-r--r--clientSource/package.json22
-rw-r--r--package-lock.json474
-rw-r--r--package.json14
-rw-r--r--pm2.config.js33
-rw-r--r--server/package-lock.json39
-rw-r--r--server/package.json6
-rw-r--r--server/src/commands/admin/reload.js2
-rw-r--r--server/src/commands/admin/saveconfig.js2
-rw-r--r--server/src/commands/core/emote.js8
-rw-r--r--server/src/commands/core/join.js61
-rw-r--r--server/src/commands/core/move.js45
-rw-r--r--server/src/commands/core/ping.js4
-rw-r--r--server/src/commands/core/session.js13
-rw-r--r--server/src/commands/core/whisper.js3
-rw-r--r--server/src/commands/mod/dumb.js34
-rw-r--r--server/src/commands/mod/moveuser.js1
-rw-r--r--server/src/commands/mod/speak.js18
-rw-r--r--server/src/commands/mod/unban.js4
-rw-r--r--server/src/commands/mod/unbanall.js2
23 files changed, 558 insertions, 447 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 20ee736..f52afd7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,29 @@ All notable changes to this project will be documented in this file.
## [Unreleased]
+## [2.1.93 pre 2.2] - 2020-03-12
+### Added
+- (Source) `./pm2.config.js` PM2 ecosystem config handling both http-server and the websocket
+- (Source) NPM new commands:
+- "start": Starts or reloads the dev environment
+- "stop": Stops and clears the dev environment
+- "logs": Show / watch http & websocket logs for errors and events
+- "clear": Clear all logged data
+- "status": Show status of http and websocket
+- "refresh": Clears logged data and stops http and websocket
+- (Server) Numeric user levels / UAC, related to issue #86
+- (Server) `join` module password property, related to V2 protocol update
+- (Server) `users` array to `onlineSet` structure, related to V2 protocol update
+- (Server) `session` module, related to V2 protocol update
+- (Server) `/move` chat hook to `move` module
+
+### Removed
+- (Source) `./clientSource/` directory
+
+### Changed
+- (Server) Minor bug fixes
+- (Server) Increased module abstraction to remove duplicate code (thanks @MinusGix)
+
## [2.1.92 pre 2.2] - 2019-11-06
### Added
- (Server) `./server/src/utility/` directory
diff --git a/clientSource/README.md b/clientSource/README.md
deleted file mode 100644
index 476acc9..0000000
--- a/clientSource/README.md
+++ /dev/null
@@ -1,2 +0,0 @@
-## Explanation
-This folder will contain the source for the version 2 client. The new client has a build process which will transpile into `./client`. For now it is a placeholder that retains the development process flow for hack.chat's modular project structure.
diff --git a/clientSource/index.js b/clientSource/index.js
deleted file mode 100644
index 865ee71..0000000
--- a/clientSource/index.js
+++ /dev/null
@@ -1 +0,0 @@
-console.log('Use "npm start" instead.')
diff --git a/clientSource/package-lock.json b/clientSource/package-lock.json
deleted file mode 100644
index 421d065..0000000
--- a/clientSource/package-lock.json
+++ /dev/null
@@ -1,194 +0,0 @@
-{
- "name": "hack.chat-v2",
- "version": "2.1.91",
- "lockfileVersion": 1,
- "requires": true,
- "dependencies": {
- "async": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
- "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
- "requires": {
- "lodash": "^4.17.14"
- }
- },
- "basic-auth": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.1.0.tgz",
- "integrity": "sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ="
- },
- "colors": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
- "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA=="
- },
- "corser": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz",
- "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c="
- },
- "debug": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
- "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "ecstatic": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-3.3.2.tgz",
- "integrity": "sha512-fLf9l1hnwrHI2xn9mEDT7KIi22UDqA2jaCwyCbSUJh9a1V+LEUSL/JO/6TIz/QyuBURWUHrFL5Kg2TtO1bkkog==",
- "requires": {
- "he": "^1.1.1",
- "mime": "^1.6.0",
- "minimist": "^1.1.0",
- "url-join": "^2.0.5"
- }
- },
- "eventemitter3": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz",
- "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg=="
- },
- "follow-redirects": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.9.0.tgz",
- "integrity": "sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A==",
- "requires": {
- "debug": "^3.0.0"
- }
- },
- "he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
- },
- "http-proxy": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz",
- "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==",
- "requires": {
- "eventemitter3": "^4.0.0",
- "follow-redirects": "^1.0.0",
- "requires-port": "^1.0.0"
- }
- },
- "http-server": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/http-server/-/http-server-0.12.0.tgz",
- "integrity": "sha512-imGLDSTT1BZ0QG1rBFnaZ6weK5jeisUnCxZQI1cpYTdz0luPUM5e3s+WU5zRWEkiI6DQxL2p54oeKrDlzO6bRw==",
- "requires": {
- "basic-auth": "^1.0.3",
- "colors": "^1.3.3",
- "corser": "^2.0.1",
- "ecstatic": "^3.3.2",
- "http-proxy": "^1.17.0",
- "opener": "^1.5.1",
- "optimist": "~0.6.1",
- "portfinder": "^1.0.20",
- "secure-compare": "3.0.1",
- "union": "~0.5.0"
- }
- },
- "lodash": {
- "version": "4.17.15",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
- "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
- },
- "mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
- },
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
- },
- "mkdirp": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
- "requires": {
- "minimist": "0.0.8"
- },
- "dependencies": {
- "minimist": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
- }
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "opener": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz",
- "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA=="
- },
- "optimist": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
- "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
- "requires": {
- "minimist": "~0.0.1",
- "wordwrap": "~0.0.2"
- },
- "dependencies": {
- "minimist": {
- "version": "0.0.10",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
- "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8="
- }
- }
- },
- "portfinder": {
- "version": "1.0.25",
- "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.25.tgz",
- "integrity": "sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==",
- "requires": {
- "async": "^2.6.2",
- "debug": "^3.1.1",
- "mkdirp": "^0.5.1"
- }
- },
- "qs": {
- "version": "6.9.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.1.tgz",
- "integrity": "sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA=="
- },
- "requires-port": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
- "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
- },
- "secure-compare": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz",
- "integrity": "sha1-8aAymzCLIh+uN7mXTz1XjQypmeM="
- },
- "union": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz",
- "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==",
- "requires": {
- "qs": "^6.4.0"
- }
- },
- "url-join": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz",
- "integrity": "sha1-WvIvGMBSoACkjXuCxenC4v7tpyg="
- },
- "wordwrap": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
- "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
- }
- }
-}
diff --git a/clientSource/package.json b/clientSource/package.json
deleted file mode 100644
index 6078f23..0000000
--- a/clientSource/package.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "name": "hack.chat-v2",
- "version": "2.1.91",
- "description": "a minimal distraction free chat application",
- "main": "index.js",
- "repository": {
- "type": "git",
- "url": "git+https://github.com/hack-chat/main.git"
- },
- "engines": {
- "node": ">= 8.10.0",
- "npm": ">= 5.7.1"
- },
- "scripts": {
- "start": "http-server ../client -o -p 3000"
- },
- "author": "Marzavec",
- "license": "WTFPL",
- "dependencies": {
- "http-server": "^0.12.0"
- }
-}
diff --git a/package-lock.json b/package-lock.json
index 2946564..24d0682 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "hack.chat-v2",
- "version": "2.1.91",
+ "version": "2.1.9",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -55,16 +55,6 @@
"proxy-agent": "^3.1.0",
"semver": "^5.5.0",
"ws": "^5.1.0"
- },
- "dependencies": {
- "async": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
- "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
- "requires": {
- "lodash": "^4.17.14"
- }
- }
}
},
"@pm2/agent-node": {
@@ -78,14 +68,6 @@
"ws": "^6.0.0"
},
"dependencies": {
- "debug": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
- "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
- "requires": {
- "ms": "^2.1.1"
- }
- },
"ws": {
"version": "6.2.1",
"resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
@@ -114,14 +96,6 @@
"tslib": "1.9.3"
},
"dependencies": {
- "async": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
- "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
- "requires": {
- "lodash": "^4.17.14"
- }
- },
"debug": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
@@ -154,14 +128,6 @@
"ws": "^3.0.0"
},
"dependencies": {
- "async": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
- "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
- "requires": {
- "lodash": "^4.17.14"
- }
- },
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -192,6 +158,24 @@
}
}
},
+ "@pm2/pm2-version-check": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@pm2/pm2-version-check/-/pm2-version-check-1.0.3.tgz",
+ "integrity": "sha512-SBuYsh+o35knItbRW97vl5/5nEc5c5DYP7PxjyPLOfmm9bMaDsVeATXjXMBy6+KLlyrYWHZxGbfXe003NnHClg==",
+ "requires": {
+ "debug": "^4.1.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
"agent-base": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
@@ -261,9 +245,12 @@
"integrity": "sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA=="
},
"async": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/async/-/async-3.1.0.tgz",
- "integrity": "sha512-4vx/aaY6j/j3Lw3fbCHNWP0pPaTCew3F6F3hYyl/tHs/ndmV1q7NW9T5yuJ2XAGwdQrP+6Wu20x06U4APo/iQQ=="
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
+ "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
+ "requires": {
+ "lodash": "^4.17.14"
+ }
},
"async-limiter": {
"version": "1.0.1",
@@ -280,12 +267,34 @@
}
},
"axios": {
- "version": "0.19.0",
- "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz",
- "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==",
+ "version": "0.19.2",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz",
+ "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==",
"requires": {
- "follow-redirects": "1.5.10",
- "is-buffer": "^2.0.2"
+ "follow-redirects": "1.5.10"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "follow-redirects": {
+ "version": "1.5.10",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
+ "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
+ "requires": {
+ "debug": "=3.1.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ }
}
},
"balanced-match": {
@@ -293,6 +302,11 @@
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
},
+ "basic-auth": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.1.0.tgz",
+ "integrity": "sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ="
+ },
"binary-extensions": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz",
@@ -351,18 +365,18 @@
"integrity": "sha1-BsIe7RobBq62dVPNxT4jJ0usIpY="
},
"chokidar": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz",
- "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==",
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz",
+ "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==",
"requires": {
"anymatch": "~3.1.1",
"braces": "~3.0.2",
- "fsevents": "~2.1.1",
+ "fsevents": "~2.1.2",
"glob-parent": "~5.1.0",
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
"normalize-path": "~3.0.0",
- "readdirp": "~3.2.0"
+ "readdirp": "~3.3.0"
}
},
"cli-table-redemption": {
@@ -415,6 +429,11 @@
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
},
+ "colors": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
+ "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA=="
+ },
"commander": {
"version": "2.15.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
@@ -439,6 +458,11 @@
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
+ "corser": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz",
+ "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c="
+ },
"cron": {
"version": "1.7.1",
"resolved": "https://registry.npmjs.org/cron/-/cron-1.7.1.tgz",
@@ -463,9 +487,9 @@
"integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw=="
},
"debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
"requires": {
"ms": "^2.1.1"
}
@@ -490,6 +514,17 @@
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
"integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
},
+ "ecstatic": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-3.3.2.tgz",
+ "integrity": "sha512-fLf9l1hnwrHI2xn9mEDT7KIi22UDqA2jaCwyCbSUJh9a1V+LEUSL/JO/6TIz/QyuBURWUHrFL5Kg2TtO1bkkog==",
+ "requires": {
+ "he": "^1.1.1",
+ "mime": "^1.6.0",
+ "minimist": "^1.1.0",
+ "url-join": "^2.0.5"
+ }
+ },
"emitter-listener": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz",
@@ -499,9 +534,9 @@
}
},
"enquirer": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.2.tgz",
- "integrity": "sha512-PLhTMPUXlnaIv9D3Cq3/Zr1xb7soeDDgunobyCmYLUG19n24dvC8i+ZZgm2DekGpDnx7JvFSHV7lxfM58PMtbA==",
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.4.tgz",
+ "integrity": "sha512-pkYrrDZumL2VS6VBGDhqbajCM2xpkUNLuKfGPjfKaSIBKYopQbqEFyrOkRMIb2HDR/rO1kGhEt/5twBwtzKBXw==",
"requires": {
"ansi-colors": "^3.2.1"
}
@@ -530,15 +565,22 @@
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
},
"escodegen": {
- "version": "1.12.0",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.0.tgz",
- "integrity": "sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==",
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz",
+ "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==",
"requires": {
- "esprima": "^3.1.3",
+ "esprima": "^4.0.1",
"estraverse": "^4.2.0",
"esutils": "^2.0.2",
"optionator": "^0.8.1",
"source-map": "~0.6.1"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+ }
}
},
"esm": {
@@ -566,6 +608,11 @@
"resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-5.0.1.tgz",
"integrity": "sha1-YZegldX7a1folC9v1+qtY6CclFI="
},
+ "eventemitter3": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz",
+ "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg=="
+ },
"extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
@@ -595,26 +642,11 @@
}
},
"follow-redirects": {
- "version": "1.5.10",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
- "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.10.0.tgz",
+ "integrity": "sha512-4eyLK6s6lH32nOvLLwlIOnr9zrL8Sm+OvW4pVTJNoXeGzYIkHVf+pADQi+OJ0E67hiuSLezPVPyBcIZO50TmmQ==",
"requires": {
- "debug": "=3.1.0"
- },
- "dependencies": {
- "debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- }
+ "debug": "^3.0.0"
}
},
"fs.realpath": {
@@ -722,6 +754,11 @@
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
},
+ "he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
+ },
"http-errors": {
"version": "1.7.3",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
@@ -734,6 +771,16 @@
"toidentifier": "1.0.0"
}
},
+ "http-proxy": {
+ "version": "1.18.0",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz",
+ "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==",
+ "requires": {
+ "eventemitter3": "^4.0.0",
+ "follow-redirects": "^1.0.0",
+ "requires-port": "^1.0.0"
+ }
+ },
"http-proxy-agent": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz",
@@ -758,6 +805,23 @@
}
}
},
+ "http-server": {
+ "version": "0.12.1",
+ "resolved": "https://registry.npmjs.org/http-server/-/http-server-0.12.1.tgz",
+ "integrity": "sha512-T0jB+7J7GJ2Vo+a4/T7P7SbQ3x2GPDnqRqQXdfEuPuUOmES/9NBxPnDm7dh1HGEeUWqUmLUNtGV63ZC5Uy3tGA==",
+ "requires": {
+ "basic-auth": "^1.0.3",
+ "colors": "^1.3.3",
+ "corser": "^2.0.1",
+ "ecstatic": "^3.3.2",
+ "http-proxy": "^1.17.0",
+ "opener": "^1.5.1",
+ "optimist": "~0.6.1",
+ "portfinder": "^1.0.20",
+ "secure-compare": "3.0.1",
+ "union": "~0.5.0"
+ }
+ },
"https-proxy-agent": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz",
@@ -765,16 +829,6 @@
"requires": {
"agent-base": "^4.3.0",
"debug": "^3.1.0"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
- "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
- "requires": {
- "ms": "^2.1.1"
- }
- }
}
},
"iconv-lite": {
@@ -822,11 +876,6 @@
"binary-extensions": "^2.0.0"
}
},
- "is-buffer": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz",
- "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A=="
- },
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -876,9 +925,9 @@
}
},
"lodash": {
- "version": "4.17.14",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.14.tgz",
- "integrity": "sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw=="
+ "version": "4.17.15",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
},
"lodash.findindex": {
"version": "4.6.0",
@@ -913,6 +962,11 @@
"yallist": "^3.0.2"
}
},
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
+ },
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
@@ -922,9 +976,9 @@
}
},
"minimist": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.4.tgz",
+ "integrity": "sha512-wTiNDqe4D2rbTJGZk1qcdZgFtY0/r+iuE6GDT7V0/+Gu5MLpIDm4+CssDECR79OJs/OxLPXMzdxy153b5Qy3hg=="
},
"mkdirp": {
"version": "0.5.1",
@@ -932,6 +986,13 @@
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"requires": {
"minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ }
}
},
"module-details-from-path": {
@@ -945,9 +1006,9 @@
"integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="
},
"moment-timezone": {
- "version": "0.5.27",
- "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.27.tgz",
- "integrity": "sha512-EIKQs7h5sAsjhPCqN6ggx6cEbs94GK050254TIJySD1bzoM5JTYDwAU1IoVOeTOL6Gm27kYJ51/uuvq1kIlrbw==",
+ "version": "0.5.28",
+ "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.28.tgz",
+ "integrity": "sha512-TDJkZvAyKIVWg5EtVqRzU97w0Rb0YVbfpqyjgu6GwXCAohVRqwZjf4fOzDE6p1Ch98Sro/8hQQi65WDXW5STPw==",
"requires": {
"moment": ">= 2.9.0"
}
@@ -970,16 +1031,6 @@
"debug": "^3.2.6",
"iconv-lite": "^0.4.4",
"sax": "^1.2.4"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
- "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
- "requires": {
- "ms": "^2.1.1"
- }
- }
}
},
"netmask": {
@@ -1016,6 +1067,27 @@
"wrappy": "1"
}
},
+ "opener": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz",
+ "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA=="
+ },
+ "optimist": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+ "requires": {
+ "minimist": "~0.0.1",
+ "wordwrap": "~0.0.2"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
+ "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8="
+ }
+ }
+ },
"optionator": {
"version": "0.8.3",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
@@ -1042,6 +1114,16 @@
"pac-resolver": "^3.0.0",
"raw-body": "^2.2.0",
"socks-proxy-agent": "^4.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
}
},
"pac-resolver": {
@@ -1072,9 +1154,9 @@
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
},
"picomatch": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.1.1.tgz",
- "integrity": "sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA=="
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz",
+ "integrity": "sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA=="
},
"pidusage": {
"version": "2.0.17",
@@ -1085,13 +1167,14 @@
}
},
"pm2": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pm2/-/pm2-4.2.0.tgz",
- "integrity": "sha512-toj4yv5zd1Nf5K7GFoL/bPEZvEJFgXSoHsmgp4axjCf+TEhsrBRjgMPsSSLtVcDeDNApOtZmJAY5TuH5sA1eOA==",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/pm2/-/pm2-4.2.3.tgz",
+ "integrity": "sha512-aRTl8W6dmZ4S2hti1dX4Xvkpy/yIME1H5pMK0HEOpw1H33j4IAfdzScPoPLYaHeh1oL4biabGwxuyClOM8YUVQ==",
"requires": {
"@pm2/agent": "^0.5.26",
"@pm2/io": "^4.3.2",
"@pm2/js-api": "^0.5.60",
+ "@pm2/pm2-version-check": "^1.0.3",
"async": "^3.1.0",
"blessed": "0.1.81",
"chalk": "2.4.2",
@@ -1122,6 +1205,26 @@
"systeminformation": "^4.14.16",
"vizion": "~2.0.2",
"yamljs": "0.3.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz",
+ "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw=="
+ },
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "lodash": {
+ "version": "4.17.14",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.14.tgz",
+ "integrity": "sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw=="
+ }
}
},
"pm2-axon": {
@@ -1133,16 +1236,6 @@
"amp-message": "~0.1.1",
"debug": "^3.0",
"escape-regexp": "0.0.1"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
- "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
- "requires": {
- "ms": "^2.1.1"
- }
- }
}
},
"pm2-axon-rpc": {
@@ -1151,16 +1244,6 @@
"integrity": "sha512-hT8gN3/j05895QLXpwg+Ws8PjO4AVID6Uf9StWpud9HB2homjc1KKCcI0vg9BNOt56FmrqKDT1NQgheIz35+sA==",
"requires": {
"debug": "^3.0"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
- "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
- "requires": {
- "ms": "^2.1.1"
- }
- }
}
},
"pm2-deploy": {
@@ -1170,16 +1253,6 @@
"requires": {
"async": "^2.6",
"tv4": "^1.3"
- },
- "dependencies": {
- "async": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
- "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
- "requires": {
- "lodash": "^4.17.14"
- }
- }
}
},
"pm2-multimeter": {
@@ -1190,6 +1263,16 @@
"charm": "~0.1.1"
}
},
+ "portfinder": {
+ "version": "1.0.25",
+ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.25.tgz",
+ "integrity": "sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==",
+ "requires": {
+ "async": "^2.6.2",
+ "debug": "^3.1.1",
+ "mkdirp": "^0.5.1"
+ }
+ },
"prelude-ls": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
@@ -1221,18 +1304,33 @@
"pac-proxy-agent": "^3.0.1",
"proxy-from-env": "^1.0.0",
"socks-proxy-agent": "^4.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
}
},
"proxy-from-env": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz",
- "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4="
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
},
"ps-list": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/ps-list/-/ps-list-6.3.0.tgz",
"integrity": "sha512-qau0czUSB0fzSlBOQt0bo+I2v6R+xiQdj78e1BR/Qjfl5OHWJ/urXi8+ilw1eHe+5hSeDI1wrwVTgDp2wst4oA=="
},
+ "qs": {
+ "version": "6.9.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.1.tgz",
+ "integrity": "sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA=="
+ },
"raw-body": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz",
@@ -1253,9 +1351,9 @@
}
},
"readable-stream": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -1282,11 +1380,11 @@
}
},
"readdirp": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz",
- "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==",
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz",
+ "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==",
"requires": {
- "picomatch": "^2.0.4"
+ "picomatch": "^2.0.7"
}
},
"rechoir": {
@@ -1298,19 +1396,34 @@
}
},
"require-in-the-middle": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-5.0.2.tgz",
- "integrity": "sha512-l2r6F9i6t5xp4OE9cw/daB/ooQKHZOOW1AYPADhEvk/Tj/THJDS8gePp76Zyuht6Cj57a0KL+eHK5Dyv7wZnKA==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-5.0.3.tgz",
+ "integrity": "sha512-p/ICV8uMlqC4tjOYabLMxAWCIKa0YUQgZZ6KDM0xgXJNgdGQ1WmL2A07TwmrZw+wi6ITUFKzH5v3n+ENEyXVkA==",
"requires": {
"debug": "^4.1.1",
"module-details-from-path": "^1.0.3",
"resolve": "^1.12.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
}
},
+ "requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
+ },
"resolve": {
- "version": "1.13.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.13.1.tgz",
- "integrity": "sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w==",
+ "version": "1.15.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz",
+ "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==",
"requires": {
"path-parse": "^1.0.6"
}
@@ -1330,6 +1443,11 @@
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
},
+ "secure-compare": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz",
+ "integrity": "sha1-8aAymzCLIh+uN7mXTz1XjQypmeM="
+ },
"semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
@@ -1439,9 +1557,9 @@
}
},
"systeminformation": {
- "version": "4.16.0",
- "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-4.16.0.tgz",
- "integrity": "sha512-1FjxPJSw7ad0zug+1YIQATj6Cn+wM5OBASEpjohEeOD2EGPIf0Cnhthd1L2O1YX+wKgOMuPldGfxYdo8yNHEIg==",
+ "version": "4.23.1",
+ "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-4.23.1.tgz",
+ "integrity": "sha512-gtqfvz5jUIMqWn0kkdkV4G8uiLmJckQ+z6aKy1uyE0OPU/6tStubahtZDiF0ajSRVJht+Vd4pX5DDwQLhAapww==",
"optional": true
},
"thunkify": {
@@ -1485,20 +1603,33 @@
"resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
"integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og=="
},
+ "union": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz",
+ "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==",
+ "requires": {
+ "qs": "^6.4.0"
+ }
+ },
"unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
},
+ "url-join": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz",
+ "integrity": "sha1-WvIvGMBSoACkjXuCxenC4v7tpyg="
+ },
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"uuid": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
- "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ=="
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
},
"vizion": {
"version": "2.0.2",
@@ -1530,6 +1661,11 @@
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ=="
},
+ "wordwrap": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+ "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
+ },
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
diff --git a/package.json b/package.json
index acd92fa..47dd318 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "hack.chat-v2",
- "version": "2.1.91",
+ "version": "2.1.93",
"description": "a minimal distraction free chat application",
"main": "index.js",
"repository": {
@@ -12,13 +12,19 @@
"npm": ">= 6.7.0"
},
"scripts": {
- "start": "pm2 start ./server/main.js --node-args=\"-r esm\" --name hackchat-dev-server && cd ./clientSource && npm start && pm2 stop hackchat-dev-server",
- "postinstall": "cd ./clientSource && npm install && cd .. & cd ./server && npm install && npm run config"
+ "start": "pm2 startOrReload pm2.config.js",
+ "stop": "pm2 stop pm2.config.js && pm2 delete pm2.config.js",
+ "logs": "pm2 logs",
+ "clear": "pm2 flush",
+ "status": "pm2 list",
+ "refresh": "pm2 flush && pm2 stop pm2.config.js && pm2 delete pm2.config.js",
+ "postinstall": "cd ./server && npm install && npm run config"
},
"author": "Marzavec",
"license": "WTFPL",
"dependencies": {
"esm": "^3.2.25",
- "pm2": "^4.2.0"
+ "http-server": "^0.12.1",
+ "pm2": "^4.2.3"
}
}
diff --git a/pm2.config.js b/pm2.config.js
new file mode 100644
index 0000000..491f8e1
--- /dev/null
+++ b/pm2.config.js
@@ -0,0 +1,33 @@
+module.exports = {
+ apps : [{
+ name : 'hackchat-websocket',
+ node_args : '-r esm',
+ script : './server/main.js',
+ instances: 1,
+ autorestart: true,
+ max_memory_restart: '2G',
+ exec_mode: 'fork',
+ watch : false,
+ env: {
+ NODE_ENV: 'development'
+ },
+ env_production: {
+ NODE_ENV: 'production'
+ }
+ }, {
+ name: 'hackchat-httpd',
+ script: './node_modules/http-server/bin/http-server',
+ args: './client -p 3000 -o',
+ instances: 1,
+ autorestart: true,
+ watch: false,
+ max_memory_restart: '2G',
+ exec_mode: 'fork',
+ env: {
+ NODE_ENV: 'development'
+ },
+ env_production: {
+ NODE_ENV: 'production'
+ }
+ }]
+};
diff --git a/server/package-lock.json b/server/package-lock.json
index 6957232..6a1b8c3 100644
--- a/server/package-lock.json
+++ b/server/package-lock.json
@@ -10,24 +10,24 @@
"integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ=="
},
"ansi-styles": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.0.tgz",
- "integrity": "sha512-7kFQgnEaMdRtwf6uSfUnVr9gSGC7faurn+J/Mv90/W+iTtN0405/nLdopfMWwchyxhbGYl6TC4Sccn9TUkGAgg==",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
+ "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
"requires": {
"@types/color-name": "^1.1.1",
"color-convert": "^2.0.1"
}
},
+ "ascii-captcha": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/ascii-captcha/-/ascii-captcha-0.0.3.tgz",
+ "integrity": "sha1-NAtO1oVYOHEHsJVzBC/kc4v0mPk="
+ },
"async": {
"version": "0.9.2",
"resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
"integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0="
},
- "async-limiter": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
- "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
- },
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
@@ -95,13 +95,12 @@
"integrity": "sha1-hLdFiW80xoTpjyzg5Cq69Du6AX0="
},
"didyoumean2": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/didyoumean2/-/didyoumean2-3.1.2.tgz",
- "integrity": "sha512-5j2ZwqqXoNIUxgNWcwsqOXECB+2br7pXCBf7E3bymh9pHINvcL8knXkP67iMK/CNGZk/tf40ixCfjFV4osdFBA==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/didyoumean2/-/didyoumean2-4.0.0.tgz",
+ "integrity": "sha512-7+OMIHqPDJ4uxeExQx8cSk26oD3KUloAQzi2R+3rmTU4IHvSDDmWZTQ6bmC4+MTw61DkYoh5ARxwS9MRoz0t2A==",
"requires": {
"leven": "^3.1.0",
- "lodash.deburr": "^4.1.0",
- "ramda": "^0.26.1"
+ "lodash.deburr": "^4.1.0"
}
},
"esm": {
@@ -256,11 +255,6 @@
"winston": "2.1.x"
}
},
- "ramda": {
- "version": "0.26.1",
- "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.26.1.tgz",
- "integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ=="
- },
"read": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
@@ -355,12 +349,9 @@
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"ws": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.0.tgz",
- "integrity": "sha512-+SqNqFbwTm/0DC18KYzIsMTnEWpLwJsiasW/O17la4iDRRIO9uaHbvKiAS3AHgTiuuWerK/brj4O6MYZkei9xg==",
- "requires": {
- "async-limiter": "^1.0.0"
- }
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.3.tgz",
+ "integrity": "sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ=="
}
}
}
diff --git a/server/package.json b/server/package.json
index 311a591..f6a9a90 100644
--- a/server/package.json
+++ b/server/package.json
@@ -1,6 +1,6 @@
{
"name": "hack.chat-v2",
- "version": "2.1.9",
+ "version": "2.1.93",
"description": "a minimal distraction free chat application",
"main": "main.js",
"repository": {
@@ -21,11 +21,11 @@
"chalk": "^3.0.0",
"common-tags": "^1.8.0",
"dateformat": "^3.0.3",
- "didyoumean2": "^3.1.2",
+ "didyoumean2": "^4.0.0",
"esm": "^3.2.25",
"fs-extra": "^8.1.0",
"prompt": "^1.0.0",
"readdir-recursive": "0.0.4",
- "ws": "^7.2.0"
+ "ws": "^7.2.3"
}
}
diff --git a/server/src/commands/admin/reload.js b/server/src/commands/admin/reload.js
index f74624e..a1d22ac 100644
--- a/server/src/commands/admin/reload.js
+++ b/server/src/commands/admin/reload.js
@@ -31,7 +31,7 @@ export async function run(core, server, socket, data) {
}
// send results to moderators (which the user using this command is higher than)
- server.reply({
+ server.broadcast({
cmd: 'info',
text: loadResult,
}, { level: UAC.isModerator });
diff --git a/server/src/commands/admin/saveconfig.js b/server/src/commands/admin/saveconfig.js
index b9411af..260ff14 100644
--- a/server/src/commands/admin/saveconfig.js
+++ b/server/src/commands/admin/saveconfig.js
@@ -20,7 +20,7 @@ export async function run(core, server, socket) {
}
// return success message to moderators and admins
- server.reply({
+ server.broadcast({
cmd: 'info',
text: 'Config saved!',
}, { level: UAC.isModerator });
diff --git a/server/src/commands/core/emote.js b/server/src/commands/core/emote.js
index 19a5fbe..21d14d1 100644
--- a/server/src/commands/core/emote.js
+++ b/server/src/commands/core/emote.js
@@ -22,7 +22,7 @@ const parseText = (text) => {
// module main
export async function run(core, server, socket, payload) {
// check user input
- const text = parseText(payload.text);
+ let text = parseText(payload.text);
if (!text) {
// lets not send objects or empty text, yea?
@@ -38,11 +38,15 @@ export async function run(core, server, socket, payload) {
}, socket);
}
+ if (!text.startsWith("'")) {
+ text = ` ${text}`;
+ }
+
const newPayload = {
cmd: 'info',
type: 'emote',
nick: socket.nick,
- text: `@${socket.nick} ${text}`,
+ text: `@${socket.nick}${text}`,
};
if (socket.trip) {
newPayload.trip = socket.trip;
diff --git a/server/src/commands/core/join.js b/server/src/commands/core/join.js
index ddbdf6d..b17e1fc 100644
--- a/server/src/commands/core/join.js
+++ b/server/src/commands/core/join.js
@@ -18,7 +18,7 @@ const hash = (password) => {
export function parseNickname(core, data) {
const userInfo = {
nick: '',
- uType: 'user',
+ uType: 'user', /* @legacy */
trip: null,
level: UAC.levels.default,
};
@@ -41,7 +41,7 @@ export function parseNickname(core, data) {
}
if (hash(password + core.config.tripSalt) === core.config.adminTrip) {
- userInfo.uType = 'admin';
+ userInfo.uType = 'admin'; /* @legacy */
userInfo.trip = 'Admin';
userInfo.level = UAC.levels.admin;
} else if (userInfo.nick.toLowerCase() === core.config.adminName.toLowerCase()) {
@@ -55,7 +55,7 @@ export function parseNickname(core, data) {
// for (const mod of core.config.mods) {
core.config.mods.forEach((mod) => {
if (userInfo.trip === mod.trip) {
- userInfo.uType = 'mod';
+ userInfo.uType = 'mod'; /* @legacy */
userInfo.level = UAC.levels.moderator;
}
});
@@ -111,40 +111,73 @@ export async function run(core, server, socket, data) {
}, socket);
}
- userInfo.userHash = server.getSocketHash(socket);
+ userInfo.hash = server.getSocketHash(socket);
+ // assign "unique" socket ID
+ if (typeof socket.userid === 'undefined') {
+ userInfo.userid = Math.floor(Math.random() * 9999999999999);
+ }
+
+ // TODO: place this within it's own function allowing import
// prepare to notify channel peers
const newPeerList = server.findSockets({ channel: data.channel });
- const nicks = [];
+ const nicks = []; /* @legacy */
+ const users = [];
const joinAnnouncement = {
cmd: 'onlineAdd',
nick: userInfo.nick,
trip: userInfo.trip || 'null',
- hash: userInfo.userHash,
+ utype: userInfo.uType, /* @legacy */
+ hash: userInfo.hash,
level: userInfo.level,
+ userid: userInfo.userid,
+ channel: data.channel,
};
// send join announcement and prep online set
for (let i = 0, l = newPeerList.length; i < l; i += 1) {
server.reply(joinAnnouncement, newPeerList[i]);
- nicks.push(newPeerList[i].nick);
+ nicks.push(newPeerList[i].nick); /* @legacy */
+
+ users.push({
+ nick: newPeerList[i].nick,
+ trip: newPeerList[i].trip,
+ utype: newPeerList[i].uType, /* @legacy */
+ hash: newPeerList[i].userHash,
+ level: newPeerList[i].level,
+ userid: newPeerList[i].userid,
+ channel: data.channel,
+ isme: false,
+ });
}
// store user info
- socket.uType = userInfo.uType;
+ socket.uType = userInfo.uType; /* @legacy */
socket.nick = userInfo.nick;
- socket.channel = data.channel;
- socket.hash = userInfo.userHash;
+ socket.trip = userInfo.trip;
+ socket.channel = data.channel; /* @legacy */
+ socket.hash = userInfo.hash;
socket.level = userInfo.level;
- if (userInfo.trip !== null) socket.trip = userInfo.trip;
-
- nicks.push(socket.nick);
+ socket.userid = userInfo.userid;
+
+ nicks.push(socket.nick); /* @legacy */
+ users.push({
+ nick: socket.nick,
+ trip: socket.trip,
+ utype: socket.uType,
+ hash: socket.userHash,
+ level: socket.level,
+ userid: socket.userid,
+ channel: data.channel,
+ isme: true,
+ });
// reply with channel peer list
server.reply({
cmd: 'onlineSet',
- nicks,
+ nicks, /* @legacy */
+ users,
}, socket);
// stats are fun
diff --git a/server/src/commands/core/move.js b/server/src/commands/core/move.js
index 7eda88c..fdafab4 100644
--- a/server/src/commands/core/move.js
+++ b/server/src/commands/core/move.js
@@ -17,6 +17,13 @@ export async function run(core, server, socket, data) {
return true;
}
+ if (data.channel === '') {
+ return server.reply({
+ cmd: 'warn',
+ text: 'Cannot move to an empty channel.',
+ }, socket);
+ }
+
if (data.channel === socket.channel) {
// they are trying to rejoin the channel
return true;
@@ -53,6 +60,7 @@ export async function run(core, server, socket, data) {
}
}
+ // TODO: import function from join module
// broadcast join notice to new peers
const newPeerList = server.findSockets({ channel: data.channel });
const moveAnnouncement = {
@@ -82,10 +90,45 @@ export async function run(core, server, socket, data) {
return true;
}
+// module hook functions
+export function initHooks(server) {
+ server.registerHook('in', 'chat', this.moveCheck.bind(this), 29);
+}
+
+export function moveCheck(core, server, socket, payload) {
+ if (typeof payload.text !== 'string') {
+ return false;
+ }
+
+ if (payload.text.startsWith('/move ')) {
+ const input = payload.text.split(' ');
+
+ // If there is no channel target parameter
+ if (input[1] === undefined) {
+ server.reply({
+ cmd: 'warn',
+ text: 'Refer to `/help move` for instructions on how to use this command.',
+ }, socket);
+
+ return false;
+ }
+
+ this.run(core, server, socket, {
+ cmd: 'move',
+ channel: input[1],
+ });
+
+ return false;
+ }
+
+ return payload;
+}
+
export const requiredData = ['channel'];
export const info = {
name: 'move',
description: 'This will change your current channel to the new one provided',
usage: `
- API: { cmd: 'move', channel: '<target channel>' }`,
+ API: { cmd: 'move', channel: '<target channel>' }
+ Text: /move <new channel>`,
};
diff --git a/server/src/commands/core/ping.js b/server/src/commands/core/ping.js
index 7d8623d..6266f4c 100644
--- a/server/src/commands/core/ping.js
+++ b/server/src/commands/core/ping.js
@@ -3,9 +3,7 @@
*/
// module main
-export async function run() {
-
-}
+export async function run() { }
export const info = {
name: 'ping',
diff --git a/server/src/commands/core/session.js b/server/src/commands/core/session.js
new file mode 100644
index 0000000..677e9a4
--- /dev/null
+++ b/server/src/commands/core/session.js
@@ -0,0 +1,13 @@
+/*
+ Description: Create a new socket session or restore previous session
+*/
+
+// module main
+export async function run() { }
+
+export const info = {
+ name: 'session',
+ description: 'Restore previous state by session id or return new session id (currently unavailable)',
+ usage: `
+ API: { cmd: 'session', id: '<previous session>' }`
+};
diff --git a/server/src/commands/core/whisper.js b/server/src/commands/core/whisper.js
index 0c2e2d3..4424cd2 100644
--- a/server/src/commands/core/whisper.js
+++ b/server/src/commands/core/whisper.js
@@ -88,7 +88,7 @@ export function whisperCheck(core, server, socket, payload) {
return false;
}
- if (payload.text.startsWith('/whisper')) {
+ if (payload.text.startsWith('/whisper') || payload.text.startsWith('/w ')) {
const input = payload.text.split(' ');
// If there is no nickname target parameter
@@ -147,5 +147,6 @@ export const info = {
usage: `
API: { cmd: 'whisper', nick: '<target name>', text: '<text to whisper>' }
Text: /whisper <target name> <text to whisper>
+ Text: /w <target name> <text to whisper>
Alt Text: /r <text to whisper, this will auto reply to the last person who whispered to you>`,
};
diff --git a/server/src/commands/mod/dumb.js b/server/src/commands/mod/dumb.js
index 51fc745..ba2886d 100644
--- a/server/src/commands/mod/dumb.js
+++ b/server/src/commands/mod/dumb.js
@@ -66,9 +66,9 @@ export async function run(core, server, socket, data) {
// module hook functions
export function initHooks(server) {
- server.registerHook('in', 'chat', this.chatCheck.bind(this), 25);
- server.registerHook('in', 'invite', this.inviteCheck.bind(this), 25);
- // TODO: add whisper hook, need hook priorities todo finished first
+ server.registerHook('in', 'chat', this.chatCheck.bind(this), 10);
+ server.registerHook('in', 'invite', this.inviteCheck.bind(this), 10);
+ server.registerHook('in', 'whisper', this.whisperCheck.bind(this), 10);
}
// hook incoming chat commands, shadow-prevent chat if they are muzzled
@@ -140,6 +140,34 @@ export function inviteCheck(core, server, socket, payload) {
return payload;
}
+// shadow-prevent all whispers from muzzled users
+export function whisperCheck(core, server, socket, payload) {
+ if (typeof payload.nick !== 'string') {
+ return false;
+ }
+
+ if (typeof payload.text !== 'string') {
+ return false;
+ }
+
+ if (core.muzzledHashes[socket.hash]) {
+ const targetNick = payload.nick;
+
+ server.reply({
+ cmd: 'info',
+ type: 'whisper',
+ text: `You whispered to @${targetNick}: ${payload.text}`,
+ }, socket);
+
+ // blanket "spam" protection, may expose the ratelimiting lines from `chat` and use that, TODO: one day #lazydev
+ server.police.frisk(socket.address, 9);
+
+ return false;
+ }
+
+ return payload;
+}
+
export const requiredData = ['nick'];
export const info = {
name: 'dumb',
diff --git a/server/src/commands/mod/moveuser.js b/server/src/commands/mod/moveuser.js
index 4b5d52c..b86edb4 100644
--- a/server/src/commands/mod/moveuser.js
+++ b/server/src/commands/mod/moveuser.js
@@ -68,6 +68,7 @@ export async function run(core, server, socket, data) {
}
}
+ // TODO: import from join module
const newPeerList = server.findSockets({ channel: data.channel });
const moveAnnouncement = {
cmd: 'onlineAdd',
diff --git a/server/src/commands/mod/speak.js b/server/src/commands/mod/speak.js
index f184ef5..e5ff8e2 100644
--- a/server/src/commands/mod/speak.js
+++ b/server/src/commands/mod/speak.js
@@ -27,6 +27,24 @@ export async function run(core, server, socket, data) {
}, socket);
}
+ if (typeof data.ip === 'string') {
+ if (data.ip === '*') {
+ core.muzzledHashes = {};
+
+ return server.broadcast({
+ cmd: 'info',
+ text: `${socket.nick} unmuzzled all users`,
+ }, { level: UAC.isModerator });
+ }
+ } else if (data.hash === '*') {
+ core.muzzledHashes = {};
+
+ return server.broadcast({
+ cmd: 'info',
+ text: `${socket.nick} unmuzzled all users`,
+ }, { level: UAC.isModerator });
+ }
+
// find target & remove mute status
let target;
if (typeof data.ip === 'string') {
diff --git a/server/src/commands/mod/unban.js b/server/src/commands/mod/unban.js
index 9f50e92..3b72fdc 100644
--- a/server/src/commands/mod/unban.js
+++ b/server/src/commands/mod/unban.js
@@ -20,8 +20,8 @@ export async function run(core, server, socket, data) {
}
// find target
- let mode; let
- target;
+ let mode;
+ let target;
if (typeof data.ip === 'string') {
mode = 'ip';
target = data.ip;
diff --git a/server/src/commands/mod/unbanall.js b/server/src/commands/mod/unbanall.js
index a5de3c8..9d417aa 100644
--- a/server/src/commands/mod/unbanall.js
+++ b/server/src/commands/mod/unbanall.js
@@ -14,6 +14,8 @@ export async function run(core, server, socket) {
// remove arrest records
server.police.clear();
+ core.stats.set('users-banned', 0);
+
console.log(`${socket.nick} [${socket.trip}] unbanned all`);
// reply with success