@edgible-team/cli 1.2.13 → 1.2.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/README.md +5 -3
  2. package/dist/client/api-client.d.ts +13 -1
  3. package/dist/client/api-client.d.ts.map +1 -1
  4. package/dist/client/api-client.js +19 -0
  5. package/dist/commands/agent/install.d.ts +2 -1
  6. package/dist/commands/agent/install.d.ts.map +1 -1
  7. package/dist/commands/agent/install.js +24 -7
  8. package/dist/commands/agent/start.d.ts +5 -1
  9. package/dist/commands/agent/start.d.ts.map +1 -1
  10. package/dist/commands/agent/start.js +19 -280
  11. package/dist/commands/agent/uninstall.d.ts.map +1 -1
  12. package/dist/commands/agent/uninstall.js +14 -7
  13. package/dist/commands/agent.d.ts.map +1 -1
  14. package/dist/commands/agent.js +3 -2
  15. package/dist/commands/ai/setup.d.ts +1 -1
  16. package/dist/commands/ai/setup.d.ts.map +1 -1
  17. package/dist/commands/ai.js +1 -1
  18. package/dist/commands/application/create-docker-compose.d.ts +3 -1
  19. package/dist/commands/application/create-docker-compose.d.ts.map +1 -1
  20. package/dist/commands/application/create-docker-compose.js +25 -69
  21. package/dist/commands/application/create-existing.d.ts +2 -2
  22. package/dist/commands/application/create-existing.d.ts.map +1 -1
  23. package/dist/commands/application/create-existing.js +27 -132
  24. package/dist/commands/application/create-managed-process.d.ts +3 -1
  25. package/dist/commands/application/create-managed-process.d.ts.map +1 -1
  26. package/dist/commands/application/create-managed-process.js +31 -75
  27. package/dist/commands/application/delete.d.ts +2 -1
  28. package/dist/commands/application/delete.d.ts.map +1 -1
  29. package/dist/commands/application/delete.js +19 -5
  30. package/dist/commands/application/update.d.ts +3 -0
  31. package/dist/commands/application/update.d.ts.map +1 -1
  32. package/dist/commands/application/update.js +45 -1
  33. package/dist/commands/application.d.ts.map +1 -1
  34. package/dist/commands/application.js +33 -19
  35. package/dist/commands/auth.d.ts.map +1 -1
  36. package/dist/commands/auth.js +44 -0
  37. package/dist/commands/debug.js +1 -1
  38. package/dist/commands/device/application-health.d.ts +7 -0
  39. package/dist/commands/device/application-health.d.ts.map +1 -0
  40. package/dist/commands/device/application-health.js +103 -0
  41. package/dist/commands/device/delete.d.ts +7 -0
  42. package/dist/commands/device/delete.d.ts.map +1 -0
  43. package/dist/commands/device/delete.js +69 -0
  44. package/dist/commands/device/health.d.ts +7 -0
  45. package/dist/commands/device/health.d.ts.map +1 -0
  46. package/dist/commands/device/health.js +78 -0
  47. package/dist/commands/device/list.d.ts +5 -0
  48. package/dist/commands/device/list.d.ts.map +1 -0
  49. package/dist/commands/device/list.js +46 -0
  50. package/dist/commands/device/telemetry.d.ts +8 -0
  51. package/dist/commands/device/telemetry.d.ts.map +1 -0
  52. package/dist/commands/device/telemetry.js +59 -0
  53. package/dist/commands/device.d.ts +6 -0
  54. package/dist/commands/device.d.ts.map +1 -0
  55. package/dist/commands/device.js +86 -0
  56. package/dist/commands/stack/deploy.d.ts +8 -0
  57. package/dist/commands/stack/deploy.d.ts.map +1 -0
  58. package/dist/commands/stack/deploy.js +61 -0
  59. package/dist/commands/stack/diff.d.ts +7 -0
  60. package/dist/commands/stack/diff.d.ts.map +1 -0
  61. package/dist/commands/stack/diff.js +66 -0
  62. package/dist/commands/stack/status.d.ts +9 -0
  63. package/dist/commands/stack/status.d.ts.map +1 -0
  64. package/dist/commands/stack/status.js +55 -0
  65. package/dist/commands/stack/teardown.d.ts +8 -0
  66. package/dist/commands/stack/teardown.d.ts.map +1 -0
  67. package/dist/commands/stack/teardown.js +107 -0
  68. package/dist/commands/stack/validate.d.ts +7 -0
  69. package/dist/commands/stack/validate.d.ts.map +1 -0
  70. package/dist/commands/stack/validate.js +44 -0
  71. package/dist/commands/stack.d.ts +10 -0
  72. package/dist/commands/stack.d.ts.map +1 -0
  73. package/dist/commands/stack.js +117 -0
  74. package/dist/commands/utils/auth-prompt.d.ts +25 -0
  75. package/dist/commands/utils/auth-prompt.d.ts.map +1 -0
  76. package/dist/commands/utils/auth-prompt.js +115 -0
  77. package/dist/commands/utils/device-prompt.d.ts +18 -0
  78. package/dist/commands/utils/device-prompt.d.ts.map +1 -0
  79. package/dist/commands/utils/device-prompt.js +58 -0
  80. package/dist/commands/utils/output-formatter.d.ts +13 -0
  81. package/dist/commands/utils/output-formatter.d.ts.map +1 -1
  82. package/dist/commands/utils/output-formatter.js +21 -0
  83. package/dist/index.js +4 -0
  84. package/dist/services/LocalAgentManager.d.ts +2 -1
  85. package/dist/services/LocalAgentManager.d.ts.map +1 -1
  86. package/dist/services/LocalAgentManager.js +6 -4
  87. package/dist/services/application/ApplicationService.d.ts +19 -0
  88. package/dist/services/application/ApplicationService.d.ts.map +1 -1
  89. package/dist/services/application/ApplicationService.js +14 -1
  90. package/dist/services/device/DeviceService.d.ts +62 -0
  91. package/dist/services/device/DeviceService.d.ts.map +1 -0
  92. package/dist/services/device/DeviceService.js +235 -0
  93. package/dist/services/edgible.d.ts +3 -1
  94. package/dist/services/edgible.d.ts.map +1 -1
  95. package/dist/services/edgible.js +5 -4
  96. package/dist/services/instances.d.ts +27 -1
  97. package/dist/services/instances.d.ts.map +1 -1
  98. package/dist/services/instances.js +53 -4
  99. package/dist/services/stack/DependencyGraphManager.d.ts +69 -0
  100. package/dist/services/stack/DependencyGraphManager.d.ts.map +1 -0
  101. package/dist/services/stack/DependencyGraphManager.js +204 -0
  102. package/dist/services/stack/DeviceResolver.d.ts +63 -0
  103. package/dist/services/stack/DeviceResolver.d.ts.map +1 -0
  104. package/dist/services/stack/DeviceResolver.js +147 -0
  105. package/dist/services/stack/GatewayResolver.d.ts +84 -0
  106. package/dist/services/stack/GatewayResolver.d.ts.map +1 -0
  107. package/dist/services/stack/GatewayResolver.js +179 -0
  108. package/dist/services/stack/StackParser.d.ts +38 -0
  109. package/dist/services/stack/StackParser.d.ts.map +1 -0
  110. package/dist/services/stack/StackParser.js +234 -0
  111. package/dist/services/stack/StackService.d.ts +76 -0
  112. package/dist/services/stack/StackService.d.ts.map +1 -0
  113. package/dist/services/stack/StackService.js +476 -0
  114. package/dist/types/AgentConfig.d.ts +26 -0
  115. package/dist/types/AgentConfig.d.ts.map +1 -1
  116. package/dist/types/ApiRequests.d.ts +5 -1
  117. package/dist/types/ApiRequests.d.ts.map +1 -1
  118. package/dist/types/ApiResponses.d.ts +5 -0
  119. package/dist/types/ApiResponses.d.ts.map +1 -1
  120. package/dist/types/JobTypes.d.ts +103 -0
  121. package/dist/types/JobTypes.d.ts.map +1 -0
  122. package/dist/types/JobTypes.js +80 -0
  123. package/dist/types/WebSocketMessages.d.ts +89 -0
  124. package/dist/types/WebSocketMessages.d.ts.map +1 -0
  125. package/dist/types/WebSocketMessages.js +5 -0
  126. package/dist/types/backendJobs.d.ts +102 -0
  127. package/dist/types/backendJobs.d.ts.map +1 -0
  128. package/dist/types/backendJobs.js +5 -0
  129. package/dist/types/models/ApplicationData.d.ts +1 -1
  130. package/dist/types/models/ApplicationData.d.ts.map +1 -1
  131. package/dist/types/models/DeviceData.d.ts +4 -0
  132. package/dist/types/models/DeviceData.d.ts.map +1 -1
  133. package/dist/types/stack.d.ts +191 -0
  134. package/dist/types/stack.d.ts.map +1 -0
  135. package/dist/types/stack.js +5 -0
  136. package/dist/types/validation/schemas.d.ts +20 -20
  137. package/dist/types/validation/schemas.js +1 -1
  138. package/dist/utils/stack-errors.d.ts +103 -0
  139. package/dist/utils/stack-errors.d.ts.map +1 -0
  140. package/dist/utils/stack-errors.js +158 -0
  141. package/dist/utils/stack-file.d.ts +11 -0
  142. package/dist/utils/stack-file.d.ts.map +1 -0
  143. package/dist/utils/stack-file.js +66 -0
  144. package/dist/validation/stack-schemas.d.ts +535 -0
  145. package/dist/validation/stack-schemas.d.ts.map +1 -0
  146. package/dist/validation/stack-schemas.js +178 -0
  147. package/package.json +4 -2
  148. package/dist/commands/agent/agent-handlers.d.ts +0 -45
  149. package/dist/commands/agent/agent-handlers.d.ts.map +0 -1
  150. package/dist/commands/agent/agent-handlers.js +0 -1159
  151. package/dist/commands/application/api-keys.d.ts +0 -3
  152. package/dist/commands/application/api-keys.d.ts.map +0 -1
  153. package/dist/commands/application/api-keys.js +0 -227
  154. package/dist/commands/application/create-compose.d.ts +0 -3
  155. package/dist/commands/application/create-compose.d.ts.map +0 -1
  156. package/dist/commands/application/create-compose.js +0 -381
  157. package/dist/commands/application/create-interactive.d.ts +0 -3
  158. package/dist/commands/application/create-interactive.d.ts.map +0 -1
  159. package/dist/commands/application/create-interactive.js +0 -326
  160. package/dist/commands/application/create-workload.d.ts +0 -5
  161. package/dist/commands/application/create-workload.d.ts.map +0 -1
  162. package/dist/commands/application/create-workload.js +0 -48
  163. package/dist/commands/application/short-codes.d.ts +0 -3
  164. package/dist/commands/application/short-codes.d.ts.map +0 -1
  165. package/dist/commands/application/short-codes.js +0 -226
  166. package/dist/commands/application/toggle.d.ts +0 -2
  167. package/dist/commands/application/toggle.d.ts.map +0 -1
  168. package/dist/commands/application/toggle.js +0 -78
  169. package/dist/commands/examples/migrated-command-example.d.ts +0 -31
  170. package/dist/commands/examples/migrated-command-example.d.ts.map +0 -1
  171. package/dist/commands/examples/migrated-command-example.js +0 -180
  172. package/dist/commands/managedGateway/create.d.ts +0 -6
  173. package/dist/commands/managedGateway/create.d.ts.map +0 -1
  174. package/dist/commands/managedGateway/create.js +0 -50
  175. package/dist/commands/managedGateway/delete.d.ts +0 -5
  176. package/dist/commands/managedGateway/delete.d.ts.map +0 -1
  177. package/dist/commands/managedGateway/delete.js +0 -57
  178. package/dist/commands/managedGateway/get.d.ts +0 -4
  179. package/dist/commands/managedGateway/get.d.ts.map +0 -1
  180. package/dist/commands/managedGateway/get.js +0 -71
  181. package/dist/commands/managedGateway/haproxy-stats.d.ts +0 -6
  182. package/dist/commands/managedGateway/haproxy-stats.d.ts.map +0 -1
  183. package/dist/commands/managedGateway/haproxy-stats.js +0 -131
  184. package/dist/commands/managedGateway/list.d.ts +0 -4
  185. package/dist/commands/managedGateway/list.d.ts.map +0 -1
  186. package/dist/commands/managedGateway/list.js +0 -50
  187. package/dist/commands/managedGateway/logs.d.ts +0 -10
  188. package/dist/commands/managedGateway/logs.d.ts.map +0 -1
  189. package/dist/commands/managedGateway/logs.js +0 -100
  190. package/dist/commands/managedGateway/reboot.d.ts +0 -5
  191. package/dist/commands/managedGateway/reboot.d.ts.map +0 -1
  192. package/dist/commands/managedGateway/reboot.js +0 -95
  193. package/dist/commands/managedGateway/resync.d.ts +0 -10
  194. package/dist/commands/managedGateway/resync.d.ts.map +0 -1
  195. package/dist/commands/managedGateway/resync.js +0 -69
  196. package/dist/commands/managedGateway/ssh.d.ts +0 -4
  197. package/dist/commands/managedGateway/ssh.d.ts.map +0 -1
  198. package/dist/commands/managedGateway/ssh.js +0 -130
  199. package/dist/commands/managedGateway/wipe-logs.d.ts +0 -4
  200. package/dist/commands/managedGateway/wipe-logs.d.ts.map +0 -1
  201. package/dist/commands/managedGateway/wipe-logs.js +0 -67
  202. package/dist/commands/managedGateway/wireguard.d.ts +0 -4
  203. package/dist/commands/managedGateway/wireguard.d.ts.map +0 -1
  204. package/dist/commands/managedGateway/wireguard.js +0 -68
  205. package/dist/di/bindings.d.ts +0 -15
  206. package/dist/di/bindings.d.ts.map +0 -1
  207. package/dist/di/bindings.js +0 -99
  208. package/dist/di/container.d.ts +0 -44
  209. package/dist/di/container.d.ts.map +0 -1
  210. package/dist/di/container.js +0 -88
  211. package/dist/di/types.d.ts +0 -23
  212. package/dist/di/types.d.ts.map +0 -1
  213. package/dist/di/types.js +0 -32
  214. package/dist/repositories/config-repository.d.ts +0 -46
  215. package/dist/repositories/config-repository.d.ts.map +0 -1
  216. package/dist/repositories/config-repository.js +0 -62
  217. package/dist/repositories/gateway-repository.d.ts +0 -37
  218. package/dist/repositories/gateway-repository.d.ts.map +0 -1
  219. package/dist/repositories/gateway-repository.js +0 -35
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmJzD"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoJzD"}
@@ -29,7 +29,8 @@ function setupAgentCommands(program) {
29
29
  .option('--type <type>', 'Installation type (systemd|launchd|windows-service)')
30
30
  .option('--dev', 'Run in development mode (foreground, no daemon)')
31
31
  .option('--local', 'Use local agent build from agent-v2/dist/ (development only)')
32
- .option('--no-interactive', 'Non-interactive mode for CI/VMs: use config or --device-id/--device-password, skip prompts')
32
+ .option('--non-interactive', 'Non-interactive mode for CI/VMs: use config, --device-name to create a device, or --device-id/--device-password, skip prompts')
33
+ .option('--device-name <name>', 'Create a new serving device with this name (non-interactive); alternative to --device-id/--device-password')
33
34
  .option('--device-id <id>', 'Serving device ID (non-interactive); can use EDGIBLE_DEVICE_ID')
34
35
  .option('--device-password <password>', 'Serving device password (non-interactive); can use EDGIBLE_DEVICE_PASSWORD')
35
36
  .option('--auto-install-deps', 'Install missing dependencies (WireGuard, Caddy, etc.) without prompting')
@@ -41,7 +42,7 @@ function setupAgentCommands(program) {
41
42
  }));
