hono-status-monitor 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,15 +1,17 @@
1
1
  import { Hono } from 'hono';
2
- import type { Server as HttpServer } from 'http';
3
2
  import type { StatusMonitorConfig } from './types.js';
4
3
  export * from './types.js';
4
+ export { generateDashboard, generateEdgeDashboard } from './dashboard.js';
5
+ export { createEdgeMonitor, type EdgeMonitor } from './monitor-edge.js';
6
+ export { detectPlatform, isNodeEnvironment, isCloudflareEnvironment, isEdgeEnvironment, getPlatformInfo } from './platform.js';
5
7
  export { createMonitor, type Monitor } from './monitor.js';
6
8
  export { createMiddleware } from './middleware.js';
7
- export { generateDashboard } from './dashboard.js';
8
9
  export { isClusterWorker, isClusterMaster, getWorkerId, createClusterAggregator } from './cluster.js';
9
10
  /**
10
11
  * Create a complete status monitor with routes, middleware, and WebSocket
12
+ * Automatically detects the runtime environment and uses the appropriate implementation
11
13
  *
12
- * @example
14
+ * @example Node.js
13
15
  * ```typescript
14
16
  * import { Hono } from 'hono';
15
17
  * import { serve } from '@hono/node-server';
@@ -18,24 +20,58 @@ export { isClusterWorker, isClusterMaster, getWorkerId, createClusterAggregator
18
20
  * const app = new Hono();
19
21
  * const monitor = statusMonitor();
20
22
  *
21
- * // Add middleware to track all requests
22
23
  * app.use('*', monitor.middleware);
23
- *
24
- * // Mount status routes
25
24
  * app.route('/status', monitor.routes);
26
25
  *
27
- * // Start server and initialize WebSocket
28
26
  * const server = serve({ fetch: app.fetch, port: 3000 });
29
27
  * monitor.initSocket(server);
30
28
  * ```
29
+ *
30
+ * @example Cloudflare Workers
31
+ * ```typescript
32
+ * import { Hono } from 'hono';
33
+ * import { statusMonitor } from 'hono-status-monitor';
34
+ *
35
+ * const app = new Hono();
36
+ * const monitor = statusMonitor();
37
+ *
38
+ * app.use('*', monitor.middleware);
39
+ * app.route('/status', monitor.routes);
40
+ *
41
+ * export default app;
42
+ * ```
31
43
  */
32
44
  export declare function statusMonitor(config?: StatusMonitorConfig): {
33
45
  /** Hono middleware for tracking all requests */
34
- middleware: (c: any, next: () => Promise<void>) => Promise<void>;
46
+ middleware: any;
35
47
  /** Pre-configured Hono routes for dashboard and API */
36
48
  routes: Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
37
49
  /** Initialize Socket.io on the HTTP server for real-time updates */
38
- initSocket: (server: HttpServer) => import("socket.io").Server<import("socket.io").DefaultEventsMap, import("socket.io").DefaultEventsMap, import("socket.io").DefaultEventsMap, any>;
50
+ initSocket: (server: import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>) => any;
51
+ /** Track rate limit events for the dashboard */
52
+ trackRateLimit: (blocked: boolean) => any;
53
+ /** Get current metrics snapshot */
54
+ getMetrics: () => any;
55
+ /** Get chart data for all metrics */
56
+ getCharts: () => any;
57
+ /** Stop metrics collection */
58
+ stop: () => any;
59
+ /** Access to the underlying monitor instance */
60
+ monitor: any;
61
+ /** Whether running in edge mode */
62
+ isEdgeMode: boolean;
63
+ };
64
+ /**
65
+ * Explicitly create an edge-compatible status monitor
66
+ * Use this when you want to force edge mode regardless of environment
67
+ */
68
+ export declare function statusMonitorEdge(config?: StatusMonitorConfig): {
69
+ /** Hono middleware for tracking all requests */
70
+ middleware: (c: any, next: () => Promise<void>) => Promise<void>;
71
+ /** Pre-configured Hono routes for dashboard and API */
72
+ routes: Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
73
+ /** Initialize Socket.io - not available in edge, returns null */
74
+ initSocket: () => any;
39
75
  /** Track rate limit events for the dashboard */
40
76
  trackRateLimit: (blocked: boolean) => void;
41
77
  /** Get current metrics snapshot */
@@ -50,14 +86,17 @@ export declare function statusMonitor(config?: StatusMonitorConfig): {
50
86
  trackRequest: (path: string, method: string) => void;
51
87
  trackRequestComplete: (path: string, method: string, durationMs: number, statusCode: number) => void;
52
88
  trackRateLimitEvent: (blocked: boolean) => void;
53
- getMetricsSnapshot: (dbStats?: import("./types.js").DatabaseStats) => Promise<import("./types.js").MetricsSnapshot>;
89
+ getMetricsSnapshot: () => Promise<import("./types.js").MetricsSnapshot>;
54
90
  getChartData: () => import("./types.js").ChartData;
55
91
  start: () => void;
56
92
  stop: () => void;
57
- initSocket: (server: HttpServer) => import("socket.io").Server;
93
+ initSocket: () => null;
58
94
  formatUptime: (seconds: number) => string;
59
- readonly io: import("socket.io").Server<import("socket.io").DefaultEventsMap, import("socket.io").DefaultEventsMap, import("socket.io").DefaultEventsMap, any> | null;
95
+ isEdgeMode: boolean;
96
+ readonly io: null;
60
97
  };
98
+ /** Whether running in edge mode */
99
+ isEdgeMode: boolean;
61
100
  };
