import { MembershipOp, Snapshot, WrappedEncryptedData, MemberPayload_Nft, MemberPayload_Membership } from '@towns-protocol/proto';
import TypedEmitter from 'typed-emitter';
import { StreamEncryptionEvents, StreamStateEvents } from './streamEvents';
import { ConfirmedTimelineEvent, ParsedEvent, RemoteTimelineEvent, StreamTimelineEvent } from './types';
import { StreamStateView_Members_Solicitations } from './streamStateView_Members_Solicitations';
import { DecryptedContent } from './encryptedContentTypes';
import { StreamStateView_MemberMetadata } from './streamStateView_MemberMetadata';
import { KeySolicitationContent } from './decryptionExtensions';
import { StreamStateView_AbstractContent } from './streamStateView_AbstractContent';
import { SpaceReviewEventObject } from '@towns-protocol/web3';
import { StreamMemberIdsView } from './views/streams/streamMemberIds';
export type StreamMember = {
    userId: string;
    userAddress: Uint8Array;
    miniblockNum?: bigint;
    eventNum?: bigint;
    solicitations: KeySolicitationContent[];
    encryptedUsername?: WrappedEncryptedData;
    encryptedDisplayName?: WrappedEncryptedData;
    ensAddress?: Uint8Array;
    nft?: MemberPayload_Nft;
    tipsSent?: {
        [key: string]: bigint;
    };
    tipsReceived?: {
        [key: string]: bigint;
    };
    tipsSentCount?: {
        [key: string]: bigint;
    };
    tipsReceivedCount?: {
        [key: string]: bigint;
    };
};
export interface Pin {
    creatorUserId: string;
    event: StreamTimelineEvent;
}
export interface MemberTokenTransfer {
    address: Uint8Array;
    amount: bigint;
    isBuy: boolean;
    chainId: string;
    userId: string;
    sender: Uint8Array;
    createdAtEpochMs: bigint;
    messageId: string;
}
export interface MemberSpaceReview {
    review: SpaceReviewEventObject;
    createdAtEpochMs: bigint;
    eventHashStr: string;
}
export declare class StreamStateView_Members extends StreamStateView_AbstractContent {
    private streamMemberIdsView;
    readonly streamId: string;
    readonly joined: Map<string, StreamMember>;
    readonly joinedUsers: Set<string>;
    readonly invitedUsers: Set<string>;
    readonly leftUsers: Set<string>;
    readonly pendingJoinedUsers: Set<string>;
    readonly pendingInvitedUsers: Set<string>;
    readonly pendingLeftUsers: Set<string>;
    readonly pendingMembershipEvents: Map<string, MemberPayload_Membership>;
    readonly solicitHelper: StreamStateView_Members_Solicitations;
    readonly memberMetadata: StreamStateView_MemberMetadata;
    readonly pins: Pin[];
    tips: {
        [key: string]: bigint;
    };
    tipsCount: {
        [key: string]: bigint;
    };
    encryptionAlgorithm?: string;
    spaceReviews: MemberSpaceReview[];
    tokenTransfers: MemberTokenTransfer[];
    get streamMemberIds(): string[];
    constructor(streamId: string, streamMemberIdsView: StreamMemberIdsView);
    applySnapshot(event: ParsedEvent, snapshot: Snapshot, cleartexts: Record<string, Uint8Array | string> | undefined, encryptionEmitter: TypedEmitter<StreamEncryptionEvents> | undefined): void;
    prependEvent(event: RemoteTimelineEvent, _cleartext: Uint8Array | string | undefined, _encryptionEmitter: TypedEmitter<StreamEncryptionEvents> | undefined, stateEmitter: TypedEmitter<StreamStateEvents> | undefined): void;
    /**
     * Places event in a pending queue, to be applied when the event is confirmed in a miniblock header
     */
    appendEvent(event: RemoteTimelineEvent, cleartext: Uint8Array | string | undefined, encryptionEmitter: TypedEmitter<StreamEncryptionEvents> | undefined, stateEmitter: TypedEmitter<StreamStateEvents> | undefined): void;
    onConfirmedEvent(event: ConfirmedTimelineEvent, stateEmitter: TypedEmitter<StreamStateEvents> | undefined, _: TypedEmitter<StreamEncryptionEvents> | undefined): void;
    onDecryptedContent(eventId: string, content: DecryptedContent, stateEmitter: TypedEmitter<StreamStateEvents> | undefined): void;
    isMemberJoined(userId: string): boolean;
    isMember(membership: MembershipOp, userId: string): boolean;
    participants(): Set<string>;
    joinedParticipants(): Set<string>;
    joinedOrPendingJoinedParticipants(): Set<string>;
    joinedOrInvitedParticipants(): Set<string>;
    info(userId: string): MembershipOp;
    private addTokenTransfer;
    private addPin;
    private removePin;
    applyMembershipEvent(userId: string, op: MembershipOp, type: 'pending' | 'confirmed', stateEmitter: TypedEmitter<StreamStateEvents> | undefined): void;
    private emitMembershipChange;
}
//# sourceMappingURL=streamStateView_Members.d.ts.map