@agentlensai/server 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/alerts.test.d.ts +5 -0
- package/dist/__tests__/alerts.test.d.ts.map +1 -0
- package/dist/__tests__/alerts.test.js +245 -0
- package/dist/__tests__/alerts.test.js.map +1 -0
- package/dist/__tests__/analytics.test.d.ts +5 -0
- package/dist/__tests__/analytics.test.d.ts.map +1 -0
- package/dist/__tests__/analytics.test.js +218 -0
- package/dist/__tests__/analytics.test.js.map +1 -0
- package/dist/__tests__/ingest.test.d.ts +8 -0
- package/dist/__tests__/ingest.test.d.ts.map +1 -0
- package/dist/__tests__/ingest.test.js +469 -0
- package/dist/__tests__/ingest.test.js.map +1 -0
- package/dist/__tests__/llm-tracking.test.d.ts +10 -0
- package/dist/__tests__/llm-tracking.test.d.ts.map +1 -0
- package/dist/__tests__/llm-tracking.test.js +602 -0
- package/dist/__tests__/llm-tracking.test.js.map +1 -0
- package/dist/__tests__/stream.test.d.ts +5 -0
- package/dist/__tests__/stream.test.d.ts.map +1 -0
- package/dist/__tests__/stream.test.js +352 -0
- package/dist/__tests__/stream.test.js.map +1 -0
- package/dist/db/__tests__/sqlite-store-read.test.js +1 -1
- package/dist/db/__tests__/sqlite-store-read.test.js.map +1 -1
- package/dist/db/__tests__/sqlite-store-write.test.js +1 -1
- package/dist/db/__tests__/sqlite-store-write.test.js.map +1 -1
- package/dist/db/migrate.d.ts.map +1 -1
- package/dist/db/migrate.js +17 -0
- package/dist/db/migrate.js.map +1 -1
- package/dist/db/schema.sqlite.d.ts +52 -1
- package/dist/db/schema.sqlite.d.ts.map +1 -1
- package/dist/db/schema.sqlite.js +3 -0
- package/dist/db/schema.sqlite.js.map +1 -1
- package/dist/db/sqlite-store.d.ts +12 -2
- package/dist/db/sqlite-store.d.ts.map +1 -1
- package/dist/db/sqlite-store.js +96 -5
- package/dist/db/sqlite-store.js.map +1 -1
- package/dist/index.d.ts +9 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +35 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/__tests__/alert-engine.test.d.ts +5 -0
- package/dist/lib/__tests__/alert-engine.test.d.ts.map +1 -0
- package/dist/lib/__tests__/alert-engine.test.js +211 -0
- package/dist/lib/__tests__/alert-engine.test.js.map +1 -0
- package/dist/lib/__tests__/retention.test.js +1 -1
- package/dist/lib/__tests__/retention.test.js.map +1 -1
- package/dist/lib/alert-engine.d.ts +61 -0
- package/dist/lib/alert-engine.d.ts.map +1 -0
- package/dist/lib/alert-engine.js +280 -0
- package/dist/lib/alert-engine.js.map +1 -0
- package/dist/lib/event-bus.d.ts +48 -0
- package/dist/lib/event-bus.d.ts.map +1 -0
- package/dist/lib/event-bus.js +34 -0
- package/dist/lib/event-bus.js.map +1 -0
- package/dist/lib/retention.d.ts +1 -1
- package/dist/lib/retention.d.ts.map +1 -1
- package/dist/lib/sse.d.ts +21 -0
- package/dist/lib/sse.d.ts.map +1 -0
- package/dist/lib/sse.js +114 -0
- package/dist/lib/sse.js.map +1 -0
- package/dist/routes/agents.d.ts +1 -1
- package/dist/routes/agents.d.ts.map +1 -1
- package/dist/routes/alerts.d.ts +17 -0
- package/dist/routes/alerts.d.ts.map +1 -0
- package/dist/routes/alerts.js +133 -0
- package/dist/routes/alerts.js.map +1 -0
- package/dist/routes/analytics.d.ts +16 -0
- package/dist/routes/analytics.d.ts.map +1 -0
- package/dist/routes/analytics.js +293 -0
- package/dist/routes/analytics.js.map +1 -0
- package/dist/routes/config.d.ts +5 -0
- package/dist/routes/config.d.ts.map +1 -1
- package/dist/routes/config.js +27 -7
- package/dist/routes/config.js.map +1 -1
- package/dist/routes/events.d.ts +1 -1
- package/dist/routes/events.d.ts.map +1 -1
- package/dist/routes/events.js +17 -4
- package/dist/routes/events.js.map +1 -1
- package/dist/routes/ingest.d.ts +30 -0
- package/dist/routes/ingest.d.ts.map +1 -0
- package/dist/routes/ingest.js +261 -0
- package/dist/routes/ingest.js.map +1 -0
- package/dist/routes/sessions.d.ts +1 -1
- package/dist/routes/sessions.d.ts.map +1 -1
- package/dist/routes/sessions.js +1 -1
- package/dist/routes/sessions.js.map +1 -1
- package/dist/routes/stats.d.ts +1 -1
- package/dist/routes/stats.d.ts.map +1 -1
- package/dist/routes/stream.d.ts +16 -0
- package/dist/routes/stream.d.ts.map +1 -0
- package/dist/routes/stream.js +41 -0
- package/dist/routes/stream.js.map +1 -0
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @
|
|
2
|
+
* @agentlensai/server — Hono HTTP API server and event storage
|
|
3
3
|
*
|
|
4
4
|
* Exports:
|
|
5
5
|
* - createApp(store, config?) — factory that returns a configured Hono app
|
|
@@ -21,9 +21,15 @@ import { sessionsRoutes } from './routes/sessions.js';
|
|
|
21
21
|
import { agentsRoutes } from './routes/agents.js';
|
|
22
22
|
import { statsRoutes } from './routes/stats.js';
|
|
23
23
|
import { configRoutes } from './routes/config.js';
|
|
24
|
+
import { alertsRoutes } from './routes/alerts.js';
|
|
25
|
+
import { ingestRoutes } from './routes/ingest.js';
|
|
26
|
+
import { analyticsRoutes } from './routes/analytics.js';
|
|
27
|
+
import { streamRoutes } from './routes/stream.js';
|
|
24
28
|
import { createDb } from './db/index.js';
|
|
25
29
|
import { runMigrations } from './db/migrate.js';
|
|
26
30
|
import { SqliteEventStore } from './db/sqlite-store.js';
|
|
31
|
+
import { AlertEngine } from './lib/alert-engine.js';
|
|
32
|
+
import { eventBus } from './lib/event-bus.js';
|
|
27
33
|
// Re-export everything consumers may need
|
|
28
34
|
export { getConfig } from './config.js';
|
|
29
35
|
export { authMiddleware, hashApiKey } from './middleware/auth.js';
|
|
@@ -33,7 +39,14 @@ export { sessionsRoutes } from './routes/sessions.js';
|
|
|
33
39
|
export { agentsRoutes } from './routes/agents.js';
|
|
34
40
|
export { statsRoutes } from './routes/stats.js';
|
|
35
41
|
export { configRoutes } from './routes/config.js';
|
|
42
|
+
export { alertsRoutes } from './routes/alerts.js';
|
|
43
|
+
export { ingestRoutes, verifyWebhookSignature } from './routes/ingest.js';
|
|
44
|
+
export { analyticsRoutes } from './routes/analytics.js';
|
|
45
|
+
export { streamRoutes } from './routes/stream.js';
|
|
46
|
+
export { createSSEStream } from './lib/sse.js';
|
|
36
47
|
export { SqliteEventStore } from './db/sqlite-store.js';
|
|
48
|
+
export { AlertEngine } from './lib/alert-engine.js';
|
|
49
|
+
export { eventBus } from './lib/event-bus.js';
|
|
37
50
|
export { createDb, createTestDb } from './db/index.js';
|
|
38
51
|
export { runMigrations } from './db/migrate.js';
|
|
39
52
|
// ─── Dashboard SPA helpers ───────────────────────────────────
|
|
@@ -121,6 +134,13 @@ export function createApp(store, config) {
|
|
|
121
134
|
app.get('/api/health', (c) => {
|
|
122
135
|
return c.json({ status: 'ok', version: '0.1.0' });
|
|
123
136
|
});
|
|
137
|
+
// ─── SSE stream (no API key auth — browser EventSource doesn't send headers) ──
|
|
138
|
+
app.route('/api/stream', streamRoutes());
|
|
139
|
+
// ─── Webhook ingest (no API key auth — uses HMAC signature verification) ──
|
|
140
|
+
app.route('/api/events/ingest', ingestRoutes(store, {
|
|
141
|
+
agentgateWebhookSecret: process.env['AGENTGATE_WEBHOOK_SECRET'],
|
|
142
|
+
formbridgeWebhookSecret: process.env['FORMBRIDGE_WEBHOOK_SECRET'],
|
|
143
|
+
}));
|
|
124
144
|
// ─── Auth middleware on protected routes ───────────────
|
|
125
145
|
// We need the db reference for auth key lookup
|
|
126
146
|
const db = config?.db;
|
|
@@ -130,11 +150,19 @@ export function createApp(store, config) {
|
|
|
130
150
|
}
|
|
131
151
|
if (db) {
|
|
132
152
|
app.use('/api/keys/*', authMiddleware(db, resolvedConfig.authDisabled));
|
|
133
|
-
|
|
153
|
+
// Protect event endpoints but exclude webhook ingest (uses HMAC auth instead)
|
|
154
|
+
app.use('/api/events/*', async (c, next) => {
|
|
155
|
+
const path = new URL(c.req.url).pathname;
|
|
156
|
+
if (path.startsWith('/api/events/ingest'))
|
|
157
|
+
return next();
|
|
158
|
+
return authMiddleware(db, resolvedConfig.authDisabled)(c, next);
|
|
159
|
+
});
|
|
134
160
|
app.use('/api/sessions/*', authMiddleware(db, resolvedConfig.authDisabled));
|
|
135
161
|
app.use('/api/agents/*', authMiddleware(db, resolvedConfig.authDisabled));
|
|
136
162
|
app.use('/api/stats/*', authMiddleware(db, resolvedConfig.authDisabled));
|
|
137
163
|
app.use('/api/config/*', authMiddleware(db, resolvedConfig.authDisabled));
|
|
164
|
+
app.use('/api/analytics/*', authMiddleware(db, resolvedConfig.authDisabled));
|
|
165
|
+
app.use('/api/alerts/*', authMiddleware(db, resolvedConfig.authDisabled));
|
|
138
166
|
}
|
|
139
167
|
// ─── Routes ────────────────────────────────────────────
|
|
140
168
|
if (db) {
|
|
@@ -146,7 +174,9 @@ export function createApp(store, config) {
|
|
|
146
174
|
app.route('/api/stats', statsRoutes(store));
|
|
147
175
|
if (db) {
|
|
148
176
|
app.route('/api/config', configRoutes(db));
|
|
177
|
+
app.route('/api/analytics', analyticsRoutes(store, db));
|
|
149
178
|
}
|
|
179
|
+
app.route('/api/alerts', alertsRoutes(store));
|
|
150
180
|
// ─── Dashboard SPA static assets ──────────────────────
|
|
151
181
|
const dashboardRoot = getDashboardRoot();
|
|
152
182
|
if (dashboardRoot) {
|
|
@@ -171,6 +201,9 @@ export function startServer() {
|
|
|
171
201
|
console.log(` Auth: ${config.authDisabled ? 'DISABLED (dev mode)' : 'enabled'}`);
|
|
172
202
|
console.log(` CORS origin: ${config.corsOrigin}`);
|
|
173
203
|
console.log(` Database: ${config.dbPath}`);
|
|
204
|
+
// Start alert evaluation engine
|
|
205
|
+
const alertEngine = new AlertEngine(store);
|
|
206
|
+
alertEngine.start();
|
|
174
207
|
serve({
|
|
175
208
|
fetch: app.fetch,
|
|
176
209
|
port: config.port,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAqB,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAsB,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAiB,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alert-engine.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/alert-engine.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for Alert Evaluation Engine (Story 12.2)
|
|
3
|
+
*/
|
|
4
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
|
5
|
+
import { ulid } from 'ulid';
|
|
6
|
+
import { createTestDb } from '../../db/index.js';
|
|
7
|
+
import { runMigrations } from '../../db/migrate.js';
|
|
8
|
+
import { SqliteEventStore } from '../../db/sqlite-store.js';
|
|
9
|
+
import { AlertEngine } from '../alert-engine.js';
|
|
10
|
+
import { eventBus } from '../event-bus.js';
|
|
11
|
+
import { computeEventHash } from '@agentlensai/core';
|
|
12
|
+
let db;
|
|
13
|
+
let store;
|
|
14
|
+
let engine;
|
|
15
|
+
function makeEvent(overrides, prevHash = null) {
|
|
16
|
+
const id = ulid();
|
|
17
|
+
const base = {
|
|
18
|
+
id,
|
|
19
|
+
timestamp: new Date().toISOString(),
|
|
20
|
+
sessionId: overrides.sessionId,
|
|
21
|
+
agentId: overrides.agentId,
|
|
22
|
+
eventType: overrides.eventType ?? 'tool_call',
|
|
23
|
+
severity: overrides.severity ?? 'info',
|
|
24
|
+
payload: overrides.payload ?? { toolName: 'test', callId: id, arguments: {} },
|
|
25
|
+
metadata: overrides.metadata ?? {},
|
|
26
|
+
prevHash,
|
|
27
|
+
hash: '',
|
|
28
|
+
};
|
|
29
|
+
base.hash = computeEventHash({
|
|
30
|
+
id: base.id,
|
|
31
|
+
timestamp: base.timestamp,
|
|
32
|
+
sessionId: base.sessionId,
|
|
33
|
+
agentId: base.agentId,
|
|
34
|
+
eventType: base.eventType,
|
|
35
|
+
severity: base.severity,
|
|
36
|
+
payload: base.payload,
|
|
37
|
+
metadata: base.metadata,
|
|
38
|
+
prevHash: base.prevHash,
|
|
39
|
+
});
|
|
40
|
+
return base;
|
|
41
|
+
}
|
|
42
|
+
beforeEach(() => {
|
|
43
|
+
db = createTestDb();
|
|
44
|
+
runMigrations(db);
|
|
45
|
+
store = new SqliteEventStore(db);
|
|
46
|
+
engine = new AlertEngine(store, { checkIntervalMs: 60_000 });
|
|
47
|
+
});
|
|
48
|
+
afterEach(() => {
|
|
49
|
+
engine.stop();
|
|
50
|
+
eventBus.removeAllListeners();
|
|
51
|
+
});
|
|
52
|
+
describe('AlertEngine.evaluate()', () => {
|
|
53
|
+
it('returns empty when no rules exist', async () => {
|
|
54
|
+
const triggered = await engine.evaluate();
|
|
55
|
+
expect(triggered).toEqual([]);
|
|
56
|
+
});
|
|
57
|
+
it('returns empty when rules are disabled', async () => {
|
|
58
|
+
const now = new Date().toISOString();
|
|
59
|
+
await store.createAlertRule({
|
|
60
|
+
id: ulid(),
|
|
61
|
+
name: 'Disabled Rule',
|
|
62
|
+
enabled: false,
|
|
63
|
+
condition: 'error_rate_exceeds',
|
|
64
|
+
threshold: 0.01,
|
|
65
|
+
windowMinutes: 60,
|
|
66
|
+
scope: {},
|
|
67
|
+
notifyChannels: [],
|
|
68
|
+
createdAt: now,
|
|
69
|
+
updatedAt: now,
|
|
70
|
+
});
|
|
71
|
+
const triggered = await engine.evaluate();
|
|
72
|
+
expect(triggered).toEqual([]);
|
|
73
|
+
});
|
|
74
|
+
it('triggers when error rate exceeds threshold', async () => {
|
|
75
|
+
const now = new Date().toISOString();
|
|
76
|
+
// Create rule
|
|
77
|
+
await store.createAlertRule({
|
|
78
|
+
id: ulid(),
|
|
79
|
+
name: 'Error Rate Alert',
|
|
80
|
+
enabled: true,
|
|
81
|
+
condition: 'error_rate_exceeds',
|
|
82
|
+
threshold: 0.1, // 10%
|
|
83
|
+
windowMinutes: 60,
|
|
84
|
+
scope: {},
|
|
85
|
+
notifyChannels: [],
|
|
86
|
+
createdAt: now,
|
|
87
|
+
updatedAt: now,
|
|
88
|
+
});
|
|
89
|
+
// Insert events as a single batch: 1 start + 8 normal + 2 errors = ~18% error rate
|
|
90
|
+
const sessionId = 'test-session';
|
|
91
|
+
const agentId = 'test-agent';
|
|
92
|
+
const batch = [];
|
|
93
|
+
const startEvent = makeEvent({ sessionId, agentId, eventType: 'session_started', payload: { agentName: 'test' } }, null);
|
|
94
|
+
batch.push(startEvent);
|
|
95
|
+
let prevHash = startEvent.hash;
|
|
96
|
+
for (let i = 0; i < 8; i++) {
|
|
97
|
+
const ev = makeEvent({ sessionId, agentId }, prevHash);
|
|
98
|
+
batch.push(ev);
|
|
99
|
+
prevHash = ev.hash;
|
|
100
|
+
}
|
|
101
|
+
// Error events
|
|
102
|
+
for (let i = 0; i < 2; i++) {
|
|
103
|
+
const ev = makeEvent({ sessionId, agentId, eventType: 'tool_error', severity: 'error', payload: { toolName: 'test', callId: ulid(), error: 'fail', durationMs: 100 } }, prevHash);
|
|
104
|
+
batch.push(ev);
|
|
105
|
+
prevHash = ev.hash;
|
|
106
|
+
}
|
|
107
|
+
await store.insertEvents(batch);
|
|
108
|
+
// Track EventBus emission
|
|
109
|
+
const emitted = [];
|
|
110
|
+
eventBus.on('alert_triggered', (ev) => emitted.push(ev));
|
|
111
|
+
const triggered = await engine.evaluate();
|
|
112
|
+
expect(triggered).toHaveLength(1);
|
|
113
|
+
expect(triggered[0].message).toContain('Error rate');
|
|
114
|
+
expect(emitted).toHaveLength(1);
|
|
115
|
+
// Verify it was persisted in history
|
|
116
|
+
const history = await store.listAlertHistory();
|
|
117
|
+
expect(history.entries).toHaveLength(1);
|
|
118
|
+
});
|
|
119
|
+
it('does not trigger when below threshold', async () => {
|
|
120
|
+
const now = new Date().toISOString();
|
|
121
|
+
await store.createAlertRule({
|
|
122
|
+
id: ulid(),
|
|
123
|
+
name: 'Error Rate Alert',
|
|
124
|
+
enabled: true,
|
|
125
|
+
condition: 'error_rate_exceeds',
|
|
126
|
+
threshold: 0.5, // 50% — very high
|
|
127
|
+
windowMinutes: 60,
|
|
128
|
+
scope: {},
|
|
129
|
+
notifyChannels: [],
|
|
130
|
+
createdAt: now,
|
|
131
|
+
updatedAt: now,
|
|
132
|
+
});
|
|
133
|
+
// Insert events as a single batch to avoid hash chain issues
|
|
134
|
+
const sessionId = 'test-session';
|
|
135
|
+
const agentId = 'test-agent';
|
|
136
|
+
const batch = [];
|
|
137
|
+
const startEvent = makeEvent({ sessionId, agentId, eventType: 'session_started', payload: { agentName: 'test' } }, null);
|
|
138
|
+
batch.push(startEvent);
|
|
139
|
+
let prevHash = startEvent.hash;
|
|
140
|
+
for (let i = 0; i < 9; i++) {
|
|
141
|
+
const ev = makeEvent({ sessionId, agentId }, prevHash);
|
|
142
|
+
batch.push(ev);
|
|
143
|
+
prevHash = ev.hash;
|
|
144
|
+
}
|
|
145
|
+
const errEv = makeEvent({ sessionId, agentId, eventType: 'tool_error', severity: 'error', payload: { toolName: 'test', callId: ulid(), error: 'fail', durationMs: 100 } }, prevHash);
|
|
146
|
+
batch.push(errEv);
|
|
147
|
+
await store.insertEvents(batch);
|
|
148
|
+
const triggered = await engine.evaluate();
|
|
149
|
+
expect(triggered).toEqual([]);
|
|
150
|
+
});
|
|
151
|
+
it('triggers event_count_exceeds rule', async () => {
|
|
152
|
+
const now = new Date().toISOString();
|
|
153
|
+
await store.createAlertRule({
|
|
154
|
+
id: ulid(),
|
|
155
|
+
name: 'Event Count Alert',
|
|
156
|
+
enabled: true,
|
|
157
|
+
condition: 'event_count_exceeds',
|
|
158
|
+
threshold: 3,
|
|
159
|
+
windowMinutes: 60,
|
|
160
|
+
scope: {},
|
|
161
|
+
notifyChannels: [],
|
|
162
|
+
createdAt: now,
|
|
163
|
+
updatedAt: now,
|
|
164
|
+
});
|
|
165
|
+
// Insert 5 events as a batch (>3 threshold)
|
|
166
|
+
const sessionId = 'test-session';
|
|
167
|
+
const agentId = 'test-agent';
|
|
168
|
+
const batch = [];
|
|
169
|
+
const startEvent = makeEvent({ sessionId, agentId, eventType: 'session_started', payload: { agentName: 'test' } }, null);
|
|
170
|
+
batch.push(startEvent);
|
|
171
|
+
let prevHash = startEvent.hash;
|
|
172
|
+
for (let i = 0; i < 4; i++) {
|
|
173
|
+
const ev = makeEvent({ sessionId, agentId }, prevHash);
|
|
174
|
+
batch.push(ev);
|
|
175
|
+
prevHash = ev.hash;
|
|
176
|
+
}
|
|
177
|
+
await store.insertEvents(batch);
|
|
178
|
+
const triggered = await engine.evaluate();
|
|
179
|
+
expect(triggered).toHaveLength(1);
|
|
180
|
+
expect(triggered[0].message).toContain('Event count');
|
|
181
|
+
});
|
|
182
|
+
it('triggers no_events_for when no events exist', async () => {
|
|
183
|
+
const now = new Date().toISOString();
|
|
184
|
+
await store.createAlertRule({
|
|
185
|
+
id: ulid(),
|
|
186
|
+
name: 'No Events Alert',
|
|
187
|
+
enabled: true,
|
|
188
|
+
condition: 'no_events_for',
|
|
189
|
+
threshold: 0,
|
|
190
|
+
windowMinutes: 5,
|
|
191
|
+
scope: {},
|
|
192
|
+
notifyChannels: [],
|
|
193
|
+
createdAt: now,
|
|
194
|
+
updatedAt: now,
|
|
195
|
+
});
|
|
196
|
+
// No events inserted
|
|
197
|
+
const triggered = await engine.evaluate();
|
|
198
|
+
expect(triggered).toHaveLength(1);
|
|
199
|
+
expect(triggered[0].message).toContain('No events');
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
describe('AlertEngine lifecycle', () => {
|
|
203
|
+
it('can start and stop', () => {
|
|
204
|
+
engine.start();
|
|
205
|
+
// Starting twice is a no-op
|
|
206
|
+
engine.start();
|
|
207
|
+
engine.stop();
|
|
208
|
+
engine.stop(); // Stopping twice is safe
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
//# sourceMappingURL=alert-engine.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alert-engine.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/alert-engine.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAiB,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,IAAI,EAAY,CAAC;AACjB,IAAI,KAAuB,CAAC;AAC5B,IAAI,MAAmB,CAAC;AAExB,SAAS,SAAS,CAChB,SAA2E,EAC3E,WAA0B,IAAI;IAE9B,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC;IAClB,MAAM,IAAI,GAAG;QACX,EAAE;QACF,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,SAAS,EAAE,SAAS,CAAC,SAAS;QAC9B,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,SAAS,EAAE,SAAS,CAAC,SAAS,IAAK,WAAqB;QACxD,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAK,MAAgB;QACjD,OAAO,EAAE,SAAS,CAAC,OAAO,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QAC7E,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAI,EAAE;QAClC,QAAQ;QACR,IAAI,EAAE,EAAE;KACT,CAAC;IAEF,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC3B,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACxB,CAAC,CAAC;IAEH,OAAO,IAAsB,CAAC;AAChC,CAAC;AAED,UAAU,CAAC,GAAG,EAAE;IACd,EAAE,GAAG,YAAY,EAAE,CAAC;IACpB,aAAa,CAAC,EAAE,CAAC,CAAC;IAClB,KAAK,GAAG,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACjC,MAAM,GAAG,IAAI,WAAW,CAAC,KAAK,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,CAAC;AAC/D,CAAC,CAAC,CAAC;AAEH,SAAS,CAAC,GAAG,EAAE;IACb,MAAM,CAAC,IAAI,EAAE,CAAC;IACd,QAAQ,CAAC,kBAAkB,EAAE,CAAC;AAChC,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC1C,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,KAAK,CAAC,eAAe,CAAC;YAC1B,EAAE,EAAE,IAAI,EAAE;YACV,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,oBAAoB;YAC/B,SAAS,EAAE,IAAI;YACf,aAAa,EAAE,EAAE;YACjB,KAAK,EAAE,EAAE;YACT,cAAc,EAAE,EAAE;YAClB,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;SACf,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC1C,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAErC,cAAc;QACd,MAAM,KAAK,CAAC,eAAe,CAAC;YAC1B,EAAE,EAAE,IAAI,EAAE;YACV,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,oBAAoB;YAC/B,SAAS,EAAE,GAAG,EAAE,MAAM;YACtB,aAAa,EAAE,EAAE;YACjB,KAAK,EAAE,EAAE;YACT,cAAc,EAAE,EAAE;YAClB,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;SACf,CAAC,CAAC;QAEH,mFAAmF;QACnF,MAAM,SAAS,GAAG,cAAc,CAAC;QACjC,MAAM,OAAO,GAAG,YAAY,CAAC;QAC7B,MAAM,KAAK,GAAqB,EAAE,CAAC;QAEnC,MAAM,UAAU,GAAG,SAAS,CAC1B,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EACpF,IAAI,CACL,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvB,IAAI,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC;QAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,EAAE,GAAG,SAAS,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC;QACrB,CAAC;QAED,eAAe;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,EAAE,GAAG,SAAS,CAClB,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,EACjJ,QAAQ,CACT,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC;QACrB,CAAC;QAED,MAAM,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAEhC,0BAA0B;QAC1B,MAAM,OAAO,GAAc,EAAE,CAAC;QAC9B,QAAQ,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAEzD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC1C,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACtD,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAEhC,qCAAqC;QACrC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAC/C,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAErC,MAAM,KAAK,CAAC,eAAe,CAAC;YAC1B,EAAE,EAAE,IAAI,EAAE;YACV,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,oBAAoB;YAC/B,SAAS,EAAE,GAAG,EAAE,kBAAkB;YAClC,aAAa,EAAE,EAAE;YACjB,KAAK,EAAE,EAAE;YACT,cAAc,EAAE,EAAE;YAClB,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;SACf,CAAC,CAAC;QAEH,6DAA6D;QAC7D,MAAM,SAAS,GAAG,cAAc,CAAC;QACjC,MAAM,OAAO,GAAG,YAAY,CAAC;QAC7B,MAAM,KAAK,GAAqB,EAAE,CAAC;QAEnC,MAAM,UAAU,GAAG,SAAS,CAC1B,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EACpF,IAAI,CACL,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvB,IAAI,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC;QAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,EAAE,GAAG,SAAS,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC;QACrB,CAAC;QAED,MAAM,KAAK,GAAG,SAAS,CACrB,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,EACjJ,QAAQ,CACT,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAElB,MAAM,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAEhC,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC1C,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAErC,MAAM,KAAK,CAAC,eAAe,CAAC;YAC1B,EAAE,EAAE,IAAI,EAAE;YACV,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,qBAAqB;YAChC,SAAS,EAAE,CAAC;YACZ,aAAa,EAAE,EAAE;YACjB,KAAK,EAAE,EAAE;YACT,cAAc,EAAE,EAAE;YAClB,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;SACf,CAAC,CAAC;QAEH,4CAA4C;QAC5C,MAAM,SAAS,GAAG,cAAc,CAAC;QACjC,MAAM,OAAO,GAAG,YAAY,CAAC;QAC7B,MAAM,KAAK,GAAqB,EAAE,CAAC;QAEnC,MAAM,UAAU,GAAG,SAAS,CAC1B,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EACpF,IAAI,CACL,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvB,IAAI,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC;QAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,EAAE,GAAG,SAAS,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC;QACrB,CAAC;QAED,MAAM,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAEhC,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC1C,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAErC,MAAM,KAAK,CAAC,eAAe,CAAC;YAC1B,EAAE,EAAE,IAAI,EAAE;YACV,IAAI,EAAE,iBAAiB;YACvB,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,eAAe;YAC1B,SAAS,EAAE,CAAC;YACZ,aAAa,EAAE,CAAC;YAChB,KAAK,EAAE,EAAE;YACT,cAAc,EAAE,EAAE;YAClB,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;SACf,CAAC,CAAC;QAEH,qBAAqB;QACrB,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC1C,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,4BAA4B;QAC5B,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,yBAAyB;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect, beforeEach } from 'vitest';
|
|
2
|
-
import { computeEventHash } from '@
|
|
2
|
+
import { computeEventHash } from '@agentlensai/core';
|
|
3
3
|
import { createTestDb } from '../../db/index.js';
|
|
4
4
|
import { runMigrations } from '../../db/migrate.js';
|
|
5
5
|
import { SqliteEventStore } from '../../db/sqlite-store.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retention.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/retention.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAE1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"retention.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/retention.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Alert Evaluation Engine (Story 12.2 + 12.3)
|
|
3
|
+
*
|
|
4
|
+
* Periodically evaluates alert rules against recent analytics data.
|
|
5
|
+
* When conditions are met, triggers alerts:
|
|
6
|
+
* 1. Stores in alertHistory table
|
|
7
|
+
* 2. Delivers via webhook (Story 12.3)
|
|
8
|
+
* 3. Emits on EventBus (Story 12.5)
|
|
9
|
+
* 4. Logs to console
|
|
10
|
+
*/
|
|
11
|
+
import type { IEventStore } from '@agentlensai/core';
|
|
12
|
+
import type { AlertHistory } from '@agentlensai/core';
|
|
13
|
+
/**
|
|
14
|
+
* Validate that a webhook URL is safe to deliver to.
|
|
15
|
+
* Blocks private/reserved IPs and non-HTTP(S) schemes to prevent SSRF.
|
|
16
|
+
*/
|
|
17
|
+
export declare function isWebhookUrlAllowed(url: string): boolean;
|
|
18
|
+
export interface AlertEngineOptions {
|
|
19
|
+
/** Evaluation interval in milliseconds */
|
|
20
|
+
checkIntervalMs?: number;
|
|
21
|
+
}
|
|
22
|
+
export declare class AlertEngine {
|
|
23
|
+
private store;
|
|
24
|
+
private timer;
|
|
25
|
+
private running;
|
|
26
|
+
private readonly checkIntervalMs;
|
|
27
|
+
constructor(store: IEventStore, options?: AlertEngineOptions);
|
|
28
|
+
/**
|
|
29
|
+
* Start the periodic evaluation loop.
|
|
30
|
+
*/
|
|
31
|
+
start(): void;
|
|
32
|
+
/**
|
|
33
|
+
* Stop the evaluation loop.
|
|
34
|
+
*/
|
|
35
|
+
stop(): void;
|
|
36
|
+
/**
|
|
37
|
+
* Run a single evaluation cycle (can also be called manually / from tests).
|
|
38
|
+
*/
|
|
39
|
+
evaluate(): Promise<AlertHistory[]>;
|
|
40
|
+
/**
|
|
41
|
+
* Compute the current metric value for a rule by querying analytics.
|
|
42
|
+
*/
|
|
43
|
+
private computeCurrentValue;
|
|
44
|
+
/**
|
|
45
|
+
* Check whether the condition is met.
|
|
46
|
+
*/
|
|
47
|
+
private checkCondition;
|
|
48
|
+
/**
|
|
49
|
+
* Trigger an alert: persist history, deliver webhooks, emit on EventBus.
|
|
50
|
+
*/
|
|
51
|
+
private triggerAlert;
|
|
52
|
+
/**
|
|
53
|
+
* Deliver alert to configured webhook URLs (Story 12.3).
|
|
54
|
+
*/
|
|
55
|
+
private deliverWebhooks;
|
|
56
|
+
/**
|
|
57
|
+
* Build a human-readable alert message.
|
|
58
|
+
*/
|
|
59
|
+
private buildMessage;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=alert-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alert-engine.d.ts","sourceRoot":"","sources":["../../src/lib/alert-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAa,YAAY,EAAkB,MAAM,mBAAmB,CAAC;AAQjF;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CA+CxD;AAED,MAAM,WAAW,kBAAkB;IACjC,0CAA0C;IAC1C,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,WAAW;IAMpB,OAAO,CAAC,KAAK;IALf,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;gBAG/B,KAAK,EAAE,WAAW,EAC1B,OAAO,CAAC,EAAE,kBAAkB;IAQ9B;;OAEG;IACH,KAAK,IAAI,IAAI;IAUb;;OAEG;IACH,IAAI,IAAI,IAAI;IAQZ;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAuCzC;;OAEG;YACW,mBAAmB;IAwCjC;;OAEG;IACH,OAAO,CAAC,cAAc;IAqBtB;;OAEG;YACW,YAAY;IAiC1B;;OAEG;YACW,eAAe;IA4C7B;;OAEG;IACH,OAAO,CAAC,YAAY;CAmBrB"}
|