import { ChannelMessage, SnapshotCaseType, SyncCookie, Snapshot } from '@river-build/proto';
import TypedEmitter from 'typed-emitter';
import { LocalEventStatus, LocalTimelineEvent, ParsedEvent, ParsedMiniblock, StreamTimelineEvent } from './types';
import { StreamStateView_Space } from './streamStateView_Space';
import { StreamStateView_Channel } from './streamStateView_Channel';
import { StreamStateView_User } from './streamStateView_User';
import { StreamStateView_UserSettings } from './streamStateView_UserSettings';
import { StreamStateView_UserMetadata } from './streamStateView_UserMetadata';
import { StreamStateView_Members } from './streamStateView_Members';
import { StreamStateView_Media } from './streamStateView_Media';
import { StreamStateView_GDMChannel } from './streamStateView_GDMChannel';
import { StreamStateView_AbstractContent } from './streamStateView_AbstractContent';
import { StreamStateView_DMChannel } from './streamStateView_DMChannel';
import { StreamStateView_UserInbox } from './streamStateView_UserInbox';
import { DecryptedContent } from './encryptedContentTypes';
import { StreamStateView_MemberMetadata } from './streamStateView_MemberMetadata';
import { StreamStateView_ChannelMetadata } from './streamStateView_ChannelMetadata';
import { StreamEvents, StreamEncryptionEvents, StreamStateEvents } from './streamEvents';
import { DecryptionSessionError } from '@river-build/encryption';
export interface IStreamStateView {
    readonly streamId: string;
    readonly userId: string;
    readonly contentKind: SnapshotCaseType;
    readonly timeline: StreamTimelineEvent[];
    readonly events: Map<string, StreamTimelineEvent>;
    isInitialized: boolean;
    prevMiniblockHash?: Uint8Array;
    lastEventNum: bigint;
    prevSnapshotMiniblockNum: bigint;
    miniblockInfo?: {
        max: bigint;
        min: bigint;
        terminusReached: boolean;
    };
    syncCookie?: SyncCookie;
    saveSnapshots?: boolean;
    membershipContent: StreamStateView_Members;
    get spaceContent(): StreamStateView_Space;
    get channelContent(): StreamStateView_Channel;
    get dmChannelContent(): StreamStateView_DMChannel;
    get gdmChannelContent(): StreamStateView_GDMChannel;
    get userContent(): StreamStateView_User;
    get userSettingsContent(): StreamStateView_UserSettings;
    get userMetadataContent(): StreamStateView_UserMetadata;
    get userInboxContent(): StreamStateView_UserInbox;
    get mediaContent(): StreamStateView_Media;
    snapshot(): Snapshot | undefined;
    getMembers(): StreamStateView_Members;
    getMemberMetadata(): StreamStateView_MemberMetadata;
    getChannelMetadata(): StreamStateView_ChannelMetadata | undefined;
    getContent(): StreamStateView_AbstractContent;
    userIsEntitledToKeyExchange(userId: string): boolean;
    getUsersEntitledToKeyExchange(): Set<string>;
}
export declare class StreamStateView implements IStreamStateView {
    readonly streamId: string;
    readonly userId: string;
    readonly contentKind: SnapshotCaseType;
    readonly timeline: StreamTimelineEvent[];
    readonly events: Map<string, StreamTimelineEvent>;
    isInitialized: boolean;
    prevMiniblockHash?: Uint8Array;
    lastEventNum: bigint;
    prevSnapshotMiniblockNum: bigint;
    miniblockInfo?: {
        max: bigint;
        min: bigint;
        terminusReached: boolean;
    };
    syncCookie?: SyncCookie;
    saveSnapshots?: boolean;
    private _snapshot?;
    snapshot(): Snapshot | undefined;
    membershipContent: StreamStateView_Members;
    private readonly _spaceContent?;
    get spaceContent(): StreamStateView_Space;
    private readonly _channelContent?;
    get channelContent(): StreamStateView_Channel;
    private readonly _dmChannelContent?;
    get dmChannelContent(): StreamStateView_DMChannel;
    private readonly _gdmChannelContent?;
    get gdmChannelContent(): StreamStateView_GDMChannel;
    private readonly _userContent?;
    get userContent(): StreamStateView_User;
    private readonly _userSettingsContent?;
    get userSettingsContent(): StreamStateView_UserSettings;
    private readonly _userMetadataContent?;
    get userMetadataContent(): StreamStateView_UserMetadata;
    private readonly _userInboxContent?;
    get userInboxContent(): StreamStateView_UserInbox;
    private readonly _mediaContent?;
    get mediaContent(): StreamStateView_Media;
    constructor(userId: string, streamId: string);
    private applySnapshot;
    private appendStreamAndCookie;
    private processAppendedEvent;
    private processMiniblockHeader;
    private processPrependedEvent;
    private updateMiniblockInfo;
    updateDecryptedContent(eventId: string, content: DecryptedContent, emitter: TypedEmitter<StreamStateEvents>): void;
    updateDecryptedContentError(eventId: string, content: DecryptionSessionError, emitter: TypedEmitter<StreamStateEvents>): void;
    initialize(nextSyncCookie: SyncCookie, minipoolEvents: ParsedEvent[], snapshot: Snapshot, miniblocks: ParsedMiniblock[], prependedMiniblocks: ParsedMiniblock[], prevSnapshotMiniblockNum: bigint, cleartexts: Record<string, Uint8Array | string> | undefined, localEvents: LocalTimelineEvent[], emitter: TypedEmitter<StreamEvents> | undefined): void;
    appendEvents(events: ParsedEvent[], nextSyncCookie: SyncCookie, cleartexts: Record<string, Uint8Array | string> | undefined, emitter: TypedEmitter<StreamEvents>): void;
    prependEvents(miniblocks: ParsedMiniblock[], cleartexts: Record<string, Uint8Array | string> | undefined, terminus: boolean, encryptionEmitter: TypedEmitter<StreamEncryptionEvents> | undefined, stateEmitter: TypedEmitter<StreamStateEvents> | undefined): void;
    appendLocalEvent(channelMessage: ChannelMessage, status: LocalEventStatus, emitter: TypedEmitter<StreamEvents> | undefined): string;
    updateLocalEvent(localId: string, parsedEventHash: string, status: LocalEventStatus, emitter: TypedEmitter<StreamEvents>): void;
    getMembers(): StreamStateView_Members;
    getMemberMetadata(): StreamStateView_MemberMetadata;
    getChannelMetadata(): StreamStateView_ChannelMetadata | undefined;
    getContent(): StreamStateView_AbstractContent;
    /**
     * Streams behave slightly differently.
     * Regular channels: the user needs to be an active member. SO_JOIN
     * DMs: always open for key exchange for any of the two participants
     */
    userIsEntitledToKeyExchange(userId: string): boolean;
    getUsersEntitledToKeyExchange(): Set<string>;
}
//# sourceMappingURL=streamStateView.d.ts.map