stream-chat 9.52.0 → 9.52.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -587,6 +587,22 @@ function logChatPromiseExecution(promise, name) {
587
587
  console.warn(`failed to do ${name}, ran into error: `, error);
588
588
  });
589
589
  }
590
+ var noopLogger = () => null;
591
+ var logError = (logger, error, event) => {
592
+ const message = "Unhandled error in event listener";
593
+ logger("error", message, { error, event });
594
+ if (logger === noopLogger) console.error(message, error, event);
595
+ };
596
+ var invokeEventListener = (listener, event, logger) => {
597
+ try {
598
+ const result = listener(event);
599
+ if (result && typeof result.then === "function") {
600
+ Promise.resolve(result).catch((error) => logError(logger, error, event));
601
+ }
602
+ } catch (error) {
603
+ logError(logger, error, event);
604
+ }
605
+ };
590
606
  var sleep = (m) => new Promise((r) => setTimeout(r, m));
591
607
  function isFunction(value) {
592
608
  return typeof value === "function" || value instanceof Function || Object.prototype.toString.call(value) === "[object Function]";
@@ -634,7 +650,6 @@ var channelHasReadEvents = (channel) => {
634
650
  return !(Array.isArray(ownCapabilities) && !ownCapabilities.includes("read-events"));
635
651
  };
636
652
  var channelTracksReadLocally = (channel) => !channelHasReadEvents(channel) && !!channel?.getClient().options.isLocalUnreadCountEnabled;
637
- var userHasReadReceipts = (client) => client.user?.privacy_settings?.read_receipts?.enabled ?? true;
638
653
  function addFileToFormData(uri, name, contentType) {
639
654
  const data = new import_form_data.default();
640
655
  if (isReadableStream(uri) || isBuffer(uri) || isFileWebAPI(uri) || isBlobWebAPI(uri)) {
@@ -9187,7 +9202,6 @@ var MessageDeliveryReporter = class _MessageDeliveryReporter {
9187
9202
  * @param options
9188
9203
  */
9189
9204
  this.markRead = async (collection, options) => {
9190
- if (!userHasReadReceipts(this.client)) return null;
9191
9205
  let result = null;
9192
9206
  if (isChannel(collection)) {
9193
9207
  result = await collection.markAsReadRequest(options);
@@ -9197,7 +9211,7 @@ var MessageDeliveryReporter = class _MessageDeliveryReporter {
9197
9211
  thread_id: collection.id
9198
9212
  });
9199
9213
  }
9200
- this.removeCandidateFor(collection);
9214
+ if (result) this.removeCandidateFor(collection);
9201
9215
  return result;
9202
9216
  };
9203
9217
  /**
@@ -9582,18 +9596,14 @@ var Channel = class {
9582
9596
  return await this.query(defaultOptions, "latest");
9583
9597
  };
9584
9598
  this._callChannelListeners = (event) => {
9585
- const channel = this;
9586
- const listeners = [];
9587
- if (channel.listeners.all) {
9588
- listeners.push(...channel.listeners.all);
9589
- }
9590
- if (channel.listeners[event.type]) {
9591
- listeners.push(...channel.listeners[event.type]);
9592
- }
9599
+ const listeners = [
9600
+ ...this.listeners.all ?? [],
9601
+ ...this.listeners[event.type] ?? []
9602
+ ];
9603
+ const { logger } = this._client;
9593
9604
  for (const listener of listeners) {
9594
- if (typeof listener !== "string") {
9595
- listener(event);
9596
- }
9605
+ if (typeof listener === "string") continue;
9606
+ invokeEventListener(listener, event, logger);
9597
9607
  }
9598
9608
  };
9599
9609
  /**
@@ -10507,14 +10517,15 @@ var Channel = class {
10507
10517
  return await this.getClient().messageDeliveryReporter.markRead(this, data);
10508
10518
  }
10509
10519
  /**
10510
- * markReadRequest - Send the mark read event for this user, only works if the `read_events` setting is enabled
10520
+ * markReadRequest - Send the mark read event for this user, only works if the `read_events` setting is
10521
+ * enabled and the user holds the `read-events` capability on this channel
10511
10522
  *
10512
10523
  * @param {MarkReadOptions} data
10513
10524
  * @return {Promise<EventAPIResponse | null>} Description
10514
10525
  */
10515
10526
  async markAsReadRequest(data = {}) {
10516
10527
  this._checkInitialized();
10517
- if (!this.getConfig()?.read_events && !this.getClient()._isUsingServerAuth()) {
10528
+ if (!this.getClient()._isUsingServerAuth() && (!this.getConfig()?.read_events || !channelHasReadEvents(this))) {
10518
10529
  return null;
10519
10530
  }
10520
10531
  return await this.getClient().post(this._channelURL() + "/read", {
@@ -10522,14 +10533,15 @@ var Channel = class {
10522
10533
  });
10523
10534
  }
10524
10535
  /**
10525
- * markUnread - Mark the channel as unread from messageID, only works if the `read_events` setting is enabled
10536
+ * markUnread - Mark the channel as unread from messageID, only works if the `read_events` setting is
10537
+ * enabled and the user holds the `read-events` capability on this channel
10526
10538
  *
10527
10539
  * @param {MarkUnreadOptions} data
10528
10540
  * @return {APIResponse} An API response
10529
10541
  */
10530
10542
  async markUnread(data) {
10531
10543
  this._checkInitialized();
10532
- if (!this.getConfig()?.read_events && !this.getClient()._isUsingServerAuth()) {
10544
+ if (!this.getClient()._isUsingServerAuth() && (!this.getConfig()?.read_events || !channelHasReadEvents(this))) {
10533
10545
  return Promise.resolve(null);
10534
10546
  }
10535
10547
  return await this.getClient().post(this._channelURL() + "/unread", {
@@ -14991,16 +15003,12 @@ var StreamChat = class _StreamChat {
14991
15003
  }
14992
15004
  };
14993
15005
  this._callClientListeners = (event) => {
14994
- const client = this;
14995
- const listeners = [];
14996
- if (client.listeners.all) {
14997
- listeners.push(...client.listeners.all);
14998
- }
14999
- if (client.listeners[event.type]) {
15000
- listeners.push(...client.listeners[event.type]);
15001
- }
15006
+ const listeners = [
15007
+ ...this.listeners.all ?? [],
15008
+ ...this.listeners[event.type] ?? []
15009
+ ];
15002
15010
  for (const listener of listeners) {
15003
- listener(event);
15011
+ invokeEventListener(listener, event, this.logger);
15004
15012
  }
15005
15013
  };
15006
15014
  this.recoverState = async () => {
@@ -15154,7 +15162,7 @@ var StreamChat = class _StreamChat {
15154
15162
  return this.userAgent;
15155
15163
  }
15156
15164
  if (!this.cachedUserAgent) {
15157
- const version = "9.52.0";
15165
+ const version = "9.52.1";
15158
15166
  const { name: sdkName, version: sdkVersion } = this.sdkIdentifier ?? {};
15159
15167
  const { name: appName, version: appVersion } = this.appIdentifier ?? {};
15160
15168
  const { os, model: deviceModel } = this.deviceIdentifier ?? {};
@@ -15243,7 +15251,7 @@ var StreamChat = class _StreamChat {
15243
15251
  this.defaultWSTimeoutWithFallback = 6 * 1e3;
15244
15252
  this.defaultWSTimeout = 15 * 1e3;
15245
15253
  this.axiosInstance.defaults.paramsSerializer = axiosParamsSerializer;
15246
- this.logger = isFunction(inputOptions.logger) ? inputOptions.logger : () => null;
15254
+ this.logger = isFunction(inputOptions.logger) ? inputOptions.logger : noopLogger;
15247
15255
  this.recoverStateOnReconnect = this.options.recoverStateOnReconnect;
15248
15256
  this.threads = new ThreadManager({ client: this });
15249
15257
  this.polls = new PollManager({ client: this });