@morojs/moro 1.5.3 → 1.5.4

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 (36) hide show
  1. package/dist/core/auth/morojs-adapter.js +23 -12
  2. package/dist/core/auth/morojs-adapter.js.map +1 -1
  3. package/dist/core/http/http-server.js +12 -8
  4. package/dist/core/http/http-server.js.map +1 -1
  5. package/dist/core/logger/filters.js +12 -4
  6. package/dist/core/logger/filters.js.map +1 -1
  7. package/dist/core/logger/logger.d.ts +44 -0
  8. package/dist/core/logger/logger.js +550 -60
  9. package/dist/core/logger/logger.js.map +1 -1
  10. package/dist/core/middleware/built-in/request-logger.js +4 -2
  11. package/dist/core/middleware/built-in/request-logger.js.map +1 -1
  12. package/dist/core/modules/auto-discovery.d.ts +1 -0
  13. package/dist/core/modules/auto-discovery.js +9 -5
  14. package/dist/core/modules/auto-discovery.js.map +1 -1
  15. package/dist/core/modules/modules.d.ts +1 -0
  16. package/dist/core/modules/modules.js +8 -2
  17. package/dist/core/modules/modules.js.map +1 -1
  18. package/dist/core/networking/adapters/ws-adapter.d.ts +1 -0
  19. package/dist/core/networking/adapters/ws-adapter.js +3 -1
  20. package/dist/core/networking/adapters/ws-adapter.js.map +1 -1
  21. package/dist/core/networking/service-discovery.d.ts +1 -0
  22. package/dist/core/networking/service-discovery.js +23 -11
  23. package/dist/core/networking/service-discovery.js.map +1 -1
  24. package/dist/types/logger.d.ts +3 -0
  25. package/package.json +1 -1
  26. package/src/core/auth/morojs-adapter.ts +25 -12
  27. package/src/core/database/README.md +26 -16
  28. package/src/core/http/http-server.ts +15 -12
  29. package/src/core/logger/filters.ts +12 -4
  30. package/src/core/logger/logger.ts +616 -63
  31. package/src/core/middleware/built-in/request-logger.ts +6 -2
  32. package/src/core/modules/auto-discovery.ts +13 -5
  33. package/src/core/modules/modules.ts +9 -5
  34. package/src/core/networking/adapters/ws-adapter.ts +3 -1
  35. package/src/core/networking/service-discovery.ts +23 -9
  36. package/src/types/logger.ts +3 -0
@@ -1,12 +1,16 @@
1
1
  // Simple request logging middleware
2
+ import { createFrameworkLogger } from '../../logger';
3
+
4
+ const logger = createFrameworkLogger('RequestLogger');
5
+
2
6
  export const requestLogger = async (context: any): Promise<void> => {
3
7
  const startTime = Date.now();
4
8
 
5
- console.log(`[${new Date().toISOString()}] ${context.request?.method} ${context.request?.path}`);
9
+ logger.info(`${context.request?.method} ${context.request?.path}`, 'RequestLogger');
6
10
 
7
11
  // Log completion after response
8
12
  context.onComplete = () => {
9
13
  const duration = Date.now() - startTime;
10
- console.log(`Request completed in ${duration}ms`);
14
+ logger.info(`Request completed in ${duration}ms`, 'RequestLogger');
11
15
  };
12
16
  };
@@ -3,10 +3,12 @@ import { readdirSync, statSync } from 'fs';
3
3
  import { join, extname } from 'path';
4
4
  import { ModuleConfig } from '../../types/module';
5
5
  import { DiscoveryOptions } from '../../types/discovery';
6
+ import { createFrameworkLogger } from '../logger';
6
7
 
