@calltelemetry/cli 0.1.0

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 (297) hide show
  1. package/dist/commands/config.d.ts +3 -0
  2. package/dist/commands/config.d.ts.map +1 -0
  3. package/dist/commands/config.js +201 -0
  4. package/dist/commands/config.js.map +1 -0
  5. package/dist/commands/db.d.ts +3 -0
  6. package/dist/commands/db.d.ts.map +1 -0
  7. package/dist/commands/db.js +143 -0
  8. package/dist/commands/db.js.map +1 -0
  9. package/dist/commands/diag.d.ts +3 -0
  10. package/dist/commands/diag.d.ts.map +1 -0
  11. package/dist/commands/diag.js +123 -0
  12. package/dist/commands/diag.js.map +1 -0
  13. package/dist/commands/docker.d.ts +3 -0
  14. package/dist/commands/docker.d.ts.map +1 -0
  15. package/dist/commands/docker.js +34 -0
  16. package/dist/commands/docker.js.map +1 -0
  17. package/dist/commands/jtapi.d.ts +3 -0
  18. package/dist/commands/jtapi.d.ts.map +1 -0
  19. package/dist/commands/jtapi.js +36 -0
  20. package/dist/commands/jtapi.js.map +1 -0
  21. package/dist/commands/migrate.d.ts +3 -0
  22. package/dist/commands/migrate.d.ts.map +1 -0
  23. package/dist/commands/migrate.js +49 -0
  24. package/dist/commands/migrate.js.map +1 -0
  25. package/dist/commands/offline.d.ts +3 -0
  26. package/dist/commands/offline.d.ts.map +1 -0
  27. package/dist/commands/offline.js +170 -0
  28. package/dist/commands/offline.js.map +1 -0
  29. package/dist/commands/secrets.d.ts +3 -0
  30. package/dist/commands/secrets.d.ts.map +1 -0
  31. package/dist/commands/secrets.js +55 -0
  32. package/dist/commands/secrets.js.map +1 -0
  33. package/dist/commands/status.d.ts +3 -0
  34. package/dist/commands/status.d.ts.map +1 -0
  35. package/dist/commands/status.js +13 -0
  36. package/dist/commands/status.js.map +1 -0
  37. package/dist/commands/update.d.ts +3 -0
  38. package/dist/commands/update.d.ts.map +1 -0
  39. package/dist/commands/update.js +202 -0
  40. package/dist/commands/update.js.map +1 -0
  41. package/dist/index.d.ts +3 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +65 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/lib/bundle.d.ts +5 -0
  46. package/dist/lib/bundle.d.ts.map +1 -0
  47. package/dist/lib/bundle.js +134 -0
  48. package/dist/lib/bundle.js.map +1 -0
  49. package/dist/lib/certs.d.ts +3 -0
  50. package/dist/lib/certs.d.ts.map +1 -0
  51. package/dist/lib/certs.js +29 -0
  52. package/dist/lib/certs.js.map +1 -0
  53. package/dist/lib/compose.d.ts +36 -0
  54. package/dist/lib/compose.d.ts.map +1 -0
  55. package/dist/lib/compose.js +137 -0
  56. package/dist/lib/compose.js.map +1 -0
  57. package/dist/lib/db.d.ts +6 -0
  58. package/dist/lib/db.d.ts.map +1 -0
  59. package/dist/lib/db.js +6 -0
  60. package/dist/lib/db.js.map +1 -0
  61. package/dist/lib/fs.d.ts +20 -0
  62. package/dist/lib/fs.d.ts.map +1 -0
  63. package/dist/lib/fs.js +72 -0
  64. package/dist/lib/fs.js.map +1 -0
  65. package/dist/lib/jtapi.d.ts +6 -0
  66. package/dist/lib/jtapi.d.ts.map +1 -0
  67. package/dist/lib/jtapi.js +27 -0
  68. package/dist/lib/jtapi.js.map +1 -0
  69. package/dist/lib/network.d.ts +43 -0
  70. package/dist/lib/network.d.ts.map +1 -0
  71. package/dist/lib/network.js +172 -0
  72. package/dist/lib/network.js.map +1 -0
  73. package/dist/lib/paths.d.ts +19 -0
  74. package/dist/lib/paths.d.ts.map +1 -0
  75. package/dist/lib/paths.js +57 -0
  76. package/dist/lib/paths.js.map +1 -0
  77. package/dist/lib/postgres.d.ts +4 -0
  78. package/dist/lib/postgres.d.ts.map +1 -0
  79. package/dist/lib/postgres.js +49 -0
  80. package/dist/lib/postgres.js.map +1 -0
  81. package/dist/lib/rpc.d.ts +5 -0
  82. package/dist/lib/rpc.d.ts.map +1 -0
  83. package/dist/lib/rpc.js +28 -0
  84. package/dist/lib/rpc.js.map +1 -0
  85. package/dist/lib/secrets.d.ts +38 -0
  86. package/dist/lib/secrets.d.ts.map +1 -0
  87. package/dist/lib/secrets.js +132 -0
  88. package/dist/lib/secrets.js.map +1 -0
  89. package/dist/lib/system.d.ts +12 -0
  90. package/dist/lib/system.d.ts.map +1 -0
  91. package/dist/lib/system.js +61 -0
  92. package/dist/lib/system.js.map +1 -0
  93. package/dist/ui/components/AppShell.d.ts +9 -0
  94. package/dist/ui/components/AppShell.d.ts.map +1 -0
  95. package/dist/ui/components/AppShell.js +6 -0
  96. package/dist/ui/components/AppShell.js.map +1 -0
  97. package/dist/ui/components/Confirm.d.ts +7 -0
  98. package/dist/ui/components/Confirm.d.ts.map +1 -0
  99. package/dist/ui/components/Confirm.js +14 -0
  100. package/dist/ui/components/Confirm.js.map +1 -0
  101. package/dist/ui/components/DataTable.d.ts +12 -0
  102. package/dist/ui/components/DataTable.d.ts.map +1 -0
  103. package/dist/ui/components/DataTable.js +28 -0
  104. package/dist/ui/components/DataTable.js.map +1 -0
  105. package/dist/ui/components/Divider.d.ts +6 -0
  106. package/dist/ui/components/Divider.d.ts.map +1 -0
  107. package/dist/ui/components/Divider.js +6 -0
  108. package/dist/ui/components/Divider.js.map +1 -0
  109. package/dist/ui/components/KeyValue.d.ts +11 -0
  110. package/dist/ui/components/KeyValue.d.ts.map +1 -0
  111. package/dist/ui/components/KeyValue.js +7 -0
  112. package/dist/ui/components/KeyValue.js.map +1 -0
  113. package/dist/ui/components/Section.d.ts +8 -0
  114. package/dist/ui/components/Section.d.ts.map +1 -0
  115. package/dist/ui/components/Section.js +6 -0
  116. package/dist/ui/components/Section.js.map +1 -0
  117. package/dist/ui/components/SelectMenu.d.ts +14 -0
  118. package/dist/ui/components/SelectMenu.d.ts.map +1 -0
  119. package/dist/ui/components/SelectMenu.js +55 -0
  120. package/dist/ui/components/SelectMenu.js.map +1 -0
  121. package/dist/ui/components/ShellOutput.d.ts +7 -0
  122. package/dist/ui/components/ShellOutput.d.ts.map +1 -0
  123. package/dist/ui/components/ShellOutput.js +10 -0
  124. package/dist/ui/components/ShellOutput.js.map +1 -0
  125. package/dist/ui/components/Spinner.d.ts +6 -0
  126. package/dist/ui/components/Spinner.d.ts.map +1 -0
  127. package/dist/ui/components/Spinner.js +7 -0
  128. package/dist/ui/components/Spinner.js.map +1 -0
  129. package/dist/ui/components/StatusBox.d.ts +8 -0
  130. package/dist/ui/components/StatusBox.d.ts.map +1 -0
  131. package/dist/ui/components/StatusBox.js +12 -0
  132. package/dist/ui/components/StatusBox.js.map +1 -0
  133. package/dist/ui/components/StatusLine.d.ts +8 -0
  134. package/dist/ui/components/StatusLine.d.ts.map +1 -0
  135. package/dist/ui/components/StatusLine.js +13 -0
  136. package/dist/ui/components/StatusLine.js.map +1 -0
  137. package/dist/ui/components/StepList.d.ts +11 -0
  138. package/dist/ui/components/StepList.d.ts.map +1 -0
  139. package/dist/ui/components/StepList.js +19 -0
  140. package/dist/ui/components/StepList.js.map +1 -0
  141. package/dist/ui/components/SubSection.d.ts +8 -0
  142. package/dist/ui/components/SubSection.d.ts.map +1 -0
  143. package/dist/ui/components/SubSection.js +6 -0
  144. package/dist/ui/components/SubSection.js.map +1 -0
  145. package/dist/ui/components/TextInput.d.ts +11 -0
  146. package/dist/ui/components/TextInput.d.ts.map +1 -0
  147. package/dist/ui/components/TextInput.js +7 -0
  148. package/dist/ui/components/TextInput.js.map +1 -0
  149. package/dist/ui/components/index.d.ts +16 -0
  150. package/dist/ui/components/index.d.ts.map +1 -0
  151. package/dist/ui/components/index.js +15 -0
  152. package/dist/ui/components/index.js.map +1 -0
  153. package/dist/ui/hooks/index.d.ts +7 -0
  154. package/dist/ui/hooks/index.d.ts.map +1 -0
  155. package/dist/ui/hooks/index.js +5 -0
  156. package/dist/ui/hooks/index.js.map +1 -0
  157. package/dist/ui/hooks/useAsyncTask.d.ts +9 -0
  158. package/dist/ui/hooks/useAsyncTask.d.ts.map +1 -0
  159. package/dist/ui/hooks/useAsyncTask.js +22 -0
  160. package/dist/ui/hooks/useAsyncTask.js.map +1 -0
  161. package/dist/ui/hooks/usePolling.d.ts +8 -0
  162. package/dist/ui/hooks/usePolling.d.ts.map +1 -0
  163. package/dist/ui/hooks/usePolling.js +43 -0
  164. package/dist/ui/hooks/usePolling.js.map +1 -0
  165. package/dist/ui/hooks/useStepRunner.d.ts +16 -0
  166. package/dist/ui/hooks/useStepRunner.d.ts.map +1 -0
  167. package/dist/ui/hooks/useStepRunner.js +42 -0
  168. package/dist/ui/hooks/useStepRunner.js.map +1 -0
  169. package/dist/ui/hooks/useStreamingProcess.d.ts +8 -0
  170. package/dist/ui/hooks/useStreamingProcess.d.ts.map +1 -0
  171. package/dist/ui/hooks/useStreamingProcess.js +49 -0
  172. package/dist/ui/hooks/useStreamingProcess.js.map +1 -0
  173. package/dist/ui/types.d.ts +24 -0
  174. package/dist/ui/types.d.ts.map +1 -0
  175. package/dist/ui/types.js +2 -0
  176. package/dist/ui/types.js.map +1 -0
  177. package/dist/ui/views/CertsStatusView.d.ts +2 -0
  178. package/dist/ui/views/CertsStatusView.d.ts.map +1 -0
  179. package/dist/ui/views/CertsStatusView.js +95 -0
  180. package/dist/ui/views/CertsStatusView.js.map +1 -0
  181. package/dist/ui/views/DbBackupView.d.ts +2 -0
  182. package/dist/ui/views/DbBackupView.d.ts.map +1 -0
  183. package/dist/ui/views/DbBackupView.js +62 -0
  184. package/dist/ui/views/DbBackupView.js.map +1 -0
  185. package/dist/ui/views/DbCompactView.d.ts +2 -0
  186. package/dist/ui/views/DbCompactView.d.ts.map +1 -0
  187. package/dist/ui/views/DbCompactView.js +28 -0
  188. package/dist/ui/views/DbCompactView.js.map +1 -0
  189. package/dist/ui/views/DbListView.d.ts +2 -0
  190. package/dist/ui/views/DbListView.d.ts.map +1 -0
  191. package/dist/ui/views/DbListView.js +30 -0
  192. package/dist/ui/views/DbListView.js.map +1 -0
  193. package/dist/ui/views/DbSizeView.d.ts +2 -0
  194. package/dist/ui/views/DbSizeView.d.ts.map +1 -0
  195. package/dist/ui/views/DbSizeView.js +21 -0
  196. package/dist/ui/views/DbSizeView.js.map +1 -0
  197. package/dist/ui/views/DbStatusView.d.ts +2 -0
  198. package/dist/ui/views/DbStatusView.d.ts.map +1 -0
  199. package/dist/ui/views/DbStatusView.js +41 -0
  200. package/dist/ui/views/DbStatusView.js.map +1 -0
  201. package/dist/ui/views/DbTablesView.d.ts +6 -0
  202. package/dist/ui/views/DbTablesView.d.ts.map +1 -0
  203. package/dist/ui/views/DbTablesView.js +28 -0
  204. package/dist/ui/views/DbTablesView.js.map +1 -0
  205. package/dist/ui/views/DiagDatabaseView.d.ts +2 -0
  206. package/dist/ui/views/DiagDatabaseView.d.ts.map +1 -0
  207. package/dist/ui/views/DiagDatabaseView.js +51 -0
  208. package/dist/ui/views/DiagDatabaseView.js.map +1 -0
  209. package/dist/ui/views/DiagNetworkView.d.ts +2 -0
  210. package/dist/ui/views/DiagNetworkView.d.ts.map +1 -0
  211. package/dist/ui/views/DiagNetworkView.js +169 -0
  212. package/dist/ui/views/DiagNetworkView.js.map +1 -0
  213. package/dist/ui/views/DiagServiceView.d.ts +2 -0
  214. package/dist/ui/views/DiagServiceView.d.ts.map +1 -0
  215. package/dist/ui/views/DiagServiceView.js +37 -0
  216. package/dist/ui/views/DiagServiceView.js.map +1 -0
  217. package/dist/ui/views/DockerNetworkView.d.ts +2 -0
  218. package/dist/ui/views/DockerNetworkView.d.ts.map +1 -0
  219. package/dist/ui/views/DockerNetworkView.js +29 -0
  220. package/dist/ui/views/DockerNetworkView.js.map +1 -0
  221. package/dist/ui/views/DockerPruneView.d.ts +2 -0
  222. package/dist/ui/views/DockerPruneView.d.ts.map +1 -0
  223. package/dist/ui/views/DockerPruneView.js +57 -0
  224. package/dist/ui/views/DockerPruneView.js.map +1 -0
  225. package/dist/ui/views/DockerStatusView.d.ts +2 -0
  226. package/dist/ui/views/DockerStatusView.d.ts.map +1 -0
  227. package/dist/ui/views/DockerStatusView.js +43 -0
  228. package/dist/ui/views/DockerStatusView.js.map +1 -0
  229. package/dist/ui/views/JtapiDisableView.d.ts +2 -0
  230. package/dist/ui/views/JtapiDisableView.d.ts.map +1 -0
  231. package/dist/ui/views/JtapiDisableView.js +55 -0
  232. package/dist/ui/views/JtapiDisableView.js.map +1 -0
  233. package/dist/ui/views/JtapiEnableView.d.ts +2 -0
  234. package/dist/ui/views/JtapiEnableView.d.ts.map +1 -0
  235. package/dist/ui/views/JtapiEnableView.js +47 -0
  236. package/dist/ui/views/JtapiEnableView.js.map +1 -0
  237. package/dist/ui/views/JtapiStatusView.d.ts +2 -0
  238. package/dist/ui/views/JtapiStatusView.d.ts.map +1 -0
  239. package/dist/ui/views/JtapiStatusView.js +18 -0
  240. package/dist/ui/views/JtapiStatusView.js.map +1 -0
  241. package/dist/ui/views/JtapiTroubleshootView.d.ts +2 -0
  242. package/dist/ui/views/JtapiTroubleshootView.d.ts.map +1 -0
  243. package/dist/ui/views/JtapiTroubleshootView.js +120 -0
  244. package/dist/ui/views/JtapiTroubleshootView.js.map +1 -0
  245. package/dist/ui/views/MainMenu.d.ts +8 -0
  246. package/dist/ui/views/MainMenu.d.ts.map +1 -0
  247. package/dist/ui/views/MainMenu.js +110 -0
  248. package/dist/ui/views/MainMenu.js.map +1 -0
  249. package/dist/ui/views/MigrateHistoryView.d.ts +2 -0
  250. package/dist/ui/views/MigrateHistoryView.d.ts.map +1 -0
  251. package/dist/ui/views/MigrateHistoryView.js +25 -0
  252. package/dist/ui/views/MigrateHistoryView.js.map +1 -0
  253. package/dist/ui/views/MigrateRollbackView.d.ts +6 -0
  254. package/dist/ui/views/MigrateRollbackView.d.ts.map +1 -0
  255. package/dist/ui/views/MigrateRollbackView.js +50 -0
  256. package/dist/ui/views/MigrateRollbackView.js.map +1 -0
  257. package/dist/ui/views/MigrateRunView.d.ts +2 -0
  258. package/dist/ui/views/MigrateRunView.d.ts.map +1 -0
  259. package/dist/ui/views/MigrateRunView.js +50 -0
  260. package/dist/ui/views/MigrateRunView.js.map +1 -0
  261. package/dist/ui/views/MigrateStatusView.d.ts +2 -0
  262. package/dist/ui/views/MigrateStatusView.d.ts.map +1 -0
  263. package/dist/ui/views/MigrateStatusView.js +88 -0
  264. package/dist/ui/views/MigrateStatusView.js.map +1 -0
  265. package/dist/ui/views/MigrateWatchView.d.ts +6 -0
  266. package/dist/ui/views/MigrateWatchView.d.ts.map +1 -0
  267. package/dist/ui/views/MigrateWatchView.js +83 -0
  268. package/dist/ui/views/MigrateWatchView.js.map +1 -0
  269. package/dist/ui/views/OfflineListView.d.ts +2 -0
  270. package/dist/ui/views/OfflineListView.d.ts.map +1 -0
  271. package/dist/ui/views/OfflineListView.js +47 -0
  272. package/dist/ui/views/OfflineListView.js.map +1 -0
  273. package/dist/ui/views/SecretsSetupView.d.ts +2 -0
  274. package/dist/ui/views/SecretsSetupView.d.ts.map +1 -0
  275. package/dist/ui/views/SecretsSetupView.js +94 -0
  276. package/dist/ui/views/SecretsSetupView.js.map +1 -0
  277. package/dist/ui/views/SecretsStatusView.d.ts +2 -0
  278. package/dist/ui/views/SecretsStatusView.d.ts.map +1 -0
  279. package/dist/ui/views/SecretsStatusView.js +36 -0
  280. package/dist/ui/views/SecretsStatusView.js.map +1 -0
  281. package/dist/ui/views/StatusView.d.ts +2 -0
  282. package/dist/ui/views/StatusView.d.ts.map +1 -0
  283. package/dist/ui/views/StatusView.js +80 -0
  284. package/dist/ui/views/StatusView.js.map +1 -0
  285. package/dist/utils/output.d.ts +11 -0
  286. package/dist/utils/output.d.ts.map +1 -0
  287. package/dist/utils/output.js +30 -0
  288. package/dist/utils/output.js.map +1 -0
  289. package/dist/utils/prompt.d.ts +6 -0
  290. package/dist/utils/prompt.d.ts.map +1 -0
  291. package/dist/utils/prompt.js +25 -0
  292. package/dist/utils/prompt.js.map +1 -0
  293. package/dist/utils/version.d.ts +8 -0
  294. package/dist/utils/version.d.ts.map +1 -0
  295. package/dist/utils/version.js +35 -0
  296. package/dist/utils/version.js.map +1 -0
  297. package/package.json +59 -0
