import type { ArkmeSourceSendResult, ArkmeTimelineItem } from '../types.js'; import type { ArkmeUnifiedTimelineWindow } from '../unified-chat-timeline.js'; import { ConfirmedSendRetentionOwner } from './confirmed-send-retention.js'; interface SendFailure { state: 'failed' | 'uncertain'; message: string; } export declare function conversationMessageRenderKey(item: ArkmeTimelineItem): string; export declare function conversationMessageSendFailure(item: ArkmeTimelineItem): SendFailure | undefined; export declare function conversationMessageDefaultUnread(item: ArkmeTimelineItem): boolean; export declare function mergeConversationMessages(current: ArkmeTimelineItem[], incoming: ArkmeTimelineItem[]): ArkmeTimelineItem[]; export declare function applyConversationSendResult(current: ArkmeTimelineItem[], optimisticItemUid: string, result: ArkmeSourceSendResult, fallback?: ArkmeTimelineItem): ArkmeTimelineItem[]; /** One account-scoped merge owner for local sends, receipts, live deltas and read snapshots. */ export declare class ArkmeConversationMessageMergeOwner extends ConfirmedSendRetentionOwner { private readonly capacity; private readonly submissions; constructor(capacity?: number); assertCanBegin(now?: number): void; begin(sourceKey: string, item: ArkmeTimelineItem, relationUid?: string): ArkmeTimelineItem; /** ACK can arrive after a read or live delta. Always upsert and keep newer record content. */ confirm(sourceKey: string, originalUid: string, result: ArkmeSourceSendResult, fallback: ArkmeTimelineItem, current: ArkmeTimelineItem[]): ArkmeTimelineItem[]; /** Transfer to the durable file owner, or cancel a failed/cancelled request. */ releasePending(sourceKey: string, originalUid: string): void; fail(sourceKey: string, originalUid: string, message: string, uncertain: boolean, current: ArkmeTimelineItem[]): ArkmeTimelineItem[]; forget(sourceKey: string, ids: readonly string[]): void; removeOccurrences(sourceKey: string, keys: ReadonlySet): void; clear(): void; merge(sourceKey: string, incoming: ArkmeTimelineItem[], now?: number, previous?: readonly ArkmeTimelineItem[], window?: ArkmeUnifiedTimelineWindow): ArkmeTimelineItem[]; private prune; } export {}; //# sourceMappingURL=conversation-message-merge.d.ts.map