node-pluginsmanager-plugin 4.8.8 → 5.0.2

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