@only-chat/client 0.2.0-beta.6 → 1.0.0

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,4 +1,97 @@
1
1
  # only-chat
2
2
  This is a client implementation for only-chat.
3
3
 
4
- The client is a main part of the platform that processes and dispatches messages from the transport layer and from the queue.
4
+ The client is a main part of the platform that processes and dispatches messages from the transport layer and from the queue.
5
+
6
+ # Get started
7
+
8
+ ```shell
9
+ npm i --save @only-chat/client
10
+ ```
11
+
12
+ ```typescript
13
+ import { initialize as initializeClient, WsClient } from '@only-chat/client'
14
+
15
+ ...
16
+
17
+ initializeClient({queue, store, userStore, instanceId}, logger)
18
+
19
+ const ws = new WebSocketServer({ host, port })
20
+
21
+ ws.on('connection', s => new WsClient(s))
22
+ ```
23
+
24
+ # Client Statuses
25
+
26
+ | Status | Value | Description |
27
+ | :--- | :--- | :--- |
28
+ | None | 0 | The client was created, no actions have been performed with it. |
29
+ | Authenticated | 1 | The client is successfully authenticated. |
30
+ | Connected | 2 | The client is successfully connected to the server. |
31
+ | Session | 3 | The client has joined one of the chats. |
32
+ | WatchSession | 4 | The client is monitoring changes in all chats. |
33
+ | Disconnected | 0xFF | The client is successfully disconnected from the server. |
34
+
35
+ ## Request Structure
36
+
37
+ For all commands, the request is of the type `Request`:
38
+
39
+ ```typescript
40
+ {
41
+ type: string; // Command type
42
+ clientMessageId: string; // Client identifier
43
+ data: object; // Request data
44
+ }
45
+ ```
46
+
47
+ ## Command Specifications
48
+
49
+ ### Status: `None`
50
+
51
+ * Any command is treated as a connection command to the service.
52
+ * **Must be of request type:** `ConnectRequest`.
53
+
54
+ ---
55
+
56
+ ### Status: `Connected`, `Session`, or `WatchSession`
57
+
58
+ The command must be of request type `JoinRequest` or `Request`.
59
+
60
+ | Command | Description | Request Data Type |
61
+ | :--- | :--- | :--- |
62
+ | `close` | Command to close a conversation; new messages cannot be added to a closed conversation. | `ConversationRequest` |
63
+ | `delete` | Command to delete a conversation. If a user attempts to delete a conversation where they are not the creator, they will be removed from the conversation and the participant list. | `ConversationRequest` |
64
+ | `update` | Command to modify a conversation; the creator can change the title and participant list. | `ConversationRequest` |
65
+ | `find` | Search for messages in conversations. | `FindRequest` |
66
+ | `load` | Retrieve the list of the user's conversations. | `LoadRequest` |
67
+
68
+ ---
69
+
70
+ ### Status: `Connected`
71
+
72
+ The command must be of request type `JoinRequest`.
73
+
74
+ | Command | Description |
75
+ | :--- | :--- |
76
+ | `join` | Join a conversation. |
77
+ | `watch` | Monitor changes in conversations. |
78
+
79
+ ---
80
+
81
+ ### Status: `Session`
82
+
83
+ The command must be of request type `Request`.
84
+
85
+ | Command | Description | Request Data Type |
86
+ | :--- | :--- | :--- |
87
+ | `text` | Add a text message to the current conversation. | `TextMessage` |
88
+ | `file` | Add a message with a link to an external resource in the current conversation. | `FileMessage` |
89
+ | `message-update` | Command to edit a message in the current conversation; the author can modify it. | `MessageUpdate` |
90
+ | `message-delete` | Command to delete a message in the current conversation; the author can delete it. | `MessageDelete` |
91
+ | `load-messages` | Command to load messages in the current conversation. | `LoadRequest` |
92
+
93
+ ---
94
+
95
+ ## Error Handling
96
+
97
+ Any other command or an incorrect request type is considered an error and results in forced connection termination and disconnection of the client from the service.
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { UserStore } from '@only-chat/types/userStore.js';
2
- import type { Conversation, MessageStore } from '@only-chat/types/store.js';
2
+ import type { MessageStore } from '@only-chat/types/store.js';
3
3
  import type { Log } from '@only-chat/types/log.js';
4
4
  import type { Message as QueueMessage, MessageQueue } from '@only-chat/types/queue.js';
5
5
  import type { Transport } from '@only-chat/types/transport.js';
@@ -14,17 +14,11 @@ export declare enum TransportState {
14
14
  CLOSED = 3
15
15
  }
16
16
  export interface Config {
17
- queue: MessageQueue;
17
+ queue?: MessageQueue;
18
18
  store: MessageStore;
19
19
  userStore: UserStore;
20
20
  instanceId: string;
21
21
  }
22
- export interface LoadRequest {
23
- from?: number;
24
- size?: number;
25
- excludeIds?: string[];
26
- before?: Date;
27
- }
28
22
  interface ConversationInfo {
29
23
  participants: Set<string>;
30
24
  clients: WsClient[];
@@ -41,15 +35,16 @@ export declare class WsClient {
41
35
  static readonly connectedClients: Set<string>;
42
36
  static readonly watchers: Map<string, WsClient>;
43
37
  static readonly conversations: Map<string, ConversationInfo>;
38
+ static readonly joinedParticipants: Map<string, Set<string>>;
44
39
  private static readonly conversationsCache;
45
40
  connectionId?: string;
46
- conversation?: Conversation;
47
- state: WsClientState;
48
41
  id?: string;
42
+ state: WsClientState;
49
43
  private readonly transport;
44
+ private conversation?;
50
45
  private lastError?;
51
46
  constructor(t: Transport);
52
- static addClient(conversation: Conversation, wc: WsClient): Promise<void>;
47
+ private static addClient;
53
48
  private static removeClient;
54
49
  private static addWatchClient;
55
50
  private static removeWatchClient;
package/dist/index.js CHANGED
@@ -9,6 +9,45 @@ export var TransportState;
9
9
  /** The connection is closed. */
10
10
  TransportState[TransportState["CLOSED"] = 3] = "CLOSED";
11
11
  })(TransportState || (TransportState = {}));
12
+ var ErrorMessage;
13
+ (function (ErrorMessage) {
14
+ ErrorMessage["AuthenticationFailed"] = "Authentication failed";
15
+ ErrorMessage["CloseConversationFailed"] = "Close conversation failed";
16
+ ErrorMessage["ConversationAlreadyClosed"] = "Conversation already closed";
17
+ ErrorMessage["ConversationClosed"] = "Conversation closed";
18
+ ErrorMessage["ConversationNotFound"] = "Conversation not found";
19
+ ErrorMessage["ConversationTitleRequired"] = "Conversation title required";
20
+ ErrorMessage["DeleteMessageFailed"] = "Delete message failed";
21
+ ErrorMessage["IndexMessageFailed"] = "Index message failed";
22
+ ErrorMessage["LessThanTwoParticipants"] = "Less than 2 participants";
23
+ ErrorMessage["SaveConversationFailed"] = "Save conversation failed";
24
+ ErrorMessage["UpdateConversationFailed"] = "Update conversation failed";
25
+ ErrorMessage["UpdateMessageFailed"] = "Update message failed";
26
+ ErrorMessage["UserNotAllowedToCloseConversation"] = "User is not allowed to close conversation";
27
+ ErrorMessage["UserNotAllowedToDeleteMessage"] = "User is not allowed to delete message";
28
+ ErrorMessage["UserNotAllowedToUpdateConversation"] = "User is not allowed to update conversation";
29
+ ErrorMessage["UserNotAllowedToUpdateMessage"] = "User is not allowed to update message";
30
+ ErrorMessage["UnableToGetPeerToPeerConversationIdentifier"] = "Unable to get peer to peer conversation identifier";
31
+ ErrorMessage["WrongConversation"] = "Wrong conversation";
32
+ ErrorMessage["WrongConversationIdentifier"] = "Wrong conversation identifier";
33
+ ErrorMessage["WrongFileName"] = "Wrong file name";
34
+ ErrorMessage["WrongMessage"] = "Wrong message";
35
+ ErrorMessage["WrongMessageType"] = "Wrong message type";
36
+ ErrorMessage["WrongRequestType"] = "Wrong request type";
37
+ })(ErrorMessage || (ErrorMessage = {}));
38
+ var StopStatus;
39
+ (function (StopStatus) {
40
+ StopStatus["Deleted"] = "Deleted";
41
+ StopStatus["FailedConnect"] = "Failed connect";
42
+ StopStatus["FailedJoin"] = "Failed join";
43
+ StopStatus["FailedProcessConversationRequest"] = "Failed processing conversation request";
44
+ StopStatus["FailedProcessMessage"] = "Failed processing message";
45
+ StopStatus["FailedProcessRequest"] = "Failed processing request";
46
+ StopStatus["FailedWatch"] = "Failed watch";
47
+ StopStatus["Removed"] = "Removed";
48
+ StopStatus["RemovedByPrticipant"] = "Removed by new participant";
49
+ StopStatus["Stopped"] = "Stopped";
50
+ })(StopStatus || (StopStatus = {}));
12
51
  export var WsClientState;
13
52
  (function (WsClientState) {
14
53
  WsClientState[WsClientState["None"] = 0] = "None";
@@ -19,12 +58,12 @@ export var WsClientState;
19
58
  WsClientState[WsClientState["Disconnected"] = 255] = "Disconnected";
20
59
  })(WsClientState || (WsClientState = {}));
21
60
  const defaultSize = 100;
22
- const sendStates = [WsClientState.Connected, WsClientState.Session, WsClientState.WatchSession];
23
- const connectedRequestTypes = ['close', 'delete', 'load', 'update'];
61
+ const sendStates = new Set([WsClientState.Connected, WsClientState.Session, WsClientState.WatchSession]);
62
+ const connectedRequestTypes = new Set(['close', 'delete', 'find', 'load', 'update']);
24
63
  const types = ['file', 'text'];
