// M365 Change Tracker — TypeScript types for /api/v1 (schemaVersion 2) export type Kind = "feature" | "security" | "defender" | "entra" | "api-change"; export interface Deadline { type: string; date: string | null; precision: string; source: string; action: string; obligation: boolean; label: string; } export interface Classification { type: "retiring" | "breaking" | "deprecation"; confidence: number; evidence: { text: string; rule: string }; } export interface Item { id: string; source: "roadmap" | "msrc" | "defender-xdr" | "entra" | "graph"; kind: Kind; title: string; description: string; link: string; products: string[]; categories: string[]; status: string; impact: "high" | "medium" | "low"; impactReason?: string; urgency?: "Immediate" | "Soon" | "Monitor"; adminAction?: string; applies?: "cloud" | "on-prem" | "hybrid"; deadline?: Deadline | null; classifications?: Classification[]; cve?: string; severity?: string; cvss?: number; epss?: number; exploited?: boolean; kev?: boolean; kevDueDate?: string; gaTarget?: string; targetDate?: string | null; cloudInstances?: string[]; apiSummary?: { counts: Record; names: Record } | null; volatility?: { edits: number; slips: number; statusCh: number } | null; created?: string | null; modified?: string | null; } export interface Event extends Item { eventId: string; type: "new" | "updated" | "status-changed" | "removed"; detectedAt: string; fromStatus?: string; toStatus?: string; transitions?: { kind: string; label: string }[]; diff?: { title?: {t:string;v:string}[]; description?: {t:string;v:string}[] }; diffSummary?: string; cosmetic?: boolean; editIntent?: string; }