@zincapp/znvault-cli 2.16.5 → 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 (296) 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/device.d.ts.map +1 -1
  106. package/dist/commands/device.js +8 -5
  107. package/dist/commands/device.js.map +1 -1
  108. package/dist/commands/plugin.d.ts.map +1 -1
  109. package/dist/commands/plugin.js +29 -7
  110. package/dist/commands/plugin.js.map +1 -1
  111. package/dist/commands/secret/copy.d.ts +6 -0
  112. package/dist/commands/secret/copy.d.ts.map +1 -0
  113. package/dist/commands/secret/copy.js +43 -0
  114. package/dist/commands/secret/copy.js.map +1 -0
  115. package/dist/commands/secret/create.d.ts +6 -0
  116. package/dist/commands/secret/create.d.ts.map +1 -0
  117. package/dist/commands/secret/create.js +297 -0
  118. package/dist/commands/secret/create.js.map +1 -0
  119. package/dist/commands/secret/decrypt.d.ts +6 -0
  120. package/dist/commands/secret/decrypt.d.ts.map +1 -0
  121. package/dist/commands/secret/decrypt.js +104 -0
  122. package/dist/commands/secret/decrypt.js.map +1 -0
  123. package/dist/commands/secret/delete.d.ts +6 -0
  124. package/dist/commands/secret/delete.d.ts.map +1 -0
  125. package/dist/commands/secret/delete.js +60 -0
  126. package/dist/commands/secret/delete.js.map +1 -0
  127. package/dist/commands/secret/get.d.ts +6 -0
  128. package/dist/commands/secret/get.d.ts.map +1 -0
  129. package/dist/commands/secret/get.js +60 -0
  130. package/dist/commands/secret/get.js.map +1 -0
  131. package/dist/commands/secret/helpers.d.ts +11 -0
  132. package/dist/commands/secret/helpers.d.ts.map +1 -0
  133. package/dist/commands/secret/helpers.js +59 -0
  134. package/dist/commands/secret/helpers.js.map +1 -0
  135. package/dist/commands/secret/history.d.ts +6 -0
  136. package/dist/commands/secret/history.d.ts.map +1 -0
  137. package/dist/commands/secret/history.js +52 -0
  138. package/dist/commands/secret/history.js.map +1 -0
  139. package/dist/commands/secret/index.d.ts +12 -0
  140. package/dist/commands/secret/index.d.ts.map +1 -0
  141. package/dist/commands/secret/index.js +49 -0
  142. package/dist/commands/secret/index.js.map +1 -0
  143. package/dist/commands/secret/list.d.ts +6 -0
  144. package/dist/commands/secret/list.d.ts.map +1 -0
  145. package/dist/commands/secret/list.js +72 -0
  146. package/dist/commands/secret/list.js.map +1 -0
  147. package/dist/commands/secret/pem-analysis.d.ts +32 -0
  148. package/dist/commands/secret/pem-analysis.d.ts.map +1 -0
  149. package/dist/commands/secret/pem-analysis.js +190 -0
  150. package/dist/commands/secret/pem-analysis.js.map +1 -0
  151. package/dist/commands/secret/resolve.d.ts +17 -0
  152. package/dist/commands/secret/resolve.d.ts.map +1 -0
  153. package/dist/commands/secret/resolve.js +36 -0
  154. package/dist/commands/secret/resolve.js.map +1 -0
  155. package/dist/commands/secret/rotate.d.ts +6 -0
  156. package/dist/commands/secret/rotate.d.ts.map +1 -0
  157. package/dist/commands/secret/rotate.js +72 -0
  158. package/dist/commands/secret/rotate.js.map +1 -0
  159. package/dist/commands/secret/types.d.ts +123 -0
  160. package/dist/commands/secret/types.d.ts.map +1 -0
  161. package/dist/commands/secret/types.js +3 -0
  162. package/dist/commands/secret/types.js.map +1 -0
  163. package/dist/commands/secret/update.d.ts +6 -0
  164. package/dist/commands/secret/update.d.ts.map +1 -0
  165. package/dist/commands/secret/update.js +124 -0
  166. package/dist/commands/secret/update.js.map +1 -0
  167. package/dist/commands/secret.d.ts +8 -2
  168. package/dist/commands/secret.d.ts.map +1 -1
  169. package/dist/commands/secret.js +6 -1131
  170. package/dist/commands/secret.js.map +1 -1
  171. package/dist/index.js +48 -4
  172. package/dist/index.js.map +1 -1
  173. package/dist/lib/client/apikeys.d.ts +34 -0
  174. package/dist/lib/client/apikeys.d.ts.map +1 -0
  175. package/dist/lib/client/apikeys.js +113 -0
  176. package/dist/lib/client/apikeys.js.map +1 -0
  177. package/dist/lib/client/audit.d.ts +21 -0
  178. package/dist/lib/client/audit.d.ts.map +1 -0
  179. package/dist/lib/client/audit.js +40 -0
  180. package/dist/lib/client/audit.js.map +1 -0
  181. package/dist/lib/client/health.d.ts +30 -0
  182. package/dist/lib/client/health.d.ts.map +1 -0
  183. package/dist/lib/client/health.js +55 -0
  184. package/dist/lib/client/health.js.map +1 -0
  185. package/dist/lib/client/http.d.ts +50 -0
  186. package/dist/lib/client/http.d.ts.map +1 -0
  187. package/dist/lib/client/http.js +333 -0
  188. package/dist/lib/client/http.js.map +1 -0
  189. package/dist/lib/client/index.d.ts +156 -0
  190. package/dist/lib/client/index.d.ts.map +1 -0
  191. package/dist/lib/client/index.js +172 -0
  192. package/dist/lib/client/index.js.map +1 -0
  193. package/dist/lib/client/lockdown.d.ts +23 -0
  194. package/dist/lib/client/lockdown.d.ts.map +1 -0
  195. package/dist/lib/client/lockdown.js +48 -0
  196. package/dist/lib/client/lockdown.js.map +1 -0
  197. package/dist/lib/client/managed-keys.d.ts +18 -0
  198. package/dist/lib/client/managed-keys.d.ts.map +1 -0
  199. package/dist/lib/client/managed-keys.js +190 -0
  200. package/dist/lib/client/managed-keys.js.map +1 -0
  201. package/dist/lib/client/policies.d.ts +35 -0
  202. package/dist/lib/client/policies.d.ts.map +1 -0
  203. package/dist/lib/client/policies.js +131 -0
  204. package/dist/lib/client/policies.js.map +1 -0
  205. package/dist/lib/client/tenants.d.ts +29 -0
  206. package/dist/lib/client/tenants.d.ts.map +1 -0
  207. package/dist/lib/client/tenants.js +56 -0
  208. package/dist/lib/client/tenants.js.map +1 -0
  209. package/dist/lib/client/types.d.ts +45 -0
  210. package/dist/lib/client/types.d.ts.map +1 -0
  211. package/dist/lib/client/types.js +3 -0
  212. package/dist/lib/client/types.js.map +1 -0
  213. package/dist/lib/client/users.d.ts +44 -0
  214. package/dist/lib/client/users.d.ts.map +1 -0
  215. package/dist/lib/client/users.js +116 -0
  216. package/dist/lib/client/users.js.map +1 -0
  217. package/dist/lib/client.d.ts +11 -246
  218. package/dist/lib/client.d.ts.map +1 -1
  219. package/dist/lib/client.js +10 -999
  220. package/dist/lib/client.js.map +1 -1
  221. package/dist/lib/command-error-handler.d.ts +99 -0
  222. package/dist/lib/command-error-handler.d.ts.map +1 -0
  223. package/dist/lib/command-error-handler.js +108 -0
  224. package/dist/lib/command-error-handler.js.map +1 -0
  225. package/dist/lib/config/apikey.d.ts +29 -0
  226. package/dist/lib/config/apikey.d.ts.map +1 -0
  227. package/dist/lib/config/apikey.js +58 -0
  228. package/dist/lib/config/apikey.js.map +1 -0
  229. package/dist/lib/config/cache.d.ts +47 -0
  230. package/dist/lib/config/cache.d.ts.map +1 -0
  231. package/dist/lib/config/cache.js +84 -0
  232. package/dist/lib/config/cache.js.map +1 -0
  233. package/dist/lib/config/credentials.d.ts +33 -0
  234. package/dist/lib/config/credentials.d.ts.map +1 -0
  235. package/dist/lib/config/credentials.js +70 -0
  236. package/dist/lib/config/credentials.js.map +1 -0
  237. package/dist/lib/config/getters.d.ts +28 -0
  238. package/dist/lib/config/getters.d.ts.map +1 -0
  239. package/dist/lib/config/getters.js +65 -0
  240. package/dist/lib/config/getters.js.map +1 -0
  241. package/dist/lib/config/index.d.ts +17 -0
  242. package/dist/lib/config/index.d.ts.map +1 -0
  243. package/dist/lib/config/index.js +21 -0
  244. package/dist/lib/config/index.js.map +1 -0
  245. package/dist/lib/config/migration.d.ts +10 -0
  246. package/dist/lib/config/migration.d.ts.map +1 -0
  247. package/dist/lib/config/migration.js +59 -0
  248. package/dist/lib/config/migration.js.map +1 -0
  249. package/dist/lib/config/plugins.d.ts +25 -0
  250. package/dist/lib/config/plugins.d.ts.map +1 -0
  251. package/dist/lib/config/plugins.js +58 -0
  252. package/dist/lib/config/plugins.js.map +1 -0
  253. package/dist/lib/config/profile.d.ts +42 -0
  254. package/dist/lib/config/profile.d.ts.map +1 -0
  255. package/dist/lib/config/profile.js +154 -0
  256. package/dist/lib/config/profile.js.map +1 -0
  257. package/dist/lib/config/store.d.ts +23 -0
  258. package/dist/lib/config/store.d.ts.map +1 -0
  259. package/dist/lib/config/store.js +41 -0
  260. package/dist/lib/config/store.js.map +1 -0
  261. package/dist/lib/config/types.d.ts +44 -0
  262. package/dist/lib/config/types.d.ts.map +1 -0
  263. package/dist/lib/config/types.js +8 -0
  264. package/dist/lib/config/types.js.map +1 -0
  265. package/dist/lib/config/validation.d.ts +38 -0
  266. package/dist/lib/config/validation.d.ts.map +1 -0
  267. package/dist/lib/config/validation.js +146 -0
  268. package/dist/lib/config/validation.js.map +1 -0
  269. package/dist/lib/config.d.ts +5 -158
  270. package/dist/lib/config.d.ts.map +1 -1
  271. package/dist/lib/config.js +26 -424
  272. package/dist/lib/config.js.map +1 -1
  273. package/dist/lib/constants.d.ts +65 -0
  274. package/dist/lib/constants.d.ts.map +1 -0
  275. package/dist/lib/constants.js +90 -0
  276. package/dist/lib/constants.js.map +1 -0
  277. package/dist/lib/db.d.ts +4 -0
  278. package/dist/lib/db.d.ts.map +1 -1
  279. package/dist/lib/db.js +77 -46
  280. package/dist/lib/db.js.map +1 -1
  281. package/dist/lib/format-helpers.d.ts +63 -0
  282. package/dist/lib/format-helpers.d.ts.map +1 -0
  283. package/dist/lib/format-helpers.js +219 -0
  284. package/dist/lib/format-helpers.js.map +1 -0
  285. package/dist/lib/visual.d.ts +22 -0
  286. package/dist/lib/visual.d.ts.map +1 -1
  287. package/dist/lib/visual.js +83 -0
  288. package/dist/lib/visual.js.map +1 -1
  289. package/dist/services/signature-verifier.d.ts.map +1 -1
  290. package/dist/services/signature-verifier.js +11 -4
  291. package/dist/services/signature-verifier.js.map +1 -1
  292. package/dist/services/update-installer.d.ts +7 -0
  293. package/dist/services/update-installer.d.ts.map +1 -1
  294. package/dist/services/update-installer.js +58 -19
  295. package/dist/services/update-installer.js.map +1 -1
  296. package/package.json +1 -1
