@intranefr/superbackend 1.5.2 → 1.6.3

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 (134) hide show
  1. package/cookies.txt +6 -0
  2. package/cookies1.txt +6 -0
  3. package/cookies2.txt +6 -0
  4. package/cookies3.txt +6 -0
  5. package/cookies4.txt +5 -0
  6. package/cookies_old.txt +5 -0
  7. package/cookies_old_test.txt +6 -0
  8. package/cookies_super.txt +5 -0
  9. package/cookies_super_test.txt +6 -0
  10. package/cookies_test.txt +6 -0
  11. package/index.js +9 -0
  12. package/manage.js +745 -0
  13. package/package.json +6 -2
  14. package/plugins/core-waiting-list-migration/README.md +118 -0
  15. package/plugins/core-waiting-list-migration/index.js +438 -0
  16. package/plugins/global-settings-presets/index.js +20 -0
  17. package/plugins/hello-cli/index.js +17 -0
  18. package/plugins/ui-components-seeder/components/suiAlert.js +212 -0
  19. package/plugins/ui-components-seeder/components/suiToast.js +186 -0
  20. package/plugins/ui-components-seeder/index.js +31 -0
  21. package/public/js/admin-ui-components-preview.js +281 -0
  22. package/public/js/admin-ui-components.js +408 -0
  23. package/public/js/llm-provider-model-picker.js +193 -0
  24. package/public/test-iframe-fix.html +63 -0
  25. package/public/test-iframe.html +14 -0
  26. package/src/admin/endpointRegistry.js +68 -0
  27. package/src/controllers/admin.controller.js +36 -10
  28. package/src/controllers/adminAgents.controller.js +37 -0
  29. package/src/controllers/adminDataCleanup.controller.js +45 -0
  30. package/src/controllers/adminLlm.controller.js +19 -8
  31. package/src/controllers/adminLogin.controller.js +269 -0
  32. package/src/controllers/adminMarkdowns.controller.js +157 -0
  33. package/src/controllers/adminPlugins.controller.js +55 -0
  34. package/src/controllers/adminRegistry.controller.js +106 -0
  35. package/src/controllers/adminScripts.controller.js +138 -0
  36. package/src/controllers/adminStats.controller.js +4 -4
  37. package/src/controllers/adminTelegram.controller.js +72 -0
  38. package/src/controllers/markdowns.controller.js +42 -0
  39. package/src/controllers/registry.controller.js +32 -0
  40. package/src/controllers/waitingList.controller.js +52 -74
  41. package/src/helpers/mongooseHelper.js +6 -6
  42. package/src/helpers/scriptBase.js +2 -2
  43. package/src/middleware/auth.js +71 -1
  44. package/src/middleware/rbac.js +62 -0
  45. package/src/middleware.js +584 -176
  46. package/src/models/Agent.js +105 -0
  47. package/src/models/AgentMessage.js +82 -0
  48. package/src/models/GlobalSetting.js +11 -1
  49. package/src/models/Markdown.js +75 -0
  50. package/src/models/ScriptRun.js +8 -0
  51. package/src/models/TelegramBot.js +42 -0
  52. package/src/models/UiComponent.js +2 -0
  53. package/src/models/User.js +1 -1
  54. package/src/routes/admin.routes.js +3 -3
  55. package/src/routes/adminAgents.routes.js +13 -0
  56. package/src/routes/adminAssets.routes.js +11 -11
  57. package/src/routes/adminBlog.routes.js +2 -2
  58. package/src/routes/adminBlogAi.routes.js +2 -2
  59. package/src/routes/adminBlogAutomation.routes.js +2 -2
  60. package/src/routes/adminCache.routes.js +2 -2
  61. package/src/routes/adminConsoleManager.routes.js +2 -2
  62. package/src/routes/adminCrons.routes.js +2 -2
  63. package/src/routes/adminDataCleanup.routes.js +26 -0
  64. package/src/routes/adminDbBrowser.routes.js +2 -2
  65. package/src/routes/adminEjsVirtual.routes.js +2 -2
  66. package/src/routes/adminFeatureFlags.routes.js +6 -6
  67. package/src/routes/adminHeadless.routes.js +2 -2
  68. package/src/routes/adminHealthChecks.routes.js +2 -2
  69. package/src/routes/adminI18n.routes.js +2 -2
  70. package/src/routes/adminJsonConfigs.routes.js +8 -8
  71. package/src/routes/adminLlm.routes.js +8 -7
  72. package/src/routes/adminLogin.routes.js +23 -0
  73. package/src/routes/adminMarkdowns.routes.js +10 -0
  74. package/src/routes/adminMigration.routes.js +12 -12
  75. package/src/routes/adminPages.routes.js +2 -2
  76. package/src/routes/adminPlugins.routes.js +15 -0
  77. package/src/routes/adminProxy.routes.js +2 -2
  78. package/src/routes/adminRateLimits.routes.js +8 -8
  79. package/src/routes/adminRbac.routes.js +2 -2
  80. package/src/routes/adminRegistry.routes.js +24 -0
  81. package/src/routes/adminScripts.routes.js +6 -3
  82. package/src/routes/adminSeoConfig.routes.js +10 -10
  83. package/src/routes/adminTelegram.routes.js +14 -0
  84. package/src/routes/adminTerminals.routes.js +2 -2
  85. package/src/routes/adminUiComponents.routes.js +2 -2
  86. package/src/routes/adminUploadNamespaces.routes.js +7 -7
  87. package/src/routes/blogInternal.routes.js +2 -2
  88. package/src/routes/experiments.routes.js +2 -2
  89. package/src/routes/formsAdmin.routes.js +6 -6
  90. package/src/routes/globalSettings.routes.js +8 -8
  91. package/src/routes/internalExperiments.routes.js +2 -2
  92. package/src/routes/markdowns.routes.js +16 -0
  93. package/src/routes/notificationAdmin.routes.js +7 -7
  94. package/src/routes/orgAdmin.routes.js +16 -16
  95. package/src/routes/pages.routes.js +3 -3
  96. package/src/routes/registry.routes.js +11 -0
  97. package/src/routes/stripeAdmin.routes.js +12 -12
  98. package/src/routes/userAdmin.routes.js +7 -7
  99. package/src/routes/waitingListAdmin.routes.js +2 -2
  100. package/src/routes/workflows.routes.js +3 -3
  101. package/src/services/agent.service.js +546 -0
  102. package/src/services/agentHistory.service.js +345 -0
  103. package/src/services/agentTools.service.js +578 -0
  104. package/src/services/dataCleanup.service.js +286 -0
  105. package/src/services/jsonConfigs.service.js +284 -10
  106. package/src/services/llm.service.js +219 -6
  107. package/src/services/markdowns.service.js +522 -0
  108. package/src/services/plugins.service.js +348 -0
  109. package/src/services/registry.service.js +452 -0
  110. package/src/services/scriptsRunner.service.js +328 -37
  111. package/src/services/telegram.service.js +130 -0
  112. package/src/services/uiComponents.service.js +180 -0
  113. package/src/services/waitingListJson.service.js +401 -0
  114. package/src/utils/rbac/rightsRegistry.js +118 -0
  115. package/test-access.js +63 -0
  116. package/test-iframe-fix.html +63 -0
  117. package/test-iframe.html +14 -0
  118. package/views/admin-403.ejs +92 -0
  119. package/views/admin-agents.ejs +273 -0
  120. package/views/admin-coolify-deploy.ejs +8 -8
  121. package/views/admin-dashboard-home.ejs +52 -2
  122. package/views/admin-dashboard.ejs +179 -7
  123. package/views/admin-data-cleanup.ejs +357 -0
  124. package/views/admin-experiments.ejs +1 -1
  125. package/views/admin-login.ejs +286 -0
  126. package/views/admin-markdowns.ejs +905 -0
  127. package/views/admin-plugins-system.ejs +223 -0
  128. package/views/admin-scripts.ejs +221 -4
  129. package/views/admin-telegram.ejs +269 -0
  130. package/views/admin-ui-components.ejs +82 -402
  131. package/views/admin-users.ejs +207 -11
  132. package/views/partials/dashboard/nav-items.ejs +5 -0
  133. package/views/partials/llm-provider-model-picker.ejs +0 -161
  134. package/analysis-only.skill +0 -0
