├── .gitignore ├── package.json ├── readme.md ├── index.js ├── public ├── script.js ├── style.css └── index.html └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | deploy.sh -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jambot-server", 3 | "version": "0.0.1", 4 | "description": "J A M B O T", 5 | "dependencies": { 6 | "express": "4.15.2", 7 | "socket.io": "^2.0.4" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # JamBot Server 2 | 3 | Socket.io-powered websocket server to trigger the [JamBot](https://github.com/orangespaceman/jambot) remotely 4 | 5 | ## Installation 6 | 7 | Check this out on a server and run: 8 | 9 | ``` 10 | yarn # or npm install 11 | node index.js 12 | ``` 13 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | var express = require("express"); 2 | var app = express(); 3 | var http = require("http").Server(app); 4 | var io = require("socket.io")(http); 5 | 6 | var jambotConnected = false; 7 | var jambotSocket = null; 8 | 9 | app.get("/", function(req, res) { 10 | res.sendFile(__dirname + "/public/index.html"); 11 | }); 12 | 13 | app.use(express.static("public")); 14 | 15 | io.on("connection", function(socket) { 16 | socket.on("client", function() { 17 | socket.emit("jambotConnected", jambotConnected); 18 | }); 19 | socket.on("jambot", function() { 20 | jambotConnected = true; 21 | jambotSocket = socket; 22 | socket.broadcast.emit("jambotConnected", jambotConnected); 23 | }); 24 | socket.on("play", function(msg) { 25 | io.emit("play", msg); 26 | }); 27 | socket.on("say", function(msg) { 28 | io.emit("say", msg); 29 | }); 30 | socket.on("disconnect", function() { 31 | if (socket === jambotSocket) { 32 | jambotConnected = false; 33 | jambotSocket = null; 34 | socket.broadcast.emit("jambotConnected", jambotConnected); 35 | } 36 | }); 37 | }); 38 | 39 | http.listen(7006); 40 | -------------------------------------------------------------------------------- /public/script.js: -------------------------------------------------------------------------------- 1 | var socket = io(); 2 | 3 | $(".say").submit(e => { 4 | e.preventDefault(); 5 | socket.emit("say", $("#m").val()); 6 | $("#m").val(""); 7 | }); 8 | 9 | $(".play-link").click(e => { 10 | e.preventDefault(); 11 | socket.emit("play", e.target.textContent); 12 | }); 13 | 14 | socket.emit("client"); 15 | 16 | socket.on("play", msg => log("play", msg)); 17 | 18 | socket.on("say", msg => log("say", msg)); 19 | 20 | socket.on("jambotConnected", jambotConnected => { 21 | updateState(jambotConnected); 22 | if (jambotConnected) { 23 | log("JamBot connected", "Hooray!"); 24 | } else { 25 | log("JamBot disconnected", "Boo!"); 26 | } 27 | }); 28 | 29 | function updateState(jambotConnected) { 30 | var $value = $(".jambot-state-value"); 31 | $value.fadeOut(function(){ 32 | $value.text(jambotConnected ? 'online' : 'offline').fadeIn(); 33 | }); 34 | } 35 | 36 | function log(type, msg) { 37 | var date = new Date(); 38 | var hour = date.getHours(); 39 | var minute = date.getMinutes(); 40 | var second = date.getSeconds(); 41 | 42 | if (minute < 10) { 43 | minute = "0" + minute; 44 | } 45 | 46 | if (second < 10) { 47 | second = "0" + second; 48 | } 49 | 50 | var text = `${hour}:${minute}:${second}: (${type}) '${msg}'`; 51 | $(".log").prepend($("
  • ").text(text)); 52 | } 53 | -------------------------------------------------------------------------------- /public/style.css: -------------------------------------------------------------------------------- 1 | * { 2 | margin: 0; 3 | padding: 0; 4 | box-sizing: border-box; 5 | } 6 | 7 | html { 8 | height: 100%; 9 | } 10 | 11 | body { 12 | font-family: "Comic Sans MS"; 13 | height: 100%; 14 | } 15 | 16 | .wrap { 17 | display: flex; 18 | flex-direction: column; 19 | height: 100%; 20 | } 21 | 22 | /* header */ 23 | 24 | .header { 25 | background: #000; 26 | color: #fff; 27 | padding: 10px; 28 | text-align: center; 29 | position: relative; 30 | } 31 | 32 | .jambot-state { 33 | position: absolute; 34 | left: 5px; 35 | top: 5px; 36 | margin: 0; 37 | color: #f90; 38 | } 39 | 40 | /* play */ 41 | 42 | .play { 43 | flex: 1; 44 | overflow: scroll; 45 | margin: 5px; 46 | } 47 | 48 | .play-item { 49 | display: inline-block; 50 | } 51 | 52 | .play-link { 53 | display: block; 54 | padding: 10px; 55 | margin: 5px; 56 | background: #eee; 57 | color: #000; 58 | text-decoration: none; 59 | } 60 | 61 | /* say */ 62 | 63 | .say { 64 | display: flex; 65 | background: #000; 66 | padding: 10px; 67 | bottom: 0; 68 | width: 100%; 69 | } 70 | 71 | .say-input { 72 | font-family: "Comic Sans MS"; 73 | flex: 1; 74 | border: 0; 75 | padding: 10px; 76 | } 77 | 78 | .say-button { 79 | font-family: "Comic Sans MS"; 80 | background: rgb(130, 224, 255); 81 | border: none; 82 | padding: 10px 30px; 83 | } 84 | 85 | /* log */ 86 | 87 | .log { 88 | height: 60px; 89 | padding: 10px; 90 | overflow: scroll; 91 | background: #f3f3f3; 92 | border-top: 1px solid #000; 93 | } 94 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | JamBot 8 | 9 | 10 | 11 | 12 |
    13 |
    14 |

    JamBot

    15 |

    16 | JamBot 17 | offline 18 |

    19 |
    20 |
    21 | 22 | 23 |
    24 |
    25 | 228 |
    229 | 230 |
    231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | accepts@1.3.3: 6 | version "1.3.3" 7 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" 8 | dependencies: 9 | mime-types "~2.1.11" 10 | negotiator "0.6.1" 11 | 12 | accepts@~1.3.3: 13 | version "1.3.4" 14 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f" 15 | dependencies: 16 | mime-types "~2.1.16" 17 | negotiator "0.6.1" 18 | 19 | after@0.8.2: 20 | version "0.8.2" 21 | resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" 22 | 23 | array-flatten@1.1.1: 24 | version "1.1.1" 25 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 26 | 27 | arraybuffer.slice@0.0.6: 28 | version "0.0.6" 29 | resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz#f33b2159f0532a3f3107a272c0ccfbd1ad2979ca" 30 | 31 | async-limiter@~1.0.0: 32 | version "1.0.0" 33 | resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" 34 | 35 | backo2@1.0.2: 36 | version "1.0.2" 37 | resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" 38 | 39 | base64-arraybuffer@0.1.5: 40 | version "0.1.5" 41 | resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" 42 | 43 | base64id@1.0.0: 44 | version "1.0.0" 45 | resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" 46 | 47 | better-assert@~1.0.0: 48 | version "1.0.2" 49 | resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" 50 | dependencies: 51 | callsite "1.0.0" 52 | 53 | blob@0.0.4: 54 | version "0.0.4" 55 | resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921" 56 | 57 | callsite@1.0.0: 58 | version "1.0.0" 59 | resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" 60 | 61 | component-bind@1.0.0: 62 | version "1.0.0" 63 | resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" 64 | 65 | component-emitter@1.2.1: 66 | version "1.2.1" 67 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" 68 | 69 | component-inherit@0.0.3: 70 | version "0.0.3" 71 | resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" 72 | 73 | content-disposition@0.5.2: 74 | version "0.5.2" 75 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" 76 | 77 | content-type@~1.0.2: 78 | version "1.0.4" 79 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 80 | 81 | cookie-signature@1.0.6: 82 | version "1.0.6" 83 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 84 | 85 | cookie@0.3.1: 86 | version "0.3.1" 87 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" 88 | 89 | debug@2.6.1: 90 | version "2.6.1" 91 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351" 92 | dependencies: 93 | ms "0.7.2" 94 | 95 | debug@2.6.9, debug@~2.6.4, debug@~2.6.6, debug@~2.6.9: 96 | version "2.6.9" 97 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 98 | dependencies: 99 | ms "2.0.0" 100 | 101 | depd@1.1.1, depd@~1.1.0: 102 | version "1.1.1" 103 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" 104 | 105 | destroy@~1.0.4: 106 | version "1.0.4" 107 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 108 | 109 | ee-first@1.1.1: 110 | version "1.1.1" 111 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 112 | 113 | encodeurl@~1.0.1: 114 | version "1.0.1" 115 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" 116 | 117 | engine.io-client@~3.1.0: 118 | version "3.1.4" 119 | resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.1.4.tgz#4fcf1370b47163bd2ce9be2733972430350d4ea1" 120 | dependencies: 121 | component-emitter "1.2.1" 122 | component-inherit "0.0.3" 123 | debug "~2.6.9" 124 | engine.io-parser "~2.1.1" 125 | has-cors "1.1.0" 126 | indexof "0.0.1" 127 | parseqs "0.0.5" 128 | parseuri "0.0.5" 129 | ws "~3.3.1" 130 | xmlhttprequest-ssl "~1.5.4" 131 | yeast "0.1.2" 132 | 133 | engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: 134 | version "2.1.1" 135 | resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.1.tgz#e0fb3f0e0462f7f58bb77c1a52e9f5a7e26e4668" 136 | dependencies: 137 | after "0.8.2" 138 | arraybuffer.slice "0.0.6" 139 | base64-arraybuffer "0.1.5" 140 | blob "0.0.4" 141 | has-binary2 "~1.0.2" 142 | 143 | engine.io@~3.1.0: 144 | version "3.1.4" 145 | resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.1.4.tgz#3d0211b70a552ce841ffc7da8627b301a9a4162e" 146 | dependencies: 147 | accepts "1.3.3" 148 | base64id "1.0.0" 149 | cookie "0.3.1" 150 | debug "~2.6.9" 151 | engine.io-parser "~2.1.0" 152 | ws "~3.3.1" 153 | optionalDependencies: 154 | uws "~0.14.4" 155 | 156 | escape-html@~1.0.3: 157 | version "1.0.3" 158 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 159 | 160 | etag@~1.8.0: 161 | version "1.8.1" 162 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 163 | 164 | express@4.15.2: 165 | version "4.15.2" 166 | resolved "https://registry.yarnpkg.com/express/-/express-4.15.2.tgz#af107fc148504457f2dca9a6f2571d7129b97b35" 167 | dependencies: 168 | accepts "~1.3.3" 169 | array-flatten "1.1.1" 170 | content-disposition "0.5.2" 171 | content-type "~1.0.2" 172 | cookie "0.3.1" 173 | cookie-signature "1.0.6" 174 | debug "2.6.1" 175 | depd "~1.1.0" 176 | encodeurl "~1.0.1" 177 | escape-html "~1.0.3" 178 | etag "~1.8.0" 179 | finalhandler "~1.0.0" 180 | fresh "0.5.0" 181 | merge-descriptors "1.0.1" 182 | methods "~1.1.2" 183 | on-finished "~2.3.0" 184 | parseurl "~1.3.1" 185 | path-to-regexp "0.1.7" 186 | proxy-addr "~1.1.3" 187 | qs "6.4.0" 188 | range-parser "~1.2.0" 189 | send "0.15.1" 190 | serve-static "1.12.1" 191 | setprototypeof "1.0.3" 192 | statuses "~1.3.1" 193 | type-is "~1.6.14" 194 | utils-merge "1.0.0" 195 | vary "~1.1.0" 196 | 197 | finalhandler@~1.0.0: 198 | version "1.0.6" 199 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.6.tgz#007aea33d1a4d3e42017f624848ad58d212f814f" 200 | dependencies: 201 | debug "2.6.9" 202 | encodeurl "~1.0.1" 203 | escape-html "~1.0.3" 204 | on-finished "~2.3.0" 205 | parseurl "~1.3.2" 206 | statuses "~1.3.1" 207 | unpipe "~1.0.0" 208 | 209 | forwarded@~0.1.0: 210 | version "0.1.2" 211 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" 212 | 213 | fresh@0.5.0: 214 | version "0.5.0" 215 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e" 216 | 217 | has-binary2@~1.0.2: 218 | version "1.0.2" 219 | resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.2.tgz#e83dba49f0b9be4d026d27365350d9f03f54be98" 220 | dependencies: 221 | isarray "2.0.1" 222 | 223 | has-cors@1.1.0: 224 | version "1.1.0" 225 | resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" 226 | 227 | http-errors@~1.6.1: 228 | version "1.6.2" 229 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" 230 | dependencies: 231 | depd "1.1.1" 232 | inherits "2.0.3" 233 | setprototypeof "1.0.3" 234 | statuses ">= 1.3.1 < 2" 235 | 236 | indexof@0.0.1: 237 | version "0.0.1" 238 | resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" 239 | 240 | inherits@2.0.3: 241 | version "2.0.3" 242 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 243 | 244 | ipaddr.js@1.4.0: 245 | version "1.4.0" 246 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.4.0.tgz#296aca878a821816e5b85d0a285a99bcff4582f0" 247 | 248 | isarray@2.0.1: 249 | version "2.0.1" 250 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" 251 | 252 | media-typer@0.3.0: 253 | version "0.3.0" 254 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 255 | 256 | merge-descriptors@1.0.1: 257 | version "1.0.1" 258 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 259 | 260 | methods@~1.1.2: 261 | version "1.1.2" 262 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 263 | 264 | mime-db@~1.30.0: 265 | version "1.30.0" 266 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" 267 | 268 | mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.16: 269 | version "2.1.17" 270 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" 271 | dependencies: 272 | mime-db "~1.30.0" 273 | 274 | mime@1.3.4: 275 | version "1.3.4" 276 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" 277 | 278 | ms@0.7.2: 279 | version "0.7.2" 280 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" 281 | 282 | ms@2.0.0: 283 | version "2.0.0" 284 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 285 | 286 | negotiator@0.6.1: 287 | version "0.6.1" 288 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" 289 | 290 | object-component@0.0.3: 291 | version "0.0.3" 292 | resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" 293 | 294 | on-finished@~2.3.0: 295 | version "2.3.0" 296 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 297 | dependencies: 298 | ee-first "1.1.1" 299 | 300 | parseqs@0.0.5: 301 | version "0.0.5" 302 | resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" 303 | dependencies: 304 | better-assert "~1.0.0" 305 | 306 | parseuri@0.0.5: 307 | version "0.0.5" 308 | resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" 309 | dependencies: 310 | better-assert "~1.0.0" 311 | 312 | parseurl@~1.3.1, parseurl@~1.3.2: 313 | version "1.3.2" 314 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" 315 | 316 | path-to-regexp@0.1.7: 317 | version "0.1.7" 318 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 319 | 320 | proxy-addr@~1.1.3: 321 | version "1.1.5" 322 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.5.tgz#71c0ee3b102de3f202f3b64f608d173fcba1a918" 323 | dependencies: 324 | forwarded "~0.1.0" 325 | ipaddr.js "1.4.0" 326 | 327 | qs@6.4.0: 328 | version "6.4.0" 329 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" 330 | 331 | range-parser@~1.2.0: 332 | version "1.2.0" 333 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" 334 | 335 | safe-buffer@~5.1.0: 336 | version "5.1.1" 337 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" 338 | 339 | send@0.15.1: 340 | version "0.15.1" 341 | resolved "https://registry.yarnpkg.com/send/-/send-0.15.1.tgz#8a02354c26e6f5cca700065f5f0cdeba90ec7b5f" 342 | dependencies: 343 | debug "2.6.1" 344 | depd "~1.1.0" 345 | destroy "~1.0.4" 346 | encodeurl "~1.0.1" 347 | escape-html "~1.0.3" 348 | etag "~1.8.0" 349 | fresh "0.5.0" 350 | http-errors "~1.6.1" 351 | mime "1.3.4" 352 | ms "0.7.2" 353 | on-finished "~2.3.0" 354 | range-parser "~1.2.0" 355 | statuses "~1.3.1" 356 | 357 | serve-static@1.12.1: 358 | version "1.12.1" 359 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.1.tgz#7443a965e3ced647aceb5639fa06bf4d1bbe0039" 360 | dependencies: 361 | encodeurl "~1.0.1" 362 | escape-html "~1.0.3" 363 | parseurl "~1.3.1" 364 | send "0.15.1" 365 | 366 | setprototypeof@1.0.3: 367 | version "1.0.3" 368 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" 369 | 370 | socket.io-adapter@~1.1.0: 371 | version "1.1.1" 372 | resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b" 373 | 374 | socket.io-client@2.0.4: 375 | version "2.0.4" 376 | resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.0.4.tgz#0918a552406dc5e540b380dcd97afc4a64332f8e" 377 | dependencies: 378 | backo2 "1.0.2" 379 | base64-arraybuffer "0.1.5" 380 | component-bind "1.0.0" 381 | component-emitter "1.2.1" 382 | debug "~2.6.4" 383 | engine.io-client "~3.1.0" 384 | has-cors "1.1.0" 385 | indexof "0.0.1" 386 | object-component "0.0.3" 387 | parseqs "0.0.5" 388 | parseuri "0.0.5" 389 | socket.io-parser "~3.1.1" 390 | to-array "0.1.4" 391 | 392 | socket.io-parser@~3.1.1: 393 | version "3.1.2" 394 | resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.1.2.tgz#dbc2282151fc4faebbe40aeedc0772eba619f7f2" 395 | dependencies: 396 | component-emitter "1.2.1" 397 | debug "~2.6.4" 398 | has-binary2 "~1.0.2" 399 | isarray "2.0.1" 400 | 401 | socket.io@^2.0.4: 402 | version "2.0.4" 403 | resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.0.4.tgz#c1a4590ceff87ecf13c72652f046f716b29e6014" 404 | dependencies: 405 | debug "~2.6.6" 406 | engine.io "~3.1.0" 407 | socket.io-adapter "~1.1.0" 408 | socket.io-client "2.0.4" 409 | socket.io-parser "~3.1.1" 410 | 411 | "statuses@>= 1.3.1 < 2": 412 | version "1.4.0" 413 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" 414 | 415 | statuses@~1.3.1: 416 | version "1.3.1" 417 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" 418 | 419 | to-array@0.1.4: 420 | version "0.1.4" 421 | resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" 422 | 423 | type-is@~1.6.14: 424 | version "1.6.15" 425 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" 426 | dependencies: 427 | media-typer "0.3.0" 428 | mime-types "~2.1.15" 429 | 430 | ultron@~1.1.0: 431 | version "1.1.1" 432 | resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" 433 | 434 | unpipe@~1.0.0: 435 | version "1.0.0" 436 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 437 | 438 | utils-merge@1.0.0: 439 | version "1.0.0" 440 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" 441 | 442 | uws@~0.14.4: 443 | version "0.14.5" 444 | resolved "https://registry.yarnpkg.com/uws/-/uws-0.14.5.tgz#67aaf33c46b2a587a5f6666d00f7691328f149dc" 445 | 446 | vary@~1.1.0: 447 | version "1.1.2" 448 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 449 | 450 | ws@~3.3.1: 451 | version "3.3.3" 452 | resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" 453 | dependencies: 454 | async-limiter "~1.0.0" 455 | safe-buffer "~5.1.0" 456 | ultron "~1.1.0" 457 | 458 | xmlhttprequest-ssl@~1.5.4: 459 | version "1.5.4" 460 | resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.4.tgz#04f560915724b389088715cc0ed7813e9677bf57" 461 | 462 | yeast@0.1.2: 463 | version "0.1.2" 464 | resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" 465 | --------------------------------------------------------------------------------