stream-chat 9.24.0 → 9.25.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.
@@ -4651,6 +4651,62 @@ var createActiveCommandGuardMiddleware = () => ({
4651
4651
  id: "stream-io/text-composer/active-command-guard"
4652
4652
  });
4653
4653
 
4654
+ // src/errors.ts
4655
+ var APIErrorCodes = {
4656
+ "-1": { name: "InternalSystemError", retryable: true },
4657
+ "2": { name: "AccessKeyError", retryable: false },
4658
+ "3": { name: "AuthenticationFailedError", retryable: true },
4659
+ "4": { name: "InputError", retryable: false },
4660
+ "6": { name: "DuplicateUsernameError", retryable: false },
4661
+ "9": { name: "RateLimitError", retryable: true },
4662
+ "16": { name: "DoesNotExistError", retryable: false },
4663
+ "17": { name: "NotAllowedError", retryable: false },
4664
+ "18": { name: "EventNotSupportedError", retryable: false },
4665
+ "19": { name: "ChannelFeatureNotSupportedError", retryable: false },
4666
+ "20": { name: "MessageTooLongError", retryable: false },
4667
+ "21": { name: "MultipleNestingLevelError", retryable: false },
4668
+ "22": { name: "PayloadTooBigError", retryable: false },
4669
+ "23": { name: "RequestTimeoutError", retryable: true },
4670
+ "24": { name: "MaxHeaderSizeExceededError", retryable: false },
4671
+ "40": { name: "AuthErrorTokenExpired", retryable: false },
4672
+ "41": { name: "AuthErrorTokenNotValidYet", retryable: false },
4673
+ "42": { name: "AuthErrorTokenUsedBeforeIssuedAt", retryable: false },
4674
+ "43": { name: "AuthErrorTokenSignatureInvalid", retryable: false },
4675
+ "44": { name: "CustomCommandEndpointMissingError", retryable: false },
4676
+ "45": { name: "CustomCommandEndpointCallError", retryable: true },
4677
+ "46": { name: "ConnectionIDNotFoundError", retryable: false },
4678
+ "60": { name: "CoolDownError", retryable: true },
4679
+ "69": { name: "ErrWrongRegion", retryable: false },
4680
+ "70": { name: "ErrQueryChannelPermissions", retryable: false },
4681
+ "71": { name: "ErrTooManyConnections", retryable: true },
4682
+ "99": { name: "AppSuspendedError", retryable: false }
4683
+ };
4684
+ function isAPIError(error) {
4685
+ return error.code !== void 0;
4686
+ }
4687
+ function isErrorRetryable(error) {
4688
+ if (!error.code) return false;
4689
+ const err = APIErrorCodes[`${error.code}`];
4690
+ if (!err) return false;
4691
+ return err.retryable;
4692
+ }
4693
+ function isConnectionIDError(error) {
4694
+ return error.code === 46;
4695
+ }
4696
+ function isWSFailure(err) {
4697
+ if (typeof err.isWSFailure === "boolean") {
4698
+ return err.isWSFailure;
4699
+ }
4700
+ try {
4701
+ return JSON.parse(err.message).isWSFailure;
4702
+ } catch (_) {
4703
+ return false;
4704
+ }
4705
+ }
4706
+ function isErrorResponse(res) {
4707
+ return !res.status || res.status < 200 || 300 <= res.status;
4708
+ }
4709
+
4654
4710
  // src/search/BaseSearchSource.ts
