zyket 1.2.18 → 1.2.20
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/.claude-plugin/marketplace.json +2 -2
- package/AGENTS.md +407 -0
- package/README.md +175 -279
- package/SECURITY.md +40 -0
- package/bin/cli.js +310 -202
- package/index.js +4 -3
- package/package.json +7 -1
- package/plugin/.claude-plugin/plugin.json +2 -2
- package/plugin/skills/build/SKILL.md +88 -0
- package/src/extensions/bullboard/index.js +14 -3
- package/src/extensions/interactive-storage/index.js +25 -9
- package/src/extensions/interactive-storage/routes/delete-folder.js +13 -1
- package/src/extensions/interactive-storage/routes/delete.js +14 -3
- package/src/extensions/interactive-storage/routes/download.js +22 -3
- package/src/extensions/interactive-storage/routes/info.js +13 -0
- package/src/services/auth/index.js +46 -28
- package/src/services/express/Express.js +32 -15
- package/src/services/express/RequireAdminMiddleware.js +14 -0
- package/src/services/express/RequireAuthMiddleware.js +46 -0
- package/src/services/express/index.js +7 -5
- package/src/services/socketio/AuthGuard.js +33 -0
- package/src/services/socketio/SocketIO.js +3 -1
- package/src/services/socketio/index.js +2 -1
- package/src/services/template-manager/index.js +1 -0
- package/src/templates/api-rest/.env.example +24 -0
- package/src/templates/api-rest/README.md +50 -0
- package/src/templates/api-rest/index.js +18 -0
- package/src/templates/api-rest/src/models/Task.js +18 -0
- package/src/templates/api-rest/src/routes/tasks/[id].js +42 -0
- package/src/templates/api-rest/src/routes/tasks/index.js +26 -0
- package/src/templates/api-rest/src/services/auth/auth.js +9 -0
- package/src/templates/api-rest/src/services/auth/index.js +23 -0
- package/src/templates/realtime-chat/.env.example +26 -0
- package/src/templates/realtime-chat/README.md +38 -0
- package/src/templates/realtime-chat/frontend/.env.example +3 -0
- package/src/templates/realtime-chat/frontend/index.html +12 -0
- package/src/templates/realtime-chat/frontend/main.jsx +18 -0
- package/src/templates/realtime-chat/frontend/src/hooks/useAuth.jsx +27 -0
- package/src/templates/realtime-chat/frontend/src/hooks/useChatSocket.jsx +29 -0
- package/src/templates/realtime-chat/frontend/src/middlewares/LoggedMiddleware.jsx +12 -0
- package/src/templates/realtime-chat/frontend/src/middlewares/NotLoggedMiddleware.jsx +12 -0
- package/src/templates/realtime-chat/frontend/src/store/storeAuth.jsx +11 -0
- package/src/templates/realtime-chat/frontend/src/views/AuthView.jsx +70 -0
- package/src/templates/realtime-chat/frontend/src/views/ChatView.jsx +69 -0
- package/src/templates/realtime-chat/frontend/styles.css +1 -0
- package/src/templates/realtime-chat/frontend/vite.config.js +7 -0
- package/src/templates/realtime-chat/index.js +14 -0
- package/src/templates/realtime-chat/src/guards/auth.js +3 -0
- package/src/templates/realtime-chat/src/handlers/connection.js +23 -0
- package/src/templates/realtime-chat/src/handlers/message.js +29 -0
- package/src/templates/realtime-chat/src/services/auth/auth.js +8 -0
- package/src/templates/realtime-chat/src/services/auth/index.js +19 -0
- package/src/templates/saas-multitenant/.env.example +22 -0
- package/src/templates/saas-multitenant/README.md +71 -0
- package/src/templates/saas-multitenant/frontend/.env.example +3 -0
- package/src/templates/saas-multitenant/frontend/index.html +12 -0
- package/src/templates/saas-multitenant/frontend/main.jsx +18 -0
- package/src/templates/saas-multitenant/frontend/src/hooks/useAuth.jsx +27 -0
- package/src/templates/saas-multitenant/frontend/src/hooks/useProjects.jsx +41 -0
- package/src/templates/saas-multitenant/frontend/src/middlewares/LoggedMiddleware.jsx +12 -0
- package/src/templates/saas-multitenant/frontend/src/middlewares/NotLoggedMiddleware.jsx +12 -0
- package/src/templates/saas-multitenant/frontend/src/store/storeAuth.jsx +13 -0
- package/src/templates/saas-multitenant/frontend/src/views/AuthView.jsx +70 -0
- package/src/templates/saas-multitenant/frontend/src/views/DashboardView.jsx +131 -0
- package/src/templates/saas-multitenant/frontend/styles.css +1 -0
- package/src/templates/saas-multitenant/frontend/vite.config.js +7 -0
- package/src/templates/saas-multitenant/index.js +14 -0
- package/src/templates/saas-multitenant/src/middlewares/RequireOrganization.js +22 -0
- package/src/templates/saas-multitenant/src/models/Project.js +17 -0
- package/src/templates/saas-multitenant/src/routes/admin/stats.js +15 -0
- package/src/templates/saas-multitenant/src/routes/projects/index.js +34 -0
- package/src/templates/saas-multitenant/src/services/auth/auth.js +8 -0
- package/src/templates/saas-multitenant/src/services/auth/index.js +43 -0
- package/src/utils/EnvManager.js +23 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
const { AuthService } = require('zyket');
|
|
2
|
+
|
|
3
|
+
module.exports = class CustomAuthService extends AuthService {
|
|
4
|
+
// Multi-tenancy is the whole point of this template.
|
|
5
|
+
get organizationEnabled() {
|
|
6
|
+
return true;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
get requireEmailVerification() {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
get organizationAdditionalFields() {
|
|
14
|
+
return {
|
|
15
|
+
// Example custom field on the organization:
|
|
16
|
+
// plan: { type: 'string', required: false, defaultValue: 'free' },
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
get memberAdditionalFields() {
|
|
21
|
+
return {};
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Decide who is allowed to create new organizations.
|
|
25
|
+
async allowUserToCreateOrganization(/* user */) {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
async sendInvitationEmail(data) {
|
|
30
|
+
// TODO: send a real email with the invite link.
|
|
31
|
+
// `data` contains { id, email, organization, inviter, role, ... }
|
|
32
|
+
const acceptUrl = `${process.env.BETTER_AUTH_URL || 'http://localhost:3000'}/accept-invitation/${data.id}`;
|
|
33
|
+
console.log(`[auth] Invite ${data.email} to "${data.organization?.name}" -> ${acceptUrl}`);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
async sendResetPasswordEmail({ user, url }) {
|
|
37
|
+
console.log(`[auth] Reset password for ${user.email}: ${url}`);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
async sendVerificationEmail({ user, url }) {
|
|
41
|
+
console.log(`[auth] Verify email for ${user.email}: ${url}`);
|
|
42
|
+
}
|
|
43
|
+
};
|
package/src/utils/EnvManager.js
CHANGED
|
@@ -18,8 +18,12 @@ module.exports = class EnvManager {
|
|
|
18
18
|
const envsToCreate = {
|
|
19
19
|
DEBUG: true,
|
|
20
20
|
PORT: 3000,
|
|
21
|
+
HTTP_JSON_LIMIT: '10mb',
|
|
22
|
+
SOCKET_MAX_HTTP_BUFFER_SIZE: 10 * 1024 * 1024,
|
|
21
23
|
DISABLE_SOCKET: true,
|
|
22
24
|
DISABLE_EXPRESS: false,
|
|
25
|
+
DISABLE_SWAGGER: false,
|
|
26
|
+
SWAGGER_PASSWORD: '',
|
|
23
27
|
DISABLE_EVENTS: true,
|
|
24
28
|
DISABLE_BULLMQ: true,
|
|
25
29
|
DISABLE_SCHEDULER: true,
|
|
@@ -66,4 +70,23 @@ module.exports = class EnvManager {
|
|
|
66
70
|
fs.writeFileSync(secretsPath, envContent);
|
|
67
71
|
return true; // Key added successfully
|
|
68
72
|
}
|
|
73
|
+
|
|
74
|
+
// Upsert: replace the value if the key exists, otherwise append it.
|
|
75
|
+
static setEnvVariable(secretsPath, key, value) {
|
|
76
|
+
if (!fs.existsSync(secretsPath)) {
|
|
77
|
+
this.createEnvFile(secretsPath);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
let envContent = fs.readFileSync(secretsPath, 'utf-8');
|
|
81
|
+
const keyRegex = new RegExp(`^${key}=.*$`, 'm');
|
|
82
|
+
|
|
83
|
+
if (keyRegex.test(envContent)) {
|
|
84
|
+
envContent = envContent.replace(keyRegex, `${key}=${value}`);
|
|
85
|
+
} else {
|
|
86
|
+
if (envContent.length && !envContent.endsWith('\n')) envContent += '\n';
|
|
87
|
+
envContent += `${key}=${value}\n`;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
fs.writeFileSync(secretsPath, envContent);
|
|
91
|
+
}
|
|
69
92
|
}
|