import { Room, MatrixClient } from "matrix-js-sdk/src/matrix";
import { Membership } from "matrix-js-sdk/src/types";
/**
 * Approximation of a membership status for a given room.
 */
export declare enum EffectiveMembership {
    /**
     * The user is effectively joined to the room. For example, actually joined
     * or knocking on the room (when that becomes possible).
     */
    Join = "JOIN",
    /**
     * The user is effectively invited to the room. Currently this is a direct map
     * to the invite membership as no other membership states are effectively
     * invites.
     */
    Invite = "INVITE",
    /**
     * The user is effectively no longer in the room. For example, kicked,
     * banned, or voluntarily left.
     */
    Leave = "LEAVE"
}
export type MembershipSplit = {
    [state in EffectiveMembership]: Room[];
};
export declare function splitRoomsByMembership(rooms: Room[]): MembershipSplit;
export declare function getEffectiveMembership(membership: Membership): EffectiveMembership;
export declare function isKnockDenied(room: Room): boolean | undefined;
export declare function getEffectiveMembershipTag(room: Room, membership?: string): EffectiveMembership;
export declare function isJoinedOrNearlyJoined(membership: Membership): boolean;
/**
 * Try to ensure the user is in the room (invited or joined) before continuing
 */
export declare function waitForMember(client: MatrixClient, roomId: string, userId: string, opts?: {
    timeout: number;
}): Promise<boolean>;