@@ -0,0 +1,105 @@
1
+ const mongoose = require('mongoose');
2
+
3
+ const agentSchema = new mongoose.Schema({
4
+ name: {
5
+ type: String,
6
+ required: true,
7
+ trim: true
8
+ },
9
+ systemPrompt: {
10
+ type: String,
11
+ default: `You are a helpful assistant with access to specific tools for querying data.
12
+
13
+ AVAILABLE TOOLS:
14
+
15
+ 1. query_database: Query the MongoDB database for insights.
16
+ - Parameters:
17
+ - modelName (required): The name of the Mongoose model (e.g., User, Markdown, AuditEvent)
18
+ - query (required): The MongoDB query object
19
+ - limit (optional): Limit the number of results (default: 5)
20
+ - Usage: Use this when you need to fetch specific data from the database.
21
+
22
+ 2. get_system_stats: Get general statistics about the system.
23
+ - Parameters: None
24
+ - Usage: Use this when you need overall counts of users, markdowns, and other system entities.
25
+
26
+ 3. raw_db_query: Execute raw MongoDB queries for database exploration.
27
+ - Parameters:
28
+ - queryType (required): The type of raw query to execute
29
+ • listDatabases: List all databases (requires admin access)
30
+ • listCollections: List all collections in a database
31
+ • countDocuments: Count documents in a collection
32
+ • findOne: Find a single document in a collection
33
+ • aggregate: Run aggregation pipeline
34
+ • adminCommand: Execute admin commands
35
+ - database (optional): Database name (defaults to current database)
36
+ - collection (required for collection queries): Collection name
37
+ - filter (optional): MongoDB filter/query object. Can be:
38
+ • A JSON object: { createdAt: { $gte: new Date() } }
39
+ • A JSON string: '{"createdAt": {"$gte": {"$date": "2024-01-01"}}}'
40
+ • For aggregate: an array of pipeline stages as object or JSON string
41
+ - limit (optional): Limit results (default: 10)
42
+ - adminCommand (optional): Admin command for adminCommand queryType (as object or JSON string)
43
+ - Usage: Use this to discover collection names, databases, or run admin commands.
44
+ - IMPORTANT: For complex queries, use JSON string format to avoid parsing issues
45
+
46
+ IMPORTANT ERROR HANDLING INSTRUCTIONS:
47
+ - When a tool returns an error, it will be in structured JSON format with error details
48
+ - ALWAYS provide a friendly, conversational response to the user about tool errors
49
+ - NEVER show raw error JSON to users
50
+ - DO: "I had trouble accessing the database. Let me try a different approach..."
51
+ - DO NOT: Show the actual error JSON to users
52
+ - Extract the error message and provide helpful suggestions based on the error context
53
+ - If an error is not recoverable, explain why and suggest alternatives
54
+ - If an error is recoverable, explain what you'll try next
55
+ - Use the error suggestions provided in the tool response to inform your response
56
+
57
+ INSTRUCTIONS:
58
+ - Always use tools when you need actual data from the database
59
+ - Never make up data or statistics
60
+ - For database queries, use exact model names as they appear in the system
61
+ - When using query_database, construct appropriate MongoDB query objects based on the user's request
62
+ - If you don't have enough information for a query, ask clarifying questions
63
+ - Use get_system_stats for high-level overview requests
64
+ - Use raw_db_query for:
65
+ * Discovering what collections exist: queryType: "listCollections"
66
+ * Finding database names: queryType: "listDatabases" (may require admin)
67
+ * Counting documents: queryType: "countDocuments" with collection and filter
68
+ * Exploring collection structure: queryType: "findOne" or "aggregate"
69
+ - For specific records, use query_database with appropriate filters
70
+
71
+ Respond helpfully and only use the tools when necessary for accurate information. Always provide friendly error messages to users when tools fail.`
72
+ },
73
+ providerKey: {
74
+ type: String,
75
+ required: true
76
+ },
77
+ model: {
78
+ type: String,
79
+ required: true
80
+ },
81
+ tools: {
82
+ type: [String],
83
+ default: []
84
+ },
85
+ temperature: {
86
+ type: Number,
87
+ default: 0.7
88
+ },
89
+ maxIterations: {
90
+ type: Number,
91
+ default: 10
92
+ },
93
+ orgId: {
94
+ type: mongoose.Schema.Types.ObjectId,
95
+ ref: 'Organization'
96
+ },
97
+ ownerUserId: {
98
+ type: mongoose.Schema.Types.ObjectId,
99
+ ref: 'User'
100
+ }
101
+ }, {
102
+ timestamps: true
103
+ });
104
+
105
+ module.exports = mongoose.model('Agent', agentSchema);
@@ -0,0 +1,82 @@
1
+ const mongoose = require('mongoose');
2
+ const { ObjectId } = mongoose.Schema.Types;
3
+
4
+ const agentMessageSchema = new mongoose.Schema({
5
+ agentId: {
6
+ type: ObjectId,
7
+ ref: 'Agent',
8
+ required: true,
9
+ index: true
10
+ },
11
+ chatId: {
12
+ type: String,
13
+ required: true,
14
+ index: true
15
+ },
16
+ role: {
17
+ type: String,
18
+ enum: ['user', 'assistant', 'system', 'tool'],
19
+ required: true
20
+ },
21
+ content: {
22
+ type: String,
23
+ required: function() {
24
+ // Content is not required if:
25
+ // 1. Role is 'tool' (content might be in metadata or implied) - though usually tool has content
26
+ // 2. Role is 'assistant' AND it has toolCalls (OpenAI often returns null content with tool calls)
27
+ if (this.role === 'tool') return false;
28
+ if (this.role === 'assistant' && this.toolCalls && this.toolCalls.length > 0) return false;
29
+ return true;
30
+ }
31
+ },
32
+ toolCalls: [{
33
+ name: String,
34
+ arguments: mongoose.Schema.Types.Mixed,
35
+ toolCallId: String
36
+ }],
37
+ toolCallId: {
38
+ type: String,
39
+ index: true
40
+ },
41
+ metadata: {
42
+ tokens: Number,
43
+ processingTime: Number,
44
+ model: String,
45
+ provider: String,
46
+ timestamp: Date,
47
+ temperature: Number
48
+ },
49
+ createdAt: {
50
+ type: Date,
51
+ default: Date.now,
52
+ index: true
53
+ },
54
+ updatedAt: {
55
+ type: Date,
56
+ default: Date.now
57
+ }
58
+ }, {
59
+ timestamps: true,
60
+ toJSON: { virtuals: true },
61
+ toObject: { virtuals: true }
62
+ });
63
+
64
+ // Compound index for efficient session history retrieval
65
+ agentMessageSchema.index(
66
+ { agentId: 1, chatId: 1, createdAt: 1 },
67
+ { name: 'session_history_idx' }
68
+ );
69
+
70
+ // Index for tool call lookup
71
+ agentMessageSchema.index(
72
+ { toolCallId: 1 },
73
+ { name: 'tool_call_idx' }
74
+ );
75
+
76
+ // Index for searching content
77
+ agentMessageSchema.index(
78
+ { content: 'text' },
79
+ { name: 'content_search_idx' }
80
+ );
81
+
82
+ module.exports = mongoose.model('AgentMessage', agentMessageSchema);
@@ -8,7 +8,17 @@ const globalSettingSchema = new mongoose.Schema({
8
8
  },
9
9
  value: {
10
10
  type: String,
11
- required: true
11
+ default: '',
12
+ validate: {
13
+ validator: function(v) {
14
+ // Only encrypted values cannot be empty
15
+ if (this.type === 'encrypted') {
16
+ return v && v.trim().length > 0;
17
+ }
18
+ return true; // Allow any value (including empty) for other types
19
+ },
20
+ message: 'Encrypted values cannot be empty'
21
+ }
12
22
  },
13
23
  type: {
14
24
  type: String,
@@ -0,0 +1,75 @@
1
+ const mongoose = require('mongoose');
2
+
3
+ const markdownSchema = new mongoose.Schema(
4
+ {
5
+ title: {
6
+ type: String,
7
+ required: true,
8
+ trim: true,
9
+ },
10
+ slug: {
11
+ type: String,
12
+ required: true,
13
+ index: true,
14
+ trim: true,
15
+ },
16
+ category: {
17
+ type: String,
18
+ required: true,
19
+ index: true,
20
+ trim: true,
21
+ default: 'general',
22
+ },
23
+ group_code: {
24
+ type: String,
25
+ required: false,
26
+ index: true,
27
+ trim: true,
28
+ default: '',
29
+ },
30
+ markdownRaw: {
31
+ type: String,
32
+ required: true,
33
+ default: '',
34
+ },
35
+ publicEnabled: {
36
+ type: Boolean,
37
+ default: false,
38
+ index: true,
39
+ },
40
+ cacheTtlSeconds: {
41
+ type: Number,
42
+ default: 0,
43
+ },
44
+ status: {
45
+ type: String,
46
+ enum: ['draft', 'published', 'archived'],
47
+ default: 'draft',
48
+ index: true,
49
+ },
50
+ ownerUserId: {
51
+ type: mongoose.Schema.Types.ObjectId,
52
+ ref: 'User',
53
+ index: true,
54
+ default: null,
55
+ },
56
+ orgId: {
57
+ type: mongoose.Schema.Types.ObjectId,
58
+ ref: 'Organization',
59
+ index: true,
60
+ default: null,
61
+ },
62
+ },
63
+ { timestamps: true },
64
+ );
65
+
66
+ // Compound unique index for fast lookups
67
+ markdownSchema.index({ category: 1, group_code: 1, slug: 1 }, { unique: true });
68
+
69
+ // Additional indexes for common queries
70
+ markdownSchema.index({ status: 1, publicEnabled: 1 });
71
+ markdownSchema.index({ category: 1, status: 1 });
72
+ markdownSchema.index({ ownerUserId: 1, createdAt: -1 });
73
+ markdownSchema.index({ orgId: 1, createdAt: -1 });
74
+
75
+ module.exports = mongoose.model('Markdown', markdownSchema);
@@ -14,6 +14,14 @@ const scriptRunSchema = new mongoose.Schema(
14
14
  finishedAt: { type: Date, default: null },
15
15
  exitCode: { type: Number, default: null },
16
16
  outputTail: { type: String, default: '' },
17
+ fullOutput: { type: String, default: '' },
18
+ programmaticOutput: { type: String, default: '' },
19
+ returnResult: { type: String, default: '' },
20
+ lastConsoleLog: { type: String, default: '' },
21
+ outputType: { type: String, enum: ['return', 'console', 'none'], default: 'none' },
22
+ outputSize: { type: Number, default: 0 },
23
+ lineCount: { type: Number, default: 0 },
24
+ lastOutputUpdate: { type: Date, default: null },
17
25
  meta: { type: mongoose.Schema.Types.Mixed, default: null },
18
26
  },
19
27
  { timestamps: true, collection: 'script_runs' },
@@ -0,0 +1,42 @@
1
+ const mongoose = require('mongoose');
2
+
3
+ const telegramBotSchema = new mongoose.Schema({
4
+ name: {
5
+ type: String,
6
+ required: true,
7
+ trim: true
8
+ },
9
+ token: {
10
+ type: String,
11
+ required: true,
12
+ trim: true
13
+ },
14
+ isActive: {
15
+ type: Boolean,
16
+ default: false
17
+ },
18
+ allowedUserIds: {
19
+ type: [String],
20
+ default: []
21
+ },
22
+ defaultAgentId: {
23
+ type: mongoose.Schema.Types.ObjectId,
24
+ ref: 'Agent'
25
+ },
26
+ orgId: {
27
+ type: mongoose.Schema.Types.ObjectId,
28
+ ref: 'Organization'
29
+ },
30
+ status: {
31
+ type: String,
32
+ enum: ['stopped', 'running', 'error'],
33
+ default: 'stopped'
34
+ },
35
+ lastError: {
36
+ type: String
37
+ }
38
+ }, {
39
+ timestamps: true
40
+ });
41
+
42
+ module.exports = mongoose.model('TelegramBot', telegramBotSchema);
@@ -20,6 +20,8 @@ const uiComponentSchema = new mongoose.Schema(
20
20
  api: { type: mongoose.Schema.Types.Mixed, default: null },
21
21
  usageMarkdown: { type: String, default: '' },
22
22
 
23
+ previewExample: { type: String, default: null },
24
+
23
25
  version: { type: Number, default: 1 },
24
26
  isActive: { type: Boolean, default: true, index: true },
25
27
  },
@@ -56,7 +56,7 @@ const userSchema = new mongoose.Schema({
56
56
  },
57
57
  role: {
58
58
  type: String,
59
- enum: ['user', 'admin'],
59
+ enum: ['user', 'admin', 'superadmin', 'limited-admin', 'content-manager', 'developer'],
60
60
  default: 'user'
61
61
  }
62
62
  }, {
@@ -1,10 +1,10 @@
1
1
  const express = require('express');
2
2
  const router = express.Router();
3
3
  const adminController = require('../controllers/admin.controller');
4
- const { basicAuth } = require('../middleware/auth');
4
+ const { adminSessionAuth } = require('../middleware/auth');
5
5
 
6
- // All admin routes protected by basic auth
7
- router.use(basicAuth);
6
+ // All admin routes protected by session auth
7
+ router.use(adminSessionAuth);
8
8
 
9
9
  router.get('/users', adminController.getUsers);
10
10
  router.post('/users/register', adminController.registerUser);
@@ -0,0 +1,13 @@
1
+ const express = require('express');
2
+ const router = express.Router();
3
+ const adminAgentsController = require('../controllers/adminAgents.controller');
4
+ const { adminSessionAuth } = require('../middleware/auth');
5
+
6
+ router.use(adminSessionAuth);
7
+
8
+ router.get('/', adminAgentsController.listAgents);
9
+ router.post('/', adminAgentsController.createAgent);
10
+ router.put('/:id', adminAgentsController.updateAgent);
11
+ router.delete('/:id', adminAgentsController.deleteAgent);
12
+
13
+ module.exports = router;
@@ -1,7 +1,7 @@
1
1
  const express = require('express');
2
2
  const router = express.Router();
3
3
  const multer = require('multer');
4
- const { basicAuth } = require('../middleware/auth');
4
+ const { adminSessionAuth } = require('../middleware/auth');
5
5
  const adminAssetsController = require('../controllers/adminAssets.controller');
6
6
  const { auditMiddleware } = require('../services/auditLogger');
7
7
 
@@ -14,15 +14,15 @@ const upload = multer({
14
14
  }
15
15
  });
16
16
 
17
- router.get('/info', basicAuth, adminAssetsController.getStorageInfo);
18
- router.use('/storage', basicAuth, adminAssetsStorageRoutes);
19
- router.get('/', basicAuth, adminAssetsController.list);
20
- router.get('/:id', basicAuth, adminAssetsController.get);
21
- router.post('/bulk/move-namespace', basicAuth, auditMiddleware('admin.assets.bulk.moveNamespace', { entityType: 'Asset' }), adminAssetsController.bulkMoveNamespace);
22
- router.post('/bulk/set-tags', basicAuth, auditMiddleware('admin.assets.bulk.setTags', { entityType: 'Asset' }), adminAssetsController.bulkSetTags);
23
- router.post('/upload', basicAuth, upload.single('file'), adminAssetsController.upload);
24
- router.post('/:id/replace', basicAuth, upload.single('file'), adminAssetsController.replace);
25
- router.patch('/:id', basicAuth, adminAssetsController.update);
26
- router.delete('/:id', basicAuth, adminAssetsController.delete);
17
+ router.get('/info', adminSessionAuth, adminAssetsController.getStorageInfo);
18
+ router.use('/storage', adminSessionAuth, adminAssetsStorageRoutes);
19
+ router.get('/', adminSessionAuth, adminAssetsController.list);
20
+ router.get('/:id', adminSessionAuth, adminAssetsController.get);
21
+ router.post('/bulk/move-namespace', adminSessionAuth, auditMiddleware('admin.assets.bulk.moveNamespace', { entityType: 'Asset' }), adminAssetsController.bulkMoveNamespace);
22
+ router.post('/bulk/set-tags', adminSessionAuth, auditMiddleware('admin.assets.bulk.setTags', { entityType: 'Asset' }), adminAssetsController.bulkSetTags);
23
+ router.post('/upload', adminSessionAuth, upload.single('file'), adminAssetsController.upload);
24
+ router.post('/:id/replace', adminSessionAuth, upload.single('file'), adminAssetsController.replace);
25
+ router.patch('/:id', adminSessionAuth, adminAssetsController.update);
26
+ router.delete('/:id', adminSessionAuth, adminAssetsController.delete);
27
27
 
28
28
  module.exports = router;
@@ -1,10 +1,10 @@
1
1
  const express = require('express');
2
2
  const router = express.Router();
3
3
 
4
- const { basicAuth } = require('../middleware/auth');
4
+ const { adminSessionAuth } = require('../middleware/auth');
5
5
  const controller = require('../controllers/blogAdmin.controller');
6
6
 
7
- router.use(basicAuth);
7
+ router.use(adminSessionAuth);
8
8
  router.use(express.json({ limit: '2mb' }));
9
9
 
10
10
  router.get('/blog-posts', controller.list);
@@ -1,11 +1,11 @@
1
1
  const express = require('express');
2
2
  const router = express.Router();
3
3
 
4
- const { basicAuth } = require('../middleware/auth');
4
+ const { adminSessionAuth } = require('../middleware/auth');
5
5
  const controller = require('../controllers/blogAiAdmin.controller');
6
6
  const rateLimiter = require('../services/rateLimiter.service');
7
7
 
8
- router.use(basicAuth);
8
+ router.use(adminSessionAuth);
9
9
  router.use(express.json({ limit: '2mb' }));
10
10
 
11
11
  router.post('/blog-ai/generate-field', rateLimiter.limit('blogAiLimiter'), controller.generateField);
@@ -1,11 +1,11 @@
1
1
  const express = require('express');
2
2
  const router = express.Router();
3
3
 
4
- const { basicAuth } = require('../middleware/auth');
4
+ const { adminSessionAuth } = require('../middleware/auth');
5
5
  const controller = require('../controllers/blogAutomationAdmin.controller');
6
6
  const rateLimiter = require('../services/rateLimiter.service');
7
7
 
8
- router.use(basicAuth);
8
+ router.use(adminSessionAuth);
9
9
  router.use(express.json({ limit: '2mb' }));
10
10
 
11
11
  router.get('/blog-automation/config', controller.getConfig);
@@ -1,10 +1,10 @@
1
1
  const express = require('express');
2
2
  const router = express.Router();
3
3
 
4
- const { basicAuth } = require('../middleware/auth');
4
+ const { adminSessionAuth } = require('../middleware/auth');
5
5
  const controller = require('../controllers/adminCache.controller');
6
6
 
7
- router.use(basicAuth);
7
+ router.use(adminSessionAuth);
8
8
 
9
9
  router.get('/config', controller.getConfig);
10
10
  router.put('/config', controller.updateConfig);
@@ -1,7 +1,7 @@
1
1
  const express = require('express');
2
2
  const router = express.Router();
3
3
 
4
- const { basicAuth } = require('../middleware/auth');
4
+ const { adminSessionAuth } = require('../middleware/auth');
5
5
  const ConsoleEntry = require('../models/ConsoleEntry');
6
6
  const ConsoleLog = require('../models/ConsoleLog');
7
7
  const GlobalSetting = require('../models/GlobalSetting');
@@ -21,7 +21,7 @@ function toInt(val, fallback) {
21
21
  return Number.isFinite(n) ? n : fallback;
22
22
  }
23
23
 
24
- router.use(basicAuth);
24
+ router.use(adminSessionAuth);
25
25
 
26
26
  router.get('/config', async (req, res) => {
27
27
  try {
@@ -1,10 +1,10 @@
1
1
  const express = require('express');
2
2
  const router = express.Router();
3
3
 
4
- const { basicAuth } = require('../middleware/auth');
4
+ const { adminSessionAuth } = require('../middleware/auth');
5
5
  const controller = require('../controllers/adminCrons.controller');
6
6
 
7
- router.use(basicAuth);
7
+ router.use(adminSessionAuth);
8
8
 
9
9
  router.get('/', controller.listCronJobs);
10
10
  router.post('/', controller.createCronJob);
@@ -0,0 +1,26 @@
1
+ const express = require('express');
2
+ const router = express.Router();
3
+
4
+ const { adminSessionAuth } = require('../middleware/auth');
5
+ const { auditMiddleware } = require('../services/auditLogger');
6
+ const controller = require('../controllers/adminDataCleanup.controller');
7
+
8
+ router.use(adminSessionAuth);
9
+
10
+ router.get('/overview', controller.getOverview);
11
+
12
+ router.post(
13
+ '/dry-run',
14
+ auditMiddleware('admin.data_cleanup.dry_run', { entityType: 'DataCleanup' }),
15
+ controller.dryRun,
16
+ );
17
+
18
+ router.post(
19
+ '/execute',
20
+ auditMiddleware('admin.data_cleanup.execute', { entityType: 'DataCleanup' }),
21
+ controller.execute,
22
+ );
23
+
24
+ router.get('/infer-fields', controller.inferFields);
25
+
26
+ module.exports = router;
@@ -1,11 +1,11 @@
1
1
  const express = require('express');
2
2
  const router = express.Router();
3
3
 
4
- const { basicAuth } = require('../middleware/auth');
4
+ const { adminSessionAuth } = require('../middleware/auth');
5
5
  const { auditMiddleware } = require('../services/auditLogger');
6
6
  const controller = require('../controllers/adminDbBrowser.controller');
7
7
 
8
- router.use(basicAuth);
8
+ router.use(adminSessionAuth);
9
9
 
10
10
  // Connection profiles
11
11
  router.get('/connections', controller.listConnections);
@@ -1,10 +1,10 @@
1
1
  const express = require('express');
2
2
  const router = express.Router();
3
- const { basicAuth } = require('../middleware/auth');
3
+ const { adminSessionAuth } = require('../middleware/auth');
4
4
  const controller = require('../controllers/adminEjsVirtual.controller');
5
5
  const rateLimiter = require('../services/rateLimiter.service');
6
6
 
7
- router.use(basicAuth);
7
+ router.use(adminSessionAuth);
8
8
 
9
9
  router.get('/files', controller.list);
10
10
  router.get('/file', controller.getFile);
@@ -1,12 +1,12 @@
1
1
  const express = require('express');
2
2
  const router = express.Router();
3
- const { basicAuth } = require('../middleware/auth');
3
+ const { adminSessionAuth } = require('../middleware/auth');
4
4
  const adminFeatureFlagsController = require('../controllers/adminFeatureFlags.controller');
5
5
 
6
- router.get('/', basicAuth, adminFeatureFlagsController.listFlags);
7
- router.get('/:key', basicAuth, adminFeatureFlagsController.getFlag);
8
- router.post('/', basicAuth, adminFeatureFlagsController.createFlag);
9
- router.put('/:key', basicAuth, adminFeatureFlagsController.updateFlag);
10
- router.delete('/:key', basicAuth, adminFeatureFlagsController.deleteFlag);
6
+ router.get('/', adminSessionAuth, adminFeatureFlagsController.listFlags);
7
+ router.get('/:key', adminSessionAuth, adminFeatureFlagsController.getFlag);
8
+ router.post('/', adminSessionAuth, adminFeatureFlagsController.createFlag);
9
+ router.put('/:key', adminSessionAuth, adminFeatureFlagsController.updateFlag);
10
+ router.delete('/:key', adminSessionAuth, adminFeatureFlagsController.deleteFlag);
11
11
 
12
12
  module.exports = router;
@@ -1,11 +1,11 @@
1
1
  const express = require('express');
2
2
  const router = express.Router();
3
3
 
4
- const { basicAuth } = require('../middleware/auth');
4
+ const { adminSessionAuth } = require('../middleware/auth');
5
5
  const adminHeadlessController = require('../controllers/adminHeadless.controller');
6
6
  const rateLimiter = require('../services/rateLimiter.service');
7
7
 
8
- router.use(basicAuth);
8
+ router.use(adminSessionAuth);
9
9
 
10
10
  // Models
11
11
  router.get('/models', adminHeadlessController.listModels);
@@ -1,10 +1,10 @@
1
1
  const express = require('express');
2
2
  const router = express.Router();
3
3
 
4
- const { basicAuth } = require('../middleware/auth');
4
+ const { adminSessionAuth } = require('../middleware/auth');
5
5
  const controller = require('../controllers/adminHealthChecks.controller');
6
6
 
7
- router.use(basicAuth);
7
+ router.use(adminSessionAuth);
8
8
 
9
9
  router.get('/config', controller.getConfig);
10
10
  router.put('/config', controller.updateConfig);
@@ -1,11 +1,11 @@
1
1
  const express = require('express');
2
2
  const router = express.Router();
3
- const { basicAuth } = require('../middleware/auth');
3
+ const { adminSessionAuth } = require('../middleware/auth');
4
4
 
5
5
  const adminI18nController = require('../controllers/adminI18n.controller');
6
6
  const rateLimiter = require('../services/rateLimiter.service');
7
7
 
8
- router.use(basicAuth);
8
+ router.use(adminSessionAuth);
9
9
 
10
10
  router.get('/locales', adminI18nController.listLocales);
11
11
  router.post('/locales', adminI18nController.createLocale);
@@ -1,15 +1,15 @@
1
1
  const express = require('express');
2
2
  const router = express.Router();
3
- const { basicAuth } = require('../middleware/auth');
3
+ const { adminSessionAuth } = require('../middleware/auth');
4
4
 
5
5
  const adminJsonConfigsController = require('../controllers/adminJsonConfigs.controller');
6
6
 
7
- router.get('/', basicAuth, adminJsonConfigsController.list);
8
- router.get('/:id', basicAuth, adminJsonConfigsController.get);
9
- router.post('/', basicAuth, adminJsonConfigsController.create);
10
- router.put('/:id', basicAuth, adminJsonConfigsController.update);
11
- router.post('/:id/regenerate-slug', basicAuth, adminJsonConfigsController.regenerateSlug);
12
- router.post('/:id/clear-cache', basicAuth, adminJsonConfigsController.clearCache);
13
- router.delete('/:id', basicAuth, adminJsonConfigsController.remove);
7
+ router.get('/', adminSessionAuth, adminJsonConfigsController.list);
8
+ router.get('/:id', adminSessionAuth, adminJsonConfigsController.get);
9
+ router.post('/', adminSessionAuth, adminJsonConfigsController.create);
10
+ router.put('/:id', adminSessionAuth, adminJsonConfigsController.update);
11
+ router.post('/:id/regenerate-slug', adminSessionAuth, adminJsonConfigsController.regenerateSlug);
12
+ router.post('/:id/clear-cache', adminSessionAuth, adminJsonConfigsController.clearCache);
13
+ router.delete('/:id', adminSessionAuth, adminJsonConfigsController.remove);
14
14
 
15
15
  module.exports = router;