stream-chat 5.6.0 → 6.2.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.
Files changed (40) hide show
  1. package/README.md +59 -114
  2. package/dist/browser.es.js +464 -366
  3. package/dist/browser.es.js.map +1 -1
  4. package/dist/browser.full-bundle.min.js +1 -1
  5. package/dist/browser.full-bundle.min.js.map +1 -1
  6. package/dist/browser.js +464 -366
  7. package/dist/browser.js.map +1 -1
  8. package/dist/index.es.js +464 -366
  9. package/dist/index.es.js.map +1 -1
  10. package/dist/index.js +464 -366
  11. package/dist/index.js.map +1 -1
  12. package/dist/types/channel.d.ts +124 -124
  13. package/dist/types/channel.d.ts.map +1 -1
  14. package/dist/types/channel_state.d.ts +41 -41
  15. package/dist/types/channel_state.d.ts.map +1 -1
  16. package/dist/types/client.d.ts +190 -163
  17. package/dist/types/client.d.ts.map +1 -1
  18. package/dist/types/client_state.d.ts +6 -6
  19. package/dist/types/client_state.d.ts.map +1 -1
  20. package/dist/types/connection.d.ts +10 -10
  21. package/dist/types/connection.d.ts.map +1 -1
  22. package/dist/types/connection_fallback.d.ts +7 -7
  23. package/dist/types/connection_fallback.d.ts.map +1 -1
  24. package/dist/types/insights.d.ts +2 -2
  25. package/dist/types/token_manager.d.ts +6 -6
  26. package/dist/types/token_manager.d.ts.map +1 -1
  27. package/dist/types/types.d.ts +404 -236
  28. package/dist/types/types.d.ts.map +1 -1
  29. package/dist/types/utils.d.ts +2 -2
  30. package/dist/types/utils.d.ts.map +1 -1
  31. package/package.json +2 -2
  32. package/src/channel.ts +196 -290
  33. package/src/channel_state.ts +54 -219
  34. package/src/client.ts +297 -524
  35. package/src/client_state.ts +6 -6
  36. package/src/connection.ts +7 -22
  37. package/src/connection_fallback.ts +7 -21
  38. package/src/token_manager.ts +6 -6
  39. package/src/types.ts +540 -487
  40. package/src/utils.ts +7 -11
@@ -4,84 +4,34 @@ import {
4
4
  ChannelMembership,
5
5
  FormatMessageResponse,
6
6
  Event,
7
- LiteralStringForUnion,
7
+ ExtendableGenerics,
8
+ DefaultGenerics,
8
9
  MessageResponse,
9
10
  ReactionResponse,
10
- UR,
11
11
  UserResponse,
12
12
  } from './types';
13
13
 
14
- type ChannelReadStatus<UserType> = Record<
14
+ type ChannelReadStatus<StreamChatGenerics extends ExtendableGenerics = DefaultGenerics> = Record<
15
15
  string,
16
- { last_read: Date; unread_messages: number; user: UserResponse<UserType> }
16
+ { last_read: Date; unread_messages: number; user: UserResponse<StreamChatGenerics> }
17
17
  >;
18
18
 
19
19
  /**
20
20
  * ChannelState - A container class for the channel state.
21
21
  */