62
101
  export default statusMonitor;
63
102
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AAIjD,OAAO,KAAK,EAAE,mBAAmB,EAAqB,MAAM,YAAY,CAAC;AAGzE,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EACH,eAAe,EACf,eAAe,EACf,WAAW,EACX,uBAAuB,EAC1B,MAAM,cAAc,CAAC;AAEtB;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,aAAa,CAAC,MAAM,GAAE,mBAAwB;IAkCtD,gDAAgD;;IAEhD,uDAAuD;;IAEvD,oEAAoE;yBAC/C,UAAU;IAC/B,gDAAgD;8BACtB,OAAO;IACjC,mCAAmC;;IAEnC,qCAAqC;;IAErC,8BAA8B;;IAE9B,gDAAgD;;;;;;;;;;;;;;EAGvD;AAGD,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAMtD,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EACH,cAAc,EACd,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,eAAe,EAClB,MAAM,eAAe,CAAC;AAIvB,OAAO,EAAE,aAAa,EAAE,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EACH,eAAe,EACf,eAAe,EACf,WAAW,EACX,uBAAuB,EAC1B,MAAM,cAAc,CAAC;AAEtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,aAAa,CAAC,MAAM,GAAE,mBAAwB;IAoDtD,gDAAgD;;IAEhD,uDAAuD;;IAEvD,oEAAoE;;IAEpE,gDAAgD;8BACtB,OAAO;IACjC,mCAAmC;;IAEnC,qCAAqC;;IAErC,8BAA8B;;IAE9B,gDAAgD;;IAEhD,mCAAmC;;EAxD1C;AAuID;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,GAAE,mBAAwB;IAzB1D,gDAAgD;oBA5CvB,GAAG,QAAQ,MAAM,OAAO,CAAC,IAAI,CAAC;IA8CvD,uDAAuD;;IAEvD,iEAAiE;sBACvC,GAAG;IAC7B,gDAAgD;8BACtB,OAAO;IACjC,mCAAmC;;IAEnC,qCAAqC;;IAErC,8BAA8B;;IAE9B,gDAAgD;;;;;;;;;;;;;;;IAEhD,mCAAmC;;EAW1C;AAGD,eAAe,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -1,21 +1,27 @@
1
1
  // =============================================================================
2
2
  // HONO STATUS MONITOR
3
3
  // Real-time server monitoring dashboard for Hono.js with WebSocket updates
4
+ // Supports Node.js and Cloudflare Workers/Edge environments
4
5
  // =============================================================================
5
6
  import { Hono } from 'hono';
6
- import { createMonitor } from './monitor.js';
7
- import { createMiddleware } from './middleware.js';
8
- import { generateDashboard } from './dashboard.js';
7
+ import { detectPlatform } from './platform.js';
8
+ import { createEdgeMonitor } from './monitor-edge.js';
9
+ import { generateDashboard, generateEdgeDashboard } from './dashboard.js';
9
10
  // Re-export types
10
11
  export * from './types.js';
12
+ export { generateDashboard, generateEdgeDashboard } from './dashboard.js';
13
+ export { createEdgeMonitor } from './monitor-edge.js';
14
+ export { detectPlatform, isNodeEnvironment, isCloudflareEnvironment, isEdgeEnvironment, getPlatformInfo } from './platform.js';
15
+ // Conditionally export Node.js-specific modules
16
+ // These will throw errors if imported in edge environments
11
17
  export { createMonitor } from './monitor.js';
12
18
  export { createMiddleware } from './middleware.js';
13
- export { generateDashboard } from './dashboard.js';
14
19
  export { isClusterWorker, isClusterMaster, getWorkerId, createClusterAggregator } from './cluster.js';
