import { type MessageUnderlineSnapshot, type MessageUnderlineCapabilities, type MessageUnderlineChange } from '../message-annotations.js'; import { type MessageSelectionTarget } from './ArkmeMessageTextSelection.js'; export interface MessageMarkTransport { subscribe?(invalidate: () => void): () => void; capabilities(sourceRef: string, signal: AbortSignal): Promise; list(sourceRef: string, refs: string[], signal: AbortSignal): Promise<{ actionRef: string; snapshot: MessageUnderlineSnapshot; }[]>; change(sourceRef: string, ref: string, change: MessageUnderlineChange, signal: AbortSignal, target?: MessageSelectionTarget): Promise; } export declare function underlineTargetKey(target: MessageSelectionTarget): string; export declare class MessageUnderlineSession { sourceRef: string; readonly viewerId: number; private emit; readonly storage: 'cloud' | 'local'; private transport?; readonly controller: AbortController; readonly snapshots: Map; readonly pending: Set; private accessEpoch; private epochs; private failures; private loading; private queuedTargets; capability: MessageUnderlineCapabilities | undefined; notice: string; retry: (() => Promise) | undefined; constructor(sourceRef: string, viewerId: number, emit: () => void, storage?: 'cloud' | 'local', transport?: MessageMarkTransport | undefined); invalidate(): void; subscribe(invalidate: () => void): (() => void) | undefined; dispose(): void; private publish; report(error: unknown): void; prepare(): Promise; read(targets: MessageSelectionTarget[]): Promise; private readTargets; change(target: MessageSelectionTarget, change: MessageUnderlineChange): Promise; } //# sourceMappingURL=message-underline-session.d.ts.map