22
- export class ChannelState<
23
- AttachmentType extends UR = UR,
24
- ChannelType extends UR = UR,
25
- CommandType extends string = LiteralStringForUnion,
26
- EventType extends UR = UR,
27
- MessageType extends UR = UR,
28
- ReactionType extends UR = UR,
29
- UserType extends UR = UR
30
- > {
31
- _channel: Channel<AttachmentType, ChannelType, CommandType, EventType, MessageType, ReactionType, UserType>;
22
+ export class ChannelState<StreamChatGenerics extends ExtendableGenerics = DefaultGenerics> {
23
+ _channel: Channel<StreamChatGenerics>;
32
24
  watcher_count: number;
33
- typing: Record<
34
- string,
35
- Event<AttachmentType, ChannelType, CommandType, EventType, MessageType, ReactionType, UserType>
36
- >;
37
- read: ChannelReadStatus<UserType>;
38
- messages: Array<
39
- ReturnType<
40
- ChannelState<
41
- AttachmentType,
42
- ChannelType,
43
- CommandType,
44
- EventType,
45
- MessageType,
46
- ReactionType,
47
- UserType
48
- >['formatMessage']
49
- >
50
- >;
51
- pinnedMessages: Array<
52
- ReturnType<
53
- ChannelState<
54
- AttachmentType,
55
- ChannelType,
56
- CommandType,
57
- EventType,
58
- MessageType,
59
- ReactionType,
60
- UserType
61
- >['formatMessage']
62
- >
63
- >;
64
- threads: Record<
65
- string,
66
- Array<
67
- ReturnType<
68
- ChannelState<
69
- AttachmentType,
70
- ChannelType,
71
- CommandType,
72
- EventType,
73
- MessageType,
74
- ReactionType,
75
- UserType
76
- >['formatMessage']
77
- >
78
- >
79
- >;
80
- mutedUsers: Array<UserResponse<UserType>>;
81
- watchers: Record<string, UserResponse<UserType>>;
82
- members: Record<string, ChannelMemberResponse<UserType>>;
25
+ typing: Record<string, Event<StreamChatGenerics>>;
26
+ read: ChannelReadStatus<StreamChatGenerics>;
27
+ messages: Array<ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>>;
28
+ pinnedMessages: Array<ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>>;
29
+ threads: Record<string, Array<ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>>>;
30
+ mutedUsers: Array<UserResponse<StreamChatGenerics>>;
31
+ watchers: Record<string, UserResponse<StreamChatGenerics>>;
32
+ members: Record<string, ChannelMemberResponse<StreamChatGenerics>>;
83
33
  unreadCount: number;
84
- membership: ChannelMembership<UserType>;
34
+ membership: ChannelMembership<StreamChatGenerics>;
85
35
  last_message_at: Date | null;
86
36
  /**
87
37
  * Flag which indicates if channel state contain latest/recent messages or no.
@@ -90,9 +40,7 @@ export class ChannelState<
90
40
  * be pushed on to message list.
91
41
  */
92
42
  isUpToDate: boolean;
93
- constructor(
94
- channel: Channel<AttachmentType, ChannelType, CommandType, EventType, MessageType, ReactionType, UserType>,
95
- ) {
43
+ constructor(channel: Channel<StreamChatGenerics>) {
96
44
  this._channel = channel;
97
45
  this.watcher_count = 0;
98
46
  this.typing = {};
@@ -119,13 +67,13 @@ export class ChannelState<
119
67
  /**
120
68
  * addMessageSorted - Add a message to the state
121
69
  *
122
- * @param {MessageResponse<AttachmentType, ChannelType, CommandType, MessageType, ReactionType, UserType>} newMessage A new message
70
+ * @param {MessageResponse<StreamChatGenerics>} newMessage A new message
123
71
  * @param {boolean} timestampChanged Whether updating a message with changed created_at value.
124
72
  * @param {boolean} addIfDoesNotExist Add message if it is not in the list, used to prevent out of order updated messages from being added.
125
73
  *
126
74
  */
127
75
  addMessageSorted(
128
- newMessage: MessageResponse<AttachmentType, ChannelType, CommandType, MessageType, ReactionType, UserType>,
76
+ newMessage: MessageResponse<StreamChatGenerics>,
129
77
  timestampChanged = false,
130
78
  addIfDoesNotExist = true,
131
79
  ) {
@@ -136,12 +84,10 @@ export class ChannelState<
136
84
  * formatMessage - Takes the message object. Parses the dates, sets __html
137
85
  * and sets the status to received if missing. Returns a message object
138
86
  *
139
- * @param {MessageResponse<AttachmentType, ChannelType, CommandType, MessageType, ReactionType, UserType>} message a message object
87
+ * @param {MessageResponse<StreamChatGenerics>} message a message object
140
88
  *
141
89
  */
142
- formatMessage(
143
- message: MessageResponse<AttachmentType, ChannelType, CommandType, MessageType, ReactionType, UserType>,
144
- ): FormatMessageResponse<AttachmentType, ChannelType, CommandType, MessageType, ReactionType, UserType> {
90
+ formatMessage(message: MessageResponse<StreamChatGenerics>): FormatMessageResponse<StreamChatGenerics> {
145
91
  return {
146
92
  ...message,
147
93
  /**
@@ -159,14 +105,14 @@ export class ChannelState<
159
105
  /**
160
106
  * addMessagesSorted - Add the list of messages to state and resorts the messages
161
107
  *
162
- * @param {Array<MessageResponse<AttachmentType, ChannelType, CommandType, MessageType, ReactionType, UserType>>} newMessages A list of messages
108
+ * @param {Array<MessageResponse<StreamChatGenerics>>} newMessages A list of messages
163
109
  * @param {boolean} timestampChanged Whether updating messages with changed created_at value.
164
110
  * @param {boolean} initializing Whether channel is being initialized.
165
111
  * @param {boolean} addIfDoesNotExist Add message if it is not in the list, used to prevent out of order updated messages from being added.
166
112
  *
167
113
  */
168
114
  addMessagesSorted(
169
- newMessages: MessageResponse<AttachmentType, ChannelType, CommandType, MessageType, ReactionType, UserType>[],
115
+ newMessages: MessageResponse<StreamChatGenerics>[],
170
116
  timestampChanged = false,
171
117
  initializing = false,
172
118
  addIfDoesNotExist = true,
@@ -243,12 +189,10 @@ export class ChannelState<
243
189
  /**
244
190
  * addPinnedMessages - adds messages in pinnedMessages property
245
191
  *
246
- * @param {Array<MessageResponse<AttachmentType, ChannelType, CommandType, MessageType, ReactionType, UserType>>} pinnedMessages A list of pinned messages
192
+ * @param {Array<MessageResponse<StreamChatGenerics>>} pinnedMessages A list of pinned messages
247
193
  *
248
194
  */
249
- addPinnedMessages(
250
- pinnedMessages: MessageResponse<AttachmentType, ChannelType, CommandType, MessageType, ReactionType, UserType>[],
251
- ) {
195
+ addPinnedMessages(pinnedMessages: MessageResponse<StreamChatGenerics>[]) {
252
196
  for (let i = 0; i < pinnedMessages.length; i += 1) {
253
197
  this.addPinnedMessage(pinnedMessages[i]);
254
198
  }
@@ -257,12 +201,10 @@ export class ChannelState<
257
201
  /**
258
202
  * addPinnedMessage - adds message in pinnedMessages
259
203
  *
260
- * @param {MessageResponse<AttachmentType, ChannelType, CommandType, MessageType, ReactionType, UserType>} pinnedMessage message to update
204
+ * @param {MessageResponse<StreamChatGenerics>} pinnedMessage message to update
261
205
  *
262
206
  */
263
- addPinnedMessage(
264
- pinnedMessage: MessageResponse<AttachmentType, ChannelType, CommandType, MessageType, ReactionType, UserType>,
265
- ) {
207
+ addPinnedMessage(pinnedMessage: MessageResponse<StreamChatGenerics>) {
266
208
  this.pinnedMessages = this._addToMessageList(
267
209
  this.pinnedMessages,
268
210
  this.formatMessage(pinnedMessage),
@@ -274,19 +216,17 @@ export class ChannelState<
274
216
  /**
275
217
  * removePinnedMessage - removes pinned message from pinnedMessages
276
218
  *
277
- * @param {MessageResponse<AttachmentType, ChannelType, CommandType, MessageType, ReactionType, UserType>} message message to remove
219
+ * @param {MessageResponse<StreamChatGenerics>} message message to remove
278
220
  *
279
221
  */
280
- removePinnedMessage(
281
- message: MessageResponse<AttachmentType, ChannelType, CommandType, MessageType, ReactionType, UserType>,
282
- ) {
222
+ removePinnedMessage(message: MessageResponse<StreamChatGenerics>) {
283
223
  const { result } = this.removeMessageFromArray(this.pinnedMessages, message);
284
224
  this.pinnedMessages = result;
285
225
  }
286
226
 
287
227
  addReaction(
288
- reaction: ReactionResponse<ReactionType, UserType>,
289
- message?: MessageResponse<AttachmentType, ChannelType, CommandType, MessageType, ReactionType, UserType>,
228
+ reaction: ReactionResponse<StreamChatGenerics>,
229
+ message?: MessageResponse<StreamChatGenerics>,
290
230
  enforce_unique?: boolean,
291
231
  ) {
292
232
  if (!message) return;
@@ -299,8 +239,8 @@ export class ChannelState<
299
239
  }
300
240
 
301
241
  _addOwnReactionToMessage(
302
- ownReactions: ReactionResponse<ReactionType, UserType>[] | null | undefined,
303
- reaction: ReactionResponse<ReactionType, UserType>,
242
+ ownReactions: ReactionResponse<StreamChatGenerics>[] | null | undefined,
243
+ reaction: ReactionResponse<StreamChatGenerics>,
304
244
  enforce_unique?: boolean,
305
245
  ) {
306
246
  if (enforce_unique) {
@@ -318,8 +258,8 @@ export class ChannelState<
318
258
  }
319
259
 
320
260
  _removeOwnReactionFromMessage(
321
- ownReactions: ReactionResponse<ReactionType, UserType>[] | null | undefined,
322
- reaction: ReactionResponse<ReactionType, UserType>,
261
+ ownReactions: ReactionResponse<StreamChatGenerics>[] | null | undefined,
262
+ reaction: ReactionResponse<StreamChatGenerics>,
323
263
  ) {
324
264
  if (ownReactions) {
325
265
  return ownReactions.filter((item) => item.user_id !== reaction.user_id || item.type !== reaction.type);
@@ -327,10 +267,7 @@ export class ChannelState<
327
267
  return ownReactions;
328
268
  }
329
269
 
330
- removeReaction(
331
- reaction: ReactionResponse<ReactionType, UserType>,
332
- message?: MessageResponse<AttachmentType, ChannelType, CommandType, MessageType, ReactionType, UserType>,
333
- ) {
270
+ removeReaction(reaction: ReactionResponse<StreamChatGenerics>, message?: MessageResponse<StreamChatGenerics>) {
334
271
  if (!message) return;
335
272
  const messageWithReaction = message;
336
273
  this._updateMessage(message, (msg) => {
@@ -340,28 +277,14 @@ export class ChannelState<
340
277
  return messageWithReaction;
341
278
  }
342
279
 
343
- removeQuotedMessageReferences(
344
- message: MessageResponse<AttachmentType, ChannelType, CommandType, MessageType, ReactionType, UserType>,
345
- ) {
346
- const parseMessage = (
347
- m: ReturnType<
348
- ChannelState<
349
- AttachmentType,
350
- ChannelType,
351
- CommandType,
352
- EventType,
353
- MessageType,
354
- ReactionType,
355
- UserType
356
- >['formatMessage']
357
- >,
358
- ) =>
280
+ removeQuotedMessageReferences(message: MessageResponse<StreamChatGenerics>) {
281
+ const parseMessage = (m: ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>) =>
359
282
  (({
360
283
  ...m,
361
284
  created_at: m.created_at.toString(),
362
285
  pinned_at: m.pinned_at?.toString(),
363
286
  updated_at: m.updated_at?.toString(),
364
- } as unknown) as MessageResponse<AttachmentType, ChannelType, CommandType, MessageType, ReactionType, UserType>);
287
+ } as unknown) as MessageResponse<StreamChatGenerics>);
365
288
 
366
289
  const updatedMessages = this.messages
367
290
  .filter((msg) => msg.quoted_message_id === message.id)
@@ -384,28 +307,8 @@ export class ChannelState<
384
307
  show_in_channel?: boolean;
385
308
  },
386
309
  updateFunc: (
387
- msg: ReturnType<
388
- ChannelState<
389
- AttachmentType,
390
- ChannelType,
391
- CommandType,
392
- EventType,
393
- MessageType,
394
- ReactionType,
395
- UserType
396
- >['formatMessage']
397
- >,
398
- ) => ReturnType<
399
- ChannelState<
400
- AttachmentType,
401
- ChannelType,
402
- CommandType,
403
- EventType,
404
- MessageType,
405
- ReactionType,
406
- UserType
407
- >['formatMessage']
408
- >,
310
+ msg: ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>,
311
+ ) => ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>,
409
312
  ) {
410
313
  const { parent_id, show_in_channel, pinned } = message;
411
314
 
@@ -448,37 +351,15 @@ export class ChannelState<
448
351
  /**
449
352
  * _addToMessageList - Adds a message to a list of messages, tries to update first, appends if message isn't found
450
353
  *
451
- * @param {Array<ReturnType<ChannelState<AttachmentType, ChannelType, CommandType, EventType, MessageType, ReactionType, UserType>['formatMessage']>>} messages A list of messages
354
+ * @param {Array<ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>>} messages A list of messages
452
355
  * @param message
453
356
  * @param {boolean} timestampChanged Whether updating a message with changed created_at value.
454
357
  * @param {string} sortBy field name to use to sort the messages by
455
358
  * @param {boolean} addIfDoesNotExist Add message if it is not in the list, used to prevent out of order updated messages from being added.
456
359
  */
457
360
  _addToMessageList(
458
- messages: Array<
459
- ReturnType<
460
- ChannelState<
461
- AttachmentType,
462
- ChannelType,
463
- CommandType,
464
- EventType,
465
- MessageType,
466
- ReactionType,
467
- UserType
468
- >['formatMessage']
469
- >
470
- >,
471
- message: ReturnType<
472
- ChannelState<
473
- AttachmentType,
474
- ChannelType,
475
- CommandType,
476
- EventType,
477
- MessageType,
478
- ReactionType,
479
- UserType
480
- >['formatMessage']
481
- >,
361
+ messages: Array<ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>>,
362
+ message: ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>,
482
363
  timestampChanged = false,
483
364
  sortBy: 'pinned_at' | 'created_at' = 'created_at',
484
365
  addIfDoesNotExist = true,
@@ -570,19 +451,7 @@ export class ChannelState<
570
451
  }
571
452
 
572
453
  removeMessageFromArray = (
573
- msgArray: Array<
574
- ReturnType<
575
- ChannelState<
576
- AttachmentType,
577
- ChannelType,
578
- CommandType,
579
- EventType,
580
- MessageType,
581
- ReactionType,
582
- UserType
583
- >['formatMessage']
584
- >
585
- >,
454
+ msgArray: Array<ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>>,
586
455
  msg: { id: string; parent_id?: string },
587
456
  ) => {
588
457
  const result = msgArray.filter((message) => !(!!message.id && !!msg.id && message.id === msg.id));
@@ -593,24 +462,12 @@ export class ChannelState<
593
462
  /**
594
463
  * Updates the message.user property with updated user object, for messages.
595
464
  *
596
- * @param {UserResponse<UserType>} user
465
+ * @param {UserResponse<StreamChatGenerics>} user
597
466
  */
598
- updateUserMessages = (user: UserResponse<UserType>) => {
467
+ updateUserMessages = (user: UserResponse<StreamChatGenerics>) => {
599
468
  const _updateUserMessages = (
600
- messages: Array<
601
- ReturnType<
602
- ChannelState<
603
- AttachmentType,
604
- ChannelType,
605
- CommandType,
606
- EventType,
607
- MessageType,
608
- ReactionType,
609
- UserType
610
- >['formatMessage']
611
- >
612
- >,
613
- user: UserResponse<UserType>,
469
+ messages: Array<ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>>,
470
+ user: UserResponse<StreamChatGenerics>,
614
471
  ) => {
615
472
  for (let i = 0; i < messages.length; i++) {
616
473
  const m = messages[i];
@@ -632,25 +489,13 @@ export class ChannelState<
632
489
  /**
633
490
  * Marks the messages as deleted, from deleted user.
634
491
  *
635
- * @param {UserResponse<UserType>} user
492
+ * @param {UserResponse<StreamChatGenerics>} user
636
493
  * @param {boolean} hardDelete
637
494
  */
638
- deleteUserMessages = (user: UserResponse<UserType>, hardDelete = false) => {
495
+ deleteUserMessages = (user: UserResponse<StreamChatGenerics>, hardDelete = false) => {
639
496
  const _deleteUserMessages = (
640
- messages: Array<
641
- ReturnType<
642
- ChannelState<
643
- AttachmentType,
644
- ChannelType,
645
- CommandType,
646
- EventType,
647
- MessageType,
648
- ReactionType,
649
- UserType
650
- >['formatMessage']
651
- >
652
- >,
653
- user: UserResponse<UserType>,
497
+ messages: Array<ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>>,
498
+ user: UserResponse<StreamChatGenerics>,
654
499
  hardDelete = false,
655
500
  ) => {
656
501
  for (let i = 0; i < messages.length; i++) {
@@ -679,17 +524,7 @@ export class ChannelState<
679
524
  type: 'deleted',
680
525
  updated_at: m.updated_at,
681
526
  user: m.user,
682
- } as unknown) as ReturnType<
683
- ChannelState<
684
- AttachmentType,
685
- ChannelType,
686
- CommandType,
687
- EventType,
688
- MessageType,
689
- ReactionType,
690
- UserType
691
- >['formatMessage']
692
- >;
527
+ } as unknown) as ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>;
693
528
  } else {
694
529
  messages[i] = {
695
530
  ...m,
@@ -736,7 +571,7 @@ export class ChannelState<
736
571
  cid: this._channel.cid,
737
572
  type: 'typing.stop',
738
573
  user: { id: userID },
739
- } as Event<AttachmentType, ChannelType, CommandType, EventType, MessageType, ReactionType, UserType>);
574
+ } as Event<StreamChatGenerics>);
740
575
  }
741
576
  }
742
577
  }