15
20
  /**
16
21
  * Create a complete status monitor with routes, middleware, and WebSocket
22
+ * Automatically detects the runtime environment and uses the appropriate implementation
17
23
  *
18
- * @example
24
+ * @example Node.js
19
25
  * ```typescript
20
26
  * import { Hono } from 'hono';
21
27
  * import { serve } from '@hono/node-server';
@@ -24,23 +30,50 @@ export { isClusterWorker, isClusterMaster, getWorkerId, createClusterAggregator
24
30
  * const app = new Hono();
25
31
  * const monitor = statusMonitor();
26
32
  *
27
- * // Add middleware to track all requests
28
33
  * app.use('*', monitor.middleware);
29
- *
30
- * // Mount status routes
31
34
  * app.route('/status', monitor.routes);
32
35
  *
33
- * // Start server and initialize WebSocket
34
36
  * const server = serve({ fetch: app.fetch, port: 3000 });
35
37
  * monitor.initSocket(server);
36
38
  * ```
39
+ *
40
+ * @example Cloudflare Workers
41
+ * ```typescript
42
+ * import { Hono } from 'hono';
43
+ * import { statusMonitor } from 'hono-status-monitor';
44
+ *
45
+ * const app = new Hono();
46
+ * const monitor = statusMonitor();
47
+ *
48
+ * app.use('*', monitor.middleware);
49
+ * app.route('/status', monitor.routes);
50
+ *
51
+ * export default app;
52
+ * ```
37
53
  */
