@edgible-team/cli 1.2.13 → 1.2.17
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/README.md +5 -3
- package/dist/client/api-client.d.ts +13 -1
- package/dist/client/api-client.d.ts.map +1 -1
- package/dist/client/api-client.js +19 -0
- package/dist/commands/agent/install.d.ts +2 -1
- package/dist/commands/agent/install.d.ts.map +1 -1
- package/dist/commands/agent/install.js +24 -7
- package/dist/commands/agent/start.d.ts +5 -1
- package/dist/commands/agent/start.d.ts.map +1 -1
- package/dist/commands/agent/start.js +19 -280
- package/dist/commands/agent/uninstall.d.ts.map +1 -1
- package/dist/commands/agent/uninstall.js +14 -7
- package/dist/commands/agent.d.ts.map +1 -1
- package/dist/commands/agent.js +3 -2
- package/dist/commands/ai/setup.d.ts +1 -1
- package/dist/commands/ai/setup.d.ts.map +1 -1
- package/dist/commands/ai.js +1 -1
- package/dist/commands/application/create-docker-compose.d.ts +3 -1
- package/dist/commands/application/create-docker-compose.d.ts.map +1 -1
- package/dist/commands/application/create-docker-compose.js +25 -69
- package/dist/commands/application/create-existing.d.ts +2 -2
- package/dist/commands/application/create-existing.d.ts.map +1 -1
- package/dist/commands/application/create-existing.js +27 -132
- package/dist/commands/application/create-managed-process.d.ts +3 -1
- package/dist/commands/application/create-managed-process.d.ts.map +1 -1
- package/dist/commands/application/create-managed-process.js +31 -75
- package/dist/commands/application/delete.d.ts +2 -1
- package/dist/commands/application/delete.d.ts.map +1 -1
- package/dist/commands/application/delete.js +19 -5
- package/dist/commands/application/update.d.ts +3 -0
- package/dist/commands/application/update.d.ts.map +1 -1
- package/dist/commands/application/update.js +45 -1
- package/dist/commands/application.d.ts.map +1 -1
- package/dist/commands/application.js +33 -19
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +44 -0
- package/dist/commands/debug.js +1 -1
- package/dist/commands/device/application-health.d.ts +7 -0
- package/dist/commands/device/application-health.d.ts.map +1 -0
- package/dist/commands/device/application-health.js +103 -0
- package/dist/commands/device/delete.d.ts +7 -0
- package/dist/commands/device/delete.d.ts.map +1 -0
- package/dist/commands/device/delete.js +69 -0
- package/dist/commands/device/health.d.ts +7 -0
- package/dist/commands/device/health.d.ts.map +1 -0
- package/dist/commands/device/health.js +78 -0
- package/dist/commands/device/list.d.ts +5 -0
- package/dist/commands/device/list.d.ts.map +1 -0
- package/dist/commands/device/list.js +46 -0
- package/dist/commands/device/telemetry.d.ts +8 -0
- package/dist/commands/device/telemetry.d.ts.map +1 -0
- package/dist/commands/device/telemetry.js +59 -0
- package/dist/commands/device.d.ts +6 -0
- package/dist/commands/device.d.ts.map +1 -0
- package/dist/commands/device.js +86 -0
- package/dist/commands/stack/deploy.d.ts +8 -0
- package/dist/commands/stack/deploy.d.ts.map +1 -0
- package/dist/commands/stack/deploy.js +61 -0
- package/dist/commands/stack/diff.d.ts +7 -0
- package/dist/commands/stack/diff.d.ts.map +1 -0
- package/dist/commands/stack/diff.js +66 -0
- package/dist/commands/stack/status.d.ts +9 -0
- package/dist/commands/stack/status.d.ts.map +1 -0
- package/dist/commands/stack/status.js +55 -0
- package/dist/commands/stack/teardown.d.ts +8 -0
- package/dist/commands/stack/teardown.d.ts.map +1 -0
- package/dist/commands/stack/teardown.js +107 -0
- package/dist/commands/stack/validate.d.ts +7 -0
- package/dist/commands/stack/validate.d.ts.map +1 -0
- package/dist/commands/stack/validate.js +44 -0
- package/dist/commands/stack.d.ts +10 -0
- package/dist/commands/stack.d.ts.map +1 -0
- package/dist/commands/stack.js +117 -0
- package/dist/commands/utils/auth-prompt.d.ts +25 -0
- package/dist/commands/utils/auth-prompt.d.ts.map +1 -0
- package/dist/commands/utils/auth-prompt.js +115 -0
- package/dist/commands/utils/device-prompt.d.ts +18 -0
- package/dist/commands/utils/device-prompt.d.ts.map +1 -0
- package/dist/commands/utils/device-prompt.js +58 -0
- package/dist/commands/utils/output-formatter.d.ts +13 -0
- package/dist/commands/utils/output-formatter.d.ts.map +1 -1
- package/dist/commands/utils/output-formatter.js +21 -0
- package/dist/index.js +4 -0
- package/dist/services/LocalAgentManager.d.ts +2 -1
- package/dist/services/LocalAgentManager.d.ts.map +1 -1
- package/dist/services/LocalAgentManager.js +6 -4
- package/dist/services/application/ApplicationService.d.ts +19 -0
- package/dist/services/application/ApplicationService.d.ts.map +1 -1
- package/dist/services/application/ApplicationService.js +14 -1
- package/dist/services/device/DeviceService.d.ts +62 -0
- package/dist/services/device/DeviceService.d.ts.map +1 -0
- package/dist/services/device/DeviceService.js +235 -0
- package/dist/services/edgible.d.ts +3 -1
- package/dist/services/edgible.d.ts.map +1 -1
- package/dist/services/edgible.js +5 -4
- package/dist/services/instances.d.ts +27 -1
- package/dist/services/instances.d.ts.map +1 -1
- package/dist/services/instances.js +53 -4
- package/dist/services/stack/DependencyGraphManager.d.ts +69 -0
- package/dist/services/stack/DependencyGraphManager.d.ts.map +1 -0
- package/dist/services/stack/DependencyGraphManager.js +204 -0
- package/dist/services/stack/DeviceResolver.d.ts +63 -0
- package/dist/services/stack/DeviceResolver.d.ts.map +1 -0
- package/dist/services/stack/DeviceResolver.js +147 -0
- package/dist/services/stack/GatewayResolver.d.ts +84 -0
- package/dist/services/stack/GatewayResolver.d.ts.map +1 -0
- package/dist/services/stack/GatewayResolver.js +179 -0
- package/dist/services/stack/StackParser.d.ts +38 -0
- package/dist/services/stack/StackParser.d.ts.map +1 -0
- package/dist/services/stack/StackParser.js +234 -0
- package/dist/services/stack/StackService.d.ts +76 -0
- package/dist/services/stack/StackService.d.ts.map +1 -0
- package/dist/services/stack/StackService.js +476 -0
- package/dist/types/AgentConfig.d.ts +26 -0
- package/dist/types/AgentConfig.d.ts.map +1 -1
- package/dist/types/ApiRequests.d.ts +5 -1
- package/dist/types/ApiRequests.d.ts.map +1 -1
- package/dist/types/ApiResponses.d.ts +5 -0
- package/dist/types/ApiResponses.d.ts.map +1 -1
- package/dist/types/JobTypes.d.ts +103 -0
- package/dist/types/JobTypes.d.ts.map +1 -0
- package/dist/types/JobTypes.js +80 -0
- package/dist/types/WebSocketMessages.d.ts +89 -0
- package/dist/types/WebSocketMessages.d.ts.map +1 -0
- package/dist/types/WebSocketMessages.js +5 -0
- package/dist/types/backendJobs.d.ts +102 -0
- package/dist/types/backendJobs.d.ts.map +1 -0
- package/dist/types/backendJobs.js +5 -0
- package/dist/types/models/ApplicationData.d.ts +1 -1
- package/dist/types/models/ApplicationData.d.ts.map +1 -1
- package/dist/types/models/DeviceData.d.ts +4 -0
- package/dist/types/models/DeviceData.d.ts.map +1 -1
- package/dist/types/stack.d.ts +191 -0
- package/dist/types/stack.d.ts.map +1 -0
- package/dist/types/stack.js +5 -0
- package/dist/types/validation/schemas.d.ts +20 -20
- package/dist/types/validation/schemas.js +1 -1
- package/dist/utils/stack-errors.d.ts +103 -0
- package/dist/utils/stack-errors.d.ts.map +1 -0
- package/dist/utils/stack-errors.js +158 -0
- package/dist/utils/stack-file.d.ts +11 -0
- package/dist/utils/stack-file.d.ts.map +1 -0
- package/dist/utils/stack-file.js +66 -0
- package/dist/validation/stack-schemas.d.ts +535 -0
- package/dist/validation/stack-schemas.d.ts.map +1 -0
- package/dist/validation/stack-schemas.js +178 -0
- package/package.json +4 -2
- package/dist/commands/agent/agent-handlers.d.ts +0 -45
- package/dist/commands/agent/agent-handlers.d.ts.map +0 -1
- package/dist/commands/agent/agent-handlers.js +0 -1159
- package/dist/commands/application/api-keys.d.ts +0 -3
- package/dist/commands/application/api-keys.d.ts.map +0 -1
- package/dist/commands/application/api-keys.js +0 -227
- package/dist/commands/application/create-compose.d.ts +0 -3
- package/dist/commands/application/create-compose.d.ts.map +0 -1
- package/dist/commands/application/create-compose.js +0 -381
- package/dist/commands/application/create-interactive.d.ts +0 -3
- package/dist/commands/application/create-interactive.d.ts.map +0 -1
- package/dist/commands/application/create-interactive.js +0 -326
- package/dist/commands/application/create-workload.d.ts +0 -5
- package/dist/commands/application/create-workload.d.ts.map +0 -1
- package/dist/commands/application/create-workload.js +0 -48
- package/dist/commands/application/short-codes.d.ts +0 -3
- package/dist/commands/application/short-codes.d.ts.map +0 -1
- package/dist/commands/application/short-codes.js +0 -226
- package/dist/commands/application/toggle.d.ts +0 -2
- package/dist/commands/application/toggle.d.ts.map +0 -1
- package/dist/commands/application/toggle.js +0 -78
- package/dist/commands/examples/migrated-command-example.d.ts +0 -31
- package/dist/commands/examples/migrated-command-example.d.ts.map +0 -1
- package/dist/commands/examples/migrated-command-example.js +0 -180
- package/dist/commands/managedGateway/create.d.ts +0 -6
- package/dist/commands/managedGateway/create.d.ts.map +0 -1
- package/dist/commands/managedGateway/create.js +0 -50
- package/dist/commands/managedGateway/delete.d.ts +0 -5
- package/dist/commands/managedGateway/delete.d.ts.map +0 -1
- package/dist/commands/managedGateway/delete.js +0 -57
- package/dist/commands/managedGateway/get.d.ts +0 -4
- package/dist/commands/managedGateway/get.d.ts.map +0 -1
- package/dist/commands/managedGateway/get.js +0 -71
- package/dist/commands/managedGateway/haproxy-stats.d.ts +0 -6
- package/dist/commands/managedGateway/haproxy-stats.d.ts.map +0 -1
- package/dist/commands/managedGateway/haproxy-stats.js +0 -131
- package/dist/commands/managedGateway/list.d.ts +0 -4
- package/dist/commands/managedGateway/list.d.ts.map +0 -1
- package/dist/commands/managedGateway/list.js +0 -50
- package/dist/commands/managedGateway/logs.d.ts +0 -10
- package/dist/commands/managedGateway/logs.d.ts.map +0 -1
- package/dist/commands/managedGateway/logs.js +0 -100
- package/dist/commands/managedGateway/reboot.d.ts +0 -5
- package/dist/commands/managedGateway/reboot.d.ts.map +0 -1
- package/dist/commands/managedGateway/reboot.js +0 -95
- package/dist/commands/managedGateway/resync.d.ts +0 -10
- package/dist/commands/managedGateway/resync.d.ts.map +0 -1
- package/dist/commands/managedGateway/resync.js +0 -69
- package/dist/commands/managedGateway/ssh.d.ts +0 -4
- package/dist/commands/managedGateway/ssh.d.ts.map +0 -1
- package/dist/commands/managedGateway/ssh.js +0 -130
- package/dist/commands/managedGateway/wipe-logs.d.ts +0 -4
- package/dist/commands/managedGateway/wipe-logs.d.ts.map +0 -1
- package/dist/commands/managedGateway/wipe-logs.js +0 -67
- package/dist/commands/managedGateway/wireguard.d.ts +0 -4
- package/dist/commands/managedGateway/wireguard.d.ts.map +0 -1
- package/dist/commands/managedGateway/wireguard.js +0 -68
- package/dist/di/bindings.d.ts +0 -15
- package/dist/di/bindings.d.ts.map +0 -1
- package/dist/di/bindings.js +0 -99
- package/dist/di/container.d.ts +0 -44
- package/dist/di/container.d.ts.map +0 -1
- package/dist/di/container.js +0 -88
- package/dist/di/types.d.ts +0 -23
- package/dist/di/types.d.ts.map +0 -1
- package/dist/di/types.js +0 -32
- package/dist/repositories/config-repository.d.ts +0 -46
- package/dist/repositories/config-repository.d.ts.map +0 -1
- package/dist/repositories/config-repository.js +0 -62
- package/dist/repositories/gateway-repository.d.ts +0 -37
- package/dist/repositories/gateway-repository.d.ts.map +0 -1
- package/dist/repositories/gateway-repository.js +0 -35
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Stack teardown command handler
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
+
};
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.handleStackTeardown = handleStackTeardown;
|
|
43
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
44
|
+
const readline = __importStar(require("readline"));
|
|
45
|
+
const instances_1 = require("../../services/instances");
|
|
46
|
+
const stack_file_1 = require("../../utils/stack-file");
|
|
47
|
+
async function promptConfirmation(message) {
|
|
48
|
+
const rl = readline.createInterface({
|
|
49
|
+
input: process.stdin,
|
|
50
|
+
output: process.stdout,
|
|
51
|
+
});
|
|
52
|
+
return new Promise((resolve) => {
|
|
53
|
+
rl.question(message + ' (yes/no): ', (answer) => {
|
|
54
|
+
rl.close();
|
|
55
|
+
resolve(answer.toLowerCase() === 'yes' || answer.toLowerCase() === 'y');
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
async function handleStackTeardown(options) {
|
|
60
|
+
const { stackService, logger } = (0, instances_1.getServiceInstances)();
|
|
61
|
+
try {
|
|
62
|
+
const file = (0, stack_file_1.findStackFile)(options.file);
|
|
63
|
+
const teardownOptions = { ...options, file };
|
|
64
|
+
logger.info(`Tearing down stack from: ${file}`);
|
|
65
|
+
// Prompt for confirmation unless --force
|
|
66
|
+
if (!options.force) {
|
|
67
|
+
const confirmed = await promptConfirmation(chalk_1.default.yellow('\n⚠ This will remove all applications in the stack. Continue?'));
|
|
68
|
+
if (!confirmed) {
|
|
69
|
+
console.log(chalk_1.default.gray('Teardown cancelled.'));
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const result = await stackService.teardownStack(teardownOptions);
|
|
74
|
+
// Display results
|
|
75
|
+
console.log('\n' + chalk_1.default.bold('Teardown Results:'));
|
|
76
|
+
console.log(chalk_1.default.gray('─'.repeat(50)));
|
|
77
|
+
if (result.removed.length > 0) {
|
|
78
|
+
console.log(chalk_1.default.green('\n✓ Successfully removed:'));
|
|
79
|
+
for (const appName of result.removed) {
|
|
80
|
+
console.log(chalk_1.default.green(` - ${appName}`));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (result.failed.length > 0) {
|
|
84
|
+
console.log(chalk_1.default.red('\n✗ Failed to remove:'));
|
|
85
|
+
for (const app of result.failed) {
|
|
86
|
+
console.log(chalk_1.default.red(` - ${app.name}: ${app.error}`));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (result.skipped.length > 0) {
|
|
90
|
+
console.log(chalk_1.default.yellow('\n⊘ Skipped (not deployed):'));
|
|
91
|
+
for (const appName of result.skipped) {
|
|
92
|
+
console.log(chalk_1.default.yellow(` - ${appName}`));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
console.log(chalk_1.default.gray('\n' + '─'.repeat(50)));
|
|
96
|
+
console.log(chalk_1.default.bold(`Total: ${result.removed.length} removed, ${result.failed.length} failed, ${result.skipped.length} skipped`));
|
|
97
|
+
if (!result.success) {
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
logger.error(`Teardown error: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
103
|
+
console.log(chalk_1.default.red(`\n✗ Teardown failed: ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
104
|
+
process.exit(1);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=teardown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/commands/stack/validate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCnF"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Stack validate command handler
|
|
4
|
+
*/
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.handleStackValidate = handleStackValidate;
|
|
10
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
11
|
+
const instances_1 = require("../../services/instances");
|
|
12
|
+
const stack_file_1 = require("../../utils/stack-file");
|
|
13
|
+
async function handleStackValidate(options) {
|
|
14
|
+
const { stackService, logger } = (0, instances_1.getServiceInstances)();
|
|
15
|
+
try {
|
|
16
|
+
const file = (0, stack_file_1.findStackFile)(options.file);
|
|
17
|
+
logger.info(`Validating stack file: ${file}`);
|
|
18
|
+
const result = await stackService.validateStack(file);
|
|
19
|
+
if (result.valid) {
|
|
20
|
+
console.log(chalk_1.default.green('✓ Stack validation passed'));
|
|
21
|
+
if (result.warnings.length > 0) {
|
|
22
|
+
console.log(chalk_1.default.yellow('\nWarnings:'));
|
|
23
|
+
for (const warning of result.warnings) {
|
|
24
|
+
console.log(chalk_1.default.yellow(` - ${warning.path}: ${warning.message}`));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
console.log(chalk_1.default.red('✗ Stack validation failed'));
|
|
30
|
+
console.log(chalk_1.default.red('\nErrors:'));
|
|
31
|
+
for (const error of result.errors) {
|
|
32
|
+
const location = error.line ? `${error.path} (line ${error.line})` : error.path;
|
|
33
|
+
console.log(chalk_1.default.red(` - ${location}: ${error.message}`));
|
|
34
|
+
}
|
|
35
|
+
process.exit(1);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
logger.error(`Validation error: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
40
|
+
console.log(chalk_1.default.red(`\n✗ Validation failed: ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stack command group
|
|
3
|
+
* Commands for managing application stacks
|
|
4
|
+
*/
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
/**
|
|
7
|
+
* Setup stack commands
|
|
8
|
+
*/
|
|
9
|
+
export declare function setupStackCommands(program: Command): void;
|
|
10
|
+
//# sourceMappingURL=stack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stack.d.ts","sourceRoot":"","sources":["../../src/commands/stack.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiIzD"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Stack command group
|
|
4
|
+
* Commands for managing application stacks
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.setupStackCommands = setupStackCommands;
|
|
8
|
+
const command_wrapper_1 = require("./base/command-wrapper");
|
|
9
|
+
const deploy_1 = require("./stack/deploy");
|
|
10
|
+
const teardown_1 = require("./stack/teardown");
|
|
11
|
+
const status_1 = require("./stack/status");
|
|
12
|
+
const validate_1 = require("./stack/validate");
|
|
13
|
+
const diff_1 = require("./stack/diff");
|
|
14
|
+
/**
|
|
15
|
+
* Setup stack commands
|
|
16
|
+
*/
|
|
17
|
+
function setupStackCommands(program) {
|
|
18
|
+
const stackCommand = program
|
|
19
|
+
.command('stack')
|
|
20
|
+
.description('Manage application stacks (declarative multi-app deployments)');
|
|
21
|
+
// Deploy command
|
|
22
|
+
stackCommand
|
|
23
|
+
.command('deploy')
|
|
24
|
+
.description('Deploy or update applications from a stack file')
|
|
25
|
+
.option('-f, --file <path>', 'Path to stack file (default: edgible.yml in current directory)')
|
|
26
|
+
.option('--app <name>', 'Deploy only specified application')
|
|
27
|
+
.option('--dry-run', 'Show what would change without deploying')
|
|
28
|
+
.option('--skip-dependencies', "Don't deploy dependencies")
|
|
29
|
+
.option('--force', 'Force redeployment even if unchanged')
|
|
30
|
+
.addHelpText('after', `
|
|
31
|
+
Examples:
|
|
32
|
+
$ edgible stack deploy
|
|
33
|
+
$ edgible stack deploy -f production.yml
|
|
34
|
+
$ edgible stack deploy -f production.yml --app api-server
|
|
35
|
+
$ edgible stack deploy -f production.yml --dry-run
|
|
36
|
+
`)
|
|
37
|
+
.action((0, command_wrapper_1.wrapCommand)(async (options) => {
|
|
38
|
+
await (0, deploy_1.handleStackDeploy)(options);
|
|
39
|
+
}, {
|
|
40
|
+
requireAuth: true,
|
|
41
|
+
requireOrganization: true,
|
|
42
|
+
}));
|
|
43
|
+
// Teardown command
|
|
44
|
+
stackCommand
|
|
45
|
+
.command('teardown')
|
|
46
|
+
.description('Remove applications defined in a stack')
|
|
47
|
+
.option('-f, --file <path>', 'Path to stack file (default: edgible.yml in current directory)')
|
|
48
|
+
.option('--app <name>', 'Teardown only specified application')
|
|
49
|
+
.option('--force', 'Skip confirmation prompts')
|
|
50
|
+
.option('--keep-dependencies', "Don't teardown dependencies")
|
|
51
|
+
.addHelpText('after', `
|
|
52
|
+
Examples:
|
|
53
|
+
$ edgible stack teardown
|
|
54
|
+
$ edgible stack teardown -f production.yml
|
|
55
|
+
$ edgible stack teardown -f production.yml --app worker
|
|
56
|
+
$ edgible stack teardown -f production.yml --force
|
|
57
|
+
`)
|
|
58
|
+
.action((0, command_wrapper_1.wrapCommand)(async (options) => {
|
|
59
|
+
await (0, teardown_1.handleStackTeardown)(options);
|
|
60
|
+
}, {
|
|
61
|
+
requireAuth: true,
|
|
62
|
+
requireOrganization: true,
|
|
63
|
+
}));
|
|
64
|
+
// Status command
|
|
65
|
+
stackCommand
|
|
66
|
+
.command('status')
|
|
67
|
+
.description('Check the status of applications in a stack')
|
|
68
|
+
.option('-f, --file <path>', 'Path to stack file (default: edgible.yml in current directory)')
|
|
69
|
+
.option('--json', 'Output as JSON')
|
|
70
|
+
.option('--app <name>', 'Show status for specific application')
|
|
71
|
+
.addHelpText('after', `
|
|
72
|
+
Examples:
|
|
73
|
+
$ edgible stack status
|
|
74
|
+
$ edgible stack status -f production.yml
|
|
75
|
+
$ edgible stack status -f production.yml --json
|
|
76
|
+
$ edgible stack status -f production.yml --app database
|
|
77
|
+
`)
|
|
78
|
+
.action((0, command_wrapper_1.wrapCommand)(async (options) => {
|
|
79
|
+
await (0, status_1.handleStackStatus)(options);
|
|
80
|
+
}, {
|
|
81
|
+
requireAuth: true,
|
|
82
|
+
requireOrganization: true,
|
|
83
|
+
}));
|
|
84
|
+
// Validate command
|
|
85
|
+
stackCommand
|
|
86
|
+
.command('validate')
|
|
87
|
+
.description('Validate a stack file without deploying')
|
|
88
|
+
.option('-f, --file <path>', 'Path to stack file (default: edgible.yml in current directory)')
|
|
89
|
+
.addHelpText('after', `
|
|
90
|
+
Examples:
|
|
91
|
+
$ edgible stack validate
|
|
92
|
+
$ edgible stack validate -f production.yml
|
|
93
|
+
`)
|
|
94
|
+
.action((0, command_wrapper_1.wrapCommand)(async (options) => {
|
|
95
|
+
await (0, validate_1.handleStackValidate)(options);
|
|
96
|
+
}, {
|
|
97
|
+
requireAuth: false,
|
|
98
|
+
requireOrganization: false,
|
|
99
|
+
}));
|
|
100
|
+
// Diff command
|
|
101
|
+
stackCommand
|
|
102
|
+
.command('diff')
|
|
103
|
+
.description('Show differences between stack and deployed state')
|
|
104
|
+
.option('-f, --file <path>', 'Path to stack file (default: edgible.yml in current directory)')
|
|
105
|
+
.addHelpText('after', `
|
|
106
|
+
Examples:
|
|
107
|
+
$ edgible stack diff
|
|
108
|
+
$ edgible stack diff -f production.yml
|
|
109
|
+
`)
|
|
110
|
+
.action((0, command_wrapper_1.wrapCommand)(async (options) => {
|
|
111
|
+
await (0, diff_1.handleStackDiff)(options);
|
|
112
|
+
}, {
|
|
113
|
+
requireAuth: true,
|
|
114
|
+
requireOrganization: true,
|
|
115
|
+
}));
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=stack.js.map
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared auth mode selection for application create flows.
|
|
3
|
+
* Uses authModes (none | org | api-key | org+api-key) instead of deprecated requireOrgAuth.
|
|
4
|
+
*/
|
|
5
|
+
export type AuthModeChoice = 'none' | 'org' | 'api-key' | 'org-and-api-key';
|
|
6
|
+
export type AuthMode = 'none' | 'org' | 'api-key';
|
|
7
|
+
export interface AuthPromptResult {
|
|
8
|
+
authModes: AuthMode[];
|
|
9
|
+
allowedOrganizations?: string[];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Parse --auth-modes string (e.g. "org", "org,api-key") into AuthMode[].
|
|
13
|
+
* Used for non-interactive and flags.
|
|
14
|
+
*/
|
|
15
|
+
export declare function parseAuthModes(value: string | undefined): AuthMode[] | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* Prompt for auth mode (and optionally allowed orgs) in interactive mode.
|
|
18
|
+
* Returns authModes and allowedOrganizations (only when org is in authModes).
|
|
19
|
+
*/
|
|
20
|
+
export declare function promptAuthModes(options: {
|
|
21
|
+
authModesFromFlag?: AuthMode[];
|
|
22
|
+
allowedOrgsFromFlag?: string[];
|
|
23
|
+
nonInteractive?: boolean;
|
|
24
|
+
}): Promise<AuthPromptResult>;
|
|
25
|
+
//# sourceMappingURL=auth-prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-prompt.d.ts","sourceRoot":"","sources":["../../../src/commands/utils/auth-prompt.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,GAAG,iBAAiB,CAAC;AAC5E,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;AAwBlD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,EAAE,GAAG,SAAS,CAahF;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE;IAC7C,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgE5B"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared auth mode selection for application create flows.
|
|
4
|
+
* Uses authModes (none | org | api-key | org+api-key) instead of deprecated requireOrgAuth.
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.parseAuthModes = parseAuthModes;
|
|
11
|
+
exports.promptAuthModes = promptAuthModes;
|
|
12
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
13
|
+
const AUTH_CHOICES = [
|
|
14
|
+
{ name: 'None (public access)', value: 'none', short: 'None' },
|
|
15
|
+
{ name: 'Organization (logged-in org members)', value: 'org', short: 'Org' },
|
|
16
|
+
{ name: 'API key (programmatic access)', value: 'api-key', short: 'API key' },
|
|
17
|
+
{ name: 'Organization + API key (either)', value: 'org-and-api-key', short: 'Org + API key' },
|
|
18
|
+
];
|
|
19
|
+
function choiceToAuthModes(choice) {
|
|
20
|
+
switch (choice) {
|
|
21
|
+
case 'none':
|
|
22
|
+
return ['none'];
|
|
23
|
+
case 'org':
|
|
24
|
+
return ['org'];
|
|
25
|
+
case 'api-key':
|
|
26
|
+
return ['api-key'];
|
|
27
|
+
case 'org-and-api-key':
|
|
28
|
+
return ['org', 'api-key'];
|
|
29
|
+
default:
|
|
30
|
+
return ['none'];
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Parse --auth-modes string (e.g. "org", "org,api-key") into AuthMode[].
|
|
35
|
+
* Used for non-interactive and flags.
|
|
36
|
+
*/
|
|
37
|
+
function parseAuthModes(value) {
|
|
38
|
+
if (!value || !value.trim())
|
|
39
|
+
return undefined;
|
|
40
|
+
const parts = value.split(',').map((s) => s.trim().toLowerCase());
|
|
41
|
+
const valid = [];
|
|
42
|
+
for (const p of parts) {
|
|
43
|
+
if (p === 'none' || p === 'org' || p === 'api-key') {
|
|
44
|
+
if (p === 'none' && valid.length > 0)
|
|
45
|
+
continue;
|
|
46
|
+
if (p !== 'none' && valid.includes('none'))
|
|
47
|
+
valid.length = 0;
|
|
48
|
+
if (!valid.includes(p))
|
|
49
|
+
valid.push(p);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (valid.length === 0)
|
|
53
|
+
return undefined;
|
|
54
|
+
return valid;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Prompt for auth mode (and optionally allowed orgs) in interactive mode.
|
|
58
|
+
* Returns authModes and allowedOrganizations (only when org is in authModes).
|
|
59
|
+
*/
|
|
60
|
+
async function promptAuthModes(options) {
|
|
61
|
+
const { authModesFromFlag, allowedOrgsFromFlag, nonInteractive } = options;
|
|
62
|
+
if (nonInteractive) {
|
|
63
|
+
const authModes = authModesFromFlag && authModesFromFlag.length > 0 ? authModesFromFlag : ['none'];
|
|
64
|
+
return {
|
|
65
|
+
authModes,
|
|
66
|
+
allowedOrganizations: authModes.includes('org') && allowedOrgsFromFlag && allowedOrgsFromFlag.length > 0
|
|
67
|
+
? allowedOrgsFromFlag
|
|
68
|
+
: undefined,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
if (authModesFromFlag && authModesFromFlag.length > 0) {
|
|
72
|
+
const allowedOrganizations = authModesFromFlag.includes('org') && allowedOrgsFromFlag && allowedOrgsFromFlag.length > 0
|
|
73
|
+
? allowedOrgsFromFlag
|
|
74
|
+
: undefined;
|
|
75
|
+
return { authModes: authModesFromFlag, allowedOrganizations };
|
|
76
|
+
}
|
|
77
|
+
const { authChoice } = await inquirer_1.default.prompt([
|
|
78
|
+
{
|
|
79
|
+
type: 'list',
|
|
80
|
+
name: 'authChoice',
|
|
81
|
+
message: 'How should access to this application be protected?',
|
|
82
|
+
choices: AUTH_CHOICES,
|
|
83
|
+
default: 'none',
|
|
84
|
+
},
|
|
85
|
+
]);
|
|
86
|
+
const authModes = choiceToAuthModes(authChoice);
|
|
87
|
+
let allowedOrganizations;
|
|
88
|
+
if (authModes.includes('org')) {
|
|
89
|
+
const { allowOtherOrgs } = await inquirer_1.default.prompt([
|
|
90
|
+
{
|
|
91
|
+
type: 'confirm',
|
|
92
|
+
name: 'allowOtherOrgs',
|
|
93
|
+
message: 'Allow other organizations to access this application?',
|
|
94
|
+
default: false,
|
|
95
|
+
},
|
|
96
|
+
]);
|
|
97
|
+
if (allowOtherOrgs) {
|
|
98
|
+
const { orgIds } = await inquirer_1.default.prompt([
|
|
99
|
+
{
|
|
100
|
+
type: 'input',
|
|
101
|
+
name: 'orgIds',
|
|
102
|
+
message: 'Enter comma-separated organization IDs to allow access:',
|
|
103
|
+
},
|
|
104
|
+
]);
|
|
105
|
+
if (orgIds && typeof orgIds === 'string' && orgIds.trim()) {
|
|
106
|
+
allowedOrganizations = orgIds
|
|
107
|
+
.split(',')
|
|
108
|
+
.map((s) => s.trim())
|
|
109
|
+
.filter(Boolean);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return { authModes, allowedOrganizations };
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=auth-prompt.js.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared device selection utilities
|
|
3
|
+
*/
|
|
4
|
+
import type { DeviceService } from '../../services/device/DeviceService';
|
|
5
|
+
export interface DeviceSelectionOptions {
|
|
6
|
+
allowNone?: boolean;
|
|
7
|
+
message?: string;
|
|
8
|
+
required?: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Prompt user to select a device from available devices
|
|
12
|
+
*/
|
|
13
|
+
export declare function promptDeviceSelection(deviceService: DeviceService, options?: DeviceSelectionOptions): Promise<string | null>;
|
|
14
|
+
/**
|
|
15
|
+
* Get device ID from option or prompt if not provided
|
|
16
|
+
*/
|
|
17
|
+
export declare function getDeviceId(deviceService: DeviceService, providedId: string | undefined, options?: DeviceSelectionOptions): Promise<string | null>;
|
|
18
|
+
//# sourceMappingURL=device-prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-prompt.d.ts","sourceRoot":"","sources":["../../../src/commands/utils/device-prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAGzE,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,aAAa,EAAE,aAAa,EAC5B,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAsCxB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAKxB"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared device selection utilities
|
|
4
|
+
*/
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.promptDeviceSelection = promptDeviceSelection;
|
|
10
|
+
exports.getDeviceId = getDeviceId;
|
|
11
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
12
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
13
|
+
/**
|
|
14
|
+
* Prompt user to select a device from available devices
|
|
15
|
+
*/
|
|
16
|
+
async function promptDeviceSelection(deviceService, options = {}) {
|
|
17
|
+
const { allowNone = false, message = 'Select device:', required = true } = options;
|
|
18
|
+
const { devices } = await deviceService.listDevices();
|
|
19
|
+
if (devices.length === 0) {
|
|
20
|
+
if (allowNone) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
console.log(chalk_1.default.yellow('⚠ No devices found in organization'));
|
|
24
|
+
if (required) {
|
|
25
|
+
throw new Error('No devices available');
|
|
26
|
+
}
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
const choices = devices.map((d) => ({
|
|
30
|
+
name: `${d.name} (${d.id}) - ${d.type}`,
|
|
31
|
+
value: d.id,
|
|
32
|
+
}));
|
|
33
|
+
if (allowNone) {
|
|
34
|
+
choices.push({
|
|
35
|
+
name: 'None',
|
|
36
|
+
value: '',
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
const answer = await inquirer_1.default.prompt([
|
|
40
|
+
{
|
|
41
|
+
type: 'list',
|
|
42
|
+
name: 'deviceId',
|
|
43
|
+
message,
|
|
44
|
+
choices,
|
|
45
|
+
},
|
|
46
|
+
]);
|
|
47
|
+
return answer.deviceId === '' ? null : answer.deviceId;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get device ID from option or prompt if not provided
|
|
51
|
+
*/
|
|
52
|
+
async function getDeviceId(deviceService, providedId, options = {}) {
|
|
53
|
+
if (providedId) {
|
|
54
|
+
return providedId;
|
|
55
|
+
}
|
|
56
|
+
return await promptDeviceSelection(deviceService, options);
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=device-prompt.js.map
|
|
@@ -40,6 +40,19 @@ export declare function formatGateway(gateway: {
|
|
|
40
40
|
};
|
|
41
41
|
applicationCount?: number;
|
|
42
42
|
}): string;
|
|
43
|
+
/**
|
|
44
|
+
* Format device output (for device list)
|
|
45
|
+
*/
|
|
46
|
+
export declare function formatDevice(device: {
|
|
47
|
+
id: string;
|
|
48
|
+
name: string;
|
|
49
|
+
type: string;
|
|
50
|
+
status: string;
|
|
51
|
+
organizationId: string;
|
|
52
|
+
createdAt: string;
|
|
53
|
+
lastSeen?: string;
|
|
54
|
+
description?: string;
|
|
55
|
+
}): string;
|
|
43
56
|
/**
|
|
44
57
|
* Format list of items as table-like output
|
|
45
58
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output-formatter.d.ts","sourceRoot":"","sources":["../../../src/commands/utils/output-formatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,MAAM,CAqBT;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE;IACrC,MAAM,EAAE;QACN,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,WAAW,CAAC,EAAE;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,GAAG,MAAM,CAuBT;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAC1B,KAAK,EAAE,CAAC,EAAE,EACV,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,EAC9C,MAAM,CAAC,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,CAgBR;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAMxE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD"}
|
|
1
|
+
{"version":3,"file":"output-formatter.d.ts","sourceRoot":"","sources":["../../../src/commands/utils/output-formatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,MAAM,CAqBT;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE;IACrC,MAAM,EAAE;QACN,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,WAAW,CAAC,EAAE;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,GAAG,MAAM,CAuBT;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,MAAM,CAkBT;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAC1B,KAAK,EAAE,CAAC,EAAE,EACV,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,EAC9C,MAAM,CAAC,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,CAgBR;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAMxE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD"}
|
|
@@ -9,6 +9,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.formatApplication = formatApplication;
|
|
11
11
|
exports.formatGateway = formatGateway;
|
|
12
|
+
exports.formatDevice = formatDevice;
|
|
12
13
|
exports.formatList = formatList;
|
|
13
14
|
exports.formatError = formatError;
|
|
14
15
|
exports.formatSuccess = formatSuccess;
|
|
@@ -61,6 +62,26 @@ function formatGateway(gateway) {
|
|
|
61
62
|
output += chalk_1.default.gray(` Created: ${new Date(gateway.device.createdAt).toLocaleString()}\n`);
|
|
62
63
|
return output;
|
|
63
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* Format device output (for device list)
|
|
67
|
+
*/
|
|
68
|
+
function formatDevice(device) {
|
|
69
|
+
const statusColor = device.status === 'active' ? chalk_1.default.green : chalk_1.default.yellow;
|
|
70
|
+
const statusIcon = device.status === 'active' ? '●' : '○';
|
|
71
|
+
let output = '';
|
|
72
|
+
output += `${statusIcon} ${device.name}\n`;
|
|
73
|
+
output += chalk_1.default.gray(` ID: ${device.id}\n`);
|
|
74
|
+
output += chalk_1.default.gray(` Type: ${device.type}\n`);
|
|
75
|
+
output += chalk_1.default.gray(` Status: ${statusColor(device.status)}\n`);
|
|
76
|
+
output += chalk_1.default.gray(` Created: ${new Date(device.createdAt).toLocaleString()}\n`);
|
|
77
|
+
if (device.lastSeen) {
|
|
78
|
+
output += chalk_1.default.gray(` Last seen: ${new Date(device.lastSeen).toLocaleString()}\n`);
|
|
79
|
+
}
|
|
80
|
+
if (device.description) {
|
|
81
|
+
output += chalk_1.default.gray(` Description: ${device.description}\n`);
|
|
82
|
+
}
|
|
83
|
+
return output;
|
|
84
|
+
}
|
|
64
85
|
/**
|
|
65
86
|
* Format list of items as table-like output
|
|
66
87
|
*/
|
package/dist/index.js
CHANGED
|
@@ -6,11 +6,13 @@ const errors_1 = require("./utils/errors");
|
|
|
6
6
|
const output_1 = require("./utils/output");
|
|
7
7
|
const application_1 = require("./commands/application");
|
|
8
8
|
const gateway_1 = require("./commands/gateway");
|
|
9
|
+
const device_1 = require("./commands/device");
|
|
9
10
|
const auth_1 = require("./commands/auth");
|
|
10
11
|
const config_1 = require("./commands/config");
|
|
11
12
|
const discover_1 = require("./commands/discover");
|
|
12
13
|
const connectivity_1 = require("./commands/connectivity");
|
|
13
14
|
const ai_1 = require("./commands/ai");
|
|
15
|
+
const stack_1 = require("./commands/stack");
|
|
14
16
|
const agent_1 = require("./commands/agent");
|
|
15
17
|
const debug_1 = require("./commands/debug");
|
|
16
18
|
const managedGateway_1 = require("./commands/managedGateway");
|
|
@@ -36,6 +38,8 @@ program
|
|
|
36
38
|
(0, auth_1.setupAuthCommands)(program);
|
|
37
39
|
(0, application_1.setupApplicationCommands)(program);
|
|
38
40
|
(0, gateway_1.setupGatewayCommands)(program);
|
|
41
|
+
(0, device_1.setupDeviceCommands)(program);
|
|
42
|
+
(0, stack_1.setupStackCommands)(program);
|
|
39
43
|
(0, config_1.setupConfigCommands)(program);
|
|
40
44
|
(0, discover_1.setupDiscoverCommands)(program);
|
|
41
45
|
(0, connectivity_1.setupConnectivityCommands)(program);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { UnifiedAgentStatus } from '../types/UnifiedAgentStatus';
|
|
2
2
|
import { InstallationResult, UpdateResult, ConfigurationResult, LocalAgentHealthStatus, AgentInstallationOptions, AgentUpdateOptions } from '../types/agent';
|
|
3
3
|
import { Application } from '../types/validation';
|
|
4
|
+
import { ConfigManager } from '../state/config';
|
|
4
5
|
export declare class LocalAgentManager {
|
|
5
6
|
private configPath;
|
|
6
7
|
private agentPath;
|
|
@@ -9,7 +10,7 @@ export declare class LocalAgentManager {
|
|
|
9
10
|
private agentProcess;
|
|
10
11
|
private configManager;
|
|
11
12
|
private statusManager;
|
|
12
|
-
constructor();
|
|
13
|
+
constructor(configManager?: ConfigManager);
|
|
13
14
|
/**
|
|
14
15
|
* Update agent configuration with current CLI device credentials
|
|
15
16
|
* @param configPath Optional config path to use. If not provided, uses the instance's configPath.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalAgentManager.d.ts","sourceRoot":"","sources":["../../src/services/LocalAgentManager.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,kBAAkB,EAGnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACnB,sBAAsB,EAEtB,wBAAwB,EACxB,kBAAkB,EAGnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"LocalAgentManager.d.ts","sourceRoot":"","sources":["../../src/services/LocalAgentManager.ts"],"names":[],"mappings":"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"}
|