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.
@@ -4630,6 +4630,62 @@ var createActiveCommandGuardMiddleware = () => ({
4630
4630
  id: "stream-io/text-composer/active-command-guard"
4631
4631
  });
4632
4632
 
4633
+ // src/errors.ts
4634
+ var APIErrorCodes = {
4635
+ "-1": { name: "InternalSystemError", retryable: true },
4636
+ "2": { name: "AccessKeyError", retryable: false },
4637
+ "3": { name: "AuthenticationFailedError", retryable: true },
4638
+ "4": { name: "InputError", retryable: false },
4639
+ "6": { name: "DuplicateUsernameError", retryable: false },
4640
+ "9": { name: "RateLimitError", retryable: true },
4641
+ "16": { name: "DoesNotExistError", retryable: false },
4642
+ "17": { name: "NotAllowedError", retryable: false },
4643
+ "18": { name: "EventNotSupportedError", retryable: false },
4644
+ "19": { name: "ChannelFeatureNotSupportedError", retryable: false },
4645
+ "20": { name: "MessageTooLongError", retryable: false },
4646
+ "21": { name: "MultipleNestingLevelError", retryable: false },
4647
+ "22": { name: "PayloadTooBigError", retryable: false },
4648
+ "23": { name: "RequestTimeoutError", retryable: true },
4649
+ "24": { name: "MaxHeaderSizeExceededError", retryable: false },
4650
+ "40": { name: "AuthErrorTokenExpired", retryable: false },
4651
+ "41": { name: "AuthErrorTokenNotValidYet", retryable: false },
4652
+ "42": { name: "AuthErrorTokenUsedBeforeIssuedAt", retryable: false },
4653
+ "43": { name: "AuthErrorTokenSignatureInvalid", retryable: false },
4654
+ "44": { name: "CustomCommandEndpointMissingError", retryable: false },
4655
+ "45": { name: "CustomCommandEndpointCallError", retryable: true },
4656
+ "46": { name: "ConnectionIDNotFoundError", retryable: false },
4657
+ "60": { name: "CoolDownError", retryable: true },
4658
+ "69": { name: "ErrWrongRegion", retryable: false },
4659
+ "70": { name: "ErrQueryChannelPermissions", retryable: false },
4660
+ "71": { name: "ErrTooManyConnections", retryable: true },
4661
+ "99": { name: "AppSuspendedError", retryable: false }
4662
+ };
4663
+ function isAPIError(error) {
4664
+ return error.code !== void 0;
4665
+ }
4666
+ function isErrorRetryable(error) {
4667
+ if (!error.code) return false;
4668
+ const err = APIErrorCodes[`${error.code}`];
4669
+ if (!err) return false;
4670
+ return err.retryable;
4671
+ }
4672
+ function isConnectionIDError(error) {
4673
+ return error.code === 46;
4674
+ }
4675
+ function isWSFailure(err) {
4676
+ if (typeof err.isWSFailure === "boolean") {
4677
+ return err.isWSFailure;
4678
+ }
4679
+ try {
4680
+ return JSON.parse(err.message).isWSFailure;
4681
+ } catch (_) {
4682
+ return false;
4683
+ }
4684
+ }
4685
+ function isErrorResponse(res) {
4686
+ return !res.status || res.status < 200 || 300 <= res.status;
4687
+ }
4688
+
4633
4689
  // src/search/BaseSearchSource.ts
