@scpxl/nodejs-framework 1.0.14 → 1.0.19

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 (192) hide show
  1. package/README.md +29 -0
  2. package/dist/api-requester/api-requester.d.ts +27 -6
  3. package/dist/api-requester/api-requester.d.ts.map +1 -1
  4. package/dist/api-requester/api-requester.js +188 -26
  5. package/dist/api-requester/api-requester.js.map +2 -2
  6. package/dist/api-requester/index.d.ts +1 -0
  7. package/dist/api-requester/index.d.ts.map +1 -1
  8. package/dist/api-requester/index.js.map +1 -1
  9. package/dist/application/base-application.d.ts +16 -20
  10. package/dist/application/base-application.d.ts.map +1 -1
  11. package/dist/application/base-application.js +152 -109
  12. package/dist/application/base-application.js.map +2 -2
  13. package/dist/application/command-application.d.ts.map +1 -1
  14. package/dist/application/command-application.js +3 -4
  15. package/dist/application/command-application.js.map +2 -2
  16. package/dist/application/web-application.d.ts.map +1 -1
  17. package/dist/application/web-application.js +9 -2
  18. package/dist/application/web-application.js.map +2 -2
  19. package/dist/cache/manager.d.ts +87 -6
  20. package/dist/cache/manager.d.ts.map +1 -1
  21. package/dist/cache/manager.js +77 -30
  22. package/dist/cache/manager.js.map +2 -2
  23. package/dist/cluster/cluster-manager.d.ts.map +1 -1
  24. package/dist/cluster/cluster-manager.js +7 -9
  25. package/dist/cluster/cluster-manager.js.map +2 -2
  26. package/dist/config/env.d.ts +11 -0
  27. package/dist/config/env.d.ts.map +1 -0
  28. package/dist/config/env.js +103 -0
  29. package/dist/config/env.js.map +7 -0
  30. package/dist/config/index.d.ts +3 -0
  31. package/dist/config/index.d.ts.map +1 -0
  32. package/dist/config/index.js +3 -0
  33. package/dist/config/index.js.map +7 -0
  34. package/dist/config/schema.d.ts +408 -0
  35. package/dist/config/schema.d.ts.map +1 -0
  36. package/dist/config/schema.js +218 -0
  37. package/dist/config/schema.js.map +7 -0
  38. package/dist/database/dynamic-entity.d.ts.map +1 -1
  39. package/dist/database/dynamic-entity.js +6 -2
  40. package/dist/database/dynamic-entity.js.map +2 -2
  41. package/dist/database/instance.d.ts.map +1 -1
  42. package/dist/database/instance.js +0 -8
  43. package/dist/database/instance.js.map +2 -2
  44. package/dist/database/manager.d.ts.map +1 -1
  45. package/dist/database/manager.js +71 -9
  46. package/dist/database/manager.js.map +2 -2
  47. package/dist/error/error-reporter.d.ts +96 -0
  48. package/dist/error/error-reporter.d.ts.map +1 -0
  49. package/dist/error/error-reporter.js +228 -0
  50. package/dist/error/error-reporter.js.map +7 -0
  51. package/dist/error/error.interface.d.ts +126 -0
  52. package/dist/error/error.interface.d.ts.map +1 -0
  53. package/dist/error/error.interface.js +45 -0
  54. package/dist/error/error.interface.js.map +7 -0
  55. package/dist/error/framework-errors.d.ts +113 -0
  56. package/dist/error/framework-errors.d.ts.map +1 -0
  57. package/dist/error/framework-errors.js +176 -0
  58. package/dist/error/framework-errors.js.map +7 -0
  59. package/dist/error/index.d.ts +6 -0
  60. package/dist/error/index.d.ts.map +1 -0
  61. package/dist/error/index.js +34 -0
  62. package/dist/error/index.js.map +7 -0
  63. package/dist/event/manager.d.ts.map +1 -1
  64. package/dist/event/manager.js +2 -9
  65. package/dist/event/manager.js.map +2 -2
  66. package/dist/index.d.ts +5 -1
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +5 -1
  69. package/dist/index.js.map +2 -2
  70. package/dist/lifecycle/exit.d.ts +11 -0
  71. package/dist/lifecycle/exit.d.ts.map +1 -0
  72. package/dist/lifecycle/exit.js +29 -0
  73. package/dist/lifecycle/exit.js.map +7 -0
  74. package/dist/lifecycle/index.d.ts +7 -0
  75. package/dist/lifecycle/index.d.ts.map +1 -0
  76. package/dist/lifecycle/index.js +12 -0
  77. package/dist/lifecycle/index.js.map +7 -0
  78. package/dist/lifecycle/lifecycle-manager.d.ts +66 -0
  79. package/dist/lifecycle/lifecycle-manager.d.ts.map +1 -0
  80. package/dist/lifecycle/lifecycle-manager.js +280 -0
  81. package/dist/lifecycle/lifecycle-manager.js.map +7 -0
  82. package/dist/lifecycle/shutdown-controller.d.ts +15 -0
  83. package/dist/lifecycle/shutdown-controller.d.ts.map +1 -0
  84. package/dist/lifecycle/shutdown-controller.js +38 -0
  85. package/dist/lifecycle/shutdown-controller.js.map +7 -0
  86. package/dist/lifecycle/types.d.ts +28 -0
  87. package/dist/lifecycle/types.d.ts.map +1 -0
  88. package/dist/lifecycle/types.js +13 -0
  89. package/dist/lifecycle/types.js.map +7 -0
  90. package/dist/logger/logger.d.ts +2 -1
  91. package/dist/logger/logger.d.ts.map +1 -1
  92. package/dist/logger/logger.js +35 -11
  93. package/dist/logger/logger.js.map +2 -2
  94. package/dist/performance/cache-performance.d.ts +6 -0
  95. package/dist/performance/cache-performance.d.ts.map +1 -1
  96. package/dist/performance/cache-performance.js +16 -0
  97. package/dist/performance/cache-performance.js.map +2 -2
  98. package/dist/performance/index.d.ts +1 -0
  99. package/dist/performance/index.d.ts.map +1 -1
  100. package/dist/performance/index.js +1 -0
  101. package/dist/performance/index.js.map +2 -2
  102. package/dist/performance/performance-monitor.d.ts.map +1 -1
  103. package/dist/performance/performance-monitor.js +47 -18
  104. package/dist/performance/performance-monitor.js.map +2 -2
  105. package/dist/performance/performance-monitor.plugin.d.ts +24 -0
  106. package/dist/performance/performance-monitor.plugin.d.ts.map +1 -0
  107. package/dist/performance/performance-monitor.plugin.js +89 -0
  108. package/dist/performance/performance-monitor.plugin.js.map +7 -0
  109. package/dist/performance/webserver-performance.js +1 -1
  110. package/dist/performance/webserver-performance.js.map +2 -2
  111. package/dist/queue/manager.d.ts.map +1 -1
  112. package/dist/queue/manager.js +3 -10
  113. package/dist/queue/manager.js.map +2 -2
  114. package/dist/queue/worker.d.ts.map +1 -1
  115. package/dist/queue/worker.js +2 -2
  116. package/dist/queue/worker.js.map +2 -2
  117. package/dist/redis/manager.d.ts.map +1 -1
  118. package/dist/redis/manager.js +228 -33
  119. package/dist/redis/manager.js.map +2 -2
  120. package/dist/request-context/index.d.ts +3 -0
  121. package/dist/request-context/index.d.ts.map +1 -0
  122. package/dist/request-context/index.js +25 -0
  123. package/dist/request-context/index.js.map +7 -0
  124. package/dist/request-context/request-context.d.ts +108 -0
  125. package/dist/request-context/request-context.d.ts.map +1 -0
  126. package/dist/request-context/request-context.interface.d.ts +46 -0
  127. package/dist/request-context/request-context.interface.d.ts.map +1 -0
  128. package/dist/request-context/request-context.interface.js +1 -0
  129. package/dist/request-context/request-context.interface.js.map +7 -0
  130. package/dist/request-context/request-context.js +79 -0
  131. package/dist/request-context/request-context.js.map +7 -0
  132. package/dist/services/aws/s3.js +4 -6
  133. package/dist/services/aws/s3.js.map +2 -2
  134. package/dist/util/file.d.ts +13 -0
  135. package/dist/util/file.d.ts.map +1 -1
  136. package/dist/util/file.js +46 -9
  137. package/dist/util/file.js.map +2 -2
  138. package/dist/util/helper.d.ts +16 -1
  139. package/dist/util/helper.d.ts.map +1 -1
  140. package/dist/util/helper.js +19 -43
  141. package/dist/util/helper.js.map +2 -2
  142. package/dist/util/index.d.ts +1 -0
  143. package/dist/util/index.d.ts.map +1 -1
  144. package/dist/util/index.js +18 -16
  145. package/dist/util/index.js.map +2 -2
  146. package/dist/util/loader.d.ts.map +1 -1
  147. package/dist/util/loader.js +13 -2
  148. package/dist/util/loader.js.map +2 -2
  149. package/dist/util/os.d.ts.map +1 -1
  150. package/dist/util/os.js +8 -14
  151. package/dist/util/os.js.map +2 -2
  152. package/dist/util/time.d.ts +8 -2
  153. package/dist/util/time.d.ts.map +1 -1
  154. package/dist/util/time.js +12 -7
  155. package/dist/util/time.js.map +2 -2
  156. package/dist/util/timing.d.ts +36 -0
  157. package/dist/util/timing.d.ts.map +1 -0
  158. package/dist/util/timing.interface.d.ts +47 -0
  159. package/dist/util/timing.interface.d.ts.map +1 -0
  160. package/dist/util/timing.interface.js +1 -0
  161. package/dist/util/timing.interface.js.map +7 -0
  162. package/dist/util/timing.js +98 -0
  163. package/dist/util/timing.js.map +7 -0
  164. package/dist/util/url.js +1 -1
  165. package/dist/util/url.js.map +2 -2
  166. package/dist/webserver/controller/base.d.ts +3 -1
  167. package/dist/webserver/controller/base.d.ts.map +1 -1
  168. package/dist/webserver/controller/base.interface.d.ts +2 -0
  169. package/dist/webserver/controller/base.interface.d.ts.map +1 -1
  170. package/dist/webserver/controller/base.js +4 -1
  171. package/dist/webserver/controller/base.js.map +2 -2
  172. package/dist/webserver/controller/health.d.ts +8 -1
  173. package/dist/webserver/controller/health.d.ts.map +1 -1
  174. package/dist/webserver/controller/health.js +36 -22
  175. package/dist/webserver/controller/health.js.map +2 -2
  176. package/dist/webserver/webserver.d.ts +16 -2
  177. package/dist/webserver/webserver.d.ts.map +1 -1
  178. package/dist/webserver/webserver.interface.d.ts +37 -0
  179. package/dist/webserver/webserver.interface.d.ts.map +1 -1
  180. package/dist/webserver/webserver.interface.js.map +2 -2
  181. package/dist/webserver/webserver.js +117 -20
  182. package/dist/webserver/webserver.js.map +2 -2
  183. package/dist/websocket/controllers/server/system.d.ts.map +1 -1
  184. package/dist/websocket/controllers/server/system.js.map +2 -2
  185. package/dist/websocket/websocket-base.d.ts.map +1 -1
  186. package/dist/websocket/websocket-base.js +2 -3
  187. package/dist/websocket/websocket-base.js.map +2 -2
  188. package/dist/websocket/websocket-server.d.ts +1 -1
  189. package/dist/websocket/websocket-server.d.ts.map +1 -1
  190. package/dist/websocket/websocket-server.js +7 -31
  191. package/dist/websocket/websocket-server.js.map +2 -2
  192. package/package.json +68 -25
