@towns-labs/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 (978) hide show
  1. package/README.md +29 -0
  2. package/dist/appRegistryService.d.ts +17 -0
  3. package/dist/appRegistryService.d.ts.map +1 -0
  4. package/dist/appRegistryService.js +48 -0
  5. package/dist/appRegistryService.js.map +1 -0
  6. package/dist/check.d.ts +31 -0
  7. package/dist/check.d.ts.map +1 -0
  8. package/dist/check.js +44 -0
  9. package/dist/check.js.map +1 -0
  10. package/dist/client-v2.d.ts +89 -0
  11. package/dist/client-v2.d.ts.map +1 -0
  12. package/dist/client-v2.js +293 -0
  13. package/dist/client-v2.js.map +1 -0
  14. package/dist/client.d.ts +390 -0
  15. package/dist/client.d.ts.map +1 -0
  16. package/dist/client.js +2135 -0
  17. package/dist/client.js.map +1 -0
  18. package/dist/clientDecryptionExtensions.d.ts +50 -0
  19. package/dist/clientDecryptionExtensions.d.ts.map +1 -0
  20. package/dist/clientDecryptionExtensions.js +319 -0
  21. package/dist/clientDecryptionExtensions.js.map +1 -0
  22. package/dist/createApp.d.ts +31 -0
  23. package/dist/createApp.d.ts.map +1 -0
  24. package/dist/createApp.js +77 -0
  25. package/dist/createApp.js.map +1 -0
  26. package/dist/createBot.d.ts +159 -0
  27. package/dist/createBot.d.ts.map +1 -0
  28. package/dist/createBot.js +206 -0
  29. package/dist/createBot.js.map +1 -0
  30. package/dist/decryptionExtensions.d.ts +214 -0
  31. package/dist/decryptionExtensions.d.ts.map +1 -0
  32. package/dist/decryptionExtensions.js +883 -0
  33. package/dist/decryptionExtensions.js.map +1 -0
  34. package/dist/encryptedContentTypes.d.ts +35 -0
  35. package/dist/encryptedContentTypes.d.ts.map +1 -0
  36. package/dist/encryptedContentTypes.js +86 -0
  37. package/dist/encryptedContentTypes.js.map +1 -0
  38. package/dist/id.d.ts +77 -0
  39. package/dist/id.d.ts.map +1 -0
  40. package/dist/id.js +224 -0
  41. package/dist/id.js.map +1 -0
  42. package/dist/index.d.ts +131 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +131 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/makeAppRegistryRpcClient.d.ts +8 -0
  47. package/dist/makeAppRegistryRpcClient.d.ts.map +1 -0
  48. package/dist/makeAppRegistryRpcClient.js +40 -0
  49. package/dist/makeAppRegistryRpcClient.js.map +1 -0
  50. package/dist/makeAuthenticationRpcClient.d.ts +8 -0
  51. package/dist/makeAuthenticationRpcClient.d.ts.map +1 -0
  52. package/dist/makeAuthenticationRpcClient.js +39 -0
  53. package/dist/makeAuthenticationRpcClient.js.map +1 -0
  54. package/dist/makeNotificationRpcClient.d.ts +8 -0
  55. package/dist/makeNotificationRpcClient.d.ts.map +1 -0
  56. package/dist/makeNotificationRpcClient.js +40 -0
  57. package/dist/makeNotificationRpcClient.js.map +1 -0
  58. package/dist/makeRiverRpcClient.d.ts +6 -0
  59. package/dist/makeRiverRpcClient.d.ts.map +1 -0
  60. package/dist/makeRiverRpcClient.js +9 -0
  61. package/dist/makeRiverRpcClient.js.map +1 -0
  62. package/dist/makeStreamRpcClient.d.ts +21 -0
  63. package/dist/makeStreamRpcClient.d.ts.map +1 -0
  64. package/dist/makeStreamRpcClient.js +110 -0
  65. package/dist/makeStreamRpcClient.js.map +1 -0
  66. package/dist/memberMetadata_DisplayNames.d.ts +26 -0
  67. package/dist/memberMetadata_DisplayNames.d.ts.map +1 -0
  68. package/dist/memberMetadata_DisplayNames.js +95 -0
  69. package/dist/memberMetadata_DisplayNames.js.map +1 -0
  70. package/dist/memberMetadata_EnsAddresses.d.ts +25 -0
  71. package/dist/memberMetadata_EnsAddresses.d.ts.map +1 -0
  72. package/dist/memberMetadata_EnsAddresses.js +86 -0
  73. package/dist/memberMetadata_EnsAddresses.js.map +1 -0
  74. package/dist/memberMetadata_Nft.d.ts +31 -0
  75. package/dist/memberMetadata_Nft.d.ts.map +1 -0
  76. package/dist/memberMetadata_Nft.js +95 -0
  77. package/dist/memberMetadata_Nft.js.map +1 -0
  78. package/dist/memberMetadata_Usernames.d.ts +35 -0
  79. package/dist/memberMetadata_Usernames.d.ts.map +1 -0
  80. package/dist/memberMetadata_Usernames.js +162 -0
  81. package/dist/memberMetadata_Usernames.js.map +1 -0
  82. package/dist/migrations/migrateSnapshot.d.ts +3 -0
  83. package/dist/migrations/migrateSnapshot.d.ts.map +1 -0
  84. package/dist/migrations/migrateSnapshot.js +29 -0
  85. package/dist/migrations/migrateSnapshot.js.map +1 -0
  86. package/dist/migrations/snapshotMigration0000.d.ts +3 -0
  87. package/dist/migrations/snapshotMigration0000.d.ts.map +1 -0
  88. package/dist/migrations/snapshotMigration0000.js +5 -0
  89. package/dist/migrations/snapshotMigration0000.js.map +1 -0
  90. package/dist/migrations/snapshotMigration0001.d.ts +3 -0
  91. package/dist/migrations/snapshotMigration0001.d.ts.map +1 -0
  92. package/dist/migrations/snapshotMigration0001.js +40 -0
  93. package/dist/migrations/snapshotMigration0001.js.map +1 -0
  94. package/dist/migrations/snapshotMigration0002.d.ts +3 -0
  95. package/dist/migrations/snapshotMigration0002.d.ts.map +1 -0
  96. package/dist/migrations/snapshotMigration0002.js +23 -0
  97. package/dist/migrations/snapshotMigration0002.js.map +1 -0
  98. package/dist/migrations/snapshotMigration0003.d.ts +6 -0
  99. package/dist/migrations/snapshotMigration0003.d.ts.map +1 -0
  100. package/dist/migrations/snapshotMigration0003.js +15 -0
  101. package/dist/migrations/snapshotMigration0003.js.map +1 -0
  102. package/dist/migrations/snapshotMigration0004.d.ts +9 -0
  103. package/dist/migrations/snapshotMigration0004.d.ts.map +1 -0
  104. package/dist/migrations/snapshotMigration0004.js +93 -0
  105. package/dist/migrations/snapshotMigration0004.js.map +1 -0
  106. package/dist/migrations/snapshotMigration0005.d.ts +9 -0
  107. package/dist/migrations/snapshotMigration0005.d.ts.map +1 -0
  108. package/dist/migrations/snapshotMigration0005.js +89 -0
  109. package/dist/migrations/snapshotMigration0005.js.map +1 -0
  110. package/dist/migrations/snapshotMigration0006.d.ts +9 -0
  111. package/dist/migrations/snapshotMigration0006.d.ts.map +1 -0
  112. package/dist/migrations/snapshotMigration0006.js +33 -0
  113. package/dist/migrations/snapshotMigration0006.js.map +1 -0
  114. package/dist/notificationService.d.ts +17 -0
  115. package/dist/notificationService.d.ts.map +1 -0
  116. package/dist/notificationService.js +49 -0
  117. package/dist/notificationService.js.map +1 -0
  118. package/dist/notificationsClient.d.ts +48 -0
  119. package/dist/notificationsClient.d.ts.map +1 -0
  120. package/dist/notificationsClient.js +302 -0
  121. package/dist/notificationsClient.js.map +1 -0
  122. package/dist/observable/combine.d.ts +44 -0
  123. package/dist/observable/combine.d.ts.map +1 -0
  124. package/dist/observable/combine.js +67 -0
  125. package/dist/observable/combine.js.map +1 -0
  126. package/dist/observable/constant.d.ts +7 -0
  127. package/dist/observable/constant.d.ts.map +1 -0
  128. package/dist/observable/constant.js +13 -0
  129. package/dist/observable/constant.js.map +1 -0
  130. package/dist/observable/observable.d.ts +33 -0
  131. package/dist/observable/observable.d.ts.map +1 -0
  132. package/dist/observable/observable.js +109 -0
  133. package/dist/observable/observable.js.map +1 -0
  134. package/dist/observable/observableRecord.d.ts +18 -0
  135. package/dist/observable/observableRecord.d.ts.map +1 -0
  136. package/dist/observable/observableRecord.js +71 -0
  137. package/dist/observable/observableRecord.js.map +1 -0
  138. package/dist/observable/persistedObservable.d.ts +39 -0
  139. package/dist/observable/persistedObservable.d.ts.map +1 -0
  140. package/dist/observable/persistedObservable.js +77 -0
  141. package/dist/observable/persistedObservable.js.map +1 -0
  142. package/dist/observable/utils.d.ts +2 -0
  143. package/dist/observable/utils.d.ts.map +1 -0
  144. package/dist/observable/utils.js +12 -0
  145. package/dist/observable/utils.js.map +1 -0
  146. package/dist/persistenceStore.d.ts +112 -0
  147. package/dist/persistenceStore.d.ts.map +1 -0
  148. package/dist/persistenceStore.js +465 -0
  149. package/dist/persistenceStore.js.map +1 -0
  150. package/dist/riverDbManager.d.ts +5 -0
  151. package/dist/riverDbManager.d.ts.map +1 -0
  152. package/dist/riverDbManager.js +7 -0
  153. package/dist/riverDbManager.js.map +1 -0
  154. package/dist/rpcCommon.d.ts +7 -0
  155. package/dist/rpcCommon.d.ts.map +1 -0
  156. package/dist/rpcCommon.js +2 -0
  157. package/dist/rpcCommon.js.map +1 -0
  158. package/dist/rpcInterceptors.d.ts +21 -0
  159. package/dist/rpcInterceptors.d.ts.map +1 -0
  160. package/dist/rpcInterceptors.js +376 -0
  161. package/dist/rpcInterceptors.js.map +1 -0
  162. package/dist/sign.d.ts +59 -0
  163. package/dist/sign.d.ts.map +1 -0
  164. package/dist/sign.js +363 -0
  165. package/dist/sign.js.map +1 -0
  166. package/dist/signerContext.d.ts +62 -0
  167. package/dist/signerContext.d.ts.map +1 -0
  168. package/dist/signerContext.js +103 -0
  169. package/dist/signerContext.js.map +1 -0
  170. package/dist/store/store.d.ts +22 -0
  171. package/dist/store/store.d.ts.map +1 -0
  172. package/dist/store/store.js +165 -0
  173. package/dist/store/store.js.map +1 -0
  174. package/dist/stream.d.ts +49 -0
  175. package/dist/stream.d.ts.map +1 -0
  176. package/dist/stream.js +112 -0
  177. package/dist/stream.js.map +1 -0
  178. package/dist/streamEvents.d.ts +96 -0
  179. package/dist/streamEvents.d.ts.map +1 -0
  180. package/dist/streamEvents.js +2 -0
  181. package/dist/streamEvents.js.map +1 -0
  182. package/dist/streamStateView.d.ts +87 -0
  183. package/dist/streamStateView.d.ts.map +1 -0
  184. package/dist/streamStateView.js +596 -0
  185. package/dist/streamStateView.js.map +1 -0
  186. package/dist/streamStateView_AbstractContent.d.ts +15 -0
  187. package/dist/streamStateView_AbstractContent.d.ts.map +1 -0
  188. package/dist/streamStateView_AbstractContent.js +24 -0
  189. package/dist/streamStateView_AbstractContent.js.map +1 -0
  190. package/dist/streamStateView_Channel.d.ts +16 -0
  191. package/dist/streamStateView_Channel.d.ts.map +1 -0
  192. package/dist/streamStateView_Channel.js +76 -0
  193. package/dist/streamStateView_Channel.js.map +1 -0
  194. package/dist/streamStateView_ChannelMetadata.d.ts +22 -0
  195. package/dist/streamStateView_ChannelMetadata.d.ts.map +1 -0
  196. package/dist/streamStateView_ChannelMetadata.js +77 -0
  197. package/dist/streamStateView_ChannelMetadata.js.map +1 -0
  198. package/dist/streamStateView_DMChannel.d.ts +25 -0
  199. package/dist/streamStateView_DMChannel.d.ts.map +1 -0
  200. package/dist/streamStateView_DMChannel.js +114 -0
  201. package/dist/streamStateView_DMChannel.js.map +1 -0
  202. package/dist/streamStateView_GDMChannel.d.ts +27 -0
  203. package/dist/streamStateView_GDMChannel.d.ts.map +1 -0
  204. package/dist/streamStateView_GDMChannel.js +160 -0
  205. package/dist/streamStateView_GDMChannel.js.map +1 -0
  206. package/dist/streamStateView_Media.d.ts +22 -0
  207. package/dist/streamStateView_Media.d.ts.map +1 -0
  208. package/dist/streamStateView_Media.js +60 -0
  209. package/dist/streamStateView_Media.js.map +1 -0
  210. package/dist/streamStateView_MemberMetadata.d.ts +59 -0
  211. package/dist/streamStateView_MemberMetadata.d.ts.map +1 -0
  212. package/dist/streamStateView_MemberMetadata.js +113 -0
  213. package/dist/streamStateView_MemberMetadata.js.map +1 -0
  214. package/dist/streamStateView_Members.d.ts +101 -0
  215. package/dist/streamStateView_Members.d.ts.map +1 -0
  216. package/dist/streamStateView_Members.js +582 -0
  217. package/dist/streamStateView_Members.js.map +1 -0
  218. package/dist/streamStateView_Members_Solicitations.d.ts +15 -0
  219. package/dist/streamStateView_Members_Solicitations.d.ts.map +1 -0
  220. package/dist/streamStateView_Members_Solicitations.js +48 -0
  221. package/dist/streamStateView_Members_Solicitations.js.map +1 -0
  222. package/dist/streamStateView_Space.d.ts +31 -0
  223. package/dist/streamStateView_Space.d.ts.map +1 -0
  224. package/dist/streamStateView_Space.js +193 -0
  225. package/dist/streamStateView_Space.js.map +1 -0
  226. package/dist/streamStateView_UnknownContent.d.ts +11 -0
  227. package/dist/streamStateView_UnknownContent.d.ts.map +1 -0
  228. package/dist/streamStateView_UnknownContent.js +15 -0
  229. package/dist/streamStateView_UnknownContent.js.map +1 -0
  230. package/dist/streamStateView_User.d.ts +27 -0
  231. package/dist/streamStateView_User.d.ts.map +1 -0
  232. package/dist/streamStateView_User.js +200 -0
  233. package/dist/streamStateView_User.js.map +1 -0
  234. package/dist/streamStateView_UserInbox.d.ts +21 -0
  235. package/dist/streamStateView_UserInbox.d.ts.map +1 -0
  236. package/dist/streamStateView_UserInbox.js +85 -0
  237. package/dist/streamStateView_UserInbox.js.map +1 -0
  238. package/dist/streamStateView_UserMetadata.d.ts +31 -0
  239. package/dist/streamStateView_UserMetadata.d.ts.map +1 -0
  240. package/dist/streamStateView_UserMetadata.js +160 -0
  241. package/dist/streamStateView_UserMetadata.js.map +1 -0
  242. package/dist/streamStateView_UserSettings.d.ts +24 -0
  243. package/dist/streamStateView_UserSettings.d.ts.map +1 -0
  244. package/dist/streamStateView_UserSettings.js +125 -0
  245. package/dist/streamStateView_UserSettings.js.map +1 -0
  246. package/dist/streamUtils.d.ts +49 -0
  247. package/dist/streamUtils.d.ts.map +1 -0
  248. package/dist/streamUtils.js +220 -0
  249. package/dist/streamUtils.js.map +1 -0
  250. package/dist/sync/ISyncedStreamsController.d.ts +17 -0
  251. package/dist/sync/ISyncedStreamsController.d.ts.map +1 -0
  252. package/dist/sync/ISyncedStreamsController.js +2 -0
  253. package/dist/sync/ISyncedStreamsController.js.map +1 -0
  254. package/dist/sync/SyncedStreamsControllerLite.d.ts +32 -0
  255. package/dist/sync/SyncedStreamsControllerLite.d.ts.map +1 -0
  256. package/dist/sync/SyncedStreamsControllerLite.js +183 -0
  257. package/dist/sync/SyncedStreamsControllerLite.js.map +1 -0
  258. package/dist/sync-agent/constants.d.ts +2 -0
  259. package/dist/sync-agent/constants.d.ts.map +1 -0
  260. package/dist/sync-agent/constants.js +2 -0
  261. package/dist/sync-agent/constants.js.map +1 -0
  262. package/dist/sync-agent/db.d.ts +18 -0
  263. package/dist/sync-agent/db.d.ts.map +1 -0
  264. package/dist/sync-agent/db.js +34 -0
  265. package/dist/sync-agent/db.js.map +1 -0
  266. package/dist/sync-agent/dms/dms.d.ts +24 -0
  267. package/dist/sync-agent/dms/dms.d.ts.map +1 -0
  268. package/dist/sync-agent/dms/dms.js +60 -0
  269. package/dist/sync-agent/dms/dms.js.map +1 -0
  270. package/dist/sync-agent/dms/models/dm.d.ts +76 -0
  271. package/dist/sync-agent/dms/models/dm.d.ts.map +1 -0
  272. package/dist/sync-agent/dms/models/dm.js +177 -0
  273. package/dist/sync-agent/dms/models/dm.js.map +1 -0
  274. package/dist/sync-agent/entitlements/entitlements.d.ts +10 -0
  275. package/dist/sync-agent/entitlements/entitlements.d.ts.map +1 -0
  276. package/dist/sync-agent/entitlements/entitlements.js +20 -0
  277. package/dist/sync-agent/entitlements/entitlements.js.map +1 -0
  278. package/dist/sync-agent/gdms/gdms.d.ts +23 -0
  279. package/dist/sync-agent/gdms/gdms.d.ts.map +1 -0
  280. package/dist/sync-agent/gdms/gdms.js +56 -0
  281. package/dist/sync-agent/gdms/gdms.js.map +1 -0
  282. package/dist/sync-agent/gdms/models/gdm.d.ts +76 -0
  283. package/dist/sync-agent/gdms/models/gdm.d.ts.map +1 -0
  284. package/dist/sync-agent/gdms/models/gdm.js +176 -0
  285. package/dist/sync-agent/gdms/models/gdm.js.map +1 -0
  286. package/dist/sync-agent/members/members.d.ts +32 -0
  287. package/dist/sync-agent/members/members.d.ts.map +1 -0
  288. package/dist/sync-agent/members/members.js +143 -0
  289. package/dist/sync-agent/members/members.js.map +1 -0
  290. package/dist/sync-agent/members/models/member.d.ts +68 -0
  291. package/dist/sync-agent/members/models/member.d.ts.map +1 -0
  292. package/dist/sync-agent/members/models/member.js +134 -0
  293. package/dist/sync-agent/members/models/member.js.map +1 -0
  294. package/dist/sync-agent/members/models/myself.d.ts +20 -0
  295. package/dist/sync-agent/members/models/myself.d.ts.map +1 -0
  296. package/dist/sync-agent/members/models/myself.js +97 -0
  297. package/dist/sync-agent/members/models/myself.js.map +1 -0
  298. package/dist/sync-agent/river-connection/models/authStatus.d.ts +18 -0
  299. package/dist/sync-agent/river-connection/models/authStatus.d.ts.map +1 -0
  300. package/dist/sync-agent/river-connection/models/authStatus.js +19 -0
  301. package/dist/sync-agent/river-connection/models/authStatus.js.map +1 -0
  302. package/dist/sync-agent/river-connection/models/riverChain.d.ts +24 -0
  303. package/dist/sync-agent/river-connection/models/riverChain.d.ts.map +1 -0
  304. package/dist/sync-agent/river-connection/models/riverChain.js +66 -0
  305. package/dist/sync-agent/river-connection/models/riverChain.js.map +1 -0
  306. package/dist/sync-agent/river-connection/models/transactionalClient.d.ts +11 -0
  307. package/dist/sync-agent/river-connection/models/transactionalClient.d.ts.map +1 -0
  308. package/dist/sync-agent/river-connection/models/transactionalClient.js +14 -0
  309. package/dist/sync-agent/river-connection/models/transactionalClient.js.map +1 -0
  310. package/dist/sync-agent/river-connection/riverConnection.d.ts +66 -0
  311. package/dist/sync-agent/river-connection/riverConnection.d.ts.map +1 -0
  312. package/dist/sync-agent/river-connection/riverConnection.js +222 -0
  313. package/dist/sync-agent/river-connection/riverConnection.js.map +1 -0
  314. package/dist/sync-agent/spaces/models/channel.d.ts +124 -0
  315. package/dist/sync-agent/spaces/models/channel.d.ts.map +1 -0
  316. package/dist/sync-agent/spaces/models/channel.js +254 -0
  317. package/dist/sync-agent/spaces/models/channel.js.map +1 -0
  318. package/dist/sync-agent/spaces/models/space.d.ts +57 -0
  319. package/dist/sync-agent/spaces/models/space.d.ts.map +1 -0
  320. package/dist/sync-agent/spaces/models/space.js +147 -0
  321. package/dist/sync-agent/spaces/models/space.js.map +1 -0
  322. package/dist/sync-agent/spaces/spaces.d.ts +29 -0
  323. package/dist/sync-agent/spaces/spaces.d.ts.map +1 -0
  324. package/dist/sync-agent/spaces/spaces.js +90 -0
  325. package/dist/sync-agent/spaces/spaces.js.map +1 -0
  326. package/dist/sync-agent/syncAgent.d.ts +66 -0
  327. package/dist/sync-agent/syncAgent.d.ts.map +1 -0
  328. package/dist/sync-agent/syncAgent.js +102 -0
  329. package/dist/sync-agent/syncAgent.js.map +1 -0
  330. package/dist/sync-agent/timeline/timeline.d.ts +26 -0
  331. package/dist/sync-agent/timeline/timeline.d.ts.map +1 -0
  332. package/dist/sync-agent/timeline/timeline.js +56 -0
  333. package/dist/sync-agent/timeline/timeline.js.map +1 -0
  334. package/dist/sync-agent/user/models/userInbox.d.ts +21 -0
  335. package/dist/sync-agent/user/models/userInbox.d.ts.map +1 -0
  336. package/dist/sync-agent/user/models/userInbox.js +68 -0
  337. package/dist/sync-agent/user/models/userInbox.js.map +1 -0
  338. package/dist/sync-agent/user/models/userMemberships.d.ts +28 -0
  339. package/dist/sync-agent/user/models/userMemberships.d.ts.map +1 -0
  340. package/dist/sync-agent/user/models/userMemberships.js +83 -0
  341. package/dist/sync-agent/user/models/userMemberships.js.map +1 -0
  342. package/dist/sync-agent/user/models/userMetadata.d.ts +21 -0
  343. package/dist/sync-agent/user/models/userMetadata.d.ts.map +1 -0
  344. package/dist/sync-agent/user/models/userMetadata.js +68 -0
  345. package/dist/sync-agent/user/models/userMetadata.js.map +1 -0
  346. package/dist/sync-agent/user/models/userSettings.d.ts +17 -0
  347. package/dist/sync-agent/user/models/userSettings.d.ts.map +1 -0
  348. package/dist/sync-agent/user/models/userSettings.js +48 -0
  349. package/dist/sync-agent/user/models/userSettings.js.map +1 -0
  350. package/dist/sync-agent/user/user.d.ts +18 -0
  351. package/dist/sync-agent/user/user.d.ts.map +1 -0
  352. package/dist/sync-agent/user/user.js +30 -0
  353. package/dist/sync-agent/user/user.js.map +1 -0
  354. package/dist/sync-agent/utils/bot.d.ts +16 -0
  355. package/dist/sync-agent/utils/bot.d.ts.map +1 -0
  356. package/dist/sync-agent/utils/bot.js +39 -0
  357. package/dist/sync-agent/utils/bot.js.map +1 -0
  358. package/dist/sync-agent/utils/promiseQueue.d.ts +6 -0
  359. package/dist/sync-agent/utils/promiseQueue.d.ts.map +1 -0
  360. package/dist/sync-agent/utils/promiseQueue.js +20 -0
  361. package/dist/sync-agent/utils/promiseQueue.js.map +1 -0
  362. package/dist/sync-agent/utils/providers.d.ts +5 -0
  363. package/dist/sync-agent/utils/providers.d.ts.map +1 -0
  364. package/dist/sync-agent/utils/providers.js +16 -0
  365. package/dist/sync-agent/utils/providers.js.map +1 -0
  366. package/dist/sync-agent/utils/spaceUtils.d.ts +3 -0
  367. package/dist/sync-agent/utils/spaceUtils.d.ts.map +1 -0
  368. package/dist/sync-agent/utils/spaceUtils.js +31 -0
  369. package/dist/sync-agent/utils/spaceUtils.js.map +1 -0
  370. package/dist/syncEvents.d.ts +9 -0
  371. package/dist/syncEvents.d.ts.map +1 -0
  372. package/dist/syncEvents.js +2 -0
  373. package/dist/syncEvents.js.map +1 -0
  374. package/dist/syncedStream.d.ts +24 -0
  375. package/dist/syncedStream.d.ts.map +1 -0
  376. package/dist/syncedStream.js +119 -0
  377. package/dist/syncedStream.js.map +1 -0
  378. package/dist/syncedStreams.d.ts +43 -0
  379. package/dist/syncedStreams.d.ts.map +1 -0
  380. package/dist/syncedStreams.js +115 -0
  381. package/dist/syncedStreams.js.map +1 -0
  382. package/dist/syncedStreamsExtension.d.ts +45 -0
  383. package/dist/syncedStreamsExtension.d.ts.map +1 -0
  384. package/dist/syncedStreamsExtension.js +295 -0
  385. package/dist/syncedStreamsExtension.js.map +1 -0
  386. package/dist/syncedStreamsLoop.d.ts +132 -0
  387. package/dist/syncedStreamsLoop.d.ts.map +1 -0
  388. package/dist/syncedStreamsLoop.js +922 -0
  389. package/dist/syncedStreamsLoop.js.map +1 -0
  390. package/dist/tags.d.ts +12 -0
  391. package/dist/tags.d.ts.map +1 -0
  392. package/dist/tags.js +160 -0
  393. package/dist/tags.js.map +1 -0
  394. package/dist/tests/bob_testUtils.d.ts +4 -0
  395. package/dist/tests/bob_testUtils.d.ts.map +1 -0
  396. package/dist/tests/bob_testUtils.js +161 -0
  397. package/dist/tests/bob_testUtils.js.map +1 -0
  398. package/dist/tests/multi/appRegistryService.test.d.ts +2 -0
  399. package/dist/tests/multi/appRegistryService.test.d.ts.map +1 -0
  400. package/dist/tests/multi/appRegistryService.test.js +41 -0
  401. package/dist/tests/multi/appRegistryService.test.js.map +1 -0
  402. package/dist/tests/multi/botEntitlements.test.d.ts +5 -0
  403. package/dist/tests/multi/botEntitlements.test.d.ts.map +1 -0
  404. package/dist/tests/multi/botEntitlements.test.js +178 -0
  405. package/dist/tests/multi/botEntitlements.test.js.map +1 -0
  406. package/dist/tests/multi/botMembership.test.d.ts +5 -0
  407. package/dist/tests/multi/botMembership.test.d.ts.map +1 -0
  408. package/dist/tests/multi/botMembership.test.js +295 -0
  409. package/dist/tests/multi/botMembership.test.js.map +1 -0
  410. package/dist/tests/multi/botStreamCreation.test.d.ts +5 -0
  411. package/dist/tests/multi/botStreamCreation.test.d.ts.map +1 -0
  412. package/dist/tests/multi/botStreamCreation.test.js +60 -0
  413. package/dist/tests/multi/botStreamCreation.test.js.map +1 -0
  414. package/dist/tests/multi/channelScrubbing.test.d.ts +5 -0
  415. package/dist/tests/multi/channelScrubbing.test.d.ts.map +1 -0
  416. package/dist/tests/multi/channelScrubbing.test.js +102 -0
  417. package/dist/tests/multi/channelScrubbing.test.js.map +1 -0
  418. package/dist/tests/multi/channelSpaceSettings.test.d.ts +5 -0
  419. package/dist/tests/multi/channelSpaceSettings.test.d.ts.map +1 -0
  420. package/dist/tests/multi/channelSpaceSettings.test.js +204 -0
  421. package/dist/tests/multi/channelSpaceSettings.test.js.map +1 -0
  422. package/dist/tests/multi/disableChannel.test.d.ts +5 -0
  423. package/dist/tests/multi/disableChannel.test.d.ts.map +1 -0
  424. package/dist/tests/multi/disableChannel.test.js +30 -0
  425. package/dist/tests/multi/disableChannel.test.js.map +1 -0
  426. package/dist/tests/multi/disableSpace.test.d.ts +5 -0
  427. package/dist/tests/multi/disableSpace.test.d.ts.map +1 -0
  428. package/dist/tests/multi/disableSpace.test.js +37 -0
  429. package/dist/tests/multi/disableSpace.test.js.map +1 -0
  430. package/dist/tests/multi/entitlements/channelEntitlementPermissions.test.d.ts +5 -0
  431. package/dist/tests/multi/entitlements/channelEntitlementPermissions.test.d.ts.map +1 -0
  432. package/dist/tests/multi/entitlements/channelEntitlementPermissions.test.js +129 -0
  433. package/dist/tests/multi/entitlements/channelEntitlementPermissions.test.js.map +1 -0
  434. package/dist/tests/multi/entitlements/channelWithThreeNestedEntitlement.test.d.ts +5 -0
  435. package/dist/tests/multi/entitlements/channelWithThreeNestedEntitlement.test.d.ts.map +1 -0
  436. package/dist/tests/multi/entitlements/channelWithThreeNestedEntitlement.test.js +44 -0
  437. package/dist/tests/multi/entitlements/channelWithThreeNestedEntitlement.test.js.map +1 -0
  438. package/dist/tests/multi/entitlements/channelsWithComplexEntitlements.test.d.ts +5 -0
  439. package/dist/tests/multi/entitlements/channelsWithComplexEntitlements.test.d.ts.map +1 -0
  440. package/dist/tests/multi/entitlements/channelsWithComplexEntitlements.test.js +125 -0
  441. package/dist/tests/multi/entitlements/channelsWithComplexEntitlements.test.js.map +1 -0
  442. package/dist/tests/multi/entitlements/channelsWithEntitlementLoss.test.d.ts +5 -0
  443. package/dist/tests/multi/entitlements/channelsWithEntitlementLoss.test.d.ts.map +1 -0
  444. package/dist/tests/multi/entitlements/channelsWithEntitlementLoss.test.js +72 -0
  445. package/dist/tests/multi/entitlements/channelsWithEntitlementLoss.test.js.map +1 -0
  446. package/dist/tests/multi/entitlements/channelsWithEntitlements.test.d.ts +5 -0
  447. package/dist/tests/multi/entitlements/channelsWithEntitlements.test.d.ts.map +1 -0
  448. package/dist/tests/multi/entitlements/channelsWithEntitlements.test.js +57 -0
  449. package/dist/tests/multi/entitlements/channelsWithEntitlements.test.js.map +1 -0
  450. package/dist/tests/multi/entitlements/channelsWithErc20Entitlements.test.d.ts +5 -0
  451. package/dist/tests/multi/entitlements/channelsWithErc20Entitlements.test.d.ts.map +1 -0
  452. package/dist/tests/multi/entitlements/channelsWithErc20Entitlements.test.js +86 -0
  453. package/dist/tests/multi/entitlements/channelsWithErc20Entitlements.test.js.map +1 -0
  454. package/dist/tests/multi/entitlements/channelsWithErc721Entitlements.test.d.ts +5 -0
  455. package/dist/tests/multi/entitlements/channelsWithErc721Entitlements.test.d.ts.map +1 -0
  456. package/dist/tests/multi/entitlements/channelsWithErc721Entitlements.test.js +69 -0
  457. package/dist/tests/multi/entitlements/channelsWithErc721Entitlements.test.js.map +1 -0
  458. package/dist/tests/multi/entitlements/channelsWithEthBalanceEntitlements.test.d.ts +5 -0
  459. package/dist/tests/multi/entitlements/channelsWithEthBalanceEntitlements.test.d.ts.map +1 -0
  460. package/dist/tests/multi/entitlements/channelsWithEthBalanceEntitlements.test.js +145 -0
  461. package/dist/tests/multi/entitlements/channelsWithEthBalanceEntitlements.test.js.map +1 -0
  462. package/dist/tests/multi/entitlements/channelsWithUserEntitlements.test.d.ts +5 -0
  463. package/dist/tests/multi/entitlements/channelsWithUserEntitlements.test.d.ts.map +1 -0
  464. package/dist/tests/multi/entitlements/channelsWithUserEntitlements.test.js +53 -0
  465. package/dist/tests/multi/entitlements/channelsWithUserEntitlements.test.js.map +1 -0
  466. package/dist/tests/multi/entitlements/membershipRenewals.test.d.ts +5 -0
  467. package/dist/tests/multi/entitlements/membershipRenewals.test.d.ts.map +1 -0
  468. package/dist/tests/multi/entitlements/membershipRenewals.test.js +150 -0
  469. package/dist/tests/multi/entitlements/membershipRenewals.test.js.map +1 -0
  470. package/dist/tests/multi/entitlements/spaceWithComplexEntitlements.test.d.ts +5 -0
  471. package/dist/tests/multi/entitlements/spaceWithComplexEntitlements.test.d.ts.map +1 -0
  472. package/dist/tests/multi/entitlements/spaceWithComplexEntitlements.test.js +131 -0
  473. package/dist/tests/multi/entitlements/spaceWithComplexEntitlements.test.js.map +1 -0
  474. package/dist/tests/multi/entitlements/spaceWithEntitlements.test.d.ts +5 -0
  475. package/dist/tests/multi/entitlements/spaceWithEntitlements.test.d.ts.map +1 -0
  476. package/dist/tests/multi/entitlements/spaceWithEntitlements.test.js +109 -0
  477. package/dist/tests/multi/entitlements/spaceWithEntitlements.test.js.map +1 -0
  478. package/dist/tests/multi/entitlements/spaceWithErc20Entitlements.test.d.ts +5 -0
  479. package/dist/tests/multi/entitlements/spaceWithErc20Entitlements.test.d.ts.map +1 -0
  480. package/dist/tests/multi/entitlements/spaceWithErc20Entitlements.test.js +103 -0
  481. package/dist/tests/multi/entitlements/spaceWithErc20Entitlements.test.js.map +1 -0
  482. package/dist/tests/multi/entitlements/spaceWithErc721Entitlements.test.d.ts +5 -0
  483. package/dist/tests/multi/entitlements/spaceWithErc721Entitlements.test.d.ts.map +1 -0
  484. package/dist/tests/multi/entitlements/spaceWithErc721Entitlements.test.js +84 -0
  485. package/dist/tests/multi/entitlements/spaceWithErc721Entitlements.test.js.map +1 -0
  486. package/dist/tests/multi/entitlements/spaceWithEthBalanceEntitlements.test.d.ts +5 -0
  487. package/dist/tests/multi/entitlements/spaceWithEthBalanceEntitlements.test.d.ts.map +1 -0
  488. package/dist/tests/multi/entitlements/spaceWithEthBalanceEntitlements.test.js +168 -0
  489. package/dist/tests/multi/entitlements/spaceWithEthBalanceEntitlements.test.js.map +1 -0
  490. package/dist/tests/multi/entitlements/spaceWithThreeNestedEntitlement.test.d.ts +5 -0
  491. package/dist/tests/multi/entitlements/spaceWithThreeNestedEntitlement.test.d.ts.map +1 -0
  492. package/dist/tests/multi/entitlements/spaceWithThreeNestedEntitlement.test.js +45 -0
  493. package/dist/tests/multi/entitlements/spaceWithThreeNestedEntitlement.test.js.map +1 -0
  494. package/dist/tests/multi/entitlements/spaceWithUserEntitlements.test.d.ts +5 -0
  495. package/dist/tests/multi/entitlements/spaceWithUserEntitlements.test.d.ts.map +1 -0
  496. package/dist/tests/multi/entitlements/spaceWithUserEntitlements.test.js +79 -0
  497. package/dist/tests/multi/entitlements/spaceWithUserEntitlements.test.js.map +1 -0
  498. package/dist/tests/multi/legacySpace.test.d.ts +5 -0
  499. package/dist/tests/multi/legacySpace.test.d.ts.map +1 -0
  500. package/dist/tests/multi/legacySpace.test.js +48 -0
  501. package/dist/tests/multi/legacySpace.test.js.map +1 -0
  502. package/dist/tests/multi/mediaWithEntitlements.test.d.ts +5 -0
  503. package/dist/tests/multi/mediaWithEntitlements.test.d.ts.map +1 -0
  504. package/dist/tests/multi/mediaWithEntitlements.test.js +152 -0
  505. package/dist/tests/multi/mediaWithEntitlements.test.js.map +1 -0
  506. package/dist/tests/multi/membershipManagement.test.d.ts +5 -0
  507. package/dist/tests/multi/membershipManagement.test.d.ts.map +1 -0
  508. package/dist/tests/multi/membershipManagement.test.js +76 -0
  509. package/dist/tests/multi/membershipManagement.test.js.map +1 -0
  510. package/dist/tests/multi/notificationService.test.d.ts +2 -0
  511. package/dist/tests/multi/notificationService.test.d.ts.map +1 -0
  512. package/dist/tests/multi/notificationService.test.js +51 -0
  513. package/dist/tests/multi/notificationService.test.js.map +1 -0
  514. package/dist/tests/multi/riverAirdropDapp.test.d.ts +5 -0
  515. package/dist/tests/multi/riverAirdropDapp.test.d.ts.map +1 -0
  516. package/dist/tests/multi/riverAirdropDapp.test.js +43 -0
  517. package/dist/tests/multi/riverAirdropDapp.test.js.map +1 -0
  518. package/dist/tests/multi/spaceDapp.test.d.ts +5 -0
  519. package/dist/tests/multi/spaceDapp.test.d.ts.map +1 -0
  520. package/dist/tests/multi/spaceDapp.test.js +61 -0
  521. package/dist/tests/multi/spaceDapp.test.js.map +1 -0
  522. package/dist/tests/multi/spaceWithVariousPriceConfigurations.test.d.ts +2 -0
  523. package/dist/tests/multi/spaceWithVariousPriceConfigurations.test.d.ts.map +1 -0
  524. package/dist/tests/multi/spaceWithVariousPriceConfigurations.test.js +63 -0
  525. package/dist/tests/multi/spaceWithVariousPriceConfigurations.test.js.map +1 -0
  526. package/dist/tests/multi/sync-agent/member-queue.test.d.ts +2 -0
  527. package/dist/tests/multi/sync-agent/member-queue.test.d.ts.map +1 -0
  528. package/dist/tests/multi/sync-agent/member-queue.test.js +54 -0
  529. package/dist/tests/multi/sync-agent/member-queue.test.js.map +1 -0
  530. package/dist/tests/multi/sync-agent/member.test.d.ts +2 -0
  531. package/dist/tests/multi/sync-agent/member.test.d.ts.map +1 -0
  532. package/dist/tests/multi/sync-agent/member.test.js +45 -0
  533. package/dist/tests/multi/sync-agent/member.test.js.map +1 -0
  534. package/dist/tests/multi/sync-agent/members.test.d.ts +2 -0
  535. package/dist/tests/multi/sync-agent/members.test.d.ts.map +1 -0
  536. package/dist/tests/multi/sync-agent/members.test.js +35 -0
  537. package/dist/tests/multi/sync-agent/members.test.js.map +1 -0
  538. package/dist/tests/multi/sync-agent/riverConnection.test.d.ts +5 -0
  539. package/dist/tests/multi/sync-agent/riverConnection.test.d.ts.map +1 -0
  540. package/dist/tests/multi/sync-agent/riverConnection.test.js +39 -0
  541. package/dist/tests/multi/sync-agent/riverConnection.test.js.map +1 -0
  542. package/dist/tests/multi/sync-agent/spaces.test.d.ts +2 -0
  543. package/dist/tests/multi/sync-agent/spaces.test.d.ts.map +1 -0
  544. package/dist/tests/multi/sync-agent/spaces.test.js +33 -0
  545. package/dist/tests/multi/sync-agent/spaces.test.js.map +1 -0
  546. package/dist/tests/multi/sync-agent/streams.test.d.ts +2 -0
  547. package/dist/tests/multi/sync-agent/streams.test.d.ts.map +1 -0
  548. package/dist/tests/multi/sync-agent/streams.test.js +27 -0
  549. package/dist/tests/multi/sync-agent/streams.test.js.map +1 -0
  550. package/dist/tests/multi/sync-agent/syncAgent.test.d.ts +2 -0
  551. package/dist/tests/multi/sync-agent/syncAgent.test.d.ts.map +1 -0
  552. package/dist/tests/multi/sync-agent/syncAgent.test.js +68 -0
  553. package/dist/tests/multi/sync-agent/syncAgent.test.js.map +1 -0
  554. package/dist/tests/multi/sync-agent/syncAgents.test.d.ts +2 -0
  555. package/dist/tests/multi/sync-agent/syncAgents.test.d.ts.map +1 -0
  556. package/dist/tests/multi/sync-agent/syncAgents.test.js +163 -0
  557. package/dist/tests/multi/sync-agent/syncAgents.test.js.map +1 -0
  558. package/dist/tests/multi/sync-agent/timeline.test.d.ts +2 -0
  559. package/dist/tests/multi/sync-agent/timeline.test.d.ts.map +1 -0
  560. package/dist/tests/multi/sync-agent/timeline.test.js +232 -0
  561. package/dist/tests/multi/sync-agent/timeline.test.js.map +1 -0
  562. package/dist/tests/multi/sync-agent/user.test.d.ts +5 -0
  563. package/dist/tests/multi/sync-agent/user.test.d.ts.map +1 -0
  564. package/dist/tests/multi/sync-agent/user.test.js +55 -0
  565. package/dist/tests/multi/sync-agent/user.test.js.map +1 -0
  566. package/dist/tests/multi/transactions.test.d.ts +5 -0
  567. package/dist/tests/multi/transactions.test.d.ts.map +1 -0
  568. package/dist/tests/multi/transactions.test.js +153 -0
  569. package/dist/tests/multi/transactions.test.js.map +1 -0
  570. package/dist/tests/multi/transactions_SpaceReview.test.d.ts +2 -0
  571. package/dist/tests/multi/transactions_SpaceReview.test.d.ts.map +1 -0
  572. package/dist/tests/multi/transactions_SpaceReview.test.js +278 -0
  573. package/dist/tests/multi/transactions_SpaceReview.test.js.map +1 -0
  574. package/dist/tests/multi/transactions_Tip.test.d.ts +5 -0
  575. package/dist/tests/multi/transactions_Tip.test.d.ts.map +1 -0
  576. package/dist/tests/multi/transactions_Tip.test.js +379 -0
  577. package/dist/tests/multi/transactions_Tip.test.js.map +1 -0
  578. package/dist/tests/multi/withEntitlements.test.d.ts +5 -0
  579. package/dist/tests/multi/withEntitlements.test.d.ts.map +1 -0
  580. package/dist/tests/multi/withEntitlements.test.js +125 -0
  581. package/dist/tests/multi/withEntitlements.test.js.map +1 -0
  582. package/dist/tests/multi_ne/aliceAndFriends.test.d.ts +5 -0
  583. package/dist/tests/multi_ne/aliceAndFriends.test.d.ts.map +1 -0
  584. package/dist/tests/multi_ne/aliceAndFriends.test.js +20 -0
  585. package/dist/tests/multi_ne/aliceAndFriends.test.js.map +1 -0
  586. package/dist/tests/multi_ne/aliceAndFriends10for10.test.d.ts +5 -0
  587. package/dist/tests/multi_ne/aliceAndFriends10for10.test.d.ts.map +1 -0
  588. package/dist/tests/multi_ne/aliceAndFriends10for10.test.js +23 -0
  589. package/dist/tests/multi_ne/aliceAndFriends10for10.test.js.map +1 -0
  590. package/dist/tests/multi_ne/aliceAndFriends3for8.test.d.ts +5 -0
  591. package/dist/tests/multi_ne/aliceAndFriends3for8.test.d.ts.map +1 -0
  592. package/dist/tests/multi_ne/aliceAndFriends3for8.test.js +22 -0
  593. package/dist/tests/multi_ne/aliceAndFriends3for8.test.js.map +1 -0
  594. package/dist/tests/multi_ne/aliceAndFriendslongAndRandom.test.d.ts +5 -0
  595. package/dist/tests/multi_ne/aliceAndFriendslongAndRandom.test.d.ts.map +1 -0
  596. package/dist/tests/multi_ne/aliceAndFriendslongAndRandom.test.js +28 -0
  597. package/dist/tests/multi_ne/aliceAndFriendslongAndRandom.test.js.map +1 -0
  598. package/dist/tests/multi_ne/bobFlushes.test.d.ts +5 -0
  599. package/dist/tests/multi_ne/bobFlushes.test.d.ts.map +1 -0
  600. package/dist/tests/multi_ne/bobFlushes.test.js +20 -0
  601. package/dist/tests/multi_ne/bobFlushes.test.js.map +1 -0
  602. package/dist/tests/multi_ne/channels.test.d.ts +5 -0
  603. package/dist/tests/multi_ne/channels.test.d.ts.map +1 -0
  604. package/dist/tests/multi_ne/channels.test.js +45 -0
  605. package/dist/tests/multi_ne/channels.test.js.map +1 -0
  606. package/dist/tests/multi_ne/client.test.d.ts +5 -0
  607. package/dist/tests/multi_ne/client.test.d.ts.map +1 -0
  608. package/dist/tests/multi_ne/client.test.js +821 -0
  609. package/dist/tests/multi_ne/client.test.js.map +1 -0
  610. package/dist/tests/multi_ne/clientCrypto.test.d.ts +5 -0
  611. package/dist/tests/multi_ne/clientCrypto.test.d.ts.map +1 -0
  612. package/dist/tests/multi_ne/clientCrypto.test.js +78 -0
  613. package/dist/tests/multi_ne/clientCrypto.test.js.map +1 -0
  614. package/dist/tests/multi_ne/clientDecryptionExtensions.test.d.ts +5 -0
  615. package/dist/tests/multi_ne/clientDecryptionExtensions.test.d.ts.map +1 -0
  616. package/dist/tests/multi_ne/clientDecryptionExtensions.test.js +176 -0
  617. package/dist/tests/multi_ne/clientDecryptionExtensions.test.js.map +1 -0
  618. package/dist/tests/multi_ne/deviceKeyMessage.test.d.ts +5 -0
  619. package/dist/tests/multi_ne/deviceKeyMessage.test.d.ts.map +1 -0
  620. package/dist/tests/multi_ne/deviceKeyMessage.test.js +156 -0
  621. package/dist/tests/multi_ne/deviceKeyMessage.test.js.map +1 -0
  622. package/dist/tests/multi_ne/dms.test.d.ts +5 -0
  623. package/dist/tests/multi_ne/dms.test.d.ts.map +1 -0
  624. package/dist/tests/multi_ne/dms.test.js +131 -0
  625. package/dist/tests/multi_ne/dms.test.js.map +1 -0
  626. package/dist/tests/multi_ne/ephemeralEvents.test.d.ts +5 -0
  627. package/dist/tests/multi_ne/ephemeralEvents.test.d.ts.map +1 -0
  628. package/dist/tests/multi_ne/ephemeralEvents.test.js +125 -0
  629. package/dist/tests/multi_ne/ephemeralEvents.test.js.map +1 -0
  630. package/dist/tests/multi_ne/gdms.test.d.ts +5 -0
  631. package/dist/tests/multi_ne/gdms.test.d.ts.map +1 -0
  632. package/dist/tests/multi_ne/gdms.test.js +302 -0
  633. package/dist/tests/multi_ne/gdms.test.js.map +1 -0
  634. package/dist/tests/multi_ne/id.test.d.ts +5 -0
  635. package/dist/tests/multi_ne/id.test.d.ts.map +1 -0
  636. package/dist/tests/multi_ne/id.test.js +70 -0
  637. package/dist/tests/multi_ne/id.test.js.map +1 -0
  638. package/dist/tests/multi_ne/makeStreamRpcClient.test.d.ts +5 -0
  639. package/dist/tests/multi_ne/makeStreamRpcClient.test.d.ts.map +1 -0
  640. package/dist/tests/multi_ne/makeStreamRpcClient.test.js +80 -0
  641. package/dist/tests/multi_ne/makeStreamRpcClient.test.js.map +1 -0
  642. package/dist/tests/multi_ne/media.test.d.ts +5 -0
  643. package/dist/tests/multi_ne/media.test.d.ts.map +1 -0
  644. package/dist/tests/multi_ne/media.test.js +220 -0
  645. package/dist/tests/multi_ne/media.test.js.map +1 -0
  646. package/dist/tests/multi_ne/memberMetadata.test.d.ts +5 -0
  647. package/dist/tests/multi_ne/memberMetadata.test.d.ts.map +1 -0
  648. package/dist/tests/multi_ne/memberMetadata.test.js +622 -0
  649. package/dist/tests/multi_ne/memberMetadata.test.js.map +1 -0
  650. package/dist/tests/multi_ne/memberMetadata_DisplayNames.test.d.ts +5 -0
  651. package/dist/tests/multi_ne/memberMetadata_DisplayNames.test.d.ts.map +1 -0
  652. package/dist/tests/multi_ne/memberMetadata_DisplayNames.test.js +54 -0
  653. package/dist/tests/multi_ne/memberMetadata_DisplayNames.test.js.map +1 -0
  654. package/dist/tests/multi_ne/memberMetadata_EnsAddresses.test.d.ts +5 -0
  655. package/dist/tests/multi_ne/memberMetadata_EnsAddresses.test.d.ts.map +1 -0
  656. package/dist/tests/multi_ne/memberMetadata_EnsAddresses.test.js +37 -0
  657. package/dist/tests/multi_ne/memberMetadata_EnsAddresses.test.js.map +1 -0
  658. package/dist/tests/multi_ne/memberMetadata_Nft.test.d.ts +5 -0
  659. package/dist/tests/multi_ne/memberMetadata_Nft.test.d.ts.map +1 -0
  660. package/dist/tests/multi_ne/memberMetadata_Nft.test.js +49 -0
  661. package/dist/tests/multi_ne/memberMetadata_Nft.test.js.map +1 -0
  662. package/dist/tests/multi_ne/memberMetadata_Usernames.test.d.ts +5 -0
  663. package/dist/tests/multi_ne/memberMetadata_Usernames.test.d.ts.map +1 -0
  664. package/dist/tests/multi_ne/memberMetadata_Usernames.test.js +126 -0
  665. package/dist/tests/multi_ne/memberMetadata_Usernames.test.js.map +1 -0
  666. package/dist/tests/multi_ne/nodeSelection.test.d.ts +5 -0
  667. package/dist/tests/multi_ne/nodeSelection.test.d.ts.map +1 -0
  668. package/dist/tests/multi_ne/nodeSelection.test.js +41 -0
  669. package/dist/tests/multi_ne/nodeSelection.test.js.map +1 -0
  670. package/dist/tests/multi_ne/outboundGroupSession.test.d.ts +5 -0
  671. package/dist/tests/multi_ne/outboundGroupSession.test.d.ts.map +1 -0
  672. package/dist/tests/multi_ne/outboundGroupSession.test.js +107 -0
  673. package/dist/tests/multi_ne/outboundGroupSession.test.js.map +1 -0
  674. package/dist/tests/multi_ne/persistenceStore.test.d.ts +5 -0
  675. package/dist/tests/multi_ne/persistenceStore.test.d.ts.map +1 -0
  676. package/dist/tests/multi_ne/persistenceStore.test.js +27 -0
  677. package/dist/tests/multi_ne/persistenceStore.test.js.map +1 -0
  678. package/dist/tests/multi_ne/restart.test.d.ts +4 -0
  679. package/dist/tests/multi_ne/restart.test.d.ts.map +1 -0
  680. package/dist/tests/multi_ne/restart.test.js +160 -0
  681. package/dist/tests/multi_ne/restart.test.js.map +1 -0
  682. package/dist/tests/multi_ne/sign.test.d.ts +5 -0
  683. package/dist/tests/multi_ne/sign.test.d.ts.map +1 -0
  684. package/dist/tests/multi_ne/sign.test.js +218 -0
  685. package/dist/tests/multi_ne/sign.test.js.map +1 -0
  686. package/dist/tests/multi_ne/space.test.d.ts +5 -0
  687. package/dist/tests/multi_ne/space.test.d.ts.map +1 -0
  688. package/dist/tests/multi_ne/space.test.js +284 -0
  689. package/dist/tests/multi_ne/space.test.js.map +1 -0
  690. package/dist/tests/multi_ne/streamMembershipHardening.test.d.ts +5 -0
  691. package/dist/tests/multi_ne/streamMembershipHardening.test.d.ts.map +1 -0
  692. package/dist/tests/multi_ne/streamMembershipHardening.test.js +30 -0
  693. package/dist/tests/multi_ne/streamMembershipHardening.test.js.map +1 -0
  694. package/dist/tests/multi_ne/streamRpcClient.test.d.ts +5 -0
  695. package/dist/tests/multi_ne/streamRpcClient.test.d.ts.map +1 -0
  696. package/dist/tests/multi_ne/streamRpcClient.test.js +554 -0
  697. package/dist/tests/multi_ne/streamRpcClient.test.js.map +1 -0
  698. package/dist/tests/multi_ne/streamRpcClientGetSince.test.d.ts +2 -0
  699. package/dist/tests/multi_ne/streamRpcClientGetSince.test.d.ts.map +1 -0
  700. package/dist/tests/multi_ne/streamRpcClientGetSince.test.js +120 -0
  701. package/dist/tests/multi_ne/streamRpcClientGetSince.test.js.map +1 -0
  702. package/dist/tests/multi_ne/streamRpcClientSync.test.d.ts +5 -0
  703. package/dist/tests/multi_ne/streamRpcClientSync.test.d.ts.map +1 -0
  704. package/dist/tests/multi_ne/streamRpcClientSync.test.js +201 -0
  705. package/dist/tests/multi_ne/streamRpcClientSync.test.js.map +1 -0
  706. package/dist/tests/multi_ne/streamRpcClientSyncSnapshots.test.d.ts +2 -0
  707. package/dist/tests/multi_ne/streamRpcClientSyncSnapshots.test.d.ts.map +1 -0
  708. package/dist/tests/multi_ne/streamRpcClientSyncSnapshots.test.js +96 -0
  709. package/dist/tests/multi_ne/streamRpcClientSyncSnapshots.test.js.map +1 -0
  710. package/dist/tests/multi_ne/streamStateView_User.test.d.ts +5 -0
  711. package/dist/tests/multi_ne/streamStateView_User.test.d.ts.map +1 -0
  712. package/dist/tests/multi_ne/streamStateView_User.test.js +31 -0
  713. package/dist/tests/multi_ne/streamStateView_User.test.js.map +1 -0
  714. package/dist/tests/multi_ne/syncWithBlocks.test.d.ts +2 -0
  715. package/dist/tests/multi_ne/syncWithBlocks.test.d.ts.map +1 -0
  716. package/dist/tests/multi_ne/syncWithBlocks.test.js +157 -0
  717. package/dist/tests/multi_ne/syncWithBlocks.test.js.map +1 -0
  718. package/dist/tests/multi_ne/syncedStream.test.d.ts +5 -0
  719. package/dist/tests/multi_ne/syncedStream.test.d.ts.map +1 -0
  720. package/dist/tests/multi_ne/syncedStream.test.js +98 -0
  721. package/dist/tests/multi_ne/syncedStream.test.js.map +1 -0
  722. package/dist/tests/multi_ne/syncedStreams.test.d.ts +5 -0
  723. package/dist/tests/multi_ne/syncedStreams.test.d.ts.map +1 -0
  724. package/dist/tests/multi_ne/syncedStreams.test.js +158 -0
  725. package/dist/tests/multi_ne/syncedStreams.test.js.map +1 -0
  726. package/dist/tests/multi_ne/trading.solana.test.d.ts +2 -0
  727. package/dist/tests/multi_ne/trading.solana.test.d.ts.map +1 -0
  728. package/dist/tests/multi_ne/trading.solana.test.js +229 -0
  729. package/dist/tests/multi_ne/trading.solana.test.js.map +1 -0
  730. package/dist/tests/multi_ne/trading.test.d.ts +2 -0
  731. package/dist/tests/multi_ne/trading.test.d.ts.map +1 -0
  732. package/dist/tests/multi_ne/trading.test.js +243 -0
  733. package/dist/tests/multi_ne/trading.test.js.map +1 -0
  734. package/dist/tests/multi_ne/userInboxMessage.test.d.ts +5 -0
  735. package/dist/tests/multi_ne/userInboxMessage.test.d.ts.map +1 -0
  736. package/dist/tests/multi_ne/userInboxMessage.test.js +201 -0
  737. package/dist/tests/multi_ne/userInboxMessage.test.js.map +1 -0
  738. package/dist/tests/multi_ne/userSettings.test.d.ts +5 -0
  739. package/dist/tests/multi_ne/userSettings.test.d.ts.map +1 -0
  740. package/dist/tests/multi_ne/userSettings.test.js +116 -0
  741. package/dist/tests/multi_ne/userSettings.test.js.map +1 -0
  742. package/dist/tests/multi_ne/workflows.test.d.ts +5 -0
  743. package/dist/tests/multi_ne/workflows.test.d.ts.map +1 -0
  744. package/dist/tests/multi_ne/workflows.test.js +87 -0
  745. package/dist/tests/multi_ne/workflows.test.js.map +1 -0
  746. package/dist/tests/multi_v2/entitlements/channelsWithCrossChainEntitlements.test.d.ts +6 -0
  747. package/dist/tests/multi_v2/entitlements/channelsWithCrossChainEntitlements.test.d.ts.map +1 -0
  748. package/dist/tests/multi_v2/entitlements/channelsWithCrossChainEntitlements.test.js +78 -0
  749. package/dist/tests/multi_v2/entitlements/channelsWithCrossChainEntitlements.test.js.map +1 -0
  750. package/dist/tests/multi_v2/entitlements/channelsWithErc1155Entitlement.test.d.ts +6 -0
  751. package/dist/tests/multi_v2/entitlements/channelsWithErc1155Entitlement.test.d.ts.map +1 -0
  752. package/dist/tests/multi_v2/entitlements/channelsWithErc1155Entitlement.test.js +89 -0
  753. package/dist/tests/multi_v2/entitlements/channelsWithErc1155Entitlement.test.js.map +1 -0
  754. package/dist/tests/multi_v2/entitlements/spaceWithCrossChainEntitlements.test.d.ts +6 -0
  755. package/dist/tests/multi_v2/entitlements/spaceWithCrossChainEntitlements.test.d.ts.map +1 -0
  756. package/dist/tests/multi_v2/entitlements/spaceWithCrossChainEntitlements.test.js +88 -0
  757. package/dist/tests/multi_v2/entitlements/spaceWithCrossChainEntitlements.test.js.map +1 -0
  758. package/dist/tests/multi_v2/entitlements/spaceWithErc1155Entitlements.test.d.ts +6 -0
  759. package/dist/tests/multi_v2/entitlements/spaceWithErc1155Entitlements.test.d.ts.map +1 -0
  760. package/dist/tests/multi_v2/entitlements/spaceWithErc1155Entitlements.test.js +105 -0
  761. package/dist/tests/multi_v2/entitlements/spaceWithErc1155Entitlements.test.js.map +1 -0
  762. package/dist/tests/multi_v2/updateRole.test.d.ts +5 -0
  763. package/dist/tests/multi_v2/updateRole.test.d.ts.map +1 -0
  764. package/dist/tests/multi_v2/updateRole.test.js +25 -0
  765. package/dist/tests/multi_v2/updateRole.test.js.map +1 -0
  766. package/dist/tests/syncAgent_testUtils.d.ts +9 -0
  767. package/dist/tests/syncAgent_testUtils.d.ts.map +1 -0
  768. package/dist/tests/syncAgent_testUtils.js +39 -0
  769. package/dist/tests/syncAgent_testUtils.js.map +1 -0
  770. package/dist/tests/testDriver_testUtils.d.ts +2 -0
  771. package/dist/tests/testDriver_testUtils.d.ts.map +1 -0
  772. package/dist/tests/testDriver_testUtils.js +154 -0
  773. package/dist/tests/testDriver_testUtils.js.map +1 -0
  774. package/dist/tests/testUtils.d.ts +197 -0
  775. package/dist/tests/testUtils.d.ts.map +1 -0
  776. package/dist/tests/testUtils.js +1086 -0
  777. package/dist/tests/testUtils.js.map +1 -0
  778. package/dist/tests/unit/crypto.test.d.ts +5 -0
  779. package/dist/tests/unit/crypto.test.d.ts.map +1 -0
  780. package/dist/tests/unit/crypto.test.js +116 -0
  781. package/dist/tests/unit/crypto.test.js.map +1 -0
  782. package/dist/tests/unit/crypto_utils.test.d.ts +5 -0
  783. package/dist/tests/unit/crypto_utils.test.d.ts.map +1 -0
  784. package/dist/tests/unit/crypto_utils.test.js +36 -0
  785. package/dist/tests/unit/crypto_utils.test.js.map +1 -0
  786. package/dist/tests/unit/decorators.test.d.ts +2 -0
  787. package/dist/tests/unit/decorators.test.d.ts.map +1 -0
  788. package/dist/tests/unit/decorators.test.js +76 -0
  789. package/dist/tests/unit/decorators.test.js.map +1 -0
  790. package/dist/tests/unit/decryptionExtensions.test.d.ts +2 -0
  791. package/dist/tests/unit/decryptionExtensions.test.d.ts.map +1 -0
  792. package/dist/tests/unit/decryptionExtensions.test.js +341 -0
  793. package/dist/tests/unit/decryptionExtensions.test.js.map +1 -0
  794. package/dist/tests/unit/helpers/ConversationBuilder.d.ts +39 -0
  795. package/dist/tests/unit/helpers/ConversationBuilder.d.ts.map +1 -0
  796. package/dist/tests/unit/helpers/ConversationBuilder.js +171 -0
  797. package/dist/tests/unit/helpers/ConversationBuilder.js.map +1 -0
  798. package/dist/tests/unit/observable/combine.test.d.ts +2 -0
  799. package/dist/tests/unit/observable/combine.test.d.ts.map +1 -0
  800. package/dist/tests/unit/observable/combine.test.js +282 -0
  801. package/dist/tests/unit/observable/combine.test.js.map +1 -0
  802. package/dist/tests/unit/observable/observable.test.d.ts +2 -0
  803. package/dist/tests/unit/observable/observable.test.d.ts.map +1 -0
  804. package/dist/tests/unit/observable/observable.test.js +321 -0
  805. package/dist/tests/unit/observable/observable.test.js.map +1 -0
  806. package/dist/tests/unit/snapshotMigration0000.test.d.ts +2 -0
  807. package/dist/tests/unit/snapshotMigration0000.test.d.ts.map +1 -0
  808. package/dist/tests/unit/snapshotMigration0000.test.js +12 -0
  809. package/dist/tests/unit/snapshotMigration0000.test.js.map +1 -0
  810. package/dist/tests/unit/snapshotMigration0001.test.d.ts +2 -0
  811. package/dist/tests/unit/snapshotMigration0001.test.d.ts.map +1 -0
  812. package/dist/tests/unit/snapshotMigration0001.test.js +63 -0
  813. package/dist/tests/unit/snapshotMigration0001.test.js.map +1 -0
  814. package/dist/tests/unit/snapshotMigration0002.test.d.ts +2 -0
  815. package/dist/tests/unit/snapshotMigration0002.test.d.ts.map +1 -0
  816. package/dist/tests/unit/snapshotMigration0002.test.js +31 -0
  817. package/dist/tests/unit/snapshotMigration0002.test.js.map +1 -0
  818. package/dist/tests/unit/snapshotMigration0003.test.d.ts +2 -0
  819. package/dist/tests/unit/snapshotMigration0003.test.d.ts.map +1 -0
  820. package/dist/tests/unit/snapshotMigration0003.test.js +28 -0
  821. package/dist/tests/unit/snapshotMigration0003.test.js.map +1 -0
  822. package/dist/tests/unit/snapshotMigration0004.test.d.ts +2 -0
  823. package/dist/tests/unit/snapshotMigration0004.test.d.ts.map +1 -0
  824. package/dist/tests/unit/snapshotMigration0004.test.js +112 -0
  825. package/dist/tests/unit/snapshotMigration0004.test.js.map +1 -0
  826. package/dist/tests/unit/snapshotMigration0005.test.d.ts +2 -0
  827. package/dist/tests/unit/snapshotMigration0005.test.d.ts.map +1 -0
  828. package/dist/tests/unit/snapshotMigration0005.test.js +124 -0
  829. package/dist/tests/unit/snapshotMigration0005.test.js.map +1 -0
  830. package/dist/tests/unit/store.test.d.ts +2 -0
  831. package/dist/tests/unit/store.test.d.ts.map +1 -0
  832. package/dist/tests/unit/store.test.js +47 -0
  833. package/dist/tests/unit/store.test.js.map +1 -0
  834. package/dist/tests/unit/streamUtils.test.d.ts +2 -0
  835. package/dist/tests/unit/streamUtils.test.d.ts.map +1 -0
  836. package/dist/tests/unit/streamUtils.test.js +383 -0
  837. package/dist/tests/unit/streamUtils.test.js.map +1 -0
  838. package/dist/tests/unit/tags.test.d.ts +2 -0
  839. package/dist/tests/unit/tags.test.d.ts.map +1 -0
  840. package/dist/tests/unit/tags.test.js +154 -0
  841. package/dist/tests/unit/tags.test.js.map +1 -0
  842. package/dist/tests/unit/testUtils.test.d.ts +5 -0
  843. package/dist/tests/unit/testUtils.test.d.ts.map +1 -0
  844. package/dist/tests/unit/testUtils.test.js +86 -0
  845. package/dist/tests/unit/testUtils.test.js.map +1 -0
  846. package/dist/tests/unit/timelineStoreInterface.test.d.ts +5 -0
  847. package/dist/tests/unit/timelineStoreInterface.test.d.ts.map +1 -0
  848. package/dist/tests/unit/timelineStoreInterface.test.js +343 -0
  849. package/dist/tests/unit/timelineStoreInterface.test.js.map +1 -0
  850. package/dist/townsEnv.d.ts +47 -0
  851. package/dist/townsEnv.d.ts.map +1 -0
  852. package/dist/townsEnv.js +248 -0
  853. package/dist/townsEnv.js.map +1 -0
  854. package/dist/types.d.ts +200 -0
  855. package/dist/types.d.ts.map +1 -0
  856. package/dist/types.js +765 -0
  857. package/dist/types.js.map +1 -0
  858. package/dist/unauthenticatedClient.d.ts +25 -0
  859. package/dist/unauthenticatedClient.d.ts.map +1 -0
  860. package/dist/unauthenticatedClient.js +133 -0
  861. package/dist/unauthenticatedClient.js.map +1 -0
  862. package/dist/utils.d.ts +33 -0
  863. package/dist/utils.d.ts.map +1 -0
  864. package/dist/utils.js +119 -0
  865. package/dist/utils.js.map +1 -0
  866. package/dist/views/models/timelineEvent.d.ts +11 -0
  867. package/dist/views/models/timelineEvent.d.ts.map +1 -0
  868. package/dist/views/models/timelineEvent.js +1063 -0
  869. package/dist/views/models/timelineEvent.js.map +1 -0
  870. package/dist/views/models/timelineTypes.d.ts +412 -0
  871. package/dist/views/models/timelineTypes.d.ts.map +1 -0
  872. package/dist/views/models/timelineTypes.js +224 -0
  873. package/dist/views/models/timelineTypes.js.map +1 -0
  874. package/dist/views/streams/channelStreams.d.ts +8 -0
  875. package/dist/views/streams/channelStreams.d.ts.map +1 -0
  876. package/dist/views/streams/channelStreams.js +9 -0
  877. package/dist/views/streams/channelStreams.js.map +1 -0
  878. package/dist/views/streams/dmStreams.d.ts +13 -0
  879. package/dist/views/streams/dmStreams.d.ts.map +1 -0
  880. package/dist/views/streams/dmStreams.js +33 -0
  881. package/dist/views/streams/dmStreams.js.map +1 -0
  882. package/dist/views/streams/gdmStreams.d.ts +16 -0
  883. package/dist/views/streams/gdmStreams.d.ts.map +1 -0
  884. package/dist/views/streams/gdmStreams.js +40 -0
  885. package/dist/views/streams/gdmStreams.js.map +1 -0
  886. package/dist/views/streams/notificationSettings.d.ts +14 -0
  887. package/dist/views/streams/notificationSettings.d.ts.map +1 -0
  888. package/dist/views/streams/notificationSettings.js +32 -0
  889. package/dist/views/streams/notificationSettings.js.map +1 -0
  890. package/dist/views/streams/spaceStreams.d.ts +17 -0
  891. package/dist/views/streams/spaceStreams.d.ts.map +1 -0
  892. package/dist/views/streams/spaceStreams.js +52 -0
  893. package/dist/views/streams/spaceStreams.js.map +1 -0
  894. package/dist/views/streams/streamMemberIds.d.ts +8 -0
  895. package/dist/views/streams/streamMemberIds.d.ts.map +1 -0
  896. package/dist/views/streams/streamMemberIds.js +34 -0
  897. package/dist/views/streams/streamMemberIds.js.map +1 -0
  898. package/dist/views/streams/streamStatus.d.ts +12 -0
  899. package/dist/views/streams/streamStatus.d.ts.map +1 -0
  900. package/dist/views/streams/streamStatus.js +25 -0
  901. package/dist/views/streams/streamStatus.js.map +1 -0
  902. package/dist/views/streams/timelines.d.ts +25 -0
  903. package/dist/views/streams/timelines.d.ts.map +1 -0
  904. package/dist/views/streams/timelines.js +108 -0
  905. package/dist/views/streams/timelines.js.map +1 -0
  906. package/dist/views/streams/timelinesModel.d.ts +32 -0
  907. package/dist/views/streams/timelinesModel.d.ts.map +1 -0
  908. package/dist/views/streams/timelinesModel.js +656 -0
  909. package/dist/views/streams/timelinesModel.js.map +1 -0
  910. package/dist/views/streams/userInboxStreams.d.ts +10 -0
  911. package/dist/views/streams/userInboxStreams.d.ts.map +1 -0
  912. package/dist/views/streams/userInboxStreams.js +24 -0
  913. package/dist/views/streams/userInboxStreams.js.map +1 -0
  914. package/dist/views/streams/userMetadataStreams.d.ts +10 -0
  915. package/dist/views/streams/userMetadataStreams.d.ts.map +1 -0
  916. package/dist/views/streams/userMetadataStreams.js +25 -0
  917. package/dist/views/streams/userMetadataStreams.js.map +1 -0
  918. package/dist/views/streams/userSettingsStreams.d.ts +16 -0
  919. package/dist/views/streams/userSettingsStreams.d.ts.map +1 -0
  920. package/dist/views/streams/userSettingsStreams.js +74 -0
  921. package/dist/views/streams/userSettingsStreams.js.map +1 -0
  922. package/dist/views/streams/userStreamsView.d.ts +28 -0
  923. package/dist/views/streams/userStreamsView.d.ts.map +1 -0
  924. package/dist/views/streams/userStreamsView.js +119 -0
  925. package/dist/views/streams/userStreamsView.js.map +1 -0
  926. package/dist/views/streamsView.d.ts +58 -0
  927. package/dist/views/streamsView.d.ts.map +1 -0
  928. package/dist/views/streamsView.js +172 -0
  929. package/dist/views/streamsView.js.map +1 -0
  930. package/dist/views/transforms/blockedUserIdsTransform.d.ts +5 -0
  931. package/dist/views/transforms/blockedUserIdsTransform.d.ts.map +1 -0
  932. package/dist/views/transforms/blockedUserIdsTransform.js +12 -0
  933. package/dist/views/transforms/blockedUserIdsTransform.js.map +1 -0
  934. package/dist/views/transforms/dmsAndGdmsTransform.d.ts +23 -0
  935. package/dist/views/transforms/dmsAndGdmsTransform.d.ts.map +1 -0
  936. package/dist/views/transforms/dmsAndGdmsTransform.js +73 -0
  937. package/dist/views/transforms/dmsAndGdmsTransform.js.map +1 -0
  938. package/dist/views/transforms/dmsAndGdmsUnreadIdsTransform.d.ts +13 -0
  939. package/dist/views/transforms/dmsAndGdmsUnreadIdsTransform.d.ts.map +1 -0
  940. package/dist/views/transforms/dmsAndGdmsUnreadIdsTransform.js +22 -0
  941. package/dist/views/transforms/dmsAndGdmsUnreadIdsTransform.js.map +1 -0
  942. package/dist/views/transforms/logObservable.d.ts +2 -0
  943. package/dist/views/transforms/logObservable.d.ts.map +1 -0
  944. package/dist/views/transforms/logObservable.js +10 -0
  945. package/dist/views/transforms/logObservable.js.map +1 -0
  946. package/dist/views/transforms/membersNotInDmsTransform.d.ts +17 -0
  947. package/dist/views/transforms/membersNotInDmsTransform.d.ts.map +1 -0
  948. package/dist/views/transforms/membersNotInDmsTransform.js +39 -0
  949. package/dist/views/transforms/membersNotInDmsTransform.js.map +1 -0
  950. package/dist/views/transforms/membershipsTransform.d.ts +4 -0
  951. package/dist/views/transforms/membershipsTransform.d.ts.map +1 -0
  952. package/dist/views/transforms/membershipsTransform.js +16 -0
  953. package/dist/views/transforms/membershipsTransform.js.map +1 -0
  954. package/dist/views/transforms/mutedStreamIdsTransform.d.ts +5 -0
  955. package/dist/views/transforms/mutedStreamIdsTransform.d.ts.map +1 -0
  956. package/dist/views/transforms/mutedStreamIdsTransform.js +11 -0
  957. package/dist/views/transforms/mutedStreamIdsTransform.js.map +1 -0
  958. package/dist/views/transforms/spaceIdsTransform.d.ts +3 -0
  959. package/dist/views/transforms/spaceIdsTransform.d.ts.map +1 -0
  960. package/dist/views/transforms/spaceIdsTransform.js +14 -0
  961. package/dist/views/transforms/spaceIdsTransform.js.map +1 -0
  962. package/dist/views/transforms/spaceMentionsTransform.d.ts +17 -0
  963. package/dist/views/transforms/spaceMentionsTransform.d.ts.map +1 -0
  964. package/dist/views/transforms/spaceMentionsTransform.js +79 -0
  965. package/dist/views/transforms/spaceMentionsTransform.js.map +1 -0
  966. package/dist/views/transforms/spaceUnreadsTransform.d.ts +15 -0
  967. package/dist/views/transforms/spaceUnreadsTransform.d.ts.map +1 -0
  968. package/dist/views/transforms/spaceUnreadsTransform.js +83 -0
  969. package/dist/views/transforms/spaceUnreadsTransform.js.map +1 -0
  970. package/dist/views/transforms/streamMemberIdsSansUserTransform.d.ts +7 -0
  971. package/dist/views/transforms/streamMemberIdsSansUserTransform.d.ts.map +1 -0
  972. package/dist/views/transforms/streamMemberIdsSansUserTransform.js +23 -0
  973. package/dist/views/transforms/streamMemberIdsSansUserTransform.js.map +1 -0
  974. package/dist/views/transforms/unreadMarkersTransform.d.ts +13 -0
  975. package/dist/views/transforms/unreadMarkersTransform.d.ts.map +1 -0
  976. package/dist/views/transforms/unreadMarkersTransform.js +246 -0
  977. package/dist/views/transforms/unreadMarkersTransform.js.map +1 -0
  978. package/package.json +69 -0
