@crowdedkingdoms/crowdyjs 17.2.0 → 17.4.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.
Files changed (37) hide show
  1. package/MIGRATION.md +97 -0
  2. package/README.md +2 -2
  3. package/dist/crowdy-studio/controller.d.ts +15 -0
  4. package/dist/crowdy-studio/controller.d.ts.map +1 -1
  5. package/dist/crowdy-studio/controller.js +41 -0
  6. package/dist/crowdy-studio/dom-shell.d.ts +1 -0
  7. package/dist/crowdy-studio/dom-shell.d.ts.map +1 -1
  8. package/dist/crowdy-studio/dom-shell.js +20 -1
  9. package/dist/crowdy-studio/github/index.d.ts +1 -0
  10. package/dist/crowdy-studio/github/index.d.ts.map +1 -1
  11. package/dist/crowdy-studio/github/index.js +1 -0
  12. package/dist/crowdy-studio/github/new-repo.d.ts +27 -0
  13. package/dist/crowdy-studio/github/new-repo.d.ts.map +1 -0
  14. package/dist/crowdy-studio/github/new-repo.js +44 -0
  15. package/dist/crowdy-studio/github/transport.d.ts +7 -0
  16. package/dist/crowdy-studio/github/transport.d.ts.map +1 -1
  17. package/dist/crowdy-studio/github/transport.js +1 -1
  18. package/dist/default-origin.d.ts +6 -6
  19. package/dist/default-origin.d.ts.map +1 -1
  20. package/dist/default-origin.js +6 -6
  21. package/dist/domains/gameModel.d.ts +172 -14
  22. package/dist/domains/gameModel.d.ts.map +1 -1
  23. package/dist/domains/gameModel.js +204 -14
  24. package/dist/generated/graphql.d.ts +524 -6
  25. package/dist/generated/graphql.d.ts.map +1 -1
  26. package/dist/generated/graphql.js +16 -6
  27. package/dist/index.d.ts +3 -3
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +1 -1
  30. package/dist/kit/index.d.ts +1 -1
  31. package/dist/kit/index.d.ts.map +1 -1
  32. package/dist/kit/matches.d.ts +79 -2
  33. package/dist/kit/matches.d.ts.map +1 -1
  34. package/dist/kit/matches.js +85 -1
  35. package/dist/kit/npcs.d.ts.map +1 -1
  36. package/dist/kit/social.d.ts.map +1 -1
  37. package/package.json +1 -1
