@stream-io/feeds-client 0.3.24 → 0.3.26
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-DljxtRSI.mjs → feeds-client-BNiazJbH.mjs} +114 -44
- package/dist/feeds-client-BNiazJbH.mjs.map +1 -0
- package/dist/{feeds-client-CuCL126K.js → feeds-client-K0WzrfH-.js} +114 -44
- package/dist/feeds-client-K0WzrfH-.js.map +1 -0
- 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/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 -30
- 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-CuCL126K.js.map +0 -1
- package/dist/feeds-client-DljxtRSI.mjs.map +0 -1
|
@@ -3936,7 +3936,7 @@ const getRateLimitFromResponseHeader = (response_headers) => {
|
|
|
3936
3936
|
};
|
|
3937
3937
|
return result;
|
|
3938
3938
|
};
|
|
3939
|
-
const version = "0.3.
|
|
3939
|
+
const version = "0.3.26";
|
|
3940
3940
|
const axios = axiosImport.default ?? axiosImport;
|
|
3941
3941
|
class ApiClient {
|
|
3942
3942
|
constructor(apiKey, tokenManager, connectionIdManager, options) {
|
|
@@ -4798,6 +4798,7 @@ function updateEntityInArray({
|
|
|
4798
4798
|
updatedEntities[index] = newEntity;
|
|
4799
4799
|
return { changed: true, entities: updatedEntities };
|
|
4800
4800
|
}
|
|
4801
|
+
const ownFeedFields = ["own_capabilities", "own_follows", "own_membership"];
|
|
4801
4802
|
const updateStateFollowCreated = (follow, currentState, currentFeedId, connectedUserId) => {
|
|
4802
4803
|
if (follow.status !== "accepted") {
|
|
4803
4804
|
return { changed: false, data: currentState };
|
|
@@ -5504,7 +5505,7 @@ function handleBookmarkUpdated(event) {
|
|
|
5504
5505
|
});
|
|
5505
5506
|
}
|
|
5506
5507
|
}
|
|
5507
|
-
function addActivitiesToState(newActivities, activities, position) {
|
|
5508
|
+
function addActivitiesToState(newActivities, activities, position, { fromWebSocket } = { fromWebSocket: false }) {
|
|
5508
5509
|
if (activities === void 0) {
|
|
5509
5510
|
return {
|
|
5510
5511
|
changed: false,
|
|
@@ -5527,7 +5528,7 @@ function addActivitiesToState(newActivities, activities, position) {
|
|
|
5527
5528
|
...activities,
|
|
5528
5529
|
...position === "end" ? newActivitiesDeduplicated : []
|
|
5529
5530
|
];
|
|
5530
|
-
this.newActivitiesAdded(newActivitiesDeduplicated);
|
|
5531
|
+
this.newActivitiesAdded(newActivitiesDeduplicated, { fromWebSocket });
|
|
5531
5532
|
result = { changed: true, activities: updatedActivities };
|
|
5532
5533
|
}
|
|
5533
5534
|
return result;
|
|
@@ -5542,7 +5543,8 @@ function handleActivityAdded(event) {
|
|
|
5542
5543
|
const result = addActivitiesToState.bind(this)(
|
|
5543
5544
|
[event.activity],
|
|
5544
5545
|
currentActivities,
|
|
5545
|
-
this.currentState.addNewActivitiesTo
|
|
5546
|
+
this.currentState.addNewActivitiesTo,
|
|
5547
|
+
{ fromWebSocket: true }
|
|
5546
5548
|
);
|
|
5547
5549
|
if (result.changed) {
|
|
5548
5550
|
const activity = event.activity;
|
|
@@ -6246,8 +6248,8 @@ const deepEqual = (x, y) => {
|
|
|
6246
6248
|
return false;
|
|
6247
6249
|
}
|
|
6248
6250
|
};
|
|
6249
|
-
function getOrCreateActiveFeed(
|
|
6250
|
-
return this.getOrCreateActiveFeed(
|
|
6251
|
+
function getOrCreateActiveFeed(...args) {
|
|
6252
|
+
return this.getOrCreateActiveFeed(...args);
|
|
6251
6253
|
}
|
|
6252
6254
|
const _Feed = class _Feed extends FeedApi {
|
|
6253
6255
|
constructor(client, groupId, id, data, watch = false, addNewActivitiesTo = "start", activityAddedEventFilter) {
|
|
@@ -6830,9 +6832,11 @@ const _Feed = class _Feed extends FeedApi {
|
|
|
6830
6832
|
event.activity.current_feed = currentActivity.current_feed;
|
|
6831
6833
|
}
|
|
6832
6834
|
if (event.activity.feeds.length === 1 && event.activity.current_feed && currentActivity?.current_feed) {
|
|
6833
|
-
|
|
6834
|
-
|
|
6835
|
-
|
|
6835
|
+
ownFeedFields.forEach((field) => {
|
|
6836
|
+
if (field in currentActivity.current_feed) {
|
|
6837
|
+
event.activity.current_feed[field] = currentActivity.current_feed[field];
|
|
6838
|
+
}
|
|
6839
|
+
});
|
|
6836
6840
|
}
|
|
6837
6841
|
}
|
|
6838
6842
|
eventHandler?.(event);
|
|
@@ -6842,17 +6846,31 @@ const _Feed = class _Feed extends FeedApi {
|
|
|
6842
6846
|
}
|
|
6843
6847
|
this.eventDispatcher.dispatch(event);
|
|
6844
6848
|
}
|
|
6845
|
-
newActivitiesAdded(activities) {
|
|
6849
|
+
newActivitiesAdded(activities, options = { fromWebSocket: false }) {
|
|
6846
6850
|
this.client.hydratePollCache(activities);
|
|
6847
|
-
|
|
6848
|
-
|
|
6849
|
-
|
|
6850
|
-
|
|
6851
|
-
|
|
6852
|
-
|
|
6853
|
-
|
|
6854
|
-
|
|
6855
|
-
|
|
6851
|
+
this.getOrCreateFeeds(activities, options);
|
|
6852
|
+
}
|
|
6853
|
+
getOrCreateFeeds(activities, options) {
|
|
6854
|
+
const enrichmentOptions = this.currentState.last_get_or_create_request_config?.enrichment_options;
|
|
6855
|
+
if (!enrichmentOptions?.skip_activity_current_feed && !enrichmentOptions?.skip_all) {
|
|
6856
|
+
const feedsToGetOrCreate = /* @__PURE__ */ new Map();
|
|
6857
|
+
activities.forEach((activity) => {
|
|
6858
|
+
if (activity.current_feed && !feedsToGetOrCreate.has(activity.current_feed.feed)) {
|
|
6859
|
+
feedsToGetOrCreate.set(
|
|
6860
|
+
activity.current_feed.feed,
|
|
6861
|
+
activity.current_feed
|
|
6862
|
+
);
|
|
6863
|
+
}
|
|
6864
|
+
});
|
|
6865
|
+
Array.from(feedsToGetOrCreate.values()).forEach((feed) => {
|
|
6866
|
+
getOrCreateActiveFeed.bind(this.client)({
|
|
6867
|
+
group: feed.group_id,
|
|
6868
|
+
id: feed.id,
|
|
6869
|
+
data: feed,
|
|
6870
|
+
fromWebSocket: options.fromWebSocket
|
|
6871
|
+
});
|
|
6872
|
+
});
|
|
6873
|
+
}
|
|
6856
6874
|
}
|
|
6857
6875
|
};
|
|
6858
6876
|
_Feed.noop = () => {
|
|
@@ -7142,6 +7160,30 @@ class ActivityWithStateUpdates {
|
|
|
7142
7160
|
function getFeed() {
|
|
7143
7161
|
return this.feed;
|
|
7144
7162
|
}
|
|
7163
|
+
const isOwnFollowsEqual = (currentState, newState) => {
|
|
7164
|
+
const existingFollows = new Set(
|
|
7165
|
+
currentState.own_follows?.map(
|
|
7166
|
+
(f) => `${f.source_feed.feed}:${f.target_feed.feed}:${f.updated_at.getTime()}`
|
|
7167
|
+
)
|
|
7168
|
+
);
|
|
7169
|
+
const newFollows = new Set(
|
|
7170
|
+
newState.own_follows?.map(
|
|
7171
|
+
(f) => `${f.source_feed.feed}:${f.target_feed.feed}:${f.updated_at.getTime()}`
|
|
7172
|
+
)
|
|
7173
|
+
);
|
|
7174
|
+
if (existingFollows.size === newFollows.size) {
|
|
7175
|
+
const areEqual = Array.from(existingFollows).every(
|
|
7176
|
+
(f) => newFollows.has(f)
|
|
7177
|
+
);
|
|
7178
|
+
if (areEqual) {
|
|
7179
|
+
return true;
|
|
7180
|
+
}
|
|
7181
|
+
}
|
|
7182
|
+
return false;
|
|
7183
|
+
};
|
|
7184
|
+
const isOwnMembershipEqual = (currentState, newState) => {
|
|
7185
|
+
return (currentState.own_membership?.updated_at.getTime() ?? 0) === (newState.own_membership?.updated_at.getTime() ?? 0);
|
|
7186
|
+
};
|
|
7145
7187
|
class FeedsClient extends FeedsApi {
|
|
7146
7188
|
constructor(apiKey, options) {
|
|
7147
7189
|
const tokenManager = new TokenManager();
|
|
@@ -7393,13 +7435,11 @@ class FeedsClient extends FeedsApi {
|
|
|
7393
7435
|
this.on = this.eventDispatcher.on;
|
|
7394
7436
|
this.off = this.eventDispatcher.off;
|
|
7395
7437
|
this.feed = (groupId, id, options2) => {
|
|
7396
|
-
return this.getOrCreateActiveFeed(
|
|
7397
|
-
groupId,
|
|
7438
|
+
return this.getOrCreateActiveFeed({
|
|
7439
|
+
group: groupId,
|
|
7398
7440
|
id,
|
|
7399
|
-
|
|
7400
|
-
|
|
7401
|
-
options2
|
|
7402
|
-
);
|
|
7441
|
+
options: options2
|
|
7442
|
+
});
|
|
7403
7443
|
};
|
|
7404
7444
|
this.activityWithStateUpdates = (id) => {
|
|
7405
7445
|
let activity = this.activeActivities[id];
|
|
@@ -7416,7 +7456,14 @@ class FeedsClient extends FeedsApi {
|
|
|
7416
7456
|
};
|
|
7417
7457
|
this.eventDispatcher.dispatch(networkEvent);
|
|
7418
7458
|
};
|
|
7419
|
-
this.getOrCreateActiveFeed = (
|
|
7459
|
+
this.getOrCreateActiveFeed = ({
|
|
7460
|
+
group,
|
|
7461
|
+
id,
|
|
7462
|
+
data,
|
|
7463
|
+
watch,
|
|
7464
|
+
options: options2,
|
|
7465
|
+
fromWebSocket = false
|
|
7466
|
+
}) => {
|
|
7420
7467
|
const fid = `${group}:${id}`;
|
|
7421
7468
|
let isCreated = false;
|
|
7422
7469
|
if (!this.activeFeeds[fid]) {
|
|
@@ -7441,7 +7488,29 @@ class FeedsClient extends FeedsApi {
|
|
|
7441
7488
|
}
|
|
7442
7489
|
}
|
|
7443
7490
|
if (!feed.currentState.watch) {
|
|
7444
|
-
if (data)
|
|
7491
|
+
if (!isCreated && data) {
|
|
7492
|
+
if ((feed.currentState.updated_at?.getTime() ?? 0) < data.updated_at.getTime()) {
|
|
7493
|
+
handleFeedUpdated.call(feed, { feed: data });
|
|
7494
|
+
} else if ((feed.currentState.updated_at?.getTime() ?? 0) === data.updated_at.getTime() && !fromWebSocket) {
|
|
7495
|
+
const fieldsToUpdate = [];
|
|
7496
|
+
if (!isOwnFollowsEqual(feed.currentState, data)) {
|
|
7497
|
+
fieldsToUpdate.push("own_follows");
|
|
7498
|
+
}
|
|
7499
|
+
if (!isOwnMembershipEqual(feed.currentState, data)) {
|
|
7500
|
+
fieldsToUpdate.push("own_membership");
|
|
7501
|
+
}
|
|
7502
|
+
if (fieldsToUpdate.length > 0) {
|
|
7503
|
+
const fieldsToUpdateData = fieldsToUpdate.reduce(
|
|
7504
|
+
(acc, field) => {
|
|
7505
|
+
acc[field] = data[field];
|
|
7506
|
+
return acc;
|
|
7507
|
+
},
|
|
7508
|
+
{}
|
|
7509
|
+
);
|
|
7510
|
+
feed.state.partialNext(fieldsToUpdateData);
|
|
7511
|
+
}
|
|
7512
|
+
}
|
|
7513
|
+
}
|
|
7445
7514
|
if (watch) handleWatchStarted.call(feed);
|
|
7446
7515
|
}
|
|
7447
7516
|
return feed;
|
|
@@ -7475,11 +7544,11 @@ class FeedsClient extends FeedsApi {
|
|
|
7475
7544
|
}
|
|
7476
7545
|
case "feeds.feed.created": {
|
|
7477
7546
|
if (this.activeFeeds[event.feed.id]) break;
|
|
7478
|
-
this.getOrCreateActiveFeed(
|
|
7479
|
-
event.feed.group_id,
|
|
7480
|
-
event.feed.id,
|
|
7481
|
-
event.feed
|
|
7482
|
-
);
|
|
7547
|
+
this.getOrCreateActiveFeed({
|
|
7548
|
+
group: event.feed.group_id,
|
|
7549
|
+
id: event.feed.id,
|
|
7550
|
+
data: event.feed
|
|
7551
|
+
});
|
|
7483
7552
|
break;
|
|
7484
7553
|
}
|
|
7485
7554
|
case "feeds.feed.deleted": {
|
|
@@ -7619,12 +7688,12 @@ class FeedsClient extends FeedsApi {
|
|
|
7619
7688
|
const response = await this._queryFeeds(request);
|
|
7620
7689
|
const feedResponses = response.feeds;
|
|
7621
7690
|
const feeds = feedResponses.map(
|
|
7622
|
-
(feedResponse) => this.getOrCreateActiveFeed(
|
|
7623
|
-
feedResponse.group_id,
|
|
7624
|
-
feedResponse.id,
|
|
7625
|
-
feedResponse,
|
|
7626
|
-
request?.watch
|
|
7627
|
-
)
|
|
7691
|
+
(feedResponse) => this.getOrCreateActiveFeed({
|
|
7692
|
+
group: feedResponse.group_id,
|
|
7693
|
+
id: feedResponse.id,
|
|
7694
|
+
data: feedResponse,
|
|
7695
|
+
watch: request?.watch
|
|
7696
|
+
})
|
|
7628
7697
|
);
|
|
7629
7698
|
this.hydrateCapabilitiesCache(feedResponses);
|
|
7630
7699
|
return {
|
|
@@ -7714,11 +7783,11 @@ class FeedsClient extends FeedsApi {
|
|
|
7714
7783
|
async getFollowSuggestions(...params) {
|
|
7715
7784
|
const response = await super.getFollowSuggestions(...params);
|
|
7716
7785
|
response.suggestions.forEach((suggestion) => {
|
|
7717
|
-
this.getOrCreateActiveFeed(
|
|
7718
|
-
suggestion.group_id,
|
|
7719
|
-
suggestion.id,
|
|
7720
|
-
suggestion
|
|
7721
|
-
);
|
|
7786
|
+
this.getOrCreateActiveFeed({
|
|
7787
|
+
group: suggestion.group_id,
|
|
7788
|
+
id: suggestion.id,
|
|
7789
|
+
data: suggestion
|
|
7790
|
+
});
|
|
7722
7791
|
});
|
|
7723
7792
|
return response;
|
|
7724
7793
|
}
|
|
@@ -7797,8 +7866,9 @@ exports.isImageFile = isImageFile;
|
|
|
7797
7866
|
exports.isReactionResponse = isReactionResponse;
|
|
7798
7867
|
exports.isVideoFile = isVideoFile;
|
|
7799
7868
|
exports.isVoteAnswer = isVoteAnswer;
|
|
7869
|
+
exports.ownFeedFields = ownFeedFields;
|
|
7800
7870
|
exports.replaceUniqueArrayMerge = replaceUniqueArrayMerge;
|
|
7801
7871
|
exports.shouldUpdateState = shouldUpdateState;
|
|
7802
7872
|
exports.uniqueArrayMerge = uniqueArrayMerge;
|
|
7803
7873
|
exports.updateEntityInArray = updateEntityInArray;
|
|
7804
|
-
//# sourceMappingURL=feeds-client-
|
|
7874
|
+
//# sourceMappingURL=feeds-client-K0WzrfH-.js.map
|