@zincapp/znvault-cli 2.16.4 → 2.17.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 (299) hide show
  1. package/dist/commands/agent.d.ts.map +1 -1
  2. package/dist/commands/agent.js +6 -0
  3. package/dist/commands/agent.js.map +1 -1
  4. package/dist/commands/apikey/conditions.d.ts +6 -0
  5. package/dist/commands/apikey/conditions.d.ts.map +1 -0
  6. package/dist/commands/apikey/conditions.js +57 -0
  7. package/dist/commands/apikey/conditions.js.map +1 -0
  8. package/dist/commands/apikey/create.d.ts +6 -0
  9. package/dist/commands/apikey/create.d.ts.map +1 -0
  10. package/dist/commands/apikey/create.js +106 -0
  11. package/dist/commands/apikey/create.js.map +1 -0
  12. package/dist/commands/apikey/delete.d.ts +6 -0
  13. package/dist/commands/apikey/delete.d.ts.map +1 -0
  14. package/dist/commands/apikey/delete.js +29 -0
  15. package/dist/commands/apikey/delete.js.map +1 -0
  16. package/dist/commands/apikey/enable-disable.d.ts +6 -0
  17. package/dist/commands/apikey/enable-disable.d.ts.map +1 -0
  18. package/dist/commands/apikey/enable-disable.js +44 -0
  19. package/dist/commands/apikey/enable-disable.js.map +1 -0
  20. package/dist/commands/apikey/helpers.d.ts +23 -0
  21. package/dist/commands/apikey/helpers.d.ts.map +1 -0
  22. package/dist/commands/apikey/helpers.js +135 -0
  23. package/dist/commands/apikey/helpers.js.map +1 -0
  24. package/dist/commands/apikey/index.d.ts +10 -0
  25. package/dist/commands/apikey/index.d.ts.map +1 -0
  26. package/dist/commands/apikey/index.js +33 -0
  27. package/dist/commands/apikey/index.js.map +1 -0
  28. package/dist/commands/apikey/list.d.ts +6 -0
  29. package/dist/commands/apikey/list.d.ts.map +1 -0
  30. package/dist/commands/apikey/list.js +74 -0
  31. package/dist/commands/apikey/list.js.map +1 -0
  32. package/dist/commands/apikey/managed/bind.d.ts +6 -0
  33. package/dist/commands/apikey/managed/bind.d.ts.map +1 -0
  34. package/dist/commands/apikey/managed/bind.js +52 -0
  35. package/dist/commands/apikey/managed/bind.js.map +1 -0
  36. package/dist/commands/apikey/managed/conditions.d.ts +6 -0
  37. package/dist/commands/apikey/managed/conditions.d.ts.map +1 -0
  38. package/dist/commands/apikey/managed/conditions.js +62 -0
  39. package/dist/commands/apikey/managed/conditions.js.map +1 -0
  40. package/dist/commands/apikey/managed/config.d.ts +6 -0
  41. package/dist/commands/apikey/managed/config.d.ts.map +1 -0
  42. package/dist/commands/apikey/managed/config.js +52 -0
  43. package/dist/commands/apikey/managed/config.js.map +1 -0
  44. package/dist/commands/apikey/managed/create.d.ts +6 -0
  45. package/dist/commands/apikey/managed/create.d.ts.map +1 -0
  46. package/dist/commands/apikey/managed/create.js +82 -0
  47. package/dist/commands/apikey/managed/create.js.map +1 -0
  48. package/dist/commands/apikey/managed/delete.d.ts +6 -0
  49. package/dist/commands/apikey/managed/delete.d.ts.map +1 -0
  50. package/dist/commands/apikey/managed/delete.js +29 -0
  51. package/dist/commands/apikey/managed/delete.js.map +1 -0
  52. package/dist/commands/apikey/managed/get.d.ts +6 -0
  53. package/dist/commands/apikey/managed/get.d.ts.map +1 -0
  54. package/dist/commands/apikey/managed/get.js +31 -0
  55. package/dist/commands/apikey/managed/get.js.map +1 -0
  56. package/dist/commands/apikey/managed/helpers.d.ts +5 -0
  57. package/dist/commands/apikey/managed/helpers.d.ts.map +1 -0
  58. package/dist/commands/apikey/managed/helpers.js +70 -0
  59. package/dist/commands/apikey/managed/helpers.js.map +1 -0
  60. package/dist/commands/apikey/managed/index.d.ts +7 -0
  61. package/dist/commands/apikey/managed/index.d.ts.map +1 -0
  62. package/dist/commands/apikey/managed/index.js +27 -0
  63. package/dist/commands/apikey/managed/index.js.map +1 -0
  64. package/dist/commands/apikey/managed/list.d.ts +6 -0
  65. package/dist/commands/apikey/managed/list.d.ts.map +1 -0
  66. package/dist/commands/apikey/managed/list.js +58 -0
  67. package/dist/commands/apikey/managed/list.js.map +1 -0
  68. package/dist/commands/apikey/managed/permissions.d.ts +6 -0
  69. package/dist/commands/apikey/managed/permissions.d.ts.map +1 -0
  70. package/dist/commands/apikey/managed/permissions.js +73 -0
  71. package/dist/commands/apikey/managed/permissions.js.map +1 -0
  72. package/dist/commands/apikey/managed/rotate.d.ts +6 -0
  73. package/dist/commands/apikey/managed/rotate.d.ts.map +1 -0
  74. package/dist/commands/apikey/managed/rotate.js +29 -0
  75. package/dist/commands/apikey/managed/rotate.js.map +1 -0
  76. package/dist/commands/apikey/managed/types.d.ts +62 -0
  77. package/dist/commands/apikey/managed/types.d.ts.map +1 -0
  78. package/dist/commands/apikey/managed/types.js +3 -0
  79. package/dist/commands/apikey/managed/types.js.map +1 -0
  80. package/dist/commands/apikey/permissions.d.ts +6 -0
  81. package/dist/commands/apikey/permissions.d.ts.map +1 -0
  82. package/dist/commands/apikey/permissions.js +70 -0
  83. package/dist/commands/apikey/permissions.js.map +1 -0
  84. package/dist/commands/apikey/policies.d.ts +6 -0
  85. package/dist/commands/apikey/policies.d.ts.map +1 -0
  86. package/dist/commands/apikey/policies.js +82 -0
  87. package/dist/commands/apikey/policies.js.map +1 -0
  88. package/dist/commands/apikey/rotate.d.ts +6 -0
  89. package/dist/commands/apikey/rotate.d.ts.map +1 -0
  90. package/dist/commands/apikey/rotate.js +42 -0
  91. package/dist/commands/apikey/rotate.js.map +1 -0
  92. package/dist/commands/apikey/self.d.ts +6 -0
  93. package/dist/commands/apikey/self.d.ts.map +1 -0
  94. package/dist/commands/apikey/self.js +96 -0
  95. package/dist/commands/apikey/self.js.map +1 -0
  96. package/dist/commands/apikey/show.d.ts +6 -0
  97. package/dist/commands/apikey/show.d.ts.map +1 -0
  98. package/dist/commands/apikey/show.js +79 -0
  99. package/dist/commands/apikey/show.js.map +1 -0
  100. package/dist/commands/apikey/types.d.ts +83 -0
  101. package/dist/commands/apikey/types.d.ts.map +1 -0
  102. package/dist/commands/apikey/types.js +3 -0
  103. package/dist/commands/apikey/types.js.map +1 -0
  104. package/dist/commands/apikey.d.ts +8 -2
  105. package/dist/commands/apikey.d.ts.map +1 -1
  106. package/dist/commands/apikey.js +9 -1296
  107. package/dist/commands/apikey.js.map +1 -1
  108. package/dist/commands/device.d.ts.map +1 -1
  109. package/dist/commands/device.js +8 -5
  110. package/dist/commands/device.js.map +1 -1
  111. package/dist/commands/plugin.d.ts.map +1 -1
  112. package/dist/commands/plugin.js +29 -7
  113. package/dist/commands/plugin.js.map +1 -1
  114. package/dist/commands/secret/copy.d.ts +6 -0
  115. package/dist/commands/secret/copy.d.ts.map +1 -0
  116. package/dist/commands/secret/copy.js +43 -0
  117. package/dist/commands/secret/copy.js.map +1 -0
  118. package/dist/commands/secret/create.d.ts +6 -0
  119. package/dist/commands/secret/create.d.ts.map +1 -0
  120. package/dist/commands/secret/create.js +297 -0
  121. package/dist/commands/secret/create.js.map +1 -0
  122. package/dist/commands/secret/decrypt.d.ts +6 -0
  123. package/dist/commands/secret/decrypt.d.ts.map +1 -0
  124. package/dist/commands/secret/decrypt.js +104 -0
  125. package/dist/commands/secret/decrypt.js.map +1 -0
  126. package/dist/commands/secret/delete.d.ts +6 -0
  127. package/dist/commands/secret/delete.d.ts.map +1 -0
  128. package/dist/commands/secret/delete.js +60 -0
  129. package/dist/commands/secret/delete.js.map +1 -0
  130. package/dist/commands/secret/get.d.ts +6 -0
  131. package/dist/commands/secret/get.d.ts.map +1 -0
  132. package/dist/commands/secret/get.js +60 -0
  133. package/dist/commands/secret/get.js.map +1 -0
  134. package/dist/commands/secret/helpers.d.ts +11 -0
  135. package/dist/commands/secret/helpers.d.ts.map +1 -0
  136. package/dist/commands/secret/helpers.js +59 -0
  137. package/dist/commands/secret/helpers.js.map +1 -0
  138. package/dist/commands/secret/history.d.ts +6 -0
  139. package/dist/commands/secret/history.d.ts.map +1 -0
  140. package/dist/commands/secret/history.js +52 -0
  141. package/dist/commands/secret/history.js.map +1 -0
  142. package/dist/commands/secret/index.d.ts +12 -0
  143. package/dist/commands/secret/index.d.ts.map +1 -0
  144. package/dist/commands/secret/index.js +49 -0
  145. package/dist/commands/secret/index.js.map +1 -0
  146. package/dist/commands/secret/list.d.ts +6 -0
  147. package/dist/commands/secret/list.d.ts.map +1 -0
  148. package/dist/commands/secret/list.js +72 -0
  149. package/dist/commands/secret/list.js.map +1 -0
  150. package/dist/commands/secret/pem-analysis.d.ts +32 -0
  151. package/dist/commands/secret/pem-analysis.d.ts.map +1 -0
  152. package/dist/commands/secret/pem-analysis.js +190 -0
  153. package/dist/commands/secret/pem-analysis.js.map +1 -0
  154. package/dist/commands/secret/resolve.d.ts +17 -0
  155. package/dist/commands/secret/resolve.d.ts.map +1 -0
  156. package/dist/commands/secret/resolve.js +36 -0
  157. package/dist/commands/secret/resolve.js.map +1 -0
  158. package/dist/commands/secret/rotate.d.ts +6 -0
  159. package/dist/commands/secret/rotate.d.ts.map +1 -0
  160. package/dist/commands/secret/rotate.js +72 -0
  161. package/dist/commands/secret/rotate.js.map +1 -0
  162. package/dist/commands/secret/types.d.ts +123 -0
  163. package/dist/commands/secret/types.d.ts.map +1 -0
  164. package/dist/commands/secret/types.js +3 -0
  165. package/dist/commands/secret/types.js.map +1 -0
  166. package/dist/commands/secret/update.d.ts +6 -0
  167. package/dist/commands/secret/update.d.ts.map +1 -0
  168. package/dist/commands/secret/update.js +124 -0
  169. package/dist/commands/secret/update.js.map +1 -0
  170. package/dist/commands/secret.d.ts +8 -2
  171. package/dist/commands/secret.d.ts.map +1 -1
  172. package/dist/commands/secret.js +6 -1131
  173. package/dist/commands/secret.js.map +1 -1
  174. package/dist/index.js +48 -4
  175. package/dist/index.js.map +1 -1
  176. package/dist/lib/client/apikeys.d.ts +34 -0
  177. package/dist/lib/client/apikeys.d.ts.map +1 -0
  178. package/dist/lib/client/apikeys.js +113 -0
  179. package/dist/lib/client/apikeys.js.map +1 -0
  180. package/dist/lib/client/audit.d.ts +21 -0
  181. package/dist/lib/client/audit.d.ts.map +1 -0
  182. package/dist/lib/client/audit.js +40 -0
  183. package/dist/lib/client/audit.js.map +1 -0
  184. package/dist/lib/client/health.d.ts +30 -0
  185. package/dist/lib/client/health.d.ts.map +1 -0
  186. package/dist/lib/client/health.js +55 -0
  187. package/dist/lib/client/health.js.map +1 -0
  188. package/dist/lib/client/http.d.ts +50 -0
  189. package/dist/lib/client/http.d.ts.map +1 -0
  190. package/dist/lib/client/http.js +333 -0
  191. package/dist/lib/client/http.js.map +1 -0
  192. package/dist/lib/client/index.d.ts +156 -0
  193. package/dist/lib/client/index.d.ts.map +1 -0
  194. package/dist/lib/client/index.js +172 -0
  195. package/dist/lib/client/index.js.map +1 -0
  196. package/dist/lib/client/lockdown.d.ts +23 -0
  197. package/dist/lib/client/lockdown.d.ts.map +1 -0
  198. package/dist/lib/client/lockdown.js +48 -0
  199. package/dist/lib/client/lockdown.js.map +1 -0
  200. package/dist/lib/client/managed-keys.d.ts +18 -0
  201. package/dist/lib/client/managed-keys.d.ts.map +1 -0
  202. package/dist/lib/client/managed-keys.js +190 -0
  203. package/dist/lib/client/managed-keys.js.map +1 -0
  204. package/dist/lib/client/policies.d.ts +35 -0
  205. package/dist/lib/client/policies.d.ts.map +1 -0
  206. package/dist/lib/client/policies.js +131 -0
  207. package/dist/lib/client/policies.js.map +1 -0
  208. package/dist/lib/client/tenants.d.ts +29 -0
  209. package/dist/lib/client/tenants.d.ts.map +1 -0
  210. package/dist/lib/client/tenants.js +56 -0
  211. package/dist/lib/client/tenants.js.map +1 -0
  212. package/dist/lib/client/types.d.ts +45 -0
  213. package/dist/lib/client/types.d.ts.map +1 -0
  214. package/dist/lib/client/types.js +3 -0
  215. package/dist/lib/client/types.js.map +1 -0
  216. package/dist/lib/client/users.d.ts +44 -0
  217. package/dist/lib/client/users.d.ts.map +1 -0
  218. package/dist/lib/client/users.js +116 -0
  219. package/dist/lib/client/users.js.map +1 -0
  220. package/dist/lib/client.d.ts +11 -246
  221. package/dist/lib/client.d.ts.map +1 -1
  222. package/dist/lib/client.js +10 -996
  223. package/dist/lib/client.js.map +1 -1
  224. package/dist/lib/command-error-handler.d.ts +99 -0
  225. package/dist/lib/command-error-handler.d.ts.map +1 -0
  226. package/dist/lib/command-error-handler.js +108 -0
  227. package/dist/lib/command-error-handler.js.map +1 -0
  228. package/dist/lib/config/apikey.d.ts +29 -0
  229. package/dist/lib/config/apikey.d.ts.map +1 -0
  230. package/dist/lib/config/apikey.js +58 -0
  231. package/dist/lib/config/apikey.js.map +1 -0
  232. package/dist/lib/config/cache.d.ts +47 -0
  233. package/dist/lib/config/cache.d.ts.map +1 -0
  234. package/dist/lib/config/cache.js +84 -0
  235. package/dist/lib/config/cache.js.map +1 -0
  236. package/dist/lib/config/credentials.d.ts +33 -0
  237. package/dist/lib/config/credentials.d.ts.map +1 -0
  238. package/dist/lib/config/credentials.js +70 -0
  239. package/dist/lib/config/credentials.js.map +1 -0
  240. package/dist/lib/config/getters.d.ts +28 -0
  241. package/dist/lib/config/getters.d.ts.map +1 -0
  242. package/dist/lib/config/getters.js +65 -0
  243. package/dist/lib/config/getters.js.map +1 -0
  244. package/dist/lib/config/index.d.ts +17 -0
  245. package/dist/lib/config/index.d.ts.map +1 -0
  246. package/dist/lib/config/index.js +21 -0
  247. package/dist/lib/config/index.js.map +1 -0
  248. package/dist/lib/config/migration.d.ts +10 -0
  249. package/dist/lib/config/migration.d.ts.map +1 -0
  250. package/dist/lib/config/migration.js +59 -0
  251. package/dist/lib/config/migration.js.map +1 -0
  252. package/dist/lib/config/plugins.d.ts +25 -0
  253. package/dist/lib/config/plugins.d.ts.map +1 -0
  254. package/dist/lib/config/plugins.js +58 -0
  255. package/dist/lib/config/plugins.js.map +1 -0
  256. package/dist/lib/config/profile.d.ts +42 -0
  257. package/dist/lib/config/profile.d.ts.map +1 -0
  258. package/dist/lib/config/profile.js +154 -0
  259. package/dist/lib/config/profile.js.map +1 -0
  260. package/dist/lib/config/store.d.ts +23 -0
  261. package/dist/lib/config/store.d.ts.map +1 -0
  262. package/dist/lib/config/store.js +41 -0
  263. package/dist/lib/config/store.js.map +1 -0
  264. package/dist/lib/config/types.d.ts +44 -0
  265. package/dist/lib/config/types.d.ts.map +1 -0
  266. package/dist/lib/config/types.js +8 -0
  267. package/dist/lib/config/types.js.map +1 -0
  268. package/dist/lib/config/validation.d.ts +38 -0
  269. package/dist/lib/config/validation.d.ts.map +1 -0
  270. package/dist/lib/config/validation.js +146 -0
  271. package/dist/lib/config/validation.js.map +1 -0
  272. package/dist/lib/config.d.ts +5 -158
  273. package/dist/lib/config.d.ts.map +1 -1
  274. package/dist/lib/config.js +26 -424
  275. package/dist/lib/config.js.map +1 -1
  276. package/dist/lib/constants.d.ts +65 -0
  277. package/dist/lib/constants.d.ts.map +1 -0
  278. package/dist/lib/constants.js +90 -0
  279. package/dist/lib/constants.js.map +1 -0
  280. package/dist/lib/db.d.ts +4 -0
  281. package/dist/lib/db.d.ts.map +1 -1
  282. package/dist/lib/db.js +77 -46
  283. package/dist/lib/db.js.map +1 -1
  284. package/dist/lib/format-helpers.d.ts +63 -0
  285. package/dist/lib/format-helpers.d.ts.map +1 -0
  286. package/dist/lib/format-helpers.js +219 -0
  287. package/dist/lib/format-helpers.js.map +1 -0
  288. package/dist/lib/visual.d.ts +22 -0
  289. package/dist/lib/visual.d.ts.map +1 -1
  290. package/dist/lib/visual.js +83 -0
  291. package/dist/lib/visual.js.map +1 -1
  292. package/dist/services/signature-verifier.d.ts.map +1 -1
  293. package/dist/services/signature-verifier.js +11 -4
  294. package/dist/services/signature-verifier.js.map +1 -1
  295. package/dist/services/update-installer.d.ts +7 -0
  296. package/dist/services/update-installer.d.ts.map +1 -1
  297. package/dist/services/update-installer.js +58 -19
  298. package/dist/services/update-installer.js.map +1 -1
  299. package/package.json +1 -1
