@openclaw-caribbean/server 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/api.d.ts +43 -0
  2. package/dist/api.d.ts.map +1 -0
  3. package/dist/api.js +354 -0
  4. package/dist/api.js.map +1 -0
  5. package/dist/auth.d.ts +8 -0
  6. package/dist/auth.d.ts.map +1 -0
  7. package/dist/auth.js +15 -0
  8. package/dist/auth.js.map +1 -0
  9. package/dist/cli.d.ts +3 -0
  10. package/dist/cli.d.ts.map +1 -0
  11. package/dist/cli.js +242 -0
  12. package/dist/cli.js.map +1 -0
  13. package/dist/database.d.ts +34 -0
  14. package/dist/database.d.ts.map +1 -0
  15. package/dist/database.js +236 -0
  16. package/dist/database.js.map +1 -0
  17. package/dist/index.d.ts +44 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +100 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/node-manager.d.ts +16 -0
  22. package/dist/node-manager.d.ts.map +1 -0
  23. package/dist/node-manager.js +70 -0
  24. package/dist/node-manager.js.map +1 -0
  25. package/dist/web/android-chrome-192x192.png +0 -0
  26. package/dist/web/android-chrome-512x512.png +0 -0
  27. package/dist/web/apple-touch-icon.png +0 -0
  28. package/dist/web/assets/index-BeNjTVfM.css +1 -0
  29. package/dist/web/assets/index-nlzc5Vy-.js +217 -0
  30. package/dist/web/favicon-16x16.png +0 -0
  31. package/dist/web/favicon-32x32.png +0 -0
  32. package/dist/web/favicon.ico +0 -0
  33. package/dist/web/img/caribbean-logo.png +0 -0
  34. package/dist/web/img/openclaw-logo.svg +60 -0
  35. package/dist/web/index.html +18 -0
  36. package/dist/web/site.webmanifest +11 -0
  37. package/dist/websocket-hub.d.ts +37 -0
  38. package/dist/websocket-hub.d.ts.map +1 -0
  39. package/dist/websocket-hub.js +218 -0
  40. package/dist/websocket-hub.js.map +1 -0
  41. package/package.json +42 -0
