@crowdedkingdoms/crowdyjs 17.1.0-test.1 → 17.2.0-dev.1

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.
@@ -1440,6 +1440,21 @@ export type BatchActorLookupInput = {
1440
1440
  /** Actor ids to look up. Each is exactly 32 ASCII characters (the UDP-wire actor id), NOT a hyphenated RFC-4122 UUID. Must be non-empty; unknown ids are silently omitted from the result. */
1441
1441
  uuids: Array<Scalars['String']['input']>;
1442
1442
  };
1443
+ /** Declare a publish: every file of the built bundle. */
1444
+ export type BeginGamePublishInput = {
1445
+ files: Array<PublishFileInput>;
1446
+ /** The hosting slug (claimGameHosting first). */
1447
+ slug: Scalars['String']['input'];
1448
+ };
1449
+ /** The result of beginGamePublish: a publish id and one upload per manifest file. Upload them all, then call completeGamePublish(publishId). */
1450
+ export type BeginGamePublishResult = {
1451
+ __typename?: 'BeginGamePublishResult';
1452
+ /** When the upload URLs stop working. */
1453
+ expiresAt: Scalars['DateTime']['output'];
1454
+ publishId: Scalars['BigInt']['output'];
1455
+ slug: Scalars['String']['output'];
1456
+ uploads: Array<HostedGameUpload>;
1457
+ };
1443
1458
  /** One settlement unit of the lossless ledger: a (payer, meter, period) for a continuous meter, or one request for a request-priced meter. Amounts in micro-USD; nothing is rounded. */
