node-pluginsmanager-plugin 4.8.8 → 5.0.0

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.
Files changed (136) hide show
  1. package/lib/cjs/checkers/RangeError/checkArrayLength.d.ts +2 -0
  2. package/lib/cjs/checkers/RangeError/checkArrayLength.js +26 -0
  3. package/lib/cjs/checkers/RangeError/checkArrayLengthBetween.d.ts +2 -0
  4. package/lib/cjs/checkers/RangeError/checkArrayLengthBetween.js +33 -0
  5. package/lib/cjs/checkers/RangeError/checkIntegerBetween.d.ts +2 -0
  6. package/lib/cjs/checkers/RangeError/checkIntegerBetween.js +32 -0
  7. package/lib/cjs/checkers/RangeError/checkNonEmptyArray.d.ts +2 -0
  8. package/lib/cjs/checkers/RangeError/checkNonEmptyArray.js +22 -0
  9. package/lib/cjs/checkers/RangeError/checkNonEmptyInteger.d.ts +2 -0
  10. package/lib/cjs/checkers/RangeError/checkNonEmptyInteger.js +22 -0
  11. package/lib/cjs/checkers/RangeError/checkNonEmptyNumber.d.ts +2 -0
  12. package/lib/cjs/checkers/RangeError/checkNonEmptyNumber.js +22 -0
  13. package/lib/cjs/checkers/RangeError/checkNonEmptyObject.d.ts +2 -0
  14. package/lib/cjs/checkers/RangeError/checkNonEmptyObject.js +22 -0
  15. package/lib/cjs/checkers/RangeError/checkNonEmptyString.d.ts +2 -0
  16. package/lib/cjs/checkers/RangeError/checkNonEmptyString.js +22 -0
  17. package/lib/cjs/checkers/RangeError/checkNumberBetween.d.ts +2 -0
  18. package/lib/cjs/checkers/RangeError/checkNumberBetween.js +32 -0
  19. package/lib/cjs/checkers/RangeError/checkObjectLength.d.ts +2 -0
  20. package/lib/cjs/checkers/RangeError/checkObjectLength.js +31 -0
  21. package/lib/cjs/checkers/RangeError/checkObjectLengthBetween.d.ts +2 -0
  22. package/lib/cjs/checkers/RangeError/checkObjectLengthBetween.js +36 -0
  23. package/lib/cjs/checkers/RangeError/checkStringLength.d.ts +2 -0
  24. package/lib/cjs/checkers/RangeError/checkStringLength.js +26 -0
  25. package/lib/cjs/checkers/RangeError/checkStringLengthBetween.d.ts +2 -0
  26. package/lib/cjs/checkers/RangeError/checkStringLengthBetween.js +33 -0
  27. package/lib/cjs/checkers/ReferenceError/checkExists.d.ts +2 -0
  28. package/lib/cjs/checkers/ReferenceError/checkExists.js +19 -0
  29. package/lib/cjs/checkers/TypeError/checkArray.d.ts +2 -0
  30. package/lib/cjs/checkers/TypeError/checkArray.js +22 -0
  31. package/lib/cjs/checkers/TypeError/checkBoolean.d.ts +2 -0
  32. package/lib/cjs/checkers/TypeError/checkBoolean.js +22 -0
  33. package/lib/cjs/checkers/TypeError/checkFunction.d.ts +2 -0
  34. package/lib/cjs/checkers/TypeError/checkFunction.js +22 -0
  35. package/lib/cjs/checkers/TypeError/checkInteger.d.ts +2 -0
  36. package/lib/cjs/checkers/TypeError/checkInteger.js +22 -0
  37. package/lib/cjs/checkers/TypeError/checkNumber.d.ts +2 -0
  38. package/lib/cjs/checkers/TypeError/checkNumber.js +22 -0
  39. package/lib/cjs/checkers/TypeError/checkObject.d.ts +2 -0
  40. package/lib/cjs/checkers/TypeError/checkObject.js +22 -0
  41. package/lib/cjs/checkers/TypeError/checkString.d.ts +2 -0
  42. package/lib/cjs/checkers/TypeError/checkString.js +22 -0
  43. package/lib/cjs/components/DescriptorUser.d.ts +27 -0
  44. package/lib/cjs/components/DescriptorUser.js +120 -0
  45. package/lib/cjs/components/Mediator.d.ts +19 -0
  46. package/lib/cjs/components/Mediator.js +145 -0
  47. package/lib/cjs/components/MediatorUser.d.ts +12 -0
  48. package/lib/cjs/components/MediatorUser.js +40 -0
  49. package/lib/cjs/components/NotFoundError.d.ts +2 -0
  50. package/lib/cjs/components/NotFoundError.js +7 -0
  51. package/lib/cjs/components/Orchestrator.d.ts +54 -0
  52. package/lib/cjs/components/Orchestrator.js +386 -0
  53. package/lib/cjs/components/Server.d.ts +55 -0
  54. package/lib/cjs/components/Server.js +534 -0
  55. package/lib/cjs/main.cjs +90 -0
  56. package/lib/cjs/main.d.cts +29 -0
  57. package/lib/cjs/utils/cleanSendedError.d.ts +1 -0
  58. package/lib/cjs/utils/cleanSendedError.js +43 -0
  59. package/lib/cjs/utils/descriptor/extractParams.d.ts +3 -0
  60. package/lib/cjs/utils/descriptor/extractParams.js +21 -0
  61. package/lib/cjs/utils/descriptor/extractPathMethodByOperationId.d.ts +8 -0
  62. package/lib/cjs/utils/descriptor/extractPathMethodByOperationId.js +34 -0
  63. package/lib/cjs/utils/descriptor/extractPattern.d.ts +2 -0
  64. package/lib/cjs/utils/descriptor/extractPattern.js +27 -0
  65. package/lib/cjs/utils/descriptor/extractSchemaType.d.ts +4 -0
  66. package/lib/cjs/utils/descriptor/extractSchemaType.js +18 -0
  67. package/lib/cjs/utils/file/checkFile.d.ts +1 -0
  68. package/lib/cjs/utils/file/checkFile.js +17 -0
  69. package/lib/cjs/utils/file/isFile.d.ts +1 -0
  70. package/lib/cjs/utils/file/isFile.js +19 -0
  71. package/lib/cjs/utils/file/readJSONFile.d.ts +1 -0
  72. package/lib/cjs/utils/file/readJSONFile.js +24 -0
  73. package/lib/cjs/utils/getUniqueID.d.ts +1 -0
  74. package/lib/cjs/utils/getUniqueID.js +16 -0
  75. package/lib/cjs/utils/removeFirstSlash.d.ts +1 -0
  76. package/lib/cjs/utils/removeFirstSlash.js +8 -0
  77. package/lib/cjs/utils/request/extractBody.d.ts +7 -0
  78. package/lib/cjs/utils/request/extractBody.js +50 -0
  79. package/lib/cjs/utils/request/extractCookies.d.ts +4 -0
  80. package/lib/cjs/utils/request/extractCookies.js +53 -0
  81. package/lib/cjs/utils/request/extractIp.d.ts +1 -0
  82. package/lib/cjs/utils/request/extractIp.js +40 -0
  83. package/lib/cjs/utils/send.d.ts +2 -0
  84. package/lib/cjs/utils/send.js +57 -0
  85. package/lib/cjs/utils/serverCodes.d.ts +14 -0
  86. package/lib/cjs/utils/serverCodes.js +15 -0
  87. package/package.json +32 -13
  88. package/lib/checkers/RangeError/checkArrayLength.js +0 -74
  89. package/lib/checkers/RangeError/checkArrayLengthBetween.js +0 -97
  90. package/lib/checkers/RangeError/checkIntegerBetween.js +0 -96
  91. package/lib/checkers/RangeError/checkNonEmptyArray.js +0 -61
  92. package/lib/checkers/RangeError/checkNonEmptyInteger.js +0 -61
  93. package/lib/checkers/RangeError/checkNonEmptyNumber.js +0 -61
  94. package/lib/checkers/RangeError/checkNonEmptyObject.js +0 -61
  95. package/lib/checkers/RangeError/checkNonEmptyString.js +0 -61
  96. package/lib/checkers/RangeError/checkNumberBetween.js +0 -96
  97. package/lib/checkers/RangeError/checkObjectLength.js +0 -78
  98. package/lib/checkers/RangeError/checkObjectLengthBetween.js +0 -101
  99. package/lib/checkers/RangeError/checkStringLength.js +0 -70
  100. package/lib/checkers/RangeError/checkStringLengthBetween.js +0 -97
  101. package/lib/checkers/ReferenceError/checkExists.js +0 -49
  102. package/lib/checkers/TypeError/checkArray.js +0 -61
  103. package/lib/checkers/TypeError/checkBoolean.js +0 -61
  104. package/lib/checkers/TypeError/checkFunction.js +0 -61
  105. package/lib/checkers/TypeError/checkInteger.js +0 -61
  106. package/lib/checkers/TypeError/checkNumber.js +0 -61
  107. package/lib/checkers/TypeError/checkObject.js +0 -61
  108. package/lib/checkers/TypeError/checkString.js +0 -61
  109. package/lib/checkers/main.js +0 -76
  110. package/lib/components/DescriptorUser.js +0 -179
  111. package/lib/components/Mediator.js +0 -220
  112. package/lib/components/MediatorUser.js +0 -63
  113. package/lib/components/NotFoundError.js +0 -5
  114. package/lib/components/Orchestrator.js +0 -634
  115. package/lib/components/Server.js +0 -777
  116. package/lib/components/main.js +0 -25
  117. package/lib/index.d.ts +0 -279
  118. package/lib/main.js +0 -17
  119. package/lib/utils/cleanSendedError.js +0 -47
  120. package/lib/utils/descriptor/extractParams.js +0 -29
  121. package/lib/utils/descriptor/extractPathMethodByOperationId.js +0 -47
  122. package/lib/utils/descriptor/extractPattern.js +0 -38
  123. package/lib/utils/descriptor/extractSchemaType.js +0 -24
  124. package/lib/utils/descriptor/main.js +0 -21
  125. package/lib/utils/file/checkFile.js +0 -22
  126. package/lib/utils/file/isFile.js +0 -29
  127. package/lib/utils/file/main.js +0 -19
  128. package/lib/utils/file/readJSONFile.js +0 -30
  129. package/lib/utils/getUniqueID.js +0 -20
  130. package/lib/utils/removeFirstSlash.js +0 -7
  131. package/lib/utils/request/extractBody.js +0 -79
  132. package/lib/utils/request/extractCookies.js +0 -68
  133. package/lib/utils/request/extractIp.js +0 -47
  134. package/lib/utils/request/main.js +0 -19
  135. package/lib/utils/send.js +0 -75
  136. package/lib/utils/serverCodes.json +0 -17
