@towns-labs/react-sdk 2.0.1

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 (180) hide show
  1. package/README.md +69 -0
  2. package/dist/esm/TownsSyncProvider.jsx +39 -0
  3. package/dist/esm/TownsSyncProvider.jsx.map +1 -0
  4. package/dist/esm/connectTowns.js +45 -0
  5. package/dist/esm/connectTowns.js.map +1 -0
  6. package/dist/esm/index.js +35 -0
  7. package/dist/esm/index.js.map +1 -0
  8. package/dist/esm/internals/TownsSyncContext.js +4 -0
  9. package/dist/esm/internals/TownsSyncContext.js.map +1 -0
  10. package/dist/esm/internals/useAction.js +58 -0
  11. package/dist/esm/internals/useAction.js.map +1 -0
  12. package/dist/esm/internals/useTownsSync.js +5 -0
  13. package/dist/esm/internals/useTownsSync.js.map +1 -0
  14. package/dist/esm/internals/utils.js +10 -0
  15. package/dist/esm/internals/utils.js.map +1 -0
  16. package/dist/esm/useAdminRedact.js +43 -0
  17. package/dist/esm/useAdminRedact.js.map +1 -0
  18. package/dist/esm/useAgentConnection.js +128 -0
  19. package/dist/esm/useAgentConnection.js.map +1 -0
  20. package/dist/esm/useChannel.js +18 -0
  21. package/dist/esm/useChannel.js.map +1 -0
  22. package/dist/esm/useCreateChannel.js +24 -0
  23. package/dist/esm/useCreateChannel.js.map +1 -0
  24. package/dist/esm/useCreateDm.js +22 -0
  25. package/dist/esm/useCreateDm.js.map +1 -0
  26. package/dist/esm/useCreateGdm.js +22 -0
  27. package/dist/esm/useCreateGdm.js.map +1 -0
  28. package/dist/esm/useCreateSpace.js +22 -0
  29. package/dist/esm/useCreateSpace.js.map +1 -0
  30. package/dist/esm/useDm.js +16 -0
  31. package/dist/esm/useDm.js.map +1 -0
  32. package/dist/esm/useGdm.js +16 -0
  33. package/dist/esm/useGdm.js.map +1 -0
  34. package/dist/esm/useJoinSpace.js +23 -0
  35. package/dist/esm/useJoinSpace.js.map +1 -0
  36. package/dist/esm/useMember.js +36 -0
  37. package/dist/esm/useMember.js.map +1 -0
  38. package/dist/esm/useMemberList.js +17 -0
  39. package/dist/esm/useMemberList.js.map +1 -0
  40. package/dist/esm/useMyMember.js +71 -0
  41. package/dist/esm/useMyMember.js.map +1 -0
  42. package/dist/esm/useObservable.js +56 -0
  43. package/dist/esm/useObservable.js.map +1 -0
  44. package/dist/esm/useReactions.js +17 -0
  45. package/dist/esm/useReactions.js.map +1 -0
  46. package/dist/esm/useRedact.js +43 -0
  47. package/dist/esm/useRedact.js.map +1 -0
  48. package/dist/esm/useScrollback.js +27 -0
  49. package/dist/esm/useScrollback.js.map +1 -0
  50. package/dist/esm/useSendMessage.js +31 -0
  51. package/dist/esm/useSendMessage.js.map +1 -0
  52. package/dist/esm/useSendReaction.js +33 -0
  53. package/dist/esm/useSendReaction.js.map +1 -0
  54. package/dist/esm/useSpace.js +28 -0
  55. package/dist/esm/useSpace.js.map +1 -0
  56. package/dist/esm/useSyncAgent.jsx +20 -0
  57. package/dist/esm/useSyncAgent.jsx.map +1 -0
  58. package/dist/esm/useThreads.js +19 -0
  59. package/dist/esm/useThreads.js.map +1 -0
  60. package/dist/esm/useTimeline.js +32 -0
  61. package/dist/esm/useTimeline.js.map +1 -0
  62. package/dist/esm/useTowns.js +16 -0
  63. package/dist/esm/useTowns.js.map +1 -0
  64. package/dist/esm/useTownsAuthStatus.js +30 -0
  65. package/dist/esm/useTownsAuthStatus.js.map +1 -0
  66. package/dist/esm/useUserDms.js +36 -0
  67. package/dist/esm/useUserDms.js.map +1 -0
  68. package/dist/esm/useUserGdms.js +27 -0
  69. package/dist/esm/useUserGdms.js.map +1 -0
  70. package/dist/esm/useUserSpaces.js +27 -0
  71. package/dist/esm/useUserSpaces.js.map +1 -0
  72. package/dist/esm/utils.js +17 -0
  73. package/dist/esm/utils.js.map +1 -0
  74. package/dist/types/TownsSyncProvider.d.ts +23 -0
  75. package/dist/types/TownsSyncProvider.d.ts.map +1 -0
  76. package/dist/types/connectTowns.d.ts +29 -0
  77. package/dist/types/connectTowns.d.ts.map +1 -0
  78. package/dist/types/index.d.ts +35 -0
  79. package/dist/types/index.d.ts.map +1 -0
  80. package/dist/types/internals/TownsSyncContext.d.ts +11 -0
  81. package/dist/types/internals/TownsSyncContext.d.ts.map +1 -0
  82. package/dist/types/internals/useAction.d.ts +38 -0
  83. package/dist/types/internals/useAction.d.ts.map +1 -0
  84. package/dist/types/internals/useTownsSync.d.ts +8 -0
  85. package/dist/types/internals/useTownsSync.d.ts.map +1 -0
  86. package/dist/types/internals/utils.d.ts +3 -0
  87. package/dist/types/internals/utils.d.ts.map +1 -0
  88. package/dist/types/useAdminRedact.d.ts +42 -0
  89. package/dist/types/useAdminRedact.d.ts.map +1 -0
  90. package/dist/types/useAgentConnection.d.ts +83 -0
  91. package/dist/types/useAgentConnection.d.ts.map +1 -0
  92. package/dist/types/useChannel.d.ts +12 -0
  93. package/dist/types/useChannel.d.ts.map +1 -0
  94. package/dist/types/useCreateChannel.d.ts +23 -0
  95. package/dist/types/useCreateChannel.d.ts.map +1 -0
  96. package/dist/types/useCreateDm.d.ts +28 -0
  97. package/dist/types/useCreateDm.d.ts.map +1 -0
  98. package/dist/types/useCreateGdm.d.ts +31 -0
  99. package/dist/types/useCreateGdm.d.ts.map +1 -0
  100. package/dist/types/useCreateSpace.d.ts +29 -0
  101. package/dist/types/useCreateSpace.d.ts.map +1 -0
  102. package/dist/types/useDm.d.ts +11 -0
  103. package/dist/types/useDm.d.ts.map +1 -0
  104. package/dist/types/useGdm.d.ts +11 -0
  105. package/dist/types/useGdm.d.ts.map +1 -0
  106. package/dist/types/useJoinSpace.d.ts +24 -0
  107. package/dist/types/useJoinSpace.d.ts.map +1 -0
  108. package/dist/types/useMember.d.ts +30 -0
  109. package/dist/types/useMember.d.ts.map +1 -0
  110. package/dist/types/useMemberList.d.ts +11 -0
  111. package/dist/types/useMemberList.d.ts.map +1 -0
  112. package/dist/types/useMyMember.d.ts +83 -0
  113. package/dist/types/useMyMember.d.ts.map +1 -0
  114. package/dist/types/useObservable.d.ts +59 -0
  115. package/dist/types/useObservable.d.ts.map +1 -0
  116. package/dist/types/useReactions.d.ts +10 -0
  117. package/dist/types/useReactions.d.ts.map +1 -0
  118. package/dist/types/useRedact.d.ts +42 -0
  119. package/dist/types/useRedact.d.ts.map +1 -0
  120. package/dist/types/useScrollback.d.ts +27 -0
  121. package/dist/types/useScrollback.d.ts.map +1 -0
  122. package/dist/types/useSendMessage.d.ts +32 -0
  123. package/dist/types/useSendMessage.d.ts.map +1 -0
  124. package/dist/types/useSendReaction.d.ts +32 -0
  125. package/dist/types/useSendReaction.d.ts.map +1 -0
  126. package/dist/types/useSpace.d.ts +22 -0
  127. package/dist/types/useSpace.d.ts.map +1 -0
  128. package/dist/types/useSyncAgent.d.ts +12 -0
  129. package/dist/types/useSyncAgent.d.ts.map +1 -0
  130. package/dist/types/useThreads.d.ts +11 -0
  131. package/dist/types/useThreads.d.ts.map +1 -0
  132. package/dist/types/useTimeline.d.ts +24 -0
  133. package/dist/types/useTimeline.d.ts.map +1 -0
  134. package/dist/types/useTowns.d.ts +14 -0
  135. package/dist/types/useTowns.d.ts.map +1 -0
  136. package/dist/types/useTownsAuthStatus.d.ts +26 -0
  137. package/dist/types/useTownsAuthStatus.d.ts.map +1 -0
  138. package/dist/types/useUserDms.d.ts +41 -0
  139. package/dist/types/useUserDms.d.ts.map +1 -0
  140. package/dist/types/useUserGdms.d.ts +32 -0
  141. package/dist/types/useUserGdms.d.ts.map +1 -0
  142. package/dist/types/useUserSpaces.d.ts +32 -0
  143. package/dist/types/useUserSpaces.d.ts.map +1 -0
  144. package/dist/types/utils.d.ts +3 -0
  145. package/dist/types/utils.d.ts.map +1 -0
  146. package/package.json +75 -0
  147. package/src/connectTowns.ts +63 -0
  148. package/src/index.ts +34 -0
  149. package/src/internals/TownsSyncContext.ts +12 -0
  150. package/src/internals/useAction.ts +84 -0
  151. package/src/internals/useTownsSync.ts +4 -0
  152. package/src/internals/utils.ts +11 -0
  153. package/src/useAdminRedact.ts +45 -0
  154. package/src/useAgentConnection.ts +143 -0
  155. package/src/useChannel.ts +27 -0
  156. package/src/useCreateChannel.ts +30 -0
  157. package/src/useCreateDm.ts +25 -0
  158. package/src/useCreateGdm.ts +25 -0
  159. package/src/useCreateSpace.ts +25 -0
  160. package/src/useDm.ts +17 -0
  161. package/src/useGdm.ts +17 -0
  162. package/src/useJoinSpace.ts +26 -0
  163. package/src/useMember.ts +45 -0
  164. package/src/useMemberList.ts +21 -0
  165. package/src/useMyMember.ts +83 -0
  166. package/src/useObservable.ts +129 -0
  167. package/src/useReactions.ts +21 -0
  168. package/src/useRedact.ts +45 -0
  169. package/src/useScrollback.ts +31 -0
  170. package/src/useSendMessage.ts +35 -0
  171. package/src/useSendReaction.ts +39 -0
  172. package/src/useSpace.ts +30 -0
  173. package/src/useThreads.ts +22 -0
  174. package/src/useTimeline.ts +35 -0
  175. package/src/useTowns.ts +22 -0
  176. package/src/useTownsAuthStatus.ts +32 -0
  177. package/src/useUserDms.ts +38 -0
  178. package/src/useUserGdms.ts +29 -0
  179. package/src/useUserSpaces.ts +29 -0
  180. package/src/utils.ts +28 -0
