crowdypy 0.4.0.dev1__tar.gz → 0.5.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.4.0.dev1 → crowdypy-0.5.0.dev1}/AGENTS.md +6 -2
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/MIGRATION.md +38 -1
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/PKG-INFO +17 -18
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/README.md +16 -17
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/docs/compatibility.md +1 -1
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/docs/e2e-coverage.md +4 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/docs/parity-matrix.md +8 -3
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/gameApps/GameApps.graphql +16 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/pyproject.toml +9 -9
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/schema.gql +54 -6
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_generated/enums.py +1 -1
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_generated/inputs.py +9 -1
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_generated/operations.py +20 -2
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/crowdy_studio_agent.py +2 -1
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/exec.py +95 -4
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/game_apps.py +26 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_version.py +1 -1
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/crowdy_studio_agent.py +2 -1
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/exec.py +99 -3
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/game_apps.py +26 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/exec_gateway.py +17 -2
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/player_host/schemas.v1.json +2 -2
- crowdypy-0.5.0.dev1/tests/e2e/test_e2e_open_grid_exec_gateway.py +203 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/fixtures/player-host.v1.json +2 -2
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/unit/domains/test_crowdycpp_roots.py +2 -2
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/unit/domains/test_world_domains.py +9 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/unit/test_exec_gateway.py +59 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/unit/test_replication.py +6 -1
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/unit/test_studio_controller.py +1 -1
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/unit/test_studio_diagnostics.py +9 -5
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/uv.lock +1 -1
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/CMakeLists.txt +1 -1
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/PROVENANCE.md +1 -1
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/exec.hpp +32 -4
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/game_apps.hpp +30 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/generated/enums.hpp +2 -2
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/generated/operations.hpp +36 -2
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/websocket.hpp +7 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/chunk_store.hpp +3 -3
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/package.json +6 -6
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/src/domains/exec.cpp +155 -9
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/src/graphql/websocket_curl.cpp +10 -4
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/crowdy-studio-diagnostics.v1.json +2 -2
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/crowdyjs-studio-layout.v1.json +2 -2
- crowdypy-0.5.0.dev1/vendor/CrowdyCPP/tools/parity/fixtures/exec-gateway-cases.json +24 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/.gitattributes +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/.gitignore +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/.gitleaks.toml +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/CMakeLists.txt +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/LICENSE +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/SECURITY.md +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/benchmarks/README.md +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/benchmarks/bench_replication.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/licenses/OpenSSL-LICENSE.txt +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/native/common.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/native/module.cpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/native/replication.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/native/replication_binding.cpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/native/session_binding.cpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/native/wire_binding.cpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/actors/Actor.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/actors/Actors.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/actors/BatchLookupActors.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/actors/CreateActor.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/actors/DeleteActor.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/actors/UpdateActor.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/actors/UpdateActorState.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/appAccess/AppAccessTiers.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/appAccess/AppFeatures.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/appAccess/AppGrantMemberCandidates.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/appAccess/AppUserAccessByApp.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/appAccess/ArchiveAccessTier.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/appAccess/ClaimFreeAppAccess.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/appAccess/CreateAccessTier.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/appAccess/DefineAppFeature.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/appAccess/GrantAppAccess.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/appAccess/GrantMyAppAccess.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/appAccess/GrantTierFeature.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/appAccess/MyAppAccess.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/appAccess/RevokeAppAccess.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/appAccess/RevokeTierFeature.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/appAccess/RuntimePermissions.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/appAccess/TierFeatures.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/appAccess/UpdateAccessTier.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/apps/App.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/apps/AppBySlug.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/apps/AppDiscovery.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/apps/AppsForOrg.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/apps/ArchiveApp.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/apps/CodeAdmissions.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/apps/CreateApp.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/apps/MarketplaceApps.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/apps/MyApps.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/apps/PlaceableDatacenters.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/apps/UpdateApp.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/auth/Logout.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/auth/LogoutAllDevices.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/avatars/Avatars.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/billing/AppBudget.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/billing/AppBudgets.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/billing/SetAppBudget.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/billing/WalletBalance.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/billing/WalletTransactions.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/channels/AddChannelMember.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/channels/Channel.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/channels/ChannelMembers.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/channels/ChannelPolicy.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/channels/ChannelRoles.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/channels/Channels.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/channels/CreateChannel.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/channels/CreateChannelRole.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/channels/DeleteChannel.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/channels/DeleteChannelRole.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/channels/JoinChannel.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/channels/LeaveChannel.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/channels/MyChannels.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/channels/RemoveChannelMember.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/channels/RequestToJoinChannel.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/channels/SetChannelMemberRoles.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/channels/SetChannelPolicy.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/channels/UpdateChannel.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/channels/UpdateChannelRole.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/chunks/GetChunk.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/chunks/GetChunkLods.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/chunks/GetChunksByDistance.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/chunks/GetVoxelList.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/chunks/UpdateChunk.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/chunks/UpdateChunkLods.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/chunks/UpdateChunkState.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/crowdyStudio/CrowdyStudio.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/exec/Exec.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/grids/CreateGridChannel.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/grids/GridChannels.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/grids/MintGridToken.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/host/Host.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/marketplace/Marketplace.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/organizations/CreateOrgRole.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/organizations/CreateOrgToken.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/organizations/CreateOrganization.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/organizations/DeleteOrgRole.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/organizations/InviteOrgMember.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/organizations/MemberRoles.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/organizations/MyOrganizations.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/organizations/OrgMembers.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/organizations/OrgPermissions.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/organizations/OrgRoles.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/organizations/OrgTokens.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/organizations/Organization.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/organizations/OrganizationBySlug.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/organizations/RemoveOrgMember.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/organizations/RevokeOrgToken.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/organizations/UpdateOrgMemberRoles.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/organizations/UpdateOrgRole.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/organizations/UpdateOrgToken.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/payments/CapturePaypalCheckout.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/payments/CreateCheckout.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/payments/MyCheckouts.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/platform/PlatformConfig.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/playerWallet/PlayerWallet.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/quotas/DeleteQuota.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/quotas/EffectiveQuota.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/quotas/QuotasForApp.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/quotas/QuotasForOrg.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/quotas/SetQuota.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/serverStatus/ActiveGraphQLServers.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/serverStatus/GameClientBootstrap.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/serverStatus/GraphqlServers.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/serverStatus/ServerWithLeastClients.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/serverStatus/VersionInfo.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/sharedEnvironment/SharedEnvironment.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/state/DeleteUserAppState.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/state/UpdateUserAppState.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/state/UserAppState.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/state/UserAppStates.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/teams/AddTeamMember.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/teams/CreateTeam.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/teams/CreateTeamRole.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/teams/DeleteTeam.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/teams/DeleteTeamRole.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/teams/JoinTeam.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/teams/LeaveTeam.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/teams/MyTeams.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/teams/RemoveTeamMember.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/teams/RequestToJoinTeam.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/teams/SetTeamMemberRoles.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/teams/SetTeamPolicy.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/teams/Team.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/teams/TeamMembers.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/teams/TeamPolicy.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/teams/TeamRoles.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/teams/Teams.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/teams/UpdateTeam.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/teams/UpdateTeamRole.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/teleport/TeleportRequest.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/usage/AppGraphqlOperations.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/usage/AppUsageSummary.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/usage/PlayerPulse.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/users/DeleteMyAccount.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/users/FreePlayWindow.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/users/Me.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/users/UpdateGamertag.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/users/UpdateUserState.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/users/User.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/voxels/ListVoxelUpdatesByDistance.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/voxels/ListVoxels.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/voxels/RollbackVoxelUpdates.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/voxels/UpdateVoxel.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/operations/voxels/VoxelUpdateHistory.graphql +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/scripts/_pins.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/scripts/ci/assert_default_origin.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/scripts/ci/build_openssl.sh +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/scripts/ci/check_content_policy.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/scripts/ci/check_pin_tiers.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/scripts/ci/cibw_before_all_linux.sh +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/scripts/ci/resolve-release-tier.sh +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/scripts/ci/resolve-release-tier.test.sh +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/scripts/ci/resolve_pypi_version.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/scripts/ci/stamp_version.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/scripts/ci/verify_artifacts.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/scripts/codegen.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/scripts/schema_drift.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/scripts/schema_sync.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/scripts/unasync.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/scripts/vendor_crowdycpp.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/__init__.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_concurrency.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_default_origin.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_generated/__init__.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_grid.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_native.pyi +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_operation.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/__init__.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/client.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/__init__.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/_base.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/actors.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/admin.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/app_access.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/apps.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/auth.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/avatars.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/billing.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/channels.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/chunks.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/crowdy_studio.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/crowdy_studio_github.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/discovery.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/grids.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/host.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/marketplace.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/organizations.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/payments.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/platform.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/player_wallet.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/portal.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/quotas.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/server_status.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/shared_environment.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/state.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/teams.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/teleport.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/udp.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/usage.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/users.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/voxels.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/graphql.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/grid_scope.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/kit/__init__.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/kit/actions.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/kit/kit.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/kit/social.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/kit/wire.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/rediscover.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/stores.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/world.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/auth_state.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/client.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/codecs.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/datacenter_redirect.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/__init__.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/_base.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/actors.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/admin.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/app_access.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/apps.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/auth.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/avatars.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/billing.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/channels.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/chunks.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/crowdy_studio.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/crowdy_studio_github.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/discovery.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/grids.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/host.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/marketplace.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/organizations.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/payments.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/platform.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/player_wallet.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/portal.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/quotas.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/server_status.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/shared_environment.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/state.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/teams.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/teleport.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/udp.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/usage.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/users.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/domains/voxels.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/enums.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/errors.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/estate.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/graphql.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/grid_scope.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/inputs.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/kit/__init__.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/kit/actions.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/kit/kit.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/kit/social.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/kit/wire.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/lb_cookie.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/media.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/pkce.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/player_host/__init__.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/player_host/agent_errors.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/player_host/agent_types.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/player_host/json_schema.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/player_host/schemas.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/player_host/types.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/py.typed +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/rediscover.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/replication.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/session.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/stores.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/studio/__init__.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/studio/client_tick_interval.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/studio/controller.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/studio/diagnostics.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/studio/github_new_repo.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/studio/layout.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/studio/models.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/studio/starter_projects.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/subscriptions.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/sync.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/utils.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/wire.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/world.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/conftest.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/e2e/__init__.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/e2e/conftest.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/e2e/test_e2e_identity.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/e2e/test_e2e_replication.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/e2e/test_e2e_studio.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/e2e/test_e2e_world.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/e2e/test_e2e_world_data.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/fixtures/README.md +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/fixtures/binary-wire-fixtures.json +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/fixtures/exec-client-frames.json +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/unit/__init__.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/unit/domains/__init__.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/unit/domains/test_org_domains.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/unit/domains/test_social_domains.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/unit/domains/test_studio_exec_domains.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/unit/test_core.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/unit/test_durable_stores.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/unit/test_estate_moves.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/unit/test_fixture_provenance.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/unit/test_grid_scope.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/unit/test_kit.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/unit/test_lazy_exports.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/unit/test_player_host.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/unit/test_release_versions.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/unit/test_sdk_audience.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/unit/test_studio_layout.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/unit/test_subscriptions.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/unit/test_transport.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/unit/test_udp_api.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/unit/test_wire.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tests/unit/test_world_session.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tools/e2e/provision.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tools/fixtures/player_host.mjs +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tools/parity/classifications.toml +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/tools/parity/parity.py +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/LICENSE +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/cmake/CheckPublicHeaders.cmake +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/cmake/CrowdyCPPConfig.cmake.in +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/cmake/studio_layout_fixture.hpp.in +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/client.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/base64.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/bytes.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/clock.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/crypto.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/logger.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/result.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/spsc.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/uuid.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/crowdy.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/default_origin.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/admin.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/auth.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/crowdy_studio.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/crowdy_studio_agent.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/crowdy_studio_github.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/discovery.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/domain_base.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/grids.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/groups.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/marketplace.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/player_wallet.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/portal.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/realtime_control.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/server_status.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/types.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/users.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/world_data.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/async_scope.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/auth_state.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/datacenter_redirect.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/dispatcher.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/errors.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/estate.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/graphql_client.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/http.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/json.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/rediscover.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/subscription_client.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/actions.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/kit.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/social.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/wire.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/media/video_frames.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/player_host/adapter.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/player_host/player_host.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/player_host/schemas.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/player_host/types.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/replication/connection.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/replication/session_provider.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/replication/types.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/replication/udp_socket.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/codec.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/durable.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/keys.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/stores.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/world_session.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/controller.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/diagnostics.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/editor.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/github.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/github_layout.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/integration.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/layout.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/models.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/runtime.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/wire/codec.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/wire/protocol.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/include/crowdy/world.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/src/client.cpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/src/core/base64.cpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/src/core/clock.cpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/src/core/crypto_default_unavailable.cpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/src/core/crypto_openssl.cpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/src/core/crypto_unavailable.cpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/src/core/logger.cpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/src/core/uuid.cpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/src/graphql/async_transport.cpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/src/graphql/auth_state.cpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/src/graphql/error_extensions.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/src/graphql/errors.cpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/src/graphql/graphql_client.cpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/src/graphql/http_curl.cpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/src/graphql/http_none.cpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/src/graphql/json.cpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/src/graphql/subscription_client.cpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/src/graphql/websocket_none.cpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/src/player_host/schemas.cpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/src/player_host/types.cpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/src/replication/connection.cpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/src/replication/socket_errors.hpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/src/replication/udp_socket.cpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/src/session/world_session.cpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/src/studio/diagnostics.cpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/src/studio/editor.cpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/src/studio/integration.cpp +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/third_party/yyjson/LICENSE +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/third_party/yyjson/yyjson.c +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/third_party/yyjson/yyjson.h +0 -0
- {crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/exec-client-frames.json +0 -0
|
@@ -122,8 +122,12 @@ names, a tag that is not the tree's version, and a default origin for another ti
|
|
|
122
122
|
builds every wheel and the sdist, scans them, publishes `X.Y.Z.devN` (dev), `X.Y.ZrcN` (test)
|
|
123
123
|
or `X.Y.Z` (prod) to PyPI by trusted publishing, downloads the published wheel back to read
|
|
124
124
|
its origin again, and creates the GitHub release with the same files. PyPI publishing runs
|
|
125
|
-
only when the repository variable `PYPI_PUBLISHING` is `enabled
|
|
126
|
-
|
|
125
|
+
only when the repository variable `PYPI_PUBLISHING` is `enabled` (it is, since 2026-10-01),
|
|
126
|
+
through the trusted publisher on PyPI project `crowdypy` (owner CrowdedKingdoms, repository
|
|
127
|
+
CrowdyPy, workflow `release.yml`, environment `pypi`). The first version there,
|
|
128
|
+
`0.4.0.dev1`, was uploaded by hand from the `dev/v0.4.0` release's assets before the
|
|
129
|
+
publisher existed; every later one comes from its tag. PyPI accepts a version once, so a
|
|
130
|
+
re-run takes the next N (`scripts/ci/resolve_pypi_version.py` reads what PyPI already has).
|
|
127
131
|
|
|
128
132
|
Merging a PR from the command line: `gh pr merge` fails its preflight on this org, so use
|
|
129
133
|
`gh api -X PUT repos/CrowdedKingdoms/CrowdyPy/pulls/<n>/merge -f merge_method=merge`.
|
|
@@ -3,6 +3,43 @@
|
|
|
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.5.0
|
|
7
|
+
|
|
8
|
+
CrowdyJS 18.1.0 and CrowdyCPP 0.55.0. Additive, plus one refusal that is a security fix.
|
|
9
|
+
|
|
10
|
+
- **The ck-exec connect token goes only to a gateway on the estate.** `client.exec.connect`
|
|
11
|
+
and `connect_as_developer` dial a gateway only when `exec_gateway_refusal` (in
|
|
12
|
+
`crowdypy.domains.exec`) passes it. That means `ws` or `wss` without credentials (only
|
|
13
|
+
`wss` under an `https` game API), on the estate of the game API or of this release's default
|
|
14
|
+
origin (two IP addresses only when equal), or a loopback gateway for a loopback game API.
|
|
15
|
+
Any other gateway the game API names is refused before the token leaves the process, with
|
|
16
|
+
`CrowdyExecError("Unavailable", "refusing the gateway …")`. `AsyncExecConnection.open` and
|
|
17
|
+
`ExecConnection.open` still dial what they are given. The rule answers the 19 cases CrowdyJS
|
|
18
|
+
and CrowdyCPP check (`exec-gateway-cases.json`).
|
|
19
|
+
- **A refused upgrade carries the gateway's answer.** HTTP `401` (a token it will not take) is
|
|
20
|
+
`Denied` and anything else `Unavailable`, each with the gateway's reason, as in "the
|
|
21
|
+
gateway refused the connection (HTTP 401: bad signature)". Both used to be `Unavailable`
|
|
22
|
+
"connecting … failed".
|
|
23
|
+
- **Open grids:** `GameAppsAPI.open_permissions(app_id, grid_id)` and
|
|
24
|
+
`set_open_permissions(input)` (`manage_apps`) cover the keys a grid grants every player with
|
|
25
|
+
access to the app. An empty list closes it.
|
|
26
|
+
- CrowdyCPP 0.55.0 also builds on Windows when `<windows.h>` comes first (its `far` and
|
|
27
|
+
`near` macros broke a session header).
|
|
28
|
+
- New live suite `tests/e2e/test_e2e_open_grid_exec_gateway.py`, which runs as a throwaway
|
|
29
|
+
org admin with `CROWDY_E2E_THROWAWAY_OWNER=1`.
|
|
30
|
+
|
|
31
|
+
## 0.4.1
|
|
32
|
+
|
|
33
|
+
Documentation only; nothing the package does changed. Still CrowdyJS 18.0.4 and CrowdyCPP
|
|
34
|
+
0.54.0.
|
|
35
|
+
|
|
36
|
+
- The README, which PyPI shows, carries the current tier pins and an example of installing a
|
|
37
|
+
wheel straight from a GitHub release.
|
|
38
|
+
- The roots CrowdyPy wraps beyond CrowdyJS are described precisely: CrowdyJS's portable API
|
|
39
|
+
sends none of them, CrowdyCPP covers them, and CrowdyJS's in-browser agent does send the
|
|
40
|
+
two provider-consent roots and the model-usage root.
|
|
41
|
+
- 0.4.1 is the first version PyPI receives from the release workflow, by trusted publishing.
|
|
42
|
+
|
|
6
43
|
## 0.4.0
|
|
7
44
|
|
|
8
45
|
Headless Crowdy Studio and full CrowdyJS parity. Additive; still CrowdyJS 18.0.4 and
|
|
@@ -25,7 +62,7 @@ CrowdyCPP 0.54.0.
|
|
|
25
62
|
`parse_client_tick_interval_ms` port their CrowdyJS namesakes.
|
|
26
63
|
- `canonical_json`, `digest_canonical_json` and `project_content_hash` compute the
|
|
27
64
|
approval digests CrowdyJS computes.
|
|
28
|
-
- **The roots CrowdyCPP
|
|
65
|
+
- **The roots CrowdyCPP covers and CrowdyJS's portable API leaves out:**
|
|
29
66
|
- `AuthAPI.confirm_email` and `resend_confirmation_email`;
|
|
30
67
|
- `UsageAPI.org_summary`, `app_projection` and `org_projection`;
|
|
31
68
|
- `AppsAPI.compute_budget`, `set_compute_budget` and `clear_compute_budget`;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: crowdypy
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.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,19 +51,16 @@ 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.
|
|
55
|
-
- `
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
-
|
|
60
|
-
|
|
61
|
-
`
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
- The parity gate is strict: [`docs/parity-matrix.md`](docs/parity-matrix.md) has no gaps.
|
|
65
|
-
- 0.3.0 brought the World Stores, the Game Kit, ck-exec and subscriptions; 0.2.0 native UDP
|
|
66
|
-
replication (`client.udp`); 0.1.0 the GraphQL client.
|
|
54
|
+
**v0.5.0: open grids, and the ck-exec gateway check (CrowdyJS 18.1.0, CrowdyCPP 0.55.0).**
|
|
55
|
+
- `client.exec.connect()` sends the connect token only to a gateway on the game API's estate
|
|
56
|
+
(or the release's default origin's); any other gateway is refused before it is dialed. A
|
|
57
|
+
gateway that refuses the token is reported as `Denied`, with its reason.
|
|
58
|
+
- `game_apps.open_permissions()` and `set_open_permissions()`: grids open to every player.
|
|
59
|
+
- 0.4 brought the headless Crowdy Studio (`crowdypy.studio`), player-host observation
|
|
60
|
+
(`crowdypy.player_host`), the roots CrowdyCPP covers beyond CrowdyJS, and the strict parity
|
|
61
|
+
gate ([`docs/parity-matrix.md`](docs/parity-matrix.md) has no gaps); 0.3.0 the World Stores,
|
|
62
|
+
the Game Kit, ck-exec and subscriptions; 0.2.0 native UDP replication (`client.udp`); 0.1.0
|
|
63
|
+
the GraphQL client.
|
|
67
64
|
|
|
68
65
|
See [MIGRATION.md](MIGRATION.md).
|
|
69
66
|
|
|
@@ -83,12 +80,14 @@ API origin (`crowdypy.CROWDY_DEFAULT_TIER` says which):
|
|
|
83
80
|
|
|
84
81
|
| Tier | PyPI version | Pin |
|
|
85
82
|
|---|---|---|
|
|
86
|
-
| dev | `X.Y.Z.devN` | `crowdypy==0.
|
|
87
|
-
| test | `X.Y.ZrcN` | `crowdypy==0.
|
|
88
|
-
| prod | `X.Y.Z` | `crowdypy==0.
|
|
83
|
+
| dev | `X.Y.Z.devN` | `crowdypy==0.4.0.dev1` |
|
|
84
|
+
| test | `X.Y.ZrcN` | `crowdypy==0.4.0rc1` |
|
|
85
|
+
| prod | `X.Y.Z` | `crowdypy==0.4.0` |
|
|
89
86
|
|
|
90
87
|
pip skips pre-releases unless a requirement names one, so a prod range never picks up a dev
|
|
91
|
-
or test build. The same wheels are attached to each
|
|
88
|
+
or test build. The same wheels and the sdist are attached to each
|
|
89
|
+
[GitHub release](https://github.com/CrowdedKingdoms/CrowdyPy/releases), and pip installs one
|
|
90
|
+
from its URL (`pip install https://github.com/CrowdedKingdoms/CrowdyPy/releases/download/<tag>/<wheel>`).
|
|
92
91
|
|
|
93
92
|
## Quick start
|
|
94
93
|
|
|
@@ -11,19 +11,16 @@ 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
|
-
- `
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
-
|
|
20
|
-
|
|
21
|
-
`
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
- The parity gate is strict: [`docs/parity-matrix.md`](docs/parity-matrix.md) has no gaps.
|
|
25
|
-
- 0.3.0 brought the World Stores, the Game Kit, ck-exec and subscriptions; 0.2.0 native UDP
|
|
26
|
-
replication (`client.udp`); 0.1.0 the GraphQL client.
|
|
14
|
+
**v0.5.0: open grids, and the ck-exec gateway check (CrowdyJS 18.1.0, CrowdyCPP 0.55.0).**
|
|
15
|
+
- `client.exec.connect()` sends the connect token only to a gateway on the game API's estate
|
|
16
|
+
(or the release's default origin's); any other gateway is refused before it is dialed. A
|
|
17
|
+
gateway that refuses the token is reported as `Denied`, with its reason.
|
|
18
|
+
- `game_apps.open_permissions()` and `set_open_permissions()`: grids open to every player.
|
|
19
|
+
- 0.4 brought the headless Crowdy Studio (`crowdypy.studio`), player-host observation
|
|
20
|
+
(`crowdypy.player_host`), the roots CrowdyCPP covers beyond CrowdyJS, and the strict parity
|
|
21
|
+
gate ([`docs/parity-matrix.md`](docs/parity-matrix.md) has no gaps); 0.3.0 the World Stores,
|
|
22
|
+
the Game Kit, ck-exec and subscriptions; 0.2.0 native UDP replication (`client.udp`); 0.1.0
|
|
23
|
+
the GraphQL client.
|
|
27
24
|
|
|
28
25
|
See [MIGRATION.md](MIGRATION.md).
|
|
29
26
|
|
|
@@ -43,12 +40,14 @@ API origin (`crowdypy.CROWDY_DEFAULT_TIER` says which):
|
|
|
43
40
|
|
|
44
41
|
| Tier | PyPI version | Pin |
|
|
45
42
|
|---|---|---|
|
|
46
|
-
| dev | `X.Y.Z.devN` | `crowdypy==0.
|
|
47
|
-
| test | `X.Y.ZrcN` | `crowdypy==0.
|
|
48
|
-
| prod | `X.Y.Z` | `crowdypy==0.
|
|
43
|
+
| dev | `X.Y.Z.devN` | `crowdypy==0.4.0.dev1` |
|
|
44
|
+
| test | `X.Y.ZrcN` | `crowdypy==0.4.0rc1` |
|
|
45
|
+
| prod | `X.Y.Z` | `crowdypy==0.4.0` |
|
|
49
46
|
|
|
50
47
|
pip skips pre-releases unless a requirement names one, so a prod range never picks up a dev
|
|
51
|
-
or test build. The same wheels are attached to each
|
|
48
|
+
or test build. The same wheels and the sdist are attached to each
|
|
49
|
+
[GitHub release](https://github.com/CrowdedKingdoms/CrowdyPy/releases), and pip installs one
|
|
50
|
+
from its URL (`pip install https://github.com/CrowdedKingdoms/CrowdyPy/releases/download/<tag>/<wheel>`).
|
|
52
51
|
|
|
53
52
|
## Quick start
|
|
54
53
|
|
|
@@ -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.5.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
|
|
@@ -17,6 +17,7 @@ Unconfigured, every suite skips, so `pytest` in CI records skips, not live passe
|
|
|
17
17
|
| `CROWDY_E2E_HTTP_URL` | no | the game API origin, when not the minted `game_api_url` |
|
|
18
18
|
| `CROWDY_E2E_STUDIO_GRID_ID` | no | a grid in the app that the owner controls (Studio suite) |
|
|
19
19
|
| `CROWDY_E2E_SLOW=1` | no | long-running suites |
|
|
20
|
+
| `CROWDY_E2E_THROWAWAY_OWNER=1` | no | the open-grid suite registers a throwaway owner, org and app (archived afterwards) |
|
|
20
21
|
|
|
21
22
|
```bash
|
|
22
23
|
pytest tests/e2e -q
|
|
@@ -39,6 +40,7 @@ player once and signs it in for the later suites.
|
|
|
39
40
|
| `test_e2e_replication.py` | two players over native UDP: an actor update reaches the other player and echoes back to the sender; a 16-entity batched frame (`send_actor_updates`) reaches the other player; voxel updates and client events reach the other player | `e2e_two_client_actor`, `e2e_self_echo`, `e2e_spatial_distance` |
|
|
40
41
|
| `test_e2e_world.py` | two World Stores sessions: each sees the other's actor natively; a voxel edit lands in the other session's chunk store | `e2e_stores_live`, `e2e_world_session` |
|
|
41
42
|
| `test_e2e_world_data.py` | a GraphQL voxel write by an entitled player is recorded and listed back | `e2e_chunks` |
|
|
43
|
+
| `test_e2e_open_grid_exec_gateway.py` | as a throwaway org admin (`CROWDY_E2E_THROWAWAY_OWNER=1`): open a nested grid, read it back, a player holds its keys, a player-code key is refused `BAD_REQUEST`, close it; the tier's ck-exec gateway passes `exec_gateway_refusal`, a connection pings, and a tampered connect token is `Denied` with the gateway's HTTP 401 reason | `e2e_open_grid_exec_gateway` |
|
|
42
44
|
| `test_e2e_studio.py` | the headless Studio controller creates a project from the mod starter, edits it with autosave, and archives it (optional: needs `CROWDY_E2E_STUDIO_GRID_ID`) | `e2e_crowdy_studio` |
|
|
43
45
|
|
|
44
46
|
## Live runs
|
|
@@ -47,6 +49,8 @@ player once and signs it in for the later suites.
|
|
|
47
49
|
|---|---|---|---|
|
|
48
50
|
| 2026-10-01 | local stack: ck-api at `dev` (`78386df3`), two replication servers, the 3-node Citus lab | 0.4.0 (branch) | 8 passed; Studio skipped (no grid in the app) |
|
|
49
51
|
| 2026-10-01 | dev tier, app `96701660793088` (CrowdyPy e2e, in the org admin's org) | 0.4.0 (branch) | 8 passed; Studio skipped (the suite needs a grid the owner controls in that app; a placeholder is refused with `CROWDY_STUDIO_GRID_NOT_FOUND`) |
|
|
52
|
+
| 2026-10-01 | dev tier, app `96701660793088` | the published `dev/v0.4.0` wheel (`0.4.0.dev1`, manylinux x86_64, installed into a clean Python 3.12) | 8 passed |
|
|
53
|
+
| 2026-10-01 | dev tier, app `96701660793088` | `crowdypy 0.4.1.dev1` from PyPI (`pip install crowdypy` in a clean Python 3.12; the first version published by trusted publishing) | 8 passed; Studio skipped |
|
|
50
54
|
|
|
51
55
|
## Not covered here
|
|
52
56
|
|
|
@@ -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.0
|
|
8
|
-
- CrowdyCPP (native core): `0.
|
|
7
|
+
- CrowdyJS: `18.1.0` at `806b14130786d5b739d6124c0c4c275f8997af15`
|
|
8
|
+
- CrowdyCPP (native core): `0.55.0` at `344772ad0c2d577003c92fa30903d7fcada29940`
|
|
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: 1012
|
|
15
15
|
- Portable gap: 0
|
|
16
16
|
- Native equivalent: 38
|
|
17
17
|
- Browser exclusion: 95
|
|
@@ -183,6 +183,7 @@ Generated by `tools/parity/parity.py`; do not edit by hand. Classifications live
|
|
|
183
183
|
| `mutation.setChannelPolicy` | covered |
|
|
184
184
|
| `mutation.setCrowdyStudioAgentPolicy` | covered |
|
|
185
185
|
| `mutation.setEarlyAccessOverride` | browser exclusion — super-admin or operator only; the SDK wraps nothing for platform roles (tooling calls it directly) |
|
|
186
|
+
| `mutation.setGridOpenPermissions` | covered |
|
|
186
187
|
| `mutation.setGridPermissionLimits` | covered |
|
|
187
188
|
| `mutation.setHostedGameEnabled` | browser exclusion — publishes and administers browser game bundles on the Crowdy Games web host; a Python client has no bundle to publish |
|
|
188
189
|
| `mutation.setHostedGameListing` | browser exclusion — publishes and administers browser game bundles on the Crowdy Games web host; a Python client has no bundle to publish |
|
|
@@ -332,6 +333,7 @@ Generated by `tools/parity/parity.py`; do not edit by hand. Classifications live
|
|
|
332
333
|
| `query.gridClaimPolicy` | covered |
|
|
333
334
|
| `query.gridClaimRequests` | covered |
|
|
334
335
|
| `query.gridGroupGrants` | covered |
|
|
336
|
+
| `query.gridOpenPermissions` | covered |
|
|
335
337
|
| `query.gridOwnership` | covered |
|
|
336
338
|
| `query.gridPermissionLimits` | covered |
|
|
337
339
|
| `query.gridUserPermissions` | covered |
|
|
@@ -771,10 +773,12 @@ Generated by `tools/parity/parity.py`; do not edit by hand. Classifications live
|
|
|
771
773
|
| `GameAppsAPI.groupGrants` | covered |
|
|
772
774
|
| `GameAppsAPI.nearbyGrids` | covered |
|
|
773
775
|
| `GameAppsAPI.nearbyPermissions` | covered |
|
|
776
|
+
| `GameAppsAPI.openPermissions` | covered |
|
|
774
777
|
| `GameAppsAPI.ownership` | covered |
|
|
775
778
|
| `GameAppsAPI.permissionLimits` | covered |
|
|
776
779
|
| `GameAppsAPI.revokeGroup` | covered |
|
|
777
780
|
| `GameAppsAPI.revokePermissions` | covered |
|
|
781
|
+
| `GameAppsAPI.setOpenPermissions` | covered |
|
|
778
782
|
| `GameAppsAPI.setPermissionLimits` | covered |
|
|
779
783
|
| `GameAppsAPI.transferOwnership` | covered |
|
|
780
784
|
| `GameAppsAPI.userPermissions` | covered |
|
|
@@ -1126,6 +1130,7 @@ Generated by `tools/parity/parity.py`; do not edit by hand. Classifications live
|
|
|
1126
1130
|
| `encodeExecFrame` | covered |
|
|
1127
1131
|
| `engineLanes` | covered |
|
|
1128
1132
|
| `enginePoseCodec` | covered |
|
|
1133
|
+
| `execGatewayRefusal` | covered |
|
|
1129
1134
|
| `execModType` | covered |
|
|
1130
1135
|
| `execStatus` | covered |
|
|
1131
1136
|
| `fragmentFrame` | covered |
|
|
@@ -81,6 +81,14 @@ query GridPermissionLimits($appId: BigInt!, $gridId: BigInt!) {
|
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
+
query GridOpenPermissions($appId: BigInt!, $gridId: BigInt!) {
|
|
85
|
+
gridOpenPermissions(appId: $appId, gridId: $gridId) {
|
|
86
|
+
appId
|
|
87
|
+
gridId
|
|
88
|
+
permissionKeys
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
84
92
|
query GridGroupGrants($appId: BigInt!, $gridId: BigInt!, $groupId: BigInt!) {
|
|
85
93
|
gridGroupGrants(appId: $appId, gridId: $gridId, groupId: $groupId) {
|
|
86
94
|
appId
|
|
@@ -145,6 +153,14 @@ mutation SetGridPermissionLimits($input: SetGridPermissionLimitsInput!) {
|
|
|
145
153
|
}
|
|
146
154
|
}
|
|
147
155
|
|
|
156
|
+
mutation SetGridOpenPermissions($input: SetGridOpenPermissionsInput!) {
|
|
157
|
+
setGridOpenPermissions(input: $input) {
|
|
158
|
+
appId
|
|
159
|
+
gridId
|
|
160
|
+
permissionKeys
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
148
164
|
mutation AssignGroupToGrid($input: AssignGroupToGridInput!) {
|
|
149
165
|
assignGroupToGrid(input: $input) {
|
|
150
166
|
appId
|
|
@@ -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.5.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"
|
|
@@ -117,20 +117,20 @@ environment = { OPENSSL_ROOT_DIR = "C:/vcpkg/installed/x64-windows-static-md" }
|
|
|
117
117
|
# --------------------------------------------------------------------------------------
|
|
118
118
|
|
|
119
119
|
[tool.crowdypy.crowdyjs]
|
|
120
|
-
version = "18.0
|
|
121
|
-
commit = "
|
|
120
|
+
version = "18.1.0"
|
|
121
|
+
commit = "806b14130786d5b739d6124c0c4c275f8997af15"
|
|
122
122
|
|
|
123
123
|
[tool.crowdypy.crowdycpp]
|
|
124
|
-
version = "0.
|
|
125
|
-
tag = "dev/v0.
|
|
126
|
-
commit = "
|
|
127
|
-
tree-sha256 = "
|
|
124
|
+
version = "0.55.0"
|
|
125
|
+
tag = "dev/v0.55.0"
|
|
126
|
+
commit = "344772ad0c2d577003c92fa30903d7fcada29940"
|
|
127
|
+
tree-sha256 = "a930e844afa86b9804a8bd8d7d5a93a830f8ef720aa798f31b6dd89d35eaa3ee"
|
|
128
128
|
|
|
129
129
|
# schema.gql and operations/ are CrowdyJS's, copied from the commit pinned above by
|
|
130
130
|
# scripts/schema_sync.py, which records these hashes and re-derives them in CI.
|
|
131
131
|
[tool.crowdypy.graphql]
|
|
132
|
-
schema-sha256 = "
|
|
133
|
-
operations-sha256 = "
|
|
132
|
+
schema-sha256 = "38c490a70f0bd92977fef5867e0b9e14a10d9467a2008dcd2c02bbc96878d8d3"
|
|
133
|
+
operations-sha256 = "d5e0c505589ea26ecc3398b12f02ad7bd786457f7010ad87dcb8af2ea9366c77"
|
|
134
134
|
|
|
135
135
|
# The SDL the docs site publishes. scripts/schema_drift.py compares the snapshot against it
|
|
136
136
|
# on a schedule; nothing on the per-commit path reads the network.
|
|
@@ -1265,7 +1265,7 @@ type App {
|
|
|
1265
1265
|
"""
|
|
1266
1266
|
gridClaimApproverUserIds: [String!]!
|
|
1267
1267
|
"""
|
|
1268
|
-
Whether players may write the app's wilderness: chunks that no grid but the app's world grid covers. True (the default) leaves those writes to the ordinary voxel permission; false refuses every voxel and chunk write there (updateVoxel, sendVoxelUpdate, updateChunk, ck-exec's world.set_voxels), whoever makes it. Set with updateApp (manage_apps).
|
|
1268
|
+
Whether players may write the app's wilderness: chunks that no grid but the app's world grid covers. True (the default) leaves those writes to the ordinary voxel permission; false refuses every voxel and chunk write there (updateVoxel, sendVoxelUpdate, updateChunk, ck-exec's world.set_voxels, and a client's voxel updates sent straight to the realtime servers), whoever makes it. Set with updateApp (manage_apps).
|
|
1269
1269
|
"""
|
|
1270
1270
|
wildernessWritesOpen: Boolean!
|
|
1271
1271
|
"""Timestamp when the app was created."""
|
|
@@ -5251,6 +5251,20 @@ type GridPermissionLimits {
|
|
|
5251
5251
|
permissionKeys: [String!]!
|
|
5252
5252
|
}
|
|
5253
5253
|
|
|
5254
|
+
"""
|
|
5255
|
+
The permission keys a grid grants every player with active access to the app (the grid_open_permissions input table).
|
|
5256
|
+
"""
|
|
5257
|
+
type GridOpenPermissions {
|
|
5258
|
+
"""The app (tenant) that owns the grid."""
|
|
5259
|
+
appId: BigInt!
|
|
5260
|
+
"""The grid."""
|
|
5261
|
+
gridId: BigInt!
|
|
5262
|
+
"""
|
|
5263
|
+
The keys every player with active access holds on this grid (its limits still cap them). Empty means the grid is not open.
|
|
5264
|
+
"""
|
|
5265
|
+
permissionKeys: [String!]!
|
|
5266
|
+
}
|
|
5267
|
+
|
|
5254
5268
|
"""
|
|
5255
5269
|
A single group/role -> permission-key grant on a grid (one row of the grid_group_grants input table).
|
|
5256
5270
|
"""
|
|
@@ -7059,6 +7073,15 @@ type Query {
|
|
|
7059
7073
|
gridId: BigInt!
|
|
7060
7074
|
): GridPermissionLimits! @requiresPermission(scope: "app", permission: "manage_apps", scopeArg: "appId")
|
|
7061
7075
|
"""
|
|
7076
|
+
Read the permission keys a grid grants every player with active access to the app (an open build area, a public arena). An empty list means the grid is not open. Requires app-admin ('manage_apps').
|
|
7077
|
+
"""
|
|
7078
|
+
gridOpenPermissions(
|
|
7079
|
+
"""The app (tenant) that owns the grid."""
|
|
7080
|
+
appId: BigInt!
|
|
7081
|
+
"""The grid whose open keys to read."""
|
|
7082
|
+
gridId: BigInt!
|
|
7083
|
+
): GridOpenPermissions! @requiresPermission(scope: "app", permission: "manage_apps", scopeArg: "appId")
|
|
7084
|
+
"""
|
|
7062
7085
|
List the group/role -> permission-key grants configured on a grid for one group (rows of the `grid_group_grants` input table). These are inputs to the effective ACL, not the materialized result — use `gridUserPermissions` for a specific user's effective keys. Requires app-admin ('manage_apps').
|
|
7063
7086
|
"""
|
|
7064
7087
|
gridGroupGrants(
|
|
@@ -8629,7 +8652,7 @@ type Mutation {
|
|
|
8629
8652
|
appId: BigInt!
|
|
8630
8653
|
): GameHost
|
|
8631
8654
|
"""
|
|
8632
|
-
Creates or replaces a chunk's dense voxel grid and/or per-voxel states for the given app and coordinates, records each provided voxel state as an individual voxel update, and asynchronously uploads the chunk to the CDN. WRITES world state. Leaves chunkState and LODs untouched. Requires an app token for the app and either the 'manage_apps' permission on the app (resolved via its org; super admins bypass) or the voxel edit permission for this chunk that updateVoxel checks (app access, the tier's update_voxel_data, and update_voxel_data on
|
|
8655
|
+
Creates or replaces a chunk's dense voxel grid and/or per-voxel states for the given app and coordinates, records each provided voxel state as an individual voxel update, and asynchronously uploads the chunk to the CDN. WRITES world state. Leaves chunkState and LODs untouched. Requires an app token for the app and either the 'manage_apps' permission on the app (resolved via its org; super admins bypass) or the voxel edit permission for this chunk that updateVoxel checks (app access, the tier's update_voxel_data, and update_voxel_data on the most specific grid covering the chunk). Throws FORBIDDEN otherwise, and for a chunk only the app's world grid covers while the app's wilderness is closed (App.wildernessWritesOpen false).
|
|
8633
8656
|
"""
|
|
8634
8657
|
updateChunk(input: ChunkUpdateInput!): Chunk!
|
|
8635
8658
|
"""
|
|
@@ -8641,7 +8664,7 @@ type Mutation {
|
|
|
8641
8664
|
"""
|
|
8642
8665
|
updateChunkLods(input: UpdateChunkLodsInput!): Chunk @requiresPermission(scope: "app", permission: "manage_apps", scopeArg: "input.appId")
|
|
8643
8666
|
"""
|
|
8644
|
-
Records (upserts) a single voxel edit in the voxel_updates log for one chunk and returns the resulting Voxel. WRITES world state; a background maintenance job later folds these edits into the chunk's packed grid. Requires a valid bearer token AND voxel-edit permission for the target region: the user must have active app access, the `update_voxel_data` tier permission, and (
|
|
8667
|
+
Records (upserts) a single voxel edit in the voxel_updates log for one chunk and returns the resulting Voxel. WRITES world state; a background maintenance job later folds these edits into the chunk's packed grid. Requires a valid bearer token AND voxel-edit permission for the target region: the user must have active app access, the `update_voxel_data` tier permission, and `update_voxel_data` on the most specific grid covering the chunk (the smallest by volume; of equal ones the lowest grid id), so a claim, a plot or a safe zone decides its chunks and the app's world grid decides only the wilderness. A chunk no grid covers is refused, and so is a chunk only the app's world grid covers while the app's wilderness is closed (App.wildernessWritesOpen false).
|
|
8645
8668
|
"""
|
|
8646
8669
|
updateVoxel(input: UpdateVoxelInput!): Voxel! @requiresPermission(scope: "runtime", permission: "update_voxel_data", scopeArg: "input.appId")
|
|
8647
8670
|
"""
|
|
@@ -8706,6 +8729,15 @@ type Mutation {
|
|
|
8706
8729
|
input: SetGridPermissionLimitsInput!
|
|
8707
8730
|
): GridPermissionLimits! @requiresPermission(scope: "app", permission: "manage_apps", scopeArg: "input.appId")
|
|
8708
8731
|
"""
|
|
8732
|
+
Open a grid to every player: replace the permission keys it grants each player with active access to the app (writes the `grid_open_permissions` input table), then recompute the grid's materialized effective ACL for all of them. The most specific grid covering a chunk decides a voxel write there, so a zone inside the world grid that everyone may build in must grant `update_voxel_data` itself. The grid's limits still cap these keys; players who get access later receive them when they connect. Pass an empty array to close the grid. Refuses the app's world grid (already open), the four player-code keys, and a 33rd open grid in one app. Requires app-admin ('manage_apps').
|
|
8733
|
+
"""
|
|
8734
|
+
setGridOpenPermissions(
|
|
8735
|
+
"""
|
|
8736
|
+
The app, grid, and the keys it grants every player (empty array = close it).
|
|
8737
|
+
"""
|
|
8738
|
+
input: SetGridOpenPermissionsInput!
|
|
8739
|
+
): GridOpenPermissions! @requiresPermission(scope: "app", permission: "manage_apps", scopeArg: "input.appId")
|
|
8740
|
+
"""
|
|
8709
8741
|
Grant runtime permission keys to a group (optionally scoped to a single group role) on a grid by writing the `grid_group_grants` input table, then recompute the materialized effective ACL so every affected member gains the keys. Requires app-admin ('manage_apps'). Returns the grid's current group grants for the group. Use `grantGridPermissions` for per-user grants instead.
|
|
8710
8742
|
"""
|
|
8711
8743
|
assignGroupToGrid(
|
|
@@ -8989,7 +9021,7 @@ type Mutation {
|
|
|
8989
9021
|
gridId: BigInt!
|
|
8990
9022
|
): GridClaimResult!
|
|
8991
9023
|
"""
|
|
8992
|
-
Claim one
|
|
9024
|
+
Claim one wilderness chunk (a chunk no grid but the app's world grid covers) as a new player-owned grid. Requires an ordinary app-scoped player token and active app access, but never manage_apps. The app's policy must be SELF_CLAIM. A chunk inside another grid (a plot, a zone or another claim) is refused FORBIDDEN (GRID_NOT_CLAIMABLE): the claim would be the most specific grid there and take the chunk from whoever that grid grants. The server validates the app's grid assignment and peer-overlap rules, then atomically creates a one-chunk grid, assigns current-user ownership, grants access/update_voxel_data/use_voice_chat/teleport plus the player-code keys and use_video_chat where the caller's tier already carries them, and materializes the effective ACL. Conflicts and policy denials throw GraphQL errors; no partial grid, ownership, or grant rows remain.
|
|
8993
9025
|
"""
|
|
8994
9026
|
claimGridChunk(
|
|
8995
9027
|
"""
|
|
@@ -9404,7 +9436,7 @@ type Mutation {
|
|
|
9404
9436
|
input: ActorUpdateRequestInput!
|
|
9405
9437
|
): Boolean!
|
|
9406
9438
|
"""
|
|
9407
|
-
Send a single voxel (block) update for spatial replication to nearby chunks. Requires a bearer game token; opens a UDP proxy session automatically if none exists. Returns Boolean! that is true only when the datagram was ACCEPTED FOR SENDING to the game server — NOT confirmation that the world applied the change. There is NO separate per-request success response: the change fans out to nearby clients (the sender included) as a VoxelUpdateNotification carrying the same sequenceNumber (VoxelUpdateResponse is legacy and is never emitted). Failures arrive ASYNCHRONOUSLY as a GenericErrorResponse; both are correlated by the request sequenceNumber (correlation only — not an idempotency key; the server does not dedupe replays). Throws FORBIDDEN synchronously for a chunk only the app's world grid covers while the app's wilderness is closed (App.wildernessWritesOpen false).
|
|
9439
|
+
Send a single voxel (block) update for spatial replication to nearby chunks. Requires a bearer game token; opens a UDP proxy session automatically if none exists. Returns Boolean! that is true only when the datagram was ACCEPTED FOR SENDING to the game server — NOT confirmation that the world applied the change. There is NO separate per-request success response: the change fans out to nearby clients (the sender included) as a VoxelUpdateNotification carrying the same sequenceNumber (VoxelUpdateResponse is legacy and is never emitted). Failures arrive ASYNCHRONOUSLY as a GenericErrorResponse; both are correlated by the request sequenceNumber (correlation only — not an idempotency key; the server does not dedupe replays). Throws FORBIDDEN synchronously, before anything is sent, without the voxel edit permission updateVoxel checks for the chunk (app access, the tier's update_voxel_data, and update_voxel_data on the most specific grid covering the chunk), and for a chunk only the app's world grid covers while the app's wilderness is closed (App.wildernessWritesOpen false).
|
|
9408
9440
|
"""
|
|
9409
9441
|
sendVoxelUpdate(
|
|
9410
9442
|
"""
|
|
@@ -9921,7 +9953,7 @@ input UpdateAppInput {
|
|
|
9921
9953
|
"""
|
|
9922
9954
|
metadata: String
|
|
9923
9955
|
"""
|
|
9924
|
-
Open (true) or close (false) the app's wilderness to voxel and chunk writes: chunks that no grid but the app's world grid covers. Closing refuses every write there, whoever makes it; each game API replica acts on the change within 15 seconds. Omit to leave unchanged.
|
|
9956
|
+
Open (true) or close (false) the app's wilderness to voxel and chunk writes: chunks that no grid but the app's world grid covers. Closing refuses every write there, whoever makes it; each game API replica, and each realtime server for a client's direct voxel updates, acts on the change within about 15 seconds. Omit to leave unchanged.
|
|
9925
9957
|
"""
|
|
9926
9958
|
wildernessWritesOpen: Boolean
|
|
9927
9959
|
}
|
|
@@ -10667,6 +10699,22 @@ input SetGridPermissionLimitsInput {
|
|
|
10667
10699
|
permissionKeys: [String!]!
|
|
10668
10700
|
}
|
|
10669
10701
|
|
|
10702
|
+
"""
|
|
10703
|
+
Set the permission keys a grid grants every player with active access to the app (writes the grid_open_permissions input table): an open build area, a public arena.
|
|
10704
|
+
"""
|
|
10705
|
+
input SetGridOpenPermissionsInput {
|
|
10706
|
+
"""The app (tenant) that owns the grid."""
|
|
10707
|
+
appId: BigInt!
|
|
10708
|
+
"""
|
|
10709
|
+
The grid to open (or close). Not the app's world grid, which is open by default.
|
|
10710
|
+
"""
|
|
10711
|
+
gridId: BigInt!
|
|
10712
|
+
"""
|
|
10713
|
+
The keys every player with active access holds on this grid, capped by its limits. Empty array closes it (players keep only what they are granted directly or through a group). Each must be an active grid permission key, unique, at most 64 chars, and not one of the four player-code keys.
|
|
10714
|
+
"""
|
|
10715
|
+
permissionKeys: [String!]!
|
|
10716
|
+
}
|
|
10717
|
+
|
|
10670
10718
|
"""
|
|
10671
10719
|
Grant runtime permission keys to a group (optionally one role) on a grid (writes the grid_group_grants input table).
|
|
10672
10720
|
"""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""GENERATED by scripts/codegen.py from schema.gql. Do not edit.
|
|
2
2
|
|
|
3
|
-
schema.gql sha256:
|
|
3
|
+
schema.gql sha256: 38c490a70f0bd92977fef5867e0b9e14a10d9467a2008dcd2c02bbc96878d8d3
|
|
4
4
|
"""
|
|
5
5
|
|
|
6
6
|
from enum import StrEnum
|
|
@@ -4,7 +4,7 @@ Every GraphQL input object as a msgspec Struct. Attributes are snake_case and en
|
|
|
4
4
|
under their GraphQL names; an attribute left at UNSET is omitted from the request,
|
|
5
5
|
which is how the API tells 'not provided' from an explicit null.
|
|
6
6
|
|
|
7
|
-
schema.gql sha256:
|
|
7
|
+
schema.gql sha256: 38c490a70f0bd92977fef5867e0b9e14a10d9467a2008dcd2c02bbc96878d8d3
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
10
|
from __future__ import annotations
|
|
@@ -860,6 +860,13 @@ class SetCrowdyStudioProviderConsentInput(msgspec.Struct, kw_only=True, omit_def
|
|
|
860
860
|
consented: bool
|
|
861
861
|
|
|
862
862
|
|
|
863
|
+
class SetGridOpenPermissionsInput(msgspec.Struct, kw_only=True, omit_defaults=True, rename={'app_id': 'appId', 'grid_id': 'gridId', 'permission_keys': 'permissionKeys'}):
|
|
864
|
+
'Set the permission keys a grid grants every player with active access to the app (writes the grid_open_permissions input table): an open build area, a public arena.'
|
|
865
|
+
app_id: str
|
|
866
|
+
grid_id: str
|
|
867
|
+
permission_keys: list[str]
|
|
868
|
+
|
|
869
|
+
|
|
863
870
|
class SetGridPermissionLimitsInput(msgspec.Struct, kw_only=True, omit_defaults=True, rename={'app_id': 'appId', 'grid_id': 'gridId', 'permission_keys': 'permissionKeys'}):
|
|
864
871
|
'Set the per-grid permission-key whitelist (writes the grid_permission_limits input table).'
|
|
865
872
|
app_id: str
|
|
@@ -1213,6 +1220,7 @@ __all__ = [
|
|
|
1213
1220
|
'SetCrowdyStudioLibraryFileArchivedInput',
|
|
1214
1221
|
'SetCrowdyStudioProjectArchivedInput',
|
|
1215
1222
|
'SetCrowdyStudioProviderConsentInput',
|
|
1223
|
+
'SetGridOpenPermissionsInput',
|
|
1216
1224
|
'SetGridPermissionLimitsInput',
|
|
1217
1225
|
'SetHostedGameEnabledInput',
|
|
1218
1226
|
'SetHostedGameListingInput',
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""GENERATED by scripts/codegen.py from schema.gql and operations/. Do not edit.
|
|
2
2
|
|
|
3
|
-
schema.gql sha256:
|
|
4
|
-
operations/ sha256:
|
|
3
|
+
schema.gql sha256: 38c490a70f0bd92977fef5867e0b9e14a10d9467a2008dcd2c02bbc96878d8d3
|
|
4
|
+
operations/ sha256: d5e0c505589ea26ecc3398b12f02ad7bd786457f7010ad87dcb8af2ea9366c77
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
7
|
from crowdypy._operation import Operation
|
|
@@ -1079,6 +1079,14 @@ GRID_GROUP_GRANTS = Operation(
|
|
|
1079
1079
|
document='query GridGroupGrants($appId: BigInt!, $gridId: BigInt!, $groupId: BigInt!) {\n gridGroupGrants(appId: $appId, gridId: $gridId, groupId: $groupId) {\n appId\n gridId\n groupId\n groupRoleId\n permissionKey\n expiresAt\n }\n}',
|
|
1080
1080
|
)
|
|
1081
1081
|
|
|
1082
|
+
# gameApps/GameApps.graphql
|
|
1083
|
+
GRID_OPEN_PERMISSIONS = Operation(
|
|
1084
|
+
name='GridOpenPermissions',
|
|
1085
|
+
kind='query',
|
|
1086
|
+
root_fields=('gridOpenPermissions',),
|
|
1087
|
+
document='query GridOpenPermissions($appId: BigInt!, $gridId: BigInt!) {\n gridOpenPermissions(appId: $appId, gridId: $gridId) {\n appId\n gridId\n permissionKeys\n }\n}',
|
|
1088
|
+
)
|
|
1089
|
+
|
|
1082
1090
|
# gameApps/GameApps.graphql
|
|
1083
1091
|
GRID_OWNERSHIP = Operation(
|
|
1084
1092
|
name='GridOwnership',
|
|
@@ -1743,6 +1751,14 @@ SET_CHANNEL_POLICY = Operation(
|
|
|
1743
1751
|
document='mutation SetChannelPolicy($input: SetChannelPolicyInput!) {\n setChannelPolicy(input: $input) {\n appId\n groupType\n creationPolicy\n defaultMembershipPolicy\n maxMembers\n maxGroupsPerUser\n }\n}',
|
|
1744
1752
|
)
|
|
1745
1753
|
|
|
1754
|
+
# gameApps/GameApps.graphql
|
|
1755
|
+
SET_GRID_OPEN_PERMISSIONS = Operation(
|
|
1756
|
+
name='SetGridOpenPermissions',
|
|
1757
|
+
kind='mutation',
|
|
1758
|
+
root_fields=('setGridOpenPermissions',),
|
|
1759
|
+
document='mutation SetGridOpenPermissions($input: SetGridOpenPermissionsInput!) {\n setGridOpenPermissions(input: $input) {\n appId\n gridId\n permissionKeys\n }\n}',
|
|
1760
|
+
)
|
|
1761
|
+
|
|
1746
1762
|
# gameApps/GameApps.graphql
|
|
1747
1763
|
SET_GRID_PERMISSION_LIMITS = Operation(
|
|
1748
1764
|
name='SetGridPermissionLimits',
|
|
@@ -2263,6 +2279,7 @@ OPERATIONS: dict[str, Operation] = {op.name: op for op in (
|
|
|
2263
2279
|
GRAPHQL_SERVERS,
|
|
2264
2280
|
GRID_CHANNELS,
|
|
2265
2281
|
GRID_GROUP_GRANTS,
|
|
2282
|
+
GRID_OPEN_PERMISSIONS,
|
|
2266
2283
|
GRID_OWNERSHIP,
|
|
2267
2284
|
GRID_PERMISSION_LIMITS,
|
|
2268
2285
|
GRID_USER_PERMISSIONS,
|
|
@@ -2346,6 +2363,7 @@ OPERATIONS: dict[str, Operation] = {op.name: op for op in (
|
|
|
2346
2363
|
SET_AUTO_BILLING,
|
|
2347
2364
|
SET_CHANNEL_MEMBER_ROLES,
|
|
2348
2365
|
SET_CHANNEL_POLICY,
|
|
2366
|
+
SET_GRID_OPEN_PERMISSIONS,
|
|
2349
2367
|
SET_GRID_PERMISSION_LIMITS,
|
|
2350
2368
|
SET_PLAYER_AUTO_BILLING,
|
|
2351
2369
|
SET_PLAYER_RATE_MARKUP,
|
{crowdypy-0.4.0.dev1 → crowdypy-0.5.0.dev1}/src/crowdypy/_sync/domains/crowdy_studio_agent.py
RENAMED
|
@@ -6,7 +6,8 @@ The model endpoint itself is REST (``GET /v1/model/models``, ``POST
|
|
|
6
6
|
spends tokens through. These GraphQL companions read what it recorded and gate whether it
|
|
7
7
|
may run: the player's provider consent and own usage (``use_studio_agent``), and the app's
|
|
8
8
|
policy and sanitized usage (``view_compute_diagnostics``; ``manage_compute`` to change it).
|
|
9
|
-
Mirrors CrowdyCPP's ``CrowdyStudioAgentAPI
|
|
9
|
+
Mirrors CrowdyCPP's ``CrowdyStudioAgentAPI``. CrowdyJS's in-browser agent sends the consent
|
|
10
|
+
and model-usage roots itself; its portable API sends none of the seven.
|
|
10
11
|
"""
|
|
11
12
|
|
|
12
13
|
from __future__ import annotations
|