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 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
- ```javascript
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
- Please refer to:
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
- - available client API - [client.ts](./src/client.ts).
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
- **Please note**: you should NOT use local display names that are supported in terminal app, as they can change when contact profile is updated and you can have race conditions - use commands that use chat IDs.
39
+ Please refer to the available client API in [client.ts](./src/client.ts).
37
40
 
38
- ## Lisense
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 C from "./response";
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 | C.CRChatCmdError) => void;
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<C.User | undefined>;
40
- apiCreateActiveUser(profile: CC.Profile): Promise<C.User>;
39
+ apiGetActiveUser(): Promise<CR.User | undefined>;
40
+ apiCreateActiveUser(profile: CC.Profile): Promise<CR.User>;
41
41
  apiStartChat(): Promise<void>;
42
- apiGetChats(): Promise<C.Chat[]>;
43
- apiGetChat(chatType: ChatType, chatId: number, pagination?: CC.ChatPagination): Promise<C.Chat>;
44
- apiSendMessage(chatType: ChatType, chatId: number, message: CC.ComposedMessage): Promise<C.AChatItem>;
45
- apiSendTextMessage(chatType: ChatType, chatId: number, text: string): Promise<C.AChatItem>;
46
- apiUpdateChatItem(chatType: ChatType, chatId: number, chatItemId: CC.ChatItemId, msgContent: CC.MsgContent): Promise<C.ChatItem>;
47
- apiDeleteChatItem(chatType: ChatType, chatId: number, chatItemId: number, deleteMode: CC.DeleteMode): Promise<C.ChatItem>;
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
- import { ABQueue } from "./queue";
2
- import { ChatTransport, ChatResponseError, localServer, noop } from "./transport";
3
- import * as CC from "./command";
4
- export class ChatCommandError extends Error {
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
- export var ConnReqType;
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
- export class ChatClient {
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
- if (resp.type === "chatCmdError") {
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
- if (r.type !== "contactDeleted")
166
- throw new ChatCommandError("error deleting chat", r);
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
- // func apiParseMarkdown(text: String) throws -> [FormattedText]? {
180
- // let r = chatSendCmdSync(.apiParseMarkdown(text: text))
181
- // if case let .apiParsedMarkdown(formattedText) = r { return formattedText }
182
- // throw r
183
- // }
184
- // func apiCreateUserAddress() async throws -> String {
185
- // let r = await chatSendCmd(.createMyAddress)
186
- // if case let .userContactLinkCreated(connReq) = r { return connReq }
187
- // throw r
188
- // }
189
- // func apiDeleteUserAddress() async throws {
190
- // let r = await chatSendCmd(.deleteMyAddress)
191
- // if case .userContactLinkDeleted = r { return }
192
- // throw r
193
- // }
194
- // func apiGetUserAddress() async throws -> String? {
195
- // let r = await chatSendCmd(.showMyAddress)
196
- // switch r {
197
- // case let .userContactLink(connReq):
198
- // return connReq
199
- // case .chatCmdError(chatError: .errorStore(storeError: .userContactLinkNotFound)):
200
- // return nil
201
- // default: throw r
202
- // }
203
- // }
204
- // func apiAcceptContactRequest(contactReqId: Int64) async throws -> Contact {
205
- // let r = await chatSendCmd(.apiAcceptContact(contactReqId: contactReqId))
206
- // if case let .acceptingContactRequest(contact) = r { return contact }
207
- // throw r
208
- // }
209
- // func apiRejectContactRequest(contactReqId: Int64) async throws {
210
- // let r = await chatSendCmd(.apiRejectContact(contactReqId: contactReqId))
211
- // if case .contactRequestRejected = r { return }
212
- // throw r
213
- // }
214
- // func apiChatRead(type: ChatType, id: Int64, itemRange: (Int64, Int64)) async throws {
215
- // let r = await chatSendCmd(.apiChatRead(type: type, id: id, itemRange: itemRange))
216
- // if case .cmdOk = r { return }
217
- // throw r
218
- // }
219
- // func acceptContactRequest(_ contactRequest: UserContactRequest) async {
220
- // do {
221
- // let contact = try await apiAcceptContactRequest(contactReqId: contactRequest.apiId)
222
- // let chat = Chat(chatInfo: ChatInfo.direct(contact: contact), chatItems: [])
223
- // DispatchQueue.main.async { ChatModel.shared.replaceChat(contactRequest.id, chat) }
224
- // } catch let error {
225
- // logger.error("acceptContactRequest error: \(error.localizedDescription)")
226
- // }
227
- // }
228
- // func rejectContactRequest(_ contactRequest: UserContactRequest) async {
229
- // do {
230
- // try await apiRejectContactRequest(contactReqId: contactRequest.apiId)
231
- // DispatchQueue.main.async { ChatModel.shared.removeChat(contactRequest.id) }
232
- // } catch let error {
233
- // logger.error("rejectContactRequest: \(error.localizedDescription)")
234
- // }
235
- // }
236
- // func markChatRead(_ chat: Chat) async {
237
- // do {
238
- // let minItemId = chat.chatStats.minUnreadItemId
239
- // let itemRange = (minItemId, chat.chatItems.last?.id ?? minItemId)
240
- // let cInfo = chat.chatInfo
241
- // try await apiChatRead(type: cInfo.chatType, id: cInfo.apiId, itemRange: itemRange)
242
- // DispatchQueue.main.async { ChatModel.shared.markChatItemsRead(cInfo) }
243
- // } catch {
244
- // logger.error("markChatRead apiChatRead error: \(error.localizedDescription)")
245
- // }
246
- // }
247
- // func markChatItemRead(_ cInfo: ChatInfo, _ cItem: ChatItem) async {
248
- // do {
249
- // try await apiChatRead(type: cInfo.chatType, id: cInfo.apiId, itemRange: (cItem.id, cItem.id))
250
- // DispatchQueue.main.async { ChatModel.shared.markChatItemRead(cInfo, cItem) }
251
- // } catch {
252
- // logger.error("markChatItemRead apiChatRead error: \(error.localizedDescription)")
253
- // }
254
- // }
255
- // private async okChatCommand(command: ChatCommand): Promise<void> {
256
- // const resp = await this.sendChatCommand(command)
257
- // if (resp.type !== "cmdOk") throw new ChatCommandError("unexpected response", resp)
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,
@@ -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":";;;AAAA,mCAA+B;AAC/B,2CAA4H;AAC5H,uCAAwD;AAExD,gCAA+B;AAa/B,MAAa,gBAAiB,SAAQ,KAAK;IACzC,YAAmB,OAAe,EAAS,QAAsB;QAC/D,KAAK,CAAC,OAAO,CAAC,CAAA;QADG,YAAO,GAAP,OAAO,CAAQ;QAAS,aAAQ,GAAR,QAAQ,CAAc;IAEjE,CAAC;CACF;AAJD,4CAIC;AAED,IAAY,WAGX;AAHD,WAAY,WAAW;IACrB,wCAAyB,CAAA;IACzB,kCAAmB,CAAA;AACrB,CAAC,EAHW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAGtB;AAED,MAAa,UAAU;IAUrB,YACW,MAA2B,EAC3B,MAAwB,EACxB,IAA2B,EAC3B,MAAqB,EACb,SAAwB;QAJhC,WAAM,GAAN,MAAM,CAAqB;QAC3B,WAAM,GAAN,MAAM,CAAkB;QACxB,SAAI,GAAJ,IAAI,CAAuB;QAC3B,WAAM,GAAN,MAAM,CAAe;QACb,cAAS,GAAT,SAAS,CAAe;QAdnC,eAAU,GAAG,IAAI,CAAA;QACjB,iBAAY,GAAG,CAAC,CAAA;QACP,iBAAY,GAAG,IAAI,GAAG,EAAmB,CAAA;IAavD,CAAC;IAEJ,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,SAA8B,uBAAW,EAAE,MAAwB,UAAU,CAAC,aAAa;QAC7G,MAAM,SAAS,GAAG,MAAM,yBAAa,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,CAAA;QAChF,MAAM,IAAI,GAAG,IAAI,eAAO,CAAe,GAAG,CAAC,KAAK,CAAC,CAAA;QACjD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC,IAAI,CAAC,gBAAI,EAAE,gBAAI,CAAC,CAAA;QAC3C,MAAM,CAAC,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;QAC9D,OAAO,CAAC,CAAA;QAER,KAAK,UAAU,SAAS;YACtB,IAAI,KAAK,EAAE,MAAM,CAAC,IAAI,SAAS,EAAE;gBAC/B,MAAM,OAAO,GAAG,CAAC,CAAC,YAAY,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAwC,CAAA;gBAC3F,IAAI,OAAO,YAAY,6BAAiB,EAAE;oBACxC,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAA;iBAC9C;qBAAM;oBACL,MAAM,EAAC,MAAM,EAAE,IAAI,EAAC,GAAG,OAAO,CAAA;oBAC9B,IAAI,MAAM,EAAE;wBACV,MAAM,GAAG,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;wBACtC,IAAI,GAAG,EAAE;4BACP,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;4BAC7B,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;yBAClB;6BAAM;4BACL,2BAA2B;4BAC3B,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,OAAO,CAAC,CAAA;yBAC5D;qBACF;yBAAM;wBACL,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;qBACzB;iBACF;aACF;YACD,CAAC,CAAC,UAAU,GAAG,KAAK,CAAA;QACtB,CAAC;IACH,CAAC;IAED,cAAc,CAAC,GAAW;QACxB,MAAM,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,YAAY,EAAE,CAAA;QACvC,MAAM,CAAC,GAAmB,EAAC,MAAM,EAAE,GAAG,EAAC,CAAA;QACvC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAI,EAAE,gBAAI,CAAC,CAAA;QACxC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,EAAC,OAAO,EAAE,MAAM,EAAC,CAAC,CAAC,CAAA;IAC3F,CAAC;IAED,eAAe,CAAC,OAAoB;QAClC,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;IACnD,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;QAC5B,MAAM,IAAI,CAAC,MAAM,CAAA;IACnB,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAC,IAAI,EAAE,gBAAgB,EAAC,CAAC,CAAA;QAC9D,QAAQ,CAAC,CAAC,IAAI,EAAE;YACd,KAAK,YAAY;gBACf,OAAO,CAAC,CAAC,IAAI,CAAA;YACf,KAAK,cAAc;gBACjB,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,KAAK,cAAc;oBAAE,OAAO,SAAS,CAAA;gBACnG,MAAM,IAAI,gBAAgB,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAA;YAC5D;gBACE,MAAM,IAAI,gBAAgB,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAA;SACvD;IACH,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,OAAmB;QAC3C,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAC,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAC,CAAC,CAAA;QACzE,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY;YAAE,OAAO,CAAC,CAAC,IAAI,CAAA;QAC1C,MAAM,IAAI,gBAAgB,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAA;IACtD,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,CAAA;QACzD,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,EAAE;YACxD,MAAM,IAAI,gBAAgB,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAA;SACrD;IACH,CAAC;IAED,KAAK,CAAC,WAAW;QACf,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAC,IAAI,EAAE,aAAa,EAAC,CAAC,CAAA;QAC3D,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,EAAE;YAC5B,MAAM,IAAI,gBAAgB,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAA;SACrD;IACH,CAAC;IAED,eAAe,CAAC,SAAkB;QAChC,OAAO,IAAI,CAAC,aAAa,CAAC,EAAC,IAAI,EAAE,cAAc,EAAE,SAAS,EAAC,CAAC,CAAA;IAC9D,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,UAAmB,EAAE,SAAwB;QACnE,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAC,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,SAAS,EAAC,CAAC,CAAA;QACxF,IAAI,CAAC,CAAC,IAAI,KAAK,wBAAwB,EAAE;YACvC,MAAM,IAAI,gBAAgB,CAAC,0CAA0C,EAAE,CAAC,CAAC,CAAA;SAC1E;IACH,CAAC;IAED,KAAK,CAAC,WAAW;QACf,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAC,IAAI,EAAE,aAAa,EAAC,CAAC,CAAA;QAC3D,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU;YAAE,OAAO,CAAC,CAAC,KAAK,CAAA;QACzC,MAAM,IAAI,gBAAgB,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAA;IACtD,CAAC;IAED,KAAK,CAAC,UAAU,CACd,QAAkB,EAClB,MAAc,EACd,aAAgC,EAAC,KAAK,EAAE,GAAG,EAAC,EAC5C,SAA6B,SAAS;QAEtC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAC,CAAC,CAAA;QAChG,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,CAAC,IAAI,CAAA;QACvC,MAAM,IAAI,gBAAgB,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAA;IACrD,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,QAAkB,EAAE,MAAc,EAAE,OAA2B;QAClF,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAC,CAAC,CAAA;QACzF,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa;YAAE,OAAO,CAAC,CAAC,QAAQ,CAAA;QAC/C,MAAM,IAAI,gBAAgB,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAA;IACtD,CAAC;IAED,kBAAkB,CAAC,QAAkB,EAAE,MAAc,EAAE,IAAY;QACjE,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAC,UAAU,EAAE,EAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAC,EAAC,CAAC,CAAA;IAClF,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,QAAkB,EAAE,MAAc,EAAE,UAAyB,EAAE,UAAyB;QAC9G,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAC,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAC,CAAC,CAAA;QAC3G,IAAI,CAAC,CAAC,IAAI,KAAK,iBAAiB;YAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAA;QAC5D,MAAM,IAAI,gBAAgB,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAA;IAC3D,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,QAAkB,EAAE,MAAc,EAAE,UAAkB,EAAE,UAAyB;QACvG,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAC,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAC,CAAC,CAAA;QAC3G,IAAI,CAAC,CAAC,IAAI,KAAK,iBAAiB;YAAE,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAA;QAC9D,MAAM,IAAI,gBAAgB,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAA;IAC3D,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAC,IAAI,EAAE,YAAY,EAAC,CAAC,CAAA;QAC1D,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY;YAAE,OAAO,CAAC,CAAC,iBAAiB,CAAA;QACvD,MAAM,IAAI,gBAAgB,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAA;IACtD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAe;QAC9B,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAC,CAAC,CAAA;QAChE,QAAQ,CAAC,CAAC,IAAI,EAAE;YACd,KAAK,kBAAkB;gBACrB,OAAO,WAAW,CAAC,UAAU,CAAA;YAC/B,KAAK,gBAAgB;gBACnB,OAAO,WAAW,CAAC,OAAO,CAAA;YAC5B;gBACE,MAAM,IAAI,gBAAgB,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAA;SACpD;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAkB,EAAE,MAAc;QACpD,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAC,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,EAAC,CAAC,CAAA;QAC/E,QAAQ,QAAQ,EAAE;YAChB,KAAK,kBAAQ,CAAC,MAAM;gBAClB,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB;oBAAE,OAAM;gBACvC,MAAK;YACP,KAAK,kBAAQ,CAAC,KAAK;gBACjB,IAAI,CAAC,CAAC,IAAI,KAAK,kBAAkB;oBAAE,OAAM;gBACzC,MAAK;YACP,KAAK,kBAAQ,CAAC,cAAc;gBAC1B,IAAI,CAAC,CAAC,IAAI,KAAK,0BAA0B;oBAAE,OAAM;gBACjD,MAAK;SACR;QACD,MAAM,IAAI,gBAAgB,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAA;IACtD,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,QAAkB,EAAE,MAAc;QACnD,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAC,CAAC,CAAA;QAC9E,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa;YAAE,OAAO,CAAC,CAAC,QAAQ,CAAA;QAC/C,MAAM,IAAI,gBAAgB,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAA;IACtD,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAAmB;QACxC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAC,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAC,CAAC,CAAA;QACzE,QAAQ,CAAC,CAAC,IAAI,EAAE;YACd,KAAK,qBAAqB;gBACxB,OAAO,SAAS,CAAA;YAClB,KAAK,oBAAoB;gBACvB,OAAO,CAAC,CAAC,SAAS,CAAA;YACpB;gBACE,MAAM,IAAI,gBAAgB,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAA;SAC1D;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,SAAiB,EAAE,UAAkB;QAC5D,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAC,IAAI,EAAE,oBAAoB,EAAE,SAAS,EAAE,UAAU,EAAC,CAAC,CAAA;QACzF,IAAI,CAAC,CAAC,IAAI,KAAK,qBAAqB;YAAE,OAAO,CAAC,CAAC,SAAS,CAAA;QACxD,MAAM,IAAI,gBAAgB,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAA;IAC/D,CAAC;IAED,KAAK,CAAC,oBAAoB;QACxB,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAC,IAAI,EAAE,iBAAiB,EAAC,CAAC,CAAA;QAC/D,IAAI,CAAC,CAAC,IAAI,KAAK,wBAAwB;YAAE,OAAO,CAAC,CAAC,cAAc,CAAA;QAChE,MAAM,IAAI,gBAAgB,CAAC,6BAA6B,EAAE,CAAC,CAAC,CAAA;IAC9D,CAAC;IAED,KAAK,CAAC,oBAAoB;QACxB,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAC,IAAI,EAAE,iBAAiB,EAAC,CAAC,CAAA;QAC/D,IAAI,CAAC,CAAC,IAAI,KAAK,wBAAwB;YAAE,OAAM;QAC/C,MAAM,IAAI,gBAAgB,CAAC,6BAA6B,EAAE,CAAC,CAAC,CAAA;IAC9D,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAC,IAAI,EAAE,eAAe,EAAC,CAAC,CAAA;QAC7D,QAAQ,CAAC,CAAC,IAAI,EAAE;YACd,KAAK,iBAAiB;gBACpB,OAAO,CAAC,CAAC,WAAW,CAAC,cAAc,CAAA;YACrC;gBACE,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,KAAK,yBAAyB,EAAE;oBAC/H,OAAO,SAAS,CAAA;iBACjB;gBACD,MAAM,IAAI,gBAAgB,CAAC,4BAA4B,EAAE,CAAC,CAAC,CAAA;SAC9D;IACH,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,YAAoB;QAChD,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAC,IAAI,EAAE,kBAAkB,EAAE,YAAY,EAAC,CAAC,CAAA;QAC9E,IAAI,CAAC,CAAC,IAAI,KAAK,yBAAyB;YAAE,OAAO,CAAC,CAAC,OAAO,CAAA;QAC1D,MAAM,IAAI,gBAAgB,CAAC,iCAAiC,EAAE,CAAC,CAAC,CAAA;IAClE,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,YAAoB;QAChD,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAC,IAAI,EAAE,kBAAkB,EAAE,YAAY,EAAC,CAAC,CAAA;QAC9E,IAAI,CAAC,CAAC,IAAI,KAAK,wBAAwB;YAAE,OAAM;QAC/C,MAAM,IAAI,gBAAgB,CAAC,iCAAiC,EAAE,CAAC,CAAC,CAAA;IAClE,CAAC;IAED,WAAW,CAAC,QAAkB,EAAE,MAAc,EAAE,SAAwB;QACtE,OAAO,IAAI,CAAC,aAAa,CAAC,EAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAC,CAAC,CAAA;IAC/E,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,SAAiB;QACpC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAC,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAC,CAAC,CAAA;QACzE,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa;YAAE,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAA;QAC7E,MAAM,IAAI,gBAAgB,CAAC,4BAA4B,EAAE,CAAC,CAAC,CAAA;IAC7D,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,OAAe,EAAE,QAAgB;QACxD,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAC,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,QAAQ,EAAC,CAAC,CAAA;QACrF,IAAI,CAAC,CAAC,IAAI,KAAK,iBAAiB;YAAE,OAAO,CAAC,CAAC,gBAAgB,CAAA;QAC3D,MAAM,IAAI,gBAAgB,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAA;IAC3D,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,MAAc;QACjC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAC,IAAI,EAAE,aAAa,EAAE,MAAM,EAAC,CAAC,CAAA;QACnE,IAAI,CAAC,CAAC,IAAI,KAAK,iBAAiB;YAAE,OAAO,CAAC,CAAC,QAAQ,CAAA;QACnD,MAAM,IAAI,gBAAgB,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAA;IACvD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,YAA6B;QAC7C,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAC,IAAI,EAAE,UAAU,EAAE,YAAY,EAAC,CAAC,CAAA;QACtE,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc;YAAE,OAAO,CAAC,CAAC,SAAS,CAAA;QACjD,MAAM,IAAI,gBAAgB,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAA;IACvD,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAAe,EAAE,SAAiB,EAAE,UAA8B;QACnF,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAC,CAAC,CAAA;QAC5F,IAAI,CAAC,CAAC,IAAI,KAAK,qBAAqB;YAAE,OAAO,CAAC,CAAC,MAAM,CAAA;QACrD,MAAM,IAAI,gBAAgB,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAA;IACtD,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAAe;QAChC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAC,CAAC,CAAA;QACrE,IAAI,CAAC,CAAC,IAAI,KAAK,uBAAuB;YAAE,OAAO,CAAC,CAAC,SAAS,CAAA;QAC1D,MAAM,IAAI,gBAAgB,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAA;IACtD,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAe,EAAE,QAAgB;QACrD,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAC,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,QAAQ,EAAC,CAAC,CAAA;QAClF,IAAI,CAAC,CAAC,IAAI,KAAK,mBAAmB;YAAE,OAAO,CAAC,CAAC,MAAM,CAAA;QACnD,MAAM,IAAI,gBAAgB,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAA;IACxD,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAe;QACjC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAC,CAAC,CAAA;QACtE,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB;YAAE,OAAO,CAAC,CAAC,SAAS,CAAA;QACnD,MAAM,IAAI,gBAAgB,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAA;IACtD,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAe;QAClC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAC,CAAC,CAAA;QACvE,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc;YAAE,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAA;QACrD,MAAM,IAAI,gBAAgB,CAAC,6BAA6B,EAAE,CAAC,CAAC,CAAA;IAC9D,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAe,EAAE,YAA6B;QACjE,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAC,IAAI,EAAE,uBAAuB,EAAE,OAAO,EAAE,YAAY,EAAC,CAAC,CAAA;QAC5F,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc;YAAE,OAAO,CAAC,CAAC,OAAO,CAAA;QAC/C,MAAM,IAAI,gBAAgB,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAA;IACvD,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,OAAoB;QAC9C,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;QAC7C,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO;YAAE,MAAM,IAAI,gBAAgB,CAAC,GAAG,OAAO,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAA;IACxF,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAA;IACxB,CAAC;;AA3TH,gCA4TC;AAvTQ,wBAAa,GAAqB;IACvC,KAAK,EAAE,EAAE;IACT,UAAU,EAAE,IAAI;CACjB,CAAA"}