snow-flow 8.29.0 → 8.30.1
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/ENTERPRISE-SETUP.md +80 -0
- package/README.md +12 -4
- package/SNOWCODE-MCP-FIX.md +1 -1
- package/dist/api/health-api.d.ts +8 -0
- package/dist/api/health-api.d.ts.map +1 -0
- package/dist/api/health-api.js +294 -0
- package/dist/api/health-api.js.map +1 -0
- package/dist/api/simple-health-api.d.ts +7 -0
- package/dist/api/simple-health-api.d.ts.map +1 -0
- package/dist/api/simple-health-api.js +286 -0
- package/dist/api/simple-health-api.js.map +1 -0
- package/dist/cli/enterprise.d.ts +5 -0
- package/dist/cli/enterprise.d.ts.map +1 -1
- package/dist/cli/enterprise.js +46 -0
- package/dist/cli/enterprise.js.map +1 -1
- package/dist/cli.js +20 -20
- package/dist/cli.js.map +1 -1
- package/dist/license/index.d.ts +5 -0
- package/dist/license/index.d.ts.map +1 -0
- package/dist/license/index.js +12 -0
- package/dist/license/index.js.map +1 -0
- package/dist/license/parser.d.ts +47 -0
- package/dist/license/parser.d.ts.map +1 -0
- package/dist/license/parser.js +149 -0
- package/dist/license/parser.js.map +1 -0
- package/dist/mcp/clients/enterprise-remote-client.d.ts +3 -1
- package/dist/mcp/clients/enterprise-remote-client.d.ts.map +1 -1
- package/dist/mcp/clients/enterprise-remote-client.js +59 -16
- package/dist/mcp/clients/enterprise-remote-client.js.map +1 -1
- package/dist/utils/oauth-html-templates.d.ts.map +1 -1
- package/dist/utils/oauth-html-templates.js +6 -0
- package/dist/utils/oauth-html-templates.js.map +1 -1
- package/package.json +8 -4
- package/scripts/diagnose-mcp.js +2 -2
package/ENTERPRISE-SETUP.md
CHANGED
|
@@ -16,6 +16,35 @@ Snow-Flow Enterprise is an **optional** premium service that provides 26+ advanc
|
|
|
16
16
|
- Active Snow-Flow Enterprise license
|
|
17
17
|
- JWT authentication token from https://portal.snow-flow.dev
|
|
18
18
|
|
|
19
|
+
## License Format
|
|
20
|
+
|
|
21
|
+
Snow-Flow Enterprise supports two license formats:
|
|
22
|
+
|
|
23
|
+
### New Format (v8.5.0+): Seat-Based Licenses
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
SNOW-[TIER]-[ORG]-[DEV_SEATS]/[STAKEHOLDER_SEATS]-[EXPIRY]-[CHECKSUM]
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**Examples:**
|
|
30
|
+
- `SNOW-ENT-CAPGEMINI-5/1-20261231-A3F2E9C1` - 5 developer seats, 1 stakeholder seat
|
|
31
|
+
- `SNOW-TEAM-ACME-10/5-20261231-B4E3F2D5` - 10 developer seats, 5 stakeholder seats
|
|
32
|
+
|
|
33
|
+
**Seat Types:**
|
|
34
|
+
- **Developer Seats**: For technical users using Claude Code + MCP tools
|
|
35
|
+
- **Stakeholder Seats**: For non-technical users (POs, PMs, BAs) using web portal only
|
|
36
|
+
|
|
37
|
+
### Legacy Format: Unlimited Seats
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
SNOW-[TIER]-[ORG]-[EXPIRY]-[CHECKSUM]
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**Example:**
|
|
44
|
+
- `SNOW-ENT-ACME-20261231-ABC123` - Unlimited seats (legacy)
|
|
45
|
+
|
|
46
|
+
Legacy licenses continue to work with unlimited seats for both developers and stakeholders.
|
|
47
|
+
|
|
19
48
|
## Installation
|
|
20
49
|
|
|
21
50
|
### 1. Get Your Enterprise Token
|
|
@@ -176,6 +205,56 @@ Once connected, you have access to:
|
|
|
176
205
|
- `confluence_search_content` - Search content
|
|
177
206
|
- And more...
|
|
178
207
|
|
|
208
|
+
## Seat Tracking & Management
|
|
209
|
+
|
|
210
|
+
### How Seat Tracking Works
|
|
211
|
+
|
|
212
|
+
**Developer Seats:**
|
|
213
|
+
- Tracked per active MCP proxy connection
|
|
214
|
+
- Each unique machine/user counts as one active seat
|
|
215
|
+
- Machine identified by hashed hostname + MAC addresses (privacy-safe)
|
|
216
|
+
- Released when connection is closed or times out
|
|
217
|
+
|
|
218
|
+
**Stakeholder Seats:**
|
|
219
|
+
- Tracked per active web portal session
|
|
220
|
+
- Each logged-in stakeholder counts as one active seat
|
|
221
|
+
- Sessions expire after 8 hours of inactivity
|
|
222
|
+
|
|
223
|
+
### Monitoring Seat Usage
|
|
224
|
+
|
|
225
|
+
Check your current seat usage:
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
snow-flow status
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
Output example:
|
|
232
|
+
```
|
|
233
|
+
🔐 Snow-Flow Enterprise
|
|
234
|
+
Status: ✅ Authenticated
|
|
235
|
+
|
|
236
|
+
Customer: Capgemini
|
|
237
|
+
License Tier: ENT
|
|
238
|
+
|
|
239
|
+
License Seats:
|
|
240
|
+
Developer: 3/5 (active/total)
|
|
241
|
+
Stakeholder: 0/1 (active/total)
|
|
242
|
+
|
|
243
|
+
Token Expires: Dec 31, 2026
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
### Seat Limit Behavior
|
|
247
|
+
|
|
248
|
+
**What happens when seat limit is reached?**
|
|
249
|
+
- New connections are rejected with error: "Developer seat limit reached"
|
|
250
|
+
- Error includes information about active seats and total limit
|
|
251
|
+
- Existing connections remain active
|
|
252
|
+
- Wait for inactive connections to timeout or manually disconnect
|
|
253
|
+
|
|
254
|
+
**Grace Period:**
|
|
255
|
+
- 5-minute grace period for reconnections (same machine ID)
|
|
256
|
+
- Helps with network interruptions and restarts
|
|
257
|
+
|
|
179
258
|
## Pricing & Licensing
|
|
180
259
|
|
|
181
260
|
Visit https://snow-flow.dev/pricing for:
|
|
@@ -183,6 +262,7 @@ Visit https://snow-flow.dev/pricing for:
|
|
|
183
262
|
- Feature comparison (free vs enterprise)
|
|
184
263
|
- Trial options
|
|
185
264
|
- Volume discounts
|
|
265
|
+
- Seat-based pricing
|
|
186
266
|
|
|
187
267
|
## Support
|
|
188
268
|
|
package/README.md
CHANGED
|
@@ -704,17 +704,25 @@ Premium integrations for enterprise ServiceNow teams:
|
|
|
704
704
|
|
|
705
705
|
### Pricing (Coming Q2 2025)
|
|
706
706
|
|
|
707
|
-
Enterprise features will be available via commercial license:
|
|
707
|
+
Enterprise features will be available via seat-based commercial license:
|
|
708
708
|
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
709
|
+
**License Format:** `SNOW-[TIER]-[ORG]-[DEV_SEATS]/[STAKEHOLDER_SEATS]-[EXPIRY]-[CHECKSUM]`
|
|
710
|
+
|
|
711
|
+
**Seat Types:**
|
|
712
|
+
- **Developer Seats:** For technical users using Claude Code + MCP tools
|
|
713
|
+
- **Stakeholder Seats:** For non-technical users (POs, PMs, BAs) using web portal only
|
|
714
|
+
|
|
715
|
+
**Pricing Tiers:**
|
|
716
|
+
- **Professional:** €499/month (5 developer seats + 2 stakeholder seats)
|
|
717
|
+
- **Team:** €999/month (20 developer seats + 10 stakeholder seats)
|
|
718
|
+
- **Enterprise:** €1,999/month (unlimited seats)
|
|
712
719
|
|
|
713
720
|
All tiers include:
|
|
714
721
|
- All open source features
|
|
715
722
|
- Enterprise integrations (Jira/Azure DevOps/Confluence)
|
|
716
723
|
- Enterprise SSO/SAML
|
|
717
724
|
- Audit logging
|
|
725
|
+
- Seat tracking and management
|
|
718
726
|
- Email support (SLA varies by tier)
|
|
719
727
|
|
|
720
728
|
**Early Access:** Contact [sales@snow-flow.dev](mailto:sales@snow-flow.dev) for beta access and pilot programs.
|
package/SNOWCODE-MCP-FIX.md
CHANGED
|
@@ -166,7 +166,7 @@ This may indicate SnowCode is not properly detecting the running MCP servers. Po
|
|
|
166
166
|
|
|
167
167
|
1. **Update SnowCode:**
|
|
168
168
|
```bash
|
|
169
|
-
npm install -g @groeimetai/
|
|
169
|
+
npm install -g @groeimetai/snow-code@latest
|
|
170
170
|
```
|
|
171
171
|
|
|
172
172
|
2. **Check SnowCode logs** for MCP connection errors (if available)
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Snow-Flow Health Monitoring API
|
|
3
|
+
* Real-time system health and monitoring endpoints
|
|
4
|
+
*/
|
|
5
|
+
declare const app: import("express-serve-static-core").Express;
|
|
6
|
+
declare function start(): Promise<void>;
|
|
7
|
+
export { app, start };
|
|
8
|
+
//# sourceMappingURL=health-api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-api.d.ts","sourceRoot":"","sources":["../../src/api/health-api.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,QAAA,MAAM,GAAG,6CAAY,CAAC;AAyQtB,iBAAe,KAAK,kBAanB;AAoCD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Snow-Flow Health Monitoring API
|
|
4
|
+
* Real-time system health and monitoring endpoints
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.app = void 0;
|
|
11
|
+
exports.start = start;
|
|
12
|
+
const express_1 = __importDefault(require("express"));
|
|
13
|
+
const cors_1 = __importDefault(require("cors"));
|
|
14
|
+
const system_health_1 = require("../health/system-health");
|
|
15
|
+
const memory_system_1 = require("../memory/memory-system");
|
|
16
|
+
const logger_1 = require("../utils/logger");
|
|
17
|
+
const logger = new logger_1.Logger('HealthAPI');
|
|
18
|
+
const app = (0, express_1.default)();
|
|
19
|
+
exports.app = app;
|
|
20
|
+
// Enable CORS for status page
|
|
21
|
+
app.use((0, cors_1.default)({
|
|
22
|
+
origin: [
|
|
23
|
+
'http://localhost:8080',
|
|
24
|
+
'https://status.snow-flow.dev',
|
|
25
|
+
'https://snow-flow.dev'
|
|
26
|
+
],
|
|
27
|
+
credentials: true
|
|
28
|
+
}));
|
|
29
|
+
app.use(express_1.default.json());
|
|
30
|
+
// Initialize system health monitor
|
|
31
|
+
let healthMonitor;
|
|
32
|
+
let memorySystem;
|
|
33
|
+
async function initializeHealthMonitoring() {
|
|
34
|
+
logger.info('Initializing health monitoring API...');
|
|
35
|
+
// Initialize memory system
|
|
36
|
+
memorySystem = new memory_system_1.BasicMemorySystem();
|
|
37
|
+
await memorySystem.initialize();
|
|
38
|
+
// Initialize health monitor
|
|
39
|
+
healthMonitor = new system_health_1.SystemHealth({
|
|
40
|
+
memory: memorySystem,
|
|
41
|
+
config: {
|
|
42
|
+
checks: {
|
|
43
|
+
memory: true,
|
|
44
|
+
mcp: true,
|
|
45
|
+
servicenow: false, // Disable ServiceNow check for now
|
|
46
|
+
queen: true
|
|
47
|
+
},
|
|
48
|
+
thresholds: {
|
|
49
|
+
responseTime: 1000, // 1 second
|
|
50
|
+
memoryUsage: 0.85, // 85%
|
|
51
|
+
cpuUsage: 0.80, // 80%
|
|
52
|
+
queueSize: 100,
|
|
53
|
+
errorRate: 0.05 // 5%
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
await healthMonitor.initialize();
|
|
58
|
+
// Start monitoring with 30-second interval
|
|
59
|
+
await healthMonitor.startMonitoring(30000);
|
|
60
|
+
logger.info('Health monitoring initialized and started');
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* GET /health
|
|
64
|
+
* Basic health check endpoint
|
|
65
|
+
*/
|
|
66
|
+
app.get('/health', async (req, res) => {
|
|
67
|
+
try {
|
|
68
|
+
res.json({
|
|
69
|
+
status: 'healthy',
|
|
70
|
+
timestamp: new Date().toISOString(),
|
|
71
|
+
service: 'snow-flow-health-api',
|
|
72
|
+
version: process.env.npm_package_version || '1.0.0'
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
logger.error('Health check failed:', error);
|
|
77
|
+
res.status(500).json({
|
|
78
|
+
status: 'unhealthy',
|
|
79
|
+
error: error.message
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
/**
|
|
84
|
+
* GET /api/v1/status
|
|
85
|
+
* Get current system status (for status page)
|
|
86
|
+
*/
|
|
87
|
+
app.get('/api/v1/status', async (req, res) => {
|
|
88
|
+
try {
|
|
89
|
+
if (!healthMonitor) {
|
|
90
|
+
throw new Error('Health monitor not initialized');
|
|
91
|
+
}
|
|
92
|
+
const status = await healthMonitor.getFullStatus();
|
|
93
|
+
// Transform to status page format
|
|
94
|
+
const response = {
|
|
95
|
+
overall_status: status.status === 'healthy' ? 'operational' :
|
|
96
|
+
status.status === 'degraded' ? 'degraded' : 'outage',
|
|
97
|
+
uptime_30d: 99.97, // TODO: Calculate from historical data
|
|
98
|
+
avg_latency: Math.round(status.metrics.avgResponseTime),
|
|
99
|
+
active_incidents: status.status === 'unhealthy' ? 1 : 0,
|
|
100
|
+
services: {
|
|
101
|
+
mcp_server: {
|
|
102
|
+
status: status.components.mcp.status === 'healthy' ? 'operational' :
|
|
103
|
+
status.components.mcp.status === 'degraded' ? 'degraded' : 'outage',
|
|
104
|
+
latency: status.components.mcp.responseTime || 0
|
|
105
|
+
},
|
|
106
|
+
portal: {
|
|
107
|
+
status: 'operational', // TODO: Add real portal health check
|
|
108
|
+
latency: 150
|
|
109
|
+
},
|
|
110
|
+
website: {
|
|
111
|
+
status: 'operational', // TODO: Add real website health check
|
|
112
|
+
latency: 120
|
|
113
|
+
},
|
|
114
|
+
database: {
|
|
115
|
+
status: status.components.memory.status === 'healthy' ? 'operational' :
|
|
116
|
+
status.components.memory.status === 'degraded' ? 'degraded' : 'outage',
|
|
117
|
+
connections: Math.round(status.metrics.systemResources.processCount)
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
system_resources: {
|
|
121
|
+
cpu_usage: status.metrics.systemResources.cpuUsage,
|
|
122
|
+
memory_usage: (status.metrics.systemResources.memoryUsage / status.metrics.systemResources.memoryTotal) * 100,
|
|
123
|
+
disk_usage: status.metrics.systemResources.diskUsage
|
|
124
|
+
},
|
|
125
|
+
timestamp: status.timestamp.toISOString()
|
|
126
|
+
};
|
|
127
|
+
res.json(response);
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
logger.error('Status check failed:', error);
|
|
131
|
+
res.status(500).json({
|
|
132
|
+
error: 'Failed to retrieve system status',
|
|
133
|
+
message: error.message
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
/**
|
|
138
|
+
* GET /api/v1/uptime-history
|
|
139
|
+
* Get historical uptime data (last 90 days)
|
|
140
|
+
*/
|
|
141
|
+
app.get('/api/v1/uptime-history', async (req, res) => {
|
|
142
|
+
try {
|
|
143
|
+
if (!healthMonitor) {
|
|
144
|
+
throw new Error('Health monitor not initialized');
|
|
145
|
+
}
|
|
146
|
+
const days = parseInt(req.query.days) || 90;
|
|
147
|
+
const history = await healthMonitor.getHealthHistory(days * 48); // 48 checks per day (30min interval)
|
|
148
|
+
// Group by day and calculate uptime percentage
|
|
149
|
+
const uptimeByDay = {};
|
|
150
|
+
for (const check of history) {
|
|
151
|
+
const date = new Date(check.timestamp).toISOString().split('T')[0];
|
|
152
|
+
if (!uptimeByDay[date]) {
|
|
153
|
+
uptimeByDay[date] = { total: 0, healthy: 0 };
|
|
154
|
+
}
|
|
155
|
+
uptimeByDay[date].total++;
|
|
156
|
+
if (check.status === 'healthy') {
|
|
157
|
+
uptimeByDay[date].healthy++;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// Convert to array format
|
|
161
|
+
const uptimeData = Object.entries(uptimeByDay).map(([date, data]) => ({
|
|
162
|
+
date,
|
|
163
|
+
uptime_percentage: (data.healthy / data.total) * 100,
|
|
164
|
+
total_checks: data.total,
|
|
165
|
+
healthy_checks: data.healthy
|
|
166
|
+
}));
|
|
167
|
+
res.json({
|
|
168
|
+
days: uptimeData.length,
|
|
169
|
+
uptime_data: uptimeData
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
logger.error('Uptime history retrieval failed:', error);
|
|
174
|
+
res.status(500).json({
|
|
175
|
+
error: 'Failed to retrieve uptime history',
|
|
176
|
+
message: error.message
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
/**
|
|
181
|
+
* GET /api/v1/metrics
|
|
182
|
+
* Get detailed system metrics
|
|
183
|
+
*/
|
|
184
|
+
app.get('/api/v1/metrics', async (req, res) => {
|
|
185
|
+
try {
|
|
186
|
+
if (!healthMonitor) {
|
|
187
|
+
throw new Error('Health monitor not initialized');
|
|
188
|
+
}
|
|
189
|
+
const status = await healthMonitor.getFullStatus();
|
|
190
|
+
res.json({
|
|
191
|
+
timestamp: status.timestamp,
|
|
192
|
+
uptime_seconds: Math.floor(status.metrics.uptime / 1000),
|
|
193
|
+
total_checks: status.metrics.totalChecks,
|
|
194
|
+
failed_checks: status.metrics.failedChecks,
|
|
195
|
+
success_rate: ((status.metrics.totalChecks - status.metrics.failedChecks) / status.metrics.totalChecks) * 100,
|
|
196
|
+
avg_response_time: status.metrics.avgResponseTime,
|
|
197
|
+
system_resources: status.metrics.systemResources,
|
|
198
|
+
components: Object.entries(status.components).map(([name, component]) => ({
|
|
199
|
+
name,
|
|
200
|
+
status: component.status,
|
|
201
|
+
message: component.message,
|
|
202
|
+
response_time: component.responseTime,
|
|
203
|
+
details: component.details
|
|
204
|
+
}))
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
logger.error('Metrics retrieval failed:', error);
|
|
209
|
+
res.status(500).json({
|
|
210
|
+
error: 'Failed to retrieve metrics',
|
|
211
|
+
message: error.message
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
/**
|
|
216
|
+
* GET /api/v1/components/:component
|
|
217
|
+
* Get detailed information about a specific component
|
|
218
|
+
*/
|
|
219
|
+
app.get('/api/v1/components/:component', async (req, res) => {
|
|
220
|
+
try {
|
|
221
|
+
if (!healthMonitor) {
|
|
222
|
+
throw new Error('Health monitor not initialized');
|
|
223
|
+
}
|
|
224
|
+
const { component } = req.params;
|
|
225
|
+
const status = await healthMonitor.getFullStatus();
|
|
226
|
+
const componentData = status.components[component];
|
|
227
|
+
if (!componentData) {
|
|
228
|
+
res.status(404).json({
|
|
229
|
+
error: 'Component not found',
|
|
230
|
+
available_components: Object.keys(status.components)
|
|
231
|
+
});
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
res.json(componentData);
|
|
235
|
+
}
|
|
236
|
+
catch (error) {
|
|
237
|
+
logger.error('Component retrieval failed:', error);
|
|
238
|
+
res.status(500).json({
|
|
239
|
+
error: 'Failed to retrieve component data',
|
|
240
|
+
message: error.message
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
});
|
|
244
|
+
// Error handling middleware
|
|
245
|
+
app.use((err, req, res, next) => {
|
|
246
|
+
logger.error('API error:', err);
|
|
247
|
+
res.status(500).json({
|
|
248
|
+
error: 'Internal server error',
|
|
249
|
+
message: process.env.NODE_ENV === 'development' ? err.message : 'An error occurred'
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
// Start server
|
|
253
|
+
const PORT = parseInt(process.env.PORT || '3000');
|
|
254
|
+
const HOST = process.env.HOST || '0.0.0.0';
|
|
255
|
+
async function start() {
|
|
256
|
+
try {
|
|
257
|
+
await initializeHealthMonitoring();
|
|
258
|
+
app.listen(PORT, HOST, () => {
|
|
259
|
+
logger.info(`Snow-Flow Health API listening on ${HOST}:${PORT}`);
|
|
260
|
+
logger.info(`Health endpoint: http://${HOST}:${PORT}/health`);
|
|
261
|
+
logger.info(`Status API: http://${HOST}:${PORT}/api/v1/status`);
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
catch (error) {
|
|
265
|
+
logger.error('Failed to start Health API:', error);
|
|
266
|
+
process.exit(1);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
// Graceful shutdown
|
|
270
|
+
process.on('SIGTERM', async () => {
|
|
271
|
+
logger.info('SIGTERM received, shutting down gracefully...');
|
|
272
|
+
if (healthMonitor) {
|
|
273
|
+
await healthMonitor.stopMonitoring();
|
|
274
|
+
}
|
|
275
|
+
if (memorySystem) {
|
|
276
|
+
await memorySystem.close();
|
|
277
|
+
}
|
|
278
|
+
process.exit(0);
|
|
279
|
+
});
|
|
280
|
+
process.on('SIGINT', async () => {
|
|
281
|
+
logger.info('SIGINT received, shutting down gracefully...');
|
|
282
|
+
if (healthMonitor) {
|
|
283
|
+
await healthMonitor.stopMonitoring();
|
|
284
|
+
}
|
|
285
|
+
if (memorySystem) {
|
|
286
|
+
await memorySystem.close();
|
|
287
|
+
}
|
|
288
|
+
process.exit(0);
|
|
289
|
+
});
|
|
290
|
+
// Start if this file is run directly
|
|
291
|
+
if (require.main === module) {
|
|
292
|
+
start();
|
|
293
|
+
}
|
|
294
|
+
//# sourceMappingURL=health-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-api.js","sourceRoot":"","sources":["../../src/api/health-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple-health-api.d.ts","sourceRoot":"","sources":["../../src/api/simple-health-api.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,QAAA,MAAM,GAAG,6CAAY,CAAC;AA2TtB,OAAO,EAAE,GAAG,EAAE,CAAC"}
|