@@ -0,0 +1,16 @@
1
+ import { useMemo } from 'react';
2
+ import { useSyncAgent } from './useSyncAgent';
3
+ import { useObservable } from './useObservable';
4
+ /**
5
+ * Hook to get the data of a Group DM.
6
+ * You can use this hook to get Group DM metadata and if the user has joined the Group DM.
7
+ * @param streamId - The id of the Group DM to get the data of.
8
+ * @param config - Configuration options for the observable.
9
+ * @returns The GdmModel of the Group DM.
10
+ */
11
+ export const useGdm = (streamId, config) => {
12
+ const sync = useSyncAgent();
13
+ const gdm = useMemo(() => sync.gdms.getGdm(streamId), [streamId, sync]);
14
+ return useObservable(gdm, config);
15
+ };
16
+ //# sourceMappingURL=useGdm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGdm.js","sourceRoot":"","sources":["../../src/useGdm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAE/B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAyB,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAEtE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,QAAgB,EAAE,MAA4C,EAAE,EAAE;IACrF,MAAM,IAAI,GAAG,YAAY,EAAE,CAAA;IAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAA;IACvE,OAAO,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;AACrC,CAAC,CAAA"}
@@ -0,0 +1,23 @@
1
+ 'use client';
2
+ import { useAction } from './internals/useAction';
3
+ import { useSyncAgent } from './useSyncAgent';
4
+ /**
5
+ * Hook to join a space.
6
+ * @param config - Configuration options for the action.
7
+ * @returns The joinSpace action and the status of the action.
8
+ */
9
+ export const useJoinSpace = (config) => {
10
+ const sync = useSyncAgent();
11
+ const { action: joinSpace, ...rest } = useAction(sync.spaces, 'joinSpace', config);
12
+ return {
13
+ /**
14
+ * Action to join a space.
15
+ * @param spaceId - The id of the space to join.
16
+ * @param signer - The signer to use to join the space.
17
+ * @param opts - Options for the join action.
18
+ */
19
+ joinSpace,
20
+ ...rest,
21
+ };
22
+ };
23
+ //# sourceMappingURL=useJoinSpace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useJoinSpace.js","sourceRoot":"","sources":["../../src/useJoinSpace.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAGZ,OAAO,EAAqB,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAA0C,EAAE,EAAE;IACvE,MAAM,IAAI,GAAG,YAAY,EAAE,CAAA;IAC3B,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,CAAA;IAElF,OAAO;QACH;;;;;WAKG;QACH,SAAS;QACT,GAAG,IAAI;KACV,CAAA;AACL,CAAC,CAAA"}
@@ -0,0 +1,36 @@
1
+ import { useMemo } from 'react';
2
+ import { useObservable } from './useObservable';
3
+ import { useSyncAgent } from './useSyncAgent';
4
+ import { getRoom } from './utils';
5
+ /**
6
+ * Hook to get data from a specific member of a Space, GDM, Channel, or DM.
7
+ * @param props - The streamId and userId of the member to get data from.
8
+ * @param config - Configuration options for the observable.
9
+ * @returns The Member data.
10
+ */
11
+ export const useMember = (props, config) => {
12
+ const sync = useSyncAgent();
13
+ const member = useMemo(() => getRoom(sync, props.streamId).members.get(props.userId), [sync, props]);
14
+ const { data, ...rest } = useObservable(member, config);
15
+ return {
16
+ // Excluding `Member.id` property from the return value, since its a internal store id and can lead to confusion
17
+ userId: data.userId,
18
+ streamId: data.streamId,
19
+ initialized: data.initialized,
20
+ // username
21
+ username: data.username,
22
+ isUsernameConfirmed: data.isUsernameConfirmed,
23
+ isUsernameEncrypted: data.isUsernameEncrypted,
24
+ // displayName
25
+ displayName: data.displayName,
26
+ isDisplayNameEncrypted: data.isDisplayNameEncrypted,
27
+ // ensAddress
28
+ ensAddress: data.ensAddress,
29
+ // nft
30
+ nft: data.nft,
31
+ // membership
32
+ membership: data.membership,
33
+ ...rest,
34
+ };
35
+ };
36
+ //# sourceMappingURL=useMember.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMember.js","sourceRoot":"","sources":["../../src/useMember.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAG/C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEjC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACrB,KAA2C,EAC3C,MAAgD,EAClD,EAAE;IACA,MAAM,IAAI,GAAG,YAAY,EAAE,CAAA;IAC3B,MAAM,MAAM,GAAG,OAAO,CAClB,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAC7D,CAAC,IAAI,EAAE,KAAK,CAAC,CAChB,CAAA;IACD,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvD,OAAO;QACH,gHAAgH;QAChH,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,WAAW;QACX,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;QAC7C,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;QAC7C,cAAc;QACd,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;QACnD,aAAa;QACb,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,MAAM;QACN,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,aAAa;QACb,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,GAAG,IAAI;KACV,CAAA;AACL,CAAC,CAAA"}
@@ -0,0 +1,17 @@
1
+ import { useMemo } from 'react';
2
+ import { useObservable } from './useObservable';
3
+ import { useSyncAgent } from './useSyncAgent';
4
+ import { getRoom } from './utils';
5
+ /**
6
+ * Hook to get the members userIds of a Space, GDM, Channel, or DM.
7
+ * Used with useMember to get data from a specific member.
8
+ * @param streamId - The id of the stream to get the members of.
9
+ * @param config - Configuration options for the observable.
10
+ * @returns The MembersModel of the stream, containing the userIds of the members.
11
+ */
12
+ export const useMemberList = (streamId, config) => {
13
+ const sync = useSyncAgent();
14
+ const members = useMemo(() => getRoom(sync, streamId).members, [sync, streamId]);
15
+ return useObservable(members, config);
16
+ };
17
+ //# sourceMappingURL=useMemberList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMemberList.js","sourceRoot":"","sources":["../../src/useMemberList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAE/B,OAAO,EAAyB,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEjC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CACzB,QAAgB,EAChB,MAAgD,EAClD,EAAE;IACA,MAAM,IAAI,GAAG,YAAY,EAAE,CAAA;IAC3B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAA;IAChF,OAAO,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;AACzC,CAAC,CAAA"}
@@ -0,0 +1,71 @@
1
+ import { useMemo } from 'react';
2
+ import { useAction } from './internals/useAction';
3
+ import { useObservable } from './useObservable';
4
+ import { useSyncAgent } from './useSyncAgent';
5
+ import { getRoom } from './utils';
6
+ const getMyMember = (sync, streamId) => getRoom(sync, streamId).members.myself;
7
+ /**
8
+ * Hook to get the data of the current user in a stream.
9
+ * @param streamId - The id of the stream to get the current user of.
10
+ * @param config - Configuration options for the observable.
11
+ * @returns The MemberModel of the current user.
12
+ */
13
+ export const useMyMember = (streamId, config) => {
14
+ const sync = useSyncAgent();
15
+ const myself = useMemo(() => getMyMember(sync, streamId), [sync, streamId]);
16
+ const { data } = useObservable(myself.member, config);
17
+ return {
18
+ ...data,
19
+ };
20
+ };
21
+ /**
22
+ * Hook to set the ENS address of the current user in a stream.
23
+ * You should be validating if the ENS address belongs to the user before setting it.
24
+ * @param streamId - The id of the stream to set the ENS address of.
25
+ * @param config - Configuration options for the action.
26
+ * @returns The `setEnsAddress` action and its loading state.
27
+ */
28
+ export const useSetEnsAddress = (streamId, config) => {
29
+ const sync = useSyncAgent();
30
+ const member = useMemo(() => getMyMember(sync, streamId), [sync, streamId]);
31
+ const { action: setEnsAddress, ...rest } = useAction(member, 'setEnsAddress', config);
32
+ return { setEnsAddress, ...rest };
33
+ };
34
+ /**
35
+ * Hook to set the username of the current user in a stream.
36
+ * @param streamId - The id of the stream to set the username of.
37
+ * @param config - Configuration options for the action.
38
+ * @returns The `setUsername` action and its loading state.
39
+ */
40
+ export const useSetUsername = (streamId, config) => {
41
+ const sync = useSyncAgent();
42
+ const member = useMemo(() => getMyMember(sync, streamId), [sync, streamId]);
43
+ const { action: setUsername, ...rest } = useAction(member, 'setUsername', config);
44
+ return { setUsername, ...rest };
45
+ };
46
+ /**
47
+ * Hook to set the display name of the current user in a stream.
48
+ * @param streamId - The id of the stream to set the display name of.
49
+ * @param config - Configuration options for the action.
50
+ * @returns The `setDisplayName` action and its loading state.
51
+ */
52
+ export const useSetDisplayName = (streamId, config) => {
53
+ const sync = useSyncAgent();
54
+ const member = useMemo(() => getMyMember(sync, streamId), [sync, streamId]);
55
+ const { action: setDisplayName, ...rest } = useAction(member, 'setDisplayName', config);
56
+ return { setDisplayName, ...rest };
57
+ };
58
+ /**
59
+ * Hook to set the NFT of the current user in a stream.
60
+ * You should be validating if the NFT belongs to the user before setting it.
61
+ * @param streamId - The id of the stream to set the NFT of.
62
+ * @param config - Configuration options for the action.
63
+ * @returns The `setNft` action and its loading state.
64
+ */
65
+ export const useSetNft = (streamId, config) => {
66
+ const sync = useSyncAgent();
67
+ const member = useMemo(() => getMyMember(sync, streamId), [sync, streamId]);
68
+ const { action: setNft, ...rest } = useAction(member, 'setNft', config);
69
+ return { setNft, ...rest };
70
+ };
71
+ //# sourceMappingURL=useMyMember.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMyMember.js","sourceRoot":"","sources":["../../src/useMyMember.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ 'use client';
2
+ import { useCallback, useEffect, useMemo, useSyncExternalStore } from 'react';
3
+ import { isPersistedModel } from './internals/utils';
4
+ /**
5
+ * This hook subscribes to an observable and returns the value of the observable.
6
+ * @param observable - The observable to subscribe to.
7
+ * @param config - Configuration options for the observable.
8
+ * @returns The value of the observable.
9
+ */
10
+ export function useObservable(observable, config) {
11
+ const opts = useMemo(() => ({ fireImmediately: true, ...config }), [config]);
12
+ const subscribeFn = useCallback((subFn) => {
13
+ return observable.subscribe(subFn, {
14
+ fireImediately: opts?.fireImmediately,
15
+ });
16
+ }, [observable, opts?.fireImmediately]);
17
+ const value = useSyncExternalStore(subscribeFn, () => observable.value);
18
+ useEffect(() => {
19
+ if (isPersistedModel(value)) {
20
+ if (value.status === 'loaded') {
21
+ opts.onUpdate?.(value.data);
22
+ }
23
+ if (value.status === 'error') {
24
+ opts.onError?.(value.error);
25
+ }
26
+ }
27
+ else {
28
+ opts.onUpdate?.(value);
29
+ }
30
+ }, [opts, value]);
31
+ const data = useMemo(() => {
32
+ if (isPersistedModel(value)) {
33
+ const { data, status } = value;
34
+ return {
35
+ data: data,
36
+ error: status === 'error' ? value.error : undefined,
37
+ status,
38
+ isLoading: status === 'loading',
39
+ isError: status === 'error',
40
+ isLoaded: status === 'loaded',
41
+ };
42
+ }
43
+ else {
44
+ return {
45
+ data: value,
46
+ error: undefined,
47
+ status: 'loaded',
48
+ isLoading: false,
49
+ isError: false,
50
+ isLoaded: true,
51
+ };
52
+ }
53
+ }, [value]);
54
+ return data;
55
+ }
56
+ //# sourceMappingURL=useObservable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useObservable.js","sourceRoot":"","sources":["../../src/useObservable.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AACZ,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAA;AAE7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAiEpD;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAG3B,UAA6B,EAAE,MAAyC;IACtE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;IAE5E,MAAM,WAAW,GAAG,WAAW,CAC3B,CAAC,KAAiB,EAAE,EAAE;QAClB,OAAO,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE;YAC/B,cAAc,EAAE,IAAI,EAAE,eAAe;SACxC,CAAC,CAAA;IACN,CAAC,EACD,CAAC,UAAU,EAAE,IAAI,EAAE,eAAe,CAAC,CACtC,CAAA;IAED,MAAM,KAAK,GAAG,oBAAoB,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;IAEvE,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC5B,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAC/B,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;gBAC3B,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YAC/B,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAA;QAC1B,CAAC;IACL,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA;IAEjB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE;QACtB,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;YAC9B,OAAO;gBACH,IAAI,EAAE,IAAuB;gBAC7B,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;gBACnD,MAAM;gBACN,SAAS,EAAE,MAAM,KAAK,SAAS;gBAC/B,OAAO,EAAE,MAAM,KAAK,OAAO;gBAC3B,QAAQ,EAAE,MAAM,KAAK,QAAQ;aAChC,CAAA;QACL,CAAC;aAAM,CAAC;YACJ,OAAO;gBACH,IAAI,EAAE,KAAwB;gBAC9B,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,QAAiB;gBACzB,SAAS,EAAE,KAAK;gBAChB,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,IAAI;aACjB,CAAA;QACL,CAAC;IACL,CAAC,EAAE,CAAC,KAAK,CAAC,CAAiC,CAAA;IAE3C,OAAO,IAAI,CAAA;AACf,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { Space, assert } from '@towns-labs/sdk';
2
+ import { useSyncAgent } from './useSyncAgent';
3
+ import { useObservable } from './useObservable';
4
+ import { getRoom } from './utils';
5
+ /**
6
+ * Hook to get the reactions of a specific stream.
7
+ * @param streamId - The id of the stream to get the reactions of.
8
+ * @param config - Configuration options for the observable.
9
+ * @returns The reactions of the stream as a map from the message eventId to the reaction.
10
+ */
11
+ export const useReactions = (streamId, config) => {
12
+ const sync = useSyncAgent();
13
+ const room = getRoom(sync, streamId);
14
+ assert(!(room instanceof Space), 'Space does not have reactions');
15
+ return useObservable(room.timeline.reactions, config);
16
+ };
17
+ //# sourceMappingURL=useReactions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useReactions.js","sourceRoot":"","sources":["../../src/useReactions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAyB,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEjC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CACxB,QAAgB,EAChB,MAAoE,EACtE,EAAE;IACA,MAAM,IAAI,GAAG,YAAY,EAAE,CAAA;IAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IACpC,MAAM,CAAC,CAAC,CAAC,IAAI,YAAY,KAAK,CAAC,EAAE,+BAA+B,CAAC,CAAA;IAEjE,OAAO,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;AACzD,CAAC,CAAA"}
@@ -0,0 +1,43 @@
1
+ 'use client';
2
+ import { Space, assert } from '@towns-labs/sdk';
3
+ import { useAction } from './internals/useAction';
4
+ import { useSyncAgent } from './useSyncAgent';
5
+ import { getRoom } from './utils';
6
+ /**
7
+ * Hook to redact your own message in a channel stream.
8
+ * @example
9
+ *
10
+ * ### Redact a message
11
+ *
12
+ * You can use `redact` to redact a message in a stream.
13
+ * ```ts
14
+ * import { useRedact } from '@towns-labs/react-sdk'
15
+ *
16
+ * const { redact } = useRedact(streamId)
17
+ * redact({ eventId: messageEventId })
18
+ * ```
19
+ *
20
+ * ### Redact a message reaction
21
+ *
22
+ * You can also use `redact` to redact a message reaction in a stream.
23
+ * ```ts
24
+ * import { useRedact } from '@towns-labs/react-sdk'
25
+ *
26
+ * const { redact } = useRedact(streamId)
27
+ * redact({ eventId: reactionEventId })
28
+ * ```
29
+ * @param streamId - The id of the stream to redact the message in.
30
+ * @param config - Configuration options for the action.
31
+ * @returns The `redact` action and its loading state.
32
+ */
33
+ export const useRedact = (streamId, config) => {
34
+ const sync = useSyncAgent();
35
+ const room = getRoom(sync, streamId);
36
+ assert(!(room instanceof Space), 'Space does not have reactions');
37
+ const { action: redact, ...rest } = useAction(room, 'redact', config);
38
+ return {
39
+ redact,
40
+ ...rest,
41
+ };
42
+ };
43
+ //# sourceMappingURL=useRedact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRedact.js","sourceRoot":"","sources":["../../src/useRedact.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAgB,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAC7D,OAAO,EAAqB,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEjC;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,QAAgB,EAAE,MAAwC,EAAE,EAAE;IACpF,MAAM,IAAI,GAAG,YAAY,EAAE,CAAA;IAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IACpC,MAAM,CAAC,CAAC,CAAC,IAAI,YAAY,KAAK,CAAC,EAAE,+BAA+B,CAAC,CAAA;IACjE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;IAErE,OAAO;QACH,MAAM;QACN,GAAG,IAAI;KACV,CAAA;AACL,CAAC,CAAA"}
@@ -0,0 +1,27 @@
1
+ 'use client';
2
+ import { Space, assert } from '@towns-labs/sdk';
3
+ import { useMemo } from 'react';
4
+ import { useAction } from './internals/useAction';
5
+ import { useSyncAgent } from './useSyncAgent';
6
+ import { getRoom } from './utils';
7
+ /**
8
+ * Hook to get the scrollback action for a stream.
9
+ *
10
+ * Scrollback is the action of getting miniblocks from a stream before a certain point in time.
11
+ * Getting miniblocks means that new events that are possibly new messages, reactions and so on are fetched.
12
+ *
13
+ * @param streamId - The id of the stream to get the scrollback action for.
14
+ * @param config - Configuration options for the action.
15
+ * @returns The `scrollback` action and its loading state.
16
+ */
17
+ export const useScrollback = (streamId, config) => {
18
+ const sync = useSyncAgent();
19
+ const room = useMemo(() => getRoom(sync, streamId), [sync, streamId]);
20
+ assert(!(room instanceof Space), 'cant scrollback spaces');
21
+ const { action: scrollback, ...rest } = useAction(room.timeline, 'scrollback', config);
22
+ return {
23
+ scrollback,
24
+ ...rest,
25
+ };
26
+ };
27
+ //# sourceMappingURL=useScrollback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useScrollback.js","sourceRoot":"","sources":["../../src/useScrollback.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAwB,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EAAqB,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEjC;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CACzB,QAAgB,EAChB,MAAoD,EACtD,EAAE;IACA,MAAM,IAAI,GAAG,YAAY,EAAE,CAAA;IAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAA;IACrE,MAAM,CAAC,CAAC,CAAC,IAAI,YAAY,KAAK,CAAC,EAAE,wBAAwB,CAAC,CAAA;IAC1D,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,CAAA;IACtF,OAAO;QACH,UAAU;QACV,GAAG,IAAI;KACV,CAAA;AACL,CAAC,CAAA"}
@@ -0,0 +1,31 @@
1
+ 'use client';
2
+ import { Space, assert } from '@towns-labs/sdk';
3
+ import { useMemo } from 'react';
4
+ import { useAction } from './internals/useAction';
5
+ import { useSyncAgent } from './useSyncAgent';
6
+ import { getRoom } from './utils';
7
+ /**
8
+ * Hook to send a message to a stream. Can be used to send a message to a channel or a dm/group dm.
9
+ * @param streamId - The id of the stream to send the message to.
10
+ * @param config - Configuration options for the action.
11
+ * @returns The sendMessage action and the status of the action.
12
+ */
13
+ export const useSendMessage = (streamId,
14
+ // TODO: now that we're using runtime check for room type, Gdm/Dm will have the same config as Channel.
15
+ // Its not a problem, both should be the same, but we need more abstractions around this on the SyncAgent
16
+ config) => {
17
+ const sync = useSyncAgent();
18
+ const room = useMemo(() => getRoom(sync, streamId), [streamId, sync]);
19
+ assert(!(room instanceof Space), 'room cant be a space');
20
+ const { action: sendMessage, ...rest } = useAction(room, 'sendMessage', config);
21
+ return {
22
+ /** Sends a message to the stream.
23
+ * @param message - The message to send.
24
+ * @param options - Additional options for the message.
25
+ * @returns The event id of the message.
26
+ */
27
+ sendMessage,
28
+ ...rest,
29
+ };
30
+ };
31
+ //# sourceMappingURL=useSendMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSendMessage.js","sourceRoot":"","sources":["../../src/useSendMessage.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAW,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EAAqB,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEjC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC1B,QAAgB;AAChB,uGAAuG;AACvG,yGAAyG;AACzG,MAA6C,EAC/C,EAAE;IACA,MAAM,IAAI,GAAG,YAAY,EAAE,CAAA;IAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAA;IACrE,MAAM,CAAC,CAAC,CAAC,IAAI,YAAY,KAAK,CAAC,EAAE,sBAAsB,CAAC,CAAA;IACxD,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,CAAC,CAAA;IAE/E,OAAO;QACH;;;;WAIG;QACH,WAAW;QACX,GAAG,IAAI;KACV,CAAA;AACL,CAAC,CAAA"}
@@ -0,0 +1,33 @@
1
+ 'use client';
2
+ import { Space, assert } from '@towns-labs/sdk';
3
+ import { useAction } from './internals/useAction';
4
+ import { useSyncAgent } from './useSyncAgent';
5
+ import { getRoom } from './utils';
6
+ /**
7
+ * Hook to send a reaction to a message in a stream.
8
+ *
9
+ * Reaction can be any string value, including emojis.
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * import { useSendReaction } from '@towns-labs/react-sdk'
14
+ *
15
+ * const { sendReaction } = useSendReaction('stream-id')
16
+ * sendReaction(messageEventId, '🔥')
17
+ * ```
18
+ *
19
+ * @param streamId - The id of the stream to send the reaction to.
20
+ * @param config - Configuration options for the action.
21
+ * @returns The `sendReaction` action and its loading state.
22
+ */
23
+ export const useSendReaction = (streamId, config) => {
24
+ const sync = useSyncAgent();
25
+ const room = getRoom(sync, streamId);
26
+ assert(!(room instanceof Space), 'Space does not have reactions');
27
+ const { action: sendReaction, ...rest } = useAction(room, 'sendReaction', config);
28
+ return {
29
+ sendReaction,
30
+ ...rest,
31
+ };
32
+ };
33
+ //# sourceMappingURL=useSendReaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSendReaction.js","sourceRoot":"","sources":["../../src/useSendReaction.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAgB,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAC7D,OAAO,EAAqB,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEjC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC3B,QAAgB,EAChB,MAA8C,EAChD,EAAE;IACA,MAAM,IAAI,GAAG,YAAY,EAAE,CAAA;IAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IACpC,MAAM,CAAC,CAAC,CAAC,IAAI,YAAY,KAAK,CAAC,EAAE,+BAA+B,CAAC,CAAA;IAEjE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,CAAA;IAEjF,OAAO;QACH,YAAY;QACZ,GAAG,IAAI;KACV,CAAA;AACL,CAAC,CAAA"}
@@ -0,0 +1,28 @@
1
+ 'use client';
2
+ import { useMemo } from 'react';
3
+ import { useSyncAgent } from './useSyncAgent';
4
+ import { useObservable } from './useObservable';
5
+ /**
6
+ * Hook to get data about a space.
7
+ * You can use this hook to get space metadata and ids of channels in the space.
8
+ * @param spaceId - The id of the space to get data about.
9
+ * @param config - Configuration options for the observable.
10
+ * @returns The SpaceModel data.
11
+ * @example
12
+ * You can use this hook to display the data about a space:
13
+ *
14
+ * ```tsx
15
+ * import { useSpace } from '@towns-labs/react-sdk'
16
+ *
17
+ * const Space = ({ spaceId }: { spaceId: string }) => {
18
+ * const { data: space } = useSpace(spaceId)
19
+ * return <div>{space.metadata?.name || 'Unnamed Space'}</div>
20
+ * }
21
+ * ```
22
+ */
23
+ export const useSpace = (spaceId, config) => {
24
+ const sync = useSyncAgent();
25
+ const observable = useMemo(() => sync.spaces.getSpace(spaceId), [sync, spaceId]);
26
+ return useObservable(observable, config);
27
+ };
28
+ //# sourceMappingURL=useSpace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSpace.js","sourceRoot":"","sources":["../../src/useSpace.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAE/B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAyB,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAEtE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,OAAe,EAAE,MAA+C,EAAE,EAAE;IACzF,MAAM,IAAI,GAAG,YAAY,EAAE,CAAA;IAC3B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAA;IAChF,OAAO,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;AAC5C,CAAC,CAAA"}
@@ -0,0 +1,20 @@
1
+ 'use client';
2
+ import { useTownsSync } from './internals/useTownsSync';
3
+ /**
4
+ * Hook to get the sync agent from the TownsSyncProvider.
5
+ *
6
+ * You can use it to interact with the sync agent for more advanced usage.
7
+ *
8
+ * Throws an error if no sync agent is set in the TownsSyncProvider.
9
+ *
10
+ * @returns The sync agent in use, set in TownsSyncProvider.
11
+ * @throws If no sync agent is set, use TownsSyncProvider to set one or use useAgentConnection to check if connected.
12
+ */
13
+ export const useSyncAgent = () => {
14
+ const towns = useTownsSync();
15
+ if (!towns?.syncAgent) {
16
+ throw new Error('No SyncAgent set, use TownsSyncProvider to set one or use useAgentConnection to check if connected');
17
+ }
18
+ return towns.syncAgent;
19
+ };
20
+ //# sourceMappingURL=useSyncAgent.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSyncAgent.jsx","sourceRoot":"","sources":["../../src/useSyncAgent.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;AACZ,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAEvD;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE;IAC7B,MAAM,KAAK,GAAG,YAAY,EAAE,CAAA;IAE5B,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACX,oGAAoG,CACvG,CAAA;IACL,CAAC;IAED,OAAO,KAAK,CAAC,SAAS,CAAA;AAC1B,CAAC,CAAA"}
@@ -0,0 +1,19 @@
1
+ import { useMemo } from 'react';
2
+ import { Space, assert } from '@towns-labs/sdk';
3
+ import { useSyncAgent } from './useSyncAgent';
4
+ import { useObservable } from './useObservable';
5
+ import { getRoom } from './utils';
6
+ /**
7
+ * Hook to get the threads from a stream.
8
+ *
9
+ * @param streamId - The id of the stream to get the threads from.
10
+ * @param config - Configuration options for the observable.
11
+ * @returns The threads of the stream as a map from the message eventId to a thread.
12
+ */
13
+ export const useThreads = (streamId, config) => {
14
+ const sync = useSyncAgent();
15
+ const room = useMemo(() => getRoom(sync, streamId), [streamId, sync]);
16
+ assert(!(room instanceof Space), 'room cant be a space');
17
+ return useObservable(room.timeline.threads, config);
18
+ };
19
+ //# sourceMappingURL=useThreads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useThreads.js","sourceRoot":"","sources":["../../src/useThreads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EAAE,KAAK,EAAgB,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAyB,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEjC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CACtB,QAAgB,EAChB,MAAsD,EACxD,EAAE;IACA,MAAM,IAAI,GAAG,YAAY,EAAE,CAAA;IAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAA;IACrE,MAAM,CAAC,CAAC,CAAC,IAAI,YAAY,KAAK,CAAC,EAAE,sBAAsB,CAAC,CAAA;IACxD,OAAO,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;AACvD,CAAC,CAAA"}
@@ -0,0 +1,32 @@
1
+ import { Space, assert } from '@towns-labs/sdk';
2
+ import { useMemo } from 'react';
3
+ import { useObservable } from './useObservable';
4
+ import { getRoom } from './utils';
5
+ import { useSyncAgent } from './useSyncAgent';
6
+ /**
7
+ * Hook to get the timeline events from a stream.
8
+ *
9
+ * You can use the `useTimeline` hook to get the timeline events from a channel stream, dm stream or group dm stream
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * import { useTimeline } from '@towns-labs/react-sdk'
14
+ * import { RiverTimelineEvent } from '@towns-labs/sdk'
15
+ *
16
+ * const { data: events } = useTimeline(streamId)
17
+ *
18
+ * // You can filter the events by their kind
19
+ * const messages = events.filter((event) => event.content?.kind === RiverTimelineEvent.ChannelMessage)
20
+ * ```
21
+ *
22
+ * @param streamId - The id of the stream to get the timeline events from.
23
+ * @param config - Configuration options for the observable.
24
+ * @returns The timeline events of the stream as an observable.
25
+ */
26
+ export const useTimeline = (streamId, config) => {
27
+ const sync = useSyncAgent();
28
+ const room = useMemo(() => getRoom(sync, streamId), [streamId, sync]);
29
+ assert(!(room instanceof Space), 'Space does not have timeline');
30
+ return useObservable(room.timeline.events, config);
31
+ };
32
+ //# sourceMappingURL=useTimeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTimeline.js","sourceRoot":"","sources":["../../src/useTimeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAsB,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EAAyB,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CACvB,QAAgB,EAChB,MAAyD,EAC3D,EAAE;IACA,MAAM,IAAI,GAAG,YAAY,EAAE,CAAA;IAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAA;IACrE,MAAM,CAAC,CAAC,CAAC,IAAI,YAAY,KAAK,CAAC,EAAE,8BAA8B,CAAC,CAAA;IAChE,OAAO,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AACtD,CAAC,CAAA"}
@@ -0,0 +1,16 @@
1
+ 'use client';
2
+ import { useObservable } from './useObservable';
3
+ import { useSyncAgent } from './useSyncAgent';
4
+ /**
5
+ * Hook to get an observable from the sync agent.
6
+ *
7
+ * An alternative of our premade hooks, allowing the creation of custom abstractions.
8
+ * @param selector - A selector function to get a observable from the sync agent.
9
+ * @param config - Configuration options for the observable.
10
+ * @returns The data from the selected observable.
11
+ */
12
+ export function useTowns(selector, config) {
13
+ const syncAgent = useSyncAgent();
14
+ return useObservable(selector(syncAgent.observables), config);
15
+ }
16
+ //# sourceMappingURL=useTowns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTowns.js","sourceRoot":"","sources":["../../src/useTowns.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAyB,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAI7C;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CACpB,QAA+C,EAC/C,MAAqC;IAErC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAChC,OAAO,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,CAAA;AACjE,CAAC"}
@@ -0,0 +1,30 @@
1
+ 'use client';
2
+ import { AuthStatus } from '@towns-labs/sdk';
3
+ import { useTowns } from './useTowns';
4
+ /**
5
+ * Hook to get the auth status of the user connection with the Towns network.
6
+ * @param config - Configuration options for the observable.
7
+ * @returns An object containing the current AuthStatus status and boolean flags for each possible status.
8
+ */
9
+ export const useTownsAuthStatus = (config) => {
10
+ const { data: status } = useTowns((s) => s.riverAuthStatus, config);
11
+ return {
12
+ /** The current AuthStatus of the user connection with the Towns network. */
13
+ status,
14
+ /** Whether the user connection with the Towns network is initializing. */
15
+ isInitializing: status === AuthStatus.Initializing,
16
+ /** Whether the user connection with the Towns network is evaluating credentials. */
17
+ isEvaluatingCredentials: status === AuthStatus.EvaluatingCredentials,
18
+ /** Whether the user connection with the Towns network is credentialed. */
19
+ isCredentialed: status === AuthStatus.Credentialed,
20
+ /** Whether the user connection with the Towns network is connecting to Towns. */
21
+ isConnectingToTowns: status === AuthStatus.ConnectingToRiver,
22
+ /** Whether the user connection with the Towns network is connected to Towns. */
23
+ isConnectedToTowns: status === AuthStatus.ConnectedToRiver,
24
+ /** Whether the user connection with the Towns network is disconnected. */
25
+ isDisconnected: status === AuthStatus.Disconnected,
26
+ /** Whether the user connection with the Towns network is in an error state. */
27
+ isError: status === AuthStatus.Error,
28
+ };
29
+ };
30
+ //# sourceMappingURL=useTownsAuthStatus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTownsAuthStatus.js","sourceRoot":"","sources":["../../src/useTownsAuthStatus.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAGrC;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAoD,EAAE,EAAE;IACvF,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,MAAM,CAAC,CAAA;IACnE,OAAO;QACH,4EAA4E;QAC5E,MAAM;QACN,0EAA0E;QAC1E,cAAc,EAAE,MAAM,KAAK,UAAU,CAAC,YAAY;QAClD,oFAAoF;QACpF,uBAAuB,EAAE,MAAM,KAAK,UAAU,CAAC,qBAAqB;QACpE,0EAA0E;QAC1E,cAAc,EAAE,MAAM,KAAK,UAAU,CAAC,YAAY;QAClD,iFAAiF;QACjF,mBAAmB,EAAE,MAAM,KAAK,UAAU,CAAC,iBAAiB;QAC5D,gFAAgF;QAChF,kBAAkB,EAAE,MAAM,KAAK,UAAU,CAAC,gBAAgB;QAC1D,0EAA0E;QAC1E,cAAc,EAAE,MAAM,KAAK,UAAU,CAAC,YAAY;QAClD,+EAA+E;QAC/E,OAAO,EAAE,MAAM,KAAK,UAAU,CAAC,KAAK;KACvC,CAAA;AACL,CAAC,CAAA"}