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.
@@ -0,0 +1,376 @@
1
+ // =============================================================================
2
+ // HONO STATUS MONITOR - EDGE-COMPATIBLE MONITOR
3
+ // Lightweight monitor for Cloudflare Workers and Edge environments
4
+ // No Node.js-specific APIs (os, process, cluster, socket.io)
5
+ // =============================================================================
6
+ // Default configuration for edge environments
7
+ const DEFAULT_EDGE_CONFIG = {
8
+ path: '/status',
9
+ title: 'Server Status',
10
+ socketPath: '/status/socket.io', // Not used in edge, included for compatibility
11
+ updateInterval: 5000, // Polling interval (not real-time)
12
+ retentionSeconds: 60,
13
+ maxRecentErrors: 10,
14
+ maxRoutes: 10,
15
+ alerts: {
16
+ cpu: 80, // Not available in edge
17
+ memory: 90, // Not available in edge
18
+ responseTime: 500,
19
+ errorRate: 5,
20
+ eventLoopLag: 100 // Not available in edge
21
+ },
22
+ healthCheck: async () => ({ connected: true, latencyMs: 0 }),
23
+ normalizePath: (path) => path,
24
+ clusterMode: false // Not supported in edge
25
+ };
26
+ /**
27
+ * Default path normalization function
28
+ */
29
+ function defaultNormalizePath(path) {
30
+ return path
31
+ .replace(/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/gi, ':uuid')
32
+ .replace(/[0-9a-f]{24}/gi, ':id')
33
+ .replace(/\/\d+/g, '/:id')
34
+ .split('/').slice(0, 4).join('/');
35
+ }
36
+ /**
37
+ * Create an edge-compatible status monitor instance
38
+ * Works without Node.js APIs (os, process, cluster)
39
+ */
40
+ export function createEdgeMonitor(userConfig = {}) {
41
+ // Merge configuration
42
+ const config = {
43
+ ...DEFAULT_EDGE_CONFIG,
44
+ ...userConfig,
45
+ alerts: { ...DEFAULT_EDGE_CONFIG.alerts, ...userConfig.alerts },
46
+ normalizePath: userConfig.normalizePath || defaultNormalizePath,
47
+ clusterMode: false // Never in cluster mode on edge
48
+ };
49
+ // In-memory metrics storage
50
+ let responseTimeHistory = [];
51
+ let rpsHistory = [];
52
+ let errorRateHistory = [];
53
+ // Request tracking
54
+ let requestCount = 0;
55
+ let lastRequestCount = 0;
56
+ let lastUpdateTime = Date.now();
57
+ let totalResponseTime = 0;
58
+ let responseTimeCount = 0;
59
+ let statusCodes = {};
60
+ let totalRequests = 0;
61
+ let activeConnections = 0;
62
+ // Route tracking
63
+ const routeStats = new Map();
64
+ const recentErrors = [];
65
+ // Response time samples for percentiles
66
+ let responseTimeSamples = [];
67
+ // Rate limit tracking
68
+ let rateLimitBlocked = 0;
69
+ let rateLimitTotal = 0;
70
+ // Start time for uptime calculation
71
+ const startTime = Date.now();
72
+ /**
73
+ * Calculate percentiles from samples
74
+ */
75
+ function calculatePercentiles() {
76
+ if (responseTimeSamples.length === 0) {
77
+ return { p50: 0, p95: 0, p99: 0, avg: 0 };
78
+ }
79
+ const sorted = [...responseTimeSamples].sort((a, b) => a - b);
80
+ const len = sorted.length;
81
+ const p50Index = Math.floor(len * 0.5);
82
+ const p95Index = Math.floor(len * 0.95);
83
+ const p99Index = Math.floor(len * 0.99);
84
+ const avg = sorted.reduce((a, b) => a + b, 0) / len;
85
+ return {
86
+ p50: Math.round(sorted[p50Index] * 100) / 100,
87
+ p95: Math.round(sorted[p95Index] * 100) / 100,
88
+ p99: Math.round(sorted[Math.min(p99Index, len - 1)] * 100) / 100,
89
+ avg: Math.round(avg * 100) / 100
90
+ };
91
+ }
92
+ /**
93
+ * Get top routes by request count
94
+ */
95
+ function getTopRoutes() {
96
+ return Array.from(routeStats.values())
97
+ .sort((a, b) => b.count - a.count)
98
+ .slice(0, config.maxRoutes);
99
+ }
100
+ /**
101
+ * Get slowest routes by average response time
102
+ */
103
+ function getSlowestRoutes() {
104
+ return Array.from(routeStats.values())
105
+ .filter(r => r.count > 0)
106
+ .sort((a, b) => b.avgTime - a.avgTime)
107
+ .slice(0, config.maxRoutes);
108
+ }
109
+ /**
110
+ * Get routes with most errors
111
+ */
112
+ function getErrorRoutes() {
113
+ return Array.from(routeStats.values())
114
+ .filter(r => r.errors > 0)
115
+ .sort((a, b) => b.errors - a.errors)
116
+ .slice(0, config.maxRoutes);
117
+ }
118
+ /**
119
+ * Calculate current error rate
120
+ */
121
+ function getErrorRate() {
122
+ const totalErrors = Array.from(routeStats.values()).reduce((sum, r) => sum + r.errors, 0);
123
+ if (totalRequests === 0)
124
+ return 0;
125
+ return Math.round((totalErrors / totalRequests) * 10000) / 100;
126
+ }
127
+ /**
128
+ * Check alert conditions (limited to available metrics)
129
+ */
130
+ function checkAlerts() {
131
+ const respTime = responseTimeHistory.length > 0
132
+ ? responseTimeHistory[responseTimeHistory.length - 1].value
133
+ : 0;
134
+ const errorRate = getErrorRate();
135
+ return {
136
+ cpu: false, // Not available in edge
137
+ memory: false, // Not available in edge
138
+ responseTime: respTime > (config.alerts.responseTime ?? 500),
139
+ errorRate: errorRate > (config.alerts.errorRate ?? 5),
140
+ eventLoopLag: false // Not available in edge
141
+ };
142
+ }
143
+ /**
144
+ * Add a data point to history
145
+ */
146
+ function addToHistory(history, value) {
147
+ const now = Date.now();
148
+ history.push({ timestamp: now, value });
149
+ const cutoff = now - (config.retentionSeconds * 1000);
150
+ while (history.length > 0 && history[0].timestamp < cutoff) {
151
+ history.shift();
152
+ }
153
+ }
154
+ /**
155
+ * Update metrics (called on each request in edge mode, not on interval)
156
+ */
157
+ function updateMetricsIfNeeded() {
158
+ const now = Date.now();
159
+ const elapsed = now - lastUpdateTime;
160
+ // Only update history at configured intervals
161
+ if (elapsed >= config.updateInterval) {
162
+ const intervalSeconds = elapsed / 1000;
163
+ const currentRps = Math.round((requestCount - lastRequestCount) / intervalSeconds);
164
+ lastRequestCount = requestCount;
165
+ lastUpdateTime = now;
166
+ addToHistory(rpsHistory, currentRps);
167
+ const avgResponseTime = responseTimeCount > 0
168
+ ? Math.round((totalResponseTime / responseTimeCount) * 100) / 100
169
+ : 0;
170
+ addToHistory(responseTimeHistory, avgResponseTime);
171
+ addToHistory(errorRateHistory, getErrorRate());
172
+ // Reset counters
173
+ totalResponseTime = 0;
174
+ responseTimeCount = 0;
175
+ // Trim samples (keep last 1000)
176
+ if (responseTimeSamples.length > 1000) {
177
+ responseTimeSamples = responseTimeSamples.slice(-500);
178
+ }
179
+ }
180
+ }
181
+ /**
182
+ * Track a request start
183
+ */
184
+ function trackRequest(path, method) {
185
+ requestCount++;
186
+ totalRequests++;
187
+ activeConnections++;
188
+ const normalizedPath = config.normalizePath(path);
189
+ const key = `${method}:${normalizedPath}`;
190
+ if (!routeStats.has(key)) {
191
+ routeStats.set(key, {
192
+ path: normalizedPath,
193
+ method,
194
+ count: 0,
195
+ totalTime: 0,
196
+ avgTime: 0,
197
+ minTime: Infinity,
198
+ maxTime: 0,
199
+ errors: 0,
200
+ lastAccess: Date.now()
201
+ });
202
+ }
203
+ }
204
+ /**
205
+ * Track request completion
206
+ */
207
+ function trackRequestComplete(path, method, durationMs, statusCode) {
208
+ activeConnections = Math.max(0, activeConnections - 1);
209
+ // Track response time
210
+ totalResponseTime += durationMs;
211
+ responseTimeCount++;
212
+ responseTimeSamples.push(durationMs);
213
+ // Track status code
214
+ const codeStr = statusCode.toString();
215
+ statusCodes[codeStr] = (statusCodes[codeStr] || 0) + 1;
216
+ // Update route stats
217
+ const normalizedPath = config.normalizePath(path);
218
+ const key = `${method}:${normalizedPath}`;
219
+ const stats = routeStats.get(key);
220
+ if (stats) {
221
+ stats.count++;
222
+ stats.totalTime += durationMs;
223
+ stats.avgTime = stats.totalTime / stats.count;
224
+ stats.minTime = Math.min(stats.minTime, durationMs);
225
+ stats.maxTime = Math.max(stats.maxTime, durationMs);
226
+ stats.lastAccess = Date.now();
227
+ // Track errors
228
+ if (statusCode >= 400) {
229
+ stats.errors++;
230
+ recentErrors.unshift({
231
+ timestamp: Date.now(),
232
+ path: normalizedPath,
233
+ method,
234
+ status: statusCode,
235
+ message: `${method} ${normalizedPath} returned ${statusCode}`
236
+ });
237
+ while (recentErrors.length > config.maxRecentErrors) {
238
+ recentErrors.pop();
239
+ }
240
+ }
241
+ }
242
+ // Update metrics if interval has passed
243
+ updateMetricsIfNeeded();
244
+ }
245
+ /**
246
+ * Track rate limit event
247
+ */
248
+ function trackRateLimitEvent(blocked) {
249
+ rateLimitTotal++;
250
+ if (blocked)
251
+ rateLimitBlocked++;
252
+ }
253
+ /**
254
+ * Get current metrics snapshot
255
+ */
256
+ async function getMetricsSnapshot() {
257
+ // Trigger update check
258
+ updateMetricsIfNeeded();
259
+ const uptimeSeconds = Math.round((Date.now() - startTime) / 1000);
260
+ return {
261
+ timestamp: Date.now(),
262
+ // System metrics - not available in edge
263
+ cpu: 0,
264
+ memoryMB: 0,
265
+ memoryPercent: 0,
266
+ heapUsedMB: 0,
267
+ heapTotalMB: 0,
268
+ loadAvg: 0,
269
+ uptime: uptimeSeconds, // Worker uptime
270
+ processUptime: uptimeSeconds,
271
+ // Request metrics - available
272
+ responseTime: responseTimeHistory.length > 0
273
+ ? responseTimeHistory[responseTimeHistory.length - 1].value
274
+ : 0,
275
+ rps: rpsHistory.length > 0
276
+ ? rpsHistory[rpsHistory.length - 1].value
277
+ : 0,
278
+ statusCodes: { ...statusCodes },
279
+ totalRequests,
280
+ activeConnections,
281
+ eventLoopLag: 0, // Not available in edge
282
+ // Platform info
283
+ hostname: 'cloudflare-worker',
284
+ platform: 'Cloudflare Workers',
285
+ nodeVersion: 'N/A',
286
+ pid: 0,
287
+ cpuCount: 0,
288
+ // Analytics - available
289
+ percentiles: calculatePercentiles(),
290
+ topRoutes: getTopRoutes(),
291
+ slowestRoutes: getSlowestRoutes(),
292
+ errorRoutes: getErrorRoutes(),
293
+ recentErrors: [...recentErrors],
294
+ alerts: checkAlerts(),
295
+ // Not available metrics
296
+ gc: {
297
+ collections: 0,
298
+ pauseTimeMs: 0,
299
+ heapGrowthRate: 0
300
+ },
301
+ database: {
302
+ connected: false,
303
+ poolSize: 0,
304
+ availableConnections: 0,
305
+ waitQueueSize: 0,
306
+ latencyMs: 0
307
+ },
308
+ rateLimitStats: { blocked: rateLimitBlocked, total: rateLimitTotal },
309
+ errorRate: getErrorRate(),
310
+ // Edge mode indicator
311
+ isEdgeMode: true
312
+ };
313
+ }
314
+ /**
315
+ * Get chart data
316
+ */
317
+ function getChartData() {
318
+ return {
319
+ cpu: [], // Not available
320
+ memory: [], // Not available
321
+ heap: [], // Not available
322
+ loadAvg: [], // Not available
323
+ responseTime: [...responseTimeHistory],
324
+ rps: [...rpsHistory],
325
+ eventLoopLag: [], // Not available
326
+ errorRate: [...errorRateHistory]
327
+ };
328
+ }
329
+ /**
330
+ * Format uptime
331
+ */
332
+ function formatUptime(seconds) {
333
+ const days = Math.floor(seconds / 86400);
334
+ const hours = Math.floor((seconds % 86400) / 3600);
335
+ const minutes = Math.floor((seconds % 3600) / 60);
336
+ const secs = Math.floor(seconds % 60);
337
+ const parts = [];
338
+ if (days > 0)
339
+ parts.push(`${days}d`);
340
+ if (hours > 0)
341
+ parts.push(`${hours}h`);
342
+ if (minutes > 0)
343
+ parts.push(`${minutes}m`);
344
+ parts.push(`${secs}s`);
345
+ return parts.join(' ');
346
+ }
347
+ // No-op functions for compatibility
348
+ function start() {
349
+ // No interval needed in edge - updates happen on each request
350
+ console.log('📊 Status monitor started (edge mode)');
351
+ }
352
+ function stop() {
353
+ // Nothing to stop in edge mode
354
+ console.log('📊 Status monitor stopped (edge mode)');
355
+ }
356
+ // Socket not available in edge
357
+ function initSocket() {
358
+ console.log('📊 WebSocket not available in edge mode, use polling');
359
+ return null;
360
+ }
361
+ return {
362
+ config,
363
+ trackRequest,
364
+ trackRequestComplete,
365
+ trackRateLimitEvent,
366
+ getMetricsSnapshot,
367
+ getChartData,
368
+ start,
369
+ stop,
370
+ initSocket,
371
+ formatUptime,
372
+ isEdgeMode: true,
373
+ get io() { return null; }
374
+ };
375
+ }
376
+ //# sourceMappingURL=monitor-edge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitor-edge.js","sourceRoot":"","sources":["../src/monitor-edge.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,gDAAgD;AAChD,mEAAmE;AACnE,6DAA6D;AAC7D,gFAAgF;AAchF,8CAA8C;AAC9C,MAAM,mBAAmB,GAAkC;IACvD,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,eAAe;IACtB,UAAU,EAAE,mBAAmB,EAAE,+CAA+C;IAChF,cAAc,EAAE,IAAI,EAAE,mCAAmC;IACzD,gBAAgB,EAAE,EAAE;IACpB,eAAe,EAAE,EAAE;IACnB,SAAS,EAAE,EAAE;IACb,MAAM,EAAE;QACJ,GAAG,EAAE,EAAE,EAAE,wBAAwB;QACjC,MAAM,EAAE,EAAE,EAAE,wBAAwB;QACpC,YAAY,EAAE,GAAG;QACjB,SAAS,EAAE,CAAC;QACZ,YAAY,EAAE,GAAG,CAAC,wBAAwB;KAC7C;IACD,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IAC5D,aAAa,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI;IACrC,WAAW,EAAE,KAAK,CAAC,wBAAwB;CAC9C,CAAC;AAEF;;GAEG;AACH,SAAS,oBAAoB,CAAC,IAAY;IACtC,OAAO,IAAI;SACN,OAAO,CAAC,gEAAgE,EAAE,OAAO,CAAC;SAClF,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC;SAChC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC;SACzB,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,aAAkC,EAAE;IAClE,sBAAsB;IACtB,MAAM,MAAM,GAAkC;QAC1C,GAAG,mBAAmB;QACtB,GAAG,UAAU;QACb,MAAM,EAAE,EAAE,GAAG,mBAAmB,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,EAAE;QAC/D,aAAa,EAAE,UAAU,CAAC,aAAa,IAAI,oBAAoB;QAC/D,WAAW,EAAE,KAAK,CAAC,gCAAgC;KACtD,CAAC;IAEF,4BAA4B;IAC5B,IAAI,mBAAmB,GAAsB,EAAE,CAAC;IAChD,IAAI,UAAU,GAAsB,EAAE,CAAC;IACvC,IAAI,gBAAgB,GAAsB,EAAE,CAAC;IAE7C,mBAAmB;IACnB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAChC,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,IAAI,WAAW,GAAoB,EAAE,CAAC;IACtC,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAE1B,iBAAiB;IACjB,MAAM,UAAU,GAA4B,IAAI,GAAG,EAAE,CAAC;IACtD,MAAM,YAAY,GAAiB,EAAE,CAAC;IAEtC,wCAAwC;IACxC,IAAI,mBAAmB,GAAa,EAAE,CAAC;IAEvC,sBAAsB;IACtB,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,oCAAoC;IACpC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B;;OAEG;IACH,SAAS,oBAAoB;QACzB,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QAC9C,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,GAAG,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9D,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;QAE1B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;QAExC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;QAEpD,OAAO;YACH,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG;YAC7C,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG;YAC7C,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG;YAChE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG;SACnC,CAAC;IACN,CAAC;IAED;;OAEG;IACH,SAAS,YAAY;QACjB,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;aACjC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;aACjC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,SAAS,gBAAgB;QACrB,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;aACjC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;aACxB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;aACrC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,SAAS,cAAc;QACnB,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;aACjC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;aACzB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;aACnC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,SAAS,YAAY;QACjB,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC1F,IAAI,aAAa,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,aAAa,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC;IACnE,CAAC;IAED;;OAEG;IACH,SAAS,WAAW;QAChB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC;YAC3C,CAAC,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK;YAC3D,CAAC,CAAC,CAAC,CAAC;QACR,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;QAEjC,OAAO;YACH,GAAG,EAAE,KAAK,EAAE,wBAAwB;YACpC,MAAM,EAAE,KAAK,EAAE,wBAAwB;YACvC,YAAY,EAAE,QAAQ,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,IAAI,GAAG,CAAC;YAC5D,SAAS,EAAE,SAAS,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;YACrD,YAAY,EAAE,KAAK,CAAC,wBAAwB;SAC/C,CAAC;IACN,CAAC;IAED;;OAEG;IACH,SAAS,YAAY,CAAC,OAA0B,EAAE,KAAa;QAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QAExC,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;QACtD,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,MAAM,EAAE,CAAC;YACzD,OAAO,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC;IACL,CAAC;IAED;;OAEG;IACH,SAAS,qBAAqB;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,GAAG,GAAG,cAAc,CAAC;QAErC,8CAA8C;QAC9C,IAAI,OAAO,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YACnC,MAAM,eAAe,GAAG,OAAO,GAAG,IAAI,CAAC;YACvC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,gBAAgB,CAAC,GAAG,eAAe,CAAC,CAAC;YACnF,gBAAgB,GAAG,YAAY,CAAC;YAChC,cAAc,GAAG,GAAG,CAAC;YAErB,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAErC,MAAM,eAAe,GAAG,iBAAiB,GAAG,CAAC;gBACzC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG;gBACjE,CAAC,CAAC,CAAC,CAAC;YACR,YAAY,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC;YACnD,YAAY,CAAC,gBAAgB,EAAE,YAAY,EAAE,CAAC,CAAC;YAE/C,iBAAiB;YACjB,iBAAiB,GAAG,CAAC,CAAC;YACtB,iBAAiB,GAAG,CAAC,CAAC;YAEtB,gCAAgC;YAChC,IAAI,mBAAmB,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;gBACpC,mBAAmB,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;YAC1D,CAAC;QACL,CAAC;IACL,CAAC;IAED;;OAEG;IACH,SAAS,YAAY,CAAC,IAAY,EAAE,MAAc;QAC9C,YAAY,EAAE,CAAC;QACf,aAAa,EAAE,CAAC;QAChB,iBAAiB,EAAE,CAAC;QAEpB,MAAM,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,GAAG,GAAG,GAAG,MAAM,IAAI,cAAc,EAAE,CAAC;QAE1C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE;gBAChB,IAAI,EAAE,cAAc;gBACpB,MAAM;gBACN,KAAK,EAAE,CAAC;gBACR,SAAS,EAAE,CAAC;gBACZ,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,QAAQ;gBACjB,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,CAAC;gBACT,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;aACzB,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED;;OAEG;IACH,SAAS,oBAAoB,CACzB,IAAY,EACZ,MAAc,EACd,UAAkB,EAClB,UAAkB;QAElB,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,GAAG,CAAC,CAAC,CAAC;QAEvD,sBAAsB;QACtB,iBAAiB,IAAI,UAAU,CAAC;QAChC,iBAAiB,EAAE,CAAC;QACpB,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAErC,oBAAoB;QACpB,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;QACtC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAEvD,qBAAqB;QACrB,MAAM,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,GAAG,GAAG,GAAG,MAAM,IAAI,cAAc,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAElC,IAAI,KAAK,EAAE,CAAC;YACR,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,KAAK,CAAC,SAAS,IAAI,UAAU,CAAC;YAC9B,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;YAC9C,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YACpD,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YACpD,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAE9B,eAAe;YACf,IAAI,UAAU,IAAI,GAAG,EAAE,CAAC;gBACpB,KAAK,CAAC,MAAM,EAAE,CAAC;gBAEf,YAAY,CAAC,OAAO,CAAC;oBACjB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;oBACrB,IAAI,EAAE,cAAc;oBACpB,MAAM;oBACN,MAAM,EAAE,UAAU;oBAClB,OAAO,EAAE,GAAG,MAAM,IAAI,cAAc,aAAa,UAAU,EAAE;iBAChE,CAAC,CAAC;gBAEH,OAAO,YAAY,CAAC,MAAM,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;oBAClD,YAAY,CAAC,GAAG,EAAE,CAAC;gBACvB,CAAC;YACL,CAAC;QACL,CAAC;QAED,wCAAwC;QACxC,qBAAqB,EAAE,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,SAAS,mBAAmB,CAAC,OAAgB;QACzC,cAAc,EAAE,CAAC;QACjB,IAAI,OAAO;YAAE,gBAAgB,EAAE,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,KAAK,UAAU,kBAAkB;QAC7B,uBAAuB;QACvB,qBAAqB,EAAE,CAAC;QAExB,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;QAElE,OAAO;YACH,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,yCAAyC;YACzC,GAAG,EAAE,CAAC;YACN,QAAQ,EAAE,CAAC;YACX,aAAa,EAAE,CAAC;YAChB,UAAU,EAAE,CAAC;YACb,WAAW,EAAE,CAAC;YACd,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,aAAa,EAAE,gBAAgB;YACvC,aAAa,EAAE,aAAa;YAC5B,8BAA8B;YAC9B,YAAY,EAAE,mBAAmB,CAAC,MAAM,GAAG,CAAC;gBACxC,CAAC,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK;gBAC3D,CAAC,CAAC,CAAC;YACP,GAAG,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC;gBACtB,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK;gBACzC,CAAC,CAAC,CAAC;YACP,WAAW,EAAE,EAAE,GAAG,WAAW,EAAE;YAC/B,aAAa;YACb,iBAAiB;YACjB,YAAY,EAAE,CAAC,EAAE,wBAAwB;YACzC,gBAAgB;YAChB,QAAQ,EAAE,mBAAmB;YAC7B,QAAQ,EAAE,oBAAoB;YAC9B,WAAW,EAAE,KAAK;YAClB,GAAG,EAAE,CAAC;YACN,QAAQ,EAAE,CAAC;YACX,wBAAwB;YACxB,WAAW,EAAE,oBAAoB,EAAE;YACnC,SAAS,EAAE,YAAY,EAAE;YACzB,aAAa,EAAE,gBAAgB,EAAE;YACjC,WAAW,EAAE,cAAc,EAAE;YAC7B,YAAY,EAAE,CAAC,GAAG,YAAY,CAAC;YAC/B,MAAM,EAAE,WAAW,EAAE;YACrB,wBAAwB;YACxB,EAAE,EAAE;gBACA,WAAW,EAAE,CAAC;gBACd,WAAW,EAAE,CAAC;gBACd,cAAc,EAAE,CAAC;aACpB;YACD,QAAQ,EAAE;gBACN,SAAS,EAAE,KAAK;gBAChB,QAAQ,EAAE,CAAC;gBACX,oBAAoB,EAAE,CAAC;gBACvB,aAAa,EAAE,CAAC;gBAChB,SAAS,EAAE,CAAC;aACf;YACD,cAAc,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,cAAc,EAAE;YACpE,SAAS,EAAE,YAAY,EAAE;YACzB,sBAAsB;YACtB,UAAU,EAAE,IAAI;SACnB,CAAC;IACN,CAAC;IAED;;OAEG;IACH,SAAS,YAAY;QACjB,OAAO;YACH,GAAG,EAAE,EAAE,EAAE,gBAAgB;YACzB,MAAM,EAAE,EAAE,EAAE,gBAAgB;YAC5B,IAAI,EAAE,EAAE,EAAE,gBAAgB;YAC1B,OAAO,EAAE,EAAE,EAAE,gBAAgB;YAC7B,YAAY,EAAE,CAAC,GAAG,mBAAmB,CAAC;YACtC,GAAG,EAAE,CAAC,GAAG,UAAU,CAAC;YACpB,YAAY,EAAE,EAAE,EAAE,gBAAgB;YAClC,SAAS,EAAE,CAAC,GAAG,gBAAgB,CAAC;SACnC,CAAC;IACN,CAAC;IAED;;OAEG;IACH,SAAS,YAAY,CAAC,OAAe;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QAEtC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,IAAI,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;QACrC,IAAI,KAAK,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QACvC,IAAI,OAAO,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;QAEvB,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,oCAAoC;IACpC,SAAS,KAAK;QACV,8DAA8D;QAC9D,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACzD,CAAC;IAED,SAAS,IAAI;QACT,+BAA+B;QAC/B,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACzD,CAAC;IAED,+BAA+B;IAC/B,SAAS,UAAU;QACf,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO;QACH,MAAM;QACN,YAAY;QACZ,oBAAoB;QACpB,mBAAmB;QACnB,kBAAkB;QAClB,YAAY;QACZ,KAAK;QACL,IAAI;QACJ,UAAU;QACV,YAAY;QACZ,UAAU,EAAE,IAAI;QAChB,IAAI,EAAE,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;KAC5B,CAAC;AACN,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Supported platform types
3
+ */
4
+ export type Platform = 'node' | 'cloudflare' | 'edge' | 'unknown';
5
+ /**
6
+ * Detect the current runtime platform
7
+ *
8
+ * @returns The detected platform type
9
+ */
10
+ export declare function detectPlatform(): Platform;
11
+ /**
12
+ * Check if running in a Node.js environment
13
+ */
14
+ export declare function isNodeEnvironment(): boolean;
15
+ /**
16
+ * Check if running in a Cloudflare Workers environment
17
+ */
18
+ export declare function isCloudflareEnvironment(): boolean;
19
+ /**
20
+ * Check if running in any edge environment (Cloudflare, Vercel Edge, etc.)
21
+ */
22
+ export declare function isEdgeEnvironment(): boolean;
23
+ /**
24
+ * Get platform-specific information
25
+ */
26
+ export declare function getPlatformInfo(): {
27
+ platform: Platform;
28
+ hasOsModule: boolean;
29
+ hasProcessModule: boolean;
30
+ hasWebSocketSupport: boolean;
31
+ hasClusterSupport: boolean;
32
+ };
33
+ //# sourceMappingURL=platform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,YAAY,GAAG,MAAM,GAAG,SAAS,CAAC;AAElE;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,QAAQ,CA0CzC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,OAAO,CAEjD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAG3C;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI;IAC/B,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,iBAAiB,EAAE,OAAO,CAAC;CAC9B,CAWA"}
@@ -0,0 +1,80 @@
1
+ // =============================================================================
2
+ // HONO STATUS MONITOR - PLATFORM DETECTION
3
+ // Detect runtime environment (Node.js, Cloudflare Workers, Edge, etc.)
4
+ // =============================================================================
5
+ /**
6
+ * Detect the current runtime platform
7
+ *
8
+ * @returns The detected platform type
9
+ */
10
+ export function detectPlatform() {
11
+ // Check for Node.js
12
+ if (typeof process !== 'undefined' && process.versions?.node) {
13
+ return 'node';
14
+ }
15
+ // Check for Cloudflare Workers
16
+ // Cloudflare Workers have specific globals and navigator.userAgent
17
+ if (typeof globalThis !== 'undefined') {
18
+ // Cloudflare Workers environment check
19
+ // @ts-ignore - navigator may not exist in all environments
20
+ const userAgent = typeof navigator !== 'undefined' ? navigator?.userAgent : '';
21
+ if (typeof userAgent === 'string' && userAgent.includes('Cloudflare-Workers')) {
22
+ return 'cloudflare';
23
+ }
24
+ // Check for caches API which exists in Cloudflare Workers
25
+ // @ts-ignore - caches may not exist
26
+ if (typeof caches !== 'undefined' && typeof caches.default !== 'undefined') {
27
+ return 'cloudflare';
28
+ }
29
+ }
30
+ // Check for Deno
31
+ // @ts-ignore - Deno global
32
+ if (typeof Deno !== 'undefined') {
33
+ return 'edge';
34
+ }
35
+ // Check for Bun
36
+ // @ts-ignore - Bun global
37
+ if (typeof Bun !== 'undefined') {
38
+ return 'node'; // Bun is Node.js compatible
39
+ }
40
+ // Generic edge runtime (Vercel Edge, etc.)
41
+ // @ts-ignore - EdgeRuntime global may not exist in all environments
42
+ if (typeof EdgeRuntime !== 'undefined') {
43
+ return 'edge';
44
+ }
45
+ return 'unknown';
46
+ }
47
+ /**
48
+ * Check if running in a Node.js environment
49
+ */
50
+ export function isNodeEnvironment() {
51
+ return detectPlatform() === 'node';
52
+ }
53
+ /**
54
+ * Check if running in a Cloudflare Workers environment
55
+ */
56
+ export function isCloudflareEnvironment() {
57
+ return detectPlatform() === 'cloudflare';
58
+ }
59
+ /**
60
+ * Check if running in any edge environment (Cloudflare, Vercel Edge, etc.)
61
+ */
62
+ export function isEdgeEnvironment() {
63
+ const platform = detectPlatform();
64
+ return platform === 'cloudflare' || platform === 'edge';
65
+ }
66
+ /**
67
+ * Get platform-specific information
68
+ */
69
+ export function getPlatformInfo() {
70
+ const platform = detectPlatform();
71
+ const isNode = platform === 'node';
72
+ return {
73
+ platform,
74
+ hasOsModule: isNode,
75
+ hasProcessModule: isNode,
76
+ hasWebSocketSupport: isNode, // Full socket.io support
77
+ hasClusterSupport: isNode
78
+ };
79
+ }
80
+ //# sourceMappingURL=platform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,2CAA2C;AAC3C,uEAAuE;AACvE,gFAAgF;AAOhF;;;;GAIG;AACH,MAAM,UAAU,cAAc;IAC1B,oBAAoB;IACpB,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC3D,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,+BAA+B;IAC/B,mEAAmE;IACnE,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE,CAAC;QACpC,uCAAuC;QACvC,2DAA2D;QAC3D,MAAM,SAAS,GAAG,OAAO,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;YAC5E,OAAO,YAAY,CAAC;QACxB,CAAC;QAED,0DAA0D;QAC1D,oCAAoC;QACpC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;YACzE,OAAO,YAAY,CAAC;QACxB,CAAC;IACL,CAAC;IAED,iBAAiB;IACjB,2BAA2B;IAC3B,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,gBAAgB;IAChB,0BAA0B;IAC1B,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE,CAAC;QAC7B,OAAO,MAAM,CAAC,CAAC,4BAA4B;IAC/C,CAAC;IAED,2CAA2C;IAC3C,oEAAoE;IACpE,IAAI,OAAO,WAAW,KAAK,WAAW,EAAE,CAAC;QACrC,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC7B,OAAO,cAAc,EAAE,KAAK,MAAM,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACnC,OAAO,cAAc,EAAE,KAAK,YAAY,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC7B,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,OAAO,QAAQ,KAAK,YAAY,IAAI,QAAQ,KAAK,MAAM,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAO3B,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,QAAQ,KAAK,MAAM,CAAC;IAEnC,OAAO;QACH,QAAQ;QACR,WAAW,EAAE,MAAM;QACnB,gBAAgB,EAAE,MAAM;QACxB,mBAAmB,EAAE,MAAM,EAAE,yBAAyB;QACtD,iBAAiB,EAAE,MAAM;KAC5B,CAAC;AACN,CAAC"}
package/dist/types.d.ts CHANGED
@@ -166,6 +166,8 @@ export interface MetricsSnapshot {
166
166
  workers?: WorkerInfo[];
167
167
  /** Number of workers in cluster mode */
168
168
  workerCount?: number;
169
+ /** Whether running in edge mode with limited metrics */
170
+ isEdgeMode?: boolean;
169
171
  }
