@typexim/web-sdk 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/types/enums/business.d.ts +115 -0
- package/dist/types/enums/index.d.ts +2 -0
- package/dist/types/enums/sdk.d.ts +5 -0
- package/dist/types/events.d.ts +56 -0
- package/dist/types/index.d.ts +21 -0
- package/dist/types/interfaces/business.d.ts +141 -0
- package/dist/types/interfaces/index.d.ts +3 -0
- package/dist/types/interfaces/pushMessage.d.ts +33 -0
- package/dist/types/interfaces/sdk/api.d.ts +74 -0
- package/dist/types/interfaces/sdk/common.d.ts +42 -0
- package/dist/types/interfaces/sdk/index.d.ts +2 -0
- package/dist/types/modules/Base.d.ts +51 -0
- package/dist/types/modules/BusinessWebsocket.d.ts +21 -0
- package/dist/types/modules/ChatSDK.d.ts +120 -0
- package/dist/types/modules/FeedCache.d.ts +21 -0
- package/dist/types/modules/HttpClient.d.ts +21 -0
- package/dist/types/modules/Logger.d.ts +13 -0
- package/dist/types/modules/PushMessageProcessor.d.ts +28 -0
- package/dist/types/modules/ReConnectWebsocket.d.ts +29 -0
- package/dist/types/modules/SingletonLock.d.ts +6 -0
- package/dist/types/modules/Storage.d.ts +6 -0
- package/dist/types/modules/Version.d.ts +7 -0
- package/dist/types/utils/http.d.ts +4 -0
- package/dist/types/utils/makeSign.d.ts +2 -0
- package/dist/types/utils/message.d.ts +31 -0
- package/dist/types/utils/misc.d.ts +1 -0
- package/dist/types/utils/promise.d.ts +4 -0
- package/dist/types/utils/sleep.d.ts +2 -0
- package/dist/web-sdk.esm.js +1525 -0
- package/dist/web-sdk.js +1532 -0
- package/package.json +44 -0
- package/rollup.config.js +39 -0
- package/tsconfig.json +22 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
export declare enum Boolean {
|
|
2
|
+
yes = 1,
|
|
3
|
+
no = 0
|
|
4
|
+
}
|
|
5
|
+
export declare enum ApiResponseCode {
|
|
6
|
+
SDK_ERROR = -10000,
|
|
7
|
+
NETWORK_ERROR = -9999,
|
|
8
|
+
MAKE_SIGN_FAIL = -9998,
|
|
9
|
+
REQUEST_SINGLETON_LOCK_FAIL = -9997,
|
|
10
|
+
PARAMS_INVALID = -9996,
|
|
11
|
+
SUCCESS = 0
|
|
12
|
+
}
|
|
13
|
+
export declare enum PushMessageType {
|
|
14
|
+
CREATE_FEED = 0,
|
|
15
|
+
UPDATE_FEED = 1,
|
|
16
|
+
ADD_MESSAGE = 2,
|
|
17
|
+
UPDATE_MESSAGE = 3,
|
|
18
|
+
UPDATE_USER_DATA = 4,
|
|
19
|
+
USER_LOGIN = 5,
|
|
20
|
+
READ_MESSAGE = 6,
|
|
21
|
+
PONG_MESSAGE = 8,
|
|
22
|
+
DELETE_MESSAGE = 9,
|
|
23
|
+
UPDATE_GROUP = 12,
|
|
24
|
+
DELETE_GROUP = 13,
|
|
25
|
+
UPDATE_LOGIN_USER = 17,
|
|
26
|
+
UPDATE_MESSAGE_REACTION = 19,
|
|
27
|
+
ADD_GROUP_MEMBER = 21,
|
|
28
|
+
DEL_GROUP_MEMBER = 22,
|
|
29
|
+
ADD_CONTACTS = 23,
|
|
30
|
+
UPDATE_CONTACTS = 24,
|
|
31
|
+
DEL_CONTACTS = 25,
|
|
32
|
+
BLOCK_USER = 26,
|
|
33
|
+
DEVICE_CODE = 27,
|
|
34
|
+
MSG_OPEN_CLOCK = 28,
|
|
35
|
+
DELETE_SECRET_CHAT = 29,
|
|
36
|
+
DELETE_FEED = 30,
|
|
37
|
+
FAVORITE_UPDATE = 31,
|
|
38
|
+
STICKERS_UPDATE = 32,// 系统商店表情包 状态更新
|
|
39
|
+
CUSTOM_STICKERS_UPDATE = 33,// 用户自定义表情包 更新
|
|
40
|
+
MANAGE_DEVICE_UPDATE = 34,// 用户设备列表更新
|
|
41
|
+
MASS_MESSAGE_UPDATE = 35,// 群发助手列表更新
|
|
42
|
+
CHAT_WALLPAPER_DELETE = 36,// 聊天壁纸列表更新
|
|
43
|
+
CHAT_WALLPAPER_ADD = 37,
|
|
44
|
+
CONTACT_REQUEST = 40,
|
|
45
|
+
USER_PREFERENCE_CHANGE = 38,
|
|
46
|
+
UPDATE_GROUP_PIN = 41,
|
|
47
|
+
RTC_CANCEL = 46,// 通话取消
|
|
48
|
+
ADD_FEED_FOLDER = 43,
|
|
49
|
+
UPDATE_FEED_FOLDER = 44,
|
|
50
|
+
UPDATE_FOLDER_FEED_LIST = 47,
|
|
51
|
+
DELETE_FEED_FOLDER = 45,
|
|
52
|
+
UPDATE_CHATTER = 42,
|
|
53
|
+
PAPER_KEY = 48,
|
|
54
|
+
PAPER_KEY_LOG = 49,
|
|
55
|
+
USER_LOGIN_SCAN = 50,
|
|
56
|
+
RTC_RINGING = 51,// 通话取消
|
|
57
|
+
ON_UPDATE_PRIVATE_SETTING = 52,
|
|
58
|
+
ON_DELETE_PRIVATE_SETTING = 53,
|
|
59
|
+
ON_UPDATE_LOGIN_PRIVATE_SETTING = 54,
|
|
60
|
+
PUSH_LIVE_MESSAGE = 56,
|
|
61
|
+
BIG_PACKAGE_PUSH = 126,
|
|
62
|
+
KICK_OUT_DEVICE = 127,
|
|
63
|
+
CLEAR_HISTORY = 128,
|
|
64
|
+
CLEAR_DATA = 255
|
|
65
|
+
}
|
|
66
|
+
export declare enum ChatType {
|
|
67
|
+
/**
|
|
68
|
+
* 单聊
|
|
69
|
+
*/
|
|
70
|
+
singleChat = 1,
|
|
71
|
+
/**
|
|
72
|
+
* 群聊
|
|
73
|
+
*/
|
|
74
|
+
groupChat = 2
|
|
75
|
+
}
|
|
76
|
+
export declare enum MessageKind {
|
|
77
|
+
text = 0,//普通
|
|
78
|
+
system = 1
|
|
79
|
+
}
|
|
80
|
+
export declare enum MessageType {
|
|
81
|
+
text = 0,
|
|
82
|
+
image = 1,
|
|
83
|
+
card = 2,
|
|
84
|
+
audio = 3,
|
|
85
|
+
video = 4,
|
|
86
|
+
file = 5,
|
|
87
|
+
mergeForward = 6,//合并转发
|
|
88
|
+
sticker = 7,//表情
|
|
89
|
+
richText = 8,//富文本消息
|
|
90
|
+
custom = 9
|
|
91
|
+
}
|
|
92
|
+
export declare enum MessageSendStatus {
|
|
93
|
+
success = 0,
|
|
94
|
+
sending = 1,
|
|
95
|
+
failed = 2
|
|
96
|
+
}
|
|
97
|
+
/** 群成员角色 */
|
|
98
|
+
export declare enum GroupRole {
|
|
99
|
+
Owner = 1,
|
|
100
|
+
Admin = 2,
|
|
101
|
+
Common = 3,
|
|
102
|
+
Bot = 4
|
|
103
|
+
}
|
|
104
|
+
export declare enum MessageOperation {
|
|
105
|
+
normal = 0,//正常
|
|
106
|
+
recall = 1
|
|
107
|
+
}
|
|
108
|
+
export declare enum GroupType {
|
|
109
|
+
/** 加密群聊 */
|
|
110
|
+
private = 1,
|
|
111
|
+
/** 超级群聊 */
|
|
112
|
+
public = 0,
|
|
113
|
+
/** 匿名群聊,新增群聊类型 */
|
|
114
|
+
anonymous = 2
|
|
115
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Feed, Message } from './interfaces';
|
|
2
|
+
export declare const CHAT_SDK_EVENT: {
|
|
3
|
+
/**
|
|
4
|
+
* sdk用户已登录,可以调用发送消息等API
|
|
5
|
+
*/
|
|
6
|
+
readonly SDK_READY: "sdkReady";
|
|
7
|
+
/**
|
|
8
|
+
* sdk用户已登出,无法调用发送消息等API,需要重新登录
|
|
9
|
+
*/
|
|
10
|
+
readonly SDK_NOT_READY: "sdkNotReady";
|
|
11
|
+
/**
|
|
12
|
+
* feed列表有更新
|
|
13
|
+
*/
|
|
14
|
+
readonly FEED_LIST_UPDATED: "feedListUpdated";
|
|
15
|
+
/**
|
|
16
|
+
* sdk收到新message
|
|
17
|
+
*/
|
|
18
|
+
readonly MESSAGE_RECEIVED: "messageReceived";
|
|
19
|
+
/**
|
|
20
|
+
* message有更新
|
|
21
|
+
*/
|
|
22
|
+
readonly MESSAGE_UPDATED: "messageUpdated";
|
|
23
|
+
/**
|
|
24
|
+
* sdk收到message已读回执
|
|
25
|
+
*/
|
|
26
|
+
readonly MESSAGE_RECEIPT_RECEIVED: "messageReceiptReceived";
|
|
27
|
+
/**
|
|
28
|
+
* sdk收到直播间message
|
|
29
|
+
*/
|
|
30
|
+
readonly ROOM_MESSAGE_RECEIVED: "roomMessageReceived";
|
|
31
|
+
};
|
|
32
|
+
export type CHAT_SDK_EVENT_MAP = {
|
|
33
|
+
[CHAT_SDK_EVENT.SDK_READY]: void;
|
|
34
|
+
[CHAT_SDK_EVENT.SDK_NOT_READY]: void;
|
|
35
|
+
[CHAT_SDK_EVENT.FEED_LIST_UPDATED]: {
|
|
36
|
+
is_sync_completed: boolean;
|
|
37
|
+
list: Feed[];
|
|
38
|
+
};
|
|
39
|
+
[CHAT_SDK_EVENT.MESSAGE_RECEIVED]: Message;
|
|
40
|
+
[CHAT_SDK_EVENT.MESSAGE_UPDATED]: Message;
|
|
41
|
+
[CHAT_SDK_EVENT.MESSAGE_RECEIPT_RECEIVED]: {
|
|
42
|
+
/**
|
|
43
|
+
* feed id
|
|
44
|
+
*/
|
|
45
|
+
feed_id: string;
|
|
46
|
+
/**
|
|
47
|
+
* 已读消息id列表
|
|
48
|
+
*/
|
|
49
|
+
message_ids: string[];
|
|
50
|
+
/**
|
|
51
|
+
* 发送已读回执的用户id
|
|
52
|
+
*/
|
|
53
|
+
reader_user_ids: string[];
|
|
54
|
+
};
|
|
55
|
+
[CHAT_SDK_EVENT.ROOM_MESSAGE_RECEIVED]: string;
|
|
56
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as enums from './enums';
|
|
2
|
+
import * as events from './events';
|
|
3
|
+
import * as interfaces from './interfaces';
|
|
4
|
+
import { ChatSDKConfig } from './interfaces/sdk';
|
|
5
|
+
import ChatSDK from './modules/ChatSDK';
|
|
6
|
+
export declare function create(config: ChatSDKConfig): ChatSDK;
|
|
7
|
+
export declare const utils: {
|
|
8
|
+
parseSystemMessageContent: (str: string) => {
|
|
9
|
+
text?: string;
|
|
10
|
+
text_i18n?: Record<string, string>;
|
|
11
|
+
};
|
|
12
|
+
parseTextMessageContent: (str: string) => {
|
|
13
|
+
text?: string;
|
|
14
|
+
client_msg_id?: string;
|
|
15
|
+
};
|
|
16
|
+
parseCustomMessageContent: <T = any>(str: string) => {
|
|
17
|
+
client_msg_id?: string;
|
|
18
|
+
content?: T;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
export { ChatSDK, enums, events, interfaces };
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { ChatType, MessageKind, MessageOperation, MessageType } from '../enums';
|
|
2
|
+
export type ApiResponse<T = any> = {
|
|
3
|
+
code: number;
|
|
4
|
+
data: T;
|
|
5
|
+
msg: string;
|
|
6
|
+
msg_i18n?: Record<string, string>;
|
|
7
|
+
};
|
|
8
|
+
export type User = {
|
|
9
|
+
id: string;
|
|
10
|
+
email: string;
|
|
11
|
+
phone: string;
|
|
12
|
+
name: string;
|
|
13
|
+
avatar: string;
|
|
14
|
+
last_active_at: string;
|
|
15
|
+
logoff: number;
|
|
16
|
+
language: string;
|
|
17
|
+
token: string;
|
|
18
|
+
token_expired: string;
|
|
19
|
+
first_name: string;
|
|
20
|
+
last_name: string;
|
|
21
|
+
is_online: boolean;
|
|
22
|
+
last_online_time: number;
|
|
23
|
+
key: string;
|
|
24
|
+
session_id: string;
|
|
25
|
+
};
|
|
26
|
+
export type Feed = {
|
|
27
|
+
/**
|
|
28
|
+
* feedId
|
|
29
|
+
*/
|
|
30
|
+
id: string;
|
|
31
|
+
/**
|
|
32
|
+
* 会话id
|
|
33
|
+
*/
|
|
34
|
+
chat_id: string;
|
|
35
|
+
/**
|
|
36
|
+
* 单聊时对方的id
|
|
37
|
+
*/
|
|
38
|
+
target_id: string;
|
|
39
|
+
/**
|
|
40
|
+
* 聊天类型
|
|
41
|
+
*/
|
|
42
|
+
chat_type: ChatType;
|
|
43
|
+
/**
|
|
44
|
+
* 会话成员id
|
|
45
|
+
*/
|
|
46
|
+
chat_member: string[];
|
|
47
|
+
/**
|
|
48
|
+
* 头像
|
|
49
|
+
*/
|
|
50
|
+
avatar: string;
|
|
51
|
+
/**
|
|
52
|
+
* 会话名称
|
|
53
|
+
*/
|
|
54
|
+
name: string;
|
|
55
|
+
/**
|
|
56
|
+
* 未读消息ids
|
|
57
|
+
*/
|
|
58
|
+
unread_message_ids?: string[];
|
|
59
|
+
/**
|
|
60
|
+
* 未读数
|
|
61
|
+
*/
|
|
62
|
+
badge: number;
|
|
63
|
+
/**
|
|
64
|
+
* 最后更新时间,'2025-09-18T02:24:25Z'
|
|
65
|
+
*/
|
|
66
|
+
last_updated_at: string;
|
|
67
|
+
/**
|
|
68
|
+
* 首条消息的position
|
|
69
|
+
*/
|
|
70
|
+
first_position: number;
|
|
71
|
+
/**
|
|
72
|
+
* 最后一条消息的position
|
|
73
|
+
*/
|
|
74
|
+
last_message_position: number;
|
|
75
|
+
/**
|
|
76
|
+
* 最后一条消息的发送时间
|
|
77
|
+
*/
|
|
78
|
+
last_message_send_at: string;
|
|
79
|
+
/**
|
|
80
|
+
* 最后一条消息的内容(content)
|
|
81
|
+
*/
|
|
82
|
+
last_message: string;
|
|
83
|
+
/**
|
|
84
|
+
* 最后一条消息的来源类别
|
|
85
|
+
*/
|
|
86
|
+
last_message_kind_id: MessageKind;
|
|
87
|
+
/**
|
|
88
|
+
* 最后一条消息的消息类别
|
|
89
|
+
*/
|
|
90
|
+
last_message_type_id: MessageType;
|
|
91
|
+
};
|
|
92
|
+
export type Message = {
|
|
93
|
+
/**
|
|
94
|
+
* 消息id
|
|
95
|
+
*/
|
|
96
|
+
id: string;
|
|
97
|
+
/**
|
|
98
|
+
* chat id
|
|
99
|
+
*/
|
|
100
|
+
chat_id: string;
|
|
101
|
+
/**
|
|
102
|
+
* 消息位置
|
|
103
|
+
*/
|
|
104
|
+
position: number;
|
|
105
|
+
/**
|
|
106
|
+
* 发送者Id
|
|
107
|
+
*/
|
|
108
|
+
sender_id: string;
|
|
109
|
+
/**
|
|
110
|
+
* 消息来源类别,系统触发,普通触发
|
|
111
|
+
*/
|
|
112
|
+
message_kind_id: MessageKind;
|
|
113
|
+
/**
|
|
114
|
+
* 消息类别
|
|
115
|
+
*/
|
|
116
|
+
message_type_id: MessageType;
|
|
117
|
+
/**
|
|
118
|
+
* 消息内容
|
|
119
|
+
*/
|
|
120
|
+
content: string;
|
|
121
|
+
/**
|
|
122
|
+
* 发送时间
|
|
123
|
+
*/
|
|
124
|
+
send_at: string;
|
|
125
|
+
/**
|
|
126
|
+
* 已读信息的用户id
|
|
127
|
+
*/
|
|
128
|
+
reader_ids: string[];
|
|
129
|
+
/**
|
|
130
|
+
* 存放对某些隐藏消息的用户的Id
|
|
131
|
+
*/
|
|
132
|
+
hide_ids: string[];
|
|
133
|
+
/**
|
|
134
|
+
* 消息操作状态
|
|
135
|
+
*/
|
|
136
|
+
operation: MessageOperation;
|
|
137
|
+
/**
|
|
138
|
+
* 消息操作人id
|
|
139
|
+
*/
|
|
140
|
+
operation_user_id: string;
|
|
141
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { PushMessageType } from '../enums';
|
|
2
|
+
import { Feed, Message } from './business';
|
|
3
|
+
export type PushMessageBase<T = PushMessageType, U = unknown> = {
|
|
4
|
+
id: string;
|
|
5
|
+
timestamp?: number;
|
|
6
|
+
type: T;
|
|
7
|
+
content: U;
|
|
8
|
+
};
|
|
9
|
+
export type PushMessagePong = PushMessageBase<PushMessageType.PONG_MESSAGE>;
|
|
10
|
+
export type PushMessageBigPackageContent = {
|
|
11
|
+
big_push: PushMessage[];
|
|
12
|
+
};
|
|
13
|
+
export type PushMessageBigPackage = PushMessageBase<PushMessageType.BIG_PACKAGE_PUSH, PushMessageBigPackageContent>;
|
|
14
|
+
export type PushMessageCreateFeed = PushMessageBase<PushMessageType.CREATE_FEED, Feed>;
|
|
15
|
+
export type PushMessageUpdateFeeds = PushMessageBase<PushMessageType.UPDATE_FEED>;
|
|
16
|
+
export type PushMessageAddMessage = PushMessageBase<PushMessageType.ADD_MESSAGE, Message>;
|
|
17
|
+
export type PushMessageUpdateMessage = PushMessageBase<PushMessageType.UPDATE_MESSAGE, Message>;
|
|
18
|
+
export type PushMessageUserLogin = PushMessageBase<PushMessageType.USER_LOGIN>;
|
|
19
|
+
export type PushMessageDeleteFeed = PushMessageBase<PushMessageType.DELETE_FEED, {
|
|
20
|
+
/**
|
|
21
|
+
* feed id
|
|
22
|
+
*/
|
|
23
|
+
id: string;
|
|
24
|
+
}>;
|
|
25
|
+
export type PushMessagePushLiveMessage = PushMessageBase<PushMessageType.PUSH_LIVE_MESSAGE, string>;
|
|
26
|
+
export type PushMessageReadMessage = PushMessageBase<PushMessageType.READ_MESSAGE, {
|
|
27
|
+
chat_id: string;
|
|
28
|
+
message_ids: string[];
|
|
29
|
+
reader_ids: string[];
|
|
30
|
+
threadid: string;
|
|
31
|
+
}>;
|
|
32
|
+
export type SpecialPushMessage = PushMessagePong | PushMessageBigPackage | PushMessageCreateFeed | PushMessageUpdateFeeds | PushMessageAddMessage | PushMessageUpdateMessage | PushMessageUserLogin | PushMessageDeleteFeed | PushMessagePushLiveMessage | PushMessageReadMessage;
|
|
33
|
+
export type PushMessage = PushMessageBase<Exclude<PushMessageType, SpecialPushMessage['type']>> | SpecialPushMessage;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Feed, Message } from '../business';
|
|
2
|
+
import { HttpClientResponse } from './common';
|
|
3
|
+
export type SDKLoginReq = {
|
|
4
|
+
user_code: string;
|
|
5
|
+
};
|
|
6
|
+
export type SDKGetFeedListRespData = {
|
|
7
|
+
/**
|
|
8
|
+
* feed列表
|
|
9
|
+
*/
|
|
10
|
+
list: Feed[];
|
|
11
|
+
/**
|
|
12
|
+
* 是否拉取完成
|
|
13
|
+
*/
|
|
14
|
+
is_sync_completed: boolean;
|
|
15
|
+
};
|
|
16
|
+
export type SDKGetFeedListResp = HttpClientResponse<SDKGetFeedListRespData>;
|
|
17
|
+
export type SDKGetFeedMessageListReq = {
|
|
18
|
+
/**
|
|
19
|
+
* feed id
|
|
20
|
+
*/
|
|
21
|
+
feed_id: string;
|
|
22
|
+
/**
|
|
23
|
+
* 上一次分页查询返回的last_message_position
|
|
24
|
+
*/
|
|
25
|
+
last_message_position?: number;
|
|
26
|
+
limit: number;
|
|
27
|
+
};
|
|
28
|
+
export type SDKGetFeedMessageListRespData = {
|
|
29
|
+
/**
|
|
30
|
+
* 是否还有更多
|
|
31
|
+
*/
|
|
32
|
+
has_more: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* 消息列表
|
|
35
|
+
*/
|
|
36
|
+
list: Message[];
|
|
37
|
+
/**
|
|
38
|
+
* 最后一条消息的position,下一页查询时需要携带
|
|
39
|
+
*/
|
|
40
|
+
last_message_position?: number;
|
|
41
|
+
};
|
|
42
|
+
export type SDKGetFeedMessageListResp = HttpClientResponse<SDKGetFeedMessageListRespData>;
|
|
43
|
+
export type SDKCreateCustomMessageReq<T = any> = {
|
|
44
|
+
feed_id: string;
|
|
45
|
+
/**
|
|
46
|
+
* 自定义消息内容
|
|
47
|
+
*/
|
|
48
|
+
content: T;
|
|
49
|
+
/**
|
|
50
|
+
* 客户端自定义的消息id,发送成功后content会带
|
|
51
|
+
*/
|
|
52
|
+
client_msg_id?: string;
|
|
53
|
+
};
|
|
54
|
+
export type SDKSendMessageReadReceiptReq = {
|
|
55
|
+
/**
|
|
56
|
+
* feed id
|
|
57
|
+
*/
|
|
58
|
+
feed_id: string;
|
|
59
|
+
/**
|
|
60
|
+
* 消息id列表
|
|
61
|
+
*/
|
|
62
|
+
message_ids: string[];
|
|
63
|
+
};
|
|
64
|
+
export type SDKGetRoomRecentMessageListResp = HttpClientResponse<string[]>;
|
|
65
|
+
export type SDKSendMessageToRoomReq = {
|
|
66
|
+
/**
|
|
67
|
+
* 直播间id
|
|
68
|
+
*/
|
|
69
|
+
room_id: string;
|
|
70
|
+
/**
|
|
71
|
+
* 内容
|
|
72
|
+
*/
|
|
73
|
+
content: string;
|
|
74
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export type ChatSDKConfig = {
|
|
2
|
+
/**
|
|
3
|
+
* API服务器域名
|
|
4
|
+
*/
|
|
5
|
+
httpHost: string;
|
|
6
|
+
/**
|
|
7
|
+
* websocket服务器域名
|
|
8
|
+
*/
|
|
9
|
+
websocketHost: string;
|
|
10
|
+
/**
|
|
11
|
+
* 为http请求添加x-developer消息头(调试用)
|
|
12
|
+
*/
|
|
13
|
+
developer?: string;
|
|
14
|
+
};
|
|
15
|
+
type ChatSDKContextBase = {
|
|
16
|
+
isReady: boolean;
|
|
17
|
+
deviceId: string | null;
|
|
18
|
+
};
|
|
19
|
+
type ChatSDKContextLogin = ChatSDKContextBase & {
|
|
20
|
+
isLogin: true;
|
|
21
|
+
loginUser: {
|
|
22
|
+
userId: string;
|
|
23
|
+
secretKey: string;
|
|
24
|
+
sessionId: string;
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
type ChatSDKContextNotLogin = ChatSDKContextBase & {
|
|
28
|
+
isLogin: false;
|
|
29
|
+
};
|
|
30
|
+
export type ChatSDKContext = ChatSDKContextLogin | ChatSDKContextNotLogin;
|
|
31
|
+
export type HttpClientResponseOk<T = unknown> = {
|
|
32
|
+
ok: true;
|
|
33
|
+
data: T;
|
|
34
|
+
};
|
|
35
|
+
export type HttpClientResponseFail = {
|
|
36
|
+
ok: false;
|
|
37
|
+
code: number;
|
|
38
|
+
msg: string;
|
|
39
|
+
msg_i18n?: Record<string, string>;
|
|
40
|
+
};
|
|
41
|
+
export type HttpClientResponse<T = unknown> = HttpClientResponseOk<T> | HttpClientResponseFail;
|
|
42
|
+
export {};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export type EventType = string | symbol;
|
|
2
|
+
export type Handler<T = unknown> = (event: T) => void;
|
|
3
|
+
export type WildcardHandler<T = Record<string, unknown>> = (type: keyof T, event: T[keyof T]) => void;
|
|
4
|
+
export type EventHandlerList<T = unknown> = Array<Handler<T>>;
|
|
5
|
+
export type WildCardEventHandlerList<T = Record<string, unknown>> = Array<WildcardHandler<T>>;
|
|
6
|
+
export type EventHandlerMap<Events extends Record<EventType, unknown>> = Map<keyof Events | '*', EventHandlerList<Events[keyof Events]> | WildCardEventHandlerList<Events>>;
|
|
7
|
+
export type GenericEventHandler<Events extends Record<EventType, unknown>> = Handler<Events[keyof Events]> | WildcardHandler<Events>;
|
|
8
|
+
export default class Base<Events extends Record<EventType, unknown>> {
|
|
9
|
+
all: EventHandlerMap<Events>;
|
|
10
|
+
constructor(all?: EventHandlerMap<Events>);
|
|
11
|
+
/**
|
|
12
|
+
* Register an event handler for the given type.
|
|
13
|
+
* @param {string|symbol} type Type of event to listen for, or `'*'` for all events
|
|
14
|
+
* @param {Function} handler Function to call in response to given event
|
|
15
|
+
* @memberOf Emitter
|
|
16
|
+
* @returns {Function} Function to remove the event handler
|
|
17
|
+
*/
|
|
18
|
+
on<Key extends keyof Events>(type: Key, handler: Handler<Events[Key]>): () => void;
|
|
19
|
+
on(type: '*', handler: WildcardHandler<Events>): () => void;
|
|
20
|
+
/**
|
|
21
|
+
* Remove an event handler for the given type.
|
|
22
|
+
* If `handler` is omitted, all handlers of the given type are removed.
|
|
23
|
+
*
|
|
24
|
+
* @param {string|symbol} type Type of event to unregister `handler` from (`'*'` to remove a wildcard handler)
|
|
25
|
+
* @param {Function} [handler] Handler function to remove
|
|
26
|
+
* @memberOf mitt
|
|
27
|
+
*/
|
|
28
|
+
off<Key extends keyof Events>(type: Key, handler?: Handler<Events[Key]>): void;
|
|
29
|
+
off(type: '*', handler: WildcardHandler<Events>): void;
|
|
30
|
+
/**
|
|
31
|
+
* Invoke all handlers for the given type.
|
|
32
|
+
* If present, `'*'` handlers are invoked after type-matched handlers.
|
|
33
|
+
*
|
|
34
|
+
* Note: Manually firing '*' handlers is not supported.
|
|
35
|
+
*
|
|
36
|
+
* @param {string|symbol} type The event type to invoke
|
|
37
|
+
* @param {Any} [evt] Any value (object is recommended and powerful), passed to each handler
|
|
38
|
+
* @memberOf Emitter
|
|
39
|
+
*/
|
|
40
|
+
emit<Key extends keyof Events>(type: Key, evt: Events[Key]): void;
|
|
41
|
+
emit<Key extends keyof Events>(type: undefined extends Events[Key] ? Key : never): void;
|
|
42
|
+
/**
|
|
43
|
+
* Register an event handler for the given type that will be invoked only once.
|
|
44
|
+
*
|
|
45
|
+
* @param {string|symbol} type Type of event to listen for, or `'*'` for all events
|
|
46
|
+
* @param {Function} handler Function to call in response to given event
|
|
47
|
+
* @memberOf Emitter
|
|
48
|
+
*/
|
|
49
|
+
once<Key extends keyof Events>(type: Key, handler: Handler<Events[Key]>): void;
|
|
50
|
+
once(type: '*', handler: WildcardHandler<Events>): void;
|
|
51
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { PushMessage } from '../interfaces';
|
|
2
|
+
import { ChatSDKContext } from '../interfaces/sdk';
|
|
3
|
+
import Base from './Base';
|
|
4
|
+
import Logger from './Logger';
|
|
5
|
+
export type BusinessWebsocketConfig = {
|
|
6
|
+
host: string;
|
|
7
|
+
context: ChatSDKContext;
|
|
8
|
+
logger: Logger;
|
|
9
|
+
};
|
|
10
|
+
export default class BusinessWebsocket extends Base<{
|
|
11
|
+
message: PushMessage;
|
|
12
|
+
kickoff: void;
|
|
13
|
+
}> {
|
|
14
|
+
private host;
|
|
15
|
+
private context;
|
|
16
|
+
private logger;
|
|
17
|
+
private ws;
|
|
18
|
+
constructor(config: BusinessWebsocketConfig);
|
|
19
|
+
connect(): void;
|
|
20
|
+
disconnect(): void;
|
|
21
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { LogLevel } from '../enums';
|
|
2
|
+
import { CHAT_SDK_EVENT_MAP } from '../events';
|
|
3
|
+
import { Feed, Message } from '../interfaces';
|
|
4
|
+
import { ChatSDKConfig, HttpClientResponse, SDKCreateCustomMessageReq, SDKGetFeedListResp, SDKGetFeedMessageListReq, SDKGetFeedMessageListResp, SDKGetRoomRecentMessageListResp, SDKLoginReq, SDKSendMessageReadReceiptReq, SDKSendMessageToRoomReq } from '../interfaces/sdk';
|
|
5
|
+
import Base from './Base';
|
|
6
|
+
export default class ChatSDK extends Base<CHAT_SDK_EVENT_MAP> {
|
|
7
|
+
private context;
|
|
8
|
+
private version;
|
|
9
|
+
private singletonLock;
|
|
10
|
+
private logger;
|
|
11
|
+
private httpClient;
|
|
12
|
+
private feedCache;
|
|
13
|
+
private ws;
|
|
14
|
+
private pushMessageProcessor;
|
|
15
|
+
constructor(config: ChatSDKConfig);
|
|
16
|
+
private init;
|
|
17
|
+
private requestDeviceId;
|
|
18
|
+
private saveContext;
|
|
19
|
+
private loadContext;
|
|
20
|
+
private applyLoginStatus;
|
|
21
|
+
private loadFeedList;
|
|
22
|
+
/**
|
|
23
|
+
* SDK 是否已就绪(登录成功且 WebSocket 已连接)。
|
|
24
|
+
* @returns {boolean} true 表示可用,false 表示未就绪
|
|
25
|
+
*/
|
|
26
|
+
isReady(): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* 设置 SDK 的日志级别。
|
|
29
|
+
* @param {LogLevel} level 要设置的日志级别
|
|
30
|
+
*/
|
|
31
|
+
setLogLevel(level: LogLevel): void;
|
|
32
|
+
/**
|
|
33
|
+
* 使用一次性 userCode 登录,建立会话并连接 WebSocket。
|
|
34
|
+
* 成功后会触发事件:SDK_READY。
|
|
35
|
+
* @param {SDKLoginReq} req 登录请求参数(包含 userCode)
|
|
36
|
+
* @returns {Promise<HttpClientResponse>} 成功返回 ok,失败返回错误信息
|
|
37
|
+
*/
|
|
38
|
+
login(req: SDKLoginReq): Promise<HttpClientResponse>;
|
|
39
|
+
/**
|
|
40
|
+
* 退出当前登录用户并断开 WebSocket。
|
|
41
|
+
* 成功后会触发事件:SDK_NOT_READY。
|
|
42
|
+
* @returns {Promise<HttpClientResponse>} 成功返回 ok,失败返回错误信息
|
|
43
|
+
*/
|
|
44
|
+
logout(): Promise<HttpClientResponse>;
|
|
45
|
+
private handleKickoff;
|
|
46
|
+
/**
|
|
47
|
+
* 获取当前登录用户的 userId。
|
|
48
|
+
* @returns {string | null} 已登录返回 userId,未登录返回 null
|
|
49
|
+
*/
|
|
50
|
+
getLoginUser(): string | null;
|
|
51
|
+
/**
|
|
52
|
+
* 创建单聊feed,如果已创建就返回已创建的feed
|
|
53
|
+
* @param user_id
|
|
54
|
+
* @returns
|
|
55
|
+
*/
|
|
56
|
+
createSingleChatFeed(user_id: string): Promise<HttpClientResponse<Feed>>;
|
|
57
|
+
/**
|
|
58
|
+
* 删除指定feed
|
|
59
|
+
* @param feed_id
|
|
60
|
+
* @returns
|
|
61
|
+
*/
|
|
62
|
+
deleteFeed(feed_id: string): Promise<HttpClientResponse>;
|
|
63
|
+
/**
|
|
64
|
+
* 获取当前用户的 Feed 列表
|
|
65
|
+
* @returns
|
|
66
|
+
*/
|
|
67
|
+
getFeedList(): Promise<SDKGetFeedListResp>;
|
|
68
|
+
/**
|
|
69
|
+
* 根据 Feed ID 获取详情
|
|
70
|
+
* @param feed_id
|
|
71
|
+
* @returns
|
|
72
|
+
*/
|
|
73
|
+
getFeedDetail(feed_id: string): Promise<HttpClientResponse<Feed | null>>;
|
|
74
|
+
/**
|
|
75
|
+
* 获取某个 Feed 的消息列表
|
|
76
|
+
* @param req
|
|
77
|
+
* @returns
|
|
78
|
+
*/
|
|
79
|
+
getFeedMessageList(req: SDKGetFeedMessageListReq): Promise<SDKGetFeedMessageListResp>;
|
|
80
|
+
/**
|
|
81
|
+
* 本地创建一条 Feed 自定义消息
|
|
82
|
+
* @param req
|
|
83
|
+
* @returns
|
|
84
|
+
*/
|
|
85
|
+
createCustomMessage<T = any>(req: SDKCreateCustomMessageReq<T>): HttpClientResponse<Message>;
|
|
86
|
+
/**
|
|
87
|
+
* 发送一条消息到指定 Feed。
|
|
88
|
+
*/
|
|
89
|
+
sendMessageToFeed(message: Message): Promise<HttpClientResponse>;
|
|
90
|
+
/**
|
|
91
|
+
* 发送消息已读回执
|
|
92
|
+
* @param req
|
|
93
|
+
* @returns
|
|
94
|
+
*/
|
|
95
|
+
sendMessageReadReceipt(req: SDKSendMessageReadReceiptReq): Promise<HttpClientResponse>;
|
|
96
|
+
/**
|
|
97
|
+
* 加入直播间
|
|
98
|
+
* @param {string} room_id 直播间id
|
|
99
|
+
* @returns {Promise<HttpClientResponse>} 请求结果
|
|
100
|
+
*/
|
|
101
|
+
joinRoom(room_id: string): Promise<HttpClientResponse>;
|
|
102
|
+
/**
|
|
103
|
+
* 离开直播间
|
|
104
|
+
* @param {string} room_id 直播间id
|
|
105
|
+
* @returns {Promise<HttpClientResponse>} 请求结果
|
|
106
|
+
*/
|
|
107
|
+
leaveRoom(room_id: string): Promise<HttpClientResponse>;
|
|
108
|
+
/**
|
|
109
|
+
* 获取直播间的最近50条消息
|
|
110
|
+
* @param room_id 直播间id
|
|
111
|
+
* @returns
|
|
112
|
+
*/
|
|
113
|
+
getRoomRecentMessageList(room_id: string): Promise<SDKGetRoomRecentMessageListResp>;
|
|
114
|
+
/**
|
|
115
|
+
* 向直播间发送一条消息。
|
|
116
|
+
* @param req
|
|
117
|
+
* @returns
|
|
118
|
+
*/
|
|
119
|
+
sendMessageToRoom(req: SDKSendMessageToRoomReq): Promise<HttpClientResponse>;
|
|
120
|
+
}
|