@crowdedkingdoms/crowdyjs 18.0.3-dev.1 → 18.1.0-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { GridOwnershipDocument, AssignGridOwnershipDocument, TransferGridOwnershipDocument, GridUserPermissionsDocument, NearbyGridPermissionsDocument, NearbyGridsDocument, GridPermissionLimitsDocument, GridGroupGrantsDocument, CreateGridDocument, DeleteGridDocument, GrantGridPermissionsDocument, RevokeGridPermissionsDocument, SetGridPermissionLimitsDocument, AssignGroupToGridDocument, RevokeGroupFromGridDocument, } from '../generated/graphql.js';
1
+ import { GridOwnershipDocument, AssignGridOwnershipDocument, TransferGridOwnershipDocument, GridUserPermissionsDocument, NearbyGridPermissionsDocument, NearbyGridsDocument, GridPermissionLimitsDocument, GridOpenPermissionsDocument, GridGroupGrantsDocument, CreateGridDocument, DeleteGridDocument, GrantGridPermissionsDocument, RevokeGridPermissionsDocument, SetGridPermissionLimitsDocument, SetGridOpenPermissionsDocument, AssignGroupToGridDocument, RevokeGroupFromGridDocument, } from '../generated/graphql.js';
2
2
  /**
3
3
  * App grids + grid runtime-permission administration — exposed as
4
4
  * `client.gameApps` (and grouped under `client.admin`).
@@ -98,6 +98,21 @@ export class GameAppsAPI {
98
98
  });
99
99
  return data.gridPermissionLimits;
100
100
  }
101
+ /**
102
+ * Read the keys a grid grants every player with active access to the app
103
+ * (an open build area, a public arena). Empty means the grid is not open.
104
+ *
105
+ * @param appId - App that owns the grid.
106
+ * @param gridId - Grid whose open keys to read.
107
+ * @returns The grid's open keys.
108
+ */
109
+ async openPermissions(appId, gridId) {
110
+ const data = await this.graphql.request(GridOpenPermissionsDocument, {
111
+ appId,
112
+ gridId,
113
+ });
114
+ return data.gridOpenPermissions;
115
+ }
101
116
  /**
102
117
  * List a group's grants on a grid (rows of the group-grants input table).
103
118
  *
@@ -180,6 +195,27 @@ export class GameAppsAPI {
180
195
  });
181
196
  return data.setGridPermissionLimits;
182
197
  }
198
+ /**
199
+ * Open a grid to every player: replace the keys it grants each player with
200
+ * active access to the app, within its limits, then recompute the effective
201
+ * ACL for all of them. Players who gain access later get them too. The most
202
+ * specific grid covering a chunk decides a voxel write there, so a zone
203
+ * nested in the world grid that everyone may build in must grant
204
+ * `update_voxel_data` itself. An empty `permissionKeys` closes the grid.
205
+ *
206
+ * Refused with `BAD_REQUEST` for the app's world grid (open already), any of
207
+ * the four player-code keys, a key that is not an active grid key, and a
208
+ * 33rd open grid in one app.
209
+ *
210
+ * @param input - {@link SetGridOpenPermissionsInput}.
211
+ * @returns The grid's open keys after the change.
212
+ */
213
+ async setOpenPermissions(input) {
214
+ const data = await this.graphql.request(SetGridOpenPermissionsDocument, {
215
+ input,
216
+ });
217
+ return data.setGridOpenPermissions;
218
+ }
183
219
  /**
184
220
  * Grant permission keys to a group (optionally a single role) on a grid;
185
221
  * recomputes the effective ACL.
@@ -916,6 +916,8 @@ export type App = {
916
916
  updatedAt: Scalars['DateTime']['output'];
917
917
  /** Marketplace discoverability (PUBLIC/UNLISTED/PRIVATE). See AppVisibility. */
918
918
  visibility: AppVisibility;
