@crowdedkingdoms/crowdyjs 17.3.0-dev.1 → 17.4.0-test.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.
@@ -2353,14 +2353,24 @@ export type CreatePortalAuthorizationCodeInput = {
2353
2353
  };
2354
2354
  /** Create a runtime session. */
2355
2355
  export type CreateSessionInput = {
2356
+ /** Initial admission: 'open' (default) or 'locked' (only the initial participants may join/reconnect until the host unlocks). */
2357
+ admission?: InputMaybe<Scalars['String']['input']>;
2356
2358
  /** The app (tenant) the session belongs to. */
2357
2359
  appId: Scalars['BigInt']['input'];
2360
+ /** Seconds a session may sit with nobody joined before the server ends it as abandoned. Omit for the platform default; 0 disables the timeout for this session. */
2361
+ emptyTimeoutSec?: InputMaybe<Scalars['Int']['input']>;
2362
+ /** Optional idempotency key. Replaying with the same key and identical input returns the first session instead of creating a second; the same key with different input returns IDEMPOTENCY_CONFLICT. Keys expire after 24h. */
2363
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
2364
+ /** Seat cap: the most participants that may be joined at once. Omit for unbounded. Initial participants count against it. */
2365
+ maxParticipants?: InputMaybe<Scalars['Int']['input']>;
2358
2366
  /** JSON object of session metadata. */
2359
2367
  metadataJson?: InputMaybe<Scalars['String']['input']>;
2360
2368
  /** Optional session name. */
2361
2369
  name?: InputMaybe<Scalars['String']['input']>;
2362
2370
  /** Initial participants besides the creator. */
2363
2371
  participantUserIds?: InputMaybe<Array<Scalars['BigInt']['input']>>;
2372
+ /** How the roster is judged: 'actor' (default) expires a joined participant with no fresh Buddy actor in the app after the join grace window; 'none' never expires anybody. Use 'none' for turn-based play that talks GraphQL and channel pings and never replicates an actor (kit.matches does), where the roster's only exits are leave and end. */
2373
+ presence?: InputMaybe<Scalars['String']['input']>;
2364
2374
  };
2365
2375
  /** Create a team in an app. */
