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.
@@ -556,6 +556,22 @@ function logChatPromiseExecution(promise, name) {
556
556
  console.warn(`failed to do ${name}, ran into error: `, error);
557
557
  });
558
558
  }
559
+ var noopLogger = () => null;
560
+ var logError = (logger, error, event) => {
561
+ const message = "Unhandled error in event listener";
562
+ logger("error", message, { error, event });
563
+ if (logger === noopLogger) console.error(message, error, event);
564
+ };
565
+ var invokeEventListener = (listener, event, logger) => {
566
+ try {
567
+ const result = listener(event);
568
+ if (result && typeof result.then === "function") {
569
+ Promise.resolve(result).catch((error) => logError(logger, error, event));
570
+ }
571
+ } catch (error) {
572
+ logError(logger, error, event);
573
+ }
574
+ };
559
575
  var sleep = (m) => new Promise((r) => setTimeout(r, m));
560
576
  function isFunction(value) {
561
577
  return typeof value === "function" || value instanceof Function || Object.prototype.toString.call(value) === "[object Function]";
@@ -603,7 +619,6 @@ var channelHasReadEvents = (channel) => {
603
619
  return !(Array.isArray(ownCapabilities) && !ownCapabilities.includes("read-events"));
604
620
  };
605
621
  var channelTracksReadLocally = (channel) => !channelHasReadEvents(channel) && !!channel?.getClient().options.isLocalUnreadCountEnabled;
606
- var userHasReadReceipts = (client) => client.user?.privacy_settings?.read_receipts?.enabled ?? true;
607
622
  function addFileToFormData(uri, name, contentType) {
608
623
  const data = new import_form_data.default();
609
624
  if (isReadableStream(uri) || isBuffer(uri) || isFileWebAPI(uri) || isBlobWebAPI(uri)) {
@@ -9156,7 +9171,6 @@ var MessageDeliveryReporter = class _MessageDeliveryReporter {
9156
9171
  * @param options
9157
9172
  */
9158
9173
  this.markRead = async (collection, options) => {
9159
- if (!userHasReadReceipts(this.client)) return null;
9160
9174
  let result = null;
9161
9175
  if (isChannel(collection)) {
9162
9176
  result = await collection.markAsReadRequest(options);
@@ -9166,7 +9180,7 @@ var MessageDeliveryReporter = class _MessageDeliveryReporter {
9166
9180
  thread_id: collection.id
9167
9181
  });
9168
9182
  }
9169
- this.removeCandidateFor(collection);
9183
+ if (result) this.removeCandidateFor(collection);
9170
9184
  return result;
9171
9185
  };
9172
9186
  /**
@@ -9551,18 +9565,14 @@ var Channel = class {
9551
9565
  return await this.query(defaultOptions, "latest");
9552
9566
  };
9553
9567
  this._callChannelListeners = (event) => {
9554
- const channel = this;
9555
- const listeners = [];
9556
- if (channel.listeners.all) {
9557
- listeners.push(...channel.listeners.all);
9558
- }
9559
- if (channel.listeners[event.type]) {
9560
- listeners.push(...channel.listeners[event.type]);
9561
- }
9568
+ const listeners = [
9569
+ ...this.listeners.all ?? [],
9570
+ ...this.listeners[event.type] ?? []
9571
+ ];
9572
+ const { logger } = this._client;
9562
9573
  for (const listener of listeners) {
9563
- if (typeof listener !== "string") {
9564
- listener(event);
9565
- }
9574
+ if (typeof listener === "string") continue;
9575
+ invokeEventListener(listener, event, logger);
9566
9576
  }
9567
9577
  };
9568
9578
  /**
@@ -10476,14 +10486,15 @@ var Channel = class {
10476
10486
  return await this.getClient().messageDeliveryReporter.markRead(this, data);
10477
10487
  }
10478
10488
  /**
10479
- * markReadRequest - Send the mark read event for this user, only works if the `read_events` setting is enabled
10489
+ * markReadRequest - Send the mark read event for this user, only works if the `read_events` setting is
10490
+ * enabled and the user holds the `read-events` capability on this channel
10480
10491
  *
10481
10492
  * @param {MarkReadOptions} data
10482
10493
  * @return {Promise<EventAPIResponse | null>} Description
10483
10494
  */
10484
10495
  async markAsReadRequest(data = {}) {
10485
10496
  this._checkInitialized();
10486
- if (!this.getConfig()?.read_events && !this.getClient()._isUsingServerAuth()) {
10497
+ if (!this.getClient()._isUsingServerAuth() && (!this.getConfig()?.read_events || !channelHasReadEvents(this))) {
10487
10498
  return null;
10488
10499
  }
10489
10500
  return await this.getClient().post(this._channelURL() + "/read", {
@@ -10491,14 +10502,15 @@ var Channel = class {
10491
10502
  });
10492
10503
  }
10493
10504
  /**
10494
- * markUnread - Mark the channel as unread from messageID, only works if the `read_events` setting is enabled
10505
+ * markUnread - Mark the channel as unread from messageID, only works if the `read_events` setting is
10506
+ * enabled and the user holds the `read-events` capability on this channel
10495
10507
  *
10496
10508
  * @param {MarkUnreadOptions} data
10497
10509
  * @return {APIResponse} An API response
10498
10510
  */
10499
10511
  async markUnread(data) {
10500
10512
  this._checkInitialized();
10501
- if (!this.getConfig()?.read_events && !this.getClient()._isUsingServerAuth()) {
10513
+ if (!this.getClient()._isUsingServerAuth() && (!this.getConfig()?.read_events || !channelHasReadEvents(this))) {
10502
10514
  return Promise.resolve(null);
10503
10515
  }
10504
10516
  return await this.getClient().post(this._channelURL() + "/unread", {
@@ -14960,16 +14972,12 @@ var StreamChat = class _StreamChat {
14960
14972
  }
14961
14973
  };
14962
14974
  this._callClientListeners = (event) => {
14963
- const client = this;
14964
- const listeners = [];
14965
- if (client.listeners.all) {
14966
- listeners.push(...client.listeners.all);
14967
- }
14968
- if (client.listeners[event.type]) {
14969
- listeners.push(...client.listeners[event.type]);
14970
- }
14975
+ const listeners = [
14976
+ ...this.listeners.all ?? [],
14977
+ ...this.listeners[event.type] ?? []
14978
+ ];
14971
14979
  for (const listener of listeners) {
14972
- listener(event);
14980
+ invokeEventListener(listener, event, this.logger);
14973
14981
  }
14974
14982
  };
14975
14983
  this.recoverState = async () => {
@@ -15123,7 +15131,7 @@ var StreamChat = class _StreamChat {
15123
15131
  return this.userAgent;
15124
15132
  }
15125
15133
  if (!this.cachedUserAgent) {
15126
- const version = "9.52.0";
15134
+ const version = "9.52.1";
15127
15135
  const { name: sdkName, version: sdkVersion } = this.sdkIdentifier ?? {};
15128
15136
  const { name: appName, version: appVersion } = this.appIdentifier ?? {};
15129
15137
  const { os, model: deviceModel } = this.deviceIdentifier ?? {};
@@ -15212,7 +15220,7 @@ var StreamChat = class _StreamChat {
15212
15220
  this.defaultWSTimeoutWithFallback = 6 * 1e3;
15213
15221
  this.defaultWSTimeout = 15 * 1e3;
15214
15222
  this.axiosInstance.defaults.paramsSerializer = axiosParamsSerializer;
15215
- this.logger = isFunction(inputOptions.logger) ? inputOptions.logger : () => null;
15223
+ this.logger = isFunction(inputOptions.logger) ? inputOptions.logger : noopLogger;
15216
15224
  this.recoverStateOnReconnect = this.options.recoverStateOnReconnect;
15217
15225
  this.threads = new ThreadManager({ client: this });
15218
15226
  this.polls = new PollManager({ client: this });