7
8
  export class ModuleDiscovery {
8
9
  private baseDir: string;
9
10
  private options: DiscoveryOptions;
11
+ private discoveryLogger = createFrameworkLogger('MODULE_DISCOVERY');
10
12
 
11
13
  constructor(baseDir: string = process.cwd(), options: DiscoveryOptions = {}) {
12
14
  this.baseDir = baseDir;
@@ -28,12 +30,14 @@ export class ModuleDiscovery {
28
30
  const module = await this.loadModule(modulePath);
29
31
  if (module) {
30
32
  modules.push(module);
31
- console.log(
33
+ this.discoveryLogger.info(
32
34
  `Auto-discovered module: ${module.name}@${module.version} from ${modulePath}`
33
35
  );
34
36
  }
35
37
  } catch (error) {
36
- console.warn(`Failed to load module from ${modulePath}:`, error);
38
+ this.discoveryLogger.warn(`Failed to load module from ${modulePath}`, 'MODULE_DISCOVERY', {
39
+ error: error instanceof Error ? error.message : String(error),
40
+ });
37
41
  }
38
42
  }
39
43
 
@@ -63,7 +67,9 @@ export class ModuleDiscovery {
63
67
  const module = await this.loadModule(indexPath);
64
68
  if (module) {
65
69
  modules.push(module);
66
- console.log(`Auto-discovered module directory: ${module.name} from ${item}/`);
70
+ this.discoveryLogger.info(
71
+ `Auto-discovered module directory: ${module.name} from ${item}/`
72
+ );
67
73
  }
68
74
  }
69
75
  } catch {
@@ -77,7 +83,9 @@ export class ModuleDiscovery {
77
83
  const module = await this.loadModule(altPath);
78
84
  if (module) {
79
85
  modules.push(module);
80
- console.log(`Auto-discovered module: ${module.name} from ${item}/${alt}`);
86
+ this.discoveryLogger.info(
87
+ `Auto-discovered module: ${module.name} from ${item}/${alt}`
88
+ );
81
89
  break;
82
90
  }
83
91
  }
@@ -177,7 +185,7 @@ export class ModuleDiscovery {
177
185
  modulePaths.forEach(path => {
178
186
  try {
179
187
  fs.watchFile(path, async () => {
180
- console.log(`Module file changed: ${path}`);
188
+ this.discoveryLogger.info(`Module file changed: ${path}`);
181
189
  const modules = await this.discoverModules();
182
190
  callback(modules);
183
191
  });
@@ -4,6 +4,7 @@ import path from 'path';
4
4
  import { Container } from '../utilities';
5
5
  import { ModuleConfig } from '../../types/module';
6
6
  import { ModuleDefinition, ModuleRoute, ModuleSocket } from '../../types/module';
7
+ import { createFrameworkLogger } from '../logger';
7
8
 
8
9
  // Module Definition Function
9
10
  export function defineModule(definition: ModuleDefinition): ModuleConfig {
@@ -66,6 +67,8 @@ export function defineModule(definition: ModuleDefinition): ModuleConfig {
66
67
 
67
68
  // Module Loader Class
68
69
  export class ModuleLoader {
70
+ private moduleLogger = createFrameworkLogger('MODULE_LOADER');
71
+
69
72
  constructor(private container: Container) {}
70
73
 
71
74
  async discoverModules(directory: string): Promise<ModuleConfig[]> {
@@ -91,15 +94,16 @@ export class ModuleLoader {
91
94
  }
92
95
  }
93
96
  } catch (error) {
94
- console.warn(
95
- `⚠️ Could not load module from ${modulePath}:`,
96
- error instanceof Error ? error.message : String(error)
97
- );
97
+ this.moduleLogger.warn(`Could not load module from ${modulePath}`, 'MODULE_LOADER', {
98
+ error: error instanceof Error ? error.message : String(error),
99
+ });
98
100
  }
99
101
  }
100
102
  }
101
103
  } catch (error) {
102
- console.error('Failed to discover modules:', error);
104
+ this.moduleLogger.error('Failed to discover modules', 'MODULE_LOADER', {
105
+ error: error instanceof Error ? error.message : String(error),
106
+ });
103
107
  }
104
108
 
105
109
  return modules;
@@ -9,6 +9,7 @@ import {
9
9
  WebSocketEmitter,
10
10
  WebSocketMiddleware,
11
11
  } from '../websocket-adapter';
12
+ import { createFrameworkLogger } from '../../logger';
12
13
 
13
14
  /**
14
15
  * Native WebSocket adapter using the 'ws' library
@@ -18,6 +19,7 @@ export class WSAdapter implements WebSocketAdapter {
18
19
  private wss: any; // WebSocket server instance
19
20
  private namespaces = new Map<string, WSNamespaceWrapper>();
20
21
  private connections = new Map<string, WSConnectionWrapper>();
22
+ private wsLogger = createFrameworkLogger('WEBSOCKET_ADAPTER');
21
23
  private customIdGenerator?: () => string;
22
24
  private connectionCounter = 0;
23
25
 
@@ -98,7 +100,7 @@ export class WSAdapter implements WebSocketAdapter {
98
100
  // ws library handles compression at the browser level
99
101
  // This is a no-op but kept for interface compatibility
100
102
  if (enabled) {
101
- console.warn('Compression is handled automatically by the ws library and browsers');
103
+ this.wsLogger.warn('Compression is handled automatically by the ws library and browsers');
102
104
  }
103
105
  }
104
106
 
@@ -1,5 +1,6 @@
1
1
  // Service Discovery Client for Microservices
2
2
  // Supports Consul, Kubernetes, and in-memory registry
3
+ import { createFrameworkLogger } from '../logger';
3
4
 
4
5
  export interface ServiceInfo {
5
6
  name: string;
@@ -23,6 +24,7 @@ export class ServiceRegistry {
23
24
  private services = new Map<string, ServiceInfo[]>();
24
25
  private options: ServiceDiscoveryOptions;
25
26
  private healthCheckInterval?: NodeJS.Timeout;
27
+ private serviceLogger = createFrameworkLogger('SERVICE_DISCOVERY');
26
28
 
27
29
  constructor(options: ServiceDiscoveryOptions) {
28
30
  this.options = options;
@@ -44,7 +46,7 @@ export class ServiceRegistry {
44
46
  break;
45
47
  }
46
48
 
47
- console.log(`Service registered: ${name}@${service.host}:${service.port}`);
49
+ this.serviceLogger.info(`Service registered: ${name}@${service.host}:${service.port}`);
48
50
  }
49
51
 
50
52
  async discover(serviceName: string): Promise<ServiceInfo[]> {
@@ -73,7 +75,7 @@ export class ServiceRegistry {
73
75
  break;
74
76
  }
75
77
 
76
- console.log(`Service deregistered: ${serviceName}`);
78
+ this.serviceLogger.info(`Service deregistered: ${serviceName}`);
77
79
  }
78
80
 
79
81
  // In-memory registry methods
@@ -121,7 +123,9 @@ export class ServiceRegistry {
121
123
  throw new Error(`Consul registration failed: ${response.statusText}`);
122
124
  }
123
125
  } catch (error) {
124
- console.error('Failed to register with Consul:', error);
126
+ this.serviceLogger.error('Failed to register with Consul', 'SERVICE_DISCOVERY', {
127
+ error: error instanceof Error ? error.message : String(error),
128
+ });
125
129
  // Fallback to in-memory
126
130
  this.registerInMemory(service);
127
131
  }
@@ -150,7 +154,9 @@ export class ServiceRegistry {
150
154
  metadata: entry.Service.Meta,
151
155
  }));
152
156
  } catch (error) {
153
- console.error('Failed to discover from Consul:', error);
157
+ this.serviceLogger.error('Failed to discover from Consul', 'SERVICE_DISCOVERY', {
158
+ error: error instanceof Error ? error.message : String(error),
159
+ });
154
160
  return this.discoverFromMemory(serviceName);
155
161
  }
156
162
  }
@@ -163,7 +169,9 @@ export class ServiceRegistry {
163
169
  method: 'PUT',
164
170
  });
165
171
  } catch (error) {
166
- console.error('Failed to deregister from Consul:', error);
172
+ this.serviceLogger.error('Failed to deregister from Consul', 'SERVICE_DISCOVERY', {
173
+ error: error instanceof Error ? error.message : String(error),
174
+ });
167
175
  }
168
176
  }
169
177
 
@@ -171,7 +179,7 @@ export class ServiceRegistry {
171
179
  private async registerWithKubernetes(service: ServiceInfo): Promise<void> {
172
180
  // In Kubernetes, services are registered via Service/Endpoints resources
173
181
  // This would typically be handled by the K8s API, not application code
174
- console.log(`K8s service registration: ${service.name} (handled by Kubernetes)`);
182
+ this.serviceLogger.info(`K8s service registration: ${service.name} (handled by Kubernetes)`);
175
183
 
176
184
  // Fallback to in-memory for local development
177
185
  this.registerInMemory(service);
@@ -196,7 +204,9 @@ export class ServiceRegistry {
196
204
  },
197
205
  ];
198
206
  } catch (error) {
199
- console.error('Failed to discover from Kubernetes:', error);
207
+ this.serviceLogger.error('Failed to discover from Kubernetes', 'SERVICE_DISCOVERY', {
208
+ error: error instanceof Error ? error.message : String(error),
209
+ });
200
210
  return this.discoverFromMemory(serviceName);
201
211
  }
202
212
  }
@@ -224,12 +234,16 @@ export class ServiceRegistry {
224
234
  );
225
235
 
226
236
  if (!response.ok) {
227
- console.warn(`Health check failed for ${serviceName}: ${response.statusText}`);
237
+ this.serviceLogger.warn(
238
+ `Health check failed for ${serviceName}: ${response.statusText}`
239
+ );
228
240
  // Remove unhealthy service
229
241
  this.removeUnhealthyService(serviceName, service);
230
242
  }
231
243
  } catch (error) {
232
- console.warn(`Health check failed for ${serviceName}:`, error);
244
+ this.serviceLogger.warn(`Health check failed for ${serviceName}`, 'SERVICE_DISCOVERY', {
245
+ error: error instanceof Error ? error.message : String(error),
246
+ });
233
247
  this.removeUnhealthyService(serviceName, service);
234
248
  }
235
249
  }
@@ -30,6 +30,7 @@ export interface LoggerOptions {
30
30
  outputs?: LogOutput[];
31
31
  filters?: LogFilter[];
32
32
  maxEntries?: number;
33
+ maxBufferSize?: number;
33
34
  }
34
35
 
35
36
  export interface LogOutput {
@@ -78,6 +79,7 @@ export interface LogMetrics {
78
79
  averageLogRate: number;
79
80
  errorRate: number;
80
81
  memoryUsage: number;
82
+ outputErrors?: Record<string, number>;
81
83
  }
82
84
 
83
85
  export interface ColorScheme {
@@ -90,4 +92,5 @@ export interface ColorScheme {
90
92
  context: string;
91
93
  metadata: string;
92
94
  performance: string;
95
+ reset: string;
93
96
  }