919
+ /** Whether players may write the app's wilderness: chunks that no grid but the app's world grid covers. True (the default) leaves those writes to the ordinary voxel permission; false refuses every voxel and chunk write there (updateVoxel, sendVoxelUpdate, updateChunk, ck-exec's world.set_voxels, and a client's voxel updates sent straight to the realtime servers), whoever makes it. Set with updateApp (manage_apps). */
920
+ wildernessWritesOpen: Scalars['Boolean']['output'];
919
921
  };
920
922
  /** A free or purchasable access tier for an app, bundling a price and the set of runtime permission keys that granted users receive. */
921
923
  export type AppAccessTier = {
@@ -3997,6 +3999,16 @@ export type GridGroupGrant = {
3997
3999
  /** The runtime permission key string granted to the group/role. */
3998
4000
  permissionKey: Scalars['String']['output'];
3999
4001
  };
4002
+ /** The permission keys a grid grants every player with active access to the app (the grid_open_permissions input table). */
4003
+ export type GridOpenPermissions = {
4004
+ __typename?: 'GridOpenPermissions';
4005
+ /** The app (tenant) that owns the grid. */
4006
+ appId: Scalars['BigInt']['output'];
4007
+ /** The grid. */
4008
+ gridId: Scalars['BigInt']['output'];
4009
+ /** The keys every player with active access holds on this grid (its limits still cap them). Empty means the grid is not open. */
4010
+ permissionKeys: Array<Scalars['String']['output']>;
4011
+ };
4000
4012
  /** Kind of principal holding grid title. P1 can assign USER owners; GROUP and ORG are schema-reserved for future shared ownership. */
4001
4013
  export declare enum GridOwnerKind {
4002
4014
  Group = "GROUP",
@@ -4343,7 +4355,7 @@ export type Mutation = {
4343
4355
  claimFreeAppAccess: AppUserAccess;
4344
4356
  /** Claim the hosting slug for an app (idempotent; the same app re-claiming its slug is a no-op, a different slug MOVES the game). Registers https://<games host>/<slug>/ and https://<slug>.<content host> as the app's redirect URIs and sets launch_url to the former. Requires manage_apps on the app and a SESSION token. Refuses a slug that is not a DNS label, is reserved, or belongs to another app (HOSTED_SLUG_UNAVAILABLE), and answers CONTENT_HOSTING_DISABLED on a tier without a content CDN. */
4345
4357
  claimGameHosting: HostedGame;
4346
- /** Claim one currently unclaimed chunk as a new player-owned grid. Requires an ordinary app-scoped player token and active app access, but never manage_apps. The app's policy must be SELF_CLAIM. The server validates the app's grid assignment and peer-overlap rules, then atomically creates a one-chunk grid, assigns current-user ownership, grants access/update_voxel_data/use_voice_chat/teleport plus the player-code keys and use_video_chat where the caller's tier already carries them, and materializes the effective ACL. Conflicts and policy denials throw GraphQL errors; no partial grid, ownership, or grant rows remain. */
4358
+ /** Claim one wilderness chunk (a chunk no grid but the app's world grid covers) as a new player-owned grid. Requires an ordinary app-scoped player token and active app access, but never manage_apps. The app's policy must be SELF_CLAIM. A chunk inside another grid (a plot, a zone or another claim) is refused FORBIDDEN (GRID_NOT_CLAIMABLE): the claim would be the most specific grid there and take the chunk from whoever that grid grants. The server validates the app's grid assignment and peer-overlap rules, then atomically creates a one-chunk grid, assigns current-user ownership, grants access/update_voxel_data/use_voice_chat/teleport plus the player-code keys and use_video_chat where the caller's tier already carries them, and materializes the effective ACL. Conflicts and policy denials throw GraphQL errors; no partial grid, ownership, or grant rows remain. */
4347
4359
  claimGridChunk: ChunkClaimResult;
4348
4360
  /** Claim grid ownership under the app's claim policy (D4, server-authorized — no client manage_apps involved). SELF_CLAIM assigns ownership immediately; APPROVAL creates a pending request for designated approvers; INVITE requires a standing invite (consumed on use); MARKETPLACE_ONLY refuses. The grid must exist and have no current owner; game rules gate who may attempt a claim. */
4349
4361
  claimGridOwnership: GridClaimResult;
@@ -4601,7 +4613,7 @@ export type Mutation = {
4601
4613
  sendTextPacket: Scalars['Boolean']['output'];
4602
4614
  /** Send ONE webcam video fragment, fanned out to nearby actors as a ClientVideoNotification (Buddy v0.25.0). Requires a bearer game token and the use_video_chat runtime permission at app AND grid level -- without it the game server responds asynchronously with a GenericErrorResponse (errorCode UNAUTHORIZED). A datagram carries at most ~1117 bytes of videoData, so an encoded frame is split by the SDK into fragments (6-byte header: version, codec, frameId, fragIndex, fragCount; at most 16 per frame) and reassembled by receivers; this is a mutation PER FRAGMENT and sustained video belongs on the binary realtime relay. Every receiver in range pays the egress bytes: keep distance small and frames few. 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. */
4603
4615
  sendVideoPacket: Scalars['Boolean']['output'];
4604
- /** 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. There is NO separate per-request success response: the change fans out to nearby clients (the sender included) as a VoxelUpdateNotification carrying the same sequenceNumber (VoxelUpdateResponse is legacy and is never emitted). Failures arrive ASYNCHRONOUSLY as a GenericErrorResponse; both are correlated by the request sequenceNumber (correlation only — not an idempotency key; the server does not dedupe replays). */
4616
+ /** 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. There is NO separate per-request success response: the change fans out to nearby clients (the sender included) as a VoxelUpdateNotification carrying the same sequenceNumber (VoxelUpdateResponse is legacy and is never emitted). Failures arrive ASYNCHRONOUSLY as a GenericErrorResponse; both are correlated by the request sequenceNumber (correlation only — not an idempotency key; the server does not dedupe replays). Throws FORBIDDEN synchronously, before anything is sent, without the voxel edit permission updateVoxel checks for the chunk (app access, the tier's update_voxel_data, and update_voxel_data on the most specific grid covering the chunk), and for a chunk only the app's world grid covers while the app's wilderness is closed (App.wildernessWritesOpen false). */
4605
4617
  sendVoxelUpdate: Scalars['Boolean']['output'];
4606
4618
  /** 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. */
4607
4619
  setAppBudget: AppBudget;
@@ -4631,6 +4643,8 @@ export type Mutation = {
4631
4643
  setCrowdyStudioAgentPolicy: CrowdyStudioAgentPolicy;
4632
4644
  /** 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). */
4633
4645
  setEarlyAccessOverride: User;
4646
+ /** Open a grid to every player: replace the permission keys it grants each player with active access to the app (writes the `grid_open_permissions` input table), then recompute the grid's materialized effective ACL for all of them. The most specific grid covering a chunk decides a voxel write there, so a zone inside the world grid that everyone may build in must grant `update_voxel_data` itself. The grid's limits still cap these keys; players who get access later receive them when they connect. Pass an empty array to close the grid. Refuses the app's world grid (already open), the four player-code keys, and a 33rd open grid in one app. Requires app-admin ('manage_apps'). */
4647
+ setGridOpenPermissions: GridOpenPermissions;
4634
4648
  /** 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. */
4635
4649
  setGridPermissionLimits: GridPermissionLimits;
4636
4650
  /** Developer switch: DISABLED (the shell says "disabled by its developer") or back to LIVE. A TAKEN_DOWN game is refused (HOSTED_GAME_TAKEN_DOWN). Requires manage_apps and a SESSION token. */
@@ -4683,7 +4697,7 @@ export type Mutation = {
4683
4697
  updateActor: Actor;
4684
4698
  /** 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). Game-plane: requires an app token for the actor’s app (a session token or another app’s token is answered NotFound). `uuid` is the 32-character ASCII actor id; blobs are base64-encoded binary. */
4685
4699
  updateActorState: Actor;
4686
- /** 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. */
4700
+ /** Update mutable fields of an existing app (name, description, visibility, status, metadata, wildernessWritesOpen); 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. */
4687
4701
  updateApp: App;
4688
4702
  /** 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`. */
4689
4703
  updateAvatar: Avatar;
@@ -4695,7 +4709,7 @@ export type Mutation = {
4695
4709
  updateChannel: Group;
4696
4710
  /** 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. */
4697
4711
  updateChannelRole: GroupRole;
4698
- /** 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. */
4712
+ /** 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 an app token for the app and either the 'manage_apps' permission on the app (resolved via its org; super admins bypass) or the voxel edit permission for this chunk that updateVoxel checks (app access, the tier's update_voxel_data, and update_voxel_data on the most specific grid covering the chunk). Throws FORBIDDEN otherwise, and for a chunk only the app's world grid covers while the app's wilderness is closed (App.wildernessWritesOpen false). */
4699
4713
  updateChunk: Chunk;
4700
4714
  /** 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). */
4701
4715
  updateChunkLods: Maybe<Chunk>;
@@ -4719,7 +4733,7 @@ export type Mutation = {
4719
4733
  updateUserState: User;
4720
4734
  /** Sets the target user’s account `user_type` (e.g. "direct", "deleted"). Requires a super-admin bearer game token (and the management API enabled). */
4721
4735
  updateUserType: User;
4722
- /** 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. */
4736
+ /** 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 `update_voxel_data` on the most specific grid covering the chunk (the smallest by volume; of equal ones the lowest grid id), so a claim, a plot or a safe zone decides its chunks and the app's world grid decides only the wilderness. A chunk no grid covers is refused, and so is a chunk only the app's world grid covers while the app's wilderness is closed (App.wildernessWritesOpen false). */
4723
4737
  updateVoxel: Voxel;
4724
4738
  };
4725
4739
  export type MutationAbandonGamePublishArgs = {
@@ -5285,6 +5299,9 @@ export type MutationSetEarlyAccessOverrideArgs = {
5285
5299
  userId: Scalars['BigInt']['input'];
5286
5300
  value: Scalars['Boolean']['input'];
5287
5301
  };
5302
+ export type MutationSetGridOpenPermissionsArgs = {
5303
+ input: SetGridOpenPermissionsInput;
5304
+ };
5288
5305
  export type MutationSetGridPermissionLimitsArgs = {
5289
5306
  input: SetGridPermissionLimitsInput;
5290
5307
  };
@@ -6443,6 +6460,8 @@ export type Query = {
6443
6460
  gridClaimRequests: Array<GridClaimRequest>;
6444
6461
  /** 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'). */
6445
6462
  gridGroupGrants: Array<GridGroupGrant>;
6463
+ /** Read the permission keys a grid grants every player with active access to the app (an open build area, a public arena). An empty list means the grid is not open. Requires app-admin ('manage_apps'). */
6464
+ gridOpenPermissions: GridOpenPermissions;
6446
6465
  /** Read the current first-class ownership record for a grid. Requires authentication. Returns null when the grid has no current/unexpired owner. Player server code always resolves its execution identity from this record. */
6447
6466
  gridOwnership: Maybe<GridOwnership>;
6448
6467
  /** 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'). */
@@ -6954,6 +6973,10 @@ export type QueryGridGroupGrantsArgs = {
6954
6973
  gridId: Scalars['BigInt']['input'];
6955
6974
  groupId: Scalars['BigInt']['input'];
6956
6975
  };
6976
+ export type QueryGridOpenPermissionsArgs = {
6977
+ appId: Scalars['BigInt']['input'];
6978
+ gridId: Scalars['BigInt']['input'];
6979
+ };
6957
6980
  export type QueryGridOwnershipArgs = {
6958
6981
  appId: Scalars['BigInt']['input'];
6959
6982
  gridId: Scalars['BigInt']['input'];
@@ -7711,6 +7734,15 @@ export type SetCrowdyStudioProviderConsentInput = {
7711
7734
  /** True to accept, false to revoke. */
7712
7735
  consented: Scalars['Boolean']['input'];
7713
7736
  };
7737
+ /** Set the permission keys a grid grants every player with active access to the app (writes the grid_open_permissions input table): an open build area, a public arena. */
7738
+ export type SetGridOpenPermissionsInput = {
7739
+ /** The app (tenant) that owns the grid. */
7740
+ appId: Scalars['BigInt']['input'];
7741
+ /** The grid to open (or close). Not the app's world grid, which is open by default. */
7742
+ gridId: Scalars['BigInt']['input'];
7743
+ /** The keys every player with active access holds on this grid, capped by its limits. Empty array closes it (players keep only what they are granted directly or through a group). Each must be an active grid permission key, unique, at most 64 chars, and not one of the four player-code keys. */
7744
+ permissionKeys: Array<Scalars['String']['input']>;
7745
+ };
7714
7746
  /** Set the per-grid permission-key whitelist (writes the grid_permission_limits input table). */
7715
7747
  export type SetGridPermissionLimitsInput = {
7716
7748
  /** The app (tenant) that owns the grid. */
@@ -8056,6 +8088,8 @@ export type UpdateAppInput = {
8056
8088
  status?: InputMaybe<AppStatus>;
8057
8089
  /** New visibility (PUBLIC/UNLISTED/PRIVATE). Omit to leave unchanged. */
8058
8090
  visibility?: InputMaybe<AppVisibility>;
8091
+ /** Open (true) or close (false) the app's wilderness to voxel and chunk writes: chunks that no grid but the app's world grid covers. Closing refuses every write there, whoever makes it; each game API replica, and each realtime server for a client's direct voxel updates, acts on the change within about 15 seconds. Omit to leave unchanged. */
8092
+ wildernessWritesOpen?: InputMaybe<Scalars['Boolean']['input']>;
8059
8093
  };
8060
8094
  export type UpdateAvatarAppStateInput = {
8061
8095
  /** App (game) id the state is scoped to. Required. BigInt sent as a decimal string. */
@@ -8158,11 +8192,11 @@ export type UpdateVoxelInput = {
8158
8192
  appId: Scalars['BigInt']['input'];
8159
8193
  /** Address of the chunk that contains the voxel to edit. */
8160
8194
  coordinates: ChunkCoordinatesInput;
8161
- /** Local voxel position within the chunk (0-15 per axis; validated to the signed 16-bit range). */
8195
+ /** Local voxel position within the chunk, 0-15 per axis; anything else is refused. */
8162
8196
  location: VoxelCoordinatesInput;
8163
8197
  /** Optional BASE64-encoded binary state blob for the voxel; omit for none. */
8164
8198
  state?: InputMaybe<Scalars['String']['input']>;
8165
- /** Voxel type id to write (0-255). */
8199
+ /** Voxel type id to write, 0-255; anything else is refused. */
8166
8200
  voxelType: Scalars['Float']['input'];
8167
8201
  };
8168
8202
  /** One minute-bucketed usage sample. Byte/message counters are returned as strings because they can exceed the 32-bit Int range. */
@@ -8364,9 +8398,9 @@ export type VoxelState = {
8364
8398
  export type VoxelStateInput = {
8365
8399
  /** BASE64-encoded binary state blob for this voxel; omit/null for no extra state. */
8366
8400
  state?: InputMaybe<Scalars['String']['input']>;
8367
- /** Local voxel position within the chunk (0-15 per axis). */
8401
+ /** Local voxel position within the chunk, 0-15 per axis; anything else is refused. */
8368
8402
  voxelCoord: VoxelCoordinatesInput;
8369
- /** Voxel type id to set at this position (0-255). */
8403
+ /** Voxel type id to set at this position, 0-255; anything else is refused. */
8370
8404
  voxelType: Scalars['Int']['input'];
8371
8405
  };
8372
8406
  /** Relay-style cursor-paginated connection over voxel edit history entries (VoxelUpdateHistoryEvent). Page with `first`/`after`; cursors are opaque. */
@@ -8453,11 +8487,11 @@ export type VoxelUpdateRequestInput = {
8453
8487
  sequenceNumber?: InputMaybe<Scalars['Int']['input']>;
8454
8488
  /** A unique identifier for this voxel update. Must be exactly 32 bytes when encoded as UTF-8. */
8455
8489
  uuid: Scalars['String']['input'];
8456
- /** The voxel coordinates within the chunk. Values must be between -32768 and 32767 (int16 range). */
8490
+ /** The voxel coordinates within the chunk, 0-15 on each axis; anything else is refused. */
8457
8491
  voxel: VoxelCoordinatesInput;
8458
8492
  /** Optional voxel state data, base64-encoded. Omit (or send an empty string) when the voxel has no extra state — an empty payload is a type-only update. */
8459
8493
  voxelState?: InputMaybe<Scalars['String']['input']>;
8460
- /** The new voxel type ID. This determines the appearance and properties of the voxel. */
8494
+ /** The new voxel type ID, 0-255 (anything else is refused). This determines the appearance and properties of the voxel. */
8461
8495
  voxelType: Scalars['Int']['input'];
8462
8496
  };
8463
8497
  /** LEGACY — never emitted. The game server retired the dedicated voxel-update response opcode (132); an applied update now arrives as your own VoxelUpdateNotification (the sender is included in the chunk fan-out) and failures arrive as GenericErrorResponse. This type remains in the UdpNotification union for backward compatibility only — do not select it in new code; it will be removed in a future major version. */
@@ -9049,6 +9083,7 @@ export type AppQuery = {
9049
9083
  visibility: AppVisibility;
9050
9084
  status: AppStatus;
9051
9085
  metadata: string | null;
9086
+ wildernessWritesOpen: boolean;
9052
9087
  splitMode: boolean;
9053
9088
  deploymentTarget: string;
9054
9089
  reservedUdpBytesPerSec: string;
@@ -9086,6 +9121,7 @@ export type AppBySlugQuery = {
9086
9121
  visibility: AppVisibility;
9087
9122
  status: AppStatus;
9088
9123
  metadata: string | null;
9124
+ wildernessWritesOpen: boolean;
9089
9125
  splitMode: boolean;
9090
9126
  gameApiUrl: string | null;
9091
9127
  createdAt: string;
@@ -9126,6 +9162,7 @@ export type AppsForOrgQuery = {
9126
9162
  visibility: AppVisibility;
9127
9163
  status: AppStatus;
9128
9164
  metadata: string | null;
9165
+ wildernessWritesOpen: boolean;
9129
9166
  splitMode: boolean;
9130
9167
  gameApiUrl: string | null;
9131
9168
  createdAt: string;
@@ -9238,6 +9275,7 @@ export type CreateAppMutation = {
9238
9275
  visibility: AppVisibility;
9239
9276
  status: AppStatus;
9240
9277
  metadata: string | null;
9278
+ wildernessWritesOpen: boolean;
9241
9279
  createdAt: string;
9242
9280
  };
9243
9281
  };
@@ -9338,6 +9376,7 @@ export type MyAppsQuery = {
9338
9376
  visibility: AppVisibility;
9339
9377
  status: AppStatus;
9340
9378
  metadata: string | null;
9379
+ wildernessWritesOpen: boolean;
9341
9380
  splitMode: boolean;
9342
9381
  gameApiUrl: string | null;
9343
9382
  createdAt: string;
@@ -9386,6 +9425,7 @@ export type UpdateAppMutation = {
9386
9425
  visibility: AppVisibility;
9387
9426
  status: AppStatus;
9388
9427
  metadata: string | null;
9428
+ wildernessWritesOpen: boolean;
9389
9429
  updatedAt: string;
9390
9430
  };
9391
9431
  };
@@ -11463,6 +11503,19 @@ export type GridPermissionLimitsQuery = {
11463
11503
  permissionKeys: Array<string>;
11464
11504
  };
11465
11505
  };
11506
+ export type GridOpenPermissionsQueryVariables = Exact<{
11507
+ appId: Scalars['BigInt']['input'];
11508
+ gridId: Scalars['BigInt']['input'];
11509
+ }>;
11510
+ export type GridOpenPermissionsQuery = {
11511
+ __typename?: 'Query';
11512
+ gridOpenPermissions: {
11513
+ __typename?: 'GridOpenPermissions';
11514
+ appId: string;
11515
+ gridId: string;
11516
+ permissionKeys: Array<string>;
11517
+ };
11518
+ };
11466
11519
  export type GridGroupGrantsQueryVariables = Exact<{
11467
11520
  appId: Scalars['BigInt']['input'];
11468
11521
  gridId: Scalars['BigInt']['input'];
@@ -11556,6 +11609,18 @@ export type SetGridPermissionLimitsMutation = {
11556
11609
  permissionKeys: Array<string>;
11557
11610
  };
11558
11611
  };
11612
+ export type SetGridOpenPermissionsMutationVariables = Exact<{
11613
+ input: SetGridOpenPermissionsInput;
11614
+ }>;
11615
+ export type SetGridOpenPermissionsMutation = {
11616
+ __typename?: 'Mutation';
11617
+ setGridOpenPermissions: {
11618
+ __typename?: 'GridOpenPermissions';
11619
+ appId: string;
11620
+ gridId: string;
11621
+ permissionKeys: Array<string>;
11622
+ };
11623
+ };
11559
11624
  export type AssignGroupToGridMutationVariables = Exact<{
11560
11625
  input: AssignGroupToGridInput;
11561
11626
  }>;
@@ -14476,12 +14541,14 @@ export declare const GridUserPermissionsDocument: DocumentNode<GridUserPermissio
14476
14541
  export declare const NearbyGridPermissionsDocument: DocumentNode<NearbyGridPermissionsQuery, NearbyGridPermissionsQueryVariables>;
14477
14542
  export declare const NearbyGridsDocument: DocumentNode<NearbyGridsQuery, NearbyGridsQueryVariables>;
14478
14543
  export declare const GridPermissionLimitsDocument: DocumentNode<GridPermissionLimitsQuery, GridPermissionLimitsQueryVariables>;
14544
+ export declare const GridOpenPermissionsDocument: DocumentNode<GridOpenPermissionsQuery, GridOpenPermissionsQueryVariables>;
14479
14545
  export declare const GridGroupGrantsDocument: DocumentNode<GridGroupGrantsQuery, GridGroupGrantsQueryVariables>;
14480
14546
  export declare const CreateGridDocument: DocumentNode<CreateGridMutation, CreateGridMutationVariables>;
14481
14547
  export declare const DeleteGridDocument: DocumentNode<DeleteGridMutation, DeleteGridMutationVariables>;
14482
14548
  export declare const GrantGridPermissionsDocument: DocumentNode<GrantGridPermissionsMutation, GrantGridPermissionsMutationVariables>;
14483
14549
  export declare const RevokeGridPermissionsDocument: DocumentNode<RevokeGridPermissionsMutation, RevokeGridPermissionsMutationVariables>;
14484
14550
  export declare const SetGridPermissionLimitsDocument: DocumentNode<SetGridPermissionLimitsMutation, SetGridPermissionLimitsMutationVariables>;
14551
+ export declare const SetGridOpenPermissionsDocument: DocumentNode<SetGridOpenPermissionsMutation, SetGridOpenPermissionsMutationVariables>;
14485
14552
  export declare const AssignGroupToGridDocument: DocumentNode<AssignGroupToGridMutation, AssignGroupToGridMutationVariables>;
14486
14553
  export declare const RevokeGroupFromGridDocument: DocumentNode<RevokeGroupFromGridMutation, RevokeGroupFromGridMutationVariables>;
14487
14554
  export declare const CreateGridChannelDocument: DocumentNode<CreateGridChannelMutation, CreateGridChannelMutationVariables>;