@crowdedkingdomstudios/crowdyjs 5.1.0 → 5.2.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 (75) hide show
  1. package/MIGRATION.md +64 -0
  2. package/README.md +19 -0
  3. package/dist/client.d.ts +98 -5
  4. package/dist/client.d.ts.map +1 -1
  5. package/dist/client.js +74 -5
  6. package/dist/crowdy-client.d.ts +31 -0
  7. package/dist/crowdy-client.d.ts.map +1 -1
  8. package/dist/crowdy-client.js +8 -0
  9. package/dist/domains/actors.d.ts +88 -5
  10. package/dist/domains/actors.d.ts.map +1 -1
  11. package/dist/domains/actors.js +89 -6
  12. package/dist/domains/apps.d.ts +95 -41
  13. package/dist/domains/apps.d.ts.map +1 -1
  14. package/dist/domains/apps.js +80 -33
  15. package/dist/domains/auth.d.ts +139 -19
  16. package/dist/domains/auth.d.ts.map +1 -1
  17. package/dist/domains/auth.js +137 -17
  18. package/dist/domains/channels.d.ts +264 -5
  19. package/dist/domains/channels.d.ts.map +1 -1
  20. package/dist/domains/channels.js +264 -5
  21. package/dist/domains/chunks.d.ts +116 -3
  22. package/dist/domains/chunks.d.ts.map +1 -1
  23. package/dist/domains/chunks.js +116 -3
  24. package/dist/domains/gameModel.d.ts +412 -6
  25. package/dist/domains/gameModel.d.ts.map +1 -1
  26. package/dist/domains/gameModel.js +412 -6
  27. package/dist/domains/platform.d.ts +36 -20
  28. package/dist/domains/platform.d.ts.map +1 -1
  29. package/dist/domains/platform.js +29 -18
  30. package/dist/domains/serverStatus.d.ts +74 -6
  31. package/dist/domains/serverStatus.d.ts.map +1 -1
  32. package/dist/domains/serverStatus.js +74 -6
  33. package/dist/domains/state.d.ts +50 -2
  34. package/dist/domains/state.d.ts.map +1 -1
  35. package/dist/domains/state.js +50 -2
  36. package/dist/domains/teams.d.ts +265 -7
  37. package/dist/domains/teams.d.ts.map +1 -1
  38. package/dist/domains/teams.js +267 -9
  39. package/dist/domains/teleport.d.ts +30 -2
  40. package/dist/domains/teleport.d.ts.map +1 -1
  41. package/dist/domains/teleport.js +30 -2
  42. package/dist/domains/udp.d.ts +341 -5
  43. package/dist/domains/udp.d.ts.map +1 -1
  44. package/dist/domains/udp.js +341 -5
  45. package/dist/domains/users.d.ts +42 -11
  46. package/dist/domains/users.d.ts.map +1 -1
  47. package/dist/domains/users.js +41 -10
  48. package/dist/domains/voxels.d.ts +107 -2
  49. package/dist/domains/voxels.d.ts.map +1 -1
  50. package/dist/domains/voxels.js +107 -2
  51. package/dist/errors.d.ts +116 -0
  52. package/dist/errors.d.ts.map +1 -1
  53. package/dist/errors.js +100 -0
  54. package/dist/generated/graphql.d.ts +1787 -110
  55. package/dist/generated/graphql.d.ts.map +1 -1
  56. package/dist/generated/graphql.js +75 -9
  57. package/dist/index.d.ts +2 -1
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +2 -1
  60. package/dist/realtime.d.ts +226 -0
  61. package/dist/realtime.d.ts.map +1 -1
  62. package/dist/realtime.js +90 -0
  63. package/dist/session.d.ts +46 -0
  64. package/dist/session.d.ts.map +1 -1
  65. package/dist/session.js +35 -0
  66. package/dist/types.d.ts +429 -0
  67. package/dist/types.d.ts.map +1 -1
  68. package/dist/types.js +53 -0
  69. package/dist/utils.d.ts +86 -0
  70. package/dist/utils.d.ts.map +1 -1
  71. package/dist/utils.js +86 -0
  72. package/dist/world.d.ts +192 -0
  73. package/dist/world.d.ts.map +1 -1
  74. package/dist/world.js +170 -0
  75. package/package.json +1 -1
@@ -42,7 +42,7 @@ export type Scalars = {
42
42
  input: number;
43
43
  output: number;
44
44
  };
45
- /** BigInt custom scalar type. Input should be a string representation of a BigInt. */
45
+ /** Arbitrary-precision signed integer (used for 64-bit ids and chunk coordinates such as appId, userId and chunk x/y/z). ALWAYS transmitted as a base-10 decimal STRING in BOTH directions — send it quoted (e.g. "1024", "-5") and read it back as a string; never use a raw JSON number, because large values overflow IEEE-754 doubles. The server rejects any value that is not a valid integer string. */
46
46
  BigInt: {
47
47
  input: string;
48
48
  output: string;
@@ -55,20 +55,41 @@ export type Scalars = {
55
55
  };
56
56
  export type Actor = {
57
57
  __typename?: 'Actor';
58
+ /** App (game) this actor belongs to. BigInt serialized as a decimal string. */
58
59
  appId: Scalars['BigInt']['output'];
60
+ /** Avatar this actor is using, or null. BigInt serialized as a decimal string. */
59
61
  avatarId: Maybe<Scalars['BigInt']['output']>;
62
+ /** Chunk-grid coordinates (x, y, z as int64 BigInt decimal strings) locating the actor in the world. */
60
63
  chunk: ChunkCoordinates;
64
+ /** Server timestamp (ISO-8601) when the actor row was created. Used as the primary ordering key for host election (oldest fresh actor wins). */
61
65
  createdAt: Scalars['DateTime']['output'];
66
+ /** Owner-only private state blob, base64-encoded binary. Stripped (returned null) for non-owners and in public/batch reads such as `batchLookupActors`. */
62
67
  privateState: Maybe<Scalars['String']['output']>;
68
+ /** Public state blob, base64-encoded binary; visible to all viewers. */
63
69
  publicState: Maybe<Scalars['String']['output']>;
70
+ /** Liveness timestamp (ISO-8601), refreshed by the `actorHeartbeat` mutation. Host election treats actors with a recent `updatedAt` as fresh; stale rows age out of eligibility. */
64
71
  updatedAt: Scalars['DateTime']['output'];
72
+ /** Owner user id. BigInt serialized as a decimal string. Ownership gates writes and access to `privateState`. */
65
73
  userId: Scalars['BigInt']['output'];
74
+ /** Actor id and primary key: a 32-character ASCII identifier (exactly 32 ASCII characters / 32 raw octets on the UDP wire). This is NOT a hyphenated RFC-4122 UUID. This is the value accepted by all actor `uuid` arguments. */
66
75
  uuid: Scalars['ID']['output'];
67
76
  };
77
+ /** An edge in a Actor connection. */
78
+ export type ActorEdge = {
79
+ __typename?: 'ActorEdge';
80
+ /** Opaque cursor for this edge. */
81
+ cursor: Scalars['String']['output'];
82
+ /** The node at the end of this edge. */
83
+ node: Actor;
84
+ };
68
85
  export type ActorFilterInput = {
86
+ /** Restrict to actors in this app. BigInt sent as a decimal string. */
69
87
  appId?: InputMaybe<Scalars['BigInt']['input']>;
88
+ /** Restrict to actors using this avatar. BigInt sent as a decimal string. */
70
89
  avatarId?: InputMaybe<Scalars['BigInt']['input']>;
90
+ /** Restrict to actors in this chunk (x, y, z as int64 BigInt decimal strings). */
71
91
  chunk?: InputMaybe<ChunkCoordinatesInput>;
92
+ /** Restrict to a single actor by its 32-character ASCII actor id (the UDP-wire id, not a hyphenated UUID). */
72
93
  uuid?: InputMaybe<Scalars['String']['input']>;
73
94
  };
74
95
  /** Notification received when an actor (player or NPC) state is updated by another client or the server. Received via the udpNotifications subscription. */
@@ -105,7 +126,7 @@ export type ActorUpdateRequestInput = {
105
126
  decayRate?: InputMaybe<Scalars['Int']['input']>;
106
127
  /** Chunk replication distance (0-8). Defaults to 8 for actor updates. Clamped to 0-8. */
107
128
  distance?: InputMaybe<Scalars['Int']['input']>;
108
- /** Client's sequence number for this message (0-255, wraps). Used to match error responses. */
129
+ /** Client-assigned correlation id for this datagram: a uint8 (0-255) that wraps at gameClientBootstrap.sequenceNumberModulo (256); defaults to 0 if omitted. For CORRELATION ONLY — it is NOT an idempotency key and the server does not dedupe replays. Echoed on the matching response and on any GenericErrorResponse for this send, both delivered on the udpNotifications subscription. */
109
130
  sequenceNumber?: InputMaybe<Scalars['Int']['input']>;
110
131
  /** The actor state data, base64-encoded. May be an empty string for registration-only updates (no state payload). */
111
132
  state: Scalars['String']['input'];
@@ -129,220 +150,430 @@ export type ActorUpdateResponse = {
129
150
  distance: Scalars['Int']['output'];
130
151
  /** Server-generated epoch milliseconds timestamp. */
131
152
  epochMillis: Scalars['BigInt']['output'];
132
- /** The sequence number echoed back from the request, used to correlate responses. */
153
+ /** The sequenceNumber echoed back from the originating sendActorUpdate request (a uint8, 0-255, wrapping at modulo 256). Use it to correlate this response with that send. Correlation only — not an idempotency key. */
133
154
  sequenceNumber: Scalars['Int']['output'];
134
155
  /** The unique identifier of the actor that was updated. */
135
156
  uuid: Scalars['String']['output'];
136
157
  };
158
+ /** Relay-style cursor-paginated connection over the caller’s actors (Actor). Page with `first`/`after`; cursors are opaque. */
159
+ export type ActorsConnection = {
160
+ __typename?: 'ActorsConnection';
161
+ /** Edges on this page. */
162
+ edges: Array<ActorEdge>;
163
+ /** Pagination metadata. */
164
+ pageInfo: ConnectionPageInfo;
165
+ /** Total matching records across all pages, when known (null for sources that do not compute a total). */
166
+ totalCount: Maybe<Scalars['Int']['output']>;
167
+ };
168
+ /** Create a directed edge between two containers. */
137
169
  export type AddEdgeInput = {
170
+ /** The app (tenant) that owns the containers. */
138
171
  appId: Scalars['BigInt']['input'];
172
+ /** Source container id. */
139
173
  fromContainerId: Scalars['String']['input'];
174
+ /** JSON object of edge metadata. */
140
175
  metadataJson?: InputMaybe<Scalars['String']['input']>;
176
+ /** The relationship type label. */
141
177
  relationshipType: Scalars['String']['input'];
178
+ /** Target container id. */
142
179
  toContainerId: Scalars['String']['input'];
180
+ /** Optional edge weight. */
143
181
  weight?: InputMaybe<Scalars['Float']['input']>;
144
182
  };
183
+ /** A publishable application (game/experience) owned by an organization. Its discoverability is controlled by visibility and its lifecycle by status. */
145
184
  export type App = {
146
185
  __typename?: 'App';
186
+ /** Unique numeric identifier of the app (primary key). */
147
187
  appId: Scalars['BigInt']['output'];
188
+ /** Timestamp when the app was created. */
148
189
  createdAt: Scalars['DateTime']['output'];
190
+ /** Numeric user id of the account that created the app. */
149
191
  createdBy: Scalars['BigInt']['output'];
192
+ /** Where the app runs: "none" (draft / not deployed), "shared" (the shared game-api), or "dedicated" (a provisioned per-tenant environment). */
150
193
  deploymentTarget: Scalars['String']['output'];
194
+ /** Short plain-text description shown in listings; also matched by the marketplace free-text filter. */
151
195
  description: Maybe<Scalars['String']['output']>;
196
+ /** Resolved game-api base URL for SDK/runtime calls: the per-tenant URL for dedicated apps, or the shared platform URL for shared apps. Null for legacy or not-yet-deployed apps. */
152
197
  gameApiUrl: Maybe<Scalars['String']['output']>;
198
+ /** Opaque JSON-encoded string of marketplace media (cover image URL, screenshots, long description, etc.). Stored internally as JSONB; clients must JSON.parse on read and JSON.stringify on write. Null/"{}" when unset. */
153
199
  metadata: Maybe<Scalars['String']['output']>;
200
+ /** Human-readable display name of the app. */
154
201
  name: Scalars['String']['output'];
202
+ /** The organization that owns this app. Null if the owning org cannot be found. */
155
203
  org: Maybe<Organization>;
204
+ /** Numeric id of the organization that owns this app. */
156
205
  orgId: Scalars['BigInt']['output'];
206
+ /** When runtimeStatus is not "active", why the runtime is gated: "free_allowance", "insufficient_funds", "spend_cap", or "subscription_lapsed". Null when active. */
157
207
  runtimeDenialReason: Maybe<Scalars['String']['output']>;
208
+ /** Shared-environment runtime gate, mirrored to the game DB and enforced by game-api + Buddy: "active", "grace", "denied", or "suspended". */
158
209
  runtimeStatus: Scalars['String']['output'];
210
+ /** URL-safe slug, unique within the org; combined with the org slug to form the marketplace path. May be null for legacy rows. */
159
211
  slug: Maybe<Scalars['String']['output']>;
212
+ /** True when this app's runtime data lives in a dedicated per-tenant game-api database (rather than the shared game-api). Used together with gameApiUrl to route gameplay calls. */
160
213
  splitMode: Scalars['Boolean']['output'];
214
+ /** Base64-encoded binary blob of the app's persisted runtime/world state; opaque to clients and potentially large. Null when no state has been saved. */
161
215
  state: Maybe<Scalars['String']['output']>;
216
+ /** Lifecycle state (DRAFT/LIVE/ARCHIVED). See AppStatus. */
162
217
  status: AppStatus;
218
+ /** Timestamp when the app was last updated. */
163
219
  updatedAt: Scalars['DateTime']['output'];
220
+ /** Marketplace discoverability (PUBLIC/UNLISTED/PRIVATE). See AppVisibility. */
164
221
  visibility: AppVisibility;
165
222
  };
223
+ /** A free or purchasable access tier for an app, bundling a price and the set of runtime permission keys that granted users receive. */
166
224
  export type AppAccessTier = {
167
225
  __typename?: 'AppAccessTier';
226
+ /** Numeric id of the app this tier belongs to. */
168
227
  appId: Scalars['BigInt']['output'];
228
+ /** Billing cadence for recurring tiers (e.g. "month", "year"); null for one-time or free tiers. */
169
229
  billingPeriod: Maybe<Scalars['String']['output']>;
230
+ /** Timestamp when the tier was created. */
170
231
  createdAt: Scalars['DateTime']['output'];
232
+ /** ISO 4217 currency code for priceCents (e.g. "usd"); defaults to "usd". */
171
233
  currency: Maybe<Scalars['String']['output']>;
234
+ /** Optional marketing description of what the tier includes. */
172
235
  description: Maybe<Scalars['String']['output']>;
236
+ /** True if this is the app default tier (used for open-by-default / self-service grants). At most one default per app is expected. */
173
237
  isDefault: Scalars['Boolean']['output'];
238
+ /** True if the tier has no purchase cost. */
174
239
  isFree: Scalars['Boolean']['output'];
240
+ /** Display name of the tier (e.g. "Free", "Pro"). */
175
241
  name: Scalars['String']['output'];
242
+ /** Runtime permission keys granted to users on this tier (a subset of runtimePermissions), e.g. "access", "teleport", "update_voxel_data", "use_voice_chat". */
176
243
  permissionKeys: Array<Scalars['String']['output']>;
244
+ /** Price in the smallest currency unit (cents) for paid tiers; null for free tiers. */
177
245
  priceCents: Maybe<Scalars['BigInt']['output']>;
246
+ /** Tier lifecycle: "active" or "archived" (soft-deleted via archiveAccessTier). Defaults to "active". */
178
247
  status: Scalars['String']['output'];
248
+ /** Unique numeric id of the tier (primary key). */
179
249
  tierId: Scalars['BigInt']['output'];
250
+ /** Sort order for displaying tiers (ascending); lower values appear first. */
180
251
  tierOrder: Scalars['Float']['output'];
252
+ /** Timestamp when the tier was last updated. */
181
253
  updatedAt: Scalars['DateTime']['output'];
182
254
  };
183
255
  export type AppAvatarState = {
184
256
  __typename?: 'AppAvatarState';
257
+ /** App (game) id this state is scoped to. BigInt serialized as a decimal string. */
185
258
  appId: Scalars['BigInt']['output'];
259
+ /** Avatar id this state belongs to. BigInt serialized as a decimal string. */
186
260
  avatarId: Scalars['BigInt']['output'];
261
+ /** Row creation timestamp (ISO-8601). */
187
262
  createdAt: Scalars['DateTime']['output'];
263
+ /** Per-app avatar state blob, base64-encoded binary; null when cleared. Owner-exclusive write, public read. */
188
264
  state: Maybe<Scalars['String']['output']>;
265
+ /** Last-update timestamp (ISO-8601). */
189
266
  updatedAt: Scalars['DateTime']['output'];
190
267
  };
191
268
  export type AppBudget = {
192
269
  __typename?: 'AppBudget';
270
+ /** Unique app-budget id (BigInt as a decimal string). */
193
271
  appBudgetId: Scalars['BigInt']['output'];
272
+ /** App this budget applies to (BigInt as a decimal string). */
194
273
  appId: Scalars['BigInt']['output'];
274
+ /** When the budget was first created (ISO-8601 UTC timestamp). */
195
275
  createdAt: Scalars['DateTime']['output'];
276
+ /** Spend so far in the current monthly period, in minor currency units (cents) as a BigInt decimal string. Resets when `periodStart` rolls over to a new month. */
196
277
  currentMonthUsageCents: Scalars['BigInt']['output'];
278
+ /** Monthly spend cap in minor currency units (cents) as a BigInt decimal string; null means no cap is configured (unlimited). */
197
279
  monthlyLimitCents: Maybe<Scalars['BigInt']['output']>;
280
+ /** Organization that owns the app (BigInt as a decimal string). */
198
281
  orgId: Scalars['BigInt']['output'];
282
+ /** Start of the current monthly budget period (ISO-8601 UTC timestamp), truncated to the first day of the month. */
199
283
  periodStart: Scalars['DateTime']['output'];
284
+ /** When the budget was last updated (ISO-8601 UTC timestamp). */
200
285
  updatedAt: Scalars['DateTime']['output'];
201
286
  };
202
287
  /** Where an app runs: none (draft), shared (the shared game-api), or dedicated (a provisioned environment). */
203
288
  export declare enum AppDeploymentTarget {
289
+ /** Runs on a dedicated, org-provisioned environment. */
204
290
  Dedicated = "DEDICATED",
291
+ /** Draft / unpublished: the app is not deployed to any runtime. */
205
292
  None = "NONE",
293
+ /** Runs on the multi-tenant shared game-api (publishAppToShared). */
206
294
  Shared = "SHARED"
207
295
  }
296
+ /** An edge in a App connection. */
297
+ export type AppEdge = {
298
+ __typename?: 'AppEdge';
299
+ /** Opaque cursor for this edge. */
300
+ cursor: Scalars['String']['output'];
301
+ /** The node at the end of this edge. */
302
+ node: App;
303
+ };
304
+ /** Org member eligible for app access grants. Scoped to the app org; requires manage_access_tiers. */
305
+ export type AppGrantMemberCandidate = {
306
+ __typename?: 'AppGrantMemberCandidate';
307
+ /** Email of the candidate, if known. */
308
+ email: Maybe<Scalars['String']['output']>;
309
+ /** Gamertag / display handle of the candidate, if set. */
310
+ gamertag: Maybe<Scalars['String']['output']>;
311
+ /** Numeric id of the candidate user (use with grantAppAccess). */
312
+ userId: Scalars['BigInt']['output'];
313
+ };
314
+ /** Per-app, per-type policy controlling who may create groups of a type and the default membership policy of new groups. */
208
315
  export type AppGroupPolicy = {
209
316
  __typename?: 'AppGroupPolicy';
317
+ /** The app (tenant) the policy applies to. */
210
318
  appId: Scalars['BigInt']['output'];
211
319
  /** admin | member | anyone */
212
320
  creationPolicy: Scalars['String']['output'];
213
321
  /** open | request | invite | admin */
214
322
  defaultMembershipPolicy: Scalars['String']['output'];
323
+ /** The group type the policy governs: 'team' | 'channel' | 'grid'. */
215
324
  groupType: Scalars['String']['output'];
325
+ /** Optional cap on groups of this type a user may belong to (null = unlimited). */
216
326
  maxGroupsPerUser: Maybe<Scalars['Int']['output']>;
327
+ /** Optional cap on members per group (null = unlimited). */
217
328
  maxMembers: Maybe<Scalars['Int']['output']>;
218
329
  };
330
+ /** Optional filters for the public marketplace apps listing. */
219
331
  export type AppMarketplaceFilterInput = {
332
+ /** Restrict results to a single organization by its slug (storefront view). Omit to search across all orgs. */
220
333
  orgSlug?: InputMaybe<Scalars['String']['input']>;
334
+ /** Free-text search applied to app name and description (case-insensitive substring match). Omit for no text filter. */
221
335
  query?: InputMaybe<Scalars['String']['input']>;
222
336
  };
223
337
  /** The shared-environment runtime gate + current billing-window usage for an app. */
224
338
  export type AppRuntimeState = {
225
339
  __typename?: 'AppRuntimeState';
340
+ /** App id (BigInt). */
226
341
  appId: Scalars['BigInt']['output'];
342
+ /** Spend so far in the current day window, in cents. */
227
343
  currentDayUsageCents: Scalars['BigInt']['output'];
344
+ /** Spend so far in the current hour window, in cents. */
228
345
  currentHourUsageCents: Scalars['BigInt']['output'];
346
+ /** Per-app daily spend cap in cents (set via setAppSpendCaps). Null = no cap. */
229
347
  dailyLimitCents: Maybe<Scalars['BigInt']['output']>;
348
+ /** Where the app runs (none / shared / dedicated). */
230
349
  deploymentTarget: AppDeploymentTarget;
350
+ /** Per-app hourly spend cap in cents (set via setAppSpendCaps). Null = no cap. */
231
351
  hourlyLimitCents: Maybe<Scalars['BigInt']['output']>;
232
352
  /** free_allowance | insufficient_funds | spend_cap | subscription_lapsed when not active. */
233
353
  runtimeDenialReason: Maybe<Scalars['String']['output']>;
354
+ /** Current runtime gate decision (active / grace / denied / suspended). */
234
355
  runtimeStatus: AppRuntimeStatus;
356
+ /** Owning org wallet balance, in cents. */
235
357
  walletBalanceCents: Scalars['BigInt']['output'];
236
358
  };
237
- /** The per-app runtime gate game-api + Buddy enforce: active, grace, denied, or suspended. */
359
+ /** The per-app runtime gate game-api + Buddy enforce. See runtimeDenialReason when not active. */
238
360
  export declare enum AppRuntimeStatus {
361
+ /** Allowed to run; clients may connect. */
239
362
  Active = "ACTIVE",
363
+ /** Blocked from running now (e.g. insufficient funds, spend cap hit, or free allowance exhausted); recoverable once the cause clears. */
240
364
  Denied = "DENIED",
365
+ /** Still running on a temporary allowance (e.g. low funds) but at risk of being denied soon. */
241
366
  Grace = "GRACE",
367
+ /** Hard-stopped (e.g. lapsed subscription); requires action to restore. */
242
368
  Suspended = "SUSPENDED"
243
369
  }
370
+ /** An app's paid shared-environment subscription. Null (from appSharedSubscription) when the app has none / is on the free quota. */
244
371
  export type AppSharedSubscription = {
245
372
  __typename?: 'AppSharedSubscription';
373
+ /** App id (BigInt). */
246
374
  appId: Scalars['BigInt']['output'];
375
+ /** End of the current paid period (when access lapses if not renewed). */
247
376
  currentPeriodEnd: Maybe<Scalars['DateTime']['output']>;
377
+ /** Owning organization id (BigInt). */
248
378
  orgId: Scalars['BigInt']['output'];
379
+ /** Subscribed plan id (BigInt). Null when not on a paid plan. */
249
380
  planId: Maybe<Scalars['BigInt']['output']>;
381
+ /** Payment provider backing the subscription, e.g. 'stripe'. */
250
382
  provider: Maybe<Scalars['String']['output']>;
383
+ /** Subscription status, e.g. 'active', 'past_due', or 'canceled'. */
251
384
  status: Scalars['String']['output'];
252
385
  };
253
- /** DRAFT = invisible to non-members, LIVE = purchasable/playable, ARCHIVED = read-only */
386
+ /** Lifecycle state of an app. Independent of AppVisibility; the public marketplace requires status=LIVE. */
254
387
  export declare enum AppStatus {
388
+ /** Soft-deleted via archiveApp: retained but read-only and excluded from the marketplace. Reversible by setting status back to DRAFT or LIVE. */
255
389
  Archived = "ARCHIVED",
390
+ /** Work-in-progress: invisible to non-members and never listed in the marketplace. Default for newly created apps. */
256
391
  Draft = "DRAFT",
392
+ /** Published and purchasable/playable; eligible for the public marketplace when visibility=PUBLIC. */
257
393
  Live = "LIVE"
258
394
  }
395
+ /** Aggregate byte totals for one app over the requested window. All *Bytes fields are string counters (may exceed Int range). */
259
396
  export type AppUsageRollupRow = {
260
397
  __typename?: 'AppUsageRollupRow';
398
+ /** App id (as a string). */
261
399
  appId: Scalars['String']['output'];
400
+ /** App display name. */
262
401
  appName: Scalars['String']['output'];
402
+ /** App slug. */
263
403
  appSlug: Scalars['String']['output'];
404
+ /** Total GraphQL bytes received (string counter). */
264
405
  graphqlRecvBytes: Scalars['String']['output'];
406
+ /** Total GraphQL bytes sent (string counter). */
265
407
  graphqlSendBytes: Scalars['String']['output'];
408
+ /** Total replication bytes received (string counter). */
266
409
  replicationRecvBytes: Scalars['String']['output'];
410
+ /** Total replication bytes sent (string counter). */
267
411
  replicationSendBytes: Scalars['String']['output'];
268
412
  };
413
+ /** Aggregate byte totals plus the top GraphQL operations for one app over the window. */
269
414
  export type AppUsageSummary = {
270
415
  __typename?: 'AppUsageSummary';
416
+ /** App id (as a string). */
271
417
  appId: Scalars['String']['output'];
418
+ /** Total GraphQL bytes received (string counter). */
272
419
  graphqlRecvBytes: Scalars['String']['output'];
420
+ /** Total GraphQL bytes sent (string counter). */
273
421
  graphqlSendBytes: Scalars['String']['output'];
422
+ /** Total replication bytes received (string counter). */
274
423
  replicationRecvBytes: Scalars['String']['output'];
424
+ /** Total replication bytes sent (string counter). */
275
425
  replicationSendBytes: Scalars['String']['output'];
426
+ /** Top GraphQL operations by bytes (capped by operationLimit). */
276
427
  topGraphqlOperations: Array<GraphqlOperationUsageRow>;
277
428
  };
429
+ /** A user's entitlement to a specific app: whether (and via which tier) they may access it. At most one row per (app, user). */
278
430
  export type AppUserAccess = {
279
431
  __typename?: 'AppUserAccess';
432
+ /** Numeric id of the app this access applies to. */
280
433
  appId: Scalars['BigInt']['output'];
434
+ /** Unique numeric id of this access record (primary key). */
281
435
  appUserAccessId: Scalars['BigInt']['output'];
436
+ /** Timestamp when the access record was first created. */
282
437
  createdAt: Scalars['DateTime']['output'];
438
+ /** Optional expiry timestamp; access is treated as inactive once it has passed. Null means the grant does not expire. */
283
439
  expiresAt: Maybe<Scalars['DateTime']['output']>;
440
+ /** Who granted this access: the granting admin's numeric user id (as a string), or "system" for automatic/free-tier grants. */
284
441
  grantedBy: Scalars['String']['output'];
442
+ /** Entitlement lifecycle: "active" (currently entitled) or "revoked" (access removed). Only active, non-expired rows grant runtime access. Defaults to "active". */
285
443
  status: Scalars['String']['output'];
444
+ /** External billing subscription id (e.g. Stripe/PayPal) backing a paid grant; null for free or manual grants. */
286
445
  subscriptionId: Maybe<Scalars['String']['output']>;
446
+ /** The access tier granted by this record. Null if no tier is associated (tierId is null) or the tier could not be loaded. */
447
+ tier: Maybe<AppAccessTier>;
448
+ /** Numeric id of the access tier granting this access; null if access was granted without a specific tier. */
287
449
  tierId: Maybe<Scalars['BigInt']['output']>;
450
+ /** Timestamp when the access record was last updated (e.g. re-granted or revoked). */
288
451
  updatedAt: Scalars['DateTime']['output'];
452
+ /** The user this access record belongs to. Null if the user could not be loaded. */
453
+ user: Maybe<User>;
454
+ /** Numeric id of the user this access belongs to. */
289
455
  userId: Scalars['BigInt']['output'];
290
456
  };
291
- /** PUBLIC = listed in marketplace, UNLISTED = direct link only, PRIVATE = members only */
457
+ /** A Relay cursor connection over AppUserAccess records. Page with first/after; pass pageInfo.endCursor back as after for the next page. */
458
+ export type AppUserAccessConnection = {
459
+ __typename?: 'AppUserAccessConnection';
460
+ /** Edges on this page. */
461
+ edges: Array<AppUserAccessEdge>;
462
+ /** Pagination metadata. */
463
+ pageInfo: ConnectionPageInfo;
464
+ /** Total matching records across all pages, when known (null for sources that do not compute a total). */
465
+ totalCount: Maybe<Scalars['Int']['output']>;
466
+ };
467
+ /** An edge in a AppUserAccess connection. */
468
+ export type AppUserAccessEdge = {
469
+ __typename?: 'AppUserAccessEdge';
470
+ /** Opaque cursor for this edge. */
471
+ cursor: Scalars['String']['output'];
472
+ /** The node at the end of this edge. */
473
+ node: AppUserAccess;
474
+ };
475
+ /** Controls where an app can be discovered. Independent of AppStatus (the marketplace additionally requires status=LIVE). */
292
476
  export declare enum AppVisibility {
477
+ /** Hidden from the marketplace; visible only to org members and users with an access grant. */
293
478
  Private = "PRIVATE",
479
+ /** Listed in the public marketplace (when status=LIVE) and resolvable by slug. */
294
480
  Public = "PUBLIC",
481
+ /** Hidden from marketplace listings but accessible to anyone who knows the direct org/app slug link. */
295
482
  Unlisted = "UNLISTED"
296
483
  }
484
+ /** A Relay cursor connection over App records. Page with first/after; pass pageInfo.endCursor back as after for the next page. */
485
+ export type AppsConnection = {
486
+ __typename?: 'AppsConnection';
487
+ /** Edges on this page. */
488
+ edges: Array<AppEdge>;
489
+ /** Pagination metadata. */
490
+ pageInfo: ConnectionPageInfo;
491
+ /** Total matching records across all pages, when known (null for sources that do not compute a total). */
492
+ totalCount: Maybe<Scalars['Int']['output']>;
493
+ };
494
+ /** A paginated page of apps returned by the marketplace listing. */
297
495
  export type AppsPage = {
298
496
  __typename?: 'AppsPage';
497
+ /** The apps on this page, ordered newest-first. */
299
498
  items: Array<App>;
499
+ /** Pagination metadata: totalCount (total matches ignoring limit/offset) plus the applied limit and offset. */
300
500
  pageInfo: PageInfo;
301
501
  };
502
+ /** Grant runtime permission keys to a group (optionally one role) on a grid (writes the grid_group_grants input table). */
302
503
  export type AssignGroupToGridInput = {
504
+ /** The app (tenant) that owns the grid. */
303
505
  appId: Scalars['BigInt']['input'];
506
+ /** Optional expiry; after this time the grant stops contributing to the effective ACL. Null/omitted means it never expires. */
304
507
  expiresAt?: InputMaybe<Scalars['DateTime']['input']>;
508
+ /** The grid to grant on. */
305
509
  gridId: Scalars['BigInt']['input'];
510
+ /** The group whose members receive the grant. Must belong to the same app. */
306
511
  groupId: Scalars['BigInt']['input'];
307
512
  /** Optional: scope the grant to members holding this group role. Omit to grant to all members of the group. */
308
513
  groupRoleId?: InputMaybe<Scalars['BigInt']['input']>;
514
+ /** Runtime permission key strings to grant to the group/role. Each must be a known key in runtime_permissions, unique, and at most 64 chars. */
309
515
  permissionKeys: Array<Scalars['String']['input']>;
310
516
  };
517
+ /** Result of a successful login or registration: a session token plus the authenticated user. */
311
518
  export type AuthResponse = {
312
519
  __typename?: 'AuthResponse';
520
+ /** Identifier of the underlying session (game_token) row, as a String. */
313
521
  gameTokenId: Scalars['String']['output'];
522
+ /** Opaque session token. Send it on subsequent requests as the `Authorization: Bearer <token>` header. */
314
523
  token: Scalars['String']['output'];
524
+ /** The authenticated user. */
315
525
  user: User;
316
526
  };
317
527
  export type Avatar = {
318
528
  __typename?: 'Avatar';
529
+ /** Avatar id and primary key (auto-increment). Serialized as a GraphQL ID (a numeric string). */
319
530
  avatarId: Scalars['ID']['output'];
531
+ /** Server timestamp (ISO-8601) when the avatar was created. */
320
532
  createdAt: Scalars['DateTime']['output'];
533
+ /** Human-readable avatar name. */
321
534
  name: Scalars['String']['output'];
535
+ /** Owner-only private state blob, base64-encoded binary. Stripped (returned null) for non-owners (e.g. via `userAvatars`/`avatar` when the caller is not the owner). */
322
536
  privateState: Maybe<Scalars['String']['output']>;
537
+ /** Public state blob, base64-encoded binary; visible to all viewers. */
323
538
  publicState: Maybe<Scalars['String']['output']>;
539
+ /** Owner user id. BigInt serialized as a decimal string. NOTE: the AvatarDTO returned by `myAvatars` exposes this same value typed as a GraphQL ID instead of BigInt. */
324
540
  userId: Scalars['BigInt']['output'];
325
541
  };
326
542
  export type AvatarDto = {
327
543
  __typename?: 'AvatarDTO';
544
+ /** Avatar id, serialized as a GraphQL ID (a numeric string). */
328
545
  avatarId: Scalars['ID']['output'];
546
+ /** Server timestamp (ISO-8601) when the avatar was created. */
329
547
  createdAt: Scalars['DateTime']['output'];
548
+ /** Human-readable avatar name. */
330
549
  name: Scalars['String']['output'];
550
+ /** Owner-only private state blob, base64-encoded binary. Returned by `myAvatars` (caller is the owner); stripped to null for non-owners on other queries. */
331
551
  privateState: Maybe<Scalars['String']['output']>;
552
+ /** Public state blob, base64-encoded binary; visible to all viewers. */
332
553
  publicState: Maybe<Scalars['String']['output']>;
554
+ /** Owner user id, serialized as a GraphQL ID (a numeric string). Same underlying value as Avatar.userId, which is typed as BigInt. */
333
555
  userId: Scalars['ID']['output'];
334
556
  };
335
557
  export type BatchActorLookupInput = {
558
+ /** Actor ids to look up. Each is exactly 32 ASCII characters (the UDP-wire actor id), NOT a hyphenated RFC-4122 UUID. Must be non-empty; unknown ids are silently omitted from the result. */
336
559
  uuids: Array<Scalars['String']['input']>;
337
560
  };
561
+ /** Live (most recent heartbeat) Buddy UDP throughput rates. */
338
562
  export type BuddyLiveRates = {
339
563
  __typename?: 'BuddyLiveRates';
564
+ /** Megabits per second received from clients. */
340
565
  clientRecvMbitPerSec: Scalars['Float']['output'];
566
+ /** Messages per second received from clients. */
341
567
  clientRecvMsgsPerSec: Scalars['Float']['output'];
568
+ /** Megabits per second sent to clients. */
342
569
  clientSendMbitPerSec: Scalars['Float']['output'];
570
+ /** Messages per second sent to clients. */
343
571
  clientSendMsgsPerSec: Scalars['Float']['output'];
572
+ /** Currently connected client count. */
344
573
  clients: Scalars['Float']['output'];
574
+ /** Buddy/runtime server id reporting these rates. */
345
575
  serverId: Scalars['String']['output'];
576
+ /** Timestamp of the heartbeat these rates came from. */
346
577
  updatedAt: Scalars['DateTime']['output'];
347
578
  };
348
579
  /** Input for publishing a message to a channel. Delivered to every active member of the channel (regardless of location), not chunk-routed. The sender must have the channel send_messages permission. */
@@ -351,7 +582,7 @@ export type ChannelMessageInput = {
351
582
  channelId: Scalars['BigInt']['input'];
352
583
  /** The message payload, base64-encoded. Opaque to the server; decode per your application protocol. Max 1024 bytes. */
353
584
  payload: Scalars['String']['input'];
354
- /** Client's sequence number for this message (0-255, wraps). Used to match error responses. */
585
+ /** Client-assigned correlation id for this datagram: a uint8 (0-255) that wraps at gameClientBootstrap.sequenceNumberModulo (256); defaults to 0 if omitted. For CORRELATION ONLY — it is NOT an idempotency key and the server does not dedupe replays. Echoed on any GenericErrorResponse for this send, delivered on the udpNotifications subscription. */
355
586
  sequenceNumber?: InputMaybe<Scalars['Int']['input']>;
356
587
  /** The sender's actor UUID (your own actor's UUID). Must be exactly 32 bytes when encoded as UTF-8. */
357
588
  uuid: Scalars['String']['input'];
@@ -372,125 +603,229 @@ export type ChannelMessageNotification = {
372
603
  };
373
604
  export type Checkout = {
374
605
  __typename?: 'Checkout';
606
+ /** Charge amount in minor currency units (cents) of `currency`, as a BigInt decimal string; null when the purpose carries no amount. */
375
607
  amountCents: Maybe<Scalars['BigInt']['output']>;
608
+ /** Target app for the purpose (BigInt as a decimal string); null when not applicable. */
376
609
  appId: Maybe<Scalars['BigInt']['output']>;
610
+ /** Unique checkout id (BigInt as a decimal string). */
377
611
  checkoutId: Scalars['BigInt']['output'];
612
+ /** When the checkout reached COMPLETED (ISO-8601 UTC timestamp); null until then. */
378
613
  completedAt: Maybe<Scalars['DateTime']['output']>;
614
+ /** When the checkout was created (ISO-8601 UTC timestamp). */
379
615
  createdAt: Scalars['DateTime']['output'];
616
+ /** ISO-4217 currency code for `amountCents`, lowercase (e.g. "usd"); null when no amount applies. */
380
617
  currency: Maybe<Scalars['String']['output']>;
618
+ /** Failure reason when `status` is FAILED; null otherwise. */
381
619
  error: Maybe<Scalars['String']['output']>;
620
+ /** When the provider session expires if still unpaid (ISO-8601 UTC timestamp); null if there is no expiry. */
382
621
  expiresAt: Maybe<Scalars['DateTime']['output']>;
383
- /** Stripe Checkout Session id, PayPal Order id, etc. */
622
+ /** Identifier of the session/order in the provider (e.g. Stripe Checkout Session id, PayPal Order id). */
384
623
  externalId: Scalars['String']['output'];
385
- /** URL to redirect the user to. */
624
+ /** Provider-hosted URL to redirect the user to in order to complete payment. */
386
625
  externalUrl: Scalars['String']['output'];
626
+ /** Target organization for the purpose (BigInt as a decimal string); null when not applicable. */
387
627
  orgId: Maybe<Scalars['BigInt']['output']>;
628
+ /** Payment processor handling this checkout. */
388
629
  provider: PaymentProvider;
630
+ /** Why the checkout was created; determines the side effect applied on completion. */
389
631
  purpose: CheckoutPurpose;
632
+ /** Current lifecycle state, updated by webhook reconciliation (not by the redirect). */
390
633
  status: CheckoutStatus;
634
+ /** Access tier being purchased (BigInt as a decimal string); set for APP_ACCESS_PURCHASE, otherwise null. */
391
635
  tierId: Maybe<Scalars['BigInt']['output']>;
636
+ /** User who initiated the checkout (BigInt as a decimal string). */
392
637
  userId: Scalars['BigInt']['output'];
393
638
  };
639
+ /** An edge in a Checkout connection. */
640
+ export type CheckoutEdge = {
641
+ __typename?: 'CheckoutEdge';
642
+ /** Opaque cursor for this edge. */
643
+ cursor: Scalars['String']['output'];
644
+ /** The node at the end of this edge. */
645
+ node: Checkout;
646
+ };
394
647
  export type CheckoutFilterInput = {
648
+ /** Only return checkouts targeting this app (BigInt as a decimal string). */
395
649
  appId?: InputMaybe<Scalars['BigInt']['input']>;
650
+ /** Only return checkouts targeting this organization (BigInt as a decimal string). */
396
651
  orgId?: InputMaybe<Scalars['BigInt']['input']>;
652
+ /** Only return checkouts using this payment provider. */
397
653
  provider?: InputMaybe<PaymentProvider>;
654
+ /** Only return checkouts created for this purpose. */
398
655
  purpose?: InputMaybe<CheckoutPurpose>;
656
+ /** Only return checkouts in this lifecycle status. */
399
657
  status?: InputMaybe<CheckoutStatus>;
658
+ /** Only return checkouts created by this user (BigInt as a decimal string). */
400
659
  userId?: InputMaybe<Scalars['BigInt']['input']>;
401
660
  };
402
661
  /** Why the checkout exists. Drives which side effect runs on webhook completion: ORG_WALLET_TOPUP credits an org_wallet; APP_ACCESS_PURCHASE upserts app_user_access; DONATION inserts donations; PROPERTY_TOKENS credits property_tokens; SHARED_APP_SUBSCRIPTION activates a paid shared-environment app slot. */
403
662
  export declare enum CheckoutPurpose {
663
+ /** Purchase a user's access to an app at a given tier. Requires appId and tierId. Upserts app_user_access on completion. */
404
664
  AppAccessPurchase = "APP_ACCESS_PURCHASE",
665
+ /**
666
+ * Deprecated. Historically a one-off donation to an app. No longer purchasable and rejected at runtime by createCheckout.
667
+ * @deprecated No longer purchasable; use ORG_WALLET_TOPUP or APP_ACCESS_PURCHASE. Retained for historical checkouts.
668
+ */
405
669
  Donation = "DONATION",
670
+ /** Add funds to an organization wallet. Requires orgId and amountCents, and the caller must hold the org "manage_billing" permission. Credits the org wallet on completion. */
406
671
  OrgWalletTopup = "ORG_WALLET_TOPUP",
672
+ /**
673
+ * Deprecated. Historically a purchase of in-world property tokens. No longer purchasable and rejected at runtime by createCheckout.
674
+ * @deprecated No longer purchasable; use ORG_WALLET_TOPUP or APP_ACCESS_PURCHASE. Retained for historical checkouts.
675
+ */
407
676
  PropertyTokens = "PROPERTY_TOKENS",
677
+ /** Recurring subscription for a paid app slot on the shared environment, beyond the org's free app quota. Requires appId and planId (a shared_env_plans.plan_id). Activates the paid slot on completion. */
408
678
  SharedAppSubscription = "SHARED_APP_SUBSCRIPTION"
409
679
  }
410
680
  /** Lifecycle state of a Checkout. Updated by webhook reconciliation, not by the redirect URL. */
411
681
  export declare enum CheckoutStatus {
682
+ /** The user abandoned or canceled the checkout before completion. Terminal state. */
412
683
  Canceled = "CANCELED",
684
+ /** Payment succeeded and the purpose side effect was applied (e.g. wallet credited). Terminal success state. */
413
685
  Completed = "COMPLETED",
686
+ /** The provider session expired before payment completed (see `expiresAt`). Terminal state. */
414
687
  Expired = "EXPIRED",
688
+ /** Payment attempt failed or was declined; see the checkout `error` field for details. Terminal failure state. */
415
689
  Failed = "FAILED",
690
+ /** Created and awaiting payment. Initial state right after createCheckout; the user has not finished paying yet. */
416
691
  Pending = "PENDING"
417
692
  }
693
+ /** A Relay cursor connection over Checkout records. Page with first/after; pass pageInfo.endCursor back as after for the next page. */
694
+ export type CheckoutsConnection = {
695
+ __typename?: 'CheckoutsConnection';
696
+ /** Edges on this page. */
697
+ edges: Array<CheckoutEdge>;
698
+ /** Pagination metadata. */
699
+ pageInfo: ConnectionPageInfo;
700
+ /** Total matching records across all pages, when known (null for sources that do not compute a total). */
701
+ totalCount: Maybe<Scalars['Int']['output']>;
702
+ };
703
+ /** A page of checkouts with offset/limit pagination metadata. */
418
704
  export type CheckoutsPage = {
419
705
  __typename?: 'CheckoutsPage';
706
+ /** The checkouts on this page, ordered newest first. */
420
707
  items: Array<Checkout>;
708
+ /** Offset/limit pagination metadata (totalCount, limit, offset) for this result set. */
421
709
  pageInfo: PageInfo;
422
710
  };
711
+ /** A persisted 16x16x16-voxel chunk (4096 voxels) of an app's voxel world. Holds the packed voxel-type grid (`voxels`), sparse per-voxel state overrides (`voxelStates`), an optional opaque chunk-level state blob (`chunkState`), and level-of-detail meshes (`lods`). Returned by getChunk/getChunksByDistance and written by updateChunk/updateChunkState/updateChunkLods. */
423
712
  export type Chunk = {
424
713
  __typename?: 'Chunk';
714
+ /** Id of the app that owns this chunk (decimal string). */
425
715
  appId: Scalars['ID']['output'];
716
+ /** Timestamp the chunk's binary (d2.bin) was last synced to the CDN/S3, or null if it has never been uploaded. */
426
717
  cdnUploadedAt: Maybe<Scalars['DateTime']['output']>;
718
+ /** Server-assigned unique chunk id (decimal string). */
427
719
  chunkId: Scalars['ID']['output'];
720
+ /** BASE64-encoded opaque binary blob holding chunk-LEVEL state (distinct from per-voxel state). Decode from base64; null when unset. Written only via updateChunkState and preserved by updateChunk/updateChunkLods. */
428
721
  chunkState: Maybe<Scalars['String']['output']>;
722
+ /** This chunk's address in the app's world grid. */
429
723
  coordinates: ChunkCoordinates;
724
+ /** Timestamp when this chunk row was first created. */
430
725
  createdAt: Scalars['DateTime']['output'];
726
+ /** Level-of-detail (LOD) entries for this chunk (coarser sampled representations), or null if none. Each entry is keyed by integer level (0 = finest) and carries a base64-encoded binary blob. */
431
727
  lods: Maybe<Array<LodData>>;
728
+ /** User id (decimal string) of the last writer of this chunk, or null if unknown. */
432
729
  owner: Maybe<Scalars['ID']['output']>;
730
+ /** Timestamp of the most recent write to this chunk. */
433
731
  updatedAt: Scalars['DateTime']['output'];
732
+ /** Sparse list of per-voxel state overrides (e.g. rotation, atlas, flags) for voxels that need more than a plain type byte. Empty when no voxel carries extra state. */
434
733
  voxelStates: Array<VoxelState>;
734
+ /** BASE64-encoded binary blob of the dense voxel-type grid. When present, the DECODED buffer is exactly 4096 bytes: one unsigned byte (voxel type 0-255) per voxel, indexed as x + y*16 + z*256 with x,y,z in 0-15. Null when the chunk has no voxel grid yet. Decode from base64 before reading. */
435
735
  voxels: Maybe<Scalars['String']['output']>;
436
736
  };
737
+ /** Integer (x, y, z) address of a 16x16x16-voxel chunk within an app's world grid. Each unit step moves one whole chunk (16 voxels) along that axis. Components are signed 64-bit integers serialized as decimal strings (see the BigInt scalar). */
437
738
  export type ChunkCoordinates = {
438
739
  __typename?: 'ChunkCoordinates';
740
+ /** Chunk index along X as a decimal string; +1 = one chunk (16 voxels) further along X. */
439
741
  x: Scalars['BigInt']['output'];
742
+ /** Chunk index along Y as a decimal string; +1 = one chunk (16 voxels) further along Y. */
440
743
  y: Scalars['BigInt']['output'];
744
+ /** Chunk index along Z as a decimal string; +1 = one chunk (16 voxels) further along Z. */
441
745
  z: Scalars['BigInt']['output'];
442
746
  };
747
+ /** Input form of a chunk address (see ChunkCoordinates). Each component is a signed 64-bit integer passed as a decimal string (see the BigInt scalar); all three are required. */
443
748
  export type ChunkCoordinatesInput = {
749
+ /** Chunk index along X as a decimal string (required). */
444
750
  x: Scalars['BigInt']['input'];
751
+ /** Chunk index along Y as a decimal string (required). */
445
752
  y: Scalars['BigInt']['input'];
753
+ /** Chunk index along Z as a decimal string (required). */
446
754
  z: Scalars['BigInt']['input'];
447
755
  };
756
+ /** Result of getChunkLods: identifying info for a chunk plus the LOD levels that were requested. */
448
757
  export type ChunkLodsResponse = {
449
758
  __typename?: 'ChunkLodsResponse';
759
+ /** Owning app id (decimal string). */
450
760
  appId: Scalars['ID']['output'];
761
+ /** Chunk id (decimal string). */
451
762
  chunkId: Scalars['ID']['output'];
763
+ /** Address of the chunk. */
452
764
  coordinates: ChunkCoordinates;
765
+ /** The requested LOD levels for the chunk. */
453
766
  lods: Array<LodData>;
767
+ /** Timestamp when the chunk was last updated. */
454
768
  updatedAt: Scalars['DateTime']['output'];
455
769
  };
770
+ /** Payload for updateChunk: upserts a chunk's dense voxel grid and/or per-voxel states and logs each provided state as an individual voxel update. Does NOT modify chunkState or LODs. */
456
771
  export type ChunkUpdateInput = {
772
+ /** Id of the app that owns the chunk (decimal string). */
457
773
  appId: Scalars['BigInt']['input'];
774
+ /** Address of the chunk to create or update. */
458
775
  coordinates: ChunkCoordinatesInput;
776
+ /** Optional per-voxel state overrides to write; each entry is also recorded as an individual voxel update. Omit to leave existing states unchanged. */
459
777
  voxelStates?: InputMaybe<Array<VoxelStateInput>>;
778
+ /** Optional BASE64-encoded dense voxel grid. The DECODED buffer must be exactly 4096 bytes: one voxel-type byte (0-255) per voxel, indexed x + y*16 + z*256 (x,y,z in 0-15). Omit to leave the existing grid unchanged. */
460
779
  voxels?: InputMaybe<Scalars['String']['input']>;
461
780
  };
781
+ /** Result of getVoxelList: the queried chunk address together with its recorded voxel edits. */
462
782
  export type ChunkVoxelResponse = {
463
783
  __typename?: 'ChunkVoxelResponse';
784
+ /** Address of the chunk the voxel edits belong to. */
464
785
  coordinates: ChunkCoordinates;
786
+ /** Recorded voxel edits for the chunk, newest first. */
465
787
  voxels: Array<Voxel>;
466
788
  };
789
+ /** Recorded voxel edits for a single chunk within a distance query, newest first. */
467
790
  export type ChunkVoxelUpdatesResponse = {
468
791
  __typename?: 'ChunkVoxelUpdatesResponse';
792
+ /** Address of the chunk these voxel edits belong to. */
469
793
  coordinates: ChunkCoordinates;
794
+ /** Voxel edits for this chunk, newest first. */
470
795
  voxels: Array<Voxel>;
471
796
  };
797
+ /** Paginated result of getChunksByDistance: the chunks found within the search cube plus an echo of the pagination applied. */
472
798
  export type ChunksByDistanceResponse = {
473
799
  __typename?: 'ChunksByDistanceResponse';
800
+ /** Chunks found within the search cube. */
474
801
  chunks: Array<Chunk>;
802
+ /** Echo of the `limit` applied to this page, or null if none was supplied. */
475
803
  limit: Maybe<Scalars['Int']['output']>;
804
+ /** Echo of the `skip` applied to this page, or null if none was supplied. */
476
805
  skip: Maybe<Scalars['Int']['output']>;
477
806
  };
478
807
  export type CksBuddyHealth = {
479
808
  __typename?: 'CksBuddyHealth';
809
+ /** UDP port clients connect to on the Buddy server. */
480
810
  clientPort: Maybe<Scalars['Int']['output']>;
811
+ /** Currently connected client count reported by Buddy. */
481
812
  clients: Maybe<Scalars['Int']['output']>;
482
813
  /** Seconds since server_status.updated_at (game DB heartbeat). */
483
814
  heartbeatAgeSec: Maybe<Scalars['Float']['output']>;
815
+ /** Public IPv4 of the Buddy UDP runtime VM, if registered. */
484
816
  ip4: Maybe<Scalars['String']['output']>;
485
817
  /** True when heartbeat is missing or older than the staleness threshold (~30s). Game-api rejects assignment when age > ~11s. */
486
818
  isStale: Scalars['Boolean']['output'];
487
819
  /** False when no server_status row exists for this environment. */
488
820
  registered: Scalars['Boolean']['output'];
821
+ /** Buddy-reported server state from server_status (e.g. 'ReadyForClients'). */
489
822
  status: Maybe<Scalars['String']['output']>;
490
823
  /** Operator-facing hint when multiplayer assignment may fail. */
491
824
  troubleshootingHint: Scalars['String']['output'];
825
+ /** Timestamp of the last server_status heartbeat (game DB). */
492
826
  updatedAt: Maybe<Scalars['DateTime']['output']>;
493
827
  };
828
+ /** Live progress for the active (or most recent failed) deploy/destroy change order, with per-task counts and a retry hint. */
494
829
  export type CksDeployProgress = {
495
830
  __typename?: 'CksDeployProgress';
496
831
  /** Redeploy is allowed (failed deploy or stuck order cleared) */
@@ -512,6 +847,7 @@ export type CksDeployProgress = {
512
847
  tasksSucceeded: Scalars['Int']['output'];
513
848
  tasksTotal: Scalars['Int']['output'];
514
849
  };
850
+ /** A single step within a deploy/destroy task, with its retry attempt and any error. */
515
851
  export type CksDeployProgressStep = {
516
852
  __typename?: 'CksDeployProgressStep';
517
853
  attempt: Scalars['Int']['output'];
@@ -522,6 +858,7 @@ export type CksDeployProgressStep = {
522
858
  label: Scalars['String']['output'];
523
859
  status: Scalars['String']['output'];
524
860
  };
861
+ /** A task in a deploy/destroy pipeline, containing ordered steps. */
525
862
  export type CksDeployProgressTask = {
526
863
  __typename?: 'CksDeployProgressTask';
527
864
  error: Maybe<Scalars['String']['output']>;
@@ -531,13 +868,17 @@ export type CksDeployProgressTask = {
531
868
  status: Scalars['String']['output'];
532
869
  steps: Array<CksDeployProgressStep>;
533
870
  };
871
+ /** A provisioned (or provisioning/destroyed) tenant environment. status tracks provisioning lifecycle; billingStatus tracks payment lifecycle — they are independent. */
534
872
  export type CksEnvironment = {
535
873
  __typename?: 'CksEnvironment';
874
+ /** When billingStatus = grace, the deadline to add funds before suspension (~24h after the failed charge). Null otherwise. */
536
875
  billingGraceDeadline: Maybe<Scalars['DateTime']['output']>;
876
+ /** Payment lifecycle (NOT provisioning): active; grace (a charge failed — funds must be added before billingGraceDeadline); suspension_queued -> suspended (runtime stopped for non-payment); resume_queued -> active after payment (resume_failed on error). Recover with resumeEnvironment. */
537
877
  billingStatus: Scalars['String']['output'];
538
878
  caddyFlavor: Maybe<Scalars['String']['output']>;
539
879
  createdAt: Scalars['DateTime']['output'];
540
880
  databaseFlavor: Maybe<Scalars['String']['output']>;
881
+ /** Environment release version the platform is driving toward (target/desired state). */
541
882
  desiredEnvironmentVersion: Maybe<Scalars['String']['output']>;
542
883
  displayName: Scalars['String']['output'];
543
884
  /** 'dedicated' (multi-VM) or 'dev_single' (one dev-only VM). */
@@ -545,23 +886,33 @@ export type CksEnvironment = {
545
886
  gameApiFlavor: Maybe<Scalars['String']['output']>;
546
887
  gameApiMaxServers: Scalars['Int']['output'];
547
888
  gameApiMinServers: Scalars['Int']['output'];
889
+ /** Opaque environment UUID (cks_environments.id). */
548
890
  id: Scalars['String']['output'];
549
891
  loadBalancerCount: Scalars['Int']['output'];
892
+ /** Release version actually observed running. Lags desiredEnvironmentVersion while a deploy is in progress. */
550
893
  observedEnvironmentVersion: Maybe<Scalars['String']['output']>;
894
+ /** Owning organization id (BigInt). */
551
895
  orgId: Scalars['BigInt']['output'];
896
+ /** Cloud provider, e.g. 'ovh'. */
552
897
  primaryCloud: Scalars['String']['output'];
898
+ /** Primary datacenter/region code, e.g. 'GRA11'. */
553
899
  primaryRegion: Scalars['String']['output'];
554
900
  /** Single VM flavor when environmentClass = 'dev_single'. */
555
901
  singleBoxFlavor: Maybe<Scalars['String']['output']>;
902
+ /** URL-safe environment identifier, stable for the environment's lifetime. Auto-generated as 'e-<12 chars>' unless a custom slug was supplied at creation. */
556
903
  slug: Scalars['String']['output'];
904
+ /** Provisioning lifecycle (NOT billing): deploy_requested -> provisioning -> active; deploy_failed on error; destroy_requested -> destroyed (destroy_failed on error). See billingStatus for payment state. */
557
905
  status: Scalars['String']['output'];
906
+ /** Subdomain handle used to build the environment public URLs. Null until assigned. */
558
907
  subdomainHandle: Maybe<Scalars['String']['output']>;
908
+ /** When the environment was suspended for non-payment. Null unless suspended. */
559
909
  suspendedAt: Maybe<Scalars['DateTime']['output']>;
560
910
  udpBuddyFlavor: Maybe<Scalars['String']['output']>;
561
911
  udpBuddyMaxServers: Scalars['Int']['output'];
562
912
  udpBuddyMinServers: Scalars['Int']['output'];
563
913
  updatedAt: Scalars['DateTime']['output'];
564
914
  };
915
+ /** Audit-log entry recording an environment lifecycle action. */
565
916
  export type CksEnvironmentAudit = {
566
917
  __typename?: 'CksEnvironmentAudit';
567
918
  action: Scalars['String']['output'];
@@ -570,10 +921,12 @@ export type CksEnvironmentAudit = {
570
921
  id: Scalars['String']['output'];
571
922
  payloadJson: Maybe<Scalars['String']['output']>;
572
923
  };
924
+ /** A billable cloud resource attributed to the environment, with its customer hourly price. */
573
925
  export type CksEnvironmentBillingResource = {
574
926
  __typename?: 'CksEnvironmentBillingResource';
575
927
  componentKind: Scalars['String']['output'];
576
928
  currency: Scalars['String']['output'];
929
+ /** Customer hourly price billed for this resource, in cents. */
577
930
  customerHourlyPriceCents: Maybe<Scalars['BigInt']['output']>;
578
931
  environmentId: Scalars['String']['output'];
579
932
  flavorName: Maybe<Scalars['String']['output']>;
@@ -585,6 +938,7 @@ export type CksEnvironmentBillingResource = {
585
938
  resourceName: Maybe<Scalars['String']['output']>;
586
939
  status: Scalars['String']['output'];
587
940
  };
941
+ /** An asynchronous change order tracking a deploy / destroy / scaling pipeline for an environment. Returned by mutations so callers can poll completion. */
588
942
  export type CksEnvironmentChangeOrder = {
589
943
  __typename?: 'CksEnvironmentChangeOrder';
590
944
  claimedAt: Maybe<Scalars['DateTime']['output']>;
@@ -593,13 +947,19 @@ export type CksEnvironmentChangeOrder = {
593
947
  environmentId: Scalars['String']['output'];
594
948
  error: Maybe<Scalars['String']['output']>;
595
949
  finishedAt: Maybe<Scalars['DateTime']['output']>;
950
+ /** Change order UUID. */
596
951
  id: Scalars['String']['output'];
952
+ /** Pipeline kind, e.g. 'deploy_environment_version', 'game_api_environment_destroy', or 'postgres_citus_destroy'. */
597
953
  kind: Scalars['String']['output'];
954
+ /** JSON-encoded change order payload. */
598
955
  payloadJson: Scalars['String']['output'];
956
+ /** User id (BigInt) that requested the change order. */
599
957
  requestedBy: Maybe<Scalars['BigInt']['output']>;
958
+ /** Execution status: pending, claimed/in_progress, succeeded, failed, or cancelled. */
600
959
  status: Scalars['String']['output'];
601
960
  updatedAt: Scalars['DateTime']['output'];
602
961
  };
962
+ /** One provisioned component of an environment (DNS, database VM, game-api, Buddy, load balancer, etc.) with its desired vs. observed version and spec. */
603
963
  export type CksEnvironmentComponent = {
604
964
  __typename?: 'CksEnvironmentComponent';
605
965
  desiredSpecJson: Maybe<Scalars['String']['output']>;
@@ -612,6 +972,7 @@ export type CksEnvironmentComponent = {
612
972
  observedVersion: Maybe<Scalars['String']['output']>;
613
973
  status: Maybe<Scalars['String']['output']>;
614
974
  };
975
+ /** Full environment detail returned by orgEnvironment: the environment plus its components, change orders, audit, secrets, outputs, billing resources, live deploy/destroy progress, and Buddy health. */
615
976
  export type CksEnvironmentDetail = {
616
977
  __typename?: 'CksEnvironmentDetail';
617
978
  audit: Array<CksEnvironmentAudit>;
@@ -628,6 +989,7 @@ export type CksEnvironmentDetail = {
628
989
  outputs: Array<CksEnvironmentOutput>;
629
990
  secrets: Array<CksEnvironmentSecretValue>;
630
991
  };
992
+ /** A published output value from a provisioned component (e.g. URLs, handles, connection details). */
631
993
  export type CksEnvironmentOutput = {
632
994
  __typename?: 'CksEnvironmentOutput';
633
995
  componentKind: Scalars['String']['output'];
@@ -638,25 +1000,33 @@ export type CksEnvironmentOutput = {
638
1000
  value: Scalars['String']['output'];
639
1001
  valueKind: Scalars['String']['output'];
640
1002
  };
1003
+ /** Pricing quote for a proposed environment selection plus the org wallet balance, used to gate createEnvironment. All *Cents fields are in minor currency units (cents). */
641
1004
  export type CksEnvironmentQuote = {
642
1005
  __typename?: 'CksEnvironmentQuote';
1006
+ /** Wallet balance still available after existing reservations, in cents. Compared against firstDayReserveCents. */
643
1007
  availableBalanceCents: Scalars['BigInt']['output'];
644
1008
  caddyFlavor: Scalars['String']['output'];
1009
+ /** True when availableBalanceCents ≥ firstDayReserveCents. createEnvironment fails when false. */
645
1010
  canCreate: Scalars['Boolean']['output'];
1011
+ /** ISO-4217 currency of the *Cents fields, e.g. 'USD'. */
646
1012
  currency: Scalars['String']['output'];
647
1013
  databaseFlavor: Scalars['String']['output'];
648
1014
  datacenter: Scalars['String']['output'];
1015
+ /** Up-front wallet reserve required to create (≈ first day of runtime), in cents. */
649
1016
  firstDayReserveCents: Scalars['BigInt']['output'];
650
1017
  gameApiFlavor: Scalars['String']['output'];
651
1018
  gameApiMaxServers: Scalars['Int']['output'];
652
1019
  gameApiMinServers: Scalars['Int']['output'];
1020
+ /** Total hourly price of the full selection, in cents. */
653
1021
  hourlyCostCents: Scalars['BigInt']['output'];
654
1022
  loadBalancerCount: Scalars['Int']['output'];
655
1023
  udpBuddyFlavor: Scalars['String']['output'];
656
1024
  udpBuddyMaxServers: Scalars['Int']['output'];
657
1025
  udpBuddyMinServers: Scalars['Int']['output'];
1026
+ /** Org wallet balance, in cents. */
658
1027
  walletBalanceCents: Scalars['BigInt']['output'];
659
1028
  };
1029
+ /** A sealed environment secret. Exposes ciphertext only (sealedCiphertextBase64) — never the plaintext. */
660
1030
  export type CksEnvironmentSecretValue = {
661
1031
  __typename?: 'CksEnvironmentSecretValue';
662
1032
  createdAt: Scalars['DateTime']['output'];
@@ -667,45 +1037,61 @@ export type CksEnvironmentSecretValue = {
667
1037
  sealedCiphertextBase64: Scalars['String']['output'];
668
1038
  updatedAt: Scalars['DateTime']['output'];
669
1039
  };
1040
+ /** An environment release version in the deployable catalog. */
670
1041
  export type CksEnvironmentVersion = {
671
1042
  __typename?: 'CksEnvironmentVersion';
672
1043
  /** Pinned cks-game-api git tag from the ingested manifest. */
673
1044
  gameApiGitTag: Maybe<Scalars['String']['output']>;
674
1045
  notes: Maybe<Scalars['String']['output']>;
675
1046
  releasedAt: Scalars['DateTime']['output'];
1047
+ /** Release status, e.g. 'available' (deployable) or 'yanked' (withdrawn). */
676
1048
  status: Scalars['String']['output'];
1049
+ /** Semantic version, e.g. 'v0.1.4'. */
677
1050
  version: Scalars['String']['output'];
678
1051
  };
1052
+ /** An OVH datacenter offered for environment placement. Only datacenters with at least one customer-selectable flavor are returned by environmentDatacenters. */
679
1053
  export type CksOvhDatacenter = {
680
1054
  __typename?: 'CksOvhDatacenter';
681
1055
  city: Maybe<Scalars['String']['output']>;
682
1056
  continent: Maybe<Scalars['String']['output']>;
1057
+ /** True when the datacenter is currently accepting new instances. */
683
1058
  isAvailable: Scalars['Boolean']['output'];
684
1059
  name: Maybe<Scalars['String']['output']>;
1060
+ /** Region/datacenter code used as the datacenter arg, e.g. 'GRA11'. */
685
1061
  region: Scalars['String']['output'];
686
1062
  /** Number of customer-selectable instances in this datacenter after availability, pricing, and admin visibility filters. */
687
1063
  selectableInstanceCount: Scalars['Int']['output'];
1064
+ /** Provider availability status string, e.g. 'UP'. */
688
1065
  status: Scalars['String']['output'];
689
1066
  syncedAt: Scalars['DateTime']['output'];
690
1067
  };
691
1068
  /** Customer-selectable catalog instance flavor. Hidden, unavailable, or unpriced rows are omitted from environmentFlavors. */
692
1069
  export type CksOvhFlavor = {
693
1070
  __typename?: 'CksOvhFlavor';
1071
+ /** Catalog availability for this flavor, e.g. 'available'. */
694
1072
  availabilityStatus: Scalars['String']['output'];
1073
+ /** ISO-4217 currency for the price fields, e.g. 'USD'. */
695
1074
  currency: Scalars['String']['output'];
696
1075
  /** Customer hourly price in cents. Non-null for every flavor returned from environmentFlavors. */
697
1076
  customerHourlyPriceCents: Scalars['BigInt']['output'];
698
1077
  /** Customer monthly reference price in cents. Display-only until monthly billing is implemented. */
699
1078
  customerMonthlyPriceCents: Maybe<Scalars['BigInt']['output']>;
1079
+ /** Local disk in gigabytes. */
700
1080
  diskGb: Maybe<Scalars['Int']['output']>;
701
1081
  flavorName: Scalars['String']['output'];
702
1082
  flavorType: Maybe<Scalars['String']['output']>;
1083
+ /** How the customer price was derived (e.g. fixed vs. markup mode). */
703
1084
  pricingMode: Scalars['String']['output'];
1085
+ /** Where the customer price came from (pricing pipeline source). */
704
1086
  pricingSource: Maybe<Scalars['String']['output']>;
1087
+ /** Remaining instances of this flavor the project may launch in the datacenter (OVH quota headroom). */
705
1088
  quotaAvailable: Maybe<Scalars['Int']['output']>;
1089
+ /** RAM in megabytes. */
706
1090
  ramMb: Maybe<Scalars['Int']['output']>;
1091
+ /** Raw OVH provider hourly cost in cents (pre-markup). Internal reference; bill against customerHourlyPriceCents. */
707
1092
  rawHourlyCostCents: Maybe<Scalars['BigInt']['output']>;
708
1093
  syncedAt: Scalars['DateTime']['output'];
1094
+ /** Virtual CPU count. */
709
1095
  vcpus: Maybe<Scalars['Int']['output']>;
710
1096
  };
711
1097
  /** Notification received when another client sends an audio packet (voice chat). Received via the udpNotifications subscription. */
@@ -744,7 +1130,7 @@ export type ClientAudioPacketInput = {
744
1130
  decayRate?: InputMaybe<Scalars['Int']['input']>;
745
1131
  /** Chunk replication distance (0-8). Defaults to 1 for audio packets. Clamped to 0-8. */
746
1132
  distance?: InputMaybe<Scalars['Int']['input']>;
747
- /** Client's sequence number for this message (0-255, wraps). Used to match error responses. */
1133
+ /** Client-assigned correlation id for this datagram: a uint8 (0-255) that wraps at gameClientBootstrap.sequenceNumberModulo (256); defaults to 0 if omitted. For CORRELATION ONLY — it is NOT an idempotency key and the server does not dedupe replays. Echoed on any GenericErrorResponse for this send, delivered on the udpNotifications subscription. */
748
1134
  sequenceNumber?: InputMaybe<Scalars['Int']['input']>;
749
1135
  /** A unique identifier for the audio source (typically the player UUID). Must be exactly 32 bytes when encoded as UTF-8. */
750
1136
  uuid: Scalars['String']['input'];
@@ -787,7 +1173,7 @@ export type ClientEventNotificationInput = {
787
1173
  distance?: InputMaybe<Scalars['Int']['input']>;
788
1174
  /** The event type ID (uint16, 0-65535). This is a client-defined enum that determines how the event should be processed. */
789
1175
  eventType: Scalars['Int']['input'];
790
- /** Client's sequence number for this message (0-255, wraps). Used to match error responses. */
1176
+ /** Client-assigned correlation id for this datagram: a uint8 (0-255) that wraps at gameClientBootstrap.sequenceNumberModulo (256); defaults to 0 if omitted. For CORRELATION ONLY — it is NOT an idempotency key and the server does not dedupe replays. Echoed on any GenericErrorResponse for this send, delivered on the udpNotifications subscription. */
791
1177
  sequenceNumber?: InputMaybe<Scalars['Int']['input']>;
792
1178
  /** The event state data, base64-encoded. The format is defined by the event type and is currently only processed by clients. */
793
1179
  state: Scalars['String']['input'];
@@ -828,17 +1214,30 @@ export type ClientTextPacketInput = {
828
1214
  decayRate?: InputMaybe<Scalars['Int']['input']>;
829
1215
  /** Chunk replication distance (0-8). Defaults to 8 for text packets. Clamped to 0-8. */
830
1216
  distance?: InputMaybe<Scalars['Int']['input']>;
831
- /** Client's sequence number for this message (0-255, wraps). Used to match error responses. */
1217
+ /** Client-assigned correlation id for this datagram: a uint8 (0-255) that wraps at gameClientBootstrap.sequenceNumberModulo (256); defaults to 0 if omitted. For CORRELATION ONLY — it is NOT an idempotency key and the server does not dedupe replays. Echoed on any GenericErrorResponse for this send, delivered on the udpNotifications subscription. */
832
1218
  sequenceNumber?: InputMaybe<Scalars['Int']['input']>;
833
1219
  /** The text message content, encoded as UTF-8. This will be displayed to nearby players. */
834
1220
  text: Scalars['String']['input'];
835
1221
  /** A unique identifier for the text source (typically the player UUID). Must be exactly 32 bytes when encoded as UTF-8. */
836
1222
  uuid: Scalars['String']['input'];
837
1223
  };
1224
+ /** Relay-style pagination metadata for a connection. */
1225
+ export type ConnectionPageInfo = {
1226
+ __typename?: 'ConnectionPageInfo';
1227
+ /** Opaque cursor of the last edge in this page; pass as `after`. */
1228
+ endCursor: Maybe<Scalars['String']['output']>;
1229
+ /** True if more edges exist after `endCursor`. */
1230
+ hasNextPage: Scalars['Boolean']['output'];
1231
+ /** True if edges exist before `startCursor`. */
1232
+ hasPreviousPage: Scalars['Boolean']['output'];
1233
+ /** Opaque cursor of the first edge in this page. */
1234
+ startCursor: Maybe<Scalars['String']['output']>;
1235
+ };
838
1236
  /** Operator-facing view of cks_environments. */
839
1237
  export type CpAdminEnvironment = {
840
1238
  __typename?: 'CpAdminEnvironment';
841
1239
  createdAt: Scalars['DateTime']['output'];
1240
+ /** When true, purgeEnvironment is blocked. Toggle via setEnvironmentDeletionProtection. */
842
1241
  deletionProtectionEnabled: Scalars['Boolean']['output'];
843
1242
  deletionProtectionSetAt: Maybe<Scalars['DateTime']['output']>;
844
1243
  deletionProtectionSetByEmail: Maybe<Scalars['String']['output']>;
@@ -848,15 +1247,21 @@ export type CpAdminEnvironment = {
848
1247
  primaryCloud: Scalars['String']['output'];
849
1248
  primaryRegion: Scalars['String']['output'];
850
1249
  slug: Scalars['String']['output'];
1250
+ /** Provisioning lifecycle: deploy_requested -> provisioning -> active; deploy_failed; destroy_requested -> destroyed (destroy_failed on error). */
851
1251
  status: Scalars['String']['output'];
852
1252
  subdomainHandle: Maybe<Scalars['String']['output']>;
853
1253
  updatedAt: Scalars['DateTime']['output'];
854
1254
  };
1255
+ /** One page of operator environment rows. Paging is 1-based: page 1 is the first page. */
855
1256
  export type CpAdminEnvironmentsPage = {
856
1257
  __typename?: 'CpAdminEnvironmentsPage';
1258
+ /** Current 1-based page number. */
857
1259
  page: Scalars['Int']['output'];
1260
+ /** Requested page size (max rows per page). */
858
1261
  pageSize: Scalars['Int']['output'];
1262
+ /** Environment rows on this page. */
859
1263
  rows: Array<CpAdminEnvironment>;
1264
+ /** Total rows across all pages (not just this page). */
860
1265
  total: Scalars['Int']['output'];
861
1266
  };
862
1267
  export type CpAuditEntry = {
@@ -890,9 +1295,11 @@ export type CpChangeOrder = {
890
1295
  error: Maybe<Scalars['String']['output']>;
891
1296
  finishedAt: Maybe<Scalars['DateTime']['output']>;
892
1297
  id: Scalars['ID']['output'];
1298
+ /** Pipeline kind (e.g. deploy_environment_version, *_destroy). */
893
1299
  kind: Scalars['String']['output'];
894
1300
  /** JSON-encoded payload */
895
1301
  payloadJson: Maybe<Scalars['String']['output']>;
1302
+ /** Execution status: pending, claimed/in_progress, succeeded, failed, or cancelled. */
896
1303
  status: Scalars['String']['output'];
897
1304
  updatedAt: Scalars['DateTime']['output'];
898
1305
  };
@@ -902,11 +1309,16 @@ export type CpChangeOrderDetail = {
902
1309
  steps: Array<CpStepRow>;
903
1310
  tasks: Array<CpTaskRow>;
904
1311
  };
1312
+ /** One page of operator change-order rows. Paging is 1-based: page 1 is the first page. */
905
1313
  export type CpChangeOrdersPage = {
906
1314
  __typename?: 'CpChangeOrdersPage';
1315
+ /** Current 1-based page number. */
907
1316
  page: Scalars['Int']['output'];
1317
+ /** Requested page size (max rows per page). */
908
1318
  pageSize: Scalars['Int']['output'];
1319
+ /** Change-order rows on this page. */
909
1320
  rows: Array<CpChangeOrder>;
1321
+ /** Total rows across all pages (not just this page). */
910
1322
  total: Scalars['Int']['output'];
911
1323
  };
912
1324
  export type CpEnvSecretRow = {
@@ -946,23 +1358,29 @@ export type CpEnvironmentVersionsPage = {
946
1358
  latestAvailableVersion: Maybe<Scalars['String']['output']>;
947
1359
  rows: Array<CpEnvironmentVersionRow>;
948
1360
  };
1361
+ /** A user with operator and/or super-admin privileges. */
949
1362
  export type CpOperatorUser = {
950
1363
  __typename?: 'CpOperatorUser';
951
1364
  createdAt: Scalars['DateTime']['output'];
952
1365
  email: Maybe<Scalars['String']['output']>;
953
1366
  gamertag: Maybe<Scalars['String']['output']>;
1367
+ /** True when users.is_operator is set (operator surface access). */
954
1368
  isOperator: Scalars['Boolean']['output'];
1369
+ /** True when users.is_super_admin is set (implies operator access). */
955
1370
  isSuperAdmin: Scalars['Boolean']['output'];
956
1371
  userId: Scalars['ID']['output'];
957
1372
  };
958
1373
  export type CpOvhCatalogRow = {
959
1374
  __typename?: 'CpOvhCatalogRow';
1375
+ /** Customer-facing hourly price in cents, as a string. */
960
1376
  customerHourlyPriceCents: Maybe<Scalars['String']['output']>;
1377
+ /** How the customer price was derived (e.g. fixed vs. markup). */
961
1378
  customerPricingMode: Scalars['String']['output'];
962
1379
  diskGb: Maybe<Scalars['Int']['output']>;
963
1380
  flavorName: Scalars['String']['output'];
964
1381
  inboundBandwidth: Maybe<Scalars['Int']['output']>;
965
1382
  outboundBandwidth: Maybe<Scalars['Int']['output']>;
1383
+ /** Raw OVH provider hourly cost in cents, as a string. Internal reference. */
966
1384
  ovhHourlyPriceCents: Maybe<Scalars['String']['output']>;
967
1385
  quotaAvailable: Maybe<Scalars['Int']['output']>;
968
1386
  ramMb: Maybe<Scalars['Int']['output']>;
@@ -1071,74 +1489,125 @@ export type CpUsageSummary = {
1071
1489
  replication: Array<CpUsageMinuteRow>;
1072
1490
  replicationRates: CpUsageRatePeaks;
1073
1491
  };
1492
+ /** Input for creating a new app access tier. */
1074
1493
  export type CreateAccessTierInput = {
1494
+ /** Numeric id of the app the tier belongs to. The caller must hold manage_access_tiers on this app. */
1075
1495
  appId: Scalars['BigInt']['input'];
1496
+ /** Optional marketing description of the tier. */
1076
1497
  description?: InputMaybe<Scalars['String']['input']>;
1498
+ /** Optional; whether this is the app's default tier. Defaults to false. */
1077
1499
  isDefault?: InputMaybe<Scalars['Boolean']['input']>;
1500
+ /** Optional; whether the tier is free. Defaults to false. */
1078
1501
  isFree?: InputMaybe<Scalars['Boolean']['input']>;
1502
+ /** Tier display name (max 128 chars). */
1079
1503
  name: Scalars['String']['input'];
1504
+ /** Optional runtime permission keys to grant on this tier (must be valid runtimePermissions). Defaults to ["access"] when omitted. */
1080
1505
  permissionKeys?: InputMaybe<Array<Scalars['String']['input']>>;
1506
+ /** Optional sort order (ascending). Defaults to 0. */
1081
1507
  tierOrder?: InputMaybe<Scalars['Int']['input']>;
1082
1508
  };
1083
1509
  export type CreateActorInput = {
1510
+ /** App (game) the actor belongs to. Required. BigInt sent as a decimal string. */
1084
1511
  appId: Scalars['BigInt']['input'];
1512
+ /** Optional avatar to attach; if provided it must be owned by the caller. BigInt sent as a decimal string. */
1085
1513
  avatarId?: InputMaybe<Scalars['BigInt']['input']>;
1514
+ /** Initial chunk-grid coordinates (x, y, z as int64 BigInt decimal strings). Required. */
1086
1515
  chunk: ChunkCoordinatesInput;
1516
+ /** Optional owner-only private state blob, base64-encoded binary. */
1087
1517
  privateState?: InputMaybe<Scalars['String']['input']>;
1518
+ /** Optional public state blob, base64-encoded binary. */
1088
1519
  publicState?: InputMaybe<Scalars['String']['input']>;
1520
+ /** Actor id: exactly 32 ASCII characters (the UDP-wire actor id), NOT a hyphenated RFC-4122 UUID. Required and must be unique. */
1089
1521
  uuid: Scalars['String']['input'];
1090
1522
  };
1523
+ /** Input payload for creating a new app. */
1091
1524
  export type CreateAppInput = {
1525
+ /** Optional short plain-text description for listings. */
1092
1526
  description?: InputMaybe<Scalars['String']['input']>;
1527
+ /** Optional JSON-encoded marketplace metadata string (see App.metadata). Defaults to an empty object when omitted. */
1093
1528
  metadata?: InputMaybe<Scalars['String']['input']>;
1529
+ /** Display name of the app (1-256 characters). */
1094
1530
  name: Scalars['String']['input'];
1531
+ /** Numeric id of the organization that will own the app. The caller must hold the manage_apps permission on this org. */
1095
1532
  orgId: Scalars['BigInt']['input'];
1533
+ /** URL-safe slug (1-128 chars, lowercase letters, numbers and dashes only). Must be unique within the org. */
1096
1534
  slug: Scalars['String']['input'];
1535
+ /** Optional initial lifecycle status. Defaults to DRAFT when omitted. */
1097
1536
  status?: InputMaybe<AppStatus>;
1537
+ /** Optional initial visibility. Defaults to PUBLIC when omitted. */
1098
1538
  visibility?: InputMaybe<AppVisibility>;
1099
1539
  };
1100
1540
  export type CreateAvatarInput = {
1541
+ /** Optional avatar name; defaults to "Default Avatar" when omitted. */
1101
1542
  name?: InputMaybe<Scalars['String']['input']>;
1102
1543
  };
1544
+ /** Create a channel in an app. */
1103
1545
  export type CreateChannelInput = {
1546
+ /** The app (tenant) the channel belongs to. */
1104
1547
  appId: Scalars['BigInt']['input'];
1548
+ /** Optional free-text description of the channel. */
1105
1549
  description?: InputMaybe<Scalars['String']['input']>;
1106
1550
  /** When true (default), new members are auto-granted send_messages so they can post (open chat channel). When false, only roles you grant may post (announce/read-only channel). */
1107
1551
  membersCanSend?: InputMaybe<Scalars['Boolean']['input']>;
1108
1552
  /** open | request | invite | admin. Defaults to the app policy. */
1109
1553
  membershipPolicy?: InputMaybe<Scalars['String']['input']>;
1554
+ /** Display name for the channel (max 128 chars; unique per app+type). */
1110
1555
  name: Scalars['String']['input'];
1111
1556
  };
1112
1557
  export type CreateCheckoutInput = {
1558
+ /** Charge amount in minor currency units (cents) of `currency`, as a BigInt decimal string. Required for ORG_WALLET_TOPUP. */
1113
1559
  amountCents?: InputMaybe<Scalars['BigInt']['input']>;
1560
+ /** Target app (BigInt as a decimal string). Required for APP_ACCESS_PURCHASE and SHARED_APP_SUBSCRIPTION. */
1114
1561
  appId?: InputMaybe<Scalars['BigInt']['input']>;
1562
+ /** Absolute URL the provider redirects to if the user cancels. Optional; a server default is used if omitted. */
1115
1563
  cancelUrl?: InputMaybe<Scalars['String']['input']>;
1564
+ /** ISO-4217 currency code, lowercase (e.g. "usd"). Defaults to "usd". */
1116
1565
  currency?: InputMaybe<Scalars['String']['input']>;
1566
+ /** Optional idempotency key. Recommended for retries: replaying with the same key and identical input returns the first checkout instead of opening a second provider session; the same key with different input returns IDEMPOTENCY_CONFLICT. Keys expire after 24h. */
1567
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
1568
+ /** Target organization (BigInt as a decimal string). Required for ORG_WALLET_TOPUP; ignored for other purposes. */
1117
1569
  orgId?: InputMaybe<Scalars['BigInt']['input']>;
1570
+ /** Shared-environment plan id (a shared_env_plans.plan_id, BigInt as a decimal string). Required for SHARED_APP_SUBSCRIPTION. */
1118
1571
  planId?: InputMaybe<Scalars['BigInt']['input']>;
1572
+ /** Payment processor to use for this checkout (STRIPE or PAYPAL). */
1119
1573
  provider: PaymentProvider;
1574
+ /** What the checkout is for; determines which other fields are required and the side effect applied on completion. DONATION and PROPERTY_TOKENS are rejected. */
1120
1575
  purpose: CheckoutPurpose;
1576
+ /** Absolute URL the provider redirects to after a successful payment. Optional; a server default is used if omitted. */
1121
1577
  successUrl?: InputMaybe<Scalars['String']['input']>;
1578
+ /** Access tier to purchase (BigInt as a decimal string). Required for APP_ACCESS_PURCHASE. */
1122
1579
  tierId?: InputMaybe<Scalars['BigInt']['input']>;
1123
1580
  };
1581
+ /** Instantiate a container (runtime entity). */
1124
1582
  export type CreateContainerInput = {
1583
+ /** The app (tenant) the container belongs to. */
1125
1584
  appId: Scalars['BigInt']['input'];
1585
+ /** Optional description. */
1126
1586
  description?: InputMaybe<Scalars['String']['input']>;
1587
+ /** Human-friendly display name. */
1127
1588
  displayName: Scalars['String']['input'];
1589
+ /** JSON object of metadata. */
1128
1590
  metadataJson?: InputMaybe<Scalars['String']['input']>;
1129
1591
  /** Owner user id; defaults to the caller for member/owner instantiation. */
1130
1592
  ownerUserId?: InputMaybe<Scalars['BigInt']['input']>;
1593
+ /** Initial property values for the container. */
1131
1594
  properties?: InputMaybe<Array<SeedPropertyInput>>;
1595
+ /** Optional session to create the container in (omit for app-global). */
1132
1596
  sessionId?: InputMaybe<Scalars['String']['input']>;
1597
+ /** The container type to instantiate. */
1133
1598
  typeName: Scalars['String']['input'];
1134
1599
  };
1600
+ /** Input for createEnvironment. For dedicated (default) supply the four per-role flavors plus scaling counts; for dev_single supply a single flavor and the per-role/count fields are ignored. */
1135
1601
  export type CreateEnvironmentInput = {
1602
+ /** Optional app ids to link to the new environment at creation. Each must be unique; omit or pass an empty list to link none. */
1136
1603
  appIds?: InputMaybe<Array<Scalars['String']['input']>>;
1137
1604
  /** Flavor name from environmentFlavors(datacenter) for the Caddy LB VMs in front of the game-api fleet; must have a published hourly price. Required for dedicated. */
1138
1605
  caddyFlavor?: InputMaybe<Scalars['String']['input']>;
1139
1606
  /** Flavor name from environmentFlavors(datacenter); must have a published hourly price. Required for dedicated. */
1140
1607
  databaseFlavor?: InputMaybe<Scalars['String']['input']>;
1608
+ /** OVH datacenter/region code from environmentDatacenters (e.g. 'GRA11'). */
1141
1609
  datacenter: Scalars['String']['input'];
1610
+ /** Human-readable environment name (max 80 chars). */
1142
1611
  displayName: Scalars['String']['input'];
1143
1612
  /** Deployment class: 'dedicated' (default, multi-VM) or 'dev_single' (one cheap dev-only VM running Postgres + management-api + game-api + Buddy). dev_single is not for production. */
1144
1613
  environmentClass?: InputMaybe<Scalars['String']['input']>;
@@ -1146,81 +1615,129 @@ export type CreateEnvironmentInput = {
1146
1615
  flavor?: InputMaybe<Scalars['String']['input']>;
1147
1616
  /** Flavor name from environmentFlavors(datacenter) for per-tenant game-api VMs; must have a published hourly price. Required for dedicated. */
1148
1617
  gameApiFlavor?: InputMaybe<Scalars['String']['input']>;
1618
+ /** Autoscaling ceiling for game-api servers (min 1, ≥ gameApiMinServers). Required for dedicated; ignored for dev_single. */
1149
1619
  gameApiMaxServers?: InputMaybe<Scalars['Int']['input']>;
1620
+ /** Autoscaling floor for game-api servers (min 1). Required for dedicated; ignored for dev_single. */
1150
1621
  gameApiMinServers?: InputMaybe<Scalars['Int']['input']>;
1622
+ /** Number of Caddy load-balancer VMs in front of the game-api fleet (min 1). Required for dedicated; ignored for dev_single. */
1151
1623
  loadBalancerCount?: InputMaybe<Scalars['Int']['input']>;
1624
+ /** Organization id (BigInt) that will own and be billed for the environment. */
1152
1625
  orgId: Scalars['BigInt']['input'];
1153
1626
  /** Optional explicit slug for scripts/E2E. When omitted, the API generates an opaque e-{12} slug. */
1154
1627
  slug?: InputMaybe<Scalars['String']['input']>;
1155
1628
  /** Flavor name from environmentFlavors(datacenter); must have a published hourly price. Required for dedicated. */
1156
1629
  udpBuddyFlavor?: InputMaybe<Scalars['String']['input']>;
1630
+ /** Autoscaling ceiling for Buddy UDP servers (min 1, ≥ udpBuddyMinServers). Required for dedicated; ignored for dev_single. */
1157
1631
  udpBuddyMaxServers?: InputMaybe<Scalars['Int']['input']>;
1632
+ /** Autoscaling floor for Buddy UDP servers (min 1). Required for dedicated; ignored for dev_single. */
1158
1633
  udpBuddyMinServers?: InputMaybe<Scalars['Int']['input']>;
1634
+ /** Base64-encoded 32-byte X25519 public key used to seal this environment’s secrets. Must decode to exactly 32 bytes. */
1159
1635
  x25519PublicKeyBase64: Scalars['String']['input'];
1160
1636
  };
1637
+ /** Defines a new grid by its app and two opposite corner chunks. The corners are normalized server-side into a low/high chunk box, so corner order is irrelevant and a single chunk (corner1 == corner2) is allowed. */
1161
1638
  export type CreateGridInput = {
1639
+ /** The app (tenant) the grid belongs to. */
1162
1640
  appId: Scalars['BigInt']['input'];
1641
+ /** One corner of the grid box, in chunk coordinates. */
1163
1642
  corner1: ChunkCoordinatesInput;
1643
+ /** The opposite corner of the grid box, in chunk coordinates. May equal corner1 for a single-chunk grid. */
1164
1644
  corner2: ChunkCoordinatesInput;
1165
1645
  };
1646
+ /** Result of createGrid. This is a hybrid result rather than a thrown error: inspect `error` first. When `error` is NO_ERROR the call succeeded and `grid` is populated; otherwise `grid` is null and `error` explains why. */
1166
1647
  export type CreateGridResponse = {
1167
1648
  __typename?: 'CreateGridResponse';
1649
+ /** A UDP-style error code (the same ErrorType enum the realtime/UDP servers use). NO_ERROR (0) means success; non-zero values describe the failure, e.g. NO_MATCHING_GRID_ASSIGNMENT, GRID_OUTSIDE_ASSIGNMENT, GRID_OVERLAPS_EXISTING, GRID_ALREADY_EXISTS, or UNKNOWN_ERROR. */
1168
1650
  error: UdpErrorCode;
1651
+ /** The created grid on success; null when `error` is non-zero. */
1169
1652
  grid: Maybe<Grid>;
1170
1653
  };
1654
+ /** Create a custom role within a group (team or channel), granting group permission keys. */
1171
1655
  export type CreateGroupRoleInput = {
1656
+ /** The group (team/channel) the role belongs to. */
1172
1657
  groupId: Scalars['BigInt']['input'];
1658
+ /** Group permission key strings this role grants (e.g. manage_members, manage_roles, manage_group, send_messages). Must be valid keys for the group type; each max 64 chars, unique. Defaults to none. */
1173
1659
  permissions?: InputMaybe<Array<Scalars['String']['input']>>;
1660
+ /** Sort/precedence rank (higher = more senior). Defaults to 0. */
1174
1661
  rank?: InputMaybe<Scalars['Int']['input']>;
1662
+ /** Role display name (max 128 chars; unique within the group). */
1175
1663
  roleName: Scalars['String']['input'];
1176
1664
  };
1177
1665
  export type CreateOrgRoleInput = {
1666
+ /** Optional human-readable description. */
1178
1667
  description?: InputMaybe<Scalars['String']['input']>;
1668
+ /** Organization to create the role in (BigInt as string). */
1179
1669
  orgId: Scalars['BigInt']['input'];
1670
+ /** Permission keys (from orgPermissions) to grant. Unknown keys are silently dropped. */
1180
1671
  permissions: Array<Scalars['String']['input']>;
1672
+ /** Role name (max 128 characters). */
1181
1673
  roleName: Scalars['String']['input'];
1182
1674
  };
1183
1675
  export type CreateOrgTokenInput = {
1676
+ /** Optional expiry timestamp; omit for a non-expiring token. */
1184
1677
  expiresAt?: InputMaybe<Scalars['DateTime']['input']>;
1678
+ /** Optional human-readable label (max 256 characters). */
1185
1679
  label?: InputMaybe<Scalars['String']['input']>;
1680
+ /** Organization to mint the token for (BigInt as string). */
1186
1681
  orgId: Scalars['BigInt']['input'];
1187
1682
  };
1188
1683
  export type CreateOrganizationInput = {
1684
+ /** Organization display name (1-256 characters). */
1189
1685
  name: Scalars['String']['input'];
1686
+ /** Unique URL slug; lowercase letters, numbers, and dashes only (1-128 characters). */
1190
1687
  slug: Scalars['String']['input'];
1191
1688
  };
1689
+ /** Create a runtime session. */
1192
1690
  export type CreateSessionInput = {
1691
+ /** The app (tenant) the session belongs to. */
1193
1692
  appId: Scalars['BigInt']['input'];
1693
+ /** JSON object of session metadata. */
1194
1694
  metadataJson?: InputMaybe<Scalars['String']['input']>;
1695
+ /** Optional session name. */
1195
1696
  name?: InputMaybe<Scalars['String']['input']>;
1196
1697
  /** Initial participants besides the creator. */
1197
1698
  participantUserIds?: InputMaybe<Array<Scalars['BigInt']['input']>>;
1198
1699
  };
1700
+ /** Create a team in an app. */
1199
1701
  export type CreateTeamInput = {
1702
+ /** The app (tenant) the team belongs to. */
1200
1703
  appId: Scalars['BigInt']['input'];
1704
+ /** Optional free-text description of the team. */
1201
1705
  description?: InputMaybe<Scalars['String']['input']>;
1202
1706
  /** open | request | invite | admin. Defaults to the app policy. */
1203
1707
  membershipPolicy?: InputMaybe<Scalars['String']['input']>;
1708
+ /** Display name for the team (max 128 chars; unique per app+type). */
1204
1709
  name: Scalars['String']['input'];
1205
1710
  };
1206
1711
  export type CreateUserAppStateInput = {
1712
+ /** App (game) id to scope the state to. Required. BigInt sent as a decimal string. */
1207
1713
  appId: Scalars['BigInt']['input'];
1714
+ /** Per-app user state as base64-encoded binary. Omit or send null to clear it. */
1208
1715
  state?: InputMaybe<Scalars['String']['input']>;
1209
1716
  };
1717
+ /** Define an app feature key. */
1210
1718
  export type DefineAppFeatureInput = {
1719
+ /** The app (tenant) defining the feature. */
1211
1720
  appId: Scalars['BigInt']['input'];
1721
+ /** Optional description of the feature. */
1212
1722
  description?: InputMaybe<Scalars['String']['input']>;
1723
+ /** The feature key (referenced by tier_feature authority rules). */
1213
1724
  featureKey: Scalars['String']['input'];
1214
1725
  };
1215
1726
  export type DestroyEnvironmentInput = {
1727
+ /** Optional idempotency key. Recommended for retries: replaying with the same key and identical input returns the first result instead of re-applying; the same key with different input returns IDEMPOTENCY_CONFLICT. Keys expire after 24h. */
1728
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
1729
+ /** Organization id (BigInt) that owns the environment. */
1216
1730
  orgId: Scalars['BigInt']['input'];
1731
+ /** Slug of the environment to destroy (all cloud resources are torn down). */
1217
1732
  slug: Scalars['String']['input'];
1218
1733
  };
1734
+ /** Input for environmentQuote. Mirrors CreateEnvironmentInput’s class/flavor shape: dedicated needs the four per-role flavors + counts; dev_single needs only the single flavor. */
1219
1735
  export type EnvironmentQuoteInput = {
1220
1736
  /** Flavor name from environmentFlavors(datacenter) for the Caddy LB VMs in front of the game-api fleet; must have a published hourly price. Required for dedicated. */
1221
1737
  caddyFlavor?: InputMaybe<Scalars['String']['input']>;
1222
1738
  /** Flavor name from environmentFlavors(datacenter); must have a published hourly price. Required for dedicated. */
1223
1739
  databaseFlavor?: InputMaybe<Scalars['String']['input']>;
1740
+ /** OVH datacenter/region code from environmentDatacenters (e.g. 'GRA11'). */
1224
1741
  datacenter: Scalars['String']['input'];
1225
1742
  /** Deployment class: 'dedicated' (default) or 'dev_single'. */
1226
1743
  environmentClass?: InputMaybe<Scalars['String']['input']>;
@@ -1231,76 +1748,117 @@ export type EnvironmentQuoteInput = {
1231
1748
  gameApiMaxServers?: InputMaybe<Scalars['Int']['input']>;
1232
1749
  gameApiMinServers?: InputMaybe<Scalars['Int']['input']>;
1233
1750
  loadBalancerCount?: InputMaybe<Scalars['Int']['input']>;
1751
+ /** Organization id (BigInt) to quote against (uses its wallet balance). */
1234
1752
  orgId: Scalars['BigInt']['input'];
1235
1753
  /** Flavor name from environmentFlavors(datacenter); must have a published hourly price. Required for dedicated. */
1236
1754
  udpBuddyFlavor?: InputMaybe<Scalars['String']['input']>;
1237
1755
  udpBuddyMaxServers?: InputMaybe<Scalars['Int']['input']>;
1238
1756
  udpBuddyMinServers?: InputMaybe<Scalars['Int']['input']>;
1239
1757
  };
1758
+ /** Aggregate byte totals for one environment over the requested window. All *Bytes fields are string counters (may exceed Int range). */
1240
1759
  export type EnvironmentUsageRollupRow = {
1241
1760
  __typename?: 'EnvironmentUsageRollupRow';
1761
+ /** Environment display name. */
1242
1762
  displayName: Scalars['String']['output'];
1763
+ /** Environment UUID (as a string). */
1243
1764
  environmentId: Scalars['String']['output'];
1765
+ /** Environment slug. */
1244
1766
  environmentSlug: Scalars['String']['output'];
1767
+ /** Total GraphQL bytes received (string counter). */
1245
1768
  graphqlRecvBytes: Scalars['String']['output'];
1769
+ /** Total GraphQL bytes sent (string counter). */
1246
1770
  graphqlSendBytes: Scalars['String']['output'];
1771
+ /** Total replication bytes received (string counter). */
1247
1772
  replicationRecvBytes: Scalars['String']['output'];
1773
+ /** Total replication bytes sent (string counter). */
1248
1774
  replicationSendBytes: Scalars['String']['output'];
1249
1775
  };
1776
+ /** Per-minute replication and GraphQL usage time series for an environment, with rate peaks and live Buddy rates. */
1250
1777
  export type EnvironmentUsageSummary = {
1251
1778
  __typename?: 'EnvironmentUsageSummary';
1779
+ /** Live Buddy UDP rates, or null when no live server is reporting. */
1252
1780
  buddyLive: Maybe<BuddyLiveRates>;
1781
+ /** Environment UUID (as a string). */
1253
1782
  environmentId: Scalars['String']['output'];
1783
+ /** Environment slug. */
1254
1784
  environmentSlug: Scalars['String']['output'];
1785
+ /** GraphQL API usage, one row per minute. */
1255
1786
  graphql: Array<UsageMinuteRow>;
1787
+ /** Owning organization id (as a string). */
1256
1788
  orgId: Scalars['String']['output'];
1789
+ /** Replication (game state sync) usage, one row per minute. */
1257
1790
  replication: Array<UsageMinuteRow>;
1791
+ /** Peak/average replication send rates. */
1258
1792
  replicationRates: UsageRatePeaks;
1259
1793
  };
1260
1794
  /** An org's free shared app slot quota usage. */
1261
1795
  export type FreeAppQuota = {
1262
1796
  __typename?: 'FreeAppQuota';
1797
+ /** Organization id (BigInt). */
1263
1798
  orgId: Scalars['BigInt']['output'];
1799
+ /** Apps on a paid subscription (do not consume free slots). */
1264
1800
  paidApps: Scalars['Int']['output'];
1801
+ /** Total free shared app slots granted to the org. */
1265
1802
  quota: Scalars['Int']['output'];
1803
+ /** Free slots still available (quota − usedFree); 0 means a paid plan is required. */
1266
1804
  remainingFree: Scalars['Int']['output'];
1805
+ /** Free slots currently in use. */
1267
1806
  usedFree: Scalars['Int']['output'];
1268
1807
  };
1808
+ /** Status of the recurring free-play window during which gameplay is open without entitlement. */
1269
1809
  export type FreePlayWindowInfo = {
1270
1810
  __typename?: 'FreePlayWindowInfo';
1811
+ /** Human-readable description of the free-play schedule. */
1271
1812
  description: Scalars['String']['output'];
1813
+ /** True if a free-play window is active right now. */
1272
1814
  isCurrentlyActive: Scalars['Boolean']['output'];
1815
+ /** ISO-8601 start time of the next free-play window, or null if none. */
1273
1816
  nextWindowStart: Maybe<Scalars['String']['output']>;
1274
1817
  };
1818
+ /** One property write a function performs. */
1275
1819
  export type FunctionMutationInput = {
1276
1820
  /** Expression string (compiled to AST server-side). */
1277
1821
  expression: Scalars['String']['input'];
1822
+ /** The property key to write. */
1278
1823
  property: Scalars['String']['input'];
1279
1824
  /** Container target: self | ref("uuid") | ref($param). */
1280
1825
  target: Scalars['String']['input'];
1281
1826
  };
1827
+ /** A typed parameter declaration for a function. */
1282
1828
  export type FunctionParamInput = {
1283
1829
  /** JSON-encoded default value. */
1284
1830
  defaultValueJson?: InputMaybe<Scalars['String']['input']>;
1831
+ /** Optional description of the parameter. */
1285
1832
  description?: InputMaybe<Scalars['String']['input']>;
1833
+ /** Parameter name (referenced as $name in expressions). */
1286
1834
  name: Scalars['String']['input'];
1835
+ /** Whether the parameter is required. Defaults to true. */
1287
1836
  required?: InputMaybe<Scalars['Boolean']['input']>;
1837
+ /** Display/order index. Defaults to 0. */
1288
1838
  sortOrder?: InputMaybe<Scalars['Int']['input']>;
1839
+ /** int | float | string | bool | array | object | container_ref */
1289
1840
  valueType: Scalars['String']['input'];
1290
1841
  };
1291
1842
  /** Startup contract for browser game clients. Fetch this after login to initialize protocol/version checks and UDP proxy state in one round trip. */
1292
1843
  export type GameClientBootstrap = {
1293
1844
  __typename?: 'GameClientBootstrap';
1845
+ /** The app (game) this bootstrap was requested for, echoed back. A BigInt as a decimal string. Reuse this exact appId to scope the udpNotifications subscription and on every spatial send for this play session. */
1294
1846
  appId: Scalars['BigInt']['output'];
1847
+ /** Maximum allowed value for the `decayRate` (named attenuation algorithm id) field on spatial sends. Currently 5; the server clamps send `decayRate` to 0..this. decayRate selects how the message attenuates with distance (0 = none). */
1295
1848
  maxDecayRate: Scalars['Int']['output'];
1849
+ /** Maximum allowed value for the `distance` (chunk fan-out radius) field on spatial sends. Currently 8; the server clamps send `distance` to 0..this. distance is the number of chunks outward the message is replicated. */
1296
1850
  maxReplicationDistance: Scalars['Int']['output'];
1851
+ /** The authenticated user resolved from the bearer game token on the request. Use this for the local player identity instead of a separate `me` call. */
1297
1852
  me: User;
1298
1853
  /** GraphQL WebSocket subprotocol expected by udpNotifications. */
1299
1854
  realtimeProtocol: Scalars['String']['output'];
1855
+ /** The modulus the per-message sequenceNumber wraps at (256), i.e. sequenceNumber is a uint8 in 0-255. sequenceNumber exists ONLY to correlate asynchronous responses/errors (delivered on udpNotifications) with the send that produced them — it is NOT an idempotency key, and the server does not dedupe replays. */
1300
1856
  sequenceNumberModulo: Scalars['Int']['output'];
1301
1857
  /** GraphQL subscription field that carries UDP proxy notifications. */
1302
1858
  subscriptionName: Scalars['String']['output'];
1859
+ /** UDP proxy session status for this game token at bootstrap time. connected is false until you open a session (via connectUdpProxy, any send* mutation, or subscribing to udpNotifications); fetching the bootstrap does not open one. */
1303
1860
  udpProxyConnectionStatus: UdpProxyConnectionStatus;
1861
+ /** Current server version and the minimum client version the server accepts. Compare your build against minimumClientVersion before connecting; prompt the player to update if it is too old. */
1304
1862
  versionInfo: ServerVersionInfo;
1305
1863
  };
1306
1864
  /** The elected host user of a game (app). Election is deterministic across all cks-game-api replicas: among actors that are still fresh (recently heartbeated), the user whose earliest actor was created first wins, with a uuid tiebreaker. Row lifecycle is owned by Buddy (cks-udp-api); liveness (updated_at) is owned by game-api's actorHeartbeat mutation. */
@@ -1313,96 +1871,166 @@ export type GameHost = {
1313
1871
  /** The user_id of the elected host. Stable while this user has at least one fresh row in `actors` for the app; the next-oldest user takes over automatically once the current host stops heartbeating (its rows age past HOST_ACTOR_FRESHNESS_SECONDS) or Buddy idle-evicts its last row. */
1314
1872
  hostUserId: Scalars['BigInt']['output'];
1315
1873
  };
1316
- /** Generic error response from the UDP game server. Uses the sequence number to match the original request that failed. */
1874
+ /** Relay-style cursor-paginated connection over the function-invocation event log (GmEvent). Page with `first`/`after`; cursors are opaque. */
1875
+ export type GameModelEventsConnection = {
1876
+ __typename?: 'GameModelEventsConnection';
1877
+ /** Edges on this page. */
1878
+ edges: Array<GmEventEdge>;
1879
+ /** Pagination metadata. */
1880
+ pageInfo: ConnectionPageInfo;
1881
+ /** Total matching records across all pages, when known (null for sources that do not compute a total). */
1882
+ totalCount: Maybe<Scalars['Int']['output']>;
1883
+ };
1884
+ /** Asynchronous error from the UDP game server for a previously sent datagram (e.g. a send* mutation). Delivered as a member of the udpNotifications union, NOT as a GraphQL error on the mutation (which only reports whether the datagram was accepted for sending). Match it to the originating send via sequenceNumber and read errorCode for the reason. Note: not every failure produces one — some auth failures are dropped silently (see UdpErrorCode). */
1317
1885
  export type GenericErrorResponse = {
1318
1886
  __typename?: 'GenericErrorResponse';
1319
1887
  /** Error code indicating the reason for the failure. */
1320
1888
  errorCode: UdpErrorCode;
1321
- /** The sequence number from the original request, used to correlate this error with the request that caused it. */
1889
+ /** Echoes the sequenceNumber of the request that failed (a uint8, 0-255, wrapping at modulo 256) so you can correlate this error with the send* mutation that produced it. Correlation only — it is not an idempotency key. */
1322
1890
  sequenceNumber: Scalars['Int']['output'];
1323
1891
  };
1892
+ /** Arguments for getChunk: selects a single chunk by app id and chunk coordinates, with optional LOD filtering. */
1324
1893
  export type GetChunkInput = {
1894
+ /** Id of the app that owns the chunk (decimal string). */
1325
1895
  appId: Scalars['BigInt']['input'];
1896
+ /** Address of the chunk to fetch. */
1326
1897
  coordinates: ChunkCoordinatesInput;
1898
+ /** When true, return all available LODs and ignore `requestedLodLevels`. */
1327
1899
  includeAllLods?: InputMaybe<Scalars['Boolean']['input']>;
1900
+ /** Optional list of LOD levels (each >= 0) to include in the returned chunk's `lods`. Ignored when `includeAllLods` is true. Omit to apply no LOD filtering. */
1328
1901
  requestedLodLevels?: InputMaybe<Array<Scalars['Int']['input']>>;
1329
1902
  };
1903
+ /** Arguments for getChunkLods: selects the LOD meshes for one chunk and returns only the requested levels. */
1330
1904
  export type GetChunkLodsInput = {
1905
+ /** Id of the app that owns the chunk (decimal string). */
1331
1906
  appId: Scalars['BigInt']['input'];
1907
+ /** Address of the chunk whose LODs to fetch. */
1332
1908
  coordinates: ChunkCoordinatesInput;
1909
+ /** LOD levels to return (each >= 0; 0 is the finest). Only matching levels are included in the response. */
1333
1910
  lodLevels: Array<Scalars['Int']['input']>;
1334
1911
  };
1912
+ /** Arguments for getChunksByDistance: selects chunks within a cubic (Chebyshev-distance) radius around a center chunk, with pagination. */
1335
1913
  export type GetChunksByDistanceInput = {
1914
+ /** Id of the app whose chunks to search (decimal string). */
1336
1915
  appId: Scalars['BigInt']['input'];
1916
+ /** Center chunk of the search cube. */
1337
1917
  centerCoordinate: ChunkCoordinatesInput;
1918
+ /** Maximum number of chunks to return. Defaults to 1000 when omitted. Must be >= 0. */
1338
1919
  limit?: InputMaybe<Scalars['Int']['input']>;
1920
+ /** Cube 'radius' in chunks measured as Chebyshev distance: matches chunks whose x, y and z each differ from the center by at most this many chunks (a (2*maxDistance+1)^3 cube). Integer, 1-8 inclusive. */
1339
1921
  maxDistance: Scalars['Int']['input'];
1922
+ /** Number of chunks to skip for pagination. Defaults to 0 when omitted. Must be >= 0. */
1340
1923
  skip?: InputMaybe<Scalars['Int']['input']>;
1341
1924
  };
1925
+ /** Arguments for getVoxelList: selects all recorded voxel edits for one chunk by app id and chunk coordinates. */
1342
1926
  export type GetVoxelListInput = {
1927
+ /** Id of the app that owns the chunk (decimal string). */
1343
1928
  appId: Scalars['BigInt']['input'];
1929
+ /** Address of the chunk whose voxel edits to list. */
1344
1930
  coordinates: ChunkCoordinatesInput;
1345
1931
  };
1932
+ /** An app feature key that functions can gate on and tiers can grant. */
1346
1933
  export type GmAppFeature = {
1347
1934
  __typename?: 'GmAppFeature';
1935
+ /** The app (tenant) that defines the feature. */
1348
1936
  appId: Scalars['BigInt']['output'];
1937
+ /** Optional description of the feature. */
1349
1938
  description: Maybe<Scalars['String']['output']>;
1939
+ /** The feature key (referenced by tier_feature authority rules). */
1350
1940
  featureKey: Scalars['String']['output'];
1351
1941
  };
1942
+ /** The app's game-model runtime policy. */
1352
1943
  export type GmAppPolicy = {
1353
1944
  __typename?: 'GmAppPolicy';
1945
+ /** The app (tenant) the policy applies to. */
1354
1946
  appId: Scalars['BigInt']['output'];
1947
+ /** Default role assigned to new session participants. */
1355
1948
  defaultParticipantRole: Scalars['String']['output'];
1949
+ /** Who may create sessions: admin | member | anyone. */
1356
1950
  sessionCreationPolicy: Scalars['String']['output'];
1357
1951
  };
1952
+ /** A container: a runtime instance of a container type (optionally scoped to a session). */
1358
1953
  export type GmContainer = {
1359
1954
  __typename?: 'GmContainer';
1955
+ /** The app (tenant) that owns the container. */
1360
1956
  appId: Scalars['BigInt']['output'];
1957
+ /** Unique container id (UUID). */
1361
1958
  containerId: Scalars['String']['output'];
1959
+ /** Optional description. */
1362
1960
  description: Maybe<Scalars['String']['output']>;
1961
+ /** Human-friendly display name. */
1363
1962
  displayName: Scalars['String']['output'];
1364
1963
  /** JSON object of developer metadata. */
1365
1964
  metadataJson: Scalars['String']['output'];
1965
+ /** The owning user, or null if unowned. */
1366
1966
  ownerUserId: Maybe<Scalars['BigInt']['output']>;
1967
+ /** Owning session id, or null for an app-global container. */
1367
1968
  sessionId: Maybe<Scalars['String']['output']>;
1969
+ /** The container type name. */
1368
1970
  typeName: Scalars['String']['output'];
1369
1971
  };
1972
+ /** A container plus its property values filtered to what the requesting caller is allowed to see. */
1370
1973
  export type GmContainerState = {
1371
1974
  __typename?: 'GmContainerState';
1975
+ /** The app (tenant) that owns the container. */
1372
1976
  appId: Scalars['BigInt']['output'];
1977
+ /** The container id (UUID). */
1373
1978
  containerId: Scalars['String']['output'];
1979
+ /** Human-friendly display name. */
1374
1980
  displayName: Scalars['String']['output'];
1981
+ /** The owning user, or null if unowned. */
1375
1982
  ownerUserId: Maybe<Scalars['BigInt']['output']>;
1376
1983
  /** JSON object of visible properties (filtered by the caller). */
1377
1984
  propertiesJson: Scalars['String']['output'];
1985
+ /** Owning session id, or null if app-global. */
1378
1986
  sessionId: Maybe<Scalars['String']['output']>;
1987
+ /** The container type name. */
1379
1988
  typeName: Scalars['String']['output'];
1380
1989
  };
1990
+ /** A studio-defined container type: the schema for a kind of runtime entity (like a class). */
1381
1991
  export type GmContainerType = {
1382
1992
  __typename?: 'GmContainerType';
1993
+ /** The app (tenant) that owns the type. */
1383
1994
  appId: Scalars['BigInt']['output'];
1995
+ /** Default visibility for this type's properties: public | owner | hidden. */
1384
1996
  defaultPropertyVisibility: Scalars['String']['output'];
1997
+ /** Optional description of the type. */
1385
1998
  description: Maybe<Scalars['String']['output']>;
1999
+ /** Human-friendly display name. */
1386
2000
  displayName: Scalars['String']['output'];
2001
+ /** Who may instantiate this type: admin | member | owner. */
1387
2002
  instantiableBy: Scalars['String']['output'];
1388
2003
  /** JSON object of developer metadata. */
1389
2004
  metadataJson: Scalars['String']['output'];
2005
+ /** Stable type name (unique per app); used to reference the type. */
1390
2006
  typeName: Scalars['String']['output'];
1391
2007
  };
2008
+ /** A directed relationship edge between two containers. */
1392
2009
  export type GmEdge = {
1393
2010
  __typename?: 'GmEdge';
2011
+ /** Unique edge id (UUID). */
1394
2012
  edgeId: Scalars['String']['output'];
2013
+ /** Source container id. */
1395
2014
  fromContainerId: Scalars['String']['output'];
2015
+ /** The relationship type label. */
1396
2016
  relationshipType: Scalars['String']['output'];
2017
+ /** Target container id. */
1397
2018
  toContainerId: Scalars['String']['output'];
2019
+ /** Optional edge weight. */
1398
2020
  weight: Maybe<Scalars['Float']['output']>;
1399
2021
  };
2022
+ /** An audit-log entry recording one function invocation and its outcome. */
1400
2023
  export type GmEvent = {
1401
2024
  __typename?: 'GmEvent';
2025
+ /** The user who invoked the function. */
1402
2026
  callerUserId: Maybe<Scalars['BigInt']['output']>;
2027
+ /** Error message when the invocation failed. */
1403
2028
  errorMessage: Maybe<Scalars['String']['output']>;
2029
+ /** Unique event id. */
1404
2030
  eventId: Scalars['String']['output'];
2031
+ /** When the invocation executed. */
1405
2032
  executedAt: Scalars['DateTime']['output'];
2033
+ /** The function that was invoked. */
1406
2034
  functionName: Scalars['String']['output'];
1407
2035
  /** JSON array of applied mutations. */
1408
2036
  mutationsAppliedJson: Scalars['String']['output'];
@@ -1410,484 +2038,776 @@ export type GmEvent = {
1410
2038
  paramsJson: Scalars['String']['output'];
1411
2039
  /** JSON-encoded return value. */
1412
2040
  returnValueJson: Maybe<Scalars['String']['output']>;
2041
+ /** The self container id the function ran against. */
1413
2042
  selfContainerId: Maybe<Scalars['String']['output']>;
2043
+ /** The session the invocation ran in, if any. */
1414
2044
  sessionId: Maybe<Scalars['String']['output']>;
2045
+ /** True if the invocation succeeded. */
1415
2046
  success: Scalars['Boolean']['output'];
1416
2047
  };
2048
+ /** An edge in a GmEvent connection. */
2049
+ export type GmEventEdge = {
2050
+ __typename?: 'GmEventEdge';
2051
+ /** Opaque cursor for this edge. */
2052
+ cursor: Scalars['String']['output'];
2053
+ /** The node at the end of this edge. */
2054
+ node: GmEvent;
2055
+ };
2056
+ /** A studio-defined function: a named, sandboxed behavior over containers (parameters, declared mutations, optional return, and an authority invoke policy). */
1417
2057
  export type GmFunction = {
1418
2058
  __typename?: 'GmFunction';
2059
+ /** The app (tenant) that owns the function. */
1419
2060
  appId: Scalars['BigInt']['output'];
2061
+ /** Optional container type this function is bound to (null = global). */
1420
2062
  containerTypeName: Maybe<Scalars['String']['output']>;
2063
+ /** Optional description of the function. */
1421
2064
  description: Maybe<Scalars['String']['output']>;
2065
+ /** Unique function id (UUID). */
1422
2066
  functionId: Scalars['String']['output'];
1423
2067
  /** JSON-encoded invoke policy rule tree. */
1424
2068
  invokePolicyJson: Maybe<Scalars['String']['output']>;
2069
+ /** Who may invoke and in what context: player | server | internal. */
1425
2070
  invokeScope: Scalars['String']['output'];
2071
+ /** The property writes the function performs when invoked. */
1426
2072
  mutations: Array<GmFunctionMutation>;
2073
+ /** Function name (unique per app); used to invoke it. */
1427
2074
  name: Scalars['String']['output'];
2075
+ /** Typed parameters the function accepts. */
1428
2076
  parameters: Array<GmFunctionParam>;
2077
+ /** Optional expression whose value becomes the invoke result. */
1429
2078
  returnExpression: Maybe<Scalars['String']['output']>;
2079
+ /** Optional declared return value type. */
1430
2080
  returnType: Maybe<Scalars['String']['output']>;
1431
2081
  /** Non-fatal static-analysis warnings from the last upload. */
1432
2082
  warnings: Array<Scalars['String']['output']>;
1433
2083
  };
2084
+ /** One declared write a function performs: set `property` on `target` to `expression`. */
1434
2085
  export type GmFunctionMutation = {
1435
2086
  __typename?: 'GmFunctionMutation';
2087
+ /** The expression (source) evaluated to produce the new value. */
1436
2088
  expression: Scalars['String']['output'];
2089
+ /** The property key being written. */
1437
2090
  property: Scalars['String']['output'];
1438
2091
  /** Container reference target: self | ref("uuid") | ref($param). */
1439
2092
  target: Scalars['String']['output'];
1440
2093
  };
2094
+ /** A typed parameter of a studio-defined function. */
1441
2095
  export type GmFunctionParam = {
1442
2096
  __typename?: 'GmFunctionParam';
1443
2097
  /** JSON-encoded default value. */
1444
2098
  defaultValueJson: Maybe<Scalars['String']['output']>;
2099
+ /** Optional description of the parameter. */
1445
2100
  description: Maybe<Scalars['String']['output']>;
2101
+ /** Parameter name (referenced as $name in expressions). */
1446
2102
  name: Scalars['String']['output'];
2103
+ /** Whether the parameter is required at invoke time. */
1447
2104
  required: Scalars['Boolean']['output'];
2105
+ /** Display/order index of the parameter. */
1448
2106
  sortOrder: Scalars['Int']['output'];
2107
+ /** Value type: int | float | string | bool | array | object | container_ref. */
1449
2108
  valueType: Scalars['String']['output'];
1450
2109
  };
2110
+ /** The outcome of a gameModelInvoke call (return value, applied writes, and any error). */
1451
2111
  export type GmInvokeResult = {
1452
2112
  __typename?: 'GmInvokeResult';
2113
+ /** Error message when success is false (e.g. authority denied or evaluation error). */
1453
2114
  errorMessage: Maybe<Scalars['String']['output']>;
2115
+ /** The id of the event logged for this invocation. */
1454
2116
  eventId: Scalars['String']['output'];
2117
+ /** The function that was invoked. */
1455
2118
  functionName: Scalars['String']['output'];
2119
+ /** The property writes that were applied (empty if none / on failure). */
1456
2120
  mutationsApplied: Array<GmMutationApplied>;
1457
2121
  /** JSON-encoded return value. */
1458
2122
  returnValueJson: Maybe<Scalars['String']['output']>;
2123
+ /** True if the invocation succeeded; false if it was rejected or errored. */
1459
2124
  success: Scalars['Boolean']['output'];
1460
2125
  };
2126
+ /** One property write applied during a function invocation (with before/after values). */
1461
2127
  export type GmMutationApplied = {
1462
2128
  __typename?: 'GmMutationApplied';
2129
+ /** The container that was written. */
1463
2130
  containerId: Scalars['String']['output'];
2131
+ /** The property key written. */
1464
2132
  key: Scalars['String']['output'];
2133
+ /** JSON-encoded value after the write. */
1465
2134
  newValueJson: Maybe<Scalars['String']['output']>;
2135
+ /** JSON-encoded value before the write. */
1466
2136
  oldValueJson: Maybe<Scalars['String']['output']>;
2137
+ /** The value type written. */
1467
2138
  valueType: Scalars['String']['output'];
1468
2139
  };
2140
+ /** A typed property (field) defined on a container type. */
1469
2141
  export type GmPropertyDef = {
1470
2142
  __typename?: 'GmPropertyDef';
2143
+ /** The app (tenant) that owns the type. */
1471
2144
  appId: Scalars['BigInt']['output'];
2145
+ /** The container type this property belongs to. */
1472
2146
  containerTypeName: Scalars['String']['output'];
1473
2147
  /** JSON-encoded default value. */
1474
2148
  defaultValueJson: Maybe<Scalars['String']['output']>;
2149
+ /** Optional description of the property. */
1475
2150
  description: Maybe<Scalars['String']['output']>;
2151
+ /** Property key (unique within the type). */
1476
2152
  key: Scalars['String']['output'];
2153
+ /** Value type: int | float | string | bool | array | object | container_ref. */
1477
2154
  valueType: Scalars['String']['output'];
2155
+ /** Read visibility: public | owner | hidden. */
1478
2156
  visibility: Scalars['String']['output'];
2157
+ /** Who may write the property: function | owner | admin. */
1479
2158
  writable: Scalars['String']['output'];
1480
2159
  };
2160
+ /** Summary of what a gameModelSeed call created. */
1481
2161
  export type GmSeedResult = {
1482
2162
  __typename?: 'GmSeedResult';
2163
+ /** Number of container types created. */
1483
2164
  containerTypesCreated: Scalars['Int']['output'];
2165
+ /** Number of containers (instances) created. */
1484
2166
  containersCreated: Scalars['Int']['output'];
2167
+ /** Number of edges created. */
1485
2168
  edgesCreated: Scalars['Int']['output'];
2169
+ /** Number of functions created. */
1486
2170
  functionsCreated: Scalars['Int']['output'];
1487
2171
  /** JSON object mapping seed temp_id -> created container UUID. */
1488
2172
  idMapJson: Scalars['String']['output'];
2173
+ /** Number of property definitions created. */
1489
2174
  propertyDefinitionsCreated: Scalars['Int']['output'];
2175
+ /** Non-fatal warnings produced while seeding. */
1490
2176
  warnings: Array<Scalars['String']['output']>;
1491
2177
  };
2178
+ /** A runtime session: an isolated instance scope (e.g. a match or room) for containers. */
1492
2179
  export type GmSession = {
1493
2180
  __typename?: 'GmSession';
2181
+ /** The app (tenant) that owns the session. */
1494
2182
  appId: Scalars['BigInt']['output'];
2183
+ /** The user who created the session. */
1495
2184
  createdByUserId: Maybe<Scalars['BigInt']['output']>;
2185
+ /** The user whose turn it currently is (turn-based play), or null. */
1496
2186
  currentTurnUserId: Maybe<Scalars['BigInt']['output']>;
1497
2187
  /** JSON object of developer metadata. */
1498
2188
  metadataJson: Scalars['String']['output'];
2189
+ /** Optional session name. */
1499
2190
  name: Maybe<Scalars['String']['output']>;
2191
+ /** Unique session id. */
1500
2192
  sessionId: Scalars['String']['output'];
2193
+ /** Lifecycle status (e.g. active). */
1501
2194
  status: Scalars['String']['output'];
1502
2195
  };
2196
+ /** A user's participation in a session. */
1503
2197
  export type GmSessionParticipant = {
1504
2198
  __typename?: 'GmSessionParticipant';
2199
+ /** The participant role within the session. */
1505
2200
  role: Scalars['String']['output'];
2201
+ /** The session id. */
1506
2202
  sessionId: Scalars['String']['output'];
2203
+ /** The participant user id. */
1507
2204
  userId: Scalars['BigInt']['output'];
1508
2205
  };
2206
+ /** A grant of a feature key to an access tier. */
1509
2207
  export type GmTierFeature = {
1510
2208
  __typename?: 'GmTierFeature';
2209
+ /** The app (tenant). */
1511
2210
  appId: Scalars['BigInt']['output'];
2211
+ /** The feature key granted to the tier. */
1512
2212
  featureKey: Scalars['String']['output'];
2213
+ /** The access tier the feature is granted to. */
1513
2214
  tierId: Scalars['BigInt']['output'];
1514
2215
  };
2216
+ /** The result of a graph traversal: the reachable container nodes and the edges between them. */
1515
2217
  export type GmTraverseResult = {
1516
2218
  __typename?: 'GmTraverseResult';
2219
+ /** Edges traversed, of the requested relationship type. */
1517
2220
  edges: Array<GmEdge>;
2221
+ /** Containers reached within the requested depth. */
1518
2222
  nodes: Array<GmContainer>;
2223
+ /** The root container the traversal started from. */
1519
2224
  rootId: Scalars['String']['output'];
1520
2225
  };
2226
+ /** A container type's complete schema: its property definitions and available functions. */
1521
2227
  export type GmTypeSchema = {
1522
2228
  __typename?: 'GmTypeSchema';
2229
+ /** The functions available on the type. */
1523
2230
  functions: Array<GmFunction>;
2231
+ /** The type's property definitions. */
1524
2232
  propertyDefinitions: Array<GmPropertyDef>;
2233
+ /** The container type name. */
1525
2234
  typeName: Scalars['String']['output'];
1526
2235
  };
2236
+ /** Input for granting a user access to an app, optionally on a specific tier. */
1527
2237
  export type GrantAppAccessInput = {
2238
+ /** Numeric id of the app to grant access to. The caller must hold manage_access_tiers on this app. */
1528
2239
  appId: Scalars['BigInt']['input'];
2240
+ /** Optional audit override for who granted access; defaults to the calling user id. Service grants use "system". */
1529
2241
  grantedBy?: InputMaybe<Scalars['String']['input']>;
2242
+ /** Optional idempotency key. Recommended for retries: replaying with the same key and identical input returns the first result instead of re-applying; the same key with different input returns IDEMPOTENCY_CONFLICT. Keys expire after 24h. */
2243
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
2244
+ /** Optional tier to grant. When omitted, an existing grant keeps its current tier (no tier change). */
1530
2245
  tierId?: InputMaybe<Scalars['BigInt']['input']>;
2246
+ /** Numeric id of the user who should receive access. */
1531
2247
  userId: Scalars['BigInt']['input'];
1532
2248
  };
2249
+ /** Grant runtime permission keys directly to one user on one grid (writes the grid_user_direct_grants input table). */
1533
2250
  export type GrantGridPermissionsInput = {
2251
+ /** The app (tenant) that owns the grid. */
1534
2252
  appId: Scalars['BigInt']['input'];
2253
+ /** Optional expiry; after this time the grant stops contributing to the effective ACL. Null/omitted means it never expires. */
1535
2254
  expiresAt?: InputMaybe<Scalars['DateTime']['input']>;
2255
+ /** The grid to grant on. */
1536
2256
  gridId: Scalars['BigInt']['input'];
2257
+ /** Runtime permission key strings to grant (e.g. update_voxel_data). Each must be a known key in runtime_permissions, unique, and at most 64 chars. */
1537
2258
  permissionKeys: Array<Scalars['String']['input']>;
2259
+ /** The user receiving the grant. Must already have active app access for this app. */
1538
2260
  userId: Scalars['BigInt']['input'];
1539
2261
  };
2262
+ /** Grant or revoke a feature key for an access tier. */
1540
2263
  export type GrantTierFeatureInput = {
2264
+ /** The app (tenant). */
1541
2265
  appId: Scalars['BigInt']['input'];
2266
+ /** The feature key to grant to (or revoke from) the tier. */
1542
2267
  featureKey: Scalars['String']['input'];
2268
+ /** The access tier id. */
1543
2269
  tierId: Scalars['BigInt']['input'];
1544
2270
  };
2271
+ /** A registered GraphQL API server instance in the fleet (either a management-api or a game-api, see `kind`), with reachability addresses and basic host telemetry. Returned by graphqlServers (all) and activeGraphQLServers (only ReadyForClients). Use this for service discovery; realtime/UDP play still goes through the game-api UDP proxy. */
1545
2272
  export type GraphQlServer = {
1546
2273
  __typename?: 'GraphQLServer';
2274
+ /** TCP port the GraphQL/HTTP API listens on (default 4000). */
1547
2275
  apiPort: Scalars['Int']['output'];
2276
+ /** Current CPU utilization percentage (0-100) of the host, if reported. */
1548
2277
  cpuUsagePct: Maybe<Scalars['Float']['output']>;
2278
+ /** When this server was first registered in the fleet. */
1549
2279
  createdAt: Scalars['DateTime']['output'];
2280
+ /** Unique id of this GraphQL server registration. */
1550
2281
  graphqlServerId: Scalars['ID']['output'];
2282
+ /** Internal/private IPv4 address of this server. Use publicIp4 for external reachability. */
1551
2283
  ip4: Maybe<Scalars['String']['output']>;
2284
+ /** Internal/private IPv6 address of this server. Use publicIp6 for external reachability. */
1552
2285
  ip6: Maybe<Scalars['String']['output']>;
1553
2286
  /** Logical kind of GraphQL service: 'management-api' or 'game-api'. */
1554
2287
  kind: Maybe<Scalars['String']['output']>;
2288
+ /** 1-minute load average of the host, if reported. */
1555
2289
  loadAverage1m: Maybe<Scalars['Float']['output']>;
2290
+ /** Current memory utilization percentage (0-100) of the host, if reported. */
1556
2291
  memoryUsagePct: Maybe<Scalars['Float']['output']>;
2292
+ /** Cloud provider instance id of the underlying host, if known. */
1557
2293
  providerInstanceId: Maybe<Scalars['String']['output']>;
2294
+ /** Public IPv4 address clients use to reach this server, if assigned. */
1558
2295
  publicIp4: Maybe<Scalars['String']['output']>;
2296
+ /** Public IPv6 address clients use to reach this server, if assigned. */
1559
2297
  publicIp6: Maybe<Scalars['String']['output']>;
2298
+ /** UUID of the runtime/Buddy (cks-udp-api) instance this API server is paired with, if any. */
1560
2299
  runtimeServerId: Maybe<Scalars['String']['output']>;
2300
+ /** Current lifecycle state (see ServerState). activeGraphQLServers returns only ReadyForClients. */
1561
2301
  status: ServerState;
2302
+ /** When this server row was last updated (heartbeat). Use to judge freshness. */
1562
2303
  updatedAt: Scalars['DateTime']['output'];
1563
2304
  };
2305
+ /** Usage totals for a single GraphQL operation over the window. */
1564
2306
  export type GraphqlOperationUsageRow = {
1565
2307
  __typename?: 'GraphqlOperationUsageRow';
2308
+ /** GraphQL operation name (or '(anonymous)'). */
1566
2309
  operationName: Scalars['String']['output'];
2310
+ /** Total bytes received for this operation (string counter). */
1567
2311
  recvBytes: Scalars['String']['output'];
2312
+ /** Total bytes sent for this operation (string counter). */
1568
2313
  sendBytes: Scalars['String']['output'];
2314
+ /** Total invocation count (string counter). */
1569
2315
  totalOps: Scalars['String']['output'];
1570
2316
  };
2317
+ /** A grid: a 3D box of chunks within an app that runtime/world (voxel) permissions are scoped to. Its bounds lie inside one of the app's grid assignments and never overlap another grid. */
1571
2318
  export type Grid = {
1572
2319
  __typename?: 'Grid';
2320
+ /** The app (tenant) that owns the grid. */
1573
2321
  app_id: Scalars['BigInt']['output'];
2322
+ /** When the grid was created. */
1574
2323
  created_at: Scalars['DateTime']['output'];
2324
+ /** Unique grid id. */
1575
2325
  grid_id: Scalars['BigInt']['output'];
2326
+ /** High (maximum x/y/z) corner chunk of the box. */
1576
2327
  high_chunk: ChunkCoordinates;
2328
+ /** Low (minimum x/y/z) corner chunk of the box. */
1577
2329
  low_chunk: ChunkCoordinates;
1578
2330
  };
2331
+ /** A single group/role -> permission-key grant on a grid (one row of the grid_group_grants input table). */
1579
2332
  export type GridGroupGrant = {
1580
2333
  __typename?: 'GridGroupGrant';
2334
+ /** The app (tenant) that owns the grid. */
1581
2335
  appId: Scalars['BigInt']['output'];
2336
+ /** When the grant expires; null means it never expires. */
1582
2337
  expiresAt: Maybe<Scalars['DateTime']['output']>;
2338
+ /** The grid this grant applies to. */
1583
2339
  gridId: Scalars['BigInt']['output'];
2340
+ /** The group this grant is for. */
1584
2341
  groupId: Scalars['BigInt']['output'];
1585
2342
  /** Null means the grant applies to all members of the group. */
1586
2343
  groupRoleId: Maybe<Scalars['BigInt']['output']>;
2344
+ /** The runtime permission key string granted to the group/role. */
1587
2345
  permissionKey: Scalars['String']['output'];
1588
2346
  };
2347
+ /** The permission-key whitelist configured for a grid (the grid_permission_limits input table). */
1589
2348
  export type GridPermissionLimits = {
1590
2349
  __typename?: 'GridPermissionLimits';
2350
+ /** The app (tenant) that owns the grid. */
1591
2351
  appId: Scalars['BigInt']['output'];
2352
+ /** The grid the limits apply to. */
1592
2353
  gridId: Scalars['BigInt']['output'];
1593
2354
  /** The permission keys this grid is limited to. Empty means no limit (every active grid permission is allowed). */
1594
2355
  permissionKeys: Array<Scalars['String']['output']>;
1595
2356
  };
2357
+ /** A user's effective (materialized) runtime permissions on one grid: the flattened union of direct + group grants, with expired grants excluded, that Buddy enforces. */
1596
2358
  export type GridUserPermissions = {
1597
2359
  __typename?: 'GridUserPermissions';
2360
+ /** The app (tenant) that owns the grid. */
1598
2361
  appId: Scalars['BigInt']['output'];
2362
+ /** The grid these permissions apply to. */
1599
2363
  gridId: Scalars['BigInt']['output'];
2364
+ /** The effective runtime permission key strings the user currently holds on this grid. */
1600
2365
  permissionKeys: Array<Scalars['String']['output']>;
2366
+ /** The user these permissions belong to. */
1601
2367
  userId: Scalars['BigInt']['output'];
1602
2368
  };
2369
+ /** A generic group. `groupType` discriminates teams ('team'), channels ('channel'), and grid-access groups ('grid'). */
1603
2370
  export type Group = {
1604
2371
  __typename?: 'Group';
2372
+ /** The app (tenant) the group belongs to. */
1605
2373
  appId: Scalars['BigInt']['output'];
2374
+ /** When the group was created. */
1606
2375
  createdAt: Scalars['DateTime']['output'];
1607
2376
  /** Optional role auto-assigned to every new member (e.g. a channel "member" role granting send_messages). Null means new members get no role by default. */
1608
2377
  defaultRoleId: Maybe<Scalars['BigInt']['output']>;
2378
+ /** Optional free-text description. */
1609
2379
  description: Maybe<Scalars['String']['output']>;
2380
+ /** Unique group id. */
1610
2381
  groupId: Scalars['BigInt']['output'];
2382
+ /** Discriminator: 'team' | 'channel' | 'grid'. */
1611
2383
  groupType: Scalars['String']['output'];
2384
+ /** How users may join: open (join immediately) | request (pending approval) | invite | admin. */
1612
2385
  membershipPolicy: Scalars['String']['output'];
2386
+ /** Display name (unique per app + group type). */
1613
2387
  name: Scalars['String']['output'];
2388
+ /** The user who created/owns the group (holds the system 'leader' role). */
1614
2389
  ownerUserId: Maybe<Scalars['BigInt']['output']>;
2390
+ /** Lifecycle status, e.g. 'active'. */
1615
2391
  status: Scalars['String']['output'];
1616
2392
  };
2393
+ /** A user's membership in a group, including the roles assigned to them. */
1617
2394
  export type GroupMember = {
1618
2395
  __typename?: 'GroupMember';
2396
+ /** When the membership row was created. */
1619
2397
  createdAt: Scalars['DateTime']['output'];
2398
+ /** The group this membership is in. */
1620
2399
  groupId: Scalars['BigInt']['output'];
2400
+ /** Unique membership id. */
1621
2401
  groupMemberId: Scalars['BigInt']['output'];
2402
+ /** Roles assigned to this member. */
1622
2403
  roles: Array<GroupRole>;
2404
+ /** Membership status: 'active' | 'pending' (awaiting approval) | 'banned'. */
1623
2405
  status: Scalars['String']['output'];
2406
+ /** The member user id. */
1624
2407
  userId: Scalars['BigInt']['output'];
1625
2408
  };
2409
+ /** The caller's view of a group they belong to: the group, their roles, and their effective group permission keys. */
1626
2410
  export type GroupMembership = {
1627
2411
  __typename?: 'GroupMembership';
2412
+ /** The group the caller belongs to. */
1628
2413
  group: Group;
2414
+ /** When the caller joined the group. */
1629
2415
  joinedAt: Scalars['DateTime']['output'];
2416
+ /** The caller's effective group permission key strings (union across their roles). */
1630
2417
  permissions: Array<Scalars['String']['output']>;
2418
+ /** The caller's roles in this group. */
1631
2419
  roles: Array<GroupRole>;
1632
2420
  };
2421
+ /** A role within a group (team/channel). Carries the group-management permission keys it grants (e.g. manage_members), NOT world/runtime grid permissions. */
1633
2422
  export type GroupRole = {
1634
2423
  __typename?: 'GroupRole';
2424
+ /** When the role was created. */
1635
2425
  createdAt: Scalars['DateTime']['output'];
2426
+ /** The group this role belongs to. */
1636
2427
  groupId: Scalars['BigInt']['output'];
2428
+ /** Unique role id. */
1637
2429
  groupRoleId: Scalars['BigInt']['output'];
2430
+ /** True for built-in roles (e.g. 'leader') that cannot be renamed, re-ranked, or deleted. */
1638
2431
  isSystem: Scalars['Boolean']['output'];
2432
+ /** Group permission key strings this role grants (e.g. manage_members, manage_roles, manage_group, send_messages). */
1639
2433
  permissions: Array<Scalars['String']['output']>;
2434
+ /** Sort/precedence rank; higher is more senior. */
1640
2435
  rank: Scalars['Int']['output'];
2436
+ /** Role display name (unique within the group). */
1641
2437
  roleName: Scalars['String']['output'];
1642
2438
  };
1643
2439
  export type IngestEnvironmentVersionInput = {
2440
+ /** Overwrite an existing version row if one already exists (default false). */
1644
2441
  force?: Scalars['Boolean']['input'];
2442
+ /** Override the release notes. Defaults to the manifest value. */
1645
2443
  notes?: InputMaybe<Scalars['String']['input']>;
2444
+ /** Override the manifest status (e.g. 'available'). Defaults to the manifest value. */
1646
2445
  status?: InputMaybe<Scalars['String']['input']>;
2446
+ /** Environment release version to ingest, e.g. 'v0.1.4'. */
1647
2447
  version: Scalars['String']['input'];
1648
2448
  };
1649
2449
  export type InviteOrgMemberInput = {
2450
+ /** Organization to add the user to (BigInt as string). */
1650
2451
  orgId: Scalars['BigInt']['input'];
2452
+ /** user_id of the user to add (BigInt as string). */
1651
2453
  userId: Scalars['BigInt']['input'];
1652
2454
  };
2455
+ /** Invoke a studio-defined function against a self container. */
1653
2456
  export type InvokeFunctionInput = {
2457
+ /** The app (tenant) that owns the function. */
1654
2458
  appId: Scalars['BigInt']['input'];
2459
+ /** The function name to invoke. */
1655
2460
  functionName: Scalars['String']['input'];
1656
2461
  /** JSON object of params. */
1657
2462
  paramsJson?: InputMaybe<Scalars['String']['input']>;
2463
+ /** The 'self' container the function runs against (referenced as self in expressions). */
1658
2464
  selfContainerId: Scalars['String']['input'];
2465
+ /** Optional session context for the invocation. */
1659
2466
  sessionId?: InputMaybe<Scalars['String']['input']>;
1660
2467
  };
2468
+ /** Join an existing session. */
1661
2469
  export type JoinSessionInput = {
2470
+ /** The app (tenant) that owns the session. */
1662
2471
  appId: Scalars['BigInt']['input'];
2472
+ /** Optional participant role to join as. */
1663
2473
  role?: InputMaybe<Scalars['String']['input']>;
2474
+ /** The session id to join. */
1664
2475
  sessionId: Scalars['String']['input'];
1665
2476
  };
1666
2477
  export type LinkAppToEnvironmentInput = {
2478
+ /** App id (BigInt) to link. Must be unlinked and not a shared app. */
1667
2479
  appId: Scalars['BigInt']['input'];
1668
2480
  /** Environment slug (cks_environments.slug) to link the app to. */
1669
2481
  environmentSlug: Scalars['String']['input'];
2482
+ /** Organization id (BigInt) that owns both the app and the environment. */
1670
2483
  orgId: Scalars['BigInt']['input'];
1671
2484
  };
2485
+ /** Arguments for listVoxelUpdatesByDistance: selects recorded voxel edits across chunks within a cubic (Chebyshev) radius of a center chunk, grouped per chunk and ordered by increasing distance. */
1672
2486
  export type ListVoxelUpdatesByDistanceInput = {
2487
+ /** Id of the app whose voxel edits to search (decimal string). */
1673
2488
  appId: Scalars['BigInt']['input'];
2489
+ /** Center chunk of the search cube. */
1674
2490
  centerCoordinate: ChunkCoordinatesInput;
2491
+ /** Maximum number of CHUNKS (not voxels) to include. Defaults to 1000 when omitted. Must be >= 0. */
1675
2492
  limit?: InputMaybe<Scalars['Int']['input']>;
2493
+ /** Cube radius in chunks measured as Chebyshev distance: matches chunks whose x, y and z each differ from the center by at most this many chunks. Integer, 1-8 inclusive. */
1676
2494
  maxDistance: Scalars['Int']['input'];
2495
+ /** Optional inclusive lower time bound; only edits with createdAt >= this timestamp are returned. */
1677
2496
  since?: InputMaybe<Scalars['DateTime']['input']>;
2497
+ /** Number of chunks to skip for pagination. Defaults to 0 when omitted. Must be >= 0. */
1678
2498
  skip?: InputMaybe<Scalars['Int']['input']>;
1679
2499
  };
2500
+ /** Arguments for listVoxels: selects recorded voxel edits for one chunk, optionally only those at/after a timestamp. */
1680
2501
  export type ListVoxelsInput = {
2502
+ /** Id of the app that owns the chunk (decimal string). */
1681
2503
  appId: Scalars['BigInt']['input'];
2504
+ /** Address of the chunk whose voxel edits to list. */
1682
2505
  coordinates: ChunkCoordinatesInput;
2506
+ /** Optional inclusive lower time bound. When set, only voxel edits with createdAt >= this timestamp are returned. */
1683
2507
  since?: InputMaybe<Scalars['DateTime']['input']>;
1684
2508
  };
2509
+ /** A single level-of-detail (LOD) representation of a chunk. */
1685
2510
  export type LodData = {
1686
2511
  __typename?: 'LodData';
2512
+ /** BASE64-encoded binary LOD data (decode from base64). */
1687
2513
  data: Scalars['String']['output'];
2514
+ /** LOD level (0 is the finest; higher numbers are coarser). */
1688
2515
  level: Scalars['Int']['output'];
1689
2516
  };
2517
+ /** A single LOD level and its encoded data for a chunk. */
1690
2518
  export type LodDataInput = {
2519
+ /** BASE64-encoded binary LOD data for this level. */
1691
2520
  data: Scalars['String']['input'];
2521
+ /** LOD level (>= 0; 0 is the finest / highest detail). */
1692
2522
  level: Scalars['Int']['input'];
1693
2523
  };
1694
2524
  export type LoginUserInput = {
2525
+ /** Account email address. */
1695
2526
  email: Scalars['String']['input'];
2527
+ /** Account password (min 8 characters). */
1696
2528
  password: Scalars['String']['input'];
1697
2529
  };
1698
2530
  export type Mutation = {
1699
2531
  __typename?: 'Mutation';
1700
2532
  /** Liveness heartbeat for the authenticated user's actors in an app. Refreshes actors.updated_at for every actor row the user owns so the user stays host-eligible, then returns the freshly-elected host (same shape as the gameHost query) so a client can fold its poll and heartbeat into one round-trip. Call on an interval shorter than HOST_ACTOR_FRESHNESS_SECONDS. Only refreshes rows that already exist (created by Buddy on chunk entry); returns null when no fresh actors exist for the app. */
1701
2533
  actorHeartbeat: Maybe<GameHost>;
1702
- /** Add a user to a channel or approve a pending request (manage_members). */
2534
+ /** Add a user to a channel, or approve their pending join request (upsert to active). Requires the 'manage_members' channel permission (app admins bypass). Auto-assigns the default role if configured and notifies Buddy with the member's effective send permission. */
1703
2535
  addChannelMember: GroupMember;
1704
- /** Add a user to a team or approve a pending request (manage_members). */
2536
+ /** Add a user to a team, or approve their pending join request (upsert to active). Requires the 'manage_members' team permission (app admins bypass). Auto-assigns the team's default role if configured. */
1705
2537
  addTeamMember: GroupMember;
2538
+ /** Soft-delete an access tier by setting its status to 'archived' (the row is retained, NOT hard-deleted) and notifies the game API. Requires the 'manage_access_tiers' permission on the app that owns the tier; super admins bypass. Existing user grants on this tier are NOT automatically revoked. Throws if the tier is not found. */
1706
2539
  archiveAccessTier: AppAccessTier;
2540
+ /** Soft-delete an app by setting status=ARCHIVED. The row is retained (NOT hard-deleted) and is excluded from the public marketplace. REVERSIBLE: call updateApp to set status back to DRAFT or LIVE. Requires the 'manage_apps' permission on the app; super admins bypass. Throws if the app id does not exist. */
1707
2541
  archiveApp: App;
2542
+ /** Grant runtime permission keys to a group (optionally scoped to a single group role) on a grid by writing the `grid_group_grants` input table, then recompute the materialized effective ACL so every affected member gains the keys. Requires app-admin ('manage_apps'). Returns the grid's current group grants for the group. Use `grantGridPermissions` for per-user grants instead. */
1708
2543
  assignGroupToGrid: Array<GridGroupGrant>;
2544
+ /** DESTRUCTIVE. Cancels an app's paid shared-environment subscription. The app loses its paid shared slot (typically at currentPeriodEnd) and may be denied runtime once the period lapses unless a free slot covers it. Returns the updated subscription. Requires the 'manage_billing' permission on the app's org. */
1709
2545
  cancelSharedSubscription: AppSharedSubscription;
1710
- /** Captures an approved PayPal order after the hosted checkout redirects back. Wallet credit still reconciles through PayPal webhooks. */
2546
+ /** Captures an approved PayPal order after the hosted checkout redirects back, and returns the updated Checkout. The resulting wallet credit / access grant still reconciles through PayPal webhooks. Requires an authenticated user who owns the checkout. */
1711
2547
  capturePaypalCheckout: Checkout;
2548
+ /** Changes the authenticated user's password after verifying the current password. Requires a valid session token. Returns true on success; throws if the current password is wrong. Existing sessions are not revoked. */
1712
2549
  changePassword: Scalars['Boolean']['output'];
2550
+ /** Self-service: the authenticated caller claims access to an app via its free, open-by-default tier. Requires authentication only (no org membership needed). ENTITLEMENT CHANGE: grants the free default tier as a 'system' grant and notifies the game API. Idempotent: returns the existing row if already granted, and never overrides a prior revoke. Errors if the app has no free default tier or is archived. */
2551
+ claimFreeAppAccess: AppUserAccess;
2552
+ /** Confirms a user email address using the token from the confirmation email. Returns true on success, false if the token is invalid or expired. Public (the token authorizes the call). */
1713
2553
  confirmEmail: Scalars['Boolean']['output'];
1714
2554
  /** Open the UDP proxy session for this game token (idempotent: returns the existing status if one is already open). Binds a socket and selects the game server with the fewest clients on first open. Optional: send mutations and udpNotifications also create a session lazily when none exists. To force a fresh socket, call disconnectUdpProxy first. */
1715
2555
  connectUdpProxy: UdpProxyConnectionStatus;
2556
+ /** Create a new access tier (a free/paid bundle of runtime permissions) for an app. Requires the 'manage_access_tiers' permission on the app (input.appId); super admins bypass. SIDE EFFECTS: validates the tier's permission keys against runtimePermissions and notifies the game API so Buddy sees the new tier. Does NOT grant the tier to any user. */
1716
2557
  createAccessTier: AppAccessTier;
2558
+ /** Creates an actor (a player’s presence/instance in an app world) owned by the authenticated user and returns the persisted row (including the server-set `createdAt`). Requires a valid game token. If `input.avatarId` is set it must reference an avatar the caller owns (throws Unauthorized otherwise). `input.uuid` must be the 32-character ASCII actor id used on the UDP wire (NOT a hyphenated RFC-4122 UUID). */
1717
2559
  createActor: Actor;
2560
+ /** Create a new app within an organization. Requires the 'manage_apps' permission on the target org (input.orgId); super admins bypass. SIDE EFFECTS: also provisions a free, open-by-default "Default" access tier granting full runtime permissions, and notifies the game API. Slug must be unique within the org (a duplicate slug fails). New apps default to visibility=PUBLIC and status=DRAFT unless overridden in the input. */
1718
2561
  createApp: App;
2562
+ /** Creates a new avatar owned by the authenticated user and returns it. Requires a valid game token; the new avatar is always owned by the caller. `input.name` is optional and defaults to "Default Avatar". */
1719
2563
  createAvatar: Avatar;
1720
- /** Create a channel. Allowed per the app channel policy (admin | member | anyone). The creator becomes the owner with a system leader role. When membersCanSend is true (default), a default member role granting send_messages is created and auto-assigned to joiners. */
2564
+ /** Create a channel. Whether the caller may create one is governed by the per-app channel policy (app_group_policies: admin | member | anyone). The caller becomes the owner with a system 'leader' role. When membersCanSend is true (default) a default 'member' role granting send_messages is created and auto-assigned to joiners (open chat channel); when false only roles you grant may post (announce/read-only channel). */
1721
2565
  createChannel: Group;
1722
- /** Create a channel role (manage_roles). */
2566
+ /** Create a custom (non-system) channel role granting the given channel permission keys (e.g. send_messages for posting rights). Requires the 'manage_roles' channel permission (app admins bypass). */
1723
2567
  createChannelRole: GroupRole;
1724
- /** Creates a Checkout row, opens the provider session, and returns the row with externalUrl set. Redirect the user to externalUrl. Status starts PENDING and updates via webhook. */
2568
+ /** Creates a Checkout row, opens a hosted payment session with the selected provider, and returns the row with `externalUrl` set redirect the user there to pay. Status starts PENDING and is reconciled to COMPLETED/FAILED later via provider webhooks (this call does not itself capture funds). The side effect applied on completion depends on `purpose` (e.g. ORG_WALLET_TOPUP credits the org wallet, APP_ACCESS_PURCHASE grants app access). Requires an authenticated user; ORG_WALLET_TOPUP additionally requires the 'manage_billing' org permission. Purposes DONATION and PROPERTY_TOKENS are rejected. Pass `input.idempotencyKey` to make retries safe (a replay returns the first checkout instead of opening a second provider session). */
1725
2569
  createCheckout: Checkout;
1726
- /** Creates an environment only if each selected instance flavor is available and customer-priced in the catalog (same rule as environmentQuote). Use environmentFlavors / environmentDatacenters for valid options. */
2570
+ /** Provisions a new environment. SIDE EFFECTS / COST: creates billable cloud infrastructure (OVH VMs + DNS) and starts hourly wallet charges; fails if the wallet's available balance is below the first-day reserve (see environmentQuote.canCreate). Each selected flavor must be available and customer-priced (use environmentFlavors / environmentDatacenters). When input.slug is omitted the slug is auto-generated as 'e-<12 chars>'. Returns immediately with status 'deploy_requested'; poll orgEnvironment for deploy progress. Requires the 'manage_environments' org permission. */
1727
2571
  createEnvironment: CksEnvironmentDetail;
2572
+ /** Create a grid: a named 3D box of chunks that runtime/world (voxel) permissions are scoped to. The box must fit entirely within one of the app's existing grid assignments and must not overlap another grid. Requires app-admin ('manage_apps'). Returns a hybrid response — on success `grid` is populated and `error` is NO_ERROR; on failure `grid` is null and `error` is a UDP-style error code (e.g. NO_MATCHING_GRID_ASSIGNMENT, GRID_OUTSIDE_ASSIGNMENT, GRID_OVERLAPS_EXISTING, GRID_ALREADY_EXISTS). */
1728
2573
  createGrid: CreateGridResponse;
2574
+ /** Creates a custom role in an organization with a name, optional description, and permission keys. Requires the 'manage_members' permission on the org (super admins bypass). */
1729
2575
  createOrgRole: OrgRole;
1730
- /** Returns the plaintext token exactly once. Save it; subsequent queries only show metadata. */
2576
+ /** Mints a new org API token and returns the plaintext token exactly once - save it, since subsequent queries only show metadata. Requires the 'manage_tokens' permission on the target org (super admins bypass). */
1731
2577
  createOrgToken: OrgTokenWithSecret;
2578
+ /** Creates a new organization and makes the authenticated caller its owner (with full permissions). Requires a valid session token. */
1732
2579
  createOrganization: Organization;
1733
- /** Create a team. Allowed per the app team policy (admin | member | anyone). The creator becomes the owner with a system leader role. */
2580
+ /** Create a team. Whether the caller may create one is governed by the per-app team policy (app_group_policies: admin | member | anyone). The caller becomes the owner and is granted a system 'leader' role holding every team permission. New teams default to the app's default membership policy unless overridden. */
1734
2581
  createTeam: Group;
1735
- /** Create a team role (manage_roles). */
2582
+ /** Create a custom (non-system) team role granting the given team permission keys. Requires the 'manage_roles' team permission (app admins bypass). Permission keys must be valid team permission keys (group_permission_defs). */
1736
2583
  createTeamRole: GroupRole;
2584
+ /** DESTRUCTIVE: permanently deletes the actor identified by `uuid` and returns a copy of the now-deleted row. OWNER-EXCLUSIVE: only the owner may delete (throws Unauthorized otherwise). Requires a valid game token. `uuid` is the 32-character ASCII actor id. */
1737
2585
  deleteActor: Actor;
2586
+ /** DESTRUCTIVE: permanently deletes the avatar and returns a copy of the now-deleted row. OWNER-EXCLUSIVE: only the owner may delete (throws Unauthorized otherwise). Requires a valid game token. */
1738
2587
  deleteAvatar: Avatar;
1739
- /** Delete a channel (manage_group). */
2588
+ /** Delete a channel. Requires the 'manage_group' channel permission (app admins bypass). DESTRUCTIVE: cascades to members and roles and notifies Buddy servers to tear down message routing for the channel. Returns true on success. */
1740
2589
  deleteChannel: Scalars['Boolean']['output'];
1741
- /** Delete a non-system channel role (manage_roles). */
2590
+ /** Delete a non-system channel role. Requires the 'manage_roles' channel permission (app admins bypass). The system 'leader' role cannot be deleted. DESTRUCTIVE: removes the role from members. Returns true if a role was deleted. */
1742
2591
  deleteChannelRole: Scalars['Boolean']['output'];
2592
+ /** Operator only (is_operator). Deletes a control-plane secret by environment + name and writes an audit entry. Returns true when a secret was removed. */
1743
2593
  deleteCpSecret: Scalars['Boolean']['output'];
1744
- /** Soft-deletes the caller's account: anonymizes PII, revokes sessions. Wallet, voxel, and donation history stays intact via FK. */
2594
+ /** DESTRUCTIVE self-service: soft-deletes the authenticated caller's OWN account anonymizes PII and revokes all sessions; wallet, voxel, and donation history stay intact via FK. Acts only on the caller (no target argument). Requires a valid game token. NOTE: the users table is management-owned, so in cks-game-api this throws ForbiddenException — call cks-management-api instead. */
1745
2595
  deleteMyAccount: Scalars['Boolean']['output'];
2596
+ /** Deletes an organization role. Requires the 'manage_members' permission on the role's org (super admins bypass). DESTRUCTIVE: removes the role and unassigns it from all members. Returns false if the role does not exist. */
1746
2597
  deleteOrgRole: Scalars['Boolean']['output'];
2598
+ /** Permanently deletes a quota enforcement rule by id. Returns true if a rule was removed, or false if no quota with that id exists. Destructive and not reversible: once removed, the metric falls back to the next-most-specific rule or the free-tier default. Requires the 'manage_quotas' permission on the same scope (app or org) the quota belongs to, or super admin for global quotas. */
1747
2599
  deleteQuota: Scalars['Boolean']['output'];
1748
- /** Delete a team (manage_group). */
2600
+ /** Delete a team. Requires the 'manage_group' team permission (app admins bypass). DESTRUCTIVE: cascades to members, roles, and any grid grants the team conferred, and recomputes the effective grid ACL for affected grids. Returns true on success. */
1749
2601
  deleteTeam: Scalars['Boolean']['output'];
1750
- /** Delete a non-system team role (manage_roles). */
2602
+ /** Delete a non-system team role. Requires the 'manage_roles' team permission (app admins bypass). The system 'leader' role cannot be deleted. DESTRUCTIVE: removes the role from members and recomputes any grid ACLs the role granted on. Returns true if a role was deleted. */
1751
2603
  deleteTeamRole: Scalars['Boolean']['output'];
2604
+ /** DESTRUCTIVE: deletes the authenticated user’s per-app state row for `appId` and returns the deleted row. Requires a valid game token; acts only on the caller’s own state. Throws NotFound when no row exists. */
1752
2605
  deleteUserAppState: UserAppState;
2606
+ /** DESTRUCTIVE and IRREVERSIBLE. Tears down all cloud resources for the environment (per-tenant Postgres, game-api, Buddy, and load-balancer VMs plus DNS records) and revokes its service tokens; all tenant data is lost. Sets status to 'destroy_requested' and returns the tracking change order — poll orgEnvironment.destroyProgress. Fails if a destroy is already queued. After it reaches 'destroyed', call purgeEnvironment to remove the record. Requires the 'manage_environments' org permission. */
1753
2607
  destroyEnvironment: CksEnvironmentChangeOrder;
1754
2608
  /** Close the UDP proxy session and socket for this game token. Unsubscribing from udpNotifications does not disconnect; use this mutation (or rely on server inactivity timeout). */
1755
2609
  disconnectUdpProxy: Scalars['Boolean']['output'];
2610
+ /** ADMIN/DESTRUCTIVE: revokes ALL of the target user’s sessions by deleting every game_token row, forcing re-authentication on every device. Returns true if at least one session was revoked. Requires a super-admin bearer game token (and the management API enabled). NOTE: management-owned in cks-game-api (throws ForbiddenException) — use cks-management-api. */
1756
2611
  forceLogoutUser: Scalars['Boolean']['output'];
2612
+ /** Create a directed relationship edge between two containers (the game model is a graph), with a relationship type and optional weight. Requires a valid token. */
1757
2613
  gameModelAddEdge: GmEdge;
2614
+ /** 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. */
1758
2615
  gameModelCreateContainer: GmContainer;
2616
+ /** 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. */
1759
2617
  gameModelCreateSession: GmSession;
2618
+ /** 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'). */
1760
2619
  gameModelDefineFeature: GmAppFeature;
2620
+ /** Delete a studio-defined function by name. Requires app-admin ('manage_apps'). DESTRUCTIVE. Returns true if a function was deleted. */
1761
2621
  gameModelDeleteFunction: Scalars['Boolean']['output'];
2622
+ /** 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'). */
1762
2623
  gameModelGrantTierFeature: GmTierFeature;
2624
+ /** 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). This is the primary, safe way for players to mutate game state. Requires a valid token; only player-scope functions are invocable here. */
1763
2625
  gameModelInvoke: GmInvokeResult;
2626
+ /** Join an existing session as a participant, optionally with a role. Requires a valid token and app access. */
1764
2627
  gameModelJoinSession: GmSessionParticipant;
2628
+ /** Revoke a feature key from an access tier. Requires app-admin ('manage_apps'). Returns true if a grant was removed. */
1765
2629
  gameModelRevokeTierFeature: Scalars['Boolean']['output'];
2630
+ /** Bulk-create game-model definitions (container types, property defs, functions) and optionally instances (containers + edges) in one transaction — used to initialize or import a model. Requires app-admin ('manage_apps'). Returns counts created, warnings, and a map of seed temp_id -> created container UUID. */
1766
2631
  gameModelSeed: GmSeedResult;
2632
+ /** Set the app's game-model runtime policy: who may create sessions (admin | member | anyone) and the default participant role. Requires app-admin ('manage_apps'). */
1767
2633
  gameModelSetPolicy: GmAppPolicy;
2634
+ /** 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. */
1768
2635
  gameModelSetProperty: GmContainer;
2636
+ /** 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. */
1769
2637
  gameModelSetSessionTurn: GmSession;
2638
+ /** Create or update a container type: the studio-defined schema for a kind of runtime entity (like a class). Idempotent on (app, typeName). Requires app-admin ('manage_apps'). */
1770
2639
  gameModelUpsertContainerType: GmContainerType;
2640
+ /** Create or update a studio-defined function: a named, sandboxed behavior with typed parameters, declared property mutations (expressions compiled to an AST server-side, never eval'd), an optional return expression, an invoke scope, and an invoke policy (authority rule tree). Idempotent on (app, name). Requires app-admin ('manage_apps'). Returns the function plus any non-fatal static-analysis warnings. */
1771
2641
  gameModelUpsertFunction: GmFunction;
2642
+ /** Create or update a property definition on a container type (a typed field with default value, visibility, and writability). Idempotent on (app, containerTypeName, key). Requires app-admin ('manage_apps'). */
1772
2643
  gameModelUpsertPropertyDef: GmPropertyDef;
2644
+ /** Grant (or re-activate) a user's access to an app, optionally on a specific tier. Requires the 'manage_access_tiers' permission on the app (input.appId); super admins bypass. ENTITLEMENT CHANGE: upserts an active app_user_access row and notifies the game API, so the target user immediately gains that tier's runtime permissions in Buddy. Idempotent per (app,user): re-granting updates the tier and sets status back to active. */
1773
2645
  grantAppAccess: AppUserAccess;
2646
+ /** Grant one or more runtime permission keys directly to a single user on a grid (writes the `grid_user_direct_grants` input table), then recompute that user's materialized effective ACL on the grid. The target user must already have active app access (otherwise this fails). Requires app-admin ('manage_apps'). Returns the user's full effective permission-key set on the grid. To grant by group/role instead of per-user, use `assignGroupToGrid`. */
1774
2647
  grantGridPermissions: GridUserPermissions;
2648
+ /** Org dashboard shortcut: the authenticated caller grants themselves access to an app using its default active tier. Requires that the caller is an active member of the app's owning org OR holds the 'manage_access_tiers' permission on the app. ENTITLEMENT CHANGE: upserts an active grant and notifies the game API. Errors if the app has no active tier, or the caller is neither a member nor a manager. */
2649
+ grantMyAppAccess: AppUserAccess;
2650
+ /** Operator only (is_operator). Ingests a release manifest into cks_environment_versions, making the version deployable, and writes an audit entry. Use force to overwrite an existing row. */
1775
2651
  ingestEnvironmentVersion: CpEnvironmentVersionRow;
2652
+ /** Adds a user to an organization as a member. Requires the 'manage_members' permission on the target org (super admins bypass). */
1776
2653
  inviteOrgMember: OrgMember;
1777
- /** Join a channel. Honors the channel membership policy (open -> active, request -> pending, otherwise rejected). */
2654
+ /** Join a channel as the caller (subscribe to it). Honors the channel membership policy: open -> active immediately, request -> pending (a manager must approve), invite/admin -> rejected. On becoming active, Buddy is notified with the caller's effective send permission so routing starts. */
1778
2655
  joinChannel: GroupMember;
1779
- /** Join a team. Honors the team membership policy (open -> active, request -> pending, otherwise rejected). */
2656
+ /** Join a team as the caller. Honors the team membership policy: open -> active immediately, request -> pending (a manager must approve), invite/admin -> rejected. Banned users are rejected. No special permission required. */
1780
2657
  joinTeam: GroupMember;
1781
- /** Leave a channel. */
2658
+ /** Leave a channel (unsubscribe the caller). Notifies Buddy to stop routing messages to the caller. Returns true if a membership was removed. */
1782
2659
  leaveChannel: Scalars['Boolean']['output'];
1783
- /** Leave a team. */
2660
+ /** Leave a team (removes the caller's own membership). Returns true if a membership was removed. */
1784
2661
  leaveTeam: Scalars['Boolean']['output'];
1785
- /** Links an unlinked app to an existing environment for split-mode routing. Refuses shared apps and apps already linked elsewhere. */
2662
+ /** Links an unlinked app to an existing environment for split-mode routing. Refuses shared apps and apps already linked elsewhere. Requires the 'manage_environments' org permission. */
1786
2663
  linkAppToEnvironment: App;
2664
+ /** Authenticates with email + password and starts a new session. Returns an AuthResponse whose `token` must be sent on subsequent requests as `Authorization: Bearer <token>`. Public (no auth required); throws on invalid credentials. */
1787
2665
  login: AuthResponse;
2666
+ /** Single-device logout: revokes the game token that authenticated this request by deleting its game_tokens row. Returns true if a token was revoked, false if the request had no game token. Other devices/tokens are unaffected (use the Management API to revoke all devices). After this, the bearer token is rejected and any open UDP proxy session will no longer authorize new traffic. */
1788
2667
  logout: Scalars['Boolean']['output'];
2668
+ /** Ends every active session for the authenticated user (deletes all their game_tokens and records revocations). Requires a valid session token. Use logout to end only the current session. */
1789
2669
  logoutAllDevices: Scalars['Boolean']['output'];
1790
- /** Publish an app to the shared game-api environment. Free under the org quota; otherwise pass a planId for a paid subscription checkout. */
2670
+ /** Publishes an app to the shared game-api environment. Free under the org's quota (result.free = true, no charge); otherwise pass a planId to start a paid subscription — SIDE EFFECT: returns a checkout the caller must complete, which creates a recurring subscription and charges the org. Requires the 'manage_apps' permission on the app's org; currently limited to super admins (preview). */
1791
2671
  publishAppToShared: PublishAppResult;
2672
+ /** Operator only (is_operator). Cuts a new environment release from a cks-game-api git tag: ingests it as available and commits the manifest to the git ref. SIDE EFFECT: makes the version the new redeploy target and writes to GitHub. Use force to overwrite. Writes an audit entry. */
1792
2673
  publishEnvironmentReleaseFromGameApiTag: CpPublishEnvironmentReleaseResult;
1793
- /** Permanently deletes a destroyed environment record from the platform. Cloud resources must already be torn down via destroyEnvironment. */
2674
+ /** DESTRUCTIVE. Permanently deletes a destroyed environment's record and all cascaded metadata from the platform; returns true on success. The environment must already be in status 'destroyed' (run destroyEnvironment first) and must not have deletion protection enabled, otherwise this fails. Does not touch cloud resources. Requires the 'manage_environments' org permission. */
1794
2675
  purgeEnvironment: Scalars['Boolean']['output'];
2676
+ /** Operator only (is_operator). Creates or overwrites an environment-delivered secret (injected into the tenant runtime) and writes an audit entry. SENSITIVE: plaintext is write-only and never returned. */
1795
2677
  putCpEnvSecret: CpEnvSecretRow;
2678
+ /** Operator only (is_operator). Creates or overwrites a control-plane secret (encrypted at rest) and writes an audit entry. SENSITIVE: plaintext is write-only and never returned by cpSecrets. */
1796
2679
  putCpSecret: CpSecretRow;
1797
- /** Redeploys the environment to the latest available release version (or the configured default), reusing its current flavors/scaling and linked apps. Preserves the environment URLs. No-op-safe: re-running when already at latest still redeploys. If a prior deploy failed but stayed in_progress, it is abandoned first so the redeploy can proceed. */
2680
+ /** Redeploys the environment to a target release version (input.version) or, when omitted, the latest available version for its class, reusing its current flavors/scaling and linked apps. Preserves the environment URLs. No-op-safe: re-running when already at latest still redeploys. If a prior deploy failed but stayed in_progress, it is abandoned first so the redeploy can proceed. Requires the 'manage_environments' org permission. */
1798
2681
  redeployEnvironment: CksEnvironmentChangeOrder;
2682
+ /** Creates a new (initially unconfirmed) account, sends a confirmation email, and returns an AuthResponse with a session `token` for immediate login (send as `Authorization: Bearer <token>`). Public; throws if the email already exists. */
1799
2683
  register: AuthResponse;
1800
- /** Remove a member from a channel (manage_members; members may remove themselves). */
2684
+ /** Remove a member from a channel. Requires the 'manage_members' channel permission, except that any member may remove themselves. Notifies Buddy to stop routing to the removed member. Returns true if a membership was removed. */
1801
2685
  removeChannelMember: Scalars['Boolean']['output'];
2686
+ /** Removes a user from an organization. Requires the 'manage_members' permission on the org (super admins bypass). DESTRUCTIVE: revokes the user's membership and role assignments in that org. Returns false if the user was not a member. */
1802
2687
  removeOrgMember: Scalars['Boolean']['output'];
2688
+ /** Removes a saved (vaulted) off-session payment method from the org; returns true on success. If it was the method backing auto-billing, recharges will fail until another is set up. Requires the 'manage_billing' org permission. */
1803
2689
  removeSharedPaymentMethod: Scalars['Boolean']['output'];
1804
- /** Remove a member from a team (manage_members; members may remove themselves). */
2690
+ /** Remove a member from a team. Requires the 'manage_members' team permission, except that any member may remove themselves. DESTRUCTIVE: drops the membership and its roles. Returns true if a membership was removed. */
1805
2691
  removeTeamMember: Scalars['Boolean']['output'];
2692
+ /** Starts the password-reset flow by emailing a reset link to the address. Always returns true regardless of whether the email exists or is confirmed (prevents account enumeration). Public. */
1806
2693
  requestPasswordReset: Scalars['Boolean']['output'];
1807
- /** Request to join a request-only channel (creates a pending membership a manager can approve). */
2694
+ /** Request to join a request-only channel (creates a pending membership a manager can approve via addChannelMember). Behaves identically to joinChannel; named for request-policy UIs. */
1808
2695
  requestToJoinChannel: GroupMember;
1809
- /** Request to join a request-only team (creates a pending membership a manager can approve). */
2696
+ /** Request to join a request-only team (creates a pending membership a manager can approve via addTeamMember). Behaves identically to joinTeam; named for request-policy UIs. */
1810
2697
  requestToJoinTeam: GroupMember;
2698
+ /** Re-sends the email-confirmation link. Always returns true regardless of whether the account exists or is already confirmed (prevents enumeration); the email is only sent for existing unconfirmed accounts. Public. */
1811
2699
  resendConfirmationEmail: Scalars['Boolean']['output'];
2700
+ /** Completes a password reset using the reset token and a new password. Returns true on success; throws if the token is invalid or expired. Public (the token authorizes the call). Existing sessions are not revoked. */
1812
2701
  resetPassword: Scalars['Boolean']['output'];
1813
- /** SSH-restarts the Buddy systemd service on the active UDP runtime VM. Symptom relief when server_status heartbeat is stale; does not replace cks-udp-api pool fixes. */
2702
+ /** SSH-restarts the Buddy systemd service on the active UDP runtime VM. Symptom relief when server_status heartbeat is stale (see CksBuddyHealth.isStale); does not replace cks-udp-api pool fixes. Requires the 'manage_environments' org permission. */
1814
2703
  restartEnvironmentServices: CksEnvironmentChangeOrder;
2704
+ /** Resumes a payment-suspended environment, queuing a change order and moving billingStatus to 'resume_queued' (and restarting runtime once it settles). Only valid when billingStatus is grace, suspension_queued, suspended, or resume_failed; otherwise fails. Resumes billable hourly charges. Requires the 'manage_environments' org permission. */
1815
2705
  resumeEnvironment: CksEnvironmentChangeOrder;
2706
+ /** Revoke a user's access to an app by setting their app_user_access status to 'revoked', and notifies the game API so the user immediately loses runtime access in Buddy. Requires the 'manage_access_tiers' permission on the app; super admins bypass. The row is retained for audit (not deleted); REVERSIBLE via grantAppAccess. */
1816
2707
  revokeAppAccess: AppUserAccess;
2708
+ /** Revoke a user's direct grants on a grid (deletes from the `grid_user_direct_grants` input table) and recompute their materialized effective ACL. Omit `permissionKeys` to remove ALL of the user's direct grants on the grid; pass a subset to remove only those keys. Does not affect permissions the user receives via group grants. Requires app-admin ('manage_apps'). DESTRUCTIVE for the targeted grants. Returns the user's remaining effective permission keys on the grid. */
1817
2709
  revokeGridPermissions: GridUserPermissions;
2710
+ /** Revoke group/role grants on a grid (deletes from the `grid_group_grants` input table) and recompute the materialized effective ACL. Omit `permissionKeys` to revoke ALL of the group/role's grants on the grid; pass a subset to revoke only those keys. Requires app-admin ('manage_apps'). DESTRUCTIVE: removes the granted permissions from every affected member. Returns the group's remaining grants on the grid. */
1818
2711
  revokeGroupFromGrid: Array<GridGroupGrant>;
2712
+ /** Permanently deactivates an org token so it can no longer authenticate. Requires the 'manage_tokens' permission on the token's org (super admins bypass). DESTRUCTIVE and irreversible; the secret cannot be reactivated. Returns false if the token does not exist. */
1819
2713
  revokeOrgToken: Scalars['Boolean']['output'];
1820
- /** Reverts every voxel edit by `userId` in `appId` between `from` and `to`. Gated by the org permission `manage_apps`. Defaults to dryRun=true; pass dryRun=false to apply. */
2714
+ /** Reverts every voxel edit made by `userId` in `appId` between `from` and `to`, returning one RollbackVoxelEventResult per affected voxel (`applied` tells you whether each was actually changed). DEFAULTS to dryRun=true, which only PREVIEWS the planned reversions without writing; pass dryRun=false to actually apply them (DESTRUCTIVE — mutates world state). Requires a valid bearer token AND the `manage_apps` permission on the org that owns `appId` (super admins bypass). */
1821
2715
  rollbackVoxelUpdates: Array<RollbackVoxelEventResult>;
1822
- /** Send an actor update to the game server. Opens a UDP proxy session automatically if none exists. Responses and GenericErrorResponse are delivered on udpNotifications. */
2716
+ /** Send an actor (player/NPC) state update for spatial replication to nearby chunks. Requires a bearer game token; opens a UDP proxy session automatically if none exists. Returns Boolean! that is true only when the datagram was ACCEPTED FOR SENDING to the game server — it does NOT confirm the world applied the update. The applied echo (ActorUpdateResponse) and any failure (GenericErrorResponse) arrive ASYNCHRONOUSLY on the udpNotifications subscription, correlated by the request sequenceNumber (correlation only — not an idempotency key; the server does not dedupe replays). Subscribe to udpNotifications before sending so the reply is not missed. */
1823
2717
  sendActorUpdate: Scalars['Boolean']['output'];
1824
- /** Send a voice audio packet to the game server. Opens a UDP proxy session automatically if none exists; notifications arrive on udpNotifications. */
2718
+ /** Send a spatial voice/audio packet, fanned out to nearby actors as a ClientAudioNotification. Requires a bearer game token; voice may additionally be gated by a runtime/grid permission for the region — if the caller lacks it the game server responds asynchronously with a GenericErrorResponse (errorCode UNAUTHORIZED). Opens a UDP proxy session automatically if none exists. Returns Boolean! that is true only when the datagram was ACCEPTED FOR SENDING — NOT that it was delivered; the sender receives no echo, only errors (GenericErrorResponse, correlated by sequenceNumber) on udpNotifications. sequenceNumber is correlation only, not an idempotency key. */
1825
2719
  sendAudioPacket: Scalars['Boolean']['output'];
1826
- /** Publish a message to a channel. Delivered to every active member of the channel via udpNotifications (ChannelMessageNotification). Requires the channel send_messages permission; the server drops the message otherwise. Opens a UDP proxy session automatically if none exists. The sender receives no echo. */
2720
+ /** Publish a message to a channel, delivered to every active member of the channel (not chunk-routed) as a ChannelMessageNotification on udpNotifications. Requires a bearer game token and the channel send_messages permission; lacking the permission the server drops the message. Opens a UDP proxy session automatically if none exists. The sender receives no echo. Returns Boolean! that is true only when the datagram was ACCEPTED FOR SENDING — NOT confirmation of delivery; failures arrive ASYNCHRONOUSLY as GenericErrorResponse on udpNotifications, correlated by the request sequenceNumber (correlation only — not an idempotency key; the server does not dedupe replays). */
1827
2721
  sendChannelMessage: Scalars['Boolean']['output'];
1828
- /** Send a client event to the game server. Opens a UDP proxy session automatically if none exists; related notifications arrive on udpNotifications. */
2722
+ /** Send a custom, app-defined client event (identified by eventType, a uint16) for spatial replication to nearby chunks; nearby actors receive it as a ClientEventNotification. Requires a bearer game token; opens a UDP proxy session automatically if none exists. Returns Boolean! that is true only when the datagram was ACCEPTED FOR SENDING — NOT that the world processed it. Failures arrive ASYNCHRONOUSLY as GenericErrorResponse on udpNotifications, correlated by the request sequenceNumber (correlation only — not an idempotency key; the server does not dedupe replays). */
1829
2723
  sendClientEvent: Scalars['Boolean']['output'];
1830
- /** Send a direct actor-to-actor message, delivered only to the actor identified by targetUuid (not broadcast to nearby actors). The sender must know the destination actor’s chunk. Opens a UDP proxy session automatically if none exists; the target receives a SingleActorMessageNotification on udpNotifications. The sender receives no echo. */
2724
+ /** Send a direct actor-to-actor message, delivered only to the actor identified by targetUuid (NOT broadcast to nearby actors). The sender must know the destination actor’s current chunk. Requires a bearer game token; opens a UDP proxy session automatically if none exists. The target receives a SingleActorMessageNotification on udpNotifications; the sender receives no echo. Returns Boolean! that is true only when the datagram was ACCEPTED FOR SENDING — NOT confirmation of delivery; failures arrive ASYNCHRONOUSLY as GenericErrorResponse on udpNotifications, correlated by the request sequenceNumber (correlation only — not an idempotency key; the server does not dedupe replays). */
1831
2725
  sendSingleActorMessage: Scalars['Boolean']['output'];
1832
- /** Send a text (chat) packet to the game server. Opens a UDP proxy session automatically if none exists; notifications arrive on udpNotifications. */
2726
+ /** Send a spatial text/chat packet, fanned out to nearby actors as a ClientTextNotification. Requires a bearer game token; opens a UDP proxy session automatically if none exists. Returns Boolean! that is true only when the datagram was ACCEPTED FOR SENDING to the game server — NOT confirmation of delivery. The sender receives no echo; failures arrive ASYNCHRONOUSLY as GenericErrorResponse on udpNotifications, correlated by the request sequenceNumber (correlation only — not an idempotency key; the server does not dedupe replays). */
1833
2727
  sendTextPacket: Scalars['Boolean']['output'];
1834
- /** Send a voxel update to the game server. Opens a UDP proxy session automatically if none exists; responses arrive on udpNotifications. */
2728
+ /** Send a single voxel (block) update for spatial replication to nearby chunks. Requires a bearer game token; opens a UDP proxy session automatically if none exists. Returns Boolean! that is true only when the datagram was ACCEPTED FOR SENDING to the game server — NOT confirmation that the world applied the change. The applied echo (VoxelUpdateResponse) and any failure (GenericErrorResponse) arrive ASYNCHRONOUSLY on udpNotifications, correlated by the request sequenceNumber (correlation only — not an idempotency key; the server does not dedupe replays). */
1835
2729
  sendVoxelUpdate: Scalars['Boolean']['output'];
2730
+ /** Creates or updates an app's monthly spend cap (idempotent upsert keyed by org + app) and returns the resulting budget. This only records the cap used to monitor/limit overspend; it does not move money, charge a card, or alter the wallet balance. Requires the 'manage_billing' app permission. */
1836
2731
  setAppBudget: AppBudget;
1837
- /** Set per-app hourly/daily spend caps (cents). Pass null to clear a cap. */
2732
+ /** Sets per-app hourly/daily spend caps (in cents) and returns the re-evaluated runtime state. Pass null for a limit to clear that cap. Exceeding a cap denies the app's runtime (runtimeDenialReason = spend_cap). Requires the 'manage_billing' permission on the app's org. */
1838
2733
  setAppSpendCaps: AppRuntimeState;
1839
- /** Super admin only. Used to take down or relist apps platform-wide. */
2734
+ /** Super admin only (also requires the management API to be enabled for this deployment). Overrides an app visibility platform-wide, e.g. to take down (PRIVATE/UNLISTED) or relist (PUBLIC) an app. Throws ForbiddenException for non-super-admins or when management APIs are disabled. Throws if the app id does not exist. */
1840
2735
  setAppVisibility: App;
1841
- /** Enable/disable off-session auto-billing. Pass limitCents=null for no limit. */
2736
+ /** Enables or disables off-session auto-billing for an org and updates its thresholds. When enabled and the wallet falls to lowWaterThresholdCents, the saved payment method is charged rechargeAmountCents (requires setupSharedPaymentMethod first). Pass limitCents=null for no per-period cap. Requires the 'manage_billing' org permission. */
1842
2737
  setAutoBilling: OrgAutoBilling;
1843
- /** Replace a member's channel roles (manage_roles). Re-pushes the member's effective send permission to Buddy. */
2738
+ /** Replace a member's channel roles with the given set (not additive — roles not listed are removed). Requires the 'manage_roles' channel permission (app admins bypass). Re-pushes the member's effective send permission to Buddy so their ability to post updates immediately. */
1844
2739
  setChannelMemberRoles: GroupMember;
1845
- /** Set who may create channels in an app and the default membership policy for new channels (requires manage_apps). */
2740
+ /** Set who may create channels in an app and the default membership policy for new channels. Requires app-admin ('manage_apps'). Affects future channel creation only, not existing channels. */
1846
2741
  setChannelPolicy: AppGroupPolicy;
2742
+ /** Sets the per-user early-access override flag, forcing early access on or off regardless of the global free-play window. Requires a super-admin bearer game token (and the management API enabled). NOTE: management-owned in cks-game-api (throws ForbiddenException) — use cks-management-api. */
1847
2743
  setEarlyAccessOverride: User;
2744
+ /** Operator only (is_operator). Toggles deletion protection on an environment (when enabled, purgeEnvironment is blocked) and writes an audit entry. Returns true on success. */
1848
2745
  setEnvironmentDeletionProtection: Scalars['Boolean']['output'];
2746
+ /** Replace the whitelist of permission keys allowed on a grid (writes the `grid_permission_limits` input table), then recompute the grid's materialized effective ACL so any keys no longer on the whitelist are dropped for all users. Pass an empty array to remove all limits. Requires app-admin ('manage_apps'). DESTRUCTIVE: narrowing the whitelist can strip effective permissions from existing users on the grid. */
1849
2747
  setGridPermissionLimits: GridPermissionLimits;
1850
2748
  /** Super-admin only. Flip users.is_operator to grant or revoke control-plane / operator access. */
1851
2749
  setOperator: User;
1852
- /** Super admin only. Used to freeze/unfreeze orgs platform-wide. */
2750
+ /** Super admin only. Used to freeze/unfreeze orgs platform-wide. SIDE EFFECT: sets organizations.status, which gates the org's platform access. */
1853
2751
  setOrgStatus: Organization;
2752
+ /** Creates or updates a quota enforcement rule (idempotent upsert keyed by org/app/tier + metric + period) and returns it. Scope is inferred from the input ids: an app-scoped rule requires the 'manage_quotas' app permission, an org-scoped rule requires the 'manage_quotas' org permission, and a global rule (no org/app/tier) requires super admin. Changes which limit `effectiveQuota` resolves for the metric; does not retroactively alter past usage. */
1854
2753
  setQuota: ServiceQuota;
2754
+ /** ADMIN PRIVILEGE CHANGE: grants or revokes platform super-admin on the target user, changing their privileges across the whole platform. Requires a super-admin bearer game token (and the management API enabled). NOTE: in cks-game-api super-admin checks always fail and the users table is management-owned — perform this via cks-management-api. */
1855
2755
  setSuperAdmin: User;
1856
- /** Replace a member's roles (manage_roles). */
2756
+ /** Replace a member's roles with the given set (not additive — roles not listed are removed). Requires the 'manage_roles' team permission (app admins bypass). */
1857
2757
  setTeamMemberRoles: GroupMember;
1858
- /** Set who may create teams in an app and the default membership policy for new teams (requires manage_apps). */
2758
+ /** Set who may create teams in an app and the default membership policy for new teams. Requires app-admin ('manage_apps'). Affects future team creation only, not existing teams. */
1859
2759
  setTeamPolicy: AppGroupPolicy;
1860
- /** Begin vaulting a card for auto-billing. Returns a Stripe SetupIntent client secret for the browser to confirm. */
2760
+ /** Begins vaulting a card for off-session auto-billing. Returns a Stripe SetupIntent client secret the browser confirms; no charge is made here. Requires the 'manage_billing' org permission. */
1861
2761
  setupSharedPaymentMethod: PaymentMethodSetup;
2762
+ /** Checks whether the authenticated user is allowed to teleport an actor to a destination within an app and returns the authorization result. This is an authorization check only — it does NOT itself move the actor; the UDP runtime performs the actual movement. Requires a valid bearer game token plus the app-level "teleport" runtime permission. Returns success=false with errorCode INVALID_APP_ID (non-positive appId), UNAUTHORIZED (reserved sentinel destination -6,-6,-6 or missing permission), or success=true / NO_ERROR when allowed. */
1862
2763
  teleportRequest: TeleportResponse;
2764
+ /** Update an existing access tier (name, ordering, pricing, permissions, etc.); only fields present in the input are changed. Requires the 'manage_access_tiers' permission on the app that owns the tier (resolved from tierId); super admins bypass. SIDE EFFECTS: re-syncs the tier's permissions to the game API. Throws if the tier is not found or the caller lacks permission. */
1863
2765
  updateAccessTier: AppAccessTier;
2766
+ /** Partially updates an actor (appId, avatarId, chunk, publicState, privateState); fields omitted from `input` are left unchanged. OWNER-EXCLUSIVE: only the actor’s owner may update (throws Unauthorized otherwise). Requires a valid game token. `uuid` is the 32-character ASCII actor id. */
1864
2767
  updateActor: Actor;
2768
+ /** Replaces an actor’s `publicState` and/or `privateState` blobs (fields omitted from `input` are left unchanged). OWNER-EXCLUSIVE: only the actor’s owner may write (throws Unauthorized otherwise). Requires a valid game token. `uuid` is the 32-character ASCII actor id; blobs are base64-encoded binary. */
1865
2769
  updateActorState: Actor;
2770
+ /** Update mutable fields of an existing app (name, description, visibility, status, metadata); only fields present in the input are changed. Requires the 'manage_apps' permission on the app (resolved via its org); super admins bypass. Use this to publish (status=LIVE), change visibility, or restore an archived app (status back to DRAFT/LIVE). Throws if the app id does not exist. */
1866
2771
  updateApp: App;
2772
+ /** Updates an avatar’s mutable fields (currently `name`) and returns it. OWNER-EXCLUSIVE: only the avatar’s owner may call this (throws Unauthorized otherwise). Requires a valid game token. To change state blobs use `updateAvatarState`. */
1867
2773
  updateAvatar: Avatar;
1868
- /** Set an avatar's per-app state. Only the avatar's owner may write; all players can read it. */
2774
+ /** Creates or replaces one avatars per-app state (upsert keyed by appId+avatarId; bumps updatedAt). OWNER-EXCLUSIVE: only the avatars owner may write (throws Unauthorized otherwise); every authenticated user can read it via `avatarAppState`/`avatarAppStates`. Requires a valid game token. `input.state` is base64-encoded binary (null clears it). */
1869
2775
  updateAvatarAppState: AppAvatarState;
2776
+ /** Replaces an avatar’s `publicState` and/or `privateState` blobs (fields omitted from `input` are left unchanged). OWNER-EXCLUSIVE: only the owner may write (throws Unauthorized otherwise). Requires a valid game token. Both blobs are base64-encoded binary. */
1870
2777
  updateAvatarState: Avatar;
1871
- /** Update channel name/description/membership policy (manage_group). */
2778
+ /** Update a channel's name, description, and/or membership policy. Requires the 'manage_group' channel permission (app admins bypass). */
1872
2779
  updateChannel: Group;
1873
- /** Update a channel role (manage_roles). */
2780
+ /** Update a channel role's name, rank, and/or permission keys (system roles cannot be renamed/re-ranked). When permissions are supplied they REPLACE the role's existing keys. Requires the 'manage_roles' channel permission (app admins bypass). Note: changing send_messages here does not re-push Buddy until affected members' roles are re-applied via setChannelMemberRoles. */
1874
2781
  updateChannelRole: GroupRole;
2782
+ /** Creates or replaces a chunk's dense voxel grid and/or per-voxel states for the given app and coordinates, records each provided voxel state as an individual voxel update, and asynchronously uploads the chunk to the CDN. WRITES world state. Leaves chunkState and LODs untouched. Requires a valid bearer token (app-scoped tokens are limited to their own app); no additional org/app permission is enforced on this field. */
1875
2783
  updateChunk: Chunk;
2784
+ /** Replaces the level-of-detail (LOD) set for a chunk, preserving voxels, per-voxel states, chunk state and owner; returns the updated chunk (or null if it could not be written). WRITES world state. Requires a valid bearer token AND the `manage_apps` permission on the org that owns input.appId (super admins bypass). */
1876
2785
  updateChunkLods: Maybe<Chunk>;
2786
+ /** Upserts ONLY the opaque base64 chunk-level state blob for a chunk, preserving its voxels, per-voxel states and LODs; returns the updated chunk (or null if it could not be written). WRITES world state. Requires a valid bearer token AND the `manage_apps` permission on the org that owns input.appId (super admins bypass). */
1877
2787
  updateChunkState: Maybe<Chunk>;
2788
+ /** Updates a dedicated environment's autoscaling bounds (game-api / Buddy min & max server counts), load-balancer count, and optionally the Caddy flavor, queuing a change order that redeploys the affected tiers. May change the hourly cost. Rejected for 'dev_single' environments and when another change order is already active. Requires the 'manage_environments' org permission. */
1878
2789
  updateEnvironmentScaling: CksEnvironmentChangeOrder;
2790
+ /** Sets the authenticated user’s gamertag and disambiguation and appends a gamertag-history row. Requires a valid game token; only ever updates the caller. Fails if the gamertag+disambiguation pair is already taken. NOTE: the users table is management-owned, so in cks-game-api this throws ForbiddenException — call cks-management-api instead. */
1879
2791
  updateGamertag: User;
2792
+ /** Replaces the full set of roles assigned to an org member. Requires the 'manage_members' permission on the org (super admins bypass). Pass the complete desired role list; roles not included are removed. */
1880
2793
  updateOrgMemberRoles: OrgMember;
2794
+ /** Updates a role's name, description, and/or permission set. Requires the 'manage_members' permission on the role's org (super admins bypass). If input.permissions is provided it replaces the entire set (empty array clears all); omit to leave permissions unchanged. */
1881
2795
  updateOrgRole: OrgRole;
2796
+ /** Updates an org token's metadata (label, expiry, active flag). Requires the 'manage_tokens' permission on the token's org (super admins bypass). Does not rotate the secret value. */
1882
2797
  updateOrgToken: OrgToken;
1883
- /** Update team name/description/membership policy (manage_group). */
2798
+ /** Update a team's name, description, and/or membership policy. Requires the 'manage_group' team permission (app admins bypass). */
1884
2799
  updateTeam: Group;
1885
- /** Update a team role (manage_roles). */
2800
+ /** Update a team role's name, rank, and/or permission keys (system roles cannot be renamed/re-ranked). When permissions are supplied they REPLACE the role's existing keys. Requires the 'manage_roles' team permission (app admins bypass). */
1886
2801
  updateTeamRole: GroupRole;
2802
+ /** Creates or replaces the authenticated user’s per-app state for `input.appId` (upsert keyed by appId+userId). Requires a valid game token; always writes the caller’s own state. `input.state` is base64-encoded binary. */
1887
2803
  updateUserAppState: UserAppState;
2804
+ /** Replaces the authenticated user’s top-level `state` blob (base64-encoded binary; omit/null clears it). Requires a valid game token; only ever writes the caller. NOTE: users.state is management-owned, so in cks-game-api this throws ForbiddenException — call cks-management-api instead. */
1888
2805
  updateUserState: User;
2806
+ /** Sets the target user’s account `user_type` (e.g. "direct", "deleted"). Requires a super-admin bearer game token (and the management API enabled). NOTE: management-owned in cks-game-api (throws ForbiddenException) — use cks-management-api. */
1889
2807
  updateUserType: User;
2808
+ /** Records (upserts) a single voxel edit in the voxel_updates log for one chunk and returns the resulting Voxel. WRITES world state; a background maintenance job later folds these edits into the chunk's packed grid. Requires a valid bearer token AND voxel-edit permission for the target region: the user must have active app access, the `update_voxel_data` tier permission, and (when grids cover the chunk) `update_voxel_data` on a covering grid. */
1890
2809
  updateVoxel: Voxel;
2810
+ /** Operator only (is_operator). Yanks (withdraws) an environment version so it can no longer be deployed; existing environments are unaffected. Writes an audit entry. Returns true on success. */
1891
2811
  yankEnvironmentVersion: Scalars['Boolean']['output'];
1892
2812
  };
1893
2813
  export type MutationActorHeartbeatArgs = {
@@ -1902,24 +2822,31 @@ export type MutationAddTeamMemberArgs = {
1902
2822
  userId: Scalars['BigInt']['input'];
1903
2823
  };
1904
2824
  export type MutationArchiveAccessTierArgs = {
2825
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
1905
2826
  tierId: Scalars['BigInt']['input'];
1906
2827
  };
1907
2828
  export type MutationArchiveAppArgs = {
1908
2829
  appId: Scalars['BigInt']['input'];
2830
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
1909
2831
  };
1910
2832
  export type MutationAssignGroupToGridArgs = {
1911
2833
  input: AssignGroupToGridInput;
1912
2834
  };
1913
2835
  export type MutationCancelSharedSubscriptionArgs = {
1914
2836
  appId: Scalars['BigInt']['input'];
2837
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
1915
2838
  };
1916
2839
  export type MutationCapturePaypalCheckoutArgs = {
2840
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
1917
2841
  orderId: Scalars['String']['input'];
1918
2842
  };
1919
2843
  export type MutationChangePasswordArgs = {
1920
2844
  currentPassword: Scalars['String']['input'];
1921
2845
  newPassword: Scalars['String']['input'];
1922
2846
  };
2847
+ export type MutationClaimFreeAppAccessArgs = {
2848
+ appId: Scalars['BigInt']['input'];
2849
+ };
1923
2850
  export type MutationConfirmEmailArgs = {
1924
2851
  token: Scalars['String']['input'];
1925
2852
  };
@@ -1966,10 +2893,12 @@ export type MutationCreateTeamRoleArgs = {
1966
2893
  input: CreateGroupRoleInput;
1967
2894
  };
1968
2895
  export type MutationDeleteActorArgs = {
2896
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
1969
2897
  uuid: Scalars['String']['input'];
1970
2898
  };
1971
2899
  export type MutationDeleteAvatarArgs = {
1972
2900
  id: Scalars['BigInt']['input'];
2901
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
1973
2902
  };
1974
2903
  export type MutationDeleteChannelArgs = {
1975
2904
  groupId: Scalars['BigInt']['input'];
@@ -1982,13 +2911,16 @@ export type MutationDeleteCpSecretArgs = {
1982
2911
  name: Scalars['String']['input'];
1983
2912
  };
1984
2913
  export type MutationDeleteOrgRoleArgs = {
2914
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
1985
2915
  orgRoleId: Scalars['BigInt']['input'];
1986
2916
  };
1987
2917
  export type MutationDeleteQuotaArgs = {
2918
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
1988
2919
  quotaId: Scalars['BigInt']['input'];
1989
2920
  };
1990
2921
  export type MutationDeleteTeamArgs = {
1991
2922
  groupId: Scalars['BigInt']['input'];
2923
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
1992
2924
  };
1993
2925
  export type MutationDeleteTeamRoleArgs = {
1994
2926
  groupRoleId: Scalars['BigInt']['input'];
@@ -2057,6 +2989,9 @@ export type MutationGrantAppAccessArgs = {
2057
2989
  export type MutationGrantGridPermissionsArgs = {
2058
2990
  input: GrantGridPermissionsInput;
2059
2991
  };
2992
+ export type MutationGrantMyAppAccessArgs = {
2993
+ appId: Scalars['BigInt']['input'];
2994
+ };
2060
2995
  export type MutationIngestEnvironmentVersionArgs = {
2061
2996
  input: IngestEnvironmentVersionInput;
2062
2997
  };
@@ -2074,6 +3009,7 @@ export type MutationLeaveChannelArgs = {
2074
3009
  };
2075
3010
  export type MutationLeaveTeamArgs = {
2076
3011
  groupId: Scalars['BigInt']['input'];
3012
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
2077
3013
  };
2078
3014
  export type MutationLinkAppToEnvironmentArgs = {
2079
3015
  input: LinkAppToEnvironmentInput;
@@ -2084,6 +3020,7 @@ export type MutationLoginArgs = {
2084
3020
  export type MutationPublishAppToSharedArgs = {
2085
3021
  appId: Scalars['BigInt']['input'];
2086
3022
  cancelUrl?: InputMaybe<Scalars['String']['input']>;
3023
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
2087
3024
  planId?: InputMaybe<Scalars['BigInt']['input']>;
2088
3025
  provider?: InputMaybe<PaymentProvider>;
2089
3026
  successUrl?: InputMaybe<Scalars['String']['input']>;
@@ -2117,10 +3054,12 @@ export type MutationRemoveChannelMemberArgs = {
2117
3054
  userId: Scalars['BigInt']['input'];
2118
3055
  };
2119
3056
  export type MutationRemoveOrgMemberArgs = {
3057
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
2120
3058
  orgId: Scalars['BigInt']['input'];
2121
3059
  userId: Scalars['BigInt']['input'];
2122
3060
  };
2123
3061
  export type MutationRemoveSharedPaymentMethodArgs = {
3062
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
2124
3063
  orgId: Scalars['BigInt']['input'];
2125
3064
  paymentMethodId: Scalars['BigInt']['input'];
2126
3065
  };
@@ -2151,6 +3090,7 @@ export type MutationResumeEnvironmentArgs = {
2151
3090
  };
2152
3091
  export type MutationRevokeAppAccessArgs = {
2153
3092
  appId: Scalars['BigInt']['input'];
3093
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
2154
3094
  userId: Scalars['BigInt']['input'];
2155
3095
  };
2156
3096
  export type MutationRevokeGridPermissionsArgs = {
@@ -2160,6 +3100,7 @@ export type MutationRevokeGroupFromGridArgs = {
2160
3100
  input: RevokeGroupFromGridInput;
2161
3101
  };
2162
3102
  export type MutationRevokeOrgTokenArgs = {
3103
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
2163
3104
  orgTokenId: Scalars['BigInt']['input'];
2164
3105
  };
2165
3106
  export type MutationRollbackVoxelUpdatesArgs = {
@@ -2188,6 +3129,7 @@ export type MutationSendVoxelUpdateArgs = {
2188
3129
  };
2189
3130
  export type MutationSetAppBudgetArgs = {
2190
3131
  appId: Scalars['BigInt']['input'];
3132
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
2191
3133
  monthlyLimitCents: Scalars['BigInt']['input'];
2192
3134
  orgId: Scalars['BigInt']['input'];
2193
3135
  };
@@ -2202,6 +3144,7 @@ export type MutationSetAppVisibilityArgs = {
2202
3144
  };
2203
3145
  export type MutationSetAutoBillingArgs = {
2204
3146
  enabled: Scalars['Boolean']['input'];
3147
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
2205
3148
  limitCents?: InputMaybe<Scalars['BigInt']['input']>;
2206
3149
  lowWaterThresholdCents?: InputMaybe<Scalars['BigInt']['input']>;
2207
3150
  orgId: Scalars['BigInt']['input'];
@@ -2246,6 +3189,7 @@ export type MutationSetTeamPolicyArgs = {
2246
3189
  input: SetTeamPolicyInput;
2247
3190
  };
2248
3191
  export type MutationSetupSharedPaymentMethodArgs = {
3192
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
2249
3193
  orgId: Scalars['BigInt']['input'];
2250
3194
  };
2251
3195
  export type MutationTeleportRequestArgs = {
@@ -2334,145 +3278,254 @@ export type MutationUpdateVoxelArgs = {
2334
3278
  export type MutationYankEnvironmentVersionArgs = {
2335
3279
  version: Scalars['String']['input'];
2336
3280
  };
3281
+ /** A grid overlapping a scanned region, plus a user's effective permission keys on it (returned by nearbyGridPermissions). */
2337
3282
  export type NearbyGridPermissions = {
2338
3283
  __typename?: 'NearbyGridPermissions';
3284
+ /** The app (tenant) that owns the grid. */
2339
3285
  appId: Scalars['BigInt']['output'];
3286
+ /** The grid id. */
2340
3287
  gridId: Scalars['BigInt']['output'];
3288
+ /** High (maximum) corner chunk of the grid box. */
2341
3289
  highChunk: ChunkCoordinates;
3290
+ /** Low (minimum) corner chunk of the grid box. */
2342
3291
  lowChunk: ChunkCoordinates;
3292
+ /** The user's effective runtime permission key strings on this grid. */
2343
3293
  permissionKeys: Array<Scalars['String']['output']>;
3294
+ /** The user the permissions were computed for. */
2344
3295
  userId: Scalars['BigInt']['output'];
2345
3296
  };
3297
+ /** Scan a region for grids and report a user's effective permissions on each. */
2346
3298
  export type NearbyGridPermissionsInput = {
3299
+ /** The app (tenant) to scan within. */
2347
3300
  appId: Scalars['BigInt']['input'];
3301
+ /** High corner of the region to scan, in chunk coordinates (normalized). */
2348
3302
  highChunk: ChunkCoordinatesInput;
3303
+ /** Low corner of the region to scan, in chunk coordinates (normalized). */
2349
3304
  lowChunk: ChunkCoordinatesInput;
3305
+ /** The user whose effective permissions to report per grid. */
2350
3306
  userId: Scalars['BigInt']['input'];
2351
3307
  };
2352
3308
  /** Org off-session auto-billing configuration. */
2353
3309
  export type OrgAutoBilling = {
2354
3310
  __typename?: 'OrgAutoBilling';
3311
+ /** Amount already auto-billed in the current period, in cents. */
2355
3312
  autoBilledThisPeriodCents: Scalars['BigInt']['output'];
3313
+ /** Whether off-session auto-billing is enabled. */
2356
3314
  enabled: Scalars['Boolean']['output'];
3315
+ /** True when a vaulted payment method exists to charge off-session. */
2357
3316
  hasPaymentMethod: Scalars['Boolean']['output'];
3317
+ /** Most recent auto-billing failure message, if any. */
2358
3318
  lastError: Maybe<Scalars['String']['output']>;
2359
3319
  /** Max auto-billed per period in cents. Null = no limit. */
2360
3320
  limitCents: Maybe<Scalars['BigInt']['output']>;
3321
+ /** Wallet balance at or below which an auto-recharge is triggered, in cents. */
2361
3322
  lowWaterThresholdCents: Scalars['BigInt']['output'];
3323
+ /** Organization id (BigInt). */
2362
3324
  orgId: Scalars['BigInt']['output'];
3325
+ /** Reset window for the per-period auto-billed total, e.g. 'month'. */
2363
3326
  period: Scalars['String']['output'];
3327
+ /** Amount to top up the wallet by on each auto-recharge, in cents. */
2364
3328
  rechargeAmountCents: Scalars['BigInt']['output'];
2365
3329
  };
2366
3330
  export type OrgMember = {
2367
3331
  __typename?: 'OrgMember';
3332
+ /** When the membership was created. */
2368
3333
  createdAt: Scalars['DateTime']['output'];
3334
+ /** Organization this membership belongs to (BigInt as string). */
2369
3335
  orgId: Scalars['BigInt']['output'];
3336
+ /** Unique membership id (primary key, BigInt as string). Distinct from userId. */
2370
3337
  orgMemberId: Scalars['BigInt']['output'];
3338
+ /** Membership status. Only 'active' members count for permission checks; other values (e.g. 'invited' or 'removed') grant no permissions. */
2371
3339
  status: Scalars['String']['output'];
3340
+ /** When the membership was last updated. */
2372
3341
  updatedAt: Scalars['DateTime']['output'];
3342
+ /** The member's user_id (BigInt as string). */
2373
3343
  userId: Scalars['BigInt']['output'];
2374
3344
  };
2375
3345
  /** Represents one user's membership in one organization. Bundles the org, the union of permissions across the user's assigned roles, and the role list itself - so the UI can render an org dashboard without a follow-up round trip. */
2376
3346
  export type OrgMembership = {
2377
3347
  __typename?: 'OrgMembership';
3348
+ /** When the user joined the organization. */
2378
3349
  joinedAt: Scalars['DateTime']['output'];
3350
+ /** The organization. */
2379
3351
  org: Organization;
3352
+ /** Effective permission keys the user holds in this org (union across assigned roles; full set for super admins). */
2380
3353
  permissions: Array<Scalars['String']['output']>;
3354
+ /** Roles assigned to the user in this org. */
2381
3355
  roles: Array<OrgRole>;
2382
3356
  };
2383
3357
  export type OrgPermission = {
2384
3358
  __typename?: 'OrgPermission';
3359
+ /** Optional grouping category for UI display. */
2385
3360
  category: Maybe<Scalars['String']['output']>;
3361
+ /** Human-readable explanation of what the permission allows. */
2386
3362
  description: Maybe<Scalars['String']['output']>;
3363
+ /** Stable permission key used in role grants (e.g. 'manage_members', 'manage_tokens'). */
2387
3364
  permissionKey: Scalars['ID']['output'];
2388
3365
  };
2389
3366
  export type OrgRole = {
2390
3367
  __typename?: 'OrgRole';
3368
+ /** When the role was created. */
2391
3369
  createdAt: Scalars['DateTime']['output'];
3370
+ /** Optional human-readable description of the role. */
2392
3371
  description: Maybe<Scalars['String']['output']>;
3372
+ /** True for built-in / seeded roles managed by the platform; typically not editable. */
2393
3373
  isSystem: Scalars['Boolean']['output'];
3374
+ /** Organization this role belongs to (BigInt as string). */
2394
3375
  orgId: Scalars['BigInt']['output'];
3376
+ /** Unique role id (primary key, BigInt as string). */
2395
3377
  orgRoleId: Scalars['BigInt']['output'];
3378
+ /** Permission keys granted by this role (resolved from org_role_permissions). */
2396
3379
  permissions: Array<Scalars['String']['output']>;
3380
+ /** Display name of the role. */
2397
3381
  roleName: Scalars['String']['output'];
2398
3382
  };
2399
3383
  export type OrgToken = {
2400
3384
  __typename?: 'OrgToken';
3385
+ /** When the token was created. */
2401
3386
  createdAt: Scalars['DateTime']['output'];
3387
+ /** For 'service' tokens, the environment id (UUID) the token is scoped to; null for user-minted tokens. */
2402
3388
  environmentId: Maybe<Scalars['String']['output']>;
3389
+ /** Optional expiry timestamp; null means the token never expires. */
2403
3390
  expiresAt: Maybe<Scalars['DateTime']['output']>;
3391
+ /** False once revoked; inactive tokens cannot authenticate. */
2404
3392
  isActive: Scalars['Boolean']['output'];
3393
+ /** 'user_minted' (human-created) or 'service' (minted by the control plane for per-tenant game-apis). */
2405
3394
  kind: Scalars['String']['output'];
3395
+ /** Optional human-readable label. */
2406
3396
  label: Maybe<Scalars['String']['output']>;
3397
+ /** When the token last authenticated a request, if ever. */
2407
3398
  lastUsedAt: Maybe<Scalars['DateTime']['output']>;
3399
+ /** Organization that owns this token (BigInt as string). */
2408
3400
  orgId: Scalars['BigInt']['output'];
3401
+ /** Unique token id (primary key, BigInt as string). */
2409
3402
  orgTokenId: Scalars['BigInt']['output'];
3403
+ /** When the token was revoked, if it has been. */
2410
3404
  revokedAt: Maybe<Scalars['DateTime']['output']>;
3405
+ /** When the token was last updated. */
2411
3406
  updatedAt: Scalars['DateTime']['output'];
2412
3407
  };
2413
3408
  /** Returned exactly once - on org token creation. The plaintext `token` field is never re-emitted. Future listings show metadata only via the `OrgToken` type. */
2414
3409
  export type OrgTokenWithSecret = {
2415
3410
  __typename?: 'OrgTokenWithSecret';
3411
+ /** When the token was created. */
2416
3412
  createdAt: Scalars['DateTime']['output'];
3413
+ /** Optional expiry timestamp; null means no expiry. */
2417
3414
  expiresAt: Maybe<Scalars['DateTime']['output']>;
3415
+ /** Whether the token is active. */
2418
3416
  isActive: Scalars['Boolean']['output'];
3417
+ /** Optional human-readable label. */
2419
3418
  label: Maybe<Scalars['String']['output']>;
3419
+ /** Organization that owns this token (BigInt as string). */
2420
3420
  orgId: Scalars['BigInt']['output'];
3421
+ /** Unique token id (BigInt as string). */
2421
3422
  orgTokenId: Scalars['BigInt']['output'];
2422
3423
  /** The plaintext token. Save it now; it is not stored. */
2423
3424
  token: Scalars['String']['output'];
2424
3425
  };
2425
3426
  export type OrgWallet = {
2426
3427
  __typename?: 'OrgWallet';
3428
+ /** Current wallet balance in minor currency units (cents) of `currency`, as a BigInt decimal string. May be negative if usage was charged against an empty wallet. */
2427
3429
  balanceCents: Scalars['BigInt']['output'];
3430
+ /** When the wallet was created (ISO-8601 UTC timestamp). */
2428
3431
  createdAt: Scalars['DateTime']['output'];
3432
+ /** ISO-4217 currency code for `balanceCents`, lowercase (e.g. "usd"). Defaults to "usd". */
2429
3433
  currency: Scalars['String']['output'];
3434
+ /** Organization that owns this wallet (BigInt as a decimal string). There is exactly one wallet per organization. */
2430
3435
  orgId: Scalars['BigInt']['output'];
3436
+ /** When the wallet was last modified, e.g. on balance change (ISO-8601 UTC timestamp). */
2431
3437
  updatedAt: Scalars['DateTime']['output'];
3438
+ /** Unique wallet id (BigInt as a decimal string). */
2432
3439
  walletId: Scalars['BigInt']['output'];
2433
3440
  };
2434
3441
  export type Organization = {
2435
3442
  __typename?: 'Organization';
3443
+ /** When the organization was created. */
2436
3444
  createdAt: Scalars['DateTime']['output'];
3445
+ /** Human-readable organization name. */
2437
3446
  name: Scalars['String']['output'];
3447
+ /** Unique organization id (primary key). BigInt as a string. */
2438
3448
  orgId: Scalars['BigInt']['output'];
3449
+ /** user_id of the organization owner (BigInt as string). */
2439
3450
  ownerUserId: Scalars['BigInt']['output'];
3451
+ /** Unique URL-safe slug (lowercase letters, numbers, and dashes). */
2440
3452
  slug: Scalars['String']['output'];
3453
+ /** Lifecycle status, e.g. 'active' or 'frozen'. Set platform-wide via setOrgStatus. */
2441
3454
  status: Scalars['String']['output'];
3455
+ /** When the organization was last updated. */
2442
3456
  updatedAt: Scalars['DateTime']['output'];
2443
3457
  };
3458
+ /** Offset/limit pagination metadata for a paginated list. */
2444
3459
  export type PageInfo = {
2445
3460
  __typename?: 'PageInfo';
3461
+ /** Maximum number of items returned in this page (the page size that was applied). */
2446
3462
  limit: Scalars['Int']['output'];
3463
+ /** Number of items skipped before this page (zero-based offset). */
2447
3464
  offset: Scalars['Int']['output'];
3465
+ /** Total number of records matching the query across all pages, ignoring limit and offset. */
2448
3466
  totalCount: Scalars['Int']['output'];
2449
3467
  };
3468
+ /** A single inbound payment-provider webhook event from the reconciliation audit log. */
2450
3469
  export type PaymentEventRecord = {
2451
3470
  __typename?: 'PaymentEventRecord';
3471
+ /** Checkout this event was matched to (BigInt as a decimal string); null if it could not be matched. */
2452
3472
  checkoutId: Maybe<Scalars['BigInt']['output']>;
3473
+ /** When the event was received (ISO-8601 UTC timestamp). */
2453
3474
  createdAt: Scalars['DateTime']['output'];
3475
+ /** Error message if processing this event failed; null on success. */
2454
3476
  error: Maybe<Scalars['String']['output']>;
3477
+ /** Unique payment-event id (BigInt as a decimal string). */
2455
3478
  eventId: Scalars['BigInt']['output'];
3479
+ /** Provider event type string (e.g. "checkout.session.completed" for Stripe). */
2456
3480
  eventType: Scalars['String']['output'];
3481
+ /** Provider-assigned event id, unique per provider; used to make webhook handling idempotent. */
2457
3482
  externalEventId: Scalars['String']['output'];
3483
+ /** When the event was successfully processed (ISO-8601 UTC timestamp); null if not yet processed. */
2458
3484
  processedAt: Maybe<Scalars['DateTime']['output']>;
3485
+ /** Provider that delivered this webhook event. */
2459
3486
  provider: PaymentProvider;
2460
3487
  };
3488
+ /** An edge in a PaymentEventRecord connection. */
3489
+ export type PaymentEventRecordEdge = {
3490
+ __typename?: 'PaymentEventRecordEdge';
3491
+ /** Opaque cursor for this edge. */
3492
+ cursor: Scalars['String']['output'];
3493
+ /** The node at the end of this edge. */
3494
+ node: PaymentEventRecord;
3495
+ };
3496
+ /** A Relay cursor connection over PaymentEventRecord rows. Page with first/after; pass pageInfo.endCursor back as after for the next page. */
3497
+ export type PaymentEventsConnection = {
3498
+ __typename?: 'PaymentEventsConnection';
3499
+ /** Edges on this page. */
3500
+ edges: Array<PaymentEventRecordEdge>;
3501
+ /** Pagination metadata. */
3502
+ pageInfo: ConnectionPageInfo;
3503
+ /** Total matching records across all pages, when known (null for sources that do not compute a total). */
3504
+ totalCount: Maybe<Scalars['Int']['output']>;
3505
+ };
3506
+ /** A page of payment webhook events with offset/limit pagination metadata. */
2461
3507
  export type PaymentEventsPage = {
2462
3508
  __typename?: 'PaymentEventsPage';
3509
+ /** The webhook events on this page, ordered newest first. */
2463
3510
  items: Array<PaymentEventRecord>;
3511
+ /** Offset/limit pagination metadata (totalCount, limit, offset) for this result set. */
2464
3512
  pageInfo: PageInfo;
2465
3513
  };
2466
3514
  /** Stripe SetupIntent handle the browser uses to vault a card for auto-billing. */
2467
3515
  export type PaymentMethodSetup = {
2468
3516
  __typename?: 'PaymentMethodSetup';
3517
+ /** SetupIntent client secret the browser confirms to vault the card. */
2469
3518
  clientSecret: Maybe<Scalars['String']['output']>;
3519
+ /** Provider customer id (e.g. Stripe customer) the card is vaulted under. */
2470
3520
  externalCustomerId: Scalars['String']['output'];
3521
+ /** Provider publishable key for the browser SDK. */
2471
3522
  publishableKey: Maybe<Scalars['String']['output']>;
2472
3523
  };
2473
3524
  /** External payment processor for a checkout. */
2474
3525
  export declare enum PaymentProvider {
3526
+ /** PayPal. Hosted approval flow; the approved order is captured (see capturePaypalCheckout) and confirmed via PayPal webhooks. */
2475
3527
  Paypal = "PAYPAL",
3528
+ /** Stripe Checkout. Hosted card payment session; completion is confirmed via Stripe webhooks. */
2476
3529
  Stripe = "STRIPE"
2477
3530
  }
2478
3531
  /** Public platform discovery. Clients/SDKs read the shared game-api URL here to route apps deployed to the shared environment. */
@@ -2501,172 +3554,281 @@ export type PublishEnvironmentReleaseFromGameApiTagInput = {
2501
3554
  gameApiTag: Scalars['String']['input'];
2502
3555
  };
2503
3556
  export type PurgeEnvironmentInput = {
3557
+ /** Optional idempotency key. Recommended for retries: replaying with the same key and identical input returns the first result instead of re-applying; the same key with different input returns IDEMPOTENCY_CONFLICT. Keys expire after 24h. */
3558
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
3559
+ /** Organization id (BigInt) that owns the environment. */
2504
3560
  orgId: Scalars['BigInt']['input'];
3561
+ /** Slug of the already-destroyed environment whose record to permanently delete. */
2505
3562
  slug: Scalars['String']['input'];
2506
3563
  };
2507
3564
  export type Query = {
2508
3565
  __typename?: 'Query';
2509
- /** Returns only active (ReadyForClients) GraphQL servers */
3566
+ /** List only healthy GraphQL API servers (status = ReadyForClients) for client routing/discovery. No authentication required. */
2510
3567
  activeGraphQLServers: Array<GraphQlServer>;
3568
+ /** Fetches a single actor by its 32-character ASCII `uuid`. Requires a valid game token. Owner-aware: the owner receives full state; non-owners receive a public copy with `privateState` stripped (null). Throws NotFound if the uuid does not exist. */
2511
3569
  actor: Actor;
3570
+ /** Lists actors owned by the authenticated user, optionally narrowed by `filter` (appId, avatarId, uuid, chunk). Requires a valid game token; only the caller’s own actors are returned (full state included). For other users’ actors use `actor` or `batchLookupActors`. */
2512
3571
  actors: Array<Actor>;
3572
+ /** Relay-style cursor-paginated version of `actors`: lists actors owned by the authenticated user, optionally narrowed by `filter` (appId, avatarId, uuid, chunk). Page forward with `first` (default 50, max 200) and `after` (an opaque cursor from a previous page’s `pageInfo.endCursor`); `totalCount` is the full number of matching actors. Requires a valid game token; only the caller’s own actors are returned (full state included). */
3573
+ actorsConnection: ActorsConnection;
3574
+ /** Fetch a single app by its numeric id. Requires authentication (any signed-in user); does NOT enforce org/app permissions, so it can read apps the caller does not own, of any visibility/status. Returns null if the id does not exist. Prefer appBySlug for slug-based marketplace lookups. */
2513
3575
  app: Maybe<App>;
2514
- /** Public listing of access tiers for an app. Used by the marketplace app detail page. */
3576
+ /** Public listing of an app's access tiers (the free/paid bundles of runtime permissions), ordered by tierOrder ascending. PUBLIC: no authentication required. Powers the marketplace app detail / pricing page. Includes tiers of all statuses; inspect AppAccessTier.status to skip archived tiers. */
2515
3577
  appAccessTiers: Array<AppAccessTier>;
3578
+ /** Returns the monthly spend cap and current-month usage for a single app, or null if no budget has been configured for it. Requires the 'view_billing' app permission. */
2516
3579
  appBudget: Maybe<AppBudget>;
3580
+ /** Lists every app spend-cap budget configured under the organization. Requires the 'view_billing' org permission. */
2517
3581
  appBudgets: Array<AppBudget>;
3582
+ /** Look up a single app by its org slug + app slug (the marketplace URL path). PUBLIC: no authentication required, and NOT filtered by visibility/status, so it can resolve unlisted or draft apps when the exact slugs are known. Returns null if no matching app exists. */
2518
3583
  appBySlug: Maybe<App>;
2519
- /** Top GraphQL operations by bytes for an app in the time range. */
3584
+ /** Lists org members eligible for a manual app access grant (active members of the app's owning org). Requires the 'manage_access_tiers' permission on the app; super admins bypass. Use the returned user ids with grantAppAccess. */
3585
+ appGrantMemberCandidates: Array<AppGrantMemberCandidate>;
3586
+ /** Top GraphQL operations for an app ranked by bytes over the time range. Read-only reporting; the app must be linked to an environment in the org. Requires the 'view_usage' org permission. */
2520
3587
  appGraphqlOperations: Array<GraphqlOperationUsageRow>;
2521
- /** Shared-environment runtime gate + current billing-window usage for an app. */
3588
+ /** Shared-environment runtime gate decision plus current hour/day billing-window usage for an app. Read this to learn why an app is not running (runtimeDenialReason). Caller must be a member of the app's org. */
2522
3589
  appRuntimeState: AppRuntimeState;
3590
+ /** An app's paid shared-environment subscription, or null when it has none (e.g. unpublished or on the free quota). Caller must be a member of the app's org. */
2523
3591
  appSharedSubscription: Maybe<AppSharedSubscription>;
2524
- /** Replication and GraphQL totals plus top operations for one app. */
3592
+ /** Replication and GraphQL byte totals plus the top GraphQL operations for one app over the time range. Read-only reporting; the app must be linked to an environment in the org. Requires the 'view_usage' org permission. */
2525
3593
  appUsageSummary: AppUsageSummary;
3594
+ /** Admin view of the user access records for an app (who has been granted/revoked access and on which tier). Requires the 'manage_access_tiers' permission on the app; super admins bypass. Ordered by most recently updated. Paginated via limit/offset. */
2526
3595
  appUserAccessByApp: Array<AppUserAccess>;
2527
- /** Public marketplace listing. Returns visibility=PUBLIC + status=LIVE only. No auth required. */
3596
+ /** Admin view of the user access records for an app (who has been granted/revoked access and on which tier). Requires the 'manage_access_tiers' permission on the app; super admins bypass. Ordered by most recently updated. Relay cursor connection; prefer this over the offset-based appUserAccessByApp. */
3597
+ appUserAccessConnection: AppUserAccessConnection;
3598
+ /** Public marketplace listing of apps. PUBLIC: no authentication required. Returns ONLY apps with visibility=PUBLIC AND status=LIVE (drafts, unlisted, private, and archived apps are never returned). Use myApps or appsForOrg for caller-visible or org-scoped apps. Results are ordered newest-first and paginated via pageInfo. */
2528
3599
  apps: AppsPage;
3600
+ /** Public marketplace listing of apps. PUBLIC: no authentication required. Returns ONLY apps with visibility=PUBLIC AND status=LIVE (drafts, unlisted, private, and archived apps are never returned). Results are ordered newest-first. Relay cursor connection; prefer this over the offset-based apps. */
3601
+ appsConnection: AppsConnection;
3602
+ /** All apps belonging to an organization, identified by the org's slug, regardless of visibility or status (includes drafts and archived). Requires authentication; intended for org dashboards. Ordered newest-first. Returns an empty list for an unknown slug. */
2529
3603
  appsForOrg: Array<App>;
3604
+ /** Fetches a single avatar by id. Requires a valid game token. Owner-aware: the owner receives full state; non-owners receive a public copy with `privateState` stripped (null). Throws NotFound if the id does not exist. State blobs are base64-encoded binary. */
2530
3605
  avatar: Avatar;
2531
- /** Read one avatar's per-app state (public to all players). */
3606
+ /** Reads one avatars per-app state (keyed by appId+avatarId). PUBLIC READ: any authenticated user may read it. Requires a valid game token. Returns null when no row exists. `state` is base64-encoded binary. */
2532
3607
  avatarAppState: Maybe<AppAvatarState>;
2533
- /** Batch-read per-app state for many avatars (public to all players). */
3608
+ /** Batch-reads per-app state for many avatars under a single app in one call. PUBLIC READ: any authenticated user may read. Requires a valid game token. Avatars with no row for the app are omitted. `state` blobs are base64-encoded binary. */
2534
3609
  avatarAppStates: Array<AppAvatarState>;
3610
+ /** Bulk-fetches actors by a list of 32-character ASCII uuids in one round-trip. Requires a valid game token. PUBLIC-STATE ONLY: `privateState` is stripped (null) for every result regardless of ownership. Unknown uuids are silently omitted. Use this to resolve many actors at once; use `actor` for a single owner-scoped fetch. */
2535
3611
  batchLookupActors: Array<Actor>;
2536
- /** Fetch one channel by id. */
3612
+ /** Fetch one channel by id. Errors if the id is not a channel. */
2537
3613
  channel: Group;
2538
- /** List the members of a channel. */
3614
+ /** List the members of a channel (the subscriber set, including pending requests), each with their status and roles. */
2539
3615
  channelMembers: Array<GroupMember>;
2540
- /** The current channel creation/membership policy for an app. */
3616
+ /** The current channel creation/membership policy for an app (who may create channels and the default membership policy of new channels). Falls back to app defaults when unset. */
2541
3617
  channelPolicy: AppGroupPolicy;
2542
- /** List the roles of a channel. */
3618
+ /** List the roles of a channel, including the system 'leader' role and any default 'member' role (which typically grants send_messages). */
2543
3619
  channelRoles: Array<GroupRole>;
2544
- /** List active channels in an app. */
3620
+ /** List all active channels in an app (not just the caller's). */
2545
3621
  channels: Array<Group>;
2546
- /** Super admin only. Cross-tenant payments audit. */
3622
+ /** Cross-tenant payments audit across all users, orgs, and apps (newest first), with optional filtering. Restricted to super admins; requests from non-super-admins are rejected. For a caller's own history use `myCheckouts` instead. */
2547
3623
  checkouts: CheckoutsPage;
3624
+ /** Cross-tenant payments audit across all users, orgs, and apps (newest first), with optional filtering. Restricted to super admins; requests from non-super-admins are rejected. For a caller's own history use `myCheckoutsConnection` instead. Relay cursor connection; prefer this over the offset-based checkouts. */
3625
+ checkoutsConnection: CheckoutsConnection;
3626
+ /** Operator only (is_operator). Most recent operator audit entries, newest first, optionally filtered by environment. */
2548
3627
  cpAudit: Array<CpAuditEntry>;
3628
+ /** Operator only (is_operator). One change order with its tasks and steps. Null when the id is not found. */
2549
3629
  cpChangeOrder: Maybe<CpChangeOrderDetail>;
3630
+ /** Operator only (is_operator). Paginated change orders, optionally filtered by environment. Returns a *Page (rows/total/page/pageSize); page is 1-based. */
2550
3631
  cpChangeOrders: CpChangeOrdersPage;
3632
+ /** Operator only (is_operator). Lists environment-delivered secret metadata (names/kinds only, never plaintext) injected into the tenant runtime, optionally filtered by environment. */
2551
3633
  cpEnvSecrets: Array<CpEnvSecretRow>;
3634
+ /** Operator only (is_operator). Operator view of one environment by slug, across any org. Null when not found. */
2552
3635
  cpEnvironment: Maybe<CpAdminEnvironment>;
3636
+ /** Operator only (is_operator). Environment release manifests merged from git and the database, with the latest available version and git-source availability. Read-only. */
2553
3637
  cpEnvironmentVersions: CpEnvironmentVersionsPage;
3638
+ /** Operator only (is_operator). Paginated list of all environments across every org. Returns a *Page (rows/total/page/pageSize); page is 1-based. */
2554
3639
  cpEnvironments: CpAdminEnvironmentsPage;
3640
+ /** Operator only (is_operator). OVH flavor catalog with provider vs. customer pricing for cost analysis, optionally filtered by region. Read-only. */
2555
3641
  cpOvhCatalogSummary: Array<CpOvhCatalogRow>;
3642
+ /** Operator only (is_operator). Lists control-plane secret metadata (names/kinds only, never plaintext), optionally filtered by environment. */
2556
3643
  cpSecrets: Array<CpSecretRow>;
3644
+ /** Operator only (is_operator). cks-game-api git tags not yet pinned by any environment release, each with the version a publish would create. Read-only. */
2557
3645
  cpUnreleasedGameApiTags: CpUnreleasedGameApiTagsPage;
3646
+ /** Operator only (is_operator). Per-minute usage summary for any environment by slug (operator equivalent of environmentUsageSummary, not org-scoped). Read-only. */
2558
3647
  cpUsageSummary: CpUsageSummary;
2559
- /** The most-specific quota that applies to (orgId, appId, tierId, metric). Walks tier -> app -> org -> free_tier_defaults. Returns null if nothing matches. */
3648
+ /** Resolves the single most-specific quota that applies to the given (tierId, appId, orgId, metric) by walking tier -> app -> org -> free-tier defaults and returning the first match; its limitValue/period describe the enforced limit. Returns null if no matching rule and no free-tier default exist for the metric. Requires the 'view_usage' permission on the most-specific scope provided: tierId or appId -> 'view_usage' on the (owning) app; orgId -> 'view_usage' on the org. A metric-only query (no scope ids) resolves the platform free-tier default and only requires an authenticated user. */
2560
3649
  effectiveQuota: Maybe<ServiceQuota>;
2561
3650
  /** OVH datacenters that have at least one customer-priced instance flavor available for customer selection. */
2562
3651
  environmentDatacenters: Array<CksOvhDatacenter>;
2563
3652
  /** Customer-selectable instance flavors in the datacenter with current availability and customer pricing. */
2564
3653
  environmentFlavors: Array<CksOvhFlavor>;
3654
+ /** Release versions a specific environment may upgrade to: available, deployable by its environment class, and not older than the version it currently runs (forward-only — no rollback). Newest first; backs the version picker passed to redeployEnvironment. Requires the 'view_environments' org permission. */
2565
3655
  environmentForwardVersions: Array<CksEnvironmentVersion>;
2566
- /** Pricing quote for the selected flavors. Fails if any flavor is unavailable, hidden, or lacks customer pricing. */
3656
+ /** Pricing quote for the selected flavors plus the org wallet balance and a canCreate gate. Read-only — provisions nothing. Fails if any flavor is unavailable, hidden, or lacks customer pricing. Requires the 'view_billing' org permission. */
2567
3657
  environmentQuote: CksEnvironmentQuote;
2568
- /** Per-app usage totals for apps linked to an environment. */
3658
+ /** Aggregate replication/GraphQL byte totals per app for the apps linked to an environment, over the time window. Read-only reporting. Requires the 'view_usage' org permission. */
2569
3659
  environmentUsageByApp: Array<AppUsageRollupRow>;
2570
- /** Per-minute replication and GraphQL usage for apps linked to an environment. Observability only. */
3660
+ /** Per-minute replication and GraphQL byte/message usage time series for the apps linked to an environment, plus replication rate peaks and live Buddy rates. Read-only observability. Requires the 'view_usage' org permission. */
2571
3661
  environmentUsageSummary: EnvironmentUsageSummary;
3662
+ /** Catalog of available environment release versions that can be deployed, newest first. Not org-scoped (any authenticated caller). For the versions a specific environment may move to, use environmentForwardVersions. */
2572
3663
  environmentVersions: Array<CksEnvironmentVersion>;
3664
+ /** Reports whether a free-play window is active now, a human-readable schedule description, and the ISO-8601 start of the next window. PUBLIC: no authentication required. Takes no arguments; computed from server config and the current clock. */
2573
3665
  freePlayWindowInfo: FreePlayWindowInfo;
2574
- /** Single startup payload for browser game clients: current user, version requirements, UDP proxy status, realtime protocol details, and spatial send limits. */
3666
+ /** Single startup payload for browser game clients: the authenticated user, server/min-client version requirements, current UDP proxy status, realtime protocol details (subprotocol + subscription name), and the spatial send limits/constants (maxReplicationDistance, maxDecayRate, sequenceNumberModulo). Requires a bearer game token. Read-only: does not open a UDP proxy session. Call this once after login to initialize a play session. */
2575
3667
  gameClientBootstrap: GameClientBootstrap;
2576
3668
  /** Returns the single elected host user for an app (game). Deterministic across all cks-game-api replicas behind the LB: the user whose earliest still-connected actor row was created first wins, with a uuid tiebreaker. Returns null when no actors exist for the app. Stale actors (no recent actorHeartbeat) are excluded once HOST_ACTOR_FRESHNESS_SECONDS is enabled. Clients should poll; there is no host-change subscription in v1. */
2577
3669
  gameHost: Maybe<GameHost>;
3670
+ /** Fetch one container (instance) by id. Requires a valid token. */
2578
3671
  gameModelContainer: GmContainer;
3672
+ /** Fetch a container with its property values filtered to what the CALLER may see (public always; owner/hidden depend on the caller's relationship to the container). Use this for a player-facing view of an entity. Requires a valid token. */
2579
3673
  gameModelContainerState: GmContainerState;
3674
+ /** List all container types defined for an app. Requires app-admin ('manage_apps'). */
2580
3675
  gameModelContainerTypes: Array<GmContainerType>;
3676
+ /** List containers in an app, optionally filtered by container type and/or session. Requires a valid token. */
2581
3677
  gameModelContainers: Array<GmContainer>;
3678
+ /** Query the function-invocation event log (audit trail) with optional filters and pagination. Useful for debugging functions or showing recent activity. Requires a valid token. */
2582
3679
  gameModelEvents: Array<GmEvent>;
3680
+ /** Relay-style cursor-paginated version of `gameModelEvents`: query the function-invocation event log (audit trail) with optional filters. Page forward with `first` (default 50, max 200) and `after` (an opaque cursor from a previous page’s `pageInfo.endCursor`), which replace the legacy `limit`/`offset`. Useful for debugging functions or showing recent activity. Requires a valid token. */
3681
+ gameModelEventsConnection: GameModelEventsConnection;
3682
+ /** List the feature keys defined for an app. Requires app-admin ('manage_apps'). */
2583
3683
  gameModelFeatures: Array<GmAppFeature>;
3684
+ /** Fetch one studio-defined function by name. Requires app-admin ('manage_apps'). */
2584
3685
  gameModelFunction: GmFunction;
3686
+ /** List studio-defined functions for an app, optionally filtered to those attached to a container type. Requires app-admin ('manage_apps'). */
2585
3687
  gameModelFunctions: Array<GmFunction>;
3688
+ /** Read the app's game-model runtime policy (session creation policy + default participant role). Requires app-admin ('manage_apps'). */
2586
3689
  gameModelPolicy: GmAppPolicy;
3690
+ /** List the property definitions for a container type. Requires app-admin ('manage_apps'). */
2587
3691
  gameModelPropertyDefs: Array<GmPropertyDef>;
3692
+ /** Fetch one session by id. Requires a valid token. */
2588
3693
  gameModelSession: GmSession;
3694
+ /** List sessions in an app, optionally filtered by status. Requires a valid token. */
2589
3695
  gameModelSessions: Array<GmSession>;
3696
+ /** List tier -> feature grants for an app, optionally filtered to one tier. Requires app-admin ('manage_apps'). */
2590
3697
  gameModelTierFeatures: Array<GmTierFeature>;
3698
+ /** Traverse the container graph from a root container along a relationship type up to a depth, returning the reachable nodes and edges. Requires a valid token. */
2591
3699
  gameModelTraverse: GmTraverseResult;
3700
+ /** Fetch a container type's full schema: its property definitions plus the functions available on it. Requires app-admin ('manage_apps'). */
2592
3701
  gameModelTypeSchema: GmTypeSchema;
3702
+ /** Fetches one chunk (its base64 voxel grid, per-voxel states, chunk state and LODs) by app id and chunk coordinates. Returns null if the chunk does not exist. Use the input's LOD options to limit which LODs come back. Requires a valid bearer token in the Authorization header; a token scoped to an app may only read that app's chunks. Read-only (no world state is changed). */
2593
3703
  getChunk: Maybe<Chunk>;
3704
+ /** Fetches only the requested level-of-detail (LOD) meshes for one chunk, identified by app id and coordinates. Returns null if the chunk does not exist. Cheaper than getChunk when you only need LODs. Requires a valid bearer token; app-scoped tokens are limited to their own app. Read-only. */
2594
3705
  getChunkLods: Maybe<ChunkLodsResponse>;
3706
+ /** Returns all chunks for an app within a cubic (Chebyshev-distance) radius of a center chunk, paginated. The cube spans center +/- maxDistance chunks on each axis. Use this for bulk region loads; use getChunk for a single chunk. Requires a valid bearer token; app-scoped tokens are limited to their own app. Read-only. */
2595
3707
  getChunksByDistance: ChunksByDistanceResponse;
3708
+ /** Returns all recorded voxel edits (the voxel_updates log) for a single chunk, newest first, as a ChunkVoxelResponse. Use getChunk instead when you want the packed voxel grid rather than the individual edit log. Requires a valid bearer token; app-scoped tokens are limited to their own app. Read-only. */
2596
3709
  getVoxelList: ChunkVoxelResponse;
2597
- /** Returns all registered GraphQL servers */
3710
+ /** List every registered GraphQL API server (both management-api and game-api kinds), regardless of health/state. No authentication required. For service discovery; to route clients, prefer activeGraphQLServers (filters to healthy servers). */
2598
3711
  graphqlServers: Array<GraphQlServer>;
3712
+ /** List the group/role -> permission-key grants configured on a grid for one group (rows of the `grid_group_grants` input table). These are inputs to the effective ACL, not the materialized result — use `gridUserPermissions` for a specific user's effective keys. Requires app-admin ('manage_apps'). */
2599
3713
  gridGroupGrants: Array<GridGroupGrant>;
3714
+ /** Read the permission-key whitelist configured for a grid. An empty list means there is no limit (every active runtime permission may be granted on the grid). Requires app-admin ('manage_apps'). */
2600
3715
  gridPermissionLimits: GridPermissionLimits;
3716
+ /** Read one user's effective (materialized) runtime permission keys on a grid — the flattened union of direct and group-derived grants that Buddy enforces, with expired grants excluded. Use this to see what a user can actually do. To inspect the underlying inputs instead, use `gridGroupGrants` (group grants) and `gridPermissionLimits` (the whitelist). Requires app-admin ('manage_apps'). */
2601
3717
  gridUserPermissions: GridUserPermissions;
3718
+ /** Lists recorded voxel edits for all chunks within a cubic (Chebyshev) radius of a center chunk, grouped per chunk and ordered by increasing distance, paginated over chunks. Requires a valid bearer token; app-scoped tokens are limited to their own app. Read-only. */
2602
3719
  listVoxelUpdatesByDistance: VoxelUpdatesByDistanceResponse;
3720
+ /** Lists recorded voxel edits for a single chunk (optionally only those at/after `since`), newest first. Requires a valid bearer token; app-scoped tokens are limited to their own app. Read-only. */
2603
3721
  listVoxels: Array<Voxel>;
3722
+ /** Returns the authenticated user for the bearer game token on this request, or null if the token is missing/invalid. Use this to validate a token and fetch the current player. The token is issued by the Management API login and sent as `Authorization: Bearer <token>` (and, for the udpNotifications WebSocket, in the graphql-transport-ws connection_init payload as `Authorization`). game-api does not issue tokens. */
2604
3723
  me: Maybe<User>;
3724
+ /** Lists the roles assigned to a single org member. Requires a valid session token. */
2605
3725
  memberRoles: Array<OrgRole>;
3726
+ /** The authenticated caller's own access record for a given app, or null if they have none. Requires authentication. Use this to check whether the current user is entitled to the app and on which tier; inspect status to distinguish active vs revoked. */
2606
3727
  myAppAccess: Maybe<AppUserAccess>;
2607
- /** Apps the caller can see: org member OR active app_user_access. */
3728
+ /** Apps the authenticated caller can see in their account: those owned by an org they are an active member of, OR those where they hold an active app_user_access grant. Requires authentication. Includes apps of any visibility/status (e.g. drafts the caller can access). Ordered newest-first. */
2608
3729
  myApps: Array<App>;
3730
+ /** Lists all avatars owned by the authenticated user, including full `publicState` and `privateState` (the caller is always the owner here). Requires a valid bearer game token; takes no arguments. State blobs are base64-encoded binary. Use `userAvatars` to view another user’s avatars (private state is stripped for non-owners). */
2609
3731
  myAvatars: Array<AvatarDto>;
2610
- /** The caller's channels in an app, with their roles and effective channel permissions. */
3732
+ /** The caller's channels in an app, with their roles and effective channel permissions (e.g. whether they hold send_messages). Use this to discover which channels the current user can read/post in. */
2611
3733
  myChannels: Array<GroupMembership>;
3734
+ /** Lists the authenticated caller's own checkouts (newest first), across every org and app. Use this for a self-service payment history; use `checkouts` for the cross-tenant super-admin view. Requires an authenticated user. */
2612
3735
  myCheckouts: CheckoutsPage;
3736
+ /** Lists the authenticated caller's own checkouts (newest first), across every org and app. Use this for a self-service payment history; use `checkoutsConnection` for the cross-tenant super-admin view. Requires an authenticated user. Relay cursor connection; prefer this over the offset-based myCheckouts. */
3737
+ myCheckoutsConnection: CheckoutsConnection;
3738
+ /**
3739
+ * Lifetime donation totals for the authenticated user, summed across every app. Requires a valid game token. NOTE: donations are management-owned, so in cks-game-api this throws ForbiddenException — call cks-management-api instead.
3740
+ * @deprecated Legacy donation/property-token data; these products are no longer purchasable. Retained for historical records.
3741
+ */
2613
3742
  myDonationData: UserDonationData;
3743
+ /** Lists the authenticated caller's organization memberships. Each entry bundles the org, the caller's effective permission keys, and assigned roles. Requires a valid session token. */
2614
3744
  myOrganizations: Array<OrgMembership>;
3745
+ /**
3746
+ * The authenticated user’s property-token balances (available, in use, total). Requires a valid game token. NOTE: property tokens are management-owned, so in cks-game-api this throws ForbiddenException — call cks-management-api instead.
3747
+ * @deprecated Legacy donation/property-token data; these products are no longer purchasable. Retained for historical records.
3748
+ */
2615
3749
  myPropertyTokens: UserPropertyTokenData;
2616
- /** The caller's teams in an app, with their roles and effective team permissions. */
3750
+ /** The caller's teams in an app, with their roles and effective team permissions. Use this to discover which teams the current user belongs to and what they may do in each. */
2617
3751
  myTeams: Array<GroupMembership>;
3752
+ /** List every grid overlapping a chunk-coordinate bounding box, each with the given user's effective permission keys on it. Useful for previewing what a user can do across a region (e.g. around their current position). Requires app-admin ('manage_apps'). */
2618
3753
  nearbyGridPermissions: Array<NearbyGridPermissions>;
3754
+ /** Operator only (is_operator). Lists users with is_operator or is_super_admin set, ordered by user id. Read-only. */
2619
3755
  operatorUsers: Array<CpOperatorUser>;
3756
+ /** An org's off-session auto-billing configuration (enabled flag, recharge amount, low-water threshold, per-period cap, and last error). Requires the 'view_billing' org permission. */
2620
3757
  orgAutoBilling: OrgAutoBilling;
3758
+ /** Full detail for one environment: the environment row plus components, change orders, audit log, secrets, outputs, billing resources, live deploy/destroy progress, and Buddy UDP health. Returns null when no environment with that slug exists for the org. Requires the 'view_environments' org permission. */
2621
3759
  orgEnvironment: Maybe<CksEnvironmentDetail>;
3760
+ /** Lists every environment owned by an organization, in any lifecycle state (including destroyed). Summary rows only — use orgEnvironment(slug) for full detail. Requires the 'view_environments' org permission. */
2622
3761
  orgEnvironments: Array<CksEnvironment>;
3762
+ /** An org's free shared-app slot quota and how much of it is used. Use before publishAppToShared to know whether the free path applies or a paid planId is needed. Caller must be a member of the org. */
2623
3763
  orgFreeAppQuota: FreeAppQuota;
3764
+ /** Lists the members of an organization. Requires the 'manage_members' permission on the org (super admins bypass). */
2624
3765
  orgMembers: Array<OrgMember>;
3766
+ /** Lists the org's saved (vaulted) off-session payment methods. Returns metadata only (brand/last4/status), never card numbers. Requires the 'view_billing' org permission. */
2625
3767
  orgPaymentMethods: Array<SavedPaymentMethod>;
2626
3768
  /** The full seed list of permission keys. Used by the UI to render role editors. */
2627
3769
  orgPermissions: Array<OrgPermission>;
3770
+ /** Lists all roles defined in an organization. Requires the 'manage_members' permission on the org (super admins bypass). */
2628
3771
  orgRoles: Array<OrgRole>;
3772
+ /** Lists an organization's API tokens (metadata only; secret values are never returned here). Requires the 'manage_tokens' permission on the org (super admins bypass). */
2629
3773
  orgTokens: Array<OrgToken>;
2630
- /** Aggregate usage totals per environment in an organization. */
3774
+ /** Aggregate replication/GraphQL byte totals per environment across the org for the time window. Read-only reporting. Requires the 'view_usage' org permission. */
2631
3775
  orgUsageByEnvironment: Array<EnvironmentUsageRollupRow>;
3776
+ /** Fetches an organization by id (BigInt as string). Requires a valid session token. Returns null if no such organization exists. */
2632
3777
  organization: Maybe<Organization>;
3778
+ /** Fetches an organization by its unique URL slug. Requires a valid session token. Returns null if not found. Use this when you only have the slug; otherwise prefer organization(id). */
2633
3779
  organizationBySlug: Maybe<Organization>;
2634
- /** Super admin only. Inbound payment webhook audit log. */
3780
+ /** Audit log of inbound payment-provider webhook events (used for idempotent reconciliation of checkouts), newest first. Restricted to super admins; requests from non-super-admins are rejected. */
2635
3781
  paymentEvents: PaymentEventsPage;
3782
+ /** Audit log of inbound payment-provider webhook events (used for idempotent reconciliation of checkouts), newest first. Restricted to super admins; requests from non-super-admins are rejected. Relay cursor connection; prefer this over the offset-based paymentEvents. */
3783
+ paymentEventsConnection: PaymentEventsConnection;
2636
3784
  /** Public platform discovery. Returns the shared game-api URL clients use for shared-environment apps. No auth required. */
2637
3785
  platformConfig: PlatformConfig;
3786
+ /** Lists the app-scoped quota rules explicitly configured for an app (excludes org-, tier-, and free-tier-default quotas). Use `effectiveQuota` to resolve the limit actually applied for a given metric. Requires the 'view_usage' app permission. */
2638
3787
  quotasForApp: Array<ServiceQuota>;
3788
+ /** Lists the org-scoped quota rules explicitly configured for an organization (excludes app-, tier-, and free-tier-default quotas). Use `effectiveQuota` to resolve the limit actually applied for a given metric. Requires the 'view_usage' org permission. */
2639
3789
  quotasForOrg: Array<ServiceQuota>;
2640
- /** Runtime permission keys that can be granted through app tiers or grid permissions. */
3790
+ /** Lists all valid runtime permission keys (e.g. "access", "teleport", "update_voxel_data", "use_voice_chat") that may be assigned to an access tier permissionKeys. PUBLIC: no authentication required. Ordered by the permission bit index. */
2641
3791
  runtimePermissions: Array<Scalars['String']['output']>;
2642
- /** Returns a random server from the lowest 20% of servers by client count to distribute load evenly */
3792
+ /** Pick a low-load game server for a native (direct-UDP) client to connect to: returns a random server from the least-loaded ~20% (by client count) of ReadyForClients servers to spread load. Requires a bearer game token; as a side effect it authorizes that token’s P2P session with the chosen Buddy so the native client’s spatial datagrams are accepted. Connect the native client to the returned ip4 and clientPort. Browser clients should instead use the UDP proxy (connectUdpProxy / udpNotifications) and do not need this. */
2643
3793
  serverWithLeastClients: ServerStatus;
2644
3794
  /** Public catalog of paid shared-environment app-slot subscription plans. */
2645
3795
  sharedEnvPlans: Array<SharedEnvPlan>;
2646
- /** Fetch one team by id. */
3796
+ /** Fetch one team by id. Errors if the id is not a team. */
2647
3797
  team: Group;
2648
- /** List the members of a team. */
3798
+ /** List the members of a team (including pending requests, each with their status and roles). */
2649
3799
  teamMembers: Array<GroupMember>;
2650
- /** The current team creation/membership policy for an app. */
3800
+ /** The current team creation/membership policy for an app (who may create teams and the default membership policy of new teams). Falls back to app defaults when unset. */
2651
3801
  teamPolicy: AppGroupPolicy;
2652
- /** List the roles of a team. */
3802
+ /** List the roles of a team, including the system 'leader' role and the group-management permission keys each role grants. */
2653
3803
  teamRoles: Array<GroupRole>;
2654
- /** List active teams in an app. */
3804
+ /** List all active teams in an app (not just the caller's). */
2655
3805
  teams: Array<Group>;
2656
3806
  /** UDP proxy session status for the game token on this request. Without a game token, returns connected: false. Does not open a session—use udpNotifications or connectUdpProxy. */
2657
3807
  udpProxyConnectionStatus: UdpProxyConnectionStatus;
3808
+ /** Looks up a single user by id. Requires a valid game token. NOTE: the users table is management-owned, so in cks-game-api this throws ForbiddenException directing you to call cks-management-api directly; use that API to read arbitrary users. Use `me` to read the caller’s own profile. */
2658
3809
  user: Maybe<User>;
3810
+ /** Reads the authenticated user’s per-app state for `appId` (keyed by appId+userId). Requires a valid game token; only the caller’s own state is returned. Returns null when no row exists. `state` is base64-encoded binary. */
2659
3811
  userAppState: Maybe<UserAppState>;
3812
+ /** Lists all per-app state rows for the authenticated user, ordered newest-updated first. Requires a valid game token; only the caller’s own states are returned. `state` blobs are base64-encoded binary. */
2660
3813
  userAppStates: Array<UserAppState>;
2661
- /** Avatars owned by a user. Non-owners receive public state only (private_state is stripped). */
3814
+ /** Lists the avatars owned by `userId`. Requires a valid game token. Owner-aware: when the caller is NOT the owner, each avatar’s `privateState` is stripped (returned null); `publicState` is always included. State blobs are base64-encoded binary. */
2662
3815
  userAvatars: Array<Avatar>;
2663
- /** Super admin only. Paginated user search; replaces the old `users`/`usersByGamertag`/`usersByEmail` triple. `query` is matched ILIKE-prefix against email, gamertag, disambiguation, and exact user_id. */
3816
+ /** Super admin only. Paginated user search across email, gamertag, disambiguation, and exact user_id. Relay cursor connection; prefer this over the offset-based usersPaginated. */
3817
+ usersConnection: UsersConnection;
3818
+ /** SUPER-ADMIN ONLY paginated user search; replaces the legacy `users`/`usersByGamertag`/`usersByEmail` queries. `query` is ILIKE-prefix matched against email, gamertag, and disambiguation, plus an exact user_id match. Requires a super-admin bearer game token. NOTE: in cks-game-api super-admin checks always fail and the users table is management-owned, so this is effectively served only by cks-management-api. */
2664
3819
  usersPaginated: UsersPage;
2665
- /** Returns version information for the server and minimum client version requirements */
3820
+ /** Current server version and the minimum client version the server accepts. No authentication required. Compare your client build against minimumClientVersion before connecting and prompt an update if it is too old. */
2666
3821
  versionInfo: ServerVersionInfo;
3822
+ /** Returns entries from the immutable voxel edit history (voxel_updates_history) for an app, newest first, optionally filtered by user id and a changed-at time window. Returns up to `limit` entries (DEFAULT 500, max 50000) starting at `offset`. Requires a valid bearer token; app-scoped tokens are limited to their own app. Read-only. */
2667
3823
  voxelUpdateHistory: Array<VoxelUpdateHistoryEvent>;
3824
+ /** Relay-style cursor-paginated version of `voxelUpdateHistory`: returns entries from the immutable voxel edit history (voxel_updates_history) for an app, newest first, optionally filtered by user id and a changed-at time window. Page forward with `first` (default 50, max 200) and `after` (an opaque cursor from a previous page’s `pageInfo.endCursor`); the legacy `limit`/`offset` args are ignored on this query. Requires a valid bearer token; app-scoped tokens are limited to their own app. Read-only. */
3825
+ voxelUpdateHistoryConnection: VoxelUpdateHistoryConnection;
3826
+ /** Returns the organization's wallet, creating an empty zero-balance wallet on first access if one does not yet exist (so it never returns null). Use it to read the current balance and currency before charging usage or topping up. Requires the 'view_billing' org permission. */
2668
3827
  walletBalance: OrgWallet;
3828
+ /** Lists the organization's wallet transactions (credits and debits), ordered newest first. Use it to audit how the balance changed over time. Requires the 'view_billing' org permission. */
2669
3829
  walletTransactions: Array<WalletTransaction>;
3830
+ /** Lists the organization's wallet transactions (credits and debits), ordered newest first. Use it to audit how the balance changed over time. Requires the 'view_billing' org permission. Relay cursor connection; prefer this over the offset-based walletTransactions. */
3831
+ walletTransactionsConnection: WalletTransactionsConnection;
2670
3832
  };
2671
3833
  export type QueryActorArgs = {
2672
3834
  uuid: Scalars['String']['input'];
@@ -2674,6 +3836,11 @@ export type QueryActorArgs = {
2674
3836
  export type QueryActorsArgs = {
2675
3837
  filter?: InputMaybe<ActorFilterInput>;
2676
3838
  };
3839
+ export type QueryActorsConnectionArgs = {
3840
+ after?: InputMaybe<Scalars['String']['input']>;
3841
+ filter?: InputMaybe<ActorFilterInput>;
3842
+ first?: InputMaybe<Scalars['Int']['input']>;
3843
+ };
2677
3844
  export type QueryAppArgs = {
2678
3845
  appId: Scalars['BigInt']['input'];
2679
3846
  };
@@ -2691,6 +3858,9 @@ export type QueryAppBySlugArgs = {
2691
3858
  appSlug: Scalars['String']['input'];
2692
3859
  orgSlug: Scalars['String']['input'];
2693
3860
  };
3861
+ export type QueryAppGrantMemberCandidatesArgs = {
3862
+ appId: Scalars['BigInt']['input'];
3863
+ };
2694
3864
  export type QueryAppGraphqlOperationsArgs = {
2695
3865
  appId: Scalars['BigInt']['input'];
2696
3866
  limit?: InputMaybe<Scalars['Int']['input']>;
@@ -2715,11 +3885,22 @@ export type QueryAppUserAccessByAppArgs = {
2715
3885
  offset?: InputMaybe<Scalars['Int']['input']>;
2716
3886
  status?: InputMaybe<Scalars['String']['input']>;
2717
3887
  };
3888
+ export type QueryAppUserAccessConnectionArgs = {
3889
+ after?: InputMaybe<Scalars['String']['input']>;
3890
+ appId: Scalars['BigInt']['input'];
3891
+ first?: InputMaybe<Scalars['Int']['input']>;
3892
+ status?: InputMaybe<Scalars['String']['input']>;
3893
+ };
2718
3894
  export type QueryAppsArgs = {
2719
3895
  filter?: InputMaybe<AppMarketplaceFilterInput>;
2720
3896
  limit?: InputMaybe<Scalars['Int']['input']>;
2721
3897
  offset?: InputMaybe<Scalars['Int']['input']>;
2722
3898
  };
3899
+ export type QueryAppsConnectionArgs = {
3900
+ after?: InputMaybe<Scalars['String']['input']>;
3901
+ filter?: InputMaybe<AppMarketplaceFilterInput>;
3902
+ first?: InputMaybe<Scalars['Int']['input']>;
3903
+ };
2723
3904
  export type QueryAppsForOrgArgs = {
2724
3905
  orgSlug: Scalars['String']['input'];
2725
3906
  };
@@ -2757,6 +3938,11 @@ export type QueryCheckoutsArgs = {
2757
3938
  limit?: InputMaybe<Scalars['Int']['input']>;
2758
3939
  offset?: InputMaybe<Scalars['Int']['input']>;
2759
3940
  };
3941
+ export type QueryCheckoutsConnectionArgs = {
3942
+ after?: InputMaybe<Scalars['String']['input']>;
3943
+ filter?: InputMaybe<CheckoutFilterInput>;
3944
+ first?: InputMaybe<Scalars['Int']['input']>;
3945
+ };
2760
3946
  export type QueryCpAuditArgs = {
2761
3947
  environmentId?: InputMaybe<Scalars['String']['input']>;
2762
3948
  limit?: Scalars['Int']['input'];
@@ -2846,6 +4032,15 @@ export type QueryGameModelEventsArgs = {
2846
4032
  sessionId?: InputMaybe<Scalars['String']['input']>;
2847
4033
  success?: InputMaybe<Scalars['Boolean']['input']>;
2848
4034
  };
4035
+ export type QueryGameModelEventsConnectionArgs = {
4036
+ after?: InputMaybe<Scalars['String']['input']>;
4037
+ appId: Scalars['BigInt']['input'];
4038
+ first?: InputMaybe<Scalars['Int']['input']>;
4039
+ functionName?: InputMaybe<Scalars['String']['input']>;
4040
+ selfContainerId?: InputMaybe<Scalars['String']['input']>;
4041
+ sessionId?: InputMaybe<Scalars['String']['input']>;
4042
+ success?: InputMaybe<Scalars['Boolean']['input']>;
4043
+ };
2849
4044
  export type QueryGameModelFeaturesArgs = {
2850
4045
  appId: Scalars['BigInt']['input'];
2851
4046
  };
@@ -2931,6 +4126,10 @@ export type QueryMyCheckoutsArgs = {
2931
4126
  limit?: InputMaybe<Scalars['Int']['input']>;
2932
4127
  offset?: InputMaybe<Scalars['Int']['input']>;
2933
4128
  };
4129
+ export type QueryMyCheckoutsConnectionArgs = {
4130
+ after?: InputMaybe<Scalars['String']['input']>;
4131
+ first?: InputMaybe<Scalars['Int']['input']>;
4132
+ };
2934
4133
  export type QueryMyTeamsArgs = {
2935
4134
  appId: Scalars['BigInt']['input'];
2936
4135
  };
@@ -2976,6 +4175,10 @@ export type QueryPaymentEventsArgs = {
2976
4175
  limit?: InputMaybe<Scalars['Int']['input']>;
2977
4176
  offset?: InputMaybe<Scalars['Int']['input']>;
2978
4177
  };
4178
+ export type QueryPaymentEventsConnectionArgs = {
4179
+ after?: InputMaybe<Scalars['String']['input']>;
4180
+ first?: InputMaybe<Scalars['Int']['input']>;
4181
+ };
2979
4182
  export type QueryQuotasForAppArgs = {
2980
4183
  appId: Scalars['BigInt']['input'];
2981
4184
  };
@@ -3006,6 +4209,11 @@ export type QueryUserAppStateArgs = {
3006
4209
  export type QueryUserAvatarsArgs = {
3007
4210
  userId: Scalars['BigInt']['input'];
3008
4211
  };
4212
+ export type QueryUsersConnectionArgs = {
4213
+ after?: InputMaybe<Scalars['String']['input']>;
4214
+ first?: InputMaybe<Scalars['Int']['input']>;
4215
+ query?: InputMaybe<Scalars['String']['input']>;
4216
+ };
3009
4217
  export type QueryUsersPaginatedArgs = {
3010
4218
  limit?: InputMaybe<Scalars['Int']['input']>;
3011
4219
  offset?: InputMaybe<Scalars['Int']['input']>;
@@ -3019,6 +4227,16 @@ export type QueryVoxelUpdateHistoryArgs = {
3019
4227
  to?: InputMaybe<Scalars['DateTime']['input']>;
3020
4228
  userId?: InputMaybe<Scalars['BigInt']['input']>;
3021
4229
  };
4230
+ export type QueryVoxelUpdateHistoryConnectionArgs = {
4231
+ after?: InputMaybe<Scalars['String']['input']>;
4232
+ appId: Scalars['BigInt']['input'];
4233
+ first?: InputMaybe<Scalars['Int']['input']>;
4234
+ from?: InputMaybe<Scalars['DateTime']['input']>;
4235
+ limit?: InputMaybe<Scalars['Int']['input']>;
4236
+ offset?: InputMaybe<Scalars['Int']['input']>;
4237
+ to?: InputMaybe<Scalars['DateTime']['input']>;
4238
+ userId?: InputMaybe<Scalars['BigInt']['input']>;
4239
+ };
3022
4240
  export type QueryWalletBalanceArgs = {
3023
4241
  orgId: Scalars['BigInt']['input'];
3024
4242
  };
@@ -3027,143 +4245,248 @@ export type QueryWalletTransactionsArgs = {
3027
4245
  offset?: InputMaybe<Scalars['Int']['input']>;
3028
4246
  orgId: Scalars['BigInt']['input'];
3029
4247
  };
3030
- /** SDK-facing realtime lifecycle event emitted on udpNotifications when the subscription cannot open a UDP proxy session. */
4248
+ export type QueryWalletTransactionsConnectionArgs = {
4249
+ after?: InputMaybe<Scalars['String']['input']>;
4250
+ first?: InputMaybe<Scalars['Int']['input']>;
4251
+ orgId: Scalars['BigInt']['input'];
4252
+ };
4253
+ /** Realtime lifecycle/error event delivered on the udpNotifications subscription when a session cannot be opened or correctly scoped. It is a control frame — it carries no appId, so it is never dropped by the per-app fan-out filter — and it is terminal: the subscription completes immediately after emitting it, so the client must fix the cause and resubscribe. Branch on `code`; use `retryable` to decide whether retrying can succeed. A healthy subscription never emits this type; it yields game-server notifications/responses instead. */
3031
4254
  export type RealtimeConnectionEvent = {
3032
4255
  __typename?: 'RealtimeConnectionEvent';
4256
+ /** Machine-readable failure reason. Branch on this (not on `message`). Known values: AUTH_REQUIRED — no valid bearer game token was presented on the WS connection_init / request; authenticate via the Management API and resubscribe (not retryable as-is). APP_ID_REQUIRED — the subscription was opened without an appId scope; udpNotifications must be app-scoped (game tokens are app-agnostic and one socket is shared across apps), so pass the app you are playing and resubscribe (not retryable as-is). UDP_PROXY_CONNECTION_FAILED — the proxy could not open or keep a UDP socket to the selected game server (transient/infrastructure); back off and resubscribe (retryable). `message` carries the specific underlying detail for this case. */
3033
4257
  code: Scalars['String']['output'];
4258
+ /** Human-readable explanation of the failure, suitable for logs and developer-facing surfaces. Do not parse or branch on this text — branch on `code` instead. */
3034
4259
  message: Scalars['String']['output'];
4260
+ /** Whether resubscribing without changing anything may succeed. true for transient failures (e.g. UDP_PROXY_CONNECTION_FAILED) — back off and retry. false for caller errors that must be fixed first (AUTH_REQUIRED needs a fresh/valid game token; APP_ID_REQUIRED needs an appId-scoped subscription). */
3035
4261
  retryable: Scalars['Boolean']['output'];
4262
+ /** Lifecycle status of the session attempt. Currently always "failed" — this event is only emitted when udpNotifications could not establish (or had to tear down) the underlying UDP proxy session. */
3036
4263
  status: Scalars['String']['output'];
3037
4264
  };
3038
- /** full = replace VMs. services = update in place on existing runtime servers. Omit for automatic routing. */
4265
+ /** How redeployEnvironment rolls out a new version. Omit for automatic routing (services-only when active runtime VMs exist, otherwise full). */
3039
4266
  export declare enum RedeployDeployMode {
4267
+ /** Replace the runtime VMs (reprovision game-api / Buddy instances). Slower; use when the box image or infra must change. */
3040
4268
  Full = "FULL",
4269
+ /** Update services in place on the existing runtime VMs (no VM replacement). Faster; only valid when active runtime VMs exist. */
3041
4270
  Services = "SERVICES"
3042
4271
  }
3043
4272
  export type RedeployEnvironmentInput = {
4273
+ /** How to roll out the version. When omitted, routes to services-only when active runtime VMs exist, otherwise full. */
3044
4274
  deployMode?: InputMaybe<RedeployDeployMode>;
3045
4275
  orgId: Scalars['BigInt']['input'];
3046
4276
  slug: Scalars['String']['input'];
4277
+ /** Target environment version. When omitted, redeploys to the latest available version for the class. Must be available, deployable by this class, and not older than the current version (forward-only — no rollback). */
3047
4278
  version?: InputMaybe<Scalars['String']['input']>;
3048
4279
  };
3049
4280
  export type RegisterUserInput = {
4281
+ /** Email for the new account; the confirmation email is sent here. */
3050
4282
  email: Scalars['String']['input'];
4283
+ /** Optional initial public gamertag (min 3 characters). Can be set later via updateGamertag. */
3051
4284
  gamertag?: InputMaybe<Scalars['String']['input']>;
4285
+ /** Password for the new account (min 8 characters). */
3052
4286
  password: Scalars['String']['input'];
3053
4287
  };
3054
4288
  export type ResetPasswordInput = {
4289
+ /** New password to set (min 8 characters). */
3055
4290
  newPassword: Scalars['String']['input'];
4291
+ /** Password-reset token from the emailed reset link. */
3056
4292
  token: Scalars['String']['input'];
3057
4293
  };
3058
4294
  export type RestartEnvironmentServicesInput = {
4295
+ /** Organization id (BigInt) that owns the environment. */
3059
4296
  orgId: Scalars['BigInt']['input'];
4297
+ /** Slug of the environment whose Buddy service should be SSH-restarted. */
3060
4298
  slug: Scalars['String']['input'];
3061
4299
  };
3062
4300
  export type ResumeEnvironmentInput = {
4301
+ /** Organization id (BigInt) that owns the environment. */
3063
4302
  orgId: Scalars['BigInt']['input'];
4303
+ /** Slug of the suspended/grace environment to resume (billingStatus must be grace, suspension_queued, suspended, or resume_failed). */
3064
4304
  slug: Scalars['String']['input'];
3065
4305
  };
4306
+ /** Revoke a user's direct grants on a grid (deletes from the grid_user_direct_grants input table). */
3066
4307
  export type RevokeGridPermissionsInput = {
4308
+ /** The app (tenant) that owns the grid. */
3067
4309
  appId: Scalars['BigInt']['input'];
4310
+ /** The grid to revoke on. */
3068
4311
  gridId: Scalars['BigInt']['input'];
4312
+ /** Optional idempotency key. Recommended for retries: replaying with the same key and identical input returns the first result instead of re-applying; the same key with different input returns IDEMPOTENCY_CONFLICT. Keys expire after 24h. */
4313
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
4314
+ /** Optional subset of permission key strings to revoke. Omit to revoke ALL of the user's direct grants on this grid. Each key must be a known runtime permission key, unique, and at most 64 chars. */
3069
4315
  permissionKeys?: InputMaybe<Array<Scalars['String']['input']>>;
4316
+ /** The user whose direct grants to revoke. */
3070
4317
  userId: Scalars['BigInt']['input'];
3071
4318
  };
4319
+ /** Revoke a group's (optionally one role's) grants on a grid (deletes from the grid_group_grants input table). */
3072
4320
  export type RevokeGroupFromGridInput = {
4321
+ /** The app (tenant) that owns the grid. */
3073
4322
  appId: Scalars['BigInt']['input'];
4323
+ /** The grid to revoke on. */
3074
4324
  gridId: Scalars['BigInt']['input'];
4325
+ /** The group whose grants to revoke. */
3075
4326
  groupId: Scalars['BigInt']['input'];
4327
+ /** Optional role to target. Must match the role the grant was created with (omit to target the group-wide grant, i.e. the grant with no role). */
3076
4328
  groupRoleId?: InputMaybe<Scalars['BigInt']['input']>;
3077
4329
  /** Optional subset of keys to revoke. Omit to revoke all of the group/role grants on this grid. */
3078
4330
  permissionKeys?: InputMaybe<Array<Scalars['String']['input']>>;
3079
4331
  };
4332
+ /** Per-voxel outcome of a rollbackVoxelUpdates call. In dry-run mode this describes what WOULD happen; otherwise it reports what was applied. One result is returned per affected voxel. */
3080
4333
  export type RollbackVoxelEventResult = {
3081
4334
  __typename?: 'RollbackVoxelEventResult';
4335
+ /** Id of the app this result belongs to (decimal string). */
3082
4336
  appId: Scalars['BigInt']['output'];
4337
+ /** True if the change was actually written; false in dry-run mode or when the voxel was skipped. */
3083
4338
  applied: Scalars['Boolean']['output'];
4339
+ /** Address of the chunk that contains the affected voxel. */
3084
4340
  coordinates: ChunkCoordinates;
4341
+ /** Voxel type immediately before the rollback (the current value), or null. */
3085
4342
  fromVoxelType: Maybe<Scalars['Int']['output']>;
4343
+ /** Local position of the affected voxel within its chunk. */
3086
4344
  location: VoxelCoordinates;
4345
+ /** The action computed for this voxel by the rollback (the revert operation to perform). */
3087
4346
  plannedAction: Scalars['String']['output'];
4347
+ /** Human-readable explanation when a voxel is skipped or an action is taken, or null. */
3088
4348
  reason: Maybe<Scalars['String']['output']>;
4349
+ /** Voxel type the voxel would be / was reverted to, or null. */
3089
4350
  toVoxelType: Maybe<Scalars['Int']['output']>;
3090
4351
  };
4352
+ /** Payload for rollbackVoxelUpdates: selects the voxel edits made by one user in one app within a time window to revert. */
3091
4353
  export type RollbackVoxelUpdatesInput = {
4354
+ /** Id of the app whose voxels to roll back (decimal string). */
3092
4355
  appId: Scalars['BigInt']['input'];
4356
+ /** When true (the DEFAULT), only computes and returns the planned reversions WITHOUT writing anything; set false to actually apply the rollback (DESTRUCTIVE — mutates world state). */
3093
4357
  dryRun?: Scalars['Boolean']['input'];
4358
+ /** Inclusive start of the time window of edits to revert. */
3094
4359
  from: Scalars['DateTime']['input'];
4360
+ /** Optional idempotency key. Recommended for retries: replaying with the same key and identical input returns the first result instead of re-applying; the same key with different input returns IDEMPOTENCY_CONFLICT. Keys expire after 24h. */
4361
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
4362
+ /** Inclusive end of the time window of edits to revert. */
3095
4363
  to: Scalars['DateTime']['input'];
4364
+ /** Id of the user (decimal string) whose edits within the window will be reverted. */
3096
4365
  userId: Scalars['BigInt']['input'];
3097
4366
  };
3098
4367
  /** A saved (vaulted) off-session payment method. */
3099
4368
  export type SavedPaymentMethod = {
3100
4369
  __typename?: 'SavedPaymentMethod';
4370
+ /** Card brand, e.g. 'visa'. Null for non-card methods. */
3101
4371
  brand: Maybe<Scalars['String']['output']>;
4372
+ /** True when this is the org default method charged off-session. */
3102
4373
  isDefault: Scalars['Boolean']['output'];
4374
+ /** Last 4 digits of the card, if applicable. */
3103
4375
  last4: Maybe<Scalars['String']['output']>;
4376
+ /** Payment method id (BigInt). */
3104
4377
  paymentMethodId: Scalars['BigInt']['output'];
4378
+ /** Payment provider, e.g. 'stripe'. */
3105
4379
  provider: Scalars['String']['output'];
4380
+ /** Method status, e.g. 'active' or 'expired'. */
3106
4381
  status: Scalars['String']['output'];
3107
4382
  };
4383
+ /** A container (instance) to create as part of a seed. */
3108
4384
  export type SeedContainerInput = {
4385
+ /** Optional description. */
3109
4386
  description?: InputMaybe<Scalars['String']['input']>;
4387
+ /** Human-friendly display name. */
3110
4388
  displayName: Scalars['String']['input'];
4389
+ /** JSON object of metadata. */
3111
4390
  metadataJson?: InputMaybe<Scalars['String']['input']>;
4391
+ /** Optional owning user id. */
3112
4392
  ownerUserId?: InputMaybe<Scalars['BigInt']['input']>;
4393
+ /** Initial property values for the container. */
3113
4394
  properties?: InputMaybe<Array<SeedPropertyInput>>;
3114
4395
  /** Developer-assigned id used only for edge references in this seed. */
3115
4396
  tempId: Scalars['String']['input'];
4397
+ /** The container type to instantiate. */
3116
4398
  typeName: Scalars['String']['input'];
3117
4399
  };
4400
+ /** A container type to create as part of a seed. */
3118
4401
  export type SeedContainerTypeInput = {
4402
+ /** public | owner | hidden default for this type's properties. */
3119
4403
  defaultPropertyVisibility?: InputMaybe<Scalars['String']['input']>;
4404
+ /** Optional description of the type. */
3120
4405
  description?: InputMaybe<Scalars['String']['input']>;
4406
+ /** Human-friendly display name. */
3121
4407
  displayName: Scalars['String']['input'];
4408
+ /** admin | member | owner (who may instantiate this type). */
3122
4409
  instantiableBy?: InputMaybe<Scalars['String']['input']>;
4410
+ /** JSON object of metadata. */
3123
4411
  metadataJson?: InputMaybe<Scalars['String']['input']>;
4412
+ /** Stable type name (unique per app). */
3124
4413
  typeName: Scalars['String']['input'];
3125
4414
  };
4415
+ /** An edge to create between two seeded containers (by temp id). */
3126
4416
  export type SeedEdgeInput = {
4417
+ /** Source container temp_id (from this seed). */
3127
4418
  fromTempId: Scalars['String']['input'];
4419
+ /** JSON object of edge metadata. */
3128
4420
  metadataJson?: InputMaybe<Scalars['String']['input']>;
4421
+ /** The relationship type label. */
3129
4422
  relationshipType: Scalars['String']['input'];
4423
+ /** Target container temp_id (from this seed). */
3130
4424
  toTempId: Scalars['String']['input'];
4425
+ /** Optional edge weight. */
3131
4426
  weight?: InputMaybe<Scalars['Float']['input']>;
3132
4427
  };
4428
+ /** A function to create as part of a seed. */
3133
4429
  export type SeedFunctionInput = {
4430
+ /** Optional container type to bind to (omit for a global function). */
3134
4431
  containerTypeName?: InputMaybe<Scalars['String']['input']>;
4432
+ /** Optional description of the function. */
3135
4433
  description?: InputMaybe<Scalars['String']['input']>;
4434
+ /** JSON-encoded invoke-policy rule tree (authority requirements). */
3136
4435
  invokePolicyJson?: InputMaybe<Scalars['String']['input']>;
4436
+ /** player | server | internal */
3137
4437
  invokeScope?: InputMaybe<Scalars['String']['input']>;
4438
+ /** The property writes the function performs. */
3138
4439
  mutations?: InputMaybe<Array<FunctionMutationInput>>;
4440
+ /** Function name (unique per app). */
3139
4441
  name: Scalars['String']['input'];
4442
+ /** Typed parameters the function accepts. */
3140
4443
  parameters?: InputMaybe<Array<FunctionParamInput>>;
4444
+ /** Optional expression whose value becomes the invoke result. */
3141
4445
  returnExpression?: InputMaybe<Scalars['String']['input']>;
4446
+ /** Optional declared return value type. */
3142
4447
  returnType?: InputMaybe<Scalars['String']['input']>;
3143
4448
  };
4449
+ /** Bulk-create game-model definitions and optional instances in one transaction (model init/import). */
3144
4450
  export type SeedGameModelInput = {
4451
+ /** The app (tenant) to seed into. */
3145
4452
  appId: Scalars['BigInt']['input'];
4453
+ /** Container types to create. */
3146
4454
  containerTypes?: InputMaybe<Array<SeedContainerTypeInput>>;
4455
+ /** Containers (instances) to create. */
3147
4456
  containers?: InputMaybe<Array<SeedContainerInput>>;
4457
+ /** Edges to create between seeded containers. */
3148
4458
  edges?: InputMaybe<Array<SeedEdgeInput>>;
4459
+ /** Functions to create. */
3149
4460
  functions?: InputMaybe<Array<SeedFunctionInput>>;
4461
+ /** Property definitions to create. */
3150
4462
  propertyDefinitions?: InputMaybe<Array<SeedPropertyDefInput>>;
3151
4463
  /** Optional session to seed instances into (NULL = app-global). */
3152
4464
  sessionId?: InputMaybe<Scalars['String']['input']>;
3153
4465
  };
4466
+ /** A property definition to create as part of a seed. */
3154
4467
  export type SeedPropertyDefInput = {
4468
+ /** The container type to define the property on. */
3155
4469
  containerTypeName: Scalars['String']['input'];
4470
+ /** JSON-encoded default value. */
3156
4471
  defaultValueJson?: InputMaybe<Scalars['String']['input']>;
4472
+ /** Optional description of the property. */
3157
4473
  description?: InputMaybe<Scalars['String']['input']>;
4474
+ /** Property key (unique within the type). */
3158
4475
  key: Scalars['String']['input'];
4476
+ /** int | float | string | bool | array | object | container_ref */
3159
4477
  valueType: Scalars['String']['input'];
4478
+ /** public | owner | hidden */
3160
4479
  visibility?: InputMaybe<Scalars['String']['input']>;
4480
+ /** function | owner | admin */
3161
4481
  writable?: InputMaybe<Scalars['String']['input']>;
3162
4482
  };
4483
+ /** An initial property value for a seeded container. */
3163
4484
  export type SeedPropertyInput = {
4485
+ /** Property key. */
3164
4486
  key: Scalars['String']['input'];
3165
4487
  /** JSON-encoded value. */
3166
4488
  valueJson: Scalars['String']['input'];
4489
+ /** Value type of the value being set. */
3167
4490
  valueType: Scalars['String']['input'];
3168
4491
  };
3169
4492
  /** Notification received when the server sends a custom event. Received via the udpNotifications subscription. */
@@ -3192,35 +4515,60 @@ export type ServerEventNotification = {
3192
4515
  /** The unique identifier of the object controlling this event. */
3193
4516
  uuid: Scalars['String']['output'];
3194
4517
  };
3195
- /** The current state of the server */
4518
+ /** Lifecycle state of a game/GraphQL server in the fleet. Only ReadyForClients servers should receive new client connections; serverWithLeastClients and activeGraphQLServers already filter to healthy servers. */
3196
4519
  export declare enum ServerState {
4520
+ /** Not running or unreachable (e.g. crashed or missed heartbeats). */
3197
4521
  Offline = "Offline",
4522
+ /** Healthy and accepting client traffic. The only state safe to route to. */
3198
4523
  ReadyForClients = "ReadyForClients",
4524
+ /** Booting / not yet ready: registered but still initializing; do not route client traffic here. */
3199
4525
  Starting = "Starting",
4526
+ /** Draining / shutting down: finishing in-flight work; do not send new traffic. */
3200
4527
  Stopping = "Stopping"
3201
4528
  }
4529
+ /** Live status and load/telemetry for one UDP game server (Buddy) in the fleet. Returned by serverWithLeastClients (which picks a low-load ReadyForClients server). Throughput metrics are per-second samples from the last reporting window and are null until first reported. */
3202
4530
  export type ServerStatus = {
3203
4531
  __typename?: 'ServerStatus';
4532
+ /** UDP port that native clients send spatial datagrams to (typically 9091). Browser clients do not use this directly — they reach the server through the UDP proxy / udpNotifications. */
3204
4533
  clientPort: Scalars['Int']['output'];
4534
+ /** Bytes per second received from clients in the last reporting window. Null until reported. */
3205
4535
  clientRecvBytesPerSec: Maybe<Scalars['Float']['output']>;
4536
+ /** Messages per second received from clients in the last reporting window. Null until reported. */
3206
4537
  clientRecvMsgsPerSec: Maybe<Scalars['Float']['output']>;
4538
+ /** Bytes per second sent to clients in the last reporting window. Null until reported. */
3207
4539
  clientSendBytesPerSec: Maybe<Scalars['Float']['output']>;
4540
+ /** Per-second rate of individually-addressed (single-actor) messages sent to clients in the last window, as opposed to spatial fan-out. Null until reported. */
3208
4541
  clientSendIndividualMsgsPerSec: Maybe<Scalars['Float']['output']>;
4542
+ /** Messages per second sent to clients in the last reporting window. Null until reported. */
3209
4543
  clientSendMsgsPerSec: Maybe<Scalars['Float']['output']>;
4544
+ /** Number of game clients currently connected to this server. serverWithLeastClients uses this to balance load across the fleet. */
3210
4545
  clients: Scalars['Int']['output'];
4546
+ /** Peak CPU utilization percentage (0-100) observed in the last reporting window. Null until reported. */
3211
4547
  cpuPeakPct: Maybe<Scalars['Float']['output']>;
4548
+ /** When this server was first registered in the fleet. */
3212
4549
  createdAt: Scalars['DateTime']['output'];
4550
+ /** IPv4 address native clients send spatial UDP datagrams to (paired with clientPort). Preferred over ip6 for inter-host UDP in current deployments. */
3213
4551
  ip4: Scalars['String']['output'];
4552
+ /** IPv6 address of the UDP game server. Global IPv6 between hosts can be unroutable in some deployments, so native clients generally use ip4 + clientPort. */
3214
4553
  ip6: Scalars['String']['output'];
4554
+ /** Bytes per second received from peer servers (server-to-server P2P) in the last reporting window. Null until reported. */
3215
4555
  peerRecvBytesPerSec: Maybe<Scalars['Float']['output']>;
4556
+ /** Messages per second received from peer servers (server-to-server P2P) in the last reporting window. Null until reported. */
3216
4557
  peerRecvMsgsPerSec: Maybe<Scalars['Float']['output']>;
4558
+ /** Bytes per second sent to peer servers (server-to-server P2P) in the last reporting window. Null until reported. */
3217
4559
  peerSendBytesPerSec: Maybe<Scalars['Float']['output']>;
4560
+ /** Messages per second sent to peer servers (server-to-server P2P) in the last reporting window. Null until reported. */
3218
4561
  peerSendMsgsPerSec: Maybe<Scalars['Float']['output']>;
4562
+ /** Number of peer (server-to-server P2P) connections this server currently holds. */
3219
4563
  peers: Scalars['Int']['output'];
4564
+ /** Unique id of this game-server row in the fleet registry. */
3220
4565
  serverId: Scalars['ID']['output'];
4566
+ /** Current lifecycle state of this server (see ServerState). Only ReadyForClients servers accept new clients. */
3221
4567
  status: ServerState;
4568
+ /** When this status row was last updated (server heartbeat). Use to judge how fresh the metrics/state are. */
3222
4569
  updatedAt: Scalars['DateTime']['output'];
3223
4570
  };
4571
+ /** Server version plus the minimum client version the server will accept. A client whose build is older than minimumClientVersion should prompt the user to update before connecting. */
3224
4572
  export type ServerVersionInfo = {
3225
4573
  __typename?: 'ServerVersionInfo';
3226
4574
  /** Minimum accepted client version */
@@ -3230,84 +4578,137 @@ export type ServerVersionInfo = {
3230
4578
  };
3231
4579
  export type ServiceQuota = {
3232
4580
  __typename?: 'ServiceQuota';
4581
+ /** What happens when the limit is exceeded. Free-form string; defaults to "throttle" (typical values: "throttle" to rate-limit, "block" to reject). */
3233
4582
  actionOnExceed: Scalars['String']['output'];
4583
+ /** App this rule is scoped to (BigInt as a decimal string); null if not app-scoped. */
3234
4584
  appId: Maybe<Scalars['BigInt']['output']>;
4585
+ /** When the rule was created (ISO-8601 UTC timestamp). */
3235
4586
  createdAt: Scalars['DateTime']['output'];
4587
+ /** Maximum allowed amount of the metric per `period`, as a BigInt decimal string. */
3236
4588
  limitValue: Scalars['BigInt']['output'];
4589
+ /** The metered resource this rule limits (e.g. "api_requests", "storage_bytes"). Free-form metric key, matched exactly. */
3237
4590
  metric: Scalars['String']['output'];
4591
+ /** Organization this rule is scoped to (BigInt as a decimal string); null if not org-scoped. */
3238
4592
  orgId: Maybe<Scalars['BigInt']['output']>;
4593
+ /** Time window the limit applies over. Free-form string; defaults to "per_minute" (typical values: "per_minute", "per_hour", "per_day"). */
3239
4594
  period: Scalars['String']['output'];
4595
+ /** Unique quota rule id (BigInt as a decimal string). */
3240
4596
  quotaId: Scalars['BigInt']['output'];
4597
+ /** Access tier this rule is scoped to (BigInt as a decimal string); null if not tier-scoped. */
3241
4598
  tierId: Maybe<Scalars['BigInt']['output']>;
4599
+ /** When the rule was last updated (ISO-8601 UTC timestamp). */
3242
4600
  updatedAt: Scalars['DateTime']['output'];
3243
4601
  };
4602
+ /** Set the per-app channel creation/membership policy (app-admin only). */
3244
4603
  export type SetChannelPolicyInput = {
4604
+ /** The app (tenant) whose channel policy to set. */
3245
4605
  appId: Scalars['BigInt']['input'];
3246
4606
  /** admin | member | anyone. Who may create channels in this app. */
3247
4607
  creationPolicy?: InputMaybe<Scalars['String']['input']>;
3248
4608
  /** open | request | invite | admin. Default membership policy for new channels. */
3249
4609
  defaultMembershipPolicy?: InputMaybe<Scalars['String']['input']>;
4610
+ /** Optional cap on how many channels a single user may belong to (null = unlimited). */
3250
4611
  maxGroupsPerUser?: InputMaybe<Scalars['Int']['input']>;
4612
+ /** Optional cap on members per channel (null = unlimited). */
3251
4613
  maxMembers?: InputMaybe<Scalars['Int']['input']>;
3252
4614
  };
4615
+ /** Set one property value on a container directly. */
3253
4616
  export type SetContainerPropertyInput = {
4617
+ /** The app (tenant) that owns the container. */
3254
4618
  appId: Scalars['BigInt']['input'];
4619
+ /** The container id to write to. */
3255
4620
  containerId: Scalars['String']['input'];
4621
+ /** The property key to write. */
3256
4622
  key: Scalars['String']['input'];
3257
4623
  /** JSON-encoded value. */
3258
4624
  valueJson: Scalars['String']['input'];
4625
+ /** The value type being written (must match the property definition). */
3259
4626
  valueType: Scalars['String']['input'];
3260
4627
  };
4628
+ /** Set the app's game-model runtime policy. */
3261
4629
  export type SetGameModelPolicyInput = {
4630
+ /** The app (tenant) whose policy to set. */
3262
4631
  appId: Scalars['BigInt']['input'];
4632
+ /** Default role assigned to new session participants. */
3263
4633
  defaultParticipantRole?: InputMaybe<Scalars['String']['input']>;
3264
4634
  /** admin | member | anyone */
3265
4635
  sessionCreationPolicy?: InputMaybe<Scalars['String']['input']>;
3266
4636
  };
4637
+ /** Set the per-grid permission-key whitelist (writes the grid_permission_limits input table). */
3267
4638
  export type SetGridPermissionLimitsInput = {
4639
+ /** The app (tenant) that owns the grid. */
3268
4640
  appId: Scalars['BigInt']['input'];
4641
+ /** The grid whose whitelist to set. */
3269
4642
  gridId: Scalars['BigInt']['input'];
3270
- /** The whitelist of permission keys allowed on this grid. Empty array removes all limits (every active grid permission becomes grantable again). */
4643
+ /** The whitelist of permission keys allowed on this grid. Empty array removes all limits (every active grid permission becomes grantable again). Each key must be a known runtime permission key, unique, and at most 64 chars. */
3271
4644
  permissionKeys: Array<Scalars['String']['input']>;
3272
4645
  };
4646
+ /** Replace a member's roles in a group (the listed roles become their full set). */
3273
4647
  export type SetMemberRolesInput = {
4648
+ /** The group (team/channel) id. */
3274
4649
  groupId: Scalars['BigInt']['input'];
4650
+ /** The complete set of group role ids the member should have. Roles not listed are removed; unknown ids or ids from other groups are ignored. */
3275
4651
  roleIds: Array<Scalars['BigInt']['input']>;
4652
+ /** The member (user) whose roles to set. */
3276
4653
  userId: Scalars['BigInt']['input'];
3277
4654
  };
3278
4655
  export type SetQuotaInput = {
4656
+ /** What to do when the limit is exceeded. Optional; defaults to "throttle" (typical values: "throttle" to rate-limit, "block" to reject). */
3279
4657
  actionOnExceed?: InputMaybe<Scalars['String']['input']>;
4658
+ /** Scope the rule to this app (BigInt as a decimal string). */
3280
4659
  appId?: InputMaybe<Scalars['BigInt']['input']>;
4660
+ /** Optional idempotency key. Recommended for retries: replaying with the same key and identical input returns the first result instead of re-applying; the same key with different input returns IDEMPOTENCY_CONFLICT. Keys expire after 24h. */
4661
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
4662
+ /** Maximum allowed amount of the metric per `period`, as a BigInt decimal string. */
3281
4663
  limitValue: Scalars['BigInt']['input'];
4664
+ /** The metered resource key to limit (max 64 characters), e.g. "api_requests". */
3282
4665
  metric: Scalars['String']['input'];
4666
+ /** Scope the rule to this organization (BigInt as a decimal string). Provide one of orgId/appId/tierId to choose the scope; omit all three for a global (super-admin) rule. */
3283
4667
  orgId?: InputMaybe<Scalars['BigInt']['input']>;
4668
+ /** Time window the limit applies over. Optional; defaults to "per_minute" (typical values: "per_minute", "per_hour", "per_day"). Part of the upsert key, so different periods create separate rules. */
3284
4669
  period?: InputMaybe<Scalars['String']['input']>;
4670
+ /** Scope the rule to this access tier (BigInt as a decimal string). */
3285
4671
  tierId?: InputMaybe<Scalars['BigInt']['input']>;
3286
4672
  };
4673
+ /** Set or clear the current-turn user of a session. */
3287
4674
  export type SetSessionTurnInput = {
4675
+ /** The app (tenant) that owns the session. */
3288
4676
  appId: Scalars['BigInt']['input'];
4677
+ /** The session id to update. */
3289
4678
  sessionId: Scalars['String']['input'];
3290
4679
  /** The user whose turn it now is (NULL clears the turn). */
3291
4680
  userId?: InputMaybe<Scalars['BigInt']['input']>;
3292
4681
  };
4682
+ /** Set the per-app team creation/membership policy (app-admin only). */
3293
4683
  export type SetTeamPolicyInput = {
4684
+ /** The app (tenant) whose team policy to set. */
3294
4685
  appId: Scalars['BigInt']['input'];
3295
4686
  /** admin | member | anyone. Who may create teams in this app. */
3296
4687
  creationPolicy?: InputMaybe<Scalars['String']['input']>;
3297
4688
  /** open | request | invite | admin. Default membership policy for new teams. */
3298
4689
  defaultMembershipPolicy?: InputMaybe<Scalars['String']['input']>;
4690
+ /** Optional cap on how many teams a single user may belong to (null = unlimited). */
3299
4691
  maxGroupsPerUser?: InputMaybe<Scalars['Int']['input']>;
4692
+ /** Optional cap on members per team (null = unlimited). */
3300
4693
  maxMembers?: InputMaybe<Scalars['Int']['input']>;
3301
4694
  };
4695
+ /** A paid shared-environment app-slot subscription plan. Pass planId to publishAppToShared to subscribe. */
3302
4696
  export type SharedEnvPlan = {
3303
4697
  __typename?: 'SharedEnvPlan';
4698
+ /** Billing cadence, e.g. 'month' or 'year'. */
3304
4699
  billingInterval: Scalars['String']['output'];
4700
+ /** Stable machine-readable plan code. */
3305
4701
  code: Scalars['String']['output'];
4702
+ /** ISO-4217 currency for priceCents, e.g. 'USD'. */
3306
4703
  currency: Scalars['String']['output'];
3307
4704
  description: Maybe<Scalars['String']['output']>;
4705
+ /** Human-readable plan name. */
3308
4706
  name: Scalars['String']['output'];
4707
+ /** Plan id (BigInt). */
3309
4708
  planId: Scalars['BigInt']['output'];
4709
+ /** Recurring price per billing interval, in cents. */
3310
4710
  priceCents: Scalars['BigInt']['output'];
4711
+ /** Plan status, e.g. 'active' (offered) or 'archived'. */
3311
4712
  status: Scalars['String']['output'];
3312
4713
  };
3313
4714
  /** Input for sending an actor-to-actor message: a message delivered only to the single actor identified by targetUuid. It is spatially routed (the sender must know the destination actor’s chunk), but unlike normal spatial messages it is NOT broadcast to other nearby actors and has no distance/decay. */
@@ -3318,7 +4719,7 @@ export type SingleActorMessageInput = {
3318
4719
  chunk: ChunkCoordinatesInput;
3319
4720
  /** The message payload, base64-encoded. Opaque to the server; the sender’s identity (if needed) must be embedded here by the application. */
3320
4721
  payload: Scalars['String']['input'];
3321
- /** Client's sequence number for this message (0-255, wraps). Used to match error responses. */
4722
+ /** Client-assigned correlation id for this datagram: a uint8 (0-255) that wraps at gameClientBootstrap.sequenceNumberModulo (256); defaults to 0 if omitted. For CORRELATION ONLY — it is NOT an idempotency key and the server does not dedupe replays. Echoed on any GenericErrorResponse for this send, delivered on the udpNotifications subscription. */
3322
4723
  sequenceNumber?: InputMaybe<Scalars['Int']['input']>;
3323
4724
  /** The DESTINATION actor’s UUID. The message is delivered only to the client that owns this actor. Must be exactly 32 bytes when encoded as UTF-8. */
3324
4725
  targetUuid: Scalars['String']['input'];
@@ -3345,50 +4746,85 @@ export type SingleActorMessageNotification = {
3345
4746
  };
3346
4747
  export type Subscription = {
3347
4748
  __typename?: 'Subscription';
3348
- /** Downlink from the game server (responses, notifications, GenericErrorResponse, and RealtimeConnectionEvent). On subscribe, opens a UDP proxy session if none exists (least-loaded server). Connection failures are delivered as RealtimeConnectionEvent. Unsubscribing stops delivery only; call disconnectUdpProxy to release the session. */
4749
+ /** 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. */
3349
4750
  udpNotifications: Maybe<UdpNotification>;
3350
4751
  };
3351
4752
  export type TeleportRequestInput = {
4753
+ /** 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. */
3352
4754
  appId: Scalars['BigInt']['input'];
4755
+ /** Destination chunk-grid coordinates (x, y, z as int64 BigInt decimal strings). The reserved sentinel (-6, -6, -6) is rejected as UNAUTHORIZED. */
3353
4756
  chunkAddress: ChunkCoordinatesInput;
4757
+ /** Actor being teleported: exactly 32 ASCII characters (the UDP-wire actor id), NOT a hyphenated RFC-4122 UUID. */
3354
4758
  uuid: Scalars['String']['input'];
4759
+ /** Destination voxel coordinates within the chunk (x, y, z as signed 16-bit ints, -32768..32767). */
3355
4760
  voxelAddress: VoxelCoordinatesInput;
3356
4761
  };
3357
4762
  export type TeleportResponse = {
3358
4763
  __typename?: 'TeleportResponse';
4764
+ /** ErrorType enum: NO_ERROR on success; INVALID_APP_ID for a non-positive appId; UNAUTHORIZED when the destination is the reserved sentinel (-6,-6,-6) or the user lacks the app "teleport" runtime permission. */
3359
4765
  errorCode: UdpErrorCode;
4766
+ /** True when the teleport is authorized/accepted; false otherwise (inspect errorCode for the reason). */
3360
4767
  success: Scalars['Boolean']['output'];
3361
4768
  };
3362
- /** Error codes returned by UDP game servers in response messages. NO_ERROR (0) indicates success, all other values indicate various error conditions. */
4769
+ /** 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). */
3363
4770
  export declare enum UdpErrorCode {
4771
+ /** No app matches the supplied appId. */
3364
4772
  AppNotFound = "APP_NOT_FOUND",
4773
+ /** The app exists but is not currently loaded/active on this server. */
3365
4774
  AppNotLoaded = "APP_NOT_LOADED",
4775
+ /** The password did not match (login validation). */
3366
4776
  BadPassword = "BAD_PASSWORD",
4777
+ /** No chunk exists at the referenced coordinates. */
3367
4778
  ChunkNotFound = "CHUNK_NOT_FOUND",
4779
+ /** Registration failed because the email is already in use. */
3368
4780
  EmailAlreadyExists = "EMAIL_ALREADY_EXISTS",
4781
+ /** Email failed format validation. */
3369
4782
  EmailInvalid = "EMAIL_INVALID",
4783
+ /** No account matches the supplied email (login validation). */
3370
4784
  EmailNotFound = "EMAIL_NOT_FOUND",
4785
+ /** Email failed maximum-length validation. */
3371
4786
  EmailTooLong = "EMAIL_TOO_LONG",
4787
+ /** Email failed minimum-length validation. */
3372
4788
  EmailTooShort = "EMAIL_TOO_SHORT",
4789
+ /** The requested gamertag is already taken. */
3373
4790
  GamertagAlreadyExists = "GAMERTAG_ALREADY_EXISTS",
4791
+ /** The game token is not the expected length. Use the exact token returned by login (do not trim or re-encode it). */
3374
4792
  GameTokenWrongSize = "GAME_TOKEN_WRONG_SIZE",
4793
+ /** A grid already exists at these coordinates. */
3375
4794
  GridAlreadyExists = "GRID_ALREADY_EXISTS",
4795
+ /** The target coordinates fall outside any grid assigned to the caller. */
3376
4796
  GridOutsideAssignment = "GRID_OUTSIDE_ASSIGNMENT",
4797
+ /** The requested grid overlaps an existing grid. */
3377
4798
  GridOverlapsExisting = "GRID_OVERLAPS_EXISTING",
4799
+ /** The appId was missing, zero, or not a valid value. */
3378
4800
  InvalidAppId = "INVALID_APP_ID",
4801
+ /** The grid coordinates were invalid. */
3379
4802
  InvalidGridCoordinates = "INVALID_GRID_COORDINATES",
4803
+ /** The message was malformed or failed validation. Check the byte layout. */
3380
4804
  InvalidRequest = "INVALID_REQUEST",
4805
+ /** The state/payload bytes were invalid for this message type. */
3381
4806
  InvalidStateData = "INVALID_STATE_DATA",
4807
+ /** The game token was rejected (expired, malformed, or revoked). Re-authenticate against the Management API to obtain a fresh token. */
3382
4808
  InvalidToken = "INVALID_TOKEN",
4809
+ /** The supplied token was not a valid length. */
3383
4810
  InvalidTokenLength = "INVALID_TOKEN_LENGTH",
4811
+ /** A supplied name exceeded the maximum length. */
3384
4812
  NameTooLong = "NAME_TOO_LONG",
4813
+ /** No error (0). The message was accepted. */
3385
4814
  NoError = "NO_ERROR",
4815
+ /** No grid assignment covers the referenced coordinates. */
3386
4816
  NoMatchingGridAssignment = "NO_MATCHING_GRID_ASSIGNMENT",
4817
+ /** Password failed maximum-length validation. */
3387
4818
  PasswordTooLong = "PASSWORD_TOO_LONG",
4819
+ /** Password failed minimum-length validation. */
3388
4820
  PasswordTooShort = "PASSWORD_TOO_SHORT",
4821
+ /** The caller lacks the runtime/grid permission required for this action. Grid permissions can load asynchronously, so the first message to a newly entered region may transiently return this — retry shortly. */
3389
4822
  Unauthorized = "UNAUTHORIZED",
4823
+ /** Unspecified server error (1). Retry; if it persists, report it. */
3390
4824
  UnknownError = "UNKNOWN_ERROR",
4825
+ /** Requires app-admin privileges (the 'manage_apps' permission). */
3391
4826
  UserNotAppAdmin = "USER_NOT_APP_ADMIN",
4827
+ /** This client has no authenticated session on the server. Complete the UDP token handshake (or open the UDP proxy) before sending spatial messages. */
3392
4828
  UserNotAuthenticated = "USER_NOT_AUTHENTICATED"
3393
4829
  }
3394
4830
  /** All game-server messages delivered over the UDP proxy as GraphQL payloads. Subscribe to udpNotifications before or with sending mutations so responses and GenericErrorResponse (correlate via sequenceNumber) are not missed. */
@@ -3405,145 +4841,239 @@ export type UdpProxyConnectionStatus = {
3405
4841
  /** The IPv6 address of the UDP game server (only present when connected). */
3406
4842
  serverIp6: Maybe<Scalars['String']['output']>;
3407
4843
  };
4844
+ /** Fields to update on an access tier. All fields are optional; omitted fields are left unchanged. */
3408
4845
  export type UpdateAccessTierInput = {
4846
+ /** New billing cadence (e.g. "month", "year"); null clears it. */
3409
4847
  billingPeriod?: InputMaybe<Scalars['String']['input']>;
4848
+ /** New ISO 4217 currency code (e.g. "usd"). */
3410
4849
  currency?: InputMaybe<Scalars['String']['input']>;
4850
+ /** New tier description; null clears it. */
3411
4851
  description?: InputMaybe<Scalars['String']['input']>;
4852
+ /** Set whether this is the app's default tier. */
3412
4853
  isDefault?: InputMaybe<Scalars['Boolean']['input']>;
4854
+ /** Set whether the tier is free. */
3413
4855
  isFree?: InputMaybe<Scalars['Boolean']['input']>;
4856
+ /** New tier name (max 128 chars). */
3414
4857
  name?: InputMaybe<Scalars['String']['input']>;
4858
+ /** External PayPal plan id to associate (billing integration). */
3415
4859
  paypalPlanId?: InputMaybe<Scalars['String']['input']>;
4860
+ /** Replacement set of runtime permission keys for the tier (must be valid runtimePermissions). When provided, replaces the existing set entirely. */
3416
4861
  permissionKeys?: InputMaybe<Array<Scalars['String']['input']>>;
4862
+ /** New price in cents; null clears the price (makes the tier unpriced). */
3417
4863
  priceCents?: InputMaybe<Scalars['BigInt']['input']>;
4864
+ /** External Stripe price id to associate (billing integration). */
3418
4865
  stripePriceId?: InputMaybe<Scalars['String']['input']>;
4866
+ /** New sort order (ascending). */
3419
4867
  tierOrder?: InputMaybe<Scalars['Int']['input']>;
3420
4868
  };
3421
4869
  export type UpdateActorInput = {
4870
+ /** New app id, or omit to leave unchanged. BigInt sent as a decimal string. */
3422
4871
  appId?: InputMaybe<Scalars['BigInt']['input']>;
4872
+ /** New avatar id, or omit to leave unchanged. BigInt sent as a decimal string. */
3423
4873
  avatarId?: InputMaybe<Scalars['BigInt']['input']>;
4874
+ /** New chunk-grid coordinates (x, y, z as int64 BigInt decimal strings), or omit to leave unchanged. */
3424
4875
  chunk?: InputMaybe<ChunkCoordinatesInput>;
4876
+ /** New owner-only private state blob (base64-encoded binary), or omit to leave unchanged. */
3425
4877
  privateState?: InputMaybe<Scalars['String']['input']>;
4878
+ /** New public state blob (base64-encoded binary), or omit to leave unchanged. */
3426
4879
  publicState?: InputMaybe<Scalars['String']['input']>;
3427
4880
  };
3428
4881
  export type UpdateActorStateInput = {
4882
+ /** New owner-only private state blob (base64-encoded binary), or omit to leave unchanged. */
3429
4883
  privateState?: InputMaybe<Scalars['String']['input']>;
4884
+ /** New public state blob (base64-encoded binary), or omit to leave unchanged. */
3430
4885
  publicState?: InputMaybe<Scalars['String']['input']>;
3431
4886
  };
4887
+ /** Input payload for updating an app. All fields are optional; only fields that are provided are changed. */
3432
4888
  export type UpdateAppInput = {
4889
+ /** New short description. Omit to leave unchanged. */
3433
4890
  description?: InputMaybe<Scalars['String']['input']>;
4891
+ /** New JSON-encoded marketplace metadata string, replacing the existing value (see App.metadata). Omit to leave unchanged. */
3434
4892
  metadata?: InputMaybe<Scalars['String']['input']>;
4893
+ /** New display name (1-256 chars). Omit to leave unchanged. */
3435
4894
  name?: InputMaybe<Scalars['String']['input']>;
4895
+ /** New lifecycle status; set LIVE to publish, or DRAFT/LIVE to restore an archived app. Omit to leave unchanged. */
3436
4896
  status?: InputMaybe<AppStatus>;
4897
+ /** New visibility (PUBLIC/UNLISTED/PRIVATE). Omit to leave unchanged. */
3437
4898
  visibility?: InputMaybe<AppVisibility>;
3438
4899
  };
3439
4900
  export type UpdateAvatarAppStateInput = {
4901
+ /** App (game) id the state is scoped to. Required. BigInt sent as a decimal string. */
3440
4902
  appId: Scalars['BigInt']['input'];
4903
+ /** Avatar whose per-app state to write; must be owned by the caller. Required. BigInt sent as a decimal string. */
3441
4904
  avatarId: Scalars['BigInt']['input'];
3442
- /** Base64-encoded binary state. Null clears it. */
4905
+ /** Per-app avatar state as base64-encoded binary. Send null (or omit) to clear it. */
3443
4906
  state?: InputMaybe<Scalars['String']['input']>;
3444
4907
  };
3445
4908
  export type UpdateAvatarInput = {
4909
+ /** New avatar name, or omit to leave unchanged. */
3446
4910
  name?: InputMaybe<Scalars['String']['input']>;
3447
4911
  };
3448
4912
  export type UpdateAvatarStateInput = {
4913
+ /** New owner-only private state blob (base64-encoded binary), or omit to leave unchanged. */
3449
4914
  privateState?: InputMaybe<Scalars['String']['input']>;
4915
+ /** New public state blob (base64-encoded binary), or omit to leave unchanged. */
3450
4916
  publicState?: InputMaybe<Scalars['String']['input']>;
3451
4917
  };
4918
+ /** Update an existing channel. Omitted fields are left unchanged. */
3452
4919
  export type UpdateChannelInput = {
4920
+ /** New description. Omit to leave unchanged. */
3453
4921
  description?: InputMaybe<Scalars['String']['input']>;
4922
+ /** The channel (group) id to update. */
3454
4923
  groupId: Scalars['BigInt']['input'];
4924
+ /** open | request | invite | admin. Omit to leave unchanged. */
3455
4925
  membershipPolicy?: InputMaybe<Scalars['String']['input']>;
4926
+ /** New channel name (max 128 chars). Omit to leave unchanged. */
3456
4927
  name?: InputMaybe<Scalars['String']['input']>;
3457
4928
  };
4929
+ /** Payload for updateChunkLods: replaces the chunk's entire LOD set. Only LODs are written; voxels, voxel states, chunk state and owner are preserved. */
3458
4930
  export type UpdateChunkLodsInput = {
4931
+ /** Id of the app that owns the chunk (decimal string). */
3459
4932
  appId: Scalars['BigInt']['input'];
4933
+ /** Address of the chunk whose LODs to replace. */
3460
4934
  coordinates: ChunkCoordinatesInput;
4935
+ /** Full set of LOD levels to store for the chunk; this REPLACES any existing LODs. */
3461
4936
  lods: Array<LodDataInput>;
3462
4937
  };
4938
+ /** Payload for updateChunkState: upserts ONLY the chunk-level opaque state blob; the voxel grid, per-voxel states and LODs are preserved. */
3463
4939
  export type UpdateChunkStateInput = {
4940
+ /** Id of the app that owns the chunk (decimal string). */
3464
4941
  appId: Scalars['BigInt']['input'];
4942
+ /** BASE64-encoded binary chunk-level state blob to store. Omit/null to store no chunk state. */
3465
4943
  chunkState?: InputMaybe<Scalars['String']['input']>;
4944
+ /** Address of the chunk whose chunk-level state to set. */
3466
4945
  coordinates: ChunkCoordinatesInput;
3467
4946
  };
3468
4947
  export type UpdateEnvironmentScalingInput = {
3469
4948
  /** Caddy LB flavor (in front of the game-api fleet). When omitted the existing value is preserved. */
3470
4949
  caddyFlavor?: InputMaybe<Scalars['String']['input']>;
4950
+ /** Maximum game-api servers (autoscaling ceiling). Min 1; ≥ gameApiMinServers. */
3471
4951
  gameApiMaxServers: Scalars['Int']['input'];
4952
+ /** Minimum game-api servers (autoscaling floor). Min 1; ≤ gameApiMaxServers. */
3472
4953
  gameApiMinServers: Scalars['Int']['input'];
4954
+ /** Number of Caddy load-balancer VMs in front of the game-api fleet. Min 1. */
3473
4955
  loadBalancerCount: Scalars['Int']['input'];
4956
+ /** Organization id (BigInt) that owns the environment. */
3474
4957
  orgId: Scalars['BigInt']['input'];
4958
+ /** Slug of the dedicated environment to rescale (rejected for 'dev_single'). */
3475
4959
  slug: Scalars['String']['input'];
4960
+ /** Maximum Buddy UDP servers (autoscaling ceiling). Min 1; ≥ udpBuddyMinServers. */
3476
4961
  udpBuddyMaxServers: Scalars['Int']['input'];
4962
+ /** Minimum Buddy UDP servers (autoscaling floor). Min 1; ≤ udpBuddyMaxServers. */
3477
4963
  udpBuddyMinServers: Scalars['Int']['input'];
3478
4964
  };
3479
4965
  export type UpdateGamertagInput = {
4966
+ /** Discriminator paired with `gamertag` (max 128 characters) to form a unique handle. */
3480
4967
  disambiguation: Scalars['String']['input'];
4968
+ /** New gamertag (max 64 characters). Must be unique in combination with `disambiguation`. */
3481
4969
  gamertag: Scalars['String']['input'];
3482
4970
  };
4971
+ /** Update a custom group role. Omitted fields are left unchanged. */
3483
4972
  export type UpdateGroupRoleInput = {
4973
+ /** The group role id to update. */
3484
4974
  groupRoleId: Scalars['BigInt']['input'];
4975
+ /** When provided, REPLACES the role's permission key strings. Each must be a valid group permission key for the group type (max 64 chars, unique). Omit to leave permissions unchanged. */
3485
4976
  permissions?: InputMaybe<Array<Scalars['String']['input']>>;
4977
+ /** New rank (higher = more senior). Ignored for system roles. Omit to leave unchanged. */
3486
4978
  rank?: InputMaybe<Scalars['Int']['input']>;
4979
+ /** New role name (max 128 chars). Ignored for system roles. Omit to leave unchanged. */
3487
4980
  roleName?: InputMaybe<Scalars['String']['input']>;
3488
4981
  };
3489
4982
  export type UpdateOrgRoleInput = {
4983
+ /** New description; omit to leave unchanged. */
3490
4984
  description?: InputMaybe<Scalars['String']['input']>;
4985
+ /** If provided, replaces the entire permission set (empty array clears all); omit to leave unchanged. */
3491
4986
  permissions?: InputMaybe<Array<Scalars['String']['input']>>;
4987
+ /** New role name; omit to leave unchanged. */
3492
4988
  roleName?: InputMaybe<Scalars['String']['input']>;
3493
4989
  };
3494
4990
  export type UpdateOrgTokenInput = {
4991
+ /** New expiry timestamp; omit to leave unchanged. */
3495
4992
  expiresAt?: InputMaybe<Scalars['DateTime']['input']>;
4993
+ /** Set false to deactivate the token; omit to leave unchanged. Revoked tokens cannot be re-minted. */
3496
4994
  isActive?: InputMaybe<Scalars['Boolean']['input']>;
4995
+ /** New label; omit to leave unchanged. */
3497
4996
  label?: InputMaybe<Scalars['String']['input']>;
3498
4997
  };
4998
+ /** Update an existing team. Omitted fields are left unchanged. */
3499
4999
  export type UpdateTeamInput = {
5000
+ /** New description. Omit to leave unchanged. */
3500
5001
  description?: InputMaybe<Scalars['String']['input']>;
5002
+ /** The team (group) id to update. */
3501
5003
  groupId: Scalars['BigInt']['input'];
5004
+ /** open | request | invite | admin. Omit to leave unchanged. */
3502
5005
  membershipPolicy?: InputMaybe<Scalars['String']['input']>;
5006
+ /** New team name (max 128 chars). Omit to leave unchanged. */
3503
5007
  name?: InputMaybe<Scalars['String']['input']>;
3504
5008
  };
3505
5009
  export type UpdateUserStateInput = {
5010
+ /** New user-level state blob, base64-encoded binary. Omit or send null to clear it. */
3506
5011
  state?: InputMaybe<Scalars['String']['input']>;
3507
5012
  };
5013
+ /** Payload for updateVoxel: records (upserts) a single voxel edit in the voxel_updates log for one chunk. */
3508
5014
  export type UpdateVoxelInput = {
5015
+ /** Id of the app that owns the target chunk (decimal string). */
3509
5016
  appId: Scalars['BigInt']['input'];
5017
+ /** Address of the chunk that contains the voxel to edit. */
3510
5018
  coordinates: ChunkCoordinatesInput;
5019
+ /** Local voxel position within the chunk (0-15 per axis; validated to the signed 16-bit range). */
3511
5020
  location: VoxelCoordinatesInput;
5021
+ /** Optional BASE64-encoded binary state blob for the voxel; omit for none. */
3512
5022
  state?: InputMaybe<Scalars['String']['input']>;
5023
+ /** Voxel type id to write (0-255). */
3513
5024
  voxelType: Scalars['Float']['input'];
3514
5025
  };
5026
+ /** Create or update a container type (schema for a kind of entity). */
3515
5027
  export type UpsertContainerTypeInput = {
5028
+ /** The app (tenant) that owns the type. */
3516
5029
  appId: Scalars['BigInt']['input'];
3517
5030
  /** public | owner | hidden default for this type's properties. */
3518
5031
  defaultPropertyVisibility?: InputMaybe<Scalars['String']['input']>;
5032
+ /** Optional description of the type. */
3519
5033
  description?: InputMaybe<Scalars['String']['input']>;
5034
+ /** Human-friendly display name. */
3520
5035
  displayName: Scalars['String']['input'];
3521
5036
  /** admin | member | owner (who may instantiate this type). */
3522
5037
  instantiableBy?: InputMaybe<Scalars['String']['input']>;
3523
5038
  /** JSON object of metadata. */
3524
5039
  metadataJson?: InputMaybe<Scalars['String']['input']>;
5040
+ /** Stable type name (unique per app). Acts as the upsert key. */
3525
5041
  typeName: Scalars['String']['input'];
3526
5042
  };
5043
+ /** Create or update a studio-defined function. Upsert key is (app, name). */
3527
5044
  export type UpsertFunctionInput = {
5045
+ /** The app (tenant) that owns the function. */
3528
5046
  appId: Scalars['BigInt']['input'];
5047
+ /** Optional container type to bind the function to (omit for a global function). */
3529
5048
  containerTypeName?: InputMaybe<Scalars['String']['input']>;
5049
+ /** Optional description of the function. */
3530
5050
  description?: InputMaybe<Scalars['String']['input']>;
3531
5051
  /** JSON-encoded invoke-policy rule tree (authority requirements). */
3532
5052
  invokePolicyJson?: InputMaybe<Scalars['String']['input']>;
3533
5053
  /** player | server | internal */
3534
5054
  invokeScope?: InputMaybe<Scalars['String']['input']>;
5055
+ /** The property writes the function performs (applied atomically when invoked). */
3535
5056
  mutations?: InputMaybe<Array<FunctionMutationInput>>;
5057
+ /** Function name (unique per app). Used to invoke it. */
3536
5058
  name: Scalars['String']['input'];
5059
+ /** Typed parameters the function accepts. */
3537
5060
  parameters?: InputMaybe<Array<FunctionParamInput>>;
5061
+ /** Optional expression whose value becomes the invoke result. */
3538
5062
  returnExpression?: InputMaybe<Scalars['String']['input']>;
5063
+ /** Optional declared return value type. */
3539
5064
  returnType?: InputMaybe<Scalars['String']['input']>;
3540
5065
  };
5066
+ /** Create or update a typed property on a container type. */
3541
5067
  export type UpsertPropertyDefInput = {
5068
+ /** The app (tenant) that owns the type. */
3542
5069
  appId: Scalars['BigInt']['input'];
5070
+ /** The container type to define the property on. */
3543
5071
  containerTypeName: Scalars['String']['input'];
3544
5072
  /** JSON-encoded default value. */
3545
5073
  defaultValueJson?: InputMaybe<Scalars['String']['input']>;
5074
+ /** Optional description of the property. */
3546
5075
  description?: InputMaybe<Scalars['String']['input']>;
5076
+ /** Property key (unique within the type). Part of the upsert key. */
3547
5077
  key: Scalars['String']['input'];
3548
5078
  /** int | float | string | bool | array | object | container_ref */
3549
5079
  valueType: Scalars['String']['input'];
@@ -3552,40 +5082,65 @@ export type UpsertPropertyDefInput = {
3552
5082
  /** function | owner | admin */
3553
5083
  writable?: InputMaybe<Scalars['String']['input']>;
3554
5084
  };
5085
+ /** One minute-bucketed usage sample. Byte/message counters are returned as strings because they can exceed the 32-bit Int range. */
3555
5086
  export type UsageMinuteRow = {
3556
5087
  __typename?: 'UsageMinuteRow';
5088
+ /** Start of the one-minute bucket. */
3557
5089
  minute: Scalars['DateTime']['output'];
5090
+ /** Bytes received in the minute (string counter). */
3558
5091
  recvBytes: Scalars['String']['output'];
5092
+ /** Messages received in the minute (replication only). */
3559
5093
  recvMsgs: Maybe<Scalars['String']['output']>;
5094
+ /** Bytes sent in the minute (string counter). */
3560
5095
  sendBytes: Scalars['String']['output'];
5096
+ /** Messages sent in the minute (replication only). */
3561
5097
  sendMsgs: Maybe<Scalars['String']['output']>;
3562
5098
  };
5099
+ /** Peak and average send rates over the sampled replication window. */
3563
5100
  export type UsageRatePeaks = {
3564
5101
  __typename?: 'UsageRatePeaks';
5102
+ /** Average sent megabits per second over the window. */
3565
5103
  avgSendMbitPerSec: Scalars['Float']['output'];
5104
+ /** Average sent messages per second over the window. */
3566
5105
  avgSendMsgsPerSec: Scalars['Float']['output'];
5106
+ /** Highest observed sent megabits per second. */
3567
5107
  peakSendMbitPerSec: Scalars['Float']['output'];
5108
+ /** Highest observed sent messages per second. */
3568
5109
  peakSendMsgsPerSec: Scalars['Float']['output'];
5110
+ /** Number of minute samples the averages are computed over. */
3569
5111
  sampleMinutes: Scalars['Float']['output'];
3570
5112
  };
3571
5113
  export type User = {
3572
5114
  __typename?: 'User';
5115
+ /** Account creation timestamp (ISO-8601). */
3573
5116
  createdAt: Scalars['DateTime']['output'];
5117
+ /** Discriminator paired with `gamertag` to form a unique handle; null if unset. */
3574
5118
  disambiguation: Maybe<Scalars['String']['output']>;
5119
+ /** Account email; null for anonymized/soft-deleted accounts. */
3575
5120
  email: Maybe<Scalars['String']['output']>;
5121
+ /** External identity-provider id for federated accounts, or null. */
3576
5122
  externalId: Maybe<Scalars['String']['output']>;
5123
+ /** Public display name; null if unset or anonymized. Unique in combination with `disambiguation`. */
3577
5124
  gamertag: Maybe<Scalars['String']['output']>;
5125
+ /** Whether the user qualifies for early access through normal eligibility (the free-play window/rollout). */
3578
5126
  grantEarlyAccess: Scalars['Boolean']['output'];
5127
+ /** Admin override forcing early access on/off regardless of normal eligibility (set via `setEarlyAccessOverride`). */
3579
5128
  grantEarlyAccessOverride: Scalars['Boolean']['output'];
5129
+ /** Whether the account email has been confirmed. */
3580
5130
  isConfirmed: Scalars['Boolean']['output'];
3581
5131
  /** Company-employee flag that grants access to control-plane / operator features. Independent from is_super_admin. */
3582
5132
  isOperator: Scalars['Boolean']['output'];
5133
+ /** Whether the user holds platform super-admin privileges (toggled via `setSuperAdmin`). */
3583
5134
  isSuperAdmin: Scalars['Boolean']['output'];
5135
+ /** Organization the user belongs to, or null. BigInt serialized as a decimal string. */
3584
5136
  orgId: Maybe<Scalars['BigInt']['output']>;
3585
- /** The current user's effective permission keys on the given org. Empty if not a member. Always full set if super admin. */
5137
+ /** The user's effective permission keys on the given org (empty if not a member; full set if super admin). Requires a valid bearer game token. NOTE: org permissions are management-owned, so in cks-game-api this currently resolves to an empty list — query cks-management-api for authoritative org permissions. */
3586
5138
  permissionsForOrg: Array<Scalars['String']['output']>;
5139
+ /** User-level state blob, base64-encoded binary (management-owned). Null when cleared. */
3587
5140
  state: Maybe<Scalars['String']['output']>;
5141
+ /** Unique user id and primary key. BigInt serialized as a decimal string. */
3588
5142
  userId: Scalars['BigInt']['output'];
5143
+ /** Account type, e.g. "direct" or "deleted". */
3589
5144
  userType: Scalars['String']['output'];
3590
5145
  };
3591
5146
  export type UserPermissionsForOrgArgs = {
@@ -3593,28 +5148,62 @@ export type UserPermissionsForOrgArgs = {
3593
5148
  };
3594
5149
  export type UserAppState = {
3595
5150
  __typename?: 'UserAppState';
5151
+ /** App (game) id this state is scoped to. BigInt serialized as a decimal string. */
3596
5152
  appId: Scalars['BigInt']['output'];
5153
+ /** Row creation timestamp (ISO-8601). */
3597
5154
  createdAt: Scalars['DateTime']['output'];
5155
+ /** Per-app user state blob, base64-encoded binary; null when cleared. */
3598
5156
  state: Maybe<Scalars['String']['output']>;
5157
+ /** Last-update timestamp (ISO-8601). */
3599
5158
  updatedAt: Scalars['DateTime']['output'];
5159
+ /** Owner user id. BigInt serialized as a decimal string. */
3600
5160
  userId: Scalars['BigInt']['output'];
3601
5161
  };
5162
+ /** Aggregated lifetime donation totals for a user. LEGACY: donations are no longer purchasable. Returned by the deprecated myDonationData query. */
3602
5163
  export type UserDonationData = {
3603
5164
  __typename?: 'UserDonationData';
5165
+ /** ISO currency code for the total, e.g. "usd". */
3604
5166
  currency: Scalars['String']['output'];
5167
+ /** Lifetime donation total in minor currency units (cents), as a decimal string. */
3605
5168
  totalAmountCents: Scalars['String']['output'];
3606
5169
  };
5170
+ /** An edge in a User connection. */
5171
+ export type UserEdge = {
5172
+ __typename?: 'UserEdge';
5173
+ /** Opaque cursor for this edge. */
5174
+ cursor: Scalars['String']['output'];
5175
+ /** The node at the end of this edge. */
5176
+ node: User;
5177
+ };
5178
+ /** Aggregated property-token balances for a user. LEGACY: property tokens are no longer purchasable. Returned by the deprecated myPropertyTokens query. */
3607
5179
  export type UserPropertyTokenData = {
3608
5180
  __typename?: 'UserPropertyTokenData';
5181
+ /** Property tokens currently available, as a decimal string. */
3609
5182
  available: Scalars['String']['output'];
5183
+ /** Property tokens currently in use, as a decimal string. */
3610
5184
  inUse: Scalars['String']['output'];
5185
+ /** Sum of available + inUse, as a decimal string. */
3611
5186
  total: Scalars['String']['output'];
3612
5187
  };
5188
+ /** A Relay cursor connection over User records. Page with first/after; pass pageInfo.endCursor back as after for the next page. */
5189
+ export type UsersConnection = {
5190
+ __typename?: 'UsersConnection';
5191
+ /** Edges on this page. */
5192
+ edges: Array<UserEdge>;
5193
+ /** Pagination metadata. */
5194
+ pageInfo: ConnectionPageInfo;
5195
+ /** Total matching records across all pages, when known (null for sources that do not compute a total). */
5196
+ totalCount: Maybe<Scalars['Int']['output']>;
5197
+ };
5198
+ /** One page of users from usersPaginated, plus pagination metadata. */
3613
5199
  export type UsersPage = {
3614
5200
  __typename?: 'UsersPage';
5201
+ /** Users on the current page, ordered by ascending user id. */
3615
5202
  items: Array<User>;
5203
+ /** Pagination metadata: totalCount, applied limit, and applied offset. */
3616
5204
  pageInfo: PageInfo;
3617
5205
  };
5206
+ /** A semantic-style version as four integer components (major.minor.patch.build). Compare components in order (major, then minor, then patch, then build). */
3618
5207
  export type VersionInfo = {
3619
5208
  __typename?: 'VersionInfo';
3620
5209
  /** Build number */
@@ -3626,50 +5215,102 @@ export type VersionInfo = {
3626
5215
  /** Patch version number */
3627
5216
  patch: Scalars['Int']['output'];
3628
5217
  };
5218
+ /** A recorded edit to a single voxel (one row of the voxel_updates log): the app/chunk/local-position that changed, the new voxel type, an optional state blob, and who/when. Returned by listVoxels, getVoxelList and listVoxelUpdatesByDistance; created by updateVoxel. A background maintenance job later folds these edits into the chunk grid. */
3629
5219
  export type Voxel = {
3630
5220
  __typename?: 'Voxel';
5221
+ /** Id of the app this edit belongs to (decimal string). */
3631
5222
  appId: Scalars['BigInt']['output'];
5223
+ /** Address of the chunk that contains the edited voxel. */
3632
5224
  coordinates: ChunkCoordinates;
5225
+ /** When the edit was recorded; also serves as the last-modified time for the voxel. */
3633
5226
  createdAt: Scalars['DateTime']['output'];
5227
+ /** Id of the user that made this edit (decimal string). */
3634
5228
  createdBy: Scalars['BigInt']['output'];
5229
+ /** Local position of the edited voxel within its chunk (0-15 per axis). */
3635
5230
  location: VoxelCoordinates;
5231
+ /** BASE64-encoded binary state blob for the voxel (decode from base64); null when no state was set. */
3636
5232
  state: Maybe<Scalars['String']['output']>;
5233
+ /** New voxel type id written by this edit (0-255). */
3637
5234
  voxelType: Scalars['Int']['output'];
5235
+ /** Unique id of this voxel-update row (decimal string). */
3638
5236
  voxelUpdateId: Scalars['BigInt']['output'];
3639
5237
  };
5238
+ /** Integer (x, y, z) position of a single voxel LOCAL to its chunk (not a world position). Stored as signed 16-bit smallints (-32,768..32,767), but a chunk is 16x16x16 = 4096 voxels, so valid in-bounds positions are 0-15 on each axis. */
3640
5239
  export type VoxelCoordinates = {
3641
5240
  __typename?: 'VoxelCoordinates';
5241
+ /** Local voxel X within the chunk (0-15 for in-bounds voxels). */
3642
5242
  x: Scalars['Int']['output'];
5243
+ /** Local voxel Y within the chunk (0-15 for in-bounds voxels). */
3643
5244
  y: Scalars['Int']['output'];
5245
+ /** Local voxel Z within the chunk (0-15 for in-bounds voxels). */
3644
5246
  z: Scalars['Int']['output'];
3645
5247
  };
5248
+ /** Input form of a voxel position LOCAL to its chunk (see VoxelCoordinates). Signed 16-bit integers; in-bounds positions are 0-15 on each axis for a 16x16x16 chunk. */
3646
5249
  export type VoxelCoordinatesInput = {
5250
+ /** Local voxel X within the chunk (0-15 for in-bounds voxels). */
3647
5251
  x: Scalars['Int']['input'];
5252
+ /** Local voxel Y within the chunk (0-15 for in-bounds voxels). */
3648
5253
  y: Scalars['Int']['input'];
5254
+ /** Local voxel Z within the chunk (0-15 for in-bounds voxels). */
3649
5255
  z: Scalars['Int']['input'];
3650
5256
  };
5257
+ /** A single voxel's state override stored on a chunk: its local position, its voxel type, and an opaque base64-encoded state blob. */
3651
5258
  export type VoxelState = {
3652
5259
  __typename?: 'VoxelState';
5260
+ /** BASE64-encoded binary state blob for this voxel (decode from base64); null/empty when the voxel has no extra state. */
3653
5261
  state: Maybe<Scalars['String']['output']>;
5262
+ /** Local voxel position within the chunk (0-15 per axis). */
3654
5263
  voxelCoord: VoxelCoordinates;
5264
+ /** Voxel type id at this position (0-255). */
3655
5265
  voxelType: Scalars['Int']['output'];
3656
5266
  };
5267
+ /** One per-voxel state entry to write to a chunk. */
3657
5268
  export type VoxelStateInput = {
5269
+ /** BASE64-encoded binary state blob for this voxel; omit/null for no extra state. */
3658
5270
  state?: InputMaybe<Scalars['String']['input']>;
5271
+ /** Local voxel position within the chunk (0-15 per axis). */
3659
5272
  voxelCoord: VoxelCoordinatesInput;
5273
+ /** Voxel type id to set at this position (0-255). */
3660
5274
  voxelType: Scalars['Int']['input'];
3661
5275
  };
5276
+ /** Relay-style cursor-paginated connection over voxel edit history entries (VoxelUpdateHistoryEvent). Page with `first`/`after`; cursors are opaque. */
5277
+ export type VoxelUpdateHistoryConnection = {
5278
+ __typename?: 'VoxelUpdateHistoryConnection';
5279
+ /** Edges on this page. */
5280
+ edges: Array<VoxelUpdateHistoryEventEdge>;
5281
+ /** Pagination metadata. */
5282
+ pageInfo: ConnectionPageInfo;
5283
+ /** Total matching records across all pages, when known (null for sources that do not compute a total). */
5284
+ totalCount: Maybe<Scalars['Int']['output']>;
5285
+ };
5286
+ /** One entry in the immutable voxel edit history (voxel_updates_history): a recorded change of a single voxel's type, with who and when. Returned by voxelUpdateHistory, newest first. */
3662
5287
  export type VoxelUpdateHistoryEvent = {
3663
5288
  __typename?: 'VoxelUpdateHistoryEvent';
5289
+ /** Id of the app this change belongs to (decimal string). */
3664
5290
  appId: Scalars['BigInt']['output'];
5291
+ /** Timestamp when the change occurred. */
3665
5292
  changedAt: Scalars['DateTime']['output'];
5293
+ /** Id of the user that made the change (decimal string), or null if unknown. */
3666
5294
  changedBy: Maybe<Scalars['BigInt']['output']>;
5295
+ /** Address of the chunk that contains the changed voxel. */
3667
5296
  coordinates: ChunkCoordinates;
5297
+ /** Unique id of this history entry (decimal string). */
3668
5298
  id: Scalars['BigInt']['output'];
5299
+ /** Local position of the changed voxel within its chunk. */
3669
5300
  location: VoxelCoordinates;
5301
+ /** Voxel type after the change, or null if the voxel was cleared/removed. */
3670
5302
  newVoxelType: Maybe<Scalars['Int']['output']>;
5303
+ /** Voxel type before the change, or null if the voxel did not previously exist. */
3671
5304
  oldVoxelType: Maybe<Scalars['Int']['output']>;
3672
5305
  };
5306
+ /** An edge in a VoxelUpdateHistoryEvent connection. */
5307
+ export type VoxelUpdateHistoryEventEdge = {
5308
+ __typename?: 'VoxelUpdateHistoryEventEdge';
5309
+ /** Opaque cursor for this edge. */
5310
+ cursor: Scalars['String']['output'];
5311
+ /** The node at the end of this edge. */
5312
+ node: VoxelUpdateHistoryEvent;
5313
+ };
3673
5314
  /** Notification received when a voxel (block) is updated by another client or the server. Received via the udpNotifications subscription. */
3674
5315
  export type VoxelUpdateNotification = {
3675
5316
  __typename?: 'VoxelUpdateNotification';
@@ -3712,7 +5353,7 @@ export type VoxelUpdateRequestInput = {
3712
5353
  decayRate?: InputMaybe<Scalars['Int']['input']>;
3713
5354
  /** Chunk replication distance (0-8). Defaults to 8 for voxel updates. Clamped to 0-8. */
3714
5355
  distance?: InputMaybe<Scalars['Int']['input']>;
3715
- /** Client's sequence number for this message (0-255, wraps). Used to match error responses. */
5356
+ /** Client-assigned correlation id for this datagram: a uint8 (0-255) that wraps at gameClientBootstrap.sequenceNumberModulo (256); defaults to 0 if omitted. For CORRELATION ONLY — it is NOT an idempotency key and the server does not dedupe replays. Echoed on the matching response and on any GenericErrorResponse for this send, both delivered on the udpNotifications subscription. */
3716
5357
  sequenceNumber?: InputMaybe<Scalars['Int']['input']>;
3717
5358
  /** A unique identifier for this voxel update. Must be exactly 32 bytes when encoded as UTF-8. */
3718
5359
  uuid: Scalars['String']['input'];
@@ -3740,31 +5381,64 @@ export type VoxelUpdateResponse = {
3740
5381
  distance: Scalars['Int']['output'];
3741
5382
  /** Server-generated epoch milliseconds timestamp. */
3742
5383
  epochMillis: Scalars['BigInt']['output'];
3743
- /** The sequence number echoed back from the request, used to correlate responses. */
5384
+ /** The sequenceNumber echoed back from the originating sendVoxelUpdate request (a uint8, 0-255, wrapping at modulo 256). Use it to correlate this response with that send. Correlation only — not an idempotency key. */
3744
5385
  sequenceNumber: Scalars['Int']['output'];
3745
5386
  /** The unique identifier for this voxel update. */
3746
5387
  uuid: Scalars['String']['output'];
3747
5388
  };
5389
+ /** Result of listVoxelUpdatesByDistance: per-chunk groups of voxel edits ordered by increasing distance from the center, plus an echo of the pagination applied. */
3748
5390
  export type VoxelUpdatesByDistanceResponse = {
3749
5391
  __typename?: 'VoxelUpdatesByDistanceResponse';
5392
+ /** The center chunk the search was performed around. */
3750
5393
  centerCoordinate: ChunkCoordinates;
5394
+ /** Per-chunk groups of voxel edits, ordered by increasing Chebyshev distance from centerCoordinate. */
3751
5395
  chunks: Array<ChunkVoxelUpdatesResponse>;
5396
+ /** Echo of the chunk `limit` applied to this page, or null if none was supplied. */
3752
5397
  limit: Maybe<Scalars['Int']['output']>;
5398
+ /** Echo of the chunk `skip` applied to this page, or null if none was supplied. */
3753
5399
  skip: Maybe<Scalars['Int']['output']>;
3754
5400
  };
3755
5401
  export type WalletTransaction = {
3756
5402
  __typename?: 'WalletTransaction';
5403
+ /** Signed change applied to the wallet in minor currency units (cents), as a BigInt decimal string: positive credits funds, negative debits funds. */
3757
5404
  amountCents: Scalars['BigInt']['output'];
5405
+ /** App that incurred the charge (BigInt as a decimal string), set on usage-type transactions; null for org-level credits such as top-ups. */
3758
5406
  appId: Maybe<Scalars['BigInt']['output']>;
5407
+ /** Wallet balance in cents immediately after this transaction was applied, as a BigInt decimal string. */
3759
5408
  balanceAfter: Scalars['BigInt']['output'];
5409
+ /** When the transaction was recorded (ISO-8601 UTC timestamp). */
3760
5410
  createdAt: Scalars['DateTime']['output'];
5411
+ /** Optional human-readable note describing the transaction; null when not set. */
3761
5412
  description: Maybe<Scalars['String']['output']>;
5413
+ /** Organization that owns the wallet (BigInt as a decimal string). */
3762
5414
  orgId: Scalars['BigInt']['output'];
5415
+ /** Optional external reference (e.g. payment-provider charge id or checkout id) linking this transaction to its source; null when not set. */
3763
5416
  referenceId: Maybe<Scalars['String']['output']>;
5417
+ /** Unique transaction id (BigInt as a decimal string). */
3764
5418
  transactionId: Scalars['BigInt']['output'];
5419
+ /** What produced this transaction. Known values: "topup" (wallet credit from a checkout/top-up), "usage" (per-app usage charge, negative), "shared_usage" (shared-environment usage charge, negative), "environment_usage" (hourly environment cost, negative), "auto_recharge" (automatic wallet recharge). Other caller-supplied deposit types are possible. */
3765
5420
  transactionType: Scalars['String']['output'];
5421
+ /** Wallet this transaction belongs to (BigInt as a decimal string). */
3766
5422
  walletId: Scalars['BigInt']['output'];
3767
5423
  };
5424
+ /** An edge in a WalletTransaction connection. */
5425
+ export type WalletTransactionEdge = {
5426
+ __typename?: 'WalletTransactionEdge';
5427
+ /** Opaque cursor for this edge. */
5428
+ cursor: Scalars['String']['output'];
5429
+ /** The node at the end of this edge. */
5430
+ node: WalletTransaction;
5431
+ };
5432
+ /** A Relay cursor connection over WalletTransaction records. Page with first/after; pass pageInfo.endCursor back as after for the next page. */
5433
+ export type WalletTransactionsConnection = {
5434
+ __typename?: 'WalletTransactionsConnection';
5435
+ /** Edges on this page. */
5436
+ edges: Array<WalletTransactionEdge>;
5437
+ /** Pagination metadata. */
5438
+ pageInfo: ConnectionPageInfo;
5439
+ /** Total matching records across all pages, when known (null for sources that do not compute a total). */
5440
+ totalCount: Maybe<Scalars['Int']['output']>;
5441
+ };
3768
5442
  export type ActorQueryVariables = Exact<{
3769
5443
  uuid: Scalars['String']['input'];
3770
5444
  }>;
@@ -3855,6 +5529,7 @@ export type CreateActorMutation = {
3855
5529
  };
3856
5530
  export type DeleteActorMutationVariables = Exact<{
3857
5531
  uuid: Scalars['String']['input'];
5532
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
3858
5533
  }>;
3859
5534
  export type DeleteActorMutation = {
3860
5535
  __typename?: 'Mutation';
@@ -6193,6 +7868,7 @@ export type CreateTeamRoleMutation = {
6193
7868
  };
6194
7869
  export type DeleteTeamMutationVariables = Exact<{
6195
7870
  groupId: Scalars['BigInt']['input'];
7871
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
6196
7872
  }>;
6197
7873
  export type DeleteTeamMutation = {
6198
7874
  __typename?: 'Mutation';
@@ -6229,6 +7905,7 @@ export type JoinTeamMutation = {
6229
7905
  };
6230
7906
  export type LeaveTeamMutationVariables = Exact<{
6231
7907
  groupId: Scalars['BigInt']['input'];
7908
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
6232
7909
  }>;
6233
7910
  export type LeaveTeamMutation = {
6234
7911
  __typename?: 'Mutation';