@zincapp/znvault-cli 2.16.5 → 2.18.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 (348) hide show
  1. package/dist/commands/apikey/conditions.d.ts +6 -0
  2. package/dist/commands/apikey/conditions.d.ts.map +1 -0
  3. package/dist/commands/apikey/conditions.js +57 -0
  4. package/dist/commands/apikey/conditions.js.map +1 -0
  5. package/dist/commands/apikey/create.d.ts +6 -0
  6. package/dist/commands/apikey/create.d.ts.map +1 -0
  7. package/dist/commands/apikey/create.js +106 -0
  8. package/dist/commands/apikey/create.js.map +1 -0
  9. package/dist/commands/apikey/delete.d.ts +6 -0
  10. package/dist/commands/apikey/delete.d.ts.map +1 -0
  11. package/dist/commands/apikey/delete.js +29 -0
  12. package/dist/commands/apikey/delete.js.map +1 -0
  13. package/dist/commands/apikey/enable-disable.d.ts +6 -0
  14. package/dist/commands/apikey/enable-disable.d.ts.map +1 -0
  15. package/dist/commands/apikey/enable-disable.js +44 -0
  16. package/dist/commands/apikey/enable-disable.js.map +1 -0
  17. package/dist/commands/apikey/helpers.d.ts +23 -0
  18. package/dist/commands/apikey/helpers.d.ts.map +1 -0
  19. package/dist/commands/apikey/helpers.js +135 -0
  20. package/dist/commands/apikey/helpers.js.map +1 -0
  21. package/dist/commands/apikey/index.d.ts +10 -0
  22. package/dist/commands/apikey/index.d.ts.map +1 -0
  23. package/dist/commands/apikey/index.js +33 -0
  24. package/dist/commands/apikey/index.js.map +1 -0
  25. package/dist/commands/apikey/list.d.ts +6 -0
  26. package/dist/commands/apikey/list.d.ts.map +1 -0
  27. package/dist/commands/apikey/list.js +74 -0
  28. package/dist/commands/apikey/list.js.map +1 -0
  29. package/dist/commands/apikey/managed/bind.d.ts +6 -0
  30. package/dist/commands/apikey/managed/bind.d.ts.map +1 -0
  31. package/dist/commands/apikey/managed/bind.js +52 -0
  32. package/dist/commands/apikey/managed/bind.js.map +1 -0
  33. package/dist/commands/apikey/managed/conditions.d.ts +6 -0
  34. package/dist/commands/apikey/managed/conditions.d.ts.map +1 -0
  35. package/dist/commands/apikey/managed/conditions.js +62 -0
  36. package/dist/commands/apikey/managed/conditions.js.map +1 -0
  37. package/dist/commands/apikey/managed/config.d.ts +6 -0
  38. package/dist/commands/apikey/managed/config.d.ts.map +1 -0
  39. package/dist/commands/apikey/managed/config.js +52 -0
  40. package/dist/commands/apikey/managed/config.js.map +1 -0
  41. package/dist/commands/apikey/managed/create.d.ts +6 -0
  42. package/dist/commands/apikey/managed/create.d.ts.map +1 -0
  43. package/dist/commands/apikey/managed/create.js +82 -0
  44. package/dist/commands/apikey/managed/create.js.map +1 -0
  45. package/dist/commands/apikey/managed/delete.d.ts +6 -0
  46. package/dist/commands/apikey/managed/delete.d.ts.map +1 -0
  47. package/dist/commands/apikey/managed/delete.js +29 -0
  48. package/dist/commands/apikey/managed/delete.js.map +1 -0
  49. package/dist/commands/apikey/managed/get.d.ts +6 -0
  50. package/dist/commands/apikey/managed/get.d.ts.map +1 -0
  51. package/dist/commands/apikey/managed/get.js +31 -0
  52. package/dist/commands/apikey/managed/get.js.map +1 -0
  53. package/dist/commands/apikey/managed/helpers.d.ts +5 -0
  54. package/dist/commands/apikey/managed/helpers.d.ts.map +1 -0
  55. package/dist/commands/apikey/managed/helpers.js +70 -0
  56. package/dist/commands/apikey/managed/helpers.js.map +1 -0
  57. package/dist/commands/apikey/managed/index.d.ts +7 -0
  58. package/dist/commands/apikey/managed/index.d.ts.map +1 -0
  59. package/dist/commands/apikey/managed/index.js +27 -0
  60. package/dist/commands/apikey/managed/index.js.map +1 -0
  61. package/dist/commands/apikey/managed/list.d.ts +6 -0
  62. package/dist/commands/apikey/managed/list.d.ts.map +1 -0
  63. package/dist/commands/apikey/managed/list.js +58 -0
  64. package/dist/commands/apikey/managed/list.js.map +1 -0
  65. package/dist/commands/apikey/managed/permissions.d.ts +6 -0
  66. package/dist/commands/apikey/managed/permissions.d.ts.map +1 -0
  67. package/dist/commands/apikey/managed/permissions.js +73 -0
  68. package/dist/commands/apikey/managed/permissions.js.map +1 -0
  69. package/dist/commands/apikey/managed/rotate.d.ts +6 -0
  70. package/dist/commands/apikey/managed/rotate.d.ts.map +1 -0
  71. package/dist/commands/apikey/managed/rotate.js +29 -0
  72. package/dist/commands/apikey/managed/rotate.js.map +1 -0
  73. package/dist/commands/apikey/managed/types.d.ts +62 -0
  74. package/dist/commands/apikey/managed/types.d.ts.map +1 -0
  75. package/dist/commands/apikey/managed/types.js +3 -0
  76. package/dist/commands/apikey/managed/types.js.map +1 -0
  77. package/dist/commands/apikey/permissions.d.ts +6 -0
  78. package/dist/commands/apikey/permissions.d.ts.map +1 -0
  79. package/dist/commands/apikey/permissions.js +70 -0
  80. package/dist/commands/apikey/permissions.js.map +1 -0
  81. package/dist/commands/apikey/policies.d.ts +6 -0
  82. package/dist/commands/apikey/policies.d.ts.map +1 -0
  83. package/dist/commands/apikey/policies.js +82 -0
  84. package/dist/commands/apikey/policies.js.map +1 -0
  85. package/dist/commands/apikey/rotate.d.ts +6 -0
  86. package/dist/commands/apikey/rotate.d.ts.map +1 -0
  87. package/dist/commands/apikey/rotate.js +42 -0
  88. package/dist/commands/apikey/rotate.js.map +1 -0
  89. package/dist/commands/apikey/self.d.ts +6 -0
  90. package/dist/commands/apikey/self.d.ts.map +1 -0
  91. package/dist/commands/apikey/self.js +96 -0
  92. package/dist/commands/apikey/self.js.map +1 -0
  93. package/dist/commands/apikey/show.d.ts +6 -0
  94. package/dist/commands/apikey/show.d.ts.map +1 -0
  95. package/dist/commands/apikey/show.js +79 -0
  96. package/dist/commands/apikey/show.js.map +1 -0
  97. package/dist/commands/apikey/types.d.ts +83 -0
  98. package/dist/commands/apikey/types.d.ts.map +1 -0
  99. package/dist/commands/apikey/types.js +3 -0
  100. package/dist/commands/apikey/types.js.map +1 -0
  101. package/dist/commands/apikey.d.ts +8 -2
  102. package/dist/commands/apikey.d.ts.map +1 -1
  103. package/dist/commands/apikey.js +9 -1296
  104. package/dist/commands/apikey.js.map +1 -1
  105. package/dist/commands/audit.d.ts.map +1 -1
  106. package/dist/commands/audit.js +7 -1
  107. package/dist/commands/audit.js.map +1 -1
  108. package/dist/commands/auth.d.ts.map +1 -1
  109. package/dist/commands/auth.js +31 -10
  110. package/dist/commands/auth.js.map +1 -1
  111. package/dist/commands/cert.d.ts.map +1 -1
  112. package/dist/commands/cert.js +25 -1
  113. package/dist/commands/cert.js.map +1 -1
  114. package/dist/commands/cluster.d.ts.map +1 -1
  115. package/dist/commands/cluster.js +46 -17
  116. package/dist/commands/cluster.js.map +1 -1
  117. package/dist/commands/device.d.ts.map +1 -1
  118. package/dist/commands/device.js +8 -5
  119. package/dist/commands/device.js.map +1 -1
  120. package/dist/commands/dynamic-secrets.d.ts.map +1 -1
  121. package/dist/commands/dynamic-secrets.js +12 -0
  122. package/dist/commands/dynamic-secrets.js.map +1 -1
  123. package/dist/commands/emergency.d.ts.map +1 -1
  124. package/dist/commands/emergency.js +37 -1
  125. package/dist/commands/emergency.js.map +1 -1
  126. package/dist/commands/kms.d.ts.map +1 -1
  127. package/dist/commands/kms.js +19 -4
  128. package/dist/commands/kms.js.map +1 -1
  129. package/dist/commands/lockdown.d.ts.map +1 -1
  130. package/dist/commands/lockdown.js +10 -0
  131. package/dist/commands/lockdown.js.map +1 -1
  132. package/dist/commands/notification.d.ts.map +1 -1
  133. package/dist/commands/notification.js +51 -15
  134. package/dist/commands/notification.js.map +1 -1
  135. package/dist/commands/plugin.d.ts.map +1 -1
  136. package/dist/commands/plugin.js +97 -12
  137. package/dist/commands/plugin.js.map +1 -1
  138. package/dist/commands/policy.d.ts.map +1 -1
  139. package/dist/commands/policy.js +148 -35
  140. package/dist/commands/policy.js.map +1 -1
  141. package/dist/commands/role.d.ts.map +1 -1
  142. package/dist/commands/role.js +11 -1
  143. package/dist/commands/role.js.map +1 -1
  144. package/dist/commands/secret/copy.d.ts +6 -0
  145. package/dist/commands/secret/copy.d.ts.map +1 -0
  146. package/dist/commands/secret/copy.js +43 -0
  147. package/dist/commands/secret/copy.js.map +1 -0
  148. package/dist/commands/secret/create.d.ts +6 -0
  149. package/dist/commands/secret/create.d.ts.map +1 -0
  150. package/dist/commands/secret/create.js +297 -0
  151. package/dist/commands/secret/create.js.map +1 -0
  152. package/dist/commands/secret/decrypt.d.ts +6 -0
  153. package/dist/commands/secret/decrypt.d.ts.map +1 -0
  154. package/dist/commands/secret/decrypt.js +104 -0
  155. package/dist/commands/secret/decrypt.js.map +1 -0
  156. package/dist/commands/secret/delete.d.ts +6 -0
  157. package/dist/commands/secret/delete.d.ts.map +1 -0
  158. package/dist/commands/secret/delete.js +60 -0
  159. package/dist/commands/secret/delete.js.map +1 -0
  160. package/dist/commands/secret/get.d.ts +6 -0
  161. package/dist/commands/secret/get.d.ts.map +1 -0
  162. package/dist/commands/secret/get.js +60 -0
  163. package/dist/commands/secret/get.js.map +1 -0
  164. package/dist/commands/secret/helpers.d.ts +11 -0
  165. package/dist/commands/secret/helpers.d.ts.map +1 -0
  166. package/dist/commands/secret/helpers.js +59 -0
  167. package/dist/commands/secret/helpers.js.map +1 -0
  168. package/dist/commands/secret/history.d.ts +6 -0
  169. package/dist/commands/secret/history.d.ts.map +1 -0
  170. package/dist/commands/secret/history.js +52 -0
  171. package/dist/commands/secret/history.js.map +1 -0
  172. package/dist/commands/secret/index.d.ts +12 -0
  173. package/dist/commands/secret/index.d.ts.map +1 -0
  174. package/dist/commands/secret/index.js +49 -0
  175. package/dist/commands/secret/index.js.map +1 -0
  176. package/dist/commands/secret/list.d.ts +6 -0
  177. package/dist/commands/secret/list.d.ts.map +1 -0
  178. package/dist/commands/secret/list.js +72 -0
  179. package/dist/commands/secret/list.js.map +1 -0
  180. package/dist/commands/secret/pem-analysis.d.ts +32 -0
  181. package/dist/commands/secret/pem-analysis.d.ts.map +1 -0
  182. package/dist/commands/secret/pem-analysis.js +190 -0
  183. package/dist/commands/secret/pem-analysis.js.map +1 -0
  184. package/dist/commands/secret/resolve.d.ts +17 -0
  185. package/dist/commands/secret/resolve.d.ts.map +1 -0
  186. package/dist/commands/secret/resolve.js +36 -0
  187. package/dist/commands/secret/resolve.js.map +1 -0
  188. package/dist/commands/secret/rotate.d.ts +6 -0
  189. package/dist/commands/secret/rotate.d.ts.map +1 -0
  190. package/dist/commands/secret/rotate.js +72 -0
  191. package/dist/commands/secret/rotate.js.map +1 -0
  192. package/dist/commands/secret/types.d.ts +123 -0
  193. package/dist/commands/secret/types.d.ts.map +1 -0
  194. package/dist/commands/secret/types.js +3 -0
  195. package/dist/commands/secret/types.js.map +1 -0
  196. package/dist/commands/secret/update.d.ts +6 -0
  197. package/dist/commands/secret/update.d.ts.map +1 -0
  198. package/dist/commands/secret/update.js +124 -0
  199. package/dist/commands/secret/update.js.map +1 -0
  200. package/dist/commands/secret.d.ts +8 -2
  201. package/dist/commands/secret.d.ts.map +1 -1
  202. package/dist/commands/secret.js +6 -1131
  203. package/dist/commands/secret.js.map +1 -1
  204. package/dist/commands/self-update.d.ts.map +1 -1
  205. package/dist/commands/self-update.js +51 -5
  206. package/dist/commands/self-update.js.map +1 -1
  207. package/dist/commands/superadmin.d.ts.map +1 -1
  208. package/dist/commands/superadmin.js +23 -7
  209. package/dist/commands/superadmin.js.map +1 -1
  210. package/dist/commands/tenant.d.ts.map +1 -1
  211. package/dist/commands/tenant.js +4 -0
  212. package/dist/commands/tenant.js.map +1 -1
  213. package/dist/commands/update.d.ts.map +1 -1
  214. package/dist/commands/update.js +13 -0
  215. package/dist/commands/update.js.map +1 -1
  216. package/dist/commands/user.d.ts.map +1 -1
  217. package/dist/commands/user.js +35 -8
  218. package/dist/commands/user.js.map +1 -1
  219. package/dist/index.js +48 -4
  220. package/dist/index.js.map +1 -1
  221. package/dist/lib/client/apikeys.d.ts +34 -0
  222. package/dist/lib/client/apikeys.d.ts.map +1 -0
  223. package/dist/lib/client/apikeys.js +113 -0
  224. package/dist/lib/client/apikeys.js.map +1 -0
  225. package/dist/lib/client/audit.d.ts +21 -0
  226. package/dist/lib/client/audit.d.ts.map +1 -0
  227. package/dist/lib/client/audit.js +40 -0
  228. package/dist/lib/client/audit.js.map +1 -0
  229. package/dist/lib/client/health.d.ts +30 -0
  230. package/dist/lib/client/health.d.ts.map +1 -0
  231. package/dist/lib/client/health.js +55 -0
  232. package/dist/lib/client/health.js.map +1 -0
  233. package/dist/lib/client/http.d.ts +50 -0
  234. package/dist/lib/client/http.d.ts.map +1 -0
  235. package/dist/lib/client/http.js +333 -0
  236. package/dist/lib/client/http.js.map +1 -0
  237. package/dist/lib/client/index.d.ts +156 -0
  238. package/dist/lib/client/index.d.ts.map +1 -0
  239. package/dist/lib/client/index.js +172 -0
  240. package/dist/lib/client/index.js.map +1 -0
  241. package/dist/lib/client/lockdown.d.ts +23 -0
  242. package/dist/lib/client/lockdown.d.ts.map +1 -0
  243. package/dist/lib/client/lockdown.js +48 -0
  244. package/dist/lib/client/lockdown.js.map +1 -0
  245. package/dist/lib/client/managed-keys.d.ts +18 -0
  246. package/dist/lib/client/managed-keys.d.ts.map +1 -0
  247. package/dist/lib/client/managed-keys.js +190 -0
  248. package/dist/lib/client/managed-keys.js.map +1 -0
  249. package/dist/lib/client/policies.d.ts +35 -0
  250. package/dist/lib/client/policies.d.ts.map +1 -0
  251. package/dist/lib/client/policies.js +131 -0
  252. package/dist/lib/client/policies.js.map +1 -0
  253. package/dist/lib/client/tenants.d.ts +29 -0
  254. package/dist/lib/client/tenants.d.ts.map +1 -0
  255. package/dist/lib/client/tenants.js +56 -0
  256. package/dist/lib/client/tenants.js.map +1 -0
  257. package/dist/lib/client/types.d.ts +45 -0
  258. package/dist/lib/client/types.d.ts.map +1 -0
  259. package/dist/lib/client/types.js +3 -0
  260. package/dist/lib/client/types.js.map +1 -0
  261. package/dist/lib/client/users.d.ts +44 -0
  262. package/dist/lib/client/users.d.ts.map +1 -0
  263. package/dist/lib/client/users.js +116 -0
  264. package/dist/lib/client/users.js.map +1 -0
  265. package/dist/lib/client.d.ts +11 -246
  266. package/dist/lib/client.d.ts.map +1 -1
  267. package/dist/lib/client.js +10 -999
  268. package/dist/lib/client.js.map +1 -1
  269. package/dist/lib/command-error-handler.d.ts +99 -0
  270. package/dist/lib/command-error-handler.d.ts.map +1 -0
  271. package/dist/lib/command-error-handler.js +108 -0
  272. package/dist/lib/command-error-handler.js.map +1 -0
  273. package/dist/lib/config/apikey.d.ts +29 -0
  274. package/dist/lib/config/apikey.d.ts.map +1 -0
  275. package/dist/lib/config/apikey.js +58 -0
  276. package/dist/lib/config/apikey.js.map +1 -0
  277. package/dist/lib/config/cache.d.ts +47 -0
  278. package/dist/lib/config/cache.d.ts.map +1 -0
  279. package/dist/lib/config/cache.js +84 -0
  280. package/dist/lib/config/cache.js.map +1 -0
  281. package/dist/lib/config/credentials.d.ts +33 -0
  282. package/dist/lib/config/credentials.d.ts.map +1 -0
  283. package/dist/lib/config/credentials.js +70 -0
  284. package/dist/lib/config/credentials.js.map +1 -0
  285. package/dist/lib/config/getters.d.ts +28 -0
  286. package/dist/lib/config/getters.d.ts.map +1 -0
  287. package/dist/lib/config/getters.js +65 -0
  288. package/dist/lib/config/getters.js.map +1 -0
  289. package/dist/lib/config/index.d.ts +17 -0
  290. package/dist/lib/config/index.d.ts.map +1 -0
  291. package/dist/lib/config/index.js +21 -0
  292. package/dist/lib/config/index.js.map +1 -0
  293. package/dist/lib/config/migration.d.ts +10 -0
  294. package/dist/lib/config/migration.d.ts.map +1 -0
  295. package/dist/lib/config/migration.js +59 -0
  296. package/dist/lib/config/migration.js.map +1 -0
  297. package/dist/lib/config/plugins.d.ts +25 -0
  298. package/dist/lib/config/plugins.d.ts.map +1 -0
  299. package/dist/lib/config/plugins.js +58 -0
  300. package/dist/lib/config/plugins.js.map +1 -0
  301. package/dist/lib/config/profile.d.ts +42 -0
  302. package/dist/lib/config/profile.d.ts.map +1 -0
  303. package/dist/lib/config/profile.js +154 -0
  304. package/dist/lib/config/profile.js.map +1 -0
  305. package/dist/lib/config/store.d.ts +23 -0
  306. package/dist/lib/config/store.d.ts.map +1 -0
  307. package/dist/lib/config/store.js +41 -0
  308. package/dist/lib/config/store.js.map +1 -0
  309. package/dist/lib/config/types.d.ts +44 -0
  310. package/dist/lib/config/types.d.ts.map +1 -0
  311. package/dist/lib/config/types.js +8 -0
  312. package/dist/lib/config/types.js.map +1 -0
  313. package/dist/lib/config/validation.d.ts +38 -0
  314. package/dist/lib/config/validation.d.ts.map +1 -0
  315. package/dist/lib/config/validation.js +146 -0
  316. package/dist/lib/config/validation.js.map +1 -0
  317. package/dist/lib/config.d.ts +5 -158
  318. package/dist/lib/config.d.ts.map +1 -1
  319. package/dist/lib/config.js +26 -424
  320. package/dist/lib/config.js.map +1 -1
  321. package/dist/lib/constants.d.ts +65 -0
  322. package/dist/lib/constants.d.ts.map +1 -0
  323. package/dist/lib/constants.js +90 -0
  324. package/dist/lib/constants.js.map +1 -0
  325. package/dist/lib/db.d.ts +4 -0
  326. package/dist/lib/db.d.ts.map +1 -1
  327. package/dist/lib/db.js +77 -46
  328. package/dist/lib/db.js.map +1 -1
  329. package/dist/lib/format-helpers.d.ts +63 -0
  330. package/dist/lib/format-helpers.d.ts.map +1 -0
  331. package/dist/lib/format-helpers.js +219 -0
  332. package/dist/lib/format-helpers.js.map +1 -0
  333. package/dist/lib/validation-helpers.d.ts +132 -0
  334. package/dist/lib/validation-helpers.d.ts.map +1 -0
  335. package/dist/lib/validation-helpers.js +319 -0
  336. package/dist/lib/validation-helpers.js.map +1 -0
  337. package/dist/lib/visual.d.ts +22 -0
  338. package/dist/lib/visual.d.ts.map +1 -1
  339. package/dist/lib/visual.js +83 -0
  340. package/dist/lib/visual.js.map +1 -1
  341. package/dist/services/signature-verifier.d.ts.map +1 -1
  342. package/dist/services/signature-verifier.js +11 -4
  343. package/dist/services/signature-verifier.js.map +1 -1
  344. package/dist/services/update-installer.d.ts +7 -0
  345. package/dist/services/update-installer.d.ts.map +1 -1
  346. package/dist/services/update-installer.js +58 -19
  347. package/dist/services/update-installer.js.map +1 -1
  348. package/package.json +1 -1
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Secret create command
3
+ */
4
+ import type { Command } from 'commander';
5
+ export declare function registerCreateCommand(secretCmd: Command): void;
6
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/secret/create.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CA4T9D"}
@@ -0,0 +1,297 @@
1
+ // Path: src/commands/secret/create.ts
2
+ import ora from 'ora';
3
+ import inquirer from 'inquirer';
4
+ import { client } from '../../lib/client.js';
5
+ import * as output from '../../lib/output.js';
6
+ import { getAuthContext } from '../../lib/auth-context.js';
7
+ import { formatBytes } from './helpers.js';
8
+ import { analyzeFileForSuggestion, formatPemType } from './pem-analysis.js';
9
+ export function registerCreateCommand(secretCmd) {
10
+ secretCmd
11
+ .command('create <alias>')
12
+ .description('Create a new secret (use --suggest for AI naming help)')
13
+ .option('-t, --tenant <id>', 'Tenant ID (defaults to current user tenant)')
14
+ .option('--type <type>', 'Secret type (opaque, credential, setting)', 'opaque')
15
+ .option('--sub-type <subType>', 'Semantic sub-type')
16
+ .option('--tags <tags>', 'Comma-separated tags')
17
+ .option('--ttl <datetime>', 'TTL expiration (ISO 8601)')
18
+ .option('--expires <datetime>', 'Natural expiration (ISO 8601)')
19
+ .option('--content-type <mime>', 'Content type for settings')
20
+ .option('--json', 'Output as JSON')
21
+ .option('--suggest', 'Get AI suggestions for naming (alias becomes description)')
22
+ // Non-interactive data options
23
+ .option('--username <username>', 'Username for credential type (non-interactive)')
24
+ .option('--password <password>', 'Password for credential type (non-interactive)')
25
+ .option('--text <text>', 'Text content (non-interactive)')
26
+ .option('--data <json>', 'JSON data (non-interactive)')
27
+ .option('--file <path>', 'File to upload (non-interactive)')
28
+ .action(async (aliasOrDescription, options) => {
29
+ let alias = aliasOrDescription;
30
+ let actualType = options.type || 'opaque';
31
+ let actualSubType = options.subType;
32
+ let actualTags = options.tags;
33
+ // AI Suggestion flow
34
+ if (options.suggest) {
35
+ const tenant = options.tenant || 'me';
36
+ // Analyze file if --file is provided
37
+ let fileInfo = null;
38
+ if (options.file) {
39
+ const analyzeSpinner = ora('Analyzing file...').start();
40
+ fileInfo = await analyzeFileForSuggestion(options.file);
41
+ analyzeSpinner.stop();
42
+ if (fileInfo) {
43
+ output.section('File Analysis');
44
+ const analysisInfo = {
45
+ 'Filename': fileInfo.filename,
46
+ 'Extension': fileInfo.extension,
47
+ 'MIME Type': fileInfo.mimeType,
48
+ 'Size': formatBytes(fileInfo.size),
49
+ };
50
+ if (fileInfo.pemInfo) {
51
+ analysisInfo['PEM Type'] = formatPemType(fileInfo.pemInfo.type);
52
+ if (fileInfo.pemInfo.algorithm) {
53
+ analysisInfo['Algorithm'] = fileInfo.pemInfo.algorithm.toUpperCase();
54
+ }
55
+ if (fileInfo.pemInfo.detectedPurpose) {
56
+ analysisInfo['Detected Purpose'] = fileInfo.pemInfo.detectedPurpose;
57
+ }
58
+ if (fileInfo.pemInfo.isAppleP8) {
59
+ analysisInfo['Special'] = 'Apple .p8 authentication key';
60
+ }
61
+ if (fileInfo.pemInfo.certificateCount && fileInfo.pemInfo.certificateCount > 1) {
62
+ analysisInfo['Certificates'] = `${fileInfo.pemInfo.certificateCount} (chain/bundle)`;
63
+ }
64
+ }
65
+ output.keyValue(analysisInfo);
66
+ console.log();
67
+ }
68
+ }
69
+ const spinner = ora('Getting AI suggestions...').start();
70
+ try {
71
+ const body = { description: aliasOrDescription };
72
+ // Include file analysis in the request
73
+ if (fileInfo) {
74
+ body.fileInfo = fileInfo;
75
+ }
76
+ const response = await client.post(`/v1/advisor/${tenant}/suggest`, body);
77
+ spinner.stop();
78
+ const result = response.data;
79
+ // Show suggestions
80
+ output.section('AI Suggestions');
81
+ output.keyValue({
82
+ 'Suggested Alias': result.alias,
83
+ 'Type': result.type,
84
+ 'Sub-Type': result.subType || '-',
85
+ 'Tags': result.tags.join(', ') || 'none',
86
+ 'Confidence': `${Math.round(result.confidence * 100)}%`,
87
+ });
88
+ if (result.alternativeAliases && result.alternativeAliases.length > 0) {
89
+ output.info(`Alternatives: ${result.alternativeAliases.join(', ')}`);
90
+ }
91
+ if (result.warnings && result.warnings.length > 0) {
92
+ for (const w of result.warnings) {
93
+ console.log(` ⚠ ${w}`);
94
+ }
95
+ }
96
+ console.log(`\nReasoning: ${result.reasoning}\n`);
97
+ // Let user confirm or modify
98
+ const aliasChoices = [
99
+ { name: `${result.alias} (suggested)`, value: result.alias },
100
+ ...(result.alternativeAliases || []).map(a => ({ name: a, value: a })),
101
+ { name: 'Enter custom alias', value: '__custom__' },
102
+ ];
103
+ const { useAlias } = await inquirer.prompt([
104
+ {
105
+ type: 'list',
106
+ name: 'useAlias',
107
+ message: 'Use which alias?',
108
+ choices: aliasChoices,
109
+ },
110
+ ]);
111
+ if (useAlias === '__custom__') {
112
+ const { customAlias } = await inquirer.prompt([
113
+ { type: 'input', name: 'customAlias', message: 'Enter alias:' },
114
+ ]);
115
+ alias = customAlias;
116
+ }
117
+ else {
118
+ alias = useAlias;
119
+ }
120
+ // Apply suggested values (unless overridden by CLI options)
121
+ if (!options.type || options.type === 'opaque') {
122
+ actualType = result.type;
123
+ }
124
+ if (!options.subType && result.subType) {
125
+ actualSubType = result.subType;
126
+ }
127
+ if (!options.tags && result.tags.length > 0) {
128
+ actualTags = result.tags.join(',');
129
+ }
130
+ output.success(`Using alias: ${alias}`);
131
+ console.log();
132
+ }
133
+ catch (err) {
134
+ spinner.fail('Failed to get AI suggestions');
135
+ output.error(err instanceof Error ? err.message : String(err));
136
+ // Continue without suggestions?
137
+ const { continueWithout } = await inquirer.prompt([
138
+ {
139
+ type: 'confirm',
140
+ name: 'continueWithout',
141
+ message: 'Continue creating secret without AI suggestions?',
142
+ default: true,
143
+ },
144
+ ]);
145
+ if (!continueWithout) {
146
+ process.exit(0);
147
+ }
148
+ // Use the description as alias
149
+ alias = aliasOrDescription;
150
+ }
151
+ }
152
+ // Resolve tenant: use explicit option, or get from stored credentials
153
+ const authContext = getAuthContext();
154
+ const tenantId = options.tenant || authContext.tenantId;
155
+ if (!tenantId) {
156
+ output.error('Tenant is required. Use --tenant <id> or login to a tenant account.');
157
+ process.exit(1);
158
+ }
159
+ let data = {};
160
+ // Check for non-interactive data options first
161
+ const hasNonInteractiveData = options.username || options.password || options.text || options.data || options.file;
162
+ if (hasNonInteractiveData) {
163
+ // Non-interactive mode: use CLI options
164
+ if (options.username || options.password) {
165
+ actualType = 'credential';
166
+ data = {
167
+ username: options.username || '',
168
+ password: options.password || '',
169
+ };
170
+ }
171
+ else if (options.text) {
172
+ data = { text: options.text };
173
+ }
174
+ else if (options.data) {
175
+ try {
176
+ data = JSON.parse(options.data);
177
+ }
178
+ catch (e) {
179
+ output.error('Invalid JSON in --data option');
180
+ process.exit(1);
181
+ }
182
+ }
183
+ else if (options.file) {
184
+ const fs = await import('fs');
185
+ const pathModule = await import('path');
186
+ if (!fs.existsSync(options.file)) {
187
+ output.error(`File not found: ${options.file}`);
188
+ process.exit(1);
189
+ }
190
+ const content = fs.readFileSync(options.file);
191
+ const filename = pathModule.basename(options.file);
192
+ data = {
193
+ filename,
194
+ content: content.toString('base64'),
195
+ contentType: options.contentType || 'application/octet-stream',
196
+ };
197
+ }
198
+ }
199
+ else {
200
+ // Interactive mode: prompt for data
201
+ const { dataType } = await inquirer.prompt([
202
+ {
203
+ type: 'list',
204
+ name: 'dataType',
205
+ message: 'What type of data?',
206
+ choices: [
207
+ { name: 'Credential (username/password)', value: 'credential' },
208
+ { name: 'Plain Text', value: 'text' },
209
+ { name: 'Key-Value pairs', value: 'keyvalue' },
210
+ { name: 'File upload', value: 'file' },
211
+ ],
212
+ },
213
+ ]);
214
+ if (dataType === 'credential') {
215
+ actualType = 'credential';
216
+ const answers = await inquirer.prompt([
217
+ { type: 'input', name: 'username', message: 'Username:' },
218
+ { type: 'password', name: 'password', message: 'Password:', mask: '*' },
219
+ ]);
220
+ data = answers;
221
+ }
222
+ else if (dataType === 'text') {
223
+ const { text } = await inquirer.prompt([
224
+ { type: 'editor', name: 'text', message: 'Enter text content:' },
225
+ ]);
226
+ data = { text: text.trim() };
227
+ }
228
+ else if (dataType === 'keyvalue') {
229
+ console.log('Enter key-value pairs (empty key to finish):');
230
+ while (true) {
231
+ const { key } = await inquirer.prompt([
232
+ { type: 'input', name: 'key', message: 'Key:' },
233
+ ]);
234
+ if (!key)
235
+ break;
236
+ const { value } = await inquirer.prompt([
237
+ { type: 'input', name: 'value', message: `Value for "${key}":` },
238
+ ]);
239
+ data[key] = value;
240
+ }
241
+ }
242
+ else if (dataType === 'file') {
243
+ const { filePath } = await inquirer.prompt([
244
+ { type: 'input', name: 'filePath', message: 'File path:' },
245
+ ]);
246
+ const fs = await import('fs');
247
+ const pathModule = await import('path');
248
+ if (!fs.existsSync(filePath)) {
249
+ output.error(`File not found: ${filePath}`);
250
+ process.exit(1);
251
+ }
252
+ const content = fs.readFileSync(filePath);
253
+ const filename = pathModule.basename(filePath);
254
+ data = {
255
+ filename,
256
+ content: content.toString('base64'),
257
+ contentType: options.contentType || 'application/octet-stream',
258
+ };
259
+ }
260
+ }
261
+ const spinner = ora('Creating secret...').start();
262
+ try {
263
+ const body = {
264
+ alias,
265
+ tenant: tenantId,
266
+ type: actualType,
267
+ data,
268
+ };
269
+ if (actualSubType)
270
+ body.subType = actualSubType;
271
+ if (actualTags)
272
+ body.tags = actualTags.split(',').map(t => t.trim());
273
+ if (options.ttl)
274
+ body.ttlUntil = options.ttl;
275
+ if (options.expires)
276
+ body.expiresAt = options.expires;
277
+ if (options.contentType)
278
+ body.contentType = options.contentType;
279
+ const result = await client.post('/v1/secrets', body);
280
+ spinner.stop();
281
+ if (options.json) {
282
+ output.json(result);
283
+ return;
284
+ }
285
+ output.success(`Secret created successfully!`);
286
+ console.log(` ID: ${result.id}`);
287
+ console.log(` Alias: ${result.alias}`);
288
+ console.log(` Tenant: ${result.tenant}`);
289
+ }
290
+ catch (error) {
291
+ spinner.fail('Failed to create secret');
292
+ output.error(error.message);
293
+ process.exit(1);
294
+ }
295
+ });
296
+ }
297
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/secret/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Secret decrypt command
3
+ */
4
+ import type { Command } from 'commander';
5
+ export declare function registerDecryptCommand(secretCmd: Command): void;
6
+ //# sourceMappingURL=decrypt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decrypt.d.ts","sourceRoot":"","sources":["../../../src/commands/secret/decrypt.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CA+F/D"}
@@ -0,0 +1,104 @@
1
+ // Path: src/commands/secret/decrypt.ts
2
+ import ora from 'ora';
3
+ import { client } from '../../lib/client.js';
4
+ import * as output from '../../lib/output.js';
5
+ import { formatType, formatBytes } from './helpers.js';
6
+ import { resolveSecretId } from './resolve.js';
7
+ export function registerDecryptCommand(secretCmd) {
8
+ secretCmd
9
+ .command('decrypt <id-or-alias>')
10
+ .description('Decrypt and show secret value (supports UUID or tenant/alias format)')
11
+ .option('-o, --output <file>', 'Write content to file')
12
+ .option('--json', 'Output as JSON')
13
+ .addHelpText('after', `
14
+ Examples:
15
+ znvault secret decrypt zn-admin/config # by alias path
16
+ znvault secret decrypt alias:web/api-key # with alias: prefix
17
+ znvault secret decrypt abc12345-... # by UUID
18
+ znvault secret decrypt certs/server-key -o key.pem # save to file
19
+ `)
20
+ .action(async (idOrAlias, options) => {
21
+ const spinner = ora('Resolving secret...').start();
22
+ try {
23
+ // Resolve alias to UUID if needed
24
+ const id = await resolveSecretId(idOrAlias);
25
+ spinner.text = 'Decrypting secret...';
26
+ const secret = await client.post(`/v1/secrets/${id}/decrypt`, {});
27
+ spinner.stop();
28
+ if (options.json) {
29
+ output.json(secret);
30
+ return;
31
+ }
32
+ // If output file specified and it's a file-based secret
33
+ if (options.output && secret.data) {
34
+ const fs = await import('fs');
35
+ // Check if it's a file-based secret
36
+ if ('content' in secret.data && typeof secret.data.content === 'string') {
37
+ const content = Buffer.from(secret.data.content, 'base64');
38
+ fs.writeFileSync(options.output, content);
39
+ output.success(`File written to: ${options.output}`);
40
+ return;
41
+ }
42
+ // Otherwise write JSON
43
+ fs.writeFileSync(options.output, JSON.stringify(secret.data, null, 2));
44
+ output.success(`Data written to: ${options.output}`);
45
+ return;
46
+ }
47
+ // Display metadata
48
+ console.log('\n--- Secret Metadata ---');
49
+ console.log(`ID: ${secret.id}`);
50
+ console.log(`Alias: ${secret.alias}`);
51
+ console.log(`Tenant: ${secret.tenant}`);
52
+ console.log(`Type: ${formatType(secret.type, secret.subType)}`);
53
+ console.log(`Version: ${secret.version}`);
54
+ // Display data based on type
55
+ console.log('\n--- Secret Data ---');
56
+ if (secret.type === 'credential' && secret.data) {
57
+ if ('username' in secret.data)
58
+ console.log(`Username: ${secret.data.username}`);
59
+ if ('password' in secret.data)
60
+ console.log(`Password: ${secret.data.password}`);
61
+ // Show any additional fields
62
+ const knownFields = ['username', 'password'];
63
+ for (const [key, value] of Object.entries(secret.data)) {
64
+ if (!knownFields.includes(key)) {
65
+ console.log(`${key}: ${typeof value === 'object' ? JSON.stringify(value) : value}`);
66
+ }
67
+ }
68
+ }
69
+ else if (secret.data && 'text' in secret.data) {
70
+ // Plain text secret
71
+ console.log(secret.data.text);
72
+ }
73
+ else if (secret.data && 'content' in secret.data && 'filename' in secret.data) {
74
+ // File-based secret
75
+ console.log(`File: ${secret.data.filename}`);
76
+ console.log(`Size: ${formatBytes(Buffer.from(secret.data.content, 'base64').length)}`);
77
+ if (secret.data.contentType)
78
+ console.log(`Type: ${secret.data.contentType}`);
79
+ console.log('\nUse --output <file> to save the file content');
80
+ }
81
+ else if (secret.data && 'privateKey' in secret.data) {
82
+ // Key pair secret
83
+ console.log('Key Pair Secret:');
84
+ const pk = secret.data.privateKey;
85
+ const pub = secret.data.publicKey;
86
+ if (pk?.filename)
87
+ console.log(` Private Key: ${pk.filename}`);
88
+ if (pub?.filename)
89
+ console.log(` Public Key: ${pub.filename}`);
90
+ console.log('\nUse --output <file> to save the keys');
91
+ }
92
+ else {
93
+ // Generic key-value
94
+ console.log(JSON.stringify(secret.data, null, 2));
95
+ }
96
+ }
97
+ catch (error) {
98
+ spinner.fail('Failed to decrypt secret');
99
+ output.error(error.message);
100
+ process.exit(1);
101
+ }
102
+ });
103
+ }
104
+ //# sourceMappingURL=decrypt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decrypt.js","sourceRoot":"","sources":["../../../src/commands/secret/decrypt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Secret delete command
3
+ */
4
+ import type { Command } from 'commander';
5
+ export declare function registerDeleteCommand(secretCmd: Command): void;
6
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/secret/delete.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAuD9D"}
@@ -0,0 +1,60 @@
1
+ // Path: src/commands/secret/delete.ts
2
+ import ora from 'ora';
3
+ import inquirer from 'inquirer';
4
+ import { client } from '../../lib/client.js';
5
+ import * as output from '../../lib/output.js';
6
+ import { resolveSecretId } from './resolve.js';
7
+ export function registerDeleteCommand(secretCmd) {
8
+ secretCmd
9
+ .command('delete <id-or-alias>')
10
+ .description('Delete a secret (supports UUID or tenant/alias format)')
11
+ .option('-f, --force', 'Skip confirmation')
12
+ .action(async (idOrAlias, options) => {
13
+ let id;
14
+ // Resolve alias to UUID first
15
+ try {
16
+ id = await resolveSecretId(idOrAlias);
17
+ }
18
+ catch (error) {
19
+ output.error(error.message);
20
+ process.exit(1);
21
+ }
22
+ if (!options.force) {
23
+ // Get metadata first
24
+ const spinner = ora('Fetching secret...').start();
25
+ try {
26
+ const secret = await client.get(`/v1/secrets/${id}/meta`);
27
+ spinner.stop();
28
+ const { confirm } = await inquirer.prompt([
29
+ {
30
+ type: 'confirm',
31
+ name: 'confirm',
32
+ message: `Delete secret "${secret.alias}" (${id})? This cannot be undone.`,
33
+ default: false,
34
+ },
35
+ ]);
36
+ if (!confirm) {
37
+ output.info('Deletion cancelled');
38
+ return;
39
+ }
40
+ }
41
+ catch (error) {
42
+ spinner.fail('Failed to fetch secret');
43
+ output.error(error.message);
44
+ process.exit(1);
45
+ }
46
+ }
47
+ const deleteSpinner = ora('Deleting secret...').start();
48
+ try {
49
+ await client.delete(`/v1/secrets/${id}`);
50
+ deleteSpinner.stop();
51
+ output.success('Secret deleted successfully');
52
+ }
53
+ catch (error) {
54
+ deleteSpinner.fail('Failed to delete secret');
55
+ output.error(error.message);
56
+ process.exit(1);
57
+ }
58
+ });
59
+ }
60
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/secret/delete.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAOtC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,UAAU,qBAAqB,CAAC,SAAkB;IACtD,SAAS;SACN,OAAO,CAAC,sBAAsB,CAAC;SAC/B,WAAW,CAAC,wDAAwD,CAAC;SACrE,MAAM,CAAC,aAAa,EAAE,mBAAmB,CAAC;SAC1C,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,OAAsB,EAAE,EAAE;QAC1D,IAAI,EAAU,CAAC;QAEf,8BAA8B;QAC9B,IAAI,CAAC;YACH,EAAE,GAAG,MAAM,eAAe,CAAC,SAAS,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,qBAAqB;YACrB,MAAM,OAAO,GAAG,GAAG,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;YAClD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAiB,eAAe,EAAE,OAAO,CAAC,CAAC;gBAC1E,OAAO,CAAC,IAAI,EAAE,CAAC;gBAEf,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAuB;oBAC9D;wBACE,IAAI,EAAE,SAAS;wBACf,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,kBAAkB,MAAM,CAAC,KAAK,MAAM,EAAE,2BAA2B;wBAC1E,OAAO,EAAE,KAAK;qBACf;iBACF,CAAC,CAAC;gBAEH,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;oBAClC,OAAO;gBACT,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;gBACvC,MAAM,CAAC,KAAK,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC;gBACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,MAAM,aAAa,GAAG,GAAG,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;QAExD,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;YACzC,aAAa,CAAC,IAAI,EAAE,CAAC;YACrB,MAAM,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,aAAa,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YAC9C,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,6 @@
1
+ /**
2
+ * Secret get command (metadata only)
3
+ */
4
+ import type { Command } from 'commander';
5
+ export declare function registerGetCommand(secretCmd: Command): void;
6
+ //# sourceMappingURL=get.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/commands/secret/get.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASzC,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAmE3D"}
@@ -0,0 +1,60 @@
1
+ // Path: src/commands/secret/get.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, formatBytes } from './helpers.js';
7
+ import { resolveSecretId } from './resolve.js';
8
+ export function registerGetCommand(secretCmd) {
9
+ secretCmd
10
+ .command('get <id-or-alias>')
11
+ .description('Get secret metadata (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 metadata...';
19
+ const secret = await client.get(`/v1/secrets/${id}/meta`);
20
+ spinner.stop();
21
+ if (options.json) {
22
+ output.json(secret);
23
+ return;
24
+ }
25
+ const table = new Table({
26
+ colWidths: [20, 60],
27
+ });
28
+ table.push(['ID', secret.id], ['Alias', secret.alias], ['Tenant', secret.tenant], ['Type', formatType(secret.type, secret.subType)], ['Version', String(secret.version)]);
29
+ if (secret.fileName) {
30
+ table.push(['File Name', secret.fileName]);
31
+ }
32
+ if (secret.fileSize) {
33
+ table.push(['File Size', formatBytes(secret.fileSize)]);
34
+ }
35
+ if (secret.fileMime) {
36
+ table.push(['MIME Type', secret.fileMime]);
37
+ }
38
+ if (secret.contentType) {
39
+ table.push(['Content Type', secret.contentType]);
40
+ }
41
+ if (secret.expiresAt) {
42
+ table.push(['Expires At', formatDate(secret.expiresAt)]);
43
+ }
44
+ if (secret.ttlUntil) {
45
+ table.push(['TTL Until', formatDate(secret.ttlUntil)]);
46
+ }
47
+ if (secret.tags && secret.tags.length > 0) {
48
+ table.push(['Tags', secret.tags.join(', ')]);
49
+ }
50
+ table.push(['Created By', secret.createdBy || '-'], ['Created At', formatDate(secret.createdAt)], ['Updated At', formatDate(secret.updatedAt)]);
51
+ console.log(table.toString());
52
+ }
53
+ catch (error) {
54
+ spinner.fail('Failed to get secret');
55
+ output.error(error.message);
56
+ process.exit(1);
57
+ }
58
+ });
59
+ }
60
+ //# sourceMappingURL=get.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/commands/secret/get.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Helper functions for secret commands
3
+ */
4
+ export declare function formatDate(dateStr: string | undefined): string;
5
+ export declare function formatType(type: string, subType?: string): string;
6
+ export declare function formatTags(tags?: string[]): string;
7
+ export declare function truncateAlias(alias: string, maxLen?: number): string;
8
+ export declare function formatBytes(bytes?: number): string;
9
+ export declare function getDaysUntilExpiry(expiresAt?: string): number | null;
10
+ export declare function formatExpiry(expiresAt?: string): string;
11
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/commands/secret/helpers.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAG9D;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAGjE;AAED,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAIlD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,SAAK,GAAG,MAAM,CAGhE;AAED,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAKlD;AAED,wBAAgB,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKpE;AAED,wBAAgB,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CASvD"}