@calltelemetry/cli 0.6.13 → 0.7.2

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 (439) hide show
  1. package/dist/commands/config.d.ts.map +1 -1
  2. package/dist/commands/config.js +0 -42
  3. package/dist/commands/config.js.map +1 -1
  4. package/dist/commands/db.d.ts.map +1 -1
  5. package/dist/commands/db.js +53 -0
  6. package/dist/commands/db.js.map +1 -1
  7. package/dist/commands/loadtest.d.ts.map +1 -1
  8. package/dist/commands/loadtest.js +214 -1
  9. package/dist/commands/loadtest.js.map +1 -1
  10. package/dist/commands/otel.d.ts +3 -0
  11. package/dist/commands/otel.d.ts.map +1 -0
  12. package/dist/commands/otel.js +89 -0
  13. package/dist/commands/otel.js.map +1 -0
  14. package/dist/commands/seed.d.ts +3 -0
  15. package/dist/commands/seed.d.ts.map +1 -0
  16. package/dist/commands/seed.js +106 -0
  17. package/dist/commands/seed.js.map +1 -0
  18. package/dist/commands/storage.d.ts +3 -0
  19. package/dist/commands/storage.d.ts.map +1 -0
  20. package/dist/commands/storage.js +66 -0
  21. package/dist/commands/storage.js.map +1 -0
  22. package/dist/index.js +6 -0
  23. package/dist/index.js.map +1 -1
  24. package/dist/lib/migration-004-systemd-docker.js +3 -3
  25. package/dist/lib/migration-004-systemd-docker.js.map +1 -1
  26. package/dist/lib/migration-005-ssh-keys.js +3 -3
  27. package/dist/lib/migration-005-ssh-keys.js.map +1 -1
  28. package/dist/lib/migration-013-grafana-password.d.ts +15 -0
  29. package/dist/lib/migration-013-grafana-password.d.ts.map +1 -0
  30. package/dist/lib/migration-013-grafana-password.js +80 -0
  31. package/dist/lib/migration-013-grafana-password.js.map +1 -0
  32. package/dist/lib/migration-014-docker-firewall-backend.d.ts +16 -0
  33. package/dist/lib/migration-014-docker-firewall-backend.d.ts.map +1 -0
  34. package/dist/lib/migration-014-docker-firewall-backend.js +72 -0
  35. package/dist/lib/migration-014-docker-firewall-backend.js.map +1 -0
  36. package/dist/lib/migrations.d.ts +8 -0
  37. package/dist/lib/migrations.d.ts.map +1 -1
  38. package/dist/lib/migrations.js +52 -0
  39. package/dist/lib/migrations.js.map +1 -1
  40. package/dist/lib/otel.d.ts +7 -7
  41. package/dist/lib/otel.d.ts.map +1 -1
  42. package/dist/lib/otel.js +18 -25
  43. package/dist/lib/otel.js.map +1 -1
  44. package/dist/lib/prefs.d.ts +1 -0
  45. package/dist/lib/prefs.d.ts.map +1 -1
  46. package/dist/lib/prefs.js +1 -0
  47. package/dist/lib/prefs.js.map +1 -1
  48. package/dist/lib/prompts.d.ts +3 -0
  49. package/dist/lib/prompts.d.ts.map +1 -0
  50. package/dist/lib/prompts.js +39 -0
  51. package/dist/lib/prompts.js.map +1 -0
  52. package/dist/lib/rpc-scripts.d.ts +4 -0
  53. package/dist/lib/rpc-scripts.d.ts.map +1 -1
  54. package/dist/lib/rpc-scripts.js +235 -0
  55. package/dist/lib/rpc-scripts.js.map +1 -1
  56. package/dist/lib/secrets.d.ts +2 -2
  57. package/dist/lib/secrets.d.ts.map +1 -1
  58. package/dist/lib/secrets.js +2 -1
  59. package/dist/lib/secrets.js.map +1 -1
  60. package/dist/lib/seed/connection.d.ts +5 -0
  61. package/dist/lib/seed/connection.d.ts.map +1 -0
  62. package/dist/lib/seed/connection.js +168 -0
  63. package/dist/lib/seed/connection.js.map +1 -0
  64. package/dist/lib/seed/copy.d.ts +4 -0
  65. package/dist/lib/seed/copy.d.ts.map +1 -0
  66. package/dist/lib/seed/copy.js +74 -0
  67. package/dist/lib/seed/copy.js.map +1 -0
  68. package/dist/lib/seed/dashboard-templates.d.ts +22 -0
  69. package/dist/lib/seed/dashboard-templates.d.ts.map +1 -0
  70. package/dist/lib/seed/dashboard-templates.js +268 -0
  71. package/dist/lib/seed/dashboard-templates.js.map +1 -0
  72. package/dist/lib/seed/families.d.ts +5 -0
  73. package/dist/lib/seed/families.d.ts.map +1 -0
  74. package/dist/lib/seed/families.js +1541 -0
  75. package/dist/lib/seed/families.js.map +1 -0
  76. package/dist/lib/seed/index.d.ts +12 -0
  77. package/dist/lib/seed/index.d.ts.map +1 -0
  78. package/dist/lib/seed/index.js +327 -0
  79. package/dist/lib/seed/index.js.map +1 -0
  80. package/dist/lib/seed/presets.d.ts +5 -0
  81. package/dist/lib/seed/presets.d.ts.map +1 -0
  82. package/dist/lib/seed/presets.js +114 -0
  83. package/dist/lib/seed/presets.js.map +1 -0
  84. package/dist/lib/seed/schema/columns.d.ts +35 -0
  85. package/dist/lib/seed/schema/columns.d.ts.map +1 -0
  86. package/dist/lib/seed/schema/columns.js +497 -0
  87. package/dist/lib/seed/schema/columns.js.map +1 -0
  88. package/dist/lib/seed/schema/fingerprint.d.ts +2 -0
  89. package/dist/lib/seed/schema/fingerprint.d.ts.map +1 -0
  90. package/dist/lib/seed/schema/fingerprint.js +4 -0
  91. package/dist/lib/seed/schema/fingerprint.js.map +1 -0
  92. package/dist/lib/seed/schema/index.d.ts +4 -0
  93. package/dist/lib/seed/schema/index.d.ts.map +1 -0
  94. package/dist/lib/seed/schema/index.js +6 -0
  95. package/dist/lib/seed/schema/index.js.map +1 -0
  96. package/dist/lib/seed/schema/spec.d.ts +8 -0
  97. package/dist/lib/seed/schema/spec.d.ts.map +1 -0
  98. package/dist/lib/seed/schema/spec.js +655 -0
  99. package/dist/lib/seed/schema/spec.js.map +1 -0
  100. package/dist/lib/seed/schema/tables.d.ts +132 -0
  101. package/dist/lib/seed/schema/tables.d.ts.map +1 -0
  102. package/dist/lib/seed/schema/tables.js +37 -0
  103. package/dist/lib/seed/schema/tables.js.map +1 -0
  104. package/dist/lib/seed/store.d.ts +26 -0
  105. package/dist/lib/seed/store.d.ts.map +1 -0
  106. package/dist/lib/seed/store.js +111 -0
  107. package/dist/lib/seed/store.js.map +1 -0
  108. package/dist/lib/seed/types.d.ts +71 -0
  109. package/dist/lib/seed/types.d.ts.map +1 -0
  110. package/dist/lib/seed/types.js +2 -0
  111. package/dist/lib/seed/types.js.map +1 -0
  112. package/dist/lib/storage.d.ts +4 -0
  113. package/dist/lib/storage.d.ts.map +1 -0
  114. package/dist/lib/storage.js +36 -0
  115. package/dist/lib/storage.js.map +1 -0
  116. package/dist/lib/update-steps.d.ts.map +1 -1
  117. package/dist/lib/update-steps.js +15 -0
  118. package/dist/lib/update-steps.js.map +1 -1
  119. package/dist/lib/update.d.ts.map +1 -1
  120. package/dist/lib/update.js +28 -2
  121. package/dist/lib/update.js.map +1 -1
  122. package/dist/lib/version.d.ts +1 -1
  123. package/dist/lib/version.d.ts.map +1 -1
  124. package/dist/lib/version.js +1 -1
  125. package/dist/lib/version.js.map +1 -1
  126. package/dist/lib/xcc-loadtest-types.d.ts +232 -0
  127. package/dist/lib/xcc-loadtest-types.d.ts.map +1 -0
  128. package/dist/lib/xcc-loadtest-types.js +2 -0
  129. package/dist/lib/xcc-loadtest-types.js.map +1 -0
  130. package/dist/lib/xcc-loadtest.d.ts +4 -0
  131. package/dist/lib/xcc-loadtest.d.ts.map +1 -0
  132. package/dist/lib/xcc-loadtest.js +616 -0
  133. package/dist/lib/xcc-loadtest.js.map +1 -0
  134. package/dist/lib/xcc-overlay.d.ts +3 -0
  135. package/dist/lib/xcc-overlay.d.ts.map +1 -0
  136. package/dist/lib/xcc-overlay.js +74 -0
  137. package/dist/lib/xcc-overlay.js.map +1 -0
  138. package/dist/lib/xcc-scenarios.d.ts +8 -0
  139. package/dist/lib/xcc-scenarios.d.ts.map +1 -0
  140. package/dist/lib/xcc-scenarios.js +129 -0
  141. package/dist/lib/xcc-scenarios.js.map +1 -0
  142. package/dist/lib/xcc-xml.d.ts +18 -0
  143. package/dist/lib/xcc-xml.d.ts.map +1 -0
  144. package/dist/lib/xcc-xml.js +210 -0
  145. package/dist/lib/xcc-xml.js.map +1 -0
  146. package/dist/shell/commands/appliance-migrations.d.ts +7 -0
  147. package/dist/shell/commands/appliance-migrations.d.ts.map +1 -0
  148. package/dist/shell/commands/appliance-migrations.js +128 -0
  149. package/dist/shell/commands/appliance-migrations.js.map +1 -0
  150. package/dist/shell/commands/appliance-performance.js +6 -6
  151. package/dist/shell/commands/appliance-performance.js.map +1 -1
  152. package/dist/shell/commands/config.d.ts.map +1 -1
  153. package/dist/shell/commands/config.js +6 -5
  154. package/dist/shell/commands/config.js.map +1 -1
  155. package/dist/shell/commands/connect.d.ts.map +1 -1
  156. package/dist/shell/commands/connect.js +3 -2
  157. package/dist/shell/commands/connect.js.map +1 -1
  158. package/dist/shell/commands/db.d.ts.map +1 -1
  159. package/dist/shell/commands/db.js +5 -4
  160. package/dist/shell/commands/db.js.map +1 -1
  161. package/dist/shell/commands/debug.d.ts.map +1 -1
  162. package/dist/shell/commands/debug.js +5 -4
  163. package/dist/shell/commands/debug.js.map +1 -1
  164. package/dist/shell/commands/diag.js +10 -10
  165. package/dist/shell/commands/diag.js.map +1 -1
  166. package/dist/shell/commands/registry.d.ts.map +1 -1
  167. package/dist/shell/commands/registry.js +56 -1
  168. package/dist/shell/commands/registry.js.map +1 -1
  169. package/dist/shell/commands/secrets.d.ts.map +1 -1
  170. package/dist/shell/commands/secrets.js +2 -1
  171. package/dist/shell/commands/secrets.js.map +1 -1
  172. package/dist/shell/commands/seed.d.ts +9 -0
  173. package/dist/shell/commands/seed.d.ts.map +1 -0
  174. package/dist/shell/commands/seed.js +197 -0
  175. package/dist/shell/commands/seed.js.map +1 -0
  176. package/dist/shell/commands/services.d.ts.map +1 -1
  177. package/dist/shell/commands/services.js +5 -4
  178. package/dist/shell/commands/services.js.map +1 -1
  179. package/dist/shell/commands/test.d.ts.map +1 -1
  180. package/dist/shell/commands/test.js +3 -2
  181. package/dist/shell/commands/test.js.map +1 -1
  182. package/dist/shell/commands/users.d.ts.map +1 -1
  183. package/dist/shell/commands/users.js +5 -39
  184. package/dist/shell/commands/users.js.map +1 -1
  185. package/dist/shell/network-onboarding.d.ts.map +1 -1
  186. package/dist/shell/network-onboarding.js +11 -45
  187. package/dist/shell/network-onboarding.js.map +1 -1
  188. package/dist/ui/components/ActionBar.d.ts +13 -0
  189. package/dist/ui/components/ActionBar.d.ts.map +1 -0
  190. package/dist/ui/components/ActionBar.js +7 -0
  191. package/dist/ui/components/ActionBar.js.map +1 -0
  192. package/dist/ui/components/AppShell.d.ts +6 -1
  193. package/dist/ui/components/AppShell.d.ts.map +1 -1
  194. package/dist/ui/components/AppShell.js +32 -10
  195. package/dist/ui/components/AppShell.js.map +1 -1
  196. package/dist/ui/components/DashboardBlock.d.ts +11 -0
  197. package/dist/ui/components/DashboardBlock.d.ts.map +1 -0
  198. package/dist/ui/components/DashboardBlock.js +6 -0
  199. package/dist/ui/components/DashboardBlock.js.map +1 -0
  200. package/dist/ui/components/DataTable.d.ts +6 -1
  201. package/dist/ui/components/DataTable.d.ts.map +1 -1
  202. package/dist/ui/components/DataTable.js +71 -7
  203. package/dist/ui/components/DataTable.js.map +1 -1
  204. package/dist/ui/components/ErrorBoundary.d.ts +1 -1
  205. package/dist/ui/components/FieldList.d.ts +24 -0
  206. package/dist/ui/components/FieldList.d.ts.map +1 -0
  207. package/dist/ui/components/FieldList.js +67 -0
  208. package/dist/ui/components/FieldList.js.map +1 -0
  209. package/dist/ui/components/KeyValue.d.ts +4 -2
  210. package/dist/ui/components/KeyValue.d.ts.map +1 -1
  211. package/dist/ui/components/KeyValue.js +4 -2
  212. package/dist/ui/components/KeyValue.js.map +1 -1
  213. package/dist/ui/components/KeyboardHint.d.ts +10 -0
  214. package/dist/ui/components/KeyboardHint.d.ts.map +1 -0
  215. package/dist/ui/components/KeyboardHint.js +6 -0
  216. package/dist/ui/components/KeyboardHint.js.map +1 -0
  217. package/dist/ui/components/MenuList.d.ts +10 -0
  218. package/dist/ui/components/MenuList.d.ts.map +1 -0
  219. package/dist/ui/components/MenuList.js +7 -0
  220. package/dist/ui/components/MenuList.js.map +1 -0
  221. package/dist/ui/components/MetricsFooter.d.ts +10 -7
  222. package/dist/ui/components/MetricsFooter.d.ts.map +1 -1
  223. package/dist/ui/components/MetricsFooter.js +16 -3
  224. package/dist/ui/components/MetricsFooter.js.map +1 -1
  225. package/dist/ui/components/PaneSection.d.ts +9 -0
  226. package/dist/ui/components/PaneSection.d.ts.map +1 -0
  227. package/dist/ui/components/PaneSection.js +6 -0
  228. package/dist/ui/components/PaneSection.js.map +1 -0
  229. package/dist/ui/components/PanelState.d.ts +8 -0
  230. package/dist/ui/components/PanelState.d.ts.map +1 -0
  231. package/dist/ui/components/PanelState.js +7 -0
  232. package/dist/ui/components/PanelState.js.map +1 -0
  233. package/dist/ui/components/ScrollViewport.d.ts +16 -0
  234. package/dist/ui/components/ScrollViewport.d.ts.map +1 -0
  235. package/dist/ui/components/ScrollViewport.js +54 -0
  236. package/dist/ui/components/ScrollViewport.js.map +1 -0
  237. package/dist/ui/components/Section.js +1 -1
  238. package/dist/ui/components/Section.js.map +1 -1
  239. package/dist/ui/components/SelectMenu.d.ts.map +1 -1
  240. package/dist/ui/components/SelectMenu.js +3 -3
  241. package/dist/ui/components/SelectMenu.js.map +1 -1
  242. package/dist/ui/components/ShellOutput.d.ts +2 -1
  243. package/dist/ui/components/ShellOutput.d.ts.map +1 -1
  244. package/dist/ui/components/ShellOutput.js +6 -2
  245. package/dist/ui/components/ShellOutput.js.map +1 -1
  246. package/dist/ui/components/SplitPane.d.ts +18 -0
  247. package/dist/ui/components/SplitPane.d.ts.map +1 -0
  248. package/dist/ui/components/SplitPane.js +9 -0
  249. package/dist/ui/components/SplitPane.js.map +1 -0
  250. package/dist/ui/components/StatusList.d.ts +18 -0
  251. package/dist/ui/components/StatusList.d.ts.map +1 -0
  252. package/dist/ui/components/StatusList.js +13 -0
  253. package/dist/ui/components/StatusList.js.map +1 -0
  254. package/dist/ui/components/SummaryStrip.d.ts +9 -0
  255. package/dist/ui/components/SummaryStrip.d.ts.map +1 -0
  256. package/dist/ui/components/SummaryStrip.js +6 -0
  257. package/dist/ui/components/SummaryStrip.js.map +1 -0
  258. package/dist/ui/components/app-shell-viewport.d.ts +7 -0
  259. package/dist/ui/components/app-shell-viewport.d.ts.map +1 -0
  260. package/dist/ui/components/app-shell-viewport.js +6 -0
  261. package/dist/ui/components/app-shell-viewport.js.map +1 -0
  262. package/dist/ui/components/index.d.ts +14 -0
  263. package/dist/ui/components/index.d.ts.map +1 -1
  264. package/dist/ui/components/index.js +12 -0
  265. package/dist/ui/components/index.js.map +1 -1
  266. package/dist/ui/context/MetricsContext.d.ts.map +1 -1
  267. package/dist/ui/context/MetricsContext.js +15 -12
  268. package/dist/ui/context/MetricsContext.js.map +1 -1
  269. package/dist/ui/hooks/index.d.ts +9 -1
  270. package/dist/ui/hooks/index.d.ts.map +1 -1
  271. package/dist/ui/hooks/index.js +7 -0
  272. package/dist/ui/hooks/index.js.map +1 -1
  273. package/dist/ui/hooks/useAsyncTask.d.ts +7 -1
  274. package/dist/ui/hooks/useAsyncTask.d.ts.map +1 -1
  275. package/dist/ui/hooks/useAsyncTask.js +30 -6
  276. package/dist/ui/hooks/useAsyncTask.js.map +1 -1
  277. package/dist/ui/hooks/useBoundedCursor.d.ts +7 -0
  278. package/dist/ui/hooks/useBoundedCursor.d.ts.map +1 -0
  279. package/dist/ui/hooks/useBoundedCursor.js +19 -0
  280. package/dist/ui/hooks/useBoundedCursor.js.map +1 -0
  281. package/dist/ui/hooks/useConfirmBackNav.d.ts +7 -0
  282. package/dist/ui/hooks/useConfirmBackNav.d.ts.map +1 -0
  283. package/dist/ui/hooks/useConfirmBackNav.js +10 -0
  284. package/dist/ui/hooks/useConfirmBackNav.js.map +1 -0
  285. package/dist/ui/hooks/useDismissKeys.d.ts +10 -0
  286. package/dist/ui/hooks/useDismissKeys.d.ts.map +1 -0
  287. package/dist/ui/hooks/useDismissKeys.js +17 -0
  288. package/dist/ui/hooks/useDismissKeys.js.map +1 -0
  289. package/dist/ui/hooks/useListCursor.d.ts +7 -0
  290. package/dist/ui/hooks/useListCursor.d.ts.map +1 -0
  291. package/dist/ui/hooks/useListCursor.js +29 -0
  292. package/dist/ui/hooks/useListCursor.js.map +1 -0
  293. package/dist/ui/hooks/useTwoPaneCursor.d.ts +12 -0
  294. package/dist/ui/hooks/useTwoPaneCursor.d.ts.map +1 -0
  295. package/dist/ui/hooks/useTwoPaneCursor.js +36 -0
  296. package/dist/ui/hooks/useTwoPaneCursor.js.map +1 -0
  297. package/dist/ui/hooks/useXccBackendOverlay.d.ts +9 -0
  298. package/dist/ui/hooks/useXccBackendOverlay.d.ts.map +1 -0
  299. package/dist/ui/hooks/useXccBackendOverlay.js +14 -0
  300. package/dist/ui/hooks/useXccBackendOverlay.js.map +1 -0
  301. package/dist/ui/hooks/useXccLoadTest.d.ts +11 -0
  302. package/dist/ui/hooks/useXccLoadTest.d.ts.map +1 -0
  303. package/dist/ui/hooks/useXccLoadTest.js +37 -0
  304. package/dist/ui/hooks/useXccLoadTest.js.map +1 -0
  305. package/dist/ui/palette.d.ts +23 -0
  306. package/dist/ui/palette.d.ts.map +1 -0
  307. package/dist/ui/palette.js +22 -0
  308. package/dist/ui/palette.js.map +1 -0
  309. package/dist/ui/views/DbHealthView.js +4 -4
  310. package/dist/ui/views/DbHealthView.js.map +1 -1
  311. package/dist/ui/views/DbSizeView.d.ts.map +1 -1
  312. package/dist/ui/views/DbSizeView.js +2 -2
  313. package/dist/ui/views/DbSizeView.js.map +1 -1
  314. package/dist/ui/views/DbTablesView.d.ts.map +1 -1
  315. package/dist/ui/views/DbTablesView.js +2 -2
  316. package/dist/ui/views/DbTablesView.js.map +1 -1
  317. package/dist/ui/views/DiagDatabaseView.d.ts.map +1 -1
  318. package/dist/ui/views/DiagDatabaseView.js +4 -3
  319. package/dist/ui/views/DiagDatabaseView.js.map +1 -1
  320. package/dist/ui/views/DiagNetworkView.js +2 -2
  321. package/dist/ui/views/DiagNetworkView.js.map +1 -1
  322. package/dist/ui/views/DiagServiceView.js +1 -1
  323. package/dist/ui/views/DiagServiceView.js.map +1 -1
  324. package/dist/ui/views/DockerPruneView.d.ts.map +1 -1
  325. package/dist/ui/views/DockerPruneView.js +4 -8
  326. package/dist/ui/views/DockerPruneView.js.map +1 -1
  327. package/dist/ui/views/K8sDeployView.d.ts.map +1 -1
  328. package/dist/ui/views/K8sDeployView.js +5 -5
  329. package/dist/ui/views/K8sDeployView.js.map +1 -1
  330. package/dist/ui/views/K8sServicesView.d.ts.map +1 -1
  331. package/dist/ui/views/K8sServicesView.js +6 -11
  332. package/dist/ui/views/K8sServicesView.js.map +1 -1
  333. package/dist/ui/views/K8sStatusView.d.ts.map +1 -1
  334. package/dist/ui/views/K8sStatusView.js +14 -19
  335. package/dist/ui/views/K8sStatusView.js.map +1 -1
  336. package/dist/ui/views/LoadTestConfigView.d.ts.map +1 -1
  337. package/dist/ui/views/LoadTestConfigView.js +45 -43
  338. package/dist/ui/views/LoadTestConfigView.js.map +1 -1
  339. package/dist/ui/views/LoadTestSummaryView.d.ts.map +1 -1
  340. package/dist/ui/views/LoadTestSummaryView.js +7 -2
  341. package/dist/ui/views/LoadTestSummaryView.js.map +1 -1
  342. package/dist/ui/views/MainMenu.d.ts.map +1 -1
  343. package/dist/ui/views/MainMenu.js +254 -55
  344. package/dist/ui/views/MainMenu.js.map +1 -1
  345. package/dist/ui/views/MigrateHistoryView.d.ts.map +1 -1
  346. package/dist/ui/views/MigrateHistoryView.js +11 -2
  347. package/dist/ui/views/MigrateHistoryView.js.map +1 -1
  348. package/dist/ui/views/MigrateRollbackView.d.ts.map +1 -1
  349. package/dist/ui/views/MigrateRollbackView.js +4 -8
  350. package/dist/ui/views/MigrateRollbackView.js.map +1 -1
  351. package/dist/ui/views/MigrateRunView.d.ts.map +1 -1
  352. package/dist/ui/views/MigrateRunView.js +4 -8
  353. package/dist/ui/views/MigrateRunView.js.map +1 -1
  354. package/dist/ui/views/MigrateStatusView.js +1 -1
  355. package/dist/ui/views/MigrateStatusView.js.map +1 -1
  356. package/dist/ui/views/MigrateWatchView.js +1 -1
  357. package/dist/ui/views/MigrateWatchView.js.map +1 -1
  358. package/dist/ui/views/OfflineApplyView.d.ts.map +1 -1
  359. package/dist/ui/views/OfflineApplyView.js +17 -7
  360. package/dist/ui/views/OfflineApplyView.js.map +1 -1
  361. package/dist/ui/views/OfflineDownloadView.d.ts.map +1 -1
  362. package/dist/ui/views/OfflineDownloadView.js +17 -7
  363. package/dist/ui/views/OfflineDownloadView.js.map +1 -1
  364. package/dist/ui/views/OfflineFetchView.d.ts.map +1 -1
  365. package/dist/ui/views/OfflineFetchView.js +17 -7
  366. package/dist/ui/views/OfflineFetchView.js.map +1 -1
  367. package/dist/ui/views/OfflineInspectView.d.ts.map +1 -1
  368. package/dist/ui/views/OfflineInspectView.js +17 -7
  369. package/dist/ui/views/OfflineInspectView.js.map +1 -1
  370. package/dist/ui/views/OsUpdatesEnableView.js +4 -4
  371. package/dist/ui/views/OsUpdatesEnableView.js.map +1 -1
  372. package/dist/ui/views/OsUpdatesLogView.js +1 -1
  373. package/dist/ui/views/OsUpdatesLogView.js.map +1 -1
  374. package/dist/ui/views/OsUpdatesStatusView.d.ts.map +1 -1
  375. package/dist/ui/views/OsUpdatesStatusView.js +12 -12
  376. package/dist/ui/views/OsUpdatesStatusView.js.map +1 -1
  377. package/dist/ui/views/PowerActionView.d.ts.map +1 -1
  378. package/dist/ui/views/PowerActionView.js +3 -8
  379. package/dist/ui/views/PowerActionView.js.map +1 -1
  380. package/dist/ui/views/SecretsResetPasswordView.d.ts.map +1 -1
  381. package/dist/ui/views/SecretsResetPasswordView.js +23 -7
  382. package/dist/ui/views/SecretsResetPasswordView.js.map +1 -1
  383. package/dist/ui/views/SecretsSetupView.d.ts.map +1 -1
  384. package/dist/ui/views/SecretsSetupView.js +39 -22
  385. package/dist/ui/views/SecretsSetupView.js.map +1 -1
  386. package/dist/ui/views/ServiceLogsView.d.ts.map +1 -1
  387. package/dist/ui/views/ServiceLogsView.js +9 -9
  388. package/dist/ui/views/ServiceLogsView.js.map +1 -1
  389. package/dist/ui/views/ServicesView.d.ts.map +1 -1
  390. package/dist/ui/views/ServicesView.js +51 -28
  391. package/dist/ui/views/ServicesView.js.map +1 -1
  392. package/dist/ui/views/SettingsView.d.ts.map +1 -1
  393. package/dist/ui/views/SettingsView.js +5 -4
  394. package/dist/ui/views/SettingsView.js.map +1 -1
  395. package/dist/ui/views/SetupWizardView.d.ts.map +1 -1
  396. package/dist/ui/views/SetupWizardView.js +37 -32
  397. package/dist/ui/views/SetupWizardView.js.map +1 -1
  398. package/dist/ui/views/StatusView.d.ts.map +1 -1
  399. package/dist/ui/views/StatusView.js +44 -31
  400. package/dist/ui/views/StatusView.js.map +1 -1
  401. package/dist/ui/views/UpdateView.d.ts.map +1 -1
  402. package/dist/ui/views/UpdateView.js +28 -14
  403. package/dist/ui/views/UpdateView.js.map +1 -1
  404. package/dist/ui/views/UserResetPasswordView.d.ts.map +1 -1
  405. package/dist/ui/views/UserResetPasswordView.js +26 -8
  406. package/dist/ui/views/UserResetPasswordView.js.map +1 -1
  407. package/dist/ui/views/XccLoadTestConfigView.d.ts +29 -0
  408. package/dist/ui/views/XccLoadTestConfigView.d.ts.map +1 -0
  409. package/dist/ui/views/XccLoadTestConfigView.js +210 -0
  410. package/dist/ui/views/XccLoadTestConfigView.js.map +1 -0
  411. package/dist/ui/views/XccLoadTestRunView.d.ts +9 -0
  412. package/dist/ui/views/XccLoadTestRunView.d.ts.map +1 -0
  413. package/dist/ui/views/XccLoadTestRunView.js +154 -0
  414. package/dist/ui/views/XccLoadTestRunView.js.map +1 -0
  415. package/dist/ui/views/XccLoadTestSummaryView.d.ts +9 -0
  416. package/dist/ui/views/XccLoadTestSummaryView.d.ts.map +1 -0
  417. package/dist/ui/views/XccLoadTestSummaryView.js +63 -0
  418. package/dist/ui/views/XccLoadTestSummaryView.js.map +1 -0
  419. package/dist/ui/views/XccLoadTestView.d.ts +8 -0
  420. package/dist/ui/views/XccLoadTestView.d.ts.map +1 -0
  421. package/dist/ui/views/XccLoadTestView.js +40 -0
  422. package/dist/ui/views/XccLoadTestView.js.map +1 -0
  423. package/package.json +6 -1
  424. package/dist/ui/views/JtapiDisableView.d.ts +0 -6
  425. package/dist/ui/views/JtapiDisableView.d.ts.map +0 -1
  426. package/dist/ui/views/JtapiDisableView.js +0 -52
  427. package/dist/ui/views/JtapiDisableView.js.map +0 -1
  428. package/dist/ui/views/JtapiEnableView.d.ts +0 -6
  429. package/dist/ui/views/JtapiEnableView.d.ts.map +0 -1
  430. package/dist/ui/views/JtapiEnableView.js +0 -40
  431. package/dist/ui/views/JtapiEnableView.js.map +0 -1
  432. package/dist/ui/views/JtapiStatusView.d.ts +0 -6
  433. package/dist/ui/views/JtapiStatusView.d.ts.map +0 -1
  434. package/dist/ui/views/JtapiStatusView.js +0 -11
  435. package/dist/ui/views/JtapiStatusView.js.map +0 -1
  436. package/dist/ui/views/JtapiTroubleshootView.d.ts +0 -6
  437. package/dist/ui/views/JtapiTroubleshootView.d.ts.map +0 -1
  438. package/dist/ui/views/JtapiTroubleshootView.js +0 -114
  439. package/dist/ui/views/JtapiTroubleshootView.js.map +0 -1
