@zincapp/znvault-cli 2.1.2 → 2.3.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 (184) hide show
  1. package/README.md +84 -0
  2. package/dist/commands/agent.d.ts +1 -1
  3. package/dist/commands/agent.d.ts.map +1 -1
  4. package/dist/commands/agent.js +71 -71
  5. package/dist/commands/agent.js.map +1 -1
  6. package/dist/commands/apikey.d.ts +1 -1
  7. package/dist/commands/apikey.d.ts.map +1 -1
  8. package/dist/commands/apikey.js +47 -85
  9. package/dist/commands/apikey.js.map +1 -1
  10. package/dist/commands/audit.d.ts +1 -1
  11. package/dist/commands/audit.d.ts.map +1 -1
  12. package/dist/commands/audit.js +2 -2
  13. package/dist/commands/audit.js.map +1 -1
  14. package/dist/commands/auth.d.ts +1 -1
  15. package/dist/commands/auth.d.ts.map +1 -1
  16. package/dist/commands/auth.js +82 -15
  17. package/dist/commands/auth.js.map +1 -1
  18. package/dist/commands/backup.d.ts +3 -0
  19. package/dist/commands/backup.d.ts.map +1 -0
  20. package/dist/commands/backup.js +646 -0
  21. package/dist/commands/backup.js.map +1 -0
  22. package/dist/commands/cert.d.ts +1 -1
  23. package/dist/commands/cert.d.ts.map +1 -1
  24. package/dist/commands/cert.js +2 -2
  25. package/dist/commands/cert.js.map +1 -1
  26. package/dist/commands/cluster.d.ts +1 -1
  27. package/dist/commands/cluster.d.ts.map +1 -1
  28. package/dist/commands/cluster.js +2 -2
  29. package/dist/commands/cluster.js.map +1 -1
  30. package/dist/commands/emergency.d.ts +1 -1
  31. package/dist/commands/emergency.d.ts.map +1 -1
  32. package/dist/commands/emergency.js +19 -18
  33. package/dist/commands/emergency.js.map +1 -1
  34. package/dist/commands/health.d.ts +1 -1
  35. package/dist/commands/health.d.ts.map +1 -1
  36. package/dist/commands/health.js +75 -77
  37. package/dist/commands/health.js.map +1 -1
  38. package/dist/commands/kms.d.ts +3 -0
  39. package/dist/commands/kms.d.ts.map +1 -0
  40. package/dist/commands/kms.js +536 -0
  41. package/dist/commands/kms.js.map +1 -0
  42. package/dist/commands/lockdown.d.ts +1 -1
  43. package/dist/commands/lockdown.d.ts.map +1 -1
  44. package/dist/commands/lockdown.js +6 -6
  45. package/dist/commands/lockdown.js.map +1 -1
  46. package/dist/commands/notification.d.ts +3 -0
  47. package/dist/commands/notification.d.ts.map +1 -0
  48. package/dist/commands/notification.js +394 -0
  49. package/dist/commands/notification.js.map +1 -0
  50. package/dist/commands/permissions.d.ts +1 -1
  51. package/dist/commands/permissions.d.ts.map +1 -1
  52. package/dist/commands/permissions.js +7 -7
  53. package/dist/commands/permissions.js.map +1 -1
  54. package/dist/commands/policy.d.ts +1 -1
  55. package/dist/commands/policy.d.ts.map +1 -1
  56. package/dist/commands/policy.js +14 -14
  57. package/dist/commands/policy.js.map +1 -1
  58. package/dist/commands/role.d.ts +3 -0
  59. package/dist/commands/role.d.ts.map +1 -0
  60. package/dist/commands/role.js +400 -0
  61. package/dist/commands/role.js.map +1 -0
  62. package/dist/commands/secret.d.ts +3 -0
  63. package/dist/commands/secret.d.ts.map +1 -0
  64. package/dist/commands/secret.js +694 -0
  65. package/dist/commands/secret.js.map +1 -0
  66. package/dist/commands/self-update.d.ts +8 -0
  67. package/dist/commands/self-update.d.ts.map +1 -0
  68. package/dist/commands/self-update.js +114 -0
  69. package/dist/commands/self-update.js.map +1 -0
  70. package/dist/commands/superadmin.d.ts +1 -1
  71. package/dist/commands/superadmin.d.ts.map +1 -1
  72. package/dist/commands/superadmin.js +3 -3
  73. package/dist/commands/superadmin.js.map +1 -1
  74. package/dist/commands/tenant.d.ts +1 -1
  75. package/dist/commands/tenant.d.ts.map +1 -1
  76. package/dist/commands/tenant.js +16 -18
  77. package/dist/commands/tenant.js.map +1 -1
  78. package/dist/commands/tui.d.ts +3 -0
  79. package/dist/commands/tui.d.ts.map +1 -0
  80. package/dist/commands/tui.js +66 -0
  81. package/dist/commands/tui.js.map +1 -0
  82. package/dist/commands/update.d.ts +1 -1
  83. package/dist/commands/update.d.ts.map +1 -1
  84. package/dist/commands/update.js +8 -8
  85. package/dist/commands/update.js.map +1 -1
  86. package/dist/commands/user.d.ts +1 -1
  87. package/dist/commands/user.d.ts.map +1 -1
  88. package/dist/commands/user.js +7 -7
  89. package/dist/commands/user.js.map +1 -1
  90. package/dist/index.js +38 -4
  91. package/dist/index.js.map +1 -1
  92. package/dist/lib/cli-update.d.ts +43 -0
  93. package/dist/lib/cli-update.d.ts.map +1 -0
  94. package/dist/lib/cli-update.js +257 -0
  95. package/dist/lib/cli-update.js.map +1 -0
  96. package/dist/lib/client.d.ts +48 -61
  97. package/dist/lib/client.d.ts.map +1 -1
  98. package/dist/lib/client.js +57 -30
  99. package/dist/lib/client.js.map +1 -1
  100. package/dist/lib/config.d.ts.map +1 -1
  101. package/dist/lib/config.js +42 -37
  102. package/dist/lib/config.js.map +1 -1
  103. package/dist/lib/db.d.ts.map +1 -1
  104. package/dist/lib/db.js +23 -23
  105. package/dist/lib/db.js.map +1 -1
  106. package/dist/lib/local.d.ts.map +1 -1
  107. package/dist/lib/local.js +9 -9
  108. package/dist/lib/local.js.map +1 -1
  109. package/dist/lib/mode.d.ts +1 -1
  110. package/dist/lib/mode.d.ts.map +1 -1
  111. package/dist/lib/mode.js +4 -7
  112. package/dist/lib/mode.js.map +1 -1
  113. package/dist/lib/output-mode.d.ts +31 -0
  114. package/dist/lib/output-mode.d.ts.map +1 -0
  115. package/dist/lib/output-mode.js +81 -0
  116. package/dist/lib/output-mode.js.map +1 -0
  117. package/dist/lib/output.d.ts +60 -5
  118. package/dist/lib/output.d.ts.map +1 -1
  119. package/dist/lib/output.js +291 -30
  120. package/dist/lib/output.js.map +1 -1
  121. package/dist/lib/prompts.d.ts +2 -2
  122. package/dist/lib/prompts.d.ts.map +1 -1
  123. package/dist/lib/prompts.js.map +1 -1
  124. package/dist/lib/visual.d.ts +71 -0
  125. package/dist/lib/visual.d.ts.map +1 -0
  126. package/dist/lib/visual.js +266 -0
  127. package/dist/lib/visual.js.map +1 -0
  128. package/dist/services/auto-update-daemon.d.ts.map +1 -1
  129. package/dist/services/auto-update-daemon.js +39 -19
  130. package/dist/services/auto-update-daemon.js.map +1 -1
  131. package/dist/services/signature-verifier.d.ts +0 -1
  132. package/dist/services/signature-verifier.d.ts.map +1 -1
  133. package/dist/services/signature-verifier.js +4 -8
  134. package/dist/services/signature-verifier.js.map +1 -1
  135. package/dist/services/update-checker.d.ts.map +1 -1
  136. package/dist/services/update-checker.js +3 -3
  137. package/dist/services/update-checker.js.map +1 -1
  138. package/dist/services/update-installer.d.ts.map +1 -1
  139. package/dist/services/update-installer.js +5 -5
  140. package/dist/services/update-installer.js.map +1 -1
  141. package/dist/tui/App.d.ts +9 -0
  142. package/dist/tui/App.d.ts.map +1 -0
  143. package/dist/tui/App.js +63 -0
  144. package/dist/tui/App.js.map +1 -0
  145. package/dist/tui/ProfileManager.d.ts +8 -0
  146. package/dist/tui/ProfileManager.d.ts.map +1 -0
  147. package/dist/tui/ProfileManager.js +226 -0
  148. package/dist/tui/ProfileManager.js.map +1 -0
  149. package/dist/tui/components/Header.d.ts +9 -0
  150. package/dist/tui/components/Header.d.ts.map +1 -0
  151. package/dist/tui/components/Header.js +9 -0
  152. package/dist/tui/components/Header.js.map +1 -0
  153. package/dist/tui/components/List.d.ts +61 -0
  154. package/dist/tui/components/List.d.ts.map +1 -0
  155. package/dist/tui/components/List.js +85 -0
  156. package/dist/tui/components/List.js.map +1 -0
  157. package/dist/tui/components/ProfileList.d.ts +25 -0
  158. package/dist/tui/components/ProfileList.d.ts.map +1 -0
  159. package/dist/tui/components/ProfileList.js +28 -0
  160. package/dist/tui/components/ProfileList.js.map +1 -0
  161. package/dist/tui/components/StatusCard.d.ts +29 -0
  162. package/dist/tui/components/StatusCard.d.ts.map +1 -0
  163. package/dist/tui/components/StatusCard.js +46 -0
  164. package/dist/tui/components/StatusCard.js.map +1 -0
  165. package/dist/tui/components/Table.d.ts +29 -0
  166. package/dist/tui/components/Table.d.ts.map +1 -0
  167. package/dist/tui/components/Table.js +131 -0
  168. package/dist/tui/components/Table.js.map +1 -0
  169. package/dist/tui/components/UpdateBanner.d.ts +9 -0
  170. package/dist/tui/components/UpdateBanner.d.ts.map +1 -0
  171. package/dist/tui/components/UpdateBanner.js +6 -0
  172. package/dist/tui/components/UpdateBanner.js.map +1 -0
  173. package/dist/tui/hooks/useApi.d.ts +75 -0
  174. package/dist/tui/hooks/useApi.d.ts.map +1 -0
  175. package/dist/tui/hooks/useApi.js +79 -0
  176. package/dist/tui/hooks/useApi.js.map +1 -0
  177. package/dist/tui/screens/Dashboard.d.ts +9 -0
  178. package/dist/tui/screens/Dashboard.d.ts.map +1 -0
  179. package/dist/tui/screens/Dashboard.js +67 -0
  180. package/dist/tui/screens/Dashboard.js.map +1 -0
  181. package/dist/types/index.d.ts +5 -5
  182. package/dist/types/index.d.ts.map +1 -1
  183. package/dist/utils/platform.js +1 -1
  184. package/package.json +30 -13
