@stream-io/feeds-client 0.3.47 → 0.3.49

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 (49) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/cjs/index.js +1 -1
  3. package/dist/cjs/index.js.map +1 -1
  4. package/dist/cjs/react-bindings.js +1 -1
  5. package/dist/es/index.mjs +2 -2
  6. package/dist/es/index.mjs.map +1 -1
  7. package/dist/es/react-bindings.mjs +1 -1
  8. package/dist/{feeds-client-ykIZW9Hi.mjs → feeds-client-B9b7zUcW.mjs} +182 -196
  9. package/dist/feeds-client-B9b7zUcW.mjs.map +1 -0
  10. package/dist/{feeds-client-CxjZlEtX.js → feeds-client-BDvUG9yF.js} +182 -196
  11. package/dist/feeds-client-BDvUG9yF.js.map +1 -0
  12. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  13. package/dist/types/common/Poll.d.ts +15 -6
  14. package/dist/types/common/Poll.d.ts.map +1 -1
  15. package/dist/types/common/real-time/StableWSConnection.d.ts +3 -3
  16. package/dist/types/common/real-time/StableWSConnection.d.ts.map +1 -1
  17. package/dist/types/feed/event-handlers/activity-updater.d.ts +1 -1
  18. package/dist/types/feed/event-handlers/comment/handle-comment-added.d.ts.map +1 -1
  19. package/dist/types/feed/feed.d.ts +2 -2
  20. package/dist/types/feed/feed.d.ts.map +1 -1
  21. package/dist/types/feeds-client/feeds-client.d.ts +17 -3
  22. package/dist/types/feeds-client/feeds-client.d.ts.map +1 -1
  23. package/dist/types/gen/feeds/FeedApi.d.ts +2 -1
  24. package/dist/types/gen/feeds/FeedApi.d.ts.map +1 -1
  25. package/dist/types/gen/feeds/FeedsApi.d.ts +5 -1
  26. package/dist/types/gen/feeds/FeedsApi.d.ts.map +1 -1
  27. package/dist/types/gen/model-decoders/event-decoder-mapping.d.ts.map +1 -1
  28. package/dist/types/gen/models/index.d.ts +209 -422
  29. package/dist/types/gen/models/index.d.ts.map +1 -1
  30. package/dist/types/gen/moderation/ModerationApi.d.ts.map +1 -1
  31. package/dist/types/types.d.ts +2 -2
  32. package/dist/types/types.d.ts.map +1 -1
  33. package/dist/types/utils/constants.d.ts +1 -1
  34. package/package.json +1 -1
  35. package/src/common/Poll.ts +59 -40
  36. package/src/feed/event-handlers/comment/handle-comment-added.ts +14 -2
  37. package/src/feed/feed.ts +24 -9
  38. package/src/feeds-client/feeds-client.ts +70 -1
  39. package/src/gen/feeds/FeedApi.ts +12 -0
  40. package/src/gen/feeds/FeedsApi.ts +37 -0
  41. package/src/gen/model-decoders/decoders.ts +47 -251
  42. package/src/gen/model-decoders/event-decoder-mapping.ts +3 -2
  43. package/src/gen/models/index.ts +314 -723
  44. package/src/gen/moderation/ModerationApi.ts +1 -0
  45. package/src/test-utils/response-generators.ts +3 -2
  46. package/src/types.ts +2 -2
  47. package/src/utils/constants.ts +1 -1
  48. package/dist/feeds-client-CxjZlEtX.js.map +0 -1
  49. package/dist/feeds-client-ykIZW9Hi.mjs.map +0 -1
@@ -155,7 +155,7 @@ decoders.ActivityResponse = (input) => {
155
155
  own_bookmarks: { type: "BookmarkResponse", isSingle: false },
156
156
  own_reactions: { type: "FeedsReactionResponse", isSingle: false },
157
157
  collections: { type: "EnrichedCollectionResponse", isSingle: false },
158
- reaction_groups: { type: "ReactionGroupResponse", isSingle: false },
158
+ reaction_groups: { type: "FeedsReactionGroupResponse", isSingle: false },
159
159
  user: { type: "UserResponse", isSingle: true },
160
160
  deleted_at: { type: "DatetimeType", isSingle: true },
161
161
  edited_at: { type: "DatetimeType", isSingle: true },
@@ -252,13 +252,12 @@ decoders.AppealItemResponse = (input) => {
252
252
  };
253
253
  return decode(typeMappings, input);
254
254
  };
255
- decoders.Ban = (input) => {
255
+ decoders.BanInfoResponse = (input) => {
256
256
  const typeMappings = {
257
257
  created_at: { type: "DatetimeType", isSingle: true },
258
258
  expires: { type: "DatetimeType", isSingle: true },
259
- channel: { type: "Channel", isSingle: true },
260
- created_by: { type: "User", isSingle: true },
261
- target: { type: "User", isSingle: true }
259
+ created_by: { type: "UserResponse", isSingle: true },
260
+ user: { type: "UserResponse", isSingle: true }
262
261
  };
263
262
  return decode(typeMappings, input);
264
263
  };
@@ -373,30 +372,6 @@ decoders.CallSessionResponse = (input) => {
373
372
  };
374
373
  return decode(typeMappings, input);
375
374
  };