@@ -0,0 +1,13 @@
1
+ var LifecyclePhase = /* @__PURE__ */ ((LifecyclePhase2) => {
2
+ LifecyclePhase2["CREATED"] = "created";
3
+ LifecyclePhase2["INITIALIZING"] = "initializing";
4
+ LifecyclePhase2["STARTING"] = "starting";
5
+ LifecyclePhase2["RUNNING"] = "running";
6
+ LifecyclePhase2["STOPPING"] = "stopping";
7
+ LifecyclePhase2["STOPPED"] = "stopped";
8
+ return LifecyclePhase2;
9
+ })(LifecyclePhase || {});
10
+ export {
11
+ LifecyclePhase
12
+ };
13
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/lifecycle/types.ts"],
4
+ "sourcesContent": ["export interface Disposable {\n dispose(): Promise<void> | void;\n}\n\nexport enum LifecyclePhase {\n CREATED = 'created',\n INITIALIZING = 'initializing',\n STARTING = 'starting',\n RUNNING = 'running',\n STOPPING = 'stopping',\n STOPPED = 'stopped',\n}\n\nexport type LifecycleHook = () => Promise<void> | void;\n\nexport type ReadinessCheck = () => Promise<boolean> | boolean;\n\nexport interface ReadinessCheckResult {\n name: string;\n ready: boolean;\n error?: Error;\n}\n\nexport interface LifecycleConfig {\n gracefulShutdown: {\n timeoutMs: number;\n };\n readiness?: {\n timeoutMs?: number;\n checkIntervalMs?: number;\n };\n}\n"],
5
+ "mappings": "AAIO,IAAK,iBAAL,kBAAKA,oBAAL;AACL,EAAAA,gBAAA,aAAU;AACV,EAAAA,gBAAA,kBAAe;AACf,EAAAA,gBAAA,cAAW;AACX,EAAAA,gBAAA,aAAU;AACV,EAAAA,gBAAA,cAAW;AACX,EAAAA,gBAAA,aAAU;AANA,SAAAA;AAAA,GAAA;",
6
+ "names": ["LifecyclePhase"]
7
+ }
@@ -36,12 +36,13 @@ export declare class Logger {
36
36
  options?: LogOptions;
37
37
  }): void;
38
38
  warn(message: unknown, meta?: Record<string, unknown>): void;
