@edgible-team/cli 1.2.4 → 1.2.8
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/commands/agent/agent-handlers.d.ts +45 -0
- package/dist/commands/agent/agent-handlers.d.ts.map +1 -0
- package/dist/commands/agent/agent-handlers.js +1159 -0
- package/dist/commands/agent/install.d.ts +11 -0
- package/dist/commands/agent/install.d.ts.map +1 -0
- package/dist/commands/agent/install.js +399 -0
- package/dist/commands/agent/logs.d.ts +12 -0
- package/dist/commands/agent/logs.d.ts.map +1 -0
- package/dist/commands/agent/logs.js +77 -0
- package/dist/commands/agent/restart.d.ts +4 -0
- package/dist/commands/agent/restart.d.ts.map +1 -0
- package/dist/commands/agent/restart.js +33 -0
- package/dist/commands/agent/set-log-level.d.ts +8 -0
- package/dist/commands/agent/set-log-level.d.ts.map +1 -0
- package/dist/commands/agent/set-log-level.js +133 -0
- package/dist/commands/agent/setup.d.ts +9 -0
- package/dist/commands/agent/setup.d.ts.map +1 -0
- package/dist/commands/agent/setup.js +149 -0
- package/dist/commands/agent/start.d.ts +12 -0
- package/dist/commands/agent/start.d.ts.map +1 -0
- package/dist/commands/agent/start.js +308 -0
- package/dist/commands/agent/status.d.ts +7 -0
- package/dist/commands/agent/status.d.ts.map +1 -0
- package/dist/commands/agent/status.js +68 -0
- package/dist/commands/agent/stop.d.ts +4 -0
- package/dist/commands/agent/stop.d.ts.map +1 -0
- package/dist/commands/agent/stop.js +33 -0
- package/dist/commands/agent/uninstall.d.ts +7 -0
- package/dist/commands/agent/uninstall.d.ts.map +1 -0
- package/dist/commands/agent/uninstall.js +168 -0
- package/dist/commands/agent.d.ts.map +1 -1
- package/dist/commands/agent.js +24 -1190
- package/dist/commands/ai/helpers.d.ts +139 -0
- package/dist/commands/ai/helpers.d.ts.map +1 -0
- package/dist/commands/ai/helpers.js +1470 -0
- package/dist/commands/ai/serve.d.ts +6 -0
- package/dist/commands/ai/serve.d.ts.map +1 -0
- package/dist/commands/ai/serve.js +124 -0
- package/dist/commands/ai/setup.d.ts +14 -0
- package/dist/commands/ai/setup.d.ts.map +1 -0
- package/dist/commands/ai/setup.js +86 -0
- package/dist/commands/ai/status.d.ts +2 -0
- package/dist/commands/ai/status.d.ts.map +1 -0
- package/dist/commands/ai/status.js +160 -0
- package/dist/commands/ai/stop.d.ts +2 -0
- package/dist/commands/ai/stop.d.ts.map +1 -0
- package/dist/commands/ai/stop.js +21 -0
- package/dist/commands/ai/teardown.d.ts +5 -0
- package/dist/commands/ai/teardown.d.ts.map +1 -0
- package/dist/commands/ai/teardown.js +78 -0
- package/dist/commands/ai/test.d.ts +4 -0
- package/dist/commands/ai/test.d.ts.map +1 -0
- package/dist/commands/ai/test.js +65 -0
- package/dist/commands/ai.d.ts.map +1 -1
- package/dist/commands/ai.js +16 -1938
- package/dist/commands/application/api-keys/create.d.ts +6 -0
- package/dist/commands/application/api-keys/create.d.ts.map +1 -0
- package/dist/commands/application/api-keys/create.js +68 -0
- package/dist/commands/application/api-keys/delete.d.ts +6 -0
- package/dist/commands/application/api-keys/delete.d.ts.map +1 -0
- package/dist/commands/application/api-keys/delete.js +79 -0
- package/dist/commands/application/api-keys/list.d.ts +5 -0
- package/dist/commands/application/api-keys/list.d.ts.map +1 -0
- package/dist/commands/application/api-keys/list.js +65 -0
- package/dist/commands/application/api-keys.d.ts +3 -0
- package/dist/commands/application/api-keys.d.ts.map +1 -0
- package/dist/commands/application/api-keys.js +227 -0
- package/dist/commands/application/create-compose.d.ts +3 -0
- package/dist/commands/application/create-compose.d.ts.map +1 -0
- package/dist/commands/application/create-compose.js +381 -0
- package/dist/commands/application/create-docker-compose.d.ts +10 -0
- package/dist/commands/application/create-docker-compose.d.ts.map +1 -0
- package/dist/commands/application/create-docker-compose.js +334 -0
- package/dist/commands/application/create-existing.d.ts +14 -0
- package/dist/commands/application/create-existing.d.ts.map +1 -0
- package/dist/commands/application/create-existing.js +359 -0
- package/dist/commands/application/create-interactive.d.ts +3 -0
- package/dist/commands/application/create-interactive.d.ts.map +1 -0
- package/dist/commands/application/create-interactive.js +326 -0
- package/dist/commands/application/create-managed-process.d.ts +15 -0
- package/dist/commands/application/create-managed-process.d.ts.map +1 -0
- package/dist/commands/application/create-managed-process.js +371 -0
- package/dist/commands/application/create-stubs.d.ts +4 -0
- package/dist/commands/application/create-stubs.d.ts.map +1 -0
- package/dist/commands/application/create-stubs.js +19 -0
- package/dist/commands/application/create-workload.d.ts +5 -0
- package/dist/commands/application/create-workload.d.ts.map +1 -0
- package/dist/commands/application/create-workload.js +48 -0
- package/dist/commands/application/delete.d.ts +6 -0
- package/dist/commands/application/delete.d.ts.map +1 -0
- package/dist/commands/application/delete.js +76 -0
- package/dist/commands/application/get.d.ts +5 -0
- package/dist/commands/application/get.d.ts.map +1 -0
- package/dist/commands/application/get.js +35 -0
- package/dist/commands/application/list.d.ts +4 -0
- package/dist/commands/application/list.d.ts.map +1 -0
- package/dist/commands/application/list.js +41 -0
- package/dist/commands/application/short-codes/create.d.ts +7 -0
- package/dist/commands/application/short-codes/create.d.ts.map +1 -0
- package/dist/commands/application/short-codes/create.js +69 -0
- package/dist/commands/application/short-codes/delete.d.ts +6 -0
- package/dist/commands/application/short-codes/delete.d.ts.map +1 -0
- package/dist/commands/application/short-codes/delete.js +79 -0
- package/dist/commands/application/short-codes/list.d.ts +5 -0
- package/dist/commands/application/short-codes/list.d.ts.map +1 -0
- package/dist/commands/application/short-codes/list.js +63 -0
- package/dist/commands/application/short-codes/toggle.d.ts +5 -0
- package/dist/commands/application/short-codes/toggle.d.ts.map +1 -0
- package/dist/commands/application/short-codes/toggle.js +71 -0
- package/dist/commands/application/short-codes.d.ts +3 -0
- package/dist/commands/application/short-codes.d.ts.map +1 -0
- package/dist/commands/application/short-codes.js +226 -0
- package/dist/commands/application/toggle.d.ts +2 -0
- package/dist/commands/application/toggle.d.ts.map +1 -0
- package/dist/commands/application/toggle.js +78 -0
- package/dist/commands/application/update.d.ts +4 -0
- package/dist/commands/application/update.d.ts.map +1 -0
- package/dist/commands/application/update.js +11 -0
- package/dist/commands/application.d.ts.map +1 -1
- package/dist/commands/application.js +32 -1630
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +31 -49
- package/dist/commands/base/BaseCommand.d.ts +3 -3
- package/dist/commands/base/BaseCommand.d.ts.map +1 -1
- package/dist/commands/base/BaseCommand.js +3 -3
- package/dist/commands/base/command-wrapper.d.ts +0 -4
- package/dist/commands/base/command-wrapper.d.ts.map +1 -1
- package/dist/commands/base/command-wrapper.js +13 -14
- package/dist/commands/base/middleware.d.ts +3 -3
- package/dist/commands/base/middleware.d.ts.map +1 -1
- package/dist/commands/base/middleware.js +4 -4
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +15 -32
- package/dist/commands/connectivity.d.ts.map +1 -1
- package/dist/commands/connectivity.js +6 -11
- package/dist/commands/debug.d.ts.map +1 -1
- package/dist/commands/debug.js +187 -46
- package/dist/commands/discover.d.ts.map +1 -1
- package/dist/commands/discover.js +4 -17
- package/dist/commands/gateway.d.ts.map +1 -1
- package/dist/commands/gateway.js +37 -77
- package/dist/commands/managedGateway/create.d.ts +6 -0
- package/dist/commands/managedGateway/create.d.ts.map +1 -0
- package/dist/commands/managedGateway/create.js +50 -0
- package/dist/commands/managedGateway/delete.d.ts +5 -0
- package/dist/commands/managedGateway/delete.d.ts.map +1 -0
- package/dist/commands/managedGateway/delete.js +57 -0
- package/dist/commands/managedGateway/get.d.ts +4 -0
- package/dist/commands/managedGateway/get.d.ts.map +1 -0
- package/dist/commands/managedGateway/get.js +71 -0
- package/dist/commands/managedGateway/haproxy-stats.d.ts +6 -0
- package/dist/commands/managedGateway/haproxy-stats.d.ts.map +1 -0
- package/dist/commands/managedGateway/haproxy-stats.js +131 -0
- package/dist/commands/managedGateway/list.d.ts +4 -0
- package/dist/commands/managedGateway/list.d.ts.map +1 -0
- package/dist/commands/managedGateway/list.js +50 -0
- package/dist/commands/managedGateway/logs.d.ts +10 -0
- package/dist/commands/managedGateway/logs.d.ts.map +1 -0
- package/dist/commands/managedGateway/logs.js +100 -0
- package/dist/commands/managedGateway/reboot.d.ts +5 -0
- package/dist/commands/managedGateway/reboot.d.ts.map +1 -0
- package/dist/commands/managedGateway/reboot.js +95 -0
- package/dist/commands/managedGateway/resync.d.ts +10 -0
- package/dist/commands/managedGateway/resync.d.ts.map +1 -0
- package/dist/commands/managedGateway/resync.js +69 -0
- package/dist/commands/managedGateway/ssh.d.ts +4 -0
- package/dist/commands/managedGateway/ssh.d.ts.map +1 -0
- package/dist/commands/managedGateway/ssh.js +130 -0
- package/dist/commands/managedGateway/wipe-logs.d.ts +4 -0
- package/dist/commands/managedGateway/wipe-logs.d.ts.map +1 -0
- package/dist/commands/managedGateway/wipe-logs.js +67 -0
- package/dist/commands/managedGateway/wireguard.d.ts +4 -0
- package/dist/commands/managedGateway/wireguard.d.ts.map +1 -0
- package/dist/commands/managedGateway/wireguard.js +68 -0
- package/dist/commands/managedGateway.d.ts.map +1 -1
- package/dist/commands/managedGateway.js +61 -117
- package/dist/commands/utils/config-validator.d.ts +5 -5
- package/dist/commands/utils/config-validator.d.ts.map +1 -1
- package/dist/commands/utils/config-validator.js +8 -8
- package/dist/commands/utils/output-formatter.js +1 -1
- package/dist/config/app-config.d.ts +1 -1
- package/dist/config/app-config.js +2 -2
- package/dist/index.js +0 -3
- package/dist/services/LocalAgentManager.d.ts.map +1 -1
- package/dist/services/LocalAgentManager.js +4 -2
- package/dist/services/agentDeployment/AgentDeploymentService.d.ts +35 -0
- package/dist/services/agentDeployment/AgentDeploymentService.d.ts.map +1 -0
- package/dist/services/agentDeployment/AgentDeploymentService.js +35 -0
- package/dist/services/application/ApplicationService.d.ts +5 -4
- package/dist/services/application/ApplicationService.d.ts.map +1 -1
- package/dist/services/application/ApplicationService.js +22 -35
- package/dist/services/auth/AuthService.d.ts +5 -5
- package/dist/services/auth/AuthService.d.ts.map +1 -1
- package/dist/services/auth/AuthService.js +11 -58
- package/dist/services/daemon/DaemonManagerFactory.d.ts +2 -0
- package/dist/services/daemon/DaemonManagerFactory.d.ts.map +1 -1
- package/dist/services/daemon/DaemonManagerFactory.js +14 -6
- package/dist/services/diagnostics/DiagnosticsService.d.ts +89 -0
- package/dist/services/diagnostics/DiagnosticsService.d.ts.map +1 -0
- package/dist/services/diagnostics/DiagnosticsService.js +37 -0
- package/dist/services/edgible.d.ts +6 -4
- package/dist/services/edgible.d.ts.map +1 -1
- package/dist/services/edgible.js +36 -86
- package/dist/services/gateway/GatewayService.d.ts +5 -6
- package/dist/services/gateway/GatewayService.d.ts.map +1 -1
- package/dist/services/gateway/GatewayService.js +22 -36
- package/dist/services/instances.d.ts +34 -0
- package/dist/services/instances.d.ts.map +1 -0
- package/dist/services/instances.js +64 -0
- package/dist/services/managedGateway/ManagedGatewayService.d.ts +75 -0
- package/dist/services/managedGateway/ManagedGatewayService.d.ts.map +1 -0
- package/dist/services/managedGateway/ManagedGatewayService.js +44 -0
- package/dist/services/token/TokenManager.d.ts +56 -0
- package/dist/services/token/TokenManager.d.ts.map +1 -0
- package/dist/services/token/TokenManager.js +85 -0
- package/dist/types/validation/schemas.d.ts +22 -22
- package/dist/utils/PlatformDetector.d.ts +2 -0
- package/dist/utils/PlatformDetector.d.ts.map +1 -1
- package/dist/utils/PlatformDetector.js +5 -34
- package/dist/validation/schemas.d.ts +6 -6
- package/package.json +1 -1
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.handleAgentSetLogLevel = handleAgentSetLogLevel;
|
|
40
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
41
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const fsPromises = __importStar(require("fs/promises"));
|
|
44
|
+
const DaemonManagerFactory_1 = require("../../services/daemon/DaemonManagerFactory");
|
|
45
|
+
const PathResolver_1 = require("../../utils/PathResolver");
|
|
46
|
+
async function handleAgentSetLogLevel(options, logger, configManager, agentManager) {
|
|
47
|
+
const validLevels = ['debug', 'info', 'warn', 'error'];
|
|
48
|
+
let logLevel;
|
|
49
|
+
if (options.level) {
|
|
50
|
+
const level = options.level.toLowerCase();
|
|
51
|
+
if (!validLevels.includes(level)) {
|
|
52
|
+
console.error(chalk_1.default.red(`✗ Invalid log level: ${options.level}`));
|
|
53
|
+
console.error(chalk_1.default.red(` Valid levels are: ${validLevels.join(', ')}\n`));
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
logLevel = level;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
// Interactive selection
|
|
60
|
+
const { selectedLevel } = await inquirer_1.default.prompt([
|
|
61
|
+
{
|
|
62
|
+
type: 'list',
|
|
63
|
+
name: 'selectedLevel',
|
|
64
|
+
message: 'Select log level:',
|
|
65
|
+
choices: validLevels.map(level => ({
|
|
66
|
+
name: level.charAt(0).toUpperCase() + level.slice(1),
|
|
67
|
+
value: level
|
|
68
|
+
})),
|
|
69
|
+
default: 'info'
|
|
70
|
+
}
|
|
71
|
+
]);
|
|
72
|
+
logLevel = selectedLevel;
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
// Determine the correct config file path based on installation type
|
|
76
|
+
const userConfig = configManager.getConfig();
|
|
77
|
+
const configFilePath = PathResolver_1.PathResolver.resolveAgentConfigFilePath(userConfig.agentInstallationType);
|
|
78
|
+
if (!fs.existsSync(configFilePath)) {
|
|
79
|
+
console.error(chalk_1.default.red('✗ Agent configuration file not found'));
|
|
80
|
+
console.error(chalk_1.default.red(` Expected at: ${configFilePath}`));
|
|
81
|
+
console.error(chalk_1.default.red(' Run "edgible agent install" to install the agent first\n'));
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const configData = await fsPromises.readFile(configFilePath, 'utf8');
|
|
85
|
+
const agentConfig = JSON.parse(configData);
|
|
86
|
+
// Check if log level is already set to this value
|
|
87
|
+
if (agentConfig.logLevel === logLevel) {
|
|
88
|
+
console.log(chalk_1.default.yellow(`⚠ Log level is already set to: ${logLevel}\n`));
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
// Update log level
|
|
92
|
+
agentConfig.logLevel = logLevel;
|
|
93
|
+
// Write back to file
|
|
94
|
+
await fsPromises.writeFile(configFilePath, JSON.stringify(agentConfig, null, 2), 'utf8');
|
|
95
|
+
logger.info('Agent log level updated', { logLevel, configFilePath });
|
|
96
|
+
console.log(chalk_1.default.green(`✓ Log level set to: ${logLevel}`));
|
|
97
|
+
console.log(chalk_1.default.gray(` Updated: ${configFilePath}\n`));
|
|
98
|
+
// Restart agent if it's installed and running (unless --no-restart is specified)
|
|
99
|
+
const shouldRestart = options.restart !== false && userConfig.agentInstallationType;
|
|
100
|
+
if (shouldRestart && userConfig.agentInstallationType) {
|
|
101
|
+
try {
|
|
102
|
+
const daemonManager = DaemonManagerFactory_1.DaemonManagerFactory.fromConfig(userConfig.agentInstallationType);
|
|
103
|
+
if (daemonManager) {
|
|
104
|
+
const status = await daemonManager.status();
|
|
105
|
+
if (status.running) {
|
|
106
|
+
console.log(chalk_1.default.gray('\nRestarting agent to apply new log level...'));
|
|
107
|
+
await daemonManager.restart();
|
|
108
|
+
console.log(chalk_1.default.green('✓ Agent restarted\n'));
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
console.log(chalk_1.default.gray('\nAgent is not running. Start it with "edgible agent start" to apply the new log level.\n'));
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch (restartError) {
|
|
116
|
+
console.warn(chalk_1.default.yellow('⚠ Could not restart agent automatically'));
|
|
117
|
+
console.warn(chalk_1.default.yellow(` ${restartError instanceof Error ? restartError.message : String(restartError)}`));
|
|
118
|
+
console.log(chalk_1.default.gray('\nPlease restart the agent manually for the log level change to take effect.\n'));
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
console.log(chalk_1.default.gray('\nRestart the agent for the log level change to take effect:\n'));
|
|
123
|
+
console.log(chalk_1.default.gray(' edgible agent restart\n'));
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
logger.error('Failed to update log level', error);
|
|
128
|
+
console.error(chalk_1.default.red('✗ Failed to update log level'));
|
|
129
|
+
console.error(chalk_1.default.red(` ${error instanceof Error ? error.message : String(error)}\n`));
|
|
130
|
+
throw error;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=set-log-level.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Logger } from '../../utils/logger';
|
|
2
|
+
import { ConfigManager } from '../../state/config';
|
|
3
|
+
import { LocalAgentManager } from '../../services/LocalAgentManager';
|
|
4
|
+
export declare function handleAgentSetup(options: {
|
|
5
|
+
wireguardMode?: string;
|
|
6
|
+
wireguardGoBinary?: string;
|
|
7
|
+
autoInstall?: boolean;
|
|
8
|
+
}, logger: Logger, configManager: ConfigManager, agentManager: LocalAgentManager): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/setup.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAIrE,wBAAsB,gBAAgB,CACpC,OAAO,EAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,EACtF,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,iBAAiB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAiHf"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.handleAgentSetup = handleAgentSetup;
|
|
40
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
41
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
42
|
+
const os = __importStar(require("os"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const fsPromises = __importStar(require("fs/promises"));
|
|
45
|
+
const DependencyInstaller_1 = require("../../services/DependencyInstaller");
|
|
46
|
+
const urls_1 = require("../../utils/urls");
|
|
47
|
+
async function handleAgentSetup(options, logger, configManager, agentManager) {
|
|
48
|
+
logger.info('Setting up agent dependencies and configuration');
|
|
49
|
+
console.log(chalk_1.default.blue('\n🔧 Agent Setup'));
|
|
50
|
+
console.log(chalk_1.default.gray('This will check and install dependencies, then configure the agent.\n'));
|
|
51
|
+
// Step 1: Check and install dependencies
|
|
52
|
+
console.log(chalk_1.default.blue('Step 1: Checking dependencies...\n'));
|
|
53
|
+
const dependencyInstaller = new DependencyInstaller_1.DependencyInstaller();
|
|
54
|
+
// Determine if we should check for wireguard-go based on mode
|
|
55
|
+
const wireguardMode = (options.wireguardMode || 'kernel').toLowerCase();
|
|
56
|
+
const includeWireGuardGo = wireguardMode === 'userspace';
|
|
57
|
+
await dependencyInstaller.checkAndInstallDependencies({
|
|
58
|
+
includeWireGuardGo,
|
|
59
|
+
includeIptables: true,
|
|
60
|
+
autoInstall: options.autoInstall || false
|
|
61
|
+
});
|
|
62
|
+
console.log(chalk_1.default.green('\n✓ Dependencies check complete\n'));
|
|
63
|
+
// Step 2: Configure WireGuard mode
|
|
64
|
+
let selectedMode = wireguardMode;
|
|
65
|
+
if (!options.wireguardMode) {
|
|
66
|
+
// Prompt user for WireGuard mode if not provided
|
|
67
|
+
const { mode } = await inquirer_1.default.prompt([
|
|
68
|
+
{
|
|
69
|
+
type: 'list',
|
|
70
|
+
name: 'mode',
|
|
71
|
+
message: 'Select WireGuard implementation mode:',
|
|
72
|
+
choices: [
|
|
73
|
+
{
|
|
74
|
+
name: 'Kernel (default, requires kernel module support)',
|
|
75
|
+
value: 'kernel'
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
name: 'Userspace (wireguard-go, works without kernel module)',
|
|
79
|
+
value: 'userspace'
|
|
80
|
+
}
|
|
81
|
+
],
|
|
82
|
+
default: 'kernel'
|
|
83
|
+
}
|
|
84
|
+
]);
|
|
85
|
+
selectedMode = mode;
|
|
86
|
+
}
|
|
87
|
+
// Step 3: Update CLI config with WireGuard settings
|
|
88
|
+
const currentConfig = configManager.getConfig();
|
|
89
|
+
configManager.updateConfig({
|
|
90
|
+
wireguardMode: selectedMode,
|
|
91
|
+
wireguardGoBinary: options.wireguardGoBinary || 'wireguard-go'
|
|
92
|
+
});
|
|
93
|
+
console.log(chalk_1.default.green(`✓ WireGuard mode set to: ${selectedMode}`));
|
|
94
|
+
if (selectedMode === 'userspace') {
|
|
95
|
+
console.log(chalk_1.default.gray(` wireguard-go binary: ${options.wireguardGoBinary || 'wireguard-go'}`));
|
|
96
|
+
}
|
|
97
|
+
// Step 4: Update agent config
|
|
98
|
+
console.log(chalk_1.default.blue('\nStep 2: Updating agent configuration...\n'));
|
|
99
|
+
// Check if device credentials exist
|
|
100
|
+
if (!currentConfig.deviceId || !currentConfig.devicePassword) {
|
|
101
|
+
console.log(chalk_1.default.yellow('⚠ No device credentials found in CLI config.'));
|
|
102
|
+
console.log(chalk_1.default.yellow('⚠ You will need to run "edgible agent start" to set up device credentials.'));
|
|
103
|
+
console.log(chalk_1.default.yellow('⚠ The agent config will be created with default values.\n'));
|
|
104
|
+
}
|
|
105
|
+
try {
|
|
106
|
+
await agentManager.updateAgentConfig();
|
|
107
|
+
console.log(chalk_1.default.green('✓ Agent configuration updated\n'));
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
// If update fails due to missing credentials, create a basic config
|
|
111
|
+
if (error instanceof Error && error.message.includes('No device credentials')) {
|
|
112
|
+
console.log(chalk_1.default.yellow('⚠ Creating agent config with default values (device credentials will be set when you start the agent)\n'));
|
|
113
|
+
// Create a basic config file
|
|
114
|
+
const agentConfigPath = path.join(os.homedir(), '.edgible', 'agent', 'agent.config.json');
|
|
115
|
+
const defaultConfig = {
|
|
116
|
+
deviceId: 'your-device-id',
|
|
117
|
+
devicePassword: 'your-device-password',
|
|
118
|
+
deviceType: 'serving',
|
|
119
|
+
apiBaseUrl: (0, urls_1.getApiBaseUrl)(),
|
|
120
|
+
organizationId: currentConfig.organizationId,
|
|
121
|
+
firewallEnabled: true,
|
|
122
|
+
pollingInterval: 60000,
|
|
123
|
+
healthCheckTimeout: 5000,
|
|
124
|
+
maxRetries: 3,
|
|
125
|
+
logLevel: 'info',
|
|
126
|
+
updateEnabled: true,
|
|
127
|
+
updateCheckInterval: 3600000,
|
|
128
|
+
wireguardMode: selectedMode,
|
|
129
|
+
wireguardGoBinary: options.wireguardGoBinary || 'wireguard-go'
|
|
130
|
+
};
|
|
131
|
+
const configDir = path.dirname(agentConfigPath);
|
|
132
|
+
await fsPromises.mkdir(configDir, { recursive: true });
|
|
133
|
+
await fsPromises.writeFile(agentConfigPath, JSON.stringify(defaultConfig, null, 2));
|
|
134
|
+
console.log(chalk_1.default.green('✓ Agent configuration file created\n'));
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
throw error;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
console.log(chalk_1.default.green('✓ Agent setup complete!\n'));
|
|
141
|
+
console.log(chalk_1.default.blue('Next steps:'));
|
|
142
|
+
console.log(chalk_1.default.gray(' 1. Run "edgible agent start" to start the agent'));
|
|
143
|
+
console.log(chalk_1.default.gray(' 2. The agent will use the configured WireGuard mode'));
|
|
144
|
+
if (selectedMode === 'userspace') {
|
|
145
|
+
console.log(chalk_1.default.gray(' 3. Ensure wireguard-go is available in your PATH'));
|
|
146
|
+
}
|
|
147
|
+
console.log('');
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { LocalAgentManager } from '../../services/LocalAgentManager';
|
|
2
|
+
import { EdgibleService } from '../../services/edgible';
|
|
3
|
+
import { Logger } from '../../utils/logger';
|
|
4
|
+
import { ConfigManager } from '../../state/config';
|
|
5
|
+
import { AuthService } from '../../services/auth/AuthService';
|
|
6
|
+
export declare function handleAgentStart(options: {
|
|
7
|
+
passthrough?: boolean;
|
|
8
|
+
debug?: boolean;
|
|
9
|
+
docker?: boolean;
|
|
10
|
+
root?: boolean;
|
|
11
|
+
}, logger: Logger, configManager: ConfigManager, edgibleService: EdgibleService, authService: AuthService, agentManager: LocalAgentManager): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=start.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/start.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAG9D,wBAAsB,gBAAgB,CACpC,OAAO,EAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,EACrF,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,iBAAiB,GAC9B,OAAO,CAAC,IAAI,CAAC,CA0Rf"}
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.handleAgentStart = handleAgentStart;
|
|
40
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
41
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
42
|
+
const os = __importStar(require("os"));
|
|
43
|
+
const config_validator_1 = require("../utils/config-validator");
|
|
44
|
+
async function handleAgentStart(options, logger, configManager, edgibleService, authService, agentManager) {
|
|
45
|
+
(0, config_validator_1.validateConfig)(configManager, {
|
|
46
|
+
requireAuth: true,
|
|
47
|
+
requireOrganization: true,
|
|
48
|
+
});
|
|
49
|
+
const config = configManager.getConfig();
|
|
50
|
+
let deviceId = config.deviceId;
|
|
51
|
+
let devicePassword = config.devicePassword;
|
|
52
|
+
// Always ask user to select or create a device
|
|
53
|
+
console.log(chalk_1.default.blue('\n🔧 Device Selection'));
|
|
54
|
+
console.log(chalk_1.default.gray('Select which serving device this agent should represent:\n'));
|
|
55
|
+
try {
|
|
56
|
+
// Fetch available serving devices
|
|
57
|
+
const servingDevicesResp = await edgibleService.listServingDevices();
|
|
58
|
+
const servingDevices = servingDevicesResp?.devices || [];
|
|
59
|
+
if (servingDevices.length > 0) {
|
|
60
|
+
// Show list of devices to select from
|
|
61
|
+
const deviceChoices = servingDevices.map((d) => {
|
|
62
|
+
const isCurrentDevice = config.deviceId === d.id;
|
|
63
|
+
const displayName = `${d.name || d.id}${d.description ? ` - ${d.description}` : ''}${isCurrentDevice ? chalk_1.default.gray(' (current)') : ''}`;
|
|
64
|
+
return {
|
|
65
|
+
name: displayName,
|
|
66
|
+
value: d.id
|
|
67
|
+
};
|
|
68
|
+
});
|
|
69
|
+
// Add option to create new device
|
|
70
|
+
deviceChoices.push({
|
|
71
|
+
name: chalk_1.default.cyan('➕ Create new serving device'),
|
|
72
|
+
value: '__create_new__'
|
|
73
|
+
});
|
|
74
|
+
const { selectedDeviceId } = await inquirer_1.default.prompt([{
|
|
75
|
+
type: 'list',
|
|
76
|
+
name: 'selectedDeviceId',
|
|
77
|
+
message: 'Select serving device:',
|
|
78
|
+
choices: deviceChoices,
|
|
79
|
+
default: config.deviceId || undefined
|
|
80
|
+
}]);
|
|
81
|
+
if (selectedDeviceId === '__create_new__') {
|
|
82
|
+
// Create new device
|
|
83
|
+
const deviceNameAnswer = await inquirer_1.default.prompt([{
|
|
84
|
+
type: 'input',
|
|
85
|
+
name: 'deviceName',
|
|
86
|
+
message: 'Enter a name for this device:',
|
|
87
|
+
default: `${os.hostname()}-${os.platform()}`,
|
|
88
|
+
validate: (input) => {
|
|
89
|
+
if (!input.trim()) {
|
|
90
|
+
return 'Device name is required';
|
|
91
|
+
}
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
}]);
|
|
95
|
+
const descriptionAnswer = await inquirer_1.default.prompt([{
|
|
96
|
+
type: 'input',
|
|
97
|
+
name: 'description',
|
|
98
|
+
message: 'Enter device description (optional):',
|
|
99
|
+
default: `Serving device: ${deviceNameAnswer.deviceName}`
|
|
100
|
+
}]);
|
|
101
|
+
console.log(chalk_1.default.gray('\nCreating device...'));
|
|
102
|
+
// Create device via API - password will be generated and returned by the API
|
|
103
|
+
const createResponse = await edgibleService.createServingDevice({
|
|
104
|
+
name: deviceNameAnswer.deviceName.trim(),
|
|
105
|
+
description: descriptionAnswer.description.trim()
|
|
106
|
+
});
|
|
107
|
+
deviceId = createResponse.device.id;
|
|
108
|
+
devicePassword = createResponse.device.password; // Get password from API response
|
|
109
|
+
console.log(chalk_1.default.green(`✓ Device created: ${deviceId}`));
|
|
110
|
+
console.log(chalk_1.default.yellow(`\n⚠ Device Password: ${devicePassword}`));
|
|
111
|
+
console.log(chalk_1.default.yellow('⚠ Please save this password securely! You will need it to login as this device.\n'));
|
|
112
|
+
// Verify device credentials (don't login as device - CLI should use user credentials)
|
|
113
|
+
if (devicePassword && deviceId) {
|
|
114
|
+
const password = devicePassword;
|
|
115
|
+
const id = deviceId;
|
|
116
|
+
console.log(chalk_1.default.gray('Verifying device credentials...'));
|
|
117
|
+
try {
|
|
118
|
+
const isValid = await authService.verifyDeviceCredentials(id, password);
|
|
119
|
+
if (isValid) {
|
|
120
|
+
console.log(chalk_1.default.green('✓ Device credentials verified'));
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
console.log(chalk_1.default.yellow('⚠ Device credentials verification failed, but continuing anyway.'));
|
|
124
|
+
console.log(chalk_1.default.gray('The agent will use these credentials when it starts.'));
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch (verifyError) {
|
|
128
|
+
console.log(chalk_1.default.yellow('⚠ Could not verify device credentials. The agent will use these credentials when it starts.'));
|
|
129
|
+
// Continue anyway - credentials are stored and agent will use them
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// Save device credentials to config
|
|
133
|
+
logger.info('Saving device credentials to config', { deviceId });
|
|
134
|
+
configManager.updateConfig({
|
|
135
|
+
deviceId: deviceId,
|
|
136
|
+
deviceName: deviceNameAnswer.deviceName.trim(),
|
|
137
|
+
devicePassword: devicePassword,
|
|
138
|
+
deviceType: 'serving'
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
// Use existing device - need to get password
|
|
143
|
+
deviceId = selectedDeviceId;
|
|
144
|
+
let passwordVerified = false;
|
|
145
|
+
// Check if we have password for this device in config
|
|
146
|
+
if (config.deviceId === deviceId && config.devicePassword) {
|
|
147
|
+
devicePassword = config.devicePassword;
|
|
148
|
+
// Verify the stored password is still valid (without overwriting user tokens)
|
|
149
|
+
console.log(chalk_1.default.gray('Verifying device credentials...'));
|
|
150
|
+
if (!deviceId || !devicePassword) {
|
|
151
|
+
throw new Error('Device ID or password is missing');
|
|
152
|
+
}
|
|
153
|
+
const isValid = await authService.verifyDeviceCredentials(deviceId, devicePassword);
|
|
154
|
+
if (isValid) {
|
|
155
|
+
console.log(chalk_1.default.green('✓ Device credentials verified'));
|
|
156
|
+
// Update config with current device info (password already stored)
|
|
157
|
+
const selectedDevice = servingDevices.find((d) => d.id === deviceId);
|
|
158
|
+
logger.info('Updating device config', { deviceId });
|
|
159
|
+
configManager.updateConfig({
|
|
160
|
+
deviceId: deviceId,
|
|
161
|
+
deviceName: selectedDevice?.name || deviceId,
|
|
162
|
+
devicePassword: devicePassword,
|
|
163
|
+
deviceType: 'serving'
|
|
164
|
+
});
|
|
165
|
+
passwordVerified = true;
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
console.log(chalk_1.default.yellow('⚠ Stored password is invalid, please enter the device password'));
|
|
169
|
+
devicePassword = undefined; // Clear invalid password
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// If we don't have a valid password yet, prompt for it
|
|
173
|
+
if (!devicePassword) {
|
|
174
|
+
const passwordAnswer = await inquirer_1.default.prompt([{
|
|
175
|
+
type: 'password',
|
|
176
|
+
name: 'password',
|
|
177
|
+
message: 'Enter device password:',
|
|
178
|
+
validate: (input) => {
|
|
179
|
+
if (!input.trim()) {
|
|
180
|
+
return 'Device password is required';
|
|
181
|
+
}
|
|
182
|
+
return true;
|
|
183
|
+
}
|
|
184
|
+
}]);
|
|
185
|
+
devicePassword = passwordAnswer.password;
|
|
186
|
+
}
|
|
187
|
+
// Verify password (in case it was newly entered or verification failed)
|
|
188
|
+
if (!passwordVerified && devicePassword && deviceId) {
|
|
189
|
+
console.log(chalk_1.default.gray('Verifying device credentials...'));
|
|
190
|
+
if (!deviceId || !devicePassword) {
|
|
191
|
+
throw new Error('Device ID or password is missing');
|
|
192
|
+
}
|
|
193
|
+
const isValid = await authService.verifyDeviceCredentials(deviceId, devicePassword);
|
|
194
|
+
if (isValid) {
|
|
195
|
+
console.log(chalk_1.default.green('✓ Device credentials verified'));
|
|
196
|
+
// Save device credentials to config
|
|
197
|
+
const selectedDevice = servingDevices.find((d) => d.id === deviceId);
|
|
198
|
+
logger.info('Saving device credentials to config', { deviceId });
|
|
199
|
+
configManager.updateConfig({
|
|
200
|
+
deviceId: deviceId,
|
|
201
|
+
deviceName: selectedDevice?.name || deviceId,
|
|
202
|
+
devicePassword: devicePassword,
|
|
203
|
+
deviceType: 'serving'
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
console.error(chalk_1.default.red('✗ Invalid device password'));
|
|
208
|
+
console.log(chalk_1.default.gray('Please check your password and try again'));
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
// No devices available, offer to create one
|
|
216
|
+
console.log(chalk_1.default.yellow('⚠ No serving devices found in your organization.\n'));
|
|
217
|
+
const { createNew } = await inquirer_1.default.prompt([{
|
|
218
|
+
type: 'confirm',
|
|
219
|
+
name: 'createNew',
|
|
220
|
+
message: 'Would you like to create a new serving device?',
|
|
221
|
+
default: true
|
|
222
|
+
}]);
|
|
223
|
+
if (!createNew) {
|
|
224
|
+
console.log(chalk_1.default.gray('Agent start cancelled'));
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
// Create new device
|
|
228
|
+
const deviceNameAnswer = await inquirer_1.default.prompt([{
|
|
229
|
+
type: 'input',
|
|
230
|
+
name: 'deviceName',
|
|
231
|
+
message: 'Enter a name for this device:',
|
|
232
|
+
default: `${os.hostname()}-${os.platform()}`,
|
|
233
|
+
validate: (input) => {
|
|
234
|
+
if (!input.trim()) {
|
|
235
|
+
return 'Device name is required';
|
|
236
|
+
}
|
|
237
|
+
return true;
|
|
238
|
+
}
|
|
239
|
+
}]);
|
|
240
|
+
const descriptionAnswer = await inquirer_1.default.prompt([{
|
|
241
|
+
type: 'input',
|
|
242
|
+
name: 'description',
|
|
243
|
+
message: 'Enter device description (optional):',
|
|
244
|
+
default: `Serving device: ${deviceNameAnswer.deviceName}`
|
|
245
|
+
}]);
|
|
246
|
+
console.log(chalk_1.default.gray('\nCreating device...'));
|
|
247
|
+
// Create device via API - password will be generated and returned by the API
|
|
248
|
+
const createResponse = await edgibleService.createServingDevice({
|
|
249
|
+
name: deviceNameAnswer.deviceName.trim(),
|
|
250
|
+
description: descriptionAnswer.description.trim()
|
|
251
|
+
});
|
|
252
|
+
deviceId = createResponse.device.id;
|
|
253
|
+
devicePassword = createResponse.device.password; // Get password from API response
|
|
254
|
+
console.log(chalk_1.default.green(`✓ Device created: ${deviceId}`));
|
|
255
|
+
console.log(chalk_1.default.yellow(`\n⚠ Device Password: ${devicePassword}`));
|
|
256
|
+
console.log(chalk_1.default.yellow('⚠ Please save this password securely! You will need it to login as this device.\n'));
|
|
257
|
+
// Verify device credentials (don't login as device - CLI should use user credentials)
|
|
258
|
+
if (devicePassword && deviceId) {
|
|
259
|
+
const password = devicePassword;
|
|
260
|
+
const id = deviceId;
|
|
261
|
+
console.log(chalk_1.default.gray('Verifying device credentials...'));
|
|
262
|
+
try {
|
|
263
|
+
const isValid = await edgibleService.verifyDeviceCredentials(id, password);
|
|
264
|
+
if (isValid) {
|
|
265
|
+
console.log(chalk_1.default.green('✓ Device credentials verified'));
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
console.log(chalk_1.default.yellow('⚠ Device credentials verification failed, but continuing anyway.'));
|
|
269
|
+
console.log(chalk_1.default.gray('The agent will use these credentials when it starts.'));
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
catch (verifyError) {
|
|
273
|
+
console.log(chalk_1.default.yellow('⚠ Could not verify device credentials. The agent will use these credentials when it starts.'));
|
|
274
|
+
// Continue anyway - credentials are stored and agent will use them
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
// Save device credentials to config
|
|
278
|
+
logger.info('Saving device credentials to config', { deviceId });
|
|
279
|
+
configManager.updateConfig({
|
|
280
|
+
deviceId: deviceId,
|
|
281
|
+
deviceName: deviceNameAnswer.deviceName.trim(),
|
|
282
|
+
devicePassword: devicePassword,
|
|
283
|
+
deviceType: 'serving'
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
catch (error) {
|
|
288
|
+
logger.error('Error selecting device', error);
|
|
289
|
+
const errorMessage = error instanceof Error ? error.message : 'An unexpected error occurred';
|
|
290
|
+
console.error(chalk_1.default.red('Error selecting device:'), errorMessage);
|
|
291
|
+
throw error;
|
|
292
|
+
}
|
|
293
|
+
// Now start the agent with the selected/created device
|
|
294
|
+
logger.info('Starting local agent', { passthrough: options.passthrough, debug: options.debug, docker: options.docker, root: options.root });
|
|
295
|
+
if (options.docker) {
|
|
296
|
+
console.log(chalk_1.default.blue('\n🐳 Starting agent in Docker...'));
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
console.log(chalk_1.default.blue('\n🚀 Starting agent...'));
|
|
300
|
+
}
|
|
301
|
+
await agentManager.startLocalAgent({
|
|
302
|
+
passthrough: options.passthrough || false,
|
|
303
|
+
debug: options.debug || false,
|
|
304
|
+
docker: options.docker || false,
|
|
305
|
+
root: options.root || false,
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
//# sourceMappingURL=start.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { LocalAgentManager } from '../../services/LocalAgentManager';
|
|
2
|
+
import { Logger } from '../../utils/logger';
|
|
3
|
+
import { ConfigManager } from '../../state/config';
|
|
4
|
+
export declare function handleAgentStatus(options: {
|
|
5
|
+
watch?: boolean;
|
|
6
|
+
}, logger: Logger, configManager: ConfigManager, agentManager: LocalAgentManager): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,wBAAsB,iBAAiB,CACrC,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EAC5B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,iBAAiB,GAC9B,OAAO,CAAC,IAAI,CAAC,CA+Df"}
|