ioserver 1.2.9 → 1.3.1
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 +0 -6
- package/build/ioserver.js +71 -53
- 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:
|
package/build/ioserver.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
(function() {
|
2
2
|
//###################################################
|
3
|
-
// IOServer - v1.
|
3
|
+
// IOServer - v1.3.0 #
|
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.
|
41
|
-
|
42
|
-
REST = false;
|
38
|
+
VERSION = '1.3.0';
|
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;
|
@@ -120,23 +116,47 @@
|
|
120
116
|
maxParamLength: 200,
|
121
117
|
caseSensitive: true
|
122
118
|
});
|
123
|
-
} catch (
|
124
|
-
err =
|
125
|
-
throw `[!] Unable to instanciate server: ${err}
|
119
|
+
} catch (error1) {
|
120
|
+
err = error1;
|
121
|
+
throw new Error(`[!] Unable to instanciate server: ${err}`);
|
126
122
|
}
|
127
123
|
try {
|
128
124
|
// Register standard HTTP error shortcuts
|
129
|
-
this._webapp.register(require('fastify-sensible')
|
130
|
-
|
131
|
-
|
132
|
-
|
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}`);
|
133
153
|
}
|
134
154
|
try {
|
135
155
|
// Register standard HTTP error shortcuts
|
136
156
|
this._webapp.register(require('fastify-cors'), _cors);
|
137
|
-
} catch (
|
138
|
-
err =
|
139
|
-
throw `[!] Unable to register CORS plugin: ${err}
|
157
|
+
} catch (error1) {
|
158
|
+
err = error1;
|
159
|
+
throw new Error(`[!] Unable to register CORS plugin: ${err}`);
|
140
160
|
}
|
141
161
|
try {
|
142
162
|
// Register socket.io listener
|
@@ -145,9 +165,9 @@
|
|
145
165
|
cookie: _cookie,
|
146
166
|
cors: _cors
|
147
167
|
});
|
148
|
-
} catch (
|
149
|
-
err =
|
150
|
-
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}`);
|
151
171
|
}
|
152
172
|
// Register the global app handle
|
153
173
|
// that will be passed to all entities
|
@@ -211,8 +231,8 @@
|
|
211
231
|
// Register klass with handle reference
|
212
232
|
this._logify(7, `[*] Register ${type} ${name}`);
|
213
233
|
return this[`${type}_list`][name] = new klass(this.appHandle);
|
214
|
-
} catch (
|
215
|
-
err =
|
234
|
+
} catch (error1) {
|
235
|
+
err = error1;
|
216
236
|
throw new Error(err);
|
217
237
|
}
|
218
238
|
}
|
@@ -221,8 +241,8 @@
|
|
221
241
|
var err;
|
222
242
|
try {
|
223
243
|
return this._register_internal_class('watcher', name, watcher);
|
224
|
-
} catch (
|
225
|
-
err =
|
244
|
+
} catch (error1) {
|
245
|
+
err = error1;
|
226
246
|
throw new Error(`[!] Error while instantiate ${name} watcher -> ${err}`);
|
227
247
|
}
|
228
248
|
}
|
@@ -231,8 +251,8 @@
|
|
231
251
|
var err;
|
232
252
|
try {
|
233
253
|
return this._register_internal_class('manager', name, manager);
|
234
|
-
} catch (
|
235
|
-
err =
|
254
|
+
} catch (error1) {
|
255
|
+
err = error1;
|
236
256
|
throw new Error(`[!] Error while instantiate ${name} manager -> ${err}`);
|
237
257
|
}
|
238
258
|
}
|
@@ -247,8 +267,8 @@
|
|
247
267
|
}
|
248
268
|
try {
|
249
269
|
this._register_internal_class('service', name, service);
|
250
|
-
} catch (
|
251
|
-
err =
|
270
|
+
} catch (error1) {
|
271
|
+
err = error1;
|
252
272
|
throw new Error(`[!] Error while instantiate ${name} service -> ${err}`);
|
253
273
|
}
|
254
274
|
// list methods of object... it will be the list of io actions
|
@@ -275,8 +295,8 @@
|
|
275
295
|
}
|
276
296
|
try {
|
277
297
|
this._register_internal_class('controller', name, controller);
|
278
|
-
} catch (
|
279
|
-
err =
|
298
|
+
} catch (error1) {
|
299
|
+
err = error1;
|
280
300
|
throw new Error(`[!] Error while instantiate ${name} controller -> ${err}`);
|
281
301
|
}
|
282
302
|
if (!fs.existsSync(`${this._routes}/${name}.json`)) {
|
@@ -293,7 +313,7 @@
|
|
293
313
|
for (n = 0, len1 = ref.length; n < len1; n++) {
|
294
314
|
option = ref[n];
|
295
315
|
// Avoid override undefined keys
|
296
|
-
if (
|
316
|
+
if (entry[option] == null) {
|
297
317
|
continue;
|
298
318
|
}
|
299
319
|
// Adapt object using current controller name
|
@@ -317,8 +337,8 @@
|
|
317
337
|
try {
|
318
338
|
this._logify(7, `[*] Register controller route ${entry.method} ${entry.url}`);
|
319
339
|
results.push(this._webapp.route(entry));
|
320
|
-
} catch (
|
321
|
-
err =
|
340
|
+
} catch (error1) {
|
341
|
+
err = error1;
|
322
342
|
results.push(this._logify(3, `[!] Unable to register route entry: ${err}`));
|
323
343
|
}
|
324
344
|
}
|
@@ -358,24 +378,22 @@
|
|
358
378
|
this._logify(6, `[*] Start watcher ${watcher_name}`);
|
359
379
|
try {
|
360
380
|
watcher.watch();
|
361
|
-
} catch (
|
362
|
-
err =
|
363
|
-
throw new Error(`Unable to start watch method of watcher ${watcher_name}`);
|
381
|
+
} catch (error1) {
|
382
|
+
err = error1;
|
383
|
+
throw new Error(`Unable to start watch method of watcher ${watcher_name}: ${err}`);
|
364
384
|
}
|
365
385
|
}
|
366
386
|
// Once webapp is ready
|
367
387
|
this._webapp.ready((err) => {
|
368
|
-
var j, len, mdwr, middleware, ref2,
|
369
|
-
|
370
|
-
// Register each different services by its namespace
|
388
|
+
var j, len, mdwr, middleware, ref2, results, service_name;
|
389
|
+
// Register each different services by its namespace
|
371
390
|
results = [];
|
372
|
-
for (service_name in
|
373
|
-
service = ref2[service_name];
|
391
|
+
for (service_name in this.service_list) {
|
374
392
|
ns[service_name] = service_name === '/' ? this._webapp.io.of('/') : this._webapp.io.of(`/${service_name}`);
|
375
|
-
|
393
|
+
ref2 = this.middleware_list[service_name];
|
376
394
|
// Register middleware for namespace
|
377
|
-
for (j = 0, len =
|
378
|
-
middleware =
|
395
|
+
for (j = 0, len = ref2.length; j < len; j++) {
|
396
|
+
middleware = ref2[j];
|
379
397
|
mdwr = new middleware();
|
380
398
|
ns[service_name].use(mdwr.handle(this.appHandle));
|
381
399
|
}
|
@@ -389,8 +407,8 @@
|
|
389
407
|
// Start web server
|
390
408
|
this._logify(5, `[*] Starting server on https://${this.host}:${this.port} ...`);
|
391
409
|
return (await this._webapp.listen(this.port, this.host));
|
392
|
-
} catch (
|
393
|
-
err =
|
410
|
+
} catch (error1) {
|
411
|
+
err = error1;
|
394
412
|
return this._logify(3, `[!] Unable to start server: ${err}`);
|
395
413
|
}
|
396
414
|
}
|
@@ -400,11 +418,11 @@
|
|
400
418
|
stop() {
|
401
419
|
var err;
|
402
420
|
try {
|
403
|
-
return this._webapp.close(
|
421
|
+
return this._webapp.close(() => {
|
404
422
|
return this._logify(6, "[*] Server stopped");
|
405
423
|
});
|
406
|
-
} catch (
|
407
|
-
err =
|
424
|
+
} catch (error1) {
|
425
|
+
err = error1;
|
408
426
|
throw new Error(`[!] Unable to stop server: ${err}`);
|
409
427
|
}
|
410
428
|
}
|
@@ -461,8 +479,8 @@
|
|
461
479
|
try {
|
462
480
|
await this.service_list[service][method](socket, data, callback);
|
463
481
|
return resolve();
|
464
|
-
} catch (
|
465
|
-
err =
|
482
|
+
} catch (error1) {
|
483
|
+
err = error1;
|
466
484
|
return reject(err);
|
467
485
|
}
|
468
486
|
}).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 @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 \"[!] 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 _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 # Start all watchers\n for watcher_name, watcher of @watcher_list\n @_logify 6, \"[*] Start watcher #{watcher_name}\"\n try\n watcher.watch()\n catch err\n throw new Error \"Unable to start watch method of watcher #{watcher_name}\"\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.0 #\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.0'\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 # Start all watchers\n for watcher_name, watcher of @watcher_list\n @_logify 6, \"[*] Start watcher #{watcher_name}\"\n try\n watcher.watch()\n catch err\n throw new Error \"Unable to start watch method of watcher #{watcher_name}: #{err}\"\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 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 }"
|
12
12
|
]
|
13
13
|
}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "ioserver",
|
3
|
-
"version": "1.
|
3
|
+
"version": "1.3.1",
|
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/",
|