170
172
  /**
171
173
  * Worker info for cluster mode
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,22 @@
1
1
  {
2
2
  "name": "hono-status-monitor",
3
- "version": "1.0.1",
4
- "description": "Real-time server monitoring dashboard for Hono.js with WebSocket updates. Express-status-monitor style metrics with Socket.io.",
3
+ "version": "1.0.3",
4
+ "description": "Real-time server monitoring dashboard for Hono.js with WebSocket updates. Works with Node.js and Cloudflare Workers. Express-status-monitor style metrics.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "type": "module",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js",
12
+ "require": "./dist/index.js"
13
+ },
14
+ "./edge": {
15
+ "types": "./dist/index-edge.d.ts",
16
+ "import": "./dist/index-edge.js",
17
+ "require": "./dist/index-edge.js"
18
+ }
19
+ },
8
20
  "files": [
9
21
  "dist"
10
22
  ],
@@ -23,8 +35,9 @@
23
35
  "metrics",
24
36
  "real-time",
25
37
  "performance",
26
- "cpu",
27
- "memory",
38
+ "cloudflare",
39
+ "workers",
40
+ "edge",
28
41
  "socket.io",
29
42
  "express-status-monitor"
30
43
  ],
@@ -40,16 +53,21 @@
40
53
  "url": "https://github.com/vinitkumargoel/hono-status-monitor/issues"
41
54
  },
42
55
  "peerDependencies": {
43
- "@hono/node-server": ">=1.0.0",
44
56
  "hono": ">=4.0.0"
45
57
  },
46
- "dependencies": {
58
+ "peerDependenciesMeta": {
59
+ "@hono/node-server": {
60
+ "optional": true
61
+ }
62
+ },
63
+ "optionalDependencies": {
47
64
  "socket.io": "^4.7.0"
48
65
  },
49
66
  "devDependencies": {
50
67
  "@hono/node-server": "^1.19.0",
51
68
  "@types/node": "^20.0.0",
52
69
  "hono": "^4.6.0",
70
+ "socket.io": "^4.7.0",
53
71
  "typescript": "^5.3.0",
54
72
  "vitest": "^4.0.16"
55
73
  },