zyket 1.2.11 → 1.2.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.
Files changed (74) hide show
  1. package/.github/workflows/publish.yml +37 -37
  2. package/README.md +279 -279
  3. package/bin/cli.js +201 -201
  4. package/index.js +32 -32
  5. package/package.json +54 -50
  6. package/src/Middleware.js +3 -3
  7. package/src/extensions/Extension.js +10 -10
  8. package/src/extensions/bullboard/index.js +38 -38
  9. package/src/extensions/interactive-storage/index.js +162 -162
  10. package/src/extensions/interactive-storage/middlewares/MulterMiddleware.js +31 -31
  11. package/src/extensions/interactive-storage/routes/browse.js +31 -31
  12. package/src/extensions/interactive-storage/routes/create-folder.js +37 -37
  13. package/src/extensions/interactive-storage/routes/delete-folder.js +57 -57
  14. package/src/extensions/interactive-storage/routes/delete.js +41 -41
  15. package/src/extensions/interactive-storage/routes/download.js +47 -47
  16. package/src/extensions/interactive-storage/routes/info.js +37 -37
  17. package/src/extensions/interactive-storage/routes/upload.js +46 -46
  18. package/src/kernel/HTTPServer.js +31 -31
  19. package/src/kernel/index.js +78 -78
  20. package/src/services/Service.js +10 -10
  21. package/src/services/auth/auth.js +7 -7
  22. package/src/services/auth/index.js +199 -199
  23. package/src/services/bullmq/Worker.js +7 -7
  24. package/src/services/bullmq/index.js +92 -92
  25. package/src/services/cache/index.js +96 -96
  26. package/src/services/database/index.js +127 -127
  27. package/src/services/events/Event.js +6 -6
  28. package/src/services/events/index.js +59 -59
  29. package/src/services/express/Express.js +280 -248
  30. package/src/services/express/Middleware.js +7 -7
  31. package/src/services/express/RedirectResponse.js +8 -8
  32. package/src/services/express/Route.js +6 -6
  33. package/src/services/express/index.js +4 -4
  34. package/src/services/index.js +30 -29
  35. package/src/services/logger/index.js +84 -80
  36. package/src/services/s3/index.js +82 -82
  37. package/src/services/scheduler/Schedule.js +6 -6
  38. package/src/services/scheduler/index.js +47 -47
  39. package/src/services/socketio/Guard.js +10 -10
  40. package/src/services/socketio/Handler.js +10 -10
  41. package/src/services/socketio/SocketIO.js +159 -132
  42. package/src/services/socketio/index.js +4 -4
  43. package/src/services/template-manager/index.js +73 -73
  44. package/src/services/vite/builder.js +29 -0
  45. package/src/services/vite/index.js +23 -1
  46. package/src/templates/default/config/cors.js +4 -4
  47. package/src/templates/default/config/swagger.js +15 -15
  48. package/src/templates/default/frontend/main.jsx +15 -15
  49. package/src/templates/default/frontend/src/hooks/useAuth.jsx +51 -51
  50. package/src/templates/default/frontend/src/hooks/useLayout.jsx +18 -18
  51. package/src/templates/default/frontend/src/layouts/auth/index.jsx +45 -45
  52. package/src/templates/default/frontend/src/layouts/auth/routes.js +17 -17
  53. package/src/templates/default/frontend/src/layouts/landing/index.jsx +61 -61
  54. package/src/templates/default/frontend/src/layouts/landing/routes.js +10 -10
  55. package/src/templates/default/frontend/src/layouts/panel/index.jsx +115 -115
  56. package/src/templates/default/frontend/src/layouts/panel/routes.js +10 -10
  57. package/src/templates/default/frontend/src/middlewares/LoggedMiddleware.jsx +21 -21
  58. package/src/templates/default/frontend/src/middlewares/NotLoggedMiddleware.jsx +14 -14
  59. package/src/templates/default/frontend/src/store/index.jsx +5 -5
  60. package/src/templates/default/frontend/src/store/storeAuth.jsx +14 -14
  61. package/src/templates/default/frontend/src/views/auth/index.jsx +4 -4
  62. package/src/templates/default/frontend/src/views/auth/register/index.jsx +4 -4
  63. package/src/templates/default/frontend/src/views/landing/index.jsx +4 -4
  64. package/src/templates/default/frontend/src/views/panel/dashboard/index.jsx +4 -4
  65. package/src/templates/default/frontend/styles.css +1 -1
  66. package/src/templates/default/src/guards/default.js +6 -6
  67. package/src/templates/default/src/handlers/connection.js +6 -6
  68. package/src/templates/default/src/handlers/message.js +8 -8
  69. package/src/templates/default/src/middlewares/default.js +7 -7
  70. package/src/templates/default/src/routes/[test]/message.js +26 -26
  71. package/src/templates/default/src/routes/index.js +22 -22
  72. package/src/templates/default/src/services/auth/auth.js +7 -7
  73. package/src/templates/default/src/services/auth/index.js +32 -32
  74. package/src/utils/EnvManager.js +66 -65
