import { RtmChannelType } from '../legacy/AgoraRtmBase'; import { Metadata } from '../legacy/IAgoraRtmStorage'; import { BaseResponse } from './RTMClient'; export type ChannelMetadataOperationResponse = BaseResponse & { channelName: string; channelType: RtmChannelType; }; export type UserMetadataOperationResponse = BaseResponse & { userId: string; }; export type SetChannelMetadataResponse = ChannelMetadataOperationResponse; export type SetUserMetadataResponse = UserMetadataOperationResponse; export type UpdateChannelMetadataResponse = ChannelMetadataOperationResponse; export type UpdateUserMetadataResponse = UserMetadataOperationResponse; export type GetChannelMetadataResponse = Metadata & ChannelMetadataOperationResponse; export type GetUserMetadataResponse = Metadata & UserMetadataOperationResponse; export type RemoveChannelMetadataResponse = ChannelMetadataOperationResponse; export type RemoveUserMetadataResponse = UserMetadataOperationResponse; export type SubscribeUserMetaResponse = UserMetadataOperationResponse; export type UnsubscribeUserMetaResponse = UserMetadataOperationResponse; export interface IMetadataOptions { majorRevision?: number; lockName?: string; addTimeStamp?: boolean; addUserId?: boolean; } export interface RemoveUserMetadataOptions extends IMetadataOptions { userId?: string; data?: Metadata; } export interface RemoveChannelMetadataOptions extends IMetadataOptions { data?: Metadata; } export interface SetOrUpdateUserMetadataOptions extends IMetadataOptions { userId?: string; } export interface GetUserMetadataOptions { userId?: string; } export abstract class RTMStorage { abstract setChannelMetadata( channelName: string, channelType: RtmChannelType, data: Metadata, options?: IMetadataOptions ): Promise; abstract getChannelMetadata( channelName: string, channelType: RtmChannelType ): Promise; abstract removeChannelMetadata( channelName: string, channelType: RtmChannelType, options?: RemoveChannelMetadataOptions ): Promise; abstract updateChannelMetadata( channelName: string, channelType: RtmChannelType, data: Metadata, options?: IMetadataOptions ): Promise; abstract setUserMetadata( data: Metadata, options?: SetOrUpdateUserMetadataOptions ): Promise; abstract getUserMetadata( options?: GetUserMetadataOptions ): Promise; abstract removeUserMetadata( options?: RemoveUserMetadataOptions ): Promise; abstract updateUserMetadata( data: Metadata, options?: SetOrUpdateUserMetadataOptions ): Promise; abstract subscribeUserMetadata( userId: string ): Promise; abstract unsubscribeUserMetadata( userId: string ): Promise; }