@burdenoff/vibe-agent 1.0.0

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 (100) hide show
  1. package/.env.example +8 -0
  2. package/LICENSE +22 -0
  3. package/README.md +290 -0
  4. package/dist/app.d.ts +15 -0
  5. package/dist/app.d.ts.map +1 -0
  6. package/dist/app.js +445 -0
  7. package/dist/app.js.map +1 -0
  8. package/dist/cli.d.ts +3 -0
  9. package/dist/cli.d.ts.map +1 -0
  10. package/dist/cli.js +1043 -0
  11. package/dist/cli.js.map +1 -0
  12. package/dist/db/schema.d.ts +145 -0
  13. package/dist/db/schema.d.ts.map +1 -0
  14. package/dist/db/schema.js +536 -0
  15. package/dist/db/schema.js.map +1 -0
  16. package/dist/index.d.ts +2 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +61 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/middleware/ModuleAuth.d.ts +61 -0
  21. package/dist/middleware/ModuleAuth.d.ts.map +1 -0
  22. package/dist/middleware/ModuleAuth.js +220 -0
  23. package/dist/middleware/ModuleAuth.js.map +1 -0
  24. package/dist/middleware/auth.d.ts +3 -0
  25. package/dist/middleware/auth.d.ts.map +1 -0
  26. package/dist/middleware/auth.js +11 -0
  27. package/dist/middleware/auth.js.map +1 -0
  28. package/dist/migrations/remove-notes-prompts.d.ts +13 -0
  29. package/dist/migrations/remove-notes-prompts.d.ts.map +1 -0
  30. package/dist/migrations/remove-notes-prompts.js +148 -0
  31. package/dist/migrations/remove-notes-prompts.js.map +1 -0
  32. package/dist/routes/bookmarks.d.ts +3 -0
  33. package/dist/routes/bookmarks.d.ts.map +1 -0
  34. package/dist/routes/bookmarks.js +186 -0
  35. package/dist/routes/bookmarks.js.map +1 -0
  36. package/dist/routes/config.d.ts +3 -0
  37. package/dist/routes/config.d.ts.map +1 -0
  38. package/dist/routes/config.js +108 -0
  39. package/dist/routes/config.js.map +1 -0
  40. package/dist/routes/files.d.ts +3 -0
  41. package/dist/routes/files.d.ts.map +1 -0
  42. package/dist/routes/files.js +471 -0
  43. package/dist/routes/files.js.map +1 -0
  44. package/dist/routes/git.d.ts +3 -0
  45. package/dist/routes/git.d.ts.map +1 -0
  46. package/dist/routes/git.js +498 -0
  47. package/dist/routes/git.js.map +1 -0
  48. package/dist/routes/moduleRegistry.d.ts +41 -0
  49. package/dist/routes/moduleRegistry.d.ts.map +1 -0
  50. package/dist/routes/moduleRegistry.js +356 -0
  51. package/dist/routes/moduleRegistry.js.map +1 -0
  52. package/dist/routes/notifications.d.ts +3 -0
  53. package/dist/routes/notifications.d.ts.map +1 -0
  54. package/dist/routes/notifications.js +250 -0
  55. package/dist/routes/notifications.js.map +1 -0
  56. package/dist/routes/port-forward.d.ts +3 -0
  57. package/dist/routes/port-forward.d.ts.map +1 -0
  58. package/dist/routes/port-forward.js +205 -0
  59. package/dist/routes/port-forward.js.map +1 -0
  60. package/dist/routes/projects.d.ts +3 -0
  61. package/dist/routes/projects.d.ts.map +1 -0
  62. package/dist/routes/projects.js +442 -0
  63. package/dist/routes/projects.js.map +1 -0
  64. package/dist/routes/ssh.d.ts +3 -0
  65. package/dist/routes/ssh.d.ts.map +1 -0
  66. package/dist/routes/ssh.js +192 -0
  67. package/dist/routes/ssh.js.map +1 -0
  68. package/dist/routes/tasks.d.ts +3 -0
  69. package/dist/routes/tasks.d.ts.map +1 -0
  70. package/dist/routes/tasks.js +183 -0
  71. package/dist/routes/tasks.js.map +1 -0
  72. package/dist/routes/tmux.d.ts +3 -0
  73. package/dist/routes/tmux.d.ts.map +1 -0
  74. package/dist/routes/tmux.js +1191 -0
  75. package/dist/routes/tmux.js.map +1 -0
  76. package/dist/routes/tunnel.d.ts +25 -0
  77. package/dist/routes/tunnel.d.ts.map +1 -0
  78. package/dist/routes/tunnel.js +449 -0
  79. package/dist/routes/tunnel.js.map +1 -0
  80. package/dist/services/ModulePermissions.d.ts +100 -0
  81. package/dist/services/ModulePermissions.d.ts.map +1 -0
  82. package/dist/services/ModulePermissions.js +312 -0
  83. package/dist/services/ModulePermissions.js.map +1 -0
  84. package/dist/services/ModuleRegistryService.d.ts +152 -0
  85. package/dist/services/ModuleRegistryService.d.ts.map +1 -0
  86. package/dist/services/ModuleRegistryService.js +522 -0
  87. package/dist/services/ModuleRegistryService.js.map +1 -0
  88. package/dist/services/agent.service.d.ts +19 -0
  89. package/dist/services/agent.service.d.ts.map +1 -0
  90. package/dist/services/agent.service.js +88 -0
  91. package/dist/services/agent.service.js.map +1 -0
  92. package/dist/services/bootstrap.d.ts +22 -0
  93. package/dist/services/bootstrap.d.ts.map +1 -0
  94. package/dist/services/bootstrap.js +206 -0
  95. package/dist/services/bootstrap.js.map +1 -0
  96. package/dist/services/service-manager.d.ts +50 -0
  97. package/dist/services/service-manager.d.ts.map +1 -0
  98. package/dist/services/service-manager.js +382 -0
  99. package/dist/services/service-manager.js.map +1 -0
  100. package/package.json +107 -0
