crowdypy 0.29.0.dev1__tar.gz → 0.30.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.29.0.dev1 → crowdypy-0.30.0.dev1}/AGENTS.md +7 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/MIGRATION.md +25 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/PKG-INFO +3 -1
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/README.md +2 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/docs/compatibility.md +1 -1
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/docs/parity-matrix.md +8 -3
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/native/session_binding.cpp +61 -14
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/pyproject.toml +7 -7
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/stores.py +365 -53
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_version.py +1 -1
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/player_host/schemas.v1.json +2 -2
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/stores.py +385 -52
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/fixtures/player-host.v1.json +2 -2
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/test_durable_stores.py +81 -1
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/test_world_session.py +33 -9
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/uv.lock +1 -1
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/CMakeLists.txt +1 -1
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/PROVENANCE.md +1 -1
- crowdypy-0.30.0.dev1/vendor/CrowdyCPP/include/crowdy/session/chunk_store.hpp +739 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/world_session.hpp +3 -2
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/package.json +4 -4
- crowdypy-0.30.0.dev1/vendor/CrowdyCPP/src/session/chunk_store.cpp +1381 -0
- crowdypy-0.30.0.dev1/vendor/CrowdyCPP/src/session/world_session.cpp +197 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/crowdy-studio-diagnostics.v1.json +2 -2
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/crowdyjs-studio-layout.v1.json +2 -2
- crowdypy-0.29.0.dev1/vendor/CrowdyCPP/include/crowdy/session/chunk_store.hpp +0 -592
- crowdypy-0.29.0.dev1/vendor/CrowdyCPP/src/session/world_session.cpp +0 -452
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/.gitattributes +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/.gitignore +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/.gitleaks.toml +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/CMakeLists.txt +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/LICENSE +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/SECURITY.md +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/benchmarks/README.md +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/benchmarks/bench_replication.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/docs/e2e-coverage.md +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/licenses/OpenSSL-LICENSE.txt +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/native/common.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/native/module.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/native/replication.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/native/replication_binding.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/native/voice_binding.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/native/wire_binding.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/actors/Actor.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/actors/Actors.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/actors/BatchLookupActors.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/actors/CreateActor.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/actors/DeleteActor.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/actors/UpdateActor.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/actors/UpdateActorState.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/appAccess/AppAccessTiers.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/appAccess/AppFeatures.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/appAccess/AppGrantMemberCandidates.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/appAccess/AppUserAccessByApp.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/appAccess/ArchiveAccessTier.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/appAccess/ClaimFreeAppAccess.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/appAccess/CreateAccessTier.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/appAccess/DefineAppFeature.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/appAccess/GrantAppAccess.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/appAccess/GrantMyAppAccess.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/appAccess/GrantTierFeature.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/appAccess/MyAppAccess.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/appAccess/RevokeAppAccess.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/appAccess/RevokeTierFeature.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/appAccess/RuntimePermissions.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/appAccess/SuspendAppAccess.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/appAccess/TierFeatures.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/appAccess/UpdateAccessTier.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/apps/App.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/apps/AppBySlug.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/apps/AppDiscovery.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/apps/AppRecording.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/apps/AppsForOrg.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/apps/ArchiveApp.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/apps/CodeAdmissions.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/apps/CreateApp.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/apps/MarketplaceApps.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/apps/MyApps.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/apps/PlaceableDatacenters.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/apps/SetAppRequiredDocuments.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/apps/UpdateApp.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/auth/Logout.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/auth/LogoutAllDevices.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/avatars/Avatars.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/billing/AppBudget.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/billing/AppBudgets.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/billing/SetAppBudget.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/billing/WalletBalance.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/billing/WalletTransactions.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/channels/AddChannelMember.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/channels/BanChannelMember.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/channels/Channel.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/channels/ChannelMembers.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/channels/ChannelPolicy.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/channels/ChannelRoles.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/channels/Channels.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/channels/CreateChannel.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/channels/CreateChannelRole.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/channels/DeleteChannel.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/channels/DeleteChannelRole.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/channels/JoinChannel.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/channels/LeaveChannel.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/channels/MyChannels.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/channels/RemoveChannelMember.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/channels/RequestToJoinChannel.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/channels/SetChannelMemberRoles.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/channels/SetChannelPolicy.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/channels/UnbanChannelMember.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/channels/UpdateChannel.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/channels/UpdateChannelRole.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/chunks/GetChunk.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/chunks/GetChunkLods.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/chunks/GetChunksByDistance.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/chunks/GetVoxelList.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/chunks/UpdateChunk.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/chunks/UpdateChunkLods.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/chunks/UpdateChunkState.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/crowdyStudio/CrowdyStudio.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/exec/Exec.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/gameApps/GameApps.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/grids/CreateGridChannel.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/grids/GridChannels.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/grids/MintGridToken.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/host/Host.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/inputLog/InputLogMessages.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/inputLog/InputLogSessions.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/managedPlayers/AppManagedPlayerMods.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/managedPlayers/DeleteManagedPlayer.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/managedPlayers/EndManagedPlayerSessions.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/managedPlayers/ManagedPlayer.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/managedPlayers/ManagedPlayerFields.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/managedPlayers/ManagedPlayers.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/managedPlayers/OrgManagedPlayerSettings.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/managedPlayers/OrgSigningKeyFields.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/managedPlayers/OrgSigningKeys.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/managedPlayers/ProvisionManagedPlayers.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/managedPlayers/RegisterOrgSigningKey.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/managedPlayers/RevokeOrgSigningKey.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/managedPlayers/SetAppManagedPlayerMods.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/managedPlayers/UpdateManagedPlayer.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/marketplace/Marketplace.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/moderation/EscalateSafetyReport.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/moderation/ResolveSafetyReport.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/moderation/SafetyReportFields.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/moderation/SafetyReports.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/organizations/CreateOrgRole.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/organizations/CreateOrgToken.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/organizations/CreateOrganization.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/organizations/DeleteOrgRole.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/organizations/InviteOrgMember.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/organizations/MemberRoles.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/organizations/MyOrganizations.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/organizations/OrgMembers.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/organizations/OrgPermissions.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/organizations/OrgRoles.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/organizations/OrgTokens.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/organizations/Organization.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/organizations/OrganizationBySlug.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/organizations/RemoveOrgMember.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/organizations/RevokeOrgToken.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/organizations/UpdateOrgMemberRoles.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/organizations/UpdateOrgRole.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/organizations/UpdateOrgToken.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/payments/CapturePaypalCheckout.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/payments/CreateCheckout.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/payments/MyCheckouts.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/platform/PlatformConfig.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/platform/TerritoryPolicies.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/playerWallet/PlayerWallet.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/quotas/DeleteQuota.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/quotas/EffectiveQuota.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/quotas/QuotasForApp.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/quotas/QuotasForOrg.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/quotas/SetQuota.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/safety/AcceptContact.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/safety/BlockPlayer.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/safety/CommSettingsFields.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/safety/ContactRequests.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/safety/FileSafetyReport.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/safety/MyBlocks.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/safety/MyCommSettings.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/safety/MyContacts.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/safety/PlayerContactFields.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/safety/RemoveContact.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/safety/RequestContact.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/safety/RequestParentalConsent.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/safety/SetMyCommSettings.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/safety/UnblockPlayer.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/serverStatus/ActiveGraphQLServers.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/serverStatus/GameClientBootstrap.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/serverStatus/GraphqlServers.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/serverStatus/ServerWithLeastClients.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/serverStatus/VersionInfo.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/sharedEnvironment/SharedEnvironment.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/state/DeleteUserAppState.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/state/UpdateUserAppState.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/state/UserAppState.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/state/UserAppStates.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/teams/AddTeamMember.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/teams/BanTeamMember.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/teams/CreateTeam.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/teams/CreateTeamRole.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/teams/DeleteTeam.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/teams/DeleteTeamRole.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/teams/JoinTeam.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/teams/LeaveTeam.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/teams/MyTeams.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/teams/RemoveTeamMember.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/teams/RequestToJoinTeam.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/teams/SetTeamMemberRoles.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/teams/SetTeamPolicy.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/teams/Team.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/teams/TeamMembers.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/teams/TeamPolicy.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/teams/TeamRoles.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/teams/Teams.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/teams/UnbanTeamMember.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/teams/UpdateTeam.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/teams/UpdateTeamRole.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/teleport/TeleportRequest.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/usage/AppGraphqlOperations.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/usage/AppUsageSummary.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/usage/PlayerPulse.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/users/DeleteMyAccount.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/users/FreePlayWindow.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/users/Me.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/users/PlayerProfile.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/users/UpdateGamertag.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/users/UpdateUserState.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/users/User.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/voxels/ListVoxelUpdatesByDistance.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/voxels/ListVoxels.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/voxels/RollbackVoxelUpdates.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/voxels/UpdateVoxel.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/operations/voxels/VoxelUpdateHistory.graphql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/schema.gql +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/scripts/_pins.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/scripts/ci/assert_default_origin.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/scripts/ci/build_openssl.sh +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/scripts/ci/check_content_policy.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/scripts/ci/check_pin_tiers.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/scripts/ci/cibw_before_all_linux.sh +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/scripts/ci/resolve-release-tier.sh +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/scripts/ci/resolve-release-tier.test.sh +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/scripts/ci/resolve_pypi_version.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/scripts/ci/stamp_version.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/scripts/ci/verify_artifacts.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/scripts/codegen.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/scripts/schema_drift.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/scripts/schema_sync.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/scripts/unasync.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/scripts/vendor_crowdycpp.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/__init__.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_concurrency.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_default_origin.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_generated/__init__.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_generated/enums.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_generated/inputs.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_generated/operations.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_grid.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_native.pyi +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_operation.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/__init__.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/client.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/__init__.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/_base.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/actors.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/admin.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/app_access.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/apps.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/auth.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/avatars.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/billing.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/channels.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/chunks.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/crowdy_studio.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/crowdy_studio_agent.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/crowdy_studio_github.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/discovery.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/exec.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/game_apps.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/grids.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/host.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/input_log.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/managed_players.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/marketplace.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/moderation.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/organizations.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/payments.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/platform.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/player_wallet.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/portal.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/quotas.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/safety.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/server_status.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/shared_environment.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/state.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/teams.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/teleport.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/udp.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/usage.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/users.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/domains/voxels.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/graphql.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/grid_scope.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/kit/__init__.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/kit/actions.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/kit/kit.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/kit/mirror.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/kit/modules/__init__.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/kit/modules/arenas.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/kit/modules/encounters.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/kit/modules/instances.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/kit/modules/leaderboards.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/kit/modules/market.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/kit/modules/matchmaking.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/kit/modules/minigames.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/kit/modules/npcs.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/kit/modules/player.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/kit/modules/presence.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/kit/modules/racing.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/kit/modules/sessions.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/kit/modules/tables.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/kit/modules/tactics.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/kit/modules/territory.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/kit/modules/world.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/kit/protocol.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/kit/realtime.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/kit/runtime.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/kit/social.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/kit/store.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/kit/topology.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/kit/wire.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/rediscover.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/_sync/world.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/auth_state.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/client.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/codecs.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/datacenter_redirect.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/__init__.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/_base.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/actors.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/admin.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/app_access.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/apps.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/auth.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/avatars.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/billing.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/channels.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/chunks.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/crowdy_studio.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/crowdy_studio_agent.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/crowdy_studio_github.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/discovery.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/exec.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/game_apps.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/grids.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/host.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/input_log.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/managed_players.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/marketplace.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/moderation.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/organizations.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/payments.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/platform.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/player_wallet.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/portal.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/quotas.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/safety.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/server_status.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/shared_environment.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/state.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/teams.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/teleport.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/udp.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/usage.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/users.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/domains/voxels.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/enums.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/errors.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/estate.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/exec_gateway.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/graphql.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/grid_scope.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/inputs.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/kit/__init__.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/kit/actions.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/kit/kit.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/kit/mirror.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/kit/modules/__init__.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/kit/modules/arenas.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/kit/modules/encounters.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/kit/modules/instances.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/kit/modules/leaderboards.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/kit/modules/market.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/kit/modules/matchmaking.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/kit/modules/minigames.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/kit/modules/npcs.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/kit/modules/player.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/kit/modules/presence.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/kit/modules/racing.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/kit/modules/sessions.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/kit/modules/tables.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/kit/modules/tactics.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/kit/modules/territory.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/kit/modules/world.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/kit/protocol.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/kit/realtime.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/kit/runtime.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/kit/social.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/kit/store.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/kit/topology.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/kit/wire.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/lb_cookie.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/media.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/pkce.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/player_host/__init__.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/player_host/agent_errors.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/player_host/agent_types.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/player_host/json_schema.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/player_host/schemas.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/player_host/types.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/py.typed +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/rediscover.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/replication.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/session.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/studio/__init__.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/studio/client_tick_interval.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/studio/controller.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/studio/diagnostics.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/studio/draft.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/studio/github_draft_store.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/studio/github_new_repo.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/studio/layout.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/studio/models.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/studio/starter_projects.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/subscriptions.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/sync.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/utils.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/wire.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/src/crowdypy/world.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/conftest.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/e2e/__init__.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/e2e/conftest.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/e2e/test_e2e_identity.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/e2e/test_e2e_idle_release.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/e2e/test_e2e_input_log.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/e2e/test_e2e_open_grid_exec_gateway.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/e2e/test_e2e_ranged_channel.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/e2e/test_e2e_replication.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/e2e/test_e2e_studio.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/e2e/test_e2e_teen_safety.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/e2e/test_e2e_world.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/e2e/test_e2e_world_data.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/fixtures/README.md +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/fixtures/binary-wire-fixtures.json +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/fixtures/exec-client-frames.json +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/fixtures/kit-protocol.json +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/fixtures/voice-frames.json +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/__init__.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/domains/__init__.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/domains/test_crowdycpp_roots.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/domains/test_input_log_reads.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/domains/test_managed_players.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/domains/test_org_domains.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/domains/test_safety_domains.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/domains/test_social_domains.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/domains/test_studio_exec_domains.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/domains/test_world_domains.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/test_check_pin_tiers.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/test_core.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/test_estate_moves.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/test_exec_gateway.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/test_fixture_provenance.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/test_github_draft_store.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/test_grid_scope.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/test_kit.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/test_kit_protocol.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/test_lazy_exports.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/test_lb_cookie.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/test_player_host.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/test_refusals.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/test_release_versions.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/test_replication.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/test_sdk_audience.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/test_studio_controller.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/test_studio_diagnostics.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/test_studio_game_editor.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/test_studio_layout.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/test_subscriptions.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/test_transport.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/test_udp_api.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/test_udp_first_send_retry.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/test_voice_frames.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tests/unit/test_wire.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tools/e2e/provision.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tools/fixtures/player_host.mjs +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tools/parity/classifications.toml +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/tools/parity/parity.py +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/LICENSE +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/cmake/CheckPublicHeaders.cmake +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/cmake/CrowdyCPPConfig.cmake.in +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/cmake/CrowdyFindOpus.cmake +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/cmake/studio_layout_fixture.hpp.in +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/client.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/base64.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/bytes.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/clock.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/crypto.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/logger.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/result.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/spsc.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/uuid.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/crowdy.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/default_origin.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/admin.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/auth.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/crowdy_studio.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/crowdy_studio_agent.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/crowdy_studio_github.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/discovery.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/domain_base.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/exec.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/game_apps.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/grids.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/groups.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/marketplace.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/player_wallet.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/portal.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/realtime_control.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/safety.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/server_status.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/types.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/users.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/world_data.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/game_session.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/generated/enums.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/generated/operations.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/async_scope.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/auth_state.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/cancel.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/datacenter_redirect.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/dispatcher.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/errors.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/estate.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/graphql_client.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/http.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/json.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/rediscover.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/subscription_client.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/websocket.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/actions.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/economy.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/genres.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/kit.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/mirror.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/modules.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/protocol.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/realtime.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/runtime.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/social.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/topology.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/wire.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/media/opus.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/media/video_frames.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/media/voice_frames.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/player_host/adapter.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/player_host/player_host.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/player_host/schemas.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/player_host/types.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/replication/connection.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/replication/session_provider.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/replication/types.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/replication/udp_socket.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/codec.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/durable.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/keys.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/stores.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/controller.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/diagnostics.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/editor.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/github.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/github_layout.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/integration.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/layout.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/models.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/runtime.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/wire/codec.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/wire/protocol.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/include/crowdy/world.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/client.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/core/base64.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/core/clock.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/core/crypto_default_unavailable.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/core/crypto_openssl.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/core/crypto_unavailable.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/core/logger.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/core/uuid.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/domains/exec.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/game_session.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/graphql/async_transport.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/graphql/auth_state.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/graphql/error_extensions.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/graphql/errors.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/graphql/graphql_client.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/graphql/http_curl.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/graphql/http_none.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/graphql/json.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/graphql/subscription_client.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/graphql/websocket_curl.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/graphql/websocket_none.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/kit/economy.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/kit/genres.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/kit/mirror.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/kit/modules.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/kit/protocol.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/kit/runtime.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/kit/topology.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/media/opus.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/player_host/schemas.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/player_host/types.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/replication/connection.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/replication/socket_errors.hpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/replication/udp_socket.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/studio/diagnostics.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/studio/editor.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/src/studio/integration.cpp +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/third_party/yyjson/LICENSE +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/third_party/yyjson/yyjson.c +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/third_party/yyjson/yyjson.h +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/exec-client-frames.json +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/exec-gateway-cases.json +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/kit-protocol.json +0 -0
- {crowdypy-0.29.0.dev1 → crowdypy-0.30.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/voice-frames.json +0 -0
|
@@ -246,6 +246,13 @@ The replication system saturates the local network stack, so the binding
|
|
|
246
246
|
16x16x16 one-byte grid cannot hold goes to `ChunkData::overlay`.
|
|
247
247
|
- Do not write voxel types or states into the dense grid from Python. That bypasses the
|
|
248
248
|
overlay, and the echo matching of local edits.
|
|
249
|
+
- Since 0.30.0 (CrowdyCPP 0.82.0) the native store paces and undoes edits; the binding turns its
|
|
250
|
+
own I/O thread, reloads and reconnect catch-up off (`ioThread`, `reloadReplacedChunks`,
|
|
251
|
+
`catchUpOnReconnect` false), because the facade reads the durable store itself and runs
|
|
252
|
+
`catch_up` and the reload of a replaced chunk. A refused, unsent or timed-out edit reaches the
|
|
253
|
+
facade as an `EDIT_REFUSED` event row (`a` packs x/y/z as 16-bit fields, `c` the result,
|
|
254
|
+
`restored` and the error code, `epochMs` the edit id). Read a chunk through `forEachState`,
|
|
255
|
+
`forEachOverlay` and `grid()`: `ChunkData` keeps no public maps any more.
|
|
249
256
|
- The voice helpers (`native/voice_binding.cpp`) bind CrowdyCPP's `voice_frames.hpp`.
|
|
250
257
|
`crowdypy.media` checks every argument as CrowdyJS does first, because CrowdyCPP clamps the
|
|
251
258
|
options CrowdyJS refuses.
|
|
@@ -3,6 +3,31 @@
|
|
|
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.30.0
|
|
7
|
+
|
|
8
|
+
CrowdyJS 18.30.0 and CrowdyCPP 0.82.0 (the ChunkStore rework). Box reads and `since` need ck-api
|
|
9
|
+
v2.67.0. **Breaking** for code that keeps `set_voxel()`'s return value or relies on a realtime
|
|
10
|
+
edit being written back.
|
|
11
|
+
|
|
12
|
+
- **`ensure_around` reads only what the store does not hold**, as boxes (`lowChunk`/`highChunk`)
|
|
13
|
+
read in pages of the size the server applied; a chunk two pages return is applied once
|
|
14
|
+
(`duplicate_page_chunks`). A step along one axis at range 8 reads the 289 chunks it uncovers.
|
|
15
|
+
Range 0 reads one chunk. `CachedChunk` has `voxel_states_truncated` and `stored_at`.
|
|
16
|
+
- **`set_voxel()` returns an edit id, is paced, and is not written back.** At most
|
|
17
|
+
`max_edits_in_flight` (128) are unanswered and `max_edits_per_second` (250) go out a second
|
|
18
|
+
(`chunk_options`); the rest wait, already shown (`queued_edits`, `edits_in_flight`). The server
|
|
19
|
+
records realtime edits, so the chunk is no longer queued for write-back (it was, whole).
|
|
20
|
+
- **A refused edit is undone.** One the server refuses, the connection does not take, or whose
|
|
21
|
+
echo does not come back within `edit_timeout_ms` (10 s) puts the voxel back and reaches
|
|
22
|
+
`on_edit_refused` as a `VoxelEditRefusal` (`reason` `refused`, `not_sent` or `timeout`,
|
|
23
|
+
`restored`, `error_code`, `edit_id`).
|
|
24
|
+
- **A replaced chunk is read again** (`chunk_changed`, `reload_replaced_chunks`), and a seed queued
|
|
25
|
+
for write-back gives way to it. **After the connection comes back**, `catch_up(since)` reads the
|
|
26
|
+
last area's rewritten chunks and those with edits since 30 s before the drop
|
|
27
|
+
(`catch_up_on_reconnect`).
|
|
28
|
+
- A hydration replaces the chunk's states and overlay with the stored copy's and keeps this
|
|
29
|
+
client's unanswered edits over it (the native store's rule since CrowdyCPP 0.82.0).
|
|
30
|
+
|
|
6
31
|
## 0.29.0
|
|
7
32
|
|
|
8
33
|
CrowdyJS 18.29.0 and CrowdyCPP 0.81.0. It needs nothing new on the tier; the bound frames and
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: crowdypy
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.30.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.30.0: the ChunkStore rework.** `ensure_around` reads only what is missing, as boxes, paged; `set_voxel` is paced and returns an edit id, and an edit the server refuses or never echoes is undone (`on_edit_refused`); a replaced chunk is read again and a reconnect catches up; realtime edits are no longer written back. CrowdyJS 18.30.0 and CrowdyCPP 0.82.0. See [MIGRATION.md](MIGRATION.md).
|
|
55
|
+
|
|
54
56
|
**v0.29.0: reconnect commands verify, bound control frames, and `chunk_changed`.** A server's `COMMAND_RECONNECT` verifies again; against replication servers v0.45.0 the reconnect and release frames carry a per-assignment nonce under their HMAC, so one captured earlier is refused (`stats()["stale_bound_control"]`); `chunk_changed` reports a chunk a hub's or mod's `world.set_chunk` replaced. CrowdyJS 18.29.0 and CrowdyCPP 0.81.0. See [MIGRATION.md](MIGRATION.md).
|
|
55
57
|
|
|
56
58
|
**v0.28.0: region reads.** `chunks.by_distance()` and `voxels.list_by_distance()` take a box (`lowChunk`, `highChunk`) as well as a cube, pages are stable and answer the paging applied, `since` filters a chunk read, `voxels.list()` pages, and `game_apps.nearby_grids()` returns your own `permissionKeys`. Needs ck-api v2.67.0. CrowdyJS 18.28.0 and CrowdyCPP 0.80.0. See [MIGRATION.md](MIGRATION.md).
|
|
@@ -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.30.0: the ChunkStore rework.** `ensure_around` reads only what is missing, as boxes, paged; `set_voxel` is paced and returns an edit id, and an edit the server refuses or never echoes is undone (`on_edit_refused`); a replaced chunk is read again and a reconnect catches up; realtime edits are no longer written back. CrowdyJS 18.30.0 and CrowdyCPP 0.82.0. See [MIGRATION.md](MIGRATION.md).
|
|
15
|
+
|
|
14
16
|
**v0.29.0: reconnect commands verify, bound control frames, and `chunk_changed`.** A server's `COMMAND_RECONNECT` verifies again; against replication servers v0.45.0 the reconnect and release frames carry a per-assignment nonce under their HMAC, so one captured earlier is refused (`stats()["stale_bound_control"]`); `chunk_changed` reports a chunk a hub's or mod's `world.set_chunk` replaced. CrowdyJS 18.29.0 and CrowdyCPP 0.81.0. See [MIGRATION.md](MIGRATION.md).
|
|
15
17
|
|
|
16
18
|
**v0.28.0: region reads.** `chunks.by_distance()` and `voxels.list_by_distance()` take a box (`lowChunk`, `highChunk`) as well as a cube, pages are stable and answer the paging applied, `since` filters a chunk read, `voxels.list()` pages, and `game_apps.nearby_grids()` returns your own `permissionKeys`. Needs ck-api v2.67.0. CrowdyJS 18.28.0 and CrowdyCPP 0.80.0. See [MIGRATION.md](MIGRATION.md).
|
|
@@ -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.30.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,14 +4,14 @@ 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.
|
|
7
|
+
- CrowdyJS: `18.30.0` at `4840d76029ffb15a6de6232dab9336f2e9ab6514`
|
|
8
|
+
- CrowdyCPP (native core): `0.82.0` at `c6875412bcea97120b4540b80d9b34504c29acf9`
|
|
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: 1480
|
|
15
15
|
- Portable gap: 0
|
|
16
16
|
- Native equivalent: 47
|
|
17
17
|
- Browser exclusion: 128
|
|
@@ -792,6 +792,9 @@ Generated by `tools/parity/parity.py`; do not edit by hand. Classifications live
|
|
|
792
792
|
| `ChannelsAPI.unban` | covered |
|
|
793
793
|
| `ChannelsAPI.update` | covered |
|
|
794
794
|
| `ChannelsAPI.updateRole` | covered |
|
|
795
|
+
| `ChunkStore.catchUp` | covered |
|
|
796
|
+
| `ChunkStore.duplicatePageChunks` | covered |
|
|
797
|
+
| `ChunkStore.editsInFlight` | covered |
|
|
795
798
|
| `ChunkStore.ensureAround` | covered |
|
|
796
799
|
| `ChunkStore.flush` | covered |
|
|
797
800
|
| `ChunkStore.get` | covered |
|
|
@@ -799,9 +802,11 @@ Generated by `tools/parity/parity.py`; do not edit by hand. Classifications live
|
|
|
799
802
|
| `ChunkStore.list` | covered |
|
|
800
803
|
| `ChunkStore.markDirty` | covered |
|
|
801
804
|
| `ChunkStore.onChunkChanged` | covered |
|
|
805
|
+
| `ChunkStore.onEditRefused` | covered |
|
|
802
806
|
| `ChunkStore.onWriteBackFailed` | covered |
|
|
803
807
|
| `ChunkStore.pendingWriteBacks` | covered |
|
|
804
808
|
| `ChunkStore.pruneBeyond` | covered |
|
|
809
|
+
| `ChunkStore.queuedEdits` | covered |
|
|
805
810
|
| `ChunkStore.revision` | covered |
|
|
806
811
|
| `ChunkStore.seed` | covered |
|
|
807
812
|
| `ChunkStore.setVoxel` | covered |
|
|
@@ -51,6 +51,10 @@ struct SessionEvent {
|
|
|
51
51
|
kDirectMessage,
|
|
52
52
|
kEvent,
|
|
53
53
|
kActorLeft,
|
|
54
|
+
/// An edit undone or not sent (CrowdyCPP 0.82.0): `chunk`; `a` the voxel (x, y, z as
|
|
55
|
+
/// 16-bit fields); `b` its type; `c` the result | restored << 8 | error code << 16;
|
|
56
|
+
/// `epochMs` the edit id.
|
|
57
|
+
kEditRefused,
|
|
54
58
|
};
|
|
55
59
|
int kind = 0;
|
|
56
60
|
std::string lane; // "" for the default lane
|
|
@@ -141,7 +145,8 @@ class PySession {
|
|
|
141
145
|
PySession(PyConnection& conn, const std::string& appId, const std::string& actorUuid,
|
|
142
146
|
int sendHz, std::int64_t keyframeIntervalMs, std::int64_t heartbeatIntervalMs,
|
|
143
147
|
int distance, int decay, std::int64_t staleAfterMs, int historySize,
|
|
144
|
-
std::int64_t reapIntervalMs, int voxelSendDistance
|
|
148
|
+
std::int64_t reapIntervalMs, int voxelSendDistance, int maxEditsInFlight,
|
|
149
|
+
int maxEditsPerSecond, std::int64_t editTimeoutMs)
|
|
145
150
|
: conn_(conn) {
|
|
146
151
|
session::WorldSessionConfig config;
|
|
147
152
|
config.appId = appId;
|
|
@@ -155,6 +160,13 @@ class PySession {
|
|
|
155
160
|
config.actors.historySize = historySize;
|
|
156
161
|
config.chunks.writeBackIntervalMs = 0; // durable write-back is the facade's
|
|
157
162
|
config.chunks.voxelSendDistance = distance_arg(voxelSendDistance);
|
|
163
|
+
// The facade loads, re-reads and catches up itself; its staged source answers inline.
|
|
164
|
+
config.chunks.ioThread = false;
|
|
165
|
+
config.chunks.reloadReplacedChunks = false;
|
|
166
|
+
config.chunks.catchUpOnReconnect = false;
|
|
167
|
+
config.chunks.maxEditsInFlight = maxEditsInFlight;
|
|
168
|
+
config.chunks.maxEditsPerSecond = maxEditsPerSecond;
|
|
169
|
+
config.chunks.editTimeoutMs = editTimeoutMs;
|
|
158
170
|
config.hostHeartbeatIntervalMs = 0; // host election is the facade's
|
|
159
171
|
config.reapIntervalMs = reapIntervalMs;
|
|
160
172
|
auto forward = [this](const replication::SpatialNotification& n) {
|
|
@@ -194,6 +206,20 @@ class PySession {
|
|
|
194
206
|
}
|
|
195
207
|
conn_.attachSession(true);
|
|
196
208
|
watchLane("");
|
|
209
|
+
session_->chunks().onEditRefused([this](const session::EditOutcome& o) {
|
|
210
|
+
SessionEvent e;
|
|
211
|
+
e.kind = SessionEvent::kEditRefused;
|
|
212
|
+
e.hasUuid = false;
|
|
213
|
+
e.chunk = o.coord;
|
|
214
|
+
e.a = (static_cast<std::int64_t>(static_cast<std::uint16_t>(o.x)) << 32) |
|
|
215
|
+
(static_cast<std::int64_t>(static_cast<std::uint16_t>(o.y)) << 16) |
|
|
216
|
+
static_cast<std::int64_t>(static_cast<std::uint16_t>(o.z));
|
|
217
|
+
e.b = o.voxelType;
|
|
218
|
+
e.c = static_cast<std::int64_t>(o.result) | (o.restored ? 1 << 8 : 0) |
|
|
219
|
+
(static_cast<std::int64_t>(o.errorCode) << 16);
|
|
220
|
+
e.epochMs = static_cast<std::int64_t>(o.editId);
|
|
221
|
+
events_.push_back(std::move(e));
|
|
222
|
+
});
|
|
197
223
|
session_->chunks().onChunkChanged([this](const session::ChunkData& chunk) {
|
|
198
224
|
if (!watchChunks_) return;
|
|
199
225
|
SessionEvent e;
|
|
@@ -464,14 +490,15 @@ class PySession {
|
|
|
464
490
|
const session::ChunkData* c = live().chunks().find(coord_of(x, y, z));
|
|
465
491
|
if (!c) return std::nullopt;
|
|
466
492
|
nb::dict states;
|
|
467
|
-
|
|
493
|
+
c->forEachState([&](int index, const session::VoxelStateView& state) {
|
|
468
494
|
states[nb::int_(index)] = nb::make_tuple(state.voxelType, blob(state.state));
|
|
495
|
+
});
|
|
469
496
|
nb::list overlay;
|
|
470
|
-
|
|
471
|
-
overlay.append(
|
|
472
|
-
|
|
497
|
+
c->forEachOverlay([&](const session::OverlayVoxel& wide) {
|
|
498
|
+
overlay.append(nb::make_tuple(wide.x, wide.y, wide.z, wide.voxelType, blob(wide.state)));
|
|
499
|
+
});
|
|
473
500
|
return nb::make_tuple(
|
|
474
|
-
nb::bytes(reinterpret_cast<const char*>(c->
|
|
501
|
+
nb::bytes(reinterpret_cast<const char*>(c->grid()), session::kChunkVolume), states,
|
|
475
502
|
c->hydratedAtMs, overlay);
|
|
476
503
|
}
|
|
477
504
|
|
|
@@ -519,25 +546,40 @@ class PySession {
|
|
|
519
546
|
std::optional<nb::tuple> voxelStateAt(std::int64_t x, std::int64_t y, std::int64_t z, int vx,
|
|
520
547
|
int vy, int vz) {
|
|
521
548
|
std::lock_guard lock(conn_.consumerMutex());
|
|
522
|
-
const
|
|
549
|
+
const auto s = live().chunks().voxelStateAt(coord_of(x, y, z), vx, vy, vz);
|
|
523
550
|
if (!s) return std::nullopt;
|
|
524
551
|
return nb::make_tuple(s->voxelType, blob(s->state));
|
|
525
552
|
}
|
|
526
553
|
|
|
527
|
-
|
|
528
|
-
|
|
554
|
+
/// Returns (edit id, the sequence number it went out with, or -1 while it waits its turn).
|
|
555
|
+
nb::tuple setVoxel(std::int64_t x, std::int64_t y, std::int64_t z, int vx, int vy, int vz,
|
|
556
|
+
int voxelType, nb::handle state, bool optimistic) {
|
|
529
557
|
BufferView body(state);
|
|
530
558
|
const std::int16_t type = i16_arg(voxelType, "voxel type");
|
|
531
|
-
Result<std::
|
|
559
|
+
Result<std::uint64_t> result = Errc::InvalidArgument;
|
|
560
|
+
int sequence = -1;
|
|
532
561
|
{
|
|
533
562
|
nb::gil_scoped_release release;
|
|
534
563
|
std::lock_guard lock(conn_.consumerMutex());
|
|
535
564
|
auto& s = live();
|
|
536
565
|
result = s.chunks().setVoxel(coord_of(x, y, z), vx, vy, vz, type, body.bytes(), s.actorUuid(),
|
|
537
566
|
optimistic);
|
|
538
|
-
if (result.ok())
|
|
567
|
+
if (result.ok()) {
|
|
568
|
+
if (auto seq = s.chunks().sequenceOf(result.value())) sequence = *seq;
|
|
569
|
+
}
|
|
539
570
|
}
|
|
540
|
-
|
|
571
|
+
if (!result.ok()) raise(result.error(), "setVoxel");
|
|
572
|
+
return nb::make_tuple(result.value(), sequence);
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
std::size_t editsInFlight() {
|
|
576
|
+
std::lock_guard lock(conn_.consumerMutex());
|
|
577
|
+
return live().chunks().editsInFlight();
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
std::size_t queuedEdits() {
|
|
581
|
+
std::lock_guard lock(conn_.consumerMutex());
|
|
582
|
+
return live().chunks().queuedEdits();
|
|
541
583
|
}
|
|
542
584
|
|
|
543
585
|
/// Insert a chunk the facade loaded from the durable store, or generated.
|
|
@@ -736,6 +778,7 @@ void register_session(nb::module_& m) {
|
|
|
736
778
|
m.attr("DIRECT_MESSAGE") = static_cast<int>(SessionEvent::kDirectMessage);
|
|
737
779
|
m.attr("EVENT") = static_cast<int>(SessionEvent::kEvent);
|
|
738
780
|
m.attr("ACTOR_LEFT") = static_cast<int>(SessionEvent::kActorLeft);
|
|
781
|
+
m.attr("EDIT_REFUSED") = static_cast<int>(SessionEvent::kEditRefused);
|
|
739
782
|
m.attr("MAX_STATE_BYTES") = session::kMaxStateBytes;
|
|
740
783
|
m.attr("CHUNK_VOLUME") = session::kChunkVolume;
|
|
741
784
|
|
|
@@ -762,13 +805,15 @@ void register_session(nb::module_& m) {
|
|
|
762
805
|
|
|
763
806
|
nb::class_<PySession>(m, "WorldSession")
|
|
764
807
|
.def(nb::init<PyConnection&, const std::string&, const std::string&, int, std::int64_t,
|
|
765
|
-
std::int64_t, int, int, std::int64_t, int, std::int64_t, int
|
|
808
|
+
std::int64_t, int, int, std::int64_t, int, std::int64_t, int, int, int,
|
|
809
|
+
std::int64_t>(),
|
|
766
810
|
nb::arg("connection"), nb::arg("app_id"), nb::arg("actor_uuid") = "",
|
|
767
811
|
nb::arg("send_hz") = 5, nb::arg("keyframe_interval_ms") = 3000,
|
|
768
812
|
nb::arg("heartbeat_interval_ms") = 2000, nb::arg("distance") = 8, nb::arg("decay") = 1,
|
|
769
813
|
nb::arg("stale_after_ms") = 12000, nb::arg("history_size") = 2,
|
|
770
814
|
nb::arg("reap_interval_ms") = 1000, nb::arg("voxel_send_distance") = 8,
|
|
771
|
-
nb::
|
|
815
|
+
nb::arg("max_edits_in_flight") = 128, nb::arg("max_edits_per_second") = 250,
|
|
816
|
+
nb::arg("edit_timeout_ms") = 10000, nb::keep_alive<1, 2>())
|
|
772
817
|
.def("close", &PySession::close)
|
|
773
818
|
.def("tick", &PySession::tick)
|
|
774
819
|
.def("drain_events", &PySession::drainEvents)
|
|
@@ -815,6 +860,8 @@ void register_session(nb::module_& m) {
|
|
|
815
860
|
nb::arg("distance"))
|
|
816
861
|
.def("chunk_revision", &PySession::chunkRevision)
|
|
817
862
|
.def("chunk_count", &PySession::chunkCount)
|
|
863
|
+
.def("edits_in_flight", &PySession::editsInFlight)
|
|
864
|
+
.def("queued_edits", &PySession::queuedEdits)
|
|
818
865
|
.def("recent_errors", &PySession::recentErrors, nb::arg("limit") = SIZE_MAX)
|
|
819
866
|
.def("error_total", &PySession::errorTotal)
|
|
820
867
|
.def("clear_errors", &PySession::clearErrors)
|
|
@@ -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.30.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.30.0"
|
|
123
|
+
commit = "4840d76029ffb15a6de6232dab9336f2e9ab6514"
|
|
124
124
|
|
|
125
125
|
[tool.crowdypy.crowdycpp]
|
|
126
|
-
version = "0.
|
|
127
|
-
tag = "dev/v0.
|
|
128
|
-
commit = "
|
|
129
|
-
tree-sha256 = "
|
|
126
|
+
version = "0.82.0"
|
|
127
|
+
tag = "dev/v0.82.0"
|
|
128
|
+
commit = "c6875412bcea97120b4540b80d9b34504c29acf9"
|
|
129
|
+
tree-sha256 = "44dca0b0bd34d575808e5bf7a1ca6944ce779a790b9187894761541623a0f3ec"
|
|
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.
|