@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,269 @@
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 * as crypto from 'node:crypto';
11
+ import * as http from 'node:http';
12
+ import * as https from 'node:https';
13
+ import { createLogger } from '../logger/index.js';
14
+ export const WEBHOOK_EVENT_TYPES = [
15
+ 'blocked_request',
16
+ 'credential_expiry',
17
+ 'rate_limit_exceeded',
18
+ 'agent_auth_failure',
19
+ 'body_inspection',
20
+ ];
21
+ // ─── WebhookManager ──────────────────────────────────────────────
22
+ export class WebhookManager {
23
+ db;
24
+ logger;
25
+ maxRetries;
26
+ baseDelayMs;
27
+ timeoutMs;
28
+ testTransport;
29
+ constructor(options) {
30
+ this.db = options.db;
31
+ this.logger = createLogger({
32
+ module: 'webhook',
33
+ level: options.logLevel ?? 'info',
34
+ });
35
+ this.maxRetries = options.maxRetries ?? 3;
36
+ this.baseDelayMs = options.baseDelayMs ?? 1000;
37
+ this.timeoutMs = options.timeoutMs ?? 10_000;
38
+ this.testTransport = options._testTransport;
39
+ }
40
+ // ─── CRUD ────────────────────────────────────────────────────
41
+ /**
42
+ * Register a new webhook endpoint.
43
+ */
44
+ add(params) {
45
+ // Validate URL
46
+ const parsed = new URL(params.url);
47
+ if (!['http:', 'https:'].includes(parsed.protocol)) {
48
+ throw new Error(`Invalid webhook URL protocol: ${parsed.protocol} (must be http or https)`);
49
+ }
50
+ // Validate events
51
+ for (const event of params.events) {
52
+ if (!WEBHOOK_EVENT_TYPES.includes(event)) {
53
+ throw new Error(`Invalid event type: ${event}. Valid types: ${WEBHOOK_EVENT_TYPES.join(', ')}`);
54
+ }
55
+ }
56
+ if (params.events.length === 0) {
57
+ throw new Error('At least one event type is required');
58
+ }
59
+ const id = crypto.randomUUID();
60
+ const secret = crypto.randomBytes(32).toString('hex');
61
+ this.db
62
+ .prepare(`INSERT INTO webhooks (id, url, events, label, secret)
63
+ VALUES (?, ?, ?, ?, ?)`)
64
+ .run(id, params.url, JSON.stringify(params.events), params.label ?? null, secret);
65
+ this.logger.info({ id, url: params.url, events: params.events }, 'Webhook registered');
66
+ return {
67
+ id,
68
+ url: params.url,
69
+ events: params.events,
70
+ label: params.label,
71
+ secret,
72
+ createdAt: new Date().toISOString(),
73
+ };
74
+ }
75
+ /**
76
+ * List all registered webhooks.
77
+ */
78
+ list() {
79
+ const rows = this.db
80
+ .prepare('SELECT * FROM webhooks ORDER BY created_at DESC')
81
+ .all();
82
+ return rows.map((row) => this.rowToWebhook(row));
83
+ }
84
+ /**
85
+ * Get a webhook by ID.
86
+ */
87
+ getById(id) {
88
+ const row = this.db.prepare('SELECT * FROM webhooks WHERE id = ?').get(id);
89
+ return row ? this.rowToWebhook(row) : null;
90
+ }
91
+ /**
92
+ * Remove a webhook by ID.
93
+ */
94
+ remove(id) {
95
+ const result = this.db.prepare('DELETE FROM webhooks WHERE id = ?').run(id);
96
+ if (result.changes > 0) {
97
+ this.logger.info({ id }, 'Webhook removed');
98
+ return true;
99
+ }
100
+ return false;
101
+ }
102
+ // ─── Event Emission ──────────────────────────────────────────
103
+ /**
104
+ * Emit an event to all matching webhooks.
105
+ * This is fire-and-forget — it never blocks the caller.
106
+ */
107
+ emit(event, details) {
108
+ const payload = {
109
+ id: crypto.randomUUID(),
110
+ event,
111
+ timestamp: new Date().toISOString(),
112
+ details,
113
+ };
114
+ // Find all webhooks subscribed to this event
115
+ const webhooks = this.list().filter((w) => w.events.includes(event));
116
+ if (webhooks.length === 0)
117
+ return;
118
+ this.logger.debug({ event, webhookCount: webhooks.length, payloadId: payload.id }, 'Emitting webhook event');
119
+ // Fire-and-forget — don't await, don't block
120
+ for (const webhook of webhooks) {
121
+ this.deliver(webhook, payload).catch((err) => {
122
+ this.logger.error({ webhookId: webhook.id, url: webhook.url, err: String(err) }, 'Webhook delivery failed after all retries');
123
+ });
124
+ }
125
+ }
126
+ // ─── Delivery ────────────────────────────────────────────────
127
+ /**
128
+ * Deliver a payload to a webhook endpoint with retries.
129
+ */
130
+ async deliver(webhook, payload) {
131
+ const body = JSON.stringify(payload);
132
+ const signature = this.sign(body, webhook.secret);
133
+ const headers = {
134
+ 'Content-Type': 'application/json',
135
+ 'X-Aegis-Signature': signature,
136
+ 'X-Aegis-Event': payload.event,
137
+ 'X-Aegis-Delivery': payload.id,
138
+ 'User-Agent': 'Aegis-Webhook/1.0',
139
+ };
140
+ for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
141
+ try {
142
+ const statusCode = await this.send(webhook.url, body, headers);
143
+ if (statusCode >= 200 && statusCode < 300) {
144
+ this.logger.debug({ webhookId: webhook.id, status: statusCode, attempt }, 'Webhook delivered');
145
+ return;
146
+ }
147
+ // Non-2xx but not a network error — log and retry
148
+ this.logger.warn({ webhookId: webhook.id, status: statusCode, attempt }, 'Webhook delivery non-2xx response');
149
+ }
150
+ catch (err) {
151
+ this.logger.warn({ webhookId: webhook.id, attempt, err: String(err) }, 'Webhook delivery failed');
152
+ }
153
+ // Exponential backoff before retry (skip delay on last attempt)
154
+ if (attempt < this.maxRetries) {
155
+ const delay = this.baseDelayMs * 2 ** attempt;
156
+ await this.sleep(delay);
157
+ }
158
+ }
159
+ // All retries exhausted
160
+ throw new Error(`Webhook delivery failed after ${this.maxRetries + 1} attempts to ${webhook.url}`);
161
+ }
162
+ /**
163
+ * Send an HTTP/HTTPS POST request.
164
+ */
165
+ send(url, body, headers) {
166
+ // Use test transport if provided
167
+ if (this.testTransport) {
168
+ return this.testTransport(url, body, headers);
169
+ }
170
+ return new Promise((resolve, reject) => {
171
+ const parsed = new URL(url);
172
+ const transport = parsed.protocol === 'https:' ? https : http;
173
+ const req = transport.request({
174
+ hostname: parsed.hostname,
175
+ port: parsed.port || (parsed.protocol === 'https:' ? 443 : 80),
176
+ path: parsed.pathname + parsed.search,
177
+ method: 'POST',
178
+ headers: {
179
+ ...headers,
180
+ 'Content-Length': Buffer.byteLength(body),
181
+ },
182
+ timeout: this.timeoutMs,
183
+ }, (res) => {
184
+ // Consume response body to free socket
185
+ res.resume();
186
+ resolve(res.statusCode ?? 0);
187
+ });
188
+ req.on('error', reject);
189
+ req.on('timeout', () => {
190
+ req.destroy(new Error('Webhook request timeout'));
191
+ });
192
+ req.write(body);
193
+ req.end();
194
+ });
195
+ }
196
+ /**
197
+ * HMAC-SHA256 signature for payload verification.
198
+ * Recipients can verify the webhook came from Aegis using:
199
+ * sha256=HMAC(body, secret)
200
+ */
201
+ sign(body, secret) {
202
+ const hmac = crypto.createHmac('sha256', secret);
203
+ hmac.update(body);
204
+ return `sha256=${hmac.digest('hex')}`;
205
+ }
206
+ /**
207
+ * Sleep for a given number of milliseconds.
208
+ */
209
+ sleep(ms) {
210
+ return new Promise((resolve) => setTimeout(resolve, ms));
211
+ }
212
+ rowToWebhook(row) {
213
+ return {
214
+ id: row.id,
215
+ url: row.url,
216
+ events: JSON.parse(row.events),
217
+ label: row.label ?? undefined,
218
+ secret: row.secret,
219
+ createdAt: row.created_at,
220
+ };
221
+ }
222
+ // ─── Credential Expiry Checking ────────────────────────────────
223
+ /**
224
+ * Check all credentials in the vault for approaching expiry.
225
+ * Emits `credential_expiry` webhook events for credentials expiring within `thresholdDays`.
226
+ * Returns the number of credentials that triggered alerts.
227
+ */
228
+ checkExpiringCredentials(vault, thresholdDays = 7) {
229
+ const credentials = vault.list();
230
+ const now = new Date();
231
+ const thresholdMs = thresholdDays * 24 * 60 * 60 * 1000;
232
+ let alertCount = 0;
233
+ for (const cred of credentials) {
234
+ if (!cred.expiresAt)
235
+ continue;
236
+ const expiresAt = new Date(cred.expiresAt);
237
+ const timeRemaining = expiresAt.getTime() - now.getTime();
238
+ // Already expired
239
+ if (timeRemaining <= 0) {
240
+ this.emit('credential_expiry', {
241
+ credential: cred.name,
242
+ service: cred.service,
243
+ expiredAt: cred.expiresAt,
244
+ status: 'expired',
245
+ daysRemaining: 0,
246
+ });
247
+ alertCount++;
248
+ continue;
249
+ }
250
+ // Expiring soon (within threshold)
251
+ if (timeRemaining <= thresholdMs) {
252
+ const daysRemaining = Math.ceil(timeRemaining / (24 * 60 * 60 * 1000));
253
+ this.emit('credential_expiry', {
254
+ credential: cred.name,
255
+ service: cred.service,
256
+ expiresAt: cred.expiresAt,
257
+ status: 'expiring_soon',
258
+ daysRemaining,
259
+ });
260
+ alertCount++;
261
+ }
262
+ }
263
+ if (alertCount > 0) {
264
+ this.logger.info({ alertCount, thresholdDays }, 'Credential expiry check completed with alerts');
265
+ }
266
+ return alertCount;
267
+ }
268
+ }
269
+ //# sourceMappingURL=webhook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../src/webhook/webhook.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "@getaegis/cli",
3
- "version": "0.8.0",
3
+ "version": "0.8.1",
4
+ "mcpName": "io.github.getaegis/aegis",
4
5
  "description": "Credential isolation for AI agents. Store, guard, and record — your agent never sees your API keys.",
