@stream-io/feeds-client 0.3.37 → 0.3.39

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 +19 -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 +30 -8
  5. package/dist/cjs/react-bindings.js.map +1 -1
  6. package/dist/es/index.mjs +2 -2
  7. package/dist/es/index.mjs.map +1 -1
  8. package/dist/es/react-bindings.mjs +30 -8
  9. package/dist/es/react-bindings.mjs.map +1 -1
  10. package/dist/{feeds-client-DEV6_pkH.js → feeds-client-CT1eKizN.js} +73 -22
  11. package/dist/feeds-client-CT1eKizN.js.map +1 -0
  12. package/dist/{feeds-client-CExHb6GS.mjs → feeds-client-DnryJ-rf.mjs} +73 -22
  13. package/dist/feeds-client-DnryJ-rf.mjs.map +1 -0
  14. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  15. package/dist/types/bindings/react/contexts/StreamActivityWithStateUpdatesContext.d.ts +13 -0
  16. package/dist/types/bindings/react/contexts/StreamActivityWithStateUpdatesContext.d.ts.map +1 -0
  17. package/dist/types/bindings/react/hooks/feed-state-hooks/useActivityComments.d.ts +1 -1
  18. package/dist/types/bindings/react/hooks/feed-state-hooks/useActivityComments.d.ts.map +1 -1
  19. package/dist/types/bindings/react/hooks/useCreateFeedsClient.d.ts +3 -3
  20. package/dist/types/bindings/react/hooks/useCreateFeedsClient.d.ts.map +1 -1
  21. package/dist/types/bindings/react/index.d.ts +2 -0
  22. package/dist/types/bindings/react/index.d.ts.map +1 -1
  23. package/dist/types/bindings/react/wrappers/StreamActivityWithStateUpdates.d.ts +13 -0
  24. package/dist/types/bindings/react/wrappers/StreamActivityWithStateUpdates.d.ts.map +1 -0
  25. package/dist/types/common/real-time/StableWSConnection.d.ts +3 -3
  26. package/dist/types/common/real-time/StableWSConnection.d.ts.map +1 -1
  27. package/dist/types/feed/feed.d.ts +3 -3
  28. package/dist/types/feed/feed.d.ts.map +1 -1
  29. package/dist/types/feeds-client/feeds-client.d.ts +10 -15
  30. package/dist/types/feeds-client/feeds-client.d.ts.map +1 -1
  31. package/dist/types/gen/feeds/FeedsApi.d.ts +4 -1
  32. package/dist/types/gen/feeds/FeedsApi.d.ts.map +1 -1
  33. package/dist/types/gen/model-decoders/event-decoder-mapping.d.ts.map +1 -1
  34. package/dist/types/gen/models/index.d.ts +20 -0
  35. package/dist/types/gen/models/index.d.ts.map +1 -1
  36. package/package.json +1 -1
  37. package/src/bindings/react/contexts/StreamActivityWithStateUpdatesContext.tsx +19 -0
  38. package/src/bindings/react/hooks/feed-state-hooks/useActivityComments.ts +6 -3
  39. package/src/bindings/react/hooks/useCreateFeedsClient.ts +23 -12
  40. package/src/bindings/react/index.ts +2 -0
  41. package/src/bindings/react/wrappers/StreamActivityWithStateUpdates.tsx +24 -0
  42. package/src/feed/feed.ts +9 -1
  43. package/src/feeds-client/feeds-client.ts +52 -30
  44. package/src/gen/feeds/FeedsApi.ts +26 -0
  45. package/src/gen/model-decoders/decoders.ts +18 -0
  46. package/src/gen/model-decoders/event-decoder-mapping.ts +3 -0
  47. package/src/gen/models/index.ts +28 -0
  48. package/dist/feeds-client-CExHb6GS.mjs.map +0 -1
  49. package/dist/feeds-client-DEV6_pkH.js.map +0 -1
@@ -1,14 +1,20 @@
1
1
  import { useStateStore } from "@stream-io/state-store/react-bindings";
2
2
  export * from "@stream-io/state-store/react-bindings";
3
3
  import { useState, useEffect, createContext, useContext, useRef, useCallback, useMemo } from "react";
4
- import { F as FeedsClient, g as isCommentResponse, c as checkHasAnotherPage } from "../feeds-client-CExHb6GS.mjs";
4
+ import { F as FeedsClient, g as isCommentResponse, c as checkHasAnotherPage } from "../feeds-client-DnryJ-rf.mjs";
5
5
  import { jsx } from "react/jsx-runtime";
