@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,259 @@
1
+ import * as crypto from 'node:crypto';
2
+ import { decrypt, deriveKey, encrypt } from './crypto.js';
3
+ export class Vault {
4
+ db;
5
+ /** Cached derived key — PBKDF2 runs once in the constructor. */
6
+ derivedKey;
7
+ constructor(db, masterKey, salt = 'aegis-vault-v1') {
8
+ this.db = db;
9
+ if (!masterKey) {
10
+ throw new Error('AEGIS_MASTER_KEY is not set. Run `aegis init` to generate a config and master key.');
11
+ }
12
+ this.derivedKey = deriveKey(masterKey, salt);
13
+ this.verifyKey();
14
+ }
15
+ /**
16
+ * Verify the master key by attempting to decrypt the first stored credential.
17
+ * Throws a clear error if the key is wrong (AES-256-GCM auth tag mismatch).
18
+ * Silently succeeds if the vault is empty (nothing to verify against).
19
+ */
20
+ verifyKey() {
21
+ const row = this.db.prepare('SELECT encrypted, iv, auth_tag FROM credentials LIMIT 1').get();
22
+ if (!row)
23
+ return; // Empty vault — nothing to verify
24
+ try {
25
+ decrypt({ encrypted: row.encrypted, iv: row.iv, authTag: row.auth_tag }, this.derivedKey);
26
+ }
27
+ catch {
28
+ throw new Error('Invalid master key — cannot decrypt vault credentials.\n' +
29
+ ' The AEGIS_MASTER_KEY does not match the key used to encrypt this vault.\n' +
30
+ ' Check your config file or environment variable.');
31
+ }
32
+ }
33
+ /**
34
+ * Store a new credential in the vault.
35
+ */
36
+ /** Maximum credential secret size: 512 KB. */
37
+ static MAX_SECRET_BYTES = 512 * 1024;
38
+ /** Maximum credential name length: 128 characters. */
39
+ static MAX_NAME_LENGTH = 128;
40
+ add(params) {
41
+ // Validate name length
42
+ if (params.name.length > Vault.MAX_NAME_LENGTH) {
43
+ throw new Error(`Credential name is too long (${params.name.length} chars). Maximum is ${Vault.MAX_NAME_LENGTH} characters.`);
44
+ }
45
+ // Validate secret size
46
+ const secretBytes = Buffer.byteLength(params.secret, 'utf-8');
47
+ if (secretBytes > Vault.MAX_SECRET_BYTES) {
48
+ const sizeKB = Math.round(secretBytes / 1024);
49
+ throw new Error(`Credential value is too large (${sizeKB} KB). Maximum is ${Vault.MAX_SECRET_BYTES / 1024} KB.`);
50
+ }
51
+ const id = crypto.randomUUID();
52
+ const { encrypted, iv, authTag } = encrypt(params.secret, this.derivedKey);
53
+ let expiresAt = null;
54
+ if (params.ttlDays !== undefined && params.ttlDays > 0) {
55
+ const expiry = new Date();
56
+ expiry.setDate(expiry.getDate() + params.ttlDays);
57
+ expiresAt = expiry.toISOString();
58
+ }
59
+ const stmt = this.db.prepare(`
60
+ INSERT INTO credentials (id, name, service, encrypted, iv, auth_tag, auth_type, header_name, domains, scopes, expires_at, rate_limit, body_inspection)
61
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
62
+ `);
63
+ stmt.run(id, params.name, params.service, encrypted, iv, authTag, params.authType ?? 'bearer', params.headerName ?? null, JSON.stringify(params.domains), JSON.stringify(params.scopes ?? ['*']), expiresAt, params.rateLimit ?? null, params.bodyInspection ?? 'block');
64
+ return {
65
+ id,
66
+ name: params.name,
67
+ service: params.service,
68
+ authType: params.authType ?? 'bearer',
69
+ headerName: params.headerName,
70
+ domains: params.domains,
71
+ scopes: params.scopes ?? ['*'],
72
+ expiresAt: expiresAt ?? undefined,
73
+ rateLimit: params.rateLimit,
74
+ bodyInspection: params.bodyInspection ?? 'block',
75
+ createdAt: new Date().toISOString(),
76
+ updatedAt: new Date().toISOString(),
77
+ };
78
+ }
79
+ /**
80
+ * Rotate a credential's secret. The old secret is saved to credential_history
81
+ * with an optional grace period during which it remains valid.
82
+ */
83
+ rotate(params) {
84
+ // Validate secret size
85
+ const secretBytes = Buffer.byteLength(params.newSecret, 'utf-8');
86
+ if (secretBytes > Vault.MAX_SECRET_BYTES) {
87
+ const sizeKB = Math.round(secretBytes / 1024);
88
+ throw new Error(`Credential value is too large (${sizeKB} KB). Maximum is ${Vault.MAX_SECRET_BYTES / 1024} KB.`);
89
+ }
90
+ const row = this.db.prepare('SELECT * FROM credentials WHERE name = ?').get(params.name);
91
+ if (!row) {
92
+ throw new Error(`No credential found with name "${params.name}"`);
93
+ }
94
+ // Save old encrypted secret to history
95
+ let graceExpires = null;
96
+ if (params.gracePeriodHours !== undefined && params.gracePeriodHours > 0) {
97
+ const grace = new Date();
98
+ grace.setTime(grace.getTime() + params.gracePeriodHours * 60 * 60 * 1000);
99
+ graceExpires = grace.toISOString();
100
+ }
101
+ this.db
102
+ .prepare(`INSERT INTO credential_history (credential_id, encrypted, iv, auth_tag, grace_expires)
103
+ VALUES (?, ?, ?, ?, ?)`)
104
+ .run(row.id, row.encrypted, row.iv, row.auth_tag, graceExpires);
105
+ // Encrypt and store new secret
106
+ const { encrypted, iv, authTag } = encrypt(params.newSecret, this.derivedKey);
107
+ this.db
108
+ .prepare(`UPDATE credentials SET encrypted = ?, iv = ?, auth_tag = ?, updated_at = datetime('now')
109
+ WHERE id = ?`)
110
+ .run(encrypted, iv, authTag, row.id);
111
+ return this.rowToCredential({
112
+ ...row,
113
+ encrypted,
114
+ iv,
115
+ auth_tag: authTag,
116
+ updated_at: new Date().toISOString(),
117
+ });
118
+ }
119
+ /**
120
+ * Update a credential's metadata (domains, scopes, auth type, header name)
121
+ * without re-entering the secret.
122
+ */
123
+ update(params) {
124
+ const row = this.db.prepare('SELECT * FROM credentials WHERE name = ?').get(params.name);
125
+ if (!row) {
126
+ throw new Error(`No credential found with name "${params.name}"`);
127
+ }
128
+ const newDomains = params.domains ?? JSON.parse(row.domains);
129
+ const newScopes = params.scopes ?? JSON.parse(row.scopes);
130
+ const newAuthType = params.authType ?? row.auth_type;
131
+ const newHeaderName = params.headerName !== undefined ? params.headerName : row.header_name;
132
+ const newRateLimit = params.rateLimit !== undefined ? params.rateLimit : row.rate_limit;
133
+ const newBodyInspection = params.bodyInspection ?? row.body_inspection;
134
+ this.db
135
+ .prepare(`UPDATE credentials SET domains = ?, scopes = ?, auth_type = ?, header_name = ?, rate_limit = ?, body_inspection = ?, updated_at = datetime('now')
136
+ WHERE id = ?`)
137
+ .run(JSON.stringify(newDomains), JSON.stringify(newScopes), newAuthType, newHeaderName, newRateLimit, newBodyInspection, row.id);
138
+ return {
139
+ ...this.rowToCredential(row),
140
+ domains: newDomains,
141
+ scopes: newScopes,
142
+ authType: newAuthType,
143
+ headerName: newHeaderName ?? undefined,
144
+ rateLimit: newRateLimit ?? undefined,
145
+ bodyInspection: newBodyInspection,
146
+ updatedAt: new Date().toISOString(),
147
+ };
148
+ }
149
+ /**
150
+ * Check if a credential has expired based on its expiresAt field.
151
+ */
152
+ isExpired(credential) {
153
+ if (!credential.expiresAt)
154
+ return false;
155
+ return new Date(credential.expiresAt) <= new Date();
156
+ }
157
+ /**
158
+ * List all credentials (without secrets).
159
+ */
160
+ list() {
161
+ const rows = this.db
162
+ .prepare('SELECT * FROM credentials ORDER BY created_at DESC')
163
+ .all();
164
+ return rows.map((row) => this.rowToCredential(row));
165
+ }
166
+ /**
167
+ * Get a credential by name, including the decrypted secret.
168
+ */
169
+ getByName(name) {
170
+ const row = this.db.prepare('SELECT * FROM credentials WHERE name = ?').get(name);
171
+ if (!row)
172
+ return null;
173
+ const secret = decrypt({
174
+ encrypted: row.encrypted,
175
+ iv: row.iv,
176
+ authTag: row.auth_tag,
177
+ }, this.derivedKey);
178
+ return { ...this.rowToCredential(row), secret };
179
+ }
180
+ /**
181
+ * Get a credential by service name, including the decrypted secret.
182
+ */
183
+ getByService(service) {
184
+ const row = this.db
185
+ .prepare('SELECT * FROM credentials WHERE service = ? LIMIT 1')
186
+ .get(service);
187
+ if (!row)
188
+ return null;
189
+ const secret = decrypt({
190
+ encrypted: row.encrypted,
191
+ iv: row.iv,
192
+ authTag: row.auth_tag,
193
+ }, this.derivedKey);
194
+ return { ...this.rowToCredential(row), secret };
195
+ }
196
+ /**
197
+ * Find a credential whose allowed domains match a given hostname.
198
+ */
199
+ findByDomain(hostname) {
200
+ const all = this.db.prepare('SELECT * FROM credentials').all();
201
+ for (const row of all) {
202
+ const domains = JSON.parse(row.domains);
203
+ if (this.domainMatches(hostname, domains)) {
204
+ const secret = decrypt({
205
+ encrypted: row.encrypted,
206
+ iv: row.iv,
207
+ authTag: row.auth_tag,
208
+ }, this.derivedKey);
209
+ return { ...this.rowToCredential(row), secret };
210
+ }
211
+ }
212
+ return null;
213
+ }
214
+ /**
215
+ * Remove a credential by name.
216
+ */
217
+ remove(name) {
218
+ const result = this.db.prepare('DELETE FROM credentials WHERE name = ?').run(name);
219
+ return result.changes > 0;
220
+ }
221
+ /**
222
+ * Check if a hostname matches any of the allowed domain patterns.
223
+ * Supports wildcards: *.slack.com matches api.slack.com
224
+ */
225
+ domainMatches(hostname, allowedDomains) {
226
+ for (const pattern of allowedDomains) {
227
+ if (pattern === hostname)
228
+ return true;
229
+ // Wildcard: *.example.com matches sub.example.com (single level only)
230
+ if (pattern.startsWith('*.')) {
231
+ const suffix = pattern.slice(1); // .example.com
232
+ if (hostname.endsWith(suffix)) {
233
+ const prefix = hostname.slice(0, -suffix.length);
234
+ // Only match single-level: "api" is OK, "deep.api" is not
235
+ if (prefix.length > 0 && !prefix.includes('.'))
236
+ return true;
237
+ }
238
+ }
239
+ }
240
+ return false;
241
+ }
242
+ rowToCredential(row) {
243
+ return {
244
+ id: row.id,
245
+ name: row.name,
246
+ service: row.service,
247
+ authType: row.auth_type,
248
+ headerName: row.header_name ?? undefined,
249
+ domains: JSON.parse(row.domains),
250
+ scopes: JSON.parse(row.scopes),
251
+ expiresAt: row.expires_at ?? undefined,
252
+ rateLimit: row.rate_limit ?? undefined,
253
+ bodyInspection: (row.body_inspection ?? 'block'),
254
+ createdAt: row.created_at,
255
+ updatedAt: row.updated_at,
256
+ };
257
+ }
258
+ }
259
+ //# sourceMappingURL=vault.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault.js","sourceRoot":"","sources":["../../src/vault/vault.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAGtC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AA0C1D,MAAM,OAAO,KAAK;IAKN;IAJV,gEAAgE;IACxD,UAAU,CAAS;IAE3B,YACU,EAAqB,EAC7B,SAAiB,EACjB,OAAwB,gBAAgB;QAFhC,OAAE,GAAF,EAAE,CAAmB;QAI7B,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,oFAAoF,CACrF,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED;;;;OAIG;IACK,SAAS;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,yDAAyD,CAAC,CAAC,GAAG,EAE7E,CAAC;QAEd,IAAI,CAAC,GAAG;YAAE,OAAO,CAAC,kCAAkC;QAEpD,IAAI,CAAC;YACH,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5F,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CACb,0DAA0D;gBACxD,6EAA6E;gBAC7E,mDAAmD,CACtD,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,8CAA8C;IAC9C,MAAM,CAAU,gBAAgB,GAAG,GAAG,GAAG,IAAI,CAAC;IAE9C,sDAAsD;IACtD,MAAM,CAAU,eAAe,GAAG,GAAG,CAAC;IAEtC,GAAG,CAAC,MAWH;QACC,uBAAuB;QACvB,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,eAAe,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CACb,gCAAgC,MAAM,CAAC,IAAI,CAAC,MAAM,uBAAuB,KAAK,CAAC,eAAe,cAAc,CAC7G,CAAC;QACJ,CAAC;QAED,uBAAuB;QACvB,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9D,IAAI,WAAW,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;YAC9C,MAAM,IAAI,KAAK,CACb,kCAAkC,MAAM,oBAAoB,KAAK,CAAC,gBAAgB,GAAG,IAAI,MAAM,CAChG,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAC/B,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAE3E,IAAI,SAAS,GAAkB,IAAI,CAAC;QACpC,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;YACvD,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YAC1B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;YAClD,SAAS,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QACnC,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;KAG5B,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CACN,EAAE,EACF,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,OAAO,EACd,SAAS,EACT,EAAE,EACF,OAAO,EACP,MAAM,CAAC,QAAQ,IAAI,QAAQ,EAC3B,MAAM,CAAC,UAAU,IAAI,IAAI,EACzB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAC9B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,EACtC,SAAS,EACT,MAAM,CAAC,SAAS,IAAI,IAAI,EACxB,MAAM,CAAC,cAAc,IAAI,OAAO,CACjC,CAAC;QAEF,OAAO;YACL,EAAE;YACF,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,QAAQ;YACrC,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC;YAC9B,SAAS,EAAE,SAAS,IAAI,SAAS;YACjC,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,OAAO;YAChD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,MAAsE;QAC3E,uBAAuB;QACvB,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACjE,IAAI,WAAW,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;YAC9C,MAAM,IAAI,KAAK,CACb,kCAAkC,MAAM,oBAAoB,KAAK,CAAC,gBAAgB,GAAG,IAAI,MAAM,CAChG,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAE1E,CAAC;QAEd,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,kCAAkC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;QACpE,CAAC;QAED,uCAAuC;QACvC,IAAI,YAAY,GAAkB,IAAI,CAAC;QACvC,IAAI,MAAM,CAAC,gBAAgB,KAAK,SAAS,IAAI,MAAM,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC;YACzE,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;YACzB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,gBAAgB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;YAC1E,YAAY,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACrC,CAAC;QAED,IAAI,CAAC,EAAE;aACJ,OAAO,CACN;gCACwB,CACzB;aACA,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAElE,+BAA+B;QAC/B,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAE9E,IAAI,CAAC,EAAE;aACJ,OAAO,CACN;sBACc,CACf;aACA,GAAG,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAEvC,OAAO,IAAI,CAAC,eAAe,CAAC;YAC1B,GAAG,GAAG;YACN,SAAS;YACT,EAAE;YACF,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACrC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,MAQN;QACC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAE1E,CAAC;QAEd,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,kCAAkC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,IAAI,GAAG,CAAC,SAAS,CAAC;QACrD,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC;QAC5F,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;QACxF,MAAM,iBAAiB,GAAG,MAAM,CAAC,cAAc,IAAI,GAAG,CAAC,eAAe,CAAC;QAEvE,IAAI,CAAC,EAAE;aACJ,OAAO,CACN;sBACc,CACf;aACA,GAAG,CACF,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAC1B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EACzB,WAAW,EACX,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,GAAG,CAAC,EAAE,CACP,CAAC;QAEJ,OAAO;YACL,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;YAC5B,OAAO,EAAE,UAAU;YACnB,MAAM,EAAE,SAAS;YACjB,QAAQ,EAAE,WAAuB;YACjC,UAAU,EAAE,aAAa,IAAI,SAAS;YACtC,SAAS,EAAE,YAAY,IAAI,SAAS;YACpC,cAAc,EAAE,iBAAuC;YACvD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,UAAsB;QAC9B,IAAI,CAAC,UAAU,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QACxC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,IAAI;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;aACjB,OAAO,CAAC,oDAAoD,CAAC;aAC7D,GAAG,EAAqB,CAAC;QAE5B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,IAAY;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC,GAAG,CAAC,IAAI,CAEnE,CAAC;QAEd,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QAEtB,MAAM,MAAM,GAAG,OAAO,CACpB;YACE,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,OAAO,EAAE,GAAG,CAAC,QAAQ;SACtB,EACD,IAAI,CAAC,UAAU,CAChB,CAAC;QAEF,OAAO,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,OAAe;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,OAAO,CAAC,qDAAqD,CAAC;aAC9D,GAAG,CAAC,OAAO,CAA8B,CAAC;QAE7C,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QAEtB,MAAM,MAAM,GAAG,OAAO,CACpB;YACE,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,OAAO,EAAE,GAAG,CAAC,QAAQ;SACtB,EACD,IAAI,CAAC,UAAU,CAChB,CAAC;QAEF,OAAO,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,QAAgB;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC,GAAG,EAAqB,CAAC;QAElF,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;YACtB,MAAM,OAAO,GAAa,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC1C,MAAM,MAAM,GAAG,OAAO,CACpB;oBACE,SAAS,EAAE,GAAG,CAAC,SAAS;oBACxB,EAAE,EAAE,GAAG,CAAC,EAAE;oBACV,OAAO,EAAE,GAAG,CAAC,QAAQ;iBACtB,EACD,IAAI,CAAC,UAAU,CAChB,CAAC;gBACF,OAAO,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;YAClD,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAY;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnF,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACH,aAAa,CAAC,QAAgB,EAAE,cAAwB;QACtD,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;YACrC,IAAI,OAAO,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YAEtC,sEAAsE;YACtE,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe;gBAChD,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC9B,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBACjD,0DAA0D;oBAC1D,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;wBAAE,OAAO,IAAI,CAAC;gBAC9D,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,eAAe,CAAC,GAAkB;QACxC,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,QAAQ,EAAE,GAAG,CAAC,SAAqB;YACnC,UAAU,EAAE,GAAG,CAAC,WAAW,IAAI,SAAS;YACxC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;YAChC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;YAC9B,SAAS,EAAE,GAAG,CAAC,UAAU,IAAI,SAAS;YACtC,SAAS,EAAE,GAAG,CAAC,UAAU,IAAI,SAAS;YACtC,cAAc,EAAE,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAuB;YACtE,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,SAAS,EAAE,GAAG,CAAC,UAAU;SAC1B,CAAC;IACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** The current Aegis version, sourced from package.json. */
2
+ export declare const VERSION: string;
3
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAiBA,4DAA4D;AAC5D,eAAO,MAAM,OAAO,EAAE,MAAsB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { dirname, resolve } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ /**
5
+ * Read the version from package.json at runtime.
6
+ *
7
+ * Uses the package.json relative to this file's location so it works both
8
+ * in development (src/) and after compilation (dist/).
9
+ */
10
+ function loadVersion() {
11
+ const thisDir = dirname(fileURLToPath(import.meta.url));
12
+ const pkgPath = resolve(thisDir, '..', 'package.json');
13
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
14
+ return pkg.version;
15
+ }
16
+ /** The current Aegis version, sourced from package.json. */
17
+ export const VERSION = loadVersion();
18
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;;GAKG;AACH,SAAS,WAAW;IAClB,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACvD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAwB,CAAC;IAC9E,OAAO,GAAG,CAAC,OAAO,CAAC;AACrB,CAAC;AAED,4DAA4D;AAC5D,MAAM,CAAC,MAAM,OAAO,GAAW,WAAW,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ export type { Webhook, WebhookEventType, WebhookManagerOptions, WebhookPayload, } from './webhook.js';
2
+ export { WEBHOOK_EVENT_TYPES, WebhookManager } from './webhook.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/webhook/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,OAAO,EACP,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { WEBHOOK_EVENT_TYPES, WebhookManager } from './webhook.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/webhook/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Aegis Webhook Alerts — fire-and-forget HTTP notifications for security events.
3
+ *
4
+ * Webhook endpoints are stored in SQLite and can subscribe to specific event types.
5
+ * When an event fires, all matching webhooks receive a JSON POST with event details.
6
+ *
7
+ * Delivery is best-effort: retries up to 3 times with exponential backoff.
8
+ * Failed deliveries are logged but never block the request pipeline.
9
+ */
10
+ import type Database from 'better-sqlite3';
11
+ import type { Vault } from '../vault/index.js';
12
+ /**
13
+ * Event types that can trigger webhook notifications.
14
+ */
15
+ export type WebhookEventType = 'blocked_request' | 'credential_expiry' | 'rate_limit_exceeded' | 'agent_auth_failure' | 'body_inspection';
16
+ export declare const WEBHOOK_EVENT_TYPES: readonly WebhookEventType[];
17
+ /**
18
+ * Stored webhook configuration.
19
+ */
20
+ export interface Webhook {
21
+ id: string;
22
+ url: string;
23
+ events: WebhookEventType[];
24
+ /** Optional human-readable label */
25
+ label?: string;
26
+ /** HMAC secret for signing payloads (auto-generated) */
27
+ secret: string;
28
+ createdAt: string;
29
+ }
30
+ /**
31
+ * Payload sent to webhook endpoints.
32
+ */
33
+ export interface WebhookPayload {
34
+ /** Unique event ID */
35
+ id: string;
36
+ /** Event type */
37
+ event: WebhookEventType;
38
+ /** ISO 8601 timestamp */
39
+ timestamp: string;
40
+ /** Event-specific details */
41
+ details: Record<string, unknown>;
42
+ }
43
+ export interface WebhookManagerOptions {
44
+ db: Database.Database;
45
+ logLevel?: 'debug' | 'info' | 'warn' | 'error';
46
+ /** Maximum retries per delivery attempt (default: 3) */
47
+ maxRetries?: number;
48
+ /** Base delay in ms for exponential backoff (default: 1000) */
49
+ baseDelayMs?: number;
50
+ /** Request timeout in ms (default: 10000) */
51
+ timeoutMs?: number;
52
+ /** Testing: override transport */
53
+ _testTransport?: (url: string, payload: string, headers: Record<string, string>) => Promise<number>;
54
+ }
55
+ export declare class WebhookManager {
56
+ private db;
57
+ private logger;
58
+ private maxRetries;
59
+ private baseDelayMs;
60
+ private timeoutMs;
61
+ private testTransport?;
62
+ constructor(options: WebhookManagerOptions);
63
+ /**
64
+ * Register a new webhook endpoint.
65
+ */
66
+ add(params: {
67
+ url: string;
68
+ events: WebhookEventType[];
69
+ label?: string;
70
+ }): Webhook;
71
+ /**
72
+ * List all registered webhooks.
73
+ */
74
+ list(): Webhook[];
75
+ /**
76
+ * Get a webhook by ID.
77
+ */
78
+ getById(id: string): Webhook | null;
79
+ /**
80
+ * Remove a webhook by ID.
81
+ */
82
+ remove(id: string): boolean;
83
+ /**
84
+ * Emit an event to all matching webhooks.
85
+ * This is fire-and-forget — it never blocks the caller.
86
+ */
87
+ emit(event: WebhookEventType, details: Record<string, unknown>): void;
88
+ /**
89
+ * Deliver a payload to a webhook endpoint with retries.
90
+ */
91
+ private deliver;
92
+ /**
93
+ * Send an HTTP/HTTPS POST request.
94
+ */
95
+ private send;
96
+ /**
97
+ * HMAC-SHA256 signature for payload verification.
98
+ * Recipients can verify the webhook came from Aegis using:
99
+ * sha256=HMAC(body, secret)
100
+ */
101
+ private sign;
102
+ /**
103
+ * Sleep for a given number of milliseconds.
104
+ */
105
+ private sleep;
106
+ private rowToWebhook;
107
+ /**
108
+ * Check all credentials in the vault for approaching expiry.
109
+ * Emits `credential_expiry` webhook events for credentials expiring within `thresholdDays`.
110
+ * Returns the number of credentials that triggered alerts.
111
+ */
112
+ checkExpiringCredentials(vault: Vault, thresholdDays?: number): number;
113
+ }
114
+ //# sourceMappingURL=webhook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../src/webhook/webhook.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAG3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAI/C;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACxB,iBAAiB,GACjB,mBAAmB,GACnB,qBAAqB,GACrB,oBAAoB,GACpB,iBAAiB,CAAC;AAEtB,eAAO,MAAM,mBAAmB,EAAE,SAAS,gBAAgB,EAMjD,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,sBAAsB;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,iBAAiB;IACjB,KAAK,EAAE,gBAAgB,CAAC;IACxB,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAWD,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC/C,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kCAAkC;IAClC,cAAc,CAAC,EAAE,CACf,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAC5B,OAAO,CAAC,MAAM,CAAC,CAAC;CACtB;AAID,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAC,CAID;gBAET,OAAO,EAAE,qBAAqB;IAc1C;;OAEG;IACH,GAAG,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO;IA0CjF;;OAEG;IACH,IAAI,IAAI,OAAO,EAAE;IAQjB;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAQnC;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAW3B;;;OAGG;IACH,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IA8BrE;;OAEG;YACW,OAAO;IAiDrB;;OAEG;IACH,OAAO,CAAC,IAAI;IAuCZ;;;;OAIG;IACH,OAAO,CAAC,IAAI;IAMZ;;OAEG;IACH,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,YAAY;IAapB;;;;OAIG;IACH,wBAAwB,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,SAAI,GAAG,MAAM;CAgDlE"}