@nahisaho/musubix-core 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 (214) hide show
  1. package/bin/musubix.js +18 -0
  2. package/dist/__tests__/index.test.d.ts +2 -0
  3. package/dist/__tests__/index.test.d.ts.map +1 -0
  4. package/dist/__tests__/index.test.js +27 -0
  5. package/dist/__tests__/index.test.js.map +1 -0
  6. package/dist/auth/auth-manager.d.ts +320 -0
  7. package/dist/auth/auth-manager.d.ts.map +1 -0
  8. package/dist/auth/auth-manager.js +580 -0
  9. package/dist/auth/auth-manager.js.map +1 -0
  10. package/dist/cli/base.d.ts +58 -0
  11. package/dist/cli/base.d.ts.map +1 -0
  12. package/dist/cli/base.js +93 -0
  13. package/dist/cli/base.js.map +1 -0
  14. package/dist/cli/commands/help.d.ts +17 -0
  15. package/dist/cli/commands/help.d.ts.map +1 -0
  16. package/dist/cli/commands/help.js +228 -0
  17. package/dist/cli/commands/help.js.map +1 -0
  18. package/dist/cli/commands/index.d.ts +14 -0
  19. package/dist/cli/commands/index.d.ts.map +1 -0
  20. package/dist/cli/commands/index.js +25 -0
  21. package/dist/cli/commands/index.js.map +1 -0
  22. package/dist/cli/commands/init.d.ts +38 -0
  23. package/dist/cli/commands/init.d.ts.map +1 -0
  24. package/dist/cli/commands/init.js +258 -0
  25. package/dist/cli/commands/init.js.map +1 -0
  26. package/dist/cli/index.d.ts +9 -0
  27. package/dist/cli/index.d.ts.map +1 -0
  28. package/dist/cli/index.js +9 -0
  29. package/dist/cli/index.js.map +1 -0
  30. package/dist/codegen/coding-standards.d.ts +250 -0
  31. package/dist/codegen/coding-standards.d.ts.map +1 -0
  32. package/dist/codegen/coding-standards.js +976 -0
  33. package/dist/codegen/coding-standards.js.map +1 -0
  34. package/dist/codegen/coverage-reporter.d.ts +264 -0
  35. package/dist/codegen/coverage-reporter.d.ts.map +1 -0
  36. package/dist/codegen/coverage-reporter.js +697 -0
  37. package/dist/codegen/coverage-reporter.js.map +1 -0
  38. package/dist/codegen/dependency-analyzer.d.ts +271 -0
  39. package/dist/codegen/dependency-analyzer.d.ts.map +1 -0
  40. package/dist/codegen/dependency-analyzer.js +661 -0
  41. package/dist/codegen/dependency-analyzer.js.map +1 -0
  42. package/dist/codegen/generator.d.ts +275 -0
  43. package/dist/codegen/generator.d.ts.map +1 -0
  44. package/dist/codegen/generator.js +781 -0
  45. package/dist/codegen/generator.js.map +1 -0
  46. package/dist/codegen/index.d.ts +18 -0
  47. package/dist/codegen/index.d.ts.map +1 -0
  48. package/dist/codegen/index.js +27 -0
  49. package/dist/codegen/index.js.map +1 -0
  50. package/dist/codegen/integration-test-generator.d.ts +312 -0
  51. package/dist/codegen/integration-test-generator.d.ts.map +1 -0
  52. package/dist/codegen/integration-test-generator.js +765 -0
  53. package/dist/codegen/integration-test-generator.js.map +1 -0
  54. package/dist/codegen/pattern-conformance.d.ts +309 -0
  55. package/dist/codegen/pattern-conformance.d.ts.map +1 -0
  56. package/dist/codegen/pattern-conformance.js +590 -0
  57. package/dist/codegen/pattern-conformance.js.map +1 -0
  58. package/dist/codegen/quality-metrics.d.ts +235 -0
  59. package/dist/codegen/quality-metrics.d.ts.map +1 -0
  60. package/dist/codegen/quality-metrics.js +439 -0
  61. package/dist/codegen/quality-metrics.js.map +1 -0
  62. package/dist/codegen/security-scanner.d.ts +179 -0
  63. package/dist/codegen/security-scanner.d.ts.map +1 -0
  64. package/dist/codegen/security-scanner.js +495 -0
  65. package/dist/codegen/security-scanner.js.map +1 -0
  66. package/dist/codegen/static-analyzer.d.ts +188 -0
  67. package/dist/codegen/static-analyzer.d.ts.map +1 -0
  68. package/dist/codegen/static-analyzer.js +490 -0
  69. package/dist/codegen/static-analyzer.js.map +1 -0
  70. package/dist/codegen/unit-test-generator.d.ts +289 -0
  71. package/dist/codegen/unit-test-generator.d.ts.map +1 -0
  72. package/dist/codegen/unit-test-generator.js +634 -0
  73. package/dist/codegen/unit-test-generator.js.map +1 -0
  74. package/dist/design/adr-generator.d.ts +227 -0
  75. package/dist/design/adr-generator.d.ts.map +1 -0
  76. package/dist/design/adr-generator.js +423 -0
  77. package/dist/design/adr-generator.js.map +1 -0
  78. package/dist/design/c4-generator.d.ts +267 -0
  79. package/dist/design/c4-generator.d.ts.map +1 -0
  80. package/dist/design/c4-generator.js +453 -0
  81. package/dist/design/c4-generator.js.map +1 -0
  82. package/dist/design/framework-optimizer.d.ts +190 -0
  83. package/dist/design/framework-optimizer.d.ts.map +1 -0
  84. package/dist/design/framework-optimizer.js +589 -0
  85. package/dist/design/framework-optimizer.js.map +1 -0
  86. package/dist/design/index.d.ts +12 -0
  87. package/dist/design/index.d.ts.map +1 -0
  88. package/dist/design/index.js +13 -0
  89. package/dist/design/index.js.map +1 -0
  90. package/dist/design/pattern-detector.d.ts +270 -0
  91. package/dist/design/pattern-detector.d.ts.map +1 -0
  92. package/dist/design/pattern-detector.js +621 -0
  93. package/dist/design/pattern-detector.js.map +1 -0
  94. package/dist/design/solid-validator.d.ts +188 -0
  95. package/dist/design/solid-validator.d.ts.map +1 -0
  96. package/dist/design/solid-validator.js +579 -0
  97. package/dist/design/solid-validator.js.map +1 -0
  98. package/dist/error/data-persistence.d.ts +311 -0
  99. package/dist/error/data-persistence.d.ts.map +1 -0
  100. package/dist/error/data-persistence.js +586 -0
  101. package/dist/error/data-persistence.js.map +1 -0
  102. package/dist/error/graceful-degradation.d.ts +309 -0
  103. package/dist/error/graceful-degradation.d.ts.map +1 -0
  104. package/dist/error/graceful-degradation.js +510 -0
  105. package/dist/error/graceful-degradation.js.map +1 -0
  106. package/dist/error/index.d.ts +11 -0
  107. package/dist/error/index.d.ts.map +1 -0
  108. package/dist/error/index.js +19 -0
  109. package/dist/error/index.js.map +1 -0
  110. package/dist/explanation/explanation-generator.d.ts +228 -0
  111. package/dist/explanation/explanation-generator.d.ts.map +1 -0
  112. package/dist/explanation/explanation-generator.js +662 -0
  113. package/dist/explanation/explanation-generator.js.map +1 -0
  114. package/dist/explanation/index.d.ts +11 -0
  115. package/dist/explanation/index.d.ts.map +1 -0
  116. package/dist/explanation/index.js +19 -0
  117. package/dist/explanation/index.js.map +1 -0
  118. package/dist/explanation/reasoning-chain.d.ts +314 -0
  119. package/dist/explanation/reasoning-chain.d.ts.map +1 -0
  120. package/dist/explanation/reasoning-chain.js +414 -0
  121. package/dist/explanation/reasoning-chain.js.map +1 -0
  122. package/dist/explanation/visual-explanation.d.ts +315 -0
  123. package/dist/explanation/visual-explanation.d.ts.map +1 -0
  124. package/dist/explanation/visual-explanation.js +667 -0
  125. package/dist/explanation/visual-explanation.js.map +1 -0
  126. package/dist/index.d.ts +33 -0
  127. package/dist/index.d.ts.map +1 -0
  128. package/dist/index.js +47 -0
  129. package/dist/index.js.map +1 -0
  130. package/dist/requirements/decomposer.d.ts +235 -0
  131. package/dist/requirements/decomposer.d.ts.map +1 -0
  132. package/dist/requirements/decomposer.js +587 -0
  133. package/dist/requirements/decomposer.js.map +1 -0
  134. package/dist/requirements/related-finder.d.ts +261 -0
  135. package/dist/requirements/related-finder.d.ts.map +1 -0
  136. package/dist/requirements/related-finder.js +629 -0
  137. package/dist/requirements/related-finder.js.map +1 -0
  138. package/dist/traceability/impact.d.ts +196 -0
  139. package/dist/traceability/impact.d.ts.map +1 -0
  140. package/dist/traceability/impact.js +438 -0
  141. package/dist/traceability/impact.js.map +1 -0
  142. package/dist/traceability/index.d.ts +9 -0
  143. package/dist/traceability/index.d.ts.map +1 -0
  144. package/dist/traceability/index.js +10 -0
  145. package/dist/traceability/index.js.map +1 -0
  146. package/dist/traceability/manager.d.ts +266 -0
  147. package/dist/traceability/manager.d.ts.map +1 -0
  148. package/dist/traceability/manager.js +412 -0
  149. package/dist/traceability/manager.js.map +1 -0
  150. package/dist/types/common.d.ts +294 -0
  151. package/dist/types/common.d.ts.map +1 -0
  152. package/dist/types/common.js +15 -0
  153. package/dist/types/common.js.map +1 -0
  154. package/dist/types/ears.d.ts +158 -0
  155. package/dist/types/ears.d.ts.map +1 -0
  156. package/dist/types/ears.js +33 -0
  157. package/dist/types/ears.js.map +1 -0
  158. package/dist/types/errors.d.ts +176 -0
  159. package/dist/types/errors.d.ts.map +1 -0
  160. package/dist/types/errors.js +55 -0
  161. package/dist/types/errors.js.map +1 -0
  162. package/dist/types/index.d.ts +10 -0
  163. package/dist/types/index.d.ts.map +1 -0
  164. package/dist/types/index.js +10 -0
  165. package/dist/types/index.js.map +1 -0
  166. package/dist/utils/data-protector.d.ts +122 -0
  167. package/dist/utils/data-protector.d.ts.map +1 -0
  168. package/dist/utils/data-protector.js +275 -0
  169. package/dist/utils/data-protector.js.map +1 -0
  170. package/dist/utils/error-handler.d.ts +101 -0
  171. package/dist/utils/error-handler.d.ts.map +1 -0
  172. package/dist/utils/error-handler.js +324 -0
  173. package/dist/utils/error-handler.js.map +1 -0
  174. package/dist/utils/i18n-manager.d.ts +259 -0
  175. package/dist/utils/i18n-manager.d.ts.map +1 -0
  176. package/dist/utils/i18n-manager.js +554 -0
  177. package/dist/utils/i18n-manager.js.map +1 -0
  178. package/dist/utils/index.d.ts +10 -0
  179. package/dist/utils/index.d.ts.map +1 -0
  180. package/dist/utils/index.js +10 -0
  181. package/dist/utils/index.js.map +1 -0
  182. package/dist/utils/logger.d.ts +120 -0
  183. package/dist/utils/logger.d.ts.map +1 -0
  184. package/dist/utils/logger.js +237 -0
  185. package/dist/utils/logger.js.map +1 -0
  186. package/dist/utils/performance-profiler.d.ts +251 -0
  187. package/dist/utils/performance-profiler.d.ts.map +1 -0
  188. package/dist/utils/performance-profiler.js +458 -0
  189. package/dist/utils/performance-profiler.js.map +1 -0
  190. package/dist/utils/scalability-optimizer.d.ts +294 -0
  191. package/dist/utils/scalability-optimizer.d.ts.map +1 -0
  192. package/dist/utils/scalability-optimizer.js +606 -0
  193. package/dist/utils/scalability-optimizer.js.map +1 -0
  194. package/dist/utils/structured-logger.d.ts +294 -0
  195. package/dist/utils/structured-logger.d.ts.map +1 -0
  196. package/dist/utils/structured-logger.js +630 -0
  197. package/dist/utils/structured-logger.js.map +1 -0
  198. package/dist/utils/version-compatibility.d.ts +217 -0
  199. package/dist/utils/version-compatibility.d.ts.map +1 -0
  200. package/dist/utils/version-compatibility.js +443 -0
  201. package/dist/utils/version-compatibility.js.map +1 -0
  202. package/dist/validators/ears-validator.d.ts +182 -0
  203. package/dist/validators/ears-validator.d.ts.map +1 -0
  204. package/dist/validators/ears-validator.js +357 -0
  205. package/dist/validators/ears-validator.js.map +1 -0
  206. package/dist/validators/index.d.ts +8 -0
  207. package/dist/validators/index.d.ts.map +1 -0
  208. package/dist/validators/index.js +9 -0
  209. package/dist/validators/index.js.map +1 -0
  210. package/dist/version.d.ts +8 -0
  211. package/dist/version.d.ts.map +1 -0
  212. package/dist/version.js +8 -0
  213. package/dist/version.js.map +1 -0
  214. package/package.json +100 -0
