node-pluginsmanager-plugin 6.5.0 → 7.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/LICENSE +13 -13
  2. package/README.md +53 -48
  3. package/lib/@types/socket.io-v2.d.ts +988 -0
  4. package/lib/cjs/checkers/RangeError/checkNonEmptyNumber.d.ts +2 -2
  5. package/lib/cjs/checkers/RangeError/checkNonEmptyObject.d.ts +2 -2
  6. package/lib/cjs/checkers/RangeError/checkNonEmptyString.d.ts +2 -2
  7. package/lib/cjs/checkers/ReferenceError/checkExists.d.ts +2 -2
  8. package/lib/cjs/checkers/TypeError/checkFunction.d.ts +2 -2
  9. package/lib/cjs/checkers/TypeError/checkInteger.d.ts +2 -2
  10. package/lib/cjs/checkers/TypeError/checkNumber.d.ts +2 -2
  11. package/lib/cjs/checkers/TypeError/checkObject.d.ts +2 -2
  12. package/lib/cjs/checkers/TypeError/checkString.d.ts +2 -2
  13. package/lib/cjs/components/DescriptorUser.d.ts +10 -11
  14. package/lib/cjs/components/DescriptorUser.js +51 -40
  15. package/lib/cjs/components/Mediator.d.ts +12 -17
  16. package/lib/cjs/components/Mediator.js +59 -39
  17. package/lib/cjs/components/MediatorUser.d.ts +2 -2
  18. package/lib/cjs/components/MediatorUser.js +12 -5
  19. package/lib/cjs/components/Orchestrator.d.ts +13 -13
  20. package/lib/cjs/components/Orchestrator.js +123 -69
  21. package/lib/cjs/components/Server.d.ts +22 -19
  22. package/lib/cjs/components/Server.js +279 -238
  23. package/lib/cjs/main.cjs +1 -40
  24. package/lib/cjs/main.d.cts +3 -15
  25. package/lib/cjs/openAPITypes.d.ts +5 -0
  26. package/lib/cjs/openAPITypes.js +3 -0
  27. package/lib/cjs/utils/cleanSendedError.d.ts +1 -1
  28. package/lib/cjs/utils/cleanSendedError.js +2 -4
  29. package/lib/cjs/utils/descriptor/extractParams.d.ts +1 -1
  30. package/lib/cjs/utils/descriptor/extractParams.js +1 -1
  31. package/lib/cjs/utils/descriptor/extractPathMethodByOperationId.d.ts +2 -3
  32. package/lib/cjs/utils/descriptor/extractPathMethodByOperationId.js +14 -14
  33. package/lib/cjs/utils/descriptor/extractPattern.d.ts +2 -2
  34. package/lib/cjs/utils/descriptor/extractPattern.js +5 -5
  35. package/lib/cjs/utils/descriptor/extractSchemaType.d.ts +1 -1
  36. package/lib/cjs/utils/descriptor/extractSchemaType.js +13 -8
  37. package/lib/cjs/utils/file/readJSONFile.d.ts +1 -1
  38. package/lib/cjs/utils/request/extractBody.js +9 -5
  39. package/lib/cjs/utils/request/extractCookies.d.ts +1 -1
  40. package/lib/cjs/utils/request/extractCookies.js +6 -6
  41. package/lib/cjs/utils/request/extractIp.d.ts +1 -1
  42. package/lib/cjs/utils/request/extractIp.js +19 -10
  43. package/lib/cjs/utils/request/extractMime.d.ts +1 -4
  44. package/lib/cjs/utils/request/extractMime.js +15 -11
  45. package/lib/cjs/utils/send.d.ts +4 -4
  46. package/lib/cjs/utils/send.js +27 -29
  47. package/lib/cjs/utils/server/getServerTypeFromServer.d.ts +4 -0
  48. package/lib/cjs/utils/server/getServerTypeFromServer.js +23 -0
  49. package/lib/cjs/utils/server/getSocketIOVersionFromServer.d.ts +4 -0
  50. package/lib/cjs/utils/server/getSocketIOVersionFromServer.js +19 -0
  51. package/package.json +101 -97
  52. package/lib/cjs/checkers/RangeError/checkArrayLength.d.ts +0 -2
  53. package/lib/cjs/checkers/RangeError/checkArrayLength.js +0 -23
  54. package/lib/cjs/checkers/RangeError/checkArrayLengthBetween.d.ts +0 -2
  55. package/lib/cjs/checkers/RangeError/checkArrayLengthBetween.js +0 -30
  56. package/lib/cjs/checkers/RangeError/checkIntegerBetween.d.ts +0 -2
  57. package/lib/cjs/checkers/RangeError/checkIntegerBetween.js +0 -29
  58. package/lib/cjs/checkers/RangeError/checkNonEmptyArray.d.ts +0 -2
  59. package/lib/cjs/checkers/RangeError/checkNonEmptyArray.js +0 -19
  60. package/lib/cjs/checkers/RangeError/checkNonEmptyInteger.d.ts +0 -2
  61. package/lib/cjs/checkers/RangeError/checkNonEmptyInteger.js +0 -19
  62. package/lib/cjs/checkers/RangeError/checkNumberBetween.d.ts +0 -2
  63. package/lib/cjs/checkers/RangeError/checkNumberBetween.js +0 -29
  64. package/lib/cjs/checkers/RangeError/checkObjectLength.d.ts +0 -2
  65. package/lib/cjs/checkers/RangeError/checkObjectLength.js +0 -28
  66. package/lib/cjs/checkers/RangeError/checkObjectLengthBetween.d.ts +0 -2
  67. package/lib/cjs/checkers/RangeError/checkObjectLengthBetween.js +0 -33
  68. package/lib/cjs/checkers/RangeError/checkStringLength.d.ts +0 -2
  69. package/lib/cjs/checkers/RangeError/checkStringLength.js +0 -23
  70. package/lib/cjs/checkers/RangeError/checkStringLengthBetween.d.ts +0 -2
  71. package/lib/cjs/checkers/RangeError/checkStringLengthBetween.js +0 -30
  72. package/lib/cjs/checkers/TypeError/checkArray.d.ts +0 -2
  73. package/lib/cjs/checkers/TypeError/checkArray.js +0 -19
  74. package/lib/cjs/checkers/TypeError/checkBoolean.d.ts +0 -2
  75. package/lib/cjs/checkers/TypeError/checkBoolean.js +0 -19
  76. package/lib/cjs/utils/jsonParser.d.ts +0 -1
  77. package/lib/cjs/utils/jsonParser.js +0 -16
