{"_id":"@genex-ai/multiplayer","_rev":"30-c6717496642af5215b546106627cf4c4","name":"@genex-ai/multiplayer","dist-tags":{"latest":"0.16.1"},"versions":{"0.1.0":{"name":"@genex-ai/multiplayer","version":"0.1.0","license":"MIT","_id":"@genex-ai/multiplayer@0.1.0","maintainers":[{"name":"rabneba","email":"rabneba2@gmail.com"},{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"}],"homepage":"https://github.com/me-ai-org/genex-demo#readme","bugs":{"url":"https://github.com/me-ai-org/genex-demo/issues"},"dist":{"shasum":"43eada2823781b9b7f9f20f1147e63422c62484f","tarball":"https://registry.npmjs.org/@genex-ai/multiplayer/-/multiplayer-0.1.0.tgz","fileCount":6,"integrity":"sha512-I8M5bK49iWxxyrRwSaUZS9XEghQCH1YQYLWGkuPm3PYmQtCGtJUle/PczmE87zU+U0w4EnoT3w2CEt9FVu6FGA==","signatures":[{"sig":"MEQCIEzt72lfyvWEb8uJA397BSEMWr1r2X0jU0NRcPr4t1SwAiBUhPcF1tsLbq6VjHqo+9N3LRlQqQegV4DkQfUU4QGFaA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13142},"main":"./dist/index.js","type":"module","_from":"file:genex-ai-multiplayer-0.1.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.js"}},"scripts":{"build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"},"_resolved":"/private/var/folders/0_/l7jk4sd11zsfzwzk2fc16sym0000gn/T/a0ed28485577057ff7c5b1c21684feb8/genex-ai-multiplayer-0.1.0.tgz","_integrity":"sha512-I8M5bK49iWxxyrRwSaUZS9XEghQCH1YQYLWGkuPm3PYmQtCGtJUle/PczmE87zU+U0w4EnoT3w2CEt9FVu6FGA==","repository":{"url":"git+https://github.com/me-ai-org/genex-demo.git","type":"git","directory":"packages/multiplayer"},"_npmVersion":"11.5.2","description":"The multiplayer client wrapper + shared room schema for genex.","directories":{},"_nodeVersion":"23.10.0","dependencies":{"colyseus.js":"^0.16.22","@colyseus/schema":"^3.0.76"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0"},"peerDependencies":{"three":">=0.160.0"},"peerDependenciesMeta":{"three":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/multiplayer_0.1.0_1782488485291_0.774945157734741","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@genex-ai/multiplayer","version":"0.2.0","license":"MIT","_id":"@genex-ai/multiplayer@0.2.0","maintainers":[{"name":"rabneba","email":"rabneba2@gmail.com"},{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"}],"homepage":"https://github.com/me-ai-org/genex-demo#readme","bugs":{"url":"https://github.com/me-ai-org/genex-demo/issues"},"dist":{"shasum":"1262d89c4e5ebeac279244728006a38ce9f95c34","tarball":"https://registry.npmjs.org/@genex-ai/multiplayer/-/multiplayer-0.2.0.tgz","fileCount":6,"integrity":"sha512-Hzw7JES93Xur7XWHwMldADT1b02usKVd7e/66zF/05yOUFo6oq1Sm8KG6/Sm5dUDIfu41k+QrULjr6UGzn+P/w==","signatures":[{"sig":"MEUCIQDhoMdh3Qk2Ge7nlINs6NRVgobd1lzn/G2othWS7RiPjAIgZALqR8nWRzBamMS8/nlCMEfuLQWA4f0CCO8mpOyJ57E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17434},"type":"module","exports":{".":"./src/index.ts","./schema":"./src/schema.ts"},"gitHead":"ab43f43fd458554eb4417a7c41cb5d6d7c5ba429","scripts":{"build":"tsup","prepack":"pnpm build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"rabneba","email":"rabneba2@gmail.com"},"repository":{"url":"git+https://github.com/me-ai-org/genex-demo.git","type":"git","directory":"packages/multiplayer"},"_npmVersion":"10.9.8","description":"The multiplayer client wrapper + shared room schema for genex.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"colyseus.js":"^0.16.22","@colyseus/schema":"^3.0.76"},"publishConfig":{"main":"./dist/index.js","types":"./dist/index.d.ts","access":"public","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.js"}}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0"},"peerDependencies":{"three":">=0.160.0"},"peerDependenciesMeta":{"three":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/multiplayer_0.2.0_1782815727661_0.08392339562256601","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@genex-ai/multiplayer","version":"0.2.1","license":"MIT","_id":"@genex-ai/multiplayer@0.2.1","maintainers":[{"name":"rabneba","email":"rabneba2@gmail.com"},{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"}],"homepage":"https://github.com/me-ai-org/genex-demo#readme","bugs":{"url":"https://github.com/me-ai-org/genex-demo/issues"},"dist":{"shasum":"6957430f11761d8919591e9779340de729e18213","tarball":"https://registry.npmjs.org/@genex-ai/multiplayer/-/multiplayer-0.2.1.tgz","fileCount":6,"integrity":"sha512-+rALvld3iUKwqR9hYJ8rhyO8j47XeU1TSxAL+NNQeUuQAZg3CNCL5j8jNo1FfHE4h2w61ACUCXfEcef22CZ1Ww==","signatures":[{"sig":"MEUCIQDq+JdphmT4zzm31SntBlIR5r43HMmRr2XuhfJM66ZmngIgLooYG3BB1vTtxCmjpjwM9LUWd2ttU34KKWjTKuxrYdg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17434},"type":"module","exports":{".":"./src/index.ts","./schema":"./src/schema.ts"},"gitHead":"47e124639a5969b5b13ac26b56ed849e0ce4a1d4","scripts":{"build":"tsup","prepack":"pnpm build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"rabneba","email":"rabneba2@gmail.com"},"repository":{"url":"git+https://github.com/me-ai-org/genex-demo.git","type":"git","directory":"packages/multiplayer"},"_npmVersion":"10.9.8","description":"The multiplayer client wrapper + shared room schema for genex.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"colyseus.js":"^0.16.22","@colyseus/schema":"^3.0.76"},"publishConfig":{"main":"./dist/index.js","types":"./dist/index.d.ts","access":"public","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.js"}}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0"},"peerDependencies":{"three":">=0.160.0"},"peerDependenciesMeta":{"three":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/multiplayer_0.2.1_1782818382580_0.31185362252633153","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@genex-ai/multiplayer","version":"0.2.2","license":"MIT","_id":"@genex-ai/multiplayer@0.2.2","maintainers":[{"name":"rabneba","email":"rabneba2@gmail.com"},{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"}],"homepage":"https://github.com/me-ai-org/genex-demo#readme","bugs":{"url":"https://github.com/me-ai-org/genex-demo/issues"},"dist":{"shasum":"a3074f8ed686ef4fbb93c09d0a0e3c535cb03696","tarball":"https://registry.npmjs.org/@genex-ai/multiplayer/-/multiplayer-0.2.2.tgz","fileCount":6,"integrity":"sha512-f36yrJsJhq2/ystZDnYGbsKkztpBfo+3iyZz/Yd85DteYwaobV5IqHEpTyfBaCiX5qlcHiSQ+5QBAP+5AT0rkQ==","signatures":[{"sig":"MEUCIDqPfgE4vlfK2lLNmyOGdADXNsUsOwx8Zav/H6drZBFGAiEA9dZyrR++qFiJtWyMF5gh++j+1+KTfwpT0x3dFNbKVIQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17568},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@genex-ai/source":"./src/index.ts"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.js","@genex-ai/source":"./src/schema.ts"}},"gitHead":"f809b5df3ad7ca2aa529e6681907f3cfe1fff8e7","scripts":{"build":"tsup","check":"pnpm build && publint && attw --pack . --profile esm-only","prepack":"pnpm build && publint","typecheck":"tsc --noEmit"},"_npmUser":{"name":"rabneba","email":"rabneba2@gmail.com"},"repository":{"url":"git+https://github.com/me-ai-org/genex-demo.git","type":"git","directory":"packages/multiplayer"},"_npmVersion":"10.9.8","description":"The multiplayer client wrapper + shared room schema for genex.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"colyseus.js":"^0.16.22","@colyseus/schema":"^3.0.76"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","publint":"^0.3.0","@arethetypeswrong/cli":"^0.18.0"},"peerDependencies":{"three":">=0.160.0"},"peerDependenciesMeta":{"three":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/multiplayer_0.2.2_1782821725758_0.6811354658736546","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@genex-ai/multiplayer","version":"0.2.6","license":"MIT","_id":"@genex-ai/multiplayer@0.2.6","maintainers":[{"name":"rabneba","email":"rabneba2@gmail.com"},{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"}],"homepage":"https://github.com/me-ai-org/genex-demo#readme","bugs":{"url":"https://github.com/me-ai-org/genex-demo/issues"},"dist":{"shasum":"4756df980452a49399ca4bf9f4f64bb58edb999f","tarball":"https://registry.npmjs.org/@genex-ai/multiplayer/-/multiplayer-0.2.6.tgz","fileCount":6,"integrity":"sha512-hThNVpHaVGhYe789yUgAfNcxp5ro/pFnQUlJqU27oVLhKVaLDNsVTsy4KAmJkW61gGafzg7PwMHv59ruFB6CsQ==","signatures":[{"sig":"MEYCIQCRKLshNfSYjKOZQKz8sknT8cMqEbw8OmXamqg8l+U1ZQIhAKzYRY/sueObh6x82oHxHjqhOYFdYq70h2Jj1jyt55PB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21563},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@genex-ai/source":"./src/index.ts"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.js","@genex-ai/source":"./src/schema.ts"}},"gitHead":"705c7a5d9fbb76d63f1b9779ccb61741bc1153e3","scripts":{"build":"tsup","check":"pnpm build && publint && attw --pack . --profile esm-only","prepack":"pnpm build && publint","typecheck":"tsc --noEmit"},"_npmUser":{"name":"rabneba","email":"rabneba2@gmail.com"},"repository":{"url":"git+https://github.com/me-ai-org/genex-demo.git","type":"git","directory":"packages/multiplayer"},"_npmVersion":"10.9.8","description":"The multiplayer client wrapper + shared room schema for genex.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"colyseus.js":"^0.16.22","@colyseus/schema":"^3.0.76"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","publint":"^0.3.0","@arethetypeswrong/cli":"^0.18.0"},"peerDependencies":{"three":">=0.160.0"},"peerDependenciesMeta":{"three":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/multiplayer_0.2.6_1782905338355_0.8049940742043942","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@genex-ai/multiplayer","version":"0.4.0","license":"MIT","_id":"@genex-ai/multiplayer@0.4.0","maintainers":[{"name":"rabneba","email":"rabneba2@gmail.com"},{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"}],"homepage":"https://github.com/me-ai-org/genex-demo#readme","bugs":{"url":"https://github.com/me-ai-org/genex-demo/issues"},"dist":{"shasum":"21a5c1a2e053adbd5a272884e7363a440733483d","tarball":"https://registry.npmjs.org/@genex-ai/multiplayer/-/multiplayer-0.4.0.tgz","fileCount":6,"integrity":"sha512-eUtS0JvASgNIYnq6YVRcFjHxkV/D/88K3Fodn3UvouFfyrBwbjJbI+gb6OG2hAuWmK9ODYKxyRoNO1FqczXnZg==","signatures":[{"sig":"MEYCIQCwnMgfVbyHl4hZRn2yg1Gbu0Pwu8rRoonSF8k6Ep0lgQIhAMsHcfpsWu6gKNRSwKZVtkzDtDGeUHrVI2M4famsJoxd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31153},"main":"./dist/index.js","type":"module","_from":"file:genex-ai-multiplayer-0.4.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@genex-ai/source":"./src/index.ts"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.js","@genex-ai/source":"./src/schema.ts"}},"scripts":{"build":"tsup","check":"pnpm build && publint && attw --pack . --profile esm-only","typecheck":"tsc --noEmit"},"_npmUser":{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"},"_resolved":"/private/var/folders/0_/l7jk4sd11zsfzwzk2fc16sym0000gn/T/3f44f395cb7fbb479a7c4cf24c79e5e9/genex-ai-multiplayer-0.4.0.tgz","_integrity":"sha512-eUtS0JvASgNIYnq6YVRcFjHxkV/D/88K3Fodn3UvouFfyrBwbjJbI+gb6OG2hAuWmK9ODYKxyRoNO1FqczXnZg==","repository":{"url":"git+https://github.com/me-ai-org/genex-demo.git","type":"git","directory":"packages/multiplayer"},"_npmVersion":"11.16.0","description":"The multiplayer client wrapper + shared room schema for genex.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"colyseus.js":"^0.16.22","@colyseus/schema":"^3.0.76"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","publint":"^0.3.0","@arethetypeswrong/cli":"^0.18.0"},"peerDependencies":{"three":">=0.160.0"},"peerDependenciesMeta":{"three":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/multiplayer_0.4.0_1783036418056_0.3944180246847524","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@genex-ai/multiplayer","version":"0.4.1","license":"MIT","_id":"@genex-ai/multiplayer@0.4.1","maintainers":[{"name":"rabneba","email":"rabneba2@gmail.com"},{"name":"boozybats","email":"boozybats@icloud.com"},{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"}],"homepage":"https://github.com/me-ai-org/genex-demo#readme","bugs":{"url":"https://github.com/me-ai-org/genex-demo/issues"},"dist":{"shasum":"b5601bc8d8d027519bde6a520ea60665c7080542","tarball":"https://registry.npmjs.org/@genex-ai/multiplayer/-/multiplayer-0.4.1.tgz","fileCount":6,"integrity":"sha512-o2bGv/tSyJHM8mmW+2Fu05Tc1fZUSxSrCW4L/9/bK7ni7pgmJSLLrFPstp3qA75LKHQ9C6WQvqxEtnmrzXE+5w==","signatures":[{"sig":"MEUCIQCG93C0iyJM0oozuPdw0rI2iRnDT+caG3FiLJDEDjrVGwIgQcgiRH6c6/iv8iTyRnrZUbofwDl8jBTEVSiRXSElV3w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31598},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@genex-ai/source":"./src/index.ts"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.js","@genex-ai/source":"./src/schema.ts"}},"gitHead":"5acff4c0539c397b27b3ae3515b61bbcd8770a9e","scripts":{"build":"tsup","check":"pnpm build && publint && attw --pack . --profile esm-only","prepack":"pnpm build && publint","typecheck":"tsc --noEmit"},"_npmUser":{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"},"repository":{"url":"git+https://github.com/me-ai-org/genex-demo.git","type":"git","directory":"packages/multiplayer"},"_npmVersion":"11.16.0","description":"The multiplayer client wrapper + shared room schema for genex.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"colyseus.js":"^0.16.22","@colyseus/schema":"^3.0.76"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","publint":"^0.3.0","@arethetypeswrong/cli":"^0.18.0"},"peerDependencies":{"three":">=0.160.0"},"peerDependenciesMeta":{"three":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/multiplayer_0.4.1_1783335686345_0.742066907684586","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@genex-ai/multiplayer","version":"0.7.0","license":"MIT","_id":"@genex-ai/multiplayer@0.7.0","maintainers":[{"name":"rabneba","email":"rabneba2@gmail.com"},{"name":"boozybats","email":"boozybats@icloud.com"},{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"}],"homepage":"https://github.com/me-ai-org/genex-demo#readme","bugs":{"url":"https://github.com/me-ai-org/genex-demo/issues"},"dist":{"shasum":"76a178880383e34bd5b89e74ba498318973b8c2f","tarball":"https://registry.npmjs.org/@genex-ai/multiplayer/-/multiplayer-0.7.0.tgz","fileCount":6,"integrity":"sha512-L7Eyfr/BO89CDejwt0GJcGGnjUvasn/epbySMyjuVCFjOL0j2WERf38YA83gWhYU4sinRevDUaWy28enSon06A==","signatures":[{"sig":"MEUCIEmFtz2gShZgKFTemWjfZgdk4q1qYIntgsiL3DsA8l1YAiEAyRKbkd36TKtIOnZB/vNwF83l4iln4v3zmet/SEEpTYE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46479},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@genex-ai/source":"./src/index.ts"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.js","@genex-ai/source":"./src/schema.ts"}},"gitHead":"6c399b25aa7f2fc8b31f10e82806995650092a83","scripts":{"build":"tsup","check":"pnpm build && publint && attw --pack . --profile esm-only","prepack":"pnpm build && publint","typecheck":"tsc --noEmit"},"_npmUser":{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"},"repository":{"url":"git+https://github.com/me-ai-org/genex-demo.git","type":"git","directory":"packages/multiplayer"},"_npmVersion":"11.16.0","description":"The multiplayer client wrapper + shared room schema for genex.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"colyseus.js":"^0.16.22","@colyseus/schema":"^3.0.76"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","publint":"^0.3.0","@arethetypeswrong/cli":"^0.18.0"},"peerDependencies":{"three":">=0.160.0"},"peerDependenciesMeta":{"three":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/multiplayer_0.7.0_1783342962580_0.2192132144813823","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@genex-ai/multiplayer","version":"0.8.0","license":"MIT","_id":"@genex-ai/multiplayer@0.8.0","maintainers":[{"name":"rabneba","email":"rabneba2@gmail.com"},{"name":"boozybats","email":"boozybats@icloud.com"},{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"}],"homepage":"https://github.com/me-ai-org/genex-demo#readme","bugs":{"url":"https://github.com/me-ai-org/genex-demo/issues"},"dist":{"shasum":"6d19603a754e01d95a4cee248b68cf899f3b53e2","tarball":"https://registry.npmjs.org/@genex-ai/multiplayer/-/multiplayer-0.8.0.tgz","fileCount":6,"integrity":"sha512-8TaPOPYiRu1vmju7rrK9jhwSz/qfjC2e5KgXLjFAMB3WtYxFNe4Lw89U3aoDCvEpu1ZpwVcD/FXFG6Asr4qPBA==","signatures":[{"sig":"MEUCIG9Fr+z5UsHCuLduUtnyXXJvVRDQJC4Xrj1316H8dVn6AiEAk/xvg/mn50JOhbxFDRXOorNq+Ctwqg9oAa8qFBfx81E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55378},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@genex-ai/source":"./src/index.ts"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.js","@genex-ai/source":"./src/schema.ts"}},"gitHead":"6c399b25aa7f2fc8b31f10e82806995650092a83","scripts":{"build":"tsup","check":"pnpm build && publint && attw --pack . --profile esm-only","prepack":"pnpm build && publint","typecheck":"tsc --noEmit"},"_npmUser":{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"},"repository":{"url":"git+https://github.com/me-ai-org/genex-demo.git","type":"git","directory":"packages/multiplayer"},"_npmVersion":"11.5.2","description":"The multiplayer client wrapper + shared room schema for genex.","directories":{},"_nodeVersion":"23.10.0","dependencies":{"colyseus.js":"^0.16.22","@colyseus/schema":"^3.0.76"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","publint":"^0.3.0","@arethetypeswrong/cli":"^0.18.0"},"peerDependencies":{"three":">=0.160.0"},"peerDependenciesMeta":{"three":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/multiplayer_0.8.0_1783358307666_0.9520198005938516","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@genex-ai/multiplayer","version":"0.7.1","license":"MIT","_id":"@genex-ai/multiplayer@0.7.1","maintainers":[{"name":"rabneba","email":"rabneba2@gmail.com"},{"name":"boozybats","email":"boozybats@icloud.com"},{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"}],"homepage":"https://github.com/me-ai-org/genex-demo#readme","bugs":{"url":"https://github.com/me-ai-org/genex-demo/issues"},"dist":{"shasum":"bcbcb49cae79ee66e8cdee53619bec8bac6a52b3","tarball":"https://registry.npmjs.org/@genex-ai/multiplayer/-/multiplayer-0.7.1.tgz","fileCount":6,"integrity":"sha512-vTwUIjK09L6cODkRkQpwjXr0gBNvIGuitnsZ9OQdOidf2DGYU2CkUa/b3MIWXQcdUMr9RR854ZI3SXoU3B6BOA==","signatures":[{"sig":"MEUCIQCQ4x7mnuLVLF4BoeobJw2bA5B3TjbRc9GSyNAMoh+UVwIgbjMyE+3O4xHSZtng3PwXoqVT5d4jSWJunMb1osbM24Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50071},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@genex-ai/source":"./src/index.ts"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.js","@genex-ai/source":"./src/schema.ts"}},"gitHead":"fb5b8a613eaffc2fb204419574967cddb876e4e5","scripts":{"build":"tsup","check":"pnpm build && publint && attw --pack . --profile esm-only","prepack":"pnpm build && publint","typecheck":"tsc --noEmit"},"_npmUser":{"name":"rabneba","email":"rabneba2@gmail.com"},"repository":{"url":"git+https://github.com/me-ai-org/genex-demo.git","type":"git","directory":"packages/multiplayer"},"_npmVersion":"10.9.8","description":"The multiplayer client wrapper + shared room schema for genex.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"colyseus.js":"^0.16.22","@colyseus/schema":"^3.0.76"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","publint":"^0.3.0","@arethetypeswrong/cli":"^0.18.0"},"peerDependencies":{"three":">=0.160.0"},"peerDependenciesMeta":{"three":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/multiplayer_0.7.1_1783367382093_0.939514603820603","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"@genex-ai/multiplayer","version":"0.8.1","license":"MIT","_id":"@genex-ai/multiplayer@0.8.1","maintainers":[{"name":"rabneba","email":"rabneba2@gmail.com"},{"name":"boozybats","email":"boozybats@icloud.com"},{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"}],"homepage":"https://github.com/me-ai-org/genex-demo#readme","bugs":{"url":"https://github.com/me-ai-org/genex-demo/issues"},"dist":{"shasum":"f6176993cabcb972542165b878c586d0a9dd05ee","tarball":"https://registry.npmjs.org/@genex-ai/multiplayer/-/multiplayer-0.8.1.tgz","fileCount":6,"integrity":"sha512-Fbm8AH7Bb771898MekE9yEryV35ZO1A5MQ4GKghupyxDKT7Qi0yz8f6LaOQ4rMAV36pTqGmLhZvaWGEcYbEyGg==","signatures":[{"sig":"MEUCIC07PaNe/s27CeRvh9W8PUtWAQ/EySobSrcB9LnxcREIAiEAnLkoSXiq/C0rHIgHOkrSIGGkR00hfkUx1kJGbSPN+KM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":59018},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@genex-ai/source":"./src/index.ts"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.js","@genex-ai/source":"./src/schema.ts"}},"scripts":{"build":"tsup","check":"pnpm build && publint && attw --pack . --profile esm-only","prepack":"pnpm build && publint","typecheck":"tsc --noEmit"},"_npmUser":{"name":"rabneba","email":"rabneba2@gmail.com"},"repository":{"url":"git+https://github.com/me-ai-org/genex-demo.git","type":"git","directory":"packages/multiplayer"},"_npmVersion":"10.9.8","description":"The multiplayer client wrapper + shared room schema for genex.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"colyseus.js":"^0.16.22","@colyseus/schema":"^3.0.76"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","publint":"^0.3.0","@arethetypeswrong/cli":"^0.18.0"},"peerDependencies":{"three":">=0.160.0"},"peerDependenciesMeta":{"three":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/multiplayer_0.8.1_1783417746902_0.43333818801985435","host":"s3://npm-registry-packages-npm-production"}},"0.8.2":{"name":"@genex-ai/multiplayer","version":"0.8.2","license":"MIT","_id":"@genex-ai/multiplayer@0.8.2","maintainers":[{"name":"rabneba","email":"rabneba2@gmail.com"},{"name":"boozybats","email":"boozybats@icloud.com"},{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"}],"homepage":"https://github.com/me-ai-org/genex-demo#readme","bugs":{"url":"https://github.com/me-ai-org/genex-demo/issues"},"dist":{"shasum":"83584d478e140e0de7d3659714044afbcea75980","tarball":"https://registry.npmjs.org/@genex-ai/multiplayer/-/multiplayer-0.8.2.tgz","fileCount":6,"integrity":"sha512-q6NqWG4H9j7e7v1438agcenqIkmvHMY4S5F/A8CwEy6y5C1MsasgoCRW5bI4xqp4TOvC6EPG3LC1KTodlZtabQ==","signatures":[{"sig":"MEYCIQDwOPxqx5Ab8U1l6RPBXg+Wk/lfE1X4bGjIetgoMnx65wIhAOKUESGdyoruJ0gnPs222NTLDbTZegqFm761PytIfZcm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61878},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@genex-ai/source":"./src/index.ts"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.js","@genex-ai/source":"./src/schema.ts"}},"gitHead":"a0be870f26fc81d5b0f9543957f66d64e253e54c","scripts":{"build":"tsup","check":"pnpm build && publint && attw --pack . --profile esm-only","prepack":"pnpm build && publint","typecheck":"tsc --noEmit"},"_npmUser":{"name":"rabneba","email":"rabneba2@gmail.com"},"repository":{"url":"git+https://github.com/me-ai-org/genex-demo.git","type":"git","directory":"packages/multiplayer"},"_npmVersion":"11.16.0","description":"The multiplayer client wrapper + shared room schema for genex.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"colyseus.js":"^0.16.22","@colyseus/schema":"^3.0.76"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","publint":"^0.3.0","@arethetypeswrong/cli":"^0.18.0"},"peerDependencies":{"three":">=0.160.0"},"peerDependenciesMeta":{"three":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/multiplayer_0.8.2_1783437497063_0.37094584959002375","host":"s3://npm-registry-packages-npm-production"}},"0.8.3":{"name":"@genex-ai/multiplayer","version":"0.8.3","license":"MIT","_id":"@genex-ai/multiplayer@0.8.3","maintainers":[{"name":"rabneba","email":"rabneba2@gmail.com"},{"name":"boozybats","email":"boozybats@icloud.com"},{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"}],"homepage":"https://github.com/me-ai-org/genex-demo#readme","bugs":{"url":"https://github.com/me-ai-org/genex-demo/issues"},"dist":{"shasum":"1273363e901c1c5eec228d80cdf80019015c4a55","tarball":"https://registry.npmjs.org/@genex-ai/multiplayer/-/multiplayer-0.8.3.tgz","fileCount":6,"integrity":"sha512-ME2x0w5wK0qFek3O0ZxzvKAUcmdhwyfOFRl5iezCbFKLVyPJOOt6ovtDMXg0dFjJCs3v4Da0HotGfp0nSbGxBA==","signatures":[{"sig":"MEYCIQCbWLwCk7slPFM06KaA+qTfuYXD75qxVuIa9+V88k1gLwIhAIm98miXRnWN2eF/7YlwaR1JmuEeSTg7glaaIsEub2HQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62164},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@genex-ai/source":"./src/index.ts"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.js","@genex-ai/source":"./src/schema.ts"}},"gitHead":"0e830db7f020cef8f1cbf914274b866228d29dea","scripts":{"build":"tsup","check":"pnpm build && publint && attw --pack . --profile esm-only","prepack":"pnpm build && publint","typecheck":"tsc --noEmit"},"_npmUser":{"name":"rabneba","email":"rabneba2@gmail.com"},"repository":{"url":"git+https://github.com/me-ai-org/genex-demo.git","type":"git","directory":"packages/multiplayer"},"_npmVersion":"11.16.0","description":"The multiplayer client wrapper + shared room schema for genex.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"colyseus.js":"^0.16.22","@colyseus/schema":"^3.0.76"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","publint":"^0.3.0","@arethetypeswrong/cli":"^0.18.0"},"peerDependencies":{"three":">=0.160.0"},"peerDependenciesMeta":{"three":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/multiplayer_0.8.3_1783443532989_0.08253564907109445","host":"s3://npm-registry-packages-npm-production"}},"0.8.4":{"name":"@genex-ai/multiplayer","version":"0.8.4","license":"MIT","_id":"@genex-ai/multiplayer@0.8.4","maintainers":[{"name":"rabneba","email":"rabneba2@gmail.com"},{"name":"boozybats","email":"boozybats@icloud.com"},{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"}],"homepage":"https://github.com/me-ai-org/genex-demo#readme","bugs":{"url":"https://github.com/me-ai-org/genex-demo/issues"},"dist":{"shasum":"7b1bae8f3ecab71a90fe0ff2ee08b6c53d6e970f","tarball":"https://registry.npmjs.org/@genex-ai/multiplayer/-/multiplayer-0.8.4.tgz","fileCount":6,"integrity":"sha512-sTAOgui3zNYoiztdADQI9N6nIuiI+xv1myQKXdveW5kdkumbmR3ObjTnwrlaMpLVMmspr+Xa4fp6nMhL0p7jRA==","signatures":[{"sig":"MEQCIE19Drp3aW2f4nTtujoz/FIT+JjVmYRZMe4l23YRdtILAiAgl3LGW7HJR+UujcBRQAHc9L1eo/x4VEJUckJ9xAv/vA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62442},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@genex-ai/source":"./src/index.ts"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.js","@genex-ai/source":"./src/schema.ts"}},"gitHead":"26524890aa5cfa8839a44a2048520d28057f86a0","scripts":{"build":"tsup","check":"pnpm build && publint && attw --pack . --profile esm-only","prepack":"pnpm build && publint","typecheck":"tsc --noEmit"},"_npmUser":{"name":"rabneba","email":"rabneba2@gmail.com"},"repository":{"url":"git+https://github.com/me-ai-org/genex-demo.git","type":"git","directory":"packages/multiplayer"},"_npmVersion":"11.16.0","description":"The multiplayer client wrapper + shared room schema for genex.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"colyseus.js":"^0.16.22","@colyseus/schema":"^3.0.76"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","publint":"^0.3.0","@arethetypeswrong/cli":"^0.18.0"},"peerDependencies":{"three":">=0.160.0"},"peerDependenciesMeta":{"three":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/multiplayer_0.8.4_1783459768661_0.9736659287193752","host":"s3://npm-registry-packages-npm-production"}},"0.8.5":{"name":"@genex-ai/multiplayer","version":"0.8.5","license":"MIT","_id":"@genex-ai/multiplayer@0.8.5","maintainers":[{"name":"rabneba","email":"rabneba2@gmail.com"},{"name":"boozybats","email":"boozybats@icloud.com"},{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"}],"homepage":"https://github.com/me-ai-org/genex-demo#readme","bugs":{"url":"https://github.com/me-ai-org/genex-demo/issues"},"dist":{"shasum":"810d29ae3b49e95ed62e63da971739dfb2af8741","tarball":"https://registry.npmjs.org/@genex-ai/multiplayer/-/multiplayer-0.8.5.tgz","fileCount":6,"integrity":"sha512-5IHLBDIZyPrKaBin+8NcfKcc20A/MJkNcu82ZaTQG925QmcESsEeY0E6XTdfhU1/ukciAgvefOlzhvm+A9xP2w==","signatures":[{"sig":"MEYCIQC14hbaqhNl2lnhsSXmCoYYzx0O5z92dUyHwrt8ElLPagIhAMvfldOjRVZsZ8TUPljAQMYy5fQmq7MqOWY7CGej1+by","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62814},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@genex-ai/source":"./src/index.ts"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.js","@genex-ai/source":"./src/schema.ts"}},"gitHead":"1dde4b4480e6672cbe55437b3c04404f29fd7c32","scripts":{"build":"tsup","check":"pnpm build && publint && attw --pack . --profile esm-only","prepack":"pnpm build && publint","typecheck":"tsc --noEmit"},"_npmUser":{"name":"rabneba","email":"rabneba2@gmail.com"},"repository":{"url":"git+https://github.com/me-ai-org/genex-demo.git","type":"git","directory":"packages/multiplayer"},"_npmVersion":"11.16.0","description":"The multiplayer client wrapper + shared room schema for genex.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"colyseus.js":"^0.16.22","@colyseus/schema":"^3.0.76"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","publint":"^0.3.0","@arethetypeswrong/cli":"^0.18.0"},"peerDependencies":{"three":">=0.160.0"},"peerDependenciesMeta":{"three":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/multiplayer_0.8.5_1783506791757_0.09987306375785998","host":"s3://npm-registry-packages-npm-production"}},"0.8.6":{"name":"@genex-ai/multiplayer","version":"0.8.6","license":"MIT","_id":"@genex-ai/multiplayer@0.8.6","maintainers":[{"name":"rabneba","email":"rabneba2@gmail.com"},{"name":"boozybats","email":"boozybats@icloud.com"},{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"}],"homepage":"https://github.com/me-ai-org/genex-demo#readme","bugs":{"url":"https://github.com/me-ai-org/genex-demo/issues"},"dist":{"shasum":"dc20b8f36f4dd31a81deaed6886609f013cdccca","tarball":"https://registry.npmjs.org/@genex-ai/multiplayer/-/multiplayer-0.8.6.tgz","fileCount":6,"integrity":"sha512-3YBYYl9cfydED6d1KLHOIDYvCsPNqCBmn9yagRw6U5SztLb3gZJscnNdA2lsDnPfp5eLoFDl5iHcvHBPkHlLEA==","signatures":[{"sig":"MEUCIB7la9hrjc4ZJQnKzaaueJ679hZFE+jCiegkxbuWpa9fAiEAgFw2iwHOmkmvszlw5BVpug3Bmi9f0+Pu/IxPHYdbVjo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62957},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@genex-ai/source":"./src/index.ts"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.js","@genex-ai/source":"./src/schema.ts"}},"gitHead":"fa2ccc7e4cbffdc5946da906b701e0dcff1b6568","scripts":{"build":"tsup","check":"pnpm build && publint && attw --pack . --profile esm-only","prepack":"pnpm build && publint","typecheck":"tsc --noEmit"},"_npmUser":{"name":"rabneba","email":"rabneba2@gmail.com"},"repository":{"url":"git+https://github.com/me-ai-org/genex-demo.git","type":"git","directory":"packages/multiplayer"},"_npmVersion":"11.16.0","description":"The multiplayer client wrapper + shared room schema for genex.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"colyseus.js":"^0.16.22","@colyseus/schema":"^3.0.76"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","publint":"^0.3.0","@arethetypeswrong/cli":"^0.18.0"},"peerDependencies":{"three":">=0.160.0"},"peerDependenciesMeta":{"three":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/multiplayer_0.8.6_1783510403011_0.5953392422805841","host":"s3://npm-registry-packages-npm-production"}},"0.8.7":{"name":"@genex-ai/multiplayer","version":"0.8.7","license":"MIT","_id":"@genex-ai/multiplayer@0.8.7","maintainers":[{"name":"rabneba","email":"rabneba2@gmail.com"},{"name":"boozybats","email":"boozybats@icloud.com"},{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"}],"homepage":"https://github.com/me-ai-org/genex-demo#readme","bugs":{"url":"https://github.com/me-ai-org/genex-demo/issues"},"dist":{"shasum":"6f1ee386aa91ff726ab14961faa1e4409fe1a4ed","tarball":"https://registry.npmjs.org/@genex-ai/multiplayer/-/multiplayer-0.8.7.tgz","fileCount":6,"integrity":"sha512-nBtMQZ4IIYVVuSgj0lkhhQZUHZyV1iw5hk6Qau1QmY/dTpku9CYtxNcu9gItMYhPkZl9BU2zfL3xeRZcgvUUxQ==","signatures":[{"sig":"MEYCIQDn2+YA99/HV8hsopP9+SyJs/zlD+FFOS1MLSnyjRTrFQIhAJm/c1q4PlTHtMtfvTI/xK78z0hrklZ/o23FESxpt3Si","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63453},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@genex-ai/source":"./src/index.ts"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.js","@genex-ai/source":"./src/schema.ts"}},"gitHead":"8d1d78a5ba2a2877f41fbdbc7d34d2a49f951abc","scripts":{"build":"tsup","check":"pnpm build && publint && attw --pack . --profile esm-only","prepack":"pnpm build && publint","typecheck":"tsc --noEmit"},"_npmUser":{"name":"rabneba","email":"rabneba2@gmail.com"},"repository":{"url":"git+https://github.com/me-ai-org/genex-demo.git","type":"git","directory":"packages/multiplayer"},"_npmVersion":"11.16.0","description":"The multiplayer client wrapper + shared room schema for genex.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"colyseus.js":"^0.16.22","@colyseus/schema":"^3.0.76"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","publint":"^0.3.0","@arethetypeswrong/cli":"^0.18.0"},"peerDependencies":{"three":">=0.160.0"},"peerDependenciesMeta":{"three":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/multiplayer_0.8.7_1783548185167_0.5076550895292504","host":"s3://npm-registry-packages-npm-production"}},"0.8.8":{"name":"@genex-ai/multiplayer","version":"0.8.8","license":"MIT","_id":"@genex-ai/multiplayer@0.8.8","maintainers":[{"name":"rabneba","email":"rabneba2@gmail.com"},{"name":"boozybats","email":"boozybats@icloud.com"},{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"}],"homepage":"https://github.com/me-ai-org/genex-demo#readme","bugs":{"url":"https://github.com/me-ai-org/genex-demo/issues"},"dist":{"shasum":"78d789200d84b574ff775af906edb7a3e2d13a9c","tarball":"https://registry.npmjs.org/@genex-ai/multiplayer/-/multiplayer-0.8.8.tgz","fileCount":6,"integrity":"sha512-jHyeJ99o0xw2/LJWYqYK6cdd96UMTECh6jC4nfZtzeaySHaI+jcAXhBOFxvUY2VFfsXZNYVCI9zXkj40FcR7IQ==","signatures":[{"sig":"MEUCIBWagsUB8Rri6v1qZPpT844aAVVoCbOfgIzOGmZ2UVjLAiEAlbu/Z7V4qIQFPXS4+oeiYHTt3MrCDdzu64gud6FJx5M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64565},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@genex-ai/source":"./src/index.ts"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.js","@genex-ai/source":"./src/schema.ts"}},"gitHead":"1caafde21c1f55f019890d09e8aef236b63bcb34","scripts":{"build":"tsup","check":"pnpm build && publint && attw --pack . --profile esm-only","prepack":"pnpm build && publint","typecheck":"tsc --noEmit"},"_npmUser":{"name":"rabneba","email":"rabneba2@gmail.com"},"repository":{"url":"git+https://github.com/me-ai-org/genex-demo.git","type":"git","directory":"packages/multiplayer"},"_npmVersion":"11.16.0","description":"The multiplayer client wrapper + shared room schema for genex.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"colyseus.js":"^0.16.22","@colyseus/schema":"^3.0.76"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","publint":"^0.3.0","@arethetypeswrong/cli":"^0.18.0"},"peerDependencies":{"three":">=0.160.0"},"peerDependenciesMeta":{"three":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/multiplayer_0.8.8_1783613271746_0.32317733217973466","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@genex-ai/multiplayer","version":"0.9.0","license":"MIT","_id":"@genex-ai/multiplayer@0.9.0","maintainers":[{"name":"rabneba","email":"rabneba2@gmail.com"},{"name":"boozybats","email":"boozybats@icloud.com"},{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"}],"homepage":"https://github.com/me-ai-org/genex-demo#readme","bugs":{"url":"https://github.com/me-ai-org/genex-demo/issues"},"dist":{"shasum":"ca6a9c918ed2b489f8a98fa51c7be36ee2e09d27","tarball":"https://registry.npmjs.org/@genex-ai/multiplayer/-/multiplayer-0.9.0.tgz","fileCount":6,"integrity":"sha512-We98xPjsWM9zmlB0uF0EHwZet93ILvWrKz9OuRlNe0V5X+AfkAg90XV+v9CEqoCL4SNd5NJuKwjzMHrGw1xowA==","signatures":[{"sig":"MEYCIQDnf20lFyl3ZcfwrUQeumbO0cH/2ayTfBkHZfM0IzHXgQIhAME/Ali7UwPTgPBtPre1GRNmiCCaGFliVZ2IMZ4lDv+P","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":81065},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@genex-ai/source":"./src/index.ts"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.js","@genex-ai/source":"./src/schema.ts"}},"gitHead":"7c5fe092323dfe9d9cbb1492a23d5009a3fea2ae","scripts":{"build":"tsup","check":"pnpm build && publint && attw --pack . --profile esm-only","prepack":"pnpm build && publint","typecheck":"tsc --noEmit"},"_npmUser":{"name":"rabneba","email":"rabneba2@gmail.com"},"repository":{"url":"git+https://github.com/me-ai-org/genex-demo.git","type":"git","directory":"packages/multiplayer"},"_npmVersion":"11.16.0","description":"The multiplayer client wrapper + shared room schema for genex.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"colyseus.js":"^0.16.22","@colyseus/schema":"^3.0.76"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","publint":"^0.3.0","@arethetypeswrong/cli":"^0.18.0"},"peerDependencies":{"three":">=0.160.0"},"peerDependenciesMeta":{"three":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/multiplayer_0.9.0_1783678228087_0.30638228714853644","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@genex-ai/multiplayer","version":"0.10.0","license":"MIT","_id":"@genex-ai/multiplayer@0.10.0","maintainers":[{"name":"rabneba","email":"rabneba2@gmail.com"},{"name":"boozybats","email":"boozybats@icloud.com"},{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"}],"homepage":"https://github.com/me-ai-org/genex-demo#readme","bugs":{"url":"https://github.com/me-ai-org/genex-demo/issues"},"dist":{"shasum":"31f138433e73187af78f7414e0c6c8dd2568260a","tarball":"https://registry.npmjs.org/@genex-ai/multiplayer/-/multiplayer-0.10.0.tgz","fileCount":6,"integrity":"sha512-p91dCaKwb8C8KwGHICOMiDWRjGjAlL6/Z2W4AP47Xaa9lVWgE0OwA7CxSxYDIoTPEAf2PC8o1Om500xF6bzhqg==","signatures":[{"sig":"MEUCIA3Q1fGs41REjGpHiQUJ69Zc2HbxTRJXZEOrB7oy6X9/AiEAgvGRlf6v/4U9z0lcJan+BKEYvRMQM+bknKm9A4sDADw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":81560},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@genex-ai/source":"./src/index.ts"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.js","@genex-ai/source":"./src/schema.ts"}},"gitHead":"29ef0fd52a3404fa3750288b84c9564fe4b713de","scripts":{"build":"tsup","check":"pnpm build && publint && attw --pack . --profile esm-only","prepack":"pnpm build && publint","typecheck":"tsc --noEmit"},"_npmUser":{"name":"rabneba","email":"rabneba2@gmail.com"},"repository":{"url":"git+https://github.com/me-ai-org/genex-demo.git","type":"git","directory":"packages/multiplayer"},"_npmVersion":"11.16.0","description":"The multiplayer client wrapper + shared room schema for genex.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@colyseus/sdk":"^0.17.43","@colyseus/schema":"^4.0.27"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","publint":"^0.3.0","@arethetypeswrong/cli":"^0.18.0"},"peerDependencies":{"three":">=0.160.0"},"peerDependenciesMeta":{"three":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/multiplayer_0.10.0_1783925795494_0.5900657689838538","host":"s3://npm-registry-packages-npm-production"}},"0.10.1":{"name":"@genex-ai/multiplayer","version":"0.10.1","license":"MIT","_id":"@genex-ai/multiplayer@0.10.1","maintainers":[{"name":"rabneba","email":"rabneba2@gmail.com"},{"name":"boozybats","email":"boozybats@icloud.com"},{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"}],"homepage":"https://github.com/me-ai-org/genex-demo#readme","bugs":{"url":"https://github.com/me-ai-org/genex-demo/issues"},"dist":{"shasum":"71ee2a42f0ee858a9e9a507f85309b45798fc6c9","tarball":"https://registry.npmjs.org/@genex-ai/multiplayer/-/multiplayer-0.10.1.tgz","fileCount":6,"integrity":"sha512-XmWPSMqamJoh8gTC8wWG1rUi85KeLc9zzWrysBahSALL7u3LCbOl4yOg3zJlTJkG+7digGfbTKq1ULIFRlau0Q==","signatures":[{"sig":"MEUCIF9ua9rfTKz/2JOGU7B2wfrL3nxhuR4Fpd+yYqdxHDeIAiEA+yHUM0lBymVx9COBKJc5oE08FYOwFqoJ5NcgTJFUpqE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":84704},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@genex-ai/source":"./src/index.ts"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.js","@genex-ai/source":"./src/schema.ts"}},"gitHead":"cdf199931d31799b3252591de52d37dd12f64f41","scripts":{"build":"tsup","check":"pnpm build && publint && attw --pack . --profile esm-only","prepack":"pnpm build && publint","typecheck":"tsc --noEmit"},"_npmUser":{"name":"rabneba","email":"rabneba2@gmail.com"},"repository":{"url":"git+https://github.com/me-ai-org/genex-demo.git","type":"git","directory":"packages/multiplayer"},"_npmVersion":"11.16.0","description":"The multiplayer client wrapper + shared room schema for genex.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@colyseus/sdk":"^0.17.43","@colyseus/schema":"^4.0.27"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","publint":"^0.3.0","@arethetypeswrong/cli":"^0.18.0"},"peerDependencies":{"three":">=0.160.0"},"peerDependenciesMeta":{"three":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/multiplayer_0.10.1_1784114227994_0.01430235082001241","host":"s3://npm-registry-packages-npm-production"}},"0.10.2":{"name":"@genex-ai/multiplayer","version":"0.10.2","license":"MIT","_id":"@genex-ai/multiplayer@0.10.2","maintainers":[{"name":"rabneba","email":"rabneba2@gmail.com"},{"name":"boozybats","email":"boozybats@icloud.com"},{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"}],"homepage":"https://github.com/me-ai-org/genex-demo#readme","bugs":{"url":"https://github.com/me-ai-org/genex-demo/issues"},"dist":{"shasum":"4868d8b6538018d9098d2bf27d96f2f6cd1dbfa4","tarball":"https://registry.npmjs.org/@genex-ai/multiplayer/-/multiplayer-0.10.2.tgz","fileCount":6,"integrity":"sha512-aynt9iTmCvUnruqSI8MnGiJHsxDhPA8Vb9kC/rHKOdJerBghTH1MrVx7r2wsslveRKO3Akj3e7AtTkFwXphaDw==","signatures":[{"sig":"MEQCIFoFwBYazNVvVvqHo/Mj2Cd8vclqEOj0mvS30UeHw7bWAiB+EQ7Eu5128xin8iQRKmzeEYfhfLLcmwx9FKr7yStcHA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":86386},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@genex-ai/source":"./src/index.ts"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.js","@genex-ai/source":"./src/schema.ts"}},"gitHead":"90266ee093596b4b00c00e0b617fc80f11618ccc","scripts":{"build":"tsup","check":"pnpm build && publint && attw --pack . --profile esm-only","prepack":"pnpm build && publint","typecheck":"tsc --noEmit"},"_npmUser":{"name":"rabneba","email":"rabneba2@gmail.com"},"repository":{"url":"git+https://github.com/me-ai-org/genex-demo.git","type":"git","directory":"packages/multiplayer"},"_npmVersion":"11.16.0","description":"The multiplayer client wrapper + shared room schema for genex.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@colyseus/sdk":"^0.17.43","@colyseus/schema":"^4.0.27"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","publint":"^0.3.0","@arethetypeswrong/cli":"^0.18.0"},"peerDependencies":{"three":">=0.160.0"},"peerDependenciesMeta":{"three":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/multiplayer_0.10.2_1784133853101_0.46378319853408567","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@genex-ai/multiplayer","version":"0.11.0","license":"MIT","_id":"@genex-ai/multiplayer@0.11.0","maintainers":[{"name":"rabneba","email":"rabneba2@gmail.com"},{"name":"boozybats","email":"boozybats@icloud.com"},{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"}],"homepage":"https://github.com/me-ai-org/genex-demo#readme","bugs":{"url":"https://github.com/me-ai-org/genex-demo/issues"},"dist":{"shasum":"aecd5505625b8d06de68b76f9d306828e60a13c1","tarball":"https://registry.npmjs.org/@genex-ai/multiplayer/-/multiplayer-0.11.0.tgz","fileCount":6,"integrity":"sha512-VqHg0bOGMS73BlC2sPF4NTW/Hs3GKsGkuecYORPV60te6th7K2+1yIOWV4tnfQlZ4Yztc5L3kF0dpaepiF3McA==","signatures":[{"sig":"MEQCIEpJaxuABpyHbNr65fHY8W/v9qs7ZGyIEpSDnaLg2hh5AiAJkKibXCwAonL/63KSj6/oDEvpmwFOpGXXQPfIURXc8g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87026},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@genex-ai/source":"./src/index.ts"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.js","@genex-ai/source":"./src/schema.ts"}},"gitHead":"9344960621149aa2dac3593487e8683365226d8e","scripts":{"build":"tsup","check":"pnpm build && publint && attw --pack . --profile esm-only","prepack":"pnpm build && publint","typecheck":"tsc --noEmit"},"_npmUser":{"name":"rabneba","email":"rabneba2@gmail.com"},"repository":{"url":"git+https://github.com/me-ai-org/genex-demo.git","type":"git","directory":"packages/multiplayer"},"_npmVersion":"11.16.0","description":"The multiplayer client wrapper + shared room schema for genex.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@colyseus/sdk":"^0.17.43","@colyseus/schema":"^4.0.27"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","publint":"^0.3.0","@arethetypeswrong/cli":"^0.18.0"},"peerDependencies":{"three":">=0.160.0"},"peerDependenciesMeta":{"three":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/multiplayer_0.11.0_1784202040256_0.12429463120718243","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@genex-ai/multiplayer","version":"0.12.0","license":"MIT","_id":"@genex-ai/multiplayer@0.12.0","maintainers":[{"name":"rabneba","email":"rabneba2@gmail.com"},{"name":"boozybats","email":"boozybats@icloud.com"},{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"}],"homepage":"https://github.com/me-ai-org/genex-demo#readme","bugs":{"url":"https://github.com/me-ai-org/genex-demo/issues"},"dist":{"shasum":"09dd0c8e79c4166f5dbb09821eebaa284b5f2538","tarball":"https://registry.npmjs.org/@genex-ai/multiplayer/-/multiplayer-0.12.0.tgz","fileCount":6,"integrity":"sha512-1k/4gib+RcDw72YdukL9DPxMF5QEM9MRCPiNDu+gYGCVYPgIDMEv1Sbo2YGoRpHOGDd3YNj3408Gd/G3kuKoJw==","signatures":[{"sig":"MEQCIC0jby4r9EdahpcRce+j+M5x6+AxpFLLAAANTGy4+LoBAiAKhhSmGtmaDxTcAR7eQwSjwUc0GCSRlRi3OokdIWsr7w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":88528},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@genex-ai/source":"./src/index.ts"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.js","@genex-ai/source":"./src/schema.ts"}},"gitHead":"d2b5b89dbf007abb6573e6db14000167528c29d8","scripts":{"build":"tsup","check":"pnpm build && publint && attw --pack . --profile esm-only","prepack":"pnpm build && publint","typecheck":"tsc --noEmit"},"_npmUser":{"name":"rabneba","email":"rabneba2@gmail.com"},"repository":{"url":"git+https://github.com/me-ai-org/genex-demo.git","type":"git","directory":"packages/multiplayer"},"_npmVersion":"11.16.0","description":"The multiplayer client wrapper + shared room schema for genex.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@colyseus/sdk":"^0.17.43","@colyseus/schema":"^4.0.27"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","publint":"^0.3.0","@arethetypeswrong/cli":"^0.18.0"},"peerDependencies":{"three":">=0.160.0"},"peerDependenciesMeta":{"three":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/multiplayer_0.12.0_1784285042447_0.7622824452805286","host":"s3://npm-registry-packages-npm-production"}},"0.12.1":{"name":"@genex-ai/multiplayer","version":"0.12.1","license":"MIT","_id":"@genex-ai/multiplayer@0.12.1","maintainers":[{"name":"rabneba","email":"rabneba2@gmail.com"},{"name":"boozybats","email":"boozybats@icloud.com"},{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"}],"homepage":"https://github.com/me-ai-org/genex-demo#readme","bugs":{"url":"https://github.com/me-ai-org/genex-demo/issues"},"dist":{"shasum":"0665f655209971be6094d990ad57cfafc0e221ae","tarball":"https://registry.npmjs.org/@genex-ai/multiplayer/-/multiplayer-0.12.1.tgz","fileCount":6,"integrity":"sha512-3ozbF1A4Keui0ii0+Hu89H3shISCc9RRYXtVe/hr7aD8jd5Rt1zNkIu8fzVApfgNP8xOaUVLsX3I5z1VP7h/kg==","signatures":[{"sig":"MEYCIQD6YlmIb/4oS6OJZ4ISVPvEvEDvRCdFR0lzEdkTsg8ugQIhAO0Q5OgtQjaBoTtdoMRVrzn9XjPpRcsnncsfWwbXKYaf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":88783},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@genex-ai/source":"./src/index.ts"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.js","@genex-ai/source":"./src/schema.ts"}},"gitHead":"18348ef0e7cb2777a3a07cf26e32d42d99108265","scripts":{"build":"tsup","check":"pnpm build && publint && attw --pack . --profile esm-only","prepack":"pnpm build && publint","typecheck":"tsc --noEmit"},"_npmUser":{"name":"rabneba","email":"rabneba2@gmail.com"},"repository":{"url":"git+https://github.com/me-ai-org/genex-demo.git","type":"git","directory":"packages/multiplayer"},"_npmVersion":"11.16.0","description":"The multiplayer client wrapper + shared room schema for genex.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@colyseus/sdk":"^0.17.43","@colyseus/schema":"^4.0.27"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","publint":"^0.3.0","@arethetypeswrong/cli":"^0.18.0"},"peerDependencies":{"three":">=0.160.0"},"peerDependenciesMeta":{"three":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/multiplayer_0.12.1_1784997934190_0.07369080187969157","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@genex-ai/multiplayer","version":"0.13.0","license":"MIT","_id":"@genex-ai/multiplayer@0.13.0","maintainers":[{"name":"rabneba","email":"rabneba2@gmail.com"},{"name":"boozybats","email":"boozybats@icloud.com"},{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"}],"homepage":"https://github.com/me-ai-org/genex-demo#readme","bugs":{"url":"https://github.com/me-ai-org/genex-demo/issues"},"dist":{"shasum":"0f2ac06ae8e65485024b24b40db1e5ad2b2b37f6","tarball":"https://registry.npmjs.org/@genex-ai/multiplayer/-/multiplayer-0.13.0.tgz","fileCount":6,"integrity":"sha512-76GLCgS96ElQyowXe3JC04RCx3ei3n+7JkdnVbP6B1aMRHuktcVZWhMycdqkzmfP1xLdNrrKjNsWeXWTrst87g==","signatures":[{"sig":"MEUCIGEvUx31dySsUi4xPjRDRdnynCYGzw27PIgpHZtLFFOCAiEA4x4JdigtDgFFFiB7sGN6E2R/PLw6J1a+xTRJ8HoJgr4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":89607},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@genex-ai/source":"./src/index.ts"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.js","@genex-ai/source":"./src/schema.ts"}},"gitHead":"40b9cb91021834cc5873873eb048c7fb1b50f27a","scripts":{"build":"tsup","check":"pnpm build && publint && attw --pack . --profile esm-only","prepack":"pnpm build && publint","typecheck":"tsc --noEmit"},"_npmUser":{"name":"rabneba","email":"rabneba2@gmail.com"},"repository":{"url":"git+https://github.com/me-ai-org/genex-demo.git","type":"git","directory":"packages/multiplayer"},"_npmVersion":"11.16.0","description":"The multiplayer client wrapper + shared room schema for genex.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@colyseus/sdk":"^0.17.43","@colyseus/schema":"^4.0.27"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","publint":"^0.3.0","@arethetypeswrong/cli":"^0.18.0"},"peerDependencies":{"three":">=0.160.0"},"peerDependenciesMeta":{"three":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/multiplayer_0.13.0_1785188520234_0.35692950354851494","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"@genex-ai/multiplayer","version":"0.15.0","license":"MIT","_id":"@genex-ai/multiplayer@0.15.0","maintainers":[{"name":"rabneba","email":"rabneba2@gmail.com"},{"name":"boozybats","email":"boozybats@icloud.com"},{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"}],"homepage":"https://github.com/me-ai-org/genex-demo#readme","bugs":{"url":"https://github.com/me-ai-org/genex-demo/issues"},"dist":{"shasum":"a69e59130068ac8da2a7cd4dc53bee729c7b5152","tarball":"https://registry.npmjs.org/@genex-ai/multiplayer/-/multiplayer-0.15.0.tgz","fileCount":6,"integrity":"sha512-ZHfwnhM9L2FVbHN/EnKAa3zJ/ZPiVb9tlf3VlZD7TZf4joNpCYNpTqbjhSbuhQ+tUQj8LTDDTJ+VOferKAZ3ww==","signatures":[{"sig":"MEUCIQDOqnZjwvzmPpG3k8azrvoH8pZc1tVhyp6qNknk01mQcwIgDmxeMysvM6qMI1OmnAttTH5u3jtLm2/eHl7Uk/CXrkk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":113598},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@genex-ai/source":"./src/index.ts"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.js","@genex-ai/source":"./src/schema.ts"}},"gitHead":"1bb0709c5c390f3ea40e6b4e04eefcbea78d3a19","scripts":{"build":"tsup","check":"pnpm build && publint && attw --pack . --profile esm-only","prepack":"pnpm build && publint","typecheck":"tsc --noEmit"},"_npmUser":{"name":"rabneba","email":"rabneba2@gmail.com"},"repository":{"url":"git+https://github.com/me-ai-org/genex-demo.git","type":"git","directory":"packages/multiplayer"},"_npmVersion":"11.16.0","description":"The multiplayer client wrapper + shared room schema for genex.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@colyseus/sdk":"^0.17.43","@colyseus/schema":"^4.0.27"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","publint":"^0.3.0","typescript":"^5.8.0","@arethetypeswrong/cli":"^0.18.0"},"peerDependencies":{"three":">=0.160.0"},"peerDependenciesMeta":{"three":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/multiplayer_0.15.0_1786458448496_0.9801852604756698","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"@genex-ai/multiplayer","version":"0.16.0","license":"MIT","_id":"@genex-ai/multiplayer@0.16.0","maintainers":[{"name":"rabneba","email":"rabneba2@gmail.com"},{"name":"boozybats","email":"boozybats@icloud.com"},{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"}],"homepage":"https://github.com/me-ai-org/genex-demo#readme","bugs":{"url":"https://github.com/me-ai-org/genex-demo/issues"},"dist":{"shasum":"a5f05e8b5aa2c34ba1cde31027928a4ae0865593","tarball":"https://registry.npmjs.org/@genex-ai/multiplayer/-/multiplayer-0.16.0.tgz","fileCount":6,"integrity":"sha512-gB/AmIj9thBVyz+dBTFbZTghHyZKPCUNoQJY1OfFBfInkJXiCqa3Z4YA4hJudNiD3Uyf9Vs+dbWTMCmCIHL0+g==","signatures":[{"sig":"MEQCIA69X2qOHDhi3dfQqJWVoSo4C9x20fV6sLqb2AwJl95MAiB3HbJY7JhPsgdSChewUPHZRbfoodp0vaMAICl6GTnSwA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":118461},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@genex-ai/source":"./src/index.ts"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.js","@genex-ai/source":"./src/schema.ts"}},"gitHead":"3c500974f2b874c9d49247adcde2a1a8124cc64f","scripts":{"test":"node --test test/*.test.ts","build":"tsup","check":"pnpm build && publint && attw --pack . --profile esm-only","prepack":"pnpm build && publint","typecheck":"tsc --noEmit"},"_npmUser":{"name":"rabneba","email":"rabneba2@gmail.com"},"repository":{"url":"git+https://github.com/me-ai-org/genex-demo.git","type":"git","directory":"packages/multiplayer"},"_npmVersion":"11.17.0","description":"The multiplayer client wrapper + shared room schema for genex.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@colyseus/sdk":"^0.17.43","@colyseus/schema":"^4.0.27"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","publint":"^0.3.0","typescript":"^5.8.0","@arethetypeswrong/cli":"^0.18.0"},"peerDependencies":{"three":">=0.160.0"},"peerDependenciesMeta":{"three":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/multiplayer_0.16.0_1787318434471_0.45842237336730074","host":"s3://npm-registry-packages-npm-production"}},"0.16.1":{"_id":"@genex-ai/multiplayer@0.16.1","bugs":{"url":"https://github.com/genex-games/genex/issues"},"dist":{"shasum":"18e0869eca8b382371c42a85aeb774cd1e10cb5d","tarball":"https://registry.npmjs.org/@genex-ai/multiplayer/-/multiplayer-0.16.1.tgz","fileCount":6,"integrity":"sha512-K8XJ+nN3s1DX3YOHvLwIJiMqnVILCEXrp2GCKtZeEDp6jtwgcS3KVctr8dxXUtFvgduxbPwADxu5c1FXOB6DnQ==","signatures":[{"sig":"MEUCIQDrOYwe35c4XRypB2UHtbFYuT+eTab0KOqAoqlCsPGs8AIgfun/DoPQe13rHkxLCp5fLMajABPgPFz3Pmkst08ZtN4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIA4a8gGVR4+WyIBLUn7lwSVs/eE2YPZRrbxywP2iyUcbAiBQoE9qUohid20yRRbIQovXiDWN2SLN7R0pcouAUjHWDw=="}],"unpackedSize":118421},"main":"./dist/index.js","name":"@genex-ai/multiplayer","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","@genex-ai/source":"./src/index.ts"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.js","@genex-ai/source":"./src/schema.ts"}},"gitHead":"16c166229d743308f204ee7f1a4dd9cfc3aa3ca6","license":"MIT","scripts":{"test":"node --test test/*.test.ts","build":"tsup","check":"pnpm build && publint && attw --pack . --profile esm-only","prepack":"pnpm build && publint","typecheck":"tsc --noEmit"},"version":"0.16.1","_npmUser":{"name":"rabneba","email":"rabneba2@gmail.com"},"homepage":"https://github.com/genex-games/genex#readme","repository":{"url":"git+https://github.com/genex-games/genex.git","type":"git"},"_npmVersion":"11.19.0","description":"The multiplayer client wrapper + shared room schema for genex.","directories":{},"maintainers":[{"name":"rabneba","email":"rabneba2@gmail.com"},{"name":"boozybats","email":"boozybats@icloud.com"},{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"}],"_nodeVersion":"24.20.0","dependencies":{"@colyseus/sdk":"^0.17.43","@colyseus/schema":"^4.0.27"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","publint":"^0.3.0","typescript":"^5.8.0","@arethetypeswrong/cli":"^0.18.0"},"peerDependencies":{"three":">=0.160.0"},"peerDependenciesMeta":{"three":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/multiplayer_0.16.1_1789568732692_0.41914652761725946"}}},"time":{"created":"2026-06-26T15:41:25.082Z","modified":"2026-09-16T14:25:32.957Z","0.1.0":"2026-06-26T15:41:25.431Z","0.2.0":"2026-06-30T10:35:27.793Z","0.2.1":"2026-06-30T11:19:42.713Z","0.2.2":"2026-06-30T12:15:25.883Z","0.2.6":"2026-07-01T11:28:58.497Z","0.4.0":"2026-07-02T23:53:38.186Z","0.4.1":"2026-07-06T11:01:26.496Z","0.7.0":"2026-07-06T13:02:42.716Z","0.8.0":"2026-07-06T17:18:27.821Z","0.7.1":"2026-07-06T19:49:42.270Z","0.8.1":"2026-07-07T09:49:07.038Z","0.8.2":"2026-07-07T15:18:17.266Z","0.8.3":"2026-07-07T16:58:53.148Z","0.8.4":"2026-07-07T21:29:28.824Z","0.8.5":"2026-07-08T10:33:11.908Z","0.8.6":"2026-07-08T11:33:23.183Z","0.8.7":"2026-07-08T22:03:05.309Z","0.8.8":"2026-07-09T16:07:52.011Z","0.9.0":"2026-07-10T10:10:28.222Z","0.10.0":"2026-07-13T06:56:35.651Z","0.10.1":"2026-07-15T11:17:08.150Z","0.10.2":"2026-07-15T16:44:13.276Z","0.11.0":"2026-07-16T11:40:40.388Z","0.12.0":"2026-07-17T10:44:02.583Z","0.12.1":"2026-07-25T16:45:34.333Z","0.13.0":"2026-07-27T21:42:00.389Z","0.15.0":"2026-08-11T14:27:28.627Z","0.16.0":"2026-08-21T13:20:34.647Z","0.16.1":"2026-09-16T14:25:32.797Z"},"bugs":{"url":"https://github.com/genex-games/genex/issues"},"license":"MIT","homepage":"https://github.com/genex-games/genex#readme","repository":{"url":"git+https://github.com/genex-games/genex.git","type":"git"},"description":"The multiplayer client wrapper + shared room schema for genex.","maintainers":[{"name":"rabneba","email":"rabneba2@gmail.com"},{"name":"boozybats","email":"boozybats@icloud.com"},{"name":"vanyathecyborg","email":"slyshadowww@gmail.com"}],"readme":"# @genex-ai/multiplayer\n\nTiny realtime multiplayer for genex games.\n\n**Relay model:** whatever you write to `me` or `shared` is synced to everyone; everything else stays local. The server does **no physics, no prediction** — you run your own game logic, this just shares state. Remote players are **smoothed automatically** (client-side entity interpolation — see [Smoothing remote players](#smoothing-remote-players)).\n\n```ts\nimport { connect } from '@genex-ai/multiplayer';\n```\n\n---\n\n## Connect\n\n```ts\nimport { waitForPlayer, getColyseusAuth, getColyseusUrls } from '@genex-ai/embed-sdk';\n\ntype State = { x: number; y: number; z: number };   // YOUR per-player state — any JSON shape\n\nawait waitForPlayer();                        // identity gate — resolves for guests AND accounts\nconst room = await connect<State>({\n  urls: getColyseusUrls(),          // regional relays for this session — SDK joins the fastest\n  room: '<game-id>',                          // everyone with the same id shares a room (use the project slug)\n  name: 'ada',                                // optional display name\n  auth: () => getColyseusAuth(),              // REQUIRED — resolved fresh for this connect\n});\n```\n\n`auth` is **required** — the relay rejects tokenless joins. Get it from `@genex-ai/embed-sdk`:\n`await waitForPlayer()` first (never `waitForAuth()` — that resolves only for signed-in accounts\nand keeps guests out forever), then pass `() => getColyseusAuth()` so each explicit\n`connect()` reads it fresh — tokens rotate every ~10 min, so never cache the object\nacross reconnects. Never log it.\n\nDifferent `room` ids are **fully isolated** — players in game A never see game B.\n\n`connect()` joins immediately. Use it for one ongoing drop-in world. If the game has a\nPlay/Online/Local/Bots menu, call it only after the online click and call `room.leave()` when the\nplayer returns to the offline menu. Immediate connect + spawn is valid only when loading the game\nalready means joining the always-online world; do not put a fake Play screen in front of a player\nwho is already present. Use `matchmake()` below for fresh bounded sessions with queue/quorum/fair\nstart/backfill behavior.\n\n---\n\n## `me` — publish your own state\n\nReplaces your state wholesale. Call on a **fixed tick (~10–20Hz)**, not every render frame — each call is one network message.\n\n```ts\nroom.me.set({ x, y, z });\nroom.me.snap({ x: spawnX, y: spawnY, z: spawnZ }); // respawn/teleport: hard-reset remote history\n```\n\n## `players` — everyone in the room\n\nA fresh `Map` each read; **includes you** (skip with `id === room.id`). For remote players `p.state` is **auto-smoothed** (interpolated); for yourself it's live. `p.stateRaw` is always the latest raw snapshot (use it for hit-tests / logic). A reserved reconnecting seat stays in `players` with `p.connected === false`; use `room.activePlayers` when gameplay needs the live transport quorum.\n\n```ts\nfor (const [id, p] of room.players) {\n  if (id === room.id) continue;\n  draw(p.name, p.state.x, p.state.y, p.state.z);   // p.state is typed as State\n}\n```\n\nRemote players glide instead of teleporting between network updates — see **[Smoothing remote players](#smoothing-remote-players)**.\n\nEach player also carries `p.avatarUrl` — the VRM avatar that player picked on their genex profile (guests get a per-session pick), verified server-side from their identity token so it can't be spoofed. It's the **fallback** body, not the default one: in a game that generated its own character, every player wears that character, and `p.avatarUrl` renders each player's own look only when the game has none. The genex controller kit's `loadRemotePlayerCharacter({ avatarUrl: p.avatarUrl })` makes that decision for you and shares one parsed base across remotes. The field is `''` when unknown (older relay/API), so always keep a bundled fallback. Don't put an avatar URL in your `me.set` state — this field replaces that.\n\n## `shared` — shared room state\n\nA key/value store (any JSON) synced to everyone. Use for world state, scores, the current round, etc.\n\n```ts\nroom.shared.set('round', 3);\nroom.shared.get('round');   // 3\nroom.shared.keys();         // ['round', ...]\n```\n\n## `objects` — shared objects nobody owns until claimed\n\nFor a **ball, a puck, an NPC** — a moving thing that isn't any one player. Exactly one client\n**owns** an object at a time (the server enforces it); the owner simulates it and `set`s it, and\neveryone else reads it **auto-smoothed**, on the same interpolation as remote players. Ownership\nsurvives the owner leaving — the object is reassigned to the room host.\n\n```ts\n// Legacy fire-and-forget claim: optimistic locally, corrected by the relay if rejected.\nif (iTouched) room.objects.claim('ball');\n\n// Irreversible action: wait for the authoritative result.\nconst result = await room.objects.claimConfirmed('ball');\nif (result.accepted) applyKick();\nelse if (result.reason === 'held') retryWhileStillTouching(result.retryAfterMs);\n\nif (room.objects.get('ball')?.isMine) {\n  room.objects.set('ball', simulateBall());        // only the owner's writes land\n}\nconst ball = room.objects.get('ball');             // { owner, isMine, epoch, state, stateRaw }\ndrawBall(ball.state);                              // smoothed for everyone (live for the owner)\n\nroom.objects.release('ball');                      // give it up (stays until reclaimed)\nroom.objects.remove('bullet');                     // destroy transient objects when done\n\nawait room.objects.releaseConfirmed('ball');       // acknowledged + idempotent under reconnect\nawait room.objects.removeConfirmed('bullet');      // acknowledged owner-only removal\n\n// Deliberate discontinuity: one hard reseed, never an old-to-new interpolation sweep.\nroom.objects.snap('ball', { x: 0, y: 1, z: 0, q: [0, 0, 0, 1] });\n```\n\nKeep object state **flat** (top-level numbers + a 4-number quaternion) so it smooths, same as a\nplayer. `state` is render-only and smoothed; `stateRaw` is the raw latest for every gameplay read\n(hit-tests, reach, pickups, physics adoption, discrete values). `objects.ids()` lists them.\n`objects.set()` and `objects.snap()` are owner-only: SDK 0.10.2+ ignores an unowned call and warns\nonce per object/operation. Await `claimConfirmed()` and check `accepted` before an irreversible\nwrite; legacy `claim(); set()` remains valid because `claim()` is optimistic locally.\n\nThe relay enforces a short minimum ownership hold to prevent contact thrash. A current-owner\nreassert is a true no-op: it does not extend that hold. Legacy `claim()` remains optimistic for\n0.8.x compatibility; use the confirmed methods when feedback, impulses, seats, scoring, release,\nor removal must not lie. Confirmed requests have stable request ids internally and are resent after\na reconnect, so an accepted operation is idempotent. A rejected result reports the current owner and,\nfor `held`, `retryAfterMs`.\n\nA `timeout` result means the outcome is **unknown**, not \"failed\": the relay may have applied the\noperation and only the answer was lost. Shared owner truth (`objects.get(id)?.isMine` /\n`owner`) converges through the state mirror regardless — treat it, not the timed-out promise, as\nauthoritative before tearing anything down. On a relay that predates protocol v2, `me.snap` /\n`objects.snap` degrade gracefully: the discontinuity write itself is not stored (peers converge on\nyour next ordinary `set`, without the history reset) — which is why the relay must be upgraded\nbefore games ship an SDK that relies on snaps (see the migration note).\n\n`claimConfirmed(id)` is an ordinary fair player claim, including when the caller happens to be host.\nOnly host-owned lifecycle work such as initial seeding or a goal reset should request\n`claimConfirmed(id, { authority: 'host' })`; the relay accepts that bypass only from the current host.\nWhen it actually bypasses an active hold the result reason is `host-authority`; a non-host request is\nrejected as `not-host`. Do not use host authority for ordinary host-player collisions.\n\n`me.snap` and `objects.snap` are for discontinuities only: respawn, teleport, reset, or a player mode\nedge such as exiting a vehicle. Ordinary movement must use `set`, otherwise motion will visibly snap.\n\n## `isHost` / `host` — the elected room authority\n\nOne client is the **host** — the earliest **signed-in** player still present (guests host only\nwhile no account is in the room), re-elected automatically. The host can change on **join** as\nwell as leave: the first account entering a guest-hosted room takes over. Use it to pick a single\nwriter for scores/rounds or a single simulator for NPCs.\n\n```ts\nif (room.isHost) room.shared.set('round', nextRound);   // only the host advances the round\nroom.on('host', (id) => {});                             // host changed (migration)\n```\n\n`isHost`/`host` settle within the first patch after `connect()` — read them in your loop (or react\nto `on('host')`), not once at startup.\n\n## `on` — events\n\n```ts\nroom.on('join',   (id, state) => {});  // a player appeared (also fires for YOU on connect)\nroom.on('change', (id, state) => {});  // a player updated their me-state\nroom.on('leave',  (id)        => {});  // a player left\nroom.on('shared', (key, value) => {}); // a shared key changed\nroom.on('object', (id)        => {});  // an object's owner changed — the render glides across it (soft handoff)\nroom.on('host',   (id)        => {});  // the room host changed\nroom.on('hit',    (payload)   => {});  // a custom event someone sent (see `send`)\n\nroom.on('reconnecting', ({ attempt }) => {}); // connection dropped — auto-reconnect underway\nroom.on('reconnected',  ()            => {}); // back in the SAME seat: id, objects, host intact\nroom.on('disconnect',   (code)        => {}); // terminal — connect() fresh to play again\n```\n\n`on(...)` returns an unsubscribe function.\n\n## Reconnection (automatic)\n\nA dropped socket (Wi-Fi blip, brief signal loss) is **not** immediately a leave: the relay holds your\nseat for a grace window (~30s) and the SDK reconnects with backoff. A short blip keeps the same session\nid, owned objects, and host status. Simulation availability is a separate lease: if the disconnected\nseat is host for longer than the relay's short host-failover grace, an active peer becomes host and\nhost-owned objects move once. A returning old host keeps its seat but does not steal authority back.\nHost-tick callbacks pause while their socket is reconnecting and resume only if that session still owns\nthe host role. After a long reconnect, remote interpolation histories are rebased to current truth so\nthey cannot draw a whole-map catch-up streak.\n\nRender `reconnecting`/`reconnected` as an overlay and keep your loop running. `disconnect` is terminal\n(server restart, revoked session, or the link never recovered): read a fresh token and `connect()`\nagain. A deliberate `leave()` never reconnects. The relay also broadcasts `server:restart` right before\na deploy — flush saves when you see it.\n\n**One seat per player:** the relay enforces a single session per identity per room — a\nsecond tab / device / reloaded page supersedes the previous session (old one gets\n`disconnect`, code 4409), so the same player never appears twice and reloads never leave\na ghost. Reload/close sockets (\"going away\") get only a ~5s seat-hold; genuine network\ndrops keep the full reconnection grace.\n\n## `inputs` + `onHostTick` — host-authoritative physics (contested objects)\n\nClaim-on-touch fits any **ownable** body (a ball, a box, a prop) — even when players take turns\nbumping it, because the ownership **handoff glides** (a soft handoff, since 0.8.4) instead of\nteleporting; give the object a Rapier proxy that's `dynamic` while you own it and a `kinematicPosition`\nfollower of `state` when you don't. Reserve host-authoritative for a genuine **simultaneous** contest\n(two players pushing one crate *against each other*, sumo): let ONE neutral simulation own it — everyone\nsends inputs, the relay routes them to the **current host only**, and the host applies them on a fixed\ntick and publishes results via `objects` (auto-smoothed for everyone):\n\n```ts\nif (pushing) room.inputs.send({ obj: 'crate', push: dir });   // any client → host only\n\nroom.inputs.on((fromId, payload) => queue.push(payload));      // fires only while YOU host\nroom.onHostTick(30, (dtMs) => {                                // runs only on the host,\n  // adopt objects + seed from stateRaw on first tick, apply    //  auto-migrates with the\n  // queued inputs to YOUR one physics world, then:             //  host election\n  room.objects.set('crate', { x, y, z, q });\n});\n```\n\n`onHostTick` auto-starts on election, pauses during reconnect, resumes after reconnect only if still\nhost, and stops on demotion, deliberate `leave()`, or terminal disconnect. The disposer is still useful\nwhen the game removes that subsystem earlier. A new host must confirm an explicit host-authority claim\nand seed its world from each object's `stateRaw`, so simulation survives host migration without a snap.\n\n## `send` — custom one-off events\n\nFire-and-forget to all **other** clients (not stored in state). For shots, emotes, pings.\n\n```ts\nroom.send('hit', { from: room.id, target: 'xyz', dmg: 10 });\n```\n\nText chat has its own channel — use `room.chat`, not this.\n\n## `chat` — room text chat\n\n```ts\nroom.chat.send('on my way');\n\nroom.chat.on((m) => {                // fires once per line you hadn't seen\n  addLine(`${m.name}: ${m.text}`);   // m.text is already sanitized — render as TEXT\n});\n\nroom.chat.history;                   // every known line, oldest first — render on mount\nroom.chat.mute(playerId);            // local only; nothing is sent, nobody else is affected\n```\n\n**Chat is not `send`** — three differences that matter:\n\n- **Your own lines come back to you**, in server order with the server's timestamp. Render only\n  what arrives in `on`; appending your own line locally on submit shows it twice.\n- **The relay stamps `from` and `name`** from the verified session. A player cannot post under\n  someone else's name, so the name is safe to display as-is.\n- **History replays on connect** (last ~50 lines), so a player joining mid-game sees the recent\n  conversation. `on` fires for those too, de-duplicated by `id`, and a reconnect backfills exactly\n  what the blip missed — a handler that just appends stays correct.\n\nThe relay trims each line, strips control and bidi characters, and clamps to 500 code points.\nChat has its own rate budget (~2 lines/second), separate from gameplay traffic, so a busy room\ncan't starve it and a chat flood can't starve movement.\n\n> **Render `m.text` with `textContent`, never `innerHTML`.** It is another player's input.\n\n## `voice` — mesh voice chat\n\n```ts\n// MUST be inside a click/tap handler — browsers gate the mic prompt AND playback on a gesture.\njoinBtn.onclick = async () => {\n  try { await room.voice.join(); }            // rejects if the player denies the microphone\n  catch (err) { showNotice('Microphone needed for voice'); }\n};\n\nroom.on('voice', (participants) => renderVoiceHud(participants));  // joined/left/speaking/connected\nroom.on('voice:rejected', (info) => showNotice(`Voice is full (${info.limit})`));\n\nroom.voice.setMicEnabled(false);      // push-to-talk gate — instant, no renegotiation\nroom.voice.mute(playerId);            // local only\nroom.voice.leave();                   // releases the mic (turns the recording indicator off)\n```\n\n**Party-sized, not room-sized — max 6.** Audio goes peer-to-peer in a full mesh: everyone\nuploads to everyone. The relay carries no audio at all, only the roster and the WebRTC\nhandshake. Past a small party what breaks first is not bandwidth but reliability — a joiner\nmust negotiate with everyone already present, and every leg can fail. The 7th `join()` is\nrefused with `voice:rejected`; the room still holds 64 players.\n\n**TURN is automatic — you do not configure it.** Roughly 15% of players sit behind symmetric\nNAT, carrier CGNAT, or a firewall that blocks UDP, and cannot connect peer-to-peer at all. In\na mesh that is not a private problem: they fail *every* leg, so nobody in the party hears them\nand they hear nobody, while everyone else works fine. `join()` fetches short-lived relay\ncredentials from the Genex relay before it opens any peer connection, so this is handled for\nyou with no key to obtain, nothing to put in your bundle, and no code to write.\n\nPass `iceServers` only to run your own TURN — it is an override, and it suppresses the\nplatform request entirely:\n\n```ts\nawait room.voice.join({ iceServers: [{ urls: 'turn:…', username: '…', credential: '…' }] });\n```\n\n**Spatial voice** (`npx genex controller voice`) is the version worth shipping in a 3D game:\njoin with `{ spatial: true }` and the SDK stops playing audio flat, handing you `p.stream`\nper participant to drive a `THREE.PositionalAudio`. Distance falloff also softens the cap —\nsix audible neighbours read as a populated world rather than as a limit.\n\n## `leave`\n\n```ts\nroom.leave();\n```\n\n---\n\n## Smoothing remote players\n\nRemote players are **smoothed automatically** — nothing to configure. `room.players` gives each remote player's `state` rendered slightly in the past and interpolated between snapshots, so motion glides between network updates (you send ~10–20Hz but render at 60). Interpolation runs on the **sender's clock** (each update is timestamped and mapped to your local clock), the way Valve/Unity/Mirror do it — so jitter doesn't distort the motion. The delay **self-tunes to both the live snapshot rate and the link's measured jitter**, so it stays smooth whether you send at 5Hz or 30Hz and whether the connection is a clean LAN or a jittery mobile link — a deeper buffer is used only where the jitter demands it.\n\nDo not add another lerp, snapshot buffer, or remote physics predictor on top. `state` is already the\nrender value. This relay does not implement classic client-side prediction plus server reconciliation:\nyour own player is client-authoritative and renders locally; remote entities use interpolation and\nbounded extrapolation.\n\n- `player.state` is the **smoothed** value (what you draw); `player.stateRaw` is the **latest raw** snapshot — use it for hit-tests / discrete logic.\n- **Your own player is never delayed** — you always render yourself live.\n- **Numbers** are interpolated; a 4-element `[x, y, z, w]` **quaternion** is **slerped** (shortest-arc); anything else snaps.\n- **Send rotation as a quaternion:** `state.q = mesh.quaternion.toArray()`, then on the remote `mesh.quaternion.fromArray(p.state.q)`. The package slerps it and **output-smooths** it so it glides through turns.\n- **Late/dropped packets keep moving:** **position** dead-reckons forward from its last velocity (capped ~0.25s, Source-style) until fresh snapshots arrive; **rotation** also continues the turn but on a **tighter cap** (~0.15s), so a remote's heading keeps moving through a brief gap instead of freezing and then snapping when the next packet lands — the short cap plus output-smoothing bound any overshoot. This is what holds up on high-latency links.\n\n> No client-side prediction/reconciliation: in this relay you're authoritative over **yourself** (you render instantly, the server never corrects you), so there's nothing to predict — smoothing *remote* players is the piece that matters.\n\n---\n\n## Complete minimal example (move a cube, see others as cubes)\n\n```ts\nimport { connect } from '@genex-ai/multiplayer';\nimport { waitForPlayer, getColyseusAuth, getColyseusUrls } from '@genex-ai/embed-sdk';\ntype S = { x: number; z: number };\n\nawait waitForPlayer();   // identity gate (guest OR signed-in) — see Connect above\nconst room = await connect<S>({\n  urls: getColyseusUrls(),\n  room: GAME_ID,\n  auth: () => getColyseusAuth(), // REQUIRED — resolved fresh for this connect\n});\n\nconst me = { x: 0, z: 0 };\n\n// publish my position ~15Hz (NOT per frame)\nsetInterval(() => room.me.set(me), 66);\n\n// render loop (your engine / three.js): draw every player at their latest position\nfunction frame() {\n  for (const [id, p] of room.players) {\n    const cube = cubeFor(id);                 // create-or-reuse a mesh per id\n    cube.position.set(p.state.x ?? 0, 0, p.state.z ?? 0);   // auto-smoothed\n  }\n  requestAnimationFrame(frame);\n}\nframe();\n\n// drop a player's cube when they leave\nroom.on('leave', (id) => removeCube(id));\n\n// input just mutates `me`; the tick above syncs it\nonKey('right', () => { me.x += 1; });\n```\n\n---\n\n## `matchmake` — competitive matches (server-owned)\n\nWhen players should be **matched into separate capped rooms** instead of sharing one big room (1v1, FFA, teams, invite lobby), use `matchmake()` instead of `connect()`. The queue, roles, winner-stays, forfeit, timeout, and win condition are all **server-owned** — the client declares nothing and runs no matchmaking logic.\n\n```ts\nimport { matchmake } from \"@genex-ai/multiplayer\";\n\n// Pass `auth` as a FUNCTION — a handle re-joins many times (re-search/requeue) and tokens rotate\n// (~10 min); a function is read fresh each join, a static object goes stale mid-session.\nconst mm = await matchmake<State>({ urls, room: slug, auth: () => getColyseusAuth() });\n\n// `session` is null WHILE SEARCHING — render your own \"finding a match…\" HUD until it goes live.\n// each frame:\nif (mm.session) renderGame(mm.session);        // a live Session (same API as connect())\nelse renderSearchingHud(mm.matchmaking);\n\nmm.on(\"matched\", () => {/* session is live */});\nmm.on(\"matchStart\", ({ roundId }) => {/* round began */});\nmm.on(\"matchEnded\", ({ winnerId, scores, draw }) => {/* result screen */});\nmm.on(\"spectate\", () => {/* DEPRECATED — never fires: there are no server-side spectators anymore.\n                            An overflow searcher now waits in the queue instead of watching. */});\nmm.on(\"error\", (e) => {/* queue join failed even after the SDK's automatic retries — persistent\n                          (broken auth / server unreachable); fix the cause, then mm.retry() */});\n\n// Report ONLY your own outcome — the server adjudicates. Pick the call that matches the win condition:\nmm.eliminated();   // I'm out              (lastStanding)\nmm.score(1);       // I scored             (firstToScore / highScoreInTime)\nmm.finish();       // I finished the race  (firstToFinish)\n\nmm.retry();        // re-enter the queue after a terminal 'error' (no-op in any other state)\nmm.cancel();       // stop searching / leave the match\n```\n\nA failed queue join is **retried automatically** with backoff (~10s total), so transient failures\n(a token mid-rotation, identity still settling on page load) never surface. Only a persistent\nfailure emits `error`; the handle then idles until you call `mm.retry()`.\n\n**`mm.matchmaking`** (read every frame for your HUD): `status` (`searching` | `waiting` | `countdown` | `playing` | `ended`; the legacy `spectating` is never emitted — server-side spectators were removed), `queue` (`{ position, size }`), `players` (reserved seats), `connectedPlayers` (live transports), `opponents`, `teams`, `myTeam`, `scores`, `winCondition`, `config` (numeric knobs), `roundId`, `winnerId`, `message`. `championId`/`challengerId` are 1v1 aliases. During an automatic reconnect, the SDK retains the last coherent roster and match view until the replacement room hydrates, so status does not transiently regress to `waiting`.\n\nConfigure once in the game's `package.json` (reported at `genex preview` AND `genex publish`;\nremoving it clears the stored config on the next preview/publish — never sent from the client):\n\n```jsonc\n\"genex\": {\n  \"matchmaking\": {\n    \"preset\": \"arena\",                 // open | duel | arena | teams | private\n    \"winCondition\": \"firstToScore\",    // lastStanding | firstToScore | highScoreInTime | firstToFinish\n    \"config\": { \"scoreTarget\": 20, \"maxPlayers\": 8 }   // numeric knobs, optional\n  }\n}\n```\n\nPresets: **open** (a room of N players, your rules — see below), **duel** (1v1 winner-stays), **arena** (N-player FFA, join-anytime), **teams** (balanced N-v-N), **private** (invite-code lobby). Win conditions (for the batteries-included presets): **lastStanding**, **firstToScore**, **highScoreInTime**, **firstToFinish**; a round that hits the time cap undecided is a draw.\n\n**`open` — bring your own rules.** The minimal preset: the server owns only seating, capacity, and refill; you build teams, rounds, scoring, and win logic yourself on `session.shared` + host election. It runs no match loop, so `status` only goes `waiting`→`playing` (never `ended`), `scores`/`winnerId` stay empty, and **nobody is ever evicted** (no `matchEnded`, no requeue). Config knobs: `minPlayers` (quorum to flip to `playing`; default 1), `maxPlayers` (seat cap, clamped 2–64), `fill` (`1` = keep the room full — grow to max and refill a seat a leaver frees, the default; `0` = lock the room for good once it is simultaneously full (max players at once) — a match with no substitutes; a freed seat stays closed). Pick `open` when you want your own rules; pick duel/arena/teams for a ready-made match loop.\n\n### Private lobbies — `createPrivate` / `joinPrivate`\n\nFor `preset: 'private'` games, skip the queue: a host mints an invite **code**, friends join it, and everyone lands in the SAME persistent lobby (rounds replay, nobody is evicted). Both handles have the same shape as `matchmake()`, but `session` is live on return (no searching phase).\n\n```ts\nimport { createPrivate, joinPrivate } from \"@genex-ai/multiplayer\";\n\n// host\nconst lobby = await createPrivate<State>({ urls, room: slug, auth: () => getColyseusAuth() });\nshare(lobby.code);                 // e.g. show it in the UI\n\n// friend (elsewhere)\nconst joined = await joinPrivate<State>(code, { urls, room: slug, auth: () => getColyseusAuth() });\n\n// then identical to matchmake(): .session, .matchmaking, eliminated()/score()/finish(), cancel()\n```\n\n## Rules of thumb\n\n- **`me` / `shared` are synced; everything else is local.** Movement input → mutate a local object → `me.set` it on the tick.\n- **Tick `me.set` at ~10–20Hz**, render at your own framerate. One `me.set` = one network message.\n- **`room` (game id) must be stable per game** — use the project slug. Same id = same room; different id = isolated.\n- **Remote players are smoothed automatically** — read `stateRaw` when you need the raw latest (hit-tests). No server-side prediction — you render yourself live.\n- `me.set` replaces your whole state object — send the full object each time, not a partial.\n\n---\n\n## Persistent worlds (optional)\n\nThe relay is in-memory — room state is gone when everyone leaves or the server restarts. To persist world state across restarts, use `@genex-ai/embed-sdk`'s state helpers (they own auth tokens, guest handling, and write-conflict decoding):\n\n```ts\nimport { loadWorldState, saveWorldState } from '@genex-ai/embed-sdk';\n\n// load on boot\nconst { data, version } = await loadWorldState();\ninitWorld(data ?? defaultWorld());\n\n// save (from ONE authority — the elected host — debounced, with ifVersion so\n// races surface as { conflict: true } instead of silently clobbering)\nif (room.isHost) await saveWorldState(world, { ifVersion: version });\n```\n\nThe relay prefers signed-in players when electing the host (guests cannot write saves), so host-driven persistence works whenever any account is in the room. Per-player progression belongs in `savePlayerState()` (each player's own slot), never in the shared world blob.\n","readmeFilename":"README.md"}