@@ -0,0 +1,630 @@
1
+ /**
2
+ * Structured Logger (Extended)
3
+ *
4
+ * Advanced structured logging with context, correlation, and output formatting
5
+ *
6
+ * @packageDocumentation
7
+ * @module utils/structured-logger
8
+ *
9
+ * @see REQ-MNT-001 - Logging & Monitoring
10
+ * @see Article VI - Decision Transparency
11
+ */
12
+ /**
13
+ * Log level values
14
+ */
15
+ export const LOG_LEVEL_VALUES = {
16
+ trace: 10,
17
+ debug: 20,
18
+ info: 30,
19
+ warn: 40,
20
+ error: 50,
21
+ fatal: 60,
22
+ };
23
+ /**
24
+ * Default configuration
25
+ */
26
+ export const DEFAULT_LOGGER_CONFIG = {
27
+ name: 'app',
28
+ level: 'info',
29
+ format: 'pretty',
30
+ includeTimestamp: true,
31
+ includeCaller: false,
32
+ prettyPrint: true,
33
+ colorOutput: true,
34
+ redactFields: ['password', 'secret', 'token', 'apiKey', 'authorization'],
35
+ maxContextDepth: 5,
36
+ };
37
+ /**
38
+ * Color codes for pretty output
39
+ */
40
+ const COLORS = {
41
+ reset: '\x1b[0m',
42
+ bright: '\x1b[1m',
43
+ dim: '\x1b[2m',
44
+ red: '\x1b[31m',
45
+ green: '\x1b[32m',
46
+ yellow: '\x1b[33m',
47
+ blue: '\x1b[34m',
48
+ magenta: '\x1b[35m',
49
+ cyan: '\x1b[36m',
50
+ white: '\x1b[37m',
51
+ gray: '\x1b[90m',
52
+ };
53
+ /**
54
+ * Level colors
55
+ */
56
+ const LEVEL_COLORS = {
57
+ trace: COLORS.gray,
58
+ debug: COLORS.cyan,
59
+ info: COLORS.green,
60
+ warn: COLORS.yellow,
61
+ error: COLORS.red,
62
+ fatal: COLORS.red + COLORS.bright,
63
+ };
64
+ /**
65
+ * Level icons
66
+ */
67
+ const LEVEL_ICONS = {
68
+ trace: '🔍',
69
+ debug: '🐛',
70
+ info: 'ℹ️',
71
+ warn: '⚠️',
72
+ error: '❌',
73
+ fatal: '💀',
74
+ };
75
+ /**
76
+ * Console transport
77
+ */
78
+ export class ConsoleTransport {
79
+ name = 'console';
80
+ type = 'console';
81
+ config;
82
+ constructor(config) {
83
+ this.config = config;
84
+ }
85
+ log(entry) {
86
+ const output = this.format(entry);
87
+ if (LOG_LEVEL_VALUES[entry.level] >= LOG_LEVEL_VALUES.error) {
88
+ console.error(output);
89
+ }
90
+ else if (entry.level === 'warn') {
91
+ console.warn(output);
92
+ }
93
+ else {
94
+ console.log(output);
95
+ }
96
+ }
97
+ format(entry) {
98
+ switch (this.config.format) {
99
+ case 'json':
100
+ return JSON.stringify(this.toJSON(entry));
101
+ case 'compact':
102
+ return this.toCompact(entry);
103
+ case 'logfmt':
104
+ return this.toLogfmt(entry);
105
+ case 'pretty':
106
+ default:
107
+ return this.toPretty(entry);
108
+ }
109
+ }
110
+ toJSON(entry) {
111
+ return {
112
+ timestamp: entry.timestamp.toISOString(),
113
+ level: entry.level,
114
+ logger: entry.logger,
115
+ message: entry.message,
116
+ ...(entry.correlationId && { correlationId: entry.correlationId }),
117
+ ...(entry.requestId && { requestId: entry.requestId }),
118
+ ...(entry.userId && { userId: entry.userId }),
119
+ ...(entry.duration !== undefined && { duration: entry.duration }),
120
+ ...(entry.tags?.length && { tags: entry.tags }),
121
+ ...(entry.context && { context: entry.context }),
122
+ ...(entry.error && { error: entry.error }),
123
+ ...(entry.metadata && { metadata: entry.metadata }),
124
+ };
125
+ }
126
+ toPretty(entry) {
127
+ const parts = [];
128
+ const useColor = this.config.colorOutput;
129
+ // Timestamp
130
+ if (this.config.includeTimestamp) {
131
+ const time = entry.timestamp.toISOString().substring(11, 23);
132
+ parts.push(useColor ? `${COLORS.gray}${time}${COLORS.reset}` : time);
133
+ }
134
+ // Level
135
+ const levelStr = entry.level.toUpperCase().padEnd(5);
136
+ const icon = LEVEL_ICONS[entry.level];
137
+ if (useColor) {
138
+ parts.push(`${LEVEL_COLORS[entry.level]}${icon} ${levelStr}${COLORS.reset}`);
139
+ }
140
+ else {
141
+ parts.push(`${icon} ${levelStr}`);
142
+ }
143
+ // Logger name
144
+ if (useColor) {
145
+ parts.push(`${COLORS.magenta}[${entry.logger}]${COLORS.reset}`);
146
+ }
147
+ else {
148
+ parts.push(`[${entry.logger}]`);
149
+ }
150
+ // Message
151
+ parts.push(entry.message);
152
+ // Duration
153
+ if (entry.duration !== undefined) {
154
+ const durationStr = `${entry.duration}ms`;
155
+ parts.push(useColor ? `${COLORS.cyan}(${durationStr})${COLORS.reset}` : `(${durationStr})`);
156
+ }
157
+ // Correlation ID
158
+ if (entry.correlationId) {
159
+ const idStr = `cid:${entry.correlationId.substring(0, 8)}`;
160
+ parts.push(useColor ? `${COLORS.gray}${idStr}${COLORS.reset}` : idStr);
161
+ }
162
+ let result = parts.join(' ');
163
+ // Context
164
+ if (entry.context && Object.keys(entry.context).length > 0) {
165
+ const contextStr = this.config.prettyPrint
166
+ ? JSON.stringify(entry.context, null, 2)
167
+ : JSON.stringify(entry.context);
168
+ result += '\n ' + (useColor ? `${COLORS.gray}${contextStr}${COLORS.reset}` : contextStr);
169
+ }
170
+ // Error
171
+ if (entry.error) {
172
+ const errorStr = entry.error.stack ?? `${entry.error.name}: ${entry.error.message}`;
173
+ result += '\n ' + (useColor ? `${COLORS.red}${errorStr}${COLORS.reset}` : errorStr);
174
+ }
175
+ return result;
176
+ }
177
+ toCompact(entry) {
178
+ const time = entry.timestamp.toISOString().substring(11, 23);
179
+ const level = entry.level.charAt(0).toUpperCase();
180
+ let result = `${time} ${level} [${entry.logger}] ${entry.message}`;
181
+ if (entry.duration !== undefined) {
182
+ result += ` (${entry.duration}ms)`;
183
+ }
184
+ return result;
185
+ }
186
+ toLogfmt(entry) {
187
+ const parts = [
188
+ `time=${entry.timestamp.toISOString()}`,
189
+ `level=${entry.level}`,
190
+ `logger=${entry.logger}`,
191
+ `msg="${this.escapeLogfmt(entry.message)}"`,
192
+ ];
193
+ if (entry.correlationId) {
194
+ parts.push(`correlation_id=${entry.correlationId}`);
195
+ }
196
+ if (entry.requestId) {
197
+ parts.push(`request_id=${entry.requestId}`);
198
+ }
199
+ if (entry.userId) {
200
+ parts.push(`user_id=${entry.userId}`);
201
+ }
202
+ if (entry.duration !== undefined) {
203
+ parts.push(`duration=${entry.duration}`);
204
+ }
205
+ if (entry.error) {
206
+ parts.push(`error="${this.escapeLogfmt(entry.error.message)}"`);
207
+ }
208
+ return parts.join(' ');
209
+ }
210
+ escapeLogfmt(str) {
211
+ return str.replace(/"/g, '\\"').replace(/\n/g, '\\n');
212
+ }
213
+ }
214
+ /**
215
+ * Memory transport (for testing)
216
+ */
217
+ export class MemoryTransport {
218
+ name = 'memory';
219
+ type = 'memory';
220
+ entries = [];
221
+ maxEntries;
222
+ constructor(maxEntries = 1000) {
223
+ this.maxEntries = maxEntries;
224
+ }
225
+ log(entry) {
226
+ this.entries.push(entry);
227
+ if (this.entries.length > this.maxEntries) {
228
+ this.entries.shift();
229
+ }
230
+ }
231
+ clear() {
232
+ this.entries = [];
233
+ }
234
+ getEntries(filter) {
235
+ let result = this.entries;
236
+ if (filter?.level) {
237
+ const minLevel = LOG_LEVEL_VALUES[filter.level];
238
+ result = result.filter((e) => LOG_LEVEL_VALUES[e.level] >= minLevel);
239
+ }
240
+ if (filter?.logger) {
241
+ result = result.filter((e) => e.logger === filter.logger);
242
+ }
243
+ return result;
244
+ }
245
+ }
246
+ /**
247
+ * Structured Logger
248
+ */
249
+ export class StructuredLogger {
250
+ config;
251
+ transports = [];
252
+ contextStack = [];
253
+ correlationId;
254
+ requestId;
255
+ userId;
256
+ constructor(config) {
257
+ this.config = { ...DEFAULT_LOGGER_CONFIG, ...config };
258
+ // Add default console transport
259
+ this.transports.push(new ConsoleTransport(this.config));
260
+ }
261
+ /**
262
+ * Add transport
263
+ */
264
+ addTransport(transport) {
265
+ this.transports.push(transport);
266
+ }
267
+ /**
268
+ * Remove transport
269
+ */
270
+ removeTransport(name) {
271
+ this.transports = this.transports.filter((t) => t.name !== name);
272
+ }
273
+ /**
274
+ * Create child logger with additional context
275
+ */
276
+ child(context) {
277
+ const child = new StructuredLogger(this.config);
278
+ child.transports = this.transports;
279
+ child.contextStack = [...this.contextStack, context];
280
+ child.correlationId = this.correlationId;
281
+ child.requestId = this.requestId;
282
+ child.userId = this.userId;
283
+ return child;
284
+ }
285
+ /**
286
+ * Set correlation ID
287
+ */
288
+ setCorrelationId(id) {
289
+ this.correlationId = id;
290
+ }
291
+ /**
292
+ * Set request ID
293
+ */
294
+ setRequestId(id) {
295
+ this.requestId = id;
296
+ }
297
+ /**
298
+ * Set user ID
299
+ */
300
+ setUserId(id) {
301
+ this.userId = id;
302
+ }
303
+ /**
304
+ * Push context
305
+ */
306
+ pushContext(context) {
307
+ this.contextStack.push(context);
308
+ }
309
+ /**
310
+ * Pop context
311
+ */
312
+ popContext() {
313
+ return this.contextStack.pop();
314
+ }
315
+ /**
316
+ * Log at trace level
317
+ */
318
+ trace(message, context) {
319
+ this.log('trace', message, context);
320
+ }
321
+ /**
322
+ * Log at debug level
323
+ */
324
+ debug(message, context) {
325
+ this.log('debug', message, context);
326
+ }
327
+ /**
328
+ * Log at info level
329
+ */
330
+ info(message, context) {
331
+ this.log('info', message, context);
332
+ }
333
+ /**
334
+ * Log at warn level
335
+ */
336
+ warn(message, context) {
337
+ this.log('warn', message, context);
338
+ }
339
+ /**
340
+ * Log at error level
341
+ */
342
+ error(message, error, context) {
343
+ if (error instanceof Error) {
344
+ this.log('error', message, context, error);
345
+ }
346
+ else {
347
+ this.log('error', message, error);
348
+ }
349
+ }
350
+ /**
351
+ * Log at fatal level
352
+ */
353
+ fatal(message, error, context) {
354
+ if (error instanceof Error) {
355
+ this.log('fatal', message, context, error);
356
+ }
357
+ else {
358
+ this.log('fatal', message, error);
359
+ }
360
+ }
361
+ /**
362
+ * Log with timing
363
+ */
364
+ timed(level, message, fn, context) {
365
+ const start = Date.now();
366
+ try {
367
+ const result = fn();
368
+ const duration = Date.now() - start;
369
+ this.log(level, message, { ...context, duration });
370
+ return result;
371
+ }
372
+ catch (error) {
373
+ const duration = Date.now() - start;
374
+ this.log('error', `${message} (failed)`, { ...context, duration }, error);
375
+ throw error;
376
+ }
377
+ }
378
+ /**
379
+ * Log with async timing
380
+ */
381
+ async timedAsync(level, message, fn, context) {
382
+ const start = Date.now();
383
+ try {
384
+ const result = await fn();
385
+ const duration = Date.now() - start;
386
+ this.log(level, message, { ...context, duration });
387
+ return result;
388
+ }
389
+ catch (error) {
390
+ const duration = Date.now() - start;
391
+ this.log('error', `${message} (failed)`, { ...context, duration }, error);
392
+ throw error;
393
+ }
394
+ }
395
+ /**
396
+ * Create scoped logger for a specific operation
397
+ */
398
+ scope(operation, metadata) {
399
+ return new ScopedLogger(this, operation, metadata);
400
+ }
401
+ /**
402
+ * Core log method
403
+ */
404
+ log(level, message, context, error) {
405
+ // Check level
406
+ if (LOG_LEVEL_VALUES[level] < LOG_LEVEL_VALUES[this.config.level]) {
407
+ return;
408
+ }
409
+ // Build merged context
410
+ const mergedContext = this.buildContext(context);
411
+ // Redact sensitive fields
412
+ const redactedContext = this.redactSensitive(mergedContext);
413
+ // Build entry
414
+ const entry = {
415
+ timestamp: new Date(),
416
+ level,
417
+ message,
418
+ logger: this.config.name,
419
+ correlationId: this.correlationId,
420
+ requestId: this.requestId,
421
+ userId: this.userId,
422
+ context: redactedContext,
423
+ };
424
+ // Add error info
425
+ if (error) {
426
+ entry.error = {
427
+ name: error.name,
428
+ message: error.message,
429
+ stack: error.stack,
430
+ code: error.code,
431
+ };
432
+ }
433
+ // Extract duration from context
434
+ if (context?.duration !== undefined) {
435
+ entry.duration = context.duration;
436
+ if (entry.context) {
437
+ delete entry.context.duration;
438
+ }
439
+ }
440
+ // Send to transports
441
+ for (const transport of this.transports) {
442
+ try {
443
+ transport.log(entry);
444
+ }
445
+ catch (e) {
446
+ console.error(`Logger transport error: ${e}`);
447
+ }
448
+ }
449
+ }
450
+ /**
451
+ * Build merged context
452
+ */
453
+ buildContext(context) {
454
+ const parts = [
455
+ this.config.defaultContext,
456
+ ...this.contextStack,
457
+ context,
458
+ ].filter(Boolean);
459
+ if (parts.length === 0)
460
+ return undefined;
461
+ return parts.reduce((acc, part) => ({ ...acc, ...part }), {});
462
+ }
463
+ /**
464
+ * Redact sensitive fields
465
+ */
466
+ redactSensitive(obj) {
467
+ if (!obj || !this.config.redactFields?.length)
468
+ return obj;
469
+ const redact = (value, depth) => {
470
+ if (depth > this.config.maxContextDepth)
471
+ return '[MAX_DEPTH]';
472
+ if (typeof value !== 'object' || value === null)
473
+ return value;
474
+ if (Array.isArray(value)) {
475
+ return value.map((v) => redact(v, depth + 1));
476
+ }
477
+ const result = {};
478
+ for (const [key, val] of Object.entries(value)) {
479
+ if (this.config.redactFields?.some((f) => key.toLowerCase().includes(f.toLowerCase()))) {
480
+ result[key] = '[REDACTED]';
481
+ }
482
+ else {
483
+ result[key] = redact(val, depth + 1);
484
+ }
485
+ }
486
+ return result;
487
+ };
488
+ return redact(obj, 0);
489
+ }
490
+ /**
491
+ * Flush all transports
492
+ */
493
+ async flush() {
494
+ for (const transport of this.transports) {
495
+ if (transport.flush) {
496
+ await transport.flush();
497
+ }
498
+ }
499
+ }
500
+ /**
501
+ * Close all transports
502
+ */
503
+ async close() {
504
+ for (const transport of this.transports) {
505
+ if (transport.close) {
506
+ await transport.close();
507
+ }
508
+ }
509
+ }
510
+ /**
511
+ * Set log level
512
+ */
513
+ setLevel(level) {
514
+ this.config.level = level;
515
+ }
516
+ /**
517
+ * Get log level
518
+ */
519
+ getLevel() {
520
+ return this.config.level;
521
+ }
522
+ /**
523
+ * Check if level is enabled
524
+ */
525
+ isLevelEnabled(level) {
526
+ return LOG_LEVEL_VALUES[level] >= LOG_LEVEL_VALUES[this.config.level];
527
+ }
528
+ }
529
+ /**
530
+ * Scoped logger for operations
531
+ */
532
+ export class ScopedLogger {
533
+ logger;
534
+ operation;
535
+ metadata;
536
+ startTime;
537
+ steps = [];
538
+ lastStepTime;
539
+ constructor(logger, operation, metadata) {
540
+ this.logger = logger;
541
+ this.operation = operation;
542
+ this.metadata = metadata;
543
+ this.startTime = Date.now();
544
+ this.lastStepTime = this.startTime;
545
+ this.logger.info(`Starting: ${operation}`, { ...metadata, event: 'start' });
546
+ }
547
+ /**
548
+ * Log a step
549
+ */
550
+ step(name, context) {
551
+ const now = Date.now();
552
+ const stepDuration = now - this.lastStepTime;
553
+ this.steps.push({ name, duration: stepDuration });
554
+ this.lastStepTime = now;
555
+ this.logger.debug(`${this.operation} > ${name}`, {
556
+ ...this.metadata,
557
+ ...context,
558
+ step: name,
559
+ stepDuration,
560
+ event: 'step',
561
+ });
562
+ }
563
+ /**
564
+ * Log success
565
+ */
566
+ success(result, context) {
567
+ const duration = Date.now() - this.startTime;
568
+ this.logger.info(`Completed: ${this.operation}`, {
569
+ ...this.metadata,
570
+ ...context,
571
+ duration,
572
+ steps: this.steps,
573
+ result: result !== undefined ? result : undefined,
574
+ event: 'success',
575
+ });
576
+ }
577
+ /**
578
+ * Log failure
579
+ */
580
+ failure(error, context) {
581
+ const duration = Date.now() - this.startTime;
582
+ this.logger.error(`Failed: ${this.operation}`, error, {
583
+ ...this.metadata,
584
+ ...context,
585
+ duration,
586
+ steps: this.steps,
587
+ event: 'failure',
588
+ });
589
+ }
590
+ /**
591
+ * Log progress
592
+ */
593
+ progress(current, total, message) {
594
+ const percentage = Math.round((current / total) * 100);
595
+ this.logger.debug(`${this.operation} progress: ${percentage}%`, {
596
+ ...this.metadata,
597
+ current,
598
+ total,
599
+ percentage,
600
+ message,
601
+ event: 'progress',
602
+ });
603
+ }
604
+ }
605
+ /**
606
+ * Create structured logger instance
607
+ */
608
+ export function createStructuredLogger(config) {
609
+ return new StructuredLogger(config);
610
+ }
611
+ /**
612
+ * Global logger instance
613
+ */
614
+ export const logger = new StructuredLogger({ name: 'musubix' });
615
+ /**
616
+ * Request context helper
617
+ */
618
+ export function withRequestContext(logger, correlationId, requestId, fn) {
619
+ const contextLogger = logger.child({});
620
+ contextLogger.setCorrelationId(correlationId);
621
+ contextLogger.setRequestId(requestId);
622
+ return fn(contextLogger);
623
+ }
624
+ /**
625
+ * Generate correlation ID
626
+ */
627
+ export function generateCorrelationId() {
628
+ return `${Date.now().toString(36)}-${Math.random().toString(36).substring(2, 10)}`;
629
+ }
630
+ //# sourceMappingURL=structured-logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured-logger.js","sourceRoot":"","sources":["../../src/utils/structured-logger.ts"],"names":[],"mappings":"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"}