import type { ArkmeConversationMemberJoinEvent, ArkmeConversationMemberJoinPerson, ArkmeInterwovenMention, ArkmeMemberEvent, ArkmeTimelineItem } from './types.js'; export declare const CHAT_TIMELINE_SOURCES: readonly ["messages", "interwoven", "group_metadata", "member_left", "ai_polish", "world_public", "wechat_import", "offline_context"]; export type ArkmeTimelineSource = typeof CHAT_TIMELINE_SOURCES[number]; export type ArkmeTimelineMode = 'initial' | 'older' | 'newer' | 'around' | 'refresh'; export interface ArkmeUnifiedTimelineQuery { cacheOnly?: boolean; /** Read a committed window containing this opaque event/row identity; cacheOnly only. */ anchorId?: string; /** Host completes all refresh pages before committing. Bounded by 2000 events / 4 MiB. */ reconcile?: boolean; /** Optional tail catch-up in the same reconcile transaction; never used for history reading. */ newerCursor?: string; mode?: ArkmeTimelineMode; cursor?: string; windowTokens?: string[]; limit?: number; messageRef?: string; systemRef?: string; contextRef?: string; itemUid?: string; recordOwnerUserId?: number | string; } export interface ArkmeTimelineSourceStatus { source: ArkmeTimelineSource; status: 'ready' | 'not_applicable' | 'gap'; itemCount: number; } export interface ArkmeTimelineEventOrder { /** Stable account-bound event identity, distinct from a Record identity. */ eventId: string; source: ArkmeTimelineSource; occurredAtMillis: number; orderTie: string; windowToken?: string; contentStatus: 'available' | 'unavailable'; } export type ArkmeTimelineMemberJoinEvent = ArkmeConversationMemberJoinEvent | { eventId: string; action: 'join'; occurredAtMillis: number; invitees: ArkmeConversationMemberJoinPerson[]; }; export type ArkmeUnifiedTimelineEvent = ArkmeTimelineEventOrder & ({ kind: 'message'; item: ArkmeTimelineItem; } | { kind: 'moment'; item: ArkmeInterwovenMention; } | { kind: 'member-event'; item: ArkmeMemberEvent; } | { kind: 'member-join'; item: ArkmeTimelineMemberJoinEvent; } | { kind: 'notice'; text: string; } | { kind: 'external'; title: string; text: string; } | { kind: 'world-public'; recordRef: string; authorName: string; } | { kind: 'offline-context'; entryRef: string; revision: string; title: string; summary: string; }); export interface ArkmeUnifiedTimelineWindow { protocolVersion: 2; events: ArkmeUnifiedTimelineEvent[]; sources: ArkmeTimelineSourceStatus[]; complete: boolean; windowTokens: string[]; olderCursor?: string | undefined; newerCursor?: string | undefined; nextCursor?: string; olderHasMore: boolean; newerHasMore: boolean; hasMore: boolean; } /** Reverse of the Chat owner's descending total order; never use locale collation. */ export declare function compareUnifiedTimelineEvents(a: ArkmeTimelineEventOrder, b: ArkmeTimelineEventOrder): number; /** Merge only confirmed pages. A refresh's input is the entire completed covered window. */ export declare function mergeUnifiedTimelineWindow(previous: ArkmeUnifiedTimelineWindow | undefined, incoming: ArkmeUnifiedTimelineWindow, mode: ArkmeTimelineMode): ArkmeUnifiedTimelineWindow; //# sourceMappingURL=unified-chat-timeline.d.ts.map