@stream-io/feeds-client 0.2.7 → 0.2.9

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 (342) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/cjs/index.js +408 -0
  3. package/dist/cjs/index.js.map +1 -0
  4. package/dist/cjs/react-bindings.js +1368 -0
  5. package/dist/cjs/react-bindings.js.map +1 -0
  6. package/dist/es/index.mjs +398 -0
  7. package/dist/es/index.mjs.map +1 -0
  8. package/dist/es/react-bindings.mjs +1368 -0
  9. package/dist/es/react-bindings.mjs.map +1 -0
  10. package/dist/index-B0Mm2xFU.js +6492 -0
  11. package/dist/index-B0Mm2xFU.js.map +1 -0
  12. package/dist/index-rSXIDTdA.mjs +6476 -0
  13. package/dist/index-rSXIDTdA.mjs.map +1 -0
  14. package/dist/tsconfig.tsbuildinfo +1 -1
  15. package/dist/types/bindings/index.d.ts +2 -0
  16. package/dist/types/bindings/index.d.ts.map +1 -0
  17. package/dist/{@react-bindings → types/bindings/react}/contexts/StreamFeedContext.d.ts +2 -1
  18. package/dist/types/bindings/react/contexts/StreamFeedContext.d.ts.map +1 -0
  19. package/dist/{@react-bindings → types/bindings/react}/contexts/StreamFeedsContext.d.ts +2 -1
  20. package/dist/types/bindings/react/contexts/StreamFeedsContext.d.ts.map +1 -0
  21. package/dist/{@react-bindings → types/bindings/react}/contexts/StreamSearchContext.d.ts +2 -1
  22. package/dist/types/bindings/react/contexts/StreamSearchContext.d.ts.map +1 -0
  23. package/dist/{@react-bindings → types/bindings/react}/contexts/StreamSearchResultsContext.d.ts +2 -1
  24. package/dist/types/bindings/react/contexts/StreamSearchResultsContext.d.ts.map +1 -0
  25. package/dist/{@react-bindings → types/bindings/react}/hooks/client-state-hooks/index.d.ts +1 -0
  26. package/dist/types/bindings/react/hooks/client-state-hooks/index.d.ts.map +1 -0
  27. package/dist/types/bindings/react/hooks/client-state-hooks/useClientConnectedUser.d.ts +5 -0
  28. package/dist/types/bindings/react/hooks/client-state-hooks/useClientConnectedUser.d.ts.map +1 -0
  29. package/dist/{@react-bindings → types/bindings/react}/hooks/client-state-hooks/useWsConnectionState.d.ts +1 -0
  30. package/dist/types/bindings/react/hooks/client-state-hooks/useWsConnectionState.d.ts.map +1 -0
  31. package/dist/{@react-bindings → types/bindings/react}/hooks/feed-state-hooks/index.d.ts +1 -0
  32. package/dist/types/bindings/react/hooks/feed-state-hooks/index.d.ts.map +1 -0
  33. package/dist/{@react-bindings → types/bindings/react}/hooks/feed-state-hooks/useAggregatedActivities.d.ts +3 -2
  34. package/dist/types/bindings/react/hooks/feed-state-hooks/useAggregatedActivities.d.ts.map +1 -0
  35. package/dist/{@react-bindings → types/bindings/react}/hooks/feed-state-hooks/useComments.d.ts +2 -3
  36. package/dist/types/bindings/react/hooks/feed-state-hooks/useComments.d.ts.map +1 -0
  37. package/dist/{@react-bindings → types/bindings/react}/hooks/feed-state-hooks/useFeedActivities.d.ts +3 -2
  38. package/dist/types/bindings/react/hooks/feed-state-hooks/useFeedActivities.d.ts.map +1 -0
  39. package/dist/{@react-bindings → types/bindings/react}/hooks/feed-state-hooks/useFeedMetadata.d.ts +3 -2
  40. package/dist/types/bindings/react/hooks/feed-state-hooks/useFeedMetadata.d.ts.map +1 -0
  41. package/dist/{@react-bindings → types/bindings/react}/hooks/feed-state-hooks/useFollowers.d.ts +5 -4
  42. package/dist/types/bindings/react/hooks/feed-state-hooks/useFollowers.d.ts.map +1 -0
  43. package/dist/{@react-bindings → types/bindings/react}/hooks/feed-state-hooks/useFollowing.d.ts +5 -4
  44. package/dist/types/bindings/react/hooks/feed-state-hooks/useFollowing.d.ts.map +1 -0
  45. package/dist/{@react-bindings → types/bindings/react}/hooks/feed-state-hooks/useIsAggregatedActivityRead.d.ts +2 -2
  46. package/dist/types/bindings/react/hooks/feed-state-hooks/useIsAggregatedActivityRead.d.ts.map +1 -0
  47. package/dist/{@react-bindings → types/bindings/react}/hooks/feed-state-hooks/useIsAggregatedActivitySeen.d.ts +2 -2
  48. package/dist/types/bindings/react/hooks/feed-state-hooks/useIsAggregatedActivitySeen.d.ts.map +1 -0
  49. package/dist/{@react-bindings → types/bindings/react}/hooks/feed-state-hooks/useNotificationStatus.d.ts +2 -1
  50. package/dist/types/bindings/react/hooks/feed-state-hooks/useNotificationStatus.d.ts.map +1 -0
  51. package/dist/{@react-bindings → types/bindings/react}/hooks/feed-state-hooks/useOwnCapabilities.d.ts +2 -1
  52. package/dist/types/bindings/react/hooks/feed-state-hooks/useOwnCapabilities.d.ts.map +1 -0
  53. package/dist/{@react-bindings → types/bindings/react}/hooks/feed-state-hooks/useOwnFollows.d.ts +3 -2
  54. package/dist/types/bindings/react/hooks/feed-state-hooks/useOwnFollows.d.ts.map +1 -0
  55. package/dist/{@react-bindings → types/bindings/react}/hooks/internal/index.d.ts +1 -0
  56. package/dist/types/bindings/react/hooks/internal/index.d.ts.map +1 -0
  57. package/dist/{@react-bindings → types/bindings/react}/hooks/internal/useStableCallback.d.ts +1 -0
  58. package/dist/types/bindings/react/hooks/internal/useStableCallback.d.ts.map +1 -0
  59. package/dist/{@react-bindings → types/bindings/react}/hooks/search-state-hooks/index.d.ts +1 -0
  60. package/dist/types/bindings/react/hooks/search-state-hooks/index.d.ts.map +1 -0
  61. package/dist/{@react-bindings → types/bindings/react}/hooks/search-state-hooks/useSearchQuery.d.ts +2 -1
  62. package/dist/types/bindings/react/hooks/search-state-hooks/useSearchQuery.d.ts.map +1 -0
  63. package/dist/{@react-bindings → types/bindings/react}/hooks/search-state-hooks/useSearchResult.d.ts +2 -1
  64. package/dist/types/bindings/react/hooks/search-state-hooks/useSearchResult.d.ts.map +1 -0
  65. package/dist/types/bindings/react/hooks/search-state-hooks/useSearchSources.d.ts +5 -0
  66. package/dist/types/bindings/react/hooks/search-state-hooks/useSearchSources.d.ts.map +1 -0
  67. package/dist/{@react-bindings → types/bindings/react}/hooks/useCreateFeedsClient.d.ts +2 -4
  68. package/dist/types/bindings/react/hooks/useCreateFeedsClient.d.ts.map +1 -0
  69. package/dist/{@react-bindings → types/bindings/react}/hooks/util/index.d.ts +1 -0
  70. package/dist/types/bindings/react/hooks/util/index.d.ts.map +1 -0
  71. package/dist/{@react-bindings → types/bindings/react}/hooks/util/useBookmarkActions.d.ts +2 -1
  72. package/dist/types/bindings/react/hooks/util/useBookmarkActions.d.ts.map +1 -0
  73. package/dist/{@react-bindings → types/bindings/react}/hooks/util/useReactionActions.d.ts +2 -1
  74. package/dist/types/bindings/react/hooks/util/useReactionActions.d.ts.map +1 -0
  75. package/dist/{@react-bindings → types/bindings/react}/index.d.ts +2 -1
  76. package/dist/types/bindings/react/index.d.ts.map +1 -0
  77. package/dist/{@react-bindings → types/bindings/react}/wrappers/StreamFeed.d.ts +2 -1
  78. package/dist/types/bindings/react/wrappers/StreamFeed.d.ts.map +1 -0
  79. package/dist/{@react-bindings → types/bindings/react}/wrappers/StreamFeeds.d.ts +1 -0
  80. package/dist/types/bindings/react/wrappers/StreamFeeds.d.ts.map +1 -0
  81. package/dist/{@react-bindings → types/bindings/react}/wrappers/StreamSearch.d.ts +2 -1
  82. package/dist/types/bindings/react/wrappers/StreamSearch.d.ts.map +1 -0
  83. package/dist/{@react-bindings → types/bindings/react}/wrappers/StreamSearchResults.d.ts +2 -1
  84. package/dist/types/bindings/react/wrappers/StreamSearchResults.d.ts.map +1 -0
  85. package/dist/{src → types}/common/ApiClient.d.ts +18 -0
  86. package/dist/types/common/ApiClient.d.ts.map +1 -0
  87. package/dist/{src → types}/common/ConnectionIdManager.d.ts +1 -0
  88. package/dist/types/common/ConnectionIdManager.d.ts.map +1 -0
  89. package/dist/{src → types}/common/EventDispatcher.d.ts +1 -0
  90. package/dist/types/common/EventDispatcher.d.ts.map +1 -0
  91. package/dist/{src → types}/common/Poll.d.ts +2 -1
  92. package/dist/types/common/Poll.d.ts.map +1 -0
  93. package/dist/{src → types}/common/TokenManager.d.ts +2 -0
  94. package/dist/types/common/TokenManager.d.ts.map +1 -0
  95. package/dist/{src → types}/common/gen-imports.d.ts +1 -0
  96. package/dist/types/common/gen-imports.d.ts.map +1 -0
  97. package/dist/{src → types}/common/rate-limit.d.ts +1 -0
  98. package/dist/types/common/rate-limit.d.ts.map +1 -0
  99. package/dist/{src → types}/common/real-time/StableWSConnection.d.ts +4 -4
  100. package/dist/types/common/real-time/StableWSConnection.d.ts.map +1 -0
  101. package/dist/{src → types}/common/real-time/event-models.d.ts +1 -0
  102. package/dist/types/common/real-time/event-models.d.ts.map +1 -0
  103. package/dist/{src → types}/common/search/ActivitySearchSource.d.ts +1 -0
  104. package/dist/types/common/search/ActivitySearchSource.d.ts.map +1 -0
  105. package/dist/{src → types}/common/search/BaseSearchSource.d.ts +2 -1
  106. package/dist/types/common/search/BaseSearchSource.d.ts.map +1 -0
  107. package/dist/{src → types}/common/search/FeedSearchSource.d.ts +1 -0
  108. package/dist/types/common/search/FeedSearchSource.d.ts.map +1 -0
  109. package/dist/{src → types}/common/search/SearchController.d.ts +2 -1
  110. package/dist/types/common/search/SearchController.d.ts.map +1 -0
  111. package/dist/{src → types}/common/search/UserSearchSource.d.ts +2 -1
  112. package/dist/types/common/search/UserSearchSource.d.ts.map +1 -0
  113. package/dist/{src → types}/common/search/index.d.ts +1 -0
  114. package/dist/types/common/search/index.d.ts.map +1 -0
  115. package/dist/{src → types}/common/search/types.d.ts +1 -0
  116. package/dist/types/common/search/types.d.ts.map +1 -0
  117. package/dist/{src → types}/common/types.d.ts +3 -1
  118. package/dist/types/common/types.d.ts.map +1 -0
  119. package/dist/{src → types}/common/utils.d.ts +1 -0
  120. package/dist/types/common/utils.d.ts.map +1 -0
  121. package/dist/{src → types}/feed/event-handlers/activity/handle-activity-added.d.ts +3 -2
  122. package/dist/types/feed/event-handlers/activity/handle-activity-added.d.ts.map +1 -0
  123. package/dist/{src → types}/feed/event-handlers/activity/handle-activity-deleted.d.ts +3 -2
  124. package/dist/types/feed/event-handlers/activity/handle-activity-deleted.d.ts.map +1 -0
  125. package/dist/{src → types}/feed/event-handlers/activity/handle-activity-marked.d.ts +1 -0
  126. package/dist/types/feed/event-handlers/activity/handle-activity-marked.d.ts.map +1 -0
  127. package/dist/{src → types}/feed/event-handlers/activity/handle-activity-pinned.d.ts +1 -0
  128. package/dist/types/feed/event-handlers/activity/handle-activity-pinned.d.ts.map +1 -0
  129. package/dist/types/feed/event-handlers/activity/handle-activity-reaction-added.d.ts +15 -0
  130. package/dist/types/feed/event-handlers/activity/handle-activity-reaction-added.d.ts.map +1 -0
  131. package/dist/types/feed/event-handlers/activity/handle-activity-reaction-deleted.d.ts +15 -0
  132. package/dist/types/feed/event-handlers/activity/handle-activity-reaction-deleted.d.ts.map +1 -0
  133. package/dist/{src → types}/feed/event-handlers/activity/handle-activity-removed-from-feed.d.ts +1 -0
  134. package/dist/types/feed/event-handlers/activity/handle-activity-removed-from-feed.d.ts.map +1 -0
  135. package/dist/{src → types}/feed/event-handlers/activity/handle-activity-unpinned.d.ts +1 -0
  136. package/dist/types/feed/event-handlers/activity/handle-activity-unpinned.d.ts.map +1 -0
  137. package/dist/{src → types}/feed/event-handlers/activity/handle-activity-updated.d.ts +1 -0
  138. package/dist/types/feed/event-handlers/activity/handle-activity-updated.d.ts.map +1 -0
  139. package/dist/{src → types}/feed/event-handlers/activity/index.d.ts +1 -0
  140. package/dist/types/feed/event-handlers/activity/index.d.ts.map +1 -0
  141. package/dist/{src → types}/feed/event-handlers/bookmark/handle-bookmark-added.d.ts +1 -0
  142. package/dist/types/feed/event-handlers/bookmark/handle-bookmark-added.d.ts.map +1 -0
  143. package/dist/{src → types}/feed/event-handlers/bookmark/handle-bookmark-deleted.d.ts +1 -0
  144. package/dist/types/feed/event-handlers/bookmark/handle-bookmark-deleted.d.ts.map +1 -0
  145. package/dist/{src → types}/feed/event-handlers/bookmark/handle-bookmark-updated.d.ts +1 -0
  146. package/dist/types/feed/event-handlers/bookmark/handle-bookmark-updated.d.ts.map +1 -0
  147. package/dist/{src → types}/feed/event-handlers/bookmark/index.d.ts +1 -0
  148. package/dist/types/feed/event-handlers/bookmark/index.d.ts.map +1 -0
  149. package/dist/{src → types}/feed/event-handlers/comment/handle-comment-added.d.ts +1 -0
  150. package/dist/types/feed/event-handlers/comment/handle-comment-added.d.ts.map +1 -0
  151. package/dist/{src → types}/feed/event-handlers/comment/handle-comment-deleted.d.ts +1 -0
  152. package/dist/types/feed/event-handlers/comment/handle-comment-deleted.d.ts.map +1 -0
  153. package/dist/{src → types}/feed/event-handlers/comment/handle-comment-reaction.d.ts +1 -0
  154. package/dist/types/feed/event-handlers/comment/handle-comment-reaction.d.ts.map +1 -0
  155. package/dist/{src → types}/feed/event-handlers/comment/handle-comment-updated.d.ts +1 -0
  156. package/dist/types/feed/event-handlers/comment/handle-comment-updated.d.ts.map +1 -0
  157. package/dist/{src → types}/feed/event-handlers/comment/index.d.ts +1 -0
  158. package/dist/types/feed/event-handlers/comment/index.d.ts.map +1 -0
  159. package/dist/{src → types}/feed/event-handlers/feed/handle-feed-updated.d.ts +1 -0
  160. package/dist/types/feed/event-handlers/feed/handle-feed-updated.d.ts.map +1 -0
  161. package/dist/{src → types}/feed/event-handlers/feed/index.d.ts +1 -0
  162. package/dist/types/feed/event-handlers/feed/index.d.ts.map +1 -0
  163. package/dist/{src → types}/feed/event-handlers/feed-member/handle-feed-member-added.d.ts +1 -0
  164. package/dist/types/feed/event-handlers/feed-member/handle-feed-member-added.d.ts.map +1 -0
  165. package/dist/{src → types}/feed/event-handlers/feed-member/handle-feed-member-removed.d.ts +1 -0
  166. package/dist/types/feed/event-handlers/feed-member/handle-feed-member-removed.d.ts.map +1 -0
  167. package/dist/{src → types}/feed/event-handlers/feed-member/handle-feed-member-updated.d.ts +1 -0
  168. package/dist/types/feed/event-handlers/feed-member/handle-feed-member-updated.d.ts.map +1 -0
  169. package/dist/{src → types}/feed/event-handlers/feed-member/index.d.ts +1 -0
  170. package/dist/types/feed/event-handlers/feed-member/index.d.ts.map +1 -0
  171. package/dist/{src → types}/feed/event-handlers/follow/handle-follow-created.d.ts +3 -2
  172. package/dist/types/feed/event-handlers/follow/handle-follow-created.d.ts.map +1 -0
  173. package/dist/{src → types}/feed/event-handlers/follow/handle-follow-deleted.d.ts +2 -1
  174. package/dist/types/feed/event-handlers/follow/handle-follow-deleted.d.ts.map +1 -0
  175. package/dist/{src → types}/feed/event-handlers/follow/handle-follow-updated.d.ts +3 -2
  176. package/dist/types/feed/event-handlers/follow/handle-follow-updated.d.ts.map +1 -0
  177. package/dist/{src → types}/feed/event-handlers/follow/index.d.ts +1 -0
  178. package/dist/types/feed/event-handlers/follow/index.d.ts.map +1 -0
  179. package/dist/{src → types}/feed/event-handlers/index.d.ts +1 -0
  180. package/dist/types/feed/event-handlers/index.d.ts.map +1 -0
  181. package/dist/{src → types}/feed/event-handlers/notification-feed/handle-notification-feed-updated.d.ts +1 -0
  182. package/dist/types/feed/event-handlers/notification-feed/handle-notification-feed-updated.d.ts.map +1 -0
  183. package/dist/{src → types}/feed/event-handlers/notification-feed/index.d.ts +1 -0
  184. package/dist/types/feed/event-handlers/notification-feed/index.d.ts.map +1 -0
  185. package/dist/{src → types}/feed/event-handlers/watch/handle-watch-started.d.ts +1 -0
  186. package/dist/types/feed/event-handlers/watch/handle-watch-started.d.ts.map +1 -0
  187. package/dist/{src → types}/feed/event-handlers/watch/handle-watch-stopped.d.ts +1 -0
  188. package/dist/types/feed/event-handlers/watch/handle-watch-stopped.d.ts.map +1 -0
  189. package/dist/{src → types}/feed/event-handlers/watch/index.d.ts +1 -0
  190. package/dist/types/feed/event-handlers/watch/index.d.ts.map +1 -0
  191. package/dist/{src → types}/feed/feed.d.ts +9 -6
  192. package/dist/types/feed/feed.d.ts.map +1 -0
  193. package/dist/{src → types}/feed/index.d.ts +1 -0
  194. package/dist/types/feed/index.d.ts.map +1 -0
  195. package/dist/{src → types}/feeds-client/event-handlers/index.d.ts +1 -0
  196. package/dist/types/feeds-client/event-handlers/index.d.ts.map +1 -0
  197. package/dist/{src → types}/feeds-client/event-handlers/user/handle-user-updated.d.ts +1 -0
  198. package/dist/types/feeds-client/event-handlers/user/handle-user-updated.d.ts.map +1 -0
  199. package/dist/{src → types}/feeds-client/feeds-client.d.ts +18 -10
  200. package/dist/types/feeds-client/feeds-client.d.ts.map +1 -0
  201. package/dist/{src → types}/feeds-client/index.d.ts +1 -0
  202. package/dist/types/feeds-client/index.d.ts.map +1 -0
  203. package/dist/{src → types}/gen/feeds/FeedApi.d.ts +1 -0
  204. package/dist/types/gen/feeds/FeedApi.d.ts.map +1 -0
  205. package/dist/{src → types}/gen/feeds/FeedsApi.d.ts +1 -0
  206. package/dist/types/gen/feeds/FeedsApi.d.ts.map +1 -0
  207. package/dist/{src → types}/gen/model-decoders/decoders.d.ts +1 -0
  208. package/dist/types/gen/model-decoders/decoders.d.ts.map +1 -0
  209. package/dist/{src → types}/gen/model-decoders/event-decoder-mapping.d.ts +1 -0
  210. package/dist/types/gen/model-decoders/event-decoder-mapping.d.ts.map +1 -0
  211. package/dist/{src → types}/gen/models/index.d.ts +43 -2
  212. package/dist/types/gen/models/index.d.ts.map +1 -0
  213. package/dist/{src → types}/gen/moderation/ModerationApi.d.ts +1 -0
  214. package/dist/types/gen/moderation/ModerationApi.d.ts.map +1 -0
  215. package/dist/{src → types}/gen-imports.d.ts +1 -0
  216. package/dist/types/gen-imports.d.ts.map +1 -0
  217. package/dist/types/index.d.ts +10 -0
  218. package/dist/types/index.d.ts.map +1 -0
  219. package/dist/{src → types}/moderation-client.d.ts +1 -0
  220. package/dist/types/moderation-client.d.ts.map +1 -0
  221. package/dist/{src → types}/types-internal.d.ts +4 -0
  222. package/dist/types/types-internal.d.ts.map +1 -0
  223. package/dist/{src → types}/types.d.ts +1 -0
  224. package/dist/types/types.d.ts.map +1 -0
  225. package/dist/{src → types}/utils/check-has-another-page.d.ts +1 -0
  226. package/dist/types/utils/check-has-another-page.d.ts.map +1 -0
  227. package/dist/{src → types}/utils/constants.d.ts +1 -0
  228. package/dist/types/utils/constants.d.ts.map +1 -0
  229. package/dist/{src → types}/utils/index.d.ts +2 -0
  230. package/dist/types/utils/index.d.ts.map +1 -0
  231. package/dist/types/utils/is-react-native.d.ts +5 -0
  232. package/dist/types/utils/is-react-native.d.ts.map +1 -0
  233. package/dist/types/utils/logger.d.ts +61 -0
  234. package/dist/types/utils/logger.d.ts.map +1 -0
  235. package/dist/types/utils/state-update-queue.d.ts +83 -0
  236. package/dist/types/utils/state-update-queue.d.ts.map +1 -0
  237. package/dist/types/utils/type-assertions.d.ts +12 -0
  238. package/dist/types/utils/type-assertions.d.ts.map +1 -0
  239. package/dist/{src → types}/utils/unique-array-merge.d.ts +1 -0
  240. package/dist/types/utils/unique-array-merge.d.ts.map +1 -0
  241. package/dist/{src → types}/utils/update-entity-in-array.d.ts +1 -0
  242. package/dist/types/utils/update-entity-in-array.d.ts.map +1 -0
  243. package/package.json +21 -33
  244. package/src/bindings/index.ts +1 -0
  245. package/src/bindings/react/contexts/StreamFeedContext.tsx +18 -0
  246. package/src/bindings/react/contexts/StreamFeedsContext.tsx +21 -0
  247. package/src/bindings/react/contexts/StreamSearchContext.tsx +18 -0
  248. package/src/bindings/react/contexts/StreamSearchResultsContext.tsx +20 -0
  249. package/src/bindings/react/hooks/client-state-hooks/useClientConnectedUser.ts +18 -0
  250. package/src/bindings/react/hooks/client-state-hooks/useWsConnectionState.ts +18 -0
  251. package/src/bindings/react/hooks/feed-state-hooks/useAggregatedActivities.ts +25 -0
  252. package/src/bindings/react/hooks/feed-state-hooks/useComments.ts +91 -0
  253. package/src/bindings/react/hooks/feed-state-hooks/useFeedActivities.ts +36 -0
  254. package/src/bindings/react/hooks/feed-state-hooks/useFeedMetadata.ts +28 -0
  255. package/src/bindings/react/hooks/feed-state-hooks/useFollowers.ts +54 -0
  256. package/src/bindings/react/hooks/feed-state-hooks/useFollowing.ts +54 -0
  257. package/src/bindings/react/hooks/feed-state-hooks/useIsAggregatedActivityRead.ts +29 -0
  258. package/src/bindings/react/hooks/feed-state-hooks/useIsAggregatedActivitySeen.ts +28 -0
  259. package/src/bindings/react/hooks/feed-state-hooks/useNotificationStatus.ts +28 -0
  260. package/src/bindings/react/hooks/feed-state-hooks/useOwnCapabilities.ts +70 -0
  261. package/src/bindings/react/hooks/feed-state-hooks/useOwnFollows.ts +18 -0
  262. package/src/bindings/react/hooks/internal/useStableCallback.ts +37 -0
  263. package/src/bindings/react/hooks/search-state-hooks/useSearchQuery.ts +14 -0
  264. package/src/bindings/react/hooks/search-state-hooks/useSearchResult.ts +36 -0
  265. package/src/bindings/react/hooks/search-state-hooks/useSearchSources.ts +17 -0
  266. package/src/bindings/react/hooks/useCreateFeedsClient.ts +73 -0
  267. package/src/bindings/react/hooks/util/useBookmarkActions.ts +40 -0
  268. package/src/bindings/react/hooks/util/useReactionActions.ts +56 -0
  269. package/{@react-bindings → src/bindings/react}/index.ts +1 -1
  270. package/src/bindings/react/wrappers/StreamFeed.tsx +23 -0
  271. package/src/bindings/react/wrappers/StreamFeeds.tsx +13 -0
  272. package/src/bindings/react/wrappers/StreamSearch.tsx +23 -0
  273. package/src/bindings/react/wrappers/StreamSearchResults.tsx +23 -0
  274. package/src/common/ApiClient.ts +86 -33
  275. package/src/common/EventDispatcher.ts +3 -6
  276. package/src/common/Poll.ts +1 -1
  277. package/src/common/TokenManager.ts +4 -0
  278. package/src/common/real-time/StableWSConnection.ts +64 -60
  279. package/src/common/search/BaseSearchSource.ts +11 -4
  280. package/src/common/search/SearchController.ts +4 -2
  281. package/src/common/types.ts +3 -2
  282. package/src/feed/event-handlers/activity/activity-utils.test.ts +40 -9
  283. package/src/feed/event-handlers/activity/handle-activity-added.test.ts +1 -1
  284. package/src/feed/event-handlers/activity/handle-activity-added.ts +7 -7
  285. package/src/feed/event-handlers/activity/handle-activity-deleted.ts +15 -12
  286. package/src/feed/event-handlers/activity/handle-activity-reaction-added.test.ts +101 -1
  287. package/src/feed/event-handlers/activity/handle-activity-reaction-added.ts +55 -29
  288. package/src/feed/event-handlers/activity/handle-activity-reaction-deleted.test.ts +118 -1
  289. package/src/feed/event-handlers/activity/handle-activity-reaction-deleted.ts +59 -32
  290. package/src/feed/event-handlers/activity/handle-activity-removed-from-feed.ts +1 -1
  291. package/src/feed/event-handlers/follow/follow-state-update-queue.test.ts +219 -0
  292. package/src/feed/event-handlers/follow/handle-follow-created.ts +7 -2
  293. package/src/feed/event-handlers/follow/handle-follow-deleted.ts +5 -0
  294. package/src/feed/event-handlers/follow/handle-follow-updated.test.ts +0 -43
  295. package/src/feed/event-handlers/follow/handle-follow-updated.ts +7 -2
  296. package/src/feed/feed.test.ts +90 -0
  297. package/src/feed/feed.ts +25 -4
  298. package/src/feeds-client/feeds-client.ts +35 -4
  299. package/src/gen/feeds/FeedsApi.ts +2 -0
  300. package/src/gen/model-decoders/decoders.ts +22 -0
  301. package/src/gen/models/index.ts +71 -3
  302. package/src/index.ts +9 -0
  303. package/src/test-utils/response-generators.ts +12 -3
  304. package/src/types-internal.ts +4 -0
  305. package/src/utils/index.ts +1 -0
  306. package/src/utils/is-react-native.ts +7 -0
  307. package/src/utils/logger.ts +18 -0
  308. package/src/utils/state-update-queue.test.ts +85 -9
  309. package/src/utils/state-update-queue.ts +104 -11
  310. package/src/utils/type-assertions.ts +22 -1
  311. package/dist/@react-bindings/hooks/client-state-hooks/useClientConnectedUser.d.ts +0 -4
  312. package/dist/@react-bindings/hooks/search-state-hooks/useSearchSources.d.ts +0 -4
  313. package/dist/@react-bindings/hooks/useStateStore.d.ts +0 -3
  314. package/dist/index-react-bindings.browser.cjs +0 -6607
  315. package/dist/index-react-bindings.browser.cjs.map +0 -1
  316. package/dist/index-react-bindings.browser.js +0 -6574
  317. package/dist/index-react-bindings.browser.js.map +0 -1
  318. package/dist/index-react-bindings.node.cjs +0 -6607
  319. package/dist/index-react-bindings.node.cjs.map +0 -1
  320. package/dist/index-react-bindings.node.js +0 -6574
  321. package/dist/index-react-bindings.node.js.map +0 -1
  322. package/dist/index.browser.cjs +0 -6578
  323. package/dist/index.browser.cjs.map +0 -1
  324. package/dist/index.browser.js +0 -6551
  325. package/dist/index.browser.js.map +0 -1
  326. package/dist/index.d.ts +0 -9
  327. package/dist/index.node.cjs +0 -6578
  328. package/dist/index.node.cjs.map +0 -1
  329. package/dist/index.node.js +0 -6551
  330. package/dist/index.node.js.map +0 -1
  331. package/dist/src/common/StateStore.d.ts +0 -125
  332. package/dist/src/feed/event-handlers/activity/handle-activity-reaction-added.d.ts +0 -12
  333. package/dist/src/feed/event-handlers/activity/handle-activity-reaction-deleted.d.ts +0 -12
  334. package/dist/src/utils/state-update-queue.d.ts +0 -6
  335. package/dist/src/utils/type-assertions.d.ts +0 -7
  336. package/index.ts +0 -9
  337. package/src/common/StateStore.ts +0 -332
  338. /package/{@react-bindings → src/bindings/react}/hooks/client-state-hooks/index.ts +0 -0
  339. /package/{@react-bindings → src/bindings/react}/hooks/feed-state-hooks/index.ts +0 -0
  340. /package/{@react-bindings → src/bindings/react}/hooks/internal/index.ts +0 -0
  341. /package/{@react-bindings → src/bindings/react}/hooks/search-state-hooks/index.ts +0 -0
  342. /package/{@react-bindings → src/bindings/react}/hooks/util/index.ts +0 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,26 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ## [0.2.9](https://github.com/GetStream/stream-feeds-js/compare/@stream-io/feeds-client-0.2.8...@stream-io/feeds-client-0.2.9) (2025-09-18)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * bump core packages and install shim ([#125](https://github.com/GetStream/stream-feeds-js/issues/125)) ([4659634](https://github.com/GetStream/stream-feeds-js/commit/4659634a49cd8dc6c0a04d9199e7eb3ea4e32d19))
