simplex-chat 0.0.1 → 0.1.1
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/README.md +29 -26
- package/dist/client.d.ts +34 -12
- package/dist/client.js +168 -113
- package/dist/client.js.map +1 -1
- package/dist/command.d.ts +134 -9
- package/dist/command.js +63 -13
- package/dist/command.js.map +1 -1
- package/dist/index-web.d.ts +0 -1
- package/dist/index-web.js +5 -2
- package/dist/index-web.js.map +1 -1
- package/dist/index.bundle.js +9 -535
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/queue.js +7 -2
- package/dist/queue.js.map +1 -1
- package/dist/response.d.ts +297 -9
- package/dist/response.js +20 -1
- package/dist/response.js.map +1 -1
- package/dist/transport.js +18 -9
- package/dist/transport.js.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -1,40 +1,43 @@
|
|
|
1
1
|
# SimpleX Chat JavaScript client
|
|
2
2
|
|
|
3
|
+
This is a TypeScript library that defines WebSocket API client for [SimpleX Chat terminal CLI](https://github.com/simplex-chat/simplex-chat/blob/stable/docs/CLI.md) that should be run as a WebSockets server on any port:
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
simplex-chat -p 5225
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Client API provides types and functions to:
|
|
10
|
+
|
|
11
|
+
- create and change user profile (although, in most cases you can do it manually, via SimpleX Chat terminal app).
|
|
12
|
+
- create and accept invitations or connect with the contacts.
|
|
13
|
+
- create and manage long-term user address, accepting connection requests automatically.
|
|
14
|
+
- create, join and manage group.
|
|
15
|
+
- send and receive files.
|
|
16
|
+
|
|
17
|
+
## Use cases
|
|
18
|
+
|
|
19
|
+
- chat bots: you can implement any logic of connecting with and communicating with SimpleX Chat users. Using chat groups a chat bot can connect SimleX Chat users with each other.
|
|
20
|
+
- control of the equipment: e.g. servers or home automation. SimpleX Chat provides secure and authorised connections, so this is more secure than using rest APIs.
|
|
21
|
+
|
|
22
|
+
Please share your use cases and implementations.
|
|
23
|
+
|
|
3
24
|
## Quick start
|
|
4
25
|
|
|
5
26
|
```
|
|
6
27
|
npm i simplex-chat
|
|
28
|
+
npm run build
|
|
7
29
|
```
|
|
8
30
|
|
|
9
|
-
|
|
10
|
-
const ChatClient = require("simplex-chat").ChatClient
|
|
11
|
-
const chat = await ChatClient.create("ws://localhost:5225")
|
|
12
|
-
await processMessages(chat)
|
|
13
|
-
const user = await chat.apiGetActiveUser()
|
|
14
|
-
|
|
15
|
-
async function processMessages(chat) {
|
|
16
|
-
for await (const m of chat.msgQ) {
|
|
17
|
-
const msg = m instanceof Promise ? await m : m
|
|
18
|
-
switch (msg.type) {
|
|
19
|
-
case "newChatItem": // do something
|
|
20
|
-
return
|
|
21
|
-
default:
|
|
22
|
-
console.log(msg)
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## Documentation
|
|
31
|
+
See the example of a simple chat bot in [squaring-bot.js](./examples/squaring-bot.js):
|
|
29
32
|
|
|
30
|
-
|
|
33
|
+
- start `simplex-chat` as a server on port 5225: `simplex-chat -p 5225 -d test_db`
|
|
34
|
+
- run chatbot: `node examples/squaring-bot`
|
|
35
|
+
- connect to chatbot via SimpleX Chat client using the address of the chat bot
|
|
31
36
|
|
|
32
|
-
|
|
33
|
-
- available commands - `ChatCommand` type in [command.ts](./src/command.ts) - if some command is not created as a ChatClient method, you can pass any command object to `sendChatCommand` method, or if the type for some command is not available you can pass command string (same strings as supported in terminal/mobile API) to `sendChatCmdStr` method.
|
|
34
|
-
- available chat messages - `ChatResponse` type in [response.ts](./src/command.ts).
|
|
37
|
+
## Documentation
|
|
35
38
|
|
|
36
|
-
|
|
39
|
+
Please refer to the available client API in [client.ts](./src/client.ts).
|
|
37
40
|
|
|
38
|
-
##
|
|
41
|
+
## License
|
|
39
42
|
|
|
40
43
|
[AGPL v3](./LICENSE)
|
package/dist/client.d.ts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { ABQueue } from "./queue";
|
|
2
2
|
import { ChatServer, ChatResponseError } from "./transport";
|
|
3
|
-
import { ChatCommand, ChatType } from "./command";
|
|
4
|
-
import { ChatResponse } from "./response";
|
|
3
|
+
import { ChatCommand, ChatType, Profile } from "./command";
|
|
4
|
+
import { ChatResponse, ChatInfo } from "./response";
|
|
5
5
|
import * as CC from "./command";
|
|
6
|
-
import * as
|
|
6
|
+
import * as CR from "./response";
|
|
7
7
|
export interface ChatClientConfig {
|
|
8
8
|
readonly qSize: number;
|
|
9
9
|
readonly tcpTimeout: number;
|
|
10
10
|
}
|
|
11
11
|
export interface Request {
|
|
12
12
|
readonly resolve: (resp: ChatResponse) => void;
|
|
13
|
-
readonly reject: (err?: ChatResponseError |
|
|
13
|
+
readonly reject: (err?: ChatResponseError | CR.CRChatCmdError) => void;
|
|
14
14
|
}
|
|
15
15
|
export declare class ChatCommandError extends Error {
|
|
16
16
|
message: string;
|
|
@@ -36,18 +36,40 @@ export declare class ChatClient {
|
|
|
36
36
|
sendChatCmdStr(cmd: string): Promise<ChatResponse>;
|
|
37
37
|
sendChatCommand(command: ChatCommand): Promise<ChatResponse>;
|
|
38
38
|
disconnect(): Promise<void>;
|
|
39
|
-
apiGetActiveUser(): Promise<
|
|
40
|
-
apiCreateActiveUser(profile: CC.Profile): Promise<
|
|
39
|
+
apiGetActiveUser(): Promise<CR.User | undefined>;
|
|
40
|
+
apiCreateActiveUser(profile: CC.Profile): Promise<CR.User>;
|
|
41
41
|
apiStartChat(): Promise<void>;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
42
|
+
apiStopChat(): Promise<void>;
|
|
43
|
+
apiSetIncognito(incognito: boolean): Promise<void>;
|
|
44
|
+
addressAutoAccept(autoAccept: boolean, autoReply: CC.MsgContent): Promise<void>;
|
|
45
|
+
apiGetChats(): Promise<CR.Chat[]>;
|
|
46
|
+
apiGetChat(chatType: ChatType, chatId: number, pagination?: CC.ChatPagination, search?: string | undefined): Promise<CR.Chat>;
|
|
47
|
+
apiSendMessage(chatType: ChatType, chatId: number, message: CC.ComposedMessage): Promise<CR.AChatItem>;
|
|
48
|
+
apiSendTextMessage(chatType: ChatType, chatId: number, text: string): Promise<CR.AChatItem>;
|
|
49
|
+
apiUpdateChatItem(chatType: ChatType, chatId: number, chatItemId: CC.ChatItemId, msgContent: CC.MsgContent): Promise<CR.ChatItem>;
|
|
50
|
+
apiDeleteChatItem(chatType: ChatType, chatId: number, chatItemId: number, deleteMode: CC.DeleteMode): Promise<CR.ChatItem>;
|
|
48
51
|
apiCreateLink(): Promise<string>;
|
|
49
52
|
apiConnect(connReq: string): Promise<ConnReqType>;
|
|
50
53
|
apiDeleteChat(chatType: ChatType, chatId: number): Promise<void>;
|
|
54
|
+
apiClearChat(chatType: ChatType, chatId: number): Promise<ChatInfo>;
|
|
51
55
|
apiUpdateProfile(profile: CC.Profile): Promise<CC.Profile | undefined>;
|
|
56
|
+
apiSetContactAlias(contactId: number, localAlias: string): Promise<CR.Contact>;
|
|
57
|
+
apiCreateUserAddress(): Promise<string>;
|
|
58
|
+
apiDeleteUserAddress(): Promise<void>;
|
|
59
|
+
apiGetUserAddress(): Promise<string | undefined>;
|
|
60
|
+
apiAcceptContactRequest(contactReqId: number): Promise<CR.Contact>;
|
|
61
|
+
apiRejectContactRequest(contactReqId: number): Promise<void>;
|
|
62
|
+
apiChatRead(chatType: ChatType, chatId: number, itemRange?: CC.ItemRange): Promise<void>;
|
|
63
|
+
apiContactInfo(contactId: number): Promise<[CR.ConnectionStats?, Profile?]>;
|
|
64
|
+
apiGroupMemberInfo(groupId: number, memberId: number): Promise<CR.ConnectionStats | undefined>;
|
|
65
|
+
apiReceiveFile(fileId: number): Promise<CR.AChatItem>;
|
|
66
|
+
apiNewGroup(groupProfile: CR.GroupProfile): Promise<CR.GroupInfo>;
|
|
67
|
+
apiAddMember(groupId: number, contactId: number, memberRole: CC.GroupMemberRole): Promise<CR.GroupMember>;
|
|
68
|
+
apiJoinGroup(groupId: number): Promise<CR.GroupInfo>;
|
|
69
|
+
apiRemoveMember(groupId: number, memberId: number): Promise<CR.GroupMember>;
|
|
70
|
+
apiLeaveGroup(groupId: number): Promise<CR.GroupInfo>;
|
|
71
|
+
apiListMembers(groupId: number): Promise<CR.GroupMember[]>;
|
|
72
|
+
apiUpdateGroup(groupId: number, groupProfile: CR.GroupProfile): Promise<CR.GroupInfo>;
|
|
73
|
+
private okChatCommand;
|
|
52
74
|
get connected(): boolean;
|
|
53
75
|
}
|
package/dist/client.js
CHANGED
|
@@ -1,19 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ChatClient = exports.ConnReqType = exports.ChatCommandError = void 0;
|
|
4
|
+
const queue_1 = require("./queue");
|
|
5
|
+
const transport_1 = require("./transport");
|
|
6
|
+
const command_1 = require("./command");
|
|
7
|
+
const CC = require("./command");
|
|
8
|
+
class ChatCommandError extends Error {
|
|
5
9
|
constructor(message, response) {
|
|
6
10
|
super(message);
|
|
7
11
|
this.message = message;
|
|
8
12
|
this.response = response;
|
|
9
13
|
}
|
|
10
14
|
}
|
|
11
|
-
|
|
15
|
+
exports.ChatCommandError = ChatCommandError;
|
|
16
|
+
var ConnReqType;
|
|
12
17
|
(function (ConnReqType) {
|
|
13
18
|
ConnReqType["Invitation"] = "invitation";
|
|
14
19
|
ConnReqType["Contact"] = "contact";
|
|
15
|
-
})(ConnReqType || (ConnReqType = {}));
|
|
16
|
-
|
|
20
|
+
})(ConnReqType = exports.ConnReqType || (exports.ConnReqType = {}));
|
|
21
|
+
class ChatClient {
|
|
17
22
|
constructor(server, config, msgQ, client, transport) {
|
|
18
23
|
this.server = server;
|
|
19
24
|
this.config = config;
|
|
@@ -24,16 +29,16 @@ export class ChatClient {
|
|
|
24
29
|
this.clientCorrId = 0;
|
|
25
30
|
this.sentCommands = new Map();
|
|
26
31
|
}
|
|
27
|
-
static async create(server = localServer, cfg = ChatClient.defaultConfig) {
|
|
28
|
-
const transport = await ChatTransport.connect(server, cfg.tcpTimeout, cfg.qSize);
|
|
29
|
-
const msgQ = new ABQueue(cfg.qSize);
|
|
30
|
-
const client = runClient().then(noop, noop);
|
|
32
|
+
static async create(server = transport_1.localServer, cfg = ChatClient.defaultConfig) {
|
|
33
|
+
const transport = await transport_1.ChatTransport.connect(server, cfg.tcpTimeout, cfg.qSize);
|
|
34
|
+
const msgQ = new queue_1.ABQueue(cfg.qSize);
|
|
35
|
+
const client = runClient().then(transport_1.noop, transport_1.noop);
|
|
31
36
|
const c = new ChatClient(server, cfg, msgQ, client, transport);
|
|
32
37
|
return c;
|
|
33
38
|
async function runClient() {
|
|
34
39
|
for await (const t of transport) {
|
|
35
40
|
const apiResp = (t instanceof Promise ? await t : t);
|
|
36
|
-
if (apiResp instanceof ChatResponseError) {
|
|
41
|
+
if (apiResp instanceof transport_1.ChatResponseError) {
|
|
37
42
|
console.log("chat response error: ", apiResp);
|
|
38
43
|
}
|
|
39
44
|
else {
|
|
@@ -42,12 +47,7 @@ export class ChatClient {
|
|
|
42
47
|
const req = c.sentCommands.get(corrId);
|
|
43
48
|
if (req) {
|
|
44
49
|
c.sentCommands.delete(corrId);
|
|
45
|
-
|
|
46
|
-
req.reject(resp);
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
req.resolve(resp);
|
|
50
|
-
}
|
|
50
|
+
req.resolve(resp);
|
|
51
51
|
}
|
|
52
52
|
else {
|
|
53
53
|
// TODO send error to errQ?
|
|
@@ -65,7 +65,7 @@ export class ChatClient {
|
|
|
65
65
|
sendChatCmdStr(cmd) {
|
|
66
66
|
const corrId = `${++this.clientCorrId}`;
|
|
67
67
|
const t = { corrId, cmd };
|
|
68
|
-
this.transport.write(t).then(noop, noop);
|
|
68
|
+
this.transport.write(t).then(transport_1.noop, transport_1.noop);
|
|
69
69
|
return new Promise((resolve, reject) => this.sentCommands.set(corrId, { resolve, reject }));
|
|
70
70
|
}
|
|
71
71
|
sendChatCommand(command) {
|
|
@@ -100,14 +100,29 @@ export class ChatClient {
|
|
|
100
100
|
throw new ChatCommandError("error starting chat", r);
|
|
101
101
|
}
|
|
102
102
|
}
|
|
103
|
+
async apiStopChat() {
|
|
104
|
+
const r = await this.sendChatCommand({ type: "apiStopChat" });
|
|
105
|
+
if (r.type !== "chatStopped") {
|
|
106
|
+
throw new ChatCommandError("error stopping chat", r);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
apiSetIncognito(incognito) {
|
|
110
|
+
return this.okChatCommand({ type: "setIncognito", incognito });
|
|
111
|
+
}
|
|
112
|
+
async addressAutoAccept(autoAccept, autoReply) {
|
|
113
|
+
const r = await this.sendChatCommand({ type: "addressAutoAccept", autoAccept, autoReply });
|
|
114
|
+
if (r.type !== "userContactLinkUpdated") {
|
|
115
|
+
throw new ChatCommandError("error changing user contact address mode", r);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
103
118
|
async apiGetChats() {
|
|
104
119
|
const r = await this.sendChatCommand({ type: "apiGetChats" });
|
|
105
120
|
if (r.type === "apiChats")
|
|
106
121
|
return r.chats;
|
|
107
122
|
throw new ChatCommandError("error loading chats", r);
|
|
108
123
|
}
|
|
109
|
-
async apiGetChat(chatType, chatId, pagination = { count: 100 }) {
|
|
110
|
-
const r = await this.sendChatCommand({ type: "apiGetChat", chatType, chatId, pagination });
|
|
124
|
+
async apiGetChat(chatType, chatId, pagination = { count: 100 }, search = undefined) {
|
|
125
|
+
const r = await this.sendChatCommand({ type: "apiGetChat", chatType, chatId, pagination, search });
|
|
111
126
|
if (r.type === "apiChat")
|
|
112
127
|
return r.chat;
|
|
113
128
|
throw new ChatCommandError("error loading chat", r);
|
|
@@ -133,16 +148,6 @@ export class ChatClient {
|
|
|
133
148
|
return r.toChatItem.chatItem;
|
|
134
149
|
throw new ChatCommandError("error deleting chat item", r);
|
|
135
150
|
}
|
|
136
|
-
// func getUserSMPServers() throws -> [String] {
|
|
137
|
-
// let r = chatSendCmdSync(.getUserSMPServers)
|
|
138
|
-
// if case let .userSMPServers(smpServers) = r { return smpServers }
|
|
139
|
-
// throw r
|
|
140
|
-
// }
|
|
141
|
-
// func setUserSMPServers(smpServers: [String]) async throws {
|
|
142
|
-
// let r = await chatSendCmd(.setUserSMPServers(smpServers: smpServers))
|
|
143
|
-
// if case .cmdOk = r { return }
|
|
144
|
-
// throw r
|
|
145
|
-
// }
|
|
146
151
|
async apiCreateLink() {
|
|
147
152
|
const r = await this.sendChatCommand({ type: "addContact" });
|
|
148
153
|
if (r.type === "invitation")
|
|
@@ -162,8 +167,27 @@ export class ChatClient {
|
|
|
162
167
|
}
|
|
163
168
|
async apiDeleteChat(chatType, chatId) {
|
|
164
169
|
const r = await this.sendChatCommand({ type: "apiDeleteChat", chatType, chatId });
|
|
165
|
-
|
|
166
|
-
|
|
170
|
+
switch (chatType) {
|
|
171
|
+
case command_1.ChatType.Direct:
|
|
172
|
+
if (r.type === "contactDeleted")
|
|
173
|
+
return;
|
|
174
|
+
break;
|
|
175
|
+
case command_1.ChatType.Group:
|
|
176
|
+
if (r.type === "groupDeletedUser")
|
|
177
|
+
return;
|
|
178
|
+
break;
|
|
179
|
+
case command_1.ChatType.ContactRequest:
|
|
180
|
+
if (r.type === "contactConnectionDeleted")
|
|
181
|
+
return;
|
|
182
|
+
break;
|
|
183
|
+
}
|
|
184
|
+
throw new ChatCommandError("error deleting chat", r);
|
|
185
|
+
}
|
|
186
|
+
async apiClearChat(chatType, chatId) {
|
|
187
|
+
const r = await this.sendChatCommand({ type: "apiClearChat", chatType, chatId });
|
|
188
|
+
if (r.type === "chatCleared")
|
|
189
|
+
return r.chatInfo;
|
|
190
|
+
throw new ChatCommandError("error clearing chat", r);
|
|
167
191
|
}
|
|
168
192
|
async apiUpdateProfile(profile) {
|
|
169
193
|
const r = await this.sendChatCommand({ type: "apiUpdateProfile", profile });
|
|
@@ -176,90 +200,121 @@ export class ChatClient {
|
|
|
176
200
|
throw new ChatCommandError("error updating profile", r);
|
|
177
201
|
}
|
|
178
202
|
}
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
203
|
+
async apiSetContactAlias(contactId, localAlias) {
|
|
204
|
+
const r = await this.sendChatCommand({ type: "apiSetContactAlias", contactId, localAlias });
|
|
205
|
+
if (r.type === "contactAliasUpdated")
|
|
206
|
+
return r.toContact;
|
|
207
|
+
throw new ChatCommandError("error updating contact alias", r);
|
|
208
|
+
}
|
|
209
|
+
async apiCreateUserAddress() {
|
|
210
|
+
const r = await this.sendChatCommand({ type: "createMyAddress" });
|
|
211
|
+
if (r.type === "userContactLinkCreated")
|
|
212
|
+
return r.connReqContact;
|
|
213
|
+
throw new ChatCommandError("error creating user address", r);
|
|
214
|
+
}
|
|
215
|
+
async apiDeleteUserAddress() {
|
|
216
|
+
const r = await this.sendChatCommand({ type: "deleteMyAddress" });
|
|
217
|
+
if (r.type === "userContactLinkDeleted")
|
|
218
|
+
return;
|
|
219
|
+
throw new ChatCommandError("error deleting user address", r);
|
|
220
|
+
}
|
|
221
|
+
async apiGetUserAddress() {
|
|
222
|
+
const r = await this.sendChatCommand({ type: "showMyAddress" });
|
|
223
|
+
switch (r.type) {
|
|
224
|
+
case "userContactLink":
|
|
225
|
+
return r.contactLink.connReqContact;
|
|
226
|
+
default:
|
|
227
|
+
if (r.type === "chatCmdError" && r.chatError.type === "errorStore" && r.chatError.storeError.type === "userContactLinkNotFound") {
|
|
228
|
+
return undefined;
|
|
229
|
+
}
|
|
230
|
+
throw new ChatCommandError("error loading user address", r);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
async apiAcceptContactRequest(contactReqId) {
|
|
234
|
+
const r = await this.sendChatCommand({ type: "apiAcceptContact", contactReqId });
|
|
235
|
+
if (r.type === "acceptingContactRequest")
|
|
236
|
+
return r.contact;
|
|
237
|
+
throw new ChatCommandError("error accepting contact request", r);
|
|
238
|
+
}
|
|
239
|
+
async apiRejectContactRequest(contactReqId) {
|
|
240
|
+
const r = await this.sendChatCommand({ type: "apiRejectContact", contactReqId });
|
|
241
|
+
if (r.type === "contactRequestRejected")
|
|
242
|
+
return;
|
|
243
|
+
throw new ChatCommandError("error rejecting contact request", r);
|
|
244
|
+
}
|
|
245
|
+
apiChatRead(chatType, chatId, itemRange) {
|
|
246
|
+
return this.okChatCommand({ type: "apiChatRead", chatType, chatId, itemRange });
|
|
247
|
+
}
|
|
248
|
+
async apiContactInfo(contactId) {
|
|
249
|
+
const r = await this.sendChatCommand({ type: "apiContactInfo", contactId });
|
|
250
|
+
if (r.type === "contactInfo")
|
|
251
|
+
return [r.connectionStats, r.customUserProfile];
|
|
252
|
+
throw new ChatCommandError("error getting contact info", r);
|
|
253
|
+
}
|
|
254
|
+
async apiGroupMemberInfo(groupId, memberId) {
|
|
255
|
+
const r = await this.sendChatCommand({ type: "apiGroupMemberInfo", groupId, memberId });
|
|
256
|
+
if (r.type === "groupMemberInfo")
|
|
257
|
+
return r.connectionStats_;
|
|
258
|
+
throw new ChatCommandError("error getting group info", r);
|
|
259
|
+
}
|
|
260
|
+
async apiReceiveFile(fileId) {
|
|
261
|
+
const r = await this.sendChatCommand({ type: "receiveFile", fileId });
|
|
262
|
+
if (r.type === "rcvFileAccepted")
|
|
263
|
+
return r.chatItem;
|
|
264
|
+
throw new ChatCommandError("error receiving file", r);
|
|
265
|
+
}
|
|
266
|
+
async apiNewGroup(groupProfile) {
|
|
267
|
+
const r = await this.sendChatCommand({ type: "newGroup", groupProfile });
|
|
268
|
+
if (r.type === "groupCreated")
|
|
269
|
+
return r.groupInfo;
|
|
270
|
+
throw new ChatCommandError("error creating group", r);
|
|
271
|
+
}
|
|
272
|
+
async apiAddMember(groupId, contactId, memberRole) {
|
|
273
|
+
const r = await this.sendChatCommand({ type: "apiAddMember", groupId, contactId, memberRole });
|
|
274
|
+
if (r.type === "sentGroupInvitation")
|
|
275
|
+
return r.member;
|
|
276
|
+
throw new ChatCommandError("error adding member", r);
|
|
277
|
+
}
|
|
278
|
+
async apiJoinGroup(groupId) {
|
|
279
|
+
const r = await this.sendChatCommand({ type: "apiJoinGroup", groupId });
|
|
280
|
+
if (r.type === "userAcceptedGroupSent")
|
|
281
|
+
return r.groupInfo;
|
|
282
|
+
throw new ChatCommandError("error joining group", r);
|
|
283
|
+
}
|
|
284
|
+
async apiRemoveMember(groupId, memberId) {
|
|
285
|
+
const r = await this.sendChatCommand({ type: "apiRemoveMember", groupId, memberId });
|
|
286
|
+
if (r.type === "userDeletedMember")
|
|
287
|
+
return r.member;
|
|
288
|
+
throw new ChatCommandError("error removing member", r);
|
|
289
|
+
}
|
|
290
|
+
async apiLeaveGroup(groupId) {
|
|
291
|
+
const r = await this.sendChatCommand({ type: "apiLeaveGroup", groupId });
|
|
292
|
+
if (r.type === "leftMemberUser")
|
|
293
|
+
return r.groupInfo;
|
|
294
|
+
throw new ChatCommandError("error leaving group", r);
|
|
295
|
+
}
|
|
296
|
+
async apiListMembers(groupId) {
|
|
297
|
+
const r = await this.sendChatCommand({ type: "apiListMembers", groupId });
|
|
298
|
+
if (r.type === "groupMembers")
|
|
299
|
+
return r.group.members;
|
|
300
|
+
throw new ChatCommandError("error getting group members", r);
|
|
301
|
+
}
|
|
302
|
+
async apiUpdateGroup(groupId, groupProfile) {
|
|
303
|
+
const r = await this.sendChatCommand({ type: "apiUpdateGroupProfile", groupId, groupProfile });
|
|
304
|
+
if (r.type === "groupUpdated")
|
|
305
|
+
return r.toGroup;
|
|
306
|
+
throw new ChatCommandError("error updating group", r);
|
|
307
|
+
}
|
|
308
|
+
async okChatCommand(command) {
|
|
309
|
+
const r = await this.sendChatCommand(command);
|
|
310
|
+
if (r.type !== "cmdOk")
|
|
311
|
+
throw new ChatCommandError(`${command.type} command error`, r);
|
|
312
|
+
}
|
|
259
313
|
get connected() {
|
|
260
314
|
return this._connected;
|
|
261
315
|
}
|
|
262
316
|
}
|
|
317
|
+
exports.ChatClient = ChatClient;
|
|
263
318
|
ChatClient.defaultConfig = {
|
|
264
319
|
qSize: 16,
|
|
265
320
|
tcpTimeout: 4000,
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|