@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
@@ -3694,7 +3694,7 @@ const getRateLimitFromResponseHeader = (response_headers) => {
3694
3694
  };
3695
3695
  return result;
3696
3696
  };
3697
- const version = "0.2.8";
3697
+ const version = "0.2.10";
3698
3698
  class ApiClient {
3699
3699
  constructor(apiKey, tokenManager, connectionIdManager, options) {
3700
3700
  this.apiKey = apiKey;
@@ -4451,6 +4451,9 @@ const isImageFile = (file) => {
4451
4451
  const isVideoFile = (file) => {
4452
4452
  return file.type.startsWith("video/");
4453
4453
  };
4454
+ const ensureExhausted = (x, message) => {
4455
+ getLogger("helpers").warn(message, x);
4456
+ };
4454
4457
  const shouldUpdateState = ({
4455
4458
  stateUpdateQueueId,
4456
4459
  stateUpdateQueue,
@@ -4458,7 +4461,7 @@ const shouldUpdateState = ({
4458
4461
  fromWs = true,
4459
4462
  isTriggeredByConnectedUser = false
4460
4463
  }) => {
4461
- if (!watch || !isTriggeredByConnectedUser) {
4464
+ if (!watch || !isTriggeredByConnectedUser || !stateUpdateQueueId) {
4462
4465
  return true;
4463
4466
  }
4464
4467
  const prefixedStateUpdateQueueId = fromWs ? `ws-${stateUpdateQueueId}` : `http-${stateUpdateQueueId}`;
@@ -4470,19 +4473,41 @@ const shouldUpdateState = ({
4470
4473
  stateUpdateQueue.add(prefixedStateUpdateQueueId);
4471
4474
  return true;
4472
4475
  };
4473
- function getStateUpdateQueueId(data, prefix) {
4474
- const toJoin = prefix ? [prefix] : [];
4475
- if (isFollowResponse(data)) {
4476
- return toJoin.concat([data.source_feed.feed, data.target_feed.feed]).join("-");
4477
- } else if (isReactionResponse(data)) {
4478
- return toJoin.concat([
4479
- data.activity.id ?? data.comment.id,
4480
- data.reaction.type
4481
- ]).join("-");
4482
- }
4483
- throw new Error(
4484
- `Cannot create state update queueId for data: ${JSON.stringify(data)}`
4485
- );
4476
+ function getStateUpdateQueueId(...args) {
4477
+ const [data, prefix] = args;
4478
+ const toJoin = [prefix];
4479
+ switch (prefix) {
4480
+ case "activity-updated": {
4481
+ return toJoin.concat([data.activity.id]).join("-");
4482
+ }
4483
+ case "activity-reaction-created":
4484
+ case "activity-reaction-deleted": {
4485
+ return toJoin.concat([
4486
+ data.activity.id,
4487
+ data.reaction.type
4488
+ ]).join("-");
4489
+ }
4490
+ case "comment-reaction-created":
4491
+ case "comment-reaction-deleted": {
4492
+ return toJoin.concat([
4493
+ data.comment.id,
4494
+ data.reaction.type
4495
+ ]).join("-");
4496
+ }
4497
+ case "comment-created":
4498
+ case "comment-deleted":
4499
+ case "comment-updated": {
4500
+ return toJoin.concat([data.comment.id]).join("-");
4501
+ }
4502
+ case "follow-created":
4503
+ case "follow-deleted":
4504
+ case "follow-updated": {
4505
+ return toJoin.concat([data.source_feed.feed, data.target_feed.feed]).join("-");
4506
+ }
4507
+ default: {
4508
+ ensureExhausted(data, "Encountered unknown state update queue prefix.");
4509
+ }
4510
+ }
4486
4511
  }
4487
4512
  function updateEntityInArray({
4488
4513
  matcher,
@@ -4598,7 +4623,7 @@ const updateStateFollowDeleted = (follow, currentState, currentFeedId, connected
4598
4623
  function handleFollowDeleted(eventOrResponse, fromWs) {
4599
4624
  const follow = eventOrResponse.follow;
4600
4625
  if (!shouldUpdateState({
4601
- stateUpdateQueueId: getStateUpdateQueueId(follow, "deleted"),
4626
+ stateUpdateQueueId: getStateUpdateQueueId(follow, "follow-deleted"),
4602
4627
  stateUpdateQueue: this.stateUpdateQueue,
4603
4628
  watch: this.currentState.watch,
4604
4629
  fromWs,
@@ -4675,9 +4700,23 @@ function handleFollowUpdated(eventOrResponse, fromWs) {
4675
4700
  return newState ?? currentState;
4676
4701
  });
4677
4702
  }
4678
- function handleCommentAdded(event) {
4679
- const { comment } = event;
4703
+ function eventTriggeredByConnectedUser(payload) {
4704
+ const connectedUser = this.client.state.getLatestValue().connected_user;
4705
+ const payloadUser = payload.user ?? connectedUser;
4706
+ return typeof connectedUser !== "undefined" && connectedUser?.id === payloadUser?.id;
4707
+ }
4708
+ function handleCommentAdded(payload, fromWs) {
4709
+ const { comment } = payload;
4680
4710
  const entityId = comment.parent_id ?? comment.object_id;
4711
+ if (!shouldUpdateState({
4712
+ stateUpdateQueueId: getStateUpdateQueueId(payload, "comment-created"),
4713
+ stateUpdateQueue: this.stateUpdateQueue,
4714
+ watch: this.currentState.watch,
4715
+ fromWs,
4716
+ isTriggeredByConnectedUser: eventTriggeredByConnectedUser.call(this, payload)
4717
+ })) {
4718
+ return;
4719
+ }
4681
4720
  this.state.next((currentState) => {
4682
4721
  const entityState = currentState.comments_by_entity_id[entityId];
4683
4722
  if (typeof entityState?.comments === "undefined") {
@@ -4701,8 +4740,21 @@ function handleCommentAdded(event) {
4701
4740
  };
4702
4741
  });
4703
4742
  }
4704
- function handleCommentDeleted({ comment }) {
4743
+ function handleCommentDeleted(payload, fromWs) {
4744
+ const { comment } = payload;
4705
4745
  const entityId = comment.parent_id ?? comment.object_id;
4746
+ if (!shouldUpdateState({
4747
+ stateUpdateQueueId: getStateUpdateQueueId(
4748
+ payload,
4749
+ "comment-deleted"
4750
+ ),
4751
+ stateUpdateQueue: this.stateUpdateQueue,
4752
+ watch: this.currentState.watch,
4753
+ fromWs,
4754
+ isTriggeredByConnectedUser: eventTriggeredByConnectedUser.call(this, payload)
4755
+ })) {
4756
+ return;
4757
+ }
4706
4758
  this.state.next((currentState) => {
4707
4759
  let newCommentsByEntityId;
4708
4760
  const index = this.getCommentIndex(comment, currentState);
@@ -4733,9 +4785,21 @@ function handleCommentDeleted({ comment }) {
4733
4785
  };
4734
4786
  });
4735
4787
  }
4736
- function handleCommentUpdated(event) {
4737
- const { comment } = event;
4788
+ function handleCommentUpdated(payload, fromWs) {
4789
+ const { comment } = payload;
4738
4790
  const entityId = comment.parent_id ?? comment.object_id;
4791
+ if (!shouldUpdateState({
4792
+ stateUpdateQueueId: getStateUpdateQueueId(
4793
+ payload,
4794
+ "comment-updated"
4795
+ ),
4796
+ stateUpdateQueue: this.stateUpdateQueue,
4797
+ watch: this.currentState.watch,
4798
+ fromWs,
4799
+ isTriggeredByConnectedUser: eventTriggeredByConnectedUser.call(this, payload)
4800
+ })) {
4801
+ return;
4802
+ }
4739
4803
  this.state.next((currentState) => {
4740
4804
  const entityState = currentState.comments_by_entity_id[entityId];
4741
4805
  if (!entityState?.comments?.length) return currentState;
@@ -4755,36 +4819,88 @@ function handleCommentUpdated(event) {
4755
4819
  };
4756
4820
  });
4757
4821
  }
4758
- function handleCommentReaction(event) {
4759
- const { comment, reaction } = event;
4822
+ function handleCommentReactionAdded(payload, fromWs) {
4823
+ const { comment, reaction } = payload;
4760
4824
  const connectedUser = this.client.state.getLatestValue().connected_user;
4825
+ const isOwnReaction = reaction.user.id === connectedUser?.id;
4826
+ if (!shouldUpdateState({
4827
+ stateUpdateQueueId: getStateUpdateQueueId(
4828
+ payload,
4829
+ "comment-reaction-created"
4830
+ ),
4831
+ stateUpdateQueue: this.stateUpdateQueue,
4832
+ watch: this.currentState.watch,
4833
+ fromWs,
4834
+ isTriggeredByConnectedUser: isOwnReaction
4835
+ })) {
4836
+ return;
4837
+ }
4761
4838
  this.state.next((currentState) => {
4762
- const forId = comment.parent_id ?? comment.object_id;
4763
- const entityState = currentState.comments_by_entity_id[forId];
4764
4839
  const commentIndex = this.getCommentIndex(comment, currentState);
4765
4840
  if (commentIndex === -1) return currentState;
4841
+ const forId = comment.parent_id ?? comment.object_id;
4842
+ const entityState = currentState.comments_by_entity_id[forId];
4766
4843
  const newComments = entityState?.comments?.concat([]) ?? [];
4767
- const commentCopy = { ...comment };
4768
- delete commentCopy.own_reactions;
4769
- const newComment = {
4844
+ let ownReactions = newComments[commentIndex].own_reactions;
4845
+ if (isOwnReaction) {
4846
+ ownReactions = ownReactions.concat(reaction) ?? [reaction];
4847
+ }
4848
+ newComments[commentIndex] = {
4770
4849
  ...newComments[commentIndex],
4771
- ...commentCopy,
4850
+ reaction_count: comment.reaction_count ?? 0,
4772
4851
  // TODO: FIXME this should be handled by the backend
4773
- latest_reactions: commentCopy.latest_reactions ?? [],
4774
- reaction_groups: commentCopy.reaction_groups ?? {}
4775
- };
4776
- newComments[commentIndex] = newComment;
4777
- if (reaction.user.id === connectedUser?.id) {
4778
- if (event.type === "feeds.comment.reaction.added") {
4779
- newComment.own_reactions = newComment.own_reactions.concat(
4780
- reaction
4781
- ) ?? [reaction];
4782
- } else if (event.type === "feeds.comment.reaction.deleted") {
4783
- newComment.own_reactions = newComment.own_reactions.filter(
4784
- (r) => r.type !== reaction.type
4785
- );
4852
+ latest_reactions: comment.latest_reactions ?? [],
4853
+ reaction_groups: comment.reaction_groups ?? {},
4854
+ own_reactions: ownReactions
4855
+ };
4856
+ return {
4857
+ ...currentState,
4858
+ comments_by_entity_id: {
4859
+ ...currentState.comments_by_entity_id,
4860
+ [forId]: {
4861
+ ...entityState,
4862
+ comments: newComments
4863
+ }
4786
4864
  }
4865
+ };
4866
+ });
4867
+ }
4868
+ function handleCommentReactionDeleted(payload, fromWs) {
4869
+ const { comment, reaction } = payload;
4870
+ const connectedUser = this.client.state.getLatestValue().connected_user;
4871
+ const isOwnReaction = reaction.user.id === connectedUser?.id;
4872
+ if (!shouldUpdateState({
4873
+ stateUpdateQueueId: getStateUpdateQueueId(
4874
+ payload,
4875
+ "comment-reaction-deleted"
4876
+ ),
4877
+ stateUpdateQueue: this.stateUpdateQueue,
4878
+ watch: this.currentState.watch,
4879
+ fromWs,
4880
+ isTriggeredByConnectedUser: isOwnReaction
4881
+ })) {
4882
+ return;
4883
+ }
4884
+ this.state.next((currentState) => {
4885
+ const commentIndex = this.getCommentIndex(comment, currentState);
4886
+ if (commentIndex === -1) return currentState;
4887
+ const forId = comment.parent_id ?? comment.object_id;
4888
+ const entityState = currentState.comments_by_entity_id[forId];
4889
+ const newComments = entityState?.comments?.concat([]) ?? [];
4890
+ let ownReactions = newComments[commentIndex].own_reactions;
4891
+ if (isOwnReaction) {
4892
+ ownReactions = ownReactions.filter(
4893
+ (r) => r.type !== reaction.type
4894
+ );
4787
4895
  }
4896
+ newComments[commentIndex] = {
4897
+ ...newComments[commentIndex],
4898
+ reaction_count: comment.reaction_count ?? 0,
4899
+ // TODO: FIXME this should be handled by the backend
4900
+ latest_reactions: comment.latest_reactions ?? [],
4901
+ reaction_groups: comment.reaction_groups ?? {},
4902
+ own_reactions: ownReactions
4903
+ };
4788
4904
  return {
4789
4905
  ...currentState,
4790
4906
  comments_by_entity_id: {
@@ -5201,19 +5317,31 @@ const updatePinnedActivityInState = (event, pinnedActivities) => updateEntityInA
5201
5317
  };
5202
5318
  }
5203
5319
  });
5204
- function handleActivityUpdated(event) {
5320
+ function handleActivityUpdated(payload, fromWs) {
5321
+ if (!shouldUpdateState({
5322
+ stateUpdateQueueId: getStateUpdateQueueId(payload, "activity-updated"),
5323
+ stateUpdateQueue: this.stateUpdateQueue,
5324
+ watch: this.currentState.watch,
5325
+ fromWs,
5326
+ isTriggeredByConnectedUser: eventTriggeredByConnectedUser.call(
5327
+ this,
5328
+ payload
5329
+ )
5330
+ })) {
5331
+ return;
5332
+ }
5205
5333
  const {
5206
5334
  activities: currentActivities,
5207
5335
  pinned_activities: currentPinnedActivities
5208
5336
  } = this.currentState;
5209
5337
  const [result1, result2] = [
5210
- updateActivityInState(event, currentActivities),
5211
- updatePinnedActivityInState(event, currentPinnedActivities)
5338
+ this.hasActivity(payload.activity.id) ? updateActivityInState(payload, currentActivities) : void 0,
5339
+ updatePinnedActivityInState(payload, currentPinnedActivities)
5212
5340
  ];
5213
- if (result1.changed || result2.changed) {
5214
- this.client.hydratePollCache([event.activity]);
5341
+ if (result1?.changed || result2.changed) {
5342
+ this.client.hydratePollCache([payload.activity]);
5215
5343
  this.state.partialNext({
5216
- activities: result1.entities,
5344
+ activities: result1?.changed ? result1.entities : currentActivities,
5217
5345
  pinned_activities: result2.entities
5218
5346
  });
5219
5347
  }
@@ -5497,8 +5625,8 @@ const _Feed = class _Feed extends FeedApi {
5497
5625
  "feeds.follow.created": handleFollowCreated.bind(this),
5498
5626
  "feeds.follow.deleted": handleFollowDeleted.bind(this),
5499
5627
  "feeds.follow.updated": handleFollowUpdated.bind(this),
5500
- "feeds.comment.reaction.added": handleCommentReaction.bind(this),
5501
- "feeds.comment.reaction.deleted": handleCommentReaction.bind(this),
5628
+ "feeds.comment.reaction.added": handleCommentReactionAdded.bind(this),
5629
+ "feeds.comment.reaction.deleted": handleCommentReactionDeleted.bind(this),
5502
5630
  "feeds.comment.reaction.updated": _Feed.noop,
5503
5631
  "feeds.feed_member.added": handleFeedMemberAdded.bind(this),
5504
5632
  "feeds.feed_member.removed": handleFeedMemberRemoved.bind(this),
@@ -6014,6 +6142,34 @@ var UnhandledErrorType = /* @__PURE__ */ ((UnhandledErrorType2) => {
6014
6142
  UnhandledErrorType2["ReconnectionReconciliation"] = "reconnection-reconciliation";
6015
6143
  return UnhandledErrorType2;
6016
6144
  })(UnhandledErrorType || {});
6145
+ function updateCommentCount({
6146
+ activity,
6147
+ comment,
6148
+ replyCountUpdater
6149
+ }) {
6150
+ const parentActivityId = comment.object_id;
6151
+ if (comment?.parent_id) {
6152
+ const grandparentCommentId = this.currentState.comments_by_entity_id[comment?.parent_id ?? ""]?.entity_parent_id;
6153
+ const idToUpdate = grandparentCommentId ?? parentActivityId;
6154
+ const commentToUpdate = this.currentState.comments_by_entity_id[idToUpdate]?.comments?.find((c) => c.id === comment.parent_id);
6155
+ if (commentToUpdate) {
6156
+ handleCommentUpdated.bind(this)(
6157
+ {
6158
+ comment: {
6159
+ ...commentToUpdate,
6160
+ reply_count: replyCountUpdater(commentToUpdate.reply_count)
6161
+ }
6162
+ },
6163
+ false
6164
+ );
6165
+ }
6166
+ }
6167
+ if (this.hasActivity(activity.id)) {
6168
+ handleActivityUpdated.bind(this)({
6169
+ activity
6170
+ }, false);
6171
+ }
6172
+ }
6017
6173
  class FeedsClient extends FeedsApi {
6018
6174
  constructor(apiKey, options) {
6019
6175
  const tokenManager = new TokenManager();
@@ -6101,6 +6257,57 @@ class FeedsClient extends FeedsApi {
6101
6257
  upload_sizes: JSON.stringify(request.upload_sizes)
6102
6258
  });
6103
6259
  };
6260
+ this.updateActivity = async (request) => {
6261
+ const response = await super.updateActivity(request);
6262
+ for (const feed of Object.values(this.activeFeeds)) {
6263
+ handleActivityUpdated.bind(feed)(response, false);
6264
+ }
6265
+ return response;
6266
+ };
6267
+ this.addComment = async (request) => {
6268
+ const response = await super.addComment(request);
6269
+ const { comment } = response;
6270
+ for (const feed of Object.values(this.activeFeeds)) {
6271
+ handleCommentAdded.bind(feed)(response, false);
6272
+ const parentActivityId = comment.object_id;
6273
+ if (feed.hasActivity(parentActivityId)) {
6274
+ const activityToUpdate = feed.currentState.activities?.find(
6275
+ (activity) => activity.id === parentActivityId
6276
+ );
6277
+ if (activityToUpdate) {
6278
+ updateCommentCount.bind(feed)({
6279
+ activity: {
6280
+ ...activityToUpdate,
6281
+ comment_count: activityToUpdate.comment_count + 1
6282
+ },
6283
+ comment,
6284
+ replyCountUpdater: (prevCount) => prevCount + 1
6285
+ });
6286
+ }
6287
+ }
6288
+ }
6289
+ return response;
6290
+ };
6291
+ this.updateComment = async (request) => {
6292
+ const response = await super.updateComment(request);
6293
+ for (const feed of Object.values(this.activeFeeds)) {
6294
+ handleCommentUpdated.bind(feed)(response, false);
6295
+ }
6296
+ return response;
6297
+ };
6298
+ this.deleteComment = async (request) => {
6299
+ const response = await super.deleteComment(request);
6300
+ const { activity, comment } = response;
6301
+ for (const feed of Object.values(this.activeFeeds)) {
6302
+ handleCommentDeleted.bind(feed)({ comment }, false);
6303
+ updateCommentCount.bind(feed)({
6304
+ activity,
6305
+ comment,
6306
+ replyCountUpdater: (prevCount) => prevCount - 1
6307
+ });
6308
+ }
6309
+ return response;
6310
+ };
6104
6311
  this.addReaction = async (request) => {
6105
6312
  const response = await super.addReaction(request);
6106
6313
  for (const feed of Object.values(this.activeFeeds)) {
@@ -6115,6 +6322,20 @@ class FeedsClient extends FeedsApi {
6115
6322
  }
6116
6323
  return response;
6117
6324
  };
6325
+ this.addCommentReaction = async (request) => {
6326
+ const response = await super.addCommentReaction(request);
6327
+ for (const feed of Object.values(this.activeFeeds)) {
6328
+ handleCommentReactionAdded.bind(feed)(response, false);
6329
+ }
6330
+ return response;
6331
+ };
6332
+ this.deleteCommentReaction = async (request) => {
6333
+ const response = await super.deleteCommentReaction(request);
6334
+ for (const feed of Object.values(this.activeFeeds)) {
6335
+ handleCommentReactionDeleted.bind(feed)(response, false);
6336
+ }
6337
+ return response;
6338
+ };
6118
6339
  this.queryPollAnswers = async (request) => {
6119
6340
  const filter = request.filter ?? {};
6120
6341
  const queryPollAnswersFilter = {
@@ -6470,7 +6691,8 @@ export {
6470
6691
  updateEntityInArray as n,
6471
6692
  configureLoggers as o,
6472
6693
  getLogger as p,
6694
+ ensureExhausted as q,
6473
6695
  shouldUpdateState as s,
6474
6696
  uniqueArrayMerge as u
6475
6697
  };
6476
- //# sourceMappingURL=index-DLC5hiNd.mjs.map
6698
+ //# sourceMappingURL=index-EeFSq3sq.mjs.map