42
43
  agentCommand
43
44
  .command('start')
44
- .description('Start the local agent')
45
+ .description('Start the local agent (uses the device configured during install)')
45
46
  .option('--passthrough', 'Run agent with interactive output (required for sudo password prompt)')
46
47
  .option('--debug', 'Enable debug logging')
47
48
  .option('--docker', 'Run agent in Docker container')
@@ -9,6 +9,6 @@ export declare function handleAiSetup(options: {
9
9
  webuiDeviceId?: string;
10
10
  gatewayIds?: string;
11
11
  webuiDeployment?: string;
12
- noInteractive?: boolean;
12
+ nonInteractive?: boolean;
13
13
  }): Promise<void>;
14
14
  //# sourceMappingURL=setup.d.ts.map
@@ -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,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgFhB"}
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,CAgFhB"}
@@ -25,7 +25,7 @@ function setupAiCommands(program) {
25
25
  .option('--webui-device-id <id>', 'Serving device ID for Open WebUI')
26
26
  .option('--gateway-ids <ids>', 'Comma-separated gateway device IDs')
27
27
  .option('--webui-deployment <type>', 'WebUI deployment: local or remote')
28
- .option('--no-interactive', 'Run in non-interactive mode')
28
+ .option('--non-interactive', 'Run in non-interactive mode')
29
29
  .action((0, command_wrapper_1.wrapCommand)(async (options) => {
30
30
  await (0, setup_1.handleAiSetup)(options);
31
31
  }, {
@@ -5,6 +5,8 @@ export declare function handleApplicationCreateDockerCompose(options: {
5
5
  deviceId?: string;
6
6
  gatewayIds?: string;
7
7
  hostnames?: string;
8
- noInteractive?: boolean;
8
+ authModes?: string;
9
+ allowedOrgs?: string;
10
+ nonInteractive?: boolean;
9
11
  }): Promise<void>;
10
12
  //# sourceMappingURL=create-docker-compose.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-docker-compose.d.ts","sourceRoot":"","sources":["../../../src/commands/application/create-docker-compose.ts"],"names":[],"mappings":"AAYA,wBAAsB,oCAAoC,CAAC,OAAO,EAAE;IAClE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4ShB"}
1
+ {"version":3,"file":"create-docker-compose.d.ts","sourceRoot":"","sources":["../../../src/commands/application/create-docker-compose.ts"],"names":[],"mappings":"AAYA,wBAAsB,oCAAoC,CAAC,OAAO,EAAE;IAClE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,OAAO,CAAC,IAAI,CAAC,CA+PhB"}
@@ -44,6 +44,7 @@ const path = __importStar(require("path"));
44
44
  const instances_1 = require("../../services/instances");
45
45
  const config_validator_1 = require("../utils/config-validator");
46
46
  const input_parser_1 = require("../utils/input-parser");
47
+ const auth_prompt_1 = require("../utils/auth-prompt");
47
48
  const sudo_checker_1 = require("../../utils/sudo-checker");
48
49
  const docker_compose_parser_1 = require("../../utils/docker-compose-parser");
49
50
  async function handleApplicationCreateDockerCompose(options) {
@@ -51,6 +52,7 @@ async function handleApplicationCreateDockerCompose(options) {
51
52
  requireAuth: true,
52
53
  requireOrganization: true,
53
54
  });
55
+ const isInteractive = options.nonInteractive !== true;
54
56
  // Check sudo permissions
55
57
  if (!(0, sudo_checker_1.checkSudoPermissions)()) {
56
58
  console.log(chalk_1.default.yellow('⚠ Warning: Not running as sudo. Docker commands may fail without proper permissions.'));
@@ -94,7 +96,7 @@ async function handleApplicationCreateDockerCompose(options) {
94
96
  }
95
97
  // Get application name
96
98
  let appName = options.name;
97
- if (!appName && !options.noInteractive) {
99
+ if (!appName && isInteractive) {
98
100
  const { name } = await inquirer_1.default.prompt([
99
101
  {
100
102
  type: 'input',
@@ -111,7 +113,7 @@ async function handleApplicationCreateDockerCompose(options) {
111
113
  // Select port
112
114
  let selectedPort;
113
115
  let selectedContainer;
114
- if (!options.noInteractive) {
116
+ if (isInteractive) {
115
117
  const { selected } = await inquirer_1.default.prompt([
116
118
  {
117
119
  type: 'list',
@@ -130,16 +132,26 @@ async function handleApplicationCreateDockerCompose(options) {
130
132
  }
131
133
  // Description
132
134
  const description = options.description || `Application for ${appName} (docker-compose: ${selectedContainer})`;
133
- // Device IDs and Gateway IDs
135
+ // Device IDs and Gateway IDs. If --gateway-ids provided, use own gateways; else Edgible managed (default).
134
136
  let deviceId = options.deviceId;
135
137
  let gatewayIds = (0, input_parser_1.parseGatewayIds)(options.gatewayIds);
138
+ const useManagedGateway = gatewayIds.length === 0;
136
139
  let hostnames = Array.isArray(options.hostnames)
137
140
  ? options.hostnames
138
141
  : (typeof options.hostnames === 'string' && options.hostnames.trim().length > 0
139
142
  ? options.hostnames.split(',').map(s => s.trim()).filter(Boolean)
140
143
  : []);
141
- let useManagedGateway = false;
142
- if (!options.noInteractive) {
144
+ // Auth: use authModes (none | org | api-key | org+api-key)
145
+ const authModesFromFlag = (0, auth_prompt_1.parseAuthModes)(options.authModes);
146
+ const allowedOrgsFromFlag = options.allowedOrgs
147
+ ? options.allowedOrgs.split(',').map(s => s.trim()).filter(Boolean)
148
+ : [];
149
+ const { authModes, allowedOrganizations } = await (0, auth_prompt_1.promptAuthModes)({
150
+ authModesFromFlag: authModesFromFlag ?? undefined,
151
+ allowedOrgsFromFlag: allowedOrgsFromFlag.length > 0 ? allowedOrgsFromFlag : undefined,
152
+ nonInteractive: !isInteractive,
153
+ });
154
+ if (isInteractive) {
143
155
  // Optional: prompt for additional hostnames
144
156
  const { addHostnames } = await inquirer_1.default.prompt([
145
157
  {
@@ -152,70 +164,6 @@ async function handleApplicationCreateDockerCompose(options) {
152
164
  if (addHostnames && typeof addHostnames === 'string') {
153
165
  hostnames = addHostnames.split(',').map((s) => s.trim()).filter((s) => s.length > 0);
154
166
  }
155
- // Prompt for managed gateway option
156
- if (gatewayIds.length === 0) {
157
- const { useManaged } = await inquirer_1.default.prompt([
158
- {
159
- type: 'confirm',
160
- name: 'useManaged',
161
- message: 'Use Edgible managed gateway?',
162
- default: false,
163
- },
164
- ]);
165
- useManagedGateway = useManaged;
166
- if (!useManagedGateway) {
167
- // Ask if they want to assign a gateway at all
168
- const { assignGateway } = await inquirer_1.default.prompt([
169
- {
170
- type: 'confirm',
171
- name: 'assignGateway',
172
- message: 'Assign a gateway to this application? (No = local/internal access only)',
173
- default: true,
174
- },
175
- ]);
176
- if (assignGateway) {
177
- // Try to offer a list of gateways (via service), else fallback to manual input
178
- try {
179
- const gatewaysResp = await instances_1.gatewayService.listGateways();
180
- const gatewayChoices = gatewaysResp.gateways.map((g) => ({
181
- name: `${g.device.name} (${g.device.id})`,
182
- value: g.device.id,
183
- }));
184
- if (gatewayChoices.length > 0) {
185
- const { selectedGateways } = await inquirer_1.default.prompt([
186
- {
187
- type: 'checkbox',
188
- name: 'selectedGateways',
189
- message: 'Select gateway device(s):',
190
- choices: gatewayChoices,
191
- validate: (vals) => vals.length > 0 ? true : 'Select at least one gateway',
192
- },
193
- ]);
194
- gatewayIds = selectedGateways;
195
- }
196
- }
197
- catch (error) {
198
- instances_1.logger.warn('Failed to list gateways', error);
199
- }
200
- if (gatewayIds.length === 0) {
201
- const ans2 = await inquirer_1.default.prompt([
202
- {
203
- type: 'input',
204
- name: 'gatewayIds',
205
- message: 'Enter comma-separated gateway device IDs (or leave empty for no gateway):',
206
- validate: (v) => true, // Allow empty input
207
- },
208
- ]);
209
- if (ans2.gatewayIds && ans2.gatewayIds.trim()) {
210
- gatewayIds = (0, input_parser_1.parseGatewayIds)(ans2.gatewayIds);
211
- }
212
- }
213
- }
214
- else {
215
- instances_1.logger.info('Application will be created without gateway assignment (local/internal access only)');
216
- }
217
- }
218
- }
219
167
  // Serving device selection
220
168
  if (!deviceId) {
221
169
  try {
@@ -309,6 +257,12 @@ async function handleApplicationCreateDockerCompose(options) {
309
257
  if (hostnames.length > 0) {
310
258
  console.log(chalk_1.default.gray(`Additional hostnames: ${hostnames.join(', ')}`));
311
259
  }
260
+ if (authModes.length > 0 && !authModes.every((m) => m === 'none')) {
261
+ console.log(chalk_1.default.gray(`Auth modes: ${authModes.join(', ')}`));
262
+ if (allowedOrganizations && allowedOrganizations.length > 0) {
263
+ console.log(chalk_1.default.gray(`Allowed organizations: ${allowedOrganizations.join(', ')}`));
264
+ }
265
+ }
312
266
  const result = await instances_1.applicationService.createApplicationProgrammatically({
313
267
  name: appName,
314
268
  description,
@@ -319,6 +273,8 @@ async function handleApplicationCreateDockerCompose(options) {
319
273
  gatewayIds: useManagedGateway ? undefined : gatewayIds,
320
274
  useManagedGateway,
321
275
  subtype: 'docker-compose',
276
+ authModes,
277
+ allowedOrganizations: allowedOrganizations && allowedOrganizations.length > 0 ? allowedOrganizations : undefined,
322
278
  });
323
279
  console.log(chalk_1.default.green('\nāœ“ Application created successfully!'));
324
280
  console.log(chalk_1.default.blue('\nšŸ“‹ Application Details:'));
@@ -7,8 +7,8 @@ export declare function handleApplicationCreateExisting(options: {
7
7
  deviceId?: string;
8
8
  gatewayIds?: string;
9
9
  hostnames?: string;
10
- requireOrgAuth?: boolean;
10
+ authModes?: string;
11
11
  allowedOrgs?: string;
12
- noInteractive?: boolean;
12
+ nonInteractive?: boolean;
13
13
  }): Promise<void>;
14
14
  //# sourceMappingURL=create-existing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-existing.d.ts","sourceRoot":"","sources":["../../../src/commands/application/create-existing.ts"],"names":[],"mappings":"AASA,wBAAsB,+BAA+B,CAAC,OAAO,EAAE;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuWhB"}
1
+ {"version":3,"file":"create-existing.d.ts","sourceRoot":"","sources":["../../../src/commands/application/create-existing.ts"],"names":[],"mappings":"AASA,wBAAsB,+BAA+B,CAAC,OAAO,EAAE;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,OAAO,CAAC,IAAI,CAAC,CAuPhB"}
@@ -10,16 +10,17 @@ const WorkloadDetector_1 = require("../../detection/WorkloadDetector");
10
10
  const instances_1 = require("../../services/instances");
11
11
  const config_validator_1 = require("../utils/config-validator");
12
12
  const input_parser_1 = require("../utils/input-parser");
13
+ const auth_prompt_1 = require("../utils/auth-prompt");
13
14
  async function handleApplicationCreateExisting(options) {
14
15
  (0, config_validator_1.validateConfig)(instances_1.configManager, {
15
16
  requireAuth: true,
16
17
  requireOrganization: true,
17
18
  });
19
+ const isInteractive = options.nonInteractive !== true;
18
20
  instances_1.logger.debug('Creating application', { name: options.name });
19
21
  // Name
20
22
  let appName = options.name;
21
- let useManagedGateway = false;
22
- if (!appName && !options.noInteractive) {
23
+ if (!appName && isInteractive) {
23
24
  const { name } = await inquirer_1.default.prompt([
24
25
  {
25
26
  type: 'input',
@@ -37,41 +38,33 @@ async function handleApplicationCreateExisting(options) {
37
38
  let description = options.description || `Application for ${appName}`;
38
39
  // Port (may be overridden by workload selection in interactive mode)
39
40
  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
41
+ // Protocol: default HTTPS for HTTP(S) apps
42
+ let protocolUnion = options.protocol
43
+ ? (0, input_parser_1.parseProtocol)(options.protocol)
44
+ : 'https';
43
45
  if (options.httpsUpgrade && protocolUnion === 'http') {
44
46
  protocolUnion = 'https';
45
47
  }
46
- // Device IDs (serving) and Gateway IDs
48
+ // Device IDs (serving) and Gateway IDs. If --gateway-ids provided, use own gateways; else Edgible managed (default).
47
49
  let deviceId = options.deviceId;
48
50
  let gatewayIds = (0, input_parser_1.parseGatewayIds)(options.gatewayIds);
51
+ const useManagedGateway = gatewayIds.length === 0;
49
52
  let hostnames = Array.isArray(options.hostnames)
50
53
  ? options.hostnames
51
54
  : (typeof options.hostnames === 'string' && options.hostnames.trim().length > 0
52
55
  ? options.hostnames.split(',').map(s => s.trim()).filter(Boolean)
53
56
  : []);
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
- }
57
+ // Auth: use authModes (none | org | api-key | org+api-key)
58
+ const authModesFromFlag = (0, auth_prompt_1.parseAuthModes)(options.authModes);
59
+ const allowedOrgsFromFlag = options.allowedOrgs
60
+ ? options.allowedOrgs.split(',').map(s => s.trim()).filter(Boolean)
61
+ : [];
62
+ const { authModes, allowedOrganizations } = await (0, auth_prompt_1.promptAuthModes)({
63
+ authModesFromFlag: authModesFromFlag ?? undefined,
64
+ allowedOrgsFromFlag: allowedOrgsFromFlag.length > 0 ? allowedOrgsFromFlag : undefined,
65
+ nonInteractive: !isInteractive,
66
+ });
67
+ if (isInteractive) {
75
68
  // Optional: prompt for additional hostnames
76
69
  const { addHostnames } = await inquirer_1.default.prompt([
77
70
  {
@@ -84,104 +77,6 @@ async function handleApplicationCreateExisting(options) {
84
77
  if (addHostnames && typeof addHostnames === 'string') {
85
78
  hostnames = addHostnames.split(',').map((s) => s.trim()).filter((s) => s.length > 0);
86
79
  }
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
80
  // Serving device selection - fetch available serving devices from organization
186
81
  if (!deviceId) {
187
82
  try {
@@ -239,7 +134,7 @@ async function handleApplicationCreateExisting(options) {
239
134
  }
240
135
  const subtype = 'local-preexisting';
241
136
  // If interactive, allow choosing a local workload
242
- if (!options.noInteractive) {
137
+ if (isInteractive) {
243
138
  try {
244
139
  const workloads = await WorkloadDetector_1.WorkloadDetector.detectWorkloads();
245
140
  const running = workloads.filter((w) => w.status === 'running');
@@ -326,10 +221,10 @@ async function handleApplicationCreateExisting(options) {
326
221
  if (hostnames.length > 0) {
327
222
  console.log(chalk_1.default.gray(`Additional hostnames: ${hostnames.join(', ')}`));
328
223
  }
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(', ')}`));
224
+ if (authModes.length > 0 && !authModes.every((m) => m === 'none')) {
225
+ console.log(chalk_1.default.gray(`Auth modes: ${authModes.join(', ')}`));
226
+ if (allowedOrganizations && allowedOrganizations.length > 0) {
227
+ console.log(chalk_1.default.gray(`Allowed organizations: ${allowedOrganizations.join(', ')}`));
333
228
  }
334
229
  }
335
230
  const result = await instances_1.applicationService.createApplicationProgrammatically({
@@ -342,8 +237,8 @@ async function handleApplicationCreateExisting(options) {
342
237
  gatewayIds: useManagedGateway ? undefined : gatewayIds,
343
238
  useManagedGateway,
344
239
  subtype,
345
- requireOrgAuth,
346
- allowedOrganizations: allowedOrgs.length > 0 ? allowedOrgs : undefined,
240
+ authModes,
241
+ allowedOrganizations: allowedOrganizations && allowedOrganizations.length > 0 ? allowedOrganizations : undefined,
347
242
  });
348
243
  console.log(chalk_1.default.green('\nāœ“ Application created successfully!'));
349
244
  console.log(chalk_1.default.blue('\nšŸ“‹ Application Details:'));
@@ -10,6 +10,8 @@ export declare function handleApplicationCreateManagedProcess(options: {
10
10
  deviceId?: string;
11
11
  gatewayIds?: string;
12
12
  hostnames?: string;
13
- noInteractive?: boolean;
13
+ authModes?: string;
14
+ allowedOrgs?: string;
15
+ nonInteractive?: boolean;
14
16
  }): Promise<void>;
15
17
  //# sourceMappingURL=create-managed-process.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-managed-process.d.ts","sourceRoot":"","sources":["../../../src/commands/application/create-managed-process.ts"],"names":[],"mappings":"AAQA,wBAAsB,qCAAqC,CAAC,OAAO,EAAE;IACnE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8XhB"}
1
+ {"version":3,"file":"create-managed-process.d.ts","sourceRoot":"","sources":["../../../src/commands/application/create-managed-process.ts"],"names":[],"mappings":"AAQA,wBAAsB,qCAAqC,CAAC,OAAO,EAAE;IACnE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,OAAO,CAAC,IAAI,CAAC,CAiVhB"}