@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,78 +0,0 @@
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.handleApplicationToggle = handleApplicationToggle;
7
- const inquirer_1 = __importDefault(require("inquirer"));
8
- const chalk_1 = __importDefault(require("chalk"));
9
- const command_wrapper_1 = require("../base/command-wrapper");
10
- const instances_1 = require("../../services/instances");
11
- const config_validator_1 = require("../utils/config-validator");
12
- async function handleApplicationToggle(appId) {
13
- (0, command_wrapper_1.wrapCommand)(async (options) => {
14
- (0, config_validator_1.validateConfig)(instances_1.configManager, {
15
- requireAuth: true,
16
- requireOrganization: true,
17
- });
18
- let appId = options.appId;
19
- if (!appId) {
20
- const applications = await instances_1.applicationService.getApplications();
21
- if (applications.length === 0) {
22
- console.log(chalk_1.default.yellow('⚠ No applications configured'));
23
- return;
24
- }
25
- const { selectedAppId } = await inquirer_1.default.prompt([
26
- {
27
- type: 'list',
28
- name: 'selectedAppId',
29
- message: 'Select application:',
30
- choices: applications.map((app) => ({
31
- name: `${app.name} (${app.id})`,
32
- value: app.id,
33
- })),
34
- },
35
- ]);
36
- appId = selectedAppId;
37
- }
38
- if (!appId) {
39
- throw new Error('Application ID is required');
40
- }
41
- let codeId = options.codeId;
42
- if (!codeId) {
43
- const codes = await instances_1.applicationService.listShortCodes(appId);
44
- if (codes.length === 0) {
45
- console.log(chalk_1.default.yellow('⚠ No short codes configured'));
46
- return;
47
- }
48
- const { selectedCodeId } = await inquirer_1.default.prompt([
49
- {
50
- type: 'list',
51
- name: 'selectedCodeId',
52
- message: 'Select short code to toggle:',
53
- choices: codes.map((code) => ({
54
- name: `${code.name} (${code.code}) - ${code.enabled ? 'Enabled' : 'Disabled'}`,
55
- value: code.id,
56
- })),
57
- },
58
- ]);
59
- codeId = selectedCodeId;
60
- }
61
- if (!codeId || !appId) {
62
- throw new Error('Application ID and Code ID are required');
63
- }
64
- // Get current status
65
- const codes = await instances_1.applicationService.listShortCodes(appId);
66
- const code = codes.find((c) => c.id === codeId);
67
- if (!code) {
68
- throw new Error('Short code not found');
69
- }
70
- await instances_1.applicationService.updateShortCode(appId, codeId, { enabled: !code.enabled });
71
- console.log(chalk_1.default.green(`\n✓ Short code ${code.enabled ? 'disabled' : 'enabled'} successfully!`));
72
- }, {
73
- requireAuth: true,
74
- requireOrganization: true,
75
- });
76
- ;
77
- }
78
- //# sourceMappingURL=toggle.js.map
@@ -1,31 +0,0 @@
1
- /**
2
- * Example of a migrated command using all the new infrastructure
3
- * This demonstrates how to use:
4
- * - Dependency injection
5
- * - Logger abstraction
6
- * - Validation with Zod
7
- * - Command wrapper
8
- * - Shared utilities
9
- * - Proper TypeScript types
10
- *
11
- * This is a reference implementation for migrating other commands
12
- */
13
- import { Command } from 'commander';
14
- /**
15
- * Example: Migrated gateway create command
16
- * This shows the pattern for all command migrations
17
- */
18
- export declare function setupExampleGatewayCreateCommand(program: Command): void;
19
- /**
20
- * Migration checklist:
21
- *
22
- * ✅ Use DI container to get services
23
- * ✅ Use logger instead of console.log
24
- * ✅ Validate inputs with Zod schemas
25
- * ✅ Use wrapCommand for error handling
26
- * ✅ Use shared utilities for common operations
27
- * ✅ Use proper TypeScript types (no any)
28
- * ✅ Validate configuration before execution
29
- * ✅ Format output consistently
30
- */
31
- //# sourceMappingURL=migrated-command-example.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrated-command-example.d.ts","sourceRoot":"","sources":["../../../src/commands/examples/migrated-command-example.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC;;;GAGG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+KvE;AAED;;;;;;;;;;;GAWG"}
@@ -1,180 +0,0 @@
1
- "use strict";
2
- /**
3
- * Example of a migrated command using all the new infrastructure
4
- * This demonstrates how to use:
5
- * - Dependency injection
6
- * - Logger abstraction
7
- * - Validation with Zod
8
- * - Command wrapper
9
- * - Shared utilities
10
- * - Proper TypeScript types
11
- *
12
- * This is a reference implementation for migrating other commands
13
- */
14
- var __importDefault = (this && this.__importDefault) || function (mod) {
15
- return (mod && mod.__esModule) ? mod : { "default": mod };
16
- };
17
- Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.setupExampleGatewayCreateCommand = setupExampleGatewayCreateCommand;
19
- const container_1 = require("../../di/container");
20
- const types_1 = require("../../di/types");
21
- const command_wrapper_1 = require("../base/command-wrapper");
22
- const validator_1 = require("../../validation/validator");
23
- const schemas_1 = require("../../validation/schemas");
24
- const gateway_prompt_1 = require("../utils/gateway-prompt");
25
- const output_formatter_1 = require("../utils/output-formatter");
26
- const config_validator_1 = require("../utils/config-validator");
27
- const chalk_1 = __importDefault(require("chalk"));
28
- /**
29
- * Example: Migrated gateway create command
30
- * This shows the pattern for all command migrations
31
- */
32
- function setupExampleGatewayCreateCommand(program) {
33
- const gatewayCommand = program
34
- .command('gateway')
35
- .description('Manage gateways')
36
- .alias('gw');
37
- gatewayCommand
38
- .command('create')
39
- .description('Create a new gateway device and EC2 instance')
40
- .option('-n, --name <name>', 'Gateway name')
41
- .option('-d, --description <description>', 'Gateway description')
42
- .option('-p, --profile <profile>', 'AWS profile to use')
43
- .option('-r, --region <region>', 'AWS region')
44
- .option('-t, --instance-type <type>', 'EC2 instance type', 't3.micro')
45
- .action((0, command_wrapper_1.wrapCommand)(async (options) => {
46
- // Get dependencies from container
47
- const container = (0, container_1.getContainer)();
48
- const logger = container.get(types_1.TYPES.Logger);
49
- const gatewayService = container.get(types_1.TYPES.GatewayService);
50
- const configRepository = container.get(types_1.TYPES.ConfigRepository);
51
- // Validate configuration
52
- (0, config_validator_1.validateConfig)(configRepository, {
53
- requireAuth: true,
54
- requireOrganization: true,
55
- });
56
- // Validate and parse options using Zod
57
- const validatedOptions = (0, validator_1.validateOptions)(schemas_1.createGatewayRequestSchema, {
58
- name: options.name,
59
- description: options.description,
60
- awsProfile: options.profile,
61
- region: options.region,
62
- instanceType: options.instanceType,
63
- });
64
- // Log command execution
65
- logger.info('Creating gateway', { name: validatedOptions.name });
66
- // Use the service
67
- const result = await gatewayService.createGateway({
68
- name: validatedOptions.name,
69
- description: validatedOptions.description,
70
- awsProfile: validatedOptions.awsProfile,
71
- region: validatedOptions.region,
72
- instanceType: validatedOptions.instanceType,
73
- });
74
- // Format output
75
- console.log((0, output_formatter_1.formatSuccess)('Gateway created successfully!'));
76
- console.log(chalk_1.default.blue('\n📋 Gateway Details:'));
77
- console.log((0, output_formatter_1.formatGateway)({
78
- device: result.gateway,
79
- ec2Instance: result.ec2Instance,
80
- }));
81
- logger.debug('Gateway creation completed', { gatewayId: result.gateway.id });
82
- }, {
83
- configRepository: (0, container_1.getContainer)().get(types_1.TYPES.ConfigRepository),
84
- requireAuth: true,
85
- requireOrganization: true,
86
- }));
87
- /**
88
- * Example: Migrated gateway list command
89
- */
90
- gatewayCommand
91
- .command('list')
92
- .description('List all gateway devices')
93
- .option('--json', 'Output as JSON')
94
- .alias('ls')
95
- .action((0, command_wrapper_1.wrapCommand)(async (options) => {
96
- const container = (0, container_1.getContainer)();
97
- const logger = container.get(types_1.TYPES.Logger);
98
- const gatewayService = container.get(types_1.TYPES.GatewayService);
99
- const configRepository = container.get(types_1.TYPES.ConfigRepository);
100
- (0, config_validator_1.validateConfig)(configRepository, {
101
- requireAuth: true,
102
- requireOrganization: true,
103
- });
104
- logger.debug('Listing gateways');
105
- const response = await gatewayService.listGateways();
106
- if (options.json) {
107
- console.log(JSON.stringify({
108
- gateways: response.gateways.map((gateway) => ({
109
- id: gateway.device.id,
110
- name: gateway.device.name,
111
- description: gateway.device.description,
112
- ec2Instance: gateway.ec2Instance?.instanceId,
113
- publicIp: gateway.ec2Instance?.publicIp,
114
- privateIp: gateway.ec2Instance?.privateIp,
115
- region: gateway.ec2Instance?.region,
116
- state: gateway.ec2Instance?.state,
117
- createdAt: gateway.device.createdAt,
118
- })),
119
- }, null, 2));
120
- return;
121
- }
122
- if (response.gateways.length === 0) {
123
- console.log(chalk_1.default.yellow('⚠ No gateways found'));
124
- console.log(chalk_1.default.gray('Use "edgible gateway create" to create a gateway'));
125
- return;
126
- }
127
- console.log(chalk_1.default.blue.bold('🌐 Gateway Devices:\n'));
128
- response.gateways.forEach((gateway) => {
129
- console.log((0, output_formatter_1.formatGateway)(gateway));
130
- });
131
- }, {
132
- configRepository: (0, container_1.getContainer)().get(types_1.TYPES.ConfigRepository),
133
- requireAuth: true,
134
- requireOrganization: true,
135
- }));
136
- /**
137
- * Example: Migrated gateway delete command using shared utilities
138
- */
139
- gatewayCommand
140
- .command('delete')
141
- .description('Delete a gateway device and EC2 instance')
142
- .option('-i, --id <id>', 'Gateway ID to delete')
143
- .option('-f, --force', 'Force delete even if applications exist')
144
- .alias('rm')
145
- .action((0, command_wrapper_1.wrapCommand)(async (options) => {
146
- const container = (0, container_1.getContainer)();
147
- const logger = container.get(types_1.TYPES.Logger);
148
- const gatewayService = container.get(types_1.TYPES.GatewayService);
149
- const configRepository = container.get(types_1.TYPES.ConfigRepository);
150
- (0, config_validator_1.validateConfig)(configRepository, {
151
- requireAuth: true,
152
- requireOrganization: true,
153
- });
154
- // Use shared utility to get gateway ID
155
- const gatewayId = await (0, gateway_prompt_1.getGatewayId)(gatewayService, options.id, { required: true });
156
- if (!gatewayId) {
157
- throw new Error('Gateway ID is required');
158
- }
159
- logger.info('Deleting gateway', { gatewayId });
160
- await gatewayService.deleteGateway(gatewayId, options.force || false);
161
- console.log((0, output_formatter_1.formatSuccess)('Gateway deleted successfully!'));
162
- }, {
163
- configRepository: (0, container_1.getContainer)().get(types_1.TYPES.ConfigRepository),
164
- requireAuth: true,
165
- requireOrganization: true,
166
- }));
167
- }
168
- /**
169
- * Migration checklist:
170
- *
171
- * ✅ Use DI container to get services
172
- * ✅ Use logger instead of console.log
173
- * ✅ Validate inputs with Zod schemas
174
- * ✅ Use wrapCommand for error handling
175
- * ✅ Use shared utilities for common operations
176
- * ✅ Use proper TypeScript types (no any)
177
- * ✅ Validate configuration before execution
178
- * ✅ Format output consistently
179
- */
180
- //# sourceMappingURL=migrated-command-example.js.map
@@ -1,6 +0,0 @@
1
- export declare function handleManagedGatewayCreate(options: {
2
- name?: string;
3
- region?: string;
4
- instanceType?: string;
5
- }): Promise<void>;
6
- //# sourceMappingURL=create.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/managedGateway/create.ts"],"names":[],"mappings":"AAKA,wBAAsB,0BAA0B,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgDlI"}
@@ -1,50 +0,0 @@
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.handleManagedGatewayCreate = handleManagedGatewayCreate;
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 handleManagedGatewayCreate(options) {
12
- wrapCommand(async (options) => {
13
- (0, config_validator_1.validateConfig)(instances_1.configManager, {
14
- requireAuth: true,
15
- });
16
- let gatewayName = options.name;
17
- const region = options.region || 'ap-southeast-2';
18
- const instanceType = options.instanceType || 't3.micro';
19
- if (!gatewayName) {
20
- const nameAnswer = await inquirer_1.default.prompt([
21
- {
22
- type: 'input',
23
- name: 'name',
24
- message: 'Enter gateway name:',
25
- validate: (input) => {
26
- if (!input.trim()) {
27
- return 'Gateway name is required';
28
- }
29
- return true;
30
- },
31
- },
32
- ]);
33
- gatewayName = nameAnswer.name.trim();
34
- }
35
- instances_1.logger.info('Creating managed gateway', { name: gatewayName, region, instanceType });
36
- const result = await instances_1.managedGatewayService.createManagedGateway({
37
- name: gatewayName,
38
- region,
39
- instanceType
40
- });
41
- console.log(chalk_1.default.green('\n✓ Managed gateway created successfully!'));
42
- console.log(chalk_1.default.blue('\n📋 Gateway Details:'));
43
- console.log(chalk_1.default.white(` ID: ${result.gateway.id}`));
44
- console.log(chalk_1.default.white(` Name: ${result.gateway.name}`));
45
- console.log(chalk_1.default.white(` IP Address: ${result.gateway.ipAddress || 'N/A'}`));
46
- console.log(chalk_1.default.white(` Status: ${result.gateway.status || 'N/A'}`));
47
- console.log(chalk_1.default.white(` Created: ${new Date(result.gateway.createdAt).toLocaleString()}`));
48
- });
49
- }
50
- //# sourceMappingURL=create.js.map
@@ -1,5 +0,0 @@
1
- export declare function handleManagedGatewayDelete(options: {
2
- id?: string;
3
- force?: boolean;
4
- }): Promise<void>;
5
- //# sourceMappingURL=delete.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/managedGateway/delete.ts"],"names":[],"mappings":"AAKA,wBAAsB,0BAA0B,CAAC,OAAO,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuDzG"}
@@ -1,57 +0,0 @@
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.handleManagedGatewayDelete = handleManagedGatewayDelete;
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 handleManagedGatewayDelete(options) {
12
- wrapCommand(async (options) => {
13
- (0, config_validator_1.validateConfig)(instances_1.configManager, {
14
- requireAuth: true,
15
- });
16
- let gatewayId = options.id;
17
- if (!gatewayId) {
18
- // List gateways first to allow selection
19
- const listResponse = await instances_1.managedGatewayService.listManagedGateways();
20
- if (!listResponse.success || !listResponse.gateways || listResponse.gateways.length === 0) {
21
- console.log(chalk_1.default.yellow('⚠ No managed gateways found'));
22
- return;
23
- }
24
- const choices = listResponse.gateways.map((gateway) => ({
25
- name: `${gateway.name} (${gateway.id})`,
26
- value: gateway.id,
27
- }));
28
- const answer = await inquirer_1.default.prompt([
29
- {
30
- type: 'list',
31
- name: 'gatewayId',
32
- message: 'Select managed gateway to delete:',
33
- choices,
34
- },
35
- ]);
36
- gatewayId = answer.gatewayId;
37
- }
38
- // Confirm deletion
39
- const confirm = await inquirer_1.default.prompt([
40
- {
41
- type: 'confirm',
42
- name: 'confirm',
43
- message: `Are you sure you want to delete managed gateway ${gatewayId}?`,
44
- default: false,
45
- },
46
- ]);
47
- if (!confirm.confirm) {
48
- instances_1.logger.info('Managed gateway deletion cancelled');
49
- console.log(chalk_1.default.gray('Deletion cancelled'));
50
- return;
51
- }
52
- instances_1.logger.info('Deleting managed gateway', { gatewayId, force: options.force || false });
53
- await instances_1.managedGatewayService.deleteManagedGateway(gatewayId, options.force || false);
54
- console.log(chalk_1.default.green('✓ Managed gateway deleted successfully!'));
55
- });
56
- }
57
- //# sourceMappingURL=delete.js.map
@@ -1,4 +0,0 @@
1
- export declare function handleManagedGatewayGet(options: {
2
- id?: string;
3
- }): Promise<void>;
4
- //# sourceMappingURL=get.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/commands/managedGateway/get.ts"],"names":[],"mappings":"AAKA,wBAAsB,uBAAuB,CAAC,OAAO,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuErF"}
@@ -1,71 +0,0 @@
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.handleManagedGatewayGet = handleManagedGatewayGet;
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 handleManagedGatewayGet(options) {
12
- wrapCommand(async (options) => {
13
- (0, config_validator_1.validateConfig)(instances_1.configManager, {
14
- requireAuth: true,
15
- });
16
- let gatewayId = options.id;
17
- if (!gatewayId) {
18
- // List gateways first to allow selection
19
- const listResponse = await instances_1.managedGatewayService.listManagedGateways();
20
- if (!listResponse.success || !listResponse.gateways || listResponse.gateways.length === 0) {
21
- console.log(chalk_1.default.yellow('⚠ No managed gateways found'));
22
- return;
23
- }
24
- const choices = listResponse.gateways.map((gateway) => ({
25
- name: `${gateway.name} (${gateway.id})`,
26
- value: gateway.id,
27
- }));
28
- const answer = await inquirer_1.default.prompt([
29
- {
30
- type: 'list',
31
- name: 'gatewayId',
32
- message: 'Select managed gateway:',
33
- choices,
34
- },
35
- ]);
36
- gatewayId = answer.gatewayId;
37
- }
38
- instances_1.logger.info('Getting managed gateway details', { gatewayId });
39
- const response = await instances_1.managedGatewayService.getManagedGateway(gatewayId);
40
- if (!response.success || !response.gateway) {
41
- console.log(chalk_1.default.red('✗ Managed gateway not found'));
42
- return;
43
- }
44
- const gateway = response.gateway;
45
- console.log(chalk_1.default.blue('\n📋 Managed Gateway Details:'));
46
- console.log(chalk_1.default.white(` ID: ${gateway.id}`));
47
- console.log(chalk_1.default.white(` Name: ${gateway.name}`));
48
- if (gateway.description) {
49
- console.log(chalk_1.default.gray(` Description: ${gateway.description}`));
50
- }
51
- console.log(chalk_1.default.white(` IP Address: ${gateway.ipAddress || 'N/A'}`));
52
- console.log(chalk_1.default.white(` Status: ${gateway.status || 'N/A'}`));
53
- console.log(chalk_1.default.white(` Last Seen: ${gateway.lastSeen ? new Date(gateway.lastSeen).toLocaleString() : 'N/A'}`));
54
- console.log(chalk_1.default.white(` Created: ${new Date(gateway.createdAt).toLocaleString()}`));
55
- console.log(chalk_1.default.white(` Organization ID: ${gateway.organizationId}`));
56
- if (gateway.capacity) {
57
- console.log(chalk_1.default.blue('\n📊 Capacity:'));
58
- console.log(chalk_1.default.white(` Current Applications: ${gateway.capacity.currentApps}`));
59
- console.log(chalk_1.default.white(` Max Applications: ${gateway.capacity.maxApps}`));
60
- const usagePercent = (gateway.capacity.currentApps / gateway.capacity.maxApps) * 100;
61
- console.log(chalk_1.default.white(` Usage: ${usagePercent.toFixed(1)}%`));
62
- }
63
- if (gateway.health) {
64
- console.log(chalk_1.default.blue('\n🏥 Health:'));
65
- console.log(chalk_1.default.white(` Healthy: ${gateway.health.healthy ? chalk_1.default.green('Yes') : chalk_1.default.red('No')}`));
66
- console.log(chalk_1.default.white(` Last Seen: ${gateway.health.lastSeen ? new Date(gateway.health.lastSeen).toLocaleString() : 'N/A'}`));
67
- console.log(chalk_1.default.white(` Application Count: ${gateway.health.applicationCount}`));
68
- }
69
- });
70
- }
71
- //# sourceMappingURL=get.js.map
@@ -1,6 +0,0 @@
1
- export declare function handleManagedGatewayHaproxyStats(options: {
2
- id?: string;
3
- output?: string;
4
- port?: string;
5
- }): Promise<void>;
6
- //# sourceMappingURL=haproxy-stats.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"haproxy-stats.d.ts","sourceRoot":"","sources":["../../../src/commands/managedGateway/haproxy-stats.ts"],"names":[],"mappings":"AAKA,wBAAsB,gCAAgC,CAAC,OAAO,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiG9H"}
@@ -1,131 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.handleManagedGatewayHaproxyStats = handleManagedGatewayHaproxyStats;
40
- const inquirer_1 = __importDefault(require("inquirer"));
41
- const chalk_1 = __importDefault(require("chalk"));
42
- const instances_1 = require("../../services/instances");
43
- const config_validator_1 = require("../utils/config-validator");
44
- async function handleManagedGatewayHaproxyStats(options) {
45
- async (options) => {
46
- (0, config_validator_1.validateConfig)(instances_1.configManager, {
47
- requireAuth: true,
48
- });
49
- let gatewayId = options.id;
50
- // If no gateway ID provided, let user select
51
- if (!gatewayId) {
52
- const listResponse = await instances_1.managedGatewayService.listManagedGateways();
53
- if (!listResponse.success || !listResponse.gateways || listResponse.gateways.length === 0) {
54
- console.log(chalk_1.default.yellow('⚠ No managed gateways found'));
55
- return;
56
- }
57
- const choices = listResponse.gateways.map((gateway) => ({
58
- name: `${gateway.name} (${gateway.id})`,
59
- value: gateway.id,
60
- }));
61
- const answer = await inquirer_1.default.prompt([
62
- {
63
- type: 'list',
64
- name: 'gatewayId',
65
- message: 'Select managed gateway:',
66
- choices,
67
- },
68
- ]);
69
- gatewayId = answer.gatewayId;
70
- }
71
- const outputFile = options.output || 'haproxy-stats.html';
72
- const statsPort = options.port || '8404';
73
- instances_1.logger.info('Downloading HAProxy stats', { gatewayId, outputFile, statsPort });
74
- try {
75
- if (!gatewayId) {
76
- console.log(chalk_1.default.red('✗ Gateway ID is required'));
77
- return;
78
- }
79
- // First check if HAProxy is running and stats are available
80
- const checkCommand = `curl -s -o /dev/null -w "%{http_code}" http://localhost:${statsPort}/stats`;
81
- const checkResult = await instances_1.diagnosticsService.executeManagedGatewayCommand(gatewayId, checkCommand);
82
- if (!checkResult.success) {
83
- console.log(chalk_1.default.red('✗ Failed to check HAProxy stats availability'));
84
- if (checkResult.error) {
85
- console.log(chalk_1.default.red(` Error: ${checkResult.error}`));
86
- }
87
- return;
88
- }
89
- const httpCode = checkResult.output.trim();
90
- if (httpCode !== '200') {
91
- console.log(chalk_1.default.red(`✗ HAProxy stats not accessible (HTTP ${httpCode})`));
92
- console.log(chalk_1.default.yellow(` Hint: Check if HAProxy stats are enabled on port ${statsPort}`));
93
- console.log(chalk_1.default.yellow(` Hint: Check HAPROXY_STATS_PORT environment variable on the gateway`));
94
- console.log(chalk_1.default.yellow(` Hint: Verify HAProxy is running: edgible managed-gateway ssh --id ${gatewayId}`));
95
- return;
96
- }
97
- console.log(chalk_1.default.blue('📊 Downloading HAProxy stats...'));
98
- // Download the stats HTML
99
- const downloadCommand = `curl -s http://localhost:${statsPort}/stats`;
100
- const result = await instances_1.diagnosticsService.executeManagedGatewayCommand(gatewayId, downloadCommand);
101
- if (result.success) {
102
- if (result.output.trim()) {
103
- // Write to file
104
- const fs = await Promise.resolve().then(() => __importStar(require('fs/promises')));
105
- await fs.writeFile(outputFile, result.output, 'utf8');
106
- console.log(chalk_1.default.green(`\n✓ HAProxy stats downloaded successfully!`));
107
- console.log(chalk_1.default.white(` File: ${outputFile}`));
108
- console.log(chalk_1.default.white(` Size: ${(result.output.length / 1024).toFixed(2)} KB`));
109
- console.log(chalk_1.default.blue(`\n💡 Open ${outputFile} in your browser to view the stats`));
110
- }
111
- else {
112
- console.log(chalk_1.default.yellow('⚠ No stats data received'));
113
- console.log(chalk_1.default.gray(' The stats page may be empty or HAProxy may not have any backends configured'));
114
- }
115
- }
116
- else {
117
- instances_1.logger.error('Failed to download HAProxy stats', { error: result.error });
118
- console.log(chalk_1.default.red('✗ Failed to download HAProxy stats'));
119
- if (result.error) {
120
- console.log(chalk_1.default.red(` Error: ${result.error}`));
121
- }
122
- }
123
- }
124
- catch (error) {
125
- instances_1.logger.error('Error downloading HAProxy stats', error);
126
- console.log(chalk_1.default.red('✗ Error downloading HAProxy stats'));
127
- throw error;
128
- }
129
- };
130
- }
131
- //# sourceMappingURL=haproxy-stats.js.map
@@ -1,4 +0,0 @@
1
- export declare function handleManagedGatewayList(options: {
2
- json?: boolean;
3
- }): Promise<void>;
4
- //# sourceMappingURL=list.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/managedGateway/list.ts"],"names":[],"mappings":"AAKA,wBAAsB,wBAAwB,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6CzF"}