@easyoref/shared 1.21.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,556 @@
1
+ /**
2
+ * Zod validation schemas for agent state, types, and store.
3
+ * Replaces TypeScript interfaces with runtime validation.
4
+ */
5
+ import { z } from "zod";
6
+ // ─────────────────────────────────────────────────────────
7
+ // Alert & Phase types
8
+ // ─────────────────────────────────────────────────────────
9
+ export const AlertTypeSchema = z.enum([
10
+ "early_warning",
11
+ "red_alert",
12
+ "resolved",
13
+ ]);
14
+ export const QualitativeCountSchema = z.discriminatedUnion("type", [
15
+ z.object({ type: z.literal("all") }),
16
+ z.object({ type: z.literal("most") }),
17
+ z.object({ type: z.literal("many") }),
18
+ z.object({ type: z.literal("few") }),
19
+ z.object({ type: z.literal("exists") }),
20
+ z.object({ type: z.literal("none") }),
21
+ z.object({ type: z.literal("more_than"), value: z.number() }),
22
+ z.object({ type: z.literal("less_than"), value: z.number() }),
23
+ ]);
24
+ // ─────────────────────────────────────────────────────────
25
+ // Source Message Types (input from Telegram channels)
26
+ // ─────────────────────────────────────────────────────────
27
+ export const SourceTypeSchema = z.enum([
28
+ "telegram_channel",
29
+ "web_scrape",
30
+ "manual",
31
+ ]);
32
+ export const BaseSourceMessageSchema = z.object({
33
+ channelId: z.string().min(1),
34
+ sourceType: SourceTypeSchema,
35
+ timestamp: z.number().int().min(0),
36
+ text: z.string().min(1),
37
+ sourceUrl: z.url().optional(),
38
+ });
39
+ export const NewsMessageSchema = BaseSourceMessageSchema.extend({
40
+ sourceType: z.literal("telegram_channel"),
41
+ grammyMessageId: z.number().optional(),
42
+ });
43
+ // ─────────────────────────────────────────────────────────
44
+ // Channel Types (source vs target)
45
+ // ─────────────────────────────────────────────────────────
46
+ export const NewsChannelSchema = z.object({
47
+ channelId: z.string().min(1),
48
+ channelName: z.string(),
49
+ language: z.string().min(2).max(5),
50
+ region: z.string().optional(),
51
+ });
52
+ export const TargetGroupSchema = z.object({
53
+ chatId: z.string().min(1),
54
+ groupName: z.string(),
55
+ subscribedRegions: z.array(z.string()),
56
+ });
57
+ // ─────────────────────────────────────────────────────────
58
+ // Channel tracking (pre-graph structure)
59
+ // ─────────────────────────────────────────────────────────
60
+ export const NewsChannelWithUpdatesSchema = z.object({
61
+ channel: z.string().min(1),
62
+ processedMessages: z
63
+ .array(NewsMessageSchema)
64
+ .default([])
65
+ .describe("Already processed messages"),
66
+ unprocessedMessages: z
67
+ .array(NewsMessageSchema)
68
+ .default([])
69
+ .describe("New messages pending processing"),
70
+ });
71
+ export const ChannelTrackingSchema = z.object({
72
+ trackStartTimestamp: z.number().int().min(0),
73
+ lastUpdateTimestamp: z.number().int().min(0),
74
+ channelsWithUpdates: z.array(NewsChannelWithUpdatesSchema).default([]),
75
+ });
76
+ // ─────────────────────────────────────────────────────────
77
+ // Pre-filter (deterministic, zero tokens)
78
+ // ─────────────────────────────────────────────────────────
79
+ export const RelevanceCheckSchema = z.object({
80
+ channel: z.string().min(1),
81
+ text: z.string().min(1),
82
+ ts: z.number().int().min(0),
83
+ relevant: z
84
+ .boolean()
85
+ .describe("true if post passed keyword/region pre-filter"),
86
+ });
87
+ // ─────────────────────────────────────────────────────────
88
+ // LLM filter (cheap pre-filter)
89
+ // ─────────────────────────────────────────────────────────
90
+ export const FilterOutputSchema = z.object({
91
+ relevantChannels: z
92
+ .array(z.string())
93
+ .describe("Channels with important intel"),
94
+ });
95
+ // ─────────────────────────────────────────────────────────
96
+ // Insight Types (discriminated union for structured extraction)
97
+ // ─────────────────────────────────────────────────────────
98
+ export const InsightKindSchema = z.enum([
99
+ "rocket_impact",
100
+ "rocket_interception",
101
+ "location",
102
+ "casualty",
103
+ "injury",
104
+ "eta_minutes",
105
+ "cassette_munition",
106
+ ]);
107
+ export const InsightSchema = z.discriminatedUnion("kind", [
108
+ z.object({
109
+ kind: z.literal("rocket_impact"),
110
+ value: z.number().int().min(0),
111
+ }),
112
+ z.object({
113
+ kind: z.literal("rocket_interception"),
114
+ value: z.number().int().min(0),
115
+ }),
116
+ z.object({ kind: z.literal("location"), value: z.string().min(1) }),
117
+ z.object({ kind: z.literal("casualty"), value: z.number().int().min(0) }),
118
+ z.object({ kind: z.literal("injury"), value: z.number().int().min(0) }),
119
+ z.object({ kind: z.literal("eta_minutes"), value: z.number().int().min(0) }),
120
+ z.object({ kind: z.literal("cassette_munition"), value: z.boolean() }),
121
+ ]);
122
+ export const CONFIDENCE_MATRIX = {
123
+ rocket_impact: { needsClarify: 0.4, uncertain: 0.5, verified: 0.6 },
124
+ rocket_interception: { needsClarify: 0.4, uncertain: 0.5, verified: 0.6 },
125
+ location: { needsClarify: 0.4, uncertain: 0.7, verified: 0.8 },
126
+ eta_minutes: { needsClarify: 0.4, uncertain: 0.5, verified: 0.55 },
127
+ cassette_munition: { needsClarify: 0.4, uncertain: 0.5, verified: 0.7 },
128
+ casualty: { needsClarify: 0.85, uncertain: 0.9, verified: 0.95 },
129
+ injury: { needsClarify: 0.85, uncertain: 0.9, verified: 0.95 },
130
+ };
131
+ export function getClarifyNeed(insightKind, confidence) {
132
+ const thresholds = CONFIDENCE_MATRIX[insightKind];
133
+ if (!thresholds)
134
+ return "uncertain";
135
+ if (confidence < thresholds.needsClarify)
136
+ return "needs_clarify";
137
+ if (confidence < thresholds.uncertain)
138
+ return "uncertain";
139
+ return "verified";
140
+ }
141
+ // ─────────────────────────────────────────────────────────
142
+ // LLM extraction (single call per post)
143
+ // ─────────────────────────────────────────────────────────
144
+ export const ExtractionResultSchema = z.object({
145
+ channel: z.string().min(1).describe("Source Telegram channel name"),
146
+ regionRelevance: z
147
+ .number()
148
+ .min(0)
149
+ .max(1)
150
+ .describe("V1: region relevance (0-1) — does post mention our alert region?"),
151
+ sourceTrust: z
152
+ .number()
153
+ .min(0)
154
+ .max(1)
155
+ .describe("V2: source trust (0-1) — factual reporting vs rumors/panic?"),
156
+ countryOrigin: z.string().optional().describe("Extracted data"),
157
+ rocketCount: z.number().int().min(0).optional(),
158
+ isCassette: z.boolean().optional(),
159
+ intercepted: z
160
+ .number()
161
+ .int()
162
+ .min(0)
163
+ .optional()
164
+ .describe("Rocket breakdown: intercepted by Iron Dome"),
165
+ interceptedQual: QualitativeCountSchema.optional().describe("Qualitative descriptor when no exact number is stated (undefined if exact number given)"),
166
+ seaImpact: z
167
+ .number()
168
+ .int()
169
+ .min(0)
170
+ .optional()
171
+ .describe("Rocket breakdown: fell in sea/empty area"),
172
+ seaImpactQual: QualitativeCountSchema.optional(),
173
+ openAreaImpact: z
174
+ .number()
175
+ .int()
176
+ .min(0)
177
+ .optional()
178
+ .describe("Rocket breakdown: hit open/populated ground"),
179
+ openAreaImpactQual: QualitativeCountSchema.optional(),
180
+ hitsConfirmed: z.number().int().min(0).optional(),
181
+ hitLocation: z
182
+ .string()
183
+ .optional()
184
+ .describe("Region where impact occurred (in UI language)"),
185
+ hitType: z.enum(["direct", "shrapnel"]).optional().describe("Type of impact"),
186
+ hitDetail: z
187
+ .string()
188
+ .optional()
189
+ .describe('Impact detail: where/how (e.g. "open area", "building", "sea", "no damage"). In UI language.'),
190
+ casualties: z
191
+ .number()
192
+ .int()
193
+ .min(0)
194
+ .optional()
195
+ .describe("Casualties reported (injured/killed) — primarily resolved phase"),
196
+ injuries: z.number().int().min(0).optional(),
197
+ injuriesCause: z
198
+ .enum(["rocket", "rushing_to_shelter"])
199
+ .optional()
200
+ .describe("Cause of injuries: rocket fragment/direct hit vs panic/rushing to shelter"),
201
+ etaRefinedMinutes: z.number().int().min(0).optional(),
202
+ rocketDetail: z
203
+ .string()
204
+ .optional()
205
+ .describe('Verbatim per-region rocket breakdown (e.g. "2 center, 3 north")'),
206
+ tone: z
207
+ .enum(["calm", "neutral", "alarmist"])
208
+ .describe('V3: tone — "calm"|"neutral"|"alarmist"'),
209
+ confidence: z
210
+ .number()
211
+ .min(0)
212
+ .max(1)
213
+ .describe("Overall extraction confidence (0-1)"),
214
+ timeRelevance: z
215
+ .number()
216
+ .min(0)
217
+ .max(1)
218
+ .describe("Time relevance (0-1) — does this post discuss the CURRENT attack? LLM sets: 0 = clearly about a previous/different event, 1 = current event. Post-filter rejects posts with timeRelevance < 0.5."),
219
+ });
220
+ // ─────────────────────────────────────────────────────────
221
+ // Post-filter (deterministic, zero tokens)
222
+ // ─────────────────────────────────────────────────────────
223
+ export const ValidatedExtractionSchema = ExtractionResultSchema.extend({
224
+ valid: z.boolean().describe("Passed all three validators?"),
225
+ rejectReason: z.string().optional().describe("Reason if rejected"),
226
+ messageUrl: z
227
+ .url()
228
+ .optional()
229
+ .describe("Link to original Telegram post (from ChannelPost.messageUrl)"),
230
+ });
231
+ // ─────────────────────────────────────────────────────────
232
+ // Cited sources & voting
233
+ // ─────────────────────────────────────────────────────────
234
+ export const CitedSourceSchema = z.object({
235
+ index: z.number().int().min(1).describe("1-based citation index"),
236
+ channel: z.string().min(1),
237
+ messageUrl: z.url().optional(),
238
+ });
239
+ export const CountryOriginSchema = z.object({
240
+ name: z.string().min(1),
241
+ citations: z.array(z.number().int().min(1)),
242
+ });
243
+ export const VotedResultSchema = z.object({
244
+ etaRefinedMinutes: z
245
+ .number()
246
+ .int()
247
+ .min(0)
248
+ .optional()
249
+ .describe("ETA in minutes (highest-confidence source)"),
250
+ etaCitations: z
251
+ .array(z.number().int().min(1))
252
+ .default([])
253
+ .describe("Citation indices that provided ETA"),
254
+ countryOrigins: z
255
+ .array(CountryOriginSchema)
256
+ .default([])
257
+ .describe("Unique origin countries with per-country citation indices"),
258
+ rocketCountMin: z
259
+ .number()
260
+ .int()
261
+ .min(0)
262
+ .optional()
263
+ .describe("Rocket count range across sources (min == max → exact)"),
264
+ rocketCountMax: z.number().int().min(0).optional(),
265
+ rocketCitations: z.array(z.number().int().min(1)).default([]),
266
+ rocketConfidence: z
267
+ .number()
268
+ .min(0)
269
+ .max(1)
270
+ .default(0)
271
+ .describe("Avg weighted confidence of sources reporting rocket count (for uncertainty marker)"),
272
+ rocketDetail: z
273
+ .string()
274
+ .optional()
275
+ .describe("Verbatim per-region rocket breakdown if sources split by region"),
276
+ isCassette: z.boolean().optional(),
277
+ isCassetteConfidence: z
278
+ .number()
279
+ .min(0)
280
+ .max(1)
281
+ .default(0)
282
+ .describe("Avg weighted confidence of sources confirming cassette munitions"),
283
+ intercepted: z
284
+ .number()
285
+ .int()
286
+ .min(0)
287
+ .optional()
288
+ .describe("Rocket breakdown (median values; undefined if no sources reported)"),
289
+ interceptedQual: QualitativeCountSchema.optional(),
290
+ interceptedConfidence: z
291
+ .number()
292
+ .min(0)
293
+ .max(1)
294
+ .default(0)
295
+ .describe("Avg weighted confidence of sources reporting intercepted count"),
296
+ seaImpact: z.number().int().min(0).optional(),
297
+ seaImpactQual: QualitativeCountSchema.optional(),
298
+ seaConfidence: z.number().min(0).max(1).default(0),
299
+ openAreaImpact: z.number().int().min(0).optional(),
300
+ openAreaImpactQual: QualitativeCountSchema.optional(),
301
+ openAreaConfidence: z.number().min(0).max(1).default(0),
302
+ hitsConfirmed: z.number().int().min(0).optional(),
303
+ hitsCitations: z
304
+ .array(z.number().int().min(1))
305
+ .default([])
306
+ .describe("Citation indices that provided hits data"),
307
+ hitsConfidence: z
308
+ .number()
309
+ .min(0)
310
+ .max(1)
311
+ .default(0)
312
+ .describe("Avg weighted confidence of sources reporting confirmed hits"),
313
+ hitLocation: z
314
+ .string()
315
+ .optional()
316
+ .describe("Region where impact occurred (in UI language, from highest-confidence source)"),
317
+ hitType: z
318
+ .enum(["direct", "shrapnel"])
319
+ .optional()
320
+ .describe("Type of impact: direct or shrapnel/debris"),
321
+ hitDetail: z
322
+ .string()
323
+ .optional()
324
+ .describe('Impact detail: where/how (e.g. "на открытой местности", "здание", "в море")'),
325
+ noImpacts: z
326
+ .boolean()
327
+ .default(false)
328
+ .describe('Sources explicitly confirm NO impacts ("прилетов нет")'),
329
+ noImpactsCitations: z.array(z.number().int().min(1)).default([]),
330
+ interceptedCitations: z
331
+ .array(z.number().int().min(1))
332
+ .default([])
333
+ .describe("Citation indices for intercepted data"),
334
+ casualties: z.number().int().min(0).optional(),
335
+ casualtiesCitations: z.array(z.number().int().min(1)).default([]),
336
+ casualtiesConfidence: z.number().min(0).max(1).default(0),
337
+ injuries: z.number().int().min(0).optional(),
338
+ injuriesCause: z.enum(["rocket", "rushing_to_shelter"]).optional(),
339
+ injuriesCitations: z.array(z.number().int().min(1)).default([]),
340
+ injuriesConfidence: z.number().min(0).max(1).default(0),
341
+ confidence: z.number().min(0).max(1).default(0),
342
+ sourcesCount: z.number().int().min(0).default(0),
343
+ citedSources: z
344
+ .array(CitedSourceSchema)
345
+ .default([])
346
+ .describe("All valid sources, ordered by citation index"),
347
+ });
348
+ // ─────────────────────────────────────────────────────────
349
+ // Simplified Vote Result (using Insight discriminatedUnion)
350
+ // ─────────────────────────────────────────────────────────
351
+ export const ConsensusInsightSchema = z.object({
352
+ insight: InsightSchema,
353
+ validExtractions: z
354
+ .array(z.lazy(() => ValidatedExtractionSchema))
355
+ .default([]),
356
+ avgConfidence: z.number().min(0).max(1),
357
+ sourcesCount: z.number().int().min(1),
358
+ });
359
+ export const VoteResultSchemaV2 = z.object({
360
+ insights: z.array(ConsensusInsightSchema).default([]),
361
+ needsClarify: z.array(z.lazy(() => ExtractionResultSchema)).default([]),
362
+ timestamp: z.number().int().min(0),
363
+ });
364
+ // Alias for backward compatibility
365
+ export const VoteResultSchema = VotedResultSchema;
366
+ // ─────────────────────────────────────────────────────────
367
+ // Enrichment data (cross-phase persistence)
368
+ // ─────────────────────────────────────────────────────────
369
+ export const InlineCiteSchema = z.object({
370
+ url: z.url(),
371
+ channel: z.string().min(1),
372
+ });
373
+ export const EnrichmentDataSchema = z.object({
374
+ origin: z
375
+ .string()
376
+ .optional()
377
+ .describe("Origin country (from early_warning or red_alert)"),
378
+ originCites: z.array(InlineCiteSchema).default([]),
379
+ etaAbsolute: z
380
+ .string()
381
+ .optional()
382
+ .describe('ETA absolute time string (e.g. "~17:42")'),
383
+ etaCites: z.array(InlineCiteSchema).default([]),
384
+ rocketCount: z
385
+ .string()
386
+ .optional()
387
+ .describe('Rocket count display string (e.g. "~5–7")'),
388
+ rocketCites: z.array(InlineCiteSchema).default([]),
389
+ isCassette: z.boolean().optional().describe("Is cassette munitions"),
390
+ intercepted: z
391
+ .string()
392
+ .optional()
393
+ .describe('Interception data display string (e.g. "3", "большинство")'),
394
+ interceptedCites: z.array(InlineCiteSchema).default([]),
395
+ seaImpact: z.string().optional().describe("Sea impact display string"),
396
+ openAreaImpact: z
397
+ .string()
398
+ .optional()
399
+ .describe("Open area impact display string"),
400
+ hitsConfirmed: z.string().optional().describe("Confirmed hits on structures"),
401
+ hitsCites: z.array(InlineCiteSchema).default([]),
402
+ hitLocation: z
403
+ .string()
404
+ .optional()
405
+ .describe("Region where impact occurred (in UI language)"),
406
+ hitType: z
407
+ .string()
408
+ .optional()
409
+ .describe('Type of impact: "direct" | "shrapnel"'),
410
+ hitDetail: z
411
+ .string()
412
+ .optional()
413
+ .describe('Impact detail: where/how (e.g. "на открытой местности", "здание")'),
414
+ noImpacts: z
415
+ .boolean()
416
+ .default(false)
417
+ .describe('Sources explicitly confirm NO impacts ("прилетов нет")'),
418
+ noImpactsCites: z.array(InlineCiteSchema).default([]),
419
+ rocketDetail: z
420
+ .string()
421
+ .optional()
422
+ .describe("Verbatim per-region rocket breakdown"),
423
+ casualties: z
424
+ .string()
425
+ .optional()
426
+ .describe("Casualties / injuries (from resolved)"),
427
+ casualtiesCites: z.array(InlineCiteSchema).default([]),
428
+ injuries: z.string().optional(),
429
+ injuriesCause: z
430
+ .enum(["rocket", "rushing_to_shelter"])
431
+ .optional()
432
+ .describe("Cause display string — set only if injuries came from rushing to shelter"),
433
+ injuriesCites: z.array(InlineCiteSchema).default([]),
434
+ earlyWarningTime: z
435
+ .string()
436
+ .optional()
437
+ .describe('Time early_warning was received (for red_alert: "Раннее: было в HH:MM")'),
438
+ lastEditHash: z
439
+ .string()
440
+ .optional()
441
+ .describe('Hash of last enriched text to detect "message not modified" before sending'),
442
+ });
443
+ // ─────────────────────────────────────────────────────────
444
+ // Chat & Alert metadata (store)
445
+ // ─────────────────────────────────────────────────────────
446
+ export const TelegramMessageSchema = z.object({
447
+ chatId: z.string().min(1),
448
+ messageId: z.number().int().min(1),
449
+ isCaption: z.boolean(),
450
+ });
451
+ export const AlertMetaSchema = z.object({
452
+ alertId: z.string().min(1),
453
+ messageId: z.number().int().min(1),
454
+ chatId: z.string().min(1),
455
+ isCaption: z.boolean(),
456
+ alertTs: z.number().int().min(0),
457
+ alertType: AlertTypeSchema,
458
+ alertAreas: z.array(z.string().min(1)),
459
+ currentText: z.string().min(1),
460
+ });
461
+ export const ChannelPostSchema = z.object({
462
+ channel: z.string().min(1),
463
+ text: z.string().min(1),
464
+ ts: z.number().int().min(0),
465
+ messageUrl: z.url().optional(),
466
+ });
467
+ export const ActiveSessionSchema = z.object({
468
+ sessionId: z.string().min(1),
469
+ sessionStartTs: z.number().int().min(0),
470
+ phase: AlertTypeSchema,
471
+ phaseStartTs: z.number().int().min(0),
472
+ latestAlertId: z.string().min(1),
473
+ latestMessageId: z.number().int().min(1),
474
+ latestAlertTs: z.number().int().min(0),
475
+ chatId: z.string().min(1),
476
+ isCaption: z.boolean(),
477
+ currentText: z.string().min(1),
478
+ baseText: z.string().min(1),
479
+ alertAreas: z.array(z.string().min(1)),
480
+ telegramMessages: z.array(TelegramMessageSchema).optional(),
481
+ });
482
+ // ─────────────────────────────────────────────────────────
483
+ // Extract & Clarify contexts
484
+ // ─────────────────────────────────────────────────────────
485
+ export const ExtractContextSchema = z.object({
486
+ alertTs: z.number().int().min(0),
487
+ alertType: AlertTypeSchema,
488
+ alertAreas: z.array(z.string().min(1)),
489
+ alertId: z.string().min(1),
490
+ language: z.string().min(1),
491
+ existingEnrichment: EnrichmentDataSchema.optional(),
492
+ });
493
+ export const ClarifyInputSchema = z.object({
494
+ alertId: z.string().min(1),
495
+ alertAreas: z.array(z.string().min(1)),
496
+ alertType: z.string().min(1),
497
+ alertTs: z.number().int().min(0),
498
+ messageId: z.number().int().min(1),
499
+ currentText: z.string().min(1),
500
+ extractions: z.array(ValidatedExtractionSchema),
501
+ votedResult: VotedResultSchema,
502
+ });
503
+ export const ClarifyOutputSchema = z.object({
504
+ newPosts: z.array(ChannelPostSchema),
505
+ newExtractions: z.array(ValidatedExtractionSchema),
506
+ toolCallCount: z.number().int().min(0),
507
+ clarified: z.boolean(),
508
+ });
509
+ // ─────────────────────────────────────────────────────────
510
+ // Graph & enrichment input
511
+ // ─────────────────────────────────────────────────────────
512
+ export const RunEnrichmentInputSchema = z.object({
513
+ alertId: z.string().min(1),
514
+ alertTs: z.number().int().min(0),
515
+ alertType: AlertTypeSchema,
516
+ alertAreas: z.array(z.string().min(1)),
517
+ chatId: z.string().min(1),
518
+ messageId: z.number().int().min(1),
519
+ isCaption: z.boolean(),
520
+ currentText: z.string().min(1),
521
+ telegramMessages: z.array(TelegramMessageSchema).default([]),
522
+ monitoringLabel: z.string().optional(),
523
+ });
524
+ export const GifModeSchema = z.enum(["funny_cats", "none"]);
525
+ // ─────────────────────────────────────────────────────────
526
+ // Helper functions
527
+ // ─────────────────────────────────────────────────────────
528
+ /** Create empty enrichment data */
529
+ export function createEmptyEnrichmentData() {
530
+ return EnrichmentDataSchema.parse({
531
+ originCites: [],
532
+ etaCites: [],
533
+ rocketCites: [],
534
+ interceptedCites: [],
535
+ hitsCites: [],
536
+ noImpacts: false,
537
+ noImpactsCites: [],
538
+ casualtiesCites: [],
539
+ injuriesCites: [],
540
+ });
541
+ }
542
+ export const emptyEnrichmentData = createEmptyEnrichmentData();
543
+ /** Validate and parse JSON string */
544
+ export function parseJSON(schema, json) {
545
+ const parsed = JSON.parse(json);
546
+ return schema.parse(parsed);
547
+ }
548
+ /** Safely validate data, returning error string instead of throwing */
549
+ export function validateSafe(schema, data) {
550
+ const result = schema.safeParse(data);
551
+ if (result.success) {
552
+ return { ok: true, data: result.data };
553
+ }
554
+ return { ok: false, error: result.error.message };
555
+ }
556
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Session-based alert state store — Redis operations.
3
+ *
4
+ * A "session" spans the lifecycle of one attack event:
5
+ * early_warning → (optional red_alert) → resolved → +10 min tail
6
+ *
7
+ * Keys:
8
+ * session:active — ActiveSession JSON TTL 45min
9
+ * session:posts — LPUSH list of ChannelPost TTL 45min
10
+ * session:ext_cache — HASH {post_hash → extraction JSON} TTL 45min
11
+ * alert:{alertId}:meta — AlertMeta JSON TTL 20min
12
+ *
13
+ * Only the LATEST alert's Telegram message gets enrichment edits.
14
+ * Posts accumulate across the entire session (shared context).
15
+ */
16
+ import type { ActiveSession, AlertMeta, AlertType, ChannelPost, EnrichmentData, TelegramMessage } from "./schemas.js";
17
+ export type { ActiveSession, AlertMeta, ChannelPost, TelegramMessage };
18
+ export declare const SCHEMA_VERSION = "2.0.0";
19
+ export declare function ensureSchemaVersion(): Promise<void>;
20
+ /** Max duration (ms) for each phase before auto-expire */
21
+ export declare const PHASE_TIMEOUT_MS: Record<AlertType, number>;
22
+ /** Enrichment interval (ms) per phase */
23
+ export declare const PHASE_ENRICH_DELAY_MS: Record<AlertType, number>;
24
+ /** Initial enrichment delay — first job after alert (channels need time to post) */
25
+ export declare const PHASE_INITIAL_DELAY_MS: Record<AlertType, number>;
26
+ export declare function saveAlertMeta(meta: AlertMeta): Promise<void>;
27
+ export declare function getAlertMeta(alertId: string): Promise<AlertMeta | undefined>;
28
+ export declare function pushSessionPost(post: ChannelPost): Promise<void>;
29
+ export declare function getSessionPosts(): Promise<ChannelPost[]>;
30
+ export declare function setActiveSession(session: ActiveSession): Promise<void>;
31
+ export declare function getActiveSession(): Promise<ActiveSession | undefined>;
32
+ export declare function clearSession(): Promise<void>;
33
+ export declare function isPhaseExpired(session: ActiveSession): boolean;
34
+ export declare function getActiveAlert(): Promise<{
35
+ alertId: string;
36
+ alertTs: number;
37
+ alertType: AlertType;
38
+ } | undefined>;
39
+ export declare function pushChannelPost(_alertId: string, post: ChannelPost): Promise<void>;
40
+ export declare function getChannelPosts(_alertId: string): Promise<ChannelPost[]>;
41
+ export declare function saveEnrichmentData(data: EnrichmentData): Promise<void>;
42
+ export declare function getEnrichmentData(): Promise<EnrichmentData>;
43
+ export declare function getLastUpdateTs(): Promise<number>;
44
+ export declare function setLastUpdateTs(ts: number): Promise<void>;
45
+ /**
46
+ * Get cached extraction results for a batch of post hashes.
47
+ * Returns a map: postHash → serialized ValidatedExtraction JSON.
48
+ */
49
+ export declare function getCachedExtractions(postHashes: string[]): Promise<Map<string, string>>;
50
+ /**
51
+ * Save new extraction results to cache.
52
+ * @param entries - Record of postHash → serialized ValidatedExtraction JSON
53
+ */
54
+ export declare function saveCachedExtractions(entries: Record<string, string>): Promise<void>;
55
+ //# sourceMappingURL=store.d.ts.map