package/dist/cli.js ADDED
@@ -0,0 +1,242 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import { CaribbeanServer } from './index.js';
4
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs';
5
+ import { join, dirname } from 'path';
6
+ import { homedir } from 'os';
7
+ import { readPid, removePid, processExists, spawnDaemon, stopDaemon, } from '@openclaw-caribbean/shared';
8
+ const program = new Command();
9
+ const CONFIG_PATH = join(homedir(), '.caribbean', 'server.json');
10
+ const PID_PATH = join(homedir(), '.caribbean', 'server.pid');
11
+ const LOG_PATH = join(homedir(), '.caribbean', 'server.log');
12
+ program
13
+ .name('caribbean-server')
14
+ .description('Caribbean Server - Cluster management hub')
15
+ .version('0.1.0');
16
+ program
17
+ .command('init')
18
+ .description('Initialize server configuration')
19
+ .option('--port <number>', 'WebSocket port', '8080')
20
+ .option('--token <token>', 'Authentication token')
21
+ .action((options) => {
22
+ const config = {
23
+ websocket: {
24
+ port: parseInt(options.port, 10),
25
+ path: '/ws/agent',
26
+ maxConnections: 1000
27
+ },
28
+ api: {
29
+ port: 3000,
30
+ host: '0.0.0.0',
31
+ webDistPath: join(process.cwd(), 'dist/web')
32
+ },
33
+ database: {
34
+ type: 'sqlite',
35
+ path: './data/caribbean.db'
36
+ },
37
+ auth: {
38
+ enabled: !!options.token,
39
+ tokens: options.token ? [options.token] : [],
40
+ user: undefined,
41
+ jwtSecret: undefined
42
+ }
43
+ };
44
+ const configDir = dirname(CONFIG_PATH);
45
+ if (!existsSync(configDir)) {
46
+ mkdirSync(configDir, { recursive: true });
47
+ }
48
+ writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2));
49
+ console.log(`\n✓ Server configuration created at ${CONFIG_PATH}`);
50
+ console.log(`\nConfiguration:`);
51
+ console.log(` WebSocket Port: ${config.websocket.port}`);
52
+ console.log(` API Port: ${config.api.port}`);
53
+ console.log(` Web UI: http://localhost:${config.api.port}`);
54
+ console.log(` Auth Enabled: ${config.auth.enabled}`);
55
+ console.log(`\nNext steps:`);
56
+ console.log(` caribbean-server start`);
57
+ });
58
+ program
59
+ .command('start')
60
+ .description('Start the server')
61
+ .option('--config <path>', 'Config file path', CONFIG_PATH)
62
+ .option('--port <number>', 'Override WebSocket port')
63
+ .option('--foreground', 'Run in foreground')
64
+ .action(async (options) => {
65
+ const configPath = options.config;
66
+ if (!options.foreground) {
67
+ const existingPid = readPid(PID_PATH);
68
+ if (existingPid && processExists(existingPid)) {
69
+ console.error(`Server is already running (PID: ${existingPid})`);
70
+ console.error('Use `caribbean-server stop` to stop it first.');
71
+ process.exit(1);
72
+ }
73
+ if (existingPid)
74
+ removePid(PID_PATH);
75
+ const args = [process.argv[1], 'start', '--foreground'];
76
+ if (configPath !== CONFIG_PATH)
77
+ args.push('--config', configPath);
78
+ if (options.port)
79
+ args.push('--port', options.port);
80
+ const pid = spawnDaemon({
81
+ pidPath: PID_PATH,
82
+ logPath: LOG_PATH,
83
+ spawnArgs: args,
84
+ });
85
+ console.log(`Server started in background (PID: ${pid})`);
86
+ console.log(`Log file: ${LOG_PATH}`);
87
+ return;
88
+ }
89
+ let config;
90
+ try {
91
+ const configContent = readFileSync(configPath, 'utf-8');
92
+ config = JSON.parse(configContent);
93
+ }
94
+ catch (error) {
95
+ console.error(`Failed to read config file: ${configPath}`);
96
+ console.error('Run `caribbean-server init` first.');
97
+ process.exit(1);
98
+ }
99
+ if (options.port) {
100
+ config.websocket.port = parseInt(options.port, 10);
101
+ }
102
+ const server = new CaribbeanServer(config);
103
+ await server.start();
104
+ process.on('SIGINT', () => {
105
+ console.log('\n[Server] Shutting down...');
106
+ server.stop();
107
+ removePid(PID_PATH);
108
+ process.exit(0);
109
+ });
110
+ process.on('SIGTERM', () => {
111
+ console.log('\n[Server] Shutting down...');
112
+ server.stop();
113
+ removePid(PID_PATH);
114
+ process.exit(0);
115
+ });
116
+ });
117
+ program
118
+ .command('status')
119
+ .description('Show server status')
120
+ .option('--config <path>', 'Config file path', CONFIG_PATH)
121
+ .action((options) => {
122
+ try {
123
+ const configContent = readFileSync(options.config, 'utf-8');
124
+ const config = JSON.parse(configContent);
125
+ const pid = readPid(PID_PATH);
126
+ const running = pid !== null && processExists(pid);
127
+ console.log('\nServer Status:');
128
+ console.log(` Running: ${running ? `Yes (PID: ${pid})` : 'No'}`);
129
+ console.log(` WebSocket Port: ${config.websocket.port}`);
130
+ console.log(` WebSocket Path: ${config.websocket.path}`);
131
+ console.log(` Max Connections: ${config.websocket.maxConnections}`);
132
+ console.log(` API Port: ${config.api.port}`);
133
+ console.log(` Web UI: http://${config.api.host}:${config.api.port}`);
134
+ console.log(` Auth Enabled: ${config.auth.enabled}`);
135
+ if (config.auth.user) {
136
+ console.log(` Username: ${config.auth.user.username}`);
137
+ console.log(` Password: ${'*'.repeat(config.auth.user.password.length)}`);
138
+ }
139
+ }
140
+ catch (error) {
141
+ console.error(`Failed to read config file: ${options.config}`);
142
+ process.exit(1);
143
+ }
144
+ });
145
+ program
146
+ .command('set-auth')
147
+ .description('Set username and password for web UI authentication')
148
+ .option('--config <path>', 'Config file path', CONFIG_PATH)
149
+ .option('--username <username>', 'Username')
150
+ .option('--password <password>', 'Password')
151
+ .option('--disable', 'Disable authentication')
152
+ .action((options) => {
153
+ try {
154
+ let configContent;
155
+ try {
156
+ configContent = readFileSync(options.config, 'utf-8');
157
+ }
158
+ catch (error) {
159
+ console.error(`Failed to read config file: ${options.config}`);
160
+ console.error('Run `caribbean-server init` first.');
161
+ process.exit(1);
162
+ }
163
+ const config = JSON.parse(configContent);
164
+ if (options.disable) {
165
+ config.auth.enabled = false;
166
+ config.auth.user = undefined;
167
+ config.auth.jwtSecret = undefined;
168
+ }
169
+ else if (options.username && options.password) {
170
+ config.auth.enabled = true;
171
+ config.auth.user = {
172
+ username: options.username,
173
+ password: options.password
174
+ };
175
+ config.auth.jwtSecret = 'caribbean-jwt-secret-' + Date.now();
176
+ }
177
+ else {
178
+ console.error('Error: Please provide --username and --password, or use --disable to remove authentication.');
179
+ process.exit(1);
180
+ }
181
+ writeFileSync(options.config, JSON.stringify(config, null, 2));
182
+ if (options.disable) {
183
+ console.log('\n✓ Authentication disabled');
184
+ console.log(`\nConfiguration updated at ${options.config}`);
185
+ }
186
+ else {
187
+ console.log('\n✓ Authentication enabled');
188
+ console.log(` Username: ${options.username}`);
189
+ console.log(` Password: ${'*'.repeat(options.password.length)}`);
190
+ console.log(`\nConfiguration updated at ${options.config}`);
191
+ }
192
+ console.log('\nNote: You may need to restart the server for changes to take effect.');
193
+ console.log('Run: caribbean-server restart');
194
+ }
195
+ catch (error) {
196
+ console.error('Failed to set authentication:', error);
197
+ process.exit(1);
198
+ }
199
+ });
200
+ program
201
+ .command('stop')
202
+ .description('Stop the server')
203
+ .action(async () => {
204
+ await stopDaemon(PID_PATH, 'Server');
205
+ });
206
+ program
207
+ .command('restart')
208
+ .description('Restart the server')
209
+ .option('--config <path>', 'Config file path', CONFIG_PATH)
210
+ .option('--port <number>', 'Override WebSocket port')
211
+ .action(async (options) => {
212
+ await stopDaemon(PID_PATH, 'Server');
213
+ const configPath = options.config;
214
+ const args = [process.argv[1], 'start', '--foreground'];
215
+ if (configPath !== CONFIG_PATH)
216
+ args.push('--config', configPath);
217
+ if (options.port)
218
+ args.push('--port', options.port);
219
+ const pid = spawnDaemon({
220
+ pidPath: PID_PATH,
221
+ logPath: LOG_PATH,
222
+ spawnArgs: args,
223
+ });
224
+ console.log(`Server restarted in background (PID: ${pid})`);
225
+ console.log(`Log file: ${LOG_PATH}`);
226
+ });
227
+ program
228
+ .command('logs')
229
+ .description('Show server logs')
230
+ .option('--lines <number>', 'Number of lines to show', '50')
231
+ .action((options) => {
232
+ if (!existsSync(LOG_PATH)) {
233
+ console.log('No log file found');
234
+ return;
235
+ }
236
+ const content = readFileSync(LOG_PATH, 'utf-8');
237
+ const n = parseInt(options.lines, 10);
238
+ const lines = content.split('\n').slice(-n);
239
+ console.log(lines.join('\n'));
240
+ });
241
+ program.parse();
242
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { NodeInfo } from '@openclaw-caribbean/shared';
2
+ export interface DatabaseConfig {
3
+ type: 'sqlite' | 'postgresql';
4
+ path?: string;
5
+ url?: string;
6
+ }
7
+ export interface Migration {
8
+ version: number;
9
+ name: string;
10
+ up: string;
11
+ }
12
+ export declare class DatabaseManager {
13
+ private db;
14
+ private config;
15
+ constructor(config: DatabaseConfig);
16
+ connect(): Promise<void>;
17
+ private initSchema;
18
+ private runMigrations;
19
+ private getMigrations;
20
+ cleanupHistory(): Promise<void>;
21
+ saveNode(node: NodeInfo): Promise<void>;
22
+ saveNodeHistory(nodeId: string, statusJson: string, openclawStatus: string): Promise<void>;
23
+ updateNodeHeartbeat(nodeId: string): Promise<void>;
24
+ getNode(nodeId: string): Promise<NodeInfo | null>;
25
+ getAllNodes(): Promise<NodeInfo[]>;
26
+ getNodeStatusHistory(nodeId: string, limit?: number): Promise<any[]>;
27
+ updateNodeName(nodeId: string, name: string): Promise<void>;
28
+ updateNodeConnected(nodeId: string, clientIp?: string): Promise<void>;
29
+ updateNodeDisconnected(nodeId: string): Promise<void>;
30
+ deleteNode(nodeId: string): Promise<void>;
31
+ private rowToNodeInfo;
32
+ disconnect(): Promise<void>;
33
+ }
34
+ //# sourceMappingURL=database.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAK3D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,GAAG,YAAY,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,EAAE,CAA8D;IACxE,OAAO,CAAC,MAAM,CAAiB;gBAEnB,MAAM,EAAE,cAAc;IAI5B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAmBhB,UAAU;YAyCV,aAAa;IAuB3B,OAAO,CAAC,aAAa;IAUf,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB/B,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAqDvC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAe1F,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYlD,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAajD,WAAW,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAUlC,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAoBvE,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW3D,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBrE,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrD,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS/C,OAAO,CAAC,aAAa;IAaf,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAMlC"}
@@ -0,0 +1,236 @@
1
+ import { open } from 'sqlite';
2
+ import { existsSync, mkdirSync } from 'fs';
3
+ import { dirname } from 'path';
4
+ import sqlite3 from 'sqlite3';
5
+ export class DatabaseManager {
6
+ db = null;
7
+ config;
8
+ constructor(config) {
9
+ this.config = config;
10
+ }
11
+ async connect() {
12
+ if (this.config.type === 'sqlite') {
13
+ const dbPath = this.config.path || './data/caribbean.db';
14
+ const dbDir = dirname(dbPath);
15
+ if (!existsSync(dbDir)) {
16
+ mkdirSync(dbDir, { recursive: true });
17
+ }
18
+ this.db = await open({
19
+ filename: dbPath,
20
+ driver: sqlite3.Database
21
+ });
22
+ await this.initSchema();
23
+ await this.runMigrations();
24
+ }
25
+ }
26
+ async initSchema() {
27
+ if (!this.db)
28
+ return;
29
+ await this.db.exec(`
30
+ CREATE TABLE IF NOT EXISTS migrations (
31
+ version INTEGER PRIMARY KEY,
32
+ name TEXT NOT NULL,
33
+ executed_at TEXT DEFAULT CURRENT_TIMESTAMP
34
+ );
35
+
36
+ CREATE TABLE IF NOT EXISTS nodes (
37
+ id TEXT PRIMARY KEY,
38
+ name TEXT NOT NULL,
39
+ tags TEXT,
40
+ connected INTEGER DEFAULT 0,
41
+ last_seen TEXT,
42
+ status TEXT,
43
+ openclaw_status TEXT DEFAULT 'unknown',
44
+ created_at TEXT DEFAULT CURRENT_TIMESTAMP,
45
+ updated_at TEXT DEFAULT CURRENT_TIMESTAMP
46
+ );
47
+
48
+ CREATE TABLE IF NOT EXISTS status_history (
49
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
50
+ node_id TEXT NOT NULL,
51
+ status TEXT NOT NULL,
52
+ openclaw_status TEXT DEFAULT 'unknown',
53
+ timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
54
+ FOREIGN KEY (node_id) REFERENCES nodes(id) ON DELETE CASCADE
55
+ );
56
+
57
+ CREATE INDEX IF NOT EXISTS idx_nodes_connected ON nodes(connected);
58
+ CREATE INDEX IF NOT EXISTS idx_nodes_openclaw_status ON nodes(openclaw_status);
59
+ CREATE INDEX IF NOT EXISTS idx_status_history_node_id ON status_history(node_id);
60
+ CREATE INDEX IF NOT EXISTS idx_status_history_timestamp ON status_history(timestamp);
61
+ `);
62
+ // 初始化后,清理过多的历史记录
63
+ await this.cleanupHistory();
64
+ }
65
+ async runMigrations() {
66
+ if (!this.db)
67
+ return;
68
+ const migrations = this.getMigrations();
69
+ for (const migration of migrations) {
70
+ const executed = await this.db.get(`SELECT version FROM migrations WHERE version = ?`, [migration.version]);
71
+ if (!executed) {
72
+ console.log(`[Database] Running migration: ${migration.name}`);
73
+ await this.db.exec(migration.up);
74
+ await this.db.run(`INSERT INTO migrations (version, name) VALUES (?, ?)`, [migration.version, migration.name]);
75
+ console.log(`[Database] Migration completed: ${migration.name}`);
76
+ }
77
+ }
78
+ }
79
+ getMigrations() {
80
+ return [
81
+ {
82
+ version: 1,
83
+ name: 'add_client_ip_column',
84
+ up: `ALTER TABLE nodes ADD COLUMN client_ip TEXT;`
85
+ }
86
+ ];
87
+ }
88
+ async cleanupHistory() {
89
+ if (!this.db)
90
+ return;
91
+ // 只保留每个节点的最近 5 条历史记录
92
+ await this.db.exec(`
93
+ DELETE FROM status_history
94
+ WHERE id NOT IN (
95
+ SELECT id FROM status_history AS sh
96
+ WHERE sh.node_id = status_history.node_id
97
+ ORDER BY sh.id DESC
98
+ LIMIT 5
99
+ )
100
+ `);
101
+ console.log('[Database] History cleaned - keeping only last 5 records per node');
102
+ }
103
+ async saveNode(node) {
104
+ if (!this.db)
105
+ return;
106
+ const now = new Date().toISOString();
107
+ const tagsJson = JSON.stringify(node.tags);
108
+ const statusJson = node.status ? JSON.stringify(node.status) : null;
109
+ // Check if node exists
110
+ const existingNode = await this.db.get(`SELECT id, name FROM nodes WHERE id = ?`, [node.id]);
111
+ if (existingNode) {
112
+ // Update existing node - only update necessary fields, preserve name
113
+ await this.db.run(`UPDATE nodes SET tags = ?, connected = ?, last_seen = ?, status = ?, openclaw_status = ?, client_ip = ?, updated_at = ? WHERE id = ?`, [
114
+ tagsJson,
115
+ node.connected ? 1 : 0,
116
+ node.lastSeen.toISOString(),
117
+ statusJson,
118
+ node.openclawStatus || 'unknown',
119
+ node.clientIp || null,
120
+ now,
121
+ node.id
122
+ ]);
123
+ }
124
+ else {
125
+ // Insert new node
126
+ await this.db.run(`INSERT INTO nodes (id, name, tags, connected, last_seen, status, openclaw_status, client_ip, updated_at)
127
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
128
+ node.id,
129
+ node.name,
130
+ tagsJson,
131
+ node.connected ? 1 : 0,
132
+ node.lastSeen.toISOString(),
133
+ statusJson,
134
+ node.openclawStatus || 'unknown',
135
+ node.clientIp || null,
136
+ now
137
+ ]);
138
+ }
139
+ // 只保留每个节点的最近 5 条历史记录
140
+ if (node.status && statusJson) {
141
+ await this.saveNodeHistory(node.id, statusJson, node.openclawStatus || 'unknown');
142
+ }
143
+ }
144
+ async saveNodeHistory(nodeId, statusJson, openclawStatus) {
145
+ if (!this.db)
146
+ return;
147
+ const now = new Date().toISOString();
148
+ await this.db.run(`INSERT OR REPLACE INTO status_history (node_id, status, openclaw_status, timestamp)
149
+ VALUES (?, ?, ?, ?)`, [nodeId, statusJson, openclawStatus || 'unknown', now]);
150
+ // 清理旧的历史记录,只保留最近 5 条
151
+ await this.cleanupHistory();
152
+ }
153
+ async updateNodeHeartbeat(nodeId) {
154
+ if (!this.db)
155
+ return;
156
+ const now = new Date().toISOString();
157
+ // 收到心跳只更新 last_seen 和 updated_at,不改变 connected 状态
158
+ await this.db.run(`UPDATE nodes SET last_seen = ?, updated_at = ? WHERE id = ?`, [now, now, nodeId]);
159
+ }
160
+ async getNode(nodeId) {
161
+ if (!this.db)
162
+ return null;
163
+ const row = await this.db.get(`SELECT * FROM nodes WHERE id = ?`, [nodeId]);
164
+ if (!row)
165
+ return null;
166
+ return this.rowToNodeInfo(row);
167
+ }
168
+ async getAllNodes() {
169
+ if (!this.db)
170
+ return [];
171
+ const rows = await this.db.all(`SELECT * FROM nodes ORDER BY name`);
172
+ return rows.map(row => this.rowToNodeInfo(row));
173
+ }
174
+ async getNodeStatusHistory(nodeId, limit = 5) {
175
+ if (!this.db)
176
+ return [];
177
+ const rows = await this.db.all(`SELECT * FROM status_history
178
+ WHERE node_id = ?
179
+ ORDER BY timestamp DESC
180
+ LIMIT ?`, [nodeId, limit]);
181
+ return rows.map(row => ({
182
+ id: row.id,
183
+ nodeId: row.node_id,
184
+ status: JSON.parse(row.status),
185
+ openclawStatus: row.openclaw_status,
186
+ timestamp: new Date(row.timestamp)
187
+ }));
188
+ }
189
+ async updateNodeName(nodeId, name) {
190
+ if (!this.db)
191
+ return;
192
+ const now = new Date().toISOString();
193
+ await this.db.run(`UPDATE nodes SET name = ?, updated_at = ? WHERE id = ?`, [name, now, nodeId]);
194
+ }
195
+ async updateNodeConnected(nodeId, clientIp) {
196
+ if (!this.db)
197
+ return;
198
+ const now = new Date().toISOString();
199
+ if (clientIp) {
200
+ await this.db.run(`UPDATE nodes SET connected = 1, last_seen = ?, client_ip = ?, updated_at = ? WHERE id = ?`, [now, clientIp, now, nodeId]);
201
+ }
202
+ else {
203
+ await this.db.run(`UPDATE nodes SET connected = 1, last_seen = ?, updated_at = ? WHERE id = ?`, [now, now, nodeId]);
204
+ }
205
+ }
206
+ async updateNodeDisconnected(nodeId) {
207
+ if (!this.db)
208
+ return;
209
+ const now = new Date().toISOString();
210
+ await this.db.run(`UPDATE nodes SET connected = 0, openclaw_status = 'unknown', updated_at = ? WHERE id = ?`, [now, nodeId]);
211
+ }
212
+ async deleteNode(nodeId) {
213
+ if (!this.db)
214
+ return;
215
+ await this.db.run(`DELETE FROM nodes WHERE id = ?`, [nodeId]);
216
+ }
217
+ rowToNodeInfo(row) {
218
+ return {
219
+ id: row.id,
220
+ name: row.name,
221
+ tags: JSON.parse(row.tags || '[]'),
222
+ connected: row.connected === 1,
223
+ lastSeen: new Date(row.last_seen),
224
+ status: row.status ? JSON.parse(row.status) : undefined,
225
+ openclawStatus: row.openclaw_status || 'unknown',
226
+ clientIp: row.client_ip || undefined
227
+ };
228
+ }
229
+ async disconnect() {
230
+ if (this.db) {
231
+ await this.db.close();
232
+ this.db = null;
233
+ }
234
+ }
235
+ }
236
+ //# sourceMappingURL=database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { NodeManager } from './node-manager.js';
2
+ import { WebSocketHub } from './websocket-hub.js';
3
+ import { DatabaseManager } from './database.js';
4
+ export interface ServerConfig {
5
+ websocket: {
6
+ port: number;
7
+ path: string;
8
+ maxConnections: number;
9
+ };
10
+ api?: {
11
+ port: number;
12
+ host: string;
13
+ webDistPath?: string;
14
+ };
15
+ database?: {
16
+ type: 'sqlite' | 'postgresql';
17
+ path?: string;
18
+ url?: string;
19
+ };
20
+ auth?: {
21
+ enabled: boolean;
22
+ tokens: string[];
23
+ user?: {
24
+ username: string;
25
+ password: string;
26
+ };
27
+ jwtSecret?: string;
28
+ };
29
+ }
30
+ export declare class CaribbeanServer {
31
+ private nodeManager;
32
+ private websocketHub;
33
+ private apiServer;
34
+ private database;
35
+ private config;
36
+ constructor(config: ServerConfig);
37
+ start(): Promise<void>;
38
+ stop(): void;
39
+ getNodeManager(): NodeManager;
40
+ getWebSocketHub(): WebSocketHub;
41
+ getDatabase(): DatabaseManager | null;
42
+ private logStatus;
43
+ }
44
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,GAAG,CAAC,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,QAAQ,GAAG,YAAY,CAAC;QAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IACF,IAAI,CAAC,EAAE;QACL,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,IAAI,CAAC,EAAE;YACL,QAAQ,EAAE,MAAM,CAAC;YACjB,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,QAAQ,CAAgC;IAChD,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,EAAE,YAAY;IAoE1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsB5B,IAAI,IAAI,IAAI;IAYZ,cAAc,IAAI,WAAW;IAI7B,eAAe,IAAI,YAAY;IAI/B,WAAW,IAAI,eAAe,GAAG,IAAI;IAIrC,OAAO,CAAC,SAAS;CAKlB"}