@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,178 @@
1
+ /**
2
+ * @group with-entitlements
3
+ */
4
+ import { AppRegistryDapp, Permission, SpaceAddressFromSpaceId } from '@towns-protocol/web3';
5
+ import { createSpaceAndDefaultChannel, everyoneMembershipStruct, setupWalletsAndContexts, waitFor, createChannel, } from '../testUtils';
6
+ import { townsEnv } from '../../townsEnv';
7
+ import { ethers } from 'ethers';
8
+ import { MembershipOp } from '@towns-protocol/proto';
9
+ import { make_MemberPayload_KeySolicitation } from '../../types';
10
+ describe('bot entitlements tests', () => {
11
+ test('bot has READ permissions to channels when granted by isAppEntitled', async () => {
12
+ const { bob: bot, bobsWallet: botWallet, bobProvider: botProvider, carol: spaceOwner, carolProvider: spaceOwnerProvider, carolSpaceDapp: spaceOwnerSpaceDapp, } = await setupWalletsAndContexts();
13
+ const appRegistryDapp = new AppRegistryDapp(townsEnv().makeBaseChainConfig().chainConfig, spaceOwnerProvider);
14
+ // Create bot app contract with READ permission only
15
+ const tx = await appRegistryDapp.createApp(botProvider.signer, 'read-only-bot', [Permission.Read], // Only READ permission, no WRITE
16
+ botWallet.address, ethers.utils.parseEther('0.01').toBigInt(), 31536000n);
17
+ const receipt = await tx.wait();
18
+ const { app: foundAppAddress } = appRegistryDapp.getCreateAppEvent(receipt, botWallet.address);
19
+ expect(foundAppAddress).toBeDefined();
20
+ // Create bot user streams
21
+ await expect(bot.initializeUser({ appAddress: foundAppAddress })).resolves.toBeDefined();
22
+ bot.startSync();
23
+ // Create a town with channels (everyone can join)
24
+ const everyoneMembership = await everyoneMembershipStruct(spaceOwnerSpaceDapp, spaceOwner);
25
+ const { spaceId } = await createSpaceAndDefaultChannel(spaceOwner, spaceOwnerSpaceDapp, spaceOwnerProvider.wallet, "space owner's town", everyoneMembership);
26
+ // Install the bot to the space (as space owner)
27
+ const installTx = await appRegistryDapp.installApp(spaceOwnerProvider.signer, foundAppAddress, SpaceAddressFromSpaceId(spaceId), ethers.utils.parseEther('0.02').toBigInt());
28
+ const installReceipt = await installTx.wait();
29
+ expect(installReceipt.status).toBe(1);
30
+ // This channel has no roles attached, so the bot can only gain READ permissions through
31
+ // isAppEntitled.
32
+ const { channelId: restrictedChannelId, error: channelError } = await createChannel(spaceOwnerSpaceDapp, spaceOwnerProvider, spaceId, 'channel-without-roles', [], spaceOwnerProvider.wallet);
33
+ expect(channelError).toBeUndefined();
34
+ expect(restrictedChannelId).toBeDefined();
35
+ // Create the channel stream
36
+ const { streamId: returnedChannelId } = await spaceOwner.createChannel(spaceId, 'channel-without-roles', '', restrictedChannelId);
37
+ expect(returnedChannelId).toEqual(restrictedChannelId);
38
+ // Have space owner add bot to space and channel
39
+ await expect(spaceOwner.joinUser(spaceId, bot.userId)).resolves.toBeDefined();
40
+ await expect(spaceOwner.joinUser(restrictedChannelId, bot.userId)).resolves.toBeDefined();
41
+ // Validate bot is a member of both space and channel
42
+ const botUserStreamView = bot.stream(bot.userStreamId).view;
43
+ await waitFor(() => {
44
+ expect(botUserStreamView.userContent.isMember(spaceId, MembershipOp.SO_JOIN)).toBe(true);
45
+ expect(botUserStreamView.userContent.isMember(restrictedChannelId, MembershipOp.SO_JOIN)).toBe(true);
46
+ });
47
+ // Force miniblocks with snapshots for both space and channel streams
48
+ // The test will now fail if app address is not properly propogated through member snapshots.
49
+ const spaceStream = spaceOwner.stream(spaceId);
50
+ const channelStream = spaceOwner.stream(restrictedChannelId);
51
+ await waitFor(async () => {
52
+ const response = await spaceOwner.debugForceMakeMiniblock(spaceId, {
53
+ forceSnapshot: true,
54
+ lastKnownMiniblockNum: spaceStream.view.miniblockInfo.max,
55
+ });
56
+ expect(response).toBeDefined();
57
+ });
58
+ await waitFor(async () => {
59
+ const response = await spaceOwner.debugForceMakeMiniblock(restrictedChannelId, {
60
+ forceSnapshot: true,
61
+ lastKnownMiniblockNum: channelStream.view.miniblockInfo.max,
62
+ });
63
+ expect(response).toBeDefined();
64
+ });
65
+ // Bot should be able to post a key solicitation because it has READ permission through isAppEntitled
66
+ // Key solicitations require READ permission, not WRITE permission
67
+ const payload = make_MemberPayload_KeySolicitation({
68
+ deviceKey: 'bot-device-key',
69
+ sessionIds: ['aaa'],
70
+ fallbackKey: 'bot-fallback-key',
71
+ isNewDevice: true,
72
+ });
73
+ // This should succeed because the bot has READ permission via app entitlements
74
+ await bot.makeEventAndAddToStream(restrictedChannelId, payload);
75
+ // Cleanup
76
+ await bot.stopSync();
77
+ await spaceOwner.stopSync();
78
+ });
79
+ test('bot has write permissions to channels when granted by isAppEntitled', async () => {
80
+ const { alice: spaceOwner, aliceProvider: spaceOwnerProvider, aliceSpaceDapp: spaceOwnerSpaceDapp, bob: botWithoutWrite, bobsWallet: botWithoutWriteWallet, bobProvider: botWithoutWriteProvider, carol: botWithWrite, carolsWallet: botWithWriteWallet, carolProvider: botWithWriteProvider, } = await setupWalletsAndContexts();
81
+ const appRegistryDapp = new AppRegistryDapp(townsEnv().makeBaseChainConfig().chainConfig, spaceOwnerProvider);
82
+ // Create first bot app contract with READ permission only (no WRITE)
83
+ const tx1 = await appRegistryDapp.createApp(botWithoutWriteProvider.signer, 'read-only-bot', [Permission.Read], // Only READ permission, no WRITE
84
+ botWithoutWriteWallet.address, ethers.utils.parseEther('0.01').toBigInt(), 31536000n);
85
+ const receipt1 = await tx1.wait();
86
+ const { app: readOnlyBotAddress } = appRegistryDapp.getCreateAppEvent(receipt1, botWithoutWriteWallet.address);
87
+ expect(readOnlyBotAddress).toBeDefined();
88
+ // Create second bot app contract with both READ and WRITE permissions
89
+ const tx2 = await appRegistryDapp.createApp(botWithWriteProvider.signer, 'read-write-bot', [Permission.Read, Permission.Write], // Both READ and WRITE permissions
90
+ botWithWriteWallet.address, ethers.utils.parseEther('0.01').toBigInt(), 31536000n);
91
+ const receipt2 = await tx2.wait();
92
+ const { app: readWriteBotAddress } = appRegistryDapp.getCreateAppEvent(receipt2, botWithWriteWallet.address);
93
+ expect(readWriteBotAddress).toBeDefined();
94
+ // Create bot user streams for both bots
95
+ await expect(botWithoutWrite.initializeUser({ appAddress: readOnlyBotAddress })).resolves.toBeDefined();
96
+ await expect(botWithWrite.initializeUser({ appAddress: readWriteBotAddress })).resolves.toBeDefined();
97
+ botWithoutWrite.startSync();
98
+ botWithWrite.startSync();
99
+ // Create a town with channels (everyone can join)
100
+ const everyoneMembership = await everyoneMembershipStruct(spaceOwnerSpaceDapp, spaceOwner);
101
+ const { spaceId, defaultChannelId } = await createSpaceAndDefaultChannel(spaceOwner, spaceOwnerSpaceDapp, spaceOwnerProvider.wallet, "space owner's town", everyoneMembership);
102
+ // Install both bots to the space (as space owner)
103
+ const installTx1 = await appRegistryDapp.installApp(spaceOwnerProvider.signer, readOnlyBotAddress, SpaceAddressFromSpaceId(spaceId), ethers.utils.parseEther('0.02').toBigInt());
104
+ const installReceipt1 = await installTx1.wait();
105
+ expect(installReceipt1.status).toBe(1);
106
+ const installTx2 = await appRegistryDapp.installApp(spaceOwnerProvider.signer, readWriteBotAddress, SpaceAddressFromSpaceId(spaceId), ethers.utils.parseEther('0.02').toBigInt());
107
+ const installReceipt2 = await installTx2.wait();
108
+ expect(installReceipt2.status).toBe(1);
109
+ // Verify both bots are installed
110
+ const space = spaceOwnerSpaceDapp.getSpace(spaceId);
111
+ const installedApps = await space.AppAccount.read.getInstalledApps();
112
+ expect(installedApps).toContain(readOnlyBotAddress);
113
+ expect(installedApps).toContain(readWriteBotAddress);
114
+ // Have space owner add both bots to space and default channel
115
+ await expect(spaceOwner.joinUser(spaceId, botWithoutWrite.userId)).resolves.toBeDefined();
116
+ await expect(spaceOwner.joinUser(defaultChannelId, botWithoutWrite.userId)).resolves.toBeDefined();
117
+ await expect(spaceOwner.joinUser(spaceId, botWithWrite.userId)).resolves.toBeDefined();
118
+ await expect(spaceOwner.joinUser(defaultChannelId, botWithWrite.userId)).resolves.toBeDefined();
119
+ // Validate both bots are members of space and default channel
120
+ const botWithoutWriteUserStreamView = botWithoutWrite.stream(botWithoutWrite.userStreamId).view;
121
+ const botWithWriteUserStreamView = botWithWrite.stream(botWithWrite.userStreamId).view;
122
+ await waitFor(() => {
123
+ expect(botWithoutWriteUserStreamView.userContent.isMember(spaceId, MembershipOp.SO_JOIN)).toBe(true);
124
+ expect(botWithoutWriteUserStreamView.userContent.isMember(defaultChannelId, MembershipOp.SO_JOIN)).toBe(true);
125
+ expect(botWithWriteUserStreamView.userContent.isMember(spaceId, MembershipOp.SO_JOIN)).toBe(true);
126
+ expect(botWithWriteUserStreamView.userContent.isMember(defaultChannelId, MembershipOp.SO_JOIN)).toBe(true);
127
+ });
128
+ // Bot without WRITE permission should NOT be able to post a message
129
+ await expect(botWithoutWrite.sendMessage(defaultChannelId, 'Message from read-only bot')).rejects.toThrow(/PERMISSION_DENIED/);
130
+ // Bot with WRITE permission should be able to post a message
131
+ await expect(botWithWrite.sendMessage(defaultChannelId, 'Message from read-write bot')).resolves.not.toThrow();
132
+ // Cleanup
133
+ await botWithoutWrite.stopSync();
134
+ await botWithWrite.stopSync();
135
+ await spaceOwner.stopSync();
136
+ });
137
+ // TODO: flaky test
138
+ test.skip('bot does not have write permissions to channels when not granted by isAppEntitled', async () => {
139
+ const { alice: spaceOwner, aliceProvider: spaceOwnerProvider, aliceSpaceDapp: spaceOwnerSpaceDapp, bob: bot, bobsWallet: botWallet, bobProvider: botProvider, } = await setupWalletsAndContexts();
140
+ const appRegistryDapp = new AppRegistryDapp(townsEnv().makeBaseChainConfig().chainConfig, spaceOwnerProvider);
141
+ // Create bot app contract with READ permission only (no WRITE)
142
+ const tx = await appRegistryDapp.createApp(botProvider.signer, 'read-only-bot-no-write', [Permission.Read], // Only READ permission, no WRITE
143
+ botWallet.address, ethers.utils.parseEther('0.01').toBigInt(), 31536000n);
144
+ const receipt = await tx.wait();
145
+ const { app: foundAppAddress } = appRegistryDapp.getCreateAppEvent(receipt, botWallet.address);
146
+ expect(foundAppAddress).toBeDefined();
147
+ // Create bot user streams
148
+ await expect(bot.initializeUser({ appAddress: foundAppAddress })).resolves.toBeDefined();
149
+ bot.startSync();
150
+ // Create a town with channels where everyone can join and has write permissions
151
+ const everyoneMembership = await everyoneMembershipStruct(spaceOwnerSpaceDapp, spaceOwner);
152
+ const { spaceId, defaultChannelId } = await createSpaceAndDefaultChannel(spaceOwner, spaceOwnerSpaceDapp, spaceOwnerProvider.wallet, "space owner's town", everyoneMembership);
153
+ // Install the bot to the space (as space owner)
154
+ const installTx = await appRegistryDapp.installApp(spaceOwnerProvider.signer, foundAppAddress, SpaceAddressFromSpaceId(spaceId), ethers.utils.parseEther('0.02').toBigInt());
155
+ const installReceipt = await installTx.wait();
156
+ expect(installReceipt.status).toBe(1);
157
+ // Verify bot is installed
158
+ const space = spaceOwnerSpaceDapp.getSpace(spaceId);
159
+ const installedApps = await space.AppAccount.read.getInstalledApps();
160
+ expect(installedApps).toContain(foundAppAddress);
161
+ // Have space owner add bot to space and default channel
162
+ await expect(spaceOwner.joinUser(spaceId, bot.userId)).resolves.toBeDefined();
163
+ await expect(spaceOwner.joinUser(defaultChannelId, bot.userId)).resolves.toBeDefined();
164
+ // Validate bot is a member of both space and channel
165
+ const botUserStreamView = bot.stream(bot.userStreamId).view;
166
+ await waitFor(() => {
167
+ expect(botUserStreamView.userContent.isMember(spaceId, MembershipOp.SO_JOIN)).toBe(true);
168
+ expect(botUserStreamView.userContent.isMember(defaultChannelId, MembershipOp.SO_JOIN)).toBe(true);
169
+ });
170
+ // Bot should NOT be able to post a message because it lacks WRITE permission through isAppEntitled
171
+ // Even though the space grants write permissions to all users, the bot's app contract only has READ permission
172
+ await expect(bot.sendMessage(defaultChannelId, 'Message from read-only bot')).rejects.toThrow(/PERMISSION_DENIED/);
173
+ // Cleanup
174
+ await bot.stopSync();
175
+ await spaceOwner.stopSync();
176
+ });
177
+ });
178
+ //# sourceMappingURL=botEntitlements.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"botEntitlements.test.js","sourceRoot":"","sources":["../../../src/tests/multi/botEntitlements.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @group with-entitlements
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=botMembership.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"botMembership.test.d.ts","sourceRoot":"","sources":["../../../src/tests/multi/botMembership.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,295 @@
1
+ /**
2
+ * @group with-entitlements
3
+ */
4
+ import { AppRegistryDapp, Permission, SpaceAddressFromSpaceId, NoopRuleData, } from '@towns-protocol/web3';
5
+ import { createSpaceAndDefaultChannel, everyoneMembershipStruct, setupWalletsAndContexts, waitFor, createTownWithRequirements, createChannel, getXchainConfigForTesting, } from '../testUtils';
6
+ import { townsEnv } from '../../townsEnv';
7
+ import { ethers } from 'ethers';
8
+ import { MembershipOp } from '@towns-protocol/proto';
9
+ describe('bot membership tests', () => {
10
+ test('registered and installed bots can join spaces and channels', async () => {
11
+ const { aliceProvider: ownerProvider, bob: bot, bobsWallet: botWallet, bobProvider: botProvider, carol: spaceOwner, carolProvider: spaceOwnerProvider, carolSpaceDapp: spaceOwnerSpaceDapp, } = await setupWalletsAndContexts();
12
+ const appRegistryDapp = new AppRegistryDapp(townsEnv().makeBaseChainConfig().chainConfig, ownerProvider);
13
+ // Create bot app contract
14
+ const tx = await appRegistryDapp.createApp(botProvider.signer, 'bob-bot', [Permission.Read, Permission.Write], botWallet.address, ethers.utils.parseEther('0.01').toBigInt(), 31536000n);
15
+ const receipt = await tx.wait();
16
+ const { app: foundAppAddress } = appRegistryDapp.getCreateAppEvent(receipt, botWallet.address);
17
+ expect(foundAppAddress).toBeDefined();
18
+ // Create bot user streams
19
+ await expect(bot.initializeUser({ appAddress: foundAppAddress })).resolves.toBeDefined();
20
+ bot.startSync();
21
+ // Create a town with channels
22
+ const everyoneMembership = await everyoneMembershipStruct(spaceOwnerSpaceDapp, spaceOwner);
23
+ const { spaceId, defaultChannelId: channelId } = await createSpaceAndDefaultChannel(spaceOwner, spaceOwnerSpaceDapp, spaceOwnerProvider.wallet, "space owner's town", everyoneMembership);
24
+ // Install the bot to the space
25
+ const tx2 = await appRegistryDapp.installApp(spaceOwnerProvider.signer, foundAppAddress, SpaceAddressFromSpaceId(spaceId), ethers.utils.parseEther('0.02').toBigInt());
26
+ // Confirm installation transaction succeeded
27
+ const receipt2 = await tx2.wait();
28
+ expect(receipt2.status).toBe(1);
29
+ const space = spaceOwnerSpaceDapp.getSpace(spaceId);
30
+ expect(space).toBeDefined();
31
+ // Sanity check: the spaceDapp reports that the app is installed.
32
+ const installedApps = await space.AppAccount.read.getInstalledApps();
33
+ expect(installedApps).toContain(foundAppAddress);
34
+ // Have space owner add the bot to the space
35
+ await spaceOwner.joinUser(spaceId, bot.userId);
36
+ // Validate the bot is now a member of both space and channel
37
+ const botUserStreamView = bot.stream(bot.userStreamId).view;
38
+ expect(botUserStreamView).toBeDefined();
39
+ await waitFor(() => {
40
+ expect(botUserStreamView.userContent.isMember(spaceId, MembershipOp.SO_JOIN)).toBe(true);
41
+ });
42
+ // Verify that the bot's userInfo includes the appAddress
43
+ const spaceStream = spaceOwner.stream(spaceId);
44
+ await spaceOwner.waitForStream(spaceId);
45
+ expect(spaceStream).toBeDefined();
46
+ const botUserInfo = spaceStream.view.getMemberMetadata().userInfo(bot.userId);
47
+ expect(botUserInfo.appAddress?.toLowerCase()).toBe(foundAppAddress.toLowerCase());
48
+ // Have space owner add the bot to the channel
49
+ await expect(spaceOwner.joinUser(channelId, bot.userId)).resolves.toBeDefined();
50
+ // Validate that the bot is a channel member
51
+ await waitFor(() => {
52
+ expect(botUserStreamView.userContent.isMember(channelId, MembershipOp.SO_JOIN)).toBe(true);
53
+ });
54
+ // Cleanup
55
+ await bot.stopSync();
56
+ await spaceOwner.stopSync();
57
+ });
58
+ test('registered and installed bots can join spaces and channels in towns with gated membership', async () => {
59
+ // Create a town with user entitlements that only allows 'bob' (space owner)
60
+ // The bot is NOT in this list, so it doesn't satisfy the space entitlements.
61
+ // Thus we know the bot is disqualified for regular membership by the gating
62
+ // and can only be admitted to the space via the bot entitlement pathway.
63
+ const { spaceId, channelId: defaultChannelId, bob: spaceOwner, bobProvider: spaceOwnerProvider, bobSpaceDapp: spaceOwnerSpaceDapp, alice: bot, alicesWallet: botWallet, aliceProvider: botProvider, } = await createTownWithRequirements({
64
+ everyone: false,
65
+ users: ['bob'], // No one but the space owner can join this town
66
+ ruleData: NoopRuleData,
67
+ });
68
+ const appRegistryDapp = new AppRegistryDapp(townsEnv().makeBaseChainConfig().chainConfig, spaceOwnerProvider);
69
+ // Create bot app contract
70
+ const tx = await appRegistryDapp.createApp(botProvider.signer, 'bot-restricted-test', [Permission.Read, Permission.Write], botWallet.address, ethers.utils.parseEther('0.01').toBigInt(), 31536000n);
71
+ const receipt = await tx.wait();
72
+ const { app: foundAppAddress } = appRegistryDapp.getCreateAppEvent(receipt, botWallet.address);
73
+ expect(foundAppAddress).toBeDefined();
74
+ // Create bot user streams
75
+ await expect(bot.initializeUser({ appAddress: foundAppAddress })).resolves.toBeDefined();
76
+ bot.startSync();
77
+ // Install the bot to the space (as space owner)
78
+ const installTx = await appRegistryDapp.installApp(spaceOwnerProvider.signer, foundAppAddress, SpaceAddressFromSpaceId(spaceId), ethers.utils.parseEther('0.02').toBigInt());
79
+ const installReceipt = await installTx.wait();
80
+ expect(installReceipt.status).toBe(1);
81
+ // Verify bot is installed
82
+ const space = spaceOwnerSpaceDapp.getSpace(spaceId);
83
+ const installedApps = await space.AppAccount.read.getInstalledApps();
84
+ expect(installedApps).toContain(foundAppAddress);
85
+ // Create a custom channel with user entitlements that disallows all users.
86
+ // The bot naturally doesn't satisfy the channel entitlements.
87
+ const { channelId: restrictedChannelId, error: channelError } = await createChannel(spaceOwnerSpaceDapp, spaceOwnerProvider, spaceId, 'restricted-channel', [], // No role IDs - no users qualify for admission to this channel.
88
+ spaceOwnerProvider.wallet);
89
+ expect(channelError).toBeUndefined();
90
+ expect(restrictedChannelId).toBeDefined();
91
+ const { streamId: returnedChannelId } = await spaceOwner.createChannel(spaceId, 'restricted-channel', '', restrictedChannelId);
92
+ expect(returnedChannelId).toEqual(restrictedChannelId);
93
+ // Verify that the bot does NOT satisfy space entitlements.
94
+ const botEntitledWallet = await spaceOwnerSpaceDapp.getEntitledWalletForJoiningSpace(spaceId, botWallet.address, getXchainConfigForTesting());
95
+ expect(botEntitledWallet).toBeUndefined(); // Bot should NOT be entitled
96
+ // Space owner CAN add bot to space despite bot not satisfying entitlements
97
+ await expect(spaceOwner.joinUser(spaceId, bot.userId)).resolves.toBeDefined();
98
+ // Validate bot is a space member
99
+ const botUserStreamView = bot.stream(bot.userStreamId).view;
100
+ await waitFor(() => {
101
+ expect(botUserStreamView.userContent.isMember(spaceId, MembershipOp.SO_JOIN)).toBe(true);
102
+ });
103
+ // Verify that the bot's userInfo includes the appAddress
104
+ const spaceStream = spaceOwner.stream(spaceId);
105
+ expect(spaceStream).toBeDefined();
106
+ const botUserInfo = spaceStream.view.getMemberMetadata().userInfo(bot.userId);
107
+ expect(botUserInfo.appAddress).toBe(foundAppAddress);
108
+ // Space owner CAN add bot to default channel despite bot not satisfying entitlements
109
+ await expect(spaceOwner.joinUser(defaultChannelId, bot.userId)).resolves.toBeDefined();
110
+ // Validate bot is a default channel member
111
+ await waitFor(() => {
112
+ expect(botUserStreamView.userContent.isMember(defaultChannelId, MembershipOp.SO_JOIN)).toBe(true);
113
+ });
114
+ // Space owner CAN add bot to restricted channel despite bot not satisfying channel entitlements
115
+ await expect(spaceOwner.joinUser(restrictedChannelId, bot.userId)).resolves.toBeDefined();
116
+ // Validate bot is a restricted channel member
117
+ await waitFor(() => {
118
+ expect(botUserStreamView.userContent.isMember(restrictedChannelId, MembershipOp.SO_JOIN)).toBe(true);
119
+ });
120
+ // Cleanup
121
+ await bot.stopSync();
122
+ await spaceOwner.stopSync();
123
+ });
124
+ test('an uninstalled bot cannot join a space or channel', async () => {
125
+ const { aliceProvider: ownerProvider, bob: bot, bobsWallet: botWallet, bobProvider: botProvider, carol: spaceOwner, carolProvider: spaceOwnerProvider, carolSpaceDapp: spaceOwnerSpaceDapp, } = await setupWalletsAndContexts();
126
+ const appRegistryDapp = new AppRegistryDapp(townsEnv().makeBaseChainConfig().chainConfig, ownerProvider);
127
+ // Create bot app contract
128
+ const tx = await appRegistryDapp.createApp(botProvider.signer, 'bob-bot', [Permission.Read, Permission.Write], botWallet.address, ethers.utils.parseEther('0.01').toBigInt(), 31536000n);
129
+ const receipt = await tx.wait();
130
+ const { app: foundAppAddress } = appRegistryDapp.getCreateAppEvent(receipt, botWallet.address);
131
+ expect(foundAppAddress).toBeDefined();
132
+ // Create bot user streams
133
+ await expect(bot.initializeUser({ appAddress: foundAppAddress })).resolves.toBeDefined();
134
+ bot.startSync();
135
+ // Create a town with channels
136
+ const everyoneMembership = await everyoneMembershipStruct(spaceOwnerSpaceDapp, spaceOwner);
137
+ const { spaceId, defaultChannelId: channelId } = await createSpaceAndDefaultChannel(spaceOwner, spaceOwnerSpaceDapp, spaceOwnerProvider.wallet, "space owner's town", everyoneMembership);
138
+ // NOTE: We do NOT install the bot to the space (unlike the previous test)
139
+ // This is the key difference - the bot is registered but not installed
140
+ const space = spaceOwnerSpaceDapp.getSpace(spaceId);
141
+ expect(space).toBeDefined();
142
+ // Sanity check: the spaceDapp reports that the app is NOT installed
143
+ const installedApps = await space.AppAccount.read.getInstalledApps();
144
+ expect(installedApps).not.toContain(foundAppAddress);
145
+ // Space owner tries to add the uninstalled bot to the space - this should fail
146
+ await expect(spaceOwner.joinUser(spaceId, bot.userId)).rejects.toThrow();
147
+ // Space owner tries to add the uninstalled bot to the channel - this should also fail
148
+ await expect(spaceOwner.joinUser(channelId, bot.userId)).rejects.toThrow();
149
+ // Clean up
150
+ await bot.stopSync();
151
+ await spaceOwner.stopSync();
152
+ });
153
+ test('a non-owner member cannot add or remove a bot as a space or channel member', async () => {
154
+ const { alice: nonOwnerMember, aliceProvider: nonOwnerProvider, alicesWallet: nonOwnerWallet, bob: bot, bobsWallet: botWallet, bobProvider: botProvider, carol: spaceOwner, carolProvider: spaceOwnerProvider, carolSpaceDapp: spaceOwnerSpaceDapp, } = await setupWalletsAndContexts();
155
+ const appRegistryDapp = new AppRegistryDapp(townsEnv().makeBaseChainConfig().chainConfig, spaceOwnerProvider);
156
+ // Create bot app contract
157
+ const tx = await appRegistryDapp.createApp(botProvider.signer, 'bob-bot', [Permission.Read, Permission.Write], botWallet.address, ethers.utils.parseEther('0.01').toBigInt(), 31536000n);
158
+ const receipt = await tx.wait();
159
+ const { app: foundAppAddress } = appRegistryDapp.getCreateAppEvent(receipt, botWallet.address);
160
+ expect(foundAppAddress).toBeDefined();
161
+ // Create bot user streams
162
+ await expect(bot.initializeUser({ appAddress: foundAppAddress })).resolves.toBeDefined();
163
+ bot.startSync();
164
+ // Create a town with channels (everyone can join)
165
+ const everyoneMembership = await everyoneMembershipStruct(spaceOwnerSpaceDapp, spaceOwner);
166
+ const { spaceId, defaultChannelId: channelId } = await createSpaceAndDefaultChannel(spaceOwner, spaceOwnerSpaceDapp, spaceOwnerProvider.wallet, "space owner's town", everyoneMembership);
167
+ // Install the bot to the space (as space owner)
168
+ const installTx = await appRegistryDapp.installApp(spaceOwnerProvider.signer, foundAppAddress, SpaceAddressFromSpaceId(spaceId), ethers.utils.parseEther('0.02').toBigInt());
169
+ const installReceipt = await installTx.wait();
170
+ expect(installReceipt.status).toBe(1);
171
+ // Verify bot is installed
172
+ const space = spaceOwnerSpaceDapp.getSpace(spaceId);
173
+ const installedApps = await space.AppAccount.read.getInstalledApps();
174
+ expect(installedApps).toContain(foundAppAddress);
175
+ // Create a spaceDapp for the non-owner member
176
+ const nonOwnerSpaceDapp = spaceOwnerSpaceDapp; // They can use the same spaceDapp instance
177
+ // Have non-owner member join the space and channel
178
+ const { issued } = await nonOwnerSpaceDapp.joinSpace(spaceId, nonOwnerWallet.address, nonOwnerProvider.wallet);
179
+ expect(issued).toBe(true);
180
+ await nonOwnerMember.initializeUser({ spaceId });
181
+ nonOwnerMember.startSync();
182
+ await expect(nonOwnerMember.joinStream(spaceId)).resolves.not.toThrow();
183
+ await expect(nonOwnerMember.joinStream(channelId)).resolves.not.toThrow();
184
+ // First test that non-owner member CANNOT add bot to space (even though bot is installed)
185
+ await expect(nonOwnerMember.joinUser(spaceId, bot.userId)).rejects.toThrow(/PERMISSION_DENIED/);
186
+ // Validate that bot is NOT a space member yet
187
+ const botUserStreamView = bot.stream(bot.userStreamId).view;
188
+ expect(botUserStreamView.userContent.isMember(spaceId, MembershipOp.SO_JOIN)).toBe(false);
189
+ // Have space owner add bot to space (so we can test channel membership)
190
+ await expect(spaceOwner.joinUser(spaceId, bot.userId)).resolves.toBeDefined();
191
+ // Validate bot is now a space member
192
+ await waitFor(() => {
193
+ expect(botUserStreamView.userContent.isMember(spaceId, MembershipOp.SO_JOIN)).toBe(true);
194
+ });
195
+ // Now test that non-owner member CANNOT add bot to channel (even though bot is installed and space member)
196
+ await expect(nonOwnerMember.joinUser(channelId, bot.userId)).rejects.toThrow(/PERMISSION_DENIED/);
197
+ // Validate that bot is still NOT a channel member
198
+ expect(botUserStreamView.userContent.isMember(channelId, MembershipOp.SO_JOIN)).toBe(false);
199
+ // Also test that non-owner member cannot remove bot from space
200
+ await expect(nonOwnerMember.removeUser(spaceId, bot.userId)).rejects.toThrow(/PERMISSION_DENIED/);
201
+ // Validate bot is still a space member
202
+ expect(botUserStreamView.userContent.isMember(spaceId, MembershipOp.SO_JOIN)).toBe(true);
203
+ // Now, let's confirm the non-owner member cannot boot the bot from the channel.
204
+ // Have space owner add bot to channel
205
+ await expect(spaceOwner.joinUser(channelId, bot.userId)).resolves.toBeDefined();
206
+ // Validate bot is now a channel member
207
+ await waitFor(() => {
208
+ expect(botUserStreamView.userContent.isMember(channelId, MembershipOp.SO_JOIN)).toBe(true);
209
+ });
210
+ // Test that non-owner member CANNOT remove bot from channel
211
+ await expect(nonOwnerMember.removeUser(channelId, bot.userId)).rejects.toThrow(/PERMISSION_DENIED/);
212
+ // Validate bot is still a channel member
213
+ expect(botUserStreamView.userContent.isMember(channelId, MembershipOp.SO_JOIN)).toBe(true);
214
+ // Cleanup
215
+ await bot.stopSync();
216
+ await spaceOwner.stopSync();
217
+ await nonOwnerMember.stopSync();
218
+ });
219
+ test('the bot itself cannot add itself to the space or to channels', async () => {
220
+ const { bob: bot, bobsWallet: botWallet, bobProvider: botProvider, carol: spaceOwner, carolProvider: spaceOwnerProvider, carolSpaceDapp: spaceOwnerSpaceDapp, } = await setupWalletsAndContexts();
221
+ const appRegistryDapp = new AppRegistryDapp(townsEnv().makeBaseChainConfig().chainConfig, spaceOwnerProvider);
222
+ // Create bot app contract
223
+ const tx = await appRegistryDapp.createApp(botProvider.signer, 'self-join-test-bot', [Permission.Read, Permission.Write], botWallet.address, ethers.utils.parseEther('0.01').toBigInt(), 31536000n);
224
+ const receipt = await tx.wait();
225
+ const { app: foundAppAddress } = appRegistryDapp.getCreateAppEvent(receipt, botWallet.address);
226
+ expect(foundAppAddress).toBeDefined();
227
+ // Create bot user streams
228
+ await expect(bot.initializeUser({ appAddress: foundAppAddress })).resolves.toBeDefined();
229
+ bot.startSync();
230
+ // Create a town with channels (everyone can join)
231
+ const everyoneMembership = await everyoneMembershipStruct(spaceOwnerSpaceDapp, spaceOwner);
232
+ const { spaceId, defaultChannelId: channelId } = await createSpaceAndDefaultChannel(spaceOwner, spaceOwnerSpaceDapp, spaceOwnerProvider.wallet, "space owner's town", everyoneMembership);
233
+ // Install the bot to the space (as space owner)
234
+ const installTx = await appRegistryDapp.installApp(spaceOwnerProvider.signer, foundAppAddress, SpaceAddressFromSpaceId(spaceId), ethers.utils.parseEther('0.02').toBigInt());
235
+ const installReceipt = await installTx.wait();
236
+ expect(installReceipt.status).toBe(1);
237
+ // Verify bot is installed
238
+ const space = spaceOwnerSpaceDapp.getSpace(spaceId);
239
+ const installedApps = await space.AppAccount.read.getInstalledApps();
240
+ expect(installedApps).toContain(foundAppAddress);
241
+ // Test that bot CANNOT add itself to space (even though bot is installed)
242
+ await expect(bot.joinUser(spaceId, bot.userId)).rejects.toThrow(/PERMISSION_DENIED/);
243
+ // Validate that bot is NOT a space member
244
+ const botUserStreamView = bot.stream(bot.userStreamId).view;
245
+ expect(botUserStreamView.userContent.isMember(spaceId, MembershipOp.SO_JOIN)).toBe(false);
246
+ // Have space owner add bot to space (so we can test channel self-join)
247
+ await expect(spaceOwner.joinUser(spaceId, bot.userId)).resolves.toBeDefined();
248
+ // Validate bot is now a space member
249
+ await waitFor(() => {
250
+ expect(botUserStreamView.userContent.isMember(spaceId, MembershipOp.SO_JOIN)).toBe(true);
251
+ });
252
+ // Test that bot CANNOT add itself to channel (even though bot is installed and space member)
253
+ await expect(bot.joinUser(channelId, bot.userId)).rejects.toThrow(/PERMISSION_DENIED/);
254
+ // Validate that bot is still NOT a channel member
255
+ expect(botUserStreamView.userContent.isMember(channelId, MembershipOp.SO_JOIN)).toBe(false);
256
+ // Also test that bot cannot remove itself from space
257
+ await expect(bot.removeUser(spaceId, bot.userId)).rejects.toThrow(/PERMISSION_DENIED/);
258
+ // Validate bot is still a space member
259
+ expect(botUserStreamView.userContent.isMember(spaceId, MembershipOp.SO_JOIN)).toBe(true);
260
+ // Have space owner add bot to channel (so we can test channel self-removal)
261
+ await expect(spaceOwner.joinUser(channelId, bot.userId)).resolves.toBeDefined();
262
+ // Validate bot is now a channel member
263
+ await waitFor(() => {
264
+ expect(botUserStreamView.userContent.isMember(channelId, MembershipOp.SO_JOIN)).toBe(true);
265
+ });
266
+ // Test that bot CANNOT remove itself from channel
267
+ await expect(bot.removeUser(channelId, bot.userId)).rejects.toThrow(/PERMISSION_DENIED/);
268
+ // Validate bot is still a channel member
269
+ expect(botUserStreamView.userContent.isMember(channelId, MembershipOp.SO_JOIN)).toBe(true);
270
+ // Cleanup
271
+ await bot.stopSync();
272
+ await spaceOwner.stopSync();
273
+ });
274
+ // skipped because nothing is preventing you from creating dms or gdms with bots
275
+ test.skip('bots cannot be added to DMs or GDMs', async () => {
276
+ const { alice, aliceProvider, // owner
277
+ aliceSpaceDapp, bob: bot, bobsWallet: botWallet, bobProvider: botProvider, carol, carolSpaceDapp, carolProvider, } = await setupWalletsAndContexts();
278
+ const appRegistryDapp = new AppRegistryDapp(townsEnv().makeBaseChainConfig().chainConfig, aliceProvider);
279
+ const tx = await appRegistryDapp.createApp(botProvider.signer, 'bob-bot', [Permission.Read, Permission.Write], botWallet.address, ethers.utils.parseEther('0.01').toBigInt(), 31536000n);
280
+ const receipt = await tx.wait();
281
+ const { app: foundAppAddress } = appRegistryDapp.getCreateAppEvent(receipt, botWallet.address);
282
+ expect(foundAppAddress).toBeDefined();
283
+ const everyoneMembership = await everyoneMembershipStruct(carolSpaceDapp, carol);
284
+ const { spaceId } = await createSpaceAndDefaultChannel(carol, carolSpaceDapp, carolProvider.wallet, "space owner's town", everyoneMembership);
285
+ await aliceSpaceDapp.joinSpace(spaceId, alice.userId, aliceProvider.wallet);
286
+ await expect(bot.initializeUser({ appAddress: foundAppAddress })).resolves.toBeDefined();
287
+ await expect(alice.initializeUser({ spaceId })).resolves.toBeDefined();
288
+ // GDMs with bot creators are disallowed.
289
+ // (carol and dave don't have user streams yet)
290
+ await expect(carol.createGDMChannel([bot.userId, alice.userId])).rejects.toThrow(/PERMISSION_DENIED/);
291
+ // DMs with bot creators are disallowed.
292
+ await expect(carol.createDMChannel(bot.userId)).rejects.toThrow(/PERMISSION_DENIED/);
293
+ });
294
+ });
295
+ //# sourceMappingURL=botMembership.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"botMembership.test.js","sourceRoot":"","sources":["../../../src/tests/multi/botMembership.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @group with-entitlements
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=botStreamCreation.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"botStreamCreation.test.d.ts","sourceRoot":"","sources":["../../../src/tests/multi/botStreamCreation.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * @group with-entitlements
3
+ */
4
+ import { AppRegistryDapp, Permission, SpaceAddressFromSpaceId } from '@towns-protocol/web3';
5
+ import { createSpaceAndDefaultChannel, everyoneMembershipStruct, setupWalletsAndContexts, expectUserCanJoin, } from '../testUtils';
6
+ import { townsEnv } from '../../townsEnv';
7
+ import { makeDefaultChannelStreamId } from '../../id';
8
+ import { ethers } from 'ethers';
9
+ describe('bot stream creation tests', () => {
10
+ test('registered bots can only create app user streams with their registered app address', async () => {
11
+ const { aliceProvider: ownerProvider, bob: bot1, bobsWallet: bot1Wallet, bobProvider: bot1Provider, carol: bot2, carolsWallet: bot2Wallet, carolProvider: bot2Provider, } = await setupWalletsAndContexts();
12
+ const appRegistryDapp = new AppRegistryDapp(townsEnv().makeBaseChainConfig().chainConfig, ownerProvider);
13
+ // Create first bot app contract
14
+ const tx1 = await appRegistryDapp.createApp(bot1Provider.signer, 'bot1-app', [Permission.Read, Permission.Write], bot1Wallet.address, ethers.utils.parseEther('0.01').toBigInt(), 31536000n);
15
+ const receipt1 = await tx1.wait();
16
+ const { app: bot1AppAddress } = appRegistryDapp.getCreateAppEvent(receipt1, bot1Wallet.address);
17
+ expect(bot1AppAddress).toBeDefined();
18
+ // Create second bot app contract
19
+ const tx2 = await appRegistryDapp.createApp(bot2Provider.signer, 'bot2-app', [Permission.Read, Permission.Write], bot2Wallet.address, ethers.utils.parseEther('0.01').toBigInt(), 31536000n);
20
+ const receipt2 = await tx2.wait();
21
+ const { app: bot2AppAddress } = appRegistryDapp.getCreateAppEvent(receipt2, bot2Wallet.address);
22
+ expect(bot2AppAddress).toBeDefined();
23
+ // Attempt to create user streams for bot1 using bot2's app address (should fail)
24
+ await expect(bot1.initializeUser({ appAddress: bot2AppAddress })).rejects.toThrow(/7:PERMISSION_DENIED/);
25
+ // Create user streams for bot2 using its own app address (should succeed)
26
+ expect(await bot2.initializeUser({ appAddress: bot2AppAddress })).toBeDefined();
27
+ });
28
+ test('unregistered bots cannot create app user streams', async () => {
29
+ const { alicesWallet: wallet, bob: bot } = await setupWalletsAndContexts();
30
+ // Let's use the public key of the wallet as the bot's contract address for
31
+ // convenience here.
32
+ await expect(bot.initializeUser({ appAddress: wallet.address })).rejects.toThrow(/7:PERMISSION_DENIED/);
33
+ });
34
+ // TODO: re-enable this test when the app registry contract is validated and deployed to all
35
+ // environments.
36
+ test.skip('bots cannot create dms or gdms', async () => {
37
+ // DMs and GDMs are created by the bot posting messages to it's own user stream. This message type
38
+ // should be rejected as unpermitted for bots.
39
+ const { aliceProvider, alicesWallet, alice, aliceSpaceDapp, bob: bot, bobsWallet: botWallet, bobProvider: botProvider, carol, carolProvider, carolSpaceDapp, } = await setupWalletsAndContexts();
40
+ const appRegistryDapp = new AppRegistryDapp(townsEnv().makeBaseChainConfig().chainConfig, botProvider);
41
+ const tx = await appRegistryDapp.createApp(botProvider.signer, 'bob-bot', [Permission.Read, Permission.Write], botWallet.address, ethers.utils.parseEther('0.01').toBigInt(), 31536000n);
42
+ const receipt = await tx.wait();
43
+ const { app: foundAppAddress } = appRegistryDapp.getCreateAppEvent(receipt, botWallet.address);
44
+ expect(foundAppAddress).toBeDefined();
45
+ expect(await bot.initializeUser({ appAddress: foundAppAddress })).toBeDefined();
46
+ // Have Carol create a space on the spaceDapp
47
+ const everyoneMembership = await everyoneMembershipStruct(carolSpaceDapp, carol);
48
+ const { spaceId } = await createSpaceAndDefaultChannel(carol, carolSpaceDapp, carolProvider.wallet, "carol's space", everyoneMembership);
49
+ // Add Dave as a member to Carol's space
50
+ await expectUserCanJoin(spaceId, makeDefaultChannelStreamId(SpaceAddressFromSpaceId(spaceId)), 'alice', alice, aliceSpaceDapp, alicesWallet.address, aliceProvider.wallet);
51
+ // GDMs with bot creators are disallowed.
52
+ await expect(bot.createGDMChannel([carol.userId, alice.userId])).rejects.toThrow(/PERMISSION_DENIED/);
53
+ // DMs with bot creators are disallowed.
54
+ await expect(bot.createDMChannel(alice.userId)).rejects.toThrow(/PERMISSION_DENIED/);
55
+ // Cleanup
56
+ await carol.stopSync();
57
+ await alice.stopSync();
58
+ });
59
+ });
60
+ //# sourceMappingURL=botStreamCreation.test.js.map