@edgible-team/cli 1.2.19 → 1.2.21
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/install.d.ts.map +1 -1
- package/dist/commands/agent/install.js +23 -4
- package/dist/commands/agent/uninstall.d.ts.map +1 -1
- package/dist/commands/agent/uninstall.js +1 -2
- package/dist/commands/ai/setup.d.ts.map +1 -1
- package/dist/commands/ai/setup.js +1 -2
- package/dist/commands/application/events.d.ts +6 -0
- package/dist/commands/application/events.d.ts.map +1 -0
- package/dist/commands/application/events.js +60 -0
- package/dist/commands/application/list.d.ts.map +1 -1
- package/dist/commands/application/list.js +2 -0
- package/dist/commands/application/update.d.ts +1 -0
- package/dist/commands/application/update.d.ts.map +1 -1
- package/dist/commands/application/update.js +6 -1
- package/dist/commands/application.d.ts.map +1 -1
- package/dist/commands/application.js +14 -0
- package/dist/commands/auth.js +1 -1
- package/dist/commands/base/command-wrapper.js +1 -1
- package/dist/commands/config.js +2 -2
- package/dist/commands/debug.d.ts.map +1 -1
- package/dist/commands/debug.js +1 -2
- package/dist/commands/stack/validate.d.ts +5 -0
- package/dist/commands/stack/validate.d.ts.map +1 -1
- package/dist/commands/stack/validate.js +15 -4
- package/dist/commands/utils/config-validator.js +1 -1
- package/dist/detection/WorkloadDetector.d.ts +3 -1
- package/dist/detection/WorkloadDetector.d.ts.map +1 -1
- package/dist/scripts/postinstall.js +2 -2
- package/dist/services/LocalAgentManager.js +1 -1
- package/dist/services/application/ApplicationService.d.ts +2 -0
- package/dist/services/application/ApplicationService.d.ts.map +1 -1
- package/dist/services/application/ApplicationService.js +19 -2
- package/dist/services/device/DeviceService.js +1 -1
- package/dist/services/edgible.js +1 -1
- package/dist/services/stack/DependencyGraphManager.d.ts.map +1 -1
- package/dist/services/stack/DependencyGraphManager.js +3 -8
- package/dist/services/stack/StackService.d.ts.map +1 -1
- package/dist/services/stack/StackService.js +19 -8
- package/dist/types/validation/schemas.d.ts +42 -2
- package/dist/types/validation/schemas.d.ts.map +1 -1
- package/dist/types/validation/schemas.js +9 -0
- package/dist/utils/PlatformDetector.js +4 -4
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/install.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;AAU9D,wBAAsB,kBAAkB,CACtC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,EAChL,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,iBAAiB,GAC9B,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/install.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;AAU9D,wBAAsB,kBAAkB,CACtC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,EAChL,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,iBAAiB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAwdf"}
|
|
@@ -48,15 +48,34 @@ const PathResolver_1 = require("../../utils/PathResolver");
|
|
|
48
48
|
const urls_1 = require("../../utils/urls");
|
|
49
49
|
const sudo_checker_1 = require("../../utils/sudo-checker");
|
|
50
50
|
async function handleAgentInstall(options, logger, configManager, edgibleService, authService, agentManager) {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
51
|
+
const noInteractive = options.nonInteractive === true;
|
|
52
|
+
const platformEarly = PlatformDetector_1.PlatformDetector.getPlatform();
|
|
53
|
+
if ((platformEarly === 'linux' || platformEarly === 'darwin') &&
|
|
54
|
+
!(0, sudo_checker_1.checkSudoPermissions)()) {
|
|
55
|
+
console.log(chalk_1.default.yellow('⚠ Warning: Sudo/root was not detected. Agent installation often needs elevated privileges and may fail without them.'));
|
|
56
|
+
if (noInteractive) {
|
|
57
|
+
console.log(chalk_1.default.yellow('Non-interactive: continuing without elevated privileges.\n'));
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
const { proceedWithoutSudo } = await inquirer_1.default.prompt([
|
|
61
|
+
{
|
|
62
|
+
type: 'confirm',
|
|
63
|
+
name: 'proceedWithoutSudo',
|
|
64
|
+
message: 'Continue installation without sudo/root?',
|
|
65
|
+
default: false,
|
|
66
|
+
},
|
|
67
|
+
]);
|
|
68
|
+
if (!proceedWithoutSudo) {
|
|
69
|
+
console.log(chalk_1.default.gray('Installation cancelled.'));
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
console.log('');
|
|
73
|
+
}
|
|
54
74
|
}
|
|
55
75
|
(0, config_validator_1.validateConfig)(configManager, {
|
|
56
76
|
requireAuth: true,
|
|
57
77
|
requireOrganization: true,
|
|
58
78
|
});
|
|
59
|
-
const noInteractive = options.nonInteractive === true;
|
|
60
79
|
const deviceIdFromEnv = process.env['EDGIBLE_DEVICE_ID'];
|
|
61
80
|
const devicePasswordFromEnv = process.env['EDGIBLE_DEVICE_PASSWORD'];
|
|
62
81
|
console.log(chalk_1.default.blue.bold('\n═══════════════════════════════════════════'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/uninstall.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAKnD,wBAAsB,oBAAoB,CACxC,OAAO,EAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EACnD,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/uninstall.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAKnD,wBAAsB,oBAAoB,CACxC,OAAO,EAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EACnD,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,IAAI,CAAC,CAgJf"}
|
|
@@ -46,8 +46,7 @@ const PathResolver_1 = require("../../utils/PathResolver");
|
|
|
46
46
|
const sudo_checker_1 = require("../../utils/sudo-checker");
|
|
47
47
|
async function handleAgentUninstall(options, logger, configManager) {
|
|
48
48
|
if (!(0, sudo_checker_1.checkSudoPermissions)()) {
|
|
49
|
-
console.log(chalk_1.default.
|
|
50
|
-
return;
|
|
49
|
+
console.log(chalk_1.default.yellow('⚠ Warning: Not running as root/sudo. Agent uninstallation may fail or behave incorrectly without proper privileges.'));
|
|
51
50
|
}
|
|
52
51
|
const config = configManager.getConfig();
|
|
53
52
|
if (!config.agentInstallationType) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/commands/ai/setup.ts"],"names":[],"mappings":"AAMA,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/commands/ai/setup.ts"],"names":[],"mappings":"AAMA,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,OAAO,CAAC,IAAI,CAAC,CAmFhB"}
|
|
@@ -11,8 +11,7 @@ const sudo_checker_1 = require("../../utils/sudo-checker");
|
|
|
11
11
|
const helpers_1 = require("./helpers");
|
|
12
12
|
async function handleAiSetup(options) {
|
|
13
13
|
if (!(0, sudo_checker_1.checkSudoPermissions)()) {
|
|
14
|
-
console.log(chalk_1.default.
|
|
15
|
-
return;
|
|
14
|
+
console.log(chalk_1.default.yellow('⚠ Warning: Not running as root/sudo. AI setup (Ollama, services) may fail without proper privileges.'));
|
|
16
15
|
}
|
|
17
16
|
instances_1.logger.info('Setting up Ollama AI service', { model: options.model, autoInstall: options.autoInstall });
|
|
18
17
|
console.log(chalk_1.default.blue('\n🤖 Ollama AI Setup'));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/commands/application/events.ts"],"names":[],"mappings":"AAgBA,wBAAsB,uBAAuB,CAAC,OAAO,EAAE;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2ChB"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.handleApplicationEvents = handleApplicationEvents;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const instances_1 = require("../../services/instances");
|
|
9
|
+
const config_validator_1 = require("../utils/config-validator");
|
|
10
|
+
const application_prompt_1 = require("../utils/application-prompt");
|
|
11
|
+
function formatTimestamp(ms) {
|
|
12
|
+
return new Date(ms).toISOString().replace('T', ' ').replace('Z', ' UTC');
|
|
13
|
+
}
|
|
14
|
+
function eventTypeColor(eventType) {
|
|
15
|
+
if (eventType.includes('error') || eventType.includes('stopped'))
|
|
16
|
+
return chalk_1.default.red;
|
|
17
|
+
if (eventType.includes('started') || eventType.includes('ready'))
|
|
18
|
+
return chalk_1.default.green;
|
|
19
|
+
if (eventType.includes('deploying') || eventType.includes('pending'))
|
|
20
|
+
return chalk_1.default.yellow;
|
|
21
|
+
return chalk_1.default.white;
|
|
22
|
+
}
|
|
23
|
+
async function handleApplicationEvents(options) {
|
|
24
|
+
(0, config_validator_1.validateConfig)(instances_1.configManager, {
|
|
25
|
+
requireAuth: true,
|
|
26
|
+
requireOrganization: true,
|
|
27
|
+
});
|
|
28
|
+
const appId = await (0, application_prompt_1.getApplicationId)(instances_1.applicationService, options.appId, {
|
|
29
|
+
message: 'Select application to view events for:',
|
|
30
|
+
required: true,
|
|
31
|
+
});
|
|
32
|
+
if (!appId) {
|
|
33
|
+
throw new Error('Application ID is required');
|
|
34
|
+
}
|
|
35
|
+
const limit = options.limit ? parseInt(options.limit, 10) : 50;
|
|
36
|
+
const events = await instances_1.applicationService.getApplicationLifecycleEvents(appId, limit);
|
|
37
|
+
if (options.json) {
|
|
38
|
+
console.log(JSON.stringify(events, null, 2));
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
if (events.length === 0) {
|
|
42
|
+
console.log(chalk_1.default.yellow('No lifecycle events found for this application'));
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
console.log(chalk_1.default.bold(`Lifecycle events for application ${appId}`) + chalk_1.default.gray(` (${events.length} events)\n`));
|
|
46
|
+
for (const event of events) {
|
|
47
|
+
const color = eventTypeColor(event.eventType ?? '');
|
|
48
|
+
const time = chalk_1.default.gray(formatTimestamp(event.timestamp));
|
|
49
|
+
const source = chalk_1.default.gray(`[${event.source ?? 'unknown'}]`);
|
|
50
|
+
const action = color(event.eventAction ?? event.eventType);
|
|
51
|
+
console.log(`${time} ${source} ${action}`);
|
|
52
|
+
if (event.message) {
|
|
53
|
+
console.log(` ${event.message}`);
|
|
54
|
+
}
|
|
55
|
+
if (event.metadata && Object.keys(event.metadata).length > 0) {
|
|
56
|
+
console.log(chalk_1.default.gray(` ${JSON.stringify(event.metadata)}`));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/application/list.ts"],"names":[],"mappings":"AAKA,wBAAsB,qBAAqB,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/application/list.ts"],"names":[],"mappings":"AAKA,wBAAsB,qBAAqB,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCtF"}
|
|
@@ -28,6 +28,8 @@ async function handleApplicationList(options) {
|
|
|
28
28
|
servingIp: app.servingIp,
|
|
29
29
|
port: app.port,
|
|
30
30
|
protocol: app.protocol,
|
|
31
|
+
subtype: app.subtype,
|
|
32
|
+
configuration: app.configuration,
|
|
31
33
|
status: app.status,
|
|
32
34
|
workloadId: app.workloadId,
|
|
33
35
|
createdAt: app.createdAt,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/application/update.ts"],"names":[],"mappings":"AAMA,wBAAsB,uBAAuB,CAAC,OAAO,EAAE;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/application/update.ts"],"names":[],"mappings":"AAMA,wBAAsB,uBAAuB,CAAC,OAAO,EAAE;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4DhB"}
|
|
@@ -37,8 +37,11 @@ async function handleApplicationUpdate(options) {
|
|
|
37
37
|
.map((s) => s.trim())
|
|
38
38
|
.filter(Boolean);
|
|
39
39
|
}
|
|
40
|
+
if (options.targetState !== undefined && options.targetState.trim().length > 0) {
|
|
41
|
+
updates.targetState = options.targetState.trim();
|
|
42
|
+
}
|
|
40
43
|
if (Object.keys(updates).length === 0) {
|
|
41
|
-
console.log(chalk_1.default.yellow('No updates specified. Use --name, --auth-modes, or --
|
|
44
|
+
console.log(chalk_1.default.yellow('No updates specified. Use --name, --auth-modes, --allowed-orgs, or --target-state.'));
|
|
42
45
|
return;
|
|
43
46
|
}
|
|
44
47
|
instances_1.logger.debug('Updating application', { appId, updates });
|
|
@@ -51,5 +54,7 @@ async function handleApplicationUpdate(options) {
|
|
|
51
54
|
if (updates.allowedOrganizations && updates.allowedOrganizations.length > 0) {
|
|
52
55
|
console.log(chalk_1.default.gray(` Allowed organizations: ${updates.allowedOrganizations.join(', ')}`));
|
|
53
56
|
}
|
|
57
|
+
if (updates.targetState)
|
|
58
|
+
console.log(chalk_1.default.gray(` Target state: ${updates.targetState}`));
|
|
54
59
|
}
|
|
55
60
|
//# sourceMappingURL=update.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../../src/commands/application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../../src/commands/application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+e/D"}
|
|
@@ -13,6 +13,7 @@ const create_managed_process_1 = require("./application/create-managed-process")
|
|
|
13
13
|
const create_stubs_1 = require("./application/create-stubs");
|
|
14
14
|
const create_vm_1 = require("./application/create-vm");
|
|
15
15
|
const ssh_1 = require("./application/ssh");
|
|
16
|
+
const events_1 = require("./application/events");
|
|
16
17
|
const list_2 = require("./application/api-keys/list");
|
|
17
18
|
const create_1 = require("./application/api-keys/create");
|
|
18
19
|
const delete_2 = require("./application/api-keys/delete");
|
|
@@ -190,6 +191,18 @@ Examples:
|
|
|
190
191
|
requireAuth: true,
|
|
191
192
|
requireOrganization: true,
|
|
192
193
|
}));
|
|
194
|
+
appCommand
|
|
195
|
+
.command('events')
|
|
196
|
+
.description('Show lifecycle events for an application')
|
|
197
|
+
.option('-i, --app-id <id>', 'Application ID')
|
|
198
|
+
.option('-n, --limit <number>', 'Maximum number of events to return', '50')
|
|
199
|
+
.option('--json', 'Output as JSON')
|
|
200
|
+
.action((0, command_wrapper_1.wrapCommand)(async (options) => {
|
|
201
|
+
await (0, events_1.handleApplicationEvents)(options);
|
|
202
|
+
}, {
|
|
203
|
+
requireAuth: true,
|
|
204
|
+
requireOrganization: true,
|
|
205
|
+
}));
|
|
193
206
|
appCommand
|
|
194
207
|
.command('update')
|
|
195
208
|
.description('Update an existing application (e.g. auth modes, name)')
|
|
@@ -197,6 +210,7 @@ Examples:
|
|
|
197
210
|
.option('-n, --name <name>', 'Application name')
|
|
198
211
|
.option('--auth-modes <modes>', 'Auth modes: none, org, api-key (comma-separated for multiple)')
|
|
199
212
|
.option('--allowed-orgs <ids>', 'Comma-separated organization IDs allowed (when org auth is used)')
|
|
213
|
+
.option('--target-state <state>', 'Target lifecycle state: running, suspended')
|
|
200
214
|
.action((0, command_wrapper_1.wrapCommand)(async (options) => {
|
|
201
215
|
await (0, update_1.handleApplicationUpdate)(options);
|
|
202
216
|
}, {
|
package/dist/commands/auth.js
CHANGED
|
@@ -365,7 +365,7 @@ async function handleUserLogin(configManager, authService, savedEmail, isFirstRu
|
|
|
365
365
|
console.log(chalk_1.default.gray('1. Use the "edgible signup" command'));
|
|
366
366
|
console.log(chalk_1.default.gray('2. Visit https://edgible.com/signup in your browser'));
|
|
367
367
|
console.log(chalk_1.default.gray('3. Use device login to create a device without an account'));
|
|
368
|
-
console.log(chalk_1.default.gray('4. Come back later and run "edgible login" again\n'));
|
|
368
|
+
console.log(chalk_1.default.gray('4. Come back later and run "edgible auth login" again\n'));
|
|
369
369
|
}
|
|
370
370
|
else {
|
|
371
371
|
console.log(chalk_1.default.gray('You can create an account by visiting the Edgible website or using the signup command.'));
|
|
@@ -20,7 +20,7 @@ function wrapCommand(action, wrapperOptions = {}) {
|
|
|
20
20
|
const hasTokens = !!(config.accessToken || config.idToken);
|
|
21
21
|
const hasDeviceCreds = !!(config.deviceId && config.devicePassword);
|
|
22
22
|
if (!hasTokens && !hasDeviceCreds) {
|
|
23
|
-
throw new errors_1.ConfigError('Not authenticated. Please run "edgible login" first.');
|
|
23
|
+
throw new errors_1.ConfigError('Not authenticated. Please run "edgible auth login" first.');
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
if (requireOrganization) {
|
package/dist/commands/config.js
CHANGED
|
@@ -71,7 +71,7 @@ function setupConfigCommands(program) {
|
|
|
71
71
|
instances_1.configManager.clearConfig();
|
|
72
72
|
instances_1.logger.info('Configuration reset (non-interactive)');
|
|
73
73
|
console.log(chalk_1.default.green('✓ CLI state has been reset'));
|
|
74
|
-
console.log(chalk_1.default.gray('Run "edgible login" to start fresh'));
|
|
74
|
+
console.log(chalk_1.default.gray('Run "edgible auth login" to start fresh'));
|
|
75
75
|
}
|
|
76
76
|
else {
|
|
77
77
|
// Interactive mode: ask for confirmation
|
|
@@ -87,7 +87,7 @@ function setupConfigCommands(program) {
|
|
|
87
87
|
instances_1.configManager.clearConfig();
|
|
88
88
|
instances_1.logger.info('Configuration reset (interactive)');
|
|
89
89
|
console.log(chalk_1.default.green('✓ CLI state has been reset'));
|
|
90
|
-
console.log(chalk_1.default.gray('Run "edgible login" to start fresh'));
|
|
90
|
+
console.log(chalk_1.default.gray('Run "edgible auth login" to start fresh'));
|
|
91
91
|
}
|
|
92
92
|
else {
|
|
93
93
|
instances_1.logger.debug('Configuration reset cancelled');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/commands/debug.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/commands/debug.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqmBzD"}
|
package/dist/commands/debug.js
CHANGED
|
@@ -61,8 +61,7 @@ function setupDebugCommands(program) {
|
|
|
61
61
|
.option('--local', 'Use local agent build from agent-v2/dist/ (development only)')
|
|
62
62
|
.action((0, command_wrapper_1.wrapCommand)(async (options) => {
|
|
63
63
|
if (!(0, sudo_checker_1.checkSudoPermissions)()) {
|
|
64
|
-
console.log(chalk_1.default.
|
|
65
|
-
return;
|
|
64
|
+
console.log(chalk_1.default.yellow('⚠ Warning: Not running as root/sudo. Debug full-cycle steps (install, services) may fail without proper privileges.'));
|
|
66
65
|
}
|
|
67
66
|
console.log(chalk_1.default.blue.bold('\n═══════════════════════════════════════════'));
|
|
68
67
|
console.log(chalk_1.default.blue.bold(' Full Debug Cycle'));
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Stack validate command handler
|
|
3
|
+
*
|
|
4
|
+
* Validation is purely local (YAML parsing + dependency graph check).
|
|
5
|
+
* It does NOT require authentication or an organization ID.
|
|
6
|
+
* Use StackParser and DependencyGraphManager directly to avoid the eager
|
|
7
|
+
* org-ID check in getServiceInstances().
|
|
3
8
|
*/
|
|
4
9
|
export declare function handleStackValidate(options: {
|
|
5
10
|
file?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/commands/stack/validate.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/commands/stack/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCnF"}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
3
|
* Stack validate command handler
|
|
4
|
+
*
|
|
5
|
+
* Validation is purely local (YAML parsing + dependency graph check).
|
|
6
|
+
* It does NOT require authentication or an organization ID.
|
|
7
|
+
* Use StackParser and DependencyGraphManager directly to avoid the eager
|
|
8
|
+
* org-ID check in getServiceInstances().
|
|
4
9
|
*/
|
|
5
10
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
11
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
@@ -9,14 +14,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
9
14
|
exports.handleStackValidate = handleStackValidate;
|
|
10
15
|
const chalk_1 = __importDefault(require("chalk"));
|
|
11
16
|
const instances_1 = require("../../services/instances");
|
|
17
|
+
const StackParser_1 = require("../../services/stack/StackParser");
|
|
18
|
+
const DependencyGraphManager_1 = require("../../services/stack/DependencyGraphManager");
|
|
12
19
|
const stack_file_1 = require("../../utils/stack-file");
|
|
13
20
|
async function handleStackValidate(options) {
|
|
14
|
-
const
|
|
21
|
+
const parser = new StackParser_1.StackParser(instances_1.logger);
|
|
22
|
+
const depManager = new DependencyGraphManager_1.DependencyGraphManager(instances_1.logger);
|
|
15
23
|
try {
|
|
16
24
|
const file = (0, stack_file_1.findStackFile)(options.file);
|
|
17
|
-
logger.info(`Validating stack file: ${file}`);
|
|
18
|
-
const result = await
|
|
25
|
+
instances_1.logger.info(`Validating stack file: ${file}`);
|
|
26
|
+
const result = await parser.validate(file);
|
|
19
27
|
if (result.valid) {
|
|
28
|
+
// Additional validation: dependency graph
|
|
29
|
+
const stack = await parser.parseFile(file);
|
|
30
|
+
depManager.validate(stack.applications);
|
|
20
31
|
console.log(chalk_1.default.green('✓ Stack validation passed'));
|
|
21
32
|
if (result.warnings.length > 0) {
|
|
22
33
|
console.log(chalk_1.default.yellow('\nWarnings:'));
|
|
@@ -36,7 +47,7 @@ async function handleStackValidate(options) {
|
|
|
36
47
|
}
|
|
37
48
|
}
|
|
38
49
|
catch (error) {
|
|
39
|
-
logger.error(`Validation error: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
50
|
+
instances_1.logger.error(`Validation error: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
40
51
|
console.log(chalk_1.default.red(`\n✗ Validation failed: ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
41
52
|
process.exit(1);
|
|
42
53
|
}
|
|
@@ -19,7 +19,7 @@ function validateConfig(configManager, options = {}) {
|
|
|
19
19
|
const hasTokens = !!(config.accessToken || config.idToken);
|
|
20
20
|
const hasDeviceCreds = !!(config.deviceId && config.devicePassword);
|
|
21
21
|
if (!hasTokens && !hasDeviceCreds) {
|
|
22
|
-
throw new errors_1.ConfigError('Not authenticated. Please run "edgible login" first.');
|
|
22
|
+
throw new errors_1.ConfigError('Not authenticated. Please run "edgible auth login" first.');
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
if (requireOrganization) {
|
|
@@ -24,7 +24,9 @@ export interface Application {
|
|
|
24
24
|
servingIp: string;
|
|
25
25
|
port: number;
|
|
26
26
|
protocol: 'http' | 'https' | 'tcp' | 'udp';
|
|
27
|
-
status: 'active' | 'inactive' | 'pending';
|
|
27
|
+
status: 'active' | 'inactive' | 'pending' | 'deployed' | 'error' | 'shutdown' | 'deploying' | 'unknown';
|
|
28
|
+
subtype?: string;
|
|
29
|
+
configuration?: Record<string, unknown>;
|
|
28
30
|
createdAt: string;
|
|
29
31
|
description?: string;
|
|
30
32
|
url?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkloadDetector.d.ts","sourceRoot":"","sources":["../../src/detection/WorkloadDetector.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,YAAY,GAAG,IAAI,GAAG,SAAS,CAAC;IACjD,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,KAAK,GAAG,KAAK,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC;IAC3C,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"WorkloadDetector.d.ts","sourceRoot":"","sources":["../../src/detection/WorkloadDetector.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,YAAY,GAAG,IAAI,GAAG,SAAS,CAAC;IACjD,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,KAAK,GAAG,KAAK,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC;IAC3C,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;IACxG,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,gBAAgB;IAC3B;;OAEG;WACiB,eAAe,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IA2B1D;;OAEG;mBACkB,qBAAqB;IAmE1C;;OAEG;mBACkB,yBAAyB;IA4D9C;;OAEG;mBACkB,iBAAiB;IAsDtC;;OAEG;mBACkB,sBAAsB;IAyD3C;;OAEG;WACW,gBAAgB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI;IAwD3D;;OAEG;WACW,kBAAkB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM;CAMhE"}
|
|
@@ -68,14 +68,14 @@ function main() {
|
|
|
68
68
|
log('✅ Edgible CLI installed globally', colors.green);
|
|
69
69
|
log('\n');
|
|
70
70
|
log('Quick Start:', colors.bright);
|
|
71
|
-
log(' 1. Run: edgible login', colors.gray);
|
|
71
|
+
log(' 1. Run: edgible auth login', colors.gray);
|
|
72
72
|
log(' 2. Run: edgible --help', colors.gray);
|
|
73
73
|
log('\n');
|
|
74
74
|
} else {
|
|
75
75
|
log('📦 Edgible CLI installed locally', colors.cyan);
|
|
76
76
|
log('\n');
|
|
77
77
|
log('Quick Start:', colors.bright);
|
|
78
|
-
log(' 1. Run: npx edgible login', colors.gray);
|
|
78
|
+
log(' 1. Run: npx edgible auth login', colors.gray);
|
|
79
79
|
log(' 2. Run: npx edgible --help', colors.gray);
|
|
80
80
|
log('\n');
|
|
81
81
|
log('For global access, install with: npm install -g edgible-cli', colors.gray);
|
|
@@ -745,7 +745,7 @@ class LocalAgentManager {
|
|
|
745
745
|
provideTroubleshootingSteps(errorMessage) {
|
|
746
746
|
console.log(chalk_1.default.yellow('\nTroubleshooting steps:'));
|
|
747
747
|
if (errorMessage.includes('Device ID')) {
|
|
748
|
-
console.log(' 1. Run "edgible login" to authenticate');
|
|
748
|
+
console.log(' 1. Run "edgible auth login" to authenticate');
|
|
749
749
|
console.log(' 2. Run "edgible device-login" if using device credentials');
|
|
750
750
|
}
|
|
751
751
|
if (errorMessage.includes('Agent binary not found')) {
|
|
@@ -52,6 +52,7 @@ export interface ApplicationService {
|
|
|
52
52
|
dependsOnApplicationIds?: string[];
|
|
53
53
|
}): Promise<unknown>;
|
|
54
54
|
getApplicationVmSshKey(applicationId: string): Promise<string | null>;
|
|
55
|
+
getApplicationLifecycleEvents(applicationId: string, limit?: number): Promise<any[]>;
|
|
55
56
|
}
|
|
56
57
|
export declare class ApplicationServiceImpl implements ApplicationService {
|
|
57
58
|
private apiClient;
|
|
@@ -134,5 +135,6 @@ export declare class ApplicationServiceImpl implements ApplicationService {
|
|
|
134
135
|
* Returns null if no key is stored (user must provide --key themselves).
|
|
135
136
|
*/
|
|
136
137
|
getApplicationVmSshKey(applicationId: string): Promise<string | null>;
|
|
138
|
+
getApplicationLifecycleEvents(applicationId: string, limit?: number): Promise<any[]>;
|
|
137
139
|
}
|
|
138
140
|
//# sourceMappingURL=ApplicationService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApplicationService.d.ts","sourceRoot":"","sources":["../../../src/services/application/ApplicationService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAEzE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,CACd,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,EAC1C,WAAW,CAAC,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,CAAC,CAAC;IACxB,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1C,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACjD,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QACzC,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACxC,wBAAwB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAChD,CAAC,CAAC;IACH,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD,iCAAiC,CAAC,MAAM,EAAE;QACxC,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC;QAC3C,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,OAAO,EAAE,mBAAmB,GAAG,gBAAgB,GAAG,SAAS,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,IAAI,CAAC;QAC1G,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACxC,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC,CAAC;QAC9C,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;QAChC,2FAA2F;QAC3F,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;KACpC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrB,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACnD,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACpF,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACtD,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACzG,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACnF,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC,CAAC;QAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvP,sBAAsB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"ApplicationService.d.ts","sourceRoot":"","sources":["../../../src/services/application/ApplicationService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAEzE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,CACd,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,EAC1C,WAAW,CAAC,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,CAAC,CAAC;IACxB,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1C,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACjD,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QACzC,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACxC,wBAAwB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAChD,CAAC,CAAC;IACH,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD,iCAAiC,CAAC,MAAM,EAAE;QACxC,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC;QAC3C,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,OAAO,EAAE,mBAAmB,GAAG,gBAAgB,GAAG,SAAS,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,IAAI,CAAC;QAC1G,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACxC,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC,CAAC;QAC9C,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;QAChC,2FAA2F;QAC3F,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;KACpC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrB,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACnD,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACpF,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACtD,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACzG,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACnF,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC,CAAC;QAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvP,sBAAsB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACtE,6BAA6B,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;CACtF;AAED,qBAAa,sBAAuB,YAAW,kBAAkB;IAC/D,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAqB;gBAGvC,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM;IAWhB,OAAO,CAAC,iBAAiB;IAUnB,gBAAgB,CACpB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,KAAc,EACnD,WAAW,CAAC,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,CAAC;IAmEjB,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAgIzC,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAsChD,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAC/C,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACxC,wBAAwB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAChD,CAAC;IAiBI,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAkB/C,iCAAiC,CAAC,MAAM,EAAE;QAC9C,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC;QAC3C,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,OAAO,EAAE,mBAAmB,GAAG,gBAAgB,GAAG,SAAS,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,IAAI,CAAC;QAC1G,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACxC,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC,CAAC;QAC9C,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;QAChC,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;KACpC,GAAG,OAAO,CAAC,OAAO,CAAC;IAyDpB;;OAEG;IACG,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAYxD;;OAEG;IACG,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAYzF;;OAEG;IACG,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWvE;;OAEG;IACG,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAY3D;;OAEG;IACG,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAY9G;;OAEG;IACG,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAYxF;;OAEG;IACG,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW3E;;OAEG;IACG,iBAAiB,CACrB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE;QACP,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC,CAAC;QAC9C,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;QAChC,WAAW,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC;QACtC,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;KACpC,GACA,OAAO,CAAC,OAAO,CAAC;IAWnB;;;OAGG;IACG,sBAAsB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAcrE,6BAA6B,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;CAoB3F"}
|
|
@@ -186,7 +186,9 @@ class ApplicationServiceImpl {
|
|
|
186
186
|
servingIp,
|
|
187
187
|
port,
|
|
188
188
|
protocol,
|
|
189
|
-
status: app.status
|
|
189
|
+
status: app.status,
|
|
190
|
+
subtype: app.subtype,
|
|
191
|
+
configuration: app.configuration,
|
|
190
192
|
createdAt: app.createdAt,
|
|
191
193
|
description: app.description,
|
|
192
194
|
};
|
|
@@ -274,7 +276,7 @@ class ApplicationServiceImpl {
|
|
|
274
276
|
this.tokenManager.restoreTokensFromConfig(this.apiClient);
|
|
275
277
|
const config = this.configManager.getConfig();
|
|
276
278
|
if (!config.organizationId) {
|
|
277
|
-
throw new Error('Not logged in. Please run "edgible login" first.');
|
|
279
|
+
throw new Error('Not logged in. Please run "edgible auth login" first.');
|
|
278
280
|
}
|
|
279
281
|
// Build configuration object, merging provided configuration with port and protocol
|
|
280
282
|
const configuration = {
|
|
@@ -446,6 +448,21 @@ class ApplicationServiceImpl {
|
|
|
446
448
|
throw error;
|
|
447
449
|
}
|
|
448
450
|
}
|
|
451
|
+
async getApplicationLifecycleEvents(applicationId, limit) {
|
|
452
|
+
try {
|
|
453
|
+
await this.tokenManager.ensureValidToken(this.apiClient, this.authService.loginDevice.bind(this.authService));
|
|
454
|
+
const config = this.configManager.getConfig();
|
|
455
|
+
if (!config.organizationId) {
|
|
456
|
+
throw new Error('Not logged in. Please run "edgible auth login" first.');
|
|
457
|
+
}
|
|
458
|
+
const response = await this.apiClient.getApplicationLifecycleEvents(config.organizationId, applicationId, limit);
|
|
459
|
+
return response.events ?? [];
|
|
460
|
+
}
|
|
461
|
+
catch (error) {
|
|
462
|
+
this.logger.error('Failed to get application lifecycle events', error);
|
|
463
|
+
throw new Error(`Failed to get lifecycle events: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
464
|
+
}
|
|
465
|
+
}
|
|
449
466
|
}
|
|
450
467
|
exports.ApplicationServiceImpl = ApplicationServiceImpl;
|
|
451
468
|
//# sourceMappingURL=ApplicationService.js.map
|
|
@@ -65,7 +65,7 @@ class DeviceServiceImpl {
|
|
|
65
65
|
this.tokenManager.restoreTokensFromConfig(this.apiClient);
|
|
66
66
|
const token = this.apiClient.getIdToken() ?? this.apiClient.getAccessToken();
|
|
67
67
|
if (!token) {
|
|
68
|
-
throw new Error('No auth token available. Please run "edgible login" first.');
|
|
68
|
+
throw new Error('No auth token available. Please run "edgible auth login" first.');
|
|
69
69
|
}
|
|
70
70
|
const base = telemetryBaseUrl.replace(/\/$/, '');
|
|
71
71
|
const path = endpoint.startsWith('/') ? endpoint : `/${endpoint}`;
|
package/dist/services/edgible.js
CHANGED
|
@@ -2987,7 +2987,7 @@ console.log('Edgible Agent started successfully');
|
|
|
2987
2987
|
await this.tokenManager.ensureValidToken(this.apiClient, this.loginDevice.bind(this));
|
|
2988
2988
|
const config = this.configManager.getConfig();
|
|
2989
2989
|
if (!config.organizationId) {
|
|
2990
|
-
throw new Error('Not logged in. Please run "edgible login" first.');
|
|
2990
|
+
throw new Error('Not logged in. Please run "edgible auth login" first.');
|
|
2991
2991
|
}
|
|
2992
2992
|
// Build configuration object, merging provided configuration with port and protocol
|
|
2993
2993
|
const configuration = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DependencyGraphManager.d.ts","sourceRoot":"","sources":["../../../src/services/stack/DependencyGraphManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,qBAAa,sBAAsB;IACrB,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAElC;;;;OAIG;IACH,UAAU,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAoBnE;;;;OAIG;IACH,YAAY,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI;IAwC/D;;;;;;OAMG;IACH,kBAAkB,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,MAAM,EAAE;
|
|
1
|
+
{"version":3,"file":"DependencyGraphManager.d.ts","sourceRoot":"","sources":["../../../src/services/stack/DependencyGraphManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,qBAAa,sBAAsB;IACrB,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAElC;;;;OAIG;IACH,UAAU,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAoBnE;;;;OAIG;IACH,YAAY,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI;IAwC/D;;;;;;OAMG;IACH,kBAAkB,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,MAAM,EAAE;IA+C9D;;;;;OAKG;IACH,gBAAgB,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,MAAM,EAAE;IAQ5D;;;;;OAKG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,MAAM,EAAE;IAK5E;;;;;OAKG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,MAAM,EAAE;IAY1E;;;;;;;OAOG;IACH,SAAS,CACP,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,gBAAgB,EAAE,EAChC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,OAAO;IAOV;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,IAAI;CAwBjD"}
|
|
@@ -88,15 +88,10 @@ class DependencyGraphManager {
|
|
|
88
88
|
const graph = this.buildGraph(applications);
|
|
89
89
|
const inDegree = new Map();
|
|
90
90
|
const result = [];
|
|
91
|
-
// Calculate in-degree for each node
|
|
91
|
+
// Calculate in-degree for each node.
|
|
92
|
+
// in-degree of X = number of dependencies X must wait for before it can deploy.
|
|
92
93
|
for (const app of applications) {
|
|
93
|
-
inDegree.set(app.name,
|
|
94
|
-
}
|
|
95
|
-
for (const app of applications) {
|
|
96
|
-
const deps = graph.get(app.name) || [];
|
|
97
|
-
for (const dep of deps) {
|
|
98
|
-
inDegree.set(dep, (inDegree.get(dep) || 0) + 1);
|
|
99
|
-
}
|
|
94
|
+
inDegree.set(app.name, (graph.get(app.name) || []).length);
|
|
100
95
|
}
|
|
101
96
|
// Queue of nodes with no dependencies
|
|
102
97
|
const queue = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StackService.d.ts","sourceRoot":"","sources":["../../../src/services/stack/StackService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAKvE,OAAO,EAKL,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,EACd,WAAW,EAEX,SAAS,EAGV,MAAM,mBAAmB,CAAC;AAO3B,qBAAa,YAAY;IAOrB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,MAAM;IAThB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,iBAAiB,CAAyB;gBAGxC,SAAS,EAAE,SAAS,EACpB,kBAAkB,EAAE,kBAAkB,EACtC,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM;IAQxB;;;;OAIG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAgCrE;;;;OAIG;IACG,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"StackService.d.ts","sourceRoot":"","sources":["../../../src/services/stack/StackService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAKvE,OAAO,EAKL,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,EACd,WAAW,EAEX,SAAS,EAGV,MAAM,mBAAmB,CAAC;AAO3B,qBAAa,YAAY;IAOrB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,MAAM;IAThB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,iBAAiB,CAAyB;gBAGxC,SAAS,EAAE,SAAS,EACpB,kBAAkB,EAAE,kBAAkB,EACtC,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM;IAQxB;;;;OAIG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAgCrE;;;;OAIG;IACG,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAgHhE;;;;OAIG;IACG,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAuEtE;;;;OAIG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAY5D;;;;OAIG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IA0CrD;;;;;OAKG;YACW,YAAY;IA4B1B;;;;;OAKG;YACW,iBAAiB;IAiF/B;;;;OAIG;YACW,uBAAuB;IAyCrC;;;;OAIG;YACW,uBAAuB;CA4BtC"}
|
|
@@ -153,14 +153,25 @@ class StackService {
|
|
|
153
153
|
}
|
|
154
154
|
catch (error) {
|
|
155
155
|
const errorMsg = error instanceof Error ? error.message : 'Unknown error';
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
156
|
+
const isAlreadyExists = error?.statusCode === 409 ||
|
|
157
|
+
errorMsg.toLowerCase().includes('already exists');
|
|
158
|
+
// When --force is set, treat "already exists" as a successful no-op so that
|
|
159
|
+
// dependent apps can still be deployed in the same run.
|
|
160
|
+
if (options.force && isAlreadyExists) {
|
|
161
|
+
this.logger.info(`${appName} already exists — skipping (--force)`);
|
|
162
|
+
deployed.push({ name: appName, applicationId: 'existing', urls: [] });
|
|
163
|
+
deployedSet.add(appName);
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
this.logger.error(`Failed to deploy ${appName}: ${errorMsg}`);
|
|
167
|
+
failed.push({
|
|
168
|
+
name: appName,
|
|
169
|
+
error: errorMsg,
|
|
170
|
+
});
|
|
171
|
+
// Stop deployment on first failure (fail-fast)
|
|
172
|
+
if (!options.force) {
|
|
173
|
+
break;
|
|
174
|
+
}
|
|
164
175
|
}
|
|
165
176
|
}
|
|
166
177
|
}
|
|
@@ -93,28 +93,52 @@ export declare const CreateApplicationSchema: z.ZodObject<{
|
|
|
93
93
|
dockerComposePath: z.ZodOptional<z.ZodString>;
|
|
94
94
|
systemdService: z.ZodOptional<z.ZodString>;
|
|
95
95
|
deleteVolumesOnDeletion: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
96
|
+
vmBackend: z.ZodOptional<z.ZodEnum<["qemu", "firecracker"]>>;
|
|
97
|
+
diskImage: z.ZodOptional<z.ZodString>;
|
|
98
|
+
memory: z.ZodOptional<z.ZodNumber>;
|
|
99
|
+
cpus: z.ZodOptional<z.ZodNumber>;
|
|
100
|
+
sshPort: z.ZodOptional<z.ZodNumber>;
|
|
101
|
+
arch: z.ZodOptional<z.ZodEnum<["x86_64", "aarch64", "arm64"]>>;
|
|
102
|
+
sshPublicKey: z.ZodOptional<z.ZodString>;
|
|
103
|
+
diskImageAlias: z.ZodOptional<z.ZodString>;
|
|
96
104
|
}, "strip", z.ZodTypeAny, {
|
|
97
105
|
port: number;
|
|
98
106
|
protocol: "http" | "https" | "tcp" | "udp";
|
|
99
107
|
deleteVolumesOnDeletion: boolean;
|
|
100
108
|
command?: string | undefined;
|
|
101
109
|
logFile?: string | undefined;
|
|
110
|
+
vmBackend?: "qemu" | "firecracker" | undefined;
|
|
111
|
+
diskImage?: string | undefined;
|
|
112
|
+
memory?: number | undefined;
|
|
113
|
+
cpus?: number | undefined;
|
|
114
|
+
sshPort?: number | undefined;
|
|
115
|
+
sshPublicKey?: string | undefined;
|
|
102
116
|
dockerComposePath?: string | undefined;
|
|
103
117
|
env?: Record<string, string> | undefined;
|
|
104
118
|
workingDirectory?: string | undefined;
|
|
105
119
|
healthCheckPath?: string | undefined;
|
|
106
120
|
systemdService?: string | undefined;
|
|
121
|
+
arch?: "x86_64" | "aarch64" | "arm64" | undefined;
|
|
122
|
+
diskImageAlias?: string | undefined;
|
|
107
123
|
}, {
|
|
108
124
|
port: number;
|
|
109
125
|
protocol: "http" | "https" | "tcp" | "udp";
|
|
110
126
|
command?: string | undefined;
|
|
111
127
|
logFile?: string | undefined;
|
|
128
|
+
vmBackend?: "qemu" | "firecracker" | undefined;
|
|
129
|
+
diskImage?: string | undefined;
|
|
130
|
+
memory?: number | undefined;
|
|
131
|
+
cpus?: number | undefined;
|
|
132
|
+
sshPort?: number | undefined;
|
|
133
|
+
sshPublicKey?: string | undefined;
|
|
112
134
|
dockerComposePath?: string | undefined;
|
|
113
135
|
env?: Record<string, string> | undefined;
|
|
114
136
|
workingDirectory?: string | undefined;
|
|
115
137
|
deleteVolumesOnDeletion?: boolean | undefined;
|
|
116
138
|
healthCheckPath?: string | undefined;
|
|
117
139
|
systemdService?: string | undefined;
|
|
140
|
+
arch?: "x86_64" | "aarch64" | "arm64" | undefined;
|
|
141
|
+
diskImageAlias?: string | undefined;
|
|
118
142
|
}>;
|
|
119
143
|
hostnames: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
120
144
|
deviceIds: z.ZodArray<z.ZodString, "many">;
|
|
@@ -137,11 +161,19 @@ export declare const CreateApplicationSchema: z.ZodObject<{
|
|
|
137
161
|
deleteVolumesOnDeletion: boolean;
|
|
138
162
|
command?: string | undefined;
|
|
139
163
|
logFile?: string | undefined;
|
|
164
|
+
vmBackend?: "qemu" | "firecracker" | undefined;
|
|
165
|
+
diskImage?: string | undefined;
|
|
166
|
+
memory?: number | undefined;
|
|
167
|
+
cpus?: number | undefined;
|
|
168
|
+
sshPort?: number | undefined;
|
|
169
|
+
sshPublicKey?: string | undefined;
|
|
140
170
|
dockerComposePath?: string | undefined;
|
|
141
171
|
env?: Record<string, string> | undefined;
|
|
142
172
|
workingDirectory?: string | undefined;
|
|
143
173
|
healthCheckPath?: string | undefined;
|
|
144
174
|
systemdService?: string | undefined;
|
|
175
|
+
arch?: "x86_64" | "aarch64" | "arm64" | undefined;
|
|
176
|
+
diskImageAlias?: string | undefined;
|
|
145
177
|
};
|
|
146
178
|
environment: "development" | "staging" | "prod";
|
|
147
179
|
deviceIds: string[];
|
|
@@ -164,12 +196,20 @@ export declare const CreateApplicationSchema: z.ZodObject<{
|
|
|
164
196
|
protocol: "http" | "https" | "tcp" | "udp";
|
|
165
197
|
command?: string | undefined;
|
|
166
198
|
logFile?: string | undefined;
|
|
199
|
+
vmBackend?: "qemu" | "firecracker" | undefined;
|
|
200
|
+
diskImage?: string | undefined;
|
|
201
|
+
memory?: number | undefined;
|
|
202
|
+
cpus?: number | undefined;
|
|
203
|
+
sshPort?: number | undefined;
|
|
204
|
+
sshPublicKey?: string | undefined;
|
|
167
205
|
dockerComposePath?: string | undefined;
|
|
168
206
|
env?: Record<string, string> | undefined;
|
|
169
207
|
workingDirectory?: string | undefined;
|
|
170
208
|
deleteVolumesOnDeletion?: boolean | undefined;
|
|
171
209
|
healthCheckPath?: string | undefined;
|
|
172
210
|
systemdService?: string | undefined;
|
|
211
|
+
arch?: "x86_64" | "aarch64" | "arm64" | undefined;
|
|
212
|
+
diskImageAlias?: string | undefined;
|
|
173
213
|
};
|
|
174
214
|
deviceIds: string[];
|
|
175
215
|
description?: string | undefined;
|
|
@@ -517,8 +557,8 @@ export declare const CreateResourceSchema: z.ZodObject<{
|
|
|
517
557
|
organizationId?: string | undefined;
|
|
518
558
|
status?: "running" | "pending" | "stopped" | "error" | undefined;
|
|
519
559
|
type?: string | undefined;
|
|
520
|
-
description?: string | undefined;
|
|
521
560
|
configuration?: Record<string, unknown> | undefined;
|
|
561
|
+
description?: string | undefined;
|
|
522
562
|
region?: string | undefined;
|
|
523
563
|
tags?: string[] | undefined;
|
|
524
564
|
cost?: number | undefined;
|
|
@@ -529,8 +569,8 @@ export declare const CreateResourceSchema: z.ZodObject<{
|
|
|
529
569
|
organizationId?: string | undefined;
|
|
530
570
|
status?: "running" | "pending" | "stopped" | "error" | undefined;
|
|
531
571
|
type?: string | undefined;
|
|
532
|
-
description?: string | undefined;
|
|
533
572
|
configuration?: Record<string, unknown> | undefined;
|
|
573
|
+
description?: string | undefined;
|
|
534
574
|
region?: string | undefined;
|
|
535
575
|
tags?: string[] | undefined;
|
|
536
576
|
cost?: number | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/types/validation/schemas.ts"],"names":[],"mappings":"AAGE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAuB1B,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;EAMnC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;EAInC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;EAEhC,CAAC;AAGH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;EAK3B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;EAK3B,CAAC;AAEH,eAAO,MAAM,aAAa;;;;;;EAExB,CAAC;AAOH,eAAO,MAAM,uBAAuB
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/types/validation/schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -76,6 +76,15 @@ exports.CreateApplicationSchema = zod_1.z.object({
|
|
|
76
76
|
.optional()
|
|
77
77
|
.default(false)
|
|
78
78
|
.describe('Delete docker volumes when application is permanently deleted'),
|
|
79
|
+
// VM-specific fields
|
|
80
|
+
vmBackend: zod_1.z.enum(['qemu', 'firecracker']).optional(),
|
|
81
|
+
diskImage: zod_1.z.string().optional(),
|
|
82
|
+
memory: zod_1.z.number().int().positive().optional(),
|
|
83
|
+
cpus: zod_1.z.number().int().positive().optional(),
|
|
84
|
+
sshPort: zod_1.z.number().int().min(1).max(65535).optional(),
|
|
85
|
+
arch: zod_1.z.enum(['x86_64', 'aarch64', 'arm64']).optional(),
|
|
86
|
+
sshPublicKey: zod_1.z.string().optional(),
|
|
87
|
+
diskImageAlias: zod_1.z.string().optional(),
|
|
79
88
|
}),
|
|
80
89
|
hostnames: zod_1.z
|
|
81
90
|
.array(zod_1.z
|
|
@@ -158,7 +158,6 @@ class PlatformDetector {
|
|
|
158
158
|
*/
|
|
159
159
|
static async getAvailableOptions() {
|
|
160
160
|
const platform = this.getPlatform();
|
|
161
|
-
const isRoot = await this.isRoot();
|
|
162
161
|
const hasSystemd = await this.hasSystemd();
|
|
163
162
|
const hasLaunchd = await this.hasLaunchd();
|
|
164
163
|
const options = [];
|
|
@@ -172,7 +171,8 @@ class PlatformDetector {
|
|
|
172
171
|
pros: ['Native performance', 'Direct system access', 'Integrated with system logs'],
|
|
173
172
|
cons: ['Requires root privileges', 'Platform-specific'],
|
|
174
173
|
bestFor: 'Production servers, bare metal deployments',
|
|
175
|
-
|
|
174
|
+
// Available when PID1 is systemd; installing the unit still needs root/sudo at runtime
|
|
175
|
+
available: hasSystemd,
|
|
176
176
|
requiresRoot: true
|
|
177
177
|
});
|
|
178
178
|
}
|
|
@@ -186,7 +186,7 @@ class PlatformDetector {
|
|
|
186
186
|
pros: ['Native macOS integration', 'System-managed lifecycle', 'Integrated logs'],
|
|
187
187
|
cons: ['Requires root privileges', 'macOS-specific'],
|
|
188
188
|
bestFor: 'macOS servers, development machines',
|
|
189
|
-
available: hasLaunchd
|
|
189
|
+
available: hasLaunchd,
|
|
190
190
|
requiresRoot: true
|
|
191
191
|
});
|
|
192
192
|
}
|
|
@@ -200,7 +200,7 @@ class PlatformDetector {
|
|
|
200
200
|
pros: ['Native Windows integration', 'System-managed lifecycle', 'Windows Event Log'],
|
|
201
201
|
cons: ['Requires administrator privileges', 'Windows-specific'],
|
|
202
202
|
bestFor: 'Windows servers, production deployments',
|
|
203
|
-
available:
|
|
203
|
+
available: true,
|
|
204
204
|
requiresRoot: true
|
|
205
205
|
});
|
|
206
206
|
}
|