@crowdedkingdomstudios/crowdyjs 3.0.0 → 4.0.0

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 (49) hide show
  1. package/README.md +125 -57
  2. package/dist/client.d.ts.map +1 -1
  3. package/dist/client.js +3 -1
  4. package/dist/crowdy-client.d.ts +41 -13
  5. package/dist/crowdy-client.d.ts.map +1 -1
  6. package/dist/crowdy-client.js +41 -16
  7. package/dist/domains/apps.d.ts +48 -20
  8. package/dist/domains/apps.d.ts.map +1 -1
  9. package/dist/domains/apps.js +58 -35
  10. package/dist/domains/auth.d.ts +33 -22
  11. package/dist/domains/auth.d.ts.map +1 -1
  12. package/dist/domains/auth.js +51 -33
  13. package/dist/domains/udp.d.ts +9 -1
  14. package/dist/domains/udp.d.ts.map +1 -1
  15. package/dist/domains/udp.js +14 -1
  16. package/dist/domains/users.d.ts +19 -16
  17. package/dist/domains/users.d.ts.map +1 -1
  18. package/dist/domains/users.js +21 -39
  19. package/dist/generated/graphql.d.ts +1077 -7
  20. package/dist/generated/graphql.d.ts.map +1 -1
  21. package/dist/generated/graphql.js +16 -9
  22. package/dist/index.d.ts +29 -14
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +30 -15
  25. package/dist/realtime.d.ts +3 -0
  26. package/dist/realtime.d.ts.map +1 -1
  27. package/dist/realtime.js +3 -0
  28. package/dist/types.d.ts +2 -31
  29. package/dist/types.d.ts.map +1 -1
  30. package/dist/types.js +5 -33
  31. package/dist/world.d.ts +9 -0
  32. package/dist/world.d.ts.map +1 -1
  33. package/dist/world.js +17 -0
  34. package/package.json +2 -1
  35. package/dist/domains/appAccess.d.ts +0 -23
  36. package/dist/domains/appAccess.d.ts.map +0 -1
  37. package/dist/domains/appAccess.js +0 -42
  38. package/dist/domains/billing.d.ts +0 -17
  39. package/dist/domains/billing.d.ts.map +0 -1
  40. package/dist/domains/billing.js +0 -31
  41. package/dist/domains/organizations.d.ts +0 -33
  42. package/dist/domains/organizations.d.ts.map +0 -1
  43. package/dist/domains/organizations.js +0 -90
  44. package/dist/domains/payments.d.ts +0 -20
  45. package/dist/domains/payments.d.ts.map +0 -1
  46. package/dist/domains/payments.js +0 -28
  47. package/dist/domains/quotas.d.ts +0 -20
  48. package/dist/domains/quotas.d.ts.map +0 -1
  49. package/dist/domains/quotas.js +0 -34
@@ -61,6 +61,7 @@ export type Actor = {
61
61
  createdAt: Scalars['DateTime']['output'];
62
62
  privateState: Maybe<Scalars['String']['output']>;
63
63
  publicState: Maybe<Scalars['String']['output']>;
64
+ updatedAt: Scalars['DateTime']['output'];
64
65
  userId: Scalars['BigInt']['output'];
65
66
  uuid: Scalars['ID']['output'];
66
67
  };
