import { type Event, Events } from '@skyway-sdk/common';
import type model from '@skyway-sdk/model';
import type { Channel, SkyWayChannelImpl } from '../channel';
import type { SkyWayContext } from '../context';
import type { LocalStream, RemoteAudioStream, RemoteDataStream, RemoteVideoStream } from '../media/stream';
import type { Publication } from '../publication';
import type { Subscription } from '../subscription';
export interface Member {
    id: string;
    name?: string;
    channel: Channel;
    type: MemberType;
    subtype: string;
    side: MemberSide;
    metadata?: string;
    state: MemberState;
    /**@description [japanese] Channelから離脱したときに発火するイベント */
    onLeft: Event<void>;
    /**@description [japanese] Metadataが変化したときに発火するイベント */
    onMetadataUpdated: Event<string>;
    /**@description [japanese] このMemberのPublicationのリスト */
    publications: Publication<LocalStream>[];
    /**@description [japanese] このMemberのSubscriptionのリスト */
    subscriptions: Subscription<RemoteVideoStream | RemoteAudioStream | RemoteDataStream>[];
    /**
     * @description [japanese] metadataを更新する
     */
    updateMetadata: (metadata: string) => Promise<void>;
    /**
     * @description [japanese] memberをChannelから退去させる
     */
    leave: () => Promise<void>;
}
/**@internal */
export declare abstract class MemberImpl implements Member {
    readonly channel: SkyWayChannelImpl;
    readonly id: string;
    readonly name?: string;
    readonly type: MemberType;
    readonly context: SkyWayContext;
    abstract readonly side: MemberSide;
    readonly subtype: string;
    private _metadata?;
    private _state;
    /**@internal */
    readonly _events: Events;
    readonly onLeft: Event<void>;
    readonly onMetadataUpdated: Event<string>;
    constructor(args: {
        channel: SkyWayChannelImpl;
        name?: string;
        id: string;
        metadata?: string;
        context: SkyWayContext;
    });
    get metadata(): string | undefined;
    get state(): MemberState;
    get publications(): Publication<LocalStream>[];
    get subscriptions(): Subscription<import("../media/stream").RemoteStream>[];
    /**@internal */
    toJSON(): model.Member;
    /** @private*/
    _left(): void;
    /** @private*/
    _metadataUpdated(metadata: string): void;
    updateMetadata(metadata: string): Promise<void>;
    /**@throws {@link SkyWayError} */
    leave(): Promise<void>;
}
export declare type MemberState = 'joined' | 'left';
export declare type MemberType = 'person' | 'bot';
export declare type MemberSide = 'local' | 'remote';
//# sourceMappingURL=index.d.ts.map