import { PersistedObservable } from '../../../observable/persistedObservable';
import type { Store } from '../../../store/store';
import type { RiverConnection } from '../../river-connection/riverConnection';
import { MembershipOp } from '@river-build/proto';
export type MemberModel = {
    /**
     * The store id of the member.
     * @internal
     */
    id: string;
    /** The id of the user. */
    userId: string;
    /** The id of the stream where the data belongs to. */
    streamId: string;
    /** Whether the SyncAgent has loaded this data. */
    initialized: boolean;
    /** Username of the member. */
    username: string;
    /** Whether the username has been confirmed by the River node. */
    isUsernameConfirmed: boolean;
    /** Whether the username is encrypted. */
    isUsernameEncrypted: boolean;
    /** Display name of the member. */
    displayName: string;
    /** Whether the display name is encrypted. */
    isDisplayNameEncrypted?: boolean;
    /**
     * ENS address of the member.
     * Should not be trusted, as it can be spoofed.
     * You should be validating it.
     */
    ensAddress?: string;
    /**
     * {@link NftModel} of the member.
     * Should not be trusted, as it can be spoofed.
     * You should be validating it.
     */
    nft?: NftModel;
    /** {@link MembershipOp} of the member. */
    membership?: MembershipOp;
};
export type NftModel = {
    /** The contract address of the NFT. */
    contractAddress: string;
    /** The token id of the NFT. */
    tokenId: string;
    /** The chain id of the NFT. */
    chainId: number;
};
export declare class Member extends PersistedObservable<MemberModel> {
    private userId;
    protected riverConnection: RiverConnection;
    constructor(userId: string, streamId: string, riverConnection: RiverConnection, store: Store);
    onStreamInitialized(streamId: string): void;
    onStreamUsernameUpdated(streamId: string, userId: string): void;
    onStreamNftUpdated: (streamId: string, userId: string) => void;
    onStreamEnsAddressUpdated: (streamId: string, userId: string) => void;
    onStreamDisplayNameUpdated: (streamId: string, userId: string) => void;
    onStreamMembershipUpdated: (streamId: string, userId: string, membership: MembershipOp) => void;
    get username(): string;
    get displayName(): string;
    get ensAddress(): string | undefined;
    get nft(): NftModel | undefined;
    get membership(): MembershipOp | undefined;
}
//# sourceMappingURL=member.d.ts.map