5
6
  "type": "module",
6
7
  "main": "dist/index.js",
@@ -33,7 +34,8 @@
33
34
  "typecheck": "tsc --noEmit",
34
35
  "verify": "biome check src/ tests/ && tsc --noEmit",
35
36
  "prepublishOnly": "yarn build && yarn test",
36
- "prepare": "husky"
37
+ "prepare": "husky",
38
+ "release": "release-it"
37
39
  },
38
40
  "lint-staged": {
39
41
  "*.{ts,tsx,js,jsx}": [
@@ -65,12 +67,14 @@
65
67
  },
66
68
  "devDependencies": {
67
69
  "@biomejs/biome": "^2.4.4",
70
+ "@release-it/conventional-changelog": "^10.0.5",
68
71
  "@types/better-sqlite3": "^7.6.12",
69
72
  "@types/node": "^22.13.0",
70
73
  "@types/pino": "^7.0.5",
71
74
  "husky": "^9.1.7",
72
75
  "lint-staged": "^16.2.7",
73
76
  "pino-pretty": "^13.1.3",
77
+ "release-it": "^19.2.4",
74
78
  "tsx": "^4.19.0",
75
79
  "typescript": "^5.7.0",
76
80
  "vitest": "^3.0.0"
@@ -79,4 +83,4 @@
79
83
  "node": ">=20.0.0"
80
84
  },
81
85
  "packageManager": "yarn@4.12.0+sha512.f45ab632439a67f8bc759bf32ead036a1f413287b9042726b7cc4818b7b49e14e9423ba49b18f9e06ea4941c1ad062385b1d8760a8d5091a1a31e5f6219afca8"
82
- }
86
+ }