@stream-io/feeds-client 0.2.8 → 0.2.10

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 (89) 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 +1 -1
  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 +1 -1
  8. package/dist/es/react-bindings.mjs.map +1 -1
  9. package/dist/{index-Cfbt0DFY.js → index-C49kZoN7.js} +273 -51
  10. package/dist/index-C49kZoN7.js.map +1 -0
  11. package/dist/{index-DLC5hiNd.mjs → index-EeFSq3sq.mjs} +273 -51
  12. package/dist/index-EeFSq3sq.mjs.map +1 -0
  13. package/dist/tsconfig.tsbuildinfo +1 -1
  14. package/dist/types/feed/event-handlers/activity/handle-activity-reaction-added.d.ts +4 -5
  15. package/dist/types/feed/event-handlers/activity/handle-activity-reaction-added.d.ts.map +1 -1
  16. package/dist/types/feed/event-handlers/activity/handle-activity-reaction-deleted.d.ts +1 -2
  17. package/dist/types/feed/event-handlers/activity/handle-activity-reaction-deleted.d.ts.map +1 -1
  18. package/dist/types/feed/event-handlers/activity/handle-activity-updated.d.ts +6 -5
  19. package/dist/types/feed/event-handlers/activity/handle-activity-updated.d.ts.map +1 -1
  20. package/dist/types/feed/event-handlers/comment/handle-comment-added.d.ts +4 -3
  21. package/dist/types/feed/event-handlers/comment/handle-comment-added.d.ts.map +1 -1
  22. package/dist/types/feed/event-handlers/comment/handle-comment-deleted.d.ts +4 -3
  23. package/dist/types/feed/event-handlers/comment/handle-comment-deleted.d.ts.map +1 -1
  24. package/dist/types/feed/event-handlers/comment/handle-comment-reaction-added.d.ts +5 -0
  25. package/dist/types/feed/event-handlers/comment/handle-comment-reaction-added.d.ts.map +1 -0
  26. package/dist/types/feed/event-handlers/comment/handle-comment-reaction-deleted.d.ts +5 -0
  27. package/dist/types/feed/event-handlers/comment/handle-comment-reaction-deleted.d.ts.map +1 -0
  28. package/dist/types/feed/event-handlers/comment/handle-comment-updated.d.ts +4 -3
  29. package/dist/types/feed/event-handlers/comment/handle-comment-updated.d.ts.map +1 -1
  30. package/dist/types/feed/event-handlers/comment/index.d.ts +2 -1
  31. package/dist/types/feed/event-handlers/comment/index.d.ts.map +1 -1
  32. package/dist/types/feed/event-handlers/comment/utils/index.d.ts +2 -0
  33. package/dist/types/feed/event-handlers/comment/utils/index.d.ts.map +1 -0
  34. package/dist/types/feed/event-handlers/comment/utils/update-comment-count.d.ts +8 -0
  35. package/dist/types/feed/event-handlers/comment/utils/update-comment-count.d.ts.map +1 -0
  36. package/dist/types/feed/feed.d.ts.map +1 -1
  37. package/dist/types/feeds-client/feeds-client.d.ts +19 -1
  38. package/dist/types/feeds-client/feeds-client.d.ts.map +1 -1
  39. package/dist/types/types-internal.d.ts +4 -2
  40. package/dist/types/types-internal.d.ts.map +1 -1
  41. package/dist/types/utils/ensure-exhausted.d.ts +2 -0
  42. package/dist/types/utils/ensure-exhausted.d.ts.map +1 -0
  43. package/dist/types/utils/event-triggered-by-connected-user.d.ts +6 -0
  44. package/dist/types/utils/event-triggered-by-connected-user.d.ts.map +1 -0
  45. package/dist/types/utils/index.d.ts +1 -0
  46. package/dist/types/utils/index.d.ts.map +1 -1
  47. package/dist/types/utils/logger.d.ts +10 -1
  48. package/dist/types/utils/logger.d.ts.map +1 -1
  49. package/dist/types/utils/state-update-queue.d.ts +22 -2
  50. package/dist/types/utils/state-update-queue.d.ts.map +1 -1
  51. package/dist/types/utils/type-assertions.d.ts +2 -5
  52. package/dist/types/utils/type-assertions.d.ts.map +1 -1
  53. package/package.json +2 -2
  54. package/src/feed/event-handlers/activity/handle-activity-reaction-added.ts +15 -10
  55. package/src/feed/event-handlers/activity/handle-activity-reaction-deleted.test.ts +1 -1
  56. package/src/feed/event-handlers/activity/handle-activity-reaction-deleted.ts +1 -1
  57. package/src/feed/event-handlers/activity/handle-activity-updated.test.ts +131 -1
  58. package/src/feed/event-handlers/activity/handle-activity-updated.ts +38 -15
  59. package/src/feed/event-handlers/comment/handle-comment-added.test.ts +131 -7
  60. package/src/feed/event-handlers/comment/handle-comment-added.ts +24 -4
  61. package/src/feed/event-handlers/comment/handle-comment-deleted.test.ts +124 -2
  62. package/src/feed/event-handlers/comment/handle-comment-deleted.ts +29 -3
  63. package/src/feed/event-handlers/comment/{handle-comment-reaction.test.ts → handle-comment-reaction-added.test.ts} +152 -138
  64. package/src/feed/event-handlers/comment/handle-comment-reaction-added.ts +72 -0
  65. package/src/feed/event-handlers/comment/handle-comment-reaction-deleted.test.ts +343 -0
  66. package/src/feed/event-handlers/comment/handle-comment-reaction-deleted.ts +74 -0
  67. package/src/feed/event-handlers/comment/handle-comment-updated.test.ts +137 -1
  68. package/src/feed/event-handlers/comment/handle-comment-updated.ts +29 -4
  69. package/src/feed/event-handlers/comment/index.ts +3 -1
  70. package/src/feed/event-handlers/comment/utils/index.ts +1 -0
  71. package/src/feed/event-handlers/comment/utils/update-comment-count.test.ts +320 -0
  72. package/src/feed/event-handlers/comment/utils/update-comment-count.ts +51 -0
  73. package/src/feed/event-handlers/follow/handle-follow-deleted.ts +1 -1
  74. package/src/feed/feed.ts +4 -3
  75. package/src/feeds-client/feeds-client.ts +104 -0
  76. package/src/test-utils/response-generators.ts +18 -1
  77. package/src/types-internal.ts +4 -4
  78. package/src/utils/ensure-exhausted.ts +5 -0
  79. package/src/utils/event-triggered-by-connected-user.test.ts +73 -0
  80. package/src/utils/event-triggered-by-connected-user.ts +15 -0
  81. package/src/utils/index.ts +2 -1
  82. package/src/utils/logger.ts +2 -1
  83. package/src/utils/state-update-queue.ts +89 -25
  84. package/src/utils/type-assertions.ts +2 -3
  85. package/dist/index-Cfbt0DFY.js.map +0 -1
  86. package/dist/index-DLC5hiNd.mjs.map +0 -1
  87. package/dist/types/feed/event-handlers/comment/handle-comment-reaction.d.ts +0 -4
  88. package/dist/types/feed/event-handlers/comment/handle-comment-reaction.d.ts.map +0 -1
  89. package/src/feed/event-handlers/comment/handle-comment-reaction.ts +0 -61