4634
4690
  var DEFAULT_SEARCH_SOURCE_OPTIONS = {
4635
4691
  debounceMs: 300,
@@ -4764,6 +4820,9 @@ var BaseSearchSource = class extends BaseSearchSourceBase {
4764
4820
  stateUpdate.items = await this.filterQueryResults(items);
4765
4821
  } catch (e) {
4766
4822
  stateUpdate.lastQueryError = e;
4823
+ if (isAPIError(e) && !isErrorRetryable(e)) {
4824
+ stateUpdate.hasNext = false;
4825
+ }
4767
4826
  } finally {
4768
4827
  this.state.next(this.getStateAfterQuery(stateUpdate, hasNewSearchQuery));
4769
4828
  }
@@ -4794,6 +4853,9 @@ var BaseSearchSourceSync = class extends BaseSearchSourceBase {
4794
4853
  stateUpdate.items = this.filterQueryResults(items);
4795
4854
  } catch (e) {
4796
4855
  stateUpdate.lastQueryError = e;
4856
+ if (isAPIError(e) && !isErrorRetryable(e)) {
4857
+ stateUpdate.hasNext = false;
4858
+ }
4797
4859
  } finally {
4798
4860
  this.state.next(this.getStateAfterQuery(stateUpdate, hasNewSearchQuery));
4799
4861
  }
@@ -7155,7 +7217,7 @@ var MARK_AS_DELIVERED_BUFFER_TIMEOUT = 1e3;
7155
7217
  var MARK_AS_READ_THROTTLE_TIMEOUT2 = 1e3;
7156
7218
  var isChannel = (item) => item instanceof Channel;
7157
7219
  var isThread = (item) => item instanceof Thread;
7158
- var MessageDeliveryReporter = class {
7220
+ var MessageDeliveryReporter = class _MessageDeliveryReporter {
7159
7221
  constructor({ client }) {
7160
7222
  this.deliveryReportCandidates = /* @__PURE__ */ new Map();
7161
7223
  this.nextDeliveryReportCandidates = /* @__PURE__ */ new Map();
@@ -7269,6 +7331,10 @@ var MessageDeliveryReporter = class {
7269
7331
  get hasDeliveryCandidates() {
7270
7332
  return this.deliveryReportCandidates.size > 0;
7271
7333
  }
7334
+ static hasPermissionToReportDeliveryFor(collection) {
7335
+ if (isChannel(collection)) return !!collection.getConfig()?.delivery_events;
7336
+ if (isThread(collection)) return !!collection.channel.getConfig()?.delivery_events;
7337
+ }
7272
7338
  /**
7273
7339
  * Build latest_delivered_messages payload from an arbitrary buffer (deliveryReportCandidates / nextDeliveryReportCandidates)
7274
7340
  */
@@ -7300,8 +7366,7 @@ var MessageDeliveryReporter = class {
7300
7366
  * @param collection
7301
7367
  */
7302
7368
  trackDeliveredCandidate(collection) {
7303
- if (isChannel(collection) && !collection.getConfig()?.read_events) return;
7304
- if (isThread(collection) && !collection.channel.getConfig()?.read_events) return;
7369
+ if (!_MessageDeliveryReporter.hasPermissionToReportDeliveryFor(collection)) return;
7305
7370
  const candidate = this.getNextDeliveryReportCandidate(collection);
7306
7371
  if (!candidate?.key) return;
7307
7372
  const buffer = this.markDeliveredRequestInFlight ? this.nextDeliveryReportCandidates : this.deliveryReportCandidates;
@@ -10219,64 +10284,6 @@ var TokenManager = class {
10219
10284
 
10220
10285
  // src/connection_fallback.ts
10221
10286
  var import_axios2 = __toESM(require("axios"));
10222
-
10223
- // src/errors.ts
10224
- var APIErrorCodes = {
10225
- "-1": { name: "InternalSystemError", retryable: true },
10226
- "2": { name: "AccessKeyError", retryable: false },
10227
- "3": { name: "AuthenticationFailedError", retryable: true },
10228
- "4": { name: "InputError", retryable: false },
10229
- "6": { name: "DuplicateUsernameError", retryable: false },
10230
- "9": { name: "RateLimitError", retryable: true },
10231
- "16": { name: "DoesNotExistError", retryable: false },
10232
- "17": { name: "NotAllowedError", retryable: false },
10233
- "18": { name: "EventNotSupportedError", retryable: false },
10234
- "19": { name: "ChannelFeatureNotSupportedError", retryable: false },
10235
- "20": { name: "MessageTooLongError", retryable: false },
10236
- "21": { name: "MultipleNestingLevelError", retryable: false },
10237
- "22": { name: "PayloadTooBigError", retryable: false },
10238
- "23": { name: "RequestTimeoutError", retryable: true },
10239
- "24": { name: "MaxHeaderSizeExceededError", retryable: false },
10240
- "40": { name: "AuthErrorTokenExpired", retryable: false },
10241
- "41": { name: "AuthErrorTokenNotValidYet", retryable: false },
10242
- "42": { name: "AuthErrorTokenUsedBeforeIssuedAt", retryable: false },
10243
- "43": { name: "AuthErrorTokenSignatureInvalid", retryable: false },
10244
- "44": { name: "CustomCommandEndpointMissingError", retryable: false },
10245
- "45": { name: "CustomCommandEndpointCallError", retryable: true },
10246
- "46": { name: "ConnectionIDNotFoundError", retryable: false },
10247
- "60": { name: "CoolDownError", retryable: true },
10248
- "69": { name: "ErrWrongRegion", retryable: false },
10249
- "70": { name: "ErrQueryChannelPermissions", retryable: false },
10250
- "71": { name: "ErrTooManyConnections", retryable: true },
10251
- "99": { name: "AppSuspendedError", retryable: false }
10252
- };
10253
- function isAPIError(error) {
10254
- return error.code !== void 0;
10255
- }
10256
- function isErrorRetryable(error) {
10257
- if (!error.code) return false;
10258
- const err = APIErrorCodes[`${error.code}`];
10259
- if (!err) return false;
10260
- return err.retryable;
10261
- }
10262
- function isConnectionIDError(error) {
10263
- return error.code === 46;
10264
- }
10265
- function isWSFailure(err) {
10266
- if (typeof err.isWSFailure === "boolean") {
10267
- return err.isWSFailure;
10268
- }
10269
- try {
10270
- return JSON.parse(err.message).isWSFailure;
10271
- } catch (_) {
10272
- return false;
10273
- }
10274
- }
10275
- function isErrorResponse(res) {
10276
- return !res.status || res.status < 200 || 300 <= res.status;
10277
- }
10278
-
10279
- // src/connection_fallback.ts
10280
10287
  var WSConnectionFallback = class {
10281
10288
  constructor({ client }) {
10282
10289
  /** @private */
@@ -14618,7 +14625,7 @@ var StreamChat = class _StreamChat {
14618
14625
  if (this.userAgent) {
14619
14626
  return this.userAgent;
14620
14627
  }
14621
- const version = "9.24.0";
14628
+ const version = "9.25.0";
14622
14629
  const clientBundle = "node-cjs";
14623
14630
  let userAgentString = "";
14624
14631
  if (this.sdkIdentifier) {
@@ -15767,17 +15774,14 @@ var StreamChat = class _StreamChat {
15767
15774
  return this.delete(`${this.baseURL}/uploads/image`, { url });
15768
15775
  }
15769
15776
  /**
15770
- * Send the mark delivered event for this user
15777
+ * Mark the channels delivered for the given messages and the user
15771
15778
  *
15772
15779
  * @param {MarkDeliveredOptions} data
15773
15780
  * @return {Promise<EventAPIResponse | void>} Description
15774
15781
  */
15775
15782
  async markChannelsDelivered(data) {
15776
15783
  if (!data?.latest_delivered_messages?.length) return;
15777
- return await this.post(
15778
- this.baseURL + "/channels/delivered",
15779
- data ?? {}
15780
- );
15784
+ return await this.post(this.baseURL + "/channels/delivered", data);
15781
15785
  }
15782
15786
  syncDeliveredCandidates(collections) {
15783
15787
  this.messageDeliveryReporter.syncDeliveredCandidates(collections);