@zincapp/znvault-cli 2.19.0 → 2.19.1

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 (109) hide show
  1. package/dist/commands/dynamic-secrets/connection.d.ts +17 -0
  2. package/dist/commands/dynamic-secrets/connection.d.ts.map +1 -0
  3. package/dist/commands/dynamic-secrets/connection.js +217 -0
  4. package/dist/commands/dynamic-secrets/connection.js.map +1 -0
  5. package/dist/commands/dynamic-secrets/creds.d.ts +5 -0
  6. package/dist/commands/dynamic-secrets/creds.d.ts.map +1 -0
  7. package/dist/commands/dynamic-secrets/creds.js +39 -0
  8. package/dist/commands/dynamic-secrets/creds.js.map +1 -0
  9. package/dist/commands/dynamic-secrets/helpers.d.ts +5 -0
  10. package/dist/commands/dynamic-secrets/helpers.d.ts.map +1 -0
  11. package/dist/commands/dynamic-secrets/helpers.js +36 -0
  12. package/dist/commands/dynamic-secrets/helpers.js.map +1 -0
  13. package/dist/commands/dynamic-secrets/index.d.ts +7 -0
  14. package/dist/commands/dynamic-secrets/index.d.ts.map +1 -0
  15. package/dist/commands/dynamic-secrets/index.js +173 -0
  16. package/dist/commands/dynamic-secrets/index.js.map +1 -0
  17. package/dist/commands/dynamic-secrets/lease.d.ts +11 -0
  18. package/dist/commands/dynamic-secrets/lease.d.ts.map +1 -0
  19. package/dist/commands/dynamic-secrets/lease.js +137 -0
  20. package/dist/commands/dynamic-secrets/lease.js.map +1 -0
  21. package/dist/commands/dynamic-secrets/role.d.ts +15 -0
  22. package/dist/commands/dynamic-secrets/role.d.ts.map +1 -0
  23. package/dist/commands/dynamic-secrets/role.js +184 -0
  24. package/dist/commands/dynamic-secrets/role.js.map +1 -0
  25. package/dist/commands/dynamic-secrets/types.d.ts +125 -0
  26. package/dist/commands/dynamic-secrets/types.d.ts.map +1 -0
  27. package/dist/commands/dynamic-secrets/types.js +3 -0
  28. package/dist/commands/dynamic-secrets/types.js.map +1 -0
  29. package/dist/commands/dynamic-secrets.d.ts +6 -2
  30. package/dist/commands/dynamic-secrets.d.ts.map +1 -1
  31. package/dist/commands/dynamic-secrets.js +6 -754
  32. package/dist/commands/dynamic-secrets.js.map +1 -1
  33. package/dist/commands/policy/attachments.d.ts +9 -0
  34. package/dist/commands/policy/attachments.d.ts.map +1 -0
  35. package/dist/commands/policy/attachments.js +161 -0
  36. package/dist/commands/policy/attachments.js.map +1 -0
  37. package/dist/commands/policy/crud.d.ts +8 -0
  38. package/dist/commands/policy/crud.d.ts.map +1 -0
  39. package/dist/commands/policy/crud.js +232 -0
  40. package/dist/commands/policy/crud.js.map +1 -0
  41. package/dist/commands/policy/helpers.d.ts +13 -0
  42. package/dist/commands/policy/helpers.d.ts.map +1 -0
  43. package/dist/commands/policy/helpers.js +61 -0
  44. package/dist/commands/policy/helpers.js.map +1 -0
  45. package/dist/commands/policy/index.d.ts +7 -0
  46. package/dist/commands/policy/index.d.ts.map +1 -0
  47. package/dist/commands/policy/index.js +160 -0
  48. package/dist/commands/policy/index.js.map +1 -0
  49. package/dist/commands/policy/io.d.ts +4 -0
  50. package/dist/commands/policy/io.d.ts.map +1 -0
  51. package/dist/commands/policy/io.js +65 -0
  52. package/dist/commands/policy/io.js.map +1 -0
  53. package/dist/commands/policy/list.d.ts +4 -0
  54. package/dist/commands/policy/list.d.ts.map +1 -0
  55. package/dist/commands/policy/list.js +99 -0
  56. package/dist/commands/policy/list.js.map +1 -0
  57. package/dist/commands/policy/test.d.ts +3 -0
  58. package/dist/commands/policy/test.d.ts.map +1 -0
  59. package/dist/commands/policy/test.js +58 -0
  60. package/dist/commands/policy/test.js.map +1 -0
  61. package/dist/commands/policy/types.d.ts +84 -0
  62. package/dist/commands/policy/types.d.ts.map +1 -0
  63. package/dist/commands/policy/types.js +3 -0
  64. package/dist/commands/policy/types.js.map +1 -0
  65. package/dist/commands/policy.d.ts +6 -2
  66. package/dist/commands/policy.d.ts.map +1 -1
  67. package/dist/commands/policy.js +4 -770
  68. package/dist/commands/policy.js.map +1 -1
  69. package/dist/lib/db/audit.d.ts +16 -0
  70. package/dist/lib/db/audit.d.ts.map +1 -0
  71. package/dist/lib/db/audit.js +60 -0
  72. package/dist/lib/db/audit.js.map +1 -0
  73. package/dist/lib/db/client.d.ts +27 -0
  74. package/dist/lib/db/client.d.ts.map +1 -0
  75. package/dist/lib/db/client.js +70 -0
  76. package/dist/lib/db/client.js.map +1 -0
  77. package/dist/lib/db/emergency.d.ts +50 -0
  78. package/dist/lib/db/emergency.d.ts.map +1 -0
  79. package/dist/lib/db/emergency.js +180 -0
  80. package/dist/lib/db/emergency.js.map +1 -0
  81. package/dist/lib/db/health.d.ts +14 -0
  82. package/dist/lib/db/health.d.ts.map +1 -0
  83. package/dist/lib/db/health.js +177 -0
  84. package/dist/lib/db/health.js.map +1 -0
  85. package/dist/lib/db/index.d.ts +56 -0
  86. package/dist/lib/db/index.d.ts.map +1 -0
  87. package/dist/lib/db/index.js +107 -0
  88. package/dist/lib/db/index.js.map +1 -0
  89. package/dist/lib/db/lockdown.d.ts +15 -0
  90. package/dist/lib/db/lockdown.d.ts.map +1 -0
  91. package/dist/lib/db/lockdown.js +67 -0
  92. package/dist/lib/db/lockdown.js.map +1 -0
  93. package/dist/lib/db/tenants.d.ts +14 -0
  94. package/dist/lib/db/tenants.d.ts.map +1 -0
  95. package/dist/lib/db/tenants.js +88 -0
  96. package/dist/lib/db/tenants.js.map +1 -0
  97. package/dist/lib/db/types.d.ts +95 -0
  98. package/dist/lib/db/types.d.ts.map +1 -0
  99. package/dist/lib/db/types.js +3 -0
  100. package/dist/lib/db/types.js.map +1 -0
  101. package/dist/lib/db/users.d.ts +16 -0
  102. package/dist/lib/db/users.d.ts.map +1 -0
  103. package/dist/lib/db/users.js +95 -0
  104. package/dist/lib/db/users.js.map +1 -0
  105. package/dist/lib/db.d.ts +4 -112
  106. package/dist/lib/db.d.ts.map +1 -1
  107. package/dist/lib/db.js +4 -726
  108. package/dist/lib/db.js.map +1 -1
  109. package/package.json +1 -1