@@ -1,11 +1,11 @@
1
- import PanelDashboardView from "../../views/panel/dashboard";
2
- import LoggedMiddleware from "../../middlewares/LoggedMiddleware";
3
-
4
- export default [
5
- {
6
- name: "Panel Dashboard",
7
- path: "/dashboard",
8
- component: PanelDashboardView,
9
- middlewares: [LoggedMiddleware],
10
- }
1
+ import PanelDashboardView from "../../views/panel/dashboard";
2
+ import LoggedMiddleware from "../../middlewares/LoggedMiddleware";
3
+
4
+ export default [
5
+ {
6
+ name: "Panel Dashboard",
7
+ path: "/dashboard",
8
+ component: PanelDashboardView,
9
+ middlewares: [LoggedMiddleware],
10
+ }
11
11
  ]
@@ -1,21 +1,21 @@
1
- import PropTypes from "prop-types";
2
- import { Navigate } from "react-router-dom";
3
- import useAuth from "../hooks/useAuth";
4
-
5
- export default function LoggedMiddleware({
6
- children
7
- }) {
8
- const { user, isPending } = useAuth();
9
-
10
- if (isPending) return null;
11
- if (!user) return <Navigate to={`/auth/login`} />; // Change this to your desired login route
12
-
13
- return children;
14
- }
15
-
16
- LoggedMiddleware.propTypes = {
17
- children: PropTypes.node.isRequired,
18
- roles: PropTypes.arrayOf(PropTypes.string),
19
- loginRoute: PropTypes.string,
20
- forbiddenRoute: PropTypes.string,
21
- };
1
+ import PropTypes from "prop-types";
2
+ import { Navigate } from "react-router-dom";
3
+ import useAuth from "../hooks/useAuth";
4
+
5
+ export default function LoggedMiddleware({
6
+ children
7
+ }) {
8
+ const { user, isPending } = useAuth();
9
+
10
+ if (isPending) return null;
11
+ if (!user) return <Navigate to={`/auth/login`} />; // Change this to your desired login route
12
+
13
+ return children;
14
+ }
15
+
16
+ LoggedMiddleware.propTypes = {
17
+ children: PropTypes.node.isRequired,
18
+ roles: PropTypes.arrayOf(PropTypes.string),
19
+ loginRoute: PropTypes.string,
20
+ forbiddenRoute: PropTypes.string,
21
+ };
@@ -1,15 +1,15 @@
1
- import PropTypes from 'prop-types';
2
- import { Navigate } from 'react-router-dom';
3
- import useAuth from '../hooks/useAuth';
4
-
5
- export default function NotLoggedMiddleware ({ children }) {
6
- const { user, isPending } = useAuth();
7
-
8
- if(isPending) return null;
9
- if(user) return <Navigate to={`/panel`} />; // Change this to your desired home route for logged in users
10
- return children;
11
- }
12
-
13
- NotLoggedMiddleware.propTypes = {
14
- children: PropTypes.node.isRequired
1
+ import PropTypes from 'prop-types';
2
+ import { Navigate } from 'react-router-dom';
3
+ import useAuth from '../hooks/useAuth';
4
+
5
+ export default function NotLoggedMiddleware ({ children }) {
6
+ const { user, isPending } = useAuth();
7
+
8
+ if(isPending) return null;
9
+ if(user) return <Navigate to={`/panel`} />; // Change this to your desired home route for logged in users
10
+ return children;
11
+ }
12
+
13
+ NotLoggedMiddleware.propTypes = {
14
+ children: PropTypes.node.isRequired
15
15
  };
@@ -1,5 +1,5 @@
1
- import { useStoreAuth } from './storeAuth';
2
-
3
- export { useStoreAuth };
4
-
5
-
1
+ import { useStoreAuth } from './storeAuth';
2
+
3
+ export { useStoreAuth };
4
+
5
+
@@ -1,14 +1,14 @@
1
- import { create } from "zustand";
2
- import { createAuthClient } from "better-auth/react";
3
- import { adminClient } from "better-auth/client/plugins"
4
-
5
- export const useStoreAuth = create((set) => ({
6
- client: createAuthClient({
7
- plugins: [
8
- adminClient()
9
- ],
10
- baseURL: `${import.meta.env.VITE_API_BASE}/api/auth/`,
11
- }),
12
-
13
- setClient: (client) => set({ client }),
14
- }));
1
+ import { create } from "zustand";
2
+ import { createAuthClient } from "better-auth/react";
3
+ import { adminClient } from "better-auth/client/plugins"
4
+
5
+ export const useStoreAuth = create((set) => ({
6
+ client: createAuthClient({
7
+ plugins: [
8
+ adminClient()
9
+ ],
10
+ baseURL: `${import.meta.env.VITE_API_BASE}/api/auth/`,
11
+ }),
12
+
13
+ setClient: (client) => set({ client }),
14
+ }));
@@ -1,5 +1,5 @@
1
- export default function AuthView() {
2
- return (<div>
3
- Auth View
4
- </div>);
1
+ export default function AuthView() {
2
+ return (<div>
3
+ Auth View
4
+ </div>);
5
5
  }
@@ -1,5 +1,5 @@
1
- export default function AuthRegisterView() {
2
- return (<div>
3
- Auth Register View
4
- </div>);
1
+ export default function AuthRegisterView() {
2
+ return (<div>
3
+ Auth Register View
4
+ </div>);
5
5
  }
@@ -1,5 +1,5 @@
1
- export default function LandingView() {
2
- return (<div>
3
- Landing View
4
- </div>);
1
+ export default function LandingView() {
2
+ return (<div>
3
+ Landing View
4
+ </div>);
5
5
  }
@@ -1,5 +1,5 @@
1
- export default function PanelDashboardView() {
2
- return (<div>
3
- Panel dashboard View
4
- </div>);
1
+ export default function PanelDashboardView() {
2
+ return (<div>
3
+ Panel dashboard View
4
+ </div>);
5
5
  }
@@ -1 +1 @@
1
- @import "tailwindcss";
1
+ @import "tailwindcss";
@@ -1,7 +1,7 @@
1
- const { Guard } = require("zyket");
2
-
3
- module.exports = class DefaultGuard extends Guard {
4
- async handle({ container, socket, io }) {
5
- container.get("logger").info("Default guard");
6
- }
1
+ const { Guard } = require("zyket");
2
+
3
+ module.exports = class DefaultGuard extends Guard {
4
+ async handle({ container, socket, io }) {
5
+ container.get("logger").info("Default guard");
6
+ }
7
7
  };
@@ -1,7 +1,7 @@
1
- const { Handler } = require("zyket");
2
-
3
- module.exports = class ConnectionHandler extends Handler {
4
- async handle({ container, socket, io }) {
5
- container.get("logger").info("New connection");
6
- }
1
+ const { Handler } = require("zyket");
2
+
3
+ module.exports = class ConnectionHandler extends Handler {
4
+ async handle({ container, socket, io }) {
5
+ container.get("logger").info("New connection");
6
+ }
7
7
  };
@@ -1,9 +1,9 @@
1
- const { Handler } = require("zyket");
2
-
3
- module.exports = class MessageHandler extends Handler {
4
- guards = ["default"];
5
-
6
- async handle({ container, socket, data, io }) {
7
- container.get("logger").info("Message handler");
8
- }
1
+ const { Handler } = require("zyket");
2
+
3
+ module.exports = class MessageHandler extends Handler {
4
+ guards = ["default"];
5
+
6
+ async handle({ container, socket, data, io }) {
7
+ container.get("logger").info("Message handler");
8
+ }
9
9
  };
@@ -1,8 +1,8 @@
1
- const { Middleware } = require("zyket");
2
-
3
- module.exports = class DefaultMiddleware extends Middleware {
4
- async handle({ container, request, response, next }) {
5
- container.get("logger").info("Default middleware");
6
- next();
7
- }
1
+ const { Middleware } = require("zyket");
2
+
3
+ module.exports = class DefaultMiddleware extends Middleware {
4
+ async handle({ container, request, response, next }) {
5
+ container.get("logger").info("Default middleware");
6
+ next();
7
+ }
8
8
  };
@@ -1,27 +1,27 @@
1
- const { Route } = require("zyket");
2
- const DefaultMiddleware = require("../../middlewares/default");
3
-
4
- module.exports = class DefaultRoute extends Route {
5
- middlewares = {
6
- post: [ new DefaultMiddleware() ],
7
- get: [ new DefaultMiddleware() ]
8
- }
9
-
10
- async post({ container, request }) {
11
- const { test } = request.params;
12
- container.get("logger").info("Default route GET");
13
-
14
- return {
15
- test: "Hello World GET! Param: " + test
16
- }
17
- }
18
-
19
- async get({ container, request }) {
20
- const { test } = request.params;
21
- container.get("logger").info("Default route GET");
22
-
23
- return {
24
- test: "Hello World GET! Param: " + test
25
- }
26
- }
1
+ const { Route } = require("zyket");
2
+ const DefaultMiddleware = require("../../middlewares/default");
3
+
4
+ module.exports = class DefaultRoute extends Route {
5
+ middlewares = {
6
+ post: [ new DefaultMiddleware() ],
7
+ get: [ new DefaultMiddleware() ]
8
+ }
9
+
10
+ async post({ container, request }) {
11
+ const { test } = request.params;
12
+ container.get("logger").info("Default route GET");
13
+
14
+ return {
15
+ test: "Hello World GET! Param: " + test
16
+ }
17
+ }
18
+
19
+ async get({ container, request }) {
20
+ const { test } = request.params;
21
+ container.get("logger").info("Default route GET");
22
+
23
+ return {
24
+ test: "Hello World GET! Param: " + test
25
+ }
26
+ }
27
27
  };
@@ -1,23 +1,23 @@
1
- const { Route } = require("zyket");
2
- const DefaultMiddleware = require("../middlewares/default");
3
-
4
- module.exports = class DefaultRoute extends Route {
5
- middlewares = {
6
- post: [ new DefaultMiddleware() ],
7
- get: [ new DefaultMiddleware() ]
8
- }
9
-
10
- async post({ container, request }) {
11
- container.get("logger").info("Default route POST");
12
- return {
13
- test: "Hello World POST!"
14
- }
15
- }
16
-
17
- async get({ container, request }) {
18
- container.get("logger").info("Default route GET");
19
- return {
20
- test: "Hello World GET!"
21
- }
22
- }
1
+ const { Route } = require("zyket");
2
+ const DefaultMiddleware = require("../middlewares/default");
3
+
4
+ module.exports = class DefaultRoute extends Route {
5
+ middlewares = {
6
+ post: [ new DefaultMiddleware() ],
7
+ get: [ new DefaultMiddleware() ]
8
+ }
9
+
10
+ async post({ container, request }) {
11
+ container.get("logger").info("Default route POST");
12
+ return {
13
+ test: "Hello World POST!"
14
+ }
15
+ }
16
+
17
+ async get({ container, request }) {
18
+ container.get("logger").info("Default route GET");
19
+ return {
20
+ test: "Hello World GET!"
21
+ }
22
+ }
23
23
  };
@@ -1,8 +1,8 @@
1
- const AuthService = require('./index.js');
2
-
3
- const auth = new AuthService({
4
- get: (serviceName) => {
5
- }
6
- });
7
-
1
+ const AuthService = require('./index.js');
2
+
3
+ const auth = new AuthService({
4
+ get: (serviceName) => {
5
+ }
6
+ });
7
+
8
8
  module.exports = auth.auth;
@@ -1,33 +1,33 @@
1
- const { AuthService } = require('zyket');
2
-
3
- module.exports = class CustomAuthService extends AuthService {
4
- #container;
5
- client;
6
-
7
- constructor(container) {
8
- super(container);
9
- this.#container = container;
10
- }
11
-
12
- get userAdditionalFields() {
13
- }
14
-
15
- get organizationAdditionalFields() {
16
- }
17
-
18
- async sendResetPasswordEmail({ user, url, token }, request) {
19
- throw new Error("sendResetPasswordEmail method not implemented");
20
- }
21
-
22
- async sendVerificationEmail({ user, url, token }, request) {
23
- throw new Error("sendVerificationEmail method not implemented");
24
- }
25
-
26
- async sendInvitationEmail(data) {
27
- throw new Error("sendInvitationEmail method not implemented");
28
- }
29
-
30
- async allowUserToCreateOrganization(user) {
31
- throw new Error("allowUserToCreateOrganization method not implemented");
32
- }
1
+ const { AuthService } = require('zyket');
2
+
3
+ module.exports = class CustomAuthService extends AuthService {
4
+ #container;
5
+ client;
6
+
7
+ constructor(container) {
8
+ super(container);
9
+ this.#container = container;
10
+ }
11
+
12
+ get userAdditionalFields() {
13
+ }
14
+
15
+ get organizationAdditionalFields() {
16
+ }
17
+
18
+ async sendResetPasswordEmail({ user, url, token }, request) {
19
+ throw new Error("sendResetPasswordEmail method not implemented");
20
+ }
21
+
22
+ async sendVerificationEmail({ user, url, token }, request) {
23
+ throw new Error("sendVerificationEmail method not implemented");
24
+ }
25
+
26
+ async sendInvitationEmail(data) {
27
+ throw new Error("sendInvitationEmail method not implemented");
28
+ }
29
+
30
+ async allowUserToCreateOrganization(user) {
31
+ throw new Error("allowUserToCreateOrganization method not implemented");
32
+ }
33
33
  }
@@ -1,66 +1,67 @@
1
- const fs = require('fs');
2
-
3
- module.exports = class EnvManager {
4
- static load(secretsPath) {
5
- this.createEnvFile(secretsPath);
6
- require("dotenv").config({ path: secretsPath });
7
- }
8
-
9
- static createEnvFile(secretsPath, overwrite = false) {
10
- if (fs.existsSync(secretsPath) && !overwrite) return;
11
- fs.writeFileSync(secretsPath, this.getDefaultSecrets());
12
- }
13
-
14
- static getDefaultSecrets() {
15
- const header = `# Zyket Environment Configuration
16
- # CACHE_URL: Leave empty or set to 'memory' for in-memory cache, or 'redis://localhost:6379' for Redis
17
- `;
18
- const envsToCreate = {
19
- DEBUG: true,
20
- PORT: 3000,
21
- DISABLE_SOCKET: true,
22
- DISABLE_EXPRESS: false,
23
- DISABLE_EVENTS: true,
24
- DISABLE_BULLMQ: true,
25
- DISABLE_SCHEDULER: true,
26
- DATABASE_URL: './database.sqlite',
27
- DATABASE_DIALECT: 'sqlite',
28
- CACHE_URL: '',
29
- S3_ENDPOINT: '',
30
- S3_PORT: '',
31
- S3_USE_SSL: true,
32
- S3_ACCESS_KEY: '',
33
- S3_SECRET_KEY: '',
34
- LOG_DIRECTORY: "./logs",
35
- QUEUES: '',
36
- VITE_ROOT: './frontend',
37
- VITE_PORT: 5173,
38
- DISABLE_VITE: true,
39
- }
40
-
41
- return header + Object.entries(envsToCreate).reduce((acc, [key, value]) => {
42
- return `${acc}${key}=${value}\n`;
43
- }, "");
44
- }
45
-
46
- static addEnvVariable(secretsPath, key, value) {
47
- // Create env file if it doesn't exist
48
- if (!fs.existsSync(secretsPath)) {
49
- this.createEnvFile(secretsPath);
50
- }
51
-
52
- // Read existing content
53
- let envContent = fs.readFileSync(secretsPath, 'utf-8');
54
-
55
- // Check if the key already exists
56
- const keyRegex = new RegExp(`^${key}=.*$`, 'm');
57
- if (keyRegex.test(envContent)) {
58
- return false; // Key already exists
59
- }
60
-
61
- // Add the new environment variable
62
- envContent += `${key}=${value}\n`;
63
- fs.writeFileSync(secretsPath, envContent);
64
- return true; // Key added successfully
65
- }
1
+ const fs = require('fs');
2
+
3
+ module.exports = class EnvManager {
4
+ static load(secretsPath) {
5
+ this.createEnvFile(secretsPath);
6
+ require("dotenv").config({ path: secretsPath });
7
+ }
8
+
9
+ static createEnvFile(secretsPath, overwrite = false) {
10
+ if (fs.existsSync(secretsPath) && !overwrite) return;
11
+ fs.writeFileSync(secretsPath, this.getDefaultSecrets());
12
+ }
13
+
14
+ static getDefaultSecrets() {
15
+ const header = `# Zyket Environment Configuration
16
+ # CACHE_URL: Leave empty or set to 'memory' for in-memory cache, or 'redis://localhost:6379' for Redis
17
+ `;
18
+ const envsToCreate = {
19
+ DEBUG: true,
20
+ PORT: 3000,
21
+ DISABLE_SOCKET: true,
22
+ DISABLE_EXPRESS: false,
23
+ DISABLE_EVENTS: true,
24
+ DISABLE_BULLMQ: true,
25
+ DISABLE_SCHEDULER: true,
26
+ DATABASE_URL: './database.sqlite',
27
+ DATABASE_DIALECT: 'sqlite',
28
+ CACHE_URL: '',
29
+ S3_ENDPOINT: '',
30
+ S3_PORT: '',
31
+ S3_USE_SSL: true,
32
+ S3_ACCESS_KEY: '',
33
+ S3_SECRET_KEY: '',
34
+ DISABLE_LOGGER: false,
35
+ LOG_DIRECTORY: "./logs",
36
+ QUEUES: '',
37
+ VITE_ROOT: './frontend',
38
+ VITE_PORT: 5173,
39
+ DISABLE_VITE: true,
40
+ }
41
+
42
+ return header + Object.entries(envsToCreate).reduce((acc, [key, value]) => {
43
+ return `${acc}${key}=${value}\n`;
44
+ }, "");
45
+ }
46
+
47
+ static addEnvVariable(secretsPath, key, value) {
48
+ // Create env file if it doesn't exist
49
+ if (!fs.existsSync(secretsPath)) {
50
+ this.createEnvFile(secretsPath);
51
+ }
52
+
53
+ // Read existing content
54
+ let envContent = fs.readFileSync(secretsPath, 'utf-8');
55
+
56
+ // Check if the key already exists
57
+ const keyRegex = new RegExp(`^${key}=.*$`, 'm');
58
+ if (keyRegex.test(envContent)) {
59
+ return false; // Key already exists
60
+ }
61
+
62
+ // Add the new environment variable
63
+ envContent += `${key}=${value}\n`;
64
+ fs.writeFileSync(secretsPath, envContent);
65
+ return true; // Key added successfully
66
+ }
66
67
  }