@stream-io/feeds-client 0.2.12 → 0.2.14

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.
Files changed (53) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/cjs/index.js +2 -1
  3. package/dist/cjs/index.js.map +1 -1
  4. package/dist/cjs/react-bindings.js +22 -14
  5. package/dist/cjs/react-bindings.js.map +1 -1
  6. package/dist/es/index.mjs +3 -2
  7. package/dist/es/react-bindings.mjs +22 -14
  8. package/dist/es/react-bindings.mjs.map +1 -1
  9. package/dist/{index-o7AeSkxa.js → index-B08vVRSZ.js} +159 -9
  10. package/dist/index-B08vVRSZ.js.map +1 -0
  11. package/dist/{index-D7QtnkUs.mjs → index-B3HHiF9S.mjs} +159 -9
  12. package/dist/index-B3HHiF9S.mjs.map +1 -0
  13. package/dist/tsconfig.tsbuildinfo +1 -1
  14. package/dist/types/bindings/react/hooks/feed-state-hooks/useAggregatedActivities.d.ts +9 -4
  15. package/dist/types/bindings/react/hooks/feed-state-hooks/useAggregatedActivities.d.ts.map +1 -1
  16. package/dist/types/bindings/react/hooks/feed-state-hooks/useIsAggregatedActivityRead.d.ts.map +1 -1
  17. package/dist/types/common/real-time/StableWSConnection.d.ts +3 -3
  18. package/dist/types/common/real-time/StableWSConnection.d.ts.map +1 -1
  19. package/dist/types/feed/event-handlers/aggregated-feed/handle-aggregated-feed-updated.d.ts +24 -0
  20. package/dist/types/feed/event-handlers/aggregated-feed/handle-aggregated-feed-updated.d.ts.map +1 -0
  21. package/dist/types/feed/event-handlers/aggregated-feed/index.d.ts +2 -0
  22. package/dist/types/feed/event-handlers/aggregated-feed/index.d.ts.map +1 -0
  23. package/dist/types/feed/event-handlers/index.d.ts +1 -1
  24. package/dist/types/feed/event-handlers/index.d.ts.map +1 -1
  25. package/dist/types/feed/feed.d.ts +2 -2
  26. package/dist/types/feed/feed.d.ts.map +1 -1
  27. package/dist/types/feeds-client/feeds-client.d.ts +2 -2
  28. package/dist/types/gen/model-decoders/event-decoder-mapping.d.ts.map +1 -1
  29. package/dist/types/gen/models/index.d.ts +17 -1
  30. package/dist/types/gen/models/index.d.ts.map +1 -1
  31. package/dist/types/utils/unique-array-merge.d.ts +1 -0
  32. package/dist/types/utils/unique-array-merge.d.ts.map +1 -1
  33. package/package.json +1 -1
  34. package/src/bindings/react/hooks/feed-state-hooks/useAggregatedActivities.ts +28 -4
  35. package/src/bindings/react/hooks/feed-state-hooks/useIsAggregatedActivityRead.ts +4 -5
  36. package/src/feed/event-handlers/aggregated-feed/handle-aggregated-feed-updated.test.ts +644 -0
  37. package/src/feed/event-handlers/aggregated-feed/handle-aggregated-feed-updated.ts +193 -0
  38. package/src/feed/event-handlers/aggregated-feed/index.ts +1 -0
  39. package/src/feed/event-handlers/index.ts +1 -1
  40. package/src/feed/feed.ts +23 -1
  41. package/src/gen/model-decoders/decoders.ts +14 -0
  42. package/src/gen/model-decoders/event-decoder-mapping.ts +3 -0
  43. package/src/gen/models/index.ts +26 -2
  44. package/src/utils/unique-array-merge.ts +30 -0
  45. package/dist/index-D7QtnkUs.mjs.map +0 -1
  46. package/dist/index-o7AeSkxa.js.map +0 -1
  47. package/dist/types/feed/event-handlers/notification-feed/handle-notification-feed-updated.d.ts +0 -11
  48. package/dist/types/feed/event-handlers/notification-feed/handle-notification-feed-updated.d.ts.map +0 -1
  49. package/dist/types/feed/event-handlers/notification-feed/index.d.ts +0 -2
  50. package/dist/types/feed/event-handlers/notification-feed/index.d.ts.map +0 -1
  51. package/src/feed/event-handlers/notification-feed/handle-notification-feed-updated.test.ts +0 -120
  52. package/src/feed/event-handlers/notification-feed/handle-notification-feed-updated.ts +0 -54
  53. package/src/feed/event-handlers/notification-feed/index.ts +0 -1