@@ -1,777 +0,0 @@
1
- /*
2
- eslint-disable complexity, max-statements, no-undefined, max-lines, consistent-return
3
- */
4
-
5
- "use strict";
6
-
7
- // deps
8
-
9
- // natives
10
- const { join } = require("path");
11
- const { parse } = require("url");
12
- const { EOL } = require("os");
13
-
14
- // externals
15
- let SwaggerParser = null; // hotload
16
-
17
- // locals
18
- const MediatorUser = require(join(__dirname, "MediatorUser.js"));
19
- const NotFoundError = require(join(__dirname, "NotFoundError.js"));
20
- const { checkInteger, checkNonEmptyObject, checkNonEmptyString } = require(join(__dirname, "..", "checkers", "main.js"));
21
- const { extractPattern, extractParams, extractSchemaType } = require(join(__dirname, "..", "utils", "descriptor", "main.js"));
22
- const { extractBody, extractIp, extractCookies } = require(join(__dirname, "..", "utils", "request", "main.js"));
23
- const send = require(join(__dirname, "..", "utils", "send.js"));
24
- const getUniqueID = require(join(__dirname, "..", "utils", "getUniqueID.js"));
25
- const cleanSendedError = require(join(__dirname, "..", "utils", "cleanSendedError.js"));
26
-
27
- // consts
28
-
29
- const WEBSOCKET_STATE_OPEN = 1;
30
- const SERVER_CODES = require(join(__dirname, "..", "utils", "serverCodes.json"));
31
-
32
- // module
33
-
34
- module.exports = class Server extends MediatorUser {
35
-
36
- constructor (opt) {
37
-
38
- super(opt);
39
-
40
- this._socketServer = null;
41
- this._checkParameters = true;
42
- this._checkResponse = false;
43
- this._cors = false;
44
-
45
- }
46
-
47
- // private
48
-
49
- _serverType () {
50
-
51
- if (!this._socketServer) {
52
- return "NO_SERVER";
53
- }
54
- else if (this._socketServer.clients && "function" === typeof this._socketServer.clients.forEach) {
55
- return "WEBSOCKET";
56
- }
57
- else if (this._socketServer.sockets && "function" === typeof this._socketServer.sockets.emit) {
58
- return "SOCKETIO";
59
- }
60
- else {
61
- return "UNKNOWN";
62
- }
63
-
64
- }
65
-
66
- // public
67
-
68
- disableCheckParameters () {
69
- this._checkParameters = false; return this;
70
- }
71
-
72
- enableCheckParameters () {
73
- this._checkParameters = true; return this;
74
- }
75
-
76
- disableCheckResponse () {
77
- this._checkResponse = false; return this;
78
- }
79
-
80
- enableCheckResponse () {
81
- this._checkResponse = true; return this;
82
- }
83
-
84
- disableCors () {
85
- this._cors = false; return this;
86
- }
87
-
88
- enableCors () {
89
- this._cors = true; return this;
90
- }
91
-
92
- appMiddleware (req, res, next) { // req, res, next : void
93
-
94
- if (!this._Descriptor) {
95
- return next();
96
- }
97
-
98
- if (!this._Descriptor.paths) {
99
- return next();
100
- }
101
-
102
- this.checkDescriptor().then(() => {
103
-
104
- // parse
105
- const { pathname, query } = parse(req.url, true);
106
- req.method = req.method.toLowerCase();
107
- req.pattern = !checkNonEmptyString("pattern", req.pattern, false) ? req.pattern : extractPattern(
108
- this._Descriptor.paths, pathname, req.method
109
- );
110
-
111
- if (!req.pattern) {
112
- return next();
113
- }
114
-
115
- req.validatedIp = !checkNonEmptyString("ip", req.validatedIp, false) ? req.validatedIp : extractIp(req);
116
-
117
- // url
118
- req.headers = !checkNonEmptyObject("headers", req.headers, false) ? req.headers : {};
119
- req.cookies = !checkNonEmptyObject("cookies", req.cookies, false) ? req.cookies : extractCookies(req);
120
- req.query = !checkNonEmptyObject("query", req.query, false) ? req.query : query || {};
121
- req.params = !checkNonEmptyObject("params", req.params, false) ? req.params : extractParams(req.pattern, pathname);
122
-
123
- // ensure content length formate
124
- if ("undefined" === typeof req.headers["content-length"]) {
125
- req.headers["content-length"] = 0;
126
- }
127
- else if ("string" === typeof req.headers["content-length"]) {
128
- req.headers["content-length"] = parseInt(req.headers["content-length"], 10);
129
- }
130
-
131
- // set default content-type
132
- if ("string" !== typeof req.headers["content-type"]) {
133
- req.headers["content-type"] = "application/json";
134
- }
135
-
136
- if (!req.pattern || !this._Descriptor.paths[req.pattern] || !this._Descriptor.paths[req.pattern][req.method]) {
137
- return next();
138
- }
139
-
140
- const { operationId } = this._Descriptor.paths[req.pattern][req.method];
141
-
142
- this._log("info", "" +
143
- "=> [" + req.validatedIp + "] " + req.url + " (" + req.method.toUpperCase() + ")" +
144
- (operationId ? EOL + "operationId : " + operationId : "") +
145
- EOL + "content-type : " + req.headers["content-type"] +
146
- (
147
- "get" !== req.method && req.headers["content-length"] && 4 < req.headers["content-length"] ?
148
- EOL + "content-length : " + req.headers["content-length"] : ""
149
- )
150
- );
151
-
152
- // get descriptor
153
- if ("/" + this._Descriptor.info.title + "/api/descriptor" === req.pattern && "get" === req.method) {
154
-
155
- return new Promise((resolve, reject) => {
156
-
157
- if (null === SwaggerParser) {
158
- SwaggerParser = require("@apidevtools/swagger-parser");
159
- }
160
-
161
- SwaggerParser.validate(this._Descriptor, (err, api) => {
162
- return err ? reject(err) : resolve(api);
163
- });
164
-
165
- // add current server
166
- }).then((api) => {
167
-
168
- const protocol = res.socket && Boolean(res.socket.encrypted) ? "https" : "http";
169
-
170
- let port = res.socket && res.socket.localPort ? res.socket.localPort : 0;
171
- if (!port) {
172
- port = "http" === protocol ? 80 : 443;
173
- }
174
-
175
- if (!api.servers) {
176
- api.servers = [];
177
- }
178
-
179
- api.servers.push({
180
- "url": protocol + "://" + req.validatedIp + ":" + port,
181
- "description": "Actual current server"
182
- });
183
-
184
- return Promise.resolve(api);
185
-
186
- }).then((api) => {
187
-
188
- this._log("info", "<= [" + req.validatedIp + "] " + JSON.stringify(api));
189
- return send(req, res, SERVER_CODES.OK, api, this._Descriptor.info.version, this._cors);
190
-
191
- }).catch((err) => {
192
-
193
- this._log("error", err);
194
-
195
- const result = {
196
- "code": "INTERNAL_SERVER_ERROR",
197
- "message": cleanSendedError(err)
198
- };
199
-
200
- this._log("error", "<= [" + req.validatedIp + "] " + JSON.stringify(result));
201
- return send(req, res, SERVER_CODES.INTERNAL_SERVER_ERROR, result, this._Descriptor.info.version, this._cors);
202
-
203
- });
204
-
205
- }
206
-
207
- // get plugin status
208
- else if ("/" + this._Descriptor.info.title + "/api/status" === req.pattern && "get" === req.method) {
209
-
210
- const initialized = this.initialized && this._Mediator.initialized;
211
- const status = initialized ? "INITIALIZED" : "ENABLED";
212
-
213
- this._log("info", "<= [" + req.validatedIp + "] " + status);
214
- return send(req, res, SERVER_CODES.OK, status, this._Descriptor.info.version, this._cors);
215
-
216
- }
217
-
218
- // missing operationId
219
- else if (!operationId) {
220
-
221
- const result = {
222
- "code": "NOT_IMPLEMENTED",
223
- "message": "Missing \"operationId\" in the Descriptor for this request"
224
- };
225
-
226
- this._log("error", "<= [" + req.validatedIp + "] " + JSON.stringify(result));
227
- return send(req, res, SERVER_CODES.NOT_IMPLEMENTED, result, this._Descriptor.info.version, this._cors);
228
-
229
- }
230
-
231
- // not implemented operationId
232
- else if ("function" !== typeof this._Mediator[operationId]) {
233
-
234
- const result = {
235
- "code": "NOT_IMPLEMENTED",
236
- "message": "Unknown Mediator's \"operationId\" method for this request"
237
- };
238
-
239
- this._log("error", "<= [" + req.validatedIp + "] " + JSON.stringify(result));
240
- return send(req, res, SERVER_CODES.NOT_IMPLEMENTED, result, this._Descriptor.info.version, this._cors);
241
-
242
- }
243
-
244
- // no "Content-Length" header found
245
- else if ("get" !== req.method && null !== checkInteger(
246
- "headers[\"content-length\"]", req.headers["content-length"], false
247
- )) {
248
-
249
- const result = {
250
- "code": "MISSING_HEADER",
251
- "message": "No valid \"Content-Length\" header found"
252
- };
253
-
254
- this._log("error", "<= [" + req.validatedIp + "] " + JSON.stringify(result));
255
- return send(req, res, SERVER_CODES.MISSING_HEADER, result, this._Descriptor.info.version, this._cors);
256
-
257
- }
258
-
259
- else {
260
-
261
- // force formate for path parameters
262
- return Promise.resolve().then(() => {
263
-
264
- const keys = Object.keys(req.params);
265
- return !keys.length ? Promise.resolve() : Promise.resolve().then(() => {
266
-
267
- const docParameters = this._Descriptor.paths[req.pattern][req.method].parameters.filter((p) => {
268
- return "path" === p.in;
269
- });
270
-
271
- return !docParameters.length ? Promise.resolve() : Promise.resolve().then(() => {
272
-
273
- let err = null;
274
- for (let i = 0; i < keys.length; ++i) {
275
-
276
- const key = keys[i];
277
-
278
- const schema = docParameters.find((dp) => {
279
- return dp.name === key;
280
- }).schema || null;
281
-
282
- if (!schema) {
283
- err = new ReferenceError("Unknown parameter: request.params['" + key + "']"); break;
284
- }
285
-
286
- switch (extractSchemaType(schema, this._Descriptor.components.schemas)) {
287
-
288
- case "boolean":
289
-
290
- if ("boolean" !== typeof req.params[key]) {
291
-
292
- if ("true" === req.params[key]) {
293
- req.params[key] = true;
294
- }
295
- else if ("false" === req.params[key]) {
296
- req.params[key] = false;
297
- }
298
- else {
299
-
300
- err = new TypeError(
301
- "Error while validating request: request.params['" + key + "'] should be boolean"
302
- ); break;
303
-
304
- }
305
-
306
- }
307
-
308
- break;
309
-
310
- case "integer":
311
-
312
- // error returned, not an integer
313
- if (checkInteger("request.params['" + key + "']", req.params[key], false)) {
314
-
315
- const value = parseInt(req.params[key], 10);
316
-
317
- if (!Number.isNaN(value)) {
318
- req.params[key] = value;
319
- }
320
- else {
321
-
322
- err = new TypeError(
323
- "Error while validating request: request.params['" + key + "'] should be integer"
324
- ); break;
325
-
326
- }
327
-
328
- }
329
-
330
- break;
331
-
332
- case "number":
333
-
334
- if ("number" !== typeof req.params[key]) {
335
-
336
- const value = parseFloat(req.params[key]);
337
-
338
- if (!Number.isNaN(value)) {
339
- req.params[key] = value;
340
- }
341
- else {
342
-
343
- err = new TypeError(
344
- "Error while validating request: request.params['" + key + "'] should be number"
345
- ); break;
346
-
347
- }
348
-
349
- }
350
-
351
- break;
352
-
353
- default:
354
- // nothing to do here
355
- break;
356
-
357
- }
358
-
359
- }
360
-
361
- return err ? Promise.reject(err) : Promise.resolve();
362
-
363
- });
364
-
365
- });
366
-
367
- // extract body
368
- }).then(() => {
369
-
370
- if ("get" === req.method.toLowerCase()) {
371
- return Promise.resolve({});
372
- }
373
- else if (!checkNonEmptyObject("body", req.body, false)) {
374
- return Promise.resolve(req.body);
375
- }
376
- else {
377
-
378
- return extractBody(req).then((body) => {
379
-
380
- req.body = body.parsed;
381
-
382
- if (body.value.length) {
383
- this._log("log", body.value);
384
- }
385
-
386
- return Promise.resolve(req.body);
387
-
388
- });
389
-
390
- }
391
-
392
- // formate data
393
- }).then((body) => {
394
-
395
- const parsed = {
396
- "url": {
397
- "path": req.params,
398
- "query": req.query,
399
- "headers": req.headers,
400
- "cookies": req.cookies
401
- },
402
- body
403
- };
404
-
405
- // check parameters
406
- return Promise.resolve().then(() => {
407
-
408
- return this._checkParameters ? this._Mediator.checkParameters(
409
- operationId, parsed.url, parsed.body
410
- ) : Promise.resolve();
411
-
412
- // execute Mediator method
413
- }).then(() => {
414
-
415
- return this._Mediator[operationId](parsed.url, parsed.body);
416
-
417
- });
418
-
419
- // send response
420
- }).then((content) => {
421
-
422
- // created
423
- if ("put" === req.method) {
424
-
425
- if ("undefined" === typeof content || null === content) {
426
- this._log("success", "<= [" + req.validatedIp + "] no content");
427
- return send(req, res, SERVER_CODES.OK_PUT, undefined, this._Descriptor.info.version, this._cors);
428
- }
429
-
430
- else {
431
- this._log("success", "<= [" + req.validatedIp + "] " + JSON.stringify(content));
432
- return send(req, res, SERVER_CODES.OK_PUT, content, this._Descriptor.info.version, this._cors);
433
- }
434
-
435
- }
436
-
437
- // no content
438
- else if ("undefined" === typeof content || null === content) {
439
- this._log("warning", "<= [" + req.validatedIp + "] no content");
440
- return send(req, res, SERVER_CODES.OK_NO_CONTENT, undefined, this._Descriptor.info.version, this._cors);
441
- }
442
-
443
- else {
444
- this._log("success", "<= [" + req.validatedIp + "] " + JSON.stringify(content));
445
- return send(req, res, SERVER_CODES.OK, content, this._Descriptor.info.version, this._cors);
446
- }
447
-
448
- }).catch((err) => {
449
-
450
- if (err instanceof ReferenceError) {
451
-
452
- const result = {
453
- "code": "MISSING_PARAMETER",
454
- "message": cleanSendedError(err)
455
- };
456
-
457
- this._log("error", "<= [" + req.validatedIp + "] " + JSON.stringify(result));
458
- return send(req, res, SERVER_CODES.MISSING_PARAMETER, result, this._Descriptor.info.version, this._cors);
459
-
460
- }
461
- else if (err instanceof TypeError) {
462
-
463
- const result = {
464
- "code": "WRONG_TYPE_PARAMETER",
465
- "message": cleanSendedError(err)
466
- };
467
-
468
- this._log("error", "<= [" + req.validatedIp + "] " + JSON.stringify(result));
469
- return send(req, res, SERVER_CODES.WRONG_TYPE_PARAMETER, result, this._Descriptor.info.version, this._cors);
470
-
471
- }
472
- else if (err instanceof RangeError) {
473
-
474
- const result = {
475
- "code": "EMPTY_OR_RANGE_OR_ENUM_PARAMETER",
476
- "message": cleanSendedError(err)
477
- };
478
-
479
- this._log("error", "<= [" + req.validatedIp + "] " + JSON.stringify(result));
480
- return send(req, res, SERVER_CODES.EMPTY_OR_RANGE_OR_ENUM_PARAMETER, result, this._Descriptor.info.version, this._cors);
481
-
482
- }
483
- else if (err instanceof SyntaxError) {
484
-
485
- const result = {
486
- "code": "JSON_PARSE",
487
- "message": cleanSendedError(err)
488
- };
489
-
490
- this._log("error", "<= [" + req.validatedIp + "] " + JSON.stringify(result));
491
- return send(req, res, SERVER_CODES.JSON_PARSE, result, this._Descriptor.info.version, this._cors);
492
-
493
- }
494
- else if (err instanceof NotFoundError) {
495
-
496
- const result = {
497
- "code": "NOT_FOUND",
498
- "message": cleanSendedError(err)
499
- };
500
-
501
- this._log("error", "<= [" + req.validatedIp + "] " + JSON.stringify(result));
502
- return send(req, res, SERVER_CODES.NOT_FOUND, result, this._Descriptor.info.version, this._cors);
503
-
504
- }
505
- else {
506
-
507
- this._log("error", err);
508
-
509
- const result = {
510
- "code": "INTERNAL_SERVER_ERROR",
511
- "message": cleanSendedError(err)
512
- };
513
-
514
- this._log("error", "<= [" + req.validatedIp + "] " + JSON.stringify(result));
515
- return send(req, res, SERVER_CODES.INTERNAL_SERVER_ERROR, result, this._Descriptor.info.version, this._cors);
516
-
517
- }
518
-
519
- // check response
520
- }).then(() => {
521
-
522
- return this._checkResponse ? this._Mediator.checkResponse(operationId, res) : Promise.resolve();
523
-
524
- });
525
-
526
- }
527
-
528
- }).then(() => {
529
-
530
- // nothing to do here
531
- // must not be blocking in http server or express app
532
-
533
- }).catch((err) => {
534
- this._log("error", err);
535
- });
536
-
537
- }
538
-
539
- socketMiddleware (socketServer) { // socket : WebSocket | SocketIO
540
- this._socketServer = socketServer;
541
- }
542
-
543
- getClients () {
544
-
545
- switch (this._serverType()) {
546
-
547
- case "WEBSOCKET":
548
-
549
- return this._socketServer.clients.map((s) => {
550
-
551
- if (!s.id) {
552
- s.id = getUniqueID();
553
- }
554
-
555
- return {
556
- "id": s.id,
557
- "status": WEBSOCKET_STATE_OPEN === s.readyState ? "CONNECTED" : "DISCONNECTED"
558
- };
559
-
560
- });
561
-
562
- case "SOCKETIO": {
563
-
564
- const result = [];
565
-
566
- this._socketServer.sockets.sockets.forEach((s) => {
567
-
568
- result.push({
569
- "id": s.id,
570
- "status": s.connected ? "CONNECTED" : "DISCONNECTED"
571
- });
572
-
573
- });
574
-
575
- return result;
576
-
577
- }
578
-
579
- default:
580
- return [];
581
-
582
- }
583
-
584
- }
585
-
586
- push (command, data, log = true) {
587
-
588
- const serverType = this._serverType();
589
-
590
- if (![ "WEBSOCKET", "SOCKETIO" ].includes(serverType)) {
591
- return this;
592
- }
593
-
594
- // valid descriptor && formate data
595
- this.checkDescriptor().then(() => {
596
-
597
- const result = {
598
- "plugin": this._Descriptor.info.title,
599
- command
600
- };
601
-
602
- if ("undefined" !== typeof data) {
603
- result.data = cleanSendedError(data);
604
- }
605
-
606
- return Promise.resolve(JSON.stringify(result));
607
-
608
- // log & send data
609
- }).then((result) => {
610
-
611
- if (log) {
612
- this._log("info", "<= [PUSH] " + result, true);
613
- }
614
-
615
- switch (serverType) {
616
-
617
- case "WEBSOCKET":
618
-
619
- this._socketServer.clients.forEach((client) => {
620
-
621
- if (!client.id) {
622
- client.id = getUniqueID();
623
- }
624
-
625
- if (WEBSOCKET_STATE_OPEN === client.readyState) {
626
- client.send(result);
627
- }
628
-
629
- });
630
-
631
- break;
632
-
633
- case "SOCKETIO":
634
- this._socketServer.sockets.emit("message", result);
635
- break;
636
-
637
- default:
638
- // nothing to do here
639
- break;
640
-
641
- }
642
-
643
- }).catch((err) => {
644
- this._log("error", err);
645
- });
646
-
647
- return this;
648
-
649
- }
650
-
651
- pushClient (clientId, command, data, log = true) {
652
-
653
- const serverType = this._serverType();
654
-
655
- if (![ "WEBSOCKET", "SOCKETIO" ].includes(serverType)) {
656
- return this;
657
- }
658
-
659
- // valid descriptor && formate data
660
- this.checkDescriptor().then(() => {
661
-
662
- const result = {
663
- "plugin": this._Descriptor.info.title,
664
- command
665
- };
666
-
667
- if ("undefined" !== typeof data) {
668
- result.data = cleanSendedError(data);
669
- }
670
-
671
- return Promise.resolve(JSON.stringify(result));
672
-
673
- // log & send data
674
- }).then((result) => {
675
-
676
- switch (serverType) {
677
-
678
- case "WEBSOCKET":
679
-
680
- this._socketServer.clients.forEach((client) => {
681
-
682
- if (!client.id) {
683
- client.id = getUniqueID();
684
- }
685
- else if (client.id === clientId && WEBSOCKET_STATE_OPEN === client.readyState) {
686
-
687
- if (log) {
688
- this._log("info", "<= [PUSH|" + clientId + "] " + result);
689
- }
690
-
691
- client.send(result);
692
-
693
- }
694
-
695
- });
696
-
697
- break;
698
-
699
- case "SOCKETIO":
700
-
701
- if (this._socketServer.sockets.sockets.has(clientId)) {
702
-
703
- const socket = this._socketServer.sockets.sockets.get(clientId);
704
-
705
- if (socket.connected) {
706
-
707
- if (log) {
708
- this._log("info", "<= [PUSH|" + clientId + "] " + result);
709
- }
710
-
711
- socket.emit("message", result);
712
-
713
- }
714
-
715
- }
716
-
717
- break;
718
-
719
- default:
720
- // nothing to do here
721
- break;
722
-
723
- }
724
- }).catch((err) => {
725
- this._log("error", err);
726
- });
727
-
728
- return this;
729
-
730
- }
731
-
732
- // init / release
733
-
734
- init (...data) {
735
-
736
- return this.checkDescriptor().then(() => {
737
- return this.checkMediator();
738
- }).then(() => {
739
- return this._initWorkSpace(...data);
740
- }).then(() => {
741
-
742
- this.initialized = true;
743
- this.emit("initialized", ...data);
744
-
745
- });
746
-
747
- }
748
-
749
- release (...data) {
750
-
751
- return this._releaseWorkSpace(...data).then(() => {
752
-
753
- // can only be released by Orchestrator
754
- if (this._Descriptor) {
755
- this._Descriptor = null;
756
- }
757
-
758
- // can only be released by Orchestrator
759
- if (this._Mediator) {
760
- this._Mediator = null;
761
- }
762
-
763
- this._externalRessourcesDirectory = "";
764
- this._socketServer = null;
765
-
766
- this.initialized = false;
767
- this.emit("released", ...data);
768
-
769
- }).then(() => {
770
-
771
- this.removeAllListeners();
772
-
773
- });
774
-
775
- }
776
-
777
- };