@stream-io/feeds-client 0.3.23 → 0.3.25
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/CHANGELOG.md +14 -0
- package/dist/cjs/index.js +2 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/react-bindings.js +1 -1
- package/dist/es/index.mjs +3 -2
- package/dist/es/react-bindings.mjs +1 -1
- package/dist/{feeds-client-BJQdmCB4.mjs → feeds-client-BULS-w1O.mjs} +114 -48
- package/dist/feeds-client-BULS-w1O.mjs.map +1 -0
- package/dist/{feeds-client-BUZVIyHd.js → feeds-client-DUD5wy6N.js} +114 -48
- package/dist/feeds-client-DUD5wy6N.js.map +1 -0
- package/dist/types/common/Poll.d.ts +6 -6
- package/dist/types/common/Poll.d.ts.map +1 -1
- package/dist/types/feed/event-handlers/activity/handle-activity-added.d.ts +3 -1
- package/dist/types/feed/event-handlers/activity/handle-activity-added.d.ts.map +1 -1
- package/dist/types/feed/feed.d.ts +4 -1
- package/dist/types/feed/feed.d.ts.map +1 -1
- package/dist/types/feeds-client/feeds-client.d.ts +10 -3
- package/dist/types/feeds-client/feeds-client.d.ts.map +1 -1
- package/dist/types/feeds-client/get-or-create-active-feed.d.ts +1 -2
- package/dist/types/feeds-client/get-or-create-active-feed.d.ts.map +1 -1
- package/dist/types/utils/check-own-fields-equality.d.ts +5 -0
- package/dist/types/utils/check-own-fields-equality.d.ts.map +1 -0
- package/dist/types/utils/index.d.ts +1 -0
- package/dist/types/utils/index.d.ts.map +1 -1
- package/dist/types/utils/own-feed-fields.d.ts +3 -0
- package/dist/types/utils/own-feed-fields.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/common/Poll.ts +13 -30
- package/src/feed/event-handlers/activity/handle-activity-added.ts +3 -1
- package/src/feed/feed.ts +49 -16
- package/src/feeds-client/feeds-client.ts +69 -32
- package/src/feeds-client/get-or-create-active-feed.ts +2 -6
- package/src/test-utils/response-generators.ts +2 -1
- package/src/utils/check-own-fields-equality.ts +40 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/own-feed-fields.ts +6 -0
- package/dist/feeds-client-BJQdmCB4.mjs.map +0 -1
- package/dist/feeds-client-BUZVIyHd.js.map +0 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const require$$0 = require("react");
|
|
4
4
|
require("@stream-io/state-store");
|
|
5
|
-
const feedsClient = require("../feeds-client-
|
|
5
|
+
const feedsClient = require("../feeds-client-DUD5wy6N.js");
|
|
6
6
|
var shim = { exports: {} };
|
|
7
7
|
var useSyncExternalStoreShim_production = {};
|
|
8
8
|
/**
|
package/dist/es/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { StateStore } from "@stream-io/state-store";
|
|
2
2
|
export * from "@stream-io/state-store";
|
|
3
|
-
import { d as debounce } from "../feeds-client-
|
|
4
|
-
import { A, C, a, F, S, b, c, n, m, k, g, e, h, f, j, i, r, s, u, l } from "../feeds-client-
|
|
3
|
+
import { d as debounce } from "../feeds-client-BULS-w1O.mjs";
|
|
4
|
+
import { A, C, a, F, S, b, c, n, m, k, g, e, h, f, j, i, o, r, s, u, l } from "../feeds-client-BULS-w1O.mjs";
|
|
5
5
|
import { LogLevelEnum } from "@stream-io/logger";
|
|
6
6
|
const ChannelOwnCapability = {
|
|
7
7
|
BAN_CHANNEL_MEMBERS: "ban-channel-members",
|
|
@@ -461,6 +461,7 @@ export {
|
|
|
461
461
|
f as isReactionResponse,
|
|
462
462
|
j as isVideoFile,
|
|
463
463
|
i as isVoteAnswer,
|
|
464
|
+
o as ownFeedFields,
|
|
464
465
|
r as replaceUniqueArrayMerge,
|
|
465
466
|
s as shouldUpdateState,
|
|
466
467
|
u as uniqueArrayMerge,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import require$$0, { useCallback, useMemo, useState, useEffect, createContext, useContext, useRef } from "react";
|
|
2
2
|
import "@stream-io/state-store";
|
|
3
|
-
import { F as FeedsClient, g as isCommentResponse, c as checkHasAnotherPage } from "../feeds-client-
|
|
3
|
+
import { F as FeedsClient, g as isCommentResponse, c as checkHasAnotherPage } from "../feeds-client-BULS-w1O.mjs";
|
|
4
4
|
var shim = { exports: {} };
|
|
5
5
|
var useSyncExternalStoreShim_production = {};
|
|
6
6
|
/**
|
|
@@ -3918,7 +3918,7 @@ const getRateLimitFromResponseHeader = (response_headers) => {
|
|
|
3918
3918
|
};
|
|
3919
3919
|
return result;
|
|
3920
3920
|
};
|
|
3921
|
-
const version = "0.3.
|
|
3921
|
+
const version = "0.3.25";
|
|
3922
3922
|
const axios = axiosImport.default ?? axiosImport;
|
|
3923
3923
|
class ApiClient {
|
|
3924
3924
|
constructor(apiKey, tokenManager, connectionIdManager, options) {
|
|
@@ -4421,7 +4421,6 @@ class StreamPoll {
|
|
|
4421
4421
|
} = event.poll;
|
|
4422
4422
|
this.state.partialNext({
|
|
4423
4423
|
answers_count,
|
|
4424
|
-
// @ts-expect-error Incompatibility between PollResponseData and Poll due to teams_role, remove when OpenAPI spec is fixed
|
|
4425
4424
|
latest_votes_by_option,
|
|
4426
4425
|
vote_count,
|
|
4427
4426
|
vote_counts_by_option,
|
|
@@ -4444,7 +4443,6 @@ class StreamPoll {
|
|
|
4444
4443
|
if (isOwnVote) {
|
|
4445
4444
|
if (isVoteAnswer(event.poll_vote)) {
|
|
4446
4445
|
latestAnswers = [
|
|
4447
|
-
// @ts-expect-error Incompatibility between PollResponseData and Poll due to teams_role, remove when OpenAPI spec is fixed
|
|
4448
4446
|
event.poll_vote,
|
|
4449
4447
|
...latestAnswers.filter((answer) => answer.id !== event.poll_vote.id)
|
|
4450
4448
|
];
|
|
@@ -4484,7 +4482,6 @@ class StreamPoll {
|
|
|
4484
4482
|
} = event.poll;
|
|
4485
4483
|
this.state.partialNext({
|
|
4486
4484
|
answers_count,
|
|
4487
|
-
// @ts-expect-error Incompatibility between PollResponseData and Poll due to teams_role, remove when OpenAPI spec is fixed
|
|
4488
4485
|
latest_votes_by_option,
|
|
4489
4486
|
vote_count,
|
|
4490
4487
|
vote_counts_by_option,
|
|
@@ -4527,7 +4524,6 @@ class StreamPoll {
|
|
|
4527
4524
|
} = event.poll;
|
|
4528
4525
|
this.state.partialNext({
|
|
4529
4526
|
answers_count,
|
|
4530
|
-
// @ts-expect-error Incompatibility between PollResponseData and Poll due to teams_role, remove when OpenAPI spec is fixed
|
|
4531
4527
|
latest_votes_by_option,
|
|
4532
4528
|
vote_count,
|
|
4533
4529
|
vote_counts_by_option,
|
|
@@ -4784,6 +4780,7 @@ function updateEntityInArray({
|
|
|
4784
4780
|
updatedEntities[index] = newEntity;
|
|
4785
4781
|
return { changed: true, entities: updatedEntities };
|
|
4786
4782
|
}
|
|
4783
|
+
const ownFeedFields = ["own_capabilities", "own_follows", "own_membership"];
|
|
4787
4784
|
const updateStateFollowCreated = (follow, currentState, currentFeedId, connectedUserId) => {
|
|
4788
4785
|
if (follow.status !== "accepted") {
|
|
4789
4786
|
return { changed: false, data: currentState };
|
|
@@ -5490,7 +5487,7 @@ function handleBookmarkUpdated(event) {
|
|
|
5490
5487
|
});
|
|
5491
5488
|
}
|
|
5492
5489
|
}
|
|
5493
|
-
function addActivitiesToState(newActivities, activities, position) {
|
|
5490
|
+
function addActivitiesToState(newActivities, activities, position, { fromWebSocket } = { fromWebSocket: false }) {
|
|
5494
5491
|
if (activities === void 0) {
|
|
5495
5492
|
return {
|
|
5496
5493
|
changed: false,
|
|
@@ -5513,7 +5510,7 @@ function addActivitiesToState(newActivities, activities, position) {
|
|
|
5513
5510
|
...activities,
|
|
5514
5511
|
...position === "end" ? newActivitiesDeduplicated : []
|
|
5515
5512
|
];
|
|
5516
|
-
this.newActivitiesAdded(newActivitiesDeduplicated);
|
|
5513
|
+
this.newActivitiesAdded(newActivitiesDeduplicated, { fromWebSocket });
|
|
5517
5514
|
result = { changed: true, activities: updatedActivities };
|
|
5518
5515
|
}
|
|
5519
5516
|
return result;
|
|
@@ -5528,7 +5525,8 @@ function handleActivityAdded(event) {
|
|
|
5528
5525
|
const result = addActivitiesToState.bind(this)(
|
|
5529
5526
|
[event.activity],
|
|
5530
5527
|
currentActivities,
|
|
5531
|
-
this.currentState.addNewActivitiesTo
|
|
5528
|
+
this.currentState.addNewActivitiesTo,
|
|
5529
|
+
{ fromWebSocket: true }
|
|
5532
5530
|
);
|
|
5533
5531
|
if (result.changed) {
|
|
5534
5532
|
const activity = event.activity;
|
|
@@ -6232,8 +6230,8 @@ const deepEqual = (x, y) => {
|
|
|
6232
6230
|
return false;
|
|
6233
6231
|
}
|
|
6234
6232
|
};
|
|
6235
|
-
function getOrCreateActiveFeed(
|
|
6236
|
-
return this.getOrCreateActiveFeed(
|
|
6233
|
+
function getOrCreateActiveFeed(...args) {
|
|
6234
|
+
return this.getOrCreateActiveFeed(...args);
|
|
6237
6235
|
}
|
|
6238
6236
|
const _Feed = class _Feed extends FeedApi {
|
|
6239
6237
|
constructor(client, groupId, id, data, watch = false, addNewActivitiesTo = "start", activityAddedEventFilter) {
|
|
@@ -6816,9 +6814,11 @@ const _Feed = class _Feed extends FeedApi {
|
|
|
6816
6814
|
event.activity.current_feed = currentActivity.current_feed;
|
|
6817
6815
|
}
|
|
6818
6816
|
if (event.activity.feeds.length === 1 && event.activity.current_feed && currentActivity?.current_feed) {
|
|
6819
|
-
|
|
6820
|
-
|
|
6821
|
-
|
|
6817
|
+
ownFeedFields.forEach((field) => {
|
|
6818
|
+
if (field in currentActivity.current_feed) {
|
|
6819
|
+
event.activity.current_feed[field] = currentActivity.current_feed[field];
|
|
6820
|
+
}
|
|
6821
|
+
});
|
|
6822
6822
|
}
|
|
6823
6823
|
}
|
|
6824
6824
|
eventHandler?.(event);
|
|
@@ -6828,17 +6828,31 @@ const _Feed = class _Feed extends FeedApi {
|
|
|
6828
6828
|
}
|
|
6829
6829
|
this.eventDispatcher.dispatch(event);
|
|
6830
6830
|
}
|
|
6831
|
-
newActivitiesAdded(activities) {
|
|
6831
|
+
newActivitiesAdded(activities, options = { fromWebSocket: false }) {
|
|
6832
6832
|
this.client.hydratePollCache(activities);
|
|
6833
|
-
|
|
6834
|
-
|
|
6835
|
-
|
|
6836
|
-
|
|
6837
|
-
|
|
6838
|
-
|
|
6839
|
-
|
|
6840
|
-
|
|
6841
|
-
|
|
6833
|
+
this.getOrCreateFeeds(activities, options);
|
|
6834
|
+
}
|
|
6835
|
+
getOrCreateFeeds(activities, options) {
|
|
6836
|
+
const enrichmentOptions = this.currentState.last_get_or_create_request_config?.enrichment_options;
|
|
6837
|
+
if (!enrichmentOptions?.skip_activity_current_feed && !enrichmentOptions?.skip_all) {
|
|
6838
|
+
const feedsToGetOrCreate = /* @__PURE__ */ new Map();
|
|
6839
|
+
activities.forEach((activity) => {
|
|
6840
|
+
if (activity.current_feed && !feedsToGetOrCreate.has(activity.current_feed.feed)) {
|
|
6841
|
+
feedsToGetOrCreate.set(
|
|
6842
|
+
activity.current_feed.feed,
|
|
6843
|
+
activity.current_feed
|
|
6844
|
+
);
|
|
6845
|
+
}
|
|
6846
|
+
});
|
|
6847
|
+
feedsToGetOrCreate.values().forEach((feed) => {
|
|
6848
|
+
getOrCreateActiveFeed.bind(this.client)({
|
|
6849
|
+
group: feed.group_id,
|
|
6850
|
+
id: feed.id,
|
|
6851
|
+
data: feed,
|
|
6852
|
+
fromWebSocket: options.fromWebSocket
|
|
6853
|
+
});
|
|
6854
|
+
});
|
|
6855
|
+
}
|
|
6842
6856
|
}
|
|
6843
6857
|
};
|
|
6844
6858
|
_Feed.noop = () => {
|
|
@@ -7128,6 +7142,30 @@ class ActivityWithStateUpdates {
|
|
|
7128
7142
|
function getFeed() {
|
|
7129
7143
|
return this.feed;
|
|
7130
7144
|
}
|
|
7145
|
+
const isOwnFollowsEqual = (currentState, newState) => {
|
|
7146
|
+
const existingFollows = new Set(
|
|
7147
|
+
currentState.own_follows?.map(
|
|
7148
|
+
(f) => `${f.source_feed.feed}:${f.target_feed.feed}:${f.updated_at.getTime()}`
|
|
7149
|
+
)
|
|
7150
|
+
);
|
|
7151
|
+
const newFollows = new Set(
|
|
7152
|
+
newState.own_follows?.map(
|
|
7153
|
+
(f) => `${f.source_feed.feed}:${f.target_feed.feed}:${f.updated_at.getTime()}`
|
|
7154
|
+
)
|
|
7155
|
+
);
|
|
7156
|
+
if (existingFollows.size === newFollows.size) {
|
|
7157
|
+
const areEqual = Array.from(existingFollows).every(
|
|
7158
|
+
(f) => newFollows.has(f)
|
|
7159
|
+
);
|
|
7160
|
+
if (areEqual) {
|
|
7161
|
+
return true;
|
|
7162
|
+
}
|
|
7163
|
+
}
|
|
7164
|
+
return false;
|
|
7165
|
+
};
|
|
7166
|
+
const isOwnMembershipEqual = (currentState, newState) => {
|
|
7167
|
+
return (currentState.own_membership?.updated_at.getTime() ?? 0) === (newState.own_membership?.updated_at.getTime() ?? 0);
|
|
7168
|
+
};
|
|
7131
7169
|
class FeedsClient extends FeedsApi {
|
|
7132
7170
|
constructor(apiKey, options) {
|
|
7133
7171
|
const tokenManager = new TokenManager();
|
|
@@ -7379,13 +7417,11 @@ class FeedsClient extends FeedsApi {
|
|
|
7379
7417
|
this.on = this.eventDispatcher.on;
|
|
7380
7418
|
this.off = this.eventDispatcher.off;
|
|
7381
7419
|
this.feed = (groupId, id, options2) => {
|
|
7382
|
-
return this.getOrCreateActiveFeed(
|
|
7383
|
-
groupId,
|
|
7420
|
+
return this.getOrCreateActiveFeed({
|
|
7421
|
+
group: groupId,
|
|
7384
7422
|
id,
|
|
7385
|
-
|
|
7386
|
-
|
|
7387
|
-
options2
|
|
7388
|
-
);
|
|
7423
|
+
options: options2
|
|
7424
|
+
});
|
|
7389
7425
|
};
|
|
7390
7426
|
this.activityWithStateUpdates = (id) => {
|
|
7391
7427
|
let activity = this.activeActivities[id];
|
|
@@ -7402,7 +7438,14 @@ class FeedsClient extends FeedsApi {
|
|
|
7402
7438
|
};
|
|
7403
7439
|
this.eventDispatcher.dispatch(networkEvent);
|
|
7404
7440
|
};
|
|
7405
|
-
this.getOrCreateActiveFeed = (
|
|
7441
|
+
this.getOrCreateActiveFeed = ({
|
|
7442
|
+
group,
|
|
7443
|
+
id,
|
|
7444
|
+
data,
|
|
7445
|
+
watch,
|
|
7446
|
+
options: options2,
|
|
7447
|
+
fromWebSocket = false
|
|
7448
|
+
}) => {
|
|
7406
7449
|
const fid = `${group}:${id}`;
|
|
7407
7450
|
let isCreated = false;
|
|
7408
7451
|
if (!this.activeFeeds[fid]) {
|
|
@@ -7427,7 +7470,29 @@ class FeedsClient extends FeedsApi {
|
|
|
7427
7470
|
}
|
|
7428
7471
|
}
|
|
7429
7472
|
if (!feed.currentState.watch) {
|
|
7430
|
-
if (data)
|
|
7473
|
+
if (!isCreated && data) {
|
|
7474
|
+
if ((feed.currentState.updated_at?.getTime() ?? 0) < data.updated_at.getTime()) {
|
|
7475
|
+
handleFeedUpdated.call(feed, { feed: data });
|
|
7476
|
+
} else if ((feed.currentState.updated_at?.getTime() ?? 0) === data.updated_at.getTime() && !fromWebSocket) {
|
|
7477
|
+
const fieldsToUpdate = [];
|
|
7478
|
+
if (!isOwnFollowsEqual(feed.currentState, data)) {
|
|
7479
|
+
fieldsToUpdate.push("own_follows");
|
|
7480
|
+
}
|
|
7481
|
+
if (!isOwnMembershipEqual(feed.currentState, data)) {
|
|
7482
|
+
fieldsToUpdate.push("own_membership");
|
|
7483
|
+
}
|
|
7484
|
+
if (fieldsToUpdate.length > 0) {
|
|
7485
|
+
const fieldsToUpdateData = fieldsToUpdate.reduce(
|
|
7486
|
+
(acc, field) => {
|
|
7487
|
+
acc[field] = data[field];
|
|
7488
|
+
return acc;
|
|
7489
|
+
},
|
|
7490
|
+
{}
|
|
7491
|
+
);
|
|
7492
|
+
feed.state.partialNext(fieldsToUpdateData);
|
|
7493
|
+
}
|
|
7494
|
+
}
|
|
7495
|
+
}
|
|
7431
7496
|
if (watch) handleWatchStarted.call(feed);
|
|
7432
7497
|
}
|
|
7433
7498
|
return feed;
|
|
@@ -7461,11 +7526,11 @@ class FeedsClient extends FeedsApi {
|
|
|
7461
7526
|
}
|
|
7462
7527
|
case "feeds.feed.created": {
|
|
7463
7528
|
if (this.activeFeeds[event.feed.id]) break;
|
|
7464
|
-
this.getOrCreateActiveFeed(
|
|
7465
|
-
event.feed.group_id,
|
|
7466
|
-
event.feed.id,
|
|
7467
|
-
event.feed
|
|
7468
|
-
);
|
|
7529
|
+
this.getOrCreateActiveFeed({
|
|
7530
|
+
group: event.feed.group_id,
|
|
7531
|
+
id: event.feed.id,
|
|
7532
|
+
data: event.feed
|
|
7533
|
+
});
|
|
7469
7534
|
break;
|
|
7470
7535
|
}
|
|
7471
7536
|
case "feeds.feed.deleted": {
|
|
@@ -7605,12 +7670,12 @@ class FeedsClient extends FeedsApi {
|
|
|
7605
7670
|
const response = await this._queryFeeds(request);
|
|
7606
7671
|
const feedResponses = response.feeds;
|
|
7607
7672
|
const feeds = feedResponses.map(
|
|
7608
|
-
(feedResponse) => this.getOrCreateActiveFeed(
|
|
7609
|
-
feedResponse.group_id,
|
|
7610
|
-
feedResponse.id,
|
|
7611
|
-
feedResponse,
|
|
7612
|
-
request?.watch
|
|
7613
|
-
)
|
|
7673
|
+
(feedResponse) => this.getOrCreateActiveFeed({
|
|
7674
|
+
group: feedResponse.group_id,
|
|
7675
|
+
id: feedResponse.id,
|
|
7676
|
+
data: feedResponse,
|
|
7677
|
+
watch: request?.watch
|
|
7678
|
+
})
|
|
7614
7679
|
);
|
|
7615
7680
|
this.hydrateCapabilitiesCache(feedResponses);
|
|
7616
7681
|
return {
|
|
@@ -7700,11 +7765,11 @@ class FeedsClient extends FeedsApi {
|
|
|
7700
7765
|
async getFollowSuggestions(...params) {
|
|
7701
7766
|
const response = await super.getFollowSuggestions(...params);
|
|
7702
7767
|
response.suggestions.forEach((suggestion) => {
|
|
7703
|
-
this.getOrCreateActiveFeed(
|
|
7704
|
-
suggestion.group_id,
|
|
7705
|
-
suggestion.id,
|
|
7706
|
-
suggestion
|
|
7707
|
-
);
|
|
7768
|
+
this.getOrCreateActiveFeed({
|
|
7769
|
+
group: suggestion.group_id,
|
|
7770
|
+
id: suggestion.id,
|
|
7771
|
+
data: suggestion
|
|
7772
|
+
});
|
|
7708
7773
|
});
|
|
7709
7774
|
return response;
|
|
7710
7775
|
}
|
|
@@ -7785,8 +7850,9 @@ export {
|
|
|
7785
7850
|
updateEntityInArray as l,
|
|
7786
7851
|
feedsLoggerSystem as m,
|
|
7787
7852
|
ensureExhausted as n,
|
|
7853
|
+
ownFeedFields as o,
|
|
7788
7854
|
replaceUniqueArrayMerge as r,
|
|
7789
7855
|
shouldUpdateState as s,
|
|
7790
7856
|
uniqueArrayMerge as u
|
|
7791
7857
|
};
|
|
7792
|
-
//# sourceMappingURL=feeds-client-
|
|
7858
|
+
//# sourceMappingURL=feeds-client-BULS-w1O.mjs.map
|