@@ -0,0 +1,59 @@
1
+ // Path: src/commands/secret/helpers.ts
2
+ /**
3
+ * Helper functions for secret commands
4
+ */
5
+ export function formatDate(dateStr) {
6
+ if (!dateStr)
7
+ return '-';
8
+ return new Date(dateStr).toLocaleString();
9
+ }
10
+ export function formatType(type, subType) {
11
+ if (subType)
12
+ return `${type}/${subType}`;
13
+ return type;
14
+ }
15
+ export function formatTags(tags) {
16
+ if (!tags || tags.length === 0)
17
+ return '-';
18
+ if (tags.length <= 3)
19
+ return tags.join(', ');
20
+ return `${tags.slice(0, 2).join(', ')} +${tags.length - 2} more`;
21
+ }
22
+ export function truncateAlias(alias, maxLen = 40) {
23
+ if (alias.length <= maxLen)
24
+ return alias;
25
+ return '...' + alias.slice(-(maxLen - 3));
26
+ }
27
+ export function formatBytes(bytes) {
28
+ if (!bytes)
29
+ return '-';
30
+ if (bytes < 1024)
31
+ return `${bytes} B`;
32
+ if (bytes < 1024 * 1024)
33
+ return `${(bytes / 1024).toFixed(1)} KB`;
34
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
35
+ }
36
+ export function getDaysUntilExpiry(expiresAt) {
37
+ if (!expiresAt)
38
+ return null;
39
+ const expires = new Date(expiresAt);
40
+ const now = new Date();
41
+ return Math.ceil((expires.getTime() - now.getTime()) / (1000 * 60 * 60 * 24));
42
+ }
43
+ export function formatExpiry(expiresAt) {
44
+ if (!expiresAt)
45
+ return '-';
46
+ const days = getDaysUntilExpiry(expiresAt);
47
+ if (days === null)
48
+ return '-';
49
+ if (days < 0)
50
+ return `Expired ${Math.abs(days)}d ago`;
51
+ if (days === 0)
52
+ return 'Expires today';
53
+ if (days <= 7)
54
+ return `${days}d (!)`;
55
+ if (days <= 30)
56
+ return `${days}d`;
57
+ return `${days}d`;
58
+ }
59
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/commands/secret/helpers.ts"],"names":[],"mappings":"AAAA,uCAAuC;AAEvC;;GAEG;AAEH,MAAM,UAAU,UAAU,CAAC,OAA2B;IACpD,IAAI,CAAC,OAAO;QAAE,OAAO,GAAG,CAAC;IACzB,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,OAAgB;IACvD,IAAI,OAAO;QAAE,OAAO,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC;IACzC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAe;IACxC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAC3C,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,MAAM,GAAG,EAAE;IACtD,IAAI,KAAK,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,KAAK,CAAC;IACzC,OAAO,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,GAAG,CAAC;IACvB,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,GAAG,KAAK,IAAI,CAAC;IACtC,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI;QAAE,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAClE,OAAO,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,SAAkB;IACnD,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5B,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,SAAkB;IAC7C,IAAI,CAAC,SAAS;QAAE,OAAO,GAAG,CAAC;IAC3B,MAAM,IAAI,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC3C,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,GAAG,CAAC;IAC9B,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,WAAW,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;IACtD,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,eAAe,CAAC;IACvC,IAAI,IAAI,IAAI,CAAC;QAAE,OAAO,GAAG,IAAI,OAAO,CAAC;IACrC,IAAI,IAAI,IAAI,EAAE;QAAE,OAAO,GAAG,IAAI,GAAG,CAAC;IAClC,OAAO,GAAG,IAAI,GAAG,CAAC;AACpB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Secret history command
3
+ */
4
+ import type { Command } from 'commander';
5
+ export declare function registerHistoryCommand(secretCmd: Command): void;
6
+ //# sourceMappingURL=history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../../src/commands/secret/history.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASzC,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAkD/D"}
@@ -0,0 +1,52 @@
1
+ // Path: src/commands/secret/history.ts
2
+ import ora from 'ora';
3
+ import Table from 'cli-table3';
4
+ import { client } from '../../lib/client.js';
5
+ import * as output from '../../lib/output.js';
6
+ import { formatDate } from './helpers.js';
7
+ import { resolveSecretId } from './resolve.js';
8
+ export function registerHistoryCommand(secretCmd) {
9
+ secretCmd
10
+ .command('history <id-or-alias>')
11
+ .description('Show secret version history (supports UUID or tenant/alias format)')
12
+ .option('--json', 'Output as JSON')
13
+ .action(async (idOrAlias, options) => {
14
+ const spinner = ora('Resolving secret...').start();
15
+ try {
16
+ // Resolve alias to UUID if needed
17
+ const id = await resolveSecretId(idOrAlias);
18
+ spinner.text = 'Fetching secret history...';
19
+ const response = await client.get(`/v1/secrets/${id}/history`);
20
+ spinner.stop();
21
+ const history = response.history || [];
22
+ if (options.json) {
23
+ output.json(history);
24
+ return;
25
+ }
26
+ if (history.length === 0) {
27
+ output.info('No version history found');
28
+ return;
29
+ }
30
+ const table = new Table({
31
+ head: ['Version', 'Created At', 'Superseded At', 'Created By'],
32
+ colWidths: [10, 25, 25, 30],
33
+ });
34
+ for (const entry of history) {
35
+ table.push([
36
+ String(entry.version),
37
+ formatDate(entry.createdAt),
38
+ entry.supersededAt ? formatDate(entry.supersededAt) : '-',
39
+ entry.createdBy || '-',
40
+ ]);
41
+ }
42
+ console.log(table.toString());
43
+ console.log(`Total: ${response.count} version(s)`);
44
+ }
45
+ catch (error) {
46
+ spinner.fail('Failed to fetch history');
47
+ output.error(error.message);
48
+ process.exit(1);
49
+ }
50
+ });
51
+ }
52
+ //# sourceMappingURL=history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../../src/commands/secret/history.ts"],"names":[],"mappings":"AAAA,uCAAuC;AAOvC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,UAAU,sBAAsB,CAAC,SAAkB;IACvD,SAAS;SACN,OAAO,CAAC,uBAAuB,CAAC;SAChC,WAAW,CAAC,oEAAoE,CAAC;SACjF,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,OAAuB,EAAE,EAAE;QAC3D,MAAM,OAAO,GAAG,GAAG,CAAC,qBAAqB,CAAC,CAAC,KAAK,EAAE,CAAC;QAEnD,IAAI,CAAC;YACH,kCAAkC;YAClC,MAAM,EAAE,GAAG,MAAM,eAAe,CAAC,SAAS,CAAC,CAAC;YAC5C,OAAO,CAAC,IAAI,GAAG,4BAA4B,CAAC;YAE5C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAkB,eAAe,EAAE,UAAU,CAAC,CAAC;YAChF,OAAO,CAAC,IAAI,EAAE,CAAC;YAEf,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;YAEvC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACrB,OAAO;YACT,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;gBACxC,OAAO;YACT,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;gBACtB,IAAI,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,CAAC;gBAC9D,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;aAC5B,CAAC,CAAC;YAEH,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC;oBACT,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;oBACrB,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC;oBAC3B,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG;oBACzD,KAAK,CAAC,SAAS,IAAI,GAAG;iBACvB,CAAC,CAAC;YACL,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,UAAU,QAAQ,CAAC,KAAK,aAAa,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACxC,MAAM,CAAC,KAAK,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Secret commands - main entry point
3
+ *
4
+ * This module provides the command registration function that combines
5
+ * all secret subcommands into a single command group.
6
+ */
7
+ import type { Command } from 'commander';
8
+ export declare function registerSecretCommands(program: Command): void;
9
+ export * from './types.js';
10
+ export * from './helpers.js';
11
+ export * from './resolve.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/secret/index.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8BzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgB7D;AAGD,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,49 @@
1
+ // Path: src/commands/secret/index.ts
2
+ import { registerListCommand } from './list.js';
3
+ import { registerGetCommand } from './get.js';
4
+ import { registerDecryptCommand } from './decrypt.js';
5
+ import { registerCreateCommand } from './create.js';
6
+ import { registerUpdateCommand } from './update.js';
7
+ import { registerDeleteCommand } from './delete.js';
8
+ import { registerRotateCommand } from './rotate.js';
9
+ import { registerHistoryCommand } from './history.js';
10
+ import { registerCopyCommand } from './copy.js';
11
+ // Help text for secret identifier format
12
+ const SECRET_ID_HELP = `
13
+ Secret Identifier Formats:
14
+ Commands that accept <id-or-alias> support these formats:
15
+
16
+ 1. UUID: abc12345-1234-5678-9abc-def012345678
17
+ 2. Alias: zn-admin/config, web/api-key, smtp-credentials
18
+ 3. Prefix: alias:zn-admin/config (optional "alias:" prefix)
19
+
20
+ Note: Tenant is derived from your authenticated user (JWT).
21
+ You can only access secrets within your assigned tenant.
22
+
23
+ Examples:
24
+ znvault secret decrypt zn-admin/config
25
+ znvault secret get web/production/api-key
26
+ znvault secret history alias:database/credentials
27
+ znvault secret delete abc12345-1234-5678-9abc-def012345678
28
+ `;
29
+ export function registerSecretCommands(program) {
30
+ const secretCmd = program
31
+ .command('secret')
32
+ .description('Manage secrets')
33
+ .addHelpText('after', SECRET_ID_HELP);
34
+ // Register all subcommands
35
+ registerListCommand(secretCmd);
36
+ registerGetCommand(secretCmd);
37
+ registerDecryptCommand(secretCmd);
38
+ registerCreateCommand(secretCmd);
39
+ registerUpdateCommand(secretCmd);
40
+ registerDeleteCommand(secretCmd);
41
+ registerRotateCommand(secretCmd);
42
+ registerHistoryCommand(secretCmd);
43
+ registerCopyCommand(secretCmd);
44
+ }
45
+ // Re-export types for external use
46
+ export * from './types.js';
47
+ export * from './helpers.js';
48
+ export * from './resolve.js';
49
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/secret/index.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAUrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD,yCAAyC;AACzC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;CAgBtB,CAAC;AAEF,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,MAAM,SAAS,GAAG,OAAO;SACtB,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,gBAAgB,CAAC;SAC7B,WAAW,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAExC,2BAA2B;IAC3B,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAC/B,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC9B,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAClC,qBAAqB,CAAC,SAAS,CAAC,CAAC;IACjC,qBAAqB,CAAC,SAAS,CAAC,CAAC;IACjC,qBAAqB,CAAC,SAAS,CAAC,CAAC;IACjC,qBAAqB,CAAC,SAAS,CAAC,CAAC;IACjC,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAClC,mBAAmB,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC;AAED,mCAAmC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Secret list command
3
+ */
4
+ import type { Command } from 'commander';
5
+ export declare function registerListCommand(secretCmd: Command): void;
6
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/secret/list.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAkE5D"}
@@ -0,0 +1,72 @@
1
+ // Path: src/commands/secret/list.ts
2
+ import ora from 'ora';
3
+ import Table from 'cli-table3';
4
+ import { client } from '../../lib/client.js';
5
+ import * as output from '../../lib/output.js';
6
+ import { formatDate, formatType, formatTags, truncateAlias, formatExpiry } from './helpers.js';
7
+ export function registerListCommand(secretCmd) {
8
+ secretCmd
9
+ .command('list')
10
+ .description('List secrets (metadata only)')
11
+ .option('-t, --tenant <id>', 'Filter by tenant')
12
+ .option('--type <type>', 'Filter by type (opaque, credential, setting)')
13
+ .option('--sub-type <subType>', 'Filter by sub-type')
14
+ .option('--alias-prefix <prefix>', 'Filter by alias prefix')
15
+ .option('--expiring <days>', 'Show secrets expiring within N days')
16
+ .option('--json', 'Output as JSON')
17
+ .action(async (options) => {
18
+ const spinner = ora('Fetching secrets...').start();
19
+ try {
20
+ const query = {};
21
+ if (options.tenant)
22
+ query.tenant = options.tenant;
23
+ if (options.type)
24
+ query.type = options.type;
25
+ if (options.subType)
26
+ query.subType = options.subType;
27
+ if (options.aliasPrefix)
28
+ query.aliasPrefix = options.aliasPrefix;
29
+ if (options.expiring) {
30
+ const days = parseInt(options.expiring, 10);
31
+ const expiringBefore = new Date(Date.now() + days * 24 * 60 * 60 * 1000).toISOString();
32
+ query.expiringBefore = expiringBefore;
33
+ }
34
+ const response = await client.get('/v1/secrets?' + new URLSearchParams(query).toString());
35
+ const secrets = response.items;
36
+ spinner.stop();
37
+ if (options.json) {
38
+ output.json(response);
39
+ return;
40
+ }
41
+ if (secrets.length === 0) {
42
+ output.info('No secrets found');
43
+ return;
44
+ }
45
+ const table = new Table({
46
+ head: ['ID', 'Alias', 'Tenant', 'Type', 'Ver', 'Expires', 'Tags', 'Updated'],
47
+ colWidths: [12, 42, 12, 16, 5, 14, 20, 20],
48
+ wordWrap: true,
49
+ });
50
+ for (const secret of secrets) {
51
+ table.push([
52
+ secret.id.slice(0, 10) + '...',
53
+ truncateAlias(secret.alias),
54
+ secret.tenant.slice(0, 10),
55
+ formatType(secret.type, secret.subType),
56
+ String(secret.version),
57
+ formatExpiry(secret.expiresAt || secret.ttlUntil),
58
+ formatTags(secret.tags),
59
+ formatDate(secret.updatedAt).split(',')[0], // Just date
60
+ ]);
61
+ }
62
+ console.log(table.toString());
63
+ output.info(`Total: ${response.pagination.total} secret(s)${response.pagination.hasMore ? ' (more available)' : ''}`);
64
+ }
65
+ catch (error) {
66
+ spinner.fail('Failed to list secrets');
67
+ output.error(error.message);
68
+ process.exit(1);
69
+ }
70
+ });
71
+ }
72
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/secret/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * PEM file analysis utilities for AI suggestion feature
3
+ */
4
+ /**
5
+ * PEM file analysis result
6
+ */
7
+ export interface PEMInfo {
8
+ type: 'certificate' | 'private-key' | 'public-key' | 'csr' | 'bundle' | 'encrypted-key' | 'unknown';
9
+ algorithm?: 'rsa' | 'ec' | 'ed25519' | 'dsa' | 'unknown';
10
+ pemHeaders: string[];
11
+ blockCount: number;
12
+ certificateCount?: number;
13
+ detectedPurpose?: string;
14
+ isAppleP8?: boolean;
15
+ }
16
+ /**
17
+ * File analysis info for LLM
18
+ */
19
+ export interface FileAnalysisInfo {
20
+ filename: string;
21
+ extension: string;
22
+ mimeType: string;
23
+ size: number;
24
+ pemInfo?: PEMInfo;
25
+ }
26
+ export declare function detectKeyAlgorithm(content: string): PEMInfo['algorithm'] | undefined;
27
+ export declare function detectPurpose(filename: string, type: PEMInfo['type'], algorithm?: PEMInfo['algorithm'], headers?: string[]): string | undefined;
28
+ export declare function analyzePEMContent(content: string, filename: string): PEMInfo | null;
29
+ export declare function detectMimeType(content: Buffer): string;
30
+ export declare function analyzeFileForSuggestion(filePath: string): Promise<FileAnalysisInfo | null>;
31
+ export declare function formatPemType(type: string): string;
32
+ //# sourceMappingURL=pem-analysis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pem-analysis.d.ts","sourceRoot":"","sources":["../../../src/commands/secret/pem-analysis.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,aAAa,GAAG,aAAa,GAAG,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,eAAe,GAAG,SAAS,CAAC;IACpG,SAAS,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,CAAC;IACzD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAiBD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,SAAS,CAoBpF;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EACrB,SAAS,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,EAChC,OAAO,CAAC,EAAE,MAAM,EAAE,GACjB,MAAM,GAAG,SAAS,CA4CpB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAwDnF;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAItD;AAED,wBAAsB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CA6BjG;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAWlD"}
@@ -0,0 +1,190 @@
1
+ // Path: src/commands/secret/pem-analysis.ts
2
+ const PEM_HEADER_MAP = {
3
+ 'PRIVATE KEY': { type: 'private-key' },
4
+ 'RSA PRIVATE KEY': { type: 'private-key', algorithm: 'rsa' },
5
+ 'EC PRIVATE KEY': { type: 'private-key', algorithm: 'ec' },
6
+ 'DSA PRIVATE KEY': { type: 'private-key', algorithm: 'dsa' },
7
+ 'OPENSSH PRIVATE KEY': { type: 'private-key' },
8
+ 'ENCRYPTED PRIVATE KEY': { type: 'encrypted-key' },
9
+ 'PUBLIC KEY': { type: 'public-key' },
10
+ 'RSA PUBLIC KEY': { type: 'public-key', algorithm: 'rsa' },
11
+ 'EC PUBLIC KEY': { type: 'public-key', algorithm: 'ec' },
12
+ 'CERTIFICATE': { type: 'certificate' },
13
+ 'X509 CERTIFICATE': { type: 'certificate' },
14
+ 'CERTIFICATE REQUEST': { type: 'csr' },
15
+ };
16
+ export function detectKeyAlgorithm(content) {
17
+ if (content.includes('EC PRIVATE KEY') || content.includes('EC PUBLIC KEY'))
18
+ return 'ec';
19
+ if (content.includes('RSA PRIVATE KEY') || content.includes('RSA PUBLIC KEY'))
20
+ return 'rsa';
21
+ // Check for EC curve OIDs
22
+ const ecOidPatterns = ['BggqhkjOPQMBBw', 'BgUrgQQAIg', 'BgUrgQQAIw'];
23
+ for (const pattern of ecOidPatterns) {
24
+ if (content.includes(pattern))
25
+ return 'ec';
26
+ }
27
+ // Size-based heuristic for generic keys
28
+ const keyMatch = /-----BEGIN (?:PRIVATE KEY|PUBLIC KEY)-----\s*([\s\S]*?)\s*-----END/;
29
+ const keyContent = keyMatch.exec(content);
30
+ if (keyContent) {
31
+ const keyBase64 = keyContent[1].replace(/\s/g, '');
32
+ if (keyBase64.length < 400)
33
+ return 'ec';
34
+ if (keyBase64.length > 1000)
35
+ return 'rsa';
36
+ }
37
+ return 'unknown';
38
+ }
39
+ export function detectPurpose(filename, type, algorithm, headers) {
40
+ const lowerFilename = filename.toLowerCase();
41
+ if (lowerFilename.endsWith('.p8') || lowerFilename.includes('authkey')) {
42
+ if (type === 'private-key' && algorithm === 'ec') {
43
+ return 'Apple Push Notification Service (APNS) authentication key';
44
+ }
45
+ return 'Apple authentication key (.p8)';
46
+ }
47
+ if (lowerFilename.includes('ssl') || lowerFilename.includes('tls')) {
48
+ if (type === 'certificate')
49
+ return 'SSL/TLS certificate';
50
+ if (type === 'private-key')
51
+ return 'SSL/TLS private key';
52
+ if (type === 'bundle')
53
+ return 'SSL/TLS certificate bundle';
54
+ }
55
+ if (lowerFilename.includes('ca') || lowerFilename.includes('root') || lowerFilename.includes('intermediate')) {
56
+ if (type === 'certificate')
57
+ return 'Certificate Authority (CA) certificate';
58
+ if (type === 'bundle')
59
+ return 'CA certificate chain';
60
+ }
61
+ // JWT/API signing (check before generic "sign" to avoid false matches)
62
+ if (lowerFilename.includes('jwt') || lowerFilename.includes('signing')) {
63
+ if (type === 'private-key')
64
+ return 'JWT/API signing key';
65
+ if (type === 'public-key')
66
+ return 'JWT/API verification key';
67
+ }
68
+ // Code signing (codesign specifically, not just "sign")
69
+ if (lowerFilename.includes('codesign') || (lowerFilename.includes('sign') && !lowerFilename.includes('signing'))) {
70
+ if (type === 'certificate')
71
+ return 'Code signing certificate';
72
+ if (type === 'private-key')
73
+ return 'Code signing private key';
74
+ }
75
+ if (lowerFilename.includes('ssh') || lowerFilename.startsWith('id_') || headers?.some(h => h.includes('OPENSSH'))) {
76
+ if (type === 'private-key')
77
+ return 'SSH private key';
78
+ if (type === 'public-key')
79
+ return 'SSH public key';
80
+ }
81
+ if (type === 'certificate')
82
+ return 'X.509 certificate';
83
+ if (type === 'bundle')
84
+ return 'Certificate bundle/chain';
85
+ if (type === 'csr')
86
+ return 'Certificate Signing Request (CSR)';
87
+ if (type === 'encrypted-key')
88
+ return 'Encrypted private key (password protected)';
89
+ return undefined;
90
+ }
91
+ export function analyzePEMContent(content, filename) {
92
+ const headerRegex = /-----BEGIN ([A-Z0-9 ]+)-----/g;
93
+ const headers = [];
94
+ let match;
95
+ while ((match = headerRegex.exec(content)) !== null) {
96
+ headers.push(match[1]);
97
+ }
98
+ if (headers.length === 0)
99
+ return null;
100
+ const certificateCount = headers.filter(h => h.includes('CERTIFICATE')).length;
101
+ const privateKeyHeaders = headers.filter(h => h.includes('PRIVATE KEY'));
102
+ const publicKeyHeaders = headers.filter(h => h.includes('PUBLIC KEY'));
103
+ const csrHeaders = headers.filter(h => h.includes('CERTIFICATE REQUEST'));
104
+ let type = 'unknown';
105
+ let algorithm;
106
+ if (certificateCount > 1 || (certificateCount >= 1 && privateKeyHeaders.length >= 1)) {
107
+ type = 'bundle';
108
+ }
109
+ else if (privateKeyHeaders.length > 0) {
110
+ const keyHeader = privateKeyHeaders[0];
111
+ const mapping = PEM_HEADER_MAP[keyHeader];
112
+ type = mapping?.type ?? 'private-key';
113
+ algorithm = mapping?.algorithm;
114
+ if (keyHeader.includes('ENCRYPTED'))
115
+ type = 'encrypted-key';
116
+ }
117
+ else if (publicKeyHeaders.length > 0) {
118
+ const keyHeader = publicKeyHeaders[0];
119
+ const mapping = PEM_HEADER_MAP[keyHeader];
120
+ type = mapping?.type ?? 'public-key';
121
+ algorithm = mapping?.algorithm;
122
+ }
123
+ else if (csrHeaders.length > 0) {
124
+ type = 'csr';
125
+ }
126
+ else if (certificateCount > 0) {
127
+ type = 'certificate';
128
+ }
129
+ if (!algorithm && (type === 'private-key' || type === 'public-key')) {
130
+ algorithm = detectKeyAlgorithm(content);
131
+ }
132
+ const detectedPurpose = detectPurpose(filename, type, algorithm, headers);
133
+ const lowerFilename = filename.toLowerCase();
134
+ const isAppleP8 = type === 'private-key' && algorithm === 'ec' &&
135
+ (lowerFilename.endsWith('.p8') || lowerFilename.includes('authkey'));
136
+ return {
137
+ type,
138
+ algorithm,
139
+ pemHeaders: headers,
140
+ blockCount: headers.length,
141
+ certificateCount: certificateCount > 0 ? certificateCount : undefined,
142
+ detectedPurpose,
143
+ isAppleP8: isAppleP8 || undefined,
144
+ };
145
+ }
146
+ export function detectMimeType(content) {
147
+ const text = content.toString('utf8', 0, 100);
148
+ if (text.includes('-----BEGIN'))
149
+ return 'application/x-pem-file';
150
+ return 'application/octet-stream';
151
+ }
152
+ export async function analyzeFileForSuggestion(filePath) {
153
+ const fs = await import('fs');
154
+ const pathModule = await import('path');
155
+ if (!fs.existsSync(filePath))
156
+ return null;
157
+ const content = fs.readFileSync(filePath);
158
+ const filename = pathModule.basename(filePath);
159
+ const extension = pathModule.extname(filePath).toLowerCase();
160
+ const mimeType = detectMimeType(content);
161
+ const result = {
162
+ filename,
163
+ extension,
164
+ mimeType,
165
+ size: content.length,
166
+ };
167
+ // Analyze PEM content for relevant file types
168
+ const pemExtensions = ['.pem', '.crt', '.cer', '.key', '.p8', '.p12', '.pfx', '.pub'];
169
+ if (mimeType === 'application/x-pem-file' || pemExtensions.includes(extension)) {
170
+ const textContent = content.toString('utf8');
171
+ const pemInfo = analyzePEMContent(textContent, filename);
172
+ if (pemInfo) {
173
+ result.pemInfo = pemInfo;
174
+ }
175
+ }
176
+ return result;
177
+ }
178
+ export function formatPemType(type) {
179
+ const typeMap = {
180
+ 'private-key': 'Private Key',
181
+ 'public-key': 'Public Key',
182
+ 'certificate': 'X.509 Certificate',
183
+ 'csr': 'Certificate Signing Request',
184
+ 'bundle': 'Certificate Bundle/Chain',
185
+ 'encrypted-key': 'Encrypted Private Key',
186
+ 'unknown': 'Unknown PEM format',
187
+ };
188
+ return typeMap[type] ?? type;
189
+ }
190
+ //# sourceMappingURL=pem-analysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pem-analysis.js","sourceRoot":"","sources":["../../../src/commands/secret/pem-analysis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Check if a string looks like a UUID
3
+ */
4
+ export declare function isUUID(str: string): boolean;
5
+ /**
6
+ * Resolve a secret identifier to a UUID.
7
+ * Supports formats:
8
+ * - UUID: pass through directly
9
+ * - alias:path: resolve via /v1/secrets/alias/:alias (tenant from JWT)
10
+ * - path/to/secret: resolve via /v1/secrets/alias/:alias (tenant from JWT)
11
+ * - simple-name: resolve via /v1/secrets/alias/:alias (tenant from JWT)
12
+ *
13
+ * Note: The alias is the full path (e.g., "zn-admin/config"), NOT tenant/alias.
14
+ * Tenant is always derived from the authenticated user's JWT.
15
+ */
16
+ export declare function resolveSecretId(idOrAlias: string): Promise<string>;
17
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../src/commands/secret/resolve.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE3C;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAcxE"}
@@ -0,0 +1,36 @@
1
+ // Path: src/commands/secret/resolve.ts
2
+ /**
3
+ * Secret ID/alias resolution utilities
4
+ */
5
+ import { client } from '../../lib/client.js';
6
+ /**
7
+ * Check if a string looks like a UUID
8
+ */
9
+ export function isUUID(str) {
10
+ return /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i.test(str);
11
+ }
12
+ /**
13
+ * Resolve a secret identifier to a UUID.
14
+ * Supports formats:
15
+ * - UUID: pass through directly
16
+ * - alias:path: resolve via /v1/secrets/alias/:alias (tenant from JWT)
17
+ * - path/to/secret: resolve via /v1/secrets/alias/:alias (tenant from JWT)
18
+ * - simple-name: resolve via /v1/secrets/alias/:alias (tenant from JWT)
19
+ *
20
+ * Note: The alias is the full path (e.g., "zn-admin/config"), NOT tenant/alias.
21
+ * Tenant is always derived from the authenticated user's JWT.
22
+ */
23
+ export async function resolveSecretId(idOrAlias) {
24
+ // Already a UUID - pass through
25
+ if (isUUID(idOrAlias)) {
26
+ return idOrAlias;
27
+ }
28
+ // Strip optional "alias:" prefix
29
+ const alias = idOrAlias.startsWith('alias:')
30
+ ? idOrAlias.slice(6)
31
+ : idOrAlias;
32
+ // Resolve alias to UUID via API (tenant derived from JWT)
33
+ const metadata = await client.get(`/v1/secrets/alias/${encodeURIComponent(alias)}`);
34
+ return metadata.id;
35
+ }
36
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/commands/secret/resolve.ts"],"names":[],"mappings":"AAAA,uCAAuC;AAEvC;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAG7C;;GAEG;AACH,MAAM,UAAU,MAAM,CAAC,GAAW;IAChC,OAAO,iEAAiE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrF,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,SAAiB;IACrD,gCAAgC;IAChC,IAAI,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,iCAAiC;IACjC,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC;QAC1C,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QACpB,CAAC,CAAC,SAAS,CAAC;IAEd,0DAA0D;IAC1D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAiB,qBAAqB,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpG,OAAO,QAAQ,CAAC,EAAE,CAAC;AACrB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Secret rotate command
3
+ */
4
+ import type { Command } from 'commander';
5
+ export declare function registerRotateCommand(secretCmd: Command): void;
6
+ //# sourceMappingURL=rotate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rotate.d.ts","sourceRoot":"","sources":["../../../src/commands/secret/rotate.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAsE9D"}