376
- decoders.Channel = (input) => {
377
- const typeMappings = {
378
- created_at: { type: "DatetimeType", isSingle: true },
379
- updated_at: { type: "DatetimeType", isSingle: true },
380
- deleted_at: { type: "DatetimeType", isSingle: true },
381
- last_message_at: { type: "DatetimeType", isSingle: true },
382
- message_count_updated_at: { type: "DatetimeType", isSingle: true },
383
- active_live_locations: { type: "SharedLocation", isSingle: false },
384
- invites: { type: "ChannelMember", isSingle: false },
385
- members: { type: "ChannelMember", isSingle: false },
386
- config: { type: "ChannelConfig", isSingle: true },
387
- created_by: { type: "User", isSingle: true },
388
- members_lookup: { type: "ChannelMemberLookup", isSingle: false },
389
- truncated_by: { type: "User", isSingle: true }
390
- };
391
- return decode(typeMappings, input);
392
- };
393
- decoders.ChannelConfig = (input) => {
394
- const typeMappings = {
395
- created_at: { type: "DatetimeType", isSingle: true },
396
- updated_at: { type: "DatetimeType", isSingle: true }
397
- };
398
- return decode(typeMappings, input);
399
- };
400
375
  decoders.ChannelConfigWithInfo = (input) => {
401
376
  const typeMappings = {
402
377
  created_at: { type: "DatetimeType", isSingle: true },
@@ -405,28 +380,6 @@ decoders.ChannelConfigWithInfo = (input) => {
405
380
  };
406
381
  return decode(typeMappings, input);
407
382
  };
408
- decoders.ChannelMember = (input) => {
409
- const typeMappings = {
410
- created_at: { type: "DatetimeType", isSingle: true },
411
- updated_at: { type: "DatetimeType", isSingle: true },
412
- archived_at: { type: "DatetimeType", isSingle: true },
413
- ban_expires: { type: "DatetimeType", isSingle: true },
414
- deleted_at: { type: "DatetimeType", isSingle: true },
415
- invite_accepted_at: { type: "DatetimeType", isSingle: true },
416
- invite_rejected_at: { type: "DatetimeType", isSingle: true },
417
- pinned_at: { type: "DatetimeType", isSingle: true },
418
- user: { type: "User", isSingle: true }
419
- };
420
- return decode(typeMappings, input);
421
- };
422
- decoders.ChannelMemberLookup = (input) => {
423
- const typeMappings = {
424
- archived_at: { type: "DatetimeType", isSingle: true },
425
- ban_expires: { type: "DatetimeType", isSingle: true },
426
- pinned_at: { type: "DatetimeType", isSingle: true }
427
- };
428
- return decode(typeMappings, input);
429
- };
430
383
  decoders.ChannelMemberResponse = (input) => {
431
384
  const typeMappings = {
432
385
  created_at: { type: "DatetimeType", isSingle: true },
@@ -537,7 +490,7 @@ decoders.CommentResponse = (input) => {
537
490
  deleted_at: { type: "DatetimeType", isSingle: true },
538
491
  edited_at: { type: "DatetimeType", isSingle: true },
539
492
  latest_reactions: { type: "FeedsReactionResponse", isSingle: false },
540
- reaction_groups: { type: "ReactionGroupResponse", isSingle: false }
493
+ reaction_groups: { type: "FeedsReactionGroupResponse", isSingle: false }
541
494
  };
542
495
  return decode(typeMappings, input);
543
496
  };
@@ -607,12 +560,6 @@ decoders.DeleteCommentResponse = (input) => {
607
560
  };
608
561
  return decode(typeMappings, input);
609
562
  };
610
- decoders.Device = (input) => {
611
- const typeMappings = {
612
- created_at: { type: "DatetimeType", isSingle: true }
613
- };
614
- return decode(typeMappings, input);
615
- };
616
563
  decoders.DeviceResponse = (input) => {
617
564
  const typeMappings = {
618
565
  created_at: { type: "DatetimeType", isSingle: true }
@@ -763,6 +710,13 @@ decoders.FeedUpdatedEvent = (input) => {
763
710
  };
764
711
  return decode(typeMappings, input);
765
712
  };
713
+ decoders.FeedsReactionGroupResponse = (input) => {
714
+ const typeMappings = {
715
+ first_reaction_at: { type: "DatetimeType", isSingle: true },
716
+ last_reaction_at: { type: "DatetimeType", isSingle: true }
717
+ };
718
+ return decode(typeMappings, input);
719
+ };
766
720
  decoders.FeedsReactionResponse = (input) => {
767
721
  const typeMappings = {
768
722
  created_at: { type: "DatetimeType", isSingle: true },
@@ -895,7 +849,8 @@ decoders.GetOrCreateFeedResponse = (input) => {
895
849
  decoders.HealthCheckEvent = (input) => {
896
850
  const typeMappings = {
897
851
  created_at: { type: "DatetimeType", isSingle: true },
898
- received_at: { type: "DatetimeType", isSingle: true }
852
+ received_at: { type: "DatetimeType", isSingle: true },
853
+ me: { type: "OwnUserResponse", isSingle: true }
899
854
  };
900
855
  return decode(typeMappings, input);
901
856
  };
@@ -918,40 +873,6 @@ decoders.MembershipLevelResponse = (input) => {
918
873
  };
919
874
  return decode(typeMappings, input);
920
875
  };
921
- decoders.Message = (input) => {
922
- const typeMappings = {
923
- created_at: { type: "DatetimeType", isSingle: true },
924
- updated_at: { type: "DatetimeType", isSingle: true },
925
- latest_reactions: { type: "Reaction", isSingle: false },
926
- mentioned_users: { type: "User", isSingle: false },
927
- own_reactions: { type: "Reaction", isSingle: false },
928
- reaction_groups: { type: "ReactionGroupResponse", isSingle: false },
929
- deleted_at: { type: "DatetimeType", isSingle: true },
930
- message_text_updated_at: { type: "DatetimeType", isSingle: true },
931
- pin_expires: { type: "DatetimeType", isSingle: true },
932
- pinned_at: { type: "DatetimeType", isSingle: true },
933
- thread_participants: { type: "User", isSingle: false },
934
- member: { type: "ChannelMember", isSingle: true },
935
- pinned_by: { type: "User", isSingle: true },
936
- poll: { type: "Poll", isSingle: true },
937
- quoted_message: { type: "Message", isSingle: true },
938
- reminder: { type: "MessageReminder", isSingle: true },
939
- shared_location: { type: "SharedLocation", isSingle: true },
940
- user: { type: "User", isSingle: true }
941
- };
942
- return decode(typeMappings, input);
943
- };
944
- decoders.MessageReminder = (input) => {
945
- const typeMappings = {
946
- created_at: { type: "DatetimeType", isSingle: true },
947
- updated_at: { type: "DatetimeType", isSingle: true },
948
- remind_at: { type: "DatetimeType", isSingle: true },
949
- channel: { type: "Channel", isSingle: true },
950
- message: { type: "Message", isSingle: true },
951
- user: { type: "User", isSingle: true }
952
- };
953
- return decode(typeMappings, input);
954
- };
955
876
  decoders.MessageResponse = (input) => {
956
877
  const typeMappings = {
957
878
  created_at: { type: "DatetimeType", isSingle: true },
@@ -997,7 +918,7 @@ decoders.ModerationFlagResponse = (input) => {
997
918
  decoders.ModerationFlaggedEvent = (input) => {
998
919
  const typeMappings = {
999
920
  created_at: { type: "DatetimeType", isSingle: true },
1000
- user: { type: "User", isSingle: true }
921
+ received_at: { type: "DatetimeType", isSingle: true }
1001
922
  };
1002
923
  return decode(typeMappings, input);
1003
924
  };
@@ -1012,8 +933,8 @@ decoders.ModerationMarkReviewedEvent = (input) => {
1012
933
  };
1013
934
  decoders.MuteResponse = (input) => {
1014
935
  const typeMappings = {
1015
- mutes: { type: "UserMute", isSingle: false },
1016
- own_user: { type: "OwnUser", isSingle: true }
936
+ mutes: { type: "UserMuteResponse", isSingle: false },
937
+ own_user: { type: "OwnUserResponse", isSingle: true }
1017
938
  };
1018
939
  return decode(typeMappings, input);
1019
940
  };
@@ -1042,18 +963,18 @@ decoders.OwnBatchResponse = (input) => {
1042
963
  };
1043
964
  return decode(typeMappings, input);
1044
965
  };
1045
- decoders.OwnUser = (input) => {
966
+ decoders.OwnUserResponse = (input) => {
1046
967
  const typeMappings = {
1047
968
  created_at: { type: "DatetimeType", isSingle: true },
1048
969
  updated_at: { type: "DatetimeType", isSingle: true },
1049
970
  channel_mutes: { type: "ChannelMute", isSingle: false },
1050
- devices: { type: "Device", isSingle: false },
1051
- mutes: { type: "UserMute", isSingle: false },
971
+ devices: { type: "DeviceResponse", isSingle: false },
972
+ mutes: { type: "UserMuteResponse", isSingle: false },
1052
973
  deactivated_at: { type: "DatetimeType", isSingle: true },
1053
974
  deleted_at: { type: "DatetimeType", isSingle: true },
1054
975
  last_active: { type: "DatetimeType", isSingle: true },
1055
- last_engaged_at: { type: "DatetimeType", isSingle: true },
1056
- push_preferences: { type: "PushPreferences", isSingle: true }
976
+ revoke_tokens_issued_before: { type: "DatetimeType", isSingle: true },
977
+ push_preferences: { type: "PushPreferencesResponse", isSingle: true }
1057
978
  };
1058
979
  return decode(typeMappings, input);
1059
980
  };
@@ -1064,16 +985,6 @@ decoders.PinActivityResponse = (input) => {
1064
985
  };
1065
986
  return decode(typeMappings, input);
1066
987
  };
1067
- decoders.Poll = (input) => {
1068
- const typeMappings = {
1069
- created_at: { type: "DatetimeType", isSingle: true },
1070
- updated_at: { type: "DatetimeType", isSingle: true },
1071
- latest_answers: { type: "PollVote", isSingle: false },
1072
- own_votes: { type: "PollVote", isSingle: false },
1073
- created_by: { type: "User", isSingle: true }
1074
- };
1075
- return decode(typeMappings, input);
1076
- };
1077
988
  decoders.PollClosedFeedEvent = (input) => {
1078
989
  const typeMappings = {
1079
990
  created_at: { type: "DatetimeType", isSingle: true },
@@ -1114,14 +1025,6 @@ decoders.PollUpdatedFeedEvent = (input) => {
1114
1025
  };
1115
1026
  return decode(typeMappings, input);
1116
1027
  };
1117
- decoders.PollVote = (input) => {
1118
- const typeMappings = {
1119
- created_at: { type: "DatetimeType", isSingle: true },
1120
- updated_at: { type: "DatetimeType", isSingle: true },
1121
- user: { type: "User", isSingle: true }
1122
- };
1123
- return decode(typeMappings, input);
1124
- };
1125
1028
  decoders.PollVoteCastedFeedEvent = (input) => {
1126
1029
  const typeMappings = {
1127
1030
  created_at: { type: "DatetimeType", isSingle: true },
@@ -1170,7 +1073,7 @@ decoders.PollVotesResponse = (input) => {
1170
1073
  };
1171
1074
  return decode(typeMappings, input);
1172
1075
  };
1173
- decoders.PushPreferences = (input) => {
1076
+ decoders.PushPreferencesResponse = (input) => {
1174
1077
  const typeMappings = {
1175
1078
  disabled_until: { type: "DatetimeType", isSingle: true }
1176
1079
  };
@@ -1242,6 +1145,12 @@ decoders.QueryModerationConfigsResponse = (input) => {
1242
1145
  };
1243
1146
  return decode(typeMappings, input);
1244
1147
  };
1148
+ decoders.QueryPinnedActivitiesResponse = (input) => {
1149
+ const typeMappings = {
1150
+ pinned_activities: { type: "ActivityPinResponse", isSingle: false }
1151
+ };
1152
+ return decode(typeMappings, input);
1153
+ };
1245
1154
  decoders.QueryPollsResponse = (input) => {
1246
1155
  const typeMappings = {
1247
1156
  polls: { type: "PollResponseData", isSingle: false }
@@ -1258,8 +1167,7 @@ decoders.Reaction = (input) => {
1258
1167
  const typeMappings = {
1259
1168
  created_at: { type: "DatetimeType", isSingle: true },
1260
1169
  updated_at: { type: "DatetimeType", isSingle: true },
1261
- deleted_at: { type: "DatetimeType", isSingle: true },
1262
- user: { type: "User", isSingle: true }
1170
+ deleted_at: { type: "DatetimeType", isSingle: true }
1263
1171
  };
1264
1172
  return decode(typeMappings, input);
1265
1173
  };
@@ -1318,7 +1226,7 @@ decoders.ReviewQueueItemResponse = (input) => {
1318
1226
  created_at: { type: "DatetimeType", isSingle: true },
1319
1227
  updated_at: { type: "DatetimeType", isSingle: true },
1320
1228
  actions: { type: "ActionLogResponse", isSingle: false },
1321
- bans: { type: "Ban", isSingle: false },
1229
+ bans: { type: "BanInfoResponse", isSingle: false },
1322
1230
  flags: { type: "ModerationFlagResponse", isSingle: false },
1323
1231
  completed_at: { type: "DatetimeType", isSingle: true },
1324
1232
  reviewed_at: { type: "DatetimeType", isSingle: true },
@@ -1334,16 +1242,6 @@ decoders.ReviewQueueItemResponse = (input) => {
1334
1242
  };
1335
1243
  return decode(typeMappings, input);
1336
1244
  };
1337
- decoders.SharedLocation = (input) => {
1338
- const typeMappings = {
1339
- created_at: { type: "DatetimeType", isSingle: true },
1340
- updated_at: { type: "DatetimeType", isSingle: true },
1341
- end_at: { type: "DatetimeType", isSingle: true },
1342
- channel: { type: "Channel", isSingle: true },
1343
- message: { type: "Message", isSingle: true }
1344
- };
1345
- return decode(typeMappings, input);
1346
- };
1347
1245
  decoders.SharedLocationResponse = (input) => {
1348
1246
  const typeMappings = {
1349
1247
  created_at: { type: "DatetimeType", isSingle: true },
@@ -1409,7 +1307,7 @@ decoders.ThreadedCommentResponse = (input) => {
1409
1307
  edited_at: { type: "DatetimeType", isSingle: true },
1410
1308
  latest_reactions: { type: "FeedsReactionResponse", isSingle: false },
1411
1309
  replies: { type: "ThreadedCommentResponse", isSingle: false },
1412
- reaction_groups: { type: "ReactionGroupResponse", isSingle: false }
1310
+ reaction_groups: { type: "FeedsReactionGroupResponse", isSingle: false }
1413
1311
  };
1414
1312
  return decode(typeMappings, input);
1415
1313
  };
@@ -1512,47 +1410,22 @@ decoders.UpsertConfigResponse = (input) => {
1512
1410
  };
1513
1411
  decoders.UpsertPushPreferencesResponse = (input) => {
1514
1412
  const typeMappings = {
1515
- user_preferences: { type: "PushPreferences", isSingle: false }
1516
- };
1517
- return decode(typeMappings, input);
1518
- };
1519
- decoders.User = (input) => {
1520
- const typeMappings = {
1521
- ban_expires: { type: "DatetimeType", isSingle: true },
1522
- created_at: { type: "DatetimeType", isSingle: true },
1523
- deactivated_at: { type: "DatetimeType", isSingle: true },
1524
- deleted_at: { type: "DatetimeType", isSingle: true },
1525
- last_active: { type: "DatetimeType", isSingle: true },
1526
- last_engaged_at: { type: "DatetimeType", isSingle: true },
1527
- revoke_tokens_issued_before: { type: "DatetimeType", isSingle: true },
1528
- updated_at: { type: "DatetimeType", isSingle: true }
1413
+ user_preferences: { type: "PushPreferencesResponse", isSingle: false }
1529
1414
  };
1530
1415
  return decode(typeMappings, input);
1531
1416
  };
1532
1417
  decoders.UserBannedEvent = (input) => {
1533
1418
  const typeMappings = {
1534
1419
  created_at: { type: "DatetimeType", isSingle: true },
1535
- created_by: { type: "User", isSingle: true },
1536
1420
  expiration: { type: "DatetimeType", isSingle: true },
1537
- user: { type: "User", isSingle: true }
1421
+ received_at: { type: "DatetimeType", isSingle: true }
1538
1422
  };
1539
1423
  return decode(typeMappings, input);
1540
1424
  };
1541
1425
  decoders.UserDeactivatedEvent = (input) => {
1542
1426
  const typeMappings = {
1543
1427
  created_at: { type: "DatetimeType", isSingle: true },
1544
- created_by: { type: "User", isSingle: true },
1545
- user: { type: "User", isSingle: true }
1546
- };
1547
- return decode(typeMappings, input);
1548
- };
1549
- decoders.UserMute = (input) => {
1550
- const typeMappings = {
1551
- created_at: { type: "DatetimeType", isSingle: true },
1552
- updated_at: { type: "DatetimeType", isSingle: true },
1553
- expires: { type: "DatetimeType", isSingle: true },
1554
- target: { type: "User", isSingle: true },
1555
- user: { type: "User", isSingle: true }
1428
+ received_at: { type: "DatetimeType", isSingle: true }
1556
1429
  };
1557
1430
  return decode(typeMappings, input);
1558
1431
  };
@@ -1566,17 +1439,10 @@ decoders.UserMuteResponse = (input) => {
1566
1439
  };
1567
1440
  return decode(typeMappings, input);
1568
1441
  };
1569
- decoders.UserMutedEvent = (input) => {
1570
- const typeMappings = {
1571
- created_at: { type: "DatetimeType", isSingle: true },
1572
- user: { type: "User", isSingle: true }
1573
- };
1574
- return decode(typeMappings, input);
1575
- };
1576
1442
  decoders.UserReactivatedEvent = (input) => {
1577
1443
  const typeMappings = {
1578
1444
  created_at: { type: "DatetimeType", isSingle: true },
1579
- user: { type: "User", isSingle: true }
1445
+ received_at: { type: "DatetimeType", isSingle: true }
1580
1446
  };
1581
1447
  return decode(typeMappings, input);
1582
1448
  };
@@ -1591,6 +1457,13 @@ decoders.UserResponse = (input) => {
1591
1457
  };
1592
1458
  return decode(typeMappings, input);
1593
1459
  };
1460
+ decoders.UserUnbannedEvent = (input) => {
1461
+ const typeMappings = {
1462
+ created_at: { type: "DatetimeType", isSingle: true },
1463
+ received_at: { type: "DatetimeType", isSingle: true }
1464
+ };
1465
+ return decode(typeMappings, input);
1466
+ };
1594
1467
  decoders.UserUpdatedEvent = (input) => {
1595
1468
  const typeMappings = {
1596
1469
  created_at: { type: "DatetimeType", isSingle: true },
@@ -2035,7 +1908,8 @@ class FeedsApi {
2035
1908
  interest_tags: request?.interest_tags,
2036
1909
  mentioned_user_ids: request?.mentioned_user_ids,
2037
1910
  custom: request?.custom,
2038
- location: request?.location
1911
+ location: request?.location,
1912
+ search_data: request?.search_data
2039
1913
  };
2040
1914
  const response = await this.apiClient.sendRequest(
2041
1915
  "PUT",
@@ -2589,6 +2463,29 @@ class FeedsApi {
2589
2463
  decoders.RejectFeedMemberInviteResponse?.(response.body);
2590
2464
  return { ...response.body, metadata: response.metadata };
2591
2465
  }
2466
+ async queryPinnedActivities(request) {
2467
+ const pathParams = {
2468
+ feed_group_id: request?.feed_group_id,
2469
+ feed_id: request?.feed_id
2470
+ };
2471
+ const body = {
2472
+ limit: request?.limit,
2473
+ next: request?.next,
2474
+ prev: request?.prev,
2475
+ sort: request?.sort,
2476
+ filter: request?.filter
2477
+ };
2478
+ const response = await this.apiClient.sendRequest(
2479
+ "POST",
2480
+ "/api/v2/feeds/feed_groups/{feed_group_id}/feeds/{feed_id}/pinned_activities/query",
2481
+ pathParams,
2482
+ void 0,
2483
+ body,
2484
+ "application/json"
2485
+ );
2486
+ decoders.QueryPinnedActivitiesResponse?.(response.body);
2487
+ return { ...response.body, metadata: response.metadata };
2488
+ }
2592
2489
  async stopWatchingFeed(request) {
2593
2490
  const queryParams = {
2594
2491
  connection_id: request?.connection_id
@@ -4028,7 +3925,7 @@ const getRateLimitFromResponseHeader = (response_headers) => {
4028
3925
  };
4029
3926
  return result;
4030
3927
  };
4031
- const version = "0.3.47";
3928
+ const version = "0.3.49";
4032
3929
  const axios = axiosImport.default ?? axiosImport;
4033
3930
  class ApiClient {
4034
3931
  constructor(apiKey, tokenManager, connectionIdManager, options) {
@@ -4251,8 +4148,8 @@ const eventDecoderMapping = {
4251
4148
  "moderation.mark_reviewed": (data) => decoders.ModerationMarkReviewedEvent(data),
4252
4149
  "user.banned": (data) => decoders.UserBannedEvent(data),
4253
4150
  "user.deactivated": (data) => decoders.UserDeactivatedEvent(data),
4254
- "user.muted": (data) => decoders.UserMutedEvent(data),
4255
4151
  "user.reactivated": (data) => decoders.UserReactivatedEvent(data),
4152
+ "user.unbanned": (data) => decoders.UserUnbannedEvent(data),
4256
4153
  "user.updated": (data) => decoders.UserUpdatedEvent(data)
4257
4154
  };
4258
4155
  const decodeWSEvent = (data) => {
@@ -4478,6 +4375,7 @@ class ModerationApi {
4478
4375
  delete_message: request?.delete_message,
4479
4376
  delete_reaction: request?.delete_reaction,
4480
4377
  delete_user: request?.delete_user,
4378
+ flag: request?.flag,
4481
4379
  mark_reviewed: request?.mark_reviewed,
4482
4380
  reject_appeal: request?.reject_appeal,
4483
4381
  restore: request?.restore,
@@ -4499,11 +4397,6 @@ class ModerationApi {
4499
4397
  }
4500
4398
  class ModerationClient extends ModerationApi {
4501
4399
  }
4502
- const isPollUpdatedEvent = (e) => e.type === "feeds.poll.updated";
4503
- const isPollClosedEventEvent = (e) => e.type === "feeds.poll.closed";
4504
- const isPollVoteCastedEvent = (e) => e.type === "feeds.poll.vote_casted";
4505
- const isPollVoteChangedEvent = (e) => e.type === "feeds.poll.vote_changed";
4506
- const isPollVoteRemovedEvent = (e) => e.type === "feeds.poll.vote_removed";
4507
4400
  const isVoteAnswer = (vote) => !!vote?.answer_text;
4508
4401
  class StreamPoll {
4509
4402
  constructor({ client, poll }) {
@@ -4535,7 +4428,10 @@ class StreamPoll {
4535
4428
  };
4536
4429
  this.handlePollUpdated = (event) => {
4537
4430
  if (event.poll?.id && event.poll.id !== this.id) return;
4538
- if (!isPollUpdatedEvent(event)) return;
4431
+ const currentState = this.data;
4432
+ if (currentState.updated_at && event.poll.updated_at && event.poll.updated_at <= currentState.updated_at) {
4433
+ return;
4434
+ }
4539
4435
  const { id, ...pollData } = event.poll;
4540
4436
  this.state.partialNext({
4541
4437
  ...pollData,
@@ -4544,7 +4440,8 @@ class StreamPoll {
4544
4440
  };
4545
4441
  this.handlePollClosed = (event) => {
4546
4442
  if (event.poll?.id && event.poll.id !== this.id) return;
4547
- if (!isPollClosedEventEvent(event)) return;
4443
+ const currentState = this.data;
4444
+ if (currentState.is_closed) return;
4548
4445
  this.state.partialNext({
4549
4446
  is_closed: true,
4550
4447
  last_activity_at: new Date(event.created_at)
@@ -4552,9 +4449,12 @@ class StreamPoll {
4552
4449
  };
4553
4450
  this.handleVoteCasted = (event) => {
4554
4451
  if (event.poll?.id && event.poll.id !== this.id) return;
4555
- if (!isPollVoteCastedEvent(event)) return;
4556
4452
  const currentState = this.data;
4557
4453
  const isOwnVote = event.poll_vote.user_id === this.client.state.getLatestValue().connected_user?.id;
4454
+ if (isOwnVote) {
4455
+ const alreadyApplied = isVoteAnswer(event.poll_vote) ? currentState.own_answer?.id === event.poll_vote.id : !!event.poll_vote.option_id && currentState.own_votes_by_option_id[event.poll_vote.option_id]?.id === event.poll_vote.id;
4456
+ if (alreadyApplied) return;
4457
+ }
4558
4458
  let latestAnswers = [...currentState.latest_answers];
4559
4459
  let ownAnswer = currentState.own_answer;
4560
4460
  let ownVotesByOptionId = currentState.own_votes_by_option_id;
@@ -4570,7 +4470,10 @@ class StreamPoll {
4570
4470
  }
4571
4471
  }
4572
4472
  if (isVoteAnswer(event.poll_vote)) {
4573
- latestAnswers = [event.poll_vote, ...latestAnswers];
4473
+ latestAnswers = [
4474
+ event.poll_vote,
4475
+ ...latestAnswers.filter((a) => a.id !== event.poll_vote.id)
4476
+ ];
4574
4477
  } else {
4575
4478
  maxVotedOptionIds = getMaxVotedOptionIds(
4576
4479
  event.poll.vote_counts_by_option
@@ -4596,9 +4499,12 @@ class StreamPoll {
4596
4499
  };
4597
4500
  this.handleVoteChanged = (event) => {
4598
4501
  if (event.poll?.id && event.poll.id !== this.id) return;
4599
- if (!isPollVoteChangedEvent(event)) return;
4600
4502
  const currentState = this.data;
4601
4503
  const isOwnVote = event.poll_vote.user_id === this.client.state.getLatestValue().connected_user?.id;
4504
+ if (isOwnVote) {
4505
+ const alreadyApplied = isVoteAnswer(event.poll_vote) ? currentState.own_answer?.id === event.poll_vote.id : !!event.poll_vote.option_id && currentState.own_votes_by_option_id[event.poll_vote.option_id]?.id === event.poll_vote.id;
4506
+ if (alreadyApplied) return;
4507
+ }
4602
4508
  let latestAnswers = [...currentState.latest_answers];
4603
4509
  let ownAnswer = currentState.own_answer;
4604
4510
  let ownVotesByOptionId = currentState.own_votes_by_option_id;
@@ -4657,9 +4563,12 @@ class StreamPoll {
4657
4563
  };
4658
4564
  this.handleVoteRemoved = (event) => {
4659
4565
  if (event.poll?.id && event.poll.id !== this.id) return;
4660
- if (!isPollVoteRemovedEvent(event)) return;
4661
4566
  const currentState = this.data;
4662
4567
  const isOwnVote = event.poll_vote.user_id === this.client.state.getLatestValue().connected_user?.id;
4568
+ if (isOwnVote) {
4569
+ const alreadyApplied = isVoteAnswer(event.poll_vote) ? !currentState.own_answer : !!event.poll_vote.option_id && !(event.poll_vote.option_id in currentState.own_votes_by_option_id);
4570
+ if (alreadyApplied) return;
4571
+ }
4663
4572
  let latestAnswers = [...currentState.latest_answers];
4664
4573
  let ownAnswer = currentState.own_answer;
4665
4574
  const ownVotesByOptionId = { ...currentState.own_votes_by_option_id };
@@ -4803,6 +4712,13 @@ class FeedApi {
4803
4712
  ...request
4804
4713
  });
4805
4714
  }
4715
+ queryPinnedActivities(request) {
4716
+ return this.feedsApi.queryPinnedActivities({
4717
+ feed_id: this.id,
4718
+ feed_group_id: this.group,
4719
+ ...request
4720
+ });
4721
+ }
4806
4722
  stopWatching(request) {
4807
4723
  return this.feedsApi.stopWatchingFeed({
4808
4724
  feed_id: this.id,
@@ -4846,7 +4762,7 @@ const replaceUniqueArrayMerge = (existingArray, arrayToMerge, getKey) => {
4846
4762
  return result;
4847
4763
  };
4848
4764
  const Constants = {
4849
- DEFAULT_COMMENT_PAGINATION: "first"
4765
+ DEFAULT_COMMENT_PAGINATION: "last"
4850
4766
  };
4851
4767
  const isFollowResponse = (data) => {
4852
4768
  return "source_feed" in data && "target_feed" in data;
@@ -5137,8 +5053,21 @@ function handleCommentAdded(payload, fromWs) {
5137
5053
  return currentState;
5138
5054
  }
5139
5055
  const newComments = entityState?.comments ? [...entityState.comments] : [];
5140
- if (entityState.pagination?.sort === "last") {
5056
+ const sort = entityState.pagination?.sort;
5057
+ const hasMorePages = entityState.pagination?.next !== void 0;
5058
+ const isFromCurrentUser = eventTriggeredByConnectedUser.call(this, payload);
5059
+ if (sort === "last") {
5141
5060
  newComments.unshift(comment);
5061
+ } else if (sort === "first") {
5062
+ if (isFromCurrentUser) {
5063
+ newComments.push(comment);
5064
+ } else {
5065
+ if (!hasMorePages) {
5066
+ newComments.push(comment);
5067
+ } else {
5068
+ return currentState;
5069
+ }
5070
+ }
5142
5071
  } else {
5143
5072
  newComments.push(comment);
5144
5073
  }
@@ -6562,11 +6491,11 @@ const _Feed = class _Feed extends FeedApi {
6562
6491
  "app.updated": _Feed.noop,
6563
6492
  "user.banned": _Feed.noop,
6564
6493
  "user.deactivated": _Feed.noop,
6565
- "user.muted": _Feed.noop,
6566
6494
  "user.reactivated": _Feed.noop,
6567
6495
  "user.updated": _Feed.noop,
6568
6496
  "feeds.activity.feedback": handleActivityFeedback.bind(this),
6569
- "feeds.activity.restored": _Feed.noop
6497
+ "feeds.activity.restored": _Feed.noop,
6498
+ "user.unbanned": _Feed.noop
6570
6499
  };
6571
6500
  this.eventDispatcher = new EventDispatcher();
6572
6501
  this.on = this.eventDispatcher.on;
@@ -6616,7 +6545,9 @@ const _Feed = class _Feed extends FeedApi {
6616
6545
  const { last_get_or_create_request_config } = this.state.getLatestValue();
6617
6546
  if (last_get_or_create_request_config?.watch) {
6618
6547
  this.inProgressGetOrCreate = void 0;
6619
- await withRetry(() => this.getOrCreate(last_get_or_create_request_config));
6548
+ await withRetry(
6549
+ () => this.getOrCreate(last_get_or_create_request_config)
6550
+ );
6620
6551
  }
6621
6552
  }
6622
6553
  async getOrCreate(request) {
@@ -6758,6 +6689,16 @@ const _Feed = class _Feed extends FeedApi {
6758
6689
  ({ replies: _r, meta: _m, ...restOfTheCommentResponse }) => restOfTheCommentResponse
6759
6690
  );
6760
6691
  const existingComments = newCommentsByEntityId[entityId]?.comments;
6692
+ let comments = existingComments ? uniqueArrayMerge(
6693
+ existingComments,
6694
+ newComments,
6695
+ (comment) => comment.id
6696
+ ) : newComments;
6697
+ if (data.sort === "first" && existingComments && existingComments.length > 0) {
6698
+ comments = [...comments].sort(
6699
+ (a, b) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime()
6700
+ );
6701
+ }
6761
6702
  newCommentsByEntityId[entityId] = {
6762
6703
  ...newCommentsByEntityId[entityId],
6763
6704
  entity_parent_id: item.entityParentId,
@@ -6766,11 +6707,7 @@ const _Feed = class _Feed extends FeedApi {
6766
6707
  next: item.next,
6767
6708
  sort: data.sort
6768
6709
  },
6769
- comments: existingComments ? uniqueArrayMerge(
6770
- existingComments,
6771
- newComments,
6772
- (comment) => comment.id
6773
- ) : newComments
6710
+ comments
6774
6711
  };
6775
6712
  }
6776
6713
  return {
@@ -7528,13 +7465,62 @@ class FeedsClient extends FeedsApi {
7528
7465
  this.devToken = (userId) => {
7529
7466
  return streamDevToken(userId);
7530
7467
  };
7468
+ this.updatePoll = async (request) => {
7469
+ const poll = this.pollFromState(request.id);
7470
+ const response = await super.updatePoll(request);
7471
+ if (response.poll && poll) {
7472
+ poll.handlePollUpdated({ poll: response.poll, created_at: /* @__PURE__ */ new Date() });
7473
+ }
7474
+ return response;
7475
+ };
7476
+ this.updatePollPartial = async (request) => {
7477
+ const poll = this.pollFromState(request.poll_id);
7478
+ const response = await super.updatePollPartial(request);
7479
+ if (response.poll && poll) {
7480
+ poll.handlePollUpdated({ poll: response.poll, created_at: /* @__PURE__ */ new Date() });
7481
+ }
7482
+ return response;
7483
+ };
7531
7484
  this.closePoll = async (request) => {
7532
- return await this.updatePollPartial({
7485
+ const poll = this.pollFromState(request.poll_id);
7486
+ const response = await super.updatePollPartial({
7533
7487
  poll_id: request.poll_id,
7534
7488
  set: {
7535
7489
  is_closed: true
7536
7490
  }
7537
7491
  });
7492
+ if (response.poll && poll) {
7493
+ poll.handlePollClosed({ poll: response.poll, created_at: /* @__PURE__ */ new Date() });
7494
+ }
7495
+ return response;
7496
+ };
7497
+ this.castPollVote = async (request) => {
7498
+ const poll = this.pollFromState(request.poll_id);
7499
+ const response = await super.castPollVote(request);
7500
+ if (response.poll && response.vote && poll) {
7501
+ const payload = {
7502
+ poll: response.poll,
7503
+ poll_vote: response.vote,
7504
+ created_at: /* @__PURE__ */ new Date()
7505
+ };
7506
+ if (poll.data.enforce_unique_vote && Object.keys(poll.data.own_votes_by_option_id).length > 0) {
7507
+ poll.handleVoteChanged(payload);
7508
+ } else {
7509
+ poll.handleVoteCasted(payload);
7510
+ }
7511
+ }
7512
+ return response;
7513
+ };
7514
+ this.deletePollVote = async (request) => {
7515
+ const response = await super.deletePollVote(request);
7516
+ if (response.poll && response.vote) {
7517
+ this.pollFromState(request.poll_id)?.handleVoteRemoved({
7518
+ poll: response.poll,
7519
+ poll_vote: response.vote,
7520
+ created_at: /* @__PURE__ */ new Date()
7521
+ });
7522
+ }
7523
+ return response;
7538
7524
  };
7539
7525
  this.uploadFile = (request) => {
7540
7526
  return super.uploadFile({
@@ -8113,4 +8099,4 @@ exports.replaceUniqueArrayMerge = replaceUniqueArrayMerge;
8113
8099
  exports.shouldUpdateState = shouldUpdateState;
8114
8100
  exports.uniqueArrayMerge = uniqueArrayMerge;
8115
8101
  exports.updateEntityInArray = updateEntityInArray;
8116
- //# sourceMappingURL=feeds-client-CxjZlEtX.js.map
8102
+ //# sourceMappingURL=feeds-client-BDvUG9yF.js.map