@@ -1264,6 +1264,17 @@ decoders.SingleFollowResponse = (input) => {
1264
1264
  };
1265
1265
  return decode(typeMappings, input);
1266
1266
  };
1267
+ decoders.StoriesFeedUpdatedEvent = (input) => {
1268
+ const typeMappings = {
1269
+ created_at: { type: "DatetimeType", isSingle: true },
1270
+ received_at: { type: "DatetimeType", isSingle: true },
1271
+ aggregated_activities: {
1272
+ type: "AggregatedActivityResponse",
1273
+ isSingle: false
1274
+ }
1275
+ };
1276
+ return decode(typeMappings, input);
1277
+ };
1267
1278
  decoders.SubmitActionResponse = (input) => {
1268
1279
  const typeMappings = {
1269
1280
  item: { type: "ReviewQueueItemResponse", isSingle: true }
@@ -3711,7 +3722,7 @@ const getRateLimitFromResponseHeader = (response_headers) => {
3711
3722
  };
3712
3723
  return result;
3713
3724
  };
3714
- const version = "0.2.12";
3725
+ const version = "0.2.14";
3715
3726
  class ApiClient {
3716
3727
  constructor(apiKey, tokenManager, connectionIdManager, options) {
3717
3728
  this.apiKey = apiKey;
@@ -3922,6 +3933,7 @@ const eventDecoderMapping = {
3922
3933
  "feeds.poll.vote_casted": (data) => decoders.PollVoteCastedFeedEvent(data),
3923
3934
  "feeds.poll.vote_changed": (data) => decoders.PollVoteChangedFeedEvent(data),
3924
3935
  "feeds.poll.vote_removed": (data) => decoders.PollVoteRemovedFeedEvent(data),
3936
+ "feeds.stories_feed.updated": (data) => decoders.StoriesFeedUpdatedEvent(data),
3925
3937
  "health.check": (data) => decoders.HealthCheckEvent(data),
3926
3938
  "moderation.custom_action": (data) => decoders.ModerationCustomActionEvent(data),
3927
3939
  "moderation.flagged": (data) => decoders.ModerationFlaggedEvent(data),
@@ -4450,6 +4462,27 @@ const uniqueArrayMerge = (existingArray, arrayToMerge, getKey) => {
4450
4462
  });
4451
4463
  return existingArray.concat(filteredArrayToMerge);
4452
4464
  };
4465
+ const replaceUniqueArrayMerge = (existingArray, arrayToMerge, getKey) => {
4466
+ const existingMap = /* @__PURE__ */ new Map();
4467
+ (existingArray ?? []).forEach((item) => {
4468
+ existingMap.set(getKey(item), item);
4469
+ });
4470
+ const result = [];
4471
+ arrayToMerge.forEach((item) => {
4472
+ existingMap.set(getKey(item), item);
4473
+ });
4474
+ existingArray.forEach((originalItem) => {
4475
+ const updatedItem = existingMap.get(getKey(originalItem));
4476
+ if (updatedItem) {
4477
+ result.push(updatedItem);
4478
+ existingMap.delete(getKey(originalItem));
4479
+ }
4480
+ });
4481
+ existingMap.forEach((item) => {
4482
+ result.push(item);
4483
+ });
4484
+ return result;
4485
+ };
4453
4486
  const Constants = {
4454
4487
  DEFAULT_COMMENT_PAGINATION: "first"
4455
4488
  };
@@ -5580,13 +5613,84 @@ function handleActivityMarked(event) {
5580
5613
  function handleFeedUpdated(event) {
5581
5614
  this.state.partialNext({ ...event.feed });
5582
5615
  }
5583
- const updateNotificationFeedFromEvent = (event) => {
5616
+ const addAggregatedActivitiesToState = (newAggregatedActivities, aggregatedActivities, position) => {
5617
+ let result;
5618
+ if (newAggregatedActivities.length === 0) {
5619
+ result = {
5620
+ changed: false,
5621
+ aggregated_activities: []
5622
+ };
5623
+ } else {
5624
+ result = {
5625
+ changed: true,
5626
+ aggregated_activities: []
5627
+ };
5628
+ }
5629
+ switch (position) {
5630
+ case "start":
5631
+ result.aggregated_activities = uniqueArrayMerge(
5632
+ newAggregatedActivities,
5633
+ aggregatedActivities ?? [],
5634
+ (a) => a.group
5635
+ );
5636
+ break;
5637
+ case "end":
5638
+ result.aggregated_activities = uniqueArrayMerge(
5639
+ aggregatedActivities ?? [],
5640
+ newAggregatedActivities,
5641
+ (a) => a.group
5642
+ );
5643
+ break;
5644
+ case "replace":
5645
+ result.aggregated_activities = replaceUniqueArrayMerge(
5646
+ aggregatedActivities ?? [],
5647
+ newAggregatedActivities,
5648
+ (a) => a.group
5649
+ );
5650
+ break;
5651
+ }
5652
+ return result;
5653
+ };
5654
+ const updateNotificationStatus = (newNotificationStatus, currentNotificationStatus) => {
5655
+ if (!newNotificationStatus && !currentNotificationStatus) {
5656
+ return {
5657
+ changed: false,
5658
+ notification_status: void 0
5659
+ };
5660
+ } else if (!newNotificationStatus) {
5661
+ return {
5662
+ changed: false,
5663
+ notification_status: currentNotificationStatus
5664
+ };
5665
+ } else {
5666
+ return {
5667
+ changed: true,
5668
+ notification_status: {
5669
+ ...newNotificationStatus
5670
+ }
5671
+ };
5672
+ }
5673
+ };
5674
+ const updateNotificationFeedFromEvent = (event, currentAggregatedActivities, currentNotificationStatus) => {
5584
5675
  const updates = {};
5585
- if (event.notification_status) {
5586
- updates.notification_status = event.notification_status;
5676
+ if (event.notification_status && currentNotificationStatus) {
5677
+ const notificationStatusResult = updateNotificationStatus(
5678
+ event.notification_status,
5679
+ currentNotificationStatus
5680
+ );
5681
+ if (notificationStatusResult.changed) {
5682
+ updates.notification_status = notificationStatusResult.notification_status;
5683
+ }
5587
5684
  }
5588
- if (event.aggregated_activities) {
5589
- updates.aggregated_activities = event.aggregated_activities;
5685
+ if (event.aggregated_activities && currentAggregatedActivities) {
5686
+ const aggregatedActivitiesResult = addAggregatedActivitiesToState(
5687
+ event.aggregated_activities,
5688
+ currentAggregatedActivities,
5689
+ "start"
5690
+ );
5691
+ if (aggregatedActivitiesResult.changed) {
5692
+ updates.aggregated_activities = aggregatedActivitiesResult.aggregated_activities;
5693
+ }
5590
5694
  }
5591
5695
  if (Object.keys(updates).length > 0) {
5592
5696
  return {
@@ -5599,7 +5703,11 @@ const updateNotificationFeedFromEvent = (event) => {
5599
5703
  };
5600
5704
  };
5601
5705
  function handleNotificationFeedUpdated(event) {
5602
- const result = updateNotificationFeedFromEvent(event);
5706
+ const result = updateNotificationFeedFromEvent(
5707
+ event,
5708
+ this.currentState.aggregated_activities,
5709
+ this.currentState.notification_status
5710
+ );
5603
5711
  if (result.changed) {
5604
5712
  this.state.partialNext({
5605
5713
  notification_status: result.data?.notification_status,
@@ -5607,6 +5715,35 @@ function handleNotificationFeedUpdated(event) {
5607
5715
  });
5608
5716
  }
5609
5717
  }
5718
+ function updateStoriesFeedFromEvent(aggregatedActivities, event) {
5719
+ if (!aggregatedActivities) {
5720
+ return {
5721
+ changed: false
5722
+ };
5723
+ }
5724
+ if (event.aggregated_activities) {
5725
+ const result = addAggregatedActivitiesToState(
5726
+ event.aggregated_activities,
5727
+ aggregatedActivities,
5728
+ "replace"
5729
+ );
5730
+ return result;
5731
+ }
5732
+ return {
5733
+ changed: false
5734
+ };
5735
+ }
5736
+ function handleStoriesFeedUpdated(event) {
5737
+ const result = updateStoriesFeedFromEvent(
5738
+ this.currentState.aggregated_activities,
5739
+ event
5740
+ );
5741
+ if (result.changed) {
5742
+ this.state.partialNext({
5743
+ aggregated_activities: result.data?.aggregated_activities
5744
+ });
5745
+ }
5746
+ }
5610
5747
  function handleWatchStarted() {
5611
5748
  this.state.partialNext({ watch: true });
5612
5749
  }
@@ -5649,6 +5786,7 @@ const _Feed = class _Feed extends FeedApi {
5649
5786
  "feeds.feed_member.removed": handleFeedMemberRemoved.bind(this),
5650
5787
  "feeds.feed_member.updated": handleFeedMemberUpdated.bind(this),
5651
5788
  "feeds.notification_feed.updated": handleNotificationFeedUpdated.bind(this),
5789
+ "feeds.stories_feed.updated": handleStoriesFeedUpdated.bind(this),
5652
5790
  // the poll events should be removed from here
5653
5791
  "feeds.poll.closed": _Feed.noop,
5654
5792
  "feeds.poll.deleted": _Feed.noop,
@@ -5728,9 +5866,20 @@ const _Feed = class _Feed extends FeedApi {
5728
5866
  currentActivities,
5729
5867
  "end"
5730
5868
  );
5731
- if (result.changed) {
5869
+ const aggregatedActivitiesResult = addAggregatedActivitiesToState(
5870
+ response.aggregated_activities,
5871
+ this.currentState.aggregated_activities,
5872
+ "end"
5873
+ );
5874
+ const notificationStatusResult = updateNotificationStatus(
5875
+ response.notification_status,
5876
+ this.currentState.notification_status
5877
+ );
5878
+ if (result.changed || aggregatedActivitiesResult.changed || notificationStatusResult.changed) {
5732
5879
  this.state.partialNext({
5733
5880
  activities: result.activities,
5881
+ aggregated_activities: aggregatedActivitiesResult.aggregated_activities,
5882
+ notification_status: notificationStatusResult.notification_status,
5734
5883
  next: response.next,
5735
5884
  prev: response.prev
5736
5885
  });
@@ -6706,7 +6855,8 @@ exports.isImageFile = isImageFile;
6706
6855
  exports.isReactionResponse = isReactionResponse;
6707
6856
  exports.isVideoFile = isVideoFile;
6708
6857
  exports.isVoteAnswer = isVoteAnswer;
6858
+ exports.replaceUniqueArrayMerge = replaceUniqueArrayMerge;
6709
6859
  exports.shouldUpdateState = shouldUpdateState;
6710
6860
  exports.uniqueArrayMerge = uniqueArrayMerge;
6711
6861
  exports.updateEntityInArray = updateEntityInArray;
6712
- //# sourceMappingURL=index-o7AeSkxa.js.map
6862
+ //# sourceMappingURL=index-B08vVRSZ.js.map