crowdypy 0.9.1.dev1__tar.gz → 0.10.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.9.1.dev1 → crowdypy-0.10.0.dev1}/MIGRATION.md +26 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/PKG-INFO +8 -1
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/README.md +7 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/docs/compatibility.md +1 -1
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/docs/e2e-coverage.md +3 -1
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/docs/parity-matrix.md +2 -2
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/inputLog/InputLogSessions.graphql +1 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/pyproject.toml +9 -9
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/schema.gql +52 -22
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_generated/enums.py +1 -1
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_generated/inputs.py +1 -1
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_generated/operations.py +3 -3
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/apps.py +3 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/input_log.py +31 -14
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_version.py +1 -1
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/apps.py +3 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/input_log.py +31 -14
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/player_host/schemas.v1.json +2 -2
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/e2e/conftest.py +13 -11
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/e2e/test_e2e_identity.py +12 -2
- crowdypy-0.10.0.dev1/tests/e2e/test_e2e_input_log.py +62 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/fixtures/player-host.v1.json +2 -2
- crowdypy-0.10.0.dev1/tests/unit/domains/test_input_log_reads.py +97 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/uv.lock +1 -1
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/CMakeLists.txt +1 -1
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/PROVENANCE.md +1 -1
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/result.hpp +4 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/domain_base.hpp +17 -2
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/world_data.hpp +92 -8
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/generated/enums.hpp +2 -2
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/generated/operations.hpp +4 -2
- crowdypy-0.10.0.dev1/vendor/CrowdyCPP/include/crowdy/graphql/cancel.hpp +38 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/errors.hpp +48 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/graphql_client.hpp +28 -5
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/http.hpp +7 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/package.json +6 -6
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/client.cpp +4 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/graphql/async_transport.cpp +3 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/graphql/error_extensions.hpp +2 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/graphql/graphql_client.cpp +75 -17
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/graphql/http_curl.cpp +24 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/session/world_session.cpp +3 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/crowdy-studio-diagnostics.v1.json +2 -2
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/crowdyjs-studio-layout.v1.json +2 -2
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/.gitattributes +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/.gitignore +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/.gitleaks.toml +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/AGENTS.md +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/CMakeLists.txt +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/LICENSE +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/SECURITY.md +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/benchmarks/README.md +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/benchmarks/bench_replication.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/licenses/OpenSSL-LICENSE.txt +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/native/common.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/native/module.cpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/native/replication.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/native/replication_binding.cpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/native/session_binding.cpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/native/voice_binding.cpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/native/wire_binding.cpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/actors/Actor.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/actors/Actors.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/actors/BatchLookupActors.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/actors/CreateActor.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/actors/DeleteActor.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/actors/UpdateActor.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/actors/UpdateActorState.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/AppAccessTiers.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/AppFeatures.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/AppGrantMemberCandidates.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/AppUserAccessByApp.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/ArchiveAccessTier.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/ClaimFreeAppAccess.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/CreateAccessTier.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/DefineAppFeature.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/GrantAppAccess.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/GrantMyAppAccess.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/GrantTierFeature.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/MyAppAccess.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/RevokeAppAccess.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/RevokeTierFeature.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/RuntimePermissions.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/SuspendAppAccess.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/TierFeatures.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/UpdateAccessTier.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/apps/App.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/apps/AppBySlug.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/apps/AppDiscovery.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/apps/AppsForOrg.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/apps/ArchiveApp.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/apps/CodeAdmissions.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/apps/CreateApp.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/apps/MarketplaceApps.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/apps/MyApps.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/apps/PlaceableDatacenters.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/apps/UpdateApp.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/auth/Logout.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/auth/LogoutAllDevices.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/avatars/Avatars.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/billing/AppBudget.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/billing/AppBudgets.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/billing/SetAppBudget.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/billing/WalletBalance.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/billing/WalletTransactions.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/AddChannelMember.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/Channel.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/ChannelMembers.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/ChannelPolicy.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/ChannelRoles.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/Channels.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/CreateChannel.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/CreateChannelRole.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/DeleteChannel.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/DeleteChannelRole.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/JoinChannel.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/LeaveChannel.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/MyChannels.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/RemoveChannelMember.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/RequestToJoinChannel.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/SetChannelMemberRoles.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/SetChannelPolicy.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/UpdateChannel.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/UpdateChannelRole.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/chunks/GetChunk.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/chunks/GetChunkLods.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/chunks/GetChunksByDistance.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/chunks/GetVoxelList.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/chunks/UpdateChunk.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/chunks/UpdateChunkLods.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/chunks/UpdateChunkState.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/crowdyStudio/CrowdyStudio.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/exec/Exec.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/gameApps/GameApps.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/grids/CreateGridChannel.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/grids/GridChannels.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/grids/MintGridToken.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/host/Host.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/inputLog/InputLogMessages.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/marketplace/Marketplace.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/CreateOrgRole.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/CreateOrgToken.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/CreateOrganization.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/DeleteOrgRole.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/InviteOrgMember.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/MemberRoles.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/MyOrganizations.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/OrgMembers.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/OrgPermissions.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/OrgRoles.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/OrgTokens.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/Organization.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/OrganizationBySlug.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/RemoveOrgMember.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/RevokeOrgToken.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/UpdateOrgMemberRoles.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/UpdateOrgRole.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/UpdateOrgToken.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/payments/CapturePaypalCheckout.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/payments/CreateCheckout.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/payments/MyCheckouts.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/platform/PlatformConfig.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/playerWallet/PlayerWallet.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/quotas/DeleteQuota.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/quotas/EffectiveQuota.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/quotas/QuotasForApp.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/quotas/QuotasForOrg.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/quotas/SetQuota.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/serverStatus/ActiveGraphQLServers.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/serverStatus/GameClientBootstrap.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/serverStatus/GraphqlServers.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/serverStatus/ServerWithLeastClients.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/serverStatus/VersionInfo.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/sharedEnvironment/SharedEnvironment.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/state/DeleteUserAppState.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/state/UpdateUserAppState.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/state/UserAppState.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/state/UserAppStates.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/AddTeamMember.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/CreateTeam.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/CreateTeamRole.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/DeleteTeam.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/DeleteTeamRole.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/JoinTeam.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/LeaveTeam.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/MyTeams.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/RemoveTeamMember.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/RequestToJoinTeam.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/SetTeamMemberRoles.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/SetTeamPolicy.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/Team.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/TeamMembers.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/TeamPolicy.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/TeamRoles.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/Teams.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/UpdateTeam.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/UpdateTeamRole.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teleport/TeleportRequest.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/usage/AppGraphqlOperations.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/usage/AppUsageSummary.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/usage/PlayerPulse.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/users/DeleteMyAccount.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/users/FreePlayWindow.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/users/Me.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/users/PlayerProfile.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/users/UpdateGamertag.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/users/UpdateUserState.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/users/User.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/voxels/ListVoxelUpdatesByDistance.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/voxels/ListVoxels.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/voxels/RollbackVoxelUpdates.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/voxels/UpdateVoxel.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/voxels/VoxelUpdateHistory.graphql +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/scripts/_pins.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/scripts/ci/assert_default_origin.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/scripts/ci/build_openssl.sh +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/scripts/ci/check_content_policy.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/scripts/ci/check_pin_tiers.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/scripts/ci/cibw_before_all_linux.sh +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/scripts/ci/resolve-release-tier.sh +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/scripts/ci/resolve-release-tier.test.sh +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/scripts/ci/resolve_pypi_version.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/scripts/ci/stamp_version.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/scripts/ci/verify_artifacts.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/scripts/codegen.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/scripts/schema_drift.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/scripts/schema_sync.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/scripts/unasync.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/scripts/vendor_crowdycpp.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/__init__.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_concurrency.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_default_origin.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_generated/__init__.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_grid.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_native.pyi +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_operation.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/__init__.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/client.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/__init__.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/_base.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/actors.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/admin.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/app_access.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/auth.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/avatars.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/billing.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/channels.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/chunks.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/crowdy_studio.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/crowdy_studio_agent.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/crowdy_studio_github.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/discovery.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/exec.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/game_apps.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/grids.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/host.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/marketplace.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/organizations.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/payments.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/platform.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/player_wallet.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/portal.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/quotas.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/server_status.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/shared_environment.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/state.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/teams.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/teleport.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/udp.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/usage.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/users.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/voxels.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/graphql.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/grid_scope.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/kit/__init__.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/kit/actions.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/kit/kit.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/kit/social.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/kit/wire.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/rediscover.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/stores.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/world.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/auth_state.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/client.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/codecs.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/datacenter_redirect.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/__init__.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/_base.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/actors.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/admin.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/app_access.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/auth.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/avatars.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/billing.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/channels.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/chunks.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/crowdy_studio.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/crowdy_studio_agent.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/crowdy_studio_github.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/discovery.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/exec.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/game_apps.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/grids.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/host.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/marketplace.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/organizations.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/payments.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/platform.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/player_wallet.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/portal.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/quotas.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/server_status.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/shared_environment.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/state.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/teams.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/teleport.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/udp.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/usage.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/users.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/voxels.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/enums.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/errors.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/estate.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/exec_gateway.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/graphql.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/grid_scope.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/inputs.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/kit/__init__.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/kit/actions.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/kit/kit.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/kit/social.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/kit/wire.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/lb_cookie.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/media.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/pkce.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/player_host/__init__.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/player_host/agent_errors.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/player_host/agent_types.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/player_host/json_schema.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/player_host/schemas.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/player_host/types.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/py.typed +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/rediscover.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/replication.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/session.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/stores.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/studio/__init__.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/studio/client_tick_interval.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/studio/controller.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/studio/diagnostics.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/studio/github_new_repo.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/studio/layout.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/studio/models.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/studio/starter_projects.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/subscriptions.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/sync.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/utils.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/wire.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/world.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/conftest.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/e2e/__init__.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/e2e/test_e2e_open_grid_exec_gateway.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/e2e/test_e2e_ranged_channel.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/e2e/test_e2e_replication.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/e2e/test_e2e_studio.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/e2e/test_e2e_world.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/e2e/test_e2e_world_data.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/fixtures/README.md +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/fixtures/binary-wire-fixtures.json +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/fixtures/exec-client-frames.json +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/fixtures/voice-frames.json +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/__init__.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/domains/__init__.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/domains/test_crowdycpp_roots.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/domains/test_org_domains.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/domains/test_social_domains.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/domains/test_studio_exec_domains.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/domains/test_world_domains.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_check_pin_tiers.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_core.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_durable_stores.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_estate_moves.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_exec_gateway.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_fixture_provenance.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_grid_scope.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_kit.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_lazy_exports.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_player_host.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_refusals.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_release_versions.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_replication.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_sdk_audience.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_studio_controller.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_studio_diagnostics.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_studio_layout.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_subscriptions.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_transport.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_udp_api.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_voice_frames.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_wire.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_world_session.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tools/e2e/provision.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tools/fixtures/player_host.mjs +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tools/parity/classifications.toml +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tools/parity/parity.py +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/LICENSE +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/cmake/CheckPublicHeaders.cmake +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/cmake/CrowdyCPPConfig.cmake.in +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/cmake/CrowdyFindOpus.cmake +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/cmake/studio_layout_fixture.hpp.in +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/client.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/base64.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/bytes.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/clock.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/crypto.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/logger.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/spsc.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/uuid.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/crowdy.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/default_origin.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/admin.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/auth.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/crowdy_studio.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/crowdy_studio_agent.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/crowdy_studio_github.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/discovery.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/exec.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/game_apps.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/grids.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/groups.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/marketplace.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/player_wallet.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/portal.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/realtime_control.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/server_status.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/types.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/users.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/async_scope.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/auth_state.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/datacenter_redirect.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/dispatcher.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/estate.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/json.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/rediscover.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/subscription_client.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/websocket.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/actions.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/kit.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/social.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/wire.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/media/opus.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/media/video_frames.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/media/voice_frames.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/player_host/adapter.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/player_host/player_host.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/player_host/schemas.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/player_host/types.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/replication/connection.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/replication/session_provider.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/replication/types.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/replication/udp_socket.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/chunk_store.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/codec.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/durable.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/keys.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/stores.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/world_session.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/controller.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/diagnostics.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/editor.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/github.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/github_layout.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/integration.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/layout.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/models.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/runtime.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/wire/codec.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/wire/protocol.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/world.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/core/base64.cpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/core/clock.cpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/core/crypto_default_unavailable.cpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/core/crypto_openssl.cpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/core/crypto_unavailable.cpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/core/logger.cpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/core/uuid.cpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/domains/exec.cpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/graphql/auth_state.cpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/graphql/errors.cpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/graphql/http_none.cpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/graphql/json.cpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/graphql/subscription_client.cpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/graphql/websocket_curl.cpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/graphql/websocket_none.cpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/media/opus.cpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/player_host/schemas.cpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/player_host/types.cpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/replication/connection.cpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/replication/socket_errors.hpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/replication/udp_socket.cpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/studio/diagnostics.cpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/studio/editor.cpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/studio/integration.cpp +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/third_party/yyjson/LICENSE +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/third_party/yyjson/yyjson.c +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/third_party/yyjson/yyjson.h +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/exec-client-frames.json +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/exec-gateway-cases.json +0 -0
- {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/voice-frames.json +0 -0
|
@@ -3,6 +3,32 @@
|
|
|
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.10.0
|
|
7
|
+
|
|
8
|
+
CrowdyJS 18.9.0 and CrowdyCPP 0.62.0. Additive, with one floor: every sessions read selects
|
|
9
|
+
`InputLogSession.missingRecords`, so `client.input_log.sessions` needs the Game API release after
|
|
10
|
+
v2.40.2 (an older one refuses the selection).
|
|
11
|
+
|
|
12
|
+
- **`missingRecords`** on every recorded session: inputs the replication server accepted that
|
|
13
|
+
never reached the log (an overloaded server or a broker outage). 0 when the recording is
|
|
14
|
+
complete as far as it is known; `None` on one recorded before the count existed. A lost end of
|
|
15
|
+
the recording cannot be counted: that session closes as `unrecorded`.
|
|
16
|
+
- **End reasons.** `endReason` may also be `logging_off`, `shutdown`, `paused` (recording paused
|
|
17
|
+
while the app's logging setting could not be confirmed; a later record reopens the session) or
|
|
18
|
+
`unrecorded`; the `sessions` docstring says what each means.
|
|
19
|
+
- **Retrying a read.** `INPUT_LOG_TEMPORARILY_UNAVAILABLE` and `INPUT_LOG_RATE_LIMITED` carry
|
|
20
|
+
`extensions["retryable"]`: retry with the same cursor after a short back-off, a bounded number
|
|
21
|
+
of times. A malformed cursor, or one from another session, is `BAD_USER_INPUT`.
|
|
22
|
+
- **Stopping a read** (CrowdyJS's `signal`): cancel its task, or wrap it in `asyncio.timeout`. The
|
|
23
|
+
request is closed, which frees its share of the server's reads (one per user, two per app and
|
|
24
|
+
per org at a time); the client's own timeout applies either way. CrowdyCPP 0.62.0's
|
|
25
|
+
`CancelToken` is the C++ form; CrowdyPy's GraphQL client is Python's, so it needs none.
|
|
26
|
+
- **`INPUT_LOG_FUNDS_NEEDED`** on `client.apps.update(app_id, {"replayLoggingEnabled": True})` carries
|
|
27
|
+
`extensions["requiredMicrousd"]` and `["spendableMicrousd"]`: the balance turning logging on
|
|
28
|
+
needs and what the org wallet can spend.
|
|
29
|
+
- The vendored CrowdyCPP adds `Errc.Cancelled` beside the codes the replication layer reports;
|
|
30
|
+
nothing in the native client returns it.
|
|
31
|
+
|
|
6
32
|
## 0.9.1
|
|
7
33
|
|
|
8
34
|
A patch release with the same API as 0.9.0, the same CrowdyJS (18.8.0) and CrowdyCPP (0.61.0) pins.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: crowdypy
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.10.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,13 @@ 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.10.0: the input log says what it lost (CrowdyJS 18.9.0, CrowdyCPP 0.62.0).** Every session
|
|
55
|
+
from `client.input_log.sessions` carries `missingRecords`, the inputs the replication server
|
|
56
|
+
accepted that never reached the log, which needs the Game API release after v2.40.2. Its
|
|
57
|
+
docstrings name the new end reasons (`paused` among them), the two read refusals worth retrying
|
|
58
|
+
with the same cursor, and how to stop a read nobody will see: cancel its task, which closes the
|
|
59
|
+
request and frees its server read share. See [MIGRATION.md](MIGRATION.md).
|
|
60
|
+
|
|
54
61
|
**v0.9.1: the input log's session filter sends `userId` as a string, and its reads document when
|
|
55
62
|
to retry.** See the 0.9.1 bullet below; 0.9.0 added the SDK a build compiled against.
|
|
56
63
|
|
|
@@ -11,6 +11,13 @@ 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.10.0: the input log says what it lost (CrowdyJS 18.9.0, CrowdyCPP 0.62.0).** Every session
|
|
15
|
+
from `client.input_log.sessions` carries `missingRecords`, the inputs the replication server
|
|
16
|
+
accepted that never reached the log, which needs the Game API release after v2.40.2. Its
|
|
17
|
+
docstrings name the new end reasons (`paused` among them), the two read refusals worth retrying
|
|
18
|
+
with the same cursor, and how to stop a read nobody will see: cancel its task, which closes the
|
|
19
|
+
request and frees its server read share. See [MIGRATION.md](MIGRATION.md).
|
|
20
|
+
|
|
14
21
|
**v0.9.1: the input log's session filter sends `userId` as a string, and its reads document when
|
|
15
22
|
to retry.** See the 0.9.1 bullet below; 0.9.0 added the SDK a build compiled against.
|
|
16
23
|
|
|
@@ -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.10.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
|
|
@@ -18,7 +18,7 @@ Unconfigured, every suite skips, so `pytest` in CI records skips, not live passe
|
|
|
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
20
|
| `CROWDY_E2E_THROWAWAY_OWNER=1` | no | the open-grid suite registers a throwaway owner, org and app (archived afterwards) |
|
|
21
|
-
| `CROWDY_E2E_PROVISIONING_TOKEN` | dev and test | dev and test are staff-only, so a new derived player is refused (`TIER_ACCESS_REQUIRED`) unless `register` carries a provisioning token covering its address. Use the `harness` token (Secrets Manager `infra-cp/<tier>/loadtest/provisioning-token-harness`, `token` key) with `CROWDY_E2E_EMAIL=crowdy-e2e@test.invalid
|
|
21
|
+
| `CROWDY_E2E_PROVISIONING_TOKEN` | dev and test | dev and test are staff-only, so a new derived player is refused (`TIER_ACCESS_REQUIRED`) unless `register` carries a provisioning token covering its address. Use the `harness` token (Secrets Manager `infra-cp/<tier>/loadtest/provisioning-token-harness`, `token` key), which covers `crowdy-e2e*@test.invalid`, with `CROWDY_E2E_EMAIL=crowdy-e2e-py@test.invalid` (the `*` needs at least one character, so the bare `crowdy-e2e@test.invalid` is refused for a suite that registers the base address). Sent on `register` only; other tiers ignore it |
|
|
22
22
|
|
|
23
23
|
```bash
|
|
24
24
|
pytest tests/e2e -q
|
|
@@ -44,6 +44,7 @@ player once and signs it in for the later suites.
|
|
|
44
44
|
| `test_e2e_ranged_channel.py` | the owner's invite channel with four members, each keeping an actor at its own chunk: a distance-limited channel message from A reaches B at 5 chunks with `max_distance` 5 but not C (about 5.66) or D (7); 6 adds C, 7 adds D; A never receives its own; no send is refused | `e2e_ranged_channel` |
|
|
45
45
|
| `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` |
|
|
46
46
|
| `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` |
|
|
47
|
+
| `test_e2e_input_log.py` | read-only, as the owner: the app's sessions list with `missingRecords` on every node (the Game API release after v2.40.2 accepts the selection), one session's inputs page when there is one, and a cancelled read stops with the client still usable | `e2e_input_log` |
|
|
47
48
|
|
|
48
49
|
## Live runs
|
|
49
50
|
|
|
@@ -56,6 +57,7 @@ player once and signs it in for the later suites.
|
|
|
56
57
|
| 2026-10-01 | dev tier, app `96701660793088`; the open-grid suite in its own throwaway org and app (`CROWDY_E2E_THROWAWAY_OWNER=1`) | `crowdypy 0.5.0.dev1` from PyPI (`pip install crowdypy` in a clean Python 3.12) | 10 passed; Studio skipped |
|
|
57
58
|
| 2026-10-08 | local stack: ck-api at the distance-limited channel branch (off `dev`), two replication servers serving message type 32, the 3-node Citus lab | 0.6.0 (branch) | identity, ranged channel, replication, world and world data suites: 10 passed |
|
|
58
59
|
| 2026-10-09 | dev tier, app `96701660793088`, after replication server v0.35.0 and ck-api v2.38.0 reached dev | `crowdypy 0.6.0.dev1` from PyPI (installed into a clean Python 3.12 with uv) | identity (incl. the terms gate), ranged channel, replication, world and world data suites: 10 passed |
|
|
60
|
+
| 2026-10-13 | dev tier (ck-api v2.42.0), app `96701660793088`, the `harness` provisioning token with `CROWDY_E2E_EMAIL=crowdy-e2e-py@test.invalid` | 0.10.0 (branch, vendoring CrowdyCPP `dev/v0.62.0`) | identity (the terms-gate case now registers with the token and no consents), input log, ranged channel, replication, world and world data suites: 12 passed; open grid (needs `CROWDY_E2E_THROWAWAY_OWNER=1`) and Studio skipped |
|
|
59
61
|
|
|
60
62
|
## Not covered here
|
|
61
63
|
|
|
@@ -4,8 +4,8 @@ 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.9.0` at `cee1997127549e372c57baab2f0e12f1f423f31a`
|
|
8
|
+
- CrowdyCPP (native core): `0.62.0` at `3845e797d06e788f5a7c0d8e1e3fd6d501c75693`
|
|
9
9
|
- schema.gql identical to CrowdyJS's: yes
|
|
10
10
|
- Gate mode: strict portable parity (every portable gap is release-blocking)
|
|
11
11
|
|
|
@@ -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.10.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,20 +119,20 @@ 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.9.0"
|
|
123
|
+
commit = "cee1997127549e372c57baab2f0e12f1f423f31a"
|
|
124
124
|
|
|
125
125
|
[tool.crowdypy.crowdycpp]
|
|
126
|
-
version = "0.
|
|
127
|
-
tag = "dev/v0.
|
|
128
|
-
commit = "
|
|
129
|
-
tree-sha256 = "
|
|
126
|
+
version = "0.62.0"
|
|
127
|
+
tag = "dev/v0.62.0"
|
|
128
|
+
commit = "3845e797d06e788f5a7c0d8e1e3fd6d501c75693"
|
|
129
|
+
tree-sha256 = "8a8226aa148e1c56ff620812ebaadb1fad757ebd5b801489cb1ec59e9cfe2695"
|
|
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.
|
|
133
133
|
[tool.crowdypy.graphql]
|
|
134
|
-
schema-sha256 = "
|
|
135
|
-
operations-sha256 = "
|
|
134
|
+
schema-sha256 = "4b19bc84aa340365f6a256dc10544ce9141d18437048867607c8a2d0e74a66de"
|
|
135
|
+
operations-sha256 = "013595fe2109633245b5c39446e884fad0ecb7d2fda3c2849c6087a5e6336f6c"
|
|
136
136
|
|
|
137
137
|
# The SDL the docs site publishes. scripts/schema_drift.py compares the snapshot against it
|
|
138
138
|
# on a schedule; nothing on the per-commit path reads the network.
|
|
@@ -1301,7 +1301,7 @@ type App {
|
|
|
1301
1301
|
"""
|
|
1302
1302
|
wildernessWritesOpen: Boolean!
|
|
1303
1303
|
"""
|
|
1304
|
-
Whether replay logging is on: the realtime servers record every client
|
|
1304
|
+
Whether replay logging is on: the realtime servers record every client message they accept for this app, searchable with inputLogSessions and readable with inputLogMessages, and billed as stored input logs. False (the default) records nothing ("No replication logging"). Set with updateApp (manage_apps); turning it on needs a wallet that covers the projected cost of one retention period, or a billing-exempt org.
|
|
1305
1305
|
"""
|
|
1306
1306
|
replayLoggingEnabled: Boolean!
|
|
1307
1307
|
"""
|
|
@@ -4637,7 +4637,7 @@ type AppUsageSummary {
|
|
|
4637
4637
|
"""
|
|
4638
4638
|
automationComputeUnits: String!
|
|
4639
4639
|
"""
|
|
4640
|
-
Stored input logs over the window, in byte-hours (string counter): the sum of the hourly samples, which is the quantity input_log_storage_byte_hours bills. Each recorded byte (InputLogMessage.sizeBytes) is held for the input log retention, one byte-hour per hour
|
|
4640
|
+
Stored input logs over the window, in byte-hours (string counter): the sum of the hourly samples, which is the quantity input_log_storage_byte_hours bills. Each recorded byte (InputLogMessage.sizeBytes) is held for the input log retention, one byte-hour per hour, so recordings keep accruing byte-hours after replay logging is turned off, until they age out. 0 when nothing was held during the window.
|
|
4641
4641
|
"""
|
|
4642
4642
|
inputLogByteHours: String!
|
|
4643
4643
|
"""
|
|
@@ -4681,7 +4681,7 @@ type AppUsageProjection {
|
|
|
4681
4681
|
"""
|
|
4682
4682
|
onTrackToExceed: Boolean
|
|
4683
4683
|
"""
|
|
4684
|
-
Stored input logs this calendar month so far, in byte-hours (input_log_storage_byte_hours, which has no free allowance).
|
|
4684
|
+
Stored input logs this calendar month so far, in byte-hours (input_log_storage_byte_hours, which has no free allowance). Recordings keep accruing after replay logging is turned off, until they age out at the end of the retention; 0 when nothing was held this month.
|
|
4685
4685
|
"""
|
|
4686
4686
|
inputLogByteHours: String!
|
|
4687
4687
|
"""
|
|
@@ -5156,11 +5156,11 @@ type InputLogSession {
|
|
|
5156
5156
|
"""When the latest recorded input or marker arrived."""
|
|
5157
5157
|
lastSeenAt: DateTime!
|
|
5158
5158
|
"""
|
|
5159
|
-
When the session ended
|
|
5159
|
+
When the session ended; null while it may still be running. A session whose end was not recorded is closed at its last record once it has gone an hour without one. Later records reopen a session (endedAt returns to null).
|
|
5160
5160
|
"""
|
|
5161
5161
|
endedAt: DateTime
|
|
5162
5162
|
"""
|
|
5163
|
-
How the session ended, as the client saw it
|
|
5163
|
+
How the session ended: expired, revoked, reconnect or released, as the client saw it; logging_off, when the app turned replay logging off while the session was open; shutdown, when the realtime server recording it stopped (a deploy), after which the client reconnects elsewhere; paused, when recording paused because the app's logging setting could not be confirmed, which the client does not see (a later record reopens the session); or unrecorded, when its end was not recorded and it was closed an hour after its last record. Null while it may still be running.
|
|
5164
5164
|
"""
|
|
5165
5165
|
endReason: String
|
|
5166
5166
|
"""Inputs recorded in the session."""
|
|
@@ -5171,6 +5171,10 @@ type InputLogSession {
|
|
|
5171
5171
|
byteCount: BigInt!
|
|
5172
5172
|
"""The client message types the session contains, ascending."""
|
|
5173
5173
|
messageTypes: [Int!]!
|
|
5174
|
+
"""
|
|
5175
|
+
Records the realtime servers numbered for this session that never reached the log: recording is best-effort, so an overloaded server or a broker outage can leave gaps, and this is how many. 0 when the recording is complete as far as it is known. A lost end of the recording cannot be counted (its session closes as unrecorded instead). Null for a session recorded before the realtime servers numbered their records.
|
|
5176
|
+
"""
|
|
5177
|
+
missingRecords: BigInt
|
|
5174
5178
|
}
|
|
5175
5179
|
|
|
5176
5180
|
"""An edge in a InputLogSession connection."""
|
|
@@ -6501,7 +6505,9 @@ type Query {
|
|
|
6501
6505
|
inputLogSessions(
|
|
6502
6506
|
"""The app whose recorded sessions to list."""
|
|
6503
6507
|
appId: BigInt!
|
|
6504
|
-
"""
|
|
6508
|
+
"""
|
|
6509
|
+
Return the first N edges after `after`. Default 50; clamped to 1..200, so 0 returns one edge.
|
|
6510
|
+
"""
|
|
6505
6511
|
first: Int
|
|
6506
6512
|
"""
|
|
6507
6513
|
Opaque cursor: return edges after this one. Pass a previous page's `pageInfo.endCursor`. Omit for the first page.
|
|
@@ -6511,14 +6517,16 @@ type Query {
|
|
|
6511
6517
|
filter: InputLogSessionFilter
|
|
6512
6518
|
): InputLogSessionConnection!
|
|
6513
6519
|
"""
|
|
6514
|
-
The recorded inputs of one session, oldest first, each exactly as the client sent it (without its authentication tail). Read from the input log by the offset ranges its index holds, so inputs past the published retention are gone even while the session is still listed. With 'manage_apps' on the app you may read any session; anyone else may read only their own, and any other session answers NOT_FOUND. Game plane: send the app-scoped token for this app to the app's datacenter. Page with `first` (default 50, max 200) and `after
|
|
6520
|
+
The recorded inputs of one session, oldest first, each exactly as the client sent it (without its authentication tail). Read from the input log by the offset ranges its index holds, so inputs past the published retention are gone even while the session is still listed. With 'manage_apps' on the app you may read any session; anyone else may read only their own, and any other session answers NOT_FOUND. Game plane: send the app-scoped token for this app to the app's datacenter. Page with `first` (default 50, max 200) and `after`, the previous page's endCursor for this same session (a cursor from another session is BAD_USER_INPUT); a page can hold fewer than `first` inputs, or none, when it stopped at its time or scan limit, so keep paging while hasNextPage is true. An operation may select this field only once. A server runs one read per user (two per app and per org) at a time; a read over that share waits for the earlier one within its own few-second deadline, and a read whose request is closed stops. Errors: INPUT_LOG_UNAVAILABLE when input logging is not configured on this deployment, or this server may not read its log (do not retry); INPUT_LOG_RATE_LIMITED (429) when the wait for an earlier read ran out or left too little time to read, and INPUT_LOG_TEMPORARILY_UNAVAILABLE (503) when the log cannot be read just now, both with extensions.retryable: retry shortly with the same cursor. A read whose request closed stops as INPUT_LOG_READ_ABORTED (499), which nobody receives.
|
|
6515
6521
|
"""
|
|
6516
6522
|
inputLogMessages(
|
|
6517
6523
|
"""The app the session belongs to."""
|
|
6518
6524
|
appId: BigInt!
|
|
6519
6525
|
"""The session to read: InputLogSession.gameTokenId."""
|
|
6520
6526
|
gameTokenId: BigInt!
|
|
6521
|
-
"""
|
|
6527
|
+
"""
|
|
6528
|
+
Return the first N edges after `after`. Default 50; clamped to 1..200, so 0 returns one edge.
|
|
6529
|
+
"""
|
|
6522
6530
|
first: Int
|
|
6523
6531
|
"""
|
|
6524
6532
|
Opaque cursor: return edges after this one. Pass a previous page's `pageInfo.endCursor`. Omit for the first page.
|
|
@@ -6583,7 +6591,9 @@ type Query {
|
|
|
6583
6591
|
Super admin only. Paginated user search across email, gamertag, disambiguation, and exact user_id. Relay cursor connection; prefer this over the offset-based usersPaginated.
|
|
6584
6592
|
"""
|
|
6585
6593
|
usersConnection(
|
|
6586
|
-
"""
|
|
6594
|
+
"""
|
|
6595
|
+
Return the first N edges after `after`. Default 50; clamped to 1..200, so 0 returns one edge.
|
|
6596
|
+
"""
|
|
6587
6597
|
first: Int
|
|
6588
6598
|
"""
|
|
6589
6599
|
Opaque cursor: return edges after this one. Pass a previous page's `pageInfo.endCursor`. Omit for the first page.
|
|
@@ -6630,7 +6640,9 @@ type Query {
|
|
|
6630
6640
|
Relay-style cursor-paginated version of `actors`: lists actors owned by the authenticated user, optionally narrowed by `filter` (appId, avatarId, uuid, chunk). Page forward with `first` (default 50, max 200) and `after` (an opaque cursor from a previous page’s `pageInfo.endCursor`); `totalCount` is the full number of matching actors. Requires a valid game token; only the caller’s own actors are returned (full state included). Under an app token the list is confined to that token’s app.
|
|
6631
6641
|
"""
|
|
6632
6642
|
actorsConnection(
|
|
6633
|
-
"""
|
|
6643
|
+
"""
|
|
6644
|
+
Return the first N edges after `after`. Default 50; clamped to 1..200, so 0 returns one edge.
|
|
6645
|
+
"""
|
|
6634
6646
|
first: Int
|
|
6635
6647
|
"""
|
|
6636
6648
|
Opaque cursor: return edges after this one. Pass a previous page's `pageInfo.endCursor`. Omit for the first page.
|
|
@@ -6724,7 +6736,9 @@ type Query {
|
|
|
6724
6736
|
appUserAccessConnection(
|
|
6725
6737
|
"""Numeric id of the app whose access records to list."""
|
|
6726
6738
|
appId: BigInt!
|
|
6727
|
-
"""
|
|
6739
|
+
"""
|
|
6740
|
+
Return the first N edges after `after`. Default 50; clamped to 1..200, so 0 returns one edge.
|
|
6741
|
+
"""
|
|
6728
6742
|
first: Int
|
|
6729
6743
|
"""
|
|
6730
6744
|
Opaque cursor: return edges after this one. Pass a previous page's `pageInfo.endCursor`. Omit for the first page.
|
|
@@ -6877,7 +6891,9 @@ type Query {
|
|
|
6877
6891
|
Public marketplace listing of apps. PUBLIC: no authentication required. Returns ONLY apps with visibility=PUBLIC AND status=LIVE (drafts, unlisted, private, and archived apps are never returned). Results are ordered newest-first. Relay cursor connection; prefer this over the offset-based apps.
|
|
6878
6892
|
"""
|
|
6879
6893
|
appsConnection(
|
|
6880
|
-
"""
|
|
6894
|
+
"""
|
|
6895
|
+
Return the first N edges after `after`. Default 50; clamped to 1..200, so 0 returns one edge.
|
|
6896
|
+
"""
|
|
6881
6897
|
first: Int
|
|
6882
6898
|
"""
|
|
6883
6899
|
Opaque cursor: return edges after this one. Pass a previous page's `pageInfo.endCursor`. Omit for the first page.
|
|
@@ -7007,10 +7023,12 @@ type Query {
|
|
|
7007
7023
|
Organization id (BigInt as a decimal string) whose transactions to list.
|
|
7008
7024
|
"""
|
|
7009
7025
|
orgId: BigInt!
|
|
7010
|
-
"""
|
|
7026
|
+
"""
|
|
7027
|
+
Maximum number of transactions to return, 1 to 200 (a value outside is clamped). Defaults to 50 when omitted.
|
|
7028
|
+
"""
|
|
7011
7029
|
limit: Int @deprecated(reason: "Use walletTransactionsConnection(first:, after:) instead. See /overview/pagination.")
|
|
7012
7030
|
"""
|
|
7013
|
-
Number of transactions to skip before returning results, for offset/limit pagination. Defaults to 0 when omitted.
|
|
7031
|
+
Number of transactions to skip before returning results, for offset/limit pagination, 0 to 9999999 (a value outside is clamped). Defaults to 0 when omitted.
|
|
7014
7032
|
"""
|
|
7015
7033
|
offset: Int @deprecated(reason: "Use walletTransactionsConnection(first:, after:) instead. See /overview/pagination.")
|
|
7016
7034
|
): [WalletTransaction!]! @requiresPermission(scope: "org", permission: "view_billing", scopeArg: "orgId")
|
|
@@ -7022,7 +7040,9 @@ type Query {
|
|
|
7022
7040
|
Organization id (BigInt as a decimal string) whose transactions to list.
|
|
7023
7041
|
"""
|
|
7024
7042
|
orgId: BigInt!
|
|
7025
|
-
"""
|
|
7043
|
+
"""
|
|
7044
|
+
Return the first N edges after `after`. Default 50; clamped to 1..200, so 0 returns one edge.
|
|
7045
|
+
"""
|
|
7026
7046
|
first: Int
|
|
7027
7047
|
"""
|
|
7028
7048
|
Opaque cursor: return edges after this one. Pass a previous page's `pageInfo.endCursor`. Omit for the first page.
|
|
@@ -7129,7 +7149,9 @@ type Query {
|
|
|
7129
7149
|
Lists the authenticated caller's own checkouts (newest first), across every org and app. Use this for a self-service payment history; use `checkoutsConnection` for the cross-tenant super-admin view. Requires an authenticated user. Relay cursor connection; prefer this over the offset-based myCheckouts.
|
|
7130
7150
|
"""
|
|
7131
7151
|
myCheckoutsConnection(
|
|
7132
|
-
"""
|
|
7152
|
+
"""
|
|
7153
|
+
Return the first N edges after `after`. Default 50; clamped to 1..200, so 0 returns one edge.
|
|
7154
|
+
"""
|
|
7133
7155
|
first: Int
|
|
7134
7156
|
"""
|
|
7135
7157
|
Opaque cursor: return edges after this one. Pass a previous page's `pageInfo.endCursor`. Omit for the first page.
|
|
@@ -7157,7 +7179,9 @@ type Query {
|
|
|
7157
7179
|
Cross-tenant payments audit across all users, orgs, and apps (newest first), with optional filtering. Restricted to super admins; requests from non-super-admins are rejected. For a caller's own history use `myCheckoutsConnection` instead. Relay cursor connection; prefer this over the offset-based checkouts.
|
|
7158
7180
|
"""
|
|
7159
7181
|
checkoutsConnection(
|
|
7160
|
-
"""
|
|
7182
|
+
"""
|
|
7183
|
+
Return the first N edges after `after`. Default 50; clamped to 1..200, so 0 returns one edge.
|
|
7184
|
+
"""
|
|
7161
7185
|
first: Int
|
|
7162
7186
|
"""
|
|
7163
7187
|
Opaque cursor: return edges after this one. Pass a previous page's `pageInfo.endCursor`. Omit for the first page.
|
|
@@ -7185,7 +7209,9 @@ type Query {
|
|
|
7185
7209
|
Audit log of inbound payment-provider webhook events (used for idempotent reconciliation of checkouts), newest first. Restricted to super admins; requests from non-super-admins are rejected. Relay cursor connection; prefer this over the offset-based paymentEvents.
|
|
7186
7210
|
"""
|
|
7187
7211
|
paymentEventsConnection(
|
|
7188
|
-
"""
|
|
7212
|
+
"""
|
|
7213
|
+
Return the first N edges after `after`. Default 50; clamped to 1..200, so 0 returns one edge.
|
|
7214
|
+
"""
|
|
7189
7215
|
first: Int
|
|
7190
7216
|
"""
|
|
7191
7217
|
Opaque cursor: return edges after this one. Pass a previous page's `pageInfo.endCursor`. Omit for the first page.
|
|
@@ -7248,7 +7274,9 @@ type Query {
|
|
|
7248
7274
|
playerUsageCharges(
|
|
7249
7275
|
"""Optional: only charges for this app."""
|
|
7250
7276
|
appId: BigInt
|
|
7251
|
-
"""
|
|
7277
|
+
"""
|
|
7278
|
+
Maximum number of charges to return, 1 to 200 (a value outside is clamped). Defaults to 50 when omitted.
|
|
7279
|
+
"""
|
|
7252
7280
|
limit: Int
|
|
7253
7281
|
): [PlayerUsageCharge!]!
|
|
7254
7282
|
"""
|
|
@@ -7584,7 +7612,9 @@ type Query {
|
|
|
7584
7612
|
Number of entries to skip for pagination. Defaults to 0 when omitted; allowed range is 0-1000000.
|
|
7585
7613
|
"""
|
|
7586
7614
|
offset: Int @deprecated(reason: "Use voxelUpdateHistoryConnection(first:, after:) instead. See /overview/pagination. Removal no earlier than 2027-01-01. (Ignored by voxelUpdateHistoryConnection, which shares these args.)")
|
|
7587
|
-
"""
|
|
7615
|
+
"""
|
|
7616
|
+
Return the first N edges after `after`. Default 50; clamped to 1..200, so 0 returns one edge.
|
|
7617
|
+
"""
|
|
7588
7618
|
first: Int
|
|
7589
7619
|
"""
|
|
7590
7620
|
Opaque cursor: return edges after this one. Pass a previous page's `pageInfo.endCursor`. Omit for the first page.
|
|
@@ -8829,7 +8859,7 @@ type Mutation {
|
|
|
8829
8859
|
input: CreateAppInput!
|
|
8830
8860
|
): App! @requiresPermission(scope: "org", permission: "manage_apps", scopeArg: "input.orgId")
|
|
8831
8861
|
"""
|
|
8832
|
-
Update mutable fields of an existing app (name, description, visibility, status, metadata, wildernessWritesOpen, replayLoggingEnabled); only fields present in the input are changed. Turning replayLoggingEnabled on is refused with INPUT_LOG_FUNDS_NEEDED unless the org's wallet
|
|
8862
|
+
Update mutable fields of an existing app (name, description, visibility, status, metadata, wildernessWritesOpen, replayLoggingEnabled); only fields present in the input are changed. Turning replayLoggingEnabled on is refused with INPUT_LOG_FUNDS_NEEDED unless the org's wallet can spend at least the projected cost of keeping one retention period of the app's recent traffic (extensions.requiredMicrousd and spendableMicrousd say how much), or the org is billing-exempt; recordings already kept go on billing after it is turned off, until they age out. Requires the 'manage_apps' permission on the app (resolved via its org); super admins bypass. Use this to publish (status=LIVE), change visibility, or restore an archived app (status back to DRAFT/LIVE). Throws if the app id does not exist.
|
|
8833
8863
|
"""
|
|
8834
8864
|
updateApp(
|
|
8835
8865
|
"""Numeric id of the app to update."""
|
|
@@ -10694,7 +10724,7 @@ input UpdateAppInput {
|
|
|
10694
10724
|
"""
|
|
10695
10725
|
wildernessWritesOpen: Boolean
|
|
10696
10726
|
"""
|
|
10697
|
-
Turn replay logging on (true) or off (false): record every client
|
|
10727
|
+
Turn replay logging on (true) or off (false): record every client message the realtime servers accept for this app (keep-alives included), kept for the input log's published retention and billed as stored input logs (input_log_storage_byte_hours, no free allowance). Turning it ON is refused with INPUT_LOG_FUNDS_NEEDED unless the org's wallet can spend at least the projected cost of keeping one retention period of the app's recent traffic, or the org is billing-exempt; turning it off always succeeds, and what was already recorded goes on billing until it ages out. Recording starts and stops within about 15 seconds. Omit to leave unchanged.
|
|
10698
10728
|
"""
|
|
10699
10729
|
replayLoggingEnabled: Boolean
|
|
10700
10730
|
"""
|
|
@@ -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: 4b19bc84aa340365f6a256dc10544ce9141d18437048867607c8a2d0e74a66de
|
|
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: 4b19bc84aa340365f6a256dc10544ce9141d18437048867607c8a2d0e74a66de
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
10
|
from __future__ import annotations
|
|
@@ -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: 4b19bc84aa340365f6a256dc10544ce9141d18437048867607c8a2d0e74a66de
|
|
4
|
+
operations/ sha256: 013595fe2109633245b5c39446e884fad0ecb7d2fda3c2849c6087a5e6336f6c
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
7
|
from crowdypy._operation import Operation
|
|
@@ -1132,7 +1132,7 @@ INPUT_LOG_SESSIONS = Operation(
|
|
|
1132
1132
|
name='InputLogSessions',
|
|
1133
1133
|
kind='query',
|
|
1134
1134
|
root_fields=('inputLogSessions',),
|
|
1135
|
-
document='query InputLogSessions($appId: BigInt!, $first: Int, $after: String, $filter: InputLogSessionFilter) {\n inputLogSessions(appId: $appId, first: $first, after: $after, filter: $filter) {\n edges {\n cursor\n node {\n appId\n gameTokenId\n userId\n datacenter\n startedAt\n lastSeenAt\n endedAt\n endReason\n messageCount\n byteCount\n messageTypes\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n totalCount\n }\n}',
|
|
1135
|
+
document='query InputLogSessions($appId: BigInt!, $first: Int, $after: String, $filter: InputLogSessionFilter) {\n inputLogSessions(appId: $appId, first: $first, after: $after, filter: $filter) {\n edges {\n cursor\n node {\n appId\n gameTokenId\n userId\n datacenter\n startedAt\n lastSeenAt\n endedAt\n endReason\n messageCount\n byteCount\n missingRecords\n messageTypes\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n totalCount\n }\n}',
|
|
1136
1136
|
)
|
|
1137
1137
|
|
|
1138
1138
|
# organizations/InviteOrgMember.graphql
|
|
@@ -243,6 +243,9 @@ class AppsAPI(Domain):
|
|
|
243
243
|
active grid keys, never a player-code key) are the grid permission keys a player's
|
|
244
244
|
claim grants its owner on the claimed grid, for claims made from then on; for
|
|
245
245
|
example ``update_voxel_data`` makes a claim buildable without a hub granting it.
|
|
246
|
+
``replayLoggingEnabled`` true raises ``INPUT_LOG_FUNDS_NEEDED`` unless the org wallet
|
|
247
|
+
can spend the projected cost of keeping one retention period of the app's recent
|
|
248
|
+
traffic; ``extensions["requiredMicrousd"]`` and ``["spendableMicrousd"]`` say how much.
|
|
246
249
|
"""
|
|
247
250
|
result: dict[str, Any] = self._request(
|
|
248
251
|
ops.UPDATE_APP, {"appId": bigint(app_id), "input": input}
|
|
@@ -1,17 +1,29 @@
|
|
|
1
1
|
# GENERATED by scripts/unasync.py from src/crowdypy/domains/input_log.py. Do not edit.
|
|
2
2
|
"""The input log (``client.input_log``): recorded client inputs of an app with replay logging on.
|
|
3
3
|
|
|
4
|
-
An app with replay logging on (``App.replayLoggingEnabled``, set with ``client.apps.update
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
4
|
+
An app with replay logging on (``App.replayLoggingEnabled``, set with ``client.apps.update``,
|
|
5
|
+
which raises ``INPUT_LOG_FUNDS_NEEDED`` unless the org wallet can spend the projected cost of
|
|
6
|
+
keeping one retention period of the app's recent traffic; ``extensions["requiredMicrousd"]`` and
|
|
7
|
+
``["spendableMicrousd"]`` say how much) has every client input the realtime servers accept
|
|
8
|
+
recorded. These calls read them back on the app-scoped client for the app; an identity session
|
|
9
|
+
token is refused. A player reads only the sessions and inputs they sent; a holder of
|
|
10
|
+
``manage_apps`` on the app reads every session. Inputs are kept for the input log's published
|
|
11
|
+
retention (up to about an hour longer), so an old session can still be listed after its inputs
|
|
12
|
+
are gone. Both answer ``INPUT_LOG_UNAVAILABLE`` on a deployment without input logging.
|
|
13
|
+
|
|
14
|
+
Recording is best-effort, and a session says what it lost: ``missingRecords`` counts the inputs
|
|
15
|
+
the replication server accepted that never reached the log (0 when the recording is complete as
|
|
16
|
+
far as is known, null on one recorded before the count existed); a lost end cannot be counted,
|
|
17
|
+
so that session closes as ``unrecorded``. Every sessions read selects it, so this needs the Game
|
|
18
|
+
API release after v2.40.2.
|
|
19
|
+
|
|
20
|
+
From that release, :meth:`InputLogAPI.messages` answers ``INPUT_LOG_TEMPORARILY_UNAVAILABLE``
|
|
21
|
+
when the log cannot be read right now and ``INPUT_LOG_RATE_LIMITED`` when a read waited out its
|
|
22
|
+
few-second deadline behind earlier ones (one per user, two per app and per org at a time): both
|
|
23
|
+
carry ``extensions["retryable"]``, so retry with the same cursor after a short back-off, a
|
|
24
|
+
bounded number of times. A read nobody will see should be cancelled, which is CrowdyJS's
|
|
25
|
+
``signal`` here: cancel its task (or let ``asyncio.timeout`` do it) and the request is closed,
|
|
26
|
+
which frees its share on the server. The client's own timeout applies either way.
|
|
15
27
|
"""
|
|
16
28
|
|
|
17
29
|
from __future__ import annotations
|
|
@@ -60,9 +72,14 @@ class InputLogAPI(Domain):
|
|
|
60
72
|
``filter`` takes ``userId`` (another user's needs ``manage_apps``, else ``FORBIDDEN``;
|
|
61
73
|
an int is sent as its decimal string), ``from`` / ``to`` and ``messageType``. Page with
|
|
62
74
|
``first`` (default 50, max 200) and the previous page's ``pageInfo.endCursor`` as
|
|
63
|
-
``after``. A node
|
|
64
|
-
``
|
|
65
|
-
|
|
75
|
+
``after``. A node carries ``missingRecords`` (see the module docstring). Its
|
|
76
|
+
``endReason`` is ``expired``, ``revoked``, ``reconnect`` or ``released`` as the client
|
|
77
|
+
saw it; ``logging_off`` (replay logging was turned off), ``shutdown`` (the replication
|
|
78
|
+
server recording it stopped; the session continues on another and its end is
|
|
79
|
+
replaced) or ``paused`` (recording paused while the app's logging setting could not
|
|
80
|
+
be confirmed; a later record reopens the session), from the Game API release after
|
|
81
|
+
v2.40.2; ``unrecorded`` (no end was recorded); or null while the session may still
|
|
82
|
+
run.
|
|
66
83
|
"""
|
|
67
84
|
result: dict[str, Any] = self._request(
|
|
68
85
|
ops.INPUT_LOG_SESSIONS,
|
|
@@ -252,6 +252,9 @@ class AppsAPI(Domain):
|
|
|
252
252
|
active grid keys, never a player-code key) are the grid permission keys a player's
|
|
253
253
|
claim grants its owner on the claimed grid, for claims made from then on; for
|
|
254
254
|
example ``update_voxel_data`` makes a claim buildable without a hub granting it.
|
|
255
|
+
``replayLoggingEnabled`` true raises ``INPUT_LOG_FUNDS_NEEDED`` unless the org wallet
|
|
256
|
+
can spend the projected cost of keeping one retention period of the app's recent
|
|
257
|
+
traffic; ``extensions["requiredMicrousd"]`` and ``["spendableMicrousd"]`` say how much.
|
|
255
258
|
"""
|
|
256
259
|
result: dict[str, Any] = await self._request(
|
|
257
260
|
ops.UPDATE_APP, {"appId": bigint(app_id), "input": input}
|
|
@@ -1,16 +1,28 @@
|
|
|
1
1
|
"""The input log (``client.input_log``): recorded client inputs of an app with replay logging on.
|
|
2
2
|
|
|
3
|
-
An app with replay logging on (``App.replayLoggingEnabled``, set with ``client.apps.update
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
3
|
+
An app with replay logging on (``App.replayLoggingEnabled``, set with ``client.apps.update``,
|
|
4
|
+
which raises ``INPUT_LOG_FUNDS_NEEDED`` unless the org wallet can spend the projected cost of
|
|
5
|
+
keeping one retention period of the app's recent traffic; ``extensions["requiredMicrousd"]`` and
|
|
6
|
+
``["spendableMicrousd"]`` say how much) has every client input the realtime servers accept
|
|
7
|
+
recorded. These calls read them back on the app-scoped client for the app; an identity session
|
|
8
|
+
token is refused. A player reads only the sessions and inputs they sent; a holder of
|
|
9
|
+
``manage_apps`` on the app reads every session. Inputs are kept for the input log's published
|
|
10
|
+
retention (up to about an hour longer), so an old session can still be listed after its inputs
|
|
11
|
+
are gone. Both answer ``INPUT_LOG_UNAVAILABLE`` on a deployment without input logging.
|
|
12
|
+
|
|
13
|
+
Recording is best-effort, and a session says what it lost: ``missingRecords`` counts the inputs
|
|
14
|
+
the replication server accepted that never reached the log (0 when the recording is complete as
|
|
15
|
+
far as is known, null on one recorded before the count existed); a lost end cannot be counted,
|
|
16
|
+
so that session closes as ``unrecorded``. Every sessions read selects it, so this needs the Game
|
|
17
|
+
API release after v2.40.2.
|
|
18
|
+
|
|
19
|
+
From that release, :meth:`InputLogAPI.messages` answers ``INPUT_LOG_TEMPORARILY_UNAVAILABLE``
|
|
20
|
+
when the log cannot be read right now and ``INPUT_LOG_RATE_LIMITED`` when a read waited out its
|
|
21
|
+
few-second deadline behind earlier ones (one per user, two per app and per org at a time): both
|
|
22
|
+
carry ``extensions["retryable"]``, so retry with the same cursor after a short back-off, a
|
|
23
|
+
bounded number of times. A read nobody will see should be cancelled, which is CrowdyJS's
|
|
24
|
+
``signal`` here: cancel its task (or let ``asyncio.timeout`` do it) and the request is closed,
|
|
25
|
+
which frees its share on the server. The client's own timeout applies either way.
|
|
14
26
|
"""
|
|
15
27
|
|
|
16
28
|
from __future__ import annotations
|
|
@@ -59,9 +71,14 @@ class InputLogAPI(Domain):
|
|
|
59
71
|
``filter`` takes ``userId`` (another user's needs ``manage_apps``, else ``FORBIDDEN``;
|
|
60
72
|
an int is sent as its decimal string), ``from`` / ``to`` and ``messageType``. Page with
|
|
61
73
|
``first`` (default 50, max 200) and the previous page's ``pageInfo.endCursor`` as
|
|
62
|
-
``after``. A node
|
|
63
|
-
``
|
|
64
|
-
|
|
74
|
+
``after``. A node carries ``missingRecords`` (see the module docstring). Its
|
|
75
|
+
``endReason`` is ``expired``, ``revoked``, ``reconnect`` or ``released`` as the client
|
|
76
|
+
saw it; ``logging_off`` (replay logging was turned off), ``shutdown`` (the replication
|
|
77
|
+
server recording it stopped; the session continues on another and its end is
|
|
78
|
+
replaced) or ``paused`` (recording paused while the app's logging setting could not
|
|
79
|
+
be confirmed; a later record reopens the session), from the Game API release after
|
|
80
|
+
v2.40.2; ``unrecorded`` (no end was recorded); or null while the session may still
|
|
81
|
+
run.
|
|
65
82
|
"""
|
|
66
83
|
result: dict[str, Any] = await self._request(
|
|
67
84
|
ops.INPUT_LOG_SESSIONS,
|