@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.
- package/dist/commands/apikey/conditions.d.ts +6 -0
- package/dist/commands/apikey/conditions.d.ts.map +1 -0
- package/dist/commands/apikey/conditions.js +57 -0
- package/dist/commands/apikey/conditions.js.map +1 -0
- package/dist/commands/apikey/create.d.ts +6 -0
- package/dist/commands/apikey/create.d.ts.map +1 -0
- package/dist/commands/apikey/create.js +106 -0
- package/dist/commands/apikey/create.js.map +1 -0
- package/dist/commands/apikey/delete.d.ts +6 -0
- package/dist/commands/apikey/delete.d.ts.map +1 -0
- package/dist/commands/apikey/delete.js +29 -0
- package/dist/commands/apikey/delete.js.map +1 -0
- package/dist/commands/apikey/enable-disable.d.ts +6 -0
- package/dist/commands/apikey/enable-disable.d.ts.map +1 -0
- package/dist/commands/apikey/enable-disable.js +44 -0
- package/dist/commands/apikey/enable-disable.js.map +1 -0
- package/dist/commands/apikey/helpers.d.ts +23 -0
- package/dist/commands/apikey/helpers.d.ts.map +1 -0
- package/dist/commands/apikey/helpers.js +135 -0
- package/dist/commands/apikey/helpers.js.map +1 -0
- package/dist/commands/apikey/index.d.ts +10 -0
- package/dist/commands/apikey/index.d.ts.map +1 -0
- package/dist/commands/apikey/index.js +33 -0
- package/dist/commands/apikey/index.js.map +1 -0
- package/dist/commands/apikey/list.d.ts +6 -0
- package/dist/commands/apikey/list.d.ts.map +1 -0
- package/dist/commands/apikey/list.js +74 -0
- package/dist/commands/apikey/list.js.map +1 -0
- package/dist/commands/apikey/managed/bind.d.ts +6 -0
- package/dist/commands/apikey/managed/bind.d.ts.map +1 -0
- package/dist/commands/apikey/managed/bind.js +52 -0
- package/dist/commands/apikey/managed/bind.js.map +1 -0
- package/dist/commands/apikey/managed/conditions.d.ts +6 -0
- package/dist/commands/apikey/managed/conditions.d.ts.map +1 -0
- package/dist/commands/apikey/managed/conditions.js +62 -0
- package/dist/commands/apikey/managed/conditions.js.map +1 -0
- package/dist/commands/apikey/managed/config.d.ts +6 -0
- package/dist/commands/apikey/managed/config.d.ts.map +1 -0
- package/dist/commands/apikey/managed/config.js +52 -0
- package/dist/commands/apikey/managed/config.js.map +1 -0
- package/dist/commands/apikey/managed/create.d.ts +6 -0
- package/dist/commands/apikey/managed/create.d.ts.map +1 -0
- package/dist/commands/apikey/managed/create.js +82 -0
- package/dist/commands/apikey/managed/create.js.map +1 -0
- package/dist/commands/apikey/managed/delete.d.ts +6 -0
- package/dist/commands/apikey/managed/delete.d.ts.map +1 -0
- package/dist/commands/apikey/managed/delete.js +29 -0
- package/dist/commands/apikey/managed/delete.js.map +1 -0
- package/dist/commands/apikey/managed/get.d.ts +6 -0
- package/dist/commands/apikey/managed/get.d.ts.map +1 -0
- package/dist/commands/apikey/managed/get.js +31 -0
- package/dist/commands/apikey/managed/get.js.map +1 -0
- package/dist/commands/apikey/managed/helpers.d.ts +5 -0
- package/dist/commands/apikey/managed/helpers.d.ts.map +1 -0
- package/dist/commands/apikey/managed/helpers.js +70 -0
- package/dist/commands/apikey/managed/helpers.js.map +1 -0
- package/dist/commands/apikey/managed/index.d.ts +7 -0
- package/dist/commands/apikey/managed/index.d.ts.map +1 -0
- package/dist/commands/apikey/managed/index.js +27 -0
- package/dist/commands/apikey/managed/index.js.map +1 -0
- package/dist/commands/apikey/managed/list.d.ts +6 -0
- package/dist/commands/apikey/managed/list.d.ts.map +1 -0
- package/dist/commands/apikey/managed/list.js +58 -0
- package/dist/commands/apikey/managed/list.js.map +1 -0
- package/dist/commands/apikey/managed/permissions.d.ts +6 -0
- package/dist/commands/apikey/managed/permissions.d.ts.map +1 -0
- package/dist/commands/apikey/managed/permissions.js +73 -0
- package/dist/commands/apikey/managed/permissions.js.map +1 -0
- package/dist/commands/apikey/managed/rotate.d.ts +6 -0
- package/dist/commands/apikey/managed/rotate.d.ts.map +1 -0
- package/dist/commands/apikey/managed/rotate.js +29 -0
- package/dist/commands/apikey/managed/rotate.js.map +1 -0
- package/dist/commands/apikey/managed/types.d.ts +62 -0
- package/dist/commands/apikey/managed/types.d.ts.map +1 -0
- package/dist/commands/apikey/managed/types.js +3 -0
- package/dist/commands/apikey/managed/types.js.map +1 -0
- package/dist/commands/apikey/permissions.d.ts +6 -0
- package/dist/commands/apikey/permissions.d.ts.map +1 -0
- package/dist/commands/apikey/permissions.js +70 -0
- package/dist/commands/apikey/permissions.js.map +1 -0
- package/dist/commands/apikey/policies.d.ts +6 -0
- package/dist/commands/apikey/policies.d.ts.map +1 -0
- package/dist/commands/apikey/policies.js +82 -0
- package/dist/commands/apikey/policies.js.map +1 -0
- package/dist/commands/apikey/rotate.d.ts +6 -0
- package/dist/commands/apikey/rotate.d.ts.map +1 -0
- package/dist/commands/apikey/rotate.js +42 -0
- package/dist/commands/apikey/rotate.js.map +1 -0
- package/dist/commands/apikey/self.d.ts +6 -0
- package/dist/commands/apikey/self.d.ts.map +1 -0
- package/dist/commands/apikey/self.js +96 -0
- package/dist/commands/apikey/self.js.map +1 -0
- package/dist/commands/apikey/show.d.ts +6 -0
- package/dist/commands/apikey/show.d.ts.map +1 -0
- package/dist/commands/apikey/show.js +79 -0
- package/dist/commands/apikey/show.js.map +1 -0
- package/dist/commands/apikey/types.d.ts +83 -0
- package/dist/commands/apikey/types.d.ts.map +1 -0
- package/dist/commands/apikey/types.js +3 -0
- package/dist/commands/apikey/types.js.map +1 -0
- package/dist/commands/apikey.d.ts +8 -2
- package/dist/commands/apikey.d.ts.map +1 -1
- package/dist/commands/apikey.js +9 -1296
- package/dist/commands/apikey.js.map +1 -1
- package/dist/commands/device.d.ts.map +1 -1
- package/dist/commands/device.js +8 -5
- package/dist/commands/device.js.map +1 -1
- package/dist/commands/plugin.d.ts.map +1 -1
- package/dist/commands/plugin.js +29 -7
- package/dist/commands/plugin.js.map +1 -1
- package/dist/commands/secret/copy.d.ts +6 -0
- package/dist/commands/secret/copy.d.ts.map +1 -0
- package/dist/commands/secret/copy.js +43 -0
- package/dist/commands/secret/copy.js.map +1 -0
- package/dist/commands/secret/create.d.ts +6 -0
- package/dist/commands/secret/create.d.ts.map +1 -0
- package/dist/commands/secret/create.js +297 -0
- package/dist/commands/secret/create.js.map +1 -0
- package/dist/commands/secret/decrypt.d.ts +6 -0
- package/dist/commands/secret/decrypt.d.ts.map +1 -0
- package/dist/commands/secret/decrypt.js +104 -0
- package/dist/commands/secret/decrypt.js.map +1 -0
- package/dist/commands/secret/delete.d.ts +6 -0
- package/dist/commands/secret/delete.d.ts.map +1 -0
- package/dist/commands/secret/delete.js +60 -0
- package/dist/commands/secret/delete.js.map +1 -0
- package/dist/commands/secret/get.d.ts +6 -0
- package/dist/commands/secret/get.d.ts.map +1 -0
- package/dist/commands/secret/get.js +60 -0
- package/dist/commands/secret/get.js.map +1 -0
- package/dist/commands/secret/helpers.d.ts +11 -0
- package/dist/commands/secret/helpers.d.ts.map +1 -0
- package/dist/commands/secret/helpers.js +59 -0
- package/dist/commands/secret/helpers.js.map +1 -0
- package/dist/commands/secret/history.d.ts +6 -0
- package/dist/commands/secret/history.d.ts.map +1 -0
- package/dist/commands/secret/history.js +52 -0
- package/dist/commands/secret/history.js.map +1 -0
- package/dist/commands/secret/index.d.ts +12 -0
- package/dist/commands/secret/index.d.ts.map +1 -0
- package/dist/commands/secret/index.js +49 -0
- package/dist/commands/secret/index.js.map +1 -0
- package/dist/commands/secret/list.d.ts +6 -0
- package/dist/commands/secret/list.d.ts.map +1 -0
- package/dist/commands/secret/list.js +72 -0
- package/dist/commands/secret/list.js.map +1 -0
- package/dist/commands/secret/pem-analysis.d.ts +32 -0
- package/dist/commands/secret/pem-analysis.d.ts.map +1 -0
- package/dist/commands/secret/pem-analysis.js +190 -0
- package/dist/commands/secret/pem-analysis.js.map +1 -0
- package/dist/commands/secret/resolve.d.ts +17 -0
- package/dist/commands/secret/resolve.d.ts.map +1 -0
- package/dist/commands/secret/resolve.js +36 -0
- package/dist/commands/secret/resolve.js.map +1 -0
- package/dist/commands/secret/rotate.d.ts +6 -0
- package/dist/commands/secret/rotate.d.ts.map +1 -0
- package/dist/commands/secret/rotate.js +72 -0
- package/dist/commands/secret/rotate.js.map +1 -0
- package/dist/commands/secret/types.d.ts +123 -0
- package/dist/commands/secret/types.d.ts.map +1 -0
- package/dist/commands/secret/types.js +3 -0
- package/dist/commands/secret/types.js.map +1 -0
- package/dist/commands/secret/update.d.ts +6 -0
- package/dist/commands/secret/update.d.ts.map +1 -0
- package/dist/commands/secret/update.js +124 -0
- package/dist/commands/secret/update.js.map +1 -0
- package/dist/commands/secret.d.ts +8 -2
- package/dist/commands/secret.d.ts.map +1 -1
- package/dist/commands/secret.js +6 -1131
- package/dist/commands/secret.js.map +1 -1
- package/dist/index.js +48 -4
- package/dist/index.js.map +1 -1
- package/dist/lib/client/apikeys.d.ts +34 -0
- package/dist/lib/client/apikeys.d.ts.map +1 -0
- package/dist/lib/client/apikeys.js +113 -0
- package/dist/lib/client/apikeys.js.map +1 -0
- package/dist/lib/client/audit.d.ts +21 -0
- package/dist/lib/client/audit.d.ts.map +1 -0
- package/dist/lib/client/audit.js +40 -0
- package/dist/lib/client/audit.js.map +1 -0
- package/dist/lib/client/health.d.ts +30 -0
- package/dist/lib/client/health.d.ts.map +1 -0
- package/dist/lib/client/health.js +55 -0
- package/dist/lib/client/health.js.map +1 -0
- package/dist/lib/client/http.d.ts +50 -0
- package/dist/lib/client/http.d.ts.map +1 -0
- package/dist/lib/client/http.js +333 -0
- package/dist/lib/client/http.js.map +1 -0
- package/dist/lib/client/index.d.ts +156 -0
- package/dist/lib/client/index.d.ts.map +1 -0
- package/dist/lib/client/index.js +172 -0
- package/dist/lib/client/index.js.map +1 -0
- package/dist/lib/client/lockdown.d.ts +23 -0
- package/dist/lib/client/lockdown.d.ts.map +1 -0
- package/dist/lib/client/lockdown.js +48 -0
- package/dist/lib/client/lockdown.js.map +1 -0
- package/dist/lib/client/managed-keys.d.ts +18 -0
- package/dist/lib/client/managed-keys.d.ts.map +1 -0
- package/dist/lib/client/managed-keys.js +190 -0
- package/dist/lib/client/managed-keys.js.map +1 -0
- package/dist/lib/client/policies.d.ts +35 -0
- package/dist/lib/client/policies.d.ts.map +1 -0
- package/dist/lib/client/policies.js +131 -0
- package/dist/lib/client/policies.js.map +1 -0
- package/dist/lib/client/tenants.d.ts +29 -0
- package/dist/lib/client/tenants.d.ts.map +1 -0
- package/dist/lib/client/tenants.js +56 -0
- package/dist/lib/client/tenants.js.map +1 -0
- package/dist/lib/client/types.d.ts +45 -0
- package/dist/lib/client/types.d.ts.map +1 -0
- package/dist/lib/client/types.js +3 -0
- package/dist/lib/client/types.js.map +1 -0
- package/dist/lib/client/users.d.ts +44 -0
- package/dist/lib/client/users.d.ts.map +1 -0
- package/dist/lib/client/users.js +116 -0
- package/dist/lib/client/users.js.map +1 -0
- package/dist/lib/client.d.ts +11 -246
- package/dist/lib/client.d.ts.map +1 -1
- package/dist/lib/client.js +10 -999
- package/dist/lib/client.js.map +1 -1
- package/dist/lib/command-error-handler.d.ts +99 -0
- package/dist/lib/command-error-handler.d.ts.map +1 -0
- package/dist/lib/command-error-handler.js +108 -0
- package/dist/lib/command-error-handler.js.map +1 -0
- package/dist/lib/config/apikey.d.ts +29 -0
- package/dist/lib/config/apikey.d.ts.map +1 -0
- package/dist/lib/config/apikey.js +58 -0
- package/dist/lib/config/apikey.js.map +1 -0
- package/dist/lib/config/cache.d.ts +47 -0
- package/dist/lib/config/cache.d.ts.map +1 -0
- package/dist/lib/config/cache.js +84 -0
- package/dist/lib/config/cache.js.map +1 -0
- package/dist/lib/config/credentials.d.ts +33 -0
- package/dist/lib/config/credentials.d.ts.map +1 -0
- package/dist/lib/config/credentials.js +70 -0
- package/dist/lib/config/credentials.js.map +1 -0
- package/dist/lib/config/getters.d.ts +28 -0
- package/dist/lib/config/getters.d.ts.map +1 -0
- package/dist/lib/config/getters.js +65 -0
- package/dist/lib/config/getters.js.map +1 -0
- package/dist/lib/config/index.d.ts +17 -0
- package/dist/lib/config/index.d.ts.map +1 -0
- package/dist/lib/config/index.js +21 -0
- package/dist/lib/config/index.js.map +1 -0
- package/dist/lib/config/migration.d.ts +10 -0
- package/dist/lib/config/migration.d.ts.map +1 -0
- package/dist/lib/config/migration.js +59 -0
- package/dist/lib/config/migration.js.map +1 -0
- package/dist/lib/config/plugins.d.ts +25 -0
- package/dist/lib/config/plugins.d.ts.map +1 -0
- package/dist/lib/config/plugins.js +58 -0
- package/dist/lib/config/plugins.js.map +1 -0
- package/dist/lib/config/profile.d.ts +42 -0
- package/dist/lib/config/profile.d.ts.map +1 -0
- package/dist/lib/config/profile.js +154 -0
- package/dist/lib/config/profile.js.map +1 -0
- package/dist/lib/config/store.d.ts +23 -0
- package/dist/lib/config/store.d.ts.map +1 -0
- package/dist/lib/config/store.js +41 -0
- package/dist/lib/config/store.js.map +1 -0
- package/dist/lib/config/types.d.ts +44 -0
- package/dist/lib/config/types.d.ts.map +1 -0
- package/dist/lib/config/types.js +8 -0
- package/dist/lib/config/types.js.map +1 -0
- package/dist/lib/config/validation.d.ts +38 -0
- package/dist/lib/config/validation.d.ts.map +1 -0
- package/dist/lib/config/validation.js +146 -0
- package/dist/lib/config/validation.js.map +1 -0
- package/dist/lib/config.d.ts +5 -158
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +26 -424
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/constants.d.ts +65 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +90 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/db.d.ts +4 -0
- package/dist/lib/db.d.ts.map +1 -1
- package/dist/lib/db.js +77 -46
- package/dist/lib/db.js.map +1 -1
- package/dist/lib/format-helpers.d.ts +63 -0
- package/dist/lib/format-helpers.d.ts.map +1 -0
- package/dist/lib/format-helpers.js +219 -0
- package/dist/lib/format-helpers.js.map +1 -0
- package/dist/lib/visual.d.ts +22 -0
- package/dist/lib/visual.d.ts.map +1 -1
- package/dist/lib/visual.js +83 -0
- package/dist/lib/visual.js.map +1 -1
- package/dist/services/signature-verifier.d.ts.map +1 -1
- package/dist/services/signature-verifier.js +11 -4
- package/dist/services/signature-verifier.js.map +1 -1
- package/dist/services/update-installer.d.ts +7 -0
- package/dist/services/update-installer.d.ts.map +1 -1
- package/dist/services/update-installer.js +58 -19
- package/dist/services/update-installer.js.map +1 -1
- package/package.json +1 -1
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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
|