@rpgjs/client 5.0.0-alpha.25 → 5.0.0-alpha.27
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/Game/Map.d.ts +1 -0
- package/dist/Game/Map.js +6 -2
- package/dist/Game/Map.js.map +1 -1
- package/dist/Gui/Gui.js +4 -4
- package/dist/RpgClientEngine.js +7 -2
- package/dist/RpgClientEngine.js.map +1 -1
- package/dist/Sound.js +1 -1
- package/dist/Sound.js.map +1 -1
- package/dist/components/gui/box.ce.js +3 -3
- package/dist/components/scenes/draw-map.ce.js +5 -5
- package/dist/components/scenes/draw-map.ce.js.map +1 -1
- package/dist/core/inject.js +1 -1
- package/dist/core/setup.js +1 -1
- package/dist/index.js +1 -1
- package/dist/module.js +1 -1
- package/dist/node_modules/.pnpm/{@signe_di@2.6.0 → @signe_di@2.7.3}/node_modules/@signe/di/dist/index.js.map +1 -1
- package/dist/node_modules/.pnpm/{@signe_reactive@2.6.0 → @signe_reactive@2.7.3}/node_modules/@signe/reactive/dist/index.js.map +1 -1
- package/dist/node_modules/.pnpm/{@signe_room@2.6.0 → @signe_room@2.7.3}/node_modules/@signe/room/dist/index.js +60 -11
- package/dist/node_modules/.pnpm/@signe_room@2.7.3/node_modules/@signe/room/dist/index.js.map +1 -0
- package/dist/node_modules/.pnpm/{@signe_sync@2.6.0 → @signe_sync@2.7.3}/node_modules/@signe/sync/dist/chunk-7QVYU63E.js.map +1 -1
- package/dist/node_modules/.pnpm/{@signe_sync@2.6.0 → @signe_sync@2.7.3}/node_modules/@signe/sync/dist/client/index.js.map +1 -1
- package/dist/node_modules/.pnpm/{@signe_sync@2.6.0 → @signe_sync@2.7.3}/node_modules/@signe/sync/dist/index.js +1 -1
- package/dist/node_modules/.pnpm/{@signe_sync@2.6.0 → @signe_sync@2.7.3}/node_modules/@signe/sync/dist/index.js.map +1 -1
- package/dist/services/loadMap.js +1 -1
- package/dist/services/mmorpg.js +1 -1
- package/dist/services/standalone.d.ts +5 -2
- package/dist/services/standalone.js +7 -5
- package/dist/services/standalone.js.map +1 -1
- package/package.json +9 -9
- package/src/Game/Map.ts +10 -0
- package/src/RpgClientEngine.ts +6 -1
- package/src/components/scenes/draw-map.ce +3 -3
- package/src/services/standalone.ts +10 -4
- package/dist/node_modules/.pnpm/@signe_room@2.6.0/node_modules/@signe/room/dist/index.js.map +0 -1
- /package/dist/node_modules/.pnpm/{@signe_di@2.6.0 → @signe_di@2.7.3}/node_modules/@signe/di/dist/index.js +0 -0
- /package/dist/node_modules/.pnpm/{@signe_reactive@2.6.0 → @signe_reactive@2.7.3}/node_modules/@signe/reactive/dist/index.js +0 -0
- /package/dist/node_modules/.pnpm/{@signe_sync@2.6.0 → @signe_sync@2.7.3}/node_modules/@signe/sync/dist/chunk-7QVYU63E.js +0 -0
- /package/dist/node_modules/.pnpm/{@signe_sync@2.6.0 → @signe_sync@2.7.3}/node_modules/@signe/sync/dist/client/index.js +0 -0
package/dist/node_modules/.pnpm/@signe_room@2.6.0/node_modules/@signe/room/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../../../../../../node_modules/.pnpm/@signe+room@2.6.0/node_modules/@signe/room/dist/index.js"],"sourcesContent":["var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/decorators.ts\nfunction Action(name, bodyValidation) {\n return function(target, propertyKey) {\n if (!target.constructor._actionMetadata) {\n target.constructor._actionMetadata = /* @__PURE__ */ new Map();\n }\n target.constructor._actionMetadata.set(name, {\n key: propertyKey,\n bodyValidation\n });\n };\n}\n__name(Action, \"Action\");\nfunction Request2(options, bodyValidation) {\n return function(target, propertyKey) {\n if (!target.constructor._requestMetadata) {\n target.constructor._requestMetadata = /* @__PURE__ */ new Map();\n }\n const path = options.path.startsWith(\"/\") ? options.path : `/${options.path}`;\n const method = options.method || \"GET\";\n const routeKey = `${method}:${path}`;\n target.constructor._requestMetadata.set(routeKey, {\n key: propertyKey,\n path,\n method,\n bodyValidation\n });\n };\n}\n__name(Request2, \"Request\");\nfunction Room(options) {\n return function(target) {\n target.path = options.path;\n target.prototype.maxUsers = options.maxUsers;\n target.prototype.throttleStorage = options.throttleStorage;\n target.prototype.throttleSync = options.throttleSync;\n target.prototype.sessionExpiryTime = options.sessionExpiryTime ?? 5 * 60 * 1e3;\n if (options.guards) {\n target[\"_roomGuards\"] = options.guards;\n }\n };\n}\n__name(Room, \"Room\");\nfunction RoomGuard(guards) {\n return function(target) {\n target[\"_roomGuards\"] = guards;\n };\n}\n__name(RoomGuard, \"RoomGuard\");\nfunction Guard(guards) {\n return function(target, propertyKey, descriptor) {\n if (!target.constructor[\"_actionGuards\"]) {\n target.constructor[\"_actionGuards\"] = /* @__PURE__ */ new Map();\n }\n if (!Array.isArray(guards)) {\n guards = [\n guards\n ];\n }\n target.constructor[\"_actionGuards\"].set(propertyKey, guards);\n };\n}\n__name(Guard, \"Guard\");\n\n// ../sync/src/utils.ts\nfunction generateShortUUID() {\n const chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n let uuid = \"\";\n for (let i = 0; i < 8; i++) {\n const randomIndex = Math.floor(Math.random() * chars.length);\n uuid += chars[randomIndex];\n }\n return uuid;\n}\n__name(generateShortUUID, \"generateShortUUID\");\n\n// src/storage.ts\nvar Storage = class {\n static {\n __name(this, \"Storage\");\n }\n memory = /* @__PURE__ */ new Map();\n async put(key, value) {\n this.memory.set(key, value);\n }\n async get(key) {\n return this.memory.get(key);\n }\n async delete(key) {\n this.memory.delete(key);\n }\n async list() {\n return this.memory;\n }\n};\n\n// src/server.ts\nimport { dset as dset2 } from \"dset\";\nimport z from \"zod\";\nimport { createStatesSnapshot, getByPath, load, syncClass, DELETE_TOKEN, generateShortUUID as generateShortUUID2 } from \"@signe/sync\";\n\n// src/utils.ts\nimport { dset } from \"dset\";\nfunction isPromise(value) {\n return value instanceof Promise;\n}\n__name(isPromise, \"isPromise\");\nasync function awaitReturn(val) {\n return isPromise(val) ? await val : val;\n}\n__name(awaitReturn, \"awaitReturn\");\nfunction isClass(obj) {\n return typeof obj === \"function\" && obj.prototype && obj.prototype.constructor === obj;\n}\n__name(isClass, \"isClass\");\nfunction throttle(func, wait) {\n let timeout = null;\n let lastArgs = null;\n return function(...args) {\n if (!timeout) {\n func(...args);\n timeout = setTimeout(() => {\n if (lastArgs) {\n func(...lastArgs);\n lastArgs = null;\n }\n timeout = null;\n }, wait);\n } else {\n lastArgs = args;\n }\n };\n}\n__name(throttle, \"throttle\");\nfunction extractParams(pattern, str) {\n const regexPattern = pattern.replace(/{(\\w+)}/g, \"(?<$1>[\\\\w-]+)\");\n const regex = new RegExp(`^${regexPattern}$`);\n const match = regex.exec(str);\n if (match && match.groups) {\n return match.groups;\n } else if (pattern === str) {\n return {};\n } else {\n return null;\n }\n}\n__name(extractParams, \"extractParams\");\nfunction dremove(obj, keys) {\n if (typeof keys === \"string\") {\n keys = keys.split(\".\");\n }\n let i = 0;\n const l = keys.length;\n let t = obj;\n let k;\n while (i < l - 1) {\n k = keys[i++];\n if (k === \"__proto__\" || k === \"constructor\" || k === \"prototype\") return;\n if (typeof t[k] !== \"object\" || t[k] === null) return;\n t = t[k];\n }\n k = keys[i];\n if (t && typeof t === \"object\" && !(k === \"__proto__\" || k === \"constructor\" || k === \"prototype\")) {\n delete t[k];\n }\n}\n__name(dremove, \"dremove\");\nfunction buildObject(valuesMap, allMemory) {\n let memoryObj = {};\n for (let path of valuesMap.keys()) {\n const value = valuesMap.get(path);\n dset(memoryObj, path, value);\n if (value === \"$delete\") {\n dremove(allMemory, path);\n } else {\n dset(allMemory, path, value);\n }\n }\n return memoryObj;\n}\n__name(buildObject, \"buildObject\");\nfunction response(status, body) {\n return new Response(JSON.stringify(body), {\n status,\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n}\n__name(response, \"response\");\n\n// src/request/response.ts\nvar ServerResponse = class {\n static {\n __name(this, \"ServerResponse\");\n }\n interceptors;\n statusCode = 200;\n responseBody = {};\n responseHeaders = {\n \"Content-Type\": \"application/json\"\n };\n /**\n * Creates a new ServerResponse instance\n * @param interceptors Array of interceptor functions that can modify the response\n */\n constructor(interceptors = []) {\n this.interceptors = interceptors;\n }\n /**\n * Sets the status code for the response\n * @param code HTTP status code\n * @returns this instance for chaining\n */\n status(code) {\n this.statusCode = code;\n return this;\n }\n /**\n * Sets the response body and returns this instance (chainable method)\n * \n * @param body Response body\n * @returns this instance for chaining\n */\n body(body) {\n this.responseBody = body;\n return this;\n }\n /**\n * Adds a header to the response\n * @param name Header name\n * @param value Header value\n * @returns this instance for chaining\n */\n header(name, value) {\n this.responseHeaders[name] = value;\n return this;\n }\n /**\n * Adds multiple headers to the response\n * @param headers Object containing headers\n * @returns this instance for chaining\n */\n setHeaders(headers) {\n this.responseHeaders = {\n ...this.responseHeaders,\n ...headers\n };\n return this;\n }\n /**\n * Add an interceptor to the chain\n * @param interceptor Function that takes a Response and returns a modified Response\n * @returns this instance for chaining\n */\n use(interceptor) {\n this.interceptors.push(interceptor);\n return this;\n }\n /**\n * Builds and returns the Response object after applying all interceptors\n * @returns Promise<Response> The final Response object\n * @private Internal method used by terminal methods\n */\n async buildResponse() {\n let response2 = new Response(JSON.stringify(this.responseBody), {\n status: this.statusCode,\n headers: this.responseHeaders\n });\n for (const interceptor of this.interceptors) {\n try {\n const interceptedResponse = interceptor(response2);\n if (interceptedResponse instanceof Promise) {\n response2 = await interceptedResponse;\n } else {\n response2 = interceptedResponse;\n }\n } catch (error) {\n console.error(\"Error in interceptor:\", error);\n }\n }\n return response2;\n }\n /**\n * Sets the response body to the JSON-stringified version of the provided value\n * and sends the response (terminal method)\n * \n * @param body Response body to be JSON stringified\n * @returns Promise<Response> The final Response object\n */\n async json(body) {\n this.responseBody = body;\n this.responseHeaders[\"Content-Type\"] = \"application/json\";\n return this.buildResponse();\n }\n /**\n * Sends the response with the current configuration (terminal method)\n * \n * @param body Optional body to set before sending\n * @returns Promise<Response> The final Response object\n */\n async send(body) {\n if (body !== void 0) {\n this.responseBody = body;\n }\n return this.buildResponse();\n }\n /**\n * Sends a plain text response (terminal method)\n * \n * @param text Text to send\n * @returns Promise<Response> The final Response object\n */\n async text(text) {\n this.responseBody = text;\n this.responseHeaders[\"Content-Type\"] = \"text/plain\";\n let response2 = new Response(text, {\n status: this.statusCode,\n headers: this.responseHeaders\n });\n for (const interceptor of this.interceptors) {\n try {\n const interceptedResponse = interceptor(response2);\n if (interceptedResponse instanceof Promise) {\n response2 = await interceptedResponse;\n } else {\n response2 = interceptedResponse;\n }\n } catch (error) {\n console.error(\"Error in interceptor:\", error);\n }\n }\n return response2;\n }\n /**\n * Redirects to the specified URL (terminal method)\n * \n * @param url URL to redirect to\n * @param statusCode HTTP status code (default: 302)\n * @returns Promise<Response> The final Response object\n */\n async redirect(url, statusCode = 302) {\n this.statusCode = statusCode;\n this.responseHeaders[\"Location\"] = url;\n return this.buildResponse();\n }\n /**\n * Creates a success response with status 200\n * @param body Response body\n * @returns Promise<Response> The final Response object\n */\n async success(body = {}) {\n return this.status(200).json(body);\n }\n /**\n * Creates an error response with status 400\n * @param message Error message\n * @param details Additional error details\n * @returns Promise<Response> The final Response object\n */\n async badRequest(message, details = {}) {\n return this.status(400).json({\n error: message,\n ...details\n });\n }\n /**\n * Creates an error response with status 403\n * @param message Error message\n * @returns Promise<Response> The final Response object\n */\n async notPermitted(message = \"Not permitted\") {\n return this.status(403).json({\n error: message\n });\n }\n /**\n * Creates an error response with status 401\n * @param message Error message\n * @returns Promise<Response> The final Response object\n */\n async unauthorized(message = \"Unauthorized\") {\n return this.status(401).json({\n error: message\n });\n }\n /**\n * Creates an error response with status 404\n * @param message Error message\n * @returns Promise<Response> The final Response object\n */\n async notFound(message = \"Not found\") {\n return this.status(404).json({\n error: message\n });\n }\n /**\n * Creates an error response with status 500\n * @param message Error message\n * @returns Promise<Response> The final Response object\n */\n async serverError(message = \"Internal Server Error\") {\n return this.status(500).json({\n error: message\n });\n }\n};\n\n// src/request/cors.ts\nfunction cors(res, options = {}) {\n const newHeaders = new Headers(res.headers);\n const requestOrigin = options.origin || \"*\";\n newHeaders.set(\"Access-Control-Allow-Origin\", requestOrigin);\n if (options.credentials) {\n newHeaders.set(\"Access-Control-Allow-Credentials\", \"true\");\n }\n if (options.exposedHeaders && options.exposedHeaders.length) {\n newHeaders.set(\"Access-Control-Expose-Headers\", options.exposedHeaders.join(\", \"));\n }\n if (options.methods && options.methods.length) {\n newHeaders.set(\"Access-Control-Allow-Methods\", options.methods.join(\", \"));\n } else {\n newHeaders.set(\"Access-Control-Allow-Methods\", \"GET, POST, PUT, DELETE, PATCH, OPTIONS\");\n }\n if (options.allowedHeaders && options.allowedHeaders.length) {\n newHeaders.set(\"Access-Control-Allow-Headers\", options.allowedHeaders.join(\", \"));\n } else {\n newHeaders.set(\"Access-Control-Allow-Headers\", \"Content-Type, Authorization, X-Requested-With\");\n }\n if (options.maxAge) {\n newHeaders.set(\"Access-Control-Max-Age\", options.maxAge.toString());\n } else {\n newHeaders.set(\"Access-Control-Max-Age\", \"86400\");\n }\n return new Response(res.body, {\n status: res.status,\n headers: newHeaders\n });\n}\n__name(cors, \"cors\");\nfunction createCorsInterceptor(options = {}) {\n return (res) => cors(res, options);\n}\n__name(createCorsInterceptor, \"createCorsInterceptor\");\n\n// src/server.ts\nvar Message = z.object({\n action: z.string(),\n value: z.any()\n});\nvar Server = class {\n static {\n __name(this, \"Server\");\n }\n room;\n subRoom;\n rooms;\n /**\n * @constructor\n * @param {Party.Room} room - The room object representing the current game or application instance.\n * \n * @example\n * ```typescript\n * const server = new MyServer(new ServerIo(\"game\"));\n * ```\n */\n constructor(room) {\n this.room = room;\n this.subRoom = null;\n this.rooms = [];\n }\n /**\n * @readonly\n * @property {boolean} isHibernate - Indicates whether the server is in hibernate mode.\n * \n * @example\n * ```typescript\n * if (!server.isHibernate) {\n * console.log(\"Server is active\");\n * }\n * ```\n */\n get isHibernate() {\n return !!this[\"options\"]?.hibernate;\n }\n get roomStorage() {\n return this.room.storage;\n }\n async send(conn, obj, subRoom) {\n obj = structuredClone(obj);\n if (subRoom.interceptorPacket) {\n const signal2 = this.getUsersProperty(subRoom);\n const { publicId } = conn.state;\n const user = signal2?.()[publicId];\n obj = await awaitReturn(subRoom[\"interceptorPacket\"]?.(user, obj, conn));\n if (obj === null) return;\n }\n conn.send(JSON.stringify(obj));\n }\n broadcast(obj, subRoom) {\n for (let conn of this.room.getConnections()) {\n this.send(conn, obj, subRoom);\n }\n }\n /**\n * @method onStart\n * @async\n * @description Initializes the server and creates the initial room if not in hibernate mode.\n * @returns {Promise<void>}\n * \n * @example\n * ```typescript\n * async function initServer() {\n * await server.onStart();\n * console.log(\"Server started\");\n * }\n * ```\n */\n async onStart() {\n if (!this.isHibernate) {\n this.subRoom = await this.createRoom();\n }\n }\n async runGarbageCollector() {\n await this.garbageCollector({\n sessionExpiryTime: -1\n });\n }\n async garbageCollector(options) {\n const subRoom = await this.getSubRoom();\n if (!subRoom) return;\n const activeConnections = [\n ...this.room.getConnections()\n ];\n const activePrivateIds = new Set(activeConnections.map((conn) => conn.id));\n try {\n const sessions = await this.room.storage.list();\n const users = this.getUsersProperty(subRoom);\n const usersPropName = this.getUsersPropName(subRoom);\n const validPublicIds = /* @__PURE__ */ new Set();\n const expiredPublicIds = /* @__PURE__ */ new Set();\n const SESSION_EXPIRY_TIME = options.sessionExpiryTime;\n const now = Date.now();\n for (const [key, session] of sessions) {\n if (!key.startsWith(\"session:\")) continue;\n const privateId = key.replace(\"session:\", \"\");\n const typedSession = session;\n if (!activePrivateIds.has(privateId) && !typedSession.connected && now - typedSession.created > SESSION_EXPIRY_TIME) {\n await this.deleteSession(privateId);\n expiredPublicIds.add(typedSession.publicId);\n } else if (typedSession && typedSession.publicId) {\n validPublicIds.add(typedSession.publicId);\n }\n }\n if (users && usersPropName) {\n const currentUsers = users();\n for (const publicId in currentUsers) {\n if (expiredPublicIds.has(publicId) && !validPublicIds.has(publicId)) {\n delete currentUsers[publicId];\n await this.room.storage.delete(`${usersPropName}.${publicId}`);\n }\n }\n }\n } catch (error) {\n console.error(\"Error in garbage collector:\", error);\n }\n }\n /**\n * @method createRoom\n * @private\n * @async\n * @param {CreateRoomOptions} [options={}] - Options for creating the room.\n * @returns {Promise<Object>} The created room instance.\n * \n * @example\n * ```typescript\n * // This method is private and called internally\n * async function internalCreateRoom() {\n * const room = await this.createRoom({ getMemoryAll: true });\n * console.log(\"Room created:\", room);\n * }\n * ```\n */\n async createRoom(options = {}) {\n let instance;\n let init = true;\n let initPersist = true;\n for (let room of this.rooms) {\n const params = extractParams(room.path, this.room.id);\n if (params) {\n instance = new room(this.room, params);\n break;\n }\n }\n if (!instance) {\n return null;\n }\n const loadMemory = /* @__PURE__ */ __name(async () => {\n const root = await this.room.storage.get(\".\");\n const memory = await this.room.storage.list();\n const tmpObject = root || {};\n for (let [key, value] of memory) {\n if (key.startsWith(\"session:\")) {\n continue;\n }\n if (key == \".\") {\n continue;\n }\n dset2(tmpObject, key, value);\n }\n load(instance, tmpObject, true);\n }, \"loadMemory\");\n instance.$memoryAll = {};\n instance.$send = (conn, obj) => {\n return this.send(conn, obj, instance);\n };\n instance.$broadcast = (obj) => {\n return this.broadcast(obj, instance);\n };\n instance.$sessionTransfer = async (conn, targetRoomId) => {\n let user;\n const signal2 = this.getUsersProperty(instance);\n if (!signal2) {\n console.error(\"[sessionTransfer] `users` property not defined in the room.\");\n return null;\n }\n const { publicId } = conn.state;\n user = signal2()[publicId];\n if (!user) {\n console.error(`[sessionTransfer] User with publicId ${publicId} not found.`);\n return null;\n }\n const sessions = await this.room.storage.list();\n let userSession = null;\n let privateId = null;\n for (const [key, session] of sessions) {\n if (key.startsWith(\"session:\") && session.publicId === publicId) {\n userSession = session;\n privateId = key.replace(\"session:\", \"\");\n break;\n }\n }\n if (!userSession || !privateId) {\n console.error(`[sessionTransfer] Session for publicId ${publicId} not found.`);\n return null;\n }\n const usersPropName = this.getUsersPropName(instance);\n if (!usersPropName) {\n console.error(\"[sessionTransfer] `users` property not defined in the room.\");\n return null;\n }\n const userSnapshot = createStatesSnapshot(user);\n const transferData = {\n privateId,\n userSnapshot,\n sessionState: userSession.state,\n publicId\n };\n try {\n const targetRoomParty = await this.room.context.parties.main.get(targetRoomId);\n const response2 = await targetRoomParty.fetch(\"/session-transfer\", {\n method: \"POST\",\n body: JSON.stringify(transferData),\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n if (!response2.ok) {\n throw new Error(`Transfer request failed: ${await response2.text()}`);\n }\n const { transferToken } = await response2.json();\n return transferToken;\n } catch (error) {\n console.error(`[sessionTransfer] Failed to transfer session to room ${targetRoomId}:`, error);\n return null;\n }\n };\n const syncCb = /* @__PURE__ */ __name((values) => {\n if (options.getMemoryAll) {\n buildObject(values, instance.$memoryAll);\n }\n if (init && this.isHibernate) {\n init = false;\n return;\n }\n const packet = buildObject(values, instance.$memoryAll);\n this.broadcast({\n type: \"sync\",\n value: packet\n }, instance);\n values.clear();\n }, \"syncCb\");\n const persistCb = /* @__PURE__ */ __name(async (values) => {\n if (initPersist) {\n values.clear();\n return;\n }\n for (let [path, value] of values) {\n const _instance = path == \".\" ? instance : getByPath(instance, path);\n const itemValue = createStatesSnapshot(_instance);\n if (value == DELETE_TOKEN) {\n await this.room.storage.delete(path);\n } else {\n await this.room.storage.put(path, itemValue);\n }\n }\n values.clear();\n }, \"persistCb\");\n syncClass(instance, {\n onSync: throttle(syncCb, instance[\"throttleSync\"] ?? 500),\n onPersist: throttle(persistCb, instance[\"throttleStorage\"] ?? 2e3)\n });\n await loadMemory();\n initPersist = false;\n return instance;\n }\n /**\n * @method getSubRoom\n * @private\n * @async\n * @param {Object} [options={}] - Options for getting the sub-room.\n * @returns {Promise<Object>} The sub-room instance.\n * \n * @example\n * ```typescript\n * // This method is private and called internally\n * async function internalGetSubRoom() {\n * const subRoom = await this.getSubRoom();\n * console.log(\"Sub-room retrieved:\", subRoom);\n * }\n * ```\n */\n async getSubRoom(options = {}) {\n let subRoom;\n if (this.isHibernate) {\n subRoom = await this.createRoom(options);\n } else {\n subRoom = this.subRoom;\n }\n return subRoom;\n }\n /**\n * @method getUsersProperty\n * @private\n * @param {Object} subRoom - The sub-room instance.\n * @returns {Object|null} The users property of the sub-room, or null if not found.\n * \n * @example\n * ```typescript\n * // This method is private and called internally\n * function internalGetUsers(subRoom) {\n * const users = this.getUsersProperty(subRoom);\n * console.log(\"Users:\", users);\n * }\n * ```\n */\n getUsersProperty(subRoom) {\n const meta = subRoom.constructor[\"_propertyMetadata\"];\n const propId = meta?.get(\"users\");\n if (propId) {\n return subRoom[propId];\n }\n return null;\n }\n getUsersPropName(subRoom) {\n if (!subRoom) return null;\n const metadata = subRoom.constructor._propertyMetadata;\n if (!metadata) return null;\n return metadata.get(\"users\");\n }\n /**\n * Retrieves the connection status property from a user object.\n * \n * @param {any} user - The user object to get the connection property from.\n * @returns {Function|null} - The connection property signal function or null if not found.\n * @private\n */\n getUserConnectionProperty(user) {\n if (!user) return null;\n const metadata = user.constructor._propertyMetadata;\n if (!metadata) return null;\n const connectedPropName = metadata.get(\"connected\");\n if (!connectedPropName) return null;\n return user[connectedPropName];\n }\n /**\n * Updates a user's connection status in the signal.\n * \n * @param {any} user - The user object to update.\n * @param {boolean} isConnected - The new connection status.\n * @returns {boolean} - Whether the update was successful.\n * @private\n */\n updateUserConnectionStatus(user, isConnected) {\n const connectionSignal = this.getUserConnectionProperty(user);\n if (connectionSignal) {\n connectionSignal.set(isConnected);\n return true;\n }\n return false;\n }\n /**\n * @method getSession\n * @private\n * @param {string} privateId - The private ID of the session.\n * @returns {Promise<Object|null>} The session object, or null if not found.\n * \n * @example\n * ```typescript\n * const session = await server.getSession(\"privateId\");\n * console.log(session);\n * ```\n */\n async getSession(privateId) {\n if (!privateId) return null;\n try {\n const session = await this.room.storage.get(`session:${privateId}`);\n return session;\n } catch (e) {\n return null;\n }\n }\n async saveSession(privateId, data) {\n const sessionData = {\n ...data,\n created: data.created || Date.now(),\n connected: data.connected !== void 0 ? data.connected : true\n };\n await this.room.storage.put(`session:${privateId}`, sessionData);\n }\n async updateSessionConnection(privateId, connected) {\n const session = await this.getSession(privateId);\n if (session) {\n await this.saveSession(privateId, {\n ...session,\n connected\n });\n }\n }\n /**\n * @method deleteSession\n * @private\n * @param {string} privateId - The private ID of the session to delete.\n * @returns {Promise<void>}\n * \n * @example\n * ```typescript\n * await server.deleteSession(\"privateId\");\n * ```\n */\n async deleteSession(privateId) {\n await this.room.storage.delete(`session:${privateId}`);\n }\n async onConnectClient(conn, ctx) {\n const subRoom = await this.getSubRoom({\n getMemoryAll: true\n });\n if (!subRoom) {\n conn.close();\n return;\n }\n const sessionExpiryTime = subRoom.constructor.sessionExpiryTime;\n await this.garbageCollector({\n sessionExpiryTime\n });\n const roomGuards = subRoom.constructor[\"_roomGuards\"] || [];\n for (const guard of roomGuards) {\n const isAuthorized = await guard(conn, ctx, this.room);\n if (!isAuthorized) {\n conn.close();\n return;\n }\n }\n let transferToken = null;\n if (ctx.request?.url) {\n const url = new URL(ctx.request.url);\n transferToken = url.searchParams.get(\"transferToken\");\n }\n let transferData = null;\n if (transferToken) {\n transferData = await this.room.storage.get(`transfer:${transferToken}`);\n if (transferData) {\n await this.room.storage.delete(`transfer:${transferToken}`);\n }\n }\n const existingSession = await this.getSession(conn.id);\n const publicId = existingSession?.publicId || transferData?.publicId || generateShortUUID2();\n let user = null;\n const signal2 = this.getUsersProperty(subRoom);\n const usersPropName = this.getUsersPropName(subRoom);\n if (signal2) {\n const { classType } = signal2.options;\n if (!existingSession?.publicId) {\n if (transferData?.restored && signal2()[publicId]) {\n user = signal2()[publicId];\n } else {\n user = isClass(classType) ? new classType() : classType(conn, ctx);\n signal2()[publicId] = user;\n const snapshot = createStatesSnapshot(user);\n this.room.storage.put(`${usersPropName}.${publicId}`, snapshot);\n }\n } else {\n user = signal2()[existingSession.publicId];\n }\n if (!existingSession) {\n const sessionPrivateId = transferData?.privateId || conn.id;\n await this.saveSession(sessionPrivateId, {\n publicId\n });\n } else {\n await this.updateSessionConnection(conn.id, true);\n }\n }\n this.updateUserConnectionStatus(user, true);\n conn.setState({\n ...conn.state,\n publicId\n });\n await awaitReturn(subRoom[\"onJoin\"]?.(user, conn, ctx));\n this.send(conn, {\n type: \"sync\",\n value: {\n pId: publicId,\n ...subRoom.$memoryAll\n }\n }, subRoom);\n }\n /**\n * @method onConnect\n * @async\n * @param {Party.Connection} conn - The connection object for the new user.\n * @param {Party.ConnectionContext} ctx - The context of the connection.\n * @description Handles a new user connection, creates a user object, and sends initial sync data.\n * @returns {Promise<void>}\n * \n * @example\n * ```typescript\n * server.onConnect = async (conn, ctx) => {\n * await server.onConnect(conn, ctx);\n * console.log(\"New user connected:\", conn.id);\n * };\n * ```\n */\n async onConnect(conn, ctx) {\n if (ctx.request?.headers.has(\"x-shard-id\")) {\n this.onConnectShard(conn, ctx);\n } else {\n await this.onConnectClient(conn, ctx);\n }\n }\n /**\n * @method onConnectShard\n * @private\n * @param {Party.Connection} conn - The connection object for the new shard.\n * @param {Party.ConnectionContext} ctx - The context of the shard connection.\n * @description Handles a new shard connection, setting up the necessary state.\n * @returns {void}\n */\n onConnectShard(conn, ctx) {\n const shardId = ctx.request?.headers.get(\"x-shard-id\") || \"unknown-shard\";\n conn.setState({\n shard: true,\n shardId,\n clients: /* @__PURE__ */ new Map()\n // Track clients connected through this shard\n });\n }\n /**\n * @method onMessage\n * @async\n * @param {string} message - The message received from a user or shard.\n * @param {Party.Connection} sender - The connection object of the sender.\n * @description Processes incoming messages, handling differently based on if sender is shard or client.\n * @returns {Promise<void>}\n */\n async onMessage(message, sender) {\n if (sender.state && sender.state.shard) {\n await this.handleShardMessage(message, sender);\n return;\n }\n let json;\n try {\n json = JSON.parse(message);\n } catch (e) {\n return;\n }\n const result = Message.safeParse(json);\n if (!result.success) {\n return;\n }\n const subRoom = await this.getSubRoom();\n if (!subRoom) {\n console.warn(\"Room not found\");\n return;\n }\n const roomGuards = subRoom.constructor[\"_roomGuards\"] || [];\n for (const guard of roomGuards) {\n const isAuthorized = await guard(sender, result.data.value, this.room);\n if (!isAuthorized) {\n return;\n }\n }\n const actions = subRoom.constructor[\"_actionMetadata\"];\n if (actions) {\n const signal2 = this.getUsersProperty(subRoom);\n const { publicId } = sender.state;\n const user = signal2?.()[publicId];\n const actionName = actions.get(result.data.action);\n if (actionName) {\n const guards = subRoom.constructor[\"_actionGuards\"]?.get(actionName.key) || [];\n for (const guard of guards) {\n const isAuthorized = await guard(sender, result.data.value);\n if (!isAuthorized) {\n return;\n }\n }\n if (actionName.bodyValidation) {\n const bodyResult = actionName.bodyValidation.safeParse(result.data.value);\n if (!bodyResult.success) {\n return;\n }\n }\n await awaitReturn(subRoom[actionName.key](user, result.data.value, sender));\n }\n }\n }\n /**\n * @method handleShardMessage\n * @private\n * @async\n * @param {string} message - The message received from a shard.\n * @param {Party.Connection} shardConnection - The connection object of the shard.\n * @description Processes messages from shards, extracting client information.\n * @returns {Promise<void>}\n */\n async handleShardMessage(message, shardConnection) {\n let parsedMessage;\n try {\n parsedMessage = JSON.parse(message);\n } catch (e) {\n console.error(\"Error parsing shard message:\", e);\n return;\n }\n const shardState = shardConnection.state;\n const clients = shardState.clients;\n switch (parsedMessage.type) {\n case \"shard.clientConnected\":\n await this.handleShardClientConnect(parsedMessage, shardConnection);\n break;\n case \"shard.clientMessage\":\n await this.handleShardClientMessage(parsedMessage, shardConnection);\n break;\n case \"shard.clientDisconnected\":\n await this.handleShardClientDisconnect(parsedMessage, shardConnection);\n break;\n default:\n console.warn(`Unknown shard message type: ${parsedMessage.type}`);\n }\n }\n /**\n * @method handleShardClientConnect\n * @private\n * @async\n * @param {Object} message - The client connection message from a shard.\n * @param {Party.Connection} shardConnection - The connection object of the shard.\n * @description Handles a new client connection via a shard.\n * @returns {Promise<void>}\n */\n async handleShardClientConnect(message, shardConnection) {\n const { privateId, requestInfo } = message;\n const shardState = shardConnection.state;\n const virtualContext = {\n request: requestInfo ? {\n headers: new Headers(requestInfo.headers),\n method: requestInfo.method,\n url: requestInfo.url\n } : void 0\n };\n const virtualConnection = {\n id: privateId,\n send: /* @__PURE__ */ __name((data) => {\n shardConnection.send(JSON.stringify({\n targetClientId: privateId,\n data\n }));\n }, \"send\"),\n state: {},\n setState: /* @__PURE__ */ __name((state) => {\n const clients = shardState.clients;\n const currentState = clients.get(privateId) || {};\n const mergedState = Object.assign({}, currentState, state);\n clients.set(privateId, mergedState);\n virtualConnection.state = clients.get(privateId);\n return virtualConnection.state;\n }, \"setState\"),\n close: /* @__PURE__ */ __name(() => {\n shardConnection.send(JSON.stringify({\n type: \"shard.closeClient\",\n privateId\n }));\n if (shardState.clients) {\n shardState.clients.delete(privateId);\n }\n }, \"close\")\n };\n if (!shardState.clients.has(privateId)) {\n shardState.clients.set(privateId, {});\n }\n await this.onConnectClient(virtualConnection, virtualContext);\n }\n /**\n * @method handleShardClientMessage\n * @private\n * @async\n * @param {Object} message - The client message from a shard.\n * @param {Party.Connection} shardConnection - The connection object of the shard.\n * @description Handles a message from a client via a shard.\n * @returns {Promise<void>}\n */\n async handleShardClientMessage(message, shardConnection) {\n const { privateId, publicId, payload } = message;\n const shardState = shardConnection.state;\n const clients = shardState.clients;\n if (!clients.has(privateId)) {\n console.warn(`Received message from unknown client ${privateId}, creating virtual connection`);\n clients.set(privateId, {\n publicId\n });\n }\n const virtualConnection = {\n id: privateId,\n send: /* @__PURE__ */ __name((data) => {\n shardConnection.send(JSON.stringify({\n targetClientId: privateId,\n data\n }));\n }, \"send\"),\n state: clients.get(privateId),\n setState: /* @__PURE__ */ __name((state) => {\n const currentState = clients.get(privateId) || {};\n const mergedState = Object.assign({}, currentState, state);\n clients.set(privateId, mergedState);\n virtualConnection.state = clients.get(privateId);\n return virtualConnection.state;\n }, \"setState\"),\n close: /* @__PURE__ */ __name(() => {\n shardConnection.send(JSON.stringify({\n type: \"shard.closeClient\",\n privateId\n }));\n if (shardState.clients) {\n shardState.clients.delete(privateId);\n }\n }, \"close\")\n };\n const payloadString = typeof payload === \"string\" ? payload : JSON.stringify(payload);\n await this.onMessage(payloadString, virtualConnection);\n }\n /**\n * @method handleShardClientDisconnect\n * @private\n * @async\n * @param {Object} message - The client disconnection message from a shard.\n * @param {Party.Connection} shardConnection - The connection object of the shard.\n * @description Handles a client disconnection via a shard.\n * @returns {Promise<void>}\n */\n async handleShardClientDisconnect(message, shardConnection) {\n const { privateId, publicId } = message;\n const shardState = shardConnection.state;\n const clients = shardState.clients;\n const clientState = clients.get(privateId);\n if (!clientState) {\n console.warn(`Disconnection for unknown client ${privateId}`);\n return;\n }\n const virtualConnection = {\n id: privateId,\n send: /* @__PURE__ */ __name(() => {\n }, \"send\"),\n state: clientState,\n setState: /* @__PURE__ */ __name(() => {\n return {};\n }, \"setState\"),\n close: /* @__PURE__ */ __name(() => {\n }, \"close\")\n };\n await this.onClose(virtualConnection);\n clients.delete(privateId);\n }\n /**\n * @method onClose\n * @async\n * @param {Party.Connection} conn - The connection object of the disconnecting user.\n * @description Handles user disconnection, removing them from the room and triggering the onLeave event..\n * @returns {Promise<void>}\n * \n * @example\n * ```typescript\n * server.onClose = async (conn) => {\n * await server.onClose(conn);\n * console.log(\"User disconnected:\", conn.id);\n * };\n * ```\n */\n async onClose(conn) {\n const subRoom = await this.getSubRoom();\n if (!subRoom) {\n return;\n }\n const signal2 = this.getUsersProperty(subRoom);\n if (!conn.state) {\n return;\n }\n const privateId = conn.id;\n const { publicId } = conn.state;\n const user = signal2?.()[publicId];\n if (!user) return;\n await this.updateSessionConnection(privateId, false);\n const connectionUpdated = this.updateUserConnectionStatus(user, false);\n await awaitReturn(subRoom[\"onLeave\"]?.(user, conn));\n if (!connectionUpdated) {\n this.broadcast({\n type: \"user_disconnected\",\n value: {\n publicId\n }\n }, subRoom);\n }\n }\n async onAlarm() {\n const subRoom = await this.getSubRoom();\n await awaitReturn(subRoom[\"onAlarm\"]?.(subRoom));\n }\n async onError(connection, error) {\n const subRoom = await this.getSubRoom();\n await awaitReturn(subRoom[\"onError\"]?.(connection, error));\n }\n /**\n * @method onRequest\n * @async\n * @param {Party.Request} req - The HTTP request to handle\n * @description Handles HTTP requests, either directly from clients or forwarded by shards\n * @returns {Promise<Response>} The response to return to the client\n */\n async onRequest(req) {\n const isFromShard = req.headers.has(\"x-forwarded-by-shard\");\n const shardId = req.headers.get(\"x-shard-id\");\n const res = new ServerResponse([\n createCorsInterceptor()\n ]);\n if (req.method === \"OPTIONS\") {\n return res.status(200).send({});\n }\n if (isFromShard) {\n return this.handleShardRequest(req, res, shardId);\n }\n return this.handleDirectRequest(req, res);\n }\n /**\n * @method handleSessionRestore\n * @private\n * @async\n * @param {Party.Request} req - The HTTP request for session restore\n * @param {ServerResponse} res - The response object\n * @description Handles session restoration from transfer data, creates session from privateId\n * @returns {Promise<Response>} The response to return to the client\n */\n async handleSessionRestore(req, res) {\n try {\n const transferData = await req.json();\n const { privateId, userSnapshot, sessionState, publicId } = transferData;\n if (!privateId || !publicId) {\n return res.badRequest(\"Missing privateId or publicId in transfer data\");\n }\n const subRoom = await this.getSubRoom();\n if (!subRoom) {\n return res.serverError(\"Room not available\");\n }\n await this.saveSession(privateId, {\n publicId,\n state: sessionState,\n created: Date.now(),\n connected: false\n // Will be set to true when user connects\n });\n if (userSnapshot) {\n const signal2 = this.getUsersProperty(subRoom);\n const usersPropName = this.getUsersPropName(subRoom);\n if (signal2 && usersPropName) {\n const { classType } = signal2.options;\n const user = isClass(classType) ? new classType() : classType();\n load(user, userSnapshot, true);\n signal2()[publicId] = user;\n await this.room.storage.put(`${usersPropName}.${publicId}`, userSnapshot);\n }\n }\n const transferToken = generateShortUUID2();\n await this.room.storage.put(`transfer:${transferToken}`, {\n privateId,\n publicId,\n restored: true\n });\n return res.success({\n transferToken\n });\n } catch (error) {\n console.error(\"Error restoring session:\", error);\n return res.serverError(\"Failed to restore session\");\n }\n }\n /**\n * @method handleDirectRequest\n * @private\n * @async\n * @param {Party.Request} req - The HTTP request received directly from a client\n * @description Processes requests received directly from clients\n * @returns {Promise<Response>} The response to return to the client\n */\n async handleDirectRequest(req, res) {\n const subRoom = await this.getSubRoom();\n if (!subRoom) {\n return res.notFound();\n }\n const url = new URL(req.url);\n if (url.pathname.endsWith(\"/session-transfer\") && req.method === \"POST\") {\n return this.handleSessionRestore(req, res);\n }\n const response2 = await this.tryMatchRequestHandler(req, res, subRoom);\n if (response2) {\n return response2;\n }\n const legacyResponse = await awaitReturn(subRoom[\"onRequest\"]?.(req, res));\n if (!legacyResponse) {\n return res.notFound();\n }\n if (legacyResponse instanceof Response) {\n return legacyResponse;\n }\n return res.success(legacyResponse);\n }\n /**\n * @method tryMatchRequestHandler\n * @private\n * @async\n * @param {Party.Request} req - The HTTP request to handle\n * @param {Object} subRoom - The room instance\n * @description Attempts to match the request to a registered @Request handler\n * @returns {Promise<Response | null>} The response or null if no handler matched\n */\n async tryMatchRequestHandler(req, res, subRoom) {\n const requestHandlers = subRoom.constructor[\"_requestMetadata\"];\n if (!requestHandlers) {\n return null;\n }\n const url = new URL(req.url);\n const method = req.method;\n let pathname = url.pathname;\n pathname = \"/\" + pathname.split(\"/\").slice(4).join(\"/\");\n for (const [routeKey, handler] of requestHandlers.entries()) {\n const firstColonIndex = routeKey.indexOf(\":\");\n const handlerMethod = routeKey.substring(0, firstColonIndex);\n const handlerPath = routeKey.substring(firstColonIndex + 1);\n if (handlerMethod !== method) {\n continue;\n }\n if (this.pathMatches(pathname, handlerPath)) {\n const params = this.extractPathParams(pathname, handlerPath);\n const guards = subRoom.constructor[\"_actionGuards\"]?.get(handler.key) || [];\n for (const guard of guards) {\n const isAuthorized = await guard(null, req, this.room);\n if (isAuthorized instanceof Response) {\n return isAuthorized;\n }\n if (!isAuthorized) {\n return res.notPermitted();\n }\n }\n let bodyData = null;\n if (handler.bodyValidation && [\n \"POST\",\n \"PUT\",\n \"PATCH\"\n ].includes(method)) {\n try {\n const contentType = req.headers.get(\"content-type\") || \"\";\n if (contentType.includes(\"application/json\")) {\n const body = await req.json();\n const validation = handler.bodyValidation.safeParse(body);\n if (!validation.success) {\n return res.badRequest(\"Invalid request body\", {\n details: validation.error\n });\n }\n bodyData = validation.data;\n }\n } catch (error) {\n return res.badRequest(\"Failed to parse request body\");\n }\n }\n try {\n req[\"data\"] = bodyData;\n req[\"params\"] = params;\n const result = await awaitReturn(subRoom[handler.key](req, res));\n if (result instanceof Response) {\n return result;\n }\n return res.success(result);\n } catch (error) {\n console.error(\"Error executing request handler:\", error);\n return res.serverError();\n }\n }\n }\n return null;\n }\n /**\n * @method pathMatches\n * @private\n * @param {string} requestPath - The path from the request\n * @param {string} handlerPath - The path pattern from the handler\n * @description Checks if a request path matches a handler path pattern\n * @returns {boolean} True if the paths match\n */\n pathMatches(requestPath, handlerPath) {\n const pathRegexString = handlerPath.replace(/\\//g, \"\\\\/\").replace(/:([^\\/]+)/g, \"([^/]+)\");\n const pathRegex = new RegExp(`^${pathRegexString}`);\n return pathRegex.test(requestPath);\n }\n /**\n * @method extractPathParams\n * @private\n * @param {string} requestPath - The path from the request\n * @param {string} handlerPath - The path pattern from the handler\n * @description Extracts path parameters from the request path based on the handler pattern\n * @returns {Object} An object containing the path parameters\n */\n extractPathParams(requestPath, handlerPath) {\n const params = {};\n const paramNames = [];\n handlerPath.split(\"/\").forEach((segment) => {\n if (segment.startsWith(\":\")) {\n paramNames.push(segment.substring(1));\n }\n });\n const pathRegexString = handlerPath.replace(/\\//g, \"\\\\/\").replace(/:([^\\/]+)/g, \"([^/]+)\");\n const pathRegex = new RegExp(`^${pathRegexString}`);\n const matches = requestPath.match(pathRegex);\n if (matches && matches.length > 1) {\n for (let i = 0; i < paramNames.length; i++) {\n params[paramNames[i]] = matches[i + 1];\n }\n }\n return params;\n }\n /**\n * @method handleShardRequest\n * @private\n * @async\n * @param {Party.Request} req - The HTTP request forwarded by a shard\n * @param {string | null} shardId - The ID of the shard that forwarded the request\n * @description Processes requests forwarded by shards, preserving client context\n * @returns {Promise<Response>} The response to return to the shard (which will forward it to the client)\n */\n async handleShardRequest(req, res, shardId) {\n const subRoom = await this.getSubRoom();\n if (!subRoom) {\n return res.notFound();\n }\n const originalClientIp = req.headers.get(\"x-original-client-ip\");\n const enhancedReq = this.createEnhancedRequest(req, originalClientIp);\n try {\n const response2 = await this.tryMatchRequestHandler(enhancedReq, res, subRoom);\n if (response2) {\n return response2;\n }\n const legacyResponse = await awaitReturn(subRoom[\"onRequest\"]?.(enhancedReq, res));\n if (!legacyResponse) {\n return res.notFound();\n }\n if (legacyResponse instanceof Response) {\n return legacyResponse;\n }\n return res.success(legacyResponse);\n } catch (error) {\n console.error(`Error processing request from shard ${shardId}:`, error);\n return res.serverError();\n }\n }\n /**\n * @method createEnhancedRequest\n * @private\n * @param {Party.Request} originalReq - The original request received from the shard\n * @param {string | null} originalClientIp - The original client IP, if available\n * @description Creates an enhanced request object that preserves the original client context\n * @returns {Party.Request} The enhanced request object\n */\n createEnhancedRequest(originalReq, originalClientIp) {\n const clonedReq = originalReq.clone();\n clonedReq.viaShard = true;\n if (originalClientIp) {\n clonedReq.originalClientIp = originalClientIp;\n }\n return clonedReq;\n }\n};\n\n// src/shard.ts\nvar Shard = class {\n static {\n __name(this, \"Shard\");\n }\n room;\n ws;\n connectionMap;\n mainServerStub;\n worldUrl;\n worldId;\n lastReportedConnections;\n statsInterval;\n statsIntervalId;\n constructor(room) {\n this.room = room;\n this.connectionMap = /* @__PURE__ */ new Map();\n this.worldUrl = null;\n this.worldId = \"default\";\n this.lastReportedConnections = 0;\n this.statsInterval = 3e4;\n this.statsIntervalId = null;\n }\n async onStart() {\n const roomId = this.room.id.split(\":\")[0];\n const roomStub = this.room.context.parties.main.get(roomId);\n if (!roomStub) {\n console.warn(\"No room room stub found in main party context\");\n return;\n }\n this.mainServerStub = roomStub;\n this.ws = await roomStub.socket({\n headers: {\n \"x-shard-id\": this.room.id\n }\n });\n this.ws.addEventListener(\"message\", (event) => {\n try {\n const message = JSON.parse(event.data);\n if (message.targetClientId) {\n const clientConn = this.connectionMap.get(message.targetClientId);\n if (clientConn) {\n delete message.targetClientId;\n clientConn.send(message.data);\n }\n } else {\n this.room.broadcast(event.data);\n }\n } catch (error) {\n console.error(\"Error processing message from main server:\", error);\n }\n });\n await this.updateWorldStats();\n this.startPeriodicStatsUpdates();\n }\n startPeriodicStatsUpdates() {\n if (!this.worldUrl) {\n return;\n }\n if (this.statsIntervalId) {\n clearInterval(this.statsIntervalId);\n }\n this.statsIntervalId = setInterval(() => {\n this.updateWorldStats().catch((error) => {\n console.error(\"Error in periodic stats update:\", error);\n });\n }, this.statsInterval);\n }\n stopPeriodicStatsUpdates() {\n if (this.statsIntervalId) {\n clearInterval(this.statsIntervalId);\n this.statsIntervalId = null;\n }\n }\n onConnect(conn, ctx) {\n this.connectionMap.set(conn.id, conn);\n const headers = {};\n if (ctx.request?.headers) {\n ctx.request.headers.forEach((value, key) => {\n headers[key] = value;\n });\n }\n const requestInfo = ctx.request ? {\n headers,\n url: ctx.request.url,\n method: ctx.request.method\n } : null;\n this.ws.send(JSON.stringify({\n type: \"shard.clientConnected\",\n privateId: conn.id,\n requestInfo\n }));\n this.updateWorldStats();\n }\n onMessage(message, sender) {\n try {\n const parsedMessage = typeof message === \"string\" ? JSON.parse(message) : message;\n const wrappedMessage = JSON.stringify({\n type: \"shard.clientMessage\",\n privateId: sender.id,\n publicId: sender.state?.publicId,\n payload: parsedMessage\n });\n this.ws.send(wrappedMessage);\n } catch (error) {\n console.error(\"Error forwarding message to main server:\", error);\n }\n }\n onClose(conn) {\n this.connectionMap.delete(conn.id);\n this.ws.send(JSON.stringify({\n type: \"shard.clientDisconnected\",\n privateId: conn.id,\n publicId: conn.state?.publicId\n }));\n this.updateWorldStats();\n }\n async updateWorldStats() {\n const currentConnections = this.connectionMap.size;\n if (currentConnections === this.lastReportedConnections) {\n return true;\n }\n try {\n const worldRoom = this.room.context.parties.world.get(\"world-default\");\n const response2 = await worldRoom.fetch(\"/update-shard\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-access-shard\": this.room.env.SHARD_SECRET\n },\n body: JSON.stringify({\n shardId: this.room.id,\n connections: currentConnections\n })\n });\n if (!response2.ok) {\n const errorData = await response2.json().catch(() => ({\n error: \"Unknown error\"\n }));\n console.error(`Failed to update World stats: ${response2.status} - ${errorData.error || \"Unknown error\"}`);\n return false;\n }\n this.lastReportedConnections = currentConnections;\n return true;\n } catch (error) {\n console.error(\"Error updating World stats:\", error);\n return false;\n }\n }\n /**\n * @method onRequest\n * @async\n * @param {Party.Request} req - The HTTP request to handle\n * @description Forwards HTTP requests to the main server, preserving client context\n * @returns {Promise<Response>} The response from the main server\n */\n async onRequest(req) {\n if (!this.mainServerStub) {\n return response(503, {\n error: \"Shard not connected to main server\"\n });\n }\n try {\n const url = new URL(req.url);\n const path = url.pathname;\n const method = req.method;\n let body = null;\n if (method !== \"GET\" && method !== \"HEAD\") {\n body = await req.text();\n }\n const headers = new Headers();\n req.headers.forEach((value, key) => {\n headers.set(key, value);\n });\n headers.set(\"x-shard-id\", this.room.id);\n headers.set(\"x-forwarded-by-shard\", \"true\");\n const clientIp = req.headers.get(\"x-forwarded-for\") || \"unknown\";\n if (clientIp) {\n headers.set(\"x-original-client-ip\", clientIp);\n }\n const requestInit = {\n method,\n headers,\n body\n };\n const response2 = await this.mainServerStub.fetch(path, requestInit);\n return response2;\n } catch (error) {\n return response(500, {\n error: \"Error forwarding request\"\n });\n }\n }\n /**\n * @method onAlarm\n * @async\n * @description Executed periodically, used to perform maintenance tasks\n */\n async onAlarm() {\n await this.updateWorldStats();\n }\n};\n\n// src/testing.ts\nasync function testRoom(Room3, options = {}) {\n const createServer = /* @__PURE__ */ __name((io2) => {\n const server2 = new Server(io2);\n server2.rooms = [\n Room3\n ];\n return server2;\n }, \"createServer\");\n const isShard = options.shard || false;\n const io = new ServerIo(Room3.path, isShard ? {\n parties: {\n game: createServer,\n ...options.parties || {}\n },\n partyFn: options.partyFn,\n env: options.env\n } : {\n parties: options.parties,\n partyFn: options.partyFn,\n env: options.env\n });\n Room3.prototype.throttleSync = 0;\n Room3.prototype.throttleStorage = 0;\n Room3.prototype.options = options;\n let server;\n if (options.shard) {\n const shardServer = new Shard(io);\n shardServer.subRoom = null;\n server = shardServer;\n if (io.context.parties.main instanceof Map) {\n for (const lobby of io.context.parties.main.values()) {\n await lobby.server.onStart();\n }\n }\n } else {\n server = await createServer(io);\n if (io.context.parties.main instanceof Map) {\n for (const lobby of io.context.parties.main.values()) {\n if (lobby.server && lobby.server !== server) {\n await lobby.server.onStart();\n }\n }\n }\n }\n await server.onStart();\n return {\n server,\n room: server.subRoom,\n createClient: /* @__PURE__ */ __name(async (id2, opts) => {\n const client = await io.connection(server, id2, opts);\n return client;\n }, \"createClient\"),\n getServerUser: /* @__PURE__ */ __name(async (client, prop = \"users\") => {\n const privateId = client.conn.id;\n const session = await server.getSession(privateId);\n return server.subRoom[prop]()[session?.publicId];\n }, \"getServerUser\")\n };\n}\n__name(testRoom, \"testRoom\");\nasync function request(room, path, options = {\n method: \"GET\"\n}) {\n const url = new URL(\"http://localhost\" + path);\n const request1 = new Request(url.toString(), options);\n const response2 = await room.onRequest(request1);\n return response2;\n}\n__name(request, \"request\");\nfunction tick(ms = 0) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n__name(tick, \"tick\");\n\n// src/mock.ts\nvar MockPartyClient = class {\n static {\n __name(this, \"MockPartyClient\");\n }\n server;\n events;\n id;\n conn;\n constructor(server, id2) {\n this.server = server;\n this.events = /* @__PURE__ */ new Map();\n this.id = id2 || generateShortUUID();\n this.conn = new MockConnection(this);\n }\n addEventListener(event, cb) {\n if (!this.events.has(event)) {\n this.events.set(event, []);\n }\n this.events.get(event).push(cb);\n }\n removeEventListener(event, cb) {\n if (!this.events.has(event)) return;\n const callbacks = this.events.get(event);\n const index = callbacks.indexOf(cb);\n if (index !== -1) {\n callbacks.splice(index, 1);\n }\n if (callbacks.length === 0) {\n this.events.delete(event);\n }\n }\n _trigger(event, data) {\n const callbacks = this.events.get(event);\n if (callbacks) {\n for (const cb of callbacks) {\n cb(data);\n }\n }\n }\n send(data) {\n return this.server.onMessage(JSON.stringify(data), this.conn);\n }\n};\nvar MockLobby = class MockLobby2 {\n static {\n __name(this, \"MockLobby\");\n }\n server;\n lobbyId;\n constructor(server, lobbyId) {\n this.server = server;\n this.lobbyId = lobbyId;\n }\n socket(_init) {\n return new MockPartyClient(this.server);\n }\n async connection(idOrOptions, maybeOptions) {\n const id2 = typeof idOrOptions === \"string\" ? idOrOptions : idOrOptions?.id;\n const options = (typeof idOrOptions === \"string\" ? maybeOptions : idOrOptions) || {};\n return this.server.room.connection(this.server, id2, options);\n }\n fetch(url, options) {\n const baseUrl = url.includes(\"shard\") ? \"\" : \"/parties/main/\" + this.lobbyId;\n return request(this.server, baseUrl + url, options);\n }\n};\nvar MockContext = class MockContext2 {\n static {\n __name(this, \"MockContext\");\n }\n room;\n parties;\n constructor(room, options = {}) {\n this.room = room;\n this.parties = {\n main: /* @__PURE__ */ new Map()\n };\n const parties = options.parties || {};\n if (options.partyFn) {\n const serverCache = /* @__PURE__ */ new Map();\n this.parties.main = {\n get: /* @__PURE__ */ __name(async (lobbyId) => {\n if (!serverCache.has(lobbyId)) {\n const server = await options.partyFn(lobbyId);\n serverCache.set(lobbyId, new MockLobby(server, lobbyId));\n }\n return serverCache.get(lobbyId);\n }, \"get\")\n };\n } else {\n for (let lobbyId in parties) {\n const server = parties[lobbyId](room);\n this.parties.main.set(lobbyId, new MockLobby(server, lobbyId));\n }\n }\n }\n};\nvar MockPartyRoom = class MockPartyRoom2 {\n static {\n __name(this, \"MockPartyRoom\");\n }\n id;\n clients;\n storage;\n context;\n env;\n constructor(id2, options = {}) {\n this.id = id2;\n this.clients = /* @__PURE__ */ new Map();\n this.storage = new Storage();\n this.env = {};\n this.id = id2 || generateShortUUID();\n this.context = new MockContext(this, {\n parties: options.parties,\n partyFn: options.partyFn\n });\n this.env = options.env || {};\n }\n async connection(server, id2, opts) {\n const socket = new MockPartyClient(server, id2);\n const url = new URL(\"http://localhost\");\n if (opts?.query) {\n for (const [key, value] of Object.entries(opts.query)) {\n url.searchParams.set(key, String(value));\n }\n }\n const request2 = new Request(url.toString(), {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...opts?.headers || {}\n }\n });\n await server.onConnect(socket.conn, {\n request: request2\n });\n this.clients.set(socket.id, socket);\n return socket;\n }\n broadcast(data) {\n this.clients.forEach((client) => {\n client._trigger(\"message\", data);\n });\n }\n getConnection(id2) {\n return this.clients.get(id2);\n }\n getConnections() {\n return Array.from(this.clients.values()).map((client) => client.conn);\n }\n clear() {\n this.clients.clear();\n }\n};\nvar MockConnection = class {\n static {\n __name(this, \"MockConnection\");\n }\n client;\n server;\n id;\n constructor(client) {\n this.client = client;\n this.state = {};\n this.server = client.server;\n this.id = client.id;\n }\n state;\n setState(value) {\n this.state = value;\n }\n send(data) {\n this.client._trigger(\"message\", data);\n }\n close() {\n this.server.onClose(this);\n }\n};\nvar ServerIo = MockPartyRoom;\nvar ClientIo = MockPartyClient;\n\n// src/world.ts\nimport { signal } from \"@signe/reactive\";\nimport { sync, id, persist } from \"@signe/sync\";\nimport { z as z2 } from \"zod\";\n\n// src/types/party.ts\nvar party_exports = {};\n\n// src/jwt.ts\nvar JWTAuth = class {\n static {\n __name(this, \"JWTAuth\");\n }\n secret;\n encoder;\n decoder;\n /**\n * Constructor for the JWTAuth class\n * @param {string} secret - The secret key used for signing and verifying tokens\n */\n constructor(secret) {\n if (!secret || typeof secret !== \"string\") {\n throw new Error(\"Secret is required and must be a string\");\n }\n this.secret = secret;\n this.encoder = new TextEncoder();\n this.decoder = new TextDecoder();\n }\n /**\n * Convert the secret to a CryptoKey for HMAC operations\n * @returns {Promise<CryptoKey>} - The CryptoKey for HMAC operations\n */\n async getSecretKey() {\n const keyData = this.encoder.encode(this.secret);\n return await crypto.subtle.importKey(\n \"raw\",\n keyData,\n {\n name: \"HMAC\",\n hash: {\n name: \"SHA-256\"\n }\n },\n false,\n [\n \"sign\",\n \"verify\"\n ]\n // key usages\n );\n }\n /**\n * Base64Url encode a buffer\n * @param {ArrayBuffer} buffer - The buffer to encode\n * @returns {string} - The base64url encoded string\n */\n base64UrlEncode(buffer) {\n const base64 = btoa(String.fromCharCode(...new Uint8Array(buffer)));\n return base64.replace(/=/g, \"\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\");\n }\n /**\n * Base64Url decode a string\n * @param {string} base64Url - The base64url encoded string\n * @returns {ArrayBuffer} - The decoded buffer\n */\n base64UrlDecode(base64Url) {\n const padding = \"=\".repeat((4 - base64Url.length % 4) % 4);\n const base64 = base64Url.replace(/-/g, \"+\").replace(/_/g, \"/\") + padding;\n const rawData = atob(base64);\n const buffer = new Uint8Array(rawData.length);\n for (let i = 0; i < rawData.length; i++) {\n buffer[i] = rawData.charCodeAt(i);\n }\n return buffer.buffer;\n }\n /**\n * Sign a payload and create a JWT token\n * @param {JWTPayload} payload - The payload to include in the token\n * @param {JWTOptions} [options={}] - Options for the token\n * @param {string | number} [options.expiresIn='1h'] - Token expiration time\n * @returns {Promise<string>} - The JWT token\n */\n async sign(payload, options = {}) {\n if (!payload || typeof payload !== \"object\") {\n throw new Error(\"Payload must be an object\");\n }\n const expiresIn = options.expiresIn || \"1h\";\n let exp;\n if (typeof expiresIn === \"number\") {\n exp = Math.floor(Date.now() / 1e3) + expiresIn;\n } else if (typeof expiresIn === \"string\") {\n const match = expiresIn.match(/^(\\d+)([smhd])$/);\n if (match) {\n const value = parseInt(match[1]);\n const unit = match[2];\n const seconds = {\n \"s\": value,\n \"m\": value * 60,\n \"h\": value * 60 * 60,\n \"d\": value * 60 * 60 * 24\n }[unit];\n exp = Math.floor(Date.now() / 1e3) + seconds;\n } else {\n throw new Error('Invalid expiresIn format. Use a number (seconds) or a string like \"1h\", \"30m\", etc.');\n }\n }\n const fullPayload = {\n ...payload,\n iat: Math.floor(Date.now() / 1e3),\n exp\n };\n const header = {\n alg: \"HS256\",\n typ: \"JWT\"\n };\n const encodedHeader = this.base64UrlEncode(this.encoder.encode(JSON.stringify(header)));\n const encodedPayload = this.base64UrlEncode(this.encoder.encode(JSON.stringify(fullPayload)));\n const signatureBase = `${encodedHeader}.${encodedPayload}`;\n const key = await this.getSecretKey();\n const signature = await crypto.subtle.sign({\n name: \"HMAC\"\n }, key, this.encoder.encode(signatureBase));\n const encodedSignature = this.base64UrlEncode(signature);\n return `${signatureBase}.${encodedSignature}`;\n }\n /**\n * Verify a JWT token and return the decoded payload\n * @param {string} token - The JWT token to verify\n * @returns {Promise<JWTPayload>} - The decoded payload if verification succeeds\n * @throws {Error} - If verification fails\n */\n async verify(token) {\n if (!token || typeof token !== \"string\") {\n throw new Error(\"Token is required and must be a string\");\n }\n const parts = token.split(\".\");\n if (parts.length !== 3) {\n throw new Error(\"Invalid token format\");\n }\n const [encodedHeader, encodedPayload, encodedSignature] = parts;\n try {\n const header = JSON.parse(this.decoder.decode(this.base64UrlDecode(encodedHeader)));\n const payload = JSON.parse(this.decoder.decode(this.base64UrlDecode(encodedPayload)));\n if (header.alg !== \"HS256\") {\n throw new Error(`Unsupported algorithm: ${header.alg}`);\n }\n const now = Math.floor(Date.now() / 1e3);\n if (payload.exp && payload.exp < now) {\n throw new Error(\"Token has expired\");\n }\n const key = await this.getSecretKey();\n const signatureBase = `${encodedHeader}.${encodedPayload}`;\n const signature = this.base64UrlDecode(encodedSignature);\n const isValid = await crypto.subtle.verify({\n name: \"HMAC\"\n }, key, signature, this.encoder.encode(signatureBase));\n if (!isValid) {\n throw new Error(\"Invalid signature\");\n }\n return payload;\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Token verification failed: ${error.message}`);\n }\n throw new Error(\"Token verification failed: Unknown error\");\n }\n }\n};\n\n// src/world.guard.ts\nvar guardManageWorld = /* @__PURE__ */ __name(async (_, req, room) => {\n const tokenShard = req.headers.get(\"x-access-shard\");\n if (tokenShard) {\n if (tokenShard !== room.env.SHARD_SECRET) {\n return false;\n }\n return true;\n }\n const url = new URL(req.url);\n const token = req.headers.get(\"Authorization\") ?? url.searchParams.get(\"world-auth-token\");\n if (!token) {\n return false;\n }\n const jwt = new JWTAuth(room.env.AUTH_JWT_SECRET);\n try {\n const payload = await jwt.verify(token);\n if (!payload) {\n return false;\n }\n } catch (error) {\n return false;\n }\n return true;\n}, \"guardManageWorld\");\n\n// src/world.ts\nfunction _ts_decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n__name(_ts_decorate, \"_ts_decorate\");\nfunction _ts_metadata(k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n}\n__name(_ts_metadata, \"_ts_metadata\");\nvar MAX_PLAYERS_PER_SHARD = 75;\nvar RoomConfigSchema = z2.object({\n name: z2.string(),\n balancingStrategy: z2.enum([\n \"round-robin\",\n \"least-connections\",\n \"random\"\n ]),\n public: z2.boolean(),\n maxPlayersPerShard: z2.number().int().positive(),\n minShards: z2.number().int().min(0),\n maxShards: z2.number().int().positive().optional()\n});\nvar RegisterShardSchema = z2.object({\n shardId: z2.string(),\n roomId: z2.string(),\n url: z2.string().url(),\n maxConnections: z2.number().int().positive()\n});\nvar UpdateShardStatsSchema = z2.object({\n connections: z2.number().int().min(0),\n status: z2.enum([\n \"active\",\n \"maintenance\",\n \"draining\"\n ]).optional()\n});\nvar ScaleRoomSchema = z2.object({\n roomId: z2.string(),\n targetShardCount: z2.number().int().positive(),\n shardTemplate: z2.object({\n urlTemplate: z2.string(),\n maxConnections: z2.number().int().positive()\n }).optional()\n});\nvar RoomConfig = class RoomConfig2 {\n static {\n __name(this, \"RoomConfig\");\n }\n id;\n name = signal(\"\");\n balancingStrategy = signal(\"round-robin\");\n public = signal(true);\n maxPlayersPerShard = signal(MAX_PLAYERS_PER_SHARD);\n minShards = signal(1);\n maxShards = signal(void 0);\n};\n_ts_decorate([\n id(),\n _ts_metadata(\"design:type\", String)\n], RoomConfig.prototype, \"id\", void 0);\n_ts_decorate([\n sync()\n], RoomConfig.prototype, \"name\", void 0);\n_ts_decorate([\n sync()\n], RoomConfig.prototype, \"balancingStrategy\", void 0);\n_ts_decorate([\n sync()\n], RoomConfig.prototype, \"public\", void 0);\n_ts_decorate([\n sync()\n], RoomConfig.prototype, \"maxPlayersPerShard\", void 0);\n_ts_decorate([\n sync()\n], RoomConfig.prototype, \"minShards\", void 0);\n_ts_decorate([\n sync()\n], RoomConfig.prototype, \"maxShards\", void 0);\nvar ShardInfo = class ShardInfo2 {\n static {\n __name(this, \"ShardInfo\");\n }\n id;\n roomId = signal(\"\");\n url = signal(\"\");\n currentConnections = signal(0);\n maxConnections = signal(MAX_PLAYERS_PER_SHARD);\n status = signal(\"active\");\n lastHeartbeat = signal(0);\n};\n_ts_decorate([\n id(),\n _ts_metadata(\"design:type\", String)\n], ShardInfo.prototype, \"id\", void 0);\n_ts_decorate([\n sync()\n], ShardInfo.prototype, \"roomId\", void 0);\n_ts_decorate([\n sync()\n], ShardInfo.prototype, \"url\", void 0);\n_ts_decorate([\n sync({\n persist: false\n })\n], ShardInfo.prototype, \"currentConnections\", void 0);\n_ts_decorate([\n sync()\n], ShardInfo.prototype, \"maxConnections\", void 0);\n_ts_decorate([\n sync()\n], ShardInfo.prototype, \"status\", void 0);\n_ts_decorate([\n sync()\n], ShardInfo.prototype, \"lastHeartbeat\", void 0);\nvar WorldRoom = class {\n static {\n __name(this, \"WorldRoom\");\n }\n room;\n // Synchronized state\n rooms;\n shards;\n // Only persisted state (not synced to clients)\n rrCounters;\n // Configuration\n defaultShardUrlTemplate;\n defaultMaxConnectionsPerShard;\n constructor(room) {\n this.room = room;\n this.rooms = signal({});\n this.shards = signal({});\n this.rrCounters = signal({});\n this.defaultShardUrlTemplate = signal(\"{shardId}\");\n this.defaultMaxConnectionsPerShard = signal(MAX_PLAYERS_PER_SHARD);\n const { AUTH_JWT_SECRET, SHARD_SECRET } = this.room.env;\n if (!AUTH_JWT_SECRET) {\n throw new Error(\"AUTH_JWT_SECRET env variable is not set\");\n }\n if (!SHARD_SECRET) {\n throw new Error(\"SHARD_SECRET env variable is not set\");\n }\n }\n async onJoin(user, conn, ctx) {\n const canConnect = await guardManageWorld(user, ctx.request, this.room);\n conn.setState({\n ...conn.state,\n isAdmin: canConnect\n });\n }\n interceptorPacket(_, obj, conn) {\n if (!conn.state[\"isAdmin\"]) {\n return null;\n }\n return obj;\n }\n // Helper methods\n cleanupInactiveShards() {\n const now = Date.now();\n const timeout = 5 * 60 * 1e3;\n const shardsValue = this.shards();\n let hasChanges = false;\n Object.values(shardsValue).forEach((shard) => {\n if (now - shard.lastHeartbeat() > timeout) {\n delete this.shards()[shard.id];\n hasChanges = true;\n }\n });\n setTimeout(() => this.cleanupInactiveShards(), 6e4);\n }\n // Actions\n async registerRoom(req) {\n const roomConfig = await req.json();\n const roomId = roomConfig.name;\n if (!this.rooms()[roomId]) {\n const newRoom = new RoomConfig();\n newRoom.id = roomId;\n newRoom.name.set(roomConfig.name);\n newRoom.balancingStrategy.set(roomConfig.balancingStrategy);\n newRoom.public.set(roomConfig.public);\n newRoom.maxPlayersPerShard.set(roomConfig.maxPlayersPerShard);\n newRoom.minShards.set(roomConfig.minShards);\n newRoom.maxShards.set(roomConfig.maxShards);\n this.rooms()[roomId] = newRoom;\n if (roomConfig.minShards > 0) {\n for (let i = 0; i < roomConfig.minShards; i++) {\n await this.createShard(roomId);\n }\n }\n } else {\n const room = this.rooms()[roomId];\n room.balancingStrategy.set(roomConfig.balancingStrategy);\n room.public.set(roomConfig.public);\n room.maxPlayersPerShard.set(roomConfig.maxPlayersPerShard);\n room.minShards.set(roomConfig.minShards);\n room.maxShards.set(roomConfig.maxShards);\n }\n }\n async updateShardStats(req, res) {\n const body = await req.json();\n const { shardId, connections, status } = body;\n const shard = this.shards()[shardId];\n if (!shard) {\n return res.notFound(`Shard ${shardId} not found`);\n }\n shard.currentConnections.set(connections);\n if (status) {\n shard.status.set(status);\n }\n shard.lastHeartbeat.set(Date.now());\n }\n async scaleRoom(req, res) {\n const data = await req.json();\n const { targetShardCount, shardTemplate, roomId } = data;\n const room = this.rooms()[roomId];\n if (!room) {\n return res.notFound(`Room ${roomId} does not exist`);\n }\n const roomShards = Object.values(this.shards()).filter((shard) => shard.roomId() === roomId);\n const previousShardCount = roomShards.length;\n if (room.maxShards() !== void 0 && targetShardCount > room.maxShards()) {\n return res.badRequest(`Cannot scale beyond maximum allowed shards (${room.maxShards()})`, {\n roomId,\n currentShardCount: previousShardCount\n });\n }\n if (targetShardCount < previousShardCount) {\n const shardsToRemove = [\n ...roomShards\n ].sort((a, b) => {\n if (a.status() === \"draining\" && b.status() !== \"draining\") return -1;\n if (a.status() !== \"draining\" && b.status() === \"draining\") return 1;\n return a.currentConnections() - b.currentConnections();\n }).slice(0, previousShardCount - targetShardCount);\n const shardsToKeep = roomShards.filter((shard) => !shardsToRemove.some((s) => s.id === shard.id));\n for (const shard of shardsToRemove) {\n delete this.shards()[shard.id];\n }\n return;\n }\n if (targetShardCount > previousShardCount) {\n const newShards = [];\n for (let i = 0; i < targetShardCount - previousShardCount; i++) {\n const newShard = await this.createShard(roomId, shardTemplate?.urlTemplate, shardTemplate?.maxConnections);\n if (newShard) {\n newShards.push(newShard);\n }\n }\n }\n }\n async connect(req, res) {\n try {\n let data;\n try {\n const body = await req.text();\n if (!body || body.trim() === \"\") {\n return res.badRequest(\"Request body is empty\");\n }\n data = JSON.parse(body);\n } catch (parseError) {\n return res.badRequest(\"Invalid JSON in request body\");\n }\n if (!data.roomId) {\n return res.badRequest(\"roomId parameter is required\");\n }\n const autoCreate = data.autoCreate !== void 0 ? data.autoCreate : true;\n const result = await this.findOptimalShard(data.roomId, autoCreate);\n if (\"error\" in result) {\n return res.notFound(result.error);\n }\n return res.success({\n success: true,\n shardId: result.shardId,\n url: result.url\n });\n } catch (error) {\n console.error(\"Error connecting to shard:\", error);\n return res.serverError();\n }\n }\n async findOptimalShard(roomId, autoCreate = true) {\n let room = this.rooms()[roomId];\n if (!room) {\n if (autoCreate) {\n const mockRequest = {\n json: /* @__PURE__ */ __name(async () => ({\n name: roomId,\n balancingStrategy: \"round-robin\",\n public: true,\n maxPlayersPerShard: this.defaultMaxConnectionsPerShard(),\n minShards: 1,\n maxShards: void 0\n }), \"json\")\n };\n await this.registerRoom(mockRequest);\n room = this.rooms()[roomId];\n if (!room) {\n return {\n error: `Failed to create room ${roomId}`\n };\n }\n } else {\n return {\n error: `Room ${roomId} does not exist`\n };\n }\n }\n const roomShards = Object.values(this.shards()).filter((shard) => shard.roomId() === roomId);\n if (roomShards.length === 0) {\n if (autoCreate) {\n const newShard = await this.createShard(roomId);\n if (newShard) {\n return {\n shardId: newShard.id,\n url: newShard.url()\n };\n } else {\n return {\n error: `Failed to create shard for room ${roomId}`\n };\n }\n } else {\n return {\n error: `No shards available for room ${roomId}`\n };\n }\n }\n const activeShards = roomShards.filter((shard) => shard && shard.status() === \"active\");\n if (activeShards.length === 0) {\n return {\n error: `No active shards available for room ${roomId}`\n };\n }\n const balancingStrategy = room.balancingStrategy();\n let selectedShard;\n switch (balancingStrategy) {\n case \"least-connections\":\n selectedShard = activeShards.reduce((min, shard) => shard.currentConnections() < min.currentConnections() ? shard : min, activeShards[0]);\n break;\n case \"random\":\n selectedShard = activeShards[Math.floor(Math.random() * activeShards.length)];\n break;\n case \"round-robin\":\n default:\n const counter = this.rrCounters()[roomId] || 0;\n const nextCounter = (counter + 1) % activeShards.length;\n this.rrCounters()[roomId] = nextCounter;\n selectedShard = activeShards[counter];\n break;\n }\n return {\n shardId: selectedShard.id,\n url: selectedShard.url()\n };\n }\n // Private methods\n async createShard(roomId, urlTemplate, maxConnections) {\n const room = this.rooms()[roomId];\n if (!room) {\n console.error(`Cannot create shard for non-existent room: ${roomId}`);\n return null;\n }\n const shardId = `${roomId}:${Date.now()}-${Math.floor(Math.random() * 1e4)}`;\n const template = urlTemplate || this.defaultShardUrlTemplate();\n const url = template.replace(\"{shardId}\", shardId).replace(\"{roomId}\", roomId);\n const max = maxConnections || room.maxPlayersPerShard();\n const newShard = new ShardInfo();\n newShard.id = shardId;\n newShard.roomId.set(roomId);\n newShard.url.set(url);\n newShard.maxConnections.set(max);\n newShard.currentConnections.set(0);\n newShard.status.set(\"active\");\n newShard.lastHeartbeat.set(Date.now());\n this.shards()[shardId] = newShard;\n return newShard;\n }\n};\n_ts_decorate([\n sync(RoomConfig)\n], WorldRoom.prototype, \"rooms\", void 0);\n_ts_decorate([\n sync(ShardInfo)\n], WorldRoom.prototype, \"shards\", void 0);\n_ts_decorate([\n persist()\n], WorldRoom.prototype, \"rrCounters\", void 0);\n_ts_decorate([\n Request2({\n path: \"register-room\",\n method: \"POST\"\n }),\n Guard([\n guardManageWorld\n ]),\n _ts_metadata(\"design:type\", Function),\n _ts_metadata(\"design:paramtypes\", [\n typeof party_exports === \"undefined\" || typeof void 0 === \"undefined\" ? Object : void 0\n ]),\n _ts_metadata(\"design:returntype\", Promise)\n], WorldRoom.prototype, \"registerRoom\", null);\n_ts_decorate([\n Request2({\n path: \"update-shard\",\n method: \"POST\"\n }),\n Guard([\n guardManageWorld\n ]),\n _ts_metadata(\"design:type\", Function),\n _ts_metadata(\"design:paramtypes\", [\n typeof party_exports === \"undefined\" || typeof void 0 === \"undefined\" ? Object : void 0,\n typeof ServerResponse === \"undefined\" ? Object : ServerResponse\n ]),\n _ts_metadata(\"design:returntype\", Promise)\n], WorldRoom.prototype, \"updateShardStats\", null);\n_ts_decorate([\n Request2({\n path: \"scale-room\",\n method: \"POST\"\n }),\n Guard([\n guardManageWorld\n ]),\n _ts_metadata(\"design:type\", Function),\n _ts_metadata(\"design:paramtypes\", [\n typeof party_exports === \"undefined\" || typeof void 0 === \"undefined\" ? Object : void 0,\n typeof ServerResponse === \"undefined\" ? Object : ServerResponse\n ]),\n _ts_metadata(\"design:returntype\", Promise)\n], WorldRoom.prototype, \"scaleRoom\", null);\n_ts_decorate([\n Request2({\n path: \"connect\",\n method: \"POST\"\n }),\n _ts_metadata(\"design:type\", Function),\n _ts_metadata(\"design:paramtypes\", [\n typeof party_exports === \"undefined\" || typeof void 0 === \"undefined\" ? Object : void 0,\n typeof ServerResponse === \"undefined\" ? Object : ServerResponse\n ]),\n _ts_metadata(\"design:returntype\", Promise)\n], WorldRoom.prototype, \"connect\", null);\nWorldRoom = _ts_decorate([\n Room({\n path: \"world-{worldId}\",\n maxUsers: 100,\n throttleStorage: 2e3,\n throttleSync: 500\n }),\n _ts_metadata(\"design:type\", Function),\n _ts_metadata(\"design:paramtypes\", [\n typeof party_exports === \"undefined\" || typeof void 0 === \"undefined\" ? Object : void 0\n ])\n], WorldRoom);\n\n// src/session.guard.ts\nfunction createRequireSessionGuard(storage) {\n return async (sender, value) => {\n if (!sender || !sender.id) {\n return false;\n }\n try {\n const session = await storage.get(`session:${sender.id}`);\n if (!session) {\n return false;\n }\n const typedSession = session;\n if (!typedSession.publicId) {\n return false;\n }\n return true;\n } catch (error) {\n console.error(\"Error checking session in requireSession guard:\", error);\n return false;\n }\n };\n}\n__name(createRequireSessionGuard, \"createRequireSessionGuard\");\nvar requireSession = /* @__PURE__ */ __name(async (sender, value, room) => {\n if (!sender || !sender.id) {\n return false;\n }\n try {\n const session = await room.storage.get(`session:${sender.id}`);\n if (!session) {\n return false;\n }\n const typedSession = session;\n if (!typedSession.publicId) {\n return false;\n }\n return true;\n } catch (error) {\n console.error(\"Error checking session in requireSession guard:\", error);\n return false;\n }\n}, \"requireSession\");\nexport {\n Action,\n ClientIo,\n Guard,\n MockConnection,\n Request2 as Request,\n Room,\n RoomGuard,\n Server,\n ServerIo,\n ServerResponse,\n Shard,\n WorldRoom,\n createRequireSessionGuard,\n request,\n requireSession,\n testRoom,\n tick\n};\n//# sourceMappingURL=index.js.map"],"names":["dset2","generateShortUUID2","z2"],"mappings":"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","x_google_ignoreList":[0]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|