crowdypy 0.17.0.dev1__tar.gz → 0.18.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 (594) hide show
  1. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/MIGRATION.md +25 -0
  2. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/PKG-INFO +3 -1
  3. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/README.md +2 -0
  4. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/docs/compatibility.md +1 -1
  5. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/docs/parity-matrix.md +8 -3
  6. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/pyproject.toml +8 -8
  7. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/schema.gql +141 -10
  8. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_generated/enums.py +1 -1
  9. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_generated/inputs.py +15 -4
  10. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_generated/operations.py +1 -1
  11. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/app_access.py +7 -2
  12. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/apps.py +2 -0
  13. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/managed_players.py +4 -1
  14. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/udp.py +12 -4
  15. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/world.py +4 -1
  16. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_version.py +1 -1
  17. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/app_access.py +7 -2
  18. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/apps.py +2 -0
  19. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/managed_players.py +4 -1
  20. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/udp.py +12 -4
  21. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/player_host/schemas.v1.json +2 -2
  22. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/replication.py +9 -2
  23. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/world.py +4 -1
  24. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/fixtures/player-host.v1.json +2 -2
  25. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/test_sdk_audience.py +7 -0
  26. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tools/parity/classifications.toml +5 -0
  27. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/uv.lock +1 -1
  28. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/CMakeLists.txt +1 -1
  29. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/PROVENANCE.md +1 -1
  30. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/admin.hpp +4 -1
  31. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/generated/enums.hpp +1 -1
  32. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/generated/operations.hpp +1 -1
  33. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/replication/connection.hpp +8 -3
  34. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/world.hpp +2 -2
  35. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/package.json +6 -6
  36. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/crowdy-studio-diagnostics.v1.json +2 -2
  37. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/crowdyjs-studio-layout.v1.json +2 -2
  38. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/.gitattributes +0 -0
  39. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/.gitignore +0 -0
  40. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/.gitleaks.toml +0 -0
  41. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/AGENTS.md +0 -0
  42. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/CMakeLists.txt +0 -0
  43. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/LICENSE +0 -0
  44. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/SECURITY.md +0 -0
  45. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/benchmarks/README.md +0 -0
  46. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/benchmarks/bench_replication.py +0 -0
  47. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/docs/e2e-coverage.md +0 -0
  48. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/licenses/OpenSSL-LICENSE.txt +0 -0
  49. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/native/common.hpp +0 -0
  50. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/native/module.cpp +0 -0
  51. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/native/replication.hpp +0 -0
  52. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/native/replication_binding.cpp +0 -0
  53. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/native/session_binding.cpp +0 -0
  54. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/native/voice_binding.cpp +0 -0
  55. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/native/wire_binding.cpp +0 -0
  56. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/actors/Actor.graphql +0 -0
  57. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/actors/Actors.graphql +0 -0
  58. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/actors/BatchLookupActors.graphql +0 -0
  59. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/actors/CreateActor.graphql +0 -0
  60. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/actors/DeleteActor.graphql +0 -0
  61. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/actors/UpdateActor.graphql +0 -0
  62. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/actors/UpdateActorState.graphql +0 -0
  63. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/appAccess/AppAccessTiers.graphql +0 -0
  64. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/appAccess/AppFeatures.graphql +0 -0
  65. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/appAccess/AppGrantMemberCandidates.graphql +0 -0
  66. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/appAccess/AppUserAccessByApp.graphql +0 -0
  67. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/appAccess/ArchiveAccessTier.graphql +0 -0
  68. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/appAccess/ClaimFreeAppAccess.graphql +0 -0
  69. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/appAccess/CreateAccessTier.graphql +0 -0
  70. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/appAccess/DefineAppFeature.graphql +0 -0
  71. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/appAccess/GrantAppAccess.graphql +0 -0
  72. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/appAccess/GrantMyAppAccess.graphql +0 -0
  73. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/appAccess/GrantTierFeature.graphql +0 -0
  74. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/appAccess/MyAppAccess.graphql +0 -0
  75. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/appAccess/RevokeAppAccess.graphql +0 -0
  76. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/appAccess/RevokeTierFeature.graphql +0 -0
  77. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/appAccess/RuntimePermissions.graphql +0 -0
  78. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/appAccess/SuspendAppAccess.graphql +0 -0
  79. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/appAccess/TierFeatures.graphql +0 -0
  80. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/appAccess/UpdateAccessTier.graphql +0 -0
  81. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/apps/App.graphql +0 -0
  82. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/apps/AppBySlug.graphql +0 -0
  83. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/apps/AppDiscovery.graphql +0 -0
  84. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/apps/AppsForOrg.graphql +0 -0
  85. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/apps/ArchiveApp.graphql +0 -0
  86. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/apps/CodeAdmissions.graphql +0 -0
  87. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/apps/CreateApp.graphql +0 -0
  88. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/apps/MarketplaceApps.graphql +0 -0
  89. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/apps/MyApps.graphql +0 -0
  90. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/apps/PlaceableDatacenters.graphql +0 -0
  91. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/apps/UpdateApp.graphql +0 -0
  92. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/auth/Logout.graphql +0 -0
  93. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/auth/LogoutAllDevices.graphql +0 -0
  94. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/avatars/Avatars.graphql +0 -0
  95. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/billing/AppBudget.graphql +0 -0
  96. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/billing/AppBudgets.graphql +0 -0
  97. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/billing/SetAppBudget.graphql +0 -0
  98. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/billing/WalletBalance.graphql +0 -0
  99. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/billing/WalletTransactions.graphql +0 -0
  100. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/channels/AddChannelMember.graphql +0 -0
  101. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/channels/BanChannelMember.graphql +0 -0
  102. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/channels/Channel.graphql +0 -0
  103. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/channels/ChannelMembers.graphql +0 -0
  104. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/channels/ChannelPolicy.graphql +0 -0
  105. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/channels/ChannelRoles.graphql +0 -0
  106. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/channels/Channels.graphql +0 -0
  107. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/channels/CreateChannel.graphql +0 -0
  108. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/channels/CreateChannelRole.graphql +0 -0
  109. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/channels/DeleteChannel.graphql +0 -0
  110. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/channels/DeleteChannelRole.graphql +0 -0
  111. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/channels/JoinChannel.graphql +0 -0
  112. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/channels/LeaveChannel.graphql +0 -0
  113. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/channels/MyChannels.graphql +0 -0
  114. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/channels/RemoveChannelMember.graphql +0 -0
  115. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/channels/RequestToJoinChannel.graphql +0 -0
  116. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/channels/SetChannelMemberRoles.graphql +0 -0
  117. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/channels/SetChannelPolicy.graphql +0 -0
  118. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/channels/UnbanChannelMember.graphql +0 -0
  119. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/channels/UpdateChannel.graphql +0 -0
  120. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/channels/UpdateChannelRole.graphql +0 -0
  121. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/chunks/GetChunk.graphql +0 -0
  122. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/chunks/GetChunkLods.graphql +0 -0
  123. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/chunks/GetChunksByDistance.graphql +0 -0
  124. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/chunks/GetVoxelList.graphql +0 -0
  125. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/chunks/UpdateChunk.graphql +0 -0
  126. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/chunks/UpdateChunkLods.graphql +0 -0
  127. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/chunks/UpdateChunkState.graphql +0 -0
  128. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/crowdyStudio/CrowdyStudio.graphql +0 -0
  129. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/exec/Exec.graphql +0 -0
  130. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/gameApps/GameApps.graphql +0 -0
  131. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/grids/CreateGridChannel.graphql +0 -0
  132. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/grids/GridChannels.graphql +0 -0
  133. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/grids/MintGridToken.graphql +0 -0
  134. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/host/Host.graphql +0 -0
  135. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/inputLog/InputLogMessages.graphql +0 -0
  136. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/inputLog/InputLogSessions.graphql +0 -0
  137. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/managedPlayers/AppManagedPlayerMods.graphql +0 -0
  138. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/managedPlayers/DeleteManagedPlayer.graphql +0 -0
  139. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/managedPlayers/EndManagedPlayerSessions.graphql +0 -0
  140. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/managedPlayers/ManagedPlayer.graphql +0 -0
  141. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/managedPlayers/ManagedPlayerFields.graphql +0 -0
  142. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/managedPlayers/ManagedPlayers.graphql +0 -0
  143. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/managedPlayers/OrgManagedPlayerSettings.graphql +0 -0
  144. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/managedPlayers/OrgSigningKeyFields.graphql +0 -0
  145. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/managedPlayers/OrgSigningKeys.graphql +0 -0
  146. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/managedPlayers/ProvisionManagedPlayers.graphql +0 -0
  147. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/managedPlayers/RegisterOrgSigningKey.graphql +0 -0
  148. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/managedPlayers/RevokeOrgSigningKey.graphql +0 -0
  149. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/managedPlayers/SetAppManagedPlayerMods.graphql +0 -0
  150. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/managedPlayers/UpdateManagedPlayer.graphql +0 -0
  151. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/marketplace/Marketplace.graphql +0 -0
  152. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/organizations/CreateOrgRole.graphql +0 -0
  153. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/organizations/CreateOrgToken.graphql +0 -0
  154. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/organizations/CreateOrganization.graphql +0 -0
  155. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/organizations/DeleteOrgRole.graphql +0 -0
  156. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/organizations/InviteOrgMember.graphql +0 -0
  157. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/organizations/MemberRoles.graphql +0 -0
  158. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/organizations/MyOrganizations.graphql +0 -0
  159. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/organizations/OrgMembers.graphql +0 -0
  160. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/organizations/OrgPermissions.graphql +0 -0
  161. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/organizations/OrgRoles.graphql +0 -0
  162. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/organizations/OrgTokens.graphql +0 -0
  163. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/organizations/Organization.graphql +0 -0
  164. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/organizations/OrganizationBySlug.graphql +0 -0
  165. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/organizations/RemoveOrgMember.graphql +0 -0
  166. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/organizations/RevokeOrgToken.graphql +0 -0
  167. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/organizations/UpdateOrgMemberRoles.graphql +0 -0
  168. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/organizations/UpdateOrgRole.graphql +0 -0
  169. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/organizations/UpdateOrgToken.graphql +0 -0
  170. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/payments/CapturePaypalCheckout.graphql +0 -0
  171. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/payments/CreateCheckout.graphql +0 -0
  172. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/payments/MyCheckouts.graphql +0 -0
  173. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/platform/PlatformConfig.graphql +0 -0
  174. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/playerWallet/PlayerWallet.graphql +0 -0
  175. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/quotas/DeleteQuota.graphql +0 -0
  176. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/quotas/EffectiveQuota.graphql +0 -0
  177. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/quotas/QuotasForApp.graphql +0 -0
  178. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/quotas/QuotasForOrg.graphql +0 -0
  179. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/quotas/SetQuota.graphql +0 -0
  180. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/serverStatus/ActiveGraphQLServers.graphql +0 -0
  181. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/serverStatus/GameClientBootstrap.graphql +0 -0
  182. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/serverStatus/GraphqlServers.graphql +0 -0
  183. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/serverStatus/ServerWithLeastClients.graphql +0 -0
  184. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/serverStatus/VersionInfo.graphql +0 -0
  185. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/sharedEnvironment/SharedEnvironment.graphql +0 -0
  186. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/state/DeleteUserAppState.graphql +0 -0
  187. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/state/UpdateUserAppState.graphql +0 -0
  188. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/state/UserAppState.graphql +0 -0
  189. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/state/UserAppStates.graphql +0 -0
  190. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/teams/AddTeamMember.graphql +0 -0
  191. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/teams/BanTeamMember.graphql +0 -0
  192. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/teams/CreateTeam.graphql +0 -0
  193. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/teams/CreateTeamRole.graphql +0 -0
  194. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/teams/DeleteTeam.graphql +0 -0
  195. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/teams/DeleteTeamRole.graphql +0 -0
  196. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/teams/JoinTeam.graphql +0 -0
  197. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/teams/LeaveTeam.graphql +0 -0
  198. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/teams/MyTeams.graphql +0 -0
  199. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/teams/RemoveTeamMember.graphql +0 -0
  200. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/teams/RequestToJoinTeam.graphql +0 -0
  201. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/teams/SetTeamMemberRoles.graphql +0 -0
  202. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/teams/SetTeamPolicy.graphql +0 -0
  203. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/teams/Team.graphql +0 -0
  204. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/teams/TeamMembers.graphql +0 -0
  205. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/teams/TeamPolicy.graphql +0 -0
  206. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/teams/TeamRoles.graphql +0 -0
  207. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/teams/Teams.graphql +0 -0
  208. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/teams/UnbanTeamMember.graphql +0 -0
  209. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/teams/UpdateTeam.graphql +0 -0
  210. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/teams/UpdateTeamRole.graphql +0 -0
  211. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/teleport/TeleportRequest.graphql +0 -0
  212. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/usage/AppGraphqlOperations.graphql +0 -0
  213. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/usage/AppUsageSummary.graphql +0 -0
  214. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/usage/PlayerPulse.graphql +0 -0
  215. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/users/DeleteMyAccount.graphql +0 -0
  216. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/users/FreePlayWindow.graphql +0 -0
  217. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/users/Me.graphql +0 -0
  218. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/users/PlayerProfile.graphql +0 -0
  219. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/users/UpdateGamertag.graphql +0 -0
  220. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/users/UpdateUserState.graphql +0 -0
  221. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/users/User.graphql +0 -0
  222. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/voxels/ListVoxelUpdatesByDistance.graphql +0 -0
  223. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/voxels/ListVoxels.graphql +0 -0
  224. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/voxels/RollbackVoxelUpdates.graphql +0 -0
  225. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/voxels/UpdateVoxel.graphql +0 -0
  226. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/operations/voxels/VoxelUpdateHistory.graphql +0 -0
  227. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/scripts/_pins.py +0 -0
  228. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/scripts/ci/assert_default_origin.py +0 -0
  229. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/scripts/ci/build_openssl.sh +0 -0
  230. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/scripts/ci/check_content_policy.py +0 -0
  231. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/scripts/ci/check_pin_tiers.py +0 -0
  232. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/scripts/ci/cibw_before_all_linux.sh +0 -0
  233. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/scripts/ci/resolve-release-tier.sh +0 -0
  234. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/scripts/ci/resolve-release-tier.test.sh +0 -0
  235. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/scripts/ci/resolve_pypi_version.py +0 -0
  236. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/scripts/ci/stamp_version.py +0 -0
  237. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/scripts/ci/verify_artifacts.py +0 -0
  238. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/scripts/codegen.py +0 -0
  239. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/scripts/schema_drift.py +0 -0
  240. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/scripts/schema_sync.py +0 -0
  241. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/scripts/unasync.py +0 -0
  242. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/scripts/vendor_crowdycpp.py +0 -0
  243. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/__init__.py +0 -0
  244. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_concurrency.py +0 -0
  245. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_default_origin.py +0 -0
  246. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_generated/__init__.py +0 -0
  247. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_grid.py +0 -0
  248. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_native.pyi +0 -0
  249. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_operation.py +0 -0
  250. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/__init__.py +0 -0
  251. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/client.py +0 -0
  252. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/__init__.py +0 -0
  253. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/_base.py +0 -0
  254. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/actors.py +0 -0
  255. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/admin.py +0 -0
  256. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/auth.py +0 -0
  257. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/avatars.py +0 -0
  258. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/billing.py +0 -0
  259. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/channels.py +0 -0
  260. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/chunks.py +0 -0
  261. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/crowdy_studio.py +0 -0
  262. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/crowdy_studio_agent.py +0 -0
  263. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/crowdy_studio_github.py +0 -0
  264. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/discovery.py +0 -0
  265. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/exec.py +0 -0
  266. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/game_apps.py +0 -0
  267. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/grids.py +0 -0
  268. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/host.py +0 -0
  269. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/input_log.py +0 -0
  270. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/marketplace.py +0 -0
  271. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/organizations.py +0 -0
  272. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/payments.py +0 -0
  273. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/platform.py +0 -0
  274. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/player_wallet.py +0 -0
  275. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/portal.py +0 -0
  276. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/quotas.py +0 -0
  277. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/server_status.py +0 -0
  278. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/shared_environment.py +0 -0
  279. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/state.py +0 -0
  280. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/teams.py +0 -0
  281. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/teleport.py +0 -0
  282. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/usage.py +0 -0
  283. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/users.py +0 -0
  284. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/domains/voxels.py +0 -0
  285. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/graphql.py +0 -0
  286. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/grid_scope.py +0 -0
  287. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/kit/__init__.py +0 -0
  288. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/kit/actions.py +0 -0
  289. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/kit/kit.py +0 -0
  290. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/kit/mirror.py +0 -0
  291. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/kit/modules/__init__.py +0 -0
  292. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/kit/modules/arenas.py +0 -0
  293. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/kit/modules/encounters.py +0 -0
  294. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/kit/modules/instances.py +0 -0
  295. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/kit/modules/leaderboards.py +0 -0
  296. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/kit/modules/market.py +0 -0
  297. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/kit/modules/matchmaking.py +0 -0
  298. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/kit/modules/minigames.py +0 -0
  299. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/kit/modules/npcs.py +0 -0
  300. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/kit/modules/player.py +0 -0
  301. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/kit/modules/presence.py +0 -0
  302. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/kit/modules/racing.py +0 -0
  303. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/kit/modules/sessions.py +0 -0
  304. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/kit/modules/tables.py +0 -0
  305. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/kit/modules/tactics.py +0 -0
  306. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/kit/modules/territory.py +0 -0
  307. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/kit/modules/world.py +0 -0
  308. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/kit/protocol.py +0 -0
  309. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/kit/realtime.py +0 -0
  310. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/kit/runtime.py +0 -0
  311. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/kit/social.py +0 -0
  312. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/kit/store.py +0 -0
  313. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/kit/topology.py +0 -0
  314. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/kit/wire.py +0 -0
  315. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/rediscover.py +0 -0
  316. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/_sync/stores.py +0 -0
  317. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/auth_state.py +0 -0
  318. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/client.py +0 -0
  319. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/codecs.py +0 -0
  320. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/datacenter_redirect.py +0 -0
  321. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/__init__.py +0 -0
  322. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/_base.py +0 -0
  323. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/actors.py +0 -0
  324. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/admin.py +0 -0
  325. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/auth.py +0 -0
  326. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/avatars.py +0 -0
  327. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/billing.py +0 -0
  328. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/channels.py +0 -0
  329. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/chunks.py +0 -0
  330. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/crowdy_studio.py +0 -0
  331. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/crowdy_studio_agent.py +0 -0
  332. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/crowdy_studio_github.py +0 -0
  333. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/discovery.py +0 -0
  334. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/exec.py +0 -0
  335. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/game_apps.py +0 -0
  336. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/grids.py +0 -0
  337. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/host.py +0 -0
  338. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/input_log.py +0 -0
  339. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/marketplace.py +0 -0
  340. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/organizations.py +0 -0
  341. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/payments.py +0 -0
  342. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/platform.py +0 -0
  343. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/player_wallet.py +0 -0
  344. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/portal.py +0 -0
  345. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/quotas.py +0 -0
  346. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/server_status.py +0 -0
  347. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/shared_environment.py +0 -0
  348. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/state.py +0 -0
  349. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/teams.py +0 -0
  350. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/teleport.py +0 -0
  351. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/usage.py +0 -0
  352. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/users.py +0 -0
  353. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/domains/voxels.py +0 -0
  354. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/enums.py +0 -0
  355. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/errors.py +0 -0
  356. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/estate.py +0 -0
  357. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/exec_gateway.py +0 -0
  358. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/graphql.py +0 -0
  359. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/grid_scope.py +0 -0
  360. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/inputs.py +0 -0
  361. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/kit/__init__.py +0 -0
  362. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/kit/actions.py +0 -0
  363. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/kit/kit.py +0 -0
  364. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/kit/mirror.py +0 -0
  365. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/kit/modules/__init__.py +0 -0
  366. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/kit/modules/arenas.py +0 -0
  367. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/kit/modules/encounters.py +0 -0
  368. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/kit/modules/instances.py +0 -0
  369. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/kit/modules/leaderboards.py +0 -0
  370. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/kit/modules/market.py +0 -0
  371. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/kit/modules/matchmaking.py +0 -0
  372. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/kit/modules/minigames.py +0 -0
  373. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/kit/modules/npcs.py +0 -0
  374. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/kit/modules/player.py +0 -0
  375. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/kit/modules/presence.py +0 -0
  376. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/kit/modules/racing.py +0 -0
  377. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/kit/modules/sessions.py +0 -0
  378. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/kit/modules/tables.py +0 -0
  379. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/kit/modules/tactics.py +0 -0
  380. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/kit/modules/territory.py +0 -0
  381. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/kit/modules/world.py +0 -0
  382. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/kit/protocol.py +0 -0
  383. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/kit/realtime.py +0 -0
  384. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/kit/runtime.py +0 -0
  385. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/kit/social.py +0 -0
  386. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/kit/store.py +0 -0
  387. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/kit/topology.py +0 -0
  388. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/kit/wire.py +0 -0
  389. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/lb_cookie.py +0 -0
  390. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/media.py +0 -0
  391. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/pkce.py +0 -0
  392. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/player_host/__init__.py +0 -0
  393. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/player_host/agent_errors.py +0 -0
  394. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/player_host/agent_types.py +0 -0
  395. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/player_host/json_schema.py +0 -0
  396. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/player_host/schemas.py +0 -0
  397. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/player_host/types.py +0 -0
  398. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/py.typed +0 -0
  399. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/rediscover.py +0 -0
  400. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/session.py +0 -0
  401. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/stores.py +0 -0
  402. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/studio/__init__.py +0 -0
  403. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/studio/client_tick_interval.py +0 -0
  404. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/studio/controller.py +0 -0
  405. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/studio/diagnostics.py +0 -0
  406. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/studio/github_new_repo.py +0 -0
  407. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/studio/layout.py +0 -0
  408. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/studio/models.py +0 -0
  409. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/studio/starter_projects.py +0 -0
  410. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/subscriptions.py +0 -0
  411. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/sync.py +0 -0
  412. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/utils.py +0 -0
  413. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/src/crowdypy/wire.py +0 -0
  414. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/conftest.py +0 -0
  415. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/e2e/__init__.py +0 -0
  416. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/e2e/conftest.py +0 -0
  417. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/e2e/test_e2e_identity.py +0 -0
  418. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/e2e/test_e2e_input_log.py +0 -0
  419. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/e2e/test_e2e_open_grid_exec_gateway.py +0 -0
  420. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/e2e/test_e2e_ranged_channel.py +0 -0
  421. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/e2e/test_e2e_replication.py +0 -0
  422. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/e2e/test_e2e_studio.py +0 -0
  423. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/e2e/test_e2e_world.py +0 -0
  424. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/e2e/test_e2e_world_data.py +0 -0
  425. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/fixtures/README.md +0 -0
  426. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/fixtures/binary-wire-fixtures.json +0 -0
  427. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/fixtures/exec-client-frames.json +0 -0
  428. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/fixtures/kit-protocol.json +0 -0
  429. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/fixtures/voice-frames.json +0 -0
  430. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/__init__.py +0 -0
  431. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/domains/__init__.py +0 -0
  432. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/domains/test_crowdycpp_roots.py +0 -0
  433. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/domains/test_input_log_reads.py +0 -0
  434. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/domains/test_managed_players.py +0 -0
  435. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/domains/test_org_domains.py +0 -0
  436. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/domains/test_social_domains.py +0 -0
  437. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/domains/test_studio_exec_domains.py +0 -0
  438. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/domains/test_world_domains.py +0 -0
  439. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/test_check_pin_tiers.py +0 -0
  440. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/test_core.py +0 -0
  441. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/test_durable_stores.py +0 -0
  442. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/test_estate_moves.py +0 -0
  443. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/test_exec_gateway.py +0 -0
  444. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/test_fixture_provenance.py +0 -0
  445. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/test_grid_scope.py +0 -0
  446. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/test_kit.py +0 -0
  447. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/test_kit_protocol.py +0 -0
  448. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/test_lazy_exports.py +0 -0
  449. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/test_player_host.py +0 -0
  450. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/test_refusals.py +0 -0
  451. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/test_release_versions.py +0 -0
  452. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/test_replication.py +0 -0
  453. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/test_studio_controller.py +0 -0
  454. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/test_studio_diagnostics.py +0 -0
  455. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/test_studio_layout.py +0 -0
  456. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/test_subscriptions.py +0 -0
  457. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/test_transport.py +0 -0
  458. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/test_udp_api.py +0 -0
  459. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/test_voice_frames.py +0 -0
  460. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/test_wire.py +0 -0
  461. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tests/unit/test_world_session.py +0 -0
  462. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tools/e2e/provision.py +0 -0
  463. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tools/fixtures/player_host.mjs +0 -0
  464. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/tools/parity/parity.py +0 -0
  465. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/LICENSE +0 -0
  466. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/cmake/CheckPublicHeaders.cmake +0 -0
  467. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/cmake/CrowdyCPPConfig.cmake.in +0 -0
  468. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/cmake/CrowdyFindOpus.cmake +0 -0
  469. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/cmake/studio_layout_fixture.hpp.in +0 -0
  470. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/client.hpp +0 -0
  471. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/base64.hpp +0 -0
  472. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/bytes.hpp +0 -0
  473. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/clock.hpp +0 -0
  474. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/crypto.hpp +0 -0
  475. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/logger.hpp +0 -0
  476. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/result.hpp +0 -0
  477. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/spsc.hpp +0 -0
  478. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/uuid.hpp +0 -0
  479. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/crowdy.hpp +0 -0
  480. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/default_origin.hpp +0 -0
  481. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/auth.hpp +0 -0
  482. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/crowdy_studio.hpp +0 -0
  483. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/crowdy_studio_agent.hpp +0 -0
  484. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/crowdy_studio_github.hpp +0 -0
  485. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/discovery.hpp +0 -0
  486. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/domain_base.hpp +0 -0
  487. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/exec.hpp +0 -0
  488. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/game_apps.hpp +0 -0
  489. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/grids.hpp +0 -0
  490. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/groups.hpp +0 -0
  491. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/marketplace.hpp +0 -0
  492. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/player_wallet.hpp +0 -0
  493. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/portal.hpp +0 -0
  494. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/realtime_control.hpp +0 -0
  495. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/server_status.hpp +0 -0
  496. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/types.hpp +0 -0
  497. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/users.hpp +0 -0
  498. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/world_data.hpp +0 -0
  499. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/async_scope.hpp +0 -0
  500. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/auth_state.hpp +0 -0
  501. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/cancel.hpp +0 -0
  502. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/datacenter_redirect.hpp +0 -0
  503. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/dispatcher.hpp +0 -0
  504. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/errors.hpp +0 -0
  505. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/estate.hpp +0 -0
  506. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/graphql_client.hpp +0 -0
  507. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/http.hpp +0 -0
  508. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/json.hpp +0 -0
  509. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/rediscover.hpp +0 -0
  510. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/subscription_client.hpp +0 -0
  511. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/websocket.hpp +0 -0
  512. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/actions.hpp +0 -0
  513. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/economy.hpp +0 -0
  514. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/genres.hpp +0 -0
  515. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/kit.hpp +0 -0
  516. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/mirror.hpp +0 -0
  517. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/modules.hpp +0 -0
  518. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/protocol.hpp +0 -0
  519. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/realtime.hpp +0 -0
  520. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/runtime.hpp +0 -0
  521. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/social.hpp +0 -0
  522. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/topology.hpp +0 -0
  523. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/wire.hpp +0 -0
  524. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/media/opus.hpp +0 -0
  525. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/media/video_frames.hpp +0 -0
  526. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/media/voice_frames.hpp +0 -0
  527. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/player_host/adapter.hpp +0 -0
  528. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/player_host/player_host.hpp +0 -0
  529. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/player_host/schemas.hpp +0 -0
  530. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/player_host/types.hpp +0 -0
  531. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/replication/session_provider.hpp +0 -0
  532. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/replication/types.hpp +0 -0
  533. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/replication/udp_socket.hpp +0 -0
  534. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/chunk_store.hpp +0 -0
  535. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/codec.hpp +0 -0
  536. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/durable.hpp +0 -0
  537. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/keys.hpp +0 -0
  538. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/stores.hpp +0 -0
  539. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/world_session.hpp +0 -0
  540. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/controller.hpp +0 -0
  541. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/diagnostics.hpp +0 -0
  542. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/editor.hpp +0 -0
  543. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/github.hpp +0 -0
  544. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/github_layout.hpp +0 -0
  545. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/integration.hpp +0 -0
  546. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/layout.hpp +0 -0
  547. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/models.hpp +0 -0
  548. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/runtime.hpp +0 -0
  549. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/wire/codec.hpp +0 -0
  550. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/include/crowdy/wire/protocol.hpp +0 -0
  551. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/client.cpp +0 -0
  552. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/core/base64.cpp +0 -0
  553. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/core/clock.cpp +0 -0
  554. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/core/crypto_default_unavailable.cpp +0 -0
  555. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/core/crypto_openssl.cpp +0 -0
  556. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/core/crypto_unavailable.cpp +0 -0
  557. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/core/logger.cpp +0 -0
  558. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/core/uuid.cpp +0 -0
  559. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/domains/exec.cpp +0 -0
  560. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/graphql/async_transport.cpp +0 -0
  561. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/graphql/auth_state.cpp +0 -0
  562. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/graphql/error_extensions.hpp +0 -0
  563. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/graphql/errors.cpp +0 -0
  564. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/graphql/graphql_client.cpp +0 -0
  565. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/graphql/http_curl.cpp +0 -0
  566. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/graphql/http_none.cpp +0 -0
  567. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/graphql/json.cpp +0 -0
  568. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/graphql/subscription_client.cpp +0 -0
  569. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/graphql/websocket_curl.cpp +0 -0
  570. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/graphql/websocket_none.cpp +0 -0
  571. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/kit/economy.cpp +0 -0
  572. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/kit/genres.cpp +0 -0
  573. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/kit/mirror.cpp +0 -0
  574. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/kit/modules.cpp +0 -0
  575. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/kit/protocol.cpp +0 -0
  576. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/kit/runtime.cpp +0 -0
  577. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/kit/topology.cpp +0 -0
  578. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/media/opus.cpp +0 -0
  579. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/player_host/schemas.cpp +0 -0
  580. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/player_host/types.cpp +0 -0
  581. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/replication/connection.cpp +0 -0
  582. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/replication/socket_errors.hpp +0 -0
  583. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/replication/udp_socket.cpp +0 -0
  584. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/session/world_session.cpp +0 -0
  585. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/studio/diagnostics.cpp +0 -0
  586. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/studio/editor.cpp +0 -0
  587. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/src/studio/integration.cpp +0 -0
  588. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/third_party/yyjson/LICENSE +0 -0
  589. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/third_party/yyjson/yyjson.c +0 -0
  590. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/third_party/yyjson/yyjson.h +0 -0
  591. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/exec-client-frames.json +0 -0
  592. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/exec-gateway-cases.json +0 -0
  593. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/kit-protocol.json +0 -0
  594. {crowdypy-0.17.0.dev1 → crowdypy-0.18.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/voice-frames.json +0 -0
@@ -3,6 +3,31 @@
3
3
  CrowdyPy is pre-1.0. Within a minor line, patch releases keep source compatibility; each
4
4
  new minor may change the API. Read the section for every minor you skip.
5
5
 
6
+ ## 0.18.0
7
+
8
+ CrowdyJS 18.18.0 and CrowdyCPP 0.70.0. No API change. ck-api v2.55.0 adds two app-level
9
+ permission keys, and the realtime servers enforce them:
10
+
11
+ - **`use_text_chat`** for proximity text (`client.udp.send_text_packet`, `World.send_text`,
12
+ the replication connection's `send_text_packet`) and for text on a channel
13
+ (`send_channel_message`, `send_ranged_channel_message`).
14
+ - **`use_direct_messages`** for `send_single_actor_message` and `World.send_to_actor`.
15
+
16
+ Without the key the server answers `UNAUTHORIZED` for the send's sequence number. Every
17
+ access tier that grants `access` has both: ck-api adds them when a tier is created or updated
18
+ (`client.app_access.create_tier` / `update_tier`) unless `applyCommunicationDefaults` is false,
19
+ and an operator backfilled the existing tiers. An app that wants some players without chat
20
+ removes a key from their tier.
21
+
22
+ Also from ck-api v2.54.0 and v2.55.0:
23
+
24
+ - `client.managed_players.delete` now erases the player's content within minutes; a legal hold
25
+ on the player or its organization refuses it with `LEGAL_HOLD`.
26
+ - `client.apps.update(app_id, {"replayLoggingRecordsMedia": False})` leaves voice and video out
27
+ of the app's recording (default true).
28
+ - The operator fields for account erasure and legal holds are not wrapped, as in CrowdyJS and
29
+ CrowdyCPP: the SDK is for players, developers and org-admins.
30
+
6
31
  ## 0.17.0
7
32
 
8
33
  CrowdyJS 18.17.0 and CrowdyCPP 0.69.0. Additive. ck-api v2.53.0 serves org-managed players on
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: crowdypy
3
- Version: 0.17.0.dev1
3
+ Version: 0.18.0.dev1
4
4
  Summary: Official Python SDK for Crowded Kingdoms: typed GraphQL clients and a native UDP replication core
5
5
  Keywords: crowded-kingdoms,multiplayer,replication,graphql,sdk,udp
6
6
  Author: Crowded Kingdoms
@@ -51,6 +51,8 @@ CrowdyPy follows the [CrowdyJS](https://github.com/CrowdedKingdoms/CrowdyJS) API
51
51
  client, bound with [nanobind](https://github.com/wjakob/nanobind) and shipped inside the
52
52
  wheel. Python never touches a datagram.
53
53
 
54
+ **v0.18.0: text chat and direct-message keys, and the recording switch.** Game API v2.55.0 adds the app-level `use_text_chat` and `use_direct_messages` keys: without them the realtime servers refuse a player's text, channel text and direct messages with `UNAUTHORIZED`. A tier that grants `access` gets both unless `applyCommunicationDefaults` is false, and `replayLoggingRecordsMedia` leaves voice and video out of an app's recording. Deleting a managed player now erases its content, and a legal hold refuses it with `LEGAL_HOLD`. See [MIGRATION.md](MIGRATION.md).
55
+
54
56
  **v0.17.0: the Org-Managed Players Addendum.** ck-api v2.53.0 serves org-managed players on every tier, once an admin of the organization has accepted the addendum in Studio; until then its sign-ins and refreshes answer `ORG_LEGAL_ACCEPTANCE_REQUIRED`, which `crowdypy.errors.org_legal_acceptance_required_of` reads, and `client.managed_players.settings(org_id)` says where the organization stands. CrowdyJS 18.17.0 and CrowdyCPP 0.69.0. See [MIGRATION.md](MIGRATION.md).
55
57
 
56
58
  **v0.16.0: org-managed players.** An organization that runs its own accounts signs its players in itself: its server mints a player's app token with an org token, or its sign-in service signs an assertion. A device holds the first with `client.portal.adopt_app_token(response)` (it refuses an org token, which stays on the organization's server; there is no org-token mint wrapper) or trades the second with `client.portal.exchange_managed_player_assertion(app_id, assertion)`, and gives the result to `client.set_app_token`. `client.managed_players` is the organization's administration. CrowdyJS 18.16.0 and CrowdyCPP 0.68.0. See [MIGRATION.md](MIGRATION.md).
@@ -11,6 +11,8 @@ CrowdyPy follows the [CrowdyJS](https://github.com/CrowdedKingdoms/CrowdyJS) API
11
11
  client, bound with [nanobind](https://github.com/wjakob/nanobind) and shipped inside the
12
12
  wheel. Python never touches a datagram.
13
13
 
14
+ **v0.18.0: text chat and direct-message keys, and the recording switch.** Game API v2.55.0 adds the app-level `use_text_chat` and `use_direct_messages` keys: without them the realtime servers refuse a player's text, channel text and direct messages with `UNAUTHORIZED`. A tier that grants `access` gets both unless `applyCommunicationDefaults` is false, and `replayLoggingRecordsMedia` leaves voice and video out of an app's recording. Deleting a managed player now erases its content, and a legal hold refuses it with `LEGAL_HOLD`. See [MIGRATION.md](MIGRATION.md).
15
+
14
16
  **v0.17.0: the Org-Managed Players Addendum.** ck-api v2.53.0 serves org-managed players on every tier, once an admin of the organization has accepted the addendum in Studio; until then its sign-ins and refreshes answer `ORG_LEGAL_ACCEPTANCE_REQUIRED`, which `crowdypy.errors.org_legal_acceptance_required_of` reads, and `client.managed_players.settings(org_id)` says where the organization stands. CrowdyJS 18.17.0 and CrowdyCPP 0.69.0. See [MIGRATION.md](MIGRATION.md).
15
17
 
16
18
  **v0.16.0: org-managed players.** An organization that runs its own accounts signs its players in itself: its server mints a player's app token with an org token, or its sign-in service signs an assertion. A device holds the first with `client.portal.adopt_app_token(response)` (it refuses an org token, which stays on the organization's server; there is no org-token mint wrapper) or trades the second with `client.portal.exchange_managed_player_assertion(app_id, assertion)`, and gives the result to `client.set_app_token`. `client.managed_players` is the organization's administration. CrowdyJS 18.16.0 and CrowdyCPP 0.68.0. See [MIGRATION.md](MIGRATION.md).
@@ -5,7 +5,7 @@ are in `pyproject.toml` (`[project].version`, `[tool.crowdypy.crowdyjs]`,
5
5
  `[tool.crowdypy.crowdycpp]`); `tests/unit/test_release_versions.py` refuses this page when
6
6
  its version disagrees.
7
7
 
8
- - CrowdyPy `0.17.0`
8
+ - CrowdyPy `0.18.0`
9
9
  - API surface: CrowdyJS (the pinned version and commit in `pyproject.toml`); the generated
10
10
  `docs/parity-matrix.md` lists every covered method, every native equivalent and every
11
11
  browser exclusion with its reason. The gate is strict: there are no portable gaps, and a
@@ -4,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.17.0` at `05c2f28b72ebde4c487c7bb52e07d11466bc64cc`
8
- - CrowdyCPP (native core): `0.69.0` at `96c859cdf7972686f3325489c01b8a49161dd664`
7
+ - CrowdyJS: `18.18.0` at `e21a05d521249e402733f80eaa668fece4b45906`
8
+ - CrowdyCPP (native core): `0.70.0` at `2b67e3f976934224c4d45ded101655a38ed3eabc`
9
9
  - schema.gql identical to CrowdyJS's: yes
10
10
  - Gate mode: strict portable parity (every portable gap is release-blocking)
11
11
 
@@ -14,7 +14,7 @@ Generated by `tools/parity/parity.py`; do not edit by hand. Classifications live
14
14
  - Covered: 1386
15
15
  - Portable gap: 0
16
16
  - Native equivalent: 46
17
- - Browser exclusion: 116
17
+ - Browser exclusion: 121
18
18
  - Deprecated roots: 2
19
19
  - Unclassified: 0
20
20
 
@@ -157,10 +157,12 @@ Generated by `tools/parity/parity.py`; do not edit by hand. Classifications live
157
157
  | `mutation.registerOrgSigningKey` | covered |
158
158
  | `mutation.reinstateOrganization` | browser exclusion — operator-only organization lifecycle; not a game-client surface |
159
159
  | `mutation.releaseClaimedGrid` | covered |
160
+ | `mutation.releaseLegalHold` | browser exclusion — super-admin or operator only; the SDK wraps nothing for platform roles (tooling calls it directly) |
160
161
  | `mutation.removeChannelMember` | covered |
161
162
  | `mutation.removeOrgMember` | covered |
162
163
  | `mutation.removeSharedPaymentMethod` | covered |
163
164
  | `mutation.removeTeamMember` | covered |
165
+ | `mutation.requestAccountErasure` | browser exclusion — super-admin or operator only; the SDK wraps nothing for platform roles (tooling calls it directly) |
164
166
  | `mutation.requestLoginLink` | covered |
165
167
  | `mutation.requestPasswordReset` | covered |
166
168
  | `mutation.requestToJoinChannel` | covered |
@@ -211,6 +213,7 @@ Generated by `tools/parity/parity.py`; do not edit by hand. Classifications live
211
213
  | `mutation.setHostedGameEnabled` | browser exclusion — publishes and administers browser game bundles on the Crowdy Games web host; a Python client has no bundle to publish |
212
214
  | `mutation.setHostedGameListing` | browser exclusion — publishes and administers browser game bundles on the Crowdy Games web host; a Python client has no bundle to publish |
213
215
  | `mutation.setInitialPassword` | covered |
216
+ | `mutation.setLegalHold` | browser exclusion — super-admin or operator only; the SDK wraps nothing for platform roles (tooling calls it directly) |
214
217
  | `mutation.setOperator` | browser exclusion — super-admin or operator only; the SDK wraps nothing for platform roles (tooling calls it directly) |
215
218
  | `mutation.setOrgBillingExempt` | browser exclusion — operator-only billing control; not a game-client surface |
216
219
  | `mutation.setOrgManagedPlayerSettings` | browser exclusion — super-admin or operator only; the SDK wraps nothing for platform roles (tooling calls it directly) |
@@ -262,6 +265,7 @@ Generated by `tools/parity/parity.py`; do not edit by hand. Classifications live
262
265
  | `mutation.updateUserType` | browser exclusion — super-admin or operator only; the SDK wraps nothing for platform roles (tooling calls it directly) |
263
266
  | `mutation.updateVoxel` | covered |
264
267
  | `query.accountBlock` | browser exclusion — super-admin or operator only; the SDK wraps nothing for platform roles (tooling calls it directly) |
268
+ | `query.accountErasure` | browser exclusion — super-admin or operator only; the SDK wraps nothing for platform roles (tooling calls it directly) |
265
269
  | `query.activeGraphQLServers` | covered |
266
270
  | `query.actor` | covered |
267
271
  | `query.actors` | covered |
@@ -375,6 +379,7 @@ Generated by `tools/parity/parity.py`; do not edit by hand. Classifications live
375
379
  | `query.hostedGames` | browser exclusion — catalog of browser games hosted on Crowdy Games; a Python client is not one of them |
376
380
  | `query.inputLogMessages` | covered |
377
381
  | `query.inputLogSessions` | covered |
382
+ | `query.legalHolds` | browser exclusion — super-admin or operator only; the SDK wraps nothing for platform roles (tooling calls it directly) |
378
383
  | `query.listVoxelUpdatesByDistance` | covered |
379
384
  | `query.listVoxels` | covered |
380
385
  | `query.managedPlayer` | covered |
@@ -4,7 +4,7 @@ build-backend = "scikit_build_core.build"
4
4
 
5
5
  [project]
6
6
  name = "crowdypy"
7
- version = "0.17.0.dev1"
7
+ version = "0.18.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,19 +119,19 @@ environment = { OPENSSL_ROOT_DIR = "C:/vcpkg/installed/x64-windows-static-md" }
119
119
  # --------------------------------------------------------------------------------------
120
120
 
121
121
  [tool.crowdypy.crowdyjs]
122
- version = "18.17.0"
123
- commit = "05c2f28b72ebde4c487c7bb52e07d11466bc64cc"
122
+ version = "18.18.0"
123
+ commit = "e21a05d521249e402733f80eaa668fece4b45906"
124
124
 
125
125
  [tool.crowdypy.crowdycpp]
126
- version = "0.69.0"
127
- tag = "dev/v0.69.0"
128
- commit = "96c859cdf7972686f3325489c01b8a49161dd664"
129
- tree-sha256 = "b2e302e5d2e8967d7325dda2fb14a46c162fa1d69ce2b3c149f85fa8c5eeca82"
126
+ version = "0.70.0"
127
+ tag = "dev/v0.70.0"
128
+ commit = "2b67e3f976934224c4d45ded101655a38ed3eabc"
129
+ tree-sha256 = "ac181281169221b6de4c1073976c15f87493459ea0227a5229071be88dff1b32"
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 = "261902653e100cc5701c32580d07b5ae401e28fa547a0712fa71429fb24df188"
134
+ schema-sha256 = "aa15686351b9ce9a99a1127678a86e4c2c7e92b0d06b55655c99a1407b1a681d"
135
135
  operations-sha256 = "32e2c43ac1bd00ec9c05902d524e82727cf560a88330f207704059a7a8a96189"
136
136
 
137
137
  # The SDL the docs site publishes. scripts/schema_drift.py compares the snapshot against it
@@ -1337,6 +1337,10 @@ type App {
1337
1337
  """
1338
1338
  replayLoggingEnabled: Boolean!
1339
1339
  """
1340
+ Whether replay logging records the app's voice, webcam video and channel audio messages too. True (the default) records them with every other message; false leaves them out of the input log while everything else is still recorded. Applies only while replayLoggingEnabled is on. Set with updateApp (manage_apps).
1341
+ """
1342
+ replayLoggingRecordsMedia: Boolean!
1343
+ """
1340
1344
  Grid permission keys a player's claim grants its owner on the claimed grid (claimGridOwnership), beside the player-code keys the owner's tier carries; for example update_voxel_data makes a claim buildable without a hub granting it. Never a player-code key; the grid's permission limits still cap them. Empty by default. Set with updateApp (manage_apps).
1341
1345
  """
1342
1346
  claimOwnerKeys: [String!]!
@@ -6646,6 +6650,68 @@ type CrowdyStudioModelUsage {
6646
6650
  recent: [CrowdyStudioModelUsageEntry!]!
6647
6651
  }
6648
6652
 
6653
+ """
6654
+ A legal hold an operator set on an organization or on one account. While it applies, deleting a managed player it covers is refused with LEGAL_HOLD, a player’s own account deletion closes the account but keeps its content (and preserves its identity) until the hold is released, and no erasure runs. An organization’s hold covers its managed players. A released hold stays readable as the record.
6655
+ """
6656
+ type LegalHold {
6657
+ """The hold."""
6658
+ holdId: BigInt!
6659
+ """
6660
+ The organization held (its public id), or null for a hold on one account.
6661
+ """
6662
+ orgId: BigInt
6663
+ """The account held, or null for a hold on an organization."""
6664
+ userId: BigInt
6665
+ """Why, as the operator wrote it."""
6666
+ reason: String!
6667
+ """The operator who set it."""
6668
+ setBy: BigInt!
6669
+ """When it was set."""
6670
+ setAt: DateTime!
6671
+ """The operator who released it, or null while it applies."""
6672
+ releasedBy: BigInt
6673
+ """When it was released, or null while it applies."""
6674
+ releasedAt: DateTime
6675
+ """Whether it applies now."""
6676
+ active: Boolean!
6677
+ }
6678
+
6679
+ """
6680
+ An account erasure: what deleting an account erases (its player-side content) and where that stands. Usage, billing, audit and legal records stay, and so does everything the account owns as a developer.
6681
+ """
6682
+ type AccountErasure {
6683
+ """The deleted account."""
6684
+ userId: BigInt!
6685
+ """
6686
+ PENDING (apps still to do), RUNNING (finishing), DONE, FAILED (the finish threw; it is retried) or DEFERRED_HOLD (a legal hold applies; nothing is erased until it is released).
6687
+ """
6688
+ status: String!
6689
+ """
6690
+ Why it was asked for: SELF_DELETE (the player deleted its own account), MANAGED_DELETE (its organization deleted it) or OPERATOR.
6691
+ """
6692
+ reason: String!
6693
+ """Who asked: user:<id>, org_token:<id> or operator:<id>."""
6694
+ requestedBy: String
6695
+ """When it was asked for."""
6696
+ requestedAt: DateTime!
6697
+ """When it finished, or null."""
6698
+ completedAt: DateTime
6699
+ """Apps the account had content in."""
6700
+ apps: Int!
6701
+ """Of those, the apps already erased."""
6702
+ appsDone: Int!
6703
+ """The last error, from the finish or from an app, or null."""
6704
+ lastError: String
6705
+ """
6706
+ What was erased, as JSON: rows removed per table, summed over the apps, and the account-wide rows.
6707
+ """
6708
+ summary: String
6709
+ """
6710
+ OPERATOR ONLY. While a legal hold defers the erasure, what the account row said before it was blanked (email, gamertag, external id, organization), as JSON; null otherwise.
6711
+ """
6712
+ preservedIdentity: String
6713
+ }
6714
+
6649
6715
  """
6650
6716
  Arbitrary-precision signed integer (used for 64-bit ids and chunk coordinates such as appId, userId and chunk x/y/z). ALWAYS transmitted as a base-10 decimal STRING in BOTH directions — send it quoted (e.g. "1024", "-5") and read it back as a string; never use a raw JSON number, because large values overflow IEEE-754 doubles. The server rejects any value that is not a valid integer string.
6651
6717
  """
@@ -7186,6 +7252,24 @@ type Query {
7186
7252
  orgId: BigInt!
7187
7253
  ): [OrgSigningKey!]!
7188
7254
  """
7255
+ OPERATOR: where the erasure of a deleted account stands (what deleting it erases, app by app), or null if none was asked for. While a legal hold defers it, preservedIdentity carries what the account row said before it was blanked.
7256
+ """
7257
+ accountErasure(
7258
+ """The deleted account."""
7259
+ userId: BigInt!
7260
+ ): AccountErasure @requiresPermission(scope: "operator", permission: "is_operator")
7261
+ """
7262
+ OPERATOR: legal holds, newest first (at most 500), on one organization or account if given; only the ones that apply now unless includeReleased.
7263
+ """
7264
+ legalHolds(
7265
+ """Only holds on this organization (its public id)."""
7266
+ orgId: BigInt
7267
+ """Only holds on this account."""
7268
+ userId: BigInt
7269
+ """Also list released holds."""
7270
+ includeReleased: Boolean = false
7271
+ ): [LegalHold!]! @requiresPermission(scope: "operator", permission: "is_operator")
7272
+ """
7189
7273
  A hosted third-party game by slug, or null when the slug is unclaimed. PUBLIC: the first-party shell at https://<games host>/<slug>/ calls this before sign-in to learn the contentOrigin it frames. Returns DISABLED and TAKEN_DOWN games too (with their status) so the shell can say why. Null when the tier does not host third-party games.
7190
7274
  """
7191
7275
  hostedGame(
@@ -8612,7 +8696,7 @@ type Mutation {
8612
8696
  userId: BigInt!
8613
8697
  ): AccountBlock! @requiresPermission(scope: "super_admin", permission: "is_super_admin")
8614
8698
  """
8615
- DESTRUCTIVE self-service: soft-deletes the authenticated caller's OWN account — anonymizes PII and revokes all sessions; wallet, voxel, and donation history stay intact via FK. Acts only on the caller (no target argument). Requires a valid game token.
8699
+ DESTRUCTIVE self-service: deletes the authenticated caller's OWN account. Every session, app token, realtime connection and ck-exec socket ends; the email, password, gamertag and profile state are removed from the account; and its player-side content is erased within minutes: Crowdy Studio projects, libraries and agent sessions, mods, actors, avatars and saved state, access grants, grid claims, and team and channel memberships. Wallet, billing, usage, audit and legal records stay, and so does everything the account owns as a developer (organizations, apps, published games); world edits stay, under the account's now anonymous id; recorded inputs age out with the input log's retention. Acts only on the caller (no target argument). Requires a valid token.
8616
8700
  """
8617
8701
  deleteMyAccount: Boolean!
8618
8702
  """
@@ -9092,7 +9176,7 @@ type Mutation {
9092
9176
  input: CreateAppInput!
9093
9177
  ): App! @requiresPermission(scope: "org", permission: "manage_apps", scopeArg: "input.orgId")
9094
9178
  """
9095
- 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.
9179
+ Update mutable fields of an existing app (name, description, visibility, status, metadata, wildernessWritesOpen, claimOwnerKeys, replayLoggingEnabled, replayLoggingRecordsMedia); 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.
9096
9180
  """
9097
9181
  updateApp(
9098
9182
  """Numeric id of the app to update."""
@@ -9207,7 +9291,7 @@ type Mutation {
9207
9291
  externalId: String!
9208
9292
  ): Boolean!
9209
9293
  """
9210
- Delete a managed player: its sessions end and its row is anonymized, as an account deletion is. Signing the same external id in again creates a new player. False when there was no such player. An org token with players:manage, or an org admin with manage_players.
9294
+ Delete a managed player, as an account deletion is: its sessions end, its externalId and gamertag are removed, and its player-side content is erased within minutes (Crowdy Studio projects, libraries and agent sessions, mods, actors, avatars and saved state, access grants, grid claims, team and channel memberships). Usage and billing records stay; world edits stay, under the account’s now anonymous id; recorded inputs age out with the input log’s retention. Refused with LEGAL_HOLD while a legal hold covers the player or the organization: disable it instead (updateManagedPlayer), which keeps everything. Signing the same external id in again creates a new player. False when there was no such player. An org token with players:manage, or an org admin with manage_players.
9211
9295
  """
9212
9296
  deleteManagedPlayer(
9213
9297
  """
@@ -9261,6 +9345,27 @@ type Mutation {
9261
9345
  enabled: Boolean!
9262
9346
  ): Boolean! @requiresPermission(scope: "app", permission: "manage_billing", scopeArg: "appId")
9263
9347
  """
9348
+ OPERATOR: erase the player-side content of a deleted account, as a deletion does: one deleted before account erasure existed (2026-10-23), or one whose erasure stopped after its retries (its attempts start again). Refused for an account that is not deleted. A legal hold defers it.
9349
+ """
9350
+ requestAccountErasure(
9351
+ """The deleted account to erase."""
9352
+ userId: BigInt!
9353
+ ): AccountErasure! @requiresPermission(scope: "operator", permission: "is_operator")
9354
+ """
9355
+ OPERATOR: put an organization (and its managed players) or one account under a legal hold. While it applies, deleting a managed player it covers is refused with LEGAL_HOLD, a player’s own deletion closes the account but keeps its content and preserves its identity, and no erasure runs.
9356
+ """
9357
+ setLegalHold(
9358
+ """What to hold, and why."""
9359
+ input: SetLegalHoldInput!
9360
+ ): LegalHold! @requiresPermission(scope: "operator", permission: "is_operator")
9361
+ """
9362
+ OPERATOR: release a legal hold. The hold stays as the record. Erasures it deferred resume once no other hold covers their accounts.
9363
+ """
9364
+ releaseLegalHold(
9365
+ """The hold to release."""
9366
+ holdId: BigInt!
9367
+ ): LegalHold! @requiresPermission(scope: "operator", permission: "is_operator")
9368
+ """
9264
9369
  Claim the hosting slug for an app (idempotent; the same app re-claiming its slug is a no-op, a different slug MOVES the game). Registers https://<games host>/<slug>/ and https://<slug>.<content host> as the app's redirect URIs and sets launch_url to the former. Requires manage_apps on the app and a SESSION token. Refuses a slug that is not a DNS label, is reserved, or belongs to another app (HOSTED_SLUG_UNAVAILABLE), and answers CONTENT_HOSTING_DISABLED on a tier without a content CDN.
9265
9370
  """
9266
9371
  claimGameHosting(input: ClaimGameHostingInput!): HostedGame!
@@ -10552,14 +10657,14 @@ type Mutation {
10552
10657
  input: ClientVideoPacketInput!
10553
10658
  ): Boolean! @requiresPermission(scope: "runtime", permission: "use_video_chat", scopeArg: "input.appId")
10554
10659
  """
10555
- Send a spatial text/chat packet, fanned out to nearby actors as a ClientTextNotification. Requires a bearer game token; opens a UDP proxy session automatically if none exists. Returns Boolean! that is true only when the datagram was ACCEPTED FOR SENDING to the game server — NOT confirmation of delivery. The sender receives no echo; failures arrive ASYNCHRONOUSLY as GenericErrorResponse on udpNotifications, correlated by the request sequenceNumber (correlation only — not an idempotency key; the server does not dedupe replays).
10660
+ Send a spatial text/chat packet, fanned out to nearby actors as a ClientTextNotification. Requires a bearer game token and the use_text_chat runtime permission on the app (a tier that grants access grants it unless the app took it away); without it the game server answers asynchronously with a GenericErrorResponse (errorCode UNAUTHORIZED). Opens a UDP proxy session automatically if none exists. Returns Boolean! that is true only when the datagram was ACCEPTED FOR SENDING to the game server — NOT confirmation of delivery. The sender receives no echo; failures arrive ASYNCHRONOUSLY as GenericErrorResponse on udpNotifications, correlated by the request sequenceNumber (correlation only — not an idempotency key; the server does not dedupe replays).
10556
10661
  """
10557
10662
  sendTextPacket(
10558
10663
  """
10559
10664
  The text/chat packet to send: target appId, chunk coordinates, 32-byte source uuid, UTF-8 text, and optional distance/decayRate/sequenceNumber. See ClientTextPacketInput.
10560
10665
  """
10561
10666
  input: ClientTextPacketInput!
10562
- ): Boolean!
10667
+ ): Boolean! @requiresPermission(scope: "runtime", permission: "use_text_chat", scopeArg: "input.appId")
10563
10668
  """
10564
10669
  Send a custom, app-defined client event (identified by eventType, a uint16) for spatial replication to nearby chunks; nearby actors receive it as a ClientEventNotification. Requires a bearer game token; opens a UDP proxy session automatically if none exists. Returns Boolean! that is true only when the datagram was ACCEPTED FOR SENDING — NOT that the world processed it. Failures arrive ASYNCHRONOUSLY as GenericErrorResponse on udpNotifications, correlated by the request sequenceNumber (correlation only — not an idempotency key; the server does not dedupe replays).
10565
10670
  """
@@ -10570,16 +10675,16 @@ type Mutation {
10570
10675
  input: ClientEventNotificationInput!
10571
10676
  ): Boolean!
10572
10677
  """
10573
- Send a direct actor-to-actor message, delivered only to the actor identified by targetUuid (NOT broadcast to nearby actors). The sender must know the destination actor’s current chunk. Requires a bearer game token; opens a UDP proxy session automatically if none exists. The target receives a SingleActorMessageNotification on udpNotifications; the sender receives no echo. Returns Boolean! that is true only when the datagram was ACCEPTED FOR SENDING — NOT confirmation of delivery; failures arrive ASYNCHRONOUSLY as GenericErrorResponse on udpNotifications, correlated by the request sequenceNumber (correlation only — not an idempotency key; the server does not dedupe replays).
10678
+ Send a direct actor-to-actor message, delivered only to the actor identified by targetUuid (NOT broadcast to nearby actors). The sender must know the destination actor’s current chunk. Requires a bearer game token and the use_direct_messages runtime permission on the app (a tier that grants access grants it unless the app took it away); without it the game server answers asynchronously with a GenericErrorResponse (errorCode UNAUTHORIZED). Opens a UDP proxy session automatically if none exists. The target receives a SingleActorMessageNotification on udpNotifications; the sender receives no echo. Returns Boolean! that is true only when the datagram was ACCEPTED FOR SENDING — NOT confirmation of delivery; failures arrive ASYNCHRONOUSLY as GenericErrorResponse on udpNotifications, correlated by the request sequenceNumber (correlation only — not an idempotency key; the server does not dedupe replays).
10574
10679
  """
10575
10680
  sendSingleActorMessage(
10576
10681
  """
10577
10682
  The direct message to send: target appId, the DESTINATION actor’s chunk coordinates, the 32-byte targetUuid, base64 payload, and optional sequenceNumber. See SingleActorMessageInput.
10578
10683
  """
10579
10684
  input: SingleActorMessageInput!
10580
- ): Boolean!
10685
+ ): Boolean! @requiresPermission(scope: "runtime", permission: "use_direct_messages", scopeArg: "input.appId")
10581
10686
  """
10582
- Publish a message to a channel, delivered to every active member of the channel (not chunk-routed) as a ChannelMessageNotification on udpNotifications. Requires a bearer game token and the channel send_messages permission; lacking the permission the server drops the message. Opens a UDP proxy session automatically if none exists. The sender receives no echo. Returns Boolean! that is true only when the datagram was ACCEPTED FOR SENDING — NOT confirmation of delivery; failures arrive ASYNCHRONOUSLY as GenericErrorResponse on udpNotifications, correlated by the request sequenceNumber (correlation only — not an idempotency key; the server does not dedupe replays).
10687
+ Publish a message to a channel, delivered to every active member of the channel (not chunk-routed) as a ChannelMessageNotification on udpNotifications. Requires a bearer game token, the channel send_messages permission and the use_text_chat runtime permission on the channel’s app; lacking either the game server answers asynchronously with a GenericErrorResponse (errorCode UNAUTHORIZED). Opens a UDP proxy session automatically if none exists. The sender receives no echo. Returns Boolean! that is true only when the datagram was ACCEPTED FOR SENDING — NOT confirmation of delivery; failures arrive ASYNCHRONOUSLY as GenericErrorResponse on udpNotifications, correlated by the request sequenceNumber (correlation only — not an idempotency key; the server does not dedupe replays).
10583
10688
  """
10584
10689
  sendChannelMessage(
10585
10690
  """
@@ -10597,14 +10702,14 @@ type Mutation {
10597
10702
  input: ChannelMessageInput!
10598
10703
  ): Boolean!
10599
10704
  """
10600
- Publish a message to a channel that only reaches members near an origin chunk: a member receives it, as an ordinary ChannelMessageNotification on udpNotifications, when one of its live actors is in the same app within maxDistance chunks of input.chunk (straight-line distance between chunk coordinates, boundary included). A member with no live actor does not receive it. Requires a bearer game token and the channel send_messages permission, as for sendChannelMessage; the origin app must be the token’s app. Opens a UDP proxy session automatically if none exists. The sender receives no echo. Returns Boolean! that is true only when the datagram was ACCEPTED FOR SENDING — NOT confirmation of delivery; failures arrive ASYNCHRONOUSLY as GenericErrorResponse on udpNotifications (UNAUTHORIZED without the send right, INVALID_APP_ID for another app), correlated by the request sequenceNumber (correlation only — not an idempotency key; the server does not dedupe replays).
10705
+ Publish a message to a channel that only reaches members near an origin chunk: a member receives it, as an ordinary ChannelMessageNotification on udpNotifications, when one of its live actors is in the same app within maxDistance chunks of input.chunk (straight-line distance between chunk coordinates, boundary included). A member with no live actor does not receive it. Requires a bearer game token, the channel send_messages permission and use_text_chat, as for sendChannelMessage; the origin app must be the token’s app. Opens a UDP proxy session automatically if none exists. The sender receives no echo. Returns Boolean! that is true only when the datagram was ACCEPTED FOR SENDING — NOT confirmation of delivery; failures arrive ASYNCHRONOUSLY as GenericErrorResponse on udpNotifications (UNAUTHORIZED without the send right or use_text_chat, INVALID_APP_ID for another app), correlated by the request sequenceNumber (correlation only — not an idempotency key; the server does not dedupe replays).
10601
10706
  """
10602
10707
  sendRangedChannelMessage(
10603
10708
  """
10604
10709
  The channel message to publish: channelId (groups.group_id), the sender’s 32-byte actor uuid, base64 payload (max 1024 bytes), the origin appId and chunk, maxDistance in chunks, and optional sequenceNumber. See RangedChannelMessageInput.
10605
10710
  """
10606
10711
  input: RangedChannelMessageInput!
10607
- ): Boolean!
10712
+ ): Boolean! @requiresPermission(scope: "runtime", permission: "use_text_chat", scopeArg: "input.appId")
10608
10713
  }
10609
10714
 
10610
10715
  input UpdateGamertagInput {
@@ -10786,6 +10891,10 @@ input CreateAccessTierInput {
10786
10891
  Optional runtime permission keys to grant on this tier (must be valid runtimePermissions). Defaults to ["access"] when omitted.
10787
10892
  """
10788
10893
  permissionKeys: [String!]
10894
+ """
10895
+ When true (the default) and the tier grants access, it also grants use_text_chat and use_direct_messages, whether or not permissionKeys names them: without them the realtime servers refuse the tier’s text chat and direct messages. Pass false to grant exactly permissionKeys, for example a tier without text chat.
10896
+ """
10897
+ applyCommunicationDefaults: Boolean
10789
10898
  }
10790
10899
 
10791
10900
  """
@@ -10816,6 +10925,10 @@ input UpdateAccessTierInput {
10816
10925
  Replacement set of runtime permission keys for the tier (must be valid runtimePermissions). When provided, replaces the existing set entirely.
10817
10926
  """
10818
10927
  permissionKeys: [String!]
10928
+ """
10929
+ With permissionKeys: when true (the default) and the new set grants access, it also grants use_text_chat and use_direct_messages, whether or not permissionKeys names them. Pass false to set exactly permissionKeys, for example to take text chat away. Ignored without permissionKeys.
10930
+ """
10931
+ applyCommunicationDefaults: Boolean
10819
10932
  }
10820
10933
 
10821
10934
  """
@@ -11098,6 +11211,10 @@ input UpdateAppInput {
11098
11211
  """
11099
11212
  replayLoggingEnabled: Boolean
11100
11213
  """
11214
+ With replay logging on, record the app's voice (sendAudioPacket), webcam video (sendVideoPacket) and channel audio (sendChannelAudio) too (true, the default) or leave them out of the input log (false); every other message is recorded either way. Takes effect within about 15 seconds; what was already recorded stays until it ages out. Omit to leave unchanged.
11215
+ """
11216
+ replayLoggingRecordsMedia: Boolean
11217
+ """
11101
11218
  Grid permission keys a player's claim grants its owner on the claimed grid (at most 8; active grid keys; never a player-code key). An empty list grants none. Applies to claims made from now on. Omit to leave unchanged.
11102
11219
  """
11103
11220
  claimOwnerKeys: [String!]
@@ -11284,6 +11401,20 @@ input ExchangeManagedPlayerAssertionInput {
11284
11401
  assertion: String!
11285
11402
  }
11286
11403
 
11404
+ """
11405
+ A legal hold to set: exactly one of orgId (an organization and its managed players) and userId (one account), and why.
11406
+ """
11407
+ input SetLegalHoldInput {
11408
+ """The organization to hold (its public id). Covers its managed players."""
11409
+ orgId: BigInt
11410
+ """The account to hold."""
11411
+ userId: BigInt
11412
+ """
11413
+ Why the hold is set (the matter it preserves for), at most 500 characters.
11414
+ """
11415
+ reason: String!
11416
+ }
11417
+
11287
11418
  """Claim (or re-assert) the hosting slug for an app."""
11288
11419
  input ClaimGameHostingInput {
11289
11420
  """The app to host. Requires manage_apps on it."""
@@ -1,6 +1,6 @@
1
1
  """GENERATED by scripts/codegen.py from schema.gql. Do not edit.
2
2
 
3
- schema.gql sha256: 261902653e100cc5701c32580d07b5ae401e28fa547a0712fa71429fb24df188
3
+ schema.gql sha256: aa15686351b9ce9a99a1127678a86e4c2c7e92b0d06b55655c99a1407b1a681d
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: 261902653e100cc5701c32580d07b5ae401e28fa547a0712fa71429fb24df188
7
+ schema.gql sha256: aa15686351b9ce9a99a1127678a86e4c2c7e92b0d06b55655c99a1407b1a681d
8
8
  """
9
9
 
10
10
  from __future__ import annotations
@@ -191,7 +191,7 @@ class CompleteLoginLinkInput(msgspec.Struct, kw_only=True, omit_defaults=True):
191
191
  token: str
192
192
 
193
193
 
194
- class CreateAccessTierInput(msgspec.Struct, kw_only=True, omit_defaults=True, rename={'app_id': 'appId', 'tier_order': 'tierOrder', 'is_free': 'isFree', 'is_default': 'isDefault', 'permission_keys': 'permissionKeys'}):
194
+ class CreateAccessTierInput(msgspec.Struct, kw_only=True, omit_defaults=True, rename={'app_id': 'appId', 'tier_order': 'tierOrder', 'is_free': 'isFree', 'is_default': 'isDefault', 'permission_keys': 'permissionKeys', 'apply_communication_defaults': 'applyCommunicationDefaults'}):
195
195
  'Input for creating a new app access tier.'
196
196
  app_id: str
197
197
  name: str
@@ -200,6 +200,7 @@ class CreateAccessTierInput(msgspec.Struct, kw_only=True, omit_defaults=True, re
200
200
  is_default: bool | None | UnsetType = UNSET
201
201
  description: str | None | UnsetType = UNSET
202
202
  permission_keys: list[str] | None | UnsetType = UNSET
203
+ apply_communication_defaults: bool | None | UnsetType = UNSET
203
204
 
204
205
 
205
206
  class CreateActorInput(msgspec.Struct, kw_only=True, omit_defaults=True, rename={'app_id': 'appId', 'avatar_id': 'avatarId', 'private_state': 'privateState', 'public_state': 'publicState'}):
@@ -970,6 +971,13 @@ class SetHostedGameListingInput(msgspec.Struct, kw_only=True, omit_defaults=True
970
971
  listed: bool
971
972
 
972
973
 
974
+ class SetLegalHoldInput(msgspec.Struct, kw_only=True, omit_defaults=True, rename={'org_id': 'orgId', 'user_id': 'userId'}):
975
+ 'A legal hold to set: exactly one of orgId (an organization and its managed players) and userId (one account), and why.'
976
+ org_id: str | None | UnsetType = UNSET
977
+ user_id: str | None | UnsetType = UNSET
978
+ reason: str
979
+
980
+
973
981
  class SetMemberRolesInput(msgspec.Struct, kw_only=True, omit_defaults=True, rename={'group_id': 'groupId', 'user_id': 'userId', 'role_ids': 'roleIds'}):
974
982
  "Replace a member's roles in a group (the listed roles become their full set)."
975
983
  group_id: str
@@ -1066,7 +1074,7 @@ class TransferPlayerCodeListingInput(msgspec.Struct, kw_only=True, omit_defaults
1066
1074
  to_owner_ref: str
1067
1075
 
1068
1076
 
1069
- class UpdateAccessTierInput(msgspec.Struct, kw_only=True, omit_defaults=True, rename={'tier_order': 'tierOrder', 'is_free': 'isFree', 'is_default': 'isDefault', 'price_cents': 'priceCents', 'billing_period': 'billingPeriod', 'stripe_price_id': 'stripePriceId', 'paypal_plan_id': 'paypalPlanId', 'permission_keys': 'permissionKeys'}):
1077
+ class UpdateAccessTierInput(msgspec.Struct, kw_only=True, omit_defaults=True, rename={'tier_order': 'tierOrder', 'is_free': 'isFree', 'is_default': 'isDefault', 'price_cents': 'priceCents', 'billing_period': 'billingPeriod', 'stripe_price_id': 'stripePriceId', 'paypal_plan_id': 'paypalPlanId', 'permission_keys': 'permissionKeys', 'apply_communication_defaults': 'applyCommunicationDefaults'}):
1070
1078
  'Fields to update on an access tier. All fields are optional; omitted fields are left unchanged.'
1071
1079
  name: str | None | UnsetType = UNSET
1072
1080
  tier_order: int | None | UnsetType = UNSET
@@ -1079,6 +1087,7 @@ class UpdateAccessTierInput(msgspec.Struct, kw_only=True, omit_defaults=True, re
1079
1087
  stripe_price_id: str | None | UnsetType = UNSET
1080
1088
  paypal_plan_id: str | None | UnsetType = UNSET
1081
1089
  permission_keys: list[str] | None | UnsetType = UNSET
1090
+ apply_communication_defaults: bool | None | UnsetType = UNSET
1082
1091
 
1083
1092
 
1084
1093
  class UpdateActorInput(msgspec.Struct, kw_only=True, omit_defaults=True, rename={'app_id': 'appId', 'avatar_id': 'avatarId', 'private_state': 'privateState', 'public_state': 'publicState'}):
@@ -1094,7 +1103,7 @@ class UpdateActorStateInput(msgspec.Struct, kw_only=True, omit_defaults=True, re
1094
1103
  public_state: str | None | UnsetType = UNSET
1095
1104
 
1096
1105
 
1097
- class UpdateAppInput(msgspec.Struct, kw_only=True, omit_defaults=True, rename={'wilderness_writes_open': 'wildernessWritesOpen', 'replay_logging_enabled': 'replayLoggingEnabled', 'claim_owner_keys': 'claimOwnerKeys'}):
1106
+ class UpdateAppInput(msgspec.Struct, kw_only=True, omit_defaults=True, rename={'wilderness_writes_open': 'wildernessWritesOpen', 'replay_logging_enabled': 'replayLoggingEnabled', 'replay_logging_records_media': 'replayLoggingRecordsMedia', 'claim_owner_keys': 'claimOwnerKeys'}):
1098
1107
  'Input payload for updating an app. All fields are optional; only fields that are provided are changed.'
1099
1108
  name: str | None | UnsetType = UNSET
1100
1109
  description: str | None | UnsetType = UNSET
@@ -1103,6 +1112,7 @@ class UpdateAppInput(msgspec.Struct, kw_only=True, omit_defaults=True, rename={'
1103
1112
  metadata: str | None | UnsetType = UNSET
1104
1113
  wilderness_writes_open: bool | None | UnsetType = UNSET
1105
1114
  replay_logging_enabled: bool | None | UnsetType = UNSET
1115
+ replay_logging_records_media: bool | None | UnsetType = UNSET
1106
1116
  claim_owner_keys: list[str] | None | UnsetType = UNSET
1107
1117
 
1108
1118
 
@@ -1342,6 +1352,7 @@ __all__ = [
1342
1352
  'SetGridPermissionLimitsInput',
1343
1353
  'SetHostedGameEnabledInput',
1344
1354
  'SetHostedGameListingInput',
1355
+ 'SetLegalHoldInput',
1345
1356
  'SetMemberRolesInput',
1346
1357
  'SetOrgManagedPlayerSettingsInput',
1347
1358
  'SetQuotaInput',
@@ -1,6 +1,6 @@
1
1
  """GENERATED by scripts/codegen.py from schema.gql and operations/. Do not edit.
2
2
 
3
- schema.gql sha256: 261902653e100cc5701c32580d07b5ae401e28fa547a0712fa71429fb24df188
3
+ schema.gql sha256: aa15686351b9ce9a99a1127678a86e4c2c7e92b0d06b55655c99a1407b1a681d
4
4
  operations/ sha256: 32e2c43ac1bd00ec9c05902d524e82727cf560a88330f207704059a7a8a96189
5
5
  """
6
6
 
@@ -130,7 +130,10 @@ class AppAccessAPI(Domain):
130
130
  """Create an access tier for an app. Needs ``manage_access_tiers``.
131
131
 
132
132
  Its permission keys must be :meth:`runtime_permissions`. Creating a tier grants it
133
- to nobody.
133
+ to nobody. A tier that grants ``access`` also gets ``use_text_chat`` and
134
+ ``use_direct_messages`` unless ``applyCommunicationDefaults`` is false (Game API
135
+ v2.55.0); without them the realtime servers refuse its players' text and direct
136
+ messages.
134
137
  """
135
138
  result: dict[str, Any] = self._request(ops.CREATE_ACCESS_TIER, {"input": input})
136
139
  return result
@@ -140,7 +143,9 @@ class AppAccessAPI(Domain):
140
143
  ) -> dict[str, Any]:
141
144
  """Change an access tier; fields left out stay as they are.
142
145
 
143
- Needs ``manage_access_tiers``.
146
+ Needs ``manage_access_tiers``. ``permissionKeys`` that include ``access`` keep or gain
147
+ ``use_text_chat`` and ``use_direct_messages`` unless ``applyCommunicationDefaults`` is
148
+ false; send false to take them away.
144
149
  """
145
150
  result: dict[str, Any] = self._request(
146
151
  ops.UPDATE_ACCESS_TIER, {"tierId": bigint(tier_id), "input": input}
@@ -246,6 +246,8 @@ class AppsAPI(Domain):
246
246
  ``replayLoggingEnabled`` true raises ``INPUT_LOG_FUNDS_NEEDED`` unless the org wallet
247
247
  can spend the projected cost of keeping one retention period of the app's recent
248
248
  traffic; ``extensions["requiredMicrousd"]`` and ``["spendableMicrousd"]`` say how much.
249
+ ``replayLoggingRecordsMedia`` false leaves voice and video out of the app's recording
250
+ and keeps everything else (default true; Game API v2.55.0).
249
251
  """
250
252
  result: dict[str, Any] = self._request(
251
253
  ops.UPDATE_APP, {"appId": bigint(app_id), "input": input}
@@ -113,7 +113,10 @@ class ManagedPlayersAPI(Domain):
113
113
 
114
114
  def delete(self, org_id: str | int, external_id: str) -> bool:
115
115
  """Delete a player: its sessions end and its account is scrubbed. The external id is
116
- free again, so a later sign-in with it creates a new player."""
116
+ free again, so a later sign-in with it creates a new player. Since Game API v2.54.0
117
+ its player-side content is erased within minutes (usage and billing records and world
118
+ edits stay), and a legal hold on the player or its organization refuses the delete
119
+ with ``LEGAL_HOLD``; the player stays as it was."""
117
120
  return bool(
118
121
  self._request(
119
122
  ops.DELETE_MANAGED_PLAYER, {"orgId": bigint(org_id), "externalId": external_id}