@openim/client-sdk
Version:
JavaScript/TypeScript Client SDK for OpenIM
429 lines (428 loc) • 10.4 kB
TypeScript
import { SdkWsProto } from '@openim/protocol';
import { CbEvents } from '..';
import { InternalRequestApi, RequestApi } from '../constant/api';
import type { InternalContentType, InternalMessageStatus, NotificationType, ReqIdentifier, AllowType, ApplicationHandleResult, GroupAtType, GroupJoinSource, GroupMemberRole, GroupStatus, GroupType, GroupVerificationType, MessageReceiveOptType, MessageStatus, MessageType, OnlineState, Platform, SessionType } from './enum';
export interface HttpRequest {
reqFuncName: RequestApi | InternalRequestApi;
replaceURL?: string;
data: unknown;
operationID: string;
}
export interface PromiseMap {
resolve: (value: any) => void;
reject: (response: unknown) => void;
}
export interface ApiResp {
errCode: number;
errMsg: string;
errDlt: string;
}
export interface GeneralWsReq {
reqIdentifier: ReqIdentifier;
token?: string;
sendID: string;
msgIncr?: string;
operationID: string;
data: string;
}
export interface GeneralWsResp {
reqIdentifier: ReqIdentifier;
errCode: number;
errMsg: string;
msgIncr: string;
operationID: string;
data: string;
}
export interface SDKMessage {
clientMsgID: string;
serverMsgID: string;
createTime: number;
sendTime: number;
sessionType: SessionType;
sendID: string;
recvID: string;
msgFrom: number;
contentType: InternalContentType | NotificationType;
senderPlatformID: Platform;
senderNickname: string;
senderFaceUrl: string;
groupID: string;
content: string;
seq: number;
isRead: boolean;
status: InternalMessageStatus;
isReact?: boolean;
isExternalExtensions: boolean;
offlinePush: SdkWsProto.OfflinePushInfo;
attachedInfo: string;
ex: string;
localEx: string;
}
export interface ApiResponse<T = unknown> {
event: RequestApi | CbEvents;
errCode: number;
errMsg: string;
data: T;
operationID: string;
}
export type MessageEntity = {
type: string;
offset: number;
length: number;
url?: string;
info?: string;
};
export type PicBaseInfo = {
uuid: string;
type: string;
size: number;
width: number;
height: number;
url: string;
};
export type AtUsersInfoItem = {
atUserID: string;
groupNickname: string;
};
export type GroupApplicationItem = {
createTime: number;
creatorUserID: string;
ex: string;
groupFaceURL: string;
groupID: string;
groupName: string;
groupType: GroupType;
handleResult: ApplicationHandleResult;
handleUserID: string;
handledMsg: string;
handledTime: number;
introduction: string;
memberCount: number;
nickname: string;
notification: string;
ownerUserID: string;
reqMsg: string;
reqTime: number;
joinSource: GroupJoinSource;
status: GroupStatus;
userFaceURL: string;
userID: string;
};
export type FriendApplicationItem = {
createTime: number;
ex: string;
fromFaceURL: string;
fromNickname: string;
fromUserID: string;
handleMsg: string;
handleResult: ApplicationHandleResult;
handleTime: number;
handlerUserID: string;
reqMsg: string;
toFaceURL: string;
toNickname: string;
toUserID: string;
};
export type PublicUserItem = {
nickname: string;
userID: string;
faceURL: string;
ex: string;
};
export type SelfUserInfo = {
createTime: number;
ex: string;
faceURL: string;
nickname: string;
userID: string;
globalRecvMsgOpt: MessageReceiveOptType;
};
export type PartialUserInfo = {
userID: string;
} & Partial<Omit<SelfUserInfo, 'userID'>>;
export type FriendUserItem = {
addSource: number;
createTime: number;
ex: string;
faceURL: string;
userID: string;
nickname: string;
operatorUserID: string;
ownerUserID: string;
remark: string;
attachedInfo: string;
};
export type FriendshipInfo = {
result: number;
userID: string;
};
export type BlackUserItem = {
addSource: number;
userID: string;
createTime: number;
ex: string;
faceURL: string;
nickname: string;
operatorUserID: string;
ownerUserID: string;
};
export type GroupItem = {
groupID: string;
groupName: string;
notification: string;
notificationUserID: string;
notificationUpdateTime: number;
introduction: string;
faceURL: string;
ownerUserID: string;
createTime: number;
memberCount: number;
status: GroupStatus;
creatorUserID: string;
groupType: GroupType;
needVerification: GroupVerificationType;
ex: string;
applyMemberFriend: AllowType;
lookMemberInfo: AllowType;
};
export type GroupMemberItem = {
groupID: string;
userID: string;
nickname: string;
faceURL: string;
roleLevel: GroupMemberRole;
muteEndTime: number;
joinTime: number;
joinSource: GroupJoinSource;
inviterUserID: string;
operatorUserID: string;
ex: string;
};
export type ConversationItem = {
conversationID: string;
conversationType: SessionType;
userID: string;
groupID: string;
showName: string;
faceURL: string;
recvMsgOpt: MessageReceiveOptType;
unreadCount: number;
groupAtType: GroupAtType;
latestMsg: string;
latestMsgSendTime: number;
draftText: string;
draftTextTime: number;
burnDuration: number;
msgDestructTime: number;
isPinned: boolean;
isPrivateChat: boolean;
isMsgDestruct: boolean;
attachedInfo: string;
ex: string;
};
export type MessageItem = {
clientMsgID: string;
serverMsgID: string;
createTime: number;
sendTime: number;
sessionType: SessionType;
sendID: string;
recvID: string;
msgFrom: number;
contentType: MessageType;
senderPlatformID: Platform;
senderNickname: string;
senderFaceUrl: string;
groupID: string;
content: string;
seq: number;
isRead: boolean;
status: MessageStatus;
isReact?: boolean;
isExternalExtensions: boolean;
offlinePush: SdkWsProto.OfflinePushInfo;
attachedInfo: string;
ex: string;
localEx: string;
textElem?: TextElem;
cardElem?: CardElem;
pictureElem?: PictureElem;
soundElem?: SoundElem;
videoElem?: VideoElem;
fileElem?: FileElem;
mergeElem?: MergeElem;
atTextElem?: AtTextElem;
faceElem?: FaceElem;
locationElem?: LocationElem;
customElem?: CustomElem;
quoteElem?: QuoteElem;
notificationElem?: NotificationElem;
advancedTextElem?: AdvancedTextElem;
typingElem?: TypingElem;
attachedInfoElem?: AttachedInfoElem;
};
export type TextElem = {
content: string;
};
export type CardElem = {
userID: string;
nickname: string;
faceURL: string;
ex: string;
};
export type AtTextElem = {
text: string;
atUserList: string[];
atUsersInfo?: AtUsersInfoItem[];
quoteMessage?: MessageItem;
isAtSelf?: boolean;
};
export type NotificationElem = {
detail: string;
};
export type AdvancedTextElem = {
text: string;
messageEntityList: MessageEntity[];
};
export type TypingElem = {
msgTips: string;
};
export type CustomElem = {
data: string;
description: string;
extension: string;
};
export type FileElem = {
filePath: string;
uuid: string;
sourceUrl: string;
fileName: string;
fileSize: number;
};
export type FaceElem = {
index: number;
data: string;
};
export type LocationElem = {
description: string;
longitude: number;
latitude: number;
};
export type MergeElem = {
title: string;
abstractList: string[];
multiMessage: MessageItem[];
messageEntityList: MessageEntity[];
};
export type PictureElem = {
sourcePath: string;
sourcePicture: Picture;
bigPicture: Picture;
snapshotPicture: Picture;
};
export type AttachedInfoElem = {
groupHasReadInfo: GroupHasReadInfo;
isPrivateChat: boolean;
isEncryption: boolean;
inEncryptStatus: boolean;
burnDuration: number;
hasReadTime: number;
messageEntityList: MessageEntity[];
};
export type GroupHasReadInfo = {
hasReadCount: number;
unreadCount: number;
};
export type Picture = {
uuid: string;
type: string;
size: number;
width: number;
height: number;
url: string;
};
export type QuoteElem = {
text: string;
quoteMessage: MessageItem;
};
export type SoundElem = {
uuid: string;
soundPath: string;
sourceUrl: string;
dataSize: number;
duration: number;
};
export type VideoElem = {
videoPath: string;
videoUUID: string;
videoUrl: string;
videoType: string;
videoSize: number;
duration: number;
snapshotPath: string;
snapshotUUID: string;
snapshotSize: number;
snapshotUrl: string;
snapshotWidth: number;
snapshotHeight: number;
};
export type AdvancedRevokeContent = {
clientMsgID: string;
revokeTime: number;
revokerID: string;
revokerNickname: string;
revokerRole: number;
seq: number;
sessionType: SessionType;
sourceMessageSendID: string;
sourceMessageSendTime: number;
sourceMessageSenderNickname: string;
};
export type RevokedInfo = {
revokerID: string;
revokerRole: number;
clientMsgID: string;
revokerNickname: string;
revokeTime: number;
sourceMessageSendTime: number;
sourceMessageSendID: string;
sourceMessageSenderNickname: string;
sessionType: number;
seq: number;
ex: string;
};
export type ReceiptInfo = {
userID: string;
groupID: string;
msgIDList: string[];
readTime: number;
msgFrom: number;
contentType: MessageType | 0;
sessionType: SessionType;
};
export type AdvancedGetMessageResult = {
isEnd: boolean;
errCode: number;
errMsg: string;
messageList: MessageItem[];
};
export type UserOnlineState = {
platformIDs?: Platform[];
status: OnlineState;
userID: string;
};
export type ConversationInputStatus = {
conversationID: string;
userID: string;
platformIDs: Platform[];
};
export type GroupMessageReceiptInfo = {
conversationID: string;
groupMessageReadInfo: GroupMessageReadInfo[];
};
export type GroupMessageReadInfo = {
clientMsgID: string;
hasReadCount: number;
unreadCount: number;
readMembers: GroupMemberItem[];
};