25
64
  let instanceId = undefined;
26
65
  let logger;
27
- let queue = undefined;
66
+ let queue;
28
67
  let store = undefined;
29
68
  let userStore = undefined;
30
69
  export class WsClient {
@@ -32,12 +71,13 @@ export class WsClient {
32
71
  static connectedClients = new Set();
33
72
  static watchers = new Map();
34
73
  static conversations = new Map();
74
+ static joinedParticipants = new Map();
35
75
  static conversationsCache = new Map();
36
76
  connectionId;
37
- conversation;
38
- state = WsClientState.None;
39
77
  id;
78
+ state = WsClientState.None;
40
79
  transport;
80
+ conversation;
41
81
  lastError;
42
82
  constructor(t) {
43
83
  this.transport = t;
@@ -47,17 +87,17 @@ export class WsClient {
47
87
  }
48
88
  static async addClient(conversation, wc) {
49
89
  let info = WsClient.conversations.get(conversation.id);
50
- if (!info) {
90
+ if (info) {
91
+ info.clients.push(wc);
92
+ }
93
+ else {
51
94
  info = { participants: new Set(conversation.participants), clients: [wc] };
52
95
  WsClient.conversations.set(conversation.id, info);
53
96
  WsClient.conversationsCache.delete(conversation.id);
54
97
  }
55
- else {
56
- info.clients.push(wc);
57
- }
58
98
  for (const c of info.clients) {
59
99
  if (c.id && !info.participants.has(c.id)) {
60
- await c.stop('Removed by new participant');
100
+ await c.stop(StopStatus.RemovedByPrticipant);
61
101
  }
62
102
  }
63
103
  }
@@ -83,16 +123,9 @@ export class WsClient {
83
123
  return true;
84
124
  }
85
125
  static addWatchClient(wc) {
86
- if (wc.id) {
87
- WsClient.watchers.set(wc.id, wc);
88
- return true;
89
- }
90
- return false;
126
+ WsClient.watchers.set(wc.id, wc);
91
127
  }
92
128
  static removeWatchClient(wc) {
93
- if (!wc.id) {
94
- return false;
95
- }
96
129
  const result = WsClient.watchers.delete(wc.id);
97
130
  if (result) {
98
131
  const toRemove = [];
@@ -106,7 +139,7 @@ export class WsClient {
106
139
  toRemove.push(k);
107
140
  }
108
141
  });
109
- toRemove.forEach(WsClient.conversationsCache.delete);
142
+ toRemove.forEach(id => WsClient.conversationsCache.delete(id));
110
143
  }
111
144
  return result;
112
145
  }
@@ -137,7 +170,7 @@ export class WsClient {
137
170
  }
138
171
  let participants = WsClient.conversationsCache.get(conversationId);
139
172
  if (!participants) {
140
- const conversation = await store.getConversationById(conversationId);
173
+ const conversation = await store.getParticipantConversationById(undefined, conversationId);
141
174
  if (!conversation) {
142
175
  return;
143
176
  }
@@ -146,12 +179,11 @@ export class WsClient {
146
179
  }
147
180
  return participants;
148
181
  }
149
- static async publishToWsList(conversationId, action, l) {
182
+ static async publishToWsList(conversationId, action) {
150
183
  const tasks = [];
151
184
  const info = WsClient.conversations.get(conversationId);
152
185
  if (info) {
153
186
  info.clients.forEach(client => {
154
- l?.push(client.id);
155
187
  tasks.push(action(client, info.participants));
156
188
  });
157
189
  }
@@ -160,7 +192,6 @@ export class WsClient {
160
192
  participants?.forEach(id => {
161
193
  const client = WsClient.watchers.get(id);
162
194
  if (client) {
163
- l?.push(client.id);
164
195
  tasks.push(action(client));
165
196
  }
166
197
  });
@@ -168,7 +199,7 @@ export class WsClient {
168
199
  return Promise.all(tasks);
169
200
  }
170
201
  static async syncConversation(conversationId) {
171
- const conversation = await store.getConversationById(conversationId);
202
+ const conversation = await store.getParticipantConversationById(undefined, conversationId);
172
203
  if (!conversation) {
173
204
  return false;
174
205
  }
@@ -197,10 +228,10 @@ export class WsClient {
197
228
  WsClient.publishToWatchList(qm.fromId, wc => {
198
229
  if (qm.connectionId !== wc.connectionId || qm.instanceId !== instanceId) {
199
230
  wc.send({
231
+ type: qm.type,
200
232
  id: qm.id,
201
233
  connectionId: qm.connectionId,
202
234
  fromId: qm.fromId,
203
- type: qm.type,
204
235
  createdAt: qm.createdAt,
205
236
  });
206
237
  }
@@ -208,14 +239,14 @@ export class WsClient {
208
239
  return;
209
240
  }
210
241
  if (['closed', 'deleted'].includes(qm.type)) {
211
- const conversationId = qm.data.conversationId ?? qm.conversationId;
242
+ const conversationId = qm.data?.conversationId ?? qm.conversationId;
212
243
  if (conversationId) {
213
244
  await WsClient.publishToWsList(conversationId, async (wc, _) => {
214
245
  if (qm.connectionId !== wc.connectionId || qm.instanceId !== instanceId) {
215
246
  wc.send(qm);
216
247
  }
217
248
  if (wc.conversation?.id === conversationId && qm.type === 'deleted') {
218
- await wc.stop('Deleted');
249
+ await wc.stop(StopStatus.Deleted);
219
250
  }
220
251
  });
221
252
  if (qm.type === 'deleted') {
@@ -225,32 +256,51 @@ export class WsClient {
225
256
  return;
226
257
  }
227
258
  switch (qm.type) {
259
+ case 'joined':
260
+ if (qm.conversationId) {
261
+ const participants = WsClient.joinedParticipants.get(qm.conversationId);
262
+ if (participants) {
263
+ participants.add(qm.fromId);
264
+ }
265
+ else {
266
+ WsClient.joinedParticipants.set(qm.conversationId, new Set([qm.fromId]));
267
+ }
268
+ await WsClient.publishToWsList(qm.conversationId, async (wc, _) => wc.send(qm));
269
+ }
270
+ break;
271
+ case 'left':
272
+ if (qm.conversationId) {
273
+ const participants = WsClient.joinedParticipants.get(qm.conversationId);
274
+ if (participants) {
275
+ participants.delete(qm.fromId);
276
+ if (!participants.size) {
277
+ WsClient.joinedParticipants.delete(qm.conversationId);
278
+ }
279
+ }
280
+ await WsClient.publishToWsList(qm.conversationId, async (wc, _) => wc.send(qm));
281
+ }
282
+ break;
228
283
  case 'text':
229
284
  case 'file':
230
- if (null === qm.data) {
285
+ if (null == qm.data) {
231
286
  break;
232
287
  }
233
288
  /* FALLTHROUGH */
234
- case 'joined':
235
- case 'left':
236
289
  case 'message-updated':
237
290
  case 'message-deleted':
238
291
  if (qm.conversationId) {
239
- const ids = [];
240
- await WsClient.publishToWsList(qm.conversationId, async (wc, _) => {
241
- wc.send(qm);
242
- }, ids);
292
+ await WsClient.publishToWsList(qm.conversationId, async (wc, _) => wc.send(qm));
243
293
  }
244
294
  break;
245
295
  case 'updated':
246
296
  {
247
- const conversationId = qm.data.conversationId ?? qm.conversationId;
297
+ const conversationId = qm.data?.conversationId ?? qm.conversationId;
248
298
  if (conversationId) {
249
299
  const updated = await WsClient.syncConversation(conversationId);
250
300
  await WsClient.publishToWsList(conversationId, async (wc, participants) => {
251
301
  wc.send(qm);
252
302
  if (updated && false === participants?.has(wc.id)) {
253
- await wc.stop('Removed');
303
+ await wc.stop(StopStatus.Removed);
254
304
  }
255
305
  });
256
306
  }
@@ -267,40 +317,46 @@ export class WsClient {
267
317
  conversationId: this.conversation?.id,
268
318
  participants: this.conversation?.participants,
269
319
  connectionId: this.connectionId,
270
- clientMessageId: clientMessageId,
271
320
  fromId: this.id,
321
+ clientMessageId: clientMessageId,
272
322
  createdAt,
273
323
  data: data,
274
324
  };
275
325
  const response = await store.saveMessage(m);
276
326
  if (response.result !== 'created') {
277
- logger?.error(`Index message failed`);
327
+ const err = ErrorMessage.IndexMessageFailed;
328
+ if (!this.lastError) {
329
+ this.lastError = err;
330
+ }
331
+ logger?.error(err);
278
332
  return false;
279
333
  }
280
334
  id = response?._id;
281
335
  }
282
- if (!Array.isArray(queue.acceptTypes) || queue.acceptTypes.includes(type)) {
283
- return await queue.publish({
284
- type,
285
- id,
286
- instanceId,
287
- conversationId: this.conversation?.id,
288
- participants: this.conversation?.participants,
289
- connectionId: this.connectionId,
290
- fromId: this.id,
291
- clientMessageId: clientMessageId,
292
- createdAt,
293
- data: data,
294
- });
336
+ const message = {
337
+ type,
338
+ id,
339
+ instanceId,
340
+ conversationId: this.conversation?.id,
341
+ participants: this.conversation?.participants,
342
+ connectionId: this.connectionId,
343
+ fromId: this.id,
344
+ clientMessageId: clientMessageId,
345
+ createdAt,
346
+ data: data,
347
+ };
348
+ if (queue && (!Array.isArray(queue.acceptTypes) || queue.acceptTypes.includes(type))) {
349
+ return await queue.publish(message);
295
350
  }
351
+ await WsClient.translateQueueMessage(message);
296
352
  return true;
297
353
  }
298
354
  send(msg) {
299
- if (this.transport && this.transport.readyState === TransportState.OPEN && sendStates.includes(this.state)) {
355
+ if (this.transport && this.transport.readyState === TransportState.OPEN && sendStates.has(this.state)) {
300
356
  return this.transport.send(JSON.stringify(msg), { binary: false, fin: true });
301
357
  }
302
358
  }
303
- async stop(statusDescription, err) {
359
+ async stop(status, err) {
304
360
  if (logger && err?.message) {
305
361
  logger.error(err.message);
306
362
  }
@@ -310,6 +366,7 @@ export class WsClient {
310
366
  this.state = WsClientState.Disconnected;
311
367
  const maxStatusLen = 123;
312
368
  const dotSpace = '. ';
369
+ let statusDescription = status;
313
370
  [this.lastError, err?.message].forEach(v => {
314
371
  if (v && statusDescription.length + dotSpace.length < maxStatusLen) {
315
372
  statusDescription += dotSpace + v.substring(0, maxStatusLen - statusDescription.length - dotSpace.length);
@@ -324,9 +381,6 @@ export class WsClient {
324
381
  if ([TransportState.CLOSING, TransportState.CLOSED].includes(this.transport.readyState)) {
325
382
  return;
326
383
  }
327
- if (statusDescription.length > maxStatusLen) {
328
- statusDescription = statusDescription.substring(0, maxStatusLen);
329
- }
330
384
  this.transport.close(err ? 1011 : 1000, statusDescription);
331
385
  this.transport.removeAllListeners();
332
386
  }
@@ -344,7 +398,7 @@ export class WsClient {
344
398
  if (data.conversationId) {
345
399
  conversation = await store.getParticipantConversationById(this.id, data.conversationId);
346
400
  if (!conversation?.id) {
347
- this.lastError = "Wrong conversation";
401
+ this.lastError = ErrorMessage.WrongConversation;
348
402
  return false;
349
403
  }
350
404
  }
@@ -352,42 +406,45 @@ export class WsClient {
352
406
  const participants = new Set(data.participants?.map(p => p.trim()).filter(s => s.length));
353
407
  participants.add(this.id);
354
408
  if (participants.size < 2) {
355
- this.lastError = "Less than 2 participants";
409
+ this.lastError = ErrorMessage.LessThanTwoParticipants;
356
410
  return false;
357
411
  }
358
412
  let conversationId;
359
413
  const participantsArray = Array.from(participants);
360
414
  if (!data.title && participants.size == 2) {
361
- conversationId = await store.getPeerToPeerConversationId(participantsArray[0], participantsArray[1]);
362
- if (!conversationId) {
363
- this.lastError = 'Unable to get peer to peer conversation identifier';
415
+ const conversationIdResult = await store.getPeerToPeerConversationId(participantsArray[0], participantsArray[1]);
416
+ if (!conversationIdResult?.id) {
417
+ this.lastError = ErrorMessage.UnableToGetPeerToPeerConversationIdentifier;
364
418
  logger?.error(this.lastError);
365
419
  return false;
366
420
  }
367
- conversation = await store.getConversationById(conversationId);
421
+ created = conversationIdResult.result === 'created';
422
+ conversationId = conversationIdResult?.id;
423
+ conversation = await store.getParticipantConversationById(undefined, conversationId);
368
424
  }
369
425
  else if (!data.title) {
370
- this.lastError = "Conversation title required";
426
+ this.lastError = ErrorMessage.ConversationTitleRequired;
371
427
  return false;
372
428
  }
373
429
  const conversationsParticipans = conversation ? new Set(conversation.participants) : undefined;
374
- if (!conversationsParticipans
375
- || participants.size !== conversationsParticipans.size
430
+ if (participants.size !== conversationsParticipans?.size
376
431
  || participantsArray.some(p => !conversationsParticipans.has(p))) {
377
432
  const now = new Date();
378
433
  conversation = {
379
434
  id: conversationId,
380
435
  participants: participantsArray,
381
- title: conversation?.title ?? data.title,
382
- createdBy: conversation?.createdBy ?? this.id,
383
- updatedAt: conversation?.createdAt ? now : undefined,
436
+ title: data.title,
437
+ createdBy: conversation?.createdBy ?? (conversationId ? '' : this.id),
384
438
  createdAt: conversation?.createdAt ?? now,
439
+ updatedAt: conversation?.createdAt ? now : undefined,
385
440
  };
386
441
  const response = await store.saveConversation(conversation);
387
- created = response.result === 'created';
442
+ if (!created) {
443
+ created = response.result === 'created';
444
+ }
388
445
  if (!created && response.result !== 'updated') {
389
446
  logger?.error(`Save conversation with id ${conversation.id} failed`);
390
- this.lastError = "Save conversation failed";
447
+ this.lastError = ErrorMessage.SaveConversationFailed;
391
448
  return false;
392
449
  }
393
450
  conversation.id = response._id;
@@ -396,9 +453,9 @@ export class WsClient {
396
453
  this.state = WsClientState.Session;
397
454
  this.conversation = conversation;
398
455
  await WsClient.addClient(conversation, this);
399
- const size = data.messagesSize != null && data.messagesSize >= 0 ? data.messagesSize : defaultSize;
456
+ const size = data.messagesSize ?? defaultSize;
400
457
  let lastMessage = undefined;
401
- let oldMessages = undefined;
458
+ let messages = undefined;
402
459
  if (!created) {
403
460
  const fr = {
404
461
  size,
@@ -407,19 +464,17 @@ export class WsClient {
407
464
  sort: 'createdAt',
408
465
  sortDesc: true,
409
466
  };
410
- oldMessages = await store.findMessages(fr);
467
+ messages = await store.findMessages(fr);
411
468
  lastMessage = await store.getParticipantLastMessage(this.id, conversation.id);
412
469
  }
413
- const connected = conversation.participants.filter(p => WsClient.connectedClients.has(p));
470
+ const connected = conversation.participants.filter(p => p === this.id || WsClient.joinedParticipants.get(conversation.id)?.has(p));
414
471
  const joined = {
415
472
  type: 'conversation',
416
473
  clientMessageId: request.clientMessageId,
417
474
  conversation,
418
475
  connected,
419
- messages: oldMessages?.messages.reverse(),
420
- total: oldMessages?.total,
476
+ messages,
421
477
  leftAt: lastMessage?.createdAt,
422
- closedAt: conversation.closedAt,
423
478
  };
424
479
  this.send(joined);
425
480
  logger?.debug(`Client with id ${this.id} added successfully`);
@@ -427,21 +482,23 @@ export class WsClient {
427
482
  }
428
483
  onMessage(data, isBinary) {
429
484
  try {
430
- if (!(data instanceof Buffer)) {
431
- throw new Error('Wrong message');
432
- }
433
485
  if (isBinary) {
434
- throw new Error('Binary message received!');
486
+ logger?.error('Binary message received');
487
+ throw new Error('Binary message');
435
488
  }
436
- if (sendStates.includes(this.state)) {
437
- const msg = JSON.parse(data.toString());
438
- if (connectedRequestTypes.includes(msg.type)) {
439
- this.processRequest(msg).then(result => {
489
+ if (!(data instanceof Buffer)) {
490
+ throw new TypeError('Wrong transport');
491
+ }
492
+ const msg = JSON.parse(data.toString());
493
+ if (msg && sendStates.has(this.state)) {
494
+ const request = msg;
495
+ if (request && connectedRequestTypes.has(request.type)) {
496
+ this.processRequest(request).then(result => {
440
497
  if (!result) {
441
- this.stop('Failed processRequest');
498
+ this.stop(StopStatus.FailedProcessRequest);
442
499
  }
443
500
  }).catch(e => {
444
- this.stop('Failed processRequest', e);
501
+ this.stop(StopStatus.FailedProcessRequest, e);
445
502
  });
446
503
  return;
447
504
  }
@@ -449,32 +506,37 @@ export class WsClient {
449
506
  switch (this.state) {
450
507
  case WsClientState.None:
451
508
  {
452
- const request = JSON.parse(data.toString());
453
- this.connect(request).then(response => {
454
- if (!response) {
455
- this.stop('Failed connect');
456
- }
457
- }).catch(e => {
458
- this.stop('Failed connect', e);
459
- });
509
+ const request = msg;
510
+ if (request) {
511
+ this.connect(request).then(response => {
512
+ if (!response) {
513
+ this.stop(StopStatus.FailedConnect);
514
+ }
515
+ }).catch(e => {
516
+ this.stop(StopStatus.FailedConnect, e);
517
+ });
518
+ }
519
+ else {
520
+ this.stop(StopStatus.FailedConnect);
521
+ }
460
522
  }
461
523
  break;
462
524
  case WsClientState.Connected:
463
525
  {
464
- const request = JSON.parse(data.toString());
465
- switch (request.type) {
526
+ const request = msg;
527
+ switch (request?.type) {
466
528
  case 'join':
467
529
  this.join(request).then(response => {
468
530
  if (!response) {
469
- this.stop('Failed join');
531
+ this.stop(StopStatus.FailedJoin);
470
532
  }
471
533
  }).catch(e => {
472
- this.stop('Failed join', e);
534
+ this.stop(StopStatus.FailedJoin, e);
473
535
  });
474
536
  break;
475
537
  case 'watch':
476
538
  this.watch().catch(e => {
477
- this.stop('Failed watch', e);
539
+ this.stop(StopStatus.FailedWatch, e);
478
540
  });
479
541
  break;
480
542
  default:
@@ -483,39 +545,35 @@ export class WsClient {
483
545
  }
484
546
  break;
485
547
  case WsClientState.Session:
486
- case WsClientState.WatchSession:
487
548
  {
488
- const request = JSON.parse(data.toString());
549
+ const request = msg;
489
550
  if (request) {
490
551
  this.processConversationRequest(request).then(result => {
491
552
  if (!result) {
492
- this.stop('Failed processConversationRequest');
553
+ this.stop(StopStatus.FailedProcessConversationRequest);
493
554
  }
494
555
  }).catch(e => {
495
- this.stop('Failed processConversationRequest', e);
556
+ this.stop(StopStatus.FailedProcessConversationRequest, e);
496
557
  });
497
558
  }
498
559
  else {
499
- this.stop('Wrong message');
560
+ throw new Error('Wrong message');
500
561
  }
501
562
  }
502
563
  break;
503
- case WsClientState.Disconnected:
504
- break;
505
564
  }
506
565
  }
507
566
  catch (e) {
508
- this.stop('Failed message processing', e);
567
+ this.stop(StopStatus.FailedProcessMessage, e);
509
568
  }
510
569
  }
511
570
  onClose() {
512
- this.stop('Stopped').finally(() => {
571
+ this.stop(StopStatus.Stopped).finally(() => {
513
572
  if (this.conversation?.id) {
514
573
  WsClient.removeClient(this.conversation.id, this);
515
574
  logger?.debug(`Client with id ${this.id} removed successfully`);
516
575
  }
517
- else if (WsClientState.WatchSession === this.state) {
518
- WsClient.removeWatchClient(this);
576
+ else if (WsClient.removeWatchClient(this)) {
519
577
  logger?.debug(`Watch client with id ${this.id} removed successfully`);
520
578
  }
521
579
  delete this.conversation;
@@ -525,17 +583,22 @@ export class WsClient {
525
583
  const findResult = await store.findMessages({
526
584
  ids: [request.messageId],
527
585
  conversationIds: [this.conversation.id],
586
+ types,
528
587
  });
529
588
  const message = findResult.messages?.[0];
530
- if (!message || message.fromId != this.id) {
531
- this.lastError = 'User is not allowed to delete message';
589
+ if (!message) {
590
+ this.lastError = ErrorMessage.WrongMessage;
532
591
  return false;
533
592
  }
534
- message.deletedAt = new Date();
593
+ if (message.fromId != this.id) {
594
+ this.lastError = ErrorMessage.UserNotAllowedToDeleteMessage;
595
+ return false;
596
+ }
597
+ message.deletedAt = request.deletedAt;
535
598
  const response = await store.saveMessage(message);
536
599
  if (response.result !== 'updated') {
537
600
  logger?.error(`Delete message with id ${message.id} failed`);
538
- this.lastError = 'Delete message failed';
601
+ this.lastError = ErrorMessage.DeleteMessageFailed;
539
602
  return false;
540
603
  }
541
604
  logger?.debug(`Message with id ${message.id} was deleted successfully`);
@@ -545,20 +608,25 @@ export class WsClient {
545
608
  const findResult = await store.findMessages({
546
609
  ids: [request.messageId],
547
610
  conversationIds: [this.conversation.id],
611
+ types,
548
612
  });
549
613
  const message = findResult.messages?.[0];
550
614
  if (!message) {
551
- this.lastError = 'Wrong message';
615
+ this.lastError = ErrorMessage.WrongMessage;
552
616
  return false;
553
617
  }
554
618
  if (message.fromId !== this.id) {
555
- this.lastError = 'User is not allowed to update message';
619
+ this.lastError = ErrorMessage.UserNotAllowedToUpdateMessage;
556
620
  return false;
557
621
  }
558
622
  switch (message.type) {
559
623
  case 'file':
560
624
  {
561
625
  const { link, name, type, size } = request;
626
+ if (!name) {
627
+ this.lastError = ErrorMessage.WrongFileName;
628
+ return false;
629
+ }
562
630
  message.data = { link, name, type, size };
563
631
  }
564
632
  break;
@@ -569,32 +637,30 @@ export class WsClient {
569
637
  }
570
638
  break;
571
639
  }
572
- message.updatedAt = new Date();
640
+ message.updatedAt = request.updatedAt;
573
641
  const response = await store.saveMessage(message);
574
642
  if (response.result !== 'updated') {
575
643
  logger?.error(`Update message with id ${message.id} failed`);
576
- this.lastError = 'Update message failed';
644
+ this.lastError = ErrorMessage.UpdateMessageFailed;
577
645
  return false;
578
646
  }
579
647
  logger?.debug(`Message with id ${message.id} was updated successfully`);
580
648
  return true;
581
649
  }
582
650
  async updateConversation(data) {
583
- const conversation = data.conversationId ? await store.getConversationById(data.conversationId) : this.conversation;
651
+ const conversation = data.conversationId ? await store.getParticipantConversationById(this.id, data.conversationId) : this.conversation;
584
652
  if (!conversation || this.id !== conversation.createdBy) {
585
653
  //Only creator can update conversation
586
- this.lastError = 'User is not allowed to update conversation';
654
+ this.lastError = ErrorMessage.UserNotAllowedToUpdateConversation;
587
655
  return false;
588
656
  }
589
657
  conversation.title = data.title;
590
- conversation.updatedAt = new Date();
591
- const participants = new Set([conversation.createdBy]);
592
- data.participants?.forEach(p => participants.add(p));
593
- conversation.participants = Array.from(participants);
658
+ conversation.updatedAt = data.updatedAt;
659
+ conversation.participants = data.participants;
594
660
  const response = await store.saveConversation(conversation);
595
661
  if (response.result !== 'updated') {
596
662
  logger?.error(`Update conversation with id ${conversation.id} failed`);
597
- this.lastError = 'Update conversation failed';
663
+ this.lastError = ErrorMessage.UpdateConversationFailed;
598
664
  return false;
599
665
  }
600
666
  logger?.debug(`Conversation with id ${conversation.id} was updated successfully`);
@@ -603,21 +669,17 @@ export class WsClient {
603
669
  async closeDeleteConversation(data, del) {
604
670
  const id = data.conversationId ?? this.conversation?.id;
605
671
  if (!id) {
606
- this.lastError = 'Wrong conversation identifier';
672
+ this.lastError = ErrorMessage.WrongConversationIdentifier;
607
673
  return null;
608
674
  }
609
- const conversation = await store.getConversationById(id);
675
+ const conversation = await store.getParticipantConversationById(this.id, id);
610
676
  if (!conversation) {
611
677
  //Only creator can close or delete conversation
612
- this.lastError = 'Conversation not found';
678
+ this.lastError = ErrorMessage.ConversationNotFound;
613
679
  return null;
614
680
  }
615
681
  if (!del && conversation.closedAt) {
616
- this.lastError = 'Conversation already closed';
617
- return null;
618
- }
619
- if (conversation.deletedAt) {
620
- this.lastError = 'Conversation already deleted';
682
+ this.lastError = ErrorMessage.ConversationAlreadyClosed;
621
683
  return null;
622
684
  }
623
685
  let type = 'updated';
@@ -634,22 +696,18 @@ export class WsClient {
634
696
  }
635
697
  else if (del) {
636
698
  //leave conversation
637
- const count = conversation.participants.length;
638
699
  conversation.participants = conversation.participants.filter(p => p !== this.id);
639
- if (count === conversation.participants.length) {
640
- this.lastError = 'User is not allowed to delete conversation';
641
- return null;
642
- }
700
+ conversation.updatedAt = data.deletedAt;
643
701
  data.participants = conversation.participants;
644
702
  }
645
703
  else {
646
- this.lastError = 'User is not allowed to close conversation';
704
+ this.lastError = ErrorMessage.UserNotAllowedToCloseConversation;
647
705
  return null;
648
706
  }
649
707
  const response = await store.saveConversation(conversation);
650
708
  if (response.result !== 'updated') {
651
709
  logger?.error(`Close conversation with id ${conversation.id} failed`);
652
- this.lastError = 'Close conversation failed';
710
+ this.lastError = ErrorMessage.CloseConversationFailed;
653
711
  return null;
654
712
  }
655
713
  logger?.debug(`Conversation with id ${conversation.id} was updated successfully`);
@@ -657,37 +715,58 @@ export class WsClient {
657
715
  }
658
716
  async processRequest(request) {
659
717
  if (!request.data) {
660
- this.lastError = 'Wrong message';
718
+ this.lastError = ErrorMessage.WrongMessage;
661
719
  return false;
662
720
  }
721
+ const clientMessageId = request.clientMessageId;
663
722
  switch (request.type) {
664
723
  case 'close':
665
724
  case 'delete':
666
725
  {
726
+ const { conversationId } = request.data;
667
727
  const now = new Date();
668
- let data = {
669
- conversationId: request.data.conversationId,
728
+ const data = {
729
+ conversationId,
670
730
  closedAt: now,
671
731
  };
672
732
  const del = request.type === 'delete';
673
733
  if (del) {
674
734
  data.deletedAt = now;
675
735
  }
676
- let type = await this.closeDeleteConversation(data, del);
736
+ const type = await this.closeDeleteConversation(data, del);
677
737
  if (type) {
678
- this.send({ type, clientMessageId: request.clientMessageId, data });
679
- return this.publishMessage(type, request.clientMessageId, data, true);
738
+ if (type === "updated") {
739
+ delete data.closedAt;
740
+ delete data.deletedAt;
741
+ data.updatedAt = now;
742
+ }
743
+ this.send({ type, clientMessageId, data });
744
+ return this.publishMessage(type, clientMessageId, data, true);
680
745
  }
681
746
  }
682
747
  break;
748
+ case 'find':
749
+ await this.findMessages(request.data, clientMessageId);
750
+ return true;
683
751
  case 'load':
684
- await this.loadConversations(request.data, request.clientMessageId);
752
+ await this.loadConversations(request.data, clientMessageId);
685
753
  return true;
686
754
  case 'update':
687
- if (await this.updateConversation(request.data)) {
688
- const type = 'updated';
689
- this.send({ type, clientMessageId: request.clientMessageId, data: request.data });
690
- return this.publishMessage('updated', request.clientMessageId, request.data, true);
755
+ {
756
+ const { conversationId, title, participants } = request.data;
757
+ const participantsSet = new Set([this.id]);
758
+ participants?.forEach(p => participantsSet.add(p.trim()));
759
+ const data = {
760
+ conversationId,
761
+ title,
762
+ participants: Array.from(participantsSet),
763
+ updatedAt: new Date(),
764
+ };
765
+ if (await this.updateConversation(data)) {
766
+ const type = 'updated';
767
+ this.send({ type, clientMessageId, data });
768
+ return this.publishMessage(type, clientMessageId, data, true);
769
+ }
691
770
  }
692
771
  break;
693
772
  }
@@ -695,12 +774,12 @@ export class WsClient {
695
774
  }
696
775
  async processConversationRequest(request) {
697
776
  if (!request.data) {
698
- this.lastError = 'Wrong message';
777
+ this.lastError = ErrorMessage.WrongMessage;
699
778
  return false;
700
779
  }
701
780
  const verifyConversation = () => {
702
781
  if (this.conversation.closedAt) {
703
- this.lastError = 'Conversation closed';
782
+ this.lastError = ErrorMessage.ConversationClosed;
704
783
  return false;
705
784
  }
706
785
  return true;
@@ -717,30 +796,29 @@ export class WsClient {
717
796
  return false;
718
797
  }
719
798
  if (!request.data.name) {
720
- this.lastError = 'Wrong file name';
799
+ this.lastError = ErrorMessage.WrongFileName;
721
800
  return false;
722
801
  }
723
802
  break;
724
803
  case 'message-update':
804
+ request.data.updatedAt = new Date();
725
805
  if (!await this.updateMessage(request.data)) {
726
806
  return false;
727
807
  }
728
808
  broadcastType = 'message-updated';
729
809
  break;
730
810
  case 'message-delete':
811
+ request.data.deletedAt = new Date();
731
812
  if (!await this.deleteMessage(request.data)) {
732
813
  return false;
733
814
  }
734
815
  broadcastType = 'message-deleted';
735
816
  break;
736
- case 'find':
737
- await this.findMessages(request.data, request.clientMessageId);
738
- return true;
739
817
  case 'load-messages':
740
818
  await this.loadMessages(request.data, request.clientMessageId);
741
819
  return true;
742
820
  default:
743
- this.lastError = 'Wrong message type';
821
+ this.lastError = ErrorMessage.WrongMessageType;
744
822
  return false;
745
823
  }
746
824
  return this.publishMessage(broadcastType, request.clientMessageId, request.data, true);
@@ -748,7 +826,7 @@ export class WsClient {
748
826
  async connect(request) {
749
827
  this.id = request?.authInfo && await userStore.authenticate(request.authInfo);
750
828
  if (!this.id) {
751
- this.lastError = 'Authentication failed';
829
+ this.lastError = ErrorMessage.AuthenticationFailed;
752
830
  return false;
753
831
  }
754
832
  this.state = WsClientState.Authenticated;
@@ -769,18 +847,24 @@ export class WsClient {
769
847
  }), { binary: false, fin: true });
770
848
  return this.publishMessage('connected', undefined, null, false);
771
849
  }
772
- async getConversations(from = 0, conversationsSize, excludeIds) {
850
+ async getConversations(from = 0, conversationsSize, ids, excludeIds) {
773
851
  const size = conversationsSize != null && conversationsSize >= 0 ? conversationsSize : defaultSize;
774
- const result = await store.getParticipantConversations(this.id, excludeIds || [], from, size);
775
- const ids = result.conversations.map(c => c.id);
776
- if (!ids?.length) {
777
- return result;
852
+ const result = await store.getParticipantConversations(this.id, ids, excludeIds, from, size);
853
+ if (!result.conversations?.length) {
854
+ return {
855
+ conversations: [],
856
+ from,
857
+ size,
858
+ total: result.total,
859
+ };
778
860
  }
779
- const messagesInfo = await store.getLastMessagesTimestamps(this.id, ids);
861
+ const conversationIds = result.conversations.map(c => c.id);
862
+ const messagesInfo = await store.getLastMessagesTimestamps(this.id, conversationIds);
780
863
  const conversations = result.conversations.map(c => ({
781
- ...c,
782
- leftAt: c.id in messagesInfo ? messagesInfo[c.id].left : undefined,
783
- latestMessage: c.id in messagesInfo ? messagesInfo[c.id].latest : undefined,
864
+ conversation: c,
865
+ leftAt: (c.id) in messagesInfo ? messagesInfo[c.id].left : undefined,
866
+ latestMessage: (c.id) in messagesInfo ? messagesInfo[c.id].latest : undefined,
867
+ connected: c.participants.filter(p => WsClient.joinedParticipants.get(c.id)?.has(p)),
784
868
  }));
785
869
  return {
786
870
  conversations,
@@ -790,20 +874,12 @@ export class WsClient {
790
874
  };
791
875
  }
792
876
  async findMessages(request, clientMessageId) {
793
- const result = await store.getParticipantConversations(this.id, [], request.from ?? 0, request.size ?? defaultSize);
794
- if (request.conversationIds?.length) {
795
- request.conversationIds = Array.from(new Set(result.conversations.map(c => c.id).concat(request.conversationIds)));
796
- }
797
- else {
798
- request.conversationIds = result.conversations.map(c => c.id);
799
- }
877
+ const result = await store.getParticipantConversations(this.id, request.conversationIds, undefined, request.from ?? 0, request.size ?? defaultSize);
878
+ request.conversationIds = result.conversations.map(c => c.id);
800
879
  const findResult = await store.findMessages(request);
801
880
  this.send({ type: 'find', clientMessageId, messages: findResult.messages, from: findResult.from, size: findResult.size, total: findResult.total });
802
881
  }
803
882
  async loadMessages(request, clientMessageId) {
804
- if (!this.conversation?.id) {
805
- return;
806
- }
807
883
  const findRequest = {
808
884
  from: request.from,
809
885
  size: request.size,
@@ -819,7 +895,7 @@ export class WsClient {
819
895
  this.send({ type: 'loaded-messages', clientMessageId, messages: result.messages, count: result.total });
820
896
  }
821
897
  async loadConversations(request, clientMessageId) {
822
- const result = await this.getConversations(request.from, request.size, request.excludeIds);
898
+ const result = await this.getConversations(request.from, request.size, request.ids, request.excludeIds);
823
899
  this.send({ type: 'loaded', clientMessageId, conversations: result.conversations, count: result.total });
824
900
  }
825
901
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,MAAM,CAAN,IAAY,cASX;AATD,WAAY,cAAc;IACtB,sCAAsC;IACtC,+DAAc,CAAA;IACd,uDAAuD;IACvD,mDAAI,CAAA;IACJ,mDAAmD;IACnD,yDAAO,CAAA;IACP,gCAAgC;IAChC,uDAAM,CAAA;AACV,CAAC,EATW,cAAc,KAAd,cAAc,QASzB;AA2CD,MAAM,CAAN,IAAY,aAOX;AAPD,WAAY,aAAa;IACrB,iDAAQ,CAAA;IACR,mEAAiB,CAAA;IACjB,2DAAa,CAAA;IACb,uDAAW,CAAA;IACX,iEAAgB,CAAA;IAChB,mEAAmB,CAAA;AACvB,CAAC,EAPW,aAAa,KAAb,aAAa,QAOxB;AAED,MAAM,WAAW,GAAG,GAAG,CAAC;AAExB,MAAM,UAAU,GAAG,CAAC,aAAa,CAAC,SAAS,EAAE,aAAa,CAAC,OAAO,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;AAEhG,MAAM,qBAAqB,GAAkB,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAEnF,MAAM,KAAK,GAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEnD,IAAI,UAAU,GAAW,SAAU,CAAC;AACpC,IAAI,MAAuB,CAAC;AAC5B,IAAI,KAAK,GAAiB,SAAU,CAAC;AACrC,IAAI,KAAK,GAAiB,SAAU,CAAC;AACrC,IAAI,SAAS,GAAc,SAAU,CAAC;AAEtC,MAAM,OAAO,QAAQ;IACjB,qDAAqD;IAC9C,MAAM,CAAU,gBAAgB,GAAgB,IAAI,GAAG,EAAE,CAAC;IAC1D,MAAM,CAAU,QAAQ,GAA0B,IAAI,GAAG,EAAE,CAAC;IAC5D,MAAM,CAAU,aAAa,GAAkC,IAAI,GAAG,EAAE,CAAC;IAExE,MAAM,CAAU,kBAAkB,GAA6B,IAAI,GAAG,EAAE,CAAC;IAE1E,YAAY,CAAU;IACtB,YAAY,CAAgB;IAC5B,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC;IAC3B,EAAE,CAAU;IAEF,SAAS,CAAY;IAC9B,SAAS,CAAU;IAE3B,YAAY,CAAY;QACpB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QAEnB,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEzC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,YAA0B,EAAE,EAAY;QAC3D,IAAI,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,EAAG,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,IAAI,GAAG,EAAE,YAAY,EAAE,IAAI,GAAG,CAAS,YAAY,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACnF,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,EAAG,EAAE,IAAI,CAAC,CAAC;YACnD,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,YAAY,CAAC,EAAG,CAAC,CAAA;QACxD,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC;QAED,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;gBACvC,MAAM,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAC/C,CAAC;QACL,CAAC;IACL,CAAC;IAEO,MAAM,CAAC,YAAY,CAAC,cAAsB,EAAE,EAAY;QAC5D,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAExD,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACZ,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAE9B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACvB,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAE9C,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACjC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;oBAC5B,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;oBACnE,MAAM;gBACV,CAAC;YACL,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,MAAM,CAAC,cAAc,CAAC,EAAY;QACtC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YACR,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACjC,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,MAAM,CAAC,iBAAiB,CAAC,EAAY;QACzC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACT,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAE/C,IAAI,MAAM,EAAE,CAAC;YACT,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACzC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAG,CAAC,EAAE,CAAC;oBAChB,KAAK,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;wBACjB,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;4BAC5B,OAAO;wBACX,CAAC;oBACL,CAAC;oBACD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACrB,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACzD,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAEO,MAAM,CAAC,kBAAkB,CAAC,MAAc,EAAE,MAAkC;QAChF,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC1B,OAAO;QACX,CAAC;QAED,MAAM,OAAO,GAAgB,IAAI,GAAG,CAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QAEvD,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAClC,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;YAC/C,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,CAAC;QACL,CAAC,CAAC,CAAA;QAEF,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YAChB,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,cAAsB;QACnE,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACxD,IAAI,IAAI,EAAE,CAAC;YACP,OAAO,IAAI,CAAC,YAAY,CAAC;QAC7B,CAAC;QAED,IAAI,YAAY,GAAG,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAEnE,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;YACrE,IAAI,CAAC,YAAY,EAAE,CAAC;gBAChB,OAAO;YACX,CAAC;YAED,YAAY,GAAG,IAAI,GAAG,CAAS,YAAY,CAAC,YAAY,CAAC,CAAC;YAC1D,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,YAAY,CAAC;IACxB,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,cAAsB,EAAE,MAA4D,EAAE,CAAY;QACnI,MAAM,KAAK,GAAoB,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACxD,IAAI,IAAI,EAAE,CAAC;YACP,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBAC1B,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,EAAY,CAAC,CAAC;gBAC7B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YAClD,CAAC,CAAC,CAAC;QACP,CAAC;QAED,IAAI,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;YAC1B,MAAM,YAAY,GAA4B,MAAM,QAAQ,CAAC,2BAA2B,CAAC,cAAc,CAAC,CAAC;YACzG,YAAY,EAAE,OAAO,CACjB,EAAE,CAAC,EAAE;gBACD,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACzC,IAAI,MAAM,EAAE,CAAC;oBACT,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,EAAY,CAAC,CAAC;oBAC7B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC/B,CAAC;YACL,CAAC,CACJ,CAAC;QACN,CAAC;QAED,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,cAAsB;QACxD,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;QACrE,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAEnD,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAExD,IAAI,IAAI,EAAE,CAAC;YACP,MAAM,KAAK,GAAG,CAAC,CAAc,EAAE,CAAW,EAAE,EAAE;gBAC1C,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACzD,CAAC,CAAA;YAED,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC;gBACtD,OAAO,KAAK,CAAC;YACjB,CAAC;YAED,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,CAAS,YAAY,CAAC,YAAY,CAAC,CAAC;QACnE,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,EAAgB;QACtD,MAAM,EAAE,KAAK,CAAC,0BAA0B,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QAE/D,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAClD,IAAI,EAAE,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBAC7B,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;YAChD,CAAC;iBACI,CAAC;gBACF,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;YAC7C,CAAC;YAED,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;gBACxC,IAAI,EAAE,CAAC,YAAY,KAAK,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;oBACtE,EAAE,CAAC,IAAI,CAAC;wBACJ,EAAE,EAAE,EAAE,CAAC,EAAE;wBACT,YAAY,EAAE,EAAE,CAAC,YAAY;wBAC7B,MAAM,EAAE,EAAE,CAAC,MAAM;wBACjB,IAAI,EAAE,EAAE,CAAC,IAAI;wBACb,SAAS,EAAE,EAAE,CAAC,SAAS;qBAC1B,CAAC,CAAC;gBACP,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,OAAO;QACX,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,MAAM,cAAc,GAAI,EAAE,CAAC,IAA2B,CAAC,cAAc,IAAI,EAAE,CAAC,cAAc,CAAC;YAC3F,IAAI,cAAc,EAAE,CAAC;gBACjB,MAAM,QAAQ,CAAC,eAAe,CAAC,cAAc,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE;oBAC3D,IAAI,EAAE,CAAC,YAAY,KAAK,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;wBACtE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAChB,CAAC;oBAED,IAAI,EAAE,CAAC,YAAY,EAAE,EAAE,KAAK,cAAc,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;wBAClE,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC7B,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBACxB,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBACvD,CAAC;YACL,CAAC;YAED,OAAO;QACX,CAAC;QAED,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;YACd,KAAK,MAAM,CAAC;YACZ,KAAK,MAAM;gBACP,IAAI,IAAI,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;oBACnB,MAAM;gBACV,CAAC;YACL,iBAAiB;YACjB,KAAK,QAAQ,CAAC;YACd,KAAK,MAAM,CAAC;YACZ,KAAK,iBAAiB,CAAC;YACvB,KAAK,iBAAiB;gBAClB,IAAI,EAAE,CAAC,cAAc,EAAE,CAAC;oBACpB,MAAM,GAAG,GAAa,EAAE,CAAC;oBACzB,MAAM,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,cAAc,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE;wBAC9D,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAChB,CAAC,EAAE,GAAG,CAAC,CAAC;gBACZ,CAAC;gBACD,MAAM;YAEV,KAAK,SAAS;gBACV,CAAC;oBACG,MAAM,cAAc,GAAI,EAAE,CAAC,IAA2B,CAAC,cAAc,IAAI,EAAE,CAAC,cAAc,CAAC;oBAE3F,IAAI,cAAc,EAAE,CAAC;wBACjB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;wBAEhE,MAAM,QAAQ,CAAC,eAAe,CAAC,cAAc,EAAE,KAAK,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE;4BACtE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;4BAEZ,IAAI,OAAO,IAAI,KAAK,KAAK,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC,EAAG,CAAC,EAAE,CAAC;gCACjD,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;4BAC7B,CAAC;wBACL,CAAC,CAAC,CAAC;oBACP,CAAC;gBACL,CAAC;gBACD,MAAM;QACd,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,IAAsB,EAAE,eAAmC,EAAE,IAAiB,EAAE,IAAa;QACtH,IAAI,EAAE,GAAuB,SAAS,CAAC;QACvC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAE7B,IAAI,IAAI,EAAE,CAAC;YACP,MAAM,CAAC,GAAiB;gBACpB,IAAI,EAAE,IAAwB;gBAC9B,cAAc,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE;gBACrC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,YAAY;gBAC7C,YAAY,EAAE,IAAI,CAAC,YAAa;gBAChC,eAAe,EAAE,eAAe;gBAChC,MAAM,EAAE,IAAI,CAAC,EAAG;gBAChB,SAAS;gBACT,IAAI,EAAE,IAAmB;aAC5B,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAC5C,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChC,MAAM,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAC;gBACtC,OAAO,KAAK,CAAC;YACjB,CAAC;YAED,EAAE,GAAG,QAAQ,EAAE,GAAG,CAAC;QACvB,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAK,KAAK,CAAC,WAAwB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACtF,OAAO,MAAM,KAAK,CAAC,OAAO,CAAC;gBACvB,IAAI;gBACJ,EAAE;gBACF,UAAU;gBACV,cAAc,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE;gBACrC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,YAAY;gBAC7C,YAAY,EAAE,IAAI,CAAC,YAAa;gBAChC,MAAM,EAAE,IAAI,CAAC,EAAG;gBAChB,eAAe,EAAE,eAAe;gBAChC,SAAS;gBACT,IAAI,EAAE,IAAwB;aACjC,CAAC,CAAC;QACP,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,IAAI,CAAC,GAAY;QACrB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,KAAK,cAAc,CAAC,IAAI,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACzG,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,IAAI,CAAC,iBAAyB,EAAE,GAAS;QACnD,IAAI,MAAM,IAAI,GAAG,EAAE,OAAO,EAAE,CAAC;YACzB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,KAAK,aAAa,CAAC,YAAY,EAAE,CAAC;YAC5C,OAAO;QACX,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,YAAY,CAAC;QAExC,MAAM,YAAY,GAAG,GAAG,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC;QAEtB,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACvC,IAAI,CAAC,IAAI,iBAAiB,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;gBACjE,iBAAiB,IAAI,QAAQ,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,YAAY,GAAG,iBAAiB,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC9G,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC7D,CAAC;YAED,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACtE,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;YACtF,OAAO;QACX,CAAC;QAED,IAAI,iBAAiB,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;YAC1C,iBAAiB,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;QAC3D,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,CAAC;IACxC,CAAC;IAEO,KAAK,CAAC,KAAK;QACf,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,YAAY,CAAC;QAExC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAExD,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAE9B,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC;QAE/C,MAAM,EAAE,KAAK,CAAC,wBAAwB,IAAI,CAAC,EAAE,qBAAqB,CAAC,CAAC;IACxE,CAAC;IAEO,KAAK,CAAC,IAAI,CAAC,OAAgB;QAC/B,IAAI,YAAsC,CAAC;QAC3C,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAmB,CAAC;QAEzC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,YAAY,GAAG,MAAM,KAAK,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YACxF,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,CAAC;gBACpB,IAAI,CAAC,SAAS,GAAG,oBAAoB,CAAC;gBACtC,OAAO,KAAK,CAAC;YACjB,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,MAAM,YAAY,GAAG,IAAI,GAAG,CAAS,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YAClG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAG,CAAC,CAAC;YAE3B,IAAI,YAAY,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,SAAS,GAAG,0BAA0B,CAAC;gBAC5C,OAAO,KAAK,CAAC;YACjB,CAAC;YAED,IAAI,cAAkC,CAAC;YAEvC,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAEnD,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,YAAY,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC;gBACxC,cAAc,GAAG,MAAM,KAAK,CAAC,2BAA2B,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrG,IAAI,CAAC,cAAc,EAAE,CAAC;oBAClB,IAAI,CAAC,SAAS,GAAG,oDAAoD,CAAC;oBACtE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC9B,OAAO,KAAK,CAAC;gBACjB,CAAC;gBAED,YAAY,GAAG,MAAM,KAAK,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;YACnE,CAAC;iBAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACrB,IAAI,CAAC,SAAS,GAAG,6BAA6B,CAAC;gBAC/C,OAAO,KAAK,CAAC;YACjB,CAAC;YAED,MAAM,wBAAwB,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,GAAG,CAAS,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAEvG,IAAI,CAAC,wBAAwB;mBACtB,YAAY,CAAC,IAAI,KAAK,wBAAwB,CAAC,IAAI;mBACnD,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAEnE,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;gBAEvB,YAAY,GAAG;oBACX,EAAE,EAAE,cAAc;oBAClB,YAAY,EAAE,iBAAiB;oBAC/B,KAAK,EAAE,YAAY,EAAE,KAAK,IAAI,IAAI,CAAC,KAAK;oBACxC,SAAS,EAAE,YAAY,EAAE,SAAS,IAAI,IAAI,CAAC,EAAG;oBAC9C,SAAS,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;oBACpD,SAAS,EAAE,YAAY,EAAE,SAAS,IAAI,GAAG;iBAC5C,CAAC;gBAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;gBAE5D,OAAO,GAAG,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC;gBAExC,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBAC5C,MAAM,EAAE,KAAK,CAAC,6BAA6B,YAAY,CAAC,EAAE,SAAS,CAAC,CAAC;oBACrE,IAAI,CAAC,SAAS,GAAG,0BAA0B,CAAC;oBAC5C,OAAO,KAAK,CAAC;gBACjB,CAAC;gBAED,YAAY,CAAC,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC;YACnC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC;QAEnC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QAEjC,MAAM,QAAQ,CAAC,SAAS,CAAC,YAAa,EAAE,IAAI,CAAC,CAAC;QAE9C,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC;QAEnG,IAAI,WAAW,GAA6B,SAAS,CAAC;QACtD,IAAI,WAAW,GAA2B,SAAS,CAAC;QACpD,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,MAAM,EAAE,GAAgB;gBACpB,IAAI;gBACJ,eAAe,EAAE,CAAC,YAAa,CAAC,EAAG,CAAC;gBACpC,KAAK;gBACL,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,IAAI;aACjB,CAAA;YAED,WAAW,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YAC3C,WAAW,GAAG,MAAM,KAAK,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAG,EAAE,YAAa,CAAC,EAAG,CAAC,CAAC;QACrF,CAAC;QAED,MAAM,SAAS,GAAG,YAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAE3F,MAAM,MAAM,GAAG;YACX,IAAI,EAAE,cAAc;YACpB,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,YAAY;YACZ,SAAS;YACT,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,OAAO,EAAE;YACzC,KAAK,EAAE,WAAW,EAAE,KAAK;YACzB,MAAM,EAAE,WAAW,EAAE,SAAS;YAC9B,QAAQ,EAAE,YAAa,CAAC,QAAQ;SACnC,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAElB,MAAM,EAAE,KAAK,CAAC,kBAAkB,IAAI,CAAC,EAAE,qBAAqB,CAAC,CAAC;QAE9D,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9E,CAAC;IAEO,SAAS,CAAC,IAAY,EAAE,QAAiB;QAC7C,IAAI,CAAC;YACD,IAAI,CAAC,CAAC,IAAI,YAAY,MAAM,CAAC,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;YACrC,CAAC;YAED,IAAI,QAAQ,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAChD,CAAC;YAED,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClC,MAAM,GAAG,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAEjD,IAAI,qBAAqB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC3C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;wBACnC,IAAI,CAAC,MAAM,EAAE,CAAC;4BACV,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;wBACvC,CAAC;oBACL,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;wBACT,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC;oBAC1C,CAAC,CAAC,CAAC;oBAEH,OAAO;gBACX,CAAC;YACL,CAAC;YAED,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;gBACjB,KAAK,aAAa,CAAC,IAAI;oBACnB,CAAC;wBACG,MAAM,OAAO,GAAmB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;wBAC5D,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;4BAClC,IAAI,CAAC,QAAQ,EAAE,CAAC;gCACZ,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;4BAChC,CAAC;wBACL,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;4BACT,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;wBACnC,CAAC,CAAC,CAAC;oBACP,CAAC;oBACD,MAAM;gBACV,KAAK,aAAa,CAAC,SAAS;oBACxB,CAAC;wBACG,MAAM,OAAO,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;wBAErD,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;4BACnB,KAAK,MAAM;gCACP,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;oCAC/B,IAAI,CAAC,QAAQ,EAAE,CAAC;wCACZ,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;oCAC7B,CAAC;gCACL,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;oCACT,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;gCAChC,CAAC,CAAC,CAAC;gCACH,MAAM;4BACV,KAAK,OAAO;gCACR,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;oCACnB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;gCACjC,CAAC,CAAC,CAAC;gCACH,MAAM;4BACV;gCACI,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;wBAC9C,CAAC;oBACL,CAAC;oBACD,MAAM;gBACV,KAAK,aAAa,CAAC,OAAO,CAAC;gBAC3B,KAAK,aAAa,CAAC,YAAY;oBAC3B,CAAC;wBACG,MAAM,OAAO,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;wBAErD,IAAI,OAAO,EAAE,CAAC;4BACV,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gCACnD,IAAI,CAAC,MAAM,EAAE,CAAC;oCACV,IAAI,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;gCACnD,CAAC;4BACL,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gCACT,IAAI,CAAC,IAAI,CAAC,mCAAmC,EAAE,CAAC,CAAC,CAAC;4BACtD,CAAC,CAAC,CAAC;wBACP,CAAC;6BAAM,CAAC;4BACJ,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;wBAC/B,CAAC;oBACL,CAAC;oBACD,MAAM;gBACV,KAAK,aAAa,CAAC,YAAY;oBAC3B,MAAM;YACd,CAAC;QACL,CAAC;QACD,OAAO,CAAM,EAAE,CAAC;YACZ,IAAI,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAC;QAC9C,CAAC;IACL,CAAC;IAEO,OAAO;QACX,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;YAE9B,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,CAAC;gBACxB,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBAClD,MAAM,EAAE,KAAK,CAAC,kBAAkB,IAAI,CAAC,EAAE,uBAAuB,CAAC,CAAC;YACpE,CAAC;iBACI,IAAI,aAAa,CAAC,YAAY,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;gBACjD,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBACjC,MAAM,EAAE,KAAK,CAAC,wBAAwB,IAAI,CAAC,EAAE,uBAAuB,CAAC,CAAC;YAC1E,CAAC;YAED,OAAO,IAAI,CAAC,YAAY,CAAC;QAC7B,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,OAAsB;QAC9C,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC;YACxC,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;YACxB,eAAe,EAAE,CAAC,IAAI,CAAC,YAAa,CAAC,EAAG,CAAC;SAC5C,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;QAEzC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACxC,IAAI,CAAC,SAAS,GAAG,uCAAuC,CAAC;YACzD,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,OAAO,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAE/B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAElD,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,EAAE,KAAK,CAAC,0BAA0B,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;YAC7D,IAAI,CAAC,SAAS,GAAG,uBAAuB,CAAC;YACzC,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,MAAM,EAAE,KAAK,CAAC,mBAAmB,OAAO,CAAC,EAAE,2BAA2B,CAAC,CAAC;QAExE,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,OAAsB;QAC9C,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC;YACxC,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;YACxB,eAAe,EAAE,CAAC,IAAI,CAAC,YAAa,CAAC,EAAG,CAAC;SAC5C,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;QAEzC,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC;YACjC,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC;YAC7B,IAAI,CAAC,SAAS,GAAG,uCAAuC,CAAC;YACzD,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,MAAM;gBACP,CAAC;oBACG,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAsB,CAAC;oBAC1D,OAAO,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;gBAC9C,CAAC;gBACD,MAAM;YACV,KAAK,MAAM;gBACP,CAAC;oBACG,MAAM,EAAE,IAAI,EAAE,GAAG,OAAsB,CAAC;oBACxC,OAAO,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,CAAC;gBAC5B,CAAC;gBACD,MAAM;QACd,CAAC;QAED,OAAO,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAE/B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAElD,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,EAAE,KAAK,CAAC,0BAA0B,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;YAC7D,IAAI,CAAC,SAAS,GAAG,uBAAuB,CAAC;YACzC,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,MAAM,EAAE,KAAK,CAAC,mBAAmB,OAAO,CAAC,EAAE,2BAA2B,CAAC,CAAC;QAExE,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,IAAwB;QACrD,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;QAEpH,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,EAAE,KAAK,YAAY,CAAC,SAAS,EAAE,CAAC;YACtD,sCAAsC;YACtC,IAAI,CAAC,SAAS,GAAG,4CAA4C,CAAC;YAC9D,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAEhC,YAAY,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAEpC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;QAEvD,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAErD,YAAY,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAErD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAE5D,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,EAAE,KAAK,CAAC,+BAA+B,YAAY,CAAC,EAAE,SAAS,CAAC,CAAC;YACvE,IAAI,CAAC,SAAS,GAAG,4BAA4B,CAAC;YAC9C,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,MAAM,EAAE,KAAK,CAAC,wBAAwB,YAAY,CAAC,EAAE,2BAA2B,CAAC,CAAC;QAElF,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,uBAAuB,CAAC,IAAwB,EAAE,GAAY;QACxE,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QACxD,IAAI,CAAC,EAAE,EAAE,CAAC;YACN,IAAI,CAAC,SAAS,GAAG,+BAA+B,CAAC;YACjD,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAEzD,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,+CAA+C;YAC/C,IAAI,CAAC,SAAS,GAAG,wBAAwB,CAAC;YAC1C,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,IAAI,CAAC,GAAG,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC;YAChC,IAAI,CAAC,SAAS,GAAG,6BAA6B,CAAC;YAC/C,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;YACzB,IAAI,CAAC,SAAS,GAAG,8BAA8B,CAAC;YAChD,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,IAAI,IAAI,GAAqB,SAAS,CAAC;QAEvC,IAAI,IAAI,CAAC,EAAE,KAAK,YAAY,CAAC,SAAS,EAAE,CAAC;YACrC,+CAA+C;YAC/C,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAEtC,IAAI,GAAG,EAAE,CAAC;gBACN,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;gBACxC,IAAI,GAAG,SAAS,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACJ,IAAI,GAAG,QAAQ,CAAC;YACpB,CAAC;QACL,CAAC;aAAM,IAAI,GAAG,EAAE,CAAC;YACb,oBAAoB;YACpB,MAAM,KAAK,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC;YAC/C,YAAY,CAAC,YAAY,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;YACjF,IAAI,KAAK,KAAK,YAAY,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;gBAC7C,IAAI,CAAC,SAAS,GAAG,4CAA4C,CAAC;gBAC9D,OAAO,IAAI,CAAC;YAChB,CAAC;YAED,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,YAAY,CAAC;QAClD,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,SAAS,GAAG,2CAA2C,CAAC;YAC7D,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAE5D,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,EAAE,KAAK,CAAC,8BAA8B,YAAY,CAAC,EAAE,SAAS,CAAC,CAAC;YACtE,IAAI,CAAC,SAAS,GAAG,2BAA2B,CAAC;YAC7C,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,EAAE,KAAK,CAAC,wBAAwB,YAAY,CAAC,EAAE,2BAA2B,CAAC,CAAC;QAElF,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,OAAgB;QACzC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAChB,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC;YACjC,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,OAAO,CAAC;YACb,KAAK,QAAQ;gBACT,CAAC;oBACG,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;oBACvB,IAAI,IAAI,GAAuB;wBAC3B,cAAc,EAAG,OAAO,CAAC,IAA2B,CAAC,cAAc;wBACnE,QAAQ,EAAE,GAAG;qBAChB,CAAC;oBAEF,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC;oBACtC,IAAI,GAAG,EAAE,CAAC;wBACN,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;oBACzB,CAAC;oBAED,IAAI,IAAI,GAA4B,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;oBAClF,IAAI,IAAI,EAAE,CAAC;wBAEP,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;wBAEpE,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;oBACzE,CAAC;gBACL,CAAC;gBACD,MAAM;YACV,KAAK,MAAM;gBACP,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAmB,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;gBACnF,OAAO,IAAI,CAAC;YAChB,KAAK,QAAQ;gBACT,IAAI,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAA0B,CAAC,EAAE,CAAC;oBACpE,MAAM,IAAI,GAAqB,SAAS,CAAC;oBAEzC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;oBAElF,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;gBACtF,CAAC;gBACD,MAAM;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,0BAA0B,CAAC,OAAgB;QACrD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAChB,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC;YACjC,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,MAAM,kBAAkB,GAAG,GAAG,EAAE;YAC5B,IAAI,IAAI,CAAC,YAAa,CAAC,QAAQ,EAAE,CAAC;gBAC9B,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC;gBACvC,OAAO,KAAK,CAAC;YACjB,CAAC;YACD,OAAO,IAAI,CAAC;QAChB,CAAC,CAAA;QAED,IAAI,aAAa,GAAG,OAAO,CAAC,IAAwB,CAAC;QAErD,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,MAAM;gBACP,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;oBACxB,OAAO,KAAK,CAAC;gBACjB,CAAC;gBACD,MAAM;YACV,KAAK,MAAM;gBACP,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;oBACxB,OAAO,KAAK,CAAC;gBACjB,CAAC;gBAED,IAAI,CAAE,OAAO,CAAC,IAAoB,CAAC,IAAI,EAAE,CAAC;oBACtC,IAAI,CAAC,SAAS,GAAG,iBAAiB,CAAC;oBACnC,OAAO,KAAK,CAAC;gBACjB,CAAC;gBACD,MAAM;YACV,KAAK,gBAAgB;gBACjB,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAqB,CAAC,EAAE,CAAC;oBAC3D,OAAO,KAAK,CAAC;gBACjB,CAAC;gBAED,aAAa,GAAG,iBAAiB,CAAC;gBAClC,MAAM;YACV,KAAK,gBAAgB;gBACjB,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAqB,CAAC,EAAE,CAAC;oBAC3D,OAAO,KAAK,CAAC;gBACjB,CAAC;gBAED,aAAa,GAAG,iBAAiB,CAAC;gBAClC,MAAM;YACV,KAAK,MAAM;gBACP,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAmB,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;gBAC9E,OAAO,IAAI,CAAC;YAChB,KAAK,eAAe;gBAChB,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAmB,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;gBAC9E,OAAO,IAAI,CAAC;YAChB;gBACI,IAAI,CAAC,SAAS,GAAG,oBAAoB,CAAC;gBACtC,OAAO,KAAK,CAAC;QACrB,CAAC;QAED,OAAO,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3F,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,OAAuB;QAEzC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,QAAQ,IAAI,MAAM,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE9E,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACX,IAAI,CAAC,SAAS,GAAG,uBAAuB,CAAC;YACzC,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,aAAa,CAAC;QAEzC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAEjE,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,EAAE,KAAK,CAAC,2BAA2B,QAAQ,CAAC,GAAG,SAAS,CAAC,CAAC;YAChE,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,SAAS,CAAC;QAErC,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC;QAEjC,MAAM,EAAE,KAAK,CAAC,2BAA2B,IAAI,CAAC,YAAY,YAAY,CAAC,CAAC;QAExE,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAEhF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;YAC/B,IAAI,EAAE,YAAY;YAClB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,aAAa;SAChB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QAElC,OAAO,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACpE,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,OAAe,CAAC,EAAE,iBAA0B,EAAE,UAAqB;QAE9F,MAAM,IAAI,GAAG,iBAAiB,IAAI,IAAI,IAAI,iBAAiB,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,WAAW,CAAC;QAEnG,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAG,EAAE,UAAU,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAE/F,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAG,CAAC,CAAC;QAEjD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC;YACf,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAG,EAAE,GAAG,CAAC,CAAC;QAE1E,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACjD,GAAG,CAAC;YACJ,MAAM,EAAE,CAAC,CAAC,EAAG,IAAI,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YACpE,aAAa,EAAE,CAAC,CAAC,EAAG,IAAI,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;SAChF,CAAC,CAAC,CAAC;QAEJ,OAAO;YACH,aAAa;YACb,IAAI;YACJ,IAAI;YACJ,KAAK,EAAE,MAAM,CAAC,KAAK;SACtB,CAAA;IACL,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,OAAoB,EAAE,eAAwB;QACrE,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAG,EAAE,EAAE,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC,CAAC;QAErH,IAAI,OAAO,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC;YAClC,OAAO,CAAC,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACxH,CAAC;aACI,CAAC;YACF,OAAO,CAAC,eAAe,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAG,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,UAAU,GAAe,MAAM,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAEjE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;IACvJ,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,OAAoB,EAAE,eAAwB;QACrE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,CAAC;YACzB,OAAO;QACX,CAAC;QAED,MAAM,WAAW,GACjB;YACI,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,IAAI;YACd,eAAe,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YACvC,SAAS,EAAE,OAAO,CAAC,MAAM;YACzB,KAAK;YACL,UAAU,EAAE,OAAO,CAAC,UAAU;SACjC,CAAC;QAEF,MAAM,MAAM,GAAe,MAAM,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAEjE,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QAE1B,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5G,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,OAAoB,EAAE,eAAwB;QAC1E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QAE3F,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC7G,CAAC;;AAGL,MAAM,UAAU,UAAU,CAAC,MAAc,EAAE,GAAS;IAChD,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAC/B,MAAM,GAAG,GAAG,CAAC;IACb,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IACrB,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IACrB,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IAE7B,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;AACrD,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@only-chat/client",
3
- "version": "0.2.0-beta.6",
3
+ "version": "1.0.0",
4
4
  "description": "Client for only-chat",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -17,19 +17,18 @@
17
17
  "author": "only-chat",
18
18
  "license": "MIT",
19
19
  "devDependencies": {
20
- "@jest/globals": "^29.7.0",
21
- "@only-chat/in-memory-queue": "0.2.0-beta.6",
22
- "@only-chat/in-memory-store": "0.2.0-beta.6",
23
- "@only-chat/in-memory-user-store": "0.2.0-beta.6",
24
- "@only-chat/types": "0.2.0-beta.6",
25
- "@types/jest": "^29.5.12",
26
- "jest": "^29.7.0",
27
- "jest-ts-webcompat-resolver": "^1.0.0",
28
- "ts-jest": "^29.1.4",
20
+ "@jest/globals": "^30.2.0",
21
+ "@only-chat/in-memory-queue": "1.0.0",
22
+ "@only-chat/in-memory-store": "1.0.0",
23
+ "@only-chat/in-memory-user-store": "1.0.0",
24
+ "@only-chat/types": "1.0.0",
25
+ "@types/jest": "^30.0.0",
26
+ "@types/node": "^25.2.3",
27
+ "jest": "^30.2.0",
28
+ "jest-ts-webcompat-resolver": "^1.0.1",
29
+ "ts-jest": "^29.4.6",
29
30
  "ts-node": "^10.9.2",
30
- "typescript": "^5.4.5"
31
- },
32
- "dependencies": {
31
+ "typescript": "^5.9.3"
33
32
  },
34
33
  "files": [
35
34
  "dist/"