@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.
Files changed (221) hide show
  1. package/dist/commands/agent/agent-handlers.d.ts +45 -0
  2. package/dist/commands/agent/agent-handlers.d.ts.map +1 -0
  3. package/dist/commands/agent/agent-handlers.js +1159 -0
  4. package/dist/commands/agent/install.d.ts +11 -0
  5. package/dist/commands/agent/install.d.ts.map +1 -0
  6. package/dist/commands/agent/install.js +399 -0
  7. package/dist/commands/agent/logs.d.ts +12 -0
  8. package/dist/commands/agent/logs.d.ts.map +1 -0
  9. package/dist/commands/agent/logs.js +77 -0
  10. package/dist/commands/agent/restart.d.ts +4 -0
  11. package/dist/commands/agent/restart.d.ts.map +1 -0
  12. package/dist/commands/agent/restart.js +33 -0
  13. package/dist/commands/agent/set-log-level.d.ts +8 -0
  14. package/dist/commands/agent/set-log-level.d.ts.map +1 -0
  15. package/dist/commands/agent/set-log-level.js +133 -0
  16. package/dist/commands/agent/setup.d.ts +9 -0
  17. package/dist/commands/agent/setup.d.ts.map +1 -0
  18. package/dist/commands/agent/setup.js +149 -0
  19. package/dist/commands/agent/start.d.ts +12 -0
  20. package/dist/commands/agent/start.d.ts.map +1 -0
  21. package/dist/commands/agent/start.js +308 -0
  22. package/dist/commands/agent/status.d.ts +7 -0
  23. package/dist/commands/agent/status.d.ts.map +1 -0
  24. package/dist/commands/agent/status.js +68 -0
  25. package/dist/commands/agent/stop.d.ts +4 -0
  26. package/dist/commands/agent/stop.d.ts.map +1 -0
  27. package/dist/commands/agent/stop.js +33 -0
  28. package/dist/commands/agent/uninstall.d.ts +7 -0
  29. package/dist/commands/agent/uninstall.d.ts.map +1 -0
  30. package/dist/commands/agent/uninstall.js +168 -0
  31. package/dist/commands/agent.d.ts.map +1 -1
  32. package/dist/commands/agent.js +24 -1190
  33. package/dist/commands/ai/helpers.d.ts +139 -0
  34. package/dist/commands/ai/helpers.d.ts.map +1 -0
  35. package/dist/commands/ai/helpers.js +1470 -0
  36. package/dist/commands/ai/serve.d.ts +6 -0
  37. package/dist/commands/ai/serve.d.ts.map +1 -0
  38. package/dist/commands/ai/serve.js +124 -0
  39. package/dist/commands/ai/setup.d.ts +14 -0
  40. package/dist/commands/ai/setup.d.ts.map +1 -0
  41. package/dist/commands/ai/setup.js +86 -0
  42. package/dist/commands/ai/status.d.ts +2 -0
  43. package/dist/commands/ai/status.d.ts.map +1 -0
  44. package/dist/commands/ai/status.js +160 -0
  45. package/dist/commands/ai/stop.d.ts +2 -0
  46. package/dist/commands/ai/stop.d.ts.map +1 -0
  47. package/dist/commands/ai/stop.js +21 -0
  48. package/dist/commands/ai/teardown.d.ts +5 -0
  49. package/dist/commands/ai/teardown.d.ts.map +1 -0
  50. package/dist/commands/ai/teardown.js +78 -0
  51. package/dist/commands/ai/test.d.ts +4 -0
  52. package/dist/commands/ai/test.d.ts.map +1 -0
  53. package/dist/commands/ai/test.js +65 -0
  54. package/dist/commands/ai.d.ts.map +1 -1
  55. package/dist/commands/ai.js +16 -1938
  56. package/dist/commands/application/api-keys/create.d.ts +6 -0
  57. package/dist/commands/application/api-keys/create.d.ts.map +1 -0
  58. package/dist/commands/application/api-keys/create.js +68 -0
  59. package/dist/commands/application/api-keys/delete.d.ts +6 -0
  60. package/dist/commands/application/api-keys/delete.d.ts.map +1 -0
  61. package/dist/commands/application/api-keys/delete.js +79 -0
  62. package/dist/commands/application/api-keys/list.d.ts +5 -0
  63. package/dist/commands/application/api-keys/list.d.ts.map +1 -0
  64. package/dist/commands/application/api-keys/list.js +65 -0
  65. package/dist/commands/application/api-keys.d.ts +3 -0
  66. package/dist/commands/application/api-keys.d.ts.map +1 -0
  67. package/dist/commands/application/api-keys.js +227 -0
  68. package/dist/commands/application/create-compose.d.ts +3 -0
  69. package/dist/commands/application/create-compose.d.ts.map +1 -0
  70. package/dist/commands/application/create-compose.js +381 -0
  71. package/dist/commands/application/create-docker-compose.d.ts +10 -0
  72. package/dist/commands/application/create-docker-compose.d.ts.map +1 -0
  73. package/dist/commands/application/create-docker-compose.js +334 -0
  74. package/dist/commands/application/create-existing.d.ts +14 -0
  75. package/dist/commands/application/create-existing.d.ts.map +1 -0
  76. package/dist/commands/application/create-existing.js +359 -0
  77. package/dist/commands/application/create-interactive.d.ts +3 -0
  78. package/dist/commands/application/create-interactive.d.ts.map +1 -0
  79. package/dist/commands/application/create-interactive.js +326 -0
  80. package/dist/commands/application/create-managed-process.d.ts +15 -0
  81. package/dist/commands/application/create-managed-process.d.ts.map +1 -0
  82. package/dist/commands/application/create-managed-process.js +371 -0
  83. package/dist/commands/application/create-stubs.d.ts +4 -0
  84. package/dist/commands/application/create-stubs.d.ts.map +1 -0
  85. package/dist/commands/application/create-stubs.js +19 -0
  86. package/dist/commands/application/create-workload.d.ts +5 -0
  87. package/dist/commands/application/create-workload.d.ts.map +1 -0
  88. package/dist/commands/application/create-workload.js +48 -0
  89. package/dist/commands/application/delete.d.ts +6 -0
  90. package/dist/commands/application/delete.d.ts.map +1 -0
  91. package/dist/commands/application/delete.js +76 -0
  92. package/dist/commands/application/get.d.ts +5 -0
  93. package/dist/commands/application/get.d.ts.map +1 -0
  94. package/dist/commands/application/get.js +35 -0
  95. package/dist/commands/application/list.d.ts +4 -0
  96. package/dist/commands/application/list.d.ts.map +1 -0
  97. package/dist/commands/application/list.js +41 -0
  98. package/dist/commands/application/short-codes/create.d.ts +7 -0
  99. package/dist/commands/application/short-codes/create.d.ts.map +1 -0
  100. package/dist/commands/application/short-codes/create.js +69 -0
  101. package/dist/commands/application/short-codes/delete.d.ts +6 -0
  102. package/dist/commands/application/short-codes/delete.d.ts.map +1 -0
  103. package/dist/commands/application/short-codes/delete.js +79 -0
  104. package/dist/commands/application/short-codes/list.d.ts +5 -0
  105. package/dist/commands/application/short-codes/list.d.ts.map +1 -0
  106. package/dist/commands/application/short-codes/list.js +63 -0
  107. package/dist/commands/application/short-codes/toggle.d.ts +5 -0
  108. package/dist/commands/application/short-codes/toggle.d.ts.map +1 -0
  109. package/dist/commands/application/short-codes/toggle.js +71 -0
  110. package/dist/commands/application/short-codes.d.ts +3 -0
  111. package/dist/commands/application/short-codes.d.ts.map +1 -0
  112. package/dist/commands/application/short-codes.js +226 -0
  113. package/dist/commands/application/toggle.d.ts +2 -0
  114. package/dist/commands/application/toggle.d.ts.map +1 -0
  115. package/dist/commands/application/toggle.js +78 -0
  116. package/dist/commands/application/update.d.ts +4 -0
  117. package/dist/commands/application/update.d.ts.map +1 -0
  118. package/dist/commands/application/update.js +11 -0
  119. package/dist/commands/application.d.ts.map +1 -1
  120. package/dist/commands/application.js +32 -1630
  121. package/dist/commands/auth.d.ts.map +1 -1
  122. package/dist/commands/auth.js +31 -49
  123. package/dist/commands/base/BaseCommand.d.ts +3 -3
  124. package/dist/commands/base/BaseCommand.d.ts.map +1 -1
  125. package/dist/commands/base/BaseCommand.js +3 -3
  126. package/dist/commands/base/command-wrapper.d.ts +0 -4
  127. package/dist/commands/base/command-wrapper.d.ts.map +1 -1
  128. package/dist/commands/base/command-wrapper.js +13 -14
  129. package/dist/commands/base/middleware.d.ts +3 -3
  130. package/dist/commands/base/middleware.d.ts.map +1 -1
  131. package/dist/commands/base/middleware.js +4 -4
  132. package/dist/commands/config.d.ts.map +1 -1
  133. package/dist/commands/config.js +15 -32
  134. package/dist/commands/connectivity.d.ts.map +1 -1
  135. package/dist/commands/connectivity.js +6 -11
  136. package/dist/commands/debug.d.ts.map +1 -1
  137. package/dist/commands/debug.js +187 -46
  138. package/dist/commands/discover.d.ts.map +1 -1
  139. package/dist/commands/discover.js +4 -17
  140. package/dist/commands/gateway.d.ts.map +1 -1
  141. package/dist/commands/gateway.js +37 -77
  142. package/dist/commands/managedGateway/create.d.ts +6 -0
  143. package/dist/commands/managedGateway/create.d.ts.map +1 -0
  144. package/dist/commands/managedGateway/create.js +50 -0
  145. package/dist/commands/managedGateway/delete.d.ts +5 -0
  146. package/dist/commands/managedGateway/delete.d.ts.map +1 -0
  147. package/dist/commands/managedGateway/delete.js +57 -0
  148. package/dist/commands/managedGateway/get.d.ts +4 -0
  149. package/dist/commands/managedGateway/get.d.ts.map +1 -0
  150. package/dist/commands/managedGateway/get.js +71 -0
  151. package/dist/commands/managedGateway/haproxy-stats.d.ts +6 -0
  152. package/dist/commands/managedGateway/haproxy-stats.d.ts.map +1 -0
  153. package/dist/commands/managedGateway/haproxy-stats.js +131 -0
  154. package/dist/commands/managedGateway/list.d.ts +4 -0
  155. package/dist/commands/managedGateway/list.d.ts.map +1 -0
  156. package/dist/commands/managedGateway/list.js +50 -0
  157. package/dist/commands/managedGateway/logs.d.ts +10 -0
  158. package/dist/commands/managedGateway/logs.d.ts.map +1 -0
  159. package/dist/commands/managedGateway/logs.js +100 -0
  160. package/dist/commands/managedGateway/reboot.d.ts +5 -0
  161. package/dist/commands/managedGateway/reboot.d.ts.map +1 -0
  162. package/dist/commands/managedGateway/reboot.js +95 -0
  163. package/dist/commands/managedGateway/resync.d.ts +10 -0
  164. package/dist/commands/managedGateway/resync.d.ts.map +1 -0
  165. package/dist/commands/managedGateway/resync.js +69 -0
  166. package/dist/commands/managedGateway/ssh.d.ts +4 -0
  167. package/dist/commands/managedGateway/ssh.d.ts.map +1 -0
  168. package/dist/commands/managedGateway/ssh.js +130 -0
  169. package/dist/commands/managedGateway/wipe-logs.d.ts +4 -0
  170. package/dist/commands/managedGateway/wipe-logs.d.ts.map +1 -0
  171. package/dist/commands/managedGateway/wipe-logs.js +67 -0
  172. package/dist/commands/managedGateway/wireguard.d.ts +4 -0
  173. package/dist/commands/managedGateway/wireguard.d.ts.map +1 -0
  174. package/dist/commands/managedGateway/wireguard.js +68 -0
  175. package/dist/commands/managedGateway.d.ts.map +1 -1
  176. package/dist/commands/managedGateway.js +61 -117
  177. package/dist/commands/utils/config-validator.d.ts +5 -5
  178. package/dist/commands/utils/config-validator.d.ts.map +1 -1
  179. package/dist/commands/utils/config-validator.js +8 -8
  180. package/dist/commands/utils/output-formatter.js +1 -1
  181. package/dist/config/app-config.d.ts +1 -1
  182. package/dist/config/app-config.js +2 -2
  183. package/dist/index.js +0 -3
  184. package/dist/services/LocalAgentManager.d.ts.map +1 -1
  185. package/dist/services/LocalAgentManager.js +4 -2
  186. package/dist/services/agentDeployment/AgentDeploymentService.d.ts +35 -0
  187. package/dist/services/agentDeployment/AgentDeploymentService.d.ts.map +1 -0
  188. package/dist/services/agentDeployment/AgentDeploymentService.js +35 -0
  189. package/dist/services/application/ApplicationService.d.ts +5 -4
  190. package/dist/services/application/ApplicationService.d.ts.map +1 -1
  191. package/dist/services/application/ApplicationService.js +22 -35
  192. package/dist/services/auth/AuthService.d.ts +5 -5
  193. package/dist/services/auth/AuthService.d.ts.map +1 -1
  194. package/dist/services/auth/AuthService.js +11 -58
  195. package/dist/services/daemon/DaemonManagerFactory.d.ts +2 -0
  196. package/dist/services/daemon/DaemonManagerFactory.d.ts.map +1 -1
  197. package/dist/services/daemon/DaemonManagerFactory.js +14 -6
  198. package/dist/services/diagnostics/DiagnosticsService.d.ts +89 -0
  199. package/dist/services/diagnostics/DiagnosticsService.d.ts.map +1 -0
  200. package/dist/services/diagnostics/DiagnosticsService.js +37 -0
  201. package/dist/services/edgible.d.ts +6 -4
  202. package/dist/services/edgible.d.ts.map +1 -1
  203. package/dist/services/edgible.js +36 -86
  204. package/dist/services/gateway/GatewayService.d.ts +5 -6
  205. package/dist/services/gateway/GatewayService.d.ts.map +1 -1
  206. package/dist/services/gateway/GatewayService.js +22 -36
  207. package/dist/services/instances.d.ts +34 -0
  208. package/dist/services/instances.d.ts.map +1 -0
  209. package/dist/services/instances.js +64 -0
  210. package/dist/services/managedGateway/ManagedGatewayService.d.ts +75 -0
  211. package/dist/services/managedGateway/ManagedGatewayService.d.ts.map +1 -0
  212. package/dist/services/managedGateway/ManagedGatewayService.js +44 -0
  213. package/dist/services/token/TokenManager.d.ts +56 -0
  214. package/dist/services/token/TokenManager.d.ts.map +1 -0
  215. package/dist/services/token/TokenManager.js +85 -0
  216. package/dist/types/validation/schemas.d.ts +22 -22
  217. package/dist/utils/PlatformDetector.d.ts +2 -0
  218. package/dist/utils/PlatformDetector.d.ts.map +1 -1
  219. package/dist/utils/PlatformDetector.js +5 -34
  220. package/dist/validation/schemas.d.ts +6 -6
  221. package/package.json +1 -1