@@ -0,0 +1,100 @@
1
+ import { FastifyRequest, FastifyReply } from 'fastify';
2
+ export type Permission = 'filesystem' | 'network' | 'database' | 'terminal' | 'system' | 'users' | 'modules' | 'settings' | 'logs' | 'registry' | '*';
3
+ export interface PermissionRule {
4
+ permission: Permission;
5
+ resource?: string;
6
+ action?: string;
7
+ conditions?: string[];
8
+ }
9
+ export interface ModulePermissions {
10
+ moduleId: string;
11
+ permissions: Set<Permission>;
12
+ rules: PermissionRule[];
13
+ grantedAt: Date;
14
+ grantedBy: string;
15
+ temporary?: {
16
+ expiresAt: Date;
17
+ reason: string;
18
+ };
19
+ }
20
+ export declare class ModulePermissionManager {
21
+ private modulePermissions;
22
+ private permissionHierarchy;
23
+ private resourcePatterns;
24
+ constructor();
25
+ /**
26
+ * Initialize permission hierarchy (parent permissions include child permissions)
27
+ */
28
+ private initializePermissionHierarchy;
29
+ /**
30
+ * Grant permissions to a module
31
+ */
32
+ grantPermissions(moduleId: string, permissions: Permission[], grantedBy?: string, rules?: PermissionRule[]): void;
33
+ /**
34
+ * Grant temporary permissions that expire
35
+ */
36
+ grantTemporaryPermissions(moduleId: string, permissions: Permission[], duration: number, // in milliseconds
37
+ reason: string, grantedBy?: string): void;
38
+ /**
39
+ * Revoke permissions from a module
40
+ */
41
+ revokePermissions(moduleId: string, permissions?: Permission[]): void;
42
+ /**
43
+ * Check if module has specific permission
44
+ */
45
+ hasPermission(moduleId: string, permission: Permission, resource?: string): boolean;
46
+ /**
47
+ * Check resource-specific access
48
+ */
49
+ private checkResourceAccess;
50
+ /**
51
+ * Get or create resource pattern
52
+ */
53
+ private getResourcePattern;
54
+ /**
55
+ * Enforce permission check (throws error if not permitted)
56
+ */
57
+ checkPermission(moduleId: string, permission: Permission, resource?: string): void;
58
+ /**
59
+ * Get all permissions for a module
60
+ */
61
+ getModulePermissions(moduleId: string): ModulePermissions | null;
62
+ /**
63
+ * List all modules with their permissions
64
+ */
65
+ listAllPermissions(): Map<string, ModulePermissions>;
66
+ /**
67
+ * Create Fastify middleware for permission checking
68
+ */
69
+ requirePermission(permission: Permission, resource?: string): (request: FastifyRequest, reply: FastifyReply) => Promise<void>;
70
+ /**
71
+ * Create middleware that requires any of the specified permissions
72
+ */
73
+ requireAnyPermission(permissions: Permission[]): (request: FastifyRequest, reply: FastifyReply) => Promise<void>;
74
+ /**
75
+ * Create middleware that requires all specified permissions
76
+ */
77
+ requireAllPermissions(permissions: Permission[]): (request: FastifyRequest, reply: FastifyReply) => Promise<void>;
78
+ /**
79
+ * Audit permission usage
80
+ */
81
+ auditPermissionUsage(moduleId: string, permission: Permission, resource?: string, action?: string): void;
82
+ /**
83
+ * Get permission statistics
84
+ */
85
+ getPermissionStats(): {
86
+ totalModules: number;
87
+ permissionCounts: Record<Permission, number>;
88
+ temporaryPermissions: number;
89
+ expiredPermissions: number;
90
+ };
91
+ /**
92
+ * Clean up expired permissions
93
+ */
94
+ private cleanupExpiredPermissions;
95
+ /**
96
+ * Start cleanup interval for expired permissions
97
+ */
98
+ private startCleanupInterval;
99
+ }
100
+ //# sourceMappingURL=ModulePermissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModulePermissions.d.ts","sourceRoot":"","sources":["../../src/services/ModulePermissions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvD,MAAM,MAAM,UAAU,GAClB,YAAY,GACZ,SAAS,GACT,UAAU,GACV,UAAU,GACV,QAAQ,GACR,OAAO,GACP,SAAS,GACT,UAAU,GACV,MAAM,GACN,UAAU,GACV,GAAG,CAAC;AAER,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IAC7B,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE;QACV,SAAS,EAAE,IAAI,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,qBAAa,uBAAuB;IAClC,OAAO,CAAC,iBAAiB,CAAwC;IACjE,OAAO,CAAC,mBAAmB,CAA4C;IACvE,OAAO,CAAC,gBAAgB,CAA6B;;IAOrD;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAWrC;;OAEG;IACH,gBAAgB,CACd,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,UAAU,EAAE,EACzB,SAAS,GAAE,MAAiB,EAC5B,KAAK,GAAE,cAAc,EAAO,GAC3B,IAAI;IAaP;;OAEG;IACH,yBAAyB,CACvB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,UAAU,EAAE,EACzB,QAAQ,EAAE,MAAM,EAAE,kBAAkB;IACpC,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,MAAiB,GAC3B,IAAI;IAmBP;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,UAAU,EAAE,GAAG,IAAI;IA2BrE;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO;IAkCnF;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA+B3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAOlF;;OAEG;IACH,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAIhE;;OAEG;IACH,kBAAkB,IAAI,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAIpD;;OAEG;IACH,iBAAiB,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,IAC3C,SAAS,cAAc,EAAE,OAAO,YAAY;IA4B5D;;OAEG;IACH,oBAAoB,CAAC,WAAW,EAAE,UAAU,EAAE,IAC9B,SAAS,cAAc,EAAE,OAAO,YAAY;IAyB5D;;OAEG;IACH,qBAAqB,CAAC,WAAW,EAAE,UAAU,EAAE,IAC/B,SAAS,cAAc,EAAE,OAAO,YAAY;IAyB5D;;OAEG;IACH,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAgBxG;;OAEG;IACH,kBAAkB,IAAI;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC7C,oBAAoB,EAAE,MAAM,CAAC;QAC7B,kBAAkB,EAAE,MAAM,CAAC;KAC5B;IA6BD;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAgBjC;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAM7B"}
@@ -0,0 +1,312 @@
1
+ export class ModulePermissionManager {
2
+ modulePermissions = new Map();
3
+ permissionHierarchy = new Map();
4
+ resourcePatterns = new Map();
5
+ constructor() {
6
+ this.initializePermissionHierarchy();
7
+ this.startCleanupInterval();
8
+ }
9
+ /**
10
+ * Initialize permission hierarchy (parent permissions include child permissions)
11
+ */
12
+ initializePermissionHierarchy() {
13
+ this.permissionHierarchy.set('*', [
14
+ 'filesystem', 'network', 'database', 'terminal', 'system',
15
+ 'users', 'modules', 'settings', 'logs', 'registry'
16
+ ]);
17
+ this.permissionHierarchy.set('system', ['terminal', 'logs']);
18
+ this.permissionHierarchy.set('modules', ['registry']);
19
+ this.permissionHierarchy.set('database', ['filesystem']); // Database access may require file access
20
+ }
21
+ /**
22
+ * Grant permissions to a module
23
+ */
24
+ grantPermissions(moduleId, permissions, grantedBy = 'system', rules = []) {
25
+ const modulePermissions = {
26
+ moduleId,
27
+ permissions: new Set(permissions),
28
+ rules,
29
+ grantedAt: new Date(),
30
+ grantedBy
31
+ };
32
+ this.modulePermissions.set(moduleId, modulePermissions);
33
+ console.log(`Granted permissions to module ${moduleId}:`, permissions);
34
+ }
35
+ /**
36
+ * Grant temporary permissions that expire
37
+ */
38
+ grantTemporaryPermissions(moduleId, permissions, duration, // in milliseconds
39
+ reason, grantedBy = 'system') {
40
+ const expiresAt = new Date(Date.now() + duration);
41
+ const modulePermissions = {
42
+ moduleId,
43
+ permissions: new Set(permissions),
44
+ rules: [],
45
+ grantedAt: new Date(),
46
+ grantedBy,
47
+ temporary: {
48
+ expiresAt,
49
+ reason
50
+ }
51
+ };
52
+ this.modulePermissions.set(moduleId, modulePermissions);
53
+ console.log(`Granted temporary permissions to module ${moduleId} until ${expiresAt}:`, permissions);
54
+ }
55
+ /**
56
+ * Revoke permissions from a module
57
+ */
58
+ revokePermissions(moduleId, permissions) {
59
+ const modulePermissions = this.modulePermissions.get(moduleId);
60
+ if (!modulePermissions) {
61
+ console.warn(`Attempted to revoke permissions from non-existent module: ${moduleId}`);
62
+ return;
63
+ }
64
+ if (permissions) {
65
+ // Revoke specific permissions
66
+ permissions.forEach(permission => {
67
+ modulePermissions.permissions.delete(permission);
68
+ });
69
+ // Remove empty permission set
70
+ if (modulePermissions.permissions.size === 0) {
71
+ this.modulePermissions.delete(moduleId);
72
+ }
73
+ console.log(`Revoked specific permissions from module ${moduleId}:`, permissions);
74
+ }
75
+ else {
76
+ // Revoke all permissions
77
+ this.modulePermissions.delete(moduleId);
78
+ console.log(`Revoked all permissions from module ${moduleId}`);
79
+ }
80
+ }
81
+ /**
82
+ * Check if module has specific permission
83
+ */
84
+ hasPermission(moduleId, permission, resource) {
85
+ const modulePermissions = this.modulePermissions.get(moduleId);
86
+ if (!modulePermissions) {
87
+ return false;
88
+ }
89
+ // Check if permissions are expired
90
+ if (modulePermissions.temporary && modulePermissions.temporary.expiresAt < new Date()) {
91
+ this.revokePermissions(moduleId);
92
+ return false;
93
+ }
94
+ // Check direct permission
95
+ if (modulePermissions.permissions.has(permission)) {
96
+ return this.checkResourceAccess(modulePermissions, permission, resource);
97
+ }
98
+ // Check wildcard permission
99
+ if (modulePermissions.permissions.has('*')) {
100
+ return this.checkResourceAccess(modulePermissions, permission, resource);
101
+ }
102
+ // Check hierarchical permissions
103
+ for (const [parentPermission, childPermissions] of this.permissionHierarchy) {
104
+ if (modulePermissions.permissions.has(parentPermission) &&
105
+ childPermissions.includes(permission)) {
106
+ return this.checkResourceAccess(modulePermissions, permission, resource);
107
+ }
108
+ }
109
+ return false;
110
+ }
111
+ /**
112
+ * Check resource-specific access
113
+ */
114
+ checkResourceAccess(modulePermissions, permission, resource) {
115
+ if (!resource) {
116
+ return true; // No resource restriction
117
+ }
118
+ // Check if there are specific rules for this permission
119
+ const relevantRules = modulePermissions.rules.filter(rule => rule.permission === permission || rule.permission === '*');
120
+ if (relevantRules.length === 0) {
121
+ return true; // No specific rules, permission is granted
122
+ }
123
+ // Check if resource matches any allowed pattern
124
+ for (const rule of relevantRules) {
125
+ if (rule.resource) {
126
+ const pattern = this.getResourcePattern(rule.resource);
127
+ if (pattern.test(resource)) {
128
+ return true;
129
+ }
130
+ }
131
+ }
132
+ return false;
133
+ }
134
+ /**
135
+ * Get or create resource pattern
136
+ */
137
+ getResourcePattern(resource) {
138
+ if (!this.resourcePatterns.has(resource)) {
139
+ // Convert glob-like patterns to regex
140
+ const regexPattern = resource
141
+ .replace(/\*/g, '.*')
142
+ .replace(/\?/g, '.');
143
+ this.resourcePatterns.set(resource, new RegExp(`^${regexPattern}$`));
144
+ }
145
+ return this.resourcePatterns.get(resource);
146
+ }
147
+ /**
148
+ * Enforce permission check (throws error if not permitted)
149
+ */
150
+ checkPermission(moduleId, permission, resource) {
151
+ if (!this.hasPermission(moduleId, permission, resource)) {
152
+ const resourceInfo = resource ? ` for resource: ${resource}` : '';
153
+ throw new Error(`Module ${moduleId} does not have permission: ${permission}${resourceInfo}`);
154
+ }
155
+ }
156
+ /**
157
+ * Get all permissions for a module
158
+ */
159
+ getModulePermissions(moduleId) {
160
+ return this.modulePermissions.get(moduleId) || null;
161
+ }
162
+ /**
163
+ * List all modules with their permissions
164
+ */
165
+ listAllPermissions() {
166
+ return new Map(this.modulePermissions);
167
+ }
168
+ /**
169
+ * Create Fastify middleware for permission checking
170
+ */
171
+ requirePermission(permission, resource) {
172
+ return async (request, reply) => {
173
+ const moduleAuth = request.moduleAuth;
174
+ if (!moduleAuth || !moduleAuth.moduleId) {
175
+ reply.code(401).send({
176
+ error: 'Unauthorized',
177
+ message: 'Module authentication required'
178
+ });
179
+ return;
180
+ }
181
+ if (!this.hasPermission(moduleAuth.moduleId, permission, resource)) {
182
+ reply.code(403).send({
183
+ error: 'Forbidden',
184
+ message: `Insufficient permissions: ${permission}${resource ? ` for ${resource}` : ''}`
185
+ });
186
+ return;
187
+ }
188
+ // Add permission info to request
189
+ request.permissionContext = {
190
+ permission,
191
+ resource,
192
+ moduleId: moduleAuth.moduleId
193
+ };
194
+ };
195
+ }
196
+ /**
197
+ * Create middleware that requires any of the specified permissions
198
+ */
199
+ requireAnyPermission(permissions) {
200
+ return async (request, reply) => {
201
+ const moduleAuth = request.moduleAuth;
202
+ if (!moduleAuth || !moduleAuth.moduleId) {
203
+ reply.code(401).send({
204
+ error: 'Unauthorized',
205
+ message: 'Module authentication required'
206
+ });
207
+ return;
208
+ }
209
+ const hasAnyPermission = permissions.some(permission => this.hasPermission(moduleAuth.moduleId, permission));
210
+ if (!hasAnyPermission) {
211
+ reply.code(403).send({
212
+ error: 'Forbidden',
213
+ message: `Insufficient permissions: requires one of ${permissions.join(', ')}`
214
+ });
215
+ return;
216
+ }
217
+ };
218
+ }
219
+ /**
220
+ * Create middleware that requires all specified permissions
221
+ */
222
+ requireAllPermissions(permissions) {
223
+ return async (request, reply) => {
224
+ const moduleAuth = request.moduleAuth;
225
+ if (!moduleAuth || !moduleAuth.moduleId) {
226
+ reply.code(401).send({
227
+ error: 'Unauthorized',
228
+ message: 'Module authentication required'
229
+ });
230
+ return;
231
+ }
232
+ const missingPermissions = permissions.filter(permission => !this.hasPermission(moduleAuth.moduleId, permission));
233
+ if (missingPermissions.length > 0) {
234
+ reply.code(403).send({
235
+ error: 'Forbidden',
236
+ message: `Missing permissions: ${missingPermissions.join(', ')}`
237
+ });
238
+ return;
239
+ }
240
+ };
241
+ }
242
+ /**
243
+ * Audit permission usage
244
+ */
245
+ auditPermissionUsage(moduleId, permission, resource, action) {
246
+ const timestamp = new Date().toISOString();
247
+ const logMessage = `[${timestamp}] Module ${moduleId} used permission ${permission}${resource ? ` on ${resource}` : ''}${action ? ` (${action})` : ''}`;
248
+ console.log(logMessage);
249
+ // In production, this would be logged to an audit system
250
+ // this.auditLogger.log({
251
+ // moduleId,
252
+ // permission,
253
+ // resource,
254
+ // action,
255
+ // timestamp: new Date()
256
+ // });
257
+ }
258
+ /**
259
+ * Get permission statistics
260
+ */
261
+ getPermissionStats() {
262
+ const stats = {
263
+ totalModules: this.modulePermissions.size,
264
+ permissionCounts: {},
265
+ temporaryPermissions: 0,
266
+ expiredPermissions: 0
267
+ };
268
+ const now = new Date();
269
+ for (const [moduleId, modulePermissions] of this.modulePermissions) {
270
+ // Count permissions
271
+ for (const permission of modulePermissions.permissions) {
272
+ stats.permissionCounts[permission] = (stats.permissionCounts[permission] || 0) + 1;
273
+ }
274
+ // Count temporary permissions
275
+ if (modulePermissions.temporary) {
276
+ if (modulePermissions.temporary.expiresAt < now) {
277
+ stats.expiredPermissions++;
278
+ }
279
+ else {
280
+ stats.temporaryPermissions++;
281
+ }
282
+ }
283
+ }
284
+ return stats;
285
+ }
286
+ /**
287
+ * Clean up expired permissions
288
+ */
289
+ cleanupExpiredPermissions() {
290
+ const now = new Date();
291
+ const expiredModules = [];
292
+ for (const [moduleId, modulePermissions] of this.modulePermissions) {
293
+ if (modulePermissions.temporary && modulePermissions.temporary.expiresAt < now) {
294
+ expiredModules.push(moduleId);
295
+ }
296
+ }
297
+ expiredModules.forEach(moduleId => {
298
+ this.revokePermissions(moduleId);
299
+ console.log(`Cleaned up expired permissions for module: ${moduleId}`);
300
+ });
301
+ }
302
+ /**
303
+ * Start cleanup interval for expired permissions
304
+ */
305
+ startCleanupInterval() {
306
+ // Clean up expired permissions every 5 minutes
307
+ setInterval(() => {
308
+ this.cleanupExpiredPermissions();
309
+ }, 5 * 60 * 1000);
310
+ }
311
+ }
312
+ //# sourceMappingURL=ModulePermissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModulePermissions.js","sourceRoot":"","sources":["../../src/services/ModulePermissions.ts"],"names":[],"mappings":"AAmCA,MAAM,OAAO,uBAAuB;IAC1B,iBAAiB,GAAG,IAAI,GAAG,EAA6B,CAAC;IACzD,mBAAmB,GAAkC,IAAI,GAAG,EAAE,CAAC;IAC/D,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;IAErD;QACE,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACrC,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;IAED;;OAEG;IACK,6BAA6B;QACnC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,EAAE;YAChC,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ;YACzD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU;SACnD,CAAC,CAAC;QAEH,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,0CAA0C;IACtG,CAAC;IAED;;OAEG;IACH,gBAAgB,CACd,QAAgB,EAChB,WAAyB,EACzB,YAAoB,QAAQ,EAC5B,QAA0B,EAAE;QAE5B,MAAM,iBAAiB,GAAsB;YAC3C,QAAQ;YACR,WAAW,EAAE,IAAI,GAAG,CAAC,WAAW,CAAC;YACjC,KAAK;YACL,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,SAAS;SACV,CAAC;QAEF,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,iCAAiC,QAAQ,GAAG,EAAE,WAAW,CAAC,CAAC;IACzE,CAAC;IAED;;OAEG;IACH,yBAAyB,CACvB,QAAgB,EAChB,WAAyB,EACzB,QAAgB,EAAE,kBAAkB;IACpC,MAAc,EACd,YAAoB,QAAQ;QAE5B,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC;QAElD,MAAM,iBAAiB,GAAsB;YAC3C,QAAQ;YACR,WAAW,EAAE,IAAI,GAAG,CAAC,WAAW,CAAC;YACjC,KAAK,EAAE,EAAE;YACT,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,SAAS;YACT,SAAS,EAAE;gBACT,SAAS;gBACT,MAAM;aACP;SACF,CAAC;QAEF,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,2CAA2C,QAAQ,UAAU,SAAS,GAAG,EAAE,WAAW,CAAC,CAAC;IACtG,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,QAAgB,EAAE,WAA0B;QAC5D,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE/D,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,6DAA6D,QAAQ,EAAE,CAAC,CAAC;YACtF,OAAO;QACT,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,8BAA8B;YAC9B,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;gBAC/B,iBAAiB,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;YAEH,8BAA8B;YAC9B,IAAI,iBAAiB,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBAC7C,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1C,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,4CAA4C,QAAQ,GAAG,EAAE,WAAW,CAAC,CAAC;QACpF,CAAC;aAAM,CAAC;YACN,yBAAyB;YACzB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,uCAAuC,QAAQ,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,QAAgB,EAAE,UAAsB,EAAE,QAAiB;QACvE,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE/D,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,mCAAmC;QACnC,IAAI,iBAAiB,CAAC,SAAS,IAAI,iBAAiB,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;YACtF,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YACjC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,0BAA0B;QAC1B,IAAI,iBAAiB,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAClD,OAAO,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC3E,CAAC;QAED,4BAA4B;QAC5B,IAAI,iBAAiB,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC3E,CAAC;QAED,iCAAiC;QACjC,KAAK,MAAM,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC5E,IAAI,iBAAiB,CAAC,WAAW,CAAC,GAAG,CAAC,gBAAgB,CAAC;gBACnD,gBAAgB,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC1C,OAAO,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,mBAAmB,CACzB,iBAAoC,EACpC,UAAsB,EACtB,QAAiB;QAEjB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,IAAI,CAAC,CAAC,0BAA0B;QACzC,CAAC;QAED,wDAAwD;QACxD,MAAM,aAAa,GAAG,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAC1D,IAAI,CAAC,UAAU,KAAK,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,GAAG,CAC1D,CAAC;QAEF,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,CAAC,2CAA2C;QAC1D,CAAC;QAED,gDAAgD;QAChD,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvD,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC3B,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,QAAgB;QACzC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzC,sCAAsC;YACtC,MAAM,YAAY,GAAG,QAAQ;iBAC1B,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;iBACpB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAEvB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,MAAM,CAAC,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC;QACvE,CAAC;QAED,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,QAAgB,EAAE,UAAsB,EAAE,QAAiB;QACzE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC;YACxD,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,kBAAkB,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,UAAU,QAAQ,8BAA8B,UAAU,GAAG,YAAY,EAAE,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,QAAgB;QACnC,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,kBAAkB;QAChB,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,UAAsB,EAAE,QAAiB;QACzD,OAAO,KAAK,EAAE,OAAuB,EAAE,KAAmB,EAAE,EAAE;YAC5D,MAAM,UAAU,GAAI,OAAe,CAAC,UAAU,CAAC;YAE/C,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;gBACxC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACnB,KAAK,EAAE,cAAc;oBACrB,OAAO,EAAE,gCAAgC;iBAC1C,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC;gBACnE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACnB,KAAK,EAAE,WAAW;oBAClB,OAAO,EAAE,6BAA6B,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;iBACxF,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,iCAAiC;YAChC,OAAe,CAAC,iBAAiB,GAAG;gBACnC,UAAU;gBACV,QAAQ;gBACR,QAAQ,EAAE,UAAU,CAAC,QAAQ;aAC9B,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,WAAyB;QAC5C,OAAO,KAAK,EAAE,OAAuB,EAAE,KAAmB,EAAE,EAAE;YAC5D,MAAM,UAAU,GAAI,OAAe,CAAC,UAAU,CAAC;YAE/C,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;gBACxC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACnB,KAAK,EAAE,cAAc;oBACrB,OAAO,EAAE,gCAAgC;iBAC1C,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,MAAM,gBAAgB,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CACrD,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,CACpD,CAAC;YAEF,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACnB,KAAK,EAAE,WAAW;oBAClB,OAAO,EAAE,6CAA6C,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBAC/E,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,qBAAqB,CAAC,WAAyB;QAC7C,OAAO,KAAK,EAAE,OAAuB,EAAE,KAAmB,EAAE,EAAE;YAC5D,MAAM,UAAU,GAAI,OAAe,CAAC,UAAU,CAAC;YAE/C,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;gBACxC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACnB,KAAK,EAAE,cAAc;oBACrB,OAAO,EAAE,gCAAgC;iBAC1C,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,MAAM,kBAAkB,GAAG,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CACzD,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,CACrD,CAAC;YAEF,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACnB,KAAK,EAAE,WAAW;oBAClB,OAAO,EAAE,wBAAwB,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBACjE,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,QAAgB,EAAE,UAAsB,EAAE,QAAiB,EAAE,MAAe;QAC/F,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,UAAU,GAAG,IAAI,SAAS,YAAY,QAAQ,oBAAoB,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAExJ,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAExB,yDAAyD;QACzD,yBAAyB;QACzB,cAAc;QACd,gBAAgB;QAChB,cAAc;QACd,YAAY;QACZ,0BAA0B;QAC1B,MAAM;IACR,CAAC;IAED;;OAEG;IACH,kBAAkB;QAMhB,MAAM,KAAK,GAAG;YACZ,YAAY,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI;YACzC,gBAAgB,EAAE,EAAgC;YAClD,oBAAoB,EAAE,CAAC;YACvB,kBAAkB,EAAE,CAAC;SACtB,CAAC;QAEF,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QAEvB,KAAK,MAAM,CAAC,QAAQ,EAAE,iBAAiB,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACnE,oBAAoB;YACpB,KAAK,MAAM,UAAU,IAAI,iBAAiB,CAAC,WAAW,EAAE,CAAC;gBACvD,KAAK,CAAC,gBAAgB,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACrF,CAAC;YAED,8BAA8B;YAC9B,IAAI,iBAAiB,CAAC,SAAS,EAAE,CAAC;gBAChC,IAAI,iBAAiB,CAAC,SAAS,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC;oBAChD,KAAK,CAAC,kBAAkB,EAAE,CAAC;gBAC7B,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,oBAAoB,EAAE,CAAC;gBAC/B,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,yBAAyB;QAC/B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,cAAc,GAAa,EAAE,CAAC;QAEpC,KAAK,MAAM,CAAC,QAAQ,EAAE,iBAAiB,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACnE,IAAI,iBAAiB,CAAC,SAAS,IAAI,iBAAiB,CAAC,SAAS,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC;gBAC/E,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAED,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAChC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,8CAA8C,QAAQ,EAAE,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,oBAAoB;QAC1B,+CAA+C;QAC/C,WAAW,CAAC,GAAG,EAAE;YACf,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACnC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACpB,CAAC;CACF"}
@@ -0,0 +1,152 @@
1
+ import { EventEmitter } from 'events';
2
+ export interface ModuleManifest {
3
+ name: string;
4
+ displayName: string;
5
+ version: string;
6
+ description: string;
7
+ author: string;
8
+ category: string;
9
+ tags: string[];
10
+ main: string;
11
+ icon: string;
12
+ permissions: string[];
13
+ compatibility: {
14
+ vibecontrols: string;
15
+ platforms: string[];
16
+ };
17
+ api: {
18
+ backend: {
19
+ port: number;
20
+ endpoints: string[];
21
+ };
22
+ frontend: {
23
+ port: number;
24
+ route: string;
25
+ };
26
+ };
27
+ dependencies: Record<string, string>;
28
+ configuration: Record<string, any>;
29
+ features: string[];
30
+ screenshots?: string[];
31
+ documentation: {
32
+ readme: string;
33
+ userGuide?: string;
34
+ developerGuide?: string;
35
+ api?: string;
36
+ };
37
+ }
38
+ export interface RegisteredModule extends ModuleManifest {
39
+ registeredAt: Date;
40
+ lastHeartbeat: Date;
41
+ status: 'running' | 'stopped' | 'error' | 'starting' | 'stopping';
42
+ health?: {
43
+ healthy: boolean;
44
+ checks: Record<string, any>;
45
+ timestamp: Date;
46
+ };
47
+ metrics?: {
48
+ uptime: number;
49
+ memory: any;
50
+ cpu?: any;
51
+ pid: number;
52
+ };
53
+ source: {
54
+ type: 'local' | 'remote' | 'marketplace' | 'container';
55
+ url?: string;
56
+ registeredAt: string;
57
+ };
58
+ }
59
+ export interface ModuleInstallation {
60
+ id: string;
61
+ moduleId: string;
62
+ version: string;
63
+ source: ModuleSource;
64
+ installedAt: Date;
65
+ status: 'pending' | 'downloading' | 'installing' | 'installed' | 'failed';
66
+ error?: string;
67
+ progress?: number;
68
+ logs?: string[];
69
+ }
70
+ export interface ModuleSource {
71
+ type: 'remote' | 'marketplace' | 'container';
72
+ url: string;
73
+ credentials?: {
74
+ username?: string;
75
+ password?: string;
76
+ token?: string;
77
+ };
78
+ }
79
+ export interface ModuleStats {
80
+ totalModules: number;
81
+ activeModules: number;
82
+ stoppedModules: number;
83
+ errorModules: number;
84
+ totalInstallations: number;
85
+ categoryCounts: Record<string, number>;
86
+ recentActivity: Array<{
87
+ type: 'register' | 'unregister' | 'install' | 'activate' | 'deactivate';
88
+ moduleId: string;
89
+ timestamp: Date;
90
+ }>;
91
+ }
92
+ export declare class ModuleRegistryService extends EventEmitter {
93
+ private activeModules;
94
+ private availableModules;
95
+ private installHistory;
96
+ private healthChecks;
97
+ private moduleProcesses;
98
+ private recentActivity;
99
+ constructor();
100
+ registerModule(moduleData: Partial<RegisteredModule>): Promise<{
101
+ success: boolean;
102
+ message: string;
103
+ }>;
104
+ unregisterModule(moduleId: string): Promise<{
105
+ success: boolean;
106
+ message: string;
107
+ }>;
108
+ activateModule(moduleId: string): Promise<{
109
+ success: boolean;
110
+ message: string;
111
+ }>;
112
+ deactivateModule(moduleId: string): Promise<{
113
+ success: boolean;
114
+ message: string;
115
+ }>;
116
+ installModule(moduleId: string, source: ModuleSource, version?: string): Promise<ModuleInstallation>;
117
+ listModules(): Promise<RegisteredModule[]>;
118
+ getModule(moduleId: string): Promise<RegisteredModule | null>;
119
+ searchModules(query?: string, category?: string, tags?: string[], status?: 'active' | 'inactive' | 'all', limit?: number, offset?: number): Promise<RegisteredModule[]>;
120
+ getStats(): Promise<ModuleStats>;
121
+ updateHeartbeat(moduleId: string, heartbeatData: {
122
+ timestamp: string;
123
+ status: 'healthy' | 'unhealthy' | 'warning';
124
+ metrics?: any;
125
+ }): Promise<{
126
+ success: boolean;
127
+ message: string;
128
+ }>;
129
+ checkModuleHealth(moduleId: string): Promise<any>;
130
+ private validateModule;
131
+ private checkPortConflicts;
132
+ private startHealthMonitoring;
133
+ private stopHealthMonitoring;
134
+ private startModuleProcesses;
135
+ private stopModuleProcesses;
136
+ private installFromRemote;
137
+ private installFromMarketplace;
138
+ private installFromContainer;
139
+ private generateInstallationId;
140
+ private logActivity;
141
+ private startCleanupInterval;
142
+ getInstallationHistory(): Promise<ModuleInstallation[]>;
143
+ getInstallation(installationId: string): Promise<ModuleInstallation | null>;
144
+ getModuleLogs(moduleId: string, options?: {
145
+ limit?: number;
146
+ since?: Date;
147
+ level?: 'error' | 'warn' | 'info' | 'debug';
148
+ }): Promise<any[]>;
149
+ bulkOperation(operation: 'activate' | 'deactivate' | 'restart' | 'uninstall', moduleIds: string[]): Promise<any[]>;
150
+ subscribeToEvents(callback: (event: any) => void): () => void;
151
+ }
152
+ //# sourceMappingURL=ModuleRegistryService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModuleRegistryService.d.ts","sourceRoot":"","sources":["../../src/services/ModuleRegistryService.ts"],"names":[],"mappings":"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"}