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.
- 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 +6 -0
- 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 +6 -0
package/dist/cjs/index.node.js
CHANGED
|
@@ -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 (
|
|
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.
|
|
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
|
-
*
|
|
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);
|