11
+
12
+ ## [0.2.8](https://github.com/GetStream/stream-feeds-js/compare/@stream-io/feeds-client-0.2.7...@stream-io/feeds-client-0.2.8) (2025-09-17)
13
+
14
+
15
+ * update feeds API spec ([#122](https://github.com/GetStream/stream-feeds-js/issues/122)) ([a29c243](https://github.com/GetStream/stream-feeds-js/commit/a29c243d42d6c5da56b43e1d6091394f3db5419d))
16
+ * update filtering example in code snippets tests ([d05c730](https://github.com/GetStream/stream-feeds-js/commit/d05c730d8ce346e7b8ab7df4b4bc54a925e84308))
17
+
18
+
19
+ ### Features
20
+
21
+ * configurable logging mechanism ([#108](https://github.com/GetStream/stream-feeds-js/issues/108)) ([c0fff26](https://github.com/GetStream/stream-feeds-js/commit/c0fff2668b037efd5dde35a288b45dde5e9f72c7))
22
+ * reaction state updates on http responses ([#118](https://github.com/GetStream/stream-feeds-js/issues/118)) ([181e150](https://github.com/GetStream/stream-feeds-js/commit/181e150cae97b32fc1264c2188e4ad3ef6b2c976))
23
+ * user agent and build revamp ([#121](https://github.com/GetStream/stream-feeds-js/issues/121)) ([c8009b0](https://github.com/GetStream/stream-feeds-js/commit/c8009b00820803e12539f39700787364c220e434))
24
+
5
25
  ## [0.2.7](https://github.com/GetStream/stream-feeds-js/compare/@stream-io/feeds-client-0.2.6...@stream-io/feeds-client-0.2.7) (2025-09-10)
6
26
 
7
27
 
@@ -0,0 +1,408 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const stateStore = require("@stream-io/state-store");
4
+ const index = require("../index-B0Mm2xFU.js");
5
+ const loggerInternal = require("@stream-io/logger");
6
+ class SearchController {
7
+ constructor({ config, sources } = {}) {
8
+ this.addSource = (source) => {
9
+ this.state.partialNext({
10
+ sources: [...this.sources, source]
11
+ });
12
+ };
13
+ this.getSource = (sourceType) => this.sources.find((s) => s.type === sourceType);
14
+ this.removeSource = (sourceType) => {
15
+ const newSources = this.sources.filter((s) => s.type !== sourceType);
16
+ if (newSources.length === this.sources.length) return;
17
+ this.state.partialNext({ sources: newSources });
18
+ };
19
+ this.activateSource = (sourceType) => {
20
+ const source = this.getSource(sourceType);
21
+ if (!source || source.isActive) return;
22
+ if (this.config.keepSingleActiveSource) {
23
+ this.sources.forEach((s) => {
24
+ if (s.type !== sourceType) {
25
+ s.deactivate();
26
+ }
27
+ });
28
+ }
29
+ source.activate();
30
+ this.state.partialNext({ sources: [...this.sources] });
31
+ };
32
+ this.deactivateSource = (sourceType) => {
33
+ const source = this.getSource(sourceType);
34
+ if (!source?.isActive) return;
35
+ if (this.activeSources.length === 1) return;
36
+ source.deactivate();
37
+ this.state.partialNext({ sources: [...this.sources] });
38
+ };
39
+ this.activate = () => {
40
+ if (!this.activeSources.length) {
41
+ const sourcesToActivate = this.config.keepSingleActiveSource ? this.sources.slice(0, 1) : this.sources;
42
+ sourcesToActivate.forEach((s) => s.activate());
43
+ }
44
+ if (this.isActive) return;
45
+ this.state.partialNext({ isActive: true });
46
+ };
47
+ this.search = async (searchQuery) => {
48
+ const searchedSources = this.activeSources;
49
+ this.state.partialNext({
50
+ searchQuery
51
+ });
52
+ await Promise.all(
53
+ searchedSources.map((source) => source.search(searchQuery))
54
+ );
55
+ };
56
+ this.cancelSearchQueries = () => {
57
+ this.activeSources.forEach((s) => s.cancelScheduledQuery());
58
+ };
59
+ this.clear = () => {
60
+ this.cancelSearchQueries();
61
+ this.sources.forEach(
62
+ (source) => source.state.next({ ...source.initialState, isActive: source.isActive })
63
+ );
64
+ this.state.next((current) => ({
65
+ ...current,
66
+ isActive: true,
67
+ queriesInProgress: [],
68
+ searchQuery: ""
69
+ }));
70
+ };
71
+ this.exit = () => {
72
+ this.cancelSearchQueries();
73
+ this.sources.forEach(
74
+ (source) => source.state.next({ ...source.initialState, isActive: source.isActive })
75
+ );
76
+ this.state.next((current) => ({
77
+ ...current,
78
+ isActive: false,
79
+ queriesInProgress: [],
80
+ searchQuery: ""
81
+ }));
82
+ };
83
+ this.state = new stateStore.StateStore({
84
+ isActive: false,
85
+ searchQuery: "",
86
+ sources: sources ?? []
87
+ });
88
+ this._internalState = new stateStore.StateStore({});
89
+ this.config = { keepSingleActiveSource: true, ...config };
90
+ }
91
+ get hasNext() {
92
+ return this.sources.some((source) => source.hasNext);
93
+ }
94
+ get sources() {
95
+ return this.state.getLatestValue().sources;
96
+ }
97
+ get activeSources() {
98
+ return this.state.getLatestValue().sources.filter((s) => s.isActive);
99
+ }
100
+ get isActive() {
101
+ return this.state.getLatestValue().isActive;
102
+ }
103
+ get searchQuery() {
104
+ return this.state.getLatestValue().searchQuery;
105
+ }
106
+ get searchSourceTypes() {
107
+ return this.sources.map((s) => s.type);
108
+ }
109
+ }
110
+ const DEFAULT_SEARCH_SOURCE_OPTIONS = {
111
+ debounceMs: 300,
112
+ pageSize: 10,
113
+ allowEmptySearchString: false,
114
+ resetOnNewSearchQuery: true
115
+ };
116
+ class BaseSearchSourceBase {
117
+ constructor(options) {
118
+ this.activate = () => {
119
+ if (this.isActive) return;
120
+ this.state.partialNext({ isActive: true });
121
+ };
122
+ this.deactivate = () => {
123
+ if (!this.isActive) return;
124
+ this.state.partialNext({ isActive: false });
125
+ };
126
+ this.canExecuteQuery = (newSearchString) => {
127
+ const hasNewSearchQuery = typeof newSearchString !== "undefined";
128
+ const searchString = newSearchString ?? this.searchQuery;
129
+ return !!(this.isActive && !this.isLoading && (this.hasNext || hasNewSearchQuery) && (this.allowEmptySearchString || searchString));
130
+ };
131
+ const { pageSize, allowEmptySearchString, resetOnNewSearchQuery } = {
132
+ ...DEFAULT_SEARCH_SOURCE_OPTIONS,
133
+ ...options
134
+ };
135
+ this.pageSize = pageSize;
136
+ this.allowEmptySearchString = allowEmptySearchString;
137
+ this.resetOnNewSearchQuery = resetOnNewSearchQuery;
138
+ this.state = new stateStore.StateStore(this.initialState);
139
+ }
140
+ get lastQueryError() {
141
+ return this.state.getLatestValue().lastQueryError;
142
+ }
143
+ get hasNext() {
144
+ return this.state.getLatestValue().hasNext;
145
+ }
146
+ get hasResults() {
147
+ return Array.isArray(this.state.getLatestValue().items);
148
+ }
149
+ get isActive() {
150
+ return this.state.getLatestValue().isActive;
151
+ }
152
+ get isLoading() {
153
+ return this.state.getLatestValue().isLoading;
154
+ }
155
+ get initialState() {
156
+ return {
157
+ hasNext: true,
158
+ isActive: false,
159
+ isLoading: false,
160
+ items: void 0,
161
+ lastQueryError: void 0,
162
+ next: void 0,
163
+ offset: 0,
164
+ searchQuery: ""
165
+ };
166
+ }
167
+ get items() {
168
+ return this.state.getLatestValue().items;
169
+ }
170
+ get next() {
171
+ return this.state.getLatestValue().next;
172
+ }
173
+ get offset() {
174
+ return this.state.getLatestValue().offset;
175
+ }
176
+ get searchQuery() {
177
+ return this.state.getLatestValue().searchQuery;
178
+ }
179
+ getStateBeforeFirstQuery(newSearchString) {
180
+ const initialState = this.initialState;
181
+ const oldItems = this.items;
182
+ const items = this.resetOnNewSearchQuery ? initialState.items : oldItems;
183
+ return {
184
+ ...this.initialState,
185
+ items,
186
+ isActive: this.isActive,
187
+ isLoading: this.resetOnNewSearchQuery ? true : !oldItems,
188
+ searchQuery: newSearchString
189
+ };
190
+ }
191
+ getStateAfterQuery(stateUpdate, isFirstPage) {
192
+ const current = this.state.getLatestValue();
193
+ return {
194
+ ...current,
195
+ lastQueryError: void 0,
196
+ // reset lastQueryError that can be overridden by the stateUpdate
197
+ ...stateUpdate,
198
+ isLoading: false,
199
+ items: isFirstPage ? stateUpdate.items : [...this.items ?? [], ...stateUpdate.items || []]
200
+ };
201
+ }
202
+ prepareStateForQuery(newSearchString) {
203
+ const hasNewSearchQuery = typeof newSearchString !== "undefined";
204
+ const searchString = newSearchString ?? this.searchQuery;
205
+ if (hasNewSearchQuery) {
206
+ this.state.next(this.getStateBeforeFirstQuery(newSearchString ?? ""));
207
+ } else {
208
+ this.state.partialNext({ isLoading: true });
209
+ }
210
+ return { searchString, hasNewSearchQuery };
211
+ }
212
+ updatePaginationStateFromQuery(result) {
213
+ const { items, next } = result;
214
+ const stateUpdate = {};
215
+ if (Object.prototype.hasOwnProperty.call(result, "next")) {
216
+ stateUpdate.next = next;
217
+ stateUpdate.hasNext = !!next;
218
+ } else {
219
+ stateUpdate.offset = (this.offset ?? 0) + items.length;
220
+ stateUpdate.hasNext = items.length === this.pageSize;
221
+ }
222
+ return stateUpdate;
223
+ }
224
+ resetState() {
225
+ this.state.next(this.initialState);
226
+ }
227
+ resetStateAndActivate() {
228
+ this.resetState();
229
+ this.activate();
230
+ }
231
+ }
232
+ class BaseSearchSource extends BaseSearchSourceBase {
233
+ constructor(options) {
234
+ const { debounceMs } = { ...DEFAULT_SEARCH_SOURCE_OPTIONS, ...options };
235
+ super(options);
236
+ this.setDebounceOptions = ({ debounceMs: debounceMs2 }) => {
237
+ this.searchDebounced = index.debounce(this.executeQuery.bind(this), debounceMs2);
238
+ };
239
+ this.search = (searchQuery) => this.searchDebounced(searchQuery);
240
+ this.setDebounceOptions({ debounceMs });
241
+ }
242
+ async executeQuery(newSearchString) {
243
+ if (!this.canExecuteQuery(newSearchString)) return;
244
+ const { hasNewSearchQuery, searchString } = this.prepareStateForQuery(newSearchString);
245
+ let stateUpdate = {};
246
+ try {
247
+ const results = await this.query(searchString);
248
+ if (!results) return;
249
+ const { items } = results;
250
+ stateUpdate = this.updatePaginationStateFromQuery(results);
251
+ stateUpdate.items = await this.filterQueryResults(items);
252
+ } catch (e) {
253
+ stateUpdate.lastQueryError = e;
254
+ } finally {
255
+ this.state.next(this.getStateAfterQuery(stateUpdate, hasNewSearchQuery));
256
+ }
257
+ }
258
+ cancelScheduledQuery() {
259
+ this.searchDebounced.cancel();
260
+ }
261
+ }
262
+ class BaseSearchSourceSync extends BaseSearchSourceBase {
263
+ constructor(options) {
264
+ const { debounceMs } = { ...DEFAULT_SEARCH_SOURCE_OPTIONS, ...options };
265
+ super(options);
266
+ this.setDebounceOptions = ({ debounceMs: debounceMs2 }) => {
267
+ this.searchDebounced = index.debounce(this.executeQuery.bind(this), debounceMs2);
268
+ };
269
+ this.search = (searchQuery) => this.searchDebounced(searchQuery);
270
+ this.setDebounceOptions({ debounceMs });
271
+ }
272
+ executeQuery(newSearchString) {
273
+ if (!this.canExecuteQuery(newSearchString)) return;
274
+ const { hasNewSearchQuery, searchString } = this.prepareStateForQuery(newSearchString);
275
+ let stateUpdate = {};
276
+ try {
277
+ const results = this.query(searchString);
278
+ if (!results) return;
279
+ const { items } = results;
280
+ stateUpdate = this.updatePaginationStateFromQuery(results);
281
+ stateUpdate.items = this.filterQueryResults(items);
282
+ } catch (e) {
283
+ stateUpdate.lastQueryError = e;
284
+ } finally {
285
+ this.state.next(this.getStateAfterQuery(stateUpdate, hasNewSearchQuery));
286
+ }
287
+ }
288
+ cancelScheduledQuery() {
289
+ this.searchDebounced.cancel();
290
+ }
291
+ }
292
+ class ActivitySearchSource extends BaseSearchSource {
293
+ constructor(client, options) {
294
+ super(options);
295
+ this.type = "activity";
296
+ this.client = client;
297
+ }
298
+ async query(searchQuery) {
299
+ const { connected_user: connectedUser } = this.client.state.getLatestValue();
300
+ if (!connectedUser) return { items: [] };
301
+ const { activities: items, next } = await this.client.queryActivities({
302
+ sort: [{ direction: -1, field: "created_at" }],
303
+ ...!this.allowEmptySearchString || searchQuery.length > 0 ? { filter: { text: { $autocomplete: searchQuery } } } : {},
304
+ limit: 10,
305
+ next: this.next ?? void 0
306
+ });
307
+ return { items, next };
308
+ }
309
+ filterQueryResults(items) {
310
+ return items;
311
+ }
312
+ }
313
+ class FeedSearchSource extends BaseSearchSource {
314
+ constructor(client, options) {
315
+ super(options);
316
+ this.client = client;
317
+ this.feedGroupId = options?.groupId;
318
+ this.type = `${this.feedGroupId}-feed`;
319
+ }
320
+ async query(searchQuery) {
321
+ const { connected_user: connectedUser } = this.client.state.getLatestValue();
322
+ if (!connectedUser) return { items: [] };
323
+ const { feeds: items, next } = await this.client.queryFeeds({
324
+ filter: {
325
+ ...this.feedGroupId ? { group_id: this.feedGroupId } : {},
326
+ ...!this.allowEmptySearchString || searchQuery.length > 0 ? {
327
+ $or: [
328
+ { name: { $autocomplete: searchQuery } },
329
+ { description: { $autocomplete: searchQuery } },
330
+ { "created_by.name": { $autocomplete: searchQuery } }
331
+ ]
332
+ } : {}
333
+ },
334
+ next: this.next ?? void 0
335
+ });
336
+ return { items, next };
337
+ }
338
+ filterQueryResults(items) {
339
+ return items;
340
+ }
341
+ }
342
+ class UserSearchSource extends BaseSearchSource {
343
+ constructor(client, options) {
344
+ super(options);
345
+ this.type = "user";
346
+ this.client = client;
347
+ }
348
+ async query(searchQuery) {
349
+ const { connected_user: connectedUser } = this.client.state.getLatestValue();
350
+ if (!connectedUser) return { items: [] };
351
+ const { users: items } = await this.client.queryUsers({
352
+ payload: {
353
+ filter_conditions: {
354
+ ...!this.allowEmptySearchString || searchQuery.length > 0 ? {
355
+ name: {
356
+ $autocomplete: searchQuery
357
+ }
358
+ } : {}
359
+ }
360
+ }
361
+ });
362
+ return { items, next: void 0 };
363
+ }
364
+ filterQueryResults(items) {
365
+ return items;
366
+ }
367
+ }
368
+ exports.ChannelOwnCapability = index.ChannelOwnCapability;
369
+ exports.Constants = index.Constants;
370
+ exports.Feed = index.Feed;
371
+ exports.FeedOwnCapability = index.FeedOwnCapability;
372
+ exports.FeedsClient = index.FeedsClient;
373
+ exports.StreamApiError = index.StreamApiError;
374
+ exports.StreamPoll = index.StreamPoll;
375
+ exports.checkHasAnotherPage = index.checkHasAnotherPage;
376
+ exports.configureLoggers = index.configureLoggers;
377
+ exports.getLogger = index.getLogger;
378
+ exports.getStateUpdateQueueId = index.getStateUpdateQueueId;
379
+ exports.isCommentResponse = index.isCommentResponse;
380
+ exports.isFollowResponse = index.isFollowResponse;
381
+ exports.isImageFile = index.isImageFile;
382
+ exports.isReactionResponse = index.isReactionResponse;
383
+ exports.isVideoFile = index.isVideoFile;
384
+ exports.isVoteAnswer = index.isVoteAnswer;
385
+ exports.shouldUpdateState = index.shouldUpdateState;
386
+ exports.uniqueArrayMerge = index.uniqueArrayMerge;
387
+ exports.updateEntityInArray = index.updateEntityInArray;
388
+ Object.defineProperty(exports, "LogLevelEnum", {
389
+ enumerable: true,
390
+ get: () => loggerInternal.LogLevelEnum
391
+ });
392
+ Object.defineProperty(exports, "restoreDefaults", {
393
+ enumerable: true,
394
+ get: () => loggerInternal.restoreDefaults
395
+ });
396
+ exports.ActivitySearchSource = ActivitySearchSource;
397
+ exports.BaseSearchSource = BaseSearchSource;
398
+ exports.BaseSearchSourceSync = BaseSearchSourceSync;
399
+ exports.FeedSearchSource = FeedSearchSource;
400
+ exports.SearchController = SearchController;
401
+ exports.UserSearchSource = UserSearchSource;
402
+ Object.keys(stateStore).forEach((k) => {
403
+ if (k !== "default" && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
404
+ enumerable: true,
405
+ get: () => stateStore[k]
406
+ });
407
+ });
408
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/common/search/SearchController.ts","../../src/common/search/BaseSearchSource.ts","../../src/common/search/ActivitySearchSource.ts","../../src/common/search/FeedSearchSource.ts","../../src/common/search/UserSearchSource.ts"],"sourcesContent":["import { StateStore } from '@stream-io/state-store';\nimport type { SearchSource } from './BaseSearchSource';\n\nexport type SearchControllerState = {\n isActive: boolean;\n searchQuery: string;\n sources: SearchSource[];\n};\n\nexport type InternalSearchControllerState = {};\n\nexport type SearchControllerConfig = {\n // The controller will make sure there is always exactly one active source. Enabled by default.\n keepSingleActiveSource: boolean;\n};\n\nexport type SearchControllerOptions = {\n config?: Partial<SearchControllerConfig>;\n sources?: SearchSource[];\n};\n\nexport class SearchController {\n /**\n * Not intended for direct use by integrators, might be removed without notice resulting in\n * broken integrations.\n */\n _internalState: StateStore<InternalSearchControllerState>;\n state: StateStore<SearchControllerState>;\n config: SearchControllerConfig;\n\n constructor({ config, sources }: SearchControllerOptions = {}) {\n this.state = new StateStore<SearchControllerState>({\n isActive: false,\n searchQuery: '',\n sources: sources ?? [],\n });\n this._internalState = new StateStore<InternalSearchControllerState>({});\n this.config = { keepSingleActiveSource: true, ...config };\n }\n get hasNext() {\n return this.sources.some((source) => source.hasNext);\n }\n\n get sources() {\n return this.state.getLatestValue().sources;\n }\n\n get activeSources() {\n return this.state.getLatestValue().sources.filter((s) => s.isActive);\n }\n\n get isActive() {\n return this.state.getLatestValue().isActive;\n }\n\n get searchQuery() {\n return this.state.getLatestValue().searchQuery;\n }\n\n get searchSourceTypes(): Array<SearchSource['type']> {\n return this.sources.map((s) => s.type);\n }\n\n addSource = (source: SearchSource) => {\n this.state.partialNext({\n sources: [...this.sources, source],\n });\n };\n\n getSource = (sourceType: SearchSource['type']) =>\n this.sources.find((s) => s.type === sourceType);\n\n removeSource = (sourceType: SearchSource['type']) => {\n const newSources = this.sources.filter((s) => s.type !== sourceType);\n if (newSources.length === this.sources.length) return;\n this.state.partialNext({ sources: newSources });\n };\n\n activateSource = (sourceType: SearchSource['type']) => {\n const source = this.getSource(sourceType);\n if (!source || source.isActive) return;\n if (this.config.keepSingleActiveSource) {\n this.sources.forEach((s) => {\n if (s.type !== sourceType) {\n s.deactivate();\n }\n });\n }\n source.activate();\n this.state.partialNext({ sources: [...this.sources] });\n };\n\n deactivateSource = (sourceType: SearchSource['type']) => {\n const source = this.getSource(sourceType);\n if (!source?.isActive) return;\n if (this.activeSources.length === 1) return;\n source.deactivate();\n this.state.partialNext({ sources: [...this.sources] });\n };\n\n activate = () => {\n if (!this.activeSources.length) {\n const sourcesToActivate = this.config.keepSingleActiveSource\n ? this.sources.slice(0, 1)\n : this.sources;\n sourcesToActivate.forEach((s) => s.activate());\n }\n if (this.isActive) return;\n this.state.partialNext({ isActive: true });\n };\n\n search = async (searchQuery?: string) => {\n const searchedSources = this.activeSources;\n this.state.partialNext({\n searchQuery,\n });\n await Promise.all(\n searchedSources.map((source) => source.search(searchQuery)),\n );\n };\n\n cancelSearchQueries = () => {\n this.activeSources.forEach((s) => s.cancelScheduledQuery());\n };\n\n clear = () => {\n this.cancelSearchQueries();\n this.sources.forEach((source) =>\n source.state.next({ ...source.initialState, isActive: source.isActive }),\n );\n this.state.next((current) => ({\n ...current,\n isActive: true,\n queriesInProgress: [],\n searchQuery: '',\n }));\n };\n\n exit = () => {\n this.cancelSearchQueries();\n this.sources.forEach((source) =>\n source.state.next({ ...source.initialState, isActive: source.isActive }),\n );\n this.state.next((current) => ({\n ...current,\n isActive: false,\n queriesInProgress: [],\n searchQuery: '',\n }));\n };\n}\n","import { StateStore } from '@stream-io/state-store';\nimport { debounce, type DebouncedFunc } from '../utils';\nimport type {\n QueryReturnValue,\n SearchSourceOptions,\n SearchSourceState,\n SearchSourceType,\n} from './types';\n\nexport type DebounceOptions = {\n debounceMs: number;\n};\ntype DebouncedExecQueryFunction = DebouncedFunc<\n (searchString?: string) => Promise<void>\n>;\n\ninterface ISearchSource<T = any> {\n activate(): void;\n\n canExecuteQuery(newSearchString?: string): boolean;\n\n deactivate(): void;\n\n readonly hasNext: boolean;\n readonly hasResults: boolean;\n readonly initialState: SearchSourceState<T>;\n readonly isActive: boolean;\n readonly isLoading: boolean;\n readonly items: T[] | undefined;\n readonly lastQueryError: Error | undefined;\n readonly next: string | undefined | null;\n readonly offset: number | undefined;\n\n resetState(): void;\n\n readonly searchQuery: string;\n\n readonly state: StateStore<SearchSourceState<T>>;\n readonly type: SearchSourceType;\n}\n\nexport interface SearchSource<T = any> extends ISearchSource<T> {\n cancelScheduledQuery(): void;\n setDebounceOptions(options: DebounceOptions): void;\n search(text?: string): Promise<void> | undefined;\n}\n\nexport interface SearchSourceSync<T = any> extends ISearchSource<T> {\n cancelScheduledQuery(): void;\n setDebounceOptions(options: DebounceOptions): void;\n search(text?: string): void;\n}\n\nconst DEFAULT_SEARCH_SOURCE_OPTIONS: Required<SearchSourceOptions> = {\n debounceMs: 300,\n pageSize: 10,\n allowEmptySearchString: false,\n resetOnNewSearchQuery: true,\n} as const;\n\nabstract class BaseSearchSourceBase<T> implements ISearchSource<T> {\n state: StateStore<SearchSourceState<T>>;\n pageSize: number;\n protected allowEmptySearchString: boolean;\n protected resetOnNewSearchQuery: boolean;\n abstract readonly type: SearchSourceType;\n\n protected constructor(options?: SearchSourceOptions) {\n const { pageSize, allowEmptySearchString, resetOnNewSearchQuery } = {\n ...DEFAULT_SEARCH_SOURCE_OPTIONS,\n ...options,\n };\n this.pageSize = pageSize;\n this.allowEmptySearchString = allowEmptySearchString;\n this.resetOnNewSearchQuery = resetOnNewSearchQuery;\n this.state = new StateStore<SearchSourceState<T>>(this.initialState);\n }\n\n get lastQueryError() {\n return this.state.getLatestValue().lastQueryError;\n }\n\n get hasNext() {\n return this.state.getLatestValue().hasNext;\n }\n\n get hasResults() {\n return Array.isArray(this.state.getLatestValue().items);\n }\n\n get isActive() {\n return this.state.getLatestValue().isActive;\n }\n\n get isLoading() {\n return this.state.getLatestValue().isLoading;\n }\n\n get initialState() {\n return {\n hasNext: true,\n isActive: false,\n isLoading: false,\n items: undefined,\n lastQueryError: undefined,\n next: undefined,\n offset: 0,\n searchQuery: '',\n };\n }\n\n get items() {\n return this.state.getLatestValue().items;\n }\n\n get next() {\n return this.state.getLatestValue().next;\n }\n\n get offset() {\n return this.state.getLatestValue().offset;\n }\n\n get searchQuery() {\n return this.state.getLatestValue().searchQuery;\n }\n\n activate = () => {\n if (this.isActive) return;\n this.state.partialNext({ isActive: true });\n };\n\n deactivate = () => {\n if (!this.isActive) return;\n this.state.partialNext({ isActive: false });\n };\n\n canExecuteQuery = (newSearchString?: string) => {\n const hasNewSearchQuery = typeof newSearchString !== 'undefined';\n const searchString = newSearchString ?? this.searchQuery;\n return !!(\n this.isActive &&\n !this.isLoading &&\n (this.hasNext || hasNewSearchQuery) &&\n (this.allowEmptySearchString || searchString)\n );\n };\n\n protected getStateBeforeFirstQuery(\n newSearchString: string,\n ): SearchSourceState<T> {\n const initialState = this.initialState;\n const oldItems = this.items;\n\n const items = this.resetOnNewSearchQuery ? initialState.items : oldItems;\n return {\n ...this.initialState,\n items,\n isActive: this.isActive,\n isLoading: this.resetOnNewSearchQuery ? true : !oldItems,\n searchQuery: newSearchString,\n };\n }\n\n protected getStateAfterQuery(\n stateUpdate: Partial<SearchSourceState<T>>,\n isFirstPage: boolean,\n ): SearchSourceState<T> {\n const current = this.state.getLatestValue();\n return {\n ...current,\n lastQueryError: undefined, // reset lastQueryError that can be overridden by the stateUpdate\n ...stateUpdate,\n isLoading: false,\n items: isFirstPage\n ? stateUpdate.items\n : [...(this.items ?? []), ...(stateUpdate.items || [])],\n };\n }\n\n protected prepareStateForQuery(newSearchString?: string) {\n const hasNewSearchQuery = typeof newSearchString !== 'undefined';\n const searchString = newSearchString ?? this.searchQuery;\n\n if (hasNewSearchQuery) {\n this.state.next(this.getStateBeforeFirstQuery(newSearchString ?? ''));\n } else {\n this.state.partialNext({ isLoading: true });\n }\n\n return { searchString, hasNewSearchQuery };\n }\n\n protected updatePaginationStateFromQuery(result: QueryReturnValue<T>) {\n const { items, next } = result;\n\n const stateUpdate: Partial<SearchSourceState<T>> = {};\n if (Object.prototype.hasOwnProperty.call(result, 'next')) {\n stateUpdate.next = next;\n stateUpdate.hasNext = !!next;\n } else {\n stateUpdate.offset = (this.offset ?? 0) + items.length;\n stateUpdate.hasNext = items.length === this.pageSize;\n }\n\n return stateUpdate;\n }\n\n resetState() {\n this.state.next(this.initialState);\n }\n\n resetStateAndActivate() {\n this.resetState();\n this.activate();\n }\n}\n\nexport abstract class BaseSearchSource<T>\n extends BaseSearchSourceBase<T>\n implements SearchSource<T>\n{\n protected searchDebounced!: DebouncedExecQueryFunction;\n\n constructor(options?: SearchSourceOptions) {\n const { debounceMs } = { ...DEFAULT_SEARCH_SOURCE_OPTIONS, ...options };\n super(options);\n this.setDebounceOptions({ debounceMs });\n }\n\n protected abstract query(searchQuery: string): Promise<QueryReturnValue<T>>;\n\n protected abstract filterQueryResults(items: T[]): T[] | Promise<T[]>;\n\n setDebounceOptions = ({ debounceMs }: DebounceOptions) => {\n this.searchDebounced = debounce(this.executeQuery.bind(this), debounceMs);\n };\n\n async executeQuery(newSearchString?: string) {\n if (!this.canExecuteQuery(newSearchString)) return;\n\n const { hasNewSearchQuery, searchString } =\n this.prepareStateForQuery(newSearchString);\n\n let stateUpdate: Partial<SearchSourceState<T>> = {};\n try {\n const results = await this.query(searchString);\n if (!results) return;\n\n const { items } = results;\n stateUpdate = this.updatePaginationStateFromQuery(results);\n stateUpdate.items = await this.filterQueryResults(items);\n } catch (e) {\n stateUpdate.lastQueryError = e as Error;\n } finally {\n this.state.next(this.getStateAfterQuery(stateUpdate, hasNewSearchQuery));\n }\n }\n\n search = (searchQuery?: string) => this.searchDebounced(searchQuery);\n\n cancelScheduledQuery() {\n this.searchDebounced.cancel();\n }\n}\n\nexport abstract class BaseSearchSourceSync<T>\n extends BaseSearchSourceBase<T>\n implements SearchSourceSync<T>\n{\n protected searchDebounced!: DebouncedExecQueryFunction;\n\n constructor(options?: SearchSourceOptions) {\n const { debounceMs } = { ...DEFAULT_SEARCH_SOURCE_OPTIONS, ...options };\n super(options);\n this.setDebounceOptions({ debounceMs });\n }\n\n protected abstract query(searchQuery: string): QueryReturnValue<T>;\n\n protected abstract filterQueryResults(items: T[]): T[];\n\n setDebounceOptions = ({ debounceMs }: DebounceOptions) => {\n this.searchDebounced = debounce(this.executeQuery.bind(this), debounceMs);\n };\n\n executeQuery(newSearchString?: string) {\n if (!this.canExecuteQuery(newSearchString)) return;\n\n const { hasNewSearchQuery, searchString } =\n this.prepareStateForQuery(newSearchString);\n\n let stateUpdate: Partial<SearchSourceState<T>> = {};\n try {\n const results = this.query(searchString);\n if (!results) return;\n\n const { items } = results;\n stateUpdate = this.updatePaginationStateFromQuery(results);\n stateUpdate.items = this.filterQueryResults(items);\n } catch (e) {\n stateUpdate.lastQueryError = e as Error;\n } finally {\n this.state.next(this.getStateAfterQuery(stateUpdate, hasNewSearchQuery));\n }\n }\n\n search = (searchQuery?: string) => this.searchDebounced(searchQuery);\n\n cancelScheduledQuery() {\n this.searchDebounced.cancel();\n }\n}\n","import { BaseSearchSource } from './BaseSearchSource';\nimport type { SearchSourceOptions } from './types';\n\nimport { FeedsClient } from '../../feeds-client';\nimport { ActivityResponse } from '../../gen/models';\n\nexport class ActivitySearchSource extends BaseSearchSource<ActivityResponse> {\n readonly type = 'activity' as const;\n private readonly client: FeedsClient;\n\n constructor(client: FeedsClient, options?: SearchSourceOptions) {\n super(options);\n this.client = client;\n }\n\n protected async query(searchQuery: string) {\n const { connected_user: connectedUser } =\n this.client.state.getLatestValue();\n if (!connectedUser) return { items: [] };\n\n const { activities: items, next } = await this.client.queryActivities({\n sort: [{ direction: -1, field: 'created_at' }],\n ...(!this.allowEmptySearchString || searchQuery.length > 0\n ? { filter: { text: { $autocomplete: searchQuery } } }\n : {}),\n limit: 10,\n next: this.next ?? undefined,\n });\n\n return { items, next };\n }\n\n protected filterQueryResults(items: ActivityResponse[]) {\n return items;\n }\n}\n","import { BaseSearchSource } from './BaseSearchSource';\nimport type { SearchSourceOptions } from './types';\n\nimport { FeedsClient } from '../../feeds-client';\nimport { Feed } from '../../feed';\n\nexport type FeedSearchSourceOptions = SearchSourceOptions & {\n groupId?: string;\n};\n\nexport class FeedSearchSource extends BaseSearchSource<Feed> {\n readonly type: string;\n readonly feedGroupId?: string | undefined;\n private readonly client: FeedsClient;\n\n constructor(client: FeedsClient, options?: FeedSearchSourceOptions) {\n super(options);\n this.client = client;\n this.feedGroupId = options?.groupId;\n this.type = `${this.feedGroupId}-feed`;\n }\n\n protected async query(searchQuery: string) {\n const { connected_user: connectedUser } =\n this.client.state.getLatestValue();\n if (!connectedUser) return { items: [] };\n\n const { feeds: items, next } = await this.client.queryFeeds({\n filter: {\n ...(this.feedGroupId ? { group_id: this.feedGroupId } : {}),\n ...(!this.allowEmptySearchString || searchQuery.length > 0\n ? {\n $or: [\n { name: { $autocomplete: searchQuery } },\n { description: { $autocomplete: searchQuery } },\n { 'created_by.name': { $autocomplete: searchQuery } },\n ],\n }\n : {}),\n },\n next: this.next ?? undefined,\n });\n\n return { items, next };\n }\n\n protected filterQueryResults(items: Feed[]) {\n return items;\n }\n}\n","import { BaseSearchSource } from './BaseSearchSource';\nimport type { SearchSourceOptions } from './types';\n\nimport { FeedsClient } from '../../feeds-client';\nimport { UserResponse } from '../../gen/models';\n\nexport class UserSearchSource extends BaseSearchSource<UserResponse> {\n readonly type = 'user' as const;\n private readonly client: FeedsClient;\n\n constructor(client: FeedsClient, options?: SearchSourceOptions) {\n super(options);\n this.client = client;\n }\n\n protected async query(searchQuery: string) {\n const { connected_user: connectedUser } =\n this.client.state.getLatestValue();\n if (!connectedUser) return { items: [] };\n\n const { users: items } = await this.client.queryUsers({\n payload: {\n filter_conditions: {\n ...(!this.allowEmptySearchString || searchQuery.length > 0\n ? {\n name: {\n $autocomplete: searchQuery,\n },\n }\n : {}),\n },\n },\n });\n\n return { items, next: undefined };\n }\n\n protected filterQueryResults(items: UserResponse[]) {\n return items;\n }\n}\n"],"names":["StateStore","debounceMs","debounce"],"mappings":"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"}