ioserver 1.2.8 → 1.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -6
- package/build/ioserver.js +138 -103
- package/build/ioserver.js.map +2 -2
- package/package.json +6 -7
package/README.md
CHANGED
@@ -17,12 +17,6 @@ The socket.io's registrated methods will then be accessible as standard client-s
|
|
17
17
|
socket.emit 'method_name', data
|
18
18
|
```
|
19
19
|
|
20
|
-
**Warning: Version 1.2.x removed embedded HTTP(S) server and then changed constructor arguments !!**
|
21
|
-
|
22
|
-
**Warning: Version 1.1.x changed 'interact' method to 'sendTo', and rename its arguments:**
|
23
|
-
**- service -> namespace**
|
24
|
-
**- method -> event**
|
25
|
-
|
26
20
|
## Install
|
27
21
|
|
28
22
|
Install with npm:
|
@@ -54,6 +48,13 @@ Add services using:
|
|
54
48
|
service: ServiceClass
|
55
49
|
```
|
56
50
|
|
51
|
+
Add watchers using:
|
52
|
+
```coffeescript
|
53
|
+
app.addWatcher
|
54
|
+
name: 'watcher_name'
|
55
|
+
watcher: WatcherClass
|
56
|
+
```
|
57
|
+
|
57
58
|
Add controller using:
|
58
59
|
```coffeescript
|
59
60
|
app.addController
|
@@ -123,6 +124,13 @@ You can add controller with Middlewares and routes prefix:
|
|
123
124
|
]
|
124
125
|
```
|
125
126
|
|
127
|
+
You cann add watchers class that will be launched at start using watch() method
|
128
|
+
```coffeescript
|
129
|
+
app.addWatcher
|
130
|
+
name: 'watcher_name'
|
131
|
+
watcher: WatcherClass
|
132
|
+
```
|
133
|
+
|
126
134
|
In order to meet the fastify requirements, some pre-requised are needed to setup REST endpoints.
|
127
135
|
1. First your JS class will define your accessible controller's methods
|
128
136
|
```coffeescript
|
package/build/ioserver.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
(function() {
|
2
2
|
//###################################################
|
3
|
-
// IOServer - v1.2
|
3
|
+
// IOServer - v1.3.2 #
|
4
4
|
// #
|
5
5
|
// Damn simple socket.io server #
|
6
6
|
//###################################################
|
@@ -25,7 +25,7 @@
|
|
25
25
|
// limitations under the License.
|
26
26
|
|
27
27
|
// Add required packages
|
28
|
-
var HOST, IOServer, IOServerError, LOG_LEVEL, PORT, RESERVED_NAMES,
|
28
|
+
var HOST, IOServer, IOServerError, LOG_LEVEL, PORT, RESERVED_NAMES, TRANSPORTS, VERSION, fastify, fs, path,
|
29
29
|
indexOf = [].indexOf;
|
30
30
|
|
31
31
|
fs = require('fs');
|
@@ -34,12 +34,8 @@
|
|
34
34
|
|
35
35
|
fastify = require('fastify');
|
36
36
|
|
37
|
-
autoload = require('fastify-autoload');
|
38
|
-
|
39
37
|
// Set global vars
|
40
|
-
VERSION = '1.2
|
41
|
-
|
42
|
-
REST = false;
|
38
|
+
VERSION = '1.3.2';
|
43
39
|
|
44
40
|
PORT = 8080;
|
45
41
|
|
@@ -68,8 +64,8 @@
|
|
68
64
|
if (this.port > 65535) {
|
69
65
|
throw new Error('Invalid port');
|
70
66
|
}
|
71
|
-
} catch (
|
72
|
-
err =
|
67
|
+
} catch (error1) {
|
68
|
+
err = error1;
|
73
69
|
throw new Error(err);
|
74
70
|
}
|
75
71
|
_cookie = Boolean(cookie) ? Boolean(cookie) : false;
|
@@ -109,6 +105,7 @@
|
|
109
105
|
this.service_list = {};
|
110
106
|
this.manager_list = {};
|
111
107
|
this.method_list = {};
|
108
|
+
this.watcher_list = {};
|
112
109
|
this.controller_list = {};
|
113
110
|
this.middleware_list = {};
|
114
111
|
try {
|
@@ -119,23 +116,47 @@
|
|
119
116
|
maxParamLength: 200,
|
120
117
|
caseSensitive: true
|
121
118
|
});
|
122
|
-
} catch (
|
123
|
-
err =
|
124
|
-
throw `[!] Unable to instanciate server: ${err}
|
119
|
+
} catch (error1) {
|
120
|
+
err = error1;
|
121
|
+
throw new Error(`[!] Unable to instanciate server: ${err}`);
|
125
122
|
}
|
126
123
|
try {
|
127
124
|
// Register standard HTTP error shortcuts
|
128
|
-
this._webapp.register(require('fastify-sensible')
|
129
|
-
|
130
|
-
|
131
|
-
|
125
|
+
this._webapp.register(require('fastify-sensible'), {
|
126
|
+
errorHandler: false
|
127
|
+
});
|
128
|
+
} catch (error1) {
|
129
|
+
err = error1;
|
130
|
+
throw new Error(`[!] Unable to register sensible plugin: ${err}`);
|
131
|
+
}
|
132
|
+
try {
|
133
|
+
// Allow developper to use throw Error directly in methods
|
134
|
+
this._webapp.setErrorHandler(function(error, req, reply) {
|
135
|
+
var code;
|
136
|
+
// Handle IOServerError
|
137
|
+
if (error instanceof IOServerError) {
|
138
|
+
code = error.getCode() < 0 ? 500 : error.getCode();
|
139
|
+
return reply.status(code).send(error);
|
140
|
+
// Handle HTTPErrors
|
141
|
+
} else if ((error.status != null)) {
|
142
|
+
return reply.status(error.status).send({
|
143
|
+
message: error.message
|
144
|
+
});
|
145
|
+
} else {
|
146
|
+
// Handle standard Error
|
147
|
+
return reply.status(500).send(error.message);
|
148
|
+
}
|
149
|
+
});
|
150
|
+
} catch (error1) {
|
151
|
+
err = error1;
|
152
|
+
throw new Error(`[!] Unable to register error handler: ${err}`);
|
132
153
|
}
|
133
154
|
try {
|
134
155
|
// Register standard HTTP error shortcuts
|
135
156
|
this._webapp.register(require('fastify-cors'), _cors);
|
136
|
-
} catch (
|
137
|
-
err =
|
138
|
-
throw `[!] Unable to register CORS plugin: ${err}
|
157
|
+
} catch (error1) {
|
158
|
+
err = error1;
|
159
|
+
throw new Error(`[!] Unable to register CORS plugin: ${err}`);
|
139
160
|
}
|
140
161
|
try {
|
141
162
|
// Register socket.io listener
|
@@ -144,9 +165,9 @@
|
|
144
165
|
cookie: _cookie,
|
145
166
|
cors: _cors
|
146
167
|
});
|
147
|
-
} catch (
|
148
|
-
err =
|
149
|
-
throw `[!] Unable to register socket.io plugin: ${err}
|
168
|
+
} catch (error1) {
|
169
|
+
err = error1;
|
170
|
+
throw new Error(`[!] Unable to register socket.io plugin: ${err}`);
|
150
171
|
}
|
151
172
|
// Register the global app handle
|
152
173
|
// that will be passed to all entities
|
@@ -189,30 +210,50 @@
|
|
189
210
|
return klass[name] != null;
|
190
211
|
}
|
191
212
|
|
192
|
-
|
213
|
+
_register_internal_class(type, name, klass) {
|
193
214
|
var err;
|
194
215
|
if (!name) {
|
195
|
-
throw "
|
216
|
+
throw new Error("name is mandatory");
|
196
217
|
}
|
197
|
-
if (
|
198
|
-
throw "
|
218
|
+
if ((type !== 'service') && name.length < 2) {
|
219
|
+
throw new Error("name MUST be longer than 2 characters");
|
199
220
|
}
|
200
221
|
if (indexOf.call(RESERVED_NAMES, name) >= 0) {
|
201
|
-
throw "
|
222
|
+
throw new Error("Sorry this is a reserved name");
|
202
223
|
}
|
203
|
-
if (!(
|
204
|
-
throw "
|
224
|
+
if (!(klass && klass.prototype)) {
|
225
|
+
throw new Error("MUST be a function");
|
205
226
|
}
|
206
|
-
if (this
|
207
|
-
throw
|
227
|
+
if (this[`${type}_list`][name] != null) {
|
228
|
+
throw new Error(`Sorry this ${type} already exists`);
|
208
229
|
}
|
209
230
|
try {
|
210
|
-
// Register
|
211
|
-
this._logify(7, `[*] Register
|
212
|
-
return this
|
213
|
-
} catch (
|
214
|
-
err =
|
215
|
-
|
231
|
+
// Register klass with handle reference
|
232
|
+
this._logify(7, `[*] Register ${type} ${name}`);
|
233
|
+
return this[`${type}_list`][name] = new klass(this.appHandle);
|
234
|
+
} catch (error1) {
|
235
|
+
err = error1;
|
236
|
+
throw new Error(err);
|
237
|
+
}
|
238
|
+
}
|
239
|
+
|
240
|
+
addWatcher({name, watcher}) {
|
241
|
+
var err;
|
242
|
+
try {
|
243
|
+
return this._register_internal_class('watcher', name, watcher);
|
244
|
+
} catch (error1) {
|
245
|
+
err = error1;
|
246
|
+
throw new Error(`[!] Error while instantiate ${name} watcher -> ${err}`);
|
247
|
+
}
|
248
|
+
}
|
249
|
+
|
250
|
+
addManager({name, manager}) {
|
251
|
+
var err;
|
252
|
+
try {
|
253
|
+
return this._register_internal_class('manager', name, manager);
|
254
|
+
} catch (error1) {
|
255
|
+
err = error1;
|
256
|
+
throw new Error(`[!] Error while instantiate ${name} manager -> ${err}`);
|
216
257
|
}
|
217
258
|
}
|
218
259
|
|
@@ -223,26 +264,12 @@
|
|
223
264
|
// Allow global register for '/'
|
224
265
|
if (!name) {
|
225
266
|
name = '/';
|
226
|
-
// Otherwise service must comply certain rules
|
227
|
-
} else if (name.length < 2) {
|
228
|
-
throw "[!] Service name MUST be longer than 2 characters";
|
229
|
-
}
|
230
|
-
if (indexOf.call(RESERVED_NAMES, name) >= 0) {
|
231
|
-
throw "[!] Sorry this is a reserved name";
|
232
|
-
}
|
233
|
-
if (!(service && service.prototype)) {
|
234
|
-
throw "[!] Service function is mandatory";
|
235
|
-
}
|
236
|
-
if (this.service_list[name] != null) {
|
237
|
-
throw "[!] Sorry this service already exists";
|
238
267
|
}
|
239
268
|
try {
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
err = error;
|
245
|
-
this._logify(3, `[!] Error while instantiate ${name} service -> ${err}`);
|
269
|
+
this._register_internal_class('service', name, service);
|
270
|
+
} catch (error1) {
|
271
|
+
err = error1;
|
272
|
+
throw new Error(`[!] Error while instantiate ${name} service -> ${err}`);
|
246
273
|
}
|
247
274
|
// list methods of object... it will be the list of io actions
|
248
275
|
this.method_list[name] = this._dumpMethods(service);
|
@@ -255,21 +282,6 @@
|
|
255
282
|
// this method should be called automatically when fastify is started
|
256
283
|
addController({name, controller, middlewares, prefix}) {
|
257
284
|
var controller_routes, entry, err, j, len, len1, len2, mdwr, middleware, n, o, option, ref, results;
|
258
|
-
if (!name) {
|
259
|
-
throw "[!] Controller name is mandatory";
|
260
|
-
}
|
261
|
-
if (name.length < 2) {
|
262
|
-
throw "[!] Controller name MUST be longer than 2 characters";
|
263
|
-
}
|
264
|
-
if (indexOf.call(RESERVED_NAMES, name) >= 0) {
|
265
|
-
throw "[!] Sorry this is a reserved name";
|
266
|
-
}
|
267
|
-
if (!(controller && controller.prototype)) {
|
268
|
-
throw "[!] Controller function is mandatory";
|
269
|
-
}
|
270
|
-
if (this.controller_list[name] != null) {
|
271
|
-
throw "[!] Sorry this controller already exists";
|
272
|
-
}
|
273
285
|
if (!middlewares) {
|
274
286
|
middlewares = [];
|
275
287
|
}
|
@@ -282,15 +294,13 @@
|
|
282
294
|
prefix = prefix.slice(0, -1);
|
283
295
|
}
|
284
296
|
try {
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
err = error;
|
290
|
-
this._logify(3, `[!] Error while instanciate ${name} controller -> ${err}`);
|
297
|
+
this._register_internal_class('controller', name, controller);
|
298
|
+
} catch (error1) {
|
299
|
+
err = error1;
|
300
|
+
throw new Error(`[!] Error while instantiate ${name} controller -> ${err}`);
|
291
301
|
}
|
292
302
|
if (!fs.existsSync(`${this._routes}/${name}.json`)) {
|
293
|
-
throw `[!] Predicted routes file does not exists: ${this._routes}/${name}.json
|
303
|
+
throw new Error(`[!] Predicted routes file does not exists: ${this._routes}/${name}.json`);
|
294
304
|
}
|
295
305
|
// Load defined routes
|
296
306
|
controller_routes = require(`${this._routes}/${name}.json`);
|
@@ -303,7 +313,7 @@
|
|
303
313
|
for (n = 0, len1 = ref.length; n < len1; n++) {
|
304
314
|
option = ref[n];
|
305
315
|
// Avoid override undefined keys
|
306
|
-
if (
|
316
|
+
if (entry[option] == null) {
|
307
317
|
continue;
|
308
318
|
}
|
309
319
|
// Adapt object using current controller name
|
@@ -327,8 +337,8 @@
|
|
327
337
|
try {
|
328
338
|
this._logify(7, `[*] Register controller route ${entry.method} ${entry.url}`);
|
329
339
|
results.push(this._webapp.route(entry));
|
330
|
-
} catch (
|
331
|
-
err =
|
340
|
+
} catch (error1) {
|
341
|
+
err = error1;
|
332
342
|
results.push(this._logify(3, `[!] Unable to register route entry: ${err}`));
|
333
343
|
}
|
334
344
|
}
|
@@ -343,7 +353,7 @@
|
|
343
353
|
// Launch socket IO and get ready to handle events on connection
|
344
354
|
// Pass web server used for connections
|
345
355
|
async start() {
|
346
|
-
var d, day, err, hours, manager, manager_name, minutes, month, ns, ref, seconds;
|
356
|
+
var d, day, err, hours, manager, manager_name, minutes, month, ns, ref, ref1, seconds, watcher, watcher_name;
|
347
357
|
d = new Date();
|
348
358
|
day = d.getDate() < 10 ? `0${d.getDate()}` : d.getDate();
|
349
359
|
month = d.getMonth() < 10 ? `0${d.getMonth()}` : d.getMonth();
|
@@ -357,22 +367,21 @@
|
|
357
367
|
// Register all managers
|
358
368
|
for (manager_name in ref) {
|
359
369
|
manager = ref[manager_name];
|
360
|
-
this._logify(6, `[*]
|
370
|
+
this._logify(6, `[*] Register ${manager_name} manager`);
|
361
371
|
this.appHandle[manager_name] = manager;
|
362
372
|
}
|
373
|
+
|
363
374
|
// Once webapp is ready
|
364
375
|
this._webapp.ready((err) => {
|
365
|
-
var j, len, mdwr, middleware, ref1,
|
366
|
-
|
367
|
-
// Register each different services by its namespace
|
376
|
+
var j, len, mdwr, middleware, ref1, results, service_name;
|
377
|
+
// Register each different services by its namespace
|
368
378
|
results = [];
|
369
|
-
for (service_name in
|
370
|
-
service = ref1[service_name];
|
379
|
+
for (service_name in this.service_list) {
|
371
380
|
ns[service_name] = service_name === '/' ? this._webapp.io.of('/') : this._webapp.io.of(`/${service_name}`);
|
372
|
-
|
381
|
+
ref1 = this.middleware_list[service_name];
|
373
382
|
// Register middleware for namespace
|
374
|
-
for (j = 0, len =
|
375
|
-
middleware =
|
383
|
+
for (j = 0, len = ref1.length; j < len; j++) {
|
384
|
+
middleware = ref1[j];
|
376
385
|
mdwr = new middleware();
|
377
386
|
ns[service_name].use(mdwr.handle(this.appHandle));
|
378
387
|
}
|
@@ -382,12 +391,26 @@
|
|
382
391
|
}
|
383
392
|
return results;
|
384
393
|
});
|
394
|
+
ref1 = this.watcher_list;
|
395
|
+
|
396
|
+
// Start all watchers
|
397
|
+
for (watcher_name in ref1) {
|
398
|
+
watcher = ref1[watcher_name];
|
399
|
+
try {
|
400
|
+
this._logify(6, `[*] Start watcher ${watcher_name}`);
|
401
|
+
// Do not wait for watcher to finish...
|
402
|
+
watcher.watch();
|
403
|
+
} catch (error1) {
|
404
|
+
err = error1;
|
405
|
+
throw new Error(`Unable to start watch method of watcher ${watcher_name}: ${err}`);
|
406
|
+
}
|
407
|
+
}
|
385
408
|
try {
|
386
409
|
// Start web server
|
387
410
|
this._logify(5, `[*] Starting server on https://${this.host}:${this.port} ...`);
|
388
411
|
return (await this._webapp.listen(this.port, this.host));
|
389
|
-
} catch (
|
390
|
-
err =
|
412
|
+
} catch (error1) {
|
413
|
+
err = error1;
|
391
414
|
return this._logify(3, `[!] Unable to start server: ${err}`);
|
392
415
|
}
|
393
416
|
}
|
@@ -397,26 +420,38 @@
|
|
397
420
|
stop() {
|
398
421
|
var err;
|
399
422
|
try {
|
400
|
-
return this._webapp.close(
|
423
|
+
return this._webapp.close(() => {
|
401
424
|
return this._logify(6, "[*] Server stopped");
|
402
425
|
});
|
403
|
-
} catch (
|
404
|
-
err =
|
426
|
+
} catch (error1) {
|
427
|
+
err = error1;
|
405
428
|
throw new Error(`[!] Unable to stop server: ${err}`);
|
406
429
|
}
|
407
430
|
}
|
408
431
|
|
409
|
-
sendTo({namespace, event, data, room =
|
432
|
+
sendTo({namespace, event, data, room = null, sid = null} = {}) {
|
410
433
|
var ns, sockets;
|
411
|
-
|
434
|
+
if (namespace != null) {
|
435
|
+
// Auto correct namespace
|
436
|
+
if (!namespace.startsWith('/')) {
|
437
|
+
namespace = `/${namespace}`;
|
438
|
+
}
|
439
|
+
|
440
|
+
// Search for namespace object
|
441
|
+
ns = this._webapp.io.of(namespace);
|
442
|
+
} else {
|
443
|
+
ns = this._webapp.io.of('/');
|
444
|
+
}
|
445
|
+
|
412
446
|
// Send event to specific sid if set
|
413
|
-
if (
|
414
|
-
|
447
|
+
if (sid != null) {
|
448
|
+
ns.sockets.get(sid).emit(event, data);
|
415
449
|
} else {
|
416
450
|
// Restrict access to clients in room if set
|
417
|
-
sockets =
|
418
|
-
|
451
|
+
sockets = room != null ? ns.in(room) : ns;
|
452
|
+
sockets.emit(event, data);
|
419
453
|
}
|
454
|
+
return true;
|
420
455
|
}
|
421
456
|
|
422
457
|
// Once a client is connected, get ready to handle his events
|
@@ -458,8 +493,8 @@
|
|
458
493
|
try {
|
459
494
|
await this.service_list[service][method](socket, data, callback);
|
460
495
|
return resolve();
|
461
|
-
} catch (
|
462
|
-
err =
|
496
|
+
} catch (error1) {
|
497
|
+
err = error1;
|
463
498
|
return reject(err);
|
464
499
|
}
|
465
500
|
}).catch((err) => {
|
package/build/ioserver.js.map
CHANGED
@@ -6,8 +6,8 @@
|
|
6
6
|
"src/ioserver.coffee"
|
7
7
|
],
|
8
8
|
"names": [],
|
9
|
-
"mappings": "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",
|
9
|
+
"mappings": "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",
|
10
10
|
"sourcesContent": [
|
11
|
-
"####################################################\n# IOServer - v1.2.8 #\n# #\n# Damn simple socket.io server #\n####################################################\n# - Copyright 2020 - #\n# #\n# License: Apache v 2.0 #\n# @Author: Ben Mz #\n# @Email: 0x42en (at) users.noreply.github.com #\n# #\n####################################################\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Add required packages\nfs = require 'fs'\npath = require 'path'\nfastify = require 'fastify'\nautoload = require 'fastify-autoload'\n\n# Set global vars\nVERSION = '1.2.8'\nREST = false\nPORT = 8080\nHOST = 'localhost'\nLOG_LEVEL = ['EMERGENCY','ALERT','CRITICAL','ERROR','WARNING','NOTIFICATION','INFORMATION','DEBUG']\nTRANSPORTS = ['websocket','htmlfile','xhr-polling','jsonp-polling']\nRESERVED_NAMES = ['send', 'log', 'verbose']\n\nmodule.exports = class IOServer\n # Define the variables used by the server\n constructor: (options = {}) ->\n # Set default options\n { verbose, host, port, cookie, mode, cors, routes } = options\n\n @host = if host then String(host) else HOST\n try\n @port = if port then Number(port) else PORT\n if @port <= 0\n throw new Error 'Invalid port'\n if @port > 65535\n throw new Error 'Invalid port'\n catch err\n throw new Error err\n \n _cookie = if Boolean(cookie) then Boolean(cookie) else false\n @verbose = if String(verbose).toUpperCase() in LOG_LEVEL then String(verbose).toUpperCase() else 'ERROR'\n # Does not yell if route directory does not exists... change that ?\n default_routes = path.join(process.cwd(), 'routes')\n @_routes = if fs.existsSync(routes) then String(routes) else default_routes\n \n # Process transport mode options\n _mode = []\n if mode\n if String(mode).toLowerCase() in TRANSPORTS\n _mode.push String(mode).toLowerCase()\n else if mode.constructor is Array\n for i,m of mode\n if String(m).toLowerCase() in TRANSPORTS\n _mode.push m\n else\n _mode.push 'websocket'\n _mode.push 'polling'\n \n # Setup CORS since necessary in socket.io v3\n _cors = if cors? and cors then cors else {}\n if not _cors.methods\n _cors.methods = ['GET','POST']\n if not _cors.origin\n _cors.origin = [\"https://#{@host}\",\"http://#{@host}\"]\n \n # Setup internal lists\n @service_list = {}\n @manager_list = {}\n @method_list = {}\n \n @controller_list = {}\n @middleware_list = {}\n \n try\n # Instanciate server (needed to register controllers)\n @_webapp = fastify({\n logger: @verbose\n ignoreTrailingSlash: true\n maxParamLength: 200\n caseSensitive: true\n })\n catch err\n throw \"[!] Unable to instanciate server: #{err}\"\n \n try\n # Register standard HTTP error shortcuts\n @_webapp.register(require('fastify-sensible'))\n catch err\n throw \"[!] Unable to register sensible plugin: #{err}\"\n \n try\n # Register standard HTTP error shortcuts\n @_webapp.register(require('fastify-cors'), _cors)\n catch err\n throw \"[!] Unable to register CORS plugin: #{err}\"\n \n try\n # Register socket.io listener\n @_webapp.register( require('fastify-socket.io'), {\n transports: _mode,\n cookie: _cookie\n cors: _cors\n })\n catch err\n throw \"[!] Unable to register socket.io plugin: #{err}\"\n\n # Register the global app handle\n # that will be passed to all entities\n @appHandle = {\n send: @sendTo\n log: @_logify\n verbose: @verbose\n }\n \n _logify: (level, text) ->\n current_level = LOG_LEVEL.indexOf @verbose\n\n if level <= current_level\n if level <= 4\n console.error text\n else\n console.log text\n \n _unique: (arr) ->\n hash = {}\n result = []\n\n i = 0\n l = arr.length\n while i < l\n unless hash.hasOwnProperty(arr[i])\n hash[arr[i]] = true\n result.push arr[i]\n ++i\n\n return result\n \n _method_exists: (klass, name) ->\n return klass[name]?\n\n addManager: ({name, manager}) ->\n if not name\n throw \"[!] Manager name is mandatory\"\n if name and name.length < 2\n throw \"[!] Manager name MUST be longer than 2 characters\"\n if name in RESERVED_NAMES\n throw \"[!] Sorry this is a reserved name\"\n \n if not (manager or manager.prototype)\n throw \"[!] Manager MUST be a function\"\n \n if @manager_list[name]?\n throw \"[!] Sorry this manager already exists\"\n \n try\n # Register manager with handle reference\n @_logify 7, \"[*] Register manager #{name}\"\n @manager_list[name] = new manager(@appHandle)\n catch err\n @_logify 3, \"[!] Error while instantiate #{name} manager -> #{err}\"\n\n # Allow to register easily a class to this server\n # this class will be bind to a specific namespace\n addService: ({name, service, middlewares}) ->\n # Allow global register for '/'\n if not name\n name = '/'\n # Otherwise service must comply certain rules\n else if name.length < 2\n throw \"[!] Service name MUST be longer than 2 characters\"\n \n if name in RESERVED_NAMES\n throw \"[!] Sorry this is a reserved name\"\n \n if not (service and service.prototype)\n throw \"[!] Service function is mandatory\"\n \n if @service_list[name]?\n throw \"[!] Sorry this service already exists\"\n\n try\n # Register service with handle reference\n @_logify 7, \"[*] Register service #{name}\"\n @service_list[name] = new service(@appHandle)\n catch err\n @_logify 3, \"[!] Error while instantiate #{name} service -> #{err}\"\n\n # list methods of object... it will be the list of io actions\n @method_list[name] = @_dumpMethods service\n # Register middlewares if necessary\n @middleware_list[name] = if middlewares then middlewares else []\n \n # Allow to register easily controllers for REST API\n # this method should be called automatically when fastify is started\n addController: ({name, controller, middlewares, prefix}) ->\n if not name\n throw \"[!] Controller name is mandatory\"\n if name.length < 2\n throw \"[!] Controller name MUST be longer than 2 characters\"\n if name in RESERVED_NAMES\n throw \"[!] Sorry this is a reserved name\"\n \n if not (controller and controller.prototype)\n throw \"[!] Controller function is mandatory\"\n \n if @controller_list[name]?\n throw \"[!] Sorry this controller already exists\"\n \n if not middlewares\n middlewares = []\n \n # Sanitize prefix\n if prefix and not prefix.startsWith('/')\n prefix = \"/#{prefix}\"\n \n if prefix and prefix.endsWith('/')\n prefix = prefix.slice(0, -1)\n \n try\n # Register controller with handle reference\n @_logify 7, \"[*] Register controller #{name}\"\n @controller_list[name] = new controller(@appHandle)\n catch err\n @_logify 3, \"[!] Error while instanciate #{name} controller -> #{err}\"\n\n if not fs.existsSync(\"#{@_routes}/#{name}.json\")\n throw \"[!] Predicted routes file does not exists: #{@_routes}/#{name}.json\"\n\n # Load defined routes\n controller_routes = require \"#{@_routes}/#{name}.json\"\n\n # Parse all routes found, and register corresponding controller method\n for entry in controller_routes\n\n # Auto load function or array of function for fastify routes options\n for option in ['onRequest', 'preParsing', 'preValidation', 'preHandler', 'preSerialization', 'onSend', 'onResponse', 'handler', 'errorHandler']\n # Avoid override undefined keys\n if not entry[option]\n continue\n # Adapt object using current controller name\n if @controller_list[name][entry[option]]?\n entry[option] = @controller_list[name][entry[option]]\n \n # Adapt all urls if prefix is set, otherwise prefix with controller name\n entry.url = if prefix? then \"#{prefix}#{entry.url}\" else \"/#{name}#{entry.url}\"\n \n # Always setup preValidation middlewares\n if not entry.preValidation?\n entry.preValidation = []\n\n for middleware in middlewares\n mdwr = new middleware()\n entry.preValidation.push mdwr.handle(@appHandle)\n\n try\n @_logify 7, \"[*] Register controller route #{entry.method} #{entry.url}\"\n @_webapp.route entry\n catch err\n @_logify 3, \"[!] Unable to register route entry: #{err}\"\n\n # Get service running\n getService: (name) -> @service_list[name]\n\n # Launch socket IO and get ready to handle events on connection\n # Pass web server used for connections\n start: ->\n d = new Date()\n day = if d.getDate() < 10 then \"0#{d.getDate()}\" else d.getDate()\n month = if d.getMonth() < 10 then \"0#{d.getMonth()}\" else d.getMonth()\n hours = if d.getHours() < 10 then \"0#{d.getHours()}\" else d.getHours()\n minutes = if d.getMinutes() < 10 then \"0#{d.getMinutes()}\" else d.getMinutes()\n seconds = if d.getSeconds() < 10 then \"0#{d.getSeconds()}\" else d.getSeconds()\n @_logify 4, \"################### IOServer v#{VERSION} ###################\"\n @_logify 5, \"################### #{day}/#{month}/#{d.getFullYear()} - #{hours}:#{minutes}:#{seconds} #########################\"\n \n ns = {}\n\n # Register all managers\n for manager_name, manager of @manager_list\n @_logify 6, \"[*] register #{manager_name} manager\"\n @appHandle[manager_name] = manager\n\n # Once webapp is ready\n @_webapp.ready (err) =>\n # Register each different services by its namespace\n for service_name, service of @service_list\n ns[service_name] = if service_name is '/' then @_webapp.io.of '/' else @_webapp.io.of \"/#{service_name}\"\n\n # Register middleware for namespace \n for middleware in @middleware_list[service_name]\n mdwr = new middleware()\n ns[service_name].use mdwr.handle(@appHandle)\n\n # get ready for connection\n ns[service_name].on \"connection\", @_handleEvents(service_name)\n @_logify 6, \"[*] service #{service_name} registered...\"\n \n try\n # Start web server\n @_logify 5, \"[*] Starting server on https://#{@host}:#{@port} ...\"\n await @_webapp.listen @port, @host\n catch err\n @_logify 3, \"[!] Unable to start server: #{err}\"\n \n # Force server stop\n stop: ->\n try\n @_webapp.close () ->\n @_logify 6, \"[*] Server stopped\"\n catch err\n throw new Error \"[!] Unable to stop server: #{err}\"\n\n # Allow sending message from external app\n sendTo: ({namespace, event, data, room=false, sid=false}={}) =>\n ns = @_webapp.io.of(namespace || \"/\")\n # Send event to specific sid if set\n if sid? and sid\n ns.sockets.get(sid).emit event, data\n else\n # Restrict access to clients in room if set\n sockets = if room? and room then ns.in(room) else ns\n sockets.emit event, data\n\n # Once a client is connected, get ready to handle his events\n _handleEvents: (service_name) ->\n (socket, next) =>\n @_logify 5, \"[*] received connection for service #{service_name}\"\n \n # The register all user defined functions\n for index, action of @method_list[service_name]\n # does not listen for private methods\n if action.substring(0,1) is '_'\n continue\n # do not listen for constructor method\n if action is 'constructor'\n continue\n \n @_logify 6, \"[*] method #{action} of #{service_name} listening...\"\n socket.on action, @_handleCallback\n service: service_name\n method: action\n socket: socket\n\n # On a specific event call the appropriate method of object\n _handleCallback: ({service, method, socket}) ->\n return (data, callback) =>\n @_logify 6, \"[*] call method #{method} of service #{service}\"\n return new Promise (resolve, reject) =>\n try\n await @service_list[service][method](socket, data, callback)\n resolve()\n catch err\n reject(err)\n .catch (err) =>\n if typeof err is 'string'\n err = new IOServerError(err, -1)\n\n payload = { \n status: 'error',\n type: err.constructor.name or 'Error',\n message: err.message or null,\n code: err.code or -1\n }\n\n @_logify 5, \"Error on #{service}:#{method} execution: #{err}\"\n if callback\n callback payload\n else\n socket.emit 'error', payload\n \n # Based on Kri-ban solution\n # http://stackoverflow.com/questions/7445726/how-to-list-methods-of-inherited-classes-in-coffeescript-or-javascript\n # Thanks ___ ;)\n _dumpMethods: (klass) ->\n result = []\n k = klass.prototype\n while k\n names = Object.getOwnPropertyNames(k)\n result = result.concat(names)\n k = Object.getPrototypeOf(k)\n break if not Object.getPrototypeOf(k) # avoid listing Object properties\n\n return @_unique(result).sort()\n\n# IO Server error class\nmodule.exports.IOServerError = class IOServerError extends Error\n constructor: (message, code = -1) ->\n super(message)\n @type = @constructor.name\n @code = code\n \n getMessage: () ->\n return @message\n \n getType: () ->\n return @type\n \n getCode: () ->\n return @code\n\n toJson: () ->\n return {\n message: @message\n type: @type\n code: @code\n }"
|
11
|
+
"####################################################\n# IOServer - v1.3.2 #\n# #\n# Damn simple socket.io server #\n####################################################\n# - Copyright 2020 - #\n# #\n# License: Apache v 2.0 #\n# @Author: Ben Mz #\n# @Email: 0x42en (at) users.noreply.github.com #\n# #\n####################################################\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Add required packages\nfs = require 'fs'\npath = require 'path'\nfastify = require 'fastify'\n\n# Set global vars\nVERSION = '1.3.2'\nPORT = 8080\nHOST = 'localhost'\nLOG_LEVEL = ['EMERGENCY','ALERT','CRITICAL','ERROR','WARNING','NOTIFICATION','INFORMATION','DEBUG']\nTRANSPORTS = ['websocket','htmlfile','xhr-polling','jsonp-polling']\nRESERVED_NAMES = ['send', 'log', 'verbose']\n\nmodule.exports = class IOServer\n # Define the variables used by the server\n constructor: (options = {}) ->\n # Set default options\n { verbose, host, port, cookie, mode, cors, routes } = options\n\n @host = if host then String(host) else HOST\n try\n @port = if port then Number(port) else PORT\n if @port <= 0\n throw new Error 'Invalid port'\n if @port > 65535\n throw new Error 'Invalid port'\n catch err\n throw new Error err\n \n _cookie = if Boolean(cookie) then Boolean(cookie) else false\n @verbose = if String(verbose).toUpperCase() in LOG_LEVEL then String(verbose).toUpperCase() else 'ERROR'\n # Does not yell if route directory does not exists... change that ?\n default_routes = path.join(process.cwd(), 'routes')\n @_routes = if fs.existsSync(routes) then String(routes) else default_routes\n \n # Process transport mode options\n _mode = []\n if mode\n if String(mode).toLowerCase() in TRANSPORTS\n _mode.push String(mode).toLowerCase()\n else if mode.constructor is Array\n for i,m of mode\n if String(m).toLowerCase() in TRANSPORTS\n _mode.push m\n else\n _mode.push 'websocket'\n _mode.push 'polling'\n \n # Setup CORS since necessary in socket.io v3\n _cors = if cors? and cors then cors else {}\n if not _cors.methods\n _cors.methods = ['GET','POST']\n if not _cors.origin\n _cors.origin = [\"https://#{@host}\",\"http://#{@host}\"]\n \n # Setup internal lists\n @service_list = {}\n @manager_list = {}\n @method_list = {}\n @watcher_list = {}\n \n @controller_list = {}\n @middleware_list = {}\n \n try\n # Instanciate server (needed to register controllers)\n @_webapp = fastify({\n logger: @verbose\n ignoreTrailingSlash: true\n maxParamLength: 200\n caseSensitive: true\n })\n catch err\n throw new Error \"[!] Unable to instanciate server: #{err}\"\n \n try\n # Register standard HTTP error shortcuts\n @_webapp.register(require('fastify-sensible'), { errorHandler: false })\n catch err\n throw new Error \"[!] Unable to register sensible plugin: #{err}\"\n \n try\n # Allow developper to use throw Error directly in methods\n @_webapp.setErrorHandler (error, req, reply) ->\n # Handle IOServerError\n if (error instanceof IOServerError)\n code = if error.getCode() < 0 then 500 else error.getCode()\n reply.status(code).send(error)\n # Handle HTTPErrors\n else if (error.status?)\n reply.status(error.status).send({message: error.message})\n # Handle standard Error\n else\n reply.status(500).send(error.message)\n catch err\n throw new Error \"[!] Unable to register error handler: #{err}\"\n \n try\n # Register standard HTTP error shortcuts\n @_webapp.register(require('fastify-cors'), _cors)\n catch err\n throw new Error \"[!] Unable to register CORS plugin: #{err}\"\n \n try\n # Register socket.io listener\n @_webapp.register( require('fastify-socket.io'), {\n transports: _mode,\n cookie: _cookie\n cors: _cors\n })\n catch err\n throw new Error \"[!] Unable to register socket.io plugin: #{err}\"\n\n # Register the global app handle\n # that will be passed to all entities\n @appHandle = {\n send: @sendTo\n log: @_logify\n verbose: @verbose\n }\n \n _logify: (level, text) ->\n current_level = LOG_LEVEL.indexOf @verbose\n\n if level <= current_level\n if level <= 4\n console.error text\n else\n console.log text\n \n _unique: (arr) ->\n hash = {}\n result = []\n\n i = 0\n l = arr.length\n while i < l\n unless hash.hasOwnProperty(arr[i])\n hash[arr[i]] = true\n result.push arr[i]\n ++i\n\n return result\n \n _method_exists: (klass, name) ->\n return klass[name]?\n \n _register_internal_class: (type, name, klass) ->\n if not name\n throw new Error \"name is mandatory\"\n if (type isnt 'service') and name.length < 2\n throw new Error \"name MUST be longer than 2 characters\"\n if name in RESERVED_NAMES\n throw new Error \"Sorry this is a reserved name\"\n \n if not (klass and klass.prototype)\n throw new Error \"MUST be a function\"\n \n if @[\"#{type}_list\"][name]?\n throw new Error \"Sorry this #{type} already exists\"\n \n try\n # Register klass with handle reference\n @_logify 7, \"[*] Register #{type} #{name}\"\n @[\"#{type}_list\"][name] = new klass(@appHandle)\n catch err\n throw new Error err\n\n \n addWatcher: ({name, watcher}) ->\n try\n @_register_internal_class 'watcher', name, watcher\n catch err\n throw new Error \"[!] Error while instantiate #{name} watcher -> #{err}\"\n\n addManager: ({name, manager}) ->\n try\n @_register_internal_class 'manager', name, manager\n catch err\n throw new Error \"[!] Error while instantiate #{name} manager -> #{err}\"\n\n # Allow to register easily a class to this server\n # this class will be bind to a specific namespace\n addService: ({name, service, middlewares}) ->\n # Allow global register for '/'\n if not name\n name = '/'\n try\n @_register_internal_class 'service', name, service\n catch err\n throw new Error \"[!] Error while instantiate #{name} service -> #{err}\"\n\n # list methods of object... it will be the list of io actions\n @method_list[name] = @_dumpMethods service\n # Register middlewares if necessary\n @middleware_list[name] = if middlewares then middlewares else []\n \n # Allow to register easily controllers for REST API\n # this method should be called automatically when fastify is started\n addController: ({name, controller, middlewares, prefix}) ->\n if not middlewares\n middlewares = []\n \n # Sanitize prefix\n if prefix and not prefix.startsWith('/')\n prefix = \"/#{prefix}\"\n \n if prefix and prefix.endsWith('/')\n prefix = prefix.slice(0, -1)\n \n try\n @_register_internal_class 'controller', name, controller\n catch err\n throw new Error \"[!] Error while instantiate #{name} controller -> #{err}\"\n \n if not fs.existsSync(\"#{@_routes}/#{name}.json\")\n throw new Error \"[!] Predicted routes file does not exists: #{@_routes}/#{name}.json\"\n\n # Load defined routes\n controller_routes = require \"#{@_routes}/#{name}.json\"\n\n # Parse all routes found, and register corresponding controller method\n for entry in controller_routes\n\n # Auto load function or array of function for fastify routes options\n for option in ['onRequest', 'preParsing', 'preValidation', 'preHandler', 'preSerialization', 'onSend', 'onResponse', 'handler', 'errorHandler']\n # Avoid override undefined keys\n if not entry[option]?\n continue\n # Adapt object using current controller name\n if @controller_list[name][entry[option]]?\n entry[option] = @controller_list[name][entry[option]]\n \n # Adapt all urls if prefix is set, otherwise prefix with controller name\n entry.url = if prefix? then \"#{prefix}#{entry.url}\" else \"/#{name}#{entry.url}\"\n \n # Always setup preValidation middlewares\n if not entry.preValidation?\n entry.preValidation = []\n\n for middleware in middlewares\n mdwr = new middleware()\n entry.preValidation.push mdwr.handle(@appHandle)\n\n try\n @_logify 7, \"[*] Register controller route #{entry.method} #{entry.url}\"\n @_webapp.route entry\n catch err\n @_logify 3, \"[!] Unable to register route entry: #{err}\"\n\n # Get service running\n getService: (name) -> @service_list[name]\n\n # Launch socket IO and get ready to handle events on connection\n # Pass web server used for connections\n start: ->\n d = new Date()\n day = if d.getDate() < 10 then \"0#{d.getDate()}\" else d.getDate()\n month = if d.getMonth() < 10 then \"0#{d.getMonth()}\" else d.getMonth()\n hours = if d.getHours() < 10 then \"0#{d.getHours()}\" else d.getHours()\n minutes = if d.getMinutes() < 10 then \"0#{d.getMinutes()}\" else d.getMinutes()\n seconds = if d.getSeconds() < 10 then \"0#{d.getSeconds()}\" else d.getSeconds()\n @_logify 4, \"################### IOServer v#{VERSION} ###################\"\n @_logify 5, \"################### #{day}/#{month}/#{d.getFullYear()} - #{hours}:#{minutes}:#{seconds} #########################\"\n \n ns = {}\n\n # Register all managers\n for manager_name, manager of @manager_list\n @_logify 6, \"[*] Register #{manager_name} manager\"\n @appHandle[manager_name] = manager\n \n # Once webapp is ready\n @_webapp.ready (err) =>\n # Register each different services by its namespace\n for service_name of @service_list\n ns[service_name] = if service_name is '/' then @_webapp.io.of '/' else @_webapp.io.of \"/#{service_name}\"\n\n # Register middleware for namespace \n for middleware in @middleware_list[service_name]\n mdwr = new middleware()\n ns[service_name].use mdwr.handle(@appHandle)\n\n # get ready for connection\n ns[service_name].on \"connection\", @_handleEvents(service_name)\n @_logify 6, \"[*] service #{service_name} registered...\"\n \n # Start all watchers\n for watcher_name, watcher of @watcher_list\n try\n @_logify 6, \"[*] Start watcher #{watcher_name}\"\n # Do not wait for watcher to finish...\n watcher.watch()\n catch err\n throw new Error \"Unable to start watch method of watcher #{watcher_name}: #{err}\"\n\n try\n # Start web server\n @_logify 5, \"[*] Starting server on https://#{@host}:#{@port} ...\"\n await @_webapp.listen @port, @host\n catch err\n @_logify 3, \"[!] Unable to start server: #{err}\"\n \n # Force server stop\n stop: ->\n try\n @_webapp.close () =>\n @_logify 6, \"[*] Server stopped\"\n catch err\n throw new Error \"[!] Unable to stop server: #{err}\"\n\n # Allow sending message from external app\n sendTo: ({namespace, event, data, room=null, sid=null}={}) =>\n if namespace?\n # Auto correct namespace\n if not namespace.startsWith('/')\n namespace = \"/#{namespace}\"\n \n # Search for namespace object\n ns = @_webapp.io.of(namespace)\n else\n ns = @_webapp.io.of('/')\n \n # Send event to specific sid if set\n if sid?\n ns.sockets.get(sid).emit event, data\n else\n # Restrict access to clients in room if set\n sockets = if room? then ns.in(room) else ns\n sockets.emit event, data\n\n return true\n\n # Once a client is connected, get ready to handle his events\n _handleEvents: (service_name) ->\n (socket, next) =>\n @_logify 5, \"[*] received connection for service #{service_name}\"\n \n # The register all user defined functions\n for index, action of @method_list[service_name]\n # does not listen for private methods\n if action.substring(0,1) is '_'\n continue\n # do not listen for constructor method\n if action is 'constructor'\n continue\n \n @_logify 6, \"[*] method #{action} of #{service_name} listening...\"\n socket.on action, @_handleCallback\n service: service_name\n method: action\n socket: socket\n\n # On a specific event call the appropriate method of object\n _handleCallback: ({service, method, socket}) ->\n return (data, callback) =>\n @_logify 6, \"[*] call method #{method} of service #{service}\"\n return new Promise (resolve, reject) =>\n try\n await @service_list[service][method](socket, data, callback)\n resolve()\n catch err\n reject(err)\n .catch (err) =>\n if typeof err is 'string'\n err = new IOServerError(err, -1)\n\n payload = { \n status: 'error',\n type: err.constructor.name or 'Error',\n message: err.message or null,\n code: err.code or -1\n }\n\n @_logify 5, \"Error on #{service}:#{method} execution: #{err}\"\n if callback\n callback payload\n else\n socket.emit 'error', payload\n \n # Based on Kri-ban solution\n # http://stackoverflow.com/questions/7445726/how-to-list-methods-of-inherited-classes-in-coffeescript-or-javascript\n # Thanks ___ ;)\n _dumpMethods: (klass) ->\n result = []\n k = klass.prototype\n while k\n names = Object.getOwnPropertyNames(k)\n result = result.concat(names)\n k = Object.getPrototypeOf(k)\n break if not Object.getPrototypeOf(k) # avoid listing Object properties\n\n return @_unique(result).sort()\n\n# IO Server error class\nmodule.exports.IOServerError = class IOServerError extends Error\n constructor: (message, code = -1) ->\n super(message)\n @type = @constructor.name\n @code = code\n \n getMessage: () ->\n return @message\n \n getType: () ->\n return @type\n \n getCode: () ->\n return @code\n\n toJson: () ->\n return {\n message: @message\n type: @type\n code: @code\n }"
|
12
12
|
]
|
13
13
|
}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "ioserver",
|
3
|
-
"version": "1.2
|
3
|
+
"version": "1.3.2",
|
4
4
|
"description": "Damn simple way to setup your Socket.io server using coffeescript or vanilla JS class.",
|
5
5
|
"main": "build/ioserver.js",
|
6
6
|
"files": [
|
@@ -12,19 +12,18 @@
|
|
12
12
|
"dependencies": {
|
13
13
|
"colors": "^1.4.0",
|
14
14
|
"fastify": "^3.20.1",
|
15
|
-
"fastify-autoload": "^3.8.0",
|
16
15
|
"fastify-cors": "^6.0.2",
|
17
16
|
"fastify-sensible": "^3.1.1",
|
18
|
-
"fastify-socket.io": "^
|
19
|
-
"socket.io": "^
|
17
|
+
"fastify-socket.io": "^3.0.0",
|
18
|
+
"socket.io": "^4.4.1"
|
20
19
|
},
|
21
20
|
"devDependencies": {
|
22
21
|
"chai": "^4.3.3",
|
23
22
|
"chai-http": "^4.3.0",
|
24
23
|
"coffeescript": "^2.5.1",
|
25
|
-
"mocha": "^
|
26
|
-
"snyk": "^1.
|
27
|
-
"socket.io-client": "^
|
24
|
+
"mocha": "^9.1.0",
|
25
|
+
"snyk": "^1.467.0",
|
26
|
+
"socket.io-client": "^4.4.1"
|
28
27
|
},
|
29
28
|
"scripts": {
|
30
29
|
"dev": "$(npm bin)/coffee --no-header --map --watch --output build/ --compile src/",
|