@@ -0,0 +1,6 @@
1
+ /**
2
+ * API key conditions update command
3
+ */
4
+ import type { Command } from 'commander';
5
+ export declare function registerConditionsCommand(apiKeyCmd: Command): void;
6
+ //# sourceMappingURL=conditions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conditions.d.ts","sourceRoot":"","sources":["../../../src/commands/apikey/conditions.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAsDlE"}
@@ -0,0 +1,57 @@
1
+ // Path: src/commands/apikey/conditions.ts
2
+ import ora from 'ora';
3
+ import { client } from '../../lib/client.js';
4
+ import * as output from '../../lib/output.js';
5
+ import { displayConditions, parseConditionsFromOptions } from './helpers.js';
6
+ export function registerConditionsCommand(apiKeyCmd) {
7
+ apiKeyCmd
8
+ .command('update-conditions <id>')
9
+ .description('Update API key inline ABAC conditions')
10
+ .option('--ip <ips>', 'Comma-separated IP allowlist (CIDR supported)')
11
+ .option('--time-range <range>', 'Time range: "HH:MM-HH:MM [TIMEZONE]" or "clear"')
12
+ .option('--methods <methods>', 'Comma-separated HTTP methods or "clear"')
13
+ .option('--resources <ids>', 'Resource IDs (type:id,...) or "clear"')
14
+ .option('--aliases <patterns>', 'Alias patterns (glob) or "clear"')
15
+ .option('--tags <tags>', 'Resource tags (key=value,...) or "clear"')
16
+ .option('--clear-all', 'Remove all conditions')
17
+ .option('-t, --tenant <id>', 'Tenant ID')
18
+ .option('--json', 'Output as JSON')
19
+ .action(async (id, options) => {
20
+ let conditions = {};
21
+ // Handle --clear-all
22
+ if (!options.clearAll) {
23
+ // Validate time range format before parsing
24
+ if (options.timeRange && options.timeRange !== 'clear') {
25
+ const match = /^(\d{2}:\d{2})-(\d{2}:\d{2})(?:\s+(.+))?$/.exec(options.timeRange);
26
+ if (!match) {
27
+ output.error('Invalid time range format. Use: "HH:MM-HH:MM [TIMEZONE]"');
28
+ process.exit(1);
29
+ }
30
+ }
31
+ conditions = parseConditionsFromOptions(options);
32
+ }
33
+ const spinner = ora('Updating conditions...').start();
34
+ try {
35
+ const key = await client.updateApiKeyConditions(id, conditions, options.tenant);
36
+ spinner.succeed('Conditions updated');
37
+ if (options.json) {
38
+ output.json(key);
39
+ return;
40
+ }
41
+ const keyConditions = key.conditions;
42
+ if (keyConditions && Object.keys(keyConditions).length > 0) {
43
+ console.log('\nUpdated conditions:');
44
+ displayConditions(keyConditions);
45
+ }
46
+ else {
47
+ console.log('\nAll conditions cleared.');
48
+ }
49
+ }
50
+ catch (err) {
51
+ spinner.fail('Failed to update conditions');
52
+ output.error(err instanceof Error ? err.message : String(err));
53
+ process.exit(1);
54
+ }
55
+ });
56
+ }
57
+ //# sourceMappingURL=conditions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conditions.js","sourceRoot":"","sources":["../../../src/commands/apikey/conditions.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAO1C,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAE9C,OAAO,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAE7E,MAAM,UAAU,yBAAyB,CAAC,SAAkB;IAC1D,SAAS;SACN,OAAO,CAAC,wBAAwB,CAAC;SACjC,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,YAAY,EAAE,+CAA+C,CAAC;SACrE,MAAM,CAAC,sBAAsB,EAAE,iDAAiD,CAAC;SACjF,MAAM,CAAC,qBAAqB,EAAE,yCAAyC,CAAC;SACxE,MAAM,CAAC,mBAAmB,EAAE,uCAAuC,CAAC;SACpE,MAAM,CAAC,sBAAsB,EAAE,kCAAkC,CAAC;SAClE,MAAM,CAAC,eAAe,EAAE,0CAA0C,CAAC;SACnE,MAAM,CAAC,aAAa,EAAE,uBAAuB,CAAC;SAC9C,MAAM,CAAC,mBAAmB,EAAE,WAAW,CAAC;SACxC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,OAAgC,EAAE,EAAE;QAC7D,IAAI,UAAU,GAAqB,EAAE,CAAC;QAEtC,qBAAqB;QACrB,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtB,4CAA4C;YAC5C,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;gBACvD,MAAM,KAAK,GAAG,2CAA2C,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBAClF,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,MAAM,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;oBACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;YAED,UAAU,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,CAAC,wBAAwB,CAAC,CAAC,KAAK,EAAE,CAAC;QAEtD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAChF,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;YAEtC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACjB,OAAO;YACT,CAAC;YAED,MAAM,aAAa,GAAG,GAAG,CAAC,UAA0C,CAAC;YACrE,IAAI,aAAa,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3D,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;gBACrC,iBAAiB,CAAC,aAAa,CAAC,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;YAC5C,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * API key create command
3
+ */
4
+ import type { Command } from 'commander';
5
+ export declare function registerCreateCommand(apiKeyCmd: Command): void;
6
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/apikey/create.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAgH9D"}
@@ -0,0 +1,106 @@
1
+ // Path: src/commands/apikey/create.ts
2
+ import ora from 'ora';
3
+ import { client } from '../../lib/client.js';
4
+ import * as output from '../../lib/output.js';
5
+ import { formatDate, displayConditions, parseConditionsFromOptions } from './helpers.js';
6
+ export function registerCreateCommand(apiKeyCmd) {
7
+ apiKeyCmd
8
+ .command('create <name>')
9
+ .description('Create a new API key with direct permissions')
10
+ .option('-e, --expires <days>', 'Days until expiration (1-3650, default: 90)', '90')
11
+ .option('-p, --permissions <perms>', 'Comma-separated permissions (required)')
12
+ .option('-d, --description <desc>', 'Description')
13
+ .option('--ip <ips>', 'Comma-separated IP allowlist (CIDR supported)')
14
+ .option('--time-range <range>', 'Time range restriction: "HH:MM-HH:MM [TIMEZONE]"')
15
+ .option('--methods <methods>', 'Comma-separated allowed HTTP methods: GET,POST,etc')
16
+ .option('--resources <ids>', 'Specific resource IDs (type:id,...): secrets:id1,certificates:id2')
17
+ .option('--aliases <patterns>', 'Comma-separated alias patterns (glob): prod/*,api/*')
18
+ .option('--tags <tags>', 'Required resource tags: key=value,key2=value2')
19
+ .option('-t, --tenant <id>', 'Tenant ID (superadmin only)')
20
+ .option('--json', 'Output as JSON')
21
+ .action(async (name, options) => {
22
+ // Validate permissions
23
+ if (!options.permissions) {
24
+ output.error('--permissions is required. Use comma-separated permission strings.');
25
+ output.info('Example: --permissions "secret:read:value,secret:list:values"');
26
+ process.exit(1);
27
+ }
28
+ const permissions = options.permissions.split(',').map((p) => p.trim());
29
+ const spinner = ora('Creating API key...').start();
30
+ try {
31
+ // Parse options
32
+ const expiresInDays = parseInt(options.expires, 10);
33
+ if (isNaN(expiresInDays) || expiresInDays < 1 || expiresInDays > 3650) {
34
+ spinner.fail('Invalid expiration');
35
+ output.error('Expiration must be between 1 and 3650 days');
36
+ process.exit(1);
37
+ }
38
+ let ipAllowlist;
39
+ if (options.ip) {
40
+ ipAllowlist = options.ip.split(',').map((ip) => ip.trim());
41
+ }
42
+ // Validate time range format
43
+ if (options.timeRange) {
44
+ const match = /^(\d{2}:\d{2})-(\d{2}:\d{2})(?:\s+(.+))?$/.exec(options.timeRange);
45
+ if (!match) {
46
+ spinner.fail('Invalid time range format');
47
+ output.error('Use format: "HH:MM-HH:MM [TIMEZONE]"');
48
+ output.info('Example: --time-range "09:00-17:00 America/New_York"');
49
+ process.exit(1);
50
+ }
51
+ }
52
+ // Parse conditions
53
+ const conditions = parseConditionsFromOptions(options);
54
+ // Add IP to conditions as well (for backward compatibility)
55
+ if (ipAllowlist) {
56
+ conditions.ip = ipAllowlist;
57
+ }
58
+ const result = await client.createApiKey({
59
+ name,
60
+ description: options.description,
61
+ expiresInDays,
62
+ permissions,
63
+ ipAllowlist,
64
+ conditions: Object.keys(conditions).length > 0 ? conditions : undefined,
65
+ tenantId: options.tenant,
66
+ });
67
+ spinner.succeed('API key created');
68
+ if (options.json) {
69
+ output.json(result);
70
+ return;
71
+ }
72
+ console.log('\n⚠️ IMPORTANT: Save this key now - it will not be shown again!\n');
73
+ console.log('────────────────────────────────────────────────────────────────');
74
+ console.log(`API Key: ${result.key}`);
75
+ console.log('────────────────────────────────────────────────────────────────\n');
76
+ output.keyValue({
77
+ 'Key ID': result.apiKey.id,
78
+ 'Name': result.apiKey.name,
79
+ 'Prefix': result.apiKey.prefix,
80
+ 'Status': result.apiKey.enabled ? '\x1b[32m●\x1b[0m Active' : '\x1b[31m○\x1b[0m Disabled',
81
+ 'Tenant': result.apiKey.tenant_id,
82
+ 'Description': result.apiKey.description ?? 'None',
83
+ 'Expires': formatDate(result.apiKey.expires_at),
84
+ 'IP Allowlist': result.apiKey.ip_allowlist?.join(', ') ?? 'None',
85
+ });
86
+ if (result.apiKey.permissions.length > 0) {
87
+ console.log('\nPermissions:');
88
+ for (const perm of result.apiKey.permissions) {
89
+ console.log(` - ${perm}`);
90
+ }
91
+ }
92
+ // Display conditions if any
93
+ const apiKeyConditions = result.apiKey.conditions;
94
+ if (apiKeyConditions && Object.keys(apiKeyConditions).length > 0) {
95
+ console.log('\nConditions:');
96
+ displayConditions(apiKeyConditions);
97
+ }
98
+ }
99
+ catch (err) {
100
+ spinner.fail('Failed to create API key');
101
+ output.error(err instanceof Error ? err.message : String(err));
102
+ process.exit(1);
103
+ }
104
+ });
105
+ }
106
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/apikey/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * API key delete command
3
+ */
4
+ import type { Command } from 'commander';
5
+ export declare function registerDeleteCommand(apiKeyCmd: Command): void;
6
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/apikey/delete.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAwB9D"}
@@ -0,0 +1,29 @@
1
+ // Path: src/commands/apikey/delete.ts
2
+ import ora from 'ora';
3
+ import { client } from '../../lib/client.js';
4
+ import * as output from '../../lib/output.js';
5
+ export function registerDeleteCommand(apiKeyCmd) {
6
+ apiKeyCmd
7
+ .command('delete <id>')
8
+ .alias('rm')
9
+ .description('Delete an API key')
10
+ .option('-t, --tenant <id>', 'Tenant ID')
11
+ .option('-f, --force', 'Skip confirmation')
12
+ .action(async (id, options) => {
13
+ if (!options.force) {
14
+ output.warn(`This will permanently delete API key: ${id}`);
15
+ output.warn('The key will stop working immediately.');
16
+ }
17
+ const spinner = ora('Deleting API key...').start();
18
+ try {
19
+ await client.deleteApiKey(id, options.tenant);
20
+ spinner.succeed(`API key deleted: ${id}`);
21
+ }
22
+ catch (err) {
23
+ spinner.fail('Failed to delete API key');
24
+ output.error(err instanceof Error ? err.message : String(err));
25
+ process.exit(1);
26
+ }
27
+ });
28
+ }
29
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/apikey/delete.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAOtC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAG9C,MAAM,UAAU,qBAAqB,CAAC,SAAkB;IACtD,SAAS;SACN,OAAO,CAAC,aAAa,CAAC;SACtB,KAAK,CAAC,IAAI,CAAC;SACX,WAAW,CAAC,mBAAmB,CAAC;SAChC,MAAM,CAAC,mBAAmB,EAAE,WAAW,CAAC;SACxC,MAAM,CAAC,aAAa,EAAE,mBAAmB,CAAC;SAC1C,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,OAAsB,EAAE,EAAE;QACnD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,yCAAyC,EAAE,EAAE,CAAC,CAAC;YAC3D,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,CAAC,qBAAqB,CAAC,CAAC,KAAK,EAAE,CAAC;QAEnD,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAC9C,OAAO,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACzC,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * API key enable/disable commands
3
+ */
4
+ import type { Command } from 'commander';
5
+ export declare function registerEnableDisableCommands(apiKeyCmd: Command): void;
6
+ //# sourceMappingURL=enable-disable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enable-disable.d.ts","sourceRoot":"","sources":["../../../src/commands/apikey/enable-disable.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAuCtE"}
@@ -0,0 +1,44 @@
1
+ // Path: src/commands/apikey/enable-disable.ts
2
+ import ora from 'ora';
3
+ import { client } from '../../lib/client.js';
4
+ import * as output from '../../lib/output.js';
5
+ export function registerEnableDisableCommands(apiKeyCmd) {
6
+ // Enable API key
7
+ apiKeyCmd
8
+ .command('enable <id>')
9
+ .description('Enable an API key (allow authentication)')
10
+ .option('-t, --tenant <id>', 'Tenant ID')
11
+ .action(async (id, options) => {
12
+ const spinner = ora('Enabling API key...').start();
13
+ try {
14
+ const key = await client.setApiKeyEnabled(id, true, options.tenant);
15
+ spinner.succeed(`API key enabled: ${key.name}`);
16
+ console.log('\nThe key can now be used for authentication.');
17
+ }
18
+ catch (err) {
19
+ spinner.fail('Failed to enable API key');
20
+ output.error(err instanceof Error ? err.message : String(err));
21
+ process.exit(1);
22
+ }
23
+ });
24
+ // Disable API key
25
+ apiKeyCmd
26
+ .command('disable <id>')
27
+ .description('Disable an API key (block authentication without deleting)')
28
+ .option('-t, --tenant <id>', 'Tenant ID')
29
+ .action(async (id, options) => {
30
+ const spinner = ora('Disabling API key...').start();
31
+ try {
32
+ const key = await client.setApiKeyEnabled(id, false, options.tenant);
33
+ spinner.succeed(`API key disabled: ${key.name}`);
34
+ console.log('\nThe key is now blocked from authentication.');
35
+ console.log('Use "znvault apikey enable" to re-enable it.');
36
+ }
37
+ catch (err) {
38
+ spinner.fail('Failed to disable API key');
39
+ output.error(err instanceof Error ? err.message : String(err));
40
+ process.exit(1);
41
+ }
42
+ });
43
+ }
44
+ //# sourceMappingURL=enable-disable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enable-disable.js","sourceRoot":"","sources":["../../../src/commands/apikey/enable-disable.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAO9C,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAG9C,MAAM,UAAU,6BAA6B,CAAC,SAAkB;IAC9D,iBAAiB;IACjB,SAAS;SACN,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,mBAAmB,EAAE,WAAW,CAAC;SACxC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,OAA6B,EAAE,EAAE;QAC1D,MAAM,OAAO,GAAG,GAAG,CAAC,qBAAqB,CAAC,CAAC,KAAK,EAAE,CAAC;QAEnD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YACpE,OAAO,CAAC,OAAO,CAAC,oBAAoB,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACzC,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,kBAAkB;IAClB,SAAS;SACN,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,4DAA4D,CAAC;SACzE,MAAM,CAAC,mBAAmB,EAAE,WAAW,CAAC;SACxC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,OAA6B,EAAE,EAAE;QAC1D,MAAM,OAAO,GAAG,GAAG,CAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC;QAEpD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YACrE,OAAO,CAAC,OAAO,CAAC,qBAAqB,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YAC1C,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Helper functions for API key commands
3
+ */
4
+ import type { ApiKeyConditions } from './types.js';
5
+ export declare function formatDate(dateStr: string): string;
6
+ export declare function getDaysUntilExpiry(expiresAt: string): number;
7
+ export declare function formatSecondsToHuman(seconds: number): string;
8
+ export declare function formatExpiry(expiresAt: string): string;
9
+ export declare function formatPermissions(permissions: string[]): string;
10
+ export declare function formatConditionsSummary(conditions?: ApiKeyConditions): string;
11
+ export declare function displayConditions(cond: ApiKeyConditions): void;
12
+ /**
13
+ * Parse conditions from command options into ApiKeyConditions object
14
+ */
15
+ export declare function parseConditionsFromOptions(options: {
16
+ ip?: string;
17
+ timeRange?: string;
18
+ methods?: string;
19
+ resources?: string;
20
+ aliases?: string;
21
+ tags?: string;
22
+ }): ApiKeyConditions;
23
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/commands/apikey/helpers.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAI5D;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAK5D;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAQtD;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,CAI/D;AAED,wBAAgB,uBAAuB,CAAC,UAAU,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAc7E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAU9D;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE;IAClD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,gBAAgB,CA4DnB"}
@@ -0,0 +1,135 @@
1
+ // Path: src/commands/apikey/helpers.ts
2
+ export function formatDate(dateStr) {
3
+ return new Date(dateStr).toLocaleString();
4
+ }
5
+ export function getDaysUntilExpiry(expiresAt) {
6
+ const expires = new Date(expiresAt);
7
+ const now = new Date();
8
+ return Math.ceil((expires.getTime() - now.getTime()) / (1000 * 60 * 60 * 24));
9
+ }
10
+ export function formatSecondsToHuman(seconds) {
11
+ if (seconds < 60)
12
+ return `${seconds}s`;
13
+ if (seconds < 3600)
14
+ return `${Math.floor(seconds / 60)}m`;
15
+ if (seconds < 86400)
16
+ return `${Math.floor(seconds / 3600)}h`;
17
+ return `${Math.floor(seconds / 86400)}d`;
18
+ }
19
+ export function formatExpiry(expiresAt) {
20
+ const days = getDaysUntilExpiry(expiresAt);
21
+ if (days < 0)
22
+ return `Expired ${Math.abs(days)} days ago`;
23
+ if (days === 0)
24
+ return 'Expires today';
25
+ if (days === 1)
26
+ return 'Expires tomorrow';
27
+ if (days <= 7)
28
+ return `Expires in ${days} days (!)`;
29
+ if (days <= 30)
30
+ return `Expires in ${days} days`;
31
+ return `Expires in ${days} days`;
32
+ }
33
+ export function formatPermissions(permissions) {
34
+ if (permissions.length === 0)
35
+ return 'None';
36
+ if (permissions.length <= 3)
37
+ return permissions.join(', ');
38
+ return `${permissions.slice(0, 2).join(', ')} +${permissions.length - 2} more`;
39
+ }
40
+ export function formatConditionsSummary(conditions) {
41
+ if (!conditions || Object.keys(conditions).length === 0)
42
+ return '-';
43
+ const parts = [];
44
+ if (conditions.ip)
45
+ parts.push('IP');
46
+ if (conditions.timeRange)
47
+ parts.push('Time');
48
+ if (conditions.methods)
49
+ parts.push('Methods');
50
+ if (conditions.resources)
51
+ parts.push('Resources');
52
+ if (conditions.aliases)
53
+ parts.push('Aliases');
54
+ if (conditions.resourceTags)
55
+ parts.push('Tags');
56
+ if (parts.length === 0)
57
+ return '-';
58
+ if (parts.length <= 2)
59
+ return parts.join(', ');
60
+ return `${parts.slice(0, 2).join(', ')} +${parts.length - 2}`;
61
+ }
62
+ export function displayConditions(cond) {
63
+ if (cond.ip)
64
+ console.log(` - IP Allowlist: ${cond.ip.join(', ')}`);
65
+ if (cond.timeRange) {
66
+ const tr = cond.timeRange;
67
+ console.log(` - Time Range: ${tr.start}-${tr.end} ${tr.timezone ?? 'UTC'}`);
68
+ }
69
+ if (cond.methods)
70
+ console.log(` - Methods: ${cond.methods.join(', ')}`);
71
+ if (cond.resources)
72
+ console.log(` - Resources: ${JSON.stringify(cond.resources)}`);
73
+ if (cond.aliases)
74
+ console.log(` - Aliases: ${cond.aliases.join(', ')}`);
75
+ if (cond.resourceTags)
76
+ console.log(` - Tags: ${JSON.stringify(cond.resourceTags)}`);
77
+ }
78
+ /**
79
+ * Parse conditions from command options into ApiKeyConditions object
80
+ */
81
+ export function parseConditionsFromOptions(options) {
82
+ const conditions = {};
83
+ // IP condition
84
+ if (options.ip && options.ip !== 'clear') {
85
+ conditions.ip = options.ip.split(',').map((ip) => ip.trim());
86
+ }
87
+ // Time range condition
88
+ if (options.timeRange && options.timeRange !== 'clear') {
89
+ const match = /^(\d{2}:\d{2})-(\d{2}:\d{2})(?:\s+(.+))?$/.exec(options.timeRange);
90
+ if (match) {
91
+ conditions.timeRange = {
92
+ start: match[1],
93
+ end: match[2],
94
+ timezone: match[3] || 'UTC',
95
+ };
96
+ }
97
+ }
98
+ // HTTP methods condition
99
+ if (options.methods && options.methods !== 'clear') {
100
+ conditions.methods = options.methods.split(',').map((m) => m.trim().toUpperCase());
101
+ }
102
+ // Resource IDs condition
103
+ if (options.resources && options.resources !== 'clear') {
104
+ const resources = {};
105
+ for (const part of options.resources.split(',')) {
106
+ const [type, id] = part.split(':');
107
+ if (type && id) {
108
+ resources[type] = resources[type] ?? [];
109
+ resources[type].push(id);
110
+ }
111
+ }
112
+ if (Object.keys(resources).length > 0) {
113
+ conditions.resources = resources;
114
+ }
115
+ }
116
+ // Alias patterns condition
117
+ if (options.aliases && options.aliases !== 'clear') {
118
+ conditions.aliases = options.aliases.split(',').map((a) => a.trim());
119
+ }
120
+ // Resource tags condition
121
+ if (options.tags && options.tags !== 'clear') {
122
+ const tags = {};
123
+ for (const part of options.tags.split(',')) {
124
+ const [key, value] = part.split('=');
125
+ if (key && value) {
126
+ tags[key.trim()] = value.trim();
127
+ }
128
+ }
129
+ if (Object.keys(tags).length > 0) {
130
+ conditions.resourceTags = tags;
131
+ }
132
+ }
133
+ return conditions;
134
+ }
135
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/commands/apikey/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * API key commands - main entry point
3
+ *
4
+ * This module provides the command registration function that combines
5
+ * all API key subcommands into a single command group.
6
+ */
7
+ import type { Command } from 'commander';
8
+ export declare function registerApiKeyCommands(program: Command): void;
9
+ export * from './types.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/apikey/index.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAazC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkB7D;AAGD,cAAc,YAAY,CAAC"}
@@ -0,0 +1,33 @@
1
+ // Path: src/commands/apikey/index.ts
2
+ import { registerListCommand } from './list.js';
3
+ import { registerCreateCommand } from './create.js';
4
+ import { registerShowCommand } from './show.js';
5
+ import { registerDeleteCommand } from './delete.js';
6
+ import { registerRotateCommand } from './rotate.js';
7
+ import { registerEnableDisableCommands } from './enable-disable.js';
8
+ import { registerPermissionsCommand } from './permissions.js';
9
+ import { registerConditionsCommand } from './conditions.js';
10
+ import { registerPolicyCommands } from './policies.js';
11
+ import { registerSelfCommands } from './self.js';
12
+ import { registerManagedCommands } from './managed/index.js';
13
+ export function registerApiKeyCommands(program) {
14
+ const apiKeyCmd = program
15
+ .command('apikey')
16
+ .alias('api-key')
17
+ .description('API key management (independent, tenant-scoped)');
18
+ // Register all subcommands
19
+ registerListCommand(apiKeyCmd);
20
+ registerCreateCommand(apiKeyCmd);
21
+ registerShowCommand(apiKeyCmd);
22
+ registerDeleteCommand(apiKeyCmd);
23
+ registerRotateCommand(apiKeyCmd);
24
+ registerEnableDisableCommands(apiKeyCmd);
25
+ registerPermissionsCommand(apiKeyCmd);
26
+ registerConditionsCommand(apiKeyCmd);
27
+ registerPolicyCommands(apiKeyCmd);
28
+ registerSelfCommands(apiKeyCmd);
29
+ registerManagedCommands(apiKeyCmd);
30
+ }
31
+ // Re-export types for external use
32
+ export * from './types.js';
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/apikey/index.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAUrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,MAAM,SAAS,GAAG,OAAO;SACtB,OAAO,CAAC,QAAQ,CAAC;SACjB,KAAK,CAAC,SAAS,CAAC;SAChB,WAAW,CAAC,iDAAiD,CAAC,CAAC;IAElE,2BAA2B;IAC3B,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAC/B,qBAAqB,CAAC,SAAS,CAAC,CAAC;IACjC,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAC/B,qBAAqB,CAAC,SAAS,CAAC,CAAC;IACjC,qBAAqB,CAAC,SAAS,CAAC,CAAC;IACjC,6BAA6B,CAAC,SAAS,CAAC,CAAC;IACzC,0BAA0B,CAAC,SAAS,CAAC,CAAC;IACtC,yBAAyB,CAAC,SAAS,CAAC,CAAC;IACrC,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAClC,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAChC,uBAAuB,CAAC,SAAS,CAAC,CAAC;AACrC,CAAC;AAED,mCAAmC;AACnC,cAAc,YAAY,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * API key list command
3
+ */
4
+ import type { Command } from 'commander';
5
+ export declare function registerListCommand(apiKeyCmd: Command): void;
6
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/apikey/list.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAazC,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CA0E5D"}
@@ -0,0 +1,74 @@
1
+ // Path: src/commands/apikey/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 { formatExpiry, formatPermissions, formatSecondsToHuman, getDaysUntilExpiry, } from './helpers.js';
7
+ export function registerListCommand(apiKeyCmd) {
8
+ apiKeyCmd
9
+ .command('list')
10
+ .alias('ls')
11
+ .description('List API keys')
12
+ .option('-t, --tenant <id>', 'Tenant ID (superadmin only)')
13
+ .option('--json', 'Output as JSON')
14
+ .action(async (options) => {
15
+ const spinner = ora('Fetching API keys...').start();
16
+ try {
17
+ const result = await client.listApiKeys(options.tenant);
18
+ spinner.stop();
19
+ if (options.json) {
20
+ output.json(result);
21
+ return;
22
+ }
23
+ if (result.items.length === 0) {
24
+ output.warn('No API keys found');
25
+ return;
26
+ }
27
+ // Show expiring soon warning
28
+ if (result.expiringSoon.length > 0) {
29
+ console.log(`\n⚠️ ${result.expiringSoon.length} key(s) expiring within 7 days\n`);
30
+ }
31
+ const table = new Table({
32
+ head: ['Name', 'Prefix', 'Type', 'Status', 'Tenant', 'Permissions', 'Expires', 'Rotations'],
33
+ style: { head: ['cyan'] },
34
+ });
35
+ for (const key of result.items) {
36
+ const daysLeft = getDaysUntilExpiry(key.expires_at);
37
+ const expiryColor = daysLeft <= 7 ? '\x1b[31m' : daysLeft <= 30 ? '\x1b[33m' : '';
38
+ const reset = expiryColor ? '\x1b[0m' : '';
39
+ const statusIcon = key.enabled ? '\x1b[32m●\x1b[0m' : '\x1b[31m○\x1b[0m';
40
+ const statusText = key.enabled ? 'Active' : 'Disabled';
41
+ // Format key type (static vs managed with rotation info)
42
+ let keyType = 'Static';
43
+ if (key.is_managed && key.rotation_mode) {
44
+ const mode = key.rotation_mode.replace('on-', '');
45
+ const interval = key.rotation_interval_seconds
46
+ ? formatSecondsToHuman(key.rotation_interval_seconds)
47
+ : '';
48
+ keyType = interval ? `${mode}/${interval}` : mode;
49
+ }
50
+ table.push([
51
+ key.name,
52
+ key.prefix,
53
+ keyType,
54
+ `${statusIcon} ${statusText}`,
55
+ key.tenant_id,
56
+ formatPermissions(key.permissions),
57
+ `${expiryColor}${formatExpiry(key.expires_at)}${reset}`,
58
+ key.rotation_count > 0 ? `${key.rotation_count}x` : '-',
59
+ ]);
60
+ }
61
+ console.log(table.toString());
62
+ const showingInfo = result.pagination.hasMore
63
+ ? `Showing ${result.items.length} of ${result.pagination.total}`
64
+ : `Total: ${result.pagination.total}`;
65
+ console.log(`\n${showingInfo} API key(s)`);
66
+ }
67
+ catch (err) {
68
+ spinner.fail('Failed to list API keys');
69
+ output.error(err instanceof Error ? err.message : String(err));
70
+ process.exit(1);
71
+ }
72
+ });
73
+ }
74
+ //# sourceMappingURL=list.js.map