import type { GameModelAPI } from '../domains/gameModel.js'; import type { Scalars } from '../generated/graphql.js'; import type { EngineDetector } from './engine.js'; import { type MovementViolationEvent } from './wire.js'; /** Options for {@link MovementKit}. */ export interface MovementKitOptions { /** The warden module name. Defaults to `'movement-warden'`. */ moduleName?: string; /** The warden-config container type. Defaults to `'WardenConfig'`. */ configTypeName?: string; } /** A user's violation book as the warden reports it. */ export interface KitViolations { userId: string; speed: number; teleport: number; bounds: number; log: Array<{ atMs: number; kind: string; detail: string; }>; } /** * Runtime helpers for the movement-warden (Wave 3, observe/flag posture): * read violation books, inspect the live envelope config, and parse type-95 * violation events. The warden never corrects or kicks — client prediction * stays exactly as it is; games decide what flags mean (scoreboard shame, * moderation reports, tournament DQs). * * Client-prediction guidance: keep your movement client-authoritative and * SMOOTH — the envelopes are generous (speed tolerance + one-sample jitter * forgiveness) so honest clients never flag; teleports (fast travel, * respawns) should be paired with game-known context you can correlate * against the violation log. * * Obtained via `client.kit(appId).movement`. */ export declare class MovementKit { private readonly appId; private readonly gameModel; private readonly engines; private readonly moduleName; private readonly configTypeName; constructor(appId: Scalars['BigInt']['input'], gameModel: GameModelAPI, engines: EngineDetector, options?: MovementKitOptions); /** Is the warden deployed + enabled (cached per session)? */ engineAvailable(): Promise; /** A user's violation book (your own without an argument). */ violations(userId?: string): Promise; /** The live envelope configuration (posture is always `'observe'` v1). */ config(): Promise>; /** Warden totals (watched actors, flagged users, samples). */ status(): Promise>; /** STUDIO (admin) — create/adjust the WardenConfig container. */ defineConfig(input: { displayName?: string; chunk?: [number, number, number]; radiusXz?: number; maxSpeed?: number; maxTeleport?: number; bounds?: [number, number, number, number]; tolerancePct?: number; }): Promise<{ __typename?: "GmContainer"; containerId: string; appId: string; sessionId: string | null; typeName: string; displayName: string; description: string | null; ownerUserId: string | null; metadataJson: string; }>; /** Parse a type-95 movement-violation server event. */ parseViolation(bytes: Uint8Array): MovementViolationEvent | null; private invoke; } //# sourceMappingURL=movement.d.ts.map