@@ -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 = {
@@ -3199,6 +3209,8 @@ export type CrowdyStudioGitHubStatus = {
3199
3209
  /** Bound repository owner, when a project was named. */
3200
3210
  owner: Maybe<Scalars['String']['output']>;
3201
3211
  repo: Maybe<Scalars['String']['output']>;
3212
+ /** Which repositories the installation covers: "all", or "selected" (a repository created on GitHub afterwards must be added to the installation at installUrl before it can be bound). Null when not connected. */
3213
+ repositorySelection: Maybe<Scalars['String']['output']>;
3202
3214
  };
3203
3215
  /** Recursive listing of the bound repository at one commit. The commit is the one the paths were read at, so a follow-up file read can pin it. */
3204
3216
  export type CrowdyStudioGitHubTree = {
@@ -3537,6 +3549,19 @@ export type EmailStatusRecord = {
3537
3549
  /** valid | bounced | complained. */
3538
3550
  status: Scalars['String']['output'];
3539
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
+ };
3540
3565
  /** Compute units attributed to one engine over the query window. */
3541
3566
  export type EngineComputeUnits = {
3542
3567
  __typename?: 'EngineComputeUnits';
@@ -4539,31 +4564,109 @@ export type GmSeedResult = {
4539
4564
  /** A runtime session: an isolated instance scope (e.g. a match or room) for containers. */
4540
4565
  export type GmSession = {
4541
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'];
4542
4569
  /** The app (tenant) that owns the session. */
4543
4570
  appId: Scalars['BigInt']['output'];
4571
+ /** When the session was created. */
4572
+ createdAt: Scalars['DateTime']['output'];
4544
4573
  /** The user who created the session. */
4545
4574
  createdByUserId: Maybe<Scalars['BigInt']['output']>;
4546
4575
  /** The user whose turn it currently is (turn-based play), or null. */
4547
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']>;
4548
4587
  /** JSON object of developer metadata. */
4549
4588
  metadataJson: Scalars['String']['output'];
4550
4589
  /** Optional session name. */
4551
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'];
4552
4597
  /** Unique session id. */
4553
4598
  sessionId: Scalars['String']['output'];
4554
4599
  /** Lifecycle status (e.g. active). */
4555
4600
  status: Scalars['String']['output'];
4556
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
+ };
4557
4628
  /** A user's participation in a session. */
4558
4629
  export type GmSessionParticipant = {
4559
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']>;
4560
4641
  /** The participant role within the session. */
4561
4642
  role: Scalars['String']['output'];
4562
4643
  /** The session id. */
4563
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'];
4564
4647
  /** The participant user id. */
4565
4648
  userId: Scalars['BigInt']['output'];
4566
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
+ };
4567
4670
  /** A grant of a feature key to an access tier. */
4568
4671
  export type GmTierFeature = {
4569
4672
  __typename?: 'GmTierFeature';
@@ -5064,15 +5167,30 @@ export type InvokeFunctionInput = {
5064
5167
  /** Optional session context for the invocation. */
5065
5168
  sessionId?: InputMaybe<Scalars['String']['input']>;
5066
5169
  };
5067
- /** Join an existing session. */
5170
+ /** Join an existing session, or reconnect to one you are already in. */
5068
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']>;
5069
5174
  /** The app (tenant) that owns the session. */
5070
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']>;
5071
5178
  /** Optional participant role to join as. */
5072
5179
  role?: InputMaybe<Scalars['String']['input']>;
5073
5180
  /** The session id to join. */
5074
5181
  sessionId: Scalars['String']['input'];
5075
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
+ };
5076
5194
  /** Link an additional federated identity to the signed-in account. */
5077
5195
  export type LinkIdentityInput = {
5078
5196
  code: Scalars['String']['input'];
@@ -5324,7 +5442,7 @@ export type Mutation = {
5324
5442
  gameModelCancelTimer: Scalars['Int']['output'];
5325
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. */
5326
5444
  gameModelCreateContainer: GmContainer;
5327
- /** 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. */
5328
5446
  gameModelCreateSession: GmSession;
5329
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'). */
5330
5448
  gameModelDefineFeature: GmAppFeature;
@@ -5342,14 +5460,18 @@ export type Mutation = {
5342
5460
  gameModelDeleteFunction: Scalars['Boolean']['output'];
5343
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. */
5344
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;
5345
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. */
5346
5466
  gameModelEnsureContainer: GmEnsureContainerResult;
5347
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'). */
5348
5468
  gameModelGrantTierFeature: GmTierFeature;
5349
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. */
5350
5470
  gameModelInvoke: GmInvokeResult;
5351
- /** 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. */
5352
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;
5353
5475
  /** Revoke a feature key from an access tier. Requires app-admin ('manage_apps'). Returns true if a grant was removed. */
5354
5476
  gameModelRevokeTierFeature: Scalars['Boolean']['output'];
5355
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'). */
@@ -5366,8 +5488,12 @@ export type Mutation = {
5366
5488
  gameModelSetPolicy: GmAppPolicy;
5367
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. */
5368
5490
  gameModelSetProperty: GmContainer;
5369
- /** 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. */
5370
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;
5371
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. */
5372
5498
  gameModelUpsertAutomation: GmAutomation;
5373
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'). */
@@ -5964,6 +6090,9 @@ export type MutationGameModelDeletePropertyDefArgs = {
5964
6090
  containerTypeName: Scalars['String']['input'];
5965
6091
  key: Scalars['String']['input'];
5966
6092
  };
6093
+ export type MutationGameModelEndSessionArgs = {
6094
+ input: EndSessionInput;
6095
+ };
5967
6096
  export type MutationGameModelEnsureContainerArgs = {
5968
6097
  input: EnsureContainerInput;
5969
6098
  };
@@ -5976,6 +6105,9 @@ export type MutationGameModelInvokeArgs = {
5976
6105
  export type MutationGameModelJoinSessionArgs = {
5977
6106
  input: JoinSessionInput;
5978
6107
  };
6108
+ export type MutationGameModelLeaveSessionArgs = {
6109
+ input: LeaveSessionInput;
6110
+ };
5979
6111
  export type MutationGameModelRevokeTierFeatureArgs = {
5980
6112
  input: GrantTierFeatureInput;
5981
6113
  };
@@ -6003,9 +6135,15 @@ export type MutationGameModelSetPolicyArgs = {
6003
6135
  export type MutationGameModelSetPropertyArgs = {
6004
6136
  input: SetContainerPropertyInput;
6005
6137
  };
6138
+ export type MutationGameModelSetSessionAdmissionArgs = {
6139
+ input: SetSessionAdmissionInput;
6140
+ };
6006
6141
  export type MutationGameModelSetSessionTurnArgs = {
6007
6142
  input: SetSessionTurnInput;
6008
6143
  };
6144
+ export type MutationGameModelTransferSessionHostArgs = {
6145
+ input: TransferSessionHostInput;
6146
+ };
6009
6147
  export type MutationGameModelUpsertAutomationArgs = {
6010
6148
  input: UpsertAutomationInput;
6011
6149
  };
@@ -7915,9 +8053,15 @@ export type Query = {
7915
8053
  gameModelPolicy: GmAppPolicy;
7916
8054
  /** List the property definitions for a container type. Requires app-admin ('manage_apps'). */
7917
8055
  gameModelPropertyDefs: Array<GmPropertyDef>;
7918
- /** 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. */
7919
8057
  gameModelSession: GmSession;
7920
- /** 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. */
7921
8065
  gameModelSessions: Array<GmSession>;
7922
8066
  /** List tier -> feature grants for an app, optionally filtered to one tier. Requires app-admin ('manage_apps'). */
7923
8067
  gameModelTierFeatures: Array<GmTierFeature>;
@@ -8538,8 +8682,25 @@ export type QueryGameModelSessionArgs = {
8538
8682
  appId: Scalars['BigInt']['input'];
8539
8683
  sessionId: Scalars['String']['input'];
8540
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
+ };
8541
8699
  export type QueryGameModelSessionsArgs = {
8700
+ admission?: InputMaybe<Scalars['String']['input']>;
8542
8701
  appId: Scalars['BigInt']['input'];
8702
+ hostUserId?: InputMaybe<Scalars['BigInt']['input']>;
8703
+ limit?: InputMaybe<Scalars['Int']['input']>;
8543
8704
  status?: InputMaybe<Scalars['String']['input']>;
8544
8705
  };
8545
8706
  export type QueryGameModelTierFeaturesArgs = {
@@ -9767,10 +9928,27 @@ export type SetRateCardResult = {
9767
9928
  /** The dimension as it now stands. */
9768
9929
  entry: RateCardEntryType;
9769
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
+ };
9770
9944
  /** Set or clear the current-turn user of a session. */
9771
9945
  export type SetSessionTurnInput = {
9772
9946
  /** The app (tenant) that owns the session. */
9773
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']>;
9774
9952
  /** The session id to update. */
9775
9953
  sessionId: Scalars['String']['input'];
9776
9954
  /** The user whose turn it now is (NULL clears the turn). */
@@ -9870,6 +10048,8 @@ export type Subscription = {
9870
10048
  gameModelActivePlayerCountChanged: GameModelActivePlayerCountChange;
9871
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. */
9872
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;
9873
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. */
9874
10054
  udpNotifications: Maybe<UdpNotification>;
9875
10055
  };
@@ -9881,6 +10061,11 @@ export type SubscriptionGameModelContainerChangedArgs = {
9881
10061
  sessionId?: InputMaybe<Scalars['String']['input']>;
9882
10062
  typeName?: InputMaybe<Scalars['String']['input']>;
9883
10063
  };
10064
+ export type SubscriptionGameModelSessionChangedArgs = {
10065
+ afterRevision?: InputMaybe<Scalars['String']['input']>;
10066
+ appId: Scalars['BigInt']['input'];
10067
+ sessionId: Scalars['String']['input'];
10068
+ };
9884
10069
  export type TeleportRequestInput = {
9885
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. */
9886
10071
  appId: Scalars['BigInt']['input'];
@@ -9927,6 +10112,19 @@ export type TransferPlayerCodeListingInput = {
9927
10112
  /** Numeric user id or org id of the new owner, per toOwnerKind. */
9928
10113
  toOwnerRef: Scalars['BigInt']['input'];
9929
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
+ };
9930
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). */
9931
10129
  export declare enum UdpErrorCode {
9932
10130
  /** No app matches the supplied appId. */
@@ -14470,6 +14668,37 @@ export type GmSessionFieldsFragment = {
14470
14668
  createdByUserId: string | null;
14471
14669
  currentTurnUserId: string | null;
14472
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;
14473
14702
  };
14474
14703
  export type GmContainerFieldsFragment = {
14475
14704
  __typename?: 'GmContainer';
@@ -14519,6 +14748,16 @@ export type GameModelCreateSessionMutation = {
14519
14748
  createdByUserId: string | null;
14520
14749
  currentTurnUserId: string | null;
14521
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;
14522
14761
  };
14523
14762
  };
14524
14763
  export type GameModelJoinSessionMutationVariables = Exact<{
@@ -14531,6 +14770,30 @@ export type GameModelJoinSessionMutation = {
14531
14770
  sessionId: string;
14532
14771
  userId: string;
14533
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;
14534
14797
  };
14535
14798
  };
14536
14799
  export type GameModelSetSessionTurnMutationVariables = Exact<{
@@ -14547,6 +14810,94 @@ export type GameModelSetSessionTurnMutation = {
14547
14810
  createdByUserId: string | null;
14548
14811
  currentTurnUserId: string | null;
14549
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;
14550
14901
  };
14551
14902
  };
14552
14903
  export type GameModelCreateContainerMutationVariables = Exact<{
@@ -14765,11 +15116,24 @@ export type GameModelSessionQuery = {
14765
15116
  createdByUserId: string | null;
14766
15117
  currentTurnUserId: string | null;
14767
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;
14768
15129
  };
14769
15130
  };
14770
15131
  export type GameModelSessionsQueryVariables = Exact<{
14771
15132
  appId: Scalars['BigInt']['input'];
14772
15133
  status?: InputMaybe<Scalars['String']['input']>;
15134
+ admission?: InputMaybe<Scalars['String']['input']>;
15135
+ hostUserId?: InputMaybe<Scalars['BigInt']['input']>;
15136
+ limit?: InputMaybe<Scalars['Int']['input']>;
14773
15137
  }>;
14774
15138
  export type GameModelSessionsQuery = {
14775
15139
  __typename?: 'Query';
@@ -14782,8 +15146,152 @@ export type GameModelSessionsQuery = {
14782
15146
  createdByUserId: string | null;
14783
15147
  currentTurnUserId: string | null;
14784
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;
14785
15159
  }>;
14786
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
+ };
14787
15295
  export type GameModelEventsQueryVariables = Exact<{
14788
15296
  appId: Scalars['BigInt']['input'];
14789
15297
  sessionId?: InputMaybe<Scalars['String']['input']>;
@@ -19345,6 +19853,8 @@ export declare const GmAutomationPolicyFieldsFragmentDoc: DocumentNode<GmAutomat
19345
19853
  export declare const GmAutomationRunFieldsFragmentDoc: DocumentNode<GmAutomationRunFieldsFragment, unknown>;
19346
19854
  export declare const GmTimerFieldsFragmentDoc: DocumentNode<GmTimerFieldsFragment, unknown>;
19347
19855
  export declare const GmSessionFieldsFragmentDoc: DocumentNode<GmSessionFieldsFragment, unknown>;
19856
+ export declare const GmSessionParticipantFieldsFragmentDoc: DocumentNode<GmSessionParticipantFieldsFragment, unknown>;
19857
+ export declare const GmSessionEventFieldsFragmentDoc: DocumentNode<GmSessionEventFieldsFragment, unknown>;
19348
19858
  export declare const GmContainerFieldsFragmentDoc: DocumentNode<GmContainerFieldsFragment, unknown>;
19349
19859
  export declare const GmInvokeResultFieldsFragmentDoc: DocumentNode<GmInvokeResultFieldsFragment, unknown>;
19350
19860
  export declare const GmFunctionFieldsFragmentDoc: DocumentNode<GmFunctionFieldsFragment, unknown>;
@@ -19514,7 +20024,11 @@ export declare const GameModelActivePlayerCountDocument: DocumentNode<GameModelA
19514
20024
  export declare const GameModelActivePlayerCountChangedDocument: DocumentNode<GameModelActivePlayerCountChangedSubscription, GameModelActivePlayerCountChangedSubscriptionVariables>;
19515
20025
  export declare const GameModelCreateSessionDocument: DocumentNode<GameModelCreateSessionMutation, GameModelCreateSessionMutationVariables>;
19516
20026
  export declare const GameModelJoinSessionDocument: DocumentNode<GameModelJoinSessionMutation, GameModelJoinSessionMutationVariables>;
20027
+ export declare const GameModelLeaveSessionDocument: DocumentNode<GameModelLeaveSessionMutation, GameModelLeaveSessionMutationVariables>;
19517
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>;
19518
20032
  export declare const GameModelCreateContainerDocument: DocumentNode<GameModelCreateContainerMutation, GameModelCreateContainerMutationVariables>;
19519
20033
  export declare const GameModelDeleteContainerDocument: DocumentNode<GameModelDeleteContainerMutation, GameModelDeleteContainerMutationVariables>;
19520
20034
  export declare const GameModelSetPropertyDocument: DocumentNode<GameModelSetPropertyMutation, GameModelSetPropertyMutationVariables>;
@@ -19528,6 +20042,10 @@ export declare const GameModelContainerStateDocument: DocumentNode<GameModelCont
19528
20042
  export declare const GameModelTraverseDocument: DocumentNode<GameModelTraverseQuery, GameModelTraverseQueryVariables>;
19529
20043
  export declare const GameModelSessionDocument: DocumentNode<GameModelSessionQuery, GameModelSessionQueryVariables>;
19530
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>;
19531
20049
  export declare const GameModelEventsDocument: DocumentNode<GameModelEventsQuery, GameModelEventsQueryVariables>;
19532
20050
  export declare const GameModelEventsConnectionDocument: DocumentNode<GameModelEventsConnectionQuery, GameModelEventsConnectionQueryVariables>;
19533
20051
  export declare const GameModelFlowDocument: DocumentNode<GameModelFlowQuery, GameModelFlowQueryVariables>;