@@ -0,0 +1 @@
1
+ {"version":3,"file":"List.js","sourceRoot":"","sources":["../../../src/tui/components/List.tsx"],"names":[],"mappings":";AAQA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAkBhC;;GAEG;AACH,SAAS,WAAW,CAAC,KAAmD;IACtE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9B,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,cAAc,EAAE,CAAC;IAChC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,KAAc,EAAE,aAAsB;IAC3D,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC;IAExC,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IACjC,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAClC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACjG,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACzF,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACtG,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,EACnB,KAAK,EACL,KAAK,EACL,QAAQ,GAAG,KAAK,EAChB,WAAW,GAAG,MAAM,EACpB,UAAU,GAAG,MAAM,EACnB,UAAU,GACA;IACV,yCAAyC;IACzC,MAAM,cAAc,GAAG,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;IAE3F,MAAM,OAAO,GAAG,CACd,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,YACxB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAC1B,MAAC,GAAG,IAAa,WAAW,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC,aAC5C,KAAC,GAAG,IAAC,KAAK,EAAE,cAAc,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,YAC7C,MAAC,IAAI,IAAC,KAAK,EAAE,UAAU,aAAG,IAAI,CAAC,KAAK,SAAS,GACzC,EACN,KAAC,IAAI,IAAC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,YAC/C,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GACnB,KANC,KAAK,CAOT,CACP,CAAC,GACE,CACP,CAAC;IAEF,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CACL,MAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,OAAO,EACnB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,CAAC,EACX,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE,CAAC,aAET,KAAK,IAAI,CACR,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,OAAO,YAAE,KAAK,GAAQ,GACnC,CACP,EACA,OAAO,IACJ,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,OAAO,EAAE,CAAC,aACnC,KAAK,IAAI,CACR,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,OAAO,YAAE,KAAK,GAAQ,GACnC,CACP,EACA,OAAO,IACJ,CACP,CAAC;AACJ,CAAC;AAWD,MAAM,UAAU,eAAe,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAwB;IAC7E,MAAM,KAAK,GAA2B;QACpC,OAAO,EAAE,GAAG;QACZ,OAAO,EAAE,GAAG;QACZ,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,GAAG;KACb,CAAC;IAEF,MAAM,MAAM,GAA2B;QACrC,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,QAAQ;QACjB,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,MAAM;KAChB,CAAC;IAEF,OAAO,CACL,MAAC,GAAG,IAAC,GAAG,EAAE,CAAC,aACT,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,YAAG,KAAK,CAAC,MAAM,CAAC,GAAQ,EACnD,KAAC,IAAI,cAAE,KAAK,GAAQ,EACnB,MAAM,IAAI,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,kBAAG,MAAM,SAAS,IAC3C,CACP,CAAC;AACJ,CAAC;AAaD,MAAM,UAAU,WAAW,CAAC,EAC1B,KAAK,EACL,GAAG,GAAG,GAAG,EACT,KAAK,GAAG,EAAE,EACV,cAAc,GAAG,IAAI,EACrB,KAAK,GACY;IACjB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IAE7B,4BAA4B;IAC5B,IAAI,KAAK,GAAG,OAAO,CAAC;IACpB,IAAI,UAAU,GAAG,EAAE;QAAE,KAAK,GAAG,KAAK,CAAC;SAC9B,IAAI,UAAU,GAAG,EAAE;QAAE,KAAK,GAAG,QAAQ,CAAC;IAE3C,OAAO,CACL,MAAC,GAAG,IAAC,GAAG,EAAE,CAAC,aACR,KAAK,IAAI,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,KAAK,GAAQ,EAC3C,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,YAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAQ,EAC/C,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAQ,EAC5C,cAAc,IAAI,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,aAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,IACjE,CACP,CAAC;AACJ,CAAC;AAWD,MAAM,UAAU,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,OAAO,EAAE,OAAO,EAAc;IAClE,OAAO,CACL,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,kBACxC,IAAI,SACD,CACR,CAAC;AACJ,CAAC;AAYD,MAAM,UAAU,IAAI,CAAC,EACnB,KAAK,EACL,QAAQ,EACR,WAAW,GAAG,MAAM,EACpB,KAAK,GACK;IACV,OAAO,CACL,MAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,OAAO,EACnB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,CAAC,EACX,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,KAAK,aAEZ,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,EAAE,cAAc,EAAC,QAAQ,YAC3C,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,OAAO,YAAE,KAAK,GAAQ,GACnC,EACL,QAAQ,IACL,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Interactive Profile List Component
3
+ *
4
+ * Renders a navigable list of profiles with keyboard controls.
5
+ */
6
+ import React from 'react';
7
+ export interface ProfileItem {
8
+ name: string;
9
+ url: string;
10
+ active: boolean;
11
+ hasCredentials: boolean;
12
+ hasApiKey: boolean;
13
+ username?: string;
14
+ }
15
+ export interface ProfileListProps {
16
+ profiles: ProfileItem[];
17
+ selectedIndex: number;
18
+ onSelect?: (profile: ProfileItem) => void;
19
+ }
20
+ export declare function ProfileList({ profiles, selectedIndex, }: ProfileListProps): React.ReactElement;
21
+ export interface ProfileDetailProps {
22
+ profile: ProfileItem | null;
23
+ }
24
+ export declare function ProfileDetail({ profile }: ProfileDetailProps): React.ReactElement;
25
+ //# sourceMappingURL=ProfileList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProfileList.d.ts","sourceRoot":"","sources":["../../../src/tui/components/ProfileList.tsx"],"names":[],"mappings":"AACA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;CAC3C;AAYD,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,aAAa,GACd,EAAE,gBAAgB,GAAG,KAAK,CAAC,YAAY,CAuDvC;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;CAC7B;AAED,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,EAAE,kBAAkB,GAAG,KAAK,CAAC,YAAY,CA0DjF"}
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ function getAuthBadge(profile) {
4
+ if (profile.hasApiKey) {
5
+ return _jsx(Text, { color: "magenta", children: " [API key]" });
6
+ }
7
+ if (profile.hasCredentials) {
8
+ return _jsx(Text, { color: "blue", children: " [JWT]" });
9
+ }
10
+ return _jsx(Text, { color: "gray", children: " [no auth]" });
11
+ }
12
+ export function ProfileList({ profiles, selectedIndex, }) {
13
+ if (profiles.length === 0) {
14
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Text, { color: "yellow", children: "No profiles configured" }), _jsx(Text, { color: "gray", children: "Press 'c' to create a new profile" })] }));
15
+ }
16
+ return (_jsx(Box, { flexDirection: "column", children: profiles.map((profile, index) => {
17
+ const isSelected = index === selectedIndex;
18
+ const isActive = profile.active;
19
+ return (_jsxs(Box, { paddingX: 1, children: [_jsx(Text, { color: isSelected ? 'cyan' : undefined, children: isSelected ? '>' : ' ' }), _jsx(Text, { color: "green", children: isActive ? ' *' : ' ' }), _jsx(Box, { width: 20, children: _jsxs(Text, { color: isSelected ? 'cyan' : isActive ? 'green' : undefined, bold: isSelected || isActive, children: [' ', profile.name] }) }), _jsx(Box, { width: 12, children: getAuthBadge(profile) }), _jsxs(Text, { color: "gray", children: [" ", profile.url] }), profile.username && (_jsxs(Text, { color: "gray", children: [" (", profile.username, ")"] }))] }, profile.name));
20
+ }) }));
21
+ }
22
+ export function ProfileDetail({ profile }) {
23
+ if (!profile) {
24
+ return (_jsx(Box, { flexDirection: "column", borderStyle: "round", borderColor: "gray", paddingX: 2, paddingY: 1, marginTop: 1, children: _jsx(Text, { color: "gray", children: "Select a profile to view details" }) }));
25
+ }
26
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: profile.active ? 'green' : 'gray', paddingX: 2, paddingY: 1, marginTop: 1, children: [_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { bold: true, color: "white", children: [profile.name, profile.active && _jsx(Text, { color: "green", children: " (active)" })] }) }), _jsxs(Box, { children: [_jsx(Box, { width: 12, children: _jsx(Text, { color: "gray", children: "URL:" }) }), _jsx(Text, { children: profile.url })] }), _jsxs(Box, { children: [_jsx(Box, { width: 12, children: _jsx(Text, { color: "gray", children: "Auth:" }) }), _jsx(Text, { color: profile.hasApiKey ? 'magenta' : profile.hasCredentials ? 'blue' : 'yellow', children: profile.hasApiKey ? 'API Key' : profile.hasCredentials ? 'JWT' : 'Not authenticated' })] }), profile.username && (_jsxs(Box, { children: [_jsx(Box, { width: 12, children: _jsx(Text, { color: "gray", children: "User:" }) }), _jsx(Text, { children: profile.username })] }))] }));
27
+ }
28
+ //# sourceMappingURL=ProfileList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProfileList.js","sourceRoot":"","sources":["../../../src/tui/components/ProfileList.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import React from 'react';
2
+ type StatusType = 'success' | 'warning' | 'error' | 'info' | 'loading';
3
+ interface StatusCardProps {
4
+ title: string;
5
+ items: Array<{
6
+ label: string;
7
+ value: string;
8
+ status?: StatusType;
9
+ }>;
10
+ width?: number;
11
+ }
12
+ export declare function StatusCard({ title, items, width }: StatusCardProps): React.ReactElement;
13
+ interface NodeStatusCardProps {
14
+ nodes: Array<{
15
+ id: string;
16
+ role: string;
17
+ status: string;
18
+ isLeader?: boolean;
19
+ }>;
20
+ }
21
+ export declare function NodeStatusCard({ nodes }: NodeStatusCardProps): React.ReactElement;
22
+ interface SecurityStatusProps {
23
+ mode: string;
24
+ threatLevel?: number;
25
+ reason?: string;
26
+ }
27
+ export declare function SecurityStatus({ mode, threatLevel, reason }: SecurityStatusProps): React.ReactElement;
28
+ export {};
29
+ //# sourceMappingURL=StatusCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusCard.d.ts","sourceRoot":"","sources":["../../../src/tui/components/StatusCard.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,KAAK,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AAEvE,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,UAAU,CAAC;KACrB,CAAC,CAAC;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAoBD,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,eAAe,GAAG,KAAK,CAAC,YAAY,CA4BvF;AAED,UAAU,mBAAmB;IAC3B,KAAK,EAAE,KAAK,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC,CAAC;CACJ;AAED,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,EAAE,mBAAmB,GAAG,KAAK,CAAC,YAAY,CAgCjF;AAED,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,WAAe,EAAE,MAAM,EAAE,EAAE,mBAAmB,GAAG,KAAK,CAAC,YAAY,CA8CzG"}
@@ -0,0 +1,46 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ function getStatusColor(status) {
4
+ switch (status) {
5
+ case 'success': return 'green';
6
+ case 'warning': return 'yellow';
7
+ case 'error': return 'red';
8
+ case 'info': return 'blue';
9
+ case 'loading': return 'gray';
10
+ default: return 'white';
11
+ }
12
+ }
13
+ function StatusIndicator({ status }) {
14
+ if (!status)
15
+ return _jsx(Text, { children: " " });
16
+ const color = getStatusColor(status);
17
+ return _jsx(Text, { color: color, children: "\u25CF" });
18
+ }
19
+ export function StatusCard({ title, items, width }) {
20
+ const maxLabelLength = Math.max(...items.map(i => i.label.length));
21
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "blue", paddingX: 1, width: width, children: [_jsx(Box, { justifyContent: "center", marginBottom: 1, children: _jsx(Text, { bold: true, color: "cyan", children: title }) }), items.map((item, index) => (_jsxs(Box, { justifyContent: "space-between", children: [_jsx(Text, { color: "gray", children: item.label.padEnd(maxLabelLength) }), _jsxs(Box, { children: [_jsx(StatusIndicator, { status: item.status }), _jsxs(Text, { color: item.status ? getStatusColor(item.status) : 'white', children: [' ', item.value] })] })] }, index)))] }));
22
+ }
23
+ export function NodeStatusCard({ nodes }) {
24
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "blue", paddingX: 1, children: [_jsx(Box, { justifyContent: "center", marginBottom: 1, children: _jsx(Text, { bold: true, color: "cyan", children: "CLUSTER NODES" }) }), nodes.map((node, index) => {
25
+ const statusColor = node.status === 'healthy' || node.status === 'ok'
26
+ ? 'green'
27
+ : node.status === 'warning'
28
+ ? 'yellow'
29
+ : 'red';
30
+ return (_jsxs(Box, { gap: 2, children: [_jsx(Text, { color: node.isLeader ? 'yellow' : 'gray', children: node.isLeader ? '★' : '○' }), _jsx(Text, { bold: true, children: node.id.padEnd(12) }), _jsx(Text, { color: "gray", children: node.role.padEnd(10) }), _jsxs(Text, { color: statusColor, children: ["\u25CF ", node.status.toUpperCase()] })] }, index));
31
+ })] }));
32
+ }
33
+ export function SecurityStatus({ mode, threatLevel = 0, reason }) {
34
+ const modeColor = mode === 'NORMAL'
35
+ ? 'green'
36
+ : mode === 'ALERT'
37
+ ? 'yellow'
38
+ : mode === 'RESTRICT'
39
+ ? 'yellow'
40
+ : 'red';
41
+ const barLength = 10;
42
+ const filledBars = Math.min(threatLevel, barLength);
43
+ const emptyBars = barLength - filledBars;
44
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: modeColor, paddingX: 1, children: [_jsx(Box, { justifyContent: "center", marginBottom: 1, children: _jsx(Text, { bold: true, color: "cyan", children: "SECURITY STATUS" }) }), _jsxs(Box, { justifyContent: "space-between", children: [_jsx(Text, { color: "gray", children: "Mode" }), _jsx(Text, { bold: true, color: modeColor, children: mode })] }), _jsxs(Box, { justifyContent: "space-between", children: [_jsx(Text, { color: "gray", children: "Threat Level" }), _jsxs(Box, { children: [_jsx(Text, { color: modeColor, children: '█'.repeat(filledBars) }), _jsx(Text, { color: "gray", children: '░'.repeat(emptyBars) }), _jsxs(Text, { color: "gray", children: [" ", threatLevel, "/10"] })] })] }), reason && (_jsxs(Box, { justifyContent: "space-between", children: [_jsx(Text, { color: "gray", children: "Reason" }), _jsx(Text, { color: "yellow", children: reason })] }))] }));
45
+ }
46
+ //# sourceMappingURL=StatusCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusCard.js","sourceRoot":"","sources":["../../../src/tui/components/StatusCard.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * TUI Table Component
3
+ *
4
+ * Beautiful table rendering with Ink for interactive terminals.
5
+ */
6
+ import React from 'react';
7
+ export interface TableColumn {
8
+ header: string;
9
+ key: string;
10
+ width?: number;
11
+ align?: 'left' | 'center' | 'right';
12
+ color?: string;
13
+ format?: (value: unknown) => string;
14
+ }
15
+ export interface TableProps {
16
+ columns: TableColumn[];
17
+ data: Array<Record<string, unknown>>;
18
+ title?: string;
19
+ borderColor?: string;
20
+ headerColor?: string;
21
+ maxRows?: number;
22
+ emptyMessage?: string;
23
+ }
24
+ export declare function Table({ columns, data, title, borderColor, headerColor, maxRows, emptyMessage, }: TableProps): React.ReactElement;
25
+ /**
26
+ * Simple table without borders for compact display
27
+ */
28
+ export declare function SimpleTable({ columns, data, maxRows, }: Omit<TableProps, 'borderColor' | 'title'>): React.ReactElement;
29
+ //# sourceMappingURL=Table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../../src/tui/components/Table.tsx"],"names":[],"mappings":"AACA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AA6FD,wBAAgB,KAAK,CAAC,EACpB,OAAO,EACP,IAAI,EACJ,KAAK,EACL,WAAoB,EACpB,WAAoB,EACpB,OAAO,EACP,YAAwB,GACzB,EAAE,UAAU,GAAG,KAAK,CAAC,YAAY,CAkGjC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,IAAI,EACJ,OAAO,GACR,EAAE,IAAI,CAAC,UAAU,EAAE,aAAa,GAAG,OAAO,CAAC,GAAG,KAAK,CAAC,YAAY,CAgChE"}
@@ -0,0 +1,131 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ // Path: znvault-cli/src/tui/components/Table.tsx
3
+ /**
4
+ * TUI Table Component
5
+ *
6
+ * Beautiful table rendering with Ink for interactive terminals.
7
+ */
8
+ import React from 'react';
9
+ import { Box, Text } from 'ink';
10
+ /**
11
+ * Format cell value for display
12
+ */
13
+ function formatCellValue(value, format) {
14
+ if (format) {
15
+ return format(value);
16
+ }
17
+ if (value === null || value === undefined) {
18
+ return '-';
19
+ }
20
+ if (typeof value === 'boolean') {
21
+ return value ? 'yes' : 'no';
22
+ }
23
+ if (typeof value === 'number') {
24
+ return value.toLocaleString();
25
+ }
26
+ if (Array.isArray(value)) {
27
+ return value.map(v => (typeof v === 'object' ? JSON.stringify(v) : String(v))).join(', ');
28
+ }
29
+ if (typeof value === 'object') {
30
+ return JSON.stringify(value);
31
+ }
32
+ if (typeof value === 'string') {
33
+ return value;
34
+ }
35
+ // For any other primitive types
36
+ return JSON.stringify(value);
37
+ }
38
+ /**
39
+ * Get color for cell based on value
40
+ */
41
+ function getCellColor(value, column) {
42
+ if (column.color) {
43
+ return column.color;
44
+ }
45
+ // Auto-color for boolean values
46
+ if (typeof value === 'boolean') {
47
+ return value ? 'green' : 'red';
48
+ }
49
+ // Auto-color for status-like strings
50
+ if (typeof value === 'string') {
51
+ const lower = value.toLowerCase();
52
+ if (['active', 'ok', 'healthy', 'normal', 'enabled', 'success', 'connected'].includes(lower)) {
53
+ return 'green';
54
+ }
55
+ if (['disabled', 'suspended', 'alert', 'warning', 'restrict', 'pending'].includes(lower)) {
56
+ return 'yellow';
57
+ }
58
+ if (['locked', 'error', 'lockdown', 'panic', 'failed', 'disconnected', 'expired'].includes(lower)) {
59
+ return 'red';
60
+ }
61
+ }
62
+ return undefined;
63
+ }
64
+ /**
65
+ * Truncate text to fit width
66
+ */
67
+ function truncate(text, width) {
68
+ if (text.length <= width) {
69
+ return text;
70
+ }
71
+ return text.slice(0, width - 1) + '…';
72
+ }
73
+ /**
74
+ * Pad text based on alignment
75
+ */
76
+ function padText(text, width, align = 'left') {
77
+ const truncated = truncate(text, width);
78
+ const padding = width - truncated.length;
79
+ if (padding <= 0)
80
+ return truncated;
81
+ switch (align) {
82
+ case 'right':
83
+ return ' '.repeat(padding) + truncated;
84
+ case 'center': {
85
+ const leftPad = Math.floor(padding / 2);
86
+ const rightPad = padding - leftPad;
87
+ return ' '.repeat(leftPad) + truncated + ' '.repeat(rightPad);
88
+ }
89
+ default:
90
+ return truncated + ' '.repeat(padding);
91
+ }
92
+ }
93
+ export function Table({ columns, data, title, borderColor = 'gray', headerColor = 'cyan', maxRows, emptyMessage = 'No data', }) {
94
+ // Calculate column widths
95
+ const colWidths = columns.map(col => {
96
+ if (col.width)
97
+ return col.width;
98
+ // Auto-calculate based on content
99
+ const headerLen = col.header.length;
100
+ const maxDataLen = data.reduce((max, row) => {
101
+ const val = formatCellValue(row[col.key], col.format);
102
+ return Math.max(max, val.length);
103
+ }, 0);
104
+ return Math.min(Math.max(headerLen, maxDataLen) + 2, 40);
105
+ });
106
+ const totalWidth = colWidths.reduce((sum, w) => sum + w, 0) + columns.length + 1;
107
+ // Render horizontal border
108
+ const renderBorder = (char, left, mid, right) => (_jsxs(Text, { color: borderColor, children: [left, colWidths.map((w, i) => char.repeat(w) + (i < colWidths.length - 1 ? mid : '')).join(''), right] }));
109
+ const displayData = maxRows !== undefined && maxRows > 0 ? data.slice(0, maxRows) : data;
110
+ const remainingCount = maxRows !== undefined ? data.length - maxRows : 0;
111
+ const hasMore = remainingCount > 0;
112
+ return (_jsxs(Box, { flexDirection: "column", marginY: 1, children: [title && (_jsx(Box, { marginBottom: 1, children: _jsx(Text, { bold: true, color: "white", children: title }) })), renderBorder('─', '┌', '┬', '┐'), _jsxs(Box, { children: [_jsx(Text, { color: borderColor, children: "\u2502" }), columns.map((col, i) => (_jsxs(React.Fragment, { children: [_jsx(Text, { bold: true, color: headerColor, children: padText(col.header, colWidths[i], col.align) }), _jsx(Text, { color: borderColor, children: "\u2502" })] }, col.key)))] }), renderBorder('─', '├', '┼', '┤'), displayData.length === 0 ? (_jsxs(Box, { children: [_jsx(Text, { color: borderColor, children: "\u2502" }), _jsx(Text, { color: "gray", children: padText(emptyMessage, totalWidth - 2, 'center') }), _jsx(Text, { color: borderColor, children: "\u2502" })] })) : (displayData.map((row, rowIndex) => (_jsxs(Box, { children: [_jsx(Text, { color: borderColor, children: "\u2502" }), columns.map((col, colIndex) => {
113
+ const value = row[col.key];
114
+ const formatted = formatCellValue(value, col.format);
115
+ const color = getCellColor(value, col);
116
+ return (_jsxs(React.Fragment, { children: [_jsx(Text, { color: color, children: padText(formatted, colWidths[colIndex], col.align) }), _jsx(Text, { color: borderColor, children: "\u2502" })] }, col.key));
117
+ })] }, rowIndex)))), renderBorder('─', '└', '┴', '┘'), hasMore && (_jsxs(Text, { color: "gray", dimColor: true, children: ["... and ", remainingCount, " more"] }))] }));
118
+ }
119
+ /**
120
+ * Simple table without borders for compact display
121
+ */
122
+ export function SimpleTable({ columns, data, maxRows, }) {
123
+ const displayData = maxRows ? data.slice(0, maxRows) : data;
124
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { gap: 2, children: columns.map(col => (_jsx(Text, { bold: true, color: "cyan", children: col.header }, col.key))) }), displayData.map((row, i) => (_jsx(Box, { gap: 2, children: columns.map(col => {
125
+ const value = row[col.key];
126
+ const formatted = formatCellValue(value, col.format);
127
+ const color = getCellColor(value, col);
128
+ return (_jsx(Text, { color: color, children: formatted }, col.key));
129
+ }) }, i)))] }));
130
+ }
131
+ //# sourceMappingURL=Table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Table.js","sourceRoot":"","sources":["../../../src/tui/components/Table.tsx"],"names":[],"mappings":";AAAA,iDAAiD;AACjD;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAqBhC;;GAEG;AACH,SAAS,eAAe,CAAC,KAAc,EAAE,MAA+B;IACtE,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9B,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,cAAc,EAAE,CAAC;IAChC,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5F,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,gCAAgC;IAChC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,KAAc,EAAE,MAAmB;IACvD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,gCAAgC;IAChC,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IACjC,CAAC;IAED,qCAAqC;IACrC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAClC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7F,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACzF,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAClG,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,QAAQ,CAAC,IAAY,EAAE,KAAa;IAC3C,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,SAAS,OAAO,CAAC,IAAY,EAAE,KAAa,EAAE,QAAqC,MAAM;IACvF,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC;IAEzC,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAEnC,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,OAAO;YACV,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;QACzC,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;YACxC,MAAM,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;YACnC,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChE,CAAC;QACD;YACE,OAAO,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,EACpB,OAAO,EACP,IAAI,EACJ,KAAK,EACL,WAAW,GAAG,MAAM,EACpB,WAAW,GAAG,MAAM,EACpB,OAAO,EACP,YAAY,GAAG,SAAS,GACb;IACX,0BAA0B;IAC1B,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QAClC,IAAI,GAAG,CAAC,KAAK;YAAE,OAAO,GAAG,CAAC,KAAK,CAAC;QAEhC,kCAAkC;QAClC,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;QACpC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC1C,MAAM,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YACtD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC,EAAE,CAAC,CAAC,CAAC;QAEN,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAEjF,2BAA2B;IAC3B,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,IAAY,EAAE,GAAW,EAAE,KAAa,EAAsB,EAAE,CAAC,CACnG,MAAC,IAAI,IAAC,KAAK,EAAE,WAAW,aACrB,IAAI,EACJ,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EACxF,KAAK,IACD,CACR,CAAC;IAEF,MAAM,WAAW,GAAG,OAAO,KAAK,SAAS,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzF,MAAM,cAAc,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,MAAM,OAAO,GAAG,cAAc,GAAG,CAAC,CAAC;IAEnC,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,OAAO,EAAE,CAAC,aAEnC,KAAK,IAAI,CACR,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,OAAO,YAAE,KAAK,GAAQ,GACnC,CACP,EAGA,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAGjC,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,WAAW,uBAAU,EACjC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CACvB,MAAC,KAAK,CAAC,QAAQ,eACb,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,WAAW,YAC1B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GACxC,EACP,KAAC,IAAI,IAAC,KAAK,EAAE,WAAW,uBAAU,KAJf,GAAG,CAAC,GAAG,CAKX,CAClB,CAAC,IACE,EAGL,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAGhC,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAC1B,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,WAAW,uBAAU,EAClC,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,OAAO,CAAC,YAAY,EAAE,UAAU,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAQ,EAC3E,KAAC,IAAI,IAAC,KAAK,EAAE,WAAW,uBAAU,IAC9B,CACP,CAAC,CAAC,CAAC,CACF,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CACjC,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,WAAW,uBAAU,EACjC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;wBAC7B,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;wBAC3B,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;wBACrD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;wBAEvC,OAAO,CACL,MAAC,KAAK,CAAC,QAAQ,eACb,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,YACf,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAC9C,EACP,KAAC,IAAI,IAAC,KAAK,EAAE,WAAW,uBAAU,KAJf,GAAG,CAAC,GAAG,CAKX,CAClB,CAAC;oBACJ,CAAC,CAAC,KAfM,QAAQ,CAgBZ,CACP,CAAC,CACH,EAGA,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAGhC,OAAO,IAAI,CACV,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,QAAQ,+BAChB,cAAc,aAClB,CACR,IACG,CACP,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,OAAO,EACP,IAAI,EACJ,OAAO,GACmC;IAC1C,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE5D,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aAEzB,KAAC,GAAG,IAAC,GAAG,EAAE,CAAC,YACR,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAClB,KAAC,IAAI,IAAe,IAAI,QAAC,KAAK,EAAC,MAAM,YAClC,GAAG,CAAC,MAAM,IADF,GAAG,CAAC,GAAG,CAEX,CACR,CAAC,GACE,EAGL,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAC3B,KAAC,GAAG,IAAS,GAAG,EAAE,CAAC,YAChB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;oBACjB,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC3B,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;oBACrD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAEvC,OAAO,CACL,KAAC,IAAI,IAAe,KAAK,EAAE,KAAK,YAC7B,SAAS,IADD,GAAG,CAAC,GAAG,CAEX,CACR,CAAC;gBACJ,CAAC,CAAC,IAXM,CAAC,CAYL,CACP,CAAC,IACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ interface UpdateBannerProps {
3
+ currentVersion: string;
4
+ latestVersion: string;
5
+ packageName?: string;
6
+ }
7
+ export declare function UpdateBanner({ currentVersion, latestVersion, packageName, }: UpdateBannerProps): React.ReactElement;
8
+ export {};
9
+ //# sourceMappingURL=UpdateBanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UpdateBanner.d.ts","sourceRoot":"","sources":["../../../src/tui/components/UpdateBanner.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,iBAAiB;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,YAAY,CAAC,EAC3B,cAAc,EACd,aAAa,EACb,WAAoC,GACrC,EAAE,iBAAiB,GAAG,KAAK,CAAC,YAAY,CAsCxC"}
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ export function UpdateBanner({ currentVersion, latestVersion, packageName = '@zincapp/znvault-cli', }) {
4
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "yellow", paddingX: 2, paddingY: 1, marginY: 1, children: [_jsx(Box, { justifyContent: "center", marginBottom: 1, children: _jsx(Text, { bold: true, color: "yellow", children: "\u2728 Update available!" }) }), _jsxs(Box, { gap: 2, children: [_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: "gray", children: "Current:" }), _jsx(Text, { color: "gray", children: "Latest:" })] }), _jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: "red", children: currentVersion }), _jsx(Text, { color: "green", bold: true, children: latestVersion })] })] }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: "gray", children: "Run one of:" }), _jsxs(Box, { marginLeft: 2, flexDirection: "column", children: [_jsx(Text, { children: _jsx(Text, { color: "cyan", children: "znvault self-update" }) }), _jsx(Text, { children: _jsxs(Text, { color: "cyan", children: ["npm update -g ", packageName] }) })] })] })] }));
5
+ }
6
+ //# sourceMappingURL=UpdateBanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UpdateBanner.js","sourceRoot":"","sources":["../../../src/tui/components/UpdateBanner.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAQhC,MAAM,UAAU,YAAY,CAAC,EAC3B,cAAc,EACd,aAAa,EACb,WAAW,GAAG,sBAAsB,GAClB;IAClB,OAAO,CACL,MAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,OAAO,EACnB,WAAW,EAAC,QAAQ,EACpB,QAAQ,EAAE,CAAC,EACX,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE,CAAC,aAEV,KAAC,GAAG,IAAC,cAAc,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,YAC1C,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,QAAQ,yCAA2B,GAChD,EAEN,MAAC,GAAG,IAAC,GAAG,EAAE,CAAC,aACT,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,yBAAgB,EAClC,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,wBAAe,IAC7B,EACN,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,YAAE,cAAc,GAAQ,EACzC,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI,kBAAE,aAAa,GAAQ,IAC3C,IACF,EAEN,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,aACvC,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,4BAAmB,EACrC,MAAC,GAAG,IAAC,UAAU,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,aACxC,KAAC,IAAI,cACH,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,oCAA2B,GACxC,EACP,KAAC,IAAI,cACH,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,+BAAgB,WAAW,IAAQ,GAChD,IACH,IACF,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,75 @@
1
+ interface HealthData {
2
+ status: string;
3
+ version: string;
4
+ uptime: number;
5
+ timestamp: string;
6
+ database?: {
7
+ status: string;
8
+ role?: string;
9
+ };
10
+ redis?: {
11
+ status: string;
12
+ sentinelNodes?: number;
13
+ };
14
+ ha?: {
15
+ enabled: boolean;
16
+ nodeId: string;
17
+ isLeader: boolean;
18
+ clusterSize?: number;
19
+ };
20
+ }
21
+ interface ClusterData {
22
+ enabled: boolean;
23
+ nodeId: string;
24
+ isLeader: boolean;
25
+ leaderNodeId: string | null;
26
+ nodes: Array<{
27
+ nodeId: string;
28
+ host: string;
29
+ isLeader: boolean;
30
+ isHealthy: boolean;
31
+ lastSeen?: string;
32
+ }>;
33
+ }
34
+ interface LockdownData {
35
+ scope: string;
36
+ status: string;
37
+ reason?: string;
38
+ triggeredAt?: string;
39
+ escalationCount: number;
40
+ }
41
+ interface AuditEntry {
42
+ id: string;
43
+ timestamp: string;
44
+ action: string;
45
+ username: string;
46
+ ip: string;
47
+ status: number;
48
+ path?: string;
49
+ }
50
+ export interface DashboardData {
51
+ health: HealthData | null;
52
+ cluster: ClusterData | null;
53
+ lockdown: LockdownData | null;
54
+ audit: AuditEntry[];
55
+ loading: boolean;
56
+ error: string | null;
57
+ lastUpdated: Date | null;
58
+ }
59
+ /**
60
+ * Hook to fetch and poll dashboard data from the API
61
+ */
62
+ export declare function useDashboard(refreshInterval?: number): DashboardData & {
63
+ refresh: () => Promise<void>;
64
+ };
65
+ /**
66
+ * Hook for single API call with loading state
67
+ */
68
+ export declare function useApiCall<T>(apiCall: () => Promise<T>, deps?: unknown[]): {
69
+ data: T | null;
70
+ loading: boolean;
71
+ error: string | null;
72
+ refresh: () => Promise<void>;
73
+ };
74
+ export {};
75
+ //# sourceMappingURL=useApi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useApi.d.ts","sourceRoot":"","sources":["../../../src/tui/hooks/useApi.ts"],"names":[],"mappings":"AAIA,UAAU,UAAU;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,KAAK,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,EAAE,CAAC,EAAE;QACH,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,OAAO,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,UAAU,WAAW;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,KAAK,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,OAAO,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;CACJ;AAED,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,UAAU;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAC9B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,eAAe,SAAO,GAAG,aAAa,GAAG;IAAE,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAgDrG;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAC1B,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACzB,IAAI,GAAE,OAAO,EAAO,GACnB;IAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CA8B1F"}
@@ -0,0 +1,79 @@
1
+ // Path: znvault-cli/src/tui/hooks/useApi.ts
2
+ import { useState, useEffect, useCallback } from 'react';
3
+ import * as mode from '../../lib/mode.js';
4
+ /**
5
+ * Hook to fetch and poll dashboard data from the API
6
+ */
7
+ export function useDashboard(refreshInterval = 5000) {
8
+ const [data, setData] = useState({
9
+ health: null,
10
+ cluster: null,
11
+ lockdown: null,
12
+ audit: [],
13
+ loading: true,
14
+ error: null,
15
+ lastUpdated: null,
16
+ });
17
+ const fetchData = useCallback(async () => {
18
+ try {
19
+ const [healthResult, clusterResult, lockdownResult] = await Promise.allSettled([
20
+ mode.health(),
21
+ mode.clusterStatus(),
22
+ mode.getLockdownStatus(),
23
+ ]);
24
+ setData({
25
+ health: healthResult.status === 'fulfilled' ? healthResult.value : null,
26
+ cluster: clusterResult.status === 'fulfilled' ? clusterResult.value : null,
27
+ lockdown: lockdownResult.status === 'fulfilled' ? lockdownResult.value : null,
28
+ audit: [], // Audit requires separate API call with auth
29
+ loading: false,
30
+ error: null,
31
+ lastUpdated: new Date(),
32
+ });
33
+ }
34
+ catch (err) {
35
+ setData(prev => ({
36
+ ...prev,
37
+ loading: false,
38
+ error: err instanceof Error ? err.message : 'Failed to fetch data',
39
+ }));
40
+ }
41
+ }, []);
42
+ useEffect(() => {
43
+ void fetchData();
44
+ const interval = setInterval(() => {
45
+ void fetchData();
46
+ }, refreshInterval);
47
+ return () => { clearInterval(interval); };
48
+ }, [fetchData, refreshInterval]);
49
+ return { ...data, refresh: fetchData };
50
+ }
51
+ /**
52
+ * Hook for single API call with loading state
53
+ */
54
+ export function useApiCall(apiCall, deps = []) {
55
+ const [state, setState] = useState({
56
+ data: null,
57
+ loading: true,
58
+ error: null,
59
+ });
60
+ const refresh = useCallback(async () => {
61
+ setState(prev => ({ ...prev, loading: true, error: null }));
62
+ try {
63
+ const result = await apiCall();
64
+ setState({ data: result, loading: false, error: null });
65
+ }
66
+ catch (err) {
67
+ setState(prev => ({
68
+ ...prev,
69
+ loading: false,
70
+ error: err instanceof Error ? err.message : 'API call failed',
71
+ }));
72
+ }
73
+ }, deps); // deps is intentionally dynamic
74
+ useEffect(() => {
75
+ void refresh();
76
+ }, [refresh]);
77
+ return { ...state, refresh };
78
+ }
79
+ //# sourceMappingURL=useApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useApi.js","sourceRoot":"","sources":["../../../src/tui/hooks/useApi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import type { DashboardData } from '../hooks/useApi.js';
3
+ interface DashboardProps {
4
+ data: DashboardData;
5
+ onRefresh: () => Promise<void>;
6
+ }
7
+ export declare function Dashboard({ data }: DashboardProps): React.ReactElement;
8
+ export {};
9
+ //# sourceMappingURL=Dashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dashboard.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/Dashboard.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,UAAU,cAAc;IACtB,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAgBD,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE,cAAc,GAAG,KAAK,CAAC,YAAY,CA4HtE"}