@towns-labs/sdk 2.0.11 → 2.0.13
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.
- package/dist/client.d.ts +13 -31
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +113 -328
- package/dist/client.js.map +1 -1
- package/dist/clientDecryptionExtensions.d.ts.map +1 -1
- package/dist/clientDecryptionExtensions.js +10 -28
- package/dist/clientDecryptionExtensions.js.map +1 -1
- package/dist/createApp.d.ts +1 -1
- package/dist/createApp.d.ts.map +1 -1
- package/dist/createApp.js +6 -2
- package/dist/createApp.js.map +1 -1
- package/dist/id.d.ts +1 -17
- package/dist/id.d.ts.map +1 -1
- package/dist/id.js +1 -53
- package/dist/id.js.map +1 -1
- package/dist/index.d.ts +0 -22
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -22
- package/dist/index.js.map +1 -1
- package/dist/migrations/snapshotMigration0001.d.ts.map +1 -1
- package/dist/migrations/snapshotMigration0001.js +0 -4
- package/dist/migrations/snapshotMigration0001.js.map +1 -1
- package/dist/migrations/snapshotMigration0002.d.ts.map +1 -1
- package/dist/migrations/snapshotMigration0002.js +1 -19
- package/dist/migrations/snapshotMigration0002.js.map +1 -1
- package/dist/migrations/snapshotMigration0004.d.ts.map +1 -1
- package/dist/migrations/snapshotMigration0004.js +1 -27
- package/dist/migrations/snapshotMigration0004.js.map +1 -1
- package/dist/migrations/snapshotMigration0005.d.ts.map +1 -1
- package/dist/migrations/snapshotMigration0005.js +1 -26
- package/dist/migrations/snapshotMigration0005.js.map +1 -1
- package/dist/notificationsClient.d.ts +1 -5
- package/dist/notificationsClient.d.ts.map +1 -1
- package/dist/notificationsClient.js +2 -103
- package/dist/notificationsClient.js.map +1 -1
- package/dist/persistenceStore.d.ts.map +1 -1
- package/dist/persistenceStore.js +6 -18
- package/dist/persistenceStore.js.map +1 -1
- package/dist/streamEvents.d.ts +0 -6
- package/dist/streamEvents.d.ts.map +1 -1
- package/dist/streamStateView.d.ts +0 -9
- package/dist/streamStateView.d.ts.map +1 -1
- package/dist/streamStateView.js +3 -64
- package/dist/streamStateView.js.map +1 -1
- package/dist/streamStateView_MemberMetadata.d.ts +3 -36
- package/dist/streamStateView_MemberMetadata.d.ts.map +1 -1
- package/dist/streamStateView_MemberMetadata.js +3 -83
- package/dist/streamStateView_MemberMetadata.js.map +1 -1
- package/dist/streamStateView_Members.d.ts +1 -5
- package/dist/streamStateView_Members.d.ts.map +1 -1
- package/dist/streamStateView_Members.js +4 -91
- package/dist/streamStateView_Members.js.map +1 -1
- package/dist/streamStateView_User.d.ts.map +1 -1
- package/dist/streamStateView_User.js +1 -0
- package/dist/streamStateView_User.js.map +1 -1
- package/dist/streamStateView_UserInbox.d.ts.map +1 -1
- package/dist/streamStateView_UserInbox.js +1 -0
- package/dist/streamStateView_UserInbox.js.map +1 -1
- package/dist/streamStateView_UserMetadata.d.ts.map +1 -1
- package/dist/streamStateView_UserMetadata.js +1 -0
- package/dist/streamStateView_UserMetadata.js.map +1 -1
- package/dist/streamStateView_UserSettings.d.ts.map +1 -1
- package/dist/streamStateView_UserSettings.js +9 -1
- package/dist/streamStateView_UserSettings.js.map +1 -1
- package/dist/streamUtils.d.ts.map +1 -1
- package/dist/streamUtils.js +0 -8
- package/dist/streamUtils.js.map +1 -1
- package/dist/sync/SyncedStreamsControllerLite.d.ts.map +1 -1
- package/dist/sync/SyncedStreamsControllerLite.js +7 -11
- package/dist/sync/SyncedStreamsControllerLite.js.map +1 -1
- package/dist/sync-agent/db.d.ts +1 -6
- package/dist/sync-agent/db.d.ts.map +1 -1
- package/dist/sync-agent/db.js +0 -10
- package/dist/sync-agent/db.js.map +1 -1
- package/dist/sync-agent/gdms/gdms.d.ts +5 -6
- package/dist/sync-agent/gdms/gdms.d.ts.map +1 -1
- package/dist/sync-agent/gdms/gdms.js +12 -27
- package/dist/sync-agent/gdms/gdms.js.map +1 -1
- package/dist/sync-agent/gdms/models/gdm.d.ts +10 -8
- package/dist/sync-agent/gdms/models/gdm.d.ts.map +1 -1
- package/dist/sync-agent/gdms/models/gdm.js +29 -34
- package/dist/sync-agent/gdms/models/gdm.js.map +1 -1
- package/dist/sync-agent/members/members.d.ts +6 -18
- package/dist/sync-agent/members/members.d.ts.map +1 -1
- package/dist/sync-agent/members/members.js +25 -124
- package/dist/sync-agent/members/members.js.map +1 -1
- package/dist/sync-agent/members/models/member.d.ts +3 -45
- package/dist/sync-agent/members/models/member.d.ts.map +1 -1
- package/dist/sync-agent/members/models/member.js +15 -114
- package/dist/sync-agent/members/models/member.js.map +1 -1
- package/dist/sync-agent/members/models/myself.d.ts +1 -11
- package/dist/sync-agent/members/models/myself.d.ts.map +1 -1
- package/dist/sync-agent/members/models/myself.js +1 -84
- package/dist/sync-agent/members/models/myself.js.map +1 -1
- package/dist/sync-agent/river-connection/riverConnection.d.ts +6 -17
- package/dist/sync-agent/river-connection/riverConnection.d.ts.map +1 -1
- package/dist/sync-agent/river-connection/riverConnection.js +30 -37
- package/dist/sync-agent/river-connection/riverConnection.js.map +1 -1
- package/dist/sync-agent/syncAgent.d.ts +11 -22
- package/dist/sync-agent/syncAgent.d.ts.map +1 -1
- package/dist/sync-agent/syncAgent.js +3 -20
- package/dist/sync-agent/syncAgent.js.map +1 -1
- package/dist/sync-agent/user/models/userInbox.d.ts +4 -17
- package/dist/sync-agent/user/models/userInbox.d.ts.map +1 -1
- package/dist/sync-agent/user/models/userInbox.js +14 -61
- package/dist/sync-agent/user/models/userInbox.js.map +1 -1
- package/dist/sync-agent/user/models/userMemberships.d.ts +6 -22
- package/dist/sync-agent/user/models/userMemberships.d.ts.map +1 -1
- package/dist/sync-agent/user/models/userMemberships.js +16 -68
- package/dist/sync-agent/user/models/userMemberships.js.map +1 -1
- package/dist/sync-agent/user/models/userMetadata.d.ts +4 -17
- package/dist/sync-agent/user/models/userMetadata.d.ts.map +1 -1
- package/dist/sync-agent/user/models/userMetadata.js +14 -61
- package/dist/sync-agent/user/models/userMetadata.js.map +1 -1
- package/dist/sync-agent/user/models/userSettings.d.ts +5 -8
- package/dist/sync-agent/user/models/userSettings.d.ts.map +1 -1
- package/dist/sync-agent/user/models/userSettings.js +15 -42
- package/dist/sync-agent/user/models/userSettings.js.map +1 -1
- package/dist/sync-agent/user/user.d.ts +2 -6
- package/dist/sync-agent/user/user.d.ts.map +1 -1
- package/dist/sync-agent/user/user.js +9 -20
- package/dist/sync-agent/user/user.js.map +1 -1
- package/dist/syncedStreamsExtension.d.ts.map +1 -1
- package/dist/syncedStreamsExtension.js +10 -22
- package/dist/syncedStreamsExtension.js.map +1 -1
- package/dist/syncedStreamsLoop.d.ts.map +1 -1
- package/dist/syncedStreamsLoop.js +4 -18
- package/dist/syncedStreamsLoop.js.map +1 -1
- package/dist/tests/bob_testUtils.d.ts.map +1 -1
- package/dist/tests/bob_testUtils.js +35 -69
- package/dist/tests/bob_testUtils.js.map +1 -1
- package/dist/tests/multi_ne/aliceAndFriends10for10.test.js +1 -1
- package/dist/tests/multi_ne/aliceAndFriends10for10.test.js.map +1 -1
- package/dist/tests/multi_ne/aliceAndFriendslongAndRandom.test.js +1 -1
- package/dist/tests/multi_ne/aliceAndFriendslongAndRandom.test.js.map +1 -1
- package/dist/tests/multi_ne/bobFlushes.test.js.map +1 -1
- package/dist/tests/multi_ne/channels.test.js +6 -9
- package/dist/tests/multi_ne/channels.test.js.map +1 -1
- package/dist/tests/multi_ne/client.test.js +24 -98
- package/dist/tests/multi_ne/client.test.js.map +1 -1
- package/dist/tests/multi_ne/clientCrypto.test.js +3 -3
- package/dist/tests/multi_ne/clientCrypto.test.js.map +1 -1
- package/dist/tests/multi_ne/clientDecryptionExtensions.test.js +12 -47
- package/dist/tests/multi_ne/clientDecryptionExtensions.test.js.map +1 -1
- package/dist/tests/multi_ne/ephemeralEvents.test.js +1 -1
- package/dist/tests/multi_ne/ephemeralEvents.test.js.map +1 -1
- package/dist/tests/multi_ne/id.test.js +6 -20
- package/dist/tests/multi_ne/id.test.js.map +1 -1
- package/dist/tests/multi_ne/media.test.js +20 -61
- package/dist/tests/multi_ne/media.test.js.map +1 -1
- package/dist/tests/multi_ne/memberMetadata.test.d.ts +0 -3
- package/dist/tests/multi_ne/memberMetadata.test.d.ts.map +1 -1
- package/dist/tests/multi_ne/memberMetadata.test.js +14 -582
- package/dist/tests/multi_ne/memberMetadata.test.js.map +1 -1
- package/dist/tests/multi_ne/outboundGroupSession.test.js +15 -13
- package/dist/tests/multi_ne/outboundGroupSession.test.js.map +1 -1
- package/dist/tests/multi_ne/restart.test.js +11 -34
- package/dist/tests/multi_ne/restart.test.js.map +1 -1
- package/dist/tests/multi_ne/sign.test.js +2 -2
- package/dist/tests/multi_ne/sign.test.js.map +1 -1
- package/dist/tests/multi_ne/streamMembershipHardening.test.js +0 -3
- package/dist/tests/multi_ne/streamMembershipHardening.test.js.map +1 -1
- package/dist/tests/multi_ne/streamRpcClient.test.js +58 -349
- package/dist/tests/multi_ne/streamRpcClient.test.js.map +1 -1
- package/dist/tests/multi_ne/streamRpcClientSync.test.js +63 -124
- package/dist/tests/multi_ne/streamRpcClientSync.test.js.map +1 -1
- package/dist/tests/multi_ne/streamStateView_User.test.js +23 -20
- package/dist/tests/multi_ne/streamStateView_User.test.js.map +1 -1
- package/dist/tests/{multi/spaceDapp.test.d.ts → multi_ne/sync-agent/gdms.test.d.ts} +1 -1
- package/dist/tests/multi_ne/sync-agent/gdms.test.d.ts.map +1 -0
- package/dist/tests/multi_ne/sync-agent/gdms.test.js +34 -0
- package/dist/tests/multi_ne/sync-agent/gdms.test.js.map +1 -0
- package/dist/tests/{multi/legacySpace.test.d.ts → multi_ne/sync-agent/member.test.d.ts} +1 -1
- package/dist/tests/multi_ne/sync-agent/member.test.d.ts.map +1 -0
- package/dist/tests/multi_ne/sync-agent/member.test.js +31 -0
- package/dist/tests/multi_ne/sync-agent/member.test.js.map +1 -0
- package/dist/tests/{multi/disableSpace.test.d.ts → multi_ne/sync-agent/members.test.d.ts} +1 -1
- package/dist/tests/multi_ne/sync-agent/members.test.d.ts.map +1 -0
- package/dist/tests/multi_ne/sync-agent/members.test.js +40 -0
- package/dist/tests/multi_ne/sync-agent/members.test.js.map +1 -0
- package/dist/tests/multi_ne/sync-agent/riverConnection.test.d.ts +5 -0
- package/dist/tests/multi_ne/sync-agent/riverConnection.test.d.ts.map +1 -0
- package/dist/tests/multi_ne/sync-agent/riverConnection.test.js +39 -0
- package/dist/tests/multi_ne/sync-agent/riverConnection.test.js.map +1 -0
- package/dist/tests/multi_ne/sync-agent/streams.test.d.ts +5 -0
- package/dist/tests/multi_ne/sync-agent/streams.test.d.ts.map +1 -0
- package/dist/tests/multi_ne/sync-agent/streams.test.js +27 -0
- package/dist/tests/multi_ne/sync-agent/streams.test.js.map +1 -0
- package/dist/tests/multi_ne/sync-agent/syncAgent.test.d.ts +5 -0
- package/dist/tests/multi_ne/sync-agent/syncAgent.test.d.ts.map +1 -0
- package/dist/tests/multi_ne/sync-agent/syncAgent.test.js +66 -0
- package/dist/tests/multi_ne/sync-agent/syncAgent.test.js.map +1 -0
- package/dist/tests/multi_ne/sync-agent/syncAgents.test.d.ts +5 -0
- package/dist/tests/multi_ne/sync-agent/syncAgents.test.d.ts.map +1 -0
- package/dist/tests/multi_ne/sync-agent/syncAgents.test.js +117 -0
- package/dist/tests/multi_ne/sync-agent/syncAgents.test.js.map +1 -0
- package/dist/tests/multi_ne/sync-agent/timeline.test.d.ts +2 -0
- package/dist/tests/multi_ne/sync-agent/timeline.test.d.ts.map +1 -0
- package/dist/tests/multi_ne/sync-agent/timeline.test.js +155 -0
- package/dist/tests/multi_ne/sync-agent/timeline.test.js.map +1 -0
- package/dist/tests/multi_ne/sync-agent/user.test.d.ts +5 -0
- package/dist/tests/multi_ne/sync-agent/user.test.d.ts.map +1 -0
- package/dist/tests/multi_ne/sync-agent/user.test.js +53 -0
- package/dist/tests/multi_ne/sync-agent/user.test.js.map +1 -0
- package/dist/tests/multi_ne/syncWithBlocks.test.d.ts +3 -0
- package/dist/tests/multi_ne/syncWithBlocks.test.d.ts.map +1 -1
- package/dist/tests/multi_ne/syncWithBlocks.test.js +47 -77
- package/dist/tests/multi_ne/syncWithBlocks.test.js.map +1 -1
- package/dist/tests/multi_ne/syncedStream.test.js +1 -1
- package/dist/tests/multi_ne/syncedStream.test.js.map +1 -1
- package/dist/tests/multi_ne/syncedStreams.test.js +1 -1
- package/dist/tests/multi_ne/syncedStreams.test.js.map +1 -1
- package/dist/tests/multi_ne/userInboxMessage.test.js +4 -4
- package/dist/tests/multi_ne/userInboxMessage.test.js.map +1 -1
- package/dist/tests/multi_ne/userSettings.test.js +3 -16
- package/dist/tests/multi_ne/userSettings.test.js.map +1 -1
- package/dist/tests/multi_ne/workflows.test.js +22 -50
- package/dist/tests/multi_ne/workflows.test.js.map +1 -1
- package/dist/tests/testDriver_testUtils.d.ts.map +1 -1
- package/dist/tests/testDriver_testUtils.js +6 -22
- package/dist/tests/testDriver_testUtils.js.map +1 -1
- package/dist/tests/testUtils.d.ts +3 -104
- package/dist/tests/testUtils.d.ts.map +1 -1
- package/dist/tests/testUtils.js +6 -625
- package/dist/tests/testUtils.js.map +1 -1
- package/dist/tests/unit/snapshotMigration0001.test.js +4 -20
- package/dist/tests/unit/snapshotMigration0001.test.js.map +1 -1
- package/dist/tests/unit/snapshotMigration0004.test.js +5 -43
- package/dist/tests/unit/snapshotMigration0004.test.js.map +1 -1
- package/dist/tests/unit/snapshotMigration0005.test.js +5 -43
- package/dist/tests/unit/snapshotMigration0005.test.js.map +1 -1
- package/dist/tests/unit/streamUtils.test.js +21 -22
- package/dist/tests/unit/streamUtils.test.js.map +1 -1
- package/dist/tests/unit/tags.test.js +5 -7
- package/dist/tests/unit/tags.test.js.map +1 -1
- package/dist/types.d.ts +1 -21
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -231
- package/dist/types.js.map +1 -1
- package/dist/views/models/timelineEvent.d.ts.map +1 -1
- package/dist/views/models/timelineEvent.js +132 -157
- package/dist/views/models/timelineEvent.js.map +1 -1
- package/dist/views/models/timelineTypes.d.ts +51 -30
- package/dist/views/models/timelineTypes.d.ts.map +1 -1
- package/dist/views/models/timelineTypes.js +3 -4
- package/dist/views/models/timelineTypes.js.map +1 -1
- package/dist/views/streams/timelines.d.ts +1 -1
- package/dist/views/streams/timelines.d.ts.map +1 -1
- package/dist/views/streams/timelines.js +3 -3
- package/dist/views/streams/timelines.js.map +1 -1
- package/dist/views/streams/userInboxStreams.d.ts +3 -0
- package/dist/views/streams/userInboxStreams.d.ts.map +1 -1
- package/dist/views/streams/userInboxStreams.js +15 -4
- package/dist/views/streams/userInboxStreams.js.map +1 -1
- package/dist/views/streams/userMetadataStreams.d.ts +3 -0
- package/dist/views/streams/userMetadataStreams.d.ts.map +1 -1
- package/dist/views/streams/userMetadataStreams.js +15 -4
- package/dist/views/streams/userMetadataStreams.js.map +1 -1
- package/dist/views/streams/userSettingsStreams.d.ts +3 -0
- package/dist/views/streams/userSettingsStreams.d.ts.map +1 -1
- package/dist/views/streams/userSettingsStreams.js +17 -6
- package/dist/views/streams/userSettingsStreams.js.map +1 -1
- package/dist/views/streams/userStreamsView.d.ts +3 -0
- package/dist/views/streams/userStreamsView.d.ts.map +1 -1
- package/dist/views/streams/userStreamsView.js +21 -10
- package/dist/views/streams/userStreamsView.js.map +1 -1
- package/dist/views/streamsView.d.ts +0 -6
- package/dist/views/streamsView.d.ts.map +1 -1
- package/dist/views/streamsView.js +0 -11
- package/dist/views/streamsView.js.map +1 -1
- package/dist/views/transforms/dmsAndGdmsTransform.d.ts +0 -2
- package/dist/views/transforms/dmsAndGdmsTransform.d.ts.map +1 -1
- package/dist/views/transforms/dmsAndGdmsTransform.js +1 -26
- package/dist/views/transforms/dmsAndGdmsTransform.js.map +1 -1
- package/dist/views/transforms/dmsAndGdmsUnreadIdsTransform.d.ts +1 -2
- package/dist/views/transforms/dmsAndGdmsUnreadIdsTransform.d.ts.map +1 -1
- package/dist/views/transforms/dmsAndGdmsUnreadIdsTransform.js +2 -5
- package/dist/views/transforms/dmsAndGdmsUnreadIdsTransform.js.map +1 -1
- package/dist/views/transforms/spaceIdsTransform.d.ts +1 -1
- package/dist/views/transforms/spaceIdsTransform.d.ts.map +1 -1
- package/dist/views/transforms/spaceIdsTransform.js +3 -10
- package/dist/views/transforms/spaceIdsTransform.js.map +1 -1
- package/dist/views/transforms/spaceMentionsTransform.d.ts.map +1 -1
- package/dist/views/transforms/spaceMentionsTransform.js +13 -14
- package/dist/views/transforms/spaceMentionsTransform.js.map +1 -1
- package/dist/views/transforms/spaceUnreadsTransform.d.ts.map +1 -1
- package/dist/views/transforms/spaceUnreadsTransform.js +21 -22
- package/dist/views/transforms/spaceUnreadsTransform.js.map +1 -1
- package/dist/views/transforms/unreadMarkersTransform.js +2 -4
- package/dist/views/transforms/unreadMarkersTransform.js.map +1 -1
- package/package.json +10 -9
- package/dist/memberMetadata_DisplayNames.d.ts +0 -26
- package/dist/memberMetadata_DisplayNames.d.ts.map +0 -1
- package/dist/memberMetadata_DisplayNames.js +0 -95
- package/dist/memberMetadata_DisplayNames.js.map +0 -1
- package/dist/memberMetadata_EnsAddresses.d.ts +0 -25
- package/dist/memberMetadata_EnsAddresses.d.ts.map +0 -1
- package/dist/memberMetadata_EnsAddresses.js +0 -86
- package/dist/memberMetadata_EnsAddresses.js.map +0 -1
- package/dist/memberMetadata_Nft.d.ts +0 -31
- package/dist/memberMetadata_Nft.d.ts.map +0 -1
- package/dist/memberMetadata_Nft.js +0 -95
- package/dist/memberMetadata_Nft.js.map +0 -1
- package/dist/memberMetadata_Usernames.d.ts +0 -35
- package/dist/memberMetadata_Usernames.d.ts.map +0 -1
- package/dist/memberMetadata_Usernames.js +0 -162
- package/dist/memberMetadata_Usernames.js.map +0 -1
- package/dist/streamStateView_Channel.d.ts +0 -16
- package/dist/streamStateView_Channel.d.ts.map +0 -1
- package/dist/streamStateView_Channel.js +0 -76
- package/dist/streamStateView_Channel.js.map +0 -1
- package/dist/streamStateView_DMChannel.d.ts +0 -25
- package/dist/streamStateView_DMChannel.d.ts.map +0 -1
- package/dist/streamStateView_DMChannel.js +0 -114
- package/dist/streamStateView_DMChannel.js.map +0 -1
- package/dist/streamStateView_Space.d.ts +0 -31
- package/dist/streamStateView_Space.d.ts.map +0 -1
- package/dist/streamStateView_Space.js +0 -193
- package/dist/streamStateView_Space.js.map +0 -1
- package/dist/sync-agent/dms/dms.d.ts +0 -24
- package/dist/sync-agent/dms/dms.d.ts.map +0 -1
- package/dist/sync-agent/dms/dms.js +0 -60
- package/dist/sync-agent/dms/dms.js.map +0 -1
- package/dist/sync-agent/dms/models/dm.d.ts +0 -74
- package/dist/sync-agent/dms/models/dm.d.ts.map +0 -1
- package/dist/sync-agent/dms/models/dm.js +0 -149
- package/dist/sync-agent/dms/models/dm.js.map +0 -1
- package/dist/sync-agent/river-connection/models/transactionalClient.d.ts +0 -11
- package/dist/sync-agent/river-connection/models/transactionalClient.d.ts.map +0 -1
- package/dist/sync-agent/river-connection/models/transactionalClient.js +0 -14
- package/dist/sync-agent/river-connection/models/transactionalClient.js.map +0 -1
- package/dist/sync-agent/spaces/models/channel.d.ts +0 -121
- package/dist/sync-agent/spaces/models/channel.d.ts.map +0 -1
- package/dist/sync-agent/spaces/models/channel.js +0 -182
- package/dist/sync-agent/spaces/models/channel.js.map +0 -1
- package/dist/sync-agent/spaces/models/space.d.ts +0 -57
- package/dist/sync-agent/spaces/models/space.d.ts.map +0 -1
- package/dist/sync-agent/spaces/models/space.js +0 -125
- package/dist/sync-agent/spaces/models/space.js.map +0 -1
- package/dist/sync-agent/spaces/spaces.d.ts +0 -28
- package/dist/sync-agent/spaces/spaces.d.ts.map +0 -1
- package/dist/sync-agent/spaces/spaces.js +0 -71
- package/dist/sync-agent/spaces/spaces.js.map +0 -1
- package/dist/tests/multi/channelSpaceSettings.test.d.ts +0 -5
- package/dist/tests/multi/channelSpaceSettings.test.d.ts.map +0 -1
- package/dist/tests/multi/channelSpaceSettings.test.js +0 -204
- package/dist/tests/multi/channelSpaceSettings.test.js.map +0 -1
- package/dist/tests/multi/disableChannel.test.d.ts +0 -5
- package/dist/tests/multi/disableChannel.test.d.ts.map +0 -1
- package/dist/tests/multi/disableChannel.test.js +0 -30
- package/dist/tests/multi/disableChannel.test.js.map +0 -1
- package/dist/tests/multi/disableSpace.test.d.ts.map +0 -1
- package/dist/tests/multi/disableSpace.test.js +0 -37
- package/dist/tests/multi/disableSpace.test.js.map +0 -1
- package/dist/tests/multi/entitlements/channelEntitlementPermissions.test.d.ts +0 -5
- package/dist/tests/multi/entitlements/channelEntitlementPermissions.test.d.ts.map +0 -1
- package/dist/tests/multi/entitlements/channelEntitlementPermissions.test.js +0 -129
- package/dist/tests/multi/entitlements/channelEntitlementPermissions.test.js.map +0 -1
- package/dist/tests/multi/entitlements/channelWithThreeNestedEntitlement.test.d.ts +0 -5
- package/dist/tests/multi/entitlements/channelWithThreeNestedEntitlement.test.d.ts.map +0 -1
- package/dist/tests/multi/entitlements/channelWithThreeNestedEntitlement.test.js +0 -44
- package/dist/tests/multi/entitlements/channelWithThreeNestedEntitlement.test.js.map +0 -1
- package/dist/tests/multi/entitlements/channelsWithComplexEntitlements.test.d.ts +0 -5
- package/dist/tests/multi/entitlements/channelsWithComplexEntitlements.test.d.ts.map +0 -1
- package/dist/tests/multi/entitlements/channelsWithComplexEntitlements.test.js +0 -125
- package/dist/tests/multi/entitlements/channelsWithComplexEntitlements.test.js.map +0 -1
- package/dist/tests/multi/entitlements/channelsWithEntitlementLoss.test.d.ts +0 -5
- package/dist/tests/multi/entitlements/channelsWithEntitlementLoss.test.d.ts.map +0 -1
- package/dist/tests/multi/entitlements/channelsWithEntitlementLoss.test.js +0 -72
- package/dist/tests/multi/entitlements/channelsWithEntitlementLoss.test.js.map +0 -1
- package/dist/tests/multi/entitlements/channelsWithEntitlements.test.d.ts +0 -5
- package/dist/tests/multi/entitlements/channelsWithEntitlements.test.d.ts.map +0 -1
- package/dist/tests/multi/entitlements/channelsWithEntitlements.test.js +0 -57
- package/dist/tests/multi/entitlements/channelsWithEntitlements.test.js.map +0 -1
- package/dist/tests/multi/entitlements/channelsWithErc20Entitlements.test.d.ts +0 -5
- package/dist/tests/multi/entitlements/channelsWithErc20Entitlements.test.d.ts.map +0 -1
- package/dist/tests/multi/entitlements/channelsWithErc20Entitlements.test.js +0 -86
- package/dist/tests/multi/entitlements/channelsWithErc20Entitlements.test.js.map +0 -1
- package/dist/tests/multi/entitlements/channelsWithErc721Entitlements.test.d.ts +0 -5
- package/dist/tests/multi/entitlements/channelsWithErc721Entitlements.test.d.ts.map +0 -1
- package/dist/tests/multi/entitlements/channelsWithErc721Entitlements.test.js +0 -69
- package/dist/tests/multi/entitlements/channelsWithErc721Entitlements.test.js.map +0 -1
- package/dist/tests/multi/entitlements/channelsWithEthBalanceEntitlements.test.d.ts +0 -5
- package/dist/tests/multi/entitlements/channelsWithEthBalanceEntitlements.test.d.ts.map +0 -1
- package/dist/tests/multi/entitlements/channelsWithEthBalanceEntitlements.test.js +0 -145
- package/dist/tests/multi/entitlements/channelsWithEthBalanceEntitlements.test.js.map +0 -1
- package/dist/tests/multi/entitlements/channelsWithUserEntitlements.test.d.ts +0 -5
- package/dist/tests/multi/entitlements/channelsWithUserEntitlements.test.d.ts.map +0 -1
- package/dist/tests/multi/entitlements/channelsWithUserEntitlements.test.js +0 -53
- package/dist/tests/multi/entitlements/channelsWithUserEntitlements.test.js.map +0 -1
- package/dist/tests/multi/entitlements/membershipRenewals.test.d.ts +0 -5
- package/dist/tests/multi/entitlements/membershipRenewals.test.d.ts.map +0 -1
- package/dist/tests/multi/entitlements/membershipRenewals.test.js +0 -150
- package/dist/tests/multi/entitlements/membershipRenewals.test.js.map +0 -1
- package/dist/tests/multi/entitlements/spaceWithComplexEntitlements.test.d.ts +0 -5
- package/dist/tests/multi/entitlements/spaceWithComplexEntitlements.test.d.ts.map +0 -1
- package/dist/tests/multi/entitlements/spaceWithComplexEntitlements.test.js +0 -131
- package/dist/tests/multi/entitlements/spaceWithComplexEntitlements.test.js.map +0 -1
- package/dist/tests/multi/entitlements/spaceWithEntitlements.test.d.ts +0 -5
- package/dist/tests/multi/entitlements/spaceWithEntitlements.test.d.ts.map +0 -1
- package/dist/tests/multi/entitlements/spaceWithEntitlements.test.js +0 -109
- package/dist/tests/multi/entitlements/spaceWithEntitlements.test.js.map +0 -1
- package/dist/tests/multi/entitlements/spaceWithErc20Entitlements.test.d.ts +0 -5
- package/dist/tests/multi/entitlements/spaceWithErc20Entitlements.test.d.ts.map +0 -1
- package/dist/tests/multi/entitlements/spaceWithErc20Entitlements.test.js +0 -103
- package/dist/tests/multi/entitlements/spaceWithErc20Entitlements.test.js.map +0 -1
- package/dist/tests/multi/entitlements/spaceWithErc721Entitlements.test.d.ts +0 -5
- package/dist/tests/multi/entitlements/spaceWithErc721Entitlements.test.d.ts.map +0 -1
- package/dist/tests/multi/entitlements/spaceWithErc721Entitlements.test.js +0 -84
- package/dist/tests/multi/entitlements/spaceWithErc721Entitlements.test.js.map +0 -1
- package/dist/tests/multi/entitlements/spaceWithEthBalanceEntitlements.test.d.ts +0 -5
- package/dist/tests/multi/entitlements/spaceWithEthBalanceEntitlements.test.d.ts.map +0 -1
- package/dist/tests/multi/entitlements/spaceWithEthBalanceEntitlements.test.js +0 -168
- package/dist/tests/multi/entitlements/spaceWithEthBalanceEntitlements.test.js.map +0 -1
- package/dist/tests/multi/entitlements/spaceWithThreeNestedEntitlement.test.d.ts +0 -5
- package/dist/tests/multi/entitlements/spaceWithThreeNestedEntitlement.test.d.ts.map +0 -1
- package/dist/tests/multi/entitlements/spaceWithThreeNestedEntitlement.test.js +0 -45
- package/dist/tests/multi/entitlements/spaceWithThreeNestedEntitlement.test.js.map +0 -1
- package/dist/tests/multi/entitlements/spaceWithUserEntitlements.test.d.ts +0 -5
- package/dist/tests/multi/entitlements/spaceWithUserEntitlements.test.d.ts.map +0 -1
- package/dist/tests/multi/entitlements/spaceWithUserEntitlements.test.js +0 -79
- package/dist/tests/multi/entitlements/spaceWithUserEntitlements.test.js.map +0 -1
- package/dist/tests/multi/legacySpace.test.d.ts.map +0 -1
- package/dist/tests/multi/legacySpace.test.js +0 -48
- package/dist/tests/multi/legacySpace.test.js.map +0 -1
- package/dist/tests/multi/mediaWithEntitlements.test.d.ts +0 -5
- package/dist/tests/multi/mediaWithEntitlements.test.d.ts.map +0 -1
- package/dist/tests/multi/mediaWithEntitlements.test.js +0 -152
- package/dist/tests/multi/mediaWithEntitlements.test.js.map +0 -1
- package/dist/tests/multi/membershipManagement.test.d.ts +0 -5
- package/dist/tests/multi/membershipManagement.test.d.ts.map +0 -1
- package/dist/tests/multi/membershipManagement.test.js +0 -76
- package/dist/tests/multi/membershipManagement.test.js.map +0 -1
- package/dist/tests/multi/riverAirdropDapp.test.d.ts +0 -5
- package/dist/tests/multi/riverAirdropDapp.test.d.ts.map +0 -1
- package/dist/tests/multi/riverAirdropDapp.test.js +0 -43
- package/dist/tests/multi/riverAirdropDapp.test.js.map +0 -1
- package/dist/tests/multi/spaceDapp.test.d.ts.map +0 -1
- package/dist/tests/multi/spaceDapp.test.js +0 -61
- package/dist/tests/multi/spaceDapp.test.js.map +0 -1
- package/dist/tests/multi/spaceWithVariousPriceConfigurations.test.d.ts +0 -2
- package/dist/tests/multi/spaceWithVariousPriceConfigurations.test.d.ts.map +0 -1
- package/dist/tests/multi/spaceWithVariousPriceConfigurations.test.js +0 -63
- package/dist/tests/multi/spaceWithVariousPriceConfigurations.test.js.map +0 -1
- package/dist/tests/multi/withEntitlements.test.d.ts +0 -5
- package/dist/tests/multi/withEntitlements.test.d.ts.map +0 -1
- package/dist/tests/multi/withEntitlements.test.js +0 -125
- package/dist/tests/multi/withEntitlements.test.js.map +0 -1
- package/dist/tests/multi_ne/dms.test.d.ts +0 -5
- package/dist/tests/multi_ne/dms.test.d.ts.map +0 -1
- package/dist/tests/multi_ne/dms.test.js +0 -131
- package/dist/tests/multi_ne/dms.test.js.map +0 -1
- package/dist/tests/multi_ne/memberMetadata_DisplayNames.test.d.ts +0 -5
- package/dist/tests/multi_ne/memberMetadata_DisplayNames.test.d.ts.map +0 -1
- package/dist/tests/multi_ne/memberMetadata_DisplayNames.test.js +0 -54
- package/dist/tests/multi_ne/memberMetadata_DisplayNames.test.js.map +0 -1
- package/dist/tests/multi_ne/memberMetadata_EnsAddresses.test.d.ts +0 -5
- package/dist/tests/multi_ne/memberMetadata_EnsAddresses.test.d.ts.map +0 -1
- package/dist/tests/multi_ne/memberMetadata_EnsAddresses.test.js +0 -37
- package/dist/tests/multi_ne/memberMetadata_EnsAddresses.test.js.map +0 -1
- package/dist/tests/multi_ne/memberMetadata_Nft.test.d.ts +0 -5
- package/dist/tests/multi_ne/memberMetadata_Nft.test.d.ts.map +0 -1
- package/dist/tests/multi_ne/memberMetadata_Nft.test.js +0 -49
- package/dist/tests/multi_ne/memberMetadata_Nft.test.js.map +0 -1
- package/dist/tests/multi_ne/memberMetadata_Usernames.test.d.ts +0 -5
- package/dist/tests/multi_ne/memberMetadata_Usernames.test.d.ts.map +0 -1
- package/dist/tests/multi_ne/memberMetadata_Usernames.test.js +0 -126
- package/dist/tests/multi_ne/memberMetadata_Usernames.test.js.map +0 -1
- package/dist/tests/multi_ne/space.test.d.ts +0 -5
- package/dist/tests/multi_ne/space.test.d.ts.map +0 -1
- package/dist/tests/multi_ne/space.test.js +0 -284
- package/dist/tests/multi_ne/space.test.js.map +0 -1
- package/dist/tests/multi_v2/entitlements/channelsWithCrossChainEntitlements.test.d.ts +0 -6
- package/dist/tests/multi_v2/entitlements/channelsWithCrossChainEntitlements.test.d.ts.map +0 -1
- package/dist/tests/multi_v2/entitlements/channelsWithCrossChainEntitlements.test.js +0 -78
- package/dist/tests/multi_v2/entitlements/channelsWithCrossChainEntitlements.test.js.map +0 -1
- package/dist/tests/multi_v2/entitlements/channelsWithErc1155Entitlement.test.d.ts +0 -6
- package/dist/tests/multi_v2/entitlements/channelsWithErc1155Entitlement.test.d.ts.map +0 -1
- package/dist/tests/multi_v2/entitlements/channelsWithErc1155Entitlement.test.js +0 -89
- package/dist/tests/multi_v2/entitlements/channelsWithErc1155Entitlement.test.js.map +0 -1
- package/dist/tests/multi_v2/entitlements/spaceWithCrossChainEntitlements.test.d.ts +0 -6
- package/dist/tests/multi_v2/entitlements/spaceWithCrossChainEntitlements.test.d.ts.map +0 -1
- package/dist/tests/multi_v2/entitlements/spaceWithCrossChainEntitlements.test.js +0 -88
- package/dist/tests/multi_v2/entitlements/spaceWithCrossChainEntitlements.test.js.map +0 -1
- package/dist/tests/multi_v2/entitlements/spaceWithErc1155Entitlements.test.d.ts +0 -6
- package/dist/tests/multi_v2/entitlements/spaceWithErc1155Entitlements.test.d.ts.map +0 -1
- package/dist/tests/multi_v2/entitlements/spaceWithErc1155Entitlements.test.js +0 -105
- package/dist/tests/multi_v2/entitlements/spaceWithErc1155Entitlements.test.js.map +0 -1
- package/dist/tests/multi_v2/updateRole.test.d.ts +0 -5
- package/dist/tests/multi_v2/updateRole.test.d.ts.map +0 -1
- package/dist/tests/multi_v2/updateRole.test.js +0 -25
- package/dist/tests/multi_v2/updateRole.test.js.map +0 -1
- package/dist/tests/unit/snapshotMigration0002.test.d.ts +0 -2
- package/dist/tests/unit/snapshotMigration0002.test.d.ts.map +0 -1
- package/dist/tests/unit/snapshotMigration0002.test.js +0 -31
- package/dist/tests/unit/snapshotMigration0002.test.js.map +0 -1
- package/dist/views/streams/channelStreams.d.ts +0 -8
- package/dist/views/streams/channelStreams.d.ts.map +0 -1
- package/dist/views/streams/channelStreams.js +0 -9
- package/dist/views/streams/channelStreams.js.map +0 -1
- package/dist/views/streams/dmStreams.d.ts +0 -13
- package/dist/views/streams/dmStreams.d.ts.map +0 -1
- package/dist/views/streams/dmStreams.js +0 -33
- package/dist/views/streams/dmStreams.js.map +0 -1
- package/dist/views/streams/spaceStreams.d.ts +0 -17
- package/dist/views/streams/spaceStreams.d.ts.map +0 -1
- package/dist/views/streams/spaceStreams.js +0 -52
- package/dist/views/streams/spaceStreams.js.map +0 -1
package/dist/tests/testUtils.js
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-unsafe-call */
|
|
3
3
|
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
4
4
|
import { _impl_makeEvent_impl_, unpackStreamEnvelopes } from '../sign';
|
|
5
|
-
import {
|
|
5
|
+
import { SyncOp, EncryptedDataVersion, } from '@towns-labs/proto';
|
|
6
6
|
import { Client } from '../client';
|
|
7
7
|
import { townsEnv } from '../townsEnv';
|
|
8
|
-
import { genId,
|
|
8
|
+
import { genId, makeUniqueGDMChannelStreamId, userIdFromAddress } from '../id';
|
|
9
9
|
import { secp256k1 } from '@noble/curves/secp256k1';
|
|
10
10
|
import { bin_fromHexString, check, dlog, publicKeyToAddress } from '@towns-labs/utils';
|
|
11
11
|
import { ethers } from 'ethers';
|
|
@@ -13,14 +13,10 @@ import { RiverDbManager } from '../riverDbManager';
|
|
|
13
13
|
import { makeStreamRpcClient } from '../makeStreamRpcClient';
|
|
14
14
|
import { forEachRight } from 'lodash-es';
|
|
15
15
|
import { makeSignerContext } from '../signerContext';
|
|
16
|
-
import { LocalhostWeb3Provider
|
|
16
|
+
import { LocalhostWeb3Provider } from '@towns-labs/web3';
|
|
17
17
|
import { RiverTimelineEvent } from '../views/models/timelineTypes';
|
|
18
|
-
import { SyncState } from '../syncedStreamsLoop';
|
|
19
18
|
import { isDefined } from '../check';
|
|
20
19
|
const log = dlog('csb:test:util');
|
|
21
|
-
function useLegacySpaces() {
|
|
22
|
-
return process.env.USE_LEGACY_SPACES === 'true';
|
|
23
|
-
}
|
|
24
20
|
const initTestUrls = async () => {
|
|
25
21
|
const config = townsEnv().makeRiverChainConfig();
|
|
26
22
|
const urls = townsEnv().getNodeUrl();
|
|
@@ -76,66 +72,12 @@ export const TEST_ENCRYPTED_MESSAGE_PROPS = {
|
|
|
76
72
|
ivBytes: new Uint8Array(0),
|
|
77
73
|
version: EncryptedDataVersion.ENCRYPTED_DATA_VERSION_1,
|
|
78
74
|
};
|
|
79
|
-
export const getXchainConfigForTesting = () => {
|
|
80
|
-
// TODO: generate this for test environment and read from it
|
|
81
|
-
return {
|
|
82
|
-
supportedRpcUrls: {
|
|
83
|
-
31337: 'http://127.0.0.1:8545',
|
|
84
|
-
31338: 'http://127.0.0.1:8546',
|
|
85
|
-
},
|
|
86
|
-
etherNativeNetworkIds: [31337, 31338],
|
|
87
|
-
ethereumNetworkIds: [],
|
|
88
|
-
};
|
|
89
|
-
};
|
|
90
|
-
export async function erc1155CheckOp(contractName, tokenId, threshold) {
|
|
91
|
-
const contractAddress = await TestERC1155.getContractAddress(contractName);
|
|
92
|
-
return {
|
|
93
|
-
opType: OperationType.CHECK,
|
|
94
|
-
checkType: CheckOperationType.ERC1155,
|
|
95
|
-
chainId: 31337n,
|
|
96
|
-
contractAddress,
|
|
97
|
-
params: encodeERC1155Params({ threshold, tokenId }),
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
export async function erc20CheckOp(contractName, threshold) {
|
|
101
|
-
const contractAddress = await TestERC20.getContractAddress(contractName);
|
|
102
|
-
return {
|
|
103
|
-
opType: OperationType.CHECK,
|
|
104
|
-
checkType: CheckOperationType.ERC20,
|
|
105
|
-
chainId: 31337n,
|
|
106
|
-
contractAddress,
|
|
107
|
-
params: encodeThresholdParams({ threshold }),
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
export async function mockCrossChainCheckOp(contractName, id) {
|
|
111
|
-
const contractAddress = await TestCrossChainEntitlement.getContractAddress(contractName);
|
|
112
|
-
return {
|
|
113
|
-
opType: OperationType.CHECK,
|
|
114
|
-
checkType: CheckOperationType.ISENTITLED,
|
|
115
|
-
chainId: 31337n,
|
|
116
|
-
contractAddress,
|
|
117
|
-
params: TestCrossChainEntitlement.encodeIdParameter(id),
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
75
|
export const twoEth = BigInt(2e18);
|
|
121
76
|
export const oneEth = BigInt(1e18);
|
|
122
77
|
export const threeEth = BigInt(3e18);
|
|
123
78
|
export const oneHalfEth = BigInt(5e17);
|
|
124
|
-
export
|
|
125
|
-
return
|
|
126
|
-
opType: OperationType.CHECK,
|
|
127
|
-
checkType: CheckOperationType.ETH_BALANCE,
|
|
128
|
-
chainId: 31337n,
|
|
129
|
-
contractAddress: ethers.constants.AddressZero,
|
|
130
|
-
params: encodeThresholdParams({ threshold }),
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* makeUniqueSpaceStreamId - space stream ids are derived from the contract
|
|
135
|
-
* in tests without entitlements there are no contracts, so we use a random id
|
|
136
|
-
*/
|
|
137
|
-
export const makeUniqueSpaceStreamId = () => {
|
|
138
|
-
return makeSpaceStreamId(genId(40));
|
|
79
|
+
export const makeUniqueGDMStreamId = () => {
|
|
80
|
+
return makeUniqueGDMChannelStreamId();
|
|
139
81
|
};
|
|
140
82
|
/**
|
|
141
83
|
*
|
|
@@ -205,9 +147,6 @@ export async function setupWalletsAndContexts() {
|
|
|
205
147
|
bobProvider.fundWallet(),
|
|
206
148
|
carolProvider.fundWallet(),
|
|
207
149
|
]);
|
|
208
|
-
const bobSpaceDapp = createSpaceDapp(bobProvider, baseConfig.chainConfig);
|
|
209
|
-
const aliceSpaceDapp = createSpaceDapp(aliceProvider, baseConfig.chainConfig);
|
|
210
|
-
const carolSpaceDapp = createSpaceDapp(carolProvider, baseConfig.chainConfig);
|
|
211
150
|
// create a user
|
|
212
151
|
const [alice, bob, carol] = await Promise.all([
|
|
213
152
|
makeTestClient({
|
|
@@ -234,9 +173,6 @@ export async function setupWalletsAndContexts() {
|
|
|
234
173
|
aliceProvider,
|
|
235
174
|
bobProvider,
|
|
236
175
|
carolProvider,
|
|
237
|
-
aliceSpaceDapp,
|
|
238
|
-
bobSpaceDapp,
|
|
239
|
-
carolSpaceDapp,
|
|
240
176
|
};
|
|
241
177
|
}
|
|
242
178
|
class DonePromise {
|
|
@@ -318,355 +254,7 @@ export const lastEventFiltered = (events, f) => {
|
|
|
318
254
|
});
|
|
319
255
|
return ret;
|
|
320
256
|
};
|
|
321
|
-
// createSpaceAndDefaultChannel creates a space and default channel for a given
|
|
322
|
-
// client, on the spaceDapp and the stream node. It creates a user stream, joins
|
|
323
|
-
// the user to the space, and starts syncing the client.
|
|
324
|
-
export async function createSpaceAndDefaultChannel(client, spaceDapp, wallet, name, membership) {
|
|
325
|
-
const transaction = await createVersionedSpaceFromMembership(client, spaceDapp, wallet, name, membership);
|
|
326
|
-
const receipt = await transaction.wait();
|
|
327
|
-
expect(receipt.status).toEqual(1);
|
|
328
|
-
const spaceAddress = spaceDapp.getSpaceAddress(receipt, wallet.address);
|
|
329
|
-
expect(spaceAddress).toBeDefined();
|
|
330
|
-
const spaceId = makeSpaceStreamId(spaceAddress);
|
|
331
|
-
const channelId = makeDefaultChannelStreamId(spaceAddress);
|
|
332
|
-
await client.initializeUser({ spaceId });
|
|
333
|
-
client.startSync();
|
|
334
|
-
const userStreamId = makeUserStreamId(client.userId);
|
|
335
|
-
const userStreamView = client.stream(userStreamId).view;
|
|
336
|
-
expect(userStreamView).toBeDefined();
|
|
337
|
-
const returnVal = await client.createSpace(spaceId);
|
|
338
|
-
expect(returnVal.streamId).toEqual(spaceId);
|
|
339
|
-
await waitFor(() => expect(userStreamView.userContent.isMember(spaceId, MembershipOp.SO_JOIN), `waitFor ${spaceId} in ${userStreamId}`).toBe(true));
|
|
340
|
-
const channelReturnVal = await client.createChannel(spaceId, 'general', `${name} general channel properties`, channelId);
|
|
341
|
-
expect(channelReturnVal.streamId).toEqual(channelId);
|
|
342
|
-
await waitFor(() => expect(userStreamView.userContent.isMember(channelId, MembershipOp.SO_JOIN), `waitFor ${channelId} in ${userStreamId}`).toBe(true));
|
|
343
|
-
return {
|
|
344
|
-
spaceId,
|
|
345
|
-
defaultChannelId: channelId,
|
|
346
|
-
userStreamView,
|
|
347
|
-
};
|
|
348
|
-
}
|
|
349
257
|
export const DefaultFreeAllocation = 1000;
|
|
350
|
-
export async function createVersionedSpaceFromMembership(client, spaceDapp, wallet, name, membership) {
|
|
351
|
-
if (useLegacySpaces()) {
|
|
352
|
-
if (isLegacyMembershipType(membership)) {
|
|
353
|
-
return await spaceDapp.createLegacySpace({
|
|
354
|
-
spaceName: `${name}-space`,
|
|
355
|
-
uri: `${name}-space-metadata`,
|
|
356
|
-
channelName: 'general',
|
|
357
|
-
membership,
|
|
358
|
-
}, wallet);
|
|
359
|
-
}
|
|
360
|
-
else {
|
|
361
|
-
// Convert space params to legacy space params
|
|
362
|
-
const legacyMembership = {
|
|
363
|
-
settings: membership.settings,
|
|
364
|
-
permissions: membership.permissions,
|
|
365
|
-
requirements: {
|
|
366
|
-
everyone: membership.requirements.everyone,
|
|
367
|
-
users: membership.requirements.users,
|
|
368
|
-
syncEntitlements: membership.requirements.syncEntitlements,
|
|
369
|
-
ruleData: convertRuleDataV2ToV1(decodeRuleDataV2(membership.requirements.ruleData)),
|
|
370
|
-
},
|
|
371
|
-
};
|
|
372
|
-
return await spaceDapp.createLegacySpace({
|
|
373
|
-
spaceName: `${name}-space`,
|
|
374
|
-
uri: `${name}-space-metadata`,
|
|
375
|
-
channelName: 'general',
|
|
376
|
-
membership: legacyMembership,
|
|
377
|
-
}, wallet);
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
else {
|
|
381
|
-
if (isLegacyMembershipType(membership)) {
|
|
382
|
-
// Convert legacy space params to current space params
|
|
383
|
-
membership = {
|
|
384
|
-
settings: membership.settings,
|
|
385
|
-
permissions: membership.permissions,
|
|
386
|
-
requirements: {
|
|
387
|
-
everyone: membership.requirements.everyone,
|
|
388
|
-
users: [],
|
|
389
|
-
syncEntitlements: false,
|
|
390
|
-
ruleData: encodeRuleDataV2(convertRuleDataV1ToV2(membership.requirements.ruleData)),
|
|
391
|
-
},
|
|
392
|
-
};
|
|
393
|
-
}
|
|
394
|
-
return await spaceDapp.createSpace({
|
|
395
|
-
spaceName: `${name}-space`,
|
|
396
|
-
uri: `${name}-space-metadata`,
|
|
397
|
-
channelName: 'general',
|
|
398
|
-
membership,
|
|
399
|
-
}, wallet);
|
|
400
|
-
}
|
|
401
|
-
}
|
|
402
|
-
// createVersionedSpace accepts either legacy or current space creation parameters and will
|
|
403
|
-
// fall backto the legacy space creation endpoint on the spaceDapp if the appropriate flag is set.
|
|
404
|
-
// If a user does not pass in a legacy space creation parameter, the function will not use
|
|
405
|
-
// the legacy space creation endpoint, because the updated parameters are not backwards
|
|
406
|
-
// compatible - we don't attempt conversion here.
|
|
407
|
-
export async function createVersionedSpace(spaceDapp, createSpaceParams, signer) {
|
|
408
|
-
if (useLegacySpaces() && isCreateLegacySpaceParams(createSpaceParams)) {
|
|
409
|
-
return await spaceDapp.createLegacySpace(createSpaceParams, signer);
|
|
410
|
-
}
|
|
411
|
-
else {
|
|
412
|
-
if (isCreateLegacySpaceParams(createSpaceParams)) {
|
|
413
|
-
// Convert legacy space params to current space params
|
|
414
|
-
createSpaceParams = {
|
|
415
|
-
spaceName: createSpaceParams.spaceName,
|
|
416
|
-
uri: createSpaceParams.uri,
|
|
417
|
-
channelName: createSpaceParams.channelName,
|
|
418
|
-
membership: {
|
|
419
|
-
settings: createSpaceParams.membership.settings,
|
|
420
|
-
permissions: createSpaceParams.membership.permissions,
|
|
421
|
-
requirements: {
|
|
422
|
-
everyone: createSpaceParams.membership.requirements.everyone,
|
|
423
|
-
users: [],
|
|
424
|
-
syncEntitlements: false,
|
|
425
|
-
ruleData: encodeRuleDataV2(convertRuleDataV1ToV2(createSpaceParams.membership.requirements
|
|
426
|
-
.ruleData)),
|
|
427
|
-
},
|
|
428
|
-
},
|
|
429
|
-
};
|
|
430
|
-
}
|
|
431
|
-
return await spaceDapp.createSpace(createSpaceParams, signer);
|
|
432
|
-
}
|
|
433
|
-
}
|
|
434
|
-
// createUserStreamAndSyncClient creates a user stream for a given client that
|
|
435
|
-
// uses a newly created space as the hint for the user stream, since the stream
|
|
436
|
-
// node will not allow the creation of a user stream without a space id.
|
|
437
|
-
//
|
|
438
|
-
// If the membership info is a legacy membership struct and the legacy space flag
|
|
439
|
-
// is set, the function will create a legacy space. Otherwise, it will convert the
|
|
440
|
-
// legacy membership struct to a current membership struct if needed and use the
|
|
441
|
-
// latest space creation endpoint.
|
|
442
|
-
export async function createUserStreamAndSyncClient(client, spaceDapp, name, membershipInfo, wallet) {
|
|
443
|
-
let createSpaceParams;
|
|
444
|
-
if (isLegacyMembershipType(membershipInfo)) {
|
|
445
|
-
createSpaceParams = {
|
|
446
|
-
spaceName: `${name}-space`,
|
|
447
|
-
uri: `${name}-space-metadata`,
|
|
448
|
-
channelName: 'general',
|
|
449
|
-
membership: membershipInfo,
|
|
450
|
-
};
|
|
451
|
-
}
|
|
452
|
-
else {
|
|
453
|
-
createSpaceParams = {
|
|
454
|
-
spaceName: `${name}-space`,
|
|
455
|
-
uri: `${name}-space-metadata`,
|
|
456
|
-
channelName: 'general',
|
|
457
|
-
membership: membershipInfo,
|
|
458
|
-
};
|
|
459
|
-
}
|
|
460
|
-
const transaction = await createVersionedSpace(spaceDapp, createSpaceParams, wallet);
|
|
461
|
-
const receipt = await transaction.wait();
|
|
462
|
-
expect(receipt.status).toEqual(1);
|
|
463
|
-
const spaceAddress = spaceDapp.getSpaceAddress(receipt, wallet.address);
|
|
464
|
-
expect(spaceAddress).toBeDefined();
|
|
465
|
-
const spaceId = makeSpaceStreamId(spaceAddress);
|
|
466
|
-
await client.initializeUser({ spaceId });
|
|
467
|
-
}
|
|
468
|
-
export async function expectUserCanJoin(spaceId, channelId, name, client, spaceDapp, address, wallet) {
|
|
469
|
-
const joinStart = Date.now();
|
|
470
|
-
// Check that the local evaluation of the user's entitlements for joining the space
|
|
471
|
-
// passes.
|
|
472
|
-
const entitledWallet = await spaceDapp.getEntitledWalletForJoiningSpace(spaceId, address, getXchainConfigForTesting());
|
|
473
|
-
expect(entitledWallet).toBeDefined();
|
|
474
|
-
const { issued } = await spaceDapp.joinSpace(spaceId, address, wallet);
|
|
475
|
-
expect(issued).toBe(true);
|
|
476
|
-
log(`${name} joined space ${spaceId}`, Date.now() - joinStart);
|
|
477
|
-
await client.initializeUser({ spaceId });
|
|
478
|
-
client.startSync();
|
|
479
|
-
await waitFor(() => expect(client.streams.syncState).toBe(SyncState.Syncing));
|
|
480
|
-
await expect(client.joinStream(spaceId)).resolves.not.toThrow();
|
|
481
|
-
await expect(client.joinStream(channelId)).resolves.not.toThrow();
|
|
482
|
-
const userStreamView = client.stream(client.userStreamId).view;
|
|
483
|
-
await waitFor(() => {
|
|
484
|
-
expect(userStreamView.userContent.isMember(spaceId, MembershipOp.SO_JOIN), `waitFor ${spaceId} in ${client.userStreamId}`).toBe(true);
|
|
485
|
-
expect(userStreamView.userContent.isMember(channelId, MembershipOp.SO_JOIN), `waitFor ${channelId} in ${client.userStreamId}`).toBe(true);
|
|
486
|
-
});
|
|
487
|
-
}
|
|
488
|
-
export async function everyoneMembershipStruct(spaceDapp, client) {
|
|
489
|
-
const { fixedPricingModuleAddress, freeAllocation, price } = await getFreeSpacePricingSetup(spaceDapp);
|
|
490
|
-
return {
|
|
491
|
-
settings: {
|
|
492
|
-
name: 'Everyone',
|
|
493
|
-
symbol: 'MEMBER',
|
|
494
|
-
price,
|
|
495
|
-
maxSupply: 1000,
|
|
496
|
-
duration: 0,
|
|
497
|
-
currency: ETH_ADDRESS,
|
|
498
|
-
feeRecipient: client.userId,
|
|
499
|
-
freeAllocation,
|
|
500
|
-
pricingModule: fixedPricingModuleAddress,
|
|
501
|
-
},
|
|
502
|
-
permissions: [Permission.Read, Permission.Write],
|
|
503
|
-
requirements: {
|
|
504
|
-
everyone: true,
|
|
505
|
-
users: [],
|
|
506
|
-
ruleData: NoopRuleData,
|
|
507
|
-
syncEntitlements: false,
|
|
508
|
-
},
|
|
509
|
-
};
|
|
510
|
-
}
|
|
511
|
-
// should start charging after the first member joins
|
|
512
|
-
export async function zeroPriceWithLimitedAllocationMembershipStruct(spaceDapp, client, opts) {
|
|
513
|
-
const { fixedPricingModuleAddress, price } = await getFreeSpacePricingSetup(spaceDapp);
|
|
514
|
-
const { freeAllocation } = opts;
|
|
515
|
-
const settings = {
|
|
516
|
-
settings: {
|
|
517
|
-
name: 'Everyone',
|
|
518
|
-
symbol: 'MEMBER',
|
|
519
|
-
price,
|
|
520
|
-
maxSupply: 1000,
|
|
521
|
-
duration: 0,
|
|
522
|
-
currency: ETH_ADDRESS,
|
|
523
|
-
feeRecipient: client.userId,
|
|
524
|
-
freeAllocation,
|
|
525
|
-
pricingModule: fixedPricingModuleAddress,
|
|
526
|
-
},
|
|
527
|
-
permissions: [Permission.Read, Permission.Write],
|
|
528
|
-
requirements: {
|
|
529
|
-
everyone: true,
|
|
530
|
-
users: [],
|
|
531
|
-
ruleData: NoopRuleData,
|
|
532
|
-
syncEntitlements: false,
|
|
533
|
-
},
|
|
534
|
-
};
|
|
535
|
-
return settings;
|
|
536
|
-
}
|
|
537
|
-
// should start charing for the first member
|
|
538
|
-
export async function dynamicMembershipStruct(spaceDapp, client) {
|
|
539
|
-
const dynamicPricingModule = await getDynamicPricingModule(spaceDapp);
|
|
540
|
-
expect(dynamicPricingModule).toBeDefined();
|
|
541
|
-
return {
|
|
542
|
-
settings: {
|
|
543
|
-
name: 'Everyone',
|
|
544
|
-
symbol: 'MEMBER',
|
|
545
|
-
price: 0,
|
|
546
|
-
maxSupply: 1000,
|
|
547
|
-
duration: 0,
|
|
548
|
-
currency: ETH_ADDRESS,
|
|
549
|
-
feeRecipient: client.userId,
|
|
550
|
-
freeAllocation: 0,
|
|
551
|
-
pricingModule: dynamicPricingModule.module,
|
|
552
|
-
},
|
|
553
|
-
permissions: [Permission.Read, Permission.Write],
|
|
554
|
-
requirements: {
|
|
555
|
-
everyone: true,
|
|
556
|
-
users: [],
|
|
557
|
-
ruleData: NoopRuleData,
|
|
558
|
-
syncEntitlements: false,
|
|
559
|
-
},
|
|
560
|
-
};
|
|
561
|
-
}
|
|
562
|
-
// should start charging after the first member joins
|
|
563
|
-
export async function fixedPriceMembershipStruct(spaceDapp, client, opts = { price: 1 }) {
|
|
564
|
-
const fixedPricingModule = await getFixedPricingModule(spaceDapp);
|
|
565
|
-
expect(fixedPricingModule).toBeDefined();
|
|
566
|
-
const { price } = opts;
|
|
567
|
-
const settings = {
|
|
568
|
-
settings: {
|
|
569
|
-
name: 'Everyone',
|
|
570
|
-
symbol: 'MEMBER',
|
|
571
|
-
price: ethers.utils.parseEther(price.toString()),
|
|
572
|
-
maxSupply: 1000,
|
|
573
|
-
duration: 0,
|
|
574
|
-
currency: ETH_ADDRESS,
|
|
575
|
-
feeRecipient: client.userId,
|
|
576
|
-
freeAllocation: 0,
|
|
577
|
-
pricingModule: fixedPricingModule.module,
|
|
578
|
-
},
|
|
579
|
-
permissions: [Permission.Read, Permission.Write],
|
|
580
|
-
requirements: {
|
|
581
|
-
everyone: true,
|
|
582
|
-
users: [],
|
|
583
|
-
ruleData: NoopRuleData,
|
|
584
|
-
syncEntitlements: false,
|
|
585
|
-
},
|
|
586
|
-
};
|
|
587
|
-
return settings;
|
|
588
|
-
}
|
|
589
|
-
export async function getFreeSpacePricingSetup(spaceDapp) {
|
|
590
|
-
const fixedPricingModule = await getFixedPricingModule(spaceDapp);
|
|
591
|
-
expect(fixedPricingModule).toBeDefined();
|
|
592
|
-
return {
|
|
593
|
-
price: 0,
|
|
594
|
-
fixedPricingModuleAddress: fixedPricingModule.module,
|
|
595
|
-
freeAllocation: DefaultFreeAllocation,
|
|
596
|
-
};
|
|
597
|
-
}
|
|
598
|
-
export function twoNftRuleData(nft1Address, nft2Address, logOpType = LogicalOperationType.AND) {
|
|
599
|
-
const leftOperation = {
|
|
600
|
-
opType: OperationType.CHECK,
|
|
601
|
-
checkType: CheckOperationType.ERC721,
|
|
602
|
-
chainId: 31337n,
|
|
603
|
-
contractAddress: nft1Address,
|
|
604
|
-
params: encodeThresholdParams({ threshold: 1n }),
|
|
605
|
-
};
|
|
606
|
-
const rightOperation = {
|
|
607
|
-
opType: OperationType.CHECK,
|
|
608
|
-
checkType: CheckOperationType.ERC721,
|
|
609
|
-
chainId: 31337n,
|
|
610
|
-
contractAddress: nft2Address,
|
|
611
|
-
params: encodeThresholdParams({ threshold: 1n }),
|
|
612
|
-
};
|
|
613
|
-
const root = {
|
|
614
|
-
opType: OperationType.LOGICAL,
|
|
615
|
-
logicalType: logOpType,
|
|
616
|
-
leftOperation,
|
|
617
|
-
rightOperation,
|
|
618
|
-
};
|
|
619
|
-
return treeToRuleData(root);
|
|
620
|
-
}
|
|
621
|
-
export async function unlinkCaller(rootSpaceDapp, rootWallet, caller) {
|
|
622
|
-
const walletLink = rootSpaceDapp.getWalletLink();
|
|
623
|
-
let txn;
|
|
624
|
-
try {
|
|
625
|
-
txn = await walletLink.removeCallerLink(caller);
|
|
626
|
-
}
|
|
627
|
-
catch (err) {
|
|
628
|
-
const parsedError = walletLink.parseError(err);
|
|
629
|
-
log('linkWallets error', parsedError);
|
|
630
|
-
}
|
|
631
|
-
expect(txn).toBeDefined();
|
|
632
|
-
const receipt = await txn?.wait();
|
|
633
|
-
expect(receipt.status).toEqual(1);
|
|
634
|
-
const linkedWallets = await walletLink.getLinkedWallets(rootWallet.address);
|
|
635
|
-
expect(linkedWallets).not.toContain(caller.address);
|
|
636
|
-
}
|
|
637
|
-
export async function unlinkWallet(rootSpaceDapp, rootWallet, linkedWallet) {
|
|
638
|
-
const walletLink = rootSpaceDapp.getWalletLink();
|
|
639
|
-
let txn;
|
|
640
|
-
try {
|
|
641
|
-
txn = await walletLink.removeLink(rootWallet, linkedWallet.address);
|
|
642
|
-
}
|
|
643
|
-
catch (err) {
|
|
644
|
-
const parsedError = walletLink.parseError(err);
|
|
645
|
-
log('linkWallets error', parsedError);
|
|
646
|
-
}
|
|
647
|
-
expect(txn).toBeDefined();
|
|
648
|
-
const receipt = await txn?.wait();
|
|
649
|
-
expect(receipt.status).toEqual(1);
|
|
650
|
-
const linkedWallets = await walletLink.getLinkedWallets(rootWallet.address);
|
|
651
|
-
expect(linkedWallets).not.toContain(linkedWallet.address);
|
|
652
|
-
}
|
|
653
|
-
// Hint: pass in the wallets attached to the providers.
|
|
654
|
-
export async function linkWallets(rootSpaceDapp, rootWallet, linkedWallet) {
|
|
655
|
-
const walletLink = rootSpaceDapp.getWalletLink();
|
|
656
|
-
let txn;
|
|
657
|
-
try {
|
|
658
|
-
txn = await walletLink.linkWalletToRootKey(rootWallet, linkedWallet);
|
|
659
|
-
}
|
|
660
|
-
catch (err) {
|
|
661
|
-
const parsedError = walletLink.parseError(err);
|
|
662
|
-
log('linkWallets error', parsedError);
|
|
663
|
-
}
|
|
664
|
-
expect(txn).toBeDefined();
|
|
665
|
-
const receipt = await txn?.wait();
|
|
666
|
-
expect(receipt.status).toEqual(1);
|
|
667
|
-
const linkedWallets = await walletLink.getLinkedWallets(rootWallet.address);
|
|
668
|
-
expect(linkedWallets).toContain(linkedWallet.address);
|
|
669
|
-
}
|
|
670
258
|
/// wait for a value, return the value if it is defined, otherwise throw an error or return undefined. false is a valid value.
|
|
671
259
|
export function waitForValue(callback, options = { timeoutMS: 10000 }) {
|
|
672
260
|
const tmpError = new Error('tmp');
|
|
@@ -800,7 +388,7 @@ export async function waitForSyncStreamsMessage(syncStreams, message) {
|
|
|
800
388
|
if (stream) {
|
|
801
389
|
const env = await unpackStreamEnvelopes(stream, undefined);
|
|
802
390
|
for (const e of env) {
|
|
803
|
-
if (e.event.payload.case === '
|
|
391
|
+
if (e.event.payload.case === 'gdmChannelPayload') {
|
|
804
392
|
const p = e.event.payload.value.content;
|
|
805
393
|
if (p.case === 'message' && p.value.ciphertext === message) {
|
|
806
394
|
return true;
|
|
@@ -841,78 +429,6 @@ export function isValidEthAddress(address) {
|
|
|
841
429
|
const ethAddressRegex = /^(0x)?[0-9a-fA-F]{40}$/;
|
|
842
430
|
return ethAddressRegex.test(address);
|
|
843
431
|
}
|
|
844
|
-
export function getNftRuleData(testNftAddress) {
|
|
845
|
-
return createExternalNFTStruct([testNftAddress]);
|
|
846
|
-
}
|
|
847
|
-
// createRole creates a role on the spaceDapp with the given parameters, using the legacy endpoint
|
|
848
|
-
// if the USE_LEGACY_SPACES environment variable is set and converting the ruleData into the correct
|
|
849
|
-
// format as necessary. Be aware, though, that the legacy endpoint does not support erc1155 checks.
|
|
850
|
-
export async function createRole(spaceDapp, provider, spaceId, roleName, permissions, users, ruleData, signer) {
|
|
851
|
-
let txn = undefined;
|
|
852
|
-
let error = undefined;
|
|
853
|
-
if (useLegacySpaces()) {
|
|
854
|
-
try {
|
|
855
|
-
if (!isRuleDataV1(ruleData)) {
|
|
856
|
-
ruleData = convertRuleDataV2ToV1(ruleData);
|
|
857
|
-
}
|
|
858
|
-
txn = await spaceDapp.legacyCreateRole(spaceId, roleName, permissions, users, ruleData, signer);
|
|
859
|
-
}
|
|
860
|
-
catch (err) {
|
|
861
|
-
error = spaceDapp.parseSpaceError(spaceId, err);
|
|
862
|
-
return { roleId: undefined, error };
|
|
863
|
-
}
|
|
864
|
-
}
|
|
865
|
-
else {
|
|
866
|
-
if (isRuleDataV1(ruleData)) {
|
|
867
|
-
ruleData = convertRuleDataV1ToV2(ruleData);
|
|
868
|
-
}
|
|
869
|
-
try {
|
|
870
|
-
txn = await spaceDapp.createRole(spaceId, roleName, permissions, users, ruleData, signer);
|
|
871
|
-
}
|
|
872
|
-
catch (err) {
|
|
873
|
-
error = spaceDapp.parseSpaceError(spaceId, err);
|
|
874
|
-
return { roleId: undefined, error };
|
|
875
|
-
}
|
|
876
|
-
}
|
|
877
|
-
const { roleId, error: roleError } = await waitForRoleCreated(spaceDapp, spaceId, txn);
|
|
878
|
-
return { roleId, error: roleError };
|
|
879
|
-
}
|
|
880
|
-
export async function updateRole(spaceDapp, provider, params, signer) {
|
|
881
|
-
let txn = undefined;
|
|
882
|
-
let error = undefined;
|
|
883
|
-
if (useLegacySpaces()) {
|
|
884
|
-
throw new Error('updateRole is v2 only');
|
|
885
|
-
}
|
|
886
|
-
try {
|
|
887
|
-
txn = await spaceDapp.updateRole(params, signer);
|
|
888
|
-
}
|
|
889
|
-
catch (err) {
|
|
890
|
-
error = spaceDapp.parseSpaceError(params.spaceNetworkId, err);
|
|
891
|
-
return { error };
|
|
892
|
-
}
|
|
893
|
-
const receipt = await provider.waitForTransaction(txn.hash);
|
|
894
|
-
if (receipt.status === 0) {
|
|
895
|
-
return { error: new Error('Transaction failed') };
|
|
896
|
-
}
|
|
897
|
-
return { error: undefined };
|
|
898
|
-
}
|
|
899
|
-
export async function createChannel(spaceDapp, provider, spaceId, channelName, roleIds, signer) {
|
|
900
|
-
let txn = undefined;
|
|
901
|
-
let error = undefined;
|
|
902
|
-
const channelId = makeUniqueChannelStreamId(spaceId);
|
|
903
|
-
try {
|
|
904
|
-
txn = await spaceDapp.createChannel(spaceId, channelName, '', channelId, roleIds, signer);
|
|
905
|
-
}
|
|
906
|
-
catch (err) {
|
|
907
|
-
error = spaceDapp.parseSpaceError(spaceId, err);
|
|
908
|
-
return { channelId: undefined, error };
|
|
909
|
-
}
|
|
910
|
-
const receipt = await provider.waitForTransaction(txn.hash);
|
|
911
|
-
if (receipt.status === 0) {
|
|
912
|
-
return { channelId: undefined, error: new Error('Transaction failed') };
|
|
913
|
-
}
|
|
914
|
-
return { channelId, error: undefined };
|
|
915
|
-
}
|
|
916
432
|
// Type guard function based on field checks
|
|
917
433
|
export function isEncryptedData(obj) {
|
|
918
434
|
if (typeof obj !== 'object' || obj === null) {
|
|
@@ -926,128 +442,6 @@ export function isEncryptedData(obj) {
|
|
|
926
442
|
(typeof data.checksum === 'string' || data.checksum === undefined) &&
|
|
927
443
|
(typeof data.refEventId === 'string' || data.refEventId === undefined));
|
|
928
444
|
}
|
|
929
|
-
// Users need to be mapped from 'alice', 'bob', etc to their wallet addresses,
|
|
930
|
-
// because the wallets are created within this helper method.
|
|
931
|
-
export async function createTownWithRequirements(requirements) {
|
|
932
|
-
const { alice, bob, carol, aliceSpaceDapp, bobSpaceDapp, carolSpaceDapp, aliceProvider, bobProvider, carolProvider, alicesWallet, bobsWallet, carolsWallet, } = await setupWalletsAndContexts();
|
|
933
|
-
const { fixedPricingModuleAddress, freeAllocation, price } = await getFreeSpacePricingSetup(bobSpaceDapp);
|
|
934
|
-
const userNameToWallet = {
|
|
935
|
-
alice: alicesWallet.address,
|
|
936
|
-
bob: bobsWallet.address,
|
|
937
|
-
carol: carolsWallet.address,
|
|
938
|
-
};
|
|
939
|
-
requirements.users = requirements.users.map((user) => userNameToWallet[user]);
|
|
940
|
-
const membershipInfo = {
|
|
941
|
-
settings: {
|
|
942
|
-
name: 'Everyone',
|
|
943
|
-
symbol: 'MEMBER',
|
|
944
|
-
price,
|
|
945
|
-
maxSupply: 1000,
|
|
946
|
-
duration: requirements.duration ?? 0,
|
|
947
|
-
currency: ETH_ADDRESS,
|
|
948
|
-
feeRecipient: bob.userId,
|
|
949
|
-
freeAllocation,
|
|
950
|
-
pricingModule: fixedPricingModuleAddress,
|
|
951
|
-
},
|
|
952
|
-
permissions: [Permission.Read, Permission.Write],
|
|
953
|
-
requirements: {
|
|
954
|
-
everyone: requirements.everyone,
|
|
955
|
-
users: requirements.users,
|
|
956
|
-
ruleData: encodeRuleDataV2(requirements.ruleData),
|
|
957
|
-
syncEntitlements: false,
|
|
958
|
-
},
|
|
959
|
-
};
|
|
960
|
-
// This helper method validates that the owner can join the space and default channel.
|
|
961
|
-
const { spaceId, defaultChannelId: channelId, userStreamView: bobUserStreamView, } = await createSpaceAndDefaultChannel(bob, bobSpaceDapp, bobProvider.wallet, 'bobs', membershipInfo);
|
|
962
|
-
// Validate that owner passes entitlement check
|
|
963
|
-
const entitledWallet = await bobSpaceDapp.getEntitledWalletForJoiningSpace(spaceId, bobsWallet.address, getXchainConfigForTesting());
|
|
964
|
-
expect(entitledWallet).toBeDefined();
|
|
965
|
-
return {
|
|
966
|
-
alice,
|
|
967
|
-
bob,
|
|
968
|
-
carol,
|
|
969
|
-
aliceSpaceDapp,
|
|
970
|
-
bobSpaceDapp,
|
|
971
|
-
carolSpaceDapp,
|
|
972
|
-
aliceProvider,
|
|
973
|
-
bobProvider,
|
|
974
|
-
carolProvider,
|
|
975
|
-
alicesWallet,
|
|
976
|
-
bobsWallet,
|
|
977
|
-
carolsWallet,
|
|
978
|
-
spaceId,
|
|
979
|
-
channelId,
|
|
980
|
-
bobUserStreamView,
|
|
981
|
-
};
|
|
982
|
-
}
|
|
983
|
-
export async function expectUserCannotJoinSpace(spaceId, client, spaceDapp, address) {
|
|
984
|
-
// Check that the local evaluation of the user's entitlements for joining the space
|
|
985
|
-
// fails.
|
|
986
|
-
const entitledWallet = await spaceDapp.getEntitledWalletForJoiningSpace(spaceId, address, getXchainConfigForTesting());
|
|
987
|
-
expect(entitledWallet).toBeUndefined();
|
|
988
|
-
await expect(client.joinStream(spaceId)).rejects.toThrow(/PERMISSION_DENIED/);
|
|
989
|
-
}
|
|
990
|
-
// pass in users as 'alice', 'bob', 'carol' - b/c their wallets are created here
|
|
991
|
-
export async function setupChannelWithCustomRole(userNames, ruleData, permissions = [Permission.Read]) {
|
|
992
|
-
const { alice, bob, carol, alicesWallet, bobsWallet, carolsWallet, aliceProvider, bobProvider, carolProvider, aliceSpaceDapp, bobSpaceDapp, carolSpaceDapp, } = await setupWalletsAndContexts();
|
|
993
|
-
const userNameToWallet = {
|
|
994
|
-
alice: alicesWallet.address,
|
|
995
|
-
bob: bobsWallet.address,
|
|
996
|
-
carol: carolsWallet.address,
|
|
997
|
-
};
|
|
998
|
-
const users = userNames.map((user) => userNameToWallet[user]);
|
|
999
|
-
const { spaceId, defaultChannelId } = await createSpaceAndDefaultChannel(bob, bobSpaceDapp, bobProvider.wallet, 'bob', await everyoneMembershipStruct(bobSpaceDapp, bob));
|
|
1000
|
-
const { roleId, error: roleError } = await createRole(bobSpaceDapp, bobProvider, spaceId, 'gated role', permissions, users, ruleData, bobProvider.wallet);
|
|
1001
|
-
expect(roleError).toBeUndefined();
|
|
1002
|
-
log('roleId', roleId);
|
|
1003
|
-
// Create a channel gated by the above role in the space contract.
|
|
1004
|
-
const { channelId, error: channelError } = await createChannel(bobSpaceDapp, bobProvider, spaceId, 'custom-role-gated-channel', [roleId.valueOf()], bobProvider.wallet);
|
|
1005
|
-
expect(channelError).toBeUndefined();
|
|
1006
|
-
log('channelId', channelId);
|
|
1007
|
-
// Then, establish a stream for the channel on the river node.
|
|
1008
|
-
const { streamId: channelStreamId } = await bob.createChannel(spaceId, 'nft-gated-channel', 'talk about nfts here', channelId);
|
|
1009
|
-
expect(channelStreamId).toEqual(channelId);
|
|
1010
|
-
// As the space owner, Bob should always be able to join the channel regardless of the custom role.
|
|
1011
|
-
await expect(bob.joinStream(channelId)).resolves.not.toThrow();
|
|
1012
|
-
// Join alice to the town so she can attempt to join the role-gated channel.
|
|
1013
|
-
// Alice should have no issue joining the space and default channel for an "everyone" town.
|
|
1014
|
-
await expectUserCanJoin(spaceId, defaultChannelId, 'alice', alice, aliceSpaceDapp, alicesWallet.address, aliceProvider.wallet);
|
|
1015
|
-
// Add carol to the space also so she can attempt to join role-gated channels.
|
|
1016
|
-
await expectUserCanJoin(spaceId, defaultChannelId, 'carol', carol, carolSpaceDapp, carolsWallet.address, carolProvider.wallet);
|
|
1017
|
-
return {
|
|
1018
|
-
alice,
|
|
1019
|
-
bob,
|
|
1020
|
-
carol,
|
|
1021
|
-
alicesWallet,
|
|
1022
|
-
bobsWallet,
|
|
1023
|
-
carolsWallet,
|
|
1024
|
-
aliceProvider,
|
|
1025
|
-
bobProvider,
|
|
1026
|
-
carolProvider,
|
|
1027
|
-
aliceSpaceDapp,
|
|
1028
|
-
bobSpaceDapp,
|
|
1029
|
-
carolSpaceDapp,
|
|
1030
|
-
spaceId,
|
|
1031
|
-
defaultChannelId,
|
|
1032
|
-
channelId,
|
|
1033
|
-
roleId,
|
|
1034
|
-
};
|
|
1035
|
-
}
|
|
1036
|
-
export async function expectUserCanJoinChannel(client, spaceDapp, spaceId, channelId) {
|
|
1037
|
-
// Space dapp should evaluate the user as entitled to the channel
|
|
1038
|
-
await expect(spaceDapp.isEntitledToChannel(spaceId, channelId, client.userId, Permission.Read, getXchainConfigForTesting())).resolves.toBeTruthy();
|
|
1039
|
-
// Stream node should allow the join
|
|
1040
|
-
await expect(client.joinStream(channelId)).resolves.not.toThrow();
|
|
1041
|
-
const userStreamView = (await client.waitForStream(makeUserStreamId(client.userId))).view;
|
|
1042
|
-
// Wait for alice's user stream to have the join
|
|
1043
|
-
await waitFor(() => expect(userStreamView.userContent.isMember(channelId, MembershipOp.SO_JOIN), `waitFor ${channelId} in ${client.userStreamId}`).toBe(true));
|
|
1044
|
-
}
|
|
1045
|
-
export async function expectUserCannotJoinChannel(client, spaceDapp, spaceId, channelId) {
|
|
1046
|
-
// Space dapp should evaluate the user as not entitled to the channel
|
|
1047
|
-
await expect(spaceDapp.isEntitledToChannel(spaceId, channelId, client.userId, Permission.Read, getXchainConfigForTesting())).resolves.toBeFalsy();
|
|
1048
|
-
// Stream node should not allow the join
|
|
1049
|
-
await expect(client.joinStream(channelId)).rejects.toThrow(/7:PERMISSION_DENIED/);
|
|
1050
|
-
}
|
|
1051
445
|
export const findMessageByText = (events, text) => {
|
|
1052
446
|
return events.find((event) => event.content?.kind === RiverTimelineEvent.ChannelMessage &&
|
|
1053
447
|
event.content.body === text);
|
|
@@ -1070,17 +464,4 @@ export function extractMemberBlockchainTransactions(client, channelId) {
|
|
|
1070
464
|
throw new Error('no stream found');
|
|
1071
465
|
return stream.view.getMembers().tokenTransfers;
|
|
1072
466
|
}
|
|
1073
|
-
export async function waitForRoleCreated(spaceDapp, spaceId, txn) {
|
|
1074
|
-
const receipt = await spaceDapp.provider.waitForTransaction(txn.hash);
|
|
1075
|
-
if (receipt.status === 0) {
|
|
1076
|
-
return { roleId: undefined, error: new Error('Transaction failed') };
|
|
1077
|
-
}
|
|
1078
|
-
const parsedLogs = await spaceDapp.parseSpaceLogs(spaceId, receipt.logs);
|
|
1079
|
-
const roleCreatedEvent = parsedLogs.find((log) => log?.name === 'RoleCreated');
|
|
1080
|
-
if (!roleCreatedEvent) {
|
|
1081
|
-
return { roleId: undefined, error: new Error('RoleCreated event not found') };
|
|
1082
|
-
}
|
|
1083
|
-
const roleId = roleCreatedEvent.args[1].toNumber();
|
|
1084
|
-
return { roleId, error: undefined };
|
|
1085
|
-
}
|
|
1086
467
|
//# sourceMappingURL=testUtils.js.map
|