@getaegis/cli 0.8.0 → 0.8.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 (210) hide show
  1. package/README.md +5 -0
  2. package/dist/agent/agent.d.ts +98 -0
  3. package/dist/agent/agent.d.ts.map +1 -0
  4. package/dist/agent/agent.js +212 -0
  5. package/dist/agent/agent.js.map +1 -0
  6. package/dist/agent/index.d.ts +3 -0
  7. package/dist/agent/index.d.ts.map +1 -0
  8. package/dist/agent/index.js +2 -0
  9. package/dist/agent/index.js.map +1 -0
  10. package/dist/cli/auth.d.ts +19 -0
  11. package/dist/cli/auth.d.ts.map +1 -0
  12. package/dist/cli/auth.js +44 -0
  13. package/dist/cli/auth.js.map +1 -0
  14. package/dist/cli/commands/agent.d.ts +6 -0
  15. package/dist/cli/commands/agent.d.ts.map +1 -0
  16. package/dist/cli/commands/agent.js +241 -0
  17. package/dist/cli/commands/agent.js.map +1 -0
  18. package/dist/cli/commands/config.d.ts +6 -0
  19. package/dist/cli/commands/config.d.ts.map +1 -0
  20. package/dist/cli/commands/config.js +125 -0
  21. package/dist/cli/commands/config.js.map +1 -0
  22. package/dist/cli/commands/dashboard.d.ts +6 -0
  23. package/dist/cli/commands/dashboard.d.ts.map +1 -0
  24. package/dist/cli/commands/dashboard.js +189 -0
  25. package/dist/cli/commands/dashboard.js.map +1 -0
  26. package/dist/cli/commands/doctor.d.ts +6 -0
  27. package/dist/cli/commands/doctor.d.ts.map +1 -0
  28. package/dist/cli/commands/doctor.js +39 -0
  29. package/dist/cli/commands/doctor.js.map +1 -0
  30. package/dist/cli/commands/gate.d.ts +6 -0
  31. package/dist/cli/commands/gate.d.ts.map +1 -0
  32. package/dist/cli/commands/gate.js +196 -0
  33. package/dist/cli/commands/gate.js.map +1 -0
  34. package/dist/cli/commands/init.d.ts +6 -0
  35. package/dist/cli/commands/init.d.ts.map +1 -0
  36. package/dist/cli/commands/init.js +109 -0
  37. package/dist/cli/commands/init.js.map +1 -0
  38. package/dist/cli/commands/ledger.d.ts +6 -0
  39. package/dist/cli/commands/ledger.d.ts.map +1 -0
  40. package/dist/cli/commands/ledger.js +140 -0
  41. package/dist/cli/commands/ledger.js.map +1 -0
  42. package/dist/cli/commands/mcp.d.ts +6 -0
  43. package/dist/cli/commands/mcp.d.ts.map +1 -0
  44. package/dist/cli/commands/mcp.js +224 -0
  45. package/dist/cli/commands/mcp.js.map +1 -0
  46. package/dist/cli/commands/policy.d.ts +6 -0
  47. package/dist/cli/commands/policy.d.ts.map +1 -0
  48. package/dist/cli/commands/policy.js +126 -0
  49. package/dist/cli/commands/policy.js.map +1 -0
  50. package/dist/cli/commands/user.d.ts +6 -0
  51. package/dist/cli/commands/user.d.ts.map +1 -0
  52. package/dist/cli/commands/user.js +150 -0
  53. package/dist/cli/commands/user.js.map +1 -0
  54. package/dist/cli/commands/vault-manager.d.ts +6 -0
  55. package/dist/cli/commands/vault-manager.d.ts.map +1 -0
  56. package/dist/cli/commands/vault-manager.js +240 -0
  57. package/dist/cli/commands/vault-manager.js.map +1 -0
  58. package/dist/cli/commands/vault.d.ts +6 -0
  59. package/dist/cli/commands/vault.d.ts.map +1 -0
  60. package/dist/cli/commands/vault.js +241 -0
  61. package/dist/cli/commands/vault.js.map +1 -0
  62. package/dist/cli/commands/webhook.d.ts +6 -0
  63. package/dist/cli/commands/webhook.d.ts.map +1 -0
  64. package/dist/cli/commands/webhook.js +151 -0
  65. package/dist/cli/commands/webhook.js.map +1 -0
  66. package/dist/cli/helpers.d.ts +12 -0
  67. package/dist/cli/helpers.d.ts.map +1 -0
  68. package/dist/cli/helpers.js +61 -0
  69. package/dist/cli/helpers.js.map +1 -0
  70. package/dist/cli/index.d.ts +17 -0
  71. package/dist/cli/index.d.ts.map +1 -0
  72. package/dist/cli/index.js +17 -0
  73. package/dist/cli/index.js.map +1 -0
  74. package/dist/cli/validation.d.ts +37 -0
  75. package/dist/cli/validation.d.ts.map +1 -0
  76. package/dist/cli/validation.js +104 -0
  77. package/dist/cli/validation.js.map +1 -0
  78. package/dist/cli.d.ts +3 -0
  79. package/dist/cli.d.ts.map +1 -0
  80. package/dist/cli.js +30 -0
  81. package/dist/cli.js.map +1 -0
  82. package/dist/config.d.ts +108 -0
  83. package/dist/config.d.ts.map +1 -0
  84. package/dist/config.js +355 -0
  85. package/dist/config.js.map +1 -0
  86. package/dist/dashboard/dashboard-server.d.ts +95 -0
  87. package/dist/dashboard/dashboard-server.d.ts.map +1 -0
  88. package/dist/dashboard/dashboard-server.js +329 -0
  89. package/dist/dashboard/dashboard-server.js.map +1 -0
  90. package/dist/dashboard/index.d.ts +3 -0
  91. package/dist/dashboard/index.d.ts.map +1 -0
  92. package/dist/dashboard/index.js +2 -0
  93. package/dist/dashboard/index.js.map +1 -0
  94. package/dist/dashboard/public/assets/index-CpMruPNh.css +1 -0
  95. package/dist/dashboard/public/assets/index-DkHiw9_f.js +148 -0
  96. package/dist/dashboard/public/favicon.svg +6 -0
  97. package/dist/dashboard/public/index.html +14 -0
  98. package/dist/db.d.ts +15 -0
  99. package/dist/db.d.ts.map +1 -0
  100. package/dist/db.js +190 -0
  101. package/dist/db.js.map +1 -0
  102. package/dist/doctor.d.ts +37 -0
  103. package/dist/doctor.d.ts.map +1 -0
  104. package/dist/doctor.js +196 -0
  105. package/dist/doctor.js.map +1 -0
  106. package/dist/gate/body-inspector.d.ts +31 -0
  107. package/dist/gate/body-inspector.d.ts.map +1 -0
  108. package/dist/gate/body-inspector.js +193 -0
  109. package/dist/gate/body-inspector.js.map +1 -0
  110. package/dist/gate/gate.d.ts +168 -0
  111. package/dist/gate/gate.d.ts.map +1 -0
  112. package/dist/gate/gate.js +1016 -0
  113. package/dist/gate/gate.js.map +1 -0
  114. package/dist/gate/index.d.ts +7 -0
  115. package/dist/gate/index.d.ts.map +1 -0
  116. package/dist/gate/index.js +4 -0
  117. package/dist/gate/index.js.map +1 -0
  118. package/dist/gate/rate-limiter.d.ts +59 -0
  119. package/dist/gate/rate-limiter.d.ts.map +1 -0
  120. package/dist/gate/rate-limiter.js +120 -0
  121. package/dist/gate/rate-limiter.js.map +1 -0
  122. package/dist/index.d.ts +26 -0
  123. package/dist/index.d.ts.map +1 -0
  124. package/dist/index.js +16 -0
  125. package/dist/index.js.map +1 -0
  126. package/dist/ledger/index.d.ts +3 -0
  127. package/dist/ledger/index.d.ts.map +1 -0
  128. package/dist/ledger/index.js +2 -0
  129. package/dist/ledger/index.js.map +1 -0
  130. package/dist/ledger/ledger.d.ts +98 -0
  131. package/dist/ledger/ledger.d.ts.map +1 -0
  132. package/dist/ledger/ledger.js +145 -0
  133. package/dist/ledger/ledger.js.map +1 -0
  134. package/dist/logger/index.d.ts +3 -0
  135. package/dist/logger/index.d.ts.map +1 -0
  136. package/dist/logger/index.js +2 -0
  137. package/dist/logger/index.js.map +1 -0
  138. package/dist/logger/logger.d.ts +58 -0
  139. package/dist/logger/logger.d.ts.map +1 -0
  140. package/dist/logger/logger.js +201 -0
  141. package/dist/logger/logger.js.map +1 -0
  142. package/dist/mcp/index.d.ts +3 -0
  143. package/dist/mcp/index.d.ts.map +1 -0
  144. package/dist/mcp/index.js +2 -0
  145. package/dist/mcp/index.js.map +1 -0
  146. package/dist/mcp/mcp-server.d.ts +130 -0
  147. package/dist/mcp/mcp-server.d.ts.map +1 -0
  148. package/dist/mcp/mcp-server.js +775 -0
  149. package/dist/mcp/mcp-server.js.map +1 -0
  150. package/dist/metrics/index.d.ts +3 -0
  151. package/dist/metrics/index.d.ts.map +1 -0
  152. package/dist/metrics/index.js +2 -0
  153. package/dist/metrics/index.js.map +1 -0
  154. package/dist/metrics/metrics.d.ts +88 -0
  155. package/dist/metrics/metrics.d.ts.map +1 -0
  156. package/dist/metrics/metrics.js +179 -0
  157. package/dist/metrics/metrics.js.map +1 -0
  158. package/dist/policy/index.d.ts +3 -0
  159. package/dist/policy/index.d.ts.map +1 -0
  160. package/dist/policy/index.js +2 -0
  161. package/dist/policy/index.js.map +1 -0
  162. package/dist/policy/policy.d.ts +119 -0
  163. package/dist/policy/policy.d.ts.map +1 -0
  164. package/dist/policy/policy.js +426 -0
  165. package/dist/policy/policy.js.map +1 -0
  166. package/dist/user/index.d.ts +3 -0
  167. package/dist/user/index.d.ts.map +1 -0
  168. package/dist/user/index.js +2 -0
  169. package/dist/user/index.js.map +1 -0
  170. package/dist/user/user.d.ts +102 -0
  171. package/dist/user/user.d.ts.map +1 -0
  172. package/dist/user/user.js +216 -0
  173. package/dist/user/user.js.map +1 -0
  174. package/dist/vault/crypto.d.ts +28 -0
  175. package/dist/vault/crypto.d.ts.map +1 -0
  176. package/dist/vault/crypto.js +44 -0
  177. package/dist/vault/crypto.js.map +1 -0
  178. package/dist/vault/index.d.ts +10 -0
  179. package/dist/vault/index.d.ts.map +1 -0
  180. package/dist/vault/index.js +6 -0
  181. package/dist/vault/index.js.map +1 -0
  182. package/dist/vault/seal.d.ts +68 -0
  183. package/dist/vault/seal.d.ts.map +1 -0
  184. package/dist/vault/seal.js +110 -0
  185. package/dist/vault/seal.js.map +1 -0
  186. package/dist/vault/shamir.d.ts +33 -0
  187. package/dist/vault/shamir.d.ts.map +1 -0
  188. package/dist/vault/shamir.js +174 -0
  189. package/dist/vault/shamir.js.map +1 -0
  190. package/dist/vault/vault-manager.d.ts +62 -0
  191. package/dist/vault/vault-manager.d.ts.map +1 -0
  192. package/dist/vault/vault-manager.js +141 -0
  193. package/dist/vault/vault-manager.js.map +1 -0
  194. package/dist/vault/vault.d.ts +104 -0
  195. package/dist/vault/vault.d.ts.map +1 -0
  196. package/dist/vault/vault.js +259 -0
  197. package/dist/vault/vault.js.map +1 -0
  198. package/dist/version.d.ts +3 -0
  199. package/dist/version.d.ts.map +1 -0
  200. package/dist/version.js +18 -0
  201. package/dist/version.js.map +1 -0
  202. package/dist/webhook/index.d.ts +3 -0
  203. package/dist/webhook/index.d.ts.map +1 -0
  204. package/dist/webhook/index.js +2 -0
  205. package/dist/webhook/index.js.map +1 -0
  206. package/dist/webhook/webhook.d.ts +114 -0
  207. package/dist/webhook/webhook.d.ts.map +1 -0
  208. package/dist/webhook/webhook.js +269 -0
  209. package/dist/webhook/webhook.js.map +1 -0
  210. package/package.json +7 -3