@@ -0,0 +1,160 @@
1
+ // Path: src/commands/policy/index.ts
2
+ import { listPolicies, getPolicy } from './list.js';
3
+ import { createPolicy, updatePolicy, deletePolicy, enablePolicy, disablePolicy, validatePolicy } from './crud.js';
4
+ import { showAttachments, attachPolicyToUser, attachPolicyToRole, detachPolicyFromUser, detachPolicyFromRole, listUserPolicies, listRolePolicies, } from './attachments.js';
5
+ import { testPolicy } from './test.js';
6
+ import { exportPolicy, importPolicy } from './io.js';
7
+ // Re-export types
8
+ export * from './types.js';
9
+ export function registerPolicyCommands(program) {
10
+ const policy = program
11
+ .command('policy')
12
+ .description('ABAC policy management commands');
13
+ // ============ List Policies ============
14
+ policy
15
+ .command('list')
16
+ .description('List ABAC policies')
17
+ .option('--tenant <id>', 'Filter by tenant ID (superadmin only)')
18
+ .option('--enabled', 'Show only enabled policies')
19
+ .option('--disabled', 'Show only disabled policies')
20
+ .option('--effect <effect>', 'Filter by effect (allow|deny)')
21
+ .option('--search <term>', 'Search by name or description')
22
+ .option('--json', 'Output as JSON')
23
+ .action(listPolicies);
24
+ // ============ Get Policy ============
25
+ policy
26
+ .command('get <id>')
27
+ .description('Get policy details')
28
+ .option('--json', 'Output as JSON')
29
+ .action(getPolicy);
30
+ // ============ Create Policy ============
31
+ policy
32
+ .command('create')
33
+ .description('Create a new ABAC policy')
34
+ .requiredOption('--name <name>', 'Policy name')
35
+ .requiredOption('--effect <effect>', 'Policy effect (allow|deny)')
36
+ .requiredOption('--actions <actions>', 'Comma-separated list of actions (e.g., secret:read:value,secret:update)')
37
+ .option('--description <desc>', 'Policy description')
38
+ .option('--priority <num>', 'Priority (higher = evaluated first)', '0')
39
+ .option('--tenant <id>', 'Tenant ID (omit for global policy)')
40
+ .option('--resources <json>', 'Resources JSON array')
41
+ .option('--conditions <json>', 'Conditions JSON array')
42
+ .option('--from-file <path>', 'Load policy definition from JSON file')
43
+ .option('--json', 'Output as JSON')
44
+ .action(createPolicy);
45
+ // ============ Update Policy ============
46
+ policy
47
+ .command('update <id>')
48
+ .description('Update an ABAC policy')
49
+ .option('--name <name>', 'New policy name')
50
+ .option('--description <desc>', 'New description')
51
+ .option('--effect <effect>', 'New effect (allow|deny)')
52
+ .option('--actions <actions>', 'New comma-separated list of actions')
53
+ .option('--priority <num>', 'New priority')
54
+ .option('--resources <json>', 'New resources JSON array')
55
+ .option('--conditions <json>', 'New conditions JSON array')
56
+ .option('--from-file <path>', 'Load updates from JSON file')
57
+ .option('--json', 'Output as JSON')
58
+ .action(updatePolicy);
59
+ // ============ Delete Policy ============
60
+ policy
61
+ .command('delete <id>')
62
+ .description('Delete an ABAC policy')
63
+ .option('-y, --yes', 'Skip confirmation')
64
+ .option('--json', 'Output as JSON')
65
+ .action(deletePolicy);
66
+ // ============ Enable Policy ============
67
+ policy
68
+ .command('enable <id>')
69
+ .description('Enable an ABAC policy')
70
+ .option('--json', 'Output as JSON')
71
+ .action(enablePolicy);
72
+ // ============ Disable Policy ============
73
+ policy
74
+ .command('disable <id>')
75
+ .description('Disable an ABAC policy')
76
+ .option('--json', 'Output as JSON')
77
+ .action(disablePolicy);
78
+ // ============ Validate Policy ============
79
+ policy
80
+ .command('validate')
81
+ .description('Validate a policy definition without creating it')
82
+ .requiredOption('--name <name>', 'Policy name')
83
+ .requiredOption('--effect <effect>', 'Policy effect (allow|deny)')
84
+ .requiredOption('--actions <actions>', 'Comma-separated list of actions')
85
+ .option('--description <desc>', 'Policy description')
86
+ .option('--priority <num>', 'Priority', '0')
87
+ .option('--resources <json>', 'Resources JSON array')
88
+ .option('--conditions <json>', 'Conditions JSON array')
89
+ .option('--from-file <path>', 'Load policy from JSON file')
90
+ .action(validatePolicy);
91
+ // ============ Show Policy Attachments ============
92
+ policy
93
+ .command('attachments <id>')
94
+ .description('Show users and roles attached to a policy')
95
+ .option('--json', 'Output as JSON')
96
+ .action(showAttachments);
97
+ // ============ Attach Policy to User ============
98
+ policy
99
+ .command('attach-user <policyId> <userId>')
100
+ .description('Attach a policy to a user')
101
+ .option('--json', 'Output as JSON')
102
+ .action(attachPolicyToUser);
103
+ // ============ Attach Policy to Role ============
104
+ policy
105
+ .command('attach-role <policyId> <roleId>')
106
+ .description('Attach a policy to a role')
107
+ .option('--json', 'Output as JSON')
108
+ .action(attachPolicyToRole);
109
+ // ============ Detach Policy from User ============
110
+ policy
111
+ .command('detach-user <policyId> <userId>')
112
+ .description('Detach a policy from a user')
113
+ .option('--json', 'Output as JSON')
114
+ .action(detachPolicyFromUser);
115
+ // ============ Detach Policy from Role ============
116
+ policy
117
+ .command('detach-role <policyId> <roleId>')
118
+ .description('Detach a policy from a role')
119
+ .option('--json', 'Output as JSON')
120
+ .action(detachPolicyFromRole);
121
+ // ============ List User's Policies ============
122
+ policy
123
+ .command('user-policies <userId>')
124
+ .description('List policies attached to a user (directly or via roles)')
125
+ .option('--json', 'Output as JSON')
126
+ .action(listUserPolicies);
127
+ // ============ List Role's Policies ============
128
+ policy
129
+ .command('role-policies <roleId>')
130
+ .description('List policies attached to a role')
131
+ .option('--json', 'Output as JSON')
132
+ .action(listRolePolicies);
133
+ // ============ Test Policy Evaluation ============
134
+ policy
135
+ .command('test')
136
+ .description('Test ABAC policy evaluation for a user and action')
137
+ .requiredOption('--user <userId>', 'User ID to test')
138
+ .requiredOption('--action <action>', 'Action to test (e.g., secret:read:value)')
139
+ .option('--resource-type <type>', 'Resource type (secret|kms_key|certificate|...)')
140
+ .option('--resource-id <id>', 'Resource ID')
141
+ .option('--resource-tenant <id>', 'Resource tenant ID')
142
+ .option('--ip <ip>', 'Simulated client IP address')
143
+ .option('--mfa', 'Simulate MFA verified')
144
+ .option('--json', 'Output as JSON')
145
+ .action(testPolicy);
146
+ // ============ Export Policy ============
147
+ policy
148
+ .command('export <id>')
149
+ .description('Export a policy as JSON')
150
+ .option('-o, --output <path>', 'Output file path')
151
+ .action(exportPolicy);
152
+ // ============ Import Policy ============
153
+ policy
154
+ .command('import <path>')
155
+ .description('Import a policy from JSON file')
156
+ .option('--tenant <id>', 'Override tenant ID')
157
+ .option('--json', 'Output as JSON')
158
+ .action(importPolicy);
159
+ }
160
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/policy/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { PolicyExportOptions, PolicyImportOptions } from './types.js';
2
+ export declare function exportPolicy(id: string, options: PolicyExportOptions): Promise<void>;
3
+ export declare function importPolicy(path: string, options: PolicyImportOptions): Promise<void>;
4
+ //# sourceMappingURL=io.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"io.d.ts","sourceRoot":"","sources":["../../../src/commands/policy/io.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAG3E,wBAAsB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B1F;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B5F"}
@@ -0,0 +1,65 @@
1
+ // Path: src/commands/policy/io.ts
2
+ /**
3
+ * Policy import/export commands
4
+ */
5
+ import ora from 'ora';
6
+ import { client } from '../../lib/client.js';
7
+ import * as output from '../../lib/output.js';
8
+ import { safeReadFile, safeParseJson, safeWriteFile } from './helpers.js';
9
+ export async function exportPolicy(id, options) {
10
+ const spinner = ora('Exporting policy...').start();
11
+ try {
12
+ const result = await client.getPolicy(id);
13
+ spinner.stop();
14
+ const exportData = {
15
+ name: result.name,
16
+ description: result.description,
17
+ effect: result.effect,
18
+ actions: result.actions,
19
+ resources: result.resources,
20
+ conditions: result.conditions,
21
+ priority: result.priority,
22
+ };
23
+ const jsonString = JSON.stringify(exportData, null, 2);
24
+ if (options.output) {
25
+ safeWriteFile(options.output, jsonString);
26
+ output.success(`Policy exported to ${options.output}`);
27
+ }
28
+ else {
29
+ console.log(jsonString);
30
+ }
31
+ }
32
+ catch (err) {
33
+ spinner.fail('Failed to export policy');
34
+ output.error(err instanceof Error ? err.message : String(err));
35
+ process.exit(1);
36
+ }
37
+ }
38
+ export async function importPolicy(path, options) {
39
+ try {
40
+ const content = safeReadFile(path);
41
+ const policyData = safeParseJson(content, path);
42
+ if (options.tenant) {
43
+ policyData.tenantId = options.tenant;
44
+ }
45
+ const spinner = ora('Importing policy...').start();
46
+ const result = await client.createPolicy(policyData);
47
+ spinner.succeed('Policy imported successfully');
48
+ if (options.json) {
49
+ output.json(result);
50
+ }
51
+ else {
52
+ output.keyValue({
53
+ 'ID': result.id,
54
+ 'Name': result.name,
55
+ 'Effect': result.effect.toUpperCase(),
56
+ 'Status': result.isActive ? 'Enabled' : 'Disabled',
57
+ });
58
+ }
59
+ }
60
+ catch (err) {
61
+ output.error(err instanceof Error ? err.message : String(err));
62
+ process.exit(1);
63
+ }
64
+ }
65
+ //# sourceMappingURL=io.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"io.js","sourceRoot":"","sources":["../../../src/commands/policy/io.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAElC;;GAEG;AAEH,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAG9C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE1E,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EAAU,EAAE,OAA4B;IACzE,MAAM,OAAO,GAAG,GAAG,CAAC,qBAAqB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEnD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,MAAM,UAAU,GAAG;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAEvD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAC1C,MAAM,CAAC,OAAO,CAAC,sBAAsB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACzD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAY,EAAE,OAA4B;IAC3E,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,UAAU,GAAG,aAAa,CAAoB,OAAO,EAAE,IAAI,CAAC,CAAC;QAEnE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,UAAU,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;QACvC,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,CAAC,qBAAqB,CAAC,CAAC,KAAK,EAAE,CAAC;QAEnD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACrD,OAAO,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;QAEhD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,QAAQ,CAAC;gBACd,IAAI,EAAE,MAAM,CAAC,EAAE;gBACf,MAAM,EAAE,MAAM,CAAC,IAAI;gBACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE;gBACrC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;aACnD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { PolicyListOptions, PolicyGetOptions } from './types.js';
2
+ export declare function listPolicies(options: PolicyListOptions): Promise<void>;
3
+ export declare function getPolicy(id: string, options: PolicyGetOptions): Promise<void>;
4
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/policy/list.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEtE,wBAAsB,YAAY,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyC5E;AAED,wBAAsB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0DpF"}
@@ -0,0 +1,99 @@
1
+ // Path: src/commands/policy/list.ts
2
+ /**
3
+ * Policy list and get commands
4
+ */
5
+ import ora from 'ora';
6
+ import { client } from '../../lib/client.js';
7
+ import * as output from '../../lib/output.js';
8
+ export async function listPolicies(options) {
9
+ const spinner = ora('Fetching policies...').start();
10
+ try {
11
+ const result = await client.listPolicies({
12
+ tenantId: options.tenant,
13
+ enabled: options.enabled ? true : options.disabled ? false : undefined,
14
+ effect: options.effect,
15
+ search: options.search,
16
+ });
17
+ spinner.stop();
18
+ if (options.json) {
19
+ output.json(result.items);
20
+ return;
21
+ }
22
+ if (result.items.length === 0) {
23
+ output.info('No policies found');
24
+ return;
25
+ }
26
+ output.table(['ID', 'Name', 'Effect', 'Priority', 'Actions', 'Status', 'Tenant'], result.items.map(p => [
27
+ p.id.substring(0, 8),
28
+ p.name.length > 25 ? p.name.substring(0, 22) + '...' : p.name,
29
+ p.effect.toUpperCase(),
30
+ p.priority.toString(),
31
+ p.actions.length > 2 ? `${p.actions.slice(0, 2).join(', ')}...` : p.actions.join(', '),
32
+ p.isActive ? 'Enabled' : 'Disabled',
33
+ p.tenantId ?? '-',
34
+ ]));
35
+ output.info(`Total: ${result.pagination.total} policy(s)${result.pagination.hasMore ? ' (more available)' : ''}`);
36
+ }
37
+ catch (err) {
38
+ spinner.fail('Failed to list policies');
39
+ output.error(err instanceof Error ? err.message : String(err));
40
+ process.exit(1);
41
+ }
42
+ }
43
+ export async function getPolicy(id, options) {
44
+ const spinner = ora('Fetching policy...').start();
45
+ try {
46
+ const result = await client.getPolicy(id);
47
+ spinner.stop();
48
+ if (options.json) {
49
+ output.json(result);
50
+ return;
51
+ }
52
+ output.section('Policy Details');
53
+ output.keyValue({
54
+ 'ID': result.id,
55
+ 'Name': result.name,
56
+ 'Description': result.description ?? '-',
57
+ 'Effect': result.effect.toUpperCase(),
58
+ 'Priority': result.priority.toString(),
59
+ 'Status': result.isActive ? 'Enabled' : 'Disabled',
60
+ 'Tenant': result.tenantId ?? 'Global',
61
+ 'Created': output.formatDate(result.createdAt),
62
+ 'Updated': output.formatDate(result.updatedAt),
63
+ });
64
+ console.log();
65
+ output.section('Actions');
66
+ for (const action of result.actions) {
67
+ console.log(` - ${action}`);
68
+ }
69
+ if (result.resources && result.resources.length > 0) {
70
+ console.log();
71
+ output.section('Resources');
72
+ for (const resource of result.resources) {
73
+ const parts = [`type: ${resource.type}`];
74
+ if (resource.id)
75
+ parts.push(`id: ${resource.id}`);
76
+ if (resource.tenantId)
77
+ parts.push(`tenant: ${resource.tenantId}`);
78
+ if (resource.tags)
79
+ parts.push(`tags: ${JSON.stringify(resource.tags)}`);
80
+ console.log(` - ${parts.join(', ')}`);
81
+ }
82
+ }
83
+ if (result.conditions && result.conditions.length > 0) {
84
+ console.log();
85
+ output.section('Conditions');
86
+ for (const condition of result.conditions) {
87
+ const op = condition.operator ? ` ${condition.operator}` : '';
88
+ console.log(` - ${condition.type}${op}: ${JSON.stringify(condition.value)}`);
89
+ }
90
+ }
91
+ console.log();
92
+ }
93
+ catch (err) {
94
+ spinner.fail('Failed to get policy');
95
+ output.error(err instanceof Error ? err.message : String(err));
96
+ process.exit(1);
97
+ }
98
+ }
99
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/policy/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { PolicyTestOptions } from './types.js';
2
+ export declare function testPolicy(options: PolicyTestOptions): Promise<void>;
3
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../src/commands/policy/test.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,wBAAsB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyD1E"}
@@ -0,0 +1,58 @@
1
+ // Path: src/commands/policy/test.ts
2
+ /**
3
+ * Policy test command
4
+ */
5
+ import ora from 'ora';
6
+ import { client } from '../../lib/client.js';
7
+ import * as output from '../../lib/output.js';
8
+ export async function testPolicy(options) {
9
+ const spinner = ora('Testing policy evaluation...').start();
10
+ try {
11
+ const request = {
12
+ userId: options.user,
13
+ action: options.action,
14
+ resource: options.resourceType ? {
15
+ type: options.resourceType,
16
+ id: options.resourceId,
17
+ tenantId: options.resourceTenant,
18
+ } : undefined,
19
+ requestContext: (options.ip !== undefined || options.mfa !== undefined) ? {
20
+ ip: options.ip,
21
+ mfaVerified: options.mfa ?? false,
22
+ } : undefined,
23
+ };
24
+ const result = await client.testPolicy(request);
25
+ spinner.stop();
26
+ if (options.json) {
27
+ output.json(result);
28
+ return;
29
+ }
30
+ const statusIcon = result.allowed ? '[OK]' : '[X]';
31
+ const statusText = result.allowed ? 'ALLOWED' : 'DENIED';
32
+ console.log();
33
+ console.log(` ${statusIcon} Access: ${statusText}`);
34
+ console.log(` Effect: ${result.effect.toUpperCase()}`);
35
+ console.log(` Reason: ${result.reason}`);
36
+ console.log();
37
+ output.keyValue({
38
+ 'Policies Evaluated': result.evaluatedPolicies.toString(),
39
+ 'Policies Matched': result.matchedPolicies.length.toString(),
40
+ 'Evaluation Time': `${result.evaluationTimeMs}ms`,
41
+ });
42
+ if (result.matchedPolicies.length > 0) {
43
+ console.log();
44
+ output.section('Matched Policies');
45
+ output.table(['Name', 'Effect', 'Priority'], result.matchedPolicies.map(p => [
46
+ p.name,
47
+ p.effect.toUpperCase(),
48
+ p.priority.toString(),
49
+ ]));
50
+ }
51
+ }
52
+ catch (err) {
53
+ spinner.fail('Failed to test policy');
54
+ output.error(err instanceof Error ? err.message : String(err));
55
+ process.exit(1);
56
+ }
57
+ }
58
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../../src/commands/policy/test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Type definitions for policy commands
3
+ */
4
+ export interface PolicyListOptions {
5
+ tenant?: string;
6
+ enabled?: boolean;
7
+ disabled?: boolean;
8
+ effect?: string;
9
+ search?: string;
10
+ json?: boolean;
11
+ }
12
+ export interface PolicyGetOptions {
13
+ json?: boolean;
14
+ }
15
+ export interface PolicyCreateOptions {
16
+ name: string;
17
+ effect: string;
18
+ actions: string;
19
+ description?: string;
20
+ priority: string;
21
+ tenant?: string;
22
+ resources?: string;
23
+ conditions?: string;
24
+ fromFile?: string;
25
+ json?: boolean;
26
+ }
27
+ export interface PolicyUpdateOptions {
28
+ name?: string;
29
+ description?: string;
30
+ effect?: string;
31
+ actions?: string;
32
+ priority?: string;
33
+ resources?: string;
34
+ conditions?: string;
35
+ fromFile?: string;
36
+ json?: boolean;
37
+ }
38
+ export interface PolicyDeleteOptions {
39
+ yes?: boolean;
40
+ json?: boolean;
41
+ }
42
+ export interface PolicyToggleOptions {
43
+ json?: boolean;
44
+ }
45
+ export interface PolicyAttachOptions {
46
+ json?: boolean;
47
+ }
48
+ export interface PolicyValidateOptions {
49
+ name: string;
50
+ effect: string;
51
+ actions: string;
52
+ description?: string;
53
+ priority: string;
54
+ resources?: string;
55
+ conditions?: string;
56
+ fromFile?: string;
57
+ }
58
+ export interface PolicyAttachmentsOptions {
59
+ json?: boolean;
60
+ }
61
+ export interface PolicyUserPoliciesOptions {
62
+ json?: boolean;
63
+ }
64
+ export interface PolicyRolePoliciesOptions {
65
+ json?: boolean;
66
+ }
67
+ export interface PolicyTestOptions {
68
+ user: string;
69
+ action: string;
70
+ resourceType?: string;
71
+ resourceId?: string;
72
+ resourceTenant?: string;
73
+ ip?: string;
74
+ mfa?: boolean;
75
+ json?: boolean;
76
+ }
77
+ export interface PolicyExportOptions {
78
+ output?: string;
79
+ }
80
+ export interface PolicyImportOptions {
81
+ tenant?: string;
82
+ json?: boolean;
83
+ }
84
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/commands/policy/types.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB"}
@@ -0,0 +1,3 @@
1
+ // Path: src/commands/policy/types.ts
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/commands/policy/types.ts"],"names":[],"mappings":"AAAA,qCAAqC"}
@@ -1,3 +1,7 @@
1
- import { type Command } from 'commander';
2
- export declare function registerPolicyCommands(program: Command): void;
1
+ /**
2
+ * Policy command re-exports for backward compatibility.
3
+ * The actual implementation has been modularized into src/commands/policy/
4
+ */
5
+ export { registerPolicyCommands } from './policy/index.js';
6
+ export type { PolicyListOptions, PolicyGetOptions, PolicyCreateOptions, PolicyUpdateOptions, PolicyDeleteOptions, PolicyToggleOptions, PolicyAttachOptions, PolicyValidateOptions, PolicyAttachmentsOptions, PolicyUserPoliciesOptions, PolicyRolePoliciesOptions, PolicyTestOptions, PolicyExportOptions, PolicyImportOptions, } from './policy/types.js';
3
7
  //# sourceMappingURL=policy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/commands/policy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAiKzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8wB7D"}
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/commands/policy.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAG3D,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,EACzB,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC"}