@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
@@ -1246,6 +1246,17 @@ decoders.SingleFollowResponse = (input) => {
1246
1246
  };
1247
1247
  return decode(typeMappings, input);
1248
1248
  };
1249
+ decoders.StoriesFeedUpdatedEvent = (input) => {
1250
+ const typeMappings = {
1251
+ created_at: { type: "DatetimeType", isSingle: true },
1252
+ received_at: { type: "DatetimeType", isSingle: true },
1253
+ aggregated_activities: {
1254
+ type: "AggregatedActivityResponse",
1255
+ isSingle: false
1256
+ }
1257
+ };
1258
+ return decode(typeMappings, input);
1259
+ };
1249
1260
  decoders.SubmitActionResponse = (input) => {
1250
1261
  const typeMappings = {
1251
1262
  item: { type: "ReviewQueueItemResponse", isSingle: true }
@@ -3693,7 +3704,7 @@ const getRateLimitFromResponseHeader = (response_headers) => {
3693
3704
  };
3694
3705
  return result;
3695
3706
  };
3696
- const version = "0.2.12";
3707
+ const version = "0.2.14";
3697
3708
  class ApiClient {
3698
3709
  constructor(apiKey, tokenManager, connectionIdManager, options) {
3699
3710
  this.apiKey = apiKey;
@@ -3904,6 +3915,7 @@ const eventDecoderMapping = {
3904
3915
  "feeds.poll.vote_casted": (data) => decoders.PollVoteCastedFeedEvent(data),
3905
3916
  "feeds.poll.vote_changed": (data) => decoders.PollVoteChangedFeedEvent(data),
3906
3917
  "feeds.poll.vote_removed": (data) => decoders.PollVoteRemovedFeedEvent(data),
3918
+ "feeds.stories_feed.updated": (data) => decoders.StoriesFeedUpdatedEvent(data),
3907
3919
  "health.check": (data) => decoders.HealthCheckEvent(data),
3908
3920
  "moderation.custom_action": (data) => decoders.ModerationCustomActionEvent(data),
3909
3921
  "moderation.flagged": (data) => decoders.ModerationFlaggedEvent(data),
@@ -4432,6 +4444,27 @@ const uniqueArrayMerge = (existingArray, arrayToMerge, getKey) => {
4432
4444
  });
4433
4445
  return existingArray.concat(filteredArrayToMerge);
4434
4446
  };
4447
+ const replaceUniqueArrayMerge = (existingArray, arrayToMerge, getKey) => {
4448
+ const existingMap = /* @__PURE__ */ new Map();
4449
+ (existingArray ?? []).forEach((item) => {
4450
+ existingMap.set(getKey(item), item);
4451
+ });
4452
+ const result = [];
4453
+ arrayToMerge.forEach((item) => {
4454
+ existingMap.set(getKey(item), item);
4455
+ });
4456
+ existingArray.forEach((originalItem) => {
4457
+ const updatedItem = existingMap.get(getKey(originalItem));
4458
+ if (updatedItem) {
4459
+ result.push(updatedItem);
4460
+ existingMap.delete(getKey(originalItem));
4461
+ }
4462
+ });
4463
+ existingMap.forEach((item) => {
4464
+ result.push(item);
4465
+ });
4466
+ return result;
4467
+ };
4435
4468
  const Constants = {
4436
4469
  DEFAULT_COMMENT_PAGINATION: "first"
4437
4470
  };
@@ -5562,13 +5595,84 @@ function handleActivityMarked(event) {
5562
5595
  function handleFeedUpdated(event) {
5563
5596
  this.state.partialNext({ ...event.feed });
5564
5597
  }
5565
- const updateNotificationFeedFromEvent = (event) => {
5598
+ const addAggregatedActivitiesToState = (newAggregatedActivities, aggregatedActivities, position) => {
5599
+ let result;
5600
+ if (newAggregatedActivities.length === 0) {
5601
+ result = {
5602
+ changed: false,
5603
+ aggregated_activities: []
5604
+ };
5605
+ } else {
5606
+ result = {
5607
+ changed: true,
5608
+ aggregated_activities: []
5609
+ };
5610
+ }
5611
+ switch (position) {
5612
+ case "start":
5613
+ result.aggregated_activities = uniqueArrayMerge(
5614
+ newAggregatedActivities,
5615
+ aggregatedActivities ?? [],
5616
+ (a) => a.group
5617
+ );
5618
+ break;
5619
+ case "end":
5620
+ result.aggregated_activities = uniqueArrayMerge(
5621
+ aggregatedActivities ?? [],
5622
+ newAggregatedActivities,
5623
+ (a) => a.group
5624
+ );
5625
+ break;
5626
+ case "replace":
5627
+ result.aggregated_activities = replaceUniqueArrayMerge(
5628
+ aggregatedActivities ?? [],
5629
+ newAggregatedActivities,
5630
+ (a) => a.group
5631
+ );
5632
+ break;
5633
+ }
5634
+ return result;
5635
+ };
5636
+ const updateNotificationStatus = (newNotificationStatus, currentNotificationStatus) => {
5637
+ if (!newNotificationStatus && !currentNotificationStatus) {
5638
+ return {
5639
+ changed: false,
5640
+ notification_status: void 0
5641
+ };
5642
+ } else if (!newNotificationStatus) {
5643
+ return {
5644
+ changed: false,
5645
+ notification_status: currentNotificationStatus
5646
+ };
5647
+ } else {
5648
+ return {
5649
+ changed: true,
5650
+ notification_status: {
5651
+ ...newNotificationStatus
5652
+ }
5653
+ };
5654
+ }
5655
+ };
5656
+ const updateNotificationFeedFromEvent = (event, currentAggregatedActivities, currentNotificationStatus) => {
5566
5657
  const updates = {};
5567
- if (event.notification_status) {
5568
- updates.notification_status = event.notification_status;
5658
+ if (event.notification_status && currentNotificationStatus) {
5659
+ const notificationStatusResult = updateNotificationStatus(
5660
+ event.notification_status,
5661
+ currentNotificationStatus
5662
+ );
5663
+ if (notificationStatusResult.changed) {
5664
+ updates.notification_status = notificationStatusResult.notification_status;
5665
+ }
5569
5666
  }
5570
- if (event.aggregated_activities) {
5571
- updates.aggregated_activities = event.aggregated_activities;
5667
+ if (event.aggregated_activities && currentAggregatedActivities) {
5668
+ const aggregatedActivitiesResult = addAggregatedActivitiesToState(
5669
+ event.aggregated_activities,
5670
+ currentAggregatedActivities,
5671
+ "start"
5672
+ );
5673
+ if (aggregatedActivitiesResult.changed) {
5674
+ updates.aggregated_activities = aggregatedActivitiesResult.aggregated_activities;
5675
+ }
5572
5676
  }
5573
5677
  if (Object.keys(updates).length > 0) {
5574
5678
  return {
@@ -5581,7 +5685,11 @@ const updateNotificationFeedFromEvent = (event) => {
5581
5685
  };
5582
5686
  };
5583
5687
  function handleNotificationFeedUpdated(event) {
5584
- const result = updateNotificationFeedFromEvent(event);
5688
+ const result = updateNotificationFeedFromEvent(
5689
+ event,
5690
+ this.currentState.aggregated_activities,
5691
+ this.currentState.notification_status
5692
+ );
5585
5693
  if (result.changed) {
5586
5694
  this.state.partialNext({
5587
5695
  notification_status: result.data?.notification_status,
@@ -5589,6 +5697,35 @@ function handleNotificationFeedUpdated(event) {
5589
5697
  });
5590
5698
  }
5591
5699
  }
5700
+ function updateStoriesFeedFromEvent(aggregatedActivities, event) {
5701
+ if (!aggregatedActivities) {
5702
+ return {
5703
+ changed: false
5704
+ };
5705
+ }
5706
+ if (event.aggregated_activities) {
5707
+ const result = addAggregatedActivitiesToState(
5708
+ event.aggregated_activities,
5709
+ aggregatedActivities,
5710
+ "replace"
5711
+ );
5712
+ return result;
5713
+ }
5714
+ return {
5715
+ changed: false
5716
+ };
5717
+ }
5718
+ function handleStoriesFeedUpdated(event) {
5719
+ const result = updateStoriesFeedFromEvent(
5720
+ this.currentState.aggregated_activities,
5721
+ event
5722
+ );
5723
+ if (result.changed) {
5724
+ this.state.partialNext({
5725
+ aggregated_activities: result.data?.aggregated_activities
5726
+ });
5727
+ }
5728
+ }
5592
5729
  function handleWatchStarted() {
5593
5730
  this.state.partialNext({ watch: true });
5594
5731
  }
@@ -5631,6 +5768,7 @@ const _Feed = class _Feed extends FeedApi {
5631
5768
  "feeds.feed_member.removed": handleFeedMemberRemoved.bind(this),
5632
5769
  "feeds.feed_member.updated": handleFeedMemberUpdated.bind(this),
5633
5770
  "feeds.notification_feed.updated": handleNotificationFeedUpdated.bind(this),
5771
+ "feeds.stories_feed.updated": handleStoriesFeedUpdated.bind(this),
5634
5772
  // the poll events should be removed from here
5635
5773
  "feeds.poll.closed": _Feed.noop,
5636
5774
  "feeds.poll.deleted": _Feed.noop,
@@ -5710,9 +5848,20 @@ const _Feed = class _Feed extends FeedApi {
5710
5848
  currentActivities,
5711
5849
  "end"
5712
5850
  );
5713
- if (result.changed) {
5851
+ const aggregatedActivitiesResult = addAggregatedActivitiesToState(
5852
+ response.aggregated_activities,
5853
+ this.currentState.aggregated_activities,
5854
+ "end"
5855
+ );
5856
+ const notificationStatusResult = updateNotificationStatus(
5857
+ response.notification_status,
5858
+ this.currentState.notification_status
5859
+ );
5860
+ if (result.changed || aggregatedActivitiesResult.changed || notificationStatusResult.changed) {
5714
5861
  this.state.partialNext({
5715
5862
  activities: result.activities,
5863
+ aggregated_activities: aggregatedActivitiesResult.aggregated_activities,
5864
+ notification_status: notificationStatusResult.notification_status,
5716
5865
  next: response.next,
5717
5866
  prev: response.prev
5718
5867
  });
@@ -6690,7 +6839,8 @@ export {
6690
6839
  configureLoggers as o,
6691
6840
  getLogger as p,
6692
6841
  ensureExhausted as q,
6842
+ replaceUniqueArrayMerge as r,
6693
6843
  shouldUpdateState as s,
6694
6844
  uniqueArrayMerge as u
6695
6845
  };
6696
- //# sourceMappingURL=index-D7QtnkUs.mjs.map
6846
+ //# sourceMappingURL=index-B3HHiF9S.mjs.map