@@ -0,0 +1,106 @@
1
+ import * as out from '../utils/output.js';
2
+ import { cleanupSeedData, formatSeedStatus, listSeedPresets, runSeedPreset, } from '../lib/seed/index.js';
3
+ function parseOrgId(value) {
4
+ const parsed = Number.parseInt(value, 10);
5
+ if (!Number.isInteger(parsed) || parsed <= 0) {
6
+ throw new Error('org-id must be a positive integer');
7
+ }
8
+ return parsed;
9
+ }
10
+ function parseOptionalPositiveInt(value) {
11
+ const parsed = Number.parseInt(value, 10);
12
+ if (!Number.isInteger(parsed) || parsed <= 0) {
13
+ throw new Error('value must be a positive integer');
14
+ }
15
+ return parsed;
16
+ }
17
+ export function registerSeedCommand(program) {
18
+ const seed = program
19
+ .command('seed')
20
+ .description('Seed demo and load-test data directly into PostgreSQL');
21
+ seed
22
+ .command('list')
23
+ .description('List supported seed presets')
24
+ .action(() => {
25
+ const presets = listSeedPresets();
26
+ out.header('Seed Presets');
27
+ for (const preset of presets) {
28
+ console.log(`${preset.name}`);
29
+ console.log(` ${preset.description}`);
30
+ console.log(` Families: ${preset.families.join(', ')}`);
31
+ console.log(` Refresh MVs: ${preset.refreshMaterializedViews ? 'yes' : 'no'}`);
32
+ if (preset.requiresAllowDisruptive) {
33
+ console.log(' Requires: --allow-disruptive');
34
+ }
35
+ console.log();
36
+ }
37
+ });
38
+ seed
39
+ .command('run <preset>')
40
+ .description('Run a named seed preset')
41
+ .addHelpText('after', `\nAvailable presets:\n${listSeedPresets().map((preset) => ` - ${preset.name}`).join('\n')}\n`)
42
+ .requiredOption('--org-id <id>', 'Existing organization id', parseOrgId)
43
+ .option('--db-url <url>', 'Explicit PostgreSQL connection URL')
44
+ .option('--append', 'Append seeded rows instead of cleaning prior ct seed data first')
45
+ .option('--dry-run', 'Print the execution plan without writing rows')
46
+ .option('--allow-disruptive', 'Allow large/disruptive presets intended for load testing')
47
+ .option('--refresh-mvs', 'Refresh materialized views after the run')
48
+ .option('--no-refresh-mvs', 'Skip materialized view refresh after the run')
49
+ .action(async (preset, opts) => {
50
+ const result = await runSeedPreset(preset, {
51
+ orgId: opts.orgId,
52
+ dbUrl: opts.dbUrl,
53
+ append: opts.append ?? false,
54
+ dryRun: opts.dryRun ?? false,
55
+ allowDisruptive: opts.allowDisruptive ?? false,
56
+ refreshMaterializedViews: opts.refreshMvs,
57
+ });
58
+ if (result.dryRun) {
59
+ out.header('Seed Dry Run');
60
+ console.log(result.summary);
61
+ return;
62
+ }
63
+ out.successBox(`Seed preset '${result.preset}' completed`);
64
+ console.log(result.summary);
65
+ });
66
+ seed
67
+ .command('status')
68
+ .description('Show current ct seed data counts and recent runs')
69
+ .requiredOption('--org-id <id>', 'Existing organization id', parseOrgId)
70
+ .option('--db-url <url>', 'Explicit PostgreSQL connection URL')
71
+ .option('--limit <n>', 'Number of recent runs to show', parseOptionalPositiveInt, 5)
72
+ .action(async (opts) => {
73
+ const status = await formatSeedStatus({
74
+ orgId: opts.orgId,
75
+ dbUrl: opts.dbUrl,
76
+ limit: opts.limit,
77
+ });
78
+ console.log(status);
79
+ });
80
+ seed
81
+ .command('cleanup')
82
+ .description('Remove ct seed data for an organization')
83
+ .requiredOption('--org-id <id>', 'Existing organization id', parseOrgId)
84
+ .option('--db-url <url>', 'Explicit PostgreSQL connection URL')
85
+ .option('--all', 'Clean all ct seed runs for the org')
86
+ .option('--preset <name>', 'Clean ct seed runs matching a preset name')
87
+ .option('--run-id <id>', 'Clean a specific ct seed run id')
88
+ .action(async (opts) => {
89
+ const cleanupSelectors = [Boolean(opts.all), Boolean(opts.preset), Boolean(opts.runId)]
90
+ .filter(Boolean)
91
+ .length;
92
+ if (cleanupSelectors > 1) {
93
+ throw new Error('choose only one of --all, --preset, or --run-id');
94
+ }
95
+ const result = await cleanupSeedData({
96
+ orgId: opts.orgId,
97
+ dbUrl: opts.dbUrl,
98
+ mode: opts.runId ? 'run' : opts.preset ? 'preset' : 'all',
99
+ preset: opts.preset,
100
+ runId: opts.runId,
101
+ });
102
+ out.successBox('Seed cleanup complete');
103
+ console.log(result.summary);
104
+ });
105
+ }
106
+ //# sourceMappingURL=seed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.js","sourceRoot":"","sources":["../../src/commands/seed.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,aAAa,GACd,MAAM,sBAAsB,CAAC;AAE9B,SAAS,UAAU,CAAC,KAAa;IAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAa;IAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,MAAM,IAAI,GAAG,OAAO;SACjB,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,uDAAuD,CAAC,CAAC;IAExE,IAAI;SACD,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,6BAA6B,CAAC;SAC1C,MAAM,CAAC,GAAG,EAAE;QACX,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;QAElC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAC3B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAChF,IAAI,MAAM,CAAC,uBAAuB,EAAE,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;YAChD,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,IAAI;SACD,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,yBAAyB,CAAC;SACtC,WAAW,CACV,OAAO,EACP,yBAAyB,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAChG;SACA,cAAc,CAAC,eAAe,EAAE,0BAA0B,EAAE,UAAU,CAAC;SACvE,MAAM,CAAC,gBAAgB,EAAE,oCAAoC,CAAC;SAC9D,MAAM,CAAC,UAAU,EAAE,iEAAiE,CAAC;SACrF,MAAM,CAAC,WAAW,EAAE,+CAA+C,CAAC;SACpE,MAAM,CAAC,oBAAoB,EAAE,0DAA0D,CAAC;SACxF,MAAM,CAAC,eAAe,EAAE,0CAA0C,CAAC;SACnE,MAAM,CAAC,kBAAkB,EAAE,8CAA8C,CAAC;SAC1E,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,IAO9B,EAAE,EAAE;QACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE;YACzC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK;YAC5B,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK;YAC5B,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,KAAK;YAC9C,wBAAwB,EAAE,IAAI,CAAC,UAAU;SAC1C,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QAED,GAAG,CAAC,UAAU,CAAC,gBAAgB,MAAM,CAAC,MAAM,aAAa,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEL,IAAI;SACD,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,kDAAkD,CAAC;SAC/D,cAAc,CAAC,eAAe,EAAE,0BAA0B,EAAE,UAAU,CAAC;SACvE,MAAM,CAAC,gBAAgB,EAAE,oCAAoC,CAAC;SAC9D,MAAM,CAAC,aAAa,EAAE,+BAA+B,EAAE,wBAAwB,EAAE,CAAC,CAAC;SACnF,MAAM,CAAC,KAAK,EAAE,IAAsD,EAAE,EAAE;QACvE,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC;YACpC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IAEL,IAAI;SACD,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,yCAAyC,CAAC;SACtD,cAAc,CAAC,eAAe,EAAE,0BAA0B,EAAE,UAAU,CAAC;SACvE,MAAM,CAAC,gBAAgB,EAAE,oCAAoC,CAAC;SAC9D,MAAM,CAAC,OAAO,EAAE,oCAAoC,CAAC;SACrD,MAAM,CAAC,iBAAiB,EAAE,2CAA2C,CAAC;SACtE,MAAM,CAAC,eAAe,EAAE,iCAAiC,CAAC;SAC1D,MAAM,CAAC,KAAK,EAAE,IAMd,EAAE,EAAE;QACH,MAAM,gBAAgB,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACpF,MAAM,CAAC,OAAO,CAAC;aACf,MAAM,CAAC;QACV,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;YACnC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK;YACzD,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;QAEH,GAAG,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerStorageCommand(program: Command): void;
3
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/commands/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,QAsCtD"}
@@ -0,0 +1,66 @@
1
+ import { isStorageEnabled, enableStorage, disableStorage } from '../lib/storage.js';
2
+ import { compose, composeUp } from '../lib/compose.js';
3
+ export function registerStorageCommand(program) {
4
+ const storage = program
5
+ .command('storage')
6
+ .description('Manage SeaweedFS S3-compatible object storage')
7
+ .action(async () => {
8
+ await statusAction();
9
+ });
10
+ storage.command('enable')
11
+ .description('Start SeaweedFS storage service')
12
+ .action(async () => {
13
+ console.log('Enabling storage (SeaweedFS)...');
14
+ await enableStorage();
15
+ try {
16
+ await composeUp(['seaweedfs']);
17
+ console.log('✅ Storage enabled and started.');
18
+ }
19
+ catch (err) {
20
+ console.log('✅ Storage enabled. Start with: systemctl restart docker-compose-app.service');
21
+ }
22
+ });
23
+ storage.command('disable')
24
+ .description('Stop SeaweedFS storage service')
25
+ .action(async () => {
26
+ console.log('Disabling storage (SeaweedFS)...');
27
+ await disableStorage();
28
+ try {
29
+ await compose(['stop', 'seaweedfs']);
30
+ await compose(['rm', '-f', 'seaweedfs']);
31
+ console.log('✅ Storage disabled and stopped.');
32
+ }
33
+ catch {
34
+ console.log('✅ Storage disabled. Stop with: docker stop calltelemetry-seaweedfs-1');
35
+ }
36
+ });
37
+ storage.command('status')
38
+ .description('Show SeaweedFS storage status')
39
+ .action(statusAction);
40
+ }
41
+ async function statusAction() {
42
+ const enabled = isStorageEnabled();
43
+ console.log(`Storage profile: ${enabled ? 'enabled' : 'disabled'}`);
44
+ try {
45
+ const ps = await compose(['ps', '--format', 'json', 'seaweedfs'], { pipe: true });
46
+ const stdout = String(ps.stdout ?? '').trim();
47
+ if (stdout) {
48
+ for (const line of stdout.split('\n').filter(Boolean)) {
49
+ try {
50
+ const obj = JSON.parse(line);
51
+ const state = obj.State ?? obj.state ?? 'unknown';
52
+ const health = obj.Health ?? obj.health ?? '';
53
+ console.log(`seaweedfs: ${state}${health ? ` (${health})` : ''}`);
54
+ }
55
+ catch { /* ignore */ }
56
+ }
57
+ }
58
+ else {
59
+ console.log('seaweedfs: not running');
60
+ }
61
+ }
62
+ catch {
63
+ console.log('seaweedfs: not running');
64
+ }
65
+ }
66
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/commands/storage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,MAAM,OAAO,GAAG,OAAO;SACpB,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,+CAA+C,CAAC;SAC5D,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,YAAY,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEL,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;SACtB,WAAW,CAAC,iCAAiC,CAAC;SAC9C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAC/C,MAAM,aAAa,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;SACvB,WAAW,CAAC,gCAAgC,CAAC;SAC7C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAChD,MAAM,cAAc,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;YACrC,MAAM,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC;QACtF,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;SACtB,WAAW,CAAC,+BAA+B,CAAC;SAC5C,MAAM,CAAC,YAAY,CAAC,CAAC;AAC1B,CAAC;AAED,KAAK,UAAU,YAAY;IACzB,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;IACpE,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAS,CAAC,CAAC;QACzF,MAAM,MAAM,GAAG,MAAM,CAAE,EAAU,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACvD,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBACtD,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC7B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,IAAI,SAAS,CAAC;oBAClD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;oBAC9C,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACpE,CAAC;gBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACxC,CAAC;AACH,CAAC"}
package/dist/index.js CHANGED
@@ -10,6 +10,8 @@ import { registerDockerCommand } from './commands/docker.js';
10
10
  import { registerOfflineCommand } from './commands/offline.js';
