stream-chat 9.23.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.
- package/dist/cjs/index.browser.js +71 -67
- package/dist/cjs/index.browser.js.map +3 -3
- package/dist/cjs/index.node.js +71 -67
- package/dist/cjs/index.node.js.map +3 -3
- package/dist/esm/index.mjs +71 -67
- package/dist/esm/index.mjs.map +3 -3
- package/dist/types/client.d.ts +1 -1
- package/dist/types/messageDelivery/MessageDeliveryReporter.d.ts +1 -0
- package/dist/types/types.d.ts +24 -1
- package/package.json +1 -1
- package/src/client.ts +2 -5
- package/src/messageDelivery/MessageDeliveryReporter.ts +6 -2
- package/src/search/BaseSearchSource.ts +8 -0
- package/src/types.ts +28 -1
|
@@ -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 (
|
|
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.
|
|
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
|
-
*
|
|
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);
|