export type EventPayload = Record<string, any>;
export type RecipientType = 'OWNER' | 'APPROVER' | 'CHECKPOINT';
export declare function emitToOwner(ownerId: string, event: string, payload: EventPayload): void;
export declare function emitToApprover(approverId: string, event: string, payload: EventPayload): void;
export declare function emitToCheckpoint(checkpointId: string, event: string, payload: EventPayload): void;
interface NotifyOpts {
    recipientType: RecipientType;
    recipientId: string;
    type: string;
    title: string;
    body?: string;
    link?: string;
}
/**
 * Marks any open `visitor.awaiting` notifications that reference a given
 * short-id as read across all recipients, then emits a `notification.read`
 * event so connected bells can drop the unread badge in real-time.
 * Called whenever a visitor's awaiting state is resolved (approve / reject
 * / cancel / expire) so the same "Approve {name}" entry doesn't keep
 * tempting the user to act on a settled decision.
 */
export declare function resolveAwaitingNotifications(shortId: string): Promise<void>;
/**
 * Deletes every visitor.* notification whose body references one of the given
 * shortIds. Call this from any code path that deletes Visitor rows so the
 * bell doesn't keep referencing rows that no longer exist. Also emits
 * `notification.deleted` per recipient room so live bells drop the entry
 * without a refresh. Best-effort — never throws.
 */
export declare function deleteVisitorNotifications(shortIds: string[]): Promise<{
    count: number;
}>;
/**
 * Persists a Notification row + emits `notification.new` to the recipient's room.
 * Use alongside emitToX when the event should also surface in the bell/inbox.
 *
 * Push notifications: when `opts.push` is provided (and the recipient owns any
 * registered DeviceTokens), fire the same content to the mobile app via FCM.
 * `push.data` (e.g. `{ visitorId: '...' }`) lets the mobile app deep-link.
 */
export declare function recordNotification(opts: NotifyOpts & {
    push?: {
        data?: Record<string, string>;
    };
}): Promise<{
    link: string | null;
    id: string;
    createdAt: Date;
    type: string;
    body: string | null;
    recipientType: import(".prisma/client").$Enums.NotificationRecipientType;
    recipientId: string;
    title: string;
    readAt: Date | null;
}>;
export {};
//# sourceMappingURL=events.d.ts.map