11
11
  import { registerDiagCommand } from './commands/diag.js';
12
12
  import { registerJtapiCommand } from './commands/jtapi.js';
13
+ import { registerStorageCommand } from './commands/storage.js';
14
+ import { registerOtelCommand } from './commands/otel.js';
13
15
  import { registerSecretsCommand } from './commands/secrets.js';
14
16
  import { registerUsersCommand } from './commands/users.js';
15
17
  import { registerServicesCommand } from './commands/services.js';
@@ -20,6 +22,7 @@ import { registerK8sCommand } from './commands/k8s.js';
20
22
  import { registerNetworkCommand } from './commands/network.js';
21
23
  import { registerShellCommand } from './commands/shell.js';
22
24
  import { registerApplianceCommand } from './commands/appliance.js';
25
+ import { registerSeedCommand } from './commands/seed.js';
23
26
  import { LOGO } from './lib/brand.js';
24
27
  import { setVerbose, setGlobalLevel } from './lib/log.js';
25
28
  import { loadPrefs } from './lib/prefs.js';
@@ -55,6 +58,8 @@ registerDockerCommand(program);
55
58
  registerOfflineCommand(program);
56
59
  registerDiagCommand(program);
57
60
  registerJtapiCommand(program);
61
+ registerStorageCommand(program);
62
+ registerOtelCommand(program);
58
63
  registerSecretsCommand(program);
