@edgible-team/cli 1.2.4 ā 1.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/agent/agent-handlers.d.ts +45 -0
- package/dist/commands/agent/agent-handlers.d.ts.map +1 -0
- package/dist/commands/agent/agent-handlers.js +1159 -0
- package/dist/commands/agent/install.d.ts +11 -0
- package/dist/commands/agent/install.d.ts.map +1 -0
- package/dist/commands/agent/install.js +399 -0
- package/dist/commands/agent/logs.d.ts +12 -0
- package/dist/commands/agent/logs.d.ts.map +1 -0
- package/dist/commands/agent/logs.js +77 -0
- package/dist/commands/agent/restart.d.ts +4 -0
- package/dist/commands/agent/restart.d.ts.map +1 -0
- package/dist/commands/agent/restart.js +33 -0
- package/dist/commands/agent/set-log-level.d.ts +8 -0
- package/dist/commands/agent/set-log-level.d.ts.map +1 -0
- package/dist/commands/agent/set-log-level.js +133 -0
- package/dist/commands/agent/setup.d.ts +9 -0
- package/dist/commands/agent/setup.d.ts.map +1 -0
- package/dist/commands/agent/setup.js +149 -0
- package/dist/commands/agent/start.d.ts +12 -0
- package/dist/commands/agent/start.d.ts.map +1 -0
- package/dist/commands/agent/start.js +308 -0
- package/dist/commands/agent/status.d.ts +7 -0
- package/dist/commands/agent/status.d.ts.map +1 -0
- package/dist/commands/agent/status.js +68 -0
- package/dist/commands/agent/stop.d.ts +4 -0
- package/dist/commands/agent/stop.d.ts.map +1 -0
- package/dist/commands/agent/stop.js +33 -0
- package/dist/commands/agent/uninstall.d.ts +7 -0
- package/dist/commands/agent/uninstall.d.ts.map +1 -0
- package/dist/commands/agent/uninstall.js +168 -0
- package/dist/commands/agent.d.ts.map +1 -1
- package/dist/commands/agent.js +24 -1190
- package/dist/commands/ai/helpers.d.ts +139 -0
- package/dist/commands/ai/helpers.d.ts.map +1 -0
- package/dist/commands/ai/helpers.js +1470 -0
- package/dist/commands/ai/serve.d.ts +6 -0
- package/dist/commands/ai/serve.d.ts.map +1 -0
- package/dist/commands/ai/serve.js +124 -0
- package/dist/commands/ai/setup.d.ts +14 -0
- package/dist/commands/ai/setup.d.ts.map +1 -0
- package/dist/commands/ai/setup.js +86 -0
- package/dist/commands/ai/status.d.ts +2 -0
- package/dist/commands/ai/status.d.ts.map +1 -0
- package/dist/commands/ai/status.js +160 -0
- package/dist/commands/ai/stop.d.ts +2 -0
- package/dist/commands/ai/stop.d.ts.map +1 -0
- package/dist/commands/ai/stop.js +21 -0
- package/dist/commands/ai/teardown.d.ts +5 -0
- package/dist/commands/ai/teardown.d.ts.map +1 -0
- package/dist/commands/ai/teardown.js +78 -0
- package/dist/commands/ai/test.d.ts +4 -0
- package/dist/commands/ai/test.d.ts.map +1 -0
- package/dist/commands/ai/test.js +65 -0
- package/dist/commands/ai.d.ts.map +1 -1
- package/dist/commands/ai.js +16 -1938
- package/dist/commands/application/api-keys/create.d.ts +6 -0
- package/dist/commands/application/api-keys/create.d.ts.map +1 -0
- package/dist/commands/application/api-keys/create.js +68 -0
- package/dist/commands/application/api-keys/delete.d.ts +6 -0
- package/dist/commands/application/api-keys/delete.d.ts.map +1 -0
- package/dist/commands/application/api-keys/delete.js +79 -0
- package/dist/commands/application/api-keys/list.d.ts +5 -0
- package/dist/commands/application/api-keys/list.d.ts.map +1 -0
- package/dist/commands/application/api-keys/list.js +65 -0
- package/dist/commands/application/api-keys.d.ts +3 -0
- package/dist/commands/application/api-keys.d.ts.map +1 -0
- package/dist/commands/application/api-keys.js +227 -0
- package/dist/commands/application/create-compose.d.ts +3 -0
- package/dist/commands/application/create-compose.d.ts.map +1 -0
- package/dist/commands/application/create-compose.js +381 -0
- package/dist/commands/application/create-docker-compose.d.ts +10 -0
- package/dist/commands/application/create-docker-compose.d.ts.map +1 -0
- package/dist/commands/application/create-docker-compose.js +334 -0
- package/dist/commands/application/create-existing.d.ts +14 -0
- package/dist/commands/application/create-existing.d.ts.map +1 -0
- package/dist/commands/application/create-existing.js +359 -0
- package/dist/commands/application/create-interactive.d.ts +3 -0
- package/dist/commands/application/create-interactive.d.ts.map +1 -0
- package/dist/commands/application/create-interactive.js +326 -0
- package/dist/commands/application/create-managed-process.d.ts +15 -0
- package/dist/commands/application/create-managed-process.d.ts.map +1 -0
- package/dist/commands/application/create-managed-process.js +371 -0
- package/dist/commands/application/create-stubs.d.ts +4 -0
- package/dist/commands/application/create-stubs.d.ts.map +1 -0
- package/dist/commands/application/create-stubs.js +19 -0
- package/dist/commands/application/create-workload.d.ts +5 -0
- package/dist/commands/application/create-workload.d.ts.map +1 -0
- package/dist/commands/application/create-workload.js +48 -0
- package/dist/commands/application/delete.d.ts +6 -0
- package/dist/commands/application/delete.d.ts.map +1 -0
- package/dist/commands/application/delete.js +76 -0
- package/dist/commands/application/get.d.ts +5 -0
- package/dist/commands/application/get.d.ts.map +1 -0
- package/dist/commands/application/get.js +35 -0
- package/dist/commands/application/list.d.ts +4 -0
- package/dist/commands/application/list.d.ts.map +1 -0
- package/dist/commands/application/list.js +41 -0
- package/dist/commands/application/short-codes/create.d.ts +7 -0
- package/dist/commands/application/short-codes/create.d.ts.map +1 -0
- package/dist/commands/application/short-codes/create.js +69 -0
- package/dist/commands/application/short-codes/delete.d.ts +6 -0
- package/dist/commands/application/short-codes/delete.d.ts.map +1 -0
- package/dist/commands/application/short-codes/delete.js +79 -0
- package/dist/commands/application/short-codes/list.d.ts +5 -0
- package/dist/commands/application/short-codes/list.d.ts.map +1 -0
- package/dist/commands/application/short-codes/list.js +63 -0
- package/dist/commands/application/short-codes/toggle.d.ts +5 -0
- package/dist/commands/application/short-codes/toggle.d.ts.map +1 -0
- package/dist/commands/application/short-codes/toggle.js +71 -0
- package/dist/commands/application/short-codes.d.ts +3 -0
- package/dist/commands/application/short-codes.d.ts.map +1 -0
- package/dist/commands/application/short-codes.js +226 -0
- package/dist/commands/application/toggle.d.ts +2 -0
- package/dist/commands/application/toggle.d.ts.map +1 -0
- package/dist/commands/application/toggle.js +78 -0
- package/dist/commands/application/update.d.ts +4 -0
- package/dist/commands/application/update.d.ts.map +1 -0
- package/dist/commands/application/update.js +11 -0
- package/dist/commands/application.d.ts.map +1 -1
- package/dist/commands/application.js +32 -1630
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +31 -49
- package/dist/commands/base/BaseCommand.d.ts +3 -3
- package/dist/commands/base/BaseCommand.d.ts.map +1 -1
- package/dist/commands/base/BaseCommand.js +3 -3
- package/dist/commands/base/command-wrapper.d.ts +0 -4
- package/dist/commands/base/command-wrapper.d.ts.map +1 -1
- package/dist/commands/base/command-wrapper.js +13 -14
- package/dist/commands/base/middleware.d.ts +3 -3
- package/dist/commands/base/middleware.d.ts.map +1 -1
- package/dist/commands/base/middleware.js +4 -4
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +15 -32
- package/dist/commands/connectivity.d.ts.map +1 -1
- package/dist/commands/connectivity.js +6 -11
- package/dist/commands/debug.d.ts.map +1 -1
- package/dist/commands/debug.js +187 -46
- package/dist/commands/discover.d.ts.map +1 -1
- package/dist/commands/discover.js +4 -17
- package/dist/commands/gateway.d.ts.map +1 -1
- package/dist/commands/gateway.js +37 -77
- package/dist/commands/managedGateway/create.d.ts +6 -0
- package/dist/commands/managedGateway/create.d.ts.map +1 -0
- package/dist/commands/managedGateway/create.js +50 -0
- package/dist/commands/managedGateway/delete.d.ts +5 -0
- package/dist/commands/managedGateway/delete.d.ts.map +1 -0
- package/dist/commands/managedGateway/delete.js +57 -0
- package/dist/commands/managedGateway/get.d.ts +4 -0
- package/dist/commands/managedGateway/get.d.ts.map +1 -0
- package/dist/commands/managedGateway/get.js +71 -0
- package/dist/commands/managedGateway/haproxy-stats.d.ts +6 -0
- package/dist/commands/managedGateway/haproxy-stats.d.ts.map +1 -0
- package/dist/commands/managedGateway/haproxy-stats.js +131 -0
- package/dist/commands/managedGateway/list.d.ts +4 -0
- package/dist/commands/managedGateway/list.d.ts.map +1 -0
- package/dist/commands/managedGateway/list.js +50 -0
- package/dist/commands/managedGateway/logs.d.ts +10 -0
- package/dist/commands/managedGateway/logs.d.ts.map +1 -0
- package/dist/commands/managedGateway/logs.js +100 -0
- package/dist/commands/managedGateway/reboot.d.ts +5 -0
- package/dist/commands/managedGateway/reboot.d.ts.map +1 -0
- package/dist/commands/managedGateway/reboot.js +95 -0
- package/dist/commands/managedGateway/resync.d.ts +10 -0
- package/dist/commands/managedGateway/resync.d.ts.map +1 -0
- package/dist/commands/managedGateway/resync.js +69 -0
- package/dist/commands/managedGateway/ssh.d.ts +4 -0
- package/dist/commands/managedGateway/ssh.d.ts.map +1 -0
- package/dist/commands/managedGateway/ssh.js +130 -0
- package/dist/commands/managedGateway/wipe-logs.d.ts +4 -0
- package/dist/commands/managedGateway/wipe-logs.d.ts.map +1 -0
- package/dist/commands/managedGateway/wipe-logs.js +67 -0
- package/dist/commands/managedGateway/wireguard.d.ts +4 -0
- package/dist/commands/managedGateway/wireguard.d.ts.map +1 -0
- package/dist/commands/managedGateway/wireguard.js +68 -0
- package/dist/commands/managedGateway.d.ts.map +1 -1
- package/dist/commands/managedGateway.js +61 -117
- package/dist/commands/utils/config-validator.d.ts +5 -5
- package/dist/commands/utils/config-validator.d.ts.map +1 -1
- package/dist/commands/utils/config-validator.js +8 -8
- package/dist/commands/utils/output-formatter.js +1 -1
- package/dist/config/app-config.d.ts +1 -1
- package/dist/config/app-config.js +2 -2
- package/dist/index.js +0 -3
- package/dist/services/LocalAgentManager.d.ts.map +1 -1
- package/dist/services/LocalAgentManager.js +4 -2
- package/dist/services/agentDeployment/AgentDeploymentService.d.ts +35 -0
- package/dist/services/agentDeployment/AgentDeploymentService.d.ts.map +1 -0
- package/dist/services/agentDeployment/AgentDeploymentService.js +35 -0
- package/dist/services/application/ApplicationService.d.ts +5 -4
- package/dist/services/application/ApplicationService.d.ts.map +1 -1
- package/dist/services/application/ApplicationService.js +22 -35
- package/dist/services/auth/AuthService.d.ts +5 -5
- package/dist/services/auth/AuthService.d.ts.map +1 -1
- package/dist/services/auth/AuthService.js +11 -58
- package/dist/services/daemon/DaemonManagerFactory.d.ts +2 -0
- package/dist/services/daemon/DaemonManagerFactory.d.ts.map +1 -1
- package/dist/services/daemon/DaemonManagerFactory.js +14 -6
- package/dist/services/diagnostics/DiagnosticsService.d.ts +89 -0
- package/dist/services/diagnostics/DiagnosticsService.d.ts.map +1 -0
- package/dist/services/diagnostics/DiagnosticsService.js +37 -0
- package/dist/services/edgible.d.ts +6 -4
- package/dist/services/edgible.d.ts.map +1 -1
- package/dist/services/edgible.js +36 -86
- package/dist/services/gateway/GatewayService.d.ts +5 -6
- package/dist/services/gateway/GatewayService.d.ts.map +1 -1
- package/dist/services/gateway/GatewayService.js +22 -36
- package/dist/services/instances.d.ts +34 -0
- package/dist/services/instances.d.ts.map +1 -0
- package/dist/services/instances.js +64 -0
- package/dist/services/managedGateway/ManagedGatewayService.d.ts +75 -0
- package/dist/services/managedGateway/ManagedGatewayService.d.ts.map +1 -0
- package/dist/services/managedGateway/ManagedGatewayService.js +44 -0
- package/dist/services/token/TokenManager.d.ts +56 -0
- package/dist/services/token/TokenManager.d.ts.map +1 -0
- package/dist/services/token/TokenManager.js +85 -0
- package/dist/types/validation/schemas.d.ts +22 -22
- package/dist/utils/PlatformDetector.d.ts +2 -0
- package/dist/utils/PlatformDetector.d.ts.map +1 -1
- package/dist/utils/PlatformDetector.js +5 -34
- package/dist/validation/schemas.d.ts +6 -6
- package/package.json +1 -1
|
@@ -0,0 +1,359 @@
|
|
|
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.handleApplicationCreateExisting = handleApplicationCreateExisting;
|
|
7
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
const WorkloadDetector_1 = require("../../detection/WorkloadDetector");
|
|
10
|
+
const instances_1 = require("../../services/instances");
|
|
11
|
+
const config_validator_1 = require("../utils/config-validator");
|
|
12
|
+
const input_parser_1 = require("../utils/input-parser");
|
|
13
|
+
async function handleApplicationCreateExisting(options) {
|
|
14
|
+
(0, config_validator_1.validateConfig)(instances_1.configManager, {
|
|
15
|
+
requireAuth: true,
|
|
16
|
+
requireOrganization: true,
|
|
17
|
+
});
|
|
18
|
+
instances_1.logger.debug('Creating application', { name: options.name });
|
|
19
|
+
// Name
|
|
20
|
+
let appName = options.name;
|
|
21
|
+
let useManagedGateway = false;
|
|
22
|
+
if (!appName && !options.noInteractive) {
|
|
23
|
+
const { name } = await inquirer_1.default.prompt([
|
|
24
|
+
{
|
|
25
|
+
type: 'input',
|
|
26
|
+
name: 'name',
|
|
27
|
+
message: 'Enter application name:',
|
|
28
|
+
validate: (i) => !!i.trim() || 'Application name is required',
|
|
29
|
+
},
|
|
30
|
+
]);
|
|
31
|
+
appName = name.trim();
|
|
32
|
+
}
|
|
33
|
+
if (!appName) {
|
|
34
|
+
throw new Error('Application name is required');
|
|
35
|
+
}
|
|
36
|
+
// Description
|
|
37
|
+
let description = options.description || `Application for ${appName}`;
|
|
38
|
+
// Port (may be overridden by workload selection in interactive mode)
|
|
39
|
+
let port = (0, input_parser_1.parsePort)(options.port);
|
|
40
|
+
// Protocol
|
|
41
|
+
let protocolUnion = (0, input_parser_1.parseProtocol)(options.protocol);
|
|
42
|
+
// HTTPS upgrade: if --https-upgrade is set and protocol is http, change to https
|
|
43
|
+
if (options.httpsUpgrade && protocolUnion === 'http') {
|
|
44
|
+
protocolUnion = 'https';
|
|
45
|
+
}
|
|
46
|
+
// Device IDs (serving) and Gateway IDs
|
|
47
|
+
let deviceId = options.deviceId;
|
|
48
|
+
let gatewayIds = (0, input_parser_1.parseGatewayIds)(options.gatewayIds);
|
|
49
|
+
let hostnames = Array.isArray(options.hostnames)
|
|
50
|
+
? options.hostnames
|
|
51
|
+
: (typeof options.hostnames === 'string' && options.hostnames.trim().length > 0
|
|
52
|
+
? options.hostnames.split(',').map(s => s.trim()).filter(Boolean)
|
|
53
|
+
: []);
|
|
54
|
+
// Organization auth settings
|
|
55
|
+
let requireOrgAuth = options.requireOrgAuth || false;
|
|
56
|
+
let allowedOrgs = [];
|
|
57
|
+
if (options.allowedOrgs) {
|
|
58
|
+
allowedOrgs = options.allowedOrgs.split(',').map(s => s.trim()).filter(Boolean);
|
|
59
|
+
}
|
|
60
|
+
if (!options.noInteractive) {
|
|
61
|
+
// Prompt for HTTPS upgrade if protocol is http and --https-upgrade wasn't explicitly set
|
|
62
|
+
if (protocolUnion === 'http' && options.httpsUpgrade === undefined) {
|
|
63
|
+
const { upgradeToHttps } = await inquirer_1.default.prompt([
|
|
64
|
+
{
|
|
65
|
+
type: 'confirm',
|
|
66
|
+
name: 'upgradeToHttps',
|
|
67
|
+
message: 'Upgrade protocol from HTTP to HTTPS?',
|
|
68
|
+
default: false,
|
|
69
|
+
},
|
|
70
|
+
]);
|
|
71
|
+
if (upgradeToHttps) {
|
|
72
|
+
protocolUnion = 'https';
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Optional: prompt for additional hostnames
|
|
76
|
+
const { addHostnames } = await inquirer_1.default.prompt([
|
|
77
|
+
{
|
|
78
|
+
type: 'input',
|
|
79
|
+
name: 'addHostnames',
|
|
80
|
+
message: 'Additional hostnames (comma-separated, optional):',
|
|
81
|
+
when: () => hostnames.length === 0,
|
|
82
|
+
},
|
|
83
|
+
]);
|
|
84
|
+
if (addHostnames && typeof addHostnames === 'string') {
|
|
85
|
+
hostnames = addHostnames.split(',').map((s) => s.trim()).filter((s) => s.length > 0);
|
|
86
|
+
}
|
|
87
|
+
// Prompt for organization authentication
|
|
88
|
+
if (options.requireOrgAuth === undefined) {
|
|
89
|
+
const { enableOrgAuth } = await inquirer_1.default.prompt([
|
|
90
|
+
{
|
|
91
|
+
type: 'confirm',
|
|
92
|
+
name: 'enableOrgAuth',
|
|
93
|
+
message: 'Require organization authentication to access this application?',
|
|
94
|
+
default: false,
|
|
95
|
+
},
|
|
96
|
+
]);
|
|
97
|
+
requireOrgAuth = enableOrgAuth;
|
|
98
|
+
if (requireOrgAuth) {
|
|
99
|
+
const { allowOtherOrgs } = await inquirer_1.default.prompt([
|
|
100
|
+
{
|
|
101
|
+
type: 'confirm',
|
|
102
|
+
name: 'allowOtherOrgs',
|
|
103
|
+
message: 'Allow other organizations to access this application?',
|
|
104
|
+
default: false,
|
|
105
|
+
},
|
|
106
|
+
]);
|
|
107
|
+
if (allowOtherOrgs) {
|
|
108
|
+
const { orgIds } = await inquirer_1.default.prompt([
|
|
109
|
+
{
|
|
110
|
+
type: 'input',
|
|
111
|
+
name: 'orgIds',
|
|
112
|
+
message: 'Enter comma-separated organization IDs to allow access:',
|
|
113
|
+
},
|
|
114
|
+
]);
|
|
115
|
+
if (orgIds && typeof orgIds === 'string') {
|
|
116
|
+
allowedOrgs = orgIds.split(',').map((s) => s.trim()).filter((s) => s.length > 0);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// Prompt for managed gateway option
|
|
122
|
+
if (gatewayIds.length === 0) {
|
|
123
|
+
const { useManaged } = await inquirer_1.default.prompt([
|
|
124
|
+
{
|
|
125
|
+
type: 'confirm',
|
|
126
|
+
name: 'useManaged',
|
|
127
|
+
message: 'Use Edgible managed gateway?',
|
|
128
|
+
default: false,
|
|
129
|
+
},
|
|
130
|
+
]);
|
|
131
|
+
useManagedGateway = useManaged;
|
|
132
|
+
if (!useManagedGateway) {
|
|
133
|
+
// Ask if they want to assign a gateway at all
|
|
134
|
+
const { assignGateway } = await inquirer_1.default.prompt([
|
|
135
|
+
{
|
|
136
|
+
type: 'confirm',
|
|
137
|
+
name: 'assignGateway',
|
|
138
|
+
message: 'Assign a gateway to this application? (No = local/internal access only)',
|
|
139
|
+
default: true,
|
|
140
|
+
},
|
|
141
|
+
]);
|
|
142
|
+
if (assignGateway) {
|
|
143
|
+
// Try to offer a list of gateways (via service), else fallback to manual input
|
|
144
|
+
try {
|
|
145
|
+
const gatewaysResp = await instances_1.gatewayService.listGateways();
|
|
146
|
+
const gatewayChoices = gatewaysResp.gateways.map((g) => ({
|
|
147
|
+
name: `${g.device.name} (${g.device.id})`,
|
|
148
|
+
value: g.device.id,
|
|
149
|
+
}));
|
|
150
|
+
if (gatewayChoices.length > 0) {
|
|
151
|
+
const { selectedGateways } = await inquirer_1.default.prompt([
|
|
152
|
+
{
|
|
153
|
+
type: 'checkbox',
|
|
154
|
+
name: 'selectedGateways',
|
|
155
|
+
message: 'Select gateway device(s):',
|
|
156
|
+
choices: gatewayChoices,
|
|
157
|
+
validate: (vals) => vals.length > 0 ? true : 'Select at least one gateway',
|
|
158
|
+
},
|
|
159
|
+
]);
|
|
160
|
+
gatewayIds = selectedGateways;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
instances_1.logger.warn('Failed to list gateways', error);
|
|
165
|
+
}
|
|
166
|
+
if (gatewayIds.length === 0) {
|
|
167
|
+
const ans2 = await inquirer_1.default.prompt([
|
|
168
|
+
{
|
|
169
|
+
type: 'input',
|
|
170
|
+
name: 'gatewayIds',
|
|
171
|
+
message: 'Enter comma-separated gateway device IDs (or leave empty for no gateway):',
|
|
172
|
+
validate: (v) => true, // Allow empty input
|
|
173
|
+
},
|
|
174
|
+
]);
|
|
175
|
+
if (ans2.gatewayIds && ans2.gatewayIds.trim()) {
|
|
176
|
+
gatewayIds = (0, input_parser_1.parseGatewayIds)(ans2.gatewayIds);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
instances_1.logger.info('Application will be created without gateway assignment (local/internal access only)');
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// Serving device selection - fetch available serving devices from organization
|
|
186
|
+
if (!deviceId) {
|
|
187
|
+
try {
|
|
188
|
+
const servingDevicesResp = await instances_1.edgibleService.listServingDevices();
|
|
189
|
+
const servingDeviceChoices = Array.isArray(servingDevicesResp?.devices)
|
|
190
|
+
? servingDevicesResp.devices.map((d) => ({
|
|
191
|
+
name: `${d.name || d.id}${d.description ? ` - ${d.description}` : ''}`,
|
|
192
|
+
value: d.id,
|
|
193
|
+
}))
|
|
194
|
+
: [];
|
|
195
|
+
if (servingDeviceChoices.length > 0) {
|
|
196
|
+
const { selectedDeviceId } = await inquirer_1.default.prompt([
|
|
197
|
+
{
|
|
198
|
+
type: 'list',
|
|
199
|
+
name: 'selectedDeviceId',
|
|
200
|
+
message: 'Select serving device:',
|
|
201
|
+
choices: servingDeviceChoices,
|
|
202
|
+
},
|
|
203
|
+
]);
|
|
204
|
+
deviceId = selectedDeviceId;
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
// Fallback to manual input if no serving devices found
|
|
208
|
+
const ans = await inquirer_1.default.prompt([
|
|
209
|
+
{
|
|
210
|
+
type: 'input',
|
|
211
|
+
name: 'deviceId',
|
|
212
|
+
message: 'Enter serving device ID:',
|
|
213
|
+
validate: (v) => v && v.trim().length > 0 ? true : 'Serving device ID is required',
|
|
214
|
+
},
|
|
215
|
+
]);
|
|
216
|
+
deviceId = String(ans.deviceId).trim();
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
catch (error) {
|
|
220
|
+
instances_1.logger.warn('Failed to list serving devices', error);
|
|
221
|
+
// Fallback to manual input if listing fails
|
|
222
|
+
const ans = await inquirer_1.default.prompt([
|
|
223
|
+
{
|
|
224
|
+
type: 'input',
|
|
225
|
+
name: 'deviceId',
|
|
226
|
+
message: 'Enter serving device ID:',
|
|
227
|
+
validate: (v) => v && v.trim().length > 0 ? true : 'Serving device ID is required',
|
|
228
|
+
},
|
|
229
|
+
]);
|
|
230
|
+
deviceId = String(ans.deviceId).trim();
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
if (!deviceId) {
|
|
235
|
+
throw new Error('--device-id (serving) is required');
|
|
236
|
+
}
|
|
237
|
+
if (!useManagedGateway && gatewayIds.length === 0) {
|
|
238
|
+
instances_1.logger.warn('No gateways assigned - application will only be accessible locally/internally');
|
|
239
|
+
}
|
|
240
|
+
const subtype = 'local-preexisting';
|
|
241
|
+
// If interactive, allow choosing a local workload
|
|
242
|
+
if (!options.noInteractive) {
|
|
243
|
+
try {
|
|
244
|
+
const workloads = await WorkloadDetector_1.WorkloadDetector.detectWorkloads();
|
|
245
|
+
const running = workloads.filter((w) => w.status === 'running');
|
|
246
|
+
if (running.length > 0) {
|
|
247
|
+
const { selectedWorkloadId } = await inquirer_1.default.prompt([
|
|
248
|
+
{
|
|
249
|
+
type: 'list',
|
|
250
|
+
name: 'selectedWorkloadId',
|
|
251
|
+
message: 'Select local workload to associate:',
|
|
252
|
+
choices: running.map((w) => ({ name: `${w.name} (${w.type})`, value: w.id })),
|
|
253
|
+
},
|
|
254
|
+
]);
|
|
255
|
+
// Attach to description so the backend can persist in configuration via service call
|
|
256
|
+
description = description || '';
|
|
257
|
+
description = `${description} [workloadId=${selectedWorkloadId}]`;
|
|
258
|
+
// If the selected workload exposes ports, allow user to choose one to override the app port
|
|
259
|
+
const selectedWorkload = running.find((w) => w.id === selectedWorkloadId);
|
|
260
|
+
const availablePorts = Array.isArray(selectedWorkload?.ports)
|
|
261
|
+
? Array.from(new Set((selectedWorkload.ports || [])
|
|
262
|
+
.map((p) => (typeof p.hostPort === 'number' ? p.hostPort : p.containerPort))
|
|
263
|
+
.filter((n) => typeof n === 'number')))
|
|
264
|
+
: [];
|
|
265
|
+
if (availablePorts.length > 0) {
|
|
266
|
+
const portChoices = [
|
|
267
|
+
...availablePorts.sort((a, b) => a - b).map((p) => ({ name: `${p}`, value: String(p) })),
|
|
268
|
+
{ name: 'Enter a custom port', value: 'custom' },
|
|
269
|
+
];
|
|
270
|
+
const { chosenPort } = await inquirer_1.default.prompt([
|
|
271
|
+
{
|
|
272
|
+
type: 'list',
|
|
273
|
+
name: 'chosenPort',
|
|
274
|
+
message: 'Select port to expose for this application:',
|
|
275
|
+
choices: portChoices,
|
|
276
|
+
default: String(availablePorts[0]),
|
|
277
|
+
},
|
|
278
|
+
]);
|
|
279
|
+
if (chosenPort === 'custom') {
|
|
280
|
+
const { customPort } = await inquirer_1.default.prompt([
|
|
281
|
+
{
|
|
282
|
+
type: 'input',
|
|
283
|
+
name: 'customPort',
|
|
284
|
+
message: 'Enter custom port:',
|
|
285
|
+
validate: (v) => {
|
|
286
|
+
try {
|
|
287
|
+
(0, input_parser_1.parsePort)(v);
|
|
288
|
+
return true;
|
|
289
|
+
}
|
|
290
|
+
catch (e) {
|
|
291
|
+
return e.message;
|
|
292
|
+
}
|
|
293
|
+
},
|
|
294
|
+
},
|
|
295
|
+
]);
|
|
296
|
+
port = (0, input_parser_1.parsePort)(customPort);
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
port = (0, input_parser_1.parsePort)(chosenPort);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
catch (error) {
|
|
305
|
+
instances_1.logger.debug('Failed to detect workloads', error);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
instances_1.logger.info('Creating application', {
|
|
309
|
+
name: appName,
|
|
310
|
+
port,
|
|
311
|
+
protocol: protocolUnion,
|
|
312
|
+
deviceId,
|
|
313
|
+
gatewayIds,
|
|
314
|
+
subtype,
|
|
315
|
+
});
|
|
316
|
+
console.log(chalk_1.default.blue(`\nCreating application: ${appName}`));
|
|
317
|
+
console.log(chalk_1.default.gray(`Port: ${port}`));
|
|
318
|
+
console.log(chalk_1.default.gray(`Protocol: ${protocolUnion.toUpperCase()}`));
|
|
319
|
+
console.log(chalk_1.default.gray(`Serving device: ${deviceId}`));
|
|
320
|
+
if (useManagedGateway) {
|
|
321
|
+
console.log(chalk_1.default.gray(`Using Edgible managed gateway`));
|
|
322
|
+
}
|
|
323
|
+
else {
|
|
324
|
+
console.log(chalk_1.default.gray(`Gateways: ${gatewayIds.join(', ')}`));
|
|
325
|
+
}
|
|
326
|
+
if (hostnames.length > 0) {
|
|
327
|
+
console.log(chalk_1.default.gray(`Additional hostnames: ${hostnames.join(', ')}`));
|
|
328
|
+
}
|
|
329
|
+
if (requireOrgAuth) {
|
|
330
|
+
console.log(chalk_1.default.gray(`Organization authentication: ${chalk_1.default.green('Enabled')}`));
|
|
331
|
+
if (allowedOrgs.length > 0) {
|
|
332
|
+
console.log(chalk_1.default.gray(`Allowed organizations: ${allowedOrgs.join(', ')}`));
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
const result = await instances_1.applicationService.createApplicationProgrammatically({
|
|
336
|
+
name: appName,
|
|
337
|
+
description,
|
|
338
|
+
port,
|
|
339
|
+
protocol: protocolUnion,
|
|
340
|
+
hostnames,
|
|
341
|
+
deviceIds: [deviceId],
|
|
342
|
+
gatewayIds: useManagedGateway ? undefined : gatewayIds,
|
|
343
|
+
useManagedGateway,
|
|
344
|
+
subtype,
|
|
345
|
+
requireOrgAuth,
|
|
346
|
+
allowedOrganizations: allowedOrgs.length > 0 ? allowedOrgs : undefined,
|
|
347
|
+
});
|
|
348
|
+
console.log(chalk_1.default.green('\nā Application created successfully!'));
|
|
349
|
+
console.log(chalk_1.default.blue('\nš Application Details:'));
|
|
350
|
+
if (result && typeof result === 'object' && 'name' in result) {
|
|
351
|
+
const app = result;
|
|
352
|
+
console.log(chalk_1.default.white(` Name: ${app.name}`));
|
|
353
|
+
console.log(chalk_1.default.white(` ID: ${app.id}`));
|
|
354
|
+
if (app.url)
|
|
355
|
+
console.log(chalk_1.default.white(` URL: ${chalk_1.default.cyan.bold(app.url)}`));
|
|
356
|
+
console.log(chalk_1.default.white(` Status: ${app.status}`));
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
//# sourceMappingURL=create-existing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-interactive.d.ts","sourceRoot":"","sources":["../../../src/commands/application/create-interactive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,wBAAgB,wBAAwB,IAAI,OAAO,CAqVlD"}
|