@crowdedkingdoms/crowdyjs 18.0.3-dev.1 → 18.0.4-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.
- package/MIGRATION.md +21 -0
- package/README.md +4 -0
- package/dist/domains/apps.d.ts +4 -0
- package/dist/domains/apps.d.ts.map +1 -1
- package/dist/domains/apps.js +4 -0
- package/dist/generated/graphql.d.ts +20 -10
- package/dist/generated/graphql.d.ts.map +1 -1
- package/dist/generated/graphql.js +6 -6
- package/dist/grid-scope.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/kit/social.d.ts.map +1 -1
- package/dist/stores/chunks.d.ts +46 -2
- package/dist/stores/chunks.d.ts.map +1 -1
- package/dist/stores/chunks.js +111 -12
- package/dist/stores/index.d.ts +1 -1
- package/dist/stores/index.d.ts.map +1 -1
- package/package.json +1 -1
package/MIGRATION.md
CHANGED
|
@@ -120,6 +120,27 @@ super-admin's session). There is no SDK replacement.
|
|
|
120
120
|
`dev`'s SDL after #417 merged (`npm run schema:sync:paths -- --schema <that schema.gql>`, then
|
|
121
121
|
`npm run codegen`).
|
|
122
122
|
|
|
123
|
+
## 18.0.4: a refused chunk write-back is dropped, and the wilderness setting
|
|
124
|
+
|
|
125
|
+
The P3 W5 security review's notes for the SDKs. The game API now refuses `updateChunk` with
|
|
126
|
+
`FORBIDDEN` for a player without edit permission on the chunk (someone else's claimed plot, a safe
|
|
127
|
+
zone) and while the app's wilderness is closed (cks-game-api #434, ck-api `dev/v2.30.0`).
|
|
128
|
+
|
|
129
|
+
- `ChunkStore` no longer retries a write-back forever. A write the server refuses (`FORBIDDEN`,
|
|
130
|
+
`SCOPE_MISSING`, `BAD_REQUEST`, `BAD_USER_INPUT`, `NOT_FOUND`, `extensions.retryable: false`, or
|
|
131
|
+
HTTP 400/403/404/413/422) is dropped after one attempt. One that can clear (`PLATFORM_BUSY`, a
|
|
132
|
+
network drop, a timeout, a server error) is tried five times, 0.7 s, 1.4 s, 2.8 s and 5.6 s
|
|
133
|
+
apart, then dropped. A dropped chunk keeps its local voxels and is no longer `dirty`.
|
|
134
|
+
- `ChunkStore.onWriteBackFailed(listener)` reports each dropped write-back as a
|
|
135
|
+
`ChunkWriteBackFailure` (`chunk`, `coord`, `error`, `reason: 'refused' | 'exhausted'`,
|
|
136
|
+
`attempts`). The store does not undo the edit: undo it, or prune the chunk and load it again.
|
|
137
|
+
- `ChunkStore.flush()` waits out the backoff and resolves with the write-backs it dropped
|
|
138
|
+
(it resolved with nothing before, and looped forever on a refusal).
|
|
139
|
+
- `App.wildernessWritesOpen` is selected by `apps.app`, `appBySlug`, `forOrg`, `myApps`, `create`
|
|
140
|
+
and `update`; `apps.update(appId, { wildernessWritesOpen: false })` closes the wilderness
|
|
141
|
+
(`manage_apps`). The marketplace listings do not select it. Selecting it needs a game API with
|
|
142
|
+
#434.
|
|
143
|
+
|
|
123
144
|
## 18.0.3: a player takes back their consent and their trust
|
|
124
145
|
|
|
125
146
|
Additive (OI-2026-09-28-001). It needs a game API with cks-game-api #431 (ck-api
|
package/README.md
CHANGED
|
@@ -587,6 +587,10 @@ write-back), `channelInbox` / `actorInbox` (message inboxes), `events` (typed
|
|
|
587
587
|
event router), `host` (host tracking), and `save` / `avatar` (typed durable
|
|
588
588
|
state).
|
|
589
589
|
|
|
590
|
+
A chunk write-back the server refuses (a visitor on someone else's plot, a safe zone, a closed
|
|
591
|
+
wilderness) is dropped, not retried; one that fails for a reason that can clear is tried five
|
|
592
|
+
times. Listen with `session.chunks.onWriteBackFailed(...)` to undo or flag the edit (18.0.4).
|
|
593
|
+
|
|
590
594
|
Every store is **opt-in twice over**: only configured stores are constructed
|
|
591
595
|
(and only they exist on the session's TYPE — `session.host` without
|
|
592
596
|
`host: ...` in the config is a compile error), and the layer lives behind the
|
package/dist/domains/apps.d.ts
CHANGED
|
@@ -214,6 +214,10 @@ export declare class AppsAPI {
|
|
|
214
214
|
/**
|
|
215
215
|
* Update an app's mutable fields. Requires the `manage_apps` app permission.
|
|
216
216
|
*
|
|
217
|
+
* `wildernessWritesOpen: false` closes the app's wilderness (chunks no grid but the
|
|
218
|
+
* world grid covers): every voxel and chunk write there is refused with `FORBIDDEN`,
|
|
219
|
+
* whoever makes it, within 15 seconds on every game API replica. Apps start open.
|
|
220
|
+
*
|
|
217
221
|
* @param appId - Numeric app id.
|
|
218
222
|
* @param input - {@link UpdateAppInput} fields to change.
|
|
219
223
|
* @returns The updated {@link App}.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apps.d.ts","sourceRoot":"","sources":["../../src/domains/apps.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"apps.d.ts","sourceRoot":"","sources":["../../src/domains/apps.ts"],"names":[],"mappings":"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"}
|
package/dist/domains/apps.js
CHANGED
|
@@ -252,6 +252,10 @@ export class AppsAPI {
|
|
|
252
252
|
/**
|
|
253
253
|
* Update an app's mutable fields. Requires the `manage_apps` app permission.
|
|
254
254
|
*
|
|
255
|
+
* `wildernessWritesOpen: false` closes the app's wilderness (chunks no grid but the
|
|
256
|
+
* world grid covers): every voxel and chunk write there is refused with `FORBIDDEN`,
|
|
257
|
+
* whoever makes it, within 15 seconds on every game API replica. Apps start open.
|
|
258
|
+
*
|
|
255
259
|
* @param appId - Numeric app id.
|
|
256
260
|
* @param input - {@link UpdateAppInput} fields to change.
|
|
257
261
|
* @returns The updated {@link App}.
|
|
@@ -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), 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 = {
|
|
@@ -4601,7 +4603,7 @@ export type Mutation = {
|
|
|
4601
4603
|
sendTextPacket: Scalars['Boolean']['output'];
|
|
4602
4604
|
/** 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
4605
|
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). */
|
|
4606
|
+
/** 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 for a chunk only the app's world grid covers while the app's wilderness is closed (App.wildernessWritesOpen false). */
|
|
4605
4607
|
sendVoxelUpdate: Scalars['Boolean']['output'];
|
|
4606
4608
|
/** 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
4609
|
setAppBudget: AppBudget;
|
|
@@ -4683,7 +4685,7 @@ export type Mutation = {
|
|
|
4683
4685
|
updateActor: Actor;
|
|
4684
4686
|
/** 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
4687
|
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. */
|
|
4688
|
+
/** 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
4689
|
updateApp: App;
|
|
4688
4690
|
/** 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
4691
|
updateAvatar: Avatar;
|
|
@@ -4695,7 +4697,7 @@ export type Mutation = {
|
|
|
4695
4697
|
updateChannel: Group;
|
|
4696
4698
|
/** 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
4699
|
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
|
|
4700
|
+
/** 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 a 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
4701
|
updateChunk: Chunk;
|
|
4700
4702
|
/** 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
4703
|
updateChunkLods: Maybe<Chunk>;
|
|
@@ -4719,7 +4721,7 @@ export type Mutation = {
|
|
|
4719
4721
|
updateUserState: User;
|
|
4720
4722
|
/** 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
4723
|
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. */
|
|
4724
|
+
/** 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. A chunk only the app's world grid covers is refused while the app's wilderness is closed (App.wildernessWritesOpen false). */
|
|
4723
4725
|
updateVoxel: Voxel;
|
|
4724
4726
|
};
|
|
4725
4727
|
export type MutationAbandonGamePublishArgs = {
|
|
@@ -8056,6 +8058,8 @@ export type UpdateAppInput = {
|
|
|
8056
8058
|
status?: InputMaybe<AppStatus>;
|
|
8057
8059
|
/** New visibility (PUBLIC/UNLISTED/PRIVATE). Omit to leave unchanged. */
|
|
8058
8060
|
visibility?: InputMaybe<AppVisibility>;
|
|
8061
|
+
/** 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 acts on the change within 15 seconds. Omit to leave unchanged. */
|
|
8062
|
+
wildernessWritesOpen?: InputMaybe<Scalars['Boolean']['input']>;
|
|
8059
8063
|
};
|
|
8060
8064
|
export type UpdateAvatarAppStateInput = {
|
|
8061
8065
|
/** App (game) id the state is scoped to. Required. BigInt sent as a decimal string. */
|
|
@@ -8158,11 +8162,11 @@ export type UpdateVoxelInput = {
|
|
|
8158
8162
|
appId: Scalars['BigInt']['input'];
|
|
8159
8163
|
/** Address of the chunk that contains the voxel to edit. */
|
|
8160
8164
|
coordinates: ChunkCoordinatesInput;
|
|
8161
|
-
/** Local voxel position within the chunk
|
|
8165
|
+
/** Local voxel position within the chunk, 0-15 per axis; anything else is refused. */
|
|
8162
8166
|
location: VoxelCoordinatesInput;
|
|
8163
8167
|
/** Optional BASE64-encoded binary state blob for the voxel; omit for none. */
|
|
8164
8168
|
state?: InputMaybe<Scalars['String']['input']>;
|
|
8165
|
-
/** Voxel type id to write
|
|
8169
|
+
/** Voxel type id to write, 0-255; anything else is refused. */
|
|
8166
8170
|
voxelType: Scalars['Float']['input'];
|
|
8167
8171
|
};
|
|
8168
8172
|
/** One minute-bucketed usage sample. Byte/message counters are returned as strings because they can exceed the 32-bit Int range. */
|
|
@@ -8364,9 +8368,9 @@ export type VoxelState = {
|
|
|
8364
8368
|
export type VoxelStateInput = {
|
|
8365
8369
|
/** BASE64-encoded binary state blob for this voxel; omit/null for no extra state. */
|
|
8366
8370
|
state?: InputMaybe<Scalars['String']['input']>;
|
|
8367
|
-
/** Local voxel position within the chunk
|
|
8371
|
+
/** Local voxel position within the chunk, 0-15 per axis; anything else is refused. */
|
|
8368
8372
|
voxelCoord: VoxelCoordinatesInput;
|
|
8369
|
-
/** Voxel type id to set at this position
|
|
8373
|
+
/** Voxel type id to set at this position, 0-255; anything else is refused. */
|
|
8370
8374
|
voxelType: Scalars['Int']['input'];
|
|
8371
8375
|
};
|
|
8372
8376
|
/** Relay-style cursor-paginated connection over voxel edit history entries (VoxelUpdateHistoryEvent). Page with `first`/`after`; cursors are opaque. */
|
|
@@ -8453,11 +8457,11 @@ export type VoxelUpdateRequestInput = {
|
|
|
8453
8457
|
sequenceNumber?: InputMaybe<Scalars['Int']['input']>;
|
|
8454
8458
|
/** A unique identifier for this voxel update. Must be exactly 32 bytes when encoded as UTF-8. */
|
|
8455
8459
|
uuid: Scalars['String']['input'];
|
|
8456
|
-
/** The voxel coordinates within the chunk
|
|
8460
|
+
/** The voxel coordinates within the chunk, 0-15 on each axis; anything else is refused. */
|
|
8457
8461
|
voxel: VoxelCoordinatesInput;
|
|
8458
8462
|
/** 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
8463
|
voxelState?: InputMaybe<Scalars['String']['input']>;
|
|
8460
|
-
/** The new voxel type ID. This determines the appearance and properties of the voxel. */
|
|
8464
|
+
/** The new voxel type ID, 0-255 (anything else is refused). This determines the appearance and properties of the voxel. */
|
|
8461
8465
|
voxelType: Scalars['Int']['input'];
|
|
8462
8466
|
};
|
|
8463
8467
|
/** 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 +9053,7 @@ export type AppQuery = {
|
|
|
9049
9053
|
visibility: AppVisibility;
|
|
9050
9054
|
status: AppStatus;
|
|
9051
9055
|
metadata: string | null;
|
|
9056
|
+
wildernessWritesOpen: boolean;
|
|
9052
9057
|
splitMode: boolean;
|
|
9053
9058
|
deploymentTarget: string;
|
|
9054
9059
|
reservedUdpBytesPerSec: string;
|
|
@@ -9086,6 +9091,7 @@ export type AppBySlugQuery = {
|
|
|
9086
9091
|
visibility: AppVisibility;
|
|
9087
9092
|
status: AppStatus;
|
|
9088
9093
|
metadata: string | null;
|
|
9094
|
+
wildernessWritesOpen: boolean;
|
|
9089
9095
|
splitMode: boolean;
|
|
9090
9096
|
gameApiUrl: string | null;
|
|
9091
9097
|
createdAt: string;
|
|
@@ -9126,6 +9132,7 @@ export type AppsForOrgQuery = {
|
|
|
9126
9132
|
visibility: AppVisibility;
|
|
9127
9133
|
status: AppStatus;
|
|
9128
9134
|
metadata: string | null;
|
|
9135
|
+
wildernessWritesOpen: boolean;
|
|
9129
9136
|
splitMode: boolean;
|
|
9130
9137
|
gameApiUrl: string | null;
|
|
9131
9138
|
createdAt: string;
|
|
@@ -9238,6 +9245,7 @@ export type CreateAppMutation = {
|
|
|
9238
9245
|
visibility: AppVisibility;
|
|
9239
9246
|
status: AppStatus;
|
|
9240
9247
|
metadata: string | null;
|
|
9248
|
+
wildernessWritesOpen: boolean;
|
|
9241
9249
|
createdAt: string;
|
|
9242
9250
|
};
|
|
9243
9251
|
};
|
|
@@ -9338,6 +9346,7 @@ export type MyAppsQuery = {
|
|
|
9338
9346
|
visibility: AppVisibility;
|
|
9339
9347
|
status: AppStatus;
|
|
9340
9348
|
metadata: string | null;
|
|
9349
|
+
wildernessWritesOpen: boolean;
|
|
9341
9350
|
splitMode: boolean;
|
|
9342
9351
|
gameApiUrl: string | null;
|
|
9343
9352
|
createdAt: string;
|
|
@@ -9386,6 +9395,7 @@ export type UpdateAppMutation = {
|
|
|
9386
9395
|
visibility: AppVisibility;
|
|
9387
9396
|
status: AppStatus;
|
|
9388
9397
|
metadata: string | null;
|
|
9398
|
+
wildernessWritesOpen: boolean;
|
|
9389
9399
|
updatedAt: string;
|
|
9390
9400
|
};
|
|
9391
9401
|
};
|