38
54
  export function statusMonitor(config = {}) {
39
- // Create monitor instance
55
+ // Force platform check if specified in config
56
+ const platform = detectPlatform();
57
+ const useNodeVersion = platform === 'node';
58
+ if (useNodeVersion) {
59
+ // Node.js version with full features
60
+ return createNodeStatusMonitor(config);
61
+ }
62
+ else {
63
+ // Edge/Cloudflare version with limited features
64
+ return createEdgeStatusMonitor(config);
65
+ }
66
+ }
67
+ /**
68
+ * Create a Node.js status monitor with full features
69
+ * Requires Node.js runtime with os, process, http modules
70
+ */
71
+ function createNodeStatusMonitor(config = {}) {
72
+ // Dynamic import to avoid loading Node.js modules in edge
73
+ const { createMonitor } = require('./monitor.js');
74
+ const { createMiddleware } = require('./middleware.js');
40
75
  const monitor = createMonitor(config);
41
- // Create middleware
42
76
  const middleware = createMiddleware(monitor);
43
- // Create Hono routes
44
77
  const routes = new Hono();
45
78
  // Dashboard page
46
79
  routes.get('/', async (c) => {
@@ -78,8 +111,83 @@ export function statusMonitor(config = {}) {
78
111
  /** Stop metrics collection */
79
112
  stop: () => monitor.stop(),
80
113
  /** Access to the underlying monitor instance */
81
- monitor
114
+ monitor,
115
+ /** Whether running in edge mode */
116
+ isEdgeMode: false
117
+ };
118
+ }
119
+ /**
120
+ * Create an edge-compatible status monitor with limited features
121
+ * Works in Cloudflare Workers, Vercel Edge, and other edge runtimes
122
+ */
123
+ function createEdgeStatusMonitor(config = {}) {
124
+ const monitor = createEdgeMonitor(config);
125
+ const routes = new Hono();
126
+ // Create middleware for edge
127
+ const middleware = async (c, next) => {
128
+ const path = new URL(c.req.url).pathname;
129
+ const method = c.req.method;
130
+ // Skip status route itself
131
+ if (path.startsWith(config.path || '/status')) {
132
+ return next();
133
+ }
134
+ const start = performance.now();
135
+ monitor.trackRequest(path, method);
136
+ try {
137
+ await next();
138
+ }
139
+ finally {
140
+ const duration = performance.now() - start;
141
+ const status = c.res?.status || 200;
142
+ monitor.trackRequestComplete(path, method, duration, status);
143
+ }
82
144
  };
145
+ // Dashboard page - uses polling mode
146
+ routes.get('/', async (c) => {
147
+ const snapshot = await monitor.getMetricsSnapshot();
148
+ const html = generateEdgeDashboard({
149
+ hostname: snapshot.hostname,
150
+ uptime: monitor.formatUptime(snapshot.uptime),
151
+ title: monitor.config.title
152
+ });
153
+ return c.html(html);
154
+ });
155
+ // JSON API endpoint
156
+ routes.get('/api/metrics', async (c) => {
157
+ return c.json({
158
+ snapshot: await monitor.getMetricsSnapshot(),
159
+ charts: monitor.getChartData()
160
+ });
161
+ });
162
+ // Start (no-op in edge mode)
163
+ monitor.start();
164
+ return {
165
+ /** Hono middleware for tracking all requests */
166
+ middleware,
167
+ /** Pre-configured Hono routes for dashboard and API */
168
+ routes,
169
+ /** Initialize Socket.io - not available in edge, returns null */
170
+ initSocket: () => null,
171
+ /** Track rate limit events for the dashboard */
172
+ trackRateLimit: (blocked) => monitor.trackRateLimitEvent(blocked),
173
+ /** Get current metrics snapshot */
174
+ getMetrics: () => monitor.getMetricsSnapshot(),
175
+ /** Get chart data for all metrics */
176
+ getCharts: () => monitor.getChartData(),
177
+ /** Stop metrics collection */
178
+ stop: () => monitor.stop(),
179
+ /** Access to the underlying monitor instance */
180
+ monitor,
181
+ /** Whether running in edge mode */
182
+ isEdgeMode: true
183
+ };
184
+ }
185
+ /**
186
+ * Explicitly create an edge-compatible status monitor
187
+ * Use this when you want to force edge mode regardless of environment
188
+ */
189
+ export function statusMonitorEdge(config = {}) {
190
+ return createEdgeStatusMonitor(config);
83
191
  }
84
192
  // Default export
85
193
  export default statusMonitor;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,sBAAsB;AACtB,2EAA2E;AAC3E,gFAAgF;AAEhF,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,aAAa,EAAgB,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGnD,kBAAkB;AAClB,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAgB,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EACH,eAAe,EACf,eAAe,EACf,WAAW,EACX,uBAAuB,EAC1B,MAAM,cAAc,CAAC;AAEtB;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,aAAa,CAAC,SAA8B,EAAE;IAC1D,0BAA0B;IAC1B,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAEtC,oBAAoB;IACpB,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAE7C,qBAAqB;IACrB,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;IAE1B,iBAAiB;IACjB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACxB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,kBAAkB,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,iBAAiB,CAAC;YAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC7C,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU;YACrC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK;SAC9B,CAAC,CAAC;QACH,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,oBAAoB;IACpB,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACnC,OAAO,CAAC,CAAC,IAAI,CAAC;YACV,QAAQ,EAAE,MAAM,OAAO,CAAC,kBAAkB,EAAE;YAC5C,MAAM,EAAE,OAAO,CAAC,YAAY,EAAE;SACjC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,2BAA2B;IAC3B,OAAO,CAAC,KAAK,EAAE,CAAC;IAEhB,OAAO;QACH,gDAAgD;QAChD,UAAU;QACV,uDAAuD;QACvD,MAAM;QACN,oEAAoE;QACpE,UAAU,EAAE,CAAC,MAAkB,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;QAC9D,gDAAgD;QAChD,cAAc,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC;QAC1E,mCAAmC;QACnC,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,kBAAkB,EAAE;QAC9C,qCAAqC;QACrC,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE;QACvC,8BAA8B;QAC9B,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE;QAC1B,gDAAgD;QAChD,OAAO;KACV,CAAC;AACN,CAAC;AAED,iBAAiB;AACjB,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { StatusMonitorConfig, MetricsSnapshot, ChartData } from './types.js';
2
+ /**
3
+ * Create an edge-compatible status monitor instance
4
+ * Works without Node.js APIs (os, process, cluster)
5
+ */
6
+ export declare function createEdgeMonitor(userConfig?: StatusMonitorConfig): {
7
+ config: Required<StatusMonitorConfig>;
8
+ trackRequest: (path: string, method: string) => void;
9
+ trackRequestComplete: (path: string, method: string, durationMs: number, statusCode: number) => void;
10
+ trackRateLimitEvent: (blocked: boolean) => void;
11
+ getMetricsSnapshot: () => Promise<MetricsSnapshot>;
12
+ getChartData: () => ChartData;
13
+ start: () => void;
14
+ stop: () => void;
15
+ initSocket: () => null;
16
+ formatUptime: (seconds: number) => string;
17
+ isEdgeMode: boolean;
18
+ readonly io: null;
19
+ };
20
+ export type EdgeMonitor = ReturnType<typeof createEdgeMonitor>;
21
+ //# sourceMappingURL=monitor-edge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitor-edge.d.ts","sourceRoot":"","sources":["../src/monitor-edge.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACR,mBAAmB,EAOnB,eAAe,EACf,SAAS,EACZ,MAAM,YAAY,CAAC;AAkCpB;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,GAAE,mBAAwB;;yBAyKtC,MAAM,UAAU,MAAM,KAAG,IAAI;iCA2B/C,MAAM,UACJ,MAAM,cACF,MAAM,cACN,MAAM,KACnB,IAAI;mCAkD+B,OAAO,KAAG,IAAI;8BAQf,OAAO,CAAC,eAAe,CAAC;wBAgEpC,SAAS;iBAgChB,IAAI;gBAKL,IAAI;sBAME,IAAI;4BA3BI,MAAM,KAAG,MAAM;;;EA8CjD;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC"}