{"platform":"3JSGames","sdk":"v4","global":"ThreeJSGames","namespaces":{"player":{"status":"beta","methods":{"getProfile":{"arguments":[],"resolves":{"username":"string","avatar":{"type":"\"image\" | \"emoji\"","value":"public image URL or emoji string"},"isPremium":"boolean (read-only public profile state)"}}},"errors":["AUTH_REQUIRED","INVALID_GAME_CONTEXT","CONTEXT_EXPIRED","INVALID_PROTOCOL","UNSUPPORTED_VERSION","INVALID_REQUEST","GAME_NOT_AVAILABLE","PLAYER_UNAVAILABLE","RATE_LIMITED","REQUEST_TIMEOUT"]},"storage":{"status":"available","scope":"authenticated player and current game","methods":{"get":{"arguments":["key: string"],"resolves":"JSON-compatible value or undefined"},"set":{"arguments":["key: string","value: JSON-compatible value"],"resolves":"stored JSON-compatible value"},"delete":{"arguments":["key: string"],"resolves":"boolean"},"isAvailable":{"arguments":[],"returns":"boolean"}},"errors":["AUTH_REQUIRED","INVALID_GAME_CONTEXT","CONTEXT_EXPIRED","INVALID_PROTOCOL","UNSUPPORTED_VERSION","INVALID_REQUEST","INVALID_JSON","INVALID_KEY","VALUE_REQUIRED","VALUE_TOO_LARGE","KEY_LIMIT_EXCEEDED","QUOTA_EXCEEDED","GAME_NOT_AVAILABLE","RATE_LIMITED","STORAGE_UNAVAILABLE","REQUEST_TIMEOUT"]},"leaderboards":{"status":"beta","methods":{"submit":{"arguments":["key: string","score: safe integer"],"resolves":{"improved":"boolean","previousBestScore":"safe integer or null","bestScore":"safe integer","submittedAt":"ISO timestamp string"}},"getTop":{"arguments":["key: string","options?: { limit?: integer from 1 to 100 }"],"resolves":{"leaderboard":{"key":"string","title":"string","higherIsBetter":true},"totalPlayers":"non-negative integer","entries":[{"rank":"positive integer","score":"safe integer","submittedAt":"ISO timestamp string","player":{"username":"string","displayName":"string or null","avatarUrl":"HTTP(S) URL string or null","avatarEmoji":"string or null"}}]}},"getPersonal":{"arguments":["key: string"],"resolves":{"personal":"{ rank: positive integer, score: safe integer, submittedAt: ISO timestamp string } or null","totalPlayers":"non-negative integer"}},"isAvailable":{"arguments":[],"returns":"boolean"}},"errors":["AUTH_REQUIRED","INVALID_GAME_CONTEXT","CONTEXT_EXPIRED","INVALID_PROTOCOL","UNSUPPORTED_VERSION","INVALID_KEY","INVALID_SCORE","INVALID_LIMIT","INVALID_REQUEST","LEADERBOARD_NOT_AVAILABLE","RATE_LIMITED","LEADERBOARD_UNAVAILABLE","REQUEST_TIMEOUT"]},"multiplayer":{"status":"beta","entitlement":"game owner must be a Premium Creator","rollout":"limited manual pilot: operator-approved creator+game; ordinary signed-in players need no Premium or creator allowlisting","authentication":"authenticated erebo.si player required","methods":{"isAvailable":{"arguments":[],"returns":"boolean: cached server hint; initially false while checking, never authorization"},"createRoom":{"arguments":["{ visibility?: 'private' | 'public', mode?: string, maxPlayers?: 2..8 }"],"resolves":"MultiplayerRoom"},"joinRoom":{"arguments":["{ code: string }"],"resolves":"MultiplayerRoom"},"quickMatch":{"arguments":["{ mode?: string, maxPlayers?: 2..8 }"],"resolves":"MultiplayerRoom"}},"roomMethods":["on","setPlayerState","setSharedState","send","startMatch","finalizeMatch","leave"],"errors":["MULTIPLAYER_PREMIUM_REQUIRED","AUTH_REQUIRED","INVALID_GAME_CONTEXT","CONTEXT_EXPIRED","GAME_NOT_AVAILABLE","INVALID_PROTOCOL","UNSUPPORTED_VERSION","INVALID_REQUEST","INVALID_ROOM_CODE","INVALID_MODE","ROOM_NOT_FOUND","ROOM_FULL","ROOM_CLOSED","ROOM_EXPIRED","NOT_ROOM_MEMBER","NOT_HOST","NOT_ENOUGH_PLAYERS","MATCH_ALREADY_STARTED","MATCH_NOT_FOUND","MATCH_ALREADY_FINALIZED","RANKED_MODE_REQUIRED","RESULT_INVALID","RATE_LIMITED","PAYLOAD_TOO_LARGE","INVALID_PAYLOAD","ACTIVE_ROOM_LIMIT_REACHED","CONNECTION_FAILED","REQUEST_TIMEOUT","MULTIPLAYER_UNAVAILABLE"]}}}