@@ -0,0 +1,240 @@
1
+ /**
2
+ * Vault management commands: create, vaults (list), destroy, split, unseal, seal.
3
+ */
4
+ import * as crypto from 'node:crypto';
5
+ import * as fs from 'node:fs';
6
+ import * as path from 'node:path';
7
+ import { getConfig } from '../../config.js';
8
+ import { getDb, getVaultSalt, migrate } from '../../db.js';
9
+ import { combine, decodeShare, deriveKey, encodeShare, SealManager, split, VaultManager, } from '../../vault/index.js';
10
+ import { requireUserAuth } from '../auth.js';
11
+ import { localTime } from '../validation.js';
12
+ function collectShares(value, previous) {
13
+ return [...previous, value];
14
+ }
15
+ export function register(parent) {
16
+ // These are subcommands of the 'vault' command, which is already
17
+ // registered by vault.ts. We look it up so we can attach to it.
18
+ const vault = parent.commands.find((c) => c.name() === 'vault');
19
+ if (!vault)
20
+ throw new Error('vault command must be registered before vault-manager');
21
+ vault
22
+ .command('create')
23
+ .description('Create a new named vault with its own database and encryption salt')
24
+ .requiredOption('-n, --name <name>', 'Name for the new vault')
25
+ .option('--master-key <key>', 'Master key for the vault (if not provided, prompts or uses AEGIS_MASTER_KEY)')
26
+ .action((opts) => {
27
+ const config = getConfig();
28
+ const db = getDb(config);
29
+ migrate(db);
30
+ const key = deriveKey(config.masterKey, getVaultSalt(config));
31
+ requireUserAuth(db, key, 'vault:manage');
32
+ db.close();
33
+ const manager = new VaultManager(config.dataDir);
34
+ try {
35
+ const { salt } = manager.create(opts.name);
36
+ console.log(`\n ✓ Vault "${opts.name}" created\n`);
37
+ console.log(` Salt: ${salt}`);
38
+ console.log(` Database: .aegis/vaults/${opts.name}.db\n`);
39
+ console.log(` To use this vault:`);
40
+ console.log(` AEGIS_VAULT=${opts.name} aegis vault list`);
41
+ console.log(` AEGIS_VAULT=${opts.name} aegis gate\n`);
42
+ }
43
+ catch (err) {
44
+ const message = err instanceof Error ? err.message : String(err);
45
+ console.error(`\n✗ ${message}\n`);
46
+ process.exit(1);
47
+ }
48
+ });
49
+ vault
50
+ .command('vaults')
51
+ .description('List all named vaults')
52
+ .action(() => {
53
+ const config = getConfig();
54
+ const db = getDb(config);
55
+ migrate(db);
56
+ const key = deriveKey(config.masterKey, getVaultSalt(config));
57
+ requireUserAuth(db, key, 'vault:read');
58
+ db.close();
59
+ const manager = new VaultManager(config.dataDir);
60
+ const vaults = manager.list();
61
+ if (vaults.length === 0) {
62
+ console.log('\n No vaults found. Create one with: aegis vault create --name <name>\n');
63
+ return;
64
+ }
65
+ console.log(`\n Aegis Vaults — ${vaults.length} vault(s)\n`);
66
+ const active = config.vaultName;
67
+ for (const v of vaults) {
68
+ const marker = v.name === active ? ' ← active' : '';
69
+ console.log(` • ${v.name}${marker}`);
70
+ console.log(` Database: ${v.dbPath}`);
71
+ console.log(` Created: ${localTime(v.createdAt)}`);
72
+ console.log();
73
+ }
74
+ });
75
+ vault
76
+ .command('destroy')
77
+ .description('Permanently delete a named vault and its database')
78
+ .requiredOption('-n, --name <name>', 'Name of the vault to delete')
79
+ .option('--confirm', 'Skip confirmation prompt')
80
+ .action((opts) => {
81
+ const config = getConfig();
82
+ const db = getDb(config);
83
+ migrate(db);
84
+ const key = deriveKey(config.masterKey, getVaultSalt(config));
85
+ requireUserAuth(db, key, 'vault:manage');
86
+ db.close();
87
+ const manager = new VaultManager(config.dataDir);
88
+ if (!opts.confirm) {
89
+ console.log(`\n ⚠ This will permanently delete vault "${opts.name}" and all its data.`);
90
+ console.log(` Run again with --confirm to proceed.\n`);
91
+ return;
92
+ }
93
+ try {
94
+ manager.remove(opts.name);
95
+ console.log(`\n ✓ Vault "${opts.name}" deleted.\n`);
96
+ }
97
+ catch (err) {
98
+ const message = err instanceof Error ? err.message : String(err);
99
+ console.error(`\n✗ ${message}\n`);
100
+ process.exit(1);
101
+ }
102
+ });
103
+ vault
104
+ .command('split')
105
+ .description("Split the master key into M-of-N shares using Shamir's Secret Sharing")
106
+ .requiredOption('-t, --threshold <n>', 'Minimum shares needed to reconstruct (≥ 2)')
107
+ .requiredOption('-s, --shares <n>', 'Total shares to generate (≥ threshold, ≤ 255)')
108
+ .option('--remove-env-key', 'Remove AEGIS_MASTER_KEY from .env after splitting', false)
109
+ .action((opts) => {
110
+ const config = getConfig();
111
+ const db = getDb(config);
112
+ migrate(db);
113
+ const key = deriveKey(config.masterKey, getVaultSalt(config));
114
+ requireUserAuth(db, key, 'vault:manage');
115
+ db.close();
116
+ if (!config.masterKey) {
117
+ console.error('\n✗ AEGIS_MASTER_KEY is required to split. Set it in .env or as an env var.\n');
118
+ process.exit(1);
119
+ }
120
+ const threshold = Number.parseInt(opts.threshold, 10);
121
+ const totalShares = Number.parseInt(opts.shares, 10);
122
+ if (Number.isNaN(threshold) || Number.isNaN(totalShares)) {
123
+ console.error('\n✗ Threshold and shares must be numbers.\n');
124
+ process.exit(1);
125
+ }
126
+ try {
127
+ const secretBuf = Buffer.from(config.masterKey, 'utf-8');
128
+ const shares = split(secretBuf, threshold, totalShares);
129
+ // Store seal config (threshold + key hash for verification)
130
+ const sealMgr = new SealManager(config.dataDir);
131
+ sealMgr.enableSplit(threshold, totalShares, config.masterKey);
132
+ console.log(`\n ╔══════════════════════════════════════════╗`);
133
+ console.log(` ║ Master Key Split — ${threshold}-of-${totalShares} Scheme ║`);
134
+ console.log(` ╚══════════════════════════════════════════╝\n`);
135
+ console.log(` ⚠ Store each share with a different key holder.`);
136
+ console.log(` ⚠ These shares will NOT be shown again.\n`);
137
+ for (const share of shares) {
138
+ console.log(` Share ${share.index}: ${encodeShare(share)}`);
139
+ }
140
+ console.log(`\n Threshold: ${threshold} of ${totalShares} shares required to unseal.`);
141
+ console.log(` Key hash: ${crypto.createHash('sha256').update(config.masterKey).digest('hex').slice(0, 16)}...`);
142
+ // Optionally remove the master key from .env
143
+ if (opts.removeEnvKey) {
144
+ const envPath = path.join(process.cwd(), '.env');
145
+ if (fs.existsSync(envPath)) {
146
+ const envContent = fs.readFileSync(envPath, 'utf-8');
147
+ const filtered = envContent
148
+ .split('\n')
149
+ .filter((line) => !line.trim().startsWith('AEGIS_MASTER_KEY'))
150
+ .join('\n');
151
+ fs.writeFileSync(envPath, filtered, { mode: 0o600 });
152
+ console.log(`\n ✓ Removed AEGIS_MASTER_KEY from .env`);
153
+ }
154
+ }
155
+ else {
156
+ console.log(`\n Note: AEGIS_MASTER_KEY is still in .env / environment.`);
157
+ console.log(` Use --remove-env-key to remove it after distributing shares.`);
158
+ }
159
+ console.log(`\n To unseal later:`);
160
+ console.log(` aegis vault unseal --key-share <share1> --key-share <share2> ...`);
161
+ console.log(` To seal (remove reconstructed key):`);
162
+ console.log(` aegis vault seal\n`);
163
+ }
164
+ catch (err) {
165
+ const message = err instanceof Error ? err.message : String(err);
166
+ console.error(`\n✗ ${message}\n`);
167
+ process.exit(1);
168
+ }
169
+ });
170
+ vault
171
+ .command('unseal')
172
+ .description('Reconstruct the master key from Shamir shares')
173
+ .option('--key-share <share>', 'Provide a key share (repeat for each share)', collectShares, [])
174
+ .action((opts) => {
175
+ const config = getConfig();
176
+ if (opts.keyShare.length === 0) {
177
+ console.error('\n✗ Provide at least one share: --key-share <share>\n');
178
+ console.error(' Example:');
179
+ console.error(' aegis vault unseal --key-share aegis_share_01_... --key-share aegis_share_02_...\n');
180
+ process.exit(1);
181
+ }
182
+ const sealMgr = new SealManager(config.dataDir);
183
+ const sealConfig = sealMgr.getSealConfig();
184
+ if (!sealConfig) {
185
+ console.error('\n✗ Key splitting is not configured. Run `aegis vault split` first.\n');
186
+ process.exit(1);
187
+ }
188
+ if (opts.keyShare.length < sealConfig.threshold) {
189
+ console.error(`\n✗ Not enough shares. Provided ${opts.keyShare.length}, need ${sealConfig.threshold}.\n`);
190
+ process.exit(1);
191
+ }
192
+ try {
193
+ // Decode all shares
194
+ const shares = opts.keyShare.map((s) => decodeShare(s));
195
+ // Reconstruct the master key
196
+ const reconstructed = combine(shares);
197
+ const masterKey = reconstructed.toString('utf-8');
198
+ // Verify against stored hash
199
+ if (!sealMgr.verifyKey(masterKey)) {
200
+ console.error('\n✗ Key verification failed. The provided shares do not reconstruct the correct master key.\n');
201
+ console.error(' Possible causes:');
202
+ console.error(' • Wrong shares provided');
203
+ console.error(` • Not enough valid shares (need at least ${sealConfig.threshold})`);
204
+ console.error(' • Shares from different split operations\n');
205
+ process.exit(1);
206
+ }
207
+ // Write the unseal key
208
+ sealMgr.writeUnsealKey(masterKey);
209
+ console.log(`\n ✓ Vault unsealed successfully.\n`);
210
+ console.log(` Master key reconstructed and stored in .aegis/.unseal-key (mode 0600).`);
211
+ console.log(` All Aegis commands will use the reconstructed key.\n`);
212
+ console.log(` To seal the vault again: aegis vault seal\n`);
213
+ }
214
+ catch (err) {
215
+ const message = err instanceof Error ? err.message : String(err);
216
+ console.error(`\n✗ ${message}\n`);
217
+ process.exit(1);
218
+ }
219
+ });
220
+ vault
221
+ .command('seal')
222
+ .description('Seal the vault — securely remove the reconstructed master key')
223
+ .action(() => {
224
+ const config = getConfig();
225
+ const sealMgr = new SealManager(config.dataDir);
226
+ if (!sealMgr.isSplitEnabled()) {
227
+ console.error('\n✗ Key splitting is not configured. Nothing to seal.\n');
228
+ process.exit(1);
229
+ }
230
+ if (!sealMgr.isUnsealed()) {
231
+ console.log('\n Vault is already sealed.\n');
232
+ return;
233
+ }
234
+ sealMgr.seal();
235
+ console.log(`\n ✓ Vault sealed.\n`);
236
+ console.log(` The reconstructed master key has been securely removed.`);
237
+ console.log(` To unseal: aegis vault unseal --key-share <share1> --key-share <share2> ...\n`);
238
+ });
239
+ }
240
+ //# sourceMappingURL=vault-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault-manager.js","sourceRoot":"","sources":["../../../src/cli/commands/vault-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Vault CRUD commands: add, list, remove, rotate, update.
3
+ */
4
+ import type { Command } from 'commander';
5
+ export declare function register(program: Command): void;
6
+ //# sourceMappingURL=vault.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/vault.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBzC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuR/C"}
@@ -0,0 +1,241 @@
1
+ /**
2
+ * Vault CRUD commands: add, list, remove, rotate, update.
3
+ */
4
+ import { getConfig } from '../../config.js';
5
+ import { getDb, getVaultSalt, migrate } from '../../db.js';
6
+ import { deriveKey, Vault } from '../../vault/index.js';
7
+ import { requireUserAuth } from '../auth.js';
8
+ import { localTime, VALID_AUTH_TYPES, VALID_BODY_INSPECTION_MODES, validateDomains, validateEnum, validateIdentifier, validateNonNegativeFloat, validatePositiveInt, validateRateLimit, } from '../validation.js';
9
+ export function register(program) {
10
+ const vault = program.command('vault').description('Manage stored credentials');
11
+ vault
12
+ .command('add')
13
+ .description('Add a new credential to the vault')
14
+ .requiredOption('-n, --name <name>', 'Unique name for this credential')
15
+ .requiredOption('-s, --service <service>', 'Service identifier (used in proxy URL path)')
16
+ .requiredOption('--secret <secret>', 'The API key or token')
17
+ .requiredOption('-d, --domains <domains>', 'Comma-separated allowed domains (e.g. api.slack.com,*.slack.com)')
18
+ .option('-a, --auth-type <type>', 'Auth injection type: bearer, header, basic, query', 'bearer')
19
+ .option('--header-name <name>', 'Custom header name (for auth-type: header)')
20
+ .option('--scopes <scopes>', 'Comma-separated scopes: read, write, *', '*')
21
+ .option('--ttl <days>', 'Credential expires after this many days')
22
+ .option('--rate-limit <limit>', 'Rate limit: e.g. 100/min, 1000/hour, 10/sec')
23
+ .option('--body-inspection <mode>', 'Body inspection mode: off, warn, block', 'block')
24
+ .action((opts) => {
25
+ // ── Input validation ──
26
+ validateIdentifier(opts.name, 'credential name');
27
+ validateIdentifier(opts.service, 'service');
28
+ const authType = validateEnum(opts.authType, VALID_AUTH_TYPES, 'auth type');
29
+ const bodyInspection = validateEnum(opts.bodyInspection, VALID_BODY_INSPECTION_MODES, 'body inspection mode');
30
+ const domains = validateDomains(opts.domains);
31
+ const ttlDays = opts.ttl ? parseInt(opts.ttl, 10) : undefined;
32
+ if (ttlDays !== undefined)
33
+ validatePositiveInt(ttlDays, 'TTL (days)');
34
+ if (opts.rateLimit)
35
+ validateRateLimit(opts.rateLimit);
36
+ const config = getConfig();
37
+ const db = getDb(config);
38
+ migrate(db);
39
+ const key = deriveKey(config.masterKey, getVaultSalt(config));
40
+ requireUserAuth(db, key, 'vault:write');
41
+ const vaultInstance = new Vault(db, config.masterKey, getVaultSalt(config));
42
+ try {
43
+ const cred = vaultInstance.add({
44
+ name: opts.name,
45
+ service: opts.service,
46
+ secret: opts.secret,
47
+ authType,
48
+ headerName: opts.headerName,
49
+ domains,
50
+ scopes: opts.scopes.split(',').map((s) => s.trim()),
51
+ ttlDays,
52
+ rateLimit: opts.rateLimit,
53
+ bodyInspection,
54
+ });
55
+ console.log(`\n✓ Credential added to Aegis Vault\n`);
56
+ console.log(` Name: ${cred.name}`);
57
+ console.log(` Service: ${cred.service}`);
58
+ console.log(` Auth: ${cred.authType}`);
59
+ console.log(` Domains: ${cred.domains.join(', ')}`);
60
+ console.log(` Scopes: ${cred.scopes.join(', ')}`);
61
+ if (cred.expiresAt) {
62
+ console.log(` Expires: ${localTime(cred.expiresAt)}`);
63
+ }
64
+ if (cred.rateLimit) {
65
+ console.log(` Rate: ${cred.rateLimit}`);
66
+ }
67
+ console.log(` Body: ${cred.bodyInspection}`);
68
+ console.log(`\n Your agent can now use: http://localhost:${config.port}/${cred.service}/...\n`);
69
+ }
70
+ catch (err) {
71
+ const message = err instanceof Error ? err.message : String(err);
72
+ if (message.includes('UNIQUE')) {
73
+ console.error(`\n✗ A credential named "${opts.name}" already exists. Remove it first with: aegis vault remove --name ${opts.name}\n`);
74
+ }
75
+ else {
76
+ console.error(`\n✗ Error: ${message}\n`);
77
+ }
78
+ process.exit(1);
79
+ }
80
+ finally {
81
+ db.close();
82
+ }
83
+ });
84
+ vault
85
+ .command('list')
86
+ .description('List all stored credentials (secrets are never shown)')
87
+ .action(() => {
88
+ const config = getConfig();
89
+ const db = getDb(config);
90
+ migrate(db);
91
+ const key = deriveKey(config.masterKey, getVaultSalt(config));
92
+ requireUserAuth(db, key, 'vault:read');
93
+ const vaultInstance = new Vault(db, config.masterKey, getVaultSalt(config));
94
+ const creds = vaultInstance.list();
95
+ if (creds.length === 0) {
96
+ console.log('\n No credentials stored. Add one with: aegis vault add\n');
97
+ db.close();
98
+ return;
99
+ }
100
+ console.log(`\n Aegis Vault — ${creds.length} credential(s)\n`);
101
+ for (const cred of creds) {
102
+ console.log(` ┌ ${cred.name} (${cred.service})`);
103
+ console.log(` │ Auth: ${cred.authType}`);
104
+ console.log(` │ Domains: ${cred.domains.join(', ')}`);
105
+ console.log(` │ Scopes: ${cred.scopes.join(', ')}`);
106
+ if (cred.rateLimit) {
107
+ console.log(` │ Rate: ${cred.rateLimit}`);
108
+ }
109
+ if (cred.expiresAt) {
110
+ console.log(` │ Expires: ${localTime(cred.expiresAt)}`);
111
+ }
112
+ console.log(` │ Added: ${localTime(cred.createdAt)}`);
113
+ console.log(` └`);
114
+ }
115
+ console.log();
116
+ db.close();
117
+ });
118
+ vault
119
+ .command('remove')
120
+ .description('Remove a credential from the vault')
121
+ .requiredOption('-n, --name <name>', 'Name of the credential to remove')
122
+ .action((opts) => {
123
+ const config = getConfig();
124
+ const db = getDb(config);
125
+ migrate(db);
126
+ const key = deriveKey(config.masterKey, getVaultSalt(config));
127
+ requireUserAuth(db, key, 'vault:write');
128
+ const vaultInstance = new Vault(db, config.masterKey, getVaultSalt(config));
129
+ const removed = vaultInstance.remove(opts.name);
130
+ if (removed) {
131
+ console.log(`\n✓ Credential "${opts.name}" removed from vault.\n`);
132
+ }
133
+ else {
134
+ console.error(`\n✗ No credential found with name "${opts.name}".\n`);
135
+ process.exit(1);
136
+ }
137
+ db.close();
138
+ });
139
+ vault
140
+ .command('rotate')
141
+ .description("Rotate a credential's secret (old secret saved to history)")
142
+ .requiredOption('-n, --name <name>', 'Name of the credential to rotate')
143
+ .requiredOption('--secret <secret>', 'The new API key or token')
144
+ .option('--grace-period <hours>', 'Keep old secret valid for this many hours (for zero-downtime rotation)')
145
+ .action((opts) => {
146
+ const gracePeriodHours = opts.gracePeriod ? parseFloat(opts.gracePeriod) : undefined;
147
+ if (gracePeriodHours !== undefined)
148
+ validateNonNegativeFloat(gracePeriodHours, 'grace period (hours)');
149
+ const config = getConfig();
150
+ const db = getDb(config);
151
+ migrate(db);
152
+ const key = deriveKey(config.masterKey, getVaultSalt(config));
153
+ requireUserAuth(db, key, 'vault:write');
154
+ const vaultInstance = new Vault(db, config.masterKey, getVaultSalt(config));
155
+ try {
156
+ const cred = vaultInstance.rotate({
157
+ name: opts.name,
158
+ newSecret: opts.secret,
159
+ gracePeriodHours,
160
+ });
161
+ console.log(`\n✓ Credential "${cred.name}" rotated successfully\n`);
162
+ console.log(` Old secret saved to history`);
163
+ if (gracePeriodHours) {
164
+ console.log(` Grace period: ${gracePeriodHours} hour(s)`);
165
+ }
166
+ console.log();
167
+ }
168
+ catch (err) {
169
+ const message = err instanceof Error ? err.message : String(err);
170
+ console.error(`\n✗ ${message}\n`);
171
+ process.exit(1);
172
+ }
173
+ finally {
174
+ db.close();
175
+ }
176
+ });
177
+ vault
178
+ .command('update')
179
+ .description("Update a credential's metadata without re-entering the secret")
180
+ .requiredOption('-n, --name <name>', 'Name of the credential to update')
181
+ .option('-d, --domains <domains>', 'New comma-separated allowed domains')
182
+ .option('--scopes <scopes>', 'New comma-separated scopes')
183
+ .option('-a, --auth-type <type>', 'New auth injection type: bearer, header, basic, query')
184
+ .option('--header-name <name>', 'New custom header name (for auth-type: header)')
185
+ .option('--rate-limit <limit>', "New rate limit: e.g. 100/min, 1000/hour (use 'none' to remove)")
186
+ .option('--body-inspection <mode>', 'Body inspection mode: off, warn, block')
187
+ .action((opts) => {
188
+ // ── Input validation ──
189
+ if (opts.authType)
190
+ validateEnum(opts.authType, VALID_AUTH_TYPES, 'auth type');
191
+ if (opts.bodyInspection)
192
+ validateEnum(opts.bodyInspection, VALID_BODY_INSPECTION_MODES, 'body inspection mode');
193
+ const domains = opts.domains ? validateDomains(opts.domains) : undefined;
194
+ if (opts.rateLimit && opts.rateLimit.toLowerCase() !== 'none')
195
+ validateRateLimit(opts.rateLimit);
196
+ const config = getConfig();
197
+ const db = getDb(config);
198
+ migrate(db);
199
+ const key = deriveKey(config.masterKey, getVaultSalt(config));
200
+ requireUserAuth(db, key, 'vault:write');
201
+ const vaultInstance = new Vault(db, config.masterKey, getVaultSalt(config));
202
+ try {
203
+ // "none" means remove the rate limit
204
+ const rateLimit = opts.rateLimit !== undefined
205
+ ? opts.rateLimit.toLowerCase() === 'none'
206
+ ? null
207
+ : opts.rateLimit
208
+ : undefined;
209
+ const cred = vaultInstance.update({
210
+ name: opts.name,
211
+ domains,
212
+ scopes: opts.scopes?.split(',').map((s) => s.trim()),
213
+ authType: opts.authType,
214
+ headerName: opts.headerName,
215
+ rateLimit,
216
+ bodyInspection: opts.bodyInspection,
217
+ });
218
+ console.log(`\n✓ Credential "${cred.name}" updated\n`);
219
+ console.log(` Domains: ${cred.domains.join(', ')}`);
220
+ console.log(` Scopes: ${cred.scopes.join(', ')}`);
221
+ console.log(` Auth: ${cred.authType}`);
222
+ if (cred.headerName) {
223
+ console.log(` Header: ${cred.headerName}`);
224
+ }
225
+ if (cred.rateLimit) {
226
+ console.log(` Rate: ${cred.rateLimit}`);
227
+ }
228
+ console.log(` Body: ${cred.bodyInspection}`);
229
+ console.log();
230
+ }
231
+ catch (err) {
232
+ const message = err instanceof Error ? err.message : String(err);
233
+ console.error(`\n✗ ${message}\n`);
234
+ process.exit(1);
235
+ }
236
+ finally {
237
+ db.close();
238
+ }
239
+ });
240
+ }
241
+ //# sourceMappingURL=vault.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault.js","sourceRoot":"","sources":["../../../src/cli/commands/vault.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Webhook commands: add, list, remove, test, check-expiry.
3
+ */
4
+ import type { Command } from 'commander';
5
+ export declare function register(program: Command): void;
6
+ //# sourceMappingURL=webhook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/webhook.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2K/C"}