1444
1459
  export type BillingCharge = {
1445
1460
  __typename?: 'BillingCharge';
@@ -1801,6 +1816,13 @@ export type ChunksByDistanceResponse = {
1801
1816
  /** Echo of the `skip` applied to this page, or null if none was supplied. */
1802
1817
  skip: Maybe<Scalars['Int']['output']>;
1803
1818
  };
1819
+ /** Claim (or re-assert) the hosting slug for an app. */
1820
+ export type ClaimGameHostingInput = {
1821
+ /** The app to host. Requires manage_apps on it. */
1822
+ appId: Scalars['BigInt']['input'];
1823
+ /** The slug to claim. Defaults to the app slug when that is a valid DNS label. Once claimed, an app keeps its slug; pass a different one to MOVE (the old path stops serving). */
1824
+ slug?: InputMaybe<Scalars['String']['input']>;
1825
+ };
1804
1826
  /** Notification received when another client sends an audio packet (voice chat). Received via the udpNotifications subscription. */
1805
1827
  export type ClientAudioNotification = {
1806
1828
  __typename?: 'ClientAudioNotification';
@@ -1980,6 +2002,14 @@ export declare enum CodeAdmissionSubjectKind {
1980
2002
  Code = "CODE",
1981
2003
  Org = "ORG"
1982
2004
  }
2005
+ /** The result of completeGamePublish. */
2006
+ export type CompleteGamePublishResult = {
2007
+ __typename?: 'CompleteGamePublishResult';
2008
+ game: HostedGame;
2009
+ /** The CloudFront invalidation id, when one was created. */
2010
+ invalidationId: Maybe<Scalars['String']['output']>;
2011
+ publish: HostedGamePublish;
2012
+ };
1983
2013
  /** Complete a magic-link sign-in with the emailed token. */
1984
2014
  export type CompleteLoginLinkInput = {
1985
2015
  /** The one-time token from the magic-link URL. */
@@ -4919,6 +4949,81 @@ export type GroupRole = {
4919
4949
  /** Role display name (unique within the group). */
4920
4950
  roleName: Scalars['String']['output'];
4921
4951
  };
4952
+ /** A third-party game hosted on Crowdy Games (2026-09-13). Reached at launchUrl -- https://<games host>/<slug>/, a first-party shell page -- while its bundle executes on contentOrigin, https://<slug>.<content host>, an origin of its own. One row per app; the slug is global on the tier. */
4953
+ export type HostedGame = {
4954
+ __typename?: 'HostedGame';
4955
+ /** The app this slug serves. */
4956
+ appId: Scalars['BigInt']['output'];
4957
+ /** https://<slug>.<content host> -- the origin the game bundle runs on. The shell frames this; it is also registered as the app redirect URI so the API answers its CORS. Empty for a TAKEN_DOWN game: its objects were removed from the edge and the origin is not advertised. */
4958
+ contentOrigin: Scalars['String']['output'];
4959
+ createdAt: Scalars['DateTime']['output'];
4960
+ /** The publish currently serving, if any. */
4961
+ currentPublishId: Maybe<Scalars['BigInt']['output']>;
4962
+ /** https://<games host>/<slug>/ -- the public URL players use; the first-party shell; the redirect URI hosted sign-in returns to. */
4963
+ launchUrl: Scalars['String']['output'];
4964
+ /** Listed in the Overworld lobby and the management UI Games page. Operator-controlled (setHostedGameListing); publishing is self-serve, being listed is not. */
4965
+ listed: Scalars['Boolean']['output'];
4966
+ /** The app display name. */
4967
+ name: Scalars['String']['output'];
4968
+ /** The owning organization. */
4969
+ orgId: Scalars['BigInt']['output'];
4970
+ /** The owning organization name, for the shell chrome. */
4971
+ orgName: Maybe<Scalars['String']['output']>;
4972
+ /** The owning organization slug. */
4973
+ orgSlug: Maybe<Scalars['String']['output']>;
4974
+ /** When the current publish went live. */
4975
+ publishedAt: Maybe<Scalars['DateTime']['output']>;
4976
+ /** The hosting slug: the path on the games host and the host label on the content domain. A DNS label (lower-case letters, digits, hyphens; 1-63 chars). */
4977
+ slug: Scalars['String']['output'];
4978
+ status: HostedGameStatus;
4979
+ updatedAt: Scalars['DateTime']['output'];
4980
+ };
4981
+ /** One publish of a hosted game: the manifest the developer declared and what became of it. */
4982
+ export type HostedGamePublish = {
4983
+ __typename?: 'HostedGamePublish';
4984
+ appId: Scalars['BigInt']['output'];
4985
+ completedAt: Maybe<Scalars['DateTime']['output']>;
4986
+ createdAt: Scalars['DateTime']['output'];
4987
+ failureReason: Maybe<Scalars['String']['output']>;
4988
+ fileCount: Scalars['Int']['output'];
4989
+ publishId: Scalars['BigInt']['output'];
4990
+ slug: Scalars['String']['output'];
4991
+ state: HostedGamePublishState;
4992
+ totalBytes: Scalars['BigInt']['output'];
4993
+ /** Who published. */
4994
+ userId: Scalars['BigInt']['output'];
4995
+ };
4996
+ /** Lifecycle of one publish. STAGING: upload URLs issued, objects arriving. LIVE: promoted and serving. SUPERSEDED: a later publish went live. FAILED: completion refused. ABANDONED: the developer gave up (abandonGamePublish). */
4997
+ export declare enum HostedGamePublishState {
4998
+ Abandoned = "ABANDONED",
4999
+ Failed = "FAILED",
5000
+ Live = "LIVE",
5001
+ Staging = "STAGING",
5002
+ Superseded = "SUPERSEDED"
5003
+ }
5004
+ /** Whether a hosted game is served. LIVE: served at its launchUrl. DISABLED: switched off by its developer (setHostedGameEnabled). TAKEN_DOWN: removed by an operator; the developer cannot publish or re-enable until an operator restores it. */
5005
+ export declare enum HostedGameStatus {
5006
+ Disabled = "DISABLED",
5007
+ Live = "LIVE",
5008
+ TakenDown = "TAKEN_DOWN"
5009
+ }
5010
+ /** How to upload one file of a publish: PUT the file bytes to url with exactly these headers. */
5011
+ export type HostedGameUpload = {
5012
+ __typename?: 'HostedGameUpload';
5013
+ /** Headers the PUT must carry exactly (content type, SHA-256 checksum, staging tag, cache-control). S3 refuses a body whose digest differs. */
5014
+ headers: Array<HostedGameUploadHeader>;
5015
+ /** Always PUT. */
5016
+ method: Scalars['String']['output'];
5017
+ /** The manifest path this URL is for. */
5018
+ path: Scalars['String']['output'];
5019
+ /** Presigned S3 URL; valid until BeginGamePublishResult.expiresAt. */
5020
+ url: Scalars['String']['output'];
5021
+ };
5022
+ export type HostedGameUploadHeader = {
5023
+ __typename?: 'HostedGameUploadHeader';
5024
+ name: Scalars['String']['output'];
5025
+ value: Scalars['String']['output'];
5026
+ };
4922
5027
  /** Copy a private library revision or immutable published common version into a project by value. */
4923
5028
  export type ImportCrowdyStudioProjectFileInput = {
4924
5029
  /** App tenant shared by the project and import source. */
@@ -5035,6 +5140,8 @@ export type MintAppTokenInput = {
5035
5140
  };
5036
5141
  export type Mutation = {
5037
5142
  __typename?: 'Mutation';
5143
+ /** Give up a STAGING publish and clear its staged objects. Requires manage_apps and a SESSION token. */
5144
+ abandonGamePublish: HostedGamePublish;
5038
5145
  /** Acquire a free listing: writes the entitlement row. Paid listings (price_cents > 0 or a non-free acquisition mode) are refused with FEATURE_DISABLED. Idempotent per (listing, caller). Allowed in any admission mode; in allow_list apps an unadmitted acquisition holds until the listing/author/org is admitted, at which point installPlayerCode proceeds. */
5039
5146
  acquirePlayerCode: PlayerCodeAcquisition;
5040
5147
  /** Application liveness heartbeat for the authenticated user's existing actor rows in an app. Refreshes actors.updated_at so the user stays host-eligible, then returns the freshly-elected host so a client can fold its poll and heartbeat into one round-trip. This is not proof of a live Buddy session and does not refresh the separate Buddy presence lease used by security-sensitive artifact/compute occupancy gates. */
@@ -5055,6 +5162,8 @@ export type Mutation = {
5055
5162
  assignGroupToGrid: Array<GridGroupGrant>;
5056
5163
  /** Record the user's consent for an (untrusted) app to receive app-scoped tokens via the portal. Called from the Overworld consent screen before createPortalAuthorizationCode. Idempotent. Requires a SESSION token. */
5057
5164
  authorizeApp: AppAuthorizationGrant;
5165
+ /** Declare a publish: the full manifest of the built bundle (path, size, SHA-256 per file; index.html at the root). Validates it as a whole (HOSTED_MANIFEST_INVALID names every problem), records a STAGING publish, and returns one presigned PUT per file. Upload every file with exactly the returned headers, then call completeGamePublish. Rate-limited per app. Requires manage_apps and a SESSION token. */
5166
+ beginGamePublish: BeginGamePublishResult;
5058
5167
  /** Begin vaulting a card on the caller's player wallet (P4b): returns a Stripe SetupIntent client secret + publishable key for the browser to confirm. On success the card is saved for wallet auto-recharge and rent auto-renew. Closes the P2 gap where players had no card-setup path. */
5059
5168
  beginPlayerCardSetup: PlayerCardSetup;
5060
5169
  /** DESTRUCTIVE. Cancels an app's paid shared-environment subscription. The app loses its paid shared slot (typically at currentPeriodEnd) and may be denied runtime once the period lapses unless a free slot covers it. Returns the updated subscription. Requires the 'manage_billing' permission on the app's org. */
@@ -5065,12 +5174,16 @@ export type Mutation = {
5065
5174
  changePassword: Scalars['Boolean']['output'];
5066
5175
  /** Self-service: the authenticated caller claims access to an app via its free, open-by-default tier. Requires authentication only (no org membership needed). ENTITLEMENT CHANGE: grants the free default tier as a 'system' grant and notifies the game API. Idempotent: returns the existing row if already granted, and never overrides a prior revoke. Errors if the app has no free default tier or is archived. */
5067
5176
  claimFreeAppAccess: AppUserAccess;
5177
+ /** 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. */
5178
+ claimGameHosting: HostedGame;
5068
5179
  /** Claim one currently unclaimed chunk as a new player-owned grid. Requires an ordinary app-scoped player token and active app access, but never manage_apps. The app's policy must be SELF_CLAIM. The server validates the app's grid assignment and peer-overlap rules, then atomically creates a one-chunk grid, assigns current-user ownership, grants access/update_voxel_data/use_voice_chat/teleport plus the player-code keys and use_video_chat where the caller's tier already carries them, and materializes the effective ACL. Conflicts and policy denials throw GraphQL errors; no partial grid, ownership, or grant rows remain. */
5069
5180
  claimGridChunk: ChunkClaimResult;
5070
5181
  /** Claim grid ownership under the app's claim policy (D4, server-authorized — no client manage_apps involved). SELF_CLAIM assigns ownership immediately; APPROVAL creates a pending request for designated approvers; INVITE requires a standing invite (consumed on use); MARKETPLACE_ONLY refuses. The grid must exist and have no current owner; game rules gate who may attempt a claim. */
5071
5182
  claimGridOwnership: GridClaimResult;
5072
5183
  /** Remove an app's compute allowance, returning it to observation against the platform reference allowance. Returns true if an allowance was removed. Requires app-admin ('manage_apps'). */
5073
5184
  clearAppComputeBudget: Scalars['Boolean']['output'];
5185
+ /** Finish a publish: verifies every staged object against the manifest (HOSTED_PUBLISH_INCOMPLETE names what is missing), promotes the staging area to the live prefix, removes objects the previous publish left, records the publish LIVE and invalidates the content CDN. Requires manage_apps and a SESSION token. */
5186
+ completeGamePublish: CompleteGamePublishResult;
5074
5187
  /** Complete a magic-link sign-in with the emailed token; returns a session AuthResponse. Public (the token authorizes the call); throws if invalid/expired/used. First-party origins only (HOSTED_SIGN_IN_REQUIRED otherwise). */
5075
5188
  completeLoginLink: AuthResponse;
5076
5189
  /** Delete a compute module and (via cascade) its versions, triggers, and lease. Run history is retained for auditing. Returns true when a module was deleted. Requires the org 'manage_compute' permission. */
@@ -5419,6 +5532,10 @@ export type Mutation = {
5419
5532
  setEarlyAccessOverride: User;
5420
5533
  /** Replace the whitelist of permission keys allowed on a grid (writes the `grid_permission_limits` input table), then recompute the grid's materialized effective ACL so any keys no longer on the whitelist are dropped for all users. Pass an empty array to remove all limits. Requires app-admin ('manage_apps'). DESTRUCTIVE: narrowing the whitelist can strip effective permissions from existing users on the grid. */
5421
5534
  setGridPermissionLimits: GridPermissionLimits;
5535
+ /** Developer switch: DISABLED (the shell says "disabled by its developer") or back to LIVE. A TAKEN_DOWN game is refused (HOSTED_GAME_TAKEN_DOWN). Requires manage_apps and a SESSION token. */
5536
+ setHostedGameEnabled: HostedGame;
5537
+ /** OPERATOR: list or unlist a hosted game in the lobby and the management UI. */
5538
+ setHostedGameListing: HostedGame;
5422
5539
  /** Adds a password to the signed-in account when it does not have one yet — for an account created by magic link or a social provider, which previously had no in-product way to add password sign-in. Requires a valid session token; the session is the proof of account control, so the password is usable immediately and no email confirmation is needed. Refuses with extensions.code PASSWORD_ALREADY_SET (409) when a password is already set — use changePassword, which verifies the current one, or the reset flow if it is forgotten. (Before v1.60.0 that refusal reached clients as INTERNAL_SERVER_ERROR while this description said CONFLICT, so a client could only recognise it by the message text.) A security notification is emailed to the account address. Existing sessions are not revoked. */
5423
5540
  setInitialPassword: Scalars['Boolean']['output'];
5424
5541
  /** Super-admin only. Flip users.is_operator to grant or revoke control-plane / operator access. */
@@ -5451,6 +5568,8 @@ export type Mutation = {
5451
5568
  socialLoginComplete: AuthResponse;
5452
5569
  /** Begin a federated (social) sign-in: returns an authorizeUrl to redirect the user to and an opaque state to round-trip back to socialLoginComplete. Public; first-party origins only (HOSTED_SIGN_IN_REQUIRED otherwise). */
5453
5570
  socialLoginStart: SocialLoginStart;
5571
+ /** OPERATOR: take a hosted game down (status TAKEN_DOWN, unlisted; the shell refuses it and the developer can neither publish nor re-enable) or restore it to LIVE with takenDown=false. */
5572
+ takeDownHostedGame: HostedGame;
5454
5573
  /** Checks whether the authenticated user is allowed to teleport an actor to a destination within an app and returns the authorization result. This is an authorization check only — it does NOT itself move the actor; the UDP runtime performs the actual movement. Requires a valid bearer game token plus the app-level "teleport" runtime permission. Returns success=false with errorCode INVALID_APP_ID (non-positive appId), UNAUTHORIZED (reserved sentinel destination -6,-6,-6 or missing permission), or success=true / NO_ERROR when allowed. */
5455
5574
  teleportRequest: TeleportResponse;
5456
5575
  /** Transfer grid title to another user. The current user owner or an app admin may transfer. DESTRUCTIVE/SECURITY-SENSITIVE: atomically disables every player module on the grid pending new-owner consent, wipes module state, removes the old owner direct grid grants, and closes the old title row. The new owner receives no implicit permissions. */
@@ -5508,6 +5627,10 @@ export type Mutation = {
5508
5627
  /** Records (upserts) a single voxel edit in the voxel_updates log for one chunk and returns the resulting Voxel. WRITES world state; a background maintenance job later folds these edits into the chunk's packed grid. Requires a valid bearer token AND voxel-edit permission for the target region: the user must have active app access, the `update_voxel_data` tier permission, and (when grids cover the chunk) `update_voxel_data` on a covering grid. */
5509
5628
  updateVoxel: Voxel;
5510
5629
  };
5630
+ export type MutationAbandonGamePublishArgs = {
5631
+ publishId: Scalars['BigInt']['input'];
5632
+ slug: Scalars['String']['input'];
5633
+ };
5511
5634
  export type MutationAcquirePlayerCodeArgs = {
5512
5635
  appId: Scalars['BigInt']['input'];
5513
5636
  listingId: Scalars['String']['input'];
@@ -5543,6 +5666,9 @@ export type MutationAssignGroupToGridArgs = {
5543
5666
  export type MutationAuthorizeAppArgs = {
5544
5667
  input: AuthorizeAppInput;
5545
5668
  };
5669
+ export type MutationBeginGamePublishArgs = {
5670
+ input: BeginGamePublishInput;
5671
+ };
5546
5672
  export type MutationCancelSharedSubscriptionArgs = {
5547
5673
  appId: Scalars['BigInt']['input'];
5548
5674
  idempotencyKey?: InputMaybe<Scalars['String']['input']>;
@@ -5558,6 +5684,9 @@ export type MutationChangePasswordArgs = {
5558
5684
  export type MutationClaimFreeAppAccessArgs = {
5559
5685
  appId: Scalars['BigInt']['input'];
5560
5686
  };
5687
+ export type MutationClaimGameHostingArgs = {
5688
+ input: ClaimGameHostingInput;
5689
+ };
5561
5690
  export type MutationClaimGridChunkArgs = {
5562
5691
  appId: Scalars['BigInt']['input'];
5563
5692
  chunk: ChunkCoordinatesInput;
@@ -5569,6 +5698,10 @@ export type MutationClaimGridOwnershipArgs = {
5569
5698
  export type MutationClearAppComputeBudgetArgs = {
5570
5699
  appId: Scalars['BigInt']['input'];
5571
5700
  };
5701
+ export type MutationCompleteGamePublishArgs = {
5702
+ publishId: Scalars['BigInt']['input'];
5703
+ slug: Scalars['String']['input'];
5704
+ };
5572
5705
  export type MutationCompleteLoginLinkArgs = {
5573
5706
  input: CompleteLoginLinkInput;
5574
5707
  };
@@ -6170,6 +6303,12 @@ export type MutationSetEarlyAccessOverrideArgs = {
6170
6303
  export type MutationSetGridPermissionLimitsArgs = {
6171
6304
  input: SetGridPermissionLimitsInput;
6172
6305
  };
6306
+ export type MutationSetHostedGameEnabledArgs = {
6307
+ input: SetHostedGameEnabledInput;
6308
+ };
6309
+ export type MutationSetHostedGameListingArgs = {
6310
+ input: SetHostedGameListingInput;
6311
+ };
6173
6312
  export type MutationSetInitialPasswordArgs = {
6174
6313
  newPassword: Scalars['String']['input'];
6175
6314
  };
@@ -6233,6 +6372,10 @@ export type MutationSocialLoginCompleteArgs = {
6233
6372
  export type MutationSocialLoginStartArgs = {
6234
6373
  input: SocialLoginStartInput;
6235
6374
  };
6375
+ export type MutationTakeDownHostedGameArgs = {
6376
+ slug: Scalars['String']['input'];
6377
+ takenDown?: InputMaybe<Scalars['Boolean']['input']>;
6378
+ };
6236
6379
  export type MutationTeleportRequestArgs = {
6237
6380
  input: TeleportRequestInput;
6238
6381
  };
@@ -7510,6 +7653,15 @@ export type PublishCrowdyStudioCommonFileInput = {
7510
7653
  /** Crowdy Studio-authored catalog title. */
7511
7654
  title: Scalars['String']['input'];
7512
7655
  };
7656
+ /** One file of a publish manifest. */
7657
+ export type PublishFileInput = {
7658
+ /** Relative path inside dist/, forward slashes. index.html must be present at the root. */
7659
+ path: Scalars['String']['input'];
7660
+ /** Lower-case hex SHA-256 of the bytes. S3 verifies the upload against it and completeGamePublish verifies the stored object. */
7661
+ sha256: Scalars['String']['input'];
7662
+ /** Size in bytes. */
7663
+ size: Scalars['Int']['input'];
7664
+ };
7513
7665
  export type PublishPlayerCodeInput = {
7514
7666
  /** App the listing belongs to. */
7515
7667
  appId: Scalars['BigInt']['input'];
@@ -7548,6 +7700,8 @@ export type Query = {
7548
7700
  actorsConnection: ActorsConnection;
7549
7701
  /** OPERATOR ONLY. The Crowdy Studio agent price list: every model card with its four per-million token prices and its lifecycle status. Separate from billingRateCard because agent pricing is per model rather than per metered dimension. Read-only. */
7550
7702
  agentRateCards: Array<AgentRateCardEntryType>;
7703
+ /** OPERATOR: every hosted game on the tier, whatever its status or listing. */
7704
+ allHostedGames: Array<HostedGame>;
7551
7705
  /** Convenience for UI: returns true when the authenticated caller is the currently elected host for the given app (same election as gameHost), otherwise false (including when no host is elected). Not authoritative for server-side mutations — use gameModelInvoke's is_host policy for that. Requires a valid bearer game token (same auth as gameHost). */
7552
7706
  amIGameHost: Scalars['Boolean']['output'];
7553
7707
  /** Fetch a single app by its numeric id. Requires authentication (any signed-in user); does NOT enforce org/app permissions, so it can read apps the caller does not own, of any visibility/status. Returns null if the id does not exist. Prefer appBySlug for slug-based marketplace lookups. */
@@ -7797,6 +7951,12 @@ export type Query = {
7797
7951
  gridPermissionLimits: GridPermissionLimits;
7798
7952
  /** Read one user's effective (materialized) runtime permission keys on a grid — the flattened union of direct and group-derived grants that Buddy enforces, with expired grants excluded. Use this to see what a user can actually do. To inspect the underlying inputs instead, use `gridGroupGrants` (group grants) and `gridPermissionLimits` (the whitelist). Requires app-admin ('manage_apps'). */
7799
7953
  gridUserPermissions: GridUserPermissions;
7954
+ /** 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. */
7955
+ hostedGame: Maybe<HostedGame>;
7956
+ /** Publish history for a hosted game, newest first. Requires manage_apps on the app and a SESSION token. */
7957
+ hostedGamePublishes: Array<HostedGamePublish>;
7958
+ /** The LIVE and LISTED hosted third-party games, for the Overworld lobby and the marketplace. PUBLIC. Empty when the tier does not host third-party games. Operators see every game with allHostedGames. */
7959
+ hostedGames: Array<HostedGame>;
7800
7960
  /** Lists recorded voxel edits for all chunks within a cubic (Chebyshev) radius of a center chunk, grouped per chunk and ordered by increasing distance, paginated over chunks. Requires a valid bearer token; app-scoped tokens are limited to their own app. Read-only. */
7801
7961
  listVoxelUpdatesByDistance: VoxelUpdatesByDistanceResponse;
7802
7962
  /** Lists recorded voxel edits for a single chunk (optionally only those at/after `since`), newest first. Requires a valid bearer token; app-scoped tokens are limited to their own app. Read-only. */
@@ -7826,6 +7986,8 @@ export type Query = {
7826
7986
  * @deprecated Legacy donation/property-token data; these products are no longer purchasable. Retained for historical records.
7827
7987
  */
7828
7988
  myDonationData: UserDonationData;
7989
+ /** The hosted games the caller can manage (manage_apps on the app). Requires a SESSION token. */
7990
+ myHostedGames: Array<HostedGame>;
7829
7991
  /** The signed-in user's linked sign-in identities. */
7830
7992
  myIdentities: Array<UserIdentity>;
7831
7993
  /** Lists the authenticated caller's organization memberships. Each entry bundles the org, the caller's effective permission keys, and assigned roles. Requires a valid session token. */
@@ -8439,6 +8601,13 @@ export type QueryGridUserPermissionsArgs = {
8439
8601
  gridId: Scalars['BigInt']['input'];
8440
8602
  userId: Scalars['BigInt']['input'];
8441
8603
  };
8604
+ export type QueryHostedGameArgs = {
8605
+ slug: Scalars['String']['input'];
8606
+ };
8607
+ export type QueryHostedGamePublishesArgs = {
8608
+ limit?: InputMaybe<Scalars['Int']['input']>;
8609
+ slug: Scalars['String']['input'];
8610
+ };
8442
8611
  export type QueryListVoxelUpdatesByDistanceArgs = {
8443
8612
  input: ListVoxelUpdatesByDistanceInput;
8444
8613
  };
@@ -9480,6 +9649,16 @@ export type SetGridPermissionLimitsInput = {
9480
9649
  /** The whitelist of permission keys allowed on this grid. Empty array removes all limits (every active grid permission becomes grantable again). Each key must be a known runtime permission key, unique, and at most 64 chars. */
9481
9650
  permissionKeys: Array<Scalars['String']['input']>;
9482
9651
  };
9652
+ /** Developer: switch a hosted game off (DISABLED) or back on (LIVE). A TAKEN_DOWN game cannot be re-enabled here. */
9653
+ export type SetHostedGameEnabledInput = {
9654
+ enabled: Scalars['Boolean']['input'];
9655
+ slug: Scalars['String']['input'];
9656
+ };
9657
+ /** Operator: list or unlist a hosted game. */
9658
+ export type SetHostedGameListingInput = {
9659
+ listed: Scalars['Boolean']['input'];
9660
+ slug: Scalars['String']['input'];
9661
+ };
9483
9662
  /** Replace a member's roles in a group (the listed roles become their full set). */
9484
9663
  export type SetMemberRolesInput = {
9485
9664
  /** The group (team/channel) id. */
@@ -15322,6 +15501,325 @@ export type ActorHeartbeatMutation = {
15322
15501
  earliestActorJoinedAt: string;
15323
15502
  } | null;
15324
15503
  };
15504
+ export type HostedGameFieldsFragment = {
15505
+ __typename?: 'HostedGame';
15506
+ slug: string;
15507
+ appId: string;
15508
+ orgId: string;
15509
+ name: string;
15510
+ orgSlug: string | null;
15511
+ orgName: string | null;
15512
+ status: HostedGameStatus;
15513
+ listed: boolean;
15514
+ contentOrigin: string;
15515
+ launchUrl: string;
15516
+ currentPublishId: string | null;
15517
+ publishedAt: string | null;
15518
+ createdAt: string;
15519
+ updatedAt: string;
15520
+ };
15521
+ export type HostedGamePublishFieldsFragment = {
15522
+ __typename?: 'HostedGamePublish';
15523
+ publishId: string;
15524
+ appId: string;
15525
+ slug: string;
15526
+ userId: string;
15527
+ state: HostedGamePublishState;
15528
+ fileCount: number;
15529
+ totalBytes: string;
15530
+ failureReason: string | null;
15531
+ createdAt: string;
15532
+ completedAt: string | null;
15533
+ };
15534
+ export type HostedGameQueryVariables = Exact<{
15535
+ slug: Scalars['String']['input'];
15536
+ }>;
15537
+ export type HostedGameQuery = {
15538
+ __typename?: 'Query';
15539
+ hostedGame: {
15540
+ __typename?: 'HostedGame';
15541
+ slug: string;
15542
+ appId: string;
15543
+ orgId: string;
15544
+ name: string;
15545
+ orgSlug: string | null;
15546
+ orgName: string | null;
15547
+ status: HostedGameStatus;
15548
+ listed: boolean;
15549
+ contentOrigin: string;
15550
+ launchUrl: string;
15551
+ currentPublishId: string | null;
15552
+ publishedAt: string | null;
15553
+ createdAt: string;
15554
+ updatedAt: string;
15555
+ } | null;
15556
+ };
15557
+ export type HostedGamesQueryVariables = Exact<{
15558
+ [key: string]: never;
15559
+ }>;
15560
+ export type HostedGamesQuery = {
15561
+ __typename?: 'Query';
15562
+ hostedGames: Array<{
15563
+ __typename?: 'HostedGame';
15564
+ slug: string;
15565
+ appId: string;
15566
+ orgId: string;
15567
+ name: string;
15568
+ orgSlug: string | null;
15569
+ orgName: string | null;
15570
+ status: HostedGameStatus;
15571
+ listed: boolean;
15572
+ contentOrigin: string;
15573
+ launchUrl: string;
15574
+ currentPublishId: string | null;
15575
+ publishedAt: string | null;
15576
+ createdAt: string;
15577
+ updatedAt: string;
15578
+ }>;
15579
+ };
15580
+ export type AllHostedGamesQueryVariables = Exact<{
15581
+ [key: string]: never;
15582
+ }>;
15583
+ export type AllHostedGamesQuery = {
15584
+ __typename?: 'Query';
15585
+ allHostedGames: Array<{
15586
+ __typename?: 'HostedGame';
15587
+ slug: string;
15588
+ appId: string;
15589
+ orgId: string;
15590
+ name: string;
15591
+ orgSlug: string | null;
15592
+ orgName: string | null;
15593
+ status: HostedGameStatus;
15594
+ listed: boolean;
15595
+ contentOrigin: string;
15596
+ launchUrl: string;
15597
+ currentPublishId: string | null;
15598
+ publishedAt: string | null;
15599
+ createdAt: string;
15600
+ updatedAt: string;
15601
+ }>;
15602
+ };
15603
+ export type MyHostedGamesQueryVariables = Exact<{
15604
+ [key: string]: never;
15605
+ }>;
15606
+ export type MyHostedGamesQuery = {
15607
+ __typename?: 'Query';
15608
+ myHostedGames: Array<{
15609
+ __typename?: 'HostedGame';
15610
+ slug: string;
15611
+ appId: string;
15612
+ orgId: string;
15613
+ name: string;
15614
+ orgSlug: string | null;
15615
+ orgName: string | null;
15616
+ status: HostedGameStatus;
15617
+ listed: boolean;
15618
+ contentOrigin: string;
15619
+ launchUrl: string;
15620
+ currentPublishId: string | null;
15621
+ publishedAt: string | null;
15622
+ createdAt: string;
15623
+ updatedAt: string;
15624
+ }>;
15625
+ };
15626
+ export type HostedGamePublishesQueryVariables = Exact<{
15627
+ slug: Scalars['String']['input'];
15628
+ limit?: InputMaybe<Scalars['Int']['input']>;
15629
+ }>;
15630
+ export type HostedGamePublishesQuery = {
15631
+ __typename?: 'Query';
15632
+ hostedGamePublishes: Array<{
15633
+ __typename?: 'HostedGamePublish';
15634
+ publishId: string;
15635
+ appId: string;
15636
+ slug: string;
15637
+ userId: string;
15638
+ state: HostedGamePublishState;
15639
+ fileCount: number;
15640
+ totalBytes: string;
15641
+ failureReason: string | null;
15642
+ createdAt: string;
15643
+ completedAt: string | null;
15644
+ }>;
15645
+ };
15646
+ export type ClaimGameHostingMutationVariables = Exact<{
15647
+ input: ClaimGameHostingInput;
15648
+ }>;
15649
+ export type ClaimGameHostingMutation = {
15650
+ __typename?: 'Mutation';
15651
+ claimGameHosting: {
15652
+ __typename?: 'HostedGame';
15653
+ slug: string;
15654
+ appId: string;
15655
+ orgId: string;
15656
+ name: string;
15657
+ orgSlug: string | null;
15658
+ orgName: string | null;
15659
+ status: HostedGameStatus;
15660
+ listed: boolean;
15661
+ contentOrigin: string;
15662
+ launchUrl: string;
15663
+ currentPublishId: string | null;
15664
+ publishedAt: string | null;
15665
+ createdAt: string;
15666
+ updatedAt: string;
15667
+ };
15668
+ };
15669
+ export type BeginGamePublishMutationVariables = Exact<{
15670
+ input: BeginGamePublishInput;
15671
+ }>;
15672
+ export type BeginGamePublishMutation = {
15673
+ __typename?: 'Mutation';
15674
+ beginGamePublish: {
15675
+ __typename?: 'BeginGamePublishResult';
15676
+ publishId: string;
15677
+ slug: string;
15678
+ expiresAt: string;
15679
+ uploads: Array<{
15680
+ __typename?: 'HostedGameUpload';
15681
+ path: string;
15682
+ url: string;
15683
+ method: string;
15684
+ headers: Array<{
15685
+ __typename?: 'HostedGameUploadHeader';
15686
+ name: string;
15687
+ value: string;
15688
+ }>;
15689
+ }>;
15690
+ };
15691
+ };
15692
+ export type CompleteGamePublishMutationVariables = Exact<{
15693
+ slug: Scalars['String']['input'];
15694
+ publishId: Scalars['BigInt']['input'];
15695
+ }>;
15696
+ export type CompleteGamePublishMutation = {
15697
+ __typename?: 'Mutation';
15698
+ completeGamePublish: {
15699
+ __typename?: 'CompleteGamePublishResult';
15700
+ invalidationId: string | null;
15701
+ game: {
15702
+ __typename?: 'HostedGame';
15703
+ slug: string;
15704
+ appId: string;
15705
+ orgId: string;
15706
+ name: string;
15707
+ orgSlug: string | null;
15708
+ orgName: string | null;
15709
+ status: HostedGameStatus;
15710
+ listed: boolean;
15711
+ contentOrigin: string;
15712
+ launchUrl: string;
15713
+ currentPublishId: string | null;
15714
+ publishedAt: string | null;
15715
+ createdAt: string;
15716
+ updatedAt: string;
15717
+ };
15718
+ publish: {
15719
+ __typename?: 'HostedGamePublish';
15720
+ publishId: string;
15721
+ appId: string;
15722
+ slug: string;
15723
+ userId: string;
15724
+ state: HostedGamePublishState;
15725
+ fileCount: number;
15726
+ totalBytes: string;
15727
+ failureReason: string | null;
15728
+ createdAt: string;
15729
+ completedAt: string | null;
15730
+ };
15731
+ };
15732
+ };
15733
+ export type AbandonGamePublishMutationVariables = Exact<{
15734
+ slug: Scalars['String']['input'];
15735
+ publishId: Scalars['BigInt']['input'];
15736
+ }>;
15737
+ export type AbandonGamePublishMutation = {
15738
+ __typename?: 'Mutation';
15739
+ abandonGamePublish: {
15740
+ __typename?: 'HostedGamePublish';
15741
+ publishId: string;
15742
+ appId: string;
15743
+ slug: string;
15744
+ userId: string;
15745
+ state: HostedGamePublishState;
15746
+ fileCount: number;
15747
+ totalBytes: string;
15748
+ failureReason: string | null;
15749
+ createdAt: string;
15750
+ completedAt: string | null;
15751
+ };
15752
+ };
15753
+ export type SetHostedGameEnabledMutationVariables = Exact<{
15754
+ input: SetHostedGameEnabledInput;
15755
+ }>;
15756
+ export type SetHostedGameEnabledMutation = {
15757
+ __typename?: 'Mutation';
15758
+ setHostedGameEnabled: {
15759
+ __typename?: 'HostedGame';
15760
+ slug: string;
15761
+ appId: string;
15762
+ orgId: string;
15763
+ name: string;
15764
+ orgSlug: string | null;
15765
+ orgName: string | null;
15766
+ status: HostedGameStatus;
15767
+ listed: boolean;
15768
+ contentOrigin: string;
15769
+ launchUrl: string;
15770
+ currentPublishId: string | null;
15771
+ publishedAt: string | null;
15772
+ createdAt: string;
15773
+ updatedAt: string;
15774
+ };
15775
+ };
15776
+ export type SetHostedGameListingMutationVariables = Exact<{
15777
+ input: SetHostedGameListingInput;
15778
+ }>;
15779
+ export type SetHostedGameListingMutation = {
15780
+ __typename?: 'Mutation';
15781
+ setHostedGameListing: {
15782
+ __typename?: 'HostedGame';
15783
+ slug: string;
15784
+ appId: string;
15785
+ orgId: string;
15786
+ name: string;
15787
+ orgSlug: string | null;
15788
+ orgName: string | null;
15789
+ status: HostedGameStatus;
15790
+ listed: boolean;
15791
+ contentOrigin: string;
15792
+ launchUrl: string;
15793
+ currentPublishId: string | null;
15794
+ publishedAt: string | null;
15795
+ createdAt: string;
15796
+ updatedAt: string;
15797
+ };
15798
+ };
15799
+ export type TakeDownHostedGameMutationVariables = Exact<{
15800
+ slug: Scalars['String']['input'];
15801
+ takenDown?: InputMaybe<Scalars['Boolean']['input']>;
15802
+ }>;
15803
+ export type TakeDownHostedGameMutation = {
15804
+ __typename?: 'Mutation';
15805
+ takeDownHostedGame: {
15806
+ __typename?: 'HostedGame';
15807
+ slug: string;
15808
+ appId: string;
15809
+ orgId: string;
15810
+ name: string;
15811
+ orgSlug: string | null;
15812
+ orgName: string | null;
15813
+ status: HostedGameStatus;
15814
+ listed: boolean;
15815
+ contentOrigin: string;
15816
+ launchUrl: string;
15817
+ currentPublishId: string | null;
15818
+ publishedAt: string | null;
15819
+ createdAt: string;
15820
+ updatedAt: string;
15821
+ };
15822
+ };
15325
15823
  export type PlayerCodeListingFieldsFragment = {
15326
15824
  __typename?: 'PlayerCodeListing';
15327
15825
  listingId: string;
@@ -18851,6 +19349,8 @@ export declare const GmContainerFieldsFragmentDoc: DocumentNode<GmContainerField
18851
19349
  export declare const GmInvokeResultFieldsFragmentDoc: DocumentNode<GmInvokeResultFieldsFragment, unknown>;
18852
19350
  export declare const GmFunctionFieldsFragmentDoc: DocumentNode<GmFunctionFieldsFragment, unknown>;
18853
19351
  export declare const GmPropertyDefFieldsFragmentDoc: DocumentNode<GmPropertyDefFieldsFragment, unknown>;
19352
+ export declare const HostedGameFieldsFragmentDoc: DocumentNode<HostedGameFieldsFragment, unknown>;
19353
+ export declare const HostedGamePublishFieldsFragmentDoc: DocumentNode<HostedGamePublishFieldsFragment, unknown>;
18854
19354
  export declare const PlayerCodeListingFieldsFragmentDoc: DocumentNode<PlayerCodeListingFieldsFragment, unknown>;
18855
19355
  export declare const PlayerCodeListingVersionFieldsFragmentDoc: DocumentNode<PlayerCodeListingVersionFieldsFragment, unknown>;
18856
19356
  export declare const PlayerCodeAcquisitionFieldsFragmentDoc: DocumentNode<PlayerCodeAcquisitionFieldsFragment, unknown>;
@@ -19053,6 +19553,18 @@ export declare const GameModelRevokeTierFeatureDocument: DocumentNode<GameModelR
19053
19553
  export declare const GameHostDocument: DocumentNode<GameHostQuery, GameHostQueryVariables>;
19054
19554
  export declare const AmIGameHostDocument: DocumentNode<AmIGameHostQuery, AmIGameHostQueryVariables>;
19055
19555
  export declare const ActorHeartbeatDocument: DocumentNode<ActorHeartbeatMutation, ActorHeartbeatMutationVariables>;
19556
+ export declare const HostedGameDocument: DocumentNode<HostedGameQuery, HostedGameQueryVariables>;
19557
+ export declare const HostedGamesDocument: DocumentNode<HostedGamesQuery, HostedGamesQueryVariables>;
19558
+ export declare const AllHostedGamesDocument: DocumentNode<AllHostedGamesQuery, AllHostedGamesQueryVariables>;
19559
+ export declare const MyHostedGamesDocument: DocumentNode<MyHostedGamesQuery, MyHostedGamesQueryVariables>;
19560
+ export declare const HostedGamePublishesDocument: DocumentNode<HostedGamePublishesQuery, HostedGamePublishesQueryVariables>;
19561
+ export declare const ClaimGameHostingDocument: DocumentNode<ClaimGameHostingMutation, ClaimGameHostingMutationVariables>;
19562
+ export declare const BeginGamePublishDocument: DocumentNode<BeginGamePublishMutation, BeginGamePublishMutationVariables>;
19563
+ export declare const CompleteGamePublishDocument: DocumentNode<CompleteGamePublishMutation, CompleteGamePublishMutationVariables>;
19564
+ export declare const AbandonGamePublishDocument: DocumentNode<AbandonGamePublishMutation, AbandonGamePublishMutationVariables>;
19565
+ export declare const SetHostedGameEnabledDocument: DocumentNode<SetHostedGameEnabledMutation, SetHostedGameEnabledMutationVariables>;
19566
+ export declare const SetHostedGameListingDocument: DocumentNode<SetHostedGameListingMutation, SetHostedGameListingMutationVariables>;
19567
+ export declare const TakeDownHostedGameDocument: DocumentNode<TakeDownHostedGameMutation, TakeDownHostedGameMutationVariables>;
19056
19568
  export declare const MarketplaceListingsDocument: DocumentNode<MarketplaceListingsQuery, MarketplaceListingsQueryVariables>;
19057
19569
  export declare const MarketplaceListingVersionsDocument: DocumentNode<MarketplaceListingVersionsQuery, MarketplaceListingVersionsQueryVariables>;
19058
19570
  export declare const MarketplaceMyAcquisitionsDocument: DocumentNode<MarketplaceMyAcquisitionsQuery, MarketplaceMyAcquisitionsQueryVariables>;