39
- error({ error, message, meta, options, }: {
39
+ error(args: {
40
40
  error: Error | unknown;
41
41
  message?: string;
42
42
  meta?: Record<string, unknown>;
43
43
  options?: LogOptions;
44
44
  }): void;
45
+ error(error: Error | unknown, message?: string, meta?: Record<string, unknown>, options?: LogOptions): void;
45
46
  custom({ level, message, meta, options, }: {
46
47
  level: LoggerLevels;
47
48
  message: unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger/logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger/logger.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import * as Sentry from "@sentry/node";
4
4
  import { nodeProfilingIntegration } from "@sentry/profiling-node";
5
5
  import cluster from "node:cluster";
6
6
  import winston from "winston";
7
+ import { getRequestId } from "../request-context/index.js";
7
8
  class Logger {
8
9
  static {
9
10
  __name(this, "Logger");
@@ -70,6 +71,10 @@ class Logger {
70
71
  }
71
72
  getCustomFormat() {
72
73
  return winston.format.printf(({ level, message, timestamp, ...meta }) => {
74
+ const requestId = getRequestId();
75
+ if (requestId && !meta["requestId"]) {
76
+ meta["requestId"] = requestId;
77
+ }
73
78
  if (cluster.isWorker && cluster.worker) {
74
79
  meta["Worker"] = cluster.worker.id;
75
80
  }
@@ -149,21 +154,40 @@ class Logger {
149
154
  this.log({ level: "warn", message: messageOrOptions, meta, options: void 0 });
150
155
  }
151
156
  }
152
- error({
153
- error,
154
- message,
155
- meta,
156
- options
157
- }) {
157
+ error(arg1, message, meta, options) {
158
+ if (typeof arg1 === "object" && arg1 !== null && "error" in arg1 && // If the caller passed a second positional arg, treat it as new signature
159
+ message === void 0) {
160
+ const {
161
+ error,
162
+ message: objMessage,
163
+ meta: objMeta,
164
+ options: objOptions
165
+ } = arg1;
166
+ if (objMessage) {
167
+ const errorMessage = error instanceof Error ? error.message : String(error);
168
+ const combinedMessage = `${objMessage}: ${errorMessage}`;
169
+ this.log({ level: "error", message: combinedMessage, meta: objMeta, options: objOptions });
170
+ if (error instanceof Error && this.isSentryInitialized) {
171
+ Sentry.captureException(error);
172
+ }
173
+ } else {
174
+ this.log({ level: "error", message: error, meta: objMeta, options: objOptions });
175
+ if (error instanceof Error && this.isSentryInitialized) {
176
+ Sentry.captureException(error);
177
+ }
178
+ }
179
+ return;
180
+ }
181
+ const errorObj = arg1;
158
182
  if (message) {
159
- const errorMessage = error instanceof Error ? error.message : String(error);
183
+ const errorMessage = errorObj instanceof Error ? errorObj.message : String(errorObj);
160
184
  const combinedMessage = `${message}: ${errorMessage}`;
161
185
  this.log({ level: "error", message: combinedMessage, meta, options });
162
- if (error instanceof Error && this.isSentryInitialized) {
163
- Sentry.captureException(error);
164
- }
165
186
  } else {
166
- this.log({ level: "error", message: error, meta, options });
187
+ this.log({ level: "error", message: errorObj, meta, options });
188
+ }
189
+ if (errorObj instanceof Error && this.isSentryInitialized) {
190
+ Sentry.captureException(errorObj);
167
191
  }
168
192
  }
169
193
  custom({
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/logger/logger.ts"],
4
- "sourcesContent": ["import * as Sentry from '@sentry/node';\nimport { nodeProfilingIntegration } from '@sentry/profiling-node';\nimport cluster from 'node:cluster';\nimport winston from 'winston';\nimport type { LogOptions } from '../websocket/utils.js';\n\nexport type LoggerLevels =\n | 'error'\n | 'warn'\n | 'info'\n | 'command'\n | 'database'\n | 'redis'\n | 'webServer'\n | 'webSocket'\n | 'queue'\n | 'queueJob'\n | 'event'\n | 'debug';\n\nexport class Logger {\n private static instance: Logger;\n private logger: winston.Logger;\n\n private environment: string | undefined;\n\n public isSentryInitialized = false;\n\n private constructor() {\n this.environment = process.env.NODE_ENV;\n\n const customFormat = this.getCustomFormat();\n\n const customLevels: winston.config.AbstractConfigSetLevels = {\n error: 0,\n warn: 1,\n info: 2,\n command: 3,\n database: 4,\n redis: 5,\n webServer: 6,\n webSocket: 7,\n queue: 8,\n queueJob: 9,\n event: 10,\n debug: 11,\n };\n\n const customColors: winston.config.AbstractConfigSetColors = {\n error: 'red',\n warn: 'yellow',\n info: 'blue',\n command: 'cyan',\n database: 'brightGreen',\n redis: 'brightYellow',\n webServer: 'brightBlue',\n webSocket: 'brightMagenta',\n queue: 'gray',\n queueJob: 'blue',\n event: 'brightGreen',\n debug: 'brightCyan',\n };\n\n winston.addColors(customColors);\n\n this.logger = winston.createLogger({\n levels: customLevels,\n level: this.environment === 'production' ? 'info' : 'debug',\n format: winston.format.combine(\n winston.format.timestamp({\n format: 'YYYY-MM-DD HH:mm:ss',\n }),\n winston.format.errors({ stack: true }),\n winston.format.splat(),\n winston.format.json(),\n ),\n transports: [\n new winston.transports.Console({\n format: winston.format.combine(winston.format.colorize(), customFormat),\n }),\n ],\n });\n }\n\n public static getInstance(): Logger {\n if (!Logger.instance) {\n Logger.instance = new Logger();\n }\n\n return Logger.instance;\n }\n\n private getCustomFormat(): winston.Logform.Format {\n return winston.format.printf(({ level, message, timestamp, ...meta }) => {\n if (cluster.isWorker && cluster.worker) {\n meta['Worker'] = cluster.worker.id; // .process.pid;\n }\n\n const metaString = Object.entries(meta)\n .map(([key, value]) => {\n return `${key}: ${value}`;\n })\n .join(' | ');\n\n if (level === 'error') {\n if (this.isSentryInitialized) {\n const errorMessage = typeof message === 'string' ? message : JSON.stringify(message);\n\n Sentry.captureException(new Error(errorMessage));\n }\n }\n\n return `[${timestamp}] ${level}: ${message}${metaString ? ` (${metaString})` : ''}`;\n });\n }\n\n public initSentry({ sentryDsn, environment }: { sentryDsn: string; environment: string }): void {\n if (!sentryDsn) {\n this.logger.warn('Missing Sentry DSN when initializing Sentry');\n\n return;\n }\n\n Sentry.init({\n dsn: sentryDsn,\n integrations: [nodeProfilingIntegration()],\n tracesSampleRate: 1.0,\n environment,\n });\n\n this.isSentryInitialized = true;\n }\n\n public log({\n level,\n message,\n meta,\n options: _options,\n }: {\n level: LoggerLevels;\n message: unknown;\n meta?: Record<string, unknown>;\n options?: LogOptions;\n }): void {\n // if (options?.muteWorker) {\n // }\n\n if (message instanceof Error) {\n const errorMessage = message.stack ?? message.toString();\n this.logger.log(level, errorMessage, meta);\n } else if (typeof message === 'string') {\n this.logger.log(level, message, meta);\n } else {\n this.logger.log(level, JSON.stringify(message), meta);\n }\n }\n\n public debug({\n message,\n meta,\n options,\n }: {\n message: unknown;\n meta?: Record<string, unknown>;\n options?: LogOptions;\n }): void;\n public debug(message: unknown, meta?: Record<string, unknown>): void;\n public debug(\n messageOrOptions: unknown | { message: unknown; meta?: Record<string, unknown>; options?: LogOptions },\n meta?: Record<string, unknown>,\n ): void {\n if (typeof messageOrOptions === 'object' && messageOrOptions !== null && 'message' in messageOrOptions) {\n const {\n message,\n meta: optionsMeta,\n options,\n } = messageOrOptions as { message: unknown; meta?: Record<string, unknown>; options?: LogOptions };\n this.log({ level: 'debug', message, meta: optionsMeta, options });\n } else {\n this.log({ level: 'debug', message: messageOrOptions, meta, options: undefined });\n }\n }\n\n public info({\n message,\n meta,\n options,\n }: {\n message: unknown;\n meta?: Record<string, unknown>;\n options?: LogOptions;\n }): void;\n public info(message: unknown, meta?: Record<string, unknown>): void;\n public info(\n messageOrOptions: unknown | { message: unknown; meta?: Record<string, unknown>; options?: LogOptions },\n meta?: Record<string, unknown>,\n ): void {\n if (typeof messageOrOptions === 'object' && messageOrOptions !== null && 'message' in messageOrOptions) {\n const {\n message,\n meta: optionsMeta,\n options,\n } = messageOrOptions as { message: unknown; meta?: Record<string, unknown>; options?: LogOptions };\n this.log({ level: 'info', message, meta: optionsMeta, options });\n } else {\n this.log({ level: 'info', message: messageOrOptions, meta, options: undefined });\n }\n }\n\n public warn({\n message,\n meta,\n options,\n }: {\n message: unknown;\n meta?: Record<string, unknown>;\n options?: LogOptions;\n }): void;\n public warn(message: unknown, meta?: Record<string, unknown>): void;\n public warn(\n messageOrOptions: unknown | { message: unknown; meta?: Record<string, unknown>; options?: LogOptions },\n meta?: Record<string, unknown>,\n ): void {\n if (typeof messageOrOptions === 'object' && messageOrOptions !== null && 'message' in messageOrOptions) {\n const {\n message,\n meta: optionsMeta,\n options,\n } = messageOrOptions as { message: unknown; meta?: Record<string, unknown>; options?: LogOptions };\n this.log({ level: 'warn', message, meta: optionsMeta, options });\n } else {\n this.log({ level: 'warn', message: messageOrOptions, meta, options: undefined });\n }\n }\n\n public error({\n error,\n message,\n meta,\n options,\n }: {\n error: Error | unknown;\n message?: string;\n meta?: Record<string, unknown>;\n options?: LogOptions;\n }): void {\n if (message) {\n // If a message is provided, combine it with the error for better context\n const errorMessage = error instanceof Error ? error.message : String(error);\n const combinedMessage = `${message}: ${errorMessage}`;\n this.log({ level: 'error', message: combinedMessage, meta, options });\n\n // Also capture the original error for Sentry if it's an Error object\n if (error instanceof Error && this.isSentryInitialized) {\n Sentry.captureException(error);\n }\n } else {\n // Original behavior when no message is provided\n this.log({ level: 'error', message: error, meta, options });\n }\n }\n\n public custom({\n level,\n message,\n meta,\n options,\n }: {\n level: LoggerLevels;\n message: unknown;\n meta?: Record<string, unknown>;\n options?: LogOptions;\n }): void {\n this.log({ level, message, meta, options });\n }\n}\n\nexport default Logger.getInstance();\n"],
5
- "mappings": ";;AAAA,YAAY,YAAY;AACxB,SAAS,gCAAgC;AACzC,OAAO,aAAa;AACpB,OAAO,aAAa;AAiBb,MAAM,OAAO;AAAA,EApBpB,OAoBoB;AAAA;AAAA;AAAA,EAClB,OAAe;AAAA,EACP;AAAA,EAEA;AAAA,EAED,sBAAsB;AAAA,EAErB,cAAc;AACpB,SAAK,cAAc,QAAQ,IAAI;AAE/B,UAAM,eAAe,KAAK,gBAAgB;AAE1C,UAAM,eAAuD;AAAA,MAC3D,OAAO;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,UAAU;AAAA,MACV,OAAO;AAAA,MACP,WAAW;AAAA,MACX,WAAW;AAAA,MACX,OAAO;AAAA,MACP,UAAU;AAAA,MACV,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAEA,UAAM,eAAuD;AAAA,MAC3D,OAAO;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,UAAU;AAAA,MACV,OAAO;AAAA,MACP,WAAW;AAAA,MACX,WAAW;AAAA,MACX,OAAO;AAAA,MACP,UAAU;AAAA,MACV,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAEA,YAAQ,UAAU,YAAY;AAE9B,SAAK,SAAS,QAAQ,aAAa;AAAA,MACjC,QAAQ;AAAA,MACR,OAAO,KAAK,gBAAgB,eAAe,SAAS;AAAA,MACpD,QAAQ,QAAQ,OAAO;AAAA,QACrB,QAAQ,OAAO,UAAU;AAAA,UACvB,QAAQ;AAAA,QACV,CAAC;AAAA,QACD,QAAQ,OAAO,OAAO,EAAE,OAAO,KAAK,CAAC;AAAA,QACrC,QAAQ,OAAO,MAAM;AAAA,QACrB,QAAQ,OAAO,KAAK;AAAA,MACtB;AAAA,MACA,YAAY;AAAA,QACV,IAAI,QAAQ,WAAW,QAAQ;AAAA,UAC7B,QAAQ,QAAQ,OAAO,QAAQ,QAAQ,OAAO,SAAS,GAAG,YAAY;AAAA,QACxE,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,OAAc,cAAsB;AAClC,QAAI,CAAC,OAAO,UAAU;AACpB,aAAO,WAAW,IAAI,OAAO;AAAA,IAC/B;AAEA,WAAO,OAAO;AAAA,EAChB;AAAA,EAEQ,kBAA0C;AAChD,WAAO,QAAQ,OAAO,OAAO,CAAC,EAAE,OAAO,SAAS,WAAW,GAAG,KAAK,MAAM;AACvE,UAAI,QAAQ,YAAY,QAAQ,QAAQ;AACtC,aAAK,QAAQ,IAAI,QAAQ,OAAO;AAAA,MAClC;AAEA,YAAM,aAAa,OAAO,QAAQ,IAAI,EACnC,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AACrB,eAAO,GAAG,GAAG,KAAK,KAAK;AAAA,MACzB,CAAC,EACA,KAAK,KAAK;AAEb,UAAI,UAAU,SAAS;AACrB,YAAI,KAAK,qBAAqB;AAC5B,gBAAM,eAAe,OAAO,YAAY,WAAW,UAAU,KAAK,UAAU,OAAO;AAEnF,iBAAO,iBAAiB,IAAI,MAAM,YAAY,CAAC;AAAA,QACjD;AAAA,MACF;AAEA,aAAO,IAAI,SAAS,KAAK,KAAK,KAAK,OAAO,GAAG,aAAa,KAAK,UAAU,MAAM,EAAE;AAAA,IACnF,CAAC;AAAA,EACH;AAAA,EAEO,WAAW,EAAE,WAAW,YAAY,GAAqD;AAC9F,QAAI,CAAC,WAAW;AACd,WAAK,OAAO,KAAK,6CAA6C;AAE9D;AAAA,IACF;AAEA,WAAO,KAAK;AAAA,MACV,KAAK;AAAA,MACL,cAAc,CAAC,yBAAyB,CAAC;AAAA,MACzC,kBAAkB;AAAA,MAClB;AAAA,IACF,CAAC;AAED,SAAK,sBAAsB;AAAA,EAC7B;AAAA,EAEO,IAAI;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,EACX,GAKS;AAIP,QAAI,mBAAmB,OAAO;AAC5B,YAAM,eAAe,QAAQ,SAAS,QAAQ,SAAS;AACvD,WAAK,OAAO,IAAI,OAAO,cAAc,IAAI;AAAA,IAC3C,WAAW,OAAO,YAAY,UAAU;AACtC,WAAK,OAAO,IAAI,OAAO,SAAS,IAAI;AAAA,IACtC,OAAO;AACL,WAAK,OAAO,IAAI,OAAO,KAAK,UAAU,OAAO,GAAG,IAAI;AAAA,IACtD;AAAA,EACF;AAAA,EAYO,MACL,kBACA,MACM;AACN,QAAI,OAAO,qBAAqB,YAAY,qBAAqB,QAAQ,aAAa,kBAAkB;AACtG,YAAM;AAAA,QACJ;AAAA,QACA,MAAM;AAAA,QACN;AAAA,MACF,IAAI;AACJ,WAAK,IAAI,EAAE,OAAO,SAAS,SAAS,MAAM,aAAa,QAAQ,CAAC;AAAA,IAClE,OAAO;AACL,WAAK,IAAI,EAAE,OAAO,SAAS,SAAS,kBAAkB,MAAM,SAAS,OAAU,CAAC;AAAA,IAClF;AAAA,EACF;AAAA,EAYO,KACL,kBACA,MACM;AACN,QAAI,OAAO,qBAAqB,YAAY,qBAAqB,QAAQ,aAAa,kBAAkB;AACtG,YAAM;AAAA,QACJ;AAAA,QACA,MAAM;AAAA,QACN;AAAA,MACF,IAAI;AACJ,WAAK,IAAI,EAAE,OAAO,QAAQ,SAAS,MAAM,aAAa,QAAQ,CAAC;AAAA,IACjE,OAAO;AACL,WAAK,IAAI,EAAE,OAAO,QAAQ,SAAS,kBAAkB,MAAM,SAAS,OAAU,CAAC;AAAA,IACjF;AAAA,EACF;AAAA,EAYO,KACL,kBACA,MACM;AACN,QAAI,OAAO,qBAAqB,YAAY,qBAAqB,QAAQ,aAAa,kBAAkB;AACtG,YAAM;AAAA,QACJ;AAAA,QACA,MAAM;AAAA,QACN;AAAA,MACF,IAAI;AACJ,WAAK,IAAI,EAAE,OAAO,QAAQ,SAAS,MAAM,aAAa,QAAQ,CAAC;AAAA,IACjE,OAAO;AACL,WAAK,IAAI,EAAE,OAAO,QAAQ,SAAS,kBAAkB,MAAM,SAAS,OAAU,CAAC;AAAA,IACjF;AAAA,EACF;AAAA,EAEO,MAAM;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAKS;AACP,QAAI,SAAS;AAEX,YAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC1E,YAAM,kBAAkB,GAAG,OAAO,KAAK,YAAY;AACnD,WAAK,IAAI,EAAE,OAAO,SAAS,SAAS,iBAAiB,MAAM,QAAQ,CAAC;AAGpE,UAAI,iBAAiB,SAAS,KAAK,qBAAqB;AACtD,eAAO,iBAAiB,KAAK;AAAA,MAC/B;AAAA,IACF,OAAO;AAEL,WAAK,IAAI,EAAE,OAAO,SAAS,SAAS,OAAO,MAAM,QAAQ,CAAC;AAAA,IAC5D;AAAA,EACF;AAAA,EAEO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAKS;AACP,SAAK,IAAI,EAAE,OAAO,SAAS,MAAM,QAAQ,CAAC;AAAA,EAC5C;AACF;AAEA,IAAO,iBAAQ,OAAO,YAAY;",
4
+ "sourcesContent": ["import * as Sentry from '@sentry/node';\nimport { nodeProfilingIntegration } from '@sentry/profiling-node';\nimport cluster from 'node:cluster';\nimport winston from 'winston';\nimport type { LogOptions } from '../websocket/utils.js';\nimport { getRequestId } from '../request-context/index.js';\n\nexport type LoggerLevels =\n | 'error'\n | 'warn'\n | 'info'\n | 'command'\n | 'database'\n | 'redis'\n | 'webServer'\n | 'webSocket'\n | 'queue'\n | 'queueJob'\n | 'event'\n | 'debug';\n\nexport class Logger {\n private static instance: Logger;\n private logger: winston.Logger;\n\n private environment: string | undefined;\n\n public isSentryInitialized = false;\n\n private constructor() {\n this.environment = process.env.NODE_ENV;\n\n const customFormat = this.getCustomFormat();\n\n const customLevels: winston.config.AbstractConfigSetLevels = {\n error: 0,\n warn: 1,\n info: 2,\n command: 3,\n database: 4,\n redis: 5,\n webServer: 6,\n webSocket: 7,\n queue: 8,\n queueJob: 9,\n event: 10,\n debug: 11,\n };\n\n const customColors: winston.config.AbstractConfigSetColors = {\n error: 'red',\n warn: 'yellow',\n info: 'blue',\n command: 'cyan',\n database: 'brightGreen',\n redis: 'brightYellow',\n webServer: 'brightBlue',\n webSocket: 'brightMagenta',\n queue: 'gray',\n queueJob: 'blue',\n event: 'brightGreen',\n debug: 'brightCyan',\n };\n\n winston.addColors(customColors);\n\n this.logger = winston.createLogger({\n levels: customLevels,\n level: this.environment === 'production' ? 'info' : 'debug',\n format: winston.format.combine(\n winston.format.timestamp({\n format: 'YYYY-MM-DD HH:mm:ss',\n }),\n winston.format.errors({ stack: true }),\n winston.format.splat(),\n winston.format.json(),\n ),\n transports: [\n new winston.transports.Console({\n format: winston.format.combine(winston.format.colorize(), customFormat),\n }),\n ],\n });\n }\n\n public static getInstance(): Logger {\n if (!Logger.instance) {\n Logger.instance = new Logger();\n }\n\n return Logger.instance;\n }\n\n private getCustomFormat(): winston.Logform.Format {\n return winston.format.printf(({ level, message, timestamp, ...meta }) => {\n // Auto-inject request ID from AsyncLocalStorage context if available\n const requestId = getRequestId();\n if (requestId && !meta['requestId']) {\n meta['requestId'] = requestId;\n }\n\n if (cluster.isWorker && cluster.worker) {\n meta['Worker'] = cluster.worker.id; // .process.pid;\n }\n\n const metaString = Object.entries(meta)\n .map(([key, value]) => {\n return `${key}: ${value}`;\n })\n .join(' | ');\n\n if (level === 'error') {\n if (this.isSentryInitialized) {\n const errorMessage = typeof message === 'string' ? message : JSON.stringify(message);\n\n Sentry.captureException(new Error(errorMessage));\n }\n }\n\n return `[${timestamp}] ${level}: ${message}${metaString ? ` (${metaString})` : ''}`;\n });\n }\n\n public initSentry({ sentryDsn, environment }: { sentryDsn: string; environment: string }): void {\n if (!sentryDsn) {\n this.logger.warn('Missing Sentry DSN when initializing Sentry');\n\n return;\n }\n\n Sentry.init({\n dsn: sentryDsn,\n integrations: [nodeProfilingIntegration()],\n tracesSampleRate: 1.0,\n environment,\n });\n\n this.isSentryInitialized = true;\n }\n\n public log({\n level,\n message,\n meta,\n options: _options,\n }: {\n level: LoggerLevels;\n message: unknown;\n meta?: Record<string, unknown>;\n options?: LogOptions;\n }): void {\n // if (options?.muteWorker) {\n // }\n\n if (message instanceof Error) {\n const errorMessage = message.stack ?? message.toString();\n this.logger.log(level, errorMessage, meta);\n } else if (typeof message === 'string') {\n this.logger.log(level, message, meta);\n } else {\n this.logger.log(level, JSON.stringify(message), meta);\n }\n }\n\n public debug({\n message,\n meta,\n options,\n }: {\n message: unknown;\n meta?: Record<string, unknown>;\n options?: LogOptions;\n }): void;\n public debug(message: unknown, meta?: Record<string, unknown>): void;\n public debug(\n messageOrOptions: unknown | { message: unknown; meta?: Record<string, unknown>; options?: LogOptions },\n meta?: Record<string, unknown>,\n ): void {\n if (typeof messageOrOptions === 'object' && messageOrOptions !== null && 'message' in messageOrOptions) {\n const {\n message,\n meta: optionsMeta,\n options,\n } = messageOrOptions as { message: unknown; meta?: Record<string, unknown>; options?: LogOptions };\n this.log({ level: 'debug', message, meta: optionsMeta, options });\n } else {\n this.log({ level: 'debug', message: messageOrOptions, meta, options: undefined });\n }\n }\n\n public info({\n message,\n meta,\n options,\n }: {\n message: unknown;\n meta?: Record<string, unknown>;\n options?: LogOptions;\n }): void;\n public info(message: unknown, meta?: Record<string, unknown>): void;\n public info(\n messageOrOptions: unknown | { message: unknown; meta?: Record<string, unknown>; options?: LogOptions },\n meta?: Record<string, unknown>,\n ): void {\n if (typeof messageOrOptions === 'object' && messageOrOptions !== null && 'message' in messageOrOptions) {\n const {\n message,\n meta: optionsMeta,\n options,\n } = messageOrOptions as { message: unknown; meta?: Record<string, unknown>; options?: LogOptions };\n this.log({ level: 'info', message, meta: optionsMeta, options });\n } else {\n this.log({ level: 'info', message: messageOrOptions, meta, options: undefined });\n }\n }\n\n public warn({\n message,\n meta,\n options,\n }: {\n message: unknown;\n meta?: Record<string, unknown>;\n options?: LogOptions;\n }): void;\n public warn(message: unknown, meta?: Record<string, unknown>): void;\n public warn(\n messageOrOptions: unknown | { message: unknown; meta?: Record<string, unknown>; options?: LogOptions },\n meta?: Record<string, unknown>,\n ): void {\n if (typeof messageOrOptions === 'object' && messageOrOptions !== null && 'message' in messageOrOptions) {\n const {\n message,\n meta: optionsMeta,\n options,\n } = messageOrOptions as { message: unknown; meta?: Record<string, unknown>; options?: LogOptions };\n this.log({ level: 'warn', message, meta: optionsMeta, options });\n } else {\n this.log({ level: 'warn', message: messageOrOptions, meta, options: undefined });\n }\n }\n\n // Overload 1: Object signature (existing usage)\n public error(args: {\n error: Error | unknown;\n message?: string;\n meta?: Record<string, unknown>;\n options?: LogOptions;\n }): void;\n // Overload 2: Positional signature (new usage)\n public error(error: Error | unknown, message?: string, meta?: Record<string, unknown>, options?: LogOptions): void;\n public error(\n arg1:\n | { error: Error | unknown; message?: string; meta?: Record<string, unknown>; options?: LogOptions }\n | (Error | unknown),\n message?: string,\n meta?: Record<string, unknown>,\n options?: LogOptions,\n ): void {\n // Support original object signature: Logger.error({ error, message?, meta?, options? })\n if (\n typeof arg1 === 'object' &&\n arg1 !== null &&\n 'error' in arg1 &&\n // If the caller passed a second positional arg, treat it as new signature\n message === undefined\n ) {\n const {\n error,\n message: objMessage,\n meta: objMeta,\n options: objOptions,\n } = arg1 as {\n error: Error | unknown;\n message?: string;\n meta?: Record<string, unknown>;\n options?: LogOptions;\n };\n\n if (objMessage) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n const combinedMessage = `${objMessage}: ${errorMessage}`;\n this.log({ level: 'error', message: combinedMessage, meta: objMeta, options: objOptions });\n if (error instanceof Error && this.isSentryInitialized) {\n Sentry.captureException(error);\n }\n } else {\n this.log({ level: 'error', message: error, meta: objMeta, options: objOptions });\n if (error instanceof Error && this.isSentryInitialized) {\n Sentry.captureException(error);\n }\n }\n return;\n }\n\n // New positional signature: Logger.error(error, message?, meta?, options?)\n const errorObj = arg1;\n if (message) {\n const errorMessage = errorObj instanceof Error ? errorObj.message : String(errorObj);\n const combinedMessage = `${message}: ${errorMessage}`;\n this.log({ level: 'error', message: combinedMessage, meta, options });\n } else {\n this.log({ level: 'error', message: errorObj, meta, options });\n }\n if (errorObj instanceof Error && this.isSentryInitialized) {\n Sentry.captureException(errorObj);\n }\n }\n\n public custom({\n level,\n message,\n meta,\n options,\n }: {\n level: LoggerLevels;\n message: unknown;\n meta?: Record<string, unknown>;\n options?: LogOptions;\n }): void {\n this.log({ level, message, meta, options });\n }\n}\n\nexport default Logger.getInstance();\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -9,11 +9,17 @@ export interface CacheOperationMetadata {
9
9
  ttl?: number;
10
10
  error?: string;
11
11
  argumentCount?: number;
12
+ host?: string;
13
+ port?: number;
12
14
  }
13
15
  export declare class CachePerformanceWrapper {
14
16
  private static performanceMonitor;
15
17
  static setPerformanceMonitor(monitor: PerformanceMonitor): void;
16
18
  static getPerformanceMonitor(): PerformanceMonitor;
19
+ /**
20
+ * Monitor cache connection operations (e.g., Redis connect/disconnect)
21
+ */
22
+ static monitorConnection<T>(operationName: string, operation: () => Promise<T>, metadata?: Partial<CacheOperationMetadata>): Promise<T>;
17
23
  /**
18
24
  * Monitor cache get operations
19
25
  */
@@ -1 +1 @@
1
- {"version":3,"file":"cache-performance.d.ts","sourceRoot":"","sources":["../../src/performance/cache-performance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cache-performance.d.ts","sourceRoot":"","sources":["../../src/performance/cache-performance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,uBAAuB;IAClC,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAqB;WAExC,qBAAqB,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;WAIxD,qBAAqB,IAAI,kBAAkB;IAOzD;;OAEG;WACiB,iBAAiB,CAAC,CAAC,EACrC,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,GACzC,OAAO,CAAC,CAAC,CAAC;IAgBb;;OAEG;WACiB,UAAU,CAAC,CAAC,EAC9B,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,GACzC,OAAO,CAAC,CAAC,CAAC;IAyBb;;OAEG;WACiB,UAAU,CAAC,CAAC,EAC9B,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,GACzC,OAAO,CAAC,CAAC,CAAC;IAiBb;;OAEG;WACiB,aAAa,CAAC,CAAC,EACjC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,GACzC,OAAO,CAAC,CAAC,CAAC;IAiBb;;OAEG;WACiB,YAAY,CAAC,CAAC,EAChC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,GACzC,OAAO,CAAC,CAAC,CAAC;IAiBb;;OAEG;WACiB,aAAa,CAAC,CAAC,EACjC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,GACzC,OAAO,CAAC,CAAC,CAAC;IAiBb;;OAEG;WACiB,eAAe,CAAC,CAAC,EACnC,IAAI,EAAE,MAAM,EAAE,EACd,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,GACzC,OAAO,CAAC,CAAC,CAAC;IAiBb;;OAEG;WACiB,eAAe,CAAC,CAAC,EACnC,IAAI,EAAE,MAAM,EAAE,EACd,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,GACzC,OAAO,CAAC,CAAC,CAAC;IAiBb;;OAEG;WACiB,gBAAgB,CAAC,CAAC,EACpC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,GACzC,OAAO,CAAC,CAAC,CAAC;IAiBb;;OAEG;WACiB,gBAAgB,CAAC,CAAC,EACpC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,GACzC,OAAO,CAAC,CAAC,CAAC;CAgBd;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,CAAC,EAAE,MAAM,IACzC,QAAQ,GAAG,EAAE,aAAa,MAAM,EAAE,YAAY,kBAAkB,wBAkBlF"}
@@ -15,6 +15,22 @@ class CachePerformanceWrapper {
15
15
  }
16
16
  return CachePerformanceWrapper.performanceMonitor;
17
17
  }
18
+ /**
19
+ * Monitor cache connection operations (e.g., Redis connect/disconnect)
20
+ */
21
+ static async monitorConnection(operationName, operation, metadata) {
22
+ const monitor = CachePerformanceWrapper.getPerformanceMonitor();
23
+ const operationMetadata = {
24
+ operation: operationName,
25
+ ...metadata
26
+ };
27
+ return monitor.measureAsync({
28
+ name: `connection.${operationName}`,
29
+ type: "cache",
30
+ fn: operation,
31
+ metadata: operationMetadata
32
+ });
33
+ }
18
34
  /**
19
35
  * Monitor cache get operations
20
36
  */
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/performance/cache-performance.ts"],
4
- "sourcesContent": ["import { PerformanceMonitor } from './performance-monitor.js';\n\nexport interface CacheOperationMetadata {\n operation: string;\n key?: string;\n keyPattern?: string;\n hit?: boolean;\n miss?: boolean;\n size?: number;\n ttl?: number;\n error?: string;\n argumentCount?: number;\n}\n\nexport class CachePerformanceWrapper {\n private static performanceMonitor: PerformanceMonitor;\n\n public static setPerformanceMonitor(monitor: PerformanceMonitor): void {\n CachePerformanceWrapper.performanceMonitor = monitor;\n }\n\n public static getPerformanceMonitor(): PerformanceMonitor {\n if (!CachePerformanceWrapper.performanceMonitor) {\n CachePerformanceWrapper.performanceMonitor = PerformanceMonitor.getInstance();\n }\n return CachePerformanceWrapper.performanceMonitor;\n }\n\n /**\n * Monitor cache get operations\n */\n public static async monitorGet<T>(\n key: string,\n operation: () => Promise<T>,\n metadata?: Partial<CacheOperationMetadata>,\n ): Promise<T> {\n const monitor = CachePerformanceWrapper.getPerformanceMonitor();\n\n const operationMetadata: CacheOperationMetadata = {\n operation: 'get',\n key,\n ...metadata,\n };\n\n return monitor.measureAsync({\n name: `get.${key}`,\n type: 'cache',\n fn: async () => {\n const result = await operation();\n\n // Determine cache hit/miss\n operationMetadata.hit = result !== null && result !== undefined;\n operationMetadata.miss = !operationMetadata.hit;\n\n return result;\n },\n metadata: operationMetadata,\n });\n }\n\n /**\n * Monitor cache set operations\n */\n public static async monitorSet<T>(\n key: string,\n operation: () => Promise<T>,\n metadata?: Partial<CacheOperationMetadata>,\n ): Promise<T> {\n const monitor = CachePerformanceWrapper.getPerformanceMonitor();\n\n const operationMetadata: CacheOperationMetadata = {\n operation: 'set',\n key,\n ...metadata,\n };\n\n return monitor.measureAsync({\n name: `set.${key}`,\n type: 'cache',\n fn: operation,\n metadata: operationMetadata,\n });\n }\n\n /**\n * Monitor cache delete operations\n */\n public static async monitorDelete<T>(\n key: string,\n operation: () => Promise<T>,\n metadata?: Partial<CacheOperationMetadata>,\n ): Promise<T> {\n const monitor = CachePerformanceWrapper.getPerformanceMonitor();\n\n const operationMetadata: CacheOperationMetadata = {\n operation: 'delete',\n key,\n ...metadata,\n };\n\n return monitor.measureAsync({\n name: `delete.${key}`,\n type: 'cache',\n fn: operation,\n metadata: operationMetadata,\n });\n }\n\n /**\n * Monitor cache clear operations\n */\n public static async monitorClear<T>(\n pattern: string,\n operation: () => Promise<T>,\n metadata?: Partial<CacheOperationMetadata>,\n ): Promise<T> {\n const monitor = CachePerformanceWrapper.getPerformanceMonitor();\n\n const operationMetadata: CacheOperationMetadata = {\n operation: 'clear',\n keyPattern: pattern,\n ...metadata,\n };\n\n return monitor.measureAsync({\n name: `clear.${pattern}`,\n type: 'cache',\n fn: operation,\n metadata: operationMetadata,\n });\n }\n\n /**\n * Monitor cache exists operations\n */\n public static async monitorExists<T>(\n key: string,\n operation: () => Promise<T>,\n metadata?: Partial<CacheOperationMetadata>,\n ): Promise<T> {\n const monitor = CachePerformanceWrapper.getPerformanceMonitor();\n\n const operationMetadata: CacheOperationMetadata = {\n operation: 'exists',\n key,\n ...metadata,\n };\n\n return monitor.measureAsync({\n name: `exists.${key}`,\n type: 'cache',\n fn: operation,\n metadata: operationMetadata,\n });\n }\n\n /**\n * Monitor cache multi-get operations\n */\n public static async monitorMultiGet<T>(\n keys: string[],\n operation: () => Promise<T>,\n metadata?: Partial<CacheOperationMetadata>,\n ): Promise<T> {\n const monitor = CachePerformanceWrapper.getPerformanceMonitor();\n\n const operationMetadata: CacheOperationMetadata = {\n operation: 'multi_get',\n keyPattern: `[${keys.join(', ')}]`,\n ...metadata,\n };\n\n return monitor.measureAsync({\n name: `multi_get.${keys.length}_keys`,\n type: 'cache',\n fn: operation,\n metadata: operationMetadata,\n });\n }\n\n /**\n * Monitor cache multi-set operations\n */\n public static async monitorMultiSet<T>(\n keys: string[],\n operation: () => Promise<T>,\n metadata?: Partial<CacheOperationMetadata>,\n ): Promise<T> {\n const monitor = CachePerformanceWrapper.getPerformanceMonitor();\n\n const operationMetadata: CacheOperationMetadata = {\n operation: 'multi_set',\n keyPattern: `[${keys.join(', ')}]`,\n ...metadata,\n };\n\n return monitor.measureAsync({\n name: `multi_set.${keys.length}_keys`,\n type: 'cache',\n fn: operation,\n metadata: operationMetadata,\n });\n }\n\n /**\n * Monitor cache increment operations\n */\n public static async monitorIncrement<T>(\n key: string,\n operation: () => Promise<T>,\n metadata?: Partial<CacheOperationMetadata>,\n ): Promise<T> {\n const monitor = CachePerformanceWrapper.getPerformanceMonitor();\n\n const operationMetadata: CacheOperationMetadata = {\n operation: 'increment',\n key,\n ...metadata,\n };\n\n return monitor.measureAsync({\n name: `increment.${key}`,\n type: 'cache',\n fn: operation,\n metadata: operationMetadata,\n });\n }\n\n /**\n * Monitor cache decrement operations\n */\n public static async monitorDecrement<T>(\n key: string,\n operation: () => Promise<T>,\n metadata?: Partial<CacheOperationMetadata>,\n ): Promise<T> {\n const monitor = CachePerformanceWrapper.getPerformanceMonitor();\n\n const operationMetadata: CacheOperationMetadata = {\n operation: 'decrement',\n key,\n ...metadata,\n };\n\n return monitor.measureAsync({\n name: `decrement.${key}`,\n type: 'cache',\n fn: operation,\n metadata: operationMetadata,\n });\n }\n}\n\n/**\n * Decorator for monitoring cache operations\n */\nexport function MonitorCacheOperation(operationName?: string) {\n return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {\n const originalMethod = descriptor.value;\n const className = target.constructor.name;\n const operation = operationName ?? propertyKey;\n\n descriptor.value = async function (...args: any[]) {\n const monitor = CachePerformanceWrapper.getPerformanceMonitor();\n\n return monitor.measureAsync({\n name: `${className}.${operation}`,\n type: 'cache',\n fn: () => originalMethod.apply(this, args),\n metadata: { argumentCount: args.length },\n });\n };\n\n return descriptor;\n };\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { PerformanceMonitor } from './performance-monitor.js';\n\nexport interface CacheOperationMetadata {\n operation: string;\n key?: string;\n keyPattern?: string;\n hit?: boolean;\n miss?: boolean;\n size?: number;\n ttl?: number;\n error?: string;\n argumentCount?: number;\n host?: string;\n port?: number;\n}\n\nexport class CachePerformanceWrapper {\n private static performanceMonitor: PerformanceMonitor;\n\n public static setPerformanceMonitor(monitor: PerformanceMonitor): void {\n CachePerformanceWrapper.performanceMonitor = monitor;\n }\n\n public static getPerformanceMonitor(): PerformanceMonitor {\n if (!CachePerformanceWrapper.performanceMonitor) {\n CachePerformanceWrapper.performanceMonitor = PerformanceMonitor.getInstance();\n }\n return CachePerformanceWrapper.performanceMonitor;\n }\n\n /**\n * Monitor cache connection operations (e.g., Redis connect/disconnect)\n */\n public static async monitorConnection<T>(\n operationName: string,\n operation: () => Promise<T>,\n metadata?: Partial<CacheOperationMetadata>,\n ): Promise<T> {\n const monitor = CachePerformanceWrapper.getPerformanceMonitor();\n\n const operationMetadata: CacheOperationMetadata = {\n operation: operationName,\n ...metadata,\n };\n\n return monitor.measureAsync({\n name: `connection.${operationName}`,\n type: 'cache',\n fn: operation,\n metadata: operationMetadata,\n });\n }\n\n /**\n * Monitor cache get operations\n */\n public static async monitorGet<T>(\n key: string,\n operation: () => Promise<T>,\n metadata?: Partial<CacheOperationMetadata>,\n ): Promise<T> {\n const monitor = CachePerformanceWrapper.getPerformanceMonitor();\n\n const operationMetadata: CacheOperationMetadata = {\n operation: 'get',\n key,\n ...metadata,\n };\n\n return monitor.measureAsync({\n name: `get.${key}`,\n type: 'cache',\n fn: async () => {\n const result = await operation();\n\n // Determine cache hit/miss\n operationMetadata.hit = result !== null && result !== undefined;\n operationMetadata.miss = !operationMetadata.hit;\n\n return result;\n },\n metadata: operationMetadata,\n });\n }\n\n /**\n * Monitor cache set operations\n */\n public static async monitorSet<T>(\n key: string,\n operation: () => Promise<T>,\n metadata?: Partial<CacheOperationMetadata>,\n ): Promise<T> {\n const monitor = CachePerformanceWrapper.getPerformanceMonitor();\n\n const operationMetadata: CacheOperationMetadata = {\n operation: 'set',\n key,\n ...metadata,\n };\n\n return monitor.measureAsync({\n name: `set.${key}`,\n type: 'cache',\n fn: operation,\n metadata: operationMetadata,\n });\n }\n\n /**\n * Monitor cache delete operations\n */\n public static async monitorDelete<T>(\n key: string,\n operation: () => Promise<T>,\n metadata?: Partial<CacheOperationMetadata>,\n ): Promise<T> {\n const monitor = CachePerformanceWrapper.getPerformanceMonitor();\n\n const operationMetadata: CacheOperationMetadata = {\n operation: 'delete',\n key,\n ...metadata,\n };\n\n return monitor.measureAsync({\n name: `delete.${key}`,\n type: 'cache',\n fn: operation,\n metadata: operationMetadata,\n });\n }\n\n /**\n * Monitor cache clear operations\n */\n public static async monitorClear<T>(\n pattern: string,\n operation: () => Promise<T>,\n metadata?: Partial<CacheOperationMetadata>,\n ): Promise<T> {\n const monitor = CachePerformanceWrapper.getPerformanceMonitor();\n\n const operationMetadata: CacheOperationMetadata = {\n operation: 'clear',\n keyPattern: pattern,\n ...metadata,\n };\n\n return monitor.measureAsync({\n name: `clear.${pattern}`,\n type: 'cache',\n fn: operation,\n metadata: operationMetadata,\n });\n }\n\n /**\n * Monitor cache exists operations\n */\n public static async monitorExists<T>(\n key: string,\n operation: () => Promise<T>,\n metadata?: Partial<CacheOperationMetadata>,\n ): Promise<T> {\n const monitor = CachePerformanceWrapper.getPerformanceMonitor();\n\n const operationMetadata: CacheOperationMetadata = {\n operation: 'exists',\n key,\n ...metadata,\n };\n\n return monitor.measureAsync({\n name: `exists.${key}`,\n type: 'cache',\n fn: operation,\n metadata: operationMetadata,\n });\n }\n\n /**\n * Monitor cache multi-get operations\n */\n public static async monitorMultiGet<T>(\n keys: string[],\n operation: () => Promise<T>,\n metadata?: Partial<CacheOperationMetadata>,\n ): Promise<T> {\n const monitor = CachePerformanceWrapper.getPerformanceMonitor();\n\n const operationMetadata: CacheOperationMetadata = {\n operation: 'multi_get',\n keyPattern: `[${keys.join(', ')}]`,\n ...metadata,\n };\n\n return monitor.measureAsync({\n name: `multi_get.${keys.length}_keys`,\n type: 'cache',\n fn: operation,\n metadata: operationMetadata,\n });\n }\n\n /**\n * Monitor cache multi-set operations\n */\n public static async monitorMultiSet<T>(\n keys: string[],\n operation: () => Promise<T>,\n metadata?: Partial<CacheOperationMetadata>,\n ): Promise<T> {\n const monitor = CachePerformanceWrapper.getPerformanceMonitor();\n\n const operationMetadata: CacheOperationMetadata = {\n operation: 'multi_set',\n keyPattern: `[${keys.join(', ')}]`,\n ...metadata,\n };\n\n return monitor.measureAsync({\n name: `multi_set.${keys.length}_keys`,\n type: 'cache',\n fn: operation,\n metadata: operationMetadata,\n });\n }\n\n /**\n * Monitor cache increment operations\n */\n public static async monitorIncrement<T>(\n key: string,\n operation: () => Promise<T>,\n metadata?: Partial<CacheOperationMetadata>,\n ): Promise<T> {\n const monitor = CachePerformanceWrapper.getPerformanceMonitor();\n\n const operationMetadata: CacheOperationMetadata = {\n operation: 'increment',\n key,\n ...metadata,\n };\n\n return monitor.measureAsync({\n name: `increment.${key}`,\n type: 'cache',\n fn: operation,\n metadata: operationMetadata,\n });\n }\n\n /**\n * Monitor cache decrement operations\n */\n public static async monitorDecrement<T>(\n key: string,\n operation: () => Promise<T>,\n metadata?: Partial<CacheOperationMetadata>,\n ): Promise<T> {\n const monitor = CachePerformanceWrapper.getPerformanceMonitor();\n\n const operationMetadata: CacheOperationMetadata = {\n operation: 'decrement',\n key,\n ...metadata,\n };\n\n return monitor.measureAsync({\n name: `decrement.${key}`,\n type: 'cache',\n fn: operation,\n metadata: operationMetadata,\n });\n }\n}\n\n/**\n * Decorator for monitoring cache operations\n */\nexport function MonitorCacheOperation(operationName?: string) {\n return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {\n const originalMethod = descriptor.value;\n const className = target.constructor.name;\n const operation = operationName ?? propertyKey;\n\n descriptor.value = async function (...args: any[]) {\n const monitor = CachePerformanceWrapper.getPerformanceMonitor();\n\n return monitor.measureAsync({\n name: `${className}.${operation}`,\n type: 'cache',\n fn: () => originalMethod.apply(this, args),\n metadata: { argumentCount: args.length },\n });\n };\n\n return descriptor;\n };\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,5 @@
1
1
  export * from './performance-monitor.js';
2
+ export * from './performance-monitor.plugin.js';
2
3
  export * from './database-performance.js';
3
4
  export * from './webserver-performance.js';
4
5
  export * from './websocket-performance.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/performance/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/performance/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,iCAAiC,CAAC;AAChD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export * from "./performance-monitor.js";
2
+ export * from "./performance-monitor.plugin.js";
2
3
  export * from "./database-performance.js";
3
4
  export * from "./webserver-performance.js";
4
5
  export * from "./websocket-performance.js";
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/performance/index.ts"],
4
- "sourcesContent": ["export * from './performance-monitor.js';\nexport * from './database-performance.js';\nexport * from './webserver-performance.js';\nexport * from './websocket-performance.js';\nexport * from './queue-performance.js';\nexport * from './cache-performance.js';\n"],
5
- "mappings": "AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
4
+ "sourcesContent": ["export * from './performance-monitor.js';\nexport * from './performance-monitor.plugin.js';\nexport * from './database-performance.js';\nexport * from './webserver-performance.js';\nexport * from './websocket-performance.js';\nexport * from './queue-performance.js';\nexport * from './cache-performance.js';\n"],
5
+ "mappings": "AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
6
6
  "names": []
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"performance-monitor.d.ts","sourceRoot":"","sources":["../../src/performance/performance-monitor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"performance-monitor.d.ts","sourceRoot":"","sources":["../../src/performance/performance-monitor.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,8 @@ class PerformanceMonitor {
9
9
  static instance;
10
10
  observer;
11
11
  metrics = [];
12
+ // Use Map for aggregation to avoid object prototype risks
13
+ // (No external exposure, but satisfies security linter by avoiding dynamic object keys)
12
14
  thresholds = {
13
15
  http: 1e3,
14
16
  // 1 second
@@ -74,7 +76,33 @@ class PerformanceMonitor {
74
76
  if (this.metrics.length > this.maxMetricsHistory) {
75
77
  this.metrics = this.metrics.slice(-this.maxMetricsHistory);
76
78
  }
77
- const threshold = this.thresholds[metricType];
79
+ const allowedTypes = ["http", "database", "cache", "queue", "websocket", "custom"];
80
+ if (!allowedTypes.includes(metricType)) {
81
+ return;
82
+ }
83
+ let threshold;
84
+ switch (metricType) {
85
+ case "http":
86
+ threshold = this.thresholds.http;
87
+ break;
88
+ case "database":
89
+ threshold = this.thresholds.database;
90
+ break;
91
+ case "cache":
92
+ threshold = this.thresholds.cache;
93
+ break;
94
+ case "queue":
95
+ threshold = this.thresholds.queue;
96
+ break;
97
+ case "websocket":
98
+ threshold = this.thresholds.websocket;
99
+ break;
100
+ case "custom":
101
+ threshold = this.thresholds.custom;
102
+ break;
103
+ default:
104
+ threshold = 0;
105
+ }
78
106
  if (this.logSlowOperations && entry.duration > threshold) {
79
107
  Logger.warn({
80
108
  message: `Performance threshold exceeded`,
@@ -165,23 +193,24 @@ class PerformanceMonitor {
165
193
  }
166
194
  getAverageMetrics(type) {
167
195
  const metrics = this.getMetrics(type);
168
- const groups = metrics.reduce(
169
- (acc, metric) => {
170
- if (!acc[metric.name]) {
171
- acc[metric.name] = [];
172
- }
173
- acc[metric.name].push(metric.duration);
174
- return acc;
175
- },
176
- {}
177
- );
178
- return Object.entries(groups).reduce(
179
- (acc, [name, durations]) => {
180
- acc[name] = durations.reduce((sum, duration) => sum + duration, 0) / durations.length;
181
- return acc;
182
- },
183
- {}
184
- );
196
+ const groups = /* @__PURE__ */ new Map();
197
+ for (const metric of metrics) {
198
+ const key = metric.name;
199
+ const arr = groups.get(key) ?? [];
200
+ arr.push(metric.duration);
201
+ if (!groups.has(key)) groups.set(key, arr);
202
+ }
203
+ const averagesMap = /* @__PURE__ */ new Map();
204
+ for (const [key, durations] of groups.entries()) {
205
+ const total = durations.reduce((sum, d) => sum + d, 0);
206
+ averagesMap.set(key, total / durations.length);
207
+ }
208
+ return Array.from(averagesMap.entries()).reduce((acc, [k, v]) => {
209
+ if (typeof k === "string") {
210
+ Object.defineProperty(acc, k, { value: v, enumerable: true, configurable: true, writable: false });
211
+ }
212
+ return acc;
213
+ }, /* @__PURE__ */ Object.create(null));
185
214
  }
186
215
  getMemoryUsage() {
187
216
  return process.memoryUsage();
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/performance/performance-monitor.ts"],
4
- "sourcesContent": ["import { PerformanceObserver, performance } from 'perf_hooks';\nimport { Logger } from '../logger/index.js';\n\nexport interface PerformanceMetrics {\n name: string;\n duration: number;\n timestamp: number;\n type: 'http' | 'database' | 'cache' | 'queue' | 'websocket' | 'custom';\n metadata?: Record<string, any>;\n}\n\nexport interface PerformanceThresholds {\n http: number;\n database: number;\n cache: number;\n queue: number;\n websocket: number;\n custom: number;\n}\n\nexport interface PerformanceMonitorOptions {\n enabled?: boolean;\n maxMetricsHistory?: number;\n thresholds?: Partial<PerformanceThresholds>;\n logSlowOperations?: boolean;\n logAllOperations?: boolean;\n}\n\nexport class PerformanceMonitor {\n private static instance: PerformanceMonitor;\n private observer: PerformanceObserver | undefined;\n private metrics: PerformanceMetrics[] = [];\n private thresholds: PerformanceThresholds = {\n http: 1000, // 1 second\n database: 500, // 500ms\n cache: 100, // 100ms\n queue: 2000, // 2 seconds\n websocket: 200, // 200ms\n custom: 1000, // 1 second\n };\n private maxMetricsHistory = 10000;\n private isEnabled = true;\n private logSlowOperations = true;\n private logAllOperations = false;\n\n private constructor(options: PerformanceMonitorOptions = {}) {\n this.isEnabled = options.enabled ?? true;\n this.maxMetricsHistory = options.maxMetricsHistory ?? 10000;\n this.logSlowOperations = options.logSlowOperations ?? true;\n this.logAllOperations = options.logAllOperations ?? false;\n\n if (options.thresholds) {\n this.thresholds = { ...this.thresholds, ...options.thresholds };\n }\n\n if (this.isEnabled) {\n this.initializeObserver();\n }\n }\n\n public static getInstance(options?: PerformanceMonitorOptions): PerformanceMonitor {\n if (!PerformanceMonitor.instance) {\n PerformanceMonitor.instance = new PerformanceMonitor(options);\n }\n return PerformanceMonitor.instance;\n }\n\n public static initialize(options: PerformanceMonitorOptions = {}): PerformanceMonitor {\n PerformanceMonitor.instance = new PerformanceMonitor(options);\n return PerformanceMonitor.instance;\n }\n\n private initializeObserver(): void {\n this.observer = new PerformanceObserver(items => {\n items.getEntries().forEach(entry => {\n if (entry.name.startsWith('pxl-performance:')) {\n this.handlePerformanceEntry(entry);\n }\n });\n });\n\n this.observer.observe({ entryTypes: ['measure'] });\n }\n\n private handlePerformanceEntry(entry: any): void {\n if (!this.isEnabled) return;\n\n const [, type, name] = entry.name.split(':');\n const metricType = type as PerformanceMetrics['type'];\n\n const metric: PerformanceMetrics = {\n name,\n duration: entry.duration,\n timestamp: Date.now(),\n type: metricType,\n metadata: entry.detail,\n };\n\n this.metrics.push(metric);\n\n // Keep only the most recent metrics\n if (this.metrics.length > this.maxMetricsHistory) {\n this.metrics = this.metrics.slice(-this.maxMetricsHistory);\n }\n\n // Check thresholds and log warnings\n const threshold = this.thresholds[metricType];\n if (this.logSlowOperations && entry.duration > threshold) {\n Logger.warn({\n message: `Performance threshold exceeded`,\n meta: {\n operation: entry.name,\n duration: `${entry.duration.toFixed(2)}ms`,\n threshold: `${threshold}ms`,\n type: metricType,\n },\n });\n }\n\n // Log all operations if enabled\n if (this.logAllOperations) {\n Logger.debug({\n message: `Performance metric`,\n meta: {\n operation: entry.name,\n duration: `${entry.duration.toFixed(2)}ms`,\n type: metricType,\n },\n });\n }\n }\n\n public startMeasure(name: string, type: PerformanceMetrics['type'] = 'custom'): string {\n if (!this.isEnabled) return '';\n\n const measureName = `pxl-performance:${type}:${name}`;\n const startMark = `${measureName}-start`;\n\n performance.mark(startMark);\n return startMark;\n }\n\n public endMeasure(startMark: string, _metadata?: Record<string, any>): void {\n if (!this.isEnabled || !startMark) return;\n\n const endMark = `${startMark.replace('-start', '')}-end`;\n const measureName = startMark.replace('-start', '');\n\n performance.mark(endMark);\n\n try {\n performance.measure(measureName, startMark, endMark);\n\n // Clean up marks\n performance.clearMarks(startMark);\n performance.clearMarks(endMark);\n } catch (error) {\n Logger.error({\n error: error instanceof Error ? error : new Error(String(error)),\n message: 'Error measuring performance',\n });\n }\n }\n\n public async measureAsync<T>({\n name,\n type,\n fn,\n metadata,\n }: {\n name: string;\n type: PerformanceMetrics['type'];\n fn: () => Promise<T>;\n metadata?: Record<string, any>;\n }): Promise<T> {\n if (!this.isEnabled) {\n return fn();\n }\n\n const startMark = this.startMeasure(name, type);\n\n try {\n const result = await fn();\n this.endMeasure(startMark, metadata);\n return result;\n } catch (error) {\n this.endMeasure(startMark, { ...metadata, error: error instanceof Error ? error.message : String(error) });\n throw error;\n }\n }\n\n public measureSync<T>(\n name: string,\n type: PerformanceMetrics['type'],\n fn: () => T,\n metadata?: Record<string, any>,\n ): T {\n if (!this.isEnabled) {\n return fn();\n }\n\n const startMark = this.startMeasure(name, type);\n\n try {\n const result = fn();\n this.endMeasure(startMark, metadata);\n return result;\n } catch (error) {\n this.endMeasure(startMark, { ...metadata, error: error instanceof Error ? error.message : String(error) });\n throw error;\n }\n }\n\n public getMetrics(type?: PerformanceMetrics['type'], limit?: number): PerformanceMetrics[] {\n let filteredMetrics = this.metrics;\n\n if (type) {\n filteredMetrics = filteredMetrics.filter(m => m.type === type);\n }\n\n if (limit) {\n filteredMetrics = filteredMetrics.slice(-limit);\n }\n\n return filteredMetrics;\n }\n\n public getAverageMetrics(type?: PerformanceMetrics['type']): Record<string, number> {\n const metrics = this.getMetrics(type);\n const groups = metrics.reduce(\n (acc, metric) => {\n if (!acc[metric.name]) {\n acc[metric.name] = [];\n }\n acc[metric.name].push(metric.duration);\n return acc;\n },\n {} as Record<string, number[]>,\n );\n\n return Object.entries(groups).reduce(\n (acc, [name, durations]) => {\n acc[name] = durations.reduce((sum, duration) => sum + duration, 0) / durations.length;\n return acc;\n },\n {} as Record<string, number>,\n );\n }\n\n public getMemoryUsage(): NodeJS.MemoryUsage {\n return process.memoryUsage();\n }\n\n public getDetailedMemoryUsage(): Record<string, number> {\n const usage = process.memoryUsage();\n return {\n rss: Math.round(usage.rss / 1024 / 1024), // MB\n heapTotal: Math.round(usage.heapTotal / 1024 / 1024), // MB\n heapUsed: Math.round(usage.heapUsed / 1024 / 1024), // MB\n external: Math.round(usage.external / 1024 / 1024), // MB\n arrayBuffers: Math.round(usage.arrayBuffers / 1024 / 1024), // MB\n };\n }\n\n public getCpuUsage(): NodeJS.CpuUsage {\n return process.cpuUsage();\n }\n\n public setThresholds(thresholds: Partial<PerformanceThresholds>): void {\n this.thresholds = { ...this.thresholds, ...thresholds };\n }\n\n public setEnabled(enabled: boolean): void {\n this.isEnabled = enabled;\n\n if (enabled && !this.observer) {\n this.initializeObserver();\n } else if (!enabled && this.observer) {\n this.observer.disconnect();\n this.observer = undefined;\n }\n }\n\n public clearMetrics(): void {\n this.metrics = [];\n }\n\n public generateReport(): {\n summary: {\n totalMetrics: number;\n averages: Record<string, number>;\n thresholds: PerformanceThresholds;\n enabled: boolean;\n };\n metrics: PerformanceMetrics[];\n memory: Record<string, number>;\n cpu: NodeJS.CpuUsage;\n } {\n return {\n summary: {\n totalMetrics: this.metrics.length,\n averages: this.getAverageMetrics(),\n thresholds: this.thresholds,\n enabled: this.isEnabled,\n },\n metrics: this.getMetrics(undefined, 100), // Last 100 metrics\n memory: this.getDetailedMemoryUsage(),\n cpu: this.getCpuUsage(),\n };\n }\n\n public generateFormattedReport(format: 'simple' | 'detailed' = 'detailed'): string {\n const report = this.generateReport();\n\n if (format === 'simple') {\n const memoryUsed = report.memory.heapUsed;\n const cpuPercent = Math.round((report.cpu.user + report.cpu.system) / 1000000); // Convert microseconds to rough percentage\n const avgDurations = Object.values(report.summary.averages);\n const avgMetric =\n avgDurations.length > 0 ? Math.round(avgDurations.reduce((sum, val) => sum + val, 0) / avgDurations.length) : 0;\n\n return `Performance Report (summary: ${report.summary.totalMetrics} ops, avg: ${avgMetric}ms | metrics: ${report.metrics.length} | memory: ${memoryUsed}mb | cpu: ${cpuPercent}%)`;\n }\n const lines = [\n 'Performance Report:',\n `Summary: ${report.summary.totalMetrics} operations tracked, enabled: ${report.summary.enabled}`,\n `Metrics: ${report.metrics.length} recent operations recorded`,\n `Memory: RSS: ${report.memory.rss}mb, Heap: ${report.memory.heapUsed}/${report.memory.heapTotal}mb`,\n `CPU: User: ${Math.round(report.cpu.user / 1000)}ms, System: ${Math.round(report.cpu.system / 1000)}ms`,\n ];\n\n if (Object.keys(report.summary.averages).length > 0) {\n lines.push(\n `Averages: ${Object.entries(report.summary.averages)\n .map(([name, avg]) => `${name}: ${Math.round(avg)}ms`)\n .join(', ')}`,\n );\n }\n\n return lines.join('\\n');\n }\n\n public destroy(): void {\n if (this.observer) {\n this.observer.disconnect();\n this.observer = undefined;\n }\n this.metrics = [];\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { PerformanceObserver, performance } from 'perf_hooks';\nimport { Logger } from '../logger/index.js';\n\nexport interface PerformanceMetrics {\n name: string;\n duration: number;\n timestamp: number;\n type: 'http' | 'database' | 'cache' | 'queue' | 'websocket' | 'custom';\n metadata?: Record<string, any>;\n}\n\nexport interface PerformanceThresholds {\n http: number;\n database: number;\n cache: number;\n queue: number;\n websocket: number;\n custom: number;\n}\n\nexport interface PerformanceMonitorOptions {\n enabled?: boolean;\n maxMetricsHistory?: number;\n thresholds?: Partial<PerformanceThresholds>;\n logSlowOperations?: boolean;\n logAllOperations?: boolean;\n}\n\nexport class PerformanceMonitor {\n private static instance: PerformanceMonitor;\n private observer: PerformanceObserver | undefined;\n private metrics: PerformanceMetrics[] = [];\n // Use Map for aggregation to avoid object prototype risks\n // (No external exposure, but satisfies security linter by avoiding dynamic object keys)\n private thresholds: PerformanceThresholds = {\n http: 1000, // 1 second\n database: 500, // 500ms\n cache: 100, // 100ms\n queue: 2000, // 2 seconds\n websocket: 200, // 200ms\n custom: 1000, // 1 second\n };\n private maxMetricsHistory = 10000;\n private isEnabled = true;\n private logSlowOperations = true;\n private logAllOperations = false;\n\n private constructor(options: PerformanceMonitorOptions = {}) {\n this.isEnabled = options.enabled ?? true;\n this.maxMetricsHistory = options.maxMetricsHistory ?? 10000;\n this.logSlowOperations = options.logSlowOperations ?? true;\n this.logAllOperations = options.logAllOperations ?? false;\n\n if (options.thresholds) {\n this.thresholds = { ...this.thresholds, ...options.thresholds };\n }\n\n if (this.isEnabled) {\n this.initializeObserver();\n }\n }\n\n public static getInstance(options?: PerformanceMonitorOptions): PerformanceMonitor {\n if (!PerformanceMonitor.instance) {\n PerformanceMonitor.instance = new PerformanceMonitor(options);\n }\n return PerformanceMonitor.instance;\n }\n\n public static initialize(options: PerformanceMonitorOptions = {}): PerformanceMonitor {\n PerformanceMonitor.instance = new PerformanceMonitor(options);\n return PerformanceMonitor.instance;\n }\n\n private initializeObserver(): void {\n this.observer = new PerformanceObserver(items => {\n items.getEntries().forEach(entry => {\n if (entry.name.startsWith('pxl-performance:')) {\n this.handlePerformanceEntry(entry);\n }\n });\n });\n\n this.observer.observe({ entryTypes: ['measure'] });\n }\n\n private handlePerformanceEntry(entry: any): void {\n if (!this.isEnabled) return;\n\n const [, type, name] = entry.name.split(':');\n const metricType = type as PerformanceMetrics['type'];\n\n const metric: PerformanceMetrics = {\n name,\n duration: entry.duration,\n timestamp: Date.now(),\n type: metricType,\n metadata: entry.detail,\n };\n\n this.metrics.push(metric);\n\n // Keep only the most recent metrics\n if (this.metrics.length > this.maxMetricsHistory) {\n this.metrics = this.metrics.slice(-this.maxMetricsHistory);\n }\n\n // Check thresholds and log warnings\n const allowedTypes: PerformanceMetrics['type'][] = ['http', 'database', 'cache', 'queue', 'websocket', 'custom'];\n if (!allowedTypes.includes(metricType)) {\n return;\n }\n // Access threshold via explicit switch to avoid dynamic key access warnings\n let threshold: number;\n switch (metricType) {\n case 'http':\n threshold = this.thresholds.http;\n break;\n case 'database':\n threshold = this.thresholds.database;\n break;\n case 'cache':\n threshold = this.thresholds.cache;\n break;\n case 'queue':\n threshold = this.thresholds.queue;\n break;\n case 'websocket':\n threshold = this.thresholds.websocket;\n break;\n case 'custom':\n threshold = this.thresholds.custom;\n break;\n default:\n threshold = 0; // Should not happen due to earlier filtering\n }\n if (this.logSlowOperations && entry.duration > threshold) {\n Logger.warn({\n message: `Performance threshold exceeded`,\n meta: {\n operation: entry.name,\n duration: `${entry.duration.toFixed(2)}ms`,\n threshold: `${threshold}ms`,\n type: metricType,\n },\n });\n }\n\n // Log all operations if enabled\n if (this.logAllOperations) {\n Logger.debug({\n message: `Performance metric`,\n meta: {\n operation: entry.name,\n duration: `${entry.duration.toFixed(2)}ms`,\n type: metricType,\n },\n });\n }\n }\n\n public startMeasure(name: string, type: PerformanceMetrics['type'] = 'custom'): string {\n if (!this.isEnabled) return '';\n\n const measureName = `pxl-performance:${type}:${name}`;\n const startMark = `${measureName}-start`;\n\n performance.mark(startMark);\n return startMark;\n }\n\n public endMeasure(startMark: string, _metadata?: Record<string, any>): void {\n if (!this.isEnabled || !startMark) return;\n\n const endMark = `${startMark.replace('-start', '')}-end`;\n const measureName = startMark.replace('-start', '');\n\n performance.mark(endMark);\n\n try {\n performance.measure(measureName, startMark, endMark);\n\n // Clean up marks\n performance.clearMarks(startMark);\n performance.clearMarks(endMark);\n } catch (error) {\n Logger.error({\n error: error instanceof Error ? error : new Error(String(error)),\n message: 'Error measuring performance',\n });\n }\n }\n\n public async measureAsync<T>({\n name,\n type,\n fn,\n metadata,\n }: {\n name: string;\n type: PerformanceMetrics['type'];\n fn: () => Promise<T>;\n metadata?: Record<string, any>;\n }): Promise<T> {\n if (!this.isEnabled) {\n return fn();\n }\n\n const startMark = this.startMeasure(name, type);\n\n try {\n const result = await fn();\n this.endMeasure(startMark, metadata);\n return result;\n } catch (error) {\n this.endMeasure(startMark, { ...metadata, error: error instanceof Error ? error.message : String(error) });\n throw error;\n }\n }\n\n public measureSync<T>(\n name: string,\n type: PerformanceMetrics['type'],\n fn: () => T,\n metadata?: Record<string, any>,\n ): T {\n if (!this.isEnabled) {\n return fn();\n }\n\n const startMark = this.startMeasure(name, type);\n\n try {\n const result = fn();\n this.endMeasure(startMark, metadata);\n return result;\n } catch (error) {\n this.endMeasure(startMark, { ...metadata, error: error instanceof Error ? error.message : String(error) });\n throw error;\n }\n }\n\n public getMetrics(type?: PerformanceMetrics['type'], limit?: number): PerformanceMetrics[] {\n let filteredMetrics = this.metrics;\n\n if (type) {\n filteredMetrics = filteredMetrics.filter(m => m.type === type);\n }\n\n if (limit) {\n filteredMetrics = filteredMetrics.slice(-limit);\n }\n\n return filteredMetrics;\n }\n\n public getAverageMetrics(type?: PerformanceMetrics['type']): Record<string, number> {\n const metrics = this.getMetrics(type);\n const groups = new Map<string, number[]>();\n for (const metric of metrics) {\n const key = metric.name;\n const arr = groups.get(key) ?? [];\n arr.push(metric.duration);\n if (!groups.has(key)) groups.set(key, arr);\n }\n const averagesMap = new Map<string, number>();\n for (const [key, durations] of groups.entries()) {\n const total = durations.reduce((sum, d) => sum + d, 0);\n averagesMap.set(key, total / durations.length);\n }\n // Convert back to plain object for API compatibility\n return Array.from(averagesMap.entries()).reduce<Record<string, number>>((acc, [k, v]) => {\n if (typeof k === 'string') {\n Object.defineProperty(acc, k, { value: v, enumerable: true, configurable: true, writable: false });\n }\n return acc;\n }, Object.create(null));\n }\n\n public getMemoryUsage(): NodeJS.MemoryUsage {\n return process.memoryUsage();\n }\n\n public getDetailedMemoryUsage(): Record<string, number> {\n const usage = process.memoryUsage();\n return {\n rss: Math.round(usage.rss / 1024 / 1024), // MB\n heapTotal: Math.round(usage.heapTotal / 1024 / 1024), // MB\n heapUsed: Math.round(usage.heapUsed / 1024 / 1024), // MB\n external: Math.round(usage.external / 1024 / 1024), // MB\n arrayBuffers: Math.round(usage.arrayBuffers / 1024 / 1024), // MB\n };\n }\n\n public getCpuUsage(): NodeJS.CpuUsage {\n return process.cpuUsage();\n }\n\n public setThresholds(thresholds: Partial<PerformanceThresholds>): void {\n this.thresholds = { ...this.thresholds, ...thresholds };\n }\n\n public setEnabled(enabled: boolean): void {\n this.isEnabled = enabled;\n\n if (enabled && !this.observer) {\n this.initializeObserver();\n } else if (!enabled && this.observer) {\n this.observer.disconnect();\n this.observer = undefined;\n }\n }\n\n public clearMetrics(): void {\n this.metrics = [];\n }\n\n public generateReport(): {\n summary: {\n totalMetrics: number;\n averages: Record<string, number>;\n thresholds: PerformanceThresholds;\n enabled: boolean;\n };\n metrics: PerformanceMetrics[];\n memory: Record<string, number>;\n cpu: NodeJS.CpuUsage;\n } {\n return {\n summary: {\n totalMetrics: this.metrics.length,\n averages: this.getAverageMetrics(),\n thresholds: this.thresholds,\n enabled: this.isEnabled,\n },\n metrics: this.getMetrics(undefined, 100), // Last 100 metrics\n memory: this.getDetailedMemoryUsage(),\n cpu: this.getCpuUsage(),\n };\n }\n\n public generateFormattedReport(format: 'simple' | 'detailed' = 'detailed'): string {\n const report = this.generateReport();\n\n if (format === 'simple') {\n const memoryUsed = report.memory.heapUsed;\n const cpuPercent = Math.round((report.cpu.user + report.cpu.system) / 1000000); // Convert microseconds to rough percentage\n const avgDurations = Object.values(report.summary.averages);\n const avgMetric =\n avgDurations.length > 0 ? Math.round(avgDurations.reduce((sum, val) => sum + val, 0) / avgDurations.length) : 0;\n\n return `Performance Report (summary: ${report.summary.totalMetrics} ops, avg: ${avgMetric}ms | metrics: ${report.metrics.length} | memory: ${memoryUsed}mb | cpu: ${cpuPercent}%)`;\n }\n const lines = [\n 'Performance Report:',\n `Summary: ${report.summary.totalMetrics} operations tracked, enabled: ${report.summary.enabled}`,\n `Metrics: ${report.metrics.length} recent operations recorded`,\n `Memory: RSS: ${report.memory.rss}mb, Heap: ${report.memory.heapUsed}/${report.memory.heapTotal}mb`,\n `CPU: User: ${Math.round(report.cpu.user / 1000)}ms, System: ${Math.round(report.cpu.system / 1000)}ms`,\n ];\n\n if (Object.keys(report.summary.averages).length > 0) {\n lines.push(\n `Averages: ${Object.entries(report.summary.averages)\n .map(([name, avg]) => `${name}: ${Math.round(avg)}ms`)\n .join(', ')}`,\n );\n }\n\n return lines.join('\\n');\n }\n\n public destroy(): void {\n if (this.observer) {\n this.observer.disconnect();\n this.observer = undefined;\n }\n this.metrics = [];\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,24 @@
1
+ import type BaseApplication from '../application/base-application.js';
2
+ /**
3
+ * PerformanceMonitorPlugin
4
+ *
5
+ * Converts the previous side-effect constructor initialization into an opt‑in plugin.
6
+ * Responsibilities:
7
+ * - Initialize PerformanceMonitor when enabled in config
8
+ * - Register metric wrappers (DB / Queue / Cache) based on flags
9
+ * - Schedule periodic reporting (tracked via lifecycle for auto cleanup)
10
+ * - Dispose monitor on shutdown
11
+ */
12
+ export declare class PerformanceMonitorPlugin {
13
+ private readonly app;
14
+ private started;
15
+ private abortController;
16
+ private constructor();
17
+ /** Register and immediately start (idempotent) */
18
+ static register(app: BaseApplication): PerformanceMonitorPlugin;
19
+ /** Initialize monitor & ancillary behaviors */
20
+ start(): void;
21
+ /** Destroy monitor & clear references */
22
+ stop(): void;
23
+ }
24
+ //# sourceMappingURL=performance-monitor.plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performance-monitor.plugin.d.ts","sourceRoot":"","sources":["../../src/performance/performance-monitor.plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,eAAe,MAAM,oCAAoC,CAAC;AAKtE;;;;;;;;;GASG;AACH,qBAAa,wBAAwB;IAIf,OAAO,CAAC,QAAQ,CAAC,GAAG;IAHxC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,eAAe,CAAyB;IAEhD,OAAO;IAEP,kDAAkD;WACpC,QAAQ,CAAC,GAAG,EAAE,eAAe,GAAG,wBAAwB;IAQtE,+CAA+C;IACxC,KAAK,IAAI,IAAI;IA0DpB,yCAAyC;IAClC,IAAI,IAAI,IAAI;CAmBpB"}