@@ -0,0 +1,43 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect } from 'react';
3
+ import { useApp } from 'ink';
4
+ import { execa } from 'execa';
5
+ import { compose } from '../../lib/compose.js';
6
+ import { AppShell, Section, ShellOutput, Spinner, StatusLine } from '../components/index.js';
7
+ import { useAsyncTask } from '../hooks/index.js';
8
+ export function DockerStatusView() {
9
+ const { exit } = useApp();
10
+ // Section 1: Containers
11
+ const containerTask = useAsyncTask(async () => {
12
+ const result = await compose(['ps'], { pipe: true });
13
+ return result.stdout ?? '';
14
+ });
15
+ // Section 2: Images
16
+ const imageTask = useAsyncTask(async () => {
17
+ const { stdout } = await execa('docker', [
18
+ 'images',
19
+ '--format',
20
+ 'table {{.Repository}}\t{{.Tag}}\t{{.Size}}',
21
+ ], { stdout: 'pipe', stderr: 'pipe' });
22
+ return stdout;
23
+ });
24
+ // Section 3: Networks
25
+ const networkTask = useAsyncTask(async () => {
26
+ const { stdout } = await execa('docker', [
27
+ 'network', 'ls',
28
+ '--filter', 'name=ct',
29
+ '--format', 'table {{.Name}}\t{{.Driver}}\t{{.Scope}}',
30
+ ], { stdout: 'pipe', stderr: 'pipe' });
31
+ return stdout;
32
+ });
33
+ // Exit when all 3 tasks complete
34
+ const allDone = [containerTask, imageTask, networkTask]
35
+ .every(t => t.status === 'done' || t.status === 'error');
36
+ useEffect(() => {
37
+ if (allDone) {
38
+ exit();
39
+ }
40
+ }, [allDone, exit]);
41
+ return (_jsxs(AppShell, { command: "ct docker status", children: [_jsxs(Section, { title: "Containers", children: [containerTask.status === 'pending' && _jsx(Spinner, { label: "Checking containers..." }), containerTask.status === 'error' && _jsx(StatusLine, { status: "fail", label: "Could not list containers" }), containerTask.status === 'done' && containerTask.data && (_jsx(ShellOutput, { content: containerTask.data }))] }), _jsxs(Section, { title: "Images", children: [imageTask.status === 'pending' && _jsx(Spinner, { label: "Loading images..." }), imageTask.status === 'error' && _jsx(StatusLine, { status: "fail", label: "Could not list images" }), imageTask.status === 'done' && imageTask.data && (_jsx(ShellOutput, { content: imageTask.data }))] }), _jsxs(Section, { title: "Networks", children: [networkTask.status === 'pending' && _jsx(Spinner, { label: "Loading networks..." }), networkTask.status === 'error' && _jsx(StatusLine, { status: "fail", label: "Could not list networks" }), networkTask.status === 'done' && networkTask.data && (_jsx(ShellOutput, { content: networkTask.data }))] })] }));
42
+ }
43
+ //# sourceMappingURL=DockerStatusView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DockerStatusView.js","sourceRoot":"","sources":["../../../src/ui/views/DockerStatusView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function JtapiDisableView(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=JtapiDisableView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JtapiDisableView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/JtapiDisableView.tsx"],"names":[],"mappings":"AAQA,wBAAgB,gBAAgB,4CA6D/B"}
@@ -0,0 +1,55 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect } from 'react';
3
+ import { Box, useApp } from 'ink';
4
+ import { compose, composeUp } from '../../lib/compose.js';
5
+ import { isJtapiEnabled, disableJtapi } from '../../lib/jtapi.js';
6
+ import { AppShell, Section, StepList, Divider, StatusLine } from '../components/index.js';
7
+ import { useStepRunner } from '../hooks/index.js';
8
+ export function JtapiDisableView() {
9
+ const { exit } = useApp();
10
+ const alreadyDisabled = !isJtapiEnabled();
11
+ const steps = [
12
+ {
13
+ label: 'Check JTAPI status',
14
+ run: async () => {
15
+ if (alreadyDisabled) {
16
+ return 'already disabled';
17
+ }
18
+ return 'enabled — proceeding to disable';
19
+ },
20
+ },
21
+ {
22
+ label: 'Stop jtapi-sidecar container',
23
+ run: async () => {
24
+ if (alreadyDisabled)
25
+ return 'skipped';
26
+ await compose(['stop', 'jtapi-sidecar'], { pipe: true }).catch(() => { });
27
+ return 'stopped';
28
+ },
29
+ },
30
+ {
31
+ label: 'Remove state file',
32
+ run: async () => {
33
+ if (alreadyDisabled)
34
+ return 'skipped';
35
+ await disableJtapi();
36
+ return 'removed';
37
+ },
38
+ },
39
+ {
40
+ label: 'Restart services without overlay',
41
+ run: async () => {
42
+ if (alreadyDisabled)
43
+ return 'skipped';
44
+ await composeUp(['-d'], { pipe: true });
45
+ return 'restarted';
46
+ },
47
+ },
48
+ ];
49
+ const { states, isDone, run } = useStepRunner(steps);
50
+ useEffect(() => { run(); }, [run]);
51
+ useEffect(() => { if (isDone)
52
+ exit(); }, [isDone, exit]);
53
+ return (_jsxs(AppShell, { command: "ct jtapi disable", children: [_jsx(Section, { title: "JTAPI Disable", children: _jsx(StepList, { steps: states }) }), isDone && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Divider, {}), _jsx(StatusLine, { status: alreadyDisabled ? 'warn' : 'ok', label: alreadyDisabled ? 'JTAPI is already disabled' : 'JTAPI sidecar disabled' })] }))] }));
54
+ }
55
+ //# sourceMappingURL=JtapiDisableView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JtapiDisableView.js","sourceRoot":"","sources":["../../../src/ui/views/JtapiDisableView.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,MAAM,UAAU,gBAAgB;IAC9B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1B,MAAM,eAAe,GAAG,CAAC,cAAc,EAAE,CAAC;IAE1C,MAAM,KAAK,GAAW;QACpB;YACE,KAAK,EAAE,oBAAoB;YAC3B,GAAG,EAAE,KAAK,IAAI,EAAE;gBACd,IAAI,eAAe,EAAE,CAAC;oBACpB,OAAO,kBAAkB,CAAC;gBAC5B,CAAC;gBACD,OAAO,iCAAiC,CAAC;YAC3C,CAAC;SACF;QACD;YACE,KAAK,EAAE,8BAA8B;YACrC,GAAG,EAAE,KAAK,IAAI,EAAE;gBACd,IAAI,eAAe;oBAAE,OAAO,SAAS,CAAC;gBACtC,MAAM,OAAO,CAAC,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBACzE,OAAO,SAAS,CAAC;YACnB,CAAC;SACF;QACD;YACE,KAAK,EAAE,mBAAmB;YAC1B,GAAG,EAAE,KAAK,IAAI,EAAE;gBACd,IAAI,eAAe;oBAAE,OAAO,SAAS,CAAC;gBACtC,MAAM,YAAY,EAAE,CAAC;gBACrB,OAAO,SAAS,CAAC;YACnB,CAAC;SACF;QACD;YACE,KAAK,EAAE,kCAAkC;YACzC,GAAG,EAAE,KAAK,IAAI,EAAE;gBACd,IAAI,eAAe;oBAAE,OAAO,SAAS,CAAC;gBACtC,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBACxC,OAAO,WAAW,CAAC;YACrB,CAAC;SACF;KACF,CAAC;IAEF,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAErD,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACnC,SAAS,CAAC,GAAG,EAAE,GAAG,IAAI,MAAM;QAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAEzD,OAAO,CACL,MAAC,QAAQ,IAAC,OAAO,EAAC,kBAAkB,aAClC,KAAC,OAAO,IAAC,KAAK,EAAC,eAAe,YAC5B,KAAC,QAAQ,IAAC,KAAK,EAAE,MAAM,GAAI,GACnB,EACT,MAAM,IAAI,CACT,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,aACtC,KAAC,OAAO,KAAG,EACX,KAAC,UAAU,IACT,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EACvC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,wBAAwB,GAC/E,IACE,CACP,IACQ,CACZ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function JtapiEnableView(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=JtapiEnableView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JtapiEnableView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/JtapiEnableView.tsx"],"names":[],"mappings":"AAkCA,wBAAgB,eAAe,4CA0B9B"}
@@ -0,0 +1,47 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect } from 'react';
3
+ import { Box, useApp } from 'ink';
4
+ import { composeUp } from '../../lib/compose.js';
5
+ import { hasOverlayFile, enableJtapi } from '../../lib/jtapi.js';
6
+ import { AppShell, Section, StepList, Divider, StatusLine } from '../components/index.js';
7
+ import { useStepRunner } from '../hooks/index.js';
8
+ const steps = [
9
+ {
10
+ label: 'Check overlay file exists',
11
+ run: async () => {
12
+ if (!hasOverlayFile()) {
13
+ throw new Error('docker-compose-jtapi.yml not found in install directory');
14
+ }
15
+ return 'found';
16
+ },
17
+ },
18
+ {
19
+ label: 'Create state file',
20
+ run: async () => {
21
+ await enableJtapi();
22
+ return 'created';
23
+ },
24
+ },
25
+ {
26
+ label: 'Start services with JTAPI overlay',
27
+ run: async () => {
28
+ await composeUp(['-d'], { pipe: true });
29
+ return 'started';
30
+ },
31
+ },
32
+ ];
33
+ export function JtapiEnableView() {
34
+ const { exit } = useApp();
35
+ const { states, isRunning, isDone, run } = useStepRunner(steps);
36
+ useEffect(() => { run(); }, [run]);
37
+ useEffect(() => { if (isDone)
38
+ exit(); }, [isDone, exit]);
39
+ // Exit on error (isRunning becomes false without isDone)
40
+ const hasError = states.some(s => s.status === 'error');
41
+ useEffect(() => {
42
+ if (!isRunning && hasError)
43
+ exit();
44
+ }, [isRunning, hasError, exit]);
45
+ return (_jsxs(AppShell, { command: "ct jtapi enable", children: [_jsx(Section, { title: "JTAPI Enable", children: _jsx(StepList, { steps: states }) }), isDone && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Divider, {}), _jsx(StatusLine, { status: "ok", label: "JTAPI sidecar enabled" })] }))] }));
46
+ }
47
+ //# sourceMappingURL=JtapiEnableView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JtapiEnableView.js","sourceRoot":"","sources":["../../../src/ui/views/JtapiEnableView.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,MAAM,KAAK,GAAW;IACpB;QACE,KAAK,EAAE,2BAA2B;QAClC,GAAG,EAAE,KAAK,IAAI,EAAE;YACd,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;YAC7E,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;KACF;IACD;QACE,KAAK,EAAE,mBAAmB;QAC1B,GAAG,EAAE,KAAK,IAAI,EAAE;YACd,MAAM,WAAW,EAAE,CAAC;YACpB,OAAO,SAAS,CAAC;QACnB,CAAC;KACF;IACD;QACE,KAAK,EAAE,mCAAmC;QAC1C,GAAG,EAAE,KAAK,IAAI,EAAE;YACd,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACxC,OAAO,SAAS,CAAC;QACnB,CAAC;KACF;CACF,CAAC;AAEF,MAAM,UAAU,eAAe;IAC7B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1B,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAEhE,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACnC,SAAS,CAAC,GAAG,EAAE,GAAG,IAAI,MAAM;QAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAEzD,yDAAyD;IACzD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC;IACxD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,SAAS,IAAI,QAAQ;YAAE,IAAI,EAAE,CAAC;IACrC,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IAEhC,OAAO,CACL,MAAC,QAAQ,IAAC,OAAO,EAAC,iBAAiB,aACjC,KAAC,OAAO,IAAC,KAAK,EAAC,cAAc,YAC3B,KAAC,QAAQ,IAAC,KAAK,EAAE,MAAM,GAAI,GACnB,EACT,MAAM,IAAI,CACT,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,aACtC,KAAC,OAAO,KAAG,EACX,KAAC,UAAU,IAAC,MAAM,EAAC,IAAI,EAAC,KAAK,EAAC,uBAAuB,GAAG,IACpD,CACP,IACQ,CACZ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function JtapiStatusView(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=JtapiStatusView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JtapiStatusView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/JtapiStatusView.tsx"],"names":[],"mappings":"AAKA,wBAAgB,eAAe,4CA2B9B"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect } from 'react';
3
+ import { useApp } from 'ink';
4
+ import { isJtapiEnabled, hasOverlayFile } from '../../lib/jtapi.js';
5
+ import { AppShell, Section, StatusLine } from '../components/index.js';
6
+ export function JtapiStatusView() {
7
+ const { exit } = useApp();
8
+ const enabled = isJtapiEnabled();
9
+ const overlay = hasOverlayFile();
10
+ useEffect(() => {
11
+ // These are synchronous, exit immediately after render
12
+ exit();
13
+ }, [exit]);
14
+ return (_jsx(AppShell, { command: "ct jtapi status", children: _jsxs(Section, { title: "JTAPI Status", children: [_jsx(StatusLine, { status: enabled ? 'ok' : 'warn', label: enabled ? 'JTAPI is ENABLED' : 'JTAPI is DISABLED' }), _jsx(StatusLine, { status: overlay ? 'ok' : 'fail', label: overlay
15
+ ? 'Overlay file (docker-compose-jtapi.yml) exists'
16
+ : 'Overlay file (docker-compose-jtapi.yml) NOT FOUND' })] }) }));
17
+ }
18
+ //# sourceMappingURL=JtapiStatusView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JtapiStatusView.js","sourceRoot":"","sources":["../../../src/ui/views/JtapiStatusView.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEvE,MAAM,UAAU,eAAe;IAC7B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAE1B,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IAEjC,SAAS,CAAC,GAAG,EAAE;QACb,uDAAuD;QACvD,IAAI,EAAE,CAAC;IACT,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,OAAO,CACL,KAAC,QAAQ,IAAC,OAAO,EAAC,iBAAiB,YACjC,MAAC,OAAO,IAAC,KAAK,EAAC,cAAc,aAC3B,KAAC,UAAU,IACT,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAC/B,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,mBAAmB,GACzD,EACF,KAAC,UAAU,IACT,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAC/B,KAAK,EAAE,OAAO;wBACZ,CAAC,CAAC,gDAAgD;wBAClD,CAAC,CAAC,mDAAmD,GACvD,IACM,GACD,CACZ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function JtapiTroubleshootView(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=JtapiTroubleshootView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JtapiTroubleshootView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/JtapiTroubleshootView.tsx"],"names":[],"mappings":"AAiGA,wBAAgB,qBAAqB,4CAoCpC"}
@@ -0,0 +1,120 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect } from 'react';
3
+ import { Box, useApp } from 'ink';
4
+ import { AppShell, Section, StepList, Divider, StatusLine } from '../components/index.js';
5
+ import { useStepRunner } from '../hooks/index.js';
6
+ import { compose, composeExec } from '../../lib/compose.js';
7
+ import { isJtapiEnabled, hasOverlayFile } from '../../lib/jtapi.js';
8
+ const steps = [
9
+ {
10
+ label: 'Feature State',
11
+ run: async () => {
12
+ const enabled = isJtapiEnabled();
13
+ const overlay = hasOverlayFile();
14
+ if (enabled && overlay)
15
+ return 'Enabled';
16
+ if (!enabled && overlay)
17
+ return 'Disabled (overlay present)';
18
+ if (!overlay)
19
+ return 'Disabled (overlay missing)';
20
+ return 'Disabled';
21
+ },
22
+ },
23
+ {
24
+ label: 'Container: jtapi-sidecar',
25
+ run: async () => {
26
+ const result = await compose(['ps', 'jtapi-sidecar'], { pipe: true });
27
+ const out = result.stdout ?? '';
28
+ const running = out.toLowerCase().includes('running') || out.toLowerCase().includes('up');
29
+ if (!running)
30
+ throw new Error('not running');
31
+ return 'running';
32
+ },
33
+ },
34
+ {
35
+ label: 'Container: ct-media',
36
+ run: async () => {
37
+ const result = await compose(['ps', 'ct-media'], { pipe: true });
38
+ const out = result.stdout ?? '';
39
+ const running = out.toLowerCase().includes('running') || out.toLowerCase().includes('up');
40
+ if (!running)
41
+ throw new Error('not running');
42
+ return 'running';
43
+ },
44
+ },
45
+ {
46
+ label: 'Container: minio',
47
+ run: async () => {
48
+ const result = await compose(['ps', 'minio'], { pipe: true });
49
+ const out = result.stdout ?? '';
50
+ const running = out.toLowerCase().includes('running') || out.toLowerCase().includes('up');
51
+ if (!running)
52
+ throw new Error('not running');
53
+ return 'running';
54
+ },
55
+ },
56
+ {
57
+ label: 'Container: nats',
58
+ run: async () => {
59
+ const result = await compose(['ps', 'nats'], { pipe: true });
60
+ const out = result.stdout ?? '';
61
+ const running = out.toLowerCase().includes('running') || out.toLowerCase().includes('up');
62
+ if (!running)
63
+ throw new Error('not running');
64
+ return 'running';
65
+ },
66
+ },
67
+ {
68
+ label: 'NATS KV Stores',
69
+ run: async () => {
70
+ const result = await composeExec('nats', ['nats', 'kv', 'ls'], { pipe: true });
71
+ const out = result.stdout ?? '';
72
+ const buckets = out.split('\n').filter(l => l.trim()).map(l => l.trim());
73
+ return buckets.length > 0 ? buckets.join(', ') : 'none';
74
+ },
75
+ },
76
+ {
77
+ label: 'NATS Object Store',
78
+ run: async () => {
79
+ const result = await composeExec('nats', ['nats', 'object', 'ls'], { pipe: true });
80
+ const out = result.stdout ?? '';
81
+ const stores = out.split('\n').filter(l => l.trim()).map(l => l.trim());
82
+ return stores.length > 0 ? stores.join(', ') : 'none';
83
+ },
84
+ },
85
+ {
86
+ label: 'Sidecar Health',
87
+ run: async () => {
88
+ const result = await composeExec('jtapi-sidecar', ['curl', '-sf', 'http://localhost:8080/actuator/health'], { pipe: true });
89
+ return (result.stdout ?? '').trim() || 'OK';
90
+ },
91
+ },
92
+ {
93
+ label: 'Web JTAPI Config',
94
+ run: async () => {
95
+ const result = await composeExec('web', ['env'], { pipe: true });
96
+ const out = result.stdout ?? '';
97
+ const vars = out.split('\n').filter(l => l.startsWith('JTAPI_'));
98
+ return vars.length > 0 ? vars.join(', ') : 'no JTAPI_ vars set';
99
+ },
100
+ },
101
+ ];
102
+ export function JtapiTroubleshootView() {
103
+ const { exit } = useApp();
104
+ const { states, isDone, run } = useStepRunner(steps);
105
+ useEffect(() => {
106
+ run();
107
+ }, [run]);
108
+ useEffect(() => {
109
+ if (isDone) {
110
+ exit();
111
+ }
112
+ }, [isDone, exit]);
113
+ const passed = states.filter(s => s.status === 'done').length;
114
+ const failed = states.filter(s => s.status === 'error').length;
115
+ const total = states.length;
116
+ return (_jsxs(AppShell, { command: "ct jtapi troubleshoot", children: [_jsx(Section, { title: "JTAPI Troubleshoot", children: _jsx(StepList, { steps: states }) }), isDone && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Divider, {}), _jsx(StatusLine, { status: failed === 0 ? 'ok' : 'warn', label: failed === 0
117
+ ? `${passed}/${total} checks passed`
118
+ : `${passed}/${total} checks passed, ${failed} failed` })] }))] }));
119
+ }
120
+ //# sourceMappingURL=JtapiTroubleshootView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JtapiTroubleshootView.js","sourceRoot":"","sources":["../../../src/ui/views/JtapiTroubleshootView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ interface MainMenuProps {
2
+ version: string;
3
+ onSelect: (command: string) => void;
4
+ onExit: () => void;
5
+ }
6
+ export declare function MainMenu({ version, onSelect, onExit }: MainMenuProps): import("react/jsx-runtime").JSX.Element;
7
+ export {};
8
+ //# sourceMappingURL=MainMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MainMenu.d.ts","sourceRoot":"","sources":["../../../src/ui/views/MainMenu.tsx"],"names":[],"mappings":"AA4GA,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,wBAAgB,QAAQ,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,aAAa,2CAiBpE"}
@@ -0,0 +1,110 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ import { AppShell, SelectMenu } from '../components/index.js';
4
+ const MENU_ITEMS = [
5
+ {
6
+ label: 'Status',
7
+ description: 'Show application status and health',
8
+ value: 'status',
9
+ },
10
+ {
11
+ label: 'Update',
12
+ description: 'Update to latest or specific version',
13
+ value: 'update',
14
+ },
15
+ {
16
+ label: 'Database',
17
+ description: 'Backup, restore, compact, and inspect',
18
+ value: 'db',
19
+ children: [
20
+ { label: 'Status', description: 'Show database status', value: 'db status' },
21
+ { label: 'Backup', description: 'Create a database backup', value: 'db backup' },
22
+ { label: 'Restore', description: 'Restore from backup', value: 'db restore' },
23
+ { label: 'List', description: 'List available backups', value: 'db list' },
24
+ { label: 'Compact', description: 'Vacuum and compact database', value: 'db compact' },
25
+ { label: 'Tables', description: 'Show table sizes', value: 'db tables' },
26
+ { label: 'Size', description: 'Show database size', value: 'db size' },
27
+ ],
28
+ },
29
+ {
30
+ label: 'Migrate',
31
+ description: 'Database migration status and control',
32
+ value: 'migrate',
33
+ children: [
34
+ { label: 'Status', description: 'Show migration status', value: 'migrate status' },
35
+ { label: 'Run', description: 'Run pending migrations', value: 'migrate run' },
36
+ { label: 'Rollback', description: 'Rollback last migration', value: 'migrate rollback' },
37
+ { label: 'History', description: 'Show last 10 migrations', value: 'migrate history' },
38
+ { label: 'Watch', description: 'Watch migration progress', value: 'migrate watch' },
39
+ ],
40
+ },
41
+ {
42
+ label: 'Secrets',
43
+ description: 'Manage deployment secrets and credentials',
44
+ value: 'secrets',
45
+ children: [
46
+ { label: 'Status', description: 'Show current secrets', value: 'secrets' },
47
+ { label: 'Setup', description: 'Configure secrets wizard', value: 'secrets setup' },
48
+ { label: 'Reset', description: 'Revert to defaults', value: 'secrets reset' },
49
+ ],
50
+ },
51
+ {
52
+ label: 'Config',
53
+ description: 'Logging, IPv6, PostgreSQL, certificates',
54
+ value: 'config',
55
+ children: [
56
+ { label: 'Logging', description: 'Show or set logging level', value: 'logging' },
57
+ { label: 'IPv6', description: 'Show or toggle IPv6 support', value: 'ipv6' },
58
+ { label: 'PostgreSQL', description: 'PostgreSQL version management', value: 'postgres' },
59
+ { label: 'Certificates', description: 'Certificate management', value: 'certs' },
60
+ ],
61
+ },
62
+ {
63
+ label: 'Docker',
64
+ description: 'Container status, cleanup, networking',
65
+ value: 'docker',
66
+ children: [
67
+ { label: 'Status', description: 'Docker container status', value: 'docker status' },
68
+ { label: 'Prune', description: 'Docker cleanup', value: 'docker prune' },
69
+ { label: 'Network', description: 'Docker network config', value: 'docker network' },
70
+ ],
71
+ },
72
+ {
73
+ label: 'Diagnostics',
74
+ description: 'Network, service, and database checks',
75
+ value: 'diag',
76
+ children: [
77
+ { label: 'Network', description: 'Comprehensive network diagnostics', value: 'diag network' },
78
+ { label: 'Service', description: 'Systemd service and container logs', value: 'diag service' },
79
+ { label: 'Database', description: 'Database health and performance', value: 'diag database' },
80
+ { label: 'Tesla', description: 'TCP + HTTP connectivity test', value: 'diag tesla' },
81
+ { label: 'Capture', description: 'Packet capture with tcpdump', value: 'diag capture' },
82
+ ],
83
+ },
84
+ {
85
+ label: 'JTAPI',
86
+ description: 'Phone control sidecar management',
87
+ value: 'jtapi',
88
+ children: [
89
+ { label: 'Enable', description: 'Enable JTAPI sidecar', value: 'jtapi enable' },
90
+ { label: 'Disable', description: 'Disable JTAPI sidecar', value: 'jtapi disable' },
91
+ { label: 'Status', description: 'Show JTAPI status', value: 'jtapi status' },
92
+ { label: 'Troubleshoot', description: 'Comprehensive JTAPI diagnostics', value: 'jtapi troubleshoot' },
93
+ ],
94
+ },
95
+ {
96
+ label: 'Offline',
97
+ description: 'Air-gapped update bundle management',
98
+ value: 'offline',
99
+ children: [
100
+ { label: 'Fetch', description: 'Download pre-built config bundle', value: 'offline fetch' },
101
+ { label: 'Download', description: 'Build full offline bundle', value: 'offline download' },
102
+ { label: 'Apply', description: 'Apply offline bundle', value: 'offline apply' },
103
+ { label: 'List', description: 'List images in docker-compose.yml', value: 'offline list' },
104
+ ],
105
+ },
106
+ ];
107
+ export function MainMenu({ version, onSelect, onExit }) {
108
+ return (_jsxs(AppShell, { title: `CallTelemetry CLI v${version}`, children: [_jsxs(Box, { flexDirection: "column", paddingLeft: 2, children: [_jsx(Text, { children: "What would you like to do?" }), _jsx(Text, { children: ' ' })] }), _jsx(SelectMenu, { items: MENU_ITEMS, onSelect: (item) => onSelect(item.value), onExit: onExit }), _jsx(Box, { paddingLeft: 2, paddingTop: 1, children: _jsx(Text, { dimColor: true, children: '↑↓ Navigate Enter Select q Quit' }) })] }));
109
+ }
110
+ //# sourceMappingURL=MainMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MainMenu.js","sourceRoot":"","sources":["../../../src/ui/views/MainMenu.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function MigrateHistoryView(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=MigrateHistoryView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MigrateHistoryView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/MigrateHistoryView.tsx"],"names":[],"mappings":"AAOA,wBAAgB,kBAAkB,4CAoCjC"}
@@ -0,0 +1,25 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect } from 'react';
3
+ import { useApp } from 'ink';
4
+ import { composeExec } from '../../lib/compose.js';
5
+ import { DB_USER, DB_NAME, PG_ENV } from '../../lib/db.js';
6
+ import { AppShell, Section, ShellOutput, Spinner, StatusLine } from '../components/index.js';
7
+ import { useAsyncTask } from '../hooks/index.js';
8
+ export function MigrateHistoryView() {
9
+ const { exit } = useApp();
10
+ const historyTask = useAsyncTask(async () => {
11
+ const result = await composeExec('db', ['psql', '-U', DB_USER, '-d', DB_NAME, '-c',
12
+ 'SELECT version, inserted_at FROM schema_migrations ORDER BY version DESC LIMIT 10;'], { env: PG_ENV, pipe: true });
13
+ return (result.stdout ?? '').trim();
14
+ });
15
+ const countTask = useAsyncTask(async () => {
16
+ const result = await composeExec('db', ['psql', '-U', DB_USER, '-d', DB_NAME, '-c',
17
+ 'SELECT COUNT(*) as total_migrations FROM schema_migrations;'], { env: PG_ENV, pipe: true });
18
+ return (result.stdout ?? '').trim();
19
+ });
20
+ const allDone = [historyTask, countTask].every(t => t.status === 'done' || t.status === 'error');
21
+ useEffect(() => { if (allDone)
22
+ exit(); }, [allDone, exit]);
23
+ return (_jsxs(AppShell, { command: "ct migrate history", children: [_jsxs(Section, { title: "Last 10 Applied Migrations", children: [historyTask.status === 'pending' && _jsx(Spinner, { label: "Querying migrations..." }), historyTask.status === 'error' && _jsx(StatusLine, { status: "fail", label: "Query failed" }), historyTask.status === 'done' && historyTask.data && _jsx(ShellOutput, { content: historyTask.data })] }), _jsxs(Section, { title: "Migration Count", children: [countTask.status === 'pending' && _jsx(Spinner, { label: "Counting..." }), countTask.status === 'error' && _jsx(StatusLine, { status: "fail", label: "Query failed" }), countTask.status === 'done' && countTask.data && _jsx(ShellOutput, { content: countTask.data })] })] }));
24
+ }
25
+ //# sourceMappingURL=MigrateHistoryView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MigrateHistoryView.js","sourceRoot":"","sources":["../../../src/ui/views/MigrateHistoryView.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,UAAU,kBAAkB;IAChC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAE1B,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,IAAI,EAAE;QAC1C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,EACnC,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI;YAC1C,oFAAoF,CAAC,EACtF,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/B,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,IAAI,EAAE;QACxC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,EACnC,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI;YAC1C,6DAA6D,CAAC,EAC/D,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/B,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC;IACjG,SAAS,CAAC,GAAG,EAAE,GAAG,IAAI,OAAO;QAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAE3D,OAAO,CACL,MAAC,QAAQ,IAAC,OAAO,EAAC,oBAAoB,aACpC,MAAC,OAAO,IAAC,KAAK,EAAC,4BAA4B,aACxC,WAAW,CAAC,MAAM,KAAK,SAAS,IAAI,KAAC,OAAO,IAAC,KAAK,EAAC,wBAAwB,GAAG,EAC9E,WAAW,CAAC,MAAM,KAAK,OAAO,IAAI,KAAC,UAAU,IAAC,MAAM,EAAC,MAAM,EAAC,KAAK,EAAC,cAAc,GAAG,EACnF,WAAW,CAAC,MAAM,KAAK,MAAM,IAAI,WAAW,CAAC,IAAI,IAAI,KAAC,WAAW,IAAC,OAAO,EAAE,WAAW,CAAC,IAAI,GAAI,IACxF,EACV,MAAC,OAAO,IAAC,KAAK,EAAC,iBAAiB,aAC7B,SAAS,CAAC,MAAM,KAAK,SAAS,IAAI,KAAC,OAAO,IAAC,KAAK,EAAC,aAAa,GAAG,EACjE,SAAS,CAAC,MAAM,KAAK,OAAO,IAAI,KAAC,UAAU,IAAC,MAAM,EAAC,MAAM,EAAC,KAAK,EAAC,cAAc,GAAG,EACjF,SAAS,CAAC,MAAM,KAAK,MAAM,IAAI,SAAS,CAAC,IAAI,IAAI,KAAC,WAAW,IAAC,OAAO,EAAE,SAAS,CAAC,IAAI,GAAI,IAClF,IACD,CACZ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ interface MigrateRollbackViewProps {
2
+ steps?: number;
3
+ }
4
+ export declare function MigrateRollbackView({ steps }: MigrateRollbackViewProps): import("react/jsx-runtime").JSX.Element;
5
+ export {};
6
+ //# sourceMappingURL=MigrateRollbackView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MigrateRollbackView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/MigrateRollbackView.tsx"],"names":[],"mappings":"AAOA,UAAU,wBAAwB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,mBAAmB,CAAC,EAAE,KAAS,EAAE,EAAE,wBAAwB,2CAqD1E"}
@@ -0,0 +1,50 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect } from 'react';
3
+ import { useApp } from 'ink';
4
+ import { composePs } from '../../lib/compose.js';
5
+ import { rpc, rpcOk } from '../../lib/rpc.js';
6
+ import { AppShell, Section, ShellOutput, Spinner, StatusLine } from '../components/index.js';
7
+ import { useAsyncTask } from '../hooks/index.js';
8
+ export function MigrateRollbackView({ steps = 1 }) {
9
+ const { exit } = useApp();
10
+ const readyTask = useAsyncTask(async () => {
11
+ const container = await composePs('web');
12
+ if (!container)
13
+ throw new Error('Web container not found or not running.');
14
+ if (!await rpcOk())
15
+ throw new Error('Cannot connect to application via RPC. It may still be starting up.');
16
+ return true;
17
+ });
18
+ const rollbackTask = useAsyncTask(async () => {
19
+ const output = await rpc(`
20
+ IO.puts("=== Rolling Back Migrations ===")
21
+ try do
22
+ result = Ecto.Migrator.run(Cdrcisco.Repo, :down, step: ${steps})
23
+ case result do
24
+ [] -> IO.puts("No migrations to rollback.")
25
+ migrations ->
26
+ IO.puts("Successfully rolled back \#{length(migrations)} migrations:")
27
+ for {status, version, name} <- migrations do
28
+ IO.puts(" \#{status} \#{version} \#{name}")
29
+ end
30
+ end
31
+ IO.puts("")
32
+ IO.puts("Migration rollback completed successfully!")
33
+ rescue
34
+ e -> IO.puts("Error rolling back migrations: \#{inspect(e)}")
35
+ end
36
+ `);
37
+ return output;
38
+ }, false);
39
+ // Chain: run rollback after ready check passes
40
+ useEffect(() => {
41
+ if (readyTask.status === 'done')
42
+ rollbackTask.run();
43
+ }, [readyTask.status]);
44
+ // Exit when done or on error
45
+ const allDone = readyTask.status === 'error' || rollbackTask.status === 'done' || rollbackTask.status === 'error';
46
+ useEffect(() => { if (allDone)
47
+ exit(); }, [allDone, exit]);
48
+ return (_jsx(AppShell, { command: "ct migrate rollback", children: _jsxs(Section, { title: `Rollback Migrations (${steps} step${steps === 1 ? '' : 's'})`, children: [readyTask.status === 'pending' && _jsx(Spinner, { label: "Checking web container..." }), readyTask.status === 'error' && _jsx(StatusLine, { status: "fail", label: readyTask.error?.message ?? 'Web container not ready' }), readyTask.status === 'done' && rollbackTask.status === 'pending' && _jsx(Spinner, { label: `Rolling back ${steps} migration${steps === 1 ? '' : 's'}...` }), rollbackTask.status === 'error' && _jsx(StatusLine, { status: "fail", label: rollbackTask.error?.message ?? 'Migration rollback failed' }), rollbackTask.status === 'done' && rollbackTask.data && _jsx(ShellOutput, { content: rollbackTask.data }), rollbackTask.status === 'done' && _jsx(StatusLine, { status: "ok", label: "Migration rollback completed" })] }) }));
49
+ }
50
+ //# sourceMappingURL=MigrateRollbackView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MigrateRollbackView.js","sourceRoot":"","sources":["../../../src/ui/views/MigrateRollbackView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function MigrateRunView(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=MigrateRunView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MigrateRunView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/MigrateRunView.tsx"],"names":[],"mappings":"AAOA,wBAAgB,cAAc,4CAqD7B"}