@colyseus/sdk 0.17.20 → 0.17.21

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.
Files changed (53) hide show
  1. package/build/3rd_party/discord.cjs +1 -1
  2. package/build/3rd_party/discord.mjs +1 -1
  3. package/build/Auth.cjs +1 -1
  4. package/build/Auth.mjs +1 -1
  5. package/build/Client.cjs +1 -1
  6. package/build/Client.cjs.map +1 -1
  7. package/build/Client.d.ts +9 -9
  8. package/build/Client.mjs +1 -1
  9. package/build/Client.mjs.map +1 -1
  10. package/build/Connection.cjs +1 -1
  11. package/build/Connection.mjs +1 -1
  12. package/build/HTTP.cjs +1 -1
  13. package/build/HTTP.mjs +1 -1
  14. package/build/Room.cjs +2 -2
  15. package/build/Room.cjs.map +1 -1
  16. package/build/Room.d.ts +2 -2
  17. package/build/Room.mjs +2 -2
  18. package/build/Room.mjs.map +1 -1
  19. package/build/Storage.cjs +1 -1
  20. package/build/Storage.mjs +1 -1
  21. package/build/core/nanoevents.cjs +1 -1
  22. package/build/core/nanoevents.mjs +1 -1
  23. package/build/core/signal.cjs +1 -1
  24. package/build/core/signal.mjs +1 -1
  25. package/build/core/utils.cjs +1 -1
  26. package/build/core/utils.mjs +1 -1
  27. package/build/debug.cjs +1 -1
  28. package/build/debug.mjs +1 -1
  29. package/build/errors/Errors.cjs +1 -1
  30. package/build/errors/Errors.mjs +1 -1
  31. package/build/index.cjs +1 -1
  32. package/build/index.mjs +1 -1
  33. package/build/legacy.cjs +1 -1
  34. package/build/legacy.mjs +1 -1
  35. package/build/serializer/NoneSerializer.cjs +1 -1
  36. package/build/serializer/NoneSerializer.mjs +1 -1
  37. package/build/serializer/SchemaSerializer.cjs +1 -1
  38. package/build/serializer/SchemaSerializer.mjs +1 -1
  39. package/build/serializer/Serializer.cjs +1 -1
  40. package/build/serializer/Serializer.mjs +1 -1
  41. package/build/transport/H3Transport.cjs +1 -1
  42. package/build/transport/H3Transport.mjs +1 -1
  43. package/build/transport/WebSocketTransport.cjs +1 -1
  44. package/build/transport/WebSocketTransport.mjs +1 -1
  45. package/dist/colyseus-cocos-creator.js +2 -2
  46. package/dist/colyseus-cocos-creator.js.map +1 -1
  47. package/dist/colyseus.js +2 -2
  48. package/dist/colyseus.js.map +1 -1
  49. package/dist/debug.js +2 -2
  50. package/dist/debug.js.map +1 -1
  51. package/package.json +4 -4
  52. package/src/Client.ts +21 -21
  53. package/src/Room.ts +11 -3
package/dist/debug.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"debug.js","sources":["../../../node_modules/.pnpm/@rollup+plugin-typescript@12.3.0_rollup@4.56.0_tslib@2.8.1_typescript@5.9.3/node_modules/tslib/tslib.es6.js","../src/errors/Errors.ts","../src/transport/H3Transport.ts","../src/transport/WebSocketTransport.ts","../src/Connection.ts","../src/serializer/Serializer.ts","../src/core/nanoevents.ts","../src/core/signal.ts","../src/serializer/SchemaSerializer.ts","../src/core/utils.ts","../src/Room.ts","../src/HTTP.ts","../src/Storage.ts","../src/Auth.ts","../src/3rd_party/discord.ts","../src/Client.ts","../src/debug.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\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;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","\nexport class ServerError<DATA=any> extends Error {\n public code: number;\n\n public headers?: Headers;\n public status?: number;\n public response?: Response;\n public data?: DATA;\n\n constructor(code: number, message: string, opts?: { headers?: Headers, status?: number, response?: Response, data?: any }) {\n super(message);\n\n this.name = \"ServerError\";\n this.code = code;\n\n if (opts) {\n this.headers = opts.headers;\n this.status = opts.status;\n this.response = opts.response;\n this.data = opts.data;\n }\n }\n}\n\nexport class AbortError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"AbortError\";\n }\n}\n\nexport class MatchMakeError extends Error {\n public code: number;\n constructor(message: string, code: number) {\n super(message);\n this.code = code;\n this.name = \"MatchMakeError\";\n Object.setPrototypeOf(this, MatchMakeError.prototype);\n }\n}","import { encode, decode, type Iterator } from '@colyseus/schema';\nimport type { ITransport, ITransportEventMap } from \"./ITransport.ts\";\n\nexport class H3TransportTransport implements ITransport {\n wt: WebTransport;\n isOpen: boolean = false;\n events: ITransportEventMap;\n\n reader: ReadableStreamDefaultReader;\n writer: WritableStreamDefaultWriter;\n\n unreliableReader: ReadableStreamDefaultReader<Uint8Array>;\n unreliableWriter: WritableStreamDefaultWriter<Uint8Array>;\n\n private lengthPrefixBuffer = new Uint8Array(9); // 9 bytes is the maximum length of a length prefix\n\n constructor(events: ITransportEventMap) {\n this.events = events;\n }\n\n public connect(url: string, options: any = {}) {\n const wtOpts: WebTransportOptions = options.fingerprint && ({\n // requireUnreliable: true,\n // congestionControl: \"default\", // \"low-latency\" || \"throughput\"\n\n serverCertificateHashes: [{\n algorithm: 'sha-256',\n value: new Uint8Array(options.fingerprint).buffer\n }]\n }) || undefined;\n\n this.wt = new WebTransport(url, wtOpts);\n\n this.wt.ready.then((e) => {\n console.log(\"WebTransport ready!\", e)\n this.isOpen = true;\n\n this.unreliableReader = this.wt.datagrams.readable.getReader();\n this.unreliableWriter = this.wt.datagrams.writable.getWriter();\n\n const incomingBidi = this.wt.incomingBidirectionalStreams.getReader();\n incomingBidi.read().then((stream) => {\n this.reader = stream.value.readable.getReader();\n this.writer = stream.value.writable.getWriter();\n\n // immediately write room/sessionId for establishing the room connection\n this.sendSeatReservation(options.roomId, options.sessionId, options.reconnectionToken, options.skipHandshake);\n\n // start reading incoming data\n this.readIncomingData();\n this.readIncomingUnreliableData();\n\n }).catch((e) => {\n console.error(\"failed to read incoming stream\", e);\n console.error(\"TODO: close the connection\");\n });\n\n // this.events.onopen(e);\n }).catch((e: WebTransportCloseInfo) => {\n // this.events.onerror(e);\n // this.events.onclose({ code: e.closeCode, reason: e.reason });\n console.log(\"WebTransport not ready!\", e)\n this._close();\n });\n\n this.wt.closed.then((e: WebTransportCloseInfo) => {\n console.log(\"WebTransport closed w/ success\", e)\n this.events.onclose({ code: e.closeCode, reason: e.reason });\n\n }).catch((e: WebTransportCloseInfo) => {\n console.log(\"WebTransport closed w/ error\", e)\n this.events.onerror(e);\n this.events.onclose({ code: e.closeCode, reason: e.reason });\n }).finally(() => {\n this._close();\n });\n }\n\n public send(data: Buffer | Uint8Array): void {\n const prefixLength = encode.number(this.lengthPrefixBuffer as any, data.length, { offset: 0 });\n const dataWithPrefixedLength = new Uint8Array(prefixLength + data.length);\n dataWithPrefixedLength.set(this.lengthPrefixBuffer.subarray(0, prefixLength), 0);\n dataWithPrefixedLength.set(data, prefixLength);\n this.writer.write(dataWithPrefixedLength);\n }\n\n public sendUnreliable(data: Buffer | Uint8Array): void {\n const prefixLength = encode.number(this.lengthPrefixBuffer as any, data.length, { offset: 0 });\n const dataWithPrefixedLength = new Uint8Array(prefixLength + data.length);\n dataWithPrefixedLength.set(this.lengthPrefixBuffer.subarray(0, prefixLength), 0);\n dataWithPrefixedLength.set(data, prefixLength);\n this.unreliableWriter.write(dataWithPrefixedLength);\n }\n\n public close(code?: number, reason?: string) {\n try {\n this.wt.close({ closeCode: code, reason: reason });\n } catch (e) {\n console.error(e);\n }\n }\n\n protected async readIncomingData() {\n let result: ReadableStreamReadResult<Uint8Array>;\n\n while (this.isOpen) {\n try {\n result = await this.reader.read();\n\n //\n // a single read may contain multiple messages\n // each message is prefixed with its length\n //\n\n const messages = result.value;\n const it: Iterator = { offset: 0 };\n do {\n //\n // QUESTION: should we buffer the message in case it's not fully read?\n //\n\n const length = decode.number(messages as any, it);\n this.events.onmessage({ data: messages.subarray(it.offset, it.offset + length) });\n it.offset += length;\n } while (it.offset < messages.length);\n\n } catch (e) {\n if (e.message.indexOf(\"session is closed\") === -1) {\n console.error(\"H3Transport: failed to read incoming data\", e);\n }\n break;\n }\n\n if (result.done) {\n break;\n }\n }\n }\n\n protected async readIncomingUnreliableData() {\n let result: ReadableStreamReadResult<Uint8Array>;\n\n while (this.isOpen) {\n try {\n result = await this.unreliableReader.read();\n\n //\n // a single read may contain multiple messages\n // each message is prefixed with its length\n //\n\n const messages = result.value;\n const it: Iterator = { offset: 0 };\n do {\n //\n // QUESTION: should we buffer the message in case it's not fully read?\n //\n\n const length = decode.number(messages as any, it);\n this.events.onmessage({ data: messages.subarray(it.offset, it.offset + length) });\n it.offset += length;\n } while (it.offset < messages.length);\n\n } catch (e) {\n if (e.message.indexOf(\"session is closed\") === -1) {\n console.error(\"H3Transport: failed to read incoming data\", e);\n }\n break;\n }\n\n if (result.done) {\n break;\n }\n }\n }\n\n protected sendSeatReservation (roomId: string, sessionId: string, reconnectionToken?: string, skipHandshake?: boolean) {\n const it: Iterator = { offset: 0 };\n const bytes: number[] = [];\n\n encode.string(bytes, roomId, it);\n encode.string(bytes, sessionId, it);\n\n if (reconnectionToken) {\n encode.string(bytes, reconnectionToken, it);\n }\n\n if (skipHandshake) {\n encode.boolean(bytes, 1, it);\n }\n\n this.writer.write(new Uint8Array(bytes).buffer);\n }\n\n protected _close() {\n this.isOpen = false;\n }\n\n}\n","import NodeWebSocket from \"ws\";\nimport { CloseCode } from \"@colyseus/shared-types\";\nimport type { ITransport, ITransportEventMap } from \"./ITransport.ts\";\n\nconst WebSocket = globalThis.WebSocket || NodeWebSocket;\n\nexport class WebSocketTransport implements ITransport {\n ws: WebSocket | NodeWebSocket;\n protocols?: string | string[];\n\n events: ITransportEventMap;\n\n constructor(events: ITransportEventMap) {\n this.events = events;\n }\n\n public send(data: Buffer | Uint8Array): void {\n this.ws.send(data);\n }\n\n public sendUnreliable(data: Uint8Array): void {\n console.warn(\"@colyseus/sdk: The WebSocket transport does not support unreliable messages\");\n }\n\n /**\n * @param url URL to connect to\n * @param headers custom headers to send with the connection (only supported in Node.js. Web Browsers do not allow setting custom headers)\n */\n public connect(url: string, headers?: any): void {\n try {\n // Node or Bun environments (supports custom headers)\n this.ws = new WebSocket(url, { headers, protocols: this.protocols });\n\n } catch (e) {\n // browser environment (custom headers not supported)\n this.ws = new WebSocket(url, this.protocols);\n }\n\n this.ws.binaryType = 'arraybuffer';\n this.ws.onopen = (event) => this.events.onopen?.(event);\n this.ws.onmessage = (event) => this.events.onmessage?.(event);\n this.ws.onclose = (event) => this.events.onclose?.(event);\n this.ws.onerror = (event) => this.events.onerror?.(event);\n }\n\n public close(code?: number, reason?: string) {\n //\n // trigger the onclose event immediately if the code is MAY_TRY_RECONNECT\n // when \"offline\" event is triggered, the close frame is delayed. this\n // way client can try to reconnect immediately.\n //\n if (code === CloseCode.MAY_TRY_RECONNECT && this.events.onclose) {\n this.ws.onclose = null;\n this.events.onclose({ code, reason });\n }\n\n // then we close the connection\n this.ws.close(code, reason);\n }\n\n get isOpen() {\n return this.ws.readyState === WebSocket.OPEN;\n }\n\n}\n","import type { ITransport, ITransportEventMap } from \"./transport/ITransport.ts\";\nimport { H3TransportTransport } from \"./transport/H3Transport.ts\";\nimport { WebSocketTransport } from \"./transport/WebSocketTransport.ts\";\nimport { CloseCode } from \"@colyseus/shared-types\";\n\nconst onOfflineListeners: (() => void)[] = [];\nconst hasGlobalEventListeners = typeof (addEventListener) === \"function\" && typeof (removeEventListener) === \"function\";\nif (hasGlobalEventListeners) {\n /**\n * Detects when the network is offline and closes all connections.\n * (When switching wifi networks, etc.)\n */\n addEventListener(\"offline\", () => {\n console.warn(`@colyseus/sdk: 🛑 Network offline. Closing ${onOfflineListeners.length} connection(s)`);\n onOfflineListeners.forEach((listener) => listener());\n }, false);\n}\n\nexport class Connection implements ITransport {\n transport: ITransport;\n events: ITransportEventMap = {};\n\n url?: string;\n options?: any;\n\n #_offlineListener = (hasGlobalEventListeners) ? () => this.close(CloseCode.MAY_TRY_RECONNECT) : null;\n\n constructor(protocol?: string) {\n switch (protocol) {\n case \"h3\":\n this.transport = new H3TransportTransport(this.events);\n break;\n\n default:\n this.transport = new WebSocketTransport(this.events);\n break;\n }\n }\n\n connect(url: string, options?: any): void {\n if (hasGlobalEventListeners) {\n const onOpen = this.events.onopen;\n this.events.onopen = (ev: any) => {\n onOfflineListeners.push(this.#_offlineListener);\n onOpen?.(ev);\n };\n\n const onClose = this.events.onclose;\n this.events.onclose = (ev: any) => {\n onOfflineListeners.splice(onOfflineListeners.indexOf(this.#_offlineListener), 1);\n onClose?.(ev);\n };\n }\n\n this.url = url;\n this.options = options;\n this.transport.connect(url, options);\n }\n\n send(data: Buffer | Uint8Array): void {\n this.transport.send(data);\n }\n\n sendUnreliable(data: Buffer | Uint8Array): void {\n this.transport.sendUnreliable(data);\n }\n\n reconnect(queryParams: { reconnectionToken: string, skipHandshake?: boolean }): void {\n const queryString = new URLSearchParams(queryParams as unknown as Record<string, string>).toString();\n this.transport.connect(`${this.url}&${queryString}`, this.options);\n }\n\n close(code?: number, reason?: string): void {\n this.transport.close(code, reason);\n }\n\n get isOpen() {\n return this.transport.isOpen;\n }\n\n}\n","import type { Iterator } from \"@colyseus/schema\";\n\nexport interface Serializer<State> {\n setState(data: Uint8Array, it?: Iterator): void;\n getState(): State;\n\n patch(data: Uint8Array, it?: Iterator): void;\n teardown(): void;\n\n handshake?(bytes: Uint8Array, it?: any): void;\n}\n\nconst serializers: { [id: string]: any } = {};\n\nexport function registerSerializer (id: string, serializer: any) {\n serializers[id] = serializer;\n}\n\nexport function getSerializer (id: string) {\n const serializer = serializers[id];\n if (!serializer) { throw new Error(\"missing serializer: \" + id); }\n return serializer;\n}","/**\n * The MIT License (MIT)\n *\n * Copyright 2016 Andrey Sitnik <andrey@sitnik.ru>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nexport type EventsMap = Record<string, (...args: any[]) => void>;\n\nexport interface Emitter<Events extends EventsMap> {\n events: { [K in keyof Events]?: Array<Events[K]> };\n emit<K extends keyof Events>(event: K, ...args: Parameters<Events[K]>): void;\n on<K extends keyof Events>(event: K, cb: Events[K]): () => void;\n}\n\nexport const createNanoEvents = <Events extends EventsMap = EventsMap>(): Emitter<Events> => ({\n emit(event, ...args) {\n let callbacks = this.events[event] || []\n for (let i = 0, length = callbacks.length; i < length; i++) {\n callbacks[i](...args)\n }\n },\n events: {},\n on(event, cb) {\n this.events[event]?.push(cb) || (this.events[event] = [cb])\n return () => {\n this.events[event] = this.events[event]?.filter(i => cb !== i)\n }\n }\n});","type FunctionParameters<T extends (...args: any[]) => any> =\n T extends (...args: infer P) => any\n ? P\n : never;\n\nexport class EventEmitter<CallbackSignature extends (...args: any[]) => any> {\n handlers: Array<CallbackSignature> = [];\n\n register(cb: CallbackSignature, once: boolean = false) {\n this.handlers.push(cb);\n return this;\n }\n\n invoke(...args: FunctionParameters<CallbackSignature>) {\n this.handlers.forEach((handler) => handler.apply(this, args));\n }\n\n invokeAsync(...args: FunctionParameters<CallbackSignature>) {\n return Promise.all(this.handlers.map((handler) => handler.apply(this, args)));\n }\n\n remove (cb: CallbackSignature) {\n const index = this.handlers.indexOf(cb);\n this.handlers[index] = this.handlers[this.handlers.length - 1];\n this.handlers.pop();\n }\n\n clear() {\n this.handlers = [];\n }\n}\n\nexport function createSignal<CallbackSignature extends (...args: any[]) => void | Promise<any>>()\n :\n {\n once: (cb: CallbackSignature) => void;\n remove: (cb: CallbackSignature) => void,\n invoke: (...args: FunctionParameters<CallbackSignature>) => void,\n invokeAsync: (...args: FunctionParameters<CallbackSignature>) => Promise<any[]>,\n clear: () => void,\n } & ((this: any, cb: CallbackSignature) => EventEmitter<CallbackSignature> )\n {\n const emitter = new EventEmitter<CallbackSignature>();\n\n function register(this: any, cb: CallbackSignature): EventEmitter<CallbackSignature> {\n return emitter.register(cb, this === null);\n };\n\n register.once = (cb: CallbackSignature) => {\n const callback: any = function (...args: any[]) {\n cb.apply(this, args);\n emitter.remove(callback);\n }\n emitter.register(callback);\n }\n register.remove = (cb: CallbackSignature) => emitter.remove(cb)\n register.invoke = (...args: FunctionParameters<CallbackSignature>) => emitter.invoke(...args);\n register.invokeAsync = (...args: FunctionParameters<CallbackSignature>) => emitter.invokeAsync(...args);\n register.clear = () => emitter.clear();\n\n return register;\n}","import { Schema, Decoder, Reflection, Iterator, getDecoderStateCallbacks } from \"@colyseus/schema\";\nimport type { Serializer } from \"./Serializer.ts\";\nimport type { Room } from \"../Room.ts\";\n\nexport type SchemaConstructor<T = Schema> = new (...args: any[]) => T;\n\n//\n// TODO: use a schema interface, which even having duplicate definitions, it could be used to get the callback proxy.\n//\n// ```ts\n// export type SchemaCallbackProxy<RoomState> = (<T extends ISchema>(instance: T) => CallbackProxy<T>);\n// export function getStateCallbacks<T extends ISchema>(room: Room<T>) {\n// ```\n//\nexport function getStateCallbacks<T>(room: Room<any, T>) {\n try {\n // SchemaSerializer\n // @ts-ignore\n return getDecoderStateCallbacks<T>((room['serializer'] as unknown as SchemaSerializer<T>).decoder);\n } catch (e) {\n // NoneSerializer\n return undefined;\n }\n}\n\nexport class SchemaSerializer<T extends Schema = any> implements Serializer<T> {\n state: T;\n decoder: Decoder<T>;\n\n setState(encodedState: Uint8Array, it?: Iterator) {\n this.decoder.decode(encodedState, it);\n }\n\n getState() {\n return this.state;\n }\n\n patch(patches: Uint8Array, it?: Iterator) {\n return this.decoder.decode(patches, it);\n }\n\n teardown() {\n this.decoder.root.clearRefs();\n }\n\n handshake(bytes: Uint8Array, it?: Iterator) {\n if (this.state) {\n //\n // TODO: validate definitions against concreate this.state instance\n //\n Reflection.decode(bytes, it); // no-op\n\n this.decoder = new Decoder(this.state);\n\n } else {\n // initialize reflected state from server\n this.decoder = Reflection.decode(bytes, it);\n this.state = this.decoder.state;\n }\n }\n}\n","import type { SDKTypes, Room as ServerRoom } from '@colyseus/core';\n\nexport function now(): number {\n return typeof(performance) !== 'undefined' ? performance.now() : Date.now();\n}\n\n/**\n * Infer the room constructor from ServerType based on the instance type.\n * This allows proper type inference for SDK Room methods like `send()` and `onMessage()`.\n */\nexport type InferRoomConstructor<ServerType extends SDKTypes, Instance> =\n // First, try to find a matching room constructor in ServerType['~rooms']\n ServerType extends SDKTypes<infer Rooms>\n ? {\n [K in keyof Rooms]: Instance extends InstanceType<Rooms[K]['~room']>\n ? Rooms[K]['~room']\n : never\n }[keyof Rooms]\n : // Fallback: create a synthetic constructor type from the instance\n (typeof ServerRoom) & { prototype: Instance };","import { CloseCode, Protocol, type InferState, type NormalizeRoomType, type ExtractRoomMessages, type ExtractRoomClientMessages, type ExtractMessageType } from '@colyseus/shared-types';\nimport { decode, Decoder, encode, Iterator, Schema } from '@colyseus/schema';\n\nimport { Packr, unpack } from '@colyseus/msgpackr';\n\nimport { Connection } from './Connection.ts';\nimport { getSerializer, Serializer } from './serializer/Serializer.ts';\n\n// The unused imports here are important for better `.d.ts` file generation\n// (Later merged with `dts-bundle-generator`)\nimport { createNanoEvents } from './core/nanoevents.ts';\nimport { createSignal } from './core/signal.ts';\n\nimport { SchemaConstructor, SchemaSerializer } from './serializer/SchemaSerializer.ts';\n\nimport { now } from './core/utils.ts';\n\n// Infer serializer type based on State: SchemaSerializer for Schema types, Serializer otherwise\nexport type InferSerializer<State> = [State] extends [Schema]\n ? SchemaSerializer<State>\n : Serializer<State>;\n\nexport interface RoomAvailable<Metadata = any> {\n name: string;\n roomId: string;\n clients: number;\n maxClients: number;\n metadata?: Metadata;\n}\n\nexport interface ReconnectionOptions {\n /**\n * The maximum number of reconnection attempts.\n */\n maxRetries: number;\n\n /**\n * The minimum delay between reconnection attempts.\n */\n minDelay: number;\n\n /**\n * The maximum delay between reconnection attempts.\n */\n maxDelay: number;\n\n /**\n * The minimum uptime of the room before reconnection attempts can be made.\n */\n minUptime: number;\n\n /**\n * The current number of reconnection attempts.\n */\n retryCount: number;\n\n /**\n * The initial delay between reconnection attempts.\n */\n delay: number;\n\n /**\n * The function to calculate the delay between reconnection attempts.\n * @param attempt - The current attempt number.\n * @param delay - The initial delay between reconnection attempts.\n * @returns The delay between reconnection attempts.\n */\n backoff: (attempt: number, delay: number) => number;\n\n /**\n * The maximum number of enqueued messages to buffer.\n */\n maxEnqueuedMessages: number;\n\n /**\n * Buffer for messages sent while connection is not open.\n * These messages will be sent once the connection is re-established.\n */\n enqueuedMessages: Array<{ data: Uint8Array }>;\n\n /**\n * Whether the room is currently reconnecting.\n */\n isReconnecting: boolean;\n}\n\nexport class Room<\n T = any,\n State = InferState<T, never>,\n> {\n public roomId: string;\n public sessionId: string;\n public reconnectionToken: string;\n\n public name: string;\n public connection: Connection;\n\n // Public signals\n public onStateChange = createSignal<(state: State) => void>();\n public onError = createSignal<(code: number, message?: string) => void>();\n public onLeave = createSignal<(code: number, reason?: string) => void>();\n\n public onReconnect = createSignal<() => void>();\n public onDrop = createSignal<(code: number, reason?: string) => void>();\n\n protected onJoin = createSignal();\n\n public serializerId: string;\n public serializer: InferSerializer<State>;\n\n // reconnection logic\n public reconnection: ReconnectionOptions = {\n retryCount: 0,\n maxRetries: 15,\n delay: 100,\n minDelay: 100,\n maxDelay: 5000,\n minUptime: 5000,\n backoff: exponentialBackoff,\n maxEnqueuedMessages: 10,\n enqueuedMessages: [],\n isReconnecting: false,\n };\n\n protected joinedAtTime: number = 0;\n\n protected onMessageHandlers = createNanoEvents();\n\n protected packr: Packr;\n\n #lastPingTime: number = 0;\n #pingCallback: (ms: number) => void;\n\n constructor(name: string, rootSchema?: SchemaConstructor<State>) {\n this.name = name;\n\n this.packr = new Packr();\n\n // msgpackr workaround: force buffer to be created.\n this.packr.encode(undefined);\n\n if (rootSchema) {\n const serializer: SchemaSerializer = new (getSerializer(\"schema\"));\n this.serializer = serializer;\n\n const state: State = new rootSchema();\n serializer.state = state;\n serializer.decoder = new Decoder(state as Schema);\n }\n\n this.onLeave(() => this.removeAllListeners());\n }\n\n public connect(endpoint: string, options?: any, headers?: any) {\n this.connection = new Connection(options.protocol);\n this.connection.events.onmessage = this.onMessageCallback.bind(this);\n this.connection.events.onclose = (e: CloseEvent) => {\n if (this.joinedAtTime === 0) {\n console.warn?.(`Room connection was closed unexpectedly (${e.code}): ${e.reason}`);\n this.onError.invoke(e.code, e.reason);\n return;\n }\n\n if (\n e.code === CloseCode.NO_STATUS_RECEIVED ||\n e.code === CloseCode.ABNORMAL_CLOSURE ||\n e.code === CloseCode.GOING_AWAY ||\n e.code === CloseCode.MAY_TRY_RECONNECT\n ) {\n this.onDrop.invoke(e.code, e.reason);\n this.handleReconnection();\n\n } else {\n this.onLeave.invoke(e.code, e.reason);\n this.destroy();\n }\n };\n\n this.connection.events.onerror = (e: CloseEvent) => {\n this.onError.invoke(e.code, e.reason);\n };\n\n /**\n * if local serializer has state, it means we don't need to receive the\n * handshake from the server\n */\n const skipHandshake = (this.serializer?.getState() !== undefined);\n\n if (options.protocol === \"h3\") {\n // FIXME: refactor this.\n const url = new URL(endpoint);\n this.connection.connect(url.origin, { ...options, skipHandshake });\n\n } else {\n this.connection.connect(`${endpoint}${skipHandshake ? \"?skipHandshake=1\" : \"\"}`, headers);\n }\n\n }\n\n public leave(consented: boolean = true): Promise<number> {\n return new Promise((resolve) => {\n this.onLeave((code) => resolve(code));\n\n if (this.connection) {\n if (consented) {\n this.packr.buffer[0] = Protocol.LEAVE_ROOM;\n this.connection.send(this.packr.buffer.subarray(0, 1));\n\n } else {\n this.connection.close();\n }\n\n } else {\n this.onLeave.invoke(CloseCode.CONSENTED);\n }\n });\n }\n\n public onMessage<MessageType extends keyof ExtractRoomClientMessages<NormalizeRoomType<T>>>(\n message: MessageType,\n callback: (payload: ExtractRoomClientMessages<NormalizeRoomType<T>>[MessageType]) => void\n ): () => void\n public onMessage<Payload = any>(type: \"*\", callback: (messageType: string | number, payload: Payload) => void): () => void\n public onMessage<Payload = any>(type: string | number, callback: (payload: Payload) => void): () => void\n public onMessage(type: '*' | string | number, callback: (...args: any[]) => void) {\n return this.onMessageHandlers.on(this.getMessageHandlerKey(type), callback);\n }\n\n public ping(callback: (ms: number) => void) {\n // skip if connection is not open\n if (!this.connection?.isOpen) {\n return;\n }\n\n this.#lastPingTime = now();\n this.#pingCallback = callback;\n this.packr.buffer[0] = Protocol.PING;\n this.connection.send(this.packr.buffer.subarray(0, 1));\n }\n\n public send<MessageType extends keyof ExtractRoomMessages<NormalizeRoomType<T>>>(\n messageType: MessageType,\n payload?: ExtractMessageType<ExtractRoomMessages<NormalizeRoomType<T>>[MessageType]>\n ): void\n public send<Payload = any>(messageType: string | number, payload?: Payload): void\n public send(messageType: string | number, payload?: any): void {\n const it: Iterator = { offset: 1 };\n this.packr.buffer[0] = Protocol.ROOM_DATA;\n\n if (typeof(messageType) === \"string\") {\n encode.string(this.packr.buffer as Buffer, messageType, it);\n\n } else {\n encode.number(this.packr.buffer as Buffer, messageType, it);\n }\n\n // force packr to use beginning of the buffer\n this.packr.position = 0;\n\n const data = (payload !== undefined)\n ? this.packr.pack(payload, 2048 + it.offset) // 2048 = RESERVE_START_SPACE\n : this.packr.buffer.subarray(0, it.offset);\n\n // If connection is not open, buffer the message\n if (!this.connection.isOpen) {\n enqueueMessage(this, new Uint8Array(data));\n } else {\n this.connection.send(data);\n }\n }\n\n public sendUnreliable<T = any>(type: string | number, message?: T): void {\n // If connection is not open, skip\n if (!this.connection.isOpen) { return; }\n\n const it: Iterator = { offset: 1 };\n this.packr.buffer[0] = Protocol.ROOM_DATA;\n\n if (typeof(type) === \"string\") {\n encode.string(this.packr.buffer as Buffer, type, it);\n\n } else {\n encode.number(this.packr.buffer as Buffer, type, it);\n }\n\n // force packr to use beginning of the buffer\n this.packr.position = 0;\n\n const data = (message !== undefined)\n ? this.packr.pack(message, 2048 + it.offset) // 2048 = RESERVE_START_SPACE\n : this.packr.buffer.subarray(0, it.offset);\n\n this.connection.sendUnreliable(data);\n }\n\n public sendBytes(type: string | number, bytes: Uint8Array) {\n const it: Iterator = { offset: 1 };\n this.packr.buffer[0] = Protocol.ROOM_DATA_BYTES;\n\n if (typeof(type) === \"string\") {\n encode.string(this.packr.buffer as Buffer, type, it);\n\n } else {\n encode.number(this.packr.buffer as Buffer, type, it);\n }\n\n // check if buffer needs to be resized\n // TODO: can we avoid this?\n if (bytes.byteLength + it.offset > this.packr.buffer.byteLength) {\n const newBuffer = new Uint8Array(it.offset + bytes.byteLength);\n newBuffer.set(this.packr.buffer);\n this.packr.useBuffer(newBuffer);\n }\n\n this.packr.buffer.set(bytes, it.offset);\n\n // If connection is not open, buffer the message\n if (!this.connection.isOpen) {\n enqueueMessage(this, this.packr.buffer.subarray(0, it.offset + bytes.byteLength));\n } else {\n this.connection.send(this.packr.buffer.subarray(0, it.offset + bytes.byteLength));\n }\n\n }\n\n public get state (): State {\n return this.serializer.getState();\n }\n\n public removeAllListeners() {\n this.onJoin.clear();\n this.onStateChange.clear();\n this.onError.clear();\n this.onLeave.clear();\n this.onMessageHandlers.events = {};\n\n if (this.serializer instanceof SchemaSerializer) {\n // Remove callback references\n this.serializer.decoder.root.callbacks = {};\n }\n }\n\n protected onMessageCallback(event: MessageEvent) {\n const buffer = new Uint8Array(event.data);\n\n const it: Iterator = { offset: 1 };\n const code = buffer[0];\n\n if (code === Protocol.JOIN_ROOM) {\n const reconnectionToken = decode.utf8Read(buffer as Buffer, it, buffer[it.offset++]);\n this.serializerId = decode.utf8Read(buffer as Buffer, it, buffer[it.offset++]);\n\n // Instantiate serializer if not locally available.\n if (!this.serializer) {\n const serializer = getSerializer(this.serializerId);\n this.serializer = new serializer();\n }\n\n // apply handshake on first join (no need to do this on reconnect)\n if (buffer.byteLength > it.offset && this.serializer.handshake) {\n this.serializer.handshake(buffer, it);\n }\n\n if (this.joinedAtTime === 0) {\n this.joinedAtTime = Date.now();\n this.onJoin.invoke();\n\n } else {\n console.info(`[Colyseus reconnection]: ${String.fromCodePoint(0x2705)} reconnection successful!`); // ✅\n this.reconnection.isReconnecting = false;\n this.onReconnect.invoke();\n }\n\n this.reconnectionToken = `${this.roomId}:${reconnectionToken}`;\n\n // acknowledge successfull JOIN_ROOM\n this.packr.buffer[0] = Protocol.JOIN_ROOM;\n this.connection.send(this.packr.buffer.subarray(0, 1));\n\n // Send any enqueued messages that were buffered while disconnected\n if (this.reconnection.enqueuedMessages.length > 0) {\n for (const message of this.reconnection.enqueuedMessages) {\n this.connection.send(message.data);\n }\n // Clear the buffer after sending\n this.reconnection.enqueuedMessages = [];\n }\n\n } else if (code === Protocol.ERROR) {\n const code = decode.number(buffer as Buffer, it);\n const message = decode.string(buffer as Buffer, it);\n\n this.onError.invoke(code, message);\n\n } else if (code === Protocol.LEAVE_ROOM) {\n this.leave();\n\n } else if (code === Protocol.ROOM_STATE) {\n this.serializer.setState(buffer, it);\n this.onStateChange.invoke(this.serializer.getState());\n\n } else if (code === Protocol.ROOM_STATE_PATCH) {\n this.serializer.patch(buffer, it);\n this.onStateChange.invoke(this.serializer.getState());\n\n } else if (code === Protocol.ROOM_DATA) {\n const type = (decode.stringCheck(buffer as Buffer, it))\n ? decode.string(buffer as Buffer, it)\n : decode.number(buffer as Buffer, it);\n\n const message = (buffer.byteLength > it.offset)\n ? unpack(buffer as Buffer, { start: it.offset })\n : undefined;\n\n this.dispatchMessage(type, message);\n\n } else if (code === Protocol.ROOM_DATA_BYTES) {\n const type = (decode.stringCheck(buffer as Buffer, it))\n ? decode.string(buffer as Buffer, it)\n : decode.number(buffer as Buffer, it);\n\n this.dispatchMessage(type, buffer.subarray(it.offset));\n\n } else if (code === Protocol.PING) {\n this.#pingCallback?.(Math.round(now() - this.#lastPingTime));\n this.#pingCallback = undefined;\n }\n }\n\n private dispatchMessage(type: string | number, message: any) {\n const messageType = this.getMessageHandlerKey(type);\n\n if (this.onMessageHandlers.events[messageType]) {\n this.onMessageHandlers.emit(messageType, message);\n\n } else if (this.onMessageHandlers.events['*']) {\n this.onMessageHandlers.emit('*', type, message);\n\n } else if (!messageType.startsWith(\"__\")) { // ignore internal messages\n console.warn?.(`@colyseus/sdk: onMessage() not registered for type '${type}'.`);\n }\n }\n\n private destroy () {\n if (this.serializer) {\n this.serializer.teardown();\n }\n }\n\n private getMessageHandlerKey(type: string | number): string {\n switch (typeof(type)) {\n // string\n case \"string\": return type;\n\n // number\n case \"number\": return `i${type}`;\n\n default: throw new Error(\"invalid message type.\");\n }\n }\n\n private handleReconnection() {\n if (Date.now() - this.joinedAtTime < this.reconnection.minUptime) {\n console.info(`[Colyseus reconnection]: ${String.fromCodePoint(0x274C)} Room has not been up for long enough for automatic reconnection. (min uptime: ${this.reconnection.minUptime}ms)`); // ❌\n return;\n }\n\n if (!this.reconnection.isReconnecting) {\n this.reconnection.retryCount = 0;\n this.reconnection.isReconnecting = true;\n }\n\n this.retryReconnection();\n }\n\n private retryReconnection() {\n this.reconnection.retryCount++;\n\n const delay = Math.min(this.reconnection.maxDelay, Math.max(this.reconnection.minDelay, this.reconnection.backoff(this.reconnection.retryCount, this.reconnection.delay)));\n console.info(`[Colyseus reconnection]: ${String.fromCodePoint(0x023F3)} will retry in ${(delay/1000).toFixed(1)} seconds...`); // 🔄\n\n // Wait before attempting reconnection\n setTimeout(() => {\n try {\n console.info(`[Colyseus reconnection]: ${String.fromCodePoint(0x1F504)} Re-establishing sessionId '${this.sessionId}' with roomId '${this.roomId}'... (attempt ${this.reconnection.retryCount} of ${this.reconnection.maxRetries})`); // 🔄\n this.connection.reconnect({\n reconnectionToken: this.reconnectionToken.split(\":\")[1],\n skipHandshake: true, // we already applied the handshake on first join\n });\n\n } catch (e) {\n console.log(\".reconnect() failed\", e);\n if (this.reconnection.retryCount < this.reconnection.maxRetries) {\n this.retryReconnection();\n } else {\n console.info(`[Colyseus reconnection]: ${String.fromCodePoint(0x274C)} Failed to reconnect. Is your server running? Please check server logs.`); // ❌\n }\n }\n }, delay);\n }\n}\n\nconst exponentialBackoff = (attempt: number, delay: number) => {\n return Math.floor(Math.pow(2, attempt) * delay);\n}\n\nfunction enqueueMessage(room: Room, message: Uint8Array) {\n room.reconnection.enqueuedMessages.push({ data: message });\n if (room.reconnection.enqueuedMessages.length > room.reconnection.maxEnqueuedMessages) {\n room.reconnection.enqueuedMessages.shift();\n }\n}","import type { Router, HasRequiredKeys, Prettify, UnionToIntersection, Endpoint, HTTPMethod } from \"@colyseus/better-call\";\nimport { ColyseusSDK } from \"./Client.ts\";\nimport { ServerError } from \"./errors/Errors.ts\";\n\n/**\n * TODO: we should clean up the types repetition in this file.\n */\n\n// Helper to check if a type is 'any'\ntype IsAny<T> = 0 extends 1 & T ? true : false;\n\n// Helper to check if a type resolves to any after indexed access\n// When T is any, T[K] is also any, but IsAny<T[K]> may not detect it due to deferred evaluation\n// We check multiple characteristics of 'any':\n// 1. Direct any check: IsAny<T>\n// 2. Accepts all string keys: string extends keyof T\n// 3. Accepts all number and symbol keys: for complete 'any' detection\ntype IsAnyOrAnyIndexed<T> = IsAny<T> extends true\n ? true\n : (string extends keyof T\n ? true\n : (number extends keyof T\n ? (symbol extends keyof T ? true : false)\n : false));\n\ntype HasRequired<\n T extends {\n body?: any;\n query?: any;\n params?: any;\n },\n> = T[\"body\"] extends object\n ? HasRequiredKeys<T[\"body\"]> extends true\n ? true\n : T[\"query\"] extends object\n ? HasRequiredKeys<T[\"query\"]> extends true\n ? true\n : T[\"params\"] extends object\n ? HasRequiredKeys<T[\"params\"]>\n : false\n : T[\"params\"] extends object\n ? HasRequiredKeys<T[\"params\"]>\n : false\n : T[\"query\"] extends object\n ? HasRequiredKeys<T[\"query\"]> extends true\n ? true\n : T[\"params\"] extends object\n ? HasRequiredKeys<T[\"params\"]>\n : false\n : T[\"params\"] extends object\n ? HasRequiredKeys<T[\"params\"]>\n : false;\n\ntype InferContext<T> = T extends (ctx: infer Ctx) => any\n ? Ctx extends object\n ? Ctx\n : never\n : never;\n\n// WithRequired - makes specific keys required\n// This works by spreading T and then overriding the specified keys to be non-nullable\ntype WithRequired<T, K extends keyof any> = Prettify<T & {\n [P in K & keyof T]-?: NonNullable<T[P]>\n}>;\n\ntype WithoutServerOnly<T extends Record<string, Endpoint>> = {\n [K in keyof T]: T[K] extends Endpoint<any, infer O>\n ? O extends { metadata: { SERVER_ONLY: true } }\n ? never\n : T[K]\n : T[K];\n};\n\n// Method-specific options type\ntype MethodOptions<API, M extends HTTPMethod> = API extends { [key: string]: infer T; }\n ? T extends Endpoint<any, infer O>\n ? O[\"method\"] extends M\n ? { [key in T[\"path\"]]: T; }\n : O[\"method\"] extends M[]\n ? M extends O[\"method\"][number]\n ? { [key in T[\"path\"]]: T; }\n : {}\n : O[\"method\"] extends \"*\"\n ? { [key in T[\"path\"]]: T; }\n : {}\n : {}\n : {};\n\nexport type RequiredOptionKeys<\n C extends {\n body?: any;\n query?: any;\n params?: any;\n },\n> = (C[\"body\"] extends object\n ? HasRequiredKeys<C[\"body\"]> extends true\n ? { body: true }\n : {}\n : {}) &\n (C[\"query\"] extends object\n ? HasRequiredKeys<C[\"query\"]> extends true\n ? { query: true }\n : {}\n : {}) &\n (C[\"params\"] extends object\n ? HasRequiredKeys<C[\"params\"]> extends true\n ? { params: true }\n : {}\n : {});\n\n\ntype CommonHeaders = {\n accept: \"application/json\" | \"text/plain\" | \"application/octet-stream\";\n \"content-type\": \"application/json\" | \"text/plain\" | \"application/x-www-form-urlencoded\" | \"multipart/form-data\" | \"application/octet-stream\";\n authorization: \"Bearer\" | \"Basic\";\n};\n\ntype FetchRequestOptions<\n Body = any,\n Query extends Record<string, any> = any,\n Params extends Record<string, any> | Array<string> | undefined = any, Res = any,\n ExtraOptions extends Record<string, any> = {}\n> = Prettify<ExtraOptions & Omit<RequestInit, \"body\"> & {\n// baseURL?: string;\n\n /**\n * Headers\n */\n headers?: CommonHeaders | Headers | HeadersInit;\n\n /**\n * Body\n */\n body?: Body;\n\n /**\n * Query parameters (key-value pairs)\n */\n query?: Query;\n\n /**\n * Dynamic parameters.\n *\n * If url is defined as /path/:id, params will be { id: string }\n */\n params?: Params;\n}>\n\ntype FetchResponse<T> = {\n raw: Response;\n data: T;\n headers: Headers;\n status: number;\n statusText: string;\n};\n\nexport function isJSONSerializable(value: any) {\n\tif (value === undefined) {\n\t\treturn false;\n\t}\n\tconst t = typeof value;\n\tif (t === \"string\" || t === \"number\" || t === \"boolean\" || t === null) {\n\t\treturn true;\n\t}\n\tif (t !== \"object\") {\n\t\treturn false;\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn true;\n\t}\n\tif (value.buffer) {\n\t\treturn false;\n\t}\n\treturn (\n\t\t(value.constructor && value.constructor.name === \"Object\") ||\n\t\ttypeof value.toJSON === \"function\"\n\t);\n}\n\nconst JSON_RE = /^application\\/(?:[\\w!#$%&*.^`~-]*\\+)?json(;.+)?$/i;\n\nexport type ResponseType = \"json\" | \"text\" | \"blob\";\nexport function detectResponseType(request: Response): ResponseType {\n\tconst _contentType = request.headers.get(\"content-type\");\n\tconst textTypes = new Set([\n\t\t\"image/svg\",\n\t\t\"application/xml\",\n\t\t\"application/xhtml\",\n\t\t\"application/html\",\n\t]);\n\tif (!_contentType) {\n\t\treturn \"json\";\n\t}\n\tconst contentType = _contentType.split(\";\").shift() || \"\";\n\tif (JSON_RE.test(contentType)) {\n\t\treturn \"json\";\n\t}\n\tif (textTypes.has(contentType) || contentType.startsWith(\"text/\")) {\n\t\treturn \"text\";\n\t}\n\treturn \"blob\";\n}\n\nfunction getURLWithQueryParams(url: string, option?: FetchRequestOptions) {\n\tconst { params, query } = option || {};\n\n\t// Parse the URL and extract existing query parameters\n\tconst [urlPath, urlQuery] = url.split(\"?\");\n\tlet path = urlPath;\n\n\t// Handle params substitution\n\tif (params) {\n\t\tif (Array.isArray(params)) {\n\t\t\tconst paramPaths = path.split(\"/\").filter((p) => p.startsWith(\":\"));\n\t\t\tfor (const [index, key] of paramPaths.entries()) {\n\t\t\t\tconst value = params[index];\n\t\t\t\tpath = path.replace(key, value);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (const [key, value] of Object.entries(params)) {\n\t\t\t\tpath = path.replace(`:${key}`, String(value));\n\t\t\t}\n\t\t}\n\t}\n\n\t// Merge query parameters from URL and options\n\tconst queryParams = new URLSearchParams(urlQuery);\n\tif (query) {\n\t\tfor (const [key, value] of Object.entries(query)) {\n\t\t\tif (value == null) continue;\n\t\t\tqueryParams.set(key, String(value));\n\t\t}\n\t}\n\n\t// Build final URL\n\tlet queryParamString = queryParams.toString();\n\tqueryParamString = queryParamString.length > 0 ? `?${queryParamString}`.replace(/\\+/g, \"%20\") : \"\";\n\n\treturn `${path}${queryParamString}`;\n}\n\ntype InferredAPI<R> = R extends { endpoints: Record<string, Endpoint> }\n ? WithoutServerOnly<R[\"endpoints\"]>\n : WithoutServerOnly<R & Record<string, Endpoint>>;\n\nexport class HTTP<R extends Router | Router[\"endpoints\"]> {\n public authToken: string | undefined;\n public options: FetchRequestOptions;\n\n private sdk: ColyseusSDK;\n\n constructor(sdk: ColyseusSDK, baseOptions: FetchRequestOptions) {\n this.sdk = sdk;\n this.options = baseOptions;\n }\n\n private async request<\n M extends HTTPMethod,\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, M>>> = Prettify<UnionToIntersection<MethodOptions<API, M>>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n method: M,\n path: K,\n options?: FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n > {\n return this.executeRequest(method, path, options);\n }\n\n // Overload for endpoints WITH required fields (body/query/params)\n get<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"GET\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"GET\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends true ? K : never),\n options: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : WithRequired<FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>, keyof RequiredOptionKeys<C>>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n // Overload for endpoints WITHOUT required fields (permissive when R is 'any')\n get<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"GET\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"GET\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends false ? K : never),\n options?: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n get(path: any, options?: any): Promise<any> {\n return this.request(\"GET\", path, options);\n }\n\n // Overload for endpoints WITH required fields (body/query/params)\n post<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"POST\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"POST\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: (IsAnyOrAnyIndexed<R> extends true ? string : never) | (IsAny<API> extends true ? string : never) | (HasRequired<C> extends true ? K : never),\n options: IsAnyOrAnyIndexed<R> extends true ? FetchRequestOptions<any, any, any> : (IsAny<API> extends true\n ? FetchRequestOptions<any, any, any>\n : WithRequired<FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>, keyof RequiredOptionKeys<C>>)\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n // Overload for endpoints WITHOUT required fields (permissive when R is 'any')\n post<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"POST\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"POST\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: (IsAnyOrAnyIndexed<R> extends true ? string : never) | (IsAny<API> extends true ? string : never) | (HasRequired<C> extends false ? K : never),\n options?: IsAnyOrAnyIndexed<R> extends true ? FetchRequestOptions<any, any, any> : (IsAny<API> extends true\n ? FetchRequestOptions<any, any, any>\n : FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>)\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n post(path: any, options?: any): Promise<any> {\n return this.request(\"POST\", path, options);\n }\n\n // Overload for endpoints WITH required fields (body/query/params)\n delete<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"DELETE\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"DELETE\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends true ? K : never),\n options: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : WithRequired<FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>, keyof RequiredOptionKeys<C>>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n // Overload for endpoints WITHOUT required fields (permissive when R is 'any')\n delete<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"DELETE\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"DELETE\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends false ? K : never),\n options?: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n delete(path: any, options?: any): Promise<any> {\n return this.request(\"DELETE\", path, options);\n }\n\n // Overload for endpoints WITH required fields (body/query/params)\n patch<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"PATCH\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"PATCH\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends true ? K : never),\n options: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : WithRequired<FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>, keyof RequiredOptionKeys<C>>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n // Overload for endpoints WITHOUT required fields (permissive when R is 'any')\n patch<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"PATCH\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"PATCH\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends false ? K : never),\n options?: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n patch(path: any, options?: any): Promise<any> {\n return this.request(\"PATCH\", path, options);\n }\n\n // Overload for endpoints WITH required fields (body/query/params)\n put<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"PUT\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"PUT\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends true ? K : never),\n options: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : WithRequired<FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>, keyof RequiredOptionKeys<C>>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n // Overload for endpoints WITHOUT required fields (permissive when R is 'any')\n put<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"PUT\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"PUT\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends false ? K : never),\n options?: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n put(path: any, options?: any): Promise<any> {\n return this.request(\"PUT\", path, options);\n }\n\n protected async executeRequest<M extends HTTPMethod>(\n method: M,\n path: any,\n requestOptions?: any\n ): Promise<any> {\n //\n // FIXME: if FormData is provided, merging \"baseOptions.body\" with\n // \"options.body\" will not work as intended\n //\n let body = (this.options.body)\n ? { ...this.options.body, ...(requestOptions?.body as object || {}) }\n : requestOptions?.body;\n\n const query = (this.options.query)\n ? { ...this.options.query, ...(requestOptions?.query as object || {}) }\n : requestOptions?.query;\n\n const params = (this.options.params)\n ? { ...this.options.params, ...(requestOptions?.params as object || {}) }\n : requestOptions?.params;\n\n const headers = new Headers(\n (this.options.headers)\n ? { ...this.options.headers, ...(requestOptions?.headers || {}) }\n : requestOptions?.headers\n );\n\n // Add Authorization header if authToken is set\n if (this.authToken && !headers.has(\"authorization\")) {\n headers.set(\"authorization\", `Bearer ${this.authToken}`);\n }\n\n // Stringify JSON-serializable objects for fetch() body\n if (isJSONSerializable(body) && typeof body === 'object' && body !== null) {\n if (!headers.has(\"content-type\")) {\n headers.set(\"content-type\", \"application/json\");\n }\n for (const [key, value] of Object.entries(body)) {\n if (value instanceof Date) {\n body[key] = value.toISOString();\n }\n }\n body = JSON.stringify(body);\n }\n\n const mergedOptions = {\n credentials: requestOptions?.credentials || \"include\",\n ...this.options,\n ...requestOptions,\n query,\n params,\n headers,\n body,\n method,\n };\n\n const url = getURLWithQueryParams(this.sdk['getHttpEndpoint'](path.toString()), mergedOptions);\n\n let raw: Response;\n try {\n raw = await fetch(url, mergedOptions);\n } catch (err: any) {\n // If it's an AbortError, re-throw as-is\n if (err.name === 'AbortError') {\n throw err;\n }\n // Re-throw with network error code at top level (e.g. ECONNREFUSED)\n const networkError: ServerError = new ServerError(err.cause?.code || err.code, err.message);\n networkError.response = raw;\n networkError.cause = err.cause;\n throw networkError;\n }\n const contentType = raw.headers.get(\"content-type\");\n\n let data: any;\n\n // TODO: improve content-type detection here!\n if (contentType?.indexOf(\"json\")) {\n data = await raw.json();\n\n } else if (contentType?.indexOf(\"text\")) {\n data = await raw.text();\n\n } else {\n data = await raw.blob();\n }\n\n if (!raw.ok) {\n throw new ServerError(data.code ?? raw.status, data.message ?? raw.statusText, {\n headers: raw.headers,\n status: raw.status,\n response: raw,\n data\n });\n }\n\n return {\n raw,\n data,\n headers: raw.headers,\n status: raw.status,\n statusText: raw.statusText,\n };\n }\n}\n","/// <reference path=\"../typings/cocos-creator.d.ts\" />\n\n/**\n * We do not assign 'storage' to window.localStorage immediatelly for React\n * Native compatibility. window.localStorage is not present when this module is\n * loaded.\n */\n\nlet storage: any;\n\nfunction getStorage(): Storage {\n if (!storage) {\n try {\n storage = (typeof (cc) !== 'undefined' && cc.sys && cc.sys.localStorage)\n ? cc.sys.localStorage // compatibility with cocos creator\n : window.localStorage; // RN does have window object at this point, but localStorage is not defined\n\n } catch (e) {\n // ignore error\n }\n }\n\n if (!storage && typeof (globalThis.indexedDB) !== 'undefined') {\n storage = new IndexedDBStorage();\n }\n\n if (!storage) {\n // mock localStorage if not available (Node.js or RN environment)\n storage = {\n cache: {},\n setItem: function (key, value) { this.cache[key] = value; },\n getItem: function (key) { this.cache[key]; },\n removeItem: function (key) { delete this.cache[key]; },\n };\n }\n\n return storage;\n}\n\nexport function setItem(key: string, value: string) {\n getStorage().setItem(key, value);\n}\n\nexport function removeItem(key: string) {\n getStorage().removeItem(key);\n}\n\nexport function getItem(key: string, callback: Function) {\n const value: any = getStorage().getItem(key);\n\n if (\n typeof (Promise) === 'undefined' || // old browsers\n !(value instanceof Promise)\n ) {\n // browser has synchronous return\n callback(value);\n\n } else {\n // react-native is asynchronous\n value.then((id) => callback(id));\n }\n}\n\n/**\n * When running in a Web Worker, we need to use IndexedDB to store data.\n */\nclass IndexedDBStorage {\n private dbPromise: Promise<IDBDatabase> = new Promise((resolve) => {\n const request = indexedDB.open('_colyseus_storage', 1);\n request.onupgradeneeded = () => request.result.createObjectStore('store');\n request.onsuccess = () => resolve(request.result);\n });\n\n private async tx(mode: IDBTransactionMode, fn: (store: IDBObjectStore) => IDBRequest) {\n const db = await this.dbPromise;\n const store = db.transaction('store', mode).objectStore('store');\n return fn(store);\n }\n\n setItem(key: string, value: string) {\n return this.tx('readwrite', store => store.put(value, key)).then();\n }\n\n async getItem(key: string) {\n const request = await this.tx('readonly', store => store.get(key));\n return new Promise<string | undefined>((resolve) => {\n request.onsuccess = () => resolve(request.result);\n });\n }\n\n removeItem(key: string) {\n return this.tx('readwrite', store => store.delete(key)).then();\n }\n}","import { HTTP } from \"./HTTP.ts\";\nimport { getItem, removeItem, setItem } from \"./Storage.ts\";\nimport { createNanoEvents } from './core/nanoevents.ts';\n\nexport interface AuthSettings {\n path: string;\n key: string;\n}\n\nexport interface PopupSettings {\n prefix: string;\n width: number;\n height: number;\n}\n\n/**\n * Response from getUserData()\n */\nexport interface UserDataResponse<UserData = any> {\n user: UserData;\n}\n\n/**\n * Response from authentication methods (login, register, anonymous, OAuth)\n */\nexport interface AuthResponse<UserData = any> {\n user: UserData;\n token: string;\n}\n\n/**\n * Response from sendPasswordResetEmail()\n */\nexport type ForgotPasswordResponse = boolean | unknown;\n\n/**\n * @deprecated Use AuthResponse instead\n */\nexport type AuthData<UserData = any> = AuthResponse<UserData>;\n\nexport class Auth<UserData = any> {\n settings: AuthSettings = {\n path: \"/auth\",\n key: \"colyseus-auth-token\",\n };\n\n #_initialized = false;\n #_signInWindow: WindowProxy | null = null;\n #_events = createNanoEvents<{\n change: (response: AuthResponse) => void;\n }>();\n\n protected http: HTTP<any>;\n\n constructor(http: HTTP<any>) {\n this.http = http;\n getItem(this.settings.key, (token: string) => this.token = token);\n }\n\n public set token(token: string) {\n this.http.authToken = token;\n }\n\n public get token(): string | undefined {\n return this.http.authToken;\n }\n\n public onChange<U = UserData>(callback: (response: AuthResponse<U | null>) => void) {\n const unbindChange = this.#_events.on(\"change\", callback);\n if (!this.#_initialized) {\n this.getUserData().then((userData) => {\n this.emitChange({ ...userData, token: this.token });\n\n }).catch((e) => {\n // user is not logged in, or service is down\n this.emitChange({ user: null, token: undefined });\n });\n }\n this.#_initialized = true;\n return unbindChange;\n }\n\n public async getUserData<U = UserData>(): Promise<UserDataResponse<U>> {\n if (this.token) {\n return (await this.http.get(`${this.settings.path}/userdata`)).data;\n } else {\n throw new Error(\"missing auth.token\");\n }\n }\n\n public async registerWithEmailAndPassword<U = UserData>(\n email: string,\n password: string,\n options?: any\n ): Promise<AuthResponse<U>> {\n const data = (await this.http.post(`${this.settings.path}/register`, {\n body: { email, password, options, },\n })).data;\n\n this.emitChange(data);\n\n return data;\n }\n\n public async signInWithEmailAndPassword<U = UserData>(\n email: string,\n password: string\n ): Promise<AuthResponse<U>> {\n const data = (await this.http.post(`${this.settings.path}/login`, {\n body: { email, password, },\n })).data;\n\n this.emitChange(data);\n\n return data;\n }\n\n public async signInAnonymously<U = UserData>(options?: any): Promise<AuthResponse<U>> {\n const data = (await this.http.post(`${this.settings.path}/anonymous`, {\n body: { options, }\n })).data;\n\n this.emitChange(data);\n\n return data;\n }\n\n public async sendPasswordResetEmail(email: string): Promise<ForgotPasswordResponse> {\n return (await this.http.post(`${this.settings.path}/forgot-password`, {\n body: { email, }\n })).data;\n }\n\n public async signInWithProvider<U = UserData>(\n providerName: string,\n settings: Partial<PopupSettings> = {}\n ): Promise<AuthResponse<U>> {\n return new Promise((resolve, reject) => {\n const w = settings.width || 480;\n const h = settings.height || 768;\n\n // forward existing token for upgrading\n const upgradingToken = this.token ? `?token=${this.token}` : \"\";\n\n // Capitalize first letter of providerName\n const title = `Login with ${(providerName[0].toUpperCase() + providerName.substring(1))}`;\n const url = this.http['sdk']['getHttpEndpoint'](`${(settings.prefix || `${this.settings.path}/provider`)}/${providerName}${upgradingToken}`);\n\n const left = (screen.width / 2) - (w / 2);\n const top = (screen.height / 2) - (h / 2);\n\n this.#_signInWindow = window.open(url, title, 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left);\n\n const onMessage = (event: MessageEvent) => {\n // TODO: it is a good idea to check if event.origin can be trusted!\n // if (event.origin.indexOf(window.location.hostname) === -1) { return; }\n\n // require 'user' and 'token' inside received data.\n if (event.data.user === undefined && event.data.token === undefined) { return; }\n\n clearInterval(rejectionChecker);\n this.#_signInWindow?.close();\n this.#_signInWindow = null;\n\n window.removeEventListener(\"message\", onMessage);\n\n if (event.data.error !== undefined) {\n reject(event.data.error);\n\n } else {\n resolve(event.data);\n this.emitChange(event.data);\n }\n }\n\n const rejectionChecker = setInterval(() => {\n if (!this.#_signInWindow || this.#_signInWindow.closed) {\n this.#_signInWindow = null;\n reject(\"cancelled\");\n window.removeEventListener(\"message\", onMessage);\n }\n }, 200);\n\n window.addEventListener(\"message\", onMessage);\n });\n }\n\n public async signOut(): Promise<void> {\n this.emitChange({ user: null, token: null });\n }\n\n private emitChange(authData: AuthResponse<UserData | null>) {\n if (authData.token !== undefined) {\n this.token = authData.token;\n\n if (authData.token === null) {\n removeItem(this.settings.key);\n\n } else {\n // store key in localStorage\n setItem(this.settings.key, authData.token);\n }\n }\n\n this.#_events.emit(\"change\", authData);\n }\n\n}\n","/**\n * Discord Embedded App SDK\n * https://github.com/colyseus/colyseus/issues/707\n *\n * All URLs must go through the local proxy from\n * https://<app_id>.discordsays.com/.proxy/<mapped_url>/...\n *\n * URL Mapping Examples:\n *\n * 1. Using Colyseus Cloud:\n * - /colyseus/{subdomain} -> {subdomain}.colyseus.cloud\n *\n * Example:\n * const client = new Client(\"https://xxxx.colyseus.cloud\");\n *\n * -------------------------------------------------------------\n *\n * 2. Using `cloudflared` tunnel:\n * - /colyseus/ -> <your-cloudflared-url>.trycloudflare.com\n *\n * Example:\n * const client = new Client(\"https://<your-cloudflared-url>.trycloudflare.com\");\n *\n * -------------------------------------------------------------\n *\n * 3. Providing a manual /.proxy/your-mapping:\n * - /your-mapping/ -> your-endpoint.com\n *\n * Example:\n * const client = new Client(\"/.proxy/your-mapping\");\n *\n */\nexport function discordURLBuilder (url: URL): string {\n const localHostname = window?.location?.hostname || \"localhost\";\n\n const remoteHostnameSplitted = url.hostname.split('.');\n const subdomain = (\n !url.hostname.includes(\"trycloudflare.com\") && // ignore cloudflared subdomains\n !url.hostname.includes(\"discordsays.com\") && // ignore discordsays.com subdomains\n remoteHostnameSplitted.length > 2\n )\n ? `/${remoteHostnameSplitted[0]}`\n : '';\n\n return (url.pathname.startsWith(\"/.proxy\"))\n ? `${url.protocol}//${localHostname}${subdomain}${url.pathname}${url.search}`\n : `${url.protocol}//${localHostname}/.proxy/colyseus${subdomain}${url.pathname}${url.search}`;\n}\n","import { CloseCode, Protocol, type SDKTypes, type ServerRoomLike, type ISeatReservation } from '@colyseus/shared-types';\n\nimport { MatchMakeError, ServerError } from './errors/Errors.ts';\nimport { Room } from './Room.ts';\nimport { SchemaConstructor } from './serializer/SchemaSerializer.ts';\nimport { HTTP } from './HTTP.ts';\nimport { Auth } from './Auth.ts';\nimport { Connection } from './Connection.ts';\nimport { discordURLBuilder } from './3rd_party/discord.ts';\n\nexport type JoinOptions = any;\nexport type { ISeatReservation };\n\n// - React Native does not provide `window.location`\n// - Cocos Creator (Native) does not provide `window.location.hostname`\nconst DEFAULT_ENDPOINT = (typeof (window) !== \"undefined\" && typeof (window?.location?.hostname) !== \"undefined\")\n ? `${window.location.protocol.replace(\"http\", \"ws\")}//${window.location.hostname}${(window.location.port && `:${window.location.port}`)}`\n : \"ws://127.0.0.1:2567\";\n\nexport interface EndpointSettings {\n hostname: string,\n secure: boolean,\n port?: number,\n pathname?: string,\n searchParams?: string,\n protocol?: \"ws\" | \"h3\";\n}\n\nexport interface ClientOptions {\n headers?: { [id: string]: string };\n urlBuilder?: (url: URL) => string;\n protocol?: \"ws\" | \"h3\";\n}\n\nexport interface LatencyOptions {\n /** \"ws\" for WebSocket, \"h3\" for WebTransport (default: \"ws\") */\n protocol?: \"ws\" | \"h3\";\n /** Number of pings to send (default: 1). Returns the average latency when > 1. */\n pingCount?: number;\n}\n\nexport class ColyseusSDK<ServerType extends SDKTypes = any, UserData = any> {\n static VERSION = \"0.17\";\n\n /**\n * The HTTP client to make requests to the server.\n */\n public http: HTTP<ServerType['~routes']>;\n\n /**\n * The authentication module to authenticate into requests and rooms.\n */\n public auth: Auth<UserData>;\n\n /**\n * The settings used to connect to the server.\n */\n public settings: EndpointSettings;\n\n protected urlBuilder: (url: URL) => string;\n\n constructor(\n settings: string | EndpointSettings = DEFAULT_ENDPOINT,\n options?: ClientOptions,\n ) {\n if (typeof (settings) === \"string\") {\n\n //\n // endpoint by url\n //\n const url = (settings.startsWith(\"/\"))\n ? new URL(settings, DEFAULT_ENDPOINT)\n : new URL(settings);\n\n const secure = (url.protocol === \"https:\" || url.protocol === \"wss:\");\n const port = Number(url.port || (secure ? 443 : 80));\n\n this.settings = {\n hostname: url.hostname,\n pathname: url.pathname,\n port,\n secure,\n searchParams: url.searchParams.toString() || undefined,\n };\n\n } else {\n //\n // endpoint by settings\n //\n if (settings.port === undefined) {\n settings.port = (settings.secure) ? 443 : 80;\n }\n if (settings.pathname === undefined) {\n settings.pathname = \"\";\n }\n this.settings = settings;\n }\n\n // make sure pathname does not end with \"/\"\n if (this.settings.pathname.endsWith(\"/\")) {\n this.settings.pathname = this.settings.pathname.slice(0, -1);\n }\n\n // specify room connection protocol if provided\n if (options?.protocol) {\n this.settings.protocol = options.protocol;\n }\n\n this.http = new HTTP(this, {\n headers: options?.headers || {},\n });\n this.auth = new Auth(this.http);\n\n this.urlBuilder = options?.urlBuilder;\n\n //\n // Discord Embedded SDK requires a custom URL builder\n //\n if (\n !this.urlBuilder &&\n typeof (window) !== \"undefined\" &&\n window?.location?.hostname?.includes(\"discordsays.com\")\n ) {\n this.urlBuilder = discordURLBuilder;\n console.log(\"Colyseus SDK: Discord Embedded SDK detected. Using custom URL builder.\");\n }\n }\n\n /**\n * Select the endpoint with the lowest latency.\n * @param endpoints Array of endpoints to select from.\n * @param options Client options.\n * @param latencyOptions Latency measurement options (protocol, pingCount).\n * @returns The client with the lowest latency.\n */\n static async selectByLatency<ServerType extends SDKTypes = any, UserData = any>(\n endpoints: Array<string | EndpointSettings>,\n options?: ClientOptions,\n latencyOptions: LatencyOptions = {}\n ) {\n const clients = endpoints.map(endpoint => new ColyseusSDK<ServerType, UserData>(endpoint, options));\n\n const latencies = (await Promise.allSettled(clients.map((client, index) => client.getLatency(latencyOptions).then(latency => {\n const settings = clients[index].settings;\n console.log(`🛜 Endpoint Latency: ${latency}ms - ${settings.hostname}:${settings.port}${settings.pathname}`);\n return [index, latency]\n }))))\n .filter((result) => result.status === 'fulfilled')\n .map(result => result.value);\n\n if (latencies.length === 0) {\n throw new Error('All endpoints failed to respond');\n }\n\n return clients[latencies.sort((a, b) => a[1] - b[1])[0][0]];\n }\n\n // Overload: Use room name from ServerType to infer room type\n public async joinOrCreate<R extends keyof ServerType['~rooms']>(\n roomName: R,\n options?: Parameters<ServerType['~rooms'][R]['~room']['prototype']['onJoin']>[1],\n rootSchema?: SchemaConstructor<ServerType>\n ): Promise<Room<ServerType['~rooms'][R]['~room']>>\n // Overload: Pass RoomType directly to extract state\n public async joinOrCreate<RoomType extends ServerRoomLike>(\n roomName: string,\n options?: Parameters<RoomType['onJoin']>[1],\n rootSchema?: SchemaConstructor<RoomType['state']>\n ): Promise<Room<RoomType, RoomType['state']>>\n // Overload: Pass State type directly\n public async joinOrCreate<State = any>(\n roomName: string,\n options?: JoinOptions,\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<any, State>>\n // Implementation\n public async joinOrCreate<T = any>(roomName: string, options: JoinOptions = {}, rootSchema?: SchemaConstructor<T>) {\n return await this.createMatchMakeRequest<T>('joinOrCreate', roomName, options, rootSchema);\n }\n\n // Overload: Use room name from ServerType to infer room type\n public async create<R extends keyof ServerType['~rooms']>(\n roomName: R,\n options?: Parameters<ServerType['~rooms'][R]['~room']['prototype']['onJoin']>[1],\n rootSchema?: SchemaConstructor<ServerType>\n ): Promise<Room<ServerType['~rooms'][R]['~room']>>\n // Overload: Pass RoomType directly to extract state\n public async create<RoomType extends ServerRoomLike>(\n roomName: string,\n options?: Parameters<RoomType['onJoin']>[1],\n rootSchema?: SchemaConstructor<RoomType['state']>\n ): Promise<Room<RoomType, RoomType['state']>>\n // Overload: Pass State type directly\n public async create<State = any>(\n roomName: string,\n options?: JoinOptions,\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<any, State>>\n // Implementation\n public async create<T = any>(roomName: string, options: JoinOptions = {}, rootSchema?: SchemaConstructor<T>) {\n return await this.createMatchMakeRequest<T>('create', roomName, options, rootSchema);\n }\n\n // Overload: Use room name from ServerType to infer room type\n public async join<R extends keyof ServerType['~rooms']>(\n roomName: R,\n options?: Parameters<ServerType['~rooms'][R]['~room']['prototype']['onJoin']>[1],\n rootSchema?: SchemaConstructor<ServerType>\n ): Promise<Room<ServerType['~rooms'][R]['~room']>>\n // Overload: Pass RoomType directly to extract state\n public async join<RoomType extends ServerRoomLike>(\n roomName: string,\n options?: Parameters<RoomType['onJoin']>[1],\n rootSchema?: SchemaConstructor<RoomType['state']>\n ): Promise<Room<RoomType, RoomType['state']>>\n // Overload: Pass State type directly\n public async join<State = any>(\n roomName: string,\n options?: JoinOptions,\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<any, State>>\n // Implementation\n public async join<T = any>(roomName: string, options: JoinOptions = {}, rootSchema?: SchemaConstructor<T>) {\n return await this.createMatchMakeRequest<T>('join', roomName, options, rootSchema);\n }\n\n // Overload: Use room name from ServerType to infer room type\n public async joinById<R extends keyof ServerType['~rooms']>(\n roomName: R,\n options?: Parameters<ServerType['~rooms'][R]['~room']['prototype']['onJoin']>[1],\n rootSchema?: SchemaConstructor<ServerType>\n ): Promise<Room<ServerType['~rooms'][R]['~room']>>\n // Overload: Pass RoomType directly to extract state\n public async joinById<RoomType extends ServerRoomLike>(\n roomId: string,\n options?: Parameters<RoomType['onJoin']>[1],\n rootSchema?: SchemaConstructor<RoomType['state']>\n ): Promise<Room<RoomType, RoomType['state']>>\n // Overload: Pass State type directly\n public async joinById<State = any>(\n roomId: string,\n options?: JoinOptions,\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<any, State>>\n // Implementation\n public async joinById<T = any>(roomId: string, options: JoinOptions = {}, rootSchema?: SchemaConstructor<T>) {\n return await this.createMatchMakeRequest<T>('joinById', roomId, options, rootSchema);\n }\n\n /**\n * Re-establish connection with a room this client was previously connected to.\n *\n * @param reconnectionToken The `room.reconnectionToken` from previously connected room.\n * @param rootSchema (optional) Concrete root schema definition\n * @returns Promise<Room>\n */\n // Overload: Use room name from ServerType to infer room type\n public async reconnect<R extends keyof ServerType['~rooms']>(reconnectionToken: string, roomName?: R): Promise<Room<ServerType['~rooms'][R]['~room']>>\n // Overload: Pass RoomType directly to extract state\n public async reconnect<RoomType extends ServerRoomLike>(\n reconnectionToken: string,\n rootSchema?: SchemaConstructor<RoomType['state']>\n ): Promise<Room<RoomType, RoomType['state']>>\n // Overload: Pass State type directly\n public async reconnect<State = any>(\n reconnectionToken: string,\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<any, State>>\n // Implementation\n public async reconnect<T = any>(reconnectionToken: string, rootSchema?: SchemaConstructor<T>) {\n if (typeof (reconnectionToken) === \"string\" && typeof (rootSchema) === \"string\") {\n throw new Error(\"DEPRECATED: .reconnect() now only accepts 'reconnectionToken' as argument.\\nYou can get this token from previously connected `room.reconnectionToken`\");\n }\n const [roomId, token] = reconnectionToken.split(\":\");\n\t\tif (!roomId || !token) {\n\t\t\tthrow new Error(\"Invalid reconnection token format.\\nThe format should be roomId:reconnectionToken\");\n\t\t}\n return await this.createMatchMakeRequest<T>('reconnect', roomId, { reconnectionToken: token }, rootSchema);\n }\n\n public async consumeSeatReservation<T>(\n response: ISeatReservation,\n rootSchema?: SchemaConstructor<T>\n ): Promise<Room<any, T>> {\n const room = this.createRoom<T>(response.name, rootSchema);\n room.roomId = response.roomId;\n room.sessionId = response.sessionId;\n\n const options: any = { sessionId: room.sessionId };\n\n // forward \"reconnection token\" in case of reconnection.\n if (response.reconnectionToken) {\n options.reconnectionToken = response.reconnectionToken;\n }\n\n room.connect(\n this.buildEndpoint(response, options),\n response,\n this.http.options.headers\n );\n\n return new Promise((resolve, reject) => {\n const onError = (code, message) => reject(new ServerError(code, message));\n room.onError.once(onError);\n\n room['onJoin'].once(() => {\n room.onError.remove(onError);\n resolve(room);\n });\n });\n }\n\n /**\n * Create a new connection with the server, and measure the latency.\n * @param options Latency measurement options (protocol, pingCount).\n */\n public getLatency(options: LatencyOptions = {}): Promise<number> {\n const protocol = options.protocol ?? \"ws\";\n const pingCount = options.pingCount ?? 1;\n\n return new Promise<number>((resolve, reject) => {\n const conn = new Connection(protocol);\n const latencies: number[] = [];\n let pingStart = 0;\n\n conn.events.onopen = () => {\n pingStart = Date.now();\n conn.send(new Uint8Array([Protocol.PING]));\n };\n\n conn.events.onmessage = (_: MessageEvent) => {\n latencies.push(Date.now() - pingStart);\n\n if (latencies.length < pingCount) {\n // Send another ping\n pingStart = Date.now();\n conn.send(new Uint8Array([Protocol.PING]));\n } else {\n // Done, calculate average and close\n conn.close();\n const average = latencies.reduce((sum, l) => sum + l, 0) / latencies.length;\n resolve(average);\n }\n };\n\n conn.events.onerror = (event: ErrorEvent) => {\n reject(new ServerError(CloseCode.ABNORMAL_CLOSURE, `Failed to get latency: ${event.message}`));\n };\n\n conn.connect(this.getHttpEndpoint());\n });\n }\n\n protected async createMatchMakeRequest<T>(\n method: string,\n roomName: string,\n options: JoinOptions = {},\n rootSchema?: SchemaConstructor<T>,\n ) {\n try {\n const httpResponse = await (this.http as HTTP<any>).post(`/matchmake/${method}/${roomName}`, {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n },\n body: options\n });\n\n const response = httpResponse.data as unknown as ISeatReservation;\n\n // forward reconnection token during \"reconnect\" methods.\n if (method === \"reconnect\") {\n response.reconnectionToken = options.reconnectionToken;\n }\n\n return await this.consumeSeatReservation<T>(response, rootSchema);\n } catch (error) {\n if (error instanceof ServerError) {\n throw new MatchMakeError(error.message, error.code);\n }\n throw error;\n }\n }\n\n protected createRoom<T>(roomName: string, rootSchema?: SchemaConstructor<T>) {\n return new Room<any, T>(roomName, rootSchema);\n }\n\n protected buildEndpoint(seatReservation: ISeatReservation, options: any = {}) {\n let protocol: string = this.settings.protocol || \"ws\";\n let searchParams = this.settings.searchParams || \"\";\n\n // forward authentication token\n if (this.http.authToken) {\n options['_authToken'] = this.http.authToken;\n }\n\n // append provided options\n for (const name in options) {\n if (!options.hasOwnProperty(name)) {\n continue;\n }\n searchParams += (searchParams ? '&' : '') + `${name}=${options[name]}`;\n }\n\n if (protocol === \"h3\") {\n protocol = \"http\";\n }\n\n let endpoint = (this.settings.secure)\n ? `${protocol}s://`\n : `${protocol}://`;\n\n if (seatReservation.publicAddress) {\n endpoint += `${seatReservation.publicAddress}`;\n\n } else {\n endpoint += `${this.settings.hostname}${this.getEndpointPort()}${this.settings.pathname}`;\n }\n\n const endpointURL = `${endpoint}/${seatReservation.processId}/${seatReservation.roomId}?${searchParams}`;\n return (this.urlBuilder)\n ? this.urlBuilder(new URL(endpointURL))\n : endpointURL;\n }\n\n protected getHttpEndpoint(segments: string = '') {\n const path = segments.startsWith(\"/\") ? segments : `/${segments}`;\n\n let endpointURL = `${(this.settings.secure) ? \"https\" : \"http\"}://${this.settings.hostname}${this.getEndpointPort()}${this.settings.pathname}${path}`;\n\n if (this.settings.searchParams) {\n endpointURL += `?${this.settings.searchParams}`;\n }\n\n return (this.urlBuilder)\n ? this.urlBuilder(new URL(endpointURL))\n : endpointURL;\n }\n\n protected getEndpointPort() {\n return (this.settings.port !== 80 && this.settings.port !== 443)\n ? `:${this.settings.port}`\n : \"\";\n }\n}\n\nexport const Client = ColyseusSDK;\nexport type Client<ServerType extends SDKTypes = any, UserData = any> = InstanceType<typeof ColyseusSDK<ServerType, UserData>>;","import { Client } from \"./Client.ts\";\nimport type { Room } from \"./Room.ts\";\nimport type { WebSocketTransport } from \"./transport/WebSocketTransport.ts\";\nimport { CloseCode } from \"@colyseus/shared-types\";\n\nconst logoIcon = `<svg viewBox=\"0 0 488.94 541.2\" style=\"width: 100%; height: 100%;\">\n <g>\n <g>\n <path fill=\"#ffffff\" d=\"m80.42,197.14c13.82,11.25,30.56,22.25,50.78,32.11,14.87-28.67,72.09-100.71,233.32-79.68l-14.4-55.35c-200.24-17.18-257.81,77.11-269.7,102.92Z\"/>\n <path fill=\"#ffffff\" d=\"m44.53,167.77c22.44-40.73,99.17-124.23,290.19-105.83L310.19,1.59S109.9-21.63,8.9,109.47c3.62,10.55,13.31,33.34,35.63,58.29Z\"/>\n <path fill=\"#ffffff\" d=\"m407.7,291.25c-32.14,3.35-62.02,4.95-89.63,4.95C123.09,296.2,36.78,219.6,0,164.95v251.98s15.77,162.98,488.94,115.66l-81.24-241.33Z\"/>\n </g>\n </g>\n</svg>`;\nconst envelopeUp = `<svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 16 16\" height=\"16\" width=\"16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 4a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v4.5a.5.5 0 0 1-1 0V5.383l-7 4.2-1.326-.795-5.64 3.47A1 1 0 0 0 2 13h5.5a.5.5 0 0 1 0 1H2a2 2 0 0 1-2-1.99zm1 7.105 4.708-2.897L1 5.383zM1 4v.217l7 4.2 7-4.2V4a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1\"></path><path d=\"M12.5 16a3.5 3.5 0 1 0 0-7 3.5 3.5 0 0 0 0 7m.354-5.354 1.25 1.25a.5.5 0 0 1-.708.708L13 12.207V14a.5.5 0 0 1-1 0v-1.717l-.28.305a.5.5 0 0 1-.737-.676l1.149-1.25a.5.5 0 0 1 .722-.016\"></path></svg>`;\nconst envelopeDown = `<svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 16 16\" height=\"16\" width=\"16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 4a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v4.5a.5.5 0 0 1-1 0V5.383l-7 4.2-1.326-.795-5.64 3.47A1 1 0 0 0 2 13h5.5a.5.5 0 0 1 0 1H2a2 2 0 0 1-2-1.99zm1 7.105 4.708-2.897L1 5.383zM1 4v.217l7 4.2 7-4.2V4a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1\"></path><path d=\"M12.5 16a3.5 3.5 0 1 0 0-7 3.5 3.5 0 0 0 0 7m.354-1.646a.5.5 0 0 1-.722-.016l-1.149-1.25a.5.5 0 1 1 .737-.676l.28.305V11a.5.5 0 0 1 1 0v1.793l.396-.397a.5.5 0 0 1 .708.708z\"></path></svg>`;\nconst messageIcon = `<svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 512 512\" height=\"200px\" width=\"200px\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M498.1 5.6c10.1 7 15.4 19.1 13.5 31.2l-64 416c-1.5 9.7-7.4 18.2-16 23s-18.9 5.4-28 1.6L284 427.7l-68.5 74.1c-8.9 9.7-22.9 12.9-35.2 8.1S160 493.2 160 480V396.4c0-4 1.5-7.8 4.2-10.7L331.8 202.8c5.8-6.3 5.6-16-.4-22s-15.7-6.4-22-.7L106 360.8 17.7 316.6C7.1 311.3 .3 300.7 0 288.9s5.9-22.8 16.1-28.7l448-256c10.7-6.1 23.9-5.5 34 1.4z\"/></svg>`;\nconst treeViewIcon = `<svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 256 256\" height=\"200px\" width=\"200px\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M160,136v-8H88v64a8,8,0,0,0,8,8h64v-8a16,16,0,0,1,16-16h32a16,16,0,0,1,16,16v32a16,16,0,0,1-16,16H176a16,16,0,0,1-16-16v-8H96a24,24,0,0,1-24-24V80H64A16,16,0,0,1,48,64V32A16,16,0,0,1,64,16H96a16,16,0,0,1,16,16V64A16,16,0,0,1,96,80H88v32h72v-8a16,16,0,0,1,16-16h32a16,16,0,0,1,16,16v32a16,16,0,0,1-16,16H176A16,16,0,0,1,160,136Z\"></path></svg>`;\nconst infoIcon = `<svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 512 512\" height=\"200px\" width=\"200px\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M256 48C141.2 48 48 141.2 48 256s93.2 208 208 208 208-93.2 208-208S370.8 48 256 48zm21 312h-42V235h42v125zm0-166h-42v-42h42v42z\"></path></svg>`;\nconst settingsIcon = `<svg stroke=\"currentColor\" fill=\"none\" stroke-width=\"2\" viewBox=\"0 0 24 24\" stroke-linecap=\"round\" stroke-linejoin=\"round\" height=\"200px\" width=\"200px\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12.003 21c-.732 .001 -1.465 -.438 -1.678 -1.317a1.724 1.724 0 0 0 -2.573 -1.066c-1.543 .94 -3.31 -.826 -2.37 -2.37a1.724 1.724 0 0 0 -1.065 -2.572c-1.756 -.426 -1.756 -2.924 0 -3.35a1.724 1.724 0 0 0 1.066 -2.573c-.94 -1.543 .826 -3.31 2.37 -2.37c1 .608 2.296 .07 2.572 -1.065c.426 -1.756 2.924 -1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543 -.94 3.31 .826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c.886 .215 1.325 .957 1.318 1.694\"></path><path d=\"M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0\"></path><path d=\"M19.001 19m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0\"></path><path d=\"M19.001 15.5v1.5\"></path><path d=\"M19.001 21v1.5\"></path><path d=\"M22.032 17.25l-1.299 .75\"></path><path d=\"M17.27 20l-1.3 .75\"></path><path d=\"M15.97 17.25l1.3 .75\"></path><path d=\"M20.733 20l1.3 .75\"></path></svg>`;\nconst eyeSlashIcon = `<svg stroke=\"currentColor\" fill=\"none\" stroke-width=\"2\" viewBox=\"0 0 24 24\" stroke-linecap=\"round\" stroke-linejoin=\"round\" height=\"16\" width=\"16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\"></path><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line></svg>`;\nconst closeIcon = `<svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 512 512\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M400 145.49 366.51 112 256 222.51 145.49 112 112 145.49 222.51 256 112 366.51 145.49 400 256 289.49 366.51 400 400 366.51 289.49 256 400 145.49z\"></path></svg>`;\nconst disconnectIcon = `<svg fill=\"currentColor\" viewBox=\"0 0 36 36\" height=\"200px\" width=\"200px\"><path fill=\"currentColor\" d=\"M18 24.42a4 4 0 1 0 4 4a4 4 0 0 0-4-4m0 6a2 2 0 1 1 2-2a2 2 0 0 1-2 2\" class=\"clr-i-outline clr-i-outline-path-1\"></path><path fill=\"currentColor\" d=\"M26.21 21.85a1 1 0 0 0-.23-1.4a13.6 13.6 0 0 0-5-2.23l3.87 3.87a1 1 0 0 0 1.36-.24\" class=\"clr-i-outline clr-i-outline-path-2\"></path><path fill=\"currentColor\" d=\"M18.05 10.72a21 21 0 0 0-4.16.43l1.74 1.74a19 19 0 0 1 2.42-.17A18.76 18.76 0 0 1 28.64 16a1 1 0 0 0 1.12-1.65a20.75 20.75 0 0 0-11.71-3.63\" class=\"clr-i-outline clr-i-outline-path-3\"></path><path fill=\"currentColor\" d=\"M33.55 8.2A28.11 28.11 0 0 0 8.11 5.36l1.58 1.57a26 26 0 0 1 22.76 2.94a1 1 0 0 0 1.1-1.67\" class=\"clr-i-outline clr-i-outline-path-4\"></path><path fill=\"currentColor\" d=\"m1.84 4.75l2.43 2.43c-.62.34-1.23.7-1.83 1.1a1 1 0 1 0 1.12 1.66C4.26 9.47 5 9 5.74 8.65l3.87 3.87a20.6 20.6 0 0 0-3.38 1.88A1 1 0 0 0 7.36 16a18.8 18.8 0 0 1 3.77-2l4.16 4.16A13.5 13.5 0 0 0 10 20.55a1 1 0 0 0 1.18 1.61A11.5 11.5 0 0 1 17 20l10.8 10.8l1.41-1.41l-26-26Z\" class=\"clr-i-outline clr-i-outline-path-5\"></path><path fill=\"none\" d=\"M0 0h36v36H0z\"></path></svg>`;\n\n// Store debug info per room\nconst roomDebugInfo = new Map();\n\n// Single interval for all panels\nlet globalUpdateInterval = null;\n\n// Preferences state\nconst preferences = {\n maxLatency: 350, // milliseconds\n latencySimulation: {\n enabled: false,\n delay: 0 // milliseconds\n },\n panelPosition: {\n position: 'top-right' // 'bottom-right', 'bottom-left', 'top-left', 'top-right'\n }\n};\n\n// Load preferences from localStorage\nfunction loadPreferences() {\n try {\n const savedPrefs = localStorage.getItem('colyseus-debug-preferences') || '{}';\n const prefs = JSON.parse(savedPrefs);\n\n // Load position\n if (prefs.position && ['bottom-right', 'bottom-left', 'top-left', 'top-right'].includes(prefs.position)) {\n preferences.panelPosition.position = prefs.position;\n }\n\n // Load latency\n if (prefs.latency !== undefined && prefs.latency !== null) {\n const latencyValue = parseInt(prefs.latency, 10);\n if (!isNaN(latencyValue) && latencyValue >= 0 && latencyValue <= 500) {\n preferences.latencySimulation.delay = latencyValue;\n preferences.latencySimulation.enabled = latencyValue > 0;\n }\n }\n\n // Load hidden state\n if (prefs.hidden === true) {\n panelsHidden = true;\n }\n } catch (e) {\n // localStorage might not be available or JSON parse failed, ignore\n }\n}\n\n// Save preferences to localStorage\nfunction savePreferences() {\n try {\n localStorage.setItem('colyseus-debug-preferences', JSON.stringify({\n position: preferences.panelPosition.position,\n latency: preferences.latencySimulation.delay,\n hidden: panelsHidden\n }));\n } catch (e) {\n // localStorage might not be available, ignore\n }\n}\n\n// Panel visibility state\nlet panelsHidden = false;\n\n// Track open modals as an ordered stack (most recent at end)\nlet modalStack: any[] = [];\nconst BASE_MODAL_ZINDEX = 10000;\n\n// Load preferences on script load\nloadPreferences();\n\n// Function to select a modal (bring to front)\nfunction selectModal(modal) {\n if (!modal) return;\n\n // Remove modal from stack if already present\n const index = modalStack.indexOf(modal);\n if (index > -1) {\n modalStack.splice(index, 1);\n }\n\n // Add to end of stack (most recent)\n modalStack.push(modal);\n\n // Update z-indexes for all modals based on their position in stack\n modalStack.forEach((m, i) => {\n if (document.body.contains(m)) {\n m.style.zIndex = (BASE_MODAL_ZINDEX + i).toString();\n }\n });\n}\n\n// Function to remove modal from stack\nfunction removeModalFromStack(modal) {\n const index = modalStack.indexOf(modal);\n if (index > -1) {\n modalStack.splice(index, 1);\n }\n}\n\n// Global ESC key handler - closes most recent modal\ndocument.addEventListener('keydown', function(e) {\n if (e.key === 'Escape' && modalStack.length > 0) {\n // Get the most recent modal (top of stack)\n const topModal = modalStack[modalStack.length - 1];\n if (topModal && document.body.contains(topModal)) {\n topModal.remove();\n }\n }\n});\n\n// Shared modal creation utilities\nfunction createModalOverlay() {\n var overlay = document.createElement('div');\n overlay.style.position = 'fixed';\n overlay.style.top = '0';\n overlay.style.left = '0';\n overlay.style.right = '0';\n overlay.style.bottom = '0';\n overlay.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';\n overlay.style.zIndex = BASE_MODAL_ZINDEX.toString();\n overlay.style.display = 'flex';\n overlay.style.justifyContent = 'center';\n overlay.style.alignItems = 'center';\n return overlay;\n}\n\nfunction createModal(options) {\n var opts = options || {};\n var modal = document.createElement('div');\n\n // Set ID if provided\n if (opts.id) {\n modal.id = opts.id;\n }\n\n // Base styles\n modal.style.position = 'fixed';\n modal.style.backgroundColor = opts.backgroundColor || '#1e1e1e';\n modal.style.borderRadius = '8px';\n modal.style.boxShadow = '0 8px 32px rgba(0, 0, 0, 0.5)';\n modal.style.color = '#fff';\n modal.style.fontFamily = 'system-ui, -apple-system, sans-serif';\n modal.style.zIndex = BASE_MODAL_ZINDEX.toString();\n modal.style.display = 'flex';\n modal.style.flexDirection = 'column';\n modal.style.overflow = 'hidden';\n\n // Size\n if (opts.width) modal.style.width = opts.width;\n if (opts.height) modal.style.height = opts.height;\n if (opts.minWidth) modal.style.minWidth = opts.minWidth;\n if (opts.minHeight) modal.style.minHeight = opts.minHeight;\n if (opts.maxWidth) modal.style.maxWidth = opts.maxWidth;\n if (opts.maxHeight) modal.style.maxHeight = opts.maxHeight;\n\n // Position\n modal.style.top = opts.top || '50%';\n modal.style.left = opts.left || '50%';\n modal.style.transform = opts.transform || 'translate(-50%, -50%)';\n\n // Mark modal as selected when clicked\n modal.addEventListener('mousedown', function(e) {\n selectModal(modal);\n });\n\n // Mark modal as selected when opened\n selectModal(modal);\n\n // Override remove to cleanup modal from stack\n var originalRemove = modal.remove.bind(modal);\n modal.remove = function() {\n // Remove from modal stack\n removeModalFromStack(modal);\n\n // Auto-cleanup room onLeave listener\n if (opts.room && opts.trackOnLeave && opts.onLeaveCallback) {\n var callbackToRemove = opts.onLeaveCallback.current || opts.onLeaveCallback;\n opts.room.onLeave.remove(callbackToRemove);\n }\n\n if (opts.onRemove) {\n opts.onRemove();\n }\n originalRemove();\n };\n\n return modal;\n}\n\nfunction createModalHeader(options) {\n var opts = options || {};\n\n var header = document.createElement('div');\n header.style.display = 'flex';\n header.style.justifyContent = 'space-between';\n header.style.alignItems = 'center';\n header.style.padding = opts.padding || '8px';\n header.style.borderBottom = '1px solid rgba(255, 255, 255, 0.15)';\n header.style.paddingBottom = opts.paddingBottom || '4px';\n header.style.marginBottom = opts.marginBottom || '6px';\n header.style.cursor = opts.draggable !== false ? 'move' : 'default';\n header.style.userSelect = 'none';\n header.style.flexShrink = '0';\n header.style.position = 'relative';\n header.style.zIndex = '1';\n\n // Title\n var title = document.createElement('div');\n title.textContent = opts.title || '';\n title.style.margin = '0';\n title.style.fontSize = opts.titleSize || '11px';\n title.style.fontWeight = 'bold';\n title.style.fontFamily = opts.titleFont || 'monospace';\n title.style.flex = '1';\n title.style.display = 'flex';\n title.style.alignItems = 'center';\n\n // Status dot (optional)\n if (opts.statusDot) {\n var statusDot = document.createElement('div');\n statusDot.style.width = '8px';\n statusDot.style.height = '8px';\n statusDot.style.borderRadius = '50%';\n statusDot.style.marginRight = '8px';\n statusDot.style.flexShrink = '0';\n statusDot.style.transition = 'background-color 0.3s';\n statusDot.style.backgroundColor = opts.statusColor || '#22c55e';\n title.insertBefore(statusDot, title.firstChild);\n\n if (opts.statusDotRef) {\n opts.statusDotRef.element = statusDot;\n }\n }\n\n // Close button\n var closeButton = document.createElement('button');\n closeButton.innerHTML = closeIcon;\n closeButton.style.background = 'none';\n closeButton.style.border = 'none';\n closeButton.style.color = '#fff';\n closeButton.style.fontSize = '18px';\n closeButton.style.cursor = 'pointer';\n closeButton.style.padding = '0';\n closeButton.style.margin = 'auto';\n closeButton.style.width = '20px';\n closeButton.style.height = '20px';\n closeButton.style.display = 'flex';\n closeButton.style.alignItems = 'center';\n closeButton.style.justifyContent = 'center';\n closeButton.style.borderRadius = '4px';\n closeButton.style.transition = 'background-color 0.2s';\n closeButton.style.opacity = '0.6';\n\n closeButton.addEventListener('mouseenter', function() {\n closeButton.style.backgroundColor = 'rgba(255, 255, 255, 0.1)';\n closeButton.style.opacity = '1';\n });\n closeButton.addEventListener('mouseleave', function() {\n closeButton.style.backgroundColor = 'transparent';\n closeButton.style.opacity = '0.6';\n });\n closeButton.addEventListener('click', function(e) {\n e.stopPropagation();\n if (opts.onClose) {\n opts.onClose();\n } else if (opts.modal) {\n opts.modal.remove();\n }\n });\n\n header.appendChild(title);\n header.appendChild(closeButton);\n\n return { header: header, title: title, closeButton: closeButton };\n}\n\nfunction makeDraggable(modal, dragHandle) {\n var isDragging = false;\n var dragOffsetX = 0;\n var dragOffsetY = 0;\n\n dragHandle.addEventListener('mousedown', function(e) {\n isDragging = true;\n var rect = modal.getBoundingClientRect();\n dragOffsetX = e.clientX - rect.left;\n dragOffsetY = e.clientY - rect.top;\n\n // Set position to current absolute position before removing transform\n modal.style.left = rect.left + 'px';\n modal.style.top = rect.top + 'px';\n modal.style.transform = 'none';\n e.preventDefault();\n });\n\n var onMouseMove = function(e) {\n if (isDragging) {\n var newLeft = e.clientX - dragOffsetX;\n var newTop = e.clientY - dragOffsetY;\n modal.style.left = newLeft + 'px';\n modal.style.top = newTop + 'px';\n }\n };\n\n var onMouseUp = function() {\n isDragging = false;\n };\n\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n\n // Return cleanup function\n return function cleanup() {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n };\n}\n\n// Function to get border color based on latency simulation value\nfunction getBorderColor(latencyValue, opacity) {\n var maxLatency = preferences.maxLatency;\n var percentage = latencyValue / maxLatency;\n var r, g, b = 0;\n\n if (percentage <= 0.5) {\n // Green to Yellow: (0, 200, 0) -> (200, 200, 0)\n var segmentPercent = percentage * 2; // 0 to 1 for this segment\n r = Math.round(segmentPercent * 200);\n g = 200;\n } else {\n // Yellow to Red: (200, 200, 0) -> (200, 0, 0)\n var segmentPercent = (percentage - 0.5) * 2; // 0 to 1 for this segment\n r = 200;\n g = Math.round((1 - segmentPercent) * 200);\n }\n\n return 'rgba(' + r + ', ' + g + ', ' + b + ', ' + opacity + ')';\n}\n\nfunction initialize() {\n if (panelsHidden) return;\n\n var container = document.createElement('div');\n container.id = 'debug-logo-container';\n container.style.position = 'fixed';\n container.style.zIndex = '1000';\n container.style.width = '21px';\n container.style.height = '21px';\n container.style.backgroundColor = 'rgba(0, 0, 0, 0.7)';\n container.style.border = '3px solid ' + getBorderColor(preferences.latencySimulation.delay, 0.7);\n container.style.borderRadius = '50%';\n container.style.padding = '10px';\n container.style.boxSizing = 'content-box';\n container.style.display = 'flex';\n container.style.justifyContent = 'center';\n container.style.alignItems = 'center';\n container.style.boxShadow = '0 2px 8px rgba(0, 0, 0, 0.3)';\n container.style.transition = 'border-color 0.3s ease, background-color 0.3s ease';\n container.style.cursor = 'pointer';\n\n // Apply initial position\n applyPanelPosition();\n\n // container on hover effect\n container.addEventListener('mouseenter', function() {\n container.style.backgroundColor = 'rgba(0, 0, 0, 0.9)';\n container.style.borderColor = getBorderColor(preferences.latencySimulation.delay, 0.9);\n });\n container.addEventListener('mouseleave', function() {\n container.style.backgroundColor = 'rgba(0, 0, 0, 0.7)';\n container.style.borderColor = getBorderColor(preferences.latencySimulation.delay, 0.7);\n });\n\n var icon = document.createElement('div');\n icon.style.width = '100%';\n icon.style.height = '100%';\n icon.style.display = 'flex';\n icon.style.justifyContent = 'center';\n icon.style.alignItems = 'center';\n\n // Use insertAdjacentHTML for better Safari compatibility with SVG\n icon.insertAdjacentHTML('beforeend', logoIcon);\n\n container.appendChild(icon);\n document.body.appendChild(container);\n\n // Create menu first\n createMenu(container);\n\n // Apply initial position after menu is created\n applyPanelPosition();\n}\n\n// Create menu that opens on logo click\nfunction createMenu(logoContainer) {\n var menu = document.createElement('div');\n menu.id = 'debug-menu';\n menu.style.position = 'fixed';\n // Position will be set by applyPanelPosition\n menu.style.backgroundColor = 'rgba(0, 0, 0, 0.95)';\n menu.style.color = '#fff';\n menu.style.padding = '0 0 8px 0';\n menu.style.borderRadius = '6px';\n menu.style.fontFamily = 'system-ui, -apple-system, sans-serif';\n menu.style.fontSize = '12px';\n menu.style.zIndex = '1001';\n menu.style.minWidth = '200px';\n menu.style.boxShadow = '0 4px 12px rgba(0, 0, 0, 0.5)';\n menu.style.display = 'none';\n menu.style.overflow = 'hidden';\n\n // Host name display\n var hostContainer = document.createElement('div');\n hostContainer.style.padding = '6px 12px';\n hostContainer.style.cursor = 'default';\n hostContainer.style.backgroundColor = 'rgba(255, 255, 255, 0.1)';\n hostContainer.style.borderBottom = '1px solid rgba(255, 255, 255, 0.15)';\n hostContainer.style.marginBottom = '4px';\n hostContainer.style.borderTopLeftRadius = '6px';\n hostContainer.style.borderTopRightRadius = '6px';\n\n var hostValue = document.createElement('div');\n hostValue.id = 'debug-menu-host';\n hostValue.style.fontSize = '11px';\n hostValue.style.color = '#fff';\n hostValue.style.fontFamily = 'monospace';\n hostValue.style.whiteSpace = 'nowrap';\n hostValue.style.overflow = 'hidden';\n hostValue.style.textOverflow = 'ellipsis';\n hostValue.style.textAlign = 'center';\n hostValue.style.fontWeight = '500';\n\n // Function to update host display\n function updateHostDisplay() {\n var hostText = 'N/A';\n if (roomDebugInfo.size > 0) {\n // Get host from first room\n var firstRoom = roomDebugInfo.values().next().value;\n if (firstRoom && firstRoom.host) {\n hostText = firstRoom.host;\n }\n }\n hostValue.textContent = hostText;\n }\n\n // Update host display initially\n updateHostDisplay();\n\n hostContainer.appendChild(hostValue);\n menu.appendChild(hostContainer);\n\n // Simulate latency option\n var latencyContainer = document.createElement('div');\n latencyContainer.style.padding = '8px 12px';\n latencyContainer.style.cursor = 'default';\n\n var latencyLabel = document.createElement('div');\n latencyLabel.style.marginBottom = '8px';\n latencyLabel.style.display = 'flex';\n latencyLabel.style.alignItems = 'center';\n latencyLabel.style.justifyContent = 'space-between';\n var latencyValueSpan = document.createElement('span');\n latencyValueSpan.id = 'latency-value';\n latencyValueSpan.style.color = '#888';\n latencyValueSpan.style.fontSize = '11px';\n latencyValueSpan.textContent = preferences.latencySimulation.delay + 'ms';\n\n var latencyTextSpan = document.createElement('span');\n latencyTextSpan.textContent = 'Simulate latency';\n\n latencyLabel.appendChild(latencyTextSpan);\n latencyLabel.appendChild(latencyValueSpan);\n\n var latencySlider = document.createElement('input');\n latencySlider.type = 'range';\n latencySlider.min = '0';\n latencySlider.max = preferences.maxLatency.toString();\n latencySlider.value = preferences.latencySimulation.delay.toString();\n latencySlider.style.border = 'none';\n latencySlider.style.width = '100%';\n latencySlider.style.height = '20px';\n latencySlider.style.padding = '0';\n latencySlider.style.margin = '0';\n latencySlider.style.outline = 'none';\n latencySlider.style.cursor = 'pointer';\n latencySlider.style.webkitAppearance = 'none';\n latencySlider.style.appearance = 'none';\n latencySlider.style.background = 'transparent';\n latencySlider.id = 'latency-slider';\n\n // Function to calculate color from green (0) -> yellow (250) -> red (500)\n function getSliderColor(value, min, max) {\n var percentage = (value - min) / (max - min);\n var r, g, b = 0;\n\n if (percentage <= 0.5) {\n // Green to Yellow: (0, 200, 0) -> (200, 200, 0)\n var segmentPercent = percentage * 2; // 0 to 1 for this segment\n r = Math.round(segmentPercent * 200);\n g = 200;\n } else {\n // Yellow to Red: (200, 200, 0) -> (200, 0, 0)\n var segmentPercent = (percentage - 0.5) * 2; // 0 to 1 for this segment\n r = 200;\n g = Math.round((1 - segmentPercent) * 200);\n }\n\n return 'rgb(' + r + ', ' + g + ', ' + b + ')';\n }\n\n // Function to update slider track color\n function updateSliderColor(value) {\n var color = getSliderColor(value, 0, preferences.maxLatency);\n var valuePercent = (value / preferences.maxLatency) * 100;\n var yellowPercent = 50; // Yellow at 250ms (50% of 500ms)\n var gradient;\n\n if (value <= preferences.maxLatency / 2) {\n // Value is in green->yellow range: show green -> yellow\n var yellowColor = getSliderColor(preferences.maxLatency / 2, 0, preferences.maxLatency);\n gradient = `linear-gradient(to right, #00c800 0%, ${yellowColor} ${valuePercent}%, #333 ${valuePercent}%, #333 100%)`;\n } else {\n // Value is in yellow->red range: show green -> yellow -> current color\n var yellowColor = getSliderColor(preferences.maxLatency / 2, 0, preferences.maxLatency);\n gradient = `linear-gradient(to right, #00c800 0%, ${yellowColor} ${yellowPercent}%, ${color} ${valuePercent}%, #333 ${valuePercent}%, #333 100%)`;\n }\n\n var styleId = 'latency-slider-style';\n var existingStyle = document.getElementById(styleId);\n if (existingStyle) {\n existingStyle.remove();\n }\n var style = document.createElement('style');\n style.id = styleId;\n style.textContent = `\n #latency-slider::-webkit-slider-runnable-track {\n background: ${gradient};\n height: 6px;\n border-radius: 3px;\n border: none;\n }\n #latency-slider::-moz-range-track {\n background: ${gradient};\n height: 6px;\n border-radius: 3px;\n border: none;\n }\n `;\n document.head.appendChild(style);\n }\n\n // Initialize slider color\n updateSliderColor(parseInt(latencySlider.value));\n\n // Add custom styling via CSS (inline style limitations)\n var style = document.createElement('style');\n style.textContent = `\n #latency-slider {\n background: transparent !important;\n background-color: transparent !important;\n }\n #latency-slider::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background: #fff;\n background-color: #fff;\n cursor: pointer;\n border: 2px solid #888;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n transition: transform 0.1s ease, box-shadow 0.1s ease;\n margin-top: -5px;\n }\n #latency-slider::-webkit-slider-thumb:hover {\n transform: scale(1.1);\n box-shadow: 0 3px 6px rgba(0, 0, 0, 0.3);\n }\n #latency-slider::-moz-range-thumb {\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background: #fff;\n cursor: pointer;\n border: 2px solid #888;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n transition: transform 0.1s ease, box-shadow 0.1s ease;\n }\n #latency-slider::-moz-range-thumb:hover {\n transform: scale(1.1);\n box-shadow: 0 3px 6px rgba(0, 0, 0, 0.3);\n }\n `;\n document.head.appendChild(style);\n\n // Function to update container border color\n function updateContainerBackgroundColor() {\n var container = document.getElementById('debug-logo-container');\n if (container) {\n // Update to normal state (hover handlers will update on hover)\n container.style.borderColor = getBorderColor(preferences.latencySimulation.delay, 0.7);\n }\n }\n\n // Update latency value display\n latencySlider.addEventListener('input', function() {\n var value = parseInt(latencySlider.value);\n latencyValueSpan.textContent = value + 'ms';\n preferences.latencySimulation.delay = value;\n preferences.latencySimulation.enabled = value > 0;\n updateSliderColor(value);\n updateContainerBackgroundColor();\n savePreferences();\n });\n\n latencyContainer.appendChild(latencyLabel);\n latencyContainer.appendChild(latencySlider);\n menu.appendChild(latencyContainer);\n\n // Separator\n var separator = document.createElement('div');\n separator.style.height = '1px';\n separator.style.backgroundColor = 'rgba(255, 255, 255, 0.15)';\n separator.style.margin = '4px 0';\n menu.appendChild(separator);\n\n // Settings option\n var settingsOption = document.createElement('div');\n settingsOption.style.padding = '8px 12px';\n settingsOption.style.cursor = 'pointer';\n settingsOption.style.transition = 'background-color 0.2s';\n settingsOption.style.display = 'flex';\n settingsOption.style.alignItems = 'center';\n settingsOption.style.gap = '8px';\n\n var settingsIconWrapper = document.createElement('span');\n settingsIconWrapper.style.display = 'inline-flex';\n settingsIconWrapper.style.alignItems = 'center';\n settingsIconWrapper.style.width = '16px';\n settingsIconWrapper.style.height = '16px';\n settingsIconWrapper.innerHTML = settingsIcon.replace('height=\"200px\" width=\"200px\"', 'height=\"16\" width=\"16\"');\n\n var settingsText = document.createElement('span');\n settingsText.textContent = 'Preferences';\n\n settingsOption.appendChild(settingsIconWrapper);\n settingsOption.appendChild(settingsText);\n\n settingsOption.addEventListener('mouseenter', function() {\n settingsOption.style.backgroundColor = 'rgba(255, 255, 255, 0.1)';\n });\n settingsOption.addEventListener('mouseleave', function() {\n settingsOption.style.backgroundColor = 'transparent';\n });\n settingsOption.addEventListener('click', function(e) {\n e.stopPropagation();\n menuVisible = false;\n menu.style.display = 'none';\n if (hostUpdateInterval) {\n clearInterval(hostUpdateInterval);\n hostUpdateInterval = null;\n }\n openSettingsModal();\n });\n menu.appendChild(settingsOption);\n\n document.body.appendChild(menu);\n\n // Toggle menu on logo click\n var menuVisible = false;\n var hostUpdateInterval = null;\n logoContainer.addEventListener('click', function(e) {\n e.stopPropagation();\n menuVisible = !menuVisible;\n menu.style.display = menuVisible ? 'block' : 'none';\n\n if (menuVisible) {\n updateHostDisplay();\n // Update host every second while menu is visible\n hostUpdateInterval = setInterval(updateHostDisplay, 1000);\n } else {\n if (hostUpdateInterval) {\n clearInterval(hostUpdateInterval);\n hostUpdateInterval = null;\n }\n }\n });\n\n // Close menu when clicking outside\n document.addEventListener('click', function(e) {\n if (menuVisible && !menu.contains(e.target as Node) && !logoContainer.contains(e.target as Node)) {\n menuVisible = false;\n menu.style.display = 'none';\n if (hostUpdateInterval) {\n clearInterval(hostUpdateInterval);\n hostUpdateInterval = null;\n }\n }\n });\n}\n\n// Create and open Settings modal\nfunction openSettingsModal() {\n // Remove existing modal if present\n var existingModal = document.getElementById('debug-settings-modal');\n if (existingModal) {\n existingModal.remove();\n }\n\n // Create overlay using shared utility\n var overlay = createModalOverlay();\n overlay.id = 'debug-settings-overlay';\n\n // Create modal (non-fixed positioning for overlay)\n var modal = document.createElement('div');\n modal.id = 'debug-settings-modal';\n modal.style.position = 'relative'; // relative position for centered overlay content\n modal.style.backgroundColor = 'rgba(30, 30, 30, 0.98)';\n modal.style.borderRadius = '8px';\n modal.style.width = '90%';\n modal.style.maxWidth = '500px';\n modal.style.maxHeight = '90vh';\n modal.style.overflowY = 'auto';\n modal.style.boxShadow = '0 8px 32px rgba(0, 0, 0, 0.5)';\n modal.style.color = '#fff';\n modal.style.fontFamily = 'system-ui, -apple-system, sans-serif';\n\n // Modal header\n var header = document.createElement('div');\n header.style.display = 'flex';\n header.style.justifyContent = 'space-between';\n header.style.alignItems = 'center';\n header.style.padding = '20px 24px';\n header.style.borderBottom = '1px solid rgba(255, 255, 255, 0.1)';\n\n var title = document.createElement('h2');\n title.textContent = 'Preferences';\n title.style.margin = '0';\n title.style.fontSize = '18px';\n title.style.fontWeight = '600';\n\n var closeButton = document.createElement('button');\n closeButton.innerHTML = '×';\n closeButton.style.background = 'none';\n closeButton.style.border = 'none';\n closeButton.style.color = '#fff';\n closeButton.style.fontSize = '24px';\n closeButton.style.cursor = 'pointer';\n closeButton.style.padding = '0';\n closeButton.style.width = '32px';\n closeButton.style.height = '32px';\n closeButton.style.display = 'flex';\n closeButton.style.alignItems = 'center';\n closeButton.style.justifyContent = 'center';\n closeButton.style.borderRadius = '4px';\n closeButton.style.transition = 'background-color 0.2s';\n closeButton.addEventListener('mouseenter', function() {\n closeButton.style.backgroundColor = 'rgba(255, 255, 255, 0.1)';\n });\n closeButton.addEventListener('mouseleave', function() {\n closeButton.style.backgroundColor = 'transparent';\n });\n closeButton.addEventListener('click', function() {\n overlay.remove();\n });\n\n header.appendChild(title);\n header.appendChild(closeButton);\n modal.appendChild(header);\n\n // Position option\n var positionContainer = document.createElement('div');\n positionContainer.style.padding = '20px 24px';\n positionContainer.style.borderBottom = '1px solid rgba(255, 255, 255, 0.1)';\n positionContainer.style.display = 'flex';\n positionContainer.style.justifyContent = 'space-between';\n positionContainer.style.alignItems = 'center';\n positionContainer.style.gap = '16px';\n\n var positionTextContainer = document.createElement('div');\n positionTextContainer.style.flex = '1';\n\n var positionTitle = document.createElement('div');\n positionTitle.style.fontSize = '14px';\n positionTitle.style.fontWeight = '600';\n positionTitle.style.marginBottom = '4px';\n positionTitle.textContent = 'Position';\n\n var positionDescription = document.createElement('div');\n positionDescription.style.fontSize = '12px';\n positionDescription.style.color = 'rgba(255, 255, 255, 0.7)';\n positionDescription.textContent = 'Adjust the placement of the panels.';\n\n positionTextContainer.appendChild(positionTitle);\n positionTextContainer.appendChild(positionDescription);\n\n var positionSelect = document.createElement('select');\n positionSelect.style.minWidth = '150px';\n positionSelect.style.padding = '8px 12px';\n positionSelect.style.backgroundColor = 'rgba(255, 255, 255, 0.1)';\n positionSelect.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n positionSelect.style.borderRadius = '4px';\n positionSelect.style.color = '#fff';\n positionSelect.style.fontSize = '14px';\n positionSelect.style.cursor = 'pointer';\n positionSelect.style.outline = 'none';\n\n var positions = [\n { value: 'bottom-left', label: 'Bottom Left' },\n { value: 'bottom-right', label: 'Bottom Right' },\n { value: 'top-left', label: 'Top Left' },\n { value: 'top-right', label: 'Top Right' }\n ];\n\n positions.forEach(function(pos) {\n var option = document.createElement('option');\n option.value = pos.value;\n option.textContent = pos.label;\n if (preferences.panelPosition.position === pos.value) {\n option.selected = true;\n }\n positionSelect.appendChild(option);\n });\n\n positionSelect.addEventListener('change', function() {\n preferences.panelPosition.position = positionSelect.value;\n applyPanelPosition();\n savePreferences();\n });\n\n positionContainer.appendChild(positionTextContainer);\n positionContainer.appendChild(positionSelect);\n modal.appendChild(positionContainer);\n\n // Disable instruction\n var disableContainer = document.createElement('div');\n disableContainer.style.padding = '20px 24px';\n disableContainer.style.borderBottom = '1px solid rgba(255, 255, 255, 0.1)';\n\n var disableTitle = document.createElement('div');\n disableTitle.style.fontSize = '14px';\n disableTitle.style.fontWeight = '600';\n disableTitle.style.marginBottom = '4px';\n disableTitle.textContent = 'Disable Dev Tools';\n\n var disableDescription = document.createElement('div');\n disableDescription.style.fontSize = '12px';\n disableDescription.style.color = 'rgba(255, 255, 255, 0.7)';\n disableDescription.style.marginBottom = '8px';\n disableDescription.innerHTML = 'To disable this UI completely, remove the <code style=\"background: rgba(255, 255, 255, 0.1); padding: 2px 6px; border-radius: 3px; font-family: monospace; font-size: 11px;\">debug.js</code> script from your HTML file.';\n\n disableContainer.appendChild(disableTitle);\n disableContainer.appendChild(disableDescription);\n modal.appendChild(disableContainer);\n\n // Hide panels button\n var hideContainer = document.createElement('div');\n hideContainer.style.padding = '20px 24px';\n hideContainer.style.display = 'flex';\n hideContainer.style.justifyContent = 'space-between';\n hideContainer.style.alignItems = 'center';\n hideContainer.style.gap = '16px';\n\n var hideTextContainer = document.createElement('div');\n hideTextContainer.style.flex = '1';\n\n var hideTitle = document.createElement('div');\n hideTitle.style.fontSize = '14px';\n hideTitle.style.fontWeight = '600';\n hideTitle.style.marginBottom = '4px';\n hideTitle.textContent = 'Hide Dev Tools for this session';\n\n var hideDescription = document.createElement('div');\n hideDescription.style.fontSize = '12px';\n hideDescription.style.color = 'rgba(255, 255, 255, 0.7)';\n hideDescription.textContent = 'Hide Dev Tools until you refresh the page.';\n\n hideTextContainer.appendChild(hideTitle);\n hideTextContainer.appendChild(hideDescription);\n\n var hideButton = document.createElement('button');\n hideButton.textContent = 'Hide';\n hideButton.style.padding = '8px 16px';\n hideButton.style.backgroundColor = 'rgba(255, 255, 255, 0.1)';\n hideButton.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n hideButton.style.borderRadius = '4px';\n hideButton.style.color = '#fff';\n hideButton.style.fontSize = '14px';\n hideButton.style.cursor = 'pointer';\n hideButton.style.transition = 'background-color 0.2s';\n hideButton.style.display = 'flex';\n hideButton.style.alignItems = 'center';\n hideButton.style.gap = '8px';\n hideButton.style.flexShrink = '0';\n\n hideButton.insertAdjacentHTML('afterbegin', eyeSlashIcon);\n\n hideButton.addEventListener('mouseenter', function() {\n hideButton.style.backgroundColor = 'rgba(255, 255, 255, 0.15)';\n });\n hideButton.addEventListener('mouseleave', function() {\n hideButton.style.backgroundColor = 'rgba(255, 255, 255, 0.1)';\n });\n hideButton.addEventListener('click', function() {\n hidePanelsForSession();\n overlay.remove();\n });\n\n hideContainer.appendChild(hideTextContainer);\n hideContainer.appendChild(hideButton);\n modal.appendChild(hideContainer);\n\n overlay.appendChild(modal);\n document.body.appendChild(overlay);\n\n // Mark as selected modal when opened\n selectModal(overlay);\n\n // Update close button to cleanup from modal stack\n var originalOverlayRemove = overlay.remove.bind(overlay);\n overlay.remove = function() {\n removeModalFromStack(overlay);\n originalOverlayRemove();\n };\n\n // Mark modal as selected when clicked\n modal.addEventListener('mousedown', function(e) {\n selectModal(overlay);\n });\n\n // Close on overlay click\n overlay.addEventListener('click', function(e) {\n if (e.target === overlay) {\n overlay.remove();\n }\n });\n}\n\n// Create and open Send Messages modal\nfunction openSendMessagesModal(uniquePanelId) {\n var debugInfo = roomDebugInfo.get(uniquePanelId);\n if (!debugInfo || !debugInfo.room) {\n console.warn('Room not found for panel:', uniquePanelId);\n return;\n }\n\n var room = debugInfo.room;\n var messageTypes = debugInfo.messageTypes;\n\n if (!messageTypes) {\n console.warn('No message types available for this room');\n return;\n }\n\n // Remove existing modal if present\n var existingModal = document.getElementById('debug-send-messages-modal');\n if (existingModal) {\n existingModal.remove();\n }\n\n // Status dot reference\n var statusDotRef: any = {};\n var updateConnectionStatus: any = null;\n var onLeaveCallbackRef: any = { current: null };\n\n // Function to update status dot color\n const updateSendMsgStatusDot = () => {\n if (statusDotRef.element) {\n statusDotRef.element.style.backgroundColor = room.connection?.isOpen ? '#22c55e' : '#ef4444';\n }\n };\n\n // Initial callback\n onLeaveCallbackRef.current = updateSendMsgStatusDot;\n room.onLeave(updateSendMsgStatusDot);\n\n // Create modal using shared utility\n const modal = createModal({\n id: 'debug-send-messages-modal',\n width: '400px',\n minWidth: '300px',\n maxWidth: '90vw',\n maxHeight: '90vh',\n room: room,\n trackOnLeave: true,\n onLeaveCallback: onLeaveCallbackRef\n });\n\n // Create header using shared utility\n const headerComponents = createModalHeader({\n title: debugInfo.roomName + ' - Send Message',\n modal: modal,\n statusDot: true,\n statusColor: room.connection?.isOpen ? '#22c55e' : '#ef4444',\n statusDotRef: statusDotRef\n });\n\n modal.appendChild(headerComponents.header);\n\n // Make modal draggable\n makeDraggable(modal, headerComponents.header);\n\n // Update status dot initially\n updateSendMsgStatusDot();\n\n // Form content container (scrollable)\n var formContainer = document.createElement('div');\n formContainer.style.padding = '8px';\n formContainer.style.overflowY = 'auto';\n formContainer.style.backgroundColor = '#1e1e1e';\n\n // Message Type Selector\n var typeLabel = document.createElement('label');\n typeLabel.textContent = 'Message Type';\n typeLabel.style.display = 'block';\n typeLabel.style.fontSize = '11px';\n typeLabel.style.fontWeight = '600';\n typeLabel.style.marginBottom = '4px';\n typeLabel.style.color = 'rgba(255, 255, 255, 0.9)';\n\n var typeSelect = document.createElement('select');\n typeSelect.style.width = '100%';\n typeSelect.style.padding = '6px 8px';\n typeSelect.style.backgroundColor = 'rgba(255, 255, 255, 0.1)';\n typeSelect.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n typeSelect.style.borderRadius = '4px';\n typeSelect.style.color = '#fff';\n typeSelect.style.fontSize = '12px';\n typeSelect.style.cursor = 'pointer';\n typeSelect.style.outline = 'none';\n typeSelect.style.marginBottom = '12px';\n\n // Add default option\n var defaultOption = document.createElement('option');\n defaultOption.value = '';\n defaultOption.textContent = 'Select a message type';\n defaultOption.disabled = true;\n defaultOption.selected = true;\n typeSelect.appendChild(defaultOption);\n\n // Add message types\n Object.keys(messageTypes).forEach(function(msgType) {\n var option = document.createElement('option');\n option.value = msgType;\n option.textContent = msgType;\n typeSelect.appendChild(option);\n });\n\n // Add wildcard option for custom message types\n var wildcardOption = document.createElement('option');\n wildcardOption.value = '*';\n wildcardOption.textContent = '* (Custom)';\n typeSelect.appendChild(wildcardOption);\n\n formContainer.appendChild(typeLabel);\n formContainer.appendChild(typeSelect);\n\n // Custom Message Type Input Container (shown when \"*\" is selected)\n var customTypeContainer = document.createElement('div');\n customTypeContainer.style.display = 'none';\n customTypeContainer.style.marginBottom = '12px';\n\n var customTypeLabel = document.createElement('label');\n customTypeLabel.textContent = 'Message Type';\n customTypeLabel.style.display = 'block';\n customTypeLabel.style.fontSize = '11px';\n customTypeLabel.style.fontWeight = '600';\n customTypeLabel.style.marginBottom = '4px';\n customTypeLabel.style.color = 'rgba(255, 255, 255, 0.9)';\n\n var customTypeInput = document.createElement('input');\n customTypeInput.type = 'text';\n customTypeInput.placeholder = 'Enter message type name';\n customTypeInput.style.width = '100%';\n customTypeInput.style.padding = '6px 8px';\n customTypeInput.style.backgroundColor = 'rgba(255, 255, 255, 0.05)';\n customTypeInput.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n customTypeInput.style.borderRadius = '4px';\n customTypeInput.style.color = '#fff';\n customTypeInput.style.fontSize = '11px';\n customTypeInput.style.fontFamily = 'monospace';\n customTypeInput.style.outline = 'none';\n\n customTypeContainer.appendChild(customTypeLabel);\n customTypeContainer.appendChild(customTypeInput);\n formContainer.appendChild(customTypeContainer);\n\n // Message Payload Input Container\n var payloadContainer = document.createElement('div');\n payloadContainer.style.display = 'none';\n payloadContainer.style.marginBottom = '12px';\n\n var payloadLabel = document.createElement('label');\n payloadLabel.textContent = 'Payload';\n payloadLabel.style.display = 'block';\n payloadLabel.style.fontSize = '11px';\n payloadLabel.style.fontWeight = '600';\n payloadLabel.style.marginBottom = '4px';\n payloadLabel.style.color = 'rgba(255, 255, 255, 0.9)';\n\n var payloadFieldsContainer = document.createElement('div');\n payloadFieldsContainer.style.backgroundColor = 'rgba(255, 255, 255, 0.05)';\n payloadFieldsContainer.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n payloadFieldsContainer.style.borderRadius = '4px';\n payloadFieldsContainer.style.padding = '8px';\n payloadFieldsContainer.style.fontFamily = 'monospace';\n payloadFieldsContainer.style.fontSize = '11px';\n\n var payloadTextarea = document.createElement('textarea');\n payloadTextarea.style.width = '100%';\n payloadTextarea.style.minHeight = '80px';\n payloadTextarea.style.padding = '6px 8px';\n payloadTextarea.style.backgroundColor = 'rgba(255, 255, 255, 0.05)';\n payloadTextarea.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n payloadTextarea.style.borderRadius = '4px';\n payloadTextarea.style.color = '#fff';\n payloadTextarea.style.fontSize = '11px';\n payloadTextarea.style.fontFamily = 'monospace';\n payloadTextarea.style.outline = 'none';\n payloadTextarea.style.resize = 'vertical';\n payloadTextarea.placeholder = '{}';\n payloadTextarea.value = '{}';\n\n payloadContainer.appendChild(payloadLabel);\n payloadContainer.appendChild(payloadFieldsContainer);\n payloadContainer.appendChild(payloadTextarea);\n formContainer.appendChild(payloadContainer);\n\n // Error message container\n var errorContainer = document.createElement('div');\n errorContainer.style.display = 'none';\n errorContainer.style.padding = '6px 8px';\n errorContainer.style.backgroundColor = 'rgba(220, 38, 38, 0.2)';\n errorContainer.style.border = '1px solid rgba(220, 38, 38, 0.4)';\n errorContainer.style.borderRadius = '4px';\n errorContainer.style.marginBottom = '8px';\n errorContainer.style.fontSize = '11px';\n errorContainer.style.color = '#fca5a5';\n\n formContainer.appendChild(errorContainer);\n\n // Variables to store current message type and its schema\n var currentFormInputs: any = {};\n var currentMessageType = '';\n\n // Update payload fields based on selected message type\n typeSelect.addEventListener('change', function() {\n var selectedType = typeSelect.value;\n currentMessageType = selectedType;\n\n if (selectedType) {\n // Show/hide custom type input based on selection\n if (selectedType === '*') {\n customTypeContainer.style.display = 'block';\n customTypeInput.focus();\n } else {\n customTypeContainer.style.display = 'none';\n }\n\n payloadContainer.style.display = 'block';\n errorContainer.style.display = 'none';\n currentFormInputs = {};\n\n // Clear previous fields\n payloadFieldsContainer.innerHTML = '';\n\n var schema = messageTypes[selectedType];\n\n // If schema exists and has properties, create form inputs\n if (schema && schema.properties && Object.keys(schema.properties).length > 0) {\n payloadTextarea.style.display = 'none';\n payloadFieldsContainer.style.display = 'block';\n\n // Generate form fields based on schema\n Object.keys(schema.properties).forEach(function(fieldName) {\n var fieldSchema = schema.properties[fieldName];\n var fieldContainer = document.createElement('div');\n fieldContainer.style.marginBottom = '8px';\n\n var fieldLabel = document.createElement('label');\n fieldLabel.textContent = fieldName;\n if (schema.required && schema.required.includes(fieldName)) {\n fieldLabel.textContent += ' *';\n }\n fieldLabel.style.display = 'block';\n fieldLabel.style.fontSize = '10px';\n fieldLabel.style.marginBottom = '3px';\n fieldLabel.style.color = 'rgba(255, 255, 255, 0.8)';\n\n var fieldInput;\n\n if (fieldSchema.type === 'boolean') {\n fieldInput = document.createElement('input');\n fieldInput.type = 'checkbox';\n fieldInput.style.width = '16px';\n fieldInput.style.height = '16px';\n fieldInput.style.cursor = 'pointer';\n } else if (fieldSchema.type === 'number' || fieldSchema.type === 'integer') {\n fieldInput = document.createElement('input');\n fieldInput.type = 'number';\n if (fieldSchema.type === 'integer') {\n fieldInput.step = '1';\n }\n fieldInput.style.width = '100%';\n fieldInput.style.padding = '4px 6px';\n fieldInput.style.backgroundColor = 'rgba(255, 255, 255, 0.05)';\n fieldInput.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n fieldInput.style.borderRadius = '3px';\n fieldInput.style.color = '#fff';\n fieldInput.style.fontSize = '11px';\n fieldInput.style.outline = 'none';\n } else {\n fieldInput = document.createElement('input');\n fieldInput.type = 'text';\n fieldInput.style.width = '100%';\n fieldInput.style.padding = '4px 6px';\n fieldInput.style.backgroundColor = 'rgba(255, 255, 255, 0.05)';\n fieldInput.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n fieldInput.style.borderRadius = '3px';\n fieldInput.style.color = '#fff';\n fieldInput.style.fontSize = '11px';\n fieldInput.style.outline = 'none';\n }\n\n if (fieldSchema.description) {\n var fieldDesc = document.createElement('div');\n fieldDesc.textContent = fieldSchema.description;\n fieldDesc.style.fontSize = '9px';\n fieldDesc.style.color = 'rgba(255, 255, 255, 0.5)';\n fieldDesc.style.marginTop = '2px';\n fieldContainer.appendChild(fieldLabel);\n fieldContainer.appendChild(fieldInput);\n fieldContainer.appendChild(fieldDesc);\n } else {\n fieldContainer.appendChild(fieldLabel);\n fieldContainer.appendChild(fieldInput);\n }\n\n payloadFieldsContainer.appendChild(fieldContainer);\n currentFormInputs[fieldName] = { input: fieldInput, schema: fieldSchema };\n });\n } else {\n // Use JSON textarea for free-form input (no schema or empty schema)\n payloadTextarea.style.display = 'block';\n payloadFieldsContainer.style.display = 'none';\n payloadTextarea.value = '{}';\n\n // Update placeholder based on whether schema exists\n if (!schema) {\n payloadTextarea.placeholder = 'Enter JSON payload (no message format defined)\\n\\nExample:\\n{\\n \"key\": \"value\"\\n}';\n } else {\n payloadTextarea.placeholder = '{}';\n }\n }\n } else {\n payloadContainer.style.display = 'none';\n }\n });\n\n // Send Button\n var sendButton = document.createElement('button');\n sendButton.textContent = 'Send';\n sendButton.style.width = '100%';\n sendButton.style.padding = '8px 12px';\n sendButton.style.backgroundColor = '#8b5cf6';\n sendButton.style.border = 'none';\n sendButton.style.borderRadius = '4px';\n sendButton.style.color = '#fff';\n sendButton.style.fontSize = '12px';\n sendButton.style.fontWeight = '600';\n sendButton.style.cursor = 'pointer';\n sendButton.style.transition = 'background-color 0.2s';\n\n var isButtonInSuccessState = false;\n var hoverColor = '#7c3aed';\n var normalColor = '#8b5cf6';\n\n sendButton.addEventListener('mouseenter', function() {\n if (!isButtonInSuccessState && !sendButton.disabled) {\n sendButton.style.backgroundColor = hoverColor;\n }\n });\n sendButton.addEventListener('mouseleave', function() {\n if (!isButtonInSuccessState && !sendButton.disabled) {\n sendButton.style.backgroundColor = normalColor;\n }\n });\n\n // Update the connection status function to also manage button state\n updateConnectionStatus = function() {\n const isConnected = room.connection?.isOpen;\n if (statusDotRef.element) {\n statusDotRef.element.style.backgroundColor = isConnected ? '#22c55e' : '#ef4444';\n }\n\n // Update button disabled state\n sendButton.disabled = !isConnected;\n if (!isConnected) {\n sendButton.style.backgroundColor = '#6b7280';\n sendButton.style.cursor = 'not-allowed';\n sendButton.style.opacity = '0.5';\n } else if (!isButtonInSuccessState) {\n sendButton.style.backgroundColor = normalColor;\n sendButton.style.cursor = 'pointer';\n sendButton.style.opacity = '1';\n }\n };\n\n // Swap out the onLeave callback to use the combined update function\n room.onLeave.remove(onLeaveCallbackRef.current);\n room.onLeave(updateConnectionStatus);\n onLeaveCallbackRef.current = updateConnectionStatus;\n\n updateConnectionStatus();\n\n sendButton.addEventListener('click', function() {\n errorContainer.style.display = 'none';\n\n // Check if room is connected\n if (!room.connection?.isOpen) {\n errorContainer.textContent = 'Cannot send message: Room is not connected';\n errorContainer.style.display = 'block';\n return;\n }\n\n if (!currentMessageType) {\n errorContainer.textContent = 'Please select a message type';\n errorContainer.style.display = 'block';\n return;\n }\n\n // Determine actual message type to send\n var actualMessageType = currentMessageType;\n if (currentMessageType === '*') {\n actualMessageType = customTypeInput.value.trim();\n if (!actualMessageType) {\n errorContainer.textContent = 'Please enter a message type name';\n errorContainer.style.display = 'block';\n return;\n }\n }\n\n try {\n var payload;\n\n // Build payload from form inputs or textarea\n if (Object.keys(currentFormInputs).length > 0) {\n payload = {};\n var schema = messageTypes[currentMessageType];\n\n for (var fieldName in currentFormInputs) {\n var fieldData = currentFormInputs[fieldName];\n var input = fieldData.input;\n var fieldSchema = fieldData.schema;\n var value;\n\n if (fieldSchema.type === 'boolean') {\n value = input.checked;\n } else if (fieldSchema.type === 'number' || fieldSchema.type === 'integer') {\n value = input.value ? parseFloat(input.value) : undefined;\n } else {\n value = input.value || undefined;\n }\n\n // Only include required fields or fields with values\n if (value !== undefined || (schema.required && schema.required.includes(fieldName))) {\n payload[fieldName] = value;\n }\n }\n } else {\n payload = JSON.parse(payloadTextarea.value);\n }\n\n // Send the message\n room.send(actualMessageType, payload);\n\n // Change button to success state\n isButtonInSuccessState = true;\n sendButton.textContent = 'Message sent!';\n sendButton.style.backgroundColor = '#22c55e';\n sendButton.style.cursor = 'default';\n\n // Restore button after 1.5 seconds\n setTimeout(function() {\n isButtonInSuccessState = false;\n sendButton.textContent = 'Send';\n sendButton.style.backgroundColor = normalColor;\n sendButton.style.cursor = 'pointer';\n }, 800);\n\n } catch (e) {\n errorContainer.textContent = 'Error: ' + e.message;\n errorContainer.style.display = 'block';\n }\n });\n\n formContainer.appendChild(sendButton);\n\n modal.appendChild(formContainer);\n document.body.appendChild(modal);\n}\n\n// Create and open State Inspector modal\nfunction openStateInspectorModal(uniquePanelId) {\n var debugInfo = roomDebugInfo.get(uniquePanelId);\n if (!debugInfo || !debugInfo.room) {\n console.warn('Room not found for panel:', uniquePanelId);\n return;\n }\n\n var room = debugInfo.room;\n\n // Remove existing modal if present\n var existingModal = document.getElementById('debug-state-inspector-modal');\n if (existingModal) {\n existingModal.remove();\n }\n\n // Load saved position and size from localStorage\n var savedStateInspectorPrefs = null;\n try {\n var saved = localStorage.getItem('colyseus-state-inspector-preferences');\n if (saved) {\n savedStateInspectorPrefs = JSON.parse(saved);\n }\n } catch (e) {\n // Ignore localStorage errors\n }\n\n // Default values\n var defaultWidth = 600;\n var defaultHeight = 500;\n var defaultLeft = '50%';\n var defaultTop = '50%';\n var defaultTransform = 'translate(-50%, -50%)';\n\n // Use saved preferences if available\n if (savedStateInspectorPrefs) {\n if (savedStateInspectorPrefs.width && savedStateInspectorPrefs.width >= 300) {\n defaultWidth = savedStateInspectorPrefs.width;\n }\n if (savedStateInspectorPrefs.height && savedStateInspectorPrefs.height >= 200) {\n defaultHeight = savedStateInspectorPrefs.height;\n }\n if (savedStateInspectorPrefs.left !== undefined && savedStateInspectorPrefs.top !== undefined) {\n // Constrain position to window boundaries\n var maxLeft = window.innerWidth - defaultWidth;\n var maxTop = window.innerHeight - defaultHeight;\n\n var constrainedLeft = Math.max(0, Math.min(savedStateInspectorPrefs.left, maxLeft));\n var constrainedTop = Math.max(0, Math.min(savedStateInspectorPrefs.top, maxTop));\n\n defaultLeft = constrainedLeft + 'px';\n defaultTop = constrainedTop + 'px';\n defaultTransform = 'none';\n }\n }\n\n // Function to save state inspector preferences\n function saveStateInspectorPreferences() {\n try {\n var rect = modal.getBoundingClientRect();\n var prefs = {\n width: rect.width,\n height: rect.height,\n left: rect.left,\n top: rect.top\n };\n localStorage.setItem('colyseus-state-inspector-preferences', JSON.stringify(prefs));\n } catch (e) {\n // Ignore localStorage errors\n }\n }\n\n // Status dot reference\n var statusDotRef: any = {};\n\n // Function to update status dot color\n const updateStateViewerStatusDot = () => {\n if (statusDotRef.element) {\n statusDotRef.element.style.backgroundColor = room.connection?.isOpen ? '#22c55e' : '#ef4444';\n }\n };\n\n // Register the onLeave callback\n room.onLeave(updateStateViewerStatusDot);\n\n // Create modal using shared utility with automatic onLeave tracking\n const modal = createModal({\n id: 'debug-state-inspector-modal',\n width: defaultWidth + 'px',\n height: defaultHeight + 'px',\n minWidth: '300px',\n minHeight: '200px',\n maxWidth: '90vw',\n maxHeight: '90vh',\n top: defaultTop,\n left: defaultLeft,\n transform: defaultTransform,\n room: room,\n trackOnLeave: true,\n onLeaveCallback: updateStateViewerStatusDot\n });\n\n // Create header using shared utility\n const headerComponents = createModalHeader({\n title: `${debugInfo.roomName} - State Viewer`,\n modal: modal,\n statusDot: true,\n statusColor: room.connection?.isOpen ? '#22c55e' : '#ef4444',\n statusDotRef: statusDotRef\n });\n const header = headerComponents.header;\n const closeButton = headerComponents.closeButton;\n\n modal.appendChild(header);\n\n // Update status dot initially\n updateStateViewerStatusDot();\n\n // State content container\n var contentContainer = document.createElement('div');\n contentContainer.style.padding = '8px';\n contentContainer.style.overflowY = 'auto';\n contentContainer.style.flex = '1';\n contentContainer.style.minHeight = '0';\n contentContainer.style.backgroundColor = '#1e1e1e';\n contentContainer.id = 'debug-state-content';\n\n // Single event listener for all expand buttons (event delegation)\n contentContainer.addEventListener('click', function(e: MouseEvent) {\n var expandButton = (e.target as HTMLElement).closest('[data-expand-button]');\n if (expandButton) {\n e.stopPropagation();\n toggleExpand(expandButton);\n }\n });\n\n // // Counter for unique IDs\n // var stateNodeCounter = 0;\n\n // Track expanded paths across re-renders\n var expandedPaths = new Set();\n\n // Helper function to escape HTML\n function escapeHtml(text) {\n var div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n }\n\n // Helper function to check if a value is expandable (object, array, or collection)\n function isExpandable(value) {\n if (value === null || value === undefined) {\n return false;\n }\n var valueType = typeof value;\n var isObject = valueType === 'object' && !(value instanceof Array);\n var hasForEach = valueType === 'object' && typeof value.forEach === 'function';\n var isArray = value instanceof Array;\n return isObject || isArray || hasForEach;\n }\n\n // Helper function to get label color based on field name\n function getLabelColor(fieldName) {\n return typeof fieldName === 'string' && fieldName.startsWith('\"') ? '#CE9178' : '#DCDCAA';\n }\n\n // Helper function to get display state for expandable nodes\n function getDisplayState(depth, isPathExpanded) {\n var isRoot = depth === 0;\n return {\n isRoot: isRoot,\n initialDisplay: isRoot ? 'block' : (isPathExpanded ? 'block' : 'none'),\n initialIcon: (isRoot || isPathExpanded) ? '▼' : '▶',\n rootClass: isRoot ? ' data-root-node=\"true\"' : ''\n };\n }\n\n // Helper function to get refId display string\n function getRefIdDisplay(refId) {\n return refId !== null && refId !== undefined ? '<span style=\"color: #909090; font-size: 11px; margin-left: 4px;\">(ref: ' + refId + ')</span>' : '';\n }\n\n // Helper function to render expand button HTML\n function renderExpandButton(displayState, displayLabel, refIdDisplay, size) {\n var html = '<div data-expand-button' + displayState.rootClass + ' style=\"display: flex; align-items: center; cursor: ' + (displayState.isRoot ? 'default' : 'pointer') + '; user-select: none; margin: 0; padding: 1px 0;\" onmouseover=\"' + (displayState.isRoot ? '' : 'this.style.backgroundColor=\\'rgba(255,255,255,0.05)\\'') + '\" onmouseout=\"' + (displayState.isRoot ? '' : 'this.style.backgroundColor=\\'transparent\\'') + '\">';\n html += '<span data-expand-icon style=\"margin-right: 4px; color: #858585; font-size: 10px; width: 10px; display: inline-block; text-align: center; user-select: none;\">' + displayState.initialIcon + '</span>';\n if (displayLabel) {\n html += '<span style=\"color: ' + getLabelColor(displayLabel) + ';\">' + escapeHtml(String(displayLabel)) + '</span>';\n }\n if (size !== null && size !== undefined && size !== '?') {\n // ×\n html += ' <span style=\"color: #858585;\">(' + size + ') </span>';\n }\n html += refIdDisplay;\n html += '</div>';\n return html;\n }\n\n // Helper function to render a key-value pair\n function renderKeyValue(key, value, depth, currentPath, keyDisplay, isKeyString) {\n if (isExpandable(value)) {\n // For expandable values, renderState handles its own container with proper indentation\n // Pass the fieldName so it displays the key as the label\n if (keyDisplay !== null) {\n return renderState(value, depth, String(key), currentPath, keyDisplay);\n } else {\n return renderState(value, depth, String(key), currentPath);\n }\n } else {\n // For primitive values, wrap in a div with key-value formatting\n // Add padding-left to align with expandable items (icon width 10px + margin-right 4px = 14px)\n var indent = depth * 6;\n var html = '<div style=\"margin-left: ' + indent + 'px; padding-left: 14px;\">';\n if (keyDisplay !== null) {\n var keyColor = isKeyString ? '#CE9178' : '#DCDCAA';\n html += '<span style=\"color: ' + keyColor + ';\">' + (isKeyString ? '\"' + escapeHtml(String(keyDisplay)) + '\"' : escapeHtml(String(keyDisplay))) + '</span><span style=\"color: #858585;\">: </span>';\n } else {\n html += '<span style=\"color: #DCDCAA;\">' + escapeHtml(String(key)) + '</span><span style=\"color: #858585;\">: </span>';\n }\n html += renderState(value, depth + 1, String(key), currentPath);\n html += '</div>';\n return html;\n }\n }\n\n // Function to render state recursively\n function renderState(\n obj: any,\n depth: number = 0,\n parentKey: string = '',\n path: string = '',\n fieldName: string = null\n ) {\n var maxDepth = 10;\n if (depth > maxDepth) {\n return '<span style=\"color: #858585; font-style: italic;\">[Max depth reached]</span>';\n }\n\n if (obj === null) {\n return '<span style=\"color: #858585;\">null</span>';\n }\n\n if (obj === undefined) {\n return '<span style=\"color: #858585;\">undefined</span>';\n }\n\n var type = typeof obj;\n var indent = depth * 6;\n var refId = obj[\"~refId\"];\n var nodeId = 'state-node-' + refId;\n var currentPath = path ? path + '.' + (parentKey || '') : (parentKey || 'root');\n var isPathExpanded = expandedPaths.has(currentPath);\n var refIdDisplay = getRefIdDisplay(refId);\n\n if (type === 'string') {\n return '<span style=\"color: #CE9178;\">\"' + escapeHtml(String(obj)) + '\"</span>';\n }\n\n if (type === 'number') {\n return '<span style=\"color: #B5CEA8;\">' + obj + '</span>';\n }\n\n if (type === 'boolean') {\n return '<span style=\"color: #569CD6;\">' + obj + '</span>';\n }\n\n // Check if object has forEach method\n var hasForEach = typeof obj.forEach === 'function';\n var collectionSize = (hasForEach) && (obj.size || obj.length) || null;\n\n if (hasForEach) {\n var size = (collectionSize !== null ? collectionSize : '?');\n var contentId = nodeId + '-content';\n var displayState = getDisplayState(depth, isPathExpanded);\n var displayLabel = fieldName !== null ? fieldName : (displayState.isRoot ? 'State' : '');\n\n var html = '<div style=\"margin-left: ' + indent + 'px;\" data-path=\"' + escapeHtml(currentPath) + '\">';\n html += renderExpandButton(displayState, displayLabel, refIdDisplay, size);\n html += '<div id=\"' + contentId + '\" style=\"display: ' + displayState.initialDisplay + ';\">';\n\n // Handle forEach collections (Map, Set, etc.)\n var isSet = obj instanceof Set || (obj.constructor && obj.constructor.name === 'Set');\n try {\n obj.forEach(function (value, key) {\n if (isSet) {\n // For Sets, forEach passes (value, value, set), so we only use the first parameter\n html += renderState(value, depth + 1, String(key), currentPath);\n } else {\n // For Maps, format key and use renderKeyValue to handle expandable values and proper formatting\n var isKeyNumber = typeof key === 'number';\n var keyStr = isKeyNumber ? '[' + String(key) + ']' : String(key);\n html += renderKeyValue(key, value, depth + 1, currentPath, keyStr, typeof key === 'string');\n }\n });\n } catch (e) {\n var errorIndent = (depth + 1) * 6;\n html += '<div style=\"margin-left: ' + errorIndent + 'px; color: #e74856;\">Error iterating: ' + escapeHtml(e.message) + '</div>';\n }\n\n html += '</div>';\n html += '</div>';\n return html;\n }\n\n if (type === 'object') {\n var keys = Object.keys(obj);\n var contentId = nodeId + '-content';\n var displayState = getDisplayState(depth, isPathExpanded);\n var displayLabel = fieldName !== null ? fieldName : (displayState.isRoot ? 'state' : '');\n\n var html = '<div style=\"margin-left: ' + indent + 'px;\" data-path=\"' + escapeHtml(currentPath) + '\">';\n\n if (keys.length === 0) {\n if (displayLabel) {\n html += '<span style=\"color: ' + getLabelColor(displayLabel) + ';\">' + escapeHtml(String(displayLabel)) + '</span><span style=\"color: #858585;\"> {}</span>' + refIdDisplay;\n } else {\n html += '<span style=\"color: #858585;\">{}</span>' + refIdDisplay;\n }\n } else {\n html += renderExpandButton(displayState, displayLabel, refIdDisplay, null);\n html += '<div id=\"' + contentId + '\" style=\"display: ' + displayState.initialDisplay + ';\">';\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (key === \"~refId\") continue;// skip refId\n html += renderKeyValue(key, obj[key], depth + 1, currentPath, key, false);\n }\n\n html += '</div>';\n }\n\n html += '</div>';\n return html;\n }\n\n return '<span style=\"color: #858585;\">' + escapeHtml(String(obj)) + '</span>';\n }\n\n // Function to toggle expand/collapse\n function toggleExpand(expandButton) {\n // Don't allow collapsing root node\n var content = expandButton.nextElementSibling;\n var icon = expandButton.querySelector('[data-expand-icon]');\n if (content && content.style) {\n var isHidden = content.style.display === 'none';\n content.style.display = isHidden ? 'block' : 'none';\n if (icon) {\n icon.textContent = isHidden ? '▼' : '▶';\n }\n\n // Track expanded state by path\n var pathElement = expandButton.closest('[data-path]');\n if (pathElement) {\n var path = pathElement.getAttribute('data-path');\n if (isHidden) {\n expandedPaths.add(path);\n } else {\n expandedPaths.delete(path);\n }\n }\n }\n }\n\n // Function to update state display\n function updateStateDisplay() {\n try {\n // Save currently expanded paths before clearing\n var currentExpandedPaths = new Set();\n var existingExpandButtons = contentContainer.querySelectorAll('[data-expand-button]');\n for (var i = 0; i < existingExpandButtons.length; i++) {\n var button = existingExpandButtons[i];\n var pathElement = button.closest('[data-path]');\n if (pathElement) {\n var path = pathElement.getAttribute('data-path');\n var content = button.nextElementSibling as HTMLElement;\n if (content && content.style && content.style.display !== 'none') {\n currentExpandedPaths.add(path);\n }\n }\n }\n\n // Merge with previously tracked expanded paths\n // Keep paths that were expanded before, or are currently expanded\n var pathsToKeep = new Set();\n expandedPaths.forEach(function(path) {\n pathsToKeep.add(path);\n });\n currentExpandedPaths.forEach(function(path) {\n pathsToKeep.add(path);\n });\n expandedPaths = pathsToKeep;\n\n // stateNodeCounter = 0; // Reset counter for new render\n var state = room.state || {};\n contentContainer.innerHTML = '<div style=\"font-family: \\'Consolas\\', \\'Monaco\\', \\'Courier New\\', monospace; font-size: 12px; line-height: 1.5; color: #d4d4d4; padding: 8px;\">' + renderState(state) + '</div>';\n\n // Event delegation: single click listener handles all expand buttons\n } catch (e) {\n contentContainer.innerHTML = '<div style=\"color: #e74856; padding: 20px;\">Error accessing room state: ' + escapeHtml(e.message) + '</div>';\n }\n }\n\n // Throttle function to prevent excessive re-renders\n // TODO: prevent re-renders of unchanged refIds instead of just throttling\n function throttle(func, wait) {\n var timeout;\n var previous = 0;\n return function executedFunction() {\n var context = this;\n var args = arguments;\n var now = Date.now();\n var remaining = wait - (now - previous);\n\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n func.apply(context, args);\n } else if (!timeout) {\n timeout = setTimeout(function() {\n previous = Date.now();\n timeout = null;\n func.apply(context, args);\n }, remaining);\n }\n };\n }\n\n // Create throttled version of updateStateDisplay\n var throttledUpdateStateDisplay = throttle(updateStateDisplay, 200);\n\n // Initial render - root is always expanded\n expandedPaths.add('root');\n updateStateDisplay();\n\n // Update state when it changes\n const originalTriggerChanges = room.serializer.decoder.triggerChanges;\n room.serializer.decoder.triggerChanges = function(changes) {\n originalTriggerChanges?.apply(this, arguments);\n throttledUpdateStateDisplay();\n /**\n * TODO: keep track of which refIds have changed and only re-render those\n */\n }\n\n modal.appendChild(contentContainer);\n document.body.appendChild(modal);\n\n // Drag and resize state variables\n var isDragging = false;\n var dragStartX = 0;\n var dragStartY = 0;\n var modalStartX = 0;\n var modalStartY = 0;\n var isResizing = false;\n var resizeHandle = null;\n var resizeStartX = 0;\n var resizeStartY = 0;\n var resizeStartWidth = 0;\n var resizeStartHeight = 0;\n var resizeStartLeft = 0;\n var resizeStartTop = 0;\n\n header.addEventListener('mousedown', function(e) {\n const target = e.target as HTMLElement;\n // Don't drag if clicking on a resize handle\n if (target.classList && target.classList.contains('resize-handle')) {\n return;\n }\n if (target === closeButton || closeButton.contains(target)) {\n return; // Don't drag when clicking close button\n }\n isDragging = true;\n dragStartX = e.clientX;\n dragStartY = e.clientY;\n var rect = modal.getBoundingClientRect();\n modalStartX = rect.left;\n modalStartY = rect.top;\n modal.style.cursor = 'move';\n e.preventDefault();\n });\n\n var handleMouseMove = function(e) {\n if (isResizing && resizeHandle) {\n // Handle resize\n var deltaX = e.clientX - resizeStartX;\n var deltaY = e.clientY - resizeStartY;\n var newWidth = resizeStartWidth;\n var newHeight = resizeStartHeight;\n var newLeft = resizeStartLeft;\n var newTop = resizeStartTop;\n\n if (resizeHandle.includes('e')) {\n newWidth = resizeStartWidth + deltaX;\n }\n if (resizeHandle.includes('w')) {\n newWidth = resizeStartWidth - deltaX;\n newLeft = resizeStartLeft + deltaX;\n }\n if (resizeHandle.includes('s')) {\n newHeight = resizeStartHeight + deltaY;\n }\n if (resizeHandle.includes('n')) {\n newHeight = resizeStartHeight - deltaY;\n newTop = resizeStartTop + deltaY;\n }\n\n // Apply constraints\n newWidth = Math.max(parseInt(modal.style.minWidth) || 300, Math.min(newWidth, window.innerWidth - newLeft));\n newHeight = Math.max(parseInt(modal.style.minHeight) || 200, Math.min(newHeight, window.innerHeight - newTop));\n\n modal.style.width = newWidth + 'px';\n modal.style.height = newHeight + 'px';\n modal.style.left = newLeft + 'px';\n modal.style.top = newTop + 'px';\n modal.style.transform = 'none';\n } else if (isDragging) {\n // Handle drag\n var deltaX = e.clientX - dragStartX;\n var deltaY = e.clientY - dragStartY;\n var newX = modalStartX + deltaX;\n var newY = modalStartY + deltaY;\n\n // Constrain to viewport\n var maxX = window.innerWidth - modal.offsetWidth;\n var maxY = window.innerHeight - modal.offsetHeight;\n newX = Math.max(0, Math.min(newX, maxX));\n newY = Math.max(0, Math.min(newY, maxY));\n\n modal.style.left = newX + 'px';\n modal.style.top = newY + 'px';\n modal.style.transform = 'none';\n }\n };\n\n document.addEventListener('mousemove', handleMouseMove);\n\n var handleMouseUp = function() {\n if (isDragging) {\n isDragging = false;\n modal.style.cursor = '';\n saveStateInspectorPreferences();\n }\n if (isResizing) {\n isResizing = false;\n resizeHandle = null;\n saveStateInspectorPreferences();\n }\n };\n\n document.addEventListener('mouseup', handleMouseUp);\n\n // Resize functionality\n var resizeHandleSize = 8;\n var cornerHandleSize = 12; // Larger handles for corners to make them easier to grab\n\n // Create edge handles first, then corner handles (so corners are on top)\n var edgeHandles = ['n', 's', 'e', 'w'];\n var cornerHandles = ['nw', 'ne', 'sw', 'se'];\n\n // Create edge handles (leaving space for corners)\n edgeHandles.forEach(function(handle) {\n var handleEl = document.createElement('div');\n handleEl.className = 'resize-handle resize-' + handle;\n handleEl.style.position = 'absolute';\n handleEl.style.backgroundColor = 'transparent';\n handleEl.style.zIndex = '10000';\n handleEl.style.pointerEvents = 'auto';\n\n if (handle === 'n' || handle === 's') {\n handleEl.style.height = resizeHandleSize + 'px';\n handleEl.style.left = cornerHandleSize + 'px';\n handleEl.style.right = cornerHandleSize + 'px';\n if (handle === 'n') {\n handleEl.style.top = '0';\n handleEl.style.cursor = 'n-resize';\n } else {\n handleEl.style.bottom = '0';\n handleEl.style.cursor = 's-resize';\n }\n } else {\n handleEl.style.width = resizeHandleSize + 'px';\n handleEl.style.top = cornerHandleSize + 'px';\n handleEl.style.bottom = cornerHandleSize + 'px';\n if (handle === 'e') {\n handleEl.style.right = '0';\n handleEl.style.cursor = 'e-resize';\n } else {\n handleEl.style.left = '0';\n handleEl.style.cursor = 'w-resize';\n }\n }\n\n handleEl.addEventListener('mousedown', function(e) {\n e.stopPropagation();\n e.preventDefault();\n isResizing = true;\n resizeHandle = handle;\n resizeStartX = e.clientX;\n resizeStartY = e.clientY;\n var rect = modal.getBoundingClientRect();\n resizeStartWidth = rect.width;\n resizeStartHeight = rect.height;\n resizeStartLeft = rect.left;\n resizeStartTop = rect.top;\n });\n\n modal.appendChild(handleEl);\n });\n\n // Create corner handles (higher z-index so they're on top)\n cornerHandles.forEach(function(handle) {\n var handleEl = document.createElement('div');\n handleEl.className = 'resize-handle resize-' + handle;\n handleEl.style.position = 'absolute';\n handleEl.style.backgroundColor = 'transparent';\n handleEl.style.zIndex = '10002';\n handleEl.style.pointerEvents = 'auto';\n handleEl.style.width = cornerHandleSize + 'px';\n handleEl.style.height = cornerHandleSize + 'px';\n\n if (handle === 'nw') {\n handleEl.style.top = '0';\n handleEl.style.left = '0';\n handleEl.style.cursor = 'nw-resize';\n } else if (handle === 'ne') {\n handleEl.style.top = '0';\n handleEl.style.right = '0';\n handleEl.style.cursor = 'ne-resize';\n } else if (handle === 'sw') {\n handleEl.style.bottom = '0';\n handleEl.style.left = '0';\n handleEl.style.cursor = 'sw-resize';\n } else if (handle === 'se') {\n handleEl.style.bottom = '0';\n handleEl.style.right = '0';\n handleEl.style.cursor = 'se-resize';\n }\n\n handleEl.addEventListener('mousedown', function(e) {\n e.stopPropagation();\n e.preventDefault();\n isResizing = true;\n resizeHandle = handle;\n resizeStartX = e.clientX;\n resizeStartY = e.clientY;\n var rect = modal.getBoundingClientRect();\n resizeStartWidth = rect.width;\n resizeStartHeight = rect.height;\n resizeStartLeft = rect.left;\n resizeStartTop = rect.top;\n });\n\n modal.appendChild(handleEl);\n });\n\n\n // Remove state change listener when modal is closed\n var originalRemove = modal.remove;\n modal.remove = function() {\n // Restore original trigger changes\n room.serializer.decoder.triggerChanges = originalTriggerChanges;\n originalRemove.call(this);\n };\n}\n\n// Apply panel position based on current setting\nfunction applyPanelPosition() {\n var logoContainer = document.getElementById('debug-logo-container');\n var menu = document.getElementById('debug-menu');\n var panels = document.querySelectorAll('[id^=\"debug-panel-\"]');\n\n var positions = {\n 'bottom-right': { bottom: '14px', right: '14px', top: 'auto', left: 'auto' },\n 'bottom-left': { bottom: '14px', left: '14px', top: 'auto', right: 'auto' },\n 'top-left': { top: '14px', left: '14px', bottom: 'auto', right: 'auto' },\n 'top-right': { top: '14px', right: '14px', bottom: 'auto', left: 'auto' }\n };\n\n var pos = positions[preferences.panelPosition.position] || positions['bottom-right'];\n\n // Update logo container\n if (logoContainer) {\n logoContainer.style.bottom = pos.bottom;\n logoContainer.style.right = pos.right;\n logoContainer.style.top = pos.top;\n logoContainer.style.left = pos.left;\n }\n\n // Update menu position\n if (menu) {\n if (preferences.panelPosition.position.startsWith('bottom')) {\n menu.style.bottom = '60px';\n menu.style.top = 'auto';\n } else {\n // For top positions, menu appears below the logo\n menu.style.top = '60px';\n menu.style.bottom = 'auto';\n }\n menu.style.right = pos.right;\n menu.style.left = pos.left;\n }\n\n // Update panels\n repositionDebugPanels();\n}\n\n// Hide panels for this session\nfunction hidePanelsForSession() {\n panelsHidden = true;\n savePreferences(); // Save the hidden state\n\n var logoContainer = document.getElementById('debug-logo-container');\n var menu = document.getElementById('debug-menu');\n var panels = document.querySelectorAll('[id^=\"debug-panel-\"]') as NodeListOf<HTMLElement>;\n\n if (logoContainer) {\n logoContainer.style.display = 'none';\n }\n if (menu) {\n menu.style.display = 'none';\n }\n panels.forEach(function(panel) {\n panel.style.display = 'none';\n });\n}\n\n// Helper function to format bytes\nfunction formatBytes(bytes) {\n if (!bytes) {\n return '0 B';\n } else if (bytes < 1) {\n bytes = 1; // avoid visual glitches\n }\n var k = 1024;\n var sizes = ['B', 'KB', 'MB', 'GB'];\n var i = Math.floor(Math.log(bytes) / Math.log(k));\n return (Math.round(bytes) / Math.pow(k, i)).toFixed(1) + ' ' + sizes[i];\n}\n\n// Helper function to create debug panel for a room\nfunction createDebugPanel(uniquePanelId, debugInfo) {\n // Check if panel already exists\n var existingPanel = document.getElementById('debug-panel-' + uniquePanelId);\n if (existingPanel) {\n return existingPanel;\n }\n\n var panel = document.createElement('div');\n panel.id = 'debug-panel-' + uniquePanelId;\n panel.style.position = 'fixed';\n // Position will be set by repositionDebugPanels\n panel.style.backgroundColor = 'rgba(0, 0, 0, 0.85)';\n panel.style.color = '#fff';\n panel.style.padding = '8px';\n panel.style.borderRadius = '6px';\n panel.style.fontFamily = 'monospace';\n panel.style.fontSize = '11px';\n panel.style.zIndex = '999';\n panel.style.minWidth = '180px';\n panel.style.marginRight = '6px';\n panel.style.boxShadow = '0 4px 12px rgba(0, 0, 0, 0.5)';\n panel.style.display = panelsHidden ? 'none' : 'block';\n\n var title = document.createElement('div');\n title.id = 'debug-title-' + uniquePanelId;\n title.style.fontWeight = 'bold';\n title.style.marginBottom = '6px';\n title.style.borderBottom = '1px solid rgba(255, 255, 255, 0.15)';\n title.style.paddingBottom = '4px';\n title.style.display = 'flex';\n title.style.alignItems = 'center';\n title.style.justifyContent = 'space-between';\n title.style.gap = '8px';\n title.style.position = 'relative';\n title.innerHTML = '<span id=\"debug-title-text-' + uniquePanelId + '\"><span class=\"debug-room-name\"></span><span class=\"debug-info-icon\" style=\"display: inline-flex; align-items: center; margin-left: 4px; cursor: pointer; opacity: 0.6; vertical-align: middle;\">' + infoIcon.replace('height=\"200px\" width=\"200px\"', 'height=\"10\" width=\"10\"') + '</span></span><span id=\"debug-ping-' + uniquePanelId + '\" style=\"font-size: 10px; font-weight: normal; color: #888;\" title=\"Ping time\">--</span>';\n\n // Create tooltip for info button (will be shown on hover)\n var tooltip = document.createElement('div');\n tooltip.id = 'debug-tooltip-' + uniquePanelId;\n tooltip.style.position = 'absolute';\n tooltip.style.top = '100%';\n tooltip.style.left = '0';\n tooltip.style.marginTop = '4px';\n tooltip.style.padding = '6px 8px';\n tooltip.style.backgroundColor = 'rgba(0, 0, 0, 0.95)';\n tooltip.style.color = '#fff';\n tooltip.style.borderRadius = '4px';\n tooltip.style.fontSize = '10px';\n tooltip.style.fontFamily = 'monospace';\n tooltip.style.zIndex = '1000';\n tooltip.style.display = 'none';\n tooltip.style.boxShadow = '0 2px 8px rgba(0, 0, 0, 0.5)';\n tooltip.style.lineHeight = '1.4';\n tooltip.innerHTML = '<div><strong>Room ID:</strong> ' + debugInfo.roomId + '</div><div><strong>Session ID:</strong> N/A</div>';\n\n var content = document.createElement('div');\n content.id = 'debug-content-' + uniquePanelId;\n\n // Create action buttons container at the bottom\n var actionsContainer = document.createElement('div');\n actionsContainer.id = 'debug-actions-' + uniquePanelId;\n actionsContainer.style.display = 'flex';\n actionsContainer.style.gap = '4px';\n actionsContainer.style.marginTop = '8px';\n actionsContainer.style.paddingTop = '6px';\n actionsContainer.style.borderTop = '1px solid rgba(255, 255, 255, 0.15)';\n actionsContainer.style.position = 'relative';\n\n // Helper function to create action button\n function createActionButton(id, icon, label, onClick) {\n var btn = document.createElement('button');\n btn.id = id;\n btn.style.display = 'flex';\n btn.style.alignItems = 'center';\n btn.style.gap = '4px';\n btn.style.padding = '4px 8px';\n btn.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n btn.style.borderRadius = '4px';\n btn.style.background = 'rgba(255, 255, 255, 0.05)';\n btn.style.color = '#fff';\n btn.style.fontSize = '9px';\n btn.style.cursor = 'pointer';\n btn.style.transition = 'background 0.2s, border-color 0.2s';\n btn.innerHTML = '<span style=\"display: inline-flex; align-items: center; width: 12px; height: 12px;\">' + icon + '</span><span>' + label + '</span>';\n\n btn.addEventListener('mouseenter', function() {\n btn.style.background = 'rgba(255, 255, 255, 0.15)';\n btn.style.borderColor = 'rgba(255, 255, 255, 0.3)';\n });\n btn.addEventListener('mouseleave', function() {\n btn.style.background = 'rgba(255, 255, 255, 0.05)';\n btn.style.borderColor = 'rgba(255, 255, 255, 0.2)';\n });\n btn.addEventListener('click', function(e) {\n e.stopPropagation();\n onClick();\n });\n\n return btn;\n }\n\n // Create action buttons\n var stateBtn = createActionButton(\n 'debug-state-btn-' + uniquePanelId,\n treeViewIcon.replace('height=\"200px\" width=\"200px\"', 'height=\"12\" width=\"12\"'),\n 'State',\n function() { openStateInspectorModal(uniquePanelId); }\n );\n\n var messageBtn = createActionButton(\n 'debug-message-btn-' + uniquePanelId,\n messageIcon.replace('height=\"200px\" width=\"200px\"', 'height=\"12\" width=\"12\"'),\n 'Send',\n function() { openSendMessagesModal(uniquePanelId); }\n );\n messageBtn.style.display = 'none'; // Hidden by default, shown when message types available\n\n // Create disconnect button (red, simulates abnormal websocket close)\n var disconnectBtn = createActionButton(\n 'debug-disconnect-btn-' + uniquePanelId,\n disconnectIcon.replace('height=\"200px\" width=\"200px\"', 'height=\"12\" width=\"12\"'),\n 'Drop',\n function() {\n var info = roomDebugInfo.get(uniquePanelId);\n if (info && info.room && info.room.connection) {\n // Simulate connection closure\n info.room.connection.close(CloseCode.MAY_TRY_RECONNECT);\n }\n }\n );\n\n // Track button state for hover effects\n var isReconnecting = false;\n\n // Helper to apply normal (red) button style\n function applyNormalStyle() {\n disconnectBtn.style.background = 'rgba(239, 68, 68, 0.2)';\n disconnectBtn.style.borderColor = 'rgba(239, 68, 68, 0.5)';\n disconnectBtn.style.color = '#ef4444';\n disconnectBtn.style.animation = '';\n disconnectBtn.style.pointerEvents = 'auto';\n disconnectBtn.style.opacity = '1';\n var labelSpan = disconnectBtn.querySelector('span:last-child') as HTMLElement;\n if (labelSpan) labelSpan.textContent = 'Drop';\n }\n\n // Helper to apply reconnecting (orange/pulsing) button style\n function applyReconnectingStyle() {\n disconnectBtn.style.background = 'rgba(251, 146, 60, 0.3)';\n disconnectBtn.style.borderColor = 'rgba(251, 146, 60, 0.6)';\n disconnectBtn.style.color = '#fb923c';\n disconnectBtn.style.animation = 'debug-pulse 1.5s ease-in-out infinite';\n disconnectBtn.style.pointerEvents = 'none';\n disconnectBtn.style.opacity = '0.8';\n var labelSpan = disconnectBtn.querySelector('span:last-child') as HTMLElement;\n if (labelSpan) labelSpan.textContent = 'Reconnecting...';\n }\n\n // Inject CSS animation if not already present\n if (!document.getElementById('debug-pulse-animation')) {\n var style = document.createElement('style');\n style.id = 'debug-pulse-animation';\n style.textContent = '@keyframes debug-pulse { 0%, 100% { opacity: 0.6; } 50% { opacity: 1; } }';\n document.head.appendChild(style);\n }\n\n // Apply initial style\n applyNormalStyle();\n\n // Register onDrop callback to show reconnecting state\n if (debugInfo.room) {\n debugInfo.room.onDrop(function() {\n isReconnecting = true;\n applyReconnectingStyle();\n });\n\n // Register onReconnect callback to restore normal state\n debugInfo.room.onReconnect(function() {\n isReconnecting = false;\n applyNormalStyle();\n });\n }\n\n // Hover effects (only when not reconnecting)\n disconnectBtn.addEventListener('mouseenter', function() {\n if (!isReconnecting) {\n disconnectBtn.style.background = 'rgba(239, 68, 68, 0.35)';\n disconnectBtn.style.borderColor = 'rgba(239, 68, 68, 0.7)';\n }\n });\n disconnectBtn.addEventListener('mouseleave', function() {\n if (!isReconnecting) {\n disconnectBtn.style.background = 'rgba(239, 68, 68, 0.2)';\n disconnectBtn.style.borderColor = 'rgba(239, 68, 68, 0.5)';\n }\n });\n\n // Add tooltip hover handlers to info icon in title\n title.appendChild(tooltip);\n var infoIconEl = title.querySelector('.debug-info-icon') as HTMLElement;\n var tooltipTimeout: any = null;\n var showTooltip = function() {\n if (tooltipTimeout) { clearTimeout(tooltipTimeout); tooltipTimeout = null; }\n tooltip.style.display = 'block';\n };\n var hideTooltip = function() {\n tooltipTimeout = setTimeout(function() {\n tooltip.style.display = 'none';\n }, 100);\n };\n if (infoIconEl) {\n infoIconEl.addEventListener('mouseenter', showTooltip);\n infoIconEl.addEventListener('mouseleave', hideTooltip);\n }\n tooltip.style.pointerEvents = 'auto';\n tooltip.addEventListener('mouseenter', showTooltip);\n tooltip.addEventListener('mouseleave', hideTooltip);\n\n actionsContainer.appendChild(stateBtn);\n actionsContainer.appendChild(messageBtn);\n actionsContainer.appendChild(disconnectBtn);\n\n panel.appendChild(title);\n panel.appendChild(content);\n panel.appendChild(actionsContainer);\n\n // Prepend panel to body so new panels appear first\n if (document.body.firstChild) {\n document.body.insertBefore(panel, document.body.firstChild);\n } else {\n document.body.appendChild(panel);\n }\n\n return panel;\n}\n\n// Reposition all debug panels to stack vertically\nfunction repositionDebugPanels() {\n if (panelsHidden) return;\n\n var panels = Array.from(document.querySelectorAll('[id^=\"debug-panel-\"]') as NodeListOf<HTMLElement>)\n .filter(function(panel: HTMLElement) { return panel.style.display !== 'none'; })\n .reverse(); // Reverse to get oldest first (since new panels are prepended)\n\n // Calculate logoIcon container width: 22px width + 10px padding on each side = 42px\n // Add 6px margin to prevent overlap\n var logoIconOffset = 42 + 6;\n\n var positions = {\n 'bottom-right': {\n start: { bottom: '14px', right: '14px', top: 'auto', left: 'auto' },\n offset: function(panel, currentRight) { return { right: currentRight + 'px', left: 'auto' }; }\n },\n 'bottom-left': {\n start: { bottom: '14px', left: '14px', top: 'auto', right: 'auto' },\n offset: function(panel, currentLeft) { return { left: currentLeft + 'px', right: 'auto' }; }\n },\n 'top-left': {\n start: { top: '14px', left: '14px', bottom: 'auto', right: 'auto' },\n offset: function(panel, currentLeft) { return { left: currentLeft + 'px', right: 'auto' }; }\n },\n 'top-right': {\n start: { top: '14px', right: '14px', bottom: 'auto', left: 'auto' },\n offset: function(panel, currentRight) { return { right: currentRight + 'px', left: 'auto' }; }\n }\n };\n\n var pos = positions[preferences.panelPosition.position] || positions['bottom-right'];\n var baseOffset = 14 + logoIconOffset;\n var currentOffset = baseOffset;\n\n panels.forEach(function(panel) {\n // Set base position\n Object.keys(pos.start).forEach(function(key) {\n panel.style[key] = pos.start[key];\n });\n\n // Apply offset\n var offset = pos.offset(panel, currentOffset);\n Object.keys(offset).forEach(function(key) {\n panel.style[key] = offset[key];\n });\n\n currentOffset += panel.offsetWidth + 6;\n });\n}\n\n// Update debug panel content\nfunction updateDebugPanel(uniquePanelId, debugInfo) {\n var contentId = 'debug-content-' + uniquePanelId;\n var panelId = 'debug-panel-' + uniquePanelId;\n var titleId = 'debug-title-' + uniquePanelId;\n var content = document.getElementById(contentId);\n var panel = document.getElementById(panelId);\n var title = document.getElementById(titleId);\n\n if (!content || !panel) {\n // Only create if panel doesn't exist\n if (!panel) {\n createDebugPanel(uniquePanelId, debugInfo);\n content = document.getElementById(contentId);\n title = document.getElementById(titleId);\n repositionDebugPanels();\n } else {\n content = document.getElementById(contentId);\n title = document.getElementById(titleId);\n }\n }\n\n // Update title with room name only (roomId and sessionId are in tooltip)\n var titleTextEl = document.getElementById('debug-title-text-' + uniquePanelId);\n var roomNameEl = titleTextEl?.querySelector('.debug-room-name');\n if (roomNameEl) roomNameEl.textContent = debugInfo.roomName;\n document.getElementById('debug-tooltip-' + uniquePanelId).innerHTML = '<div><strong>Room ID:</strong> ' + debugInfo.roomId + '</div><div><strong>Session ID:</strong> ' + debugInfo.sessionId + '</div>';\n\n // Update ping in header\n var pingDisplay = debugInfo.pingMs !== null ? debugInfo.pingMs + 'ms' : '--';\n var pingColor = debugInfo.pingMs !== null ? (debugInfo.pingMs < 100 ? '#22c55e' : debugInfo.pingMs < 200 ? '#eab308' : '#ef4444') : '#888';\n var pingElement = document.getElementById('debug-ping-' + uniquePanelId);\n if (pingElement) {\n pingElement.textContent = pingDisplay;\n pingElement.style.color = pingColor;\n }\n\n var html = '<div style=\"line-height: 1.3;\">';\n html += '<div style=\"font-size: 10px; display: flex; gap: 8px;\">';\n html += '<div style=\"flex: 1;\">';\n html += '<div style=\"margin-bottom: 4px;\"><div style=\"display: flex; align-items: center; gap: 6px;\"><span style=\"display: inline-flex; align-items: center; width: 18px; height: 18px; color: #FF9800;\">' + envelopeUp + '</span><span style=\"color: #FF9800;\">' + formatBytes(debugInfo.bytesSentPerSec) + '/s</span></div><div style=\"margin-left: 24px; opacity: 0.7; font-size: 9px;\">' + debugInfo.messagesSentPerSec.toFixed(0) + ' messages</div></div>';\n html += '<div><div style=\"display: flex; align-items: center; gap: 6px;\"><span style=\"display: inline-flex; align-items: center; width: 18px; height: 18px; color: #2196F3;\">' + envelopeDown + '</span><span style=\"color: #2196F3;\">' + formatBytes(debugInfo.bytesReceivedPerSec) + '/s</span></div><div style=\"margin-left: 24px; opacity: 0.7; font-size: 9px;\">' + debugInfo.messagesReceivedPerSec.toFixed(0) + ' messages</div></div>';\n html += '</div>';\n html += '<div style=\"display: flex; flex-direction: column; gap: 4px; align-items: flex-end;\">';\n html += '<canvas id=\"graph-sent-' + uniquePanelId + '\" width=\"80\" height=\"30\" style=\"display: block;\"></canvas>';\n html += '<canvas id=\"graph-received-' + uniquePanelId + '\" width=\"80\" height=\"30\" style=\"display: block;\"></canvas>';\n html += '</div>';\n html += '</div>';\n html += '</div>';\n\n content.innerHTML = html;\n\n // Draw graphs after a short delay to ensure canvas elements are rendered\n setTimeout(function() {\n drawGraph('graph-sent-' + uniquePanelId, debugInfo.bytesSentHistory, '#FF9800');\n drawGraph('graph-received-' + uniquePanelId, debugInfo.bytesReceivedHistory, '#2196F3');\n }, 10);\n}\n\n// Draw graph on canvas\nfunction drawGraph(canvasId, data, color) {\n var canvas = document.getElementById(canvasId) as HTMLCanvasElement;\n if (!canvas) return;\n\n var ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n var width = canvas.width;\n var height = canvas.height;\n\n // Clear canvas\n ctx.clearRect(0, 0, width, height);\n\n if (!data || data.length === 0) return;\n\n // Find min and max values\n var maxValue = Math.max.apply(Math, data);\n var minValue = Math.min.apply(Math, data);\n var range = maxValue - minValue || 1; // Avoid division by zero\n\n // Padding\n var padding = 2;\n var graphWidth = width - padding * 2;\n var graphHeight = height - padding * 2;\n\n // Draw grid lines\n ctx.strokeStyle = 'rgba(255, 255, 255, 0.1)';\n ctx.lineWidth = 0.5;\n for (var i = 0; i <= 4; i++) {\n var y = padding + (graphHeight / 4) * i;\n ctx.beginPath();\n ctx.moveTo(padding, y);\n ctx.lineTo(width - padding, y);\n ctx.stroke();\n }\n\n // Draw the line\n ctx.strokeStyle = color;\n ctx.lineWidth = 1.5;\n ctx.beginPath();\n\n for (var i = 0; i < data.length; i++) {\n var x = padding + (graphWidth / (data.length - 1 || 1)) * i;\n var normalizedValue = (data[i] - minValue) / range;\n var y = padding + graphHeight - (normalizedValue * graphHeight);\n\n if (i === 0) {\n ctx.moveTo(x, y);\n } else {\n ctx.lineTo(x, y);\n }\n }\n\n ctx.stroke();\n\n // Fill area under the line\n if (data.length > 0) {\n ctx.lineTo(width - padding, height - padding);\n ctx.lineTo(padding, height - padding);\n ctx.closePath();\n ctx.fillStyle = color;\n ctx.globalAlpha = 0.2;\n ctx.fill();\n ctx.globalAlpha = 1.0;\n }\n}\n\n// Calculate per-second rates\nfunction calculateRates(debugInfo) {\n var now = Date.now();\n var elapsed = (now - debugInfo.lastUpdate) / 1000; // seconds\n\n if (elapsed > 0) {\n debugInfo.bytesSentPerSec = debugInfo.bytesSentDelta / elapsed;\n debugInfo.bytesReceivedPerSec = debugInfo.bytesReceivedDelta / elapsed;\n debugInfo.messagesSentPerSec = debugInfo.messagesSentDelta / elapsed;\n debugInfo.messagesReceivedPerSec = debugInfo.messagesReceivedDelta / elapsed;\n\n // Add to history\n debugInfo.bytesSentHistory.push(debugInfo.bytesSentPerSec);\n debugInfo.bytesReceivedHistory.push(debugInfo.bytesReceivedPerSec);\n // debugInfo.historyTimestamps.push(now);\n\n // Limit history length\n var maxLen = debugInfo.maxHistoryLength || 60;\n if (debugInfo.bytesSentHistory.length > maxLen) {\n debugInfo.bytesSentHistory.shift();\n debugInfo.bytesReceivedHistory.shift();\n // debugInfo.historyTimestamps.shift();\n }\n\n // Reset deltas\n debugInfo.bytesSentDelta = 0;\n debugInfo.bytesReceivedDelta = 0;\n debugInfo.messagesSentDelta = 0;\n debugInfo.messagesReceivedDelta = 0;\n debugInfo.lastUpdate = now;\n }\n\n // Update panel\n updateDebugPanel(debugInfo.uniquePanelId, debugInfo);\n}\n\n// Start global update interval if not already running\nfunction ensureGlobalUpdateInterval() {\n if (globalUpdateInterval === null) {\n globalUpdateInterval = setInterval(function() {\n // Loop through all panels and calculate rates\n roomDebugInfo.forEach(function(debugInfo, uniquePanelId) {\n calculateRates(debugInfo);\n });\n\n // Clean up interval if no more panels\n if (roomDebugInfo.size === 0) {\n clearInterval(globalUpdateInterval);\n globalUpdateInterval = null;\n }\n }, 1000);\n }\n}\n\nfunction applyMonkeyPatches() {\n\n // Helper function to patch a room\n function patchRoom(room: Room) {\n if (!room) { return room; }\n\n // Generate a consistent room ID\n const roomId = room.roomId;\n const sessionId = room.sessionId;\n\n // Generate unique panel ID: use sessionId if available, otherwise use roomId + timestamp\n const uniquePanelId = sessionId && sessionId !== 'N/A' && sessionId !== ''\n ? sessionId\n : roomId + '-' + Date.now() + '-' + Math.random().toString(36).substring(2, 9);\n\n const transport = room.connection?.transport as WebSocketTransport;\n const endpoint = transport.ws?.url || 'N/A';\n\n const debugInfo = {\n uniquePanelId: uniquePanelId,\n roomId: roomId,\n roomName: room.name || 'N/A',\n sessionId: sessionId || 'N/A',\n endpoint,\n host: new URL(endpoint).host,\n room, // Store room reference for state inspector\n bytesSent: 0,\n bytesReceived: 0,\n messagesSent: 0,\n messagesReceived: 0,\n bytesSentDelta: 0,\n bytesReceivedDelta: 0,\n messagesSentDelta: 0,\n messagesReceivedDelta: 0,\n bytesSentPerSec: 0,\n bytesReceivedPerSec: 0,\n messagesSentPerSec: 0,\n messagesReceivedPerSec: 0,\n lastUpdate: Date.now(),\n bytesSentHistory: [],\n bytesReceivedHistory: [],\n // historyTimestamps: [],\n maxHistoryLength: 60, // Keep last 60 data points (1 minute at 1 second intervals)\n messageTypes: null, // Will store message types from __playground_message_types\n pingMs: null as number | null, // Current ping value in milliseconds\n pingInterval: null as any // Interval for pinging the room\n };\n\n roomDebugInfo.set(uniquePanelId, debugInfo);\n\n // Start ping interval (every 2 seconds)\n debugInfo.pingInterval = setInterval(() => {\n room.ping((ms: number) => {\n debugInfo.pingMs = ms;\n });\n }, 2000);\n\n // Initial ping\n room.ping((ms: number) => {\n debugInfo.pingMs = ms;\n });\n\n // Listen for __playground_message_types message\n room.onMessage('__playground_message_types', (messageTypes: any) => {\n debugInfo.messageTypes = messageTypes;\n\n // Show/hide message button based on message types availability\n var messageBtnElement = document.getElementById('debug-message-btn-' + uniquePanelId);\n if (messageBtnElement) {\n messageBtnElement.style.display = messageTypes ? 'flex' : 'none';\n }\n });\n\n // Helper function to track received message/bytes\n function trackReceivedMessage(data) {\n // Calculate bytes received\n var bytes = 0;\n if (data instanceof Blob) {\n bytes = data.size;\n } else if (data instanceof ArrayBuffer) {\n bytes = data.byteLength;\n } else if (typeof data === 'string') {\n bytes = new Blob([data]).size;\n } else if (data) {\n try {\n bytes = new Blob([JSON.stringify(data)]).size;\n } catch (e) {\n bytes = new Blob([String(data)]).size;\n }\n }\n\n //\n // TODO: avoid trackig __playground_message_types messages in the stats\n //\n debugInfo.messagesReceived++;\n debugInfo.messagesReceivedDelta++;\n debugInfo.bytesReceived += bytes;\n debugInfo.bytesReceivedDelta += bytes;\n }\n\n function trackSentMessage(data) {\n var bytes = 0;\n if (data instanceof Blob) {\n bytes = data.size;\n } else if (data instanceof ArrayBuffer) {\n bytes = data.byteLength;\n } else if (typeof data === 'string') {\n bytes = new Blob([data]).size;\n }\n debugInfo.messagesSent++;\n debugInfo.messagesSentDelta++;\n debugInfo.bytesSent += data.length;\n debugInfo.bytesSentDelta += data.length;\n }\n\n // Monkey-patch: track received messages through onmessage event\n const originalOnMessage = transport.events.onmessage;\n transport.events.onmessage = function(event) {\n // Clone event data to avoid issues with delayed processing\n var eventData = event.data;\n if (eventData instanceof Blob) {\n eventData = eventData.slice();\n } else if (eventData instanceof ArrayBuffer) {\n eventData = eventData.slice(0);\n } else if (typeof eventData === 'string') {\n eventData = eventData;\n }\n\n trackReceivedMessage(eventData);\n\n // Apply latency simulation for received messages\n if (preferences.latencySimulation.enabled && preferences.latencySimulation.delay > 0) {\n setTimeout(function() {\n // Create a synthetic event-like object\n var syntheticEvent = {\n data: eventData,\n target: event.target,\n currentTarget: event.currentTarget,\n type: 'message'\n };\n originalOnMessage.call(event.target, syntheticEvent);\n }, preferences.latencySimulation.delay);\n } else {\n return originalOnMessage.apply(this, arguments);\n }\n };\n\n // Monkey-patch: sending messages through room connection\n const originalSend = room.connection.send.bind(room.connection);\n room.connection.send = function(data: any) {\n trackSentMessage(data);\n\n // Apply latency simulation for sent messages\n if (preferences.latencySimulation.enabled && preferences.latencySimulation.delay > 0) {\n var clonedData = data;\n if (data instanceof ArrayBuffer) {\n clonedData = data.slice(0);\n } else if (data instanceof Blob) {\n clonedData = data.slice(0);\n } else if (data instanceof Uint8Array || data instanceof DataView || (data.buffer && data.buffer instanceof ArrayBuffer)) {\n clonedData = new Uint8Array(data).buffer;\n }\n\n setTimeout(function() {\n originalSend(clonedData);\n }, preferences.latencySimulation.delay / 2);\n } else {\n return originalSend(data);\n }\n };\n\n updateDebugPanel(uniquePanelId, debugInfo);\n\n // Ensure global update interval is running\n ensureGlobalUpdateInterval();\n\n // Clean up on room leave\n room.onLeave.once(() => {\n // Clear ping interval\n if (debugInfo.pingInterval !== null) {\n clearInterval(debugInfo.pingInterval);\n debugInfo.pingInterval = null;\n }\n roomDebugInfo.delete(uniquePanelId);\n var panel = document.getElementById('debug-panel-' + uniquePanelId);\n if (panel) {\n panel.remove();\n repositionDebugPanels();\n }\n // Clean up interval if no more panels\n if (roomDebugInfo.size === 0 && globalUpdateInterval !== null) {\n clearInterval(globalUpdateInterval);\n globalUpdateInterval = null;\n }\n });\n\n\n return room;\n }\n\n // Store original methods that return rooms\n var originalJoinOrCreate = Client.prototype.joinOrCreate;\n var originalJoin = Client.prototype.join;\n var originalCreate = Client.prototype.create;\n var originalReconnect = Client.prototype.reconnect;\n\n // Patch joinOrCreate\n Client.prototype.joinOrCreate = function() {\n var promise = originalJoinOrCreate.apply(this, arguments);\n return promise.then((room) => patchRoom(room));\n };\n\n // Patch join\n Client.prototype.join = function() {\n var promise = originalJoin.apply(this, arguments);\n return promise.then((room) => patchRoom(room));\n };\n\n // Patch create\n Client.prototype.create = function() {\n var promise = originalCreate.apply(this, arguments);\n return promise.then((room) => patchRoom(room));\n };\n\n // Patch reconnect\n if (originalReconnect) {\n Client.prototype.reconnect = function() {\n var promise = originalReconnect.apply(this, arguments);\n return promise.then((room) => patchRoom(room));\n };\n }\n}\n\napplyMonkeyPatches();\n\n// Initialize only after DOM is ready\n// (in case script is loaded in HEAD tag)\nif (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', initialize);\n} else {\n // DOM is already ready\n initialize();\n}"],"names":["encode","decode","CloseCode","getDecoderStateCallbacks","Reflection","Decoder","Packr","Protocol","unpack"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"debug.js","sources":["../../../node_modules/.pnpm/@rollup+plugin-typescript@12.3.0_rollup@4.56.0_tslib@2.8.1_typescript@5.9.3/node_modules/tslib/tslib.es6.js","../src/errors/Errors.ts","../src/transport/H3Transport.ts","../src/transport/WebSocketTransport.ts","../src/Connection.ts","../src/serializer/Serializer.ts","../src/core/nanoevents.ts","../src/core/signal.ts","../src/serializer/SchemaSerializer.ts","../src/core/utils.ts","../src/Room.ts","../src/HTTP.ts","../src/Storage.ts","../src/Auth.ts","../src/3rd_party/discord.ts","../src/Client.ts","../src/debug.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\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;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","\nexport class ServerError<DATA=any> extends Error {\n public code: number;\n\n public headers?: Headers;\n public status?: number;\n public response?: Response;\n public data?: DATA;\n\n constructor(code: number, message: string, opts?: { headers?: Headers, status?: number, response?: Response, data?: any }) {\n super(message);\n\n this.name = \"ServerError\";\n this.code = code;\n\n if (opts) {\n this.headers = opts.headers;\n this.status = opts.status;\n this.response = opts.response;\n this.data = opts.data;\n }\n }\n}\n\nexport class AbortError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"AbortError\";\n }\n}\n\nexport class MatchMakeError extends Error {\n public code: number;\n constructor(message: string, code: number) {\n super(message);\n this.code = code;\n this.name = \"MatchMakeError\";\n Object.setPrototypeOf(this, MatchMakeError.prototype);\n }\n}","import { encode, decode, type Iterator } from '@colyseus/schema';\nimport type { ITransport, ITransportEventMap } from \"./ITransport.ts\";\n\nexport class H3TransportTransport implements ITransport {\n wt: WebTransport;\n isOpen: boolean = false;\n events: ITransportEventMap;\n\n reader: ReadableStreamDefaultReader;\n writer: WritableStreamDefaultWriter;\n\n unreliableReader: ReadableStreamDefaultReader<Uint8Array>;\n unreliableWriter: WritableStreamDefaultWriter<Uint8Array>;\n\n private lengthPrefixBuffer = new Uint8Array(9); // 9 bytes is the maximum length of a length prefix\n\n constructor(events: ITransportEventMap) {\n this.events = events;\n }\n\n public connect(url: string, options: any = {}) {\n const wtOpts: WebTransportOptions = options.fingerprint && ({\n // requireUnreliable: true,\n // congestionControl: \"default\", // \"low-latency\" || \"throughput\"\n\n serverCertificateHashes: [{\n algorithm: 'sha-256',\n value: new Uint8Array(options.fingerprint).buffer\n }]\n }) || undefined;\n\n this.wt = new WebTransport(url, wtOpts);\n\n this.wt.ready.then((e) => {\n console.log(\"WebTransport ready!\", e)\n this.isOpen = true;\n\n this.unreliableReader = this.wt.datagrams.readable.getReader();\n this.unreliableWriter = this.wt.datagrams.writable.getWriter();\n\n const incomingBidi = this.wt.incomingBidirectionalStreams.getReader();\n incomingBidi.read().then((stream) => {\n this.reader = stream.value.readable.getReader();\n this.writer = stream.value.writable.getWriter();\n\n // immediately write room/sessionId for establishing the room connection\n this.sendSeatReservation(options.roomId, options.sessionId, options.reconnectionToken, options.skipHandshake);\n\n // start reading incoming data\n this.readIncomingData();\n this.readIncomingUnreliableData();\n\n }).catch((e) => {\n console.error(\"failed to read incoming stream\", e);\n console.error(\"TODO: close the connection\");\n });\n\n // this.events.onopen(e);\n }).catch((e: WebTransportCloseInfo) => {\n // this.events.onerror(e);\n // this.events.onclose({ code: e.closeCode, reason: e.reason });\n console.log(\"WebTransport not ready!\", e)\n this._close();\n });\n\n this.wt.closed.then((e: WebTransportCloseInfo) => {\n console.log(\"WebTransport closed w/ success\", e)\n this.events.onclose({ code: e.closeCode, reason: e.reason });\n\n }).catch((e: WebTransportCloseInfo) => {\n console.log(\"WebTransport closed w/ error\", e)\n this.events.onerror(e);\n this.events.onclose({ code: e.closeCode, reason: e.reason });\n }).finally(() => {\n this._close();\n });\n }\n\n public send(data: Buffer | Uint8Array): void {\n const prefixLength = encode.number(this.lengthPrefixBuffer as any, data.length, { offset: 0 });\n const dataWithPrefixedLength = new Uint8Array(prefixLength + data.length);\n dataWithPrefixedLength.set(this.lengthPrefixBuffer.subarray(0, prefixLength), 0);\n dataWithPrefixedLength.set(data, prefixLength);\n this.writer.write(dataWithPrefixedLength);\n }\n\n public sendUnreliable(data: Buffer | Uint8Array): void {\n const prefixLength = encode.number(this.lengthPrefixBuffer as any, data.length, { offset: 0 });\n const dataWithPrefixedLength = new Uint8Array(prefixLength + data.length);\n dataWithPrefixedLength.set(this.lengthPrefixBuffer.subarray(0, prefixLength), 0);\n dataWithPrefixedLength.set(data, prefixLength);\n this.unreliableWriter.write(dataWithPrefixedLength);\n }\n\n public close(code?: number, reason?: string) {\n try {\n this.wt.close({ closeCode: code, reason: reason });\n } catch (e) {\n console.error(e);\n }\n }\n\n protected async readIncomingData() {\n let result: ReadableStreamReadResult<Uint8Array>;\n\n while (this.isOpen) {\n try {\n result = await this.reader.read();\n\n //\n // a single read may contain multiple messages\n // each message is prefixed with its length\n //\n\n const messages = result.value;\n const it: Iterator = { offset: 0 };\n do {\n //\n // QUESTION: should we buffer the message in case it's not fully read?\n //\n\n const length = decode.number(messages as any, it);\n this.events.onmessage({ data: messages.subarray(it.offset, it.offset + length) });\n it.offset += length;\n } while (it.offset < messages.length);\n\n } catch (e) {\n if (e.message.indexOf(\"session is closed\") === -1) {\n console.error(\"H3Transport: failed to read incoming data\", e);\n }\n break;\n }\n\n if (result.done) {\n break;\n }\n }\n }\n\n protected async readIncomingUnreliableData() {\n let result: ReadableStreamReadResult<Uint8Array>;\n\n while (this.isOpen) {\n try {\n result = await this.unreliableReader.read();\n\n //\n // a single read may contain multiple messages\n // each message is prefixed with its length\n //\n\n const messages = result.value;\n const it: Iterator = { offset: 0 };\n do {\n //\n // QUESTION: should we buffer the message in case it's not fully read?\n //\n\n const length = decode.number(messages as any, it);\n this.events.onmessage({ data: messages.subarray(it.offset, it.offset + length) });\n it.offset += length;\n } while (it.offset < messages.length);\n\n } catch (e) {\n if (e.message.indexOf(\"session is closed\") === -1) {\n console.error(\"H3Transport: failed to read incoming data\", e);\n }\n break;\n }\n\n if (result.done) {\n break;\n }\n }\n }\n\n protected sendSeatReservation (roomId: string, sessionId: string, reconnectionToken?: string, skipHandshake?: boolean) {\n const it: Iterator = { offset: 0 };\n const bytes: number[] = [];\n\n encode.string(bytes, roomId, it);\n encode.string(bytes, sessionId, it);\n\n if (reconnectionToken) {\n encode.string(bytes, reconnectionToken, it);\n }\n\n if (skipHandshake) {\n encode.boolean(bytes, 1, it);\n }\n\n this.writer.write(new Uint8Array(bytes).buffer);\n }\n\n protected _close() {\n this.isOpen = false;\n }\n\n}\n","import NodeWebSocket from \"ws\";\nimport { CloseCode } from \"@colyseus/shared-types\";\nimport type { ITransport, ITransportEventMap } from \"./ITransport.ts\";\n\nconst WebSocket = globalThis.WebSocket || NodeWebSocket;\n\nexport class WebSocketTransport implements ITransport {\n ws: WebSocket | NodeWebSocket;\n protocols?: string | string[];\n\n events: ITransportEventMap;\n\n constructor(events: ITransportEventMap) {\n this.events = events;\n }\n\n public send(data: Buffer | Uint8Array): void {\n this.ws.send(data);\n }\n\n public sendUnreliable(data: Uint8Array): void {\n console.warn(\"@colyseus/sdk: The WebSocket transport does not support unreliable messages\");\n }\n\n /**\n * @param url URL to connect to\n * @param headers custom headers to send with the connection (only supported in Node.js. Web Browsers do not allow setting custom headers)\n */\n public connect(url: string, headers?: any): void {\n try {\n // Node or Bun environments (supports custom headers)\n this.ws = new WebSocket(url, { headers, protocols: this.protocols });\n\n } catch (e) {\n // browser environment (custom headers not supported)\n this.ws = new WebSocket(url, this.protocols);\n }\n\n this.ws.binaryType = 'arraybuffer';\n this.ws.onopen = (event) => this.events.onopen?.(event);\n this.ws.onmessage = (event) => this.events.onmessage?.(event);\n this.ws.onclose = (event) => this.events.onclose?.(event);\n this.ws.onerror = (event) => this.events.onerror?.(event);\n }\n\n public close(code?: number, reason?: string) {\n //\n // trigger the onclose event immediately if the code is MAY_TRY_RECONNECT\n // when \"offline\" event is triggered, the close frame is delayed. this\n // way client can try to reconnect immediately.\n //\n if (code === CloseCode.MAY_TRY_RECONNECT && this.events.onclose) {\n this.ws.onclose = null;\n this.events.onclose({ code, reason });\n }\n\n // then we close the connection\n this.ws.close(code, reason);\n }\n\n get isOpen() {\n return this.ws.readyState === WebSocket.OPEN;\n }\n\n}\n","import type { ITransport, ITransportEventMap } from \"./transport/ITransport.ts\";\nimport { H3TransportTransport } from \"./transport/H3Transport.ts\";\nimport { WebSocketTransport } from \"./transport/WebSocketTransport.ts\";\nimport { CloseCode } from \"@colyseus/shared-types\";\n\nconst onOfflineListeners: (() => void)[] = [];\nconst hasGlobalEventListeners = typeof (addEventListener) === \"function\" && typeof (removeEventListener) === \"function\";\nif (hasGlobalEventListeners) {\n /**\n * Detects when the network is offline and closes all connections.\n * (When switching wifi networks, etc.)\n */\n addEventListener(\"offline\", () => {\n console.warn(`@colyseus/sdk: 🛑 Network offline. Closing ${onOfflineListeners.length} connection(s)`);\n onOfflineListeners.forEach((listener) => listener());\n }, false);\n}\n\nexport class Connection implements ITransport {\n transport: ITransport;\n events: ITransportEventMap = {};\n\n url?: string;\n options?: any;\n\n #_offlineListener = (hasGlobalEventListeners) ? () => this.close(CloseCode.MAY_TRY_RECONNECT) : null;\n\n constructor(protocol?: string) {\n switch (protocol) {\n case \"h3\":\n this.transport = new H3TransportTransport(this.events);\n break;\n\n default:\n this.transport = new WebSocketTransport(this.events);\n break;\n }\n }\n\n connect(url: string, options?: any): void {\n if (hasGlobalEventListeners) {\n const onOpen = this.events.onopen;\n this.events.onopen = (ev: any) => {\n onOfflineListeners.push(this.#_offlineListener);\n onOpen?.(ev);\n };\n\n const onClose = this.events.onclose;\n this.events.onclose = (ev: any) => {\n onOfflineListeners.splice(onOfflineListeners.indexOf(this.#_offlineListener), 1);\n onClose?.(ev);\n };\n }\n\n this.url = url;\n this.options = options;\n this.transport.connect(url, options);\n }\n\n send(data: Buffer | Uint8Array): void {\n this.transport.send(data);\n }\n\n sendUnreliable(data: Buffer | Uint8Array): void {\n this.transport.sendUnreliable(data);\n }\n\n reconnect(queryParams: { reconnectionToken: string, skipHandshake?: boolean }): void {\n const queryString = new URLSearchParams(queryParams as unknown as Record<string, string>).toString();\n this.transport.connect(`${this.url}&${queryString}`, this.options);\n }\n\n close(code?: number, reason?: string): void {\n this.transport.close(code, reason);\n }\n\n get isOpen() {\n return this.transport.isOpen;\n }\n\n}\n","import type { Iterator } from \"@colyseus/schema\";\n\nexport interface Serializer<State> {\n setState(data: Uint8Array, it?: Iterator): void;\n getState(): State;\n\n patch(data: Uint8Array, it?: Iterator): void;\n teardown(): void;\n\n handshake?(bytes: Uint8Array, it?: any): void;\n}\n\nconst serializers: { [id: string]: any } = {};\n\nexport function registerSerializer (id: string, serializer: any) {\n serializers[id] = serializer;\n}\n\nexport function getSerializer (id: string) {\n const serializer = serializers[id];\n if (!serializer) { throw new Error(\"missing serializer: \" + id); }\n return serializer;\n}","/**\n * The MIT License (MIT)\n *\n * Copyright 2016 Andrey Sitnik <andrey@sitnik.ru>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nexport type EventsMap = Record<string, (...args: any[]) => void>;\n\nexport interface Emitter<Events extends EventsMap> {\n events: { [K in keyof Events]?: Array<Events[K]> };\n emit<K extends keyof Events>(event: K, ...args: Parameters<Events[K]>): void;\n on<K extends keyof Events>(event: K, cb: Events[K]): () => void;\n}\n\nexport const createNanoEvents = <Events extends EventsMap = EventsMap>(): Emitter<Events> => ({\n emit(event, ...args) {\n let callbacks = this.events[event] || []\n for (let i = 0, length = callbacks.length; i < length; i++) {\n callbacks[i](...args)\n }\n },\n events: {},\n on(event, cb) {\n this.events[event]?.push(cb) || (this.events[event] = [cb])\n return () => {\n this.events[event] = this.events[event]?.filter(i => cb !== i)\n }\n }\n});","type FunctionParameters<T extends (...args: any[]) => any> =\n T extends (...args: infer P) => any\n ? P\n : never;\n\nexport class EventEmitter<CallbackSignature extends (...args: any[]) => any> {\n handlers: Array<CallbackSignature> = [];\n\n register(cb: CallbackSignature, once: boolean = false) {\n this.handlers.push(cb);\n return this;\n }\n\n invoke(...args: FunctionParameters<CallbackSignature>) {\n this.handlers.forEach((handler) => handler.apply(this, args));\n }\n\n invokeAsync(...args: FunctionParameters<CallbackSignature>) {\n return Promise.all(this.handlers.map((handler) => handler.apply(this, args)));\n }\n\n remove (cb: CallbackSignature) {\n const index = this.handlers.indexOf(cb);\n this.handlers[index] = this.handlers[this.handlers.length - 1];\n this.handlers.pop();\n }\n\n clear() {\n this.handlers = [];\n }\n}\n\nexport function createSignal<CallbackSignature extends (...args: any[]) => void | Promise<any>>()\n :\n {\n once: (cb: CallbackSignature) => void;\n remove: (cb: CallbackSignature) => void,\n invoke: (...args: FunctionParameters<CallbackSignature>) => void,\n invokeAsync: (...args: FunctionParameters<CallbackSignature>) => Promise<any[]>,\n clear: () => void,\n } & ((this: any, cb: CallbackSignature) => EventEmitter<CallbackSignature> )\n {\n const emitter = new EventEmitter<CallbackSignature>();\n\n function register(this: any, cb: CallbackSignature): EventEmitter<CallbackSignature> {\n return emitter.register(cb, this === null);\n };\n\n register.once = (cb: CallbackSignature) => {\n const callback: any = function (...args: any[]) {\n cb.apply(this, args);\n emitter.remove(callback);\n }\n emitter.register(callback);\n }\n register.remove = (cb: CallbackSignature) => emitter.remove(cb)\n register.invoke = (...args: FunctionParameters<CallbackSignature>) => emitter.invoke(...args);\n register.invokeAsync = (...args: FunctionParameters<CallbackSignature>) => emitter.invokeAsync(...args);\n register.clear = () => emitter.clear();\n\n return register;\n}","import { Schema, Decoder, Reflection, Iterator, getDecoderStateCallbacks } from \"@colyseus/schema\";\nimport type { Serializer } from \"./Serializer.ts\";\nimport type { Room } from \"../Room.ts\";\n\nexport type SchemaConstructor<T = Schema> = new (...args: any[]) => T;\n\n//\n// TODO: use a schema interface, which even having duplicate definitions, it could be used to get the callback proxy.\n//\n// ```ts\n// export type SchemaCallbackProxy<RoomState> = (<T extends ISchema>(instance: T) => CallbackProxy<T>);\n// export function getStateCallbacks<T extends ISchema>(room: Room<T>) {\n// ```\n//\nexport function getStateCallbacks<T>(room: Room<any, T>) {\n try {\n // SchemaSerializer\n // @ts-ignore\n return getDecoderStateCallbacks<T>((room['serializer'] as unknown as SchemaSerializer<T>).decoder);\n } catch (e) {\n // NoneSerializer\n return undefined;\n }\n}\n\nexport class SchemaSerializer<T extends Schema = any> implements Serializer<T> {\n state: T;\n decoder: Decoder<T>;\n\n setState(encodedState: Uint8Array, it?: Iterator) {\n this.decoder.decode(encodedState, it);\n }\n\n getState() {\n return this.state;\n }\n\n patch(patches: Uint8Array, it?: Iterator) {\n return this.decoder.decode(patches, it);\n }\n\n teardown() {\n this.decoder.root.clearRefs();\n }\n\n handshake(bytes: Uint8Array, it?: Iterator) {\n if (this.state) {\n //\n // TODO: validate definitions against concreate this.state instance\n //\n Reflection.decode(bytes, it); // no-op\n\n this.decoder = new Decoder(this.state);\n\n } else {\n // initialize reflected state from server\n this.decoder = Reflection.decode(bytes, it);\n this.state = this.decoder.state;\n }\n }\n}\n","import type { SDKTypes, Room as ServerRoom } from '@colyseus/core';\n\nexport function now(): number {\n return typeof(performance) !== 'undefined' ? performance.now() : Date.now();\n}\n\n/**\n * Infer the room constructor from ServerType based on the instance type.\n * This allows proper type inference for SDK Room methods like `send()` and `onMessage()`.\n */\nexport type InferRoomConstructor<ServerType extends SDKTypes, Instance> =\n // First, try to find a matching room constructor in ServerType['~rooms']\n ServerType extends SDKTypes<infer Rooms>\n ? {\n [K in keyof Rooms]: Instance extends InstanceType<Rooms[K]['~room']>\n ? Rooms[K]['~room']\n : never\n }[keyof Rooms]\n : // Fallback: create a synthetic constructor type from the instance\n (typeof ServerRoom) & { prototype: Instance };","import { CloseCode, Protocol, type InferState, type NormalizeRoomType, type ExtractRoomMessages, type ExtractRoomClientMessages, type ExtractMessageType } from '@colyseus/shared-types';\nimport { decode, Decoder, encode, Iterator, Schema } from '@colyseus/schema';\n\nimport { Packr, unpack } from '@colyseus/msgpackr';\n\nimport { Connection } from './Connection.ts';\nimport { getSerializer, Serializer } from './serializer/Serializer.ts';\n\n// The unused imports here are important for better `.d.ts` file generation\n// (Later merged with `dts-bundle-generator`)\nimport { createNanoEvents } from './core/nanoevents.ts';\nimport { createSignal } from './core/signal.ts';\n\nimport { SchemaConstructor, SchemaSerializer } from './serializer/SchemaSerializer.ts';\n\nimport { now } from './core/utils.ts';\n\n// Infer serializer type based on State: SchemaSerializer for Schema types, Serializer otherwise\nexport type InferSerializer<State> = [State] extends [Schema]\n ? SchemaSerializer<State>\n : Serializer<State>;\n\nexport interface RoomAvailable<Metadata = any> {\n name: string;\n roomId: string;\n clients: number;\n maxClients: number;\n metadata?: Metadata;\n}\n\nexport interface ReconnectionOptions {\n /**\n * The maximum number of reconnection attempts.\n */\n maxRetries: number;\n\n /**\n * The minimum delay between reconnection attempts.\n */\n minDelay: number;\n\n /**\n * The maximum delay between reconnection attempts.\n */\n maxDelay: number;\n\n /**\n * The minimum uptime of the room before reconnection attempts can be made.\n */\n minUptime: number;\n\n /**\n * The current number of reconnection attempts.\n */\n retryCount: number;\n\n /**\n * The initial delay between reconnection attempts.\n */\n delay: number;\n\n /**\n * The function to calculate the delay between reconnection attempts.\n * @param attempt - The current attempt number.\n * @param delay - The initial delay between reconnection attempts.\n * @returns The delay between reconnection attempts.\n */\n backoff: (attempt: number, delay: number) => number;\n\n /**\n * The maximum number of enqueued messages to buffer.\n */\n maxEnqueuedMessages: number;\n\n /**\n * Buffer for messages sent while connection is not open.\n * These messages will be sent once the connection is re-established.\n */\n enqueuedMessages: Array<{ data: Uint8Array }>;\n\n /**\n * Whether the room is currently reconnecting.\n */\n isReconnecting: boolean;\n}\n\nexport class Room<\n T = any,\n State = InferState<T, never>,\n> {\n public roomId: string;\n public sessionId: string;\n public reconnectionToken: string;\n\n public name: string;\n public connection: Connection;\n\n // Public signals\n public onStateChange = createSignal<(state: State) => void>();\n public onError = createSignal<(code: number, message?: string) => void>();\n public onLeave = createSignal<(code: number, reason?: string) => void>();\n\n public onReconnect = createSignal<() => void>();\n public onDrop = createSignal<(code: number, reason?: string) => void>();\n\n protected onJoin = createSignal();\n\n public serializerId: string;\n public serializer: InferSerializer<State>;\n\n // reconnection logic\n public reconnection: ReconnectionOptions = {\n retryCount: 0,\n maxRetries: 15,\n delay: 100,\n minDelay: 100,\n maxDelay: 5000,\n minUptime: 5000,\n backoff: exponentialBackoff,\n maxEnqueuedMessages: 10,\n enqueuedMessages: [],\n isReconnecting: false,\n };\n\n protected joinedAtTime: number = 0;\n\n protected onMessageHandlers = createNanoEvents();\n\n protected packr: Packr;\n\n #lastPingTime: number = 0;\n #pingCallback?: (ms: number) => void = undefined;\n\n constructor(name: string, rootSchema?: SchemaConstructor<State>) {\n this.name = name;\n\n this.packr = new Packr();\n\n // msgpackr workaround: force buffer to be created.\n this.packr.encode(undefined);\n\n if (rootSchema) {\n const serializer: SchemaSerializer = new (getSerializer(\"schema\"));\n this.serializer = serializer;\n\n const state: State = new rootSchema();\n serializer.state = state;\n serializer.decoder = new Decoder(state as Schema);\n }\n\n this.onLeave(() => this.removeAllListeners());\n }\n\n public connect(endpoint: string, options?: any, headers?: any) {\n this.connection = new Connection(options.protocol);\n this.connection.events.onmessage = this.onMessageCallback.bind(this);\n this.connection.events.onclose = (e: CloseEvent) => {\n if (this.joinedAtTime === 0) {\n console.warn?.(`Room connection was closed unexpectedly (${e.code}): ${e.reason}`);\n this.onError.invoke(e.code, e.reason);\n return;\n }\n\n if (\n e.code === CloseCode.NO_STATUS_RECEIVED ||\n e.code === CloseCode.ABNORMAL_CLOSURE ||\n e.code === CloseCode.GOING_AWAY ||\n e.code === CloseCode.MAY_TRY_RECONNECT\n ) {\n this.onDrop.invoke(e.code, e.reason);\n this.handleReconnection();\n\n } else {\n this.onLeave.invoke(e.code, e.reason);\n this.destroy();\n }\n };\n\n this.connection.events.onerror = (e: CloseEvent) => {\n this.onError.invoke(e.code, e.reason);\n };\n\n /**\n * if local serializer has state, it means we don't need to receive the\n * handshake from the server\n */\n const skipHandshake = (this.serializer?.getState() !== undefined);\n\n if (options.protocol === \"h3\") {\n // FIXME: refactor this.\n const url = new URL(endpoint);\n this.connection.connect(url.origin, { ...options, skipHandshake });\n\n } else {\n this.connection.connect(`${endpoint}${skipHandshake ? \"?skipHandshake=1\" : \"\"}`, headers);\n }\n\n }\n\n public leave(consented: boolean = true): Promise<number> {\n return new Promise((resolve) => {\n this.onLeave((code) => resolve(code));\n\n if (this.connection) {\n if (consented) {\n this.packr.buffer[0] = Protocol.LEAVE_ROOM;\n this.connection.send(this.packr.buffer.subarray(0, 1));\n\n } else {\n this.connection.close();\n }\n\n } else {\n this.onLeave.invoke(CloseCode.CONSENTED);\n }\n });\n }\n\n public onMessage<MessageType extends keyof ExtractRoomClientMessages<NormalizeRoomType<T>>>(\n message: MessageType,\n callback: (payload: ExtractRoomClientMessages<NormalizeRoomType<T>>[MessageType]) => void\n ): () => void\n public onMessage<Payload = any>(type: \"*\", callback: (messageType: string | number, payload: Payload) => void): () => void\n // Fallback overload: only available when no typed client messages are defined\n public onMessage<Payload = any>(\n type: [keyof ExtractRoomClientMessages<NormalizeRoomType<T>>] extends [never] ? (string | number) : never,\n callback: (payload: Payload) => void\n ): () => void\n public onMessage(type: '*' | string | number, callback: (...args: any[]) => void) {\n return this.onMessageHandlers.on(this.getMessageHandlerKey(type), callback);\n }\n\n public ping(callback: (ms: number) => void) {\n // skip if connection is not open\n if (!this.connection?.isOpen) {\n return;\n }\n\n this.#lastPingTime = now();\n this.#pingCallback = callback;\n this.packr.buffer[0] = Protocol.PING;\n this.connection.send(this.packr.buffer.subarray(0, 1));\n }\n\n public send<MessageType extends keyof ExtractRoomMessages<NormalizeRoomType<T>>>(\n messageType: MessageType,\n payload?: ExtractMessageType<ExtractRoomMessages<NormalizeRoomType<T>>[MessageType]>\n ): void\n // Fallback overload: only available when no typed messages are defined\n public send<Payload = any>(\n messageType: [keyof ExtractRoomMessages<NormalizeRoomType<T>>] extends [never] ? (string | number) : never,\n payload?: Payload\n ): void\n public send(messageType: string | number, payload?: any): void {\n const it: Iterator = { offset: 1 };\n this.packr.buffer[0] = Protocol.ROOM_DATA;\n\n if (typeof(messageType) === \"string\") {\n encode.string(this.packr.buffer as Buffer, messageType, it);\n\n } else {\n encode.number(this.packr.buffer as Buffer, messageType, it);\n }\n\n // force packr to use beginning of the buffer\n this.packr.position = 0;\n\n const data = (payload !== undefined)\n ? this.packr.pack(payload, 2048 + it.offset) // 2048 = RESERVE_START_SPACE\n : this.packr.buffer.subarray(0, it.offset);\n\n // If connection is not open, buffer the message\n if (!this.connection.isOpen) {\n enqueueMessage(this, new Uint8Array(data));\n } else {\n this.connection.send(data);\n }\n }\n\n public sendUnreliable<T = any>(type: string | number, message?: T): void {\n // If connection is not open, skip\n if (!this.connection.isOpen) { return; }\n\n const it: Iterator = { offset: 1 };\n this.packr.buffer[0] = Protocol.ROOM_DATA;\n\n if (typeof(type) === \"string\") {\n encode.string(this.packr.buffer as Buffer, type, it);\n\n } else {\n encode.number(this.packr.buffer as Buffer, type, it);\n }\n\n // force packr to use beginning of the buffer\n this.packr.position = 0;\n\n const data = (message !== undefined)\n ? this.packr.pack(message, 2048 + it.offset) // 2048 = RESERVE_START_SPACE\n : this.packr.buffer.subarray(0, it.offset);\n\n this.connection.sendUnreliable(data);\n }\n\n public sendBytes(type: string | number, bytes: Uint8Array) {\n const it: Iterator = { offset: 1 };\n this.packr.buffer[0] = Protocol.ROOM_DATA_BYTES;\n\n if (typeof(type) === \"string\") {\n encode.string(this.packr.buffer as Buffer, type, it);\n\n } else {\n encode.number(this.packr.buffer as Buffer, type, it);\n }\n\n // check if buffer needs to be resized\n // TODO: can we avoid this?\n if (bytes.byteLength + it.offset > this.packr.buffer.byteLength) {\n const newBuffer = new Uint8Array(it.offset + bytes.byteLength);\n newBuffer.set(this.packr.buffer);\n this.packr.useBuffer(newBuffer);\n }\n\n this.packr.buffer.set(bytes, it.offset);\n\n // If connection is not open, buffer the message\n if (!this.connection.isOpen) {\n enqueueMessage(this, this.packr.buffer.subarray(0, it.offset + bytes.byteLength));\n } else {\n this.connection.send(this.packr.buffer.subarray(0, it.offset + bytes.byteLength));\n }\n\n }\n\n public get state (): State {\n return this.serializer.getState();\n }\n\n public removeAllListeners() {\n this.onJoin.clear();\n this.onStateChange.clear();\n this.onError.clear();\n this.onLeave.clear();\n this.onMessageHandlers.events = {};\n\n if (this.serializer instanceof SchemaSerializer) {\n // Remove callback references\n this.serializer.decoder.root.callbacks = {};\n }\n }\n\n protected onMessageCallback(event: MessageEvent) {\n const buffer = new Uint8Array(event.data);\n\n const it: Iterator = { offset: 1 };\n const code = buffer[0];\n\n if (code === Protocol.JOIN_ROOM) {\n const reconnectionToken = decode.utf8Read(buffer as Buffer, it, buffer[it.offset++]);\n this.serializerId = decode.utf8Read(buffer as Buffer, it, buffer[it.offset++]);\n\n // Instantiate serializer if not locally available.\n if (!this.serializer) {\n const serializer = getSerializer(this.serializerId);\n this.serializer = new serializer();\n }\n\n // apply handshake on first join (no need to do this on reconnect)\n if (buffer.byteLength > it.offset && this.serializer.handshake) {\n this.serializer.handshake(buffer, it);\n }\n\n if (this.joinedAtTime === 0) {\n this.joinedAtTime = Date.now();\n this.onJoin.invoke();\n\n } else {\n console.info(`[Colyseus reconnection]: ${String.fromCodePoint(0x2705)} reconnection successful!`); // ✅\n this.reconnection.isReconnecting = false;\n this.onReconnect.invoke();\n }\n\n this.reconnectionToken = `${this.roomId}:${reconnectionToken}`;\n\n // acknowledge successfull JOIN_ROOM\n this.packr.buffer[0] = Protocol.JOIN_ROOM;\n this.connection.send(this.packr.buffer.subarray(0, 1));\n\n // Send any enqueued messages that were buffered while disconnected\n if (this.reconnection.enqueuedMessages.length > 0) {\n for (const message of this.reconnection.enqueuedMessages) {\n this.connection.send(message.data);\n }\n // Clear the buffer after sending\n this.reconnection.enqueuedMessages = [];\n }\n\n } else if (code === Protocol.ERROR) {\n const code = decode.number(buffer as Buffer, it);\n const message = decode.string(buffer as Buffer, it);\n\n this.onError.invoke(code, message);\n\n } else if (code === Protocol.LEAVE_ROOM) {\n this.leave();\n\n } else if (code === Protocol.ROOM_STATE) {\n this.serializer.setState(buffer, it);\n this.onStateChange.invoke(this.serializer.getState());\n\n } else if (code === Protocol.ROOM_STATE_PATCH) {\n this.serializer.patch(buffer, it);\n this.onStateChange.invoke(this.serializer.getState());\n\n } else if (code === Protocol.ROOM_DATA) {\n const type = (decode.stringCheck(buffer as Buffer, it))\n ? decode.string(buffer as Buffer, it)\n : decode.number(buffer as Buffer, it);\n\n const message = (buffer.byteLength > it.offset)\n ? unpack(buffer as Buffer, { start: it.offset })\n : undefined;\n\n this.dispatchMessage(type, message);\n\n } else if (code === Protocol.ROOM_DATA_BYTES) {\n const type = (decode.stringCheck(buffer as Buffer, it))\n ? decode.string(buffer as Buffer, it)\n : decode.number(buffer as Buffer, it);\n\n this.dispatchMessage(type, buffer.subarray(it.offset));\n\n } else if (code === Protocol.PING) {\n this.#pingCallback?.(Math.round(now() - this.#lastPingTime));\n this.#pingCallback = undefined;\n }\n }\n\n private dispatchMessage(type: string | number, message: any) {\n const messageType = this.getMessageHandlerKey(type);\n\n if (this.onMessageHandlers.events[messageType]) {\n this.onMessageHandlers.emit(messageType, message);\n\n } else if (this.onMessageHandlers.events['*']) {\n this.onMessageHandlers.emit('*', type, message);\n\n } else if (!messageType.startsWith(\"__\")) { // ignore internal messages\n console.warn?.(`@colyseus/sdk: onMessage() not registered for type '${type}'.`);\n }\n }\n\n private destroy () {\n if (this.serializer) {\n this.serializer.teardown();\n }\n }\n\n private getMessageHandlerKey(type: string | number): string {\n switch (typeof(type)) {\n // string\n case \"string\": return type;\n\n // number\n case \"number\": return `i${type}`;\n\n default: throw new Error(\"invalid message type.\");\n }\n }\n\n private handleReconnection() {\n if (Date.now() - this.joinedAtTime < this.reconnection.minUptime) {\n console.info(`[Colyseus reconnection]: ${String.fromCodePoint(0x274C)} Room has not been up for long enough for automatic reconnection. (min uptime: ${this.reconnection.minUptime}ms)`); // ❌\n return;\n }\n\n if (!this.reconnection.isReconnecting) {\n this.reconnection.retryCount = 0;\n this.reconnection.isReconnecting = true;\n }\n\n this.retryReconnection();\n }\n\n private retryReconnection() {\n this.reconnection.retryCount++;\n\n const delay = Math.min(this.reconnection.maxDelay, Math.max(this.reconnection.minDelay, this.reconnection.backoff(this.reconnection.retryCount, this.reconnection.delay)));\n console.info(`[Colyseus reconnection]: ${String.fromCodePoint(0x023F3)} will retry in ${(delay/1000).toFixed(1)} seconds...`); // 🔄\n\n // Wait before attempting reconnection\n setTimeout(() => {\n try {\n console.info(`[Colyseus reconnection]: ${String.fromCodePoint(0x1F504)} Re-establishing sessionId '${this.sessionId}' with roomId '${this.roomId}'... (attempt ${this.reconnection.retryCount} of ${this.reconnection.maxRetries})`); // 🔄\n this.connection.reconnect({\n reconnectionToken: this.reconnectionToken.split(\":\")[1],\n skipHandshake: true, // we already applied the handshake on first join\n });\n\n } catch (e) {\n console.log(\".reconnect() failed\", e);\n if (this.reconnection.retryCount < this.reconnection.maxRetries) {\n this.retryReconnection();\n } else {\n console.info(`[Colyseus reconnection]: ${String.fromCodePoint(0x274C)} Failed to reconnect. Is your server running? Please check server logs.`); // ❌\n }\n }\n }, delay);\n }\n}\n\nconst exponentialBackoff = (attempt: number, delay: number) => {\n return Math.floor(Math.pow(2, attempt) * delay);\n}\n\nfunction enqueueMessage(room: Room, message: Uint8Array) {\n room.reconnection.enqueuedMessages.push({ data: message });\n if (room.reconnection.enqueuedMessages.length > room.reconnection.maxEnqueuedMessages) {\n room.reconnection.enqueuedMessages.shift();\n }\n}","import type { Router, HasRequiredKeys, Prettify, UnionToIntersection, Endpoint, HTTPMethod } from \"@colyseus/better-call\";\nimport { ColyseusSDK } from \"./Client.ts\";\nimport { ServerError } from \"./errors/Errors.ts\";\n\n/**\n * TODO: we should clean up the types repetition in this file.\n */\n\n// Helper to check if a type is 'any'\ntype IsAny<T> = 0 extends 1 & T ? true : false;\n\n// Helper to check if a type resolves to any after indexed access\n// When T is any, T[K] is also any, but IsAny<T[K]> may not detect it due to deferred evaluation\n// We check multiple characteristics of 'any':\n// 1. Direct any check: IsAny<T>\n// 2. Accepts all string keys: string extends keyof T\n// 3. Accepts all number and symbol keys: for complete 'any' detection\ntype IsAnyOrAnyIndexed<T> = IsAny<T> extends true\n ? true\n : (string extends keyof T\n ? true\n : (number extends keyof T\n ? (symbol extends keyof T ? true : false)\n : false));\n\ntype HasRequired<\n T extends {\n body?: any;\n query?: any;\n params?: any;\n },\n> = T[\"body\"] extends object\n ? HasRequiredKeys<T[\"body\"]> extends true\n ? true\n : T[\"query\"] extends object\n ? HasRequiredKeys<T[\"query\"]> extends true\n ? true\n : T[\"params\"] extends object\n ? HasRequiredKeys<T[\"params\"]>\n : false\n : T[\"params\"] extends object\n ? HasRequiredKeys<T[\"params\"]>\n : false\n : T[\"query\"] extends object\n ? HasRequiredKeys<T[\"query\"]> extends true\n ? true\n : T[\"params\"] extends object\n ? HasRequiredKeys<T[\"params\"]>\n : false\n : T[\"params\"] extends object\n ? HasRequiredKeys<T[\"params\"]>\n : false;\n\ntype InferContext<T> = T extends (ctx: infer Ctx) => any\n ? Ctx extends object\n ? Ctx\n : never\n : never;\n\n// WithRequired - makes specific keys required\n// This works by spreading T and then overriding the specified keys to be non-nullable\ntype WithRequired<T, K extends keyof any> = Prettify<T & {\n [P in K & keyof T]-?: NonNullable<T[P]>\n}>;\n\ntype WithoutServerOnly<T extends Record<string, Endpoint>> = {\n [K in keyof T]: T[K] extends Endpoint<any, infer O>\n ? O extends { metadata: { SERVER_ONLY: true } }\n ? never\n : T[K]\n : T[K];\n};\n\n// Method-specific options type\ntype MethodOptions<API, M extends HTTPMethod> = API extends { [key: string]: infer T; }\n ? T extends Endpoint<any, infer O>\n ? O[\"method\"] extends M\n ? { [key in T[\"path\"]]: T; }\n : O[\"method\"] extends M[]\n ? M extends O[\"method\"][number]\n ? { [key in T[\"path\"]]: T; }\n : {}\n : O[\"method\"] extends \"*\"\n ? { [key in T[\"path\"]]: T; }\n : {}\n : {}\n : {};\n\nexport type RequiredOptionKeys<\n C extends {\n body?: any;\n query?: any;\n params?: any;\n },\n> = (C[\"body\"] extends object\n ? HasRequiredKeys<C[\"body\"]> extends true\n ? { body: true }\n : {}\n : {}) &\n (C[\"query\"] extends object\n ? HasRequiredKeys<C[\"query\"]> extends true\n ? { query: true }\n : {}\n : {}) &\n (C[\"params\"] extends object\n ? HasRequiredKeys<C[\"params\"]> extends true\n ? { params: true }\n : {}\n : {});\n\n\ntype CommonHeaders = {\n accept: \"application/json\" | \"text/plain\" | \"application/octet-stream\";\n \"content-type\": \"application/json\" | \"text/plain\" | \"application/x-www-form-urlencoded\" | \"multipart/form-data\" | \"application/octet-stream\";\n authorization: \"Bearer\" | \"Basic\";\n};\n\ntype FetchRequestOptions<\n Body = any,\n Query extends Record<string, any> = any,\n Params extends Record<string, any> | Array<string> | undefined = any, Res = any,\n ExtraOptions extends Record<string, any> = {}\n> = Prettify<ExtraOptions & Omit<RequestInit, \"body\"> & {\n// baseURL?: string;\n\n /**\n * Headers\n */\n headers?: CommonHeaders | Headers | HeadersInit;\n\n /**\n * Body\n */\n body?: Body;\n\n /**\n * Query parameters (key-value pairs)\n */\n query?: Query;\n\n /**\n * Dynamic parameters.\n *\n * If url is defined as /path/:id, params will be { id: string }\n */\n params?: Params;\n}>\n\ntype FetchResponse<T> = {\n raw: Response;\n data: T;\n headers: Headers;\n status: number;\n statusText: string;\n};\n\nexport function isJSONSerializable(value: any) {\n\tif (value === undefined) {\n\t\treturn false;\n\t}\n\tconst t = typeof value;\n\tif (t === \"string\" || t === \"number\" || t === \"boolean\" || t === null) {\n\t\treturn true;\n\t}\n\tif (t !== \"object\") {\n\t\treturn false;\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn true;\n\t}\n\tif (value.buffer) {\n\t\treturn false;\n\t}\n\treturn (\n\t\t(value.constructor && value.constructor.name === \"Object\") ||\n\t\ttypeof value.toJSON === \"function\"\n\t);\n}\n\nconst JSON_RE = /^application\\/(?:[\\w!#$%&*.^`~-]*\\+)?json(;.+)?$/i;\n\nexport type ResponseType = \"json\" | \"text\" | \"blob\";\nexport function detectResponseType(request: Response): ResponseType {\n\tconst _contentType = request.headers.get(\"content-type\");\n\tconst textTypes = new Set([\n\t\t\"image/svg\",\n\t\t\"application/xml\",\n\t\t\"application/xhtml\",\n\t\t\"application/html\",\n\t]);\n\tif (!_contentType) {\n\t\treturn \"json\";\n\t}\n\tconst contentType = _contentType.split(\";\").shift() || \"\";\n\tif (JSON_RE.test(contentType)) {\n\t\treturn \"json\";\n\t}\n\tif (textTypes.has(contentType) || contentType.startsWith(\"text/\")) {\n\t\treturn \"text\";\n\t}\n\treturn \"blob\";\n}\n\nfunction getURLWithQueryParams(url: string, option?: FetchRequestOptions) {\n\tconst { params, query } = option || {};\n\n\t// Parse the URL and extract existing query parameters\n\tconst [urlPath, urlQuery] = url.split(\"?\");\n\tlet path = urlPath;\n\n\t// Handle params substitution\n\tif (params) {\n\t\tif (Array.isArray(params)) {\n\t\t\tconst paramPaths = path.split(\"/\").filter((p) => p.startsWith(\":\"));\n\t\t\tfor (const [index, key] of paramPaths.entries()) {\n\t\t\t\tconst value = params[index];\n\t\t\t\tpath = path.replace(key, value);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (const [key, value] of Object.entries(params)) {\n\t\t\t\tpath = path.replace(`:${key}`, String(value));\n\t\t\t}\n\t\t}\n\t}\n\n\t// Merge query parameters from URL and options\n\tconst queryParams = new URLSearchParams(urlQuery);\n\tif (query) {\n\t\tfor (const [key, value] of Object.entries(query)) {\n\t\t\tif (value == null) continue;\n\t\t\tqueryParams.set(key, String(value));\n\t\t}\n\t}\n\n\t// Build final URL\n\tlet queryParamString = queryParams.toString();\n\tqueryParamString = queryParamString.length > 0 ? `?${queryParamString}`.replace(/\\+/g, \"%20\") : \"\";\n\n\treturn `${path}${queryParamString}`;\n}\n\ntype InferredAPI<R> = R extends { endpoints: Record<string, Endpoint> }\n ? WithoutServerOnly<R[\"endpoints\"]>\n : WithoutServerOnly<R & Record<string, Endpoint>>;\n\nexport class HTTP<R extends Router | Router[\"endpoints\"]> {\n public authToken: string | undefined;\n public options: FetchRequestOptions;\n\n private sdk: ColyseusSDK;\n\n constructor(sdk: ColyseusSDK, baseOptions: FetchRequestOptions) {\n this.sdk = sdk;\n this.options = baseOptions;\n }\n\n private async request<\n M extends HTTPMethod,\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, M>>> = Prettify<UnionToIntersection<MethodOptions<API, M>>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n method: M,\n path: K,\n options?: FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n > {\n return this.executeRequest(method, path, options);\n }\n\n // Overload for endpoints WITH required fields (body/query/params)\n get<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"GET\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"GET\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends true ? K : never),\n options: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : WithRequired<FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>, keyof RequiredOptionKeys<C>>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n // Overload for endpoints WITHOUT required fields (permissive when R is 'any')\n get<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"GET\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"GET\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends false ? K : never),\n options?: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n get(path: any, options?: any): Promise<any> {\n return this.request(\"GET\", path, options);\n }\n\n // Overload for endpoints WITH required fields (body/query/params)\n post<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"POST\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"POST\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: (IsAnyOrAnyIndexed<R> extends true ? string : never) | (IsAny<API> extends true ? string : never) | (HasRequired<C> extends true ? K : never),\n options: IsAnyOrAnyIndexed<R> extends true ? FetchRequestOptions<any, any, any> : (IsAny<API> extends true\n ? FetchRequestOptions<any, any, any>\n : WithRequired<FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>, keyof RequiredOptionKeys<C>>)\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n // Overload for endpoints WITHOUT required fields (permissive when R is 'any')\n post<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"POST\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"POST\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: (IsAnyOrAnyIndexed<R> extends true ? string : never) | (IsAny<API> extends true ? string : never) | (HasRequired<C> extends false ? K : never),\n options?: IsAnyOrAnyIndexed<R> extends true ? FetchRequestOptions<any, any, any> : (IsAny<API> extends true\n ? FetchRequestOptions<any, any, any>\n : FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>)\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n post(path: any, options?: any): Promise<any> {\n return this.request(\"POST\", path, options);\n }\n\n // Overload for endpoints WITH required fields (body/query/params)\n delete<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"DELETE\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"DELETE\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends true ? K : never),\n options: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : WithRequired<FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>, keyof RequiredOptionKeys<C>>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n // Overload for endpoints WITHOUT required fields (permissive when R is 'any')\n delete<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"DELETE\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"DELETE\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends false ? K : never),\n options?: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n delete(path: any, options?: any): Promise<any> {\n return this.request(\"DELETE\", path, options);\n }\n\n // Overload for endpoints WITH required fields (body/query/params)\n patch<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"PATCH\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"PATCH\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends true ? K : never),\n options: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : WithRequired<FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>, keyof RequiredOptionKeys<C>>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n // Overload for endpoints WITHOUT required fields (permissive when R is 'any')\n patch<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"PATCH\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"PATCH\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends false ? K : never),\n options?: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n patch(path: any, options?: any): Promise<any> {\n return this.request(\"PATCH\", path, options);\n }\n\n // Overload for endpoints WITH required fields (body/query/params)\n put<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"PUT\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"PUT\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends true ? K : never),\n options: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : WithRequired<FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>, keyof RequiredOptionKeys<C>>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n // Overload for endpoints WITHOUT required fields (permissive when R is 'any')\n put<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"PUT\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"PUT\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends false ? K : never),\n options?: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n put(path: any, options?: any): Promise<any> {\n return this.request(\"PUT\", path, options);\n }\n\n protected async executeRequest<M extends HTTPMethod>(\n method: M,\n path: any,\n requestOptions?: any\n ): Promise<any> {\n //\n // FIXME: if FormData is provided, merging \"baseOptions.body\" with\n // \"options.body\" will not work as intended\n //\n let body = (this.options.body)\n ? { ...this.options.body, ...(requestOptions?.body as object || {}) }\n : requestOptions?.body;\n\n const query = (this.options.query)\n ? { ...this.options.query, ...(requestOptions?.query as object || {}) }\n : requestOptions?.query;\n\n const params = (this.options.params)\n ? { ...this.options.params, ...(requestOptions?.params as object || {}) }\n : requestOptions?.params;\n\n const headers = new Headers(\n (this.options.headers)\n ? { ...this.options.headers, ...(requestOptions?.headers || {}) }\n : requestOptions?.headers\n );\n\n // Add Authorization header if authToken is set\n if (this.authToken && !headers.has(\"authorization\")) {\n headers.set(\"authorization\", `Bearer ${this.authToken}`);\n }\n\n // Stringify JSON-serializable objects for fetch() body\n if (isJSONSerializable(body) && typeof body === 'object' && body !== null) {\n if (!headers.has(\"content-type\")) {\n headers.set(\"content-type\", \"application/json\");\n }\n for (const [key, value] of Object.entries(body)) {\n if (value instanceof Date) {\n body[key] = value.toISOString();\n }\n }\n body = JSON.stringify(body);\n }\n\n const mergedOptions = {\n credentials: requestOptions?.credentials || \"include\",\n ...this.options,\n ...requestOptions,\n query,\n params,\n headers,\n body,\n method,\n };\n\n const url = getURLWithQueryParams(this.sdk['getHttpEndpoint'](path.toString()), mergedOptions);\n\n let raw: Response;\n try {\n raw = await fetch(url, mergedOptions);\n } catch (err: any) {\n // If it's an AbortError, re-throw as-is\n if (err.name === 'AbortError') {\n throw err;\n }\n // Re-throw with network error code at top level (e.g. ECONNREFUSED)\n const networkError: ServerError = new ServerError(err.cause?.code || err.code, err.message);\n networkError.response = raw;\n networkError.cause = err.cause;\n throw networkError;\n }\n const contentType = raw.headers.get(\"content-type\");\n\n let data: any;\n\n // TODO: improve content-type detection here!\n if (contentType?.indexOf(\"json\")) {\n data = await raw.json();\n\n } else if (contentType?.indexOf(\"text\")) {\n data = await raw.text();\n\n } else {\n data = await raw.blob();\n }\n\n if (!raw.ok) {\n throw new ServerError(data.code ?? raw.status, data.message ?? raw.statusText, {\n headers: raw.headers,\n status: raw.status,\n response: raw,\n data\n });\n }\n\n return {\n raw,\n data,\n headers: raw.headers,\n status: raw.status,\n statusText: raw.statusText,\n };\n }\n}\n","/// <reference path=\"../typings/cocos-creator.d.ts\" />\n\n/**\n * We do not assign 'storage' to window.localStorage immediatelly for React\n * Native compatibility. window.localStorage is not present when this module is\n * loaded.\n */\n\nlet storage: any;\n\nfunction getStorage(): Storage {\n if (!storage) {\n try {\n storage = (typeof (cc) !== 'undefined' && cc.sys && cc.sys.localStorage)\n ? cc.sys.localStorage // compatibility with cocos creator\n : window.localStorage; // RN does have window object at this point, but localStorage is not defined\n\n } catch (e) {\n // ignore error\n }\n }\n\n if (!storage && typeof (globalThis.indexedDB) !== 'undefined') {\n storage = new IndexedDBStorage();\n }\n\n if (!storage) {\n // mock localStorage if not available (Node.js or RN environment)\n storage = {\n cache: {},\n setItem: function (key, value) { this.cache[key] = value; },\n getItem: function (key) { this.cache[key]; },\n removeItem: function (key) { delete this.cache[key]; },\n };\n }\n\n return storage;\n}\n\nexport function setItem(key: string, value: string) {\n getStorage().setItem(key, value);\n}\n\nexport function removeItem(key: string) {\n getStorage().removeItem(key);\n}\n\nexport function getItem(key: string, callback: Function) {\n const value: any = getStorage().getItem(key);\n\n if (\n typeof (Promise) === 'undefined' || // old browsers\n !(value instanceof Promise)\n ) {\n // browser has synchronous return\n callback(value);\n\n } else {\n // react-native is asynchronous\n value.then((id) => callback(id));\n }\n}\n\n/**\n * When running in a Web Worker, we need to use IndexedDB to store data.\n */\nclass IndexedDBStorage {\n private dbPromise: Promise<IDBDatabase> = new Promise((resolve) => {\n const request = indexedDB.open('_colyseus_storage', 1);\n request.onupgradeneeded = () => request.result.createObjectStore('store');\n request.onsuccess = () => resolve(request.result);\n });\n\n private async tx(mode: IDBTransactionMode, fn: (store: IDBObjectStore) => IDBRequest) {\n const db = await this.dbPromise;\n const store = db.transaction('store', mode).objectStore('store');\n return fn(store);\n }\n\n setItem(key: string, value: string) {\n return this.tx('readwrite', store => store.put(value, key)).then();\n }\n\n async getItem(key: string) {\n const request = await this.tx('readonly', store => store.get(key));\n return new Promise<string | undefined>((resolve) => {\n request.onsuccess = () => resolve(request.result);\n });\n }\n\n removeItem(key: string) {\n return this.tx('readwrite', store => store.delete(key)).then();\n }\n}","import { HTTP } from \"./HTTP.ts\";\nimport { getItem, removeItem, setItem } from \"./Storage.ts\";\nimport { createNanoEvents } from './core/nanoevents.ts';\n\nexport interface AuthSettings {\n path: string;\n key: string;\n}\n\nexport interface PopupSettings {\n prefix: string;\n width: number;\n height: number;\n}\n\n/**\n * Response from getUserData()\n */\nexport interface UserDataResponse<UserData = any> {\n user: UserData;\n}\n\n/**\n * Response from authentication methods (login, register, anonymous, OAuth)\n */\nexport interface AuthResponse<UserData = any> {\n user: UserData;\n token: string;\n}\n\n/**\n * Response from sendPasswordResetEmail()\n */\nexport type ForgotPasswordResponse = boolean | unknown;\n\n/**\n * @deprecated Use AuthResponse instead\n */\nexport type AuthData<UserData = any> = AuthResponse<UserData>;\n\nexport class Auth<UserData = any> {\n settings: AuthSettings = {\n path: \"/auth\",\n key: \"colyseus-auth-token\",\n };\n\n #_initialized = false;\n #_signInWindow: WindowProxy | null = null;\n #_events = createNanoEvents<{\n change: (response: AuthResponse) => void;\n }>();\n\n protected http: HTTP<any>;\n\n constructor(http: HTTP<any>) {\n this.http = http;\n getItem(this.settings.key, (token: string) => this.token = token);\n }\n\n public set token(token: string) {\n this.http.authToken = token;\n }\n\n public get token(): string | undefined {\n return this.http.authToken;\n }\n\n public onChange<U = UserData>(callback: (response: AuthResponse<U | null>) => void) {\n const unbindChange = this.#_events.on(\"change\", callback);\n if (!this.#_initialized) {\n this.getUserData().then((userData) => {\n this.emitChange({ ...userData, token: this.token });\n\n }).catch((e) => {\n // user is not logged in, or service is down\n this.emitChange({ user: null, token: undefined });\n });\n }\n this.#_initialized = true;\n return unbindChange;\n }\n\n public async getUserData<U = UserData>(): Promise<UserDataResponse<U>> {\n if (this.token) {\n return (await this.http.get(`${this.settings.path}/userdata`)).data;\n } else {\n throw new Error(\"missing auth.token\");\n }\n }\n\n public async registerWithEmailAndPassword<U = UserData>(\n email: string,\n password: string,\n options?: any\n ): Promise<AuthResponse<U>> {\n const data = (await this.http.post(`${this.settings.path}/register`, {\n body: { email, password, options, },\n })).data;\n\n this.emitChange(data);\n\n return data;\n }\n\n public async signInWithEmailAndPassword<U = UserData>(\n email: string,\n password: string\n ): Promise<AuthResponse<U>> {\n const data = (await this.http.post(`${this.settings.path}/login`, {\n body: { email, password, },\n })).data;\n\n this.emitChange(data);\n\n return data;\n }\n\n public async signInAnonymously<U = UserData>(options?: any): Promise<AuthResponse<U>> {\n const data = (await this.http.post(`${this.settings.path}/anonymous`, {\n body: { options, }\n })).data;\n\n this.emitChange(data);\n\n return data;\n }\n\n public async sendPasswordResetEmail(email: string): Promise<ForgotPasswordResponse> {\n return (await this.http.post(`${this.settings.path}/forgot-password`, {\n body: { email, }\n })).data;\n }\n\n public async signInWithProvider<U = UserData>(\n providerName: string,\n settings: Partial<PopupSettings> = {}\n ): Promise<AuthResponse<U>> {\n return new Promise((resolve, reject) => {\n const w = settings.width || 480;\n const h = settings.height || 768;\n\n // forward existing token for upgrading\n const upgradingToken = this.token ? `?token=${this.token}` : \"\";\n\n // Capitalize first letter of providerName\n const title = `Login with ${(providerName[0].toUpperCase() + providerName.substring(1))}`;\n const url = this.http['sdk']['getHttpEndpoint'](`${(settings.prefix || `${this.settings.path}/provider`)}/${providerName}${upgradingToken}`);\n\n const left = (screen.width / 2) - (w / 2);\n const top = (screen.height / 2) - (h / 2);\n\n this.#_signInWindow = window.open(url, title, 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left);\n\n const onMessage = (event: MessageEvent) => {\n // TODO: it is a good idea to check if event.origin can be trusted!\n // if (event.origin.indexOf(window.location.hostname) === -1) { return; }\n\n // require 'user' and 'token' inside received data.\n if (event.data.user === undefined && event.data.token === undefined) { return; }\n\n clearInterval(rejectionChecker);\n this.#_signInWindow?.close();\n this.#_signInWindow = null;\n\n window.removeEventListener(\"message\", onMessage);\n\n if (event.data.error !== undefined) {\n reject(event.data.error);\n\n } else {\n resolve(event.data);\n this.emitChange(event.data);\n }\n }\n\n const rejectionChecker = setInterval(() => {\n if (!this.#_signInWindow || this.#_signInWindow.closed) {\n this.#_signInWindow = null;\n reject(\"cancelled\");\n window.removeEventListener(\"message\", onMessage);\n }\n }, 200);\n\n window.addEventListener(\"message\", onMessage);\n });\n }\n\n public async signOut(): Promise<void> {\n this.emitChange({ user: null, token: null });\n }\n\n private emitChange(authData: AuthResponse<UserData | null>) {\n if (authData.token !== undefined) {\n this.token = authData.token;\n\n if (authData.token === null) {\n removeItem(this.settings.key);\n\n } else {\n // store key in localStorage\n setItem(this.settings.key, authData.token);\n }\n }\n\n this.#_events.emit(\"change\", authData);\n }\n\n}\n","/**\n * Discord Embedded App SDK\n * https://github.com/colyseus/colyseus/issues/707\n *\n * All URLs must go through the local proxy from\n * https://<app_id>.discordsays.com/.proxy/<mapped_url>/...\n *\n * URL Mapping Examples:\n *\n * 1. Using Colyseus Cloud:\n * - /colyseus/{subdomain} -> {subdomain}.colyseus.cloud\n *\n * Example:\n * const client = new Client(\"https://xxxx.colyseus.cloud\");\n *\n * -------------------------------------------------------------\n *\n * 2. Using `cloudflared` tunnel:\n * - /colyseus/ -> <your-cloudflared-url>.trycloudflare.com\n *\n * Example:\n * const client = new Client(\"https://<your-cloudflared-url>.trycloudflare.com\");\n *\n * -------------------------------------------------------------\n *\n * 3. Providing a manual /.proxy/your-mapping:\n * - /your-mapping/ -> your-endpoint.com\n *\n * Example:\n * const client = new Client(\"/.proxy/your-mapping\");\n *\n */\nexport function discordURLBuilder (url: URL): string {\n const localHostname = window?.location?.hostname || \"localhost\";\n\n const remoteHostnameSplitted = url.hostname.split('.');\n const subdomain = (\n !url.hostname.includes(\"trycloudflare.com\") && // ignore cloudflared subdomains\n !url.hostname.includes(\"discordsays.com\") && // ignore discordsays.com subdomains\n remoteHostnameSplitted.length > 2\n )\n ? `/${remoteHostnameSplitted[0]}`\n : '';\n\n return (url.pathname.startsWith(\"/.proxy\"))\n ? `${url.protocol}//${localHostname}${subdomain}${url.pathname}${url.search}`\n : `${url.protocol}//${localHostname}/.proxy/colyseus${subdomain}${url.pathname}${url.search}`;\n}\n","import { CloseCode, Protocol, type InferState, type SDKTypes, type ServerRoomLike, type ISeatReservation } from '@colyseus/shared-types';\n\nimport { MatchMakeError, ServerError } from './errors/Errors.ts';\nimport { Room } from './Room.ts';\nimport { SchemaConstructor } from './serializer/SchemaSerializer.ts';\nimport { HTTP } from './HTTP.ts';\nimport { Auth } from './Auth.ts';\nimport { Connection } from './Connection.ts';\nimport { discordURLBuilder } from './3rd_party/discord.ts';\n\nexport type JoinOptions = any;\nexport type { ISeatReservation };\n\n// - React Native does not provide `window.location`\n// - Cocos Creator (Native) does not provide `window.location.hostname`\nconst DEFAULT_ENDPOINT = (typeof (window) !== \"undefined\" && typeof (window?.location?.hostname) !== \"undefined\")\n ? `${window.location.protocol.replace(\"http\", \"ws\")}//${window.location.hostname}${(window.location.port && `:${window.location.port}`)}`\n : \"ws://127.0.0.1:2567\";\n\nexport interface EndpointSettings {\n hostname: string,\n secure: boolean,\n port?: number,\n pathname?: string,\n searchParams?: string,\n protocol?: \"ws\" | \"h3\";\n}\n\nexport interface ClientOptions {\n headers?: { [id: string]: string };\n urlBuilder?: (url: URL) => string;\n protocol?: \"ws\" | \"h3\";\n}\n\nexport interface LatencyOptions {\n /** \"ws\" for WebSocket, \"h3\" for WebTransport (default: \"ws\") */\n protocol?: \"ws\" | \"h3\";\n /** Number of pings to send (default: 1). Returns the average latency when > 1. */\n pingCount?: number;\n}\n\nexport class ColyseusSDK<ServerType extends SDKTypes = any, UserData = any> {\n static VERSION = \"0.17\";\n\n /**\n * The HTTP client to make requests to the server.\n */\n public http: HTTP<ServerType['~routes']>;\n\n /**\n * The authentication module to authenticate into requests and rooms.\n */\n public auth: Auth<UserData>;\n\n /**\n * The settings used to connect to the server.\n */\n public settings: EndpointSettings;\n\n protected urlBuilder: (url: URL) => string;\n\n constructor(\n settings: string | EndpointSettings = DEFAULT_ENDPOINT,\n options?: ClientOptions,\n ) {\n if (typeof (settings) === \"string\") {\n\n //\n // endpoint by url\n //\n const url = (settings.startsWith(\"/\"))\n ? new URL(settings, DEFAULT_ENDPOINT)\n : new URL(settings);\n\n const secure = (url.protocol === \"https:\" || url.protocol === \"wss:\");\n const port = Number(url.port || (secure ? 443 : 80));\n\n this.settings = {\n hostname: url.hostname,\n pathname: url.pathname,\n port,\n secure,\n searchParams: url.searchParams.toString() || undefined,\n };\n\n } else {\n //\n // endpoint by settings\n //\n if (settings.port === undefined) {\n settings.port = (settings.secure) ? 443 : 80;\n }\n if (settings.pathname === undefined) {\n settings.pathname = \"\";\n }\n this.settings = settings;\n }\n\n // make sure pathname does not end with \"/\"\n if (this.settings.pathname.endsWith(\"/\")) {\n this.settings.pathname = this.settings.pathname.slice(0, -1);\n }\n\n // specify room connection protocol if provided\n if (options?.protocol) {\n this.settings.protocol = options.protocol;\n }\n\n this.http = new HTTP(this, {\n headers: options?.headers || {},\n });\n this.auth = new Auth(this.http);\n\n this.urlBuilder = options?.urlBuilder;\n\n //\n // Discord Embedded SDK requires a custom URL builder\n //\n if (\n !this.urlBuilder &&\n typeof (window) !== \"undefined\" &&\n window?.location?.hostname?.includes(\"discordsays.com\")\n ) {\n this.urlBuilder = discordURLBuilder;\n console.log(\"Colyseus SDK: Discord Embedded SDK detected. Using custom URL builder.\");\n }\n }\n\n /**\n * Select the endpoint with the lowest latency.\n * @param endpoints Array of endpoints to select from.\n * @param options Client options.\n * @param latencyOptions Latency measurement options (protocol, pingCount).\n * @returns The client with the lowest latency.\n */\n static async selectByLatency<ServerType extends SDKTypes = any, UserData = any>(\n endpoints: Array<string | EndpointSettings>,\n options?: ClientOptions,\n latencyOptions: LatencyOptions = {}\n ) {\n const clients = endpoints.map(endpoint => new ColyseusSDK<ServerType, UserData>(endpoint, options));\n\n const latencies = (await Promise.allSettled(clients.map((client, index) => client.getLatency(latencyOptions).then(latency => {\n const settings = clients[index].settings;\n console.log(`🛜 Endpoint Latency: ${latency}ms - ${settings.hostname}:${settings.port}${settings.pathname}`);\n return [index, latency]\n }))))\n .filter((result) => result.status === 'fulfilled')\n .map(result => result.value);\n\n if (latencies.length === 0) {\n throw new Error('All endpoints failed to respond');\n }\n\n return clients[latencies.sort((a, b) => a[1] - b[1])[0][0]];\n }\n\n // Overload: Use room name from ServerType to infer room type\n public async joinOrCreate<R extends keyof ServerType['~rooms'], State = InferState<ServerType['~rooms'][R]['~room'], never>>(\n roomName: R,\n options?: Parameters<ServerType['~rooms'][R]['~room']['onJoin']>[1],\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<ServerType['~rooms'][R]['~room'], State>>\n // Overload: Pass RoomType directly to extract state\n public async joinOrCreate<RoomType extends ServerRoomLike>(\n roomName: string,\n options?: Parameters<NonNullable<RoomType['onJoin']>>[1],\n rootSchema?: SchemaConstructor<RoomType['state']>\n ): Promise<Room<RoomType, RoomType['state']>>\n // Overload: Pass State type directly\n public async joinOrCreate<State = any>(\n roomName: string,\n options?: JoinOptions,\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<any, State>>\n // Implementation\n public async joinOrCreate<T = any>(roomName: string, options: JoinOptions = {}, rootSchema?: SchemaConstructor<T>) {\n return await this.createMatchMakeRequest<T>('joinOrCreate', roomName, options, rootSchema);\n }\n\n // Overload: Use room name from ServerType to infer room type\n public async create<R extends keyof ServerType['~rooms'], State = InferState<ServerType['~rooms'][R]['~room'], never>>(\n roomName: R,\n options?: Parameters<ServerType['~rooms'][R]['~room']['onJoin']>[1],\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<ServerType['~rooms'][R]['~room'], State>>\n // Overload: Pass RoomType directly to extract state\n public async create<RoomType extends ServerRoomLike>(\n roomName: string,\n options?: Parameters<NonNullable<RoomType['onJoin']>>[1],\n rootSchema?: SchemaConstructor<RoomType['state']>\n ): Promise<Room<RoomType, RoomType['state']>>\n // Overload: Pass State type directly\n public async create<State = any>(\n roomName: string,\n options?: JoinOptions,\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<any, State>>\n // Implementation\n public async create<T = any>(roomName: string, options: JoinOptions = {}, rootSchema?: SchemaConstructor<T>) {\n return await this.createMatchMakeRequest<T>('create', roomName, options, rootSchema);\n }\n\n // Overload: Use room name from ServerType to infer room type\n public async join<R extends keyof ServerType['~rooms'], State = InferState<ServerType['~rooms'][R]['~room'], never>>(\n roomName: R,\n options?: Parameters<ServerType['~rooms'][R]['~room']['onJoin']>[1],\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<ServerType['~rooms'][R]['~room'], State>>\n // Overload: Pass RoomType directly to extract state\n public async join<RoomType extends ServerRoomLike>(\n roomName: string,\n options?: Parameters<NonNullable<RoomType['onJoin']>>[1],\n rootSchema?: SchemaConstructor<RoomType['state']>\n ): Promise<Room<RoomType, RoomType['state']>>\n // Overload: Pass State type directly\n public async join<State = any>(\n roomName: string,\n options?: JoinOptions,\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<any, State>>\n // Implementation\n public async join<T = any>(roomName: string, options: JoinOptions = {}, rootSchema?: SchemaConstructor<T>) {\n return await this.createMatchMakeRequest<T>('join', roomName, options, rootSchema);\n }\n\n // Overload: Use room name from ServerType to infer room type\n public async joinById<R extends keyof ServerType['~rooms'], State = InferState<ServerType['~rooms'][R]['~room'], never>>(\n roomName: R,\n options?: Parameters<ServerType['~rooms'][R]['~room']['onJoin']>[1],\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<ServerType['~rooms'][R]['~room'], State>>\n // Overload: Pass RoomType directly to extract state\n public async joinById<RoomType extends ServerRoomLike>(\n roomId: string,\n options?: Parameters<NonNullable<RoomType['onJoin']>>[1],\n rootSchema?: SchemaConstructor<RoomType['state']>\n ): Promise<Room<RoomType, RoomType['state']>>\n // Overload: Pass State type directly\n public async joinById<State = any>(\n roomId: string,\n options?: JoinOptions,\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<any, State>>\n // Implementation\n public async joinById<T = any>(roomId: string, options: JoinOptions = {}, rootSchema?: SchemaConstructor<T>) {\n return await this.createMatchMakeRequest<T>('joinById', roomId, options, rootSchema);\n }\n\n /**\n * Re-establish connection with a room this client was previously connected to.\n *\n * @param reconnectionToken The `room.reconnectionToken` from previously connected room.\n * @param rootSchema (optional) Concrete root schema definition\n * @returns Promise<Room>\n */\n // Overload: Use room name from ServerType to infer room type\n public async reconnect<R extends keyof ServerType['~rooms']>(reconnectionToken: string, roomName?: R): Promise<Room<ServerType['~rooms'][R]['~room']>>\n // Overload: Pass RoomType directly to extract state\n public async reconnect<RoomType extends ServerRoomLike>(\n reconnectionToken: string,\n rootSchema?: SchemaConstructor<RoomType['state']>\n ): Promise<Room<RoomType, RoomType['state']>>\n // Overload: Pass State type directly\n public async reconnect<State = any>(\n reconnectionToken: string,\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<any, State>>\n // Implementation\n public async reconnect<T = any>(reconnectionToken: string, rootSchema?: SchemaConstructor<T>) {\n if (typeof (reconnectionToken) === \"string\" && typeof (rootSchema) === \"string\") {\n throw new Error(\"DEPRECATED: .reconnect() now only accepts 'reconnectionToken' as argument.\\nYou can get this token from previously connected `room.reconnectionToken`\");\n }\n const [roomId, token] = reconnectionToken.split(\":\");\n\t\tif (!roomId || !token) {\n\t\t\tthrow new Error(\"Invalid reconnection token format.\\nThe format should be roomId:reconnectionToken\");\n\t\t}\n return await this.createMatchMakeRequest<T>('reconnect', roomId, { reconnectionToken: token }, rootSchema);\n }\n\n public async consumeSeatReservation<T>(\n response: ISeatReservation,\n rootSchema?: SchemaConstructor<T>\n ): Promise<Room<any, T>> {\n const room = this.createRoom<T>(response.name, rootSchema);\n room.roomId = response.roomId;\n room.sessionId = response.sessionId;\n\n const options: any = { sessionId: room.sessionId };\n\n // forward \"reconnection token\" in case of reconnection.\n if (response.reconnectionToken) {\n options.reconnectionToken = response.reconnectionToken;\n }\n\n room.connect(\n this.buildEndpoint(response, options),\n response,\n this.http.options.headers\n );\n\n return new Promise((resolve, reject) => {\n const onError = (code, message) => reject(new ServerError(code, message));\n room.onError.once(onError);\n\n room['onJoin'].once(() => {\n room.onError.remove(onError);\n resolve(room);\n });\n });\n }\n\n /**\n * Create a new connection with the server, and measure the latency.\n * @param options Latency measurement options (protocol, pingCount).\n */\n public getLatency(options: LatencyOptions = {}): Promise<number> {\n const protocol = options.protocol ?? \"ws\";\n const pingCount = options.pingCount ?? 1;\n\n return new Promise<number>((resolve, reject) => {\n const conn = new Connection(protocol);\n const latencies: number[] = [];\n let pingStart = 0;\n\n conn.events.onopen = () => {\n pingStart = Date.now();\n conn.send(new Uint8Array([Protocol.PING]));\n };\n\n conn.events.onmessage = (_: MessageEvent) => {\n latencies.push(Date.now() - pingStart);\n\n if (latencies.length < pingCount) {\n // Send another ping\n pingStart = Date.now();\n conn.send(new Uint8Array([Protocol.PING]));\n } else {\n // Done, calculate average and close\n conn.close();\n const average = latencies.reduce((sum, l) => sum + l, 0) / latencies.length;\n resolve(average);\n }\n };\n\n conn.events.onerror = (event: ErrorEvent) => {\n reject(new ServerError(CloseCode.ABNORMAL_CLOSURE, `Failed to get latency: ${event.message}`));\n };\n\n conn.connect(this.getHttpEndpoint());\n });\n }\n\n protected async createMatchMakeRequest<T>(\n method: string,\n roomName: string,\n options: JoinOptions = {},\n rootSchema?: SchemaConstructor<T>,\n ) {\n try {\n const httpResponse = await (this.http as HTTP<any>).post(`/matchmake/${method}/${roomName}`, {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n },\n body: options\n });\n\n const response = httpResponse.data as unknown as ISeatReservation;\n\n // forward reconnection token during \"reconnect\" methods.\n if (method === \"reconnect\") {\n response.reconnectionToken = options.reconnectionToken;\n }\n\n return await this.consumeSeatReservation<T>(response, rootSchema);\n } catch (error) {\n if (error instanceof ServerError) {\n throw new MatchMakeError(error.message, error.code);\n }\n throw error;\n }\n }\n\n protected createRoom<T>(roomName: string, rootSchema?: SchemaConstructor<T>) {\n return new Room<any, T>(roomName, rootSchema);\n }\n\n protected buildEndpoint(seatReservation: ISeatReservation, options: any = {}) {\n let protocol: string = this.settings.protocol || \"ws\";\n let searchParams = this.settings.searchParams || \"\";\n\n // forward authentication token\n if (this.http.authToken) {\n options['_authToken'] = this.http.authToken;\n }\n\n // append provided options\n for (const name in options) {\n if (!options.hasOwnProperty(name)) {\n continue;\n }\n searchParams += (searchParams ? '&' : '') + `${name}=${options[name]}`;\n }\n\n if (protocol === \"h3\") {\n protocol = \"http\";\n }\n\n let endpoint = (this.settings.secure)\n ? `${protocol}s://`\n : `${protocol}://`;\n\n if (seatReservation.publicAddress) {\n endpoint += `${seatReservation.publicAddress}`;\n\n } else {\n endpoint += `${this.settings.hostname}${this.getEndpointPort()}${this.settings.pathname}`;\n }\n\n const endpointURL = `${endpoint}/${seatReservation.processId}/${seatReservation.roomId}?${searchParams}`;\n return (this.urlBuilder)\n ? this.urlBuilder(new URL(endpointURL))\n : endpointURL;\n }\n\n protected getHttpEndpoint(segments: string = '') {\n const path = segments.startsWith(\"/\") ? segments : `/${segments}`;\n\n let endpointURL = `${(this.settings.secure) ? \"https\" : \"http\"}://${this.settings.hostname}${this.getEndpointPort()}${this.settings.pathname}${path}`;\n\n if (this.settings.searchParams) {\n endpointURL += `?${this.settings.searchParams}`;\n }\n\n return (this.urlBuilder)\n ? this.urlBuilder(new URL(endpointURL))\n : endpointURL;\n }\n\n protected getEndpointPort() {\n return (this.settings.port !== 80 && this.settings.port !== 443)\n ? `:${this.settings.port}`\n : \"\";\n }\n}\n\nexport const Client = ColyseusSDK;\nexport type Client<ServerType extends SDKTypes = any, UserData = any> = InstanceType<typeof ColyseusSDK<ServerType, UserData>>;","import { Client } from \"./Client.ts\";\nimport type { Room } from \"./Room.ts\";\nimport type { WebSocketTransport } from \"./transport/WebSocketTransport.ts\";\nimport { CloseCode } from \"@colyseus/shared-types\";\n\nconst logoIcon = `<svg viewBox=\"0 0 488.94 541.2\" style=\"width: 100%; height: 100%;\">\n <g>\n <g>\n <path fill=\"#ffffff\" d=\"m80.42,197.14c13.82,11.25,30.56,22.25,50.78,32.11,14.87-28.67,72.09-100.71,233.32-79.68l-14.4-55.35c-200.24-17.18-257.81,77.11-269.7,102.92Z\"/>\n <path fill=\"#ffffff\" d=\"m44.53,167.77c22.44-40.73,99.17-124.23,290.19-105.83L310.19,1.59S109.9-21.63,8.9,109.47c3.62,10.55,13.31,33.34,35.63,58.29Z\"/>\n <path fill=\"#ffffff\" d=\"m407.7,291.25c-32.14,3.35-62.02,4.95-89.63,4.95C123.09,296.2,36.78,219.6,0,164.95v251.98s15.77,162.98,488.94,115.66l-81.24-241.33Z\"/>\n </g>\n </g>\n</svg>`;\nconst envelopeUp = `<svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 16 16\" height=\"16\" width=\"16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 4a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v4.5a.5.5 0 0 1-1 0V5.383l-7 4.2-1.326-.795-5.64 3.47A1 1 0 0 0 2 13h5.5a.5.5 0 0 1 0 1H2a2 2 0 0 1-2-1.99zm1 7.105 4.708-2.897L1 5.383zM1 4v.217l7 4.2 7-4.2V4a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1\"></path><path d=\"M12.5 16a3.5 3.5 0 1 0 0-7 3.5 3.5 0 0 0 0 7m.354-5.354 1.25 1.25a.5.5 0 0 1-.708.708L13 12.207V14a.5.5 0 0 1-1 0v-1.717l-.28.305a.5.5 0 0 1-.737-.676l1.149-1.25a.5.5 0 0 1 .722-.016\"></path></svg>`;\nconst envelopeDown = `<svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 16 16\" height=\"16\" width=\"16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 4a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v4.5a.5.5 0 0 1-1 0V5.383l-7 4.2-1.326-.795-5.64 3.47A1 1 0 0 0 2 13h5.5a.5.5 0 0 1 0 1H2a2 2 0 0 1-2-1.99zm1 7.105 4.708-2.897L1 5.383zM1 4v.217l7 4.2 7-4.2V4a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1\"></path><path d=\"M12.5 16a3.5 3.5 0 1 0 0-7 3.5 3.5 0 0 0 0 7m.354-1.646a.5.5 0 0 1-.722-.016l-1.149-1.25a.5.5 0 1 1 .737-.676l.28.305V11a.5.5 0 0 1 1 0v1.793l.396-.397a.5.5 0 0 1 .708.708z\"></path></svg>`;\nconst messageIcon = `<svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 512 512\" height=\"200px\" width=\"200px\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M498.1 5.6c10.1 7 15.4 19.1 13.5 31.2l-64 416c-1.5 9.7-7.4 18.2-16 23s-18.9 5.4-28 1.6L284 427.7l-68.5 74.1c-8.9 9.7-22.9 12.9-35.2 8.1S160 493.2 160 480V396.4c0-4 1.5-7.8 4.2-10.7L331.8 202.8c5.8-6.3 5.6-16-.4-22s-15.7-6.4-22-.7L106 360.8 17.7 316.6C7.1 311.3 .3 300.7 0 288.9s5.9-22.8 16.1-28.7l448-256c10.7-6.1 23.9-5.5 34 1.4z\"/></svg>`;\nconst treeViewIcon = `<svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 256 256\" height=\"200px\" width=\"200px\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M160,136v-8H88v64a8,8,0,0,0,8,8h64v-8a16,16,0,0,1,16-16h32a16,16,0,0,1,16,16v32a16,16,0,0,1-16,16H176a16,16,0,0,1-16-16v-8H96a24,24,0,0,1-24-24V80H64A16,16,0,0,1,48,64V32A16,16,0,0,1,64,16H96a16,16,0,0,1,16,16V64A16,16,0,0,1,96,80H88v32h72v-8a16,16,0,0,1,16-16h32a16,16,0,0,1,16,16v32a16,16,0,0,1-16,16H176A16,16,0,0,1,160,136Z\"></path></svg>`;\nconst infoIcon = `<svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 512 512\" height=\"200px\" width=\"200px\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M256 48C141.2 48 48 141.2 48 256s93.2 208 208 208 208-93.2 208-208S370.8 48 256 48zm21 312h-42V235h42v125zm0-166h-42v-42h42v42z\"></path></svg>`;\nconst settingsIcon = `<svg stroke=\"currentColor\" fill=\"none\" stroke-width=\"2\" viewBox=\"0 0 24 24\" stroke-linecap=\"round\" stroke-linejoin=\"round\" height=\"200px\" width=\"200px\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12.003 21c-.732 .001 -1.465 -.438 -1.678 -1.317a1.724 1.724 0 0 0 -2.573 -1.066c-1.543 .94 -3.31 -.826 -2.37 -2.37a1.724 1.724 0 0 0 -1.065 -2.572c-1.756 -.426 -1.756 -2.924 0 -3.35a1.724 1.724 0 0 0 1.066 -2.573c-.94 -1.543 .826 -3.31 2.37 -2.37c1 .608 2.296 .07 2.572 -1.065c.426 -1.756 2.924 -1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543 -.94 3.31 .826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c.886 .215 1.325 .957 1.318 1.694\"></path><path d=\"M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0\"></path><path d=\"M19.001 19m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0\"></path><path d=\"M19.001 15.5v1.5\"></path><path d=\"M19.001 21v1.5\"></path><path d=\"M22.032 17.25l-1.299 .75\"></path><path d=\"M17.27 20l-1.3 .75\"></path><path d=\"M15.97 17.25l1.3 .75\"></path><path d=\"M20.733 20l1.3 .75\"></path></svg>`;\nconst eyeSlashIcon = `<svg stroke=\"currentColor\" fill=\"none\" stroke-width=\"2\" viewBox=\"0 0 24 24\" stroke-linecap=\"round\" stroke-linejoin=\"round\" height=\"16\" width=\"16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\"></path><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line></svg>`;\nconst closeIcon = `<svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 512 512\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M400 145.49 366.51 112 256 222.51 145.49 112 112 145.49 222.51 256 112 366.51 145.49 400 256 289.49 366.51 400 400 366.51 289.49 256 400 145.49z\"></path></svg>`;\nconst disconnectIcon = `<svg fill=\"currentColor\" viewBox=\"0 0 36 36\" height=\"200px\" width=\"200px\"><path fill=\"currentColor\" d=\"M18 24.42a4 4 0 1 0 4 4a4 4 0 0 0-4-4m0 6a2 2 0 1 1 2-2a2 2 0 0 1-2 2\" class=\"clr-i-outline clr-i-outline-path-1\"></path><path fill=\"currentColor\" d=\"M26.21 21.85a1 1 0 0 0-.23-1.4a13.6 13.6 0 0 0-5-2.23l3.87 3.87a1 1 0 0 0 1.36-.24\" class=\"clr-i-outline clr-i-outline-path-2\"></path><path fill=\"currentColor\" d=\"M18.05 10.72a21 21 0 0 0-4.16.43l1.74 1.74a19 19 0 0 1 2.42-.17A18.76 18.76 0 0 1 28.64 16a1 1 0 0 0 1.12-1.65a20.75 20.75 0 0 0-11.71-3.63\" class=\"clr-i-outline clr-i-outline-path-3\"></path><path fill=\"currentColor\" d=\"M33.55 8.2A28.11 28.11 0 0 0 8.11 5.36l1.58 1.57a26 26 0 0 1 22.76 2.94a1 1 0 0 0 1.1-1.67\" class=\"clr-i-outline clr-i-outline-path-4\"></path><path fill=\"currentColor\" d=\"m1.84 4.75l2.43 2.43c-.62.34-1.23.7-1.83 1.1a1 1 0 1 0 1.12 1.66C4.26 9.47 5 9 5.74 8.65l3.87 3.87a20.6 20.6 0 0 0-3.38 1.88A1 1 0 0 0 7.36 16a18.8 18.8 0 0 1 3.77-2l4.16 4.16A13.5 13.5 0 0 0 10 20.55a1 1 0 0 0 1.18 1.61A11.5 11.5 0 0 1 17 20l10.8 10.8l1.41-1.41l-26-26Z\" class=\"clr-i-outline clr-i-outline-path-5\"></path><path fill=\"none\" d=\"M0 0h36v36H0z\"></path></svg>`;\n\n// Store debug info per room\nconst roomDebugInfo = new Map();\n\n// Single interval for all panels\nlet globalUpdateInterval = null;\n\n// Preferences state\nconst preferences = {\n maxLatency: 350, // milliseconds\n latencySimulation: {\n enabled: false,\n delay: 0 // milliseconds\n },\n panelPosition: {\n position: 'top-right' // 'bottom-right', 'bottom-left', 'top-left', 'top-right'\n }\n};\n\n// Load preferences from localStorage\nfunction loadPreferences() {\n try {\n const savedPrefs = localStorage.getItem('colyseus-debug-preferences') || '{}';\n const prefs = JSON.parse(savedPrefs);\n\n // Load position\n if (prefs.position && ['bottom-right', 'bottom-left', 'top-left', 'top-right'].includes(prefs.position)) {\n preferences.panelPosition.position = prefs.position;\n }\n\n // Load latency\n if (prefs.latency !== undefined && prefs.latency !== null) {\n const latencyValue = parseInt(prefs.latency, 10);\n if (!isNaN(latencyValue) && latencyValue >= 0 && latencyValue <= 500) {\n preferences.latencySimulation.delay = latencyValue;\n preferences.latencySimulation.enabled = latencyValue > 0;\n }\n }\n\n // Load hidden state\n if (prefs.hidden === true) {\n panelsHidden = true;\n }\n } catch (e) {\n // localStorage might not be available or JSON parse failed, ignore\n }\n}\n\n// Save preferences to localStorage\nfunction savePreferences() {\n try {\n localStorage.setItem('colyseus-debug-preferences', JSON.stringify({\n position: preferences.panelPosition.position,\n latency: preferences.latencySimulation.delay,\n hidden: panelsHidden\n }));\n } catch (e) {\n // localStorage might not be available, ignore\n }\n}\n\n// Panel visibility state\nlet panelsHidden = false;\n\n// Track open modals as an ordered stack (most recent at end)\nlet modalStack: any[] = [];\nconst BASE_MODAL_ZINDEX = 10000;\n\n// Load preferences on script load\nloadPreferences();\n\n// Function to select a modal (bring to front)\nfunction selectModal(modal) {\n if (!modal) return;\n\n // Remove modal from stack if already present\n const index = modalStack.indexOf(modal);\n if (index > -1) {\n modalStack.splice(index, 1);\n }\n\n // Add to end of stack (most recent)\n modalStack.push(modal);\n\n // Update z-indexes for all modals based on their position in stack\n modalStack.forEach((m, i) => {\n if (document.body.contains(m)) {\n m.style.zIndex = (BASE_MODAL_ZINDEX + i).toString();\n }\n });\n}\n\n// Function to remove modal from stack\nfunction removeModalFromStack(modal) {\n const index = modalStack.indexOf(modal);\n if (index > -1) {\n modalStack.splice(index, 1);\n }\n}\n\n// Global ESC key handler - closes most recent modal\ndocument.addEventListener('keydown', function(e) {\n if (e.key === 'Escape' && modalStack.length > 0) {\n // Get the most recent modal (top of stack)\n const topModal = modalStack[modalStack.length - 1];\n if (topModal && document.body.contains(topModal)) {\n topModal.remove();\n }\n }\n});\n\n// Shared modal creation utilities\nfunction createModalOverlay() {\n var overlay = document.createElement('div');\n overlay.style.position = 'fixed';\n overlay.style.top = '0';\n overlay.style.left = '0';\n overlay.style.right = '0';\n overlay.style.bottom = '0';\n overlay.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';\n overlay.style.zIndex = BASE_MODAL_ZINDEX.toString();\n overlay.style.display = 'flex';\n overlay.style.justifyContent = 'center';\n overlay.style.alignItems = 'center';\n return overlay;\n}\n\nfunction createModal(options) {\n var opts = options || {};\n var modal = document.createElement('div');\n\n // Set ID if provided\n if (opts.id) {\n modal.id = opts.id;\n }\n\n // Base styles\n modal.style.position = 'fixed';\n modal.style.backgroundColor = opts.backgroundColor || '#1e1e1e';\n modal.style.borderRadius = '8px';\n modal.style.boxShadow = '0 8px 32px rgba(0, 0, 0, 0.5)';\n modal.style.color = '#fff';\n modal.style.fontFamily = 'system-ui, -apple-system, sans-serif';\n modal.style.zIndex = BASE_MODAL_ZINDEX.toString();\n modal.style.display = 'flex';\n modal.style.flexDirection = 'column';\n modal.style.overflow = 'hidden';\n\n // Size\n if (opts.width) modal.style.width = opts.width;\n if (opts.height) modal.style.height = opts.height;\n if (opts.minWidth) modal.style.minWidth = opts.minWidth;\n if (opts.minHeight) modal.style.minHeight = opts.minHeight;\n if (opts.maxWidth) modal.style.maxWidth = opts.maxWidth;\n if (opts.maxHeight) modal.style.maxHeight = opts.maxHeight;\n\n // Position\n modal.style.top = opts.top || '50%';\n modal.style.left = opts.left || '50%';\n modal.style.transform = opts.transform || 'translate(-50%, -50%)';\n\n // Mark modal as selected when clicked\n modal.addEventListener('mousedown', function(e) {\n selectModal(modal);\n });\n\n // Mark modal as selected when opened\n selectModal(modal);\n\n // Override remove to cleanup modal from stack\n var originalRemove = modal.remove.bind(modal);\n modal.remove = function() {\n // Remove from modal stack\n removeModalFromStack(modal);\n\n // Auto-cleanup room onLeave listener\n if (opts.room && opts.trackOnLeave && opts.onLeaveCallback) {\n var callbackToRemove = opts.onLeaveCallback.current || opts.onLeaveCallback;\n opts.room.onLeave.remove(callbackToRemove);\n }\n\n if (opts.onRemove) {\n opts.onRemove();\n }\n originalRemove();\n };\n\n return modal;\n}\n\nfunction createModalHeader(options) {\n var opts = options || {};\n\n var header = document.createElement('div');\n header.style.display = 'flex';\n header.style.justifyContent = 'space-between';\n header.style.alignItems = 'center';\n header.style.padding = opts.padding || '8px';\n header.style.borderBottom = '1px solid rgba(255, 255, 255, 0.15)';\n header.style.paddingBottom = opts.paddingBottom || '4px';\n header.style.marginBottom = opts.marginBottom || '6px';\n header.style.cursor = opts.draggable !== false ? 'move' : 'default';\n header.style.userSelect = 'none';\n header.style.flexShrink = '0';\n header.style.position = 'relative';\n header.style.zIndex = '1';\n\n // Title\n var title = document.createElement('div');\n title.textContent = opts.title || '';\n title.style.margin = '0';\n title.style.fontSize = opts.titleSize || '11px';\n title.style.fontWeight = 'bold';\n title.style.fontFamily = opts.titleFont || 'monospace';\n title.style.flex = '1';\n title.style.display = 'flex';\n title.style.alignItems = 'center';\n\n // Status dot (optional)\n if (opts.statusDot) {\n var statusDot = document.createElement('div');\n statusDot.style.width = '8px';\n statusDot.style.height = '8px';\n statusDot.style.borderRadius = '50%';\n statusDot.style.marginRight = '8px';\n statusDot.style.flexShrink = '0';\n statusDot.style.transition = 'background-color 0.3s';\n statusDot.style.backgroundColor = opts.statusColor || '#22c55e';\n title.insertBefore(statusDot, title.firstChild);\n\n if (opts.statusDotRef) {\n opts.statusDotRef.element = statusDot;\n }\n }\n\n // Close button\n var closeButton = document.createElement('button');\n closeButton.innerHTML = closeIcon;\n closeButton.style.background = 'none';\n closeButton.style.border = 'none';\n closeButton.style.color = '#fff';\n closeButton.style.fontSize = '18px';\n closeButton.style.cursor = 'pointer';\n closeButton.style.padding = '0';\n closeButton.style.margin = 'auto';\n closeButton.style.width = '20px';\n closeButton.style.height = '20px';\n closeButton.style.display = 'flex';\n closeButton.style.alignItems = 'center';\n closeButton.style.justifyContent = 'center';\n closeButton.style.borderRadius = '4px';\n closeButton.style.transition = 'background-color 0.2s';\n closeButton.style.opacity = '0.6';\n\n closeButton.addEventListener('mouseenter', function() {\n closeButton.style.backgroundColor = 'rgba(255, 255, 255, 0.1)';\n closeButton.style.opacity = '1';\n });\n closeButton.addEventListener('mouseleave', function() {\n closeButton.style.backgroundColor = 'transparent';\n closeButton.style.opacity = '0.6';\n });\n closeButton.addEventListener('click', function(e) {\n e.stopPropagation();\n if (opts.onClose) {\n opts.onClose();\n } else if (opts.modal) {\n opts.modal.remove();\n }\n });\n\n header.appendChild(title);\n header.appendChild(closeButton);\n\n return { header: header, title: title, closeButton: closeButton };\n}\n\nfunction makeDraggable(modal, dragHandle) {\n var isDragging = false;\n var dragOffsetX = 0;\n var dragOffsetY = 0;\n\n dragHandle.addEventListener('mousedown', function(e) {\n isDragging = true;\n var rect = modal.getBoundingClientRect();\n dragOffsetX = e.clientX - rect.left;\n dragOffsetY = e.clientY - rect.top;\n\n // Set position to current absolute position before removing transform\n modal.style.left = rect.left + 'px';\n modal.style.top = rect.top + 'px';\n modal.style.transform = 'none';\n e.preventDefault();\n });\n\n var onMouseMove = function(e) {\n if (isDragging) {\n var newLeft = e.clientX - dragOffsetX;\n var newTop = e.clientY - dragOffsetY;\n modal.style.left = newLeft + 'px';\n modal.style.top = newTop + 'px';\n }\n };\n\n var onMouseUp = function() {\n isDragging = false;\n };\n\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n\n // Return cleanup function\n return function cleanup() {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n };\n}\n\n// Function to get border color based on latency simulation value\nfunction getBorderColor(latencyValue, opacity) {\n var maxLatency = preferences.maxLatency;\n var percentage = latencyValue / maxLatency;\n var r, g, b = 0;\n\n if (percentage <= 0.5) {\n // Green to Yellow: (0, 200, 0) -> (200, 200, 0)\n var segmentPercent = percentage * 2; // 0 to 1 for this segment\n r = Math.round(segmentPercent * 200);\n g = 200;\n } else {\n // Yellow to Red: (200, 200, 0) -> (200, 0, 0)\n var segmentPercent = (percentage - 0.5) * 2; // 0 to 1 for this segment\n r = 200;\n g = Math.round((1 - segmentPercent) * 200);\n }\n\n return 'rgba(' + r + ', ' + g + ', ' + b + ', ' + opacity + ')';\n}\n\nfunction initialize() {\n if (panelsHidden) return;\n\n var container = document.createElement('div');\n container.id = 'debug-logo-container';\n container.style.position = 'fixed';\n container.style.zIndex = '1000';\n container.style.width = '21px';\n container.style.height = '21px';\n container.style.backgroundColor = 'rgba(0, 0, 0, 0.7)';\n container.style.border = '3px solid ' + getBorderColor(preferences.latencySimulation.delay, 0.7);\n container.style.borderRadius = '50%';\n container.style.padding = '10px';\n container.style.boxSizing = 'content-box';\n container.style.display = 'flex';\n container.style.justifyContent = 'center';\n container.style.alignItems = 'center';\n container.style.boxShadow = '0 2px 8px rgba(0, 0, 0, 0.3)';\n container.style.transition = 'border-color 0.3s ease, background-color 0.3s ease';\n container.style.cursor = 'pointer';\n\n // Apply initial position\n applyPanelPosition();\n\n // container on hover effect\n container.addEventListener('mouseenter', function() {\n container.style.backgroundColor = 'rgba(0, 0, 0, 0.9)';\n container.style.borderColor = getBorderColor(preferences.latencySimulation.delay, 0.9);\n });\n container.addEventListener('mouseleave', function() {\n container.style.backgroundColor = 'rgba(0, 0, 0, 0.7)';\n container.style.borderColor = getBorderColor(preferences.latencySimulation.delay, 0.7);\n });\n\n var icon = document.createElement('div');\n icon.style.width = '100%';\n icon.style.height = '100%';\n icon.style.display = 'flex';\n icon.style.justifyContent = 'center';\n icon.style.alignItems = 'center';\n\n // Use insertAdjacentHTML for better Safari compatibility with SVG\n icon.insertAdjacentHTML('beforeend', logoIcon);\n\n container.appendChild(icon);\n document.body.appendChild(container);\n\n // Create menu first\n createMenu(container);\n\n // Apply initial position after menu is created\n applyPanelPosition();\n}\n\n// Create menu that opens on logo click\nfunction createMenu(logoContainer) {\n var menu = document.createElement('div');\n menu.id = 'debug-menu';\n menu.style.position = 'fixed';\n // Position will be set by applyPanelPosition\n menu.style.backgroundColor = 'rgba(0, 0, 0, 0.95)';\n menu.style.color = '#fff';\n menu.style.padding = '0 0 8px 0';\n menu.style.borderRadius = '6px';\n menu.style.fontFamily = 'system-ui, -apple-system, sans-serif';\n menu.style.fontSize = '12px';\n menu.style.zIndex = '1001';\n menu.style.minWidth = '200px';\n menu.style.boxShadow = '0 4px 12px rgba(0, 0, 0, 0.5)';\n menu.style.display = 'none';\n menu.style.overflow = 'hidden';\n\n // Host name display\n var hostContainer = document.createElement('div');\n hostContainer.style.padding = '6px 12px';\n hostContainer.style.cursor = 'default';\n hostContainer.style.backgroundColor = 'rgba(255, 255, 255, 0.1)';\n hostContainer.style.borderBottom = '1px solid rgba(255, 255, 255, 0.15)';\n hostContainer.style.marginBottom = '4px';\n hostContainer.style.borderTopLeftRadius = '6px';\n hostContainer.style.borderTopRightRadius = '6px';\n\n var hostValue = document.createElement('div');\n hostValue.id = 'debug-menu-host';\n hostValue.style.fontSize = '11px';\n hostValue.style.color = '#fff';\n hostValue.style.fontFamily = 'monospace';\n hostValue.style.whiteSpace = 'nowrap';\n hostValue.style.overflow = 'hidden';\n hostValue.style.textOverflow = 'ellipsis';\n hostValue.style.textAlign = 'center';\n hostValue.style.fontWeight = '500';\n\n // Function to update host display\n function updateHostDisplay() {\n var hostText = 'N/A';\n if (roomDebugInfo.size > 0) {\n // Get host from first room\n var firstRoom = roomDebugInfo.values().next().value;\n if (firstRoom && firstRoom.host) {\n hostText = firstRoom.host;\n }\n }\n hostValue.textContent = hostText;\n }\n\n // Update host display initially\n updateHostDisplay();\n\n hostContainer.appendChild(hostValue);\n menu.appendChild(hostContainer);\n\n // Simulate latency option\n var latencyContainer = document.createElement('div');\n latencyContainer.style.padding = '8px 12px';\n latencyContainer.style.cursor = 'default';\n\n var latencyLabel = document.createElement('div');\n latencyLabel.style.marginBottom = '8px';\n latencyLabel.style.display = 'flex';\n latencyLabel.style.alignItems = 'center';\n latencyLabel.style.justifyContent = 'space-between';\n var latencyValueSpan = document.createElement('span');\n latencyValueSpan.id = 'latency-value';\n latencyValueSpan.style.color = '#888';\n latencyValueSpan.style.fontSize = '11px';\n latencyValueSpan.textContent = preferences.latencySimulation.delay + 'ms';\n\n var latencyTextSpan = document.createElement('span');\n latencyTextSpan.textContent = 'Simulate latency';\n\n latencyLabel.appendChild(latencyTextSpan);\n latencyLabel.appendChild(latencyValueSpan);\n\n var latencySlider = document.createElement('input');\n latencySlider.type = 'range';\n latencySlider.min = '0';\n latencySlider.max = preferences.maxLatency.toString();\n latencySlider.value = preferences.latencySimulation.delay.toString();\n latencySlider.style.border = 'none';\n latencySlider.style.width = '100%';\n latencySlider.style.height = '20px';\n latencySlider.style.padding = '0';\n latencySlider.style.margin = '0';\n latencySlider.style.outline = 'none';\n latencySlider.style.cursor = 'pointer';\n latencySlider.style.webkitAppearance = 'none';\n latencySlider.style.appearance = 'none';\n latencySlider.style.background = 'transparent';\n latencySlider.id = 'latency-slider';\n\n // Function to calculate color from green (0) -> yellow (250) -> red (500)\n function getSliderColor(value, min, max) {\n var percentage = (value - min) / (max - min);\n var r, g, b = 0;\n\n if (percentage <= 0.5) {\n // Green to Yellow: (0, 200, 0) -> (200, 200, 0)\n var segmentPercent = percentage * 2; // 0 to 1 for this segment\n r = Math.round(segmentPercent * 200);\n g = 200;\n } else {\n // Yellow to Red: (200, 200, 0) -> (200, 0, 0)\n var segmentPercent = (percentage - 0.5) * 2; // 0 to 1 for this segment\n r = 200;\n g = Math.round((1 - segmentPercent) * 200);\n }\n\n return 'rgb(' + r + ', ' + g + ', ' + b + ')';\n }\n\n // Function to update slider track color\n function updateSliderColor(value) {\n var color = getSliderColor(value, 0, preferences.maxLatency);\n var valuePercent = (value / preferences.maxLatency) * 100;\n var yellowPercent = 50; // Yellow at 250ms (50% of 500ms)\n var gradient;\n\n if (value <= preferences.maxLatency / 2) {\n // Value is in green->yellow range: show green -> yellow\n var yellowColor = getSliderColor(preferences.maxLatency / 2, 0, preferences.maxLatency);\n gradient = `linear-gradient(to right, #00c800 0%, ${yellowColor} ${valuePercent}%, #333 ${valuePercent}%, #333 100%)`;\n } else {\n // Value is in yellow->red range: show green -> yellow -> current color\n var yellowColor = getSliderColor(preferences.maxLatency / 2, 0, preferences.maxLatency);\n gradient = `linear-gradient(to right, #00c800 0%, ${yellowColor} ${yellowPercent}%, ${color} ${valuePercent}%, #333 ${valuePercent}%, #333 100%)`;\n }\n\n var styleId = 'latency-slider-style';\n var existingStyle = document.getElementById(styleId);\n if (existingStyle) {\n existingStyle.remove();\n }\n var style = document.createElement('style');\n style.id = styleId;\n style.textContent = `\n #latency-slider::-webkit-slider-runnable-track {\n background: ${gradient};\n height: 6px;\n border-radius: 3px;\n border: none;\n }\n #latency-slider::-moz-range-track {\n background: ${gradient};\n height: 6px;\n border-radius: 3px;\n border: none;\n }\n `;\n document.head.appendChild(style);\n }\n\n // Initialize slider color\n updateSliderColor(parseInt(latencySlider.value));\n\n // Add custom styling via CSS (inline style limitations)\n var style = document.createElement('style');\n style.textContent = `\n #latency-slider {\n background: transparent !important;\n background-color: transparent !important;\n }\n #latency-slider::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background: #fff;\n background-color: #fff;\n cursor: pointer;\n border: 2px solid #888;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n transition: transform 0.1s ease, box-shadow 0.1s ease;\n margin-top: -5px;\n }\n #latency-slider::-webkit-slider-thumb:hover {\n transform: scale(1.1);\n box-shadow: 0 3px 6px rgba(0, 0, 0, 0.3);\n }\n #latency-slider::-moz-range-thumb {\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background: #fff;\n cursor: pointer;\n border: 2px solid #888;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n transition: transform 0.1s ease, box-shadow 0.1s ease;\n }\n #latency-slider::-moz-range-thumb:hover {\n transform: scale(1.1);\n box-shadow: 0 3px 6px rgba(0, 0, 0, 0.3);\n }\n `;\n document.head.appendChild(style);\n\n // Function to update container border color\n function updateContainerBackgroundColor() {\n var container = document.getElementById('debug-logo-container');\n if (container) {\n // Update to normal state (hover handlers will update on hover)\n container.style.borderColor = getBorderColor(preferences.latencySimulation.delay, 0.7);\n }\n }\n\n // Update latency value display\n latencySlider.addEventListener('input', function() {\n var value = parseInt(latencySlider.value);\n latencyValueSpan.textContent = value + 'ms';\n preferences.latencySimulation.delay = value;\n preferences.latencySimulation.enabled = value > 0;\n updateSliderColor(value);\n updateContainerBackgroundColor();\n savePreferences();\n });\n\n latencyContainer.appendChild(latencyLabel);\n latencyContainer.appendChild(latencySlider);\n menu.appendChild(latencyContainer);\n\n // Separator\n var separator = document.createElement('div');\n separator.style.height = '1px';\n separator.style.backgroundColor = 'rgba(255, 255, 255, 0.15)';\n separator.style.margin = '4px 0';\n menu.appendChild(separator);\n\n // Settings option\n var settingsOption = document.createElement('div');\n settingsOption.style.padding = '8px 12px';\n settingsOption.style.cursor = 'pointer';\n settingsOption.style.transition = 'background-color 0.2s';\n settingsOption.style.display = 'flex';\n settingsOption.style.alignItems = 'center';\n settingsOption.style.gap = '8px';\n\n var settingsIconWrapper = document.createElement('span');\n settingsIconWrapper.style.display = 'inline-flex';\n settingsIconWrapper.style.alignItems = 'center';\n settingsIconWrapper.style.width = '16px';\n settingsIconWrapper.style.height = '16px';\n settingsIconWrapper.innerHTML = settingsIcon.replace('height=\"200px\" width=\"200px\"', 'height=\"16\" width=\"16\"');\n\n var settingsText = document.createElement('span');\n settingsText.textContent = 'Preferences';\n\n settingsOption.appendChild(settingsIconWrapper);\n settingsOption.appendChild(settingsText);\n\n settingsOption.addEventListener('mouseenter', function() {\n settingsOption.style.backgroundColor = 'rgba(255, 255, 255, 0.1)';\n });\n settingsOption.addEventListener('mouseleave', function() {\n settingsOption.style.backgroundColor = 'transparent';\n });\n settingsOption.addEventListener('click', function(e) {\n e.stopPropagation();\n menuVisible = false;\n menu.style.display = 'none';\n if (hostUpdateInterval) {\n clearInterval(hostUpdateInterval);\n hostUpdateInterval = null;\n }\n openSettingsModal();\n });\n menu.appendChild(settingsOption);\n\n document.body.appendChild(menu);\n\n // Toggle menu on logo click\n var menuVisible = false;\n var hostUpdateInterval = null;\n logoContainer.addEventListener('click', function(e) {\n e.stopPropagation();\n menuVisible = !menuVisible;\n menu.style.display = menuVisible ? 'block' : 'none';\n\n if (menuVisible) {\n updateHostDisplay();\n // Update host every second while menu is visible\n hostUpdateInterval = setInterval(updateHostDisplay, 1000);\n } else {\n if (hostUpdateInterval) {\n clearInterval(hostUpdateInterval);\n hostUpdateInterval = null;\n }\n }\n });\n\n // Close menu when clicking outside\n document.addEventListener('click', function(e) {\n if (menuVisible && !menu.contains(e.target as Node) && !logoContainer.contains(e.target as Node)) {\n menuVisible = false;\n menu.style.display = 'none';\n if (hostUpdateInterval) {\n clearInterval(hostUpdateInterval);\n hostUpdateInterval = null;\n }\n }\n });\n}\n\n// Create and open Settings modal\nfunction openSettingsModal() {\n // Remove existing modal if present\n var existingModal = document.getElementById('debug-settings-modal');\n if (existingModal) {\n existingModal.remove();\n }\n\n // Create overlay using shared utility\n var overlay = createModalOverlay();\n overlay.id = 'debug-settings-overlay';\n\n // Create modal (non-fixed positioning for overlay)\n var modal = document.createElement('div');\n modal.id = 'debug-settings-modal';\n modal.style.position = 'relative'; // relative position for centered overlay content\n modal.style.backgroundColor = 'rgba(30, 30, 30, 0.98)';\n modal.style.borderRadius = '8px';\n modal.style.width = '90%';\n modal.style.maxWidth = '500px';\n modal.style.maxHeight = '90vh';\n modal.style.overflowY = 'auto';\n modal.style.boxShadow = '0 8px 32px rgba(0, 0, 0, 0.5)';\n modal.style.color = '#fff';\n modal.style.fontFamily = 'system-ui, -apple-system, sans-serif';\n\n // Modal header\n var header = document.createElement('div');\n header.style.display = 'flex';\n header.style.justifyContent = 'space-between';\n header.style.alignItems = 'center';\n header.style.padding = '20px 24px';\n header.style.borderBottom = '1px solid rgba(255, 255, 255, 0.1)';\n\n var title = document.createElement('h2');\n title.textContent = 'Preferences';\n title.style.margin = '0';\n title.style.fontSize = '18px';\n title.style.fontWeight = '600';\n\n var closeButton = document.createElement('button');\n closeButton.innerHTML = '×';\n closeButton.style.background = 'none';\n closeButton.style.border = 'none';\n closeButton.style.color = '#fff';\n closeButton.style.fontSize = '24px';\n closeButton.style.cursor = 'pointer';\n closeButton.style.padding = '0';\n closeButton.style.width = '32px';\n closeButton.style.height = '32px';\n closeButton.style.display = 'flex';\n closeButton.style.alignItems = 'center';\n closeButton.style.justifyContent = 'center';\n closeButton.style.borderRadius = '4px';\n closeButton.style.transition = 'background-color 0.2s';\n closeButton.addEventListener('mouseenter', function() {\n closeButton.style.backgroundColor = 'rgba(255, 255, 255, 0.1)';\n });\n closeButton.addEventListener('mouseleave', function() {\n closeButton.style.backgroundColor = 'transparent';\n });\n closeButton.addEventListener('click', function() {\n overlay.remove();\n });\n\n header.appendChild(title);\n header.appendChild(closeButton);\n modal.appendChild(header);\n\n // Position option\n var positionContainer = document.createElement('div');\n positionContainer.style.padding = '20px 24px';\n positionContainer.style.borderBottom = '1px solid rgba(255, 255, 255, 0.1)';\n positionContainer.style.display = 'flex';\n positionContainer.style.justifyContent = 'space-between';\n positionContainer.style.alignItems = 'center';\n positionContainer.style.gap = '16px';\n\n var positionTextContainer = document.createElement('div');\n positionTextContainer.style.flex = '1';\n\n var positionTitle = document.createElement('div');\n positionTitle.style.fontSize = '14px';\n positionTitle.style.fontWeight = '600';\n positionTitle.style.marginBottom = '4px';\n positionTitle.textContent = 'Position';\n\n var positionDescription = document.createElement('div');\n positionDescription.style.fontSize = '12px';\n positionDescription.style.color = 'rgba(255, 255, 255, 0.7)';\n positionDescription.textContent = 'Adjust the placement of the panels.';\n\n positionTextContainer.appendChild(positionTitle);\n positionTextContainer.appendChild(positionDescription);\n\n var positionSelect = document.createElement('select');\n positionSelect.style.minWidth = '150px';\n positionSelect.style.padding = '8px 12px';\n positionSelect.style.backgroundColor = 'rgba(255, 255, 255, 0.1)';\n positionSelect.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n positionSelect.style.borderRadius = '4px';\n positionSelect.style.color = '#fff';\n positionSelect.style.fontSize = '14px';\n positionSelect.style.cursor = 'pointer';\n positionSelect.style.outline = 'none';\n\n var positions = [\n { value: 'bottom-left', label: 'Bottom Left' },\n { value: 'bottom-right', label: 'Bottom Right' },\n { value: 'top-left', label: 'Top Left' },\n { value: 'top-right', label: 'Top Right' }\n ];\n\n positions.forEach(function(pos) {\n var option = document.createElement('option');\n option.value = pos.value;\n option.textContent = pos.label;\n if (preferences.panelPosition.position === pos.value) {\n option.selected = true;\n }\n positionSelect.appendChild(option);\n });\n\n positionSelect.addEventListener('change', function() {\n preferences.panelPosition.position = positionSelect.value;\n applyPanelPosition();\n savePreferences();\n });\n\n positionContainer.appendChild(positionTextContainer);\n positionContainer.appendChild(positionSelect);\n modal.appendChild(positionContainer);\n\n // Disable instruction\n var disableContainer = document.createElement('div');\n disableContainer.style.padding = '20px 24px';\n disableContainer.style.borderBottom = '1px solid rgba(255, 255, 255, 0.1)';\n\n var disableTitle = document.createElement('div');\n disableTitle.style.fontSize = '14px';\n disableTitle.style.fontWeight = '600';\n disableTitle.style.marginBottom = '4px';\n disableTitle.textContent = 'Disable Dev Tools';\n\n var disableDescription = document.createElement('div');\n disableDescription.style.fontSize = '12px';\n disableDescription.style.color = 'rgba(255, 255, 255, 0.7)';\n disableDescription.style.marginBottom = '8px';\n disableDescription.innerHTML = 'To disable this UI completely, remove the <code style=\"background: rgba(255, 255, 255, 0.1); padding: 2px 6px; border-radius: 3px; font-family: monospace; font-size: 11px;\">debug.js</code> script from your HTML file.';\n\n disableContainer.appendChild(disableTitle);\n disableContainer.appendChild(disableDescription);\n modal.appendChild(disableContainer);\n\n // Hide panels button\n var hideContainer = document.createElement('div');\n hideContainer.style.padding = '20px 24px';\n hideContainer.style.display = 'flex';\n hideContainer.style.justifyContent = 'space-between';\n hideContainer.style.alignItems = 'center';\n hideContainer.style.gap = '16px';\n\n var hideTextContainer = document.createElement('div');\n hideTextContainer.style.flex = '1';\n\n var hideTitle = document.createElement('div');\n hideTitle.style.fontSize = '14px';\n hideTitle.style.fontWeight = '600';\n hideTitle.style.marginBottom = '4px';\n hideTitle.textContent = 'Hide Dev Tools for this session';\n\n var hideDescription = document.createElement('div');\n hideDescription.style.fontSize = '12px';\n hideDescription.style.color = 'rgba(255, 255, 255, 0.7)';\n hideDescription.textContent = 'Hide Dev Tools until you refresh the page.';\n\n hideTextContainer.appendChild(hideTitle);\n hideTextContainer.appendChild(hideDescription);\n\n var hideButton = document.createElement('button');\n hideButton.textContent = 'Hide';\n hideButton.style.padding = '8px 16px';\n hideButton.style.backgroundColor = 'rgba(255, 255, 255, 0.1)';\n hideButton.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n hideButton.style.borderRadius = '4px';\n hideButton.style.color = '#fff';\n hideButton.style.fontSize = '14px';\n hideButton.style.cursor = 'pointer';\n hideButton.style.transition = 'background-color 0.2s';\n hideButton.style.display = 'flex';\n hideButton.style.alignItems = 'center';\n hideButton.style.gap = '8px';\n hideButton.style.flexShrink = '0';\n\n hideButton.insertAdjacentHTML('afterbegin', eyeSlashIcon);\n\n hideButton.addEventListener('mouseenter', function() {\n hideButton.style.backgroundColor = 'rgba(255, 255, 255, 0.15)';\n });\n hideButton.addEventListener('mouseleave', function() {\n hideButton.style.backgroundColor = 'rgba(255, 255, 255, 0.1)';\n });\n hideButton.addEventListener('click', function() {\n hidePanelsForSession();\n overlay.remove();\n });\n\n hideContainer.appendChild(hideTextContainer);\n hideContainer.appendChild(hideButton);\n modal.appendChild(hideContainer);\n\n overlay.appendChild(modal);\n document.body.appendChild(overlay);\n\n // Mark as selected modal when opened\n selectModal(overlay);\n\n // Update close button to cleanup from modal stack\n var originalOverlayRemove = overlay.remove.bind(overlay);\n overlay.remove = function() {\n removeModalFromStack(overlay);\n originalOverlayRemove();\n };\n\n // Mark modal as selected when clicked\n modal.addEventListener('mousedown', function(e) {\n selectModal(overlay);\n });\n\n // Close on overlay click\n overlay.addEventListener('click', function(e) {\n if (e.target === overlay) {\n overlay.remove();\n }\n });\n}\n\n// Create and open Send Messages modal\nfunction openSendMessagesModal(uniquePanelId) {\n var debugInfo = roomDebugInfo.get(uniquePanelId);\n if (!debugInfo || !debugInfo.room) {\n console.warn('Room not found for panel:', uniquePanelId);\n return;\n }\n\n var room = debugInfo.room;\n var messageTypes = debugInfo.messageTypes;\n\n if (!messageTypes) {\n console.warn('No message types available for this room');\n return;\n }\n\n // Remove existing modal if present\n var existingModal = document.getElementById('debug-send-messages-modal');\n if (existingModal) {\n existingModal.remove();\n }\n\n // Status dot reference\n var statusDotRef: any = {};\n var updateConnectionStatus: any = null;\n var onLeaveCallbackRef: any = { current: null };\n\n // Function to update status dot color\n const updateSendMsgStatusDot = () => {\n if (statusDotRef.element) {\n statusDotRef.element.style.backgroundColor = room.connection?.isOpen ? '#22c55e' : '#ef4444';\n }\n };\n\n // Initial callback\n onLeaveCallbackRef.current = updateSendMsgStatusDot;\n room.onLeave(updateSendMsgStatusDot);\n\n // Create modal using shared utility\n const modal = createModal({\n id: 'debug-send-messages-modal',\n width: '400px',\n minWidth: '300px',\n maxWidth: '90vw',\n maxHeight: '90vh',\n room: room,\n trackOnLeave: true,\n onLeaveCallback: onLeaveCallbackRef\n });\n\n // Create header using shared utility\n const headerComponents = createModalHeader({\n title: debugInfo.roomName + ' - Send Message',\n modal: modal,\n statusDot: true,\n statusColor: room.connection?.isOpen ? '#22c55e' : '#ef4444',\n statusDotRef: statusDotRef\n });\n\n modal.appendChild(headerComponents.header);\n\n // Make modal draggable\n makeDraggable(modal, headerComponents.header);\n\n // Update status dot initially\n updateSendMsgStatusDot();\n\n // Form content container (scrollable)\n var formContainer = document.createElement('div');\n formContainer.style.padding = '8px';\n formContainer.style.overflowY = 'auto';\n formContainer.style.backgroundColor = '#1e1e1e';\n\n // Message Type Selector\n var typeLabel = document.createElement('label');\n typeLabel.textContent = 'Message Type';\n typeLabel.style.display = 'block';\n typeLabel.style.fontSize = '11px';\n typeLabel.style.fontWeight = '600';\n typeLabel.style.marginBottom = '4px';\n typeLabel.style.color = 'rgba(255, 255, 255, 0.9)';\n\n var typeSelect = document.createElement('select');\n typeSelect.style.width = '100%';\n typeSelect.style.padding = '6px 8px';\n typeSelect.style.backgroundColor = 'rgba(255, 255, 255, 0.1)';\n typeSelect.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n typeSelect.style.borderRadius = '4px';\n typeSelect.style.color = '#fff';\n typeSelect.style.fontSize = '12px';\n typeSelect.style.cursor = 'pointer';\n typeSelect.style.outline = 'none';\n typeSelect.style.marginBottom = '12px';\n\n // Add default option\n var defaultOption = document.createElement('option');\n defaultOption.value = '';\n defaultOption.textContent = 'Select a message type';\n defaultOption.disabled = true;\n defaultOption.selected = true;\n typeSelect.appendChild(defaultOption);\n\n // Add message types\n Object.keys(messageTypes).forEach(function(msgType) {\n var option = document.createElement('option');\n option.value = msgType;\n option.textContent = msgType;\n typeSelect.appendChild(option);\n });\n\n // Add wildcard option for custom message types\n var wildcardOption = document.createElement('option');\n wildcardOption.value = '*';\n wildcardOption.textContent = '* (Custom)';\n typeSelect.appendChild(wildcardOption);\n\n formContainer.appendChild(typeLabel);\n formContainer.appendChild(typeSelect);\n\n // Custom Message Type Input Container (shown when \"*\" is selected)\n var customTypeContainer = document.createElement('div');\n customTypeContainer.style.display = 'none';\n customTypeContainer.style.marginBottom = '12px';\n\n var customTypeLabel = document.createElement('label');\n customTypeLabel.textContent = 'Message Type';\n customTypeLabel.style.display = 'block';\n customTypeLabel.style.fontSize = '11px';\n customTypeLabel.style.fontWeight = '600';\n customTypeLabel.style.marginBottom = '4px';\n customTypeLabel.style.color = 'rgba(255, 255, 255, 0.9)';\n\n var customTypeInput = document.createElement('input');\n customTypeInput.type = 'text';\n customTypeInput.placeholder = 'Enter message type name';\n customTypeInput.style.width = '100%';\n customTypeInput.style.padding = '6px 8px';\n customTypeInput.style.backgroundColor = 'rgba(255, 255, 255, 0.05)';\n customTypeInput.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n customTypeInput.style.borderRadius = '4px';\n customTypeInput.style.color = '#fff';\n customTypeInput.style.fontSize = '11px';\n customTypeInput.style.fontFamily = 'monospace';\n customTypeInput.style.outline = 'none';\n\n customTypeContainer.appendChild(customTypeLabel);\n customTypeContainer.appendChild(customTypeInput);\n formContainer.appendChild(customTypeContainer);\n\n // Message Payload Input Container\n var payloadContainer = document.createElement('div');\n payloadContainer.style.display = 'none';\n payloadContainer.style.marginBottom = '12px';\n\n var payloadLabel = document.createElement('label');\n payloadLabel.textContent = 'Payload';\n payloadLabel.style.display = 'block';\n payloadLabel.style.fontSize = '11px';\n payloadLabel.style.fontWeight = '600';\n payloadLabel.style.marginBottom = '4px';\n payloadLabel.style.color = 'rgba(255, 255, 255, 0.9)';\n\n var payloadFieldsContainer = document.createElement('div');\n payloadFieldsContainer.style.backgroundColor = 'rgba(255, 255, 255, 0.05)';\n payloadFieldsContainer.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n payloadFieldsContainer.style.borderRadius = '4px';\n payloadFieldsContainer.style.padding = '8px';\n payloadFieldsContainer.style.fontFamily = 'monospace';\n payloadFieldsContainer.style.fontSize = '11px';\n\n var payloadTextarea = document.createElement('textarea');\n payloadTextarea.style.width = '100%';\n payloadTextarea.style.minHeight = '80px';\n payloadTextarea.style.padding = '6px 8px';\n payloadTextarea.style.backgroundColor = 'rgba(255, 255, 255, 0.05)';\n payloadTextarea.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n payloadTextarea.style.borderRadius = '4px';\n payloadTextarea.style.color = '#fff';\n payloadTextarea.style.fontSize = '11px';\n payloadTextarea.style.fontFamily = 'monospace';\n payloadTextarea.style.outline = 'none';\n payloadTextarea.style.resize = 'vertical';\n payloadTextarea.placeholder = '{}';\n payloadTextarea.value = '{}';\n\n payloadContainer.appendChild(payloadLabel);\n payloadContainer.appendChild(payloadFieldsContainer);\n payloadContainer.appendChild(payloadTextarea);\n formContainer.appendChild(payloadContainer);\n\n // Error message container\n var errorContainer = document.createElement('div');\n errorContainer.style.display = 'none';\n errorContainer.style.padding = '6px 8px';\n errorContainer.style.backgroundColor = 'rgba(220, 38, 38, 0.2)';\n errorContainer.style.border = '1px solid rgba(220, 38, 38, 0.4)';\n errorContainer.style.borderRadius = '4px';\n errorContainer.style.marginBottom = '8px';\n errorContainer.style.fontSize = '11px';\n errorContainer.style.color = '#fca5a5';\n\n formContainer.appendChild(errorContainer);\n\n // Variables to store current message type and its schema\n var currentFormInputs: any = {};\n var currentMessageType = '';\n\n // Update payload fields based on selected message type\n typeSelect.addEventListener('change', function() {\n var selectedType = typeSelect.value;\n currentMessageType = selectedType;\n\n if (selectedType) {\n // Show/hide custom type input based on selection\n if (selectedType === '*') {\n customTypeContainer.style.display = 'block';\n customTypeInput.focus();\n } else {\n customTypeContainer.style.display = 'none';\n }\n\n payloadContainer.style.display = 'block';\n errorContainer.style.display = 'none';\n currentFormInputs = {};\n\n // Clear previous fields\n payloadFieldsContainer.innerHTML = '';\n\n var schema = messageTypes[selectedType];\n\n // If schema exists and has properties, create form inputs\n if (schema && schema.properties && Object.keys(schema.properties).length > 0) {\n payloadTextarea.style.display = 'none';\n payloadFieldsContainer.style.display = 'block';\n\n // Generate form fields based on schema\n Object.keys(schema.properties).forEach(function(fieldName) {\n var fieldSchema = schema.properties[fieldName];\n var fieldContainer = document.createElement('div');\n fieldContainer.style.marginBottom = '8px';\n\n var fieldLabel = document.createElement('label');\n fieldLabel.textContent = fieldName;\n if (schema.required && schema.required.includes(fieldName)) {\n fieldLabel.textContent += ' *';\n }\n fieldLabel.style.display = 'block';\n fieldLabel.style.fontSize = '10px';\n fieldLabel.style.marginBottom = '3px';\n fieldLabel.style.color = 'rgba(255, 255, 255, 0.8)';\n\n var fieldInput;\n\n if (fieldSchema.type === 'boolean') {\n fieldInput = document.createElement('input');\n fieldInput.type = 'checkbox';\n fieldInput.style.width = '16px';\n fieldInput.style.height = '16px';\n fieldInput.style.cursor = 'pointer';\n } else if (fieldSchema.type === 'number' || fieldSchema.type === 'integer') {\n fieldInput = document.createElement('input');\n fieldInput.type = 'number';\n if (fieldSchema.type === 'integer') {\n fieldInput.step = '1';\n }\n fieldInput.style.width = '100%';\n fieldInput.style.padding = '4px 6px';\n fieldInput.style.backgroundColor = 'rgba(255, 255, 255, 0.05)';\n fieldInput.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n fieldInput.style.borderRadius = '3px';\n fieldInput.style.color = '#fff';\n fieldInput.style.fontSize = '11px';\n fieldInput.style.outline = 'none';\n } else {\n fieldInput = document.createElement('input');\n fieldInput.type = 'text';\n fieldInput.style.width = '100%';\n fieldInput.style.padding = '4px 6px';\n fieldInput.style.backgroundColor = 'rgba(255, 255, 255, 0.05)';\n fieldInput.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n fieldInput.style.borderRadius = '3px';\n fieldInput.style.color = '#fff';\n fieldInput.style.fontSize = '11px';\n fieldInput.style.outline = 'none';\n }\n\n if (fieldSchema.description) {\n var fieldDesc = document.createElement('div');\n fieldDesc.textContent = fieldSchema.description;\n fieldDesc.style.fontSize = '9px';\n fieldDesc.style.color = 'rgba(255, 255, 255, 0.5)';\n fieldDesc.style.marginTop = '2px';\n fieldContainer.appendChild(fieldLabel);\n fieldContainer.appendChild(fieldInput);\n fieldContainer.appendChild(fieldDesc);\n } else {\n fieldContainer.appendChild(fieldLabel);\n fieldContainer.appendChild(fieldInput);\n }\n\n payloadFieldsContainer.appendChild(fieldContainer);\n currentFormInputs[fieldName] = { input: fieldInput, schema: fieldSchema };\n });\n } else {\n // Use JSON textarea for free-form input (no schema or empty schema)\n payloadTextarea.style.display = 'block';\n payloadFieldsContainer.style.display = 'none';\n payloadTextarea.value = '{}';\n\n // Update placeholder based on whether schema exists\n if (!schema) {\n payloadTextarea.placeholder = 'Enter JSON payload (no message format defined)\\n\\nExample:\\n{\\n \"key\": \"value\"\\n}';\n } else {\n payloadTextarea.placeholder = '{}';\n }\n }\n } else {\n payloadContainer.style.display = 'none';\n }\n });\n\n // Send Button\n var sendButton = document.createElement('button');\n sendButton.textContent = 'Send';\n sendButton.style.width = '100%';\n sendButton.style.padding = '8px 12px';\n sendButton.style.backgroundColor = '#8b5cf6';\n sendButton.style.border = 'none';\n sendButton.style.borderRadius = '4px';\n sendButton.style.color = '#fff';\n sendButton.style.fontSize = '12px';\n sendButton.style.fontWeight = '600';\n sendButton.style.cursor = 'pointer';\n sendButton.style.transition = 'background-color 0.2s';\n\n var isButtonInSuccessState = false;\n var hoverColor = '#7c3aed';\n var normalColor = '#8b5cf6';\n\n sendButton.addEventListener('mouseenter', function() {\n if (!isButtonInSuccessState && !sendButton.disabled) {\n sendButton.style.backgroundColor = hoverColor;\n }\n });\n sendButton.addEventListener('mouseleave', function() {\n if (!isButtonInSuccessState && !sendButton.disabled) {\n sendButton.style.backgroundColor = normalColor;\n }\n });\n\n // Update the connection status function to also manage button state\n updateConnectionStatus = function() {\n const isConnected = room.connection?.isOpen;\n if (statusDotRef.element) {\n statusDotRef.element.style.backgroundColor = isConnected ? '#22c55e' : '#ef4444';\n }\n\n // Update button disabled state\n sendButton.disabled = !isConnected;\n if (!isConnected) {\n sendButton.style.backgroundColor = '#6b7280';\n sendButton.style.cursor = 'not-allowed';\n sendButton.style.opacity = '0.5';\n } else if (!isButtonInSuccessState) {\n sendButton.style.backgroundColor = normalColor;\n sendButton.style.cursor = 'pointer';\n sendButton.style.opacity = '1';\n }\n };\n\n // Swap out the onLeave callback to use the combined update function\n room.onLeave.remove(onLeaveCallbackRef.current);\n room.onLeave(updateConnectionStatus);\n onLeaveCallbackRef.current = updateConnectionStatus;\n\n updateConnectionStatus();\n\n sendButton.addEventListener('click', function() {\n errorContainer.style.display = 'none';\n\n // Check if room is connected\n if (!room.connection?.isOpen) {\n errorContainer.textContent = 'Cannot send message: Room is not connected';\n errorContainer.style.display = 'block';\n return;\n }\n\n if (!currentMessageType) {\n errorContainer.textContent = 'Please select a message type';\n errorContainer.style.display = 'block';\n return;\n }\n\n // Determine actual message type to send\n var actualMessageType = currentMessageType;\n if (currentMessageType === '*') {\n actualMessageType = customTypeInput.value.trim();\n if (!actualMessageType) {\n errorContainer.textContent = 'Please enter a message type name';\n errorContainer.style.display = 'block';\n return;\n }\n }\n\n try {\n var payload;\n\n // Build payload from form inputs or textarea\n if (Object.keys(currentFormInputs).length > 0) {\n payload = {};\n var schema = messageTypes[currentMessageType];\n\n for (var fieldName in currentFormInputs) {\n var fieldData = currentFormInputs[fieldName];\n var input = fieldData.input;\n var fieldSchema = fieldData.schema;\n var value;\n\n if (fieldSchema.type === 'boolean') {\n value = input.checked;\n } else if (fieldSchema.type === 'number' || fieldSchema.type === 'integer') {\n value = input.value ? parseFloat(input.value) : undefined;\n } else {\n value = input.value || undefined;\n }\n\n // Only include required fields or fields with values\n if (value !== undefined || (schema.required && schema.required.includes(fieldName))) {\n payload[fieldName] = value;\n }\n }\n } else {\n payload = JSON.parse(payloadTextarea.value);\n }\n\n // Send the message\n room.send(actualMessageType, payload);\n\n // Change button to success state\n isButtonInSuccessState = true;\n sendButton.textContent = 'Message sent!';\n sendButton.style.backgroundColor = '#22c55e';\n sendButton.style.cursor = 'default';\n\n // Restore button after 1.5 seconds\n setTimeout(function() {\n isButtonInSuccessState = false;\n sendButton.textContent = 'Send';\n sendButton.style.backgroundColor = normalColor;\n sendButton.style.cursor = 'pointer';\n }, 800);\n\n } catch (e) {\n errorContainer.textContent = 'Error: ' + e.message;\n errorContainer.style.display = 'block';\n }\n });\n\n formContainer.appendChild(sendButton);\n\n modal.appendChild(formContainer);\n document.body.appendChild(modal);\n}\n\n// Create and open State Inspector modal\nfunction openStateInspectorModal(uniquePanelId) {\n var debugInfo = roomDebugInfo.get(uniquePanelId);\n if (!debugInfo || !debugInfo.room) {\n console.warn('Room not found for panel:', uniquePanelId);\n return;\n }\n\n var room = debugInfo.room;\n\n // Remove existing modal if present\n var existingModal = document.getElementById('debug-state-inspector-modal');\n if (existingModal) {\n existingModal.remove();\n }\n\n // Load saved position and size from localStorage\n var savedStateInspectorPrefs = null;\n try {\n var saved = localStorage.getItem('colyseus-state-inspector-preferences');\n if (saved) {\n savedStateInspectorPrefs = JSON.parse(saved);\n }\n } catch (e) {\n // Ignore localStorage errors\n }\n\n // Default values\n var defaultWidth = 600;\n var defaultHeight = 500;\n var defaultLeft = '50%';\n var defaultTop = '50%';\n var defaultTransform = 'translate(-50%, -50%)';\n\n // Use saved preferences if available\n if (savedStateInspectorPrefs) {\n if (savedStateInspectorPrefs.width && savedStateInspectorPrefs.width >= 300) {\n defaultWidth = savedStateInspectorPrefs.width;\n }\n if (savedStateInspectorPrefs.height && savedStateInspectorPrefs.height >= 200) {\n defaultHeight = savedStateInspectorPrefs.height;\n }\n if (savedStateInspectorPrefs.left !== undefined && savedStateInspectorPrefs.top !== undefined) {\n // Constrain position to window boundaries\n var maxLeft = window.innerWidth - defaultWidth;\n var maxTop = window.innerHeight - defaultHeight;\n\n var constrainedLeft = Math.max(0, Math.min(savedStateInspectorPrefs.left, maxLeft));\n var constrainedTop = Math.max(0, Math.min(savedStateInspectorPrefs.top, maxTop));\n\n defaultLeft = constrainedLeft + 'px';\n defaultTop = constrainedTop + 'px';\n defaultTransform = 'none';\n }\n }\n\n // Function to save state inspector preferences\n function saveStateInspectorPreferences() {\n try {\n var rect = modal.getBoundingClientRect();\n var prefs = {\n width: rect.width,\n height: rect.height,\n left: rect.left,\n top: rect.top\n };\n localStorage.setItem('colyseus-state-inspector-preferences', JSON.stringify(prefs));\n } catch (e) {\n // Ignore localStorage errors\n }\n }\n\n // Status dot reference\n var statusDotRef: any = {};\n\n // Function to update status dot color\n const updateStateViewerStatusDot = () => {\n if (statusDotRef.element) {\n statusDotRef.element.style.backgroundColor = room.connection?.isOpen ? '#22c55e' : '#ef4444';\n }\n };\n\n // Register the onLeave callback\n room.onLeave(updateStateViewerStatusDot);\n\n // Create modal using shared utility with automatic onLeave tracking\n const modal = createModal({\n id: 'debug-state-inspector-modal',\n width: defaultWidth + 'px',\n height: defaultHeight + 'px',\n minWidth: '300px',\n minHeight: '200px',\n maxWidth: '90vw',\n maxHeight: '90vh',\n top: defaultTop,\n left: defaultLeft,\n transform: defaultTransform,\n room: room,\n trackOnLeave: true,\n onLeaveCallback: updateStateViewerStatusDot\n });\n\n // Create header using shared utility\n const headerComponents = createModalHeader({\n title: `${debugInfo.roomName} - State Viewer`,\n modal: modal,\n statusDot: true,\n statusColor: room.connection?.isOpen ? '#22c55e' : '#ef4444',\n statusDotRef: statusDotRef\n });\n const header = headerComponents.header;\n const closeButton = headerComponents.closeButton;\n\n modal.appendChild(header);\n\n // Update status dot initially\n updateStateViewerStatusDot();\n\n // State content container\n var contentContainer = document.createElement('div');\n contentContainer.style.padding = '8px';\n contentContainer.style.overflowY = 'auto';\n contentContainer.style.flex = '1';\n contentContainer.style.minHeight = '0';\n contentContainer.style.backgroundColor = '#1e1e1e';\n contentContainer.id = 'debug-state-content';\n\n // Single event listener for all expand buttons (event delegation)\n contentContainer.addEventListener('click', function(e: MouseEvent) {\n var expandButton = (e.target as HTMLElement).closest('[data-expand-button]');\n if (expandButton) {\n e.stopPropagation();\n toggleExpand(expandButton);\n }\n });\n\n // // Counter for unique IDs\n // var stateNodeCounter = 0;\n\n // Track expanded paths across re-renders\n var expandedPaths = new Set();\n\n // Helper function to escape HTML\n function escapeHtml(text) {\n var div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n }\n\n // Helper function to check if a value is expandable (object, array, or collection)\n function isExpandable(value) {\n if (value === null || value === undefined) {\n return false;\n }\n var valueType = typeof value;\n var isObject = valueType === 'object' && !(value instanceof Array);\n var hasForEach = valueType === 'object' && typeof value.forEach === 'function';\n var isArray = value instanceof Array;\n return isObject || isArray || hasForEach;\n }\n\n // Helper function to get label color based on field name\n function getLabelColor(fieldName) {\n return typeof fieldName === 'string' && fieldName.startsWith('\"') ? '#CE9178' : '#DCDCAA';\n }\n\n // Helper function to get display state for expandable nodes\n function getDisplayState(depth, isPathExpanded) {\n var isRoot = depth === 0;\n return {\n isRoot: isRoot,\n initialDisplay: isRoot ? 'block' : (isPathExpanded ? 'block' : 'none'),\n initialIcon: (isRoot || isPathExpanded) ? '▼' : '▶',\n rootClass: isRoot ? ' data-root-node=\"true\"' : ''\n };\n }\n\n // Helper function to get refId display string\n function getRefIdDisplay(refId) {\n return refId !== null && refId !== undefined ? '<span style=\"color: #909090; font-size: 11px; margin-left: 4px;\">(ref: ' + refId + ')</span>' : '';\n }\n\n // Helper function to render expand button HTML\n function renderExpandButton(displayState, displayLabel, refIdDisplay, size) {\n var html = '<div data-expand-button' + displayState.rootClass + ' style=\"display: flex; align-items: center; cursor: ' + (displayState.isRoot ? 'default' : 'pointer') + '; user-select: none; margin: 0; padding: 1px 0;\" onmouseover=\"' + (displayState.isRoot ? '' : 'this.style.backgroundColor=\\'rgba(255,255,255,0.05)\\'') + '\" onmouseout=\"' + (displayState.isRoot ? '' : 'this.style.backgroundColor=\\'transparent\\'') + '\">';\n html += '<span data-expand-icon style=\"margin-right: 4px; color: #858585; font-size: 10px; width: 10px; display: inline-block; text-align: center; user-select: none;\">' + displayState.initialIcon + '</span>';\n if (displayLabel) {\n html += '<span style=\"color: ' + getLabelColor(displayLabel) + ';\">' + escapeHtml(String(displayLabel)) + '</span>';\n }\n if (size !== null && size !== undefined && size !== '?') {\n // ×\n html += ' <span style=\"color: #858585;\">(' + size + ') </span>';\n }\n html += refIdDisplay;\n html += '</div>';\n return html;\n }\n\n // Helper function to render a key-value pair\n function renderKeyValue(key, value, depth, currentPath, keyDisplay, isKeyString) {\n if (isExpandable(value)) {\n // For expandable values, renderState handles its own container with proper indentation\n // Pass the fieldName so it displays the key as the label\n if (keyDisplay !== null) {\n return renderState(value, depth, String(key), currentPath, keyDisplay);\n } else {\n return renderState(value, depth, String(key), currentPath);\n }\n } else {\n // For primitive values, wrap in a div with key-value formatting\n // Add padding-left to align with expandable items (icon width 10px + margin-right 4px = 14px)\n var indent = depth * 6;\n var html = '<div style=\"margin-left: ' + indent + 'px; padding-left: 14px;\">';\n if (keyDisplay !== null) {\n var keyColor = isKeyString ? '#CE9178' : '#DCDCAA';\n html += '<span style=\"color: ' + keyColor + ';\">' + (isKeyString ? '\"' + escapeHtml(String(keyDisplay)) + '\"' : escapeHtml(String(keyDisplay))) + '</span><span style=\"color: #858585;\">: </span>';\n } else {\n html += '<span style=\"color: #DCDCAA;\">' + escapeHtml(String(key)) + '</span><span style=\"color: #858585;\">: </span>';\n }\n html += renderState(value, depth + 1, String(key), currentPath);\n html += '</div>';\n return html;\n }\n }\n\n // Function to render state recursively\n function renderState(\n obj: any,\n depth: number = 0,\n parentKey: string = '',\n path: string = '',\n fieldName: string = null\n ) {\n var maxDepth = 10;\n if (depth > maxDepth) {\n return '<span style=\"color: #858585; font-style: italic;\">[Max depth reached]</span>';\n }\n\n if (obj === null) {\n return '<span style=\"color: #858585;\">null</span>';\n }\n\n if (obj === undefined) {\n return '<span style=\"color: #858585;\">undefined</span>';\n }\n\n var type = typeof obj;\n var indent = depth * 6;\n var refId = obj[\"~refId\"];\n var nodeId = 'state-node-' + refId;\n var currentPath = path ? path + '.' + (parentKey || '') : (parentKey || 'root');\n var isPathExpanded = expandedPaths.has(currentPath);\n var refIdDisplay = getRefIdDisplay(refId);\n\n if (type === 'string') {\n return '<span style=\"color: #CE9178;\">\"' + escapeHtml(String(obj)) + '\"</span>';\n }\n\n if (type === 'number') {\n return '<span style=\"color: #B5CEA8;\">' + obj + '</span>';\n }\n\n if (type === 'boolean') {\n return '<span style=\"color: #569CD6;\">' + obj + '</span>';\n }\n\n // Check if object has forEach method\n var hasForEach = typeof obj.forEach === 'function';\n var collectionSize = (hasForEach) && (obj.size || obj.length) || null;\n\n if (hasForEach) {\n var size = (collectionSize !== null ? collectionSize : '?');\n var contentId = nodeId + '-content';\n var displayState = getDisplayState(depth, isPathExpanded);\n var displayLabel = fieldName !== null ? fieldName : (displayState.isRoot ? 'State' : '');\n\n var html = '<div style=\"margin-left: ' + indent + 'px;\" data-path=\"' + escapeHtml(currentPath) + '\">';\n html += renderExpandButton(displayState, displayLabel, refIdDisplay, size);\n html += '<div id=\"' + contentId + '\" style=\"display: ' + displayState.initialDisplay + ';\">';\n\n // Handle forEach collections (Map, Set, etc.)\n var isSet = obj instanceof Set || (obj.constructor && obj.constructor.name === 'Set');\n try {\n obj.forEach(function (value, key) {\n if (isSet) {\n // For Sets, forEach passes (value, value, set), so we only use the first parameter\n html += renderState(value, depth + 1, String(key), currentPath);\n } else {\n // For Maps, format key and use renderKeyValue to handle expandable values and proper formatting\n var isKeyNumber = typeof key === 'number';\n var keyStr = isKeyNumber ? '[' + String(key) + ']' : String(key);\n html += renderKeyValue(key, value, depth + 1, currentPath, keyStr, typeof key === 'string');\n }\n });\n } catch (e) {\n var errorIndent = (depth + 1) * 6;\n html += '<div style=\"margin-left: ' + errorIndent + 'px; color: #e74856;\">Error iterating: ' + escapeHtml(e.message) + '</div>';\n }\n\n html += '</div>';\n html += '</div>';\n return html;\n }\n\n if (type === 'object') {\n var keys = Object.keys(obj);\n var contentId = nodeId + '-content';\n var displayState = getDisplayState(depth, isPathExpanded);\n var displayLabel = fieldName !== null ? fieldName : (displayState.isRoot ? 'state' : '');\n\n var html = '<div style=\"margin-left: ' + indent + 'px;\" data-path=\"' + escapeHtml(currentPath) + '\">';\n\n if (keys.length === 0) {\n if (displayLabel) {\n html += '<span style=\"color: ' + getLabelColor(displayLabel) + ';\">' + escapeHtml(String(displayLabel)) + '</span><span style=\"color: #858585;\"> {}</span>' + refIdDisplay;\n } else {\n html += '<span style=\"color: #858585;\">{}</span>' + refIdDisplay;\n }\n } else {\n html += renderExpandButton(displayState, displayLabel, refIdDisplay, null);\n html += '<div id=\"' + contentId + '\" style=\"display: ' + displayState.initialDisplay + ';\">';\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (key === \"~refId\") continue;// skip refId\n html += renderKeyValue(key, obj[key], depth + 1, currentPath, key, false);\n }\n\n html += '</div>';\n }\n\n html += '</div>';\n return html;\n }\n\n return '<span style=\"color: #858585;\">' + escapeHtml(String(obj)) + '</span>';\n }\n\n // Function to toggle expand/collapse\n function toggleExpand(expandButton) {\n // Don't allow collapsing root node\n var content = expandButton.nextElementSibling;\n var icon = expandButton.querySelector('[data-expand-icon]');\n if (content && content.style) {\n var isHidden = content.style.display === 'none';\n content.style.display = isHidden ? 'block' : 'none';\n if (icon) {\n icon.textContent = isHidden ? '▼' : '▶';\n }\n\n // Track expanded state by path\n var pathElement = expandButton.closest('[data-path]');\n if (pathElement) {\n var path = pathElement.getAttribute('data-path');\n if (isHidden) {\n expandedPaths.add(path);\n } else {\n expandedPaths.delete(path);\n }\n }\n }\n }\n\n // Function to update state display\n function updateStateDisplay() {\n try {\n // Save currently expanded paths before clearing\n var currentExpandedPaths = new Set();\n var existingExpandButtons = contentContainer.querySelectorAll('[data-expand-button]');\n for (var i = 0; i < existingExpandButtons.length; i++) {\n var button = existingExpandButtons[i];\n var pathElement = button.closest('[data-path]');\n if (pathElement) {\n var path = pathElement.getAttribute('data-path');\n var content = button.nextElementSibling as HTMLElement;\n if (content && content.style && content.style.display !== 'none') {\n currentExpandedPaths.add(path);\n }\n }\n }\n\n // Merge with previously tracked expanded paths\n // Keep paths that were expanded before, or are currently expanded\n var pathsToKeep = new Set();\n expandedPaths.forEach(function(path) {\n pathsToKeep.add(path);\n });\n currentExpandedPaths.forEach(function(path) {\n pathsToKeep.add(path);\n });\n expandedPaths = pathsToKeep;\n\n // stateNodeCounter = 0; // Reset counter for new render\n var state = room.state || {};\n contentContainer.innerHTML = '<div style=\"font-family: \\'Consolas\\', \\'Monaco\\', \\'Courier New\\', monospace; font-size: 12px; line-height: 1.5; color: #d4d4d4; padding: 8px;\">' + renderState(state) + '</div>';\n\n // Event delegation: single click listener handles all expand buttons\n } catch (e) {\n contentContainer.innerHTML = '<div style=\"color: #e74856; padding: 20px;\">Error accessing room state: ' + escapeHtml(e.message) + '</div>';\n }\n }\n\n // Throttle function to prevent excessive re-renders\n // TODO: prevent re-renders of unchanged refIds instead of just throttling\n function throttle(func, wait) {\n var timeout;\n var previous = 0;\n return function executedFunction() {\n var context = this;\n var args = arguments;\n var now = Date.now();\n var remaining = wait - (now - previous);\n\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n func.apply(context, args);\n } else if (!timeout) {\n timeout = setTimeout(function() {\n previous = Date.now();\n timeout = null;\n func.apply(context, args);\n }, remaining);\n }\n };\n }\n\n // Create throttled version of updateStateDisplay\n var throttledUpdateStateDisplay = throttle(updateStateDisplay, 200);\n\n // Initial render - root is always expanded\n expandedPaths.add('root');\n updateStateDisplay();\n\n // Update state when it changes\n const originalTriggerChanges = room.serializer.decoder.triggerChanges;\n room.serializer.decoder.triggerChanges = function(changes) {\n originalTriggerChanges?.apply(this, arguments);\n throttledUpdateStateDisplay();\n /**\n * TODO: keep track of which refIds have changed and only re-render those\n */\n }\n\n modal.appendChild(contentContainer);\n document.body.appendChild(modal);\n\n // Drag and resize state variables\n var isDragging = false;\n var dragStartX = 0;\n var dragStartY = 0;\n var modalStartX = 0;\n var modalStartY = 0;\n var isResizing = false;\n var resizeHandle = null;\n var resizeStartX = 0;\n var resizeStartY = 0;\n var resizeStartWidth = 0;\n var resizeStartHeight = 0;\n var resizeStartLeft = 0;\n var resizeStartTop = 0;\n\n header.addEventListener('mousedown', function(e) {\n const target = e.target as HTMLElement;\n // Don't drag if clicking on a resize handle\n if (target.classList && target.classList.contains('resize-handle')) {\n return;\n }\n if (target === closeButton || closeButton.contains(target)) {\n return; // Don't drag when clicking close button\n }\n isDragging = true;\n dragStartX = e.clientX;\n dragStartY = e.clientY;\n var rect = modal.getBoundingClientRect();\n modalStartX = rect.left;\n modalStartY = rect.top;\n modal.style.cursor = 'move';\n e.preventDefault();\n });\n\n var handleMouseMove = function(e) {\n if (isResizing && resizeHandle) {\n // Handle resize\n var deltaX = e.clientX - resizeStartX;\n var deltaY = e.clientY - resizeStartY;\n var newWidth = resizeStartWidth;\n var newHeight = resizeStartHeight;\n var newLeft = resizeStartLeft;\n var newTop = resizeStartTop;\n\n if (resizeHandle.includes('e')) {\n newWidth = resizeStartWidth + deltaX;\n }\n if (resizeHandle.includes('w')) {\n newWidth = resizeStartWidth - deltaX;\n newLeft = resizeStartLeft + deltaX;\n }\n if (resizeHandle.includes('s')) {\n newHeight = resizeStartHeight + deltaY;\n }\n if (resizeHandle.includes('n')) {\n newHeight = resizeStartHeight - deltaY;\n newTop = resizeStartTop + deltaY;\n }\n\n // Apply constraints\n newWidth = Math.max(parseInt(modal.style.minWidth) || 300, Math.min(newWidth, window.innerWidth - newLeft));\n newHeight = Math.max(parseInt(modal.style.minHeight) || 200, Math.min(newHeight, window.innerHeight - newTop));\n\n modal.style.width = newWidth + 'px';\n modal.style.height = newHeight + 'px';\n modal.style.left = newLeft + 'px';\n modal.style.top = newTop + 'px';\n modal.style.transform = 'none';\n } else if (isDragging) {\n // Handle drag\n var deltaX = e.clientX - dragStartX;\n var deltaY = e.clientY - dragStartY;\n var newX = modalStartX + deltaX;\n var newY = modalStartY + deltaY;\n\n // Constrain to viewport\n var maxX = window.innerWidth - modal.offsetWidth;\n var maxY = window.innerHeight - modal.offsetHeight;\n newX = Math.max(0, Math.min(newX, maxX));\n newY = Math.max(0, Math.min(newY, maxY));\n\n modal.style.left = newX + 'px';\n modal.style.top = newY + 'px';\n modal.style.transform = 'none';\n }\n };\n\n document.addEventListener('mousemove', handleMouseMove);\n\n var handleMouseUp = function() {\n if (isDragging) {\n isDragging = false;\n modal.style.cursor = '';\n saveStateInspectorPreferences();\n }\n if (isResizing) {\n isResizing = false;\n resizeHandle = null;\n saveStateInspectorPreferences();\n }\n };\n\n document.addEventListener('mouseup', handleMouseUp);\n\n // Resize functionality\n var resizeHandleSize = 8;\n var cornerHandleSize = 12; // Larger handles for corners to make them easier to grab\n\n // Create edge handles first, then corner handles (so corners are on top)\n var edgeHandles = ['n', 's', 'e', 'w'];\n var cornerHandles = ['nw', 'ne', 'sw', 'se'];\n\n // Create edge handles (leaving space for corners)\n edgeHandles.forEach(function(handle) {\n var handleEl = document.createElement('div');\n handleEl.className = 'resize-handle resize-' + handle;\n handleEl.style.position = 'absolute';\n handleEl.style.backgroundColor = 'transparent';\n handleEl.style.zIndex = '10000';\n handleEl.style.pointerEvents = 'auto';\n\n if (handle === 'n' || handle === 's') {\n handleEl.style.height = resizeHandleSize + 'px';\n handleEl.style.left = cornerHandleSize + 'px';\n handleEl.style.right = cornerHandleSize + 'px';\n if (handle === 'n') {\n handleEl.style.top = '0';\n handleEl.style.cursor = 'n-resize';\n } else {\n handleEl.style.bottom = '0';\n handleEl.style.cursor = 's-resize';\n }\n } else {\n handleEl.style.width = resizeHandleSize + 'px';\n handleEl.style.top = cornerHandleSize + 'px';\n handleEl.style.bottom = cornerHandleSize + 'px';\n if (handle === 'e') {\n handleEl.style.right = '0';\n handleEl.style.cursor = 'e-resize';\n } else {\n handleEl.style.left = '0';\n handleEl.style.cursor = 'w-resize';\n }\n }\n\n handleEl.addEventListener('mousedown', function(e) {\n e.stopPropagation();\n e.preventDefault();\n isResizing = true;\n resizeHandle = handle;\n resizeStartX = e.clientX;\n resizeStartY = e.clientY;\n var rect = modal.getBoundingClientRect();\n resizeStartWidth = rect.width;\n resizeStartHeight = rect.height;\n resizeStartLeft = rect.left;\n resizeStartTop = rect.top;\n });\n\n modal.appendChild(handleEl);\n });\n\n // Create corner handles (higher z-index so they're on top)\n cornerHandles.forEach(function(handle) {\n var handleEl = document.createElement('div');\n handleEl.className = 'resize-handle resize-' + handle;\n handleEl.style.position = 'absolute';\n handleEl.style.backgroundColor = 'transparent';\n handleEl.style.zIndex = '10002';\n handleEl.style.pointerEvents = 'auto';\n handleEl.style.width = cornerHandleSize + 'px';\n handleEl.style.height = cornerHandleSize + 'px';\n\n if (handle === 'nw') {\n handleEl.style.top = '0';\n handleEl.style.left = '0';\n handleEl.style.cursor = 'nw-resize';\n } else if (handle === 'ne') {\n handleEl.style.top = '0';\n handleEl.style.right = '0';\n handleEl.style.cursor = 'ne-resize';\n } else if (handle === 'sw') {\n handleEl.style.bottom = '0';\n handleEl.style.left = '0';\n handleEl.style.cursor = 'sw-resize';\n } else if (handle === 'se') {\n handleEl.style.bottom = '0';\n handleEl.style.right = '0';\n handleEl.style.cursor = 'se-resize';\n }\n\n handleEl.addEventListener('mousedown', function(e) {\n e.stopPropagation();\n e.preventDefault();\n isResizing = true;\n resizeHandle = handle;\n resizeStartX = e.clientX;\n resizeStartY = e.clientY;\n var rect = modal.getBoundingClientRect();\n resizeStartWidth = rect.width;\n resizeStartHeight = rect.height;\n resizeStartLeft = rect.left;\n resizeStartTop = rect.top;\n });\n\n modal.appendChild(handleEl);\n });\n\n\n // Remove state change listener when modal is closed\n var originalRemove = modal.remove;\n modal.remove = function() {\n // Restore original trigger changes\n room.serializer.decoder.triggerChanges = originalTriggerChanges;\n originalRemove.call(this);\n };\n}\n\n// Apply panel position based on current setting\nfunction applyPanelPosition() {\n var logoContainer = document.getElementById('debug-logo-container');\n var menu = document.getElementById('debug-menu');\n var panels = document.querySelectorAll('[id^=\"debug-panel-\"]');\n\n var positions = {\n 'bottom-right': { bottom: '14px', right: '14px', top: 'auto', left: 'auto' },\n 'bottom-left': { bottom: '14px', left: '14px', top: 'auto', right: 'auto' },\n 'top-left': { top: '14px', left: '14px', bottom: 'auto', right: 'auto' },\n 'top-right': { top: '14px', right: '14px', bottom: 'auto', left: 'auto' }\n };\n\n var pos = positions[preferences.panelPosition.position] || positions['bottom-right'];\n\n // Update logo container\n if (logoContainer) {\n logoContainer.style.bottom = pos.bottom;\n logoContainer.style.right = pos.right;\n logoContainer.style.top = pos.top;\n logoContainer.style.left = pos.left;\n }\n\n // Update menu position\n if (menu) {\n if (preferences.panelPosition.position.startsWith('bottom')) {\n menu.style.bottom = '60px';\n menu.style.top = 'auto';\n } else {\n // For top positions, menu appears below the logo\n menu.style.top = '60px';\n menu.style.bottom = 'auto';\n }\n menu.style.right = pos.right;\n menu.style.left = pos.left;\n }\n\n // Update panels\n repositionDebugPanels();\n}\n\n// Hide panels for this session\nfunction hidePanelsForSession() {\n panelsHidden = true;\n savePreferences(); // Save the hidden state\n\n var logoContainer = document.getElementById('debug-logo-container');\n var menu = document.getElementById('debug-menu');\n var panels = document.querySelectorAll('[id^=\"debug-panel-\"]') as NodeListOf<HTMLElement>;\n\n if (logoContainer) {\n logoContainer.style.display = 'none';\n }\n if (menu) {\n menu.style.display = 'none';\n }\n panels.forEach(function(panel) {\n panel.style.display = 'none';\n });\n}\n\n// Helper function to format bytes\nfunction formatBytes(bytes) {\n if (!bytes) {\n return '0 B';\n } else if (bytes < 1) {\n bytes = 1; // avoid visual glitches\n }\n var k = 1024;\n var sizes = ['B', 'KB', 'MB', 'GB'];\n var i = Math.floor(Math.log(bytes) / Math.log(k));\n return (Math.round(bytes) / Math.pow(k, i)).toFixed(1) + ' ' + sizes[i];\n}\n\n// Helper function to create debug panel for a room\nfunction createDebugPanel(uniquePanelId, debugInfo) {\n // Check if panel already exists\n var existingPanel = document.getElementById('debug-panel-' + uniquePanelId);\n if (existingPanel) {\n return existingPanel;\n }\n\n var panel = document.createElement('div');\n panel.id = 'debug-panel-' + uniquePanelId;\n panel.style.position = 'fixed';\n // Position will be set by repositionDebugPanels\n panel.style.backgroundColor = 'rgba(0, 0, 0, 0.85)';\n panel.style.color = '#fff';\n panel.style.padding = '8px';\n panel.style.borderRadius = '6px';\n panel.style.fontFamily = 'monospace';\n panel.style.fontSize = '11px';\n panel.style.zIndex = '999';\n panel.style.minWidth = '180px';\n panel.style.marginRight = '6px';\n panel.style.boxShadow = '0 4px 12px rgba(0, 0, 0, 0.5)';\n panel.style.display = panelsHidden ? 'none' : 'block';\n\n var title = document.createElement('div');\n title.id = 'debug-title-' + uniquePanelId;\n title.style.fontWeight = 'bold';\n title.style.marginBottom = '6px';\n title.style.borderBottom = '1px solid rgba(255, 255, 255, 0.15)';\n title.style.paddingBottom = '4px';\n title.style.display = 'flex';\n title.style.alignItems = 'center';\n title.style.justifyContent = 'space-between';\n title.style.gap = '8px';\n title.style.position = 'relative';\n title.innerHTML = '<span id=\"debug-title-text-' + uniquePanelId + '\"><span class=\"debug-room-name\"></span><span class=\"debug-info-icon\" style=\"display: inline-flex; align-items: center; margin-left: 4px; cursor: pointer; opacity: 0.6; vertical-align: middle;\">' + infoIcon.replace('height=\"200px\" width=\"200px\"', 'height=\"10\" width=\"10\"') + '</span></span><span id=\"debug-ping-' + uniquePanelId + '\" style=\"font-size: 10px; font-weight: normal; color: #888;\" title=\"Ping time\">--</span>';\n\n // Create tooltip for info button (will be shown on hover)\n var tooltip = document.createElement('div');\n tooltip.id = 'debug-tooltip-' + uniquePanelId;\n tooltip.style.position = 'absolute';\n tooltip.style.top = '100%';\n tooltip.style.left = '0';\n tooltip.style.marginTop = '4px';\n tooltip.style.padding = '6px 8px';\n tooltip.style.backgroundColor = 'rgba(0, 0, 0, 0.95)';\n tooltip.style.color = '#fff';\n tooltip.style.borderRadius = '4px';\n tooltip.style.fontSize = '10px';\n tooltip.style.fontFamily = 'monospace';\n tooltip.style.zIndex = '1000';\n tooltip.style.display = 'none';\n tooltip.style.boxShadow = '0 2px 8px rgba(0, 0, 0, 0.5)';\n tooltip.style.lineHeight = '1.4';\n tooltip.innerHTML = '<div><strong>Room ID:</strong> ' + debugInfo.roomId + '</div><div><strong>Session ID:</strong> N/A</div>';\n\n var content = document.createElement('div');\n content.id = 'debug-content-' + uniquePanelId;\n\n // Create action buttons container at the bottom\n var actionsContainer = document.createElement('div');\n actionsContainer.id = 'debug-actions-' + uniquePanelId;\n actionsContainer.style.display = 'flex';\n actionsContainer.style.gap = '4px';\n actionsContainer.style.marginTop = '8px';\n actionsContainer.style.paddingTop = '6px';\n actionsContainer.style.borderTop = '1px solid rgba(255, 255, 255, 0.15)';\n actionsContainer.style.position = 'relative';\n\n // Helper function to create action button\n function createActionButton(id, icon, label, onClick) {\n var btn = document.createElement('button');\n btn.id = id;\n btn.style.display = 'flex';\n btn.style.alignItems = 'center';\n btn.style.gap = '4px';\n btn.style.padding = '4px 8px';\n btn.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n btn.style.borderRadius = '4px';\n btn.style.background = 'rgba(255, 255, 255, 0.05)';\n btn.style.color = '#fff';\n btn.style.fontSize = '9px';\n btn.style.cursor = 'pointer';\n btn.style.transition = 'background 0.2s, border-color 0.2s';\n btn.innerHTML = '<span style=\"display: inline-flex; align-items: center; width: 12px; height: 12px;\">' + icon + '</span><span>' + label + '</span>';\n\n btn.addEventListener('mouseenter', function() {\n btn.style.background = 'rgba(255, 255, 255, 0.15)';\n btn.style.borderColor = 'rgba(255, 255, 255, 0.3)';\n });\n btn.addEventListener('mouseleave', function() {\n btn.style.background = 'rgba(255, 255, 255, 0.05)';\n btn.style.borderColor = 'rgba(255, 255, 255, 0.2)';\n });\n btn.addEventListener('click', function(e) {\n e.stopPropagation();\n onClick();\n });\n\n return btn;\n }\n\n // Create action buttons\n var stateBtn = createActionButton(\n 'debug-state-btn-' + uniquePanelId,\n treeViewIcon.replace('height=\"200px\" width=\"200px\"', 'height=\"12\" width=\"12\"'),\n 'State',\n function() { openStateInspectorModal(uniquePanelId); }\n );\n\n var messageBtn = createActionButton(\n 'debug-message-btn-' + uniquePanelId,\n messageIcon.replace('height=\"200px\" width=\"200px\"', 'height=\"12\" width=\"12\"'),\n 'Send',\n function() { openSendMessagesModal(uniquePanelId); }\n );\n messageBtn.style.display = 'none'; // Hidden by default, shown when message types available\n\n // Create disconnect button (red, simulates abnormal websocket close)\n var disconnectBtn = createActionButton(\n 'debug-disconnect-btn-' + uniquePanelId,\n disconnectIcon.replace('height=\"200px\" width=\"200px\"', 'height=\"12\" width=\"12\"'),\n 'Drop',\n function() {\n var info = roomDebugInfo.get(uniquePanelId);\n if (info && info.room && info.room.connection) {\n // Simulate connection closure\n info.room.connection.close(CloseCode.MAY_TRY_RECONNECT);\n }\n }\n );\n\n // Track button state for hover effects\n var isReconnecting = false;\n\n // Helper to apply normal (red) button style\n function applyNormalStyle() {\n disconnectBtn.style.background = 'rgba(239, 68, 68, 0.2)';\n disconnectBtn.style.borderColor = 'rgba(239, 68, 68, 0.5)';\n disconnectBtn.style.color = '#ef4444';\n disconnectBtn.style.animation = '';\n disconnectBtn.style.pointerEvents = 'auto';\n disconnectBtn.style.opacity = '1';\n var labelSpan = disconnectBtn.querySelector('span:last-child') as HTMLElement;\n if (labelSpan) labelSpan.textContent = 'Drop';\n }\n\n // Helper to apply reconnecting (orange/pulsing) button style\n function applyReconnectingStyle() {\n disconnectBtn.style.background = 'rgba(251, 146, 60, 0.3)';\n disconnectBtn.style.borderColor = 'rgba(251, 146, 60, 0.6)';\n disconnectBtn.style.color = '#fb923c';\n disconnectBtn.style.animation = 'debug-pulse 1.5s ease-in-out infinite';\n disconnectBtn.style.pointerEvents = 'none';\n disconnectBtn.style.opacity = '0.8';\n var labelSpan = disconnectBtn.querySelector('span:last-child') as HTMLElement;\n if (labelSpan) labelSpan.textContent = 'Reconnecting...';\n }\n\n // Inject CSS animation if not already present\n if (!document.getElementById('debug-pulse-animation')) {\n var style = document.createElement('style');\n style.id = 'debug-pulse-animation';\n style.textContent = '@keyframes debug-pulse { 0%, 100% { opacity: 0.6; } 50% { opacity: 1; } }';\n document.head.appendChild(style);\n }\n\n // Apply initial style\n applyNormalStyle();\n\n // Register onDrop callback to show reconnecting state\n if (debugInfo.room) {\n debugInfo.room.onDrop(function() {\n isReconnecting = true;\n applyReconnectingStyle();\n });\n\n // Register onReconnect callback to restore normal state\n debugInfo.room.onReconnect(function() {\n isReconnecting = false;\n applyNormalStyle();\n });\n }\n\n // Hover effects (only when not reconnecting)\n disconnectBtn.addEventListener('mouseenter', function() {\n if (!isReconnecting) {\n disconnectBtn.style.background = 'rgba(239, 68, 68, 0.35)';\n disconnectBtn.style.borderColor = 'rgba(239, 68, 68, 0.7)';\n }\n });\n disconnectBtn.addEventListener('mouseleave', function() {\n if (!isReconnecting) {\n disconnectBtn.style.background = 'rgba(239, 68, 68, 0.2)';\n disconnectBtn.style.borderColor = 'rgba(239, 68, 68, 0.5)';\n }\n });\n\n // Add tooltip hover handlers to info icon in title\n title.appendChild(tooltip);\n var infoIconEl = title.querySelector('.debug-info-icon') as HTMLElement;\n var tooltipTimeout: any = null;\n var showTooltip = function() {\n if (tooltipTimeout) { clearTimeout(tooltipTimeout); tooltipTimeout = null; }\n tooltip.style.display = 'block';\n };\n var hideTooltip = function() {\n tooltipTimeout = setTimeout(function() {\n tooltip.style.display = 'none';\n }, 100);\n };\n if (infoIconEl) {\n infoIconEl.addEventListener('mouseenter', showTooltip);\n infoIconEl.addEventListener('mouseleave', hideTooltip);\n }\n tooltip.style.pointerEvents = 'auto';\n tooltip.addEventListener('mouseenter', showTooltip);\n tooltip.addEventListener('mouseleave', hideTooltip);\n\n actionsContainer.appendChild(stateBtn);\n actionsContainer.appendChild(messageBtn);\n actionsContainer.appendChild(disconnectBtn);\n\n panel.appendChild(title);\n panel.appendChild(content);\n panel.appendChild(actionsContainer);\n\n // Prepend panel to body so new panels appear first\n if (document.body.firstChild) {\n document.body.insertBefore(panel, document.body.firstChild);\n } else {\n document.body.appendChild(panel);\n }\n\n return panel;\n}\n\n// Reposition all debug panels to stack vertically\nfunction repositionDebugPanels() {\n if (panelsHidden) return;\n\n var panels = Array.from(document.querySelectorAll('[id^=\"debug-panel-\"]') as NodeListOf<HTMLElement>)\n .filter(function(panel: HTMLElement) { return panel.style.display !== 'none'; })\n .reverse(); // Reverse to get oldest first (since new panels are prepended)\n\n // Calculate logoIcon container width: 22px width + 10px padding on each side = 42px\n // Add 6px margin to prevent overlap\n var logoIconOffset = 42 + 6;\n\n var positions = {\n 'bottom-right': {\n start: { bottom: '14px', right: '14px', top: 'auto', left: 'auto' },\n offset: function(panel, currentRight) { return { right: currentRight + 'px', left: 'auto' }; }\n },\n 'bottom-left': {\n start: { bottom: '14px', left: '14px', top: 'auto', right: 'auto' },\n offset: function(panel, currentLeft) { return { left: currentLeft + 'px', right: 'auto' }; }\n },\n 'top-left': {\n start: { top: '14px', left: '14px', bottom: 'auto', right: 'auto' },\n offset: function(panel, currentLeft) { return { left: currentLeft + 'px', right: 'auto' }; }\n },\n 'top-right': {\n start: { top: '14px', right: '14px', bottom: 'auto', left: 'auto' },\n offset: function(panel, currentRight) { return { right: currentRight + 'px', left: 'auto' }; }\n }\n };\n\n var pos = positions[preferences.panelPosition.position] || positions['bottom-right'];\n var baseOffset = 14 + logoIconOffset;\n var currentOffset = baseOffset;\n\n panels.forEach(function(panel) {\n // Set base position\n Object.keys(pos.start).forEach(function(key) {\n panel.style[key] = pos.start[key];\n });\n\n // Apply offset\n var offset = pos.offset(panel, currentOffset);\n Object.keys(offset).forEach(function(key) {\n panel.style[key] = offset[key];\n });\n\n currentOffset += panel.offsetWidth + 6;\n });\n}\n\n// Update debug panel content\nfunction updateDebugPanel(uniquePanelId, debugInfo) {\n var contentId = 'debug-content-' + uniquePanelId;\n var panelId = 'debug-panel-' + uniquePanelId;\n var titleId = 'debug-title-' + uniquePanelId;\n var content = document.getElementById(contentId);\n var panel = document.getElementById(panelId);\n var title = document.getElementById(titleId);\n\n if (!content || !panel) {\n // Only create if panel doesn't exist\n if (!panel) {\n createDebugPanel(uniquePanelId, debugInfo);\n content = document.getElementById(contentId);\n title = document.getElementById(titleId);\n repositionDebugPanels();\n } else {\n content = document.getElementById(contentId);\n title = document.getElementById(titleId);\n }\n }\n\n // Update title with room name only (roomId and sessionId are in tooltip)\n var titleTextEl = document.getElementById('debug-title-text-' + uniquePanelId);\n var roomNameEl = titleTextEl?.querySelector('.debug-room-name');\n if (roomNameEl) roomNameEl.textContent = debugInfo.roomName;\n document.getElementById('debug-tooltip-' + uniquePanelId).innerHTML = '<div><strong>Room ID:</strong> ' + debugInfo.roomId + '</div><div><strong>Session ID:</strong> ' + debugInfo.sessionId + '</div>';\n\n // Update ping in header\n var pingDisplay = debugInfo.pingMs !== null ? debugInfo.pingMs + 'ms' : '--';\n var pingColor = debugInfo.pingMs !== null ? (debugInfo.pingMs < 100 ? '#22c55e' : debugInfo.pingMs < 200 ? '#eab308' : '#ef4444') : '#888';\n var pingElement = document.getElementById('debug-ping-' + uniquePanelId);\n if (pingElement) {\n pingElement.textContent = pingDisplay;\n pingElement.style.color = pingColor;\n }\n\n var html = '<div style=\"line-height: 1.3;\">';\n html += '<div style=\"font-size: 10px; display: flex; gap: 8px;\">';\n html += '<div style=\"flex: 1;\">';\n html += '<div style=\"margin-bottom: 4px;\"><div style=\"display: flex; align-items: center; gap: 6px;\"><span style=\"display: inline-flex; align-items: center; width: 18px; height: 18px; color: #FF9800;\">' + envelopeUp + '</span><span style=\"color: #FF9800;\">' + formatBytes(debugInfo.bytesSentPerSec) + '/s</span></div><div style=\"margin-left: 24px; opacity: 0.7; font-size: 9px;\">' + debugInfo.messagesSentPerSec.toFixed(0) + ' messages</div></div>';\n html += '<div><div style=\"display: flex; align-items: center; gap: 6px;\"><span style=\"display: inline-flex; align-items: center; width: 18px; height: 18px; color: #2196F3;\">' + envelopeDown + '</span><span style=\"color: #2196F3;\">' + formatBytes(debugInfo.bytesReceivedPerSec) + '/s</span></div><div style=\"margin-left: 24px; opacity: 0.7; font-size: 9px;\">' + debugInfo.messagesReceivedPerSec.toFixed(0) + ' messages</div></div>';\n html += '</div>';\n html += '<div style=\"display: flex; flex-direction: column; gap: 4px; align-items: flex-end;\">';\n html += '<canvas id=\"graph-sent-' + uniquePanelId + '\" width=\"80\" height=\"30\" style=\"display: block;\"></canvas>';\n html += '<canvas id=\"graph-received-' + uniquePanelId + '\" width=\"80\" height=\"30\" style=\"display: block;\"></canvas>';\n html += '</div>';\n html += '</div>';\n html += '</div>';\n\n content.innerHTML = html;\n\n // Draw graphs after a short delay to ensure canvas elements are rendered\n setTimeout(function() {\n drawGraph('graph-sent-' + uniquePanelId, debugInfo.bytesSentHistory, '#FF9800');\n drawGraph('graph-received-' + uniquePanelId, debugInfo.bytesReceivedHistory, '#2196F3');\n }, 10);\n}\n\n// Draw graph on canvas\nfunction drawGraph(canvasId, data, color) {\n var canvas = document.getElementById(canvasId) as HTMLCanvasElement;\n if (!canvas) return;\n\n var ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n var width = canvas.width;\n var height = canvas.height;\n\n // Clear canvas\n ctx.clearRect(0, 0, width, height);\n\n if (!data || data.length === 0) return;\n\n // Find min and max values\n var maxValue = Math.max.apply(Math, data);\n var minValue = Math.min.apply(Math, data);\n var range = maxValue - minValue || 1; // Avoid division by zero\n\n // Padding\n var padding = 2;\n var graphWidth = width - padding * 2;\n var graphHeight = height - padding * 2;\n\n // Draw grid lines\n ctx.strokeStyle = 'rgba(255, 255, 255, 0.1)';\n ctx.lineWidth = 0.5;\n for (var i = 0; i <= 4; i++) {\n var y = padding + (graphHeight / 4) * i;\n ctx.beginPath();\n ctx.moveTo(padding, y);\n ctx.lineTo(width - padding, y);\n ctx.stroke();\n }\n\n // Draw the line\n ctx.strokeStyle = color;\n ctx.lineWidth = 1.5;\n ctx.beginPath();\n\n for (var i = 0; i < data.length; i++) {\n var x = padding + (graphWidth / (data.length - 1 || 1)) * i;\n var normalizedValue = (data[i] - minValue) / range;\n var y = padding + graphHeight - (normalizedValue * graphHeight);\n\n if (i === 0) {\n ctx.moveTo(x, y);\n } else {\n ctx.lineTo(x, y);\n }\n }\n\n ctx.stroke();\n\n // Fill area under the line\n if (data.length > 0) {\n ctx.lineTo(width - padding, height - padding);\n ctx.lineTo(padding, height - padding);\n ctx.closePath();\n ctx.fillStyle = color;\n ctx.globalAlpha = 0.2;\n ctx.fill();\n ctx.globalAlpha = 1.0;\n }\n}\n\n// Calculate per-second rates\nfunction calculateRates(debugInfo) {\n var now = Date.now();\n var elapsed = (now - debugInfo.lastUpdate) / 1000; // seconds\n\n if (elapsed > 0) {\n debugInfo.bytesSentPerSec = debugInfo.bytesSentDelta / elapsed;\n debugInfo.bytesReceivedPerSec = debugInfo.bytesReceivedDelta / elapsed;\n debugInfo.messagesSentPerSec = debugInfo.messagesSentDelta / elapsed;\n debugInfo.messagesReceivedPerSec = debugInfo.messagesReceivedDelta / elapsed;\n\n // Add to history\n debugInfo.bytesSentHistory.push(debugInfo.bytesSentPerSec);\n debugInfo.bytesReceivedHistory.push(debugInfo.bytesReceivedPerSec);\n // debugInfo.historyTimestamps.push(now);\n\n // Limit history length\n var maxLen = debugInfo.maxHistoryLength || 60;\n if (debugInfo.bytesSentHistory.length > maxLen) {\n debugInfo.bytesSentHistory.shift();\n debugInfo.bytesReceivedHistory.shift();\n // debugInfo.historyTimestamps.shift();\n }\n\n // Reset deltas\n debugInfo.bytesSentDelta = 0;\n debugInfo.bytesReceivedDelta = 0;\n debugInfo.messagesSentDelta = 0;\n debugInfo.messagesReceivedDelta = 0;\n debugInfo.lastUpdate = now;\n }\n\n // Update panel\n updateDebugPanel(debugInfo.uniquePanelId, debugInfo);\n}\n\n// Start global update interval if not already running\nfunction ensureGlobalUpdateInterval() {\n if (globalUpdateInterval === null) {\n globalUpdateInterval = setInterval(function() {\n // Loop through all panels and calculate rates\n roomDebugInfo.forEach(function(debugInfo, uniquePanelId) {\n calculateRates(debugInfo);\n });\n\n // Clean up interval if no more panels\n if (roomDebugInfo.size === 0) {\n clearInterval(globalUpdateInterval);\n globalUpdateInterval = null;\n }\n }, 1000);\n }\n}\n\nfunction applyMonkeyPatches() {\n\n // Helper function to patch a room\n function patchRoom(room: Room) {\n if (!room) { return room; }\n\n // Generate a consistent room ID\n const roomId = room.roomId;\n const sessionId = room.sessionId;\n\n // Generate unique panel ID: use sessionId if available, otherwise use roomId + timestamp\n const uniquePanelId = sessionId && sessionId !== 'N/A' && sessionId !== ''\n ? sessionId\n : roomId + '-' + Date.now() + '-' + Math.random().toString(36).substring(2, 9);\n\n const transport = room.connection?.transport as WebSocketTransport;\n const endpoint = transport.ws?.url || 'N/A';\n\n const debugInfo = {\n uniquePanelId: uniquePanelId,\n roomId: roomId,\n roomName: room.name || 'N/A',\n sessionId: sessionId || 'N/A',\n endpoint,\n host: new URL(endpoint).host,\n room, // Store room reference for state inspector\n bytesSent: 0,\n bytesReceived: 0,\n messagesSent: 0,\n messagesReceived: 0,\n bytesSentDelta: 0,\n bytesReceivedDelta: 0,\n messagesSentDelta: 0,\n messagesReceivedDelta: 0,\n bytesSentPerSec: 0,\n bytesReceivedPerSec: 0,\n messagesSentPerSec: 0,\n messagesReceivedPerSec: 0,\n lastUpdate: Date.now(),\n bytesSentHistory: [],\n bytesReceivedHistory: [],\n // historyTimestamps: [],\n maxHistoryLength: 60, // Keep last 60 data points (1 minute at 1 second intervals)\n messageTypes: null, // Will store message types from __playground_message_types\n pingMs: null as number | null, // Current ping value in milliseconds\n pingInterval: null as any // Interval for pinging the room\n };\n\n roomDebugInfo.set(uniquePanelId, debugInfo);\n\n // Start ping interval (every 2 seconds)\n debugInfo.pingInterval = setInterval(() => {\n room.ping((ms: number) => {\n debugInfo.pingMs = ms;\n });\n }, 2000);\n\n // Initial ping\n room.ping((ms: number) => {\n debugInfo.pingMs = ms;\n });\n\n // Listen for __playground_message_types message\n room.onMessage('__playground_message_types', (messageTypes: any) => {\n debugInfo.messageTypes = messageTypes;\n\n // Show/hide message button based on message types availability\n var messageBtnElement = document.getElementById('debug-message-btn-' + uniquePanelId);\n if (messageBtnElement) {\n messageBtnElement.style.display = messageTypes ? 'flex' : 'none';\n }\n });\n\n // Helper function to track received message/bytes\n function trackReceivedMessage(data) {\n // Calculate bytes received\n var bytes = 0;\n if (data instanceof Blob) {\n bytes = data.size;\n } else if (data instanceof ArrayBuffer) {\n bytes = data.byteLength;\n } else if (typeof data === 'string') {\n bytes = new Blob([data]).size;\n } else if (data) {\n try {\n bytes = new Blob([JSON.stringify(data)]).size;\n } catch (e) {\n bytes = new Blob([String(data)]).size;\n }\n }\n\n //\n // TODO: avoid trackig __playground_message_types messages in the stats\n //\n debugInfo.messagesReceived++;\n debugInfo.messagesReceivedDelta++;\n debugInfo.bytesReceived += bytes;\n debugInfo.bytesReceivedDelta += bytes;\n }\n\n function trackSentMessage(data) {\n var bytes = 0;\n if (data instanceof Blob) {\n bytes = data.size;\n } else if (data instanceof ArrayBuffer) {\n bytes = data.byteLength;\n } else if (typeof data === 'string') {\n bytes = new Blob([data]).size;\n }\n debugInfo.messagesSent++;\n debugInfo.messagesSentDelta++;\n debugInfo.bytesSent += data.length;\n debugInfo.bytesSentDelta += data.length;\n }\n\n // Monkey-patch: track received messages through onmessage event\n const originalOnMessage = transport.events.onmessage;\n transport.events.onmessage = function(event) {\n // Clone event data to avoid issues with delayed processing\n var eventData = event.data;\n if (eventData instanceof Blob) {\n eventData = eventData.slice();\n } else if (eventData instanceof ArrayBuffer) {\n eventData = eventData.slice(0);\n } else if (typeof eventData === 'string') {\n eventData = eventData;\n }\n\n trackReceivedMessage(eventData);\n\n // Apply latency simulation for received messages\n if (preferences.latencySimulation.enabled && preferences.latencySimulation.delay > 0) {\n setTimeout(function() {\n // Create a synthetic event-like object\n var syntheticEvent = {\n data: eventData,\n target: event.target,\n currentTarget: event.currentTarget,\n type: 'message'\n };\n originalOnMessage.call(event.target, syntheticEvent);\n }, preferences.latencySimulation.delay);\n } else {\n return originalOnMessage.apply(this, arguments);\n }\n };\n\n // Monkey-patch: sending messages through room connection\n const originalSend = room.connection.send.bind(room.connection);\n room.connection.send = function(data: any) {\n trackSentMessage(data);\n\n // Apply latency simulation for sent messages\n if (preferences.latencySimulation.enabled && preferences.latencySimulation.delay > 0) {\n var clonedData = data;\n if (data instanceof ArrayBuffer) {\n clonedData = data.slice(0);\n } else if (data instanceof Blob) {\n clonedData = data.slice(0);\n } else if (data instanceof Uint8Array || data instanceof DataView || (data.buffer && data.buffer instanceof ArrayBuffer)) {\n clonedData = new Uint8Array(data).buffer;\n }\n\n setTimeout(function() {\n originalSend(clonedData);\n }, preferences.latencySimulation.delay / 2);\n } else {\n return originalSend(data);\n }\n };\n\n updateDebugPanel(uniquePanelId, debugInfo);\n\n // Ensure global update interval is running\n ensureGlobalUpdateInterval();\n\n // Clean up on room leave\n room.onLeave.once(() => {\n // Clear ping interval\n if (debugInfo.pingInterval !== null) {\n clearInterval(debugInfo.pingInterval);\n debugInfo.pingInterval = null;\n }\n roomDebugInfo.delete(uniquePanelId);\n var panel = document.getElementById('debug-panel-' + uniquePanelId);\n if (panel) {\n panel.remove();\n repositionDebugPanels();\n }\n // Clean up interval if no more panels\n if (roomDebugInfo.size === 0 && globalUpdateInterval !== null) {\n clearInterval(globalUpdateInterval);\n globalUpdateInterval = null;\n }\n });\n\n\n return room;\n }\n\n // Store original methods that return rooms\n var originalJoinOrCreate = Client.prototype.joinOrCreate;\n var originalJoin = Client.prototype.join;\n var originalCreate = Client.prototype.create;\n var originalReconnect = Client.prototype.reconnect;\n\n // Patch joinOrCreate\n Client.prototype.joinOrCreate = function() {\n var promise = originalJoinOrCreate.apply(this, arguments);\n return promise.then((room) => patchRoom(room));\n };\n\n // Patch join\n Client.prototype.join = function() {\n var promise = originalJoin.apply(this, arguments);\n return promise.then((room) => patchRoom(room));\n };\n\n // Patch create\n Client.prototype.create = function() {\n var promise = originalCreate.apply(this, arguments);\n return promise.then((room) => patchRoom(room));\n };\n\n // Patch reconnect\n if (originalReconnect) {\n Client.prototype.reconnect = function() {\n var promise = originalReconnect.apply(this, arguments);\n return promise.then((room) => patchRoom(room));\n };\n }\n}\n\napplyMonkeyPatches();\n\n// Initialize only after DOM is ready\n// (in case script is loaded in HEAD tag)\nif (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', initialize);\n} else {\n // DOM is already ready\n initialize();\n}"],"names":["encode","decode","CloseCode","getDecoderStateCallbacks","Reflection","Decoder","Packr","Protocol","unpack"],"mappings":"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","x_google_ignoreList":[0]}