@crowdedkingdoms/crowdyjs 18.6.0-dev.1 → 18.7.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.
- package/MIGRATION.md +89 -0
- package/README.md +108 -4
- package/dist/binary-wire.d.ts +30 -2
- package/dist/binary-wire.d.ts.map +1 -1
- package/dist/binary-wire.js +61 -3
- package/dist/domains/appAccess.d.ts +32 -1
- package/dist/domains/appAccess.d.ts.map +1 -1
- package/dist/domains/appAccess.js +49 -1
- package/dist/domains/channels.d.ts +8 -3
- package/dist/domains/channels.d.ts.map +1 -1
- package/dist/domains/channels.js +8 -3
- package/dist/domains/exec.d.ts +14 -0
- package/dist/domains/exec.d.ts.map +1 -1
- package/dist/domains/exec.js +13 -1
- package/dist/domains/grids.d.ts +1 -0
- package/dist/domains/grids.d.ts.map +1 -1
- package/dist/domains/grids.js +1 -0
- package/dist/domains/portal.d.ts +18 -0
- package/dist/domains/portal.d.ts.map +1 -1
- package/dist/domains/portal.js +1 -1
- package/dist/domains/udp.d.ts +27 -8
- package/dist/domains/udp.d.ts.map +1 -1
- package/dist/domains/udp.js +39 -9
- package/dist/domains/users.d.ts +23 -2
- package/dist/domains/users.d.ts.map +1 -1
- package/dist/domains/users.js +34 -2
- package/dist/domains/voxels.d.ts +4 -3
- package/dist/domains/voxels.d.ts.map +1 -1
- package/dist/domains/voxels.js +4 -3
- package/dist/errors.d.ts +52 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +74 -0
- package/dist/generated/graphql-schema.d.ts +160 -48
- package/dist/generated/graphql-schema.d.ts.map +1 -1
- package/dist/generated/graphql-schema.js +3 -1
- package/dist/generated/graphql.d.ts +153 -17
- package/dist/generated/graphql.d.ts.map +1 -1
- package/dist/generated/graphql.js +24 -17
- package/dist/grid-mods/grid-host-calls.d.ts +34 -0
- package/dist/grid-mods/grid-host-calls.d.ts.map +1 -1
- package/dist/grid-mods/grid-host-calls.js +28 -5
- package/dist/grid-mods/index.d.ts +1 -1
- package/dist/grid-mods/index.d.ts.map +1 -1
- package/dist/grid-mods/index.js +1 -1
- package/dist/grid-scope.d.ts +3 -0
- package/dist/grid-scope.d.ts.map +1 -1
- package/dist/grid-scope.js +6 -0
- package/dist/index.d.ts +9 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -4
- package/dist/media/voice-frames.d.ts +258 -0
- package/dist/media/voice-frames.d.ts.map +1 -0
- package/dist/media/voice-frames.js +424 -0
- package/dist/metrics.d.ts +1 -1
- package/dist/realtime.d.ts +19 -3
- package/dist/realtime.d.ts.map +1 -1
- package/dist/realtime.js +8 -0
- package/dist/stores/actors.d.ts +3 -1
- package/dist/stores/actors.d.ts.map +1 -1
- package/dist/stores/chunks.d.ts +65 -6
- package/dist/stores/chunks.d.ts.map +1 -1
- package/dist/stores/chunks.js +161 -19
- package/dist/stores/index.d.ts +2 -2
- package/dist/stores/index.d.ts.map +1 -1
- package/dist/stores/index.js +1 -1
- package/dist/stores/keys.d.ts +5 -0
- package/dist/stores/keys.d.ts.map +1 -1
- package/dist/stores/keys.js +7 -0
- package/dist/stores/session.d.ts +1 -1
- package/dist/stores/session.d.ts.map +1 -1
- package/dist/stores/session.js +2 -0
- package/dist/types.d.ts +49 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/errors.d.ts
CHANGED
|
@@ -247,6 +247,58 @@ export declare class CrowdyUserCodeFaultError extends CrowdyGraphQLError {
|
|
|
247
247
|
* ```
|
|
248
248
|
*/
|
|
249
249
|
export declare function playerFaultOf(value: unknown): CrowdyPlayerFault | null;
|
|
250
|
+
/** `extensions.code` for "an actor with this uuid already exists" (HTTP 409). */
|
|
251
|
+
export declare const ACTOR_EXISTS_CODE = "ACTOR_EXISTS";
|
|
252
|
+
/** `extensions.code` for "this player's access to the app was revoked" (HTTP 403). */
|
|
253
|
+
export declare const ACCESS_REVOKED_CODE = "ACCESS_REVOKED";
|
|
254
|
+
/** `extensions.code` for "this player is suspended from the app until a time" (HTTP 403). */
|
|
255
|
+
export declare const ACCESS_SUSPENDED_CODE = "ACCESS_SUSPENDED";
|
|
256
|
+
/** `extensions.code` for "this player holds no access to the app" (HTTP 403). */
|
|
257
|
+
export declare const ACCESS_NOT_GRANTED_CODE = "ACCESS_NOT_GRANTED";
|
|
258
|
+
/** `extensions.code` for "the app is paused" (HTTP 403); see {@link appPausedOf}. */
|
|
259
|
+
export declare const APP_PAUSED_CODE = "APP_PAUSED";
|
|
260
|
+
/**
|
|
261
|
+
* Why an app is paused, as `extensions.reason` on `APP_PAUSED` and
|
|
262
|
+
* `AppRuntimeGate.reason` carry it. Open union: the server may add one.
|
|
263
|
+
*/
|
|
264
|
+
export type AppPauseReason = 'insufficient_funds' | 'spend_cap' | 'subscription_lapsed' | (string & {});
|
|
265
|
+
/**
|
|
266
|
+
* An `ACTOR_EXISTS` refusal (creating an actor whose uuid is taken), or `null`.
|
|
267
|
+
* `ownedByCaller` is `extensions.ownedByCaller`: `true` means the actor is
|
|
268
|
+
* already yours (a retried create; read it rather than failing), `false` that
|
|
269
|
+
* another player holds the uuid, `null` when the server did not say.
|
|
270
|
+
*/
|
|
271
|
+
export declare function actorExistsOf(value: unknown): {
|
|
272
|
+
ownedByCaller: boolean | null;
|
|
273
|
+
} | null;
|
|
274
|
+
/** A refusal of the player's own access to an app; see {@link accessRefusalOf}. */
|
|
275
|
+
export interface CrowdyAccessRefusal {
|
|
276
|
+
code: 'ACCESS_REVOKED' | 'ACCESS_SUSPENDED' | 'ACCESS_NOT_GRANTED';
|
|
277
|
+
/** `extensions.suspendedUntil` (ISO-8601) on `ACCESS_SUSPENDED`; access returns by itself then. */
|
|
278
|
+
suspendedUntil?: string;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* An access refusal (`ACCESS_REVOKED`, `ACCESS_SUSPENDED` or `ACCESS_NOT_GRANTED`,
|
|
282
|
+
* all HTTP 403) from a thrown error or a raw error payload, or `null`. None of
|
|
283
|
+
* them is fixed by retrying; tell the player.
|
|
284
|
+
*/
|
|
285
|
+
export declare function accessRefusalOf(value: unknown): CrowdyAccessRefusal | null;
|
|
286
|
+
/**
|
|
287
|
+
* An `APP_PAUSED` refusal (HTTP 403: the app's runtime gate is not ACTIVE), or
|
|
288
|
+
* `null`. `reason` is `extensions.reason`. Show the player that the world is
|
|
289
|
+
* paused instead of retrying in a loop.
|
|
290
|
+
*/
|
|
291
|
+
export declare function appPausedOf(value: unknown): {
|
|
292
|
+
reason: AppPauseReason | null;
|
|
293
|
+
} | null;
|
|
294
|
+
/**
|
|
295
|
+
* Whether an app's runtime gate (`AppTokenResponse.runtimeGate`,
|
|
296
|
+
* `GameClientBootstrap.runtimeGate`) says the app is paused: any status but
|
|
297
|
+
* `ACTIVE`. A missing gate (an older server) reads as not paused.
|
|
298
|
+
*/
|
|
299
|
+
export declare function isAppPaused(gate: {
|
|
300
|
+
status: string;
|
|
301
|
+
} | null | undefined): boolean;
|
|
250
302
|
/**
|
|
251
303
|
* A network-level failure before any HTTP response was received: DNS failure,
|
|
252
304
|
* TLS error, connection refused, or an aborted `fetch`. Generally retryable
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,iFAAiF;AACjF,MAAM,WAAW,yBAAyB;IACxC,mFAAmF;IACnF,OAAO,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,SAAS,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IAC/B,2EAA2E;IAC3E,IAAI,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACpC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,oEAAoE;AACpE,MAAM,WAAW,kBAAkB;IACjC,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;GAIG;AACH,qBAAa,WAAY,SAAQ,KAAK;IACpC,yDAAyD;IACzD,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;gBAEb,OAAO,EAAE,kBAAkB;CAKxC;AAED;;;;;;GAMG;AACH,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,wCAAwC;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAKzC;AAED;;;;;;;;;GASG;AACH,qBAAa,kBAAmB,SAAQ,WAAW;IACjD,oEAAoE;IACpE,QAAQ,CAAC,aAAa,EAAE,yBAAyB,EAAE,CAAC;gBAExC,MAAM,EAAE,yBAAyB,EAAE;IAK/C;;;;;;OAMG;IACH,IAAI,IAAI,IAAI,OAAO,CAElB;IAED;;;;OAIG;IACH,IAAI,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAEpD;CACF;AAED;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,oBAAoB,CAAC;AAEtD,0EAA0E;AAC1E,eAAO,MAAM,qBAAqB,qBAAqB,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,qBAAa,yBAA0B,SAAQ,kBAAkB;IAC/D,8DAA8D;IAC9D,IAAI,KAAK,IAAI,MAAM,GAAG,SAAS,CAG9B;IAED;;;OAGG;IACH,IAAI,aAAa,IAAI,MAAM,GAAG,SAAS,CAGtC;IAED;;;;;OAKG;IACH,IAAI,SAAS,IAAI,OAAO,CAEvB;CACF;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEhE;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GACvB,iBAAiB,GACjB,oBAAoB,GACpB,0BAA0B,GAC1B,eAAe,GACf,gBAAgB,GAChB,iBAAiB,GACjB,cAAc,GACd,iBAAiB,GACjB,cAAc,GACd,sBAAsB,GACtB,iBAAiB,GACjB,aAAa,GACb,WAAW,GACX,iBAAiB,GACjB,kBAAkB,GAClB,iBAAiB,GACjB,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElB,wFAAwF;AACxF,MAAM,WAAW,iBAAiB;IAChC,uEAAuE;IACvE,IAAI,EAAE,eAAe,CAAC;IACtB,2BAA2B;IAC3B,KAAK,EAAE,gBAAgB,CAAC;IACxB,qFAAqF;IACrF,SAAS,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,wBAAyB,SAAQ,kBAAkB;IAC9D,gEAAgE;IAChE,IAAI,KAAK,IAAI,iBAAiB,CAQ7B;IAED,0DAA0D;IAC1D,IAAI,KAAK,IAAI,gBAAgB,CAE5B;IAED,2FAA2F;IAC3F,IAAI,SAAS,IAAI,OAAO,CAEvB;CACF;AA0BD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,GAAG,IAAI,CAgCtE;AAED,iFAAiF;AACjF,eAAO,MAAM,iBAAiB,iBAAiB,CAAC;AAChD,sFAAsF;AACtF,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AACpD,6FAA6F;AAC7F,eAAO,MAAM,qBAAqB,qBAAqB,CAAC;AACxD,iFAAiF;AACjF,eAAO,MAAM,uBAAuB,uBAAuB,CAAC;AAC5D,qFAAqF;AACrF,eAAO,MAAM,eAAe,eAAe,CAAC;AAE5C;;;GAGG;AACH,MAAM,MAAM,cAAc,GACtB,oBAAoB,GACpB,WAAW,GACX,qBAAqB,GACrB,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAelB;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,aAAa,EAAE,OAAO,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CAKtF;AAED,mFAAmF;AACnF,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,gBAAgB,GAAG,kBAAkB,GAAG,oBAAoB,CAAC;IACnE,mGAAmG;IACnG,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,GAAG,IAAI,CAc1E;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CAKpF;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GAC1C,OAAO,CAET;AAED;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,WAAW;gBACrC,KAAK,EAAE,OAAO;CAG3B;AAED;;;;;;;GAOG;AACH,qBAAa,kBAAmB,SAAQ,WAAW;gBACrC,SAAS,EAAE,MAAM;CAG9B;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,mBAAoB,SAAQ,WAAW;IAClD,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;gBAEjB,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO;CAKnG;AAED;;;;;GAKG;AACH,qBAAa,mBAAoB,SAAQ,WAAW;CAAG"}
|
package/dist/errors.js
CHANGED
|
@@ -243,6 +243,80 @@ export function playerFaultOf(value) {
|
|
|
243
243
|
return faultFromExtensions(payload.extensions);
|
|
244
244
|
return null;
|
|
245
245
|
}
|
|
246
|
+
/** `extensions.code` for "an actor with this uuid already exists" (HTTP 409). */
|
|
247
|
+
export const ACTOR_EXISTS_CODE = 'ACTOR_EXISTS';
|
|
248
|
+
/** `extensions.code` for "this player's access to the app was revoked" (HTTP 403). */
|
|
249
|
+
export const ACCESS_REVOKED_CODE = 'ACCESS_REVOKED';
|
|
250
|
+
/** `extensions.code` for "this player is suspended from the app until a time" (HTTP 403). */
|
|
251
|
+
export const ACCESS_SUSPENDED_CODE = 'ACCESS_SUSPENDED';
|
|
252
|
+
/** `extensions.code` for "this player holds no access to the app" (HTTP 403). */
|
|
253
|
+
export const ACCESS_NOT_GRANTED_CODE = 'ACCESS_NOT_GRANTED';
|
|
254
|
+
/** `extensions.code` for "the app is paused" (HTTP 403); see {@link appPausedOf}. */
|
|
255
|
+
export const APP_PAUSED_CODE = 'APP_PAUSED';
|
|
256
|
+
/** The first error entry carrying `code`, from an error or a raw payload. */
|
|
257
|
+
function errorWithCode(value, code) {
|
|
258
|
+
if (!value || typeof value !== 'object')
|
|
259
|
+
return null;
|
|
260
|
+
const entries = value instanceof CrowdyGraphQLError
|
|
261
|
+
? value.graphqlErrors
|
|
262
|
+
: [value];
|
|
263
|
+
return entries.find((entry) => entry?.extensions?.code === code) ?? null;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* An `ACTOR_EXISTS` refusal (creating an actor whose uuid is taken), or `null`.
|
|
267
|
+
* `ownedByCaller` is `extensions.ownedByCaller`: `true` means the actor is
|
|
268
|
+
* already yours (a retried create; read it rather than failing), `false` that
|
|
269
|
+
* another player holds the uuid, `null` when the server did not say.
|
|
270
|
+
*/
|
|
271
|
+
export function actorExistsOf(value) {
|
|
272
|
+
const entry = errorWithCode(value, ACTOR_EXISTS_CODE);
|
|
273
|
+
if (!entry)
|
|
274
|
+
return null;
|
|
275
|
+
const owned = entry.extensions?.ownedByCaller;
|
|
276
|
+
return { ownedByCaller: typeof owned === 'boolean' ? owned : null };
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* An access refusal (`ACCESS_REVOKED`, `ACCESS_SUSPENDED` or `ACCESS_NOT_GRANTED`,
|
|
280
|
+
* all HTTP 403) from a thrown error or a raw error payload, or `null`. None of
|
|
281
|
+
* them is fixed by retrying; tell the player.
|
|
282
|
+
*/
|
|
283
|
+
export function accessRefusalOf(value) {
|
|
284
|
+
for (const code of [
|
|
285
|
+
ACCESS_SUSPENDED_CODE,
|
|
286
|
+
ACCESS_REVOKED_CODE,
|
|
287
|
+
ACCESS_NOT_GRANTED_CODE,
|
|
288
|
+
]) {
|
|
289
|
+
const entry = errorWithCode(value, code);
|
|
290
|
+
if (!entry)
|
|
291
|
+
continue;
|
|
292
|
+
const refusal = { code };
|
|
293
|
+
const until = entry.extensions?.suspendedUntil;
|
|
294
|
+
if (typeof until === 'string' && until.length > 0)
|
|
295
|
+
refusal.suspendedUntil = until;
|
|
296
|
+
return refusal;
|
|
297
|
+
}
|
|
298
|
+
return null;
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* An `APP_PAUSED` refusal (HTTP 403: the app's runtime gate is not ACTIVE), or
|
|
302
|
+
* `null`. `reason` is `extensions.reason`. Show the player that the world is
|
|
303
|
+
* paused instead of retrying in a loop.
|
|
304
|
+
*/
|
|
305
|
+
export function appPausedOf(value) {
|
|
306
|
+
const entry = errorWithCode(value, APP_PAUSED_CODE);
|
|
307
|
+
if (!entry)
|
|
308
|
+
return null;
|
|
309
|
+
const reason = entry.extensions?.reason;
|
|
310
|
+
return { reason: typeof reason === 'string' && reason.length > 0 ? reason : null };
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Whether an app's runtime gate (`AppTokenResponse.runtimeGate`,
|
|
314
|
+
* `GameClientBootstrap.runtimeGate`) says the app is paused: any status but
|
|
315
|
+
* `ACTIVE`. A missing gate (an older server) reads as not paused.
|
|
316
|
+
*/
|
|
317
|
+
export function isAppPaused(gate) {
|
|
318
|
+
return gate != null && gate.status !== 'ACTIVE';
|
|
319
|
+
}
|
|
246
320
|
/**
|
|
247
321
|
* A network-level failure before any HTTP response was received: DNS failure,
|
|
248
322
|
* TLS error, connection refused, or an aborted `fetch`. Generally retryable
|