2366
2376
  export type CreateTeamInput = {
@@ -3539,6 +3549,19 @@ export type EmailStatusRecord = {
3539
3549
  /** valid | bounced | complained. */
3540
3550
  status: Scalars['String']['output'];
3541
3551
  };
3552
+ /** End a session. Host or app admin ('manage_apps'). */
3553
+ export type EndSessionInput = {
3554
+ /** The app (tenant) that owns the session. */
3555
+ appId: Scalars['BigInt']['input'];
3556
+ /** Optional: the hostTerm you last read. Refused with SESSION_HOST_TERM_STALE if the host has changed since. */
3557
+ expectedHostTerm?: InputMaybe<Scalars['Int']['input']>;
3558
+ /** Optional idempotency key (24h). */
3559
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
3560
+ /** Terminal status: 'completed' (default; the match ran its course) or 'abandoned'. Either way every joined participant is marked left (session_ended) and admission becomes closed. */
3561
+ reason?: InputMaybe<Scalars['String']['input']>;
3562
+ /** The session id to end. */
3563
+ sessionId: Scalars['String']['input'];
3564
+ };
3542
3565
  /** Compute units attributed to one engine over the query window. */
3543
3566
  export type EngineComputeUnits = {
3544
3567
  __typename?: 'EngineComputeUnits';
@@ -4541,31 +4564,109 @@ export type GmSeedResult = {
4541
4564
  /** A runtime session: an isolated instance scope (e.g. a match or room) for containers. */
4542
4565
  export type GmSession = {
4543
4566
  __typename?: 'GmSession';
4567
+ /** Who may still get in: 'open' (anyone the app admits), 'locked' (only a participant who already joined may reconnect), 'closed' (nobody; set automatically when the session ends). */
4568
+ admission: Scalars['String']['output'];
4544
4569
  /** The app (tenant) that owns the session. */
4545
4570
  appId: Scalars['BigInt']['output'];
4571
+ /** When the session was created. */
4572
+ createdAt: Scalars['DateTime']['output'];
4546
4573
  /** The user who created the session. */
4547
4574
  createdByUserId: Maybe<Scalars['BigInt']['output']>;
4548
4575
  /** The user whose turn it currently is (turn-based play), or null. */
4549
4576
  currentTurnUserId: Maybe<Scalars['BigInt']['output']>;
4577
+ /** Why it ended: 'completed' or 'abandoned' by the host/admin, 'empty_timeout' when the server ended a session nobody was in. */
4578
+ endReason: Maybe<Scalars['String']['output']>;
4579
+ /** When the session ended, or null while active. */
4580
+ endedAt: Maybe<Scalars['DateTime']['output']>;
4581
+ /** Increments on every host change. Send it as expectedHostTerm on host actions to be refused (SESSION_HOST_TERM_STALE) instead of acting on a host change you have not seen. */
4582
+ hostTerm: Scalars['Int']['output'];
4583
+ /** The current session host, or null while nobody is joined. The creator starts as host; when the host leaves or expires, the longest-joined present participant succeeds. */
4584
+ hostUserId: Maybe<Scalars['BigInt']['output']>;
4585
+ /** Seat cap: the most participants that may be joined at once. Null means unbounded. A participant reconnecting never counts against it twice. */
4586
+ maxParticipants: Maybe<Scalars['Int']['output']>;
4550
4587
  /** JSON object of developer metadata. */
4551
4588
  metadataJson: Scalars['String']['output'];
4552
4589
  /** Optional session name. */
4553
4590
  name: Maybe<Scalars['String']['output']>;
4591
+ /** How many participants are joined right now. */
4592
+ participantCount: Scalars['Int']['output'];
4593
+ /** How the roster is judged: 'actor' (default) expires a joined participant with no fresh Buddy actor in the app after the join grace window; 'none' never expires anybody -- for turn-based play that never replicates an actor -- so the roster's only exits are leave, end, and the empty timeout once everyone has left. */
4594
+ presence: Scalars['String']['output'];
4595
+ /** Monotonic change counter. Every event in gameModelSessionChanged carries the revision that produced it; gameModelSessionSnapshot returns the revision it describes. Compare as integers. */
4596
+ revision: Scalars['String']['output'];
4554
4597
  /** Unique session id. */
4555
4598
  sessionId: Scalars['String']['output'];
4556
4599
  /** Lifecycle status (e.g. active). */
4557
4600
  status: Scalars['String']['output'];
4558
4601
  };
4602
+ /** One session revision: what changed, in order. The payload names the subject (user id, host, admission, ...) as a JSON object. */
4603
+ export type GmSessionEvent = {
4604
+ __typename?: 'GmSessionEvent';
4605
+ /** The app (tenant). */
4606
+ appId: Scalars['BigInt']['output'];
4607
+ /** When the revision was committed. */
4608
+ createdAt: Scalars['DateTime']['output'];
4609
+ /** created | participant_joined | participant_rejoined | participant_left | participant_expired | host_changed | admission_changed | turn_changed | ended */
4610
+ kind: Scalars['String']['output'];
4611
+ /** JSON object describing the change (e.g. {"userId":"…","incarnation":2} for a join, {"hostUserId":"…","hostTerm":3,"previousHostUserId":"…","reason":"host_left"} for a host change). */
4612
+ payloadJson: Scalars['String']['output'];
4613
+ /** The revision this event produced. Strictly increasing per session; a gap means a missed event -- pull gameModelSessionSnapshot or gameModelSessionEvents(afterRevision). */
4614
+ revision: Scalars['String']['output'];
4615
+ /** The session this revision belongs to. */
4616
+ sessionId: Scalars['String']['output'];
4617
+ };
4618
+ /** An operator's view of one session: the full roster including departed participants, each joined participant's live presence verdict, and the most recent events. */
4619
+ export type GmSessionInspection = {
4620
+ __typename?: 'GmSessionInspection';
4621
+ /** Every participant row, joined and left, oldest join first. */
4622
+ participants: Array<GmSessionParticipantInspection>;
4623
+ /** The most recent events, newest first. */
4624
+ recentEvents: Array<GmSessionEvent>;
4625
+ /** The session row. */
4626
+ session: GmSession;
4627
+ };
4559
4628
  /** A user's participation in a session. */
4560
4629
  export type GmSessionParticipant = {
4561
4630
  __typename?: 'GmSessionParticipant';
4631
+ /** The Buddy actor uuid the client bound at join, if any. When set, this participant's presence is that actor's; when null, any fresh actor of the user in the app counts. */
4632
+ actorUuid: Maybe<Scalars['String']['output']>;
4633
+ /** Counts this user's joins to this session. A reconnect is the same row with incarnation + 1; a leave that names an older incarnation is a superseded client and is refused (SESSION_INCARNATION_STALE). */
4634
+ incarnation: Scalars['Int']['output'];
4635
+ /** When the user first joined (kept across reconnects). */
4636
+ joinedAt: Scalars['DateTime']['output'];
4637
+ /** When the participant last left, or null while joined. */
4638
+ leftAt: Maybe<Scalars['DateTime']['output']>;
4639
+ /** Why the participant left: 'left' (their own call), 'presence_expired' (no fresh actor past the grace window), 'session_ended', 'kicked'. */
4640
+ leftReason: Maybe<Scalars['String']['output']>;
4562
4641
  /** The participant role within the session. */
4563
4642
  role: Scalars['String']['output'];
4564
4643
  /** The session id. */
4565
4644
  sessionId: Scalars['String']['output'];
4645
+ /** 'joined' while the user is in the session, 'left' after a leave, a presence expiry, or the session ending. Rows are kept so the roster history is answerable. */
4646
+ state: Scalars['String']['output'];
4566
4647
  /** The participant user id. */
4567
4648
  userId: Scalars['BigInt']['output'];
4568
4649
  };
4650
+ /** A joined participant with the platform's current presence verdict, for operators. */
4651
+ export type GmSessionParticipantInspection = {
4652
+ __typename?: 'GmSessionParticipantInspection';
4653
+ /** The roster row. */
4654
+ participant: GmSessionParticipant;
4655
+ /** 'fresh' (a qualifying actor is present), 'grace' (inside the join grace window, not yet judged), 'stale' (no qualifying actor; the next presence sweep will expire this participant), 'none' (the session's presence mode is 'none'; never expired), 'legacy' (row predates presence tracking; never expired), 'left' (not joined). */
4656
+ presence: Scalars['String']['output'];
4657
+ /** When the presence rule starts applying to this participant (join + grace), or null for a row the rule never applies to (a legacy row, or a session whose presence mode is 'none'). */
4658
+ presenceFrom: Maybe<Scalars['DateTime']['output']>;
4659
+ };
4660
+ /** The authoritative state of one session at one revision: the session and every joined participant. The catch-up read after a subscription gap or a reconnect. */
4661
+ export type GmSessionSnapshot = {
4662
+ __typename?: 'GmSessionSnapshot';
4663
+ /** Every participant whose state is joined, oldest join first. */
4664
+ participants: Array<GmSessionParticipant>;
4665
+ /** The revision this snapshot describes. Discard buffered events at or below it and apply the ones above it. */
4666
+ revision: Scalars['String']['output'];
4667
+ /** The session row at this revision. */
4668
+ session: GmSession;
4669
+ };
4569
4670
  /** A grant of a feature key to an access tier. */
4570
4671
  export type GmTierFeature = {
4571
4672
  __typename?: 'GmTierFeature';
@@ -5066,15 +5167,30 @@ export type InvokeFunctionInput = {
5066
5167
  /** Optional session context for the invocation. */
5067
5168
  sessionId?: InputMaybe<Scalars['String']['input']>;
5068
5169
  };
5069
- /** Join an existing session. */
5170
+ /** Join an existing session, or reconnect to one you are already in. */
5070
5171
  export type JoinSessionInput = {
5172
+ /** Optional: the Buddy actor uuid this client is playing as (32 hex characters, dashes accepted). It must be the caller's own actor. When given, the participant's presence is that actor's presence in the app; a new actor after a reconnect should rejoin with its uuid. When omitted, any fresh actor of this user in the app keeps the participant present. */
5173
+ actorUuid?: InputMaybe<Scalars['String']['input']>;
5071
5174
  /** The app (tenant) that owns the session. */
5072
5175
  appId: Scalars['BigInt']['input'];
5176
+ /** Optional idempotency key. Replaying with the same key and identical input returns the first result (same incarnation) instead of joining again. Keys expire after 24h. */
5177
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
5073
5178
  /** Optional participant role to join as. */
5074
5179
  role?: InputMaybe<Scalars['String']['input']>;
5075
5180
  /** The session id to join. */
5076
5181
  sessionId: Scalars['String']['input'];
5077
5182
  };
5183
+ /** Leave a session you are joined to. */
5184
+ export type LeaveSessionInput = {
5185
+ /** The app (tenant) that owns the session. */
5186
+ appId: Scalars['BigInt']['input'];
5187
+ /** Optional idempotency key (24h). */
5188
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
5189
+ /** The incarnation gameModelJoinSession returned to THIS client (a creator starts at 1; gameModelSessionSnapshot shows every participant's). Required: if a newer client has since rejoined as the same user, the call is refused with SESSION_INCARNATION_STALE and the newer client stays joined, so a superseded client can never remove the one that took over. */
5190
+ incarnation: Scalars['Int']['input'];
5191
+ /** The session id to leave. */
5192
+ sessionId: Scalars['String']['input'];
5193
+ };
5078
5194
  /** Link an additional federated identity to the signed-in account. */
5079
5195
  export type LinkIdentityInput = {
5080
5196
  code: Scalars['String']['input'];
@@ -5326,7 +5442,7 @@ export type Mutation = {
5326
5442
  gameModelCancelTimer: Scalars['Int']['output'];
5327
5443
  /** Instantiate a container (a runtime entity of a given type), optionally within a session, with an owner and initial properties. Subject to the type's instantiableBy rule (admin | member | owner). Requires a valid token. */
5328
5444
  gameModelCreateContainer: GmContainer;
5329
- /** Create a runtime session: an isolated instance scope for containers (e.g. a match, room, or save). Subject to the app's session creation policy. The caller becomes the creator and a participant. Requires a valid token. */
5445
+ /** Create a runtime session: an isolated instance scope for containers (e.g. a match, room, or save) with its own roster, host, admission and capacity. Subject to the app's session creation policy. The caller becomes creator, host (term 1) and a joined participant. Presence is actor presence: a participant with no fresh Buddy actor in the app after the join grace window is expired by the server. Requires a valid token. */
5330
5446
  gameModelCreateSession: GmSession;
5331
5447
  /** Define an app feature key that functions can gate on (via a tier_feature authority rule) and that access tiers can be granted. Idempotent on (app, featureKey). Requires app-admin ('manage_apps'). */
5332
5448
  gameModelDefineFeature: GmAppFeature;
@@ -5344,14 +5460,18 @@ export type Mutation = {
5344
5460
  gameModelDeleteFunction: Scalars['Boolean']['output'];
5345
5461
  /** Delete a property definition from a container type. Does not remove instance property values already stored on containers. Requires app-admin ('manage_apps'). DESTRUCTIVE. Returns true if a definition was deleted. */
5346
5462
  gameModelDeletePropertyDef: Scalars['Boolean']['output'];
5463
+ /** End a session as 'completed' (default) or 'abandoned': every joined participant is marked left (session_ended), admission becomes closed, and an ended event closes the revision log. Session host or app admin ('manage_apps'); expectedHostTerm refuses a stale host. The server also ends sessions nobody has been joined to for longer than their empty timeout. Requires a valid token. */
5464
+ gameModelEndSession: GmSession;
5347
5465
  /** Atomically get-or-create a container by an opaque bindingKey, unique per (appId, typeName, sessionId). Concurrent ensures with the same key all return the SAME containerId and exactly one response has created: true — no client-side leader election or list-then-create coordination is needed for shared world objects. When the row already exists this behaves like a read (creation-only fields are ignored and the type's instantiableBy rule is NOT enforced); when it does not exist, creation is authorized exactly like gameModelCreateContainer (instantiableBy + owner rules) AND by the type's bindPolicy, so a caller who may not instantiate the type, or may not claim keys for it, errors only in the not-exists case. bindingKey is client-supplied, so on a member- or owner-instantiable type ANY entitled player may create the keyed row and becomes its owner — which inverts every owner_of_self invoke policy on that type. Set the container type's bindPolicy (e.g. {"type":"is_host"}), or use an admin-instantiable type, for any object more than one player shares. The prefix `seed:` is reserved for gameModelSeed (v1.93.0); a non-admin ensure cannot claim it. Requires a valid token. */
5348
5466
  gameModelEnsureContainer: GmEnsureContainerResult;
5349
5467
  /** Grant a feature key to an access tier, so users on that tier satisfy tier_feature authority checks for it. Requires app-admin ('manage_apps'). */
5350
5468
  gameModelGrantTierFeature: GmTierFeature;
5351
5469
  /** Invoke a studio-defined function against a 'self' container with JSON params. The server enforces the function's invoke policy (authority rule tree: owner_of_self / is_host / is_current_turn / is_participant / tier_feature / group_permission / grid_permission / condition), evaluates its expressions, atomically applies its declared property mutations, logs an event, and returns the result (return value + mutations applied, or success=false with an error message). Invoke-policy denials are gameplay verdicts, NOT exceptions: they return success=false with errorMessage and log a failure event (observable via gameModelEvents). Scope violations (calling a server-scope function as a non-admin, or an internal function directly) are misconfigurations and throw FORBIDDEN. THE POLICY APPLIES TO APP ADMINS TOO (since v1.89.0): a manage_apps holder is judged exactly like a player unless the input sets bypassPolicy=true, which is refused for anyone else, marks the result policyBypassed=true and is audit-logged. This is the primary, safe way for players to mutate game state. Requires a valid token; only player-scope functions are invocable here. RATE LIMITED per player per app, defaulting to 120 invocations per 10 seconds: over the limit the call is refused with extensions.code RATE_LIMITED, extensions.blame 'budget' (the caller's own budget — not a fault in the game's code and not a platform failure) and extensions.retryAfterMs. A client that awaits each response cannot reach the limit, because the per-call ceiling already bounds a serial caller well below it. */
5352
5470
  gameModelInvoke: GmInvokeResult;
5353
- /** Join an existing session as a participant, optionally with a role. Requires a valid token and app access. */
5471
+ /** Join a session, or reconnect to one you are already in. Refused with SESSION_ENDED, SESSION_CLOSED, SESSION_LOCKED (unless you already joined) or SESSION_FULL. A rejoin returns the same row with incarnation + 1 and supersedes any older client of yours. Pass actorUuid to bind the participant's presence to that Buddy actor. Requires a valid token. */
5354
5472
  gameModelJoinSession: GmSessionParticipant;
5473
+ /** Leave a session you are joined to. Send the incarnation gameModelJoinSession gave you so a superseded client cannot remove the one that took over (SESSION_INCARNATION_STALE). Leaving an already-left row is a no-op. If you were host, the longest-joined present participant succeeds you (host_changed). Requires a valid token. */
5474
+ gameModelLeaveSession: GmSessionParticipant;
5355
5475
  /** Revoke a feature key from an access tier. Requires app-admin ('manage_apps'). Returns true if a grant was removed. */
5356
5476
  gameModelRevokeTierFeature: Scalars['Boolean']['output'];
5357
5477
  /** Run an automation once, immediately (manual trigger), regardless of its schedule. Applies the same guard chain (app gate, rate limit, circuit) and records a run. Useful for testing an NPC. Requires app-admin ('manage_apps'). */
@@ -5368,8 +5488,12 @@ export type Mutation = {
5368
5488
  gameModelSetPolicy: GmAppPolicy;
5369
5489
  /** Set a single property value on a container directly (outside a function). Allowed only when the property's writability (function | owner | admin) permits the caller. The value is JSON-encoded and coerced to the property's value type. Requires a valid token. For game-logic changes prefer gameModelInvoke. */
5370
5490
  gameModelSetProperty: GmContainer;
5371
- /** Set or clear the session's current-turn user, for turn-based play (authority enforced by the service). Pass userId null to clear the turn. Requires a valid token. */
5491
+ /** Change who may still join: 'open', 'locked' (participants who already joined may reconnect, nobody new), or 'closed' (nobody). Session host or app admin ('manage_apps'); expectedHostTerm refuses a stale host. Emits admission_changed. Requires a valid token. */
5492
+ gameModelSetSessionAdmission: GmSession;
5493
+ /** Set or clear the session's current-turn user, for turn-based play. Allowed for an app admin, the app's elected host, the session host, or the current turn holder. Pass userId null to clear the turn; expectedHostTerm refuses a stale host. Requires a valid token. */
5372
5494
  gameModelSetSessionTurn: GmSession;
5495
+ /** Hand the session host role to another joined participant. Session host or app admin ('manage_apps'); expectedHostTerm refuses a stale host. Increments hostTerm and emits host_changed. Requires a valid token. */
5496
+ gameModelTransferSessionHost: GmSession;
5373
5497
  /** Create or update an autonomous process ("automation" / NPC): a server-driven entry-point function bound to a trigger (schedule | event | manual), an optional run-as identity, a target/candidate selector, and a per-automation safety budget. The entry-point function must be marked autonomousInvocable. Idempotent on (app, name). Requires app-admin ('manage_apps'). NOTHING RUNS FOR AN APP WITH NO PLAYER IN IT: a SCHEDULE trigger that comes due while the app is empty is skipped and rescheduled from the moment a player returns, and the missed runs are never made up -- so write the entry point to advance the world by elapsed time rather than by one step per run. Event and manual triggers are unaffected, because something already asked. */
5374
5498
  gameModelUpsertAutomation: GmAutomation;
5375
5499
  /** Create an event trigger that fires an automation in reaction to model activity or a complete app-scoped active-player-count transition. player_count_changed rejects model filters, starts silent-baseline tracking, injects reserved previous/current/delta/revision params, and uses trailing-edge debounce; other event behavior is unchanged. Matched in the API server post-commit. Requires app-admin ('manage_apps'). */
@@ -5966,6 +6090,9 @@ export type MutationGameModelDeletePropertyDefArgs = {
5966
6090
  containerTypeName: Scalars['String']['input'];
5967
6091
  key: Scalars['String']['input'];
5968
6092
  };
6093
+ export type MutationGameModelEndSessionArgs = {
6094
+ input: EndSessionInput;
6095
+ };
5969
6096
  export type MutationGameModelEnsureContainerArgs = {
5970
6097
  input: EnsureContainerInput;
5971
6098
  };
@@ -5978,6 +6105,9 @@ export type MutationGameModelInvokeArgs = {
5978
6105
  export type MutationGameModelJoinSessionArgs = {
5979
6106
  input: JoinSessionInput;
5980
6107
  };
6108
+ export type MutationGameModelLeaveSessionArgs = {
6109
+ input: LeaveSessionInput;
6110
+ };
5981
6111
  export type MutationGameModelRevokeTierFeatureArgs = {
5982
6112
  input: GrantTierFeatureInput;
5983
6113
  };
@@ -6005,9 +6135,15 @@ export type MutationGameModelSetPolicyArgs = {
6005
6135
  export type MutationGameModelSetPropertyArgs = {
6006
6136
  input: SetContainerPropertyInput;
6007
6137
  };
6138
+ export type MutationGameModelSetSessionAdmissionArgs = {
6139
+ input: SetSessionAdmissionInput;
6140
+ };
6008
6141
  export type MutationGameModelSetSessionTurnArgs = {
6009
6142
  input: SetSessionTurnInput;
6010
6143
  };
6144
+ export type MutationGameModelTransferSessionHostArgs = {
6145
+ input: TransferSessionHostInput;
6146
+ };
6011
6147
  export type MutationGameModelUpsertAutomationArgs = {
6012
6148
  input: UpsertAutomationInput;
6013
6149
  };
@@ -7917,9 +8053,15 @@ export type Query = {
7917
8053
  gameModelPolicy: GmAppPolicy;
7918
8054
  /** List the property definitions for a container type. Requires app-admin ('manage_apps'). */
7919
8055
  gameModelPropertyDefs: Array<GmPropertyDef>;
7920
- /** Fetch one session by id. Requires a valid token. */
8056
+ /** Fetch one session by id, with its joined-participant count, host, admission and revision. Requires a valid token. */
7921
8057
  gameModelSession: GmSession;
7922
- /** List sessions in an app, optionally filtered by status. Requires a valid token. */
8058
+ /** The session events with a revision greater than afterRevision, oldest first: the gap-fill read behind gameModelSessionChanged. Events of ended sessions are retained for a bounded period, then purged. Requires a valid token. */
8059
+ gameModelSessionEvents: Array<GmSessionEvent>;
8060
+ /** Operator view of one session: the full roster including departed participants (with left reason and incarnation), each joined participant's live presence verdict, and the most recent events. Requires app-admin ('manage_apps'). */
8061
+ gameModelSessionInspect: GmSessionInspection;
8062
+ /** The authoritative state of one session at one revision: the session row and every joined participant. Pull it when you subscribe, after a reconnect, or when gameModelSessionChanged shows a revision gap; then apply only events with a higher revision. Requires a valid token. */
8063
+ gameModelSessionSnapshot: GmSessionSnapshot;
8064
+ /** List sessions in an app, newest first, optionally filtered by status, admission and/or host. Requires a valid token. */
7923
8065
  gameModelSessions: Array<GmSession>;
7924
8066
  /** List tier -> feature grants for an app, optionally filtered to one tier. Requires app-admin ('manage_apps'). */
7925
8067
  gameModelTierFeatures: Array<GmTierFeature>;
@@ -8540,8 +8682,25 @@ export type QueryGameModelSessionArgs = {
8540
8682
  appId: Scalars['BigInt']['input'];
8541
8683
  sessionId: Scalars['String']['input'];
8542
8684
  };
8685
+ export type QueryGameModelSessionEventsArgs = {
8686
+ afterRevision: Scalars['String']['input'];
8687
+ appId: Scalars['BigInt']['input'];
8688
+ limit?: InputMaybe<Scalars['Int']['input']>;
8689
+ sessionId: Scalars['String']['input'];
8690
+ };
8691
+ export type QueryGameModelSessionInspectArgs = {
8692
+ appId: Scalars['BigInt']['input'];
8693
+ sessionId: Scalars['String']['input'];
8694
+ };
8695
+ export type QueryGameModelSessionSnapshotArgs = {
8696
+ appId: Scalars['BigInt']['input'];
8697
+ sessionId: Scalars['String']['input'];
8698
+ };
8543
8699
  export type QueryGameModelSessionsArgs = {
8700
+ admission?: InputMaybe<Scalars['String']['input']>;
8544
8701
  appId: Scalars['BigInt']['input'];
8702
+ hostUserId?: InputMaybe<Scalars['BigInt']['input']>;
8703
+ limit?: InputMaybe<Scalars['Int']['input']>;
8545
8704
  status?: InputMaybe<Scalars['String']['input']>;
8546
8705
  };
8547
8706
  export type QueryGameModelTierFeaturesArgs = {
@@ -9769,10 +9928,27 @@ export type SetRateCardResult = {
9769
9928
  /** The dimension as it now stands. */
9770
9929
  entry: RateCardEntryType;
9771
9930
  };
9931
+ /** Change who may still join a session. Host or app admin ('manage_apps'). */
9932
+ export type SetSessionAdmissionInput = {
9933
+ /** 'open' (anyone the app admits), 'locked' (only participants who already joined may reconnect), 'closed' (nobody, not even by reconnection). */
9934
+ admission: Scalars['String']['input'];
9935
+ /** The app (tenant) that owns the session. */
9936
+ appId: Scalars['BigInt']['input'];
9937
+ /** Optional: the hostTerm you last read. Refused with SESSION_HOST_TERM_STALE if the host has changed since. */
9938
+ expectedHostTerm?: InputMaybe<Scalars['Int']['input']>;
9939
+ /** Optional idempotency key (24h). */
9940
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
9941
+ /** The session id to update. */
9942
+ sessionId: Scalars['String']['input'];
9943
+ };
9772
9944
  /** Set or clear the current-turn user of a session. */
9773
9945
  export type SetSessionTurnInput = {
9774
9946
  /** The app (tenant) that owns the session. */
9775
9947
  appId: Scalars['BigInt']['input'];
9948
+ /** Optional: the hostTerm you last read. Refused with SESSION_HOST_TERM_STALE if the host has changed since, so a stale host never sets the turn. */
9949
+ expectedHostTerm?: InputMaybe<Scalars['Int']['input']>;
9950
+ /** Optional idempotency key (24h). */
9951
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
9776
9952
  /** The session id to update. */
9777
9953
  sessionId: Scalars['String']['input'];
9778
9954
  /** The user whose turn it now is (NULL clears the turn). */
@@ -9872,6 +10048,8 @@ export type Subscription = {
9872
10048
  gameModelActivePlayerCountChanged: GameModelActivePlayerCountChange;
9873
10049
  /** Push notification whenever a container in the app changes: an invoke mutated it, a direct gameModelSetProperty wrote it, or it was created/deleted. Metadata only (containerId, typeName, changedKeys — no property values); pull the visibility-filtered state with gameModelContainerState on receipt. Post-commit and best-effort (a dropped event costs one missed pull, never correctness) — durable reads remain the source of truth. Optional typeName/sessionId filters narrow delivery. Fans out across all API replicas. Requires a valid token. Replaces interval polling with pull-on-push. */
9874
10050
  gameModelContainerChanged: GmContainerChange;
10051
+ /** Stream the revisions of one session as they commit: joins, rejoins, leaves, presence expiries, host changes, admission changes, turn changes, and the end. There is no bootstrap event: pull gameModelSessionSnapshot first (or pass afterRevision to replay retained events from there). Revisions are strictly increasing; on a gap or after a reconnect, pull the snapshot again. Cross-replica, best-effort wakeup over a bounded oldest-drop buffer; the events table is the record. Requires a valid token. */
10052
+ gameModelSessionChanged: GmSessionEvent;
9875
10053
  /** Realtime downlink from the game server: spatial notifications and responses, GenericErrorResponse (errors from your sends, correlated by sequenceNumber), and RealtimeConnectionEvent (lifecycle/setup failures). Requires a bearer game token AND an appId-scoped connection — the appId is read from the graphql-transport-ws connection (game tokens are app-agnostic and one UDP socket is shared across apps, so an app-agnostic subscription is rejected with a RealtimeConnectionEvent code APP_ID_REQUIRED, and a missing/invalid token with AUTH_REQUIRED). On subscribe, opens a UDP proxy session if none exists (binds to the least-loaded game server); open/transport failures are delivered as RealtimeConnectionEvent (code UDP_PROXY_CONNECTION_FAILED) and then the stream ends. Only this app’s spatial fan-out is delivered; appId-less control frames always pass. Subscribe before/while sending so async results are not missed. Unsubscribing stops delivery only — it does NOT close the UDP session; call disconnectUdpProxy (or rely on the server inactivity timeout) to release it. */
9876
10054
  udpNotifications: Maybe<UdpNotification>;
9877
10055
  };
@@ -9883,6 +10061,11 @@ export type SubscriptionGameModelContainerChangedArgs = {
9883
10061
  sessionId?: InputMaybe<Scalars['String']['input']>;
9884
10062
  typeName?: InputMaybe<Scalars['String']['input']>;
9885
10063
  };
10064
+ export type SubscriptionGameModelSessionChangedArgs = {
10065
+ afterRevision?: InputMaybe<Scalars['String']['input']>;
10066
+ appId: Scalars['BigInt']['input'];
10067
+ sessionId: Scalars['String']['input'];
10068
+ };
9886
10069
  export type TeleportRequestInput = {
9887
10070
  /** App (game) to teleport within. Must be greater than 0 (a non-positive value yields errorCode INVALID_APP_ID). BigInt sent as a decimal string. */
9888
10071
  appId: Scalars['BigInt']['input'];
@@ -9929,6 +10112,19 @@ export type TransferPlayerCodeListingInput = {
9929
10112
  /** Numeric user id or org id of the new owner, per toOwnerKind. */
9930
10113
  toOwnerRef: Scalars['BigInt']['input'];
9931
10114
  };
10115
+ /** Hand the session host role to another joined participant. Host or app admin ('manage_apps'). */
10116
+ export type TransferSessionHostInput = {
10117
+ /** The app (tenant) that owns the session. */
10118
+ appId: Scalars['BigInt']['input'];
10119
+ /** Optional: the hostTerm you last read. Refused with SESSION_HOST_TERM_STALE if the host has changed since. */
10120
+ expectedHostTerm?: InputMaybe<Scalars['Int']['input']>;
10121
+ /** Optional idempotency key (24h). */
10122
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
10123
+ /** The session id. */
10124
+ sessionId: Scalars['String']['input'];
10125
+ /** The joined participant who becomes host. */
10126
+ toUserId: Scalars['BigInt']['input'];
10127
+ };
9932
10128
  /** Error codes returned by UDP game servers (and surfaced on `GenericErrorResponse.errorCode`) in response to a spatial/realtime message. NO_ERROR (0) indicates success; every other value indicates a failure. The numeric value is the byte sent on the wire; GraphQL exposes the name. Note: a failed message does not always produce an error — some auth failures are dropped silently (see the docs). */
9933
10129
  export declare enum UdpErrorCode {
9934
10130
  /** No app matches the supplied appId. */
@@ -14472,6 +14668,37 @@ export type GmSessionFieldsFragment = {
14472
14668
  createdByUserId: string | null;
14473
14669
  currentTurnUserId: string | null;
14474
14670
  metadataJson: string;
14671
+ admission: string;
14672
+ maxParticipants: number | null;
14673
+ participantCount: number;
14674
+ hostUserId: string | null;
14675
+ hostTerm: number;
14676
+ revision: string;
14677
+ endedAt: string | null;
14678
+ endReason: string | null;
14679
+ createdAt: string;
14680
+ presence: string;
14681
+ };
14682
+ export type GmSessionParticipantFieldsFragment = {
14683
+ __typename?: 'GmSessionParticipant';
14684
+ sessionId: string;
14685
+ userId: string;
14686
+ role: string;
14687
+ state: string;
14688
+ incarnation: number;
14689
+ actorUuid: string | null;
14690
+ joinedAt: string;
14691
+ leftAt: string | null;
14692
+ leftReason: string | null;
14693
+ };
14694
+ export type GmSessionEventFieldsFragment = {
14695
+ __typename?: 'GmSessionEvent';
14696
+ appId: string;
14697
+ sessionId: string;
14698
+ revision: string;
14699
+ kind: string;
14700
+ payloadJson: string;
14701
+ createdAt: string;
14475
14702
  };
14476
14703
  export type GmContainerFieldsFragment = {
14477
14704
  __typename?: 'GmContainer';
@@ -14521,6 +14748,16 @@ export type GameModelCreateSessionMutation = {
14521
14748
  createdByUserId: string | null;
14522
14749
  currentTurnUserId: string | null;
14523
14750
  metadataJson: string;
14751
+ admission: string;
14752
+ maxParticipants: number | null;
14753
+ participantCount: number;
14754
+ hostUserId: string | null;
14755
+ hostTerm: number;
14756
+ revision: string;
14757
+ endedAt: string | null;
14758
+ endReason: string | null;
14759
+ createdAt: string;
14760
+ presence: string;
14524
14761
  };
14525
14762
  };
14526
14763
  export type GameModelJoinSessionMutationVariables = Exact<{
@@ -14533,6 +14770,30 @@ export type GameModelJoinSessionMutation = {
14533
14770
  sessionId: string;
14534
14771
  userId: string;
14535
14772
  role: string;
14773
+ state: string;
14774
+ incarnation: number;
14775
+ actorUuid: string | null;
14776
+ joinedAt: string;
14777
+ leftAt: string | null;
14778
+ leftReason: string | null;
14779
+ };
14780
+ };
14781
+ export type GameModelLeaveSessionMutationVariables = Exact<{
14782
+ input: LeaveSessionInput;
14783
+ }>;
14784
+ export type GameModelLeaveSessionMutation = {
14785
+ __typename?: 'Mutation';
14786
+ gameModelLeaveSession: {
14787
+ __typename?: 'GmSessionParticipant';
14788
+ sessionId: string;
14789
+ userId: string;
14790
+ role: string;
14791
+ state: string;
14792
+ incarnation: number;
14793
+ actorUuid: string | null;
14794
+ joinedAt: string;
14795
+ leftAt: string | null;
14796
+ leftReason: string | null;
14536
14797
  };
14537
14798
  };
14538
14799
  export type GameModelSetSessionTurnMutationVariables = Exact<{
@@ -14549,6 +14810,94 @@ export type GameModelSetSessionTurnMutation = {
14549
14810
  createdByUserId: string | null;
14550
14811
  currentTurnUserId: string | null;
14551
14812
  metadataJson: string;
14813
+ admission: string;
14814
+ maxParticipants: number | null;
14815
+ participantCount: number;
14816
+ hostUserId: string | null;
14817
+ hostTerm: number;
14818
+ revision: string;
14819
+ endedAt: string | null;
14820
+ endReason: string | null;
14821
+ createdAt: string;
14822
+ presence: string;
14823
+ };
14824
+ };
14825
+ export type GameModelSetSessionAdmissionMutationVariables = Exact<{
14826
+ input: SetSessionAdmissionInput;
14827
+ }>;
14828
+ export type GameModelSetSessionAdmissionMutation = {
14829
+ __typename?: 'Mutation';
14830
+ gameModelSetSessionAdmission: {
14831
+ __typename?: 'GmSession';
14832
+ sessionId: string;
14833
+ appId: string;
14834
+ name: string | null;
14835
+ status: string;
14836
+ createdByUserId: string | null;
14837
+ currentTurnUserId: string | null;
14838
+ metadataJson: string;
14839
+ admission: string;
14840
+ maxParticipants: number | null;
14841
+ participantCount: number;
14842
+ hostUserId: string | null;
14843
+ hostTerm: number;
14844
+ revision: string;
14845
+ endedAt: string | null;
14846
+ endReason: string | null;
14847
+ createdAt: string;
14848
+ presence: string;
14849
+ };
14850
+ };
14851
+ export type GameModelTransferSessionHostMutationVariables = Exact<{
14852
+ input: TransferSessionHostInput;
14853
+ }>;
14854
+ export type GameModelTransferSessionHostMutation = {
14855
+ __typename?: 'Mutation';
14856
+ gameModelTransferSessionHost: {
14857
+ __typename?: 'GmSession';
14858
+ sessionId: string;
14859
+ appId: string;
14860
+ name: string | null;
14861
+ status: string;
14862
+ createdByUserId: string | null;
14863
+ currentTurnUserId: string | null;
14864
+ metadataJson: string;
14865
+ admission: string;
14866
+ maxParticipants: number | null;
14867
+ participantCount: number;
14868
+ hostUserId: string | null;
14869
+ hostTerm: number;
14870
+ revision: string;
14871
+ endedAt: string | null;
14872
+ endReason: string | null;
14873
+ createdAt: string;
14874
+ presence: string;
14875
+ };
14876
+ };
14877
+ export type GameModelEndSessionMutationVariables = Exact<{
14878
+ input: EndSessionInput;
14879
+ }>;
14880
+ export type GameModelEndSessionMutation = {
14881
+ __typename?: 'Mutation';
14882
+ gameModelEndSession: {
14883
+ __typename?: 'GmSession';
14884
+ sessionId: string;
14885
+ appId: string;
14886
+ name: string | null;
14887
+ status: string;
14888
+ createdByUserId: string | null;
14889
+ currentTurnUserId: string | null;
14890
+ metadataJson: string;
14891
+ admission: string;
14892
+ maxParticipants: number | null;
14893
+ participantCount: number;
14894
+ hostUserId: string | null;
14895
+ hostTerm: number;
14896
+ revision: string;
14897
+ endedAt: string | null;
14898
+ endReason: string | null;
14899
+ createdAt: string;
14900
+ presence: string;
14552
14901
  };
14553
14902
  };
14554
14903
  export type GameModelCreateContainerMutationVariables = Exact<{
@@ -14767,11 +15116,24 @@ export type GameModelSessionQuery = {
14767
15116
  createdByUserId: string | null;
14768
15117
  currentTurnUserId: string | null;
14769
15118
  metadataJson: string;
15119
+ admission: string;
15120
+ maxParticipants: number | null;
15121
+ participantCount: number;
15122
+ hostUserId: string | null;
15123
+ hostTerm: number;
15124
+ revision: string;
15125
+ endedAt: string | null;
15126
+ endReason: string | null;
15127
+ createdAt: string;
15128
+ presence: string;
14770
15129
  };
14771
15130
  };
14772
15131
  export type GameModelSessionsQueryVariables = Exact<{
14773
15132
  appId: Scalars['BigInt']['input'];
14774
15133
  status?: InputMaybe<Scalars['String']['input']>;
15134
+ admission?: InputMaybe<Scalars['String']['input']>;
15135
+ hostUserId?: InputMaybe<Scalars['BigInt']['input']>;
15136
+ limit?: InputMaybe<Scalars['Int']['input']>;
14775
15137
  }>;
14776
15138
  export type GameModelSessionsQuery = {
14777
15139
  __typename?: 'Query';
@@ -14784,8 +15146,152 @@ export type GameModelSessionsQuery = {
14784
15146
  createdByUserId: string | null;
14785
15147
  currentTurnUserId: string | null;
14786
15148
  metadataJson: string;
15149
+ admission: string;
15150
+ maxParticipants: number | null;
15151
+ participantCount: number;
15152
+ hostUserId: string | null;
15153
+ hostTerm: number;
15154
+ revision: string;
15155
+ endedAt: string | null;
15156
+ endReason: string | null;
15157
+ createdAt: string;
15158
+ presence: string;
14787
15159
  }>;
14788
15160
  };
15161
+ export type GameModelSessionSnapshotQueryVariables = Exact<{
15162
+ appId: Scalars['BigInt']['input'];
15163
+ sessionId: Scalars['String']['input'];
15164
+ }>;
15165
+ export type GameModelSessionSnapshotQuery = {
15166
+ __typename?: 'Query';
15167
+ gameModelSessionSnapshot: {
15168
+ __typename?: 'GmSessionSnapshot';
15169
+ revision: string;
15170
+ session: {
15171
+ __typename?: 'GmSession';
15172
+ sessionId: string;
15173
+ appId: string;
15174
+ name: string | null;
15175
+ status: string;
15176
+ createdByUserId: string | null;
15177
+ currentTurnUserId: string | null;
15178
+ metadataJson: string;
15179
+ admission: string;
15180
+ maxParticipants: number | null;
15181
+ participantCount: number;
15182
+ hostUserId: string | null;
15183
+ hostTerm: number;
15184
+ revision: string;
15185
+ endedAt: string | null;
15186
+ endReason: string | null;
15187
+ createdAt: string;
15188
+ presence: string;
15189
+ };
15190
+ participants: Array<{
15191
+ __typename?: 'GmSessionParticipant';
15192
+ sessionId: string;
15193
+ userId: string;
15194
+ role: string;
15195
+ state: string;
15196
+ incarnation: number;
15197
+ actorUuid: string | null;
15198
+ joinedAt: string;
15199
+ leftAt: string | null;
15200
+ leftReason: string | null;
15201
+ }>;
15202
+ };
15203
+ };
15204
+ export type GameModelSessionEventsQueryVariables = Exact<{
15205
+ appId: Scalars['BigInt']['input'];
15206
+ sessionId: Scalars['String']['input'];
15207
+ afterRevision: Scalars['String']['input'];
15208
+ limit?: InputMaybe<Scalars['Int']['input']>;
15209
+ }>;
15210
+ export type GameModelSessionEventsQuery = {
15211
+ __typename?: 'Query';
15212
+ gameModelSessionEvents: Array<{
15213
+ __typename?: 'GmSessionEvent';
15214
+ appId: string;
15215
+ sessionId: string;
15216
+ revision: string;
15217
+ kind: string;
15218
+ payloadJson: string;
15219
+ createdAt: string;
15220
+ }>;
15221
+ };
15222
+ export type GameModelSessionInspectQueryVariables = Exact<{
15223
+ appId: Scalars['BigInt']['input'];
15224
+ sessionId: Scalars['String']['input'];
15225
+ }>;
15226
+ export type GameModelSessionInspectQuery = {
15227
+ __typename?: 'Query';
15228
+ gameModelSessionInspect: {
15229
+ __typename?: 'GmSessionInspection';
15230
+ session: {
15231
+ __typename?: 'GmSession';
15232
+ sessionId: string;
15233
+ appId: string;
15234
+ name: string | null;
15235
+ status: string;
15236
+ createdByUserId: string | null;
15237
+ currentTurnUserId: string | null;
15238
+ metadataJson: string;
15239
+ admission: string;
15240
+ maxParticipants: number | null;
15241
+ participantCount: number;
15242
+ hostUserId: string | null;
15243
+ hostTerm: number;
15244
+ revision: string;
15245
+ endedAt: string | null;
15246
+ endReason: string | null;
15247
+ createdAt: string;
15248
+ presence: string;
15249
+ };
15250
+ participants: Array<{
15251
+ __typename?: 'GmSessionParticipantInspection';
15252
+ presence: string;
15253
+ presenceFrom: string | null;
15254
+ participant: {
15255
+ __typename?: 'GmSessionParticipant';
15256
+ sessionId: string;
15257
+ userId: string;
15258
+ role: string;
15259
+ state: string;
15260
+ incarnation: number;
15261
+ actorUuid: string | null;
15262
+ joinedAt: string;
15263
+ leftAt: string | null;
15264
+ leftReason: string | null;
15265
+ };
15266
+ }>;
15267
+ recentEvents: Array<{
15268
+ __typename?: 'GmSessionEvent';
15269
+ appId: string;
15270
+ sessionId: string;
15271
+ revision: string;
15272
+ kind: string;
15273
+ payloadJson: string;
15274
+ createdAt: string;
15275
+ }>;
15276
+ };
15277
+ };
15278
+ export type GameModelSessionChangedSubscriptionVariables = Exact<{
15279
+ appId: Scalars['BigInt']['input'];
15280
+ sessionId: Scalars['String']['input'];
15281
+ afterRevision?: InputMaybe<Scalars['String']['input']>;
15282
+ }>;
15283
+ export type GameModelSessionChangedSubscription = {
15284
+ __typename?: 'Subscription';
15285
+ gameModelSessionChanged: {
15286
+ __typename?: 'GmSessionEvent';
15287
+ appId: string;
15288
+ sessionId: string;
15289
+ revision: string;
15290
+ kind: string;
15291
+ payloadJson: string;
15292
+ createdAt: string;
15293
+ };
15294
+ };
14789
15295
  export type GameModelEventsQueryVariables = Exact<{
14790
15296
  appId: Scalars['BigInt']['input'];
14791
15297
  sessionId?: InputMaybe<Scalars['String']['input']>;
@@ -19347,6 +19853,8 @@ export declare const GmAutomationPolicyFieldsFragmentDoc: DocumentNode<GmAutomat
19347
19853
  export declare const GmAutomationRunFieldsFragmentDoc: DocumentNode<GmAutomationRunFieldsFragment, unknown>;
19348
19854
  export declare const GmTimerFieldsFragmentDoc: DocumentNode<GmTimerFieldsFragment, unknown>;
19349
19855
  export declare const GmSessionFieldsFragmentDoc: DocumentNode<GmSessionFieldsFragment, unknown>;
19856
+ export declare const GmSessionParticipantFieldsFragmentDoc: DocumentNode<GmSessionParticipantFieldsFragment, unknown>;
19857
+ export declare const GmSessionEventFieldsFragmentDoc: DocumentNode<GmSessionEventFieldsFragment, unknown>;
19350
19858
  export declare const GmContainerFieldsFragmentDoc: DocumentNode<GmContainerFieldsFragment, unknown>;
19351
19859
  export declare const GmInvokeResultFieldsFragmentDoc: DocumentNode<GmInvokeResultFieldsFragment, unknown>;
19352
19860
  export declare const GmFunctionFieldsFragmentDoc: DocumentNode<GmFunctionFieldsFragment, unknown>;
@@ -19516,7 +20024,11 @@ export declare const GameModelActivePlayerCountDocument: DocumentNode<GameModelA
19516
20024
  export declare const GameModelActivePlayerCountChangedDocument: DocumentNode<GameModelActivePlayerCountChangedSubscription, GameModelActivePlayerCountChangedSubscriptionVariables>;
19517
20025
  export declare const GameModelCreateSessionDocument: DocumentNode<GameModelCreateSessionMutation, GameModelCreateSessionMutationVariables>;
19518
20026
  export declare const GameModelJoinSessionDocument: DocumentNode<GameModelJoinSessionMutation, GameModelJoinSessionMutationVariables>;
20027
+ export declare const GameModelLeaveSessionDocument: DocumentNode<GameModelLeaveSessionMutation, GameModelLeaveSessionMutationVariables>;
19519
20028
  export declare const GameModelSetSessionTurnDocument: DocumentNode<GameModelSetSessionTurnMutation, GameModelSetSessionTurnMutationVariables>;
20029
+ export declare const GameModelSetSessionAdmissionDocument: DocumentNode<GameModelSetSessionAdmissionMutation, GameModelSetSessionAdmissionMutationVariables>;
20030
+ export declare const GameModelTransferSessionHostDocument: DocumentNode<GameModelTransferSessionHostMutation, GameModelTransferSessionHostMutationVariables>;
20031
+ export declare const GameModelEndSessionDocument: DocumentNode<GameModelEndSessionMutation, GameModelEndSessionMutationVariables>;
19520
20032
  export declare const GameModelCreateContainerDocument: DocumentNode<GameModelCreateContainerMutation, GameModelCreateContainerMutationVariables>;
19521
20033
  export declare const GameModelDeleteContainerDocument: DocumentNode<GameModelDeleteContainerMutation, GameModelDeleteContainerMutationVariables>;
19522
20034
  export declare const GameModelSetPropertyDocument: DocumentNode<GameModelSetPropertyMutation, GameModelSetPropertyMutationVariables>;
@@ -19530,6 +20042,10 @@ export declare const GameModelContainerStateDocument: DocumentNode<GameModelCont
19530
20042
  export declare const GameModelTraverseDocument: DocumentNode<GameModelTraverseQuery, GameModelTraverseQueryVariables>;
19531
20043
  export declare const GameModelSessionDocument: DocumentNode<GameModelSessionQuery, GameModelSessionQueryVariables>;
19532
20044
  export declare const GameModelSessionsDocument: DocumentNode<GameModelSessionsQuery, GameModelSessionsQueryVariables>;
20045
+ export declare const GameModelSessionSnapshotDocument: DocumentNode<GameModelSessionSnapshotQuery, GameModelSessionSnapshotQueryVariables>;
20046
+ export declare const GameModelSessionEventsDocument: DocumentNode<GameModelSessionEventsQuery, GameModelSessionEventsQueryVariables>;
20047
+ export declare const GameModelSessionInspectDocument: DocumentNode<GameModelSessionInspectQuery, GameModelSessionInspectQueryVariables>;
20048
+ export declare const GameModelSessionChangedDocument: DocumentNode<GameModelSessionChangedSubscription, GameModelSessionChangedSubscriptionVariables>;
19533
20049
  export declare const GameModelEventsDocument: DocumentNode<GameModelEventsQuery, GameModelEventsQueryVariables>;
19534
20050
  export declare const GameModelEventsConnectionDocument: DocumentNode<GameModelEventsConnectionQuery, GameModelEventsConnectionQueryVariables>;
19535
20051
  export declare const GameModelFlowDocument: DocumentNode<GameModelFlowQuery, GameModelFlowQueryVariables>;