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