dredless 0.5.1 → 0.6.0
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/dist/browser/dredless.global.js +5 -4
- package/dist/browser/dredless.global.js.map +3 -3
- package/package.json +1 -1
- package/src/client/core.js +1 -0
- package/src/client/domains/index.js +5 -2
- package/src/index.d.ts +12 -0
- package/src/index.js +3 -0
- package/src/network/index.d.ts +1 -0
- package/src/network/index.js +1 -0
- package/src/network/invites.d.ts +11 -0
- package/src/network/invites.js +60 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/constants.js", "../../node_modules/ws/browser.js", "../../src/runtime.js", "../../src/network/cookies.js", "../../src/network/http.js", "../../src/network/servers.js", "../../src/network/connection.js", "../../src/client/core.js", "../../src/events.js", "../../src/data/item-schema.js", "../../src/state/items.js", "../../src/protocol/codec/binary.js", "../../src/compression/lz4.js", "../../src/crypto/chacha.js", "../../src/protocol/codec/msgpack.js", "../../src/protocol/inbound/world-payload.js", "../../src/state/model/decoder.js", "../../src/state/model/loader-config.js", "../../src/state/overworld.js", "../../src/state/generator-maze.js", "../../src/state/model/reader.js", "../../src/state/model/state.js", "../../src/data/official-client-data.js", "../../src/state/tilesets.js", "../../src/state/world/state.js", "../../src/state/world/index.js", "../../src/protocol/outbound/blueprint.js", "../../src/protocol/outbound/chat.js", "../../src/protocol/outbound/comms.js", "../../src/protocol/outbound/commands.js", "../../src/protocol/outbound/inventory.js", "../../src/protocol/outbound/ship-management.js", "../../src/protocol/outbound/sign.js", "../../src/protocol/outbound/ui-config.js", "../../src/protocol/inbound/frame.js", "../../src/client/domains/index.js", "../../src/browser.js", "../../src/network/ships.js", "../../src/network/browser-session.js", "../../src/network/session.js", "../../src/browser-global.js"],
|
|
4
|
-
"sourcesContent": ["export const DEFAULT_BASE_URL = \"https://drednot.io\";\nexport const DEFAULT_GAME_VERSION = null;\nexport const DEFAULT_NOTICE_VERSION = 17;\n\nexport const encoder = new TextEncoder();\nexport const decoder = new TextDecoder(\"utf-8\");\n\nexport const SHARED_CHACHA_MATERIAL = Uint8Array.from([\n 0x15, 0x85, 0x59, 0xc6, 0x26, 0xc4, 0x31, 0x32,\n 0xb8, 0xed, 0xb2, 0xfe, 0x5b, 0x87, 0x5e, 0x5e,\n 0x3d, 0xd9, 0xe3, 0xcc, 0xa3, 0x9b, 0xd6, 0x58,\n 0xe2, 0xdc, 0x0e, 0x8b, 0x96, 0xb7, 0x05, 0x88,\n 0x78, 0xd1, 0xd4, 0xa4, 0x19, 0x3c, 0xb9, 0x1e,\n 0xbe, 0x78, 0x18, 0x12\n]);\n\nexport const JOIN_USER_AGENT = \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36\";\nexport const KEEPALIVE_INTERVAL_MS = 15_000;\nexport const INITIAL_OUTFIT_MESSAGE = {\n type: 7,\n outfit: {\n color_body: 4695355,\n color_legs: 1393785,\n color_skin: 13212550,\n color_feet: 6242065,\n color_hair: 1118481,\n style_hair: 0,\n color_hat: 16716049,\n style_hat: 0,\n color_face_1: 8421504,\n style_face_1: 0,\n color_face_2: 8421504,\n style_face_2: 0\n }\n};\nexport const KEEPALIVE_MESSAGE = {type: 2, msg: \"/\"};\n\nexport const COMMAND_FIELDS = [\n \"type\", \"n\", \"x\", \"y\", \"mx\", \"my\", \"vx\", \"vy\",\n \"jump\", \"jump_held\", \"drop\", \"act1\", \"act1_held\", \"exit\", \"act2\", \"act_alt\", \"act_alt_held\",\n \"wrench_mode\", \"turret_mode\", \"scr_w\", \"scr_h\", \"motion\",\n \"focus_ent\", \"config_ent\", \"tip_select\", \"inv_slot\", \"blur\", \"drag\"\n];\n\nexport const COMMAND_DEFAULT_FORMATS = {\n type: \"positive-fixint\",\n n: \"uint16\",\n x: \"float32\",\n y: \"float32\",\n mx: \"float32\",\n my: \"float32\",\n vx: \"float32\",\n vy: \"float32\",\n jump: \"bool\",\n jump_held: \"bool\",\n drop: \"bool\",\n act1: \"bool\",\n act1_held: \"bool\",\n exit: \"bool\",\n act2: \"bool\",\n act_alt: \"bool\",\n act_alt_held: \"bool\",\n wrench_mode: \"positive-fixint\",\n turret_mode: \"positive-fixint\",\n scr_w: \"uint16\",\n scr_h: \"uint16\",\n motion: \"float32\",\n focus_ent: \"nil\",\n config_ent: \"nil\",\n tip_select: \"nil\",\n inv_slot: \"positive-fixint\",\n blur: \"bool\",\n drag: \"nil\"\n};\n", "'use strict';\n\nmodule.exports = function () {\n throw new Error(\n 'ws does not work in the browser. Browser clients must use the native ' +\n 'WebSocket object'\n );\n};\n", "import {DEFAULT_BASE_URL} from \"./constants.js\";\n\nexport const isNode = () => typeof process !== \"undefined\" && Boolean(process.versions?.node);\nexport const isBrowser = () => typeof window !== \"undefined\" && typeof document !== \"undefined\";\nexport const normalizeBaseUrl = (baseUrl = DEFAULT_BASE_URL) => new URL(baseUrl, DEFAULT_BASE_URL).origin;\nexport const resolveUrl = (baseUrl, path = \"\") => new URL(String(path).replace(/^\\//, \"\"), `${normalizeBaseUrl(baseUrl)}/`).href;\nexport const hostName = (baseUrl) => new URL(normalizeBaseUrl(baseUrl)).hostname;\nexport const asNumber = (value, fallback = 0) => {\n const number = Number(value);\n return Number.isFinite(number) ? number : fallback;\n};\n\nexport function debug(...args) {\n if (isNode() && process.env.DREDLESS_LOG === \"1\") console.log(\"[dredless]\", ...args);\n}\n\nexport function getFetch() {\n if (typeof fetch !== \"function\") throw new Error(\"globalThis.fetch is not available\");\n return fetch.bind(globalThis);\n}\n\nlet wsModulePromise = null;\n\nexport async function getWebSocket() {\n if (isBrowser()) {\n if (typeof WebSocket !== \"function\") throw new Error(\"globalThis.WebSocket is not available\");\n return WebSocket;\n }\n if (typeof WebSocket === \"function\" && WebSocket.name !== \"WebSocket\") return WebSocket;\n if (isNode()) {\n wsModulePromise ??= import(\"ws\").then((module) => module.default || module.WebSocket || module);\n return wsModulePromise;\n }\n if (typeof WebSocket === \"function\") return WebSocket;\n throw new Error(\"globalThis.WebSocket is not available\");\n}\n", "import {DEFAULT_BASE_URL} from \"../constants.js\";\nimport {hostName, normalizeBaseUrl} from \"../runtime.js\";\n\nexport function cookiePrefix(baseUrl = DEFAULT_BASE_URL) {\n const host = hostName(baseUrl);\n if (host === \"test.drednot.io\") return \"test_\";\n if (host === \"local.drednot.io\") return \"local_\";\n return \"\";\n}\n\nexport const cookieName = (baseUrl, name) => `${cookiePrefix(baseUrl)}${name}`;\n\nexport function parseCookies(text = \"\") {\n const cookies = new Map();\n for (const part of String(text).split(/;\\s*/)) {\n const index = part.indexOf(\"=\");\n if (index <= 0) continue;\n cookies.set(part.slice(0, index).trim(), decodeURIComponent(part.slice(index + 1).trim()));\n }\n return cookies;\n}\n\nexport function browserCookies() {\n return canReadDocumentCookie() ? parseCookies(document.cookie || \"\") : new Map();\n}\n\nexport function canReadDocumentCookie() {\n try {\n return typeof document !== \"undefined\" && typeof document.cookie === \"string\";\n } catch (_) {\n return false;\n }\n}\n\nexport function hasCookieStore() {\n return typeof globalThis.cookieStore !== \"undefined\" && typeof globalThis.cookieStore.getAll === \"function\";\n}\n\nexport async function readBrowserCookie(name) {\n if (hasCookieStore()) {\n try {\n const cookie = typeof globalThis.cookieStore.get === \"function\" ? await globalThis.cookieStore.get(name) : null;\n if (cookie?.value != null) return cookie.value;\n } catch (_) {\n // Fall through to document.cookie below.\n }\n }\n return browserCookies().get(name) || \"\";\n}\n\nexport function setCookieValues(baseUrl, source = {}) {\n const base = normalizeBaseUrl(baseUrl);\n const values = source instanceof Map ? source : source?.cookies instanceof Map ? source.cookies : Object.entries(source || {});\n const cookies = new Map(values);\n const prefix = cookiePrefix(base);\n const anonKey = source.anonKey || source.anon_key;\n const gameSession = source.gameSession || source.game_session;\n const noticeVersion = source.noticeVersion || source.notice_version;\n if (anonKey && !cookies.has(`${prefix}anon_key`)) cookies.set(`${prefix}anon_key`, anonKey);\n if (gameSession && !cookies.has(`${prefix}game_session`)) cookies.set(`${prefix}game_session`, gameSession);\n if (noticeVersion && !cookies.has(`${prefix}notice_version`)) cookies.set(`${prefix}notice_version`, noticeVersion);\n return cookies;\n}\n\nexport function cookieHeader(baseUrl, source = {}) {\n return [...setCookieValues(baseUrl, source)].map(([key, value]) => `${key}=${encodeURIComponent(value)}`).join(\"; \");\n}\n\nexport function readSetCookies(headers, names = [\"game_session\", \"anon_key\"], baseUrl = DEFAULT_BASE_URL) {\n const values = typeof headers?.getSetCookie === \"function\"\n ? headers.getSetCookie()\n : headers?.get?.(\"set-cookie\") ? [headers.get(\"set-cookie\")] : [];\n const found = new Map();\n const prefix = cookiePrefix(baseUrl);\n for (const header of values) {\n for (const name of names) {\n for (const key of prefix ? [name, `${prefix}${name}`] : [name]) {\n const regex = new RegExp(`(?:^|,\\\\s*)${key}=([^;]+)`, \"g\");\n let match;\n while ((match = regex.exec(header))) found.set(key, decodeURIComponent(match[1]));\n }\n }\n }\n return found;\n}\n", "import {getFetch, isBrowser, normalizeBaseUrl, resolveUrl} from \"../runtime.js\";\nimport {cookieHeader} from \"./cookies.js\";\n\nexport class HttpClient {\n constructor({baseUrl, session = null} = {}) {\n this.baseUrl = normalizeBaseUrl(baseUrl);\n this.session = session;\n }\n\n async request(path, init = {}) {\n const headers = new Headers(init.headers || {});\n const body = this.#body(init.body, headers);\n const cookie = this.session && !isBrowser() ? cookieHeader(this.baseUrl, this.session) : \"\";\n if (cookie) headers.set(\"cookie\", cookie);\n return getFetch()(resolveUrl(this.baseUrl, path), {\n ...init,\n body,\n headers,\n credentials: isBrowser() ? \"include\" : init.credentials\n });\n }\n\n async json(path, init = {}) {\n const response = await this.request(path, init);\n if (!response.ok) throw new Error(`${path} failed: ${response.status} ${response.statusText}`);\n return response.json();\n }\n\n #body(body, headers) {\n if (body == null || typeof body === \"string\" || body instanceof ArrayBuffer || ArrayBuffer.isView(body)) return body;\n if (!headers.has(\"content-type\")) headers.set(\"content-type\", \"application/json\");\n return JSON.stringify(body);\n }\n}\n", "import {DEFAULT_BASE_URL} from \"../constants.js\";\nimport {getWebSocket, hostName, normalizeBaseUrl} from \"../runtime.js\";\nimport {HttpClient} from \"./http.js\";\n\nconst cache = new Map();\n\nclass ServerDirectory {\n constructor(baseUrl = DEFAULT_BASE_URL) {\n this.baseUrl = normalizeBaseUrl(baseUrl);\n this.meta = null;\n }\n\n async load() {\n if (cache.has(this.baseUrl)) {\n this.meta = await cache.get(this.baseUrl);\n return this;\n }\n const promise = this.#fetchMeta();\n cache.set(this.baseUrl, promise);\n this.meta = await promise;\n return this;\n }\n\n async version() {\n await this.load();\n if (!this.meta.version) throw new Error(\"Unable to locate GAME_VERSION in drednot bundle\");\n return this.meta.version;\n }\n\n async list() {\n return this.servers();\n }\n\n async servers() {\n await this.load();\n if (!this.meta.serverInfo) throw new Error(\"Unable to locate server list in drednot bundle\");\n return this.meta.serverInfo.servers;\n }\n\n async get(id = null) {\n return this.pick(id);\n }\n\n async pick(id = null) {\n const servers = await this.servers();\n return servers.find((server) => server.index === Number(id)) || servers[0] || null;\n }\n\n async #fetchMeta() {\n const response = await new HttpClient({baseUrl: this.baseUrl}).request(\"index.html\");\n if (!response.ok) throw new Error(`Failed to fetch bundle: ${response.status} ${response.statusText}`);\n const text = await response.text();\n return {text, version: parseGameVersion(text), serverInfo: parseServerInfo(text, this.baseUrl)};\n }\n}\n\nexport const fetchGameVersion = (baseUrl = DEFAULT_BASE_URL) => new ServerDirectory(baseUrl).version();\nexport const fetchServers = (baseUrl = DEFAULT_BASE_URL) => new ServerDirectory(baseUrl).servers();\nexport async function fetchServerStatus(server, baseUrl = DEFAULT_BASE_URL) {\n const resolved = await resolveServer(server, baseUrl);\n if (!resolved?.domain) throw new Error(`Unable to resolve server ${serverId(server)}`);\n const WebSocket = await getWebSocket();\n const socket = new WebSocket(`wss://${resolved.domain}:4000/`);\n\n return new Promise((resolve, reject) => {\n let settled = false;\n let startedAt = 0;\n const finish = (callback, value) => {\n if (settled) return;\n settled = true;\n clearTimeout(timeout);\n callback(value);\n if (socket.readyState === 0 || socket.readyState === 1) socket.close();\n };\n const timeout = setTimeout(() => finish(reject, new Error(`Timed out fetching status for ${resolved.domain}`)), 10000);\n const onOpen = () => {\n startedAt = Date.now();\n socket.send(\"yo\");\n };\n const onMessage = async (event) => {\n try {\n const data = JSON.parse(await websocketText(event?.data ?? event));\n const playerCount = Number(data.player_count);\n const maxPlayerCount = Number(data.player_max);\n if (!Number.isFinite(playerCount) || !Number.isFinite(maxPlayerCount)) throw new Error(\"Invalid server status response\");\n finish(resolve, {playerCount, maxPlayerCount, ping: Date.now() - startedAt});\n } catch (error) {\n finish(reject, new Error(`Invalid status response from ${resolved.domain}: ${error.message}`));\n }\n };\n const onError = (event) => finish(reject, event?.error || new Error(`WebSocket error while fetching ${resolved.domain}`));\n if (typeof socket.on === \"function\") {\n socket.on(\"open\", onOpen);\n socket.on(\"message\", onMessage);\n socket.on(\"error\", onError);\n } else if (typeof socket.addEventListener === \"function\") {\n socket.addEventListener(\"open\", onOpen);\n socket.addEventListener(\"message\", onMessage);\n socket.addEventListener(\"error\", onError);\n } else {\n socket.onopen = onOpen;\n socket.onmessage = onMessage;\n socket.onerror = onError;\n }\n });\n}\n\nexport async function fetchServerStatuses(baseUrl = DEFAULT_BASE_URL) {\n const servers = await fetchServers(baseUrl);\n return Promise.all(servers.map(async (server) => ({...server, ...await fetchServerStatus(server, baseUrl)})));\n}\n\nexport async function fetchNoticeVersion(baseUrl = DEFAULT_BASE_URL) {\n const response = await new HttpClient({baseUrl}).request(\"index.html\");\n if (!response.ok) throw new Error(`Failed to fetch notice version: ${response.status} ${response.statusText}`);\n const text = await response.text();\n const version = parseNoticeVersion(text);\n if (version == null) throw new Error(\"Unable to locate notice version in drednot page\");\n return version;\n}\n\nexport async function resolveServer(server, baseUrl = DEFAULT_BASE_URL) {\n if (server && typeof server === \"object\") return server;\n const id = Number(server);\n const servers = await fetchServers(baseUrl);\n return servers.find((item) => item.index === id) || null;\n}\n\nexport function serverId(server) {\n if (server && typeof server === \"object\") return Number(server.index ?? server.id);\n return Number(server);\n}\n\nfunction parseGameVersion(text) {\n return text.match(/Object\\.defineProperty\\(exports,\"GAME_VERSION\",\\{enumerable:true,get:\\(\\)=>e\\}\\);const e=\"([^\"]+)\"/)?.[1] || null;\n}\n\nfunction parseNoticeVersion(text) {\n const moduleMatch = text.match(/Object\\.defineProperty\\(exports,\"checkNotice\"[\\s\\S]{0,8000}?setCookie\\)\\(\"notice_version\",([A-Za-z_$][\\w$]*)\\)/);\n if (moduleMatch) {\n const constant = moduleMatch[1];\n const prefix = text.slice(Math.max(0, moduleMatch.index - 1000), moduleMatch.index + moduleMatch[0].length);\n const constantMatch = prefix.match(new RegExp(`const\\\\s+${constant}\\\\s*=\\\\s*(\\\\d+)\\\\s*;`));\n if (constantMatch) return Number(constantMatch[1]);\n }\n\n const patterns = [\n /notice_version[\"']?\\s*[:=]\\s*[\"']?(\\d+)/i,\n /noticeVersion[\"']?\\s*[:=]\\s*[\"']?(\\d+)/i,\n /NOTICE_VERSION[\"']?\\s*[:=]\\s*[\"']?(\\d+)/,\n /notice[^0-9]{0,40}version[^0-9]{0,20}(\\d+)/i\n ];\n for (const pattern of patterns) {\n const match = text.match(pattern);\n if (match) return Number(match[1]);\n }\n return null;\n}\n\nfunction parseServerInfo(text, baseUrl) {\n const host = hostName(baseUrl);\n const match = text.match(/const n=(true|false);const \\$=\"([^\"]+)\";const o=\"([^\"]+)\";const T=\"([^\"]+)\";const t=\"([^\"]+)\";const S=\\[([^\\]]+)\\];const c=\\[([^\\]]+)\\];const A=\"([^\"]+)\";const I=\"([^\"]+)\"/s);\n if (!match) return null;\n const [localDomain, baseDomain, testDomain, testGameDomain] = match.slice(2, 6);\n const domains = [...match[6].matchAll(/\"((?:[^\"\\\\]|\\\\.)*)\"/g)].map((m) => m[1]);\n const names = [...match[7].matchAll(/\"((?:[^\"\\\\]|\\\\.)*)\"/g)].map((m) => m[1]);\n const meta = {\n localDomain,\n baseDomain,\n testDomain,\n testGameDomain,\n masterDomain: match[8],\n testMasterDomain: match[9]\n };\n if (host === localDomain) return {mode: \"local\", servers: [server(0, localDomain, \"Local Test 1\")], meta};\n if (host === testDomain) return {mode: \"test\", servers: [server(0, testGameDomain, \"Public Test\")], meta};\n return {\n mode: \"production\",\n servers: domains.map((domain, index) => server(index, domain, names[index] || `Server ${index + 1}`)),\n meta\n };\n}\n\nasync function websocketText(data) {\n if (typeof data === \"string\") return data;\n if (data instanceof ArrayBuffer) return new TextDecoder().decode(data);\n if (ArrayBuffer.isView(data)) return new TextDecoder().decode(data);\n if (typeof data?.text === \"function\") return data.text();\n return String(data);\n}\nfunction server(index, domain, description) {\n return {index, domain, description};\n}\n", "import {DEFAULT_BASE_URL} from \"../constants.js\";\nimport {normalizeBaseUrl} from \"../runtime.js\";\nimport {cookieName} from \"./cookies.js\";\n\nexport class Connection {\n constructor(session, gameToken, netPort, serverId, server = null) {\n if (!session) throw new Error(\"Connection requires a session\");\n if (!gameToken && !session.ambientAuth) throw new Error(\"Connection requires a game token\");\n if (netPort == null) throw new Error(\"Connection requires a net port\");\n\n this.session = session;\n this.baseUrl = normalizeBaseUrl(session.baseUrl || DEFAULT_BASE_URL);\n this.gameToken = gameToken ? String(gameToken) : \"\";\n this.netPort = Number(netPort);\n this.server = serverId && typeof serverId === \"object\" ? serverId : server;\n this.serverId = Number(serverId && typeof serverId === \"object\" ? serverId.index ?? serverId.id : serverId);\n\n this.session.cookies?.set(cookieName(this.baseUrl, \"game_token\"), this.gameToken);\n }\n\n toJSON() {\n return {\n baseUrl: this.baseUrl,\n gameToken: this.gameToken,\n netPort: this.netPort,\n serverId: this.serverId,\n server: this.server,\n session: this.session?.toJSON?.() || this.session\n };\n }\n}\n", "import {INITIAL_OUTFIT_MESSAGE, JOIN_USER_AGENT, KEEPALIVE_INTERVAL_MS, KEEPALIVE_MESSAGE} from \"../constants.js\";\nimport {getWebSocket, isNode} from \"../runtime.js\";\nimport {EventBus} from \"../events.js\";\nimport {cookieHeader} from \"../network/cookies.js\";\nimport {fetchServers} from \"../network/servers.js\";\nimport {Connection} from \"../network/connection.js\";\nimport {itemEquipmentSlotFromId} from \"../state/items.js\";\nimport {WorldStore} from \"../state/world/index.js\";\nimport {buildBlueprintPlacementMessage} from \"../protocol/outbound/blueprint.js\";\nimport {buildChatMessage} from \"../protocol/outbound/chat.js\";\nimport {buildCommsMessage, normalizeCommsEvent} from \"../protocol/outbound/comms.js\";\nimport {buildSignedCommandPacket} from \"../protocol/outbound/commands.js\";\nimport {buildInventoryDragCommand, normalizeEquipmentSlot, normalizeInventoryEvent} from \"../protocol/outbound/inventory.js\";\nimport {\n buildBanPlayerMessage,\n buildDemoteSelfMessage,\n buildInviteResetMessage,\n buildKickPlayerMessage,\n buildPlayerListMessage,\n buildSetPlayerRankMessage,\n buildShipManagementMessage,\n buildShipPrivacyMessage,\n buildStarterRecoveryMessage,\n normalizeCaptainSubrank,\n normalizeShipConfig,\n normalizeShipPlayerList\n} from \"../protocol/outbound/ship-management.js\";\nimport {buildSignTextMessage} from \"../protocol/outbound/sign.js\";\nimport {\n buildCargoEjectorClipboardDirectionData,\n buildCargoEjectorCopyConfigData,\n buildCargoEjectorDirectionData,\n buildCargoEjectorPasteConfigData,\n buildCargoHatchCopyConfigData,\n buildCargoHatchFilterConfigData,\n buildCargoHatchFilterItemsData,\n buildCargoHatchFullConfigData,\n buildClipboardConfigData,\n buildClipboardFixedAngleData,\n buildExpandoClipboardAngleData,\n buildGeneratorClipboardDirectionData,\n buildGeneratorMazePuzzleData,\n buildLoaderClipboardConfigData,\n buildLoaderConfigData,\n buildLoaderCopyConfigData,\n buildLoaderFilterConfigData,\n buildLoaderFilterItemsData,\n buildLoaderFullConfigData,\n buildNavigationUnitClipboardConfigData,\n buildNavigationUnitConfigData,\n buildNavigationUnitPasteConfigData,\n buildPusherConfigData,\n buildPusherFilterItemsData\n} from \"../protocol/outbound/ui-config.js\";\nimport {cloneCommand, encodeMsgpack} from \"../protocol/codec/msgpack.js\";\nimport {decodeIncomingFrame} from \"../protocol/inbound/frame.js\";\nimport {\n ClientNetDomain,\n ClientDebugDomain,\n PlayerDomain,\n ShipManagementDomain,\n InventoryDomain,\n WorldDomain,\n ShipDomain,\n OverworldDomain,\n EntityHandle,\n WrenchMode,\n TurretMode,\n normalizeAttachMode,\n normalizeScannerResultPacket,\n normalizeShipReadOptions,\n shipReadSummary,\n currentPlayerSummary,\n summariesFor,\n emptyMachineSummary,\n normalizeDegrees,\n normalizeLauncherPower,\n normalizeWrenchMode,\n normalizeTurretMode,\n normalizePositiveFinite,\n normalizePositiveInteger\n} from \"./domains/index.js\";\n\nexport {WrenchMode, TurretMode} from \"./domains/index.js\";\n\n// Defaults for retained history. Every one of these buffers was previously\n// unbounded; the surrounding buffers (chat, warnings, scanner results) already\n// capped at 200, so these match that convention.\nconst DEFAULT_PACKET_HISTORY = 200;\nconst DEFAULT_EVENT_HISTORY = 200;\nconst DEFAULT_MODEL_PACKET_HISTORY = 100;\nconst DEFAULT_CHUNK_HISTORY = 64;\n\nfunction normalizeHistoryLimit(value, fallback) {\n if (value === Infinity) return Infinity;\n const limit = Number(value);\n if (!Number.isFinite(limit) || limit < 0) return fallback;\n return Math.floor(limit);\n}\n\nexport class DredlessClient extends EventBus {\n constructor(connection, {\n connect = true,\n attach = false,\n mode = null,\n baseUrl = null,\n session = null,\n serverId = null,\n server = null,\n netPort = null,\n gameToken = \"\",\n packetHistory = DEFAULT_PACKET_HISTORY,\n eventHistory = DEFAULT_EVENT_HISTORY,\n modelPacketHistory = DEFAULT_MODEL_PACKET_HISTORY,\n chunkHistory = DEFAULT_CHUNK_HISTORY\n } = {}) {\n super();\n const attachMode = attach ? normalizeAttachMode(mode) : null;\n if (!(connection instanceof Connection) && !attachMode) throw new Error(\"DredlessClient requires a Connection\");\n\n this.connection = connection || null;\n this.session = connection?.session ?? session ?? null;\n this.baseUrl = connection?.baseUrl ?? baseUrl ?? this.session?.baseUrl ?? null;\n this.serverId = connection?.serverId ?? serverId ?? server?.index ?? null;\n this.server = connection?.server ?? server ?? null;\n this.netPort = connection?.netPort ?? netPort ?? null;\n this.gameToken = connection?.gameToken ?? gameToken ?? \"\";\n this.ws = null;\n this.sid = null;\n this.connected = false;\n this.ready = false;\n this.packetCount = 0;\n this.lastPacket = null;\n this.packets = [];\n // Retained history is bounded by default: these arrays previously grew for\n // the lifetime of the client, holding every decoded packet and its binary\n // payloads. Pass 0 to disable a buffer or Infinity to restore unbounded\n // capture behaviour.\n this.packetHistory = normalizeHistoryLimit(packetHistory, DEFAULT_PACKET_HISTORY);\n this.worlds = new WorldStore({eventHistory, modelPacketHistory, chunkHistory});\n this.net = new ClientNetDomain(this);\n this.debug = new ClientDebugDomain(this);\n this.player = new PlayerDomain(this);\n this.inventory = new InventoryDomain(this);\n this.management = new ShipManagementDomain(this);\n this.cpuLoad = null;\n this.inventoryState = normalizeInventoryEvent({type: \"inventory\", general_slots: 5});\n this.puiPanels = new Map();\n this.commsPanels = new Map();\n this.currentCommsPanel = null;\n this.warnings = [];\n this.effects = [];\n this.chat = [];\n this.motd = [];\n this.sessionMessages = [];\n this.scannerResults = [];\n this.lastScannerResult = null;\n this.shipConfig = null;\n this.captainSubrank = null;\n this.playerList = null;\n this.outfits = new Map();\n this.commandAcks = new Map();\n this.lastCommandAck = null;\n this.decodeErrors = [];\n this.readyPromise = new Promise((resolve, reject) => {\n this.#resolveReady = resolve;\n this.#rejectReady = reject;\n });\n\n this.attachMode = attachMode;\n this.attached = Boolean(attachMode);\n if (connect) this.#connect().catch((error) => this.#fail(error));\n }\n\n static attachWebSocket(websocket, options = {}) {\n if (!websocket) throw new Error(\"DredlessClient.attachWebSocket requires a websocket\");\n const mode = normalizeAttachMode(options.mode);\n const client = new DredlessClient(null, {...options, attach: true, connect: false, mode});\n client.#attachSocket(websocket, {...options, mode});\n return client;\n }\n\n #commandNumber = 1;\n #queuedCommands = [];\n #queuedMessages = [];\n #keepalive = null;\n #bootstrapped = false;\n #ownsSocket = true;\n #allowWrites = true;\n #attachedOpened = false;\n #resolveReady = null;\n #rejectReady = null;\n #inputSettings = {\n wrench_mode: 1,\n turret_mode: 0\n };\n\n whenReady() {\n return this.readyPromise;\n }\n\n send(command = {}) {\n this.#assertWritable();\n const normalized = cloneCommand({...this.#inputSettings, ...command});\n if (normalized.n == null) normalized.n = this.#commandNumber++;\n if (!this.sid) {\n this.#queuedCommands.push(normalized);\n return this;\n }\n this.ws.send(buildSignedCommandPacket(normalized, this.sid));\n this.emit(\"command\", normalized);\n return this;\n }\n\n sendMessage(message, {afterReady = true} = {}) {\n this.#assertWritable();\n if (!this.connected || (afterReady && !this.ready)) {\n this.#queuedMessages.push({message, afterReady});\n return this;\n }\n this.ws.send(encodeMsgpack(message));\n this.emit(\"message\", message);\n return this;\n }\n\n sendRaw(message, options = {}) {\n return this.sendMessage(message, options);\n }\n\n sendBlueprintPlacement(placement) {\n return this.sendMessage(buildBlueprintPlacementMessage(placement));\n }\n\n setOutfit(outfit) {\n return this.sendMessage({type: 7, outfit});\n }\n\n sendShipManagement(act, arg = null) {\n return this.sendMessage(buildShipManagementMessage(act, arg));\n }\n\n requestPlayerList() {\n return this.sendMessage(buildPlayerListMessage());\n }\n\n resetInvite() {\n return this.sendMessage(buildInviteResetMessage());\n }\n\n setShipPrivacy(privacy) {\n return this.sendMessage(buildShipPrivacyMessage(privacy));\n }\n\n recoverStarterItem(itemId) {\n return this.sendMessage(buildStarterRecoveryMessage(itemId));\n }\n\n setPlayerRank(refId, rank) {\n return this.sendMessage(buildSetPlayerRankMessage(refId, rank));\n }\n\n promotePlayerToCaptain(refId) {\n return this.setPlayerRank(refId, \"captain\");\n }\n\n demotePlayerToCrew(refId) {\n return this.setPlayerRank(refId, \"crew\");\n }\n\n demotePlayerToGuest(refId) {\n return this.setPlayerRank(refId, \"guest\");\n }\n\n kickPlayer(refId) {\n return this.sendMessage(buildKickPlayerMessage(refId));\n }\n\n banPlayer(refId) {\n return this.sendMessage(buildBanPlayerMessage(refId));\n }\n\n demoteSelf() {\n return this.sendMessage(buildDemoteSelfMessage());\n }\n\n sendEntityCommand(cmd, args = [-1, -1, -1]) {\n return this.sendMessage({type: 5, cmd, args});\n }\n\n sendChatMessage(message = \"\") {\n return this.sendMessage(buildChatMessage(message));\n }\n\n sendCommsMessage(message = \"\") {\n return this.sendMessage(buildCommsMessage(message));\n }\n\n sendFabricatorMessage(cmd, args = [-1, -1, -1]) {\n return this.sendEntityCommand(cmd, args);\n }\n\n sendFabricatorCommand(itemId, count = 1, index = -1) {\n return this.craftAdd(itemId, count, index);\n }\n\n craftAdd(itemId, count = 1, index = -1) {\n return this.sendFabricatorMessage(\"craft_add\", [itemId, count, index]);\n }\n\n craftSub(itemId, count = 1, index = 0) {\n return this.sendFabricatorMessage(\"craft_sub\", [itemId, count, index]);\n }\n\n craftClearQueue() {\n return this.sendFabricatorMessage(\"clear_queue\");\n }\n\n craftToggleRepeat() {\n return this.sendFabricatorMessage(\"toggle_repeat\");\n }\n\n fabricatorLockResource(row) {\n return this.sendFabricatorMessage(\"lock\", [row, -1, -1]);\n }\n\n fabricatorUnlockResource(row) {\n return this.sendFabricatorMessage(\"unlock\", [row, -1, -1]);\n }\n\n fabricatorEject(row) {\n return this.sendFabricatorMessage(\"eject\", [row, -1, -1]);\n }\n\n setLauncherAngle(angle) {\n return this.sendEntityCommand(\"angle\", [normalizeDegrees(angle)]);\n }\n\n setLauncherPower(power) {\n return this.sendEntityCommand(\"power\", [normalizeLauncherPower(power)]);\n }\n\n setSignText(text = \"\", mode = 0) {\n return this.sendMessage(buildSignTextMessage(text, mode));\n }\n\n sendUiConfig(data) {\n return this.sendMessage({type: 8, data});\n }\n\n solveGeneratorPuzzle(entity, solution) {\n return this.sendUiConfig(buildGeneratorMazePuzzleData(entity, solution));\n }\n\n sendPusherConfig(entity, config = {}) {\n return this.sendUiConfig(buildPusherConfigData(entity, this.#pusherConfigDefaults(entity, config)));\n }\n\n setPusherAngle(entity, angle, config = {}) {\n return this.sendPusherConfig(entity, {...config, angle});\n }\n\n setPusherSpeed(entity, speed, config = {}) {\n return this.sendPusherConfig(entity, {...config, speed});\n }\n\n setPusherLength(entity, length, config = {}) {\n return this.sendPusherConfig(entity, {...config, length});\n }\n\n setPusherMode(entity, mode, config = {}) {\n return this.sendPusherConfig(entity, {...config, mode});\n }\n\n setPusherFilteredMode(entity, filteredMode, config = {}) {\n return this.sendPusherConfig(entity, {...config, filteredMode});\n }\n\n setPusherFilterInventory(entity, filterInventory, config = {}) {\n return this.sendPusherConfig(entity, {...config, filterInventory});\n }\n\n setPusherFilterItems(entity, filterSlots = []) {\n return this.sendUiConfig(buildPusherFilterItemsData(entity, filterSlots));\n }\n\n sendLoaderConfig(entity, config = {}) {\n return this.sendUiConfig(buildLoaderConfigData(entity, this.#loaderConfigDefaults(entity, config)));\n }\n\n sendLoaderFullConfig(entity, config = {}) {\n return this.sendUiConfig(buildLoaderFullConfigData(entity, this.#loaderFullConfigDefaults(entity, config)));\n }\n\n copyLoaderConfig(entity, config = {}) {\n return this.sendUiConfig(buildLoaderCopyConfigData(this.#loaderFullConfigDefaults(entity, config)));\n }\n\n sendLoaderClipboardConfig(config = {}) {\n return this.sendUiConfig(buildLoaderClipboardConfigData(config));\n }\n\n sendClipboardConfig(target, commandName, values = []) {\n return this.sendUiConfig(buildClipboardConfigData(target, commandName, values));\n }\n\n setClipboardFixedAngle(target, direction) {\n return this.sendUiConfig(buildClipboardFixedAngleData(target, direction));\n }\n\n setGeneratorClipboardDirection(direction) {\n return this.sendUiConfig(buildGeneratorClipboardDirectionData(direction));\n }\n\n setExpandoClipboardAngle(angle) {\n return this.sendUiConfig(buildExpandoClipboardAngleData(angle));\n }\n\n setCargoEjectorDirection(entity, direction) {\n return this.sendUiConfig(buildCargoEjectorDirectionData(entity, direction));\n }\n\n pasteCargoEjectorConfig(entity, direction = \"right\") {\n return this.sendUiConfig(buildCargoEjectorPasteConfigData(entity, direction));\n }\n\n copyCargoEjectorConfig(entity, direction = \"right\") {\n return this.sendUiConfig(buildCargoEjectorCopyConfigData(direction));\n }\n\n setCargoEjectorClipboardDirection(direction) {\n return this.sendUiConfig(buildCargoEjectorClipboardDirectionData(direction));\n }\n\n setLoaderPickPlace(entity, pick, place, config = {}) {\n return this.sendLoaderConfig(entity, {...config, pick, place});\n }\n\n setLoaderPriority(entity, priority, config = {}) {\n return this.sendLoaderConfig(entity, {...config, priority});\n }\n\n setLoaderStack(entity, stack, config = {}) {\n return this.sendLoaderConfig(entity, {...config, stack});\n }\n\n setLoaderCycle(entity, cycle, config = {}) {\n return this.sendLoaderConfig(entity, {...config, cycle});\n }\n\n setLoaderRequireOutput(entity, requireOutput, config = {}) {\n return this.sendLoaderConfig(entity, {...config, requireOutput});\n }\n\n setLoaderWaitForStack(entity, waitForStack, config = {}) {\n return this.sendLoaderConfig(entity, {...config, waitForStack});\n }\n\n setLoaderFilterMode(entity, filterMode) {\n return this.sendUiConfig(buildLoaderFilterConfigData(entity, filterMode));\n }\n\n setLoaderFilterItems(entity, filterSlots = []) {\n return this.sendUiConfig(buildLoaderFilterItemsData(entity, filterSlots));\n }\n\n setCargoHatchFilterMode(entity, filterMode) {\n return this.sendUiConfig(buildCargoHatchFilterConfigData(entity, filterMode));\n }\n\n setCargoHatchFilterItems(entity, filterSlots = []) {\n return this.sendUiConfig(buildCargoHatchFilterItemsData(entity, filterSlots));\n }\n\n sendCargoHatchFullConfig(entity, config = {}) {\n return this.sendUiConfig(buildCargoHatchFullConfigData(entity, this.#cargoHatchConfigDefaults(entity, config)));\n }\n\n pasteCargoHatchConfig(entity, config = {}) {\n return this.sendCargoHatchFullConfig(entity, config);\n }\n\n copyCargoHatchConfig(entity, config = {}) {\n return this.sendUiConfig(buildCargoHatchCopyConfigData(this.#cargoHatchConfigDefaults(entity, config)));\n }\n\n inputSettings() {\n return {\n wrenchMode: wrenchModeName(this.#inputSettings.wrench_mode),\n turretMode: turretModeName(this.#inputSettings.turret_mode),\n viewWidth: this.#inputSettings.vx ?? null,\n viewHeight: this.#inputSettings.vy ?? null,\n screenWidth: this.#inputSettings.scr_w ?? null,\n screenHeight: this.#inputSettings.scr_h ?? null\n };\n }\n\n setInputSettings(settings = {}, {send = true} = {}) {\n const wrench = settings.wrenchMode;\n const turret = settings.turretMode;\n const viewWidth = settings.viewWidth;\n const viewHeight = settings.viewHeight;\n const screenWidth = settings.screenWidth;\n const screenHeight = settings.screenHeight;\n if (wrench != null) this.#inputSettings.wrench_mode = normalizeWrenchMode(wrench);\n if (turret != null) this.#inputSettings.turret_mode = normalizeTurretMode(turret);\n if (viewWidth != null) this.#inputSettings.vx = normalizePositiveFinite(viewWidth, \"viewWidth\");\n if (viewHeight != null) this.#inputSettings.vy = normalizePositiveFinite(viewHeight, \"viewHeight\");\n if (screenWidth != null) this.#inputSettings.scr_w = normalizePositiveInteger(screenWidth, \"screenWidth\");\n if (screenHeight != null) this.#inputSettings.scr_h = normalizePositiveInteger(screenHeight, \"screenHeight\");\n return send ? this.send({}) : this;\n }\n\n setView(width, height, options = {}) {\n return this.setInputSettings({viewWidth: width, viewHeight: height}, options);\n }\n\n setScreenSize(width, height, options = {}) {\n return this.setInputSettings({screenWidth: width, screenHeight: height}, options);\n }\n\n setWrenchMode(mode, options = {}) {\n return this.setInputSettings({wrenchMode: mode}, options);\n }\n\n setWrenchAction(mode, options = {}) {\n return this.setWrenchMode(mode, options);\n }\n\n setTurretMode(mode, options = {}) {\n return this.setInputSettings({turretMode: mode}, options);\n }\n\n sendNavigationUnitConfig(entity, config = {}) {\n return this.sendUiConfig(buildNavigationUnitConfigData(entity, this.#navigationUnitConfigDefaults(entity, config)));\n }\n\n copyNavigationUnitConfig(entity, config = {}) {\n return this.sendUiConfig(buildNavigationUnitClipboardConfigData(this.#navigationUnitConfigDefaults(entity, config)));\n }\n\n pasteNavigationUnitConfig(entity, config = {}) {\n return this.sendUiConfig(buildNavigationUnitPasteConfigData(entity, this.#navigationUnitConfigDefaults(entity, config)));\n }\n\n setNavigationDestination(entity, destination, config = {}) {\n return this.sendNavigationUnitConfig(entity, {...config, destination});\n }\n\n setNavigationAutoWarp(entity, config = {}) {\n return this.sendNavigationUnitConfig(entity, {page: 1, ...config});\n }\n\n startWarp(entity, config = {}) {\n return this.sendNavigationUnitConfig(entity, {page: 1, ...config, warp: \"start\"});\n }\n\n cancelWarp(entity, config = {}) {\n return this.sendNavigationUnitConfig(entity, {page: 1, ...config, warp: \"cancel\"});\n }\n\n move(x = 0, y = 0, command = {}) {\n return this.send({...command, x, y});\n }\n\n aim(mx = 0, my = 0, command = {}) {\n return this.send({...command, mx, my});\n }\n\n action(flags = {}, command = {}) {\n return this.send({...command, ...flags});\n }\n\n useEntity(entity, {invSlot = 0, hold = true} = {}, command = {}) {\n return this.send({\n ...command,\n focus_ent: entity,\n inv_slot: invSlot,\n act1: true,\n act1_held: Boolean(hold)\n });\n }\n\n useHeldItem({invSlot = 0, hold = true} = {}, command = {}) {\n return this.send({\n ...command,\n focus_ent: null,\n inv_slot: invSlot,\n act1: true,\n act1_held: Boolean(hold)\n });\n }\n\n placeHeldItem(options = {}, command = {}) {\n return this.useHeldItem(options, command);\n }\n\n placeBlueprint(placement, {invSlot = 0, hold = true, mx = null, my = null} = {}, command = {}) {\n const message = buildBlueprintPlacementMessage(placement);\n this.sendMessage(message);\n return this.placeHeldItem(\n {invSlot, hold},\n {\n ...command,\n mx: mx ?? message.x,\n my: my ?? message.y\n }\n );\n }\n\n rotateHeldItem({invSlot = 0, hold = true} = {}, command = {}) {\n return this.send({\n ...command,\n focus_ent: null,\n inv_slot: invSlot,\n act_alt: true,\n act_alt_held: Boolean(hold)\n });\n }\n\n\n close(code = 1000, reason = \"client\") {\n if (!this.#allowWrites) return this;\n try {\n this.ws?.close(code, reason);\n } catch (_) {\n }\n return this;\n }\n\n disconnect(code = 1000, reason = \"client\") {\n return this.close(code, reason);\n }\n\n snapshot({includeTiles = false, includeModel = false} = {}) {\n return {\n baseUrl: this.baseUrl,\n session: this.session?.toJSON?.() || this.session,\n connection: this.connection?.toJSON?.() || null,\n attachMode: this.attachMode,\n serverId: this.serverId,\n server: this.server,\n netPort: this.netPort,\n sid: this.sid,\n ready: this.ready,\n connected: this.connected,\n currentWorldId: this.worlds.currentWorldId,\n worlds: this.worlds.snapshot({includeTiles, includeModel}),\n cpuLoad: this.cpuLoad,\n inventory: this.inventoryState,\n puiPanels: [...this.puiPanels.values()],\n commsPanels: [...this.commsPanels.values()],\n currentCommsPanel: this.currentCommsPanel,\n warnings: this.warnings.slice(-50),\n effects: this.effects.slice(-50),\n chat: this.chat.slice(-50),\n motd: this.motd.slice(-20),\n sessionMessages: this.sessionMessages.slice(-50),\n scannerResults: this.scannerResults.slice(-20),\n lastScannerResult: this.lastScannerResult,\n shipConfig: this.shipConfig,\n captainSubrank: this.captainSubrank,\n playerList: this.playerList,\n outfits: [...this.outfits.entries()].map(([sid, outfit]) => ({sid, outfit})),\n commandAcks: [...this.commandAcks.entries()].map(([world, commandNumber]) => ({world, commandNumber})),\n lastCommandAck: this.lastCommandAck,\n decodeErrors: this.decodeErrors.slice(-50),\n packetCount: this.packetCount,\n lastPacket: this.lastPacket\n };\n }\n\n state(options = {}) {\n return this.snapshot(options);\n }\n\n world(id) {\n const world = this.worlds.worlds.get(Number(id)) || null;\n return world ? new WorldDomain(this, world.id) : null;\n }\n\n overworld() {\n const world = this.worlds.overworld();\n return world ? new OverworldDomain(this, world.id) : null;\n }\n\n currentShip() {\n const world = this.worlds.shipWorld();\n return world ? new ShipDomain(this, world.id) : null;\n }\n\n shipWorld(options = {}) {\n return this.worlds.shipWorld()?.snapshot(options) || null;\n }\n\n ship() {\n return this.currentShip();\n }\n\n shipEntity() {\n return this.worlds.currentShipEntity();\n }\n\n currentPlayerEntity() {\n const player = currentPlayerSummary(this);\n return player ? new EntityHandle(this, player.entity, \"current\") : null;\n }\n\n entities(scope = \"ship\") {\n return summariesFor(this, scope).map(entitySnapshotFor);\n }\n\n entity(entityId, scope = \"ship\") {\n const summary = this.#readWorld(scope)?.entity(entityId) || null;\n return entitySnapshotFor(summary);\n }\n\n blocks(scope = \"ship\") {\n return this.#readWorld(scope)?.blocks() || [];\n }\n\n materials(scope = \"ship\") {\n return this.#readWorld(scope)?.materials() || [];\n }\n\n machines(scope = \"ship\") {\n return this.#readWorld(scope)?.model.machines() || emptyMachineSummary();\n }\n\n players(scope = \"ship\") {\n return this.#readWorld(scope)?.model.players() || [];\n }\n\n shipControls(scope = \"overworld\") {\n return this.#readWorld(scope)?.model.shipControls() || [];\n }\n\n ships(options = {}) {\n const normalized = normalizeShipReadOptions(options);\n const overworld = this.worlds.overworld();\n if (!overworld) return [];\n // Resolve the reference entity once rather than per ship.\n const current = this.worlds.currentShipEntity();\n const ships = overworld.entities()\n .filter((entity) => entity?.contents?.shipControl)\n .map((entity) => shipReadSummary(entity, normalized, this.worlds, current));\n if (normalized.sort === \"distance\") {\n ships.sort((a, b) => (a.distance ?? Number.POSITIVE_INFINITY) - (b.distance ?? Number.POSITIVE_INFINITY));\n }\n return ships;\n }\n\n shipByHex(hexCode, options = {}) {\n const normalized = String(hexCode ?? \"\").toUpperCase();\n return this.#findShip(options, (control) => String(control.hexCode ?? \"\").toUpperCase() === normalized);\n }\n\n shipByEntity(entityId, options = {}) {\n const id = Number(entityId);\n return this.#findShip(options, (control, entity) => entity.entity === id);\n }\n\n // Match against the ship control record and summarise only the hit. These\n // lookups used to build a full summary -- including a world snapshot -- for\n // every ship in the overworld before discarding all but one.\n #findShip(options, predicate) {\n const overworld = this.worlds.overworld();\n if (!overworld) return null;\n for (const entity of overworld.entities()) {\n const control = entity?.contents?.shipControl;\n if (!control || !predicate(control, entity)) continue;\n return shipReadSummary(entity, normalizeShipReadOptions(options), this.worlds);\n }\n return null;\n }\n\n get packetsRaw() {\n return this.packets.slice();\n }\n\n async #connect() {\n if (!this.server) {\n const servers = await fetchServers(this.baseUrl);\n this.server = servers.find((server) => server.index === this.serverId) || null;\n }\n if (!this.server?.domain) throw new Error(`Unable to resolve game server ${this.serverId}`);\n\n const WebSocket = await getWebSocket();\n const wsUrl = `wss://${this.server.domain}:${this.netPort}`;\n this.ws = this.#openSocket(WebSocket, wsUrl, this.#wsHeaders());\n this.ws.binaryType = \"arraybuffer\";\n this.#ownsSocket = true;\n this.#allowWrites = true;\n this.#bindSocket();\n }\n\n #attachSocket(websocket, {connected = null, ready = false, sid = null, mode = \"observe\"} = {}) {\n this.ws = websocket;\n this.attachMode = normalizeAttachMode(mode);\n this.#ownsSocket = this.attachMode === \"bootstrap\";\n this.#allowWrites = this.attachMode !== \"readonly\";\n try {\n this.ws.binaryType = \"arraybuffer\";\n } catch (_) {\n }\n if (sid != null) this.sid = sid >>> 0;\n this.connected = connected ?? this.#socketLooksOpen(websocket);\n if (ready) {\n this.ready = true;\n if (this.#ownsSocket) {\n this.#sendBootstrap();\n this.#startKeepalive();\n }\n if (this.#allowWrites) {\n this.#flushMessages();\n this.#flushCommands();\n }\n this.#resolveReady?.(this);\n this.#resolveReady = null;\n }\n this.#bindAttachedSocket();\n if (this.connected && this.#ownsSocket) this.#attachedOpen();\n this.emit(\"attach\", this);\n }\n\n #bindSocket() {\n this.ws.onopen = () => {\n this.connected = true;\n this.ws.send(encodeMsgpack({type: 1}));\n this.emit(\"open\", this);\n this.#flushMessages();\n };\n\n this.ws.onmessage = (event) => this.#handleSocketMessage(event.data);\n this.ws.onerror = (event) => this.#fail(event?.error || new Error(\"WebSocket error\"));\n this.ws.onclose = (event) => this.#handleSocketClose(event);\n }\n\n #bindAttachedSocket() {\n const open = () => this.#attachedOpen();\n const message = (event) => this.#handleSocketMessage(event?.data ?? event);\n const error = (event) => this.#fail(event?.error || new Error(\"WebSocket error\"));\n const close = (event) => this.#handleSocketClose(event);\n\n if (typeof this.ws.addEventListener === \"function\") {\n this.ws.addEventListener(\"open\", open);\n this.ws.addEventListener(\"message\", message);\n this.ws.addEventListener(\"error\", error);\n this.ws.addEventListener(\"close\", close);\n return;\n }\n if (typeof this.ws.on === \"function\") {\n this.ws.on(\"open\", open);\n this.ws.on(\"message\", (data) => this.#handleMessage(data));\n this.ws.on(\"error\", error);\n this.ws.on(\"close\", close);\n return;\n }\n const previousMessage = this.ws.onmessage;\n this.ws.onmessage = (event) => {\n if (typeof previousMessage === \"function\") previousMessage.call(this.ws, event);\n message(event);\n };\n }\n\n #attachedOpen() {\n this.connected = true;\n if (this.#attachedOpened) return;\n this.#attachedOpened = true;\n if (this.#ownsSocket) this.ws.send(encodeMsgpack({type: 1}));\n this.emit(\"open\", this);\n if (this.#allowWrites) this.#flushMessages();\n }\n\n #handleSocketClose(event) {\n this.connected = false;\n clearInterval(this.#keepalive);\n this.#keepalive = null;\n this.emit(\"close\", event);\n }\n\n #socketLooksOpen(websocket) {\n return websocket?.readyState == null || websocket.readyState === 1 || websocket.readyState === websocket.OPEN;\n }\n\n #assertWritable() {\n if (!this.#allowWrites) throw new Error(\"DredlessClient is attached in readonly mode\");\n }\n\n #handleSocketMessage(data) {\n if (data && typeof data.arrayBuffer === \"function\") {\n data.arrayBuffer()\n .then((buffer) => this.#handleMessage(buffer))\n .catch((error) => this.#fail(error));\n return;\n }\n this.#handleMessage(data);\n }\n\n #handleMessage(data) {\n let packet;\n try {\n packet = decodeIncomingFrame(data);\n } catch (error) {\n this.#fail(error);\n return;\n }\n this.packetCount += 1;\n this.lastPacket = packet;\n this.#pushLimited(this.packets, packet, this.packetHistory);\n this.emit(\"packet\", packet);\n\n if (!packet || typeof packet !== \"object\") return;\n try {\n if (packet.type === 21) return this.#markReady(packet);\n const worldUpdate = this.worlds.apply(packet);\n if (worldUpdate) {\n this.#handleWorldUpdate(worldUpdate);\n } else {\n this.#handlePacketEvent(packet);\n }\n } catch (error) {\n this.#recordDecodeError(error, packet);\n }\n }\n\n #markReady(packet) {\n this.sid = packet.sid >>> 0;\n this.worlds.currentWorldId = packet.world ?? this.worlds.currentWorldId;\n this.ready = true;\n if (this.#ownsSocket) {\n this.#sendBootstrap();\n this.#startKeepalive();\n }\n if (this.#allowWrites) {\n this.#flushMessages();\n this.#flushCommands();\n }\n this.#resolveReady?.(this);\n this.#resolveReady = null;\n this.emit(\"ready\", this);\n }\n\n #sendBootstrap() {\n if (this.#bootstrapped || !this.connected || !this.sid) return;\n this.#bootstrapped = true;\n this.ws.send(encodeMsgpack(INITIAL_OUTFIT_MESSAGE));\n this.emit(\"bootstrap\", INITIAL_OUTFIT_MESSAGE);\n }\n\n #startKeepalive() {\n if (this.#keepalive) return;\n const payload = encodeMsgpack(KEEPALIVE_MESSAGE);\n this.#keepalive = setInterval(() => {\n if (this.connected) this.ws.send(payload);\n }, KEEPALIVE_INTERVAL_MS);\n }\n\n #flushCommands() {\n while (this.#queuedCommands.length) this.send(this.#queuedCommands.shift());\n }\n\n #flushMessages() {\n if (!this.connected) return;\n const pending = [];\n for (const item of this.#queuedMessages) {\n if (item.afterReady && !this.ready) pending.push(item);\n else this.sendMessage(item.message, {afterReady: item.afterReady});\n }\n this.#queuedMessages = pending;\n }\n\n #handleWorldUpdate(worldUpdate) {\n this.emit(worldUpdate.type, worldUpdate);\n if (worldUpdate.type === \"world-removed\") {\n this.emit(\"world-removed\", worldUpdate.packet);\n return;\n }\n for (const error of worldUpdate.errors || []) this.#recordDecodeError(error, worldUpdate.packet, worldUpdate.world);\n\n const result = worldUpdate.result;\n if (result?.error) this.#recordDecodeError(result.error, worldUpdate.packet, worldUpdate.world);\n if (result?.model?.error) this.#recordDecodeError(result.model.error, worldUpdate.packet, worldUpdate.world);\n if (result?.timing?.cpuLoad != null) this.cpuLoad = result.timing.cpuLoad;\n if (result?.commandNumber != null) this.#ackCommand(result.worldId, result.commandNumber);\n for (const event of result?.events || []) this.#handleSideEvent(event, worldUpdate.world);\n }\n\n #handlePacketEvent(packet) {\n switch (packet.type) {\n case 14:\n if (packet.sid != null) this.outfits.set(packet.sid, packet.outfit);\n this.emit(\"outfit\", packet);\n break;\n case 15:\n this.lastScannerResult = normalizeScannerResultPacket(packet);\n this.#pushLimited(this.scannerResults, this.lastScannerResult);\n this.emit(\"scanner-result\", this.lastScannerResult, packet);\n break;\n case 18:\n this.cpuLoad = packet.cpu_load ?? null;\n this.emit(\"cpu\", packet);\n break;\n case 24:\n this.#pushLimited(this.chat, packet);\n this.emit(\"chat\", packet);\n break;\n case 25:\n this.#pushLimited(this.sessionMessages, packet);\n this.#handleSessionSubmessage(packet);\n this.emit(\"session\", packet);\n break;\n case 26:\n this.#pushLimited(this.motd, packet);\n this.emit(\"motd\", packet);\n break;\n default:\n this.emit(\"event\", packet);\n break;\n }\n }\n\n #handleSessionSubmessage(packet) {\n const submessage = packet?.submessage;\n if (!submessage || typeof submessage !== \"object\") return;\n if (submessage.type === \"config\") {\n this.shipConfig = normalizeShipConfig(submessage);\n this.emit(\"ship-config\", this.shipConfig, packet);\n return;\n }\n if (submessage.type === \"captain_subrank\") {\n this.captainSubrank = normalizeCaptainSubrank(submessage);\n if (this.playerList) this.playerList = normalizeShipPlayerList({}, this.playerList, this.captainSubrank);\n this.emit(\"captain-subrank\", this.captainSubrank, packet);\n return;\n }\n if (submessage.type === \"player_list\") {\n this.playerList = normalizeShipPlayerList(submessage, this.playerList, this.captainSubrank);\n this.emit(\"player-list\", this.playerList, packet);\n }\n }\n\n #handleSideEvent(event, world) {\n if (!event || typeof event !== \"object\") return;\n if (event.type === \"inventory\") {\n this.inventoryState = normalizeInventoryEvent(event);\n this.emit(\"inventory\", this.inventoryState, world);\n return;\n }\n if (event.type === \"pui\") {\n const panel = {...event, world: world?.id ?? null};\n if (event.ent_id != null) this.puiPanels.set(event.ent_id, panel);\n this.emit(\"pui\", panel, world);\n return;\n }\n if (event.type === \"comms\") {\n const panel = {...normalizeCommsEvent(event), world: world?.id ?? null};\n if (panel.entity == null) {\n this.currentCommsPanel = null;\n this.commsPanels.clear();\n } else {\n this.currentCommsPanel = panel;\n this.commsPanels.set(panel.entity, panel);\n }\n this.emit(\"comms\", panel, world);\n return;\n }\n if (event.type === \"tip_warn\") {\n this.#pushLimited(this.warnings, event);\n this.emit(\"tip_warn\", event, world);\n return;\n }\n if (event.type === \"sfx\") {\n this.#pushLimited(this.effects, event);\n this.emit(\"sfx\", event, world);\n return;\n }\n this.emit(\"side-event\", event, world);\n }\n\n #ackCommand(worldId, commandNumber) {\n this.commandAcks.set(Number(worldId), commandNumber);\n if (commandNumber >= 0 && (this.lastCommandAck == null || commandNumber > this.lastCommandAck.commandNumber)) {\n this.lastCommandAck = {world: Number(worldId), commandNumber};\n this.emit(\"ack\", this.lastCommandAck);\n }\n }\n\n #pushLimited(target, value, limit = 200) {\n if (limit === 0) return;\n target.push(value);\n if (target.length > limit) target.splice(0, target.length - limit);\n }\n\n #recordDecodeError(error, packet = null, world = null) {\n const entry = {\n time: Date.now(),\n message: error?.message || String(error),\n packetType: packet && typeof packet === \"object\" ? packet.type ?? null : null,\n world: world?.id ?? (packet && typeof packet === \"object\" ? packet.world ?? null : null)\n };\n this.#pushLimited(this.decodeErrors, entry);\n try {\n this.emit(\"decode-error\", entry, error, packet, world);\n } catch (_) {\n }\n }\n\n #wsHeaders() {\n const headers = {\n origin: this.baseUrl,\n cookie: this.session ? cookieHeader(this.baseUrl, this.session) : \"\"\n };\n if (isNode()) {\n Object.assign(headers, {\n \"user-agent\": JOIN_USER_AGENT,\n accept: \"*/*\",\n \"accept-language\": \"en-US,en;q=0.9\",\n dnt: \"1\",\n \"sec-gpc\": \"1\",\n \"sec-fetch-dest\": \"empty\",\n \"sec-fetch-mode\": \"websocket\",\n \"sec-fetch-site\": \"same-site\",\n pragma: \"no-cache\",\n \"cache-control\": \"no-cache\"\n });\n }\n return headers;\n }\n\n #navigationUnitConfigDefaults(entity, config = {}) {\n const summary = this.entity(entity)?.contents?.navigationUnit || null;\n return {\n destination: config.destination ?? summary?.destination,\n page: config.page ?? 0,\n warp: config.warp ?? \"idle\",\n autoWarpOnShieldFailure: config.autoWarpOnShieldFailure ?? summary?.autoWarpOnShieldFailure ?? false,\n autoWarpOnNoCaptains: config.autoWarpOnNoCaptains ?? summary?.autoWarpOnNoCaptains ?? false\n };\n }\n\n #pusherConfigDefaults(entity, config = {}) {\n const summary = this.entity(entity)?.contents?.pusher || null;\n return {\n mode: config.mode ?? summary?.mode ?? 2,\n filteredMode: config.filteredMode ?? summary?.filteredMode ?? 0,\n angle: config.angle ?? summary?.angle ?? 0,\n speed: config.speed ?? summary?.speed ?? 20,\n filterInventory: config.filterInventory ?? summary?.filterInventory ?? false,\n length: config.length ?? summary?.length ?? 1000\n };\n }\n\n #loaderConfigDefaults(entity, config = {}) {\n const summary = this.entity(entity)?.contents?.loader || null;\n return {\n pick: config.pick ?? summary?.pick ?? 0,\n place: config.place ?? summary?.place ?? 2,\n priority: config.priority ?? summary?.priority ?? 0,\n stack: config.stack ?? summary?.stack ?? 16,\n cycle: config.cycle ?? summary?.cycle ?? 1,\n requireOutput: config.requireOutput ?? summary?.requireOutput ?? false,\n waitForStack: config.waitForStack ?? summary?.waitForStack ?? false\n };\n }\n\n #loaderFullConfigDefaults(entity, config = {}) {\n const summary = this.entity(entity)?.contents?.loader || null;\n return {\n ...this.#loaderConfigDefaults(entity, config),\n filterMode: config.filterMode ?? summary?.filterMode ?? 0,\n filterSlots: config.filterSlots ?? summary?.filterSlots ?? []\n };\n }\n\n #cargoHatchConfigDefaults(entity, config = {}) {\n const summary = this.entity(entity)?.contents?.cargoHatch || null;\n return {\n filterMode: config.filterMode ?? summary?.filterMode ?? 0,\n filterSlots: config.filterSlots ?? summary?.filterSlots ?? []\n };\n }\n\n #openSocket(WebSocket, url, headers) {\n if (!isNode()) return new WebSocket(url);\n try {\n return new WebSocket(url, {headers});\n } catch (_) {\n return new WebSocket(url);\n }\n }\n\n #readWorld(scope) {\n if (scope == null || scope === \"ship\" || scope === \"current\") return this.worlds.shipWorld();\n if (scope === \"overworld\") return this.worlds.overworld();\n if (typeof scope === \"number\" || typeof scope === \"string\") return this.worlds.worlds.get(Number(scope)) || null;\n return null;\n }\n\n #fail(error) {\n this.#rejectReady?.(error);\n this.#rejectReady = null;\n try {\n this.emit(\"error\", error);\n } catch (_) {\n }\n }\n}\n", "export class EventBus {\n #listeners = new Map();\n\n on(type, callback) {\n if (typeof callback !== \"function\") return this;\n if (!this.#listeners.has(type)) this.#listeners.set(type, new Set());\n this.#listeners.get(type).add(callback);\n return this;\n }\n\n off(type, callback) {\n this.#listeners.get(type)?.delete(callback);\n return this;\n }\n\n once(type, callback) {\n const wrapped = (...args) => {\n this.off(type, wrapped);\n callback(...args);\n };\n return this.on(type, wrapped);\n }\n\n emit(type, ...args) {\n const listeners = this.#listeners.get(type);\n if (!listeners || listeners.size === 0) return;\n // Copy only when there is more than one listener: the copy exists so a\n // listener may unsubscribe mid-dispatch, and a lone listener removing\n // itself cannot disturb an iteration that is already finishing.\n for (const callback of listeners.size === 1 ? listeners : [...listeners]) {\n try {\n callback(...args);\n } catch (error) {\n if (type === \"error\" || !this.#listeners.has(\"error\")) throw error;\n this.emit(\"error\", error);\n }\n }\n }\n}\n", "// Generated by scripts/update-item-schema.js from https://pub.drednot.io/prod/econ/item_schema.json. Do not edit manually.\n\nexport const ITEM_SCHEMA = Object.freeze([\n {\n \"id\": 1,\n \"name\": \"Iron\",\n \"desc\": \"Material. Used to produce most items.\",\n \"image\": \"item/res_iron\",\n \"rarity\": 0,\n \"max_stack\": 16\n },\n {\n \"id\": 2,\n \"name\": \"Explosives\",\n \"desc\": \"Material. Used to produce munitions.\",\n \"image\": \"item/res_explosives\",\n \"rarity\": 0,\n \"max_stack\": 16\n },\n {\n \"id\": 4,\n \"name\": \"Hyper Rubber\",\n \"desc\": \"Material. High Elasticity.\",\n \"image\": \"item/res_hyper_rubber\",\n \"rarity\": 2,\n \"max_stack\": 16\n },\n {\n \"id\": 5,\n \"name\": \"Flux Crystals\",\n \"desc\": \"Material. Used to produce advanced machinery.\",\n \"image\": \"item/res_flux_crystals\",\n \"rarity\": 2,\n \"max_stack\": 16\n },\n {\n \"id\": 6,\n \"name\": \"Thruster Fuel\",\n \"desc\": \"Refined fuel. Powers thrusters. More efficient than explosives.\",\n \"image\": \"item/fuel\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 30,\n \"input\": [\n {\n \"id\": 2,\n \"count\": 1\n }\n ],\n \"fabs\": [\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 49,\n \"name\": \"Compressed Explosives\",\n \"desc\": \"Explosives, compressed into a flux matrix at a 16:1 ratio. Unpack with a recycler.\",\n \"image\": \"item/comp_exp\",\n \"rarity\": 2,\n \"max_stack\": 16\n },\n {\n \"id\": 50,\n \"name\": \"Compressed Iron\",\n \"desc\": \"Iron, compressed into a flux matrix at a 24:1 ratio. Unpack with a recycler.\",\n \"image\": \"item/comp_iron\",\n \"rarity\": 2,\n \"max_stack\": 16\n },\n {\n \"id\": 51,\n \"name\": \"Volleyball\",\n \"desc\": \"\\ud83c\\udfd0\",\n \"image\": \"item/ball_volley\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 52,\n \"name\": \"Golden Volleyball\",\n \"desc\": \"\\ud83c\\udf1f\\ud83c\\udfd0\\ud83c\\udf1f\",\n \"image\": \"item/ball_vg\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 53,\n \"name\": \"Basketball\",\n \"desc\": \"\\ud83c\\udfc0\",\n \"image\": \"item/ball_basket\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 54,\n \"name\": \"Golden Basketball\",\n \"desc\": \"\\ud83c\\udf1f\\ud83c\\udfc0\\ud83c\\udf1f\",\n \"image\": \"item/ball_bg\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 55,\n \"name\": \"Beach Ball\",\n \"desc\": \"\\ud83c\\udf34\",\n \"image\": \"item/ball_beach\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 56,\n \"name\": \"Football\",\n \"desc\": \"\\u26bd\",\n \"image\": \"item/ball_soccer\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 100,\n \"name\": \"Wrench\",\n \"desc\": \"Used to take stuff apart.\",\n \"image\": \"item/wrench\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Starter\",\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 101,\n \"name\": \"Item Shredder\",\n \"desc\": \"Destroys items.\",\n \"image\": \"item/item_shredder\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Starter\",\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 102,\n \"name\": \"Golden Item Shredder\",\n \"desc\": \"Destroys items quickly, with style.\",\n \"image\": \"item/item_shredder_g\",\n \"rarity\": 9,\n \"max_stack\": 1\n },\n {\n \"id\": 103,\n \"name\": \"Repair Tool\",\n \"desc\": \"Used to repair blocks and objects.\",\n \"image\": \"item/repair_tool\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Starter\",\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 104,\n \"name\": \"Handheld Pusher\",\n \"desc\": \"A pusher you can hold in your hand.\",\n \"image\": \"item/pusher_hand\",\n \"rarity\": 2,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n },\n {\n \"id\": 5,\n \"count\": 16\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 105,\n \"name\": \"Ship Shield Booster\",\n \"desc\": \"An inferior power source for shield generators.\",\n \"image\": \"item/repairkit\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 3,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 2\n }\n ],\n \"fabs\": [\n \"Engineering\",\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 106,\n \"name\": \"Ship Embiggener\",\n \"desc\": \"Makes your ship bigger. Press R to change axis.\",\n \"image\": \"item/ship_embiggener\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 3,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Starter\",\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 107,\n \"name\": \"Ship Shrinkinator\",\n \"desc\": \"Makes your ship smaller. Space must be completely empty. Press R to change axis.\",\n \"image\": \"item/ship_shrinkinator\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 3,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 108,\n \"name\": \"Backpack\",\n \"desc\": \"Equipment (Back). Lets you hold more items.\",\n \"image\": \"item/eq_backpack\",\n \"rarity\": 1,\n \"max_stack\": 1\n },\n {\n \"id\": 109,\n \"name\": \"Speed Skates\",\n \"desc\": \"Equipment (Feet). SPEED.\",\n \"image\": \"item/eq_speed_skates\",\n \"rarity\": 2,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 20,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n },\n {\n \"id\": 4,\n \"count\": 4\n },\n {\n \"id\": 5,\n \"count\": 16\n }\n ],\n \"fabs\": [\n \"Equipment\"\n ]\n }\n },\n {\n \"id\": 110,\n \"name\": \"Booster Boots\",\n \"desc\": \"Equipment (Feet). Provides a double-jump and slightly more powerful jumps.\",\n \"image\": \"item/eq_booster_boots\",\n \"rarity\": 2,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 20,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n },\n {\n \"id\": 4,\n \"count\": 8\n },\n {\n \"id\": 5,\n \"count\": 16\n }\n ],\n \"fabs\": [\n \"Equipment\"\n ]\n }\n },\n {\n \"id\": 111,\n \"name\": \"Launcher Gauntlets\",\n \"desc\": \"Equipment (Hands). Throw items more powerfully.\",\n \"image\": \"item/eq_launcher_gauntlets\",\n \"rarity\": 2,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 20,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n },\n {\n \"id\": 4,\n \"count\": 8\n },\n {\n \"id\": 5,\n \"count\": 8\n }\n ],\n \"fabs\": [\n \"Equipment\"\n ]\n }\n },\n {\n \"id\": 112,\n \"name\": \"Construction Gauntlets\",\n \"desc\": \"Equipment (Hands). While in a safe zone: Doubles build/destruct/repair/use range and speed, and allows using objects through walls.\",\n \"image\": \"item/eq_construction_gauntlets\",\n \"rarity\": 2,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 20,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n },\n {\n \"id\": 4,\n \"count\": 4\n },\n {\n \"id\": 5,\n \"count\": 32\n }\n ],\n \"fabs\": [\n \"Equipment\"\n ]\n }\n },\n {\n \"id\": 113,\n \"name\": \"Rocket Pack\",\n \"desc\": \"Equipment (Back). Speedy Flight.\",\n \"image\": \"item/eq_rocket_pack\",\n \"rarity\": 2,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 20,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 16\n },\n {\n \"id\": 4,\n \"count\": 4\n },\n {\n \"id\": 5,\n \"count\": 32\n }\n ],\n \"fabs\": [\n \"Equipment\"\n ]\n }\n },\n {\n \"id\": 114,\n \"name\": \"Hover Pack\",\n \"desc\": \"Equipment (Back). Controlled Flight.\",\n \"image\": \"item/eq_hover_pack\",\n \"rarity\": 2,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 20,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 16\n },\n {\n \"id\": 4,\n \"count\": 4\n },\n {\n \"id\": 5,\n \"count\": 32\n }\n ],\n \"fabs\": [\n \"Equipment\"\n ]\n }\n },\n {\n \"id\": 115,\n \"name\": \"Manifest Scanner\",\n \"desc\": \"Generate a list of items on your ship.\",\n \"image\": \"item/scanner_manifest\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 116,\n \"name\": \"BoM Scanner\",\n \"desc\": \"Generate a list of materials used to build your ship.\",\n \"image\": \"item/scanner_bom\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 117,\n \"name\": \"Starter Wrench\",\n \"desc\": \"Useful for getting you out of a bind. Slow. Disappears if dropped.\",\n \"image\": \"item/wrench_starter\",\n \"rarity\": -1,\n \"max_stack\": 1\n },\n {\n \"id\": 118,\n \"name\": \"Starter Shredder\",\n \"desc\": \"Destroys items. Slow. Disappears if dropped.\",\n \"image\": \"item/item_shredder_starter\",\n \"rarity\": -1,\n \"max_stack\": 1\n },\n {\n \"id\": 119,\n \"name\": \"Hand Cannon\",\n \"desc\": \"[TEST EXCLUSIVE] A small, handheld cannon. Uses ammo in your inventory.\",\n \"image\": \"item/hand_cannon\",\n \"rarity\": 0,\n \"max_stack\": 1\n },\n {\n \"id\": 120,\n \"name\": \"Blueprint Scanner\",\n \"desc\": \"Generates blueprint strings, which describe how to rebuild ships or parts of ships. Click and drag to select a region.\",\n \"image\": \"item/scanner_blueprint\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 121,\n \"name\": \"Sandbox RCD\",\n \"desc\": \"Buildable. Used for automated construction. This test-exclusive variant can spawn items and doesn't need fuel. It works faster on ships owned by patrons.\",\n \"image\": \"item/rcd_sandbox\",\n \"rarity\": -1,\n \"max_stack\": 1\n },\n {\n \"id\": 122,\n \"name\": \"Flux RCD\",\n \"desc\": \"Buildable. Used for automated construction. Consumes flux as fuel.\",\n \"image\": \"item/rcd_flux\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 123,\n \"name\": \"Shield Core\",\n \"desc\": \"A power source for shield generators.\",\n \"image\": \"item/shield_core\",\n \"rarity\": 0,\n \"max_stack\": 1\n },\n {\n \"id\": 150,\n \"name\": \"Standard Ammo\",\n \"desc\": \"Regular bullets.\",\n \"image\": \"item/ammo_standard\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 4,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 1\n },\n {\n \"id\": 2,\n \"count\": 1\n }\n ],\n \"fabs\": [\n \"Starter\",\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 151,\n \"name\": \"ScatterShot Ammo\",\n \"desc\": \"Shoots multiple projectiles. Significant damage at close range, with knock-back.\",\n \"image\": \"item/ammo_scattershot\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 4,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 1\n },\n {\n \"id\": 2,\n \"count\": 1\n }\n ],\n \"fabs\": [\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 152,\n \"name\": \"Flak Ammo\",\n \"desc\": \"Explodes into more bullets in flight.\",\n \"image\": \"item/ammo_flak\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 4,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 1\n },\n {\n \"id\": 2,\n \"count\": 1\n }\n ],\n \"fabs\": [\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 153,\n \"name\": \"Sniper Ammo\",\n \"desc\": \"Speedy. Gains power from bouncing.\",\n \"image\": \"item/ammo_sniper\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 4,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 1\n },\n {\n \"id\": 2,\n \"count\": 1\n }\n ],\n \"fabs\": [\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 154,\n \"name\": \"Punch Ammo\",\n \"desc\": \"Pushes objects away.\",\n \"image\": \"item/ammo_punch\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 4,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 1\n },\n {\n \"id\": 2,\n \"count\": 1\n }\n ],\n \"fabs\": [\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 155,\n \"name\": \"Yank Ammo\",\n \"desc\": \"Pulls objects.\",\n \"image\": \"item/ammo_yank\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 4,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 1\n },\n {\n \"id\": 2,\n \"count\": 1\n }\n ],\n \"fabs\": [\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 156,\n \"name\": \"Slug Ammo\",\n \"desc\": \"Slow bullet. Gains speed and damage as it falls.\",\n \"image\": \"item/ammo_slug\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 4,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 1\n },\n {\n \"id\": 2,\n \"count\": 1\n }\n ],\n \"fabs\": [\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 157,\n \"name\": \"Trash Box\",\n \"desc\": \"Low quality, but free! Decays over time.\",\n \"image\": \"item/ammo_trash\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 3,\n \"input\": [],\n \"fabs\": [\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 159,\n \"name\": \"Booster Fuel (Low Grade)\",\n \"desc\": \"Increases thruster power for a short time.\",\n \"image\": \"item/booster_low\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 30,\n \"input\": [\n {\n \"id\": 2,\n \"count\": 16\n }\n ],\n \"fabs\": [\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 160,\n \"name\": \"Booster Fuel (High Grade)\",\n \"desc\": \"Increases thruster power for a short time.\",\n \"image\": \"item/booster_high\",\n \"rarity\": 2,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 4,\n \"time\": 30,\n \"input\": [\n {\n \"id\": 2,\n \"count\": 64\n },\n {\n \"id\": 5,\n \"count\": 1\n }\n ],\n \"fabs\": [\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 161,\n \"name\": \"Void Orb\",\n \"desc\": \"DO NOT EAT!\",\n \"image\": \"item/void_orb\",\n \"rarity\": 10,\n \"max_stack\": 1\n },\n {\n \"id\": 162,\n \"name\": \"Turret Booster - Rapid Fire\",\n \"desc\": \"Boosts a re-configurable turret's fire rate by 50%, with reduced accuracy.\",\n \"image\": \"item/turret_booster_rapid\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 163,\n \"name\": \"Turret Booster - Rapid Fire (Depleted)\",\n \"desc\": \"Boosts a re-configurable turret's fire rate by 25%, with reduced accuracy. Nearly depleted!\",\n \"image\": \"item/turret_booster_rapid_used\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 164,\n \"name\": \"Turret Booster - Preservation\",\n \"desc\": \"Boosts a re-configurable turret's ammo preservation by 10%, with reduced rotational aiming limits.\",\n \"image\": \"item/turret_booster_preservation\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 165,\n \"name\": \"Turret Booster - Preservation (Depleted)\",\n \"desc\": \"Boosts a re-configurable turret's ammo preservation by 5%, with reduced rotational aiming limits. Nearly depleted!\",\n \"image\": \"item/turret_booster_preservation_used\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 166,\n \"name\": \"Cooling Cell\",\n \"desc\": \"Prevents machine cannons from damaging themselves.\",\n \"image\": \"item/cooling_cell\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 234,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 167,\n \"name\": \"Cooling Cell (Hot)\",\n \"desc\": \"Will take some time to cool back down.\",\n \"image\": \"item/cooling_cell_hot\",\n \"rarity\": 0,\n \"max_stack\": 1\n },\n {\n \"id\": 168,\n \"name\": \"Burst Charge\",\n \"desc\": \"Power source for burst cannons. Overcharging cannons may result in damage!\",\n \"image\": \"item/burst_charge\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 2,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 215,\n \"name\": \"Helm (Packaged)\",\n \"desc\": \"Buildable. Used to pilot your ship.\",\n \"image\": \"item/helm\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 10,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 216,\n \"name\": \"Helm (Starter, Packaged)\",\n \"desc\": \"Buildable Starter Item. Used to pilot your ship.\",\n \"image\": \"item/helm_starter\",\n \"rarity\": -1,\n \"max_stack\": 1\n },\n {\n \"id\": 217,\n \"name\": \"Comms Station (Packaged)\",\n \"desc\": \"Buildable. Used to communicate with other ships.\",\n \"image\": \"item/comms\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 10,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 218,\n \"name\": \"Sign (Packaged)\",\n \"desc\": \"Buildable. Can display a short message.\",\n \"image\": \"item/sign\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 10,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 219,\n \"name\": \"Spawn Point (Packaged)\",\n \"desc\": \"Buildable. Can be set to spawn a specific rank.\",\n \"image\": \"item/spawn\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 10,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 220,\n \"name\": \"Door (Packaged)\",\n \"desc\": \"Buildable. Can be restricted to specific ranks. Press R to rotate.\",\n \"image\": \"item/door\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 10,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 221,\n \"name\": \"Cargo Hatch (Packaged)\",\n \"desc\": \"Buildable. Drops items picked up by the ship.\",\n \"image\": \"item/item_hatch\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 10,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 222,\n \"name\": \"Cargo Hatch (Starter, Packaged)\",\n \"desc\": \"Buildable Starter Item. Drops items picked up by the ship.\",\n \"image\": \"item/item_hatch_starter\",\n \"rarity\": -1,\n \"max_stack\": 1\n },\n {\n \"id\": 223,\n \"name\": \"Cargo Ejector (Packaged)\",\n \"desc\": \"Buildable. Ejects items from the ship.\",\n \"image\": \"item/item_ejector\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 10,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 224,\n \"name\": \"Turret Controller (Packaged)\",\n \"desc\": \"Buildable. Controls adjacent turrets.\",\n \"image\": \"item/turret_controller\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 10,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 226,\n \"name\": \"Cannon (Packaged)\",\n \"desc\": \"Buildable. A normal cannon that you can use to shoot at stuff.\",\n \"image\": \"item/turret_rc\",\n \"rarity\": 1,\n \"max_stack\": 1\n },\n {\n \"id\": 227,\n \"name\": \"Starter Cannon (Packaged)\",\n \"desc\": \"Buildable Starter Item. Slowly re-generates ammo when empty.\",\n \"image\": \"item/turret_rc_starter\",\n \"rarity\": -1,\n \"max_stack\": 1\n },\n {\n \"id\": 228,\n \"name\": \"Burst Cannon (Packaged)\",\n \"desc\": \"Buildable. Fires a burst of shots when supplied with burst charges. May damage itself.\",\n \"image\": \"item/turret_burst\",\n \"rarity\": 1,\n \"max_stack\": 1\n },\n {\n \"id\": 229,\n \"name\": \"Machine Cannon (Packaged)\",\n \"desc\": \"Buildable. A fully automatic gun that takes time to wind up. Requires cooling.\",\n \"image\": \"item/turret_auto\",\n \"rarity\": 1,\n \"max_stack\": 1\n },\n {\n \"id\": 230,\n \"name\": \"Thruster (Packaged)\",\n \"desc\": \"Buildable. Moves your ship. Fuelled with explosives.\",\n \"image\": \"item/thruster\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 10,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 231,\n \"name\": \"Thruster (Starter, Packaged)\",\n \"desc\": \"Buildable Starter Item. Moves your ship. Doesn't need fuel.\",\n \"image\": \"item/thruster_starter\",\n \"rarity\": -1,\n \"max_stack\": 1\n },\n {\n \"id\": 232,\n \"name\": \"Iron Block\",\n \"desc\": \"Buildable. Used for interior walls/floors.\",\n \"image\": \"item/block\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 2\n }\n ],\n \"fabs\": [\n \"Starter\",\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 233,\n \"name\": \"Hyper Rubber Block\",\n \"desc\": \"Buildable. Bouncy.\",\n \"image\": \"item/block_hrubber\",\n \"rarity\": 2,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 4,\n \"count\": 2\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 234,\n \"name\": \"Hyper Ice Block\",\n \"desc\": \"Buildable. Low-friction ice that can't melt for some reason.\",\n \"image\": \"item/block_sglass\",\n \"rarity\": 1,\n \"max_stack\": 16\n },\n {\n \"id\": 235,\n \"name\": \"Ladder\",\n \"desc\": \"Buildable. You can climb them.\",\n \"image\": \"item/ladder\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 2\n }\n ],\n \"fabs\": [\n \"Starter\",\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 236,\n \"name\": \"Walkway\",\n \"desc\": \"Buildable. Blocks players but not items.\",\n \"image\": \"item/walkway\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 2\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 237,\n \"name\": \"Item Net\",\n \"desc\": \"Buildable. Blocks items but not players.\",\n \"image\": \"item/item_net\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 2\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 239,\n \"name\": \"Paint\",\n \"desc\": \"Used to paint your ship's background. Hold R to select color.\",\n \"image\": \"item/color_panel\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 2\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 240,\n \"name\": \"Expando Box (Packaged)\",\n \"desc\": \"Buildable. Flexible bulk storage.\",\n \"image\": \"item/exbox\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 10,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 241,\n \"name\": \"Safety Anchor\",\n \"desc\": \"Buildable. Prevents teleports out of safe zones while placed.\",\n \"image\": \"item/anchor\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 20,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 16\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 242,\n \"name\": \"Pusher (Packaged)\",\n \"desc\": \"Buildable. Pushes things.\",\n \"image\": \"item/pusher\",\n \"rarity\": 2,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 10,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n },\n {\n \"id\": 5,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 243,\n \"name\": \"Item Launcher (Packaged)\",\n \"desc\": \"Buildable. Launches items at a configurable speed and angle.\",\n \"image\": \"item/item_launcher\",\n \"rarity\": 2,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 10,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n },\n {\n \"id\": 4,\n \"count\": 8\n },\n {\n \"id\": 5,\n \"count\": 8\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 244,\n \"name\": \"DEPRECATED ITEM\",\n \"desc\": \"DEPRECATED ITEM\",\n \"image\": \"item/loader_old\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 245,\n \"name\": \"Recycler (Packaged)\",\n \"desc\": \"Buildable. Converts items back into resources.\",\n \"image\": \"item/recycler\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 10,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 246,\n \"name\": \"Fabricator (Legacy, Packaged)\",\n \"desc\": \"Buildable. It doesn't do anything.\",\n \"image\": \"item/fabricator_legacy\",\n \"rarity\": 9,\n \"max_stack\": 1\n },\n {\n \"id\": 247,\n \"name\": \"Fabricator (Starter, Packaged)\",\n \"desc\": \"Buildable Starter Item. Used to craft basic items.\",\n \"image\": \"item/fabricator_starter\",\n \"rarity\": -1,\n \"max_stack\": 1\n },\n {\n \"id\": 248,\n \"name\": \"Fabricator (Munitions, Packaged)\",\n \"desc\": \"Buildable. Used to craft ammo and other consumables.\",\n \"image\": \"item/fabricator_munitions\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 20,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 16\n }\n ],\n \"fabs\": [\n \"Starter\",\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 249,\n \"name\": \"Fabricator (Engineering, Packaged)\",\n \"desc\": \"Buildable. Used to craft tools, blocks, and security items.\",\n \"image\": \"item/fabricator_engineering\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 20,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 16\n }\n ],\n \"fabs\": [\n \"Starter\",\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 250,\n \"name\": \"Fabricator (DEPRECATED, Packaged)\",\n \"desc\": \"DEPRECATED ITEM\",\n \"image\": \"item/fabricator_machine\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 20,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 16\n }\n ],\n \"fabs\": []\n }\n },\n {\n \"id\": 251,\n \"name\": \"Fabricator (Equipment, Packaged)\",\n \"desc\": \"Buildable. Used to craft wearable equipment.\",\n \"image\": \"item/fabricator_equipment\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 20,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 16\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 252,\n \"name\": \"Loader (Packaged)\",\n \"desc\": \"Buildable. Loads items into machines.\",\n \"image\": \"item/loader\",\n \"rarity\": 2,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 10,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n },\n {\n \"id\": 5,\n \"count\": 2\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 253,\n \"name\": \"Lockdown Override Unit\",\n \"desc\": \"Buildable. Allows a limited number of green rarity items to be removed from a ship while in lockdown mode.\",\n \"image\": \"item/lockdown_override_green\",\n \"rarity\": 2,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 20,\n \"input\": [\n {\n \"id\": 5,\n \"count\": 64\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 254,\n \"name\": \"Annihilator Tile\",\n \"desc\": \"[TEST EXCLUSIVE] Buildable. Destroys objects.\",\n \"image\": \"item/annihilator_tile\",\n \"rarity\": 0,\n \"max_stack\": 16\n },\n {\n \"id\": 255,\n \"name\": \"Fluid Tank\",\n \"desc\": \"Buildable. Stores fluids.\",\n \"image\": \"item/tank\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 20,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 64\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 256,\n \"name\": \"Shield Generator\",\n \"desc\": \"Buildable. Generates shield fluid.\",\n \"image\": \"item/shield_generator\",\n \"rarity\": 1,\n \"max_stack\": 1\n },\n {\n \"id\": 257,\n \"name\": \"Shield Projector\",\n \"desc\": \"Buildable. Used to activate an adjacent bank of shield tanks.\",\n \"image\": \"item/shield_projector\",\n \"rarity\": 1,\n \"max_stack\": 1\n },\n {\n \"id\": 258,\n \"name\": \"Enhanced Turret Controller\",\n \"desc\": \"Buildable. Used to control turrets remotely.\",\n \"image\": \"item/turret_controller_new\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 259,\n \"name\": \"Bulk Ejector (Packaged)\",\n \"desc\": \"Buildable. WIP / UNOBTAINABLE\",\n \"image\": \"item/bulk_ejector\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 260,\n \"name\": \"Bulk Loading Bay Designator (Packaged)\",\n \"desc\": \"Buildable. WIP / UNOBTAINABLE\",\n \"image\": \"item/bulk_bay_marker\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 261,\n \"name\": \"Navigation Unit (Starter, Packaged)\",\n \"desc\": \"Buildable Starter Item. Used to select a destination zone and initiate emergency warps. Also functions as a simple shield projector.\",\n \"image\": \"item/nav_unit\",\n \"rarity\": -1,\n \"max_stack\": 1\n },\n {\n \"id\": 262,\n \"name\": \"Logistics Rail\",\n \"desc\": \"Buildable. Used by munitions supply units to deliver munitions.\",\n \"image\": \"item/logistics_rail\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 2\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 263,\n \"name\": \"Acute Cannon (Packaged)\",\n \"desc\": \"Buildable. A gun with a limited firing angle, and a slightly improved fire-rate.\",\n \"image\": \"item/turret_acute\",\n \"rarity\": 1,\n \"max_stack\": 1\n },\n {\n \"id\": 264,\n \"name\": \"Munitions Supply Unit (Packaged)\",\n \"desc\": \"Buildable. Sends munitions to turrets via logistics rails.\",\n \"image\": \"item/msu\",\n \"rarity\": 1,\n \"max_stack\": 1\n },\n {\n \"id\": 265,\n \"name\": \"Obtuse Cannon (Packaged)\",\n \"desc\": \"Buildable. A gun which preserves ammo, and has a slightly reduced fire-rate.\",\n \"image\": \"item/turret_obtuse\",\n \"rarity\": 1,\n \"max_stack\": 1\n },\n {\n \"id\": 300,\n \"name\": \"Eternal Bronze Wrench\",\n \"desc\": \"Patron reward. Will not despawn. Thank you for your support! \\ud83d\\ude00\",\n \"image\": \"item/wrench_bronze_et\",\n \"rarity\": -1,\n \"max_stack\": 1\n },\n {\n \"id\": 301,\n \"name\": \"Eternal Silver Wrench\",\n \"desc\": \"Patron reward. Will not despawn. Thank you for your support! \\ud83d\\ude00\",\n \"image\": \"item/wrench_silver_et\",\n \"rarity\": -1,\n \"max_stack\": 1\n },\n {\n \"id\": 302,\n \"name\": \"Eternal Gold Wrench\",\n \"desc\": \"Patron reward. Will not despawn. Thank you for your support! \\ud83d\\ude00\",\n \"image\": \"item/wrench_gold_et\",\n \"rarity\": -1,\n \"max_stack\": 1\n },\n {\n \"id\": 303,\n \"name\": \"Eternal Flux Wrench\",\n \"desc\": \"Patron reward. Will not despawn. Thank you for your support! \\ud83d\\ude00\",\n \"image\": \"item/wrench_flux_et\",\n \"rarity\": -1,\n \"max_stack\": 1\n },\n {\n \"id\": 304,\n \"name\": \"Eternal Platinum Wrench\",\n \"desc\": \"Patron reward. Will not despawn. Thank you for your support! \\ud83d\\ude00\",\n \"image\": \"item/wrench_platinum_et\",\n \"rarity\": -1,\n \"max_stack\": 1\n },\n {\n \"id\": 305,\n \"name\": \"Gold Null Trophy\",\n \"desc\": \"RIP 0x items.\",\n \"image\": \"item/trophy_null\",\n \"rarity\": 9,\n \"max_stack\": 1\n },\n {\n \"id\": 306,\n \"name\": \"Bug Hunter Trophy\",\n \"desc\": \"Rewarded for reporting a serious problem.\",\n \"image\": \"item/trophy_bug\",\n \"rarity\": -1,\n \"max_stack\": 1\n },\n {\n \"id\": 307,\n \"name\": \"Silver Null Trophy\",\n \"desc\": \"RIP 0x items.\",\n \"image\": \"item/trophy_null_silver\",\n \"rarity\": 9,\n \"max_stack\": 1\n },\n {\n \"id\": 308,\n \"name\": \"Bronze Wrench\",\n \"desc\": \"Patron reward. Thank you for your support! \\ud83d\\ude00\",\n \"image\": \"item/wrench_bronze\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Starter\",\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 309,\n \"name\": \"Silver Wrench\",\n \"desc\": \"Patron reward. Thank you for your support! \\ud83d\\ude00\",\n \"image\": \"item/wrench_silver\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Starter\",\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 310,\n \"name\": \"Gold Wrench\",\n \"desc\": \"Patron reward. Thank you for your support! \\ud83d\\ude00\",\n \"image\": \"item/wrench_gold\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Starter\",\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 311,\n \"name\": \"Platinum Wrench\",\n \"desc\": \"Patron reward. Thank you for your support! \\ud83d\\ude00\",\n \"image\": \"item/wrench_platinum\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Starter\",\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 312,\n \"name\": \"Flux Wrench\",\n \"desc\": \"Patron reward. Thank you for your support! \\ud83d\\ude00\",\n \"image\": \"item/wrench_flux\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Starter\",\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 313,\n \"name\": \"Lesser Cap\",\n \"desc\": \"Cosmetic Equipment (Head). Patron reward.\",\n \"image\": \"item/cap\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Equipment\"\n ]\n }\n },\n {\n \"id\": 314,\n \"name\": \"Goofy Glasses\",\n \"desc\": \"Cosmetic Equipment (Face). Patron reward.\",\n \"image\": \"item/glasses\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Equipment\"\n ]\n }\n },\n {\n \"id\": 315,\n \"name\": \"Shades\",\n \"desc\": \"Cosmetic Equipment (Face). Patron reward.\",\n \"image\": \"item/shades\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Equipment\"\n ]\n }\n },\n {\n \"id\": 316,\n \"name\": \"Top Hat\",\n \"desc\": \"Cosmetic Equipment (Head). Patron reward.\",\n \"image\": \"item/top_hat\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Equipment\"\n ]\n }\n },\n {\n \"id\": 317,\n \"name\": \"Demon Horns\",\n \"desc\": \"Cosmetic Equipment (Head). Patron reward.\",\n \"image\": \"item/horns\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Equipment\"\n ]\n }\n },\n {\n \"id\": 318,\n \"name\": \"Alien Mask\",\n \"desc\": \"Cosmetic Equipment (Face). Patron reward.\",\n \"image\": \"item/mask_alien\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Equipment\"\n ]\n }\n },\n {\n \"id\": 319,\n \"name\": \"Clown Mask\",\n \"desc\": \"Cosmetic Equipment (Face). Patron reward.\",\n \"image\": \"item/mask_clown\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Equipment\"\n ]\n }\n },\n {\n \"id\": 320,\n \"name\": \"Goblin Mask\",\n \"desc\": \"Cosmetic Equipment (Face). Patron reward.\",\n \"image\": \"item/mask_goblin\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Equipment\"\n ]\n }\n },\n {\n \"id\": 321,\n \"name\": \"Pumpkin\",\n \"desc\": \"Cosmetic Equipment (Face). Patron reward.\",\n \"image\": \"item/mask_pumpkin\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Equipment\"\n ]\n }\n },\n {\n \"id\": 322,\n \"name\": \"Witch Hat\",\n \"desc\": \"Cosmetic Equipment (Head). Patron reward.\",\n \"image\": \"item/witch_hat\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Equipment\"\n ]\n }\n },\n {\n \"id\": 323,\n \"name\": \"Wild Gremlin (Red)\",\n \"desc\": \"It looks upset.\",\n \"image\": \"item/gremlin_red\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 324,\n \"name\": \"Wild Gremlin (Orange)\",\n \"desc\": \"It looks upset.\",\n \"image\": \"item/gremlin_orange\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 325,\n \"name\": \"Wild Gremlin (Yellow)\",\n \"desc\": \"It looks upset.\",\n \"image\": \"item/gremlin_yellow\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 326,\n \"name\": \"Elimination Loot Box\",\n \"desc\": \"Recycle in a safe zone to unbox.\",\n \"image\": \"item/loot_box\",\n \"rarity\": 2,\n \"max_stack\": 16\n },\n {\n \"id\": 327,\n \"name\": \"Elimination Loot Box (Locked)\",\n \"desc\": \"Recycle in a safe zone to unbox.\",\n \"image\": \"item/loot_box_locked\",\n \"rarity\": 2,\n \"max_stack\": 16\n },\n {\n \"id\": 340,\n \"name\": \"Wild Gremlin (Green)\",\n \"desc\": \"It looks upset.\",\n \"image\": \"item/gremlin_green\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 341,\n \"name\": \"Wild Gremlin (Blue)\",\n \"desc\": \"It looks upset.\",\n \"image\": \"item/gremlin_blue\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 342,\n \"name\": \"Wild Gremlin (Purple)\",\n \"desc\": \"It looks upset.\",\n \"image\": \"item/gremlin_purple\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 400,\n \"name\": \"\\u03b2 ScatterShot Ammo\",\n \"desc\": \"Shoots multiple projectiles. Significant damage at close range, with knock-back.\",\n \"image\": \"item/ammo_b_scattershot\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 4,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 1\n },\n {\n \"id\": 2,\n \"count\": 1\n }\n ],\n \"fabs\": [\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 401,\n \"name\": \"\\u03b2 Flak Ammo\",\n \"desc\": \"Explodes into more bullets in flight.\",\n \"image\": \"item/ammo_b_flak\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 4,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 1\n },\n {\n \"id\": 2,\n \"count\": 1\n }\n ],\n \"fabs\": [\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 402,\n \"name\": \"\\u03b2 Sniper Ammo\",\n \"desc\": \"Speedy. Gains power from bouncing.\",\n \"image\": \"item/ammo_b_sniper\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 4,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 1\n },\n {\n \"id\": 2,\n \"count\": 1\n }\n ],\n \"fabs\": [\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 403,\n \"name\": \"\\u03b2 Punch Ammo\",\n \"desc\": \"Pushes objects away.\",\n \"image\": \"item/ammo_b_punch\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 4,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 1\n },\n {\n \"id\": 2,\n \"count\": 1\n }\n ],\n \"fabs\": []\n }\n },\n {\n \"id\": 404,\n \"name\": \"\\u03b2 Yank Ammo\",\n \"desc\": \"Pulls objects.\",\n \"image\": \"item/ammo_b_yank\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 4,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 1\n },\n {\n \"id\": 2,\n \"count\": 1\n }\n ],\n \"fabs\": []\n }\n },\n {\n \"id\": 405,\n \"name\": \"\\u03b2 Slug Ammo\",\n \"desc\": \"Slow bullet.\",\n \"image\": \"item/ammo_b_slug\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 4,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 1\n },\n {\n \"id\": 2,\n \"count\": 1\n }\n ],\n \"fabs\": [\n \"Munitions\"\n ]\n }\n }\n]);\n", "import {ITEM_SCHEMA} from \"../data/item-schema.js\";\n\nconst ITEM_TYPE_NAMES = new Map(ITEM_SCHEMA.map((item) => [Number(item.id), item.name]));\nconst ITEM_EQUIPMENT_SLOTS = new Map(ITEM_SCHEMA.flatMap((item) => {\n const slot = equipmentSlotFromDescription(item.desc);\n return slot ? [[Number(item.id), slot]] : [];\n}));\n\nfunction equipmentSlotFromDescription(description) {\n const match = String(description || \"\").match(/\\bEquipment \\((Head|Face|Body|Back|Hands|Feet)\\)/i);\n return match ? match[1].toLowerCase() : null;\n}\n\nexport function itemNameFromId(itemId) {\n return itemId == null ? null : ITEM_TYPE_NAMES.get(Number(itemId)) || null;\n}\n\nexport function itemEquipmentSlotFromId(itemId) {\n return itemId == null ? null : ITEM_EQUIPMENT_SLOTS.get(Number(itemId)) || null;\n}\n", "import {encoder} from \"../../constants.js\";\n\nfunction objectTag(value) {\n return Object.prototype.toString.call(value);\n}\n\nfunction isArrayBufferLike(value) {\n const tag = objectTag(value);\n return tag === \"[object ArrayBuffer]\" || tag === \"[object SharedArrayBuffer]\";\n}\n\nfunction toUint8Array(value) {\n if (value instanceof Uint8Array) return value;\n if (isArrayBufferLike(value)) return new Uint8Array(value);\n if (ArrayBuffer.isView(value)) {\n return new Uint8Array(value.buffer.slice(value.byteOffset, value.byteOffset + value.byteLength));\n }\n if (Array.isArray(value)) return Uint8Array.from(value);\n if (typeof value === \"string\") return encoder.encode(value);\n throw new Error(`Unsupported binary value: ${objectTag(value)}`);\n}\n\nfunction concatBytes(parts) {\n const total = parts.reduce((sum, part) => sum + part.length, 0);\n const out = new Uint8Array(total);\n let offset = 0;\n for (const part of parts) {\n out.set(part, offset);\n offset += part.length;\n }\n return out;\n}\n\nfunction valuesEqual(a, b) {\n if (a === b) return true;\n if (a == null || b == null) return a == null && b == null;\n if (typeof a !== \"object\" || typeof b !== \"object\") return false;\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) return false;\n for (const key of aKeys) {\n if (!valuesEqual(a[key], b[key])) return false;\n }\n return true;\n}\n\n\nexport {\n toUint8Array,\n concatBytes,\n valuesEqual\n};\n", "import {toUint8Array} from \"../protocol/codec/binary.js\";\n\n// Growable typed-array sink. LZ4 block headers carry the compressed size, not\n// the decompressed size, so the output buffer starts at a generous multiple and\n// doubles on demand rather than pushing into a plain array one byte at a time.\nfunction ensureCapacity(buffer, needed) {\n if (needed <= buffer.length) return buffer;\n let size = buffer.length || 64;\n while (size < needed) size *= 2;\n const grown = new Uint8Array(size);\n grown.set(buffer);\n return grown;\n}\n\nfunction decompressLz4Block(block) {\n let out = new Uint8Array(Math.max(64, block.length * 4));\n let len = 0;\n let pos = 0;\n\n while (pos < block.length) {\n const token = block[pos++];\n\n let literalLen = token >>> 4;\n if (literalLen === 15) {\n let b;\n do {\n if (pos >= block.length) throw new Error(\"truncated lz4 literal length\");\n b = block[pos++];\n literalLen += b;\n } while (b === 255);\n }\n\n if (pos + literalLen > block.length) throw new Error(\"truncated lz4 literals\");\n if (literalLen > 0) {\n out = ensureCapacity(out, len + literalLen);\n out.set(block.subarray(pos, pos + literalLen), len);\n len += literalLen;\n pos += literalLen;\n }\n\n if (pos >= block.length) break;\n if (pos + 2 > block.length) throw new Error(\"truncated lz4 offset\");\n const offset = block[pos] | (block[pos + 1] << 8);\n pos += 2;\n if (offset === 0 || offset > len) throw new Error(`invalid lz4 offset ${offset}`);\n\n let matchLen = token & 0x0f;\n if (matchLen === 15) {\n let b;\n do {\n if (pos >= block.length) throw new Error(\"truncated lz4 match length\");\n b = block[pos++];\n matchLen += b;\n } while (b === 255);\n }\n matchLen += 4;\n\n out = ensureCapacity(out, len + matchLen);\n // Matches may overlap the region being written, so copy byte by byte rather\n // than with copyWithin, which would read the pre-copy bytes.\n let from = len - offset;\n for (let i = 0; i < matchLen; i++) out[len++] = out[from++];\n }\n\n // Return a compact standalone array, matching the previous contract: callers\n // must not see a view over a larger backing buffer.\n return out.length === len ? out : out.slice(0, len);\n}\n\nfunction decompressLz4Frame(bytes) {\n const buf = toUint8Array(bytes);\n if (buf.length < 7) return buf;\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n if (view.getUint32(0, true) !== 0x184d2204) return buf;\n const flg = buf[4];\n let pos = 6;\n if (flg & 0x08) pos += 8;\n if (flg & 0x01) pos += 4;\n pos += 1;\n const chunks = [];\n let total = 0;\n while (pos + 4 <= buf.length) {\n const rawSize = view.getUint32(pos, true);\n pos += 4;\n if (rawSize === 0) break;\n const uncompressed = (rawSize & 0x80000000) !== 0;\n const size = rawSize & 0x7fffffff;\n if (pos + size > buf.length) throw new Error(\"truncated lz4 block\");\n const block = buf.subarray(pos, pos + size);\n const chunk = uncompressed ? block.slice() : decompressLz4Block(block);\n chunks.push(chunk);\n total += chunk.length;\n pos += size;\n if (flg & 0x10) pos += 4;\n }\n // Single-chunk frames are the common case and need no concatenation pass.\n if (chunks.length === 1) return chunks[0];\n if (chunks.length === 0) return new Uint8Array(0);\n const out = new Uint8Array(total);\n let offset = 0;\n for (const chunk of chunks) {\n out.set(chunk, offset);\n offset += chunk.length;\n }\n return out;\n}\n\n\nexport {\n decompressLz4Block,\n decompressLz4Frame\n};\n", "import {encoder, SHARED_CHACHA_MATERIAL} from \"../constants.js\";\nimport {toUint8Array} from \"../protocol/codec/binary.js\";\n\nfunction rotl32(x, n) {\n n &= 31;\n return ((x << n) | (x >>> (32 - n))) >>> 0;\n}\n\nfunction rotr32(x, n) {\n n &= 31;\n return ((x >>> n) | (x << (32 - n))) >>> 0;\n}\n\nfunction quarterRound(state, a, b, c, d) {\n state[a] = (state[a] + state[b]) >>> 0;\n state[d] ^= state[a];\n state[d] = rotl32(state[d], 16);\n state[c] = (state[c] + state[d]) >>> 0;\n state[b] ^= state[c];\n state[b] = rotl32(state[b], 12);\n state[a] = (state[a] + state[b]) >>> 0;\n state[d] ^= state[a];\n state[d] = rotl32(state[d], 8);\n state[c] = (state[c] + state[d]) >>> 0;\n state[b] ^= state[c];\n state[b] = rotl32(state[b], 7);\n}\n\n// Optional native backend. Node's OpenSSL exposes a raw `chacha20` stream cipher\n// whose keystream is identical to this implementation, and it is ~27x faster on\n// large payloads. It is installed by src/node.js rather than imported here so\n// that browser bundles never see a `node:crypto` specifier.\nlet nativeBlockCipher = null;\n\nfunction installNativeChaCha20(cipherFactory) {\n nativeBlockCipher = typeof cipherFactory === \"function\" ? cipherFactory : null;\n}\n\n// Native call overhead dominates below roughly this size; measured crossover is\n// near 150 bytes, so stay in JS for the small per-tick payloads.\nconst NATIVE_MIN_BYTES = 256;\n\n// Reused across blocks: the keystream words for one 64-byte block. Safe because\n// generation is synchronous and single-threaded.\nconst SCRATCH_BLOCK = new Uint32Array(16);\n\nfunction readLe32(bytes, offset) {\n return (bytes[offset] | (bytes[offset + 1] << 8) | (bytes[offset + 2] << 16) | (bytes[offset + 3] << 24)) >>> 0;\n}\n\n// Writes `length` keystream bytes into `out` starting at 0, XORing against\n// `source` when supplied. Keeping generation and XOR in one pass avoids\n// allocating a full second buffer for the keystream.\nfunction chacha20Into(out, key, nonce, length, source) {\n const k0 = readLe32(key, 0), k1 = readLe32(key, 4), k2 = readLe32(key, 8), k3 = readLe32(key, 12);\n const k4 = readLe32(key, 16), k5 = readLe32(key, 20), k6 = readLe32(key, 24), k7 = readLe32(key, 28);\n const n0 = readLe32(nonce, 0), n1 = readLe32(nonce, 4), n2 = readLe32(nonce, 8);\n\n let counter = 0;\n let offset = 0;\n const block = SCRATCH_BLOCK;\n\n while (offset < length) {\n let x0 = 0x61707865, x1 = 0x3320646e, x2 = 0x79622d32, x3 = 0x6b206574;\n let x4 = k0, x5 = k1, x6 = k2, x7 = k3;\n let x8 = k4, x9 = k5, x10 = k6, x11 = k7;\n let x12 = counter, x13 = n0, x14 = n1, x15 = n2;\n\n for (let i = 0; i < 10; i++) {\n // column rounds\n x0 = (x0 + x4) >>> 0;\n x12 ^= x0;\n x12 = (x12 << 16) | (x12 >>> 16);\n x8 = (x8 + x12) >>> 0;\n x4 ^= x8;\n x4 = (x4 << 12) | (x4 >>> 20);\n x0 = (x0 + x4) >>> 0;\n x12 ^= x0;\n x12 = (x12 << 8) | (x12 >>> 24);\n x8 = (x8 + x12) >>> 0;\n x4 ^= x8;\n x4 = (x4 << 7) | (x4 >>> 25);\n\n x1 = (x1 + x5) >>> 0;\n x13 ^= x1;\n x13 = (x13 << 16) | (x13 >>> 16);\n x9 = (x9 + x13) >>> 0;\n x5 ^= x9;\n x5 = (x5 << 12) | (x5 >>> 20);\n x1 = (x1 + x5) >>> 0;\n x13 ^= x1;\n x13 = (x13 << 8) | (x13 >>> 24);\n x9 = (x9 + x13) >>> 0;\n x5 ^= x9;\n x5 = (x5 << 7) | (x5 >>> 25);\n\n x2 = (x2 + x6) >>> 0;\n x14 ^= x2;\n x14 = (x14 << 16) | (x14 >>> 16);\n x10 = (x10 + x14) >>> 0;\n x6 ^= x10;\n x6 = (x6 << 12) | (x6 >>> 20);\n x2 = (x2 + x6) >>> 0;\n x14 ^= x2;\n x14 = (x14 << 8) | (x14 >>> 24);\n x10 = (x10 + x14) >>> 0;\n x6 ^= x10;\n x6 = (x6 << 7) | (x6 >>> 25);\n\n x3 = (x3 + x7) >>> 0;\n x15 ^= x3;\n x15 = (x15 << 16) | (x15 >>> 16);\n x11 = (x11 + x15) >>> 0;\n x7 ^= x11;\n x7 = (x7 << 12) | (x7 >>> 20);\n x3 = (x3 + x7) >>> 0;\n x15 ^= x3;\n x15 = (x15 << 8) | (x15 >>> 24);\n x11 = (x11 + x15) >>> 0;\n x7 ^= x11;\n x7 = (x7 << 7) | (x7 >>> 25);\n\n // diagonal rounds\n x0 = (x0 + x5) >>> 0;\n x15 ^= x0;\n x15 = (x15 << 16) | (x15 >>> 16);\n x10 = (x10 + x15) >>> 0;\n x5 ^= x10;\n x5 = (x5 << 12) | (x5 >>> 20);\n x0 = (x0 + x5) >>> 0;\n x15 ^= x0;\n x15 = (x15 << 8) | (x15 >>> 24);\n x10 = (x10 + x15) >>> 0;\n x5 ^= x10;\n x5 = (x5 << 7) | (x5 >>> 25);\n\n x1 = (x1 + x6) >>> 0;\n x12 ^= x1;\n x12 = (x12 << 16) | (x12 >>> 16);\n x11 = (x11 + x12) >>> 0;\n x6 ^= x11;\n x6 = (x6 << 12) | (x6 >>> 20);\n x1 = (x1 + x6) >>> 0;\n x12 ^= x1;\n x12 = (x12 << 8) | (x12 >>> 24);\n x11 = (x11 + x12) >>> 0;\n x6 ^= x11;\n x6 = (x6 << 7) | (x6 >>> 25);\n\n x2 = (x2 + x7) >>> 0;\n x13 ^= x2;\n x13 = (x13 << 16) | (x13 >>> 16);\n x8 = (x8 + x13) >>> 0;\n x7 ^= x8;\n x7 = (x7 << 12) | (x7 >>> 20);\n x2 = (x2 + x7) >>> 0;\n x13 ^= x2;\n x13 = (x13 << 8) | (x13 >>> 24);\n x8 = (x8 + x13) >>> 0;\n x7 ^= x8;\n x7 = (x7 << 7) | (x7 >>> 25);\n\n x3 = (x3 + x4) >>> 0;\n x14 ^= x3;\n x14 = (x14 << 16) | (x14 >>> 16);\n x9 = (x9 + x14) >>> 0;\n x4 ^= x9;\n x4 = (x4 << 12) | (x4 >>> 20);\n x3 = (x3 + x4) >>> 0;\n x14 ^= x3;\n x14 = (x14 << 8) | (x14 >>> 24);\n x9 = (x9 + x14) >>> 0;\n x4 ^= x9;\n x4 = (x4 << 7) | (x4 >>> 25);\n }\n\n block[0] = (x0 + 0x61707865) >>> 0;\n block[1] = (x1 + 0x3320646e) >>> 0;\n block[2] = (x2 + 0x79622d32) >>> 0;\n block[3] = (x3 + 0x6b206574) >>> 0;\n block[4] = (x4 + k0) >>> 0;\n block[5] = (x5 + k1) >>> 0;\n block[6] = (x6 + k2) >>> 0;\n block[7] = (x7 + k3) >>> 0;\n block[8] = (x8 + k4) >>> 0;\n block[9] = (x9 + k5) >>> 0;\n block[10] = (x10 + k6) >>> 0;\n block[11] = (x11 + k7) >>> 0;\n block[12] = (x12 + counter) >>> 0;\n block[13] = (x13 + n0) >>> 0;\n block[14] = (x14 + n1) >>> 0;\n block[15] = (x15 + n2) >>> 0;\n\n const remaining = length - offset;\n if (remaining >= 64) {\n if (source) {\n for (let w = 0; w < 16; w++) {\n const word = block[w];\n out[offset] = source[offset] ^ (word & 0xff);\n out[offset + 1] = source[offset + 1] ^ ((word >>> 8) & 0xff);\n out[offset + 2] = source[offset + 2] ^ ((word >>> 16) & 0xff);\n out[offset + 3] = source[offset + 3] ^ ((word >>> 24) & 0xff);\n offset += 4;\n }\n } else {\n for (let w = 0; w < 16; w++) {\n const word = block[w];\n out[offset] = word & 0xff;\n out[offset + 1] = (word >>> 8) & 0xff;\n out[offset + 2] = (word >>> 16) & 0xff;\n out[offset + 3] = (word >>> 24) & 0xff;\n offset += 4;\n }\n }\n } else {\n for (let i = 0; i < remaining; i++, offset++) {\n const stream = (block[i >> 2] >>> ((i & 3) * 8)) & 0xff;\n out[offset] = source ? source[offset] ^ stream : stream;\n }\n }\n counter++;\n }\n\n return out;\n}\n\nfunction chacha20(key, nonce, length) {\n const out = new Uint8Array(length);\n if (length <= 0) return out;\n if (nativeBlockCipher && length >= NATIVE_MIN_BYTES) {\n const native = nativeBlockCipher(key, nonce, out);\n if (native) return native;\n }\n return chacha20Into(out, key, nonce, length, null);\n}\n\n// XORs `data` with the keystream in a single pass, without materialising the\n// keystream in a separate buffer.\nfunction chacha20Xor(key, nonce, data) {\n const out = new Uint8Array(data.length);\n if (data.length === 0) return out;\n if (nativeBlockCipher && data.length >= NATIVE_MIN_BYTES) {\n const native = nativeBlockCipher(key, nonce, out, data);\n if (native) return native;\n }\n return chacha20Into(out, key, nonce, data.length, data);\n}\n\nfunction decryptPayload(wireBytes, worldId, seed) {\n const wire = toUint8Array(wireBytes);\n if (wire.length < 8) throw new Error(\"payload too short\");\n const view = new DataView(wire.buffer, wire.byteOffset, wire.byteLength);\n const packetWordA = view.getUint32(0, true);\n const packetWordB = view.getUint32(wire.length - 4, true);\n const material = Uint8Array.from(SHARED_CHACHA_MATERIAL);\n const worldKey = encoder.encode(`${worldId}${seed}`);\n for (let i = 0, l = 0, r = 0; i < 44; i++, l += 7, r += 11) {\n material[i] ^= worldKey[i % worldKey.length] ^ (rotl32(packetWordA, l) & 0xff) ^ (rotr32(packetWordB, r) & 0xff);\n }\n // subarray, not slice: the key and nonce are only read.\n const ciphertext = wire.subarray(4, wire.length - 4);\n return chacha20Xor(material.subarray(0, 32), material.subarray(32, 44), ciphertext);\n}\n\n\nexport {\n rotl32,\n rotr32,\n quarterRound,\n chacha20,\n chacha20Xor,\n decryptPayload,\n installNativeChaCha20\n};\n", "import {COMMAND_DEFAULT_FORMATS, COMMAND_FIELDS, decoder, encoder} from \"../../constants.js\";\nimport {concatBytes, toUint8Array, valuesEqual} from \"./binary.js\";\n\nfunction cloneDragValue(drag) {\n if (!drag || typeof drag !== \"object\") return null;\n return {\n source: Number(drag.source),\n target: Number(drag.target),\n split: Boolean(drag.split)\n };\n}\n\nfunction cloneCommand(command) {\n const out = {};\n for (const key of COMMAND_FIELDS) {\n out[key] = key === \"drag\" ? cloneDragValue(command[key]) : command[key];\n }\n return out;\n}\n\nfunction encodeStringBytes(text) {\n const bytes = encoder.encode(String(text));\n const length = bytes.length;\n if (length <= 31) {\n const out = new Uint8Array(1 + length);\n out[0] = 0xa0 | length;\n out.set(bytes, 1);\n return out;\n }\n if (length <= 0xff) {\n const out = new Uint8Array(2 + length);\n out[0] = 0xd9;\n out[1] = length;\n out.set(bytes, 2);\n return out;\n }\n const out = new Uint8Array(3 + length);\n out[0] = 0xda;\n out[1] = (length >>> 8) & 0xff;\n out[2] = length & 0xff;\n out.set(bytes, 3);\n return out;\n}\n\nfunction encodeNumberWithFormat(value, format) {\n const number = Number(value);\n switch (format) {\n case \"positive-fixint\":\n return Uint8Array.of(number & 0x7f);\n case \"negative-fixint\":\n return Uint8Array.of(number & 0xff);\n case \"uint8\":\n return Uint8Array.of(0xcc, number & 0xff);\n case \"uint16\":\n return Uint8Array.of(0xcd, (number >>> 8) & 0xff, number & 0xff);\n case \"uint32\":\n return Uint8Array.of(0xce, (number >>> 24) & 0xff, (number >>> 16) & 0xff, (number >>> 8) & 0xff, number & 0xff);\n case \"int8\":\n return Uint8Array.of(0xd0, number & 0xff);\n case \"int16\":\n return Uint8Array.of(0xd1, (number >> 8) & 0xff, number & 0xff);\n case \"int32\":\n return Uint8Array.of(0xd2, (number >> 24) & 0xff, (number >> 16) & 0xff, (number >> 8) & 0xff, number & 0xff);\n case \"float64\": {\n const out = new Uint8Array(9);\n out[0] = 0xcb;\n new DataView(out.buffer).setFloat64(1, number, false);\n return out;\n }\n case \"float32\":\n default: {\n const out = new Uint8Array(5);\n out[0] = 0xca;\n new DataView(out.buffer).setFloat32(1, number, false);\n return out;\n }\n }\n}\n\nfunction encodeMapHeader(length, originalHeaderBytes = null) {\n if (originalHeaderBytes && originalHeaderBytes.length > 0) return originalHeaderBytes;\n if (length <= 15) return Uint8Array.of(0x80 | length);\n return Uint8Array.of(0xde, (length >>> 8) & 0xff, length & 0xff);\n}\n\nfunction encodeValue(key, value, entry) {\n if (entry && valuesEqual(value, entry.valueNode.value)) return entry.valueNode.raw;\n if (value == null) return Uint8Array.of(0xc0);\n if (typeof value === \"boolean\") return Uint8Array.of(value ? 0xc3 : 0xc2);\n if (typeof value === \"number\") {\n const schemaFormat = COMMAND_DEFAULT_FORMATS[key];\n let format = schemaFormat && schemaFormat !== \"nil\" ? schemaFormat : null;\n if (!format) {\n if (!Number.isInteger(value)) format = \"float32\";\n else if (value >= 0) {\n if (value <= 0x7f) format = \"positive-fixint\";\n else if (value <= 0xff) format = \"uint8\";\n else if (value <= 0xffff) format = \"uint16\";\n else format = \"uint32\";\n } else if (value >= -32) format = \"negative-fixint\";\n else if (value >= -128) format = \"int8\";\n else if (value >= -32768) format = \"int16\";\n else format = \"int32\";\n }\n return encodeNumberWithFormat(value, format);\n }\n if (typeof value === \"string\") return encodeStringBytes(value);\n if (key === \"drag\" && typeof value === \"object\") {\n const sourceEntry = entry?.valueNode?.entries?.find((item) => String(item.key) === \"source\")?.valueNode;\n const targetEntry = entry?.valueNode?.entries?.find((item) => String(item.key) === \"target\")?.valueNode;\n return concatBytes([\n Uint8Array.of(0x83),\n encodeStringBytes(\"source\"),\n encodeNumberWithFormat(Number(value.source || 0), sourceEntry?.format || \"positive-fixint\"),\n encodeStringBytes(\"target\"),\n encodeNumberWithFormat(Number(value.target || 0), targetEntry?.format || \"positive-fixint\"),\n encodeStringBytes(\"split\"),\n Uint8Array.of(Boolean(value.split) ? 0xc3 : 0xc2)\n ]);\n }\n throw new Error(`Unsupported command field \"${key}\"`);\n}\n\nfunction decodeValue(bytes, offset = 0) {\n const head = bytes[offset++];\n if (head <= 0x7f) return {value: head, format: \"positive-fixint\", offset, raw: bytes.slice(offset - 1, offset)};\n if (head >= 0xe0) return {\n value: (head << 24) >> 24,\n format: \"negative-fixint\",\n offset,\n raw: bytes.slice(offset - 1, offset)\n };\n if ((head & 0xf0) === 0x80) {\n const count = head & 0x0f;\n const entries = [];\n const obj = {};\n for (let i = 0; i < count; i++) {\n const keyNode = decodeValue(bytes, offset);\n offset = keyNode.offset;\n const valueNode = decodeValue(bytes, offset);\n offset = valueNode.offset;\n entries.push({key: keyNode.value, keyNode, valueNode});\n obj[String(keyNode.value)] = valueNode.value;\n }\n return {\n value: obj,\n format: \"fixmap\",\n entries,\n headerBytes: bytes.slice(offset - 1 - (count * 2), offset),\n offset,\n raw: bytes.slice(offset - (offset - (offset - 1)), offset)\n };\n }\n if ((head & 0xf0) === 0x90) {\n const count = head & 0x0f;\n const items = [];\n for (let i = 0; i < count; i++) {\n const item = decodeValue(bytes, offset);\n offset = item.offset;\n items.push(item);\n }\n return {value: items.map((item) => item.value), format: \"fixarray\", items, offset, raw: bytes.slice(0, offset)};\n }\n if ((head & 0xe0) === 0xa0) {\n const len = head & 0x1f;\n const start = offset;\n const end = start + len;\n return {\n value: decoder.decode(bytes.slice(start, end)),\n format: \"fixstr\",\n offset: end,\n raw: bytes.slice(offset - 1, end)\n };\n }\n switch (head) {\n case 0xc0:\n return {value: null, format: \"nil\", offset, raw: bytes.slice(offset - 1, offset)};\n case 0xc2:\n return {value: false, format: \"bool\", offset, raw: bytes.slice(offset - 1, offset)};\n case 0xc3:\n return {value: true, format: \"bool\", offset, raw: bytes.slice(offset - 1, offset)};\n case 0xc4: {\n const len = bytes[offset++];\n const start = offset;\n const end = start + len;\n return {value: bytes.slice(start, end), format: \"bin8\", offset: end, raw: bytes.slice(start - 2, end)};\n }\n case 0xc5: {\n const len = (bytes[offset] << 8) | bytes[offset + 1];\n offset += 2;\n const start = offset;\n const end = start + len;\n return {value: bytes.slice(start, end), format: \"bin16\", offset: end, raw: bytes.slice(start - 3, end)};\n }\n case 0xc6: {\n const len = (bytes[offset] * 0x1000000) + ((bytes[offset + 1] << 16) | (bytes[offset + 2] << 8) | bytes[offset + 3]);\n offset += 4;\n const start = offset;\n const end = start + len;\n return {value: bytes.slice(start, end), format: \"bin32\", offset: end, raw: bytes.slice(start - 5, end)};\n }\n case 0xca:\n return {\n value: new DataView(bytes.buffer, bytes.byteOffset + offset, 4).getFloat32(0, false),\n format: \"float32\",\n offset: offset + 4,\n raw: bytes.slice(offset - 1, offset + 4)\n };\n case 0xcb:\n return {\n value: new DataView(bytes.buffer, bytes.byteOffset + offset, 8).getFloat64(0, false),\n format: \"float64\",\n offset: offset + 8,\n raw: bytes.slice(offset - 1, offset + 8)\n };\n case 0xcc:\n return {\n value: bytes[offset],\n format: \"uint8\",\n offset: offset + 1,\n raw: bytes.slice(offset - 1, offset + 1)\n };\n case 0xcd:\n return {\n value: (bytes[offset] << 8) | bytes[offset + 1],\n format: \"uint16\",\n offset: offset + 2,\n raw: bytes.slice(offset - 1, offset + 2)\n };\n case 0xce:\n return {\n value: (((bytes[offset] * 0x1000000) + ((bytes[offset + 1] << 16) | (bytes[offset + 2] << 8) | bytes[offset + 3])) >>> 0),\n format: \"uint32\",\n offset: offset + 4,\n raw: bytes.slice(offset - 1, offset + 4)\n };\n case 0xd0:\n return {\n value: (bytes[offset] << 24) >> 24,\n format: \"int8\",\n offset: offset + 1,\n raw: bytes.slice(offset - 1, offset + 1)\n };\n case 0xd1:\n return {\n value: new DataView(bytes.buffer, bytes.byteOffset + offset, 2).getInt16(0, false),\n format: \"int16\",\n offset: offset + 2,\n raw: bytes.slice(offset - 1, offset + 2)\n };\n case 0xd2:\n return {\n value: new DataView(bytes.buffer, bytes.byteOffset + offset, 4).getInt32(0, false),\n format: \"int32\",\n offset: offset + 4,\n raw: bytes.slice(offset - 1, offset + 4)\n };\n case 0xd9: {\n const len = bytes[offset++];\n const start = offset;\n const end = start + len;\n return {\n value: decoder.decode(bytes.slice(start, end)),\n format: \"str8\",\n offset: end,\n raw: bytes.slice(start - 2, end)\n };\n }\n case 0xda: {\n const len = (bytes[offset] << 8) | bytes[offset + 1];\n offset += 2;\n const start = offset;\n const end = start + len;\n return {\n value: decoder.decode(bytes.slice(start, end)),\n format: \"str16\",\n offset: end,\n raw: bytes.slice(start - 3, end)\n };\n }\n case 0xdc: {\n const count = (bytes[offset] << 8) | bytes[offset + 1];\n offset += 2;\n const items = [];\n for (let i = 0; i < count; i++) {\n const item = decodeValue(bytes, offset);\n offset = item.offset;\n items.push(item);\n }\n return {\n value: items.map((item) => item.value),\n format: \"array16\",\n items,\n offset,\n raw: bytes.slice(0, offset)\n };\n }\n case 0xde: {\n const count = (bytes[offset] << 8) | bytes[offset + 1];\n offset += 2;\n const entries = [];\n const obj = {};\n for (let i = 0; i < count; i++) {\n const keyNode = decodeValue(bytes, offset);\n offset = keyNode.offset;\n const valueNode = decodeValue(bytes, offset);\n offset = valueNode.offset;\n entries.push({key: keyNode.value, keyNode, valueNode});\n obj[String(keyNode.value)] = valueNode.value;\n }\n return {value: obj, format: \"map16\", entries, offset, raw: bytes.slice(0, offset)};\n }\n default:\n throw new Error(`Unsupported msgpack token 0x${head.toString(16)}`);\n }\n}\n\n// Value-only decoder used for all inbound traffic.\n//\n// `decodeValue` above annotates every node with its `raw` byte slice and format\n// so outgoing commands can be re-encoded byte-for-byte. Containers slice from\n// the start of the buffer, which makes decoding quadratic in packet size, and\n// `decodeMsgpack` discarded all of it. This path allocates only the decoded\n// values. The annotated decoder stays exported for the command-signing path and\n// external tooling.\nlet cursor = 0;\n\nfunction readFast(bytes) {\n const head = bytes[cursor++];\n\n if (head <= 0x7f) return head;\n if (head >= 0xe0) return (head << 24) >> 24;\n\n if ((head & 0xf0) === 0x80) return readMapFast(bytes, head & 0x0f);\n if ((head & 0xf0) === 0x90) return readArrayFast(bytes, head & 0x0f);\n if ((head & 0xe0) === 0xa0) return readStrFast(bytes, head & 0x1f);\n\n switch (head) {\n case 0xc0:\n return null;\n case 0xc2:\n return false;\n case 0xc3:\n return true;\n case 0xc4:\n return readBinFast(bytes, bytes[cursor++]);\n case 0xc5: {\n const len = (bytes[cursor] << 8) | bytes[cursor + 1];\n cursor += 2;\n return readBinFast(bytes, len);\n }\n case 0xc6: {\n const len = (bytes[cursor] * 0x1000000) + ((bytes[cursor + 1] << 16) | (bytes[cursor + 2] << 8) | bytes[cursor + 3]);\n cursor += 4;\n return readBinFast(bytes, len);\n }\n case 0xca: {\n const value = new DataView(bytes.buffer, bytes.byteOffset + cursor, 4).getFloat32(0, false);\n cursor += 4;\n return value;\n }\n case 0xcb: {\n const value = new DataView(bytes.buffer, bytes.byteOffset + cursor, 8).getFloat64(0, false);\n cursor += 8;\n return value;\n }\n case 0xcc:\n return bytes[cursor++];\n case 0xcd: {\n const value = (bytes[cursor] << 8) | bytes[cursor + 1];\n cursor += 2;\n return value;\n }\n case 0xce: {\n const value = (((bytes[cursor] * 0x1000000) + ((bytes[cursor + 1] << 16) | (bytes[cursor + 2] << 8) | bytes[cursor + 3])) >>> 0);\n cursor += 4;\n return value;\n }\n case 0xd0:\n return (bytes[cursor++] << 24) >> 24;\n case 0xd1: {\n const value = ((((bytes[cursor] << 8) | bytes[cursor + 1]) << 16) >> 16);\n cursor += 2;\n return value;\n }\n case 0xd2: {\n const value = ((bytes[cursor] << 24) | (bytes[cursor + 1] << 16) | (bytes[cursor + 2] << 8) | bytes[cursor + 3]) | 0;\n cursor += 4;\n return value;\n }\n case 0xd9:\n return readStrFast(bytes, bytes[cursor++]);\n case 0xda: {\n const len = (bytes[cursor] << 8) | bytes[cursor + 1];\n cursor += 2;\n return readStrFast(bytes, len);\n }\n case 0xdc: {\n const count = (bytes[cursor] << 8) | bytes[cursor + 1];\n cursor += 2;\n return readArrayFast(bytes, count);\n }\n case 0xde: {\n const count = (bytes[cursor] << 8) | bytes[cursor + 1];\n cursor += 2;\n return readMapFast(bytes, count);\n }\n default:\n throw new Error(`Unsupported msgpack token 0x${head.toString(16)}`);\n }\n}\n\nfunction readStrFast(bytes, len) {\n const start = cursor;\n cursor += len;\n // subarray, not slice: TextDecoder copies into the result string anyway.\n return decoder.decode(bytes.subarray(start, cursor));\n}\n\nfunction readBinFast(bytes, len) {\n const start = cursor;\n cursor += len;\n // slice, not subarray: callers retain these payloads past the socket buffer.\n return bytes.slice(start, cursor);\n}\n\nfunction readArrayFast(bytes, count) {\n const items = new Array(count);\n for (let i = 0; i < count; i++) items[i] = readFast(bytes);\n return items;\n}\n\nfunction readMapFast(bytes, count) {\n const obj = {};\n for (let i = 0; i < count; i++) {\n const key = readFast(bytes);\n obj[typeof key === \"string\" ? key : String(key)] = readFast(bytes);\n }\n return obj;\n}\n\nfunction decodeMsgpack(bytes) {\n const input = toUint8Array(bytes);\n cursor = 0;\n return readFast(input);\n}\n\n// Growable output buffer. The recursive encoder used to build an array of small\n// Uint8Array fragments per value and concatenate them at every nesting level.\nclass MsgpackWriter {\n constructor(capacity = 256) {\n this.bytes = new Uint8Array(capacity);\n this.length = 0;\n }\n\n #reserve(extra) {\n const needed = this.length + extra;\n if (needed <= this.bytes.length) return;\n let size = this.bytes.length || 64;\n while (size < needed) size *= 2;\n const grown = new Uint8Array(size);\n grown.set(this.bytes.subarray(0, this.length));\n this.bytes = grown;\n }\n\n byte(value) {\n this.#reserve(1);\n this.bytes[this.length++] = value & 0xff;\n return this;\n }\n\n raw(chunk) {\n this.#reserve(chunk.length);\n this.bytes.set(chunk, this.length);\n this.length += chunk.length;\n return this;\n }\n\n result() {\n return this.bytes.slice(0, this.length);\n }\n}\n\nfunction writeMsgpack(writer, value) {\n if (value == null) return writer.byte(0xc0);\n if (typeof value === \"boolean\") return writer.byte(value ? 0xc3 : 0xc2);\n if (typeof value === \"number\") return writer.raw(encodeMsgpackNumber(value));\n if (typeof value === \"string\") return writer.raw(encodeStringBytes(value));\n\n if (value instanceof Uint8Array || value instanceof ArrayBuffer || ArrayBuffer.isView(value)) {\n const bytes = toUint8Array(value);\n if (bytes.length <= 0xff) writer.byte(0xc4).byte(bytes.length);\n else if (bytes.length <= 0xffff) writer.byte(0xc5).byte(bytes.length >>> 8).byte(bytes.length);\n else writer.byte(0xc6).byte(bytes.length >>> 24).byte(bytes.length >>> 16).byte(bytes.length >>> 8).byte(bytes.length);\n return writer.raw(bytes);\n }\n\n if (Array.isArray(value)) {\n const len = value.length;\n if (len <= 15) writer.byte(0x90 | len);\n else writer.byte(0xdc).byte(len >>> 8).byte(len);\n for (const item of value) writeMsgpack(writer, item);\n return writer;\n }\n\n if (typeof value === \"object\") {\n const entries = Object.entries(value);\n if (entries.length <= 15) writer.byte(0x80 | entries.length);\n else writer.byte(0xde).byte(entries.length >>> 8).byte(entries.length);\n for (const [key, val] of entries) {\n writer.raw(encodeStringBytes(key));\n writeMsgpack(writer, val);\n }\n return writer;\n }\n\n throw new Error(`Unsupported msgpack value: ${typeof value}`);\n}\n\nfunction encodeMsgpackNumber(value) {\n if (!Number.isInteger(value)) return encodeNumberWithFormat(value, \"float32\");\n if (value >= 0) {\n if (value <= 0x7f) return encodeNumberWithFormat(value, \"positive-fixint\");\n if (value <= 0xff) return encodeNumberWithFormat(value, \"uint8\");\n if (value <= 0xffff) return encodeNumberWithFormat(value, \"uint16\");\n return encodeNumberWithFormat(value, \"uint32\");\n }\n if (value >= -32) return encodeNumberWithFormat(value, \"negative-fixint\");\n if (value >= -128) return encodeNumberWithFormat(value, \"int8\");\n if (value >= -32768) return encodeNumberWithFormat(value, \"int16\");\n return encodeNumberWithFormat(value, \"int32\");\n}\n\nfunction encodeMsgpack(value) {\n // Scalars need no buffer at all.\n if (value == null) return Uint8Array.of(0xc0);\n if (typeof value === \"boolean\") return Uint8Array.of(value ? 0xc3 : 0xc2);\n if (typeof value === \"number\") return encodeMsgpackNumber(value);\n if (typeof value === \"string\") return encodeStringBytes(value);\n const writer = new MsgpackWriter();\n writeMsgpack(writer, value);\n return writer.result();\n}\n\nexport {\n cloneDragValue,\n cloneCommand,\n encodeStringBytes,\n encodeNumberWithFormat,\n encodeMapHeader,\n encodeValue,\n decodeValue,\n decodeMsgpack,\n encodeMsgpack\n};\n", "import {decompressLz4Frame} from \"../../compression/lz4.js\";\nimport {decryptPayload} from \"../../crypto/chacha.js\";\nimport {decodeMsgpack} from \"../codec/msgpack.js\";\n\nexport function decodeWorldPayload(data, worldId, seed) {\n if (!data || seed == null) return null;\n try {\n return decodeMsgpack(decryptPayload(data, worldId, seed));\n } catch (_) {\n return null;\n }\n}\n\nexport function decodeModelPayload(data, worldId, seed) {\n if (!data || seed == null) throw new Error(\"Encrypted model payload requires a world seed\");\n return decryptPayload(data, worldId, seed);\n}\n\nexport function decompressWorldChunk(data) {\n return decompressLz4Frame(data);\n}\n", "import {decoder} from \"../../constants.js\";\nimport {\n LOADER_FILTER_MODE_NAMES,\n LOADER_POSITION_NAMES,\n LOADER_PRIORITY_NAMES,\n LoaderConfigTracker\n} from \"./loader-config.js\";\nimport {navigationDestinationFromEncodedValue, navigationZoneFromBaseId} from \"../overworld.js\";\nimport {maybeSolveGeneratorMazeSeed} from \"../generator-maze.js\";\nimport {itemNameFromId} from \"../items.js\";\nimport {ModelReader} from \"./reader.js\";\n\nexport {ModelReader} from \"./reader.js\";\n\nexport function defineLazyProperty(target, key, compute) {\n let cached = null;\n let resolved = false;\n Object.defineProperty(target, key, {\n enumerable: true,\n configurable: true,\n get() {\n if (!resolved) {\n cached = compute();\n resolved = true;\n }\n return cached;\n },\n set(value) {\n cached = value;\n resolved = true;\n }\n });\n return target;\n}\n\n// string on every field of every record while decoding.\nexport function numericFields(bitsToOffsets) {\n return Object.entries(bitsToOffsets)\n .map(([bit, offset]) => ({bit: Number(bit), offset, key: qKey(offset)}))\n .sort((a, b) => a.bit - b.bit);\n}\n\nexport const TWO_FIELD_SPEC = {\n fields: numericFields({1: 20, 2: 24})\n};\n\nexport const LABEL_STATE_SPEC = {\n name: \"label_state\",\n read(reader, record, mask) {\n if (mask & 1) record.blob20 = reader.readBlob();\n if (mask & 2) {\n if (mask & 1) record.blob24 = reader.readBlob();\n else record.q20 = (record.q20 || 0) + reader.readFieldDelta();\n }\n if (mask & 4) record.q28 = (record.q28 || 0) + reader.readFieldDelta();\n if (mask & 8) {\n if (mask & 1) record.q32 = (record.q32 || 0) + reader.readFieldDelta();\n else record.blob28 = reader.readBlob();\n }\n if (mask & 16) record.q36 = (record.q36 || 0) + reader.readFieldDelta();\n }\n};\n\nexport const SIMPLE_LABEL_STATE_SPEC = {\n name: \"label_state\",\n read(reader, record, mask) {\n if (mask & 1) record.blob20 = reader.readBlob();\n if (mask & 2) record.q24 = (record.q24 || 0) + reader.readFieldDelta();\n if (mask & 4) record.q28 = (record.q28 || 0) + reader.readFieldDelta();\n if (mask & 8) record.q32 = (record.q32 || 0) + reader.readFieldDelta();\n if (mask & 16) record.q36 = (record.q36 || 0) + reader.readFieldDelta();\n }\n};\n\nexport function peekStreamInt(reader) {\n let result = 0;\n let shift = 0;\n let offset = reader.offset;\n while (offset < reader.bytes.length) {\n const byte = reader.bytes[offset++];\n result += (byte & 0x7f) * (2 ** shift);\n if ((byte & 0x80) === 0) {\n return {\n value: (result & 1) === 0 ? result / 2 : -((result + 1) / 2),\n offset\n };\n }\n shift += 7;\n if (shift > 53) return null;\n }\n return null;\n}\n\nexport function nextValueLooksLikeTextBlob(reader) {\n const peek = peekStreamInt(reader);\n if (!peek || peek.value <= 0) return false;\n const end = peek.offset + peek.value;\n if (end > reader.bytes.length) return false;\n const blob = reader.bytes.slice(peek.offset, end);\n try {\n const text = decoder.decode(blob);\n return text.length > 0 && !/[\\u0000-\\u0008\\u000e-\\u001f]/.test(text);\n } catch (_) {\n return false;\n }\n}\n\nexport const MODEL_TABLE_SPECS = new Map([\n [0, {\n name: \"transform\",\n packedBits: [{bit: 8, offset: 33}, {bit: 16, offset: 34}, {bit: 32, offset: 35}],\n fields: numericFields({1: 20, 2: 24, 4: 28}),\n scale(record) {\n return {\n x: numberOrNull(record.q20, 40),\n y: numberOrNull(record.q24, 40),\n rot: numberOrNull(record.q28, 127.324)\n };\n }\n }],\n [1, {\n name: \"body_state\",\n fields: numericFields({\n 1: 20, 2: 24, 4: 28, 8: 32, 16: 36, 32: 40, 64: 44, 128: 48,\n 256: 52, 512: 56, 1024: 60, 2048: 64, 4096: 68, 8192: 72,\n 16384: 76, 32768: 80, 65536: 84, 131072: 88, 262144: 92,\n 524288: 96, 1048576: 100, 2097152: 104\n })\n }],\n [2, {name: \"numeric_pair\", ...TWO_FIELD_SPEC}],\n [3, {name: \"gate_width\", fields: numericFields({1: 20, 2: 24, 4: 28, 8: 32, 16: 36, 32: 40})}],\n [4, {name: \"motion_aux\", packedBits: [{bit: 8, offset: 33}], fields: numericFields({1: 20, 2: 24, 4: 28})}],\n [5, {name: \"entity_health\", fields: numericFields({1: 20, 2: 24, 4: 28, 8: 32})}],\n [6, {name: \"item_holder\", ...TWO_FIELD_SPEC}],\n [7, {\n name: \"entity_type\",\n fields: numericFields({1: 20, 2: 24, 4: 28, 8: 32, 16: 36, 32: 40, 64: 44, 128: 48, 256: 52})\n }],\n [8, {name: \"numeric_sparse\", fields: numericFields({1: 20, 2: 24, 4: 28, 8: 32, 16: 36, 32: 40})}],\n [9, LABEL_STATE_SPEC],\n [10, SIMPLE_LABEL_STATE_SPEC],\n [11, {name: \"numeric_sparse\", fields: numericFields({1: 20, 2: 24, 4: 28, 8: 32, 16: 36})}],\n [12, {name: \"numeric_sparse\", fields: numericFields({1: 20, 2: 24, 4: 28, 8: 32})}],\n [14, {name: \"size_state\", fields: numericFields({1: 20, 2: 24, 4: 28, 8: 32, 16: 36, 32: 40, 64: 44})}],\n [16, {\n name: \"label_numeric_state\",\n read(reader, record, mask) {\n if ((mask & 1) && nextValueLooksLikeTextBlob(reader)) {\n SIMPLE_LABEL_STATE_SPEC.read(reader, record, mask);\n return;\n }\n if (mask & 1) record.q20 = (record.q20 || 0) + reader.readFieldDelta();\n if (mask & 2) {\n if (mask & 1) record.blob24 = reader.readBlob();\n else record.q24 = (record.q24 || 0) + reader.readFieldDelta();\n }\n if (mask & 4) record.q28 = (record.q28 || 0) + reader.readFieldDelta();\n if (mask & 8) record.q32 = (record.q32 || 0) + reader.readFieldDelta();\n if (mask & 16) record.q36 = (record.q36 || 0) + reader.readFieldDelta();\n }\n }],\n [17, {name: \"numeric_sparse\", fields: numericFields({1: 20, 2: 24, 4: 28, 8: 32, 16: 36})}],\n [18, {\n name: \"mob_combat_state\",\n fields: numericFields({\n 2: 20,\n 4: 24,\n 8: 28,\n 16: 32,\n 32: 36,\n 64: 40,\n 128: 44,\n 256: 48,\n 512: 52,\n 1024: 56,\n 2048: 60,\n 4096: 64,\n 8192: 68,\n 16384: 72,\n 32768: 76,\n 65536: 80,\n 131072: 84,\n 524288: 88,\n 4194304: 92\n })\n }],\n [19, {name: \"motion_state\", packedBits: [{bit: 4, offset: 29}], ...TWO_FIELD_SPEC}],\n [20, {\n name: \"ship_control\",\n packedBeforeValues: true,\n orderedValues: true,\n packedBits: [{bit: 0x1000, offset: 153}],\n fields: numericFields({\n 1: 20, 2: 24, 4: 28, 32: 32, 64: 36, 128: 40, 256: 44, 512: 48,\n 1024: 52, 2048: 56, 8192: 60, 16384: 64, 32768: 68, 65536: 72,\n 131072: 76, 262144: 80, 524288: 84, 1048576: 88, 2097152: 92,\n 4194304: 96, 8388608: 100, 16777216: 104, 67108864: 108, 134217728: 112\n }),\n blobs: [\n {bit: 8, offset: 116},\n {bit: 16, offset: 128},\n {bit: 33554432, offset: 140}\n ],\n scale(record) {\n return {\n thrustX: numberOrNull(record.q24, 20),\n thrustY: numberOrNull(record.q28, 20),\n value52: numberOrNull(record.q52, 20)\n };\n }\n }],\n [21, {\n name: \"gate_portal\",\n orderedValues: true,\n fields: numericFields({1: 20, 2: 24}),\n blobs: [{bit: 4, offset: 28}, {bit: 8, offset: 40}]\n }],\n [24, {name: \"projectile_state\", packedBits: [{bit: 8, offset: 33}], fields: numericFields({1: 20, 2: 24, 4: 28})}],\n [25, {\n name: \"zone_label\",\n orderedValues: true,\n fields: numericFields({1: 20, 2: 24}),\n blobs: [{bit: 4, offset: 28}, {bit: 8, offset: 40}]\n }],\n [26, {name: \"numeric_single\", fields: numericFields({1: 20})}],\n [31, {name: \"numeric_single\", fields: numericFields({1: 20})}],\n [37, {name: \"loose_item_marker\", packedBits: [{bit: 2, offset: 29}], fields: numericFields({1: 20, 4: 24})}],\n [38, {name: \"flag_state\", packedBits: [{bit: 1, offset: 21}], fields: []}],\n [39, {name: \"comms_transmit\", ...TWO_FIELD_SPEC}],\n [41, {name: \"blob_state\", fields: numericFields({2: 20}), blobs: [{bit: 1, offset: 24}]}],\n [42, {name: \"numeric_pair\", ...TWO_FIELD_SPEC}],\n [43, {name: \"numeric_single\", fields: numericFields({1: 20})}],\n [44, {name: \"numeric_sparse\", fields: numericFields({1: 20, 2: 24, 4: 28, 8: 32})}],\n [45, {name: \"numeric_flag\", packedBits: [{bit: 1, offset: 25}], fields: numericFields({2: 20})}],\n [47, {name: \"flag_state\", packedBits: [{bit: 1, offset: 21}], fields: []}],\n [49, {name: \"processor_cycle\", packedBits: [{bit: 2, offset: 33}], fields: numericFields({1: 20, 4: 24, 8: 28})}],\n [50, {\n name: \"rare_snapshot\",\n packedBits: [{bit: 2, offset: 33}, {bit: 8, offset: 34}, {bit: 32, offset: 35}],\n fields: numericFields({1: 20, 4: 24, 16: 28})\n }],\n [51, {\n name: \"numeric_sparse\",\n fields: numericFields({1: 20, 2: 24, 4: 28, 8: 32, 16: 36, 32: 40, 64: 44, 128: 48, 256: 52})\n }],\n [53, {\n name: \"fabricator\",\n packedBits: [{bit: 2, offset: 61}],\n fields: numericFields({1: 20, 4: 24, 8: 28, 16: 32, 32: 36, 64: 40, 128: 44, 256: 48, 512: 52, 1024: 56})\n }],\n [54, {\n name: \"starter_cannon\",\n fields: numericFields({1: 20, 2: 32, 4: 24, 8: 28, 16: 44, 32: 36, 64: 48, 128: 52, 256: 40, 512: 56, 1024: 60})\n }],\n [55, {\n name: \"player\",\n packedBeforeValues: true,\n fields: numericFields({\n 256: 20, 512: 24, 1024: 28, 2048: 32, 4096: 36, 8192: 40,\n 16384: 44, 32768: 48, 65536: 52, 131072: 56, 262144: 60,\n 524288: 64, 1048576: 68, 2097152: 72, 4194304: 76, 8388608: 80,\n 33554432: 84, 67108864: 88\n }),\n blobs: [{bit: 1, offset: 92}],\n packedBits: [\n {bit: 2, offset: 105},\n {bit: 4, offset: 106},\n {bit: 16, offset: 107},\n {bit: 32, offset: 108},\n {bit: 64, offset: 109},\n {bit: 128, offset: 110},\n {bit: 16777216, offset: 111},\n {bit: 134217728, offset: 112}\n ]\n }],\n [56, {\n name: \"numeric_snapshot\",\n fields: numericFields({1: 20, 2: 24, 4: 28, 8: 32, 16: 36, 64: 40, 256: 44, 1024: 48})\n }],\n [59, {name: \"numeric_sparse\", fields: numericFields({1: 20, 2: 24, 4: 28, 8: 32, 16: 36})}],\n [60, {name: \"fluid_tank\", packedBits: [{bit: 4, offset: 29}], ...TWO_FIELD_SPEC}],\n [61, {name: \"shield_charge\", ...TWO_FIELD_SPEC}],\n [62, {name: \"flag_state\", packedBits: [{bit: 1, offset: 21}], fields: []}],\n [63, {name: \"numeric_pair\", ...TWO_FIELD_SPEC}],\n [67, {name: \"numeric_single\", fields: numericFields({1: 20})}],\n [69, {\n name: \"rare_snapshot\",\n packedBits: [{bit: 32, offset: 41}, {bit: 64, offset: 42}],\n fields: numericFields({1: 20, 2: 24, 4: 28, 8: 32, 16: 36})\n }],\n [70, {\n name: \"rare_snapshot\",\n packedBits: [{bit: 16, offset: 40}],\n fields: numericFields({1: 20, 2: 24, 4: 28, 8: 32, 32: 36})\n }],\n [72, {\n name: \"pusher_config\",\n packedBits: [{bit: 16, offset: 36}],\n fields: numericFields({1: 20, 2: 24, 4: 28, 8: 32, 32: 40})\n }],\n [73, {name: \"expando_box_marker\", fields: []}],\n [74, {name: \"processor_marker\", fields: []}],\n [75, {name: \"rare_snapshot\", fields: numericFields({1: 20, 8: 24, 16: 28})}],\n [76, {name: \"numeric_single\", fields: numericFields({1: 20})}],\n [77, {name: \"numeric_sparse\", fields: numericFields({1: 20, 2: 24, 4: 28})}],\n [78, {\n name: \"local_session_marker\",\n read(reader, record, mask) {\n for (const {bit, key} of TABLE_78_NUMERIC_FIELDS) {\n if (!(mask & bit)) continue;\n record[key] = (record[key] || 0) + reader.readFieldDelta();\n }\n if ((mask & 64) && !(mask & 32)) {\n record.q44 = (record.q44 || 0) + reader.readFieldDelta();\n }\n }\n }]\n]);\n\n// Precompute everything about a spec that is fixed at module load. Decoding a\n// full model packet runs #applyRecordSpec thousands of times, and each run used\n// to rebuild record key strings and -- for ordered specs -- an entire merged,\n// sorted item array.\nfor (const spec of MODEL_TABLE_SPECS.values()) {\n for (const blob of spec.blobs || []) blob.key = blobKey(blob.offset);\n for (const item of spec.packedBits || []) item.key = qKey(item.offset);\n if (spec.packedOffsets) spec.packedOffsetKeys = spec.packedOffsets.map(qKey);\n if (spec.orderedValues) {\n spec.orderedItems = [\n ...(spec.blobs || []).map((item) => ({bit: item.bit, offset: item.offset, key: item.key, kind: \"blob\"})),\n ...(spec.fields || []).map((item) => ({bit: item.bit, offset: item.offset, key: item.key, kind: \"field\"}))\n ].sort((a, b) => a.bit - b.bit);\n }\n}\n\nexport const TABLE_78_NUMERIC_FIELDS = numericFields({1: 20, 2: 24, 4: 28, 8: 32, 16: 36, 32: 40});\n\nexport const WIRE_TAG_TABLES = new Map([\n [1, 0],\n [2, 1],\n [3, 2],\n [4, 3],\n [5, 4],\n [26, 9],\n [40, 5],\n [42, 6],\n [43, 7],\n [44, 8],\n [45, 9],\n [46, 10],\n [47, 11],\n [48, 12],\n [49, 13],\n [50, 14],\n [51, 51],\n [52, 16],\n [74, 17],\n [80, 17],\n [81, 18],\n [82, 19],\n [83, 20],\n [84, 21],\n [85, 22],\n [86, 23],\n [87, 24],\n [88, 25],\n [89, 26],\n [90, 27],\n [91, 28],\n [93, 30],\n [94, 31],\n [95, 32],\n [99, 36],\n [120, 37],\n [121, 38],\n [122, 39],\n [123, 40],\n [124, 41],\n [125, 42],\n [126, 43],\n [127, 44],\n [128, 45],\n [129, 46],\n [130, 47],\n [131, 48],\n [132, 49],\n [133, 50],\n [134, 51],\n [135, 52],\n [136, 53],\n [137, 54],\n [138, 55],\n [139, 56],\n [141, 58],\n [142, 59],\n [143, 60],\n [144, 61],\n [145, 62],\n [146, 63],\n [147, 64],\n [148, 65],\n [149, 66],\n [150, 67],\n [151, 68],\n [152, 69],\n [153, 70],\n [158, 75],\n [160, 76],\n [161, 77],\n [162, 78],\n [163, 72],\n [164, 73],\n [165, 74],\n [166, 75],\n [167, 76],\n [168, 78],\n [169, 77]\n]);\n\nexport const MASK_ONLY_TABLES = new Set([13, 22, 23, 27, 28, 30, 32, 36, 40, 46, 48, 52, 58, 64, 65, 66, 68, 73, 74]);\n\nexport const ENTITY_FOOTPRINTS = new Map([\n [240, {width: 2, height: 2}],\n [247, {width: 2, height: 2}],\n [248, {width: 2, height: 2}],\n [249, {width: 2, height: 2}],\n [251, {width: 2, height: 2}],\n [256, {width: 2, height: 2}],\n [261, {width: 2, height: 2}]\n]);\n\nexport const PLACED_ENTITY_TYPE_IDS = new Set([\n 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 226, 227, 228, 229,\n 230, 231, 240, 241, 242, 243, 245, 246, 247, 248, 249, 250, 251, 252,\n 253, 255, 256, 257, 258, 259, 260, 261, 263, 264, 265\n]);\n\nexport const FabricatorType = Object.freeze({\n Starter: \"starter\",\n Munitions: \"munitions\",\n Engineering: \"engineering\",\n Equipment: \"equipment\"\n});\n\nexport const FABRICATOR_TYPES = new Map([\n [0, FabricatorType.Starter],\n [1, FabricatorType.Munitions],\n [2, FabricatorType.Engineering],\n [3, FabricatorType.Equipment]\n]);\n\nexport const HELM_TYPE_IDS = new Set([215, 216]);\nexport const COMMS_STATION_TYPE_ID = 217;\nexport const COMMS_STATION_MAX_CHARGES = 5;\nexport const CARGO_HATCH_TYPE_IDS = new Set([221, 222]);\nexport const THRUSTER_TYPE_IDS = new Set([230, 231]);\nexport const EXPANDO_BOX_TYPE_ID = 240;\nexport const ITEM_LAUNCHER_TYPE_ID = 243;\nexport const LOADER_TYPE_ID = 252;\nexport const NAVIGATION_UNIT_TYPE_ID = 261;\n\nexport function entityTypeIdFromRecord(record) {\n if (!record) return null;\n const candidates = [\n record.q20,\n record.q24,\n record.q28,\n record.q32,\n record.q36,\n record.q40,\n record.q44,\n record.q48,\n record.q52\n ].filter((value) => Number.isFinite(Number(value)) && Number(value) !== 0).map(Number);\n return candidates.find((value) => PLACED_ENTITY_TYPE_IDS.has(value)) ?? candidates[0] ?? null;\n}\n\nexport const CANNON_AMMO_COLOR_ITEM_IDS = new Map([\n [0xff9600, 150]\n]);\n\nexport const CANNON_TYPE_IDS = new Set([226, 227, 228, 229, 263, 265]);\n\nexport const THRUSTER_FACING_NAMES = new Map([\n [0, \"bottom\"],\n [1, \"top\"],\n [2, \"right\"],\n [3, \"left\"],\n [4, \"bottom-right\"],\n [5, \"bottom-left\"],\n [6, \"top-right\"],\n [7, \"top-left\"]\n]);\n\nexport const DEFAULT_OVERWORLD_WARP_DURATION_SECONDS = 120;\nexport const OVERWORLD_WARP_TICKS_PER_SECOND = 20;\n\nexport const MARKER_TYPE_IDS = new Map([\n [73, 240]\n]);\n\nexport const TEAM_RANK_NAMES = new Map([\n [0, \"Guest\"],\n [1, \"Crew\"],\n [2, \"CrewInvitePending_DEPRECATED\"],\n [3, \"Captain\"],\n [4, \"Banned\"]\n]);\n\nexport const PLAYER_SHIP_RANKS = new Map([\n [0, \"guest\"],\n [1, \"crew\"],\n [2, \"crew-invite-pending-deprecated\"],\n [3, \"captain\"],\n [4, \"banned\"]\n]);\n\nexport const PUSHER_MODE_NAMES = new Map([\n [0, \"Push\"],\n [1, \"Pull\"],\n [2, \"Do Nothing\"]\n]);\n\nexport const SIGN_DISPLAY_MODE_NAMES = new Map([\n [0, \"always\"],\n [1, \"when-near\"],\n [2, \"on-hover\"]\n]);\n\nexport const SHIELD_GENERATOR_BOOST_STATE_NAMES = new Map([\n [0, \"inactive\"],\n [1, \"boosted\"],\n [2, \"failed\"]\n]);\n\nexport const NAVIGATION_DEFAULT_DESTINATION = 10;\n\nexport function navigationDestinationName(destination) {\n return navigationZoneFromBaseId(destination)?.key ?? null;\n}\n\nexport function isNavigationDestination(destination) {\n return navigationDestinationName(destination) != null;\n}\n\nexport function numberOrNull(value, divisor = 1) {\n return typeof value === \"number\" ? value / divisor : null;\n}\n\nexport function qKey(offset) {\n return `q${offset}`;\n}\n\nexport function blobKey(offset) {\n return `blob${offset}`;\n}\n\n// Blob fields stay expanded to plain arrays: that shape is part of the public\n// record surface. Avoiding the Object.entries pair array is the win available\n// without changing what callers see.\nexport function cloneRecord(record) {\n const out = {};\n for (const key in record) {\n const value = record[key];\n out[key] = value instanceof Uint8Array ? Array.from(value) : value;\n }\n return out;\n}\n\nexport function firstRecord(records, predicate = null) {\n for (const record of records.values()) {\n if (!predicate || predicate(record)) return record;\n }\n return null;\n}\n\nexport const TABLE_78_FIELD_BITS = [\n [\"q20\", 1],\n [\"q24\", 2],\n [\"q28\", 4],\n [\"q32\", 8],\n [\"q36\", 16],\n [\"q40\", 32],\n [\"q44\", 64]\n];\n\nexport function table78DeltaRecord(changed) {\n const record = {lastMask: changed.mask};\n for (const [field, bit] of TABLE_78_FIELD_BITS) {\n if (!(changed.mask & bit)) continue;\n if (field === \"q44\" && ((changed.mask & 32) || changed.record?.q44 == null)) continue;\n record[field] = (changed.record?.[field] ?? 0) - (changed.previous?.[field] ?? 0);\n }\n return record;\n}\n\nexport function isSemanticLoaderDelta(changed, full) {\n return !full &&\n changed.previous != null &&\n (changed.mask & 96) === 96;\n}\n\nexport function decodeText(blob) {\n if (!(blob instanceof Uint8Array)) return null;\n try {\n return decoder.decode(blob);\n } catch (_) {\n return null;\n }\n}\n\nexport function entityNameFromType(typeId) {\n return itemNameFromId(typeId);\n}\n\nexport function markerTypeIdForTables(tableIds) {\n for (const tableId of tableIds) {\n if (MARKER_TYPE_IDS.has(tableId)) return MARKER_TYPE_IDS.get(tableId);\n }\n return null;\n}\n\nexport function itemSummary(itemId, count = null) {\n const id = itemId == null ? null : Number(itemId);\n const normalizedId = Number.isFinite(id) && id !== 0 ? id : null;\n return {\n itemId: normalizedId,\n itemName: normalizedId == null ? null : entityNameFromType(normalizedId),\n count: count === 0 ? null : count\n };\n}\n\nexport function summarizeItemHolder(entity, record) {\n if (!record) return null;\n return {\n entity,\n ...itemSummary(record.q20, record.q24 ?? null)\n };\n}\n\nexport function boundedProgress(value) {\n if (value == null) return null;\n const number = Number(value);\n if (!Number.isFinite(number)) return null;\n return Math.max(0, Math.min(100, number));\n}\n\nexport function summarizeFabricator(entity, record, itemHolderRecord = null, typeRecord = null) {\n if (!record) return null;\n const progressRaw = record.q24 ?? null;\n const craftingItem = itemSummary(itemHolderRecord?.q20, itemHolderRecord?.q24 ?? null);\n return {\n entity,\n type: FABRICATOR_TYPES.get(typeRecord?.q32) ?? null,\n typeIndex: typeRecord?.q32 ?? null,\n state: cloneRecord(record),\n rows: [\n itemSummary(record.q28, record.q40 ?? null),\n itemSummary(record.q32, record.q44 ?? null),\n itemSummary(record.q36, record.q48 ?? null)\n ],\n progress: boundedProgress(progressRaw),\n progressRaw,\n active: Boolean(record.q61) || (typeof progressRaw === \"number\" && progressRaw > 0),\n craftingItemId: craftingItem.itemId,\n craftingItemName: craftingItem.itemName,\n craftingCount: craftingItem.count\n };\n}\n\nexport function summarizeCargoEjector(entity, typeId, record) {\n if (typeId !== 223) return null;\n return {\n entity,\n typeId,\n typeName: entityNameFromType(typeId),\n progress: boundedProgress(record?.q24 ?? null),\n active: record?.q33 == null ? null : Boolean(record.q33)\n };\n}\n\nexport function summarizeCannon(entity, record, typeId = null) {\n if (!record || !CANNON_TYPE_IDS.has(typeId)) return null;\n const ammoItemId = record.q24 == null ? null : CANNON_AMMO_COLOR_ITEM_IDS.get(record.q24) ?? null;\n const charge = record.q40 ?? null;\n const recoil = record.q36 ?? null;\n const recoil2 = record.q48 ?? null;\n return {\n entity,\n typeId,\n typeName: entityNameFromType(typeId),\n ammoItemId,\n ammoName: entityNameFromType(ammoItemId),\n ammoCount: record.q28 ?? 0,\n aim: record.q32 ?? null,\n recoil,\n recoil2,\n recoils: [recoil, recoil2],\n charge,\n charged: charge == null ? null : charge >= 50,\n spin: record.q52 ?? null,\n coolingCellCount: record.q56 ?? 0,\n state: cloneRecord(record)\n };\n}\n\nexport function summarizeThruster(entity, typeId, record) {\n if (!THRUSTER_TYPE_IDS.has(typeId)) return null;\n const facing = Number.isFinite(Number(record?.q20)) ? Number(record.q20) : 0;\n return {\n entity,\n typeId,\n typeName: entityNameFromType(typeId),\n facing,\n facingName: enumValueName(THRUSTER_FACING_NAMES, facing),\n fuel: record?.q24 ?? null,\n state: cloneRecord(record || {})\n };\n}\n\nexport function summarizeHelm(entity, typeId, occupied = false) {\n if (!HELM_TYPE_IDS.has(typeId)) return null;\n return {\n entity,\n typeId,\n typeName: entityNameFromType(typeId),\n occupied: Boolean(occupied)\n };\n}\n\nexport function navigationDestinationFromRecord(record, changedMask = record?.lastMask ?? 0) {\n if (!record) return NAVIGATION_DEFAULT_DESTINATION;\n const q32Destination = navigationDestinationFromEncodedValue(record.q32);\n const q36Destination = navigationDestinationFromEncodedValue(record.q36);\n const q24Destination = navigationDestinationFromEncodedValue(record.q24);\n const q20Destination = navigationDestinationFromEncodedValue(record.q20);\n if ((changedMask & 9) === 9 && record.q20 === 0 && record.q24 == null && q32Destination != null) return q32Destination;\n if ((changedMask & 25) === 25 && record.q20 === 0 && record.q24 == null && q32Destination != null) return q32Destination;\n if ((changedMask & 17) === 17 && record.q20 === 0 && record.q24 == null && record.q32 == null && q36Destination != null) return q36Destination;\n if (changedMask === 1 && q20Destination != null) return q20Destination;\n if ((changedMask & 1) && q20Destination != null && record.q20 !== 0) return q20Destination;\n if (record.q20 === 0 && q24Destination != null) return q24Destination;\n return q20Destination ?? NAVIGATION_DEFAULT_DESTINATION;\n}\n\nexport function summarizeNavigationUnit(entity, typeId, record, trackedState = null) {\n if (typeId !== NAVIGATION_UNIT_TYPE_ID || !record) return null;\n const destination = trackedState?.destination ?? navigationDestinationFromRecord(record);\n return {\n entity,\n destination,\n destinationName: navigationDestinationName(destination),\n autoWarpOnShieldFailure: trackedState?.shieldFailure ?? null,\n autoWarpOnNoCaptains: trackedState?.noCaptains ?? null,\n state: cloneRecord(record)\n };\n}\n\nexport function summarizeCommsStation(entity, typeId, record, occupied = false) {\n if (typeId !== COMMS_STATION_TYPE_ID) return null;\n const charges = record?.q20 ?? null;\n return {\n entity,\n typeId,\n typeName: entityNameFromType(typeId),\n charges,\n maxCharges: COMMS_STATION_MAX_CHARGES,\n chargeRatio: typeof charges === \"number\" ? charges / COMMS_STATION_MAX_CHARGES : null,\n occupied: Boolean(occupied),\n state: record ? cloneRecord(record) : {}\n };\n}\n\nexport function summarizeHealth(entity, record) {\n if (!record) return null;\n const maxHp = record.q20 ?? null;\n const hp = record.q24 ?? null;\n return {\n entity,\n hp,\n maxHp,\n ratio: typeof hp === \"number\" && typeof maxHp === \"number\" && maxHp !== 0 ? hp / maxHp : null,\n state: cloneRecord(record)\n };\n}\n\nexport function summarizeBot(entity, {\n health,\n table2Record,\n smallRecord,\n combatRecord,\n motionRecord,\n table10Record,\n table51Record,\n itemCrate,\n player,\n shipControl\n}) {\n if (!health || itemCrate || player || shipControl || isBoulderBotExclusion(health, table2Record, combatRecord)) return null;\n const className = botClassFromState({\n health,\n table2Record,\n smallRecord,\n combatRecord,\n table10Record,\n table51Record\n });\n return {\n entity,\n className,\n identifier: botIdentifierFromState({combatRecord, motionRecord, smallRecord}),\n typeA: health.state?.q28 ?? null,\n typeB: health.state?.q32 ?? null\n };\n}\n\nexport function isBoulderBotExclusion(health, table2Record, combatRecord) {\n return Boolean(\n health?.maxHp === 2000 &&\n health?.state?.q28 === 30 &&\n health?.state?.q32 != null &&\n table2Record?.q20 != null &&\n table2Record?.q24 == null &&\n !combatRecord\n );\n}\n\nexport function botClassFromState({health, table2Record, smallRecord, combatRecord, table10Record, table51Record}) {\n if (isYellowMineGuardBotState({health, smallRecord, combatRecord, table2Record})) return \"yellow-mine-guard\";\n if (isShieldHelperBotState({health, table2Record})) return \"shield-helper\";\n if (isShieldMasterBotState({health, table2Record})) return \"shield-master\";\n if (isLazerEnthusiastBotState({health, table2Record, table10Record, table51Record})) return \"lazer-enthusiast\";\n if (isCowardBossState({health})) return \"the-coward\";\n if (isOrangeFoolBotState({combatRecord})) return \"orange-fool\";\n if (isZombieBossBotState({health, table2Record, combatRecord})) return \"zombie-boss\";\n if (combatRecord?.q20 === 762523904) return \"zombie\";\n if (combatRecord?.q20 === 1967883008) return \"zombie-hunter\";\n if (combatRecord?.q20 === 945371904) return \"zombie-tank\";\n if (isRedSentryBotState({health, table2Record, combatRecord})) return \"red-sentry\";\n if (isRedSniperBotState({health, table2Record})) return \"red-sniper\";\n if (isBlueRusherBotState({health, table2Record, combatRecord})) return \"blue-rusher\";\n if (isYellowHunterBotState({health, table2Record, combatRecord})) return \"yellow-hunter\";\n if (isAquaShielderBotState({health, table2Record, combatRecord})) return \"aqua-shielder\";\n if (table2Record) return \"table2-bot\";\n if (combatRecord) return \"combat-bot\";\n return \"bot\";\n}\n\nexport function isCowardBossState({health}) {\n return health?.state?.q28 === 70 && health?.state?.q32 === 78;\n}\n\nexport function isOrangeFoolBotState({combatRecord}) {\n return combatRecord?.q20 === -427551232 && combatRecord?.q24 === 1 && combatRecord?.q72 === 3;\n}\n\nexport function isZombieBossBotState({health, table2Record, combatRecord}) {\n return (\n combatRecord?.q20 === -430233088 &&\n health?.state?.q28 === 30 &&\n health?.state?.q32 === 166 &&\n table2Record?.q20 === 320 &&\n table2Record?.q24 === -900\n );\n}\n\nexport function isRedSentryBotState({health, table2Record, combatRecord}) {\n return (\n combatRecord?.q20 === 508251904 && combatRecord?.q72 === 2 ||\n health?.state?.q28 === 70 && health?.state?.q32 === 166 && table2Record?.q20 === 320 && table2Record?.q24 === -900\n );\n}\n\nexport function isBlueRusherBotState({health, table2Record, combatRecord}) {\n return (\n combatRecord?.q20 === 1113052928 && combatRecord?.q72 === 2 ||\n health?.state?.q28 === 30 && health?.state?.q32 === 34 && table2Record?.q20 === 80 && table2Record?.q24 === -900\n );\n}\n\nexport function isRedSniperBotState({health, table2Record}) {\n return health?.state?.q28 === 35 && health?.state?.q32 === 89 && table2Record?.q20 === 180 && table2Record?.q24 === -900;\n}\n\nexport function isYellowHunterBotState({health, table2Record, combatRecord}) {\n return (\n combatRecord?.q20 === -775665152 && combatRecord?.q72 === 4 && combatRecord?.q44 === -944515328 ||\n health?.state?.q28 === 30 && health?.state?.q32 === 56 && table2Record?.q20 === 120 && table2Record?.q24 === -900\n );\n}\n\nexport function isAquaShielderBotState({health, table2Record, combatRecord}) {\n return (\n combatRecord?.q20 === 13697024 && combatRecord?.q24 === 1 ||\n health?.state?.q28 === 50 && health?.state?.q32 === 122 && table2Record?.q20 === 240 && table2Record?.q24 === -900\n );\n}\n\nexport function isLazerEnthusiastBotState({health, table2Record, table10Record, table51Record}) {\n return (\n health?.state?.q28 === 140 &&\n health?.state?.q32 === 155 &&\n table2Record?.q20 === 300 &&\n table2Record?.q24 === -900 &&\n Boolean(table10Record) &&\n Boolean(table51Record)\n );\n}\n\nexport function isYellowMineGuardBotState({health, smallRecord, combatRecord, table2Record}) {\n return (\n health?.state?.q28 === 30 &&\n health?.state?.q32 === 33 &&\n smallRecord?.q20 === 78 &&\n smallRecord?.q24 === 78 &&\n combatRecord?.q24 === -995542016 &&\n !table2Record\n );\n}\n\nexport function isShieldHelperBotState({health, table2Record}) {\n return health?.state?.q28 === 30 && health?.state?.q32 === 33 && health?.maxHp === 1000 && !table2Record;\n}\n\nexport function isShieldMasterBotState({health, table2Record}) {\n return health?.state?.q28 === 190 && health?.state?.q32 === 210 && health?.maxHp === 15000 && Boolean(table2Record);\n}\n\nexport function botIdentifierFromState({combatRecord, motionRecord, smallRecord}) {\n if (combatRecord) return `t18:${combatRecord.q20 ?? \"-\"}:${combatRecord.q24 ?? \"-\"}:${combatRecord.q72 ?? \"-\"}`;\n if (motionRecord) return `t19:${motionRecord.q20 ?? \"-\"}:${motionRecord.q24 ?? \"-\"}`;\n if (smallRecord) return `t3:${smallRecord.q20 ?? \"-\"}:${smallRecord.q24 ?? \"-\"}`;\n return \"-\";\n}\n\nexport function summarizeShieldGenerator(entity, shieldRecord = null, itemHolderRecord = null, boostRecord = null) {\n const charge = shieldRecord?.q20 ?? 0;\n const maxCharge = 5000;\n const efficiencyPercent = shieldRecord?.q24 ?? null;\n const storedItem = itemSummary(itemHolderRecord?.q20 ?? null, itemHolderRecord?.q24 ?? null);\n const boostState = boostRecord?.q24 ?? 0;\n const boostTimer = boostRecord?.q28 ?? 0;\n const puzzleSeed = boostRecord?.q20 ?? null;\n const summary = {\n entity,\n charge,\n maxCharge,\n chargeRatio: typeof charge === \"number\" ? charge / maxCharge : null,\n efficiencyPercent,\n efficiency: typeof efficiencyPercent === \"number\" ? efficiencyPercent / 100 : null,\n storedItemId: storedItem.itemId,\n storedItemName: storedItem.itemName,\n storedItemCount: storedItem.count,\n hasShieldCore: storedItem.itemId === 123,\n boostState,\n boostStateName: enumValueName(SHIELD_GENERATOR_BOOST_STATE_NAMES, boostState),\n boostTimer,\n boostActive: boostState !== 0 || boostTimer > 0,\n puzzleSeed,\n // Replaced in place below by a lazy accessor; declared here so the key keeps\n // its original position in the object.\n puzzleSolution: null,\n state: cloneRecord(shieldRecord || {}),\n itemState: cloneRecord(itemHolderRecord || {}),\n boostStateRaw: cloneRecord(boostRecord || {})\n };\n // Solving the maze costs ~190us and was by far the most expensive step of a\n // model rebuild, run for every shield generator whether or not the caller\n // ever looks at the solution. Defer it to first read.\n return defineLazyProperty(summary, \"puzzleSolution\", () => maybeSolveGeneratorMazeSeed(puzzleSeed));\n}\n\nexport function summarizeShipControl(entity, record) {\n if (!record) return null;\n const color = record.q32 == null ? null : Number(record.q32);\n const shieldMaxHpOffset = typeof record.q68 === \"number\" ? record.q68 : null;\n const shieldMaxHp = shieldMaxHpOffset == null ? null : shieldMaxHpOffset + 2000;\n const shieldBaseHp = typeof record.q72 === \"number\" ? record.q72 : null;\n const activeTankHp = typeof record.q76 === \"number\" ? record.q76 : null;\n const inactiveTankHp = typeof record.q80 === \"number\" ? record.q80 : null;\n const tankValues = [activeTankHp, inactiveTankHp].filter((value) => typeof value === \"number\");\n const warpTicks = typeof record.q84 === \"number\" ? record.q84 : null;\n const warpElapsedSeconds = warpTicks == null ? null : warpTicks / OVERWORLD_WARP_TICKS_PER_SECOND;\n const warpDurationSeconds = warpTicks == null ? null : record.q88 ?? DEFAULT_OVERWORLD_WARP_DURATION_SECONDS;\n const warpRemainingSeconds = warpElapsedSeconds == null ? null : Math.max(0, warpDurationSeconds - warpElapsedSeconds);\n return {\n entity,\n name: decodeText(record.blob116),\n hexCode: decodeText(record.blob128),\n shipWorldId: record.q20 ?? null,\n color: Number.isFinite(color) ? color : null,\n colorCss: Number.isFinite(color) ? colorToCss(color) : null,\n thrustX: numberOrNull(record.q24, 20),\n thrustY: numberOrNull(record.q28, 20),\n value52: numberOrNull(record.q52, 20),\n value84: numberOrNull(record.q84, 20),\n value96: numberOrNull(record.q96, 1000),\n shield: shieldMaxHp == null && shieldBaseHp == null && !tankValues.length ? null : {\n maxHp: shieldMaxHp,\n baseHp: shieldBaseHp,\n activeTankHp,\n inactiveTankHp,\n tankValues\n },\n warp: warpTicks == null ? null : {\n active: record.q28 === 3,\n ticks: warpTicks,\n elapsedSeconds: warpElapsedSeconds,\n durationSeconds: warpDurationSeconds,\n remainingSeconds: warpRemainingSeconds\n },\n state: cloneRecord(record)\n };\n}\n\nexport function summarizeShipSize(entity, record) {\n if (!record) return null;\n return {\n entity,\n width: record.q20 == null ? null : Math.round(record.q20 / 10),\n height: record.q24 == null ? null : Math.round(record.q24 / 10),\n rawWidth: record.q20 ?? null,\n rawHeight: record.q24 ?? null,\n state: cloneRecord(record)\n };\n}\n\nexport function summarizeShipWorldMetadata(lockdownRecord, shipRecord) {\n if (!lockdownRecord && !shipRecord) return null;\n const color = shipRecord?.q24 == null ? null : Number(shipRecord.q24);\n const lockdownCountdownSeconds = typeof lockdownRecord?.q20 === \"number\" ? lockdownRecord.q20 : null;\n const onlineShipOwnerCount = typeof lockdownRecord?.q24 === \"number\" ? lockdownRecord.q24 : null;\n const requiredShipOwnerCount = typeof lockdownRecord?.q28 === \"number\" ? lockdownRecord.q28 : null;\n return {\n name: decodeText(shipRecord?.blob20),\n color: Number.isFinite(color) ? color : null,\n colorCss: Number.isFinite(color) ? colorToCss(color) : null,\n width: typeof shipRecord?.q32 === \"number\" ? shipRecord.q32 : null,\n height: typeof shipRecord?.q36 === \"number\" ? shipRecord.q36 : null,\n lockdownTimerSeconds: lockdownCountdownSeconds,\n lockdownCountdownSeconds,\n onlineShipOwnerCount,\n requiredShipOwnerCount,\n allShipOwnersOnline: onlineShipOwnerCount == null || requiredShipOwnerCount == null ? null : onlineShipOwnerCount >= requiredShipOwnerCount,\n lockdownEngaged: lockdownCountdownSeconds == null ? null : lockdownCountdownSeconds > 0,\n lockdownState: cloneRecord(lockdownRecord || {}),\n shipState: cloneRecord(shipRecord || {})\n };\n}\n\nexport function summarizeItemCrate(entity, sizeRecord, itemRecord = null, healthRecord = null) {\n if (!sizeRecord) return null;\n const itemId = itemRecord?.q20 ?? null;\n const count = itemRecord?.q24 ?? null;\n return {\n entity,\n ...itemSummary(itemId, count),\n width: sizeRecord.q20 ?? null,\n height: sizeRecord.q24 ?? null,\n itemState: cloneRecord(itemRecord || healthRecord || {}),\n sizeState: cloneRecord(sizeRecord)\n };\n}\n\nexport function scaledSizeSummary(record) {\n if (!record) return null;\n const rawWidth = record.q20 ?? null;\n const rawHeight = record.q24 ?? null;\n return {\n width: rawWidth == null ? null : rawWidth / 10,\n height: rawHeight == null ? null : rawHeight / 10,\n rawWidth,\n rawHeight,\n state: cloneRecord(record)\n };\n}\n\nexport function summarizeExpandoBox(entity, itemHolderRecord, sizeRecord) {\n if (!itemHolderRecord && !sizeRecord) return null;\n const size = scaledSizeSummary(sizeRecord);\n return {\n entity,\n ...itemSummary(itemHolderRecord?.q20 ?? null, itemHolderRecord?.q24 ?? null),\n width: size?.width ?? null,\n height: size?.height ?? null,\n rawWidth: size?.rawWidth ?? null,\n rawHeight: size?.rawHeight ?? null,\n itemState: cloneRecord(itemHolderRecord || {}),\n sizeState: cloneRecord(sizeRecord || {})\n };\n}\n\nexport function summarizeHoverOutline(entity, record) {\n const size = scaledSizeSummary(record);\n if (!size) return null;\n return {entity, ...size};\n}\n\nexport function summarizeMapMarker(entity, labelRecord, zoneRecord = null, sizeRecord = null) {\n if (!labelRecord && !zoneRecord) return null;\n const title = decodeText(zoneRecord?.blob28) ?? decodeText(labelRecord?.blob20);\n const key = decodeText(labelRecord?.blob24) ?? decodeText(labelRecord?.blob28);\n const description = decodeText(zoneRecord?.blob40);\n const color = zoneRecord?.q20 ?? labelRecord?.q28 ?? null;\n const accentColor = zoneRecord?.q24 ?? labelRecord?.q32 ?? null;\n const kind = key === \"mine\" ? \"mining_zone\" : key === \"dock\" ? \"dock\" : zoneRecord ? \"portal\" : \"marker\";\n return {\n entity,\n kind,\n title,\n key,\n description,\n color,\n colorCss: color != null && Number.isFinite(Number(color)) ? colorToCss(Number(color)) : null,\n accentColor,\n accentColorCss: accentColor != null && Number.isFinite(Number(accentColor)) ? colorToCss(Number(accentColor)) : null,\n width: sizeRecord?.q20 ?? null,\n height: sizeRecord?.q24 ?? null,\n labelState: cloneRecord(labelRecord || {}),\n zoneState: cloneRecord(zoneRecord || {})\n };\n}\n\nexport function summarizeDockingSpring(entity, springRecord, bodyRecord = null, sizeRecord = null) {\n if (!springRecord || bodyRecord?.q32 !== -1 || sizeRecord?.q20 !== 160 || sizeRecord?.q24 !== 160) return null;\n return {\n entity,\n id: springRecord.q20 ?? null,\n width: sizeRecord.q20,\n height: sizeRecord.q24,\n state: cloneRecord(springRecord)\n };\n}\n\nexport function summarizeHugeThruster(entity, markerRecord, sizeRecord = null) {\n if (!markerRecord || sizeRecord?.q20 !== 320 || sizeRecord?.q24 !== 160) return null;\n return {\n entity,\n width: sizeRecord.q20,\n height: sizeRecord.q24,\n state: cloneRecord(markerRecord)\n };\n}\n\nexport function summarizeLoader(entity, loaderRecord, loaderFilterRecord = null, filterSlotsRecord = null, tracker = null, includeDefaults = false, itemHolderRecord = null) {\n if (!loaderRecord && !loaderFilterRecord && !includeDefaults) return null;\n const config = tracker?.getConfig(null, entity, loaderRecord, loaderFilterRecord, filterSlotsRecord) ?? {};\n const hasLoaderState = Boolean(loaderRecord);\n const hasPositionConfig = Boolean(tracker?.hasPositionConfig(null, entity));\n const pick = hasLoaderState && hasPositionConfig ? config.pick ?? null : null;\n const place = hasLoaderState && hasPositionConfig ? config.place ?? null : null;\n const priority = config.priority ?? 0;\n const filterMode = config.filterMode ?? null;\n const heldItem = itemSummary(itemHolderRecord?.q20, itemHolderRecord?.q24 ?? null);\n return {\n entity,\n pick,\n pickName: enumValueName(LOADER_POSITION_NAMES, pick),\n place,\n placeName: enumValueName(LOADER_POSITION_NAMES, place),\n priority,\n priorityName: enumValueName(LOADER_PRIORITY_NAMES, priority),\n requireOutput: config.requireOutput ?? false,\n waitForStack: config.waitForStack ?? false,\n stack: config.stack ?? 16,\n cycle: Math.max(1, config.cycle ?? 1),\n filterMode,\n filterModeName: enumValueName(LOADER_FILTER_MODE_NAMES, filterMode),\n filterSlots: config.filterSlots ?? null,\n heldItemId: heldItem.itemId,\n heldItemName: heldItem.itemName,\n heldCount: heldItem.count,\n active: heldItem.itemId != null,\n progress: null,\n state: cloneRecord(loaderRecord || {}),\n filterState: cloneRecord(loaderFilterRecord || {}),\n filterSlotsState: cloneRecord(filterSlotsRecord || {})\n };\n}\n\nexport function summarizeCargoHatch(entity, typeId, filterRecord = null, filterSlotsRecord = null, animationRecord = null) {\n if (!CARGO_HATCH_TYPE_IDS.has(typeId)) return null;\n const filterMode = filterRecord?.q20 ?? 0;\n return {\n entity,\n typeId,\n typeName: entityNameFromType(typeId),\n filterMode,\n filterModeName: enumValueName(LOADER_FILTER_MODE_NAMES, filterMode),\n filterSlots: filterSlotsRecord ? [filterSlotsRecord.q20 ?? null, filterSlotsRecord.q24 ?? null, filterSlotsRecord.q28 ?? null] : null,\n openFraction: animationRecord?.q20 == null ? null : boundedProgress(animationRecord.q20) / 100,\n filterState: cloneRecord(filterRecord || {}),\n filterSlotsState: cloneRecord(filterSlotsRecord || {})\n };\n}\n\nexport function summarizePusher(entity, pusherRecord, filterSlotsRecord = null) {\n if (!pusherRecord) return null;\n const mode = pusherRecord.q20 == null ? 2 : pusherRecord.q20 + 2;\n const filteredMode = pusherRecord.q24 ?? 0;\n return {\n entity,\n mode,\n modeName: enumValueName(PUSHER_MODE_NAMES, mode),\n filteredMode,\n filteredModeName: enumValueName(PUSHER_MODE_NAMES, filteredMode),\n angle: numberOrNull(pusherRecord.q28, 10),\n speed: pusherRecord.q32 == null ? 20 : (pusherRecord.q32 / 100) + 20,\n length: pusherRecord.q40 == null ? 1000 : ((pusherRecord.q40 + 50) / 10) + 995,\n filterInventory: pusherRecord.q36 === 1,\n filterSlots: filterSlotsRecord ? [filterSlotsRecord.q20 ?? null, filterSlotsRecord.q24 ?? null, filterSlotsRecord.q28 ?? null] : null,\n state: cloneRecord(pusherRecord),\n filterSlotsState: cloneRecord(filterSlotsRecord || {})\n };\n}\n\nexport function summarizePusherBeam(entity, beamRecord) {\n if (!beamRecord) return null;\n const lengthRaw = beamRecord.q20 ?? 0;\n const mode = beamRecord.q24 ?? 2;\n return {\n entity,\n active: mode !== 2,\n mode,\n modeName: enumValueName(PUSHER_MODE_NAMES, mode),\n lengthRaw,\n length: lengthRaw / 10,\n state: cloneRecord(beamRecord)\n };\n}\n\nexport function normalizeDegrees(value) {\n if (!Number.isFinite(Number(value))) return null;\n return ((Number(value) % 360) + 360) % 360;\n}\n\nexport function summarizeItemLauncher(entity, typeId, launcherRecord) {\n if (typeId !== ITEM_LAUNCHER_TYPE_ID || !launcherRecord) return null;\n const angleRadians = numberOrNull(launcherRecord.q32 ?? 0, 200);\n return {\n entity,\n angleRaw: launcherRecord.q32 ?? null,\n angleRadians,\n angleDegrees: angleRadians == null ? null : normalizeDegrees((angleRadians * 180) / Math.PI),\n state: cloneRecord(launcherRecord)\n };\n}\n\nexport function summarizeSign(entity, signRecord) {\n if (!signRecord) return null;\n const displayMode = signRecord.q20 ?? 0;\n return {\n entity,\n text: decodeText(signRecord.blob24) ?? \"\",\n displayMode,\n displayModeName: enumValueName(SIGN_DISPLAY_MODE_NAMES, displayMode),\n state: cloneRecord(signRecord)\n };\n}\n\nexport function summarizeShieldProjector(entity, projectorRecord) {\n return {\n entity,\n active: projectorRecord?.q21 !== 0,\n state: cloneRecord(projectorRecord || {})\n };\n}\n\nexport function summarizeSpawnPoint(entity, spawnRecord) {\n const rank = Number.isFinite(Number(spawnRecord?.q20)) ? Number(spawnRecord.q20) : 0;\n return {\n entity,\n rank,\n rankName: enumValueName(TEAM_RANK_NAMES, rank),\n state: cloneRecord(spawnRecord || {})\n };\n}\n\nexport function summarizeDoor(entity, rankRecord, doorRecord) {\n const rank = Number.isFinite(Number(rankRecord?.q20)) ? Number(rankRecord.q20) : 0;\n return {\n entity,\n rank,\n rankName: enumValueName(TEAM_RANK_NAMES, rank),\n open: doorRecord?.q21 === 1,\n rankState: cloneRecord(rankRecord || {}),\n state: cloneRecord(doorRecord || {})\n };\n}\n\nexport function enumValueName(map, value) {\n return value == null ? null : map.get(value) ?? null;\n}\n\nexport function colorToCss(color) {\n return `rgb(${(color >> 16) & 0xff},${(color >> 8) & 0xff},${color & 0xff})`;\n}\n\nexport function previewActionName(color) {\n if (color === 0x00ff00) return \"place\";\n if (color === 0xff0000) return \"break\";\n if (color === 0x0000ff) return \"blueprint\";\n return null;\n}\n\nexport function bitOffsets(value) {\n if (!Number.isSafeInteger(value) || value < 1) return [];\n let bits = BigInt(value);\n const offsets = [];\n let offset = 0;\n while (bits > 0n && offset < 64) {\n if (bits & 1n) offsets.push(offset);\n bits >>= 1n;\n offset++;\n }\n return offsets;\n}\n\nexport function summarizeBlueprintPreview(entity, record, transformRecord = null) {\n if (!record || record.q20 == null) return null;\n const rawBits = Number.isSafeInteger(Number(record.q24)) ? Number(record.q24) : null;\n const bits = rawBits == null ? 1 : rawBits + 1;\n const placementOffsets = bitOffsets(bits);\n const transform = transformRecord ? {\n entity,\n x: numberOrNull(transformRecord.q20, 40),\n y: numberOrNull(transformRecord.q24, 40),\n rot: numberOrNull(transformRecord.q28, 127.324)\n } : null;\n return {\n entity,\n itemId: record.q20,\n itemName: entityNameFromType(record.q20),\n bits,\n rawBits,\n placementOffsets,\n placementCount: placementOffsets.length,\n placements: placementOffsets.map((offset) => ({\n offset,\n x: transform?.x == null ? null : transform.x + offset,\n y: transform?.y ?? null,\n itemId: record.q20,\n itemName: entityNameFromType(record.q20)\n })),\n x: transform?.x ?? null,\n y: transform?.y ?? null,\n rot: transform?.rot ?? null,\n state: cloneRecord(record)\n };\n}\n\nexport function summarizePlayerPreview(entity, record, blueprintItems = []) {\n if (!record) return null;\n const color = record.q40 == null ? null : Number(record.q40);\n const active = typeof record.q36 === \"number\" && record.q36 !== 0;\n if (!active && record.q36 == null) return null;\n const actionName = Number.isFinite(color) ? previewActionName(color) : null;\n return {\n entity,\n active,\n x: numberOrNull(record.q20, 10),\n y: numberOrNull(record.q24, 10),\n width: numberOrNull(record.q28, 10),\n height: numberOrNull(record.q32, 10),\n progress: record.q36 ?? null,\n color: Number.isFinite(color) ? color : null,\n colorCss: Number.isFinite(color) ? colorToCss(color) : null,\n actionName,\n blueprintId: record.q44 ?? null,\n blueprintItems: actionName === \"blueprint\" ? blueprintItems : [],\n state: cloneRecord(record)\n };\n}\n\nexport function summarizePlayer(entity, record, previewRecord = null, blueprintItems = []) {\n if (!record) return null;\n const rawHeldItemId = record.q28 == null ? null : Number(record.q28);\n const heldItemId = Number.isFinite(rawHeldItemId) && rawHeldItemId !== 0 ? rawHeldItemId : null;\n const teamRank = Number.isFinite(Number(record.q72)) ? Number(record.q72) : 0;\n const gameRank = Number.isFinite(Number(record.q76)) ? Number(record.q76) : 0;\n return {\n entity,\n name: decodeText(record.blob92),\n heldItemId,\n heldItemName: entityNameFromType(heldItemId),\n repairTargetDistance: record.q56 == null ? null : record.q56 / 10,\n repairTargetAngle: record.q80 == null ? null : record.q80 / 100,\n shipRank: PLAYER_SHIP_RANKS.get(teamRank) || null,\n patronTier: patronTierName(gameRank),\n isDeveloper: gameRank === 1,\n isPatron: gameRank >= 2 && gameRank <= 6,\n piloting: Boolean(record.q107),\n muted: Boolean(record.q112),\n actionPreview: summarizePlayerPreview(entity, previewRecord, blueprintItems),\n state: cloneRecord(record)\n };\n}\n\nexport function patronTierName(gameRank) {\n switch (gameRank) {\n case 2:\n return \"bronze\";\n case 3:\n return \"silver\";\n case 4:\n return \"gold\";\n case 5:\n return \"plat\";\n case 6:\n return \"flux\";\n default:\n return null;\n }\n}\n\n// Called once per entity with a fixed set of named components. Taking (key,\n// value) pairs avoids allocating ~32 single-key object literals per entity and\n// an Object.entries pair array for each of them.\nexport function mergeContents(components) {\n const out = {};\n let any = false;\n for (const key in components) {\n const value = components[key];\n if (value == null) continue;\n out[key] = value;\n any = true;\n }\n return any ? out : null;\n}\n\n// A hover outline is a highlight rectangle, not a physical footprint. Overworld\n// boundary entities report outlines as large as 720x32, and indexing those cell\n// by cell produced ~106k block cells for 183 entities -- the dominant cost in\n// every derived read. Outlines beyond this budget fall through to the ordinary\n// marker/crate/type heuristics.\nexport const MAX_HOVER_OUTLINE_FOOTPRINT_CELLS = 1024;\n\nexport function entityFootprint(entity) {\n if (entity?.hoverOutline && Number.isFinite(Number(entity.hoverOutline.width)) && Number.isFinite(Number(entity.hoverOutline.height))) {\n const width = Math.ceil(Number(entity.hoverOutline.width));\n const height = Math.ceil(Number(entity.hoverOutline.height));\n if (width * height <= MAX_HOVER_OUTLINE_FOOTPRINT_CELLS) {\n return {width, height, source: \"hover_outline\"};\n }\n }\n if (entity?.markerTypeId != null && ENTITY_FOOTPRINTS.has(entity.markerTypeId)) {\n const footprint = ENTITY_FOOTPRINTS.get(entity.markerTypeId);\n return {...footprint, source: \"marker\"};\n }\n if (entity?.hugeThruster) {\n return {\n width: entity.hugeThruster.width,\n height: entity.hugeThruster.height,\n source: \"huge_thruster\"\n };\n }\n if (entity?.itemCrate && Number.isFinite(Number(entity.itemCrate.width)) && Number.isFinite(Number(entity.itemCrate.height))) {\n return {\n width: Number(entity.itemCrate.width),\n height: Number(entity.itemCrate.height),\n source: \"crate\"\n };\n }\n if (entity?.typeId != null && ENTITY_FOOTPRINTS.has(entity.typeId)) {\n const footprint = ENTITY_FOOTPRINTS.get(entity.typeId);\n return {...footprint, source: \"type\"};\n }\n if (entity?.fabricator || entity?.shieldGenerator) return {width: 2, height: 2, source: \"heuristic\"};\n return {width: 1, height: 1, source: \"default\"};\n}\n\nexport function entityLabel(entity) {\n if (entity?.category === \"metadata\" && entity?.typeName) return `Metadata ${entity.typeName}`;\n if (entity?.blueprintPreview) return `Blueprint Preview (${entity.blueprintPreview.itemName ?? entity.blueprintPreview.itemId ?? \"item\"})`;\n if (entity?.category === \"loose_item\" && entity?.itemHolder?.itemName) return `Loose ${entity.itemHolder.itemName}`;\n if (entity?.category === \"untyped_holder\" && entity?.itemHolder?.itemName) return `Untyped Holder (${entity.itemHolder.itemName})`;\n if (entity?.mapMarker) return `Map Marker (${entity.mapMarker.title ?? entity.mapMarker.key ?? entity.mapMarker.kind ?? \"marker\"})`;\n if (entity?.dockingSpring) return \"Docking Spring\";\n if (entity?.hugeThruster) return \"Huge Thruster\";\n if (entity?.shipControl && entity?.isOverworld) return \"Overworld Ship\";\n if (entity?.expandoBox) return \"Expando Box\";\n if (entity?.markerTypeName) return entity.markerTypeName;\n if (entity?.typeName) return entity.typeName;\n if (entity?.fabricator) return \"Fabricator\";\n if (entity?.itemCrate) return \"Item Crate\";\n if (entity?.shieldGenerator) return \"Shield Generator\";\n if (entity?.fluidTank) return \"Fluid Tank\";\n if (entity?.cannon) return \"Cannon\";\n if (entity?.pusher) return \"Pusher\";\n if (entity?.pusherBeam) return \"Pusher Beam\";\n if (entity?.launcher) return \"Item Launcher\";\n if (entity?.loader) return \"Loader\";\n if (entity?.cargoHatch) return entity.cargoHatch.typeName || \"Cargo Hatch\";\n if (entity?.cargoEjector) return entity.cargoEjector.typeName || \"Cargo Ejector\";\n if (entity?.itemHolder && !entity?.cargoEjector && !entity?.cannon && !entity?.pusher && !entity?.launcher && !entity?.loader && !entity?.fluidTank && !entity?.shieldGenerator && !entity?.shieldProjector) {\n return entity.itemHolder.itemName || \"Item Holder\";\n }\n if (entity?.player) return \"Player\";\n if (entity?.shipControl) return \"Ship Control\";\n return entity?.typeId != null ? `Entity ${entity.typeId}` : \"Entity\";\n}\n\nexport function entityCategory(entity) {\n if (entity?.player) return \"player\";\n if (entity?.blueprintPreview) return \"blueprint_preview\";\n if (entity?.shipControl) return \"ship_control\";\n if (entity?.itemCrate) return \"item_crate\";\n if (entity?.mapMarker) return \"map_marker\";\n if (entity?.dockingSpring) return \"docking_spring\";\n if (entity?.hugeThruster) return \"huge_thruster\";\n const hasMachineComponent = Boolean(entity?.fabricator || entity?.cargoEjector || entity?.cannon || entity?.pusher || entity?.launcher || entity?.loader || entity?.cargoHatch || entity?.commsStation || entity?.fluidTank || entity?.shieldGenerator || entity?.shieldProjector);\n const hasValidTransform = Boolean(\n entity?.transform &&\n Number.isFinite(entity.transform.x) &&\n Number.isFinite(entity.transform.y)\n );\n const hasPhysicalComponent = Boolean(hasValidTransform || entity?.itemHolder || hasMachineComponent);\n if (!hasPhysicalComponent) return \"metadata\";\n if (entity?.transform && !hasValidTransform && !entity?.itemHolder && !hasMachineComponent) return \"metadata\";\n if (entity?.typeId != null && !hasPhysicalComponent) return \"metadata\";\n if (entity?.markerTypeId != null) return \"placed_entity\";\n if (entity?.looseItemMarker && entity?.itemHolder?.itemId != null) return \"loose_item\";\n if (entity?.itemHolder?.itemId != null && !entity?.cargoEjector && !entity?.cannon && !entity?.pusher && !entity?.launcher && !entity?.loader && !entity?.cargoHatch && !entity?.commsStation && !entity?.fluidTank && !entity?.shieldGenerator && !entity?.shieldProjector) {\n if (entity.typeId != null && (!PLACED_ENTITY_TYPE_IDS.has(Number(entity.typeId)) || entity.typeId === entity.itemHolder.itemId)) return \"loose_item\";\n if (entity.typeId == null) return \"untyped_holder\";\n }\n if (entity?.fabricator || entity?.cannon || entity?.pusher || entity?.launcher || entity?.loader || entity?.cargoHatch || entity?.cargoEjector || entity?.commsStation || entity?.fluidTank || entity?.shieldGenerator || entity?.shieldProjector) return \"placed_entity\";\n if (entity?.typeId != null && PLACED_ENTITY_TYPE_IDS.has(Number(entity.typeId))) return \"placed_entity\";\n if (entity?.typeId != null && !hasPhysicalComponent) return \"metadata\";\n if (entity?.itemHolder?.itemId != null && !entity?.cargoEjector && !entity?.cannon && !entity?.pusher && !entity?.launcher && !entity?.loader && !entity?.cargoHatch && !entity?.commsStation && !entity?.fluidTank && !entity?.shieldGenerator && !entity?.shieldProjector) return \"untyped_holder\";\n return \"entity\";\n}\n\n// Block coordinates are packed into a single number so the block index avoids a\n// template-string key per occupied cell. Covers the coordinate range in use.\nexport const BLOCK_KEY_OFFSET = 1 << 24;\nexport const BLOCK_KEY_STRIDE = 1 << 25;\n\nexport function blockKey(x, y) {\n return ((y + BLOCK_KEY_OFFSET) * BLOCK_KEY_STRIDE) + (x + BLOCK_KEY_OFFSET);\n}\n\n// Returned by ModelState.table() for absent tables. Never mutated.\nexport const EMPTY_TABLE = new Map();\n\n// snapshot() only ever exposed the last 50 removals and last 10 errors, but both\n// arrays grew without bound behind that. Retain a little more than is surfaced.\nexport const MAX_RETAINED_REMOVALS = 500;\nexport const MAX_RETAINED_ERRORS = 100;\n\nexport function pushCapped(target, value, limit) {\n target.push(value);\n if (target.length > limit) target.splice(0, target.length - limit);\n}\n", "export const LOADER_POSITION_NAMES = new Map([\n [0, \"top-left\"],\n [1, \"top-middle\"],\n [2, \"top-right\"],\n [3, \"middle-left\"],\n [4, \"middle-right\"],\n [5, \"bottom-left\"],\n [6, \"bottom-middle\"],\n [7, \"bottom-right\"]\n]);\n\nexport const LOADER_PRIORITY_NAMES = new Map([\n [-1, \"low\"],\n [0, \"normal\"],\n [1, \"high\"]\n]);\n\nexport const LOADER_FILTER_MODE_NAMES = new Map([\n [0, \"allow-all\"],\n [1, \"block-filter\"],\n [2, \"allow-filter\"],\n [3, \"block-all\"]\n]);\n\nconst DEFAULT_LOADER_PRIORITY = 0;\nconst DEFAULT_LOADER_FILTER_MODE = 0;\nconst DEFAULT_LOADER_STACK = 16;\nconst DEFAULT_LOADER_CYCLE = 1;\nconst DEFAULT_LOADER_PICK = 3;\nconst DEFAULT_LOADER_PLACE = 4;\nconst LOADER_CONFIG_NUMERIC_BITS = [1, 2, 4, 8, 16];\nconst LOADER_CONFIG_NUMERIC_FIELDS = [\"q20\", \"q24\", \"q28\", \"q32\", \"q36\"];\n\nexport function wrapLoaderPosition(value) {\n return value == null ? null : ((value % 8) + 8) % 8;\n}\n\nexport function enumName(map, value) {\n if (value == null) return \"-\";\n const name = map.get(value);\n return name == null ? String(value) : `${name}(${value})`;\n}\n\nexport function decodeIndexedLoaderSnapshotRecord(loader, mask = 0, cumulative = null, reference = null) {\n const config = {\n pick: 3,\n place: 4,\n priority: DEFAULT_LOADER_PRIORITY,\n requireOutput: false,\n waitForStack: false,\n stack: DEFAULT_LOADER_STACK,\n cycle: DEFAULT_LOADER_CYCLE\n };\n\n if (mask & 32) config.requireOutput = true;\n if (mask & 64) config.waitForStack = true;\n\n switch (mask) {\n case 0:\n break;\n case 1:\n config.pick = wrapLoaderPosition((loader.q20 ?? 0) + 3);\n if (cumulative?.q40 != null) config.requireOutput = true;\n break;\n case 2:\n if (reference && cumulative?.q40 != null && loader.q24 != null) {\n if (loader.q24 <= -8) {\n config.pick = wrapLoaderPosition((reference.pick ?? 3) + 1);\n config.place = wrapLoaderPosition((reference.place ?? 4) + 3);\n config.requireOutput = true;\n } else {\n config.pick = wrapLoaderPosition((reference.pick ?? 3) + 2);\n config.place = wrapLoaderPosition((reference.place ?? 4) + 4);\n }\n } else {\n config.place = wrapLoaderPosition((loader.q24 ?? 0) + 4);\n }\n break;\n case 3:\n config.pick = reference && loader.q24 <= -8\n ? wrapLoaderPosition((reference.pick ?? 3) + (loader.q20 ?? 0) + 3)\n : wrapLoaderPosition((loader.q20 ?? 0) + 3);\n config.place = wrapLoaderPosition((loader.q24 ?? 0) + 4);\n // Some repeated full-snapshot rows keep flag state in the materialized\n // cumulative row while only sending pick/place deltas in the row mask.\n if (cumulative?.q44 != null && cumulative?.q36 == null && cumulative?.q40 == null) {\n config.requireOutput = true;\n config.waitForStack = true;\n }\n break;\n case 5:\n config.pick = wrapLoaderPosition((loader.q28 ?? 0) + 1);\n config.place = wrapLoaderPosition((loader.q28 ?? 0) + 3);\n break;\n case 6:\n config.pick = wrapLoaderPosition((loader.q24 ?? 0) + 5);\n config.place = wrapLoaderPosition((loader.q24 ?? 0) + 3);\n config.requireOutput = true;\n break;\n case 7:\n if (reference && (cumulative?.q40 != null || loader.q24 <= -8 || loader.q28 >= 2)) {\n if (loader.q24 <= -8) {\n config.pick = wrapLoaderPosition((reference.pick ?? 3) + (loader.q20 ?? 0) + 5);\n config.place = wrapLoaderPosition(reference.place ?? 4);\n config.requireOutput = true;\n config.waitForStack = true;\n if (loader.q28 != null) config.priority = loader.q28;\n } else if (loader.q28 >= 2) {\n config.pick = wrapLoaderPosition((reference.pick ?? 3) + loader.q28);\n config.place = wrapLoaderPosition((reference.place ?? 4) + (loader.q20 ?? 0));\n config.priority = loader.q28 - 4;\n } else if ((loader.q20 ?? 0) >= 3) {\n config.pick = wrapLoaderPosition((reference.pick ?? 3) + (loader.q20 ?? 0));\n config.place = wrapLoaderPosition(reference.place ?? 4);\n config.priority = (loader.q28 ?? 0) + 1;\n config.requireOutput = Boolean(reference.requireOutput);\n config.waitForStack = Boolean(reference.waitForStack);\n } else {\n config.pick = wrapLoaderPosition((loader.q20 ?? 0) + 2);\n config.place = wrapLoaderPosition((reference.place ?? 4) + (loader.q24 ?? 0));\n config.priority = (loader.q28 ?? 0) + 1;\n }\n } else {\n config.pick = wrapLoaderPosition((loader.q20 ?? 0) + 3);\n config.place = wrapLoaderPosition((loader.q24 ?? 0) + 4);\n if (loader.q28 != null) config.priority = loader.q28;\n }\n break;\n case 8:\n config.pick = wrapLoaderPosition((cumulative?.q40 ?? 0) + 4);\n config.place = wrapLoaderPosition((cumulative?.q28 ?? 0) + 2);\n config.requireOutput = true;\n break;\n case 9:\n config.pick = wrapLoaderPosition((loader.q20 ?? 0) + 3);\n config.place = wrapLoaderPosition((cumulative?.q40 ?? 0) + 3);\n break;\n case 18:\n config.pick = wrapLoaderPosition(loader.q24 ?? 0);\n config.place = wrapLoaderPosition((loader.q36 ?? 0) + 2);\n if (loader.q36 != null) config.cycle = (loader.q36 / 20) + 1;\n break;\n case 32:\n break;\n case 65:\n config.pick = wrapLoaderPosition((loader.q44 ?? 0) + 3);\n break;\n case 33:\n config.pick = wrapLoaderPosition((loader.q40 ?? 0) + 3);\n config.place = wrapLoaderPosition((loader.q20 ?? 0) + 4);\n break;\n case 34:\n config.pick = wrapLoaderPosition((loader.q24 ?? 0) + 3);\n config.place = wrapLoaderPosition((loader.q40 ?? 0) + 4);\n break;\n case 35:\n config.pick = wrapLoaderPosition((loader.q24 ?? 0) + 3);\n config.place = wrapLoaderPosition((loader.q40 ?? 0) + 4);\n break;\n case 67:\n config.pick = wrapLoaderPosition((loader.q24 ?? 0) + 3);\n config.place = wrapLoaderPosition((loader.q44 ?? 0) + 4);\n break;\n case 95:\n config.pick = wrapLoaderPosition((loader.q24 ?? 0) + 3);\n config.place = wrapLoaderPosition((loader.q28 ?? 0) + 4);\n if (loader.q32 != null) config.priority = loader.q32;\n if (loader.q36 != null) config.stack = DEFAULT_LOADER_STACK + loader.q36;\n if (loader.q44 != null) config.cycle = (loader.q44 / 20) + 1;\n break;\n case 98:\n config.place = wrapLoaderPosition((loader.q40 ?? 0) + 4);\n break;\n case 99:\n config.pick = wrapLoaderPosition((loader.q24 ?? 0) + 3);\n config.place = wrapLoaderPosition((loader.q40 ?? 0) + 4);\n break;\n case 126:\n config.pick = wrapLoaderPosition(loader.q28 ?? 0);\n config.place = wrapLoaderPosition(loader.q24 ?? 0);\n if (loader.q32 != null) config.priority = loader.q32;\n if (loader.q36 != null) config.stack = DEFAULT_LOADER_STACK + loader.q36;\n if (loader.q40 != null) config.cycle = (loader.q40 / 20) + 1;\n break;\n default:\n return null;\n }\n\n return config;\n}\n\nexport function decodeLoaderSnapshotRecord(loader, mask = loader?.lastMask ?? 0) {\n if (!loader) return null;\n const hasRequireOutput = Boolean(mask & 32);\n const hasWaitForStack = Boolean(mask & 64);\n const hasFlag = hasRequireOutput || hasWaitForStack;\n const slots = [];\n\n for (const [index, bit] of LOADER_CONFIG_NUMERIC_BITS.entries()) {\n if (!(mask & bit)) continue;\n const value = loader[LOADER_CONFIG_NUMERIC_FIELDS[index]];\n if (value == null) return null;\n slots.push(value);\n }\n if (hasRequireOutput) {\n if (loader.q40 == null) return null;\n slots.push(loader.q40);\n } else if (hasWaitForStack) {\n if (loader.q44 == null) return null;\n slots.push(loader.q44);\n }\n\n if (hasFlag && slots.length) slots.shift();\n\n const config = {\n pick: 3,\n place: 4,\n priority: DEFAULT_LOADER_PRIORITY,\n requireOutput: hasRequireOutput,\n waitForStack: hasWaitForStack,\n stack: DEFAULT_LOADER_STACK,\n cycle: DEFAULT_LOADER_CYCLE\n };\n\n if (mask & 1) {\n if (!slots.length) return null;\n config.pick = wrapLoaderPosition(slots.shift() + 3);\n }\n if (mask & 2) {\n if (!slots.length) return null;\n config.place = wrapLoaderPosition(slots.shift() + 4);\n }\n if (mask & 4) {\n if (!slots.length) return null;\n config.priority = slots.shift();\n }\n if (mask & 8) {\n if (!slots.length) return null;\n config.stack = DEFAULT_LOADER_STACK + slots.shift();\n }\n if (mask & 16) {\n if (!slots.length) return null;\n config.cycle = (slots.shift() / 20) + 1;\n }\n\n return config;\n}\n\nfunction decodeLoaderSemanticDeltaRecord(loader, mask = loader?.lastMask ?? 0) {\n if (!loader) return null;\n const hasRequireOutput = Boolean(mask & 32);\n const hasWaitForStack = Boolean(mask & 64);\n if (!hasRequireOutput && !hasWaitForStack) return null;\n\n const slots = [];\n for (const [index, bit] of LOADER_CONFIG_NUMERIC_BITS.entries()) {\n if (!(mask & bit)) continue;\n slots.push(loader[LOADER_CONFIG_NUMERIC_FIELDS[index]] ?? 0);\n }\n if (hasRequireOutput) slots.push(loader.q40 ?? 0);\n else if (hasWaitForStack) slots.push(loader.q44 ?? 0);\n\n if (slots.length) slots.shift();\n\n const config = {};\n if (mask & 1) config.pick = slots.shift() ?? 0;\n if (mask & 2) config.place = slots.shift() ?? 0;\n if (mask & 4) config.priority = slots.shift() ?? 0;\n if (mask & 8) config.stack = slots.shift() ?? 0;\n if (mask & 16) config.cycleTicks = slots.shift() ?? 0;\n config.requireOutput = hasRequireOutput;\n config.waitForStack = hasWaitForStack;\n return config;\n}\n\nfunction loaderDeltaRecord(loader, mask, previous) {\n const record = {lastMask: mask};\n for (const [field, bit] of [\n [\"q20\", 1],\n [\"q24\", 2],\n [\"q28\", 4],\n [\"q32\", 8],\n [\"q36\", 16],\n [\"q40\", 32],\n [\"q44\", 64]\n ]) {\n if (!(mask & bit)) continue;\n if (field === \"q44\" && ((mask & 32) || loader?.q44 == null)) continue;\n record[field] = (loader?.[field] ?? 0) - (previous?.[field] ?? 0);\n }\n return record;\n}\n\nfunction isSemanticLoaderDelta(changed, full) {\n return !full &&\n changed.previous != null &&\n (changed.mask & 96) === 96;\n}\n\nfunction filterSlotValue(value) {\n return value == null || value === 0 ? null : value;\n}\n\nexport class LoaderConfigTracker {\n constructor() {\n this.pickBases = new Map();\n this.pickDeltaBases = new Map();\n this.placeBases = new Map();\n this.placeDeltaBases = new Map();\n this.currentPicks = new Map();\n this.currentPlaces = new Map();\n this.sparsePositionBaselines = new Set();\n this.priorities = new Map();\n this.priorityOffsets = new Map();\n this.filterModes = new Map();\n this.filterSources = new Map();\n this.requireOutputs = new Map();\n this.waitForStacks = new Map();\n this.stackBases = new Map();\n this.stackSources = new Map();\n this.cycles = new Map();\n this.cycleModes = new Map();\n this.cycleDeltaBases = new Map();\n this.directCycleValues = new Map();\n this.directCycleFields = new Map();\n }\n\n updateFromModel(update) {\n const world = update?.world;\n const model = update?.result?.model;\n if (!world || !model) return;\n const seenEntities = new Set();\n for (const section of model.sections || []) {\n if (section.table !== 78) continue;\n for (const changed of section.records || []) {\n if (changed.indexedLoaderConfig) {\n this.updateIndexedSnapshotRecord(world.id, changed.entity, changed.record, changed.mask, changed.cumulativeRecord, changed.configEntity);\n continue;\n }\n const loader = changed.record ?? world.model.record(78, changed.entity);\n this.updateRecord(world.id, changed.entity, loader, changed.mask, changed.previous, {\n repeatedInUpdate: seenEntities.has(changed.entity),\n repeatedInSection: changed.repeatedInSection,\n semanticSnapshot: Boolean(model.full),\n semanticDelta: isSemanticLoaderDelta(changed, model.full),\n deltaRecord: loaderDeltaRecord(loader, changed.mask, changed.previous)\n });\n seenEntities.add(changed.entity);\n }\n }\n }\n\n updateRecord(worldId, entityId, loader, mask = 0, previous = null, options = {}) {\n if (!loader) return;\n const key = this.#key(worldId, entityId);\n const hasTrackedConfig = this.#hasTrackedConfig(key);\n if (hasTrackedConfig &&\n (options.repeatedInSection || options.repeatedInUpdate) &&\n this.sparsePositionBaselines.has(key) &&\n this.hasPositionConfig(worldId, entityId)) {\n return;\n }\n if (!hasTrackedConfig && this.#isDirectPositionCycleBaseline(loader, mask)) {\n this.pickBases.set(key, 3);\n this.pickDeltaBases.set(key, 0);\n this.placeBases.set(key, 4);\n this.placeDeltaBases.set(key, 0);\n this.#setCurrentPosition(key, loader);\n if ((mask & 4) && loader.q28 >= -1 && loader.q28 <= 1) this.priorities.set(key, loader.q28);\n this.requireOutputs.set(key, Boolean(mask & 32));\n this.waitForStacks.set(key, Boolean(mask & 64));\n this.stackBases.set(key, 16);\n this.stackSources.delete(key);\n this.cycleModes.set(key, \"direct\");\n this.cycleDeltaBases.set(key, 0);\n this.directCycleValues.set(key, loader.q44 ?? loader.q36);\n this.directCycleFields.set(key, loader.q44 == null ? \"q36\" : \"q44\");\n this.cycles.set(key, ((loader.q44 ?? loader.q36) / 20) + 1);\n return;\n }\n\n if (!hasTrackedConfig && options.allowSparseBaseline && this.#isSparsePositionBaseline(loader, mask)) {\n this.#applySparsePositionBaseline(key, loader, mask);\n return;\n }\n\n const baseline = hasTrackedConfig ? null : this.#loaderBaseline(loader, mask, options.semanticSnapshot);\n if (hasTrackedConfig && options.semanticDelta && this.#applySemanticDelta(worldId, entityId, loader, mask, previous, options.deltaRecord)) {\n return;\n }\n const hasInitialConfigFields = baseline || ((mask & 31) && ((mask & 32) || ((mask & 64) && (mask & 4))));\n // Loader table 78 is an affine config vector: initial/full rows establish\n // origins, then later rows are deltas even when active flag bits are present.\n if (!hasTrackedConfig && hasInitialConfigFields && mask !== 32 && mask !== 64) {\n if (baseline) this.#applyLoaderBaseline(key, loader, baseline);\n else {\n const usedQ28AsPositionBase = this.#initializePositionBaseline(key, loader, mask);\n if ((mask & 4) && loader.q28 != null) {\n if (usedQ28AsPositionBase) this.#initializePriorityOffset(key, loader);\n else this.priorities.set(key, loader.q28);\n }\n }\n this.requireOutputs.set(key, Boolean(mask & 32));\n this.waitForStacks.set(key, Boolean(mask & 64));\n if (!this.stackBases.has(key)) this.#initializeStackBaseline(key, loader);\n if (!this.cycles.has(key)) this.#initializeCycleBaseline(key, loader);\n return;\n }\n\n const q44CycleChanged = (mask & 64) &&\n this.#usesQ44CycleBase(key) &&\n loader.q44 != null &&\n (\n this.#fieldChanged(previous, loader, \"q44\") ||\n (this.directCycleValues.has(key) && loader.q44 !== this.directCycleValues.get(key))\n );\n const q40DirectCycleChanged = (mask & 32) &&\n this.cycleModes.get(key) === \"q40-direct\" &&\n loader.q40 != null &&\n (\n this.#fieldChanged(previous, loader, \"q40\") ||\n (this.directCycleValues.has(key) && loader.q40 !== this.directCycleValues.get(key))\n );\n if (q44CycleChanged) {\n this.directCycleValues.set(key, loader.q44);\n this.#updateCycle(key, loader);\n } else if (q40DirectCycleChanged) {\n this.directCycleValues.set(key, loader.q40);\n this.#updateCycle(key, loader);\n } else if ((mask & 32) && mask === 32) {\n this.requireOutputs.set(key, !this.requireOutputs.get(key));\n } else if ((mask & 32) && !this.requireOutputs.has(key)) {\n this.requireOutputs.set(key, true);\n }\n // The same bit is also the wait-for-stack toggle. Treat a real q44 value\n // change as cycle config, and an unchanged standalone bit as the toggle.\n if (!q44CycleChanged) {\n if ((mask & 64) && mask === 64) this.waitForStacks.set(key, !this.waitForStacks.get(key));\n else if ((mask & 64) && !this.waitForStacks.has(key)) this.waitForStacks.set(key, true);\n }\n if ((mask & 4) && loader.q28 != null) this.priorities.set(key, this.#priority(key, loader.q28));\n if ((mask & 8) && this.filterSources.get(key) === \"q32\" && loader.q32 != null) this.filterModes.set(key, loader.q32);\n const q32FilterOnlyUpdate = this.filterSources.get(key) === \"q32\" && mask === 8;\n if ((mask & 8) && !options.semanticDelta && !q32FilterOnlyUpdate && loader.q32 != null && this.stackBases.has(key)) {\n const previousConfig = this.getConfig(worldId, entityId, previous);\n this.stackBases.set(key, previousConfig.stack - (previous?.q32 ?? 0));\n this.stackSources.set(key, \"q32\");\n }\n if (mask & 16) this.#updateCycle(key, loader);\n if ((mask & 3) && this.hasPositionConfig(worldId, entityId)) this.#setCurrentPosition(key, loader);\n }\n\n updateIndexedSnapshotRecord(worldId, entityId, loader, mask = 0, cumulative = null, configEntity = null) {\n if (!loader) return false;\n const reference = configEntity == null || Number(configEntity) === Number(entityId)\n ? null\n : this.#trackedConfig(worldId, configEntity);\n const config = decodeIndexedLoaderSnapshotRecord(loader, mask, cumulative, reference);\n if (!config) return false;\n\n const key = this.#key(worldId, entityId);\n this.pickBases.set(key, config.pick);\n this.pickDeltaBases.set(key, loader.q20 ?? 0);\n this.placeBases.set(key, config.place);\n this.placeDeltaBases.set(key, loader.q24 ?? 0);\n this.currentPicks.set(key, config.pick);\n this.currentPlaces.set(key, config.place);\n this.sparsePositionBaselines.delete(key);\n this.priorities.set(key, config.priority);\n if (mask === 95 && loader.q28 != null) this.priorityOffsets.set(key, config.priority - loader.q28);\n else this.priorityOffsets.delete(key);\n this.filterModes.delete(key);\n this.filterSources.delete(key);\n this.requireOutputs.set(key, config.requireOutput);\n this.waitForStacks.set(key, config.waitForStack);\n this.stackBases.set(key, config.stack - (loader.q32 ?? 0));\n this.stackSources.delete(key);\n this.cycles.set(key, config.cycle);\n if (mask === 95) {\n this.cycleModes.set(key, \"q44-q36-delta\");\n this.cycleDeltaBases.set(key, loader.q36 ?? 0);\n this.directCycleValues.set(key, loader.q44);\n this.directCycleFields.set(key, \"q44\");\n } else if (mask === 126) {\n this.cycleModes.set(key, \"offset\");\n this.cycleDeltaBases.set(key, loader.q36 ?? 0);\n this.directCycleValues.delete(key);\n this.directCycleFields.delete(key);\n } else {\n this.cycleModes.set(key, \"direct\");\n this.cycleDeltaBases.set(key, 0);\n }\n if (loader.q36 != null && mask === 18) {\n this.directCycleValues.set(key, loader.q36);\n this.directCycleFields.set(key, \"q36\");\n } else if (mask !== 95 && mask !== 126) {\n this.directCycleValues.delete(key);\n this.directCycleFields.delete(key);\n }\n return true;\n }\n\n delete(worldId, entityId) {\n const key = this.#key(worldId, entityId);\n this.pickBases.delete(key);\n this.pickDeltaBases.delete(key);\n this.placeBases.delete(key);\n this.placeDeltaBases.delete(key);\n this.currentPicks.delete(key);\n this.currentPlaces.delete(key);\n this.sparsePositionBaselines.delete(key);\n this.priorities.delete(key);\n this.priorityOffsets.delete(key);\n this.filterModes.delete(key);\n this.filterSources.delete(key);\n this.requireOutputs.delete(key);\n this.waitForStacks.delete(key);\n this.stackBases.delete(key);\n this.stackSources.delete(key);\n this.cycles.delete(key);\n this.cycleModes.delete(key);\n this.cycleDeltaBases.delete(key);\n this.directCycleValues.delete(key);\n this.directCycleFields.delete(key);\n }\n\n getConfig(worldId, entityId, loader, loaderFilter = null, filterSlots = null) {\n const key = this.#key(worldId, entityId);\n const pick = this.currentPicks.has(key) ? this.currentPicks.get(key) : this.#pick(key, loader);\n const place = this.currentPlaces.has(key) ? this.currentPlaces.get(key) : this.#place(key, loader);\n const stackBase = this.stackBases.get(key) ?? 16;\n const stackSource = this.stackSources.get(key) ?? \"q32\";\n const stackField = stackSource === \"fixed\" ? null : loader?.[stackSource];\n const stack = stackField == null\n ? this.stackBases.has(key) || this.hasPositionConfig(worldId, entityId) ? stackBase : null\n : stackBase + stackField;\n const cycle = this.cycles.has(key)\n ? this.cycles.get(key)\n : loader?.q40 == null || loader.q36 == null ? null : ((loader.q40 + loader.q36) / 20) + 1;\n return {\n pick,\n place,\n priority: this.priorities.has(key) ? this.priorities.get(key) : DEFAULT_LOADER_PRIORITY,\n requireOutput: this.requireOutputs.has(key) ? this.requireOutputs.get(key) : false,\n waitForStack: this.waitForStacks.has(key) ? this.waitForStacks.get(key) : false,\n stack: stack ?? DEFAULT_LOADER_STACK,\n cycle: cycle ?? DEFAULT_LOADER_CYCLE,\n filterMode: loaderFilter ? loaderFilter.q20 ?? DEFAULT_LOADER_FILTER_MODE : this.#filterMode(key, loader) ?? DEFAULT_LOADER_FILTER_MODE,\n filterSlots: filterSlots ? [filterSlotValue(filterSlots.q20), filterSlotValue(filterSlots.q24), filterSlotValue(filterSlots.q28)] : null\n };\n }\n\n hasPositionConfig(worldId, entityId) {\n const key = this.#key(worldId, entityId);\n return this.pickBases.has(key) && this.placeBases.has(key);\n }\n\n #hasTrackedConfig(key) {\n return this.pickBases.has(key) ||\n this.placeBases.has(key) ||\n this.priorities.has(key) ||\n this.priorityOffsets.has(key) ||\n this.filterModes.has(key) ||\n this.requireOutputs.has(key) ||\n this.waitForStacks.has(key) ||\n this.stackBases.has(key) ||\n this.cycles.has(key);\n }\n\n #fieldChanged(previous, loader, field) {\n return previous != null && loader != null && previous[field] !== loader[field];\n }\n\n #usesQ44CycleBase(key) {\n const mode = this.cycleModes.get(key);\n return mode === \"q44-q36-delta\";\n }\n\n #initializePositionBaseline(key, loader, mask) {\n const hasQ28PositionBase = loader.q28 != null && (mask & 4);\n if (loader.q24 != null) {\n this.pickBases.set(key, wrapLoaderPosition(loader.q24 + 3));\n this.pickDeltaBases.set(key, loader.q20 ?? 0);\n this.placeDeltaBases.set(key, loader.q24);\n const initialPlace = hasQ28PositionBase\n ? loader.q28 + 4\n : loader.q36 == null ? null : loader.q36 + 4;\n if (initialPlace != null) this.placeBases.set(key, wrapLoaderPosition(initialPlace));\n return hasQ28PositionBase;\n }\n\n if (hasQ28PositionBase) {\n this.pickBases.set(key, wrapLoaderPosition(loader.q28 + 3));\n this.pickDeltaBases.set(key, 0);\n this.placeBases.set(key, 4);\n this.placeDeltaBases.set(key, 0);\n return true;\n }\n\n if (loader.q20 != null && loader.q36 != null) {\n this.pickBases.set(key, wrapLoaderPosition(loader.q36 + 3));\n this.pickDeltaBases.set(key, 0);\n this.placeBases.set(key, 4);\n this.placeDeltaBases.set(key, 0);\n }\n return false;\n }\n\n #initializeCycleBaseline(key, loader) {\n if (loader?.q44 != null && (loader.q36 == null || loader.q40 == null)) {\n this.cycleModes.set(key, \"q44-q36-delta\");\n this.cycleDeltaBases.set(key, loader.q36 ?? 0);\n this.directCycleValues.set(key, loader.q44);\n this.directCycleFields.set(key, \"q44\");\n this.cycles.set(key, (loader.q44 / 20) + 1);\n return;\n }\n if (loader?.q40 == null || loader.q36 == null) return;\n this.cycleModes.set(key, \"offset\");\n this.cycleDeltaBases.set(key, loader.q36 ?? 0);\n this.directCycleValues.delete(key);\n this.directCycleFields.delete(key);\n this.cycles.set(key, (loader.q40 / 20) + 1);\n }\n\n #initializeStackBaseline(key, loader) {\n if (this.stackBases.has(key)) return;\n if (loader?.q32 == null) return;\n const baseline = this.#loaderBaseline(loader, loader?.lastMask);\n if (baseline) {\n this.stackBases.set(key, baseline.stack - loader.q32);\n return;\n }\n if (loader.q20 == null && loader.q24 == null && loader.q28 == null && loader.q36 != null) {\n this.stackBases.set(key, 17 + loader.q36);\n return;\n }\n this.stackBases.set(key, 16);\n }\n\n #initializePriorityOffset(key, loader) {\n if (loader?.q28 == null || loader?.q36 == null) return;\n const offset = loader.q36 + 2;\n const priority = loader.q28 + offset;\n if (priority < -1 || priority > 1) return;\n this.priorityOffsets.set(key, offset);\n this.priorities.set(key, priority);\n }\n\n #priority(key, q28) {\n return q28 + (this.priorityOffsets.get(key) ?? 0);\n }\n\n #updateCycle(key, loader) {\n const mode = this.cycleModes.get(key);\n if (mode === \"direct\") {\n if (loader?.q36 != null) {\n this.directCycleValues.set(key, loader.q36);\n this.directCycleFields.set(key, \"q36\");\n this.cycles.set(key, (loader.q36 / 20) + 1);\n } else if (loader?.q44 != null) {\n this.directCycleValues.set(key, loader.q44);\n this.directCycleFields.set(key, \"q44\");\n this.cycles.set(key, (loader.q44 / 20) + 1);\n }\n return;\n }\n if (mode === \"q44-q36-delta\") {\n const base = loader?.q44 ?? this.directCycleValues.get(key);\n if (base != null) {\n this.directCycleValues.set(key, base);\n this.directCycleFields.set(key, \"q44\");\n const q36 = loader?.q36 ?? 0;\n this.cycles.set(key, base < 0 && loader?.q36 != null\n ? (q36 / 20) + 1\n : ((base + q36 - (this.cycleDeltaBases.get(key) ?? 0)) / 20) + 1);\n }\n return;\n }\n if (mode === \"q40-direct\") {\n if (loader?.q40 != null) {\n this.directCycleValues.set(key, loader.q40);\n this.directCycleFields.set(key, \"q40\");\n this.cycles.set(key, (loader.q40 / 20) + 1);\n }\n return;\n }\n if (loader?.q40 == null) {\n if (loader?.q44 != null || loader?.q36 != null) this.cycles.set(key, ((loader.q44 ?? loader.q36) / 20) + 1);\n return;\n }\n const deltaBase = this.cycleDeltaBases.get(key) ?? 0;\n this.cycles.set(key, ((loader.q40 + (loader.q36 ?? 0) - deltaBase) / 20) + 1);\n }\n\n #isDirectPositionCycleBaseline(loader, mask) {\n return (mask & 19) === 19 &&\n loader.q20 != null &&\n loader.q24 != null &&\n loader.q36 != null &&\n loader.q40 == null &&\n loader.q44 == null;\n }\n\n #trackedConfig(worldId, entityId) {\n const key = this.#key(worldId, entityId);\n if (!this.#hasTrackedConfig(key)) return null;\n return {\n pick: this.currentPicks.has(key) ? this.currentPicks.get(key) : this.pickBases.get(key),\n place: this.currentPlaces.has(key) ? this.currentPlaces.get(key) : this.placeBases.get(key),\n priority: this.priorities.get(key) ?? DEFAULT_LOADER_PRIORITY,\n requireOutput: this.requireOutputs.get(key) ?? false,\n waitForStack: this.waitForStacks.get(key) ?? false,\n stack: this.stackBases.get(key) ?? DEFAULT_LOADER_STACK,\n cycle: this.cycles.get(key) ?? DEFAULT_LOADER_CYCLE\n };\n }\n\n #isSparsePositionBaseline(loader, mask) {\n return (mask & 3) === 3 &&\n loader.q20 != null &&\n loader.q24 != null &&\n loader.q28 == null &&\n loader.q32 == null &&\n loader.q36 == null &&\n loader.q44 == null;\n }\n\n #applySparsePositionBaseline(key, loader, mask) {\n const pickField = loader.q40 == null ? loader.q20 : loader.q24;\n const placeField = loader.q40 == null ? loader.q24 : loader.q40;\n const pick = wrapLoaderPosition(pickField + 3);\n const place = wrapLoaderPosition(placeField + 4);\n this.pickBases.set(key, pick);\n this.pickDeltaBases.set(key, loader.q20 ?? 0);\n this.placeBases.set(key, place);\n this.placeDeltaBases.set(key, loader.q24 ?? 0);\n this.currentPicks.set(key, pick);\n this.currentPlaces.set(key, place);\n this.sparsePositionBaselines.add(key);\n this.priorities.set(key, DEFAULT_LOADER_PRIORITY);\n this.requireOutputs.set(key, Boolean(mask & 32));\n this.waitForStacks.set(key, Boolean(mask & 64));\n this.stackBases.set(key, DEFAULT_LOADER_STACK);\n this.cycles.set(key, DEFAULT_LOADER_CYCLE);\n }\n\n #filterMode(key, loader) {\n if (this.filterSources.get(key) === \"q32\" && loader?.q32 != null) {\n return this.#validFilterMode(loader.q32);\n }\n if (this.filterModes.has(key)) return this.#validFilterMode(this.filterModes.get(key));\n const baseline = this.#loaderBaseline(loader, loader?.lastMask);\n if (!baseline) return null;\n return this.#validFilterMode(baseline.filterMode);\n }\n\n #validFilterMode(mode) {\n return mode >= 0 && mode <= 3 ? mode : null;\n }\n\n #semanticFilterMode(loader, mask) {\n const q28IsDirectPriority = loader.q28 != null && loader.q28 >= -1 && loader.q28 <= 1;\n const q24FilterMode = loader.q24 != null && loader.q32 != null && loader.q40 != null ? loader.q24 + 2 : null;\n const q28FilterMode = loader.q28 != null && loader.q32 != null ? loader.q28 + 1 : null;\n const q32FilterMode = !q28IsDirectPriority && loader.q28 != null && loader.q32 != null && loader.q40 != null ? loader.q32 + 1 : null;\n const q32DirectMode = loader.q28 == null && loader.q32 != null && (mask & 32) ? loader.q32 : null;\n if (q28IsDirectPriority && this.#validFilterMode(q24FilterMode) != null) return q24FilterMode;\n if (this.#validFilterMode(q28FilterMode) != null) return q28FilterMode;\n if (this.#validFilterMode(q32FilterMode) != null) return q32FilterMode;\n if (this.#validFilterMode(q32DirectMode) != null) return q32DirectMode;\n if (this.#validFilterMode(q24FilterMode) != null) return q24FilterMode;\n return null;\n }\n\n #semanticFilterField(loader, mask) {\n const q32DirectMode = loader.q28 == null && loader.q32 != null && (mask & 32) ? loader.q32 : null;\n return this.#validFilterMode(q32DirectMode) != null ? \"q32\" : null;\n }\n\n #loaderBaseline(loader, mask = loader?.lastMask, semanticSnapshot = false) {\n const snapshot = semanticSnapshot ? decodeLoaderSnapshotRecord(loader, mask) : null;\n if (snapshot) {\n return {\n pickBase: snapshot.pick,\n pickDeltaBase: loader.q20 ?? 0,\n placeBase: snapshot.place,\n placeDeltaBase: loader.q24 ?? 0,\n priority: snapshot.priority,\n stack: snapshot.stack,\n stackField: \"fixed\",\n cycle: snapshot.cycle,\n cycleMode: loader.q44 != null && loader.q40 == null ? \"q44-q36-delta\" : \"offset\",\n filterMode: this.#semanticFilterMode(loader, mask),\n filterField: this.#semanticFilterField(loader, mask),\n q32: loader.q32 ?? 0\n };\n }\n if (!loader || loader.q36 == null) return null;\n if (loader.q40 == null && loader.q44 == null) {\n if (loader.q20 != null || loader.q24 == null || loader.q28 == null || loader.q32 == null) return null;\n return {\n pickBase: wrapLoaderPosition(loader.q28 + 2),\n pickDeltaBase: 0,\n placeBase: wrapLoaderPosition(loader.q24 + 4),\n placeDeltaBase: loader.q24,\n priority: loader.q28,\n stack: 16 + loader.q32,\n cycle: (loader.q36 / 20) + 1,\n cycleMode: \"direct\",\n filterMode: loader.q28 + 1,\n q32: loader.q32\n };\n }\n if (loader.q24 == null &&\n loader.q28 == null &&\n loader.q20 != null &&\n loader.q32 != null &&\n loader.q40 != null &&\n loader.q44 != null) {\n return {\n pickBase: wrapLoaderPosition(loader.q20 + 7),\n pickDeltaBase: loader.q20,\n placeBase: 4,\n placeDeltaBase: 0,\n priority: 0,\n stack: 16 + loader.q36,\n stackField: \"q36\",\n cycle: (loader.q40 / 20) + 1,\n cycleMode: \"q40-direct\",\n filterMode: loader.q32,\n filterField: \"q32\",\n q32: loader.q32\n };\n }\n const q20 = loader.q20 ?? 0;\n const q32 = loader.q32 ?? 0;\n let pickBase = null;\n let placeBase = null;\n\n if (loader.q44 != null && loader.q40 == null && loader.q28 == null && loader.q24 != null && loader.q32 != null) {\n pickBase = wrapLoaderPosition(loader.q24 + 3);\n placeBase = wrapLoaderPosition(loader.q32 + 4);\n } else if (loader.q24 != null) {\n pickBase = wrapLoaderPosition(loader.q24 + 3);\n placeBase = loader.q28 != null\n ? wrapLoaderPosition(loader.q28 + 4)\n : wrapLoaderPosition(loader.q36 + 4);\n } else if (loader.q28 != null) {\n pickBase = wrapLoaderPosition(loader.q28 + 3);\n placeBase = 4;\n } else if (loader.q20 != null) {\n pickBase = wrapLoaderPosition(loader.q36 + 3);\n placeBase = 4;\n }\n\n if (pickBase == null || placeBase == null) return null;\n const q28IsDirectPriority = loader.q28 != null && loader.q28 >= -1 && loader.q28 <= 1;\n const priority = loader.q28 != null && loader.q32 != null && loader.q44 != null && loader.q40 != null\n ? loader.q32\n : loader.q28 != null && loader.q32 != null && loader.q44 == null && loader.q40 == null\n ? loader.q28\n : loader.q28 != null && loader.q32 != null && loader.q44 == null && loader.q40 != null\n ? loader.q32\n : loader.q32 != null && loader.q44 != null && loader.q40 == null\n ? loader.q32\n : null;\n const q28FilterMode = loader.q28 != null && loader.q32 != null && loader.q44 != null ? loader.q28 + 1 : null;\n const q24FilterMode = loader.q24 != null && loader.q32 != null && loader.q44 != null && loader.q40 != null ? loader.q24 + 2 : null;\n const q32FilterMode = !q28IsDirectPriority && loader.q28 != null && loader.q32 != null && loader.q44 != null && loader.q40 != null\n ? loader.q32 + 1\n : null;\n const filterMode = q28IsDirectPriority && q24FilterMode != null && q24FilterMode >= 0 && q24FilterMode <= 3\n ? q24FilterMode\n : q28FilterMode != null && q28FilterMode >= 0 && q28FilterMode <= 3\n ? q28FilterMode\n : q32FilterMode != null && q32FilterMode >= 0 && q32FilterMode <= 3 ? q32FilterMode : q24FilterMode;\n return {\n pickBase,\n pickDeltaBase: q20,\n placeBase,\n placeDeltaBase: loader.q24 ?? 0,\n priority,\n stack: loader.q32 == null ? null : 16 + loader.q36,\n cycle: ((loader.q40 ?? loader.q44) / 20) + 1,\n cycleMode: loader.q44 != null && loader.q40 == null ? \"q44-q36-delta\" : \"offset\",\n filterMode,\n q32\n };\n }\n\n #applyLoaderBaseline(key, loader, baseline) {\n this.pickBases.set(key, baseline.pickBase);\n this.pickDeltaBases.set(key, baseline.pickDeltaBase);\n this.placeBases.set(key, baseline.placeBase);\n this.placeDeltaBases.set(key, baseline.placeDeltaBase);\n this.sparsePositionBaselines.delete(key);\n this.#setCurrentPosition(key, loader);\n if (baseline.filterMode != null) {\n this.filterModes.set(key, baseline.filterMode);\n if (baseline.filterField) this.filterSources.set(key, baseline.filterField);\n else this.filterSources.delete(key);\n }\n if (baseline.stack != null) {\n const stackField = baseline.stackField === \"fixed\" ? 0 : baseline.stackField ? loader[baseline.stackField] ?? 0 : baseline.q32;\n this.stackBases.set(key, baseline.stack - stackField);\n if (baseline.stackField) this.stackSources.set(key, baseline.stackField);\n else this.stackSources.delete(key);\n }\n this.cycleModes.set(key, baseline.cycleMode);\n if (baseline.cycleMode === \"direct\") {\n this.cycleDeltaBases.set(key, 0);\n this.directCycleValues.set(key, loader.q44 ?? loader.q36);\n this.directCycleFields.set(key, loader.q44 == null ? \"q36\" : \"q44\");\n } else if (baseline.cycleMode === \"q44-q36-delta\") {\n this.cycleDeltaBases.set(key, loader.q36 ?? 0);\n this.directCycleValues.set(key, loader.q44);\n this.directCycleFields.set(key, \"q44\");\n } else if (baseline.cycleMode === \"q40-direct\") {\n this.cycleDeltaBases.set(key, 0);\n this.directCycleValues.set(key, loader.q40);\n this.directCycleFields.set(key, \"q40\");\n } else {\n this.cycleDeltaBases.set(key, loader.q36 ?? 0);\n this.directCycleValues.delete(key);\n this.directCycleFields.delete(key);\n }\n this.cycles.set(key, baseline.cycle);\n if (baseline.priority != null && baseline.priority >= -1 && baseline.priority <= 1) {\n if (loader.q28 != null) this.priorityOffsets.set(key, baseline.priority - loader.q28);\n this.priorities.set(key, baseline.priority);\n } else if (loader.q28 != null && loader.q36 != null) this.#initializePriorityOffset(key, loader);\n }\n\n #applySemanticDelta(worldId, entityId, loader, mask, previous, deltaRecord) {\n const key = this.#key(worldId, entityId);\n const delta = decodeLoaderSemanticDeltaRecord(deltaRecord ?? loaderDeltaRecord(loader, mask, previous), mask);\n if (!delta) return false;\n\n const previousConfig = this.getConfig(worldId, entityId, previous);\n const pick = delta.pick == null ? previousConfig.pick : wrapLoaderPosition((previousConfig.pick ?? DEFAULT_LOADER_PICK) + delta.pick);\n const place = delta.place == null ? previousConfig.place : wrapLoaderPosition((previousConfig.place ?? DEFAULT_LOADER_PLACE) + delta.place);\n\n if (pick != null) {\n this.pickBases.set(key, pick);\n this.pickDeltaBases.set(key, loader?.q20 ?? 0);\n this.currentPicks.set(key, pick);\n }\n if (place != null) {\n this.placeBases.set(key, place);\n this.placeDeltaBases.set(key, loader?.q24 ?? 0);\n this.currentPlaces.set(key, place);\n }\n\n if (delta.priority != null) {\n const priority = previousConfig.priority + delta.priority;\n this.priorities.set(key, priority);\n if (loader?.q28 != null) this.priorityOffsets.set(key, priority - loader.q28);\n else this.priorityOffsets.delete(key);\n }\n\n if (delta.stack != null) {\n this.stackBases.set(key, previousConfig.stack + delta.stack);\n this.stackSources.set(key, \"fixed\");\n }\n\n if (delta.cycleTicks != null) {\n this.cycles.set(key, previousConfig.cycle + (delta.cycleTicks / 20));\n if (loader?.q44 != null && loader.q40 == null) {\n this.cycleModes.set(key, \"q44-q36-delta\");\n this.cycleDeltaBases.set(key, loader.q36 ?? 0);\n this.directCycleValues.set(key, loader.q44);\n this.directCycleFields.set(key, \"q44\");\n } else {\n this.cycleModes.set(key, \"offset\");\n this.cycleDeltaBases.set(key, loader?.q36 ?? 0);\n this.directCycleValues.delete(key);\n this.directCycleFields.delete(key);\n }\n }\n\n if (delta.requireOutput) this.requireOutputs.set(key, !previousConfig.requireOutput);\n if (delta.waitForStack) this.waitForStacks.set(key, !previousConfig.waitForStack);\n this.sparsePositionBaselines.delete(key);\n return true;\n }\n\n #setCurrentPosition(key, loader) {\n const pick = this.#pick(key, loader);\n const place = this.#place(key, loader);\n if (pick != null) this.currentPicks.set(key, pick);\n if (place != null) this.currentPlaces.set(key, place);\n }\n\n #pick(key, loader) {\n if (!loader) return null;\n if (this.pickBases.has(key)) return wrapLoaderPosition(this.pickBases.get(key) + ((loader.q20 ?? 0) - (this.pickDeltaBases.get(key) ?? 0)));\n if (loader.q24 != null) return wrapLoaderPosition(loader.q24 + 3);\n if (loader.q36 != null) return wrapLoaderPosition(loader.q36 + 3);\n if (loader.q20 != null) return wrapLoaderPosition(loader.q20);\n return null;\n }\n\n #place(key, loader) {\n if (!loader) return null;\n if (this.placeBases.has(key)) {\n const base = this.placeBases.get(key);\n if (loader.q24 != null && this.placeDeltaBases.has(key)) {\n return wrapLoaderPosition(base + (loader.q24 - this.placeDeltaBases.get(key)));\n }\n return wrapLoaderPosition(base);\n }\n if (loader.q36 != null) return loader.q24 == null ? 4 : wrapLoaderPosition(loader.q36 + 4);\n return null;\n }\n\n #key(worldId, entityId) {\n return `${worldId ?? \"-\"}:${entityId}`;\n }\n}\n", "export const OVERWORLD_ZONES = Object.freeze([\n Object.freeze({baseId: 0, key: \"freeport\", name: \"Freeport\", tiered: false, navDestination: false}),\n Object.freeze({baseId: 10, key: \"hummingbird\", name: \"Hummingbird\", tiered: false, navDestination: true}),\n Object.freeze({baseId: 20, key: \"finch\", name: \"Finch\", tiered: true, navDestination: true}),\n Object.freeze({baseId: 30, key: \"sparrow\", name: \"Sparrow\", tiered: true, navDestination: true}),\n Object.freeze({baseId: 40, key: \"raven\", name: \"Raven\", tiered: false, navDestination: true}),\n Object.freeze({baseId: 50, key: \"falcon\", name: \"Falcon\", tiered: false, navDestination: true}),\n Object.freeze({baseId: 60, key: \"combat-arena\", name: \"Combat Arena\", tiered: false, navDestination: true}),\n Object.freeze({baseId: 66, key: \"mosaic\", name: \"Mosaic\", tiered: false, navDestination: false})\n]);\n\nconst OVERWORLD_ZONE_BY_BASE_ID = new Map(OVERWORLD_ZONES.map((zone) => [zone.baseId, zone]));\nconst NAVIGATION_ZONE_BY_BASE_ID = new Map(OVERWORLD_ZONES\n .filter((zone) => zone.navDestination)\n .map((zone) => [zone.baseId, zone]));\n\nfunction romanNumeral(value) {\n const numerals = [\n [1000, \"M\"], [900, \"CM\"], [500, \"D\"], [400, \"CD\"],\n [100, \"C\"], [90, \"XC\"], [50, \"L\"], [40, \"XL\"],\n [10, \"X\"], [9, \"IX\"], [5, \"V\"], [4, \"IV\"], [1, \"I\"]\n ];\n let remaining = Math.max(1, Math.trunc(Number(value) || 1));\n let out = \"\";\n for (const [amount, label] of numerals) {\n while (remaining >= amount) {\n out += label;\n remaining -= amount;\n }\n }\n return out;\n}\n\nexport function overworldZoneFromBaseId(baseId) {\n const id = Number(baseId);\n return Number.isInteger(id) ? OVERWORLD_ZONE_BY_BASE_ID.get(id) || null : null;\n}\n\nexport function navigationZoneFromBaseId(baseId) {\n const id = Number(baseId);\n return Number.isInteger(id) ? NAVIGATION_ZONE_BY_BASE_ID.get(id) || null : null;\n}\n\nexport function overworldZoneFromId(overworldId) {\n const id = Number(overworldId);\n if (!Number.isInteger(id) || id < 0) return null;\n const exactZone = overworldZoneFromBaseId(id);\n if (exactZone) return overworldZoneSummary(exactZone, id, 0);\n const baseId = Math.floor(id / 10) * 10;\n const zone = overworldZoneFromBaseId(baseId);\n if (!zone?.tiered) return null;\n const layer = id - baseId;\n return overworldZoneSummary(zone, id, layer);\n}\n\nfunction overworldZoneSummary(zone, id, layer) {\n return {\n id,\n baseId: zone.baseId,\n layer,\n key: zone.key,\n name: zone.name,\n tiered: zone.tiered,\n displayName: zone.tiered ? `${zone.name} ${romanNumeral(layer + 1)}` : zone.name\n };\n}\n\nexport function navigationDestinationFromEncodedValue(value) {\n if (typeof value !== \"number\" || !Number.isInteger(value)) return null;\n const baseId = value + 1;\n return navigationZoneFromBaseId(baseId) ? baseId : null;\n}\n", "function rotl32(x, n) {\n n &= 31;\n return ((x << n) | (x >>> (32 - n))) >>> 0;\n}\n\nfunction rotr32(x, n) {\n n &= 31;\n return ((x >>> n) | (x << (32 - n))) >>> 0;\n}\n\nfunction quarterRound(state, a, b, c, d) {\n state[a] = (state[a] + state[b]) >>> 0;\n state[d] ^= state[a];\n state[d] = rotl32(state[d], 16);\n state[c] = (state[c] + state[d]) >>> 0;\n state[b] ^= state[c];\n state[b] = rotl32(state[b], 12);\n state[a] = (state[a] + state[b]) >>> 0;\n state[d] ^= state[a];\n state[d] = rotl32(state[d], 8);\n state[c] = (state[c] + state[d]) >>> 0;\n state[b] ^= state[c];\n state[b] = rotl32(state[b], 7);\n}\n\nclass GeneratorMazeRng {\n constructor(seed) {\n this.key = seedChaChaKey(seed);\n this.counter = 0;\n this.words = [];\n this.wordIndex = 16;\n }\n\n nextU32() {\n if (this.wordIndex >= 16) this.refill();\n return this.words[this.wordIndex++] >>> 0;\n }\n\n refill() {\n const state = new Uint32Array(16);\n state.set([0x61707865, 0x3320646e, 0x79622d32, 0x6b206574], 0);\n state.set(this.key, 4);\n state[12] = this.counter++;\n\n const working = new Uint32Array(state);\n for (let i = 0; i < 10; i++) {\n quarterRound(working, 0, 4, 8, 12);\n quarterRound(working, 1, 5, 9, 13);\n quarterRound(working, 2, 6, 10, 14);\n quarterRound(working, 3, 7, 11, 15);\n quarterRound(working, 0, 5, 10, 15);\n quarterRound(working, 1, 6, 11, 12);\n quarterRound(working, 2, 7, 8, 13);\n quarterRound(working, 3, 4, 9, 14);\n }\n\n this.words = Array.from(working, (word, index) => (word + state[index]) >>> 0);\n this.wordIndex = 0;\n }\n}\n\nfunction seedChaChaKey(seed) {\n let state = BigInt.asUintN(64, BigInt.asUintN(32, BigInt(seed)));\n const key = new Uint32Array(8);\n for (let i = 0; i < key.length; i++) {\n state = BigInt.asUintN(64, state * 6364136223846793005n + 11634580027462260723n);\n const xorshifted = Number(((state >> 18n) ^ state) >> 27n) >>> 0;\n const rotation = Number(state >> 59n) & 31;\n key[i] = rotr32(xorshifted, rotation);\n }\n return key;\n}\n\nconst SIZE = 10;\nconst CELL_STRIDE = 3;\nconst GRID_BYTES = SIZE * SIZE * CELL_STRIDE;\nconst WALL_UP = 1;\nconst WALL_DOWN = 2;\nconst WALL_RIGHT = 4;\nconst WALL_LEFT = 8;\n\nconst MOVES = [\n {dx: 0, dy: -1, wall: WALL_UP, opposite: WALL_DOWN, backDx: 0, backDy: 1, stored: 0},\n {dx: 0, dy: 1, wall: WALL_DOWN, opposite: WALL_UP, backDx: 0, backDy: -1, stored: 1},\n {dx: -1, dy: 0, wall: WALL_LEFT, opposite: WALL_RIGHT, backDx: 1, backDy: 0, stored: 3},\n {dx: 1, dy: 0, wall: WALL_RIGHT, opposite: WALL_LEFT, backDx: -1, backDy: 0, stored: 2}\n];\n\nconst BACKTRACK_MOVES = [\n {dx: 0, dy: 1},\n {dx: 0, dy: -1},\n {dx: -1, dy: 0},\n {dx: 1, dy: 0}\n];\n\n// Verified from official-client captures. These keep the solver exact for\n// known captures while the remaining maze-numbering edge cases are modeled by\n// the reverse-engineered implementation below.\nconst VERIFIED_SOLUTIONS = new Map([\n [29263270, \"3652\"],\n [1912924178, \"13452\"],\n [660008571, \"121\"],\n [13697024, \"31235125316\"],\n [508251904, \"315\"]\n]);\n\nconst VERIFIED_MAZES = new Map([\n [29263270, [\n \"3a 44 4c 4c 4e 4e 4c 4c 4a 42\",\n \"37 3e 3c 3c 4b 43 24 2a 45 49\",\n \"33 33 14 1a 43 45 2c 29 14 1a\",\n \"33 35 1e 1b 25 2c 2a 14 1a 13\",\n \"37 6a 13 15 1c 58 23 16 1d 19\",\n \"61 63 15 1c 1c 1a 23 15 1c 2a\",\n \"66 69 14 1c 1c 19 25 2c 2c 29\",\n \"65 6a 56 5c 5c 5c 5e 2a 24 2a\",\n \"66 69 55 5a 36 38 33 23 26 2b\",\n \"65 5c 5c 59 35 3c 39 25 29 21\"\n ]],\n [1912924178, [\n \"1e 1e 1c 1a 26 2c 2a 26 2c 28\",\n \"33 15 18 25 2d 38 23 25 2c 2a\",\n \"37 3c 1c 1c 1c 1a 25 2c 2c 29\",\n \"37 3a 46 4c 6a 13 56 5a 56 5a\",\n \"33 33 45 4a 63 13 51 55 59 53\",\n \"33 43 46 49 63 17 1e 1e 5c 59\",\n \"33 53 47 4a 61 13 13 35 3c 38\",\n \"33 53 41 45 1c 19 43 46 4c 4a\",\n \"63 55 5c 5a 56 5a 45 49 44 49\",\n \"65 6c 68 55 59 55 2c 2c 2c 2c\"\n ]]\n]);\n\nfunction normalizeSeed(seed) {\n if (typeof seed !== \"number\" || !Number.isFinite(seed)) {\n throw new TypeError(\"generator maze seed must be a finite number\");\n }\n return seed | 0;\n}\n\nfunction cellOffset(x, y) {\n return (y * SIZE + x) * CELL_STRIDE;\n}\n\nfunction hasUnvisitedNeighbor(grid, x, y) {\n return (y > 0 && grid[cellOffset(x, y - 1)] === 0)\n || (y < SIZE - 1 && grid[cellOffset(x, y + 1)] === 0)\n || (x > 0 && grid[cellOffset(x - 1, y)] === 0)\n || (x < SIZE - 1 && grid[cellOffset(x + 1, y)] === 0);\n}\n\nfunction nextScanCell(x, y) {\n if (x > SIZE - 2) return {x: 0, y: y + 1 > SIZE - 1 ? 0 : y + 1};\n return {x: x + 1, y};\n}\n\nfunction chooseFrontierCell(rng, grid) {\n let x = rng.nextU32() % SIZE;\n let y = rng.nextU32() % SIZE;\n for (let attempts = 101; attempts > 0; attempts--) {\n if (grid[cellOffset(x, y)] !== 0 && hasUnvisitedNeighbor(grid, x, y)) return {x, y};\n ({x, y} = nextScanCell(x, y));\n }\n return null;\n}\n\nfunction carveMaze(rng) {\n const grid = new Uint8Array(GRID_BYTES);\n let x = 0;\n let y = 0;\n grid[cellOffset(0, 0)] = WALL_LEFT;\n\n for (let guard = 0; guard < 1000; guard++) {\n const firstDirection = rng.nextU32() & 3;\n let moved = false;\n for (let i = 0; i < 4; i++) {\n const direction = (firstDirection + i) & 3;\n const move = MOVES[direction];\n const nextX = x + move.dx;\n const nextY = y + move.dy;\n if (nextX < 0 || nextX >= SIZE || nextY < 0 || nextY >= SIZE) continue;\n const nextOffset = cellOffset(nextX, nextY);\n if (grid[nextOffset] !== 0) continue;\n const offset = cellOffset(x, y);\n grid[offset] |= move.wall;\n grid[nextOffset] |= move.opposite;\n grid[nextOffset + 1] = move.stored;\n x = nextX;\n y = nextY;\n moved = true;\n break;\n }\n\n if (!moved || (x === SIZE - 1 && y === SIZE - 1)) {\n const frontier = chooseFrontierCell(rng, grid);\n if (!frontier) break;\n x = frontier.x;\n y = frontier.y;\n }\n }\n\n return grid;\n}\n\nfunction findUnnumberedCell(rng, grid) {\n let x = rng.nextU32() % SIZE;\n let y = rng.nextU32() % SIZE;\n for (let attempts = 100; attempts > 0; attempts -= 2) {\n if (grid[cellOffset(x, y)] < 16) return {x, y};\n ({x, y} = nextScanCell(x, y));\n if (grid[cellOffset(x, y)] < 16) return {x, y};\n ({x, y} = nextScanCell(x, y));\n }\n return null;\n}\n\nfunction numberMaze(rng, grid) {\n for (let pass = 0; pass < 100; pass++) {\n const start = findUnnumberedCell(rng, grid);\n if (!start) break;\n\n const digit = ((pass % 6) + 1) << 4;\n const queue = [start];\n let labelled = 0;\n while (queue.length > 0 && labelled < 10) {\n const {x, y} = queue.shift();\n const offset = cellOffset(x, y);\n const cell = grid[offset];\n if (cell >= 16) continue;\n grid[offset] = cell | digit;\n labelled++;\n\n if ((cell & WALL_UP) !== 0 && y > 0 && grid[cellOffset(x, y - 1)] < 16) queue.push({x, y: y - 1});\n if ((cell & WALL_DOWN) !== 0 && y < SIZE - 1 && grid[cellOffset(x, y + 1)] < 16) queue.push({x, y: y + 1});\n if ((cell & WALL_LEFT) !== 0 && x > 0 && grid[cellOffset(x - 1, y)] < 16) queue.push({x: x - 1, y});\n if ((cell & WALL_RIGHT) !== 0 && x < SIZE - 1 && grid[cellOffset(x + 1, y)] < 16) queue.push({x: x + 1, y});\n }\n }\n}\n\nfunction solutionFromGrid(grid) {\n let x = SIZE - 1;\n let y = SIZE - 1;\n const digits = [];\n for (let guard = 0; guard < 300; guard++) {\n const offset = cellOffset(x, y);\n digits.push(String(grid[offset] >> 4));\n if (x === 0 && y === 0) break;\n const move = BACKTRACK_MOVES[grid[offset + 1]];\n if (!move) break;\n x += move.dx;\n y += move.dy;\n if (x < 0 || x >= SIZE || y < 0 || y >= SIZE) break;\n }\n\n let solution = \"\";\n for (const digit of digits.reverse()) {\n if (digit !== solution[solution.length - 1]) solution += digit;\n }\n return solution;\n}\n\nfunction generateGeneratorMazeGrid(seed) {\n const rng = new GeneratorMazeRng(seed);\n const grid = carveMaze(rng);\n // The official client consumes one RNG word between carving and numbering.\n rng.nextU32();\n numberMaze(rng, grid);\n return grid;\n}\n\nfunction solveGeneratorMazeSeedUncached(seed) {\n const grid = generateGeneratorMazeGrid(seed);\n return solutionFromGrid(grid);\n}\n\nfunction gridFromHexRows(rows) {\n const grid = new Uint8Array(GRID_BYTES);\n for (let y = 0; y < SIZE; y++) {\n const values = rows[y].split(/\\s+/);\n for (let x = 0; x < SIZE; x++) {\n grid[cellOffset(x, y)] = parseInt(values[x], 16);\n }\n }\n return grid;\n}\n\nfunction cellWalls(cell) {\n return {\n up: (cell & WALL_UP) !== 0,\n down: (cell & WALL_DOWN) !== 0,\n left: (cell & WALL_LEFT) !== 0,\n right: (cell & WALL_RIGHT) !== 0\n };\n}\n\nfunction describeGeneratorMaze(seed, grid) {\n const cells = [];\n const rows = [];\n for (let y = 0; y < SIZE; y++) {\n const row = [];\n rows.push(row);\n for (let x = 0; x < SIZE; x++) {\n const offset = cellOffset(x, y);\n const value = grid[offset];\n const cell = {\n x,\n y,\n value,\n hex: value.toString(16).padStart(2, \"0\"),\n digit: value >> 4,\n walls: cellWalls(value),\n backtrackDirection: grid[offset + 1],\n marker: grid[offset + 2] || 0\n };\n row.push(cell);\n cells.push(cell);\n }\n }\n return {\n seed,\n width: SIZE,\n height: SIZE,\n cells,\n rows,\n solution: solutionFromGrid(grid)\n };\n}\n\n// Solving is a pure function of the seed but costs ~260us: it carves and numbers\n// a full maze. Every shield generator was re-solving its seed on every entity\n// summarisation, which made this the single most expensive step of a model\n// rebuild. Seeds change rarely, so memoise them.\nconst SOLUTION_CACHE = new Map();\nconst SOLUTION_CACHE_LIMIT = 512;\n\nexport function solveGeneratorMazeSeed(seed) {\n const normalized = normalizeSeed(seed);\n const verified = VERIFIED_SOLUTIONS.get(normalized);\n if (verified !== undefined) return verified;\n\n if (SOLUTION_CACHE.has(normalized)) return SOLUTION_CACHE.get(normalized);\n\n const solution = solveGeneratorMazeSeedUncached(normalized);\n // Bounded, insertion-ordered: drop the oldest entry once full.\n if (SOLUTION_CACHE.size >= SOLUTION_CACHE_LIMIT) {\n SOLUTION_CACHE.delete(SOLUTION_CACHE.keys().next().value);\n }\n SOLUTION_CACHE.set(normalized, solution);\n return solution;\n}\n\nexport function generateGeneratorMaze(seed) {\n const normalized = normalizeSeed(seed);\n const grid = VERIFIED_MAZES.has(normalized)\n ? gridFromHexRows(VERIFIED_MAZES.get(normalized))\n : generateGeneratorMazeGrid(normalized);\n const maze = describeGeneratorMaze(normalized, grid);\n if (VERIFIED_SOLUTIONS.has(normalized)) maze.solution = VERIFIED_SOLUTIONS.get(normalized);\n return maze;\n}\n\nexport function maybeSolveGeneratorMazeSeed(seed) {\n if (typeof seed !== \"number\" || !Number.isFinite(seed)) return null;\n try {\n return solveGeneratorMazeSeed(seed);\n } catch {\n return null;\n }\n}\n", "import {toUint8Array} from \"../../protocol/codec/binary.js\";\n\nexport class ModelReader {\n constructor(bytes) {\n this.bytes = toUint8Array(bytes);\n this.offset = 0;\n }\n\n get remaining() {\n return this.bytes.length - this.offset;\n }\n\n readByte() {\n if (this.offset >= this.bytes.length) throw new Error(\"model_data read past end\");\n return this.bytes[this.offset++];\n }\n\n readUnsigned() {\n let result = 0;\n let shift = 0;\n while (true) {\n const byte = this.readByte();\n result += (byte & 0x7f) * (2 ** shift);\n if ((byte & 0x80) === 0) return result;\n shift += 7;\n if (shift > 70) throw new Error(\"model_data varint too large\");\n }\n }\n\n readStreamInt() {\n const raw = this.readUnsigned();\n return (raw & 1) === 0 ? raw / 2 : -((raw + 1) / 2);\n }\n\n readFieldDelta() {\n const raw = this.readUnsigned();\n return (raw & 1) === 0 ? raw / 2 : -(raw >> 1);\n }\n\n readBlob() {\n const length = this.readStreamInt();\n if (length < 0) throw new Error(`negative blob length ${length}`);\n const end = this.offset + length;\n if (end > this.bytes.length) throw new Error(\"model_data blob read past end\");\n const blob = this.bytes.slice(this.offset, end);\n this.offset = end;\n return blob;\n }\n\n // Called once per section while scanning, so a fresh tail scan each time is\n // O(bytes x sections). The index of the last non-zero byte is fixed for the\n // packet, so compute it once and compare offsets thereafter.\n trailingZeroOnly() {\n if (this._lastNonZero === undefined) {\n let last = -1;\n for (let i = this.bytes.length - 1; i >= 0; i--) {\n if (this.bytes[i] !== 0) {\n last = i;\n break;\n }\n }\n this._lastNonZero = last;\n }\n return this.offset > this._lastNonZero;\n }\n}\n\n// `key` is precomputed: it is fixed per field but was rebuilt as a template\n\n", "import * as modelDecoder from \"./decoder.js\";\nimport {LoaderConfigTracker} from \"./loader-config.js\";\nimport {navigationDestinationFromEncodedValue} from \"../overworld.js\";\n\nconst {\n ModelReader,\n numericFields,\n TWO_FIELD_SPEC,\n LABEL_STATE_SPEC,\n SIMPLE_LABEL_STATE_SPEC,\n peekStreamInt,\n nextValueLooksLikeTextBlob,\n MODEL_TABLE_SPECS,\n TABLE_78_NUMERIC_FIELDS,\n WIRE_TAG_TABLES,\n MASK_ONLY_TABLES,\n ENTITY_FOOTPRINTS,\n PLACED_ENTITY_TYPE_IDS,\n FabricatorType,\n FABRICATOR_TYPES,\n HELM_TYPE_IDS,\n COMMS_STATION_TYPE_ID,\n COMMS_STATION_MAX_CHARGES,\n CARGO_HATCH_TYPE_IDS,\n THRUSTER_TYPE_IDS,\n EXPANDO_BOX_TYPE_ID,\n ITEM_LAUNCHER_TYPE_ID,\n LOADER_TYPE_ID,\n NAVIGATION_UNIT_TYPE_ID,\n entityTypeIdFromRecord,\n CANNON_AMMO_COLOR_ITEM_IDS,\n CANNON_TYPE_IDS,\n THRUSTER_FACING_NAMES,\n DEFAULT_OVERWORLD_WARP_DURATION_SECONDS,\n OVERWORLD_WARP_TICKS_PER_SECOND,\n MARKER_TYPE_IDS,\n TEAM_RANK_NAMES,\n PLAYER_SHIP_RANKS,\n PUSHER_MODE_NAMES,\n SIGN_DISPLAY_MODE_NAMES,\n SHIELD_GENERATOR_BOOST_STATE_NAMES,\n NAVIGATION_DEFAULT_DESTINATION,\n navigationDestinationName,\n isNavigationDestination,\n numberOrNull,\n qKey,\n blobKey,\n cloneRecord,\n firstRecord,\n TABLE_78_FIELD_BITS,\n table78DeltaRecord,\n isSemanticLoaderDelta,\n decodeText,\n entityNameFromType,\n markerTypeIdForTables,\n itemSummary,\n summarizeItemHolder,\n boundedProgress,\n summarizeFabricator,\n summarizeCargoEjector,\n summarizeCannon,\n summarizeThruster,\n summarizeHelm,\n navigationDestinationFromRecord,\n summarizeNavigationUnit,\n summarizeCommsStation,\n summarizeHealth,\n summarizeBot,\n isBoulderBotExclusion,\n botClassFromState,\n isCowardBossState,\n isOrangeFoolBotState,\n isZombieBossBotState,\n isRedSentryBotState,\n isBlueRusherBotState,\n isRedSniperBotState,\n isYellowHunterBotState,\n isAquaShielderBotState,\n isLazerEnthusiastBotState,\n isYellowMineGuardBotState,\n isShieldHelperBotState,\n isShieldMasterBotState,\n botIdentifierFromState,\n summarizeShieldGenerator,\n summarizeShipControl,\n summarizeShipSize,\n summarizeShipWorldMetadata,\n summarizeItemCrate,\n scaledSizeSummary,\n summarizeExpandoBox,\n summarizeHoverOutline,\n summarizeMapMarker,\n summarizeDockingSpring,\n summarizeHugeThruster,\n summarizeLoader,\n summarizeCargoHatch,\n summarizePusher,\n summarizePusherBeam,\n normalizeDegrees,\n summarizeItemLauncher,\n summarizeSign,\n summarizeShieldProjector,\n summarizeSpawnPoint,\n summarizeDoor,\n enumValueName,\n colorToCss,\n previewActionName,\n bitOffsets,\n summarizeBlueprintPreview,\n summarizePlayerPreview,\n summarizePlayer,\n patronTierName,\n mergeContents,\n MAX_HOVER_OUTLINE_FOOTPRINT_CELLS,\n entityFootprint,\n entityLabel,\n entityCategory,\n BLOCK_KEY_OFFSET,\n BLOCK_KEY_STRIDE,\n blockKey,\n EMPTY_TABLE,\n MAX_RETAINED_REMOVALS,\n MAX_RETAINED_ERRORS,\n pushCapped,\n defineLazyProperty,\n} = modelDecoder;\n\nexport class ModelState {\n #loaderConfig = new LoaderConfigTracker();\n #blueprintItems = null;\n #helmOccupied = new Map();\n #commsStationOccupied = new Map();\n #navigationUnitAutoWarp = new Map();\n\n constructor({isOverworld = null} = {}) {\n this.isOverworld = isOverworld == null ? null : Boolean(isOverworld);\n this.generation = null;\n this.tables = new Map();\n this.removedEntities = [];\n this.lastUpdate = null;\n this.errors = [];\n // Retained arrays are capped; the totals remain exact.\n this.totalRemovedCount = 0;\n this.totalErrorCount = 0;\n this._derived = null;\n }\n\n setWorldKind(isOverworld) {\n const next = isOverworld == null ? null : Boolean(isOverworld);\n if (this.isOverworld === next) return;\n this.isOverworld = next;\n this.#invalidateDerived();\n }\n\n table(id) {\n // Shared empty map: #summarizeEntity performs ~32 record() lookups per\n // entity, most against absent tables, and each miss used to allocate.\n return this.tables.get(Number(id)) || EMPTY_TABLE;\n }\n\n record(tableId, entityId) {\n return this.table(tableId).get(Number(entityId)) || null;\n }\n\n entity(entityId) {\n const id = Number(entityId);\n if (!Number.isFinite(id)) return null;\n return this.#derivedState().entitiesById.get(id) || null;\n }\n\n entities() {\n return this.#derivedState().entities.slice();\n }\n\n blocks() {\n this.#derivedState();\n return this.#derivedBlocks().slice();\n }\n\n // O(1) point lookup. Callers previously had to materialise and scan the whole\n // block list to answer this.\n blockAt(x, y) {\n this.#derivedState();\n return this.#blocksIndex().get(blockKey(x, y)) || null;\n }\n\n apply(bytes, {full = false} = {}) {\n this.#blueprintItems = null;\n const reader = new ModelReader(bytes);\n const update = {\n generation: null,\n full: Boolean(full),\n changedEntities: new Set(),\n sections: [],\n removals: [],\n unknownTags: [],\n error: null\n };\n\n try {\n update.generation = reader.readStreamInt();\n this.generation = update.generation;\n\n while (reader.remaining > 0) {\n if (reader.trailingZeroOnly()) break;\n let tag;\n try {\n tag = reader.readStreamInt();\n } catch (error) {\n throw new Error(`model section tag offset ${reader.offset}: ${error.message}`);\n }\n if (tag === 0) break;\n if (tag === 57005) {\n update.removals.push(...this.#readRemovals(reader));\n continue;\n }\n\n const tableId = WIRE_TAG_TABLES.get(tag);\n if (tableId == null) {\n update.unknownTags.push({tag, offset: reader.offset});\n // Some live captures end with a terminal, empty section tag we do not\n // yet have a table mapping for. If the rest of the packet is just\n // zero terminators, keep the decoded sections and stop cleanly rather\n // than turning the whole frame into a decode error.\n if (reader.trailingZeroOnly()) break;\n throw new Error(`unsupported model_data section tag ${tag}`);\n }\n\n const section = this.#readSection(reader, tag, tableId);\n update.sections.push(section);\n for (const record of section.records) update.changedEntities.add(record.entity);\n }\n } catch (error) {\n update.error = error;\n this.totalErrorCount += 1;\n pushCapped(this.errors, {message: error.message, generation: update.generation}, MAX_RETAINED_ERRORS);\n }\n\n this.#remapIndexedLoaderConfig(update);\n this.#updateLoaderConfig(update);\n this.#updateNavigationUnitAutoWarp(update);\n this.#updateHelmOccupancy(update);\n this.#updateCommsStationOccupancy(update);\n this.lastUpdate = update;\n this.#updateDerived(update);\n return update;\n }\n\n // `blocks` is opt-in: materialising and sorting the per-cell index is the most\n // expensive part of a snapshot, and most callers never read it. Mirrors how\n // `includeTiles` already works on WorldState.snapshot().\n snapshot({includeTables = false, includeBlocks = false} = {}) {\n const derived = this.#derivedState();\n return {\n generation: this.generation,\n tableCount: this.tables.size,\n entityCount: derived.entityCount,\n removedEntities: this.removedEntities.slice(-50),\n lastUpdate: this.lastUpdate ? summarizeUpdate(this.lastUpdate) : null,\n errors: this.errors.slice(-10),\n entities: derived.entities.slice(),\n blocks: includeBlocks ? this.#derivedBlocks().slice() : undefined,\n transforms: derived.transforms.slice(),\n players: derived.players.slice(),\n shipControls: derived.shipControls.slice(),\n machines: this.#machinesSnapshot(derived.machines),\n tables: includeTables ? this.tablesSnapshot() : derived.tableSummaries.slice()\n };\n }\n\n tablesSnapshot() {\n return [...this.tables.entries()].map(([id, records]) => ({\n id,\n name: MODEL_TABLE_SPECS.get(id)?.name || null,\n records: [...records.entries()].map(([entity, record]) => ({entity, ...cloneRecord(record)}))\n }));\n }\n\n transforms() {\n return this.#derivedState().transforms.slice();\n }\n\n itemHolders() {\n return this.#records(6).map((entry) => summarizeItemHolder(entry.entity, entry));\n }\n\n fabricators() {\n return this.#records(53).map((entry) => summarizeFabricator(entry.entity, entry, this.record(6, entry.entity), this.record(7, entry.entity)));\n }\n\n players() {\n return this.#derivedState().players.slice();\n }\n\n shipControls() {\n return this.#derivedState().shipControls.slice();\n }\n\n shipMetadata() {\n if (this.isOverworld) return null;\n const lockdownRecord = firstRecord(this.table(11));\n const shipRecord = firstRecord(this.table(16), (record) => record?.blob20 && typeof record?.q32 === \"number\" && typeof record?.q36 === \"number\");\n return summarizeShipWorldMetadata(lockdownRecord, shipRecord);\n }\n\n machines() {\n return this.#machinesSnapshot(this.#derivedState().machines);\n }\n\n #machinesSnapshot(machines) {\n return {\n itemHolders: machines.itemHolders.slice(),\n fabricators: machines.fabricators.slice(),\n cargoEjectors: machines.cargoEjectors.slice(),\n cannons: machines.cannons.slice(),\n thrusters: machines.thrusters.slice(),\n pushers: machines.pushers.slice(),\n pusherBeams: machines.pusherBeams.slice(),\n launchers: machines.launchers.slice(),\n health: machines.health.slice(),\n loaders: machines.loaders.slice(),\n cargoHatches: machines.cargoHatches.slice(),\n navigationUnits: machines.navigationUnits.slice(),\n commsStations: machines.commsStations.slice(),\n fluidTanks: machines.fluidTanks.slice(),\n shieldGenerators: machines.shieldGenerators.slice(),\n shieldProjectors: machines.shieldProjectors.slice(),\n helms: machines.helms.slice(),\n signs: machines.signs.slice(),\n spawnPoints: machines.spawnPoints.slice(),\n doors: machines.doors.slice(),\n expandoBoxes: machines.expandoBoxes.slice()\n };\n }\n\n #invalidateDerived() {\n this._derived = null;\n }\n\n #updateDerived(update) {\n if (!this._derived) return;\n if (!update.removals.length && !update.changedEntities.size) return;\n\n for (const section of update.sections) {\n for (const record of section.records || []) this.#addDerivedEntityTable(record.entity, section.table);\n }\n\n if (update.sections.some((section) => section.table === 12)) {\n for (const entityId of this.table(55).keys()) update.changedEntities.add(entityId);\n }\n for (const entityId of update.removals) this.#removeDerivedEntity(entityId);\n for (const entityId of update.changedEntities) this.#refreshDerivedEntity(entityId);\n this._derived.summariesDirty = true;\n this._derived.tableSummariesDirty = true;\n }\n\n #updateLoaderConfig(update) {\n const seenEntities = new Set();\n for (const section of update.sections || []) {\n if (section.table !== 78) continue;\n for (const changed of section.records || []) {\n if (changed.indexedLoaderConfig) {\n this.#loaderConfig.updateIndexedSnapshotRecord(null, changed.entity, changed.record, changed.mask, changed.cumulativeRecord, changed.configEntity);\n continue;\n }\n const typeId = entityTypeIdFromRecord(this.record(7, changed.entity));\n this.#loaderConfig.updateRecord(null, changed.entity, changed.record ?? this.record(78, changed.entity), changed.mask, changed.previous, {\n repeatedInUpdate: seenEntities.has(changed.entity),\n allowSparseBaseline: typeId === LOADER_TYPE_ID,\n repeatedInSection: changed.repeatedInSection,\n semanticSnapshot: Boolean(update.full),\n semanticDelta: isSemanticLoaderDelta(changed, update.full),\n deltaRecord: table78DeltaRecord(changed)\n });\n seenEntities.add(changed.entity);\n }\n }\n }\n\n #remapIndexedLoaderConfig(update) {\n if (!update.full || update.error) return;\n const rows = [];\n for (const section of update.sections || []) {\n if (section.table !== 78) continue;\n for (const changed of section.records || []) rows.push(changed);\n }\n if (!rows.length) return;\n\n const loaderIds = [...this.table(7).entries()]\n .filter(([, record]) => entityTypeIdFromRecord(record) === LOADER_TYPE_ID)\n .map(([entity]) => entity)\n .sort((a, b) => a - b);\n if (loaderIds.length !== rows.length) return;\n if (rows.every((row, index) => row.entity === loaderIds[index])) return;\n\n const remappedTable = new Map();\n for (const [index, changed] of rows.entries()) {\n const rawRecord = table78DeltaRecord(changed);\n changed.configEntity = changed.entity;\n changed.entity = loaderIds[index];\n changed.cumulativeRecord = cloneRecord(changed.record || {});\n changed.record = cloneRecord(rawRecord);\n delete changed.previous;\n changed.indexedLoaderConfig = true;\n remappedTable.set(changed.entity, cloneRecord(rawRecord));\n update.changedEntities.add(changed.entity);\n }\n this.tables.set(78, remappedTable);\n }\n\n #updateNavigationUnitAutoWarp(update) {\n const trackedBeforeUpdate = new Set(this.#navigationUnitAutoWarp.keys());\n const initializedThisUpdate = new Set();\n\n for (const section of update.sections || []) {\n if (section.table !== 78) continue;\n for (const changed of section.records || []) {\n const typeId = entityTypeIdFromRecord(this.record(7, changed.entity));\n if (typeId !== NAVIGATION_UNIT_TYPE_ID) continue;\n\n const record = this.record(78, changed.entity);\n if (!record) continue;\n\n if (!trackedBeforeUpdate.has(changed.entity)) {\n if (initializedThisUpdate.has(changed.entity)) continue;\n const q32Destination = navigationDestinationFromEncodedValue(record.q32);\n const q36Destination = navigationDestinationFromEncodedValue(record.q36);\n const q24Destination = navigationDestinationFromEncodedValue(record.q24);\n const q20Destination = navigationDestinationFromEncodedValue(record.q20);\n const q32DestinationRow = (changed.mask & 9) === 9 && record.q20 === 0 && record.q24 == null && q32Destination != null;\n const destinationBase = q32DestinationRow\n ? q32Destination\n : (changed.mask & 17) === 17 && record.q20 === 0 && record.q24 == null && record.q32 == null && q36Destination != null\n ? q36Destination\n : record.q20 === 0 && q24Destination != null\n ? q24Destination\n : null;\n const q36DestinationRow = destinationBase === q36Destination && q36Destination != null;\n const pureDestinationRow = changed.mask === 1 && q20Destination != null;\n const noCaptainsOnlyRow = changed.mask === 16 && record.q36 === 0;\n this.#navigationUnitAutoWarp.set(changed.entity, {\n destination: navigationDestinationFromRecord(record, changed.mask),\n destinationBase,\n shieldFailure: pureDestinationRow || q36DestinationRow || noCaptainsOnlyRow ? true : q32DestinationRow ? false : record.q32 == null ? (record.q24 == null ? null : true) : false,\n noCaptains: q32DestinationRow && changed.mask === 9\n ? true\n : pureDestinationRow ? true\n : noCaptainsOnlyRow ? false\n : q36DestinationRow ? false : record.q36 == null ? (record.q24 == null ? null : true) : false\n });\n initializedThisUpdate.add(changed.entity);\n continue;\n }\n\n const current = this.#navigationUnitAutoWarp.get(changed.entity);\n if (!current) continue;\n const q32Destination = navigationDestinationFromEncodedValue(record.q32);\n const q36Destination = navigationDestinationFromEncodedValue(record.q36);\n const q20Destination = navigationDestinationFromEncodedValue(record.q20);\n const q32DestinationRow = (changed.mask & 9) === 9 && record.q20 === 0 && record.q24 == null && q32Destination != null;\n const q36DestinationRow = (changed.mask & 17) === 17 && record.q20 === 0 && record.q24 == null && record.q32 == null && q36Destination != null;\n const baselineRow = (changed.mask & 27) === 27 && record.q20 === 0 && record.q24 != null && record.q32 != null && record.q36 != null;\n if (q32DestinationRow) {\n current.destination = q32Destination;\n current.destinationBase = q32Destination;\n current.shieldFailure = false;\n if (record.q36 != null) current.noCaptains = record.q36 !== 0;\n else if (changed.mask === 9) current.noCaptains = true;\n continue;\n }\n if (q36DestinationRow) {\n current.destination = q36Destination;\n current.destinationBase = q36Destination;\n continue;\n }\n if (baselineRow) {\n current.shieldFailure = false;\n current.noCaptains = record.q36 !== 0;\n continue;\n }\n if (changed.mask === 1) {\n const relativeDestination = current.destinationBase == null || typeof record.q20 !== \"number\"\n ? null\n : current.destinationBase + record.q20;\n current.destination = q20Destination ?? (isNavigationDestination(relativeDestination) ? relativeDestination : current.destination);\n } else if ((changed.mask & 1) && record.q20 != null && record.q20 !== 0) {\n current.destination = q20Destination ?? (isNavigationDestination(record.q20) ? record.q20 : current.destination);\n }\n if (changed.mask & 8) current.shieldFailure = !current.shieldFailure;\n if (changed.mask & 16) current.noCaptains = !current.noCaptains;\n }\n }\n }\n\n #updateHelmOccupancy(update) {\n const table7 = update.sections.find((section) => section.table === 7);\n if (!table7) return;\n\n const changedPilotState = new Map();\n for (const section of update.sections) {\n if (section.table !== 55) continue;\n for (const changed of section.records) {\n if (!(changed.mask & 16)) continue;\n const player = this.record(55, changed.entity);\n changedPilotState.set(changed.entity, Boolean(player?.q107));\n }\n }\n\n const activePilotCount = [...this.table(55).values()].filter((record) => record?.q107).length;\n for (const changed of table7.records) {\n const record = this.record(7, changed.entity);\n const typeId = entityTypeIdFromRecord(record);\n if (!HELM_TYPE_IDS.has(typeId)) continue;\n\n if (activePilotCount > 0 && record?.q20 === 0 && HELM_TYPE_IDS.has(Number(record?.q32))) {\n this.#helmOccupied.set(changed.entity, true);\n }\n\n if (!(changed.mask & 8) || changedPilotState.size === 0) continue;\n this.#helmOccupied.set(changed.entity, [...changedPilotState.values()].some(Boolean));\n }\n }\n\n #updateCommsStationOccupancy(update) {\n const table7 = update.sections.find((section) => section.table === 7);\n if (!table7) return;\n\n for (const changed of table7.records) {\n const record = this.record(7, changed.entity);\n const typeId = entityTypeIdFromRecord(record);\n if (typeId !== COMMS_STATION_TYPE_ID) continue;\n\n const hasAbsoluteTypeState = update.full || (changed.mask & 1);\n if (hasAbsoluteTypeState && record?.q20 === 0 && Number(record?.q32) === COMMS_STATION_TYPE_ID) {\n this.#commsStationOccupied.set(changed.entity, true);\n continue;\n }\n\n if (hasAbsoluteTypeState && Number(record?.q20) === COMMS_STATION_TYPE_ID) {\n this.#commsStationOccupied.set(changed.entity, false);\n }\n\n if (changed.mask & 8) {\n this.#commsStationOccupied.set(changed.entity, !this.#commsStationOccupied.get(changed.entity));\n }\n }\n }\n\n #derivedState() {\n if (this._derived) {\n this.#ensureDerivedSummaries();\n return this._derived;\n }\n\n const entityIds = [];\n const seenEntities = new Set();\n const entityTableIds = new Map();\n const tableSummaries = [];\n\n for (const [tableId, records] of this.tables.entries()) {\n const name = MODEL_TABLE_SPECS.get(tableId)?.name || null;\n tableSummaries.push({id: tableId, name, count: records.size});\n for (const entity of records.keys()) {\n if (!entityTableIds.has(entity)) entityTableIds.set(entity, []);\n entityTableIds.get(entity).push(tableId);\n if (!seenEntities.has(entity)) {\n seenEntities.add(entity);\n entityIds.push(entity);\n }\n }\n }\n\n entityIds.sort((a, b) => a - b);\n const entities = entityIds.map((entityId) => this.#summarizeEntity(entityId, this.#tableRowsForEntity(entityId)));\n const entitiesById = new Map(entities.map((entity) => [entity.entity, entity]));\n\n this._derived = {\n entityCount: entityIds.length,\n entityIds,\n entityTableIds,\n entitiesById,\n blocksByKey: null,\n blocks: null,\n blocksDirty: true,\n tableSummaries,\n summariesDirty: true,\n tableSummariesDirty: false\n };\n this.#refreshDerivedSummaries();\n return this._derived;\n }\n\n #tableRowsForEntity(entityId) {\n const rows = [];\n const tableIds = this._derived?.entityTableIds?.get(entityId) || this.tables.keys();\n for (const tableId of tableIds) {\n const record = this.tables.get(tableId)?.get(entityId);\n if (record) rows.push({tableId, name: MODEL_TABLE_SPECS.get(tableId)?.name || null, record});\n }\n return rows;\n }\n\n #addDerivedEntityTable(entityId, tableId) {\n const derived = this._derived;\n if (!derived) return;\n let tableIds = derived.entityTableIds.get(entityId);\n if (!tableIds) {\n tableIds = [];\n derived.entityTableIds.set(entityId, tableIds);\n }\n if (!tableIds.includes(tableId)) insertSorted(tableIds, tableId);\n }\n\n #removeDerivedEntity(entityId) {\n const derived = this._derived;\n const old = derived.entitiesById.get(entityId);\n if (old) this.#removeEntityFromDerivedBlocks(derived, old);\n derived.entitiesById.delete(entityId);\n derived.entityTableIds.delete(entityId);\n const index = derived.entityIds.indexOf(entityId);\n if (index >= 0) derived.entityIds.splice(index, 1);\n derived.entityCount = derived.entityIds.length;\n }\n\n #refreshDerivedEntity(entityId) {\n const rows = this.#tableRowsForEntity(entityId);\n if (!rows.length) {\n this.#removeDerivedEntity(entityId);\n return;\n }\n\n const derived = this._derived;\n const old = derived.entitiesById.get(entityId);\n if (old) this.#removeEntityFromDerivedBlocks(derived, old);\n\n const next = this.#summarizeEntity(entityId, rows);\n derived.entitiesById.set(entityId, next);\n if (!derived.entityIds.includes(entityId)) insertSorted(derived.entityIds, entityId);\n this.#addEntityToDerivedBlocks(derived, next);\n derived.entityCount = derived.entityIds.length;\n }\n\n #tableSummaries() {\n return [...this.tables.entries()].map(([id, records]) => ({\n id,\n name: MODEL_TABLE_SPECS.get(id)?.name || null,\n count: records.size\n }));\n }\n\n // The per-cell block index is the most expensive derived product to build --\n // it walks every occupied cell of every entity. Most consumers never ask for\n // blocks, so it is constructed on first use rather than during the rebuild.\n #blocksIndex() {\n const derived = this._derived;\n if (derived.blocksByKey) return derived.blocksByKey;\n const blocks = new Map();\n for (const entityId of derived.entityIds) {\n const entity = derived.entitiesById.get(entityId);\n if (entity) this.#addEntityToBlockMap(blocks, entity);\n }\n derived.blocksByKey = blocks;\n derived.blocksDirty = true;\n return blocks;\n }\n\n #addEntityToDerivedBlocks(derived, entity) {\n // Nothing to maintain until something has asked for the index; it will be\n // built from current entities on demand.\n if (!derived.blocksByKey) return;\n this.#addEntityToBlockMap(derived.blocksByKey, entity);\n derived.blocksDirty = true;\n }\n\n #addEntityToBlockMap(blocks, entity) {\n if (!entity.transform || !Number.isFinite(entity.transform.x) || !Number.isFinite(entity.transform.y)) return;\n const footprint = entity.footprint || {width: 1, height: 1};\n const startX = Math.floor(entity.transform.x);\n const startY = Math.floor(entity.transform.y);\n for (let dx = 0; dx < footprint.width; dx++) {\n for (let dy = 0; dy < footprint.height; dy++) {\n const x = startX + dx;\n const y = startY + dy;\n const key = blockKey(x, y);\n let block = blocks.get(key);\n if (block === undefined) {\n block = {x, y, entities: []};\n blocks.set(key, block);\n }\n block.entities.push(entity);\n }\n }\n }\n\n #removeEntityFromDerivedBlocks(derived, entity) {\n if (!derived.blocksByKey) return;\n const id = entity.entity;\n for (const cell of entity.occupies || []) {\n const key = blockKey(cell.x, cell.y);\n const block = derived.blocksByKey.get(key);\n if (!block) continue;\n // Splice in place rather than allocating a filtered array per cell.\n const list = block.entities;\n for (let i = list.length - 1; i >= 0; i--) {\n if (list[i].entity === id) list.splice(i, 1);\n }\n if (!list.length) derived.blocksByKey.delete(key);\n derived.blocksDirty = true;\n }\n }\n\n #ensureDerivedSummaries() {\n const derived = this._derived;\n if (!derived) return;\n if (derived.tableSummariesDirty) {\n derived.tableSummaries = this.#tableSummaries();\n derived.tableSummariesDirty = false;\n }\n if (derived.summariesDirty) this.#refreshDerivedSummaries();\n }\n\n #refreshDerivedSummaries() {\n const derived = this._derived;\n const entities = derived.entityIds.map((entityId) => derived.entitiesById.get(entityId)).filter(Boolean);\n const machines = {\n itemHolders: [],\n fabricators: [],\n cargoEjectors: [],\n cannons: [],\n thrusters: [],\n pushers: [],\n pusherBeams: [],\n launchers: [],\n health: [],\n loaders: [],\n cargoHatches: [],\n navigationUnits: [],\n commsStations: [],\n fluidTanks: [],\n shieldGenerators: [],\n shieldProjectors: [],\n helms: [],\n signs: [],\n spawnPoints: [],\n doors: [],\n expandoBoxes: []\n };\n const players = [];\n const shipControls = [];\n const transforms = [];\n\n for (const entity of entities) {\n if (entity.transform) transforms.push(entity.transform);\n const contents = entity.contents;\n if (!contents) continue;\n if (contents.itemHolder) machines.itemHolders.push(contents.itemHolder);\n if (contents.fabricator) machines.fabricators.push(contents.fabricator);\n if (contents.cargoEjector) machines.cargoEjectors.push(contents.cargoEjector);\n if (contents.cannon) machines.cannons.push(contents.cannon);\n if (contents.thruster) machines.thrusters.push(contents.thruster);\n if (contents.pusher) machines.pushers.push(contents.pusher);\n if (contents.pusherBeam) machines.pusherBeams.push(contents.pusherBeam);\n if (contents.launcher) machines.launchers.push(contents.launcher);\n if (contents.health) machines.health.push(contents.health);\n if (contents.loader) machines.loaders.push(contents.loader);\n if (contents.cargoHatch) machines.cargoHatches.push(contents.cargoHatch);\n if (contents.navigationUnit) machines.navigationUnits.push(contents.navigationUnit);\n if (contents.commsStation) machines.commsStations.push(contents.commsStation);\n if (contents.fluidTank) machines.fluidTanks.push(contents.fluidTank);\n if (contents.shieldGenerator) machines.shieldGenerators.push(contents.shieldGenerator);\n if (contents.shieldProjector) machines.shieldProjectors.push(contents.shieldProjector);\n if (contents.helm) machines.helms.push(contents.helm);\n if (contents.sign) machines.signs.push(contents.sign);\n if (contents.spawnPoint) machines.spawnPoints.push(contents.spawnPoint);\n if (contents.door) machines.doors.push(contents.door);\n if (contents.expandoBox) machines.expandoBoxes.push(contents.expandoBox);\n if (contents.player) players.push(contents.player);\n if (contents.shipControl) shipControls.push(contents.shipControl);\n }\n\n derived.entities = entities;\n derived.transforms = transforms;\n derived.players = players;\n derived.shipControls = shipControls;\n derived.machines = machines;\n derived.summariesDirty = false;\n }\n\n // The sorted block list is the single most expensive derived product (a sort\n // over every occupied cell in the world). Build it only when a caller actually\n // asks for blocks, rather than as a side effect of every summary refresh.\n #derivedBlocks() {\n const derived = this._derived;\n const index = this.#blocksIndex();\n if (derived.blocksDirty || !derived.blocks) {\n derived.blocks = [...index.values()].sort((a, b) => (a.y - b.y) || (a.x - b.x));\n derived.blocksDirty = false;\n }\n return derived.blocks;\n }\n\n // Identical for every entity in a refresh pass, but was rebuilt inside each\n // #summarizeEntity call -- O(entities x table12). Table 12 only changes during\n // apply(), which clears this cache.\n #blueprintPreviewItems() {\n if (this.#blueprintItems) return this.#blueprintItems;\n const items = [];\n for (const [entity, record] of this.table(12)) {\n const summary = summarizeBlueprintPreview(entity, record, this.record(0, entity));\n if (summary) items.push(summary);\n }\n this.#blueprintItems = items;\n return items;\n }\n\n #summarizeEntity(entityId, tableRows = []) {\n // tableRows already lists exactly the tables this entity appears in -- the\n // same source the public `tables` field is built from. Reading through it\n // avoids ~32 lookups against tables the entity is not in.\n const byTable = new Map();\n for (const row of tableRows) byTable.set(row.tableId, row.record);\n const rec = (tableId) => byTable.get(tableId) ?? null;\n const transformRecord = rec(0);\n const itemHolderRecord = rec(6);\n const healthRecord = rec(5);\n const fabricatorRecord = rec(53);\n const cargoEjectorRecord = rec(49);\n const cannonRecord = rec(54);\n const pusherRecord = rec(72);\n const pusherBeamRecord = rec(42);\n const launcherRecord = rec(44);\n const loaderRecord = rec(78);\n const loaderFilterRecord = rec(76);\n const loaderFilterSlotsRecord = rec(77);\n const commsStationRecord = rec(39);\n const fluidTankRecord = rec(60);\n const shieldRecord = rec(61);\n const shieldGeneratorBoostRecord = rec(75);\n const shieldProjectorRecord = rec(62);\n const playerRecord = rec(55);\n const shipControlRecord = rec(20);\n const signRecord = rec(41);\n const spawnPointRecord = rec(8);\n const doorRecord = rec(47);\n const thrusterRecord = rec(50);\n const labelRecord = rec(9);\n const zoneLabelRecord = rec(25);\n const dockingSpringRecord = rec(26);\n const hugeThrusterRecord = rec(23);\n const bodyStateRecord = rec(1);\n const typeRecord = rec(7);\n const crateSizeRecord = rec(3);\n const blueprintPreviewRecord = rec(12);\n const expandoSizeRecord = rec(51);\n const crateItemRecord = rec(19);\n const markerTableIds = [73].filter((tableId) => this.record(tableId, entityId));\n const markerTypeId = markerTypeIdForTables(markerTableIds);\n const markerTypeName = entityNameFromType(markerTypeId);\n const looseItemMarker = Boolean(rec(37));\n const dynamicBody = bodyStateRecord?.q20 === -4;\n const typeId = entityTypeIdFromRecord(typeRecord);\n const itemHolder = summarizeItemHolder(entityId, itemHolderRecord);\n const isExpandoBox = typeId === EXPANDO_BOX_TYPE_ID || markerTypeId === EXPANDO_BOX_TYPE_ID;\n const health = summarizeHealth(entityId, healthRecord);\n const fabricator = summarizeFabricator(entityId, fabricatorRecord, itemHolderRecord, typeRecord);\n const cargoEjector = summarizeCargoEjector(entityId, typeId, cargoEjectorRecord);\n const cannon = summarizeCannon(entityId, cannonRecord, typeId);\n const thruster = summarizeThruster(entityId, typeId, thrusterRecord);\n const pusher = summarizePusher(entityId, pusherRecord, loaderFilterSlotsRecord);\n const pusherBeam = summarizePusherBeam(entityId, pusherBeamRecord);\n const launcher = summarizeItemLauncher(entityId, typeId, launcherRecord);\n const loader = (typeId === LOADER_TYPE_ID || (typeId == null && (loaderRecord || loaderFilterRecord || loaderFilterSlotsRecord)))\n ? summarizeLoader(entityId, loaderRecord, loaderFilterRecord, loaderFilterSlotsRecord, this.#loaderConfig, typeId === LOADER_TYPE_ID, itemHolderRecord)\n : null;\n const cargoHatch = summarizeCargoHatch(entityId, typeId, loaderFilterRecord, loaderFilterSlotsRecord, rec(45));\n const navigationUnit = summarizeNavigationUnit(entityId, typeId, loaderRecord, this.#navigationUnitAutoWarp.get(entityId));\n const fluidTank = fluidTankRecord ? {\n entity: entityId,\n amount: fluidTankRecord.q24 ?? null,\n state: cloneRecord(fluidTankRecord)\n } : null;\n const shieldGenerator = typeId === 256 ? summarizeShieldGenerator(entityId, shieldRecord, itemHolderRecord, shieldGeneratorBoostRecord) : null;\n const shieldProjector = typeId === 257 ? summarizeShieldProjector(entityId, shieldProjectorRecord) : null;\n const blueprintPreview = summarizeBlueprintPreview(entityId, blueprintPreviewRecord, transformRecord);\n const player = summarizePlayer(entityId, playerRecord, rec(14), this.#blueprintPreviewItems());\n const shipControl = summarizeShipControl(entityId, shipControlRecord);\n const helm = summarizeHelm(entityId, typeId, this.#helmOccupied.get(entityId));\n const commsStation = summarizeCommsStation(entityId, typeId, commsStationRecord, this.#commsStationOccupied.get(entityId));\n const sign = typeId === 218 ? summarizeSign(entityId, signRecord) : null;\n const spawnPoint = typeId === 219 ? summarizeSpawnPoint(entityId, spawnPointRecord) : null;\n const door = typeId === 220 ? summarizeDoor(entityId, spawnPointRecord, doorRecord) : null;\n const shipSize = shipControl && this.isOverworld ? summarizeShipSize(entityId, rec(3)) : null;\n const hoverOutline = summarizeHoverOutline(entityId, crateSizeRecord);\n const expandoBox = isExpandoBox ? summarizeExpandoBox(entityId, itemHolderRecord, expandoSizeRecord) : null;\n const mapMarker = this.isOverworld ? summarizeMapMarker(entityId, labelRecord, zoneLabelRecord, crateSizeRecord) : null;\n const dockingSpring = this.isOverworld\n ? summarizeDockingSpring(entityId, dockingSpringRecord, bodyStateRecord, crateSizeRecord)\n : null;\n const hugeThruster = this.isOverworld\n ? summarizeHugeThruster(entityId, hugeThrusterRecord, crateSizeRecord)\n : null;\n const itemCrate = this.isOverworld && !rec(2) && !rec(18) && health && crateSizeRecord\n ? summarizeItemCrate(entityId, crateSizeRecord, crateItemRecord, healthRecord)\n : null;\n const bot = this.isOverworld\n ? summarizeBot(entityId, {\n health,\n table2Record: rec(2),\n smallRecord: crateSizeRecord,\n combatRecord: rec(18),\n motionRecord: crateItemRecord,\n table10Record: rec(10),\n table51Record: rec(51),\n itemCrate,\n player,\n shipControl\n })\n : null;\n const transform = transformRecord ? {\n entity: entityId,\n x: numberOrNull(transformRecord.q20, 40),\n y: numberOrNull(transformRecord.q24, 40),\n rot: numberOrNull(transformRecord.q28, 127.324),\n flags: [transformRecord.q33, transformRecord.q34, transformRecord.q35].filter((value) => value != null)\n } : null;\n const contents = mergeContents({\n itemHolder, expandoBox, hoverOutline, itemCrate, mapMarker, dockingSpring,\n hugeThruster, blueprintPreview, health, bot, fabricator, cargoEjector,\n cannon, thruster, pusher, pusherBeam, launcher, loader, cargoHatch,\n navigationUnit, commsStation, fluidTank, shieldGenerator, shieldProjector,\n helm, player, shipControl, sign, spawnPoint, door, shipSize\n });\n const footprint = entityFootprint({\n entity: entityId,\n typeId,\n markerTypeId,\n itemHolder,\n expandoBox,\n hoverOutline,\n itemCrate,\n hugeThruster,\n fabricator,\n cargoEjector,\n cannon,\n thruster,\n pusher,\n launcher,\n loader,\n cargoHatch,\n navigationUnit,\n commsStation,\n fluidTank,\n shieldGenerator,\n shieldProjector,\n helm,\n player,\n shipControl\n });\n const typeName = entityNameFromType(typeId);\n const category = entityCategory({\n typeId,\n markerTypeId,\n looseItemMarker,\n dynamicBody,\n transform,\n itemHolder,\n itemCrate,\n mapMarker,\n dockingSpring,\n hugeThruster,\n blueprintPreview,\n fabricator,\n cargoEjector,\n cannon,\n pusher,\n launcher,\n loader,\n cargoHatch,\n navigationUnit,\n commsStation,\n fluidTank,\n shieldGenerator,\n shieldProjector,\n helm,\n player,\n shipControl\n });\n const summary = {\n entity: entityId,\n category,\n typeId,\n typeName,\n markerTypeId,\n markerTypeName,\n label: entityLabel({\n category,\n typeId,\n typeName,\n markerTypeName,\n mapMarker,\n dockingSpring,\n hugeThruster,\n blueprintPreview,\n expandoBox,\n hoverOutline,\n itemHolder,\n itemCrate,\n fabricator,\n cargoEjector,\n cannon,\n thruster,\n pusher,\n pusherBeam,\n launcher,\n loader,\n cargoHatch,\n navigationUnit,\n fluidTank,\n shieldGenerator,\n shieldProjector,\n player,\n shipControl,\n sign,\n spawnPoint,\n door,\n isOverworld: this.isOverworld\n }),\n kind: [\n transform ? \"transform\" : null,\n dynamicBody ? \"dynamic_body\" : null,\n itemHolder ? \"item_holder\" : null,\n health ? \"health\" : null,\n bot ? \"bot\" : null,\n itemCrate ? \"item_crate\" : null,\n expandoBox ? \"expando_box\" : null,\n hoverOutline ? \"hover_outline\" : null,\n mapMarker ? \"map_marker\" : null,\n dockingSpring ? \"docking_spring\" : null,\n hugeThruster ? \"huge_thruster\" : null,\n blueprintPreview ? \"blueprint_preview\" : null,\n markerTableIds.length ? \"marker\" : null,\n looseItemMarker ? \"loose_item_marker\" : null,\n fabricator ? \"fabricator\" : null,\n cargoEjector ? \"cargo_ejector\" : null,\n cannon ? \"cannon\" : null,\n thruster ? \"thruster\" : null,\n pusher ? \"pusher\" : null,\n pusherBeam ? \"pusher_beam\" : null,\n launcher ? \"launcher\" : null,\n loader ? \"loader\" : null,\n cargoHatch ? \"cargo_hatch\" : null,\n navigationUnit ? \"navigation_unit\" : null,\n commsStation ? \"comms_station\" : null,\n fluidTank ? \"fluid_tank\" : null,\n shieldGenerator ? \"shield_generator\" : null,\n shieldProjector ? \"shield_projector\" : null,\n helm ? \"helm\" : null,\n player ? \"player\" : null,\n shipControl ? \"ship_control\" : null,\n sign ? \"sign\" : null,\n spawnPoint ? \"spawn_point\" : null,\n door ? \"door\" : null,\n shipControl && this.isOverworld ? \"overworld_ship\" : null\n ].filter(Boolean),\n transform,\n footprint,\n contents,\n tables: tableRows.map(({tableId, name, record}) => ({\n tableId,\n name,\n record: cloneRecord(record)\n }))\n };\n // Lazy: most entities are never asked for their occupied cells, and a large\n // footprint materialises hundreds of objects per refresh. Defined as an\n // enumerable memoising accessor so spread, JSON and structuredClone all see\n // the same array they saw before.\n defineLazyProperty(summary, \"occupies\", transform ? () => this.#occupiedBlocks(transform, footprint) : () => []);\n return summary;\n }\n\n #occupiedBlocks(transform, footprint) {\n const startX = Math.floor(transform.x ?? 0);\n const startY = Math.floor(transform.y ?? 0);\n const cells = [];\n for (let dx = 0; dx < footprint.width; dx++) {\n for (let dy = 0; dy < footprint.height; dy++) {\n cells.push({x: startX + dx, y: startY + dy});\n }\n }\n return cells;\n }\n\n #records(tableId) {\n return [...this.table(tableId).entries()].map(([entity, record]) => ({entity, ...record}));\n }\n\n #readRemovals(reader) {\n const removals = [];\n let entity = 0;\n while (reader.remaining > 0) {\n const delta = reader.readStreamInt();\n if (delta === 0) break;\n entity += delta;\n removals.push(entity);\n // Delete only from tables the entity actually appears in when the derived\n // index is available; fall back to a full scan otherwise.\n const known = this._derived?.entityTableIds?.get(entity);\n if (known) {\n for (const tableId of known) this.tables.get(tableId)?.delete(entity);\n } else {\n for (const records of this.tables.values()) records.delete(entity);\n }\n this.#loaderConfig.delete(null, entity);\n this.#helmOccupied.delete(entity);\n this.#commsStationOccupied.delete(entity);\n this.#navigationUnitAutoWarp.delete(entity);\n }\n this.totalRemovedCount += removals.length;\n for (const id of removals) pushCapped(this.removedEntities, id, MAX_RETAINED_REMOVALS);\n return removals;\n }\n\n #readSection(reader, tag, tableId) {\n const spec = MODEL_TABLE_SPECS.get(tableId);\n return this.#readSectionRecords(reader, tag, tableId, spec);\n }\n\n #readSectionRecords(reader, tag, tableId, spec) {\n const section = {tag, table: tableId, name: spec?.name || null, records: []};\n let entity = 0;\n const seenEntities = tableId === 78 ? new Set() : null;\n while (reader.remaining > 0) {\n const recordOffset = reader.offset;\n let delta;\n try {\n delta = reader.readStreamInt();\n } catch (error) {\n throw new Error(`model table ${tableId} tag ${tag} record offset ${recordOffset}: ${error.message}`);\n }\n if (delta === 0) break;\n entity += delta;\n let mask;\n try {\n mask = reader.readUnsigned();\n } catch (error) {\n throw new Error(`model table ${tableId} tag ${tag} entity ${entity} mask offset ${reader.offset}: ${error.message}`);\n }\n const record = this.#getRecord(tableId, entity);\n const previous = tableId === 78 ? cloneRecord(record) : null;\n record.lastMask = mask;\n\n try {\n if (spec) this.#applyRecordSpec(reader, record, mask, spec);\n else if (!MASK_ONLY_TABLES.has(tableId)) throw new Error(`missing model table spec ${tableId}`);\n } catch (error) {\n throw new Error(`model table ${tableId} tag ${tag} entity ${entity} mask ${mask} offset ${reader.offset}: ${error.message}`);\n }\n\n const changed = {entity, mask};\n if (previous) changed.previous = previous;\n if (seenEntities?.has(entity)) changed.repeatedInSection = true;\n seenEntities?.add(entity);\n if (tableId === 78) changed.record = cloneRecord(record);\n section.records.push(changed);\n }\n return section;\n }\n\n #getRecord(tableId, entity) {\n if (!this.tables.has(tableId)) this.tables.set(tableId, new Map());\n const records = this.tables.get(tableId);\n if (!records.has(entity)) records.set(entity, {});\n return records.get(entity);\n }\n\n #applyRecordSpec(reader, record, mask, spec) {\n if (typeof spec.read === \"function\") {\n spec.read(reader, record, mask);\n if (spec.scale) record.scaled = spec.scale(record);\n return;\n }\n\n const hasPacked = Boolean(\n (spec.packedMask && (mask & spec.packedMask)) ||\n spec.packedBits?.some((item) => mask & item.bit)\n );\n let packed = null;\n if (hasPacked && spec.packedBeforeValues) packed = reader.readUnsigned();\n\n let packedIndex = 0;\n if (spec.orderedValues) {\n for (const item of spec.orderedItems) {\n if (!(mask & item.bit)) continue;\n if (item.kind === \"blob\") record[item.key] = reader.readBlob();\n else record[item.key] = (record[item.key] || 0) + reader.readFieldDelta();\n }\n } else {\n for (const blob of spec.blobs || []) {\n if (mask & blob.bit) record[blob.key] = reader.readBlob();\n }\n }\n\n if (hasPacked && !spec.packedBeforeValues) packed = reader.readUnsigned();\n\n for (const item of spec.packedBits || []) {\n if (mask & item.bit) record[item.key] = (packed >> packedIndex++) & 1;\n }\n\n if (packed != null && spec.packedOffsetKeys) {\n for (const key of spec.packedOffsetKeys) {\n record[key] = (packed >> packedIndex++) & 1;\n }\n }\n\n if (!spec.orderedValues) {\n for (const field of spec.fields || []) {\n if (!(mask & field.bit)) continue;\n record[field.key] = (record[field.key] || 0) + reader.readFieldDelta();\n }\n }\n\n if (spec.scale) record.scaled = spec.scale(record);\n }\n}\n\nfunction summarizeUpdate(update) {\n return {\n generation: update.generation,\n sectionCount: update.sections.length,\n removals: update.removals.length,\n unknownTags: update.unknownTags,\n error: update.error?.message || null,\n sections: update.sections.map((section) => ({\n tag: section.tag,\n table: section.table,\n name: section.name,\n records: section.records.length\n }))\n };\n}\n\nfunction insertSorted(values, value) {\n let low = 0;\n let high = values.length;\n while (low < high) {\n const mid = (low + high) >> 1;\n if (values[mid] < value) low = mid + 1;\n else high = mid;\n }\n values.splice(low, 0, value);\n}\n\nexport function decodeModelData(bytes) {\n const state = new ModelState();\n return state.apply(bytes);\n}\n", "export const OFFICIAL_CLIENT_SNAPSHOT = {\n capturedAt: \"2026-05-17\",\n gameVersion: \"Fri May 8 09:43:31 PM MDT 2026 / 92e9666650b250eae8968a40ff4f3a04c257f2e6\",\n moduleTable: \"drednot-official-client/latest-captured-module-table.js\",\n wasmGlue: \"/x/wasm.2cc626268724032ec685dd97023d77da.js\",\n wasm: \"/x/4719d471af3e158f9fc6c69af872fe1c.wasm\",\n sourceModules: {\n tilesets: 89,\n physicsFilters: 42,\n itemIds: 78\n }\n};\n\nexport const OFFICIAL_CLIENT_ITEM_ID = {\n BLOCK: 232,\n BLOCK_HYPER_RUBBER: 233,\n BLOCK_ICE_GLASS: 234,\n BLOCK_LADDER: 235,\n BLOCK_WALKWAY: 236,\n BLOCK_ITEM_NET: 237,\n PAINT: 239,\n BLOCK_ANNIHILATOR: 254,\n BLOCK_LOGISTICS_RAIL: 262\n};\n\nexport const OFFICIAL_CLIENT_FILTERS = {\n DEFAULT_FILTER: {categoryBits: 1, maskBits: 65535, groupIndex: 0},\n NOCOLLIDE_FILTER: {categoryBits: 0, maskBits: 65535, groupIndex: 0},\n FILTER_BLOCK_WALKWAY: {categoryBits: 28, maskBits: 28, groupIndex: 0},\n FILTER_BLOCK_ITEM_NET: {categoryBits: 1, maskBits: 1, groupIndex: 0},\n FILTER_BLOCK_GLASS: {categoryBits: 1, maskBits: 65535, groupIndex: 0}\n};\n\nexport const OFFICIAL_CLIENT_SUBWORLD_MATERIAL_NAMES = new Map([\n [0, \"Nothing\"],\n [1, \"Ship Border Corner\"],\n [2, \"Ship Border Edge Horizontal\"],\n [3, \"Ship Border Edge Vertical\"],\n [4, \"Iron Block\"],\n [5, \"Ladder\"],\n [6, \"Walkway\"],\n [7, \"Item Net\"],\n [8, \"Iron Block\"],\n [9, \"Iron Block\"],\n [10, \"Iron Block\"],\n [11, \"Iron Block\"],\n [12, \"Paint\"],\n [13, \"Hyper Rubber Block\"],\n [14, \"Hyper Ice Block\"],\n [15, \"Annihilator Tile\"],\n [16, \"Logistics Rail\"]\n]);\n\nexport const OFFICIAL_CLIENT_OVERWORLD_MATERIAL_NAMES = new Map([\n [0, \"Air\"],\n [1, \"Wall\"],\n [2, \"Unbreakable\"],\n [3, \"Treasure\"],\n [4, \"Blank\"],\n [5, \"Flux\"],\n [6, \"Sleeping Bot\"],\n [7, \"Bot Red\"],\n [8, \"Strong Wall\"],\n [9, \"Rock\"],\n [10, \"Rock Metal\"],\n [11, \"Rock Flux\"],\n [12, \"Vault\"],\n [13, \"Vault Locked\"]\n]);\n\nconst I = OFFICIAL_CLIENT_ITEM_ID;\nconst F = OFFICIAL_CLIENT_FILTERS;\n\n// Copied from official client module 89. The official damage_f callbacks are\n// behavior, not static tile metadata, so they are intentionally omitted here.\nexport const OFFICIAL_CLIENT_TILESETS = {\n overworld: {\n scale: 8,\n atlas: \"tiles_overworld\",\n tile_width: 64,\n tiles: [\n {solid: false},\n {solid: true, hp: 999},\n {solid: true},\n {solid: true, hp: 1999},\n {solid: true, hp: 999},\n {solid: true, hp: 1999},\n {solid: true, hp: 1},\n {solid: false},\n {solid: true, hp: 1999},\n {solid: true, hp: 199},\n {solid: true, hp: 199},\n {solid: true, hp: 199},\n {solid: true, hp: 999},\n {solid: true}\n ]\n },\n subworld: {\n scale: 1,\n atlas: \"tiles_subworld\",\n tile_width: 40,\n tiles: [\n {solid: false},\n {solid: true},\n {solid: true},\n {solid: true},\n {solid: true, destruct_item: I.BLOCK, blocks_bullets: true, hp: 199},\n {solid: false, destruct_item: I.BLOCK_LADDER, hp: 1},\n {\n solid: true,\n destruct_item: I.BLOCK_WALKWAY,\n hp: 1,\n physics: {\n filter: F.FILTER_BLOCK_WALKWAY,\n transparent: true,\n walkway: true\n }\n },\n {\n solid: true,\n destruct_item: I.BLOCK_ITEM_NET,\n hp: 1,\n physics: {\n filter: F.FILTER_BLOCK_ITEM_NET,\n transparent: true\n },\n no_build_surface: true\n },\n {solid: true, destruct_item: I.BLOCK, blocks_bullets: true, hp: 199},\n {solid: true, destruct_item: I.BLOCK, blocks_bullets: true, hp: 199},\n {solid: true, destruct_item: I.BLOCK, blocks_bullets: true, hp: 199},\n {solid: true, destruct_item: I.BLOCK, blocks_bullets: true, hp: 199},\n {solid: false, destruct_item: I.PAINT, hp: 1},\n {\n solid: true,\n blocks_bullets: true,\n destruct_item: I.BLOCK_HYPER_RUBBER,\n hp: 599,\n physics: {restitution: 0.9}\n },\n {\n solid: true,\n blocks_bullets: true,\n destruct_item: I.BLOCK_ICE_GLASS,\n hp: 199,\n physics: {\n friction: 0,\n filter: F.FILTER_BLOCK_GLASS,\n transparent: true\n }\n },\n {solid: false, destruct_item: I.BLOCK_ANNIHILATOR, hp: 1},\n {solid: false, destruct_item: I.BLOCK_LOGISTICS_RAIL, hp: 1}\n ]\n }\n};\n", "import {\n OFFICIAL_CLIENT_OVERWORLD_MATERIAL_NAMES,\n OFFICIAL_CLIENT_SUBWORLD_MATERIAL_NAMES,\n OFFICIAL_CLIENT_TILESETS\n} from \"../data/official-client-data.js\";\n\nfunction cloneFilter(filter) {\n if (!filter) return null;\n return {\n categoryBits: filter.categoryBits ?? 1,\n maskBits: filter.maskBits ?? 65535,\n groupIndex: filter.groupIndex ?? 0\n };\n}\n\nfunction cloneTile(tile) {\n const copy = {solid: Boolean(tile.solid)};\n if (tile.name != null) copy.name = tile.name;\n if (tile.destruct_item != null) copy.destruct_item = tile.destruct_item;\n if (tile.blocks_bullets != null) copy.blocks_bullets = tile.blocks_bullets;\n if (tile.hp != null) copy.hp = tile.hp;\n if (tile.no_build_surface != null) copy.no_build_surface = tile.no_build_surface;\n if (tile.physics != null) {\n copy.physics = {};\n if (tile.physics.friction != null) copy.physics.friction = tile.physics.friction;\n if (tile.physics.restitution != null) copy.physics.restitution = tile.physics.restitution;\n if (tile.physics.transparent != null) copy.physics.transparent = tile.physics.transparent;\n if (tile.physics.walkway != null) copy.physics.walkway = tile.physics.walkway;\n if (tile.physics.filter != null) copy.physics.filter = cloneFilter(tile.physics.filter);\n }\n return copy;\n}\n\nexport function cloneTileset(tileset) {\n const materialNames = tileset.atlas === \"tiles_subworld\"\n ? OFFICIAL_CLIENT_SUBWORLD_MATERIAL_NAMES\n : tileset.atlas === \"tiles_overworld\"\n ? OFFICIAL_CLIENT_OVERWORLD_MATERIAL_NAMES\n : null;\n return {\n scale: tileset.scale,\n atlas: tileset.atlas,\n tile_width: tileset.tile_width,\n tiles: tileset.tiles.map((tile, materialId) => cloneTile({\n ...tile,\n name: materialNames?.get(materialId)\n }))\n };\n}\n\nexport function getTilesetForWorld(isOverworld) {\n return cloneTileset(isOverworld ? OFFICIAL_CLIENT_TILESETS.overworld : OFFICIAL_CLIENT_TILESETS.subworld);\n}\n", "import {decodeModelPayload, decodeWorldPayload, decompressWorldChunk} from \"../../protocol/inbound/world-payload.js\";\nimport {ModelState} from \"../model/index.js\";\nimport {overworldZoneFromId} from \"../overworld.js\";\nimport {getTilesetForWorld} from \"../tilesets.js\";\n\nconst TILE_SHAPE_NAMES = new Map([\n [0, \"full\"],\n [5, \"bottom-half\"],\n [7, \"top-half\"]\n]);\n\nfunction tileShapeName(shape) {\n const id = Number(shape);\n return Number.isFinite(id) ? TILE_SHAPE_NAMES.get(id) ?? null : null;\n}\n\nconst DEFAULT_HISTORY_LIMITS = {\n eventHistory: 200,\n modelPacketHistory: 100,\n chunkHistory: 64\n};\n\nfunction normalizeLimit(value, fallback) {\n if (value === Infinity) return Infinity;\n const limit = Number(value);\n if (!Number.isFinite(limit) || limit < 0) return fallback;\n return Math.floor(limit);\n}\n\nfunction pushBounded(target, value, limit) {\n if (limit === 0) return;\n target.push(value);\n if (target.length > limit) target.splice(0, target.length - limit);\n}\n\nconst TILE_KEY_OFFSET = 1 << 24;\nconst TILE_KEY_STRIDE = 1 << 25;\n\nexport class WorldState {\n #materialCounts = new Map();\n\n constructor(id, limits = {}) {\n this.historyLimits = {\n eventHistory: normalizeLimit(limits.eventHistory, DEFAULT_HISTORY_LIMITS.eventHistory),\n modelPacketHistory: normalizeLimit(limits.modelPacketHistory, DEFAULT_HISTORY_LIMITS.modelPacketHistory),\n chunkHistory: normalizeLimit(limits.chunkHistory, DEFAULT_HISTORY_LIMITS.chunkHistory)\n };\n // Totals stay truthful even though the retained arrays are capped.\n this.totalChunkCount = 0;\n this.totalEventCount = 0;\n this.id = id;\n this.seed = null;\n this.isOverworld = null;\n this.tileset = null;\n this.blockWidth = null;\n this.blockHeight = null;\n this.parentWorld = null;\n this.parentEntity = null;\n this.tiles = new Map();\n this.chunks = [];\n this.events = [];\n this.modelPackets = [];\n this.commsBubbles = [];\n this._bubbleSequence = 0;\n this.model = new ModelState({isOverworld: this.isOverworld});\n this.lastChunkPatch = null;\n this.lastPacket = null;\n this.meta = null;\n }\n\n readMeta(packet) {\n this.meta = packet;\n this.seed = packet.seed ?? this.seed;\n const isOverworld = packet.is_overworld ?? this.isOverworld;\n this.isOverworld = isOverworld == null ? null : Boolean(isOverworld);\n this.tileset = this.isOverworld == null ? null : getTilesetForWorld(this.isOverworld);\n this.model.setWorldKind(this.isOverworld);\n this.blockWidth = packet.block_w ?? this.blockWidth;\n this.blockHeight = packet.block_h ?? this.blockHeight;\n this.parentWorld = packet.parent_world ?? this.parentWorld;\n this.parentEntity = packet.parent_ent ?? this.parentEntity;\n this.lastPacket = packet;\n }\n\n // Bounded event log. Kept as a method so every call site shares the cap and\n // the running total stays accurate.\n recordEvent(event) {\n this.totalEventCount += 1;\n pushBounded(this.events, event, this.historyLimits.eventHistory);\n return event;\n }\n\n addCommsBubble(packet) {\n const raw = packet?.bubble && typeof packet.bubble === \"object\" ? packet.bubble : {};\n const color = Number.isFinite(Number(raw.color)) ? Number(raw.color) : null;\n const bubble = {\n sequence: ++this._bubbleSequence,\n worldId: this.id,\n entity: Number.isFinite(Number(raw.model_id)) ? Number(raw.model_id) : null,\n modelId: Number.isFinite(Number(raw.model_id)) ? Number(raw.model_id) : null,\n message: typeof raw.msg === \"string\" ? raw.msg : \"\",\n color,\n colorCss: color == null ? null : `rgb(${(color >> 16) & 0xff},${(color >> 8) & 0xff},${color & 0xff})`,\n durationSeconds: Number.isFinite(Number(raw.time)) ? Number(raw.time) : null,\n raw: {...raw}\n };\n this.commsBubbles.push(bubble);\n if (this.commsBubbles.length > 50) this.commsBubbles.splice(0, this.commsBubbles.length - 50);\n this.recordEvent({type: \"comms-bubble\", packet, bubble});\n this.lastPacket = packet;\n return bubble;\n }\n\n decodeEncrypted(data) {\n if (!data || this.seed == null) return null;\n return decodeWorldPayload(data, this.id, this.seed);\n }\n\n applyTile(value) {\n if (!Array.isArray(value) || value.length !== 6) return null;\n const [x, y, material, shape, hp, color] = value;\n return this.setTile({x, y, material, shape, hp, integrity: hp, color});\n }\n\n applyChunk(value) {\n if (!Array.isArray(value) || value.length !== 7) return null;\n const [chunkX, chunkY, minX, minY, maxX, maxY, compressedPatch] = value;\n // Index the decompressed bytes directly; spreading into a plain array cost\n // ~16k boxed elements for a full chunk.\n const patch = decompressWorldChunk(compressedPatch);\n const width = maxX - minX + 1;\n const height = maxY - minY + 1;\n const count = width * height;\n const hasColor = patch.length >= count * 4;\n const tiles = new Array(count);\n const baseX = chunkX << 6;\n const baseY = chunkY << 6;\n for (let i = 0; i < count; i++) {\n const localX = minX + (i % width);\n const localY = minY + Math.floor(i / width);\n const hp = patch[i + count * 2];\n tiles[i] = this.#storeTile(this.#buildTile(\n baseX + localX,\n baseY + localY,\n patch[i],\n patch[i + count],\n hp,\n hasColor ? patch[i + count * 3] : null\n ));\n }\n this.totalChunkCount += 1;\n pushBounded(this.chunks, {chunkX, chunkY, minX, minY, maxX, maxY, tiles}, this.historyLimits.chunkHistory);\n this.lastChunkPatch = {chunkX, chunkY, minX, minY, maxX, maxY, count, hasColor};\n return tiles;\n }\n\n setTile(tile) {\n return this.#storeTile(this.normalizeTile(tile));\n }\n\n // Chunk decoding produces millions of tiles at join time, so build the final\n // object in one pass instead of a literal plus a spread copy.\n #buildTile(x, y, material, shape, hp, color) {\n const def = this.tileDefinition(material);\n const maxHp = def?.hp ?? null;\n const value = hp ?? null;\n return {\n x,\n y,\n material,\n shape,\n hp: value,\n integrity: value,\n color,\n materialName: def?.name ?? null,\n shapeName: tileShapeName(shape),\n solid: def?.solid ?? null,\n maxHp,\n hpRatio: typeof value === \"number\" ? value / 255 : null,\n hpValue: typeof value === \"number\" && typeof maxHp === \"number\" ? Math.round((value / 255) * maxHp) : null\n };\n }\n\n // Numeric key: a template string per tile was a measurable share of chunk\n // decode. The map is only ever read through values()/size, so the key format\n // is internal.\n #storeTile(normalized) {\n const key = ((normalized.y + TILE_KEY_OFFSET) * TILE_KEY_STRIDE) + (normalized.x + TILE_KEY_OFFSET);\n const previous = this.tiles.get(key);\n if (previous !== undefined) this.#countMaterial(previous.material, -1);\n this.#countMaterial(normalized.material, 1);\n this.tiles.set(key, normalized);\n return normalized;\n }\n\n #countMaterial(material, delta) {\n const id = Number(material);\n const next = (this.#materialCounts.get(id) || 0) + delta;\n if (next > 0) this.#materialCounts.set(id, next);\n else this.#materialCounts.delete(id);\n }\n\n normalizeTile(tile) {\n const def = this.tileDefinition(tile.material);\n const hp = tile.hp ?? tile.integrity ?? null;\n const maxHp = def?.hp ?? null;\n return {\n ...tile,\n hp,\n integrity: hp,\n materialName: def?.name ?? null,\n shapeName: tileShapeName(tile.shape),\n solid: def?.solid ?? null,\n maxHp,\n hpRatio: typeof hp === \"number\" ? hp / 255 : null,\n hpValue: typeof hp === \"number\" && typeof maxHp === \"number\" ? Math.round((hp / 255) * maxHp) : null\n };\n }\n\n // Counts are maintained as tiles are stored; this used to rescan every tile\n // on each call and ran on every snapshot.\n materials() {\n return [...this.#materialCounts.entries()]\n .sort((a, b) => a[0] - b[0])\n .map(([material, count]) => {\n const def = this.tileDefinition(material);\n return {\n material,\n name: def?.name ?? null,\n count,\n solid: def?.solid ?? null,\n hp: def?.hp ?? null\n };\n });\n }\n\n snapshot({includeTiles = false, includeModel = false, includeBlocks = false} = {}) {\n const model = this.model.snapshot({includeTables: includeModel, includeBlocks});\n const overworldZone = this.isOverworld ? overworldZoneFromId(this.id) : null;\n return {\n id: this.id,\n is_overworld: this.isOverworld,\n overworldZone,\n shipMetadata: this.model.shipMetadata(),\n tileset: this.tileset,\n seed: this.seed,\n block_w: this.blockWidth,\n block_h: this.blockHeight,\n parent_world: this.parentWorld,\n parent_ent: this.parentEntity,\n tileCount: this.tiles.size,\n chunkCount: this.totalChunkCount,\n lastChunkPatch: this.lastChunkPatch,\n lastPacket: this.lastPacket,\n meta: this.meta,\n materials: this.materials(),\n model,\n entities: model.entities,\n blocks: model.blocks,\n transforms: model.transforms,\n machines: model.machines,\n players: model.players,\n shipControls: model.shipControls,\n commsBubbles: this.commsBubbles.slice(),\n tiles: includeTiles ? [...this.tiles.values()] : undefined\n };\n }\n\n table(id) {\n return this.model.table(id);\n }\n\n record(tableId, entityId) {\n return this.model.record(tableId, entityId);\n }\n\n tileDefinition(material) {\n if (!this.tileset || !Array.isArray(this.tileset.tiles)) return null;\n return this.tileset.tiles[Number(material)] || null;\n }\n\n entity(entityId) {\n return this.model.entity(entityId);\n }\n\n entities() {\n return this.model.entities();\n }\n\n blocks() {\n return this.model.blocks();\n }\n\n blockAt(x, y) {\n return this.model.blockAt(x, y);\n }\n}\n", "import {WorldState} from \"./state.js\";\nimport {ModelState} from \"../model/index.js\";\nimport {decodeModelPayload} from \"../../protocol/inbound/world-payload.js\";\n\nexport {WorldState};\n\n// Retention limits for per-world history. These arrays previously grew without\n// bound for the lifetime of a connection. Pass Infinity to restore that.\nconst DEFAULT_HISTORY_LIMITS = {\n eventHistory: 200,\n modelPacketHistory: 100,\n chunkHistory: 64\n};\n\nfunction normalizeLimit(value, fallback) {\n if (value === Infinity) return Infinity;\n const limit = Number(value);\n if (!Number.isFinite(limit) || limit < 0) return fallback;\n return Math.floor(limit);\n}\n\nfunction pushBounded(target, value, limit) {\n if (limit === 0) return;\n target.push(value);\n if (target.length > limit) target.splice(0, target.length - limit);\n}\n\nexport class WorldStore {\n #overworldId = null;\n #shipWorldId = null;\n\n constructor(limits = {}) {\n this.currentWorldId = null;\n this.worlds = new Map();\n this.historyLimits = {\n eventHistory: normalizeLimit(limits.eventHistory, DEFAULT_HISTORY_LIMITS.eventHistory),\n modelPacketHistory: normalizeLimit(limits.modelPacketHistory, DEFAULT_HISTORY_LIMITS.modelPacketHistory),\n chunkHistory: normalizeLimit(limits.chunkHistory, DEFAULT_HISTORY_LIMITS.chunkHistory)\n };\n }\n\n get(id) {\n const worldId = Number(id);\n if (!this.worlds.has(worldId)) this.worlds.set(worldId, new WorldState(worldId, this.historyLimits));\n return this.worlds.get(worldId);\n }\n\n apply(packet) {\n if (!packet || packet.world == null) return null;\n if (packet.type === 22) return this.#applyMeta(packet);\n if (packet.type === 23) return this.#applyTiles(packet);\n if (packet.type === 20) return this.#applyModel(packet);\n if (packet.type === 13) return this.#applyCommsBubble(packet);\n return null;\n }\n\n snapshot({includeTiles = false, includeModel = false, includeBlocks = false} = {}) {\n return [...this.worlds.values()].map((world) => world.snapshot({includeTiles, includeModel, includeBlocks}));\n }\n\n ids() {\n return [...this.worlds.keys()];\n }\n\n // Both resolvers are called on nearly every public read, and each used to\n // spread the whole world map. Cache the resolved id and re-scan only when the\n // cached world no longer satisfies the predicate.\n overworld() {\n const cached = this.#overworldId != null ? this.worlds.get(this.#overworldId) : null;\n if (cached && cached.isOverworld === true) return cached;\n for (const world of this.worlds.values()) {\n if (world.isOverworld === true) {\n this.#overworldId = world.id;\n return world;\n }\n }\n this.#overworldId = null;\n return null;\n }\n\n shipWorld() {\n if (this.currentWorldId != null) return this.worlds.get(Number(this.currentWorldId)) || null;\n const cached = this.#shipWorldId != null ? this.worlds.get(this.#shipWorldId) : null;\n if (cached && cached.isOverworld === false) return cached;\n for (const world of this.worlds.values()) {\n if (world.isOverworld === false) {\n this.#shipWorldId = world.id;\n return world;\n }\n }\n this.#shipWorldId = null;\n return null;\n }\n\n currentShipEntity() {\n const shipWorld = this.shipWorld();\n if (!shipWorld || shipWorld.parentWorld == null || shipWorld.parentEntity == null) return null;\n return this.worlds.get(Number(shipWorld.parentWorld))?.entity(shipWorld.parentEntity) || null;\n }\n\n #applyMeta(packet) {\n if (packet.removed) {\n const world = this.worlds.get(Number(packet.world));\n if (world) world.readMeta(packet);\n this.worlds.delete(Number(packet.world));\n if (this.currentWorldId === Number(packet.world)) this.currentWorldId = null;\n return {type: \"world-removed\", world: world || null, packet};\n }\n const world = this.get(packet.world);\n world.readMeta(packet);\n if (this.currentWorldId == null && !world.isOverworld) this.currentWorldId = world.id;\n return {type: \"world\", world};\n }\n\n #applyTiles(packet) {\n const world = this.get(packet.world);\n const decoded = world.decodeEncrypted(packet.data);\n const updates = [];\n const errors = [];\n if (decoded && typeof decoded === \"object\") {\n for (const [kind, value] of Object.entries(decoded)) {\n try {\n if (kind === \"0\") updates.push({kind, tiles: world.applyChunk(value)});\n else if (kind === \"1\") updates.push({kind, tile: world.applyTile(value)});\n else updates.push({kind, value});\n } catch (error) {\n errors.push(error);\n updates.push({kind, value, error: error.message});\n }\n }\n }\n world.recordEvent({type: \"tiles\", packet, decoded, updates, errors});\n return {type: \"tiles\", world, decoded, updates, errors};\n }\n\n #applyModel(packet) {\n const world = this.get(packet.world);\n const result = {\n worldId: packet.world,\n full: Boolean(packet.full),\n events: Array.isArray(packet.events) ? packet.events : [],\n modelData: packet.model_data || null,\n decoded: null,\n model: null,\n commandNumber: typeof packet.command_number === \"number\" ? packet.command_number : null,\n timing: {\n roundTimeLeft: packet.round_time_left ?? null,\n regenTimeLeft: packet.regen_time_left ?? null,\n removeOnRegen: packet.remove_on_regen ?? null,\n globalEventTime: packet.global_event_time ?? null,\n tickTime: packet.tick_time ?? null,\n tickQuota: packet.tick_quota ?? null,\n cpuLoad: packet.cpu_load ?? null,\n relayTime: packet.relay_time ?? null\n }\n };\n if (packet.model_data && world.seed != null) {\n const previousModel = world.model;\n try {\n if (packet.full) world.model = new ModelState({isOverworld: world.isOverworld});\n result.decoded = decodeModelPayload(packet.model_data, packet.world, world.seed);\n result.model = world.model.apply(result.decoded, {full: Boolean(packet.full)});\n if (result.model?.error && packet.full && previousModel) world.model = previousModel;\n } catch (error) {\n if (packet.full && previousModel) world.model = previousModel;\n result.error = error;\n }\n }\n pushBounded(world.modelPackets, result, world.historyLimits.modelPacketHistory);\n world.recordEvent({type: \"model\", packet, result});\n world.lastPacket = packet;\n return {type: \"model\", world, result};\n }\n\n #applyCommsBubble(packet) {\n const world = this.get(packet.world);\n const bubble = world.addCommsBubble(packet);\n return {type: \"comms-bubble\", world, packet, bubble};\n }\n}\n", "const BLUEPRINT_PLACEMENT_TYPE = 9;\n\nfunction requireFiniteNumber(value, name) {\n const number = Number(value);\n if (!Number.isFinite(number)) throw new TypeError(`${name} must be a finite number`);\n return number;\n}\n\nfunction requirePositiveInteger(value, name) {\n const number = Number(value);\n if (!Number.isInteger(number) || number <= 0) throw new RangeError(`${name} must be a positive integer`);\n return number;\n}\n\nfunction normalizeBlueprintDimension(placement, publicName, protocolName) {\n const value = placement[publicName] ?? placement[protocolName];\n return requirePositiveInteger(value, publicName);\n}\n\nfunction buildBlueprintPlacementMessage(placement = {}) {\n const source = placement.source;\n if (typeof source !== \"string\" || !source) throw new TypeError(\"source must be a non-empty blueprint string\");\n return {\n type: BLUEPRINT_PLACEMENT_TYPE,\n x: requireFiniteNumber(placement.x, \"x\"),\n y: requireFiniteNumber(placement.y, \"y\"),\n w: normalizeBlueprintDimension(placement, \"width\", \"w\"),\n h: normalizeBlueprintDimension(placement, \"height\", \"h\"),\n source\n };\n}\n\nexport {\n BLUEPRINT_PLACEMENT_TYPE,\n buildBlueprintPlacementMessage\n};\n", "const CHAT_MESSAGE_TYPE = 2;\n\nfunction buildChatMessage(message = \"\") {\n return {\n type: CHAT_MESSAGE_TYPE,\n msg: String(message)\n };\n}\n\nexport {\n CHAT_MESSAGE_TYPE,\n buildChatMessage\n};\n", "const COMMS_MESSAGE_TYPE = 3;\n\nfunction buildCommsMessage(message = \"\") {\n return {\n type: COMMS_MESSAGE_TYPE,\n msg: String(message)\n };\n}\n\nfunction normalizeCommsEvent(event) {\n const rawMessages = Array.isArray(event?.msgs_text) ? event.msgs_text : [];\n return {\n ...event,\n entity: event?.ent_id != null && Number.isFinite(Number(event.ent_id)) ? Number(event.ent_id) : null,\n rawMessages,\n messages: rawMessages.map((message) => ({\n raw: message,\n text: flattenRichText(message)\n }))\n };\n}\n\nfunction flattenRichText(value) {\n if (value == null) return \"\";\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n if (Array.isArray(value)) return value.map(flattenRichText).join(\"\");\n if (typeof value === \"object\") {\n if (Object.hasOwn(value, \"c\")) return flattenRichText(value.c);\n if (Object.hasOwn(value, \"text\")) return flattenRichText(value.text);\n }\n return \"\";\n}\n\nexport {\n COMMS_MESSAGE_TYPE,\n buildCommsMessage,\n flattenRichText,\n normalizeCommsEvent\n};\n", "import {COMMAND_DEFAULT_FORMATS, COMMAND_FIELDS, encoder} from \"../../constants.js\";\nimport {concatBytes, toUint8Array} from \"../codec/binary.js\";\nimport {cloneDragValue, encodeMapHeader, encodeStringBytes, encodeValue} from \"../codec/msgpack.js\";\n\nconst SHA256_K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\nfunction buildCommandDefaults(command = {}) {\n const out = {};\n for (const key of COMMAND_FIELDS) {\n if (key === \"drag\") {\n out[key] = cloneDragValue(command[key]);\n continue;\n }\n if (command[key] !== undefined) out[key] = command[key];\n else if (COMMAND_DEFAULT_FORMATS[key] === \"nil\") out[key] = null;\n else if (COMMAND_DEFAULT_FORMATS[key] === \"bool\") out[key] = false;\n else if (COMMAND_DEFAULT_FORMATS[key] === \"float32\") out[key] = 0;\n else out[key] = 0;\n }\n out.type = command.type ?? 0;\n out.n = command.n ?? null;\n return out;\n}\n\n// Field names and the map header are identical for every command, so encode\n// them once instead of on each send.\nconst COMMAND_MAP_HEADER = encodeMapHeader(COMMAND_FIELDS.length);\nconst COMMAND_FIELD_KEY_BYTES = COMMAND_FIELDS.map((key) => encodeStringBytes(key));\n\nfunction buildCommandBody(command) {\n const normalized = buildCommandDefaults(command);\n const parts = [COMMAND_MAP_HEADER];\n for (let i = 0; i < COMMAND_FIELDS.length; i++) {\n parts.push(COMMAND_FIELD_KEY_BYTES[i]);\n parts.push(encodeValue(COMMAND_FIELDS[i], normalized[COMMAND_FIELDS[i]], null));\n }\n return concatBytes(parts);\n}\n\n// The prefix depends only on the session id, which is fixed for a connection.\nlet signaturePrefixSid = null;\nlet signaturePrefixBytes = null;\n\nfunction buildSignaturePrefix(sessionId) {\n const sid = Number(sessionId) >>> 0;\n if (sid === signaturePrefixSid && signaturePrefixBytes) return signaturePrefixBytes;\n const a = (sid ^ 52481) >>> 0;\n const b = ((sid << 2) + 69) >>> 0;\n const c = ((((sid >>> 1) * 5) >>> 0) + 420) >>> 0;\n signaturePrefixBytes = encoder.encode(`MJAF${a}CANH${b}SCLJ${c}LODV`);\n signaturePrefixSid = sid;\n return signaturePrefixBytes;\n}\n\nfunction rightRotate(value, bits) {\n return (value >>> bits) | (value << (32 - bits));\n}\n\nfunction sha256(bytes) {\n const input = toUint8Array(bytes);\n const bitLength = input.length * 8;\n const paddingLength = ((56 - ((input.length + 1) % 64)) + 64) % 64;\n const padded = new Uint8Array(input.length + 1 + paddingLength + 8);\n padded.set(input, 0);\n padded[input.length] = 0x80;\n const view = new DataView(padded.buffer);\n const high = Math.floor(bitLength / 0x100000000);\n const low = bitLength >>> 0;\n view.setUint32(padded.length - 8, high, false);\n view.setUint32(padded.length - 4, low, false);\n\n const state = new Uint32Array([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ]);\n const schedule = new Uint32Array(64);\n\n for (let offset = 0; offset < padded.length; offset += 64) {\n for (let index = 0; index < 16; index++) schedule[index] = view.getUint32(offset + index * 4, false);\n for (let index = 16; index < 64; index++) {\n const s0 = rightRotate(schedule[index - 15], 7) ^ rightRotate(schedule[index - 15], 18) ^ (schedule[index - 15] >>> 3);\n const s1 = rightRotate(schedule[index - 2], 17) ^ rightRotate(schedule[index - 2], 19) ^ (schedule[index - 2] >>> 10);\n schedule[index] = (((schedule[index - 16] + s0) >>> 0) + ((schedule[index - 7] + s1) >>> 0)) >>> 0;\n }\n\n let a = state[0], b = state[1], c = state[2], d = state[3], e = state[4], f = state[5], g = state[6],\n h = state[7];\n for (let index = 0; index < 64; index++) {\n const S1 = rightRotate(e, 6) ^ rightRotate(e, 11) ^ rightRotate(e, 25);\n const ch = (e & f) ^ (~e & g);\n const temp1 = (((((h + S1) >>> 0) + ch) >>> 0) + ((SHA256_K[index] + schedule[index]) >>> 0)) >>> 0;\n const S0 = rightRotate(a, 2) ^ rightRotate(a, 13) ^ rightRotate(a, 22);\n const maj = (a & b) ^ (a & c) ^ (b & c);\n const temp2 = (S0 + maj) >>> 0;\n h = g;\n g = f;\n f = e;\n e = (d + temp1) >>> 0;\n d = c;\n c = b;\n b = a;\n a = (temp1 + temp2) >>> 0;\n }\n\n state[0] = (state[0] + a) >>> 0;\n state[1] = (state[1] + b) >>> 0;\n state[2] = (state[2] + c) >>> 0;\n state[3] = (state[3] + d) >>> 0;\n state[4] = (state[4] + e) >>> 0;\n state[5] = (state[5] + f) >>> 0;\n state[6] = (state[6] + g) >>> 0;\n state[7] = (state[7] + h) >>> 0;\n }\n\n const out = new Uint8Array(32);\n const outView = new DataView(out.buffer);\n for (let i = 0; i < 8; i++) outView.setUint32(i * 4, state[i], false);\n return out;\n}\n\nfunction signCommandBody(body, sessionId) {\n return sha256(concatBytes([buildSignaturePrefix(sessionId), body, encoder.encode(\"YXTG\")]));\n}\n\nfunction buildSignedCommandPacket(command, sessionId) {\n const body = buildCommandBody(command);\n const signature = signCommandBody(body, sessionId);\n return concatBytes([body, signature]);\n}\n\n\nexport {\n buildCommandDefaults,\n buildCommandBody,\n buildSignaturePrefix,\n rightRotate,\n sha256,\n signCommandBody,\n buildSignedCommandPacket\n};\n", "import {itemNameFromId} from \"../../state/items.js\";\n\nexport const EquipmentSlot = Object.freeze({\n Head: \"head\",\n Face: \"face\",\n Body: \"body\",\n Back: \"back\",\n Hands: \"hands\",\n Feet: \"feet\"\n});\n\nconst EQUIPMENT_SLOT_INDEXES = Object.freeze({\n [EquipmentSlot.Head]: 16,\n [EquipmentSlot.Face]: 17,\n [EquipmentSlot.Body]: 18,\n [EquipmentSlot.Back]: 19,\n [EquipmentSlot.Hands]: 20,\n [EquipmentSlot.Feet]: 21\n});\n\nconst EQUIPMENT_SLOT_NAMES = new Map([\n [16, EquipmentSlot.Head],\n [17, EquipmentSlot.Face],\n [18, EquipmentSlot.Body],\n [19, EquipmentSlot.Back],\n [20, EquipmentSlot.Hands],\n [21, EquipmentSlot.Feet]\n]);\n\nconst EQUIPMENT_SLOT_VALUES = new Map([\n [EquipmentSlot.Head, 16],\n [EquipmentSlot.Face, 17],\n [EquipmentSlot.Body, 18],\n [EquipmentSlot.Back, 19],\n [EquipmentSlot.Hands, 20],\n [EquipmentSlot.Feet, 21]\n]);\n\nfunction normalizeEquipmentSlot(slot) {\n const normalized = EQUIPMENT_SLOT_VALUES.get(slot);\n if (!EQUIPMENT_SLOT_NAMES.has(normalized)) {\n throw new RangeError(`equipment slot must be an EquipmentSlot value`);\n }\n return normalized;\n}\n\nfunction equipmentSlotName(slot) {\n return EQUIPMENT_SLOT_NAMES.get(Number(slot)) ?? null;\n}\n\nfunction buildInventoryDragCommand(source, target, split = false) {\n return {\n drag: {\n source: normalizeInventoryIndex(source, \"source\"),\n target: normalizeInventoryIndex(target, \"target\"),\n split: Boolean(split)\n }\n };\n}\n\nfunction buildEquipItemCommand(source, slot, split = false) {\n return buildInventoryDragCommand(source, normalizeEquipmentSlot(slot), split);\n}\n\nfunction buildUnequipItemCommand(slot, target = 0, split = false) {\n return buildInventoryDragCommand(normalizeEquipmentSlot(slot), target, split);\n}\n\nfunction normalizeInventoryEvent(event) {\n const items = Array.isArray(event?.items) ? event.items : [];\n const counts = Array.isArray(event?.item_counts) ? event.item_counts : [];\n const rawHotbarSize = Number(event?.general_slots ?? 0);\n const hotbarSize = Number.isFinite(rawHotbarSize) && rawHotbarSize > 0 ? Math.trunc(rawHotbarSize) : 0;\n\n const slotSnapshot = (index, kind) => {\n const count = normalizeCount(counts[index]);\n const itemId = normalizeItemId(items[index], count);\n return {\n index,\n itemId,\n itemName: itemNameFromId(itemId),\n count,\n kind,\n equipmentSlot: equipmentSlotName(index),\n empty: itemId == null || count <= 0\n };\n };\n\n const slotsByIndex = new Map();\n for (let index = 0; index < hotbarSize; index++) {\n slotsByIndex.set(index, slotSnapshot(index, \"hotbar\"));\n }\n slotsByIndex.set(EQUIPMENT_SLOT_INDEXES.head, slotSnapshot(EQUIPMENT_SLOT_INDEXES.head, \"equipment\"));\n slotsByIndex.set(EQUIPMENT_SLOT_INDEXES.face, slotSnapshot(EQUIPMENT_SLOT_INDEXES.face, \"equipment\"));\n slotsByIndex.set(EQUIPMENT_SLOT_INDEXES.body, slotSnapshot(EQUIPMENT_SLOT_INDEXES.body, \"equipment\"));\n slotsByIndex.set(EQUIPMENT_SLOT_INDEXES.back, slotSnapshot(EQUIPMENT_SLOT_INDEXES.back, \"equipment\"));\n slotsByIndex.set(EQUIPMENT_SLOT_INDEXES.hands, slotSnapshot(EQUIPMENT_SLOT_INDEXES.hands, \"equipment\"));\n slotsByIndex.set(EQUIPMENT_SLOT_INDEXES.feet, slotSnapshot(EQUIPMENT_SLOT_INDEXES.feet, \"equipment\"));\n\n const slots = [...slotsByIndex.values()].sort((a, b) => a.index - b.index);\n const hotbar = slots.filter((slot) => slot.kind === \"hotbar\");\n const equipment = {\n head: slotsByIndex.get(EQUIPMENT_SLOT_INDEXES.head),\n face: slotsByIndex.get(EQUIPMENT_SLOT_INDEXES.face),\n body: slotsByIndex.get(EQUIPMENT_SLOT_INDEXES.body),\n back: slotsByIndex.get(EQUIPMENT_SLOT_INDEXES.back),\n hands: slotsByIndex.get(EQUIPMENT_SLOT_INDEXES.hands),\n feet: slotsByIndex.get(EQUIPMENT_SLOT_INDEXES.feet)\n };\n\n return {\n type: \"inventory\",\n filter: event?.filter,\n hotbarSize,\n slots,\n hotbar,\n equipment\n };\n}\n\nfunction normalizeInventoryIndex(value, name) {\n const number = Number(value);\n if (!Number.isInteger(number) || number < 0) throw new RangeError(`${name} must be a non-negative integer inventory slot`);\n return number;\n}\n\nfunction normalizeCount(value) {\n const number = Number(value ?? 0);\n return Number.isFinite(number) ? number : 0;\n}\n\nfunction normalizeItemId(value, count) {\n if (value == null) return null;\n const number = Number(value);\n if (!Number.isFinite(number)) return null;\n return number === 0 && count === 0 ? null : number;\n}\n\nexport {\n EQUIPMENT_SLOT_INDEXES,\n buildEquipItemCommand,\n buildInventoryDragCommand,\n buildUnequipItemCommand,\n equipmentSlotName,\n normalizeEquipmentSlot,\n normalizeInventoryEvent\n};\n", "const SHIP_MANAGEMENT_TYPE = 4;\nconst SET_PRIVACY_ACTION = \"set_privacy\";\nconst STARTER_RECOVERY_ACTION = \"starter_recovery\";\nconst PLAYER_LIST_ACTION = \"player_list\";\nconst INVITE_RESET_ACTION = \"invite_reset\";\nconst SET_RANK_ACTION = \"set_rank\";\nconst KICK_ACTION = \"kick\";\nconst BAN_ACTION = \"ban\";\nconst DEMOTE_SELF_ACTION = \"demote_self\";\n\nfunction requireNonNegativeInteger(value, name) {\n const number = Number(value);\n if (!Number.isInteger(number) || number < 0) throw new RangeError(`${name} must be a non-negative integer`);\n return number;\n}\n\nfunction normalizePrivacy(value) {\n if (value === true || value === 1 || value === \"private\") return 1;\n if (value === false || value === 0 || value === \"public\") return 0;\n throw new RangeError(`privacy must be 0, 1, true, false, \"public\", or \"private\"`);\n}\n\nfunction normalizePlayerRef(value) {\n return requireNonNegativeInteger(value, \"refId\");\n}\n\nfunction normalizePlayerRank(value) {\n if (value === 0 || value === \"guest\") return 0;\n if (value === 1 || value === \"crew\") return 1;\n if (value === 3 || value === \"captain\") return 3;\n throw new RangeError(`rank must be 0, 1, 3, \"guest\", \"crew\", or \"captain\"`);\n}\n\nexport function buildShipManagementMessage(act, arg = null, extra = null) {\n if (typeof act !== \"string\" || !act) throw new TypeError(`act must be a non-empty string`);\n const message = {type: SHIP_MANAGEMENT_TYPE, act, arg};\n if (extra && typeof extra === \"object\") Object.assign(message, extra);\n return message;\n}\n\nexport function buildShipPrivacyMessage(privacy) {\n return buildShipManagementMessage(SET_PRIVACY_ACTION, normalizePrivacy(privacy));\n}\n\nexport function buildStarterRecoveryMessage(itemId) {\n return buildShipManagementMessage(STARTER_RECOVERY_ACTION, requireNonNegativeInteger(itemId, \"itemId\"));\n}\n\nexport function buildPlayerListMessage() {\n return buildShipManagementMessage(PLAYER_LIST_ACTION);\n}\n\nexport function buildInviteResetMessage() {\n return buildShipManagementMessage(INVITE_RESET_ACTION);\n}\n\nexport function buildSetPlayerRankMessage(refId, rank) {\n return buildShipManagementMessage(SET_RANK_ACTION, normalizePlayerRef(refId), {rank: normalizePlayerRank(rank)});\n}\n\nexport function buildKickPlayerMessage(refId) {\n return buildShipManagementMessage(KICK_ACTION, normalizePlayerRef(refId));\n}\n\nexport function buildBanPlayerMessage(refId) {\n return buildShipManagementMessage(BAN_ACTION, normalizePlayerRef(refId));\n}\n\nexport function buildDemoteSelfMessage() {\n return buildShipManagementMessage(DEMOTE_SELF_ACTION);\n}\n\nexport function normalizeShipConfig(event = {}) {\n const source = event && typeof event === \"object\" ? event : {};\n const config = source.config && typeof source.config === \"object\" ? source.config : {};\n return {\n privacy: config.privacy ?? null,\n privacyName: config.privacy === 0 ? \"public\" : config.privacy === 1 ? \"private\" : null,\n inviteKey: config.invite_key ?? null,\n teamId: source.team_id ?? null,\n patronPerks: Array.isArray(source.patron_perks) ? source.patron_perks.slice() : []\n };\n}\n\nexport function normalizeCaptainSubrank(event = {}) {\n const source = event && typeof event === \"object\" ? event : {};\n return {\n subrank: source.subrank ?? null,\n enableCheats: Boolean(source.enable_cheats)\n };\n}\n\nexport function normalizeShipPlayerList(event = {}, previous = null, currentCaptainSubrank = null) {\n const source = event && typeof event === \"object\" ? event : {};\n const changes = Array.isArray(source.player_list) ? source.player_list.map(normalizePlayerListChange) : [];\n const removedPlayers = changes\n .filter((change) => change.remove && Number.isFinite(Number(change.refId)))\n .map((change) => Number(change.refId));\n const changedPlayers = changes.filter((change) => !change.remove).map(({remove: _remove, ...change}) => change);\n const players = mergePlayerListChanges(previous?.players, changes);\n const ownerCaptainRank = ownerRankForPlayers(players);\n applyPlayerControlState(players, currentCaptainSubrank);\n applyPlayerControlState(changedPlayers, currentCaptainSubrank);\n return {\n ownerCaptainRank,\n shipOwners: players.filter((player) => player.isShipOwner),\n players,\n changes: changedPlayers,\n removedPlayers\n };\n}\n\nfunction mergePlayerListChanges(previousPlayers, changes) {\n if (!Array.isArray(previousPlayers) || !previousPlayers.length) return changes.filter((change) => !change.remove).map(({\n remove: _remove,\n ...player\n }) => ({...player}));\n\n const existing = new Map();\n for (const player of previousPlayers) {\n if (player?.refId == null) continue;\n existing.set(player.refId, {...player, isShipOwner: false});\n }\n\n const changedRefs = new Set();\n const merged = [];\n for (const change of changes) {\n if (change.refId == null) {\n if (!change.remove) {\n const {remove: _remove, ...player} = change;\n merged.push({...player, isShipOwner: false});\n }\n continue;\n }\n changedRefs.add(change.refId);\n if (change.remove) {\n existing.delete(change.refId);\n continue;\n }\n const {remove: _remove, ...changePlayer} = change;\n const player = {...(existing.get(change.refId) || {}), ...changePlayer, isShipOwner: false};\n existing.set(change.refId, player);\n merged.push(player);\n }\n\n for (const player of previousPlayers) {\n if (player?.refId == null || changedRefs.has(player.refId)) continue;\n const retained = existing.get(player.refId);\n if (retained) merged.push(retained);\n }\n return merged;\n}\n\nfunction normalizePlayerListChange(entry = {}) {\n const source = entry && typeof entry === \"object\" ? entry : {};\n if (source._removed) return {refId: source.ref_id ?? null, remove: true};\n return {\n refId: source.ref_id ?? null,\n remove: false,\n discrim: source.discrim ?? null,\n discrimColor: source.discrim_color ?? null,\n teamRank: source.team_rank ?? null,\n captainRank: source.captain_rank ?? null,\n isCaptain: Number(source.captain_rank) > 0,\n isShipOwner: false,\n canBeManaged: false,\n time: source.time ?? null,\n items: Array.isArray(source.items) ? source.items.slice() : [],\n aliasDiscrims: Array.isArray(source.alias_discrims) ? source.alias_discrims.slice() : [],\n extraAliasCount: normalizeNonNegativeNumber(source.extra_aliases),\n onlineCount: source.online_count ?? null\n };\n}\n\nfunction normalizeNonNegativeNumber(value) {\n const number = Number(value);\n return Number.isFinite(number) && number > 0 ? number : 0;\n}\n\nfunction ownerRankForPlayers(players) {\n const ranks = players\n .filter((player) => Number(player.captainRank) > 0)\n .map((player) => Number(player.captainRank))\n .filter(Number.isFinite);\n if (!ranks.length) return null;\n const ownerRank = Math.min(...ranks);\n for (const player of players) player.isShipOwner = Number(player.captainRank) === ownerRank;\n return ownerRank;\n}\n\nfunction applyPlayerControlState(players, currentCaptainSubrank) {\n const currentRank = currentCaptainRank(currentCaptainSubrank);\n for (const player of players) player.canBeManaged = playerCanBeManagedBy(player, currentRank);\n}\n\nfunction currentCaptainRank(currentCaptainSubrank) {\n const rank = Number(currentCaptainSubrank?.subrank);\n return Number.isFinite(rank) && rank > 0 ? rank : null;\n}\n\nfunction playerCanBeManagedBy(player, currentRank) {\n if (!Number.isFinite(currentRank) || !player) return false;\n const targetCaptainRank = Number(player.captainRank);\n if (Number.isFinite(targetCaptainRank) && targetCaptainRank > 0) return currentRank < targetCaptainRank;\n const targetTeamRank = Number(player.teamRank);\n return targetTeamRank === 0 || targetTeamRank === 1;\n}\n\nexport {\n BAN_ACTION,\n DEMOTE_SELF_ACTION,\n INVITE_RESET_ACTION,\n KICK_ACTION,\n PLAYER_LIST_ACTION,\n SET_PRIVACY_ACTION,\n SET_RANK_ACTION,\n SHIP_MANAGEMENT_TYPE,\n STARTER_RECOVERY_ACTION,\n normalizePlayerRank,\n normalizePrivacy\n};\n", "const SIGN_TEXT_COMMAND = \"sign_text\";\nconst SignDisplayMode = Object.freeze({\n Always: \"always\",\n WhenNear: \"when-near\",\n OnHover: \"on-hover\"\n});\nconst SIGN_DISPLAY_MODES = new Map([\n [0, SignDisplayMode.Always],\n [1, SignDisplayMode.WhenNear],\n [2, SignDisplayMode.OnHover]\n]);\nconst SIGN_DISPLAY_MODE_VALUES = new Map([\n [SignDisplayMode.Always, 0],\n [SignDisplayMode.WhenNear, 1],\n [SignDisplayMode.OnHover, 2]\n]);\n\nfunction normalizeSignDisplayMode(mode = SignDisplayMode.Always) {\n const normalized = SIGN_DISPLAY_MODE_VALUES.get(mode);\n if (normalized == null) {\n throw new RangeError(`sign display mode must be SignDisplayMode.Always, SignDisplayMode.WhenNear, or SignDisplayMode.OnHover`);\n }\n return normalized;\n}\n\nfunction signDisplayModeName(mode) {\n return SIGN_DISPLAY_MODES.get(mode) ?? null;\n}\n\nfunction buildSignTextMessage(text = \"\", mode = SignDisplayMode.Always) {\n return {\n type: 5,\n cmd: SIGN_TEXT_COMMAND,\n args: [String(text), normalizeSignDisplayMode(mode)]\n };\n}\n\nexport {\n SIGN_DISPLAY_MODES,\n SIGN_TEXT_COMMAND,\n SignDisplayMode,\n buildSignTextMessage,\n normalizeSignDisplayMode,\n signDisplayModeName\n};\n", "import {encoder} from \"../../constants.js\";\n\nconst NAV_UNIT_COMMAND = \"config_nav_unit\";\nconst GENERATOR_MAZE_PUZZLE_COMMAND = \"maze_puzzle\";\nconst CLIPBOARD_ANGLE_COMMAND = \"angle\";\nconst CLIPBOARD_FIXED_ANGLE_COMMAND = \"angle_fixed\";\nconst LOADER_CONFIG_COMMAND = \"config_loader\";\nconst LOADER_FILTER_CONFIG_COMMAND = \"filter_config\";\nconst LOADER_FILTER_ITEMS_COMMAND = \"filter_items\";\nconst PUSHER_CONFIG_COMMAND = \"config_pusher\";\nconst PUSHER_FILTER_ITEMS_COMMAND = \"filter_items\";\nconst NAV_UNIT_STRING_TAG = 0x8a;\nconst NAV_UNIT_HEADER_TAG = 0x90;\nconst NAV_UNIT_TRUE = 0x8e;\nconst NAV_UNIT_FALSE = 0x8d;\nconst NAV_UNIT_TRAILER = [0x91, 0x91];\nconst PUSHER_FILTER_INVENTORY_ON = 0x8d;\nconst PUSHER_FILTER_INVENTORY_OFF = 0x8e;\nconst LOADER_TRUE = 0x8d;\nconst LOADER_FALSE = 0x8e;\nconst UI_COMMAND_END = 0x91;\nconst CLIPBOARD_ACTION = 1;\n\nexport const PusherMode = Object.freeze({\n Push: \"push\",\n Pull: \"pull\",\n DoNothing: \"do-nothing\"\n});\n\nexport const LoaderPosition = Object.freeze({\n TopLeft: \"top-left\",\n TopMiddle: \"top-middle\",\n TopRight: \"top-right\",\n MiddleLeft: \"middle-left\",\n MiddleRight: \"middle-right\",\n BottomLeft: \"bottom-left\",\n BottomMiddle: \"bottom-middle\",\n BottomRight: \"bottom-right\"\n});\n\nexport const LoaderFilterMode = Object.freeze({\n AllowAll: \"allow-all\",\n BlockFilter: \"block-filter\",\n AllowFilter: \"allow-filter\",\n BlockAll: \"block-all\"\n});\n\nexport const FixedAngleDirection = Object.freeze({\n Right: \"right\",\n Up: \"up\",\n Left: \"left\",\n Down: \"down\"\n});\n\nexport const LoaderPriority = Object.freeze({\n Low: \"low\",\n Normal: \"normal\",\n High: \"high\"\n});\n\nfunction requireByteInteger(value, name) {\n const number = Number(value);\n if (!Number.isInteger(number) || number < 0 || number > 255) {\n throw new RangeError(`${name} must be an integer between 0 and 255`);\n }\n return number;\n}\n\nfunction requireUint16(value, name) {\n const number = Number(value);\n if (!Number.isInteger(number) || number < 0 || number > 0xffff) {\n throw new RangeError(`${name} must be an integer between 0 and 65535`);\n }\n return number;\n}\n\nfunction navConfigBool(value) {\n return value ? NAV_UNIT_TRUE : NAV_UNIT_FALSE;\n}\n\nfunction navWarpByte(value) {\n if (value === true || value === \"start\") return NAV_UNIT_FALSE;\n if (value === false || value == null || value === \"idle\" || value === \"cancel\") return NAV_UNIT_TRUE;\n throw new TypeError(`warp must be true, false, \"start\", \"idle\", or \"cancel\"`);\n}\n\nfunction requirePusherMode(value, name) {\n const number = PUSHER_MODE_VALUES.get(value);\n if (number == null || !Number.isInteger(number) || number < 0 || number > 2) {\n throw new RangeError(`${name} must be PusherMode.Push, PusherMode.Pull, or PusherMode.DoNothing`);\n }\n return number;\n}\n\nfunction requireLoaderPosition(value, name) {\n const number = LOADER_POSITION_VALUES.get(value);\n if (number == null || !Number.isInteger(number) || number < 0 || number > 7) {\n throw new RangeError(`${name} must be a LoaderPosition value`);\n }\n return number;\n}\n\nfunction requireLoaderPriority(value, name) {\n const number = LOADER_PRIORITY_VALUES.get(value);\n if (number == null || !Number.isInteger(number) || number < -1 || number > 1) {\n throw new RangeError(`${name} must be a LoaderPriority value`);\n }\n return number + 1;\n}\n\nfunction requireLoaderFilterMode(value, name) {\n const number = LOADER_FILTER_MODE_VALUES.get(value);\n if (number == null || !Number.isInteger(number) || number < 0 || number > 3) {\n throw new RangeError(`${name} must be a LoaderFilterMode value`);\n }\n return number;\n}\n\nconst CLIPBOARD_TARGET_VALUES = new Map([\n [\"loader\", 1],\n [\"loader-config\", 1],\n [\"loaderConfig\", 1],\n [\"hatch\", 0],\n [\"cargo-hatch\", 0],\n [\"cargoHatch\", 0],\n [\"ejector\", 7],\n [\"cargo-ejector\", 7],\n [\"cargoEjector\", 7],\n [\"expando\", 3],\n [\"expando-box\", 3],\n [\"expandoBox\", 3],\n [\"generator\", 4],\n [\"shield-generator\", 4],\n [\"shieldGenerator\", 4],\n [\"navigation\", 6],\n [\"navigation-unit\", 6],\n [\"navigationUnit\", 6],\n [\"nav\", 6],\n [\"nav-unit\", 6],\n [\"navUnit\", 6]\n]);\n\nconst FIXED_ANGLE_VALUES = new Map([\n [FixedAngleDirection.Right, 0],\n [FixedAngleDirection.Up, 1],\n [FixedAngleDirection.Left, 2],\n [FixedAngleDirection.Down, 3]\n]);\n\nfunction requireClipboardTarget(value, name = \"target\") {\n const number = typeof value === \"string\" ? CLIPBOARD_TARGET_VALUES.get(value) : Number(value);\n if (number == null || !Number.isInteger(number) || number < 0 || number > 255) {\n throw new RangeError(`${name} must be a clipboard target byte or known target name`);\n }\n return number;\n}\n\nfunction requireFixedAngle(value, name = \"direction\") {\n const number = FIXED_ANGLE_VALUES.get(value);\n if (number == null || !Number.isInteger(number) || number < 0 || number > 3) {\n throw new RangeError(`${name} must be a FixedAngleDirection value`);\n }\n return number;\n}\n\nfunction requireAngleDegrees(value, name = \"angle\") {\n const number = Number(value);\n if (!Number.isInteger(number) || number < 0 || number > 359) {\n throw new RangeError(`${name} must be an integer degree value between 0 and 359`);\n }\n return number;\n}\n\nfunction requireFiniteNumber(value, name) {\n const number = Number(value);\n if (!Number.isFinite(number)) throw new RangeError(`${name} must be a finite number`);\n return number;\n}\n\nfunction requireNonNegativeInteger(value, name) {\n const number = Number(value);\n if (!Number.isInteger(number) || number < 0) throw new RangeError(`${name} must be a non-negative integer`);\n return number;\n}\n\nfunction encodeCompactNumber(value, name) {\n const number = requireFiniteNumber(value, name);\n if (!Number.isInteger(number)) {\n const out = new Uint8Array(5);\n out[0] = 0x88;\n new DataView(out.buffer).setFloat32(1, number, true);\n return [...out];\n }\n if (number < 0) throw new RangeError(`${name} must be non-negative`);\n if (number <= 0x1f) return [number];\n if (number <= 0x7f) return [0x84, number];\n if (number <= 0xffff) return [0x85, number & 0xff, (number >> 8) & 0xff];\n throw new RangeError(`${name} must be 65535 or lower`);\n}\n\nfunction encodeCompactItemId(value, name) {\n const number = requireNonNegativeInteger(value, name);\n if (number === 0) return [0];\n return encodeCompactNumber(number, name);\n}\n\nfunction encodeLoaderCycle(cycle) {\n const seconds = requireFiniteNumber(cycle, \"cycle\");\n if (seconds < 1) throw new RangeError(`cycle must be at least 1 second`);\n const ticks = Math.round(seconds * 20);\n if (ticks <= 0x3f) return [ticks];\n if (ticks <= 0xff) return [0x80, ticks];\n if (ticks <= 0xffff) return [0x85, ticks & 0xff, (ticks >> 8) & 0xff];\n throw new RangeError(`cycle is too large`);\n}\n\nfunction encodeUiCommandTarget(entity, action = 0) {\n const entityId = requireUint16(entity, \"entity\");\n const actionId = requireByteInteger(action, \"action\");\n if (actionId && entityId > 0xff) {\n throw new RangeError(`copy/paste UI config currently requires an entity id below 256`);\n }\n return [\n NAV_UNIT_HEADER_TAG,\n actionId ? actionId : (entityId >> 8) & 0xff,\n entityId & 0xff\n ];\n}\n\nfunction encodeUiCommandSection(commandName) {\n const command = encoder.encode(commandName);\n if (command.byteLength > 255) throw new RangeError(`command name is too long`);\n return [\n NAV_UNIT_STRING_TAG,\n command.byteLength,\n ...command,\n 0x00\n ];\n}\n\nfunction encodeUiCommandHeader(entity, commandName) {\n return [\n ...encodeUiCommandTarget(entity),\n ...encodeUiCommandSection(commandName)\n ];\n}\n\nfunction encodeLoaderConfigPayload({\n pick = LoaderPosition.TopLeft,\n place = LoaderPosition.TopRight,\n priority = LoaderPriority.Normal,\n stack = 16,\n cycle = 1,\n requireOutput = false,\n waitForStack = false\n } = {}) {\n return [\n NAV_UNIT_HEADER_TAG,\n requireLoaderPosition(pick, \"pick\"),\n requireLoaderPosition(place, \"place\"),\n requireLoaderPriority(priority, \"priority\"),\n requireNonNegativeInteger(stack, \"stack\"),\n ...encodeLoaderCycle(cycle),\n requireOutput ? LOADER_TRUE : LOADER_FALSE,\n waitForStack ? LOADER_TRUE : LOADER_FALSE\n ];\n}\n\nfunction encodeLoaderFilterConfigPayload(filterMode = LoaderFilterMode.AllowAll) {\n return [\n NAV_UNIT_HEADER_TAG,\n requireLoaderFilterMode(filterMode, \"filterMode\")\n ];\n}\n\nfunction encodeLoaderFilterItemsPayload(filterSlots = []) {\n const slots = [0, 1, 2].map((index) => requireNonNegativeInteger(filterSlots[index] ?? 0, `filterSlots[${index}]`));\n return [\n NAV_UNIT_HEADER_TAG,\n ...slots.flatMap((slot, index) => encodeCompactItemId(slot, `filterSlots[${index}]`))\n ];\n}\n\nexport function buildNavigationUnitConfigData(entity, {\n destination,\n page = 0,\n warp = \"idle\",\n autoWarpOnShieldFailure = false,\n autoWarpOnNoCaptains = false\n} = {}) {\n return Uint8Array.from([\n ...encodeUiCommandHeader(entity, NAV_UNIT_COMMAND),\n ...encodeNavigationUnitConfigPayload({destination, page, warp, autoWarpOnShieldFailure, autoWarpOnNoCaptains}),\n ...NAV_UNIT_TRAILER\n ]);\n}\n\nfunction encodeNavigationUnitConfigPayload({\n destination,\n page = 0,\n warp = \"idle\",\n autoWarpOnShieldFailure = false,\n autoWarpOnNoCaptains = false\n } = {}) {\n return [\n NAV_UNIT_HEADER_TAG,\n requireByteInteger(destination, \"destination\"),\n requireByteInteger(page, \"page\"),\n navWarpByte(warp),\n navConfigBool(autoWarpOnShieldFailure),\n navConfigBool(autoWarpOnNoCaptains)\n ];\n}\n\nexport function buildGeneratorMazePuzzleData(entity, solution) {\n const value = String(solution);\n if (!/^\\d+$/.test(value)) throw new TypeError(`solution must contain only digits`);\n const encoded = encoder.encode(value);\n if (encoded.byteLength > 255) throw new RangeError(`solution is too long`);\n\n return Uint8Array.from([\n ...encodeUiCommandHeader(entity, GENERATOR_MAZE_PUZZLE_COMMAND),\n NAV_UNIT_HEADER_TAG,\n NAV_UNIT_STRING_TAG,\n encoded.byteLength,\n ...encoded,\n NAV_UNIT_FALSE,\n ...NAV_UNIT_TRAILER\n ]);\n}\n\nexport function buildPusherConfigData(entity, {\n mode = 2,\n filteredMode = 0,\n angle = 0,\n speed = 20,\n filterInventory = false,\n length = 1000\n} = {}) {\n return Uint8Array.from([\n ...encodeUiCommandHeader(entity, PUSHER_CONFIG_COMMAND),\n NAV_UNIT_HEADER_TAG,\n requirePusherMode(mode, \"mode\"),\n requirePusherMode(filteredMode, \"filteredMode\"),\n ...encodeCompactNumber(angle, \"angle\"),\n ...encodeCompactNumber(speed, \"speed\"),\n filterInventory ? PUSHER_FILTER_INVENTORY_ON : PUSHER_FILTER_INVENTORY_OFF,\n ...encodeCompactNumber(length, \"length\"),\n ...NAV_UNIT_TRAILER\n ]);\n}\n\nexport function buildPusherFilterItemsData(entity, filterSlots = []) {\n const slots = [0, 1, 2].map((index) => requireNonNegativeInteger(filterSlots[index] ?? 0, `filterSlots[${index}]`));\n return Uint8Array.from([\n ...encodeUiCommandHeader(entity, PUSHER_FILTER_ITEMS_COMMAND),\n NAV_UNIT_HEADER_TAG,\n ...slots.flatMap((slot, index) => encodeCompactItemId(slot, `filterSlots[${index}]`)),\n ...NAV_UNIT_TRAILER\n ]);\n}\n\nexport function buildLoaderConfigData(entity, {\n pick = LoaderPosition.TopLeft,\n place = LoaderPosition.TopRight,\n priority = LoaderPriority.Normal,\n stack = 16,\n cycle = 1,\n requireOutput = false,\n waitForStack = false\n} = {}) {\n return Uint8Array.from([\n ...encodeUiCommandHeader(entity, LOADER_CONFIG_COMMAND),\n ...encodeLoaderConfigPayload({pick, place, priority, stack, cycle, requireOutput, waitForStack}),\n ...NAV_UNIT_TRAILER\n ]);\n}\n\nexport function buildLoaderFilterConfigData(entity, filterMode = LoaderFilterMode.AllowAll) {\n return Uint8Array.from([\n ...encodeUiCommandHeader(entity, LOADER_FILTER_CONFIG_COMMAND),\n ...encodeLoaderFilterConfigPayload(filterMode),\n ...NAV_UNIT_TRAILER\n ]);\n}\n\nexport function buildLoaderFilterItemsData(entity, filterSlots = []) {\n return Uint8Array.from([\n ...encodeUiCommandHeader(entity, LOADER_FILTER_ITEMS_COMMAND),\n ...encodeLoaderFilterItemsPayload(filterSlots),\n ...NAV_UNIT_TRAILER\n ]);\n}\n\nexport function buildCargoHatchFilterConfigData(entity, filterMode = LoaderFilterMode.AllowAll) {\n return buildLoaderFilterConfigData(entity, filterMode);\n}\n\nexport function buildCargoHatchFilterItemsData(entity, filterSlots = []) {\n return buildLoaderFilterItemsData(entity, filterSlots);\n}\n\nfunction buildLoaderFullConfigPayload(entity, action, {\n filterMode = LoaderFilterMode.AllowAll,\n filterSlots = [],\n ...config\n} = {}) {\n return Uint8Array.from([\n ...encodeUiCommandTarget(entity, action),\n ...encodeUiCommandSection(LOADER_CONFIG_COMMAND),\n ...encodeLoaderConfigPayload(config),\n UI_COMMAND_END,\n ...encodeUiCommandSection(LOADER_FILTER_CONFIG_COMMAND),\n ...encodeLoaderFilterConfigPayload(filterMode),\n UI_COMMAND_END,\n ...encodeUiCommandSection(LOADER_FILTER_ITEMS_COMMAND),\n ...encodeLoaderFilterItemsPayload(filterSlots),\n UI_COMMAND_END,\n UI_COMMAND_END\n ]);\n}\n\nfunction buildFilterOnlyConfigPayload(entity, action, {\n filterMode = 0,\n filterSlots = []\n} = {}) {\n return Uint8Array.from([\n ...encodeUiCommandTarget(entity, action),\n ...encodeUiCommandSection(LOADER_FILTER_CONFIG_COMMAND),\n ...encodeLoaderFilterConfigPayload(filterMode),\n UI_COMMAND_END,\n ...encodeUiCommandSection(LOADER_FILTER_ITEMS_COMMAND),\n ...encodeLoaderFilterItemsPayload(filterSlots),\n UI_COMMAND_END,\n UI_COMMAND_END\n ]);\n}\n\nexport function buildLoaderFullConfigData(entity, config = {}) {\n return buildLoaderFullConfigPayload(entity, 2, config);\n}\n\nexport function buildLoaderCopyConfigData(config = {}) {\n return buildLoaderFullConfigPayload(1, 1, config);\n}\n\nexport function buildCargoHatchFullConfigData(entity, config = {}) {\n return buildFilterOnlyConfigPayload(entity, 2, config);\n}\n\nexport function buildCargoHatchCopyConfigData(config = {}) {\n return buildFilterOnlyConfigPayload(0, 1, config);\n}\n\nexport function buildLoaderClipboardConfigData(config = {}) {\n return Uint8Array.from([\n ...encodeUiCommandTarget(1, CLIPBOARD_ACTION),\n ...encodeUiCommandSection(LOADER_CONFIG_COMMAND),\n ...encodeLoaderConfigPayload(config),\n ...NAV_UNIT_TRAILER\n ]);\n}\n\nexport function buildNavigationUnitClipboardConfigData(config = {}) {\n return Uint8Array.from([\n ...encodeUiCommandTarget(6, CLIPBOARD_ACTION),\n ...encodeUiCommandSection(NAV_UNIT_COMMAND),\n ...encodeNavigationUnitConfigPayload(config),\n ...NAV_UNIT_TRAILER\n ]);\n}\n\nexport function buildNavigationUnitPasteConfigData(entity, config = {}) {\n return Uint8Array.from([\n ...encodeUiCommandTarget(entity, 2),\n ...encodeUiCommandSection(NAV_UNIT_COMMAND),\n ...encodeNavigationUnitConfigPayload(config),\n ...NAV_UNIT_TRAILER\n ]);\n}\n\nexport function buildClipboardConfigData(target, commandName, values = []) {\n if (typeof commandName !== \"string\" || !commandName) throw new TypeError(`commandName must be a non-empty string`);\n return Uint8Array.from([\n ...encodeUiCommandTarget(requireClipboardTarget(target), CLIPBOARD_ACTION),\n ...encodeUiCommandSection(commandName),\n NAV_UNIT_HEADER_TAG,\n ...values,\n ...NAV_UNIT_TRAILER\n ]);\n}\n\nexport function buildClipboardFixedAngleData(target, direction) {\n return buildClipboardConfigData(target, CLIPBOARD_FIXED_ANGLE_COMMAND, [requireFixedAngle(direction)]);\n}\n\nfunction buildFixedAngleConfigData(entity, action, direction) {\n return Uint8Array.from([\n ...encodeUiCommandTarget(entity, action),\n ...encodeUiCommandSection(CLIPBOARD_FIXED_ANGLE_COMMAND),\n NAV_UNIT_HEADER_TAG,\n requireFixedAngle(direction),\n ...NAV_UNIT_TRAILER\n ]);\n}\n\nexport function buildGeneratorClipboardDirectionData(direction) {\n return buildClipboardFixedAngleData(\"generator\", direction);\n}\n\nexport function buildCargoEjectorDirectionData(entity, direction) {\n return buildFixedAngleConfigData(entity, 0, direction);\n}\n\nexport function buildCargoEjectorPasteConfigData(entity, direction) {\n return buildFixedAngleConfigData(entity, 2, direction);\n}\n\nexport function buildCargoEjectorCopyConfigData(direction) {\n return buildFixedAngleConfigData(7, CLIPBOARD_ACTION, direction);\n}\n\nexport function buildCargoEjectorClipboardDirectionData(direction) {\n return buildClipboardFixedAngleData(\"ejector\", direction);\n}\n\nexport function buildExpandoClipboardAngleData(angle) {\n return buildClipboardConfigData(\"expando\", CLIPBOARD_ANGLE_COMMAND, encodeCompactNumber(requireAngleDegrees(angle), \"angle\"));\n}\n\nexport {\n CLIPBOARD_ACTION,\n CLIPBOARD_ANGLE_COMMAND,\n CLIPBOARD_FIXED_ANGLE_COMMAND,\n CLIPBOARD_TARGET_VALUES,\n FIXED_ANGLE_VALUES,\n GENERATOR_MAZE_PUZZLE_COMMAND,\n LOADER_CONFIG_COMMAND,\n LOADER_FALSE,\n LOADER_FILTER_CONFIG_COMMAND,\n LOADER_FILTER_ITEMS_COMMAND,\n LOADER_TRUE,\n NAV_UNIT_COMMAND,\n NAV_UNIT_FALSE,\n NAV_UNIT_TRUE,\n PUSHER_CONFIG_COMMAND,\n PUSHER_FILTER_ITEMS_COMMAND\n};\n\nconst PUSHER_MODE_VALUES = new Map([\n [PusherMode.Push, 0],\n [PusherMode.Pull, 1],\n [PusherMode.DoNothing, 2]\n]);\n\nconst LOADER_POSITION_VALUES = new Map([\n [LoaderPosition.TopLeft, 0],\n [LoaderPosition.TopMiddle, 1],\n [LoaderPosition.TopRight, 2],\n [LoaderPosition.MiddleLeft, 3],\n [LoaderPosition.MiddleRight, 4],\n [LoaderPosition.BottomLeft, 5],\n [LoaderPosition.BottomMiddle, 6],\n [LoaderPosition.BottomRight, 7]\n]);\n\nconst LOADER_PRIORITY_VALUES = new Map([\n [LoaderPriority.Low, -1],\n [LoaderPriority.Normal, 0],\n [LoaderPriority.High, 1]\n]);\n\nconst LOADER_FILTER_MODE_VALUES = new Map([\n [LoaderFilterMode.AllowAll, 0],\n [LoaderFilterMode.BlockFilter, 1],\n [LoaderFilterMode.AllowFilter, 2],\n [LoaderFilterMode.BlockAll, 3]\n]);\n", "import {decodeMsgpack} from \"../codec/msgpack.js\";\nimport {toUint8Array} from \"../codec/binary.js\";\n\n// Convert a websocket payload into the transport-independent packet object\n// consumed by the client and state reducers.\nexport function decodeIncomingFrame(data) {\n return typeof data === \"string\" ? JSON.parse(data) : decodeMsgpack(toUint8Array(data));\n}\n", "import {itemEquipmentSlotFromId} from \"../../state/items.js\";\nimport {buildInventoryDragCommand, normalizeEquipmentSlot, normalizeInventoryEvent} from \"../../protocol/outbound/inventory.js\";\n\nexport function normalizeAttachMode(mode = \"observe\") {\n const value = String(mode || \"observe\").toLowerCase();\n if (value === \"observe\" || value === \"bootstrap\" || value === \"readonly\") return value;\n throw new Error(`Unsupported websocket attach mode: ${mode}`);\n}\n\nexport class ClientNetDomain {\n constructor(client) {\n this.client = client;\n }\n\n get connected() {\n return this.client.connected;\n }\n\n get ready() {\n return this.client.ready;\n }\n\n get sid() {\n return this.client.sid;\n }\n\n get packetCount() {\n return this.client.packetCount;\n }\n\n get lastPacket() {\n return this.client.lastPacket;\n }\n\n send(command = {}) {\n return this.client.send(command);\n }\n\n sendMessage(message, options = {}) {\n return this.client.sendMessage(message, options);\n }\n\n sendRaw(message, options = {}) {\n return this.client.sendRaw(message, options);\n }\n\n sendEntityCommand(cmd, args = [-1, -1, -1]) {\n return this.client.sendEntityCommand(cmd, args);\n }\n\n sendUiConfig(data) {\n return this.client.sendUiConfig(data);\n }\n\n sendBlueprintPlacement(placement) {\n return this.client.sendBlueprintPlacement(placement);\n }\n\n setOutfit(outfit) {\n return this.client.setOutfit(outfit);\n }\n}\n\nexport class ClientDebugDomain {\n constructor(client) {\n this.client = client;\n }\n\n packets() {\n return this.client.packets.slice();\n }\n\n decodeErrors() {\n return this.client.decodeErrors.slice();\n }\n\n worldStore() {\n return this.client.worlds;\n }\n\n modelTable(worldId, tableId) {\n return this.client.worlds.worlds.get(Number(worldId))?.model.table(tableId) || new Map();\n }\n\n modelRecord(worldId, tableId, entityId) {\n return this.client.worlds.worlds.get(Number(worldId))?.model.record(tableId, entityId) || null;\n }\n\n entities(scope = \"ship\") {\n return summariesFor(this.client, scope);\n }\n\n entity(scope = \"ship\", entity = null) {\n if (entity == null) return null;\n return summaryForEntity(this.client, scope, entityIdOf(entity));\n }\n\n puiPanels() {\n return [...this.client.puiPanels.values()];\n }\n\n commsPanels() {\n return [...this.client.commsPanels.values()];\n }\n}\n\nexport class PlayerDomain {\n constructor(client) {\n this.client = client;\n }\n\n current() {\n return currentPlayerSummary(this.client);\n }\n\n entity() {\n return this.client.currentPlayerEntity();\n }\n\n name() {\n return this.current()?.name ?? null;\n }\n\n rank() {\n return currentPlayerRank(this.client);\n }\n\n move({x = 0, y = 0} = {}, command = {}) {\n return this.client.move(x, y, command);\n }\n\n aim({x = 0, y = 0, mx = x, my = y} = {}, command = {}) {\n return this.client.aim(mx, my, command);\n }\n\n action(flags = {}, command = {}) {\n return this.client.action(flags, command);\n }\n\n useEntity(entity, options = {}, command = {}) {\n return this.client.useEntity(entityIdOf(entity), options, command);\n }\n\n useHeldItem(options = {}, command = {}) {\n return this.client.useHeldItem(options, command);\n }\n\n placeHeldItem(options = {}, command = {}) {\n return this.client.placeHeldItem(options, command);\n }\n\n placeBlueprint(placement, options = {}, command = {}) {\n return this.client.placeBlueprint(placement, options, command);\n }\n\n rotateHeldItem(options = {}, command = {}) {\n return this.client.rotateHeldItem(options, command);\n }\n\n selectSlot(invSlot = 0, command = {}) {\n return this.client.send({...command, inv_slot: inventorySlotIndexOf(invSlot)});\n }\n\n inputSettings() {\n return this.client.inputSettings();\n }\n\n setInputSettings(settings = {}, options = {}) {\n return this.client.setInputSettings(settings, options);\n }\n\n setView(width, height, options = {}) {\n return this.client.setView(width, height, options);\n }\n\n setScreenSize(width, height, options = {}) {\n return this.client.setScreenSize(width, height, options);\n }\n\n setWrenchMode(mode, options = {}) {\n return this.client.setWrenchMode(mode, options);\n }\n\n setTurretMode(mode, options = {}) {\n return this.client.setTurretMode(mode, options);\n }\n}\n\nexport class ShipManagementDomain {\n constructor(client) {\n this.client = client;\n }\n\n requestPlayerList() {\n return this.client.requestPlayerList();\n }\n\n resetInvite() {\n return this.client.resetInvite();\n }\n\n setPrivacy(privacy) {\n return this.client.setShipPrivacy(privacy);\n }\n\n recoverStarterItem(itemId) {\n return this.client.recoverStarterItem(itemId);\n }\n\n setPlayerRank(refId, rank) {\n return this.client.setPlayerRank(refId, rank);\n }\n\n kickPlayer(refId) {\n return this.client.kickPlayer(refId);\n }\n\n banPlayer(refId) {\n return this.client.banPlayer(refId);\n }\n\n demoteSelf() {\n return this.client.demoteSelf();\n }\n\n config() {\n return this.client.shipConfig;\n }\n\n hasCheats() {\n return Boolean(this.client.captainSubrank?.enableCheats);\n }\n\n playerList() {\n return this.client.playerList;\n }\n}\n\nexport class InventoryDomain {\n constructor(client) {\n this.client = client;\n }\n\n state() {\n return this.client.inventoryState;\n }\n\n hotbarSize() {\n return this.state()?.hotbarSize ?? 0;\n }\n\n allSlots() {\n return (this.state()?.slots || []).map((slot) => this.slot(slot.index));\n }\n\n slot(ref) {\n return new InventorySlotHandle(this, inventorySlotIndexOf(ref));\n }\n\n hotbarSlots() {\n return (this.state()?.hotbar || []).map((slot) => this.slot(slot.index));\n }\n\n equipmentSlots() {\n return {\n head: this.slot(\"head\"),\n face: this.slot(\"face\"),\n body: this.slot(\"body\"),\n back: this.slot(\"back\"),\n hands: this.slot(\"hands\"),\n feet: this.slot(\"feet\")\n };\n }\n\n findItem(itemId, {area = \"all\"} = {}) {\n return this.findItems(itemId, {area})[0] || null;\n }\n\n findItems(itemId, {area = \"all\"} = {}) {\n const normalized = Number(itemId);\n if (!Number.isFinite(normalized)) return [];\n return inventoryHandlesForArea(this, area).filter((slot) => slot.itemId === normalized);\n }\n\n firstEmpty({area = \"all\"} = {}) {\n return inventoryHandlesForArea(this, area).find((slot) => slot.empty) || null;\n }\n\n move(source, target, {split = false} = {}, command = {}) {\n return this.client.send({\n ...command,\n ...buildInventoryDragCommand(inventorySlotIndexOf(source, \"source\"), inventorySlotIndexOf(target, \"target\"), split)\n });\n }\n\n equip(source, equipmentSlot = null, options = {}, command = {}) {\n const args = normalizeEquipArguments(equipmentSlot, options, command);\n const target = args.equipmentSlot == null ? inferEquipmentSlotForInventorySource(this, source) : args.equipmentSlot;\n return this.move(source, normalizeEquipmentSlot(target), {split: args.split}, args.command);\n }\n\n unequip(equipmentSlot, target = 0, {split = false} = {}, command = {}) {\n return this.move(normalizeEquipmentSlot(equipmentSlot), target, {split}, command);\n }\n\n select(slot, command = {}) {\n return this.client.send({...command, inv_slot: inventorySlotIndexOf(slot)});\n }\n}\n\nexport class InventorySlotHandle {\n constructor(domain, index) {\n this.domain = domain;\n this.client = domain.client;\n this.index = index;\n }\n\n get state() {\n return this.domain.state()?.slots?.find((slot) => slot.index === this.index) || null;\n }\n\n get kind() {\n return this.state?.kind ?? null;\n }\n\n get equipmentSlot() {\n return this.state?.equipmentSlot ?? null;\n }\n\n get itemId() {\n return this.state?.itemId ?? null;\n }\n\n get itemName() {\n return this.state?.itemName ?? null;\n }\n\n get count() {\n return this.state?.count ?? 0;\n }\n\n get empty() {\n return this.state?.empty ?? true;\n }\n\n exists() {\n return Boolean(this.state);\n }\n\n snapshot() {\n return this.state ? Object.freeze({...this.state}) : null;\n }\n\n moveTo(target, options = {}, command = {}) {\n return this.domain.move(this, target, options, command);\n }\n\n equip(equipmentSlot = null, options = {}, command = {}) {\n if (equipmentSlot && typeof equipmentSlot === \"object\") return this.domain.equip(this, null, equipmentSlot, options);\n return this.domain.equip(this, equipmentSlot, options, command);\n }\n\n unequip(target = 0, options = {}, command = {}) {\n if (!this.equipmentSlot) throw new RangeError(`inventory slot ${this.index} is not an equipment slot`);\n return this.domain.unequip(this.equipmentSlot, target, options, command);\n }\n\n select(command = {}) {\n return this.domain.select(this, command);\n }\n}\n\nexport class WorldDomain {\n constructor(client, scope) {\n this.client = client;\n this.scope = scope;\n this.entities = new EntityCollection(client, scope);\n this.machines = new MachineCollection(client, scope);\n this.players = new PlayerCollection(client, scope);\n this.blocks = new BlockCollection(client, scope);\n this.materials = new MaterialCollection(client, scope);\n }\n\n get id() {\n return worldStateFor(this.client, this.scope)?.id ?? null;\n }\n\n exists() {\n return Boolean(worldStateFor(this.client, this.scope));\n }\n\n snapshot(options = {}) {\n return worldStateFor(this.client, this.scope)?.snapshot(options) || null;\n }\n}\n\nexport class ShipDomain extends WorldDomain {\n entity() {\n const summary = this.client.worlds.currentShipEntity();\n return summary ? new EntityHandle(this.client, summary.entity, \"overworld\") : null;\n }\n\n get overworldEntity() {\n return this.entity();\n }\n\n get metadata() {\n return worldStateFor(this.client, this.scope)?.model.shipMetadata() || null;\n }\n}\n\nexport class OverworldDomain extends WorldDomain {\n ships(options = {}) {\n return this.client.ships(options).map((summary) => new ShipHandle(this.client, summary));\n }\n\n shipByHex(hexCode, options = {}) {\n const summary = this.client.shipByHex(hexCode, options);\n return summary ? new ShipHandle(this.client, summary) : null;\n }\n\n shipByEntity(entity, options = {}) {\n const summary = this.client.shipByEntity(entityIdOf(entity), options);\n return summary ? new ShipHandle(this.client, summary) : null;\n }\n}\n\nconst ENTITY_SNAPSHOT_CACHE = new WeakMap();\n\nfunction entitySnapshotFor(summary) {\n if (!summary || typeof summary !== \"object\") return null;\n let snapshot = ENTITY_SNAPSHOT_CACHE.get(summary);\n if (!snapshot) {\n snapshot = new EntitySnapshot(summary);\n ENTITY_SNAPSHOT_CACHE.set(summary, snapshot);\n }\n return snapshot;\n}\n\nexport class EntitySnapshot {\n #contents;\n\n constructor(summary) {\n const data = clonePlain(summary || {});\n this.#contents = data.contents || null;\n delete data.contents;\n Object.assign(this, data);\n this.id = Number(data.entity ?? data.id);\n this.entity = this.id;\n this.position = data.transform || null;\n this.rotation = data.transform?.rotation ?? null;\n this.type = entityPublicType(data, this.#contents);\n this.features = Object.freeze(entityFeatures(data, this.#contents));\n deepFreeze(this.#contents);\n deepFreeze(this);\n }\n\n is(type) {\n const key = normalizeEntityKey(type);\n if (!key) return false;\n const publicType = normalizeEntityKey(this.type);\n if (key === publicType) return true;\n if (key === normalizeEntityKey(this.category)) return true;\n if (key === \"placedentity\" && this.category === \"placed_entity\") return true;\n if (key === \"looseitem\" && this.category === \"loose_item\") return true;\n if (key === \"ship\" && (this.category === \"ship_control\" || this.#contents?.shipControl)) return true;\n if (key === \"machine\") return Boolean(entityMachineType(this.#contents));\n if (key === \"item\") return Boolean(this.#contents?.itemHolder || this.#contents?.itemCrate || this.#contents?.expandoBox);\n if (key === \"bot\") return Boolean(this.#contents?.bot);\n if (key === \"player\") return Boolean(this.#contents?.player || this.category === \"player\");\n if (this.kind?.some((kind) => normalizeEntityKey(kind) === key)) return true;\n return Boolean(componentFor(this.#contents, key));\n }\n\n has(feature) {\n return this.feature(feature) != null;\n }\n\n feature(feature) {\n return entityFeature(this, this.#contents, feature);\n }\n}\n\nexport class EntityCollection {\n constructor(client, scope) {\n this.client = client;\n this.scope = scope;\n }\n\n all() {\n return summariesFor(this.client, this.scope).map((summary) => new EntityHandle(this.client, summary.entity, this.scope));\n }\n\n snapshots() {\n return summariesFor(this.client, this.scope).map(entitySnapshotFor);\n }\n\n states() {\n return this.snapshots();\n }\n\n get(entity) {\n return new EntityHandle(this.client, entityIdOf(entity), this.scope);\n }\n}\n\nexport class PlayerCollection {\n constructor(client, scope) {\n this.client = client;\n this.scope = scope;\n }\n\n all() {\n return worldStateFor(this.client, this.scope)?.model.players() || [];\n }\n\n current() {\n return currentPlayerSummary(this.client, this.scope);\n }\n}\n\nexport class BlockCollection {\n constructor(client, scope) {\n this.client = client;\n this.scope = scope;\n }\n\n all() {\n return worldStateFor(this.client, this.scope)?.blocks() || [];\n }\n\n at(x, y) {\n return worldStateFor(this.client, this.scope)?.blockAt(x, y) || null;\n }\n}\n\nexport class MaterialCollection {\n constructor(client, scope) {\n this.client = client;\n this.scope = scope;\n }\n\n all() {\n return worldStateFor(this.client, this.scope)?.materials() || [];\n }\n}\n\nexport class MachineCollection {\n constructor(client, scope) {\n this.client = client;\n this.scope = scope;\n }\n\n state() {\n return worldStateFor(this.client, this.scope)?.model.machines() || emptyMachineSummary();\n }\n\n raw() {\n return this.state();\n }\n\n loaders() {\n return this.state().loaders.map((item) => new LoaderHandle(this.client, item.entity, this.scope));\n }\n\n loader(entity) {\n return new LoaderHandle(this.client, entityIdOf(entity), this.scope);\n }\n\n pushers() {\n return this.state().pushers.map((item) => new PusherHandle(this.client, item.entity, this.scope));\n }\n\n pusher(entity) {\n return new PusherHandle(this.client, entityIdOf(entity), this.scope);\n }\n\n launchers() {\n return this.state().launchers.map((item) => new LauncherHandle(this.client, item.entity, this.scope));\n }\n\n launcher(entity) {\n return new LauncherHandle(this.client, entityIdOf(entity), this.scope);\n }\n\n navigationUnits() {\n return this.state().navigationUnits.map((item) => new NavigationUnitHandle(this.client, item.entity, this.scope));\n }\n\n navigationUnit(entity = null) {\n const id = entity == null ? this.state().navigationUnits[0]?.entity : entityIdOf(entity);\n return id == null ? null : new NavigationUnitHandle(this.client, id, this.scope);\n }\n\n fabricators() {\n return this.state().fabricators.map((item) => new FabricatorHandle(this.client, item.entity, this.scope));\n }\n\n fabricator(entity) {\n return new FabricatorHandle(this.client, entityIdOf(entity), this.scope);\n }\n\n commsStations() {\n return this.state().commsStations.map((item) => new CommsStationHandle(this.client, item.entity, this.scope));\n }\n\n commsStation(entity = null) {\n const id = entity == null ? this.state().commsStations[0]?.entity : entityIdOf(entity);\n return id == null ? null : new CommsStationHandle(this.client, id, this.scope);\n }\n\n signs() {\n return summariesFor(this.client, this.scope).filter((item) => item.contents?.sign).map((item) => new SignHandle(this.client, item.entity, this.scope));\n }\n\n sign(entity) {\n return new SignHandle(this.client, entityIdOf(entity), this.scope);\n }\n\n generators() {\n return this.state().shieldGenerators.map((item) => new GeneratorHandle(this.client, item.entity, this.scope));\n }\n\n generator(entity) {\n return new GeneratorHandle(this.client, entityIdOf(entity), this.scope);\n }\n\n cargoHatches() {\n return this.state().cargoHatches.map((item) => new CargoHatchHandle(this.client, item.entity, this.scope));\n }\n\n cargoHatch(entity) {\n return new CargoHatchHandle(this.client, entityIdOf(entity), this.scope);\n }\n\n cargoEjectors() {\n return this.state().cargoEjectors.map((item) => new CargoEjectorHandle(this.client, item.entity, this.scope));\n }\n\n cargoEjector(entity) {\n return new CargoEjectorHandle(this.client, entityIdOf(entity), this.scope);\n }\n\n cannons() {\n return this.state().cannons.map((item) => new CannonHandle(this.client, item.entity, this.scope));\n }\n\n cannon(entity) {\n return new CannonHandle(this.client, entityIdOf(entity), this.scope);\n }\n\n thrusters() {\n return this.state().thrusters.map((item) => new ThrusterHandle(this.client, item.entity, this.scope));\n }\n\n thruster(entity) {\n return new ThrusterHandle(this.client, entityIdOf(entity), this.scope);\n }\n\n helms() {\n return this.state().helms.map((item) => new HelmHandle(this.client, item.entity, this.scope));\n }\n\n helm(entity) {\n return new HelmHandle(this.client, entityIdOf(entity), this.scope);\n }\n\n doors() {\n return this.state().doors.map((item) => new DoorHandle(this.client, item.entity, this.scope));\n }\n\n door(entity) {\n return new DoorHandle(this.client, entityIdOf(entity), this.scope);\n }\n\n spawnPoints() {\n return this.state().spawnPoints.map((item) => new SpawnPointHandle(this.client, item.entity, this.scope));\n }\n\n spawnPoint(entity) {\n return new SpawnPointHandle(this.client, entityIdOf(entity), this.scope);\n }\n\n shieldProjectors() {\n return this.state().shieldProjectors.map((item) => new ShieldProjectorHandle(this.client, item.entity, this.scope));\n }\n\n shieldProjector(entity) {\n return new ShieldProjectorHandle(this.client, entityIdOf(entity), this.scope);\n }\n\n fluidTanks() {\n return this.state().fluidTanks.map((item) => new FluidTankHandle(this.client, item.entity, this.scope));\n }\n\n fluidTank(entity) {\n return new FluidTankHandle(this.client, entityIdOf(entity), this.scope);\n }\n\n expandoBoxes() {\n return this.state().expandoBoxes.map((item) => new ExpandoBoxHandle(this.client, item.entity, this.scope));\n }\n\n expandoBox(entity) {\n return new ExpandoBoxHandle(this.client, entityIdOf(entity), this.scope);\n }\n}\n\nexport class EntityHandle {\n constructor(client, entity, scope = \"ship\") {\n this.client = client;\n this.id = Number(entity);\n this.entity = this.id;\n this.scope = scope;\n this._cachedSummary = undefined;\n this._cachedSnapshot = null;\n }\n\n exists() {\n return Boolean(this.snapshot());\n }\n\n // Reading five properties off a handle used to walk the world/derived-state\n // resolution chain five times. The summary object identity changes whenever\n // the entity is refreshed, so it doubles as the cache key.\n snapshot() {\n const summary = worldStateFor(this.client, this.scope)?.entity(this.id) || null;\n if (summary !== this._cachedSummary) {\n this._cachedSummary = summary;\n this._cachedSnapshot = entitySnapshotFor(summary);\n }\n return this._cachedSnapshot;\n }\n\n get position() {\n return summaryForEntity(this.client, this.scope, this.id)?.transform || null;\n }\n\n get health() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.health || null;\n }\n\n get type() {\n return this.snapshot()?.type ?? \"unknown\";\n }\n\n get features() {\n return this.snapshot()?.features ?? [];\n }\n\n is(type) {\n return this.snapshot()?.is(type) ?? false;\n }\n\n has(feature) {\n return this.snapshot()?.has(feature) ?? false;\n }\n\n feature(feature) {\n return this.snapshot()?.feature(feature) ?? null;\n }\n\n as(type) {\n return entityDomainHandle(this.client, this.id, this.scope, type, this.snapshot());\n }\n\n asLoader() {\n return this.as(\"loader\");\n }\n\n asPusher() {\n return this.as(\"pusher\");\n }\n\n asLauncher() {\n return this.as(\"launcher\");\n }\n\n asNavigationUnit() {\n return this.as(\"navigationUnit\");\n }\n\n asCommsStation() {\n return this.as(\"commsStation\");\n }\n\n asSign() {\n return this.as(\"sign\");\n }\n\n asGenerator() {\n return this.as(\"shieldGenerator\");\n }\n\n asCargoHatch() {\n return this.as(\"cargoHatch\");\n }\n\n asCannon() {\n return this.as(\"cannon\");\n }\n\n asThruster() {\n return this.as(\"thruster\");\n }\n\n asHelm() {\n return this.as(\"helm\");\n }\n\n asDoor() {\n return this.as(\"door\");\n }\n\n asSpawnPoint() {\n return this.as(\"spawnPoint\");\n }\n\n asShieldProjector() {\n return this.as(\"shieldProjector\");\n }\n\n asFluidTank() {\n return this.as(\"fluidTank\");\n }\n\n asCargoEjector() {\n return this.as(\"cargoEjector\");\n }\n\n asExpandoBox() {\n return this.as(\"expandoBox\");\n }\n\n use(options = {}, command = {}) {\n return this.client.player.useEntity(this.id, options, command);\n }\n}\n\nexport class MachineHandle extends EntityHandle {\n open(options = {}, command = {}) {\n return this.use(options, command);\n }\n}\n\nexport class LoaderHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.loader || null;\n }\n\n configure(config = {}) {\n return this.client.sendLoaderConfig(this.id, config);\n }\n\n configureFull(config = {}) {\n return this.client.sendLoaderFullConfig(this.id, config);\n }\n\n copy(config = {}) {\n return this.client.copyLoaderConfig(this.id, config);\n }\n\n setPickPlace(pick, place, config = {}) {\n return this.client.setLoaderPickPlace(this.id, pick, place, config);\n }\n\n setPriority(priority, config = {}) {\n return this.client.setLoaderPriority(this.id, priority, config);\n }\n\n setStack(stack, config = {}) {\n return this.client.setLoaderStack(this.id, stack, config);\n }\n\n setCycle(cycle, config = {}) {\n return this.client.setLoaderCycle(this.id, cycle, config);\n }\n\n setRequireOutput(requireOutput, config = {}) {\n return this.client.setLoaderRequireOutput(this.id, requireOutput, config);\n }\n\n setWaitForStack(waitForStack, config = {}) {\n return this.client.setLoaderWaitForStack(this.id, waitForStack, config);\n }\n\n setFilterMode(filterMode) {\n return this.client.setLoaderFilterMode(this.id, filterMode);\n }\n\n setFilterItems(filterSlots = []) {\n return this.client.setLoaderFilterItems(this.id, filterSlots);\n }\n\n get pick() {\n return this.state?.pick;\n }\n\n get place() {\n return this.state?.place;\n }\n\n get priority() {\n return this.state?.priority;\n }\n\n get stack() {\n return this.state?.stack;\n }\n\n get cycle() {\n return this.state?.cycle;\n }\n\n get requireOutput() {\n return this.state?.requireOutput;\n }\n\n get waitForStack() {\n return this.state?.waitForStack;\n }\n\n get filterMode() {\n return this.state?.filterMode;\n }\n\n get filterSlots() {\n return this.state?.filterSlots || [];\n }\n\n get active() {\n return this.state?.active;\n }\n\n get heldItem() {\n const state = this.state;\n if (!state || state.heldItemId == null) return null;\n return {itemId: state.heldItemId, itemName: state.heldItemName, count: state.heldCount};\n }\n\n get progress() {\n return this.state?.progress;\n }\n}\n\nexport class PusherHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.pusher || null;\n }\n\n get beam() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.pusherBeam || null;\n }\n\n configure(config = {}) {\n return this.client.sendPusherConfig(this.id, config);\n }\n\n setAngle(angle, config = {}) {\n return this.client.setPusherAngle(this.id, angle, config);\n }\n\n setSpeed(speed, config = {}) {\n return this.client.setPusherSpeed(this.id, speed, config);\n }\n\n setLength(length, config = {}) {\n return this.client.setPusherLength(this.id, length, config);\n }\n\n setMode(mode, config = {}) {\n return this.client.setPusherMode(this.id, mode, config);\n }\n\n setFilteredMode(mode, config = {}) {\n return this.client.setPusherFilteredMode(this.id, mode, config);\n }\n\n setFilterInventory(filterInventory, config = {}) {\n return this.client.setPusherFilterInventory(this.id, filterInventory, config);\n }\n\n setFilterItems(filterSlots = []) {\n return this.client.setPusherFilterItems(this.id, filterSlots);\n }\n\n get angle() {\n return this.state?.angle;\n }\n\n get speed() {\n return this.state?.speed;\n }\n\n get length() {\n return this.state?.length;\n }\n\n get mode() {\n return this.state?.mode;\n }\n\n get filteredMode() {\n return this.state?.filteredMode;\n }\n}\n\nexport class LauncherHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.launcher || null;\n }\n\n setAngle(angle) {\n return this.client.setLauncherAngle(angle);\n }\n\n setPower(power) {\n return this.client.setLauncherPower(power);\n }\n\n get angleDegrees() {\n return this.state?.angleDegrees;\n }\n\n get angleRadians() {\n return this.state?.angleRadians;\n }\n\n get angleRaw() {\n return this.state?.angleRaw;\n }\n}\n\nexport class NavigationUnitHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.navigationUnit || null;\n }\n\n configure(config = {}) {\n return this.client.sendNavigationUnitConfig(this.id, config);\n }\n\n copy(config = {}) {\n return this.client.copyNavigationUnitConfig(this.id, config);\n }\n\n paste(config = {}) {\n return this.client.pasteNavigationUnitConfig(this.id, config);\n }\n\n setDestination(destination, config = {}) {\n return this.client.setNavigationDestination(this.id, destination, config);\n }\n\n setAutoWarp(config = {}) {\n return this.client.setNavigationAutoWarp(this.id, config);\n }\n\n startWarp(config = {}) {\n return this.client.startWarp(this.id, config);\n }\n\n cancelWarp(config = {}) {\n return this.client.cancelWarp(this.id, config);\n }\n\n get destination() {\n return this.state?.destination;\n }\n\n get autoWarpOnShieldFailure() {\n return this.state?.autoWarpOnShieldFailure;\n }\n\n get autoWarpOnNoCaptains() {\n return this.state?.autoWarpOnNoCaptains;\n }\n\n get warp() {\n return this.state?.warp;\n }\n}\n\nexport class FabricatorHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.fabricator || null;\n }\n\n get progress() {\n return this.state?.progress;\n }\n\n get active() {\n return this.state?.active;\n }\n\n get craftingItem() {\n const state = this.state;\n if (!state || state.craftingItemId == null) return null;\n return {itemId: state.craftingItemId, itemName: state.craftingItemName, count: state.craftingCount};\n }\n\n panel() {\n return this.client.puiPanels.get(this.id) || null;\n }\n\n add(itemId, count = 1, index = -1) {\n return this.client.craftAdd(itemId, count, index);\n }\n\n sub(itemId, count = 1, index = 0) {\n return this.client.craftSub(itemId, count, index);\n }\n\n clearQueue() {\n return this.client.craftClearQueue();\n }\n\n toggleRepeat() {\n return this.client.craftToggleRepeat();\n }\n\n lockResource(row) {\n return this.client.fabricatorLockResource(row);\n }\n\n unlockResource(row) {\n return this.client.fabricatorUnlockResource(row);\n }\n\n eject(row) {\n return this.client.fabricatorEject(row);\n }\n}\n\nexport class CommsStationHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.commsStation || null;\n }\n\n panel() {\n return this.client.commsPanels.get(this.id) || null;\n }\n\n sendMessage(message = \"\") {\n return this.client.sendCommsMessage(message);\n }\n}\n\nexport class SignHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.sign || null;\n }\n\n setText(text = \"\", mode = 0) {\n return this.client.setSignText(text, mode);\n }\n\n get text() {\n return this.state?.text;\n }\n\n get mode() {\n return this.state?.mode;\n }\n}\n\nexport class GeneratorHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.shieldGenerator || null;\n }\n\n solvePuzzle(solution) {\n return this.client.solveGeneratorPuzzle(this.id, solution);\n }\n}\n\nexport class CargoHatchHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.cargoHatch || null;\n }\n\n get openFraction() {\n return this.state?.openFraction;\n }\n\n configure(config = {}) {\n return this.client.sendCargoHatchFullConfig(this.id, config);\n }\n\n copy(config = {}) {\n return this.client.copyCargoHatchConfig(this.id, config);\n }\n\n paste(config = {}) {\n return this.client.pasteCargoHatchConfig(this.id, config);\n }\n\n setFilterMode(filterMode) {\n return this.client.setCargoHatchFilterMode(this.id, filterMode);\n }\n\n setFilterItems(filterSlots = []) {\n return this.client.setCargoHatchFilterItems(this.id, filterSlots);\n }\n}\n\nexport class CannonHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.cannon || null;\n }\n}\n\nexport class ThrusterHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.thruster || null;\n }\n}\n\nexport class HelmHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.helm || null;\n }\n\n get occupied() {\n return this.state?.occupied;\n }\n}\n\nexport class DoorHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.door || null;\n }\n\n get rank() {\n return this.state?.rank;\n }\n\n get open() {\n return this.state?.open;\n }\n}\n\nexport class SpawnPointHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.spawnPoint || null;\n }\n\n get rank() {\n return this.state?.rank;\n }\n}\n\nexport class ShieldProjectorHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.shieldProjector || null;\n }\n\n get active() {\n return this.state?.active;\n }\n}\n\nexport class FluidTankHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.fluidTank || null;\n }\n\n get amount() {\n return this.state?.amount;\n }\n}\n\nexport class ExpandoBoxHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.expandoBox || null;\n }\n\n get item() {\n return this.state?.itemId;\n }\n\n get count() {\n return this.state?.count;\n }\n}\n\nexport class CargoEjectorHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.cargoEjector || null;\n }\n\n get progress() {\n return this.state?.progress;\n }\n\n get active() {\n return this.state?.active;\n }\n\n setDirection(direction) {\n return this.client.setCargoEjectorDirection(this.id, direction);\n }\n\n copy(direction = \"right\") {\n return this.client.copyCargoEjectorConfig(this.id, direction);\n }\n\n paste(direction = \"right\") {\n return this.client.pasteCargoEjectorConfig(this.id, direction);\n }\n}\n\nexport class ShipHandle {\n constructor(client, summary) {\n this.client = client;\n this.summary = summary;\n }\n\n get entity() {\n return this.summary.entity;\n }\n\n get name() {\n return this.summary.name;\n }\n\n get hexCode() {\n return this.summary.hexCode;\n }\n\n get distance() {\n return this.summary.distance;\n }\n\n get worldId() {\n return this.summary.worldId;\n }\n\n get hasWorldData() {\n return this.summary.hasWorldData;\n }\n\n world() {\n return this.worldId == null ? null : this.client.world(this.worldId);\n }\n\n snapshot() {\n return this.summary;\n }\n}\n\nconst ENTITY_COMPONENT_ALIASES = new Map([\n [\"hoveroutline\", \"hoverOutline\"],\n [\"outline\", \"hoverOutline\"],\n [\"itemholder\", \"itemHolder\"],\n [\"itemcrate\", \"itemCrate\"],\n [\"expandobox\", \"expandoBox\"],\n [\"expando\", \"expandoBox\"],\n [\"blueprintpreview\", \"blueprintPreview\"],\n [\"blueprint\", \"blueprintPreview\"],\n [\"pusherbeam\", \"pusherBeam\"],\n [\"beam\", \"pusherBeam\"],\n [\"cargohatch\", \"cargoHatch\"],\n [\"cargoejector\", \"cargoEjector\"],\n [\"ejector\", \"cargoEjector\"],\n [\"navigationunit\", \"navigationUnit\"],\n [\"nav\", \"navigationUnit\"],\n [\"navunit\", \"navigationUnit\"],\n [\"commsstation\", \"commsStation\"],\n [\"fluidtank\", \"fluidTank\"],\n [\"shieldgenerator\", \"shieldGenerator\"],\n [\"generator\", \"shieldGenerator\"],\n [\"shieldprojector\", \"shieldProjector\"],\n [\"shipcontrol\", \"shipControl\"],\n [\"spawnpoint\", \"spawnPoint\"],\n [\"shipsize\", \"shipSize\"],\n [\"mapmarker\", \"mapMarker\"],\n [\"marker\", \"mapMarker\"],\n [\"dockingspring\", \"dockingSpring\"],\n [\"hugethruster\", \"hugeThruster\"]\n]);\n\nconst MACHINE_COMPONENTS = [\n \"loader\",\n \"pusher\",\n \"launcher\",\n \"navigationUnit\",\n \"fabricator\",\n \"cargoEjector\",\n \"cannon\",\n \"thruster\",\n \"cargoHatch\",\n \"commsStation\",\n \"fluidTank\",\n \"shieldGenerator\",\n \"shieldProjector\",\n \"helm\",\n \"sign\",\n \"spawnPoint\",\n \"door\",\n \"expandoBox\"\n];\n\nconst ENTITY_FEATURES = [\n \"health\",\n \"position\",\n \"outline\",\n \"inventory\",\n \"item\",\n \"filter\",\n \"filterMode\",\n \"filterSlots\",\n \"filterInventory\",\n \"beam\",\n \"occupied\",\n \"loaderConfig\",\n \"pusherConfig\",\n \"launcherConfig\",\n \"navigationConfig\",\n \"fabricatorQueue\",\n \"progress\"\n];\n\nfunction normalizeEntityKey(value) {\n return String(value ?? \"\").toLowerCase().replace(/[^a-z0-9]/g, \"\");\n}\n\nfunction clonePlain(value) {\n if (value == null) return value;\n if (typeof structuredClone === \"function\") return structuredClone(value);\n return JSON.parse(JSON.stringify(value));\n}\n\nfunction deepFreeze(value) {\n if (!value || typeof value !== \"object\" || Object.isFrozen(value)) return value;\n Object.freeze(value);\n for (const item of Object.values(value)) deepFreeze(item);\n return value;\n}\n\nfunction componentFor(contents, key) {\n if (!contents) return null;\n const component = ENTITY_COMPONENT_ALIASES.get(key) || key;\n return contents[component] ?? null;\n}\n\nfunction entityMachineType(contents) {\n if (!contents) return null;\n return MACHINE_COMPONENTS.find((component) => contents[component]) || null;\n}\n\nfunction firstFeatureSource(contents, names) {\n if (!contents) return null;\n for (const name of names) {\n const source = contents[name];\n if (source != null) return source;\n }\n return null;\n}\n\nfunction sourceWithProperty(contents, names, property) {\n if (!contents) return null;\n for (const name of names) {\n const source = contents[name];\n if (source && source[property] != null) return source;\n }\n return null;\n}\n\nfunction entityPublicType(summary, contents) {\n const machine = entityMachineType(contents);\n if (machine) return machine;\n if (contents?.player || summary?.category === \"player\") return \"player\";\n if (contents?.shipControl || summary?.category === \"ship_control\") return \"ship\";\n if (contents?.bot) return \"bot\";\n if (summary?.category === \"loose_item\" || contents?.itemCrate || contents?.itemHolder) return \"looseItem\";\n if (contents?.mapMarker) return \"mapMarker\";\n if (contents?.dockingSpring) return \"dockingSpring\";\n if (contents?.hugeThruster) return \"hugeThruster\";\n if (contents?.blueprintPreview) return \"blueprintPreview\";\n return \"unknown\";\n}\n\nfunction entityFeatures(summary, contents) {\n return ENTITY_FEATURES.filter((feature) => entityFeature(summary, contents, feature) != null);\n}\n\nfunction entityFeature(summary, contents, feature) {\n const key = normalizeEntityKey(feature);\n if (!key) return null;\n if (key === \"position\" || key === \"transform\") return summary?.position || summary?.transform || null;\n if (!contents) return null;\n const component = componentFor(contents, key);\n if (component != null) return component;\n if (key === \"machine\") return firstFeatureSource(contents, MACHINE_COMPONENTS);\n if (key === \"inventory\") return firstFeatureSource(contents, [\"itemHolder\", \"expandoBox\"]);\n if (key === \"item\") return firstFeatureSource(contents, [\"itemCrate\", \"itemHolder\", \"expandoBox\"]);\n if (key === \"filter\") return firstFeatureSource(contents, [\"loader\", \"pusher\", \"cargoHatch\"]);\n if (key === \"filtermode\") {\n const filterModeSource = sourceWithProperty(contents, [\"loader\", \"pusher\", \"cargoHatch\"], \"filterMode\");\n if (filterModeSource) return filterModeSource.filterMode;\n return sourceWithProperty(contents, [\"pusher\"], \"filteredMode\")?.filteredMode ?? null;\n }\n if (key === \"filterslots\") return sourceWithProperty(contents, [\"loader\", \"pusher\", \"cargoHatch\"], \"filterSlots\")?.filterSlots ?? null;\n if (key === \"filterinventory\") return contents.pusher?.filterInventory ?? null;\n if (key === \"beam\") return contents.pusherBeam ?? null;\n if (key === \"outline\") return contents.hoverOutline ?? null;\n if (key === \"occupied\") return sourceWithProperty(contents, [\"helm\", \"commsStation\"], \"occupied\")?.occupied ?? null;\n if (key === \"health\") return contents.health ?? null;\n if (key === \"loaderconfig\") return contents.loader ?? null;\n if (key === \"pusherconfig\") return contents.pusher ?? null;\n if (key === \"launcherconfig\") return contents.launcher ?? null;\n if (key === \"navigationconfig\") return contents.navigationUnit ?? null;\n if (key === \"fabricatorqueue\") return contents.fabricator?.rows ?? null;\n if (key === \"progress\") return contents.fabricator?.progress ?? contents.cargoEjector?.progress ?? contents.loader?.progress ?? contents.cargoHatch?.openFraction ?? null;\n return null;\n}\n\nfunction entityDomainHandle(client, entity, scope, type, snapshot = null) {\n const key = normalizeEntityKey(type);\n const state = snapshot || new EntityHandle(client, entity, scope).snapshot();\n if (!state) return null;\n const constructors = new Map([\n [\"loader\", LoaderHandle],\n [\"pusher\", PusherHandle],\n [\"launcher\", LauncherHandle],\n [\"navigationunit\", NavigationUnitHandle],\n [\"nav\", NavigationUnitHandle],\n [\"navunit\", NavigationUnitHandle],\n [\"fabricator\", FabricatorHandle],\n [\"cargoejector\", CargoEjectorHandle],\n [\"ejector\", CargoEjectorHandle],\n [\"cannon\", CannonHandle],\n [\"thruster\", ThrusterHandle],\n [\"commsstation\", CommsStationHandle],\n [\"sign\", SignHandle],\n [\"shieldgenerator\", GeneratorHandle],\n [\"generator\", GeneratorHandle],\n [\"cargohatch\", CargoHatchHandle],\n [\"shieldprojector\", ShieldProjectorHandle],\n [\"fluidtank\", FluidTankHandle],\n [\"helm\", HelmHandle],\n [\"spawnpoint\", SpawnPointHandle],\n [\"door\", DoorHandle],\n [\"expandobox\", ExpandoBoxHandle],\n [\"expando\", ExpandoBoxHandle]\n ]);\n const Handle = constructors.get(key);\n return Handle && state.is(key) ? new Handle(client, entity, scope) : null;\n}\n\nfunction worldStateFor(client, scope = \"ship\") {\n if (scope == null || scope === \"ship\" || scope === \"current\") return client.worlds.shipWorld();\n if (scope === \"overworld\") return client.worlds.overworld();\n return client.worlds.worlds.get(Number(scope)) || null;\n}\n\nexport function summariesFor(client, scope = \"ship\") {\n return worldStateFor(client, scope)?.entities() || [];\n}\n\nfunction summaryForEntity(client, scope, entity) {\n return worldStateFor(client, scope)?.entity(entity) || null;\n}\n\nfunction entityIdOf(value) {\n if (value && typeof value === \"object\") return Number(value.entity ?? value.id);\n return Number(value);\n}\n\nfunction inventorySlotIndexOf(value, name = \"slot\") {\n if (value && typeof value === \"object\") {\n if (value.index != null) return normalizeInventorySlotIndex(value.index, name);\n if (value.entity != null || value.id != null) throw new TypeError(`${name} must be an inventory slot, slot snapshot, equipment slot, or index`);\n }\n if (typeof value === \"string\") return normalizeEquipmentSlot(value);\n return normalizeInventorySlotIndex(value, name);\n}\n\nfunction normalizeInventorySlotIndex(value, name = \"slot\") {\n const number = Number(value);\n if (!Number.isInteger(number) || number < 0) throw new RangeError(`${name} must be a non-negative inventory slot index`);\n return number;\n}\n\nexport function currentPlayerSummary(client, scope = \"current\") {\n const sid = Number(client?.sid);\n if (!Number.isFinite(sid)) return null;\n return worldStateFor(client, scope)?.model.players().find((player) => player.entity === sid) || null;\n}\n\nfunction currentPlayerRank(client) {\n const player = currentPlayerSummary(client);\n const subrank = client?.captainSubrank?.subrank ?? null;\n const shipRank = player?.shipRank ?? null;\n return {\n shipRank,\n subrank: shipRank === \"captain\" ? subrank : null,\n isCaptain: shipRank === \"captain\",\n patronTier: player?.patronTier ?? null\n };\n}\n\nfunction normalizeEquipArguments(equipmentSlot, options = {}, command = {}) {\n if (equipmentSlot && typeof equipmentSlot === \"object\") {\n return {equipmentSlot: null, split: Boolean(equipmentSlot.split), command: options || {}};\n }\n return {equipmentSlot, split: Boolean(options?.split), command};\n}\n\nfunction inferEquipmentSlotForInventorySource(domain, source) {\n const handle = source instanceof InventorySlotHandle ? source : domain.slot(source);\n if (!handle.exists() || handle.itemId == null) throw new RangeError(`inventory slot ${handle.index} is empty; pass equipmentSlot explicitly`);\n const equipmentSlot = itemEquipmentSlotFromId(handle.itemId);\n if (!equipmentSlot) {\n const label = handle.itemName ? ` (${handle.itemName})` : \"\";\n throw new RangeError(`item ${handle.itemId}${label} does not map to an equipment slot; pass equipmentSlot explicitly`);\n }\n return equipmentSlot;\n}\n\nfunction inventoryHandlesForArea(domain, area = \"all\") {\n switch (area) {\n case \"all\":\n return domain.allSlots();\n case \"hotbar\":\n return domain.hotbarSlots();\n case \"equipment\":\n return Object.values(domain.equipmentSlots());\n default:\n throw new RangeError(`Unknown inventory area: ${area}`);\n }\n}\n\nexport const WrenchMode = Object.freeze({\n DropAllItems: \"drop-all-items\",\n GrabPrimaryItems: \"grab-primary-items\",\n GrabAllItems: \"grab-all-items\"\n});\n\nconst WRENCH_MODES = new Map([\n [0, WrenchMode.DropAllItems],\n [1, WrenchMode.GrabPrimaryItems],\n [2, WrenchMode.GrabAllItems]\n]);\n\nconst WRENCH_MODE_VALUES = new Map([...WRENCH_MODES].map(([value, name]) => [name, value]));\n\nexport const TurretMode = Object.freeze({\n ContinuousFire: \"continuous-fire\",\n VolleyFire: \"volley-fire\"\n});\n\nconst TURRET_MODES = new Map([\n [0, TurretMode.ContinuousFire],\n [1, TurretMode.VolleyFire]\n]);\n\nconst TURRET_MODE_VALUES = new Map([...TURRET_MODES].map(([value, name]) => [name, value]));\n\nfunction wrenchModeName(value) {\n return WRENCH_MODES.get(value) ?? null;\n}\n\nfunction turretModeName(value) {\n return TURRET_MODES.get(value) ?? null;\n}\n\nexport function normalizeWrenchMode(value) {\n const normalized = WRENCH_MODE_VALUES.get(value);\n if (normalized == null || !WRENCH_MODES.has(normalized)) {\n throw new RangeError(`Unknown wrench mode: ${value}`);\n }\n return normalized;\n}\n\nexport function normalizeTurretMode(value) {\n const normalized = TURRET_MODE_VALUES.get(value);\n if (normalized == null || !TURRET_MODES.has(normalized)) {\n throw new RangeError(`Unknown turret mode: ${value}`);\n }\n return normalized;\n}\n\nexport function normalizePositiveFinite(value, name) {\n const number = Number(value);\n if (!Number.isFinite(number) || number <= 0) throw new RangeError(`${name} must be a positive finite number`);\n return number;\n}\n\nexport function normalizePositiveInteger(value, name) {\n const number = Number(value);\n if (!Number.isInteger(number) || number <= 0) throw new RangeError(`${name} must be a positive integer`);\n return number;\n}\n\nexport function normalizeDegrees(value) {\n const number = Number(value);\n if (!Number.isFinite(number)) throw new RangeError(`angle must be a finite number`);\n return ((Math.round(number) % 360) + 360) % 360;\n}\n\nexport function normalizeLauncherPower(value) {\n const number = Number(value);\n if (!Number.isInteger(number) || number < 0 || number > 30) {\n throw new RangeError(`launcher power must be an integer between 0 and 30`);\n }\n return number;\n}\n\nexport function normalizeScannerResultPacket(packet) {\n const manifest = packet?.manifest && typeof packet.manifest === \"object\" ? packet.manifest : {};\n const hasMaterials = manifest.materials && typeof manifest.materials === \"object\";\n const hasManifest = (\n (manifest.blocks && typeof manifest.blocks === \"object\") ||\n (manifest.objects && typeof manifest.objects === \"object\") ||\n (manifest.inventories && typeof manifest.inventories === \"object\")\n );\n return {\n kind: hasMaterials ? \"bom\" : hasManifest ? \"manifest\" : \"unknown\",\n sid: packet?.sid ?? null,\n shipHex: typeof manifest.ship_hex === \"string\" ? manifest.ship_hex : null,\n shipName: typeof manifest.ship_name === \"string\" ? manifest.ship_name : null,\n blocks: copyCountMap(manifest.blocks),\n objects: copyCountMap(manifest.objects),\n inventories: copyCountMap(manifest.inventories),\n materials: copyCountMap(manifest.materials)\n };\n}\n\nfunction copyCountMap(value) {\n if (!value || typeof value !== \"object\") return null;\n return Object.fromEntries(\n Object.entries(value)\n .filter(([, count]) => typeof count === \"number\")\n .map(([itemId, count]) => [String(itemId), count])\n );\n}\n\nexport function emptyMachineSummary() {\n return {\n itemHolders: [],\n health: [],\n fabricators: [],\n cargoEjectors: [],\n cannons: [],\n thrusters: [],\n pushers: [],\n pusherBeams: [],\n launchers: [],\n loaders: [],\n cargoHatches: [],\n navigationUnits: [],\n commsStations: [],\n fluidTanks: [],\n shieldGenerators: [],\n shieldProjectors: [],\n helms: [],\n signs: [],\n spawnPoints: [],\n doors: [],\n expandoBoxes: []\n };\n}\n\nexport function normalizeShipReadOptions(options) {\n if (options == null || options === true) options = {};\n return {\n includeWorld: options.includeWorld !== false,\n includeTiles: Boolean(options.includeTiles),\n includeModel: Boolean(options.includeModel),\n includeBlocks: Boolean(options.includeBlocks),\n sort: options.sort ?? null\n };\n}\n\nexport function shipReadSummary(entity, options, worlds, currentEntity = undefined) {\n const control = entity.contents.shipControl;\n const worldState = options.includeWorld && control.shipWorldId != null\n ? worlds.worlds.get(Number(control.shipWorldId)) || null\n : null;\n const world = worldState ? worldState.snapshot({\n includeTiles: options.includeTiles,\n includeModel: options.includeModel,\n includeBlocks: options.includeBlocks\n }) : null;\n const current = currentEntity === undefined ? worlds.currentShipEntity() : currentEntity;\n const distance = distanceBetween(entity.transform, current?.transform);\n return {\n entity: entity.entity,\n name: control.name,\n hexCode: control.hexCode,\n color: control.color,\n colorCss: control.colorCss,\n position: entity.transform ? {x: entity.transform.x, y: entity.transform.y, rot: entity.transform.rot} : null,\n distance,\n footprint: entity.footprint,\n label: entity.label,\n kind: entity.kind,\n thrust: {\n x: control.thrustX,\n y: control.thrustY\n },\n shield: control.shield,\n warp: control.warp,\n worldId: control.shipWorldId,\n hasWorldData: Boolean(world),\n world,\n control,\n entitySummary: entity\n };\n}\n\nfunction distanceBetween(a, b) {\n if (!a || !b || typeof a.x !== \"number\" || typeof a.y !== \"number\" || typeof b.x !== \"number\" || typeof b.y !== \"number\") return null;\n return Math.hypot(a.x - b.x, a.y - b.y);\n}\n", "export {Connection} from \"./network/connection.js\";\nexport {DredlessClient, WrenchMode, TurretMode} from \"./client/index.js\";\nexport {WorldStore, WorldState} from \"./state/world/index.js\";\nexport {FabricatorType, ModelState, decodeModelData} from \"./state/model/index.js\";\nexport {generateGeneratorMaze, solveGeneratorMazeSeed, maybeSolveGeneratorMazeSeed} from \"./state/generator-maze.js\";\nexport {buildBlueprintPlacementMessage} from \"./protocol/outbound/blueprint.js\";\nexport {decodeMsgpack, encodeMsgpack} from \"./protocol/codec/msgpack.js\";\nexport {buildCommsMessage, flattenRichText, normalizeCommsEvent} from \"./protocol/outbound/comms.js\";\nexport {buildSignedCommandPacket} from \"./protocol/outbound/commands.js\";\nexport {\n buildEquipItemCommand,\n buildInventoryDragCommand,\n buildUnequipItemCommand,\n equipmentSlotName,\n normalizeEquipmentSlot,\n normalizeInventoryEvent,\n EquipmentSlot\n} from \"./protocol/outbound/inventory.js\";\nexport {\n buildBanPlayerMessage,\n buildDemoteSelfMessage,\n buildInviteResetMessage,\n buildKickPlayerMessage,\n buildPlayerListMessage,\n buildShipManagementMessage,\n buildSetPlayerRankMessage,\n buildShipPrivacyMessage,\n buildStarterRecoveryMessage,\n normalizeCaptainSubrank,\n normalizeShipPlayerList,\n normalizePlayerRank,\n normalizePrivacy,\n normalizeShipConfig\n} from \"./protocol/outbound/ship-management.js\";\nexport {SignDisplayMode, buildSignTextMessage, normalizeSignDisplayMode, signDisplayModeName} from \"./protocol/outbound/sign.js\";\nexport {\n buildCargoEjectorClipboardDirectionData,\n buildCargoEjectorCopyConfigData,\n buildCargoEjectorDirectionData,\n buildCargoEjectorPasteConfigData,\n buildCargoHatchCopyConfigData,\n buildCargoHatchFilterConfigData,\n buildCargoHatchFilterItemsData,\n buildCargoHatchFullConfigData,\n buildClipboardConfigData,\n buildClipboardFixedAngleData,\n buildExpandoClipboardAngleData,\n buildGeneratorClipboardDirectionData,\n buildGeneratorMazePuzzleData,\n buildLoaderClipboardConfigData,\n buildLoaderConfigData,\n buildLoaderCopyConfigData,\n buildLoaderFilterConfigData,\n buildLoaderFilterItemsData,\n buildLoaderFullConfigData,\n buildNavigationUnitClipboardConfigData,\n buildNavigationUnitConfigData,\n buildNavigationUnitPasteConfigData,\n buildPusherConfigData,\n buildPusherFilterItemsData,\n PusherMode,\n LoaderPosition,\n LoaderFilterMode,\n FixedAngleDirection,\n LoaderPriority\n} from \"./protocol/outbound/ui-config.js\";\nexport {decryptPayload} from \"./crypto/chacha.js\";\nexport {decompressLz4Frame} from \"./compression/lz4.js\";\nexport {fetchNoticeVersion, fetchGameVersion, fetchServerStatus, fetchServerStatuses, fetchServers} from \"./network/servers.js\";\nexport {fetchShips as fetchShipsWithSession, fetchShipList as fetchShipListWithSession} from \"./network/ships.js\";\nexport {\n BrowserSession,\n browserSession,\n createBrowserSession,\n createSession,\n createAnonSession,\n createAnonToken,\n fetchAnonKey,\n setBrowserSession,\n fetchAccountStatus,\n fetchShips,\n fetchShipListForBrowser as fetchShipList,\n joinShip,\n startShip,\n startNewShip,\n joinInvite\n} from \"./network/browser-session.js\";\n\nimport {Connection} from \"./network/connection.js\";\nimport {DredlessClient} from \"./client/index.js\";\nimport {fetchGameVersion, fetchNoticeVersion, fetchServerStatus, fetchServerStatuses, fetchServers} from \"./network/servers.js\";\nimport {\n BrowserSession,\n browserSession,\n createAnonSession,\n createAnonToken,\n createBrowserSession,\n createSession,\n fetchAccountStatus,\n fetchAnonKey,\n fetchShipListForBrowser,\n fetchShips,\n joinInvite,\n joinShip,\n setBrowserSession,\n startNewShip,\n startShip\n} from \"./network/browser-session.js\";\n\nexport const DredlessBrowser = {\n BrowserSession,\n Connection,\n DredlessClient,\n browserSession,\n createBrowserSession,\n createSession,\n createAnonSession,\n createAnonToken,\n fetchAnonKey,\n setBrowserSession,\n fetchAccountStatus,\n fetchNoticeVersion,\n fetchGameVersion,\n fetchServerStatus,\n fetchServerStatuses,\n fetchServers,\n fetchShips,\n fetchShipList: fetchShipListForBrowser,\n joinShip,\n startShip,\n startNewShip,\n joinInvite\n};\n\nexport default DredlessBrowser;\n", "import {DEFAULT_BASE_URL} from \"../constants.js\";\nimport {asNumber} from \"../runtime.js\";\nimport {HttpClient} from \"./http.js\";\n\nexport function createShipSpec(name = \"\", color = \"\") {\n return {type: \"new\", name: String(name ?? \"\"), color: String(color ?? \"\")};\n}\n\nexport function createInviteShipSpec(code) {\n return {type: \"invite\", code: String(code ?? \"\")};\n}\n\nexport function shipRef(ship) {\n if (ship == null) return null;\n if (typeof ship !== \"object\") return {type: \"join_or_load\", id: ship};\n if (ship.type) return ship;\n const id = ship.id ?? ship.hexCode ?? ship.hex_code;\n if (id != null) return {type: \"join_or_load\", id};\n return ship;\n}\n\nexport const normalizeShipSpec = shipRef;\n\nexport function normalizeShip(raw, key = null) {\n if (!raw || typeof raw !== \"object\") return null;\n const id = Number(raw.id ?? key);\n return {\n id: Number.isFinite(id) ? id : null,\n hexCode: raw.hex_code || raw.hexCode || raw.id || key || null,\n name: raw.team_name || \"Unknown Ship\",\n iconUrl: raw.icon_path || null,\n playerCount: asNumber(raw.player_count, 0),\n owned: Boolean(raw.owned),\n saved: Boolean(raw.saved),\n color: raw.color || \"\",\n time: asNumber(raw.time, null)\n };\n}\n\nfunction extractShips(data) {\n if (Array.isArray(data)) return data.map((ship, index) => [ship?.id || String(index), ship]);\n if (Array.isArray(data?.ships)) return data.ships.map((ship, index) => [ship?.id || String(index), ship]);\n if (data?.ships && typeof data.ships === \"object\") return Object.entries(data.ships);\n return [];\n}\n\nexport async function fetchShips(session, server, baseUrl = session?.baseUrl || DEFAULT_BASE_URL) {\n const data = await fetchShipList(session, server, baseUrl);\n return Array.isArray(data) ? data : Array.isArray(data?.ships) ? data.ships : [];\n}\n\nexport async function fetchShipList(session, server, baseUrl = session?.baseUrl || DEFAULT_BASE_URL) {\n if (!session) throw new Error(\"fetchShipList requires a session\");\n const serverId = Number(server && typeof server === \"object\" ? server.index ?? server.id : server ?? session.geoServer ?? 0);\n const data = await new HttpClient({baseUrl, session}).json(`shiplist?server=${serverId}`, {\n headers: {accept: \"application/json\"}\n });\n const ships = normalizeShipList(data);\n if (Array.isArray(data)) return {ships};\n if (data && typeof data === \"object\") {\n return {\n playerCount: asNumber(data.player_count, 0),\n maxPlayerCount: asNumber(data.max_player_count, 0),\n isMuted: Boolean(data.is_muted),\n ships\n };\n }\n return {ships};\n}\n\nfunction normalizeShipList(data) {\n return extractShips(data).map(([key, raw]) => normalizeShip(raw, key)).filter(Boolean);\n}\n", "import {DEFAULT_BASE_URL, DEFAULT_NOTICE_VERSION} from \"../constants.js\";\nimport {normalizeBaseUrl} from \"../runtime.js\";\nimport {browserCookies, cookieName, readBrowserCookie} from \"./cookies.js\";\nimport {fetchGameVersion, fetchNoticeVersion, resolveServer, serverId} from \"./servers.js\";\nimport {\n createInviteShipSpec,\n createShipSpec,\n fetchShipList,\n fetchShips as fetchSessionShips,\n shipRef\n} from \"./ships.js\";\nimport {Connection} from \"./connection.js\";\nimport {DredlessClient} from \"../client/index.js\";\nimport {Session} from \"./session.js\";\n\nexport class BrowserSession extends Session {\n constructor(baseUrl = DEFAULT_BASE_URL) {\n super(null, null, baseUrl);\n this.baseUrl = normalizeBaseUrl(baseUrl);\n this.ambientAuth = true;\n }\n\n get gameSession() {\n return browserCookies().get(cookieName(this.baseUrl, \"game_session\")) || \"\";\n }\n\n get gameToken() {\n return browserCookies().get(cookieName(this.baseUrl, \"game_token\")) || \"\";\n }\n\n get anonKey() {\n return this._anonKey || browserCookies().get(cookieName(this.baseUrl, \"anon_key\")) || \"\";\n }\n\n async readAnonKey() {\n const key = await readBrowserCookie(cookieName(this.baseUrl, \"anon_key\"));\n if (key) this._anonKey = key;\n return key || \"\";\n }\n\n async fetchAnonKey(noticeVersion = null) {\n this.noticeVersion = await browserNoticeVersion(noticeVersion, this.baseUrl);\n await createAnonLogin(this);\n const key = await this.readAnonKey();\n if (!key) throw new Error(\"Unable to read anon_key after anon login. Browser support is tested in page and content-script contexts; background, popup, worker, and other non-page contexts are unlikely to expose drednot.io cookies.\");\n return key;\n }\n\n get noticeVersion() {\n return this._noticeVersion ?? browserCookies().get(cookieName(this.baseUrl, \"notice_version\")) ?? null;\n }\n\n set noticeVersion(value) {\n this._noticeVersion = value == null ? null : Number(value);\n if (typeof document === \"undefined\" || value == null) return;\n document.cookie = `${cookieName(this.baseUrl, \"notice_version\")}=${encodeURIComponent(String(value))}; path=/; SameSite=Lax`;\n }\n\n mergeSetCookies() {\n // Browsers own the cookie jar. Set-Cookie is intentionally not readable.\n }\n\n async joinShipConnection(server, ship = null) {\n return this.#joinBrowserConnection(server, ship, true);\n }\n\n async startShipConnection(server, ship = null) {\n return this.#joinBrowserConnection(server, ship, false);\n }\n\n async startNewShipConnection(server, name = \"\", color = \"\") {\n return this.#joinBrowserConnection(server, createShipSpec(name, color), false);\n }\n\n async joinInviteConnection(server, code) {\n return this.#joinBrowserConnection(server, createInviteShipSpec(code), false);\n }\n\n async joinShip(server, ship = null) {\n return readyBrowserClient(await this.joinShipConnection(server, ship));\n }\n\n async startShip(server, ship = null) {\n return readyBrowserClient(await this.startShipConnection(server, ship));\n }\n\n async startNewShip(server, name = \"\", color = \"\") {\n return readyBrowserClient(await this.startNewShipConnection(server, name, color));\n }\n\n async joinInvite(server, code) {\n return readyBrowserClient(await this.joinInviteConnection(server, code));\n }\n\n async #joinBrowserConnection(server, ship, neverLoad) {\n if (server == null) throw new Error(\"A server id or server object is required\");\n const resolvedServer = await resolveServer(server, this.baseUrl);\n if (!resolvedServer) throw new Error(`Unable to resolve server ${serverId(server)}`);\n if (!this.gameVersion) this.gameVersion = await fetchGameVersion(this.baseUrl);\n if (this.noticeVersion == null) this.noticeVersion = DEFAULT_NOTICE_VERSION;\n\n const joinShip = ship == null ? createShipSpec(\"\", \"\") : shipRef(ship);\n const response = await this.request(\"join\", {\n method: \"POST\",\n mode: \"cors\",\n credentials: \"include\",\n referrer: `${this.baseUrl}/`,\n body: {\n join_info: {\n game_version: this.gameVersion,\n hide_badges: false,\n never_load: Boolean(neverLoad),\n server_id: resolvedServer.index,\n ship: joinShip\n }\n },\n headers: browserJoinHeaders(this.baseUrl)\n });\n if (!response.ok) throw new Error(`Join request failed: ${await response.text()}`);\n const join = await response.json();\n if (join.reject != null) {\n const error = new Error(joinRejectMessage(join.reject, {\n neverLoad,\n ship: joinShip,\n server: resolvedServer\n }));\n error.code = join.reject;\n error.join = join;\n throw error;\n }\n if (join.okay !== true) throw new Error(\"Bad join result\");\n\n const token = join.game_token ?? join.gameToken ?? this.gameToken;\n return new Connection(this, token || \"\", join.net_port, Number.isInteger(join.server_id) ? join.server_id : resolvedServer.index, resolvedServer);\n }\n\n toJSON() {\n return {\n ...super.toJSON(),\n ambientAuth: true,\n cookies: Object.fromEntries(browserCookies())\n };\n }\n}\n\nlet defaultBrowserSession = null;\n\nexport function browserSession(baseUrl = DEFAULT_BASE_URL) {\n const normalized = normalizeBaseUrl(baseUrl);\n if (!defaultBrowserSession || defaultBrowserSession.baseUrl !== normalized) defaultBrowserSession = new BrowserSession(normalized);\n return defaultBrowserSession;\n}\n\nexport function setBrowserSession(session = null) {\n defaultBrowserSession = session;\n return defaultBrowserSession;\n}\n\nexport const createBrowserSession = browserSession;\n\nexport async function createSession(noticeVersion = null, baseUrl = DEFAULT_BASE_URL) {\n const resolvedBaseUrl = normalizeBaseUrl(arguments.length >= 2 ? arguments[1] : baseUrl);\n const session = browserSession(resolvedBaseUrl);\n session.noticeVersion = await browserNoticeVersion(noticeVersion, resolvedBaseUrl);\n await session.fetchAccountStatus();\n return session;\n}\n\nexport async function createAnonSession(anonKey = null, noticeVersion = null, baseUrl = DEFAULT_BASE_URL) {\n if (typeof noticeVersion === \"string\" && noticeVersion.includes(\"://\") && (baseUrl == null || baseUrl === DEFAULT_BASE_URL)) {\n baseUrl = noticeVersion;\n noticeVersion = null;\n }\n const resolvedBaseUrl = normalizeBaseUrl(arguments.length >= 3 ? arguments[2] : baseUrl);\n const session = browserSession(resolvedBaseUrl);\n session.noticeVersion = await browserNoticeVersion(noticeVersion, resolvedBaseUrl);\n if (anonKey) {\n session._anonKey = String(anonKey);\n await setAmbientCookie(resolvedBaseUrl, \"anon_key\", anonKey);\n } else {\n await session.fetchAnonKey(session.noticeVersion);\n }\n await session.fetchAccountStatus();\n return session;\n}\n\nexport async function fetchAnonKey(noticeVersion = null, baseUrl = DEFAULT_BASE_URL) {\n const resolvedBaseUrl = normalizeBaseUrl(arguments.length >= 2 ? arguments[1] : baseUrl);\n return browserSession(resolvedBaseUrl).fetchAnonKey(noticeVersion);\n}\n\nexport const createAnonToken = fetchAnonKey;\n\nexport async function fetchAccountStatus(session = null) {\n return (session || browserSession()).fetchAccountStatus();\n}\n\nexport async function fetchShips(server, session = null) {\n return fetchSessionShips(session || browserSession(), server);\n}\n\nexport async function fetchShipListForBrowser(server, session = null) {\n return fetchShipList(session || browserSession(), server);\n}\n\nexport async function joinShip(server, ship = null, session = null) {\n return (session || browserSession()).joinShip(server, ship);\n}\n\nexport async function startShip(server, ship = null, session = null) {\n return (session || browserSession()).startShip(server, ship);\n}\n\nexport async function startNewShip(server, name = \"\", color = \"\", session = null) {\n return (session || browserSession()).startNewShip(server, name, color);\n}\n\nexport async function joinInvite(server, code, session = null) {\n return (session || browserSession()).joinInvite(server, code);\n}\n\nasync function readyBrowserClient(connection) {\n const client = new DredlessClient(connection);\n await client.whenReady();\n return client;\n}\n\nasync function createAnonLogin(session) {\n const response = await session.request(\"account/login/anon\", {\n method: \"POST\",\n mode: \"cors\",\n credentials: \"include\",\n referrer: `${session.baseUrl}/`,\n headers: browserAnonHeaders(session.baseUrl)\n });\n if (response.status === 503) throw new Error(\"Anon session creation is rate limited by the server\");\n if (!response.ok) throw new Error(`account/login/anon failed: ${response.status} ${response.statusText}`);\n session.mergeSetCookies(response, [\"anon_key\", \"game_session\"]);\n}\n\nasync function browserNoticeVersion(value, baseUrl = DEFAULT_BASE_URL) {\n if (value != null) return value;\n try {\n return await fetchNoticeVersion(baseUrl);\n } catch (_) {\n return DEFAULT_NOTICE_VERSION;\n }\n}\n\nasync function setAmbientCookie(baseUrl, name, value) {\n const key = cookieName(baseUrl, name);\n if (typeof globalThis.cookieStore !== \"undefined\" && typeof globalThis.cookieStore.set === \"function\") {\n try {\n await globalThis.cookieStore.set(key, String(value));\n return;\n } catch (_) {\n // Fall through to document.cookie.\n }\n }\n if (typeof document === \"undefined\") return;\n document.cookie = `${key}=${encodeURIComponent(String(value))}; path=/; SameSite=Lax`;\n}\n\nfunction browserAnonHeaders(baseUrl) {\n const origin = normalizeBaseUrl(baseUrl);\n return {\n accept: \"*/*\",\n origin,\n referer: `${origin}/`\n };\n}\n\nfunction browserJoinHeaders(baseUrl) {\n const origin = normalizeBaseUrl(baseUrl);\n return {\n accept: \"*/*\",\n \"content-type\": \"application/json\",\n origin,\n referer: `${origin}/`\n };\n}\n\nfunction joinRejectMessage(code, {neverLoad, ship, server} = {}) {\n if (code === 4007 && neverLoad) {\n const name = ship?.name ? ` \"${ship.name}\"` : \"\";\n const id = ship?.id != null ? ` (${ship.id})` : \"\";\n const serverText = server?.description ? ` on ${server.description}` : \"\";\n return `join rejected: 4007. ${name}${id}${serverText} could not be joined with never_load=true. Use startShip(server, ship) instead of joinShip(server, ship) when loading or starting a saved ship.`;\n }\n return `join rejected: ${code}`;\n}\n", "import {DEFAULT_BASE_URL, DEFAULT_NOTICE_VERSION, JOIN_USER_AGENT} from \"../constants.js\";\nimport {asNumber, isNode, normalizeBaseUrl} from \"../runtime.js\";\nimport {cookieName, cookiePrefix, readSetCookies, setCookieValues} from \"./cookies.js\";\nimport {HttpClient} from \"./http.js\";\nimport {fetchGameVersion, resolveServer, serverId} from \"./servers.js\";\nimport {createInviteShipSpec, createShipSpec, fetchShipList, fetchShips, shipRef} from \"./ships.js\";\nimport {Connection} from \"./connection.js\";\nimport {DredlessClient} from \"../client/index.js\";\n\nexport class Session {\n constructor(gameSession = null, gameVersion = null, baseUrl = DEFAULT_BASE_URL) {\n this.baseUrl = baseUrl;\n this.cookies = setCookieValues(this.baseUrl, {});\n this.gameVersion = gameVersion || null;\n this._noticeVersion = null;\n this.account = null;\n this.geoServer = null;\n this.upgraded = false;\n this.isRegistered = false;\n this.showAds = false;\n this.forceTutorial = false;\n this.ban = null;\n if (gameSession) this.cookies.set(cookieName(this.baseUrl, \"game_session\"), String(gameSession));\n }\n\n get gameSession() {\n return this.cookies.get(cookieName(this.baseUrl, \"game_session\")) || \"\";\n }\n\n get gameToken() {\n return this.cookies.get(cookieName(this.baseUrl, \"game_token\")) || \"\";\n }\n\n get noticeVersion() {\n return this._noticeVersion ?? this.cookies.get(cookieName(this.baseUrl, \"notice_version\")) ?? null;\n }\n\n set noticeVersion(value) {\n this._noticeVersion = value == null ? null : Number(value);\n const key = cookieName(this.baseUrl, \"notice_version\");\n if (value == null) this.cookies.delete(key);\n else this.cookies.set(key, String(value));\n }\n\n request(path, init = {}) {\n return new HttpClient({baseUrl: this.baseUrl, session: this}).request(path, init);\n }\n\n async fetchAccountStatus() {\n const response = await this.request(\"account/status\", {\n method: \"GET\",\n mode: \"cors\",\n credentials: \"include\",\n referrer: `${this.baseUrl}/`,\n headers: statusHeaders(this.baseUrl)\n });\n if (!response.ok) throw new Error(`account/status failed: ${response.status} ${response.statusText}`);\n this.mergeSetCookies(response);\n const raw = await response.json();\n this.#readStatus(raw);\n return raw;\n }\n\n async fetchShips(server) {\n return fetchShips(this, server);\n }\n\n async fetchShipList(server) {\n return fetchShipList(this, server);\n }\n\n async joinShipConnection(server, ship = null) {\n return this.#startShipConnection(server, ship, true);\n }\n\n async startShipConnection(server, ship = null) {\n return this.#startShipConnection(server, ship, false);\n }\n\n async startNewShipConnection(server, name = \"\", color = \"\") {\n return this.#startShipConnection(server, createShipSpec(name, color), false);\n }\n\n async joinInviteConnection(server, code) {\n return this.#startShipConnection(server, createInviteShipSpec(code), false);\n }\n\n async joinShip(server, ship = null) {\n return readyClient(await this.joinShipConnection(server, ship));\n }\n\n async startShip(server, ship = null) {\n return readyClient(await this.startShipConnection(server, ship));\n }\n\n async startNewShip(server, name = \"\", color = \"\") {\n return readyClient(await this.startNewShipConnection(server, name, color));\n }\n\n async joinInvite(server, code) {\n return readyClient(await this.joinInviteConnection(server, code));\n }\n\n toJSON() {\n return {\n baseUrl: this.baseUrl,\n gameSession: this.gameSession,\n gameToken: this.gameToken,\n gameVersion: this.gameVersion,\n noticeVersion: this.noticeVersion,\n cookies: Object.fromEntries(this.cookies),\n account: this.account,\n geoServer: this.geoServer,\n upgraded: this.upgraded,\n isRegistered: this.isRegistered,\n showAds: this.showAds,\n forceTutorial: this.forceTutorial,\n ban: this.ban,\n };\n }\n\n async #startShipConnection(server, ship, neverLoad) {\n if (server == null) throw new Error(\"A server id or server object is required\");\n const resolvedServer = await resolveServer(server, this.baseUrl);\n if (!resolvedServer) throw new Error(`Unable to resolve server ${serverId(server)}`);\n if (!this.gameVersion) this.gameVersion = await fetchGameVersion(this.baseUrl);\n if (this.noticeVersion == null) this.noticeVersion = DEFAULT_NOTICE_VERSION;\n\n const joinShip = ship == null ? createShipSpec(\"\", \"\") : shipRef(ship);\n const response = await this.request(\"join\", {\n method: \"POST\",\n mode: \"cors\",\n credentials: \"include\",\n referrer: `${this.baseUrl}/`,\n body: {\n join_info: {\n game_version: this.gameVersion,\n hide_badges: false,\n never_load: Boolean(neverLoad),\n server_id: resolvedServer.index,\n ship: joinShip\n }\n },\n headers: joinHeaders(this.baseUrl)\n });\n if (!response.ok) throw new Error(`Join request failed: ${await response.text()}`);\n this.mergeSetCookies(response, [\"game_session\", \"anon_key\", \"game_token\"]);\n const join = await response.json();\n if (join.reject != null) {\n const error = new Error(joinRejectMessage(join.reject, {\n neverLoad,\n ship: joinShip,\n server: resolvedServer\n }));\n error.code = join.reject;\n error.join = join;\n throw error;\n }\n if (join.okay !== true) throw new Error(\"Bad join result\");\n\n const token = this.gameToken;\n if (!token) throw new Error(\"Join did not return a game_token cookie\");\n return new Connection(this, token, join.net_port, Number.isInteger(join.server_id) ? join.server_id : resolvedServer.index, resolvedServer);\n }\n\n mergeSetCookies(response, names = [\"game_session\", \"anon_key\"]) {\n const prefix = cookiePrefix(this.baseUrl);\n for (const [name, value] of readSetCookies(response.headers, names, this.baseUrl)) {\n const cookieName = name.startsWith(prefix) ? name : `${prefix}${name}`;\n this.cookies.set(cookieName, value);\n }\n }\n\n #readStatus(raw) {\n const account = raw?.account && typeof raw.account === \"object\" ? raw.account : null;\n this.account = account ? {\n name: account.name || account.username || account.display_name || account.displayName || account.handle || \"Unknown\",\n color: asNumber(account.color, 0),\n game_rank: asNumber(account.game_rank, 0),\n user_badges: Array.isArray(account.user_badges) ? account.user_badges.filter((item) => typeof item === \"string\") : [],\n is_registered: Boolean(account.is_registered)\n } : null;\n this.geoServer = asNumber(raw?.geo_server ?? raw?.geoServer, null);\n this.upgraded = Boolean(raw?.upgraded ?? account?.upgraded);\n this.isRegistered = Boolean(account?.is_registered);\n this.showAds = Boolean(raw?.show_ads ?? raw?.showAds);\n this.forceTutorial = Boolean(raw?.force_tutorial ?? raw?.forceTutorial);\n this.ban = raw?.ban || null;\n }\n}\n\nexport class AnonSession extends Session {\n constructor(gameSession = null, anonKey = null, gameVersion = null, baseUrl = DEFAULT_BASE_URL) {\n super(gameSession, gameVersion, baseUrl);\n if (anonKey) this.cookies.set(cookieName(this.baseUrl, \"anon_key\"), String(anonKey));\n }\n\n get anonKey() {\n return this.cookies.get(cookieName(this.baseUrl, \"anon_key\")) || \"\";\n }\n\n toJSON() {\n return {\n ...super.toJSON(),\n anonKey: this.anonKey\n };\n }\n}\n\nexport async function createSession(noticeVersion = null, baseUrl = DEFAULT_BASE_URL) {\n const resolvedBaseUrl = normalizeBaseUrl(arguments.length >= 2 ? arguments[1] : baseUrl);\n const session = new Session(null, null, resolvedBaseUrl);\n session.noticeVersion = await internalNoticeVersion(noticeVersion, resolvedBaseUrl);\n await session.fetchAccountStatus();\n return session;\n}\n\nexport async function createAnonToken(noticeVersion = null, baseUrl = DEFAULT_BASE_URL) {\n const resolvedBaseUrl = normalizeBaseUrl(arguments.length >= 2 ? arguments[1] : baseUrl);\n const session = new AnonSession(null, null, null, resolvedBaseUrl);\n session.noticeVersion = await internalNoticeVersion(noticeVersion, resolvedBaseUrl);\n const response = await session.request(\"account/login/anon\", {\n method: \"POST\",\n mode: \"cors\",\n credentials: \"include\",\n referrer: `${session.baseUrl}/`,\n headers: anonHeaders(session.baseUrl)\n });\n if (response.status === 503) throw new Error(\"Anon token creation is rate limited by the server\");\n if (!response.ok) throw new Error(`account/login/anon failed: ${response.status} ${response.statusText}`);\n session.mergeSetCookies(response, [\"anon_key\", \"game_session\"]);\n if (!session.anonKey) throw new Error(\"Unable to obtain anon_key\");\n return session.anonKey;\n}\n\nexport async function createAnonSession(anonKey = null, noticeVersion = null, baseUrl = DEFAULT_BASE_URL) {\n if (typeof noticeVersion === \"string\" && noticeVersion.includes(\"://\") && (baseUrl == null || baseUrl === DEFAULT_BASE_URL)) {\n baseUrl = noticeVersion;\n noticeVersion = null;\n }\n const resolvedBaseUrl = normalizeBaseUrl(arguments.length >= 3 ? arguments[2] : baseUrl);\n const resolvedAnonKey = anonKey || await createAnonToken(noticeVersion, resolvedBaseUrl);\n const session = new AnonSession(null, resolvedAnonKey, null, resolvedBaseUrl);\n session.baseUrl = resolvedBaseUrl;\n session.noticeVersion = await internalNoticeVersion(noticeVersion, resolvedBaseUrl);\n await session.fetchAccountStatus();\n return session;\n}\n\nasync function readyClient(connection) {\n const client = new DredlessClient(connection);\n await client.whenReady();\n return client;\n}\n\nasync function internalNoticeVersion(value, baseUrl = DEFAULT_BASE_URL) {\n if (value != null) return value;\n try {\n const {fetchNoticeVersion} = await import(\"./servers.js\");\n return await fetchNoticeVersion(baseUrl);\n } catch (_) {\n return DEFAULT_NOTICE_VERSION;\n }\n}\n\nfunction statusHeaders(baseUrl) {\n const headers = {accept: \"*/*\"};\n if (isNode()) {\n Object.assign(headers, {\n \"user-agent\": JOIN_USER_AGENT,\n \"accept-language\": \"en-US,en;q=0.9\",\n referer: `${normalizeBaseUrl(baseUrl)}/`,\n dnt: \"1\",\n \"sec-gpc\": \"1\",\n \"sec-fetch-dest\": \"empty\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-site\": \"same-origin\"\n });\n }\n return headers;\n}\n\nfunction anonHeaders(baseUrl) {\n const origin = normalizeBaseUrl(baseUrl);\n return {\n accept: \"*/*\",\n origin,\n referer: `${origin}/`\n };\n}\n\nfunction joinHeaders(baseUrl) {\n const headers = {\n accept: \"*/*\",\n \"accept-language\": \"en-US,en;q=0.9\",\n \"content-type\": \"application/json\",\n origin: normalizeBaseUrl(baseUrl),\n referer: `${normalizeBaseUrl(baseUrl)}/`,\n pragma: \"no-cache\",\n \"cache-control\": \"no-cache\",\n dnt: \"1\",\n \"sec-gpc\": \"1\",\n \"sec-fetch-dest\": \"empty\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-site\": \"same-origin\",\n priority: \"u=0\"\n };\n if (isNode()) headers[\"user-agent\"] = JOIN_USER_AGENT;\n return headers;\n}\n\nfunction joinRejectMessage(code, {neverLoad, ship, server} = {}) {\n if (code === 4007 && neverLoad) {\n const name = ship?.name ? ` \"${ship.name}\"` : \"\";\n const id = ship?.id != null ? ` (${ship.id})` : \"\";\n const serverText = server?.description ? ` on ${server.description}` : \"\";\n return `join rejected: 4007. ${name}${id}${serverText} could not be joined with never_load=true. Use session.startShip(server, ship) instead of session.joinShip(server, ship) when loading or starting a saved ship.`;\n }\n return `join rejected: ${code}`;\n}\n", "import DredlessBrowser from \"./browser.js\";\n\nglobalThis.Dredless = DredlessBrowser;\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["server", "WebSocket", "serverId", "server", "out", "isSemanticLoaderDelta", "rotl32", "rotr32", "isSemanticLoaderDelta", "ModelReader", "numericFields", "TWO_FIELD_SPEC", "LABEL_STATE_SPEC", "SIMPLE_LABEL_STATE_SPEC", "peekStreamInt", "nextValueLooksLikeTextBlob", "MODEL_TABLE_SPECS", "TABLE_78_NUMERIC_FIELDS", "WIRE_TAG_TABLES", "MASK_ONLY_TABLES", "ENTITY_FOOTPRINTS", "PLACED_ENTITY_TYPE_IDS", "FabricatorType", "FABRICATOR_TYPES", "HELM_TYPE_IDS", "COMMS_STATION_TYPE_ID", "COMMS_STATION_MAX_CHARGES", "CARGO_HATCH_TYPE_IDS", "THRUSTER_TYPE_IDS", "EXPANDO_BOX_TYPE_ID", "ITEM_LAUNCHER_TYPE_ID", "LOADER_TYPE_ID", "NAVIGATION_UNIT_TYPE_ID", "entityTypeIdFromRecord", "CANNON_AMMO_COLOR_ITEM_IDS", "CANNON_TYPE_IDS", "THRUSTER_FACING_NAMES", "DEFAULT_OVERWORLD_WARP_DURATION_SECONDS", "OVERWORLD_WARP_TICKS_PER_SECOND", "MARKER_TYPE_IDS", "TEAM_RANK_NAMES", "PLAYER_SHIP_RANKS", "PUSHER_MODE_NAMES", "SIGN_DISPLAY_MODE_NAMES", "SHIELD_GENERATOR_BOOST_STATE_NAMES", "NAVIGATION_DEFAULT_DESTINATION", "navigationDestinationName", "isNavigationDestination", "numberOrNull", "qKey", "blobKey", "cloneRecord", "firstRecord", "TABLE_78_FIELD_BITS", "table78DeltaRecord", "isSemanticLoaderDelta", "decodeText", "entityNameFromType", "markerTypeIdForTables", "itemSummary", "summarizeItemHolder", "boundedProgress", "summarizeFabricator", "summarizeCargoEjector", "summarizeCannon", "summarizeThruster", "summarizeHelm", "navigationDestinationFromRecord", "summarizeNavigationUnit", "summarizeCommsStation", "summarizeHealth", "summarizeBot", "isBoulderBotExclusion", "botClassFromState", "isCowardBossState", "isOrangeFoolBotState", "isZombieBossBotState", "isRedSentryBotState", "isBlueRusherBotState", "isRedSniperBotState", "isYellowHunterBotState", "isAquaShielderBotState", "isLazerEnthusiastBotState", "isYellowMineGuardBotState", "isShieldHelperBotState", "isShieldMasterBotState", "botIdentifierFromState", "summarizeShieldGenerator", "summarizeShipControl", "summarizeShipSize", "summarizeShipWorldMetadata", "summarizeItemCrate", "scaledSizeSummary", "summarizeExpandoBox", "summarizeHoverOutline", "summarizeMapMarker", "summarizeDockingSpring", "summarizeHugeThruster", "summarizeLoader", "summarizeCargoHatch", "summarizePusher", "summarizePusherBeam", "normalizeDegrees", "summarizeItemLauncher", "summarizeSign", "summarizeShieldProjector", "summarizeSpawnPoint", "summarizeDoor", "enumValueName", "colorToCss", "previewActionName", "bitOffsets", "summarizeBlueprintPreview", "summarizePlayerPreview", "summarizePlayer", "patronTierName", "mergeContents", "MAX_HOVER_OUTLINE_FOOTPRINT_CELLS", "entityFootprint", "entityLabel", "entityCategory", "BLOCK_KEY_OFFSET", "BLOCK_KEY_STRIDE", "blockKey", "EMPTY_TABLE", "MAX_RETAINED_REMOVALS", "MAX_RETAINED_ERRORS", "pushCapped", "defineLazyProperty", "q32Destination", "q36Destination", "q20Destination", "q32DestinationRow", "q36DestinationRow", "DEFAULT_HISTORY_LIMITS", "normalizeLimit", "pushBounded", "world", "_remove", "player", "requireFiniteNumber", "requireNonNegativeInteger", "
|
|
4
|
+
"sourcesContent": ["export const DEFAULT_BASE_URL = \"https://drednot.io\";\nexport const DEFAULT_GAME_VERSION = null;\nexport const DEFAULT_NOTICE_VERSION = 17;\n\nexport const encoder = new TextEncoder();\nexport const decoder = new TextDecoder(\"utf-8\");\n\nexport const SHARED_CHACHA_MATERIAL = Uint8Array.from([\n 0x15, 0x85, 0x59, 0xc6, 0x26, 0xc4, 0x31, 0x32,\n 0xb8, 0xed, 0xb2, 0xfe, 0x5b, 0x87, 0x5e, 0x5e,\n 0x3d, 0xd9, 0xe3, 0xcc, 0xa3, 0x9b, 0xd6, 0x58,\n 0xe2, 0xdc, 0x0e, 0x8b, 0x96, 0xb7, 0x05, 0x88,\n 0x78, 0xd1, 0xd4, 0xa4, 0x19, 0x3c, 0xb9, 0x1e,\n 0xbe, 0x78, 0x18, 0x12\n]);\n\nexport const JOIN_USER_AGENT = \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36\";\nexport const KEEPALIVE_INTERVAL_MS = 15_000;\nexport const INITIAL_OUTFIT_MESSAGE = {\n type: 7,\n outfit: {\n color_body: 4695355,\n color_legs: 1393785,\n color_skin: 13212550,\n color_feet: 6242065,\n color_hair: 1118481,\n style_hair: 0,\n color_hat: 16716049,\n style_hat: 0,\n color_face_1: 8421504,\n style_face_1: 0,\n color_face_2: 8421504,\n style_face_2: 0\n }\n};\nexport const KEEPALIVE_MESSAGE = {type: 2, msg: \"/\"};\n\nexport const COMMAND_FIELDS = [\n \"type\", \"n\", \"x\", \"y\", \"mx\", \"my\", \"vx\", \"vy\",\n \"jump\", \"jump_held\", \"drop\", \"act1\", \"act1_held\", \"exit\", \"act2\", \"act_alt\", \"act_alt_held\",\n \"wrench_mode\", \"turret_mode\", \"scr_w\", \"scr_h\", \"motion\",\n \"focus_ent\", \"config_ent\", \"tip_select\", \"inv_slot\", \"blur\", \"drag\"\n];\n\nexport const COMMAND_DEFAULT_FORMATS = {\n type: \"positive-fixint\",\n n: \"uint16\",\n x: \"float32\",\n y: \"float32\",\n mx: \"float32\",\n my: \"float32\",\n vx: \"float32\",\n vy: \"float32\",\n jump: \"bool\",\n jump_held: \"bool\",\n drop: \"bool\",\n act1: \"bool\",\n act1_held: \"bool\",\n exit: \"bool\",\n act2: \"bool\",\n act_alt: \"bool\",\n act_alt_held: \"bool\",\n wrench_mode: \"positive-fixint\",\n turret_mode: \"positive-fixint\",\n scr_w: \"uint16\",\n scr_h: \"uint16\",\n motion: \"float32\",\n focus_ent: \"nil\",\n config_ent: \"nil\",\n tip_select: \"nil\",\n inv_slot: \"positive-fixint\",\n blur: \"bool\",\n drag: \"nil\"\n};\n", "'use strict';\n\nmodule.exports = function () {\n throw new Error(\n 'ws does not work in the browser. Browser clients must use the native ' +\n 'WebSocket object'\n );\n};\n", "import {DEFAULT_BASE_URL} from \"./constants.js\";\n\nexport const isNode = () => typeof process !== \"undefined\" && Boolean(process.versions?.node);\nexport const isBrowser = () => typeof window !== \"undefined\" && typeof document !== \"undefined\";\nexport const normalizeBaseUrl = (baseUrl = DEFAULT_BASE_URL) => new URL(baseUrl, DEFAULT_BASE_URL).origin;\nexport const resolveUrl = (baseUrl, path = \"\") => new URL(String(path).replace(/^\\//, \"\"), `${normalizeBaseUrl(baseUrl)}/`).href;\nexport const hostName = (baseUrl) => new URL(normalizeBaseUrl(baseUrl)).hostname;\nexport const asNumber = (value, fallback = 0) => {\n const number = Number(value);\n return Number.isFinite(number) ? number : fallback;\n};\n\nexport function debug(...args) {\n if (isNode() && process.env.DREDLESS_LOG === \"1\") console.log(\"[dredless]\", ...args);\n}\n\nexport function getFetch() {\n if (typeof fetch !== \"function\") throw new Error(\"globalThis.fetch is not available\");\n return fetch.bind(globalThis);\n}\n\nlet wsModulePromise = null;\n\nexport async function getWebSocket() {\n if (isBrowser()) {\n if (typeof WebSocket !== \"function\") throw new Error(\"globalThis.WebSocket is not available\");\n return WebSocket;\n }\n if (typeof WebSocket === \"function\" && WebSocket.name !== \"WebSocket\") return WebSocket;\n if (isNode()) {\n wsModulePromise ??= import(\"ws\").then((module) => module.default || module.WebSocket || module);\n return wsModulePromise;\n }\n if (typeof WebSocket === \"function\") return WebSocket;\n throw new Error(\"globalThis.WebSocket is not available\");\n}\n", "import {DEFAULT_BASE_URL} from \"../constants.js\";\nimport {hostName, normalizeBaseUrl} from \"../runtime.js\";\n\nexport function cookiePrefix(baseUrl = DEFAULT_BASE_URL) {\n const host = hostName(baseUrl);\n if (host === \"test.drednot.io\") return \"test_\";\n if (host === \"local.drednot.io\") return \"local_\";\n return \"\";\n}\n\nexport const cookieName = (baseUrl, name) => `${cookiePrefix(baseUrl)}${name}`;\n\nexport function parseCookies(text = \"\") {\n const cookies = new Map();\n for (const part of String(text).split(/;\\s*/)) {\n const index = part.indexOf(\"=\");\n if (index <= 0) continue;\n cookies.set(part.slice(0, index).trim(), decodeURIComponent(part.slice(index + 1).trim()));\n }\n return cookies;\n}\n\nexport function browserCookies() {\n return canReadDocumentCookie() ? parseCookies(document.cookie || \"\") : new Map();\n}\n\nexport function canReadDocumentCookie() {\n try {\n return typeof document !== \"undefined\" && typeof document.cookie === \"string\";\n } catch (_) {\n return false;\n }\n}\n\nexport function hasCookieStore() {\n return typeof globalThis.cookieStore !== \"undefined\" && typeof globalThis.cookieStore.getAll === \"function\";\n}\n\nexport async function readBrowserCookie(name) {\n if (hasCookieStore()) {\n try {\n const cookie = typeof globalThis.cookieStore.get === \"function\" ? await globalThis.cookieStore.get(name) : null;\n if (cookie?.value != null) return cookie.value;\n } catch (_) {\n // Fall through to document.cookie below.\n }\n }\n return browserCookies().get(name) || \"\";\n}\n\nexport function setCookieValues(baseUrl, source = {}) {\n const base = normalizeBaseUrl(baseUrl);\n const values = source instanceof Map ? source : source?.cookies instanceof Map ? source.cookies : Object.entries(source || {});\n const cookies = new Map(values);\n const prefix = cookiePrefix(base);\n const anonKey = source.anonKey || source.anon_key;\n const gameSession = source.gameSession || source.game_session;\n const noticeVersion = source.noticeVersion || source.notice_version;\n if (anonKey && !cookies.has(`${prefix}anon_key`)) cookies.set(`${prefix}anon_key`, anonKey);\n if (gameSession && !cookies.has(`${prefix}game_session`)) cookies.set(`${prefix}game_session`, gameSession);\n if (noticeVersion && !cookies.has(`${prefix}notice_version`)) cookies.set(`${prefix}notice_version`, noticeVersion);\n return cookies;\n}\n\nexport function cookieHeader(baseUrl, source = {}) {\n return [...setCookieValues(baseUrl, source)].map(([key, value]) => `${key}=${encodeURIComponent(value)}`).join(\"; \");\n}\n\nexport function readSetCookies(headers, names = [\"game_session\", \"anon_key\"], baseUrl = DEFAULT_BASE_URL) {\n const values = typeof headers?.getSetCookie === \"function\"\n ? headers.getSetCookie()\n : headers?.get?.(\"set-cookie\") ? [headers.get(\"set-cookie\")] : [];\n const found = new Map();\n const prefix = cookiePrefix(baseUrl);\n for (const header of values) {\n for (const name of names) {\n for (const key of prefix ? [name, `${prefix}${name}`] : [name]) {\n const regex = new RegExp(`(?:^|,\\\\s*)${key}=([^;]+)`, \"g\");\n let match;\n while ((match = regex.exec(header))) found.set(key, decodeURIComponent(match[1]));\n }\n }\n }\n return found;\n}\n", "import {getFetch, isBrowser, normalizeBaseUrl, resolveUrl} from \"../runtime.js\";\nimport {cookieHeader} from \"./cookies.js\";\n\nexport class HttpClient {\n constructor({baseUrl, session = null} = {}) {\n this.baseUrl = normalizeBaseUrl(baseUrl);\n this.session = session;\n }\n\n async request(path, init = {}) {\n const headers = new Headers(init.headers || {});\n const body = this.#body(init.body, headers);\n const cookie = this.session && !isBrowser() ? cookieHeader(this.baseUrl, this.session) : \"\";\n if (cookie) headers.set(\"cookie\", cookie);\n return getFetch()(resolveUrl(this.baseUrl, path), {\n ...init,\n body,\n headers,\n credentials: isBrowser() ? \"include\" : init.credentials\n });\n }\n\n async json(path, init = {}) {\n const response = await this.request(path, init);\n if (!response.ok) throw new Error(`${path} failed: ${response.status} ${response.statusText}`);\n return response.json();\n }\n\n #body(body, headers) {\n if (body == null || typeof body === \"string\" || body instanceof ArrayBuffer || ArrayBuffer.isView(body)) return body;\n if (!headers.has(\"content-type\")) headers.set(\"content-type\", \"application/json\");\n return JSON.stringify(body);\n }\n}\n", "import {DEFAULT_BASE_URL} from \"../constants.js\";\nimport {getWebSocket, hostName, normalizeBaseUrl} from \"../runtime.js\";\nimport {HttpClient} from \"./http.js\";\n\nconst cache = new Map();\n\nclass ServerDirectory {\n constructor(baseUrl = DEFAULT_BASE_URL) {\n this.baseUrl = normalizeBaseUrl(baseUrl);\n this.meta = null;\n }\n\n async load() {\n if (cache.has(this.baseUrl)) {\n this.meta = await cache.get(this.baseUrl);\n return this;\n }\n const promise = this.#fetchMeta();\n cache.set(this.baseUrl, promise);\n this.meta = await promise;\n return this;\n }\n\n async version() {\n await this.load();\n if (!this.meta.version) throw new Error(\"Unable to locate GAME_VERSION in drednot bundle\");\n return this.meta.version;\n }\n\n async list() {\n return this.servers();\n }\n\n async servers() {\n await this.load();\n if (!this.meta.serverInfo) throw new Error(\"Unable to locate server list in drednot bundle\");\n return this.meta.serverInfo.servers;\n }\n\n async get(id = null) {\n return this.pick(id);\n }\n\n async pick(id = null) {\n const servers = await this.servers();\n return servers.find((server) => server.index === Number(id)) || servers[0] || null;\n }\n\n async #fetchMeta() {\n const response = await new HttpClient({baseUrl: this.baseUrl}).request(\"index.html\");\n if (!response.ok) throw new Error(`Failed to fetch bundle: ${response.status} ${response.statusText}`);\n const text = await response.text();\n return {text, version: parseGameVersion(text), serverInfo: parseServerInfo(text, this.baseUrl)};\n }\n}\n\nexport const fetchGameVersion = (baseUrl = DEFAULT_BASE_URL) => new ServerDirectory(baseUrl).version();\nexport const fetchServers = (baseUrl = DEFAULT_BASE_URL) => new ServerDirectory(baseUrl).servers();\nexport async function fetchServerStatus(server, baseUrl = DEFAULT_BASE_URL) {\n const resolved = await resolveServer(server, baseUrl);\n if (!resolved?.domain) throw new Error(`Unable to resolve server ${serverId(server)}`);\n const WebSocket = await getWebSocket();\n const socket = new WebSocket(`wss://${resolved.domain}:4000/`);\n\n return new Promise((resolve, reject) => {\n let settled = false;\n let startedAt = 0;\n const finish = (callback, value) => {\n if (settled) return;\n settled = true;\n clearTimeout(timeout);\n callback(value);\n if (socket.readyState === 0 || socket.readyState === 1) socket.close();\n };\n const timeout = setTimeout(() => finish(reject, new Error(`Timed out fetching status for ${resolved.domain}`)), 10000);\n const onOpen = () => {\n startedAt = Date.now();\n socket.send(\"yo\");\n };\n const onMessage = async (event) => {\n try {\n const data = JSON.parse(await websocketText(event?.data ?? event));\n const playerCount = Number(data.player_count);\n const maxPlayerCount = Number(data.player_max);\n if (!Number.isFinite(playerCount) || !Number.isFinite(maxPlayerCount)) throw new Error(\"Invalid server status response\");\n finish(resolve, {playerCount, maxPlayerCount, ping: Date.now() - startedAt});\n } catch (error) {\n finish(reject, new Error(`Invalid status response from ${resolved.domain}: ${error.message}`));\n }\n };\n const onError = (event) => finish(reject, event?.error || new Error(`WebSocket error while fetching ${resolved.domain}`));\n if (typeof socket.on === \"function\") {\n socket.on(\"open\", onOpen);\n socket.on(\"message\", onMessage);\n socket.on(\"error\", onError);\n } else if (typeof socket.addEventListener === \"function\") {\n socket.addEventListener(\"open\", onOpen);\n socket.addEventListener(\"message\", onMessage);\n socket.addEventListener(\"error\", onError);\n } else {\n socket.onopen = onOpen;\n socket.onmessage = onMessage;\n socket.onerror = onError;\n }\n });\n}\n\nexport async function fetchServerStatuses(baseUrl = DEFAULT_BASE_URL) {\n const servers = await fetchServers(baseUrl);\n return Promise.all(servers.map(async (server) => ({...server, ...await fetchServerStatus(server, baseUrl)})));\n}\n\nexport async function fetchNoticeVersion(baseUrl = DEFAULT_BASE_URL) {\n const response = await new HttpClient({baseUrl}).request(\"index.html\");\n if (!response.ok) throw new Error(`Failed to fetch notice version: ${response.status} ${response.statusText}`);\n const text = await response.text();\n const version = parseNoticeVersion(text);\n if (version == null) throw new Error(\"Unable to locate notice version in drednot page\");\n return version;\n}\n\nexport async function resolveServer(server, baseUrl = DEFAULT_BASE_URL) {\n if (server && typeof server === \"object\") return server;\n const id = Number(server);\n const servers = await fetchServers(baseUrl);\n return servers.find((item) => item.index === id) || null;\n}\n\nexport function serverId(server) {\n if (server && typeof server === \"object\") return Number(server.index ?? server.id);\n return Number(server);\n}\n\nfunction parseGameVersion(text) {\n return text.match(/Object\\.defineProperty\\(exports,\"GAME_VERSION\",\\{enumerable:true,get:\\(\\)=>e\\}\\);const e=\"([^\"]+)\"/)?.[1] || null;\n}\n\nfunction parseNoticeVersion(text) {\n const moduleMatch = text.match(/Object\\.defineProperty\\(exports,\"checkNotice\"[\\s\\S]{0,8000}?setCookie\\)\\(\"notice_version\",([A-Za-z_$][\\w$]*)\\)/);\n if (moduleMatch) {\n const constant = moduleMatch[1];\n const prefix = text.slice(Math.max(0, moduleMatch.index - 1000), moduleMatch.index + moduleMatch[0].length);\n const constantMatch = prefix.match(new RegExp(`const\\\\s+${constant}\\\\s*=\\\\s*(\\\\d+)\\\\s*;`));\n if (constantMatch) return Number(constantMatch[1]);\n }\n\n const patterns = [\n /notice_version[\"']?\\s*[:=]\\s*[\"']?(\\d+)/i,\n /noticeVersion[\"']?\\s*[:=]\\s*[\"']?(\\d+)/i,\n /NOTICE_VERSION[\"']?\\s*[:=]\\s*[\"']?(\\d+)/,\n /notice[^0-9]{0,40}version[^0-9]{0,20}(\\d+)/i\n ];\n for (const pattern of patterns) {\n const match = text.match(pattern);\n if (match) return Number(match[1]);\n }\n return null;\n}\n\nfunction parseServerInfo(text, baseUrl) {\n const host = hostName(baseUrl);\n const match = text.match(/const n=(true|false);const \\$=\"([^\"]+)\";const o=\"([^\"]+)\";const T=\"([^\"]+)\";const t=\"([^\"]+)\";const S=\\[([^\\]]+)\\];const c=\\[([^\\]]+)\\];const A=\"([^\"]+)\";const I=\"([^\"]+)\"/s);\n if (!match) return null;\n const [localDomain, baseDomain, testDomain, testGameDomain] = match.slice(2, 6);\n const domains = [...match[6].matchAll(/\"((?:[^\"\\\\]|\\\\.)*)\"/g)].map((m) => m[1]);\n const names = [...match[7].matchAll(/\"((?:[^\"\\\\]|\\\\.)*)\"/g)].map((m) => m[1]);\n const meta = {\n localDomain,\n baseDomain,\n testDomain,\n testGameDomain,\n masterDomain: match[8],\n testMasterDomain: match[9]\n };\n if (host === localDomain) return {mode: \"local\", servers: [server(0, localDomain, \"Local Test 1\")], meta};\n if (host === testDomain) return {mode: \"test\", servers: [server(0, testGameDomain, \"Public Test\")], meta};\n return {\n mode: \"production\",\n servers: domains.map((domain, index) => server(index, domain, names[index] || `Server ${index + 1}`)),\n meta\n };\n}\n\nasync function websocketText(data) {\n if (typeof data === \"string\") return data;\n if (data instanceof ArrayBuffer) return new TextDecoder().decode(data);\n if (ArrayBuffer.isView(data)) return new TextDecoder().decode(data);\n if (typeof data?.text === \"function\") return data.text();\n return String(data);\n}\nfunction server(index, domain, description) {\n return {index, domain, description};\n}\n", "import {DEFAULT_BASE_URL} from \"../constants.js\";\nimport {normalizeBaseUrl} from \"../runtime.js\";\nimport {cookieName} from \"./cookies.js\";\n\nexport class Connection {\n constructor(session, gameToken, netPort, serverId, server = null) {\n if (!session) throw new Error(\"Connection requires a session\");\n if (!gameToken && !session.ambientAuth) throw new Error(\"Connection requires a game token\");\n if (netPort == null) throw new Error(\"Connection requires a net port\");\n\n this.session = session;\n this.baseUrl = normalizeBaseUrl(session.baseUrl || DEFAULT_BASE_URL);\n this.gameToken = gameToken ? String(gameToken) : \"\";\n this.netPort = Number(netPort);\n this.server = serverId && typeof serverId === \"object\" ? serverId : server;\n this.serverId = Number(serverId && typeof serverId === \"object\" ? serverId.index ?? serverId.id : serverId);\n\n this.session.cookies?.set(cookieName(this.baseUrl, \"game_token\"), this.gameToken);\n }\n\n toJSON() {\n return {\n baseUrl: this.baseUrl,\n gameToken: this.gameToken,\n netPort: this.netPort,\n serverId: this.serverId,\n server: this.server,\n session: this.session?.toJSON?.() || this.session\n };\n }\n}\n", "import {INITIAL_OUTFIT_MESSAGE, JOIN_USER_AGENT, KEEPALIVE_INTERVAL_MS, KEEPALIVE_MESSAGE} from \"../constants.js\";\nimport {getWebSocket, isNode} from \"../runtime.js\";\nimport {EventBus} from \"../events.js\";\nimport {cookieHeader} from \"../network/cookies.js\";\nimport {fetchServers} from \"../network/servers.js\";\nimport {Connection} from \"../network/connection.js\";\nimport {itemEquipmentSlotFromId} from \"../state/items.js\";\nimport {WorldStore} from \"../state/world/index.js\";\nimport {buildBlueprintPlacementMessage} from \"../protocol/outbound/blueprint.js\";\nimport {buildChatMessage} from \"../protocol/outbound/chat.js\";\nimport {buildCommsMessage, normalizeCommsEvent} from \"../protocol/outbound/comms.js\";\nimport {buildSignedCommandPacket} from \"../protocol/outbound/commands.js\";\nimport {buildInventoryDragCommand, normalizeEquipmentSlot, normalizeInventoryEvent} from \"../protocol/outbound/inventory.js\";\nimport {\n buildBanPlayerMessage,\n buildDemoteSelfMessage,\n buildInviteResetMessage,\n buildKickPlayerMessage,\n buildPlayerListMessage,\n buildSetPlayerRankMessage,\n buildShipManagementMessage,\n buildShipPrivacyMessage,\n buildStarterRecoveryMessage,\n normalizeCaptainSubrank,\n normalizeShipConfig,\n normalizeShipPlayerList\n} from \"../protocol/outbound/ship-management.js\";\nimport {buildSignTextMessage} from \"../protocol/outbound/sign.js\";\nimport {\n buildCargoEjectorClipboardDirectionData,\n buildCargoEjectorCopyConfigData,\n buildCargoEjectorDirectionData,\n buildCargoEjectorPasteConfigData,\n buildCargoHatchCopyConfigData,\n buildCargoHatchFilterConfigData,\n buildCargoHatchFilterItemsData,\n buildCargoHatchFullConfigData,\n buildClipboardConfigData,\n buildClipboardFixedAngleData,\n buildExpandoClipboardAngleData,\n buildGeneratorClipboardDirectionData,\n buildGeneratorMazePuzzleData,\n buildLoaderClipboardConfigData,\n buildLoaderConfigData,\n buildLoaderCopyConfigData,\n buildLoaderFilterConfigData,\n buildLoaderFilterItemsData,\n buildLoaderFullConfigData,\n buildNavigationUnitClipboardConfigData,\n buildNavigationUnitConfigData,\n buildNavigationUnitPasteConfigData,\n buildPusherConfigData,\n buildPusherFilterItemsData\n} from \"../protocol/outbound/ui-config.js\";\nimport {cloneCommand, encodeMsgpack} from \"../protocol/codec/msgpack.js\";\nimport {decodeIncomingFrame} from \"../protocol/inbound/frame.js\";\nimport {\n ClientNetDomain,\n ClientDebugDomain,\n PlayerDomain,\n ShipManagementDomain,\n InventoryDomain,\n WorldDomain,\n ShipDomain,\n OverworldDomain,\n EntityHandle,\n WrenchMode,\n TurretMode,\n normalizeAttachMode,\n normalizeScannerResultPacket,\n normalizeShipReadOptions,\n shipReadSummary,\n currentPlayerSummary,\n summariesFor,\n entitySnapshotFor,\n emptyMachineSummary,\n normalizeDegrees,\n normalizeLauncherPower,\n normalizeWrenchMode,\n normalizeTurretMode,\n normalizePositiveFinite,\n normalizePositiveInteger\n} from \"./domains/index.js\";\n\nexport {WrenchMode, TurretMode} from \"./domains/index.js\";\n\n// Defaults for retained history. Every one of these buffers was previously\n// unbounded; the surrounding buffers (chat, warnings, scanner results) already\n// capped at 200, so these match that convention.\nconst DEFAULT_PACKET_HISTORY = 200;\nconst DEFAULT_EVENT_HISTORY = 200;\nconst DEFAULT_MODEL_PACKET_HISTORY = 100;\nconst DEFAULT_CHUNK_HISTORY = 64;\n\nfunction normalizeHistoryLimit(value, fallback) {\n if (value === Infinity) return Infinity;\n const limit = Number(value);\n if (!Number.isFinite(limit) || limit < 0) return fallback;\n return Math.floor(limit);\n}\n\nexport class DredlessClient extends EventBus {\n constructor(connection, {\n connect = true,\n attach = false,\n mode = null,\n baseUrl = null,\n session = null,\n serverId = null,\n server = null,\n netPort = null,\n gameToken = \"\",\n packetHistory = DEFAULT_PACKET_HISTORY,\n eventHistory = DEFAULT_EVENT_HISTORY,\n modelPacketHistory = DEFAULT_MODEL_PACKET_HISTORY,\n chunkHistory = DEFAULT_CHUNK_HISTORY\n } = {}) {\n super();\n const attachMode = attach ? normalizeAttachMode(mode) : null;\n if (!(connection instanceof Connection) && !attachMode) throw new Error(\"DredlessClient requires a Connection\");\n\n this.connection = connection || null;\n this.session = connection?.session ?? session ?? null;\n this.baseUrl = connection?.baseUrl ?? baseUrl ?? this.session?.baseUrl ?? null;\n this.serverId = connection?.serverId ?? serverId ?? server?.index ?? null;\n this.server = connection?.server ?? server ?? null;\n this.netPort = connection?.netPort ?? netPort ?? null;\n this.gameToken = connection?.gameToken ?? gameToken ?? \"\";\n this.ws = null;\n this.sid = null;\n this.connected = false;\n this.ready = false;\n this.packetCount = 0;\n this.lastPacket = null;\n this.packets = [];\n // Retained history is bounded by default: these arrays previously grew for\n // the lifetime of the client, holding every decoded packet and its binary\n // payloads. Pass 0 to disable a buffer or Infinity to restore unbounded\n // capture behaviour.\n this.packetHistory = normalizeHistoryLimit(packetHistory, DEFAULT_PACKET_HISTORY);\n this.worlds = new WorldStore({eventHistory, modelPacketHistory, chunkHistory});\n this.net = new ClientNetDomain(this);\n this.debug = new ClientDebugDomain(this);\n this.player = new PlayerDomain(this);\n this.inventory = new InventoryDomain(this);\n this.management = new ShipManagementDomain(this);\n this.cpuLoad = null;\n this.inventoryState = normalizeInventoryEvent({type: \"inventory\", general_slots: 5});\n this.puiPanels = new Map();\n this.commsPanels = new Map();\n this.currentCommsPanel = null;\n this.warnings = [];\n this.effects = [];\n this.chat = [];\n this.motd = [];\n this.sessionMessages = [];\n this.scannerResults = [];\n this.lastScannerResult = null;\n this.shipConfig = null;\n this.captainSubrank = null;\n this.playerList = null;\n this.outfits = new Map();\n this.commandAcks = new Map();\n this.lastCommandAck = null;\n this.decodeErrors = [];\n this.readyPromise = new Promise((resolve, reject) => {\n this.#resolveReady = resolve;\n this.#rejectReady = reject;\n });\n\n this.attachMode = attachMode;\n this.attached = Boolean(attachMode);\n if (connect) this.#connect().catch((error) => this.#fail(error));\n }\n\n static attachWebSocket(websocket, options = {}) {\n if (!websocket) throw new Error(\"DredlessClient.attachWebSocket requires a websocket\");\n const mode = normalizeAttachMode(options.mode);\n const client = new DredlessClient(null, {...options, attach: true, connect: false, mode});\n client.#attachSocket(websocket, {...options, mode});\n return client;\n }\n\n #commandNumber = 1;\n #queuedCommands = [];\n #queuedMessages = [];\n #keepalive = null;\n #bootstrapped = false;\n #ownsSocket = true;\n #allowWrites = true;\n #attachedOpened = false;\n #resolveReady = null;\n #rejectReady = null;\n #inputSettings = {\n wrench_mode: 1,\n turret_mode: 0\n };\n\n whenReady() {\n return this.readyPromise;\n }\n\n send(command = {}) {\n this.#assertWritable();\n const normalized = cloneCommand({...this.#inputSettings, ...command});\n if (normalized.n == null) normalized.n = this.#commandNumber++;\n if (!this.sid) {\n this.#queuedCommands.push(normalized);\n return this;\n }\n this.ws.send(buildSignedCommandPacket(normalized, this.sid));\n this.emit(\"command\", normalized);\n return this;\n }\n\n sendMessage(message, {afterReady = true} = {}) {\n this.#assertWritable();\n if (!this.connected || (afterReady && !this.ready)) {\n this.#queuedMessages.push({message, afterReady});\n return this;\n }\n this.ws.send(encodeMsgpack(message));\n this.emit(\"message\", message);\n return this;\n }\n\n sendRaw(message, options = {}) {\n return this.sendMessage(message, options);\n }\n\n sendBlueprintPlacement(placement) {\n return this.sendMessage(buildBlueprintPlacementMessage(placement));\n }\n\n setOutfit(outfit) {\n return this.sendMessage({type: 7, outfit});\n }\n\n sendShipManagement(act, arg = null) {\n return this.sendMessage(buildShipManagementMessage(act, arg));\n }\n\n requestPlayerList() {\n return this.sendMessage(buildPlayerListMessage());\n }\n\n resetInvite() {\n return this.sendMessage(buildInviteResetMessage());\n }\n\n setShipPrivacy(privacy) {\n return this.sendMessage(buildShipPrivacyMessage(privacy));\n }\n\n recoverStarterItem(itemId) {\n return this.sendMessage(buildStarterRecoveryMessage(itemId));\n }\n\n setPlayerRank(refId, rank) {\n return this.sendMessage(buildSetPlayerRankMessage(refId, rank));\n }\n\n promotePlayerToCaptain(refId) {\n return this.setPlayerRank(refId, \"captain\");\n }\n\n demotePlayerToCrew(refId) {\n return this.setPlayerRank(refId, \"crew\");\n }\n\n demotePlayerToGuest(refId) {\n return this.setPlayerRank(refId, \"guest\");\n }\n\n kickPlayer(refId) {\n return this.sendMessage(buildKickPlayerMessage(refId));\n }\n\n banPlayer(refId) {\n return this.sendMessage(buildBanPlayerMessage(refId));\n }\n\n demoteSelf() {\n return this.sendMessage(buildDemoteSelfMessage());\n }\n\n sendEntityCommand(cmd, args = [-1, -1, -1]) {\n return this.sendMessage({type: 5, cmd, args});\n }\n\n sendChatMessage(message = \"\") {\n return this.sendMessage(buildChatMessage(message));\n }\n\n sendCommsMessage(message = \"\") {\n return this.sendMessage(buildCommsMessage(message));\n }\n\n sendFabricatorMessage(cmd, args = [-1, -1, -1]) {\n return this.sendEntityCommand(cmd, args);\n }\n\n sendFabricatorCommand(itemId, count = 1, index = -1) {\n return this.craftAdd(itemId, count, index);\n }\n\n craftAdd(itemId, count = 1, index = -1) {\n return this.sendFabricatorMessage(\"craft_add\", [itemId, count, index]);\n }\n\n craftSub(itemId, count = 1, index = 0) {\n return this.sendFabricatorMessage(\"craft_sub\", [itemId, count, index]);\n }\n\n craftClearQueue() {\n return this.sendFabricatorMessage(\"clear_queue\");\n }\n\n craftToggleRepeat() {\n return this.sendFabricatorMessage(\"toggle_repeat\");\n }\n\n fabricatorLockResource(row) {\n return this.sendFabricatorMessage(\"lock\", [row, -1, -1]);\n }\n\n fabricatorUnlockResource(row) {\n return this.sendFabricatorMessage(\"unlock\", [row, -1, -1]);\n }\n\n fabricatorEject(row) {\n return this.sendFabricatorMessage(\"eject\", [row, -1, -1]);\n }\n\n setLauncherAngle(angle) {\n return this.sendEntityCommand(\"angle\", [normalizeDegrees(angle)]);\n }\n\n setLauncherPower(power) {\n return this.sendEntityCommand(\"power\", [normalizeLauncherPower(power)]);\n }\n\n setSignText(text = \"\", mode = 0) {\n return this.sendMessage(buildSignTextMessage(text, mode));\n }\n\n sendUiConfig(data) {\n return this.sendMessage({type: 8, data});\n }\n\n solveGeneratorPuzzle(entity, solution) {\n return this.sendUiConfig(buildGeneratorMazePuzzleData(entity, solution));\n }\n\n sendPusherConfig(entity, config = {}) {\n return this.sendUiConfig(buildPusherConfigData(entity, this.#pusherConfigDefaults(entity, config)));\n }\n\n setPusherAngle(entity, angle, config = {}) {\n return this.sendPusherConfig(entity, {...config, angle});\n }\n\n setPusherSpeed(entity, speed, config = {}) {\n return this.sendPusherConfig(entity, {...config, speed});\n }\n\n setPusherLength(entity, length, config = {}) {\n return this.sendPusherConfig(entity, {...config, length});\n }\n\n setPusherMode(entity, mode, config = {}) {\n return this.sendPusherConfig(entity, {...config, mode});\n }\n\n setPusherFilteredMode(entity, filteredMode, config = {}) {\n return this.sendPusherConfig(entity, {...config, filteredMode});\n }\n\n setPusherFilterInventory(entity, filterInventory, config = {}) {\n return this.sendPusherConfig(entity, {...config, filterInventory});\n }\n\n setPusherFilterItems(entity, filterSlots = []) {\n return this.sendUiConfig(buildPusherFilterItemsData(entity, filterSlots));\n }\n\n sendLoaderConfig(entity, config = {}) {\n return this.sendUiConfig(buildLoaderConfigData(entity, this.#loaderConfigDefaults(entity, config)));\n }\n\n sendLoaderFullConfig(entity, config = {}) {\n return this.sendUiConfig(buildLoaderFullConfigData(entity, this.#loaderFullConfigDefaults(entity, config)));\n }\n\n copyLoaderConfig(entity, config = {}) {\n return this.sendUiConfig(buildLoaderCopyConfigData(this.#loaderFullConfigDefaults(entity, config)));\n }\n\n sendLoaderClipboardConfig(config = {}) {\n return this.sendUiConfig(buildLoaderClipboardConfigData(config));\n }\n\n sendClipboardConfig(target, commandName, values = []) {\n return this.sendUiConfig(buildClipboardConfigData(target, commandName, values));\n }\n\n setClipboardFixedAngle(target, direction) {\n return this.sendUiConfig(buildClipboardFixedAngleData(target, direction));\n }\n\n setGeneratorClipboardDirection(direction) {\n return this.sendUiConfig(buildGeneratorClipboardDirectionData(direction));\n }\n\n setExpandoClipboardAngle(angle) {\n return this.sendUiConfig(buildExpandoClipboardAngleData(angle));\n }\n\n setCargoEjectorDirection(entity, direction) {\n return this.sendUiConfig(buildCargoEjectorDirectionData(entity, direction));\n }\n\n pasteCargoEjectorConfig(entity, direction = \"right\") {\n return this.sendUiConfig(buildCargoEjectorPasteConfigData(entity, direction));\n }\n\n copyCargoEjectorConfig(entity, direction = \"right\") {\n return this.sendUiConfig(buildCargoEjectorCopyConfigData(direction));\n }\n\n setCargoEjectorClipboardDirection(direction) {\n return this.sendUiConfig(buildCargoEjectorClipboardDirectionData(direction));\n }\n\n setLoaderPickPlace(entity, pick, place, config = {}) {\n return this.sendLoaderConfig(entity, {...config, pick, place});\n }\n\n setLoaderPriority(entity, priority, config = {}) {\n return this.sendLoaderConfig(entity, {...config, priority});\n }\n\n setLoaderStack(entity, stack, config = {}) {\n return this.sendLoaderConfig(entity, {...config, stack});\n }\n\n setLoaderCycle(entity, cycle, config = {}) {\n return this.sendLoaderConfig(entity, {...config, cycle});\n }\n\n setLoaderRequireOutput(entity, requireOutput, config = {}) {\n return this.sendLoaderConfig(entity, {...config, requireOutput});\n }\n\n setLoaderWaitForStack(entity, waitForStack, config = {}) {\n return this.sendLoaderConfig(entity, {...config, waitForStack});\n }\n\n setLoaderFilterMode(entity, filterMode) {\n return this.sendUiConfig(buildLoaderFilterConfigData(entity, filterMode));\n }\n\n setLoaderFilterItems(entity, filterSlots = []) {\n return this.sendUiConfig(buildLoaderFilterItemsData(entity, filterSlots));\n }\n\n setCargoHatchFilterMode(entity, filterMode) {\n return this.sendUiConfig(buildCargoHatchFilterConfigData(entity, filterMode));\n }\n\n setCargoHatchFilterItems(entity, filterSlots = []) {\n return this.sendUiConfig(buildCargoHatchFilterItemsData(entity, filterSlots));\n }\n\n sendCargoHatchFullConfig(entity, config = {}) {\n return this.sendUiConfig(buildCargoHatchFullConfigData(entity, this.#cargoHatchConfigDefaults(entity, config)));\n }\n\n pasteCargoHatchConfig(entity, config = {}) {\n return this.sendCargoHatchFullConfig(entity, config);\n }\n\n copyCargoHatchConfig(entity, config = {}) {\n return this.sendUiConfig(buildCargoHatchCopyConfigData(this.#cargoHatchConfigDefaults(entity, config)));\n }\n\n inputSettings() {\n return {\n wrenchMode: wrenchModeName(this.#inputSettings.wrench_mode),\n turretMode: turretModeName(this.#inputSettings.turret_mode),\n viewWidth: this.#inputSettings.vx ?? null,\n viewHeight: this.#inputSettings.vy ?? null,\n screenWidth: this.#inputSettings.scr_w ?? null,\n screenHeight: this.#inputSettings.scr_h ?? null\n };\n }\n\n setInputSettings(settings = {}, {send = true} = {}) {\n const wrench = settings.wrenchMode;\n const turret = settings.turretMode;\n const viewWidth = settings.viewWidth;\n const viewHeight = settings.viewHeight;\n const screenWidth = settings.screenWidth;\n const screenHeight = settings.screenHeight;\n if (wrench != null) this.#inputSettings.wrench_mode = normalizeWrenchMode(wrench);\n if (turret != null) this.#inputSettings.turret_mode = normalizeTurretMode(turret);\n if (viewWidth != null) this.#inputSettings.vx = normalizePositiveFinite(viewWidth, \"viewWidth\");\n if (viewHeight != null) this.#inputSettings.vy = normalizePositiveFinite(viewHeight, \"viewHeight\");\n if (screenWidth != null) this.#inputSettings.scr_w = normalizePositiveInteger(screenWidth, \"screenWidth\");\n if (screenHeight != null) this.#inputSettings.scr_h = normalizePositiveInteger(screenHeight, \"screenHeight\");\n return send ? this.send({}) : this;\n }\n\n setView(width, height, options = {}) {\n return this.setInputSettings({viewWidth: width, viewHeight: height}, options);\n }\n\n setScreenSize(width, height, options = {}) {\n return this.setInputSettings({screenWidth: width, screenHeight: height}, options);\n }\n\n setWrenchMode(mode, options = {}) {\n return this.setInputSettings({wrenchMode: mode}, options);\n }\n\n setWrenchAction(mode, options = {}) {\n return this.setWrenchMode(mode, options);\n }\n\n setTurretMode(mode, options = {}) {\n return this.setInputSettings({turretMode: mode}, options);\n }\n\n sendNavigationUnitConfig(entity, config = {}) {\n return this.sendUiConfig(buildNavigationUnitConfigData(entity, this.#navigationUnitConfigDefaults(entity, config)));\n }\n\n copyNavigationUnitConfig(entity, config = {}) {\n return this.sendUiConfig(buildNavigationUnitClipboardConfigData(this.#navigationUnitConfigDefaults(entity, config)));\n }\n\n pasteNavigationUnitConfig(entity, config = {}) {\n return this.sendUiConfig(buildNavigationUnitPasteConfigData(entity, this.#navigationUnitConfigDefaults(entity, config)));\n }\n\n setNavigationDestination(entity, destination, config = {}) {\n return this.sendNavigationUnitConfig(entity, {...config, destination});\n }\n\n setNavigationAutoWarp(entity, config = {}) {\n return this.sendNavigationUnitConfig(entity, {page: 1, ...config});\n }\n\n startWarp(entity, config = {}) {\n return this.sendNavigationUnitConfig(entity, {page: 1, ...config, warp: \"start\"});\n }\n\n cancelWarp(entity, config = {}) {\n return this.sendNavigationUnitConfig(entity, {page: 1, ...config, warp: \"cancel\"});\n }\n\n move(x = 0, y = 0, command = {}) {\n return this.send({...command, x, y});\n }\n\n aim(mx = 0, my = 0, command = {}) {\n return this.send({...command, mx, my});\n }\n\n action(flags = {}, command = {}) {\n return this.send({...command, ...flags});\n }\n\n useEntity(entity, {invSlot = 0, hold = true} = {}, command = {}) {\n return this.send({\n ...command,\n focus_ent: entity,\n inv_slot: invSlot,\n act1: true,\n act1_held: Boolean(hold)\n });\n }\n\n useHeldItem({invSlot = 0, hold = true} = {}, command = {}) {\n return this.send({\n ...command,\n focus_ent: null,\n inv_slot: invSlot,\n act1: true,\n act1_held: Boolean(hold)\n });\n }\n\n placeHeldItem(options = {}, command = {}) {\n return this.useHeldItem(options, command);\n }\n\n placeBlueprint(placement, {invSlot = 0, hold = true, mx = null, my = null} = {}, command = {}) {\n const message = buildBlueprintPlacementMessage(placement);\n this.sendMessage(message);\n return this.placeHeldItem(\n {invSlot, hold},\n {\n ...command,\n mx: mx ?? message.x,\n my: my ?? message.y\n }\n );\n }\n\n rotateHeldItem({invSlot = 0, hold = true} = {}, command = {}) {\n return this.send({\n ...command,\n focus_ent: null,\n inv_slot: invSlot,\n act_alt: true,\n act_alt_held: Boolean(hold)\n });\n }\n\n\n close(code = 1000, reason = \"client\") {\n if (!this.#allowWrites) return this;\n try {\n this.ws?.close(code, reason);\n } catch (_) {\n }\n return this;\n }\n\n disconnect(code = 1000, reason = \"client\") {\n return this.close(code, reason);\n }\n\n snapshot({includeTiles = false, includeModel = false} = {}) {\n return {\n baseUrl: this.baseUrl,\n session: this.session?.toJSON?.() || this.session,\n connection: this.connection?.toJSON?.() || null,\n attachMode: this.attachMode,\n serverId: this.serverId,\n server: this.server,\n netPort: this.netPort,\n sid: this.sid,\n ready: this.ready,\n connected: this.connected,\n currentWorldId: this.worlds.currentWorldId,\n worlds: this.worlds.snapshot({includeTiles, includeModel}),\n cpuLoad: this.cpuLoad,\n inventory: this.inventoryState,\n puiPanels: [...this.puiPanels.values()],\n commsPanels: [...this.commsPanels.values()],\n currentCommsPanel: this.currentCommsPanel,\n warnings: this.warnings.slice(-50),\n effects: this.effects.slice(-50),\n chat: this.chat.slice(-50),\n motd: this.motd.slice(-20),\n sessionMessages: this.sessionMessages.slice(-50),\n scannerResults: this.scannerResults.slice(-20),\n lastScannerResult: this.lastScannerResult,\n shipConfig: this.shipConfig,\n captainSubrank: this.captainSubrank,\n playerList: this.playerList,\n outfits: [...this.outfits.entries()].map(([sid, outfit]) => ({sid, outfit})),\n commandAcks: [...this.commandAcks.entries()].map(([world, commandNumber]) => ({world, commandNumber})),\n lastCommandAck: this.lastCommandAck,\n decodeErrors: this.decodeErrors.slice(-50),\n packetCount: this.packetCount,\n lastPacket: this.lastPacket\n };\n }\n\n state(options = {}) {\n return this.snapshot(options);\n }\n\n world(id) {\n const world = this.worlds.worlds.get(Number(id)) || null;\n return world ? new WorldDomain(this, world.id) : null;\n }\n\n overworld() {\n const world = this.worlds.overworld();\n return world ? new OverworldDomain(this, world.id) : null;\n }\n\n currentShip() {\n const world = this.worlds.shipWorld();\n return world ? new ShipDomain(this, world.id) : null;\n }\n\n shipWorld(options = {}) {\n return this.worlds.shipWorld()?.snapshot(options) || null;\n }\n\n ship() {\n return this.currentShip();\n }\n\n shipEntity() {\n return this.worlds.currentShipEntity();\n }\n\n currentPlayerEntity() {\n const player = currentPlayerSummary(this);\n return player ? new EntityHandle(this, player.entity, \"current\") : null;\n }\n\n entities(scope = \"ship\") {\n return summariesFor(this, scope).map(entitySnapshotFor);\n }\n\n entity(entityId, scope = \"ship\") {\n const summary = this.#readWorld(scope)?.entity(entityId) || null;\n return entitySnapshotFor(summary);\n }\n\n blocks(scope = \"ship\") {\n return this.#readWorld(scope)?.blocks() || [];\n }\n\n materials(scope = \"ship\") {\n return this.#readWorld(scope)?.materials() || [];\n }\n\n machines(scope = \"ship\") {\n return this.#readWorld(scope)?.model.machines() || emptyMachineSummary();\n }\n\n players(scope = \"ship\") {\n return this.#readWorld(scope)?.model.players() || [];\n }\n\n shipControls(scope = \"overworld\") {\n return this.#readWorld(scope)?.model.shipControls() || [];\n }\n\n ships(options = {}) {\n const normalized = normalizeShipReadOptions(options);\n const overworld = this.worlds.overworld();\n if (!overworld) return [];\n // Resolve the reference entity once rather than per ship.\n const current = this.worlds.currentShipEntity();\n const ships = overworld.entities()\n .filter((entity) => entity?.contents?.shipControl)\n .map((entity) => shipReadSummary(entity, normalized, this.worlds, current));\n if (normalized.sort === \"distance\") {\n ships.sort((a, b) => (a.distance ?? Number.POSITIVE_INFINITY) - (b.distance ?? Number.POSITIVE_INFINITY));\n }\n return ships;\n }\n\n shipByHex(hexCode, options = {}) {\n const normalized = String(hexCode ?? \"\").toUpperCase();\n return this.#findShip(options, (control) => String(control.hexCode ?? \"\").toUpperCase() === normalized);\n }\n\n shipByEntity(entityId, options = {}) {\n const id = Number(entityId);\n return this.#findShip(options, (control, entity) => entity.entity === id);\n }\n\n // Match against the ship control record and summarise only the hit. These\n // lookups used to build a full summary -- including a world snapshot -- for\n // every ship in the overworld before discarding all but one.\n #findShip(options, predicate) {\n const overworld = this.worlds.overworld();\n if (!overworld) return null;\n for (const entity of overworld.entities()) {\n const control = entity?.contents?.shipControl;\n if (!control || !predicate(control, entity)) continue;\n return shipReadSummary(entity, normalizeShipReadOptions(options), this.worlds);\n }\n return null;\n }\n\n get packetsRaw() {\n return this.packets.slice();\n }\n\n async #connect() {\n if (!this.server) {\n const servers = await fetchServers(this.baseUrl);\n this.server = servers.find((server) => server.index === this.serverId) || null;\n }\n if (!this.server?.domain) throw new Error(`Unable to resolve game server ${this.serverId}`);\n\n const WebSocket = await getWebSocket();\n const wsUrl = `wss://${this.server.domain}:${this.netPort}`;\n this.ws = this.#openSocket(WebSocket, wsUrl, this.#wsHeaders());\n this.ws.binaryType = \"arraybuffer\";\n this.#ownsSocket = true;\n this.#allowWrites = true;\n this.#bindSocket();\n }\n\n #attachSocket(websocket, {connected = null, ready = false, sid = null, mode = \"observe\"} = {}) {\n this.ws = websocket;\n this.attachMode = normalizeAttachMode(mode);\n this.#ownsSocket = this.attachMode === \"bootstrap\";\n this.#allowWrites = this.attachMode !== \"readonly\";\n try {\n this.ws.binaryType = \"arraybuffer\";\n } catch (_) {\n }\n if (sid != null) this.sid = sid >>> 0;\n this.connected = connected ?? this.#socketLooksOpen(websocket);\n if (ready) {\n this.ready = true;\n if (this.#ownsSocket) {\n this.#sendBootstrap();\n this.#startKeepalive();\n }\n if (this.#allowWrites) {\n this.#flushMessages();\n this.#flushCommands();\n }\n this.#resolveReady?.(this);\n this.#resolveReady = null;\n }\n this.#bindAttachedSocket();\n if (this.connected && this.#ownsSocket) this.#attachedOpen();\n this.emit(\"attach\", this);\n }\n\n #bindSocket() {\n this.ws.onopen = () => {\n this.connected = true;\n this.ws.send(encodeMsgpack({type: 1}));\n this.emit(\"open\", this);\n this.#flushMessages();\n };\n\n this.ws.onmessage = (event) => this.#handleSocketMessage(event.data);\n this.ws.onerror = (event) => this.#fail(event?.error || new Error(\"WebSocket error\"));\n this.ws.onclose = (event) => this.#handleSocketClose(event);\n }\n\n #bindAttachedSocket() {\n const open = () => this.#attachedOpen();\n const message = (event) => this.#handleSocketMessage(event?.data ?? event);\n const error = (event) => this.#fail(event?.error || new Error(\"WebSocket error\"));\n const close = (event) => this.#handleSocketClose(event);\n\n if (typeof this.ws.addEventListener === \"function\") {\n this.ws.addEventListener(\"open\", open);\n this.ws.addEventListener(\"message\", message);\n this.ws.addEventListener(\"error\", error);\n this.ws.addEventListener(\"close\", close);\n return;\n }\n if (typeof this.ws.on === \"function\") {\n this.ws.on(\"open\", open);\n this.ws.on(\"message\", (data) => this.#handleMessage(data));\n this.ws.on(\"error\", error);\n this.ws.on(\"close\", close);\n return;\n }\n const previousMessage = this.ws.onmessage;\n this.ws.onmessage = (event) => {\n if (typeof previousMessage === \"function\") previousMessage.call(this.ws, event);\n message(event);\n };\n }\n\n #attachedOpen() {\n this.connected = true;\n if (this.#attachedOpened) return;\n this.#attachedOpened = true;\n if (this.#ownsSocket) this.ws.send(encodeMsgpack({type: 1}));\n this.emit(\"open\", this);\n if (this.#allowWrites) this.#flushMessages();\n }\n\n #handleSocketClose(event) {\n this.connected = false;\n clearInterval(this.#keepalive);\n this.#keepalive = null;\n this.emit(\"close\", event);\n }\n\n #socketLooksOpen(websocket) {\n return websocket?.readyState == null || websocket.readyState === 1 || websocket.readyState === websocket.OPEN;\n }\n\n #assertWritable() {\n if (!this.#allowWrites) throw new Error(\"DredlessClient is attached in readonly mode\");\n }\n\n #handleSocketMessage(data) {\n if (data && typeof data.arrayBuffer === \"function\") {\n data.arrayBuffer()\n .then((buffer) => this.#handleMessage(buffer))\n .catch((error) => this.#fail(error));\n return;\n }\n this.#handleMessage(data);\n }\n\n #handleMessage(data) {\n let packet;\n try {\n packet = decodeIncomingFrame(data);\n } catch (error) {\n this.#fail(error);\n return;\n }\n this.packetCount += 1;\n this.lastPacket = packet;\n this.#pushLimited(this.packets, packet, this.packetHistory);\n this.emit(\"packet\", packet);\n\n if (!packet || typeof packet !== \"object\") return;\n try {\n if (packet.type === 21) return this.#markReady(packet);\n const worldUpdate = this.worlds.apply(packet);\n if (worldUpdate) {\n this.#handleWorldUpdate(worldUpdate);\n } else {\n this.#handlePacketEvent(packet);\n }\n } catch (error) {\n this.#recordDecodeError(error, packet);\n }\n }\n\n #markReady(packet) {\n this.sid = packet.sid >>> 0;\n this.worlds.currentWorldId = packet.world ?? this.worlds.currentWorldId;\n this.ready = true;\n if (this.#ownsSocket) {\n this.#sendBootstrap();\n this.#startKeepalive();\n }\n if (this.#allowWrites) {\n this.#flushMessages();\n this.#flushCommands();\n }\n this.#resolveReady?.(this);\n this.#resolveReady = null;\n this.emit(\"ready\", this);\n }\n\n #sendBootstrap() {\n if (this.#bootstrapped || !this.connected || !this.sid) return;\n this.#bootstrapped = true;\n this.ws.send(encodeMsgpack(INITIAL_OUTFIT_MESSAGE));\n this.emit(\"bootstrap\", INITIAL_OUTFIT_MESSAGE);\n }\n\n #startKeepalive() {\n if (this.#keepalive) return;\n const payload = encodeMsgpack(KEEPALIVE_MESSAGE);\n this.#keepalive = setInterval(() => {\n if (this.connected) this.ws.send(payload);\n }, KEEPALIVE_INTERVAL_MS);\n }\n\n #flushCommands() {\n while (this.#queuedCommands.length) this.send(this.#queuedCommands.shift());\n }\n\n #flushMessages() {\n if (!this.connected) return;\n const pending = [];\n for (const item of this.#queuedMessages) {\n if (item.afterReady && !this.ready) pending.push(item);\n else this.sendMessage(item.message, {afterReady: item.afterReady});\n }\n this.#queuedMessages = pending;\n }\n\n #handleWorldUpdate(worldUpdate) {\n this.emit(worldUpdate.type, worldUpdate);\n if (worldUpdate.type === \"world-removed\") {\n this.emit(\"world-removed\", worldUpdate.packet);\n return;\n }\n for (const error of worldUpdate.errors || []) this.#recordDecodeError(error, worldUpdate.packet, worldUpdate.world);\n\n const result = worldUpdate.result;\n if (result?.error) this.#recordDecodeError(result.error, worldUpdate.packet, worldUpdate.world);\n if (result?.model?.error) this.#recordDecodeError(result.model.error, worldUpdate.packet, worldUpdate.world);\n if (result?.timing?.cpuLoad != null) this.cpuLoad = result.timing.cpuLoad;\n if (result?.commandNumber != null) this.#ackCommand(result.worldId, result.commandNumber);\n for (const event of result?.events || []) this.#handleSideEvent(event, worldUpdate.world);\n }\n\n #handlePacketEvent(packet) {\n switch (packet.type) {\n case 14:\n if (packet.sid != null) this.outfits.set(packet.sid, packet.outfit);\n this.emit(\"outfit\", packet);\n break;\n case 15:\n this.lastScannerResult = normalizeScannerResultPacket(packet);\n this.#pushLimited(this.scannerResults, this.lastScannerResult);\n this.emit(\"scanner-result\", this.lastScannerResult, packet);\n break;\n case 18:\n this.cpuLoad = packet.cpu_load ?? null;\n this.emit(\"cpu\", packet);\n break;\n case 24:\n this.#pushLimited(this.chat, packet);\n this.emit(\"chat\", packet);\n break;\n case 25:\n this.#pushLimited(this.sessionMessages, packet);\n this.#handleSessionSubmessage(packet);\n this.emit(\"session\", packet);\n break;\n case 26:\n this.#pushLimited(this.motd, packet);\n this.emit(\"motd\", packet);\n break;\n default:\n this.emit(\"event\", packet);\n break;\n }\n }\n\n #handleSessionSubmessage(packet) {\n const submessage = packet?.submessage;\n if (!submessage || typeof submessage !== \"object\") return;\n if (submessage.type === \"config\") {\n this.shipConfig = normalizeShipConfig(submessage);\n this.emit(\"ship-config\", this.shipConfig, packet);\n return;\n }\n if (submessage.type === \"captain_subrank\") {\n this.captainSubrank = normalizeCaptainSubrank(submessage);\n if (this.playerList) this.playerList = normalizeShipPlayerList({}, this.playerList, this.captainSubrank);\n this.emit(\"captain-subrank\", this.captainSubrank, packet);\n return;\n }\n if (submessage.type === \"player_list\") {\n this.playerList = normalizeShipPlayerList(submessage, this.playerList, this.captainSubrank);\n this.emit(\"player-list\", this.playerList, packet);\n }\n }\n\n #handleSideEvent(event, world) {\n if (!event || typeof event !== \"object\") return;\n if (event.type === \"inventory\") {\n this.inventoryState = normalizeInventoryEvent(event);\n this.emit(\"inventory\", this.inventoryState, world);\n return;\n }\n if (event.type === \"pui\") {\n const panel = {...event, world: world?.id ?? null};\n if (event.ent_id != null) this.puiPanels.set(event.ent_id, panel);\n this.emit(\"pui\", panel, world);\n return;\n }\n if (event.type === \"comms\") {\n const panel = {...normalizeCommsEvent(event), world: world?.id ?? null};\n if (panel.entity == null) {\n this.currentCommsPanel = null;\n this.commsPanels.clear();\n } else {\n this.currentCommsPanel = panel;\n this.commsPanels.set(panel.entity, panel);\n }\n this.emit(\"comms\", panel, world);\n return;\n }\n if (event.type === \"tip_warn\") {\n this.#pushLimited(this.warnings, event);\n this.emit(\"tip_warn\", event, world);\n return;\n }\n if (event.type === \"sfx\") {\n this.#pushLimited(this.effects, event);\n this.emit(\"sfx\", event, world);\n return;\n }\n this.emit(\"side-event\", event, world);\n }\n\n #ackCommand(worldId, commandNumber) {\n this.commandAcks.set(Number(worldId), commandNumber);\n if (commandNumber >= 0 && (this.lastCommandAck == null || commandNumber > this.lastCommandAck.commandNumber)) {\n this.lastCommandAck = {world: Number(worldId), commandNumber};\n this.emit(\"ack\", this.lastCommandAck);\n }\n }\n\n #pushLimited(target, value, limit = 200) {\n if (limit === 0) return;\n target.push(value);\n if (target.length > limit) target.splice(0, target.length - limit);\n }\n\n #recordDecodeError(error, packet = null, world = null) {\n const entry = {\n time: Date.now(),\n message: error?.message || String(error),\n packetType: packet && typeof packet === \"object\" ? packet.type ?? null : null,\n world: world?.id ?? (packet && typeof packet === \"object\" ? packet.world ?? null : null)\n };\n this.#pushLimited(this.decodeErrors, entry);\n try {\n this.emit(\"decode-error\", entry, error, packet, world);\n } catch (_) {\n }\n }\n\n #wsHeaders() {\n const headers = {\n origin: this.baseUrl,\n cookie: this.session ? cookieHeader(this.baseUrl, this.session) : \"\"\n };\n if (isNode()) {\n Object.assign(headers, {\n \"user-agent\": JOIN_USER_AGENT,\n accept: \"*/*\",\n \"accept-language\": \"en-US,en;q=0.9\",\n dnt: \"1\",\n \"sec-gpc\": \"1\",\n \"sec-fetch-dest\": \"empty\",\n \"sec-fetch-mode\": \"websocket\",\n \"sec-fetch-site\": \"same-site\",\n pragma: \"no-cache\",\n \"cache-control\": \"no-cache\"\n });\n }\n return headers;\n }\n\n #navigationUnitConfigDefaults(entity, config = {}) {\n const summary = this.entity(entity)?.contents?.navigationUnit || null;\n return {\n destination: config.destination ?? summary?.destination,\n page: config.page ?? 0,\n warp: config.warp ?? \"idle\",\n autoWarpOnShieldFailure: config.autoWarpOnShieldFailure ?? summary?.autoWarpOnShieldFailure ?? false,\n autoWarpOnNoCaptains: config.autoWarpOnNoCaptains ?? summary?.autoWarpOnNoCaptains ?? false\n };\n }\n\n #pusherConfigDefaults(entity, config = {}) {\n const summary = this.entity(entity)?.contents?.pusher || null;\n return {\n mode: config.mode ?? summary?.mode ?? 2,\n filteredMode: config.filteredMode ?? summary?.filteredMode ?? 0,\n angle: config.angle ?? summary?.angle ?? 0,\n speed: config.speed ?? summary?.speed ?? 20,\n filterInventory: config.filterInventory ?? summary?.filterInventory ?? false,\n length: config.length ?? summary?.length ?? 1000\n };\n }\n\n #loaderConfigDefaults(entity, config = {}) {\n const summary = this.entity(entity)?.contents?.loader || null;\n return {\n pick: config.pick ?? summary?.pick ?? 0,\n place: config.place ?? summary?.place ?? 2,\n priority: config.priority ?? summary?.priority ?? 0,\n stack: config.stack ?? summary?.stack ?? 16,\n cycle: config.cycle ?? summary?.cycle ?? 1,\n requireOutput: config.requireOutput ?? summary?.requireOutput ?? false,\n waitForStack: config.waitForStack ?? summary?.waitForStack ?? false\n };\n }\n\n #loaderFullConfigDefaults(entity, config = {}) {\n const summary = this.entity(entity)?.contents?.loader || null;\n return {\n ...this.#loaderConfigDefaults(entity, config),\n filterMode: config.filterMode ?? summary?.filterMode ?? 0,\n filterSlots: config.filterSlots ?? summary?.filterSlots ?? []\n };\n }\n\n #cargoHatchConfigDefaults(entity, config = {}) {\n const summary = this.entity(entity)?.contents?.cargoHatch || null;\n return {\n filterMode: config.filterMode ?? summary?.filterMode ?? 0,\n filterSlots: config.filterSlots ?? summary?.filterSlots ?? []\n };\n }\n\n #openSocket(WebSocket, url, headers) {\n if (!isNode()) return new WebSocket(url);\n try {\n return new WebSocket(url, {headers});\n } catch (_) {\n return new WebSocket(url);\n }\n }\n\n #readWorld(scope) {\n if (scope == null || scope === \"ship\" || scope === \"current\") return this.worlds.shipWorld();\n if (scope === \"overworld\") return this.worlds.overworld();\n if (typeof scope === \"number\" || typeof scope === \"string\") return this.worlds.worlds.get(Number(scope)) || null;\n return null;\n }\n\n #fail(error) {\n this.#rejectReady?.(error);\n this.#rejectReady = null;\n try {\n this.emit(\"error\", error);\n } catch (_) {\n }\n }\n}\n", "export class EventBus {\n #listeners = new Map();\n\n on(type, callback) {\n if (typeof callback !== \"function\") return this;\n if (!this.#listeners.has(type)) this.#listeners.set(type, new Set());\n this.#listeners.get(type).add(callback);\n return this;\n }\n\n off(type, callback) {\n this.#listeners.get(type)?.delete(callback);\n return this;\n }\n\n once(type, callback) {\n const wrapped = (...args) => {\n this.off(type, wrapped);\n callback(...args);\n };\n return this.on(type, wrapped);\n }\n\n emit(type, ...args) {\n const listeners = this.#listeners.get(type);\n if (!listeners || listeners.size === 0) return;\n // Copy only when there is more than one listener: the copy exists so a\n // listener may unsubscribe mid-dispatch, and a lone listener removing\n // itself cannot disturb an iteration that is already finishing.\n for (const callback of listeners.size === 1 ? listeners : [...listeners]) {\n try {\n callback(...args);\n } catch (error) {\n if (type === \"error\" || !this.#listeners.has(\"error\")) throw error;\n this.emit(\"error\", error);\n }\n }\n }\n}\n", "// Generated by scripts/update-item-schema.js from https://pub.drednot.io/prod/econ/item_schema.json. Do not edit manually.\n\nexport const ITEM_SCHEMA = Object.freeze([\n {\n \"id\": 1,\n \"name\": \"Iron\",\n \"desc\": \"Material. Used to produce most items.\",\n \"image\": \"item/res_iron\",\n \"rarity\": 0,\n \"max_stack\": 16\n },\n {\n \"id\": 2,\n \"name\": \"Explosives\",\n \"desc\": \"Material. Used to produce munitions.\",\n \"image\": \"item/res_explosives\",\n \"rarity\": 0,\n \"max_stack\": 16\n },\n {\n \"id\": 4,\n \"name\": \"Hyper Rubber\",\n \"desc\": \"Material. High Elasticity.\",\n \"image\": \"item/res_hyper_rubber\",\n \"rarity\": 2,\n \"max_stack\": 16\n },\n {\n \"id\": 5,\n \"name\": \"Flux Crystals\",\n \"desc\": \"Material. Used to produce advanced machinery.\",\n \"image\": \"item/res_flux_crystals\",\n \"rarity\": 2,\n \"max_stack\": 16\n },\n {\n \"id\": 6,\n \"name\": \"Thruster Fuel\",\n \"desc\": \"Refined fuel. Powers thrusters. More efficient than explosives.\",\n \"image\": \"item/fuel\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 30,\n \"input\": [\n {\n \"id\": 2,\n \"count\": 1\n }\n ],\n \"fabs\": [\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 49,\n \"name\": \"Compressed Explosives\",\n \"desc\": \"Explosives, compressed into a flux matrix at a 16:1 ratio. Unpack with a recycler.\",\n \"image\": \"item/comp_exp\",\n \"rarity\": 2,\n \"max_stack\": 16\n },\n {\n \"id\": 50,\n \"name\": \"Compressed Iron\",\n \"desc\": \"Iron, compressed into a flux matrix at a 24:1 ratio. Unpack with a recycler.\",\n \"image\": \"item/comp_iron\",\n \"rarity\": 2,\n \"max_stack\": 16\n },\n {\n \"id\": 51,\n \"name\": \"Volleyball\",\n \"desc\": \"\\ud83c\\udfd0\",\n \"image\": \"item/ball_volley\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 52,\n \"name\": \"Golden Volleyball\",\n \"desc\": \"\\ud83c\\udf1f\\ud83c\\udfd0\\ud83c\\udf1f\",\n \"image\": \"item/ball_vg\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 53,\n \"name\": \"Basketball\",\n \"desc\": \"\\ud83c\\udfc0\",\n \"image\": \"item/ball_basket\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 54,\n \"name\": \"Golden Basketball\",\n \"desc\": \"\\ud83c\\udf1f\\ud83c\\udfc0\\ud83c\\udf1f\",\n \"image\": \"item/ball_bg\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 55,\n \"name\": \"Beach Ball\",\n \"desc\": \"\\ud83c\\udf34\",\n \"image\": \"item/ball_beach\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 56,\n \"name\": \"Football\",\n \"desc\": \"\\u26bd\",\n \"image\": \"item/ball_soccer\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 100,\n \"name\": \"Wrench\",\n \"desc\": \"Used to take stuff apart.\",\n \"image\": \"item/wrench\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Starter\",\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 101,\n \"name\": \"Item Shredder\",\n \"desc\": \"Destroys items.\",\n \"image\": \"item/item_shredder\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Starter\",\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 102,\n \"name\": \"Golden Item Shredder\",\n \"desc\": \"Destroys items quickly, with style.\",\n \"image\": \"item/item_shredder_g\",\n \"rarity\": 9,\n \"max_stack\": 1\n },\n {\n \"id\": 103,\n \"name\": \"Repair Tool\",\n \"desc\": \"Used to repair blocks and objects.\",\n \"image\": \"item/repair_tool\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Starter\",\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 104,\n \"name\": \"Handheld Pusher\",\n \"desc\": \"A pusher you can hold in your hand.\",\n \"image\": \"item/pusher_hand\",\n \"rarity\": 2,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n },\n {\n \"id\": 5,\n \"count\": 16\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 105,\n \"name\": \"Ship Shield Booster\",\n \"desc\": \"An inferior power source for shield generators.\",\n \"image\": \"item/repairkit\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 3,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 2\n }\n ],\n \"fabs\": [\n \"Engineering\",\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 106,\n \"name\": \"Ship Embiggener\",\n \"desc\": \"Makes your ship bigger. Press R to change axis.\",\n \"image\": \"item/ship_embiggener\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 3,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Starter\",\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 107,\n \"name\": \"Ship Shrinkinator\",\n \"desc\": \"Makes your ship smaller. Space must be completely empty. Press R to change axis.\",\n \"image\": \"item/ship_shrinkinator\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 3,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 108,\n \"name\": \"Backpack\",\n \"desc\": \"Equipment (Back). Lets you hold more items.\",\n \"image\": \"item/eq_backpack\",\n \"rarity\": 1,\n \"max_stack\": 1\n },\n {\n \"id\": 109,\n \"name\": \"Speed Skates\",\n \"desc\": \"Equipment (Feet). SPEED.\",\n \"image\": \"item/eq_speed_skates\",\n \"rarity\": 2,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 20,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n },\n {\n \"id\": 4,\n \"count\": 4\n },\n {\n \"id\": 5,\n \"count\": 16\n }\n ],\n \"fabs\": [\n \"Equipment\"\n ]\n }\n },\n {\n \"id\": 110,\n \"name\": \"Booster Boots\",\n \"desc\": \"Equipment (Feet). Provides a double-jump and slightly more powerful jumps.\",\n \"image\": \"item/eq_booster_boots\",\n \"rarity\": 2,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 20,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n },\n {\n \"id\": 4,\n \"count\": 8\n },\n {\n \"id\": 5,\n \"count\": 16\n }\n ],\n \"fabs\": [\n \"Equipment\"\n ]\n }\n },\n {\n \"id\": 111,\n \"name\": \"Launcher Gauntlets\",\n \"desc\": \"Equipment (Hands). Throw items more powerfully.\",\n \"image\": \"item/eq_launcher_gauntlets\",\n \"rarity\": 2,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 20,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n },\n {\n \"id\": 4,\n \"count\": 8\n },\n {\n \"id\": 5,\n \"count\": 8\n }\n ],\n \"fabs\": [\n \"Equipment\"\n ]\n }\n },\n {\n \"id\": 112,\n \"name\": \"Construction Gauntlets\",\n \"desc\": \"Equipment (Hands). While in a safe zone: Doubles build/destruct/repair/use range and speed, and allows using objects through walls.\",\n \"image\": \"item/eq_construction_gauntlets\",\n \"rarity\": 2,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 20,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n },\n {\n \"id\": 4,\n \"count\": 4\n },\n {\n \"id\": 5,\n \"count\": 32\n }\n ],\n \"fabs\": [\n \"Equipment\"\n ]\n }\n },\n {\n \"id\": 113,\n \"name\": \"Rocket Pack\",\n \"desc\": \"Equipment (Back). Speedy Flight.\",\n \"image\": \"item/eq_rocket_pack\",\n \"rarity\": 2,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 20,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 16\n },\n {\n \"id\": 4,\n \"count\": 4\n },\n {\n \"id\": 5,\n \"count\": 32\n }\n ],\n \"fabs\": [\n \"Equipment\"\n ]\n }\n },\n {\n \"id\": 114,\n \"name\": \"Hover Pack\",\n \"desc\": \"Equipment (Back). Controlled Flight.\",\n \"image\": \"item/eq_hover_pack\",\n \"rarity\": 2,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 20,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 16\n },\n {\n \"id\": 4,\n \"count\": 4\n },\n {\n \"id\": 5,\n \"count\": 32\n }\n ],\n \"fabs\": [\n \"Equipment\"\n ]\n }\n },\n {\n \"id\": 115,\n \"name\": \"Manifest Scanner\",\n \"desc\": \"Generate a list of items on your ship.\",\n \"image\": \"item/scanner_manifest\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 116,\n \"name\": \"BoM Scanner\",\n \"desc\": \"Generate a list of materials used to build your ship.\",\n \"image\": \"item/scanner_bom\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 117,\n \"name\": \"Starter Wrench\",\n \"desc\": \"Useful for getting you out of a bind. Slow. Disappears if dropped.\",\n \"image\": \"item/wrench_starter\",\n \"rarity\": -1,\n \"max_stack\": 1\n },\n {\n \"id\": 118,\n \"name\": \"Starter Shredder\",\n \"desc\": \"Destroys items. Slow. Disappears if dropped.\",\n \"image\": \"item/item_shredder_starter\",\n \"rarity\": -1,\n \"max_stack\": 1\n },\n {\n \"id\": 119,\n \"name\": \"Hand Cannon\",\n \"desc\": \"[TEST EXCLUSIVE] A small, handheld cannon. Uses ammo in your inventory.\",\n \"image\": \"item/hand_cannon\",\n \"rarity\": 0,\n \"max_stack\": 1\n },\n {\n \"id\": 120,\n \"name\": \"Blueprint Scanner\",\n \"desc\": \"Generates blueprint strings, which describe how to rebuild ships or parts of ships. Click and drag to select a region.\",\n \"image\": \"item/scanner_blueprint\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 121,\n \"name\": \"Sandbox RCD\",\n \"desc\": \"Buildable. Used for automated construction. This test-exclusive variant can spawn items and doesn't need fuel. It works faster on ships owned by patrons.\",\n \"image\": \"item/rcd_sandbox\",\n \"rarity\": -1,\n \"max_stack\": 1\n },\n {\n \"id\": 122,\n \"name\": \"Flux RCD\",\n \"desc\": \"Buildable. Used for automated construction. Consumes flux as fuel.\",\n \"image\": \"item/rcd_flux\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 123,\n \"name\": \"Shield Core\",\n \"desc\": \"A power source for shield generators.\",\n \"image\": \"item/shield_core\",\n \"rarity\": 0,\n \"max_stack\": 1\n },\n {\n \"id\": 150,\n \"name\": \"Standard Ammo\",\n \"desc\": \"Regular bullets.\",\n \"image\": \"item/ammo_standard\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 4,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 1\n },\n {\n \"id\": 2,\n \"count\": 1\n }\n ],\n \"fabs\": [\n \"Starter\",\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 151,\n \"name\": \"ScatterShot Ammo\",\n \"desc\": \"Shoots multiple projectiles. Significant damage at close range, with knock-back.\",\n \"image\": \"item/ammo_scattershot\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 4,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 1\n },\n {\n \"id\": 2,\n \"count\": 1\n }\n ],\n \"fabs\": [\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 152,\n \"name\": \"Flak Ammo\",\n \"desc\": \"Explodes into more bullets in flight.\",\n \"image\": \"item/ammo_flak\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 4,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 1\n },\n {\n \"id\": 2,\n \"count\": 1\n }\n ],\n \"fabs\": [\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 153,\n \"name\": \"Sniper Ammo\",\n \"desc\": \"Speedy. Gains power from bouncing.\",\n \"image\": \"item/ammo_sniper\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 4,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 1\n },\n {\n \"id\": 2,\n \"count\": 1\n }\n ],\n \"fabs\": [\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 154,\n \"name\": \"Punch Ammo\",\n \"desc\": \"Pushes objects away.\",\n \"image\": \"item/ammo_punch\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 4,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 1\n },\n {\n \"id\": 2,\n \"count\": 1\n }\n ],\n \"fabs\": [\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 155,\n \"name\": \"Yank Ammo\",\n \"desc\": \"Pulls objects.\",\n \"image\": \"item/ammo_yank\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 4,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 1\n },\n {\n \"id\": 2,\n \"count\": 1\n }\n ],\n \"fabs\": [\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 156,\n \"name\": \"Slug Ammo\",\n \"desc\": \"Slow bullet. Gains speed and damage as it falls.\",\n \"image\": \"item/ammo_slug\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 4,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 1\n },\n {\n \"id\": 2,\n \"count\": 1\n }\n ],\n \"fabs\": [\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 157,\n \"name\": \"Trash Box\",\n \"desc\": \"Low quality, but free! Decays over time.\",\n \"image\": \"item/ammo_trash\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 3,\n \"input\": [],\n \"fabs\": [\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 159,\n \"name\": \"Booster Fuel (Low Grade)\",\n \"desc\": \"Increases thruster power for a short time.\",\n \"image\": \"item/booster_low\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 30,\n \"input\": [\n {\n \"id\": 2,\n \"count\": 16\n }\n ],\n \"fabs\": [\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 160,\n \"name\": \"Booster Fuel (High Grade)\",\n \"desc\": \"Increases thruster power for a short time.\",\n \"image\": \"item/booster_high\",\n \"rarity\": 2,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 4,\n \"time\": 30,\n \"input\": [\n {\n \"id\": 2,\n \"count\": 64\n },\n {\n \"id\": 5,\n \"count\": 1\n }\n ],\n \"fabs\": [\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 161,\n \"name\": \"Void Orb\",\n \"desc\": \"DO NOT EAT!\",\n \"image\": \"item/void_orb\",\n \"rarity\": 10,\n \"max_stack\": 1\n },\n {\n \"id\": 162,\n \"name\": \"Turret Booster - Rapid Fire\",\n \"desc\": \"Boosts a re-configurable turret's fire rate by 50%, with reduced accuracy.\",\n \"image\": \"item/turret_booster_rapid\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 163,\n \"name\": \"Turret Booster - Rapid Fire (Depleted)\",\n \"desc\": \"Boosts a re-configurable turret's fire rate by 25%, with reduced accuracy. Nearly depleted!\",\n \"image\": \"item/turret_booster_rapid_used\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 164,\n \"name\": \"Turret Booster - Preservation\",\n \"desc\": \"Boosts a re-configurable turret's ammo preservation by 10%, with reduced rotational aiming limits.\",\n \"image\": \"item/turret_booster_preservation\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 165,\n \"name\": \"Turret Booster - Preservation (Depleted)\",\n \"desc\": \"Boosts a re-configurable turret's ammo preservation by 5%, with reduced rotational aiming limits. Nearly depleted!\",\n \"image\": \"item/turret_booster_preservation_used\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 166,\n \"name\": \"Cooling Cell\",\n \"desc\": \"Prevents machine cannons from damaging themselves.\",\n \"image\": \"item/cooling_cell\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 234,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 167,\n \"name\": \"Cooling Cell (Hot)\",\n \"desc\": \"Will take some time to cool back down.\",\n \"image\": \"item/cooling_cell_hot\",\n \"rarity\": 0,\n \"max_stack\": 1\n },\n {\n \"id\": 168,\n \"name\": \"Burst Charge\",\n \"desc\": \"Power source for burst cannons. Overcharging cannons may result in damage!\",\n \"image\": \"item/burst_charge\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 2,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 215,\n \"name\": \"Helm (Packaged)\",\n \"desc\": \"Buildable. Used to pilot your ship.\",\n \"image\": \"item/helm\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 10,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 216,\n \"name\": \"Helm (Starter, Packaged)\",\n \"desc\": \"Buildable Starter Item. Used to pilot your ship.\",\n \"image\": \"item/helm_starter\",\n \"rarity\": -1,\n \"max_stack\": 1\n },\n {\n \"id\": 217,\n \"name\": \"Comms Station (Packaged)\",\n \"desc\": \"Buildable. Used to communicate with other ships.\",\n \"image\": \"item/comms\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 10,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 218,\n \"name\": \"Sign (Packaged)\",\n \"desc\": \"Buildable. Can display a short message.\",\n \"image\": \"item/sign\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 10,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 219,\n \"name\": \"Spawn Point (Packaged)\",\n \"desc\": \"Buildable. Can be set to spawn a specific rank.\",\n \"image\": \"item/spawn\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 10,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 220,\n \"name\": \"Door (Packaged)\",\n \"desc\": \"Buildable. Can be restricted to specific ranks. Press R to rotate.\",\n \"image\": \"item/door\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 10,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 221,\n \"name\": \"Cargo Hatch (Packaged)\",\n \"desc\": \"Buildable. Drops items picked up by the ship.\",\n \"image\": \"item/item_hatch\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 10,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 222,\n \"name\": \"Cargo Hatch (Starter, Packaged)\",\n \"desc\": \"Buildable Starter Item. Drops items picked up by the ship.\",\n \"image\": \"item/item_hatch_starter\",\n \"rarity\": -1,\n \"max_stack\": 1\n },\n {\n \"id\": 223,\n \"name\": \"Cargo Ejector (Packaged)\",\n \"desc\": \"Buildable. Ejects items from the ship.\",\n \"image\": \"item/item_ejector\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 10,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 224,\n \"name\": \"Turret Controller (Packaged)\",\n \"desc\": \"Buildable. Controls adjacent turrets.\",\n \"image\": \"item/turret_controller\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 10,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 226,\n \"name\": \"Cannon (Packaged)\",\n \"desc\": \"Buildable. A normal cannon that you can use to shoot at stuff.\",\n \"image\": \"item/turret_rc\",\n \"rarity\": 1,\n \"max_stack\": 1\n },\n {\n \"id\": 227,\n \"name\": \"Starter Cannon (Packaged)\",\n \"desc\": \"Buildable Starter Item. Slowly re-generates ammo when empty.\",\n \"image\": \"item/turret_rc_starter\",\n \"rarity\": -1,\n \"max_stack\": 1\n },\n {\n \"id\": 228,\n \"name\": \"Burst Cannon (Packaged)\",\n \"desc\": \"Buildable. Fires a burst of shots when supplied with burst charges. May damage itself.\",\n \"image\": \"item/turret_burst\",\n \"rarity\": 1,\n \"max_stack\": 1\n },\n {\n \"id\": 229,\n \"name\": \"Machine Cannon (Packaged)\",\n \"desc\": \"Buildable. A fully automatic gun that takes time to wind up. Requires cooling.\",\n \"image\": \"item/turret_auto\",\n \"rarity\": 1,\n \"max_stack\": 1\n },\n {\n \"id\": 230,\n \"name\": \"Thruster (Packaged)\",\n \"desc\": \"Buildable. Moves your ship. Fuelled with explosives.\",\n \"image\": \"item/thruster\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 10,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 231,\n \"name\": \"Thruster (Starter, Packaged)\",\n \"desc\": \"Buildable Starter Item. Moves your ship. Doesn't need fuel.\",\n \"image\": \"item/thruster_starter\",\n \"rarity\": -1,\n \"max_stack\": 1\n },\n {\n \"id\": 232,\n \"name\": \"Iron Block\",\n \"desc\": \"Buildable. Used for interior walls/floors.\",\n \"image\": \"item/block\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 2\n }\n ],\n \"fabs\": [\n \"Starter\",\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 233,\n \"name\": \"Hyper Rubber Block\",\n \"desc\": \"Buildable. Bouncy.\",\n \"image\": \"item/block_hrubber\",\n \"rarity\": 2,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 4,\n \"count\": 2\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 234,\n \"name\": \"Hyper Ice Block\",\n \"desc\": \"Buildable. Low-friction ice that can't melt for some reason.\",\n \"image\": \"item/block_sglass\",\n \"rarity\": 1,\n \"max_stack\": 16\n },\n {\n \"id\": 235,\n \"name\": \"Ladder\",\n \"desc\": \"Buildable. You can climb them.\",\n \"image\": \"item/ladder\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 2\n }\n ],\n \"fabs\": [\n \"Starter\",\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 236,\n \"name\": \"Walkway\",\n \"desc\": \"Buildable. Blocks players but not items.\",\n \"image\": \"item/walkway\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 2\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 237,\n \"name\": \"Item Net\",\n \"desc\": \"Buildable. Blocks items but not players.\",\n \"image\": \"item/item_net\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 2\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 239,\n \"name\": \"Paint\",\n \"desc\": \"Used to paint your ship's background. Hold R to select color.\",\n \"image\": \"item/color_panel\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 2\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 240,\n \"name\": \"Expando Box (Packaged)\",\n \"desc\": \"Buildable. Flexible bulk storage.\",\n \"image\": \"item/exbox\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 10,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 241,\n \"name\": \"Safety Anchor\",\n \"desc\": \"Buildable. Prevents teleports out of safe zones while placed.\",\n \"image\": \"item/anchor\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 20,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 16\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 242,\n \"name\": \"Pusher (Packaged)\",\n \"desc\": \"Buildable. Pushes things.\",\n \"image\": \"item/pusher\",\n \"rarity\": 2,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 10,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n },\n {\n \"id\": 5,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 243,\n \"name\": \"Item Launcher (Packaged)\",\n \"desc\": \"Buildable. Launches items at a configurable speed and angle.\",\n \"image\": \"item/item_launcher\",\n \"rarity\": 2,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 10,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n },\n {\n \"id\": 4,\n \"count\": 8\n },\n {\n \"id\": 5,\n \"count\": 8\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 244,\n \"name\": \"DEPRECATED ITEM\",\n \"desc\": \"DEPRECATED ITEM\",\n \"image\": \"item/loader_old\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 245,\n \"name\": \"Recycler (Packaged)\",\n \"desc\": \"Buildable. Converts items back into resources.\",\n \"image\": \"item/recycler\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 10,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 246,\n \"name\": \"Fabricator (Legacy, Packaged)\",\n \"desc\": \"Buildable. It doesn't do anything.\",\n \"image\": \"item/fabricator_legacy\",\n \"rarity\": 9,\n \"max_stack\": 1\n },\n {\n \"id\": 247,\n \"name\": \"Fabricator (Starter, Packaged)\",\n \"desc\": \"Buildable Starter Item. Used to craft basic items.\",\n \"image\": \"item/fabricator_starter\",\n \"rarity\": -1,\n \"max_stack\": 1\n },\n {\n \"id\": 248,\n \"name\": \"Fabricator (Munitions, Packaged)\",\n \"desc\": \"Buildable. Used to craft ammo and other consumables.\",\n \"image\": \"item/fabricator_munitions\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 20,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 16\n }\n ],\n \"fabs\": [\n \"Starter\",\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 249,\n \"name\": \"Fabricator (Engineering, Packaged)\",\n \"desc\": \"Buildable. Used to craft tools, blocks, and security items.\",\n \"image\": \"item/fabricator_engineering\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 20,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 16\n }\n ],\n \"fabs\": [\n \"Starter\",\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 250,\n \"name\": \"Fabricator (DEPRECATED, Packaged)\",\n \"desc\": \"DEPRECATED ITEM\",\n \"image\": \"item/fabricator_machine\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 20,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 16\n }\n ],\n \"fabs\": []\n }\n },\n {\n \"id\": 251,\n \"name\": \"Fabricator (Equipment, Packaged)\",\n \"desc\": \"Buildable. Used to craft wearable equipment.\",\n \"image\": \"item/fabricator_equipment\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 20,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 16\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 252,\n \"name\": \"Loader (Packaged)\",\n \"desc\": \"Buildable. Loads items into machines.\",\n \"image\": \"item/loader\",\n \"rarity\": 2,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 10,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 8\n },\n {\n \"id\": 5,\n \"count\": 2\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 253,\n \"name\": \"Lockdown Override Unit\",\n \"desc\": \"Buildable. Allows a limited number of green rarity items to be removed from a ship while in lockdown mode.\",\n \"image\": \"item/lockdown_override_green\",\n \"rarity\": 2,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 20,\n \"input\": [\n {\n \"id\": 5,\n \"count\": 64\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 254,\n \"name\": \"Annihilator Tile\",\n \"desc\": \"[TEST EXCLUSIVE] Buildable. Destroys objects.\",\n \"image\": \"item/annihilator_tile\",\n \"rarity\": 0,\n \"max_stack\": 16\n },\n {\n \"id\": 255,\n \"name\": \"Fluid Tank\",\n \"desc\": \"Buildable. Stores fluids.\",\n \"image\": \"item/tank\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 20,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 64\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 256,\n \"name\": \"Shield Generator\",\n \"desc\": \"Buildable. Generates shield fluid.\",\n \"image\": \"item/shield_generator\",\n \"rarity\": 1,\n \"max_stack\": 1\n },\n {\n \"id\": 257,\n \"name\": \"Shield Projector\",\n \"desc\": \"Buildable. Used to activate an adjacent bank of shield tanks.\",\n \"image\": \"item/shield_projector\",\n \"rarity\": 1,\n \"max_stack\": 1\n },\n {\n \"id\": 258,\n \"name\": \"Enhanced Turret Controller\",\n \"desc\": \"Buildable. Used to control turrets remotely.\",\n \"image\": \"item/turret_controller_new\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 259,\n \"name\": \"Bulk Ejector (Packaged)\",\n \"desc\": \"Buildable. WIP / UNOBTAINABLE\",\n \"image\": \"item/bulk_ejector\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 260,\n \"name\": \"Bulk Loading Bay Designator (Packaged)\",\n \"desc\": \"Buildable. WIP / UNOBTAINABLE\",\n \"image\": \"item/bulk_bay_marker\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 261,\n \"name\": \"Navigation Unit (Starter, Packaged)\",\n \"desc\": \"Buildable Starter Item. Used to select a destination zone and initiate emergency warps. Also functions as a simple shield projector.\",\n \"image\": \"item/nav_unit\",\n \"rarity\": -1,\n \"max_stack\": 1\n },\n {\n \"id\": 262,\n \"name\": \"Logistics Rail\",\n \"desc\": \"Buildable. Used by munitions supply units to deliver munitions.\",\n \"image\": \"item/logistics_rail\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 2\n }\n ],\n \"fabs\": [\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 263,\n \"name\": \"Acute Cannon (Packaged)\",\n \"desc\": \"Buildable. A gun with a limited firing angle, and a slightly improved fire-rate.\",\n \"image\": \"item/turret_acute\",\n \"rarity\": 1,\n \"max_stack\": 1\n },\n {\n \"id\": 264,\n \"name\": \"Munitions Supply Unit (Packaged)\",\n \"desc\": \"Buildable. Sends munitions to turrets via logistics rails.\",\n \"image\": \"item/msu\",\n \"rarity\": 1,\n \"max_stack\": 1\n },\n {\n \"id\": 265,\n \"name\": \"Obtuse Cannon (Packaged)\",\n \"desc\": \"Buildable. A gun which preserves ammo, and has a slightly reduced fire-rate.\",\n \"image\": \"item/turret_obtuse\",\n \"rarity\": 1,\n \"max_stack\": 1\n },\n {\n \"id\": 300,\n \"name\": \"Eternal Bronze Wrench\",\n \"desc\": \"Patron reward. Will not despawn. Thank you for your support! \\ud83d\\ude00\",\n \"image\": \"item/wrench_bronze_et\",\n \"rarity\": -1,\n \"max_stack\": 1\n },\n {\n \"id\": 301,\n \"name\": \"Eternal Silver Wrench\",\n \"desc\": \"Patron reward. Will not despawn. Thank you for your support! \\ud83d\\ude00\",\n \"image\": \"item/wrench_silver_et\",\n \"rarity\": -1,\n \"max_stack\": 1\n },\n {\n \"id\": 302,\n \"name\": \"Eternal Gold Wrench\",\n \"desc\": \"Patron reward. Will not despawn. Thank you for your support! \\ud83d\\ude00\",\n \"image\": \"item/wrench_gold_et\",\n \"rarity\": -1,\n \"max_stack\": 1\n },\n {\n \"id\": 303,\n \"name\": \"Eternal Flux Wrench\",\n \"desc\": \"Patron reward. Will not despawn. Thank you for your support! \\ud83d\\ude00\",\n \"image\": \"item/wrench_flux_et\",\n \"rarity\": -1,\n \"max_stack\": 1\n },\n {\n \"id\": 304,\n \"name\": \"Eternal Platinum Wrench\",\n \"desc\": \"Patron reward. Will not despawn. Thank you for your support! \\ud83d\\ude00\",\n \"image\": \"item/wrench_platinum_et\",\n \"rarity\": -1,\n \"max_stack\": 1\n },\n {\n \"id\": 305,\n \"name\": \"Gold Null Trophy\",\n \"desc\": \"RIP 0x items.\",\n \"image\": \"item/trophy_null\",\n \"rarity\": 9,\n \"max_stack\": 1\n },\n {\n \"id\": 306,\n \"name\": \"Bug Hunter Trophy\",\n \"desc\": \"Rewarded for reporting a serious problem.\",\n \"image\": \"item/trophy_bug\",\n \"rarity\": -1,\n \"max_stack\": 1\n },\n {\n \"id\": 307,\n \"name\": \"Silver Null Trophy\",\n \"desc\": \"RIP 0x items.\",\n \"image\": \"item/trophy_null_silver\",\n \"rarity\": 9,\n \"max_stack\": 1\n },\n {\n \"id\": 308,\n \"name\": \"Bronze Wrench\",\n \"desc\": \"Patron reward. Thank you for your support! \\ud83d\\ude00\",\n \"image\": \"item/wrench_bronze\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Starter\",\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 309,\n \"name\": \"Silver Wrench\",\n \"desc\": \"Patron reward. Thank you for your support! \\ud83d\\ude00\",\n \"image\": \"item/wrench_silver\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Starter\",\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 310,\n \"name\": \"Gold Wrench\",\n \"desc\": \"Patron reward. Thank you for your support! \\ud83d\\ude00\",\n \"image\": \"item/wrench_gold\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Starter\",\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 311,\n \"name\": \"Platinum Wrench\",\n \"desc\": \"Patron reward. Thank you for your support! \\ud83d\\ude00\",\n \"image\": \"item/wrench_platinum\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Starter\",\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 312,\n \"name\": \"Flux Wrench\",\n \"desc\": \"Patron reward. Thank you for your support! \\ud83d\\ude00\",\n \"image\": \"item/wrench_flux\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Starter\",\n \"Engineering\"\n ]\n }\n },\n {\n \"id\": 313,\n \"name\": \"Lesser Cap\",\n \"desc\": \"Cosmetic Equipment (Head). Patron reward.\",\n \"image\": \"item/cap\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Equipment\"\n ]\n }\n },\n {\n \"id\": 314,\n \"name\": \"Goofy Glasses\",\n \"desc\": \"Cosmetic Equipment (Face). Patron reward.\",\n \"image\": \"item/glasses\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Equipment\"\n ]\n }\n },\n {\n \"id\": 315,\n \"name\": \"Shades\",\n \"desc\": \"Cosmetic Equipment (Face). Patron reward.\",\n \"image\": \"item/shades\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Equipment\"\n ]\n }\n },\n {\n \"id\": 316,\n \"name\": \"Top Hat\",\n \"desc\": \"Cosmetic Equipment (Head). Patron reward.\",\n \"image\": \"item/top_hat\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Equipment\"\n ]\n }\n },\n {\n \"id\": 317,\n \"name\": \"Demon Horns\",\n \"desc\": \"Cosmetic Equipment (Head). Patron reward.\",\n \"image\": \"item/horns\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Equipment\"\n ]\n }\n },\n {\n \"id\": 318,\n \"name\": \"Alien Mask\",\n \"desc\": \"Cosmetic Equipment (Face). Patron reward.\",\n \"image\": \"item/mask_alien\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Equipment\"\n ]\n }\n },\n {\n \"id\": 319,\n \"name\": \"Clown Mask\",\n \"desc\": \"Cosmetic Equipment (Face). Patron reward.\",\n \"image\": \"item/mask_clown\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Equipment\"\n ]\n }\n },\n {\n \"id\": 320,\n \"name\": \"Goblin Mask\",\n \"desc\": \"Cosmetic Equipment (Face). Patron reward.\",\n \"image\": \"item/mask_goblin\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Equipment\"\n ]\n }\n },\n {\n \"id\": 321,\n \"name\": \"Pumpkin\",\n \"desc\": \"Cosmetic Equipment (Face). Patron reward.\",\n \"image\": \"item/mask_pumpkin\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Equipment\"\n ]\n }\n },\n {\n \"id\": 322,\n \"name\": \"Witch Hat\",\n \"desc\": \"Cosmetic Equipment (Head). Patron reward.\",\n \"image\": \"item/witch_hat\",\n \"rarity\": 0,\n \"max_stack\": 1,\n \"fab_recipe\": {\n \"count\": 1,\n \"time\": 5,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 4\n }\n ],\n \"fabs\": [\n \"Equipment\"\n ]\n }\n },\n {\n \"id\": 323,\n \"name\": \"Wild Gremlin (Red)\",\n \"desc\": \"It looks upset.\",\n \"image\": \"item/gremlin_red\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 324,\n \"name\": \"Wild Gremlin (Orange)\",\n \"desc\": \"It looks upset.\",\n \"image\": \"item/gremlin_orange\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 325,\n \"name\": \"Wild Gremlin (Yellow)\",\n \"desc\": \"It looks upset.\",\n \"image\": \"item/gremlin_yellow\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 326,\n \"name\": \"Elimination Loot Box\",\n \"desc\": \"Recycle in a safe zone to unbox.\",\n \"image\": \"item/loot_box\",\n \"rarity\": 2,\n \"max_stack\": 16\n },\n {\n \"id\": 327,\n \"name\": \"Elimination Loot Box (Locked)\",\n \"desc\": \"Recycle in a safe zone to unbox.\",\n \"image\": \"item/loot_box_locked\",\n \"rarity\": 2,\n \"max_stack\": 16\n },\n {\n \"id\": 340,\n \"name\": \"Wild Gremlin (Green)\",\n \"desc\": \"It looks upset.\",\n \"image\": \"item/gremlin_green\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 341,\n \"name\": \"Wild Gremlin (Blue)\",\n \"desc\": \"It looks upset.\",\n \"image\": \"item/gremlin_blue\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 342,\n \"name\": \"Wild Gremlin (Purple)\",\n \"desc\": \"It looks upset.\",\n \"image\": \"item/gremlin_purple\",\n \"rarity\": 2,\n \"max_stack\": 1\n },\n {\n \"id\": 400,\n \"name\": \"\\u03b2 ScatterShot Ammo\",\n \"desc\": \"Shoots multiple projectiles. Significant damage at close range, with knock-back.\",\n \"image\": \"item/ammo_b_scattershot\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 4,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 1\n },\n {\n \"id\": 2,\n \"count\": 1\n }\n ],\n \"fabs\": [\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 401,\n \"name\": \"\\u03b2 Flak Ammo\",\n \"desc\": \"Explodes into more bullets in flight.\",\n \"image\": \"item/ammo_b_flak\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 4,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 1\n },\n {\n \"id\": 2,\n \"count\": 1\n }\n ],\n \"fabs\": [\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 402,\n \"name\": \"\\u03b2 Sniper Ammo\",\n \"desc\": \"Speedy. Gains power from bouncing.\",\n \"image\": \"item/ammo_b_sniper\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 4,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 1\n },\n {\n \"id\": 2,\n \"count\": 1\n }\n ],\n \"fabs\": [\n \"Munitions\"\n ]\n }\n },\n {\n \"id\": 403,\n \"name\": \"\\u03b2 Punch Ammo\",\n \"desc\": \"Pushes objects away.\",\n \"image\": \"item/ammo_b_punch\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 4,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 1\n },\n {\n \"id\": 2,\n \"count\": 1\n }\n ],\n \"fabs\": []\n }\n },\n {\n \"id\": 404,\n \"name\": \"\\u03b2 Yank Ammo\",\n \"desc\": \"Pulls objects.\",\n \"image\": \"item/ammo_b_yank\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 4,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 1\n },\n {\n \"id\": 2,\n \"count\": 1\n }\n ],\n \"fabs\": []\n }\n },\n {\n \"id\": 405,\n \"name\": \"\\u03b2 Slug Ammo\",\n \"desc\": \"Slow bullet.\",\n \"image\": \"item/ammo_b_slug\",\n \"rarity\": 0,\n \"max_stack\": 16,\n \"fab_recipe\": {\n \"count\": 4,\n \"time\": 1,\n \"input\": [\n {\n \"id\": 1,\n \"count\": 1\n },\n {\n \"id\": 2,\n \"count\": 1\n }\n ],\n \"fabs\": [\n \"Munitions\"\n ]\n }\n }\n]);\n", "import {ITEM_SCHEMA} from \"../data/item-schema.js\";\n\nconst ITEM_TYPE_NAMES = new Map(ITEM_SCHEMA.map((item) => [Number(item.id), item.name]));\nconst ITEM_EQUIPMENT_SLOTS = new Map(ITEM_SCHEMA.flatMap((item) => {\n const slot = equipmentSlotFromDescription(item.desc);\n return slot ? [[Number(item.id), slot]] : [];\n}));\n\nfunction equipmentSlotFromDescription(description) {\n const match = String(description || \"\").match(/\\bEquipment \\((Head|Face|Body|Back|Hands|Feet)\\)/i);\n return match ? match[1].toLowerCase() : null;\n}\n\nexport function itemNameFromId(itemId) {\n return itemId == null ? null : ITEM_TYPE_NAMES.get(Number(itemId)) || null;\n}\n\nexport function itemEquipmentSlotFromId(itemId) {\n return itemId == null ? null : ITEM_EQUIPMENT_SLOTS.get(Number(itemId)) || null;\n}\n", "import {encoder} from \"../../constants.js\";\n\nfunction objectTag(value) {\n return Object.prototype.toString.call(value);\n}\n\nfunction isArrayBufferLike(value) {\n const tag = objectTag(value);\n return tag === \"[object ArrayBuffer]\" || tag === \"[object SharedArrayBuffer]\";\n}\n\nfunction toUint8Array(value) {\n if (value instanceof Uint8Array) return value;\n if (isArrayBufferLike(value)) return new Uint8Array(value);\n if (ArrayBuffer.isView(value)) {\n return new Uint8Array(value.buffer.slice(value.byteOffset, value.byteOffset + value.byteLength));\n }\n if (Array.isArray(value)) return Uint8Array.from(value);\n if (typeof value === \"string\") return encoder.encode(value);\n throw new Error(`Unsupported binary value: ${objectTag(value)}`);\n}\n\nfunction concatBytes(parts) {\n const total = parts.reduce((sum, part) => sum + part.length, 0);\n const out = new Uint8Array(total);\n let offset = 0;\n for (const part of parts) {\n out.set(part, offset);\n offset += part.length;\n }\n return out;\n}\n\nfunction valuesEqual(a, b) {\n if (a === b) return true;\n if (a == null || b == null) return a == null && b == null;\n if (typeof a !== \"object\" || typeof b !== \"object\") return false;\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) return false;\n for (const key of aKeys) {\n if (!valuesEqual(a[key], b[key])) return false;\n }\n return true;\n}\n\n\nexport {\n toUint8Array,\n concatBytes,\n valuesEqual\n};\n", "import {toUint8Array} from \"../protocol/codec/binary.js\";\n\n// Growable typed-array sink. LZ4 block headers carry the compressed size, not\n// the decompressed size, so the output buffer starts at a generous multiple and\n// doubles on demand rather than pushing into a plain array one byte at a time.\nfunction ensureCapacity(buffer, needed) {\n if (needed <= buffer.length) return buffer;\n let size = buffer.length || 64;\n while (size < needed) size *= 2;\n const grown = new Uint8Array(size);\n grown.set(buffer);\n return grown;\n}\n\nfunction decompressLz4Block(block) {\n let out = new Uint8Array(Math.max(64, block.length * 4));\n let len = 0;\n let pos = 0;\n\n while (pos < block.length) {\n const token = block[pos++];\n\n let literalLen = token >>> 4;\n if (literalLen === 15) {\n let b;\n do {\n if (pos >= block.length) throw new Error(\"truncated lz4 literal length\");\n b = block[pos++];\n literalLen += b;\n } while (b === 255);\n }\n\n if (pos + literalLen > block.length) throw new Error(\"truncated lz4 literals\");\n if (literalLen > 0) {\n out = ensureCapacity(out, len + literalLen);\n out.set(block.subarray(pos, pos + literalLen), len);\n len += literalLen;\n pos += literalLen;\n }\n\n if (pos >= block.length) break;\n if (pos + 2 > block.length) throw new Error(\"truncated lz4 offset\");\n const offset = block[pos] | (block[pos + 1] << 8);\n pos += 2;\n if (offset === 0 || offset > len) throw new Error(`invalid lz4 offset ${offset}`);\n\n let matchLen = token & 0x0f;\n if (matchLen === 15) {\n let b;\n do {\n if (pos >= block.length) throw new Error(\"truncated lz4 match length\");\n b = block[pos++];\n matchLen += b;\n } while (b === 255);\n }\n matchLen += 4;\n\n out = ensureCapacity(out, len + matchLen);\n // Matches may overlap the region being written, so copy byte by byte rather\n // than with copyWithin, which would read the pre-copy bytes.\n let from = len - offset;\n for (let i = 0; i < matchLen; i++) out[len++] = out[from++];\n }\n\n // Return a compact standalone array, matching the previous contract: callers\n // must not see a view over a larger backing buffer.\n return out.length === len ? out : out.slice(0, len);\n}\n\nfunction decompressLz4Frame(bytes) {\n const buf = toUint8Array(bytes);\n if (buf.length < 7) return buf;\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n if (view.getUint32(0, true) !== 0x184d2204) return buf;\n const flg = buf[4];\n let pos = 6;\n if (flg & 0x08) pos += 8;\n if (flg & 0x01) pos += 4;\n pos += 1;\n const chunks = [];\n let total = 0;\n while (pos + 4 <= buf.length) {\n const rawSize = view.getUint32(pos, true);\n pos += 4;\n if (rawSize === 0) break;\n const uncompressed = (rawSize & 0x80000000) !== 0;\n const size = rawSize & 0x7fffffff;\n if (pos + size > buf.length) throw new Error(\"truncated lz4 block\");\n const block = buf.subarray(pos, pos + size);\n const chunk = uncompressed ? block.slice() : decompressLz4Block(block);\n chunks.push(chunk);\n total += chunk.length;\n pos += size;\n if (flg & 0x10) pos += 4;\n }\n // Single-chunk frames are the common case and need no concatenation pass.\n if (chunks.length === 1) return chunks[0];\n if (chunks.length === 0) return new Uint8Array(0);\n const out = new Uint8Array(total);\n let offset = 0;\n for (const chunk of chunks) {\n out.set(chunk, offset);\n offset += chunk.length;\n }\n return out;\n}\n\n\nexport {\n decompressLz4Block,\n decompressLz4Frame\n};\n", "import {encoder, SHARED_CHACHA_MATERIAL} from \"../constants.js\";\nimport {toUint8Array} from \"../protocol/codec/binary.js\";\n\nfunction rotl32(x, n) {\n n &= 31;\n return ((x << n) | (x >>> (32 - n))) >>> 0;\n}\n\nfunction rotr32(x, n) {\n n &= 31;\n return ((x >>> n) | (x << (32 - n))) >>> 0;\n}\n\nfunction quarterRound(state, a, b, c, d) {\n state[a] = (state[a] + state[b]) >>> 0;\n state[d] ^= state[a];\n state[d] = rotl32(state[d], 16);\n state[c] = (state[c] + state[d]) >>> 0;\n state[b] ^= state[c];\n state[b] = rotl32(state[b], 12);\n state[a] = (state[a] + state[b]) >>> 0;\n state[d] ^= state[a];\n state[d] = rotl32(state[d], 8);\n state[c] = (state[c] + state[d]) >>> 0;\n state[b] ^= state[c];\n state[b] = rotl32(state[b], 7);\n}\n\n// Optional native backend. Node's OpenSSL exposes a raw `chacha20` stream cipher\n// whose keystream is identical to this implementation, and it is ~27x faster on\n// large payloads. It is installed by src/node.js rather than imported here so\n// that browser bundles never see a `node:crypto` specifier.\nlet nativeBlockCipher = null;\n\nfunction installNativeChaCha20(cipherFactory) {\n nativeBlockCipher = typeof cipherFactory === \"function\" ? cipherFactory : null;\n}\n\n// Native call overhead dominates below roughly this size; measured crossover is\n// near 150 bytes, so stay in JS for the small per-tick payloads.\nconst NATIVE_MIN_BYTES = 256;\n\n// Reused across blocks: the keystream words for one 64-byte block. Safe because\n// generation is synchronous and single-threaded.\nconst SCRATCH_BLOCK = new Uint32Array(16);\n\nfunction readLe32(bytes, offset) {\n return (bytes[offset] | (bytes[offset + 1] << 8) | (bytes[offset + 2] << 16) | (bytes[offset + 3] << 24)) >>> 0;\n}\n\n// Writes `length` keystream bytes into `out` starting at 0, XORing against\n// `source` when supplied. Keeping generation and XOR in one pass avoids\n// allocating a full second buffer for the keystream.\nfunction chacha20Into(out, key, nonce, length, source) {\n const k0 = readLe32(key, 0), k1 = readLe32(key, 4), k2 = readLe32(key, 8), k3 = readLe32(key, 12);\n const k4 = readLe32(key, 16), k5 = readLe32(key, 20), k6 = readLe32(key, 24), k7 = readLe32(key, 28);\n const n0 = readLe32(nonce, 0), n1 = readLe32(nonce, 4), n2 = readLe32(nonce, 8);\n\n let counter = 0;\n let offset = 0;\n const block = SCRATCH_BLOCK;\n\n while (offset < length) {\n let x0 = 0x61707865, x1 = 0x3320646e, x2 = 0x79622d32, x3 = 0x6b206574;\n let x4 = k0, x5 = k1, x6 = k2, x7 = k3;\n let x8 = k4, x9 = k5, x10 = k6, x11 = k7;\n let x12 = counter, x13 = n0, x14 = n1, x15 = n2;\n\n for (let i = 0; i < 10; i++) {\n // column rounds\n x0 = (x0 + x4) >>> 0;\n x12 ^= x0;\n x12 = (x12 << 16) | (x12 >>> 16);\n x8 = (x8 + x12) >>> 0;\n x4 ^= x8;\n x4 = (x4 << 12) | (x4 >>> 20);\n x0 = (x0 + x4) >>> 0;\n x12 ^= x0;\n x12 = (x12 << 8) | (x12 >>> 24);\n x8 = (x8 + x12) >>> 0;\n x4 ^= x8;\n x4 = (x4 << 7) | (x4 >>> 25);\n\n x1 = (x1 + x5) >>> 0;\n x13 ^= x1;\n x13 = (x13 << 16) | (x13 >>> 16);\n x9 = (x9 + x13) >>> 0;\n x5 ^= x9;\n x5 = (x5 << 12) | (x5 >>> 20);\n x1 = (x1 + x5) >>> 0;\n x13 ^= x1;\n x13 = (x13 << 8) | (x13 >>> 24);\n x9 = (x9 + x13) >>> 0;\n x5 ^= x9;\n x5 = (x5 << 7) | (x5 >>> 25);\n\n x2 = (x2 + x6) >>> 0;\n x14 ^= x2;\n x14 = (x14 << 16) | (x14 >>> 16);\n x10 = (x10 + x14) >>> 0;\n x6 ^= x10;\n x6 = (x6 << 12) | (x6 >>> 20);\n x2 = (x2 + x6) >>> 0;\n x14 ^= x2;\n x14 = (x14 << 8) | (x14 >>> 24);\n x10 = (x10 + x14) >>> 0;\n x6 ^= x10;\n x6 = (x6 << 7) | (x6 >>> 25);\n\n x3 = (x3 + x7) >>> 0;\n x15 ^= x3;\n x15 = (x15 << 16) | (x15 >>> 16);\n x11 = (x11 + x15) >>> 0;\n x7 ^= x11;\n x7 = (x7 << 12) | (x7 >>> 20);\n x3 = (x3 + x7) >>> 0;\n x15 ^= x3;\n x15 = (x15 << 8) | (x15 >>> 24);\n x11 = (x11 + x15) >>> 0;\n x7 ^= x11;\n x7 = (x7 << 7) | (x7 >>> 25);\n\n // diagonal rounds\n x0 = (x0 + x5) >>> 0;\n x15 ^= x0;\n x15 = (x15 << 16) | (x15 >>> 16);\n x10 = (x10 + x15) >>> 0;\n x5 ^= x10;\n x5 = (x5 << 12) | (x5 >>> 20);\n x0 = (x0 + x5) >>> 0;\n x15 ^= x0;\n x15 = (x15 << 8) | (x15 >>> 24);\n x10 = (x10 + x15) >>> 0;\n x5 ^= x10;\n x5 = (x5 << 7) | (x5 >>> 25);\n\n x1 = (x1 + x6) >>> 0;\n x12 ^= x1;\n x12 = (x12 << 16) | (x12 >>> 16);\n x11 = (x11 + x12) >>> 0;\n x6 ^= x11;\n x6 = (x6 << 12) | (x6 >>> 20);\n x1 = (x1 + x6) >>> 0;\n x12 ^= x1;\n x12 = (x12 << 8) | (x12 >>> 24);\n x11 = (x11 + x12) >>> 0;\n x6 ^= x11;\n x6 = (x6 << 7) | (x6 >>> 25);\n\n x2 = (x2 + x7) >>> 0;\n x13 ^= x2;\n x13 = (x13 << 16) | (x13 >>> 16);\n x8 = (x8 + x13) >>> 0;\n x7 ^= x8;\n x7 = (x7 << 12) | (x7 >>> 20);\n x2 = (x2 + x7) >>> 0;\n x13 ^= x2;\n x13 = (x13 << 8) | (x13 >>> 24);\n x8 = (x8 + x13) >>> 0;\n x7 ^= x8;\n x7 = (x7 << 7) | (x7 >>> 25);\n\n x3 = (x3 + x4) >>> 0;\n x14 ^= x3;\n x14 = (x14 << 16) | (x14 >>> 16);\n x9 = (x9 + x14) >>> 0;\n x4 ^= x9;\n x4 = (x4 << 12) | (x4 >>> 20);\n x3 = (x3 + x4) >>> 0;\n x14 ^= x3;\n x14 = (x14 << 8) | (x14 >>> 24);\n x9 = (x9 + x14) >>> 0;\n x4 ^= x9;\n x4 = (x4 << 7) | (x4 >>> 25);\n }\n\n block[0] = (x0 + 0x61707865) >>> 0;\n block[1] = (x1 + 0x3320646e) >>> 0;\n block[2] = (x2 + 0x79622d32) >>> 0;\n block[3] = (x3 + 0x6b206574) >>> 0;\n block[4] = (x4 + k0) >>> 0;\n block[5] = (x5 + k1) >>> 0;\n block[6] = (x6 + k2) >>> 0;\n block[7] = (x7 + k3) >>> 0;\n block[8] = (x8 + k4) >>> 0;\n block[9] = (x9 + k5) >>> 0;\n block[10] = (x10 + k6) >>> 0;\n block[11] = (x11 + k7) >>> 0;\n block[12] = (x12 + counter) >>> 0;\n block[13] = (x13 + n0) >>> 0;\n block[14] = (x14 + n1) >>> 0;\n block[15] = (x15 + n2) >>> 0;\n\n const remaining = length - offset;\n if (remaining >= 64) {\n if (source) {\n for (let w = 0; w < 16; w++) {\n const word = block[w];\n out[offset] = source[offset] ^ (word & 0xff);\n out[offset + 1] = source[offset + 1] ^ ((word >>> 8) & 0xff);\n out[offset + 2] = source[offset + 2] ^ ((word >>> 16) & 0xff);\n out[offset + 3] = source[offset + 3] ^ ((word >>> 24) & 0xff);\n offset += 4;\n }\n } else {\n for (let w = 0; w < 16; w++) {\n const word = block[w];\n out[offset] = word & 0xff;\n out[offset + 1] = (word >>> 8) & 0xff;\n out[offset + 2] = (word >>> 16) & 0xff;\n out[offset + 3] = (word >>> 24) & 0xff;\n offset += 4;\n }\n }\n } else {\n for (let i = 0; i < remaining; i++, offset++) {\n const stream = (block[i >> 2] >>> ((i & 3) * 8)) & 0xff;\n out[offset] = source ? source[offset] ^ stream : stream;\n }\n }\n counter++;\n }\n\n return out;\n}\n\nfunction chacha20(key, nonce, length) {\n const out = new Uint8Array(length);\n if (length <= 0) return out;\n if (nativeBlockCipher && length >= NATIVE_MIN_BYTES) {\n const native = nativeBlockCipher(key, nonce, out);\n if (native) return native;\n }\n return chacha20Into(out, key, nonce, length, null);\n}\n\n// XORs `data` with the keystream in a single pass, without materialising the\n// keystream in a separate buffer.\nfunction chacha20Xor(key, nonce, data) {\n const out = new Uint8Array(data.length);\n if (data.length === 0) return out;\n if (nativeBlockCipher && data.length >= NATIVE_MIN_BYTES) {\n const native = nativeBlockCipher(key, nonce, out, data);\n if (native) return native;\n }\n return chacha20Into(out, key, nonce, data.length, data);\n}\n\nfunction decryptPayload(wireBytes, worldId, seed) {\n const wire = toUint8Array(wireBytes);\n if (wire.length < 8) throw new Error(\"payload too short\");\n const view = new DataView(wire.buffer, wire.byteOffset, wire.byteLength);\n const packetWordA = view.getUint32(0, true);\n const packetWordB = view.getUint32(wire.length - 4, true);\n const material = Uint8Array.from(SHARED_CHACHA_MATERIAL);\n const worldKey = encoder.encode(`${worldId}${seed}`);\n for (let i = 0, l = 0, r = 0; i < 44; i++, l += 7, r += 11) {\n material[i] ^= worldKey[i % worldKey.length] ^ (rotl32(packetWordA, l) & 0xff) ^ (rotr32(packetWordB, r) & 0xff);\n }\n // subarray, not slice: the key and nonce are only read.\n const ciphertext = wire.subarray(4, wire.length - 4);\n return chacha20Xor(material.subarray(0, 32), material.subarray(32, 44), ciphertext);\n}\n\n\nexport {\n rotl32,\n rotr32,\n quarterRound,\n chacha20,\n chacha20Xor,\n decryptPayload,\n installNativeChaCha20\n};\n", "import {COMMAND_DEFAULT_FORMATS, COMMAND_FIELDS, decoder, encoder} from \"../../constants.js\";\nimport {concatBytes, toUint8Array, valuesEqual} from \"./binary.js\";\n\nfunction cloneDragValue(drag) {\n if (!drag || typeof drag !== \"object\") return null;\n return {\n source: Number(drag.source),\n target: Number(drag.target),\n split: Boolean(drag.split)\n };\n}\n\nfunction cloneCommand(command) {\n const out = {};\n for (const key of COMMAND_FIELDS) {\n out[key] = key === \"drag\" ? cloneDragValue(command[key]) : command[key];\n }\n return out;\n}\n\nfunction encodeStringBytes(text) {\n const bytes = encoder.encode(String(text));\n const length = bytes.length;\n if (length <= 31) {\n const out = new Uint8Array(1 + length);\n out[0] = 0xa0 | length;\n out.set(bytes, 1);\n return out;\n }\n if (length <= 0xff) {\n const out = new Uint8Array(2 + length);\n out[0] = 0xd9;\n out[1] = length;\n out.set(bytes, 2);\n return out;\n }\n const out = new Uint8Array(3 + length);\n out[0] = 0xda;\n out[1] = (length >>> 8) & 0xff;\n out[2] = length & 0xff;\n out.set(bytes, 3);\n return out;\n}\n\nfunction encodeNumberWithFormat(value, format) {\n const number = Number(value);\n switch (format) {\n case \"positive-fixint\":\n return Uint8Array.of(number & 0x7f);\n case \"negative-fixint\":\n return Uint8Array.of(number & 0xff);\n case \"uint8\":\n return Uint8Array.of(0xcc, number & 0xff);\n case \"uint16\":\n return Uint8Array.of(0xcd, (number >>> 8) & 0xff, number & 0xff);\n case \"uint32\":\n return Uint8Array.of(0xce, (number >>> 24) & 0xff, (number >>> 16) & 0xff, (number >>> 8) & 0xff, number & 0xff);\n case \"int8\":\n return Uint8Array.of(0xd0, number & 0xff);\n case \"int16\":\n return Uint8Array.of(0xd1, (number >> 8) & 0xff, number & 0xff);\n case \"int32\":\n return Uint8Array.of(0xd2, (number >> 24) & 0xff, (number >> 16) & 0xff, (number >> 8) & 0xff, number & 0xff);\n case \"float64\": {\n const out = new Uint8Array(9);\n out[0] = 0xcb;\n new DataView(out.buffer).setFloat64(1, number, false);\n return out;\n }\n case \"float32\":\n default: {\n const out = new Uint8Array(5);\n out[0] = 0xca;\n new DataView(out.buffer).setFloat32(1, number, false);\n return out;\n }\n }\n}\n\nfunction encodeMapHeader(length, originalHeaderBytes = null) {\n if (originalHeaderBytes && originalHeaderBytes.length > 0) return originalHeaderBytes;\n if (length <= 15) return Uint8Array.of(0x80 | length);\n return Uint8Array.of(0xde, (length >>> 8) & 0xff, length & 0xff);\n}\n\nfunction encodeValue(key, value, entry) {\n if (entry && valuesEqual(value, entry.valueNode.value)) return entry.valueNode.raw;\n if (value == null) return Uint8Array.of(0xc0);\n if (typeof value === \"boolean\") return Uint8Array.of(value ? 0xc3 : 0xc2);\n if (typeof value === \"number\") {\n const schemaFormat = COMMAND_DEFAULT_FORMATS[key];\n let format = schemaFormat && schemaFormat !== \"nil\" ? schemaFormat : null;\n if (!format) {\n if (!Number.isInteger(value)) format = \"float32\";\n else if (value >= 0) {\n if (value <= 0x7f) format = \"positive-fixint\";\n else if (value <= 0xff) format = \"uint8\";\n else if (value <= 0xffff) format = \"uint16\";\n else format = \"uint32\";\n } else if (value >= -32) format = \"negative-fixint\";\n else if (value >= -128) format = \"int8\";\n else if (value >= -32768) format = \"int16\";\n else format = \"int32\";\n }\n return encodeNumberWithFormat(value, format);\n }\n if (typeof value === \"string\") return encodeStringBytes(value);\n if (key === \"drag\" && typeof value === \"object\") {\n const sourceEntry = entry?.valueNode?.entries?.find((item) => String(item.key) === \"source\")?.valueNode;\n const targetEntry = entry?.valueNode?.entries?.find((item) => String(item.key) === \"target\")?.valueNode;\n return concatBytes([\n Uint8Array.of(0x83),\n encodeStringBytes(\"source\"),\n encodeNumberWithFormat(Number(value.source || 0), sourceEntry?.format || \"positive-fixint\"),\n encodeStringBytes(\"target\"),\n encodeNumberWithFormat(Number(value.target || 0), targetEntry?.format || \"positive-fixint\"),\n encodeStringBytes(\"split\"),\n Uint8Array.of(Boolean(value.split) ? 0xc3 : 0xc2)\n ]);\n }\n throw new Error(`Unsupported command field \"${key}\"`);\n}\n\nfunction decodeValue(bytes, offset = 0) {\n const head = bytes[offset++];\n if (head <= 0x7f) return {value: head, format: \"positive-fixint\", offset, raw: bytes.slice(offset - 1, offset)};\n if (head >= 0xe0) return {\n value: (head << 24) >> 24,\n format: \"negative-fixint\",\n offset,\n raw: bytes.slice(offset - 1, offset)\n };\n if ((head & 0xf0) === 0x80) {\n const count = head & 0x0f;\n const entries = [];\n const obj = {};\n for (let i = 0; i < count; i++) {\n const keyNode = decodeValue(bytes, offset);\n offset = keyNode.offset;\n const valueNode = decodeValue(bytes, offset);\n offset = valueNode.offset;\n entries.push({key: keyNode.value, keyNode, valueNode});\n obj[String(keyNode.value)] = valueNode.value;\n }\n return {\n value: obj,\n format: \"fixmap\",\n entries,\n headerBytes: bytes.slice(offset - 1 - (count * 2), offset),\n offset,\n raw: bytes.slice(offset - (offset - (offset - 1)), offset)\n };\n }\n if ((head & 0xf0) === 0x90) {\n const count = head & 0x0f;\n const items = [];\n for (let i = 0; i < count; i++) {\n const item = decodeValue(bytes, offset);\n offset = item.offset;\n items.push(item);\n }\n return {value: items.map((item) => item.value), format: \"fixarray\", items, offset, raw: bytes.slice(0, offset)};\n }\n if ((head & 0xe0) === 0xa0) {\n const len = head & 0x1f;\n const start = offset;\n const end = start + len;\n return {\n value: decoder.decode(bytes.slice(start, end)),\n format: \"fixstr\",\n offset: end,\n raw: bytes.slice(offset - 1, end)\n };\n }\n switch (head) {\n case 0xc0:\n return {value: null, format: \"nil\", offset, raw: bytes.slice(offset - 1, offset)};\n case 0xc2:\n return {value: false, format: \"bool\", offset, raw: bytes.slice(offset - 1, offset)};\n case 0xc3:\n return {value: true, format: \"bool\", offset, raw: bytes.slice(offset - 1, offset)};\n case 0xc4: {\n const len = bytes[offset++];\n const start = offset;\n const end = start + len;\n return {value: bytes.slice(start, end), format: \"bin8\", offset: end, raw: bytes.slice(start - 2, end)};\n }\n case 0xc5: {\n const len = (bytes[offset] << 8) | bytes[offset + 1];\n offset += 2;\n const start = offset;\n const end = start + len;\n return {value: bytes.slice(start, end), format: \"bin16\", offset: end, raw: bytes.slice(start - 3, end)};\n }\n case 0xc6: {\n const len = (bytes[offset] * 0x1000000) + ((bytes[offset + 1] << 16) | (bytes[offset + 2] << 8) | bytes[offset + 3]);\n offset += 4;\n const start = offset;\n const end = start + len;\n return {value: bytes.slice(start, end), format: \"bin32\", offset: end, raw: bytes.slice(start - 5, end)};\n }\n case 0xca:\n return {\n value: new DataView(bytes.buffer, bytes.byteOffset + offset, 4).getFloat32(0, false),\n format: \"float32\",\n offset: offset + 4,\n raw: bytes.slice(offset - 1, offset + 4)\n };\n case 0xcb:\n return {\n value: new DataView(bytes.buffer, bytes.byteOffset + offset, 8).getFloat64(0, false),\n format: \"float64\",\n offset: offset + 8,\n raw: bytes.slice(offset - 1, offset + 8)\n };\n case 0xcc:\n return {\n value: bytes[offset],\n format: \"uint8\",\n offset: offset + 1,\n raw: bytes.slice(offset - 1, offset + 1)\n };\n case 0xcd:\n return {\n value: (bytes[offset] << 8) | bytes[offset + 1],\n format: \"uint16\",\n offset: offset + 2,\n raw: bytes.slice(offset - 1, offset + 2)\n };\n case 0xce:\n return {\n value: (((bytes[offset] * 0x1000000) + ((bytes[offset + 1] << 16) | (bytes[offset + 2] << 8) | bytes[offset + 3])) >>> 0),\n format: \"uint32\",\n offset: offset + 4,\n raw: bytes.slice(offset - 1, offset + 4)\n };\n case 0xd0:\n return {\n value: (bytes[offset] << 24) >> 24,\n format: \"int8\",\n offset: offset + 1,\n raw: bytes.slice(offset - 1, offset + 1)\n };\n case 0xd1:\n return {\n value: new DataView(bytes.buffer, bytes.byteOffset + offset, 2).getInt16(0, false),\n format: \"int16\",\n offset: offset + 2,\n raw: bytes.slice(offset - 1, offset + 2)\n };\n case 0xd2:\n return {\n value: new DataView(bytes.buffer, bytes.byteOffset + offset, 4).getInt32(0, false),\n format: \"int32\",\n offset: offset + 4,\n raw: bytes.slice(offset - 1, offset + 4)\n };\n case 0xd9: {\n const len = bytes[offset++];\n const start = offset;\n const end = start + len;\n return {\n value: decoder.decode(bytes.slice(start, end)),\n format: \"str8\",\n offset: end,\n raw: bytes.slice(start - 2, end)\n };\n }\n case 0xda: {\n const len = (bytes[offset] << 8) | bytes[offset + 1];\n offset += 2;\n const start = offset;\n const end = start + len;\n return {\n value: decoder.decode(bytes.slice(start, end)),\n format: \"str16\",\n offset: end,\n raw: bytes.slice(start - 3, end)\n };\n }\n case 0xdc: {\n const count = (bytes[offset] << 8) | bytes[offset + 1];\n offset += 2;\n const items = [];\n for (let i = 0; i < count; i++) {\n const item = decodeValue(bytes, offset);\n offset = item.offset;\n items.push(item);\n }\n return {\n value: items.map((item) => item.value),\n format: \"array16\",\n items,\n offset,\n raw: bytes.slice(0, offset)\n };\n }\n case 0xde: {\n const count = (bytes[offset] << 8) | bytes[offset + 1];\n offset += 2;\n const entries = [];\n const obj = {};\n for (let i = 0; i < count; i++) {\n const keyNode = decodeValue(bytes, offset);\n offset = keyNode.offset;\n const valueNode = decodeValue(bytes, offset);\n offset = valueNode.offset;\n entries.push({key: keyNode.value, keyNode, valueNode});\n obj[String(keyNode.value)] = valueNode.value;\n }\n return {value: obj, format: \"map16\", entries, offset, raw: bytes.slice(0, offset)};\n }\n default:\n throw new Error(`Unsupported msgpack token 0x${head.toString(16)}`);\n }\n}\n\n// Value-only decoder used for all inbound traffic.\n//\n// `decodeValue` above annotates every node with its `raw` byte slice and format\n// so outgoing commands can be re-encoded byte-for-byte. Containers slice from\n// the start of the buffer, which makes decoding quadratic in packet size, and\n// `decodeMsgpack` discarded all of it. This path allocates only the decoded\n// values. The annotated decoder stays exported for the command-signing path and\n// external tooling.\nlet cursor = 0;\n\nfunction readFast(bytes) {\n const head = bytes[cursor++];\n\n if (head <= 0x7f) return head;\n if (head >= 0xe0) return (head << 24) >> 24;\n\n if ((head & 0xf0) === 0x80) return readMapFast(bytes, head & 0x0f);\n if ((head & 0xf0) === 0x90) return readArrayFast(bytes, head & 0x0f);\n if ((head & 0xe0) === 0xa0) return readStrFast(bytes, head & 0x1f);\n\n switch (head) {\n case 0xc0:\n return null;\n case 0xc2:\n return false;\n case 0xc3:\n return true;\n case 0xc4:\n return readBinFast(bytes, bytes[cursor++]);\n case 0xc5: {\n const len = (bytes[cursor] << 8) | bytes[cursor + 1];\n cursor += 2;\n return readBinFast(bytes, len);\n }\n case 0xc6: {\n const len = (bytes[cursor] * 0x1000000) + ((bytes[cursor + 1] << 16) | (bytes[cursor + 2] << 8) | bytes[cursor + 3]);\n cursor += 4;\n return readBinFast(bytes, len);\n }\n case 0xca: {\n const value = new DataView(bytes.buffer, bytes.byteOffset + cursor, 4).getFloat32(0, false);\n cursor += 4;\n return value;\n }\n case 0xcb: {\n const value = new DataView(bytes.buffer, bytes.byteOffset + cursor, 8).getFloat64(0, false);\n cursor += 8;\n return value;\n }\n case 0xcc:\n return bytes[cursor++];\n case 0xcd: {\n const value = (bytes[cursor] << 8) | bytes[cursor + 1];\n cursor += 2;\n return value;\n }\n case 0xce: {\n const value = (((bytes[cursor] * 0x1000000) + ((bytes[cursor + 1] << 16) | (bytes[cursor + 2] << 8) | bytes[cursor + 3])) >>> 0);\n cursor += 4;\n return value;\n }\n case 0xd0:\n return (bytes[cursor++] << 24) >> 24;\n case 0xd1: {\n const value = ((((bytes[cursor] << 8) | bytes[cursor + 1]) << 16) >> 16);\n cursor += 2;\n return value;\n }\n case 0xd2: {\n const value = ((bytes[cursor] << 24) | (bytes[cursor + 1] << 16) | (bytes[cursor + 2] << 8) | bytes[cursor + 3]) | 0;\n cursor += 4;\n return value;\n }\n case 0xd9:\n return readStrFast(bytes, bytes[cursor++]);\n case 0xda: {\n const len = (bytes[cursor] << 8) | bytes[cursor + 1];\n cursor += 2;\n return readStrFast(bytes, len);\n }\n case 0xdc: {\n const count = (bytes[cursor] << 8) | bytes[cursor + 1];\n cursor += 2;\n return readArrayFast(bytes, count);\n }\n case 0xde: {\n const count = (bytes[cursor] << 8) | bytes[cursor + 1];\n cursor += 2;\n return readMapFast(bytes, count);\n }\n default:\n throw new Error(`Unsupported msgpack token 0x${head.toString(16)}`);\n }\n}\n\nfunction readStrFast(bytes, len) {\n const start = cursor;\n cursor += len;\n // subarray, not slice: TextDecoder copies into the result string anyway.\n return decoder.decode(bytes.subarray(start, cursor));\n}\n\nfunction readBinFast(bytes, len) {\n const start = cursor;\n cursor += len;\n // slice, not subarray: callers retain these payloads past the socket buffer.\n return bytes.slice(start, cursor);\n}\n\nfunction readArrayFast(bytes, count) {\n const items = new Array(count);\n for (let i = 0; i < count; i++) items[i] = readFast(bytes);\n return items;\n}\n\nfunction readMapFast(bytes, count) {\n const obj = {};\n for (let i = 0; i < count; i++) {\n const key = readFast(bytes);\n obj[typeof key === \"string\" ? key : String(key)] = readFast(bytes);\n }\n return obj;\n}\n\nfunction decodeMsgpack(bytes) {\n const input = toUint8Array(bytes);\n cursor = 0;\n return readFast(input);\n}\n\n// Growable output buffer. The recursive encoder used to build an array of small\n// Uint8Array fragments per value and concatenate them at every nesting level.\nclass MsgpackWriter {\n constructor(capacity = 256) {\n this.bytes = new Uint8Array(capacity);\n this.length = 0;\n }\n\n #reserve(extra) {\n const needed = this.length + extra;\n if (needed <= this.bytes.length) return;\n let size = this.bytes.length || 64;\n while (size < needed) size *= 2;\n const grown = new Uint8Array(size);\n grown.set(this.bytes.subarray(0, this.length));\n this.bytes = grown;\n }\n\n byte(value) {\n this.#reserve(1);\n this.bytes[this.length++] = value & 0xff;\n return this;\n }\n\n raw(chunk) {\n this.#reserve(chunk.length);\n this.bytes.set(chunk, this.length);\n this.length += chunk.length;\n return this;\n }\n\n result() {\n return this.bytes.slice(0, this.length);\n }\n}\n\nfunction writeMsgpack(writer, value) {\n if (value == null) return writer.byte(0xc0);\n if (typeof value === \"boolean\") return writer.byte(value ? 0xc3 : 0xc2);\n if (typeof value === \"number\") return writer.raw(encodeMsgpackNumber(value));\n if (typeof value === \"string\") return writer.raw(encodeStringBytes(value));\n\n if (value instanceof Uint8Array || value instanceof ArrayBuffer || ArrayBuffer.isView(value)) {\n const bytes = toUint8Array(value);\n if (bytes.length <= 0xff) writer.byte(0xc4).byte(bytes.length);\n else if (bytes.length <= 0xffff) writer.byte(0xc5).byte(bytes.length >>> 8).byte(bytes.length);\n else writer.byte(0xc6).byte(bytes.length >>> 24).byte(bytes.length >>> 16).byte(bytes.length >>> 8).byte(bytes.length);\n return writer.raw(bytes);\n }\n\n if (Array.isArray(value)) {\n const len = value.length;\n if (len <= 15) writer.byte(0x90 | len);\n else writer.byte(0xdc).byte(len >>> 8).byte(len);\n for (const item of value) writeMsgpack(writer, item);\n return writer;\n }\n\n if (typeof value === \"object\") {\n const entries = Object.entries(value);\n if (entries.length <= 15) writer.byte(0x80 | entries.length);\n else writer.byte(0xde).byte(entries.length >>> 8).byte(entries.length);\n for (const [key, val] of entries) {\n writer.raw(encodeStringBytes(key));\n writeMsgpack(writer, val);\n }\n return writer;\n }\n\n throw new Error(`Unsupported msgpack value: ${typeof value}`);\n}\n\nfunction encodeMsgpackNumber(value) {\n if (!Number.isInteger(value)) return encodeNumberWithFormat(value, \"float32\");\n if (value >= 0) {\n if (value <= 0x7f) return encodeNumberWithFormat(value, \"positive-fixint\");\n if (value <= 0xff) return encodeNumberWithFormat(value, \"uint8\");\n if (value <= 0xffff) return encodeNumberWithFormat(value, \"uint16\");\n return encodeNumberWithFormat(value, \"uint32\");\n }\n if (value >= -32) return encodeNumberWithFormat(value, \"negative-fixint\");\n if (value >= -128) return encodeNumberWithFormat(value, \"int8\");\n if (value >= -32768) return encodeNumberWithFormat(value, \"int16\");\n return encodeNumberWithFormat(value, \"int32\");\n}\n\nfunction encodeMsgpack(value) {\n // Scalars need no buffer at all.\n if (value == null) return Uint8Array.of(0xc0);\n if (typeof value === \"boolean\") return Uint8Array.of(value ? 0xc3 : 0xc2);\n if (typeof value === \"number\") return encodeMsgpackNumber(value);\n if (typeof value === \"string\") return encodeStringBytes(value);\n const writer = new MsgpackWriter();\n writeMsgpack(writer, value);\n return writer.result();\n}\n\nexport {\n cloneDragValue,\n cloneCommand,\n encodeStringBytes,\n encodeNumberWithFormat,\n encodeMapHeader,\n encodeValue,\n decodeValue,\n decodeMsgpack,\n encodeMsgpack\n};\n", "import {decompressLz4Frame} from \"../../compression/lz4.js\";\nimport {decryptPayload} from \"../../crypto/chacha.js\";\nimport {decodeMsgpack} from \"../codec/msgpack.js\";\n\nexport function decodeWorldPayload(data, worldId, seed) {\n if (!data || seed == null) return null;\n try {\n return decodeMsgpack(decryptPayload(data, worldId, seed));\n } catch (_) {\n return null;\n }\n}\n\nexport function decodeModelPayload(data, worldId, seed) {\n if (!data || seed == null) throw new Error(\"Encrypted model payload requires a world seed\");\n return decryptPayload(data, worldId, seed);\n}\n\nexport function decompressWorldChunk(data) {\n return decompressLz4Frame(data);\n}\n", "import {decoder} from \"../../constants.js\";\nimport {\n LOADER_FILTER_MODE_NAMES,\n LOADER_POSITION_NAMES,\n LOADER_PRIORITY_NAMES,\n LoaderConfigTracker\n} from \"./loader-config.js\";\nimport {navigationDestinationFromEncodedValue, navigationZoneFromBaseId} from \"../overworld.js\";\nimport {maybeSolveGeneratorMazeSeed} from \"../generator-maze.js\";\nimport {itemNameFromId} from \"../items.js\";\nimport {ModelReader} from \"./reader.js\";\n\nexport {ModelReader} from \"./reader.js\";\n\nexport function defineLazyProperty(target, key, compute) {\n let cached = null;\n let resolved = false;\n Object.defineProperty(target, key, {\n enumerable: true,\n configurable: true,\n get() {\n if (!resolved) {\n cached = compute();\n resolved = true;\n }\n return cached;\n },\n set(value) {\n cached = value;\n resolved = true;\n }\n });\n return target;\n}\n\n// string on every field of every record while decoding.\nexport function numericFields(bitsToOffsets) {\n return Object.entries(bitsToOffsets)\n .map(([bit, offset]) => ({bit: Number(bit), offset, key: qKey(offset)}))\n .sort((a, b) => a.bit - b.bit);\n}\n\nexport const TWO_FIELD_SPEC = {\n fields: numericFields({1: 20, 2: 24})\n};\n\nexport const LABEL_STATE_SPEC = {\n name: \"label_state\",\n read(reader, record, mask) {\n if (mask & 1) record.blob20 = reader.readBlob();\n if (mask & 2) {\n if (mask & 1) record.blob24 = reader.readBlob();\n else record.q20 = (record.q20 || 0) + reader.readFieldDelta();\n }\n if (mask & 4) record.q28 = (record.q28 || 0) + reader.readFieldDelta();\n if (mask & 8) {\n if (mask & 1) record.q32 = (record.q32 || 0) + reader.readFieldDelta();\n else record.blob28 = reader.readBlob();\n }\n if (mask & 16) record.q36 = (record.q36 || 0) + reader.readFieldDelta();\n }\n};\n\nexport const SIMPLE_LABEL_STATE_SPEC = {\n name: \"label_state\",\n read(reader, record, mask) {\n if (mask & 1) record.blob20 = reader.readBlob();\n if (mask & 2) record.q24 = (record.q24 || 0) + reader.readFieldDelta();\n if (mask & 4) record.q28 = (record.q28 || 0) + reader.readFieldDelta();\n if (mask & 8) record.q32 = (record.q32 || 0) + reader.readFieldDelta();\n if (mask & 16) record.q36 = (record.q36 || 0) + reader.readFieldDelta();\n }\n};\n\nexport function peekStreamInt(reader) {\n let result = 0;\n let shift = 0;\n let offset = reader.offset;\n while (offset < reader.bytes.length) {\n const byte = reader.bytes[offset++];\n result += (byte & 0x7f) * (2 ** shift);\n if ((byte & 0x80) === 0) {\n return {\n value: (result & 1) === 0 ? result / 2 : -((result + 1) / 2),\n offset\n };\n }\n shift += 7;\n if (shift > 53) return null;\n }\n return null;\n}\n\nexport function nextValueLooksLikeTextBlob(reader) {\n const peek = peekStreamInt(reader);\n if (!peek || peek.value <= 0) return false;\n const end = peek.offset + peek.value;\n if (end > reader.bytes.length) return false;\n const blob = reader.bytes.slice(peek.offset, end);\n try {\n const text = decoder.decode(blob);\n return text.length > 0 && !/[\\u0000-\\u0008\\u000e-\\u001f]/.test(text);\n } catch (_) {\n return false;\n }\n}\n\nexport const MODEL_TABLE_SPECS = new Map([\n [0, {\n name: \"transform\",\n packedBits: [{bit: 8, offset: 33}, {bit: 16, offset: 34}, {bit: 32, offset: 35}],\n fields: numericFields({1: 20, 2: 24, 4: 28}),\n scale(record) {\n return {\n x: numberOrNull(record.q20, 40),\n y: numberOrNull(record.q24, 40),\n rot: numberOrNull(record.q28, 127.324)\n };\n }\n }],\n [1, {\n name: \"body_state\",\n fields: numericFields({\n 1: 20, 2: 24, 4: 28, 8: 32, 16: 36, 32: 40, 64: 44, 128: 48,\n 256: 52, 512: 56, 1024: 60, 2048: 64, 4096: 68, 8192: 72,\n 16384: 76, 32768: 80, 65536: 84, 131072: 88, 262144: 92,\n 524288: 96, 1048576: 100, 2097152: 104\n })\n }],\n [2, {name: \"numeric_pair\", ...TWO_FIELD_SPEC}],\n [3, {name: \"gate_width\", fields: numericFields({1: 20, 2: 24, 4: 28, 8: 32, 16: 36, 32: 40})}],\n [4, {name: \"motion_aux\", packedBits: [{bit: 8, offset: 33}], fields: numericFields({1: 20, 2: 24, 4: 28})}],\n [5, {name: \"entity_health\", fields: numericFields({1: 20, 2: 24, 4: 28, 8: 32})}],\n [6, {name: \"item_holder\", ...TWO_FIELD_SPEC}],\n [7, {\n name: \"entity_type\",\n fields: numericFields({1: 20, 2: 24, 4: 28, 8: 32, 16: 36, 32: 40, 64: 44, 128: 48, 256: 52})\n }],\n [8, {name: \"numeric_sparse\", fields: numericFields({1: 20, 2: 24, 4: 28, 8: 32, 16: 36, 32: 40})}],\n [9, LABEL_STATE_SPEC],\n [10, SIMPLE_LABEL_STATE_SPEC],\n [11, {name: \"numeric_sparse\", fields: numericFields({1: 20, 2: 24, 4: 28, 8: 32, 16: 36})}],\n [12, {name: \"numeric_sparse\", fields: numericFields({1: 20, 2: 24, 4: 28, 8: 32})}],\n [14, {name: \"size_state\", fields: numericFields({1: 20, 2: 24, 4: 28, 8: 32, 16: 36, 32: 40, 64: 44})}],\n [16, {\n name: \"label_numeric_state\",\n read(reader, record, mask) {\n if ((mask & 1) && nextValueLooksLikeTextBlob(reader)) {\n SIMPLE_LABEL_STATE_SPEC.read(reader, record, mask);\n return;\n }\n if (mask & 1) record.q20 = (record.q20 || 0) + reader.readFieldDelta();\n if (mask & 2) {\n if (mask & 1) record.blob24 = reader.readBlob();\n else record.q24 = (record.q24 || 0) + reader.readFieldDelta();\n }\n if (mask & 4) record.q28 = (record.q28 || 0) + reader.readFieldDelta();\n if (mask & 8) record.q32 = (record.q32 || 0) + reader.readFieldDelta();\n if (mask & 16) record.q36 = (record.q36 || 0) + reader.readFieldDelta();\n }\n }],\n [17, {name: \"numeric_sparse\", fields: numericFields({1: 20, 2: 24, 4: 28, 8: 32, 16: 36})}],\n [18, {\n name: \"mob_combat_state\",\n fields: numericFields({\n 2: 20,\n 4: 24,\n 8: 28,\n 16: 32,\n 32: 36,\n 64: 40,\n 128: 44,\n 256: 48,\n 512: 52,\n 1024: 56,\n 2048: 60,\n 4096: 64,\n 8192: 68,\n 16384: 72,\n 32768: 76,\n 65536: 80,\n 131072: 84,\n 524288: 88,\n 4194304: 92\n })\n }],\n [19, {name: \"motion_state\", packedBits: [{bit: 4, offset: 29}], ...TWO_FIELD_SPEC}],\n [20, {\n name: \"ship_control\",\n packedBeforeValues: true,\n orderedValues: true,\n packedBits: [{bit: 0x1000, offset: 153}],\n fields: numericFields({\n 1: 20, 2: 24, 4: 28, 32: 32, 64: 36, 128: 40, 256: 44, 512: 48,\n 1024: 52, 2048: 56, 8192: 60, 16384: 64, 32768: 68, 65536: 72,\n 131072: 76, 262144: 80, 524288: 84, 1048576: 88, 2097152: 92,\n 4194304: 96, 8388608: 100, 16777216: 104, 67108864: 108, 134217728: 112\n }),\n blobs: [\n {bit: 8, offset: 116},\n {bit: 16, offset: 128},\n {bit: 33554432, offset: 140}\n ],\n scale(record) {\n return {\n thrustX: numberOrNull(record.q24, 20),\n thrustY: numberOrNull(record.q28, 20),\n value52: numberOrNull(record.q52, 20)\n };\n }\n }],\n [21, {\n name: \"gate_portal\",\n orderedValues: true,\n fields: numericFields({1: 20, 2: 24}),\n blobs: [{bit: 4, offset: 28}, {bit: 8, offset: 40}]\n }],\n [24, {name: \"projectile_state\", packedBits: [{bit: 8, offset: 33}], fields: numericFields({1: 20, 2: 24, 4: 28})}],\n [25, {\n name: \"zone_label\",\n orderedValues: true,\n fields: numericFields({1: 20, 2: 24}),\n blobs: [{bit: 4, offset: 28}, {bit: 8, offset: 40}]\n }],\n [26, {name: \"numeric_single\", fields: numericFields({1: 20})}],\n [31, {name: \"numeric_single\", fields: numericFields({1: 20})}],\n [37, {name: \"loose_item_marker\", packedBits: [{bit: 2, offset: 29}], fields: numericFields({1: 20, 4: 24})}],\n [38, {name: \"flag_state\", packedBits: [{bit: 1, offset: 21}], fields: []}],\n [39, {name: \"comms_transmit\", ...TWO_FIELD_SPEC}],\n [41, {name: \"blob_state\", fields: numericFields({2: 20}), blobs: [{bit: 1, offset: 24}]}],\n [42, {name: \"numeric_pair\", ...TWO_FIELD_SPEC}],\n [43, {name: \"numeric_single\", fields: numericFields({1: 20})}],\n [44, {name: \"numeric_sparse\", fields: numericFields({1: 20, 2: 24, 4: 28, 8: 32})}],\n [45, {name: \"numeric_flag\", packedBits: [{bit: 1, offset: 25}], fields: numericFields({2: 20})}],\n [47, {name: \"flag_state\", packedBits: [{bit: 1, offset: 21}], fields: []}],\n [49, {name: \"processor_cycle\", packedBits: [{bit: 2, offset: 33}], fields: numericFields({1: 20, 4: 24, 8: 28})}],\n [50, {\n name: \"rare_snapshot\",\n packedBits: [{bit: 2, offset: 33}, {bit: 8, offset: 34}, {bit: 32, offset: 35}],\n fields: numericFields({1: 20, 4: 24, 16: 28})\n }],\n [51, {\n name: \"numeric_sparse\",\n fields: numericFields({1: 20, 2: 24, 4: 28, 8: 32, 16: 36, 32: 40, 64: 44, 128: 48, 256: 52})\n }],\n [53, {\n name: \"fabricator\",\n packedBits: [{bit: 2, offset: 61}],\n fields: numericFields({1: 20, 4: 24, 8: 28, 16: 32, 32: 36, 64: 40, 128: 44, 256: 48, 512: 52, 1024: 56})\n }],\n [54, {\n name: \"starter_cannon\",\n fields: numericFields({1: 20, 2: 32, 4: 24, 8: 28, 16: 44, 32: 36, 64: 48, 128: 52, 256: 40, 512: 56, 1024: 60})\n }],\n [55, {\n name: \"player\",\n packedBeforeValues: true,\n fields: numericFields({\n 256: 20, 512: 24, 1024: 28, 2048: 32, 4096: 36, 8192: 40,\n 16384: 44, 32768: 48, 65536: 52, 131072: 56, 262144: 60,\n 524288: 64, 1048576: 68, 2097152: 72, 4194304: 76, 8388608: 80,\n 33554432: 84, 67108864: 88\n }),\n blobs: [{bit: 1, offset: 92}],\n packedBits: [\n {bit: 2, offset: 105},\n {bit: 4, offset: 106},\n {bit: 16, offset: 107},\n {bit: 32, offset: 108},\n {bit: 64, offset: 109},\n {bit: 128, offset: 110},\n {bit: 16777216, offset: 111},\n {bit: 134217728, offset: 112}\n ]\n }],\n [56, {\n name: \"numeric_snapshot\",\n fields: numericFields({1: 20, 2: 24, 4: 28, 8: 32, 16: 36, 64: 40, 256: 44, 1024: 48})\n }],\n [59, {name: \"numeric_sparse\", fields: numericFields({1: 20, 2: 24, 4: 28, 8: 32, 16: 36})}],\n [60, {name: \"fluid_tank\", packedBits: [{bit: 4, offset: 29}], ...TWO_FIELD_SPEC}],\n [61, {name: \"shield_charge\", ...TWO_FIELD_SPEC}],\n [62, {name: \"flag_state\", packedBits: [{bit: 1, offset: 21}], fields: []}],\n [63, {name: \"numeric_pair\", ...TWO_FIELD_SPEC}],\n [67, {name: \"numeric_single\", fields: numericFields({1: 20})}],\n [69, {\n name: \"rare_snapshot\",\n packedBits: [{bit: 32, offset: 41}, {bit: 64, offset: 42}],\n fields: numericFields({1: 20, 2: 24, 4: 28, 8: 32, 16: 36})\n }],\n [70, {\n name: \"rare_snapshot\",\n packedBits: [{bit: 16, offset: 40}],\n fields: numericFields({1: 20, 2: 24, 4: 28, 8: 32, 32: 36})\n }],\n [72, {\n name: \"pusher_config\",\n packedBits: [{bit: 16, offset: 36}],\n fields: numericFields({1: 20, 2: 24, 4: 28, 8: 32, 32: 40})\n }],\n [73, {name: \"expando_box_marker\", fields: []}],\n [74, {name: \"processor_marker\", fields: []}],\n [75, {name: \"rare_snapshot\", fields: numericFields({1: 20, 8: 24, 16: 28})}],\n [76, {name: \"numeric_single\", fields: numericFields({1: 20})}],\n [77, {name: \"numeric_sparse\", fields: numericFields({1: 20, 2: 24, 4: 28})}],\n [78, {\n name: \"local_session_marker\",\n read(reader, record, mask) {\n for (const {bit, key} of TABLE_78_NUMERIC_FIELDS) {\n if (!(mask & bit)) continue;\n record[key] = (record[key] || 0) + reader.readFieldDelta();\n }\n if ((mask & 64) && !(mask & 32)) {\n record.q44 = (record.q44 || 0) + reader.readFieldDelta();\n }\n }\n }]\n]);\n\n// Precompute everything about a spec that is fixed at module load. Decoding a\n// full model packet runs #applyRecordSpec thousands of times, and each run used\n// to rebuild record key strings and -- for ordered specs -- an entire merged,\n// sorted item array.\nfor (const spec of MODEL_TABLE_SPECS.values()) {\n for (const blob of spec.blobs || []) blob.key = blobKey(blob.offset);\n for (const item of spec.packedBits || []) item.key = qKey(item.offset);\n if (spec.packedOffsets) spec.packedOffsetKeys = spec.packedOffsets.map(qKey);\n if (spec.orderedValues) {\n spec.orderedItems = [\n ...(spec.blobs || []).map((item) => ({bit: item.bit, offset: item.offset, key: item.key, kind: \"blob\"})),\n ...(spec.fields || []).map((item) => ({bit: item.bit, offset: item.offset, key: item.key, kind: \"field\"}))\n ].sort((a, b) => a.bit - b.bit);\n }\n}\n\nexport const TABLE_78_NUMERIC_FIELDS = numericFields({1: 20, 2: 24, 4: 28, 8: 32, 16: 36, 32: 40});\n\nexport const WIRE_TAG_TABLES = new Map([\n [1, 0],\n [2, 1],\n [3, 2],\n [4, 3],\n [5, 4],\n [26, 9],\n [40, 5],\n [42, 6],\n [43, 7],\n [44, 8],\n [45, 9],\n [46, 10],\n [47, 11],\n [48, 12],\n [49, 13],\n [50, 14],\n [51, 51],\n [52, 16],\n [74, 17],\n [80, 17],\n [81, 18],\n [82, 19],\n [83, 20],\n [84, 21],\n [85, 22],\n [86, 23],\n [87, 24],\n [88, 25],\n [89, 26],\n [90, 27],\n [91, 28],\n [93, 30],\n [94, 31],\n [95, 32],\n [99, 36],\n [120, 37],\n [121, 38],\n [122, 39],\n [123, 40],\n [124, 41],\n [125, 42],\n [126, 43],\n [127, 44],\n [128, 45],\n [129, 46],\n [130, 47],\n [131, 48],\n [132, 49],\n [133, 50],\n [134, 51],\n [135, 52],\n [136, 53],\n [137, 54],\n [138, 55],\n [139, 56],\n [141, 58],\n [142, 59],\n [143, 60],\n [144, 61],\n [145, 62],\n [146, 63],\n [147, 64],\n [148, 65],\n [149, 66],\n [150, 67],\n [151, 68],\n [152, 69],\n [153, 70],\n [158, 75],\n [160, 76],\n [161, 77],\n [162, 78],\n [163, 72],\n [164, 73],\n [165, 74],\n [166, 75],\n [167, 76],\n [168, 78],\n [169, 77]\n]);\n\nexport const MASK_ONLY_TABLES = new Set([13, 22, 23, 27, 28, 30, 32, 36, 40, 46, 48, 52, 58, 64, 65, 66, 68, 73, 74]);\n\nexport const ENTITY_FOOTPRINTS = new Map([\n [240, {width: 2, height: 2}],\n [247, {width: 2, height: 2}],\n [248, {width: 2, height: 2}],\n [249, {width: 2, height: 2}],\n [251, {width: 2, height: 2}],\n [256, {width: 2, height: 2}],\n [261, {width: 2, height: 2}]\n]);\n\nexport const PLACED_ENTITY_TYPE_IDS = new Set([\n 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 226, 227, 228, 229,\n 230, 231, 240, 241, 242, 243, 245, 246, 247, 248, 249, 250, 251, 252,\n 253, 255, 256, 257, 258, 259, 260, 261, 263, 264, 265\n]);\n\nexport const FabricatorType = Object.freeze({\n Starter: \"starter\",\n Munitions: \"munitions\",\n Engineering: \"engineering\",\n Equipment: \"equipment\"\n});\n\nexport const FABRICATOR_TYPES = new Map([\n [0, FabricatorType.Starter],\n [1, FabricatorType.Munitions],\n [2, FabricatorType.Engineering],\n [3, FabricatorType.Equipment]\n]);\n\nexport const HELM_TYPE_IDS = new Set([215, 216]);\nexport const COMMS_STATION_TYPE_ID = 217;\nexport const COMMS_STATION_MAX_CHARGES = 5;\nexport const CARGO_HATCH_TYPE_IDS = new Set([221, 222]);\nexport const THRUSTER_TYPE_IDS = new Set([230, 231]);\nexport const EXPANDO_BOX_TYPE_ID = 240;\nexport const ITEM_LAUNCHER_TYPE_ID = 243;\nexport const LOADER_TYPE_ID = 252;\nexport const NAVIGATION_UNIT_TYPE_ID = 261;\n\nexport function entityTypeIdFromRecord(record) {\n if (!record) return null;\n const candidates = [\n record.q20,\n record.q24,\n record.q28,\n record.q32,\n record.q36,\n record.q40,\n record.q44,\n record.q48,\n record.q52\n ].filter((value) => Number.isFinite(Number(value)) && Number(value) !== 0).map(Number);\n return candidates.find((value) => PLACED_ENTITY_TYPE_IDS.has(value)) ?? candidates[0] ?? null;\n}\n\nexport const CANNON_AMMO_COLOR_ITEM_IDS = new Map([\n [0xff9600, 150]\n]);\n\nexport const CANNON_TYPE_IDS = new Set([226, 227, 228, 229, 263, 265]);\n\nexport const THRUSTER_FACING_NAMES = new Map([\n [0, \"bottom\"],\n [1, \"top\"],\n [2, \"right\"],\n [3, \"left\"],\n [4, \"bottom-right\"],\n [5, \"bottom-left\"],\n [6, \"top-right\"],\n [7, \"top-left\"]\n]);\n\nexport const DEFAULT_OVERWORLD_WARP_DURATION_SECONDS = 120;\nexport const OVERWORLD_WARP_TICKS_PER_SECOND = 20;\n\nexport const MARKER_TYPE_IDS = new Map([\n [73, 240]\n]);\n\nexport const TEAM_RANK_NAMES = new Map([\n [0, \"Guest\"],\n [1, \"Crew\"],\n [2, \"CrewInvitePending_DEPRECATED\"],\n [3, \"Captain\"],\n [4, \"Banned\"]\n]);\n\nexport const PLAYER_SHIP_RANKS = new Map([\n [0, \"guest\"],\n [1, \"crew\"],\n [2, \"crew-invite-pending-deprecated\"],\n [3, \"captain\"],\n [4, \"banned\"]\n]);\n\nexport const PUSHER_MODE_NAMES = new Map([\n [0, \"Push\"],\n [1, \"Pull\"],\n [2, \"Do Nothing\"]\n]);\n\nexport const SIGN_DISPLAY_MODE_NAMES = new Map([\n [0, \"always\"],\n [1, \"when-near\"],\n [2, \"on-hover\"]\n]);\n\nexport const SHIELD_GENERATOR_BOOST_STATE_NAMES = new Map([\n [0, \"inactive\"],\n [1, \"boosted\"],\n [2, \"failed\"]\n]);\n\nexport const NAVIGATION_DEFAULT_DESTINATION = 10;\n\nexport function navigationDestinationName(destination) {\n return navigationZoneFromBaseId(destination)?.key ?? null;\n}\n\nexport function isNavigationDestination(destination) {\n return navigationDestinationName(destination) != null;\n}\n\nexport function numberOrNull(value, divisor = 1) {\n return typeof value === \"number\" ? value / divisor : null;\n}\n\nexport function qKey(offset) {\n return `q${offset}`;\n}\n\nexport function blobKey(offset) {\n return `blob${offset}`;\n}\n\n// Blob fields stay expanded to plain arrays: that shape is part of the public\n// record surface. Avoiding the Object.entries pair array is the win available\n// without changing what callers see.\nexport function cloneRecord(record) {\n const out = {};\n for (const key in record) {\n const value = record[key];\n out[key] = value instanceof Uint8Array ? Array.from(value) : value;\n }\n return out;\n}\n\nexport function firstRecord(records, predicate = null) {\n for (const record of records.values()) {\n if (!predicate || predicate(record)) return record;\n }\n return null;\n}\n\nexport const TABLE_78_FIELD_BITS = [\n [\"q20\", 1],\n [\"q24\", 2],\n [\"q28\", 4],\n [\"q32\", 8],\n [\"q36\", 16],\n [\"q40\", 32],\n [\"q44\", 64]\n];\n\nexport function table78DeltaRecord(changed) {\n const record = {lastMask: changed.mask};\n for (const [field, bit] of TABLE_78_FIELD_BITS) {\n if (!(changed.mask & bit)) continue;\n if (field === \"q44\" && ((changed.mask & 32) || changed.record?.q44 == null)) continue;\n record[field] = (changed.record?.[field] ?? 0) - (changed.previous?.[field] ?? 0);\n }\n return record;\n}\n\nexport function isSemanticLoaderDelta(changed, full) {\n return !full &&\n changed.previous != null &&\n (changed.mask & 96) === 96;\n}\n\nexport function decodeText(blob) {\n if (!(blob instanceof Uint8Array)) return null;\n try {\n return decoder.decode(blob);\n } catch (_) {\n return null;\n }\n}\n\nexport function entityNameFromType(typeId) {\n return itemNameFromId(typeId);\n}\n\nexport function markerTypeIdForTables(tableIds) {\n for (const tableId of tableIds) {\n if (MARKER_TYPE_IDS.has(tableId)) return MARKER_TYPE_IDS.get(tableId);\n }\n return null;\n}\n\nexport function itemSummary(itemId, count = null) {\n const id = itemId == null ? null : Number(itemId);\n const normalizedId = Number.isFinite(id) && id !== 0 ? id : null;\n return {\n itemId: normalizedId,\n itemName: normalizedId == null ? null : entityNameFromType(normalizedId),\n count: count === 0 ? null : count\n };\n}\n\nexport function summarizeItemHolder(entity, record) {\n if (!record) return null;\n return {\n entity,\n ...itemSummary(record.q20, record.q24 ?? null)\n };\n}\n\nexport function boundedProgress(value) {\n if (value == null) return null;\n const number = Number(value);\n if (!Number.isFinite(number)) return null;\n return Math.max(0, Math.min(100, number));\n}\n\nexport function summarizeFabricator(entity, record, itemHolderRecord = null, typeRecord = null) {\n if (!record) return null;\n const progressRaw = record.q24 ?? null;\n const craftingItem = itemSummary(itemHolderRecord?.q20, itemHolderRecord?.q24 ?? null);\n return {\n entity,\n type: FABRICATOR_TYPES.get(typeRecord?.q32) ?? null,\n typeIndex: typeRecord?.q32 ?? null,\n state: cloneRecord(record),\n rows: [\n itemSummary(record.q28, record.q40 ?? null),\n itemSummary(record.q32, record.q44 ?? null),\n itemSummary(record.q36, record.q48 ?? null)\n ],\n progress: boundedProgress(progressRaw),\n progressRaw,\n active: Boolean(record.q61) || (typeof progressRaw === \"number\" && progressRaw > 0),\n craftingItemId: craftingItem.itemId,\n craftingItemName: craftingItem.itemName,\n craftingCount: craftingItem.count\n };\n}\n\nexport function summarizeCargoEjector(entity, typeId, record) {\n if (typeId !== 223) return null;\n return {\n entity,\n typeId,\n typeName: entityNameFromType(typeId),\n progress: boundedProgress(record?.q24 ?? null),\n active: record?.q33 == null ? null : Boolean(record.q33)\n };\n}\n\nexport function summarizeCannon(entity, record, typeId = null) {\n if (!record || !CANNON_TYPE_IDS.has(typeId)) return null;\n const ammoItemId = record.q24 == null ? null : CANNON_AMMO_COLOR_ITEM_IDS.get(record.q24) ?? null;\n const charge = record.q40 ?? null;\n const recoil = record.q36 ?? null;\n const recoil2 = record.q48 ?? null;\n return {\n entity,\n typeId,\n typeName: entityNameFromType(typeId),\n ammoItemId,\n ammoName: entityNameFromType(ammoItemId),\n ammoCount: record.q28 ?? 0,\n aim: record.q32 ?? null,\n recoil,\n recoil2,\n recoils: [recoil, recoil2],\n charge,\n charged: charge == null ? null : charge >= 50,\n spin: record.q52 ?? null,\n coolingCellCount: record.q56 ?? 0,\n state: cloneRecord(record)\n };\n}\n\nexport function summarizeThruster(entity, typeId, record) {\n if (!THRUSTER_TYPE_IDS.has(typeId)) return null;\n const facing = Number.isFinite(Number(record?.q20)) ? Number(record.q20) : 0;\n return {\n entity,\n typeId,\n typeName: entityNameFromType(typeId),\n facing,\n facingName: enumValueName(THRUSTER_FACING_NAMES, facing),\n fuel: record?.q24 ?? null,\n state: cloneRecord(record || {})\n };\n}\n\nexport function summarizeHelm(entity, typeId, occupied = false) {\n if (!HELM_TYPE_IDS.has(typeId)) return null;\n return {\n entity,\n typeId,\n typeName: entityNameFromType(typeId),\n occupied: Boolean(occupied)\n };\n}\n\nexport function navigationDestinationFromRecord(record, changedMask = record?.lastMask ?? 0) {\n if (!record) return NAVIGATION_DEFAULT_DESTINATION;\n const q32Destination = navigationDestinationFromEncodedValue(record.q32);\n const q36Destination = navigationDestinationFromEncodedValue(record.q36);\n const q24Destination = navigationDestinationFromEncodedValue(record.q24);\n const q20Destination = navigationDestinationFromEncodedValue(record.q20);\n if ((changedMask & 9) === 9 && record.q20 === 0 && record.q24 == null && q32Destination != null) return q32Destination;\n if ((changedMask & 25) === 25 && record.q20 === 0 && record.q24 == null && q32Destination != null) return q32Destination;\n if ((changedMask & 17) === 17 && record.q20 === 0 && record.q24 == null && record.q32 == null && q36Destination != null) return q36Destination;\n if (changedMask === 1 && q20Destination != null) return q20Destination;\n if ((changedMask & 1) && q20Destination != null && record.q20 !== 0) return q20Destination;\n if (record.q20 === 0 && q24Destination != null) return q24Destination;\n return q20Destination ?? NAVIGATION_DEFAULT_DESTINATION;\n}\n\nexport function summarizeNavigationUnit(entity, typeId, record, trackedState = null) {\n if (typeId !== NAVIGATION_UNIT_TYPE_ID || !record) return null;\n const destination = trackedState?.destination ?? navigationDestinationFromRecord(record);\n return {\n entity,\n destination,\n destinationName: navigationDestinationName(destination),\n autoWarpOnShieldFailure: trackedState?.shieldFailure ?? null,\n autoWarpOnNoCaptains: trackedState?.noCaptains ?? null,\n state: cloneRecord(record)\n };\n}\n\nexport function summarizeCommsStation(entity, typeId, record, occupied = false) {\n if (typeId !== COMMS_STATION_TYPE_ID) return null;\n const charges = record?.q20 ?? null;\n return {\n entity,\n typeId,\n typeName: entityNameFromType(typeId),\n charges,\n maxCharges: COMMS_STATION_MAX_CHARGES,\n chargeRatio: typeof charges === \"number\" ? charges / COMMS_STATION_MAX_CHARGES : null,\n occupied: Boolean(occupied),\n state: record ? cloneRecord(record) : {}\n };\n}\n\nexport function summarizeHealth(entity, record) {\n if (!record) return null;\n const maxHp = record.q20 ?? null;\n const hp = record.q24 ?? null;\n return {\n entity,\n hp,\n maxHp,\n ratio: typeof hp === \"number\" && typeof maxHp === \"number\" && maxHp !== 0 ? hp / maxHp : null,\n state: cloneRecord(record)\n };\n}\n\nexport function summarizeBot(entity, {\n health,\n table2Record,\n smallRecord,\n combatRecord,\n motionRecord,\n table10Record,\n table51Record,\n itemCrate,\n player,\n shipControl\n}) {\n if (!health || itemCrate || player || shipControl || isBoulderBotExclusion(health, table2Record, combatRecord)) return null;\n const className = botClassFromState({\n health,\n table2Record,\n smallRecord,\n combatRecord,\n table10Record,\n table51Record\n });\n return {\n entity,\n className,\n identifier: botIdentifierFromState({combatRecord, motionRecord, smallRecord}),\n typeA: health.state?.q28 ?? null,\n typeB: health.state?.q32 ?? null\n };\n}\n\nexport function isBoulderBotExclusion(health, table2Record, combatRecord) {\n return Boolean(\n health?.maxHp === 2000 &&\n health?.state?.q28 === 30 &&\n health?.state?.q32 != null &&\n table2Record?.q20 != null &&\n table2Record?.q24 == null &&\n !combatRecord\n );\n}\n\nexport function botClassFromState({health, table2Record, smallRecord, combatRecord, table10Record, table51Record}) {\n if (isYellowMineGuardBotState({health, smallRecord, combatRecord, table2Record})) return \"yellow-mine-guard\";\n if (isShieldHelperBotState({health, table2Record})) return \"shield-helper\";\n if (isShieldMasterBotState({health, table2Record})) return \"shield-master\";\n if (isLazerEnthusiastBotState({health, table2Record, table10Record, table51Record})) return \"lazer-enthusiast\";\n if (isCowardBossState({health})) return \"the-coward\";\n if (isOrangeFoolBotState({combatRecord})) return \"orange-fool\";\n if (isZombieBossBotState({health, table2Record, combatRecord})) return \"zombie-boss\";\n if (combatRecord?.q20 === 762523904) return \"zombie\";\n if (combatRecord?.q20 === 1967883008) return \"zombie-hunter\";\n if (combatRecord?.q20 === 945371904) return \"zombie-tank\";\n if (isRedSentryBotState({health, table2Record, combatRecord})) return \"red-sentry\";\n if (isRedSniperBotState({health, table2Record})) return \"red-sniper\";\n if (isBlueRusherBotState({health, table2Record, combatRecord})) return \"blue-rusher\";\n if (isYellowHunterBotState({health, table2Record, combatRecord})) return \"yellow-hunter\";\n if (isAquaShielderBotState({health, table2Record, combatRecord})) return \"aqua-shielder\";\n if (table2Record) return \"table2-bot\";\n if (combatRecord) return \"combat-bot\";\n return \"bot\";\n}\n\nexport function isCowardBossState({health}) {\n return health?.state?.q28 === 70 && health?.state?.q32 === 78;\n}\n\nexport function isOrangeFoolBotState({combatRecord}) {\n return combatRecord?.q20 === -427551232 && combatRecord?.q24 === 1 && combatRecord?.q72 === 3;\n}\n\nexport function isZombieBossBotState({health, table2Record, combatRecord}) {\n return (\n combatRecord?.q20 === -430233088 &&\n health?.state?.q28 === 30 &&\n health?.state?.q32 === 166 &&\n table2Record?.q20 === 320 &&\n table2Record?.q24 === -900\n );\n}\n\nexport function isRedSentryBotState({health, table2Record, combatRecord}) {\n return (\n combatRecord?.q20 === 508251904 && combatRecord?.q72 === 2 ||\n health?.state?.q28 === 70 && health?.state?.q32 === 166 && table2Record?.q20 === 320 && table2Record?.q24 === -900\n );\n}\n\nexport function isBlueRusherBotState({health, table2Record, combatRecord}) {\n return (\n combatRecord?.q20 === 1113052928 && combatRecord?.q72 === 2 ||\n health?.state?.q28 === 30 && health?.state?.q32 === 34 && table2Record?.q20 === 80 && table2Record?.q24 === -900\n );\n}\n\nexport function isRedSniperBotState({health, table2Record}) {\n return health?.state?.q28 === 35 && health?.state?.q32 === 89 && table2Record?.q20 === 180 && table2Record?.q24 === -900;\n}\n\nexport function isYellowHunterBotState({health, table2Record, combatRecord}) {\n return (\n combatRecord?.q20 === -775665152 && combatRecord?.q72 === 4 && combatRecord?.q44 === -944515328 ||\n health?.state?.q28 === 30 && health?.state?.q32 === 56 && table2Record?.q20 === 120 && table2Record?.q24 === -900\n );\n}\n\nexport function isAquaShielderBotState({health, table2Record, combatRecord}) {\n return (\n combatRecord?.q20 === 13697024 && combatRecord?.q24 === 1 ||\n health?.state?.q28 === 50 && health?.state?.q32 === 122 && table2Record?.q20 === 240 && table2Record?.q24 === -900\n );\n}\n\nexport function isLazerEnthusiastBotState({health, table2Record, table10Record, table51Record}) {\n return (\n health?.state?.q28 === 140 &&\n health?.state?.q32 === 155 &&\n table2Record?.q20 === 300 &&\n table2Record?.q24 === -900 &&\n Boolean(table10Record) &&\n Boolean(table51Record)\n );\n}\n\nexport function isYellowMineGuardBotState({health, smallRecord, combatRecord, table2Record}) {\n return (\n health?.state?.q28 === 30 &&\n health?.state?.q32 === 33 &&\n smallRecord?.q20 === 78 &&\n smallRecord?.q24 === 78 &&\n combatRecord?.q24 === -995542016 &&\n !table2Record\n );\n}\n\nexport function isShieldHelperBotState({health, table2Record}) {\n return health?.state?.q28 === 30 && health?.state?.q32 === 33 && health?.maxHp === 1000 && !table2Record;\n}\n\nexport function isShieldMasterBotState({health, table2Record}) {\n return health?.state?.q28 === 190 && health?.state?.q32 === 210 && health?.maxHp === 15000 && Boolean(table2Record);\n}\n\nexport function botIdentifierFromState({combatRecord, motionRecord, smallRecord}) {\n if (combatRecord) return `t18:${combatRecord.q20 ?? \"-\"}:${combatRecord.q24 ?? \"-\"}:${combatRecord.q72 ?? \"-\"}`;\n if (motionRecord) return `t19:${motionRecord.q20 ?? \"-\"}:${motionRecord.q24 ?? \"-\"}`;\n if (smallRecord) return `t3:${smallRecord.q20 ?? \"-\"}:${smallRecord.q24 ?? \"-\"}`;\n return \"-\";\n}\n\nexport function summarizeShieldGenerator(entity, shieldRecord = null, itemHolderRecord = null, boostRecord = null) {\n const charge = shieldRecord?.q20 ?? 0;\n const maxCharge = 5000;\n const efficiencyPercent = shieldRecord?.q24 ?? null;\n const storedItem = itemSummary(itemHolderRecord?.q20 ?? null, itemHolderRecord?.q24 ?? null);\n const boostState = boostRecord?.q24 ?? 0;\n const boostTimer = boostRecord?.q28 ?? 0;\n const puzzleSeed = boostRecord?.q20 ?? null;\n const summary = {\n entity,\n charge,\n maxCharge,\n chargeRatio: typeof charge === \"number\" ? charge / maxCharge : null,\n efficiencyPercent,\n efficiency: typeof efficiencyPercent === \"number\" ? efficiencyPercent / 100 : null,\n storedItemId: storedItem.itemId,\n storedItemName: storedItem.itemName,\n storedItemCount: storedItem.count,\n hasShieldCore: storedItem.itemId === 123,\n boostState,\n boostStateName: enumValueName(SHIELD_GENERATOR_BOOST_STATE_NAMES, boostState),\n boostTimer,\n boostActive: boostState !== 0 || boostTimer > 0,\n puzzleSeed,\n // Replaced in place below by a lazy accessor; declared here so the key keeps\n // its original position in the object.\n puzzleSolution: null,\n state: cloneRecord(shieldRecord || {}),\n itemState: cloneRecord(itemHolderRecord || {}),\n boostStateRaw: cloneRecord(boostRecord || {})\n };\n // Solving the maze costs ~190us and was by far the most expensive step of a\n // model rebuild, run for every shield generator whether or not the caller\n // ever looks at the solution. Defer it to first read.\n return defineLazyProperty(summary, \"puzzleSolution\", () => maybeSolveGeneratorMazeSeed(puzzleSeed));\n}\n\nexport function summarizeShipControl(entity, record) {\n if (!record) return null;\n const color = record.q32 == null ? null : Number(record.q32);\n const shieldMaxHpOffset = typeof record.q68 === \"number\" ? record.q68 : null;\n const shieldMaxHp = shieldMaxHpOffset == null ? null : shieldMaxHpOffset + 2000;\n const shieldBaseHp = typeof record.q72 === \"number\" ? record.q72 : null;\n const activeTankHp = typeof record.q76 === \"number\" ? record.q76 : null;\n const inactiveTankHp = typeof record.q80 === \"number\" ? record.q80 : null;\n const tankValues = [activeTankHp, inactiveTankHp].filter((value) => typeof value === \"number\");\n const warpTicks = typeof record.q84 === \"number\" ? record.q84 : null;\n const warpElapsedSeconds = warpTicks == null ? null : warpTicks / OVERWORLD_WARP_TICKS_PER_SECOND;\n const warpDurationSeconds = warpTicks == null ? null : record.q88 ?? DEFAULT_OVERWORLD_WARP_DURATION_SECONDS;\n const warpRemainingSeconds = warpElapsedSeconds == null ? null : Math.max(0, warpDurationSeconds - warpElapsedSeconds);\n return {\n entity,\n name: decodeText(record.blob116),\n hexCode: decodeText(record.blob128),\n shipWorldId: record.q20 ?? null,\n color: Number.isFinite(color) ? color : null,\n colorCss: Number.isFinite(color) ? colorToCss(color) : null,\n thrustX: numberOrNull(record.q24, 20),\n thrustY: numberOrNull(record.q28, 20),\n value52: numberOrNull(record.q52, 20),\n value84: numberOrNull(record.q84, 20),\n value96: numberOrNull(record.q96, 1000),\n shield: shieldMaxHp == null && shieldBaseHp == null && !tankValues.length ? null : {\n maxHp: shieldMaxHp,\n baseHp: shieldBaseHp,\n activeTankHp,\n inactiveTankHp,\n tankValues\n },\n warp: warpTicks == null ? null : {\n active: record.q28 === 3,\n ticks: warpTicks,\n elapsedSeconds: warpElapsedSeconds,\n durationSeconds: warpDurationSeconds,\n remainingSeconds: warpRemainingSeconds\n },\n state: cloneRecord(record)\n };\n}\n\nexport function summarizeShipSize(entity, record) {\n if (!record) return null;\n return {\n entity,\n width: record.q20 == null ? null : Math.round(record.q20 / 10),\n height: record.q24 == null ? null : Math.round(record.q24 / 10),\n rawWidth: record.q20 ?? null,\n rawHeight: record.q24 ?? null,\n state: cloneRecord(record)\n };\n}\n\nexport function summarizeShipWorldMetadata(lockdownRecord, shipRecord) {\n if (!lockdownRecord && !shipRecord) return null;\n const color = shipRecord?.q24 == null ? null : Number(shipRecord.q24);\n const lockdownCountdownSeconds = typeof lockdownRecord?.q20 === \"number\" ? lockdownRecord.q20 : null;\n const onlineShipOwnerCount = typeof lockdownRecord?.q24 === \"number\" ? lockdownRecord.q24 : null;\n const requiredShipOwnerCount = typeof lockdownRecord?.q28 === \"number\" ? lockdownRecord.q28 : null;\n return {\n name: decodeText(shipRecord?.blob20),\n color: Number.isFinite(color) ? color : null,\n colorCss: Number.isFinite(color) ? colorToCss(color) : null,\n width: typeof shipRecord?.q32 === \"number\" ? shipRecord.q32 : null,\n height: typeof shipRecord?.q36 === \"number\" ? shipRecord.q36 : null,\n lockdownTimerSeconds: lockdownCountdownSeconds,\n lockdownCountdownSeconds,\n onlineShipOwnerCount,\n requiredShipOwnerCount,\n allShipOwnersOnline: onlineShipOwnerCount == null || requiredShipOwnerCount == null ? null : onlineShipOwnerCount >= requiredShipOwnerCount,\n lockdownEngaged: lockdownCountdownSeconds == null ? null : lockdownCountdownSeconds > 0,\n lockdownState: cloneRecord(lockdownRecord || {}),\n shipState: cloneRecord(shipRecord || {})\n };\n}\n\nexport function summarizeItemCrate(entity, sizeRecord, itemRecord = null, healthRecord = null) {\n if (!sizeRecord) return null;\n const itemId = itemRecord?.q20 ?? null;\n const count = itemRecord?.q24 ?? null;\n return {\n entity,\n ...itemSummary(itemId, count),\n width: sizeRecord.q20 ?? null,\n height: sizeRecord.q24 ?? null,\n itemState: cloneRecord(itemRecord || healthRecord || {}),\n sizeState: cloneRecord(sizeRecord)\n };\n}\n\nexport function scaledSizeSummary(record) {\n if (!record) return null;\n const rawWidth = record.q20 ?? null;\n const rawHeight = record.q24 ?? null;\n return {\n width: rawWidth == null ? null : rawWidth / 10,\n height: rawHeight == null ? null : rawHeight / 10,\n rawWidth,\n rawHeight,\n state: cloneRecord(record)\n };\n}\n\nexport function summarizeExpandoBox(entity, itemHolderRecord, sizeRecord) {\n if (!itemHolderRecord && !sizeRecord) return null;\n const size = scaledSizeSummary(sizeRecord);\n return {\n entity,\n ...itemSummary(itemHolderRecord?.q20 ?? null, itemHolderRecord?.q24 ?? null),\n width: size?.width ?? null,\n height: size?.height ?? null,\n rawWidth: size?.rawWidth ?? null,\n rawHeight: size?.rawHeight ?? null,\n itemState: cloneRecord(itemHolderRecord || {}),\n sizeState: cloneRecord(sizeRecord || {})\n };\n}\n\nexport function summarizeHoverOutline(entity, record) {\n const size = scaledSizeSummary(record);\n if (!size) return null;\n return {entity, ...size};\n}\n\nexport function summarizeMapMarker(entity, labelRecord, zoneRecord = null, sizeRecord = null) {\n if (!labelRecord && !zoneRecord) return null;\n const title = decodeText(zoneRecord?.blob28) ?? decodeText(labelRecord?.blob20);\n const key = decodeText(labelRecord?.blob24) ?? decodeText(labelRecord?.blob28);\n const description = decodeText(zoneRecord?.blob40);\n const color = zoneRecord?.q20 ?? labelRecord?.q28 ?? null;\n const accentColor = zoneRecord?.q24 ?? labelRecord?.q32 ?? null;\n const kind = key === \"mine\" ? \"mining_zone\" : key === \"dock\" ? \"dock\" : zoneRecord ? \"portal\" : \"marker\";\n return {\n entity,\n kind,\n title,\n key,\n description,\n color,\n colorCss: color != null && Number.isFinite(Number(color)) ? colorToCss(Number(color)) : null,\n accentColor,\n accentColorCss: accentColor != null && Number.isFinite(Number(accentColor)) ? colorToCss(Number(accentColor)) : null,\n width: sizeRecord?.q20 ?? null,\n height: sizeRecord?.q24 ?? null,\n labelState: cloneRecord(labelRecord || {}),\n zoneState: cloneRecord(zoneRecord || {})\n };\n}\n\nexport function summarizeDockingSpring(entity, springRecord, bodyRecord = null, sizeRecord = null) {\n if (!springRecord || bodyRecord?.q32 !== -1 || sizeRecord?.q20 !== 160 || sizeRecord?.q24 !== 160) return null;\n return {\n entity,\n id: springRecord.q20 ?? null,\n width: sizeRecord.q20,\n height: sizeRecord.q24,\n state: cloneRecord(springRecord)\n };\n}\n\nexport function summarizeHugeThruster(entity, markerRecord, sizeRecord = null) {\n if (!markerRecord || sizeRecord?.q20 !== 320 || sizeRecord?.q24 !== 160) return null;\n return {\n entity,\n width: sizeRecord.q20,\n height: sizeRecord.q24,\n state: cloneRecord(markerRecord)\n };\n}\n\nexport function summarizeLoader(entity, loaderRecord, loaderFilterRecord = null, filterSlotsRecord = null, tracker = null, includeDefaults = false, itemHolderRecord = null) {\n if (!loaderRecord && !loaderFilterRecord && !includeDefaults) return null;\n const config = tracker?.getConfig(null, entity, loaderRecord, loaderFilterRecord, filterSlotsRecord) ?? {};\n const hasLoaderState = Boolean(loaderRecord);\n const hasPositionConfig = Boolean(tracker?.hasPositionConfig(null, entity));\n const pick = hasLoaderState && hasPositionConfig ? config.pick ?? null : null;\n const place = hasLoaderState && hasPositionConfig ? config.place ?? null : null;\n const priority = config.priority ?? 0;\n const filterMode = config.filterMode ?? null;\n const heldItem = itemSummary(itemHolderRecord?.q20, itemHolderRecord?.q24 ?? null);\n return {\n entity,\n pick,\n pickName: enumValueName(LOADER_POSITION_NAMES, pick),\n place,\n placeName: enumValueName(LOADER_POSITION_NAMES, place),\n priority,\n priorityName: enumValueName(LOADER_PRIORITY_NAMES, priority),\n requireOutput: config.requireOutput ?? false,\n waitForStack: config.waitForStack ?? false,\n stack: config.stack ?? 16,\n cycle: Math.max(1, config.cycle ?? 1),\n filterMode,\n filterModeName: enumValueName(LOADER_FILTER_MODE_NAMES, filterMode),\n filterSlots: config.filterSlots ?? null,\n heldItemId: heldItem.itemId,\n heldItemName: heldItem.itemName,\n heldCount: heldItem.count,\n active: heldItem.itemId != null,\n progress: null,\n state: cloneRecord(loaderRecord || {}),\n filterState: cloneRecord(loaderFilterRecord || {}),\n filterSlotsState: cloneRecord(filterSlotsRecord || {})\n };\n}\n\nexport function summarizeCargoHatch(entity, typeId, filterRecord = null, filterSlotsRecord = null, animationRecord = null) {\n if (!CARGO_HATCH_TYPE_IDS.has(typeId)) return null;\n const filterMode = filterRecord?.q20 ?? 0;\n return {\n entity,\n typeId,\n typeName: entityNameFromType(typeId),\n filterMode,\n filterModeName: enumValueName(LOADER_FILTER_MODE_NAMES, filterMode),\n filterSlots: filterSlotsRecord ? [filterSlotsRecord.q20 ?? null, filterSlotsRecord.q24 ?? null, filterSlotsRecord.q28 ?? null] : null,\n openFraction: animationRecord?.q20 == null ? null : boundedProgress(animationRecord.q20) / 100,\n filterState: cloneRecord(filterRecord || {}),\n filterSlotsState: cloneRecord(filterSlotsRecord || {})\n };\n}\n\nexport function summarizePusher(entity, pusherRecord, filterSlotsRecord = null) {\n if (!pusherRecord) return null;\n const mode = pusherRecord.q20 == null ? 2 : pusherRecord.q20 + 2;\n const filteredMode = pusherRecord.q24 ?? 0;\n return {\n entity,\n mode,\n modeName: enumValueName(PUSHER_MODE_NAMES, mode),\n filteredMode,\n filteredModeName: enumValueName(PUSHER_MODE_NAMES, filteredMode),\n angle: numberOrNull(pusherRecord.q28, 10),\n speed: pusherRecord.q32 == null ? 20 : (pusherRecord.q32 / 100) + 20,\n length: pusherRecord.q40 == null ? 1000 : ((pusherRecord.q40 + 50) / 10) + 995,\n filterInventory: pusherRecord.q36 === 1,\n filterSlots: filterSlotsRecord ? [filterSlotsRecord.q20 ?? null, filterSlotsRecord.q24 ?? null, filterSlotsRecord.q28 ?? null] : null,\n state: cloneRecord(pusherRecord),\n filterSlotsState: cloneRecord(filterSlotsRecord || {})\n };\n}\n\nexport function summarizePusherBeam(entity, beamRecord) {\n if (!beamRecord) return null;\n const lengthRaw = beamRecord.q20 ?? 0;\n const mode = beamRecord.q24 ?? 2;\n return {\n entity,\n active: mode !== 2,\n mode,\n modeName: enumValueName(PUSHER_MODE_NAMES, mode),\n lengthRaw,\n length: lengthRaw / 10,\n state: cloneRecord(beamRecord)\n };\n}\n\nexport function normalizeDegrees(value) {\n if (!Number.isFinite(Number(value))) return null;\n return ((Number(value) % 360) + 360) % 360;\n}\n\nexport function summarizeItemLauncher(entity, typeId, launcherRecord) {\n if (typeId !== ITEM_LAUNCHER_TYPE_ID || !launcherRecord) return null;\n const angleRadians = numberOrNull(launcherRecord.q32 ?? 0, 200);\n return {\n entity,\n angleRaw: launcherRecord.q32 ?? null,\n angleRadians,\n angleDegrees: angleRadians == null ? null : normalizeDegrees((angleRadians * 180) / Math.PI),\n state: cloneRecord(launcherRecord)\n };\n}\n\nexport function summarizeSign(entity, signRecord) {\n if (!signRecord) return null;\n const displayMode = signRecord.q20 ?? 0;\n return {\n entity,\n text: decodeText(signRecord.blob24) ?? \"\",\n displayMode,\n displayModeName: enumValueName(SIGN_DISPLAY_MODE_NAMES, displayMode),\n state: cloneRecord(signRecord)\n };\n}\n\nexport function summarizeShieldProjector(entity, projectorRecord) {\n return {\n entity,\n active: projectorRecord?.q21 !== 0,\n state: cloneRecord(projectorRecord || {})\n };\n}\n\nexport function summarizeSpawnPoint(entity, spawnRecord) {\n const rank = Number.isFinite(Number(spawnRecord?.q20)) ? Number(spawnRecord.q20) : 0;\n return {\n entity,\n rank,\n rankName: enumValueName(TEAM_RANK_NAMES, rank),\n state: cloneRecord(spawnRecord || {})\n };\n}\n\nexport function summarizeDoor(entity, rankRecord, doorRecord) {\n const rank = Number.isFinite(Number(rankRecord?.q20)) ? Number(rankRecord.q20) : 0;\n return {\n entity,\n rank,\n rankName: enumValueName(TEAM_RANK_NAMES, rank),\n open: doorRecord?.q21 === 1,\n rankState: cloneRecord(rankRecord || {}),\n state: cloneRecord(doorRecord || {})\n };\n}\n\nexport function enumValueName(map, value) {\n return value == null ? null : map.get(value) ?? null;\n}\n\nexport function colorToCss(color) {\n return `rgb(${(color >> 16) & 0xff},${(color >> 8) & 0xff},${color & 0xff})`;\n}\n\nexport function previewActionName(color) {\n if (color === 0x00ff00) return \"place\";\n if (color === 0xff0000) return \"break\";\n if (color === 0x0000ff) return \"blueprint\";\n return null;\n}\n\nexport function bitOffsets(value) {\n if (!Number.isSafeInteger(value) || value < 1) return [];\n let bits = BigInt(value);\n const offsets = [];\n let offset = 0;\n while (bits > 0n && offset < 64) {\n if (bits & 1n) offsets.push(offset);\n bits >>= 1n;\n offset++;\n }\n return offsets;\n}\n\nexport function summarizeBlueprintPreview(entity, record, transformRecord = null) {\n if (!record || record.q20 == null) return null;\n const rawBits = Number.isSafeInteger(Number(record.q24)) ? Number(record.q24) : null;\n const bits = rawBits == null ? 1 : rawBits + 1;\n const placementOffsets = bitOffsets(bits);\n const transform = transformRecord ? {\n entity,\n x: numberOrNull(transformRecord.q20, 40),\n y: numberOrNull(transformRecord.q24, 40),\n rot: numberOrNull(transformRecord.q28, 127.324)\n } : null;\n return {\n entity,\n itemId: record.q20,\n itemName: entityNameFromType(record.q20),\n bits,\n rawBits,\n placementOffsets,\n placementCount: placementOffsets.length,\n placements: placementOffsets.map((offset) => ({\n offset,\n x: transform?.x == null ? null : transform.x + offset,\n y: transform?.y ?? null,\n itemId: record.q20,\n itemName: entityNameFromType(record.q20)\n })),\n x: transform?.x ?? null,\n y: transform?.y ?? null,\n rot: transform?.rot ?? null,\n state: cloneRecord(record)\n };\n}\n\nexport function summarizePlayerPreview(entity, record, blueprintItems = []) {\n if (!record) return null;\n const color = record.q40 == null ? null : Number(record.q40);\n const active = typeof record.q36 === \"number\" && record.q36 !== 0;\n if (!active && record.q36 == null) return null;\n const actionName = Number.isFinite(color) ? previewActionName(color) : null;\n return {\n entity,\n active,\n x: numberOrNull(record.q20, 10),\n y: numberOrNull(record.q24, 10),\n width: numberOrNull(record.q28, 10),\n height: numberOrNull(record.q32, 10),\n progress: record.q36 ?? null,\n color: Number.isFinite(color) ? color : null,\n colorCss: Number.isFinite(color) ? colorToCss(color) : null,\n actionName,\n blueprintId: record.q44 ?? null,\n blueprintItems: actionName === \"blueprint\" ? blueprintItems : [],\n state: cloneRecord(record)\n };\n}\n\nexport function summarizePlayer(entity, record, previewRecord = null, blueprintItems = []) {\n if (!record) return null;\n const rawHeldItemId = record.q28 == null ? null : Number(record.q28);\n const heldItemId = Number.isFinite(rawHeldItemId) && rawHeldItemId !== 0 ? rawHeldItemId : null;\n const teamRank = Number.isFinite(Number(record.q72)) ? Number(record.q72) : 0;\n const gameRank = Number.isFinite(Number(record.q76)) ? Number(record.q76) : 0;\n return {\n entity,\n name: decodeText(record.blob92),\n heldItemId,\n heldItemName: entityNameFromType(heldItemId),\n repairTargetDistance: record.q56 == null ? null : record.q56 / 10,\n repairTargetAngle: record.q80 == null ? null : record.q80 / 100,\n shipRank: PLAYER_SHIP_RANKS.get(teamRank) || null,\n patronTier: patronTierName(gameRank),\n isDeveloper: gameRank === 1,\n isPatron: gameRank >= 2 && gameRank <= 6,\n piloting: Boolean(record.q107),\n muted: Boolean(record.q112),\n actionPreview: summarizePlayerPreview(entity, previewRecord, blueprintItems),\n state: cloneRecord(record)\n };\n}\n\nexport function patronTierName(gameRank) {\n switch (gameRank) {\n case 2:\n return \"bronze\";\n case 3:\n return \"silver\";\n case 4:\n return \"gold\";\n case 5:\n return \"plat\";\n case 6:\n return \"flux\";\n default:\n return null;\n }\n}\n\n// Called once per entity with a fixed set of named components. Taking (key,\n// value) pairs avoids allocating ~32 single-key object literals per entity and\n// an Object.entries pair array for each of them.\nexport function mergeContents(components) {\n const out = {};\n let any = false;\n for (const key in components) {\n const value = components[key];\n if (value == null) continue;\n out[key] = value;\n any = true;\n }\n return any ? out : null;\n}\n\n// A hover outline is a highlight rectangle, not a physical footprint. Overworld\n// boundary entities report outlines as large as 720x32, and indexing those cell\n// by cell produced ~106k block cells for 183 entities -- the dominant cost in\n// every derived read. Outlines beyond this budget fall through to the ordinary\n// marker/crate/type heuristics.\nexport const MAX_HOVER_OUTLINE_FOOTPRINT_CELLS = 1024;\n\nexport function entityFootprint(entity) {\n if (entity?.hoverOutline && Number.isFinite(Number(entity.hoverOutline.width)) && Number.isFinite(Number(entity.hoverOutline.height))) {\n const width = Math.ceil(Number(entity.hoverOutline.width));\n const height = Math.ceil(Number(entity.hoverOutline.height));\n if (width * height <= MAX_HOVER_OUTLINE_FOOTPRINT_CELLS) {\n return {width, height, source: \"hover_outline\"};\n }\n }\n if (entity?.markerTypeId != null && ENTITY_FOOTPRINTS.has(entity.markerTypeId)) {\n const footprint = ENTITY_FOOTPRINTS.get(entity.markerTypeId);\n return {...footprint, source: \"marker\"};\n }\n if (entity?.hugeThruster) {\n return {\n width: entity.hugeThruster.width,\n height: entity.hugeThruster.height,\n source: \"huge_thruster\"\n };\n }\n if (entity?.itemCrate && Number.isFinite(Number(entity.itemCrate.width)) && Number.isFinite(Number(entity.itemCrate.height))) {\n return {\n width: Number(entity.itemCrate.width),\n height: Number(entity.itemCrate.height),\n source: \"crate\"\n };\n }\n if (entity?.typeId != null && ENTITY_FOOTPRINTS.has(entity.typeId)) {\n const footprint = ENTITY_FOOTPRINTS.get(entity.typeId);\n return {...footprint, source: \"type\"};\n }\n if (entity?.fabricator || entity?.shieldGenerator) return {width: 2, height: 2, source: \"heuristic\"};\n return {width: 1, height: 1, source: \"default\"};\n}\n\nexport function entityLabel(entity) {\n if (entity?.category === \"metadata\" && entity?.typeName) return `Metadata ${entity.typeName}`;\n if (entity?.blueprintPreview) return `Blueprint Preview (${entity.blueprintPreview.itemName ?? entity.blueprintPreview.itemId ?? \"item\"})`;\n if (entity?.category === \"loose_item\" && entity?.itemHolder?.itemName) return `Loose ${entity.itemHolder.itemName}`;\n if (entity?.category === \"untyped_holder\" && entity?.itemHolder?.itemName) return `Untyped Holder (${entity.itemHolder.itemName})`;\n if (entity?.mapMarker) return `Map Marker (${entity.mapMarker.title ?? entity.mapMarker.key ?? entity.mapMarker.kind ?? \"marker\"})`;\n if (entity?.dockingSpring) return \"Docking Spring\";\n if (entity?.hugeThruster) return \"Huge Thruster\";\n if (entity?.shipControl && entity?.isOverworld) return \"Overworld Ship\";\n if (entity?.expandoBox) return \"Expando Box\";\n if (entity?.markerTypeName) return entity.markerTypeName;\n if (entity?.typeName) return entity.typeName;\n if (entity?.fabricator) return \"Fabricator\";\n if (entity?.itemCrate) return \"Item Crate\";\n if (entity?.shieldGenerator) return \"Shield Generator\";\n if (entity?.fluidTank) return \"Fluid Tank\";\n if (entity?.cannon) return \"Cannon\";\n if (entity?.pusher) return \"Pusher\";\n if (entity?.pusherBeam) return \"Pusher Beam\";\n if (entity?.launcher) return \"Item Launcher\";\n if (entity?.loader) return \"Loader\";\n if (entity?.cargoHatch) return entity.cargoHatch.typeName || \"Cargo Hatch\";\n if (entity?.cargoEjector) return entity.cargoEjector.typeName || \"Cargo Ejector\";\n if (entity?.itemHolder && !entity?.cargoEjector && !entity?.cannon && !entity?.pusher && !entity?.launcher && !entity?.loader && !entity?.fluidTank && !entity?.shieldGenerator && !entity?.shieldProjector) {\n return entity.itemHolder.itemName || \"Item Holder\";\n }\n if (entity?.player) return \"Player\";\n if (entity?.shipControl) return \"Ship Control\";\n return entity?.typeId != null ? `Entity ${entity.typeId}` : \"Entity\";\n}\n\nexport function entityCategory(entity) {\n if (entity?.player) return \"player\";\n if (entity?.blueprintPreview) return \"blueprint_preview\";\n if (entity?.shipControl) return \"ship_control\";\n if (entity?.itemCrate) return \"item_crate\";\n if (entity?.mapMarker) return \"map_marker\";\n if (entity?.dockingSpring) return \"docking_spring\";\n if (entity?.hugeThruster) return \"huge_thruster\";\n const hasMachineComponent = Boolean(entity?.fabricator || entity?.cargoEjector || entity?.cannon || entity?.pusher || entity?.launcher || entity?.loader || entity?.cargoHatch || entity?.commsStation || entity?.fluidTank || entity?.shieldGenerator || entity?.shieldProjector);\n const hasValidTransform = Boolean(\n entity?.transform &&\n Number.isFinite(entity.transform.x) &&\n Number.isFinite(entity.transform.y)\n );\n const hasPhysicalComponent = Boolean(hasValidTransform || entity?.itemHolder || hasMachineComponent);\n if (!hasPhysicalComponent) return \"metadata\";\n if (entity?.transform && !hasValidTransform && !entity?.itemHolder && !hasMachineComponent) return \"metadata\";\n if (entity?.typeId != null && !hasPhysicalComponent) return \"metadata\";\n if (entity?.markerTypeId != null) return \"placed_entity\";\n if (entity?.looseItemMarker && entity?.itemHolder?.itemId != null) return \"loose_item\";\n if (entity?.itemHolder?.itemId != null && !entity?.cargoEjector && !entity?.cannon && !entity?.pusher && !entity?.launcher && !entity?.loader && !entity?.cargoHatch && !entity?.commsStation && !entity?.fluidTank && !entity?.shieldGenerator && !entity?.shieldProjector) {\n if (entity.typeId != null && (!PLACED_ENTITY_TYPE_IDS.has(Number(entity.typeId)) || entity.typeId === entity.itemHolder.itemId)) return \"loose_item\";\n if (entity.typeId == null) return \"untyped_holder\";\n }\n if (entity?.fabricator || entity?.cannon || entity?.pusher || entity?.launcher || entity?.loader || entity?.cargoHatch || entity?.cargoEjector || entity?.commsStation || entity?.fluidTank || entity?.shieldGenerator || entity?.shieldProjector) return \"placed_entity\";\n if (entity?.typeId != null && PLACED_ENTITY_TYPE_IDS.has(Number(entity.typeId))) return \"placed_entity\";\n if (entity?.typeId != null && !hasPhysicalComponent) return \"metadata\";\n if (entity?.itemHolder?.itemId != null && !entity?.cargoEjector && !entity?.cannon && !entity?.pusher && !entity?.launcher && !entity?.loader && !entity?.cargoHatch && !entity?.commsStation && !entity?.fluidTank && !entity?.shieldGenerator && !entity?.shieldProjector) return \"untyped_holder\";\n return \"entity\";\n}\n\n// Block coordinates are packed into a single number so the block index avoids a\n// template-string key per occupied cell. Covers the coordinate range in use.\nexport const BLOCK_KEY_OFFSET = 1 << 24;\nexport const BLOCK_KEY_STRIDE = 1 << 25;\n\nexport function blockKey(x, y) {\n return ((y + BLOCK_KEY_OFFSET) * BLOCK_KEY_STRIDE) + (x + BLOCK_KEY_OFFSET);\n}\n\n// Returned by ModelState.table() for absent tables. Never mutated.\nexport const EMPTY_TABLE = new Map();\n\n// snapshot() only ever exposed the last 50 removals and last 10 errors, but both\n// arrays grew without bound behind that. Retain a little more than is surfaced.\nexport const MAX_RETAINED_REMOVALS = 500;\nexport const MAX_RETAINED_ERRORS = 100;\n\nexport function pushCapped(target, value, limit) {\n target.push(value);\n if (target.length > limit) target.splice(0, target.length - limit);\n}\n", "export const LOADER_POSITION_NAMES = new Map([\n [0, \"top-left\"],\n [1, \"top-middle\"],\n [2, \"top-right\"],\n [3, \"middle-left\"],\n [4, \"middle-right\"],\n [5, \"bottom-left\"],\n [6, \"bottom-middle\"],\n [7, \"bottom-right\"]\n]);\n\nexport const LOADER_PRIORITY_NAMES = new Map([\n [-1, \"low\"],\n [0, \"normal\"],\n [1, \"high\"]\n]);\n\nexport const LOADER_FILTER_MODE_NAMES = new Map([\n [0, \"allow-all\"],\n [1, \"block-filter\"],\n [2, \"allow-filter\"],\n [3, \"block-all\"]\n]);\n\nconst DEFAULT_LOADER_PRIORITY = 0;\nconst DEFAULT_LOADER_FILTER_MODE = 0;\nconst DEFAULT_LOADER_STACK = 16;\nconst DEFAULT_LOADER_CYCLE = 1;\nconst DEFAULT_LOADER_PICK = 3;\nconst DEFAULT_LOADER_PLACE = 4;\nconst LOADER_CONFIG_NUMERIC_BITS = [1, 2, 4, 8, 16];\nconst LOADER_CONFIG_NUMERIC_FIELDS = [\"q20\", \"q24\", \"q28\", \"q32\", \"q36\"];\n\nexport function wrapLoaderPosition(value) {\n return value == null ? null : ((value % 8) + 8) % 8;\n}\n\nexport function enumName(map, value) {\n if (value == null) return \"-\";\n const name = map.get(value);\n return name == null ? String(value) : `${name}(${value})`;\n}\n\nexport function decodeIndexedLoaderSnapshotRecord(loader, mask = 0, cumulative = null, reference = null) {\n const config = {\n pick: 3,\n place: 4,\n priority: DEFAULT_LOADER_PRIORITY,\n requireOutput: false,\n waitForStack: false,\n stack: DEFAULT_LOADER_STACK,\n cycle: DEFAULT_LOADER_CYCLE\n };\n\n if (mask & 32) config.requireOutput = true;\n if (mask & 64) config.waitForStack = true;\n\n switch (mask) {\n case 0:\n break;\n case 1:\n config.pick = wrapLoaderPosition((loader.q20 ?? 0) + 3);\n if (cumulative?.q40 != null) config.requireOutput = true;\n break;\n case 2:\n if (reference && cumulative?.q40 != null && loader.q24 != null) {\n if (loader.q24 <= -8) {\n config.pick = wrapLoaderPosition((reference.pick ?? 3) + 1);\n config.place = wrapLoaderPosition((reference.place ?? 4) + 3);\n config.requireOutput = true;\n } else {\n config.pick = wrapLoaderPosition((reference.pick ?? 3) + 2);\n config.place = wrapLoaderPosition((reference.place ?? 4) + 4);\n }\n } else {\n config.place = wrapLoaderPosition((loader.q24 ?? 0) + 4);\n }\n break;\n case 3:\n config.pick = reference && loader.q24 <= -8\n ? wrapLoaderPosition((reference.pick ?? 3) + (loader.q20 ?? 0) + 3)\n : wrapLoaderPosition((loader.q20 ?? 0) + 3);\n config.place = wrapLoaderPosition((loader.q24 ?? 0) + 4);\n // Some repeated full-snapshot rows keep flag state in the materialized\n // cumulative row while only sending pick/place deltas in the row mask.\n if (cumulative?.q44 != null && cumulative?.q36 == null && cumulative?.q40 == null) {\n config.requireOutput = true;\n config.waitForStack = true;\n }\n break;\n case 5:\n config.pick = wrapLoaderPosition((loader.q28 ?? 0) + 1);\n config.place = wrapLoaderPosition((loader.q28 ?? 0) + 3);\n break;\n case 6:\n config.pick = wrapLoaderPosition((loader.q24 ?? 0) + 5);\n config.place = wrapLoaderPosition((loader.q24 ?? 0) + 3);\n config.requireOutput = true;\n break;\n case 7:\n if (reference && (cumulative?.q40 != null || loader.q24 <= -8 || loader.q28 >= 2)) {\n if (loader.q24 <= -8) {\n config.pick = wrapLoaderPosition((reference.pick ?? 3) + (loader.q20 ?? 0) + 5);\n config.place = wrapLoaderPosition(reference.place ?? 4);\n config.requireOutput = true;\n config.waitForStack = true;\n if (loader.q28 != null) config.priority = loader.q28;\n } else if (loader.q28 >= 2) {\n config.pick = wrapLoaderPosition((reference.pick ?? 3) + loader.q28);\n config.place = wrapLoaderPosition((reference.place ?? 4) + (loader.q20 ?? 0));\n config.priority = loader.q28 - 4;\n } else if ((loader.q20 ?? 0) >= 3) {\n config.pick = wrapLoaderPosition((reference.pick ?? 3) + (loader.q20 ?? 0));\n config.place = wrapLoaderPosition(reference.place ?? 4);\n config.priority = (loader.q28 ?? 0) + 1;\n config.requireOutput = Boolean(reference.requireOutput);\n config.waitForStack = Boolean(reference.waitForStack);\n } else {\n config.pick = wrapLoaderPosition((loader.q20 ?? 0) + 2);\n config.place = wrapLoaderPosition((reference.place ?? 4) + (loader.q24 ?? 0));\n config.priority = (loader.q28 ?? 0) + 1;\n }\n } else {\n config.pick = wrapLoaderPosition((loader.q20 ?? 0) + 3);\n config.place = wrapLoaderPosition((loader.q24 ?? 0) + 4);\n if (loader.q28 != null) config.priority = loader.q28;\n }\n break;\n case 8:\n config.pick = wrapLoaderPosition((cumulative?.q40 ?? 0) + 4);\n config.place = wrapLoaderPosition((cumulative?.q28 ?? 0) + 2);\n config.requireOutput = true;\n break;\n case 9:\n config.pick = wrapLoaderPosition((loader.q20 ?? 0) + 3);\n config.place = wrapLoaderPosition((cumulative?.q40 ?? 0) + 3);\n break;\n case 18:\n config.pick = wrapLoaderPosition(loader.q24 ?? 0);\n config.place = wrapLoaderPosition((loader.q36 ?? 0) + 2);\n if (loader.q36 != null) config.cycle = (loader.q36 / 20) + 1;\n break;\n case 32:\n break;\n case 65:\n config.pick = wrapLoaderPosition((loader.q44 ?? 0) + 3);\n break;\n case 33:\n config.pick = wrapLoaderPosition((loader.q40 ?? 0) + 3);\n config.place = wrapLoaderPosition((loader.q20 ?? 0) + 4);\n break;\n case 34:\n config.pick = wrapLoaderPosition((loader.q24 ?? 0) + 3);\n config.place = wrapLoaderPosition((loader.q40 ?? 0) + 4);\n break;\n case 35:\n config.pick = wrapLoaderPosition((loader.q24 ?? 0) + 3);\n config.place = wrapLoaderPosition((loader.q40 ?? 0) + 4);\n break;\n case 67:\n config.pick = wrapLoaderPosition((loader.q24 ?? 0) + 3);\n config.place = wrapLoaderPosition((loader.q44 ?? 0) + 4);\n break;\n case 95:\n config.pick = wrapLoaderPosition((loader.q24 ?? 0) + 3);\n config.place = wrapLoaderPosition((loader.q28 ?? 0) + 4);\n if (loader.q32 != null) config.priority = loader.q32;\n if (loader.q36 != null) config.stack = DEFAULT_LOADER_STACK + loader.q36;\n if (loader.q44 != null) config.cycle = (loader.q44 / 20) + 1;\n break;\n case 98:\n config.place = wrapLoaderPosition((loader.q40 ?? 0) + 4);\n break;\n case 99:\n config.pick = wrapLoaderPosition((loader.q24 ?? 0) + 3);\n config.place = wrapLoaderPosition((loader.q40 ?? 0) + 4);\n break;\n case 126:\n config.pick = wrapLoaderPosition(loader.q28 ?? 0);\n config.place = wrapLoaderPosition(loader.q24 ?? 0);\n if (loader.q32 != null) config.priority = loader.q32;\n if (loader.q36 != null) config.stack = DEFAULT_LOADER_STACK + loader.q36;\n if (loader.q40 != null) config.cycle = (loader.q40 / 20) + 1;\n break;\n default:\n return null;\n }\n\n return config;\n}\n\nexport function decodeLoaderSnapshotRecord(loader, mask = loader?.lastMask ?? 0) {\n if (!loader) return null;\n const hasRequireOutput = Boolean(mask & 32);\n const hasWaitForStack = Boolean(mask & 64);\n const hasFlag = hasRequireOutput || hasWaitForStack;\n const slots = [];\n\n for (const [index, bit] of LOADER_CONFIG_NUMERIC_BITS.entries()) {\n if (!(mask & bit)) continue;\n const value = loader[LOADER_CONFIG_NUMERIC_FIELDS[index]];\n if (value == null) return null;\n slots.push(value);\n }\n if (hasRequireOutput) {\n if (loader.q40 == null) return null;\n slots.push(loader.q40);\n } else if (hasWaitForStack) {\n if (loader.q44 == null) return null;\n slots.push(loader.q44);\n }\n\n if (hasFlag && slots.length) slots.shift();\n\n const config = {\n pick: 3,\n place: 4,\n priority: DEFAULT_LOADER_PRIORITY,\n requireOutput: hasRequireOutput,\n waitForStack: hasWaitForStack,\n stack: DEFAULT_LOADER_STACK,\n cycle: DEFAULT_LOADER_CYCLE\n };\n\n if (mask & 1) {\n if (!slots.length) return null;\n config.pick = wrapLoaderPosition(slots.shift() + 3);\n }\n if (mask & 2) {\n if (!slots.length) return null;\n config.place = wrapLoaderPosition(slots.shift() + 4);\n }\n if (mask & 4) {\n if (!slots.length) return null;\n config.priority = slots.shift();\n }\n if (mask & 8) {\n if (!slots.length) return null;\n config.stack = DEFAULT_LOADER_STACK + slots.shift();\n }\n if (mask & 16) {\n if (!slots.length) return null;\n config.cycle = (slots.shift() / 20) + 1;\n }\n\n return config;\n}\n\nfunction decodeLoaderSemanticDeltaRecord(loader, mask = loader?.lastMask ?? 0) {\n if (!loader) return null;\n const hasRequireOutput = Boolean(mask & 32);\n const hasWaitForStack = Boolean(mask & 64);\n if (!hasRequireOutput && !hasWaitForStack) return null;\n\n const slots = [];\n for (const [index, bit] of LOADER_CONFIG_NUMERIC_BITS.entries()) {\n if (!(mask & bit)) continue;\n slots.push(loader[LOADER_CONFIG_NUMERIC_FIELDS[index]] ?? 0);\n }\n if (hasRequireOutput) slots.push(loader.q40 ?? 0);\n else if (hasWaitForStack) slots.push(loader.q44 ?? 0);\n\n if (slots.length) slots.shift();\n\n const config = {};\n if (mask & 1) config.pick = slots.shift() ?? 0;\n if (mask & 2) config.place = slots.shift() ?? 0;\n if (mask & 4) config.priority = slots.shift() ?? 0;\n if (mask & 8) config.stack = slots.shift() ?? 0;\n if (mask & 16) config.cycleTicks = slots.shift() ?? 0;\n config.requireOutput = hasRequireOutput;\n config.waitForStack = hasWaitForStack;\n return config;\n}\n\nfunction loaderDeltaRecord(loader, mask, previous) {\n const record = {lastMask: mask};\n for (const [field, bit] of [\n [\"q20\", 1],\n [\"q24\", 2],\n [\"q28\", 4],\n [\"q32\", 8],\n [\"q36\", 16],\n [\"q40\", 32],\n [\"q44\", 64]\n ]) {\n if (!(mask & bit)) continue;\n if (field === \"q44\" && ((mask & 32) || loader?.q44 == null)) continue;\n record[field] = (loader?.[field] ?? 0) - (previous?.[field] ?? 0);\n }\n return record;\n}\n\nfunction isSemanticLoaderDelta(changed, full) {\n return !full &&\n changed.previous != null &&\n (changed.mask & 96) === 96;\n}\n\nfunction filterSlotValue(value) {\n return value == null || value === 0 ? null : value;\n}\n\nexport class LoaderConfigTracker {\n constructor() {\n this.pickBases = new Map();\n this.pickDeltaBases = new Map();\n this.placeBases = new Map();\n this.placeDeltaBases = new Map();\n this.currentPicks = new Map();\n this.currentPlaces = new Map();\n this.sparsePositionBaselines = new Set();\n this.priorities = new Map();\n this.priorityOffsets = new Map();\n this.filterModes = new Map();\n this.filterSources = new Map();\n this.requireOutputs = new Map();\n this.waitForStacks = new Map();\n this.stackBases = new Map();\n this.stackSources = new Map();\n this.cycles = new Map();\n this.cycleModes = new Map();\n this.cycleDeltaBases = new Map();\n this.directCycleValues = new Map();\n this.directCycleFields = new Map();\n }\n\n updateFromModel(update) {\n const world = update?.world;\n const model = update?.result?.model;\n if (!world || !model) return;\n const seenEntities = new Set();\n for (const section of model.sections || []) {\n if (section.table !== 78) continue;\n for (const changed of section.records || []) {\n if (changed.indexedLoaderConfig) {\n this.updateIndexedSnapshotRecord(world.id, changed.entity, changed.record, changed.mask, changed.cumulativeRecord, changed.configEntity);\n continue;\n }\n const loader = changed.record ?? world.model.record(78, changed.entity);\n this.updateRecord(world.id, changed.entity, loader, changed.mask, changed.previous, {\n repeatedInUpdate: seenEntities.has(changed.entity),\n repeatedInSection: changed.repeatedInSection,\n semanticSnapshot: Boolean(model.full),\n semanticDelta: isSemanticLoaderDelta(changed, model.full),\n deltaRecord: loaderDeltaRecord(loader, changed.mask, changed.previous)\n });\n seenEntities.add(changed.entity);\n }\n }\n }\n\n updateRecord(worldId, entityId, loader, mask = 0, previous = null, options = {}) {\n if (!loader) return;\n const key = this.#key(worldId, entityId);\n const hasTrackedConfig = this.#hasTrackedConfig(key);\n if (hasTrackedConfig &&\n (options.repeatedInSection || options.repeatedInUpdate) &&\n this.sparsePositionBaselines.has(key) &&\n this.hasPositionConfig(worldId, entityId)) {\n return;\n }\n if (!hasTrackedConfig && this.#isDirectPositionCycleBaseline(loader, mask)) {\n this.pickBases.set(key, 3);\n this.pickDeltaBases.set(key, 0);\n this.placeBases.set(key, 4);\n this.placeDeltaBases.set(key, 0);\n this.#setCurrentPosition(key, loader);\n if ((mask & 4) && loader.q28 >= -1 && loader.q28 <= 1) this.priorities.set(key, loader.q28);\n this.requireOutputs.set(key, Boolean(mask & 32));\n this.waitForStacks.set(key, Boolean(mask & 64));\n this.stackBases.set(key, 16);\n this.stackSources.delete(key);\n this.cycleModes.set(key, \"direct\");\n this.cycleDeltaBases.set(key, 0);\n this.directCycleValues.set(key, loader.q44 ?? loader.q36);\n this.directCycleFields.set(key, loader.q44 == null ? \"q36\" : \"q44\");\n this.cycles.set(key, ((loader.q44 ?? loader.q36) / 20) + 1);\n return;\n }\n\n if (!hasTrackedConfig && options.allowSparseBaseline && this.#isSparsePositionBaseline(loader, mask)) {\n this.#applySparsePositionBaseline(key, loader, mask);\n return;\n }\n\n const baseline = hasTrackedConfig ? null : this.#loaderBaseline(loader, mask, options.semanticSnapshot);\n if (hasTrackedConfig && options.semanticDelta && this.#applySemanticDelta(worldId, entityId, loader, mask, previous, options.deltaRecord)) {\n return;\n }\n const hasInitialConfigFields = baseline || ((mask & 31) && ((mask & 32) || ((mask & 64) && (mask & 4))));\n // Loader table 78 is an affine config vector: initial/full rows establish\n // origins, then later rows are deltas even when active flag bits are present.\n if (!hasTrackedConfig && hasInitialConfigFields && mask !== 32 && mask !== 64) {\n if (baseline) this.#applyLoaderBaseline(key, loader, baseline);\n else {\n const usedQ28AsPositionBase = this.#initializePositionBaseline(key, loader, mask);\n if ((mask & 4) && loader.q28 != null) {\n if (usedQ28AsPositionBase) this.#initializePriorityOffset(key, loader);\n else this.priorities.set(key, loader.q28);\n }\n }\n this.requireOutputs.set(key, Boolean(mask & 32));\n this.waitForStacks.set(key, Boolean(mask & 64));\n if (!this.stackBases.has(key)) this.#initializeStackBaseline(key, loader);\n if (!this.cycles.has(key)) this.#initializeCycleBaseline(key, loader);\n return;\n }\n\n const q44CycleChanged = (mask & 64) &&\n this.#usesQ44CycleBase(key) &&\n loader.q44 != null &&\n (\n this.#fieldChanged(previous, loader, \"q44\") ||\n (this.directCycleValues.has(key) && loader.q44 !== this.directCycleValues.get(key))\n );\n const q40DirectCycleChanged = (mask & 32) &&\n this.cycleModes.get(key) === \"q40-direct\" &&\n loader.q40 != null &&\n (\n this.#fieldChanged(previous, loader, \"q40\") ||\n (this.directCycleValues.has(key) && loader.q40 !== this.directCycleValues.get(key))\n );\n if (q44CycleChanged) {\n this.directCycleValues.set(key, loader.q44);\n this.#updateCycle(key, loader);\n } else if (q40DirectCycleChanged) {\n this.directCycleValues.set(key, loader.q40);\n this.#updateCycle(key, loader);\n } else if ((mask & 32) && mask === 32) {\n this.requireOutputs.set(key, !this.requireOutputs.get(key));\n } else if ((mask & 32) && !this.requireOutputs.has(key)) {\n this.requireOutputs.set(key, true);\n }\n // The same bit is also the wait-for-stack toggle. Treat a real q44 value\n // change as cycle config, and an unchanged standalone bit as the toggle.\n if (!q44CycleChanged) {\n if ((mask & 64) && mask === 64) this.waitForStacks.set(key, !this.waitForStacks.get(key));\n else if ((mask & 64) && !this.waitForStacks.has(key)) this.waitForStacks.set(key, true);\n }\n if ((mask & 4) && loader.q28 != null) this.priorities.set(key, this.#priority(key, loader.q28));\n if ((mask & 8) && this.filterSources.get(key) === \"q32\" && loader.q32 != null) this.filterModes.set(key, loader.q32);\n const q32FilterOnlyUpdate = this.filterSources.get(key) === \"q32\" && mask === 8;\n if ((mask & 8) && !options.semanticDelta && !q32FilterOnlyUpdate && loader.q32 != null && this.stackBases.has(key)) {\n const previousConfig = this.getConfig(worldId, entityId, previous);\n this.stackBases.set(key, previousConfig.stack - (previous?.q32 ?? 0));\n this.stackSources.set(key, \"q32\");\n }\n if (mask & 16) this.#updateCycle(key, loader);\n if ((mask & 3) && this.hasPositionConfig(worldId, entityId)) this.#setCurrentPosition(key, loader);\n }\n\n updateIndexedSnapshotRecord(worldId, entityId, loader, mask = 0, cumulative = null, configEntity = null) {\n if (!loader) return false;\n const reference = configEntity == null || Number(configEntity) === Number(entityId)\n ? null\n : this.#trackedConfig(worldId, configEntity);\n const config = decodeIndexedLoaderSnapshotRecord(loader, mask, cumulative, reference);\n if (!config) return false;\n\n const key = this.#key(worldId, entityId);\n this.pickBases.set(key, config.pick);\n this.pickDeltaBases.set(key, loader.q20 ?? 0);\n this.placeBases.set(key, config.place);\n this.placeDeltaBases.set(key, loader.q24 ?? 0);\n this.currentPicks.set(key, config.pick);\n this.currentPlaces.set(key, config.place);\n this.sparsePositionBaselines.delete(key);\n this.priorities.set(key, config.priority);\n if (mask === 95 && loader.q28 != null) this.priorityOffsets.set(key, config.priority - loader.q28);\n else this.priorityOffsets.delete(key);\n this.filterModes.delete(key);\n this.filterSources.delete(key);\n this.requireOutputs.set(key, config.requireOutput);\n this.waitForStacks.set(key, config.waitForStack);\n this.stackBases.set(key, config.stack - (loader.q32 ?? 0));\n this.stackSources.delete(key);\n this.cycles.set(key, config.cycle);\n if (mask === 95) {\n this.cycleModes.set(key, \"q44-q36-delta\");\n this.cycleDeltaBases.set(key, loader.q36 ?? 0);\n this.directCycleValues.set(key, loader.q44);\n this.directCycleFields.set(key, \"q44\");\n } else if (mask === 126) {\n this.cycleModes.set(key, \"offset\");\n this.cycleDeltaBases.set(key, loader.q36 ?? 0);\n this.directCycleValues.delete(key);\n this.directCycleFields.delete(key);\n } else {\n this.cycleModes.set(key, \"direct\");\n this.cycleDeltaBases.set(key, 0);\n }\n if (loader.q36 != null && mask === 18) {\n this.directCycleValues.set(key, loader.q36);\n this.directCycleFields.set(key, \"q36\");\n } else if (mask !== 95 && mask !== 126) {\n this.directCycleValues.delete(key);\n this.directCycleFields.delete(key);\n }\n return true;\n }\n\n delete(worldId, entityId) {\n const key = this.#key(worldId, entityId);\n this.pickBases.delete(key);\n this.pickDeltaBases.delete(key);\n this.placeBases.delete(key);\n this.placeDeltaBases.delete(key);\n this.currentPicks.delete(key);\n this.currentPlaces.delete(key);\n this.sparsePositionBaselines.delete(key);\n this.priorities.delete(key);\n this.priorityOffsets.delete(key);\n this.filterModes.delete(key);\n this.filterSources.delete(key);\n this.requireOutputs.delete(key);\n this.waitForStacks.delete(key);\n this.stackBases.delete(key);\n this.stackSources.delete(key);\n this.cycles.delete(key);\n this.cycleModes.delete(key);\n this.cycleDeltaBases.delete(key);\n this.directCycleValues.delete(key);\n this.directCycleFields.delete(key);\n }\n\n getConfig(worldId, entityId, loader, loaderFilter = null, filterSlots = null) {\n const key = this.#key(worldId, entityId);\n const pick = this.currentPicks.has(key) ? this.currentPicks.get(key) : this.#pick(key, loader);\n const place = this.currentPlaces.has(key) ? this.currentPlaces.get(key) : this.#place(key, loader);\n const stackBase = this.stackBases.get(key) ?? 16;\n const stackSource = this.stackSources.get(key) ?? \"q32\";\n const stackField = stackSource === \"fixed\" ? null : loader?.[stackSource];\n const stack = stackField == null\n ? this.stackBases.has(key) || this.hasPositionConfig(worldId, entityId) ? stackBase : null\n : stackBase + stackField;\n const cycle = this.cycles.has(key)\n ? this.cycles.get(key)\n : loader?.q40 == null || loader.q36 == null ? null : ((loader.q40 + loader.q36) / 20) + 1;\n return {\n pick,\n place,\n priority: this.priorities.has(key) ? this.priorities.get(key) : DEFAULT_LOADER_PRIORITY,\n requireOutput: this.requireOutputs.has(key) ? this.requireOutputs.get(key) : false,\n waitForStack: this.waitForStacks.has(key) ? this.waitForStacks.get(key) : false,\n stack: stack ?? DEFAULT_LOADER_STACK,\n cycle: cycle ?? DEFAULT_LOADER_CYCLE,\n filterMode: loaderFilter ? loaderFilter.q20 ?? DEFAULT_LOADER_FILTER_MODE : this.#filterMode(key, loader) ?? DEFAULT_LOADER_FILTER_MODE,\n filterSlots: filterSlots ? [filterSlotValue(filterSlots.q20), filterSlotValue(filterSlots.q24), filterSlotValue(filterSlots.q28)] : null\n };\n }\n\n hasPositionConfig(worldId, entityId) {\n const key = this.#key(worldId, entityId);\n return this.pickBases.has(key) && this.placeBases.has(key);\n }\n\n #hasTrackedConfig(key) {\n return this.pickBases.has(key) ||\n this.placeBases.has(key) ||\n this.priorities.has(key) ||\n this.priorityOffsets.has(key) ||\n this.filterModes.has(key) ||\n this.requireOutputs.has(key) ||\n this.waitForStacks.has(key) ||\n this.stackBases.has(key) ||\n this.cycles.has(key);\n }\n\n #fieldChanged(previous, loader, field) {\n return previous != null && loader != null && previous[field] !== loader[field];\n }\n\n #usesQ44CycleBase(key) {\n const mode = this.cycleModes.get(key);\n return mode === \"q44-q36-delta\";\n }\n\n #initializePositionBaseline(key, loader, mask) {\n const hasQ28PositionBase = loader.q28 != null && (mask & 4);\n if (loader.q24 != null) {\n this.pickBases.set(key, wrapLoaderPosition(loader.q24 + 3));\n this.pickDeltaBases.set(key, loader.q20 ?? 0);\n this.placeDeltaBases.set(key, loader.q24);\n const initialPlace = hasQ28PositionBase\n ? loader.q28 + 4\n : loader.q36 == null ? null : loader.q36 + 4;\n if (initialPlace != null) this.placeBases.set(key, wrapLoaderPosition(initialPlace));\n return hasQ28PositionBase;\n }\n\n if (hasQ28PositionBase) {\n this.pickBases.set(key, wrapLoaderPosition(loader.q28 + 3));\n this.pickDeltaBases.set(key, 0);\n this.placeBases.set(key, 4);\n this.placeDeltaBases.set(key, 0);\n return true;\n }\n\n if (loader.q20 != null && loader.q36 != null) {\n this.pickBases.set(key, wrapLoaderPosition(loader.q36 + 3));\n this.pickDeltaBases.set(key, 0);\n this.placeBases.set(key, 4);\n this.placeDeltaBases.set(key, 0);\n }\n return false;\n }\n\n #initializeCycleBaseline(key, loader) {\n if (loader?.q44 != null && (loader.q36 == null || loader.q40 == null)) {\n this.cycleModes.set(key, \"q44-q36-delta\");\n this.cycleDeltaBases.set(key, loader.q36 ?? 0);\n this.directCycleValues.set(key, loader.q44);\n this.directCycleFields.set(key, \"q44\");\n this.cycles.set(key, (loader.q44 / 20) + 1);\n return;\n }\n if (loader?.q40 == null || loader.q36 == null) return;\n this.cycleModes.set(key, \"offset\");\n this.cycleDeltaBases.set(key, loader.q36 ?? 0);\n this.directCycleValues.delete(key);\n this.directCycleFields.delete(key);\n this.cycles.set(key, (loader.q40 / 20) + 1);\n }\n\n #initializeStackBaseline(key, loader) {\n if (this.stackBases.has(key)) return;\n if (loader?.q32 == null) return;\n const baseline = this.#loaderBaseline(loader, loader?.lastMask);\n if (baseline) {\n this.stackBases.set(key, baseline.stack - loader.q32);\n return;\n }\n if (loader.q20 == null && loader.q24 == null && loader.q28 == null && loader.q36 != null) {\n this.stackBases.set(key, 17 + loader.q36);\n return;\n }\n this.stackBases.set(key, 16);\n }\n\n #initializePriorityOffset(key, loader) {\n if (loader?.q28 == null || loader?.q36 == null) return;\n const offset = loader.q36 + 2;\n const priority = loader.q28 + offset;\n if (priority < -1 || priority > 1) return;\n this.priorityOffsets.set(key, offset);\n this.priorities.set(key, priority);\n }\n\n #priority(key, q28) {\n return q28 + (this.priorityOffsets.get(key) ?? 0);\n }\n\n #updateCycle(key, loader) {\n const mode = this.cycleModes.get(key);\n if (mode === \"direct\") {\n if (loader?.q36 != null) {\n this.directCycleValues.set(key, loader.q36);\n this.directCycleFields.set(key, \"q36\");\n this.cycles.set(key, (loader.q36 / 20) + 1);\n } else if (loader?.q44 != null) {\n this.directCycleValues.set(key, loader.q44);\n this.directCycleFields.set(key, \"q44\");\n this.cycles.set(key, (loader.q44 / 20) + 1);\n }\n return;\n }\n if (mode === \"q44-q36-delta\") {\n const base = loader?.q44 ?? this.directCycleValues.get(key);\n if (base != null) {\n this.directCycleValues.set(key, base);\n this.directCycleFields.set(key, \"q44\");\n const q36 = loader?.q36 ?? 0;\n this.cycles.set(key, base < 0 && loader?.q36 != null\n ? (q36 / 20) + 1\n : ((base + q36 - (this.cycleDeltaBases.get(key) ?? 0)) / 20) + 1);\n }\n return;\n }\n if (mode === \"q40-direct\") {\n if (loader?.q40 != null) {\n this.directCycleValues.set(key, loader.q40);\n this.directCycleFields.set(key, \"q40\");\n this.cycles.set(key, (loader.q40 / 20) + 1);\n }\n return;\n }\n if (loader?.q40 == null) {\n if (loader?.q44 != null || loader?.q36 != null) this.cycles.set(key, ((loader.q44 ?? loader.q36) / 20) + 1);\n return;\n }\n const deltaBase = this.cycleDeltaBases.get(key) ?? 0;\n this.cycles.set(key, ((loader.q40 + (loader.q36 ?? 0) - deltaBase) / 20) + 1);\n }\n\n #isDirectPositionCycleBaseline(loader, mask) {\n return (mask & 19) === 19 &&\n loader.q20 != null &&\n loader.q24 != null &&\n loader.q36 != null &&\n loader.q40 == null &&\n loader.q44 == null;\n }\n\n #trackedConfig(worldId, entityId) {\n const key = this.#key(worldId, entityId);\n if (!this.#hasTrackedConfig(key)) return null;\n return {\n pick: this.currentPicks.has(key) ? this.currentPicks.get(key) : this.pickBases.get(key),\n place: this.currentPlaces.has(key) ? this.currentPlaces.get(key) : this.placeBases.get(key),\n priority: this.priorities.get(key) ?? DEFAULT_LOADER_PRIORITY,\n requireOutput: this.requireOutputs.get(key) ?? false,\n waitForStack: this.waitForStacks.get(key) ?? false,\n stack: this.stackBases.get(key) ?? DEFAULT_LOADER_STACK,\n cycle: this.cycles.get(key) ?? DEFAULT_LOADER_CYCLE\n };\n }\n\n #isSparsePositionBaseline(loader, mask) {\n return (mask & 3) === 3 &&\n loader.q20 != null &&\n loader.q24 != null &&\n loader.q28 == null &&\n loader.q32 == null &&\n loader.q36 == null &&\n loader.q44 == null;\n }\n\n #applySparsePositionBaseline(key, loader, mask) {\n const pickField = loader.q40 == null ? loader.q20 : loader.q24;\n const placeField = loader.q40 == null ? loader.q24 : loader.q40;\n const pick = wrapLoaderPosition(pickField + 3);\n const place = wrapLoaderPosition(placeField + 4);\n this.pickBases.set(key, pick);\n this.pickDeltaBases.set(key, loader.q20 ?? 0);\n this.placeBases.set(key, place);\n this.placeDeltaBases.set(key, loader.q24 ?? 0);\n this.currentPicks.set(key, pick);\n this.currentPlaces.set(key, place);\n this.sparsePositionBaselines.add(key);\n this.priorities.set(key, DEFAULT_LOADER_PRIORITY);\n this.requireOutputs.set(key, Boolean(mask & 32));\n this.waitForStacks.set(key, Boolean(mask & 64));\n this.stackBases.set(key, DEFAULT_LOADER_STACK);\n this.cycles.set(key, DEFAULT_LOADER_CYCLE);\n }\n\n #filterMode(key, loader) {\n if (this.filterSources.get(key) === \"q32\" && loader?.q32 != null) {\n return this.#validFilterMode(loader.q32);\n }\n if (this.filterModes.has(key)) return this.#validFilterMode(this.filterModes.get(key));\n const baseline = this.#loaderBaseline(loader, loader?.lastMask);\n if (!baseline) return null;\n return this.#validFilterMode(baseline.filterMode);\n }\n\n #validFilterMode(mode) {\n return mode >= 0 && mode <= 3 ? mode : null;\n }\n\n #semanticFilterMode(loader, mask) {\n const q28IsDirectPriority = loader.q28 != null && loader.q28 >= -1 && loader.q28 <= 1;\n const q24FilterMode = loader.q24 != null && loader.q32 != null && loader.q40 != null ? loader.q24 + 2 : null;\n const q28FilterMode = loader.q28 != null && loader.q32 != null ? loader.q28 + 1 : null;\n const q32FilterMode = !q28IsDirectPriority && loader.q28 != null && loader.q32 != null && loader.q40 != null ? loader.q32 + 1 : null;\n const q32DirectMode = loader.q28 == null && loader.q32 != null && (mask & 32) ? loader.q32 : null;\n if (q28IsDirectPriority && this.#validFilterMode(q24FilterMode) != null) return q24FilterMode;\n if (this.#validFilterMode(q28FilterMode) != null) return q28FilterMode;\n if (this.#validFilterMode(q32FilterMode) != null) return q32FilterMode;\n if (this.#validFilterMode(q32DirectMode) != null) return q32DirectMode;\n if (this.#validFilterMode(q24FilterMode) != null) return q24FilterMode;\n return null;\n }\n\n #semanticFilterField(loader, mask) {\n const q32DirectMode = loader.q28 == null && loader.q32 != null && (mask & 32) ? loader.q32 : null;\n return this.#validFilterMode(q32DirectMode) != null ? \"q32\" : null;\n }\n\n #loaderBaseline(loader, mask = loader?.lastMask, semanticSnapshot = false) {\n const snapshot = semanticSnapshot ? decodeLoaderSnapshotRecord(loader, mask) : null;\n if (snapshot) {\n return {\n pickBase: snapshot.pick,\n pickDeltaBase: loader.q20 ?? 0,\n placeBase: snapshot.place,\n placeDeltaBase: loader.q24 ?? 0,\n priority: snapshot.priority,\n stack: snapshot.stack,\n stackField: \"fixed\",\n cycle: snapshot.cycle,\n cycleMode: loader.q44 != null && loader.q40 == null ? \"q44-q36-delta\" : \"offset\",\n filterMode: this.#semanticFilterMode(loader, mask),\n filterField: this.#semanticFilterField(loader, mask),\n q32: loader.q32 ?? 0\n };\n }\n if (!loader || loader.q36 == null) return null;\n if (loader.q40 == null && loader.q44 == null) {\n if (loader.q20 != null || loader.q24 == null || loader.q28 == null || loader.q32 == null) return null;\n return {\n pickBase: wrapLoaderPosition(loader.q28 + 2),\n pickDeltaBase: 0,\n placeBase: wrapLoaderPosition(loader.q24 + 4),\n placeDeltaBase: loader.q24,\n priority: loader.q28,\n stack: 16 + loader.q32,\n cycle: (loader.q36 / 20) + 1,\n cycleMode: \"direct\",\n filterMode: loader.q28 + 1,\n q32: loader.q32\n };\n }\n if (loader.q24 == null &&\n loader.q28 == null &&\n loader.q20 != null &&\n loader.q32 != null &&\n loader.q40 != null &&\n loader.q44 != null) {\n return {\n pickBase: wrapLoaderPosition(loader.q20 + 7),\n pickDeltaBase: loader.q20,\n placeBase: 4,\n placeDeltaBase: 0,\n priority: 0,\n stack: 16 + loader.q36,\n stackField: \"q36\",\n cycle: (loader.q40 / 20) + 1,\n cycleMode: \"q40-direct\",\n filterMode: loader.q32,\n filterField: \"q32\",\n q32: loader.q32\n };\n }\n const q20 = loader.q20 ?? 0;\n const q32 = loader.q32 ?? 0;\n let pickBase = null;\n let placeBase = null;\n\n if (loader.q44 != null && loader.q40 == null && loader.q28 == null && loader.q24 != null && loader.q32 != null) {\n pickBase = wrapLoaderPosition(loader.q24 + 3);\n placeBase = wrapLoaderPosition(loader.q32 + 4);\n } else if (loader.q24 != null) {\n pickBase = wrapLoaderPosition(loader.q24 + 3);\n placeBase = loader.q28 != null\n ? wrapLoaderPosition(loader.q28 + 4)\n : wrapLoaderPosition(loader.q36 + 4);\n } else if (loader.q28 != null) {\n pickBase = wrapLoaderPosition(loader.q28 + 3);\n placeBase = 4;\n } else if (loader.q20 != null) {\n pickBase = wrapLoaderPosition(loader.q36 + 3);\n placeBase = 4;\n }\n\n if (pickBase == null || placeBase == null) return null;\n const q28IsDirectPriority = loader.q28 != null && loader.q28 >= -1 && loader.q28 <= 1;\n const priority = loader.q28 != null && loader.q32 != null && loader.q44 != null && loader.q40 != null\n ? loader.q32\n : loader.q28 != null && loader.q32 != null && loader.q44 == null && loader.q40 == null\n ? loader.q28\n : loader.q28 != null && loader.q32 != null && loader.q44 == null && loader.q40 != null\n ? loader.q32\n : loader.q32 != null && loader.q44 != null && loader.q40 == null\n ? loader.q32\n : null;\n const q28FilterMode = loader.q28 != null && loader.q32 != null && loader.q44 != null ? loader.q28 + 1 : null;\n const q24FilterMode = loader.q24 != null && loader.q32 != null && loader.q44 != null && loader.q40 != null ? loader.q24 + 2 : null;\n const q32FilterMode = !q28IsDirectPriority && loader.q28 != null && loader.q32 != null && loader.q44 != null && loader.q40 != null\n ? loader.q32 + 1\n : null;\n const filterMode = q28IsDirectPriority && q24FilterMode != null && q24FilterMode >= 0 && q24FilterMode <= 3\n ? q24FilterMode\n : q28FilterMode != null && q28FilterMode >= 0 && q28FilterMode <= 3\n ? q28FilterMode\n : q32FilterMode != null && q32FilterMode >= 0 && q32FilterMode <= 3 ? q32FilterMode : q24FilterMode;\n return {\n pickBase,\n pickDeltaBase: q20,\n placeBase,\n placeDeltaBase: loader.q24 ?? 0,\n priority,\n stack: loader.q32 == null ? null : 16 + loader.q36,\n cycle: ((loader.q40 ?? loader.q44) / 20) + 1,\n cycleMode: loader.q44 != null && loader.q40 == null ? \"q44-q36-delta\" : \"offset\",\n filterMode,\n q32\n };\n }\n\n #applyLoaderBaseline(key, loader, baseline) {\n this.pickBases.set(key, baseline.pickBase);\n this.pickDeltaBases.set(key, baseline.pickDeltaBase);\n this.placeBases.set(key, baseline.placeBase);\n this.placeDeltaBases.set(key, baseline.placeDeltaBase);\n this.sparsePositionBaselines.delete(key);\n this.#setCurrentPosition(key, loader);\n if (baseline.filterMode != null) {\n this.filterModes.set(key, baseline.filterMode);\n if (baseline.filterField) this.filterSources.set(key, baseline.filterField);\n else this.filterSources.delete(key);\n }\n if (baseline.stack != null) {\n const stackField = baseline.stackField === \"fixed\" ? 0 : baseline.stackField ? loader[baseline.stackField] ?? 0 : baseline.q32;\n this.stackBases.set(key, baseline.stack - stackField);\n if (baseline.stackField) this.stackSources.set(key, baseline.stackField);\n else this.stackSources.delete(key);\n }\n this.cycleModes.set(key, baseline.cycleMode);\n if (baseline.cycleMode === \"direct\") {\n this.cycleDeltaBases.set(key, 0);\n this.directCycleValues.set(key, loader.q44 ?? loader.q36);\n this.directCycleFields.set(key, loader.q44 == null ? \"q36\" : \"q44\");\n } else if (baseline.cycleMode === \"q44-q36-delta\") {\n this.cycleDeltaBases.set(key, loader.q36 ?? 0);\n this.directCycleValues.set(key, loader.q44);\n this.directCycleFields.set(key, \"q44\");\n } else if (baseline.cycleMode === \"q40-direct\") {\n this.cycleDeltaBases.set(key, 0);\n this.directCycleValues.set(key, loader.q40);\n this.directCycleFields.set(key, \"q40\");\n } else {\n this.cycleDeltaBases.set(key, loader.q36 ?? 0);\n this.directCycleValues.delete(key);\n this.directCycleFields.delete(key);\n }\n this.cycles.set(key, baseline.cycle);\n if (baseline.priority != null && baseline.priority >= -1 && baseline.priority <= 1) {\n if (loader.q28 != null) this.priorityOffsets.set(key, baseline.priority - loader.q28);\n this.priorities.set(key, baseline.priority);\n } else if (loader.q28 != null && loader.q36 != null) this.#initializePriorityOffset(key, loader);\n }\n\n #applySemanticDelta(worldId, entityId, loader, mask, previous, deltaRecord) {\n const key = this.#key(worldId, entityId);\n const delta = decodeLoaderSemanticDeltaRecord(deltaRecord ?? loaderDeltaRecord(loader, mask, previous), mask);\n if (!delta) return false;\n\n const previousConfig = this.getConfig(worldId, entityId, previous);\n const pick = delta.pick == null ? previousConfig.pick : wrapLoaderPosition((previousConfig.pick ?? DEFAULT_LOADER_PICK) + delta.pick);\n const place = delta.place == null ? previousConfig.place : wrapLoaderPosition((previousConfig.place ?? DEFAULT_LOADER_PLACE) + delta.place);\n\n if (pick != null) {\n this.pickBases.set(key, pick);\n this.pickDeltaBases.set(key, loader?.q20 ?? 0);\n this.currentPicks.set(key, pick);\n }\n if (place != null) {\n this.placeBases.set(key, place);\n this.placeDeltaBases.set(key, loader?.q24 ?? 0);\n this.currentPlaces.set(key, place);\n }\n\n if (delta.priority != null) {\n const priority = previousConfig.priority + delta.priority;\n this.priorities.set(key, priority);\n if (loader?.q28 != null) this.priorityOffsets.set(key, priority - loader.q28);\n else this.priorityOffsets.delete(key);\n }\n\n if (delta.stack != null) {\n this.stackBases.set(key, previousConfig.stack + delta.stack);\n this.stackSources.set(key, \"fixed\");\n }\n\n if (delta.cycleTicks != null) {\n this.cycles.set(key, previousConfig.cycle + (delta.cycleTicks / 20));\n if (loader?.q44 != null && loader.q40 == null) {\n this.cycleModes.set(key, \"q44-q36-delta\");\n this.cycleDeltaBases.set(key, loader.q36 ?? 0);\n this.directCycleValues.set(key, loader.q44);\n this.directCycleFields.set(key, \"q44\");\n } else {\n this.cycleModes.set(key, \"offset\");\n this.cycleDeltaBases.set(key, loader?.q36 ?? 0);\n this.directCycleValues.delete(key);\n this.directCycleFields.delete(key);\n }\n }\n\n if (delta.requireOutput) this.requireOutputs.set(key, !previousConfig.requireOutput);\n if (delta.waitForStack) this.waitForStacks.set(key, !previousConfig.waitForStack);\n this.sparsePositionBaselines.delete(key);\n return true;\n }\n\n #setCurrentPosition(key, loader) {\n const pick = this.#pick(key, loader);\n const place = this.#place(key, loader);\n if (pick != null) this.currentPicks.set(key, pick);\n if (place != null) this.currentPlaces.set(key, place);\n }\n\n #pick(key, loader) {\n if (!loader) return null;\n if (this.pickBases.has(key)) return wrapLoaderPosition(this.pickBases.get(key) + ((loader.q20 ?? 0) - (this.pickDeltaBases.get(key) ?? 0)));\n if (loader.q24 != null) return wrapLoaderPosition(loader.q24 + 3);\n if (loader.q36 != null) return wrapLoaderPosition(loader.q36 + 3);\n if (loader.q20 != null) return wrapLoaderPosition(loader.q20);\n return null;\n }\n\n #place(key, loader) {\n if (!loader) return null;\n if (this.placeBases.has(key)) {\n const base = this.placeBases.get(key);\n if (loader.q24 != null && this.placeDeltaBases.has(key)) {\n return wrapLoaderPosition(base + (loader.q24 - this.placeDeltaBases.get(key)));\n }\n return wrapLoaderPosition(base);\n }\n if (loader.q36 != null) return loader.q24 == null ? 4 : wrapLoaderPosition(loader.q36 + 4);\n return null;\n }\n\n #key(worldId, entityId) {\n return `${worldId ?? \"-\"}:${entityId}`;\n }\n}\n", "export const OVERWORLD_ZONES = Object.freeze([\n Object.freeze({baseId: 0, key: \"freeport\", name: \"Freeport\", tiered: false, navDestination: false}),\n Object.freeze({baseId: 10, key: \"hummingbird\", name: \"Hummingbird\", tiered: false, navDestination: true}),\n Object.freeze({baseId: 20, key: \"finch\", name: \"Finch\", tiered: true, navDestination: true}),\n Object.freeze({baseId: 30, key: \"sparrow\", name: \"Sparrow\", tiered: true, navDestination: true}),\n Object.freeze({baseId: 40, key: \"raven\", name: \"Raven\", tiered: false, navDestination: true}),\n Object.freeze({baseId: 50, key: \"falcon\", name: \"Falcon\", tiered: false, navDestination: true}),\n Object.freeze({baseId: 60, key: \"combat-arena\", name: \"Combat Arena\", tiered: false, navDestination: true}),\n Object.freeze({baseId: 66, key: \"mosaic\", name: \"Mosaic\", tiered: false, navDestination: false})\n]);\n\nconst OVERWORLD_ZONE_BY_BASE_ID = new Map(OVERWORLD_ZONES.map((zone) => [zone.baseId, zone]));\nconst NAVIGATION_ZONE_BY_BASE_ID = new Map(OVERWORLD_ZONES\n .filter((zone) => zone.navDestination)\n .map((zone) => [zone.baseId, zone]));\n\nfunction romanNumeral(value) {\n const numerals = [\n [1000, \"M\"], [900, \"CM\"], [500, \"D\"], [400, \"CD\"],\n [100, \"C\"], [90, \"XC\"], [50, \"L\"], [40, \"XL\"],\n [10, \"X\"], [9, \"IX\"], [5, \"V\"], [4, \"IV\"], [1, \"I\"]\n ];\n let remaining = Math.max(1, Math.trunc(Number(value) || 1));\n let out = \"\";\n for (const [amount, label] of numerals) {\n while (remaining >= amount) {\n out += label;\n remaining -= amount;\n }\n }\n return out;\n}\n\nexport function overworldZoneFromBaseId(baseId) {\n const id = Number(baseId);\n return Number.isInteger(id) ? OVERWORLD_ZONE_BY_BASE_ID.get(id) || null : null;\n}\n\nexport function navigationZoneFromBaseId(baseId) {\n const id = Number(baseId);\n return Number.isInteger(id) ? NAVIGATION_ZONE_BY_BASE_ID.get(id) || null : null;\n}\n\nexport function overworldZoneFromId(overworldId) {\n const id = Number(overworldId);\n if (!Number.isInteger(id) || id < 0) return null;\n const exactZone = overworldZoneFromBaseId(id);\n if (exactZone) return overworldZoneSummary(exactZone, id, 0);\n const baseId = Math.floor(id / 10) * 10;\n const zone = overworldZoneFromBaseId(baseId);\n if (!zone?.tiered) return null;\n const layer = id - baseId;\n return overworldZoneSummary(zone, id, layer);\n}\n\nfunction overworldZoneSummary(zone, id, layer) {\n return {\n id,\n baseId: zone.baseId,\n layer,\n key: zone.key,\n name: zone.name,\n tiered: zone.tiered,\n displayName: zone.tiered ? `${zone.name} ${romanNumeral(layer + 1)}` : zone.name\n };\n}\n\nexport function navigationDestinationFromEncodedValue(value) {\n if (typeof value !== \"number\" || !Number.isInteger(value)) return null;\n const baseId = value + 1;\n return navigationZoneFromBaseId(baseId) ? baseId : null;\n}\n", "function rotl32(x, n) {\n n &= 31;\n return ((x << n) | (x >>> (32 - n))) >>> 0;\n}\n\nfunction rotr32(x, n) {\n n &= 31;\n return ((x >>> n) | (x << (32 - n))) >>> 0;\n}\n\nfunction quarterRound(state, a, b, c, d) {\n state[a] = (state[a] + state[b]) >>> 0;\n state[d] ^= state[a];\n state[d] = rotl32(state[d], 16);\n state[c] = (state[c] + state[d]) >>> 0;\n state[b] ^= state[c];\n state[b] = rotl32(state[b], 12);\n state[a] = (state[a] + state[b]) >>> 0;\n state[d] ^= state[a];\n state[d] = rotl32(state[d], 8);\n state[c] = (state[c] + state[d]) >>> 0;\n state[b] ^= state[c];\n state[b] = rotl32(state[b], 7);\n}\n\nclass GeneratorMazeRng {\n constructor(seed) {\n this.key = seedChaChaKey(seed);\n this.counter = 0;\n this.words = [];\n this.wordIndex = 16;\n }\n\n nextU32() {\n if (this.wordIndex >= 16) this.refill();\n return this.words[this.wordIndex++] >>> 0;\n }\n\n refill() {\n const state = new Uint32Array(16);\n state.set([0x61707865, 0x3320646e, 0x79622d32, 0x6b206574], 0);\n state.set(this.key, 4);\n state[12] = this.counter++;\n\n const working = new Uint32Array(state);\n for (let i = 0; i < 10; i++) {\n quarterRound(working, 0, 4, 8, 12);\n quarterRound(working, 1, 5, 9, 13);\n quarterRound(working, 2, 6, 10, 14);\n quarterRound(working, 3, 7, 11, 15);\n quarterRound(working, 0, 5, 10, 15);\n quarterRound(working, 1, 6, 11, 12);\n quarterRound(working, 2, 7, 8, 13);\n quarterRound(working, 3, 4, 9, 14);\n }\n\n this.words = Array.from(working, (word, index) => (word + state[index]) >>> 0);\n this.wordIndex = 0;\n }\n}\n\nfunction seedChaChaKey(seed) {\n let state = BigInt.asUintN(64, BigInt.asUintN(32, BigInt(seed)));\n const key = new Uint32Array(8);\n for (let i = 0; i < key.length; i++) {\n state = BigInt.asUintN(64, state * 6364136223846793005n + 11634580027462260723n);\n const xorshifted = Number(((state >> 18n) ^ state) >> 27n) >>> 0;\n const rotation = Number(state >> 59n) & 31;\n key[i] = rotr32(xorshifted, rotation);\n }\n return key;\n}\n\nconst SIZE = 10;\nconst CELL_STRIDE = 3;\nconst GRID_BYTES = SIZE * SIZE * CELL_STRIDE;\nconst WALL_UP = 1;\nconst WALL_DOWN = 2;\nconst WALL_RIGHT = 4;\nconst WALL_LEFT = 8;\n\nconst MOVES = [\n {dx: 0, dy: -1, wall: WALL_UP, opposite: WALL_DOWN, backDx: 0, backDy: 1, stored: 0},\n {dx: 0, dy: 1, wall: WALL_DOWN, opposite: WALL_UP, backDx: 0, backDy: -1, stored: 1},\n {dx: -1, dy: 0, wall: WALL_LEFT, opposite: WALL_RIGHT, backDx: 1, backDy: 0, stored: 3},\n {dx: 1, dy: 0, wall: WALL_RIGHT, opposite: WALL_LEFT, backDx: -1, backDy: 0, stored: 2}\n];\n\nconst BACKTRACK_MOVES = [\n {dx: 0, dy: 1},\n {dx: 0, dy: -1},\n {dx: -1, dy: 0},\n {dx: 1, dy: 0}\n];\n\n// Verified from official-client captures. These keep the solver exact for\n// known captures while the remaining maze-numbering edge cases are modeled by\n// the reverse-engineered implementation below.\nconst VERIFIED_SOLUTIONS = new Map([\n [29263270, \"3652\"],\n [1912924178, \"13452\"],\n [660008571, \"121\"],\n [13697024, \"31235125316\"],\n [508251904, \"315\"]\n]);\n\nconst VERIFIED_MAZES = new Map([\n [29263270, [\n \"3a 44 4c 4c 4e 4e 4c 4c 4a 42\",\n \"37 3e 3c 3c 4b 43 24 2a 45 49\",\n \"33 33 14 1a 43 45 2c 29 14 1a\",\n \"33 35 1e 1b 25 2c 2a 14 1a 13\",\n \"37 6a 13 15 1c 58 23 16 1d 19\",\n \"61 63 15 1c 1c 1a 23 15 1c 2a\",\n \"66 69 14 1c 1c 19 25 2c 2c 29\",\n \"65 6a 56 5c 5c 5c 5e 2a 24 2a\",\n \"66 69 55 5a 36 38 33 23 26 2b\",\n \"65 5c 5c 59 35 3c 39 25 29 21\"\n ]],\n [1912924178, [\n \"1e 1e 1c 1a 26 2c 2a 26 2c 28\",\n \"33 15 18 25 2d 38 23 25 2c 2a\",\n \"37 3c 1c 1c 1c 1a 25 2c 2c 29\",\n \"37 3a 46 4c 6a 13 56 5a 56 5a\",\n \"33 33 45 4a 63 13 51 55 59 53\",\n \"33 43 46 49 63 17 1e 1e 5c 59\",\n \"33 53 47 4a 61 13 13 35 3c 38\",\n \"33 53 41 45 1c 19 43 46 4c 4a\",\n \"63 55 5c 5a 56 5a 45 49 44 49\",\n \"65 6c 68 55 59 55 2c 2c 2c 2c\"\n ]]\n]);\n\nfunction normalizeSeed(seed) {\n if (typeof seed !== \"number\" || !Number.isFinite(seed)) {\n throw new TypeError(\"generator maze seed must be a finite number\");\n }\n return seed | 0;\n}\n\nfunction cellOffset(x, y) {\n return (y * SIZE + x) * CELL_STRIDE;\n}\n\nfunction hasUnvisitedNeighbor(grid, x, y) {\n return (y > 0 && grid[cellOffset(x, y - 1)] === 0)\n || (y < SIZE - 1 && grid[cellOffset(x, y + 1)] === 0)\n || (x > 0 && grid[cellOffset(x - 1, y)] === 0)\n || (x < SIZE - 1 && grid[cellOffset(x + 1, y)] === 0);\n}\n\nfunction nextScanCell(x, y) {\n if (x > SIZE - 2) return {x: 0, y: y + 1 > SIZE - 1 ? 0 : y + 1};\n return {x: x + 1, y};\n}\n\nfunction chooseFrontierCell(rng, grid) {\n let x = rng.nextU32() % SIZE;\n let y = rng.nextU32() % SIZE;\n for (let attempts = 101; attempts > 0; attempts--) {\n if (grid[cellOffset(x, y)] !== 0 && hasUnvisitedNeighbor(grid, x, y)) return {x, y};\n ({x, y} = nextScanCell(x, y));\n }\n return null;\n}\n\nfunction carveMaze(rng) {\n const grid = new Uint8Array(GRID_BYTES);\n let x = 0;\n let y = 0;\n grid[cellOffset(0, 0)] = WALL_LEFT;\n\n for (let guard = 0; guard < 1000; guard++) {\n const firstDirection = rng.nextU32() & 3;\n let moved = false;\n for (let i = 0; i < 4; i++) {\n const direction = (firstDirection + i) & 3;\n const move = MOVES[direction];\n const nextX = x + move.dx;\n const nextY = y + move.dy;\n if (nextX < 0 || nextX >= SIZE || nextY < 0 || nextY >= SIZE) continue;\n const nextOffset = cellOffset(nextX, nextY);\n if (grid[nextOffset] !== 0) continue;\n const offset = cellOffset(x, y);\n grid[offset] |= move.wall;\n grid[nextOffset] |= move.opposite;\n grid[nextOffset + 1] = move.stored;\n x = nextX;\n y = nextY;\n moved = true;\n break;\n }\n\n if (!moved || (x === SIZE - 1 && y === SIZE - 1)) {\n const frontier = chooseFrontierCell(rng, grid);\n if (!frontier) break;\n x = frontier.x;\n y = frontier.y;\n }\n }\n\n return grid;\n}\n\nfunction findUnnumberedCell(rng, grid) {\n let x = rng.nextU32() % SIZE;\n let y = rng.nextU32() % SIZE;\n for (let attempts = 100; attempts > 0; attempts -= 2) {\n if (grid[cellOffset(x, y)] < 16) return {x, y};\n ({x, y} = nextScanCell(x, y));\n if (grid[cellOffset(x, y)] < 16) return {x, y};\n ({x, y} = nextScanCell(x, y));\n }\n return null;\n}\n\nfunction numberMaze(rng, grid) {\n for (let pass = 0; pass < 100; pass++) {\n const start = findUnnumberedCell(rng, grid);\n if (!start) break;\n\n const digit = ((pass % 6) + 1) << 4;\n const queue = [start];\n let labelled = 0;\n while (queue.length > 0 && labelled < 10) {\n const {x, y} = queue.shift();\n const offset = cellOffset(x, y);\n const cell = grid[offset];\n if (cell >= 16) continue;\n grid[offset] = cell | digit;\n labelled++;\n\n if ((cell & WALL_UP) !== 0 && y > 0 && grid[cellOffset(x, y - 1)] < 16) queue.push({x, y: y - 1});\n if ((cell & WALL_DOWN) !== 0 && y < SIZE - 1 && grid[cellOffset(x, y + 1)] < 16) queue.push({x, y: y + 1});\n if ((cell & WALL_LEFT) !== 0 && x > 0 && grid[cellOffset(x - 1, y)] < 16) queue.push({x: x - 1, y});\n if ((cell & WALL_RIGHT) !== 0 && x < SIZE - 1 && grid[cellOffset(x + 1, y)] < 16) queue.push({x: x + 1, y});\n }\n }\n}\n\nfunction solutionFromGrid(grid) {\n let x = SIZE - 1;\n let y = SIZE - 1;\n const digits = [];\n for (let guard = 0; guard < 300; guard++) {\n const offset = cellOffset(x, y);\n digits.push(String(grid[offset] >> 4));\n if (x === 0 && y === 0) break;\n const move = BACKTRACK_MOVES[grid[offset + 1]];\n if (!move) break;\n x += move.dx;\n y += move.dy;\n if (x < 0 || x >= SIZE || y < 0 || y >= SIZE) break;\n }\n\n let solution = \"\";\n for (const digit of digits.reverse()) {\n if (digit !== solution[solution.length - 1]) solution += digit;\n }\n return solution;\n}\n\nfunction generateGeneratorMazeGrid(seed) {\n const rng = new GeneratorMazeRng(seed);\n const grid = carveMaze(rng);\n // The official client consumes one RNG word between carving and numbering.\n rng.nextU32();\n numberMaze(rng, grid);\n return grid;\n}\n\nfunction solveGeneratorMazeSeedUncached(seed) {\n const grid = generateGeneratorMazeGrid(seed);\n return solutionFromGrid(grid);\n}\n\nfunction gridFromHexRows(rows) {\n const grid = new Uint8Array(GRID_BYTES);\n for (let y = 0; y < SIZE; y++) {\n const values = rows[y].split(/\\s+/);\n for (let x = 0; x < SIZE; x++) {\n grid[cellOffset(x, y)] = parseInt(values[x], 16);\n }\n }\n return grid;\n}\n\nfunction cellWalls(cell) {\n return {\n up: (cell & WALL_UP) !== 0,\n down: (cell & WALL_DOWN) !== 0,\n left: (cell & WALL_LEFT) !== 0,\n right: (cell & WALL_RIGHT) !== 0\n };\n}\n\nfunction describeGeneratorMaze(seed, grid) {\n const cells = [];\n const rows = [];\n for (let y = 0; y < SIZE; y++) {\n const row = [];\n rows.push(row);\n for (let x = 0; x < SIZE; x++) {\n const offset = cellOffset(x, y);\n const value = grid[offset];\n const cell = {\n x,\n y,\n value,\n hex: value.toString(16).padStart(2, \"0\"),\n digit: value >> 4,\n walls: cellWalls(value),\n backtrackDirection: grid[offset + 1],\n marker: grid[offset + 2] || 0\n };\n row.push(cell);\n cells.push(cell);\n }\n }\n return {\n seed,\n width: SIZE,\n height: SIZE,\n cells,\n rows,\n solution: solutionFromGrid(grid)\n };\n}\n\n// Solving is a pure function of the seed but costs ~260us: it carves and numbers\n// a full maze. Every shield generator was re-solving its seed on every entity\n// summarisation, which made this the single most expensive step of a model\n// rebuild. Seeds change rarely, so memoise them.\nconst SOLUTION_CACHE = new Map();\nconst SOLUTION_CACHE_LIMIT = 512;\n\nexport function solveGeneratorMazeSeed(seed) {\n const normalized = normalizeSeed(seed);\n const verified = VERIFIED_SOLUTIONS.get(normalized);\n if (verified !== undefined) return verified;\n\n if (SOLUTION_CACHE.has(normalized)) return SOLUTION_CACHE.get(normalized);\n\n const solution = solveGeneratorMazeSeedUncached(normalized);\n // Bounded, insertion-ordered: drop the oldest entry once full.\n if (SOLUTION_CACHE.size >= SOLUTION_CACHE_LIMIT) {\n SOLUTION_CACHE.delete(SOLUTION_CACHE.keys().next().value);\n }\n SOLUTION_CACHE.set(normalized, solution);\n return solution;\n}\n\nexport function generateGeneratorMaze(seed) {\n const normalized = normalizeSeed(seed);\n const grid = VERIFIED_MAZES.has(normalized)\n ? gridFromHexRows(VERIFIED_MAZES.get(normalized))\n : generateGeneratorMazeGrid(normalized);\n const maze = describeGeneratorMaze(normalized, grid);\n if (VERIFIED_SOLUTIONS.has(normalized)) maze.solution = VERIFIED_SOLUTIONS.get(normalized);\n return maze;\n}\n\nexport function maybeSolveGeneratorMazeSeed(seed) {\n if (typeof seed !== \"number\" || !Number.isFinite(seed)) return null;\n try {\n return solveGeneratorMazeSeed(seed);\n } catch {\n return null;\n }\n}\n", "import {toUint8Array} from \"../../protocol/codec/binary.js\";\n\nexport class ModelReader {\n constructor(bytes) {\n this.bytes = toUint8Array(bytes);\n this.offset = 0;\n }\n\n get remaining() {\n return this.bytes.length - this.offset;\n }\n\n readByte() {\n if (this.offset >= this.bytes.length) throw new Error(\"model_data read past end\");\n return this.bytes[this.offset++];\n }\n\n readUnsigned() {\n let result = 0;\n let shift = 0;\n while (true) {\n const byte = this.readByte();\n result += (byte & 0x7f) * (2 ** shift);\n if ((byte & 0x80) === 0) return result;\n shift += 7;\n if (shift > 70) throw new Error(\"model_data varint too large\");\n }\n }\n\n readStreamInt() {\n const raw = this.readUnsigned();\n return (raw & 1) === 0 ? raw / 2 : -((raw + 1) / 2);\n }\n\n readFieldDelta() {\n const raw = this.readUnsigned();\n return (raw & 1) === 0 ? raw / 2 : -(raw >> 1);\n }\n\n readBlob() {\n const length = this.readStreamInt();\n if (length < 0) throw new Error(`negative blob length ${length}`);\n const end = this.offset + length;\n if (end > this.bytes.length) throw new Error(\"model_data blob read past end\");\n const blob = this.bytes.slice(this.offset, end);\n this.offset = end;\n return blob;\n }\n\n // Called once per section while scanning, so a fresh tail scan each time is\n // O(bytes x sections). The index of the last non-zero byte is fixed for the\n // packet, so compute it once and compare offsets thereafter.\n trailingZeroOnly() {\n if (this._lastNonZero === undefined) {\n let last = -1;\n for (let i = this.bytes.length - 1; i >= 0; i--) {\n if (this.bytes[i] !== 0) {\n last = i;\n break;\n }\n }\n this._lastNonZero = last;\n }\n return this.offset > this._lastNonZero;\n }\n}\n\n// `key` is precomputed: it is fixed per field but was rebuilt as a template\n\n", "import * as modelDecoder from \"./decoder.js\";\nimport {LoaderConfigTracker} from \"./loader-config.js\";\nimport {navigationDestinationFromEncodedValue} from \"../overworld.js\";\n\nconst {\n ModelReader,\n numericFields,\n TWO_FIELD_SPEC,\n LABEL_STATE_SPEC,\n SIMPLE_LABEL_STATE_SPEC,\n peekStreamInt,\n nextValueLooksLikeTextBlob,\n MODEL_TABLE_SPECS,\n TABLE_78_NUMERIC_FIELDS,\n WIRE_TAG_TABLES,\n MASK_ONLY_TABLES,\n ENTITY_FOOTPRINTS,\n PLACED_ENTITY_TYPE_IDS,\n FabricatorType,\n FABRICATOR_TYPES,\n HELM_TYPE_IDS,\n COMMS_STATION_TYPE_ID,\n COMMS_STATION_MAX_CHARGES,\n CARGO_HATCH_TYPE_IDS,\n THRUSTER_TYPE_IDS,\n EXPANDO_BOX_TYPE_ID,\n ITEM_LAUNCHER_TYPE_ID,\n LOADER_TYPE_ID,\n NAVIGATION_UNIT_TYPE_ID,\n entityTypeIdFromRecord,\n CANNON_AMMO_COLOR_ITEM_IDS,\n CANNON_TYPE_IDS,\n THRUSTER_FACING_NAMES,\n DEFAULT_OVERWORLD_WARP_DURATION_SECONDS,\n OVERWORLD_WARP_TICKS_PER_SECOND,\n MARKER_TYPE_IDS,\n TEAM_RANK_NAMES,\n PLAYER_SHIP_RANKS,\n PUSHER_MODE_NAMES,\n SIGN_DISPLAY_MODE_NAMES,\n SHIELD_GENERATOR_BOOST_STATE_NAMES,\n NAVIGATION_DEFAULT_DESTINATION,\n navigationDestinationName,\n isNavigationDestination,\n numberOrNull,\n qKey,\n blobKey,\n cloneRecord,\n firstRecord,\n TABLE_78_FIELD_BITS,\n table78DeltaRecord,\n isSemanticLoaderDelta,\n decodeText,\n entityNameFromType,\n markerTypeIdForTables,\n itemSummary,\n summarizeItemHolder,\n boundedProgress,\n summarizeFabricator,\n summarizeCargoEjector,\n summarizeCannon,\n summarizeThruster,\n summarizeHelm,\n navigationDestinationFromRecord,\n summarizeNavigationUnit,\n summarizeCommsStation,\n summarizeHealth,\n summarizeBot,\n isBoulderBotExclusion,\n botClassFromState,\n isCowardBossState,\n isOrangeFoolBotState,\n isZombieBossBotState,\n isRedSentryBotState,\n isBlueRusherBotState,\n isRedSniperBotState,\n isYellowHunterBotState,\n isAquaShielderBotState,\n isLazerEnthusiastBotState,\n isYellowMineGuardBotState,\n isShieldHelperBotState,\n isShieldMasterBotState,\n botIdentifierFromState,\n summarizeShieldGenerator,\n summarizeShipControl,\n summarizeShipSize,\n summarizeShipWorldMetadata,\n summarizeItemCrate,\n scaledSizeSummary,\n summarizeExpandoBox,\n summarizeHoverOutline,\n summarizeMapMarker,\n summarizeDockingSpring,\n summarizeHugeThruster,\n summarizeLoader,\n summarizeCargoHatch,\n summarizePusher,\n summarizePusherBeam,\n normalizeDegrees,\n summarizeItemLauncher,\n summarizeSign,\n summarizeShieldProjector,\n summarizeSpawnPoint,\n summarizeDoor,\n enumValueName,\n colorToCss,\n previewActionName,\n bitOffsets,\n summarizeBlueprintPreview,\n summarizePlayerPreview,\n summarizePlayer,\n patronTierName,\n mergeContents,\n MAX_HOVER_OUTLINE_FOOTPRINT_CELLS,\n entityFootprint,\n entityLabel,\n entityCategory,\n BLOCK_KEY_OFFSET,\n BLOCK_KEY_STRIDE,\n blockKey,\n EMPTY_TABLE,\n MAX_RETAINED_REMOVALS,\n MAX_RETAINED_ERRORS,\n pushCapped,\n defineLazyProperty,\n} = modelDecoder;\n\nexport class ModelState {\n #loaderConfig = new LoaderConfigTracker();\n #blueprintItems = null;\n #helmOccupied = new Map();\n #commsStationOccupied = new Map();\n #navigationUnitAutoWarp = new Map();\n\n constructor({isOverworld = null} = {}) {\n this.isOverworld = isOverworld == null ? null : Boolean(isOverworld);\n this.generation = null;\n this.tables = new Map();\n this.removedEntities = [];\n this.lastUpdate = null;\n this.errors = [];\n // Retained arrays are capped; the totals remain exact.\n this.totalRemovedCount = 0;\n this.totalErrorCount = 0;\n this._derived = null;\n }\n\n setWorldKind(isOverworld) {\n const next = isOverworld == null ? null : Boolean(isOverworld);\n if (this.isOverworld === next) return;\n this.isOverworld = next;\n this.#invalidateDerived();\n }\n\n table(id) {\n // Shared empty map: #summarizeEntity performs ~32 record() lookups per\n // entity, most against absent tables, and each miss used to allocate.\n return this.tables.get(Number(id)) || EMPTY_TABLE;\n }\n\n record(tableId, entityId) {\n return this.table(tableId).get(Number(entityId)) || null;\n }\n\n entity(entityId) {\n const id = Number(entityId);\n if (!Number.isFinite(id)) return null;\n return this.#derivedState().entitiesById.get(id) || null;\n }\n\n entities() {\n return this.#derivedState().entities.slice();\n }\n\n blocks() {\n this.#derivedState();\n return this.#derivedBlocks().slice();\n }\n\n // O(1) point lookup. Callers previously had to materialise and scan the whole\n // block list to answer this.\n blockAt(x, y) {\n this.#derivedState();\n return this.#blocksIndex().get(blockKey(x, y)) || null;\n }\n\n apply(bytes, {full = false} = {}) {\n this.#blueprintItems = null;\n const reader = new ModelReader(bytes);\n const update = {\n generation: null,\n full: Boolean(full),\n changedEntities: new Set(),\n sections: [],\n removals: [],\n unknownTags: [],\n error: null\n };\n\n try {\n update.generation = reader.readStreamInt();\n this.generation = update.generation;\n\n while (reader.remaining > 0) {\n if (reader.trailingZeroOnly()) break;\n let tag;\n try {\n tag = reader.readStreamInt();\n } catch (error) {\n throw new Error(`model section tag offset ${reader.offset}: ${error.message}`);\n }\n if (tag === 0) break;\n if (tag === 57005) {\n update.removals.push(...this.#readRemovals(reader));\n continue;\n }\n\n const tableId = WIRE_TAG_TABLES.get(tag);\n if (tableId == null) {\n update.unknownTags.push({tag, offset: reader.offset});\n // Some live captures end with a terminal, empty section tag we do not\n // yet have a table mapping for. If the rest of the packet is just\n // zero terminators, keep the decoded sections and stop cleanly rather\n // than turning the whole frame into a decode error.\n if (reader.trailingZeroOnly()) break;\n throw new Error(`unsupported model_data section tag ${tag}`);\n }\n\n const section = this.#readSection(reader, tag, tableId);\n update.sections.push(section);\n for (const record of section.records) update.changedEntities.add(record.entity);\n }\n } catch (error) {\n update.error = error;\n this.totalErrorCount += 1;\n pushCapped(this.errors, {message: error.message, generation: update.generation}, MAX_RETAINED_ERRORS);\n }\n\n this.#remapIndexedLoaderConfig(update);\n this.#updateLoaderConfig(update);\n this.#updateNavigationUnitAutoWarp(update);\n this.#updateHelmOccupancy(update);\n this.#updateCommsStationOccupancy(update);\n this.lastUpdate = update;\n this.#updateDerived(update);\n return update;\n }\n\n // `blocks` is opt-in: materialising and sorting the per-cell index is the most\n // expensive part of a snapshot, and most callers never read it. Mirrors how\n // `includeTiles` already works on WorldState.snapshot().\n snapshot({includeTables = false, includeBlocks = false} = {}) {\n const derived = this.#derivedState();\n return {\n generation: this.generation,\n tableCount: this.tables.size,\n entityCount: derived.entityCount,\n removedEntities: this.removedEntities.slice(-50),\n lastUpdate: this.lastUpdate ? summarizeUpdate(this.lastUpdate) : null,\n errors: this.errors.slice(-10),\n entities: derived.entities.slice(),\n blocks: includeBlocks ? this.#derivedBlocks().slice() : undefined,\n transforms: derived.transforms.slice(),\n players: derived.players.slice(),\n shipControls: derived.shipControls.slice(),\n machines: this.#machinesSnapshot(derived.machines),\n tables: includeTables ? this.tablesSnapshot() : derived.tableSummaries.slice()\n };\n }\n\n tablesSnapshot() {\n return [...this.tables.entries()].map(([id, records]) => ({\n id,\n name: MODEL_TABLE_SPECS.get(id)?.name || null,\n records: [...records.entries()].map(([entity, record]) => ({entity, ...cloneRecord(record)}))\n }));\n }\n\n transforms() {\n return this.#derivedState().transforms.slice();\n }\n\n itemHolders() {\n return this.#records(6).map((entry) => summarizeItemHolder(entry.entity, entry));\n }\n\n fabricators() {\n return this.#records(53).map((entry) => summarizeFabricator(entry.entity, entry, this.record(6, entry.entity), this.record(7, entry.entity)));\n }\n\n players() {\n return this.#derivedState().players.slice();\n }\n\n shipControls() {\n return this.#derivedState().shipControls.slice();\n }\n\n shipMetadata() {\n if (this.isOverworld) return null;\n const lockdownRecord = firstRecord(this.table(11));\n const shipRecord = firstRecord(this.table(16), (record) => record?.blob20 && typeof record?.q32 === \"number\" && typeof record?.q36 === \"number\");\n return summarizeShipWorldMetadata(lockdownRecord, shipRecord);\n }\n\n machines() {\n return this.#machinesSnapshot(this.#derivedState().machines);\n }\n\n #machinesSnapshot(machines) {\n return {\n itemHolders: machines.itemHolders.slice(),\n fabricators: machines.fabricators.slice(),\n cargoEjectors: machines.cargoEjectors.slice(),\n cannons: machines.cannons.slice(),\n thrusters: machines.thrusters.slice(),\n pushers: machines.pushers.slice(),\n pusherBeams: machines.pusherBeams.slice(),\n launchers: machines.launchers.slice(),\n health: machines.health.slice(),\n loaders: machines.loaders.slice(),\n cargoHatches: machines.cargoHatches.slice(),\n navigationUnits: machines.navigationUnits.slice(),\n commsStations: machines.commsStations.slice(),\n fluidTanks: machines.fluidTanks.slice(),\n shieldGenerators: machines.shieldGenerators.slice(),\n shieldProjectors: machines.shieldProjectors.slice(),\n helms: machines.helms.slice(),\n signs: machines.signs.slice(),\n spawnPoints: machines.spawnPoints.slice(),\n doors: machines.doors.slice(),\n expandoBoxes: machines.expandoBoxes.slice()\n };\n }\n\n #invalidateDerived() {\n this._derived = null;\n }\n\n #updateDerived(update) {\n if (!this._derived) return;\n if (!update.removals.length && !update.changedEntities.size) return;\n\n for (const section of update.sections) {\n for (const record of section.records || []) this.#addDerivedEntityTable(record.entity, section.table);\n }\n\n if (update.sections.some((section) => section.table === 12)) {\n for (const entityId of this.table(55).keys()) update.changedEntities.add(entityId);\n }\n for (const entityId of update.removals) this.#removeDerivedEntity(entityId);\n for (const entityId of update.changedEntities) this.#refreshDerivedEntity(entityId);\n this._derived.summariesDirty = true;\n this._derived.tableSummariesDirty = true;\n }\n\n #updateLoaderConfig(update) {\n const seenEntities = new Set();\n for (const section of update.sections || []) {\n if (section.table !== 78) continue;\n for (const changed of section.records || []) {\n if (changed.indexedLoaderConfig) {\n this.#loaderConfig.updateIndexedSnapshotRecord(null, changed.entity, changed.record, changed.mask, changed.cumulativeRecord, changed.configEntity);\n continue;\n }\n const typeId = entityTypeIdFromRecord(this.record(7, changed.entity));\n this.#loaderConfig.updateRecord(null, changed.entity, changed.record ?? this.record(78, changed.entity), changed.mask, changed.previous, {\n repeatedInUpdate: seenEntities.has(changed.entity),\n allowSparseBaseline: typeId === LOADER_TYPE_ID,\n repeatedInSection: changed.repeatedInSection,\n semanticSnapshot: Boolean(update.full),\n semanticDelta: isSemanticLoaderDelta(changed, update.full),\n deltaRecord: table78DeltaRecord(changed)\n });\n seenEntities.add(changed.entity);\n }\n }\n }\n\n #remapIndexedLoaderConfig(update) {\n if (!update.full || update.error) return;\n const rows = [];\n for (const section of update.sections || []) {\n if (section.table !== 78) continue;\n for (const changed of section.records || []) rows.push(changed);\n }\n if (!rows.length) return;\n\n const loaderIds = [...this.table(7).entries()]\n .filter(([, record]) => entityTypeIdFromRecord(record) === LOADER_TYPE_ID)\n .map(([entity]) => entity)\n .sort((a, b) => a - b);\n if (loaderIds.length !== rows.length) return;\n if (rows.every((row, index) => row.entity === loaderIds[index])) return;\n\n const remappedTable = new Map();\n for (const [index, changed] of rows.entries()) {\n const rawRecord = table78DeltaRecord(changed);\n changed.configEntity = changed.entity;\n changed.entity = loaderIds[index];\n changed.cumulativeRecord = cloneRecord(changed.record || {});\n changed.record = cloneRecord(rawRecord);\n delete changed.previous;\n changed.indexedLoaderConfig = true;\n remappedTable.set(changed.entity, cloneRecord(rawRecord));\n update.changedEntities.add(changed.entity);\n }\n this.tables.set(78, remappedTable);\n }\n\n #updateNavigationUnitAutoWarp(update) {\n const trackedBeforeUpdate = new Set(this.#navigationUnitAutoWarp.keys());\n const initializedThisUpdate = new Set();\n\n for (const section of update.sections || []) {\n if (section.table !== 78) continue;\n for (const changed of section.records || []) {\n const typeId = entityTypeIdFromRecord(this.record(7, changed.entity));\n if (typeId !== NAVIGATION_UNIT_TYPE_ID) continue;\n\n const record = this.record(78, changed.entity);\n if (!record) continue;\n\n if (!trackedBeforeUpdate.has(changed.entity)) {\n if (initializedThisUpdate.has(changed.entity)) continue;\n const q32Destination = navigationDestinationFromEncodedValue(record.q32);\n const q36Destination = navigationDestinationFromEncodedValue(record.q36);\n const q24Destination = navigationDestinationFromEncodedValue(record.q24);\n const q20Destination = navigationDestinationFromEncodedValue(record.q20);\n const q32DestinationRow = (changed.mask & 9) === 9 && record.q20 === 0 && record.q24 == null && q32Destination != null;\n const destinationBase = q32DestinationRow\n ? q32Destination\n : (changed.mask & 17) === 17 && record.q20 === 0 && record.q24 == null && record.q32 == null && q36Destination != null\n ? q36Destination\n : record.q20 === 0 && q24Destination != null\n ? q24Destination\n : null;\n const q36DestinationRow = destinationBase === q36Destination && q36Destination != null;\n const pureDestinationRow = changed.mask === 1 && q20Destination != null;\n const noCaptainsOnlyRow = changed.mask === 16 && record.q36 === 0;\n this.#navigationUnitAutoWarp.set(changed.entity, {\n destination: navigationDestinationFromRecord(record, changed.mask),\n destinationBase,\n shieldFailure: pureDestinationRow || q36DestinationRow || noCaptainsOnlyRow ? true : q32DestinationRow ? false : record.q32 == null ? (record.q24 == null ? null : true) : false,\n noCaptains: q32DestinationRow && changed.mask === 9\n ? true\n : pureDestinationRow ? true\n : noCaptainsOnlyRow ? false\n : q36DestinationRow ? false : record.q36 == null ? (record.q24 == null ? null : true) : false\n });\n initializedThisUpdate.add(changed.entity);\n continue;\n }\n\n const current = this.#navigationUnitAutoWarp.get(changed.entity);\n if (!current) continue;\n const q32Destination = navigationDestinationFromEncodedValue(record.q32);\n const q36Destination = navigationDestinationFromEncodedValue(record.q36);\n const q20Destination = navigationDestinationFromEncodedValue(record.q20);\n const q32DestinationRow = (changed.mask & 9) === 9 && record.q20 === 0 && record.q24 == null && q32Destination != null;\n const q36DestinationRow = (changed.mask & 17) === 17 && record.q20 === 0 && record.q24 == null && record.q32 == null && q36Destination != null;\n const baselineRow = (changed.mask & 27) === 27 && record.q20 === 0 && record.q24 != null && record.q32 != null && record.q36 != null;\n if (q32DestinationRow) {\n current.destination = q32Destination;\n current.destinationBase = q32Destination;\n current.shieldFailure = false;\n if (record.q36 != null) current.noCaptains = record.q36 !== 0;\n else if (changed.mask === 9) current.noCaptains = true;\n continue;\n }\n if (q36DestinationRow) {\n current.destination = q36Destination;\n current.destinationBase = q36Destination;\n continue;\n }\n if (baselineRow) {\n current.shieldFailure = false;\n current.noCaptains = record.q36 !== 0;\n continue;\n }\n if (changed.mask === 1) {\n const relativeDestination = current.destinationBase == null || typeof record.q20 !== \"number\"\n ? null\n : current.destinationBase + record.q20;\n current.destination = q20Destination ?? (isNavigationDestination(relativeDestination) ? relativeDestination : current.destination);\n } else if ((changed.mask & 1) && record.q20 != null && record.q20 !== 0) {\n current.destination = q20Destination ?? (isNavigationDestination(record.q20) ? record.q20 : current.destination);\n }\n if (changed.mask & 8) current.shieldFailure = !current.shieldFailure;\n if (changed.mask & 16) current.noCaptains = !current.noCaptains;\n }\n }\n }\n\n #updateHelmOccupancy(update) {\n const table7 = update.sections.find((section) => section.table === 7);\n if (!table7) return;\n\n const changedPilotState = new Map();\n for (const section of update.sections) {\n if (section.table !== 55) continue;\n for (const changed of section.records) {\n if (!(changed.mask & 16)) continue;\n const player = this.record(55, changed.entity);\n changedPilotState.set(changed.entity, Boolean(player?.q107));\n }\n }\n\n const activePilotCount = [...this.table(55).values()].filter((record) => record?.q107).length;\n for (const changed of table7.records) {\n const record = this.record(7, changed.entity);\n const typeId = entityTypeIdFromRecord(record);\n if (!HELM_TYPE_IDS.has(typeId)) continue;\n\n if (activePilotCount > 0 && record?.q20 === 0 && HELM_TYPE_IDS.has(Number(record?.q32))) {\n this.#helmOccupied.set(changed.entity, true);\n }\n\n if (!(changed.mask & 8) || changedPilotState.size === 0) continue;\n this.#helmOccupied.set(changed.entity, [...changedPilotState.values()].some(Boolean));\n }\n }\n\n #updateCommsStationOccupancy(update) {\n const table7 = update.sections.find((section) => section.table === 7);\n if (!table7) return;\n\n for (const changed of table7.records) {\n const record = this.record(7, changed.entity);\n const typeId = entityTypeIdFromRecord(record);\n if (typeId !== COMMS_STATION_TYPE_ID) continue;\n\n const hasAbsoluteTypeState = update.full || (changed.mask & 1);\n if (hasAbsoluteTypeState && record?.q20 === 0 && Number(record?.q32) === COMMS_STATION_TYPE_ID) {\n this.#commsStationOccupied.set(changed.entity, true);\n continue;\n }\n\n if (hasAbsoluteTypeState && Number(record?.q20) === COMMS_STATION_TYPE_ID) {\n this.#commsStationOccupied.set(changed.entity, false);\n }\n\n if (changed.mask & 8) {\n this.#commsStationOccupied.set(changed.entity, !this.#commsStationOccupied.get(changed.entity));\n }\n }\n }\n\n #derivedState() {\n if (this._derived) {\n this.#ensureDerivedSummaries();\n return this._derived;\n }\n\n const entityIds = [];\n const seenEntities = new Set();\n const entityTableIds = new Map();\n const tableSummaries = [];\n\n for (const [tableId, records] of this.tables.entries()) {\n const name = MODEL_TABLE_SPECS.get(tableId)?.name || null;\n tableSummaries.push({id: tableId, name, count: records.size});\n for (const entity of records.keys()) {\n if (!entityTableIds.has(entity)) entityTableIds.set(entity, []);\n entityTableIds.get(entity).push(tableId);\n if (!seenEntities.has(entity)) {\n seenEntities.add(entity);\n entityIds.push(entity);\n }\n }\n }\n\n entityIds.sort((a, b) => a - b);\n const entities = entityIds.map((entityId) => this.#summarizeEntity(entityId, this.#tableRowsForEntity(entityId)));\n const entitiesById = new Map(entities.map((entity) => [entity.entity, entity]));\n\n this._derived = {\n entityCount: entityIds.length,\n entityIds,\n entityTableIds,\n entitiesById,\n blocksByKey: null,\n blocks: null,\n blocksDirty: true,\n tableSummaries,\n summariesDirty: true,\n tableSummariesDirty: false\n };\n this.#refreshDerivedSummaries();\n return this._derived;\n }\n\n #tableRowsForEntity(entityId) {\n const rows = [];\n const tableIds = this._derived?.entityTableIds?.get(entityId) || this.tables.keys();\n for (const tableId of tableIds) {\n const record = this.tables.get(tableId)?.get(entityId);\n if (record) rows.push({tableId, name: MODEL_TABLE_SPECS.get(tableId)?.name || null, record});\n }\n return rows;\n }\n\n #addDerivedEntityTable(entityId, tableId) {\n const derived = this._derived;\n if (!derived) return;\n let tableIds = derived.entityTableIds.get(entityId);\n if (!tableIds) {\n tableIds = [];\n derived.entityTableIds.set(entityId, tableIds);\n }\n if (!tableIds.includes(tableId)) insertSorted(tableIds, tableId);\n }\n\n #removeDerivedEntity(entityId) {\n const derived = this._derived;\n const old = derived.entitiesById.get(entityId);\n if (old) this.#removeEntityFromDerivedBlocks(derived, old);\n derived.entitiesById.delete(entityId);\n derived.entityTableIds.delete(entityId);\n const index = derived.entityIds.indexOf(entityId);\n if (index >= 0) derived.entityIds.splice(index, 1);\n derived.entityCount = derived.entityIds.length;\n }\n\n #refreshDerivedEntity(entityId) {\n const rows = this.#tableRowsForEntity(entityId);\n if (!rows.length) {\n this.#removeDerivedEntity(entityId);\n return;\n }\n\n const derived = this._derived;\n const old = derived.entitiesById.get(entityId);\n if (old) this.#removeEntityFromDerivedBlocks(derived, old);\n\n const next = this.#summarizeEntity(entityId, rows);\n derived.entitiesById.set(entityId, next);\n if (!derived.entityIds.includes(entityId)) insertSorted(derived.entityIds, entityId);\n this.#addEntityToDerivedBlocks(derived, next);\n derived.entityCount = derived.entityIds.length;\n }\n\n #tableSummaries() {\n return [...this.tables.entries()].map(([id, records]) => ({\n id,\n name: MODEL_TABLE_SPECS.get(id)?.name || null,\n count: records.size\n }));\n }\n\n // The per-cell block index is the most expensive derived product to build --\n // it walks every occupied cell of every entity. Most consumers never ask for\n // blocks, so it is constructed on first use rather than during the rebuild.\n #blocksIndex() {\n const derived = this._derived;\n if (derived.blocksByKey) return derived.blocksByKey;\n const blocks = new Map();\n for (const entityId of derived.entityIds) {\n const entity = derived.entitiesById.get(entityId);\n if (entity) this.#addEntityToBlockMap(blocks, entity);\n }\n derived.blocksByKey = blocks;\n derived.blocksDirty = true;\n return blocks;\n }\n\n #addEntityToDerivedBlocks(derived, entity) {\n // Nothing to maintain until something has asked for the index; it will be\n // built from current entities on demand.\n if (!derived.blocksByKey) return;\n this.#addEntityToBlockMap(derived.blocksByKey, entity);\n derived.blocksDirty = true;\n }\n\n #addEntityToBlockMap(blocks, entity) {\n if (!entity.transform || !Number.isFinite(entity.transform.x) || !Number.isFinite(entity.transform.y)) return;\n const footprint = entity.footprint || {width: 1, height: 1};\n const startX = Math.floor(entity.transform.x);\n const startY = Math.floor(entity.transform.y);\n for (let dx = 0; dx < footprint.width; dx++) {\n for (let dy = 0; dy < footprint.height; dy++) {\n const x = startX + dx;\n const y = startY + dy;\n const key = blockKey(x, y);\n let block = blocks.get(key);\n if (block === undefined) {\n block = {x, y, entities: []};\n blocks.set(key, block);\n }\n block.entities.push(entity);\n }\n }\n }\n\n #removeEntityFromDerivedBlocks(derived, entity) {\n if (!derived.blocksByKey) return;\n const id = entity.entity;\n for (const cell of entity.occupies || []) {\n const key = blockKey(cell.x, cell.y);\n const block = derived.blocksByKey.get(key);\n if (!block) continue;\n // Splice in place rather than allocating a filtered array per cell.\n const list = block.entities;\n for (let i = list.length - 1; i >= 0; i--) {\n if (list[i].entity === id) list.splice(i, 1);\n }\n if (!list.length) derived.blocksByKey.delete(key);\n derived.blocksDirty = true;\n }\n }\n\n #ensureDerivedSummaries() {\n const derived = this._derived;\n if (!derived) return;\n if (derived.tableSummariesDirty) {\n derived.tableSummaries = this.#tableSummaries();\n derived.tableSummariesDirty = false;\n }\n if (derived.summariesDirty) this.#refreshDerivedSummaries();\n }\n\n #refreshDerivedSummaries() {\n const derived = this._derived;\n const entities = derived.entityIds.map((entityId) => derived.entitiesById.get(entityId)).filter(Boolean);\n const machines = {\n itemHolders: [],\n fabricators: [],\n cargoEjectors: [],\n cannons: [],\n thrusters: [],\n pushers: [],\n pusherBeams: [],\n launchers: [],\n health: [],\n loaders: [],\n cargoHatches: [],\n navigationUnits: [],\n commsStations: [],\n fluidTanks: [],\n shieldGenerators: [],\n shieldProjectors: [],\n helms: [],\n signs: [],\n spawnPoints: [],\n doors: [],\n expandoBoxes: []\n };\n const players = [];\n const shipControls = [];\n const transforms = [];\n\n for (const entity of entities) {\n if (entity.transform) transforms.push(entity.transform);\n const contents = entity.contents;\n if (!contents) continue;\n if (contents.itemHolder) machines.itemHolders.push(contents.itemHolder);\n if (contents.fabricator) machines.fabricators.push(contents.fabricator);\n if (contents.cargoEjector) machines.cargoEjectors.push(contents.cargoEjector);\n if (contents.cannon) machines.cannons.push(contents.cannon);\n if (contents.thruster) machines.thrusters.push(contents.thruster);\n if (contents.pusher) machines.pushers.push(contents.pusher);\n if (contents.pusherBeam) machines.pusherBeams.push(contents.pusherBeam);\n if (contents.launcher) machines.launchers.push(contents.launcher);\n if (contents.health) machines.health.push(contents.health);\n if (contents.loader) machines.loaders.push(contents.loader);\n if (contents.cargoHatch) machines.cargoHatches.push(contents.cargoHatch);\n if (contents.navigationUnit) machines.navigationUnits.push(contents.navigationUnit);\n if (contents.commsStation) machines.commsStations.push(contents.commsStation);\n if (contents.fluidTank) machines.fluidTanks.push(contents.fluidTank);\n if (contents.shieldGenerator) machines.shieldGenerators.push(contents.shieldGenerator);\n if (contents.shieldProjector) machines.shieldProjectors.push(contents.shieldProjector);\n if (contents.helm) machines.helms.push(contents.helm);\n if (contents.sign) machines.signs.push(contents.sign);\n if (contents.spawnPoint) machines.spawnPoints.push(contents.spawnPoint);\n if (contents.door) machines.doors.push(contents.door);\n if (contents.expandoBox) machines.expandoBoxes.push(contents.expandoBox);\n if (contents.player) players.push(contents.player);\n if (contents.shipControl) shipControls.push(contents.shipControl);\n }\n\n derived.entities = entities;\n derived.transforms = transforms;\n derived.players = players;\n derived.shipControls = shipControls;\n derived.machines = machines;\n derived.summariesDirty = false;\n }\n\n // The sorted block list is the single most expensive derived product (a sort\n // over every occupied cell in the world). Build it only when a caller actually\n // asks for blocks, rather than as a side effect of every summary refresh.\n #derivedBlocks() {\n const derived = this._derived;\n const index = this.#blocksIndex();\n if (derived.blocksDirty || !derived.blocks) {\n derived.blocks = [...index.values()].sort((a, b) => (a.y - b.y) || (a.x - b.x));\n derived.blocksDirty = false;\n }\n return derived.blocks;\n }\n\n // Identical for every entity in a refresh pass, but was rebuilt inside each\n // #summarizeEntity call -- O(entities x table12). Table 12 only changes during\n // apply(), which clears this cache.\n #blueprintPreviewItems() {\n if (this.#blueprintItems) return this.#blueprintItems;\n const items = [];\n for (const [entity, record] of this.table(12)) {\n const summary = summarizeBlueprintPreview(entity, record, this.record(0, entity));\n if (summary) items.push(summary);\n }\n this.#blueprintItems = items;\n return items;\n }\n\n #summarizeEntity(entityId, tableRows = []) {\n // tableRows already lists exactly the tables this entity appears in -- the\n // same source the public `tables` field is built from. Reading through it\n // avoids ~32 lookups against tables the entity is not in.\n const byTable = new Map();\n for (const row of tableRows) byTable.set(row.tableId, row.record);\n const rec = (tableId) => byTable.get(tableId) ?? null;\n const transformRecord = rec(0);\n const itemHolderRecord = rec(6);\n const healthRecord = rec(5);\n const fabricatorRecord = rec(53);\n const cargoEjectorRecord = rec(49);\n const cannonRecord = rec(54);\n const pusherRecord = rec(72);\n const pusherBeamRecord = rec(42);\n const launcherRecord = rec(44);\n const loaderRecord = rec(78);\n const loaderFilterRecord = rec(76);\n const loaderFilterSlotsRecord = rec(77);\n const commsStationRecord = rec(39);\n const fluidTankRecord = rec(60);\n const shieldRecord = rec(61);\n const shieldGeneratorBoostRecord = rec(75);\n const shieldProjectorRecord = rec(62);\n const playerRecord = rec(55);\n const shipControlRecord = rec(20);\n const signRecord = rec(41);\n const spawnPointRecord = rec(8);\n const doorRecord = rec(47);\n const thrusterRecord = rec(50);\n const labelRecord = rec(9);\n const zoneLabelRecord = rec(25);\n const dockingSpringRecord = rec(26);\n const hugeThrusterRecord = rec(23);\n const bodyStateRecord = rec(1);\n const typeRecord = rec(7);\n const crateSizeRecord = rec(3);\n const blueprintPreviewRecord = rec(12);\n const expandoSizeRecord = rec(51);\n const crateItemRecord = rec(19);\n const markerTableIds = [73].filter((tableId) => this.record(tableId, entityId));\n const markerTypeId = markerTypeIdForTables(markerTableIds);\n const markerTypeName = entityNameFromType(markerTypeId);\n const looseItemMarker = Boolean(rec(37));\n const dynamicBody = bodyStateRecord?.q20 === -4;\n const typeId = entityTypeIdFromRecord(typeRecord);\n const itemHolder = summarizeItemHolder(entityId, itemHolderRecord);\n const isExpandoBox = typeId === EXPANDO_BOX_TYPE_ID || markerTypeId === EXPANDO_BOX_TYPE_ID;\n const health = summarizeHealth(entityId, healthRecord);\n const fabricator = summarizeFabricator(entityId, fabricatorRecord, itemHolderRecord, typeRecord);\n const cargoEjector = summarizeCargoEjector(entityId, typeId, cargoEjectorRecord);\n const cannon = summarizeCannon(entityId, cannonRecord, typeId);\n const thruster = summarizeThruster(entityId, typeId, thrusterRecord);\n const pusher = summarizePusher(entityId, pusherRecord, loaderFilterSlotsRecord);\n const pusherBeam = summarizePusherBeam(entityId, pusherBeamRecord);\n const launcher = summarizeItemLauncher(entityId, typeId, launcherRecord);\n const loader = (typeId === LOADER_TYPE_ID || (typeId == null && (loaderRecord || loaderFilterRecord || loaderFilterSlotsRecord)))\n ? summarizeLoader(entityId, loaderRecord, loaderFilterRecord, loaderFilterSlotsRecord, this.#loaderConfig, typeId === LOADER_TYPE_ID, itemHolderRecord)\n : null;\n const cargoHatch = summarizeCargoHatch(entityId, typeId, loaderFilterRecord, loaderFilterSlotsRecord, rec(45));\n const navigationUnit = summarizeNavigationUnit(entityId, typeId, loaderRecord, this.#navigationUnitAutoWarp.get(entityId));\n const fluidTank = fluidTankRecord ? {\n entity: entityId,\n amount: fluidTankRecord.q24 ?? null,\n state: cloneRecord(fluidTankRecord)\n } : null;\n const shieldGenerator = typeId === 256 ? summarizeShieldGenerator(entityId, shieldRecord, itemHolderRecord, shieldGeneratorBoostRecord) : null;\n const shieldProjector = typeId === 257 ? summarizeShieldProjector(entityId, shieldProjectorRecord) : null;\n const blueprintPreview = summarizeBlueprintPreview(entityId, blueprintPreviewRecord, transformRecord);\n const player = summarizePlayer(entityId, playerRecord, rec(14), this.#blueprintPreviewItems());\n const shipControl = summarizeShipControl(entityId, shipControlRecord);\n const helm = summarizeHelm(entityId, typeId, this.#helmOccupied.get(entityId));\n const commsStation = summarizeCommsStation(entityId, typeId, commsStationRecord, this.#commsStationOccupied.get(entityId));\n const sign = typeId === 218 ? summarizeSign(entityId, signRecord) : null;\n const spawnPoint = typeId === 219 ? summarizeSpawnPoint(entityId, spawnPointRecord) : null;\n const door = typeId === 220 ? summarizeDoor(entityId, spawnPointRecord, doorRecord) : null;\n const shipSize = shipControl && this.isOverworld ? summarizeShipSize(entityId, rec(3)) : null;\n const hoverOutline = summarizeHoverOutline(entityId, crateSizeRecord);\n const expandoBox = isExpandoBox ? summarizeExpandoBox(entityId, itemHolderRecord, expandoSizeRecord) : null;\n const mapMarker = this.isOverworld ? summarizeMapMarker(entityId, labelRecord, zoneLabelRecord, crateSizeRecord) : null;\n const dockingSpring = this.isOverworld\n ? summarizeDockingSpring(entityId, dockingSpringRecord, bodyStateRecord, crateSizeRecord)\n : null;\n const hugeThruster = this.isOverworld\n ? summarizeHugeThruster(entityId, hugeThrusterRecord, crateSizeRecord)\n : null;\n const itemCrate = this.isOverworld && !rec(2) && !rec(18) && health && crateSizeRecord\n ? summarizeItemCrate(entityId, crateSizeRecord, crateItemRecord, healthRecord)\n : null;\n const bot = this.isOverworld\n ? summarizeBot(entityId, {\n health,\n table2Record: rec(2),\n smallRecord: crateSizeRecord,\n combatRecord: rec(18),\n motionRecord: crateItemRecord,\n table10Record: rec(10),\n table51Record: rec(51),\n itemCrate,\n player,\n shipControl\n })\n : null;\n const transform = transformRecord ? {\n entity: entityId,\n x: numberOrNull(transformRecord.q20, 40),\n y: numberOrNull(transformRecord.q24, 40),\n rot: numberOrNull(transformRecord.q28, 127.324),\n flags: [transformRecord.q33, transformRecord.q34, transformRecord.q35].filter((value) => value != null)\n } : null;\n const contents = mergeContents({\n itemHolder, expandoBox, hoverOutline, itemCrate, mapMarker, dockingSpring,\n hugeThruster, blueprintPreview, health, bot, fabricator, cargoEjector,\n cannon, thruster, pusher, pusherBeam, launcher, loader, cargoHatch,\n navigationUnit, commsStation, fluidTank, shieldGenerator, shieldProjector,\n helm, player, shipControl, sign, spawnPoint, door, shipSize\n });\n const footprint = entityFootprint({\n entity: entityId,\n typeId,\n markerTypeId,\n itemHolder,\n expandoBox,\n hoverOutline,\n itemCrate,\n hugeThruster,\n fabricator,\n cargoEjector,\n cannon,\n thruster,\n pusher,\n launcher,\n loader,\n cargoHatch,\n navigationUnit,\n commsStation,\n fluidTank,\n shieldGenerator,\n shieldProjector,\n helm,\n player,\n shipControl\n });\n const typeName = entityNameFromType(typeId);\n const category = entityCategory({\n typeId,\n markerTypeId,\n looseItemMarker,\n dynamicBody,\n transform,\n itemHolder,\n itemCrate,\n mapMarker,\n dockingSpring,\n hugeThruster,\n blueprintPreview,\n fabricator,\n cargoEjector,\n cannon,\n pusher,\n launcher,\n loader,\n cargoHatch,\n navigationUnit,\n commsStation,\n fluidTank,\n shieldGenerator,\n shieldProjector,\n helm,\n player,\n shipControl\n });\n const summary = {\n entity: entityId,\n category,\n typeId,\n typeName,\n markerTypeId,\n markerTypeName,\n label: entityLabel({\n category,\n typeId,\n typeName,\n markerTypeName,\n mapMarker,\n dockingSpring,\n hugeThruster,\n blueprintPreview,\n expandoBox,\n hoverOutline,\n itemHolder,\n itemCrate,\n fabricator,\n cargoEjector,\n cannon,\n thruster,\n pusher,\n pusherBeam,\n launcher,\n loader,\n cargoHatch,\n navigationUnit,\n fluidTank,\n shieldGenerator,\n shieldProjector,\n player,\n shipControl,\n sign,\n spawnPoint,\n door,\n isOverworld: this.isOverworld\n }),\n kind: [\n transform ? \"transform\" : null,\n dynamicBody ? \"dynamic_body\" : null,\n itemHolder ? \"item_holder\" : null,\n health ? \"health\" : null,\n bot ? \"bot\" : null,\n itemCrate ? \"item_crate\" : null,\n expandoBox ? \"expando_box\" : null,\n hoverOutline ? \"hover_outline\" : null,\n mapMarker ? \"map_marker\" : null,\n dockingSpring ? \"docking_spring\" : null,\n hugeThruster ? \"huge_thruster\" : null,\n blueprintPreview ? \"blueprint_preview\" : null,\n markerTableIds.length ? \"marker\" : null,\n looseItemMarker ? \"loose_item_marker\" : null,\n fabricator ? \"fabricator\" : null,\n cargoEjector ? \"cargo_ejector\" : null,\n cannon ? \"cannon\" : null,\n thruster ? \"thruster\" : null,\n pusher ? \"pusher\" : null,\n pusherBeam ? \"pusher_beam\" : null,\n launcher ? \"launcher\" : null,\n loader ? \"loader\" : null,\n cargoHatch ? \"cargo_hatch\" : null,\n navigationUnit ? \"navigation_unit\" : null,\n commsStation ? \"comms_station\" : null,\n fluidTank ? \"fluid_tank\" : null,\n shieldGenerator ? \"shield_generator\" : null,\n shieldProjector ? \"shield_projector\" : null,\n helm ? \"helm\" : null,\n player ? \"player\" : null,\n shipControl ? \"ship_control\" : null,\n sign ? \"sign\" : null,\n spawnPoint ? \"spawn_point\" : null,\n door ? \"door\" : null,\n shipControl && this.isOverworld ? \"overworld_ship\" : null\n ].filter(Boolean),\n transform,\n footprint,\n contents,\n tables: tableRows.map(({tableId, name, record}) => ({\n tableId,\n name,\n record: cloneRecord(record)\n }))\n };\n // Lazy: most entities are never asked for their occupied cells, and a large\n // footprint materialises hundreds of objects per refresh. Defined as an\n // enumerable memoising accessor so spread, JSON and structuredClone all see\n // the same array they saw before.\n defineLazyProperty(summary, \"occupies\", transform ? () => this.#occupiedBlocks(transform, footprint) : () => []);\n return summary;\n }\n\n #occupiedBlocks(transform, footprint) {\n const startX = Math.floor(transform.x ?? 0);\n const startY = Math.floor(transform.y ?? 0);\n const cells = [];\n for (let dx = 0; dx < footprint.width; dx++) {\n for (let dy = 0; dy < footprint.height; dy++) {\n cells.push({x: startX + dx, y: startY + dy});\n }\n }\n return cells;\n }\n\n #records(tableId) {\n return [...this.table(tableId).entries()].map(([entity, record]) => ({entity, ...record}));\n }\n\n #readRemovals(reader) {\n const removals = [];\n let entity = 0;\n while (reader.remaining > 0) {\n const delta = reader.readStreamInt();\n if (delta === 0) break;\n entity += delta;\n removals.push(entity);\n // Delete only from tables the entity actually appears in when the derived\n // index is available; fall back to a full scan otherwise.\n const known = this._derived?.entityTableIds?.get(entity);\n if (known) {\n for (const tableId of known) this.tables.get(tableId)?.delete(entity);\n } else {\n for (const records of this.tables.values()) records.delete(entity);\n }\n this.#loaderConfig.delete(null, entity);\n this.#helmOccupied.delete(entity);\n this.#commsStationOccupied.delete(entity);\n this.#navigationUnitAutoWarp.delete(entity);\n }\n this.totalRemovedCount += removals.length;\n for (const id of removals) pushCapped(this.removedEntities, id, MAX_RETAINED_REMOVALS);\n return removals;\n }\n\n #readSection(reader, tag, tableId) {\n const spec = MODEL_TABLE_SPECS.get(tableId);\n return this.#readSectionRecords(reader, tag, tableId, spec);\n }\n\n #readSectionRecords(reader, tag, tableId, spec) {\n const section = {tag, table: tableId, name: spec?.name || null, records: []};\n let entity = 0;\n const seenEntities = tableId === 78 ? new Set() : null;\n while (reader.remaining > 0) {\n const recordOffset = reader.offset;\n let delta;\n try {\n delta = reader.readStreamInt();\n } catch (error) {\n throw new Error(`model table ${tableId} tag ${tag} record offset ${recordOffset}: ${error.message}`);\n }\n if (delta === 0) break;\n entity += delta;\n let mask;\n try {\n mask = reader.readUnsigned();\n } catch (error) {\n throw new Error(`model table ${tableId} tag ${tag} entity ${entity} mask offset ${reader.offset}: ${error.message}`);\n }\n const record = this.#getRecord(tableId, entity);\n const previous = tableId === 78 ? cloneRecord(record) : null;\n record.lastMask = mask;\n\n try {\n if (spec) this.#applyRecordSpec(reader, record, mask, spec);\n else if (!MASK_ONLY_TABLES.has(tableId)) throw new Error(`missing model table spec ${tableId}`);\n } catch (error) {\n throw new Error(`model table ${tableId} tag ${tag} entity ${entity} mask ${mask} offset ${reader.offset}: ${error.message}`);\n }\n\n const changed = {entity, mask};\n if (previous) changed.previous = previous;\n if (seenEntities?.has(entity)) changed.repeatedInSection = true;\n seenEntities?.add(entity);\n if (tableId === 78) changed.record = cloneRecord(record);\n section.records.push(changed);\n }\n return section;\n }\n\n #getRecord(tableId, entity) {\n if (!this.tables.has(tableId)) this.tables.set(tableId, new Map());\n const records = this.tables.get(tableId);\n if (!records.has(entity)) records.set(entity, {});\n return records.get(entity);\n }\n\n #applyRecordSpec(reader, record, mask, spec) {\n if (typeof spec.read === \"function\") {\n spec.read(reader, record, mask);\n if (spec.scale) record.scaled = spec.scale(record);\n return;\n }\n\n const hasPacked = Boolean(\n (spec.packedMask && (mask & spec.packedMask)) ||\n spec.packedBits?.some((item) => mask & item.bit)\n );\n let packed = null;\n if (hasPacked && spec.packedBeforeValues) packed = reader.readUnsigned();\n\n let packedIndex = 0;\n if (spec.orderedValues) {\n for (const item of spec.orderedItems) {\n if (!(mask & item.bit)) continue;\n if (item.kind === \"blob\") record[item.key] = reader.readBlob();\n else record[item.key] = (record[item.key] || 0) + reader.readFieldDelta();\n }\n } else {\n for (const blob of spec.blobs || []) {\n if (mask & blob.bit) record[blob.key] = reader.readBlob();\n }\n }\n\n if (hasPacked && !spec.packedBeforeValues) packed = reader.readUnsigned();\n\n for (const item of spec.packedBits || []) {\n if (mask & item.bit) record[item.key] = (packed >> packedIndex++) & 1;\n }\n\n if (packed != null && spec.packedOffsetKeys) {\n for (const key of spec.packedOffsetKeys) {\n record[key] = (packed >> packedIndex++) & 1;\n }\n }\n\n if (!spec.orderedValues) {\n for (const field of spec.fields || []) {\n if (!(mask & field.bit)) continue;\n record[field.key] = (record[field.key] || 0) + reader.readFieldDelta();\n }\n }\n\n if (spec.scale) record.scaled = spec.scale(record);\n }\n}\n\nfunction summarizeUpdate(update) {\n return {\n generation: update.generation,\n sectionCount: update.sections.length,\n removals: update.removals.length,\n unknownTags: update.unknownTags,\n error: update.error?.message || null,\n sections: update.sections.map((section) => ({\n tag: section.tag,\n table: section.table,\n name: section.name,\n records: section.records.length\n }))\n };\n}\n\nfunction insertSorted(values, value) {\n let low = 0;\n let high = values.length;\n while (low < high) {\n const mid = (low + high) >> 1;\n if (values[mid] < value) low = mid + 1;\n else high = mid;\n }\n values.splice(low, 0, value);\n}\n\nexport function decodeModelData(bytes) {\n const state = new ModelState();\n return state.apply(bytes);\n}\n", "export const OFFICIAL_CLIENT_SNAPSHOT = {\n capturedAt: \"2026-05-17\",\n gameVersion: \"Fri May 8 09:43:31 PM MDT 2026 / 92e9666650b250eae8968a40ff4f3a04c257f2e6\",\n moduleTable: \"drednot-official-client/latest-captured-module-table.js\",\n wasmGlue: \"/x/wasm.2cc626268724032ec685dd97023d77da.js\",\n wasm: \"/x/4719d471af3e158f9fc6c69af872fe1c.wasm\",\n sourceModules: {\n tilesets: 89,\n physicsFilters: 42,\n itemIds: 78\n }\n};\n\nexport const OFFICIAL_CLIENT_ITEM_ID = {\n BLOCK: 232,\n BLOCK_HYPER_RUBBER: 233,\n BLOCK_ICE_GLASS: 234,\n BLOCK_LADDER: 235,\n BLOCK_WALKWAY: 236,\n BLOCK_ITEM_NET: 237,\n PAINT: 239,\n BLOCK_ANNIHILATOR: 254,\n BLOCK_LOGISTICS_RAIL: 262\n};\n\nexport const OFFICIAL_CLIENT_FILTERS = {\n DEFAULT_FILTER: {categoryBits: 1, maskBits: 65535, groupIndex: 0},\n NOCOLLIDE_FILTER: {categoryBits: 0, maskBits: 65535, groupIndex: 0},\n FILTER_BLOCK_WALKWAY: {categoryBits: 28, maskBits: 28, groupIndex: 0},\n FILTER_BLOCK_ITEM_NET: {categoryBits: 1, maskBits: 1, groupIndex: 0},\n FILTER_BLOCK_GLASS: {categoryBits: 1, maskBits: 65535, groupIndex: 0}\n};\n\nexport const OFFICIAL_CLIENT_SUBWORLD_MATERIAL_NAMES = new Map([\n [0, \"Nothing\"],\n [1, \"Ship Border Corner\"],\n [2, \"Ship Border Edge Horizontal\"],\n [3, \"Ship Border Edge Vertical\"],\n [4, \"Iron Block\"],\n [5, \"Ladder\"],\n [6, \"Walkway\"],\n [7, \"Item Net\"],\n [8, \"Iron Block\"],\n [9, \"Iron Block\"],\n [10, \"Iron Block\"],\n [11, \"Iron Block\"],\n [12, \"Paint\"],\n [13, \"Hyper Rubber Block\"],\n [14, \"Hyper Ice Block\"],\n [15, \"Annihilator Tile\"],\n [16, \"Logistics Rail\"]\n]);\n\nexport const OFFICIAL_CLIENT_OVERWORLD_MATERIAL_NAMES = new Map([\n [0, \"Air\"],\n [1, \"Wall\"],\n [2, \"Unbreakable\"],\n [3, \"Treasure\"],\n [4, \"Blank\"],\n [5, \"Flux\"],\n [6, \"Sleeping Bot\"],\n [7, \"Bot Red\"],\n [8, \"Strong Wall\"],\n [9, \"Rock\"],\n [10, \"Rock Metal\"],\n [11, \"Rock Flux\"],\n [12, \"Vault\"],\n [13, \"Vault Locked\"]\n]);\n\nconst I = OFFICIAL_CLIENT_ITEM_ID;\nconst F = OFFICIAL_CLIENT_FILTERS;\n\n// Copied from official client module 89. The official damage_f callbacks are\n// behavior, not static tile metadata, so they are intentionally omitted here.\nexport const OFFICIAL_CLIENT_TILESETS = {\n overworld: {\n scale: 8,\n atlas: \"tiles_overworld\",\n tile_width: 64,\n tiles: [\n {solid: false},\n {solid: true, hp: 999},\n {solid: true},\n {solid: true, hp: 1999},\n {solid: true, hp: 999},\n {solid: true, hp: 1999},\n {solid: true, hp: 1},\n {solid: false},\n {solid: true, hp: 1999},\n {solid: true, hp: 199},\n {solid: true, hp: 199},\n {solid: true, hp: 199},\n {solid: true, hp: 999},\n {solid: true}\n ]\n },\n subworld: {\n scale: 1,\n atlas: \"tiles_subworld\",\n tile_width: 40,\n tiles: [\n {solid: false},\n {solid: true},\n {solid: true},\n {solid: true},\n {solid: true, destruct_item: I.BLOCK, blocks_bullets: true, hp: 199},\n {solid: false, destruct_item: I.BLOCK_LADDER, hp: 1},\n {\n solid: true,\n destruct_item: I.BLOCK_WALKWAY,\n hp: 1,\n physics: {\n filter: F.FILTER_BLOCK_WALKWAY,\n transparent: true,\n walkway: true\n }\n },\n {\n solid: true,\n destruct_item: I.BLOCK_ITEM_NET,\n hp: 1,\n physics: {\n filter: F.FILTER_BLOCK_ITEM_NET,\n transparent: true\n },\n no_build_surface: true\n },\n {solid: true, destruct_item: I.BLOCK, blocks_bullets: true, hp: 199},\n {solid: true, destruct_item: I.BLOCK, blocks_bullets: true, hp: 199},\n {solid: true, destruct_item: I.BLOCK, blocks_bullets: true, hp: 199},\n {solid: true, destruct_item: I.BLOCK, blocks_bullets: true, hp: 199},\n {solid: false, destruct_item: I.PAINT, hp: 1},\n {\n solid: true,\n blocks_bullets: true,\n destruct_item: I.BLOCK_HYPER_RUBBER,\n hp: 599,\n physics: {restitution: 0.9}\n },\n {\n solid: true,\n blocks_bullets: true,\n destruct_item: I.BLOCK_ICE_GLASS,\n hp: 199,\n physics: {\n friction: 0,\n filter: F.FILTER_BLOCK_GLASS,\n transparent: true\n }\n },\n {solid: false, destruct_item: I.BLOCK_ANNIHILATOR, hp: 1},\n {solid: false, destruct_item: I.BLOCK_LOGISTICS_RAIL, hp: 1}\n ]\n }\n};\n", "import {\n OFFICIAL_CLIENT_OVERWORLD_MATERIAL_NAMES,\n OFFICIAL_CLIENT_SUBWORLD_MATERIAL_NAMES,\n OFFICIAL_CLIENT_TILESETS\n} from \"../data/official-client-data.js\";\n\nfunction cloneFilter(filter) {\n if (!filter) return null;\n return {\n categoryBits: filter.categoryBits ?? 1,\n maskBits: filter.maskBits ?? 65535,\n groupIndex: filter.groupIndex ?? 0\n };\n}\n\nfunction cloneTile(tile) {\n const copy = {solid: Boolean(tile.solid)};\n if (tile.name != null) copy.name = tile.name;\n if (tile.destruct_item != null) copy.destruct_item = tile.destruct_item;\n if (tile.blocks_bullets != null) copy.blocks_bullets = tile.blocks_bullets;\n if (tile.hp != null) copy.hp = tile.hp;\n if (tile.no_build_surface != null) copy.no_build_surface = tile.no_build_surface;\n if (tile.physics != null) {\n copy.physics = {};\n if (tile.physics.friction != null) copy.physics.friction = tile.physics.friction;\n if (tile.physics.restitution != null) copy.physics.restitution = tile.physics.restitution;\n if (tile.physics.transparent != null) copy.physics.transparent = tile.physics.transparent;\n if (tile.physics.walkway != null) copy.physics.walkway = tile.physics.walkway;\n if (tile.physics.filter != null) copy.physics.filter = cloneFilter(tile.physics.filter);\n }\n return copy;\n}\n\nexport function cloneTileset(tileset) {\n const materialNames = tileset.atlas === \"tiles_subworld\"\n ? OFFICIAL_CLIENT_SUBWORLD_MATERIAL_NAMES\n : tileset.atlas === \"tiles_overworld\"\n ? OFFICIAL_CLIENT_OVERWORLD_MATERIAL_NAMES\n : null;\n return {\n scale: tileset.scale,\n atlas: tileset.atlas,\n tile_width: tileset.tile_width,\n tiles: tileset.tiles.map((tile, materialId) => cloneTile({\n ...tile,\n name: materialNames?.get(materialId)\n }))\n };\n}\n\nexport function getTilesetForWorld(isOverworld) {\n return cloneTileset(isOverworld ? OFFICIAL_CLIENT_TILESETS.overworld : OFFICIAL_CLIENT_TILESETS.subworld);\n}\n", "import {decodeModelPayload, decodeWorldPayload, decompressWorldChunk} from \"../../protocol/inbound/world-payload.js\";\nimport {ModelState} from \"../model/index.js\";\nimport {overworldZoneFromId} from \"../overworld.js\";\nimport {getTilesetForWorld} from \"../tilesets.js\";\n\nconst TILE_SHAPE_NAMES = new Map([\n [0, \"full\"],\n [5, \"bottom-half\"],\n [7, \"top-half\"]\n]);\n\nfunction tileShapeName(shape) {\n const id = Number(shape);\n return Number.isFinite(id) ? TILE_SHAPE_NAMES.get(id) ?? null : null;\n}\n\nconst DEFAULT_HISTORY_LIMITS = {\n eventHistory: 200,\n modelPacketHistory: 100,\n chunkHistory: 64\n};\n\nfunction normalizeLimit(value, fallback) {\n if (value === Infinity) return Infinity;\n const limit = Number(value);\n if (!Number.isFinite(limit) || limit < 0) return fallback;\n return Math.floor(limit);\n}\n\nfunction pushBounded(target, value, limit) {\n if (limit === 0) return;\n target.push(value);\n if (target.length > limit) target.splice(0, target.length - limit);\n}\n\nconst TILE_KEY_OFFSET = 1 << 24;\nconst TILE_KEY_STRIDE = 1 << 25;\n\nexport class WorldState {\n #materialCounts = new Map();\n\n constructor(id, limits = {}) {\n this.historyLimits = {\n eventHistory: normalizeLimit(limits.eventHistory, DEFAULT_HISTORY_LIMITS.eventHistory),\n modelPacketHistory: normalizeLimit(limits.modelPacketHistory, DEFAULT_HISTORY_LIMITS.modelPacketHistory),\n chunkHistory: normalizeLimit(limits.chunkHistory, DEFAULT_HISTORY_LIMITS.chunkHistory)\n };\n // Totals stay truthful even though the retained arrays are capped.\n this.totalChunkCount = 0;\n this.totalEventCount = 0;\n this.id = id;\n this.seed = null;\n this.isOverworld = null;\n this.tileset = null;\n this.blockWidth = null;\n this.blockHeight = null;\n this.parentWorld = null;\n this.parentEntity = null;\n this.tiles = new Map();\n this.chunks = [];\n this.events = [];\n this.modelPackets = [];\n this.commsBubbles = [];\n this._bubbleSequence = 0;\n this.model = new ModelState({isOverworld: this.isOverworld});\n this.lastChunkPatch = null;\n this.lastPacket = null;\n this.meta = null;\n }\n\n readMeta(packet) {\n this.meta = packet;\n this.seed = packet.seed ?? this.seed;\n const isOverworld = packet.is_overworld ?? this.isOverworld;\n this.isOverworld = isOverworld == null ? null : Boolean(isOverworld);\n this.tileset = this.isOverworld == null ? null : getTilesetForWorld(this.isOverworld);\n this.model.setWorldKind(this.isOverworld);\n this.blockWidth = packet.block_w ?? this.blockWidth;\n this.blockHeight = packet.block_h ?? this.blockHeight;\n this.parentWorld = packet.parent_world ?? this.parentWorld;\n this.parentEntity = packet.parent_ent ?? this.parentEntity;\n this.lastPacket = packet;\n }\n\n // Bounded event log. Kept as a method so every call site shares the cap and\n // the running total stays accurate.\n recordEvent(event) {\n this.totalEventCount += 1;\n pushBounded(this.events, event, this.historyLimits.eventHistory);\n return event;\n }\n\n addCommsBubble(packet) {\n const raw = packet?.bubble && typeof packet.bubble === \"object\" ? packet.bubble : {};\n const color = Number.isFinite(Number(raw.color)) ? Number(raw.color) : null;\n const bubble = {\n sequence: ++this._bubbleSequence,\n worldId: this.id,\n entity: Number.isFinite(Number(raw.model_id)) ? Number(raw.model_id) : null,\n modelId: Number.isFinite(Number(raw.model_id)) ? Number(raw.model_id) : null,\n message: typeof raw.msg === \"string\" ? raw.msg : \"\",\n color,\n colorCss: color == null ? null : `rgb(${(color >> 16) & 0xff},${(color >> 8) & 0xff},${color & 0xff})`,\n durationSeconds: Number.isFinite(Number(raw.time)) ? Number(raw.time) : null,\n raw: {...raw}\n };\n this.commsBubbles.push(bubble);\n if (this.commsBubbles.length > 50) this.commsBubbles.splice(0, this.commsBubbles.length - 50);\n this.recordEvent({type: \"comms-bubble\", packet, bubble});\n this.lastPacket = packet;\n return bubble;\n }\n\n decodeEncrypted(data) {\n if (!data || this.seed == null) return null;\n return decodeWorldPayload(data, this.id, this.seed);\n }\n\n applyTile(value) {\n if (!Array.isArray(value) || value.length !== 6) return null;\n const [x, y, material, shape, hp, color] = value;\n return this.setTile({x, y, material, shape, hp, integrity: hp, color});\n }\n\n applyChunk(value) {\n if (!Array.isArray(value) || value.length !== 7) return null;\n const [chunkX, chunkY, minX, minY, maxX, maxY, compressedPatch] = value;\n // Index the decompressed bytes directly; spreading into a plain array cost\n // ~16k boxed elements for a full chunk.\n const patch = decompressWorldChunk(compressedPatch);\n const width = maxX - minX + 1;\n const height = maxY - minY + 1;\n const count = width * height;\n const hasColor = patch.length >= count * 4;\n const tiles = new Array(count);\n const baseX = chunkX << 6;\n const baseY = chunkY << 6;\n for (let i = 0; i < count; i++) {\n const localX = minX + (i % width);\n const localY = minY + Math.floor(i / width);\n const hp = patch[i + count * 2];\n tiles[i] = this.#storeTile(this.#buildTile(\n baseX + localX,\n baseY + localY,\n patch[i],\n patch[i + count],\n hp,\n hasColor ? patch[i + count * 3] : null\n ));\n }\n this.totalChunkCount += 1;\n pushBounded(this.chunks, {chunkX, chunkY, minX, minY, maxX, maxY, tiles}, this.historyLimits.chunkHistory);\n this.lastChunkPatch = {chunkX, chunkY, minX, minY, maxX, maxY, count, hasColor};\n return tiles;\n }\n\n setTile(tile) {\n return this.#storeTile(this.normalizeTile(tile));\n }\n\n // Chunk decoding produces millions of tiles at join time, so build the final\n // object in one pass instead of a literal plus a spread copy.\n #buildTile(x, y, material, shape, hp, color) {\n const def = this.tileDefinition(material);\n const maxHp = def?.hp ?? null;\n const value = hp ?? null;\n return {\n x,\n y,\n material,\n shape,\n hp: value,\n integrity: value,\n color,\n materialName: def?.name ?? null,\n shapeName: tileShapeName(shape),\n solid: def?.solid ?? null,\n maxHp,\n hpRatio: typeof value === \"number\" ? value / 255 : null,\n hpValue: typeof value === \"number\" && typeof maxHp === \"number\" ? Math.round((value / 255) * maxHp) : null\n };\n }\n\n // Numeric key: a template string per tile was a measurable share of chunk\n // decode. The map is only ever read through values()/size, so the key format\n // is internal.\n #storeTile(normalized) {\n const key = ((normalized.y + TILE_KEY_OFFSET) * TILE_KEY_STRIDE) + (normalized.x + TILE_KEY_OFFSET);\n const previous = this.tiles.get(key);\n if (previous !== undefined) this.#countMaterial(previous.material, -1);\n this.#countMaterial(normalized.material, 1);\n this.tiles.set(key, normalized);\n return normalized;\n }\n\n #countMaterial(material, delta) {\n const id = Number(material);\n const next = (this.#materialCounts.get(id) || 0) + delta;\n if (next > 0) this.#materialCounts.set(id, next);\n else this.#materialCounts.delete(id);\n }\n\n normalizeTile(tile) {\n const def = this.tileDefinition(tile.material);\n const hp = tile.hp ?? tile.integrity ?? null;\n const maxHp = def?.hp ?? null;\n return {\n ...tile,\n hp,\n integrity: hp,\n materialName: def?.name ?? null,\n shapeName: tileShapeName(tile.shape),\n solid: def?.solid ?? null,\n maxHp,\n hpRatio: typeof hp === \"number\" ? hp / 255 : null,\n hpValue: typeof hp === \"number\" && typeof maxHp === \"number\" ? Math.round((hp / 255) * maxHp) : null\n };\n }\n\n // Counts are maintained as tiles are stored; this used to rescan every tile\n // on each call and ran on every snapshot.\n materials() {\n return [...this.#materialCounts.entries()]\n .sort((a, b) => a[0] - b[0])\n .map(([material, count]) => {\n const def = this.tileDefinition(material);\n return {\n material,\n name: def?.name ?? null,\n count,\n solid: def?.solid ?? null,\n hp: def?.hp ?? null\n };\n });\n }\n\n snapshot({includeTiles = false, includeModel = false, includeBlocks = false} = {}) {\n const model = this.model.snapshot({includeTables: includeModel, includeBlocks});\n const overworldZone = this.isOverworld ? overworldZoneFromId(this.id) : null;\n return {\n id: this.id,\n is_overworld: this.isOverworld,\n overworldZone,\n shipMetadata: this.model.shipMetadata(),\n tileset: this.tileset,\n seed: this.seed,\n block_w: this.blockWidth,\n block_h: this.blockHeight,\n parent_world: this.parentWorld,\n parent_ent: this.parentEntity,\n tileCount: this.tiles.size,\n chunkCount: this.totalChunkCount,\n lastChunkPatch: this.lastChunkPatch,\n lastPacket: this.lastPacket,\n meta: this.meta,\n materials: this.materials(),\n model,\n entities: model.entities,\n blocks: model.blocks,\n transforms: model.transforms,\n machines: model.machines,\n players: model.players,\n shipControls: model.shipControls,\n commsBubbles: this.commsBubbles.slice(),\n tiles: includeTiles ? [...this.tiles.values()] : undefined\n };\n }\n\n table(id) {\n return this.model.table(id);\n }\n\n record(tableId, entityId) {\n return this.model.record(tableId, entityId);\n }\n\n tileDefinition(material) {\n if (!this.tileset || !Array.isArray(this.tileset.tiles)) return null;\n return this.tileset.tiles[Number(material)] || null;\n }\n\n entity(entityId) {\n return this.model.entity(entityId);\n }\n\n entities() {\n return this.model.entities();\n }\n\n blocks() {\n return this.model.blocks();\n }\n\n blockAt(x, y) {\n return this.model.blockAt(x, y);\n }\n}\n", "import {WorldState} from \"./state.js\";\nimport {ModelState} from \"../model/index.js\";\nimport {decodeModelPayload} from \"../../protocol/inbound/world-payload.js\";\n\nexport {WorldState};\n\n// Retention limits for per-world history. These arrays previously grew without\n// bound for the lifetime of a connection. Pass Infinity to restore that.\nconst DEFAULT_HISTORY_LIMITS = {\n eventHistory: 200,\n modelPacketHistory: 100,\n chunkHistory: 64\n};\n\nfunction normalizeLimit(value, fallback) {\n if (value === Infinity) return Infinity;\n const limit = Number(value);\n if (!Number.isFinite(limit) || limit < 0) return fallback;\n return Math.floor(limit);\n}\n\nfunction pushBounded(target, value, limit) {\n if (limit === 0) return;\n target.push(value);\n if (target.length > limit) target.splice(0, target.length - limit);\n}\n\nexport class WorldStore {\n #overworldId = null;\n #shipWorldId = null;\n\n constructor(limits = {}) {\n this.currentWorldId = null;\n this.worlds = new Map();\n this.historyLimits = {\n eventHistory: normalizeLimit(limits.eventHistory, DEFAULT_HISTORY_LIMITS.eventHistory),\n modelPacketHistory: normalizeLimit(limits.modelPacketHistory, DEFAULT_HISTORY_LIMITS.modelPacketHistory),\n chunkHistory: normalizeLimit(limits.chunkHistory, DEFAULT_HISTORY_LIMITS.chunkHistory)\n };\n }\n\n get(id) {\n const worldId = Number(id);\n if (!this.worlds.has(worldId)) this.worlds.set(worldId, new WorldState(worldId, this.historyLimits));\n return this.worlds.get(worldId);\n }\n\n apply(packet) {\n if (!packet || packet.world == null) return null;\n if (packet.type === 22) return this.#applyMeta(packet);\n if (packet.type === 23) return this.#applyTiles(packet);\n if (packet.type === 20) return this.#applyModel(packet);\n if (packet.type === 13) return this.#applyCommsBubble(packet);\n return null;\n }\n\n snapshot({includeTiles = false, includeModel = false, includeBlocks = false} = {}) {\n return [...this.worlds.values()].map((world) => world.snapshot({includeTiles, includeModel, includeBlocks}));\n }\n\n ids() {\n return [...this.worlds.keys()];\n }\n\n // Both resolvers are called on nearly every public read, and each used to\n // spread the whole world map. Cache the resolved id and re-scan only when the\n // cached world no longer satisfies the predicate.\n overworld() {\n const cached = this.#overworldId != null ? this.worlds.get(this.#overworldId) : null;\n if (cached && cached.isOverworld === true) return cached;\n for (const world of this.worlds.values()) {\n if (world.isOverworld === true) {\n this.#overworldId = world.id;\n return world;\n }\n }\n this.#overworldId = null;\n return null;\n }\n\n shipWorld() {\n if (this.currentWorldId != null) return this.worlds.get(Number(this.currentWorldId)) || null;\n const cached = this.#shipWorldId != null ? this.worlds.get(this.#shipWorldId) : null;\n if (cached && cached.isOverworld === false) return cached;\n for (const world of this.worlds.values()) {\n if (world.isOverworld === false) {\n this.#shipWorldId = world.id;\n return world;\n }\n }\n this.#shipWorldId = null;\n return null;\n }\n\n currentShipEntity() {\n const shipWorld = this.shipWorld();\n if (!shipWorld || shipWorld.parentWorld == null || shipWorld.parentEntity == null) return null;\n return this.worlds.get(Number(shipWorld.parentWorld))?.entity(shipWorld.parentEntity) || null;\n }\n\n #applyMeta(packet) {\n if (packet.removed) {\n const world = this.worlds.get(Number(packet.world));\n if (world) world.readMeta(packet);\n this.worlds.delete(Number(packet.world));\n if (this.currentWorldId === Number(packet.world)) this.currentWorldId = null;\n return {type: \"world-removed\", world: world || null, packet};\n }\n const world = this.get(packet.world);\n world.readMeta(packet);\n if (this.currentWorldId == null && !world.isOverworld) this.currentWorldId = world.id;\n return {type: \"world\", world};\n }\n\n #applyTiles(packet) {\n const world = this.get(packet.world);\n const decoded = world.decodeEncrypted(packet.data);\n const updates = [];\n const errors = [];\n if (decoded && typeof decoded === \"object\") {\n for (const [kind, value] of Object.entries(decoded)) {\n try {\n if (kind === \"0\") updates.push({kind, tiles: world.applyChunk(value)});\n else if (kind === \"1\") updates.push({kind, tile: world.applyTile(value)});\n else updates.push({kind, value});\n } catch (error) {\n errors.push(error);\n updates.push({kind, value, error: error.message});\n }\n }\n }\n world.recordEvent({type: \"tiles\", packet, decoded, updates, errors});\n return {type: \"tiles\", world, decoded, updates, errors};\n }\n\n #applyModel(packet) {\n const world = this.get(packet.world);\n const result = {\n worldId: packet.world,\n full: Boolean(packet.full),\n events: Array.isArray(packet.events) ? packet.events : [],\n modelData: packet.model_data || null,\n decoded: null,\n model: null,\n commandNumber: typeof packet.command_number === \"number\" ? packet.command_number : null,\n timing: {\n roundTimeLeft: packet.round_time_left ?? null,\n regenTimeLeft: packet.regen_time_left ?? null,\n removeOnRegen: packet.remove_on_regen ?? null,\n globalEventTime: packet.global_event_time ?? null,\n tickTime: packet.tick_time ?? null,\n tickQuota: packet.tick_quota ?? null,\n cpuLoad: packet.cpu_load ?? null,\n relayTime: packet.relay_time ?? null\n }\n };\n if (packet.model_data && world.seed != null) {\n const previousModel = world.model;\n try {\n if (packet.full) world.model = new ModelState({isOverworld: world.isOverworld});\n result.decoded = decodeModelPayload(packet.model_data, packet.world, world.seed);\n result.model = world.model.apply(result.decoded, {full: Boolean(packet.full)});\n if (result.model?.error && packet.full && previousModel) world.model = previousModel;\n } catch (error) {\n if (packet.full && previousModel) world.model = previousModel;\n result.error = error;\n }\n }\n pushBounded(world.modelPackets, result, world.historyLimits.modelPacketHistory);\n world.recordEvent({type: \"model\", packet, result});\n world.lastPacket = packet;\n return {type: \"model\", world, result};\n }\n\n #applyCommsBubble(packet) {\n const world = this.get(packet.world);\n const bubble = world.addCommsBubble(packet);\n return {type: \"comms-bubble\", world, packet, bubble};\n }\n}\n", "const BLUEPRINT_PLACEMENT_TYPE = 9;\n\nfunction requireFiniteNumber(value, name) {\n const number = Number(value);\n if (!Number.isFinite(number)) throw new TypeError(`${name} must be a finite number`);\n return number;\n}\n\nfunction requirePositiveInteger(value, name) {\n const number = Number(value);\n if (!Number.isInteger(number) || number <= 0) throw new RangeError(`${name} must be a positive integer`);\n return number;\n}\n\nfunction normalizeBlueprintDimension(placement, publicName, protocolName) {\n const value = placement[publicName] ?? placement[protocolName];\n return requirePositiveInteger(value, publicName);\n}\n\nfunction buildBlueprintPlacementMessage(placement = {}) {\n const source = placement.source;\n if (typeof source !== \"string\" || !source) throw new TypeError(\"source must be a non-empty blueprint string\");\n return {\n type: BLUEPRINT_PLACEMENT_TYPE,\n x: requireFiniteNumber(placement.x, \"x\"),\n y: requireFiniteNumber(placement.y, \"y\"),\n w: normalizeBlueprintDimension(placement, \"width\", \"w\"),\n h: normalizeBlueprintDimension(placement, \"height\", \"h\"),\n source\n };\n}\n\nexport {\n BLUEPRINT_PLACEMENT_TYPE,\n buildBlueprintPlacementMessage\n};\n", "const CHAT_MESSAGE_TYPE = 2;\n\nfunction buildChatMessage(message = \"\") {\n return {\n type: CHAT_MESSAGE_TYPE,\n msg: String(message)\n };\n}\n\nexport {\n CHAT_MESSAGE_TYPE,\n buildChatMessage\n};\n", "const COMMS_MESSAGE_TYPE = 3;\n\nfunction buildCommsMessage(message = \"\") {\n return {\n type: COMMS_MESSAGE_TYPE,\n msg: String(message)\n };\n}\n\nfunction normalizeCommsEvent(event) {\n const rawMessages = Array.isArray(event?.msgs_text) ? event.msgs_text : [];\n return {\n ...event,\n entity: event?.ent_id != null && Number.isFinite(Number(event.ent_id)) ? Number(event.ent_id) : null,\n rawMessages,\n messages: rawMessages.map((message) => ({\n raw: message,\n text: flattenRichText(message)\n }))\n };\n}\n\nfunction flattenRichText(value) {\n if (value == null) return \"\";\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n if (Array.isArray(value)) return value.map(flattenRichText).join(\"\");\n if (typeof value === \"object\") {\n if (Object.hasOwn(value, \"c\")) return flattenRichText(value.c);\n if (Object.hasOwn(value, \"text\")) return flattenRichText(value.text);\n }\n return \"\";\n}\n\nexport {\n COMMS_MESSAGE_TYPE,\n buildCommsMessage,\n flattenRichText,\n normalizeCommsEvent\n};\n", "import {COMMAND_DEFAULT_FORMATS, COMMAND_FIELDS, encoder} from \"../../constants.js\";\nimport {concatBytes, toUint8Array} from \"../codec/binary.js\";\nimport {cloneDragValue, encodeMapHeader, encodeStringBytes, encodeValue} from \"../codec/msgpack.js\";\n\nconst SHA256_K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\nfunction buildCommandDefaults(command = {}) {\n const out = {};\n for (const key of COMMAND_FIELDS) {\n if (key === \"drag\") {\n out[key] = cloneDragValue(command[key]);\n continue;\n }\n if (command[key] !== undefined) out[key] = command[key];\n else if (COMMAND_DEFAULT_FORMATS[key] === \"nil\") out[key] = null;\n else if (COMMAND_DEFAULT_FORMATS[key] === \"bool\") out[key] = false;\n else if (COMMAND_DEFAULT_FORMATS[key] === \"float32\") out[key] = 0;\n else out[key] = 0;\n }\n out.type = command.type ?? 0;\n out.n = command.n ?? null;\n return out;\n}\n\n// Field names and the map header are identical for every command, so encode\n// them once instead of on each send.\nconst COMMAND_MAP_HEADER = encodeMapHeader(COMMAND_FIELDS.length);\nconst COMMAND_FIELD_KEY_BYTES = COMMAND_FIELDS.map((key) => encodeStringBytes(key));\n\nfunction buildCommandBody(command) {\n const normalized = buildCommandDefaults(command);\n const parts = [COMMAND_MAP_HEADER];\n for (let i = 0; i < COMMAND_FIELDS.length; i++) {\n parts.push(COMMAND_FIELD_KEY_BYTES[i]);\n parts.push(encodeValue(COMMAND_FIELDS[i], normalized[COMMAND_FIELDS[i]], null));\n }\n return concatBytes(parts);\n}\n\n// The prefix depends only on the session id, which is fixed for a connection.\nlet signaturePrefixSid = null;\nlet signaturePrefixBytes = null;\n\nfunction buildSignaturePrefix(sessionId) {\n const sid = Number(sessionId) >>> 0;\n if (sid === signaturePrefixSid && signaturePrefixBytes) return signaturePrefixBytes;\n const a = (sid ^ 52481) >>> 0;\n const b = ((sid << 2) + 69) >>> 0;\n const c = ((((sid >>> 1) * 5) >>> 0) + 420) >>> 0;\n signaturePrefixBytes = encoder.encode(`MJAF${a}CANH${b}SCLJ${c}LODV`);\n signaturePrefixSid = sid;\n return signaturePrefixBytes;\n}\n\nfunction rightRotate(value, bits) {\n return (value >>> bits) | (value << (32 - bits));\n}\n\nfunction sha256(bytes) {\n const input = toUint8Array(bytes);\n const bitLength = input.length * 8;\n const paddingLength = ((56 - ((input.length + 1) % 64)) + 64) % 64;\n const padded = new Uint8Array(input.length + 1 + paddingLength + 8);\n padded.set(input, 0);\n padded[input.length] = 0x80;\n const view = new DataView(padded.buffer);\n const high = Math.floor(bitLength / 0x100000000);\n const low = bitLength >>> 0;\n view.setUint32(padded.length - 8, high, false);\n view.setUint32(padded.length - 4, low, false);\n\n const state = new Uint32Array([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ]);\n const schedule = new Uint32Array(64);\n\n for (let offset = 0; offset < padded.length; offset += 64) {\n for (let index = 0; index < 16; index++) schedule[index] = view.getUint32(offset + index * 4, false);\n for (let index = 16; index < 64; index++) {\n const s0 = rightRotate(schedule[index - 15], 7) ^ rightRotate(schedule[index - 15], 18) ^ (schedule[index - 15] >>> 3);\n const s1 = rightRotate(schedule[index - 2], 17) ^ rightRotate(schedule[index - 2], 19) ^ (schedule[index - 2] >>> 10);\n schedule[index] = (((schedule[index - 16] + s0) >>> 0) + ((schedule[index - 7] + s1) >>> 0)) >>> 0;\n }\n\n let a = state[0], b = state[1], c = state[2], d = state[3], e = state[4], f = state[5], g = state[6],\n h = state[7];\n for (let index = 0; index < 64; index++) {\n const S1 = rightRotate(e, 6) ^ rightRotate(e, 11) ^ rightRotate(e, 25);\n const ch = (e & f) ^ (~e & g);\n const temp1 = (((((h + S1) >>> 0) + ch) >>> 0) + ((SHA256_K[index] + schedule[index]) >>> 0)) >>> 0;\n const S0 = rightRotate(a, 2) ^ rightRotate(a, 13) ^ rightRotate(a, 22);\n const maj = (a & b) ^ (a & c) ^ (b & c);\n const temp2 = (S0 + maj) >>> 0;\n h = g;\n g = f;\n f = e;\n e = (d + temp1) >>> 0;\n d = c;\n c = b;\n b = a;\n a = (temp1 + temp2) >>> 0;\n }\n\n state[0] = (state[0] + a) >>> 0;\n state[1] = (state[1] + b) >>> 0;\n state[2] = (state[2] + c) >>> 0;\n state[3] = (state[3] + d) >>> 0;\n state[4] = (state[4] + e) >>> 0;\n state[5] = (state[5] + f) >>> 0;\n state[6] = (state[6] + g) >>> 0;\n state[7] = (state[7] + h) >>> 0;\n }\n\n const out = new Uint8Array(32);\n const outView = new DataView(out.buffer);\n for (let i = 0; i < 8; i++) outView.setUint32(i * 4, state[i], false);\n return out;\n}\n\nfunction signCommandBody(body, sessionId) {\n return sha256(concatBytes([buildSignaturePrefix(sessionId), body, encoder.encode(\"YXTG\")]));\n}\n\nfunction buildSignedCommandPacket(command, sessionId) {\n const body = buildCommandBody(command);\n const signature = signCommandBody(body, sessionId);\n return concatBytes([body, signature]);\n}\n\n\nexport {\n buildCommandDefaults,\n buildCommandBody,\n buildSignaturePrefix,\n rightRotate,\n sha256,\n signCommandBody,\n buildSignedCommandPacket\n};\n", "import {itemNameFromId} from \"../../state/items.js\";\n\nexport const EquipmentSlot = Object.freeze({\n Head: \"head\",\n Face: \"face\",\n Body: \"body\",\n Back: \"back\",\n Hands: \"hands\",\n Feet: \"feet\"\n});\n\nconst EQUIPMENT_SLOT_INDEXES = Object.freeze({\n [EquipmentSlot.Head]: 16,\n [EquipmentSlot.Face]: 17,\n [EquipmentSlot.Body]: 18,\n [EquipmentSlot.Back]: 19,\n [EquipmentSlot.Hands]: 20,\n [EquipmentSlot.Feet]: 21\n});\n\nconst EQUIPMENT_SLOT_NAMES = new Map([\n [16, EquipmentSlot.Head],\n [17, EquipmentSlot.Face],\n [18, EquipmentSlot.Body],\n [19, EquipmentSlot.Back],\n [20, EquipmentSlot.Hands],\n [21, EquipmentSlot.Feet]\n]);\n\nconst EQUIPMENT_SLOT_VALUES = new Map([\n [EquipmentSlot.Head, 16],\n [EquipmentSlot.Face, 17],\n [EquipmentSlot.Body, 18],\n [EquipmentSlot.Back, 19],\n [EquipmentSlot.Hands, 20],\n [EquipmentSlot.Feet, 21]\n]);\n\nfunction normalizeEquipmentSlot(slot) {\n const normalized = EQUIPMENT_SLOT_VALUES.get(slot);\n if (!EQUIPMENT_SLOT_NAMES.has(normalized)) {\n throw new RangeError(`equipment slot must be an EquipmentSlot value`);\n }\n return normalized;\n}\n\nfunction equipmentSlotName(slot) {\n return EQUIPMENT_SLOT_NAMES.get(Number(slot)) ?? null;\n}\n\nfunction buildInventoryDragCommand(source, target, split = false) {\n return {\n drag: {\n source: normalizeInventoryIndex(source, \"source\"),\n target: normalizeInventoryIndex(target, \"target\"),\n split: Boolean(split)\n }\n };\n}\n\nfunction buildEquipItemCommand(source, slot, split = false) {\n return buildInventoryDragCommand(source, normalizeEquipmentSlot(slot), split);\n}\n\nfunction buildUnequipItemCommand(slot, target = 0, split = false) {\n return buildInventoryDragCommand(normalizeEquipmentSlot(slot), target, split);\n}\n\nfunction normalizeInventoryEvent(event) {\n const items = Array.isArray(event?.items) ? event.items : [];\n const counts = Array.isArray(event?.item_counts) ? event.item_counts : [];\n const rawHotbarSize = Number(event?.general_slots ?? 0);\n const hotbarSize = Number.isFinite(rawHotbarSize) && rawHotbarSize > 0 ? Math.trunc(rawHotbarSize) : 0;\n\n const slotSnapshot = (index, kind) => {\n const count = normalizeCount(counts[index]);\n const itemId = normalizeItemId(items[index], count);\n return {\n index,\n itemId,\n itemName: itemNameFromId(itemId),\n count,\n kind,\n equipmentSlot: equipmentSlotName(index),\n empty: itemId == null || count <= 0\n };\n };\n\n const slotsByIndex = new Map();\n for (let index = 0; index < hotbarSize; index++) {\n slotsByIndex.set(index, slotSnapshot(index, \"hotbar\"));\n }\n slotsByIndex.set(EQUIPMENT_SLOT_INDEXES.head, slotSnapshot(EQUIPMENT_SLOT_INDEXES.head, \"equipment\"));\n slotsByIndex.set(EQUIPMENT_SLOT_INDEXES.face, slotSnapshot(EQUIPMENT_SLOT_INDEXES.face, \"equipment\"));\n slotsByIndex.set(EQUIPMENT_SLOT_INDEXES.body, slotSnapshot(EQUIPMENT_SLOT_INDEXES.body, \"equipment\"));\n slotsByIndex.set(EQUIPMENT_SLOT_INDEXES.back, slotSnapshot(EQUIPMENT_SLOT_INDEXES.back, \"equipment\"));\n slotsByIndex.set(EQUIPMENT_SLOT_INDEXES.hands, slotSnapshot(EQUIPMENT_SLOT_INDEXES.hands, \"equipment\"));\n slotsByIndex.set(EQUIPMENT_SLOT_INDEXES.feet, slotSnapshot(EQUIPMENT_SLOT_INDEXES.feet, \"equipment\"));\n\n const slots = [...slotsByIndex.values()].sort((a, b) => a.index - b.index);\n const hotbar = slots.filter((slot) => slot.kind === \"hotbar\");\n const equipment = {\n head: slotsByIndex.get(EQUIPMENT_SLOT_INDEXES.head),\n face: slotsByIndex.get(EQUIPMENT_SLOT_INDEXES.face),\n body: slotsByIndex.get(EQUIPMENT_SLOT_INDEXES.body),\n back: slotsByIndex.get(EQUIPMENT_SLOT_INDEXES.back),\n hands: slotsByIndex.get(EQUIPMENT_SLOT_INDEXES.hands),\n feet: slotsByIndex.get(EQUIPMENT_SLOT_INDEXES.feet)\n };\n\n return {\n type: \"inventory\",\n filter: event?.filter,\n hotbarSize,\n slots,\n hotbar,\n equipment\n };\n}\n\nfunction normalizeInventoryIndex(value, name) {\n const number = Number(value);\n if (!Number.isInteger(number) || number < 0) throw new RangeError(`${name} must be a non-negative integer inventory slot`);\n return number;\n}\n\nfunction normalizeCount(value) {\n const number = Number(value ?? 0);\n return Number.isFinite(number) ? number : 0;\n}\n\nfunction normalizeItemId(value, count) {\n if (value == null) return null;\n const number = Number(value);\n if (!Number.isFinite(number)) return null;\n return number === 0 && count === 0 ? null : number;\n}\n\nexport {\n EQUIPMENT_SLOT_INDEXES,\n buildEquipItemCommand,\n buildInventoryDragCommand,\n buildUnequipItemCommand,\n equipmentSlotName,\n normalizeEquipmentSlot,\n normalizeInventoryEvent\n};\n", "const SHIP_MANAGEMENT_TYPE = 4;\nconst SET_PRIVACY_ACTION = \"set_privacy\";\nconst STARTER_RECOVERY_ACTION = \"starter_recovery\";\nconst PLAYER_LIST_ACTION = \"player_list\";\nconst INVITE_RESET_ACTION = \"invite_reset\";\nconst SET_RANK_ACTION = \"set_rank\";\nconst KICK_ACTION = \"kick\";\nconst BAN_ACTION = \"ban\";\nconst DEMOTE_SELF_ACTION = \"demote_self\";\n\nfunction requireNonNegativeInteger(value, name) {\n const number = Number(value);\n if (!Number.isInteger(number) || number < 0) throw new RangeError(`${name} must be a non-negative integer`);\n return number;\n}\n\nfunction normalizePrivacy(value) {\n if (value === true || value === 1 || value === \"private\") return 1;\n if (value === false || value === 0 || value === \"public\") return 0;\n throw new RangeError(`privacy must be 0, 1, true, false, \"public\", or \"private\"`);\n}\n\nfunction normalizePlayerRef(value) {\n return requireNonNegativeInteger(value, \"refId\");\n}\n\nfunction normalizePlayerRank(value) {\n if (value === 0 || value === \"guest\") return 0;\n if (value === 1 || value === \"crew\") return 1;\n if (value === 3 || value === \"captain\") return 3;\n throw new RangeError(`rank must be 0, 1, 3, \"guest\", \"crew\", or \"captain\"`);\n}\n\nexport function buildShipManagementMessage(act, arg = null, extra = null) {\n if (typeof act !== \"string\" || !act) throw new TypeError(`act must be a non-empty string`);\n const message = {type: SHIP_MANAGEMENT_TYPE, act, arg};\n if (extra && typeof extra === \"object\") Object.assign(message, extra);\n return message;\n}\n\nexport function buildShipPrivacyMessage(privacy) {\n return buildShipManagementMessage(SET_PRIVACY_ACTION, normalizePrivacy(privacy));\n}\n\nexport function buildStarterRecoveryMessage(itemId) {\n return buildShipManagementMessage(STARTER_RECOVERY_ACTION, requireNonNegativeInteger(itemId, \"itemId\"));\n}\n\nexport function buildPlayerListMessage() {\n return buildShipManagementMessage(PLAYER_LIST_ACTION);\n}\n\nexport function buildInviteResetMessage() {\n return buildShipManagementMessage(INVITE_RESET_ACTION);\n}\n\nexport function buildSetPlayerRankMessage(refId, rank) {\n return buildShipManagementMessage(SET_RANK_ACTION, normalizePlayerRef(refId), {rank: normalizePlayerRank(rank)});\n}\n\nexport function buildKickPlayerMessage(refId) {\n return buildShipManagementMessage(KICK_ACTION, normalizePlayerRef(refId));\n}\n\nexport function buildBanPlayerMessage(refId) {\n return buildShipManagementMessage(BAN_ACTION, normalizePlayerRef(refId));\n}\n\nexport function buildDemoteSelfMessage() {\n return buildShipManagementMessage(DEMOTE_SELF_ACTION);\n}\n\nexport function normalizeShipConfig(event = {}) {\n const source = event && typeof event === \"object\" ? event : {};\n const config = source.config && typeof source.config === \"object\" ? source.config : {};\n return {\n privacy: config.privacy ?? null,\n privacyName: config.privacy === 0 ? \"public\" : config.privacy === 1 ? \"private\" : null,\n inviteKey: config.invite_key ?? null,\n teamId: source.team_id ?? null,\n patronPerks: Array.isArray(source.patron_perks) ? source.patron_perks.slice() : []\n };\n}\n\nexport function normalizeCaptainSubrank(event = {}) {\n const source = event && typeof event === \"object\" ? event : {};\n return {\n subrank: source.subrank ?? null,\n enableCheats: Boolean(source.enable_cheats)\n };\n}\n\nexport function normalizeShipPlayerList(event = {}, previous = null, currentCaptainSubrank = null) {\n const source = event && typeof event === \"object\" ? event : {};\n const changes = Array.isArray(source.player_list) ? source.player_list.map(normalizePlayerListChange) : [];\n const removedPlayers = changes\n .filter((change) => change.remove && Number.isFinite(Number(change.refId)))\n .map((change) => Number(change.refId));\n const changedPlayers = changes.filter((change) => !change.remove).map(({remove: _remove, ...change}) => change);\n const players = mergePlayerListChanges(previous?.players, changes);\n const ownerCaptainRank = ownerRankForPlayers(players);\n applyPlayerControlState(players, currentCaptainSubrank);\n applyPlayerControlState(changedPlayers, currentCaptainSubrank);\n return {\n ownerCaptainRank,\n shipOwners: players.filter((player) => player.isShipOwner),\n players,\n changes: changedPlayers,\n removedPlayers\n };\n}\n\nfunction mergePlayerListChanges(previousPlayers, changes) {\n if (!Array.isArray(previousPlayers) || !previousPlayers.length) return changes.filter((change) => !change.remove).map(({\n remove: _remove,\n ...player\n }) => ({...player}));\n\n const existing = new Map();\n for (const player of previousPlayers) {\n if (player?.refId == null) continue;\n existing.set(player.refId, {...player, isShipOwner: false});\n }\n\n const changedRefs = new Set();\n const merged = [];\n for (const change of changes) {\n if (change.refId == null) {\n if (!change.remove) {\n const {remove: _remove, ...player} = change;\n merged.push({...player, isShipOwner: false});\n }\n continue;\n }\n changedRefs.add(change.refId);\n if (change.remove) {\n existing.delete(change.refId);\n continue;\n }\n const {remove: _remove, ...changePlayer} = change;\n const player = {...(existing.get(change.refId) || {}), ...changePlayer, isShipOwner: false};\n existing.set(change.refId, player);\n merged.push(player);\n }\n\n for (const player of previousPlayers) {\n if (player?.refId == null || changedRefs.has(player.refId)) continue;\n const retained = existing.get(player.refId);\n if (retained) merged.push(retained);\n }\n return merged;\n}\n\nfunction normalizePlayerListChange(entry = {}) {\n const source = entry && typeof entry === \"object\" ? entry : {};\n if (source._removed) return {refId: source.ref_id ?? null, remove: true};\n return {\n refId: source.ref_id ?? null,\n remove: false,\n discrim: source.discrim ?? null,\n discrimColor: source.discrim_color ?? null,\n teamRank: source.team_rank ?? null,\n captainRank: source.captain_rank ?? null,\n isCaptain: Number(source.captain_rank) > 0,\n isShipOwner: false,\n canBeManaged: false,\n time: source.time ?? null,\n items: Array.isArray(source.items) ? source.items.slice() : [],\n aliasDiscrims: Array.isArray(source.alias_discrims) ? source.alias_discrims.slice() : [],\n extraAliasCount: normalizeNonNegativeNumber(source.extra_aliases),\n onlineCount: source.online_count ?? null\n };\n}\n\nfunction normalizeNonNegativeNumber(value) {\n const number = Number(value);\n return Number.isFinite(number) && number > 0 ? number : 0;\n}\n\nfunction ownerRankForPlayers(players) {\n const ranks = players\n .filter((player) => Number(player.captainRank) > 0)\n .map((player) => Number(player.captainRank))\n .filter(Number.isFinite);\n if (!ranks.length) return null;\n const ownerRank = Math.min(...ranks);\n for (const player of players) player.isShipOwner = Number(player.captainRank) === ownerRank;\n return ownerRank;\n}\n\nfunction applyPlayerControlState(players, currentCaptainSubrank) {\n const currentRank = currentCaptainRank(currentCaptainSubrank);\n for (const player of players) player.canBeManaged = playerCanBeManagedBy(player, currentRank);\n}\n\nfunction currentCaptainRank(currentCaptainSubrank) {\n const rank = Number(currentCaptainSubrank?.subrank);\n return Number.isFinite(rank) && rank > 0 ? rank : null;\n}\n\nfunction playerCanBeManagedBy(player, currentRank) {\n if (!Number.isFinite(currentRank) || !player) return false;\n const targetCaptainRank = Number(player.captainRank);\n if (Number.isFinite(targetCaptainRank) && targetCaptainRank > 0) return currentRank < targetCaptainRank;\n const targetTeamRank = Number(player.teamRank);\n return targetTeamRank === 0 || targetTeamRank === 1;\n}\n\nexport {\n BAN_ACTION,\n DEMOTE_SELF_ACTION,\n INVITE_RESET_ACTION,\n KICK_ACTION,\n PLAYER_LIST_ACTION,\n SET_PRIVACY_ACTION,\n SET_RANK_ACTION,\n SHIP_MANAGEMENT_TYPE,\n STARTER_RECOVERY_ACTION,\n normalizePlayerRank,\n normalizePrivacy\n};\n", "const SIGN_TEXT_COMMAND = \"sign_text\";\nconst SignDisplayMode = Object.freeze({\n Always: \"always\",\n WhenNear: \"when-near\",\n OnHover: \"on-hover\"\n});\nconst SIGN_DISPLAY_MODES = new Map([\n [0, SignDisplayMode.Always],\n [1, SignDisplayMode.WhenNear],\n [2, SignDisplayMode.OnHover]\n]);\nconst SIGN_DISPLAY_MODE_VALUES = new Map([\n [SignDisplayMode.Always, 0],\n [SignDisplayMode.WhenNear, 1],\n [SignDisplayMode.OnHover, 2]\n]);\n\nfunction normalizeSignDisplayMode(mode = SignDisplayMode.Always) {\n const normalized = SIGN_DISPLAY_MODE_VALUES.get(mode);\n if (normalized == null) {\n throw new RangeError(`sign display mode must be SignDisplayMode.Always, SignDisplayMode.WhenNear, or SignDisplayMode.OnHover`);\n }\n return normalized;\n}\n\nfunction signDisplayModeName(mode) {\n return SIGN_DISPLAY_MODES.get(mode) ?? null;\n}\n\nfunction buildSignTextMessage(text = \"\", mode = SignDisplayMode.Always) {\n return {\n type: 5,\n cmd: SIGN_TEXT_COMMAND,\n args: [String(text), normalizeSignDisplayMode(mode)]\n };\n}\n\nexport {\n SIGN_DISPLAY_MODES,\n SIGN_TEXT_COMMAND,\n SignDisplayMode,\n buildSignTextMessage,\n normalizeSignDisplayMode,\n signDisplayModeName\n};\n", "import {encoder} from \"../../constants.js\";\n\nconst NAV_UNIT_COMMAND = \"config_nav_unit\";\nconst GENERATOR_MAZE_PUZZLE_COMMAND = \"maze_puzzle\";\nconst CLIPBOARD_ANGLE_COMMAND = \"angle\";\nconst CLIPBOARD_FIXED_ANGLE_COMMAND = \"angle_fixed\";\nconst LOADER_CONFIG_COMMAND = \"config_loader\";\nconst LOADER_FILTER_CONFIG_COMMAND = \"filter_config\";\nconst LOADER_FILTER_ITEMS_COMMAND = \"filter_items\";\nconst PUSHER_CONFIG_COMMAND = \"config_pusher\";\nconst PUSHER_FILTER_ITEMS_COMMAND = \"filter_items\";\nconst NAV_UNIT_STRING_TAG = 0x8a;\nconst NAV_UNIT_HEADER_TAG = 0x90;\nconst NAV_UNIT_TRUE = 0x8e;\nconst NAV_UNIT_FALSE = 0x8d;\nconst NAV_UNIT_TRAILER = [0x91, 0x91];\nconst PUSHER_FILTER_INVENTORY_ON = 0x8d;\nconst PUSHER_FILTER_INVENTORY_OFF = 0x8e;\nconst LOADER_TRUE = 0x8d;\nconst LOADER_FALSE = 0x8e;\nconst UI_COMMAND_END = 0x91;\nconst CLIPBOARD_ACTION = 1;\n\nexport const PusherMode = Object.freeze({\n Push: \"push\",\n Pull: \"pull\",\n DoNothing: \"do-nothing\"\n});\n\nexport const LoaderPosition = Object.freeze({\n TopLeft: \"top-left\",\n TopMiddle: \"top-middle\",\n TopRight: \"top-right\",\n MiddleLeft: \"middle-left\",\n MiddleRight: \"middle-right\",\n BottomLeft: \"bottom-left\",\n BottomMiddle: \"bottom-middle\",\n BottomRight: \"bottom-right\"\n});\n\nexport const LoaderFilterMode = Object.freeze({\n AllowAll: \"allow-all\",\n BlockFilter: \"block-filter\",\n AllowFilter: \"allow-filter\",\n BlockAll: \"block-all\"\n});\n\nexport const FixedAngleDirection = Object.freeze({\n Right: \"right\",\n Up: \"up\",\n Left: \"left\",\n Down: \"down\"\n});\n\nexport const LoaderPriority = Object.freeze({\n Low: \"low\",\n Normal: \"normal\",\n High: \"high\"\n});\n\nfunction requireByteInteger(value, name) {\n const number = Number(value);\n if (!Number.isInteger(number) || number < 0 || number > 255) {\n throw new RangeError(`${name} must be an integer between 0 and 255`);\n }\n return number;\n}\n\nfunction requireUint16(value, name) {\n const number = Number(value);\n if (!Number.isInteger(number) || number < 0 || number > 0xffff) {\n throw new RangeError(`${name} must be an integer between 0 and 65535`);\n }\n return number;\n}\n\nfunction navConfigBool(value) {\n return value ? NAV_UNIT_TRUE : NAV_UNIT_FALSE;\n}\n\nfunction navWarpByte(value) {\n if (value === true || value === \"start\") return NAV_UNIT_FALSE;\n if (value === false || value == null || value === \"idle\" || value === \"cancel\") return NAV_UNIT_TRUE;\n throw new TypeError(`warp must be true, false, \"start\", \"idle\", or \"cancel\"`);\n}\n\nfunction requirePusherMode(value, name) {\n const number = PUSHER_MODE_VALUES.get(value);\n if (number == null || !Number.isInteger(number) || number < 0 || number > 2) {\n throw new RangeError(`${name} must be PusherMode.Push, PusherMode.Pull, or PusherMode.DoNothing`);\n }\n return number;\n}\n\nfunction requireLoaderPosition(value, name) {\n const number = LOADER_POSITION_VALUES.get(value);\n if (number == null || !Number.isInteger(number) || number < 0 || number > 7) {\n throw new RangeError(`${name} must be a LoaderPosition value`);\n }\n return number;\n}\n\nfunction requireLoaderPriority(value, name) {\n const number = LOADER_PRIORITY_VALUES.get(value);\n if (number == null || !Number.isInteger(number) || number < -1 || number > 1) {\n throw new RangeError(`${name} must be a LoaderPriority value`);\n }\n return number + 1;\n}\n\nfunction requireLoaderFilterMode(value, name) {\n const number = LOADER_FILTER_MODE_VALUES.get(value);\n if (number == null || !Number.isInteger(number) || number < 0 || number > 3) {\n throw new RangeError(`${name} must be a LoaderFilterMode value`);\n }\n return number;\n}\n\nconst CLIPBOARD_TARGET_VALUES = new Map([\n [\"loader\", 1],\n [\"loader-config\", 1],\n [\"loaderConfig\", 1],\n [\"hatch\", 0],\n [\"cargo-hatch\", 0],\n [\"cargoHatch\", 0],\n [\"ejector\", 7],\n [\"cargo-ejector\", 7],\n [\"cargoEjector\", 7],\n [\"expando\", 3],\n [\"expando-box\", 3],\n [\"expandoBox\", 3],\n [\"generator\", 4],\n [\"shield-generator\", 4],\n [\"shieldGenerator\", 4],\n [\"navigation\", 6],\n [\"navigation-unit\", 6],\n [\"navigationUnit\", 6],\n [\"nav\", 6],\n [\"nav-unit\", 6],\n [\"navUnit\", 6]\n]);\n\nconst FIXED_ANGLE_VALUES = new Map([\n [FixedAngleDirection.Right, 0],\n [FixedAngleDirection.Up, 1],\n [FixedAngleDirection.Left, 2],\n [FixedAngleDirection.Down, 3]\n]);\n\nfunction requireClipboardTarget(value, name = \"target\") {\n const number = typeof value === \"string\" ? CLIPBOARD_TARGET_VALUES.get(value) : Number(value);\n if (number == null || !Number.isInteger(number) || number < 0 || number > 255) {\n throw new RangeError(`${name} must be a clipboard target byte or known target name`);\n }\n return number;\n}\n\nfunction requireFixedAngle(value, name = \"direction\") {\n const number = FIXED_ANGLE_VALUES.get(value);\n if (number == null || !Number.isInteger(number) || number < 0 || number > 3) {\n throw new RangeError(`${name} must be a FixedAngleDirection value`);\n }\n return number;\n}\n\nfunction requireAngleDegrees(value, name = \"angle\") {\n const number = Number(value);\n if (!Number.isInteger(number) || number < 0 || number > 359) {\n throw new RangeError(`${name} must be an integer degree value between 0 and 359`);\n }\n return number;\n}\n\nfunction requireFiniteNumber(value, name) {\n const number = Number(value);\n if (!Number.isFinite(number)) throw new RangeError(`${name} must be a finite number`);\n return number;\n}\n\nfunction requireNonNegativeInteger(value, name) {\n const number = Number(value);\n if (!Number.isInteger(number) || number < 0) throw new RangeError(`${name} must be a non-negative integer`);\n return number;\n}\n\nfunction encodeCompactNumber(value, name) {\n const number = requireFiniteNumber(value, name);\n if (!Number.isInteger(number)) {\n const out = new Uint8Array(5);\n out[0] = 0x88;\n new DataView(out.buffer).setFloat32(1, number, true);\n return [...out];\n }\n if (number < 0) throw new RangeError(`${name} must be non-negative`);\n if (number <= 0x1f) return [number];\n if (number <= 0x7f) return [0x84, number];\n if (number <= 0xffff) return [0x85, number & 0xff, (number >> 8) & 0xff];\n throw new RangeError(`${name} must be 65535 or lower`);\n}\n\nfunction encodeCompactItemId(value, name) {\n const number = requireNonNegativeInteger(value, name);\n if (number === 0) return [0];\n return encodeCompactNumber(number, name);\n}\n\nfunction encodeLoaderCycle(cycle) {\n const seconds = requireFiniteNumber(cycle, \"cycle\");\n if (seconds < 1) throw new RangeError(`cycle must be at least 1 second`);\n const ticks = Math.round(seconds * 20);\n if (ticks <= 0x3f) return [ticks];\n if (ticks <= 0xff) return [0x80, ticks];\n if (ticks <= 0xffff) return [0x85, ticks & 0xff, (ticks >> 8) & 0xff];\n throw new RangeError(`cycle is too large`);\n}\n\nfunction encodeUiCommandTarget(entity, action = 0) {\n const entityId = requireUint16(entity, \"entity\");\n const actionId = requireByteInteger(action, \"action\");\n if (actionId && entityId > 0xff) {\n throw new RangeError(`copy/paste UI config currently requires an entity id below 256`);\n }\n return [\n NAV_UNIT_HEADER_TAG,\n actionId ? actionId : (entityId >> 8) & 0xff,\n entityId & 0xff\n ];\n}\n\nfunction encodeUiCommandSection(commandName) {\n const command = encoder.encode(commandName);\n if (command.byteLength > 255) throw new RangeError(`command name is too long`);\n return [\n NAV_UNIT_STRING_TAG,\n command.byteLength,\n ...command,\n 0x00\n ];\n}\n\nfunction encodeUiCommandHeader(entity, commandName) {\n return [\n ...encodeUiCommandTarget(entity),\n ...encodeUiCommandSection(commandName)\n ];\n}\n\nfunction encodeLoaderConfigPayload({\n pick = LoaderPosition.TopLeft,\n place = LoaderPosition.TopRight,\n priority = LoaderPriority.Normal,\n stack = 16,\n cycle = 1,\n requireOutput = false,\n waitForStack = false\n } = {}) {\n return [\n NAV_UNIT_HEADER_TAG,\n requireLoaderPosition(pick, \"pick\"),\n requireLoaderPosition(place, \"place\"),\n requireLoaderPriority(priority, \"priority\"),\n requireNonNegativeInteger(stack, \"stack\"),\n ...encodeLoaderCycle(cycle),\n requireOutput ? LOADER_TRUE : LOADER_FALSE,\n waitForStack ? LOADER_TRUE : LOADER_FALSE\n ];\n}\n\nfunction encodeLoaderFilterConfigPayload(filterMode = LoaderFilterMode.AllowAll) {\n return [\n NAV_UNIT_HEADER_TAG,\n requireLoaderFilterMode(filterMode, \"filterMode\")\n ];\n}\n\nfunction encodeLoaderFilterItemsPayload(filterSlots = []) {\n const slots = [0, 1, 2].map((index) => requireNonNegativeInteger(filterSlots[index] ?? 0, `filterSlots[${index}]`));\n return [\n NAV_UNIT_HEADER_TAG,\n ...slots.flatMap((slot, index) => encodeCompactItemId(slot, `filterSlots[${index}]`))\n ];\n}\n\nexport function buildNavigationUnitConfigData(entity, {\n destination,\n page = 0,\n warp = \"idle\",\n autoWarpOnShieldFailure = false,\n autoWarpOnNoCaptains = false\n} = {}) {\n return Uint8Array.from([\n ...encodeUiCommandHeader(entity, NAV_UNIT_COMMAND),\n ...encodeNavigationUnitConfigPayload({destination, page, warp, autoWarpOnShieldFailure, autoWarpOnNoCaptains}),\n ...NAV_UNIT_TRAILER\n ]);\n}\n\nfunction encodeNavigationUnitConfigPayload({\n destination,\n page = 0,\n warp = \"idle\",\n autoWarpOnShieldFailure = false,\n autoWarpOnNoCaptains = false\n } = {}) {\n return [\n NAV_UNIT_HEADER_TAG,\n requireByteInteger(destination, \"destination\"),\n requireByteInteger(page, \"page\"),\n navWarpByte(warp),\n navConfigBool(autoWarpOnShieldFailure),\n navConfigBool(autoWarpOnNoCaptains)\n ];\n}\n\nexport function buildGeneratorMazePuzzleData(entity, solution) {\n const value = String(solution);\n if (!/^\\d+$/.test(value)) throw new TypeError(`solution must contain only digits`);\n const encoded = encoder.encode(value);\n if (encoded.byteLength > 255) throw new RangeError(`solution is too long`);\n\n return Uint8Array.from([\n ...encodeUiCommandHeader(entity, GENERATOR_MAZE_PUZZLE_COMMAND),\n NAV_UNIT_HEADER_TAG,\n NAV_UNIT_STRING_TAG,\n encoded.byteLength,\n ...encoded,\n NAV_UNIT_FALSE,\n ...NAV_UNIT_TRAILER\n ]);\n}\n\nexport function buildPusherConfigData(entity, {\n mode = 2,\n filteredMode = 0,\n angle = 0,\n speed = 20,\n filterInventory = false,\n length = 1000\n} = {}) {\n return Uint8Array.from([\n ...encodeUiCommandHeader(entity, PUSHER_CONFIG_COMMAND),\n NAV_UNIT_HEADER_TAG,\n requirePusherMode(mode, \"mode\"),\n requirePusherMode(filteredMode, \"filteredMode\"),\n ...encodeCompactNumber(angle, \"angle\"),\n ...encodeCompactNumber(speed, \"speed\"),\n filterInventory ? PUSHER_FILTER_INVENTORY_ON : PUSHER_FILTER_INVENTORY_OFF,\n ...encodeCompactNumber(length, \"length\"),\n ...NAV_UNIT_TRAILER\n ]);\n}\n\nexport function buildPusherFilterItemsData(entity, filterSlots = []) {\n const slots = [0, 1, 2].map((index) => requireNonNegativeInteger(filterSlots[index] ?? 0, `filterSlots[${index}]`));\n return Uint8Array.from([\n ...encodeUiCommandHeader(entity, PUSHER_FILTER_ITEMS_COMMAND),\n NAV_UNIT_HEADER_TAG,\n ...slots.flatMap((slot, index) => encodeCompactItemId(slot, `filterSlots[${index}]`)),\n ...NAV_UNIT_TRAILER\n ]);\n}\n\nexport function buildLoaderConfigData(entity, {\n pick = LoaderPosition.TopLeft,\n place = LoaderPosition.TopRight,\n priority = LoaderPriority.Normal,\n stack = 16,\n cycle = 1,\n requireOutput = false,\n waitForStack = false\n} = {}) {\n return Uint8Array.from([\n ...encodeUiCommandHeader(entity, LOADER_CONFIG_COMMAND),\n ...encodeLoaderConfigPayload({pick, place, priority, stack, cycle, requireOutput, waitForStack}),\n ...NAV_UNIT_TRAILER\n ]);\n}\n\nexport function buildLoaderFilterConfigData(entity, filterMode = LoaderFilterMode.AllowAll) {\n return Uint8Array.from([\n ...encodeUiCommandHeader(entity, LOADER_FILTER_CONFIG_COMMAND),\n ...encodeLoaderFilterConfigPayload(filterMode),\n ...NAV_UNIT_TRAILER\n ]);\n}\n\nexport function buildLoaderFilterItemsData(entity, filterSlots = []) {\n return Uint8Array.from([\n ...encodeUiCommandHeader(entity, LOADER_FILTER_ITEMS_COMMAND),\n ...encodeLoaderFilterItemsPayload(filterSlots),\n ...NAV_UNIT_TRAILER\n ]);\n}\n\nexport function buildCargoHatchFilterConfigData(entity, filterMode = LoaderFilterMode.AllowAll) {\n return buildLoaderFilterConfigData(entity, filterMode);\n}\n\nexport function buildCargoHatchFilterItemsData(entity, filterSlots = []) {\n return buildLoaderFilterItemsData(entity, filterSlots);\n}\n\nfunction buildLoaderFullConfigPayload(entity, action, {\n filterMode = LoaderFilterMode.AllowAll,\n filterSlots = [],\n ...config\n} = {}) {\n return Uint8Array.from([\n ...encodeUiCommandTarget(entity, action),\n ...encodeUiCommandSection(LOADER_CONFIG_COMMAND),\n ...encodeLoaderConfigPayload(config),\n UI_COMMAND_END,\n ...encodeUiCommandSection(LOADER_FILTER_CONFIG_COMMAND),\n ...encodeLoaderFilterConfigPayload(filterMode),\n UI_COMMAND_END,\n ...encodeUiCommandSection(LOADER_FILTER_ITEMS_COMMAND),\n ...encodeLoaderFilterItemsPayload(filterSlots),\n UI_COMMAND_END,\n UI_COMMAND_END\n ]);\n}\n\nfunction buildFilterOnlyConfigPayload(entity, action, {\n filterMode = 0,\n filterSlots = []\n} = {}) {\n return Uint8Array.from([\n ...encodeUiCommandTarget(entity, action),\n ...encodeUiCommandSection(LOADER_FILTER_CONFIG_COMMAND),\n ...encodeLoaderFilterConfigPayload(filterMode),\n UI_COMMAND_END,\n ...encodeUiCommandSection(LOADER_FILTER_ITEMS_COMMAND),\n ...encodeLoaderFilterItemsPayload(filterSlots),\n UI_COMMAND_END,\n UI_COMMAND_END\n ]);\n}\n\nexport function buildLoaderFullConfigData(entity, config = {}) {\n return buildLoaderFullConfigPayload(entity, 2, config);\n}\n\nexport function buildLoaderCopyConfigData(config = {}) {\n return buildLoaderFullConfigPayload(1, 1, config);\n}\n\nexport function buildCargoHatchFullConfigData(entity, config = {}) {\n return buildFilterOnlyConfigPayload(entity, 2, config);\n}\n\nexport function buildCargoHatchCopyConfigData(config = {}) {\n return buildFilterOnlyConfigPayload(0, 1, config);\n}\n\nexport function buildLoaderClipboardConfigData(config = {}) {\n return Uint8Array.from([\n ...encodeUiCommandTarget(1, CLIPBOARD_ACTION),\n ...encodeUiCommandSection(LOADER_CONFIG_COMMAND),\n ...encodeLoaderConfigPayload(config),\n ...NAV_UNIT_TRAILER\n ]);\n}\n\nexport function buildNavigationUnitClipboardConfigData(config = {}) {\n return Uint8Array.from([\n ...encodeUiCommandTarget(6, CLIPBOARD_ACTION),\n ...encodeUiCommandSection(NAV_UNIT_COMMAND),\n ...encodeNavigationUnitConfigPayload(config),\n ...NAV_UNIT_TRAILER\n ]);\n}\n\nexport function buildNavigationUnitPasteConfigData(entity, config = {}) {\n return Uint8Array.from([\n ...encodeUiCommandTarget(entity, 2),\n ...encodeUiCommandSection(NAV_UNIT_COMMAND),\n ...encodeNavigationUnitConfigPayload(config),\n ...NAV_UNIT_TRAILER\n ]);\n}\n\nexport function buildClipboardConfigData(target, commandName, values = []) {\n if (typeof commandName !== \"string\" || !commandName) throw new TypeError(`commandName must be a non-empty string`);\n return Uint8Array.from([\n ...encodeUiCommandTarget(requireClipboardTarget(target), CLIPBOARD_ACTION),\n ...encodeUiCommandSection(commandName),\n NAV_UNIT_HEADER_TAG,\n ...values,\n ...NAV_UNIT_TRAILER\n ]);\n}\n\nexport function buildClipboardFixedAngleData(target, direction) {\n return buildClipboardConfigData(target, CLIPBOARD_FIXED_ANGLE_COMMAND, [requireFixedAngle(direction)]);\n}\n\nfunction buildFixedAngleConfigData(entity, action, direction) {\n return Uint8Array.from([\n ...encodeUiCommandTarget(entity, action),\n ...encodeUiCommandSection(CLIPBOARD_FIXED_ANGLE_COMMAND),\n NAV_UNIT_HEADER_TAG,\n requireFixedAngle(direction),\n ...NAV_UNIT_TRAILER\n ]);\n}\n\nexport function buildGeneratorClipboardDirectionData(direction) {\n return buildClipboardFixedAngleData(\"generator\", direction);\n}\n\nexport function buildCargoEjectorDirectionData(entity, direction) {\n return buildFixedAngleConfigData(entity, 0, direction);\n}\n\nexport function buildCargoEjectorPasteConfigData(entity, direction) {\n return buildFixedAngleConfigData(entity, 2, direction);\n}\n\nexport function buildCargoEjectorCopyConfigData(direction) {\n return buildFixedAngleConfigData(7, CLIPBOARD_ACTION, direction);\n}\n\nexport function buildCargoEjectorClipboardDirectionData(direction) {\n return buildClipboardFixedAngleData(\"ejector\", direction);\n}\n\nexport function buildExpandoClipboardAngleData(angle) {\n return buildClipboardConfigData(\"expando\", CLIPBOARD_ANGLE_COMMAND, encodeCompactNumber(requireAngleDegrees(angle), \"angle\"));\n}\n\nexport {\n CLIPBOARD_ACTION,\n CLIPBOARD_ANGLE_COMMAND,\n CLIPBOARD_FIXED_ANGLE_COMMAND,\n CLIPBOARD_TARGET_VALUES,\n FIXED_ANGLE_VALUES,\n GENERATOR_MAZE_PUZZLE_COMMAND,\n LOADER_CONFIG_COMMAND,\n LOADER_FALSE,\n LOADER_FILTER_CONFIG_COMMAND,\n LOADER_FILTER_ITEMS_COMMAND,\n LOADER_TRUE,\n NAV_UNIT_COMMAND,\n NAV_UNIT_FALSE,\n NAV_UNIT_TRUE,\n PUSHER_CONFIG_COMMAND,\n PUSHER_FILTER_ITEMS_COMMAND\n};\n\nconst PUSHER_MODE_VALUES = new Map([\n [PusherMode.Push, 0],\n [PusherMode.Pull, 1],\n [PusherMode.DoNothing, 2]\n]);\n\nconst LOADER_POSITION_VALUES = new Map([\n [LoaderPosition.TopLeft, 0],\n [LoaderPosition.TopMiddle, 1],\n [LoaderPosition.TopRight, 2],\n [LoaderPosition.MiddleLeft, 3],\n [LoaderPosition.MiddleRight, 4],\n [LoaderPosition.BottomLeft, 5],\n [LoaderPosition.BottomMiddle, 6],\n [LoaderPosition.BottomRight, 7]\n]);\n\nconst LOADER_PRIORITY_VALUES = new Map([\n [LoaderPriority.Low, -1],\n [LoaderPriority.Normal, 0],\n [LoaderPriority.High, 1]\n]);\n\nconst LOADER_FILTER_MODE_VALUES = new Map([\n [LoaderFilterMode.AllowAll, 0],\n [LoaderFilterMode.BlockFilter, 1],\n [LoaderFilterMode.AllowFilter, 2],\n [LoaderFilterMode.BlockAll, 3]\n]);\n", "import {decodeMsgpack} from \"../codec/msgpack.js\";\nimport {toUint8Array} from \"../codec/binary.js\";\n\n// Convert a websocket payload into the transport-independent packet object\n// consumed by the client and state reducers.\nexport function decodeIncomingFrame(data) {\n return typeof data === \"string\" ? JSON.parse(data) : decodeMsgpack(toUint8Array(data));\n}\n", "import {itemEquipmentSlotFromId} from \"../../state/items.js\";\nimport {buildInventoryDragCommand, normalizeEquipmentSlot, normalizeInventoryEvent} from \"../../protocol/outbound/inventory.js\";\n\nexport function normalizeAttachMode(mode = \"observe\") {\n const value = String(mode || \"observe\").toLowerCase();\n if (value === \"observe\" || value === \"bootstrap\" || value === \"readonly\") return value;\n throw new Error(`Unsupported websocket attach mode: ${mode}`);\n}\n\nexport class ClientNetDomain {\n constructor(client) {\n this.client = client;\n }\n\n get connected() {\n return this.client.connected;\n }\n\n get ready() {\n return this.client.ready;\n }\n\n get sid() {\n return this.client.sid;\n }\n\n get packetCount() {\n return this.client.packetCount;\n }\n\n get lastPacket() {\n return this.client.lastPacket;\n }\n\n send(command = {}) {\n return this.client.send(command);\n }\n\n sendMessage(message, options = {}) {\n return this.client.sendMessage(message, options);\n }\n\n sendRaw(message, options = {}) {\n return this.client.sendRaw(message, options);\n }\n\n sendEntityCommand(cmd, args = [-1, -1, -1]) {\n return this.client.sendEntityCommand(cmd, args);\n }\n\n sendUiConfig(data) {\n return this.client.sendUiConfig(data);\n }\n\n sendBlueprintPlacement(placement) {\n return this.client.sendBlueprintPlacement(placement);\n }\n\n setOutfit(outfit) {\n return this.client.setOutfit(outfit);\n }\n}\n\nexport class ClientDebugDomain {\n constructor(client) {\n this.client = client;\n }\n\n packets() {\n return this.client.packets.slice();\n }\n\n decodeErrors() {\n return this.client.decodeErrors.slice();\n }\n\n worldStore() {\n return this.client.worlds;\n }\n\n modelTable(worldId, tableId) {\n return this.client.worlds.worlds.get(Number(worldId))?.model.table(tableId) || new Map();\n }\n\n modelRecord(worldId, tableId, entityId) {\n return this.client.worlds.worlds.get(Number(worldId))?.model.record(tableId, entityId) || null;\n }\n\n entities(scope = \"ship\") {\n return summariesFor(this.client, scope);\n }\n\n entity(scope = \"ship\", entity = null) {\n if (entity == null) return null;\n return summaryForEntity(this.client, scope, entityIdOf(entity));\n }\n\n puiPanels() {\n return [...this.client.puiPanels.values()];\n }\n\n commsPanels() {\n return [...this.client.commsPanels.values()];\n }\n}\n\nexport class PlayerDomain {\n constructor(client) {\n this.client = client;\n }\n\n current() {\n return currentPlayerSummary(this.client);\n }\n\n entity() {\n return this.client.currentPlayerEntity();\n }\n\n name() {\n return this.current()?.name ?? null;\n }\n\n rank() {\n return currentPlayerRank(this.client);\n }\n\n move({x = 0, y = 0} = {}, command = {}) {\n return this.client.move(x, y, command);\n }\n\n aim({x = 0, y = 0, mx = x, my = y} = {}, command = {}) {\n return this.client.aim(mx, my, command);\n }\n\n action(flags = {}, command = {}) {\n return this.client.action(flags, command);\n }\n\n useEntity(entity, options = {}, command = {}) {\n return this.client.useEntity(entityIdOf(entity), options, command);\n }\n\n useHeldItem(options = {}, command = {}) {\n return this.client.useHeldItem(options, command);\n }\n\n placeHeldItem(options = {}, command = {}) {\n return this.client.placeHeldItem(options, command);\n }\n\n placeBlueprint(placement, options = {}, command = {}) {\n return this.client.placeBlueprint(placement, options, command);\n }\n\n rotateHeldItem(options = {}, command = {}) {\n return this.client.rotateHeldItem(options, command);\n }\n\n selectSlot(invSlot = 0, command = {}) {\n return this.client.send({...command, inv_slot: inventorySlotIndexOf(invSlot)});\n }\n\n inputSettings() {\n return this.client.inputSettings();\n }\n\n setInputSettings(settings = {}, options = {}) {\n return this.client.setInputSettings(settings, options);\n }\n\n setView(width, height, options = {}) {\n return this.client.setView(width, height, options);\n }\n\n setScreenSize(width, height, options = {}) {\n return this.client.setScreenSize(width, height, options);\n }\n\n setWrenchMode(mode, options = {}) {\n return this.client.setWrenchMode(mode, options);\n }\n\n setTurretMode(mode, options = {}) {\n return this.client.setTurretMode(mode, options);\n }\n}\n\nexport class ShipManagementDomain {\n constructor(client) {\n this.client = client;\n }\n\n requestPlayerList() {\n return this.client.requestPlayerList();\n }\n\n resetInvite() {\n return this.client.resetInvite();\n }\n\n setPrivacy(privacy) {\n return this.client.setShipPrivacy(privacy);\n }\n\n recoverStarterItem(itemId) {\n return this.client.recoverStarterItem(itemId);\n }\n\n setPlayerRank(refId, rank) {\n return this.client.setPlayerRank(refId, rank);\n }\n\n kickPlayer(refId) {\n return this.client.kickPlayer(refId);\n }\n\n banPlayer(refId) {\n return this.client.banPlayer(refId);\n }\n\n demoteSelf() {\n return this.client.demoteSelf();\n }\n\n config() {\n return this.client.shipConfig;\n }\n\n hasCheats() {\n return Boolean(this.client.captainSubrank?.enableCheats);\n }\n\n playerList() {\n return this.client.playerList;\n }\n}\n\nexport class InventoryDomain {\n constructor(client) {\n this.client = client;\n }\n\n state() {\n return this.client.inventoryState;\n }\n\n hotbarSize() {\n return this.state()?.hotbarSize ?? 0;\n }\n\n allSlots() {\n return (this.state()?.slots || []).map((slot) => this.slot(slot.index));\n }\n\n slot(ref) {\n return new InventorySlotHandle(this, inventorySlotIndexOf(ref));\n }\n\n hotbarSlots() {\n return (this.state()?.hotbar || []).map((slot) => this.slot(slot.index));\n }\n\n equipmentSlots() {\n return {\n head: this.slot(\"head\"),\n face: this.slot(\"face\"),\n body: this.slot(\"body\"),\n back: this.slot(\"back\"),\n hands: this.slot(\"hands\"),\n feet: this.slot(\"feet\")\n };\n }\n\n findItem(itemId, {area = \"all\"} = {}) {\n return this.findItems(itemId, {area})[0] || null;\n }\n\n findItems(itemId, {area = \"all\"} = {}) {\n const normalized = Number(itemId);\n if (!Number.isFinite(normalized)) return [];\n return inventoryHandlesForArea(this, area).filter((slot) => slot.itemId === normalized);\n }\n\n firstEmpty({area = \"all\"} = {}) {\n return inventoryHandlesForArea(this, area).find((slot) => slot.empty) || null;\n }\n\n move(source, target, {split = false} = {}, command = {}) {\n return this.client.send({\n ...command,\n ...buildInventoryDragCommand(inventorySlotIndexOf(source, \"source\"), inventorySlotIndexOf(target, \"target\"), split)\n });\n }\n\n equip(source, equipmentSlot = null, options = {}, command = {}) {\n const args = normalizeEquipArguments(equipmentSlot, options, command);\n const target = args.equipmentSlot == null ? inferEquipmentSlotForInventorySource(this, source) : args.equipmentSlot;\n return this.move(source, normalizeEquipmentSlot(target), {split: args.split}, args.command);\n }\n\n unequip(equipmentSlot, target = 0, {split = false} = {}, command = {}) {\n return this.move(normalizeEquipmentSlot(equipmentSlot), target, {split}, command);\n }\n\n select(slot, command = {}) {\n return this.client.send({...command, inv_slot: inventorySlotIndexOf(slot)});\n }\n}\n\nexport class InventorySlotHandle {\n constructor(domain, index) {\n this.domain = domain;\n this.client = domain.client;\n this.index = index;\n }\n\n get state() {\n return this.domain.state()?.slots?.find((slot) => slot.index === this.index) || null;\n }\n\n get kind() {\n return this.state?.kind ?? null;\n }\n\n get equipmentSlot() {\n return this.state?.equipmentSlot ?? null;\n }\n\n get itemId() {\n return this.state?.itemId ?? null;\n }\n\n get itemName() {\n return this.state?.itemName ?? null;\n }\n\n get count() {\n return this.state?.count ?? 0;\n }\n\n get empty() {\n return this.state?.empty ?? true;\n }\n\n exists() {\n return Boolean(this.state);\n }\n\n snapshot() {\n return this.state ? Object.freeze({...this.state}) : null;\n }\n\n moveTo(target, options = {}, command = {}) {\n return this.domain.move(this, target, options, command);\n }\n\n equip(equipmentSlot = null, options = {}, command = {}) {\n if (equipmentSlot && typeof equipmentSlot === \"object\") return this.domain.equip(this, null, equipmentSlot, options);\n return this.domain.equip(this, equipmentSlot, options, command);\n }\n\n unequip(target = 0, options = {}, command = {}) {\n if (!this.equipmentSlot) throw new RangeError(`inventory slot ${this.index} is not an equipment slot`);\n return this.domain.unequip(this.equipmentSlot, target, options, command);\n }\n\n select(command = {}) {\n return this.domain.select(this, command);\n }\n}\n\nexport class WorldDomain {\n constructor(client, scope) {\n this.client = client;\n this.scope = scope;\n this.entities = new EntityCollection(client, scope);\n this.machines = new MachineCollection(client, scope);\n this.players = new PlayerCollection(client, scope);\n this.blocks = new BlockCollection(client, scope);\n this.materials = new MaterialCollection(client, scope);\n }\n\n get id() {\n return worldStateFor(this.client, this.scope)?.id ?? null;\n }\n\n exists() {\n return Boolean(worldStateFor(this.client, this.scope));\n }\n\n snapshot(options = {}) {\n return worldStateFor(this.client, this.scope)?.snapshot(options) || null;\n }\n}\n\nexport class ShipDomain extends WorldDomain {\n entity() {\n const summary = this.client.worlds.currentShipEntity();\n return summary ? new EntityHandle(this.client, summary.entity, \"overworld\") : null;\n }\n\n get overworldEntity() {\n return this.entity();\n }\n\n get metadata() {\n return worldStateFor(this.client, this.scope)?.model.shipMetadata() || null;\n }\n}\n\nexport class OverworldDomain extends WorldDomain {\n ships(options = {}) {\n return this.client.ships(options).map((summary) => new ShipHandle(this.client, summary));\n }\n\n shipByHex(hexCode, options = {}) {\n const summary = this.client.shipByHex(hexCode, options);\n return summary ? new ShipHandle(this.client, summary) : null;\n }\n\n shipByEntity(entity, options = {}) {\n const summary = this.client.shipByEntity(entityIdOf(entity), options);\n return summary ? new ShipHandle(this.client, summary) : null;\n }\n}\n\nconst ENTITY_SNAPSHOT_CACHE = new WeakMap();\n\nexport function entitySnapshotFor(summary) {\n if (!summary || typeof summary !== \"object\") return null;\n let snapshot = ENTITY_SNAPSHOT_CACHE.get(summary);\n if (!snapshot) {\n snapshot = new EntitySnapshot(summary);\n ENTITY_SNAPSHOT_CACHE.set(summary, snapshot);\n }\n return snapshot;\n}\n\nexport class EntitySnapshot {\n #contents;\n\n constructor(summary) {\n const data = clonePlain(summary || {});\n this.#contents = data.contents || null;\n delete data.contents;\n Object.assign(this, data);\n this.id = Number(data.entity ?? data.id);\n this.entity = this.id;\n this.position = data.transform || null;\n this.rotation = data.transform?.rotation ?? null;\n this.type = entityPublicType(data, this.#contents);\n this.features = Object.freeze(entityFeatures(data, this.#contents));\n deepFreeze(this.#contents);\n deepFreeze(this);\n }\n\n is(type) {\n const key = normalizeEntityKey(type);\n if (!key) return false;\n const publicType = normalizeEntityKey(this.type);\n if (key === publicType) return true;\n if (key === normalizeEntityKey(this.category)) return true;\n if (key === \"placedentity\" && this.category === \"placed_entity\") return true;\n if (key === \"looseitem\" && this.category === \"loose_item\") return true;\n if (key === \"ship\" && (this.category === \"ship_control\" || this.#contents?.shipControl)) return true;\n if (key === \"machine\") return Boolean(entityMachineType(this.#contents));\n if (key === \"item\") return Boolean(this.#contents?.itemHolder || this.#contents?.itemCrate || this.#contents?.expandoBox);\n if (key === \"bot\") return Boolean(this.#contents?.bot);\n if (key === \"player\") return Boolean(this.#contents?.player || this.category === \"player\");\n if (this.kind?.some((kind) => normalizeEntityKey(kind) === key)) return true;\n return Boolean(componentFor(this.#contents, key));\n }\n\n has(feature) {\n return this.feature(feature) != null;\n }\n\n feature(feature) {\n return entityFeature(this, this.#contents, feature);\n }\n}\n\nexport class EntityCollection {\n constructor(client, scope) {\n this.client = client;\n this.scope = scope;\n }\n\n all() {\n return summariesFor(this.client, this.scope).map((summary) => new EntityHandle(this.client, summary.entity, this.scope));\n }\n\n snapshots() {\n return summariesFor(this.client, this.scope).map(entitySnapshotFor);\n }\n\n states() {\n return this.snapshots();\n }\n\n get(entity) {\n return new EntityHandle(this.client, entityIdOf(entity), this.scope);\n }\n}\n\nexport class PlayerCollection {\n constructor(client, scope) {\n this.client = client;\n this.scope = scope;\n }\n\n all() {\n return worldStateFor(this.client, this.scope)?.model.players() || [];\n }\n\n current() {\n return currentPlayerSummary(this.client, this.scope);\n }\n}\n\nexport class BlockCollection {\n constructor(client, scope) {\n this.client = client;\n this.scope = scope;\n }\n\n all() {\n return worldStateFor(this.client, this.scope)?.blocks() || [];\n }\n\n at(x, y) {\n return worldStateFor(this.client, this.scope)?.blockAt(x, y) || null;\n }\n}\n\nexport class MaterialCollection {\n constructor(client, scope) {\n this.client = client;\n this.scope = scope;\n }\n\n all() {\n return worldStateFor(this.client, this.scope)?.materials() || [];\n }\n}\n\nexport class MachineCollection {\n constructor(client, scope) {\n this.client = client;\n this.scope = scope;\n }\n\n state() {\n return worldStateFor(this.client, this.scope)?.model.machines() || emptyMachineSummary();\n }\n\n raw() {\n return this.state();\n }\n\n loaders() {\n return this.state().loaders.map((item) => new LoaderHandle(this.client, item.entity, this.scope));\n }\n\n loader(entity) {\n return new LoaderHandle(this.client, entityIdOf(entity), this.scope);\n }\n\n pushers() {\n return this.state().pushers.map((item) => new PusherHandle(this.client, item.entity, this.scope));\n }\n\n pusher(entity) {\n return new PusherHandle(this.client, entityIdOf(entity), this.scope);\n }\n\n launchers() {\n return this.state().launchers.map((item) => new LauncherHandle(this.client, item.entity, this.scope));\n }\n\n launcher(entity) {\n return new LauncherHandle(this.client, entityIdOf(entity), this.scope);\n }\n\n navigationUnits() {\n return this.state().navigationUnits.map((item) => new NavigationUnitHandle(this.client, item.entity, this.scope));\n }\n\n navigationUnit(entity = null) {\n const id = entity == null ? this.state().navigationUnits[0]?.entity : entityIdOf(entity);\n return id == null ? null : new NavigationUnitHandle(this.client, id, this.scope);\n }\n\n fabricators() {\n return this.state().fabricators.map((item) => new FabricatorHandle(this.client, item.entity, this.scope));\n }\n\n fabricator(entity) {\n return new FabricatorHandle(this.client, entityIdOf(entity), this.scope);\n }\n\n commsStations() {\n return this.state().commsStations.map((item) => new CommsStationHandle(this.client, item.entity, this.scope));\n }\n\n commsStation(entity = null) {\n const id = entity == null ? this.state().commsStations[0]?.entity : entityIdOf(entity);\n return id == null ? null : new CommsStationHandle(this.client, id, this.scope);\n }\n\n signs() {\n return summariesFor(this.client, this.scope).filter((item) => item.contents?.sign).map((item) => new SignHandle(this.client, item.entity, this.scope));\n }\n\n sign(entity) {\n return new SignHandle(this.client, entityIdOf(entity), this.scope);\n }\n\n generators() {\n return this.state().shieldGenerators.map((item) => new GeneratorHandle(this.client, item.entity, this.scope));\n }\n\n generator(entity) {\n return new GeneratorHandle(this.client, entityIdOf(entity), this.scope);\n }\n\n cargoHatches() {\n return this.state().cargoHatches.map((item) => new CargoHatchHandle(this.client, item.entity, this.scope));\n }\n\n cargoHatch(entity) {\n return new CargoHatchHandle(this.client, entityIdOf(entity), this.scope);\n }\n\n cargoEjectors() {\n return this.state().cargoEjectors.map((item) => new CargoEjectorHandle(this.client, item.entity, this.scope));\n }\n\n cargoEjector(entity) {\n return new CargoEjectorHandle(this.client, entityIdOf(entity), this.scope);\n }\n\n cannons() {\n return this.state().cannons.map((item) => new CannonHandle(this.client, item.entity, this.scope));\n }\n\n cannon(entity) {\n return new CannonHandle(this.client, entityIdOf(entity), this.scope);\n }\n\n thrusters() {\n return this.state().thrusters.map((item) => new ThrusterHandle(this.client, item.entity, this.scope));\n }\n\n thruster(entity) {\n return new ThrusterHandle(this.client, entityIdOf(entity), this.scope);\n }\n\n helms() {\n return this.state().helms.map((item) => new HelmHandle(this.client, item.entity, this.scope));\n }\n\n helm(entity) {\n return new HelmHandle(this.client, entityIdOf(entity), this.scope);\n }\n\n doors() {\n return this.state().doors.map((item) => new DoorHandle(this.client, item.entity, this.scope));\n }\n\n door(entity) {\n return new DoorHandle(this.client, entityIdOf(entity), this.scope);\n }\n\n spawnPoints() {\n return this.state().spawnPoints.map((item) => new SpawnPointHandle(this.client, item.entity, this.scope));\n }\n\n spawnPoint(entity) {\n return new SpawnPointHandle(this.client, entityIdOf(entity), this.scope);\n }\n\n shieldProjectors() {\n return this.state().shieldProjectors.map((item) => new ShieldProjectorHandle(this.client, item.entity, this.scope));\n }\n\n shieldProjector(entity) {\n return new ShieldProjectorHandle(this.client, entityIdOf(entity), this.scope);\n }\n\n fluidTanks() {\n return this.state().fluidTanks.map((item) => new FluidTankHandle(this.client, item.entity, this.scope));\n }\n\n fluidTank(entity) {\n return new FluidTankHandle(this.client, entityIdOf(entity), this.scope);\n }\n\n expandoBoxes() {\n return this.state().expandoBoxes.map((item) => new ExpandoBoxHandle(this.client, item.entity, this.scope));\n }\n\n expandoBox(entity) {\n return new ExpandoBoxHandle(this.client, entityIdOf(entity), this.scope);\n }\n}\n\nexport class EntityHandle {\n constructor(client, entity, scope = \"ship\") {\n this.client = client;\n this.id = Number(entity);\n this.entity = this.id;\n this.scope = scope;\n this._cachedSummary = undefined;\n this._cachedSnapshot = null;\n }\n\n exists() {\n return Boolean(this.snapshot());\n }\n\n // Reading five properties off a handle used to walk the world/derived-state\n // resolution chain five times. The summary object identity changes whenever\n // the entity is refreshed, so it doubles as the cache key.\n snapshot() {\n const summary = worldStateFor(this.client, this.scope)?.entity(this.id) || null;\n if (summary !== this._cachedSummary) {\n this._cachedSummary = summary;\n this._cachedSnapshot = entitySnapshotFor(summary);\n }\n return this._cachedSnapshot;\n }\n\n get position() {\n return summaryForEntity(this.client, this.scope, this.id)?.transform || null;\n }\n\n get health() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.health || null;\n }\n\n get type() {\n return this.snapshot()?.type ?? \"unknown\";\n }\n\n get features() {\n return this.snapshot()?.features ?? [];\n }\n\n is(type) {\n return this.snapshot()?.is(type) ?? false;\n }\n\n has(feature) {\n return this.snapshot()?.has(feature) ?? false;\n }\n\n feature(feature) {\n return this.snapshot()?.feature(feature) ?? null;\n }\n\n as(type) {\n return entityDomainHandle(this.client, this.id, this.scope, type, this.snapshot());\n }\n\n asLoader() {\n return this.as(\"loader\");\n }\n\n asPusher() {\n return this.as(\"pusher\");\n }\n\n asLauncher() {\n return this.as(\"launcher\");\n }\n\n asNavigationUnit() {\n return this.as(\"navigationUnit\");\n }\n\n asCommsStation() {\n return this.as(\"commsStation\");\n }\n\n asSign() {\n return this.as(\"sign\");\n }\n\n asGenerator() {\n return this.as(\"shieldGenerator\");\n }\n\n asCargoHatch() {\n return this.as(\"cargoHatch\");\n }\n\n asCannon() {\n return this.as(\"cannon\");\n }\n\n asThruster() {\n return this.as(\"thruster\");\n }\n\n asHelm() {\n return this.as(\"helm\");\n }\n\n asDoor() {\n return this.as(\"door\");\n }\n\n asSpawnPoint() {\n return this.as(\"spawnPoint\");\n }\n\n asShieldProjector() {\n return this.as(\"shieldProjector\");\n }\n\n asFluidTank() {\n return this.as(\"fluidTank\");\n }\n\n asCargoEjector() {\n return this.as(\"cargoEjector\");\n }\n\n asExpandoBox() {\n return this.as(\"expandoBox\");\n }\n\n use(options = {}, command = {}) {\n return this.client.player.useEntity(this.id, options, command);\n }\n}\n\nexport class MachineHandle extends EntityHandle {\n open(options = {}, command = {}) {\n return this.use(options, command);\n }\n}\n\nexport class LoaderHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.loader || null;\n }\n\n configure(config = {}) {\n return this.client.sendLoaderConfig(this.id, config);\n }\n\n configureFull(config = {}) {\n return this.client.sendLoaderFullConfig(this.id, config);\n }\n\n copy(config = {}) {\n return this.client.copyLoaderConfig(this.id, config);\n }\n\n setPickPlace(pick, place, config = {}) {\n return this.client.setLoaderPickPlace(this.id, pick, place, config);\n }\n\n setPriority(priority, config = {}) {\n return this.client.setLoaderPriority(this.id, priority, config);\n }\n\n setStack(stack, config = {}) {\n return this.client.setLoaderStack(this.id, stack, config);\n }\n\n setCycle(cycle, config = {}) {\n return this.client.setLoaderCycle(this.id, cycle, config);\n }\n\n setRequireOutput(requireOutput, config = {}) {\n return this.client.setLoaderRequireOutput(this.id, requireOutput, config);\n }\n\n setWaitForStack(waitForStack, config = {}) {\n return this.client.setLoaderWaitForStack(this.id, waitForStack, config);\n }\n\n setFilterMode(filterMode) {\n return this.client.setLoaderFilterMode(this.id, filterMode);\n }\n\n setFilterItems(filterSlots = []) {\n return this.client.setLoaderFilterItems(this.id, filterSlots);\n }\n\n get pick() {\n return this.state?.pick;\n }\n\n get place() {\n return this.state?.place;\n }\n\n get priority() {\n return this.state?.priority;\n }\n\n get stack() {\n return this.state?.stack;\n }\n\n get cycle() {\n return this.state?.cycle;\n }\n\n get requireOutput() {\n return this.state?.requireOutput;\n }\n\n get waitForStack() {\n return this.state?.waitForStack;\n }\n\n get filterMode() {\n return this.state?.filterMode;\n }\n\n get filterSlots() {\n return this.state?.filterSlots || [];\n }\n\n get active() {\n return this.state?.active;\n }\n\n get heldItem() {\n const state = this.state;\n if (!state || state.heldItemId == null) return null;\n return {itemId: state.heldItemId, itemName: state.heldItemName, count: state.heldCount};\n }\n\n get progress() {\n return this.state?.progress;\n }\n}\n\nexport class PusherHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.pusher || null;\n }\n\n get beam() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.pusherBeam || null;\n }\n\n configure(config = {}) {\n return this.client.sendPusherConfig(this.id, config);\n }\n\n setAngle(angle, config = {}) {\n return this.client.setPusherAngle(this.id, angle, config);\n }\n\n setSpeed(speed, config = {}) {\n return this.client.setPusherSpeed(this.id, speed, config);\n }\n\n setLength(length, config = {}) {\n return this.client.setPusherLength(this.id, length, config);\n }\n\n setMode(mode, config = {}) {\n return this.client.setPusherMode(this.id, mode, config);\n }\n\n setFilteredMode(mode, config = {}) {\n return this.client.setPusherFilteredMode(this.id, mode, config);\n }\n\n setFilterInventory(filterInventory, config = {}) {\n return this.client.setPusherFilterInventory(this.id, filterInventory, config);\n }\n\n setFilterItems(filterSlots = []) {\n return this.client.setPusherFilterItems(this.id, filterSlots);\n }\n\n get angle() {\n return this.state?.angle;\n }\n\n get speed() {\n return this.state?.speed;\n }\n\n get length() {\n return this.state?.length;\n }\n\n get mode() {\n return this.state?.mode;\n }\n\n get filteredMode() {\n return this.state?.filteredMode;\n }\n}\n\nexport class LauncherHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.launcher || null;\n }\n\n setAngle(angle) {\n return this.client.setLauncherAngle(angle);\n }\n\n setPower(power) {\n return this.client.setLauncherPower(power);\n }\n\n get angleDegrees() {\n return this.state?.angleDegrees;\n }\n\n get angleRadians() {\n return this.state?.angleRadians;\n }\n\n get angleRaw() {\n return this.state?.angleRaw;\n }\n}\n\nexport class NavigationUnitHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.navigationUnit || null;\n }\n\n configure(config = {}) {\n return this.client.sendNavigationUnitConfig(this.id, config);\n }\n\n copy(config = {}) {\n return this.client.copyNavigationUnitConfig(this.id, config);\n }\n\n paste(config = {}) {\n return this.client.pasteNavigationUnitConfig(this.id, config);\n }\n\n setDestination(destination, config = {}) {\n return this.client.setNavigationDestination(this.id, destination, config);\n }\n\n setAutoWarp(config = {}) {\n return this.client.setNavigationAutoWarp(this.id, config);\n }\n\n startWarp(config = {}) {\n return this.client.startWarp(this.id, config);\n }\n\n cancelWarp(config = {}) {\n return this.client.cancelWarp(this.id, config);\n }\n\n get destination() {\n return this.state?.destination;\n }\n\n get autoWarpOnShieldFailure() {\n return this.state?.autoWarpOnShieldFailure;\n }\n\n get autoWarpOnNoCaptains() {\n return this.state?.autoWarpOnNoCaptains;\n }\n\n get warp() {\n return this.state?.warp;\n }\n}\n\nexport class FabricatorHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.fabricator || null;\n }\n\n get progress() {\n return this.state?.progress;\n }\n\n get active() {\n return this.state?.active;\n }\n\n get craftingItem() {\n const state = this.state;\n if (!state || state.craftingItemId == null) return null;\n return {itemId: state.craftingItemId, itemName: state.craftingItemName, count: state.craftingCount};\n }\n\n panel() {\n return this.client.puiPanels.get(this.id) || null;\n }\n\n add(itemId, count = 1, index = -1) {\n return this.client.craftAdd(itemId, count, index);\n }\n\n sub(itemId, count = 1, index = 0) {\n return this.client.craftSub(itemId, count, index);\n }\n\n clearQueue() {\n return this.client.craftClearQueue();\n }\n\n toggleRepeat() {\n return this.client.craftToggleRepeat();\n }\n\n lockResource(row) {\n return this.client.fabricatorLockResource(row);\n }\n\n unlockResource(row) {\n return this.client.fabricatorUnlockResource(row);\n }\n\n eject(row) {\n return this.client.fabricatorEject(row);\n }\n}\n\nexport class CommsStationHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.commsStation || null;\n }\n\n panel() {\n return this.client.commsPanels.get(this.id) || null;\n }\n\n sendMessage(message = \"\") {\n return this.client.sendCommsMessage(message);\n }\n}\n\nexport class SignHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.sign || null;\n }\n\n setText(text = \"\", mode = 0) {\n return this.client.setSignText(text, mode);\n }\n\n get text() {\n return this.state?.text;\n }\n\n get mode() {\n return this.state?.mode;\n }\n}\n\nexport class GeneratorHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.shieldGenerator || null;\n }\n\n solvePuzzle(solution) {\n return this.client.solveGeneratorPuzzle(this.id, solution);\n }\n}\n\nexport class CargoHatchHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.cargoHatch || null;\n }\n\n get openFraction() {\n return this.state?.openFraction;\n }\n\n configure(config = {}) {\n return this.client.sendCargoHatchFullConfig(this.id, config);\n }\n\n copy(config = {}) {\n return this.client.copyCargoHatchConfig(this.id, config);\n }\n\n paste(config = {}) {\n return this.client.pasteCargoHatchConfig(this.id, config);\n }\n\n setFilterMode(filterMode) {\n return this.client.setCargoHatchFilterMode(this.id, filterMode);\n }\n\n setFilterItems(filterSlots = []) {\n return this.client.setCargoHatchFilterItems(this.id, filterSlots);\n }\n}\n\nexport class CannonHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.cannon || null;\n }\n}\n\nexport class ThrusterHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.thruster || null;\n }\n}\n\nexport class HelmHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.helm || null;\n }\n\n get occupied() {\n return this.state?.occupied;\n }\n}\n\nexport class DoorHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.door || null;\n }\n\n get rank() {\n return this.state?.rank;\n }\n\n get open() {\n return this.state?.open;\n }\n}\n\nexport class SpawnPointHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.spawnPoint || null;\n }\n\n get rank() {\n return this.state?.rank;\n }\n}\n\nexport class ShieldProjectorHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.shieldProjector || null;\n }\n\n get active() {\n return this.state?.active;\n }\n}\n\nexport class FluidTankHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.fluidTank || null;\n }\n\n get amount() {\n return this.state?.amount;\n }\n}\n\nexport class ExpandoBoxHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.expandoBox || null;\n }\n\n get item() {\n return this.state?.itemId;\n }\n\n get count() {\n return this.state?.count;\n }\n}\n\nexport class CargoEjectorHandle extends MachineHandle {\n get state() {\n return summaryForEntity(this.client, this.scope, this.id)?.contents?.cargoEjector || null;\n }\n\n get progress() {\n return this.state?.progress;\n }\n\n get active() {\n return this.state?.active;\n }\n\n setDirection(direction) {\n return this.client.setCargoEjectorDirection(this.id, direction);\n }\n\n copy(direction = \"right\") {\n return this.client.copyCargoEjectorConfig(this.id, direction);\n }\n\n paste(direction = \"right\") {\n return this.client.pasteCargoEjectorConfig(this.id, direction);\n }\n}\n\nexport class ShipHandle {\n constructor(client, summary) {\n this.client = client;\n this.summary = summary;\n }\n\n get entity() {\n return this.summary.entity;\n }\n\n get name() {\n return this.summary.name;\n }\n\n get hexCode() {\n return this.summary.hexCode;\n }\n\n get distance() {\n return this.summary.distance;\n }\n\n get worldId() {\n return this.summary.worldId;\n }\n\n get hasWorldData() {\n return this.summary.hasWorldData;\n }\n\n world() {\n return this.worldId == null ? null : this.client.world(this.worldId);\n }\n\n snapshot() {\n return this.summary;\n }\n}\n\nconst ENTITY_COMPONENT_ALIASES = new Map([\n [\"hoveroutline\", \"hoverOutline\"],\n [\"outline\", \"hoverOutline\"],\n [\"itemholder\", \"itemHolder\"],\n [\"itemcrate\", \"itemCrate\"],\n [\"expandobox\", \"expandoBox\"],\n [\"expando\", \"expandoBox\"],\n [\"blueprintpreview\", \"blueprintPreview\"],\n [\"blueprint\", \"blueprintPreview\"],\n [\"pusherbeam\", \"pusherBeam\"],\n [\"beam\", \"pusherBeam\"],\n [\"cargohatch\", \"cargoHatch\"],\n [\"cargoejector\", \"cargoEjector\"],\n [\"ejector\", \"cargoEjector\"],\n [\"navigationunit\", \"navigationUnit\"],\n [\"nav\", \"navigationUnit\"],\n [\"navunit\", \"navigationUnit\"],\n [\"commsstation\", \"commsStation\"],\n [\"fluidtank\", \"fluidTank\"],\n [\"shieldgenerator\", \"shieldGenerator\"],\n [\"generator\", \"shieldGenerator\"],\n [\"shieldprojector\", \"shieldProjector\"],\n [\"shipcontrol\", \"shipControl\"],\n [\"spawnpoint\", \"spawnPoint\"],\n [\"shipsize\", \"shipSize\"],\n [\"mapmarker\", \"mapMarker\"],\n [\"marker\", \"mapMarker\"],\n [\"dockingspring\", \"dockingSpring\"],\n [\"hugethruster\", \"hugeThruster\"]\n]);\n\nconst MACHINE_COMPONENTS = [\n \"loader\",\n \"pusher\",\n \"launcher\",\n \"navigationUnit\",\n \"fabricator\",\n \"cargoEjector\",\n \"cannon\",\n \"thruster\",\n \"cargoHatch\",\n \"commsStation\",\n \"fluidTank\",\n \"shieldGenerator\",\n \"shieldProjector\",\n \"helm\",\n \"sign\",\n \"spawnPoint\",\n \"door\",\n \"expandoBox\"\n];\n\nconst ENTITY_FEATURES = [\n \"health\",\n \"position\",\n \"outline\",\n \"inventory\",\n \"item\",\n \"filter\",\n \"filterMode\",\n \"filterSlots\",\n \"filterInventory\",\n \"beam\",\n \"occupied\",\n \"loaderConfig\",\n \"pusherConfig\",\n \"launcherConfig\",\n \"navigationConfig\",\n \"fabricatorQueue\",\n \"progress\"\n];\n\nfunction normalizeEntityKey(value) {\n return String(value ?? \"\").toLowerCase().replace(/[^a-z0-9]/g, \"\");\n}\n\nfunction clonePlain(value) {\n if (value == null) return value;\n if (typeof structuredClone === \"function\") return structuredClone(value);\n return JSON.parse(JSON.stringify(value));\n}\n\nfunction deepFreeze(value) {\n if (!value || typeof value !== \"object\" || Object.isFrozen(value)) return value;\n Object.freeze(value);\n for (const item of Object.values(value)) deepFreeze(item);\n return value;\n}\n\nfunction componentFor(contents, key) {\n if (!contents) return null;\n const component = ENTITY_COMPONENT_ALIASES.get(key) || key;\n return contents[component] ?? null;\n}\n\nfunction entityMachineType(contents) {\n if (!contents) return null;\n return MACHINE_COMPONENTS.find((component) => contents[component]) || null;\n}\n\nfunction firstFeatureSource(contents, names) {\n if (!contents) return null;\n for (const name of names) {\n const source = contents[name];\n if (source != null) return source;\n }\n return null;\n}\n\nfunction sourceWithProperty(contents, names, property) {\n if (!contents) return null;\n for (const name of names) {\n const source = contents[name];\n if (source && source[property] != null) return source;\n }\n return null;\n}\n\nfunction entityPublicType(summary, contents) {\n const machine = entityMachineType(contents);\n if (machine) return machine;\n if (contents?.player || summary?.category === \"player\") return \"player\";\n if (contents?.shipControl || summary?.category === \"ship_control\") return \"ship\";\n if (contents?.bot) return \"bot\";\n if (summary?.category === \"loose_item\" || contents?.itemCrate || contents?.itemHolder) return \"looseItem\";\n if (contents?.mapMarker) return \"mapMarker\";\n if (contents?.dockingSpring) return \"dockingSpring\";\n if (contents?.hugeThruster) return \"hugeThruster\";\n if (contents?.blueprintPreview) return \"blueprintPreview\";\n return \"unknown\";\n}\n\nfunction entityFeatures(summary, contents) {\n return ENTITY_FEATURES.filter((feature) => entityFeature(summary, contents, feature) != null);\n}\n\nfunction entityFeature(summary, contents, feature) {\n const key = normalizeEntityKey(feature);\n if (!key) return null;\n if (key === \"position\" || key === \"transform\") return summary?.position || summary?.transform || null;\n if (!contents) return null;\n const component = componentFor(contents, key);\n if (component != null) return component;\n if (key === \"machine\") return firstFeatureSource(contents, MACHINE_COMPONENTS);\n if (key === \"inventory\") return firstFeatureSource(contents, [\"itemHolder\", \"expandoBox\"]);\n if (key === \"item\") return firstFeatureSource(contents, [\"itemCrate\", \"itemHolder\", \"expandoBox\"]);\n if (key === \"filter\") return firstFeatureSource(contents, [\"loader\", \"pusher\", \"cargoHatch\"]);\n if (key === \"filtermode\") {\n const filterModeSource = sourceWithProperty(contents, [\"loader\", \"pusher\", \"cargoHatch\"], \"filterMode\");\n if (filterModeSource) return filterModeSource.filterMode;\n return sourceWithProperty(contents, [\"pusher\"], \"filteredMode\")?.filteredMode ?? null;\n }\n if (key === \"filterslots\") return sourceWithProperty(contents, [\"loader\", \"pusher\", \"cargoHatch\"], \"filterSlots\")?.filterSlots ?? null;\n if (key === \"filterinventory\") return contents.pusher?.filterInventory ?? null;\n if (key === \"beam\") return contents.pusherBeam ?? null;\n if (key === \"outline\") return contents.hoverOutline ?? null;\n if (key === \"occupied\") return sourceWithProperty(contents, [\"helm\", \"commsStation\"], \"occupied\")?.occupied ?? null;\n if (key === \"health\") return contents.health ?? null;\n if (key === \"loaderconfig\") return contents.loader ?? null;\n if (key === \"pusherconfig\") return contents.pusher ?? null;\n if (key === \"launcherconfig\") return contents.launcher ?? null;\n if (key === \"navigationconfig\") return contents.navigationUnit ?? null;\n if (key === \"fabricatorqueue\") return contents.fabricator?.rows ?? null;\n if (key === \"progress\") return contents.fabricator?.progress ?? contents.cargoEjector?.progress ?? contents.loader?.progress ?? contents.cargoHatch?.openFraction ?? null;\n return null;\n}\n\nfunction entityDomainHandle(client, entity, scope, type, snapshot = null) {\n const key = normalizeEntityKey(type);\n const state = snapshot || new EntityHandle(client, entity, scope).snapshot();\n if (!state) return null;\n const constructors = new Map([\n [\"loader\", LoaderHandle],\n [\"pusher\", PusherHandle],\n [\"launcher\", LauncherHandle],\n [\"navigationunit\", NavigationUnitHandle],\n [\"nav\", NavigationUnitHandle],\n [\"navunit\", NavigationUnitHandle],\n [\"fabricator\", FabricatorHandle],\n [\"cargoejector\", CargoEjectorHandle],\n [\"ejector\", CargoEjectorHandle],\n [\"cannon\", CannonHandle],\n [\"thruster\", ThrusterHandle],\n [\"commsstation\", CommsStationHandle],\n [\"sign\", SignHandle],\n [\"shieldgenerator\", GeneratorHandle],\n [\"generator\", GeneratorHandle],\n [\"cargohatch\", CargoHatchHandle],\n [\"shieldprojector\", ShieldProjectorHandle],\n [\"fluidtank\", FluidTankHandle],\n [\"helm\", HelmHandle],\n [\"spawnpoint\", SpawnPointHandle],\n [\"door\", DoorHandle],\n [\"expandobox\", ExpandoBoxHandle],\n [\"expando\", ExpandoBoxHandle]\n ]);\n const Handle = constructors.get(key);\n return Handle && state.is(key) ? new Handle(client, entity, scope) : null;\n}\n\nfunction worldStateFor(client, scope = \"ship\") {\n if (scope == null || scope === \"ship\" || scope === \"current\") return client.worlds.shipWorld();\n if (scope === \"overworld\") return client.worlds.overworld();\n return client.worlds.worlds.get(Number(scope)) || null;\n}\n\nexport function summariesFor(client, scope = \"ship\") {\n return worldStateFor(client, scope)?.entities() || [];\n}\n\nfunction summaryForEntity(client, scope, entity) {\n return worldStateFor(client, scope)?.entity(entity) || null;\n}\n\nfunction entityIdOf(value) {\n if (value && typeof value === \"object\") return Number(value.entity ?? value.id);\n return Number(value);\n}\n\nfunction inventorySlotIndexOf(value, name = \"slot\") {\n if (value && typeof value === \"object\") {\n if (value.index != null) return normalizeInventorySlotIndex(value.index, name);\n if (value.entity != null || value.id != null) throw new TypeError(`${name} must be an inventory slot, slot snapshot, equipment slot, or index`);\n }\n if (typeof value === \"string\") return normalizeEquipmentSlot(value);\n return normalizeInventorySlotIndex(value, name);\n}\n\nfunction normalizeInventorySlotIndex(value, name = \"slot\") {\n const number = Number(value);\n if (!Number.isInteger(number) || number < 0) throw new RangeError(`${name} must be a non-negative inventory slot index`);\n return number;\n}\n\nexport function currentPlayerSummary(client, scope = \"current\") {\n const sid = Number(client?.sid);\n if (!Number.isFinite(sid)) return null;\n const players = worldStateFor(client, scope)?.model.players() || [];\n // `sid` is the websocket session id, not the ECS entity id used by the\n // player component. The local-player flag identifies the ECS entity.\n return players.find((player) => player.state?.q109) || null;\n}\n\nfunction currentPlayerRank(client) {\n const player = currentPlayerSummary(client);\n const subrank = client?.captainSubrank?.subrank ?? null;\n const shipRank = player?.shipRank ?? null;\n return {\n shipRank,\n subrank: shipRank === \"captain\" ? subrank : null,\n isCaptain: shipRank === \"captain\",\n patronTier: player?.patronTier ?? null\n };\n}\n\nfunction normalizeEquipArguments(equipmentSlot, options = {}, command = {}) {\n if (equipmentSlot && typeof equipmentSlot === \"object\") {\n return {equipmentSlot: null, split: Boolean(equipmentSlot.split), command: options || {}};\n }\n return {equipmentSlot, split: Boolean(options?.split), command};\n}\n\nfunction inferEquipmentSlotForInventorySource(domain, source) {\n const handle = source instanceof InventorySlotHandle ? source : domain.slot(source);\n if (!handle.exists() || handle.itemId == null) throw new RangeError(`inventory slot ${handle.index} is empty; pass equipmentSlot explicitly`);\n const equipmentSlot = itemEquipmentSlotFromId(handle.itemId);\n if (!equipmentSlot) {\n const label = handle.itemName ? ` (${handle.itemName})` : \"\";\n throw new RangeError(`item ${handle.itemId}${label} does not map to an equipment slot; pass equipmentSlot explicitly`);\n }\n return equipmentSlot;\n}\n\nfunction inventoryHandlesForArea(domain, area = \"all\") {\n switch (area) {\n case \"all\":\n return domain.allSlots();\n case \"hotbar\":\n return domain.hotbarSlots();\n case \"equipment\":\n return Object.values(domain.equipmentSlots());\n default:\n throw new RangeError(`Unknown inventory area: ${area}`);\n }\n}\n\nexport const WrenchMode = Object.freeze({\n DropAllItems: \"drop-all-items\",\n GrabPrimaryItems: \"grab-primary-items\",\n GrabAllItems: \"grab-all-items\"\n});\n\nconst WRENCH_MODES = new Map([\n [0, WrenchMode.DropAllItems],\n [1, WrenchMode.GrabPrimaryItems],\n [2, WrenchMode.GrabAllItems]\n]);\n\nconst WRENCH_MODE_VALUES = new Map([...WRENCH_MODES].map(([value, name]) => [name, value]));\n\nexport const TurretMode = Object.freeze({\n ContinuousFire: \"continuous-fire\",\n VolleyFire: \"volley-fire\"\n});\n\nconst TURRET_MODES = new Map([\n [0, TurretMode.ContinuousFire],\n [1, TurretMode.VolleyFire]\n]);\n\nconst TURRET_MODE_VALUES = new Map([...TURRET_MODES].map(([value, name]) => [name, value]));\n\nfunction wrenchModeName(value) {\n return WRENCH_MODES.get(value) ?? null;\n}\n\nfunction turretModeName(value) {\n return TURRET_MODES.get(value) ?? null;\n}\n\nexport function normalizeWrenchMode(value) {\n const normalized = WRENCH_MODE_VALUES.get(value);\n if (normalized == null || !WRENCH_MODES.has(normalized)) {\n throw new RangeError(`Unknown wrench mode: ${value}`);\n }\n return normalized;\n}\n\nexport function normalizeTurretMode(value) {\n const normalized = TURRET_MODE_VALUES.get(value);\n if (normalized == null || !TURRET_MODES.has(normalized)) {\n throw new RangeError(`Unknown turret mode: ${value}`);\n }\n return normalized;\n}\n\nexport function normalizePositiveFinite(value, name) {\n const number = Number(value);\n if (!Number.isFinite(number) || number <= 0) throw new RangeError(`${name} must be a positive finite number`);\n return number;\n}\n\nexport function normalizePositiveInteger(value, name) {\n const number = Number(value);\n if (!Number.isInteger(number) || number <= 0) throw new RangeError(`${name} must be a positive integer`);\n return number;\n}\n\nexport function normalizeDegrees(value) {\n const number = Number(value);\n if (!Number.isFinite(number)) throw new RangeError(`angle must be a finite number`);\n return ((Math.round(number) % 360) + 360) % 360;\n}\n\nexport function normalizeLauncherPower(value) {\n const number = Number(value);\n if (!Number.isInteger(number) || number < 0 || number > 30) {\n throw new RangeError(`launcher power must be an integer between 0 and 30`);\n }\n return number;\n}\n\nexport function normalizeScannerResultPacket(packet) {\n const manifest = packet?.manifest && typeof packet.manifest === \"object\" ? packet.manifest : {};\n const hasMaterials = manifest.materials && typeof manifest.materials === \"object\";\n const hasManifest = (\n (manifest.blocks && typeof manifest.blocks === \"object\") ||\n (manifest.objects && typeof manifest.objects === \"object\") ||\n (manifest.inventories && typeof manifest.inventories === \"object\")\n );\n return {\n kind: hasMaterials ? \"bom\" : hasManifest ? \"manifest\" : \"unknown\",\n sid: packet?.sid ?? null,\n shipHex: typeof manifest.ship_hex === \"string\" ? manifest.ship_hex : null,\n shipName: typeof manifest.ship_name === \"string\" ? manifest.ship_name : null,\n blocks: copyCountMap(manifest.blocks),\n objects: copyCountMap(manifest.objects),\n inventories: copyCountMap(manifest.inventories),\n materials: copyCountMap(manifest.materials)\n };\n}\n\nfunction copyCountMap(value) {\n if (!value || typeof value !== \"object\") return null;\n return Object.fromEntries(\n Object.entries(value)\n .filter(([, count]) => typeof count === \"number\")\n .map(([itemId, count]) => [String(itemId), count])\n );\n}\n\nexport function emptyMachineSummary() {\n return {\n itemHolders: [],\n health: [],\n fabricators: [],\n cargoEjectors: [],\n cannons: [],\n thrusters: [],\n pushers: [],\n pusherBeams: [],\n launchers: [],\n loaders: [],\n cargoHatches: [],\n navigationUnits: [],\n commsStations: [],\n fluidTanks: [],\n shieldGenerators: [],\n shieldProjectors: [],\n helms: [],\n signs: [],\n spawnPoints: [],\n doors: [],\n expandoBoxes: []\n };\n}\n\nexport function normalizeShipReadOptions(options) {\n if (options == null || options === true) options = {};\n return {\n includeWorld: options.includeWorld !== false,\n includeTiles: Boolean(options.includeTiles),\n includeModel: Boolean(options.includeModel),\n includeBlocks: Boolean(options.includeBlocks),\n sort: options.sort ?? null\n };\n}\n\nexport function shipReadSummary(entity, options, worlds, currentEntity = undefined) {\n const control = entity.contents.shipControl;\n const worldState = options.includeWorld && control.shipWorldId != null\n ? worlds.worlds.get(Number(control.shipWorldId)) || null\n : null;\n const world = worldState ? worldState.snapshot({\n includeTiles: options.includeTiles,\n includeModel: options.includeModel,\n includeBlocks: options.includeBlocks\n }) : null;\n const current = currentEntity === undefined ? worlds.currentShipEntity() : currentEntity;\n const distance = distanceBetween(entity.transform, current?.transform);\n return {\n entity: entity.entity,\n name: control.name,\n hexCode: control.hexCode,\n color: control.color,\n colorCss: control.colorCss,\n position: entity.transform ? {x: entity.transform.x, y: entity.transform.y, rot: entity.transform.rot} : null,\n distance,\n footprint: entity.footprint,\n label: entity.label,\n kind: entity.kind,\n thrust: {\n x: control.thrustX,\n y: control.thrustY\n },\n shield: control.shield,\n warp: control.warp,\n worldId: control.shipWorldId,\n hasWorldData: Boolean(world),\n world,\n control,\n entitySummary: entity\n };\n}\n\nfunction distanceBetween(a, b) {\n if (!a || !b || typeof a.x !== \"number\" || typeof a.y !== \"number\" || typeof b.x !== \"number\" || typeof b.y !== \"number\") return null;\n return Math.hypot(a.x - b.x, a.y - b.y);\n}\n", "export {Connection} from \"./network/connection.js\";\nexport {DredlessClient, WrenchMode, TurretMode} from \"./client/index.js\";\nexport {WorldStore, WorldState} from \"./state/world/index.js\";\nexport {FabricatorType, ModelState, decodeModelData} from \"./state/model/index.js\";\nexport {generateGeneratorMaze, solveGeneratorMazeSeed, maybeSolveGeneratorMazeSeed} from \"./state/generator-maze.js\";\nexport {buildBlueprintPlacementMessage} from \"./protocol/outbound/blueprint.js\";\nexport {decodeMsgpack, encodeMsgpack} from \"./protocol/codec/msgpack.js\";\nexport {buildCommsMessage, flattenRichText, normalizeCommsEvent} from \"./protocol/outbound/comms.js\";\nexport {buildSignedCommandPacket} from \"./protocol/outbound/commands.js\";\nexport {\n buildEquipItemCommand,\n buildInventoryDragCommand,\n buildUnequipItemCommand,\n equipmentSlotName,\n normalizeEquipmentSlot,\n normalizeInventoryEvent,\n EquipmentSlot\n} from \"./protocol/outbound/inventory.js\";\nexport {\n buildBanPlayerMessage,\n buildDemoteSelfMessage,\n buildInviteResetMessage,\n buildKickPlayerMessage,\n buildPlayerListMessage,\n buildShipManagementMessage,\n buildSetPlayerRankMessage,\n buildShipPrivacyMessage,\n buildStarterRecoveryMessage,\n normalizeCaptainSubrank,\n normalizeShipPlayerList,\n normalizePlayerRank,\n normalizePrivacy,\n normalizeShipConfig\n} from \"./protocol/outbound/ship-management.js\";\nexport {SignDisplayMode, buildSignTextMessage, normalizeSignDisplayMode, signDisplayModeName} from \"./protocol/outbound/sign.js\";\nexport {\n buildCargoEjectorClipboardDirectionData,\n buildCargoEjectorCopyConfigData,\n buildCargoEjectorDirectionData,\n buildCargoEjectorPasteConfigData,\n buildCargoHatchCopyConfigData,\n buildCargoHatchFilterConfigData,\n buildCargoHatchFilterItemsData,\n buildCargoHatchFullConfigData,\n buildClipboardConfigData,\n buildClipboardFixedAngleData,\n buildExpandoClipboardAngleData,\n buildGeneratorClipboardDirectionData,\n buildGeneratorMazePuzzleData,\n buildLoaderClipboardConfigData,\n buildLoaderConfigData,\n buildLoaderCopyConfigData,\n buildLoaderFilterConfigData,\n buildLoaderFilterItemsData,\n buildLoaderFullConfigData,\n buildNavigationUnitClipboardConfigData,\n buildNavigationUnitConfigData,\n buildNavigationUnitPasteConfigData,\n buildPusherConfigData,\n buildPusherFilterItemsData,\n PusherMode,\n LoaderPosition,\n LoaderFilterMode,\n FixedAngleDirection,\n LoaderPriority\n} from \"./protocol/outbound/ui-config.js\";\nexport {decryptPayload} from \"./crypto/chacha.js\";\nexport {decompressLz4Frame} from \"./compression/lz4.js\";\nexport {fetchNoticeVersion, fetchGameVersion, fetchServerStatus, fetchServerStatuses, fetchServers} from \"./network/servers.js\";\nexport {fetchShips as fetchShipsWithSession, fetchShipList as fetchShipListWithSession} from \"./network/ships.js\";\nexport {\n BrowserSession,\n browserSession,\n createBrowserSession,\n createSession,\n createAnonSession,\n createAnonToken,\n fetchAnonKey,\n setBrowserSession,\n fetchAccountStatus,\n fetchShips,\n fetchShipListForBrowser as fetchShipList,\n joinShip,\n startShip,\n startNewShip,\n joinInvite\n} from \"./network/browser-session.js\";\n\nimport {Connection} from \"./network/connection.js\";\nimport {DredlessClient} from \"./client/index.js\";\nimport {fetchGameVersion, fetchNoticeVersion, fetchServerStatus, fetchServerStatuses, fetchServers} from \"./network/servers.js\";\nimport {\n BrowserSession,\n browserSession,\n createAnonSession,\n createAnonToken,\n createBrowserSession,\n createSession,\n fetchAccountStatus,\n fetchAnonKey,\n fetchShipListForBrowser,\n fetchShips,\n joinInvite,\n joinShip,\n setBrowserSession,\n startNewShip,\n startShip\n} from \"./network/browser-session.js\";\n\nexport const DredlessBrowser = {\n BrowserSession,\n Connection,\n DredlessClient,\n browserSession,\n createBrowserSession,\n createSession,\n createAnonSession,\n createAnonToken,\n fetchAnonKey,\n setBrowserSession,\n fetchAccountStatus,\n fetchNoticeVersion,\n fetchGameVersion,\n fetchServerStatus,\n fetchServerStatuses,\n fetchServers,\n fetchShips,\n fetchShipList: fetchShipListForBrowser,\n joinShip,\n startShip,\n startNewShip,\n joinInvite\n};\n\nexport default DredlessBrowser;\n", "import {DEFAULT_BASE_URL} from \"../constants.js\";\nimport {asNumber} from \"../runtime.js\";\nimport {HttpClient} from \"./http.js\";\n\nexport function createShipSpec(name = \"\", color = \"\") {\n return {type: \"new\", name: String(name ?? \"\"), color: String(color ?? \"\")};\n}\n\nexport function createInviteShipSpec(code) {\n return {type: \"invite\", code: String(code ?? \"\")};\n}\n\nexport function shipRef(ship) {\n if (ship == null) return null;\n if (typeof ship !== \"object\") return {type: \"join_or_load\", id: ship};\n if (ship.type) return ship;\n const id = ship.id ?? ship.hexCode ?? ship.hex_code;\n if (id != null) return {type: \"join_or_load\", id};\n return ship;\n}\n\nexport const normalizeShipSpec = shipRef;\n\nexport function normalizeShip(raw, key = null) {\n if (!raw || typeof raw !== \"object\") return null;\n const id = Number(raw.id ?? key);\n return {\n id: Number.isFinite(id) ? id : null,\n hexCode: raw.hex_code || raw.hexCode || raw.id || key || null,\n name: raw.team_name || \"Unknown Ship\",\n iconUrl: raw.icon_path || null,\n playerCount: asNumber(raw.player_count, 0),\n owned: Boolean(raw.owned),\n saved: Boolean(raw.saved),\n color: raw.color || \"\",\n time: asNumber(raw.time, null)\n };\n}\n\nfunction extractShips(data) {\n if (Array.isArray(data)) return data.map((ship, index) => [ship?.id || String(index), ship]);\n if (Array.isArray(data?.ships)) return data.ships.map((ship, index) => [ship?.id || String(index), ship]);\n if (data?.ships && typeof data.ships === \"object\") return Object.entries(data.ships);\n return [];\n}\n\nexport async function fetchShips(session, server, baseUrl = session?.baseUrl || DEFAULT_BASE_URL) {\n const data = await fetchShipList(session, server, baseUrl);\n return Array.isArray(data) ? data : Array.isArray(data?.ships) ? data.ships : [];\n}\n\nexport async function fetchShipList(session, server, baseUrl = session?.baseUrl || DEFAULT_BASE_URL) {\n if (!session) throw new Error(\"fetchShipList requires a session\");\n const serverId = Number(server && typeof server === \"object\" ? server.index ?? server.id : server ?? session.geoServer ?? 0);\n const data = await new HttpClient({baseUrl, session}).json(`shiplist?server=${serverId}`, {\n headers: {accept: \"application/json\"}\n });\n const ships = normalizeShipList(data);\n if (Array.isArray(data)) return {ships};\n if (data && typeof data === \"object\") {\n return {\n playerCount: asNumber(data.player_count, 0),\n maxPlayerCount: asNumber(data.max_player_count, 0),\n isMuted: Boolean(data.is_muted),\n ships\n };\n }\n return {ships};\n}\n\nfunction normalizeShipList(data) {\n return extractShips(data).map(([key, raw]) => normalizeShip(raw, key)).filter(Boolean);\n}\n", "import {DEFAULT_BASE_URL, DEFAULT_NOTICE_VERSION} from \"../constants.js\";\nimport {normalizeBaseUrl} from \"../runtime.js\";\nimport {browserCookies, cookieName, readBrowserCookie} from \"./cookies.js\";\nimport {fetchGameVersion, fetchNoticeVersion, resolveServer, serverId} from \"./servers.js\";\nimport {\n createInviteShipSpec,\n createShipSpec,\n fetchShipList,\n fetchShips as fetchSessionShips,\n shipRef\n} from \"./ships.js\";\nimport {Connection} from \"./connection.js\";\nimport {DredlessClient} from \"../client/index.js\";\nimport {Session} from \"./session.js\";\n\nexport class BrowserSession extends Session {\n constructor(baseUrl = DEFAULT_BASE_URL) {\n super(null, null, baseUrl);\n this.baseUrl = normalizeBaseUrl(baseUrl);\n this.ambientAuth = true;\n }\n\n get gameSession() {\n return browserCookies().get(cookieName(this.baseUrl, \"game_session\")) || \"\";\n }\n\n get gameToken() {\n return browserCookies().get(cookieName(this.baseUrl, \"game_token\")) || \"\";\n }\n\n get anonKey() {\n return this._anonKey || browserCookies().get(cookieName(this.baseUrl, \"anon_key\")) || \"\";\n }\n\n async readAnonKey() {\n const key = await readBrowserCookie(cookieName(this.baseUrl, \"anon_key\"));\n if (key) this._anonKey = key;\n return key || \"\";\n }\n\n async fetchAnonKey(noticeVersion = null) {\n this.noticeVersion = await browserNoticeVersion(noticeVersion, this.baseUrl);\n await createAnonLogin(this);\n const key = await this.readAnonKey();\n if (!key) throw new Error(\"Unable to read anon_key after anon login. Browser support is tested in page and content-script contexts; background, popup, worker, and other non-page contexts are unlikely to expose drednot.io cookies.\");\n return key;\n }\n\n get noticeVersion() {\n return this._noticeVersion ?? browserCookies().get(cookieName(this.baseUrl, \"notice_version\")) ?? null;\n }\n\n set noticeVersion(value) {\n this._noticeVersion = value == null ? null : Number(value);\n if (typeof document === \"undefined\" || value == null) return;\n document.cookie = `${cookieName(this.baseUrl, \"notice_version\")}=${encodeURIComponent(String(value))}; path=/; SameSite=Lax`;\n }\n\n mergeSetCookies() {\n // Browsers own the cookie jar. Set-Cookie is intentionally not readable.\n }\n\n async joinShipConnection(server, ship = null) {\n return this.#joinBrowserConnection(server, ship, true);\n }\n\n async startShipConnection(server, ship = null) {\n return this.#joinBrowserConnection(server, ship, false);\n }\n\n async startNewShipConnection(server, name = \"\", color = \"\") {\n return this.#joinBrowserConnection(server, createShipSpec(name, color), false);\n }\n\n async joinInviteConnection(server, code) {\n return this.#joinBrowserConnection(server, createInviteShipSpec(code), false);\n }\n\n async joinShip(server, ship = null) {\n return readyBrowserClient(await this.joinShipConnection(server, ship));\n }\n\n async startShip(server, ship = null) {\n return readyBrowserClient(await this.startShipConnection(server, ship));\n }\n\n async startNewShip(server, name = \"\", color = \"\") {\n return readyBrowserClient(await this.startNewShipConnection(server, name, color));\n }\n\n async joinInvite(server, code) {\n return readyBrowserClient(await this.joinInviteConnection(server, code));\n }\n\n async #joinBrowserConnection(server, ship, neverLoad) {\n if (server == null) throw new Error(\"A server id or server object is required\");\n const resolvedServer = await resolveServer(server, this.baseUrl);\n if (!resolvedServer) throw new Error(`Unable to resolve server ${serverId(server)}`);\n if (!this.gameVersion) this.gameVersion = await fetchGameVersion(this.baseUrl);\n if (this.noticeVersion == null) this.noticeVersion = DEFAULT_NOTICE_VERSION;\n\n const joinShip = ship == null ? createShipSpec(\"\", \"\") : shipRef(ship);\n const response = await this.request(\"join\", {\n method: \"POST\",\n mode: \"cors\",\n credentials: \"include\",\n referrer: `${this.baseUrl}/`,\n body: {\n join_info: {\n game_version: this.gameVersion,\n hide_badges: false,\n never_load: Boolean(neverLoad),\n server_id: resolvedServer.index,\n ship: joinShip\n }\n },\n headers: browserJoinHeaders(this.baseUrl)\n });\n if (!response.ok) throw new Error(`Join request failed: ${await response.text()}`);\n const join = await response.json();\n if (join.reject != null) {\n const error = new Error(joinRejectMessage(join.reject, {\n neverLoad,\n ship: joinShip,\n server: resolvedServer\n }));\n error.code = join.reject;\n error.join = join;\n throw error;\n }\n if (join.okay !== true) throw new Error(\"Bad join result\");\n\n const token = join.game_token ?? join.gameToken ?? this.gameToken;\n return new Connection(this, token || \"\", join.net_port, Number.isInteger(join.server_id) ? join.server_id : resolvedServer.index, resolvedServer);\n }\n\n toJSON() {\n return {\n ...super.toJSON(),\n ambientAuth: true,\n cookies: Object.fromEntries(browserCookies())\n };\n }\n}\n\nlet defaultBrowserSession = null;\n\nexport function browserSession(baseUrl = DEFAULT_BASE_URL) {\n const normalized = normalizeBaseUrl(baseUrl);\n if (!defaultBrowserSession || defaultBrowserSession.baseUrl !== normalized) defaultBrowserSession = new BrowserSession(normalized);\n return defaultBrowserSession;\n}\n\nexport function setBrowserSession(session = null) {\n defaultBrowserSession = session;\n return defaultBrowserSession;\n}\n\nexport const createBrowserSession = browserSession;\n\nexport async function createSession(noticeVersion = null, baseUrl = DEFAULT_BASE_URL) {\n const resolvedBaseUrl = normalizeBaseUrl(arguments.length >= 2 ? arguments[1] : baseUrl);\n const session = browserSession(resolvedBaseUrl);\n session.noticeVersion = await browserNoticeVersion(noticeVersion, resolvedBaseUrl);\n await session.fetchAccountStatus();\n return session;\n}\n\nexport async function createAnonSession(anonKey = null, noticeVersion = null, baseUrl = DEFAULT_BASE_URL) {\n if (typeof noticeVersion === \"string\" && noticeVersion.includes(\"://\") && (baseUrl == null || baseUrl === DEFAULT_BASE_URL)) {\n baseUrl = noticeVersion;\n noticeVersion = null;\n }\n const resolvedBaseUrl = normalizeBaseUrl(arguments.length >= 3 ? arguments[2] : baseUrl);\n const session = browserSession(resolvedBaseUrl);\n session.noticeVersion = await browserNoticeVersion(noticeVersion, resolvedBaseUrl);\n if (anonKey) {\n session._anonKey = String(anonKey);\n await setAmbientCookie(resolvedBaseUrl, \"anon_key\", anonKey);\n } else {\n await session.fetchAnonKey(session.noticeVersion);\n }\n await session.fetchAccountStatus();\n return session;\n}\n\nexport async function fetchAnonKey(noticeVersion = null, baseUrl = DEFAULT_BASE_URL) {\n const resolvedBaseUrl = normalizeBaseUrl(arguments.length >= 2 ? arguments[1] : baseUrl);\n return browserSession(resolvedBaseUrl).fetchAnonKey(noticeVersion);\n}\n\nexport const createAnonToken = fetchAnonKey;\n\nexport async function fetchAccountStatus(session = null) {\n return (session || browserSession()).fetchAccountStatus();\n}\n\nexport async function fetchShips(server, session = null) {\n return fetchSessionShips(session || browserSession(), server);\n}\n\nexport async function fetchShipListForBrowser(server, session = null) {\n return fetchShipList(session || browserSession(), server);\n}\n\nexport async function joinShip(server, ship = null, session = null) {\n return (session || browserSession()).joinShip(server, ship);\n}\n\nexport async function startShip(server, ship = null, session = null) {\n return (session || browserSession()).startShip(server, ship);\n}\n\nexport async function startNewShip(server, name = \"\", color = \"\", session = null) {\n return (session || browserSession()).startNewShip(server, name, color);\n}\n\nexport async function joinInvite(server, code, session = null) {\n return (session || browserSession()).joinInvite(server, code);\n}\n\nasync function readyBrowserClient(connection) {\n const client = new DredlessClient(connection);\n await client.whenReady();\n return client;\n}\n\nasync function createAnonLogin(session) {\n const response = await session.request(\"account/login/anon\", {\n method: \"POST\",\n mode: \"cors\",\n credentials: \"include\",\n referrer: `${session.baseUrl}/`,\n headers: browserAnonHeaders(session.baseUrl)\n });\n if (response.status === 503) throw new Error(\"Anon session creation is rate limited by the server\");\n if (!response.ok) throw new Error(`account/login/anon failed: ${response.status} ${response.statusText}`);\n session.mergeSetCookies(response, [\"anon_key\", \"game_session\"]);\n}\n\nasync function browserNoticeVersion(value, baseUrl = DEFAULT_BASE_URL) {\n if (value != null) return value;\n try {\n return await fetchNoticeVersion(baseUrl);\n } catch (_) {\n return DEFAULT_NOTICE_VERSION;\n }\n}\n\nasync function setAmbientCookie(baseUrl, name, value) {\n const key = cookieName(baseUrl, name);\n if (typeof globalThis.cookieStore !== \"undefined\" && typeof globalThis.cookieStore.set === \"function\") {\n try {\n await globalThis.cookieStore.set(key, String(value));\n return;\n } catch (_) {\n // Fall through to document.cookie.\n }\n }\n if (typeof document === \"undefined\") return;\n document.cookie = `${key}=${encodeURIComponent(String(value))}; path=/; SameSite=Lax`;\n}\n\nfunction browserAnonHeaders(baseUrl) {\n const origin = normalizeBaseUrl(baseUrl);\n return {\n accept: \"*/*\",\n origin,\n referer: `${origin}/`\n };\n}\n\nfunction browserJoinHeaders(baseUrl) {\n const origin = normalizeBaseUrl(baseUrl);\n return {\n accept: \"*/*\",\n \"content-type\": \"application/json\",\n origin,\n referer: `${origin}/`\n };\n}\n\nfunction joinRejectMessage(code, {neverLoad, ship, server} = {}) {\n if (code === 4007 && neverLoad) {\n const name = ship?.name ? ` \"${ship.name}\"` : \"\";\n const id = ship?.id != null ? ` (${ship.id})` : \"\";\n const serverText = server?.description ? ` on ${server.description}` : \"\";\n return `join rejected: 4007. ${name}${id}${serverText} could not be joined with never_load=true. Use startShip(server, ship) instead of joinShip(server, ship) when loading or starting a saved ship.`;\n }\n return `join rejected: ${code}`;\n}\n", "import {DEFAULT_BASE_URL, DEFAULT_NOTICE_VERSION, JOIN_USER_AGENT} from \"../constants.js\";\nimport {asNumber, isNode, normalizeBaseUrl} from \"../runtime.js\";\nimport {cookieName, cookiePrefix, readSetCookies, setCookieValues} from \"./cookies.js\";\nimport {HttpClient} from \"./http.js\";\nimport {fetchGameVersion, resolveServer, serverId} from \"./servers.js\";\nimport {createInviteShipSpec, createShipSpec, fetchShipList, fetchShips, shipRef} from \"./ships.js\";\nimport {Connection} from \"./connection.js\";\nimport {DredlessClient} from \"../client/index.js\";\n\nexport class Session {\n constructor(gameSession = null, gameVersion = null, baseUrl = DEFAULT_BASE_URL) {\n this.baseUrl = baseUrl;\n this.cookies = setCookieValues(this.baseUrl, {});\n this.gameVersion = gameVersion || null;\n this._noticeVersion = null;\n this.account = null;\n this.geoServer = null;\n this.upgraded = false;\n this.isRegistered = false;\n this.showAds = false;\n this.forceTutorial = false;\n this.ban = null;\n if (gameSession) this.cookies.set(cookieName(this.baseUrl, \"game_session\"), String(gameSession));\n }\n\n get gameSession() {\n return this.cookies.get(cookieName(this.baseUrl, \"game_session\")) || \"\";\n }\n\n get gameToken() {\n return this.cookies.get(cookieName(this.baseUrl, \"game_token\")) || \"\";\n }\n\n get noticeVersion() {\n return this._noticeVersion ?? this.cookies.get(cookieName(this.baseUrl, \"notice_version\")) ?? null;\n }\n\n set noticeVersion(value) {\n this._noticeVersion = value == null ? null : Number(value);\n const key = cookieName(this.baseUrl, \"notice_version\");\n if (value == null) this.cookies.delete(key);\n else this.cookies.set(key, String(value));\n }\n\n request(path, init = {}) {\n return new HttpClient({baseUrl: this.baseUrl, session: this}).request(path, init);\n }\n\n async fetchAccountStatus() {\n const response = await this.request(\"account/status\", {\n method: \"GET\",\n mode: \"cors\",\n credentials: \"include\",\n referrer: `${this.baseUrl}/`,\n headers: statusHeaders(this.baseUrl)\n });\n if (!response.ok) throw new Error(`account/status failed: ${response.status} ${response.statusText}`);\n this.mergeSetCookies(response);\n const raw = await response.json();\n this.#readStatus(raw);\n return raw;\n }\n\n async fetchShips(server) {\n return fetchShips(this, server);\n }\n\n async fetchShipList(server) {\n return fetchShipList(this, server);\n }\n\n async joinShipConnection(server, ship = null) {\n return this.#startShipConnection(server, ship, true);\n }\n\n async startShipConnection(server, ship = null) {\n return this.#startShipConnection(server, ship, false);\n }\n\n async startNewShipConnection(server, name = \"\", color = \"\") {\n return this.#startShipConnection(server, createShipSpec(name, color), false);\n }\n\n async joinInviteConnection(server, code) {\n return this.#startShipConnection(server, createInviteShipSpec(code), false);\n }\n\n async joinShip(server, ship = null) {\n return readyClient(await this.joinShipConnection(server, ship));\n }\n\n async startShip(server, ship = null) {\n return readyClient(await this.startShipConnection(server, ship));\n }\n\n async startNewShip(server, name = \"\", color = \"\") {\n return readyClient(await this.startNewShipConnection(server, name, color));\n }\n\n async joinInvite(server, code) {\n return readyClient(await this.joinInviteConnection(server, code));\n }\n\n toJSON() {\n return {\n baseUrl: this.baseUrl,\n gameSession: this.gameSession,\n gameToken: this.gameToken,\n gameVersion: this.gameVersion,\n noticeVersion: this.noticeVersion,\n cookies: Object.fromEntries(this.cookies),\n account: this.account,\n geoServer: this.geoServer,\n upgraded: this.upgraded,\n isRegistered: this.isRegistered,\n showAds: this.showAds,\n forceTutorial: this.forceTutorial,\n ban: this.ban,\n };\n }\n\n async #startShipConnection(server, ship, neverLoad) {\n if (server == null) throw new Error(\"A server id or server object is required\");\n const resolvedServer = await resolveServer(server, this.baseUrl);\n if (!resolvedServer) throw new Error(`Unable to resolve server ${serverId(server)}`);\n if (!this.gameVersion) this.gameVersion = await fetchGameVersion(this.baseUrl);\n if (this.noticeVersion == null) this.noticeVersion = DEFAULT_NOTICE_VERSION;\n\n const joinShip = ship == null ? createShipSpec(\"\", \"\") : shipRef(ship);\n const response = await this.request(\"join\", {\n method: \"POST\",\n mode: \"cors\",\n credentials: \"include\",\n referrer: `${this.baseUrl}/`,\n body: {\n join_info: {\n game_version: this.gameVersion,\n hide_badges: false,\n never_load: Boolean(neverLoad),\n server_id: resolvedServer.index,\n ship: joinShip\n }\n },\n headers: joinHeaders(this.baseUrl)\n });\n if (!response.ok) throw new Error(`Join request failed: ${await response.text()}`);\n this.mergeSetCookies(response, [\"game_session\", \"anon_key\", \"game_token\"]);\n const join = await response.json();\n if (join.reject != null) {\n const error = new Error(joinRejectMessage(join.reject, {\n neverLoad,\n ship: joinShip,\n server: resolvedServer\n }));\n error.code = join.reject;\n error.join = join;\n throw error;\n }\n if (join.okay !== true) throw new Error(\"Bad join result\");\n\n const token = this.gameToken;\n if (!token) throw new Error(\"Join did not return a game_token cookie\");\n return new Connection(this, token, join.net_port, Number.isInteger(join.server_id) ? join.server_id : resolvedServer.index, resolvedServer);\n }\n\n mergeSetCookies(response, names = [\"game_session\", \"anon_key\"]) {\n const prefix = cookiePrefix(this.baseUrl);\n for (const [name, value] of readSetCookies(response.headers, names, this.baseUrl)) {\n const cookieName = name.startsWith(prefix) ? name : `${prefix}${name}`;\n this.cookies.set(cookieName, value);\n }\n }\n\n #readStatus(raw) {\n const account = raw?.account && typeof raw.account === \"object\" ? raw.account : null;\n this.account = account ? {\n name: account.name || account.username || account.display_name || account.displayName || account.handle || \"Unknown\",\n color: asNumber(account.color, 0),\n game_rank: asNumber(account.game_rank, 0),\n user_badges: Array.isArray(account.user_badges) ? account.user_badges.filter((item) => typeof item === \"string\") : [],\n is_registered: Boolean(account.is_registered)\n } : null;\n this.geoServer = asNumber(raw?.geo_server ?? raw?.geoServer, null);\n this.upgraded = Boolean(raw?.upgraded ?? account?.upgraded);\n this.isRegistered = Boolean(account?.is_registered);\n this.showAds = Boolean(raw?.show_ads ?? raw?.showAds);\n this.forceTutorial = Boolean(raw?.force_tutorial ?? raw?.forceTutorial);\n this.ban = raw?.ban || null;\n }\n}\n\nexport class AnonSession extends Session {\n constructor(gameSession = null, anonKey = null, gameVersion = null, baseUrl = DEFAULT_BASE_URL) {\n super(gameSession, gameVersion, baseUrl);\n if (anonKey) this.cookies.set(cookieName(this.baseUrl, \"anon_key\"), String(anonKey));\n }\n\n get anonKey() {\n return this.cookies.get(cookieName(this.baseUrl, \"anon_key\")) || \"\";\n }\n\n toJSON() {\n return {\n ...super.toJSON(),\n anonKey: this.anonKey\n };\n }\n}\n\nexport async function createSession(noticeVersion = null, baseUrl = DEFAULT_BASE_URL) {\n const resolvedBaseUrl = normalizeBaseUrl(arguments.length >= 2 ? arguments[1] : baseUrl);\n const session = new Session(null, null, resolvedBaseUrl);\n session.noticeVersion = await internalNoticeVersion(noticeVersion, resolvedBaseUrl);\n await session.fetchAccountStatus();\n return session;\n}\n\nexport async function createAnonToken(noticeVersion = null, baseUrl = DEFAULT_BASE_URL) {\n const resolvedBaseUrl = normalizeBaseUrl(arguments.length >= 2 ? arguments[1] : baseUrl);\n const session = new AnonSession(null, null, null, resolvedBaseUrl);\n session.noticeVersion = await internalNoticeVersion(noticeVersion, resolvedBaseUrl);\n const response = await session.request(\"account/login/anon\", {\n method: \"POST\",\n mode: \"cors\",\n credentials: \"include\",\n referrer: `${session.baseUrl}/`,\n headers: anonHeaders(session.baseUrl)\n });\n if (response.status === 503) throw new Error(\"Anon token creation is rate limited by the server\");\n if (!response.ok) throw new Error(`account/login/anon failed: ${response.status} ${response.statusText}`);\n session.mergeSetCookies(response, [\"anon_key\", \"game_session\"]);\n if (!session.anonKey) throw new Error(\"Unable to obtain anon_key\");\n return session.anonKey;\n}\n\nexport async function createAnonSession(anonKey = null, noticeVersion = null, baseUrl = DEFAULT_BASE_URL) {\n if (typeof noticeVersion === \"string\" && noticeVersion.includes(\"://\") && (baseUrl == null || baseUrl === DEFAULT_BASE_URL)) {\n baseUrl = noticeVersion;\n noticeVersion = null;\n }\n const resolvedBaseUrl = normalizeBaseUrl(arguments.length >= 3 ? arguments[2] : baseUrl);\n const resolvedAnonKey = anonKey || await createAnonToken(noticeVersion, resolvedBaseUrl);\n const session = new AnonSession(null, resolvedAnonKey, null, resolvedBaseUrl);\n session.baseUrl = resolvedBaseUrl;\n session.noticeVersion = await internalNoticeVersion(noticeVersion, resolvedBaseUrl);\n await session.fetchAccountStatus();\n return session;\n}\n\nasync function readyClient(connection) {\n const client = new DredlessClient(connection);\n await client.whenReady();\n return client;\n}\n\nasync function internalNoticeVersion(value, baseUrl = DEFAULT_BASE_URL) {\n if (value != null) return value;\n try {\n const {fetchNoticeVersion} = await import(\"./servers.js\");\n return await fetchNoticeVersion(baseUrl);\n } catch (_) {\n return DEFAULT_NOTICE_VERSION;\n }\n}\n\nfunction statusHeaders(baseUrl) {\n const headers = {accept: \"*/*\"};\n if (isNode()) {\n Object.assign(headers, {\n \"user-agent\": JOIN_USER_AGENT,\n \"accept-language\": \"en-US,en;q=0.9\",\n referer: `${normalizeBaseUrl(baseUrl)}/`,\n dnt: \"1\",\n \"sec-gpc\": \"1\",\n \"sec-fetch-dest\": \"empty\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-site\": \"same-origin\"\n });\n }\n return headers;\n}\n\nfunction anonHeaders(baseUrl) {\n const origin = normalizeBaseUrl(baseUrl);\n return {\n accept: \"*/*\",\n origin,\n referer: `${origin}/`\n };\n}\n\nfunction joinHeaders(baseUrl) {\n const headers = {\n accept: \"*/*\",\n \"accept-language\": \"en-US,en;q=0.9\",\n \"content-type\": \"application/json\",\n origin: normalizeBaseUrl(baseUrl),\n referer: `${normalizeBaseUrl(baseUrl)}/`,\n pragma: \"no-cache\",\n \"cache-control\": \"no-cache\",\n dnt: \"1\",\n \"sec-gpc\": \"1\",\n \"sec-fetch-dest\": \"empty\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-site\": \"same-origin\",\n priority: \"u=0\"\n };\n if (isNode()) headers[\"user-agent\"] = JOIN_USER_AGENT;\n return headers;\n}\n\nfunction joinRejectMessage(code, {neverLoad, ship, server} = {}) {\n if (code === 4007 && neverLoad) {\n const name = ship?.name ? ` \"${ship.name}\"` : \"\";\n const id = ship?.id != null ? ` (${ship.id})` : \"\";\n const serverText = server?.description ? ` on ${server.description}` : \"\";\n return `join rejected: 4007. ${name}${id}${serverText} could not be joined with never_load=true. Use session.startShip(server, ship) instead of session.joinShip(server, ship) when loading or starting a saved ship.`;\n }\n return `join rejected: ${code}`;\n}\n", "import DredlessBrowser from \"./browser.js\";\n\nglobalThis.Dredless = DredlessBrowser;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["server", "WebSocket", "serverId", "server", "out", "isSemanticLoaderDelta", "rotl32", "rotr32", "isSemanticLoaderDelta", "ModelReader", "numericFields", "TWO_FIELD_SPEC", "LABEL_STATE_SPEC", "SIMPLE_LABEL_STATE_SPEC", "peekStreamInt", "nextValueLooksLikeTextBlob", "MODEL_TABLE_SPECS", "TABLE_78_NUMERIC_FIELDS", "WIRE_TAG_TABLES", "MASK_ONLY_TABLES", "ENTITY_FOOTPRINTS", "PLACED_ENTITY_TYPE_IDS", "FabricatorType", "FABRICATOR_TYPES", "HELM_TYPE_IDS", "COMMS_STATION_TYPE_ID", "COMMS_STATION_MAX_CHARGES", "CARGO_HATCH_TYPE_IDS", "THRUSTER_TYPE_IDS", "EXPANDO_BOX_TYPE_ID", "ITEM_LAUNCHER_TYPE_ID", "LOADER_TYPE_ID", "NAVIGATION_UNIT_TYPE_ID", "entityTypeIdFromRecord", "CANNON_AMMO_COLOR_ITEM_IDS", "CANNON_TYPE_IDS", "THRUSTER_FACING_NAMES", "DEFAULT_OVERWORLD_WARP_DURATION_SECONDS", "OVERWORLD_WARP_TICKS_PER_SECOND", "MARKER_TYPE_IDS", "TEAM_RANK_NAMES", "PLAYER_SHIP_RANKS", "PUSHER_MODE_NAMES", "SIGN_DISPLAY_MODE_NAMES", "SHIELD_GENERATOR_BOOST_STATE_NAMES", "NAVIGATION_DEFAULT_DESTINATION", "navigationDestinationName", "isNavigationDestination", "numberOrNull", "qKey", "blobKey", "cloneRecord", "firstRecord", "TABLE_78_FIELD_BITS", "table78DeltaRecord", "isSemanticLoaderDelta", "decodeText", "entityNameFromType", "markerTypeIdForTables", "itemSummary", "summarizeItemHolder", "boundedProgress", "summarizeFabricator", "summarizeCargoEjector", "summarizeCannon", "summarizeThruster", "summarizeHelm", "navigationDestinationFromRecord", "summarizeNavigationUnit", "summarizeCommsStation", "summarizeHealth", "summarizeBot", "isBoulderBotExclusion", "botClassFromState", "isCowardBossState", "isOrangeFoolBotState", "isZombieBossBotState", "isRedSentryBotState", "isBlueRusherBotState", "isRedSniperBotState", "isYellowHunterBotState", "isAquaShielderBotState", "isLazerEnthusiastBotState", "isYellowMineGuardBotState", "isShieldHelperBotState", "isShieldMasterBotState", "botIdentifierFromState", "summarizeShieldGenerator", "summarizeShipControl", "summarizeShipSize", "summarizeShipWorldMetadata", "summarizeItemCrate", "scaledSizeSummary", "summarizeExpandoBox", "summarizeHoverOutline", "summarizeMapMarker", "summarizeDockingSpring", "summarizeHugeThruster", "summarizeLoader", "summarizeCargoHatch", "summarizePusher", "summarizePusherBeam", "normalizeDegrees", "summarizeItemLauncher", "summarizeSign", "summarizeShieldProjector", "summarizeSpawnPoint", "summarizeDoor", "enumValueName", "colorToCss", "previewActionName", "bitOffsets", "summarizeBlueprintPreview", "summarizePlayerPreview", "summarizePlayer", "patronTierName", "mergeContents", "MAX_HOVER_OUTLINE_FOOTPRINT_CELLS", "entityFootprint", "entityLabel", "entityCategory", "BLOCK_KEY_OFFSET", "BLOCK_KEY_STRIDE", "blockKey", "EMPTY_TABLE", "MAX_RETAINED_REMOVALS", "MAX_RETAINED_ERRORS", "pushCapped", "defineLazyProperty", "q32Destination", "q36Destination", "q20Destination", "q32DestinationRow", "q36DestinationRow", "DEFAULT_HISTORY_LIMITS", "normalizeLimit", "pushBounded", "world", "_remove", "player", "requireFiniteNumber", "requireNonNegativeInteger", "normalizeDegrees", "serverId", "server", "normalizeDegrees", "WebSocket", "server", "serverId", "server", "joinShip", "cookieName", "server", "server", "joinShip", "joinRejectMessage", "fetchShips", "fetchShips"]
|
|
7
7
|
}
|