crowdypy 0.14.2.dev1__tar.gz → 0.15.0.dev1__tar.gz
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.
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/MIGRATION.md +13 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/PKG-INFO +5 -2
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/README.md +4 -1
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/docs/compatibility.md +1 -1
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/docs/parity-matrix.md +7 -4
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/native/session_binding.cpp +5 -3
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/pyproject.toml +7 -7
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/udp.py +17 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/stores.py +12 -2
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_version.py +1 -1
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/udp.py +17 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/player_host/schemas.v1.json +2 -2
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/stores.py +12 -2
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/fixtures/player-host.v1.json +2 -2
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_world_session.py +21 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tools/parity/classifications.toml +2 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/uv.lock +1 -1
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/CMakeLists.txt +1 -1
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/PROVENANCE.md +1 -1
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/chunk_store.hpp +7 -3
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/package.json +5 -5
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/crowdy-studio-diagnostics.v1.json +2 -2
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/crowdyjs-studio-layout.v1.json +2 -2
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/.gitattributes +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/.gitignore +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/.gitleaks.toml +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/AGENTS.md +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/CMakeLists.txt +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/LICENSE +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/SECURITY.md +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/benchmarks/README.md +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/benchmarks/bench_replication.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/docs/e2e-coverage.md +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/licenses/OpenSSL-LICENSE.txt +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/native/common.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/native/module.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/native/replication.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/native/replication_binding.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/native/voice_binding.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/native/wire_binding.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/actors/Actor.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/actors/Actors.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/actors/BatchLookupActors.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/actors/CreateActor.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/actors/DeleteActor.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/actors/UpdateActor.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/actors/UpdateActorState.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/AppAccessTiers.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/AppFeatures.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/AppGrantMemberCandidates.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/AppUserAccessByApp.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/ArchiveAccessTier.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/ClaimFreeAppAccess.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/CreateAccessTier.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/DefineAppFeature.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/GrantAppAccess.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/GrantMyAppAccess.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/GrantTierFeature.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/MyAppAccess.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/RevokeAppAccess.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/RevokeTierFeature.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/RuntimePermissions.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/SuspendAppAccess.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/TierFeatures.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/UpdateAccessTier.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/apps/App.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/apps/AppBySlug.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/apps/AppDiscovery.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/apps/AppsForOrg.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/apps/ArchiveApp.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/apps/CodeAdmissions.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/apps/CreateApp.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/apps/MarketplaceApps.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/apps/MyApps.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/apps/PlaceableDatacenters.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/apps/UpdateApp.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/auth/Logout.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/auth/LogoutAllDevices.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/avatars/Avatars.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/billing/AppBudget.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/billing/AppBudgets.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/billing/SetAppBudget.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/billing/WalletBalance.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/billing/WalletTransactions.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/AddChannelMember.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/BanChannelMember.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/Channel.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/ChannelMembers.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/ChannelPolicy.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/ChannelRoles.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/Channels.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/CreateChannel.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/CreateChannelRole.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/DeleteChannel.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/DeleteChannelRole.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/JoinChannel.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/LeaveChannel.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/MyChannels.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/RemoveChannelMember.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/RequestToJoinChannel.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/SetChannelMemberRoles.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/SetChannelPolicy.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/UnbanChannelMember.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/UpdateChannel.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/UpdateChannelRole.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/chunks/GetChunk.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/chunks/GetChunkLods.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/chunks/GetChunksByDistance.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/chunks/GetVoxelList.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/chunks/UpdateChunk.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/chunks/UpdateChunkLods.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/chunks/UpdateChunkState.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/crowdyStudio/CrowdyStudio.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/exec/Exec.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/gameApps/GameApps.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/grids/CreateGridChannel.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/grids/GridChannels.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/grids/MintGridToken.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/host/Host.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/inputLog/InputLogMessages.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/inputLog/InputLogSessions.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/marketplace/Marketplace.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/CreateOrgRole.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/CreateOrgToken.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/CreateOrganization.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/DeleteOrgRole.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/InviteOrgMember.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/MemberRoles.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/MyOrganizations.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/OrgMembers.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/OrgPermissions.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/OrgRoles.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/OrgTokens.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/Organization.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/OrganizationBySlug.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/RemoveOrgMember.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/RevokeOrgToken.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/UpdateOrgMemberRoles.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/UpdateOrgRole.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/UpdateOrgToken.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/payments/CapturePaypalCheckout.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/payments/CreateCheckout.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/payments/MyCheckouts.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/platform/PlatformConfig.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/playerWallet/PlayerWallet.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/quotas/DeleteQuota.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/quotas/EffectiveQuota.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/quotas/QuotasForApp.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/quotas/QuotasForOrg.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/quotas/SetQuota.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/serverStatus/ActiveGraphQLServers.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/serverStatus/GameClientBootstrap.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/serverStatus/GraphqlServers.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/serverStatus/ServerWithLeastClients.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/serverStatus/VersionInfo.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/sharedEnvironment/SharedEnvironment.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/state/DeleteUserAppState.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/state/UpdateUserAppState.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/state/UserAppState.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/state/UserAppStates.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/AddTeamMember.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/BanTeamMember.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/CreateTeam.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/CreateTeamRole.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/DeleteTeam.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/DeleteTeamRole.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/JoinTeam.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/LeaveTeam.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/MyTeams.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/RemoveTeamMember.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/RequestToJoinTeam.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/SetTeamMemberRoles.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/SetTeamPolicy.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/Team.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/TeamMembers.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/TeamPolicy.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/TeamRoles.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/Teams.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/UnbanTeamMember.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/UpdateTeam.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/UpdateTeamRole.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teleport/TeleportRequest.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/usage/AppGraphqlOperations.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/usage/AppUsageSummary.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/usage/PlayerPulse.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/users/DeleteMyAccount.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/users/FreePlayWindow.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/users/Me.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/users/PlayerProfile.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/users/UpdateGamertag.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/users/UpdateUserState.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/users/User.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/voxels/ListVoxelUpdatesByDistance.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/voxels/ListVoxels.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/voxels/RollbackVoxelUpdates.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/voxels/UpdateVoxel.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/voxels/VoxelUpdateHistory.graphql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/schema.gql +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/scripts/_pins.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/scripts/ci/assert_default_origin.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/scripts/ci/build_openssl.sh +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/scripts/ci/check_content_policy.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/scripts/ci/check_pin_tiers.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/scripts/ci/cibw_before_all_linux.sh +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/scripts/ci/resolve-release-tier.sh +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/scripts/ci/resolve-release-tier.test.sh +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/scripts/ci/resolve_pypi_version.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/scripts/ci/stamp_version.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/scripts/ci/verify_artifacts.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/scripts/codegen.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/scripts/schema_drift.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/scripts/schema_sync.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/scripts/unasync.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/scripts/vendor_crowdycpp.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/__init__.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_concurrency.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_default_origin.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_generated/__init__.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_generated/enums.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_generated/inputs.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_generated/operations.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_grid.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_native.pyi +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_operation.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/__init__.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/client.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/__init__.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/_base.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/actors.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/admin.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/app_access.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/apps.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/auth.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/avatars.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/billing.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/channels.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/chunks.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/crowdy_studio.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/crowdy_studio_agent.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/crowdy_studio_github.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/discovery.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/exec.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/game_apps.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/grids.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/host.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/input_log.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/marketplace.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/organizations.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/payments.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/platform.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/player_wallet.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/portal.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/quotas.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/server_status.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/shared_environment.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/state.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/teams.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/teleport.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/usage.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/users.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/voxels.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/graphql.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/grid_scope.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/__init__.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/actions.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/kit.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/mirror.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/__init__.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/arenas.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/encounters.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/instances.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/leaderboards.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/market.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/matchmaking.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/minigames.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/npcs.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/player.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/presence.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/racing.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/sessions.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/tables.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/tactics.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/territory.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/world.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/protocol.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/realtime.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/runtime.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/social.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/store.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/topology.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/wire.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/rediscover.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/world.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/auth_state.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/client.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/codecs.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/datacenter_redirect.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/__init__.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/_base.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/actors.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/admin.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/app_access.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/apps.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/auth.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/avatars.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/billing.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/channels.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/chunks.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/crowdy_studio.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/crowdy_studio_agent.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/crowdy_studio_github.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/discovery.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/exec.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/game_apps.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/grids.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/host.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/input_log.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/marketplace.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/organizations.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/payments.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/platform.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/player_wallet.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/portal.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/quotas.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/server_status.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/shared_environment.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/state.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/teams.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/teleport.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/usage.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/users.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/voxels.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/enums.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/errors.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/estate.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/exec_gateway.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/graphql.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/grid_scope.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/inputs.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/__init__.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/actions.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/kit.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/mirror.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/__init__.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/arenas.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/encounters.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/instances.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/leaderboards.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/market.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/matchmaking.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/minigames.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/npcs.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/player.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/presence.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/racing.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/sessions.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/tables.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/tactics.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/territory.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/world.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/protocol.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/realtime.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/runtime.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/social.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/store.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/topology.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/wire.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/lb_cookie.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/media.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/pkce.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/player_host/__init__.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/player_host/agent_errors.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/player_host/agent_types.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/player_host/json_schema.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/player_host/schemas.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/player_host/types.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/py.typed +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/rediscover.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/replication.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/session.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/studio/__init__.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/studio/client_tick_interval.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/studio/controller.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/studio/diagnostics.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/studio/github_new_repo.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/studio/layout.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/studio/models.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/studio/starter_projects.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/subscriptions.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/sync.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/utils.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/wire.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/world.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/conftest.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/e2e/__init__.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/e2e/conftest.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/e2e/test_e2e_identity.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/e2e/test_e2e_input_log.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/e2e/test_e2e_open_grid_exec_gateway.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/e2e/test_e2e_ranged_channel.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/e2e/test_e2e_replication.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/e2e/test_e2e_studio.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/e2e/test_e2e_world.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/e2e/test_e2e_world_data.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/fixtures/README.md +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/fixtures/binary-wire-fixtures.json +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/fixtures/exec-client-frames.json +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/fixtures/kit-protocol.json +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/fixtures/voice-frames.json +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/__init__.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/domains/__init__.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/domains/test_crowdycpp_roots.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/domains/test_input_log_reads.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/domains/test_org_domains.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/domains/test_social_domains.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/domains/test_studio_exec_domains.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/domains/test_world_domains.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_check_pin_tiers.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_core.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_durable_stores.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_estate_moves.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_exec_gateway.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_fixture_provenance.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_grid_scope.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_kit.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_kit_protocol.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_lazy_exports.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_player_host.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_refusals.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_release_versions.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_replication.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_sdk_audience.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_studio_controller.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_studio_diagnostics.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_studio_layout.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_subscriptions.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_transport.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_udp_api.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_voice_frames.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_wire.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tools/e2e/provision.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tools/fixtures/player_host.mjs +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tools/parity/parity.py +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/LICENSE +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/cmake/CheckPublicHeaders.cmake +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/cmake/CrowdyCPPConfig.cmake.in +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/cmake/CrowdyFindOpus.cmake +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/cmake/studio_layout_fixture.hpp.in +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/client.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/base64.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/bytes.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/clock.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/crypto.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/logger.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/result.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/spsc.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/uuid.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/crowdy.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/default_origin.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/admin.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/auth.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/crowdy_studio.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/crowdy_studio_agent.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/crowdy_studio_github.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/discovery.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/domain_base.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/exec.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/game_apps.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/grids.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/groups.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/marketplace.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/player_wallet.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/portal.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/realtime_control.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/server_status.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/types.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/users.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/world_data.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/generated/enums.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/generated/operations.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/async_scope.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/auth_state.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/cancel.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/datacenter_redirect.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/dispatcher.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/errors.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/estate.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/graphql_client.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/http.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/json.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/rediscover.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/subscription_client.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/websocket.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/actions.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/economy.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/genres.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/kit.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/mirror.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/modules.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/protocol.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/realtime.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/runtime.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/social.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/topology.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/wire.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/media/opus.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/media/video_frames.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/media/voice_frames.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/player_host/adapter.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/player_host/player_host.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/player_host/schemas.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/player_host/types.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/replication/connection.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/replication/session_provider.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/replication/types.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/replication/udp_socket.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/codec.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/durable.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/keys.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/stores.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/world_session.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/controller.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/diagnostics.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/editor.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/github.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/github_layout.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/integration.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/layout.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/models.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/runtime.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/wire/codec.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/wire/protocol.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/world.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/client.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/core/base64.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/core/clock.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/core/crypto_default_unavailable.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/core/crypto_openssl.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/core/crypto_unavailable.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/core/logger.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/core/uuid.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/domains/exec.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/graphql/async_transport.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/graphql/auth_state.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/graphql/error_extensions.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/graphql/errors.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/graphql/graphql_client.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/graphql/http_curl.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/graphql/http_none.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/graphql/json.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/graphql/subscription_client.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/graphql/websocket_curl.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/graphql/websocket_none.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/kit/economy.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/kit/genres.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/kit/mirror.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/kit/modules.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/kit/protocol.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/kit/runtime.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/kit/topology.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/media/opus.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/player_host/schemas.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/player_host/types.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/replication/connection.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/replication/socket_errors.hpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/replication/udp_socket.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/session/world_session.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/studio/diagnostics.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/studio/editor.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/studio/integration.cpp +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/third_party/yyjson/LICENSE +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/third_party/yyjson/yyjson.c +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/third_party/yyjson/yyjson.h +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/exec-client-frames.json +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/exec-gateway-cases.json +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/kit-protocol.json +0 -0
- {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/voice-frames.json +0 -0
|
@@ -3,6 +3,19 @@
|
|
|
3
3
|
CrowdyPy is pre-1.0. Within a minor line, patch releases keep source compatibility; each
|
|
4
4
|
new minor may change the API. Read the section for every minor you skip.
|
|
5
5
|
|
|
6
|
+
## 0.15.0
|
|
7
|
+
|
|
8
|
+
CrowdyJS 18.15.0 and CrowdyCPP 0.67.4. Additive.
|
|
9
|
+
|
|
10
|
+
- **`chunks.set_voxel(..., optimistic=False)`**, CrowdyJS's `setVoxel({ optimistic: false })`:
|
|
11
|
+
nothing changes locally and nothing is queued for write-back; the edit is applied when the
|
|
12
|
+
server's echo of it arrives, so the cache holds only what the server accepted. The default
|
|
13
|
+
(`True`) is the edit as before. The native core carries the flag since CrowdyCPP 0.67.4
|
|
14
|
+
(`ChunkStore::setVoxel(..., optimistic)`).
|
|
15
|
+
- **`client.udp.send_generic_spatial(chunk, uuid, payload)`**: an app-defined spatial message
|
|
16
|
+
(opcode 140) that the actors near `chunk` receive as `generic_spatial`; CrowdyJS 18.15.0's
|
|
17
|
+
`udp.sendGenericSpatial`. The replication connection had `send_generic_spatial` already.
|
|
18
|
+
|
|
6
19
|
## 0.14.2
|
|
7
20
|
|
|
8
21
|
CrowdyJS 18.14.0 and CrowdyCPP 0.67.3. No breaking change. `PlayerWalletAPI.charges()` is
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: crowdypy
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.15.0.dev1
|
|
4
4
|
Summary: Official Python SDK for Crowded Kingdoms: typed GraphQL clients and a native UDP replication core
|
|
5
5
|
Keywords: crowded-kingdoms,multiplayer,replication,graphql,sdk,udp
|
|
6
6
|
Author: Crowded Kingdoms
|
|
@@ -51,6 +51,8 @@ CrowdyPy follows the [CrowdyJS](https://github.com/CrowdedKingdoms/CrowdyJS) API
|
|
|
51
51
|
client, bound with [nanobind](https://github.com/wjakob/nanobind) and shipped inside the
|
|
52
52
|
wheel. Python never touches a datagram.
|
|
53
53
|
|
|
54
|
+
**v0.15.0: a voxel edit that waits for the server, and opcode 140 from `client.udp`.** `chunks.set_voxel(..., optimistic=False)` changes nothing locally until the server's echo of the edit arrives; `client.udp.send_generic_spatial` sends an app-defined spatial message. CrowdyJS 18.15.0 and CrowdyCPP 0.67.4. See [MIGRATION.md](MIGRATION.md).
|
|
55
|
+
|
|
54
56
|
**v0.14.2: CrowdyJS 18.14.0 and CrowdyCPP 0.67.3.** `player_wallet.charges()` is deprecated: read `transactions()`, whose `usage_debit` entries are the usage charges.
|
|
55
57
|
|
|
56
58
|
**v0.14.1: the exec socket names a paused app and a switched-off app or type.** `AppPaused`, `AppDisabled`, and `TypeDisabled`. Still CrowdyJS 18.13.0 and CrowdyCPP 0.66.0.
|
|
@@ -326,7 +328,8 @@ states = pose.decode_many(snapshot.state_offsets, snapshot.state_data) # numpy,
|
|
|
326
328
|
`session.chunks` is a helper for 16x16x16 chunks with one byte per voxel. An edit that grid
|
|
327
329
|
cannot hold (a type outside 0-255, a position outside 0-15) is kept in the chunk's
|
|
328
330
|
`overlay()`, and `voxel_type_at` reads it first. The echo of your own `set_voxel` is not
|
|
329
|
-
applied a second time
|
|
331
|
+
applied a second time; with `optimistic=False` the edit is applied only when that echo arrives,
|
|
332
|
+
and nothing is queued for write-back. A game with other addressing reads every edit from
|
|
330
333
|
`session.on("voxel_update", ...)`, which includes those echoes.
|
|
331
334
|
|
|
332
335
|
## Game Kit
|
|
@@ -11,6 +11,8 @@ CrowdyPy follows the [CrowdyJS](https://github.com/CrowdedKingdoms/CrowdyJS) API
|
|
|
11
11
|
client, bound with [nanobind](https://github.com/wjakob/nanobind) and shipped inside the
|
|
12
12
|
wheel. Python never touches a datagram.
|
|
13
13
|
|
|
14
|
+
**v0.15.0: a voxel edit that waits for the server, and opcode 140 from `client.udp`.** `chunks.set_voxel(..., optimistic=False)` changes nothing locally until the server's echo of the edit arrives; `client.udp.send_generic_spatial` sends an app-defined spatial message. CrowdyJS 18.15.0 and CrowdyCPP 0.67.4. See [MIGRATION.md](MIGRATION.md).
|
|
15
|
+
|
|
14
16
|
**v0.14.2: CrowdyJS 18.14.0 and CrowdyCPP 0.67.3.** `player_wallet.charges()` is deprecated: read `transactions()`, whose `usage_debit` entries are the usage charges.
|
|
15
17
|
|
|
16
18
|
**v0.14.1: the exec socket names a paused app and a switched-off app or type.** `AppPaused`, `AppDisabled`, and `TypeDisabled`. Still CrowdyJS 18.13.0 and CrowdyCPP 0.66.0.
|
|
@@ -286,7 +288,8 @@ states = pose.decode_many(snapshot.state_offsets, snapshot.state_data) # numpy,
|
|
|
286
288
|
`session.chunks` is a helper for 16x16x16 chunks with one byte per voxel. An edit that grid
|
|
287
289
|
cannot hold (a type outside 0-255, a position outside 0-15) is kept in the chunk's
|
|
288
290
|
`overlay()`, and `voxel_type_at` reads it first. The echo of your own `set_voxel` is not
|
|
289
|
-
applied a second time
|
|
291
|
+
applied a second time; with `optimistic=False` the edit is applied only when that echo arrives,
|
|
292
|
+
and nothing is queued for write-back. A game with other addressing reads every edit from
|
|
290
293
|
`session.on("voxel_update", ...)`, which includes those echoes.
|
|
291
294
|
|
|
292
295
|
## Game Kit
|
|
@@ -5,7 +5,7 @@ are in `pyproject.toml` (`[project].version`, `[tool.crowdypy.crowdyjs]`,
|
|
|
5
5
|
`[tool.crowdypy.crowdycpp]`); `tests/unit/test_release_versions.py` refuses this page when
|
|
6
6
|
its version disagrees.
|
|
7
7
|
|
|
8
|
-
- CrowdyPy `0.
|
|
8
|
+
- CrowdyPy `0.15.0`
|
|
9
9
|
- API surface: CrowdyJS (the pinned version and commit in `pyproject.toml`); the generated
|
|
10
10
|
`docs/parity-matrix.md` lists every covered method, every native equivalent and every
|
|
11
11
|
browser exclusion with its reason. The gate is strict: there are no portable gaps, and a
|
|
@@ -4,16 +4,16 @@ Generated by `tools/parity/parity.py`; do not edit by hand. Classifications live
|
|
|
4
4
|
|
|
5
5
|
## Target
|
|
6
6
|
|
|
7
|
-
- CrowdyJS: `18.
|
|
8
|
-
- CrowdyCPP (native core): `0.67.
|
|
7
|
+
- CrowdyJS: `18.15.0` at `e21b61e79a1a509b81826fc8db2282c107b2e0ea`
|
|
8
|
+
- CrowdyCPP (native core): `0.67.4` at `830a700b99223555c7d687d5471825701f3dbdf8`
|
|
9
9
|
- schema.gql identical to CrowdyJS's: yes
|
|
10
10
|
- Gate mode: strict portable parity (every portable gap is release-blocking)
|
|
11
11
|
|
|
12
12
|
## Summary
|
|
13
13
|
|
|
14
|
-
- Covered:
|
|
14
|
+
- Covered: 1353
|
|
15
15
|
- Portable gap: 0
|
|
16
|
-
- Native equivalent:
|
|
16
|
+
- Native equivalent: 46
|
|
17
17
|
- Browser exclusion: 113
|
|
18
18
|
- Deprecated roots: 2
|
|
19
19
|
- Unclassified: 0
|
|
@@ -1342,6 +1342,7 @@ Generated by `tools/parity/parity.py`; do not edit by hand. Classifications live
|
|
|
1342
1342
|
| `UdpAPI.sendChannelMessage` | covered |
|
|
1343
1343
|
| `UdpAPI.sendClientEvent` | covered |
|
|
1344
1344
|
| `UdpAPI.sendClientEventAndWait` | covered |
|
|
1345
|
+
| `UdpAPI.sendGenericSpatial` | covered |
|
|
1345
1346
|
| `UdpAPI.sendRangedChannelMessage` | covered |
|
|
1346
1347
|
| `UdpAPI.sendSingleActorMessage` | covered |
|
|
1347
1348
|
| `UdpAPI.sendTextPacket` | covered |
|
|
@@ -1431,6 +1432,7 @@ Generated by `tools/parity/parity.py`; do not edit by hand. Classifications live
|
|
|
1431
1432
|
| `EXEC_CLOSE_ACCESS_ENDED` | covered |
|
|
1432
1433
|
| `EXEC_STATUSES` | covered |
|
|
1433
1434
|
| `ExecModScope` | covered |
|
|
1435
|
+
| `GENERIC_SPATIAL_MAX_PAYLOAD_BYTES` | native equivalent — the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.MAX_LONG_SPATIAL_PAYLOAD |
|
|
1434
1436
|
| `GLUE_HOST_CALL_REQUEST_MAX_BYTES` | browser exclusion — glue that instantiates player WASM inside the browser Web Worker (CLIENT ABI imports, ck_fuel, watchdog) |
|
|
1435
1437
|
| `GLUE_HOST_FUNCTIONS` | browser exclusion — glue that instantiates player WASM inside the browser Web Worker (CLIENT ABI imports, ck_fuel, watchdog) |
|
|
1436
1438
|
| `GLUE_INVOKE_REPLY_MAX_BYTES` | browser exclusion — glue that instantiates player WASM inside the browser Web Worker (CLIENT ABI imports, ck_fuel, watchdog) |
|
|
@@ -1532,6 +1534,7 @@ Generated by `tools/parity/parity.py`; do not edit by hand. Classifications live
|
|
|
1532
1534
|
| `serializeChannelAudio` | native equivalent — the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.encode_channel_audio |
|
|
1533
1535
|
| `serializeChannelMessage` | native equivalent — the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.encode_channel_message with the message type |
|
|
1534
1536
|
| `serializeClientEvent` | native equivalent — the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.encode_long_spatial with the message type |
|
|
1537
|
+
| `serializeGenericSpatial` | native equivalent — the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.encode_long_spatial with the message type |
|
|
1535
1538
|
| `serializeRangedChannelMessage` | native equivalent — the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.encode_ranged_channel_message |
|
|
1536
1539
|
| `serializeSingleActorMessage` | native equivalent — the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.encode_long_spatial with the message type |
|
|
1537
1540
|
| `serializeTextPacket` | native equivalent — the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.encode_long_spatial with the message type |
|
|
@@ -518,7 +518,7 @@ class PySession {
|
|
|
518
518
|
}
|
|
519
519
|
|
|
520
520
|
int setVoxel(std::int64_t x, std::int64_t y, std::int64_t z, int vx, int vy, int vz,
|
|
521
|
-
int voxelType, nb::handle state) {
|
|
521
|
+
int voxelType, nb::handle state, bool optimistic) {
|
|
522
522
|
BufferView body(state);
|
|
523
523
|
const std::int16_t type = i16_arg(voxelType, "voxel type");
|
|
524
524
|
Result<std::uint8_t> result = Errc::InvalidArgument;
|
|
@@ -526,7 +526,8 @@ class PySession {
|
|
|
526
526
|
nb::gil_scoped_release release;
|
|
527
527
|
std::lock_guard lock(conn_.consumerMutex());
|
|
528
528
|
auto& s = live();
|
|
529
|
-
result = s.chunks().setVoxel(coord_of(x, y, z), vx, vy, vz, type, body.bytes(), s.actorUuid()
|
|
529
|
+
result = s.chunks().setVoxel(coord_of(x, y, z), vx, vy, vz, type, body.bytes(), s.actorUuid(),
|
|
530
|
+
optimistic);
|
|
530
531
|
if (result.ok()) s.errors().recordSend(result.value(), session::SendKind::VoxelUpdate, s.actorUuid());
|
|
531
532
|
}
|
|
532
533
|
return sent(result, "setVoxel");
|
|
@@ -798,7 +799,8 @@ void register_session(nb::module_& m) {
|
|
|
798
799
|
.def("voxel_state_at", &PySession::voxelStateAt, nb::arg("x"), nb::arg("y"), nb::arg("z"),
|
|
799
800
|
nb::arg("vx"), nb::arg("vy"), nb::arg("vz"))
|
|
800
801
|
.def("set_voxel", &PySession::setVoxel, nb::arg("x"), nb::arg("y"), nb::arg("z"),
|
|
801
|
-
nb::arg("vx"), nb::arg("vy"), nb::arg("vz"), nb::arg("voxel_type"), nb::arg("state")
|
|
802
|
+
nb::arg("vx"), nb::arg("vy"), nb::arg("vz"), nb::arg("voxel_type"), nb::arg("state"),
|
|
803
|
+
nb::arg("optimistic") = true)
|
|
802
804
|
.def("seed", &PySession::seed, nb::arg("x"), nb::arg("y"), nb::arg("z"), nb::arg("voxels"))
|
|
803
805
|
.def("hydrate", &PySession::hydrate, nb::arg("x"), nb::arg("y"), nb::arg("z"),
|
|
804
806
|
nb::arg("voxels"), nb::arg("entries"))
|
|
@@ -4,7 +4,7 @@ build-backend = "scikit_build_core.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "crowdypy"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.15.0.dev1"
|
|
8
8
|
description = "Official Python SDK for Crowded Kingdoms: typed GraphQL clients and a native UDP replication core"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT AND Apache-2.0"
|
|
@@ -119,14 +119,14 @@ environment = { OPENSSL_ROOT_DIR = "C:/vcpkg/installed/x64-windows-static-md" }
|
|
|
119
119
|
# --------------------------------------------------------------------------------------
|
|
120
120
|
|
|
121
121
|
[tool.crowdypy.crowdyjs]
|
|
122
|
-
version = "18.
|
|
123
|
-
commit = "
|
|
122
|
+
version = "18.15.0"
|
|
123
|
+
commit = "e21b61e79a1a509b81826fc8db2282c107b2e0ea"
|
|
124
124
|
|
|
125
125
|
[tool.crowdypy.crowdycpp]
|
|
126
|
-
version = "0.67.
|
|
127
|
-
tag = "dev/v0.67.
|
|
128
|
-
commit = "
|
|
129
|
-
tree-sha256 = "
|
|
126
|
+
version = "0.67.4"
|
|
127
|
+
tag = "dev/v0.67.4"
|
|
128
|
+
commit = "830a700b99223555c7d687d5471825701f3dbdf8"
|
|
129
|
+
tree-sha256 = "8f1857cc216193cf861bce48b7df975a2e0e93563d45736c4fb2584fcd26d009"
|
|
130
130
|
|
|
131
131
|
# schema.gql and operations/ are CrowdyJS's, copied from the commit pinned above by
|
|
132
132
|
# scripts/schema_sync.py, which records these hashes and re-derives them in CI.
|
|
@@ -365,6 +365,23 @@ class UdpAPI:
|
|
|
365
365
|
connection.flush_sends()
|
|
366
366
|
return connection.wait_for_sequence(sequence, uuid, timeout)
|
|
367
367
|
|
|
368
|
+
def send_generic_spatial(
|
|
369
|
+
self,
|
|
370
|
+
chunk: Sequence[int],
|
|
371
|
+
uuid: str,
|
|
372
|
+
payload: Any,
|
|
373
|
+
*,
|
|
374
|
+
distance: int = 8,
|
|
375
|
+
decay: int = DecayRate.NONE,
|
|
376
|
+
) -> int:
|
|
377
|
+
"""An app-defined spatial message (opcode 140): the server fans it out to the actors
|
|
378
|
+
near ``chunk`` without reading ``payload`` (at most ``wire.MAX_LONG_SPATIAL_PAYLOAD``,
|
|
379
|
+
1,123 bytes), and they receive it as ``generic_spatial``. CrowdyJS's
|
|
380
|
+
``udp.sendGenericSpatial`` (18.15.0) and CrowdyCPP's ``Connection::sendGenericSpatial``."""
|
|
381
|
+
return self._live().send_generic_spatial(
|
|
382
|
+
chunk, uuid, payload, distance=distance, decay=decay
|
|
383
|
+
)
|
|
384
|
+
|
|
368
385
|
def send_single_actor_message(self, chunk: Sequence[int], uuid: str, payload: Any) -> int:
|
|
369
386
|
"""A direct message to one actor: ``chunk`` and ``uuid`` address the TARGET. Not echoed."""
|
|
370
387
|
return self._live().send_single_actor_message(chunk, uuid, payload)
|
|
@@ -739,6 +739,8 @@ class ChunkStore:
|
|
|
739
739
|
z: int,
|
|
740
740
|
voxel_type: int,
|
|
741
741
|
state: Any = None,
|
|
742
|
+
*,
|
|
743
|
+
optimistic: bool = True,
|
|
742
744
|
) -> int:
|
|
743
745
|
"""Apply an edit locally, replicate it, and queue the chunk for write-back. Returns
|
|
744
746
|
the send's sequence number.
|
|
@@ -746,15 +748,23 @@ class ChunkStore:
|
|
|
746
748
|
The position and type are the app's signed 16-bit values; one the dense grid cannot
|
|
747
749
|
hold is kept in the :meth:`overlay`. The encoded state is at most 1,024 bytes. Raises
|
|
748
750
|
``ValueError`` for anything else, before anything changes or is sent. The server's
|
|
749
|
-
echo of the edit is not applied again.
|
|
751
|
+
echo of the edit is not applied again.
|
|
752
|
+
|
|
753
|
+
``optimistic=False`` (CrowdyJS's ``optimistic: false``) changes nothing locally and
|
|
754
|
+
queues nothing for write-back: the edit is applied when the server's echo of it
|
|
755
|
+
arrives, so the cache holds only what the server accepted."""
|
|
750
756
|
coord = _coord(chunk)
|
|
751
757
|
encoded = self._voxel_codec.encode(state) if state is not None else b""
|
|
752
758
|
assert_voxel_edit((x, y, z), voxel_type, encoded)
|
|
753
|
-
sequence: int = self._session._native.set_voxel(
|
|
759
|
+
sequence: int = self._session._native.set_voxel(
|
|
760
|
+
*coord, x, y, z, voxel_type, encoded, optimistic
|
|
761
|
+
)
|
|
754
762
|
self._session.track_send(
|
|
755
763
|
{"kind": "voxelUpdate", "sequence": sequence, "sent_at": _now_ms(),
|
|
756
764
|
"uuid": self._session.actor_uuid, "detail": {"chunk": coord, "x": x, "y": y, "z": z}}
|
|
757
765
|
) # fmt: skip
|
|
766
|
+
if not optimistic:
|
|
767
|
+
return sequence
|
|
758
768
|
meta = self._entry(coord)
|
|
759
769
|
if meta.load_state in ("loading", "missing"):
|
|
760
770
|
meta.load_state = "seeded"
|
|
@@ -371,6 +371,23 @@ class UdpAPI:
|
|
|
371
371
|
connection.flush_sends()
|
|
372
372
|
return await connection.wait_for_sequence(sequence, uuid, timeout)
|
|
373
373
|
|
|
374
|
+
async def send_generic_spatial(
|
|
375
|
+
self,
|
|
376
|
+
chunk: Sequence[int],
|
|
377
|
+
uuid: str,
|
|
378
|
+
payload: Any,
|
|
379
|
+
*,
|
|
380
|
+
distance: int = 8,
|
|
381
|
+
decay: int = DecayRate.NONE,
|
|
382
|
+
) -> int:
|
|
383
|
+
"""An app-defined spatial message (opcode 140): the server fans it out to the actors
|
|
384
|
+
near ``chunk`` without reading ``payload`` (at most ``wire.MAX_LONG_SPATIAL_PAYLOAD``,
|
|
385
|
+
1,123 bytes), and they receive it as ``generic_spatial``. CrowdyJS's
|
|
386
|
+
``udp.sendGenericSpatial`` (18.15.0) and CrowdyCPP's ``Connection::sendGenericSpatial``."""
|
|
387
|
+
return self._live().send_generic_spatial(
|
|
388
|
+
chunk, uuid, payload, distance=distance, decay=decay
|
|
389
|
+
)
|
|
390
|
+
|
|
374
391
|
async def send_single_actor_message(self, chunk: Sequence[int], uuid: str, payload: Any) -> int:
|
|
375
392
|
"""A direct message to one actor: ``chunk`` and ``uuid`` address the TARGET. Not echoed."""
|
|
376
393
|
return self._live().send_single_actor_message(chunk, uuid, payload)
|
|
@@ -851,6 +851,8 @@ class ChunkStore:
|
|
|
851
851
|
z: int,
|
|
852
852
|
voxel_type: int,
|
|
853
853
|
state: Any = None,
|
|
854
|
+
*,
|
|
855
|
+
optimistic: bool = True,
|
|
854
856
|
) -> int:
|
|
855
857
|
"""Apply an edit locally, replicate it, and queue the chunk for write-back. Returns
|
|
856
858
|
the send's sequence number.
|
|
@@ -858,15 +860,23 @@ class ChunkStore:
|
|
|
858
860
|
The position and type are the app's signed 16-bit values; one the dense grid cannot
|
|
859
861
|
hold is kept in the :meth:`overlay`. The encoded state is at most 1,024 bytes. Raises
|
|
860
862
|
``ValueError`` for anything else, before anything changes or is sent. The server's
|
|
861
|
-
echo of the edit is not applied again.
|
|
863
|
+
echo of the edit is not applied again.
|
|
864
|
+
|
|
865
|
+
``optimistic=False`` (CrowdyJS's ``optimistic: false``) changes nothing locally and
|
|
866
|
+
queues nothing for write-back: the edit is applied when the server's echo of it
|
|
867
|
+
arrives, so the cache holds only what the server accepted."""
|
|
862
868
|
coord = _coord(chunk)
|
|
863
869
|
encoded = self._voxel_codec.encode(state) if state is not None else b""
|
|
864
870
|
assert_voxel_edit((x, y, z), voxel_type, encoded)
|
|
865
|
-
sequence: int = self._session._native.set_voxel(
|
|
871
|
+
sequence: int = self._session._native.set_voxel(
|
|
872
|
+
*coord, x, y, z, voxel_type, encoded, optimistic
|
|
873
|
+
)
|
|
866
874
|
self._session.track_send(
|
|
867
875
|
{"kind": "voxelUpdate", "sequence": sequence, "sent_at": _now_ms(),
|
|
868
876
|
"uuid": self._session.actor_uuid, "detail": {"chunk": coord, "x": x, "y": y, "z": z}}
|
|
869
877
|
) # fmt: skip
|
|
878
|
+
if not optimistic:
|
|
879
|
+
return sequence
|
|
870
880
|
meta = self._entry(coord)
|
|
871
881
|
if meta.load_state in ("loading", "missing"):
|
|
872
882
|
meta.load_state = "seeded"
|
|
@@ -417,6 +417,27 @@ def test_the_echo_of_your_own_edit_is_applied_once(chunk: Any) -> None:
|
|
|
417
417
|
assert session.chunks.voxel_type_at(at, 1, 2, 3) == 8
|
|
418
418
|
|
|
419
419
|
|
|
420
|
+
def test_an_edit_that_is_not_optimistic_waits_for_its_echo(chunk: Any) -> None:
|
|
421
|
+
server, connection, session, seen = chunk
|
|
422
|
+
at = (0, 0, 0)
|
|
423
|
+
session.chunks.seed(at, bytes(4096), write_back=False)
|
|
424
|
+
changed: list[Any] = []
|
|
425
|
+
session.chunks.on_chunk_changed(changed.append)
|
|
426
|
+
sequence = session.chunks.set_voxel(at, 1, 2, 3, 9, optimistic=False)
|
|
427
|
+
sent = server.recv()
|
|
428
|
+
assert wire.parse_voxel_payload(sent.payload) == (1, 2, 3, 9, b"")
|
|
429
|
+
session.tick()
|
|
430
|
+
assert changed == [], "nothing changes before the echo"
|
|
431
|
+
assert session.chunks.voxel_type_at(at, 1, 2, 3) == 0
|
|
432
|
+
assert session.chunks.pending_write_backs == 0
|
|
433
|
+
|
|
434
|
+
voxel(server, ME, (1, 2, 3), 9, sequence)
|
|
435
|
+
pump_until(session, connection, lambda: len(seen) == 1)
|
|
436
|
+
tick_until(session, lambda: len(changed) == 1)
|
|
437
|
+
assert session.chunks.voxel_type_at(at, 1, 2, 3) == 9
|
|
438
|
+
assert session.chunks.pending_write_backs == 0, "the echo is the server's, not a local edit"
|
|
439
|
+
|
|
440
|
+
|
|
420
441
|
def test_a_wide_local_edit_is_kept_in_the_overlay_and_sent_as_it_is(chunk: Any) -> None:
|
|
421
442
|
server, connection, session, seen = chunk
|
|
422
443
|
at = (0, 0, 0)
|
|
@@ -139,6 +139,7 @@ GraphQLClient = "AsyncGraphQLClient"
|
|
|
139
139
|
|
|
140
140
|
# --- native-equivalent
|
|
141
141
|
"BUNDLE_HEADER_BYTES" = { kind = "native-equivalent", reason = "the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.bundle() / split_datagram(), which own the bundle layout" }
|
|
142
|
+
"GENERIC_SPATIAL_MAX_PAYLOAD_BYTES" = { kind = "native-equivalent", reason = "the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.MAX_LONG_SPATIAL_PAYLOAD" }
|
|
142
143
|
"BUNDLE_LENGTH_PREFIX_BYTES" = { kind = "native-equivalent", reason = "the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.bundle() / split_datagram(), which own the bundle layout" }
|
|
143
144
|
"execWireIntegers" = { kind = "native-equivalent", reason = "msgspec writes a Python int as a msgpack integer of its width, so there is no float for a hub's integer field to refuse; @msgpack/msgpack writes a JS number of 2^32 or more as a float without it" }
|
|
144
145
|
"BrowserLocalStorageTokenStore" = { kind = "native-equivalent", reason = "token persistence is TokenStore / SessionStore; the localStorage backing is browser-only, and FileTokenStore mirrors its session / app key split" }
|
|
@@ -161,6 +162,7 @@ GraphQLClient = "AsyncGraphQLClient"
|
|
|
161
162
|
"serializeChannelAudio" = { kind = "native-equivalent", reason = "the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.encode_channel_audio" }
|
|
162
163
|
"serializeChannelMessage" = { kind = "native-equivalent", reason = "the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.encode_channel_message with the message type" }
|
|
163
164
|
"serializeClientEvent" = { kind = "native-equivalent", reason = "the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.encode_long_spatial with the message type" }
|
|
165
|
+
"serializeGenericSpatial" = { kind = "native-equivalent", reason = "the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.encode_long_spatial with the message type" }
|
|
164
166
|
"serializeRangedChannelMessage" = { kind = "native-equivalent", reason = "the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.encode_ranged_channel_message" }
|
|
165
167
|
"serializeSingleActorMessage" = { kind = "native-equivalent", reason = "the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.encode_long_spatial with the message type" }
|
|
166
168
|
"serializeTextPacket" = { kind = "native-equivalent", reason = "the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.encode_long_spatial with the message type" }
|
|
@@ -5,4 +5,4 @@ pins under `[tool.crowdypy.crowdycpp]`. It is written by
|
|
|
5
5
|
`scripts/vendor_crowdycpp.py` and checked in CI by re-deriving it from that commit.
|
|
6
6
|
Do not edit it: change CrowdyCPP, release it on the same tier, and re-vendor.
|
|
7
7
|
|
|
8
|
-
Vendored from `dev/v0.67.
|
|
8
|
+
Vendored from `dev/v0.67.4` (`830a700b99223555c7d687d5471825701f3dbdf8`).
|
|
@@ -328,19 +328,23 @@ class ChunkStore {
|
|
|
328
328
|
/// The server delivers every accepted edit back to its sender (Buddy v0.37.0);
|
|
329
329
|
/// ingest() matches that echo to this edit (sender uuid + sequence + voxel) and
|
|
330
330
|
/// does not apply it again, so a local edit fires onChunkChanged once.
|
|
331
|
+
///
|
|
332
|
+
/// `optimistic` false (CrowdyJS `setVoxel({ optimistic: false })`, 0.67.4) changes
|
|
333
|
+
/// nothing locally and marks nothing for write-back: the edit is applied when its echo
|
|
334
|
+
/// arrives, so the cache shows only what the server accepted.
|
|
331
335
|
Result<std::uint8_t> setVoxel(const ChunkCoord& coord, int x, int y, int z,
|
|
332
336
|
std::int16_t voxelType, Bytes voxelState,
|
|
333
|
-
const core::ActorUuid& uuid) {
|
|
337
|
+
const core::ActorUuid& uuid, bool optimistic = true) {
|
|
334
338
|
if (!fitsInt16(x) || !fitsInt16(y) || !fitsInt16(z)) return Errc::InvalidArgument;
|
|
335
339
|
if (voxelState.size() > wire::voxel::kMaxStateSize) return Errc::InvalidArgument;
|
|
336
|
-
applyLocal(coord, x, y, z, voxelType, voxelState);
|
|
340
|
+
if (optimistic) applyLocal(coord, x, y, z, voxelType, voxelState);
|
|
337
341
|
auto seq = conn_.sendVoxelUpdate(coord, uuid, static_cast<std::int16_t>(x),
|
|
338
342
|
static_cast<std::int16_t>(y), static_cast<std::int16_t>(z),
|
|
339
343
|
voxelType, voxelState, options_.voxelSendDistance);
|
|
340
344
|
if (seq.ok()) {
|
|
341
345
|
rememberEdit(coord, voxelKey(static_cast<std::int16_t>(x), static_cast<std::int16_t>(y),
|
|
342
346
|
static_cast<std::int16_t>(z)),
|
|
343
|
-
PendingEdit{uuid, seq.value(), nowMs(),
|
|
347
|
+
PendingEdit{uuid, seq.value(), nowMs(), /*stale=*/!optimistic});
|
|
344
348
|
}
|
|
345
349
|
return seq;
|
|
346
350
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "crowdycpp-maintainer-tools",
|
|
3
|
-
"version": "0.67.
|
|
3
|
+
"version": "0.67.4",
|
|
4
4
|
"private": true,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Offline parity and schema maintenance tools for CrowdyCPP",
|
|
7
7
|
"crowdyjsParityTarget": {
|
|
8
|
-
"version": "18.
|
|
9
|
-
"commit": "
|
|
8
|
+
"version": "18.15.0",
|
|
9
|
+
"commit": "e21b61e79a1a509b81826fc8db2282c107b2e0ea"
|
|
10
10
|
},
|
|
11
11
|
"scripts": {
|
|
12
12
|
"codegen": "node scripts/codegen.mjs",
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
},
|
|
30
30
|
"publishedSchemaSnapshot": {
|
|
31
31
|
"url": "https://docs.crowdedkingdoms.com/schema/game-api.graphql",
|
|
32
|
-
"sourceBlob": "
|
|
32
|
+
"sourceBlob": "ad8c0dea9e2f3eea8185901274294514931500fc",
|
|
33
33
|
"snapshotSha256": "d46a770eff50f8ef6584f5ed937e8347d6f7121da7337469b8d99213fc9a7281",
|
|
34
|
-
"syncedAt": "2026-10-
|
|
34
|
+
"syncedAt": "2026-10-20T07:30:56.926Z"
|
|
35
35
|
}
|
|
36
36
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"fixtureVersion": 1,
|
|
3
3
|
"crowdyJs": {
|
|
4
|
-
"version": "18.
|
|
5
|
-
"commit": "
|
|
4
|
+
"version": "18.15.0",
|
|
5
|
+
"commit": "e21b61e79a1a509b81826fc8db2282c107b2e0ea"
|
|
6
6
|
},
|
|
7
7
|
"storageKey": "ck:crowdy-studio:layout:v1",
|
|
8
8
|
"paneIds": [
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/AppGrantMemberCandidates.graphql
RENAMED
|
File without changes
|
{crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/AppUserAccessByApp.graphql
RENAMED
|
File without changes
|
{crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/ArchiveAccessTier.graphql
RENAMED
|
File without changes
|
{crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/ClaimFreeAppAccess.graphql
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/RevokeTierFeature.graphql
RENAMED
|
File without changes
|
{crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/RuntimePermissions.graphql
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|