@@ -0,0 +1,1086 @@
1
+ /* eslint-disable @typescript-eslint/no-redundant-type-constituents */
2
+ /* eslint-disable @typescript-eslint/no-unsafe-call */
3
+ /* eslint-disable @typescript-eslint/no-unsafe-argument */
4
+ import { _impl_makeEvent_impl_, unpackStreamEnvelopes } from '../sign';
5
+ import { MembershipOp, SyncOp, EncryptedDataVersion, } from '@towns-labs/proto';
6
+ import { Client } from '../client';
7
+ import { townsEnv } from '../townsEnv';
8
+ import { genId, makeSpaceStreamId, makeDefaultChannelStreamId, makeUniqueChannelStreamId, makeUserStreamId, userIdFromAddress, } from '../id';
9
+ import { secp256k1 } from '@noble/curves/secp256k1';
10
+ import { bin_fromHexString, check, dlog, publicKeyToAddress } from '@towns-labs/utils';
11
+ import { ethers } from 'ethers';
12
+ import { RiverDbManager } from '../riverDbManager';
13
+ import { makeStreamRpcClient } from '../makeStreamRpcClient';
14
+ import { forEachRight } from 'lodash-es';
15
+ import { makeSignerContext } from '../signerContext';
16
+ import { LocalhostWeb3Provider, createExternalNFTStruct, createSpaceDapp, Permission, isLegacyMembershipType, ETH_ADDRESS, NoopRuleData, CheckOperationType, LogicalOperationType, OperationType, treeToRuleData, TestERC20, TestERC1155, TestCrossChainEntitlement, isCreateLegacySpaceParams, convertRuleDataV1ToV2, encodeRuleDataV2, decodeRuleDataV2, isRuleDataV1, encodeThresholdParams, encodeERC1155Params, convertRuleDataV2ToV1, getFixedPricingModule, getDynamicPricingModule, } from '@towns-labs/web3';
17
+ import { RiverTimelineEvent } from '../views/models/timelineTypes';
18
+ import { SyncState } from '../syncedStreamsLoop';
19
+ import { isDefined } from '../check';
20
+ const log = dlog('csb:test:util');
21
+ function useLegacySpaces() {
22
+ return process.env.USE_LEGACY_SPACES === 'true';
23
+ }
24
+ const initTestUrls = async () => {
25
+ const config = townsEnv().makeRiverChainConfig();
26
+ const urls = townsEnv().getNodeUrl();
27
+ log('initTestUrls, RIVER_TEST_CONNECT=', config, 'testUrls=', urls);
28
+ return { testUrls: urls.split(','), refreshNodeUrl: undefined };
29
+ };
30
+ let curTestUrl = -1;
31
+ const getNextTestUrl = async () => {
32
+ const { testUrls, refreshNodeUrl } = await initTestUrls();
33
+ if (testUrls.length === 1) {
34
+ log('getNextTestUrl, url=', testUrls[0]);
35
+ return { urls: testUrls[0], refreshNodeUrl };
36
+ }
37
+ else if (testUrls.length > 1) {
38
+ if (curTestUrl < 0) {
39
+ const seed = expect.getState()?.currentTestName;
40
+ if (seed === undefined) {
41
+ curTestUrl = Math.floor(Math.random() * testUrls.length);
42
+ log('getNextTestUrl, setting to random, index=', curTestUrl);
43
+ }
44
+ else {
45
+ curTestUrl =
46
+ seed
47
+ .split('')
48
+ .map((v) => v.charCodeAt(0))
49
+ .reduce((a, v) => ((a + ((a << 7) + (a << 3))) ^ v) & 0xffff) %
50
+ testUrls.length;
51
+ log('getNextTestUrl, setting based on test name=', seed, ' index=', curTestUrl);
52
+ }
53
+ }
54
+ curTestUrl = (curTestUrl + 1) % testUrls.length;
55
+ log('getNextTestUrl, url=', testUrls[curTestUrl], 'index=', curTestUrl);
56
+ return { urls: testUrls[curTestUrl], refreshNodeUrl };
57
+ }
58
+ else {
59
+ throw new Error('no test urls');
60
+ }
61
+ };
62
+ export const makeTestRpcClient = async (opts) => {
63
+ const { urls: url, refreshNodeUrl } = await getNextTestUrl();
64
+ return makeStreamRpcClient(url, refreshNodeUrl, opts);
65
+ };
66
+ export const makeEvent_test = async (context, payload, prevMiniblockHash) => {
67
+ return _impl_makeEvent_impl_(context, payload, prevMiniblockHash);
68
+ };
69
+ export const TEST_ENCRYPTED_MESSAGE_PROPS = {
70
+ sessionId: '',
71
+ sessionIdBytes: new Uint8Array(0),
72
+ ciphertext: '',
73
+ algorithm: '',
74
+ senderKey: '',
75
+ ciphertextBytes: new Uint8Array(0),
76
+ ivBytes: new Uint8Array(0),
77
+ version: EncryptedDataVersion.ENCRYPTED_DATA_VERSION_1,
78
+ };
79
+ export const getXchainConfigForTesting = () => {
80
+ // TODO: generate this for test environment and read from it
81
+ return {
82
+ supportedRpcUrls: {
83
+ 31337: 'http://127.0.0.1:8545',
84
+ 31338: 'http://127.0.0.1:8546',
85
+ },
86
+ etherNativeNetworkIds: [31337, 31338],
87
+ ethereumNetworkIds: [],
88
+ };
89
+ };
90
+ export async function erc1155CheckOp(contractName, tokenId, threshold) {
91
+ const contractAddress = await TestERC1155.getContractAddress(contractName);
92
+ return {
93
+ opType: OperationType.CHECK,
94
+ checkType: CheckOperationType.ERC1155,
95
+ chainId: 31337n,
96
+ contractAddress,
97
+ params: encodeERC1155Params({ threshold, tokenId }),
98
+ };
99
+ }
100
+ export async function erc20CheckOp(contractName, threshold) {
101
+ const contractAddress = await TestERC20.getContractAddress(contractName);
102
+ return {
103
+ opType: OperationType.CHECK,
104
+ checkType: CheckOperationType.ERC20,
105
+ chainId: 31337n,
106
+ contractAddress,
107
+ params: encodeThresholdParams({ threshold }),
108
+ };
109
+ }
110
+ export async function mockCrossChainCheckOp(contractName, id) {
111
+ const contractAddress = await TestCrossChainEntitlement.getContractAddress(contractName);
112
+ return {
113
+ opType: OperationType.CHECK,
114
+ checkType: CheckOperationType.ISENTITLED,
115
+ chainId: 31337n,
116
+ contractAddress,
117
+ params: TestCrossChainEntitlement.encodeIdParameter(id),
118
+ };
119
+ }
120
+ export const twoEth = BigInt(2e18);
121
+ export const oneEth = BigInt(1e18);
122
+ export const threeEth = BigInt(3e18);
123
+ export const oneHalfEth = BigInt(5e17);
124
+ export function ethBalanceCheckOp(threshold) {
125
+ return {
126
+ opType: OperationType.CHECK,
127
+ checkType: CheckOperationType.ETH_BALANCE,
128
+ chainId: 31337n,
129
+ contractAddress: ethers.constants.AddressZero,
130
+ params: encodeThresholdParams({ threshold }),
131
+ };
132
+ }
133
+ /**
134
+ * makeUniqueSpaceStreamId - space stream ids are derived from the contract
135
+ * in tests without entitlements there are no contracts, so we use a random id
136
+ */
137
+ export const makeUniqueSpaceStreamId = () => {
138
+ return makeSpaceStreamId(genId(40));
139
+ };
140
+ /**
141
+ *
142
+ * @returns a random user context
143
+ * Done using a worker thread to avoid blocking the main thread
144
+ */
145
+ export const makeRandomUserContext = async () => {
146
+ const wallet = ethers.Wallet.createRandom();
147
+ log('makeRandomUserContext', wallet.address);
148
+ return await makeUserContextFromWallet(wallet);
149
+ };
150
+ export const makeRandomUserAddress = () => {
151
+ return publicKeyToAddress(secp256k1.getPublicKey(secp256k1.utils.randomPrivateKey(), false));
152
+ };
153
+ export const makeUserContextFromWallet = async (wallet) => {
154
+ const userPrimaryWallet = wallet;
155
+ const delegateWallet = ethers.Wallet.createRandom();
156
+ const creatorAddress = publicKeyToAddress(bin_fromHexString(userPrimaryWallet.publicKey));
157
+ log('makeRandomUserContext', userIdFromAddress(creatorAddress));
158
+ return { ...(await makeSignerContext(userPrimaryWallet, delegateWallet, { days: 1 })), wallet };
159
+ };
160
+ export const cloneTestClient = async (client) => {
161
+ return makeTestClient({
162
+ ...client.opts,
163
+ context: {
164
+ ...client.signerContext,
165
+ wallet: client.wallet,
166
+ },
167
+ deviceId: client.deviceId,
168
+ });
169
+ };
170
+ export const makeTestClient = async (opts) => {
171
+ const context = opts?.context ?? (await makeRandomUserContext());
172
+ const deviceId = opts?.deviceId ? `-${opts.deviceId}` : `-${genId(5)}`;
173
+ const userId = userIdFromAddress(context.creatorAddress);
174
+ const dbName = `database-${userId}${deviceId}`;
175
+ const persistenceDbName = `persistence-${userId}${deviceId}`;
176
+ const appAddress = opts?.appAddress;
177
+ // create a new client with store(s)
178
+ const cryptoStore = RiverDbManager.getCryptoDb(userId, dbName);
179
+ const rpcClient = await makeTestRpcClient();
180
+ const client = new Client(context, appAddress, rpcClient, cryptoStore, {
181
+ ...opts,
182
+ persistenceStoreName: persistenceDbName,
183
+ });
184
+ client.wallet = context.wallet;
185
+ client.deviceId = deviceId;
186
+ return client;
187
+ };
188
+ export async function setupWalletsAndContexts() {
189
+ const baseConfig = townsEnv().makeBaseChainConfig();
190
+ const [alicesWallet, bobsWallet, carolsWallet] = [
191
+ ethers.Wallet.createRandom(),
192
+ ethers.Wallet.createRandom(),
193
+ ethers.Wallet.createRandom(),
194
+ ];
195
+ const [alicesContext, bobsContext, carolsContext] = await Promise.all([
196
+ makeUserContextFromWallet(alicesWallet),
197
+ makeUserContextFromWallet(bobsWallet),
198
+ makeUserContextFromWallet(carolsWallet),
199
+ ]);
200
+ const aliceProvider = new LocalhostWeb3Provider(baseConfig.rpcUrl, alicesWallet);
201
+ const bobProvider = new LocalhostWeb3Provider(baseConfig.rpcUrl, bobsWallet);
202
+ const carolProvider = new LocalhostWeb3Provider(baseConfig.rpcUrl, carolsWallet);
203
+ await Promise.all([
204
+ aliceProvider.fundWallet(),
205
+ bobProvider.fundWallet(),
206
+ carolProvider.fundWallet(),
207
+ ]);
208
+ const bobSpaceDapp = createSpaceDapp(bobProvider, baseConfig.chainConfig);
209
+ const aliceSpaceDapp = createSpaceDapp(aliceProvider, baseConfig.chainConfig);
210
+ const carolSpaceDapp = createSpaceDapp(carolProvider, baseConfig.chainConfig);
211
+ // create a user
212
+ const [alice, bob, carol] = await Promise.all([
213
+ makeTestClient({
214
+ context: alicesContext,
215
+ deviceId: 'alice',
216
+ }),
217
+ makeTestClient({
218
+ context: bobsContext,
219
+ }),
220
+ makeTestClient({
221
+ context: carolsContext,
222
+ }),
223
+ ]);
224
+ return {
225
+ alice,
226
+ bob,
227
+ carol,
228
+ alicesWallet,
229
+ bobsWallet,
230
+ carolsWallet,
231
+ alicesContext,
232
+ bobsContext,
233
+ carolsContext,
234
+ aliceProvider,
235
+ bobProvider,
236
+ carolProvider,
237
+ aliceSpaceDapp,
238
+ bobSpaceDapp,
239
+ carolSpaceDapp,
240
+ };
241
+ }
242
+ class DonePromise {
243
+ promise;
244
+ // @ts-ignore: Promise body is executed immediately, so vars are assigned before constructor returns
245
+ resolve;
246
+ // @ts-ignore: Promise body is executed immediately, so vars are assigned before constructor returns
247
+ reject;
248
+ constructor() {
249
+ this.promise = new Promise((resolve, reject) => {
250
+ this.resolve = resolve;
251
+ this.reject = reject;
252
+ });
253
+ }
254
+ done() {
255
+ this.resolve('done');
256
+ }
257
+ async wait() {
258
+ return this.promise;
259
+ }
260
+ async expectToSucceed() {
261
+ await expect(this.promise).resolves.toBe('done');
262
+ }
263
+ async expectToFail() {
264
+ await expect(this.promise).rejects.toThrow();
265
+ }
266
+ run(fn) {
267
+ try {
268
+ fn();
269
+ }
270
+ catch (err) {
271
+ this.reject(err);
272
+ }
273
+ }
274
+ runAndDone(fn) {
275
+ try {
276
+ fn();
277
+ this.done();
278
+ }
279
+ catch (err) {
280
+ this.reject(err);
281
+ }
282
+ }
283
+ }
284
+ export const makeDonePromise = () => {
285
+ return new DonePromise();
286
+ };
287
+ export const sendFlush = async (client) => {
288
+ const r = await client.info({ debug: ['flush_cache'] });
289
+ check(r.graffiti === 'cache flushed');
290
+ };
291
+ export async function* iterableWrapper(iterable) {
292
+ const iterator = iterable[Symbol.asyncIterator]();
293
+ while (true) {
294
+ const result = await iterator.next();
295
+ if (typeof result === 'string') {
296
+ return;
297
+ }
298
+ yield result.value;
299
+ }
300
+ }
301
+ // For example, use like this:
302
+ //
303
+ // joinPayload = lastEventFiltered(
304
+ // unpackStreamEnvelopes(userResponse.stream!),
305
+ // getUserPayload_Membership,
306
+ // )
307
+ //
308
+ // to get user membership payload from a last event containing it, or undefined if not found.
309
+ export const lastEventFiltered = (events, f) => {
310
+ let ret = undefined;
311
+ forEachRight(events, (v) => {
312
+ const r = f(v);
313
+ if (r !== undefined) {
314
+ ret = r;
315
+ return false;
316
+ }
317
+ return true;
318
+ });
319
+ return ret;
320
+ };
321
+ // createSpaceAndDefaultChannel creates a space and default channel for a given
322
+ // client, on the spaceDapp and the stream node. It creates a user stream, joins
323
+ // the user to the space, and starts syncing the client.
324
+ export async function createSpaceAndDefaultChannel(client, spaceDapp, wallet, name, membership) {
325
+ const transaction = await createVersionedSpaceFromMembership(client, spaceDapp, wallet, name, membership);
326
+ const receipt = await transaction.wait();
327
+ expect(receipt.status).toEqual(1);
328
+ const spaceAddress = spaceDapp.getSpaceAddress(receipt, wallet.address);
329
+ expect(spaceAddress).toBeDefined();
330
+ const spaceId = makeSpaceStreamId(spaceAddress);
331
+ const channelId = makeDefaultChannelStreamId(spaceAddress);
332
+ await client.initializeUser({ spaceId });
333
+ client.startSync();
334
+ const userStreamId = makeUserStreamId(client.userId);
335
+ const userStreamView = client.stream(userStreamId).view;
336
+ expect(userStreamView).toBeDefined();
337
+ const returnVal = await client.createSpace(spaceId);
338
+ expect(returnVal.streamId).toEqual(spaceId);
339
+ await waitFor(() => expect(userStreamView.userContent.isMember(spaceId, MembershipOp.SO_JOIN), `waitFor ${spaceId} in ${userStreamId}`).toBe(true));
340
+ const channelReturnVal = await client.createChannel(spaceId, 'general', `${name} general channel properties`, channelId);
341
+ expect(channelReturnVal.streamId).toEqual(channelId);
342
+ await waitFor(() => expect(userStreamView.userContent.isMember(channelId, MembershipOp.SO_JOIN), `waitFor ${channelId} in ${userStreamId}`).toBe(true));
343
+ return {
344
+ spaceId,
345
+ defaultChannelId: channelId,
346
+ userStreamView,
347
+ };
348
+ }
349
+ export const DefaultFreeAllocation = 1000;
350
+ export async function createVersionedSpaceFromMembership(client, spaceDapp, wallet, name, membership) {
351
+ if (useLegacySpaces()) {
352
+ if (isLegacyMembershipType(membership)) {
353
+ return await spaceDapp.createLegacySpace({
354
+ spaceName: `${name}-space`,
355
+ uri: `${name}-space-metadata`,
356
+ channelName: 'general',
357
+ membership,
358
+ }, wallet);
359
+ }
360
+ else {
361
+ // Convert space params to legacy space params
362
+ const legacyMembership = {
363
+ settings: membership.settings,
364
+ permissions: membership.permissions,
365
+ requirements: {
366
+ everyone: membership.requirements.everyone,
367
+ users: membership.requirements.users,
368
+ syncEntitlements: membership.requirements.syncEntitlements,
369
+ ruleData: convertRuleDataV2ToV1(decodeRuleDataV2(membership.requirements.ruleData)),
370
+ },
371
+ };
372
+ return await spaceDapp.createLegacySpace({
373
+ spaceName: `${name}-space`,
374
+ uri: `${name}-space-metadata`,
375
+ channelName: 'general',
376
+ membership: legacyMembership,
377
+ }, wallet);
378
+ }
379
+ }
380
+ else {
381
+ if (isLegacyMembershipType(membership)) {
382
+ // Convert legacy space params to current space params
383
+ membership = {
384
+ settings: membership.settings,
385
+ permissions: membership.permissions,
386
+ requirements: {
387
+ everyone: membership.requirements.everyone,
388
+ users: [],
389
+ syncEntitlements: false,
390
+ ruleData: encodeRuleDataV2(convertRuleDataV1ToV2(membership.requirements.ruleData)),
391
+ },
392
+ };
393
+ }
394
+ return await spaceDapp.createSpace({
395
+ spaceName: `${name}-space`,
396
+ uri: `${name}-space-metadata`,
397
+ channelName: 'general',
398
+ membership,
399
+ }, wallet);
400
+ }
401
+ }
402
+ // createVersionedSpace accepts either legacy or current space creation parameters and will
403
+ // fall backto the legacy space creation endpoint on the spaceDapp if the appropriate flag is set.
404
+ // If a user does not pass in a legacy space creation parameter, the function will not use
405
+ // the legacy space creation endpoint, because the updated parameters are not backwards
406
+ // compatible - we don't attempt conversion here.
407
+ export async function createVersionedSpace(spaceDapp, createSpaceParams, signer) {
408
+ if (useLegacySpaces() && isCreateLegacySpaceParams(createSpaceParams)) {
409
+ return await spaceDapp.createLegacySpace(createSpaceParams, signer);
410
+ }
411
+ else {
412
+ if (isCreateLegacySpaceParams(createSpaceParams)) {
413
+ // Convert legacy space params to current space params
414
+ createSpaceParams = {
415
+ spaceName: createSpaceParams.spaceName,
416
+ uri: createSpaceParams.uri,
417
+ channelName: createSpaceParams.channelName,
418
+ membership: {
419
+ settings: createSpaceParams.membership.settings,
420
+ permissions: createSpaceParams.membership.permissions,
421
+ requirements: {
422
+ everyone: createSpaceParams.membership.requirements.everyone,
423
+ users: [],
424
+ syncEntitlements: false,
425
+ ruleData: encodeRuleDataV2(convertRuleDataV1ToV2(createSpaceParams.membership.requirements
426
+ .ruleData)),
427
+ },
428
+ },
429
+ };
430
+ }
431
+ return await spaceDapp.createSpace(createSpaceParams, signer);
432
+ }
433
+ }
434
+ // createUserStreamAndSyncClient creates a user stream for a given client that
435
+ // uses a newly created space as the hint for the user stream, since the stream
436
+ // node will not allow the creation of a user stream without a space id.
437
+ //
438
+ // If the membership info is a legacy membership struct and the legacy space flag
439
+ // is set, the function will create a legacy space. Otherwise, it will convert the
440
+ // legacy membership struct to a current membership struct if needed and use the
441
+ // latest space creation endpoint.
442
+ export async function createUserStreamAndSyncClient(client, spaceDapp, name, membershipInfo, wallet) {
443
+ let createSpaceParams;
444
+ if (isLegacyMembershipType(membershipInfo)) {
445
+ createSpaceParams = {
446
+ spaceName: `${name}-space`,
447
+ uri: `${name}-space-metadata`,
448
+ channelName: 'general',
449
+ membership: membershipInfo,
450
+ };
451
+ }
452
+ else {
453
+ createSpaceParams = {
454
+ spaceName: `${name}-space`,
455
+ uri: `${name}-space-metadata`,
456
+ channelName: 'general',
457
+ membership: membershipInfo,
458
+ };
459
+ }
460
+ const transaction = await createVersionedSpace(spaceDapp, createSpaceParams, wallet);
461
+ const receipt = await transaction.wait();
462
+ expect(receipt.status).toEqual(1);
463
+ const spaceAddress = spaceDapp.getSpaceAddress(receipt, wallet.address);
464
+ expect(spaceAddress).toBeDefined();
465
+ const spaceId = makeSpaceStreamId(spaceAddress);
466
+ await client.initializeUser({ spaceId });
467
+ }
468
+ export async function expectUserCanJoin(spaceId, channelId, name, client, spaceDapp, address, wallet) {
469
+ const joinStart = Date.now();
470
+ // Check that the local evaluation of the user's entitlements for joining the space
471
+ // passes.
472
+ const entitledWallet = await spaceDapp.getEntitledWalletForJoiningSpace(spaceId, address, getXchainConfigForTesting());
473
+ expect(entitledWallet).toBeDefined();
474
+ const { issued } = await spaceDapp.joinSpace(spaceId, address, wallet);
475
+ expect(issued).toBe(true);
476
+ log(`${name} joined space ${spaceId}`, Date.now() - joinStart);
477
+ await client.initializeUser({ spaceId });
478
+ client.startSync();
479
+ await waitFor(() => expect(client.streams.syncState).toBe(SyncState.Syncing));
480
+ await expect(client.joinStream(spaceId)).resolves.not.toThrow();
481
+ await expect(client.joinStream(channelId)).resolves.not.toThrow();
482
+ const userStreamView = client.stream(client.userStreamId).view;
483
+ await waitFor(() => {
484
+ expect(userStreamView.userContent.isMember(spaceId, MembershipOp.SO_JOIN), `waitFor ${spaceId} in ${client.userStreamId}`).toBe(true);
485
+ expect(userStreamView.userContent.isMember(channelId, MembershipOp.SO_JOIN), `waitFor ${channelId} in ${client.userStreamId}`).toBe(true);
486
+ });
487
+ }
488
+ export async function everyoneMembershipStruct(spaceDapp, client) {
489
+ const { fixedPricingModuleAddress, freeAllocation, price } = await getFreeSpacePricingSetup(spaceDapp);
490
+ return {
491
+ settings: {
492
+ name: 'Everyone',
493
+ symbol: 'MEMBER',
494
+ price,
495
+ maxSupply: 1000,
496
+ duration: 0,
497
+ currency: ETH_ADDRESS,
498
+ feeRecipient: client.userId,
499
+ freeAllocation,
500
+ pricingModule: fixedPricingModuleAddress,
501
+ },
502
+ permissions: [Permission.Read, Permission.Write],
503
+ requirements: {
504
+ everyone: true,
505
+ users: [],
506
+ ruleData: NoopRuleData,
507
+ syncEntitlements: false,
508
+ },
509
+ };
510
+ }
511
+ // should start charging after the first member joins
512
+ export async function zeroPriceWithLimitedAllocationMembershipStruct(spaceDapp, client, opts) {
513
+ const { fixedPricingModuleAddress, price } = await getFreeSpacePricingSetup(spaceDapp);
514
+ const { freeAllocation } = opts;
515
+ const settings = {
516
+ settings: {
517
+ name: 'Everyone',
518
+ symbol: 'MEMBER',
519
+ price,
520
+ maxSupply: 1000,
521
+ duration: 0,
522
+ currency: ETH_ADDRESS,
523
+ feeRecipient: client.userId,
524
+ freeAllocation,
525
+ pricingModule: fixedPricingModuleAddress,
526
+ },
527
+ permissions: [Permission.Read, Permission.Write],
528
+ requirements: {
529
+ everyone: true,
530
+ users: [],
531
+ ruleData: NoopRuleData,
532
+ syncEntitlements: false,
533
+ },
534
+ };
535
+ return settings;
536
+ }
537
+ // should start charing for the first member
538
+ export async function dynamicMembershipStruct(spaceDapp, client) {
539
+ const dynamicPricingModule = await getDynamicPricingModule(spaceDapp);
540
+ expect(dynamicPricingModule).toBeDefined();
541
+ return {
542
+ settings: {
543
+ name: 'Everyone',
544
+ symbol: 'MEMBER',
545
+ price: 0,
546
+ maxSupply: 1000,
547
+ duration: 0,
548
+ currency: ETH_ADDRESS,
549
+ feeRecipient: client.userId,
550
+ freeAllocation: 0,
551
+ pricingModule: dynamicPricingModule.module,
552
+ },
553
+ permissions: [Permission.Read, Permission.Write],
554
+ requirements: {
555
+ everyone: true,
556
+ users: [],
557
+ ruleData: NoopRuleData,
558
+ syncEntitlements: false,
559
+ },
560
+ };
561
+ }
562
+ // should start charging after the first member joins
563
+ export async function fixedPriceMembershipStruct(spaceDapp, client, opts = { price: 1 }) {
564
+ const fixedPricingModule = await getFixedPricingModule(spaceDapp);
565
+ expect(fixedPricingModule).toBeDefined();
566
+ const { price } = opts;
567
+ const settings = {
568
+ settings: {
569
+ name: 'Everyone',
570
+ symbol: 'MEMBER',
571
+ price: ethers.utils.parseEther(price.toString()),
572
+ maxSupply: 1000,
573
+ duration: 0,
574
+ currency: ETH_ADDRESS,
575
+ feeRecipient: client.userId,
576
+ freeAllocation: 0,
577
+ pricingModule: fixedPricingModule.module,
578
+ },
579
+ permissions: [Permission.Read, Permission.Write],
580
+ requirements: {
581
+ everyone: true,
582
+ users: [],
583
+ ruleData: NoopRuleData,
584
+ syncEntitlements: false,
585
+ },
586
+ };
587
+ return settings;
588
+ }
589
+ export async function getFreeSpacePricingSetup(spaceDapp) {
590
+ const fixedPricingModule = await getFixedPricingModule(spaceDapp);
591
+ expect(fixedPricingModule).toBeDefined();
592
+ return {
593
+ price: 0,
594
+ fixedPricingModuleAddress: fixedPricingModule.module,
595
+ freeAllocation: DefaultFreeAllocation,
596
+ };
597
+ }
598
+ export function twoNftRuleData(nft1Address, nft2Address, logOpType = LogicalOperationType.AND) {
599
+ const leftOperation = {
600
+ opType: OperationType.CHECK,
601
+ checkType: CheckOperationType.ERC721,
602
+ chainId: 31337n,
603
+ contractAddress: nft1Address,
604
+ params: encodeThresholdParams({ threshold: 1n }),
605
+ };
606
+ const rightOperation = {
607
+ opType: OperationType.CHECK,
608
+ checkType: CheckOperationType.ERC721,
609
+ chainId: 31337n,
610
+ contractAddress: nft2Address,
611
+ params: encodeThresholdParams({ threshold: 1n }),
612
+ };
613
+ const root = {
614
+ opType: OperationType.LOGICAL,
615
+ logicalType: logOpType,
616
+ leftOperation,
617
+ rightOperation,
618
+ };
619
+ return treeToRuleData(root);
620
+ }
621
+ export async function unlinkCaller(rootSpaceDapp, rootWallet, caller) {
622
+ const walletLink = rootSpaceDapp.getWalletLink();
623
+ let txn;
624
+ try {
625
+ txn = await walletLink.removeCallerLink(caller);
626
+ }
627
+ catch (err) {
628
+ const parsedError = walletLink.parseError(err);
629
+ log('linkWallets error', parsedError);
630
+ }
631
+ expect(txn).toBeDefined();
632
+ const receipt = await txn?.wait();
633
+ expect(receipt.status).toEqual(1);
634
+ const linkedWallets = await walletLink.getLinkedWallets(rootWallet.address);
635
+ expect(linkedWallets).not.toContain(caller.address);
636
+ }
637
+ export async function unlinkWallet(rootSpaceDapp, rootWallet, linkedWallet) {
638
+ const walletLink = rootSpaceDapp.getWalletLink();
639
+ let txn;
640
+ try {
641
+ txn = await walletLink.removeLink(rootWallet, linkedWallet.address);
642
+ }
643
+ catch (err) {
644
+ const parsedError = walletLink.parseError(err);
645
+ log('linkWallets error', parsedError);
646
+ }
647
+ expect(txn).toBeDefined();
648
+ const receipt = await txn?.wait();
649
+ expect(receipt.status).toEqual(1);
650
+ const linkedWallets = await walletLink.getLinkedWallets(rootWallet.address);
651
+ expect(linkedWallets).not.toContain(linkedWallet.address);
652
+ }
653
+ // Hint: pass in the wallets attached to the providers.
654
+ export async function linkWallets(rootSpaceDapp, rootWallet, linkedWallet) {
655
+ const walletLink = rootSpaceDapp.getWalletLink();
656
+ let txn;
657
+ try {
658
+ txn = await walletLink.linkWalletToRootKey(rootWallet, linkedWallet);
659
+ }
660
+ catch (err) {
661
+ const parsedError = walletLink.parseError(err);
662
+ log('linkWallets error', parsedError);
663
+ }
664
+ expect(txn).toBeDefined();
665
+ const receipt = await txn?.wait();
666
+ expect(receipt.status).toEqual(1);
667
+ const linkedWallets = await walletLink.getLinkedWallets(rootWallet.address);
668
+ expect(linkedWallets).toContain(linkedWallet.address);
669
+ }
670
+ /// wait for a value, return the value if it is defined, otherwise throw an error or return undefined. false is a valid value.
671
+ export function waitForValue(callback, options = { timeoutMS: 10000 }) {
672
+ const tmpError = new Error('tmp');
673
+ const timeoutContext = new Error('waitFor timed out after ' + options.timeoutMS.toString() + 'ms\n' + tmpError.stack);
674
+ return new Promise((resolve, reject) => {
675
+ const timeoutMS = options.timeoutMS;
676
+ const pollIntervalMS = Math.min(timeoutMS / 2, 100);
677
+ let lastError = undefined;
678
+ const intervalId = setInterval(checkCallback, pollIntervalMS);
679
+ const timeoutId = setInterval(onTimeout, timeoutMS);
680
+ function onDone(result) {
681
+ clearInterval(intervalId);
682
+ clearInterval(timeoutId);
683
+ if (result) {
684
+ resolve(result);
685
+ }
686
+ else {
687
+ // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
688
+ reject(lastError);
689
+ }
690
+ }
691
+ function onTimeout() {
692
+ lastError = lastError ?? timeoutContext;
693
+ onDone(undefined);
694
+ }
695
+ function checkCallback() {
696
+ try {
697
+ const result = callback();
698
+ if (result !== undefined) {
699
+ // if result is truthy, resolve
700
+ onDone(result);
701
+ }
702
+ // otherwise let the polling continue
703
+ }
704
+ catch (err) {
705
+ lastError = err;
706
+ }
707
+ }
708
+ });
709
+ }
710
+ /// wait for the callback to not throw an error or return anything other than false (undefined is a valid value)
711
+ /// usage (preferred):
712
+ /// await waitFor(() => {
713
+ /// expect(true).toBe(true)
714
+ /// expect(myCounter.count).toBe(10)
715
+ /// })
716
+ /// usage (acceptable):
717
+ /// await waitFor(() => {
718
+ /// return myCounter.count > 9 // not preferred, but valid
719
+ /// })
720
+ /// usage (alternate):
721
+ /// const myValidValue = await waitFor(async () => {
722
+ /// const result = await myPromiseThatReturnsValueOrUndefinedOrError()
723
+ /// return result
724
+ /// })
725
+ export function waitFor(callback, options = { timeoutMS: 10000 }) {
726
+ const tmpError = new Error('tmp');
727
+ const timeoutContext = new Error('waitFor timed out after ' + options.timeoutMS.toString() + 'ms\n' + tmpError.stack);
728
+ return new Promise((resolve, reject) => {
729
+ const timeoutMS = options.timeoutMS;
730
+ const pollIntervalMS = Math.min(timeoutMS / 2, 100);
731
+ let timedOut = false;
732
+ let lastError = undefined;
733
+ let promiseStatus = 'none';
734
+ const intervalId = setInterval(checkCallback, pollIntervalMS);
735
+ const timeoutId = setInterval(onTimeout, timeoutMS);
736
+ function onDone(result) {
737
+ clearInterval(intervalId);
738
+ clearInterval(timeoutId);
739
+ if (result) {
740
+ resolve(result);
741
+ }
742
+ else if (result === undefined && promiseStatus === 'resolved') {
743
+ resolve(undefined);
744
+ }
745
+ else {
746
+ // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
747
+ reject(lastError);
748
+ }
749
+ }
750
+ function onTimeout() {
751
+ lastError = lastError ?? timeoutContext;
752
+ timedOut = true;
753
+ onDone();
754
+ }
755
+ function checkCallback() {
756
+ if (promiseStatus === 'pending')
757
+ return;
758
+ try {
759
+ const result = callback();
760
+ if (result && result instanceof Promise) {
761
+ promiseStatus = 'pending';
762
+ result.then((res) => {
763
+ if (!timedOut) {
764
+ promiseStatus = 'resolved';
765
+ onDone(res);
766
+ }
767
+ }, (err) => {
768
+ promiseStatus = 'rejected';
769
+ lastError = err;
770
+ });
771
+ }
772
+ else {
773
+ // explicitly check for false, most of these will return void
774
+ if (result !== false) {
775
+ promiseStatus = 'resolved';
776
+ // if result is truthy, resolve
777
+ onDone(result);
778
+ }
779
+ // otherwise let the polling continue
780
+ }
781
+ }
782
+ catch (err) {
783
+ lastError = err;
784
+ }
785
+ }
786
+ });
787
+ }
788
+ export async function waitForSyncStreams(syncStreams, matcher) {
789
+ for await (const res of iterableWrapper(syncStreams)) {
790
+ if (await matcher(res)) {
791
+ return res;
792
+ }
793
+ }
794
+ throw new Error('waitFor: timeout');
795
+ }
796
+ export async function waitForSyncStreamsMessage(syncStreams, message) {
797
+ return waitForSyncStreams(syncStreams, async (res) => {
798
+ if (res.syncOp === SyncOp.SYNC_UPDATE) {
799
+ const stream = res.stream;
800
+ if (stream) {
801
+ const env = await unpackStreamEnvelopes(stream, undefined);
802
+ for (const e of env) {
803
+ if (e.event.payload.case === 'channelPayload') {
804
+ const p = e.event.payload.value.content;
805
+ if (p.case === 'message' && p.value.ciphertext === message) {
806
+ return true;
807
+ }
808
+ }
809
+ }
810
+ }
811
+ }
812
+ return false;
813
+ });
814
+ }
815
+ export function getChannelMessagePayload(event) {
816
+ if (event?.payload?.case === 'post') {
817
+ if (event.payload.value.content.case === 'text') {
818
+ return event.payload.value.content.value?.body;
819
+ }
820
+ }
821
+ return undefined;
822
+ }
823
+ export function getTimelineMessagePayload(event) {
824
+ if (event?.content?.kind === RiverTimelineEvent.ChannelMessage) {
825
+ return event.content.body;
826
+ }
827
+ return undefined;
828
+ }
829
+ export function createEventDecryptedPromise(client, expectedMessageText) {
830
+ const recipientReceivesMessageWithoutError = makeDonePromise();
831
+ client.on('eventDecrypted', (streamId, contentKind, event) => {
832
+ recipientReceivesMessageWithoutError.runAndDone(() => {
833
+ expect(event.content).toBeDefined();
834
+ check(event.content?.kind === RiverTimelineEvent.ChannelMessage);
835
+ expect(event.content.body).toEqual(expectedMessageText);
836
+ });
837
+ });
838
+ return recipientReceivesMessageWithoutError.promise;
839
+ }
840
+ export function isValidEthAddress(address) {
841
+ const ethAddressRegex = /^(0x)?[0-9a-fA-F]{40}$/;
842
+ return ethAddressRegex.test(address);
843
+ }
844
+ export function getNftRuleData(testNftAddress) {
845
+ return createExternalNFTStruct([testNftAddress]);
846
+ }
847
+ // createRole creates a role on the spaceDapp with the given parameters, using the legacy endpoint
848
+ // if the USE_LEGACY_SPACES environment variable is set and converting the ruleData into the correct
849
+ // format as necessary. Be aware, though, that the legacy endpoint does not support erc1155 checks.
850
+ export async function createRole(spaceDapp, provider, spaceId, roleName, permissions, users, ruleData, signer) {
851
+ let txn = undefined;
852
+ let error = undefined;
853
+ if (useLegacySpaces()) {
854
+ try {
855
+ if (!isRuleDataV1(ruleData)) {
856
+ ruleData = convertRuleDataV2ToV1(ruleData);
857
+ }
858
+ txn = await spaceDapp.legacyCreateRole(spaceId, roleName, permissions, users, ruleData, signer);
859
+ }
860
+ catch (err) {
861
+ error = spaceDapp.parseSpaceError(spaceId, err);
862
+ return { roleId: undefined, error };
863
+ }
864
+ }
865
+ else {
866
+ if (isRuleDataV1(ruleData)) {
867
+ ruleData = convertRuleDataV1ToV2(ruleData);
868
+ }
869
+ try {
870
+ txn = await spaceDapp.createRole(spaceId, roleName, permissions, users, ruleData, signer);
871
+ }
872
+ catch (err) {
873
+ error = spaceDapp.parseSpaceError(spaceId, err);
874
+ return { roleId: undefined, error };
875
+ }
876
+ }
877
+ const { roleId, error: roleError } = await waitForRoleCreated(spaceDapp, spaceId, txn);
878
+ return { roleId, error: roleError };
879
+ }
880
+ export async function updateRole(spaceDapp, provider, params, signer) {
881
+ let txn = undefined;
882
+ let error = undefined;
883
+ if (useLegacySpaces()) {
884
+ throw new Error('updateRole is v2 only');
885
+ }
886
+ try {
887
+ txn = await spaceDapp.updateRole(params, signer);
888
+ }
889
+ catch (err) {
890
+ error = spaceDapp.parseSpaceError(params.spaceNetworkId, err);
891
+ return { error };
892
+ }
893
+ const receipt = await provider.waitForTransaction(txn.hash);
894
+ if (receipt.status === 0) {
895
+ return { error: new Error('Transaction failed') };
896
+ }
897
+ return { error: undefined };
898
+ }
899
+ export async function createChannel(spaceDapp, provider, spaceId, channelName, roleIds, signer) {
900
+ let txn = undefined;
901
+ let error = undefined;
902
+ const channelId = makeUniqueChannelStreamId(spaceId);
903
+ try {
904
+ txn = await spaceDapp.createChannel(spaceId, channelName, '', channelId, roleIds, signer);
905
+ }
906
+ catch (err) {
907
+ error = spaceDapp.parseSpaceError(spaceId, err);
908
+ return { channelId: undefined, error };
909
+ }
910
+ const receipt = await provider.waitForTransaction(txn.hash);
911
+ if (receipt.status === 0) {
912
+ return { channelId: undefined, error: new Error('Transaction failed') };
913
+ }
914
+ return { channelId, error: undefined };
915
+ }
916
+ // Type guard function based on field checks
917
+ export function isEncryptedData(obj) {
918
+ if (typeof obj !== 'object' || obj === null) {
919
+ return false;
920
+ }
921
+ const data = obj;
922
+ return (typeof data.ciphertext === 'string' &&
923
+ typeof data.algorithm === 'string' &&
924
+ typeof data.senderKey === 'string' &&
925
+ typeof data.sessionId === 'string' &&
926
+ (typeof data.checksum === 'string' || data.checksum === undefined) &&
927
+ (typeof data.refEventId === 'string' || data.refEventId === undefined));
928
+ }
929
+ // Users need to be mapped from 'alice', 'bob', etc to their wallet addresses,
930
+ // because the wallets are created within this helper method.
931
+ export async function createTownWithRequirements(requirements) {
932
+ const { alice, bob, carol, aliceSpaceDapp, bobSpaceDapp, carolSpaceDapp, aliceProvider, bobProvider, carolProvider, alicesWallet, bobsWallet, carolsWallet, } = await setupWalletsAndContexts();
933
+ const { fixedPricingModuleAddress, freeAllocation, price } = await getFreeSpacePricingSetup(bobSpaceDapp);
934
+ const userNameToWallet = {
935
+ alice: alicesWallet.address,
936
+ bob: bobsWallet.address,
937
+ carol: carolsWallet.address,
938
+ };
939
+ requirements.users = requirements.users.map((user) => userNameToWallet[user]);
940
+ const membershipInfo = {
941
+ settings: {
942
+ name: 'Everyone',
943
+ symbol: 'MEMBER',
944
+ price,
945
+ maxSupply: 1000,
946
+ duration: requirements.duration ?? 0,
947
+ currency: ETH_ADDRESS,
948
+ feeRecipient: bob.userId,
949
+ freeAllocation,
950
+ pricingModule: fixedPricingModuleAddress,
951
+ },
952
+ permissions: [Permission.Read, Permission.Write],
953
+ requirements: {
954
+ everyone: requirements.everyone,
955
+ users: requirements.users,
956
+ ruleData: encodeRuleDataV2(requirements.ruleData),
957
+ syncEntitlements: false,
958
+ },
959
+ };
960
+ // This helper method validates that the owner can join the space and default channel.
961
+ const { spaceId, defaultChannelId: channelId, userStreamView: bobUserStreamView, } = await createSpaceAndDefaultChannel(bob, bobSpaceDapp, bobProvider.wallet, 'bobs', membershipInfo);
962
+ // Validate that owner passes entitlement check
963
+ const entitledWallet = await bobSpaceDapp.getEntitledWalletForJoiningSpace(spaceId, bobsWallet.address, getXchainConfigForTesting());
964
+ expect(entitledWallet).toBeDefined();
965
+ return {
966
+ alice,
967
+ bob,
968
+ carol,
969
+ aliceSpaceDapp,
970
+ bobSpaceDapp,
971
+ carolSpaceDapp,
972
+ aliceProvider,
973
+ bobProvider,
974
+ carolProvider,
975
+ alicesWallet,
976
+ bobsWallet,
977
+ carolsWallet,
978
+ spaceId,
979
+ channelId,
980
+ bobUserStreamView,
981
+ };
982
+ }
983
+ export async function expectUserCannotJoinSpace(spaceId, client, spaceDapp, address) {
984
+ // Check that the local evaluation of the user's entitlements for joining the space
985
+ // fails.
986
+ const entitledWallet = await spaceDapp.getEntitledWalletForJoiningSpace(spaceId, address, getXchainConfigForTesting());
987
+ expect(entitledWallet).toBeUndefined();
988
+ await expect(client.joinStream(spaceId)).rejects.toThrow(/PERMISSION_DENIED/);
989
+ }
990
+ // pass in users as 'alice', 'bob', 'carol' - b/c their wallets are created here
991
+ export async function setupChannelWithCustomRole(userNames, ruleData, permissions = [Permission.Read]) {
992
+ const { alice, bob, carol, alicesWallet, bobsWallet, carolsWallet, aliceProvider, bobProvider, carolProvider, aliceSpaceDapp, bobSpaceDapp, carolSpaceDapp, } = await setupWalletsAndContexts();
993
+ const userNameToWallet = {
994
+ alice: alicesWallet.address,
995
+ bob: bobsWallet.address,
996
+ carol: carolsWallet.address,
997
+ };
998
+ const users = userNames.map((user) => userNameToWallet[user]);
999
+ const { spaceId, defaultChannelId } = await createSpaceAndDefaultChannel(bob, bobSpaceDapp, bobProvider.wallet, 'bob', await everyoneMembershipStruct(bobSpaceDapp, bob));
1000
+ const { roleId, error: roleError } = await createRole(bobSpaceDapp, bobProvider, spaceId, 'gated role', permissions, users, ruleData, bobProvider.wallet);
1001
+ expect(roleError).toBeUndefined();
1002
+ log('roleId', roleId);
1003
+ // Create a channel gated by the above role in the space contract.
1004
+ const { channelId, error: channelError } = await createChannel(bobSpaceDapp, bobProvider, spaceId, 'custom-role-gated-channel', [roleId.valueOf()], bobProvider.wallet);
1005
+ expect(channelError).toBeUndefined();
1006
+ log('channelId', channelId);
1007
+ // Then, establish a stream for the channel on the river node.
1008
+ const { streamId: channelStreamId } = await bob.createChannel(spaceId, 'nft-gated-channel', 'talk about nfts here', channelId);
1009
+ expect(channelStreamId).toEqual(channelId);
1010
+ // As the space owner, Bob should always be able to join the channel regardless of the custom role.
1011
+ await expect(bob.joinStream(channelId)).resolves.not.toThrow();
1012
+ // Join alice to the town so she can attempt to join the role-gated channel.
1013
+ // Alice should have no issue joining the space and default channel for an "everyone" town.
1014
+ await expectUserCanJoin(spaceId, defaultChannelId, 'alice', alice, aliceSpaceDapp, alicesWallet.address, aliceProvider.wallet);
1015
+ // Add carol to the space also so she can attempt to join role-gated channels.
1016
+ await expectUserCanJoin(spaceId, defaultChannelId, 'carol', carol, carolSpaceDapp, carolsWallet.address, carolProvider.wallet);
1017
+ return {
1018
+ alice,
1019
+ bob,
1020
+ carol,
1021
+ alicesWallet,
1022
+ bobsWallet,
1023
+ carolsWallet,
1024
+ aliceProvider,
1025
+ bobProvider,
1026
+ carolProvider,
1027
+ aliceSpaceDapp,
1028
+ bobSpaceDapp,
1029
+ carolSpaceDapp,
1030
+ spaceId,
1031
+ defaultChannelId,
1032
+ channelId,
1033
+ roleId,
1034
+ };
1035
+ }
1036
+ export async function expectUserCanJoinChannel(client, spaceDapp, spaceId, channelId) {
1037
+ // Space dapp should evaluate the user as entitled to the channel
1038
+ await expect(spaceDapp.isEntitledToChannel(spaceId, channelId, client.userId, Permission.Read, getXchainConfigForTesting())).resolves.toBeTruthy();
1039
+ // Stream node should allow the join
1040
+ await expect(client.joinStream(channelId)).resolves.not.toThrow();
1041
+ const userStreamView = (await client.waitForStream(makeUserStreamId(client.userId))).view;
1042
+ // Wait for alice's user stream to have the join
1043
+ await waitFor(() => expect(userStreamView.userContent.isMember(channelId, MembershipOp.SO_JOIN), `waitFor ${channelId} in ${client.userStreamId}`).toBe(true));
1044
+ }
1045
+ export async function expectUserCannotJoinChannel(client, spaceDapp, spaceId, channelId) {
1046
+ // Space dapp should evaluate the user as not entitled to the channel
1047
+ await expect(spaceDapp.isEntitledToChannel(spaceId, channelId, client.userId, Permission.Read, getXchainConfigForTesting())).resolves.toBeFalsy();
1048
+ // Stream node should not allow the join
1049
+ await expect(client.joinStream(channelId)).rejects.toThrow(/7:PERMISSION_DENIED/);
1050
+ }
1051
+ export const findMessageByText = (events, text) => {
1052
+ return events.find((event) => event.content?.kind === RiverTimelineEvent.ChannelMessage &&
1053
+ event.content.body === text);
1054
+ };
1055
+ export function extractBlockchainTransactionTransferEvents(timeline) {
1056
+ return timeline
1057
+ .map((e) => {
1058
+ if (e.remoteEvent?.event.payload.case === 'userPayload' &&
1059
+ e.remoteEvent?.event.payload.value.content.case === 'blockchainTransaction' &&
1060
+ e.remoteEvent?.event.payload.value.content.value.content.case === 'tokenTransfer') {
1061
+ return e.remoteEvent?.event.payload.value.content.value.content.value;
1062
+ }
1063
+ return undefined;
1064
+ })
1065
+ .filter(isDefined);
1066
+ }
1067
+ export function extractMemberBlockchainTransactions(client, channelId) {
1068
+ const stream = client.streams.get(channelId);
1069
+ if (!stream)
1070
+ throw new Error('no stream found');
1071
+ return stream.view.getMembers().tokenTransfers;
1072
+ }
1073
+ export async function waitForRoleCreated(spaceDapp, spaceId, txn) {
1074
+ const receipt = await spaceDapp.provider.waitForTransaction(txn.hash);
1075
+ if (receipt.status === 0) {
1076
+ return { roleId: undefined, error: new Error('Transaction failed') };
1077
+ }
1078
+ const parsedLogs = await spaceDapp.parseSpaceLogs(spaceId, receipt.logs);
1079
+ const roleCreatedEvent = parsedLogs.find((log) => log?.name === 'RoleCreated');
1080
+ if (!roleCreatedEvent) {
1081
+ return { roleId: undefined, error: new Error('RoleCreated event not found') };
1082
+ }
1083
+ const roleId = roleCreatedEvent.args[1].toNumber();
1084
+ return { roleId, error: undefined };
1085
+ }
1086
+ //# sourceMappingURL=testUtils.js.map