@@ -3712,7 +3712,7 @@ const getRateLimitFromResponseHeader = (response_headers) => {
3712
3712
  };
3713
3713
  return result;
3714
3714
  };
3715
- const version = "0.2.8";
3715
+ const version = "0.2.10";
3716
3716
  class ApiClient {
3717
3717
  constructor(apiKey, tokenManager, connectionIdManager, options) {
3718
3718
  this.apiKey = apiKey;
@@ -4469,6 +4469,9 @@ const isImageFile = (file) => {
4469
4469
  const isVideoFile = (file) => {
4470
4470
  return file.type.startsWith("video/");
4471
4471
  };
4472
+ const ensureExhausted = (x, message) => {
4473
+ getLogger("helpers").warn(message, x);
4474
+ };
4472
4475
  const shouldUpdateState = ({
4473
4476
  stateUpdateQueueId,
4474
4477
  stateUpdateQueue,
@@ -4476,7 +4479,7 @@ const shouldUpdateState = ({
4476
4479
  fromWs = true,
4477
4480
  isTriggeredByConnectedUser = false
4478
4481
  }) => {
4479
- if (!watch || !isTriggeredByConnectedUser) {
4482
+ if (!watch || !isTriggeredByConnectedUser || !stateUpdateQueueId) {
4480
4483
  return true;
4481
4484
  }
4482
4485
  const prefixedStateUpdateQueueId = fromWs ? `ws-${stateUpdateQueueId}` : `http-${stateUpdateQueueId}`;
@@ -4488,19 +4491,41 @@ const shouldUpdateState = ({
4488
4491
  stateUpdateQueue.add(prefixedStateUpdateQueueId);
4489
4492
  return true;
4490
4493
  };
4491
- function getStateUpdateQueueId(data, prefix) {
4492
- const toJoin = prefix ? [prefix] : [];
4493
- if (isFollowResponse(data)) {
4494
- return toJoin.concat([data.source_feed.feed, data.target_feed.feed]).join("-");
4495
- } else if (isReactionResponse(data)) {
4496
- return toJoin.concat([
4497
- data.activity.id ?? data.comment.id,
4498
- data.reaction.type
4499
- ]).join("-");
4500
- }
4501
- throw new Error(
4502
- `Cannot create state update queueId for data: ${JSON.stringify(data)}`
4503
- );
4494
+ function getStateUpdateQueueId(...args) {
4495
+ const [data, prefix] = args;
4496
+ const toJoin = [prefix];
4497
+ switch (prefix) {
4498
+ case "activity-updated": {
4499
+ return toJoin.concat([data.activity.id]).join("-");
4500
+ }
4501
+ case "activity-reaction-created":
4502
+ case "activity-reaction-deleted": {
4503
+ return toJoin.concat([
4504
+ data.activity.id,
4505
+ data.reaction.type
4506
+ ]).join("-");
4507
+ }
4508
+ case "comment-reaction-created":
4509
+ case "comment-reaction-deleted": {
4510
+ return toJoin.concat([
4511
+ data.comment.id,
4512
+ data.reaction.type
4513
+ ]).join("-");
4514
+ }
4515
+ case "comment-created":
4516
+ case "comment-deleted":
4517
+ case "comment-updated": {
4518
+ return toJoin.concat([data.comment.id]).join("-");
4519
+ }
4520
+ case "follow-created":
4521
+ case "follow-deleted":
4522
+ case "follow-updated": {
4523
+ return toJoin.concat([data.source_feed.feed, data.target_feed.feed]).join("-");
4524
+ }
4525
+ default: {
4526
+ ensureExhausted(data, "Encountered unknown state update queue prefix.");
4527
+ }
4528
+ }
4504
4529
  }
4505
4530
  function updateEntityInArray({
4506
4531
  matcher,
@@ -4616,7 +4641,7 @@ const updateStateFollowDeleted = (follow, currentState, currentFeedId, connected
4616
4641
  function handleFollowDeleted(eventOrResponse, fromWs) {
4617
4642
  const follow = eventOrResponse.follow;
4618
4643
  if (!shouldUpdateState({
4619
- stateUpdateQueueId: getStateUpdateQueueId(follow, "deleted"),
4644
+ stateUpdateQueueId: getStateUpdateQueueId(follow, "follow-deleted"),
4620
4645
  stateUpdateQueue: this.stateUpdateQueue,
4621
4646
  watch: this.currentState.watch,
4622
4647
  fromWs,
@@ -4693,9 +4718,23 @@ function handleFollowUpdated(eventOrResponse, fromWs) {
4693
4718
  return newState ?? currentState;
4694
4719
  });
4695
4720
  }
4696
- function handleCommentAdded(event) {
4697
- const { comment } = event;
4721
+ function eventTriggeredByConnectedUser(payload) {
4722
+ const connectedUser = this.client.state.getLatestValue().connected_user;
4723
+ const payloadUser = payload.user ?? connectedUser;
4724
+ return typeof connectedUser !== "undefined" && connectedUser?.id === payloadUser?.id;
4725
+ }
4726
+ function handleCommentAdded(payload, fromWs) {
4727
+ const { comment } = payload;
4698
4728
  const entityId = comment.parent_id ?? comment.object_id;
4729
+ if (!shouldUpdateState({
4730
+ stateUpdateQueueId: getStateUpdateQueueId(payload, "comment-created"),
4731
+ stateUpdateQueue: this.stateUpdateQueue,
4732
+ watch: this.currentState.watch,
4733
+ fromWs,
4734
+ isTriggeredByConnectedUser: eventTriggeredByConnectedUser.call(this, payload)
4735
+ })) {
4736
+ return;
4737
+ }
4699
4738
  this.state.next((currentState) => {
4700
4739
  const entityState = currentState.comments_by_entity_id[entityId];
4701
4740
  if (typeof entityState?.comments === "undefined") {
@@ -4719,8 +4758,21 @@ function handleCommentAdded(event) {
4719
4758
  };
4720
4759
  });
4721
4760
  }
4722
- function handleCommentDeleted({ comment }) {
4761
+ function handleCommentDeleted(payload, fromWs) {
4762
+ const { comment } = payload;
4723
4763
  const entityId = comment.parent_id ?? comment.object_id;
4764
+ if (!shouldUpdateState({
4765
+ stateUpdateQueueId: getStateUpdateQueueId(
4766
+ payload,
4767
+ "comment-deleted"
4768
+ ),
4769
+ stateUpdateQueue: this.stateUpdateQueue,
4770
+ watch: this.currentState.watch,
4771
+ fromWs,
4772
+ isTriggeredByConnectedUser: eventTriggeredByConnectedUser.call(this, payload)
4773
+ })) {
4774
+ return;
4775
+ }
4724
4776
  this.state.next((currentState) => {
4725
4777
  let newCommentsByEntityId;
4726
4778
  const index = this.getCommentIndex(comment, currentState);
@@ -4751,9 +4803,21 @@ function handleCommentDeleted({ comment }) {
4751
4803
  };
4752
4804
  });
4753
4805
  }
4754
- function handleCommentUpdated(event) {
4755
- const { comment } = event;
4806
+ function handleCommentUpdated(payload, fromWs) {
4807
+ const { comment } = payload;
4756
4808
  const entityId = comment.parent_id ?? comment.object_id;
4809
+ if (!shouldUpdateState({
4810
+ stateUpdateQueueId: getStateUpdateQueueId(
4811
+ payload,
4812
+ "comment-updated"
4813
+ ),
4814
+ stateUpdateQueue: this.stateUpdateQueue,
4815
+ watch: this.currentState.watch,
4816
+ fromWs,
4817
+ isTriggeredByConnectedUser: eventTriggeredByConnectedUser.call(this, payload)
4818
+ })) {
4819
+ return;
4820
+ }
4757
4821
  this.state.next((currentState) => {
4758
4822
  const entityState = currentState.comments_by_entity_id[entityId];
4759
4823
  if (!entityState?.comments?.length) return currentState;
@@ -4773,36 +4837,88 @@ function handleCommentUpdated(event) {
4773
4837
  };
4774
4838
  });
4775
4839
  }
4776
- function handleCommentReaction(event) {
4777
- const { comment, reaction } = event;
4840
+ function handleCommentReactionAdded(payload, fromWs) {
4841
+ const { comment, reaction } = payload;
4778
4842
  const connectedUser = this.client.state.getLatestValue().connected_user;
4843
+ const isOwnReaction = reaction.user.id === connectedUser?.id;
4844
+ if (!shouldUpdateState({
4845
+ stateUpdateQueueId: getStateUpdateQueueId(
4846
+ payload,
4847
+ "comment-reaction-created"
4848
+ ),
4849
+ stateUpdateQueue: this.stateUpdateQueue,
4850
+ watch: this.currentState.watch,
4851
+ fromWs,
4852
+ isTriggeredByConnectedUser: isOwnReaction
4853
+ })) {
4854
+ return;
4855
+ }
4779
4856
  this.state.next((currentState) => {
4780
- const forId = comment.parent_id ?? comment.object_id;
4781
- const entityState = currentState.comments_by_entity_id[forId];
4782
4857
  const commentIndex = this.getCommentIndex(comment, currentState);
4783
4858
  if (commentIndex === -1) return currentState;
4859
+ const forId = comment.parent_id ?? comment.object_id;
4860
+ const entityState = currentState.comments_by_entity_id[forId];
4784
4861
  const newComments = entityState?.comments?.concat([]) ?? [];
4785
- const commentCopy = { ...comment };
4786
- delete commentCopy.own_reactions;
4787
- const newComment = {
4862
+ let ownReactions = newComments[commentIndex].own_reactions;
4863
+ if (isOwnReaction) {
4864
+ ownReactions = ownReactions.concat(reaction) ?? [reaction];
4865
+ }
4866
+ newComments[commentIndex] = {
4788
4867
  ...newComments[commentIndex],
4789
- ...commentCopy,
4868
+ reaction_count: comment.reaction_count ?? 0,
4790
4869
  // TODO: FIXME this should be handled by the backend
4791
- latest_reactions: commentCopy.latest_reactions ?? [],
4792
- reaction_groups: commentCopy.reaction_groups ?? {}
4793
- };
4794
- newComments[commentIndex] = newComment;
4795
- if (reaction.user.id === connectedUser?.id) {
4796
- if (event.type === "feeds.comment.reaction.added") {
4797
- newComment.own_reactions = newComment.own_reactions.concat(
4798
- reaction
4799
- ) ?? [reaction];
4800
- } else if (event.type === "feeds.comment.reaction.deleted") {
4801
- newComment.own_reactions = newComment.own_reactions.filter(
4802
- (r) => r.type !== reaction.type
4803
- );
4870
+ latest_reactions: comment.latest_reactions ?? [],
4871
+ reaction_groups: comment.reaction_groups ?? {},
4872
+ own_reactions: ownReactions
4873
+ };
4874
+ return {
4875
+ ...currentState,
4876
+ comments_by_entity_id: {
4877
+ ...currentState.comments_by_entity_id,
4878
+ [forId]: {
4879
+ ...entityState,
4880
+ comments: newComments
4881
+ }
4804
4882
  }
4883
+ };
4884
+ });
4885
+ }
4886
+ function handleCommentReactionDeleted(payload, fromWs) {
4887
+ const { comment, reaction } = payload;
4888
+ const connectedUser = this.client.state.getLatestValue().connected_user;
4889
+ const isOwnReaction = reaction.user.id === connectedUser?.id;
4890
+ if (!shouldUpdateState({
4891
+ stateUpdateQueueId: getStateUpdateQueueId(
4892
+ payload,
4893
+ "comment-reaction-deleted"
4894
+ ),
4895
+ stateUpdateQueue: this.stateUpdateQueue,
4896
+ watch: this.currentState.watch,
4897
+ fromWs,
4898
+ isTriggeredByConnectedUser: isOwnReaction
4899
+ })) {
4900
+ return;
4901
+ }
4902
+ this.state.next((currentState) => {
4903
+ const commentIndex = this.getCommentIndex(comment, currentState);
4904
+ if (commentIndex === -1) return currentState;
4905
+ const forId = comment.parent_id ?? comment.object_id;
4906
+ const entityState = currentState.comments_by_entity_id[forId];
4907
+ const newComments = entityState?.comments?.concat([]) ?? [];
4908
+ let ownReactions = newComments[commentIndex].own_reactions;
4909
+ if (isOwnReaction) {
4910
+ ownReactions = ownReactions.filter(
4911
+ (r) => r.type !== reaction.type
4912
+ );
4805
4913
  }
4914
+ newComments[commentIndex] = {
4915
+ ...newComments[commentIndex],
4916
+ reaction_count: comment.reaction_count ?? 0,
4917
+ // TODO: FIXME this should be handled by the backend
4918
+ latest_reactions: comment.latest_reactions ?? [],
4919
+ reaction_groups: comment.reaction_groups ?? {},
4920
+ own_reactions: ownReactions
4921
+ };
4806
4922
  return {
4807
4923
  ...currentState,
4808
4924
  comments_by_entity_id: {
@@ -5219,19 +5335,31 @@ const updatePinnedActivityInState = (event, pinnedActivities) => updateEntityInA
5219
5335
  };
5220
5336
  }
5221
5337
  });
5222
- function handleActivityUpdated(event) {
5338
+ function handleActivityUpdated(payload, fromWs) {
5339
+ if (!shouldUpdateState({
5340
+ stateUpdateQueueId: getStateUpdateQueueId(payload, "activity-updated"),
5341
+ stateUpdateQueue: this.stateUpdateQueue,
5342
+ watch: this.currentState.watch,
5343
+ fromWs,
5344
+ isTriggeredByConnectedUser: eventTriggeredByConnectedUser.call(
5345
+ this,
5346
+ payload
5347
+ )
5348
+ })) {
5349
+ return;
5350
+ }
5223
5351
  const {
5224
5352
  activities: currentActivities,
5225
5353
  pinned_activities: currentPinnedActivities
5226
5354
  } = this.currentState;
5227
5355
  const [result1, result2] = [
5228
- updateActivityInState(event, currentActivities),
5229
- updatePinnedActivityInState(event, currentPinnedActivities)
5356
+ this.hasActivity(payload.activity.id) ? updateActivityInState(payload, currentActivities) : void 0,
5357
+ updatePinnedActivityInState(payload, currentPinnedActivities)
5230
5358
  ];
5231
- if (result1.changed || result2.changed) {
5232
- this.client.hydratePollCache([event.activity]);
5359
+ if (result1?.changed || result2.changed) {
5360
+ this.client.hydratePollCache([payload.activity]);
5233
5361
  this.state.partialNext({
5234
- activities: result1.entities,
5362
+ activities: result1?.changed ? result1.entities : currentActivities,
5235
5363
  pinned_activities: result2.entities
5236
5364
  });
5237
5365
  }
@@ -5515,8 +5643,8 @@ const _Feed = class _Feed extends FeedApi {
5515
5643
  "feeds.follow.created": handleFollowCreated.bind(this),
5516
5644
  "feeds.follow.deleted": handleFollowDeleted.bind(this),
5517
5645
  "feeds.follow.updated": handleFollowUpdated.bind(this),
5518
- "feeds.comment.reaction.added": handleCommentReaction.bind(this),
5519
- "feeds.comment.reaction.deleted": handleCommentReaction.bind(this),
5646
+ "feeds.comment.reaction.added": handleCommentReactionAdded.bind(this),
5647
+ "feeds.comment.reaction.deleted": handleCommentReactionDeleted.bind(this),
5520
5648
  "feeds.comment.reaction.updated": _Feed.noop,
5521
5649
  "feeds.feed_member.added": handleFeedMemberAdded.bind(this),
5522
5650
  "feeds.feed_member.removed": handleFeedMemberRemoved.bind(this),
@@ -6032,6 +6160,34 @@ var UnhandledErrorType = /* @__PURE__ */ ((UnhandledErrorType2) => {
6032
6160
  UnhandledErrorType2["ReconnectionReconciliation"] = "reconnection-reconciliation";
6033
6161
  return UnhandledErrorType2;
6034
6162
  })(UnhandledErrorType || {});
6163
+ function updateCommentCount({
6164
+ activity,
6165
+ comment,
6166
+ replyCountUpdater
6167
+ }) {
6168
+ const parentActivityId = comment.object_id;
6169
+ if (comment?.parent_id) {
6170
+ const grandparentCommentId = this.currentState.comments_by_entity_id[comment?.parent_id ?? ""]?.entity_parent_id;
6171
+ const idToUpdate = grandparentCommentId ?? parentActivityId;
6172
+ const commentToUpdate = this.currentState.comments_by_entity_id[idToUpdate]?.comments?.find((c) => c.id === comment.parent_id);
6173
+ if (commentToUpdate) {
6174
+ handleCommentUpdated.bind(this)(
6175
+ {
6176
+ comment: {
6177
+ ...commentToUpdate,
6178
+ reply_count: replyCountUpdater(commentToUpdate.reply_count)
6179
+ }
6180
+ },
6181
+ false
6182
+ );
6183
+ }
6184
+ }
6185
+ if (this.hasActivity(activity.id)) {
6186
+ handleActivityUpdated.bind(this)({
6187
+ activity
6188
+ }, false);
6189
+ }
6190
+ }
6035
6191
  class FeedsClient extends FeedsApi {
6036
6192
  constructor(apiKey, options) {
6037
6193
  const tokenManager = new TokenManager();
@@ -6119,6 +6275,57 @@ class FeedsClient extends FeedsApi {
6119
6275
  upload_sizes: JSON.stringify(request.upload_sizes)
6120
6276
  });
6121
6277
  };
6278
+ this.updateActivity = async (request) => {
6279
+ const response = await super.updateActivity(request);
6280
+ for (const feed of Object.values(this.activeFeeds)) {
6281
+ handleActivityUpdated.bind(feed)(response, false);
6282
+ }
6283
+ return response;
6284
+ };
6285
+ this.addComment = async (request) => {
6286
+ const response = await super.addComment(request);
6287
+ const { comment } = response;
6288
+ for (const feed of Object.values(this.activeFeeds)) {
6289
+ handleCommentAdded.bind(feed)(response, false);
6290
+ const parentActivityId = comment.object_id;
6291
+ if (feed.hasActivity(parentActivityId)) {
6292
+ const activityToUpdate = feed.currentState.activities?.find(
6293
+ (activity) => activity.id === parentActivityId
6294
+ );
6295
+ if (activityToUpdate) {
6296
+ updateCommentCount.bind(feed)({
6297
+ activity: {
6298
+ ...activityToUpdate,
6299
+ comment_count: activityToUpdate.comment_count + 1
6300
+ },
6301
+ comment,
6302
+ replyCountUpdater: (prevCount) => prevCount + 1
6303
+ });
6304
+ }
6305
+ }
6306
+ }
6307
+ return response;
6308
+ };
6309
+ this.updateComment = async (request) => {
6310
+ const response = await super.updateComment(request);
6311
+ for (const feed of Object.values(this.activeFeeds)) {
6312
+ handleCommentUpdated.bind(feed)(response, false);
6313
+ }
6314
+ return response;
6315
+ };
6316
+ this.deleteComment = async (request) => {
6317
+ const response = await super.deleteComment(request);
6318
+ const { activity, comment } = response;
6319
+ for (const feed of Object.values(this.activeFeeds)) {
6320
+ handleCommentDeleted.bind(feed)({ comment }, false);
6321
+ updateCommentCount.bind(feed)({
6322
+ activity,
6323
+ comment,
6324
+ replyCountUpdater: (prevCount) => prevCount - 1
6325
+ });
6326
+ }
6327
+ return response;
6328
+ };
6122
6329
  this.addReaction = async (request) => {
6123
6330
  const response = await super.addReaction(request);
6124
6331
  for (const feed of Object.values(this.activeFeeds)) {
@@ -6133,6 +6340,20 @@ class FeedsClient extends FeedsApi {
6133
6340
  }
6134
6341
  return response;
6135
6342
  };
6343
+ this.addCommentReaction = async (request) => {
6344
+ const response = await super.addCommentReaction(request);
6345
+ for (const feed of Object.values(this.activeFeeds)) {
6346
+ handleCommentReactionAdded.bind(feed)(response, false);
6347
+ }
6348
+ return response;
6349
+ };
6350
+ this.deleteCommentReaction = async (request) => {
6351
+ const response = await super.deleteCommentReaction(request);
6352
+ for (const feed of Object.values(this.activeFeeds)) {
6353
+ handleCommentReactionDeleted.bind(feed)(response, false);
6354
+ }
6355
+ return response;
6356
+ };
6136
6357
  this.queryPollAnswers = async (request) => {
6137
6358
  const filter = request.filter ?? {};
6138
6359
  const queryPollAnswersFilter = {
@@ -6478,6 +6699,7 @@ exports.StreamPoll = StreamPoll;
6478
6699
  exports.checkHasAnotherPage = checkHasAnotherPage;
6479
6700
  exports.configureLoggers = configureLoggers;
6480
6701
  exports.debounce = debounce;
6702
+ exports.ensureExhausted = ensureExhausted;
6481
6703
  exports.getLogger = getLogger;
6482
6704
  exports.getStateUpdateQueueId = getStateUpdateQueueId;
6483
6705
  exports.isCommentResponse = isCommentResponse;
@@ -6489,4 +6711,4 @@ exports.isVoteAnswer = isVoteAnswer;
6489
6711
  exports.shouldUpdateState = shouldUpdateState;
6490
6712
  exports.uniqueArrayMerge = uniqueArrayMerge;
6491
6713
  exports.updateEntityInArray = updateEntityInArray;
6492
- //# sourceMappingURL=index-Cfbt0DFY.js.map
6714
+ //# sourceMappingURL=index-C49kZoN7.js.map