@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,49 @@
1
+ import { render } from 'ink';
2
+ import React from 'react';
3
+ import { MigrateStatusView } from '../ui/views/MigrateStatusView.js';
4
+ import { MigrateHistoryView } from '../ui/views/MigrateHistoryView.js';
5
+ import { MigrateRunView } from '../ui/views/MigrateRunView.js';
6
+ import { MigrateRollbackView } from '../ui/views/MigrateRollbackView.js';
7
+ import { MigrateWatchView } from '../ui/views/MigrateWatchView.js';
8
+ export function registerMigrateCommand(program) {
9
+ const migrate = program
10
+ .command('migrate')
11
+ .description('Database migration commands');
12
+ migrate.command('status')
13
+ .description('Show migration status (default)')
14
+ .action(async () => {
15
+ const { waitUntilExit } = render(React.createElement(MigrateStatusView));
16
+ await waitUntilExit();
17
+ });
18
+ migrate.command('run')
19
+ .description('Run pending migrations')
20
+ .action(async () => {
21
+ const { waitUntilExit } = render(React.createElement(MigrateRunView));
22
+ await waitUntilExit();
23
+ });
24
+ migrate.command('rollback [steps]')
25
+ .description('Rollback N migrations (default: 1)')
26
+ .action(async (stepsStr) => {
27
+ const { waitUntilExit } = render(React.createElement(MigrateRollbackView, { steps: parseInt(stepsStr ?? '1', 10) }));
28
+ await waitUntilExit();
29
+ });
30
+ migrate.command('history')
31
+ .description('Show last 10 migrations from database')
32
+ .action(async () => {
33
+ const { waitUntilExit } = render(React.createElement(MigrateHistoryView));
34
+ await waitUntilExit();
35
+ });
36
+ migrate.command('watch')
37
+ .description('Watch migration progress continuously')
38
+ .option('-i, --interval <seconds>', 'Refresh interval', '5')
39
+ .action(async (opts) => {
40
+ const { waitUntilExit } = render(React.createElement(MigrateWatchView, { interval: parseInt(opts.interval, 10) * 1000 }));
41
+ await waitUntilExit();
42
+ });
43
+ // Default action
44
+ migrate.action(async () => {
45
+ const { waitUntilExit } = render(React.createElement(MigrateStatusView));
46
+ await waitUntilExit();
47
+ });
48
+ }
49
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,MAAM,OAAO,GAAG,OAAO;SACpB,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,6BAA6B,CAAC,CAAC;IAE9C,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;SACtB,WAAW,CAAC,iCAAiC,CAAC;SAC9C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACzE,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;SACnB,WAAW,CAAC,wBAAwB,CAAC;SACrC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC;QACtE,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC;SAChC,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,KAAK,EAAE,QAAiB,EAAE,EAAE;QAClC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAC9B,KAAK,CAAC,aAAa,CAAC,mBAAmB,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,QAAQ,IAAI,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CACnF,CAAC;QACF,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;SACvB,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC1E,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;SACrB,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,0BAA0B,EAAE,kBAAkB,EAAE,GAAG,CAAC;SAC3D,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAC9B,KAAK,CAAC,aAAa,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,CACxF,CAAC;QACF,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,iBAAiB;IACjB,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QACxB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACzE,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerOfflineCommand(program: Command): void;
3
+ //# sourceMappingURL=offline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"offline.d.ts","sourceRoot":"","sources":["../../src/commands/offline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,QAoLtD"}
@@ -0,0 +1,170 @@
1
+ import { render } from 'ink';
2
+ import React from 'react';
3
+ import { execa } from 'execa';
4
+ import { existsSync, readFileSync } from 'node:fs';
5
+ import { copyFile, mkdir, rm } from 'node:fs/promises';
6
+ import { join } from 'node:path';
7
+ import { composeUp } from '../lib/compose.js';
8
+ import { getPaths } from '../lib/paths.js';
9
+ import * as out from '../utils/output.js';
10
+ import { OfflineListView } from '../ui/views/OfflineListView.js';
11
+ export function registerOfflineCommand(program) {
12
+ const offline = program
13
+ .command('offline')
14
+ .description('Offline/air-gap installation commands');
15
+ offline.command('fetch <version>')
16
+ .description('Download pre-built config bundle from cloud (fast, no Docker images)')
17
+ .action(async (version) => {
18
+ const { gcsBundleBaseUrl } = getPaths();
19
+ const bundleFile = `calltelemetry-bundle-${version}.tar.gz`;
20
+ const bundleUrl = `${gcsBundleBaseUrl}/${version}/${bundleFile}`;
21
+ out.header('Fetching Pre-built Bundle');
22
+ console.log(`Version: ${version}`);
23
+ console.log();
24
+ try {
25
+ await execa('curl', ['-fL', '--progress-bar', bundleUrl, '-o', bundleFile], {
26
+ stdout: 'inherit',
27
+ stderr: 'inherit',
28
+ });
29
+ }
30
+ catch {
31
+ out.errorBox('Failed to download bundle', [
32
+ `Version ${version} may not exist.`,
33
+ 'Check: https://github.com/calltelemetry/calltelemetry/releases',
34
+ ]);
35
+ return;
36
+ }
37
+ // Verify checksum if available
38
+ const checksumUrl = `${bundleUrl}.sha256`;
39
+ try {
40
+ await execa('curl', ['-sfL', checksumUrl, '-o', `${bundleFile}.sha256`]);
41
+ await execa('sha256sum', ['-c', `${bundleFile}.sha256`]);
42
+ out.ok('Checksum verified');
43
+ await rm(`${bundleFile}.sha256`, { force: true });
44
+ }
45
+ catch {
46
+ out.info('Checksum verification skipped');
47
+ }
48
+ out.successBox('Bundle Downloaded');
49
+ console.log(`File: ${bundleFile}`);
50
+ console.log();
51
+ console.log(`To apply: ct offline apply ${bundleFile}`);
52
+ });
53
+ offline.command('download <version>')
54
+ .description('Build full offline bundle with Docker images (slow)')
55
+ .action(async (version) => {
56
+ const { gcsBundleBaseUrl } = getPaths();
57
+ const configBundle = `calltelemetry-bundle-${version}.tar.gz`;
58
+ const bundleDir = `calltelemetry-offline-${version}`;
59
+ const bundleName = `calltelemetry-offline-${version}.tar.gz`;
60
+ out.header('Creating Offline Bundle (with Docker Images)');
61
+ console.log(`Version: ${version}`);
62
+ console.log();
63
+ // Download config bundle
64
+ console.log('Step 1: Downloading config bundle...');
65
+ const bundleUrl = `${gcsBundleBaseUrl}/${version}/${configBundle}`;
66
+ try {
67
+ await execa('curl', ['-fL', '--progress-bar', bundleUrl, '-o', configBundle], {
68
+ stdout: 'inherit', stderr: 'inherit',
69
+ });
70
+ }
71
+ catch {
72
+ out.fail(`Failed to download config bundle for version ${version}`);
73
+ return;
74
+ }
75
+ // Extract
76
+ console.log('Step 2: Extracting config bundle...');
77
+ await rm(bundleDir, { recursive: true, force: true });
78
+ await mkdir(bundleDir, { recursive: true });
79
+ await execa('tar', ['-xzf', configBundle, '-C', bundleDir, '--strip-components=1']);
80
+ await rm(configBundle, { force: true });
81
+ // Pull images
82
+ console.log('Step 3: Pulling Docker images...');
83
+ const composePath = join(bundleDir, 'docker-compose.yml');
84
+ if (!existsSync(composePath)) {
85
+ out.fail('docker-compose.yml not found in bundle');
86
+ await rm(bundleDir, { recursive: true, force: true });
87
+ return;
88
+ }
89
+ const content = readFileSync(composePath, 'utf-8');
90
+ const images = [];
91
+ for (const line of content.split('\n')) {
92
+ const match = line.match(/image:\s*["']?([^"'\s]+)/);
93
+ if (match)
94
+ images.push(match[1]);
95
+ }
96
+ for (const img of images) {
97
+ console.log(` Pulling: ${img}`);
98
+ await execa('docker', ['pull', img]).catch(() => out.warn(`Failed to pull ${img}`));
99
+ }
100
+ // Save images
101
+ console.log('Step 4: Saving Docker images...');
102
+ await execa('docker', ['save', ...images, '-o', join(bundleDir, 'images.tar')], {
103
+ stdout: 'inherit',
104
+ });
105
+ // Create final bundle
106
+ console.log('Step 5: Creating final bundle archive...');
107
+ await execa('tar', ['-czf', bundleName, bundleDir]);
108
+ await rm(bundleDir, { recursive: true, force: true });
109
+ out.successBox('Offline Bundle Created');
110
+ console.log(`File: ${bundleName}`);
111
+ console.log();
112
+ console.log('Transfer to air-gapped system and run:');
113
+ console.log(` ct offline apply ${bundleName}`);
114
+ });
115
+ offline.command('apply <bundle>')
116
+ .description('Apply an offline bundle to this system')
117
+ .action(async (bundle) => {
118
+ if (!existsSync(bundle)) {
119
+ out.fail(`Bundle file not found: ${bundle}`);
120
+ return;
121
+ }
122
+ const { installDir, backupDir } = getPaths();
123
+ out.header('Applying Offline Bundle');
124
+ console.log(`Bundle: ${bundle}`);
125
+ console.log();
126
+ const extractDir = `offline-extract-${process.pid}`;
127
+ await mkdir(extractDir, { recursive: true });
128
+ console.log('Extracting bundle...');
129
+ await execa('tar', ['-xzf', bundle, '-C', extractDir, '--strip-components=1']);
130
+ // Load Docker images
131
+ const imagesFile = join(extractDir, 'images.tar');
132
+ if (existsSync(imagesFile)) {
133
+ console.log('Loading Docker images...');
134
+ await execa('docker', ['load', '-i', imagesFile], { stdout: 'inherit' });
135
+ }
136
+ // Install configs
137
+ console.log('Installing configuration files...');
138
+ await mkdir(backupDir, { recursive: true });
139
+ const configFiles = ['docker-compose.yml', 'Caddyfile', 'cli.sh', 'nats.conf'];
140
+ for (const file of configFiles) {
141
+ const src = join(extractDir, file);
142
+ if (existsSync(src)) {
143
+ const dest = join(installDir, file);
144
+ if (existsSync(dest)) {
145
+ await copyFile(dest, join(backupDir, `${file}.backup`));
146
+ }
147
+ await copyFile(src, dest);
148
+ console.log(` - ${file}`);
149
+ }
150
+ }
151
+ await rm(extractDir, { recursive: true, force: true });
152
+ console.log();
153
+ console.log('Restarting services...');
154
+ try {
155
+ await execa('systemctl', ['restart', 'docker-compose-app.service']);
156
+ }
157
+ catch {
158
+ await composeUp(['-d']);
159
+ }
160
+ out.successBox('Offline Bundle Applied');
161
+ console.log('Check status with: ct status');
162
+ });
163
+ offline.command('list')
164
+ .description('List images in current docker-compose.yml')
165
+ .action(async () => {
166
+ const { waitUntilExit } = render(React.createElement(OfflineListView));
167
+ await waitUntilExit();
168
+ });
169
+ }
170
+ //# sourceMappingURL=offline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"offline.js","sourceRoot":"","sources":["../../src/commands/offline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerSecretsCommand(program: Command): void;
3
+ //# sourceMappingURL=secrets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/commands/secrets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,QA8CtD"}
@@ -0,0 +1,55 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { render } from 'ink';
3
+ import React from 'react';
4
+ import { SecretsStatusView } from '../ui/views/SecretsStatusView.js';
5
+ import { SecretsSetupView } from '../ui/views/SecretsSetupView.js';
6
+ import { getEnvFilePath } from '../lib/secrets.js';
7
+ import { getPaths } from '../lib/paths.js';
8
+ import { removeSafe } from '../lib/fs.js';
9
+ import { confirm } from '../utils/prompt.js';
10
+ import * as out from '../utils/output.js';
11
+ export function registerSecretsCommand(program) {
12
+ const secrets = program
13
+ .command('secrets')
14
+ .description('Manage deployment secrets and credentials');
15
+ secrets.command('setup')
16
+ .description('Interactive secrets configuration wizard')
17
+ .action(async () => {
18
+ const { waitUntilExit } = render(React.createElement(SecretsSetupView));
19
+ await waitUntilExit();
20
+ });
21
+ secrets.command('reset')
22
+ .description('Remove .env and secrets overlay, revert to defaults')
23
+ .action(async () => {
24
+ const envPath = getEnvFilePath();
25
+ const { secretsOverlayFile } = getPaths();
26
+ const envExists = existsSync(envPath);
27
+ const overlayExists = existsSync(secretsOverlayFile);
28
+ if (!envExists && !overlayExists) {
29
+ out.info('No secrets files found. Already using defaults.');
30
+ return;
31
+ }
32
+ console.log('This will remove:');
33
+ if (envExists)
34
+ console.log(` ${envPath}`);
35
+ if (overlayExists)
36
+ console.log(` ${secretsOverlayFile}`);
37
+ console.log();
38
+ if (!await confirm('Revert to default credentials?')) {
39
+ console.log('Cancelled.');
40
+ return;
41
+ }
42
+ if (envExists)
43
+ await removeSafe(envPath);
44
+ if (overlayExists)
45
+ await removeSafe(secretsOverlayFile);
46
+ out.ok('Secrets reset to defaults');
47
+ console.log("Restart services to apply: ct update");
48
+ });
49
+ // Default: show status
50
+ secrets.action(async () => {
51
+ const { waitUntilExit } = render(React.createElement(SecretsStatusView));
52
+ await waitUntilExit();
53
+ });
54
+ }
55
+ //# sourceMappingURL=secrets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/commands/secrets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAE1C,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,MAAM,OAAO,GAAG,OAAO;SACpB,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,2CAA2C,CAAC,CAAC;IAE5D,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;SACrB,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACxE,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;SACrB,WAAW,CAAC,qDAAqD,CAAC;SAClE,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;QACjC,MAAM,EAAE,kBAAkB,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC1C,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,aAAa,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;QAErD,IAAI,CAAC,SAAS,IAAI,CAAC,aAAa,EAAE,CAAC;YACjC,GAAG,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACjC,IAAI,SAAS;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;QAC3C,IAAI,aAAa;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,kBAAkB,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,IAAI,CAAC,MAAM,OAAO,CAAC,gCAAgC,CAAC,EAAE,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,IAAI,SAAS;YAAE,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,aAAa;YAAE,MAAM,UAAU,CAAC,kBAAkB,CAAC,CAAC;QACxD,GAAG,CAAC,EAAE,CAAC,2BAA2B,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEL,uBAAuB;IACvB,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QACxB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACzE,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerStatusCommand(program: Command): void;
3
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,QAQrD"}
@@ -0,0 +1,13 @@
1
+ import { render } from 'ink';
2
+ import React from 'react';
3
+ import { StatusView } from '../ui/views/StatusView.js';
4
+ export function registerStatusCommand(program) {
5
+ program
6
+ .command('status')
7
+ .description('Show application status and diagnostics')
8
+ .action(async () => {
9
+ const { waitUntilExit } = render(React.createElement(StatusView));
10
+ await waitUntilExit();
11
+ });
12
+ }
13
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvD,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,yCAAyC,CAAC;SACtD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;QAClE,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerUpdateCommand(program: Command): void;
3
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,QAqMrD"}
@@ -0,0 +1,202 @@
1
+ import { execa } from 'execa';
2
+ import { existsSync, readFileSync } from 'node:fs';
3
+ import { copyFile, mkdir, rename } from 'node:fs/promises';
4
+ import { join } from 'node:path';
5
+ import { compose, composeUp } from '../lib/compose.js';
6
+ import { getPaths } from '../lib/paths.js';
7
+ import { fetchLatestVersion, downloadBundle, checkImageAvailability, extractImages } from '../lib/bundle.js';
8
+ import { checkRam, checkDiskSpace, getDockerVersion } from '../lib/system.js';
9
+ import { generateSelfSignedCerts } from '../lib/certs.js';
10
+ import { setPostgresVersion } from '../lib/postgres.js';
11
+ import { isVersionGte } from '../utils/version.js';
12
+ import { confirm } from '../utils/prompt.js';
13
+ import * as out from '../utils/output.js';
14
+ function getCurrentVersion() {
15
+ const { composeFile } = getPaths();
16
+ if (!existsSync(composeFile))
17
+ return 'not installed';
18
+ const content = readFileSync(composeFile, 'utf-8');
19
+ const match = content.match(/calltelemetry\/vue:([^\s"]+)/);
20
+ return match ? match[1] : 'unknown';
21
+ }
22
+ export function registerUpdateCommand(program) {
23
+ program
24
+ .command('update [version]')
25
+ .description('Update to a specific version, latest stable (default), or --latest for pre-releases')
26
+ .option('--latest', 'Use latest build including pre-releases')
27
+ .option('--stable', 'Use latest stable release (default)')
28
+ .option('--force-upgrade', 'Skip RAM, disk, and image availability checks')
29
+ .option('--no-cleanup', 'Skip Docker cleanup after update')
30
+ .option('--ipv6', 'Enable IPv6 support')
31
+ .action(async (versionArg, opts) => {
32
+ const { installDir, composeFile, backupDir, overrideFile } = getPaths();
33
+ await generateSelfSignedCerts();
34
+ // Resolve version
35
+ let version = versionArg;
36
+ if (!version && opts.latest) {
37
+ console.log('Fetching latest version (including pre-releases)...');
38
+ version = await fetchLatestVersion('latest');
39
+ console.log(`Latest version: ${version}`);
40
+ }
41
+ else if (!version || opts.stable) {
42
+ console.log('Fetching latest stable version...');
43
+ version = await fetchLatestVersion('stable');
44
+ console.log(`Latest stable version: ${version}`);
45
+ }
46
+ const currentVersion = getCurrentVersion();
47
+ console.log(`Current version: ${currentVersion}`);
48
+ console.log(`Target version: ${version}`);
49
+ console.log();
50
+ // RAM check for >= 0.8.4
51
+ if (isVersionGte(version, '0.8.4') && !opts.forceUpgrade) {
52
+ console.log(`Checking RAM requirements for version ${version}...`);
53
+ const ram = await checkRam();
54
+ if (!ram.ok) {
55
+ out.errorBox('Insufficient RAM', [
56
+ `Version 0.8.4+ requires 8GB RAM (detected: ${ram.totalMb}MB)`,
57
+ `Use --force-upgrade to proceed anyway.`,
58
+ ]);
59
+ process.exit(1);
60
+ }
61
+ out.ok('RAM requirement met');
62
+ console.log();
63
+ }
64
+ // Disk check
65
+ if (!opts.forceUpgrade) {
66
+ console.log('Checking disk space...');
67
+ const disk = await checkDiskSpace();
68
+ if (!disk.ok) {
69
+ out.errorBox('Insufficient disk space', [
70
+ `Available: ${disk.freePercent}% free (need 10% minimum)`,
71
+ `Use --force-upgrade to proceed anyway.`,
72
+ ]);
73
+ process.exit(1);
74
+ }
75
+ out.ok('Sufficient disk space available');
76
+ console.log();
77
+ }
78
+ // Docker version check
79
+ console.log('Checking Docker version...');
80
+ const dockerVer = await getDockerVersion();
81
+ if (dockerVer === null) {
82
+ out.warn('Docker not found or not responding');
83
+ }
84
+ else if (dockerVer < 26) {
85
+ out.warn(`Docker version ${dockerVer} detected - Docker 26+ is required`);
86
+ console.log('Attempting to update Docker packages...');
87
+ try {
88
+ await execa('sudo', ['dnf', 'update', '-y', 'docker-ce', 'docker-ce-cli', 'containerd.io', 'docker-buildx-plugin', 'docker-compose-plugin'], { stdout: 'inherit' });
89
+ }
90
+ catch {
91
+ out.fail('Docker update failed. Please update Docker manually.');
92
+ process.exit(1);
93
+ }
94
+ }
95
+ else {
96
+ out.ok(`Docker version ${dockerVer} is supported`);
97
+ }
98
+ // Backup current compose
99
+ await mkdir(backupDir, { recursive: true });
100
+ if (existsSync(composeFile)) {
101
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
102
+ await copyFile(composeFile, join(backupDir, `docker-compose-${timestamp}.yml`));
103
+ console.log('Existing docker-compose.yml backed up.');
104
+ }
105
+ // Download bundle
106
+ console.log();
107
+ await downloadBundle(version);
108
+ console.log();
109
+ // Check image availability
110
+ const tempFile = join(installDir, 'temp-docker-compose.yml');
111
+ if (!opts.forceUpgrade) {
112
+ if (!await checkImageAvailability(tempFile)) {
113
+ out.errorBox('Cannot proceed with upgrade', [
114
+ 'Some images are not available.',
115
+ 'Use --force-upgrade to proceed anyway.',
116
+ ]);
117
+ process.exit(1);
118
+ }
119
+ }
120
+ // Pull images
121
+ console.log('Pulling Docker images...');
122
+ await compose(['-f', tempFile, 'pull']);
123
+ out.ok('All images pulled successfully');
124
+ // Show versions
125
+ console.log();
126
+ console.log('Image versions to be deployed:');
127
+ const images = await extractImages(tempFile);
128
+ for (const img of images)
129
+ console.log(` - ${img}`);
130
+ console.log();
131
+ console.log(`Upgrading from ${currentVersion} to ${version}`);
132
+ // Interactive abort
133
+ if (process.stdin.isTTY) {
134
+ if (await confirm('Abort upgrade?', false)) {
135
+ console.log('Upgrade cancelled.');
136
+ return;
137
+ }
138
+ }
139
+ // PostgreSQL version guard
140
+ if (existsSync(composeFile)) {
141
+ const content = readFileSync(composeFile, 'utf-8');
142
+ const pgMatch = content.match(/calltelemetry\/postgres:(\d+)/);
143
+ const currentPgVer = pgMatch?.[1];
144
+ if (currentPgVer && currentPgVer !== '17' && !existsSync(overrideFile)) {
145
+ console.log();
146
+ out.warn(`PostgreSQL version guard: Your database is on PostgreSQL ${currentPgVer}`);
147
+ console.log(' Auto-pinning for safety. To upgrade later: ct postgres upgrade 17');
148
+ await setPostgresVersion(currentPgVer);
149
+ }
150
+ }
151
+ // Apply
152
+ await rename(tempFile, composeFile);
153
+ console.log('New docker-compose.yml moved to production.');
154
+ // Restart
155
+ console.log('Restarting services...');
156
+ try {
157
+ await execa('systemctl', ['restart', 'docker-compose-app.service']);
158
+ console.log('Docker Compose service restarted.');
159
+ }
160
+ catch {
161
+ // Fall back to compose directly
162
+ await composeUp(['-d']);
163
+ }
164
+ // Cleanup
165
+ if (opts.cleanup !== false) {
166
+ console.log('Cleaning up unused Docker resources...');
167
+ await execa('docker', ['system', 'prune', '-f']).catch(() => { });
168
+ }
169
+ out.successBox('Update complete!');
170
+ });
171
+ program
172
+ .command('rollback')
173
+ .description('Roll back to previous docker-compose configuration')
174
+ .action(async () => {
175
+ const { backupDir, composeFile } = getPaths();
176
+ if (!existsSync(backupDir)) {
177
+ out.fail('No backup directory found.');
178
+ return;
179
+ }
180
+ const { readdirSync, statSync } = await import('node:fs');
181
+ const backups = readdirSync(backupDir)
182
+ .filter(f => f.startsWith('docker-compose-') && f.endsWith('.yml'))
183
+ .map(f => ({ name: f, time: statSync(join(backupDir, f)).mtimeMs }))
184
+ .sort((a, b) => b.time - a.time);
185
+ if (backups.length === 0) {
186
+ out.fail('No backup file found to rollback.');
187
+ return;
188
+ }
189
+ const backupFile = join(backupDir, backups[0].name);
190
+ await copyFile(backupFile, composeFile);
191
+ console.log(`Rolled back to: ${backupFile}`);
192
+ try {
193
+ await execa('systemctl', ['restart', 'docker-compose-app.service']);
194
+ console.log('Docker Compose service restarted.');
195
+ }
196
+ catch {
197
+ await composeUp(['-d']);
198
+ }
199
+ out.ok('Rollback complete');
200
+ });
201
+ }
202
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}