@@ -1,9 +1,16 @@
1
1
  "use strict";
2
- // deps
2
+ /*
3
+ eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-dynamic-delete, @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires
4
+ */
5
+ // => @typescript-eslint/no-unused-vars is disabled to allow inheritance with proper signature
6
+ // => @typescript-eslint/no-dynamic-delete is disabled to allow data release
7
+ // => @typescript-eslint/no-require-imports is disabled to allow dynamic Mediator import on plugin load
8
+ // => @typescript-eslint/no-var-requires is disabled for the same reason as @typescript-eslint/no-require-imports
3
9
  var __importDefault = (this && this.__importDefault) || function (mod) {
4
10
  return (mod && mod.__esModule) ? mod : { "default": mod };
5
11
  };
6
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
+ // deps
7
14
  // natives
8
15
  const node_path_1 = require("node:path");
9
16
  // locals
@@ -14,6 +21,31 @@ const checkFile_1 = __importDefault(require("../utils/file/checkFile"));
14
21
  const readJSONFile_1 = __importDefault(require("../utils/file/readJSONFile"));
15
22
  // module
16
23
  class Orchestrator extends MediatorUser_1.default {
24
+ // attributes
25
+ // protected
26
+ _Server;
27
+ _socketServer;
28
+ _checkParameters;
29
+ _checkResponse;
30
+ // params
31
+ _packageFile;
32
+ _descriptorFile;
33
+ _mediatorFile;
34
+ _serverFile;
35
+ _extended;
36
+ // public
37
+ enabled;
38
+ // native
39
+ authors;
40
+ description;
41
+ dependencies;
42
+ devDependencies;
43
+ engines;
44
+ license;
45
+ main;
46
+ name;
47
+ scripts;
48
+ version;
17
49
  // constructor
18
50
  constructor(options) {
19
51
  super(options);
@@ -22,11 +54,23 @@ class Orchestrator extends MediatorUser_1.default {
22
54
  this._socketServer = null; // to delay socketMiddleware if necessary
23
55
  this._checkParameters = true; // to delay checkParameters if necessary
24
56
  this._checkResponse = true; // to delay checkResponse if necessary
25
- // params
26
- this._packageFile = options && "string" === typeof options.packageFile ? options.packageFile : "";
27
- this._descriptorFile = options && "string" === typeof options.descriptorFile ? options.descriptorFile : "";
28
- this._mediatorFile = options && "string" === typeof options.mediatorFile ? options.mediatorFile : "";
29
- this._serverFile = options && "string" === typeof options.serverFile ? options.serverFile : "";
57
+ // mandatory props
58
+ if ("string" !== typeof options.packageFile) {
59
+ throw new ReferenceError("\"options.packageFile\" must be a string");
60
+ }
61
+ if ("string" !== typeof options.descriptorFile) {
62
+ throw new ReferenceError("\"options.descriptorFile\" must be a string");
63
+ }
64
+ if ("string" !== typeof options.mediatorFile) {
65
+ throw new ReferenceError("\"options.mediatorFile\" must be a string");
66
+ }
67
+ if ("string" !== typeof options.serverFile) {
68
+ throw new ReferenceError("\"options.serverFile\" must be a string");
69
+ }
70
+ this._packageFile = options.packageFile;
71
+ this._descriptorFile = options.descriptorFile;
72
+ this._mediatorFile = options.mediatorFile;
73
+ this._serverFile = options.serverFile;
30
74
  // extended
31
75
  this._extended = [];
32
76
  // public
@@ -121,7 +165,7 @@ class Orchestrator extends MediatorUser_1.default {
121
165
  this.checkServer().then(() => {
122
166
  this._Server.disableCors();
123
167
  }).catch((err) => {
124
- this._emitEventGenericForTSPurposeDONOTUSE("error", err);
168
+ this.emit("error", err);
125
169
  });
126
170
  return this;
127
171
  }
@@ -129,24 +173,24 @@ class Orchestrator extends MediatorUser_1.default {
129
173
  this.checkServer().then(() => {
130
174
  this._Server.enableCors();
131
175
  }).catch((err) => {
132
- this._emitEventGenericForTSPurposeDONOTUSE("error", err);
176
+ this.emit("error", err);
133
177
  });
134
178
  return this;
135
179
  }
136
180
  appMiddleware(req, res, next) {
137
181
  if (!this.enabled) {
138
182
  next();
183
+ return;
139
184
  }
140
185
  else if (!this.initialized) {
141
186
  next();
187
+ return;
142
188
  }
143
- else {
144
- this.checkServer().then(() => {
145
- this._Server.appMiddleware(req, res, next);
146
- }).catch(() => {
147
- next();
148
- });
149
- }
189
+ this.checkServer().then(() => {
190
+ this._Server.appMiddleware(req, res, next);
191
+ }).catch(() => {
192
+ next();
193
+ });
150
194
  }
151
195
  socketMiddleware(server) {
152
196
  if (!this.enabled) {
@@ -163,7 +207,7 @@ class Orchestrator extends MediatorUser_1.default {
163
207
  // load / destroy
164
208
  load(...data) {
165
209
  return this.checkFiles().then(() => {
166
- return (0, readJSONFile_1.default)((0, node_path_1.join)(__dirname, "..", "..", "..", "package.json"));
210
+ return (0, readJSONFile_1.default)((0, node_path_1.join)(__dirname, "..", "..", "..", "package.json")); // enforce current core engine version
167
211
  }).then(({ engines }) => {
168
212
  // native
169
213
  this.authors = [];
@@ -178,32 +222,39 @@ class Orchestrator extends MediatorUser_1.default {
178
222
  this.version = "";
179
223
  return (0, readJSONFile_1.default)(this._packageFile);
180
224
  // formate authors
181
- }).then((data) => {
182
- if (data.authors) {
183
- this.authors = data.authors;
184
- delete data.authors;
185
- if (data.author) {
186
- if (!this.authors.includes(data.author)) {
187
- this.authors.push(data.author);
225
+ }).then((packageData) => {
226
+ if ("undefined" !== typeof packageData.authors) {
227
+ if (Array.isArray(packageData.authors)) {
228
+ this.authors = packageData.authors;
229
+ delete packageData.authors;
230
+ if ("string" === typeof packageData.author) {
231
+ const { author } = packageData;
232
+ if (!this.authors.includes(author)) {
233
+ this.authors.push(author);
234
+ }
235
+ delete packageData.author;
188
236
  }
189
- delete data.author;
190
237
  }
238
+ delete packageData.authors;
191
239
  }
192
- else if (data.author) {
193
- this.authors = [data.author];
194
- delete data.author;
240
+ else if ("string" === typeof packageData.author) {
241
+ this.authors = [packageData.author];
242
+ delete packageData.author;
195
243
  }
196
- return Promise.resolve(data);
244
+ return packageData;
197
245
  // formate other data
198
- }).then((data) => {
199
- const self = this;
200
- Object.keys(data).forEach((key) => {
201
- if ("function" !== typeof self[key]) {
202
- if ("undefined" === typeof self[key]) {
203
- this._extended.push(key);
204
- }
205
- self[key] = data[key];
246
+ }).then((packageData) => {
247
+ Object.keys(packageData).forEach((key) => {
248
+ if ("__proto__" === key || "constructor" === key || "prototype" === key) {
249
+ return;
250
+ }
251
+ if ("function" === typeof this[key]) {
252
+ return;
253
+ }
254
+ if ("undefined" === typeof this[key]) {
255
+ this._extended.push(key);
206
256
  }
257
+ this[key] = packageData[key];
207
258
  });
208
259
  });
209
260
  }
@@ -245,32 +296,35 @@ class Orchestrator extends MediatorUser_1.default {
245
296
  }).then(() => {
246
297
  return this.isEnable();
247
298
  }).then(() => {
248
- return !this.enabled ? Promise.resolve() : Promise.resolve().then(() => {
249
- const SwaggerParser = require("@apidevtools/swagger-parser");
250
- // generate descriptor
251
- return SwaggerParser.bundle(this._descriptorFile).then((bundledDescriptor) => {
252
- // force validate because of stupid malformatted references
253
- return SwaggerParser.validate(bundledDescriptor).then((validatedDescriptor) => {
254
- this._Descriptor = validatedDescriptor;
255
- if (!this._Descriptor.servers) {
256
- this._Descriptor.servers = [];
257
- }
258
- });
259
- }).then(() => {
260
- return this.checkDescriptor().catch((err) => {
261
- this._Descriptor = null;
262
- return Promise.reject(err);
263
- });
264
- // compare title to package name
265
- }).then(() => {
266
- return this._Descriptor.info.title !== this.name ? Promise.reject(new Error("The descriptor's title (\"" + this._Descriptor.info.title + "\") "
267
- + "is not equals to "
268
- + "the package's name (\"" + this.name + "\")")) : Promise.resolve();
299
+ if (!this.enabled) {
300
+ return Promise.resolve();
301
+ }
302
+ const SwaggerParser = require("@apidevtools/swagger-parser");
303
+ // generate descriptor
304
+ return SwaggerParser.bundle(this._descriptorFile).then((bundledDescriptor) => {
305
+ // force validate because of stupid malformatted references
306
+ return SwaggerParser.validate(bundledDescriptor).then((validatedDescriptor) => {
307
+ this._Descriptor = validatedDescriptor;
308
+ this._Descriptor.servers ??= [];
309
+ });
310
+ }).then(() => {
311
+ return this.checkDescriptor().then(() => {
312
+ const { info } = this._Descriptor;
313
+ // check title
314
+ if (info.title !== this.name) {
315
+ throw new Error("The descriptor's title (\"" + info.title + "\") "
316
+ + "is not equals to "
317
+ + "the package's name (\"" + this.name + "\")");
318
+ }
269
319
  // compare version to package version
270
- }).then(() => {
271
- return this._Descriptor.info.version !== this.version ? Promise.reject(new Error("The descriptor's version (\"" + this._Descriptor.info.version + "\") "
272
- + "is not equals to "
273
- + "the package's version (\"" + this.version + "\")")) : Promise.resolve();
320
+ if (info.version !== this.version) {
321
+ throw new Error("The descriptor's version (\"" + info.version + "\") "
322
+ + "is not equals to "
323
+ + "the package's version (\"" + this.version + "\")");
324
+ }
325
+ }).catch((err) => {
326
+ this._Descriptor = null;
327
+ return Promise.reject(err);
274
328
  });
275
329
  // create Mediator
276
330
  }).then(() => {
@@ -289,13 +343,13 @@ class Orchestrator extends MediatorUser_1.default {
289
343
  }
290
344
  }
291
345
  catch (e) {
292
- reject(e);
346
+ reject(e instanceof Error ? e : new Error(String(e)));
293
347
  }
294
348
  // init
295
349
  }).then((PluginMediator) => {
296
350
  this._Mediator = new PluginMediator({
297
351
  "descriptor": this._Descriptor,
298
- "externalRessourcesDirectory": this._externalRessourcesDirectory,
352
+ "externalResourcesDirectory": this._externalResourcesDirectory,
299
353
  "logger": this._Logger
300
354
  });
301
355
  // check
@@ -303,7 +357,7 @@ class Orchestrator extends MediatorUser_1.default {
303
357
  return this.checkMediator().then(() => {
304
358
  // intercept errors to avoid non-catched ones
305
359
  this._Mediator.on("error", (err) => {
306
- this._emitEventGenericForTSPurposeDONOTUSE("error", err);
360
+ this.emit("error", err);
307
361
  });
308
362
  });
309
363
  });
@@ -324,14 +378,14 @@ class Orchestrator extends MediatorUser_1.default {
324
378
  }
325
379
  }
326
380
  catch (e) {
327
- reject(e);
381
+ reject(e instanceof Error ? e : new Error(String(e)));
328
382
  }
329
383
  // init
330
384
  }).then((PluginServer) => {
331
385
  this._Server = new PluginServer({
332
386
  "descriptor": this._Descriptor,
333
387
  "mediator": this._Mediator,
334
- "externalRessourcesDirectory": this._externalRessourcesDirectory,
388
+ "externalResourcesDirectory": this._externalResourcesDirectory,
335
389
  "logger": this._Logger
336
390
  });
337
391
  // check
@@ -339,7 +393,7 @@ class Orchestrator extends MediatorUser_1.default {
339
393
  return this.checkServer().then(() => {
340
394
  // intercept errors to avoid non-catched ones
341
395
  this._Server.on("error", (err) => {
342
- this._emitEventGenericForTSPurposeDONOTUSE("error", err);
396
+ this.emit("error", err);
343
397
  });
344
398
  });
345
399
  });
@@ -363,7 +417,7 @@ class Orchestrator extends MediatorUser_1.default {
363
417
  return this._Mediator.init(...data);
364
418
  }).then(() => {
365
419
  this.initialized = true;
366
- this._emitEventGenericForTSPurposeDONOTUSE("initialized", ...data);
420
+ this.emit("initialized", ...data);
367
421
  });
368
422
  });
369
423
  }
@@ -381,7 +435,7 @@ class Orchestrator extends MediatorUser_1.default {
381
435
  }).then(() => {
382
436
  this._Descriptor = null;
383
437
  this.initialized = false;
384
- this._emitEventGenericForTSPurposeDONOTUSE("released", ...data);
438
+ this.emit("released", ...data);
385
439
  });
386
440
  }
387
441
  // write
@@ -2,36 +2,39 @@ import MediatorUser, { type iMediatorUserOptions } from "./MediatorUser";
2
2
  import type { IncomingMessage, ServerResponse } from "node:http";
3
3
  import type { Server as WebSocketServer } from "ws";
4
4
  import type { Server as SocketIOServer } from "socket.io";
5
+ import type { Server as SocketIOServerV2 } from "../../@types/socket.io-v2";
6
+ import type { tMethod } from "../openAPITypes";
5
7
  import type { tEventMap, iEventsMinimal } from "./DescriptorUser";
6
8
  export interface iClient {
7
9
  "id": string;
8
10
  "status": "CONNECTED" | "DISCONNECTED";
9
11
  }
10
12
  export interface iIncomingMessage extends IncomingMessage {
11
- "method": string;
13
+ "method": tMethod;
12
14
  "pattern": string;
13
15
  "validatedIp": string;
14
- "params": Record<string, any>;
15
- "query": Record<string, any>;
16
- "headers": Record<string, any>;
17
- "header"?: Record<string, any>;
18
- "cookies": Record<string, any>;
19
- "cookie"?: Record<string, any>;
20
- "body": string;
16
+ "params": Record<string, string | number | boolean>;
17
+ "query": Record<string, unknown>;
18
+ "header"?: Record<string, unknown>;
19
+ "cookies": Record<string, unknown>;
20
+ "cookie"?: Record<string, unknown>;
21
+ "body": unknown;
22
+ "ip": string;
21
23
  }
22
- export interface iServerResponse extends ServerResponse {
24
+ export interface iFormatedServerResponseForValidation extends ServerResponse {
23
25
  "body": string;
24
- "headers": Record<string, any>;
26
+ "headers": Record<string, unknown>;
25
27
  }
26
28
  export default class Server<T extends tEventMap<T> = iEventsMinimal> extends MediatorUser<T> {
27
- protected _socketServer: WebSocketServer | SocketIOServer | null;
29
+ protected _socketServer: WebSocketServer | SocketIOServer | SocketIOServerV2 | null;
28
30
  protected _checkParameters: boolean;
29
31
  protected _checkResponse: boolean;
30
32
  protected _cors: boolean;
31
33
  constructor(opt: iMediatorUserOptions);
32
- protected _serverType(): "NO_SERVER" | "WEBSOCKET" | "SOCKETIO" | "UNKNOWN";
34
+ protected _getServerType(): "NO_SERVER" | "WEBSOCKET" | "SOCKETIO" | "UNKNOWN";
35
+ protected _getSocketIOVersion(): "NO_SERVER" | "V2" | "V3-V4" | "UNKNOWN";
33
36
  protected _getUsableSocketIOClient(clientId: string): {
34
- "emit": (event: string, data: any) => void;
37
+ "emit": (event: string, ...data: unknown[]) => void;
35
38
  } | undefined;
36
39
  disableCheckParameters(): this;
37
40
  enableCheckParameters(): this;
@@ -39,11 +42,11 @@ export default class Server<T extends tEventMap<T> = iEventsMinimal> extends Med
39
42
  enableCheckResponse(): this;
40
43
  disableCors(): this;
41
44
  enableCors(): this;
42
- appMiddleware(_req: IncomingMessage, res: iServerResponse, next: (err?: Error) => void): void;
43
- socketMiddleware(socketServer: WebSocketServer | SocketIOServer): void;
44
- push(command: string, data?: any, log?: boolean): this;
45
+ appMiddleware(_req: IncomingMessage, res: ServerResponse, next: (err?: Error) => void): void;
46
+ socketMiddleware(socketServer: WebSocketServer | SocketIOServer | SocketIOServerV2): void;
47
+ push(command: string, data?: unknown, log?: boolean): this;
45
48
  getClients(): iClient[];
46
- pushClient(clientId: string, command: string, data?: any, log?: boolean): this;
47
- init(...data: any): Promise<void>;
48
- release(...data: any): Promise<void>;
49
+ pushClient(clientId: string, command: string, data?: unknown, log?: boolean): this;
50
+ init(...data: unknown[]): Promise<void>;
51
+ release(...data: unknown[]): Promise<void>;
49
52
  }