/**
 * Polymorphic notification feed. Phase 1 only ever writes `source_type='comment'`
 * (the messaging-era 'message' source died with the messaging surface in Phase
 * 0). The polymorphic shape stays so future surfaces can ride the same wire.
 */
export interface Notification {
    id: number;
    userId: number;
    sourceType: string;
    sourceId: string;
    mentionerUserId: number;
    mentionerDisplayName: string;
    preview: string;
    read: 0 | 1;
    createdAt: string;
}
export interface InsertNotificationInput {
    userId: number;
    sourceType: string;
    sourceId: string;
    mentionerUserId: number;
    mentionerDisplayName: string;
    preview: string;
}
export declare class NotificationService {
    private db;
    constructor(workspacePath: string);
    /** Insert a notification and return the new id. */
    insert(input: InsertNotificationInput): number;
    list(userId: number, opts?: {
        limit?: number;
        unreadOnly?: boolean;
    }): Notification[];
    unreadCount(userId: number): number;
    markRead(notificationId: number, userId: number): boolean;
    markAllRead(userId: number): number;
    /** Remove all notifications referencing a given source (used when a comment is hard-deleted). */
    deleteBySource(sourceType: string, sourceId: string): number;
    close(): void;
    private toNotification;
}