@@ -0,0 +1,371 @@
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.handleApplicationCreateManagedProcess = handleApplicationCreateManagedProcess;
7
+ const inquirer_1 = __importDefault(require("inquirer"));
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const instances_1 = require("../../services/instances");
10
+ const config_validator_1 = require("../utils/config-validator");
11
+ const input_parser_1 = require("../utils/input-parser");
12
+ async function handleApplicationCreateManagedProcess(options) {
13
+ (0, config_validator_1.validateConfig)(instances_1.configManager, {
14
+ requireAuth: true,
15
+ requireOrganization: true,
16
+ });
17
+ // Application name
18
+ let appName = options.name;
19
+ if (!appName && !options.noInteractive) {
20
+ const { name } = await inquirer_1.default.prompt([
21
+ {
22
+ type: 'input',
23
+ name: 'name',
24
+ message: 'Enter application name:',
25
+ validate: (i) => !!i.trim() || 'Application name is required',
26
+ },
27
+ ]);
28
+ appName = name.trim();
29
+ }
30
+ if (!appName) {
31
+ throw new Error('Application name is required');
32
+ }
33
+ // Command
34
+ let command = options.command;
35
+ if (!command && !options.noInteractive) {
36
+ const { cmd } = await inquirer_1.default.prompt([
37
+ {
38
+ type: 'input',
39
+ name: 'cmd',
40
+ message: 'Enter command to run:',
41
+ validate: (i) => !!i.trim() || 'Command is required',
42
+ },
43
+ ]);
44
+ command = cmd.trim();
45
+ }
46
+ if (!command) {
47
+ throw new Error('Command is required');
48
+ }
49
+ // Port
50
+ let port = options.port ? (0, input_parser_1.parsePort)(options.port) : undefined;
51
+ if (!port && !options.noInteractive) {
52
+ const { portInput } = await inquirer_1.default.prompt([
53
+ {
54
+ type: 'input',
55
+ name: 'portInput',
56
+ message: 'Enter port number the process will listen on:',
57
+ default: '3000',
58
+ validate: (i) => {
59
+ const p = parseInt(i, 10);
60
+ return (p > 0 && p <= 65535) || 'Port must be between 1 and 65535';
61
+ },
62
+ },
63
+ ]);
64
+ port = (0, input_parser_1.parsePort)(portInput);
65
+ }
66
+ if (!port) {
67
+ throw new Error('Port is required');
68
+ }
69
+ // Working directory
70
+ let workingDirectory = options.workingDir;
71
+ if (!workingDirectory && !options.noInteractive) {
72
+ const { dir } = await inquirer_1.default.prompt([
73
+ {
74
+ type: 'input',
75
+ name: 'dir',
76
+ message: 'Enter working directory (leave empty for current directory):',
77
+ default: process.cwd(),
78
+ },
79
+ ]);
80
+ workingDirectory = dir.trim();
81
+ }
82
+ // Environment variables
83
+ let env = {};
84
+ if (options.env) {
85
+ // Parse format: KEY=VALUE,KEY2=VALUE2
86
+ const pairs = options.env.split(',');
87
+ for (const pair of pairs) {
88
+ const [key, value] = pair.split('=');
89
+ if (key && value) {
90
+ env[key.trim()] = value.trim();
91
+ }
92
+ }
93
+ }
94
+ else if (!options.noInteractive) {
95
+ const { addEnv } = await inquirer_1.default.prompt([
96
+ {
97
+ type: 'confirm',
98
+ name: 'addEnv',
99
+ message: 'Add environment variables?',
100
+ default: false,
101
+ },
102
+ ]);
103
+ if (addEnv) {
104
+ let continueAdding = true;
105
+ while (continueAdding) {
106
+ const { key, value } = await inquirer_1.default.prompt([
107
+ {
108
+ type: 'input',
109
+ name: 'key',
110
+ message: 'Environment variable name:',
111
+ },
112
+ {
113
+ type: 'input',
114
+ name: 'value',
115
+ message: 'Environment variable value:',
116
+ },
117
+ ]);
118
+ if (key && value) {
119
+ env[key.trim()] = value.trim();
120
+ }
121
+ const { more } = await inquirer_1.default.prompt([
122
+ {
123
+ type: 'confirm',
124
+ name: 'more',
125
+ message: 'Add another environment variable?',
126
+ default: false,
127
+ },
128
+ ]);
129
+ continueAdding = more;
130
+ }
131
+ }
132
+ }
133
+ // Log file
134
+ let logFile = options.logFile;
135
+ if (!logFile && !options.noInteractive) {
136
+ const { addLog } = await inquirer_1.default.prompt([
137
+ {
138
+ type: 'confirm',
139
+ name: 'addLog',
140
+ message: 'Capture logs to file?',
141
+ default: false,
142
+ },
143
+ ]);
144
+ if (addLog) {
145
+ const { path: logPath } = await inquirer_1.default.prompt([
146
+ {
147
+ type: 'input',
148
+ name: 'path',
149
+ message: 'Log file path:',
150
+ default: `/var/log/${appName}.log`,
151
+ },
152
+ ]);
153
+ logFile = logPath.trim();
154
+ }
155
+ }
156
+ // Description
157
+ const description = options.description || `Managed process application for ${appName}`;
158
+ // Protocol
159
+ const protocol = (0, input_parser_1.parseProtocol)(options.protocol);
160
+ // Device IDs and Gateway IDs
161
+ let deviceId = options.deviceId;
162
+ let gatewayIds = (0, input_parser_1.parseGatewayIds)(options.gatewayIds);
163
+ let hostnames = Array.isArray(options.hostnames)
164
+ ? options.hostnames
165
+ : (typeof options.hostnames === 'string' && options.hostnames.trim().length > 0
166
+ ? options.hostnames.split(',').map(s => s.trim()).filter(Boolean)
167
+ : []);
168
+ let useManagedGateway = false;
169
+ if (!options.noInteractive) {
170
+ // Optional: prompt for additional hostnames
171
+ const { addHostnames } = await inquirer_1.default.prompt([
172
+ {
173
+ type: 'input',
174
+ name: 'addHostnames',
175
+ message: 'Additional hostnames (comma-separated, optional):',
176
+ when: () => hostnames.length === 0,
177
+ },
178
+ ]);
179
+ if (addHostnames && typeof addHostnames === 'string') {
180
+ hostnames = addHostnames.split(',').map((s) => s.trim()).filter((s) => s.length > 0);
181
+ }
182
+ // Prompt for managed gateway option
183
+ if (gatewayIds.length === 0) {
184
+ const { useManaged } = await inquirer_1.default.prompt([
185
+ {
186
+ type: 'confirm',
187
+ name: 'useManaged',
188
+ message: 'Use Edgible managed gateway?',
189
+ default: false,
190
+ },
191
+ ]);
192
+ useManagedGateway = useManaged;
193
+ if (!useManagedGateway) {
194
+ // Ask if they want to assign a gateway at all
195
+ const { assignGateway } = await inquirer_1.default.prompt([
196
+ {
197
+ type: 'confirm',
198
+ name: 'assignGateway',
199
+ message: 'Assign a gateway to this application? (No = local/internal access only)',
200
+ default: true,
201
+ },
202
+ ]);
203
+ if (assignGateway) {
204
+ // Try to offer a list of gateways (via service), else fallback to manual input
205
+ try {
206
+ const gatewaysResp = await instances_1.gatewayService.listGateways();
207
+ const gatewayChoices = gatewaysResp.gateways.map((g) => ({
208
+ name: `${g.device.name} (${g.device.id})`,
209
+ value: g.device.id,
210
+ }));
211
+ if (gatewayChoices.length > 0) {
212
+ const { selectedGateways } = await inquirer_1.default.prompt([
213
+ {
214
+ type: 'checkbox',
215
+ name: 'selectedGateways',
216
+ message: 'Select gateway device(s):',
217
+ choices: gatewayChoices,
218
+ validate: (vals) => vals.length > 0 ? true : 'Select at least one gateway',
219
+ },
220
+ ]);
221
+ gatewayIds = selectedGateways;
222
+ }
223
+ }
224
+ catch (error) {
225
+ instances_1.logger.warn('Failed to list gateways', error);
226
+ }
227
+ if (gatewayIds.length === 0) {
228
+ const ans2 = await inquirer_1.default.prompt([
229
+ {
230
+ type: 'input',
231
+ name: 'gatewayIds',
232
+ message: 'Enter comma-separated gateway device IDs (or leave empty for no gateway):',
233
+ validate: (v) => true, // Allow empty input
234
+ },
235
+ ]);
236
+ if (ans2.gatewayIds && ans2.gatewayIds.trim()) {
237
+ gatewayIds = (0, input_parser_1.parseGatewayIds)(ans2.gatewayIds);
238
+ }
239
+ }
240
+ }
241
+ else {
242
+ instances_1.logger.info('Application will be created without gateway assignment (local/internal access only)');
243
+ }
244
+ }
245
+ }
246
+ // Serving device selection
247
+ if (!deviceId) {
248
+ try {
249
+ const servingDevicesResp = await instances_1.edgibleService.listServingDevices();
250
+ const servingDeviceChoices = Array.isArray(servingDevicesResp?.devices)
251
+ ? servingDevicesResp.devices.map((d) => ({
252
+ name: `${d.name || d.id}${d.description ? ` - ${d.description}` : ''}`,
253
+ value: d.id,
254
+ }))
255
+ : [];
256
+ if (servingDeviceChoices.length > 0) {
257
+ const { selectedDeviceId } = await inquirer_1.default.prompt([
258
+ {
259
+ type: 'list',
260
+ name: 'selectedDeviceId',
261
+ message: 'Select serving device:',
262
+ choices: servingDeviceChoices,
263
+ },
264
+ ]);
265
+ deviceId = selectedDeviceId;
266
+ }
267
+ else {
268
+ // Fallback to manual input if no serving devices found
269
+ const ans = await inquirer_1.default.prompt([
270
+ {
271
+ type: 'input',
272
+ name: 'deviceId',
273
+ message: 'Enter serving device ID:',
274
+ validate: (v) => v && v.trim().length > 0 ? true : 'Serving device ID is required',
275
+ },
276
+ ]);
277
+ deviceId = String(ans.deviceId).trim();
278
+ }
279
+ }
280
+ catch (error) {
281
+ instances_1.logger.warn('Failed to list serving devices', error);
282
+ // Fallback to manual input if listing fails
283
+ const ans = await inquirer_1.default.prompt([
284
+ {
285
+ type: 'input',
286
+ name: 'deviceId',
287
+ message: 'Enter serving device ID:',
288
+ validate: (v) => v && v.trim().length > 0 ? true : 'Serving device ID is required',
289
+ },
290
+ ]);
291
+ deviceId = String(ans.deviceId).trim();
292
+ }
293
+ }
294
+ }
295
+ if (!deviceId) {
296
+ throw new Error('--device-id (serving) is required');
297
+ }
298
+ if (!useManagedGateway && gatewayIds.length === 0) {
299
+ instances_1.logger.warn('No gateways assigned - application will only be accessible locally/internally');
300
+ }
301
+ // Build configuration
302
+ const configuration = {
303
+ command,
304
+ };
305
+ if (workingDirectory) {
306
+ configuration.workingDirectory = workingDirectory;
307
+ }
308
+ if (Object.keys(env).length > 0) {
309
+ configuration.env = env;
310
+ }
311
+ if (logFile) {
312
+ configuration.logFile = logFile;
313
+ }
314
+ // Create application
315
+ instances_1.logger.info('Creating managed process application', {
316
+ name: appName,
317
+ port,
318
+ protocol,
319
+ command,
320
+ deviceId,
321
+ gatewayIds,
322
+ subtype: 'managed-process',
323
+ });
324
+ console.log(chalk_1.default.blue(`\nCreating managed process application: ${appName}`));
325
+ console.log(chalk_1.default.gray(`Command: ${command}`));
326
+ console.log(chalk_1.default.gray(`Port: ${port}`));
327
+ console.log(chalk_1.default.gray(`Protocol: ${protocol.toUpperCase()}`));
328
+ if (workingDirectory) {
329
+ console.log(chalk_1.default.gray(`Working directory: ${workingDirectory}`));
330
+ }
331
+ if (Object.keys(env).length > 0) {
332
+ console.log(chalk_1.default.gray(`Environment variables: ${Object.keys(env).length} variable(s)`));
333
+ }
334
+ if (logFile) {
335
+ console.log(chalk_1.default.gray(`Log file: ${logFile}`));
336
+ }
337
+ console.log(chalk_1.default.gray(`Serving device: ${deviceId}`));
338
+ if (useManagedGateway) {
339
+ console.log(chalk_1.default.gray(`Using Edgible managed gateway`));
340
+ }
341
+ else {
342
+ console.log(chalk_1.default.gray(`Gateways: ${gatewayIds.join(', ')}`));
343
+ }
344
+ if (hostnames.length > 0) {
345
+ console.log(chalk_1.default.gray(`Additional hostnames: ${hostnames.join(', ')}`));
346
+ }
347
+ const result = await instances_1.applicationService.createApplicationProgrammatically({
348
+ name: appName,
349
+ description,
350
+ port,
351
+ protocol,
352
+ hostnames,
353
+ deviceIds: [deviceId],
354
+ gatewayIds: useManagedGateway ? undefined : gatewayIds,
355
+ useManagedGateway,
356
+ subtype: 'managed-process',
357
+ configuration,
358
+ });
359
+ console.log(chalk_1.default.green('\n✓ Managed process application created successfully!'));
360
+ console.log(chalk_1.default.blue('\n📋 Application Details:'));
361
+ if (result && typeof result === 'object' && 'name' in result) {
362
+ const app = result;
363
+ console.log(chalk_1.default.white(` Name: ${app.name}`));
364
+ console.log(chalk_1.default.white(` ID: ${app.id}`));
365
+ if (app.url)
366
+ console.log(chalk_1.default.white(` URL: ${chalk_1.default.cyan.bold(app.url)}`));
367
+ console.log(chalk_1.default.white(` Status: ${app.status}`));
368
+ }
369
+ console.log(chalk_1.default.yellow('\n⚠ Note: The agent will start the process when it receives the configuration.'));
370
+ }
371
+ //# sourceMappingURL=create-managed-process.js.map
@@ -0,0 +1,4 @@
1
+ export declare function handleApplicationCreateDocker(): Promise<void>;
2
+ export declare function handleApplicationCreateQemu(): Promise<void>;
3
+ export declare function handleApplicationCreatePodman(): Promise<void>;
4
+ //# sourceMappingURL=create-stubs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-stubs.d.ts","sourceRoot":"","sources":["../../../src/commands/application/create-stubs.ts"],"names":[],"mappings":"AAEA,wBAAsB,6BAA6B,IAAI,OAAO,CAAC,IAAI,CAAC,CAEnE;AAED,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC,CAEjE;AAED,wBAAsB,6BAA6B,IAAI,OAAO,CAAC,IAAI,CAAC,CAEnE"}
@@ -0,0 +1,19 @@
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.handleApplicationCreateDocker = handleApplicationCreateDocker;
7
+ exports.handleApplicationCreateQemu = handleApplicationCreateQemu;
8
+ exports.handleApplicationCreatePodman = handleApplicationCreatePodman;
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ async function handleApplicationCreateDocker() {
11
+ console.log(chalk_1.default.yellow('This workload type is currently not implemented.'));
12
+ }
13
+ async function handleApplicationCreateQemu() {
14
+ console.log(chalk_1.default.yellow('This workload type is currently not implemented.'));
15
+ }
16
+ async function handleApplicationCreatePodman() {
17
+ console.log(chalk_1.default.yellow('This workload type is currently not implemented.'));
18
+ }
19
+ //# sourceMappingURL=create-stubs.js.map
@@ -0,0 +1,5 @@
1
+ import { Command } from 'commander';
2
+ export declare function createDockerCommand(): Command;
3
+ export declare function createPodmanCommand(): Command;
4
+ export declare function createAutoCommand(): Command;
5
+ //# sourceMappingURL=create-workload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-workload.d.ts","sourceRoot":"","sources":["../../../src/commands/application/create-workload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,mBAAmB,IAAI,OAAO,CAe7C;AAED,wBAAgB,mBAAmB,IAAI,OAAO,CAe7C;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAsB3C"}
@@ -0,0 +1,48 @@
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.createDockerCommand = createDockerCommand;
7
+ exports.createPodmanCommand = createPodmanCommand;
8
+ exports.createAutoCommand = createAutoCommand;
9
+ const commander_1 = require("commander");
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ const command_wrapper_1 = require("../base/command-wrapper");
12
+ function createDockerCommand() {
13
+ action((0, command_wrapper_1.wrapCommand)(async () => {
14
+ console.log(chalk_1.default.yellow('This workload type is currently not implemented.'));
15
+ }, {
16
+ requireAuth: false,
17
+ requireOrganization: false,
18
+ }));
19
+ const createQemuCommand = new commander_1.Command('qemu')
20
+ .description('Create application from QEMU VM (not implemented)');
21
+ }
22
+ function createPodmanCommand() {
23
+ action((0, command_wrapper_1.wrapCommand)(async () => {
24
+ console.log(chalk_1.default.yellow('This workload type is currently not implemented.'));
25
+ }, {
26
+ requireAuth: false,
27
+ requireOrganization: false,
28
+ }));
29
+ const createPodmanCommand = new commander_1.Command('podman')
30
+ .description('Create application from Podman container (not implemented)');
31
+ }
32
+ function createAutoCommand() {
33
+ action((0, command_wrapper_1.wrapCommand)(async () => {
34
+ console.log(chalk_1.default.yellow('This workload type is currently not implemented.'));
35
+ }, {
36
+ requireAuth: false,
37
+ requireOrganization: false,
38
+ }));
39
+ // Add all subcommands to create command
40
+ createCommand.addCommand(createExistingCommand);
41
+ createCommand.addCommand(createDockerComposeCommand);
42
+ createCommand.addCommand(createManagedProcessCommand);
43
+ createCommand.addCommand(createDockerCommand);
44
+ createCommand.addCommand(createQemuCommand);
45
+ createCommand.addCommand(createPodmanCommand);
46
+ appCommand;
47
+ }
48
+ //# sourceMappingURL=create-workload.js.map
@@ -0,0 +1,6 @@
1
+ export declare function handleApplicationDelete(options: {
2
+ appId?: string;
3
+ force?: boolean;
4
+ interactive?: boolean;
5
+ }): Promise<void>;
6
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/application/delete.ts"],"names":[],"mappings":"AAMA,wBAAsB,uBAAuB,CAAC,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6EhI"}
@@ -0,0 +1,76 @@
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.handleApplicationDelete = handleApplicationDelete;
7
+ const inquirer_1 = __importDefault(require("inquirer"));
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const instances_1 = require("../../services/instances");
10
+ const config_validator_1 = require("../utils/config-validator");
11
+ async function handleApplicationDelete(options) {
12
+ (0, config_validator_1.validateConfig)(instances_1.configManager, {
13
+ requireAuth: true,
14
+ requireOrganization: true,
15
+ });
16
+ let appId = options.appId;
17
+ // Interactive mode: prompt for application if not provided
18
+ if (!appId && options.interactive !== false) {
19
+ instances_1.logger.debug('Fetching applications for interactive selection');
20
+ const applications = await instances_1.applicationService.getApplications();
21
+ if (applications.length === 0) {
22
+ console.log(chalk_1.default.yellow('⚠ No applications configured'));
23
+ console.log(chalk_1.default.gray('Use "edgible application create" to create an application'));
24
+ return;
25
+ }
26
+ const choices = applications.map((app) => ({
27
+ name: `${app.name} (${app.id})${app.description ? ` - ${app.description}` : ''}`,
28
+ value: app.id,
29
+ }));
30
+ const { selectedAppId } = await inquirer_1.default.prompt([
31
+ {
32
+ type: 'list',
33
+ name: 'selectedAppId',
34
+ message: 'Select application to delete:',
35
+ choices,
36
+ },
37
+ ]);
38
+ appId = selectedAppId;
39
+ }
40
+ if (!appId) {
41
+ throw new Error('--app-id is required in non-interactive mode. Usage: edgible application delete --app-id <id>');
42
+ }
43
+ instances_1.logger.debug('Deleting application', { appId });
44
+ // Get application details for confirmation
45
+ let appName = appId;
46
+ let app;
47
+ try {
48
+ app = await instances_1.applicationService.getApplication(appId);
49
+ appName = app.name;
50
+ }
51
+ catch (error) {
52
+ instances_1.logger.debug('Could not fetch application details for confirmation', error);
53
+ }
54
+ // Confirm deletion unless --force is used
55
+ if (!options.force) {
56
+ const confirmMessage = app
57
+ ? `Are you sure you want to delete application "${appName}" (${appId})?`
58
+ : `Are you sure you want to delete application ${appId}?`;
59
+ const { confirm } = await inquirer_1.default.prompt([
60
+ {
61
+ type: 'confirm',
62
+ name: 'confirm',
63
+ message: confirmMessage,
64
+ default: false,
65
+ },
66
+ ]);
67
+ if (!confirm) {
68
+ instances_1.logger.info('Application deletion cancelled');
69
+ console.log(chalk_1.default.gray('Deletion cancelled'));
70
+ return;
71
+ }
72
+ }
73
+ await instances_1.applicationService.deleteApplication(appId);
74
+ console.log(chalk_1.default.green('\n✓ Application deleted successfully!'));
75
+ }
76
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1,5 @@
1
+ export declare function handleApplicationGet(options: {
2
+ appId?: string;
3
+ json?: boolean;
4
+ }): Promise<void>;
5
+ //# sourceMappingURL=get.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/commands/application/get.ts"],"names":[],"mappings":"AAKA,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BrG"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleApplicationGet = handleApplicationGet;
4
+ const instances_1 = require("../../services/instances");
5
+ const config_validator_1 = require("../utils/config-validator");
6
+ const output_formatter_1 = require("../utils/output-formatter");
7
+ async function handleApplicationGet(options) {
8
+ (0, config_validator_1.validateConfig)(instances_1.configManager, {
9
+ requireAuth: true,
10
+ requireOrganization: true,
11
+ });
12
+ if (!options.appId) {
13
+ throw new Error('--app-id is required. Usage: edgible application get --app-id <id> [--json]');
14
+ }
15
+ instances_1.logger.debug('Getting application', { appId: options.appId });
16
+ const app = await instances_1.applicationService.getApplication(options.appId);
17
+ if (options.json) {
18
+ console.log(JSON.stringify({
19
+ id: app.id,
20
+ name: app.name,
21
+ description: app.description || '',
22
+ url: app.url || '',
23
+ servingIp: app.servingIp,
24
+ port: app.port,
25
+ protocol: app.protocol,
26
+ status: app.status,
27
+ workloadId: app.workloadId || '',
28
+ createdAt: app.createdAt,
29
+ }, null, 2));
30
+ }
31
+ else {
32
+ console.log((0, output_formatter_1.formatApplication)(app));
33
+ }
34
+ }
35
+ //# sourceMappingURL=get.js.map
@@ -0,0 +1,4 @@
1
+ export declare function handleApplicationList(options: {
2
+ json?: boolean;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +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,CAuCtF"}
@@ -0,0 +1,41 @@
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.handleApplicationList = handleApplicationList;
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 output_formatter_1 = require("../utils/output-formatter");
11
+ async function handleApplicationList(options) {
12
+ (0, config_validator_1.validateConfig)(instances_1.configManager, {
13
+ requireAuth: true,
14
+ requireOrganization: true,
15
+ });
16
+ instances_1.logger.debug('Getting applications');
17
+ const applications = await instances_1.applicationService.getApplications();
18
+ if (applications.length === 0) {
19
+ console.log(chalk_1.default.yellow('⚠ No applications configured'));
20
+ console.log(chalk_1.default.gray('Use "edgible application create" to create an application'));
21
+ return;
22
+ }
23
+ if (options.json) {
24
+ console.log(JSON.stringify({
25
+ applications: applications.map((app) => ({
26
+ id: app.id,
27
+ name: app.name,
28
+ servingIp: app.servingIp,
29
+ port: app.port,
30
+ protocol: app.protocol,
31
+ status: app.status,
32
+ workloadId: app.workloadId,
33
+ createdAt: app.createdAt,
34
+ description: app.description || '',
35
+ })),
36
+ }, null, 2));
37
+ return;
38
+ }
39
+ console.log((0, output_formatter_1.formatList)(applications, (app, index) => `${index + 1}. ${(0, output_formatter_1.formatApplication)(app)}`, '📱 Configured Applications:', 'No applications configured'));
40
+ }
41
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1,7 @@
1
+ export declare function handleShortCodesCreate(options: {
2
+ appId?: string;
3
+ name?: string;
4
+ expires?: string;
5
+ maxUses?: string;
6
+ }): Promise<void>;
7
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../../src/commands/application/short-codes/create.ts"],"names":[],"mappings":"AAKA,wBAAsB,sBAAsB,CAAC,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkE1I"}