├── .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 |
20 |
24 |
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 |
--------------------------------------------------------------------------------