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
@@ -0,0 +1,534 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ // deps
7
+ // natives
8
+ const url_1 = require("url");
9
+ const os_1 = require("os");
10
+ const uniqid_1 = __importDefault(require("uniqid"));
11
+ // locals
12
+ const checkInteger_1 = require("../checkers/TypeError/checkInteger");
13
+ const checkNonEmptyObject_1 = require("../checkers/RangeError/checkNonEmptyObject");
14
+ const checkNonEmptyString_1 = require("../checkers/RangeError/checkNonEmptyString");
15
+ const extractPattern_1 = __importDefault(require("../utils/descriptor/extractPattern"));
16
+ const extractParams_1 = __importDefault(require("../utils/descriptor/extractParams"));
17
+ const extractSchemaType_1 = __importDefault(require("../utils/descriptor/extractSchemaType"));
18
+ const extractBody_1 = __importDefault(require("../utils/request/extractBody"));
19
+ const extractIp_1 = __importDefault(require("../utils/request/extractIp"));
20
+ const extractCookies_1 = __importDefault(require("../utils/request/extractCookies"));
21
+ const send_1 = __importDefault(require("../utils/send"));
22
+ const cleanSendedError_1 = __importDefault(require("../utils/cleanSendedError"));
23
+ const MediatorUser_1 = __importDefault(require("./MediatorUser"));
24
+ const NotFoundError_1 = __importDefault(require("./NotFoundError"));
25
+ const serverCodes_1 = __importDefault(require("../utils/serverCodes"));
26
+ // consts
27
+ const WEBSOCKET_STATE_OPEN = 1;
28
+ // module
29
+ // Please note the fact that "init" and "release" method MUST NOT be re-writted. Each child has is own init logic.
30
+ class Server extends MediatorUser_1.default {
31
+ // constructor
32
+ constructor(opt) {
33
+ super(opt);
34
+ this._socketServer = null;
35
+ this._checkParameters = true;
36
+ this._checkResponse = false;
37
+ this._cors = false;
38
+ }
39
+ // protected
40
+ _serverType() {
41
+ if (!this._socketServer) {
42
+ return "NO_SERVER";
43
+ }
44
+ else if (this._socketServer.clients && "function" === typeof this._socketServer.clients.forEach) {
45
+ return "WEBSOCKET";
46
+ }
47
+ else if (this._socketServer.sockets && "function" === typeof this._socketServer.sockets.emit) {
48
+ return "SOCKETIO";
49
+ }
50
+ else {
51
+ return "UNKNOWN";
52
+ }
53
+ }
54
+ // public
55
+ disableCheckParameters() {
56
+ this._checkParameters = false;
57
+ return this;
58
+ }
59
+ enableCheckParameters() {
60
+ this._checkParameters = true;
61
+ return this;
62
+ }
63
+ disableCheckResponse() {
64
+ this._checkResponse = false;
65
+ return this;
66
+ }
67
+ enableCheckResponse() {
68
+ this._checkResponse = true;
69
+ return this;
70
+ }
71
+ disableCors() {
72
+ this._cors = false;
73
+ return this;
74
+ }
75
+ enableCors() {
76
+ this._cors = true;
77
+ return this;
78
+ }
79
+ appMiddleware(req, res, next) {
80
+ if (!this._Descriptor) {
81
+ return next();
82
+ }
83
+ if (!this._Descriptor.paths) {
84
+ return next();
85
+ }
86
+ this.checkDescriptor().then(() => {
87
+ // parse
88
+ const { pathname, query } = (0, url_1.parse)(req.url, true);
89
+ req.method = req.method ? req.method.toLowerCase() : "get";
90
+ req.pattern = null === (0, checkNonEmptyString_1.checkNonEmptyStringSync)("pattern", req.pattern) ? req.pattern : (0, extractPattern_1.default)(this._Descriptor.paths, pathname, req.method);
91
+ if (!req.pattern) {
92
+ return next();
93
+ }
94
+ req.validatedIp = null === (0, checkNonEmptyString_1.checkNonEmptyStringSync)("ip", req.validatedIp) ? req.validatedIp : (0, extractIp_1.default)(req);
95
+ // url
96
+ req.headers = null === (0, checkNonEmptyObject_1.checkNonEmptyObjectSync)("headers", req.headers) ? req.headers : {};
97
+ req.cookies = null === (0, checkNonEmptyObject_1.checkNonEmptyObjectSync)("cookies", req.cookies) ? req.cookies : (0, extractCookies_1.default)(req);
98
+ req.query = null === (0, checkNonEmptyObject_1.checkNonEmptyObjectSync)("query", req.query) ? req.query : query || {};
99
+ req.params = null === (0, checkNonEmptyObject_1.checkNonEmptyObjectSync)("params", req.params) ? req.params : (0, extractParams_1.default)(req.pattern, pathname);
100
+ // ensure content length formate
101
+ if ("undefined" === typeof req.headers["content-length"]) {
102
+ req.headers["content-length"] = 0;
103
+ }
104
+ else if ("string" === typeof req.headers["content-length"]) {
105
+ req.headers["content-length"] = parseInt(req.headers["content-length"], 10);
106
+ }
107
+ // set default content-type
108
+ if ("string" !== typeof req.headers["content-type"]) {
109
+ req.headers["content-type"] = "application/json";
110
+ }
111
+ if (!req.pattern || !this._Descriptor.paths[req.pattern] || !this._Descriptor.paths[req.pattern][req.method]) {
112
+ return next();
113
+ }
114
+ const { operationId } = this._Descriptor.paths[req.pattern][req.method];
115
+ this._log("info", "" +
116
+ "=> [" + req.validatedIp + "] " + req.url + " (" + req.method.toUpperCase() + ")" +
117
+ (operationId ? os_1.EOL + "operationId : " + operationId : "") +
118
+ os_1.EOL + "content-type : " + req.headers["content-type"] +
119
+ ("get" !== req.method && req.headers["content-length"] && 4 < req.headers["content-length"] ?
120
+ os_1.EOL + "content-length : " + req.headers["content-length"] : ""));
121
+ // get descriptor
122
+ if ("/" + this._Descriptor.info.title + "/api/descriptor" === req.pattern && "get" === req.method) {
123
+ return Promise.resolve().then(() => {
124
+ // cannot extract only validate because of stupid malformatted references
125
+ const SwaggerParser = require("@apidevtools/swagger-parser");
126
+ return SwaggerParser.validate(this._Descriptor).then((api) => {
127
+ // force compatibility
128
+ return Promise.resolve(api);
129
+ });
130
+ // add current server
131
+ }).then((api) => {
132
+ var _a;
133
+ if (!api.servers) {
134
+ api.servers = [];
135
+ }
136
+ const port = res.socket && res.socket.localPort ? res.socket.localPort : ((_a = res.socket) === null || _a === void 0 ? void 0 : _a.address()).port;
137
+ api.servers.push({
138
+ "url": req.validatedIp + ":" + port,
139
+ "description": "Actual current server"
140
+ });
141
+ return Promise.resolve(api);
142
+ }).then((api) => {
143
+ this._log("info", "<= [" + req.validatedIp + "] " + JSON.stringify(api));
144
+ return (0, send_1.default)(req, res, serverCodes_1.default.OK, api, this._Descriptor.info.version, this._cors);
145
+ }).catch((err) => {
146
+ this._log("error", err);
147
+ const result = {
148
+ "code": "INTERNAL_SERVER_ERROR",
149
+ "message": (0, cleanSendedError_1.default)(err)
150
+ };
151
+ this._log("error", "<= [" + req.validatedIp + "] " + JSON.stringify(result));
152
+ return (0, send_1.default)(req, res, serverCodes_1.default.INTERNAL_SERVER_ERROR, result, this._Descriptor.info.version, this._cors);
153
+ });
154
+ }
155
+ // get plugin status
156
+ else if ("/" + this._Descriptor.info.title + "/api/status" === req.pattern && "get" === req.method) {
157
+ const initialized = this.initialized && this._Mediator.initialized;
158
+ const status = initialized ? "INITIALIZED" : "ENABLED";
159
+ this._log("info", "<= [" + req.validatedIp + "] " + status);
160
+ return (0, send_1.default)(req, res, serverCodes_1.default.OK, status, this._Descriptor.info.version, this._cors);
161
+ }
162
+ // missing operationId
163
+ else if (!operationId) {
164
+ const result = {
165
+ "code": "NOT_IMPLEMENTED",
166
+ "message": "Missing \"operationId\" in the Descriptor for this request"
167
+ };
168
+ this._log("error", "<= [" + req.validatedIp + "] " + JSON.stringify(result));
169
+ return (0, send_1.default)(req, res, serverCodes_1.default.NOT_IMPLEMENTED, result, this._Descriptor.info.version, this._cors);
170
+ }
171
+ // not implemented operationId
172
+ else if ("function" !== typeof this._Mediator[operationId]) {
173
+ const result = {
174
+ "code": "NOT_IMPLEMENTED",
175
+ "message": "Unknown Mediator's \"operationId\" method for this request"
176
+ };
177
+ this._log("error", "<= [" + req.validatedIp + "] " + JSON.stringify(result));
178
+ return (0, send_1.default)(req, res, serverCodes_1.default.NOT_IMPLEMENTED, result, this._Descriptor.info.version, this._cors);
179
+ }
180
+ // no "Content-Length" header found
181
+ else if ("get" !== req.method && null !== (0, checkInteger_1.checkIntegerSync)("headers[\"content-length\"]", req.headers["content-length"])) {
182
+ const result = {
183
+ "code": "MISSING_HEADER",
184
+ "message": "No valid \"Content-Length\" header found"
185
+ };
186
+ this._log("error", "<= [" + req.validatedIp + "] " + JSON.stringify(result));
187
+ return (0, send_1.default)(req, res, serverCodes_1.default.MISSING_HEADER, result, this._Descriptor.info.version, this._cors);
188
+ }
189
+ else {
190
+ // force formate for path parameters
191
+ return Promise.resolve().then(() => {
192
+ const keys = Object.keys(req.params);
193
+ return !keys.length ? Promise.resolve() : Promise.resolve().then(() => {
194
+ const docParameters = this._Descriptor.paths[req.pattern][req.method].parameters.filter((p) => {
195
+ return "path" === p.in;
196
+ });
197
+ return !docParameters.length ? Promise.resolve() : Promise.resolve().then(() => {
198
+ var _a;
199
+ let err = null;
200
+ for (let i = 0; i < keys.length; ++i) {
201
+ const key = keys[i];
202
+ const schema = ((_a = docParameters.find((dp) => {
203
+ return dp.name === key;
204
+ })) === null || _a === void 0 ? void 0 : _a.schema) || null;
205
+ if (!schema) {
206
+ err = new ReferenceError("Unknown parameter: request.params['" + key + "']");
207
+ break;
208
+ }
209
+ switch ((0, extractSchemaType_1.default)(schema, this._Descriptor.components.schemas)) {
210
+ case "boolean":
211
+ if ("boolean" !== typeof req.params[key]) {
212
+ if ("true" === req.params[key]) {
213
+ req.params[key] = true;
214
+ }
215
+ else if ("false" === req.params[key]) {
216
+ req.params[key] = false;
217
+ }
218
+ else {
219
+ err = new TypeError("Error while validating request: request.params['" + key + "'] should be boolean");
220
+ break;
221
+ }
222
+ }
223
+ break;
224
+ case "integer":
225
+ // error returned, not an integer
226
+ if (null !== (0, checkInteger_1.checkIntegerSync)("request.params['" + key + "']", req.params[key])) {
227
+ const value = parseInt(req.params[key], 10);
228
+ if (!Number.isNaN(value)) {
229
+ req.params[key] = value;
230
+ }
231
+ else {
232
+ err = new TypeError("Error while validating request: request.params['" + key + "'] should be integer");
233
+ break;
234
+ }
235
+ }
236
+ break;
237
+ case "number":
238
+ if ("number" !== typeof req.params[key]) {
239
+ const value = parseFloat(req.params[key]);
240
+ if (!Number.isNaN(value)) {
241
+ req.params[key] = value;
242
+ }
243
+ else {
244
+ err = new TypeError("Error while validating request: request.params['" + key + "'] should be number");
245
+ break;
246
+ }
247
+ }
248
+ break;
249
+ default:
250
+ // nothing to do here
251
+ break;
252
+ }
253
+ }
254
+ return err ? Promise.reject(err) : Promise.resolve();
255
+ });
256
+ });
257
+ // extract body
258
+ }).then(() => {
259
+ if ("get" === req.method.toLowerCase()) {
260
+ return Promise.resolve({});
261
+ }
262
+ else if (!(0, checkNonEmptyObject_1.checkNonEmptyObjectSync)("body", req.body)) {
263
+ return Promise.resolve(req.body);
264
+ }
265
+ else {
266
+ return (0, extractBody_1.default)(req).then((body) => {
267
+ req.body = body.parsed;
268
+ if (body.value.length) {
269
+ this._log("log", body.value);
270
+ }
271
+ return Promise.resolve(req.body);
272
+ });
273
+ }
274
+ // formate data
275
+ }).then((body) => {
276
+ const parsed = {
277
+ "url": {
278
+ "path": req.params,
279
+ "query": req.query,
280
+ "headers": req.headers,
281
+ "cookies": req.cookies
282
+ },
283
+ body
284
+ };
285
+ // check parameters
286
+ return Promise.resolve().then(() => {
287
+ return this._checkParameters ? this._Mediator.checkParameters(operationId, parsed.url, parsed.body) : Promise.resolve();
288
+ // execute Mediator method
289
+ }).then(() => {
290
+ return this._Mediator[operationId](parsed.url, parsed.body);
291
+ });
292
+ // send response
293
+ }).then((content) => {
294
+ // created
295
+ if ("put" === req.method) {
296
+ if ("undefined" === typeof content || null === content) {
297
+ this._log("success", "<= [" + req.validatedIp + "] no content");
298
+ return (0, send_1.default)(req, res, serverCodes_1.default.OK_PUT, undefined, this._Descriptor.info.version, this._cors);
299
+ }
300
+ else {
301
+ this._log("success", "<= [" + req.validatedIp + "] " + JSON.stringify(content));
302
+ return (0, send_1.default)(req, res, serverCodes_1.default.OK_PUT, content, this._Descriptor.info.version, this._cors);
303
+ }
304
+ }
305
+ // no content
306
+ else if ("undefined" === typeof content || null === content) {
307
+ this._log("warning", "<= [" + req.validatedIp + "] no content");
308
+ return (0, send_1.default)(req, res, serverCodes_1.default.OK_NO_CONTENT, undefined, this._Descriptor.info.version, this._cors);
309
+ }
310
+ else {
311
+ this._log("success", "<= [" + req.validatedIp + "] " + JSON.stringify(content));
312
+ return (0, send_1.default)(req, res, serverCodes_1.default.OK, content, this._Descriptor.info.version, this._cors);
313
+ }
314
+ }).catch((err) => {
315
+ if (err instanceof ReferenceError) {
316
+ const result = {
317
+ "code": "MISSING_PARAMETER",
318
+ "message": (0, cleanSendedError_1.default)(err)
319
+ };
320
+ this._log("error", "<= [" + req.validatedIp + "] " + JSON.stringify(result));
321
+ return (0, send_1.default)(req, res, serverCodes_1.default.MISSING_PARAMETER, result, this._Descriptor.info.version, this._cors);
322
+ }
323
+ else if (err instanceof TypeError) {
324
+ const result = {
325
+ "code": "WRONG_TYPE_PARAMETER",
326
+ "message": (0, cleanSendedError_1.default)(err)
327
+ };
328
+ this._log("error", "<= [" + req.validatedIp + "] " + JSON.stringify(result));
329
+ return (0, send_1.default)(req, res, serverCodes_1.default.WRONG_TYPE_PARAMETER, result, this._Descriptor.info.version, this._cors);
330
+ }
331
+ else if (err instanceof RangeError) {
332
+ const result = {
333
+ "code": "EMPTY_OR_RANGE_OR_ENUM_PARAMETER",
334
+ "message": (0, cleanSendedError_1.default)(err)
335
+ };
336
+ this._log("error", "<= [" + req.validatedIp + "] " + JSON.stringify(result));
337
+ return (0, send_1.default)(req, res, serverCodes_1.default.EMPTY_OR_RANGE_OR_ENUM_PARAMETER, result, this._Descriptor.info.version, this._cors);
338
+ }
339
+ else if (err instanceof SyntaxError) {
340
+ const result = {
341
+ "code": "JSON_PARSE",
342
+ "message": (0, cleanSendedError_1.default)(err)
343
+ };
344
+ this._log("error", "<= [" + req.validatedIp + "] " + JSON.stringify(result));
345
+ return (0, send_1.default)(req, res, serverCodes_1.default.JSON_PARSE, result, this._Descriptor.info.version, this._cors);
346
+ }
347
+ else if (err instanceof NotFoundError_1.default) {
348
+ const result = {
349
+ "code": "NOT_FOUND",
350
+ "message": (0, cleanSendedError_1.default)(err)
351
+ };
352
+ this._log("error", "<= [" + req.validatedIp + "] " + JSON.stringify(result));
353
+ return (0, send_1.default)(req, res, serverCodes_1.default.NOT_FOUND, result, this._Descriptor.info.version, this._cors);
354
+ }
355
+ else {
356
+ this._log("error", err);
357
+ const result = {
358
+ "code": "INTERNAL_SERVER_ERROR",
359
+ "message": (0, cleanSendedError_1.default)(err)
360
+ };
361
+ this._log("error", "<= [" + req.validatedIp + "] " + JSON.stringify(result));
362
+ return (0, send_1.default)(req, res, serverCodes_1.default.INTERNAL_SERVER_ERROR, result, this._Descriptor.info.version, this._cors);
363
+ }
364
+ // check response
365
+ }).then(() => {
366
+ return this._checkResponse ? this._Mediator.checkResponse(operationId, res) : Promise.resolve();
367
+ });
368
+ }
369
+ }).then(() => {
370
+ // nothing to do here
371
+ // must not be blocking in http server or express app
372
+ }).catch((err) => {
373
+ this._log("error", err);
374
+ });
375
+ }
376
+ socketMiddleware(socketServer) {
377
+ this._socketServer = socketServer;
378
+ }
379
+ push(command, data, log = true) {
380
+ const serverType = this._serverType();
381
+ if (!["WEBSOCKET", "SOCKETIO"].includes(serverType)) {
382
+ return this;
383
+ }
384
+ // valid descriptor && formate data
385
+ this.checkDescriptor().then(() => {
386
+ const result = {
387
+ "id": (0, uniqid_1.default)(),
388
+ "plugin": this._Descriptor.info.title,
389
+ command
390
+ };
391
+ if ("undefined" !== typeof data) {
392
+ result.data = (0, cleanSendedError_1.default)(data);
393
+ }
394
+ return Promise.resolve(JSON.stringify(result));
395
+ // log & send data
396
+ }).then((result) => {
397
+ if (log) {
398
+ this._log("info", "<= [PUSH] " + result, true);
399
+ }
400
+ switch (serverType) {
401
+ case "WEBSOCKET":
402
+ this._socketServer.clients.forEach((client) => {
403
+ if (!client.id) {
404
+ client.id = (0, uniqid_1.default)();
405
+ }
406
+ if (WEBSOCKET_STATE_OPEN === client.readyState) {
407
+ client.send(result);
408
+ }
409
+ });
410
+ break;
411
+ case "SOCKETIO":
412
+ this._socketServer.sockets.emit("message", result);
413
+ break;
414
+ default:
415
+ // nothing to do here
416
+ break;
417
+ }
418
+ }).catch((err) => {
419
+ this._log("error", err);
420
+ });
421
+ return this;
422
+ }
423
+ getClients() {
424
+ switch (this._serverType()) {
425
+ case "WEBSOCKET":
426
+ const result = [];
427
+ this._socketServer.clients.forEach((s) => {
428
+ if (!s.id) {
429
+ s.id = (0, uniqid_1.default)();
430
+ }
431
+ return {
432
+ "id": s.id,
433
+ "status": WEBSOCKET_STATE_OPEN === s.readyState ? "CONNECTED" : "DISCONNECTED"
434
+ };
435
+ });
436
+ return result;
437
+ case "SOCKETIO": {
438
+ const result = [];
439
+ this._socketServer.sockets.sockets.forEach((s) => {
440
+ result.push({
441
+ "id": s.id,
442
+ "status": s.connected ? "CONNECTED" : "DISCONNECTED"
443
+ });
444
+ });
445
+ return result;
446
+ }
447
+ default:
448
+ return [];
449
+ }
450
+ }
451
+ pushClient(clientId, command, data, log = true) {
452
+ const serverType = this._serverType();
453
+ if (!["WEBSOCKET", "SOCKETIO"].includes(serverType)) {
454
+ return this;
455
+ }
456
+ // valid descriptor && formate data
457
+ this.checkDescriptor().then(() => {
458
+ const result = {
459
+ "id": (0, uniqid_1.default)(),
460
+ "plugin": this._Descriptor.info.title,
461
+ command
462
+ };
463
+ if ("undefined" !== typeof data) {
464
+ result.data = (0, cleanSendedError_1.default)(data);
465
+ }
466
+ return Promise.resolve(JSON.stringify(result));
467
+ // log & send data
468
+ }).then((result) => {
469
+ switch (serverType) {
470
+ case "WEBSOCKET":
471
+ this._socketServer.clients.forEach((client) => {
472
+ if (!client.id) {
473
+ client.id = (0, uniqid_1.default)();
474
+ }
475
+ else if (client.id === clientId && WEBSOCKET_STATE_OPEN === client.readyState) {
476
+ if (log) {
477
+ this._log("info", "<= [PUSH|" + clientId + "] " + result);
478
+ }
479
+ client.send(result);
480
+ }
481
+ });
482
+ break;
483
+ case "SOCKETIO":
484
+ if (this._socketServer.sockets.sockets.has(clientId)) {
485
+ const socket = this._socketServer.sockets.sockets.get(clientId);
486
+ if (socket && socket.connected) {
487
+ if (log) {
488
+ this._log("info", "<= [PUSH|" + clientId + "] " + result);
489
+ }
490
+ socket.emit("message", result);
491
+ }
492
+ }
493
+ break;
494
+ default:
495
+ // nothing to do here
496
+ break;
497
+ }
498
+ }).catch((err) => {
499
+ this._log("error", err);
500
+ });
501
+ return this;
502
+ }
503
+ // init / release
504
+ init(...data) {
505
+ return this.checkDescriptor().then(() => {
506
+ return this.checkMediator();
507
+ }).then(() => {
508
+ return this._initWorkSpace(...data);
509
+ }).then(() => {
510
+ this.initialized = true;
511
+ this.emit("initialized", ...data);
512
+ });
513
+ }
514
+ release(...data) {
515
+ return this._releaseWorkSpace(...data).then(() => {
516
+ // can only be released by Orchestrator
517
+ if (this._Descriptor) {
518
+ this._Descriptor = null;
519
+ }
520
+ // can only be released by Orchestrator
521
+ if (this._Mediator) {
522
+ this._Mediator = null;
523
+ }
524
+ this._externalRessourcesDirectory = "";
525
+ this._socketServer = null;
526
+ this.initialized = false;
527
+ this.emit("released", ...data);
528
+ }).then(() => {
529
+ this.removeAllListeners();
530
+ });
531
+ }
532
+ }
533
+ exports.default = Server;
534
+ ;
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.NotFoundError = exports.Server = exports.Orchestrator = exports.MediatorUser = exports.Mediator = exports.DescriptorUser = exports.checkArrayLengthBetweenSync = exports.checkArrayLengthBetween = exports.checkArrayLengthSync = exports.checkArrayLength = exports.checkIntegerBetweenSync = exports.checkIntegerBetween = exports.checkStringLengthBetweenSync = exports.checkStringLengthBetween = exports.checkStringLengthSync = exports.checkStringLength = exports.checkObjectLengthBetweenSync = exports.checkObjectLengthBetween = exports.checkObjectLengthSync = exports.checkObjectLength = exports.checkNumberBetweenSync = exports.checkNumberBetween = exports.checkNonEmptyStringSync = exports.checkNonEmptyString = exports.checkNonEmptyObjectSync = exports.checkNonEmptyObject = exports.checkNonEmptyNumberSync = exports.checkNonEmptyNumber = exports.checkNonEmptyIntegerSync = exports.checkNonEmptyInteger = exports.checkNonEmptyArraySync = exports.checkNonEmptyArray = exports.checkIntegerSync = exports.checkInteger = exports.checkArraySync = exports.checkArray = exports.checkStringSync = exports.checkString = exports.checkObjectSync = exports.checkObject = exports.checkNumberSync = exports.checkNumber = exports.checkFunctionSync = exports.checkFunction = exports.checkBooleanSync = exports.checkBoolean = exports.checkExistsSync = exports.checkExists = void 0;
7
+ // checkers
8
+ // undefined
9
+ const checkExists_1 = require("./checkers/ReferenceError/checkExists");
10
+ Object.defineProperty(exports, "checkExists", { enumerable: true, get: function () { return checkExists_1.checkExists; } });
11
+ Object.defineProperty(exports, "checkExistsSync", { enumerable: true, get: function () { return checkExists_1.checkExistsSync; } });
12
+ // native
13
+ const checkBoolean_1 = require("./checkers/TypeError/checkBoolean");
14
+ Object.defineProperty(exports, "checkBoolean", { enumerable: true, get: function () { return checkBoolean_1.checkBoolean; } });
15
+ Object.defineProperty(exports, "checkBooleanSync", { enumerable: true, get: function () { return checkBoolean_1.checkBooleanSync; } });
16
+ const checkFunction_1 = require("./checkers/TypeError/checkFunction");
17
+ Object.defineProperty(exports, "checkFunction", { enumerable: true, get: function () { return checkFunction_1.checkFunction; } });
18
+ Object.defineProperty(exports, "checkFunctionSync", { enumerable: true, get: function () { return checkFunction_1.checkFunctionSync; } });
19
+ const checkNumber_1 = require("./checkers/TypeError/checkNumber");
20
+ Object.defineProperty(exports, "checkNumber", { enumerable: true, get: function () { return checkNumber_1.checkNumber; } });
21
+ Object.defineProperty(exports, "checkNumberSync", { enumerable: true, get: function () { return checkNumber_1.checkNumberSync; } });
22
+ const checkObject_1 = require("./checkers/TypeError/checkObject");
23
+ Object.defineProperty(exports, "checkObject", { enumerable: true, get: function () { return checkObject_1.checkObject; } });
24
+ Object.defineProperty(exports, "checkObjectSync", { enumerable: true, get: function () { return checkObject_1.checkObjectSync; } });
25
+ const checkString_1 = require("./checkers/TypeError/checkString");
26
+ Object.defineProperty(exports, "checkString", { enumerable: true, get: function () { return checkString_1.checkString; } });
27
+ Object.defineProperty(exports, "checkStringSync", { enumerable: true, get: function () { return checkString_1.checkStringSync; } });
28
+ // abstract
29
+ const checkArray_1 = require("./checkers/TypeError/checkArray");
30
+ Object.defineProperty(exports, "checkArray", { enumerable: true, get: function () { return checkArray_1.checkArray; } });
31
+ Object.defineProperty(exports, "checkArraySync", { enumerable: true, get: function () { return checkArray_1.checkArraySync; } });
32
+ const checkInteger_1 = require("./checkers/TypeError/checkInteger");
33
+ Object.defineProperty(exports, "checkInteger", { enumerable: true, get: function () { return checkInteger_1.checkInteger; } });
34
+ Object.defineProperty(exports, "checkIntegerSync", { enumerable: true, get: function () { return checkInteger_1.checkIntegerSync; } });
35
+ // empty
36
+ const checkNonEmptyArray_1 = require("./checkers/RangeError/checkNonEmptyArray");
37
+ Object.defineProperty(exports, "checkNonEmptyArray", { enumerable: true, get: function () { return checkNonEmptyArray_1.checkNonEmptyArray; } });
38
+ Object.defineProperty(exports, "checkNonEmptyArraySync", { enumerable: true, get: function () { return checkNonEmptyArray_1.checkNonEmptyArraySync; } });
39
+ const checkNonEmptyInteger_1 = require("./checkers/RangeError/checkNonEmptyInteger");
40
+ Object.defineProperty(exports, "checkNonEmptyInteger", { enumerable: true, get: function () { return checkNonEmptyInteger_1.checkNonEmptyInteger; } });
41
+ Object.defineProperty(exports, "checkNonEmptyIntegerSync", { enumerable: true, get: function () { return checkNonEmptyInteger_1.checkNonEmptyIntegerSync; } });
42
+ const checkNonEmptyNumber_1 = require("./checkers/RangeError/checkNonEmptyNumber");
43
+ Object.defineProperty(exports, "checkNonEmptyNumber", { enumerable: true, get: function () { return checkNonEmptyNumber_1.checkNonEmptyNumber; } });
44
+ Object.defineProperty(exports, "checkNonEmptyNumberSync", { enumerable: true, get: function () { return checkNonEmptyNumber_1.checkNonEmptyNumberSync; } });
45
+ const checkNonEmptyObject_1 = require("./checkers/RangeError/checkNonEmptyObject");
46
+ Object.defineProperty(exports, "checkNonEmptyObject", { enumerable: true, get: function () { return checkNonEmptyObject_1.checkNonEmptyObject; } });
47
+ Object.defineProperty(exports, "checkNonEmptyObjectSync", { enumerable: true, get: function () { return checkNonEmptyObject_1.checkNonEmptyObjectSync; } });
48
+ const checkNonEmptyString_1 = require("./checkers/RangeError/checkNonEmptyString");
49
+ Object.defineProperty(exports, "checkNonEmptyString", { enumerable: true, get: function () { return checkNonEmptyString_1.checkNonEmptyString; } });
50
+ Object.defineProperty(exports, "checkNonEmptyStringSync", { enumerable: true, get: function () { return checkNonEmptyString_1.checkNonEmptyStringSync; } });
51
+ // range
52
+ // native
53
+ const checkNumberBetween_1 = require("./checkers/RangeError/checkNumberBetween");
54
+ Object.defineProperty(exports, "checkNumberBetween", { enumerable: true, get: function () { return checkNumberBetween_1.checkNumberBetween; } });
55
+ Object.defineProperty(exports, "checkNumberBetweenSync", { enumerable: true, get: function () { return checkNumberBetween_1.checkNumberBetweenSync; } });
56
+ const checkObjectLength_1 = require("./checkers/RangeError/checkObjectLength");
57
+ Object.defineProperty(exports, "checkObjectLength", { enumerable: true, get: function () { return checkObjectLength_1.checkObjectLength; } });
58
+ Object.defineProperty(exports, "checkObjectLengthSync", { enumerable: true, get: function () { return checkObjectLength_1.checkObjectLengthSync; } });
59
+ const checkObjectLengthBetween_1 = require("./checkers/RangeError/checkObjectLengthBetween");
60
+ Object.defineProperty(exports, "checkObjectLengthBetween", { enumerable: true, get: function () { return checkObjectLengthBetween_1.checkObjectLengthBetween; } });
61
+ Object.defineProperty(exports, "checkObjectLengthBetweenSync", { enumerable: true, get: function () { return checkObjectLengthBetween_1.checkObjectLengthBetweenSync; } });
62
+ const checkStringLength_1 = require("./checkers/RangeError/checkStringLength");
63
+ Object.defineProperty(exports, "checkStringLength", { enumerable: true, get: function () { return checkStringLength_1.checkStringLength; } });
64
+ Object.defineProperty(exports, "checkStringLengthSync", { enumerable: true, get: function () { return checkStringLength_1.checkStringLengthSync; } });
65
+ const checkStringLengthBetween_1 = require("./checkers/RangeError/checkStringLengthBetween");
66
+ Object.defineProperty(exports, "checkStringLengthBetween", { enumerable: true, get: function () { return checkStringLengthBetween_1.checkStringLengthBetween; } });
67
+ Object.defineProperty(exports, "checkStringLengthBetweenSync", { enumerable: true, get: function () { return checkStringLengthBetween_1.checkStringLengthBetweenSync; } });
68
+ // abstract
69
+ const checkIntegerBetween_1 = require("./checkers/RangeError/checkIntegerBetween");
70
+ Object.defineProperty(exports, "checkIntegerBetween", { enumerable: true, get: function () { return checkIntegerBetween_1.checkIntegerBetween; } });
71
+ Object.defineProperty(exports, "checkIntegerBetweenSync", { enumerable: true, get: function () { return checkIntegerBetween_1.checkIntegerBetweenSync; } });
72
+ const checkArrayLength_1 = require("./checkers/RangeError/checkArrayLength");
73
+ Object.defineProperty(exports, "checkArrayLength", { enumerable: true, get: function () { return checkArrayLength_1.checkArrayLength; } });
74
+ Object.defineProperty(exports, "checkArrayLengthSync", { enumerable: true, get: function () { return checkArrayLength_1.checkArrayLengthSync; } });
75
+ const checkArrayLengthBetween_1 = require("./checkers/RangeError/checkArrayLengthBetween");
76
+ Object.defineProperty(exports, "checkArrayLengthBetween", { enumerable: true, get: function () { return checkArrayLengthBetween_1.checkArrayLengthBetween; } });
77
+ Object.defineProperty(exports, "checkArrayLengthBetweenSync", { enumerable: true, get: function () { return checkArrayLengthBetween_1.checkArrayLengthBetweenSync; } });
78
+ // components
79
+ const DescriptorUser_1 = __importDefault(require("./components/DescriptorUser"));
80
+ exports.DescriptorUser = DescriptorUser_1.default;
81
+ const Mediator_1 = __importDefault(require("./components/Mediator"));
82
+ exports.Mediator = Mediator_1.default;
83
+ const MediatorUser_1 = __importDefault(require("./components/MediatorUser"));
84
+ exports.MediatorUser = MediatorUser_1.default;
85
+ const Orchestrator_1 = __importDefault(require("./components/Orchestrator"));
86
+ exports.Orchestrator = Orchestrator_1.default;
87
+ const Server_1 = __importDefault(require("./components/Server"));
88
+ exports.Server = Server_1.default;
89
+ const NotFoundError_1 = __importDefault(require("./components/NotFoundError"));
90
+ exports.NotFoundError = NotFoundError_1.default;