@xopcai/xopcbot 0.1.1 → 0.1.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/agent/service.js +121 -35
- package/dist/agent/service.js.map +1 -1
- package/dist/channels/telegram/command-handler.d.ts +3 -0
- package/dist/channels/telegram/command-handler.js +69 -0
- package/dist/channels/telegram/command-handler.js.map +1 -1
- package/dist/channels/telegram/plugin.d.ts +1 -0
- package/dist/channels/telegram/plugin.js +97 -1
- package/dist/channels/telegram/plugin.js.map +1 -1
- package/dist/cli/commands/config.js +59 -0
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/gateway-daemon.d.ts +1 -0
- package/dist/cli/commands/gateway-daemon.js +141 -0
- package/dist/cli/commands/gateway-daemon.js.map +1 -0
- package/dist/cli/commands/gateway.js +387 -45
- package/dist/cli/commands/gateway.js.map +1 -1
- package/dist/cli/commands/onboard.js +198 -0
- package/dist/cli/commands/onboard.js.map +1 -1
- package/dist/cli/index.js +17 -5
- package/dist/cli/index.js.map +1 -1
- package/dist/config/paths.js +13 -8
- package/dist/config/paths.js.map +1 -1
- package/dist/config/schema.d.ts +22 -0
- package/dist/config/schema.js +16 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/daemon/background-start.d.ts +33 -0
- package/dist/daemon/background-start.js +89 -0
- package/dist/daemon/background-start.js.map +1 -0
- package/dist/daemon/gateway-manager.d.ts +87 -0
- package/dist/daemon/gateway-manager.js +324 -0
- package/dist/daemon/gateway-manager.js.map +1 -0
- package/dist/daemon/index.d.ts +5 -0
- package/dist/daemon/index.js +6 -0
- package/dist/daemon/index.js.map +1 -0
- package/dist/gateway/__tests__/auth.test.d.ts +1 -0
- package/dist/gateway/__tests__/auth.test.js +128 -0
- package/dist/gateway/__tests__/auth.test.js.map +1 -0
- package/dist/gateway/__tests__/process-manager.test.d.ts +4 -0
- package/dist/gateway/__tests__/process-manager.test.js +140 -0
- package/dist/gateway/__tests__/process-manager.test.js.map +1 -0
- package/dist/gateway/auth.d.ts +33 -0
- package/dist/gateway/auth.js +94 -0
- package/dist/gateway/auth.js.map +1 -0
- package/dist/gateway/hono/app.js +54 -15
- package/dist/gateway/hono/app.js.map +1 -1
- package/dist/gateway/index.d.ts +3 -0
- package/dist/gateway/index.js +3 -0
- package/dist/gateway/index.js.map +1 -1
- package/dist/gateway/pid-file.d.ts +35 -0
- package/dist/gateway/pid-file.js +111 -0
- package/dist/gateway/pid-file.js.map +1 -0
- package/dist/gateway/port-checker.d.ts +24 -0
- package/dist/gateway/port-checker.js +132 -0
- package/dist/gateway/port-checker.js.map +1 -0
- package/dist/gateway/process-manager.d.ts +62 -0
- package/dist/gateway/process-manager.js +370 -0
- package/dist/gateway/process-manager.js.map +1 -0
- package/dist/gateway/process-manager.types.d.ts +64 -0
- package/dist/gateway/process-manager.types.js +5 -0
- package/dist/gateway/process-manager.types.js.map +1 -0
- package/dist/gateway/server.js +3 -1
- package/dist/gateway/server.js.map +1 -1
- package/dist/gateway/service.d.ts +20 -0
- package/dist/gateway/service.js +67 -0
- package/dist/gateway/service.js.map +1 -1
- package/dist/gateway/static/root/assets/{main-CfIxL-cL.js → main-DevbZW9K.js} +373 -251
- package/dist/gateway/static/root/assets/main-DevbZW9K.js.map +1 -0
- package/dist/gateway/static/root/assets/{main-DndcTCgX.css → main-DxZg1Nmz.css} +1 -1
- package/dist/gateway/static/root/index.html +2 -2
- package/dist/session/store.js +11 -2
- package/dist/session/store.js.map +1 -1
- package/package.json +2 -2
- package/dist/gateway/static/root/assets/main-CfIxL-cL.js.map +0 -1
|
@@ -1,78 +1,414 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
+
import crypto from 'crypto';
|
|
2
3
|
import { GatewayServer } from '../../gateway/index.js';
|
|
4
|
+
import { loadConfig, saveConfig, DEFAULT_PATHS } from '../../config/index.js';
|
|
3
5
|
import { createLogger } from '../../utils/logger.js';
|
|
4
6
|
import { register, formatExamples } from '../registry.js';
|
|
5
7
|
import { getContextWithOpts } from '../index.js';
|
|
8
|
+
import { GatewayProcessManager } from '../../gateway/process-manager.js';
|
|
6
9
|
const log = createLogger('GatewayCommand');
|
|
7
10
|
function createGatewayCommand(_ctx) {
|
|
8
11
|
const cmd = new Command('gateway')
|
|
9
12
|
.description('Start the xopcbot gateway server')
|
|
10
13
|
.addHelpText('after', formatExamples([
|
|
11
|
-
'xopcbot gateway # Start with default port',
|
|
14
|
+
'xopcbot gateway # Start with default port (foreground)',
|
|
12
15
|
'xopcbot gateway --port 8080 # Custom port',
|
|
13
16
|
'xopcbot gateway --host 127.0.0.1 # Bind to localhost only',
|
|
14
17
|
'xopcbot gateway --token secret # Enable authentication',
|
|
15
18
|
'xopcbot gateway --no-hot-reload # Disable config hot reload',
|
|
19
|
+
'xopcbot gateway --background # Run in background (daemon mode)',
|
|
20
|
+
'xopcbot gateway --bg # Shorthand for --background',
|
|
21
|
+
'xopcbot gateway status # Check gateway status',
|
|
22
|
+
'xopcbot gateway stop # Stop running gateway',
|
|
23
|
+
'xopcbot gateway restart # Restart gateway',
|
|
24
|
+
'xopcbot gateway logs # View recent logs',
|
|
25
|
+
'xopcbot gateway token # Show current token',
|
|
26
|
+
'xopcbot gateway token --generate # Generate new token',
|
|
16
27
|
]))
|
|
17
28
|
.option('--host <address>', 'Host to bind to', '0.0.0.0')
|
|
18
29
|
.option('--port <number>', 'Port to listen on', '18790')
|
|
19
30
|
.option('--token <token>', 'Authentication token')
|
|
20
31
|
.option('--no-hot-reload', 'Disable config hot reload')
|
|
32
|
+
.option('-b, --background', 'Run in background (daemon mode)')
|
|
33
|
+
.option('--log-file <path>', 'Log file path for background mode')
|
|
34
|
+
.addCommand(createTokenCommand())
|
|
35
|
+
.addCommand(createStatusCommand())
|
|
36
|
+
.addCommand(createStopCommand())
|
|
37
|
+
.addCommand(createRestartCommand())
|
|
38
|
+
.addCommand(createLogsCommand())
|
|
21
39
|
.action(async (options) => {
|
|
22
40
|
const ctx = getContextWithOpts();
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
41
|
+
// Load config for token and other settings
|
|
42
|
+
const config = loadConfig(ctx.configPath);
|
|
43
|
+
// Background mode: use process manager
|
|
44
|
+
if (options.background) {
|
|
45
|
+
await startBackgroundMode(options, ctx, config);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
// Foreground mode: use GatewayServer directly
|
|
49
|
+
await startForegroundMode(options, ctx, config);
|
|
50
|
+
});
|
|
51
|
+
return cmd;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Create the token subcommand for managing gateway authentication token.
|
|
55
|
+
*/
|
|
56
|
+
function createTokenCommand() {
|
|
57
|
+
return new Command('token')
|
|
58
|
+
.description('Manage gateway authentication token')
|
|
59
|
+
.option('--generate', 'Generate a new token and save to config')
|
|
60
|
+
.option('--mode <mode>', 'Auth mode: token or none', 'token')
|
|
61
|
+
.action(async (options) => {
|
|
62
|
+
const ctx = getContextWithOpts();
|
|
63
|
+
const configPath = ctx.configPath || DEFAULT_PATHS.config;
|
|
64
|
+
try {
|
|
65
|
+
// Load current config
|
|
66
|
+
const config = loadConfig(configPath);
|
|
67
|
+
if (options.generate) {
|
|
68
|
+
// Generate new token
|
|
69
|
+
const newToken = crypto.randomBytes(24).toString('hex');
|
|
70
|
+
// Update config
|
|
71
|
+
config.gateway = config.gateway || {};
|
|
72
|
+
config.gateway.auth = {
|
|
73
|
+
mode: 'token',
|
|
74
|
+
token: newToken,
|
|
75
|
+
};
|
|
76
|
+
// Save config
|
|
77
|
+
await saveConfig(config, configPath);
|
|
78
|
+
console.log('✅ Generated new gateway token:');
|
|
79
|
+
console.log('');
|
|
80
|
+
console.log(` ${newToken}`);
|
|
81
|
+
console.log('');
|
|
82
|
+
console.log('📝 Saved to config file. Use this token in the X-Api-Key header or as:');
|
|
83
|
+
console.log(` xopcbot gateway --token ${newToken}`);
|
|
84
|
+
console.log('');
|
|
85
|
+
console.log('Or set environment variable:');
|
|
86
|
+
console.log(` export XOPCBOT_GATEWAY_TOKEN=${newToken}`);
|
|
47
87
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
88
|
+
else {
|
|
89
|
+
// Show current token
|
|
90
|
+
const currentToken = config.gateway?.auth?.token;
|
|
91
|
+
const mode = config.gateway?.auth?.mode || 'token';
|
|
92
|
+
if (mode === 'none') {
|
|
93
|
+
console.log('⚠️ Gateway authentication is disabled (mode: none)');
|
|
94
|
+
console.log('');
|
|
95
|
+
console.log('To enable authentication, run:');
|
|
96
|
+
console.log(' xopcbot gateway token --generate');
|
|
97
|
+
}
|
|
98
|
+
else if (currentToken) {
|
|
99
|
+
const tokenPreview = `${currentToken.slice(0, 8)}...${currentToken.slice(-8)}`;
|
|
100
|
+
console.log('🔑 Current gateway token:');
|
|
101
|
+
console.log('');
|
|
102
|
+
console.log(` ${currentToken}`);
|
|
103
|
+
console.log('');
|
|
104
|
+
console.log(`Preview: ${tokenPreview}`);
|
|
105
|
+
console.log('');
|
|
106
|
+
console.log('Usage:');
|
|
107
|
+
console.log(` xopcbot gateway --token ${currentToken}`);
|
|
108
|
+
console.log('');
|
|
109
|
+
console.log('Or set environment variable:');
|
|
110
|
+
console.log(` export XOPCBOT_GATEWAY_TOKEN=${currentToken}`);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
console.log('⚠️ No token configured. A token will be auto-generated on startup.');
|
|
114
|
+
console.log('');
|
|
115
|
+
console.log('To set a persistent token, run:');
|
|
116
|
+
console.log(' xopcbot gateway token --generate');
|
|
117
|
+
}
|
|
52
118
|
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
log.error({ err: error }, 'Failed to manage token');
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Start gateway in background mode using process manager
|
|
128
|
+
*/
|
|
129
|
+
async function startBackgroundMode(options, ctx, config) {
|
|
130
|
+
const manager = new GatewayProcessManager();
|
|
131
|
+
// Check if already running
|
|
132
|
+
if (manager.isRunning()) {
|
|
133
|
+
const status = manager.getStatus();
|
|
134
|
+
console.log('⚠️ Gateway is already running');
|
|
135
|
+
if (status.pid) {
|
|
136
|
+
console.log(` PID: ${status.pid}`);
|
|
137
|
+
}
|
|
138
|
+
if (status.uptime) {
|
|
139
|
+
const minutes = Math.floor(status.uptime / 60000);
|
|
140
|
+
const seconds = Math.floor((status.uptime % 60000) / 1000);
|
|
141
|
+
console.log(` Uptime: ${minutes}m ${seconds}s`);
|
|
142
|
+
}
|
|
143
|
+
console.log('\n💡 Use "xopcbot gateway restart" to restart');
|
|
144
|
+
console.log('💡 Use "xopcbot gateway stop" to stop');
|
|
145
|
+
console.log('💡 Use "xopcbot gateway status" to check status');
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
const processConfig = {
|
|
149
|
+
host: options.host,
|
|
150
|
+
port: parseInt(options.port, 10),
|
|
151
|
+
token: options.token || config?.gateway?.auth?.token,
|
|
152
|
+
configPath: ctx.configPath,
|
|
153
|
+
verbose: ctx.isVerbose,
|
|
154
|
+
background: true,
|
|
155
|
+
logFile: options.logFile,
|
|
156
|
+
enableHotReload: options.hotReload,
|
|
157
|
+
};
|
|
158
|
+
console.log('🚀 Starting gateway in background mode...');
|
|
159
|
+
const result = await manager.start(processConfig);
|
|
160
|
+
if (result.success) {
|
|
161
|
+
const host = options.host === '0.0.0.0' ? 'localhost' : options.host;
|
|
162
|
+
const token = processConfig.token;
|
|
163
|
+
console.log('✅ Gateway started successfully');
|
|
164
|
+
console.log(` PID: ${result.pid}`);
|
|
165
|
+
console.log(` Host: ${options.host}`);
|
|
166
|
+
console.log(` Port: ${options.port}`);
|
|
167
|
+
console.log('');
|
|
168
|
+
console.log('🌐 WebUI Access:');
|
|
169
|
+
console.log(` URL: http://${host}:${options.port}`);
|
|
170
|
+
if (token) {
|
|
171
|
+
console.log(` Token: ${token.slice(0, 8)}...${token.slice(-8)}`);
|
|
172
|
+
console.log(` Direct URL: http://${host}:${options.port}?token=${token}`);
|
|
173
|
+
}
|
|
174
|
+
console.log('');
|
|
175
|
+
console.log('📝 Management Commands:');
|
|
176
|
+
console.log(' xopcbot gateway status # Check status');
|
|
177
|
+
console.log(' xopcbot gateway stop # Stop gateway');
|
|
178
|
+
console.log(' xopcbot gateway restart # Restart gateway');
|
|
179
|
+
console.log(' xopcbot gateway logs # View logs');
|
|
180
|
+
const logFile = manager.getLogFile();
|
|
181
|
+
console.log(` Log file: ${logFile}`);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
console.error('❌ Failed to start gateway');
|
|
185
|
+
if (result.portInUse) {
|
|
186
|
+
console.error('\n' + result.error);
|
|
187
|
+
}
|
|
188
|
+
else if (result.error) {
|
|
189
|
+
console.error(` ${result.error}`);
|
|
190
|
+
}
|
|
191
|
+
process.exit(1);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Start gateway in foreground mode (traditional)
|
|
196
|
+
*/
|
|
197
|
+
async function startForegroundMode(options, ctx, config) {
|
|
198
|
+
const server = new GatewayServer({
|
|
199
|
+
host: options.host,
|
|
200
|
+
port: parseInt(options.port, 10),
|
|
201
|
+
token: options.token || config?.gateway?.auth?.token,
|
|
202
|
+
verbose: ctx.isVerbose,
|
|
203
|
+
configPath: ctx.configPath,
|
|
204
|
+
enableHotReload: options.hotReload,
|
|
205
|
+
});
|
|
206
|
+
let shuttingDown = false;
|
|
207
|
+
const shutdown = async (signal) => {
|
|
208
|
+
if (shuttingDown)
|
|
209
|
+
return;
|
|
210
|
+
shuttingDown = true;
|
|
211
|
+
console.log(`\n🛑 Received ${signal}, shutting down...`);
|
|
212
|
+
// Force exit after 5 seconds if graceful shutdown fails
|
|
213
|
+
const forceExit = setTimeout(() => {
|
|
214
|
+
console.log('⚠️ Force exiting...');
|
|
215
|
+
process.exit(1);
|
|
216
|
+
}, 5000);
|
|
217
|
+
try {
|
|
218
|
+
await server.stop();
|
|
219
|
+
clearTimeout(forceExit);
|
|
220
|
+
console.log('✅ Gateway stopped');
|
|
221
|
+
process.exit(0);
|
|
222
|
+
}
|
|
223
|
+
catch (err) {
|
|
224
|
+
clearTimeout(forceExit);
|
|
225
|
+
console.error('❌ Error during shutdown:', err);
|
|
226
|
+
process.exit(1);
|
|
227
|
+
}
|
|
228
|
+
};
|
|
229
|
+
process.on('SIGINT', () => shutdown('SIGINT'));
|
|
230
|
+
process.on('SIGTERM', () => shutdown('SIGTERM'));
|
|
231
|
+
// Handle uncaught errors
|
|
232
|
+
process.on('uncaughtException', (err) => {
|
|
233
|
+
log.error({ err }, 'Uncaught exception');
|
|
234
|
+
shutdown('uncaughtException');
|
|
235
|
+
});
|
|
236
|
+
process.on('unhandledRejection', (reason) => {
|
|
237
|
+
log.error({ reason }, 'Unhandled rejection');
|
|
238
|
+
});
|
|
239
|
+
if (ctx.isVerbose) {
|
|
240
|
+
log.info({ host: options.host, port: options.port }, 'Starting gateway');
|
|
241
|
+
}
|
|
242
|
+
try {
|
|
243
|
+
await server.start();
|
|
244
|
+
}
|
|
245
|
+
catch (error) {
|
|
246
|
+
log.error({ err: error }, 'Failed to start gateway');
|
|
247
|
+
process.exit(1);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Create status subcommand
|
|
252
|
+
*/
|
|
253
|
+
function createStatusCommand() {
|
|
254
|
+
return new Command('status')
|
|
255
|
+
.description('Check gateway status')
|
|
256
|
+
.action(() => {
|
|
257
|
+
const manager = new GatewayProcessManager();
|
|
258
|
+
const status = manager.getStatus();
|
|
259
|
+
if (!status.running) {
|
|
260
|
+
console.log('⚠️ Gateway is not running');
|
|
261
|
+
console.log('\n💡 Start with: xopcbot gateway --background');
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
console.log('✅ Gateway is running');
|
|
265
|
+
console.log('');
|
|
266
|
+
console.log(` PID: ${status.pid}`);
|
|
267
|
+
console.log(` Host: ${status.host}`);
|
|
268
|
+
console.log(` Port: ${status.port}`);
|
|
269
|
+
if (status.uptime) {
|
|
270
|
+
const minutes = Math.floor(status.uptime / 60000);
|
|
271
|
+
const seconds = Math.floor((status.uptime % 60000) / 1000);
|
|
272
|
+
console.log(` Uptime: ${minutes}m ${seconds}s`);
|
|
273
|
+
}
|
|
274
|
+
if (status.health) {
|
|
275
|
+
console.log(` Health: ${status.health}`);
|
|
276
|
+
}
|
|
277
|
+
console.log('');
|
|
278
|
+
console.log('🌐 Access:');
|
|
279
|
+
const host = status.host === '0.0.0.0' ? 'localhost' : status.host;
|
|
280
|
+
console.log(` URL: http://${host}:${status.port}`);
|
|
281
|
+
// Load config to show token info
|
|
282
|
+
const ctx = getContextWithOpts();
|
|
283
|
+
const config = loadConfig(ctx.configPath);
|
|
284
|
+
const token = config?.gateway?.auth?.token;
|
|
285
|
+
if (token) {
|
|
286
|
+
console.log(` Token: ${token.slice(0, 8)}...${token.slice(-8)}`);
|
|
287
|
+
console.log(` Direct: http://${host}:${status.port}?token=${token}`);
|
|
288
|
+
}
|
|
289
|
+
console.log('');
|
|
290
|
+
console.log('📝 Management:');
|
|
291
|
+
console.log(' xopcbot gateway stop # Stop gateway');
|
|
292
|
+
console.log(' xopcbot gateway restart # Restart gateway');
|
|
293
|
+
console.log(' xopcbot gateway logs # View logs');
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Create stop subcommand
|
|
298
|
+
*/
|
|
299
|
+
function createStopCommand() {
|
|
300
|
+
return new Command('stop')
|
|
301
|
+
.description('Stop running gateway')
|
|
302
|
+
.option('--force', 'Force kill immediately')
|
|
303
|
+
.option('--timeout <ms>', 'Timeout before force kill', '5000')
|
|
304
|
+
.action(async (options) => {
|
|
305
|
+
const manager = new GatewayProcessManager();
|
|
306
|
+
if (!manager.isRunning()) {
|
|
307
|
+
console.log('ℹ️ Gateway is not running');
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
console.log('🛑 Stopping gateway...');
|
|
311
|
+
const result = await manager.stop({
|
|
312
|
+
force: options.force,
|
|
313
|
+
timeout: parseInt(options.timeout, 10),
|
|
63
314
|
});
|
|
64
|
-
if (
|
|
65
|
-
log
|
|
315
|
+
if (result.success) {
|
|
316
|
+
console.log('✅ Gateway stopped');
|
|
317
|
+
if (result.wasRunning === false) {
|
|
318
|
+
console.log('ℹ️ Gateway was not running');
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
else {
|
|
322
|
+
console.error('❌ Failed to stop gateway');
|
|
323
|
+
if (result.error) {
|
|
324
|
+
console.error(` ${result.error}`);
|
|
325
|
+
}
|
|
326
|
+
process.exit(1);
|
|
66
327
|
}
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Create restart subcommand
|
|
332
|
+
*/
|
|
333
|
+
function createRestartCommand() {
|
|
334
|
+
return new Command('restart')
|
|
335
|
+
.description('Restart gateway')
|
|
336
|
+
.option('--host <address>', 'Host to bind to')
|
|
337
|
+
.option('--port <number>', 'Port to listen on')
|
|
338
|
+
.action(async (options) => {
|
|
339
|
+
const ctx = getContextWithOpts();
|
|
340
|
+
const config = loadConfig(ctx.configPath);
|
|
341
|
+
const manager = new GatewayProcessManager();
|
|
342
|
+
// Load existing config or use defaults
|
|
343
|
+
const processConfig = {
|
|
344
|
+
host: options.host || config?.gateway?.host || '0.0.0.0',
|
|
345
|
+
port: parseInt(options.port || config?.gateway?.port || '18790', 10),
|
|
346
|
+
token: config?.gateway?.auth?.token,
|
|
347
|
+
configPath: ctx.configPath,
|
|
348
|
+
background: true,
|
|
349
|
+
enableHotReload: true,
|
|
350
|
+
};
|
|
351
|
+
console.log('🔄 Restarting gateway...');
|
|
67
352
|
try {
|
|
68
|
-
await
|
|
353
|
+
await manager.restart(processConfig);
|
|
354
|
+
console.log('✅ Gateway restarted successfully');
|
|
355
|
+
const status = manager.getStatus();
|
|
356
|
+
if (status.pid) {
|
|
357
|
+
console.log(` PID: ${status.pid}`);
|
|
358
|
+
}
|
|
359
|
+
const host = processConfig.host === '0.0.0.0' ? 'localhost' : processConfig.host;
|
|
360
|
+
console.log(` URL: http://${host}:${processConfig.port}`);
|
|
69
361
|
}
|
|
70
362
|
catch (error) {
|
|
71
|
-
|
|
363
|
+
console.error('❌ Failed to restart gateway');
|
|
364
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
365
|
+
console.error(` ${errorMsg}`);
|
|
72
366
|
process.exit(1);
|
|
73
367
|
}
|
|
74
368
|
});
|
|
75
|
-
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Create logs subcommand
|
|
372
|
+
*/
|
|
373
|
+
function createLogsCommand() {
|
|
374
|
+
return new Command('logs')
|
|
375
|
+
.description('View gateway logs')
|
|
376
|
+
.option('--lines <n>', 'Number of lines to show', '50')
|
|
377
|
+
.option('--follow', 'Follow log output (like tail -f)')
|
|
378
|
+
.action(async (options) => {
|
|
379
|
+
const manager = new GatewayProcessManager();
|
|
380
|
+
const logFile = manager.getLogFile();
|
|
381
|
+
if (!manager.isRunning()) {
|
|
382
|
+
console.log('⚠️ Gateway is not running');
|
|
383
|
+
}
|
|
384
|
+
console.log(`📄 Log file: ${logFile}`);
|
|
385
|
+
console.log('');
|
|
386
|
+
const logs = await manager.getLogs({ lines: parseInt(options.lines, 10) });
|
|
387
|
+
if (!logs) {
|
|
388
|
+
console.log('ℹ️ No logs available');
|
|
389
|
+
return;
|
|
390
|
+
}
|
|
391
|
+
console.log(logs);
|
|
392
|
+
if (options.follow) {
|
|
393
|
+
console.log('\nℹ️ Follow mode: Use Ctrl+C to exit');
|
|
394
|
+
// Simple follow implementation
|
|
395
|
+
const { exec } = await import('child_process');
|
|
396
|
+
const cmd = process.platform === 'win32'
|
|
397
|
+
? `powershell -Command "Get-Content '${logFile}' -Wait"`
|
|
398
|
+
: `tail -f "${logFile}"`;
|
|
399
|
+
const child = exec(cmd);
|
|
400
|
+
child.stdout?.on('data', (data) => {
|
|
401
|
+
process.stdout.write(data.toString());
|
|
402
|
+
});
|
|
403
|
+
child.stderr?.on('data', (data) => {
|
|
404
|
+
process.stderr.write(data.toString());
|
|
405
|
+
});
|
|
406
|
+
process.on('SIGINT', () => {
|
|
407
|
+
child.kill();
|
|
408
|
+
process.exit(0);
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
});
|
|
76
412
|
}
|
|
77
413
|
register({
|
|
78
414
|
id: 'gateway',
|
|
@@ -84,7 +420,13 @@ register({
|
|
|
84
420
|
examples: [
|
|
85
421
|
'xopcbot gateway',
|
|
86
422
|
'xopcbot gateway --port 8080',
|
|
87
|
-
'xopcbot gateway --
|
|
423
|
+
'xopcbot gateway --background',
|
|
424
|
+
'xopcbot gateway status',
|
|
425
|
+
'xopcbot gateway stop',
|
|
426
|
+
'xopcbot gateway restart',
|
|
427
|
+
'xopcbot gateway logs',
|
|
428
|
+
'xopcbot gateway token',
|
|
429
|
+
'xopcbot gateway token --generate',
|
|
88
430
|
],
|
|
89
431
|
},
|
|
90
432
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../../src/cli/commands/gateway.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../../src/cli/commands/gateway.ts"],"names":[],"mappings":"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"}
|