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.
Files changed (509) hide show
  1. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/MIGRATION.md +26 -0
  2. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/PKG-INFO +8 -1
  3. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/README.md +7 -0
  4. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/docs/compatibility.md +1 -1
  5. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/docs/e2e-coverage.md +3 -1
  6. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/docs/parity-matrix.md +2 -2
  7. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/inputLog/InputLogSessions.graphql +1 -0
  8. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/pyproject.toml +9 -9
  9. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/schema.gql +52 -22
  10. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_generated/enums.py +1 -1
  11. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_generated/inputs.py +1 -1
  12. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_generated/operations.py +3 -3
  13. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/apps.py +3 -0
  14. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/input_log.py +31 -14
  15. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_version.py +1 -1
  16. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/apps.py +3 -0
  17. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/input_log.py +31 -14
  18. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/player_host/schemas.v1.json +2 -2
  19. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/e2e/conftest.py +13 -11
  20. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/e2e/test_e2e_identity.py +12 -2
  21. crowdypy-0.10.0.dev1/tests/e2e/test_e2e_input_log.py +62 -0
  22. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/fixtures/player-host.v1.json +2 -2
  23. crowdypy-0.10.0.dev1/tests/unit/domains/test_input_log_reads.py +97 -0
  24. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/uv.lock +1 -1
  25. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/CMakeLists.txt +1 -1
  26. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/PROVENANCE.md +1 -1
  27. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/result.hpp +4 -0
  28. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/domain_base.hpp +17 -2
  29. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/world_data.hpp +92 -8
  30. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/generated/enums.hpp +2 -2
  31. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/generated/operations.hpp +4 -2
  32. crowdypy-0.10.0.dev1/vendor/CrowdyCPP/include/crowdy/graphql/cancel.hpp +38 -0
  33. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/errors.hpp +48 -0
  34. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/graphql_client.hpp +28 -5
  35. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/http.hpp +7 -0
  36. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/package.json +6 -6
  37. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/client.cpp +4 -0
  38. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/graphql/async_transport.cpp +3 -0
  39. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/graphql/error_extensions.hpp +2 -0
  40. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/graphql/graphql_client.cpp +75 -17
  41. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/graphql/http_curl.cpp +24 -0
  42. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/session/world_session.cpp +3 -0
  43. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/crowdy-studio-diagnostics.v1.json +2 -2
  44. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/crowdyjs-studio-layout.v1.json +2 -2
  45. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/.gitattributes +0 -0
  46. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/.gitignore +0 -0
  47. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/.gitleaks.toml +0 -0
  48. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/AGENTS.md +0 -0
  49. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/CMakeLists.txt +0 -0
  50. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/LICENSE +0 -0
  51. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/SECURITY.md +0 -0
  52. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/benchmarks/README.md +0 -0
  53. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/benchmarks/bench_replication.py +0 -0
  54. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/licenses/OpenSSL-LICENSE.txt +0 -0
  55. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/native/common.hpp +0 -0
  56. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/native/module.cpp +0 -0
  57. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/native/replication.hpp +0 -0
  58. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/native/replication_binding.cpp +0 -0
  59. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/native/session_binding.cpp +0 -0
  60. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/native/voice_binding.cpp +0 -0
  61. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/native/wire_binding.cpp +0 -0
  62. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/actors/Actor.graphql +0 -0
  63. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/actors/Actors.graphql +0 -0
  64. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/actors/BatchLookupActors.graphql +0 -0
  65. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/actors/CreateActor.graphql +0 -0
  66. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/actors/DeleteActor.graphql +0 -0
  67. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/actors/UpdateActor.graphql +0 -0
  68. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/actors/UpdateActorState.graphql +0 -0
  69. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/AppAccessTiers.graphql +0 -0
  70. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/AppFeatures.graphql +0 -0
  71. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/AppGrantMemberCandidates.graphql +0 -0
  72. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/AppUserAccessByApp.graphql +0 -0
  73. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/ArchiveAccessTier.graphql +0 -0
  74. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/ClaimFreeAppAccess.graphql +0 -0
  75. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/CreateAccessTier.graphql +0 -0
  76. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/DefineAppFeature.graphql +0 -0
  77. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/GrantAppAccess.graphql +0 -0
  78. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/GrantMyAppAccess.graphql +0 -0
  79. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/GrantTierFeature.graphql +0 -0
  80. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/MyAppAccess.graphql +0 -0
  81. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/RevokeAppAccess.graphql +0 -0
  82. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/RevokeTierFeature.graphql +0 -0
  83. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/RuntimePermissions.graphql +0 -0
  84. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/SuspendAppAccess.graphql +0 -0
  85. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/TierFeatures.graphql +0 -0
  86. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/appAccess/UpdateAccessTier.graphql +0 -0
  87. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/apps/App.graphql +0 -0
  88. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/apps/AppBySlug.graphql +0 -0
  89. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/apps/AppDiscovery.graphql +0 -0
  90. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/apps/AppsForOrg.graphql +0 -0
  91. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/apps/ArchiveApp.graphql +0 -0
  92. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/apps/CodeAdmissions.graphql +0 -0
  93. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/apps/CreateApp.graphql +0 -0
  94. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/apps/MarketplaceApps.graphql +0 -0
  95. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/apps/MyApps.graphql +0 -0
  96. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/apps/PlaceableDatacenters.graphql +0 -0
  97. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/apps/UpdateApp.graphql +0 -0
  98. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/auth/Logout.graphql +0 -0
  99. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/auth/LogoutAllDevices.graphql +0 -0
  100. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/avatars/Avatars.graphql +0 -0
  101. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/billing/AppBudget.graphql +0 -0
  102. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/billing/AppBudgets.graphql +0 -0
  103. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/billing/SetAppBudget.graphql +0 -0
  104. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/billing/WalletBalance.graphql +0 -0
  105. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/billing/WalletTransactions.graphql +0 -0
  106. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/AddChannelMember.graphql +0 -0
  107. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/Channel.graphql +0 -0
  108. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/ChannelMembers.graphql +0 -0
  109. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/ChannelPolicy.graphql +0 -0
  110. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/ChannelRoles.graphql +0 -0
  111. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/Channels.graphql +0 -0
  112. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/CreateChannel.graphql +0 -0
  113. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/CreateChannelRole.graphql +0 -0
  114. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/DeleteChannel.graphql +0 -0
  115. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/DeleteChannelRole.graphql +0 -0
  116. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/JoinChannel.graphql +0 -0
  117. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/LeaveChannel.graphql +0 -0
  118. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/MyChannels.graphql +0 -0
  119. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/RemoveChannelMember.graphql +0 -0
  120. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/RequestToJoinChannel.graphql +0 -0
  121. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/SetChannelMemberRoles.graphql +0 -0
  122. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/SetChannelPolicy.graphql +0 -0
  123. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/UpdateChannel.graphql +0 -0
  124. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/channels/UpdateChannelRole.graphql +0 -0
  125. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/chunks/GetChunk.graphql +0 -0
  126. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/chunks/GetChunkLods.graphql +0 -0
  127. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/chunks/GetChunksByDistance.graphql +0 -0
  128. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/chunks/GetVoxelList.graphql +0 -0
  129. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/chunks/UpdateChunk.graphql +0 -0
  130. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/chunks/UpdateChunkLods.graphql +0 -0
  131. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/chunks/UpdateChunkState.graphql +0 -0
  132. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/crowdyStudio/CrowdyStudio.graphql +0 -0
  133. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/exec/Exec.graphql +0 -0
  134. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/gameApps/GameApps.graphql +0 -0
  135. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/grids/CreateGridChannel.graphql +0 -0
  136. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/grids/GridChannels.graphql +0 -0
  137. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/grids/MintGridToken.graphql +0 -0
  138. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/host/Host.graphql +0 -0
  139. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/inputLog/InputLogMessages.graphql +0 -0
  140. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/marketplace/Marketplace.graphql +0 -0
  141. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/CreateOrgRole.graphql +0 -0
  142. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/CreateOrgToken.graphql +0 -0
  143. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/CreateOrganization.graphql +0 -0
  144. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/DeleteOrgRole.graphql +0 -0
  145. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/InviteOrgMember.graphql +0 -0
  146. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/MemberRoles.graphql +0 -0
  147. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/MyOrganizations.graphql +0 -0
  148. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/OrgMembers.graphql +0 -0
  149. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/OrgPermissions.graphql +0 -0
  150. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/OrgRoles.graphql +0 -0
  151. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/OrgTokens.graphql +0 -0
  152. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/Organization.graphql +0 -0
  153. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/OrganizationBySlug.graphql +0 -0
  154. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/RemoveOrgMember.graphql +0 -0
  155. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/RevokeOrgToken.graphql +0 -0
  156. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/UpdateOrgMemberRoles.graphql +0 -0
  157. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/UpdateOrgRole.graphql +0 -0
  158. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/organizations/UpdateOrgToken.graphql +0 -0
  159. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/payments/CapturePaypalCheckout.graphql +0 -0
  160. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/payments/CreateCheckout.graphql +0 -0
  161. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/payments/MyCheckouts.graphql +0 -0
  162. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/platform/PlatformConfig.graphql +0 -0
  163. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/playerWallet/PlayerWallet.graphql +0 -0
  164. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/quotas/DeleteQuota.graphql +0 -0
  165. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/quotas/EffectiveQuota.graphql +0 -0
  166. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/quotas/QuotasForApp.graphql +0 -0
  167. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/quotas/QuotasForOrg.graphql +0 -0
  168. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/quotas/SetQuota.graphql +0 -0
  169. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/serverStatus/ActiveGraphQLServers.graphql +0 -0
  170. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/serverStatus/GameClientBootstrap.graphql +0 -0
  171. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/serverStatus/GraphqlServers.graphql +0 -0
  172. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/serverStatus/ServerWithLeastClients.graphql +0 -0
  173. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/serverStatus/VersionInfo.graphql +0 -0
  174. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/sharedEnvironment/SharedEnvironment.graphql +0 -0
  175. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/state/DeleteUserAppState.graphql +0 -0
  176. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/state/UpdateUserAppState.graphql +0 -0
  177. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/state/UserAppState.graphql +0 -0
  178. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/state/UserAppStates.graphql +0 -0
  179. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/AddTeamMember.graphql +0 -0
  180. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/CreateTeam.graphql +0 -0
  181. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/CreateTeamRole.graphql +0 -0
  182. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/DeleteTeam.graphql +0 -0
  183. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/DeleteTeamRole.graphql +0 -0
  184. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/JoinTeam.graphql +0 -0
  185. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/LeaveTeam.graphql +0 -0
  186. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/MyTeams.graphql +0 -0
  187. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/RemoveTeamMember.graphql +0 -0
  188. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/RequestToJoinTeam.graphql +0 -0
  189. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/SetTeamMemberRoles.graphql +0 -0
  190. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/SetTeamPolicy.graphql +0 -0
  191. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/Team.graphql +0 -0
  192. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/TeamMembers.graphql +0 -0
  193. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/TeamPolicy.graphql +0 -0
  194. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/TeamRoles.graphql +0 -0
  195. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/Teams.graphql +0 -0
  196. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/UpdateTeam.graphql +0 -0
  197. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teams/UpdateTeamRole.graphql +0 -0
  198. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/teleport/TeleportRequest.graphql +0 -0
  199. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/usage/AppGraphqlOperations.graphql +0 -0
  200. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/usage/AppUsageSummary.graphql +0 -0
  201. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/usage/PlayerPulse.graphql +0 -0
  202. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/users/DeleteMyAccount.graphql +0 -0
  203. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/users/FreePlayWindow.graphql +0 -0
  204. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/users/Me.graphql +0 -0
  205. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/users/PlayerProfile.graphql +0 -0
  206. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/users/UpdateGamertag.graphql +0 -0
  207. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/users/UpdateUserState.graphql +0 -0
  208. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/users/User.graphql +0 -0
  209. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/voxels/ListVoxelUpdatesByDistance.graphql +0 -0
  210. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/voxels/ListVoxels.graphql +0 -0
  211. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/voxels/RollbackVoxelUpdates.graphql +0 -0
  212. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/voxels/UpdateVoxel.graphql +0 -0
  213. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/operations/voxels/VoxelUpdateHistory.graphql +0 -0
  214. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/scripts/_pins.py +0 -0
  215. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/scripts/ci/assert_default_origin.py +0 -0
  216. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/scripts/ci/build_openssl.sh +0 -0
  217. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/scripts/ci/check_content_policy.py +0 -0
  218. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/scripts/ci/check_pin_tiers.py +0 -0
  219. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/scripts/ci/cibw_before_all_linux.sh +0 -0
  220. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/scripts/ci/resolve-release-tier.sh +0 -0
  221. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/scripts/ci/resolve-release-tier.test.sh +0 -0
  222. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/scripts/ci/resolve_pypi_version.py +0 -0
  223. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/scripts/ci/stamp_version.py +0 -0
  224. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/scripts/ci/verify_artifacts.py +0 -0
  225. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/scripts/codegen.py +0 -0
  226. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/scripts/schema_drift.py +0 -0
  227. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/scripts/schema_sync.py +0 -0
  228. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/scripts/unasync.py +0 -0
  229. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/scripts/vendor_crowdycpp.py +0 -0
  230. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/__init__.py +0 -0
  231. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_concurrency.py +0 -0
  232. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_default_origin.py +0 -0
  233. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_generated/__init__.py +0 -0
  234. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_grid.py +0 -0
  235. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_native.pyi +0 -0
  236. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_operation.py +0 -0
  237. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/__init__.py +0 -0
  238. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/client.py +0 -0
  239. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/__init__.py +0 -0
  240. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/_base.py +0 -0
  241. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/actors.py +0 -0
  242. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/admin.py +0 -0
  243. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/app_access.py +0 -0
  244. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/auth.py +0 -0
  245. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/avatars.py +0 -0
  246. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/billing.py +0 -0
  247. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/channels.py +0 -0
  248. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/chunks.py +0 -0
  249. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/crowdy_studio.py +0 -0
  250. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/crowdy_studio_agent.py +0 -0
  251. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/crowdy_studio_github.py +0 -0
  252. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/discovery.py +0 -0
  253. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/exec.py +0 -0
  254. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/game_apps.py +0 -0
  255. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/grids.py +0 -0
  256. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/host.py +0 -0
  257. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/marketplace.py +0 -0
  258. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/organizations.py +0 -0
  259. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/payments.py +0 -0
  260. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/platform.py +0 -0
  261. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/player_wallet.py +0 -0
  262. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/portal.py +0 -0
  263. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/quotas.py +0 -0
  264. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/server_status.py +0 -0
  265. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/shared_environment.py +0 -0
  266. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/state.py +0 -0
  267. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/teams.py +0 -0
  268. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/teleport.py +0 -0
  269. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/udp.py +0 -0
  270. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/usage.py +0 -0
  271. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/users.py +0 -0
  272. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/domains/voxels.py +0 -0
  273. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/graphql.py +0 -0
  274. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/grid_scope.py +0 -0
  275. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/kit/__init__.py +0 -0
  276. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/kit/actions.py +0 -0
  277. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/kit/kit.py +0 -0
  278. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/kit/social.py +0 -0
  279. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/kit/wire.py +0 -0
  280. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/rediscover.py +0 -0
  281. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/stores.py +0 -0
  282. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/_sync/world.py +0 -0
  283. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/auth_state.py +0 -0
  284. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/client.py +0 -0
  285. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/codecs.py +0 -0
  286. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/datacenter_redirect.py +0 -0
  287. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/__init__.py +0 -0
  288. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/_base.py +0 -0
  289. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/actors.py +0 -0
  290. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/admin.py +0 -0
  291. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/app_access.py +0 -0
  292. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/auth.py +0 -0
  293. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/avatars.py +0 -0
  294. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/billing.py +0 -0
  295. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/channels.py +0 -0
  296. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/chunks.py +0 -0
  297. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/crowdy_studio.py +0 -0
  298. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/crowdy_studio_agent.py +0 -0
  299. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/crowdy_studio_github.py +0 -0
  300. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/discovery.py +0 -0
  301. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/exec.py +0 -0
  302. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/game_apps.py +0 -0
  303. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/grids.py +0 -0
  304. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/host.py +0 -0
  305. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/marketplace.py +0 -0
  306. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/organizations.py +0 -0
  307. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/payments.py +0 -0
  308. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/platform.py +0 -0
  309. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/player_wallet.py +0 -0
  310. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/portal.py +0 -0
  311. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/quotas.py +0 -0
  312. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/server_status.py +0 -0
  313. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/shared_environment.py +0 -0
  314. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/state.py +0 -0
  315. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/teams.py +0 -0
  316. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/teleport.py +0 -0
  317. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/udp.py +0 -0
  318. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/usage.py +0 -0
  319. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/users.py +0 -0
  320. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/domains/voxels.py +0 -0
  321. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/enums.py +0 -0
  322. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/errors.py +0 -0
  323. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/estate.py +0 -0
  324. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/exec_gateway.py +0 -0
  325. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/graphql.py +0 -0
  326. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/grid_scope.py +0 -0
  327. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/inputs.py +0 -0
  328. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/kit/__init__.py +0 -0
  329. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/kit/actions.py +0 -0
  330. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/kit/kit.py +0 -0
  331. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/kit/social.py +0 -0
  332. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/kit/wire.py +0 -0
  333. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/lb_cookie.py +0 -0
  334. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/media.py +0 -0
  335. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/pkce.py +0 -0
  336. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/player_host/__init__.py +0 -0
  337. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/player_host/agent_errors.py +0 -0
  338. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/player_host/agent_types.py +0 -0
  339. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/player_host/json_schema.py +0 -0
  340. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/player_host/schemas.py +0 -0
  341. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/player_host/types.py +0 -0
  342. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/py.typed +0 -0
  343. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/rediscover.py +0 -0
  344. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/replication.py +0 -0
  345. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/session.py +0 -0
  346. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/stores.py +0 -0
  347. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/studio/__init__.py +0 -0
  348. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/studio/client_tick_interval.py +0 -0
  349. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/studio/controller.py +0 -0
  350. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/studio/diagnostics.py +0 -0
  351. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/studio/github_new_repo.py +0 -0
  352. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/studio/layout.py +0 -0
  353. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/studio/models.py +0 -0
  354. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/studio/starter_projects.py +0 -0
  355. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/subscriptions.py +0 -0
  356. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/sync.py +0 -0
  357. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/utils.py +0 -0
  358. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/wire.py +0 -0
  359. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/src/crowdypy/world.py +0 -0
  360. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/conftest.py +0 -0
  361. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/e2e/__init__.py +0 -0
  362. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/e2e/test_e2e_open_grid_exec_gateway.py +0 -0
  363. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/e2e/test_e2e_ranged_channel.py +0 -0
  364. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/e2e/test_e2e_replication.py +0 -0
  365. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/e2e/test_e2e_studio.py +0 -0
  366. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/e2e/test_e2e_world.py +0 -0
  367. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/e2e/test_e2e_world_data.py +0 -0
  368. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/fixtures/README.md +0 -0
  369. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/fixtures/binary-wire-fixtures.json +0 -0
  370. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/fixtures/exec-client-frames.json +0 -0
  371. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/fixtures/voice-frames.json +0 -0
  372. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/__init__.py +0 -0
  373. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/domains/__init__.py +0 -0
  374. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/domains/test_crowdycpp_roots.py +0 -0
  375. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/domains/test_org_domains.py +0 -0
  376. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/domains/test_social_domains.py +0 -0
  377. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/domains/test_studio_exec_domains.py +0 -0
  378. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/domains/test_world_domains.py +0 -0
  379. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_check_pin_tiers.py +0 -0
  380. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_core.py +0 -0
  381. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_durable_stores.py +0 -0
  382. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_estate_moves.py +0 -0
  383. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_exec_gateway.py +0 -0
  384. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_fixture_provenance.py +0 -0
  385. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_grid_scope.py +0 -0
  386. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_kit.py +0 -0
  387. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_lazy_exports.py +0 -0
  388. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_player_host.py +0 -0
  389. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_refusals.py +0 -0
  390. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_release_versions.py +0 -0
  391. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_replication.py +0 -0
  392. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_sdk_audience.py +0 -0
  393. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_studio_controller.py +0 -0
  394. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_studio_diagnostics.py +0 -0
  395. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_studio_layout.py +0 -0
  396. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_subscriptions.py +0 -0
  397. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_transport.py +0 -0
  398. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_udp_api.py +0 -0
  399. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_voice_frames.py +0 -0
  400. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_wire.py +0 -0
  401. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tests/unit/test_world_session.py +0 -0
  402. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tools/e2e/provision.py +0 -0
  403. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tools/fixtures/player_host.mjs +0 -0
  404. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tools/parity/classifications.toml +0 -0
  405. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/tools/parity/parity.py +0 -0
  406. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/LICENSE +0 -0
  407. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/cmake/CheckPublicHeaders.cmake +0 -0
  408. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/cmake/CrowdyCPPConfig.cmake.in +0 -0
  409. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/cmake/CrowdyFindOpus.cmake +0 -0
  410. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/cmake/studio_layout_fixture.hpp.in +0 -0
  411. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/client.hpp +0 -0
  412. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/base64.hpp +0 -0
  413. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/bytes.hpp +0 -0
  414. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/clock.hpp +0 -0
  415. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/crypto.hpp +0 -0
  416. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/logger.hpp +0 -0
  417. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/spsc.hpp +0 -0
  418. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/uuid.hpp +0 -0
  419. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/crowdy.hpp +0 -0
  420. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/default_origin.hpp +0 -0
  421. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/admin.hpp +0 -0
  422. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/auth.hpp +0 -0
  423. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/crowdy_studio.hpp +0 -0
  424. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/crowdy_studio_agent.hpp +0 -0
  425. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/crowdy_studio_github.hpp +0 -0
  426. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/discovery.hpp +0 -0
  427. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/exec.hpp +0 -0
  428. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/game_apps.hpp +0 -0
  429. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/grids.hpp +0 -0
  430. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/groups.hpp +0 -0
  431. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/marketplace.hpp +0 -0
  432. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/player_wallet.hpp +0 -0
  433. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/portal.hpp +0 -0
  434. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/realtime_control.hpp +0 -0
  435. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/server_status.hpp +0 -0
  436. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/types.hpp +0 -0
  437. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/users.hpp +0 -0
  438. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/async_scope.hpp +0 -0
  439. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/auth_state.hpp +0 -0
  440. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/datacenter_redirect.hpp +0 -0
  441. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/dispatcher.hpp +0 -0
  442. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/estate.hpp +0 -0
  443. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/json.hpp +0 -0
  444. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/rediscover.hpp +0 -0
  445. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/subscription_client.hpp +0 -0
  446. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/websocket.hpp +0 -0
  447. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/actions.hpp +0 -0
  448. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/kit.hpp +0 -0
  449. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/social.hpp +0 -0
  450. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/wire.hpp +0 -0
  451. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/media/opus.hpp +0 -0
  452. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/media/video_frames.hpp +0 -0
  453. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/media/voice_frames.hpp +0 -0
  454. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/player_host/adapter.hpp +0 -0
  455. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/player_host/player_host.hpp +0 -0
  456. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/player_host/schemas.hpp +0 -0
  457. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/player_host/types.hpp +0 -0
  458. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/replication/connection.hpp +0 -0
  459. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/replication/session_provider.hpp +0 -0
  460. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/replication/types.hpp +0 -0
  461. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/replication/udp_socket.hpp +0 -0
  462. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/chunk_store.hpp +0 -0
  463. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/codec.hpp +0 -0
  464. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/durable.hpp +0 -0
  465. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/keys.hpp +0 -0
  466. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/stores.hpp +0 -0
  467. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/world_session.hpp +0 -0
  468. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/controller.hpp +0 -0
  469. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/diagnostics.hpp +0 -0
  470. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/editor.hpp +0 -0
  471. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/github.hpp +0 -0
  472. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/github_layout.hpp +0 -0
  473. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/integration.hpp +0 -0
  474. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/layout.hpp +0 -0
  475. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/models.hpp +0 -0
  476. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/runtime.hpp +0 -0
  477. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/wire/codec.hpp +0 -0
  478. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/wire/protocol.hpp +0 -0
  479. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/include/crowdy/world.hpp +0 -0
  480. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/core/base64.cpp +0 -0
  481. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/core/clock.cpp +0 -0
  482. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/core/crypto_default_unavailable.cpp +0 -0
  483. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/core/crypto_openssl.cpp +0 -0
  484. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/core/crypto_unavailable.cpp +0 -0
  485. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/core/logger.cpp +0 -0
  486. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/core/uuid.cpp +0 -0
  487. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/domains/exec.cpp +0 -0
  488. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/graphql/auth_state.cpp +0 -0
  489. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/graphql/errors.cpp +0 -0
  490. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/graphql/http_none.cpp +0 -0
  491. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/graphql/json.cpp +0 -0
  492. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/graphql/subscription_client.cpp +0 -0
  493. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/graphql/websocket_curl.cpp +0 -0
  494. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/graphql/websocket_none.cpp +0 -0
  495. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/media/opus.cpp +0 -0
  496. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/player_host/schemas.cpp +0 -0
  497. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/player_host/types.cpp +0 -0
  498. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/replication/connection.cpp +0 -0
  499. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/replication/socket_errors.hpp +0 -0
  500. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/replication/udp_socket.cpp +0 -0
  501. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/studio/diagnostics.cpp +0 -0
  502. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/studio/editor.cpp +0 -0
  503. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/src/studio/integration.cpp +0 -0
  504. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/third_party/yyjson/LICENSE +0 -0
  505. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/third_party/yyjson/yyjson.c +0 -0
  506. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/third_party/yyjson/yyjson.h +0 -0
  507. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/exec-client-frames.json +0 -0
  508. {crowdypy-0.9.1.dev1 → crowdypy-0.10.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/exec-gateway-cases.json +0 -0
  509. {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.9.1.dev1
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.9.1`
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`. Sent on `register` only; other tiers ignore it |
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.0` at `d7b755abe73bd9e157673325cbfcfb3975f71cc3`
8
- - CrowdyCPP (native core): `0.61.0` at `72f4a154a8defde1f99d6dfd983cb6629c26d233`
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
 
@@ -18,6 +18,7 @@ query InputLogSessions(
18
18
  endReason
19
19
  messageCount
20
20
  byteCount
21
+ missingRecords
21
22
  messageTypes
22
23
  }
23
24
  }
@@ -4,7 +4,7 @@ build-backend = "scikit_build_core.build"
4
4
 
5
5
  [project]
6
6
  name = "crowdypy"
7
- version = "0.9.1.dev1"
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.8.0"
123
- commit = "d7b755abe73bd9e157673325cbfcfb3975f71cc3"
122
+ version = "18.9.0"
123
+ commit = "cee1997127549e372c57baab2f0e12f1f423f31a"
124
124
 
125
125
  [tool.crowdypy.crowdycpp]
126
- version = "0.61.0"
127
- tag = "dev/v0.61.0"
128
- commit = "72f4a154a8defde1f99d6dfd983cb6629c26d233"
129
- tree-sha256 = "559bbbcc37455ae020abdf7e128cb84e05bead6e8f52b4f4a8e4293a6f1f0a18"
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 = "61f99f99fc80be9de388e7295faa247fe508cc0d2f7d2b832a2709ed76c464b2"
135
- operations-sha256 = "e9e0ad2ac5f585815d3f3b2b2f3b4443736f9ae602905fbe82b236b7cc4bfd66"
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 input 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 funded org wallet or a billing-exempt org.
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. 0 when replay logging was off.
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). 0 when replay logging was off all month.
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, if its end was recorded; null while it may still be running.
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: expired, revoked, reconnect or released. Null while it may still be running.
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
- """Return the first N edges after `after`. Default 50; clamped to 1..200."""
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`; a page can hold fewer than `first` inputs when it stopped at its time or scan limit, so keep paging while hasNextPage is true. INPUT_LOG_UNAVAILABLE when input logging is not configured on this deployment, and also, retryable with the same cursor, when the log cannot be read right now.
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
- """Return the first N edges after `after`. Default 50; clamped to 1..200."""
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
- """Return the first N edges after `after`. Default 50; clamped to 1..200."""
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
- """Return the first N edges after `after`. Default 50; clamped to 1..200."""
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
- """Return the first N edges after `after`. Default 50; clamped to 1..200."""
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
- """Return the first N edges after `after`. Default 50; clamped to 1..200."""
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
- """Maximum number of transactions to return. Defaults to 50 when omitted."""
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
- """Return the first N edges after `after`. Default 50; clamped to 1..200."""
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
- """Return the first N edges after `after`. Default 50; clamped to 1..200."""
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
- """Return the first N edges after `after`. Default 50; clamped to 1..200."""
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
- """Return the first N edges after `after`. Default 50; clamped to 1..200."""
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
- """Max entries (default 50, max 200)."""
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
- """Return the first N edges after `after`. Default 50; clamped to 1..200."""
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 has a spendable balance or the org is billing-exempt. 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.
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 input the realtime servers accept for this app, 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 has a spendable balance or the org is billing-exempt; turning it off always succeeds. Recording starts and stops within about 15 seconds. Omit to leave unchanged.
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: 61f99f99fc80be9de388e7295faa247fe508cc0d2f7d2b832a2709ed76c464b2
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: 61f99f99fc80be9de388e7295faa247fe508cc0d2f7d2b832a2709ed76c464b2
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: 61f99f99fc80be9de388e7295faa247fe508cc0d2f7d2b832a2709ed76c464b2
4
- operations/ sha256: e9e0ad2ac5f585815d3f3b2b2f3b4443736f9ae602905fbe82b236b7cc4bfd66
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
- has every client input the realtime servers accept recorded. These calls read them back on
6
- the app-scoped client for the app; an identity session token is refused. A player reads only
7
- the sessions and inputs they sent; a holder of ``manage_apps`` on the app reads every session.
8
- Inputs are kept for the input log's published retention (up to about an hour longer), so an old
9
- session can still be listed after its inputs are gone. Both answer ``INPUT_LOG_UNAVAILABLE`` on a
10
- deployment without input logging. From the Game API release after v2.40.2,
11
- :meth:`InputLogAPI.messages` answers ``INPUT_LOG_TEMPORARILY_UNAVAILABLE`` when the log cannot be
12
- read right now and ``INPUT_LOG_RATE_LIMITED`` while another read of yours is running (one per user,
13
- two per app): both carry ``extensions.retryable``, so retry with the same cursor after a short
14
- back-off. Earlier Game APIs answer ``INPUT_LOG_UNAVAILABLE``, or an empty page, instead.
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's ``endReason`` is ``expired``, ``revoked``, ``reconnect`` or
64
- ``released`` as the client saw it, ``logging_off`` or ``shutdown`` from the Game API
65
- release after v2.40.2, ``unrecorded``, or null while the session may still run.
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,
@@ -1,3 +1,3 @@
1
1
  """The CrowdyPy release this source tree builds."""
2
2
 
3
- __version__ = "0.9.1"
3
+ __version__ = "0.10.0"
@@ -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
- has every client input the realtime servers accept recorded. These calls read them back on
5
- the app-scoped client for the app; an identity session token is refused. A player reads only
6
- the sessions and inputs they sent; a holder of ``manage_apps`` on the app reads every session.
7
- Inputs are kept for the input log's published retention (up to about an hour longer), so an old
8
- session can still be listed after its inputs are gone. Both answer ``INPUT_LOG_UNAVAILABLE`` on a
9
- deployment without input logging. From the Game API release after v2.40.2,
10
- :meth:`InputLogAPI.messages` answers ``INPUT_LOG_TEMPORARILY_UNAVAILABLE`` when the log cannot be
11
- read right now and ``INPUT_LOG_RATE_LIMITED`` while another read of yours is running (one per user,
12
- two per app): both carry ``extensions.retryable``, so retry with the same cursor after a short
13
- back-off. Earlier Game APIs answer ``INPUT_LOG_UNAVAILABLE``, or an empty page, instead.
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's ``endReason`` is ``expired``, ``revoked``, ``reconnect`` or
63
- ``released`` as the client saw it, ``logging_off`` or ``shutdown`` from the Game API
64
- release after v2.40.2, ``unrecorded``, or null while the session may still run.
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,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "crowdyJs": {
3
- "version": "18.8.0",
4
- "commit": "d7b755abe73bd9e157673325cbfcfb3975f71cc3"
3
+ "version": "18.9.0",
4
+ "commit": "cee1997127549e372c57baab2f0e12f1f423f31a"
5
5
  },
6
6
  "schemas": {
7
7
  "GAME_COMMAND_RESULT_SCHEMA_V1": {