59
64
  registerUsersCommand(program);
60
65
  registerServicesCommand(program);
@@ -65,6 +70,7 @@ registerK8sCommand(program);
65
70
  registerNetworkCommand(program);
66
71
  registerShellCommand(program);
67
72
  registerApplianceCommand(program);
73
+ registerSeedCommand(program);
68
74
  // Interactive menu when `ct` is run with no arguments on a TTY
69
75
  // Flags like --debug and --verbose are not commands; only positional args count
70
76
  const nonFlagArgs = process.argv.slice(2).filter(a => !a.startsWith('-'));
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@
9
9
  * After=network-online.target firewalld.service
10
10
  * Wants=network-online.target
11
11
  */
12
- import { existsSync, readFileSync } from 'node:fs';
12
+ import { existsSync, readFileSync, writeFileSync, unlinkSync } from 'node:fs';
13
13
  import { spawnSync } from 'node:child_process';
14
14
  const OVERRIDE_DIR = '/etc/systemd/system/docker.service.d';
15
15
  const OVERRIDE_FILE = `${OVERRIDE_DIR}/override.conf`;
@@ -32,10 +32,10 @@ export async function migrateSystemdDocker() {
32
32
  spawnSync('sudo', ['mkdir', '-p', OVERRIDE_DIR], { stdio: 'pipe' });
33
33
  // Write override file via sudo
34
34
  const tmp = `/tmp/ct-systemd-override-${Date.now()}.conf`;
35
- require('node:fs').writeFileSync(tmp, EXPECTED_CONTENT);
35
+ writeFileSync(tmp, EXPECTED_CONTENT);
36
36
  const cp = spawnSync('sudo', ['cp', tmp, OVERRIDE_FILE], { stdio: 'pipe' });
37
37
  try {
38
- require('node:fs').unlinkSync(tmp);
38
+ unlinkSync(tmp);
39
39
  }
40
40
  catch { /* ignore */ }
41
41
  if (cp.status !== 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"migration-004-systemd-docker.js","sourceRoot":"","sources":["../../src/lib/migration-004-systemd-docker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,YAAY,GAAG,sCAAsC,CAAC;AAC5D,MAAM,aAAa,GAAG,GAAG,YAAY,gBAAgB,CAAC;AACtD,MAAM,gBAAgB,GAAG;;;CAGxB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,wDAAwD;IACxD,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YACrD,IAAI,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBAC1C,OAAO,KAAK,CAAC,CAAC,kBAAkB;YAClC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,2BAA2B,CAAC,CAAC;IACzC,CAAC;IAED,4BAA4B;IAC5B,SAAS,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAEpE,+BAA+B;IAC/B,MAAM,GAAG,GAAG,4BAA4B,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC;IAC1D,OAAO,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IACxD,MAAM,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5E,IAAI,CAAC;QAAC,OAAO,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAElE,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,mBAAmB,aAAa,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,iBAAiB;IACjB,SAAS,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,eAAe,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAErE,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"migration-004-systemd-docker.js","sourceRoot":"","sources":["../../src/lib/migration-004-systemd-docker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,YAAY,GAAG,sCAAsC,CAAC;AAC5D,MAAM,aAAa,GAAG,GAAG,YAAY,gBAAgB,CAAC;AACtD,MAAM,gBAAgB,GAAG;;;CAGxB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,wDAAwD;IACxD,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YACrD,IAAI,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBAC1C,OAAO,KAAK,CAAC,CAAC,kBAAkB;YAClC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,2BAA2B,CAAC,CAAC;IACzC,CAAC;IAED,4BAA4B;IAC5B,SAAS,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAEpE,+BAA+B;IAC/B,MAAM,GAAG,GAAG,4BAA4B,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC;IAC1D,aAAa,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IACrC,MAAM,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5E,IAAI,CAAC;QAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAE/C,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,mBAAmB,aAAa,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,iBAAiB;IACjB,SAAS,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,eAAe,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAErE,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -9,7 +9,7 @@
9
9
  * fingerprint, or if a sentinel file indicates keys haven't been
10
10
  * regenerated since OVA deployment.
11
11
  */
12
- import { existsSync } from 'node:fs';
12
+ import { existsSync, writeFileSync, unlinkSync } from 'node:fs';
13
13
  import { spawnSync } from 'node:child_process';
14
14
  const SSH_REGEN_SENTINEL = '/etc/ct-ssh-keys-regenerated';
15
15
  export async function migrateSshKeys() {
@@ -36,10 +36,10 @@ export async function migrateSshKeys() {
36
36
  }
37
37
  // Write sentinel so this never runs again
38
38
  const tmp = `/tmp/ct-ssh-sentinel-${Date.now()}`;
39
- require('node:fs').writeFileSync(tmp, new Date().toISOString());
39
+ writeFileSync(tmp, new Date().toISOString());
40
40
  spawnSync('sudo', ['cp', tmp, SSH_REGEN_SENTINEL], { stdio: 'pipe' });
41
41
  try {
42
- require('node:fs').unlinkSync(tmp);
42
+ unlinkSync(tmp);
43
43
  }
44
44
  catch { /* ignore */ }
45
45
  // Reload sshd to pick up new keys (don't restart — would kill current session)
@@ -1 +1 @@
1
- {"version":3,"file":"migration-005-ssh-keys.js","sourceRoot":"","sources":["../../src/lib/migration-005-ssh-keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,SAAS,EAAY,MAAM,oBAAoB,CAAC;AAEzD,MAAM,kBAAkB,GAAG,8BAA8B,CAAC;AAE1D,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,oDAAoD;IACpD,IAAI,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACnC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,sCAAsC;IACtC,MAAM,OAAO,GAAG,UAAU,CAAC,+BAA+B,CAAC;QAC3C,UAAU,CAAC,2BAA2B,CAAC,CAAC;IAExD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,uCAAuC;QACvC,SAAS,CAAC,MAAM,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,uDAAuD;QACvD,kBAAkB;QAClB,SAAS,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,gCAAgC,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAEvF,oBAAoB;QACpB,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1E,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,MAAM,GAAG,GAAG,wBAAwB,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IACjD,OAAO,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IAChE,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,kBAAkB,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACtE,IAAI,CAAC;QAAC,OAAO,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAElE,+EAA+E;IAC/E,SAAS,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAEtE,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"migration-005-ssh-keys.js","sourceRoot":"","sources":["../../src/lib/migration-005-ssh-keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,SAAS,EAAY,MAAM,oBAAoB,CAAC;AAEzD,MAAM,kBAAkB,GAAG,8BAA8B,CAAC;AAE1D,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,oDAAoD;IACpD,IAAI,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACnC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,sCAAsC;IACtC,MAAM,OAAO,GAAG,UAAU,CAAC,+BAA+B,CAAC;QAC3C,UAAU,CAAC,2BAA2B,CAAC,CAAC;IAExD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,uCAAuC;QACvC,SAAS,CAAC,MAAM,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,uDAAuD;QACvD,kBAAkB;QAClB,SAAS,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,gCAAgC,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAEvF,oBAAoB;QACpB,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1E,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,MAAM,GAAG,GAAG,wBAAwB,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IACjD,aAAa,CAAC,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7C,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,kBAAkB,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACtE,IAAI,CAAC;QAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAE/C,+EAA+E;IAC/E,SAAS,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAEtE,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Migration 013: Generate GRAFANA_PASSWORD for deterministic Grafana auth.
3
+ *
4
+ * The BootProvisioner (Elixir) uses GRAFANA_PASSWORD for basic auth to push
5
+ * dashboards to Grafana. Both the web container and grafana container read
6
+ * this from .env. If it's missing, dashboard provisioning fails.
7
+ *
8
+ * This migration:
9
+ * 1. Generates a random 32-char hex password
10
+ * 2. Writes GRAFANA_PASSWORD=<password> to .env
11
+ * 3. Removes stale GRAFANA_TOKEN if present
12
+ * 4. Resets Grafana admin password via grafana-cli (for existing volumes)
13
+ */
14
+ export declare function migrateGrafanaPassword(): Promise<boolean>;
15
+ //# sourceMappingURL=migration-013-grafana-password.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-013-grafana-password.d.ts","sourceRoot":"","sources":["../../src/lib/migration-013-grafana-password.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAgBH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC,CAoE/D"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Migration 013: Generate GRAFANA_PASSWORD for deterministic Grafana auth.
3
+ *
4
+ * The BootProvisioner (Elixir) uses GRAFANA_PASSWORD for basic auth to push
5
+ * dashboards to Grafana. Both the web container and grafana container read
6
+ * this from .env. If it's missing, dashboard provisioning fails.
7
+ *
8
+ * This migration:
9
+ * 1. Generates a random 32-char hex password
10
+ * 2. Writes GRAFANA_PASSWORD=<password> to .env
11
+ * 3. Removes stale GRAFANA_TOKEN if present
12
+ * 4. Resets Grafana admin password via grafana-cli (for existing volumes)
13
+ */
14
+ import { existsSync, readFileSync } from 'node:fs';
15
+ import { randomBytes } from 'node:crypto';
16
+ import { spawnSync } from 'node:child_process';
17
+ import { homedir } from 'node:os';
18
+ import { join } from 'node:path';
19
+ function getInstallDir() {
20
+ const known = ['/home/calltelemetry', '/opt/calltelemetry'];
21
+ for (const p of known) {
22
+ if (existsSync(join(p, 'docker-compose.yml')))
23
+ return p;
24
+ }
25
+ return homedir();
26
+ }
27
+ export async function migrateGrafanaPassword() {
28
+ const installDir = getInstallDir();
29
+ const envFile = join(installDir, '.env');
30
+ // If GRAFANA_PASSWORD is already set, nothing to do
31
+ if (existsSync(envFile)) {
32
+ const content = readFileSync(envFile, 'utf-8');
33
+ if (content.includes('GRAFANA_PASSWORD=')) {
34
+ return false; // Already configured
35
+ }
36
+ }
37
+ // Generate random password
38
+ const password = randomBytes(16).toString('hex');
39
+ // Build .env block
40
+ const block = '\n# Grafana auth password (auto-generated by migration 013)\n' +
41
+ `GRAFANA_PASSWORD=${password}\n`;
42
+ const tmp = `/tmp/ct-grafana-pw-${Date.now()}`;
43
+ require('node:fs').writeFileSync(tmp, block);
44
+ // Append to .env
45
+ const appendResult = spawnSync('sudo', ['bash', '-c', `cat ${tmp} >> ${envFile}`], {
46
+ stdio: 'pipe',
47
+ });
48
+ try {
49
+ require('node:fs').unlinkSync(tmp);
50
+ }
51
+ catch {
52
+ /* ignore */
53
+ }
54
+ if (appendResult.status !== 0) {
55
+ throw new Error(`Failed to write GRAFANA_PASSWORD to ${envFile}`);
56
+ }
57
+ // Remove stale GRAFANA_TOKEN lines from .env (replaced by GRAFANA_PASSWORD)
58
+ if (existsSync(envFile)) {
59
+ const content = readFileSync(envFile, 'utf-8');
60
+ if (content.includes('GRAFANA_TOKEN=')) {
61
+ spawnSync('sudo', ['sed', '-i', '/^GRAFANA_TOKEN=/d', envFile], { stdio: 'pipe' });
62
+ spawnSync('sudo', ['sed', '-i', '/^# .*GRAFANA_TOKEN/d', envFile], { stdio: 'pipe' });
63
+ }
64
+ }
65
+ // Reset Grafana admin password for existing volumes.
66
+ // grafana-cli stores the new password in the SQLite DB, overriding whatever
67
+ // was set previously (even if changed via the UI).
68
+ const resetResult = spawnSync('docker', ['compose', 'exec', '-T', 'grafana', 'grafana-cli', 'admin', 'reset-admin-password', password], { cwd: installDir, stdio: 'pipe', timeout: 30_000 });
69
+ if (resetResult.status !== 0) {
70
+ // Grafana container might not be running — that's OK.
71
+ // On next start, GF_SECURITY_ADMIN_PASSWORD from .env will be used
72
+ // (only applies on first start of a fresh volume, but that covers new installs).
73
+ const stderr = resetResult.stderr?.toString() ?? '';
74
+ if (!stderr.includes('No such container') && !stderr.includes('not running')) {
75
+ console.warn(`[migration-013] grafana-cli reset failed (non-fatal): ${stderr.slice(0, 200)}`);
76
+ }
77
+ }
78
+ return true;
79
+ }
80
+ //# sourceMappingURL=migration-013-grafana-password.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-013-grafana-password.js","sourceRoot":"","sources":["../../src/lib/migration-013-grafana-password.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Migration 014: Remove firewall-backend from daemon.json on Docker < 29.
3
+ *
4
+ * The `firewall-backend` option was added in Docker 29.0.0. Appliances that
5
+ * were provisioned with a daemon.json written for Docker 29 but then received
6
+ * Docker 28.x (e.g. dnf resolving to an older version) will fail to start
7
+ * dockerd with:
8
+ *
9
+ * unable to configure the Docker daemon with file /etc/docker/daemon.json:
10
+ * the following directives don't match any configuration option: firewall-backend
11
+ *
12
+ * This migration detects that condition and removes the unsupported key so
13
+ * Docker can start. The option is left in place on Docker 29+ where it is valid.
14
+ */
15
+ export declare function migrateDockerFirewallBackend(): Promise<boolean>;
16
+ //# sourceMappingURL=migration-014-docker-firewall-backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-014-docker-firewall-backend.d.ts","sourceRoot":"","sources":["../../src/lib/migration-014-docker-firewall-backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAkBH,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,OAAO,CAAC,CAgDrE"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Migration 014: Remove firewall-backend from daemon.json on Docker < 29.
3
+ *
4
+ * The `firewall-backend` option was added in Docker 29.0.0. Appliances that
5
+ * were provisioned with a daemon.json written for Docker 29 but then received
6
+ * Docker 28.x (e.g. dnf resolving to an older version) will fail to start
7
+ * dockerd with:
8
+ *
9
+ * unable to configure the Docker daemon with file /etc/docker/daemon.json:
10
+ * the following directives don't match any configuration option: firewall-backend
11
+ *
12
+ * This migration detects that condition and removes the unsupported key so
13
+ * Docker can start. The option is left in place on Docker 29+ where it is valid.
14
+ */
15
+ import { existsSync, readFileSync, writeFileSync, unlinkSync } from 'node:fs';
16
+ import { spawnSync } from 'node:child_process';
17
+ const DAEMON_JSON = '/etc/docker/daemon.json';
18
+ function getDockerMajorVersion() {
19
+ const result = spawnSync('docker', ['version', '--format', '{{.Server.Version}}'], {
20
+ stdio: 'pipe',
21
+ timeout: 10_000,
22
+ });
23
+ if (result.status !== 0)
24
+ return 0;
25
+ const version = result.stdout?.toString().trim() ?? '';
26
+ const major = parseInt(version.split('.')[0] ?? '0', 10);
27
+ return isNaN(major) ? 0 : major;
28
+ }
29
+ export async function migrateDockerFirewallBackend() {
30
+ // Only relevant if daemon.json exists and contains firewall-backend
31
+ if (!existsSync(DAEMON_JSON))
32
+ return false;
33
+ const raw = readFileSync(DAEMON_JSON, 'utf-8');
34
+ if (!raw.includes('"firewall-backend"'))
35
+ return false;
36
+ // firewall-backend is valid on Docker 29+ — leave it alone
37
+ const major = getDockerMajorVersion();
38
+ if (major >= 29)
39
+ return false;
40
+ // Docker < 29 (or version undetectable): remove the key
41
+ let config;
42
+ try {
43
+ config = JSON.parse(raw);
44
+ }
45
+ catch {
46
+ throw new Error(`Cannot parse ${DAEMON_JSON}: invalid JSON`);
47
+ }
48
+ delete config['firewall-backend'];
49
+ const updated = JSON.stringify(config, null, 2) + '\n';
50
+ const tmp = `/tmp/ct-daemon-json-${Date.now()}`;
51
+ writeFileSync(tmp, updated, 'utf-8');
52
+ const result = spawnSync('sudo', ['cp', tmp, DAEMON_JSON], { stdio: 'pipe' });
53
+ try {
54
+ unlinkSync(tmp);
55
+ }
56
+ catch {
57
+ /* ignore */
58
+ }
59
+ if (result.status !== 0) {
60
+ throw new Error(`Failed to write ${DAEMON_JSON}: ${result.stderr?.toString().trim()}`);
61
+ }
62
+ // Restart Docker so the corrected config takes effect
63
+ const restart = spawnSync('sudo', ['systemctl', 'restart', 'docker'], {
64
+ stdio: 'pipe',
65
+ timeout: 30_000,
66
+ });
67
+ if (restart.status !== 0) {
68
+ throw new Error(`daemon.json fixed but Docker restart failed: ${restart.stderr?.toString().trim()}`);
69
+ }
70
+ return true;
71
+ }
72
+ //# sourceMappingURL=migration-014-docker-firewall-backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-014-docker-firewall-backend.js","sourceRoot":"","sources":["../../src/lib/migration-014-docker-firewall-backend.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,14 @@ export declare function runPendingMigrations(log?: (msg: string) => void): Promi
23
23
  ran: string[];
24
24
  skipped: string[];
25
25
  }>;
26
+ /**
27
+ * Run a single migration by ID, regardless of whether it has already completed.
28
+ * Useful for re-running a migration that errored or needs to be re-applied.
29
+ */
30
+ export declare function runSingleMigration(id: string, log?: (msg: string) => void): Promise<{
31
+ result: 'applied' | 'skipped' | 'not_found';
32
+ error?: string;
33
+ }>;
26
34
  export declare function getMigrationStatus(): Array<{
27
35
  id: string;
28
36
  description: string;
@@ -1 +1 @@
1
- {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/lib/migrations.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7B;AAED,UAAU,eAAe;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC;CAC/B;AAED,UAAU,WAAW;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,cAAc;IACtB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC3C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACrC;AAmBD,eAAO,MAAM,UAAU,EAAE,SAAS,EA6DjC,CAAC;AAEF,wBAAgB,kBAAkB,IAAI,cAAc,CAcnD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAG9D;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAGxD;AAED,wBAAsB,oBAAoB,CACxC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAC1B,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA4C/C;AAED,wBAAgB,kBAAkB,IAAI,KAAK,CAAC;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IACpD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAgCD"}
1
+ {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/lib/migrations.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7B;AAED,UAAU,eAAe;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC;CAC/B;AAED,UAAU,WAAW;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,cAAc;IACtB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC3C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACrC;AAqBD,eAAO,MAAM,UAAU,EAAE,SAAS,EAuEjC,CAAC;AAEF,wBAAgB,kBAAkB,IAAI,cAAc,CAcnD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAG9D;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAGxD;AAED,wBAAsB,oBAAoB,CACxC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAC1B,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA4C/C;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,MAAM,EACV,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAC1B,OAAO,CAAC;IAAE,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAwC1E;AAED,wBAAgB,kBAAkB,IAAI,KAAK,CAAC;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IACpD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAgCD"}
@@ -22,6 +22,8 @@ import { migrateBindMountFiles } from './migration-009-bind-mount-files.js';
22
22
  import { migrateDockerMemoryLimit } from './migration-011-docker-memory-limit.js';
23
23
  import { migrateJtapiState } from './migration-010-jtapi-state.js';
24
24
  import { migrateDbPoolSizes } from './migration-012-db-pool-sizes.js';
25
+ import { migrateGrafanaPassword } from './migration-013-grafana-password.js';
26
+ import { migrateDockerFirewallBackend } from './migration-014-docker-firewall-backend.js';
25
27
  export const MIGRATIONS = [
26
28
  {
27
29
  id: '001_cgnat_docker_subnets',
@@ -83,6 +85,16 @@ export const MIGRATIONS = [
83
85
  description: 'Set small DB pool profile (44 connections instead of 95)',
84
86
  run: migrateDbPoolSizes,
85
87
  },
88
+ {
89
+ id: '013_grafana_password',
90
+ description: 'Generate GRAFANA_PASSWORD for deterministic Grafana auth',
91
+ run: migrateGrafanaPassword,
92
+ },
93
+ {
94
+ id: '014_docker_firewall_backend',
95
+ description: 'Remove firewall-backend from daemon.json on Docker < 29 (prevents dockerd startup failure)',
96
+ run: migrateDockerFirewallBackend,
97
+ },
86
98
  ];
87
99
  export function loadMigrationState() {
88
100
  try {
@@ -147,6 +159,46 @@ export async function runPendingMigrations(log) {
147
159
  }
148
160
  return { ran, skipped };
149
161
  }
162
+ /**
163
+ * Run a single migration by ID, regardless of whether it has already completed.
164
+ * Useful for re-running a migration that errored or needs to be re-applied.
165
+ */
166
+ export async function runSingleMigration(id, log) {
167
+ const migration = MIGRATIONS.find((m) => m.id === id);
168
+ if (!migration) {
169
+ return { result: 'not_found' };
170
+ }
171
+ const state = loadMigrationState();
172
+ log?.(`Running migration: ${migration.description}`);
173
+ try {
174
+ const changed = await migration.run();
175
+ state.completed[migration.id] = {
176
+ at: new Date().toISOString(),
177
+ result: changed ? 'applied' : 'skipped',
178
+ };
179
+ // Clear any previous error for this migration
180
+ delete state.errors[migration.id];
181
+ saveMigrationState(state);
182
+ if (changed) {
183
+ log?.(` Applied: ${migration.id}`);
184
+ return { result: 'applied' };
185
+ }
186
+ else {
187
+ log?.(` Skipped (already correct): ${migration.id}`);
188
+ return { result: 'skipped' };
189
+ }
190
+ }
191
+ catch (err) {
192
+ const message = err instanceof Error ? err.message : String(err);
193
+ state.errors[migration.id] = {
194
+ at: new Date().toISOString(),
195
+ error: message,
196
+ };
197
+ saveMigrationState(state);
198
+ log?.(` Error: ${migration.id} — ${message}`);
199
+ return { result: 'applied', error: message };
200
+ }
201
+ }
150
202
  export function getMigrationStatus() {
151
203
  const state = loadMigrationState();
152
204
  return MIGRATIONS.map((m) => {