@@ -139,11 +140,13 @@ export type App = {
139
140
  createdAt: Scalars['DateTime']['output'];
140
141
  createdBy: Scalars['BigInt']['output'];
141
142
  description: Maybe<Scalars['String']['output']>;
143
+ gameApiUrl: Maybe<Scalars['String']['output']>;
142
144
  metadata: Maybe<Scalars['String']['output']>;
143
145
  name: Scalars['String']['output'];
144
146
  org: Maybe<Organization>;
145
147
  orgId: Scalars['BigInt']['output'];
146
148
  slug: Maybe<Scalars['String']['output']>;
149
+ splitMode: Scalars['Boolean']['output'];
147
150
  state: Maybe<Scalars['String']['output']>;
148
151
  status: AppStatus;
149
152
  updatedAt: Scalars['DateTime']['output'];
@@ -159,12 +162,21 @@ export type AppAccessTier = {
159
162
  isDefault: Scalars['Boolean']['output'];
160
163
  isFree: Scalars['Boolean']['output'];
161
164
  name: Scalars['String']['output'];
165
+ permissionKeys: Array<Scalars['String']['output']>;
162
166
  priceCents: Maybe<Scalars['BigInt']['output']>;
163
167
  status: Scalars['String']['output'];
164
168
  tierId: Scalars['BigInt']['output'];
165
169
  tierOrder: Scalars['Float']['output'];
166
170
  updatedAt: Scalars['DateTime']['output'];
167
171
  };
172
+ export type AppAvatarState = {
173
+ __typename?: 'AppAvatarState';
174
+ appId: Scalars['BigInt']['output'];
175
+ avatarId: Scalars['BigInt']['output'];
176
+ createdAt: Scalars['DateTime']['output'];
177
+ state: Maybe<Scalars['String']['output']>;
178
+ updatedAt: Scalars['DateTime']['output'];
179
+ };
168
180
  export type AppBudget = {
169
181
  __typename?: 'AppBudget';
170
182
  appBudgetId: Scalars['BigInt']['output'];
@@ -176,6 +188,17 @@ export type AppBudget = {
176
188
  periodStart: Scalars['DateTime']['output'];
177
189
  updatedAt: Scalars['DateTime']['output'];
178
190
  };
191
+ export type AppGroupPolicy = {
192
+ __typename?: 'AppGroupPolicy';
193
+ appId: Scalars['BigInt']['output'];
194
+ /** admin | member | anyone */
195
+ creationPolicy: Scalars['String']['output'];
196
+ /** open | request | invite | admin */
197
+ defaultMembershipPolicy: Scalars['String']['output'];
198
+ groupType: Scalars['String']['output'];
199
+ maxGroupsPerUser: Maybe<Scalars['Int']['output']>;
200
+ maxMembers: Maybe<Scalars['Int']['output']>;
201
+ };
179
202
  export type AppMarketplaceFilterInput = {
180
203
  orgSlug?: InputMaybe<Scalars['String']['input']>;
181
204
  query?: InputMaybe<Scalars['String']['input']>;
@@ -186,6 +209,25 @@ export declare enum AppStatus {
186
209
  Draft = "DRAFT",
187
210
  Live = "LIVE"
188
211
  }
212
+ export type AppUsageRollupRow = {
213
+ __typename?: 'AppUsageRollupRow';
214
+ appId: Scalars['String']['output'];
215
+ appName: Scalars['String']['output'];
216
+ appSlug: Scalars['String']['output'];
217
+ graphqlRecvBytes: Scalars['String']['output'];
218
+ graphqlSendBytes: Scalars['String']['output'];
219
+ replicationRecvBytes: Scalars['String']['output'];
220
+ replicationSendBytes: Scalars['String']['output'];
221
+ };
222
+ export type AppUsageSummary = {
223
+ __typename?: 'AppUsageSummary';
224
+ appId: Scalars['String']['output'];
225
+ graphqlRecvBytes: Scalars['String']['output'];
226
+ graphqlSendBytes: Scalars['String']['output'];
227
+ replicationRecvBytes: Scalars['String']['output'];
228
+ replicationSendBytes: Scalars['String']['output'];
229
+ topGraphqlOperations: Array<GraphqlOperationUsageRow>;
230
+ };
189
231
  export type AppUserAccess = {
190
232
  __typename?: 'AppUserAccess';
191
233
  appId: Scalars['BigInt']['output'];
@@ -210,6 +252,15 @@ export type AppsPage = {
210
252
  items: Array<App>;
211
253
  pageInfo: PageInfo;
212
254
  };
255
+ export type AssignGroupToGridInput = {
256
+ appId: Scalars['BigInt']['input'];
257
+ expiresAt?: InputMaybe<Scalars['DateTime']['input']>;
258
+ gridId: Scalars['BigInt']['input'];
259
+ groupId: Scalars['BigInt']['input'];
260
+ /** Optional: scope the grant to members holding this group role. Omit to grant to all members of the group. */
261
+ groupRoleId?: InputMaybe<Scalars['BigInt']['input']>;
262
+ permissionKeys: Array<Scalars['String']['input']>;
263
+ };
213
264
  export type AuthResponse = {
214
265
  __typename?: 'AuthResponse';
215
266
  gameTokenId: Scalars['String']['output'];
@@ -237,6 +288,16 @@ export type AvatarDto = {
237
288
  export type BatchActorLookupInput = {
238
289
  uuids: Array<Scalars['String']['input']>;
239
290
  };
291
+ export type BuddyLiveRates = {
292
+ __typename?: 'BuddyLiveRates';
293
+ clientRecvMbitPerSec: Scalars['Float']['output'];
294
+ clientRecvMsgsPerSec: Scalars['Float']['output'];
295
+ clientSendMbitPerSec: Scalars['Float']['output'];
296
+ clientSendMsgsPerSec: Scalars['Float']['output'];
297
+ clients: Scalars['Float']['output'];
298
+ serverId: Scalars['String']['output'];
299
+ updatedAt: Scalars['DateTime']['output'];
300
+ };
240
301
  export type Checkout = {
241
302
  __typename?: 'Checkout';
242
303
  amountCents: Maybe<Scalars['BigInt']['output']>;
@@ -341,16 +402,74 @@ export type ChunksByDistanceResponse = {
341
402
  limit: Maybe<Scalars['Int']['output']>;
342
403
  skip: Maybe<Scalars['Int']['output']>;
343
404
  };
405
+ export type CksBuddyHealth = {
406
+ __typename?: 'CksBuddyHealth';
407
+ clientPort: Maybe<Scalars['Int']['output']>;
408
+ clients: Maybe<Scalars['Int']['output']>;
409
+ /** Seconds since server_status.updated_at (game DB heartbeat). */
410
+ heartbeatAgeSec: Maybe<Scalars['Float']['output']>;
411
+ ip4: Maybe<Scalars['String']['output']>;
412
+ /** True when heartbeat is missing or older than the staleness threshold (~30s). Game-api rejects assignment when age > ~11s. */
413
+ isStale: Scalars['Boolean']['output'];
414
+ /** False when no server_status row exists for this environment. */
415
+ registered: Scalars['Boolean']['output'];
416
+ status: Maybe<Scalars['String']['output']>;
417
+ /** Operator-facing hint when multiplayer assignment may fail. */
418
+ troubleshootingHint: Scalars['String']['output'];
419
+ updatedAt: Maybe<Scalars['DateTime']['output']>;
420
+ };
421
+ export type CksDeployProgress = {
422
+ __typename?: 'CksDeployProgress';
423
+ /** Redeploy is allowed (failed deploy or stuck order cleared) */
424
+ canRetry: Scalars['Boolean']['output'];
425
+ changeOrderId: Scalars['String']['output'];
426
+ changeOrderStatus: Scalars['String']['output'];
427
+ currentStepKind: Maybe<Scalars['String']['output']>;
428
+ currentTaskKind: Maybe<Scalars['String']['output']>;
429
+ error: Maybe<Scalars['String']['output']>;
430
+ /** True when the deploy failed but the change order was left in_progress */
431
+ isStuck: Scalars['Boolean']['output'];
432
+ targetVersion: Maybe<Scalars['String']['output']>;
433
+ tasks: Array<CksDeployProgressTask>;
434
+ tasksFailed: Scalars['Int']['output'];
435
+ tasksInProgress: Scalars['Int']['output'];
436
+ tasksPending: Scalars['Int']['output'];
437
+ tasksSucceeded: Scalars['Int']['output'];
438
+ tasksTotal: Scalars['Int']['output'];
439
+ };
440
+ export type CksDeployProgressStep = {
441
+ __typename?: 'CksDeployProgressStep';
442
+ attempt: Scalars['Int']['output'];
443
+ error: Maybe<Scalars['String']['output']>;
444
+ id: Scalars['String']['output'];
445
+ kind: Scalars['String']['output'];
446
+ /** Human-readable step label for the org UI */
447
+ label: Scalars['String']['output'];
448
+ status: Scalars['String']['output'];
449
+ };
450
+ export type CksDeployProgressTask = {
451
+ __typename?: 'CksDeployProgressTask';
452
+ error: Maybe<Scalars['String']['output']>;
453
+ id: Scalars['String']['output'];
454
+ kind: Scalars['String']['output'];
455
+ label: Scalars['String']['output'];
456
+ status: Scalars['String']['output'];
457
+ steps: Array<CksDeployProgressStep>;
458
+ };
344
459
  export type CksEnvironment = {
345
460
  __typename?: 'CksEnvironment';
346
461
  billingGraceDeadline: Maybe<Scalars['DateTime']['output']>;
347
462
  billingStatus: Scalars['String']['output'];
463
+ caddyFlavor: Maybe<Scalars['String']['output']>;
348
464
  createdAt: Scalars['DateTime']['output'];
349
465
  databaseFlavor: Maybe<Scalars['String']['output']>;
350
466
  desiredEnvironmentVersion: Maybe<Scalars['String']['output']>;
351
467
  displayName: Scalars['String']['output'];
352
- graphqlFlavor: Maybe<Scalars['String']['output']>;
468
+ gameApiFlavor: Maybe<Scalars['String']['output']>;
469
+ gameApiMaxServers: Scalars['Int']['output'];
470
+ gameApiMinServers: Scalars['Int']['output'];
353
471
  id: Scalars['String']['output'];
472
+ loadBalancerCount: Scalars['Int']['output'];
354
473
  observedEnvironmentVersion: Maybe<Scalars['String']['output']>;
355
474
  orgId: Scalars['BigInt']['output'];
356
475
  primaryCloud: Scalars['String']['output'];
@@ -360,6 +479,8 @@ export type CksEnvironment = {
360
479
  subdomainHandle: Maybe<Scalars['String']['output']>;
361
480
  suspendedAt: Maybe<Scalars['DateTime']['output']>;
362
481
  udpBuddyFlavor: Maybe<Scalars['String']['output']>;
482
+ udpBuddyMaxServers: Scalars['Int']['output'];
483
+ udpBuddyMinServers: Scalars['Int']['output'];
363
484
  updatedAt: Scalars['DateTime']['output'];
364
485
  };
365
486
  export type CksEnvironmentAudit = {
@@ -373,6 +494,7 @@ export type CksEnvironmentAudit = {
373
494
  export type CksEnvironmentBillingResource = {
374
495
  __typename?: 'CksEnvironmentBillingResource';
375
496
  componentKind: Scalars['String']['output'];
497
+ currency: Scalars['String']['output'];
376
498
  customerHourlyPriceCents: Maybe<Scalars['BigInt']['output']>;
377
499
  environmentId: Scalars['String']['output'];
378
500
  flavorName: Maybe<Scalars['String']['output']>;
@@ -415,8 +537,12 @@ export type CksEnvironmentDetail = {
415
537
  __typename?: 'CksEnvironmentDetail';
416
538
  audit: Array<CksEnvironmentAudit>;
417
539
  billingResources: Array<CksEnvironmentBillingResource>;
540
+ /** Buddy UDP server heartbeat from mirrored server_status. Null when env is destroyed or management DB has no row. */
541
+ buddyHealth: Maybe<CksBuddyHealth>;
418
542
  changeOrders: Array<CksEnvironmentChangeOrder>;
419
543
  components: Array<CksEnvironmentComponent>;
544
+ /** Live deploy task/step progress for the active or most recent failed deploy */
545
+ deployProgress: Maybe<CksDeployProgress>;
420
546
  environment: CksEnvironment;
421
547
  outputs: Array<CksEnvironmentOutput>;
422
548
  secrets: Array<CksEnvironmentSecretValue>;
@@ -434,14 +560,20 @@ export type CksEnvironmentOutput = {
434
560
  export type CksEnvironmentQuote = {
435
561
  __typename?: 'CksEnvironmentQuote';
436
562
  availableBalanceCents: Scalars['BigInt']['output'];
563
+ caddyFlavor: Scalars['String']['output'];
437
564
  canCreate: Scalars['Boolean']['output'];
438
565
  currency: Scalars['String']['output'];
439
566
  databaseFlavor: Scalars['String']['output'];
440
567
  datacenter: Scalars['String']['output'];
441
568
  firstDayReserveCents: Scalars['BigInt']['output'];
442
- graphqlFlavor: Scalars['String']['output'];
569
+ gameApiFlavor: Scalars['String']['output'];
570
+ gameApiMaxServers: Scalars['Int']['output'];
571
+ gameApiMinServers: Scalars['Int']['output'];
443
572
  hourlyCostCents: Scalars['BigInt']['output'];
573
+ loadBalancerCount: Scalars['Int']['output'];
444
574
  udpBuddyFlavor: Scalars['String']['output'];
575
+ udpBuddyMaxServers: Scalars['Int']['output'];
576
+ udpBuddyMinServers: Scalars['Int']['output'];
445
577
  walletBalanceCents: Scalars['BigInt']['output'];
446
578
  };
447
579
  export type CksEnvironmentSecretValue = {
@@ -456,6 +588,8 @@ export type CksEnvironmentSecretValue = {
456
588
  };
457
589
  export type CksEnvironmentVersion = {
458
590
  __typename?: 'CksEnvironmentVersion';
591
+ /** Pinned cks-game-api git tag from the ingested manifest. */
592
+ gameApiGitTag: Maybe<Scalars['String']['output']>;
459
593
  notes: Maybe<Scalars['String']['output']>;
460
594
  releasedAt: Scalars['DateTime']['output'];
461
595
  status: Scalars['String']['output'];
@@ -463,20 +597,30 @@ export type CksEnvironmentVersion = {
463
597
  };
464
598
  export type CksOvhDatacenter = {
465
599
  __typename?: 'CksOvhDatacenter';
600
+ city: Maybe<Scalars['String']['output']>;
466
601
  continent: Maybe<Scalars['String']['output']>;
467
602
  isAvailable: Scalars['Boolean']['output'];
468
603
  name: Maybe<Scalars['String']['output']>;
469
604
  region: Scalars['String']['output'];
605
+ /** Number of customer-selectable instances in this datacenter after availability, pricing, and admin visibility filters. */
606
+ selectableInstanceCount: Scalars['Int']['output'];
470
607
  status: Scalars['String']['output'];
471
608
  syncedAt: Scalars['DateTime']['output'];
472
609
  };
610
+ /** Customer-selectable catalog instance flavor. Hidden, unavailable, or unpriced rows are omitted from environmentFlavors. */
473
611
  export type CksOvhFlavor = {
474
612
  __typename?: 'CksOvhFlavor';
613
+ availabilityStatus: Scalars['String']['output'];
475
614
  currency: Scalars['String']['output'];
476
- customerHourlyPriceCents: Maybe<Scalars['BigInt']['output']>;
615
+ /** Customer hourly price in cents. Non-null for every flavor returned from environmentFlavors. */
616
+ customerHourlyPriceCents: Scalars['BigInt']['output'];
617
+ /** Customer monthly reference price in cents. Display-only until monthly billing is implemented. */
618
+ customerMonthlyPriceCents: Maybe<Scalars['BigInt']['output']>;
477
619
  diskGb: Maybe<Scalars['Int']['output']>;
478
620
  flavorName: Scalars['String']['output'];
479
621
  flavorType: Maybe<Scalars['String']['output']>;
622
+ pricingMode: Scalars['String']['output'];
623
+ pricingSource: Maybe<Scalars['String']['output']>;
480
624
  quotaAvailable: Maybe<Scalars['Int']['output']>;
481
625
  ramMb: Maybe<Scalars['Int']['output']>;
482
626
  rawHourlyCostCents: Maybe<Scalars['BigInt']['output']>;
@@ -610,12 +754,249 @@ export type ClientTextPacketInput = {
610
754
  /** A unique identifier for the text source (typically the player UUID). Must be exactly 32 bytes when encoded as UTF-8. */
611
755
  uuid: Scalars['String']['input'];
612
756
  };
757
+ /** Operator-facing view of cks_environments. */
758
+ export type CpAdminEnvironment = {
759
+ __typename?: 'CpAdminEnvironment';
760
+ createdAt: Scalars['DateTime']['output'];
761
+ deletionProtectionEnabled: Scalars['Boolean']['output'];
762
+ deletionProtectionSetAt: Maybe<Scalars['DateTime']['output']>;
763
+ deletionProtectionSetByEmail: Maybe<Scalars['String']['output']>;
764
+ displayName: Scalars['String']['output'];
765
+ id: Scalars['ID']['output'];
766
+ orgId: Maybe<Scalars['String']['output']>;
767
+ primaryCloud: Scalars['String']['output'];
768
+ primaryRegion: Scalars['String']['output'];
769
+ slug: Scalars['String']['output'];
770
+ status: Scalars['String']['output'];
771
+ subdomainHandle: Maybe<Scalars['String']['output']>;
772
+ updatedAt: Scalars['DateTime']['output'];
773
+ };
774
+ export type CpAdminEnvironmentsPage = {
775
+ __typename?: 'CpAdminEnvironmentsPage';
776
+ page: Scalars['Int']['output'];
777
+ pageSize: Scalars['Int']['output'];
778
+ rows: Array<CpAdminEnvironment>;
779
+ total: Scalars['Int']['output'];
780
+ };
781
+ export type CpAuditEntry = {
782
+ __typename?: 'CpAuditEntry';
783
+ action: Scalars['String']['output'];
784
+ actorKind: Scalars['String']['output'];
785
+ actorUserId: Maybe<Scalars['String']['output']>;
786
+ createdAt: Scalars['DateTime']['output'];
787
+ entityId: Maybe<Scalars['String']['output']>;
788
+ entityKind: Maybe<Scalars['String']['output']>;
789
+ environmentId: Maybe<Scalars['String']['output']>;
790
+ id: Scalars['ID']['output'];
791
+ payloadJson: Maybe<Scalars['String']['output']>;
792
+ };
793
+ export type CpBuddyLiveRates = {
794
+ __typename?: 'CpBuddyLiveRates';
795
+ clientRecvMbitPerSec: Scalars['Float']['output'];
796
+ clientRecvMsgsPerSec: Scalars['Float']['output'];
797
+ clientSendMbitPerSec: Scalars['Float']['output'];
798
+ clientSendMsgsPerSec: Scalars['Float']['output'];
799
+ clients: Scalars['Float']['output'];
800
+ serverId: Scalars['String']['output'];
801
+ updatedAt: Scalars['DateTime']['output'];
802
+ };
803
+ export type CpChangeOrder = {
804
+ __typename?: 'CpChangeOrder';
805
+ claimedAt: Maybe<Scalars['DateTime']['output']>;
806
+ claimedBy: Maybe<Scalars['String']['output']>;
807
+ createdAt: Scalars['DateTime']['output'];
808
+ environmentId: Scalars['String']['output'];
809
+ error: Maybe<Scalars['String']['output']>;
810
+ finishedAt: Maybe<Scalars['DateTime']['output']>;
811
+ id: Scalars['ID']['output'];
812
+ kind: Scalars['String']['output'];
813
+ /** JSON-encoded payload */
814
+ payloadJson: Maybe<Scalars['String']['output']>;
815
+ status: Scalars['String']['output'];
816
+ updatedAt: Scalars['DateTime']['output'];
817
+ };
818
+ export type CpChangeOrderDetail = {
819
+ __typename?: 'CpChangeOrderDetail';
820
+ order: CpChangeOrder;
821
+ steps: Array<CpStepRow>;
822
+ tasks: Array<CpTaskRow>;
823
+ };
824
+ export type CpChangeOrdersPage = {
825
+ __typename?: 'CpChangeOrdersPage';
826
+ page: Scalars['Int']['output'];
827
+ pageSize: Scalars['Int']['output'];
828
+ rows: Array<CpChangeOrder>;
829
+ total: Scalars['Int']['output'];
830
+ };
831
+ export type CpEnvSecretRow = {
832
+ __typename?: 'CpEnvSecretRow';
833
+ createdAt: Scalars['DateTime']['output'];
834
+ environmentId: Scalars['String']['output'];
835
+ id: Scalars['ID']['output'];
836
+ kind: Maybe<Scalars['String']['output']>;
837
+ name: Scalars['String']['output'];
838
+ rotatedAt: Maybe<Scalars['DateTime']['output']>;
839
+ };
840
+ /** Operator-facing view of one ingested (or git-only pending) environment release manifest. */
841
+ export type CpEnvironmentVersionRow = {
842
+ __typename?: 'CpEnvironmentVersionRow';
843
+ buddyVersion: Maybe<Scalars['String']['output']>;
844
+ gameApiGitTag: Maybe<Scalars['String']['output']>;
845
+ /** True when a row exists in cks_environment_versions. */
846
+ inDb: Scalars['Boolean']['output'];
847
+ /** True when releases/<version>.yaml exists on the configured git ref. */
848
+ inGit: Scalars['Boolean']['output'];
849
+ ingestedAt: Scalars['DateTime']['output'];
850
+ /** True when this ingested available release is what org redeploy targets (newest available, or ENVIRONMENT_DEFAULT_VERSION). */
851
+ isLatestAvailable: Scalars['Boolean']['output'];
852
+ notes: Maybe<Scalars['String']['output']>;
853
+ releasedAt: Scalars['DateTime']['output'];
854
+ sourceCommit: Maybe<Scalars['String']['output']>;
855
+ status: Scalars['String']['output'];
856
+ updatedAt: Scalars['DateTime']['output'];
857
+ version: Scalars['String']['output'];
858
+ };
859
+ /** Operator release manifest list merged from git and cks_environment_versions. */
860
+ export type CpEnvironmentVersionsPage = {
861
+ __typename?: 'CpEnvironmentVersionsPage';
862
+ /** False when GitHub manifest listing failed (e.g. invalid GITHUB_PAT). Rows may still come from the database. */
863
+ gitSourceAvailable: Scalars['Boolean']['output'];
864
+ /** Version org redeploy resolves to when no explicit version is passed. */
865
+ latestAvailableVersion: Maybe<Scalars['String']['output']>;
866
+ rows: Array<CpEnvironmentVersionRow>;
867
+ };
868
+ export type CpOperatorUser = {
869
+ __typename?: 'CpOperatorUser';
870
+ createdAt: Scalars['DateTime']['output'];
871
+ email: Maybe<Scalars['String']['output']>;
872
+ gamertag: Maybe<Scalars['String']['output']>;
873
+ isOperator: Scalars['Boolean']['output'];
874
+ isSuperAdmin: Scalars['Boolean']['output'];
875
+ userId: Scalars['ID']['output'];
876
+ };
877
+ export type CpOvhCatalogRow = {
878
+ __typename?: 'CpOvhCatalogRow';
879
+ customerHourlyPriceCents: Maybe<Scalars['String']['output']>;
880
+ customerPricingMode: Scalars['String']['output'];
881
+ diskGb: Maybe<Scalars['Int']['output']>;
882
+ flavorName: Scalars['String']['output'];
883
+ inboundBandwidth: Maybe<Scalars['Int']['output']>;
884
+ outboundBandwidth: Maybe<Scalars['Int']['output']>;
885
+ ovhHourlyPriceCents: Maybe<Scalars['String']['output']>;
886
+ quotaAvailable: Maybe<Scalars['Int']['output']>;
887
+ ramMb: Maybe<Scalars['Int']['output']>;
888
+ region: Scalars['String']['output'];
889
+ vcpus: Maybe<Scalars['Int']['output']>;
890
+ };
891
+ /** Result of publishing an environment release from a game-api tag. */
892
+ export type CpPublishEnvironmentReleaseResult = {
893
+ __typename?: 'CpPublishEnvironmentReleaseResult';
894
+ /** True when releases/vX.Y.Z.yaml was committed to the manifest git ref. */
895
+ committedToGit: Scalars['Boolean']['output'];
896
+ /** Set when ingest succeeded but the GitHub manifest commit failed. */
897
+ gitCommitError: Maybe<Scalars['String']['output']>;
898
+ schemaChanged: Scalars['Boolean']['output'];
899
+ version: CpEnvironmentVersionRow;
900
+ };
901
+ export type CpSecretRow = {
902
+ __typename?: 'CpSecretRow';
903
+ createdAt: Scalars['DateTime']['output'];
904
+ environmentId: Scalars['String']['output'];
905
+ id: Scalars['ID']['output'];
906
+ kind: Maybe<Scalars['String']['output']>;
907
+ name: Scalars['String']['output'];
908
+ rotatedAt: Maybe<Scalars['DateTime']['output']>;
909
+ };
910
+ export type CpStepRow = {
911
+ __typename?: 'CpStepRow';
912
+ attempt: Scalars['Int']['output'];
913
+ claimedBy: Maybe<Scalars['String']['output']>;
914
+ createdAt: Scalars['DateTime']['output'];
915
+ error: Maybe<Scalars['String']['output']>;
916
+ finishedAt: Maybe<Scalars['DateTime']['output']>;
917
+ handleJson: Maybe<Scalars['String']['output']>;
918
+ id: Scalars['ID']['output'];
919
+ idempotencyKey: Maybe<Scalars['String']['output']>;
920
+ intentJson: Maybe<Scalars['String']['output']>;
921
+ kind: Scalars['String']['output'];
922
+ ordinal: Scalars['Int']['output'];
923
+ outputJson: Maybe<Scalars['String']['output']>;
924
+ payloadJson: Maybe<Scalars['String']['output']>;
925
+ recheckAt: Maybe<Scalars['DateTime']['output']>;
926
+ startedAt: Maybe<Scalars['DateTime']['output']>;
927
+ status: Scalars['String']['output'];
928
+ taskId: Scalars['String']['output'];
929
+ updatedAt: Scalars['DateTime']['output'];
930
+ };
931
+ export type CpTaskRow = {
932
+ __typename?: 'CpTaskRow';
933
+ changeOrderId: Scalars['String']['output'];
934
+ /** JSON-encoded context */
935
+ contextJson: Maybe<Scalars['String']['output']>;
936
+ createdAt: Scalars['DateTime']['output'];
937
+ dependsOn: Array<Scalars['String']['output']>;
938
+ environmentId: Maybe<Scalars['String']['output']>;
939
+ error: Maybe<Scalars['String']['output']>;
940
+ finishedAt: Maybe<Scalars['DateTime']['output']>;
941
+ id: Scalars['ID']['output'];
942
+ kind: Scalars['String']['output'];
943
+ ordinal: Scalars['Int']['output'];
944
+ startedAt: Maybe<Scalars['DateTime']['output']>;
945
+ status: Scalars['String']['output'];
946
+ updatedAt: Scalars['DateTime']['output'];
947
+ };
948
+ /** cks-game-api tag on GitHub that is not yet pinned by any available environment release. */
949
+ export type CpUnreleasedGameApiTag = {
950
+ __typename?: 'CpUnreleasedGameApiTag';
951
+ /** Environment version that Publish & ingest would create (v0.1.N+1). */
952
+ proposedEnvironmentVersion: Scalars['String']['output'];
953
+ /** True when create-schema.sql differs between this tag and the current deploy-target game-api pin. */
954
+ schemaChanged: Scalars['Boolean']['output'];
955
+ tag: Scalars['String']['output'];
956
+ /** ISO timestamp when the tag was created on GitHub. */
957
+ taggedAt: Maybe<Scalars['String']['output']>;
958
+ };
959
+ /** Game-api tags eligible for one-click environment release publish. */
960
+ export type CpUnreleasedGameApiTagsPage = {
961
+ __typename?: 'CpUnreleasedGameApiTagsPage';
962
+ /** gameApiGitTag on the current org deploy target, if any. */
963
+ currentDeployTargetGameApiTag: Maybe<Scalars['String']['output']>;
964
+ /** False when GitHub tag listing failed (e.g. invalid GITHUB_PAT). */
965
+ gitSourceAvailable: Scalars['Boolean']['output'];
966
+ tags: Array<CpUnreleasedGameApiTag>;
967
+ };
968
+ export type CpUsageMinuteRow = {
969
+ __typename?: 'CpUsageMinuteRow';
970
+ minute: Scalars['DateTime']['output'];
971
+ recvBytes: Scalars['String']['output'];
972
+ recvMsgs: Maybe<Scalars['String']['output']>;
973
+ sendBytes: Scalars['String']['output'];
974
+ sendMsgs: Maybe<Scalars['String']['output']>;
975
+ };
976
+ export type CpUsageRatePeaks = {
977
+ __typename?: 'CpUsageRatePeaks';
978
+ avgSendMbitPerSec: Scalars['Float']['output'];
979
+ avgSendMsgsPerSec: Scalars['Float']['output'];
980
+ peakSendMbitPerSec: Scalars['Float']['output'];
981
+ peakSendMsgsPerSec: Scalars['Float']['output'];
982
+ sampleMinutes: Scalars['Float']['output'];
983
+ };
984
+ export type CpUsageSummary = {
985
+ __typename?: 'CpUsageSummary';
986
+ buddyLive: Maybe<CpBuddyLiveRates>;
987
+ environmentSlug: Scalars['String']['output'];
988
+ graphql: Array<CpUsageMinuteRow>;
989
+ orgId: Maybe<Scalars['String']['output']>;
990
+ replication: Array<CpUsageMinuteRow>;
991
+ replicationRates: CpUsageRatePeaks;
992
+ };
613
993
  export type CreateAccessTierInput = {
614
994
  appId: Scalars['BigInt']['input'];
615
995
  description?: InputMaybe<Scalars['String']['input']>;
616
996
  isDefault?: InputMaybe<Scalars['Boolean']['input']>;
617
997
  isFree?: InputMaybe<Scalars['Boolean']['input']>;
618
998
  name: Scalars['String']['input'];
999
+ permissionKeys?: InputMaybe<Array<Scalars['String']['input']>>;
619
1000
  tierOrder?: InputMaybe<Scalars['Int']['input']>;
620
1001
  };
621
1002
  export type CreateActorInput = {
@@ -650,13 +1031,25 @@ export type CreateCheckoutInput = {
650
1031
  tierId?: InputMaybe<Scalars['BigInt']['input']>;
651
1032
  };
652
1033
  export type CreateEnvironmentInput = {
1034
+ appIds?: InputMaybe<Array<Scalars['String']['input']>>;
1035
+ /** Flavor name from environmentFlavors(datacenter) for the Caddy LB VMs in front of the game-api fleet; must have a published hourly price. */
1036
+ caddyFlavor: Scalars['String']['input'];
1037
+ /** Flavor name from environmentFlavors(datacenter); must have a published hourly price. */
653
1038
  databaseFlavor: Scalars['String']['input'];
654
1039
  datacenter: Scalars['String']['input'];
655
1040
  displayName: Scalars['String']['input'];
656
- graphqlFlavor: Scalars['String']['input'];
1041
+ /** Flavor name from environmentFlavors(datacenter) for per-tenant game-api VMs; must have a published hourly price. */
1042
+ gameApiFlavor: Scalars['String']['input'];
1043
+ gameApiMaxServers: Scalars['Int']['input'];
1044
+ gameApiMinServers: Scalars['Int']['input'];
1045
+ loadBalancerCount: Scalars['Int']['input'];
657
1046
  orgId: Scalars['BigInt']['input'];
658
- slug: Scalars['String']['input'];
1047
+ /** Optional explicit slug for scripts/E2E. When omitted, the API generates an opaque e-{12} slug. */
1048
+ slug?: InputMaybe<Scalars['String']['input']>;
1049
+ /** Flavor name from environmentFlavors(datacenter); must have a published hourly price. */
659
1050
  udpBuddyFlavor: Scalars['String']['input'];
1051
+ udpBuddyMaxServers: Scalars['Int']['input'];
1052
+ udpBuddyMinServers: Scalars['Int']['input'];
660
1053
  x25519PublicKeyBase64: Scalars['String']['input'];
661
1054
  };
662
1055
  export type CreateGridInput = {
@@ -669,6 +1062,12 @@ export type CreateGridResponse = {
669
1062
  error: UdpErrorCode;
670
1063
  grid: Maybe<Grid>;
671
1064
  };
1065
+ export type CreateGroupRoleInput = {
1066
+ groupId: Scalars['BigInt']['input'];
1067
+ permissions?: InputMaybe<Array<Scalars['String']['input']>>;
1068
+ rank?: InputMaybe<Scalars['Int']['input']>;
1069
+ roleName: Scalars['String']['input'];
1070
+ };
672
1071
  export type CreateOrgRoleInput = {
673
1072
  description?: InputMaybe<Scalars['String']['input']>;
674
1073
  orgId: Scalars['BigInt']['input'];
@@ -684,6 +1083,13 @@ export type CreateOrganizationInput = {
684
1083
  name: Scalars['String']['input'];
685
1084
  slug: Scalars['String']['input'];
686
1085
  };
1086
+ export type CreateTeamInput = {
1087
+ appId: Scalars['BigInt']['input'];
1088
+ description?: InputMaybe<Scalars['String']['input']>;
1089
+ /** open | request | invite | admin. Defaults to the app policy. */
1090
+ membershipPolicy?: InputMaybe<Scalars['String']['input']>;
1091
+ name: Scalars['String']['input'];
1092
+ };
687
1093
  export type CreateUserAppStateInput = {
688
1094
  appId: Scalars['BigInt']['input'];
689
1095
  state?: InputMaybe<Scalars['String']['input']>;
@@ -693,11 +1099,41 @@ export type DestroyEnvironmentInput = {
693
1099
  slug: Scalars['String']['input'];
694
1100
  };
695
1101
  export type EnvironmentQuoteInput = {
1102
+ /** Flavor name from environmentFlavors(datacenter) for the Caddy LB VMs in front of the game-api fleet; must have a published hourly price. */
1103
+ caddyFlavor: Scalars['String']['input'];
1104
+ /** Flavor name from environmentFlavors(datacenter); must have a published hourly price. */
696
1105
  databaseFlavor: Scalars['String']['input'];
697
1106
  datacenter: Scalars['String']['input'];
698
- graphqlFlavor: Scalars['String']['input'];
1107
+ /** Flavor name from environmentFlavors(datacenter) for per-tenant game-api VMs; must have a published hourly price. */
1108
+ gameApiFlavor: Scalars['String']['input'];
1109
+ gameApiMaxServers: Scalars['Int']['input'];
1110
+ gameApiMinServers: Scalars['Int']['input'];
1111
+ loadBalancerCount: Scalars['Int']['input'];
699
1112
  orgId: Scalars['BigInt']['input'];
1113
+ /** Flavor name from environmentFlavors(datacenter); must have a published hourly price. */
700
1114
  udpBuddyFlavor: Scalars['String']['input'];
1115
+ udpBuddyMaxServers: Scalars['Int']['input'];
1116
+ udpBuddyMinServers: Scalars['Int']['input'];
1117
+ };
1118
+ export type EnvironmentUsageRollupRow = {
1119
+ __typename?: 'EnvironmentUsageRollupRow';
1120
+ displayName: Scalars['String']['output'];
1121
+ environmentId: Scalars['String']['output'];
1122
+ environmentSlug: Scalars['String']['output'];
1123
+ graphqlRecvBytes: Scalars['String']['output'];
1124
+ graphqlSendBytes: Scalars['String']['output'];
1125
+ replicationRecvBytes: Scalars['String']['output'];
1126
+ replicationSendBytes: Scalars['String']['output'];
1127
+ };
1128
+ export type EnvironmentUsageSummary = {
1129
+ __typename?: 'EnvironmentUsageSummary';
1130
+ buddyLive: Maybe<BuddyLiveRates>;
1131
+ environmentId: Scalars['String']['output'];
1132
+ environmentSlug: Scalars['String']['output'];
1133
+ graphql: Array<UsageMinuteRow>;
1134
+ orgId: Scalars['String']['output'];
1135
+ replication: Array<UsageMinuteRow>;
1136
+ replicationRates: UsageRatePeaks;
701
1137
  };
702
1138
  export type FreePlayWindowInfo = {
703
1139
  __typename?: 'FreePlayWindowInfo';
@@ -720,6 +1156,16 @@ export type GameClientBootstrap = {
720
1156
  udpProxyConnectionStatus: UdpProxyConnectionStatus;
721
1157
  versionInfo: ServerVersionInfo;
722
1158
  };
1159
+ /** 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. */
1160
+ export type GameHost = {
1161
+ __typename?: 'GameHost';
1162
+ /** How many actors the host user currently owns in this app (always >= 1 when this object is returned). */
1163
+ actorCount: Scalars['Int']['output'];
1164
+ /** Timestamp of the host's earliest still-connected actor (`MIN(actors.created_at)` for the host's group). Used as the primary election ordering key. */
1165
+ earliestActorJoinedAt: Scalars['DateTime']['output'];
1166
+ /** 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. */
1167
+ hostUserId: Scalars['BigInt']['output'];
1168
+ };
723
1169
  /** Generic error response from the UDP game server. Uses the sequence number to match the original request that failed. */
724
1170
  export type GenericErrorResponse = {
725
1171
  __typename?: 'GenericErrorResponse';
@@ -756,15 +1202,39 @@ export type GrantAppAccessInput = {
756
1202
  tierId?: InputMaybe<Scalars['BigInt']['input']>;
757
1203
  userId: Scalars['BigInt']['input'];
758
1204
  };
1205
+ export type GrantGridPermissionsInput = {
1206
+ appId: Scalars['BigInt']['input'];
1207
+ expiresAt?: InputMaybe<Scalars['DateTime']['input']>;
1208
+ gridId: Scalars['BigInt']['input'];
1209
+ permissionKeys: Array<Scalars['String']['input']>;
1210
+ userId: Scalars['BigInt']['input'];
1211
+ };
759
1212
  export type GraphQlServer = {
760
1213
  __typename?: 'GraphQLServer';
1214
+ apiPort: Scalars['Int']['output'];
1215
+ cpuUsagePct: Maybe<Scalars['Float']['output']>;
761
1216
  createdAt: Scalars['DateTime']['output'];
762
1217
  graphqlServerId: Scalars['ID']['output'];
763
1218
  ip4: Maybe<Scalars['String']['output']>;
764
1219
  ip6: Maybe<Scalars['String']['output']>;
1220
+ /** Logical kind of GraphQL service: 'management-api' or 'game-api'. */
1221
+ kind: Maybe<Scalars['String']['output']>;
1222
+ loadAverage1m: Maybe<Scalars['Float']['output']>;
1223
+ memoryUsagePct: Maybe<Scalars['Float']['output']>;
1224
+ providerInstanceId: Maybe<Scalars['String']['output']>;
1225
+ publicIp4: Maybe<Scalars['String']['output']>;
1226
+ publicIp6: Maybe<Scalars['String']['output']>;
1227
+ runtimeServerId: Maybe<Scalars['String']['output']>;
765
1228
  status: ServerState;
766
1229
  updatedAt: Scalars['DateTime']['output'];
767
1230
  };
1231
+ export type GraphqlOperationUsageRow = {
1232
+ __typename?: 'GraphqlOperationUsageRow';
1233
+ operationName: Scalars['String']['output'];
1234
+ recvBytes: Scalars['String']['output'];
1235
+ sendBytes: Scalars['String']['output'];
1236
+ totalOps: Scalars['String']['output'];
1237
+ };
768
1238
  export type Grid = {
769
1239
  __typename?: 'Grid';
770
1240
  app_id: Scalars['BigInt']['output'];
@@ -773,6 +1243,74 @@ export type Grid = {
773
1243
  high_chunk: ChunkCoordinates;
774
1244
  low_chunk: ChunkCoordinates;
775
1245
  };
1246
+ export type GridGroupGrant = {
1247
+ __typename?: 'GridGroupGrant';
1248
+ appId: Scalars['BigInt']['output'];
1249
+ expiresAt: Maybe<Scalars['DateTime']['output']>;
1250
+ gridId: Scalars['BigInt']['output'];
1251
+ groupId: Scalars['BigInt']['output'];
1252
+ /** Null means the grant applies to all members of the group. */
1253
+ groupRoleId: Maybe<Scalars['BigInt']['output']>;
1254
+ permissionKey: Scalars['String']['output'];
1255
+ };
1256
+ export type GridPermissionLimits = {
1257
+ __typename?: 'GridPermissionLimits';
1258
+ appId: Scalars['BigInt']['output'];
1259
+ gridId: Scalars['BigInt']['output'];
1260
+ /** The permission keys this grid is limited to. Empty means no limit (every active grid permission is allowed). */
1261
+ permissionKeys: Array<Scalars['String']['output']>;
1262
+ };
1263
+ export type GridUserPermissions = {
1264
+ __typename?: 'GridUserPermissions';
1265
+ appId: Scalars['BigInt']['output'];
1266
+ gridId: Scalars['BigInt']['output'];
1267
+ permissionKeys: Array<Scalars['String']['output']>;
1268
+ userId: Scalars['BigInt']['output'];
1269
+ };
1270
+ export type Group = {
1271
+ __typename?: 'Group';
1272
+ appId: Scalars['BigInt']['output'];
1273
+ createdAt: Scalars['DateTime']['output'];
1274
+ description: Maybe<Scalars['String']['output']>;
1275
+ groupId: Scalars['BigInt']['output'];
1276
+ groupType: Scalars['String']['output'];
1277
+ membershipPolicy: Scalars['String']['output'];
1278
+ name: Scalars['String']['output'];
1279
+ ownerUserId: Maybe<Scalars['BigInt']['output']>;
1280
+ status: Scalars['String']['output'];
1281
+ };
1282
+ export type GroupMember = {
1283
+ __typename?: 'GroupMember';
1284
+ createdAt: Scalars['DateTime']['output'];
1285
+ groupId: Scalars['BigInt']['output'];
1286
+ groupMemberId: Scalars['BigInt']['output'];
1287
+ roles: Array<GroupRole>;
1288
+ status: Scalars['String']['output'];
1289
+ userId: Scalars['BigInt']['output'];
1290
+ };
1291
+ export type GroupMembership = {
1292
+ __typename?: 'GroupMembership';
1293
+ group: Group;
1294
+ joinedAt: Scalars['DateTime']['output'];
1295
+ permissions: Array<Scalars['String']['output']>;
1296
+ roles: Array<GroupRole>;
1297
+ };
1298
+ export type GroupRole = {
1299
+ __typename?: 'GroupRole';
1300
+ createdAt: Scalars['DateTime']['output'];
1301
+ groupId: Scalars['BigInt']['output'];
1302
+ groupRoleId: Scalars['BigInt']['output'];
1303
+ isSystem: Scalars['Boolean']['output'];
1304
+ permissions: Array<Scalars['String']['output']>;
1305
+ rank: Scalars['Int']['output'];
1306
+ roleName: Scalars['String']['output'];
1307
+ };
1308
+ export type IngestEnvironmentVersionInput = {
1309
+ force?: Scalars['Boolean']['input'];
1310
+ notes?: InputMaybe<Scalars['String']['input']>;
1311
+ status?: InputMaybe<Scalars['String']['input']>;
1312
+ version: Scalars['String']['input'];
1313
+ };
776
1314
  export type InviteOrgMemberInput = {
777
1315
  orgId: Scalars['BigInt']['input'];
778
1316
  userId: Scalars['BigInt']['input'];
@@ -805,8 +1343,15 @@ export type LoginUserInput = {
805
1343
  };
806
1344
  export type Mutation = {
807
1345
  __typename?: 'Mutation';
1346
+ /** 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. */
1347
+ actorHeartbeat: Maybe<GameHost>;
1348
+ /** Add a user to a team or approve a pending request (manage_members). */
1349
+ addTeamMember: GroupMember;
808
1350
  archiveAccessTier: AppAccessTier;
809
1351
  archiveApp: App;
1352
+ assignGroupToGrid: Array<GridGroupGrant>;
1353
+ /** Captures an approved PayPal order after the hosted checkout redirects back. Wallet credit still reconciles through PayPal webhooks. */
1354
+ capturePaypalCheckout: Checkout;
810
1355
  changePassword: Scalars['Boolean']['output'];
811
1356
  confirmEmail: Scalars['Boolean']['output'];
812
1357
  /** 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. */
@@ -817,35 +1362,66 @@ export type Mutation = {
817
1362
  createAvatar: Avatar;
818
1363
  /** 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. */
819
1364
  createCheckout: Checkout;
1365
+ /** 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. */
820
1366
  createEnvironment: CksEnvironmentDetail;
821
1367
  createGrid: CreateGridResponse;
822
1368
  createOrgRole: OrgRole;
823
1369
  /** Returns the plaintext token exactly once. Save it; subsequent queries only show metadata. */
824
1370
  createOrgToken: OrgTokenWithSecret;
825
1371
  createOrganization: Organization;
1372
+ /** Create a team. Allowed per the app team policy (admin | member | anyone). The creator becomes the owner with a system leader role. */
1373
+ createTeam: Group;
1374
+ /** Create a team role (manage_roles). */
1375
+ createTeamRole: GroupRole;
826
1376
  deleteActor: Actor;
827
1377
  deleteAvatar: Avatar;
1378
+ deleteCpSecret: Scalars['Boolean']['output'];
828
1379
  /** Soft-deletes the caller's account: anonymizes PII, revokes sessions. Wallet, voxel, and donation history stays intact via FK. */
829
1380
  deleteMyAccount: Scalars['Boolean']['output'];
830
1381
  deleteOrgRole: Scalars['Boolean']['output'];
831
1382
  deleteQuota: Scalars['Boolean']['output'];
1383
+ /** Delete a team (manage_group). */
1384
+ deleteTeam: Scalars['Boolean']['output'];
1385
+ /** Delete a non-system team role (manage_roles). */
1386
+ deleteTeamRole: Scalars['Boolean']['output'];
832
1387
  deleteUserAppState: UserAppState;
833
1388
  destroyEnvironment: CksEnvironmentChangeOrder;
834
1389
  /** 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). */
835
1390
  disconnectUdpProxy: Scalars['Boolean']['output'];
836
1391
  forceLogoutUser: Scalars['Boolean']['output'];
837
1392
  grantAppAccess: AppUserAccess;
1393
+ grantGridPermissions: GridUserPermissions;
1394
+ ingestEnvironmentVersion: CpEnvironmentVersionRow;
838
1395
  inviteOrgMember: OrgMember;
1396
+ /** Join a team. Honors the team membership policy (open -> active, request -> pending, otherwise rejected). */
1397
+ joinTeam: GroupMember;
1398
+ /** Leave a team. */
1399
+ leaveTeam: Scalars['Boolean']['output'];
839
1400
  login: AuthResponse;
840
1401
  logout: Scalars['Boolean']['output'];
841
1402
  logoutAllDevices: Scalars['Boolean']['output'];
1403
+ publishEnvironmentReleaseFromGameApiTag: CpPublishEnvironmentReleaseResult;
1404
+ /** Permanently deletes a destroyed environment record from the platform. Cloud resources must already be torn down via destroyEnvironment. */
1405
+ purgeEnvironment: Scalars['Boolean']['output'];
1406
+ putCpEnvSecret: CpEnvSecretRow;
1407
+ putCpSecret: CpSecretRow;
1408
+ /** 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. */
1409
+ redeployEnvironment: CksEnvironmentChangeOrder;
842
1410
  register: AuthResponse;
843
1411
  removeOrgMember: Scalars['Boolean']['output'];
1412
+ /** Remove a member from a team (manage_members; members may remove themselves). */
1413
+ removeTeamMember: Scalars['Boolean']['output'];
844
1414
  requestPasswordReset: Scalars['Boolean']['output'];
1415
+ /** Request to join a request-only team (creates a pending membership a manager can approve). */
1416
+ requestToJoinTeam: GroupMember;
845
1417
  resendConfirmationEmail: Scalars['Boolean']['output'];
846
1418
  resetPassword: Scalars['Boolean']['output'];
1419
+ /** 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. */
1420
+ restartEnvironmentServices: CksEnvironmentChangeOrder;
847
1421
  resumeEnvironment: CksEnvironmentChangeOrder;
848
1422
  revokeAppAccess: AppUserAccess;
1423
+ revokeGridPermissions: GridUserPermissions;
1424
+ revokeGroupFromGrid: Array<GridGroupGrant>;
849
1425
  revokeOrgToken: Scalars['Boolean']['output'];
850
1426
  /** 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. */
851
1427
  rollbackVoxelUpdates: Array<RollbackVoxelEventResult>;
@@ -855,6 +1431,8 @@ export type Mutation = {
855
1431
  sendAudioPacket: Scalars['Boolean']['output'];
856
1432
  /** Send a client event to the game server. Opens a UDP proxy session automatically if none exists; related notifications arrive on udpNotifications. */
857
1433
  sendClientEvent: Scalars['Boolean']['output'];
1434
+ /** 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. */
1435
+ sendSingleActorMessage: Scalars['Boolean']['output'];
858
1436
  /** Send a text (chat) packet to the game server. Opens a UDP proxy session automatically if none exists; notifications arrive on udpNotifications. */
859
1437
  sendTextPacket: Scalars['Boolean']['output'];
860
1438
  /** Send a voxel update to the game server. Opens a UDP proxy session automatically if none exists; responses arrive on udpNotifications. */
@@ -863,28 +1441,51 @@ export type Mutation = {
863
1441
  /** Super admin only. Used to take down or relist apps platform-wide. */
864
1442
  setAppVisibility: App;
865
1443
  setEarlyAccessOverride: User;
1444
+ setEnvironmentDeletionProtection: Scalars['Boolean']['output'];
1445
+ setGridPermissionLimits: GridPermissionLimits;
1446
+ /** Super-admin only. Flip users.is_operator to grant or revoke control-plane / operator access. */
1447
+ setOperator: User;
866
1448
  /** Super admin only. Used to freeze/unfreeze orgs platform-wide. */
867
1449
  setOrgStatus: Organization;
868
1450
  setQuota: ServiceQuota;
869
1451
  setSuperAdmin: User;
1452
+ /** Replace a member's roles (manage_roles). */
1453
+ setTeamMemberRoles: GroupMember;
1454
+ /** Set who may create teams in an app and the default membership policy for new teams (requires manage_apps). */
1455
+ setTeamPolicy: AppGroupPolicy;
870
1456
  teleportRequest: TeleportResponse;
871
1457
  updateAccessTier: AppAccessTier;
872
1458
  updateActor: Actor;
873
1459
  updateActorState: Actor;
874
1460
  updateApp: App;
875
1461
  updateAvatar: Avatar;
1462
+ /** Set an avatar's per-app state. Only the avatar's owner may write; all players can read it. */
1463
+ updateAvatarAppState: AppAvatarState;
876
1464
  updateAvatarState: Avatar;
877
1465
  updateChunk: Chunk;
878
1466
  updateChunkLods: Maybe<Chunk>;
879
1467
  updateChunkState: Maybe<Chunk>;
1468
+ updateEnvironmentScaling: CksEnvironmentChangeOrder;
880
1469
  updateGamertag: User;
881
1470
  updateOrgMemberRoles: OrgMember;
882
1471
  updateOrgRole: OrgRole;
883
1472
  updateOrgToken: OrgToken;
1473
+ /** Update team name/description/membership policy (manage_group). */
1474
+ updateTeam: Group;
1475
+ /** Update a team role (manage_roles). */
1476
+ updateTeamRole: GroupRole;
884
1477
  updateUserAppState: UserAppState;
885
1478
  updateUserState: User;
886
1479
  updateUserType: User;
887
1480
  updateVoxel: Voxel;
1481
+ yankEnvironmentVersion: Scalars['Boolean']['output'];
1482
+ };
1483
+ export type MutationActorHeartbeatArgs = {
1484
+ appId: Scalars['BigInt']['input'];
1485
+ };
1486
+ export type MutationAddTeamMemberArgs = {
1487
+ groupId: Scalars['BigInt']['input'];
1488
+ userId: Scalars['BigInt']['input'];
888
1489
  };
889
1490
  export type MutationArchiveAccessTierArgs = {
890
1491
  tierId: Scalars['BigInt']['input'];
@@ -892,6 +1493,12 @@ export type MutationArchiveAccessTierArgs = {
892
1493
  export type MutationArchiveAppArgs = {
893
1494
  appId: Scalars['BigInt']['input'];
894
1495
  };
1496
+ export type MutationAssignGroupToGridArgs = {
1497
+ input: AssignGroupToGridInput;
1498
+ };
1499
+ export type MutationCapturePaypalCheckoutArgs = {
1500
+ orderId: Scalars['String']['input'];
1501
+ };
895
1502
  export type MutationChangePasswordArgs = {
896
1503
  currentPassword: Scalars['String']['input'];
897
1504
  newPassword: Scalars['String']['input'];
@@ -929,18 +1536,34 @@ export type MutationCreateOrgTokenArgs = {
929
1536
  export type MutationCreateOrganizationArgs = {
930
1537
  input: CreateOrganizationInput;
931
1538
  };
1539
+ export type MutationCreateTeamArgs = {
1540
+ input: CreateTeamInput;
1541
+ };
1542
+ export type MutationCreateTeamRoleArgs = {
1543
+ input: CreateGroupRoleInput;
1544
+ };
932
1545
  export type MutationDeleteActorArgs = {
933
1546
  uuid: Scalars['String']['input'];
934
1547
  };
935
1548
  export type MutationDeleteAvatarArgs = {
936
1549
  id: Scalars['BigInt']['input'];
937
1550
  };
1551
+ export type MutationDeleteCpSecretArgs = {
1552
+ environmentId: Scalars['String']['input'];
1553
+ name: Scalars['String']['input'];
1554
+ };
938
1555
  export type MutationDeleteOrgRoleArgs = {
939
1556
  orgRoleId: Scalars['BigInt']['input'];
940
1557
  };
941
1558
  export type MutationDeleteQuotaArgs = {
942
1559
  quotaId: Scalars['BigInt']['input'];
943
1560
  };
1561
+ export type MutationDeleteTeamArgs = {
1562
+ groupId: Scalars['BigInt']['input'];
1563
+ };
1564
+ export type MutationDeleteTeamRoleArgs = {
1565
+ groupRoleId: Scalars['BigInt']['input'];
1566
+ };
944
1567
  export type MutationDeleteUserAppStateArgs = {
945
1568
  appId: Scalars['BigInt']['input'];
946
1569
  };
@@ -953,12 +1576,45 @@ export type MutationForceLogoutUserArgs = {
953
1576
  export type MutationGrantAppAccessArgs = {
954
1577
  input: GrantAppAccessInput;
955
1578
  };
1579
+ export type MutationGrantGridPermissionsArgs = {
1580
+ input: GrantGridPermissionsInput;
1581
+ };
1582
+ export type MutationIngestEnvironmentVersionArgs = {
1583
+ input: IngestEnvironmentVersionInput;
1584
+ };
956
1585
  export type MutationInviteOrgMemberArgs = {
957
1586
  input: InviteOrgMemberInput;
958
1587
  };
1588
+ export type MutationJoinTeamArgs = {
1589
+ groupId: Scalars['BigInt']['input'];
1590
+ };
1591
+ export type MutationLeaveTeamArgs = {
1592
+ groupId: Scalars['BigInt']['input'];
1593
+ };
959
1594
  export type MutationLoginArgs = {
960
1595
  loginUserInput: LoginUserInput;
961
1596
  };
1597
+ export type MutationPublishEnvironmentReleaseFromGameApiTagArgs = {
1598
+ input: PublishEnvironmentReleaseFromGameApiTagInput;
1599
+ };
1600
+ export type MutationPurgeEnvironmentArgs = {
1601
+ input: PurgeEnvironmentInput;
1602
+ };
1603
+ export type MutationPutCpEnvSecretArgs = {
1604
+ environmentId: Scalars['String']['input'];
1605
+ kind?: InputMaybe<Scalars['String']['input']>;
1606
+ name: Scalars['String']['input'];
1607
+ plaintext: Scalars['String']['input'];
1608
+ };
1609
+ export type MutationPutCpSecretArgs = {
1610
+ environmentId: Scalars['String']['input'];
1611
+ kind?: InputMaybe<Scalars['String']['input']>;
1612
+ name: Scalars['String']['input'];
1613
+ plaintext: Scalars['String']['input'];
1614
+ };
1615
+ export type MutationRedeployEnvironmentArgs = {
1616
+ input: RedeployEnvironmentInput;
1617
+ };
962
1618
  export type MutationRegisterArgs = {
963
1619
  registerUserInput: RegisterUserInput;
964
1620
  };
@@ -966,15 +1622,25 @@ export type MutationRemoveOrgMemberArgs = {
966
1622
  orgId: Scalars['BigInt']['input'];
967
1623
  userId: Scalars['BigInt']['input'];
968
1624
  };
1625
+ export type MutationRemoveTeamMemberArgs = {
1626
+ groupId: Scalars['BigInt']['input'];
1627
+ userId: Scalars['BigInt']['input'];
1628
+ };
969
1629
  export type MutationRequestPasswordResetArgs = {
970
1630
  email: Scalars['String']['input'];
971
1631
  };
1632
+ export type MutationRequestToJoinTeamArgs = {
1633
+ groupId: Scalars['BigInt']['input'];
1634
+ };
972
1635
  export type MutationResendConfirmationEmailArgs = {
973
1636
  email: Scalars['String']['input'];
974
1637
  };
975
1638
  export type MutationResetPasswordArgs = {
976
1639
  resetPasswordInput: ResetPasswordInput;
977
1640
  };
1641
+ export type MutationRestartEnvironmentServicesArgs = {
1642
+ input: RestartEnvironmentServicesInput;
1643
+ };
978
1644
  export type MutationResumeEnvironmentArgs = {
979
1645
  input: ResumeEnvironmentInput;
980
1646
  };
@@ -982,6 +1648,12 @@ export type MutationRevokeAppAccessArgs = {
982
1648
  appId: Scalars['BigInt']['input'];
983
1649
  userId: Scalars['BigInt']['input'];
984
1650
  };
1651
+ export type MutationRevokeGridPermissionsArgs = {
1652
+ input: RevokeGridPermissionsInput;
1653
+ };
1654
+ export type MutationRevokeGroupFromGridArgs = {
1655
+ input: RevokeGroupFromGridInput;
1656
+ };
985
1657
  export type MutationRevokeOrgTokenArgs = {
986
1658
  orgTokenId: Scalars['BigInt']['input'];
987
1659
  };
@@ -997,6 +1669,9 @@ export type MutationSendAudioPacketArgs = {
997
1669
  export type MutationSendClientEventArgs = {
998
1670
  input: ClientEventNotificationInput;
999
1671
  };
1672
+ export type MutationSendSingleActorMessageArgs = {
1673
+ input: SingleActorMessageInput;
1674
+ };
1000
1675
  export type MutationSendTextPacketArgs = {
1001
1676
  input: ClientTextPacketInput;
1002
1677
  };
@@ -1016,6 +1691,17 @@ export type MutationSetEarlyAccessOverrideArgs = {
1016
1691
  userId: Scalars['BigInt']['input'];
1017
1692
  value: Scalars['Boolean']['input'];
1018
1693
  };
1694
+ export type MutationSetEnvironmentDeletionProtectionArgs = {
1695
+ enabled: Scalars['Boolean']['input'];
1696
+ environmentId: Scalars['String']['input'];
1697
+ };
1698
+ export type MutationSetGridPermissionLimitsArgs = {
1699
+ input: SetGridPermissionLimitsInput;
1700
+ };
1701
+ export type MutationSetOperatorArgs = {
1702
+ userId: Scalars['BigInt']['input'];
1703
+ value: Scalars['Boolean']['input'];
1704
+ };
1019
1705
  export type MutationSetOrgStatusArgs = {
1020
1706
  orgId: Scalars['BigInt']['input'];
1021
1707
  status: Scalars['String']['input'];
@@ -1027,6 +1713,12 @@ export type MutationSetSuperAdminArgs = {
1027
1713
  userId: Scalars['BigInt']['input'];
1028
1714
  value: Scalars['Boolean']['input'];
1029
1715
  };
1716
+ export type MutationSetTeamMemberRolesArgs = {
1717
+ input: SetMemberRolesInput;
1718
+ };
1719
+ export type MutationSetTeamPolicyArgs = {
1720
+ input: SetTeamPolicyInput;
1721
+ };
1030
1722
  export type MutationTeleportRequestArgs = {
1031
1723
  input: TeleportRequestInput;
1032
1724
  };
@@ -1050,6 +1742,9 @@ export type MutationUpdateAvatarArgs = {
1050
1742
  id: Scalars['BigInt']['input'];
1051
1743
  input: UpdateAvatarInput;
1052
1744
  };
1745
+ export type MutationUpdateAvatarAppStateArgs = {
1746
+ input: UpdateAvatarAppStateInput;
1747
+ };
1053
1748
  export type MutationUpdateAvatarStateArgs = {
1054
1749
  id: Scalars['BigInt']['input'];
1055
1750
  input: UpdateAvatarStateInput;
@@ -1063,6 +1758,9 @@ export type MutationUpdateChunkLodsArgs = {
1063
1758
  export type MutationUpdateChunkStateArgs = {
1064
1759
  input: UpdateChunkStateInput;
1065
1760
  };
1761
+ export type MutationUpdateEnvironmentScalingArgs = {
1762
+ input: UpdateEnvironmentScalingInput;
1763
+ };
1066
1764
  export type MutationUpdateGamertagArgs = {
1067
1765
  input: UpdateGamertagInput;
1068
1766
  };
@@ -1079,6 +1777,12 @@ export type MutationUpdateOrgTokenArgs = {
1079
1777
  input: UpdateOrgTokenInput;
1080
1778
  orgTokenId: Scalars['BigInt']['input'];
1081
1779
  };
1780
+ export type MutationUpdateTeamArgs = {
1781
+ input: UpdateTeamInput;
1782
+ };
1783
+ export type MutationUpdateTeamRoleArgs = {
1784
+ input: UpdateGroupRoleInput;
1785
+ };
1082
1786
  export type MutationUpdateUserAppStateArgs = {
1083
1787
  input: CreateUserAppStateInput;
1084
1788
  };
@@ -1092,6 +1796,24 @@ export type MutationUpdateUserTypeArgs = {
1092
1796
  export type MutationUpdateVoxelArgs = {
1093
1797
  input: UpdateVoxelInput;
1094
1798
  };
1799
+ export type MutationYankEnvironmentVersionArgs = {
1800
+ version: Scalars['String']['input'];
1801
+ };
1802
+ export type NearbyGridPermissions = {
1803
+ __typename?: 'NearbyGridPermissions';
1804
+ appId: Scalars['BigInt']['output'];
1805
+ gridId: Scalars['BigInt']['output'];
1806
+ highChunk: ChunkCoordinates;
1807
+ lowChunk: ChunkCoordinates;
1808
+ permissionKeys: Array<Scalars['String']['output']>;
1809
+ userId: Scalars['BigInt']['output'];
1810
+ };
1811
+ export type NearbyGridPermissionsInput = {
1812
+ appId: Scalars['BigInt']['input'];
1813
+ highChunk: ChunkCoordinatesInput;
1814
+ lowChunk: ChunkCoordinatesInput;
1815
+ userId: Scalars['BigInt']['input'];
1816
+ };
1095
1817
  export type OrgMember = {
1096
1818
  __typename?: 'OrgMember';
1097
1819
  createdAt: Scalars['DateTime']['output'];
@@ -1128,8 +1850,10 @@ export type OrgRole = {
1128
1850
  export type OrgToken = {
1129
1851
  __typename?: 'OrgToken';
1130
1852
  createdAt: Scalars['DateTime']['output'];
1853
+ environmentId: Maybe<Scalars['String']['output']>;
1131
1854
  expiresAt: Maybe<Scalars['DateTime']['output']>;
1132
1855
  isActive: Scalars['Boolean']['output'];
1856
+ kind: Scalars['String']['output'];
1133
1857
  label: Maybe<Scalars['String']['output']>;
1134
1858
  lastUsedAt: Maybe<Scalars['DateTime']['output']>;
1135
1859
  orgId: Scalars['BigInt']['output'];
@@ -1174,11 +1898,37 @@ export type PageInfo = {
1174
1898
  offset: Scalars['Int']['output'];
1175
1899
  totalCount: Scalars['Int']['output'];
1176
1900
  };
1901
+ export type PaymentEventRecord = {
1902
+ __typename?: 'PaymentEventRecord';
1903
+ checkoutId: Maybe<Scalars['BigInt']['output']>;
1904
+ createdAt: Scalars['DateTime']['output'];
1905
+ error: Maybe<Scalars['String']['output']>;
1906
+ eventId: Scalars['BigInt']['output'];
1907
+ eventType: Scalars['String']['output'];
1908
+ externalEventId: Scalars['String']['output'];
1909
+ processedAt: Maybe<Scalars['DateTime']['output']>;
1910
+ provider: PaymentProvider;
1911
+ };
1912
+ export type PaymentEventsPage = {
1913
+ __typename?: 'PaymentEventsPage';
1914
+ items: Array<PaymentEventRecord>;
1915
+ pageInfo: PageInfo;
1916
+ };
1177
1917
  /** External payment processor for a checkout. */
1178
1918
  export declare enum PaymentProvider {
1179
1919
  Paypal = "PAYPAL",
1180
1920
  Stripe = "STRIPE"
1181
1921
  }
1922
+ export type PublishEnvironmentReleaseFromGameApiTagInput = {
1923
+ /** Overwrite an existing environment version row if it already exists. */
1924
+ force?: Scalars['Boolean']['input'];
1925
+ /** cks-game-api semver tag (e.g. v0.6.20). */
1926
+ gameApiTag: Scalars['String']['input'];
1927
+ };
1928
+ export type PurgeEnvironmentInput = {
1929
+ orgId: Scalars['BigInt']['input'];
1930
+ slug: Scalars['String']['input'];
1931
+ };
1182
1932
  export type Query = {
1183
1933
  __typename?: 'Query';
1184
1934
  /** Returns only active (ReadyForClients) GraphQL servers */
@@ -1191,29 +1941,60 @@ export type Query = {
1191
1941
  appBudget: Maybe<AppBudget>;
1192
1942
  appBudgets: Array<AppBudget>;
1193
1943
  appBySlug: Maybe<App>;
1944
+ /** Top GraphQL operations by bytes for an app in the time range. */
1945
+ appGraphqlOperations: Array<GraphqlOperationUsageRow>;
1946
+ /** Replication and GraphQL totals plus top operations for one app. */
1947
+ appUsageSummary: AppUsageSummary;
1194
1948
  appUserAccessByApp: Array<AppUserAccess>;
1195
1949
  /** Public marketplace listing. Returns visibility=PUBLIC + status=LIVE only. No auth required. */
1196
1950
  apps: AppsPage;
1197
1951
  appsForOrg: Array<App>;
1198
1952
  avatar: Avatar;
1953
+ /** Read one avatar's per-app state (public to all players). */
1954
+ avatarAppState: Maybe<AppAvatarState>;
1955
+ /** Batch-read per-app state for many avatars (public to all players). */
1956
+ avatarAppStates: Array<AppAvatarState>;
1199
1957
  batchLookupActors: Array<Actor>;
1200
1958
  /** Super admin only. Cross-tenant payments audit. */
1201
1959
  checkouts: CheckoutsPage;
1960
+ cpAudit: Array<CpAuditEntry>;
1961
+ cpChangeOrder: Maybe<CpChangeOrderDetail>;
1962
+ cpChangeOrders: CpChangeOrdersPage;
1963
+ cpEnvSecrets: Array<CpEnvSecretRow>;
1964
+ cpEnvironment: Maybe<CpAdminEnvironment>;
1965
+ cpEnvironmentVersions: CpEnvironmentVersionsPage;
1966
+ cpEnvironments: CpAdminEnvironmentsPage;
1967
+ cpOvhCatalogSummary: Array<CpOvhCatalogRow>;
1968
+ cpSecrets: Array<CpSecretRow>;
1969
+ cpUnreleasedGameApiTags: CpUnreleasedGameApiTagsPage;
1970
+ cpUsageSummary: CpUsageSummary;
1202
1971
  /** The most-specific quota that applies to (orgId, appId, tierId, metric). Walks tier -> app -> org -> free_tier_defaults. Returns null if nothing matches. */
1203
1972
  effectiveQuota: Maybe<ServiceQuota>;
1973
+ /** OVH datacenters that have at least one customer-priced instance flavor available for customer selection. */
1204
1974
  environmentDatacenters: Array<CksOvhDatacenter>;
1975
+ /** Customer-selectable instance flavors in the datacenter with current availability and customer pricing. */
1205
1976
  environmentFlavors: Array<CksOvhFlavor>;
1977
+ /** Pricing quote for the selected flavors. Fails if any flavor is unavailable, hidden, or lacks customer pricing. */
1206
1978
  environmentQuote: CksEnvironmentQuote;
1979
+ /** Per-app usage totals for apps linked to an environment. */
1980
+ environmentUsageByApp: Array<AppUsageRollupRow>;
1981
+ /** Per-minute replication and GraphQL usage for apps linked to an environment. Observability only. */
1982
+ environmentUsageSummary: EnvironmentUsageSummary;
1207
1983
  environmentVersions: Array<CksEnvironmentVersion>;
1208
1984
  freePlayWindowInfo: FreePlayWindowInfo;
1209
1985
  /** Single startup payload for browser game clients: current user, version requirements, UDP proxy status, realtime protocol details, and spatial send limits. */
1210
1986
  gameClientBootstrap: GameClientBootstrap;
1987
+ /** 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. */
1988
+ gameHost: Maybe<GameHost>;
1211
1989
  getChunk: Maybe<Chunk>;
1212
1990
  getChunkLods: Maybe<ChunkLodsResponse>;
1213
1991
  getChunksByDistance: ChunksByDistanceResponse;
1214
1992
  getVoxelList: ChunkVoxelResponse;
1215
1993
  /** Returns all registered GraphQL servers */
1216
1994
  graphqlServers: Array<GraphQlServer>;
1995
+ gridGroupGrants: Array<GridGroupGrant>;
1996
+ gridPermissionLimits: GridPermissionLimits;
1997
+ gridUserPermissions: GridUserPermissions;
1217
1998
  listVoxelUpdatesByDistance: VoxelUpdatesByDistanceResponse;
1218
1999
  listVoxels: Array<Voxel>;
1219
2000
  me: Maybe<User>;
@@ -1226,6 +2007,10 @@ export type Query = {
1226
2007
  myDonationData: UserDonationData;
1227
2008
  myOrganizations: Array<OrgMembership>;
1228
2009
  myPropertyTokens: UserPropertyTokenData;
2010
+ /** The caller's teams in an app, with their roles and effective team permissions. */
2011
+ myTeams: Array<GroupMembership>;
2012
+ nearbyGridPermissions: Array<NearbyGridPermissions>;
2013
+ operatorUsers: Array<CpOperatorUser>;
1229
2014
  orgEnvironment: Maybe<CksEnvironmentDetail>;
1230
2015
  orgEnvironments: Array<CksEnvironment>;
1231
2016
  orgMembers: Array<OrgMember>;
@@ -1233,17 +2018,34 @@ export type Query = {
1233
2018
  orgPermissions: Array<OrgPermission>;
1234
2019
  orgRoles: Array<OrgRole>;
1235
2020
  orgTokens: Array<OrgToken>;
2021
+ /** Aggregate usage totals per environment in an organization. */
2022
+ orgUsageByEnvironment: Array<EnvironmentUsageRollupRow>;
1236
2023
  organization: Maybe<Organization>;
1237
2024
  organizationBySlug: Maybe<Organization>;
2025
+ /** Super admin only. Inbound payment webhook audit log. */
2026
+ paymentEvents: PaymentEventsPage;
1238
2027
  quotasForApp: Array<ServiceQuota>;
1239
2028
  quotasForOrg: Array<ServiceQuota>;
2029
+ /** Runtime permission keys that can be granted through app tiers or grid permissions. */
2030
+ runtimePermissions: Array<Scalars['String']['output']>;
1240
2031
  /** Returns a random server from the lowest 20% of servers by client count to distribute load evenly */
1241
2032
  serverWithLeastClients: ServerStatus;
2033
+ /** Fetch one team by id. */
2034
+ team: Group;
2035
+ /** List the members of a team. */
2036
+ teamMembers: Array<GroupMember>;
2037
+ /** The current team creation/membership policy for an app. */
2038
+ teamPolicy: AppGroupPolicy;
2039
+ /** List the roles of a team. */
2040
+ teamRoles: Array<GroupRole>;
2041
+ /** List active teams in an app. */
2042
+ teams: Array<Group>;
1242
2043
  /** 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. */
1243
2044
  udpProxyConnectionStatus: UdpProxyConnectionStatus;
1244
2045
  user: Maybe<User>;
1245
2046
  userAppState: Maybe<UserAppState>;
1246
2047
  userAppStates: Array<UserAppState>;
2048
+ /** Avatars owned by a user. Non-owners receive public state only (private_state is stripped). */
1247
2049
  userAvatars: Array<Avatar>;
1248
2050
  /** 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. */
1249
2051
  usersPaginated: UsersPage;
@@ -1276,6 +2078,18 @@ export type QueryAppBySlugArgs = {
1276
2078
  appSlug: Scalars['String']['input'];
1277
2079
  orgSlug: Scalars['String']['input'];
1278
2080
  };
2081
+ export type QueryAppGraphqlOperationsArgs = {
2082
+ appId: Scalars['BigInt']['input'];
2083
+ limit?: InputMaybe<Scalars['Int']['input']>;
2084
+ orgId: Scalars['BigInt']['input'];
2085
+ since: Scalars['DateTime']['input'];
2086
+ };
2087
+ export type QueryAppUsageSummaryArgs = {
2088
+ appId: Scalars['BigInt']['input'];
2089
+ operationLimit?: InputMaybe<Scalars['Int']['input']>;
2090
+ orgId: Scalars['BigInt']['input'];
2091
+ since: Scalars['DateTime']['input'];
2092
+ };
1279
2093
  export type QueryAppUserAccessByAppArgs = {
1280
2094
  appId: Scalars['BigInt']['input'];
1281
2095
  limit?: InputMaybe<Scalars['Int']['input']>;
@@ -1293,6 +2107,14 @@ export type QueryAppsForOrgArgs = {
1293
2107
  export type QueryAvatarArgs = {
1294
2108
  id: Scalars['BigInt']['input'];
1295
2109
  };
2110
+ export type QueryAvatarAppStateArgs = {
2111
+ appId: Scalars['BigInt']['input'];
2112
+ avatarId: Scalars['BigInt']['input'];
2113
+ };
2114
+ export type QueryAvatarAppStatesArgs = {
2115
+ appId: Scalars['BigInt']['input'];
2116
+ avatarIds: Array<Scalars['BigInt']['input']>;
2117
+ };
1296
2118
  export type QueryBatchLookupActorsArgs = {
1297
2119
  input: BatchActorLookupInput;
1298
2120
  };
@@ -1301,6 +2123,38 @@ export type QueryCheckoutsArgs = {
1301
2123
  limit?: InputMaybe<Scalars['Int']['input']>;
1302
2124
  offset?: InputMaybe<Scalars['Int']['input']>;
1303
2125
  };
2126
+ export type QueryCpAuditArgs = {
2127
+ environmentId?: InputMaybe<Scalars['String']['input']>;
2128
+ limit?: Scalars['Int']['input'];
2129
+ };
2130
+ export type QueryCpChangeOrderArgs = {
2131
+ id: Scalars['String']['input'];
2132
+ };
2133
+ export type QueryCpChangeOrdersArgs = {
2134
+ environmentId?: InputMaybe<Scalars['String']['input']>;
2135
+ page?: Scalars['Int']['input'];
2136
+ pageSize?: Scalars['Int']['input'];
2137
+ };
2138
+ export type QueryCpEnvSecretsArgs = {
2139
+ environmentId?: InputMaybe<Scalars['String']['input']>;
2140
+ };
2141
+ export type QueryCpEnvironmentArgs = {
2142
+ slug: Scalars['String']['input'];
2143
+ };
2144
+ export type QueryCpEnvironmentsArgs = {
2145
+ page?: Scalars['Int']['input'];
2146
+ pageSize?: Scalars['Int']['input'];
2147
+ };
2148
+ export type QueryCpOvhCatalogSummaryArgs = {
2149
+ region?: InputMaybe<Scalars['String']['input']>;
2150
+ };
2151
+ export type QueryCpSecretsArgs = {
2152
+ environmentId?: InputMaybe<Scalars['String']['input']>;
2153
+ };
2154
+ export type QueryCpUsageSummaryArgs = {
2155
+ environmentSlug: Scalars['String']['input'];
2156
+ since: Scalars['DateTime']['input'];
2157
+ };
1304
2158
  export type QueryEffectiveQuotaArgs = {
1305
2159
  appId?: InputMaybe<Scalars['BigInt']['input']>;
1306
2160
  metric: Scalars['String']['input'];
@@ -1313,9 +2167,22 @@ export type QueryEnvironmentFlavorsArgs = {
1313
2167
  export type QueryEnvironmentQuoteArgs = {
1314
2168
  input: EnvironmentQuoteInput;
1315
2169
  };
2170
+ export type QueryEnvironmentUsageByAppArgs = {
2171
+ environmentSlug: Scalars['String']['input'];
2172
+ orgId: Scalars['BigInt']['input'];
2173
+ since: Scalars['DateTime']['input'];
2174
+ };
2175
+ export type QueryEnvironmentUsageSummaryArgs = {
2176
+ environmentSlug: Scalars['String']['input'];
2177
+ orgId: Scalars['BigInt']['input'];
2178
+ since: Scalars['DateTime']['input'];
2179
+ };
1316
2180
  export type QueryGameClientBootstrapArgs = {
1317
2181
  appId: Scalars['BigInt']['input'];
1318
2182
  };
2183
+ export type QueryGameHostArgs = {
2184
+ appId: Scalars['BigInt']['input'];
2185
+ };
1319
2186
  export type QueryGetChunkArgs = {
1320
2187
  input: GetChunkInput;
1321
2188
  };
@@ -1328,6 +2195,20 @@ export type QueryGetChunksByDistanceArgs = {
1328
2195
  export type QueryGetVoxelListArgs = {
1329
2196
  input: GetVoxelListInput;
1330
2197
  };
2198
+ export type QueryGridGroupGrantsArgs = {
2199
+ appId: Scalars['BigInt']['input'];
2200
+ gridId: Scalars['BigInt']['input'];
2201
+ groupId: Scalars['BigInt']['input'];
2202
+ };
2203
+ export type QueryGridPermissionLimitsArgs = {
2204
+ appId: Scalars['BigInt']['input'];
2205
+ gridId: Scalars['BigInt']['input'];
2206
+ };
2207
+ export type QueryGridUserPermissionsArgs = {
2208
+ appId: Scalars['BigInt']['input'];
2209
+ gridId: Scalars['BigInt']['input'];
2210
+ userId: Scalars['BigInt']['input'];
2211
+ };
1331
2212
  export type QueryListVoxelUpdatesByDistanceArgs = {
1332
2213
  input: ListVoxelUpdatesByDistanceInput;
1333
2214
  };
@@ -1344,6 +2225,12 @@ export type QueryMyCheckoutsArgs = {
1344
2225
  limit?: InputMaybe<Scalars['Int']['input']>;
1345
2226
  offset?: InputMaybe<Scalars['Int']['input']>;
1346
2227
  };
2228
+ export type QueryMyTeamsArgs = {
2229
+ appId: Scalars['BigInt']['input'];
2230
+ };
2231
+ export type QueryNearbyGridPermissionsArgs = {
2232
+ input: NearbyGridPermissionsInput;
2233
+ };
1347
2234
  export type QueryOrgEnvironmentArgs = {
1348
2235
  orgId: Scalars['BigInt']['input'];
1349
2236
  slug: Scalars['String']['input'];
@@ -1360,18 +2247,41 @@ export type QueryOrgRolesArgs = {
1360
2247
  export type QueryOrgTokensArgs = {
1361
2248
  orgId: Scalars['BigInt']['input'];
1362
2249
  };
2250
+ export type QueryOrgUsageByEnvironmentArgs = {
2251
+ orgId: Scalars['BigInt']['input'];
2252
+ since: Scalars['DateTime']['input'];
2253
+ };
1363
2254
  export type QueryOrganizationArgs = {
1364
2255
  id: Scalars['BigInt']['input'];
1365
2256
  };
1366
2257
  export type QueryOrganizationBySlugArgs = {
1367
2258
  slug: Scalars['String']['input'];
1368
2259
  };
2260
+ export type QueryPaymentEventsArgs = {
2261
+ limit?: InputMaybe<Scalars['Int']['input']>;
2262
+ offset?: InputMaybe<Scalars['Int']['input']>;
2263
+ };
1369
2264
  export type QueryQuotasForAppArgs = {
1370
2265
  appId: Scalars['BigInt']['input'];
1371
2266
  };
1372
2267
  export type QueryQuotasForOrgArgs = {
1373
2268
  orgId: Scalars['BigInt']['input'];
1374
2269
  };
2270
+ export type QueryTeamArgs = {
2271
+ groupId: Scalars['BigInt']['input'];
2272
+ };
2273
+ export type QueryTeamMembersArgs = {
2274
+ groupId: Scalars['BigInt']['input'];
2275
+ };
2276
+ export type QueryTeamPolicyArgs = {
2277
+ appId: Scalars['BigInt']['input'];
2278
+ };
2279
+ export type QueryTeamRolesArgs = {
2280
+ groupId: Scalars['BigInt']['input'];
2281
+ };
2282
+ export type QueryTeamsArgs = {
2283
+ appId: Scalars['BigInt']['input'];
2284
+ };
1375
2285
  export type QueryUserArgs = {
1376
2286
  id: Scalars['BigInt']['input'];
1377
2287
  };
@@ -1410,6 +2320,16 @@ export type RealtimeConnectionEvent = {
1410
2320
  retryable: Scalars['Boolean']['output'];
1411
2321
  status: Scalars['String']['output'];
1412
2322
  };
2323
+ /** full = replace VMs. services = update in place on existing runtime servers. Omit for automatic routing. */
2324
+ export declare enum RedeployDeployMode {
2325
+ Full = "FULL",
2326
+ Services = "SERVICES"
2327
+ }
2328
+ export type RedeployEnvironmentInput = {
2329
+ deployMode?: InputMaybe<RedeployDeployMode>;
2330
+ orgId: Scalars['BigInt']['input'];
2331
+ slug: Scalars['String']['input'];
2332
+ };
1413
2333
  export type RegisterUserInput = {
1414
2334
  email: Scalars['String']['input'];
1415
2335
  gamertag?: InputMaybe<Scalars['String']['input']>;
@@ -1419,10 +2339,28 @@ export type ResetPasswordInput = {
1419
2339
  newPassword: Scalars['String']['input'];
1420
2340
  token: Scalars['String']['input'];
1421
2341
  };
2342
+ export type RestartEnvironmentServicesInput = {
2343
+ orgId: Scalars['BigInt']['input'];
2344
+ slug: Scalars['String']['input'];
2345
+ };
1422
2346
  export type ResumeEnvironmentInput = {
1423
2347
  orgId: Scalars['BigInt']['input'];
1424
2348
  slug: Scalars['String']['input'];
1425
2349
  };
2350
+ export type RevokeGridPermissionsInput = {
2351
+ appId: Scalars['BigInt']['input'];
2352
+ gridId: Scalars['BigInt']['input'];
2353
+ permissionKeys?: InputMaybe<Array<Scalars['String']['input']>>;
2354
+ userId: Scalars['BigInt']['input'];
2355
+ };
2356
+ export type RevokeGroupFromGridInput = {
2357
+ appId: Scalars['BigInt']['input'];
2358
+ gridId: Scalars['BigInt']['input'];
2359
+ groupId: Scalars['BigInt']['input'];
2360
+ groupRoleId?: InputMaybe<Scalars['BigInt']['input']>;
2361
+ /** Optional subset of keys to revoke. Omit to revoke all of the group/role grants on this grid. */
2362
+ permissionKeys?: InputMaybe<Array<Scalars['String']['input']>>;
2363
+ };
1426
2364
  export type RollbackVoxelEventResult = {
1427
2365
  __typename?: 'RollbackVoxelEventResult';
1428
2366
  appId: Scalars['BigInt']['output'];
@@ -1516,6 +2454,17 @@ export type ServiceQuota = {
1516
2454
  tierId: Maybe<Scalars['BigInt']['output']>;
1517
2455
  updatedAt: Scalars['DateTime']['output'];
1518
2456
  };
2457
+ export type SetGridPermissionLimitsInput = {
2458
+ appId: Scalars['BigInt']['input'];
2459
+ gridId: Scalars['BigInt']['input'];
2460
+ /** The whitelist of permission keys allowed on this grid. Empty array removes all limits (every active grid permission becomes grantable again). */
2461
+ permissionKeys: Array<Scalars['String']['input']>;
2462
+ };
2463
+ export type SetMemberRolesInput = {
2464
+ groupId: Scalars['BigInt']['input'];
2465
+ roleIds: Array<Scalars['BigInt']['input']>;
2466
+ userId: Scalars['BigInt']['input'];
2467
+ };
1519
2468
  export type SetQuotaInput = {
1520
2469
  actionOnExceed?: InputMaybe<Scalars['String']['input']>;
1521
2470
  appId?: InputMaybe<Scalars['BigInt']['input']>;
@@ -1525,6 +2474,48 @@ export type SetQuotaInput = {
1525
2474
  period?: InputMaybe<Scalars['String']['input']>;
1526
2475
  tierId?: InputMaybe<Scalars['BigInt']['input']>;
1527
2476
  };
2477
+ export type SetTeamPolicyInput = {
2478
+ appId: Scalars['BigInt']['input'];
2479
+ /** admin | member | anyone. Who may create teams in this app. */
2480
+ creationPolicy?: InputMaybe<Scalars['String']['input']>;
2481
+ /** open | request | invite | admin. Default membership policy for new teams. */
2482
+ defaultMembershipPolicy?: InputMaybe<Scalars['String']['input']>;
2483
+ maxGroupsPerUser?: InputMaybe<Scalars['Int']['input']>;
2484
+ maxMembers?: InputMaybe<Scalars['Int']['input']>;
2485
+ };
2486
+ /** 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. */
2487
+ export type SingleActorMessageInput = {
2488
+ /** The ID of the app the destination actor belongs to. */
2489
+ appId: Scalars['BigInt']['input'];
2490
+ /** The chunk coordinates of the DESTINATION actor (where the target currently is). The sender must know this. */
2491
+ chunk: ChunkCoordinatesInput;
2492
+ /** The message payload, base64-encoded. Opaque to the server; the sender’s identity (if needed) must be embedded here by the application. */
2493
+ payload: Scalars['String']['input'];
2494
+ /** Client's sequence number for this message (0-255, wraps). Used to match error responses. */
2495
+ sequenceNumber?: InputMaybe<Scalars['Int']['input']>;
2496
+ /** 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. */
2497
+ targetUuid: Scalars['String']['input'];
2498
+ };
2499
+ /** Notification received when another actor sends you a direct actor-to-actor message (SINGLE_ACTOR_MESSAGE). Delivered only to the targeted actor via the udpNotifications subscription. */
2500
+ export type SingleActorMessageNotification = {
2501
+ __typename?: 'SingleActorMessageNotification';
2502
+ /** The ID of the app the message was sent within. */
2503
+ appId: Scalars['BigInt']['output'];
2504
+ /** The X coordinate of the destination chunk. */
2505
+ chunkX: Scalars['BigInt']['output'];
2506
+ /** The Y coordinate of the destination chunk. */
2507
+ chunkY: Scalars['BigInt']['output'];
2508
+ /** The Z coordinate of the destination chunk. */
2509
+ chunkZ: Scalars['BigInt']['output'];
2510
+ /** Server-generated epoch milliseconds timestamp. */
2511
+ epochMillis: Scalars['BigInt']['output'];
2512
+ /** The message payload, base64-encoded. Opaque to the server; decode per your application protocol. */
2513
+ payload: Scalars['String']['output'];
2514
+ /** The sender's sequence number for this message (0-255). */
2515
+ sequenceNumber: Scalars['Int']['output'];
2516
+ /** The destination actor’s UUID (your own actor’s UUID, echoed from the message). */
2517
+ uuid: Scalars['String']['output'];
2518
+ };
1528
2519
  export type Subscription = {
1529
2520
  __typename?: 'Subscription';
1530
2521
  /** 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. */
@@ -1574,7 +2565,7 @@ export declare enum UdpErrorCode {
1574
2565
  UserNotAuthenticated = "USER_NOT_AUTHENTICATED"
1575
2566
  }
1576
2567
  /** 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. */
1577
- export type UdpNotification = ActorUpdateNotification | ActorUpdateResponse | ClientAudioNotification | ClientEventNotification | ClientTextNotification | GenericErrorResponse | RealtimeConnectionEvent | ServerEventNotification | VoxelUpdateNotification | VoxelUpdateResponse;
2568
+ export type UdpNotification = ActorUpdateNotification | ActorUpdateResponse | ClientAudioNotification | ClientEventNotification | ClientTextNotification | GenericErrorResponse | RealtimeConnectionEvent | ServerEventNotification | SingleActorMessageNotification | VoxelUpdateNotification | VoxelUpdateResponse;
1578
2569
  /** UDP proxy session for the game token on the request. Returned by udpProxyConnectionStatus and connectUdpProxy. Binary UDP layouts are documented in database/client-wire-formats.md. */
1579
2570
  export type UdpProxyConnectionStatus = {
1580
2571
  __typename?: 'UdpProxyConnectionStatus';
@@ -1595,6 +2586,7 @@ export type UpdateAccessTierInput = {
1595
2586
  isFree?: InputMaybe<Scalars['Boolean']['input']>;
1596
2587
  name?: InputMaybe<Scalars['String']['input']>;
1597
2588
  paypalPlanId?: InputMaybe<Scalars['String']['input']>;
2589
+ permissionKeys?: InputMaybe<Array<Scalars['String']['input']>>;
1598
2590
  priceCents?: InputMaybe<Scalars['BigInt']['input']>;
1599
2591
  stripePriceId?: InputMaybe<Scalars['String']['input']>;
1600
2592
  tierOrder?: InputMaybe<Scalars['Int']['input']>;
@@ -1617,6 +2609,12 @@ export type UpdateAppInput = {
1617
2609
  status?: InputMaybe<AppStatus>;
1618
2610
  visibility?: InputMaybe<AppVisibility>;
1619
2611
  };
2612
+ export type UpdateAvatarAppStateInput = {
2613
+ appId: Scalars['BigInt']['input'];
2614
+ avatarId: Scalars['BigInt']['input'];
2615
+ /** Base64-encoded binary state. Null clears it. */
2616
+ state?: InputMaybe<Scalars['String']['input']>;
2617
+ };
1620
2618
  export type UpdateAvatarInput = {
1621
2619
  name?: InputMaybe<Scalars['String']['input']>;
1622
2620
  };
@@ -1634,10 +2632,27 @@ export type UpdateChunkStateInput = {
1634
2632
  chunkState?: InputMaybe<Scalars['String']['input']>;
1635
2633
  coordinates: ChunkCoordinatesInput;
1636
2634
  };
2635
+ export type UpdateEnvironmentScalingInput = {
2636
+ /** Caddy LB flavor (in front of the game-api fleet). When omitted the existing value is preserved. */
2637
+ caddyFlavor?: InputMaybe<Scalars['String']['input']>;
2638
+ gameApiMaxServers: Scalars['Int']['input'];
2639
+ gameApiMinServers: Scalars['Int']['input'];
2640
+ loadBalancerCount: Scalars['Int']['input'];
2641
+ orgId: Scalars['BigInt']['input'];
2642
+ slug: Scalars['String']['input'];
2643
+ udpBuddyMaxServers: Scalars['Int']['input'];
2644
+ udpBuddyMinServers: Scalars['Int']['input'];
2645
+ };
1637
2646
  export type UpdateGamertagInput = {
1638
2647
  disambiguation: Scalars['String']['input'];
1639
2648
  gamertag: Scalars['String']['input'];
1640
2649
  };
2650
+ export type UpdateGroupRoleInput = {
2651
+ groupRoleId: Scalars['BigInt']['input'];
2652
+ permissions?: InputMaybe<Array<Scalars['String']['input']>>;
2653
+ rank?: InputMaybe<Scalars['Int']['input']>;
2654
+ roleName?: InputMaybe<Scalars['String']['input']>;
2655
+ };
1641
2656
  export type UpdateOrgRoleInput = {
1642
2657
  description?: InputMaybe<Scalars['String']['input']>;
1643
2658
  permissions?: InputMaybe<Array<Scalars['String']['input']>>;
@@ -1648,6 +2663,12 @@ export type UpdateOrgTokenInput = {
1648
2663
  isActive?: InputMaybe<Scalars['Boolean']['input']>;
1649
2664
  label?: InputMaybe<Scalars['String']['input']>;
1650
2665
  };
2666
+ export type UpdateTeamInput = {
2667
+ description?: InputMaybe<Scalars['String']['input']>;
2668
+ groupId: Scalars['BigInt']['input'];
2669
+ membershipPolicy?: InputMaybe<Scalars['String']['input']>;
2670
+ name?: InputMaybe<Scalars['String']['input']>;
2671
+ };
1651
2672
  export type UpdateUserStateInput = {
1652
2673
  state?: InputMaybe<Scalars['String']['input']>;
1653
2674
  };
@@ -1658,6 +2679,22 @@ export type UpdateVoxelInput = {
1658
2679
  state?: InputMaybe<Scalars['String']['input']>;
1659
2680
  voxelType: Scalars['Float']['input'];
1660
2681
  };
2682
+ export type UsageMinuteRow = {
2683
+ __typename?: 'UsageMinuteRow';
2684
+ minute: Scalars['DateTime']['output'];
2685
+ recvBytes: Scalars['String']['output'];
2686
+ recvMsgs: Maybe<Scalars['String']['output']>;
2687
+ sendBytes: Scalars['String']['output'];
2688
+ sendMsgs: Maybe<Scalars['String']['output']>;
2689
+ };
2690
+ export type UsageRatePeaks = {
2691
+ __typename?: 'UsageRatePeaks';
2692
+ avgSendMbitPerSec: Scalars['Float']['output'];
2693
+ avgSendMsgsPerSec: Scalars['Float']['output'];
2694
+ peakSendMbitPerSec: Scalars['Float']['output'];
2695
+ peakSendMsgsPerSec: Scalars['Float']['output'];
2696
+ sampleMinutes: Scalars['Float']['output'];
2697
+ };
1661
2698
  export type User = {
1662
2699
  __typename?: 'User';
1663
2700
  createdAt: Scalars['DateTime']['output'];
@@ -1668,6 +2705,8 @@ export type User = {
1668
2705
  grantEarlyAccess: Scalars['Boolean']['output'];
1669
2706
  grantEarlyAccessOverride: Scalars['Boolean']['output'];
1670
2707
  isConfirmed: Scalars['Boolean']['output'];
2708
+ /** Company-employee flag that grants access to control-plane / operator features. Independent from is_super_admin. */
2709
+ isOperator: Scalars['Boolean']['output'];
1671
2710
  isSuperAdmin: Scalars['Boolean']['output'];
1672
2711
  orgId: Maybe<Scalars['BigInt']['output']>;
1673
2712
  /** The current user's effective permission keys on the given org. Empty if not a member. Always full set if super admin. */
@@ -2008,6 +3047,7 @@ export type AppAccessTiersQuery = {
2008
3047
  currency: string | null;
2009
3048
  billingPeriod: string | null;
2010
3049
  description: string | null;
3050
+ permissionKeys: Array<string>;
2011
3051
  status: string;
2012
3052
  createdAt: string;
2013
3053
  updatedAt: string;
@@ -2064,6 +3104,7 @@ export type CreateAccessTierMutation = {
2064
3104
  currency: string | null;
2065
3105
  billingPeriod: string | null;
2066
3106
  description: string | null;
3107
+ permissionKeys: Array<string>;
2067
3108
  status: string;
2068
3109
  createdAt: string;
2069
3110
  updatedAt: string;
@@ -2145,6 +3186,7 @@ export type UpdateAccessTierMutation = {
2145
3186
  currency: string | null;
2146
3187
  billingPeriod: string | null;
2147
3188
  description: string | null;
3189
+ permissionKeys: Array<string>;
2148
3190
  status: string;
2149
3191
  updatedAt: string;
2150
3192
  };
@@ -2164,6 +3206,8 @@ export type AppQuery = {
2164
3206
  visibility: AppVisibility;
2165
3207
  status: AppStatus;
2166
3208
  metadata: string | null;
3209
+ splitMode: boolean;
3210
+ gameApiUrl: string | null;
2167
3211
  createdAt: string;
2168
3212
  updatedAt: string;
2169
3213
  org: {
@@ -2190,6 +3234,8 @@ export type AppBySlugQuery = {
2190
3234
  visibility: AppVisibility;
2191
3235
  status: AppStatus;
2192
3236
  metadata: string | null;
3237
+ splitMode: boolean;
3238
+ gameApiUrl: string | null;
2193
3239
  createdAt: string;
2194
3240
  updatedAt: string;
2195
3241
  org: {
@@ -2215,6 +3261,8 @@ export type AppsForOrgQuery = {
2215
3261
  visibility: AppVisibility;
2216
3262
  status: AppStatus;
2217
3263
  metadata: string | null;
3264
+ splitMode: boolean;
3265
+ gameApiUrl: string | null;
2218
3266
  createdAt: string;
2219
3267
  updatedAt: string;
2220
3268
  }>;
@@ -2268,6 +3316,8 @@ export type MarketplaceAppsQuery = {
2268
3316
  visibility: AppVisibility;
2269
3317
  status: AppStatus;
2270
3318
  metadata: string | null;
3319
+ splitMode: boolean;
3320
+ gameApiUrl: string | null;
2271
3321
  createdAt: string;
2272
3322
  updatedAt: string;
2273
3323
  org: {
@@ -2300,6 +3350,8 @@ export type MyAppsQuery = {
2300
3350
  visibility: AppVisibility;
2301
3351
  status: AppStatus;
2302
3352
  metadata: string | null;
3353
+ splitMode: boolean;
3354
+ gameApiUrl: string | null;
2303
3355
  createdAt: string;
2304
3356
  updatedAt: string;
2305
3357
  org: {
@@ -3406,6 +4458,13 @@ export type SendClientEventMutation = {
3406
4458
  __typename?: 'Mutation';
3407
4459
  sendClientEvent: boolean;
3408
4460
  };
4461
+ export type SendSingleActorMessageMutationVariables = Exact<{
4462
+ input: SingleActorMessageInput;
4463
+ }>;
4464
+ export type SendSingleActorMessageMutation = {
4465
+ __typename?: 'Mutation';
4466
+ sendSingleActorMessage: boolean;
4467
+ };
3409
4468
  export type SendTextPacketMutationVariables = Exact<{
3410
4469
  input: ClientTextPacketInput;
3411
4470
  }>;
@@ -3508,6 +4567,16 @@ export type UdpNotificationsSubscription = {
3508
4567
  state: string;
3509
4568
  sequenceNumber: number;
3510
4569
  epochMillis: string;
4570
+ } | {
4571
+ __typename: 'SingleActorMessageNotification';
4572
+ appId: string;
4573
+ chunkX: string;
4574
+ chunkY: string;
4575
+ chunkZ: string;
4576
+ uuid: string;
4577
+ payload: string;
4578
+ sequenceNumber: number;
4579
+ epochMillis: string;
3511
4580
  } | {
3512
4581
  __typename: 'VoxelUpdateNotification';
3513
4582
  appId: string;
@@ -3941,6 +5010,7 @@ export declare const DisconnectUdpProxyDocument: DocumentNode<DisconnectUdpProxy
3941
5010
  export declare const SendActorUpdateDocument: DocumentNode<SendActorUpdateMutation, SendActorUpdateMutationVariables>;
3942
5011
  export declare const SendAudioPacketDocument: DocumentNode<SendAudioPacketMutation, SendAudioPacketMutationVariables>;
3943
5012
  export declare const SendClientEventDocument: DocumentNode<SendClientEventMutation, SendClientEventMutationVariables>;
5013
+ export declare const SendSingleActorMessageDocument: DocumentNode<SendSingleActorMessageMutation, SendSingleActorMessageMutationVariables>;
3944
5014
  export declare const SendTextPacketDocument: DocumentNode<SendTextPacketMutation, SendTextPacketMutationVariables>;
3945
5015
  export declare const SendVoxelUpdateDocument: DocumentNode<SendVoxelUpdateMutation, SendVoxelUpdateMutationVariables>;
3946
5016
  export declare const UdpNotificationsDocument: DocumentNode<UdpNotificationsSubscription, UdpNotificationsSubscriptionVariables>;