6
6
  const useCreateFeedsClient = ({
7
7
  apiKey,
8
8
  tokenOrProvider,
9
- userData,
9
+ userData: userDataOrAnonymous,
10
10
  options
11
11
  }) => {
12
+ const userData = userDataOrAnonymous === "anonymous" ? void 0 : userDataOrAnonymous;
13
+ if (userDataOrAnonymous !== "anonymous" && !tokenOrProvider) {
14
+ throw new Error(
15
+ "Token provider can only be omitted when connecting anonymous user"
16
+ );
17
+ }
12
18
  const [client, setClient] = useState(null);
13
19
  const [error, setError] = useState(null);
14
20
  const [cachedUserData, setCachedUserData] = useState(userData);
@@ -16,16 +22,16 @@ const useCreateFeedsClient = ({
16
22
  if (error) {
17
23
  throw error;
18
24
  }
19
- if (userData.id !== cachedUserData.id) {
25
+ if (userData?.id !== cachedUserData?.id) {
20
26
  setCachedUserData(userData);
21
27
  }
22
28
  useEffect(() => {
23
29
  const _client = new FeedsClient(apiKey, cachedOptions);
24
- const connectionPromise = _client.connectUser(cachedUserData, tokenOrProvider).then(() => {
30
+ const connectionPromise = cachedUserData ? _client.connectUser(cachedUserData, tokenOrProvider).then(() => {
25
31
  setError(null);
26
32
  }).catch((err) => {
27
33
  setError(err);
28
- });
34
+ }) : _client.connectAnonymous();
29
35
  setClient(_client);
30
36
  return () => {
31
37
  setClient(null);
@@ -300,17 +306,23 @@ const useIsAggregatedActivitySeen = ({
300
306
  [lastSeenAt, aggregatedActivity.updated_at, seenActivities, group]
301
307
  );
302
308
  };
309
+ const StreamActivityWithStateUpdatesContext = createContext(void 0);
310
+ const useActivityWithStateUpdatesContext = () => {
311
+ return useContext(StreamActivityWithStateUpdatesContext);
312
+ };
303
313
  const canLoadComments = (feedOrActivity) => {
304
314
  return "loadNextPageCommentReplies" in feedOrActivity && "loadNextPageActivityComments" in feedOrActivity;
305
315
  };
306
316
  function useActivityComments({
307
317
  feed: feedFromProps,
308
318
  parentComment,
309
- activity
310
- }) {
319
+ activity: activityFromProps
320
+ } = {}) {
311
321
  const feedFromContext = useFeedContext();
312
322
  const feed = feedFromProps ?? feedFromContext;
313
- const feedOrActivity = feed ?? activity;
323
+ const activityFromContext = useActivityWithStateUpdatesContext();
324
+ const activity = activityFromProps ?? activityFromContext;
325
+ const feedOrActivity = activity && canLoadComments(activity) ? activity : feed;
314
326
  if (!feedOrActivity) {
315
327
  throw new Error("Feed or activity is required");
316
328
  }
@@ -431,6 +443,13 @@ const StreamFeed = ({
431
443
  return /* @__PURE__ */ jsx(StreamFeedContext.Provider, { value: feed, children });
432
444
  };
433
445
  StreamFeed.displayName = "StreamFeed";
446
+ const StreamActivityWithStateUpdates = ({
447
+ activityWithStateUpdates,
448
+ children
449
+ }) => {
450
+ return /* @__PURE__ */ jsx(StreamActivityWithStateUpdatesContext.Provider, { value: activityWithStateUpdates, children });
451
+ };
452
+ StreamActivityWithStateUpdates.displayName = "StreamActivityWithStateUpdates";
434
453
  const StreamSearch = ({
435
454
  searchController,
436
455
  children
@@ -446,6 +465,8 @@ const StreamSearchResults = ({
446
465
  };
447
466
  StreamSearchResults.displayName = "StreamSearchResults";
448
467
  export {
468
+ StreamActivityWithStateUpdates,
469
+ StreamActivityWithStateUpdatesContext,
449
470
  StreamFeed,
450
471
  StreamFeedContext,
451
472
  StreamFeeds,
@@ -455,6 +476,7 @@ export {
455
476
  StreamSearchResults,
456
477
  StreamSearchResultsContext,
457
478
  useActivityComments,
479
+ useActivityWithStateUpdatesContext,
458
480
  useAggregatedActivities,
459
481
  useClientConnectedUser,
460
482
  useComments,
@@ -1 +1 @@
1
- {"version":3,"file":"react-bindings.mjs","sources":["../../src/bindings/react/hooks/useCreateFeedsClient.ts","../../src/bindings/react/contexts/StreamFeedsContext.tsx","../../src/bindings/react/hooks/client-state-hooks/useClientConnectedUser.ts","../../src/bindings/react/hooks/client-state-hooks/useWsConnectionState.ts","../../src/bindings/react/contexts/StreamFeedContext.tsx","../../src/bindings/react/hooks/internal/useStableCallback.ts","../../src/bindings/react/hooks/feed-state-hooks/useFeedActivities.ts","../../src/bindings/react/hooks/feed-state-hooks/useComments.ts","../../src/bindings/react/hooks/feed-state-hooks/useOwnCapabilities.ts","../../src/bindings/react/hooks/feed-state-hooks/useFollowers.ts","../../src/bindings/react/hooks/feed-state-hooks/useFollowing.ts","../../src/bindings/react/hooks/feed-state-hooks/useFeedMetadata.ts","../../src/bindings/react/hooks/feed-state-hooks/useOwnFollows.ts","../../src/bindings/react/hooks/feed-state-hooks/useNotificationStatus.ts","../../src/bindings/react/hooks/feed-state-hooks/useAggregatedActivities.ts","../../src/bindings/react/hooks/feed-state-hooks/useIsAggregatedActivityRead.ts","../../src/bindings/react/hooks/feed-state-hooks/useIsAggregatedActivitySeen.ts","../../src/bindings/react/hooks/feed-state-hooks/useActivityComments.ts","../../src/bindings/react/hooks/feed-state-hooks/useOwnFollowings.ts","../../src/bindings/react/contexts/StreamSearchResultsContext.tsx","../../src/bindings/react/hooks/search-state-hooks/useSearchResult.ts","../../src/bindings/react/contexts/StreamSearchContext.tsx","../../src/bindings/react/hooks/search-state-hooks/useSearchQuery.ts","../../src/bindings/react/hooks/search-state-hooks/useSearchSources.ts","../../src/bindings/react/wrappers/StreamFeeds.tsx","../../src/bindings/react/wrappers/StreamFeed.tsx","../../src/bindings/react/wrappers/StreamSearch.tsx","../../src/bindings/react/wrappers/StreamSearchResults.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport { FeedsClient } from '../../../feeds-client';\nimport type { TokenOrProvider } from '../../../types';\nimport type { UserRequest } from '../../../gen/models';\nimport type { FeedsClientOptions } from '../../../common/types';\n\n/**\n * A React hook to create, connect and return an instance of `FeedsClient`.\n */\nexport const useCreateFeedsClient = ({\n apiKey,\n tokenOrProvider,\n userData,\n options,\n}: {\n apiKey: string;\n tokenOrProvider: TokenOrProvider;\n userData: UserRequest;\n options?: FeedsClientOptions;\n}) => {\n const [client, setClient] = useState<FeedsClient | null>(null);\n const [error, setError] = useState<Error | null>(null);\n const [cachedUserData, setCachedUserData] = useState(userData);\n\n const [cachedOptions] = useState(options);\n\n if (error) {\n throw error;\n }\n\n if (userData.id !== cachedUserData.id) {\n setCachedUserData(userData);\n }\n\n useEffect(() => {\n const _client = new FeedsClient(apiKey, cachedOptions);\n\n const connectionPromise = _client\n .connectUser(cachedUserData, tokenOrProvider)\n .then(() => {\n setError(null);\n })\n .catch((err) => {\n setError(err);\n });\n\n setClient(_client);\n\n return () => {\n setClient(null);\n connectionPromise\n .then(() => {\n setError(null);\n return _client.disconnectUser();\n })\n .catch((err) => {\n setError(err);\n });\n };\n }, [apiKey, cachedUserData, cachedOptions, tokenOrProvider]);\n\n return client;\n};\n","import { createContext, useContext } from 'react';\n\nimport type { FeedsClient } from '../../../feeds-client';\n\nexport const StreamFeedsContext = createContext<FeedsClient | undefined>(undefined);\n\n/**\n * The props for the StreamFeedsProvider component.\n */\nexport type StreamFeedsContextProps = {\n /**\n * The client instance to provide to the component tree.\n */\n client: FeedsClient;\n};\n\n/**\n * Hook to access the nearest FeedsClient instance.\n */\nexport const useFeedsClient = () => {\n return useContext(StreamFeedsContext);\n};\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedsClient } from '../../contexts/StreamFeedsContext';\nimport type { FeedsClientState } from '../../../../feeds-client';\n\n/**\n * A React hook that returns the currently connected user on a `FeedsClient` instance and null otherwise.\n */\nexport const useClientConnectedUser = () => {\n const client = useFeedsClient();\n\n const { user } = useStateStore(client?.state, selector) ?? {};\n\n return user;\n};\n\nconst selector = (nextState: FeedsClientState) => ({\n user: nextState.connected_user,\n});\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedsClient } from '../../contexts/StreamFeedsContext';\nimport type { FeedsClientState } from '../../../../feeds-client';\n\n/**\n * A React hook that returns the websocket connection state of `FeedsClient`.\n */\nexport const useWsConnectionState = () => {\n const client = useFeedsClient();\n\n const { is_healthy } = useStateStore(client?.state, selector) ?? {}\n\n return { is_healthy };\n};\n\nconst selector = (nextState: FeedsClientState) => ({\n is_healthy: nextState.is_ws_connection_healthy,\n});\n","import { createContext, useContext } from 'react';\n\nimport type { Feed } from '../../../feed';\n\nexport const StreamFeedContext = createContext<Feed | undefined>(undefined);\n\n/**\n * The props for the StreamFeedProvider component.\n */\nexport type StreamFeedContextProps = {\n feed: Feed;\n};\n\n/**\n * Hook to access the nearest Feed instance.\n */\nexport const useFeedContext = () => {\n return useContext(StreamFeedContext);\n};\n","import { useCallback, useRef } from 'react';\n\nexport type StableCallback<A extends unknown[], R> = (...args: A) => R;\n\n/**\n * A utility hook implementing a stable callback. It takes in an unstable method that\n * is supposed to be invoked somewhere deeper in the DOM tree without making it\n * change its reference every time the parent component rerenders. It will also return\n * the value of the callback if it does return one.\n * A common use-case would be having a function whose invocation depends on state\n * somewhere high up in the DOM tree and wanting to use the same function deeper\n * down, for example in a leaf node and simply using useCallback results in\n * cascading dependency hell. If we wrap it in useStableCallback, we would be able\n * to:\n * - Use the same function as a dependency of another hook (since it is stable)\n * - Still invoke it and get the latest state\n *\n * **Caveats:**\n * - Never wrap a function that is supposed to return a React.ReactElement in\n * useStableCallback, since React will not know that the DOM needs to be updated\n * whenever the callback value changes (for example, renderItem from FlatList must\n * never be wrapped in this hook)\n * - Always prefer using a standard useCallback/stable function wherever possible\n * (the purpose of useStableCallback is to bridge the gap between top level contexts\n * and cascading rereders in downstream components - **not** as an escape hatch)\n * @param callback - the callback we want to stabilize\n */\nexport const useStableCallback = <A extends unknown[], R>(\n callback: StableCallback<A, R>,\n): StableCallback<A, R> => {\n const ref = useRef(callback);\n ref.current = callback;\n\n return useCallback<StableCallback<A, R>>((...args) => {\n return ref.current(...args);\n }, []);\n};\n","import { useMemo } from 'react';\nimport { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport { useStableCallback } from '../internal';\nimport type { Feed, FeedState } from '../../../../feed';\n\n/**\n * A React hook that returns a reactive object containing the current activities,\n * loading state and whether there is a next page to paginate to or not.\n */\nexport const useFeedActivities = (feedFromProps?: Feed) => {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n const data = useStateStore(feed?.state, selector);\n\n const loadNextPage = useStableCallback(async () => {\n if (!feed || !data?.has_next_page || data?.is_loading) {\n return;\n }\n\n await feed.getNextPage();\n });\n\n return useMemo(() => ({ ...data, loadNextPage }), [data, loadNextPage]);\n};\n\nconst selector = ({\n is_loading_activities,\n next,\n activities = [],\n}: FeedState) => ({\n is_loading: is_loading_activities,\n has_next_page: typeof next !== 'undefined',\n activities,\n});\n","import { useCallback, useMemo } from 'react';\nimport { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport { checkHasAnotherPage, isCommentResponse } from '../../../../utils';\nimport type { ActivityResponse, CommentResponse } from '../../../../gen/models';\nimport type { Feed, FeedState } from '../../../../feed';\nimport type { CommentParent } from '../../../../types';\n\ntype UseCommentsReturnType<T extends ActivityResponse | CommentResponse> = {\n comments: NonNullable<\n FeedState['comments_by_entity_id'][T['id']]\n >['comments'];\n comments_pagination: NonNullable<\n FeedState['comments_by_entity_id'][T['id']]\n >['pagination'];\n has_next_page: boolean;\n is_loading_next_page: boolean;\n loadNextPage: (\n request?: T extends CommentResponse\n ? Parameters<Feed['loadNextPageCommentReplies']>[1]\n : Parameters<Feed['loadNextPageActivityComments']>[1],\n ) => Promise<void>;\n};\n\n/**\n * @deprecated Use `useActivityComments` instead.\n * @param\n */\nexport function useComments<T extends CommentParent>(_: {\n feed: Feed;\n parent: T;\n}): UseCommentsReturnType<T>;\nexport function useComments<T extends CommentParent>(_: {\n feed?: Feed;\n parent: T;\n}): UseCommentsReturnType<T> | undefined;\nexport function useComments<T extends CommentParent>({\n feed: feedFromProps,\n parent,\n}: {\n feed?: Feed;\n /**\n * The parent (activity or comment) for which to fetch comments.\n */\n parent: T;\n}) {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n const selector = useCallback(\n (state: FeedState) => ({\n comments: state.comments_by_entity_id?.[parent.id]?.comments,\n comments_pagination: state.comments_by_entity_id?.[parent.id]?.pagination,\n }),\n [parent.id],\n );\n\n const data = useStateStore(feed?.state, selector);\n\n const loadNextPage = useMemo<\n UseCommentsReturnType<T>['loadNextPage'] | undefined\n >(() => {\n if (!feed) return undefined;\n\n return (request) => {\n if (isCommentResponse(parent)) {\n return feed.loadNextPageCommentReplies(parent, request);\n } else {\n return feed.loadNextPageActivityComments(parent, request);\n }\n };\n }, [feed, parent]);\n\n return useMemo(() => {\n if (!data) {\n return undefined;\n }\n\n return {\n ...data,\n has_next_page: checkHasAnotherPage(\n data.comments,\n data.comments_pagination?.next,\n ),\n is_loading_next_page:\n data?.comments_pagination?.loading_next_page ?? false,\n loadNextPage,\n };\n }, [data, loadNextPage]);\n}\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport type { Feed, FeedState } from '../../../../feed';\nimport type { FeedOwnCapability } from '../../../../gen/models';\nimport { useFeedsClient } from '../../contexts/StreamFeedsContext';\n\nconst stableEmptyArray: readonly FeedOwnCapability[] = [];\n\nconst selector = (currentState: FeedState) => {\n return {\n feedOwnCapabilities: currentState.own_capabilities ?? stableEmptyArray,\n };\n};\n\nexport const useOwnCapabilities = (feedFromProps?: Feed | string) => {\n const client = useFeedsClient();\n const feedFromContext = useFeedContext();\n let feed = feedFromProps ?? feedFromContext;\n if (typeof feed === 'string') {\n const [groupId, id] = feed.split(':');\n feed = groupId && id ? client?.feed(groupId, id) : undefined;\n }\n\n const { feedOwnCapabilities = stableEmptyArray } =\n useStateStore(feed?.state, selector) ?? {};\n\n return feedOwnCapabilities;\n};\n","import { useCallback, useMemo } from 'react';\nimport { useStateStore } from '@stream-io/state-store/react-bindings';\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport type { Feed, FeedState } from '../../../../feed';\nimport { checkHasAnotherPage } from '../../../../utils';\n\nconst selector = ({\n follower_count,\n followers,\n followers_pagination,\n}: FeedState) => ({\n follower_count,\n followers,\n followers_pagination,\n});\n\ntype UseFollowersReturnType = ReturnType<typeof selector> & {\n is_loading_next_page: boolean;\n has_next_page: boolean;\n loadNextPage: (\n ...options: Parameters<Feed['loadNextPageFollowers']>\n ) => Promise<void>;\n};\n\nexport function useFollowers(feed: Feed): UseFollowersReturnType;\nexport function useFollowers(feed?: Feed): UseFollowersReturnType | undefined;\nexport function useFollowers(feedFromProps?: Feed) {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n const data = useStateStore(feed?.state, selector);\n\n const loadNextPage = useCallback(\n (...options: Parameters<Feed['loadNextPageFollowers']>) =>\n feed?.loadNextPageFollowers(...options),\n [feed],\n );\n\n return useMemo(() => {\n if (!data) {\n return undefined;\n }\n\n return {\n ...data,\n is_loading_next_page:\n data.followers_pagination?.loading_next_page ?? false,\n has_next_page: checkHasAnotherPage(\n data.followers,\n data.followers_pagination?.next,\n ),\n loadNextPage,\n };\n }, [data, loadNextPage]);\n}\n","import { useCallback, useMemo } from 'react';\nimport { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport { checkHasAnotherPage } from '../../../../utils';\nimport type { Feed, FeedState } from '../../../../feed';\n\nconst selector = ({\n following_count,\n following,\n following_pagination,\n}: FeedState) => ({\n following_count,\n following,\n following_pagination,\n});\n\ntype UseFollowingReturnType = ReturnType<typeof selector> & {\n is_loading_next_page: boolean;\n has_next_page: boolean;\n loadNextPage: (\n ...options: Parameters<Feed['loadNextPageFollowers']>\n ) => Promise<void>;\n};\n\nexport function useFollowing(feed: Feed): UseFollowingReturnType;\nexport function useFollowing(feed?: Feed): UseFollowingReturnType | undefined;\nexport function useFollowing(feedFromProps?: Feed) {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n const data = useStateStore(feed?.state, selector);\n\n const loadNextPage = useCallback(\n (...options: Parameters<Feed['loadNextPageFollowing']>) =>\n feed?.loadNextPageFollowing(...options),\n [feed],\n );\n\n return useMemo(() => {\n if (!data) {\n return undefined;\n }\n\n return {\n ...data,\n is_loading_next_page:\n data.following_pagination?.loading_next_page ?? false,\n has_next_page: checkHasAnotherPage(\n data.following,\n data.following_pagination?.next,\n ),\n loadNextPage,\n };\n }, [data, loadNextPage]);\n}\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport type { Feed, FeedState } from '../../../../feed';\n\n/**\n * A React hook that returns a reactive object containing some often used\n * metadata for a feed.\n */\nexport const useFeedMetadata = (feedFromProps?: Feed) => {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n return useStateStore(feed?.state, selector);\n};\n\nconst selector = ({\n follower_count = 0,\n following_count = 0,\n created_by,\n created_at,\n updated_at,\n}: FeedState) => ({\n created_by,\n follower_count,\n following_count,\n created_at,\n updated_at,\n});\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport type { Feed, FeedState } from '../../../../feed';\n\n/**\n * A React hook that returns a reactive array of feeds that the current user\n * owns and are following the respective feed that we are observing.\n */\nexport const useOwnFollows = (feedFromProps?: Feed) => {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n return useStateStore(feed?.state, selector);\n};\n\nconst selector = ({ own_follows }: FeedState) => ({\n own_follows,\n});\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport type { Feed, FeedState } from '../../../../feed';\nimport type { NotificationStatusResponse } from '../../../../gen/models';\n\nconst selector = ({ notification_status }: FeedState) =>\n ({\n unread: notification_status?.unread ?? 0,\n unseen: notification_status?.unseen ?? 0,\n last_read_at: notification_status?.last_read_at,\n last_seen_at: notification_status?.last_seen_at,\n read_activities: notification_status?.read_activities,\n seen_activities: notification_status?.seen_activities,\n }) satisfies NotificationStatusResponse;\n\ntype UseNotificationStatusReturnType = ReturnType<typeof selector>;\n\nexport function useNotificationStatus(\n feed: Feed,\n): UseNotificationStatusReturnType;\nexport function useNotificationStatus(\n feed?: Feed,\n): UseNotificationStatusReturnType | undefined;\nexport function useNotificationStatus(feedFromProps?: Feed) {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n return useStateStore(feed?.state, selector);\n}\n","import { useMemo } from 'react';\nimport { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport { useStableCallback } from '../internal';\nimport type { Feed, FeedState } from '../../../../feed';\n\nconst selector = ({\n is_loading_activities,\n next,\n aggregated_activities = [],\n}: FeedState) => ({\n is_loading: is_loading_activities,\n has_next_page: typeof next !== 'undefined',\n aggregated_activities,\n});\n\ntype UseAggregatedActivitiesReturnType = ReturnType<typeof selector> & {\n loadNextPage: () => Promise<void>;\n};\n\n/**\n * A React hook that returns a reactive object containing the current aggregated activities,\n * loading state and whether there is a next page to paginate to or not.\n */\nexport function useAggregatedActivities(\n feedFromProps: Feed,\n): UseAggregatedActivitiesReturnType;\nexport function useAggregatedActivities(\n feedFromProps?: Feed,\n): UseAggregatedActivitiesReturnType | undefined;\nexport function useAggregatedActivities(feedFromProps?: Feed) {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n const data = useStateStore(feed?.state, selector);\n\n const loadNextPage = useStableCallback(async () => {\n if (!feed || !data?.has_next_page || data?.is_loading) {\n return;\n }\n\n await feed.getNextPage();\n });\n\n return useMemo(\n () => (data ? { ...data, loadNextPage } : undefined),\n [data, loadNextPage],\n );\n}\n","import { useMemo } from 'react';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport { useNotificationStatus } from './useNotificationStatus';\nimport type { Feed } from '../../../../feed';\nimport type { AggregatedActivityResponse } from '../../../../gen/models';\n\nexport const useIsAggregatedActivityRead = ({\n feed: feedFromProps,\n aggregatedActivity,\n}: {\n feed?: Feed;\n aggregatedActivity: AggregatedActivityResponse;\n}) => {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n const { read_activities: readActivities, last_read_at: lastReadAt } =\n useNotificationStatus(feed) ?? {};\n\n const group = aggregatedActivity.group;\n\n return useMemo(\n () =>\n (lastReadAt &&\n aggregatedActivity.updated_at.getTime() <= lastReadAt.getTime()) ||\n (readActivities ?? []).includes(group),\n [lastReadAt, aggregatedActivity.updated_at, readActivities, group],\n );\n};\n","import { useMemo } from 'react';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport { useNotificationStatus } from './useNotificationStatus';\nimport type { Feed } from '../../../../feed';\nimport type { AggregatedActivityResponse } from '../../../../gen/models';\n\nexport const useIsAggregatedActivitySeen = ({\n feed: feedFromProps,\n aggregatedActivity,\n}: {\n feed?: Feed;\n aggregatedActivity: AggregatedActivityResponse;\n}) => {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n const { seen_activities: seenActivities, last_seen_at: lastSeenAt } =\n useNotificationStatus(feed) ?? {};\n\n const group = aggregatedActivity.group;\n\n return useMemo(\n () =>\n (lastSeenAt &&\n aggregatedActivity.updated_at.getTime() < lastSeenAt.getTime()) ||\n (seenActivities ?? []).includes(group),\n [lastSeenAt, aggregatedActivity.updated_at, seenActivities, group],\n );\n};\n","import { useCallback, useMemo } from 'react';\nimport { useStateStore } from '@stream-io/state-store/react-bindings';\nimport type { StateStore } from '@stream-io/state-store';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport { checkHasAnotherPage } from '../../../../utils';\nimport type { Feed, FeedState } from '../../../../feed';\nimport type { ActivityState, ActivityWithStateUpdates } from '../../../../activity-with-state-updates/activity-with-state-updates';\nimport type { ActivityResponse, CommentResponse } from '../../../../gen/models';\n\nconst canLoadComments = (\n feedOrActivity: Feed | ActivityResponse | ActivityWithStateUpdates,\n): feedOrActivity is ActivityWithStateUpdates | Feed => {\n return (\n 'loadNextPageCommentReplies' in feedOrActivity &&\n 'loadNextPageActivityComments' in feedOrActivity\n );\n};\n\ntype UseCommentsReturnType<T extends ActivityResponse | CommentResponse> = {\n comments: NonNullable<\n FeedState['comments_by_entity_id'][T['id']]\n >['comments'];\n comments_pagination: NonNullable<\n FeedState['comments_by_entity_id'][T['id']]\n >['pagination'];\n has_next_page: boolean;\n is_loading_next_page: boolean;\n loadNextPage: (\n request?: T extends CommentResponse\n ? Parameters<Feed['loadNextPageCommentReplies']>[1]\n : Parameters<Feed['loadNextPageActivityComments']>[1],\n ) => Promise<void>;\n};\n\nexport function useActivityComments({\n feed: feedFromProps,\n parentComment,\n activity,\n}: {\n feed?: Feed;\n parentComment?: CommentResponse;\n activity?: ActivityResponse | ActivityWithStateUpdates;\n}) {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n const feedOrActivity = feed ?? activity;\n\n if (!feedOrActivity) {\n throw new Error('Feed or activity is required');\n }\n\n if (!canLoadComments(feedOrActivity)) {\n throw new Error('Feed or activity does not support loading comments');\n }\n\n if (!(activity || parentComment)) {\n throw new Error('Activity or parent comment is required');\n }\n\n const entityId = parentComment?.id ?? activity?.id ?? '';\n const selector = useCallback(\n (state: FeedState | ActivityState) => ({\n comments: state.comments_by_entity_id?.[entityId]?.comments,\n comments_pagination: state.comments_by_entity_id?.[entityId]?.pagination,\n }),\n [entityId],\n );\n\n const data = useStateStore(\n feedOrActivity.state as StateStore<FeedState | ActivityState>,\n selector,\n );\n\n const loadNextPage = useCallback<\n UseCommentsReturnType<ActivityResponse | CommentResponse>['loadNextPage']\n >(\n (request) => {\n if (parentComment) {\n return feedOrActivity.loadNextPageCommentReplies(\n parentComment,\n request,\n );\n } else {\n if (activity && canLoadComments(activity)) {\n return activity.loadNextPageActivityComments(request);\n } else if (feed) {\n return feed.loadNextPageActivityComments(activity?.id ?? '', request);\n } else {\n throw new Error('Activity or feed is required');\n }\n }\n },\n [feedOrActivity, feed, parentComment, activity],\n );\n\n return useMemo(() => {\n return {\n ...data,\n has_next_page: checkHasAnotherPage(\n data.comments,\n data.comments_pagination?.next,\n ),\n is_loading_next_page:\n data?.comments_pagination?.loading_next_page ?? false,\n loadNextPage,\n };\n }, [data, loadNextPage]);\n}\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport type { Feed, FeedState } from '../../../../feed';\n\n/**\n * A React hook that returns a reactive array of feeds that the feeds's owner is following and is owned by the current user.\n */\nexport const useOwnFollowings = (feedFromProps?: Feed) => {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n return useStateStore(feed?.state, selector);\n};\n\nconst selector = ({ own_followings }: FeedState) => ({\n own_followings,\n});\n","import { createContext, useContext } from 'react';\n\nimport type { SearchSource } from '../../../common/search';\n\nexport const StreamSearchResultsContext = createContext<\n SearchSource | undefined\n>(undefined);\n\n/**\n * The props for the StreamSearchResultsProvider component.\n */\nexport type StreamSearchResultsContextProps = {\n source: SearchSource;\n};\n\n/**\n * Hook to access the nearest SearchSource instance.\n */\nexport const useSearchResultsContext = () => {\n return useContext(StreamSearchResultsContext);\n};\n","import { useMemo } from 'react';\nimport { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useSearchResultsContext } from '../../contexts/StreamSearchResultsContext';\nimport { useStableCallback } from '../internal';\nimport type { SearchSourceState } from '../../../../common/types';\nimport type { SearchSource } from '../../../../common/search';\n\nexport const useSearchResult = (sourceFromProps?: SearchSource) => {\n const sourceFromContext = useSearchResultsContext();\n const source = sourceFromProps ?? sourceFromContext;\n\n const { items, error, isLoading, hasNext } =\n useStateStore(source?.state, selector) ?? {};\n\n const loadMore = useStableCallback(async () => {\n if (hasNext) {\n source?.search();\n }\n });\n\n return useMemo(\n () => ({ items, error, isLoading, hasNext, loadMore }),\n [error, hasNext, isLoading, items, loadMore],\n );\n};\n\nconst selector = ({\n items,\n isLoading,\n hasNext,\n lastQueryError,\n}: SearchSourceState) => ({\n items,\n isLoading,\n hasNext,\n error: lastQueryError,\n});\n","import { createContext, useContext } from 'react';\n\nimport type { SearchController } from '../../../common/search';\n\nexport const StreamSearchContext = createContext<SearchController | undefined>(undefined);\n\n/**\n * The props for the StreamSearchProvider component.\n */\nexport type StreamSearchContextProps = {\n searchController: SearchController;\n};\n\n/**\n * Hook to access the nearest SearchController instance.\n */\nexport const useSearchContext = () => {\n return useContext(StreamSearchContext);\n};\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport type {\n SearchController,\n SearchControllerState,\n} from '../../../../common/search';\nimport { useSearchContext } from '../../contexts/StreamSearchContext';\n\nexport const useSearchQuery = (controllerFromProps?: SearchController) => {\n const controllerFromState = useSearchContext();\n const controller = controllerFromProps ?? controllerFromState;\n\n return useStateStore(controller?.state, selector);\n};\n\nconst selector = ({ searchQuery }: SearchControllerState) => ({\n searchQuery,\n});\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useSearchContext } from '../../contexts/StreamSearchContext';\nimport type { SearchController, SearchControllerState } from '../../../../common/search';\n\nexport const useSearchSources = (controllerFromProps?: SearchController) => {\n const controllerFromState = useSearchContext();\n const controller = controllerFromProps ?? controllerFromState;\n\n return useStateStore(controller?.state, selector);\n};\n\nconst selector = ({ sources }: SearchControllerState) => ({\n sources,\n});\n","import type { PropsWithChildren } from 'react';\nimport { StreamFeedsContext } from '../contexts/StreamFeedsContext';\nimport type { StreamFeedsContextProps } from '../contexts/StreamFeedsContext';\n\nexport const StreamFeeds = ({ client, children }: PropsWithChildren<StreamFeedsContextProps>) => {\n return (\n <StreamFeedsContext.Provider value={client}>\n {children}\n </StreamFeedsContext.Provider>\n );\n};\n\nStreamFeeds.displayName = 'StreamFeeds';\n","import type { PropsWithChildren } from 'react';\n\nimport { StreamFeedContext } from '../contexts/StreamFeedContext';\nimport type { Feed } from '../../../feed';\n\n/**\n * The props for the StreamFeed component. It accepts a `Feed` instance.\n */\nexport type StreamFeedProps = {\n feed: Feed;\n};\n\nexport const StreamFeed = ({\n feed,\n children,\n}: PropsWithChildren<StreamFeedProps>) => {\n return (\n <StreamFeedContext.Provider value={feed}>\n {children}\n </StreamFeedContext.Provider>\n );\n};\n\nStreamFeed.displayName = 'StreamFeed';\n","import type { PropsWithChildren } from 'react';\n\nimport { StreamSearchContext } from '../contexts/StreamSearchContext';\nimport type { SearchController } from '../../../common/search';\n\n/**\n * The props for the StreamSearch component. It accepts a `SearchController` instance.\n */\nexport type StreamSearchProps = {\n searchController: SearchController | undefined;\n};\n\nexport const StreamSearch = ({\n searchController,\n children,\n}: PropsWithChildren<StreamSearchProps>) => {\n return (\n <StreamSearchContext.Provider value={searchController}>\n {children}\n </StreamSearchContext.Provider>\n );\n};\n\nStreamSearch.displayName = 'StreamSearch';\n","import type { PropsWithChildren } from 'react';\n\nimport { StreamSearchResultsContext } from '../contexts/StreamSearchResultsContext';\nimport type { SearchSource } from '../../../common/search';\n\n/**\n * The props for the StreamSearchResults component. It accepts a `SearchSource` instance.\n */\nexport type StreamSearchResultsProps = {\n source: SearchSource;\n};\n\nexport const StreamSearchResults = ({\n source,\n children,\n}: PropsWithChildren<StreamSearchResultsProps>) => {\n return (\n <StreamSearchResultsContext.Provider value={source}>\n {children}\n </StreamSearchResultsContext.Provider>\n );\n};\n\nStreamSearchResults.displayName = 'StreamSearchResults';\n"],"names":["selector"],"mappings":"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"}
1
+ {"version":3,"file":"react-bindings.mjs","sources":["../../src/bindings/react/hooks/useCreateFeedsClient.ts","../../src/bindings/react/contexts/StreamFeedsContext.tsx","../../src/bindings/react/hooks/client-state-hooks/useClientConnectedUser.ts","../../src/bindings/react/hooks/client-state-hooks/useWsConnectionState.ts","../../src/bindings/react/contexts/StreamFeedContext.tsx","../../src/bindings/react/hooks/internal/useStableCallback.ts","../../src/bindings/react/hooks/feed-state-hooks/useFeedActivities.ts","../../src/bindings/react/hooks/feed-state-hooks/useComments.ts","../../src/bindings/react/hooks/feed-state-hooks/useOwnCapabilities.ts","../../src/bindings/react/hooks/feed-state-hooks/useFollowers.ts","../../src/bindings/react/hooks/feed-state-hooks/useFollowing.ts","../../src/bindings/react/hooks/feed-state-hooks/useFeedMetadata.ts","../../src/bindings/react/hooks/feed-state-hooks/useOwnFollows.ts","../../src/bindings/react/hooks/feed-state-hooks/useNotificationStatus.ts","../../src/bindings/react/hooks/feed-state-hooks/useAggregatedActivities.ts","../../src/bindings/react/hooks/feed-state-hooks/useIsAggregatedActivityRead.ts","../../src/bindings/react/hooks/feed-state-hooks/useIsAggregatedActivitySeen.ts","../../src/bindings/react/contexts/StreamActivityWithStateUpdatesContext.tsx","../../src/bindings/react/hooks/feed-state-hooks/useActivityComments.ts","../../src/bindings/react/hooks/feed-state-hooks/useOwnFollowings.ts","../../src/bindings/react/contexts/StreamSearchResultsContext.tsx","../../src/bindings/react/hooks/search-state-hooks/useSearchResult.ts","../../src/bindings/react/contexts/StreamSearchContext.tsx","../../src/bindings/react/hooks/search-state-hooks/useSearchQuery.ts","../../src/bindings/react/hooks/search-state-hooks/useSearchSources.ts","../../src/bindings/react/wrappers/StreamFeeds.tsx","../../src/bindings/react/wrappers/StreamFeed.tsx","../../src/bindings/react/wrappers/StreamActivityWithStateUpdates.tsx","../../src/bindings/react/wrappers/StreamSearch.tsx","../../src/bindings/react/wrappers/StreamSearchResults.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport { FeedsClient } from '../../../feeds-client';\nimport type { TokenOrProvider } from '../../../types';\nimport type { UserRequest } from '../../../gen/models';\nimport type { FeedsClientOptions } from '../../../common/types';\n\n/**\n * A React hook to create, connect and return an instance of `FeedsClient`.\n */\nexport const useCreateFeedsClient = ({\n apiKey,\n tokenOrProvider,\n userData: userDataOrAnonymous,\n options,\n}: {\n apiKey: string;\n tokenOrProvider?: TokenOrProvider;\n userData: UserRequest | 'anonymous';\n options?: FeedsClientOptions;\n}) => {\n const userData =\n userDataOrAnonymous === 'anonymous' ? undefined : userDataOrAnonymous;\n\n if (userDataOrAnonymous !== 'anonymous' && !tokenOrProvider) {\n throw new Error(\n 'Token provider can only be omitted when connecting anonymous user',\n );\n }\n\n const [client, setClient] = useState<FeedsClient | null>(null);\n const [error, setError] = useState<Error | null>(null);\n const [cachedUserData, setCachedUserData] = useState(userData);\n\n const [cachedOptions] = useState(options);\n\n if (error) {\n throw error;\n }\n\n if (userData?.id !== cachedUserData?.id) {\n setCachedUserData(userData);\n }\n\n useEffect(() => {\n const _client = new FeedsClient(apiKey, cachedOptions);\n\n const connectionPromise = cachedUserData\n ? _client\n .connectUser(cachedUserData, tokenOrProvider!)\n .then(() => {\n setError(null);\n })\n .catch((err) => {\n setError(err);\n })\n : _client.connectAnonymous();\n\n setClient(_client);\n\n return () => {\n setClient(null);\n connectionPromise\n .then(() => {\n setError(null);\n return _client.disconnectUser();\n })\n .catch((err) => {\n setError(err);\n });\n };\n }, [apiKey, cachedUserData, cachedOptions, tokenOrProvider]);\n\n return client;\n};\n","import { createContext, useContext } from 'react';\n\nimport type { FeedsClient } from '../../../feeds-client';\n\nexport const StreamFeedsContext = createContext<FeedsClient | undefined>(undefined);\n\n/**\n * The props for the StreamFeedsProvider component.\n */\nexport type StreamFeedsContextProps = {\n /**\n * The client instance to provide to the component tree.\n */\n client: FeedsClient;\n};\n\n/**\n * Hook to access the nearest FeedsClient instance.\n */\nexport const useFeedsClient = () => {\n return useContext(StreamFeedsContext);\n};\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedsClient } from '../../contexts/StreamFeedsContext';\nimport type { FeedsClientState } from '../../../../feeds-client';\n\n/**\n * A React hook that returns the currently connected user on a `FeedsClient` instance and null otherwise.\n */\nexport const useClientConnectedUser = () => {\n const client = useFeedsClient();\n\n const { user } = useStateStore(client?.state, selector) ?? {};\n\n return user;\n};\n\nconst selector = (nextState: FeedsClientState) => ({\n user: nextState.connected_user,\n});\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedsClient } from '../../contexts/StreamFeedsContext';\nimport type { FeedsClientState } from '../../../../feeds-client';\n\n/**\n * A React hook that returns the websocket connection state of `FeedsClient`.\n */\nexport const useWsConnectionState = () => {\n const client = useFeedsClient();\n\n const { is_healthy } = useStateStore(client?.state, selector) ?? {}\n\n return { is_healthy };\n};\n\nconst selector = (nextState: FeedsClientState) => ({\n is_healthy: nextState.is_ws_connection_healthy,\n});\n","import { createContext, useContext } from 'react';\n\nimport type { Feed } from '../../../feed';\n\nexport const StreamFeedContext = createContext<Feed | undefined>(undefined);\n\n/**\n * The props for the StreamFeedProvider component.\n */\nexport type StreamFeedContextProps = {\n feed: Feed;\n};\n\n/**\n * Hook to access the nearest Feed instance.\n */\nexport const useFeedContext = () => {\n return useContext(StreamFeedContext);\n};\n","import { useCallback, useRef } from 'react';\n\nexport type StableCallback<A extends unknown[], R> = (...args: A) => R;\n\n/**\n * A utility hook implementing a stable callback. It takes in an unstable method that\n * is supposed to be invoked somewhere deeper in the DOM tree without making it\n * change its reference every time the parent component rerenders. It will also return\n * the value of the callback if it does return one.\n * A common use-case would be having a function whose invocation depends on state\n * somewhere high up in the DOM tree and wanting to use the same function deeper\n * down, for example in a leaf node and simply using useCallback results in\n * cascading dependency hell. If we wrap it in useStableCallback, we would be able\n * to:\n * - Use the same function as a dependency of another hook (since it is stable)\n * - Still invoke it and get the latest state\n *\n * **Caveats:**\n * - Never wrap a function that is supposed to return a React.ReactElement in\n * useStableCallback, since React will not know that the DOM needs to be updated\n * whenever the callback value changes (for example, renderItem from FlatList must\n * never be wrapped in this hook)\n * - Always prefer using a standard useCallback/stable function wherever possible\n * (the purpose of useStableCallback is to bridge the gap between top level contexts\n * and cascading rereders in downstream components - **not** as an escape hatch)\n * @param callback - the callback we want to stabilize\n */\nexport const useStableCallback = <A extends unknown[], R>(\n callback: StableCallback<A, R>,\n): StableCallback<A, R> => {\n const ref = useRef(callback);\n ref.current = callback;\n\n return useCallback<StableCallback<A, R>>((...args) => {\n return ref.current(...args);\n }, []);\n};\n","import { useMemo } from 'react';\nimport { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport { useStableCallback } from '../internal';\nimport type { Feed, FeedState } from '../../../../feed';\n\n/**\n * A React hook that returns a reactive object containing the current activities,\n * loading state and whether there is a next page to paginate to or not.\n */\nexport const useFeedActivities = (feedFromProps?: Feed) => {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n const data = useStateStore(feed?.state, selector);\n\n const loadNextPage = useStableCallback(async () => {\n if (!feed || !data?.has_next_page || data?.is_loading) {\n return;\n }\n\n await feed.getNextPage();\n });\n\n return useMemo(() => ({ ...data, loadNextPage }), [data, loadNextPage]);\n};\n\nconst selector = ({\n is_loading_activities,\n next,\n activities = [],\n}: FeedState) => ({\n is_loading: is_loading_activities,\n has_next_page: typeof next !== 'undefined',\n activities,\n});\n","import { useCallback, useMemo } from 'react';\nimport { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport { checkHasAnotherPage, isCommentResponse } from '../../../../utils';\nimport type { ActivityResponse, CommentResponse } from '../../../../gen/models';\nimport type { Feed, FeedState } from '../../../../feed';\nimport type { CommentParent } from '../../../../types';\n\ntype UseCommentsReturnType<T extends ActivityResponse | CommentResponse> = {\n comments: NonNullable<\n FeedState['comments_by_entity_id'][T['id']]\n >['comments'];\n comments_pagination: NonNullable<\n FeedState['comments_by_entity_id'][T['id']]\n >['pagination'];\n has_next_page: boolean;\n is_loading_next_page: boolean;\n loadNextPage: (\n request?: T extends CommentResponse\n ? Parameters<Feed['loadNextPageCommentReplies']>[1]\n : Parameters<Feed['loadNextPageActivityComments']>[1],\n ) => Promise<void>;\n};\n\n/**\n * @deprecated Use `useActivityComments` instead.\n * @param\n */\nexport function useComments<T extends CommentParent>(_: {\n feed: Feed;\n parent: T;\n}): UseCommentsReturnType<T>;\nexport function useComments<T extends CommentParent>(_: {\n feed?: Feed;\n parent: T;\n}): UseCommentsReturnType<T> | undefined;\nexport function useComments<T extends CommentParent>({\n feed: feedFromProps,\n parent,\n}: {\n feed?: Feed;\n /**\n * The parent (activity or comment) for which to fetch comments.\n */\n parent: T;\n}) {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n const selector = useCallback(\n (state: FeedState) => ({\n comments: state.comments_by_entity_id?.[parent.id]?.comments,\n comments_pagination: state.comments_by_entity_id?.[parent.id]?.pagination,\n }),\n [parent.id],\n );\n\n const data = useStateStore(feed?.state, selector);\n\n const loadNextPage = useMemo<\n UseCommentsReturnType<T>['loadNextPage'] | undefined\n >(() => {\n if (!feed) return undefined;\n\n return (request) => {\n if (isCommentResponse(parent)) {\n return feed.loadNextPageCommentReplies(parent, request);\n } else {\n return feed.loadNextPageActivityComments(parent, request);\n }\n };\n }, [feed, parent]);\n\n return useMemo(() => {\n if (!data) {\n return undefined;\n }\n\n return {\n ...data,\n has_next_page: checkHasAnotherPage(\n data.comments,\n data.comments_pagination?.next,\n ),\n is_loading_next_page:\n data?.comments_pagination?.loading_next_page ?? false,\n loadNextPage,\n };\n }, [data, loadNextPage]);\n}\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport type { Feed, FeedState } from '../../../../feed';\nimport type { FeedOwnCapability } from '../../../../gen/models';\nimport { useFeedsClient } from '../../contexts/StreamFeedsContext';\n\nconst stableEmptyArray: readonly FeedOwnCapability[] = [];\n\nconst selector = (currentState: FeedState) => {\n return {\n feedOwnCapabilities: currentState.own_capabilities ?? stableEmptyArray,\n };\n};\n\nexport const useOwnCapabilities = (feedFromProps?: Feed | string) => {\n const client = useFeedsClient();\n const feedFromContext = useFeedContext();\n let feed = feedFromProps ?? feedFromContext;\n if (typeof feed === 'string') {\n const [groupId, id] = feed.split(':');\n feed = groupId && id ? client?.feed(groupId, id) : undefined;\n }\n\n const { feedOwnCapabilities = stableEmptyArray } =\n useStateStore(feed?.state, selector) ?? {};\n\n return feedOwnCapabilities;\n};\n","import { useCallback, useMemo } from 'react';\nimport { useStateStore } from '@stream-io/state-store/react-bindings';\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport type { Feed, FeedState } from '../../../../feed';\nimport { checkHasAnotherPage } from '../../../../utils';\n\nconst selector = ({\n follower_count,\n followers,\n followers_pagination,\n}: FeedState) => ({\n follower_count,\n followers,\n followers_pagination,\n});\n\ntype UseFollowersReturnType = ReturnType<typeof selector> & {\n is_loading_next_page: boolean;\n has_next_page: boolean;\n loadNextPage: (\n ...options: Parameters<Feed['loadNextPageFollowers']>\n ) => Promise<void>;\n};\n\nexport function useFollowers(feed: Feed): UseFollowersReturnType;\nexport function useFollowers(feed?: Feed): UseFollowersReturnType | undefined;\nexport function useFollowers(feedFromProps?: Feed) {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n const data = useStateStore(feed?.state, selector);\n\n const loadNextPage = useCallback(\n (...options: Parameters<Feed['loadNextPageFollowers']>) =>\n feed?.loadNextPageFollowers(...options),\n [feed],\n );\n\n return useMemo(() => {\n if (!data) {\n return undefined;\n }\n\n return {\n ...data,\n is_loading_next_page:\n data.followers_pagination?.loading_next_page ?? false,\n has_next_page: checkHasAnotherPage(\n data.followers,\n data.followers_pagination?.next,\n ),\n loadNextPage,\n };\n }, [data, loadNextPage]);\n}\n","import { useCallback, useMemo } from 'react';\nimport { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport { checkHasAnotherPage } from '../../../../utils';\nimport type { Feed, FeedState } from '../../../../feed';\n\nconst selector = ({\n following_count,\n following,\n following_pagination,\n}: FeedState) => ({\n following_count,\n following,\n following_pagination,\n});\n\ntype UseFollowingReturnType = ReturnType<typeof selector> & {\n is_loading_next_page: boolean;\n has_next_page: boolean;\n loadNextPage: (\n ...options: Parameters<Feed['loadNextPageFollowers']>\n ) => Promise<void>;\n};\n\nexport function useFollowing(feed: Feed): UseFollowingReturnType;\nexport function useFollowing(feed?: Feed): UseFollowingReturnType | undefined;\nexport function useFollowing(feedFromProps?: Feed) {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n const data = useStateStore(feed?.state, selector);\n\n const loadNextPage = useCallback(\n (...options: Parameters<Feed['loadNextPageFollowing']>) =>\n feed?.loadNextPageFollowing(...options),\n [feed],\n );\n\n return useMemo(() => {\n if (!data) {\n return undefined;\n }\n\n return {\n ...data,\n is_loading_next_page:\n data.following_pagination?.loading_next_page ?? false,\n has_next_page: checkHasAnotherPage(\n data.following,\n data.following_pagination?.next,\n ),\n loadNextPage,\n };\n }, [data, loadNextPage]);\n}\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport type { Feed, FeedState } from '../../../../feed';\n\n/**\n * A React hook that returns a reactive object containing some often used\n * metadata for a feed.\n */\nexport const useFeedMetadata = (feedFromProps?: Feed) => {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n return useStateStore(feed?.state, selector);\n};\n\nconst selector = ({\n follower_count = 0,\n following_count = 0,\n created_by,\n created_at,\n updated_at,\n}: FeedState) => ({\n created_by,\n follower_count,\n following_count,\n created_at,\n updated_at,\n});\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport type { Feed, FeedState } from '../../../../feed';\n\n/**\n * A React hook that returns a reactive array of feeds that the current user\n * owns and are following the respective feed that we are observing.\n */\nexport const useOwnFollows = (feedFromProps?: Feed) => {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n return useStateStore(feed?.state, selector);\n};\n\nconst selector = ({ own_follows }: FeedState) => ({\n own_follows,\n});\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport type { Feed, FeedState } from '../../../../feed';\nimport type { NotificationStatusResponse } from '../../../../gen/models';\n\nconst selector = ({ notification_status }: FeedState) =>\n ({\n unread: notification_status?.unread ?? 0,\n unseen: notification_status?.unseen ?? 0,\n last_read_at: notification_status?.last_read_at,\n last_seen_at: notification_status?.last_seen_at,\n read_activities: notification_status?.read_activities,\n seen_activities: notification_status?.seen_activities,\n }) satisfies NotificationStatusResponse;\n\ntype UseNotificationStatusReturnType = ReturnType<typeof selector>;\n\nexport function useNotificationStatus(\n feed: Feed,\n): UseNotificationStatusReturnType;\nexport function useNotificationStatus(\n feed?: Feed,\n): UseNotificationStatusReturnType | undefined;\nexport function useNotificationStatus(feedFromProps?: Feed) {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n return useStateStore(feed?.state, selector);\n}\n","import { useMemo } from 'react';\nimport { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport { useStableCallback } from '../internal';\nimport type { Feed, FeedState } from '../../../../feed';\n\nconst selector = ({\n is_loading_activities,\n next,\n aggregated_activities = [],\n}: FeedState) => ({\n is_loading: is_loading_activities,\n has_next_page: typeof next !== 'undefined',\n aggregated_activities,\n});\n\ntype UseAggregatedActivitiesReturnType = ReturnType<typeof selector> & {\n loadNextPage: () => Promise<void>;\n};\n\n/**\n * A React hook that returns a reactive object containing the current aggregated activities,\n * loading state and whether there is a next page to paginate to or not.\n */\nexport function useAggregatedActivities(\n feedFromProps: Feed,\n): UseAggregatedActivitiesReturnType;\nexport function useAggregatedActivities(\n feedFromProps?: Feed,\n): UseAggregatedActivitiesReturnType | undefined;\nexport function useAggregatedActivities(feedFromProps?: Feed) {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n const data = useStateStore(feed?.state, selector);\n\n const loadNextPage = useStableCallback(async () => {\n if (!feed || !data?.has_next_page || data?.is_loading) {\n return;\n }\n\n await feed.getNextPage();\n });\n\n return useMemo(\n () => (data ? { ...data, loadNextPage } : undefined),\n [data, loadNextPage],\n );\n}\n","import { useMemo } from 'react';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport { useNotificationStatus } from './useNotificationStatus';\nimport type { Feed } from '../../../../feed';\nimport type { AggregatedActivityResponse } from '../../../../gen/models';\n\nexport const useIsAggregatedActivityRead = ({\n feed: feedFromProps,\n aggregatedActivity,\n}: {\n feed?: Feed;\n aggregatedActivity: AggregatedActivityResponse;\n}) => {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n const { read_activities: readActivities, last_read_at: lastReadAt } =\n useNotificationStatus(feed) ?? {};\n\n const group = aggregatedActivity.group;\n\n return useMemo(\n () =>\n (lastReadAt &&\n aggregatedActivity.updated_at.getTime() <= lastReadAt.getTime()) ||\n (readActivities ?? []).includes(group),\n [lastReadAt, aggregatedActivity.updated_at, readActivities, group],\n );\n};\n","import { useMemo } from 'react';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport { useNotificationStatus } from './useNotificationStatus';\nimport type { Feed } from '../../../../feed';\nimport type { AggregatedActivityResponse } from '../../../../gen/models';\n\nexport const useIsAggregatedActivitySeen = ({\n feed: feedFromProps,\n aggregatedActivity,\n}: {\n feed?: Feed;\n aggregatedActivity: AggregatedActivityResponse;\n}) => {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n const { seen_activities: seenActivities, last_seen_at: lastSeenAt } =\n useNotificationStatus(feed) ?? {};\n\n const group = aggregatedActivity.group;\n\n return useMemo(\n () =>\n (lastSeenAt &&\n aggregatedActivity.updated_at.getTime() < lastSeenAt.getTime()) ||\n (seenActivities ?? []).includes(group),\n [lastSeenAt, aggregatedActivity.updated_at, seenActivities, group],\n );\n};\n","import { createContext, useContext } from 'react';\n\nimport type { ActivityWithStateUpdates } from '../../../activity-with-state-updates/activity-with-state-updates';\n\nexport const StreamActivityWithStateUpdatesContext = createContext<ActivityWithStateUpdates | undefined>(undefined);\n\n/**\n * The props for the StreamActivityWithStateUpdatesProvider component.\n */\nexport type StreamActivityWithStateUpdatesContextProps = {\n activityWithStateUpdates: ActivityWithStateUpdates;\n};\n\n/**\n * Hook to access the nearest ActivityWithStateUpdates instance.\n */\nexport const useActivityWithStateUpdatesContext = () => {\n return useContext(StreamActivityWithStateUpdatesContext);\n};\n","import { useCallback, useMemo } from 'react';\nimport { useStateStore } from '@stream-io/state-store/react-bindings';\nimport type { StateStore } from '@stream-io/state-store';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport { checkHasAnotherPage } from '../../../../utils';\nimport type { Feed, FeedState } from '../../../../feed';\nimport type { ActivityState, ActivityWithStateUpdates } from '../../../../activity-with-state-updates/activity-with-state-updates';\nimport type { ActivityResponse, CommentResponse } from '../../../../gen/models';\nimport { useActivityWithStateUpdatesContext } from '../../contexts/StreamActivityWithStateUpdatesContext';\n\nconst canLoadComments = (\n feedOrActivity: Feed | ActivityResponse | ActivityWithStateUpdates,\n): feedOrActivity is ActivityWithStateUpdates | Feed => {\n return (\n 'loadNextPageCommentReplies' in feedOrActivity &&\n 'loadNextPageActivityComments' in feedOrActivity\n );\n};\n\ntype UseCommentsReturnType<T extends ActivityResponse | CommentResponse> = {\n comments: NonNullable<\n FeedState['comments_by_entity_id'][T['id']]\n >['comments'];\n comments_pagination: NonNullable<\n FeedState['comments_by_entity_id'][T['id']]\n >['pagination'];\n has_next_page: boolean;\n is_loading_next_page: boolean;\n loadNextPage: (\n request?: T extends CommentResponse\n ? Parameters<Feed['loadNextPageCommentReplies']>[1]\n : Parameters<Feed['loadNextPageActivityComments']>[1],\n ) => Promise<void>;\n};\n\nexport function useActivityComments({\n feed: feedFromProps,\n parentComment,\n activity: activityFromProps,\n}: {\n feed?: Feed;\n parentComment?: CommentResponse;\n activity?: ActivityResponse | ActivityWithStateUpdates;\n} = {}) {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n const activityFromContext = useActivityWithStateUpdatesContext();\n const activity = activityFromProps ?? activityFromContext;\n const feedOrActivity = (activity && canLoadComments(activity)) ? activity : feed;\n\n if (!feedOrActivity) {\n throw new Error('Feed or activity is required');\n }\n\n if (!canLoadComments(feedOrActivity)) {\n throw new Error('Feed or activity does not support loading comments');\n }\n\n if (!(activity || parentComment)) {\n throw new Error('Activity or parent comment is required');\n }\n\n const entityId = parentComment?.id ?? activity?.id ?? '';\n const selector = useCallback(\n (state: FeedState | ActivityState) => ({\n comments: state.comments_by_entity_id?.[entityId]?.comments,\n comments_pagination: state.comments_by_entity_id?.[entityId]?.pagination,\n }),\n [entityId],\n );\n\n const data = useStateStore(\n feedOrActivity.state as StateStore<FeedState | ActivityState>,\n selector,\n );\n\n const loadNextPage = useCallback<\n UseCommentsReturnType<ActivityResponse | CommentResponse>['loadNextPage']\n >(\n (request) => {\n if (parentComment) {\n return feedOrActivity.loadNextPageCommentReplies(\n parentComment,\n request,\n );\n } else {\n if (activity && canLoadComments(activity)) {\n return activity.loadNextPageActivityComments(request);\n } else if (feed) {\n return feed.loadNextPageActivityComments(activity?.id ?? '', request);\n } else {\n throw new Error('Activity or feed is required');\n }\n }\n },\n [feedOrActivity, feed, parentComment, activity],\n );\n\n return useMemo(() => {\n return {\n ...data,\n has_next_page: checkHasAnotherPage(\n data.comments,\n data.comments_pagination?.next,\n ),\n is_loading_next_page:\n data?.comments_pagination?.loading_next_page ?? false,\n loadNextPage,\n };\n }, [data, loadNextPage]);\n}\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useFeedContext } from '../../contexts/StreamFeedContext';\nimport type { Feed, FeedState } from '../../../../feed';\n\n/**\n * A React hook that returns a reactive array of feeds that the feeds's owner is following and is owned by the current user.\n */\nexport const useOwnFollowings = (feedFromProps?: Feed) => {\n const feedFromContext = useFeedContext();\n const feed = feedFromProps ?? feedFromContext;\n\n return useStateStore(feed?.state, selector);\n};\n\nconst selector = ({ own_followings }: FeedState) => ({\n own_followings,\n});\n","import { createContext, useContext } from 'react';\n\nimport type { SearchSource } from '../../../common/search';\n\nexport const StreamSearchResultsContext = createContext<\n SearchSource | undefined\n>(undefined);\n\n/**\n * The props for the StreamSearchResultsProvider component.\n */\nexport type StreamSearchResultsContextProps = {\n source: SearchSource;\n};\n\n/**\n * Hook to access the nearest SearchSource instance.\n */\nexport const useSearchResultsContext = () => {\n return useContext(StreamSearchResultsContext);\n};\n","import { useMemo } from 'react';\nimport { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useSearchResultsContext } from '../../contexts/StreamSearchResultsContext';\nimport { useStableCallback } from '../internal';\nimport type { SearchSourceState } from '../../../../common/types';\nimport type { SearchSource } from '../../../../common/search';\n\nexport const useSearchResult = (sourceFromProps?: SearchSource) => {\n const sourceFromContext = useSearchResultsContext();\n const source = sourceFromProps ?? sourceFromContext;\n\n const { items, error, isLoading, hasNext } =\n useStateStore(source?.state, selector) ?? {};\n\n const loadMore = useStableCallback(async () => {\n if (hasNext) {\n source?.search();\n }\n });\n\n return useMemo(\n () => ({ items, error, isLoading, hasNext, loadMore }),\n [error, hasNext, isLoading, items, loadMore],\n );\n};\n\nconst selector = ({\n items,\n isLoading,\n hasNext,\n lastQueryError,\n}: SearchSourceState) => ({\n items,\n isLoading,\n hasNext,\n error: lastQueryError,\n});\n","import { createContext, useContext } from 'react';\n\nimport type { SearchController } from '../../../common/search';\n\nexport const StreamSearchContext = createContext<SearchController | undefined>(undefined);\n\n/**\n * The props for the StreamSearchProvider component.\n */\nexport type StreamSearchContextProps = {\n searchController: SearchController;\n};\n\n/**\n * Hook to access the nearest SearchController instance.\n */\nexport const useSearchContext = () => {\n return useContext(StreamSearchContext);\n};\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport type {\n SearchController,\n SearchControllerState,\n} from '../../../../common/search';\nimport { useSearchContext } from '../../contexts/StreamSearchContext';\n\nexport const useSearchQuery = (controllerFromProps?: SearchController) => {\n const controllerFromState = useSearchContext();\n const controller = controllerFromProps ?? controllerFromState;\n\n return useStateStore(controller?.state, selector);\n};\n\nconst selector = ({ searchQuery }: SearchControllerState) => ({\n searchQuery,\n});\n","import { useStateStore } from '@stream-io/state-store/react-bindings';\n\nimport { useSearchContext } from '../../contexts/StreamSearchContext';\nimport type { SearchController, SearchControllerState } from '../../../../common/search';\n\nexport const useSearchSources = (controllerFromProps?: SearchController) => {\n const controllerFromState = useSearchContext();\n const controller = controllerFromProps ?? controllerFromState;\n\n return useStateStore(controller?.state, selector);\n};\n\nconst selector = ({ sources }: SearchControllerState) => ({\n sources,\n});\n","import type { PropsWithChildren } from 'react';\nimport { StreamFeedsContext } from '../contexts/StreamFeedsContext';\nimport type { StreamFeedsContextProps } from '../contexts/StreamFeedsContext';\n\nexport const StreamFeeds = ({ client, children }: PropsWithChildren<StreamFeedsContextProps>) => {\n return (\n <StreamFeedsContext.Provider value={client}>\n {children}\n </StreamFeedsContext.Provider>\n );\n};\n\nStreamFeeds.displayName = 'StreamFeeds';\n","import type { PropsWithChildren } from 'react';\n\nimport { StreamFeedContext } from '../contexts/StreamFeedContext';\nimport type { Feed } from '../../../feed';\n\n/**\n * The props for the StreamFeed component. It accepts a `Feed` instance.\n */\nexport type StreamFeedProps = {\n feed: Feed;\n};\n\nexport const StreamFeed = ({\n feed,\n children,\n}: PropsWithChildren<StreamFeedProps>) => {\n return (\n <StreamFeedContext.Provider value={feed}>\n {children}\n </StreamFeedContext.Provider>\n );\n};\n\nStreamFeed.displayName = 'StreamFeed';\n","import type { PropsWithChildren } from 'react';\n\nimport { StreamActivityWithStateUpdatesContext } from '../contexts/StreamActivityWithStateUpdatesContext';\nimport type { ActivityWithStateUpdates } from '../../../activity-with-state-updates/activity-with-state-updates';\n\n/**\n * The props for the StreamActivityWithStateUpdates component. It accepts an `ActivityWithStateUpdates` instance.\n */\nexport type StreamActivityWithStateUpdatesProps = {\n activityWithStateUpdates: ActivityWithStateUpdates;\n};\n\nexport const StreamActivityWithStateUpdates = ({\n activityWithStateUpdates,\n children,\n}: PropsWithChildren<StreamActivityWithStateUpdatesProps>) => {\n return (\n <StreamActivityWithStateUpdatesContext.Provider value={activityWithStateUpdates}>\n {children}\n </StreamActivityWithStateUpdatesContext.Provider>\n );\n};\n\nStreamActivityWithStateUpdates.displayName = 'StreamActivityWithStateUpdates';\n","import type { PropsWithChildren } from 'react';\n\nimport { StreamSearchContext } from '../contexts/StreamSearchContext';\nimport type { SearchController } from '../../../common/search';\n\n/**\n * The props for the StreamSearch component. It accepts a `SearchController` instance.\n */\nexport type StreamSearchProps = {\n searchController: SearchController | undefined;\n};\n\nexport const StreamSearch = ({\n searchController,\n children,\n}: PropsWithChildren<StreamSearchProps>) => {\n return (\n <StreamSearchContext.Provider value={searchController}>\n {children}\n </StreamSearchContext.Provider>\n );\n};\n\nStreamSearch.displayName = 'StreamSearch';\n","import type { PropsWithChildren } from 'react';\n\nimport { StreamSearchResultsContext } from '../contexts/StreamSearchResultsContext';\nimport type { SearchSource } from '../../../common/search';\n\n/**\n * The props for the StreamSearchResults component. It accepts a `SearchSource` instance.\n */\nexport type StreamSearchResultsProps = {\n source: SearchSource;\n};\n\nexport const StreamSearchResults = ({\n source,\n children,\n}: PropsWithChildren<StreamSearchResultsProps>) => {\n return (\n <StreamSearchResultsContext.Provider value={source}>\n {children}\n </StreamSearchResultsContext.Provider>\n );\n};\n\nStreamSearchResults.displayName = 'StreamSearchResults';\n"],"names":["selector"],"mappings":"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"}
@@ -166,6 +166,14 @@ decoders.ActivityResponse = (input) => {
166
166
  };
167
167
  return decode(typeMappings, input);
168
168
  };
169
+ decoders.ActivityRestoredEvent = (input) => {
170
+ const typeMappings = {
171
+ created_at: { type: "DatetimeType", isSingle: true },
172
+ activity: { type: "ActivityResponse", isSingle: true },
173
+ received_at: { type: "DatetimeType", isSingle: true }
174
+ };
175
+ return decode(typeMappings, input);
176
+ };
169
177
  decoders.ActivityUnpinnedEvent = (input) => {
170
178
  const typeMappings = {
171
179
  created_at: { type: "DatetimeType", isSingle: true },
@@ -1298,6 +1306,12 @@ decoders.ReminderResponseData = (input) => {
1298
1306
  };
1299
1307
  return decode(typeMappings, input);
1300
1308
  };
1309
+ decoders.RestoreActivityResponse = (input) => {
1310
+ const typeMappings = {
1311
+ activity: { type: "ActivityResponse", isSingle: true }
1312
+ };
1313
+ return decode(typeMappings, input);
1314
+ };
1301
1315
  decoders.ReviewQueueItemResponse = (input) => {
1302
1316
  const typeMappings = {
1303
1317
  created_at: { type: "DatetimeType", isSingle: true },
@@ -2027,6 +2041,22 @@ class FeedsApi {
2027
2041
  decoders.UpdateActivityResponse?.(response.body);
2028
2042
  return { ...response.body, metadata: response.metadata };
2029
2043
  }
2044
+ async restoreActivity(request) {
2045
+ const pathParams = {
2046
+ id: request?.id
2047
+ };
2048
+ const body = {};
2049
+ const response = await this.apiClient.sendRequest(
2050
+ "PUT",
2051
+ "/api/v2/feeds/activities/{id}/restore",
2052
+ pathParams,
2053
+ void 0,
2054
+ body,
2055
+ "application/json"
2056
+ );
2057
+ decoders.RestoreActivityResponse?.(response.body);
2058
+ return { ...response.body, metadata: response.metadata };
2059
+ }
2030
2060
  async queryBookmarkFolders(request) {
2031
2061
  const body = {
2032
2062
  limit: request?.limit,
@@ -3985,7 +4015,7 @@ const getRateLimitFromResponseHeader = (response_headers) => {
3985
4015
  };
3986
4016
  return result;
3987
4017
  };
3988
- const version = "0.3.37";
4018
+ const version = "0.3.39";
3989
4019
  const axios = axiosImport.default ?? axiosImport;
3990
4020
  class ApiClient {
3991
4021
  constructor(apiKey, tokenManager, connectionIdManager, options) {
@@ -4169,6 +4199,7 @@ const eventDecoderMapping = {
4169
4199
  "feeds.activity.reaction.deleted": (data) => decoders.ActivityReactionDeletedEvent(data),
4170
4200
  "feeds.activity.reaction.updated": (data) => decoders.ActivityReactionUpdatedEvent(data),
4171
4201
  "feeds.activity.removed_from_feed": (data) => decoders.ActivityRemovedFromFeedEvent(data),
4202
+ "feeds.activity.restored": (data) => decoders.ActivityRestoredEvent(data),
4172
4203
  "feeds.activity.unpinned": (data) => decoders.ActivityUnpinnedEvent(data),
4173
4204
  "feeds.activity.updated": (data) => decoders.ActivityUpdatedEvent(data),
4174
4205
  "feeds.bookmark.added": (data) => decoders.BookmarkAddedEvent(data),
@@ -6484,7 +6515,8 @@ const _Feed = class _Feed extends FeedApi {
6484
6515
  "user.muted": _Feed.noop,
6485
6516
  "user.reactivated": _Feed.noop,
6486
6517
  "user.updated": _Feed.noop,
6487
- "feeds.activity.feedback": handleActivityFeedback.bind(this)
6518
+ "feeds.activity.feedback": handleActivityFeedback.bind(this),
6519
+ "feeds.activity.restored": _Feed.noop
6488
6520
  };
6489
6521
  this.eventDispatcher = new EventDispatcher();
6490
6522
  this.on = this.eventDispatcher.on;
@@ -6949,11 +6981,12 @@ const _Feed = class _Feed extends FeedApi {
6949
6981
  });
6950
6982
  return response;
6951
6983
  }
6952
- async unfollow(feedOrFid) {
6984
+ async unfollow(feedOrFid, options) {
6953
6985
  const fid = typeof feedOrFid === "string" ? feedOrFid : feedOrFid.feed;
6954
6986
  const response = await this.client.unfollow({
6955
6987
  source: this.feed,
6956
- target: fid
6988
+ target: fid,
6989
+ ...options
6957
6990
  });
6958
6991
  return response;
6959
6992
  }
@@ -7373,10 +7406,22 @@ class FeedsClient extends FeedsApi {
7373
7406
  }
7374
7407
  };
7375
7408
  this.pollFromState = (id) => this.polls_by_id.get(id);
7409
+ this.connectAnonymous = () => {
7410
+ this.checkIfUserIsConnected();
7411
+ this.connectionIdManager.resolveConnectionidPromise();
7412
+ this.tokenManager.setTokenOrProvider(void 0);
7413
+ this.setGetBatchOwnFieldsThrottlingInterval(
7414
+ this.query_batch_own_fields_throttling_interval
7415
+ );
7416
+ this.state.partialNext({
7417
+ connected_user: void 0,
7418
+ is_anonymous: true,
7419
+ is_ws_connection_healthy: false
7420
+ });
7421
+ return Promise.resolve();
7422
+ };
7376
7423
  this.connectUser = async (user, tokenProvider) => {
7377
- if (this.state.getLatestValue().connected_user !== void 0 || this.wsConnection) {
7378
- throw new Error(`Can't connect a new user, call "disconnectUser" first`);
7379
- }
7424
+ this.checkIfUserIsConnected();
7380
7425
  this.tokenManager.setTokenOrProvider(tokenProvider);
7381
7426
  this.setGetBatchOwnFieldsThrottlingInterval(
7382
7427
  this.query_batch_own_fields_throttling_interval
@@ -7468,8 +7513,8 @@ class FeedsClient extends FeedsApi {
7468
7513
  }
7469
7514
  return response;
7470
7515
  };
7471
- this.deleteComment = async (request) => {
7472
- const response = await super.deleteComment(request);
7516
+ this.deleteComment = async (...args) => {
7517
+ const response = await super.deleteComment(...args);
7473
7518
  const { activity, comment } = response;
7474
7519
  for (const feed of this.allActiveFeeds) {
7475
7520
  handleCommentDeleted.bind(feed)({ comment }, false);
@@ -7496,8 +7541,8 @@ class FeedsClient extends FeedsApi {
7496
7541
  this.addReaction = (request) => {
7497
7542
  return this.addActivityReaction(request);
7498
7543
  };
7499
- this.deleteActivityReaction = async (request) => {
7500
- const response = await super.deleteActivityReaction(request);
7544
+ this.deleteActivityReaction = async (...args) => {
7545
+ const response = await super.deleteActivityReaction(...args);
7501
7546
  for (const feed of this.allActiveFeeds) {
7502
7547
  handleActivityReactionDeleted.bind(feed)(response, false);
7503
7548
  }
@@ -7515,8 +7560,8 @@ class FeedsClient extends FeedsApi {
7515
7560
  }
7516
7561
  return response;
7517
7562
  };
7518
- this.deleteCommentReaction = async (request) => {
7519
- const response = await super.deleteCommentReaction(request);
7563
+ this.deleteCommentReaction = async (...args) => {
7564
+ const response = await super.deleteCommentReaction(...args);
7520
7565
  for (const feed of this.allActiveFeeds) {
7521
7566
  handleCommentReactionDeleted.bind(feed)(response, false);
7522
7567
  }
@@ -7549,10 +7594,7 @@ class FeedsClient extends FeedsApi {
7549
7594
  this.polls_by_id.clear();
7550
7595
  this.activeActivities = [];
7551
7596
  this.activeFeeds = {};
7552
- this.state.partialNext({
7553
- connected_user: void 0,
7554
- is_ws_connection_healthy: false
7555
- });
7597
+ this.state.partialNext(this.initialState);
7556
7598
  this.cancelGetBatchOwnFieldsTimer();
7557
7599
  clearQueuedFeeds();
7558
7600
  };
@@ -7644,10 +7686,7 @@ class FeedsClient extends FeedsApi {
7644
7686
  }
7645
7687
  return feed;
7646
7688
  };
7647
- this.state = new stateStore.StateStore({
7648
- connected_user: void 0,
7649
- is_ws_connection_healthy: false
7650
- });
7689
+ this.state = new stateStore.StateStore(this.initialState);
7651
7690
  this.moderation = new ModerationClient(apiClient);
7652
7691
  this.tokenManager = tokenManager;
7653
7692
  this.connectionIdManager = connectionIdManager;
@@ -7966,6 +8005,18 @@ class FeedsClient extends FeedsApi {
7966
8005
  feeds.forEach((f) => handleFollowDeleted.bind(f)({ follow }, false));
7967
8006
  });
7968
8007
  }
8008
+ get initialState() {
8009
+ return {
8010
+ connected_user: void 0,
8011
+ is_anonymous: false,
8012
+ is_ws_connection_healthy: false
8013
+ };
8014
+ }
8015
+ checkIfUserIsConnected() {
8016
+ if (this.state.getLatestValue().connected_user !== void 0 || this.wsConnection || this.state.getLatestValue().is_anonymous) {
8017
+ throw new Error(`Can't connect a new user, call "disconnectUser" first`);
8018
+ }
8019
+ }
7969
8020
  }
7970
8021
  exports.ActivityWithStateUpdates = ActivityWithStateUpdates;
7971
8022
  exports.Constants = Constants;
@@ -7988,4 +8039,4 @@ exports.replaceUniqueArrayMerge = replaceUniqueArrayMerge;
7988
8039
  exports.shouldUpdateState = shouldUpdateState;
7989
8040
  exports.uniqueArrayMerge = uniqueArrayMerge;
7990
8041
  exports.updateEntityInArray = updateEntityInArray;
7991
- //# sourceMappingURL=feeds-client-DEV6_pkH.js.map
8042
+ //# sourceMappingURL=feeds-client-CT1eKizN.js.map