@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,131 @@
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
@@ -0,0 +1,4 @@
1
+ export declare function handleManagedGatewayList(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/managedGateway/list.ts"],"names":[],"mappings":"AAKA,wBAAsB,wBAAwB,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6CzF"}
@@ -0,0 +1,50 @@
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.handleManagedGatewayList = handleManagedGatewayList;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const instances_1 = require("../../services/instances");
9
+ const config_validator_1 = require("../utils/config-validator");
10
+ async function handleManagedGatewayList(options) {
11
+ wrapCommand(async (options) => {
12
+ (0, config_validator_1.validateConfig)(instances_1.configManager, {
13
+ requireAuth: true,
14
+ });
15
+ instances_1.logger.debug('Listing managed gateways');
16
+ const response = await instances_1.managedGatewayService.listManagedGateways();
17
+ if (!response.success || !response.gateways || response.gateways.length === 0) {
18
+ console.log(chalk_1.default.yellow('⚠ No managed gateways found'));
19
+ return;
20
+ }
21
+ if (options.json) {
22
+ console.log(JSON.stringify({
23
+ gateways: response.gateways.map((gateway) => ({
24
+ id: gateway.id,
25
+ name: gateway.name,
26
+ description: gateway.description,
27
+ ipAddress: gateway.ipAddress,
28
+ status: gateway.status,
29
+ lastSeen: gateway.lastSeen,
30
+ createdAt: gateway.createdAt,
31
+ organizationId: gateway.organizationId,
32
+ })),
33
+ }, null, 2));
34
+ return;
35
+ }
36
+ console.log(chalk_1.default.blue('\n🌐 Managed Gateways:'));
37
+ response.gateways.forEach((gateway) => {
38
+ console.log(chalk_1.default.white(`\n ID: ${gateway.id}`));
39
+ console.log(chalk_1.default.white(` Name: ${gateway.name}`));
40
+ if (gateway.description) {
41
+ console.log(chalk_1.default.gray(` Description: ${gateway.description}`));
42
+ }
43
+ console.log(chalk_1.default.white(` IP Address: ${gateway.ipAddress || 'N/A'}`));
44
+ console.log(chalk_1.default.white(` Status: ${gateway.status || 'N/A'}`));
45
+ console.log(chalk_1.default.white(` Last Seen: ${gateway.lastSeen ? new Date(gateway.lastSeen).toLocaleString() : 'N/A'}`));
46
+ console.log(chalk_1.default.white(` Created: ${new Date(gateway.createdAt).toLocaleString()}`));
47
+ });
48
+ });
49
+ }
50
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1,10 @@
1
+ export declare function handleManagedGatewayLogs(options: {
2
+ id?: string;
3
+ lines?: string;
4
+ follow?: boolean;
5
+ level?: string;
6
+ module?: string;
7
+ comprehensive?: boolean;
8
+ singleLine?: boolean;
9
+ }): Promise<void>;
10
+ //# sourceMappingURL=logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../../src/commands/managedGateway/logs.ts"],"names":[],"mappings":"AAMA,wBAAsB,wBAAwB,CAAC,OAAO,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmGxM"}
@@ -0,0 +1,100 @@
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.handleManagedGatewayLogs = handleManagedGatewayLogs;
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 log_formatter_1 = require("../../utils/log-formatter");
12
+ async function handleManagedGatewayLogs(options) {
13
+ wrapCommand(async (options) => {
14
+ (0, config_validator_1.validateConfig)(instances_1.configManager, {
15
+ requireAuth: true,
16
+ });
17
+ let gatewayId = options.id;
18
+ if (!gatewayId) {
19
+ // List gateways first to allow selection
20
+ const listResponse = await instances_1.managedGatewayService.listManagedGateways();
21
+ if (!listResponse.success || !listResponse.gateways || listResponse.gateways.length === 0) {
22
+ console.log(chalk_1.default.yellow('⚠ No managed gateways found'));
23
+ return;
24
+ }
25
+ const choices = listResponse.gateways.map((gateway) => ({
26
+ name: `${gateway.name} (${gateway.id})`,
27
+ value: gateway.id,
28
+ }));
29
+ const answer = await inquirer_1.default.prompt([
30
+ {
31
+ type: 'list',
32
+ name: 'gatewayId',
33
+ message: 'Select managed gateway:',
34
+ choices,
35
+ },
36
+ ]);
37
+ gatewayId = answer.gatewayId;
38
+ }
39
+ const lines = parseInt(options.lines || '50') || 50;
40
+ const follow = options.follow || false;
41
+ const level = options.level || 'all';
42
+ const module = options.module;
43
+ const comprehensive = options.comprehensive || false;
44
+ instances_1.logger.info('Retrieving managed gateway logs', {
45
+ gatewayId,
46
+ lines: follow ? undefined : lines,
47
+ follow,
48
+ level,
49
+ module,
50
+ comprehensive,
51
+ });
52
+ // Use the dedicated getManagedGatewayLogs method
53
+ try {
54
+ if (!gatewayId) {
55
+ console.log(chalk_1.default.red('✗ Gateway ID is required'));
56
+ return;
57
+ }
58
+ const result = await instances_1.managedGatewayService.getManagedGatewayLogs(gatewayId, {
59
+ lines: follow ? undefined : lines,
60
+ follow: follow,
61
+ level: level,
62
+ comprehensive: comprehensive,
63
+ });
64
+ if (result.success) {
65
+ // For comprehensive mode, just output raw logs
66
+ if (comprehensive) {
67
+ console.log(result.logs);
68
+ }
69
+ else {
70
+ // Parse and format JSON logs nicely
71
+ const formattedLogs = (0, log_formatter_1.processLogs)(result.logs, {
72
+ module: module,
73
+ level: level,
74
+ singleLine: options.singleLine || false
75
+ });
76
+ if (formattedLogs.trim()) {
77
+ console.log(formattedLogs);
78
+ }
79
+ else {
80
+ if (module) {
81
+ console.log(chalk_1.default.yellow(`No logs found for module(s): ${module}`));
82
+ }
83
+ else {
84
+ console.log(chalk_1.default.yellow('No logs found'));
85
+ }
86
+ }
87
+ }
88
+ }
89
+ else {
90
+ instances_1.logger.error('Failed to retrieve logs');
91
+ console.log(chalk_1.default.red('✗ Failed to retrieve logs'));
92
+ }
93
+ }
94
+ catch (error) {
95
+ instances_1.logger.error('Error retrieving managed gateway logs', error);
96
+ console.log(chalk_1.default.red('✗ Error retrieving logs'));
97
+ }
98
+ });
99
+ }
100
+ //# sourceMappingURL=logs.js.map
@@ -0,0 +1,5 @@
1
+ export declare function handleManagedGatewayReboot(options: {
2
+ id?: string;
3
+ force?: boolean;
4
+ }): Promise<void>;
5
+ //# sourceMappingURL=reboot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reboot.d.ts","sourceRoot":"","sources":["../../../src/commands/managedGateway/reboot.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,CA4FzG"}
@@ -0,0 +1,95 @@
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.handleManagedGatewayReboot = handleManagedGatewayReboot;
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 handleManagedGatewayReboot(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 reboot:',
33
+ choices,
34
+ },
35
+ ]);
36
+ gatewayId = answer.gatewayId;
37
+ }
38
+ // Confirm reboot unless force flag is set
39
+ if (!options.force) {
40
+ const confirm = await inquirer_1.default.prompt([
41
+ {
42
+ type: 'confirm',
43
+ name: 'confirm',
44
+ message: `Are you sure you want to reboot managed gateway ${gatewayId}?`,
45
+ default: false,
46
+ },
47
+ ]);
48
+ if (!confirm.confirm) {
49
+ instances_1.logger.info('Gateway reboot cancelled');
50
+ console.log(chalk_1.default.gray('Reboot cancelled'));
51
+ return;
52
+ }
53
+ }
54
+ instances_1.logger.info('Rebooting managed gateway', { gatewayId });
55
+ try {
56
+ if (!gatewayId) {
57
+ console.log(chalk_1.default.red('✗ Gateway ID is required'));
58
+ return;
59
+ }
60
+ console.log(chalk_1.default.blue(`Rebooting gateway ${gatewayId}...`));
61
+ // Execute reboot command (this will disconnect SSH, which is expected)
62
+ const result = await instances_1.diagnosticsService.executeManagedGatewayCommand(gatewayId, 'sudo reboot');
63
+ // Note: The command may not return successfully because the gateway reboots
64
+ // and disconnects the SSH session. We check if we got an error that suggests
65
+ // the connection was lost (which is expected during reboot)
66
+ if (result.success || (result.error && result.error.includes('ECONNRESET'))) {
67
+ console.log(chalk_1.default.green('✓ Reboot command sent successfully'));
68
+ console.log(chalk_1.default.yellow('⚠ Gateway is rebooting. SSH connection will be lost.'));
69
+ console.log(chalk_1.default.gray(' The gateway should be back online in a few minutes.'));
70
+ }
71
+ else {
72
+ instances_1.logger.error('Failed to reboot gateway', { error: result.error });
73
+ console.log(chalk_1.default.red('✗ Failed to send reboot command'));
74
+ if (result.error) {
75
+ console.log(chalk_1.default.red(` Error: ${result.error}`));
76
+ }
77
+ }
78
+ }
79
+ catch (error) {
80
+ // If the error is a connection reset, that's expected during reboot
81
+ const errorMessage = error instanceof Error ? error.message : String(error);
82
+ if (errorMessage.includes('ECONNRESET') || errorMessage.includes('connection')) {
83
+ console.log(chalk_1.default.green('✓ Reboot command sent successfully'));
84
+ console.log(chalk_1.default.yellow('⚠ Gateway is rebooting. SSH connection was lost (expected).'));
85
+ console.log(chalk_1.default.gray(' The gateway should be back online in a few minutes.'));
86
+ }
87
+ else {
88
+ instances_1.logger.error('Error rebooting gateway', error);
89
+ console.log(chalk_1.default.red('✗ Error rebooting gateway'));
90
+ console.log(chalk_1.default.red(` ${errorMessage}`));
91
+ }
92
+ }
93
+ });
94
+ }
95
+ //# sourceMappingURL=reboot.js.map
@@ -0,0 +1,10 @@
1
+ export declare function handleManagedGatewayResync(options: {
2
+ id?: string;
3
+ version?: string;
4
+ local?: boolean;
5
+ installFromLocal?: boolean;
6
+ reboot?: boolean;
7
+ wipeLogs?: boolean;
8
+ debug?: boolean;
9
+ }): Promise<void>;
10
+ //# sourceMappingURL=resync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resync.d.ts","sourceRoot":"","sources":["../../../src/commands/managedGateway/resync.ts"],"names":[],"mappings":"AAKA,wBAAsB,0BAA0B,CAAC,OAAO,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwE9M"}
@@ -0,0 +1,69 @@
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.handleManagedGatewayResync = handleManagedGatewayResync;
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 handleManagedGatewayResync(options) {
12
+ wrapCommand(async (options) => {
13
+ // Map --local to installFromLocal for backward compatibility
14
+ const installFromLocal = options.local || options.installFromLocal;
15
+ (0, config_validator_1.validateConfig)(instances_1.configManager, {
16
+ requireAuth: true,
17
+ });
18
+ let gatewayId = options.id;
19
+ if (!gatewayId) {
20
+ // List gateways first to allow selection
21
+ const listResponse = await instances_1.managedGatewayService.listManagedGateways();
22
+ if (!listResponse.success || !listResponse.gateways || listResponse.gateways.length === 0) {
23
+ console.log(chalk_1.default.yellow('⚠ No managed gateways found'));
24
+ return;
25
+ }
26
+ const choices = listResponse.gateways.map((gateway) => ({
27
+ name: `${gateway.name} (${gateway.id})`,
28
+ value: gateway.id,
29
+ }));
30
+ const answer = await inquirer_1.default.prompt([
31
+ {
32
+ type: 'list',
33
+ name: 'gatewayId',
34
+ message: 'Select managed gateway to resync:',
35
+ choices,
36
+ },
37
+ ]);
38
+ gatewayId = answer.gatewayId;
39
+ }
40
+ instances_1.logger.info('Resyncing agent on managed gateway', {
41
+ gatewayId,
42
+ version: options.version,
43
+ installFromLocal,
44
+ reboot: options.reboot,
45
+ wipeLogs: options.wipeLogs,
46
+ debug: options.debug
47
+ });
48
+ const result = await instances_1.managedGatewayService.resyncManagedGatewayAgent(gatewayId, options.version, installFromLocal, options.reboot, options.wipeLogs, options.debug);
49
+ console.log(chalk_1.default.green('\n✓ Agent resynced successfully!'));
50
+ console.log(chalk_1.default.blue('\n📋 Resync Details:'));
51
+ console.log(chalk_1.default.white(` Gateway ID: ${gatewayId}`));
52
+ if (result.agentVersion) {
53
+ console.log(chalk_1.default.white(` Agent Version: ${result.agentVersion}`));
54
+ }
55
+ if (result.syncTimestamp) {
56
+ console.log(chalk_1.default.white(` Sync Time: ${new Date(result.syncTimestamp).toLocaleString()}`));
57
+ }
58
+ if (options.debug) {
59
+ console.log(chalk_1.default.cyan(` Log Level: Debug (enabled)`));
60
+ }
61
+ if (options.wipeLogs && result.logsWiped) {
62
+ console.log(chalk_1.default.yellow(` Logs: Wiped before resync`));
63
+ }
64
+ if (options.reboot && result.rebooted) {
65
+ console.log(chalk_1.default.yellow(` Reboot: Command sent (gateway is rebooting)`));
66
+ }
67
+ });
68
+ }
69
+ //# sourceMappingURL=resync.js.map
@@ -0,0 +1,4 @@
1
+ export declare function handleManagedGatewaySsh(options: {
2
+ id?: string;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=ssh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssh.d.ts","sourceRoot":"","sources":["../../../src/commands/managedGateway/ssh.ts"],"names":[],"mappings":"AAKA,wBAAsB,uBAAuB,CAAC,OAAO,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuIrF"}
@@ -0,0 +1,130 @@
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.handleManagedGatewaySsh = handleManagedGatewaySsh;
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 handleManagedGatewaySsh(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('Connecting to managed gateway via SSH', { gatewayId });
39
+ // Get managed gateway details
40
+ const gatewayDetails = await instances_1.managedGatewayService.getManagedGateway(gatewayId);
41
+ if (!gatewayDetails.success || !gatewayDetails.gateway) {
42
+ console.log(chalk_1.default.red('✗ Managed gateway not found'));
43
+ return;
44
+ }
45
+ const gateway = gatewayDetails.gateway;
46
+ const ipAddress = gateway.ipAddress;
47
+ if (!ipAddress) {
48
+ console.log(chalk_1.default.red('✗ Gateway IP address not available'));
49
+ return;
50
+ }
51
+ // Get SSH key from backend
52
+ console.log(chalk_1.default.gray('Fetching SSH key from backend...'));
53
+ const sshKeyResponse = await instances_1.managedGatewayService.getManagedGatewaySSHKey(gatewayId);
54
+ if (!sshKeyResponse.success || !sshKeyResponse.sshPrivateKey) {
55
+ console.log(chalk_1.default.red('✗ Failed to retrieve SSH key for managed gateway'));
56
+ return;
57
+ }
58
+ const sshPrivateKey = sshKeyResponse.sshPrivateKey;
59
+ // Create temporary SSH key file
60
+ const os = require('os');
61
+ const path = require('path');
62
+ const fs = require('fs');
63
+ const tempKeyPath = path.join(os.tmpdir(), `edgible-mgw-ssh-${gatewayId}-${Date.now()}.pem`);
64
+ try {
65
+ // Write SSH key to temp file with proper permissions
66
+ fs.writeFileSync(tempKeyPath, sshPrivateKey, { mode: 0o600 });
67
+ console.log(chalk_1.default.blue(`\nConnecting to managed gateway: ${gatewayId}`));
68
+ console.log(chalk_1.default.gray(`Public IP: ${ipAddress}`));
69
+ console.log(chalk_1.default.gray(`Region: ${gateway.organizationId || 'N/A'}`));
70
+ console.log(chalk_1.default.yellow('\nOpening SSH connection...\n'));
71
+ // Build SSH command
72
+ const sshCommand = `ssh -i "${tempKeyPath}" -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ec2-user@${ipAddress}`;
73
+ console.log(chalk_1.default.green('✓ Opening interactive SSH session...'));
74
+ console.log(chalk_1.default.gray('─'.repeat(80)));
75
+ console.log(chalk_1.default.gray('Tip: Type "exit" to disconnect from the gateway\n'));
76
+ // Execute SSH using child_process
77
+ const { spawn } = require('child_process');
78
+ const sshProcess = spawn('sh', ['-c', sshCommand], {
79
+ stdio: 'inherit',
80
+ shell: false,
81
+ });
82
+ sshProcess.on('error', (error) => {
83
+ instances_1.logger.error('SSH connection error', error);
84
+ console.error(chalk_1.default.red('✗ SSH connection error:'), error.message);
85
+ console.log(chalk_1.default.yellow('\nMake sure SSH is installed and the key file has correct permissions'));
86
+ throw error;
87
+ });
88
+ sshProcess.on('exit', (code) => {
89
+ if (code === 0) {
90
+ instances_1.logger.debug('SSH session ended normally');
91
+ console.log(chalk_1.default.gray('\nSSH session ended'));
92
+ }
93
+ else {
94
+ instances_1.logger.warn('SSH session ended with non-zero code', { code });
95
+ console.log(chalk_1.default.yellow(`\nSSH session ended with code: ${code}`));
96
+ }
97
+ });
98
+ // Wait for process to exit
99
+ await new Promise((resolve, reject) => {
100
+ sshProcess.on('exit', (code) => {
101
+ if (code === 0 || code === null) {
102
+ resolve();
103
+ }
104
+ else {
105
+ reject(new Error(`SSH session exited with code ${code}`));
106
+ }
107
+ });
108
+ sshProcess.on('error', reject);
109
+ });
110
+ }
111
+ catch (error) {
112
+ instances_1.logger.error('Error connecting to managed gateway via SSH', error);
113
+ console.error(chalk_1.default.red('✗ Error connecting to managed gateway:'), error instanceof Error ? error.message : String(error));
114
+ throw error;
115
+ }
116
+ finally {
117
+ // Clean up temp key file
118
+ try {
119
+ if (fs.existsSync(tempKeyPath)) {
120
+ fs.unlinkSync(tempKeyPath);
121
+ }
122
+ }
123
+ catch (cleanupError) {
124
+ // Ignore cleanup errors
125
+ instances_1.logger.debug('Failed to cleanup temp SSH key file', cleanupError);
126
+ }
127
+ }
128
+ });
129
+ }
130
+ //# sourceMappingURL=ssh.js.map
@@ -0,0 +1,4 @@
1
+ export declare function handleManagedGatewayWipeLogs(options: {
2
+ id?: string;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=wipe-logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wipe-logs.d.ts","sourceRoot":"","sources":["../../../src/commands/managedGateway/wipe-logs.ts"],"names":[],"mappings":"AAKA,wBAAsB,4BAA4B,CAAC,OAAO,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgE1F"}