4655
4711
  var DEFAULT_SEARCH_SOURCE_OPTIONS = {
4656
4712
  debounceMs: 300,
@@ -4785,6 +4841,9 @@ var BaseSearchSource = class extends BaseSearchSourceBase {
4785
4841
  stateUpdate.items = await this.filterQueryResults(items);
4786
4842
  } catch (e) {
4787
4843
  stateUpdate.lastQueryError = e;
4844
+ if (isAPIError(e) && !isErrorRetryable(e)) {
4845
+ stateUpdate.hasNext = false;
4846
+ }
4788
4847
  } finally {
4789
4848
  this.state.next(this.getStateAfterQuery(stateUpdate, hasNewSearchQuery));
4790
4849
  }
@@ -4815,6 +4874,9 @@ var BaseSearchSourceSync = class extends BaseSearchSourceBase {
4815
4874
  stateUpdate.items = this.filterQueryResults(items);
4816
4875
  } catch (e) {
4817
4876
  stateUpdate.lastQueryError = e;
4877
+ if (isAPIError(e) && !isErrorRetryable(e)) {
4878
+ stateUpdate.hasNext = false;
4879
+ }
4818
4880
  } finally {
4819
4881
  this.state.next(this.getStateAfterQuery(stateUpdate, hasNewSearchQuery));
4820
4882
  }
@@ -7176,7 +7238,7 @@ var MARK_AS_DELIVERED_BUFFER_TIMEOUT = 1e3;
7176
7238
  var MARK_AS_READ_THROTTLE_TIMEOUT2 = 1e3;
7177
7239
  var isChannel = (item) => item instanceof Channel;
7178
7240
  var isThread = (item) => item instanceof Thread;
7179
- var MessageDeliveryReporter = class {
7241
+ var MessageDeliveryReporter = class _MessageDeliveryReporter {
7180
7242
  constructor({ client }) {
7181
7243
  this.deliveryReportCandidates = /* @__PURE__ */ new Map();
7182
7244
  this.nextDeliveryReportCandidates = /* @__PURE__ */ new Map();
@@ -7290,6 +7352,10 @@ var MessageDeliveryReporter = class {
7290
7352
  get hasDeliveryCandidates() {
7291
7353
  return this.deliveryReportCandidates.size > 0;
7292
7354
  }
7355
+ static hasPermissionToReportDeliveryFor(collection) {
7356
+ if (isChannel(collection)) return !!collection.getConfig()?.delivery_events;
7357
+ if (isThread(collection)) return !!collection.channel.getConfig()?.delivery_events;
7358
+ }
7293
7359
  /**
7294
7360
  * Build latest_delivered_messages payload from an arbitrary buffer (deliveryReportCandidates / nextDeliveryReportCandidates)
7295
7361
  */
@@ -7321,8 +7387,7 @@ var MessageDeliveryReporter = class {
7321
7387
  * @param collection
7322
7388
  */
7323
7389
  trackDeliveredCandidate(collection) {
7324
- if (isChannel(collection) && !collection.getConfig()?.read_events) return;
7325
- if (isThread(collection) && !collection.channel.getConfig()?.read_events) return;
7390
+ if (!_MessageDeliveryReporter.hasPermissionToReportDeliveryFor(collection)) return;
7326
7391
  const candidate = this.getNextDeliveryReportCandidate(collection);
7327
7392
  if (!candidate?.key) return;
7328
7393
  const buffer = this.markDeliveredRequestInFlight ? this.nextDeliveryReportCandidates : this.deliveryReportCandidates;
@@ -10240,64 +10305,6 @@ var TokenManager = class {
10240
10305
 
10241
10306
  // src/connection_fallback.ts
10242
10307
  var import_axios2 = __toESM(require("axios"));
10243
-
10244
- // src/errors.ts
10245
- var APIErrorCodes = {
10246
- "-1": { name: "InternalSystemError", retryable: true },
10247
- "2": { name: "AccessKeyError", retryable: false },
10248
- "3": { name: "AuthenticationFailedError", retryable: true },
10249
- "4": { name: "InputError", retryable: false },
10250
- "6": { name: "DuplicateUsernameError", retryable: false },
10251
- "9": { name: "RateLimitError", retryable: true },
10252
- "16": { name: "DoesNotExistError", retryable: false },
10253
- "17": { name: "NotAllowedError", retryable: false },
10254
- "18": { name: "EventNotSupportedError", retryable: false },
10255
- "19": { name: "ChannelFeatureNotSupportedError", retryable: false },
10256
- "20": { name: "MessageTooLongError", retryable: false },
10257
- "21": { name: "MultipleNestingLevelError", retryable: false },
10258
- "22": { name: "PayloadTooBigError", retryable: false },
10259
- "23": { name: "RequestTimeoutError", retryable: true },
10260
- "24": { name: "MaxHeaderSizeExceededError", retryable: false },
10261
- "40": { name: "AuthErrorTokenExpired", retryable: false },
10262
- "41": { name: "AuthErrorTokenNotValidYet", retryable: false },
10263
- "42": { name: "AuthErrorTokenUsedBeforeIssuedAt", retryable: false },
10264
- "43": { name: "AuthErrorTokenSignatureInvalid", retryable: false },
10265
- "44": { name: "CustomCommandEndpointMissingError", retryable: false },
10266
- "45": { name: "CustomCommandEndpointCallError", retryable: true },
10267
- "46": { name: "ConnectionIDNotFoundError", retryable: false },
10268
- "60": { name: "CoolDownError", retryable: true },
10269
- "69": { name: "ErrWrongRegion", retryable: false },
10270
- "70": { name: "ErrQueryChannelPermissions", retryable: false },
10271
- "71": { name: "ErrTooManyConnections", retryable: true },
10272
- "99": { name: "AppSuspendedError", retryable: false }
10273
- };
10274
- function isAPIError(error) {
10275
- return error.code !== void 0;
10276
- }
10277
- function isErrorRetryable(error) {
10278
- if (!error.code) return false;
10279
- const err = APIErrorCodes[`${error.code}`];
10280
- if (!err) return false;
10281
- return err.retryable;
10282
- }
10283
- function isConnectionIDError(error) {
10284
- return error.code === 46;
10285
- }
10286
- function isWSFailure(err) {
10287
- if (typeof err.isWSFailure === "boolean") {
10288
- return err.isWSFailure;
10289
- }
10290
- try {
10291
- return JSON.parse(err.message).isWSFailure;
10292
- } catch (_) {
10293
- return false;
10294
- }
10295
- }
10296
- function isErrorResponse(res) {
10297
- return !res.status || res.status < 200 || 300 <= res.status;
10298
- }
10299
-
10300
- // src/connection_fallback.ts
10301
10308
  var WSConnectionFallback = class {
10302
10309
  constructor({ client }) {
10303
10310
  /** @private */
@@ -14639,7 +14646,7 @@ var StreamChat = class _StreamChat {
14639
14646
  if (this.userAgent) {
14640
14647
  return this.userAgent;
14641
14648
  }
14642
- const version = "9.24.0";
14649
+ const version = "9.25.0";
14643
14650
  const clientBundle = "browser-cjs";
14644
14651
  let userAgentString = "";
14645
14652
  if (this.sdkIdentifier) {
@@ -15788,17 +15795,14 @@ var StreamChat = class _StreamChat {
15788
15795
  return this.delete(`${this.baseURL}/uploads/image`, { url });
15789
15796
  }
15790
15797
  /**
15791
- * Send the mark delivered event for this user
15798
+ * Mark the channels delivered for the given messages and the user
15792
15799
  *
15793
15800
  * @param {MarkDeliveredOptions} data
15794
15801
  * @return {Promise<EventAPIResponse | void>} Description
15795
15802
  */
15796
15803
  async markChannelsDelivered(data) {
15797
15804
  if (!data?.latest_delivered_messages?.length) return;
15798
- return await this.post(
15799
- this.baseURL + "/channels/delivered",
15800
- data ?? {}
15801
- );
15805
+ return await this.post(this.baseURL + "/channels/delivered", data);
15802
15806
  }
15803
15807
  syncDeliveredCandidates(collections) {
15804
15808
  this.messageDeliveryReporter.syncDeliveredCandidates(collections);