zyket 1.0.12 → 1.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/cli.js CHANGED
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zyket",
3
- "version": "1.0.12",
3
+ "version": "1.0.13",
4
4
  "main": "index.js",
5
5
  "scripts": {
6
6
  "test": "echo \"Error: no test specified\" && exit 1"
@@ -14,7 +14,9 @@
14
14
  "description": "",
15
15
  "dependencies": {
16
16
  "colors": "^1.4.0",
17
+ "cors": "^2.8.5",
17
18
  "dotenv": "^16.4.7",
19
+ "express": "^5.1.0",
18
20
  "fast-glob": "^3.3.3",
19
21
  "mariadb": "^3.4.0",
20
22
  "minio": "^8.0.5",
@@ -0,0 +1,32 @@
1
+ const http = require('http')
2
+
3
+ module.exports = class HTTPServer {
4
+ #server
5
+ #port
6
+
7
+ constructor ({ port }) {
8
+ if (!port || typeof port !== 'number' || port < 1) {
9
+ throw new Error('port must be a positive number')
10
+ }
11
+
12
+ this.#port = port
13
+ this.#server = http.createServer()
14
+ }
15
+
16
+ start () {
17
+ if (this.isStarted) {
18
+ throw new Error('Server is already started. Review your code')
19
+ }
20
+ console.log(`HTTP Server listening on port ${this.#port}`)
21
+
22
+ this.#server.listen(this.#port, () => {})
23
+ }
24
+
25
+ get server () {
26
+ return this.#server
27
+ }
28
+
29
+ get isStarted () {
30
+ return this.#server?.listening === true
31
+ }
32
+ }
@@ -2,15 +2,16 @@ const {ContainerBuilder} = require("node-dependency-injection");
2
2
  const EnvManager = require("../utils/EnvManager");
3
3
  const fs = require("fs");
4
4
  const path = require("path");
5
+ const HTTPServer = require("./HTTPServer");
5
6
 
6
7
  module.exports = class Kernel {
7
8
  container;
8
9
  #services;
9
10
  #onSocketConnection;
11
+ #httpServer;
10
12
 
11
13
  constructor({
12
- services = [],
13
- onConnection = () => { },
14
+ services = []
14
15
  } = { }) {
15
16
  this.container = new ContainerBuilder();
16
17
  this.#services = services;
@@ -24,14 +25,20 @@ module.exports = class Kernel {
24
25
  async boot(clearConsole = true, secretsPath = `${process.cwd()}/.env`) {
25
26
  EnvManager.load(secretsPath, false);
26
27
  if(clearConsole) process.stdout.write("\u001b[2J\u001b[0;0H");
28
+ this.#httpServer = new HTTPServer({ port: Number(process.env.PORT) || 3000 });
29
+ await this.#httpServer.start();
30
+
27
31
  const services = require("../services");
28
32
 
29
33
  await this.#registerServices(services);
30
34
  await this.#registerServices(this.#services);
31
35
 
36
+
32
37
  for (const [name] of [...services, ...this.#services]) {
33
38
  this.container.get('logger').debug(`Booting service ${name}`);
34
- await this.container.get(name).boot();
39
+ await this.container.get(name).boot({
40
+ httpServer: this.#httpServer.server,
41
+ });
35
42
  }
36
43
  }
37
44
 
@@ -0,0 +1,33 @@
1
+ const Service = require("../Service");
2
+ const express = require("express");
3
+ const cors = require("cors");
4
+
5
+
6
+ module.exports = class Express extends Service {
7
+ #container;
8
+ #app;
9
+ #httpServer;
10
+
11
+ constructor(container) {
12
+ super("express");
13
+ this.#container = container;
14
+ }
15
+
16
+ async boot({ httpServer } = {}) {
17
+ if (!httpServer) {
18
+ throw new Error("HTTP server is not available");
19
+ }
20
+
21
+ this.#httpServer = httpServer;
22
+ this.#app = express();
23
+
24
+ this.#app.use(express.json({ limit: `100mb` }))
25
+ this.#app.use(cors({
26
+ origin: '*'
27
+ }))
28
+
29
+ this.#httpServer.on("request", this.#app);
30
+
31
+ this.#container.get('logger').info(`Express is running on http://localhost:${httpServer.address().port}`);
32
+ }
33
+ }
@@ -0,0 +1,2 @@
1
+ export default class Middleware {
2
+ }
@@ -0,0 +1,2 @@
1
+ export default class Route {
2
+ }
@@ -0,0 +1,3 @@
1
+ module.exports = {
2
+ Express: require("./Express"),
3
+ }
@@ -2,6 +2,7 @@ const Database = require("./database");
2
2
  const Cache = require("./cache");
3
3
  const S3 = require("./s3");
4
4
  const { SocketIO } = require("./socketio");
5
+ const { Express } = require("./express");
5
6
 
6
7
  module.exports = [
7
8
  ["logger", require("./logger"), ["@service_container", process.env.LOG_DIRECTORY || `${process.cwd()}/logs`, process.env.DEBUG === "true"]],
@@ -9,5 +10,6 @@ module.exports = [
9
10
  process.env.DATABASE_URL ? ["database", Database, ["@service_container", process.env.DATABASE_URL]] : null,
10
11
  process.env.CACHE_URL ? ["cache", Cache, ["@service_container", process.env.CACHE_URL]] : null,
11
12
  (process.env.S3_ENDPOINT && process.env.S3_ACCESS_KEY && process.env.S3_SECRET_KEY) ? ["s3", S3, ["@service_container", process.env.S3_ENDPOINT, process.env.S3_PORT, process.env.S3_USE_SSL === "true", process.env.S3_ACCESS_KEY, process.env.S3_SECRET_KEY]] : null,
12
- ["socketio", SocketIO, ["@service_container", process.env.PORT || 3000]],
13
+ ["socketio", SocketIO, ["@service_container"]],
14
+ ["express", Express, ["@service_container"]]
13
15
  ].filter(Boolean);
@@ -8,18 +8,16 @@ const Middleware = require("./Middleware");
8
8
 
9
9
 
10
10
  module.exports = class SocketIO extends Service {
11
- port;
12
11
  #container;
13
12
  io;
14
13
  middlewares = {};
15
14
 
16
- constructor(container, port, onConnection = () => { }) {
15
+ constructor(container) {
17
16
  super("socketio");
18
- this.port = port || 3000;
19
17
  this.#container = container;
20
18
  }
21
19
 
22
- async boot() {
20
+ async boot({ httpServer } = {}) {
23
21
  const middlewares = await this.#loadMiddlewaresFromFolder(path.join(process.cwd(), "src", "middlewares"));
24
22
  for (const middleware of middlewares) {
25
23
  this.middlewares[middleware.name] = middleware;
@@ -59,8 +57,8 @@ module.exports = class SocketIO extends Service {
59
57
  });
60
58
  });
61
59
 
62
- this.io.listen(this.port);
63
- this.#container.get('logger').info(`Socket.IO is running on port ws://localhost:${this.port}`);
60
+ this.io.listen(httpServer);
61
+ this.#container.get('logger').info(`Socket.IO is running on ws://localhost:${httpServer.address().port}`);
64
62
  }
65
63
 
66
64
  async #loadConnectionHandler() {