{"_id":"@signe/room","_rev":"53-2c88245c3c0a5e30089614f8a904f72f","name":"@signe/room","dist-tags":{"latest":"3.2.1"},"versions":{"0.0.1":{"name":"@signe/room","version":"0.0.1","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@0.0.1","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"3fc91c6ddcf81444f9a9a95132b1d38432ba0a9e","tarball":"https://registry.npmjs.org/@signe/room/-/room-0.0.1.tgz","fileCount":11,"integrity":"sha512-/UocmOHOWboPLwteyJnMtpi/6sMyeRSu1g2n9vOsMSAA/kNvdRj+FlsrbbZIukK/2ca20rv14M+8Gh1pIUEWfw==","signatures":[{"sig":"MEUCIQCaq9T+vFKiRavWCyZYq8eGY+7Xtiz9qao+TIMszlp3YwIgUQ3pWEdo9b69kxn7kBfbx9kJiDgWStD2b1yjs2w0zeE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":50701},"main":"./dist/index.js","type":"module","_from":"file:signe-room-0.0.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/1ef9713420a7f1da58678bd7dbdb5977/signe-room-0.0.1.tgz","_integrity":"sha512-/UocmOHOWboPLwteyJnMtpi/6sMyeRSu1g2n9vOsMSAA/kNvdRj+FlsrbbZIukK/2ca20rv14M+8Gh1pIUEWfw==","_npmVersion":"10.5.2","description":"```ts import { signal } from \"@signe/reactive\"; import { Room, Server, action } from \"@signe/room\"; import { id, sync, users } from \"@signe/sync\";","directories":{},"_nodeVersion":"20.13.1","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"0.0.1","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_0.0.1_1717505969118_0.17595027015143505","host":"s3://npm-registry-packages"}},"0.0.2":{"name":"@signe/room","version":"0.0.2","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@0.0.2","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"347cfeaa38c10ab12cf63a190fed6150d533dc42","tarball":"https://registry.npmjs.org/@signe/room/-/room-0.0.2.tgz","fileCount":27,"integrity":"sha512-EAtqoVCBp6Eob0cXtKC+5A+bh5pP0cKEH1sycgROaGFQ2Vx3ckyQhyXzakn48zOqTyccz5xEja08SBgBjS8vMA==","signatures":[{"sig":"MEYCIQDEGnxpJgg0pJYh3PxafyHPDh97V76n63hRh9cGUpyG1AIhAN0YtrgtPLABrkHETZB/fQIWLwoqKCVLyG+5Ajz+33WB","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":153332},"main":"./dist/index.js","type":"module","_from":"file:signe-room-0.0.2.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/7467d1001122a387b8bcc38df0e487b2/signe-room-0.0.2.tgz","_integrity":"sha512-EAtqoVCBp6Eob0cXtKC+5A+bh5pP0cKEH1sycgROaGFQ2Vx3ckyQhyXzakn48zOqTyccz5xEja08SBgBjS8vMA==","_npmVersion":"10.7.0","description":"```ts import { signal } from \"@signe/reactive\"; import { Room, Server, action } from \"@signe/room\"; import { id, sync, users } from \"@signe/sync\";","directories":{},"_nodeVersion":"20.15.0","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"0.0.2","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_0.0.2_1720426188553_0.08451401447351703","host":"s3://npm-registry-packages"}},"1.0.0":{"name":"@signe/room","version":"1.0.0","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@1.0.0","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"7ec2f5eff8e6fe4c442ed4bc2e85db1c3b758358","tarball":"https://registry.npmjs.org/@signe/room/-/room-1.0.0.tgz","fileCount":27,"integrity":"sha512-VByxLhOcTqgV7AKm94ENS6niW8w8P+kBXuM5dUEKbyzKvQY+Hf19rMGKF0NXs8kYVNQkcQ+R/QF6Aj57LKL2pw==","signatures":[{"sig":"MEYCIQCkh4hUM/1CPaLJtDZCVuU/4wMK96UQX8xoewUmCMRfAwIhAL1fmuW3ZGuszYsKOQT500N9HHFck7q7JFMYQ/DOy9vi","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":153332},"main":"./dist/index.js","type":"module","_from":"file:signe-room-1.0.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/48daa9eb537d3cf4d536e0c390a68fe5/signe-room-1.0.0.tgz","_integrity":"sha512-VByxLhOcTqgV7AKm94ENS6niW8w8P+kBXuM5dUEKbyzKvQY+Hf19rMGKF0NXs8kYVNQkcQ+R/QF6Aj57LKL2pw==","_npmVersion":"10.8.2","description":"```ts import { signal } from \"@signe/reactive\"; import { Room, Server, action } from \"@signe/room\"; import { id, sync, users } from \"@signe/sync\";","directories":{},"_nodeVersion":"20.17.0","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"1.0.0","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_1.0.0_1727011127404_0.051666706653453964","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"@signe/room","version":"1.0.1","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@1.0.1","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"0259dbf9b19dfbac7fb87897eaab14c1c2997216","tarball":"https://registry.npmjs.org/@signe/room/-/room-1.0.1.tgz","fileCount":27,"integrity":"sha512-lgU4SJtecTCra7Dh/zZFbH0c0HQ+ADcm3xxQJi/oubLsaBBK0M3Qb79rJo5Rta9LTb9sk3rOV/VBhUkUrvCDvg==","signatures":[{"sig":"MEUCIEZ3BV3mL3n5GpQ4Dps4XhzRnXRWNohm7JRjWbBESXLaAiEAgzqZtnOLwLZlvPJmF5T7uthX9eGrP82HAuucElxwu8g=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":153332},"main":"./dist/index.js","type":"module","_from":"file:signe-room-1.0.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/6e01a16e8ad9cd380778be8ca72e5717/signe-room-1.0.1.tgz","_integrity":"sha512-lgU4SJtecTCra7Dh/zZFbH0c0HQ+ADcm3xxQJi/oubLsaBBK0M3Qb79rJo5Rta9LTb9sk3rOV/VBhUkUrvCDvg==","_npmVersion":"10.8.2","description":"```ts import { signal } from \"@signe/reactive\"; import { Room, Server, action } from \"@signe/room\"; import { id, sync, users } from \"@signe/sync\";","directories":{},"_nodeVersion":"20.17.0","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"1.0.1","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_1.0.1_1729238304339_0.31038984031615713","host":"s3://npm-registry-packages"}},"1.0.2":{"name":"@signe/room","version":"1.0.2","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@1.0.2","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"55203432adc2d7e44cbd1401e9912f103e21078a","tarball":"https://registry.npmjs.org/@signe/room/-/room-1.0.2.tgz","fileCount":27,"integrity":"sha512-t4ti1kJuebVcFPAdznNIWb3f3OZrhQ94H71qW7B3kf6twvChG0Bj5JBUh4ZGuDL2xCi3w59qI/zC80MgHSLNSg==","signatures":[{"sig":"MEUCIQCOzbcfcHYXd2b8gXPviesvwDk/FG/jSAaSSSWlTeHb5AIge5OmvEN5EAV3gWlwJpyy6Xnrxz0kM36Rq6VfgQxW0aY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":157381},"main":"./dist/index.js","type":"module","_from":"file:signe-room-1.0.2.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/3a9ef6a0a3313eba5d339041b8d49fb6/signe-room-1.0.2.tgz","_integrity":"sha512-t4ti1kJuebVcFPAdznNIWb3f3OZrhQ94H71qW7B3kf6twvChG0Bj5JBUh4ZGuDL2xCi3w59qI/zC80MgHSLNSg==","_npmVersion":"10.9.0","description":"```ts import { signal } from \"@signe/reactive\"; import { Room, Server, action } from \"@signe/room\"; import { id, sync, users } from \"@signe/sync\";","directories":{},"_nodeVersion":"22.12.0","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"1.0.2","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_1.0.2_1736008394098_0.6831210934069423","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@signe/room","version":"1.0.3","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@1.0.3","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"cefbbf311c3bbce40a3f9714fcc17c9e9f64f4de","tarball":"https://registry.npmjs.org/@signe/room/-/room-1.0.3.tgz","fileCount":27,"integrity":"sha512-v0DKTH465faLKTjcVkhq9zZm14iIBXC8ZKbQRMmLDkV26/zJcT/I2l2cE2MWRu/Qd3azAlm9JNowfgvUr7MoYA==","signatures":[{"sig":"MEQCIBCNuVGWY4M2UHoNlq24iNemh1fjY4JI0eoA5o5UzDMCAiAl9E08rsw2eGlLnX1yFv/enNuIKbo1pGw/BDy+Rpz2vg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":159163},"main":"./dist/index.js","type":"module","_from":"file:signe-room-1.0.3.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/2b61d338b34f41b4b0b87d1406bca3b1/signe-room-1.0.3.tgz","_integrity":"sha512-v0DKTH465faLKTjcVkhq9zZm14iIBXC8ZKbQRMmLDkV26/zJcT/I2l2cE2MWRu/Qd3azAlm9JNowfgvUr7MoYA==","_npmVersion":"10.9.0","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"22.12.0","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"1.0.3","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_1.0.3_1736160514333_0.3415679390310429","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@signe/room","version":"1.0.4","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@1.0.4","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"5931ec3af0eb1d857cc42e7174ea3c66643d9b2d","tarball":"https://registry.npmjs.org/@signe/room/-/room-1.0.4.tgz","fileCount":27,"integrity":"sha512-riGOIwXR884Wwli5jppl9SFIWzYgcnnfzQaR5oIMjx96MH1xiMAENCGhwNgo/ct7pi+scOq/bCb//qp9jtWszg==","signatures":[{"sig":"MEUCIGJ01h4XvNyB0iU0zdvbuu0PYnvZsvfUCmTgUzta0Qb7AiEAntzi6byaWjxTwUyPTH3VER6L8mABxlLibnIlQnxzosQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":159300},"main":"./dist/index.js","type":"module","_from":"file:signe-room-1.0.4.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/0798db8b3046bc94d31b3884e1fec42a/signe-room-1.0.4.tgz","_integrity":"sha512-riGOIwXR884Wwli5jppl9SFIWzYgcnnfzQaR5oIMjx96MH1xiMAENCGhwNgo/ct7pi+scOq/bCb//qp9jtWszg==","_npmVersion":"10.9.0","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"22.12.0","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"1.0.4","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_1.0.4_1737292272713_0.9394831444964495","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@signe/room","version":"1.1.0","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@1.1.0","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"eb9e92a6713cf9c2077704c11457e4a6537f4b01","tarball":"https://registry.npmjs.org/@signe/room/-/room-1.1.0.tgz","fileCount":27,"integrity":"sha512-wlIPyUOrRJgp2gi1ggVXqLZYetL9OaDCXW7UWs6kl5MPnWlZfG4peQhbtJJIWPodDqtXzihtgYD2cyvsWay52A==","signatures":[{"sig":"MEUCIE5vupqCInjvh4S8iyr0avI0DSmlJ/X3q2zRzd3ZNNaMAiEAvxXPCpiefW0gqVR1okISPNEUGCCz1xqBMufFlavmsZQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":159300},"main":"./dist/index.js","type":"module","_from":"file:signe-room-1.1.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/db24534367b876eccf4d725f427f90ed/signe-room-1.1.0.tgz","_integrity":"sha512-wlIPyUOrRJgp2gi1ggVXqLZYetL9OaDCXW7UWs6kl5MPnWlZfG4peQhbtJJIWPodDqtXzihtgYD2cyvsWay52A==","_npmVersion":"10.9.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"22.13.0","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"1.1.0","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_1.1.0_1738034386080_0.44315501611793806","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@signe/room","version":"1.1.1","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@1.1.1","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"913a1edaeb9e83b6ee3c3dbef3c8e7a4b4b60120","tarball":"https://registry.npmjs.org/@signe/room/-/room-1.1.1.tgz","fileCount":27,"integrity":"sha512-t5K/4Rc79Vyjk8HjOB9fINvzpNVU9RxzmMie2L9NYLoIfhOwxaPWsDgEzgd2qDAeje/G0R7omXpzWsm1+96FiQ==","signatures":[{"sig":"MEQCID+vyZ+zcIVq4H/MKQnBkRE2+JW7auThiT4QCBPeD3hYAiB9JKtrIiZDvcpvEiRS1oQzVK5R0fGg5WaMoHleV+ouYw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":167514},"main":"./dist/index.js","type":"module","_from":"file:signe-room-1.1.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/e69494d3843b77bebc25d7b9d62893d9/signe-room-1.1.1.tgz","_integrity":"sha512-t5K/4Rc79Vyjk8HjOB9fINvzpNVU9RxzmMie2L9NYLoIfhOwxaPWsDgEzgd2qDAeje/G0R7omXpzWsm1+96FiQ==","_npmVersion":"10.9.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"22.13.1","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"1.1.1","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_1.1.1_1738678238317_0.01564713130625517","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@signe/room","version":"1.2.0","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@1.2.0","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"eec570522e93ff069296b44b7801d1f7b0d7f007","tarball":"https://registry.npmjs.org/@signe/room/-/room-1.2.0.tgz","fileCount":27,"integrity":"sha512-rTI0LQAcj+1jCfxph5pFZ+8UhFix2cw7a3+q+tQMsB22muNBPHUNtx6hyhTlhrLT87Z5W3PlDon82J5bw9tnRQ==","signatures":[{"sig":"MEQCIEkoEB24GmzXIV4ZjL4ERySQJA+xnRKIi3XxdKMshYmqAiAA7LhuR9/4camlva+5h8EAKLT0KJO78tcx83VSX/28mA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":179833},"main":"./dist/index.js","type":"module","_from":"file:signe-room-1.2.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/18dafe0dafbe0d0ea0d35f08213374aa/signe-room-1.2.0.tgz","_integrity":"sha512-rTI0LQAcj+1jCfxph5pFZ+8UhFix2cw7a3+q+tQMsB22muNBPHUNtx6hyhTlhrLT87Z5W3PlDon82J5bw9tnRQ==","_npmVersion":"10.9.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"22.13.1","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"1.2.0","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_1.2.0_1739240073236_0.13585130494147069","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@signe/room","version":"1.2.1","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@1.2.1","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"c48331fd80a4b07daccd05a71897c324c4443dfe","tarball":"https://registry.npmjs.org/@signe/room/-/room-1.2.1.tgz","fileCount":27,"integrity":"sha512-xlOjApglborEDPhsdfXO+mloKoZ4+dvHAEQ87yRqeZIkgFqGngz0IgCRadKEP1Z3sIXaEHUvJ/Da4skhc5tiMA==","signatures":[{"sig":"MEQCICXYeXDpXRjl87gTQTopORk+cmbTcOhBHDxRPmMqmGjkAiBypRdX6hbEl+Ejq2o/Hr5+l3sUwtvN6cTFev+xzmaYvA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":180023},"main":"./dist/index.js","type":"module","_from":"file:signe-room-1.2.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/74509c2806b7f4dfb580f76b6b07efa1/signe-room-1.2.1.tgz","_integrity":"sha512-xlOjApglborEDPhsdfXO+mloKoZ4+dvHAEQ87yRqeZIkgFqGngz0IgCRadKEP1Z3sIXaEHUvJ/Da4skhc5tiMA==","_npmVersion":"10.9.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"22.13.1","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"1.2.1","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_1.2.1_1739242541722_0.4319268684884847","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@signe/room","version":"1.3.0","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@1.3.0","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"1c9e09094c465878416eed093998db74552d2050","tarball":"https://registry.npmjs.org/@signe/room/-/room-1.3.0.tgz","fileCount":28,"integrity":"sha512-5WtkmMJnkVKwQ9TofNdC/yctgao2fHO3bBBLB0ZSH8W8rtbspTM+HVgB7EwqG4CCTl98i9mvAjR9us19axjRww==","signatures":[{"sig":"MEUCIQCec01DEg0X/uEn8xbHBccak5hqjdBsCMy/2Q5wf6uxygIgCiuulkbBOxNIAMWcJG6Z3WwZuSdyuY67LbunJOHu4CE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":175943},"main":"./dist/index.js","type":"module","_from":"file:signe-room-1.3.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/1a1c3c1ec6eb324ae07516320edb521f/signe-room-1.3.0.tgz","_integrity":"sha512-5WtkmMJnkVKwQ9TofNdC/yctgao2fHO3bBBLB0ZSH8W8rtbspTM+HVgB7EwqG4CCTl98i9mvAjR9us19axjRww==","_npmVersion":"10.9.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"22.13.1","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"1.3.0","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_1.3.0_1739437104921_0.7722184443127575","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@signe/room","version":"1.4.0","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@1.4.0","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"2c737cc1a7028f6b3676ff42c78c97553b2a0ad6","tarball":"https://registry.npmjs.org/@signe/room/-/room-1.4.0.tgz","fileCount":28,"integrity":"sha512-VMM+dHuinYAEcwQgdaoEPuHjEJmg7KiWclL4+ijPhMHqoCq6C75nbgc9mxk+C6VMw7+kBnujoS5aOep53YGSow==","signatures":[{"sig":"MEUCIQDISWXUYnrn62/Fz+6gwztIFKd2F015sfBtoZhwTmI5dgIgHE3wUX/FqSeAzMehzD6i9K6IUS7UE58V8n/c/ZyOgN8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":175943},"main":"./dist/index.js","type":"module","_from":"file:signe-room-1.4.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/e705eaf6e0a635f0d79fd9f250487d7c/signe-room-1.4.0.tgz","_integrity":"sha512-VMM+dHuinYAEcwQgdaoEPuHjEJmg7KiWclL4+ijPhMHqoCq6C75nbgc9mxk+C6VMw7+kBnujoS5aOep53YGSow==","_npmVersion":"10.9.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"22.13.1","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"1.4.0","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_1.4.0_1739618151547_0.478020194293437","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"@signe/room","version":"1.4.1","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@1.4.1","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"2cd638fc0186cbd577ed620f8a3febe879b6314c","tarball":"https://registry.npmjs.org/@signe/room/-/room-1.4.1.tgz","fileCount":29,"integrity":"sha512-qkOflpCaLlu6CNgmrPQXs2BoLKftkXEFen1OptJRKLKV+FTB9WfSZuq3+cMVaJoerHGvjrMZ62b1q8tH3TQ/2A==","signatures":[{"sig":"MEUCIQDIAnT4NkgqIx55it/nbykIocpYSRFRxO5B+sUAlsrZXQIgJbAwrS4f6xoeqAjXbC2Iu+G4IcLawQWRK4BKKheNHLQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":185461},"main":"./dist/index.js","type":"module","_from":"file:signe-room-1.4.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/ecbbb631f6a150b8b221f66b03b50d61/signe-room-1.4.1.tgz","_integrity":"sha512-qkOflpCaLlu6CNgmrPQXs2BoLKftkXEFen1OptJRKLKV+FTB9WfSZuq3+cMVaJoerHGvjrMZ62b1q8tH3TQ/2A==","_npmVersion":"10.9.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"22.13.1","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"1.4.1","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_1.4.1_1739851940497_0.44782694212909235","host":"s3://npm-registry-packages-npm-production"}},"1.4.2":{"name":"@signe/room","version":"1.4.2","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@1.4.2","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"388d57be454113cf00a484dab0c9ca239b74d3cb","tarball":"https://registry.npmjs.org/@signe/room/-/room-1.4.2.tgz","fileCount":29,"integrity":"sha512-LzZhlVsEuN9uQF0HYHQJGDHnOC4Ci2iytIrI5EwQiaGSFy4E1Zztgi6s768zpsjLFofAJ8F2BdMDrA1GmKc/jg==","signatures":[{"sig":"MEQCIGSpLyNprDdZH8G3fAvvQ+5/OUNwEAn8zM08OQioBVijAiAP4g7eZkNMdqPu9V4YZtHUit1383/teQy0WGGmQee1qQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":185461},"main":"./dist/index.js","type":"module","_from":"file:signe-room-1.4.2.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/bb5e7b8104aadc52d9450e28d75895d8/signe-room-1.4.2.tgz","_integrity":"sha512-LzZhlVsEuN9uQF0HYHQJGDHnOC4Ci2iytIrI5EwQiaGSFy4E1Zztgi6s768zpsjLFofAJ8F2BdMDrA1GmKc/jg==","_npmVersion":"10.9.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"22.13.1","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"1.4.2","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_1.4.2_1740383970647_0.5859527811005698","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@signe/room","version":"2.0.0","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@2.0.0","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"84a9806dbb8b66b7d8cfd49adf625f76a1ae26b8","tarball":"https://registry.npmjs.org/@signe/room/-/room-2.0.0.tgz","fileCount":36,"integrity":"sha512-uDiOXAupOMHWpsNKT92P/K71b/wi62Dkcrdqlt/SSPJ9fH8jEj3C5OryeEVtSSrw/+5GsVWFi0dBzSYthgAc8g==","signatures":[{"sig":"MEUCIBrTYcphtBNZySyiJlJpBrkSOfNn9ZQ9kZ8NP8rDG/J9AiEAicgNgr8yK36FevSXrl0iQKHbZ11d6TmWKW7ry296GBc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":431866},"main":"./dist/index.js","type":"module","_from":"file:signe-room-2.0.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/f11319fe82def7b55c19c43af9b9eb1a/signe-room-2.0.0.tgz","_integrity":"sha512-uDiOXAupOMHWpsNKT92P/K71b/wi62Dkcrdqlt/SSPJ9fH8jEj3C5OryeEVtSSrw/+5GsVWFi0dBzSYthgAc8g==","_npmVersion":"10.9.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"2.0.0","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_2.0.0_1740834594115_0.0963466832828761","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@signe/room","version":"2.0.1","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@2.0.1","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"c837f82017faaf73454a89f16e38a2a9788052f4","tarball":"https://registry.npmjs.org/@signe/room/-/room-2.0.1.tgz","fileCount":38,"integrity":"sha512-K4+MKy0NQUaZF1yKQvvtxLf34mYCR1+3p5qwyy0L/3FYi8WiWVuoLgFAWMV/Z20KdXIlgRQd8AP7Y2c3dOCOlA==","signatures":[{"sig":"MEYCIQC86rcJPIjd+bFPX+/1QN+DnCH7qlquLkDtOmI/0+iiDAIhAPThkKtIKgci05EFkq1b8y819bnQikJiVpcz4c7YnngM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":462613},"main":"./dist/index.js","type":"module","_from":"file:signe-room-2.0.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/0f40b25fb1a66bb737502f569acfb041/signe-room-2.0.1.tgz","_integrity":"sha512-K4+MKy0NQUaZF1yKQvvtxLf34mYCR1+3p5qwyy0L/3FYi8WiWVuoLgFAWMV/Z20KdXIlgRQd8AP7Y2c3dOCOlA==","_npmVersion":"10.9.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"2.0.1","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_2.0.1_1741086682883_0.07898111786431894","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@signe/room","version":"2.1.0","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@2.1.0","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"89c6a1b29466e443f033e55ccb03b6777bdf3146","tarball":"https://registry.npmjs.org/@signe/room/-/room-2.1.0.tgz","fileCount":38,"integrity":"sha512-X+foqIlSrqWg3rubRnlwucrMdbaXKkEVbsS+hhQ1RxrFfSOBg7As8pAjDgGRjXRcgh5am1VS7lMkF+ZLfzk4vw==","signatures":[{"sig":"MEYCIQDH4zt14PRDoKvZRTYjACNFgmbuINIHJHq3CMahMyQcAgIhAMjf/cSj9KyBQgldaKEt2fydgug+aSr4711rL1/V4Bsl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":463885},"main":"./dist/index.js","type":"module","_from":"file:signe-room-2.1.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/27217332ab41f9329008ed2b36387b60/signe-room-2.1.0.tgz","_integrity":"sha512-X+foqIlSrqWg3rubRnlwucrMdbaXKkEVbsS+hhQ1RxrFfSOBg7As8pAjDgGRjXRcgh5am1VS7lMkF+ZLfzk4vw==","_npmVersion":"10.9.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"2.1.0","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_2.1.0_1741096696095_0.8056974930592407","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@signe/room","version":"2.2.0","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@2.2.0","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"e6de269f654d99a451180ba31ab3633cfad1357f","tarball":"https://registry.npmjs.org/@signe/room/-/room-2.2.0.tgz","fileCount":38,"integrity":"sha512-+sknzJ455/tYmoeuN0wFVF7B6PepVc/KOfROV196ZqPbvR2RYtA8friWrc4OnT8ciAsROtjNjfiVTs9mXGBiGw==","signatures":[{"sig":"MEUCIFM7MY/3QsB8DMTSG8c292E7likASOMLnoiKZ2LcmjtMAiEAosqmFWAdLUipBP+1JGZQ2oOaBjA1BAwLNp2pgnROzbc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":474253},"main":"./dist/index.js","type":"module","_from":"file:signe-room-2.2.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/4fd133381c2575fed643616675d90392/signe-room-2.2.0.tgz","_integrity":"sha512-+sknzJ455/tYmoeuN0wFVF7B6PepVc/KOfROV196ZqPbvR2RYtA8friWrc4OnT8ciAsROtjNjfiVTs9mXGBiGw==","_npmVersion":"10.9.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"2.2.0","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_2.2.0_1741184509111_0.7073822409861521","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"@signe/room","version":"2.3.0","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@2.3.0","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"73816f1af5d12fa8a6490db990c80c15a6751363","tarball":"https://registry.npmjs.org/@signe/room/-/room-2.3.0.tgz","fileCount":38,"integrity":"sha512-hSjB2lwcfTXJUTb1SD/8OxEcHFn7wkD6rrP1QLHV1Ezcv9sRCDs8NPnEsHbchZ+4jWmJxPJ+n0lKMqg1p71PIg==","signatures":[{"sig":"MEQCIFMI27vm3BNFuhPKfwgQ2jBV4ABubRwD1S3+jDshcJKDAiBmURCb59ryk5wI9UnqFzRaTlixqQRAlBUMDddFSGOung==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":474253},"main":"./dist/index.js","type":"module","_from":"file:signe-room-2.3.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/0dcd9651e4e5318cd6114cf535223029/signe-room-2.3.0.tgz","_integrity":"sha512-hSjB2lwcfTXJUTb1SD/8OxEcHFn7wkD6rrP1QLHV1Ezcv9sRCDs8NPnEsHbchZ+4jWmJxPJ+n0lKMqg1p71PIg==","_npmVersion":"10.9.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"2.3.0","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_2.3.0_1741252415001_0.6227273515084428","host":"s3://npm-registry-packages-npm-production"}},"2.3.1":{"name":"@signe/room","version":"2.3.1","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@2.3.1","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"dc84e5ff5aacffb494a0a4afa1e05914d0725257","tarball":"https://registry.npmjs.org/@signe/room/-/room-2.3.1.tgz","fileCount":38,"integrity":"sha512-tMXS8LOPsOOcOO82YWNOEI225ftt4SV0zgi11iRWf2yU35T3nX4XAk5ebR6AnyAeNn5ZUS8tHsWF99IrM4hOkA==","signatures":[{"sig":"MEUCIQCajrmo2VdODbS62neh2GQGgbeg2PzV64nafnPAFI63HgIgVZH+kLkc9sY/UnAjR0sGlgGUq//7+L6TkFzho6ZQjg4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":474505},"main":"./dist/index.js","type":"module","_from":"file:signe-room-2.3.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/977be133d48bda6cab4e97f0fdb06d1e/signe-room-2.3.1.tgz","_integrity":"sha512-tMXS8LOPsOOcOO82YWNOEI225ftt4SV0zgi11iRWf2yU35T3nX4XAk5ebR6AnyAeNn5ZUS8tHsWF99IrM4hOkA==","_npmVersion":"10.9.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"2.3.1","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_2.3.1_1743415381774_0.6753595548317921","host":"s3://npm-registry-packages-npm-production"}},"2.3.2":{"name":"@signe/room","version":"2.3.2","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@2.3.2","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"9e5f9e63ab4e62aaa315a1a97de80c24033a5020","tarball":"https://registry.npmjs.org/@signe/room/-/room-2.3.2.tgz","fileCount":38,"integrity":"sha512-AMZ9t/xs4Fk0oHNyMI907wezaxRVEwEAA1kq2aitQFiQf8IaYip3PAbociRcjNomkIAtaRqZsy0/JRF12pA8oA==","signatures":[{"sig":"MEUCIQD4ge2oyQ4F+X3VucsGysSbccYL/tWvhqqwvMDfFkd7cQIgVXK2AVJfc3cd5ZrerP4tuuFWeqo4+EIPXGQwzOQroEQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":477839},"main":"./dist/index.js","type":"module","_from":"file:signe-room-2.3.2.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/cf17103d04f0c65576290c2cf09a66c3/signe-room-2.3.2.tgz","_integrity":"sha512-AMZ9t/xs4Fk0oHNyMI907wezaxRVEwEAA1kq2aitQFiQf8IaYip3PAbociRcjNomkIAtaRqZsy0/JRF12pA8oA==","_npmVersion":"10.9.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"2.3.2","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_2.3.2_1744702940924_0.2594908719469804","host":"s3://npm-registry-packages-npm-production"}},"2.3.3":{"name":"@signe/room","version":"2.3.3","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@2.3.3","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"abce8ef825459b4bc08187e38928aa3cf6b66b4b","tarball":"https://registry.npmjs.org/@signe/room/-/room-2.3.3.tgz","fileCount":38,"integrity":"sha512-W1Tl+8Ydh/gyRCO2diUKKy0oA3E985t5YCkO5hkC1Sv2mksOR84LGpL87SgiK1M097+sqjZyqtYyr/FT6k7crw==","signatures":[{"sig":"MEQCIBh5k48m2RpHtNW4lPVv+pGX18H24y8ctorxEwiy6oCTAiAohS/+Gx++m5JGMEEnbyJ7m/0V94maJK4esCcC4rKtMg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":477839},"main":"./dist/index.js","type":"module","_from":"file:signe-room-2.3.3.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/10704d379d989e89d3aae6650225a2bb/signe-room-2.3.3.tgz","_integrity":"sha512-W1Tl+8Ydh/gyRCO2diUKKy0oA3E985t5YCkO5hkC1Sv2mksOR84LGpL87SgiK1M097+sqjZyqtYyr/FT6k7crw==","_npmVersion":"10.9.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"2.3.3","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_2.3.3_1744965530501_0.8961877539139371","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"@signe/room","version":"2.4.0","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@2.4.0","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"f68ac949952e06802ff293f485a3b6c4a49bb413","tarball":"https://registry.npmjs.org/@signe/room/-/room-2.4.0.tgz","fileCount":39,"integrity":"sha512-Q5DFmXzuN151OQvPphTQG4mh9C2tECyqvCz/A2RFeFvgvfCQ+u0u9hk6K/+mAF1gR5jI489TgZ7AuH8We5afkA==","signatures":[{"sig":"MEQCIA/hqka29wpypqpGXId+WeDaVYNA1lATbh8WwhQhzc/eAiBdr1ktl3OilR6sWBYTE0XL7+xN+JtdMVbt6H2L8PNXgg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":515273},"main":"./dist/index.js","type":"module","_from":"file:signe-room-2.4.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","actor":{"name":"webcreative5","type":"user","email":"sam@webcreative5.net"},"email":"sam@webcreative5.net"},"_resolved":"/tmp/1778e21e4ad672d6168cda72f48db415/signe-room-2.4.0.tgz","_integrity":"sha512-Q5DFmXzuN151OQvPphTQG4mh9C2tECyqvCz/A2RFeFvgvfCQ+u0u9hk6K/+mAF1gR5jI489TgZ7AuH8We5afkA==","_npmVersion":"10.9.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"2.4.0","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_2.4.0_1752158736440_0.5335466756143805","host":"s3://npm-registry-packages-npm-production"}},"2.4.1":{"name":"@signe/room","version":"2.4.1","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@2.4.1","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"7248b16a73ddeac09233910db7a131ea11180a20","tarball":"https://registry.npmjs.org/@signe/room/-/room-2.4.1.tgz","fileCount":39,"integrity":"sha512-/ANj2bt7Qw2nZcLna5k/u/aU1n3FbrhOjvGYHBiJJEgBLo8VHS17FHfJVdWbcks58QMDFzpEPy73R1scRjcweQ==","signatures":[{"sig":"MEQCIHbD02Rvl1r+4W860AV7jliNoTm0ApXswmPMCNwVSCaTAiAG/s1pJ7KCVOIM89gWZ/5FF31mgmsiqNSaZNPjnflxFw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":515791},"main":"./dist/index.js","type":"module","_from":"file:signe-room-2.4.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/f6cd56d4f7cef125fd96f326b6a3ed82/signe-room-2.4.1.tgz","_integrity":"sha512-/ANj2bt7Qw2nZcLna5k/u/aU1n3FbrhOjvGYHBiJJEgBLo8VHS17FHfJVdWbcks58QMDFzpEPy73R1scRjcweQ==","_npmVersion":"10.9.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"2.4.1","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_2.4.1_1754561736251_0.16872466683233944","host":"s3://npm-registry-packages-npm-production"}},"2.4.2":{"name":"@signe/room","version":"2.4.2","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@2.4.2","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"41f4cef85b821f88658c092cea5cc77a43ecac2e","tarball":"https://registry.npmjs.org/@signe/room/-/room-2.4.2.tgz","fileCount":39,"integrity":"sha512-d5MJZbQZTvOPYCEETYLSajkjqruiAmE8+kwtiZ17ZqA8P7ETGjZKdOB6D18v6VtCJdqpuJxuSxX/5+Jy9GLUjQ==","signatures":[{"sig":"MEQCIFHcPQdQQDAKtDmlH2bOnVOmGn2IjfB3VS/adZwwLeVIAiBOS5j98lFyVMnCLkk2Cmkw1TV9uPmC7NoksBtlMfddAQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":524228},"main":"./dist/index.js","type":"module","_from":"file:signe-room-2.4.2.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/3b19cf70f53cc20e39a648dea29c56cb/signe-room-2.4.2.tgz","_integrity":"sha512-d5MJZbQZTvOPYCEETYLSajkjqruiAmE8+kwtiZ17ZqA8P7ETGjZKdOB6D18v6VtCJdqpuJxuSxX/5+Jy9GLUjQ==","_npmVersion":"10.9.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"2.4.2","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_2.4.2_1754639490321_0.5345486644887933","host":"s3://npm-registry-packages-npm-production"}},"2.4.3":{"name":"@signe/room","version":"2.4.3","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@2.4.3","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"844eac2782859eab9cadc346c2b4f7bcf451a00f","tarball":"https://registry.npmjs.org/@signe/room/-/room-2.4.3.tgz","fileCount":39,"integrity":"sha512-KMHMYuZ3ItS9xLVeehnvJHlGp800XfTFSvVUEHGBQI6IR00iJmFgm5HnZ4xWKEBW4y3MDj3ftJjuNEOlNtP+WQ==","signatures":[{"sig":"MEYCIQDep/bqkvLyK9V/gmT51B3khxW2GkoLItSskF3cr3yXiQIhANbJjYJgzdBD8u8NYZp/55UAT9ET5aBh/JBKF7gDkoEn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":524251},"main":"./dist/index.js","type":"module","_from":"file:signe-room-2.4.3.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/a97d1afea6db99560213eea2b50cef5e/signe-room-2.4.3.tgz","_integrity":"sha512-KMHMYuZ3ItS9xLVeehnvJHlGp800XfTFSvVUEHGBQI6IR00iJmFgm5HnZ4xWKEBW4y3MDj3ftJjuNEOlNtP+WQ==","_npmVersion":"10.9.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"2.4.3","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_2.4.3_1754643349149_0.8421657478305813","host":"s3://npm-registry-packages-npm-production"}},"2.4.4":{"name":"@signe/room","version":"2.4.4","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@2.4.4","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"ef09917d59ca78832874e8eef02fd5c5bb6b9589","tarball":"https://registry.npmjs.org/@signe/room/-/room-2.4.4.tgz","fileCount":39,"integrity":"sha512-H2hk1Vx54sz/kosP5DVBWB7nUTJkJ5kar6wlkbhSEIZQupPS6C4G4QT9ZtVVWaL5jz1kbICFLEjziGvl9RwIfA==","signatures":[{"sig":"MEYCIQCYNGyJmQNSj/Jb+7aC7fRnJiBxSeI/qr1PdektjivSmwIhAPYVrt/zPE9bxnVa5jgYKfd5bcdA6gtUPpGNCcTfR6oR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":518532},"main":"./dist/index.js","type":"module","_from":"file:signe-room-2.4.4.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/9fd1d5f5ced208c1a55178f900932ebb/signe-room-2.4.4.tgz","_integrity":"sha512-H2hk1Vx54sz/kosP5DVBWB7nUTJkJ5kar6wlkbhSEIZQupPS6C4G4QT9ZtVVWaL5jz1kbICFLEjziGvl9RwIfA==","_npmVersion":"10.9.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"2.4.4","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_2.4.4_1754660607515_0.22835670236811945","host":"s3://npm-registry-packages-npm-production"}},"2.4.5":{"name":"@signe/room","version":"2.4.5","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@2.4.5","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"2ca6ac9aa7e8ea6ecec6bd76547addaa714e75f4","tarball":"https://registry.npmjs.org/@signe/room/-/room-2.4.5.tgz","fileCount":39,"integrity":"sha512-0+GmAhF0L6OtBXxe/HWNUpFRNS5UiEBNDCiRJ0t2Zf3jf3ucqpx86wSdDE/kLyDi2WK8Q8l3UQn+YA91wE7l+Q==","signatures":[{"sig":"MEQCIBZbaTKNi2iRMLbhKRqrQZo1+Y7CGbSrC4TZUI1iaj+hAiAD2ht4G2cDCZ8S68VSirHFE4ASITrePKBdX1hO5Q7Dpg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":518536},"main":"./dist/index.js","type":"module","_from":"file:signe-room-2.4.5.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/87cb223dfd5b0bc32e16540da40cb37e/signe-room-2.4.5.tgz","_integrity":"sha512-0+GmAhF0L6OtBXxe/HWNUpFRNS5UiEBNDCiRJ0t2Zf3jf3ucqpx86wSdDE/kLyDi2WK8Q8l3UQn+YA91wE7l+Q==","_npmVersion":"10.9.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"2.4.5","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_2.4.5_1754661364872_0.2825585286357095","host":"s3://npm-registry-packages-npm-production"}},"2.4.6":{"name":"@signe/room","version":"2.4.6","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@2.4.6","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"56d9f5fa174d35abfc0d55648b4ec41caee3840b","tarball":"https://registry.npmjs.org/@signe/room/-/room-2.4.6.tgz","fileCount":39,"integrity":"sha512-esTLut/W1d5ZsZmwod3zxEbky9QAQiz3bNRKVAsvsJyIU296dG3Dz6n7yhKWaCaCDLQvZkrAHwTUVIlD2HZhJw==","signatures":[{"sig":"MEUCIDssKm46K+oAVNC3avH/4kn4UbXsV2z8ruHAbeIK8/J1AiEA3uCK16CspLxSd8punQzCNp0UXzybAatIbJz6fkiJ1Y0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":518087},"main":"./dist/index.js","type":"module","_from":"file:signe-room-2.4.6.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/43c4c32461fac604ba3228fa6ffdba8c/signe-room-2.4.6.tgz","_integrity":"sha512-esTLut/W1d5ZsZmwod3zxEbky9QAQiz3bNRKVAsvsJyIU296dG3Dz6n7yhKWaCaCDLQvZkrAHwTUVIlD2HZhJw==","_npmVersion":"10.9.3","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"2.4.6","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_2.4.6_1755006524270_0.8213578349765946","host":"s3://npm-registry-packages-npm-production"}},"2.5.0":{"name":"@signe/room","version":"2.5.0","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@2.5.0","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"1a859cb26d344337a5efafed7f5e7313f4c69e72","tarball":"https://registry.npmjs.org/@signe/room/-/room-2.5.0.tgz","fileCount":39,"integrity":"sha512-ets39M5mfTpz9dIj+pbEPJuAfgTHs7p3cxbQFnw3SfsmGGk5Jquruwj2UPzxXfkwKWMzyUAvnN0kDeQQ3KHj/w==","signatures":[{"sig":"MEUCIQDI7t607Bg9EAtO+53UV+TG/iBID5ga3IK4ydwooSfITQIgQemLX0iY5eC5LEaPGisHyVwmvOTg2QoJzU/yamlTZ1Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":518087},"main":"./dist/index.js","type":"module","_from":"file:signe-room-2.5.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/2234af306f6ffa4f50d7962035c7dad5/signe-room-2.5.0.tgz","_integrity":"sha512-ets39M5mfTpz9dIj+pbEPJuAfgTHs7p3cxbQFnw3SfsmGGk5Jquruwj2UPzxXfkwKWMzyUAvnN0kDeQQ3KHj/w==","_npmVersion":"10.9.3","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"2.5.0","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_2.5.0_1760354702814_0.7061137749187989","host":"s3://npm-registry-packages-npm-production"}},"2.5.1":{"name":"@signe/room","version":"2.5.1","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@2.5.1","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"3f97982f08e43f478878976094f074e88850743a","tarball":"https://registry.npmjs.org/@signe/room/-/room-2.5.1.tgz","fileCount":39,"integrity":"sha512-6wsk5j69nHPtlsHmaLfFmJ+F1FFOHOE4x2FuZEM7uQk+VWSHV4/b8duScacjYhyTX4a/Lzvd/7Jclc4G+e19ww==","signatures":[{"sig":"MEUCICjzeU+NYwoptlY5Lj1ucZoU9RH4JuLQarz2P+3H8Q4pAiEA5yVkX6S2lLjXoRMsUi8SF2i25ns+3lqpRjx5JtAuHTU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":519728},"main":"./dist/index.js","type":"module","_from":"file:signe-room-2.5.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/11e0f0c8ea1f3eefa28573d9698942be/signe-room-2.5.1.tgz","_integrity":"sha512-6wsk5j69nHPtlsHmaLfFmJ+F1FFOHOE4x2FuZEM7uQk+VWSHV4/b8duScacjYhyTX4a/Lzvd/7Jclc4G+e19ww==","_npmVersion":"11.6.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"2.5.1","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_2.5.1_1764328704612_0.5807374427595735","host":"s3://npm-registry-packages-npm-production"}},"2.5.2":{"name":"@signe/room","version":"2.5.2","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@2.5.2","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"1f535cde08da55efd29a4152a25a7008c80eb419","tarball":"https://registry.npmjs.org/@signe/room/-/room-2.5.2.tgz","fileCount":39,"integrity":"sha512-TNHsP42XlKYJ6HEMtIk9yp2FhIisukdmhoLUxffzOTXWTBgbDZ21V3U9j0UE07uaRQD8fxyKOMgRJYyCJbgG/w==","signatures":[{"sig":"MEQCIDA/6pgC2hp8YimKv2EdcR5AyViW5q2Za6R4Z2muXckoAiASHnrky/vBU38Pt+9Wd7/k+D0j/cbC2JQyAB4GBQWrSQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":519728},"main":"./dist/index.js","type":"module","_from":"file:signe-room-2.5.2.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/c2a7caa015bd8bd3ebf23af631945c86/signe-room-2.5.2.tgz","_integrity":"sha512-TNHsP42XlKYJ6HEMtIk9yp2FhIisukdmhoLUxffzOTXWTBgbDZ21V3U9j0UE07uaRQD8fxyKOMgRJYyCJbgG/w==","_npmVersion":"11.6.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"2.5.2","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_2.5.2_1764628724969_0.6227919115708194","host":"s3://npm-registry-packages-npm-production"}},"2.6.0":{"name":"@signe/room","version":"2.6.0","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@2.6.0","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"ea93cd92d8fd0472e1a063398e875c30bd0e801c","tarball":"https://registry.npmjs.org/@signe/room/-/room-2.6.0.tgz","fileCount":39,"integrity":"sha512-8AFXGP11CKkUF7Yst9kEsSzYZFSqS3QpxEOF+nahACQIEVdi8rpTnbo5Z5lNPng920s1e1xc07zNl4M18qDTKw==","signatures":[{"sig":"MEQCIB0MNuR6PSs+Jp6G0FkdfrHBkNTzIkMijjelPwmrgNC3AiAcdsS7EDmnnxEQenpHhVaGPsOUpNjOHY1gc4chg59mJg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":519728},"main":"./dist/index.js","type":"module","_from":"file:signe-room-2.6.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/504c3721144212049c7cf882197fba7e/signe-room-2.6.0.tgz","_integrity":"sha512-8AFXGP11CKkUF7Yst9kEsSzYZFSqS3QpxEOF+nahACQIEVdi8rpTnbo5Z5lNPng920s1e1xc07zNl4M18qDTKw==","_npmVersion":"11.6.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"2.6.0","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_2.6.0_1765463228456_0.6038945086546623","host":"s3://npm-registry-packages-npm-production"}},"2.7.0":{"name":"@signe/room","version":"2.7.0","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@2.7.0","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"fd76fa1edbc276204b496707c4a7ee75928b6874","tarball":"https://registry.npmjs.org/@signe/room/-/room-2.7.0.tgz","fileCount":39,"integrity":"sha512-kSOjp7+qRGdpnXOTftrmZIp6csfRtxj0ES+8eHts5vIPfORZTz/ToVr5FFofcbzLV33Cy7guYrGcZyGvHwoc/g==","signatures":[{"sig":"MEQCIAoWxVkIKUlaU2BPC6ANka5Rdfg0F9t6qawPbPTxcDPRAiAZB0YCiCrpKQhvr7mFVNMHiJn/jMjJjrE7BFP8t6h9qg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":527899},"main":"./dist/index.js","type":"module","_from":"file:signe-room-2.7.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/8c1010226f970c70f10c04629cb6e1cf/signe-room-2.7.0.tgz","_integrity":"sha512-kSOjp7+qRGdpnXOTftrmZIp6csfRtxj0ES+8eHts5vIPfORZTz/ToVr5FFofcbzLV33Cy7guYrGcZyGvHwoc/g==","_npmVersion":"11.6.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"2.7.0","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_2.7.0_1765633676887_0.5789254183549752","host":"s3://npm-registry-packages-npm-production"}},"2.7.1":{"name":"@signe/room","version":"2.7.1","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@2.7.1","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"0bc3900f255007b9baed50026ccdff5ae2d6103c","tarball":"https://registry.npmjs.org/@signe/room/-/room-2.7.1.tgz","fileCount":39,"integrity":"sha512-HAABFMShAHt4nMK5BI4QSmTTRdpCcTRr5SLQ3SqRJd7TUSLM2fea7xVtZi8pJWzsqiA+89px9mKRrA6eCfoWyA==","signatures":[{"sig":"MEYCIQCbuGlk2NlXNh4qxm4rntmSy3wvwGRvfA96Klk0IjcMuAIhAMinz0IXqZ71hDh4SgGWRMv3i/EEaQO96dydFLbSyegN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":528274},"main":"./dist/index.js","type":"module","_from":"file:signe-room-2.7.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/a8fa3d4328a5ef91ffaa9b5653917325/signe-room-2.7.1.tgz","_integrity":"sha512-HAABFMShAHt4nMK5BI4QSmTTRdpCcTRr5SLQ3SqRJd7TUSLM2fea7xVtZi8pJWzsqiA+89px9mKRrA6eCfoWyA==","_npmVersion":"11.6.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"2.7.1","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_2.7.1_1765639472042_0.3785485519086289","host":"s3://npm-registry-packages-npm-production"}},"2.7.2":{"name":"@signe/room","version":"2.7.2","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@2.7.2","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"620f2d71336cef79e16ce7621c67bd779f484e6b","tarball":"https://registry.npmjs.org/@signe/room/-/room-2.7.2.tgz","fileCount":39,"integrity":"sha512-V9HA8I/ws9QTIdLNvuxdvjuKu4eaPy9Sba9eE5bcqZbxp8vlKaWKdSFIHaTxWoHSRnGMri/mJCnBBWzL8a0H+w==","signatures":[{"sig":"MEYCIQDyAV3gyAOxwcBgDtClvJ+eyaEn2D2KEWeZl47Wg+ubEAIhAJeXyI93TtE1oi3UltVsvtgh7TaVlodMO8CU6/LJ2VC7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":528574},"main":"./dist/index.js","type":"module","_from":"file:signe-room-2.7.2.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/14e265b4b731f0303b74faf674fc26b5/signe-room-2.7.2.tgz","_integrity":"sha512-V9HA8I/ws9QTIdLNvuxdvjuKu4eaPy9Sba9eE5bcqZbxp8vlKaWKdSFIHaTxWoHSRnGMri/mJCnBBWzL8a0H+w==","_npmVersion":"11.6.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"2.7.2","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_2.7.2_1765642068713_0.3948017478701238","host":"s3://npm-registry-packages-npm-production"}},"2.7.3":{"name":"@signe/room","version":"2.7.3","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@2.7.3","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"8cac5df6bda8abd8123bffa128ea2c53c0d77d98","tarball":"https://registry.npmjs.org/@signe/room/-/room-2.7.3.tgz","fileCount":39,"integrity":"sha512-kHu43uRJ8DWyolrbb2JeRBGrWz1X4fgY5NSms0Usk/ayxWxAsJHYsqTVtz5seT06l+5BwfEi4v4Yd1ROHJZ3ug==","signatures":[{"sig":"MEUCIQCLv/FzLWjXeaOPGiFPbQXCRcUqlAZ43CWTEQA5HYH/LAIgSEwMxVuiTKefVZDyMSViiMj7xtdt7yDB4pt3AknYdLc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":532174},"main":"./dist/index.js","type":"module","_from":"file:signe-room-2.7.3.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/e2272826b0cd7d6e4a73316e0336f626/signe-room-2.7.3.tgz","_integrity":"sha512-kHu43uRJ8DWyolrbb2JeRBGrWz1X4fgY5NSms0Usk/ayxWxAsJHYsqTVtz5seT06l+5BwfEi4v4Yd1ROHJZ3ug==","_npmVersion":"11.6.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"2.7.3","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_2.7.3_1765722838148_0.17530633565938758","host":"s3://npm-registry-packages-npm-production"}},"2.8.0":{"name":"@signe/room","version":"2.8.0","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@2.8.0","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"721b8ab2b41ea81576b938255ec03f2839f92bc9","tarball":"https://registry.npmjs.org/@signe/room/-/room-2.8.0.tgz","fileCount":39,"integrity":"sha512-G26fzZcS/S1qcPlusTp4Pvk74XeyrR5zmEyqmHiwWdLW9uLi5lNE/riqzH35BeS8n6NaJMSXqmbe/7KE223wPA==","signatures":[{"sig":"MEUCIQDtqTtUWJnzlxaLG6oSrqj7dr6ypRQmS8G1RWgOdlWL4wIgLSq1NTH96vgg5jpxORT9Wn2Cp69LZIbM39L6vIyW73A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":535183},"main":"./dist/index.js","type":"module","_from":"file:signe-room-2.8.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/ea276f4488964781a73c01ea58947d8e/signe-room-2.8.0.tgz","_integrity":"sha512-G26fzZcS/S1qcPlusTp4Pvk74XeyrR5zmEyqmHiwWdLW9uLi5lNE/riqzH35BeS8n6NaJMSXqmbe/7KE223wPA==","_npmVersion":"11.6.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"2.8.0","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_2.8.0_1767891684860_0.31793466803081816","host":"s3://npm-registry-packages-npm-production"}},"2.8.1":{"name":"@signe/room","version":"2.8.1","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@2.8.1","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"1d17b51a7e97e22fca4eb1326ba750af373c3561","tarball":"https://registry.npmjs.org/@signe/room/-/room-2.8.1.tgz","fileCount":39,"integrity":"sha512-1EQ18yfa9NF2DNbY350saOl/TlPDmj67hCVJuIbaWkG0BqT7nsk7ERfUHEOS8FcRzTG0d8u/3Aa7uVI2G/OKjw==","signatures":[{"sig":"MEQCIH6goa4e7rqUg3XcekrTCqQuaSFBxMbjNTT9fewwZVtLAiAQx1F20Dd7bkYknfR3B/sXfnBYgRc3ZkxLKWpWsLOsxQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":535183},"main":"./dist/index.js","type":"module","_from":"file:signe-room-2.8.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/1d037fb54608fa642b0fe78e117b4675/signe-room-2.8.1.tgz","_integrity":"sha512-1EQ18yfa9NF2DNbY350saOl/TlPDmj67hCVJuIbaWkG0BqT7nsk7ERfUHEOS8FcRzTG0d8u/3Aa7uVI2G/OKjw==","_npmVersion":"11.6.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"2.8.1","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_2.8.1_1767893369407_0.38628415270354033","host":"s3://npm-registry-packages-npm-production"}},"2.8.2":{"name":"@signe/room","version":"2.8.2","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@2.8.2","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"f72962455c03ba53cabbc1d3723dcbf93314c046","tarball":"https://registry.npmjs.org/@signe/room/-/room-2.8.2.tgz","fileCount":39,"integrity":"sha512-7JU/0/fqzubd1b1JJsOihQu70CaEMagBkqo94/9BZI+nViAlGLoYOWJLr0LBa4E1vWj+oL92eyXj/3xomfN/1Q==","signatures":[{"sig":"MEQCIDLAO4qc1yd0g2TrA8SFxvYbTgg9z3gidXmw2RME8aL3AiB7s2ux4qrSEFzpz137BtVW0kFTTBLThAJEW0AZsrSb6A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":535252},"main":"./dist/index.js","type":"module","_from":"file:signe-room-2.8.2.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/f2ff4baf674adcf1fa7ea6467c522ebd/signe-room-2.8.2.tgz","_integrity":"sha512-7JU/0/fqzubd1b1JJsOihQu70CaEMagBkqo94/9BZI+nViAlGLoYOWJLr0LBa4E1vWj+oL92eyXj/3xomfN/1Q==","_npmVersion":"11.6.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"2.8.2","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_2.8.2_1767954807840_0.169198346176352","host":"s3://npm-registry-packages-npm-production"}},"2.8.3":{"name":"@signe/room","version":"2.8.3","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@2.8.3","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"0989c16b395da6359b155b1763e77d308b119ff0","tarball":"https://registry.npmjs.org/@signe/room/-/room-2.8.3.tgz","fileCount":39,"integrity":"sha512-aN0aCxIY1nYrgBQTHa42wlEZRCGtk+K0XG/TwtHyFaji2oGwq/VMBUaS3kZeRN8QWneN599OVxUVPT8uuVogKw==","signatures":[{"sig":"MEUCIQCt2NshKb+ccOLOG9A3hGJraBt2g6FVMaBsR5EQbvMoPQIgLAI4+VO8oHQcgDGjOO8XAD5l57fmz6TGaz0PEeCPDsE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":535358},"main":"./dist/index.js","type":"module","_from":"file:signe-room-2.8.3.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/789a7a36ada428a68858d508637166e9/signe-room-2.8.3.tgz","_integrity":"sha512-aN0aCxIY1nYrgBQTHa42wlEZRCGtk+K0XG/TwtHyFaji2oGwq/VMBUaS3kZeRN8QWneN599OVxUVPT8uuVogKw==","_npmVersion":"11.6.2","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"2.8.3","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_2.8.3_1768390778129_0.6056011648425534","host":"s3://npm-registry-packages-npm-production"}},"2.9.0":{"name":"@signe/room","version":"2.9.0","keywords":[],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@2.9.0","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"d450309ff885132d4155b23b8e2e8fbeeef2bda0","tarball":"https://registry.npmjs.org/@signe/room/-/room-2.9.0.tgz","fileCount":39,"integrity":"sha512-uu6aThVC0B8HEx9ZTCAd7Kb454yA+J0/HJFjsARXkGwAXc85r2A61Gu8Pt/LjGOCW0yfSC/wlt3qzSdOwslTVQ==","signatures":[{"sig":"MEUCIC79U1xbHEGpuF+1Km+/O5m0V8wmcOdHWgIKnPANFfFdAiEAh1BdYASoj+dUG05RddByk/4HXRFCQbJycfuvxqlnjhk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":539503},"main":"./dist/index.js","type":"module","_from":"file:signe-room-2.9.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/32fe6778960c25181a10110cee97c6be/signe-room-2.9.0.tgz","_integrity":"sha512-uu6aThVC0B8HEx9ZTCAd7Kb454yA+J0/HJFjsARXkGwAXc85r2A61Gu8Pt/LjGOCW0yfSC/wlt3qzSdOwslTVQ==","_npmVersion":"11.11.0","description":"A real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"2.9.0","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_2.9.0_1775208992175_0.7620823660267628","host":"s3://npm-registry-packages-npm-production"}},"2.9.2":{"name":"@signe/room","version":"2.9.2","keywords":["partykit","realtime","websocket","cloudflare","typescript"],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@2.9.2","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"1e5fb3acfac92a2250392b725796109101fd6aac","tarball":"https://registry.npmjs.org/@signe/room/-/room-2.9.2.tgz","fileCount":41,"integrity":"sha512-Fmd9E0/vecJIn06BLcqaD4pK0d59NiSr85reNqRzwafQsNy+uRWevwclCADTj2cuq1rKfzVu9kW/XdWnHKLSlg==","signatures":[{"sig":"MEQCIFBfbOZkPfSs1xMJAsgIeOGdhrpoUqWvCbxbY1fSxDnuAiB8oZf3mtjDP9l5K3vluipzyGbFdNr2REX7eJr3NZ3X2w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":512193},"main":"./dist/index.js","type":"module","_from":"file:signe-room-2.9.2.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/0126cdcc09c4efe7af46613481267e93/signe-room-2.9.2.tgz","_integrity":"sha512-Fmd9E0/vecJIn06BLcqaD4pK0d59NiSr85reNqRzwafQsNy+uRWevwclCADTj2cuq1rKfzVu9kW/XdWnHKLSlg==","_npmVersion":"11.11.0","description":"PartyKit room primitives with synchronized state, sessions, guards, and HTTP handlers.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"2.9.2","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_2.9.2_1778163936545_0.17297228153437705","host":"s3://npm-registry-packages-npm-production"}},"2.9.3":{"name":"@signe/room","version":"2.9.3","keywords":["partykit","realtime","websocket","cloudflare","typescript"],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@2.9.3","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"0ff06db83202fb93df1c1d20d6dac7307599aaf6","tarball":"https://registry.npmjs.org/@signe/room/-/room-2.9.3.tgz","fileCount":41,"integrity":"sha512-dccd+QCz5v74j88JLLmnx2rWGM+mhzSBbhrX/0ntexebTqGyiH8+ThPlBRRJnguk8bHaM3xb9GK9FPfw+fiJMA==","signatures":[{"sig":"MEUCID17XfVylaCsf+eYbqSnTOYtZIydgYEvBXiWR1ZG4LBZAiEA2GAx2AgtdeslENpW9MzkcRF9j8v1pXzbS81Hrs+9DHM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":512278},"main":"./dist/index.js","type":"module","_from":"file:signe-room-2.9.3.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/f8e1cf4fb88eaf7d0a92637a47d3adaf/signe-room-2.9.3.tgz","_integrity":"sha512-dccd+QCz5v74j88JLLmnx2rWGM+mhzSBbhrX/0ntexebTqGyiH8+ThPlBRRJnguk8bHaM3xb9GK9FPfw+fiJMA==","_npmVersion":"11.11.0","description":"PartyKit room primitives with synchronized state, sessions, guards, and HTTP handlers.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"2.9.3","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_2.9.3_1778166737680_0.22551215801668034","host":"s3://npm-registry-packages-npm-production"}},"2.9.4":{"name":"@signe/room","version":"2.9.4","keywords":["partykit","realtime","websocket","cloudflare","typescript"],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@2.9.4","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"5394b5babbb44bd13210c27fdad64761d4e80fe7","tarball":"https://registry.npmjs.org/@signe/room/-/room-2.9.4.tgz","fileCount":41,"integrity":"sha512-9HO5OilTpxrnH3ewjqhHYXpGYLjglYBgP6m3ywQcMNi/R2zpxz07li6/kwgseSiZYxU2NaguuiTqiTg3lGY/eg==","signatures":[{"sig":"MEQCIBVmAhVQjUiv2SiJxybGxZcNB4Debu3az6wdTgk0MdNpAiAv2GFCjN68t0vZjdlO9xP3AZCGsLqU35JWray3PLpMNw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":512363},"main":"./dist/index.js","type":"module","_from":"file:signe-room-2.9.4.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/31001dd2cca851aa24ac9d648a294a8c/signe-room-2.9.4.tgz","_integrity":"sha512-9HO5OilTpxrnH3ewjqhHYXpGYLjglYBgP6m3ywQcMNi/R2zpxz07li6/kwgseSiZYxU2NaguuiTqiTg3lGY/eg==","_npmVersion":"11.11.0","description":"PartyKit room primitives with synchronized state, sessions, guards, and HTTP handlers.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"2.9.4","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_2.9.4_1778173335596_0.40347477623333416","host":"s3://npm-registry-packages-npm-production"}},"2.10.0":{"name":"@signe/room","version":"2.10.0","keywords":["partykit","realtime","websocket","cloudflare","typescript"],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@2.10.0","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"fb4628a9c9b4c0a8e34117ed2b275683b3cdcd6a","tarball":"https://registry.npmjs.org/@signe/room/-/room-2.10.0.tgz","fileCount":41,"integrity":"sha512-AGJ/28numjPyhclw/wOZcYJz1Tb+ZVeDnQYy1gKN3deYb6RBCKYbLX3X0YEme5Z33XlxIum5Aq341dXsb+nQQA==","signatures":[{"sig":"MEUCIDjj1tkDUZj7JhDmFzBaRC8NFwXIMia3g0PPUsHaOpyrAiEA5TktyLwarOM5pZj1kHFOzWTlhAnDKjNMi7FWkXhFqME=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":509811},"main":"./dist/index.js","type":"module","_from":"file:signe-room-2.10.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --watch","build":"tsup src/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/74cdd6e5767463446f580fdd0d84cbec/signe-room-2.10.0.tgz","_integrity":"sha512-AGJ/28numjPyhclw/wOZcYJz1Tb+ZVeDnQYy1gKN3deYb6RBCKYbLX3X0YEme5Z33XlxIum5Aq341dXsb+nQQA==","_npmVersion":"11.11.0","description":"PartyKit room primitives with synchronized state, sessions, guards, and HTTP handlers.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"2.10.0","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20240603.0"},"_npmOperationalInternal":{"tmp":"tmp/room_2.10.0_1778260863990_0.814168928444543","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@signe/room","version":"3.0.0","keywords":["partykit","realtime","websocket","cloudflare","typescript"],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@3.0.0","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"9ac7fecdcffe04a7cf9579c63198cf92c6268ae0","tarball":"https://registry.npmjs.org/@signe/room/-/room-3.0.0.tgz","fileCount":71,"integrity":"sha512-iJK9HlL4aVS7Us+sxF079kK7Ius/An1eTOV6RirPdndOVl6G2zmSHbSt7Tl4a2h2XJsl9/BvJZzkui6Hk2ozyQ==","signatures":[{"sig":"MEYCIQDIL7uYJ5yMoxCp+QYJIXLMpFQLAG5boGP4rLCYWRa+kwIhAK0J9dGh94r/C3cobY6vQmRTIC4/zMfoSBmd7eYL+U/y","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":856358},"main":"./dist/index.js","type":"module","_from":"file:signe-room-3.0.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./node":{"types":"./dist/node/index.d.ts","import":"./dist/node/index.js"},"./cloudflare":{"types":"./dist/cloudflare/index.d.ts","import":"./dist/cloudflare/index.js"}},"scripts":{"dev":"tsup src/index.ts src/node/index.ts src/cloudflare/index.ts --watch","build":"tsup src/index.ts src/node/index.ts src/cloudflare/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/4537deeb038d238bc01a9abe05aca548/signe-room-3.0.0.tgz","_integrity":"sha512-iJK9HlL4aVS7Us+sxF079kK7Ius/An1eTOV6RirPdndOVl6G2zmSHbSt7Tl4a2h2XJsl9/BvJZzkui6Hk2ozyQ==","_npmVersion":"11.11.0","description":"PartyKit room primitives with synchronized state, sessions, guards, and HTTP handlers.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"3.0.0","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.13.9","@cloudflare/workers-types":"^4.20241218.0"},"_npmOperationalInternal":{"tmp":"tmp/room_3.0.0_1778672479467_0.27047685153207857","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"@signe/room","version":"3.0.1","keywords":["partykit","realtime","websocket","cloudflare","typescript"],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@3.0.1","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"7a018d3ad8bbaffccdb51b02d44dd00c235d2b29","tarball":"https://registry.npmjs.org/@signe/room/-/room-3.0.1.tgz","fileCount":72,"integrity":"sha512-1BdohT8kVs0m7QwrOz7oRgH2hiOGSYeug21W3/xoKVSKS1M60lQt6TjCw/gaiqUf/Cl35U2Y35AxFxQ3DcbaRg==","signatures":[{"sig":"MEQCIF0KqId6QUzrqZbVecnTXXqk0wd8RsWrdon159UztIWjAiBR1qolu+52IgC5ooGDjoa4gJUaRTOpjPlooR+KquKuSg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":879987},"main":"./dist/index.js","type":"module","_from":"file:signe-room-3.0.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./node":{"types":"./dist/node/index.d.ts","import":"./dist/node/index.js"},"./cloudflare":{"types":"./dist/cloudflare/index.d.ts","import":"./dist/cloudflare/index.js"}},"scripts":{"dev":"tsup src/index.ts src/node/index.ts src/cloudflare/index.ts --watch","build":"tsup src/index.ts src/node/index.ts src/cloudflare/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/210fd6b26737842f7c63613289232a09/signe-room-3.0.1.tgz","_integrity":"sha512-1BdohT8kVs0m7QwrOz7oRgH2hiOGSYeug21W3/xoKVSKS1M60lQt6TjCw/gaiqUf/Cl35U2Y35AxFxQ3DcbaRg==","_npmVersion":"11.11.0","description":"PartyKit room primitives with synchronized state, sessions, guards, and HTTP handlers.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"3.0.1","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.13.9","@cloudflare/workers-types":"^4.20241218.0"},"_npmOperationalInternal":{"tmp":"tmp/room_3.0.1_1778691843450_0.43521815697681343","host":"s3://npm-registry-packages-npm-production"}},"3.1.0":{"name":"@signe/room","version":"3.1.0","keywords":["partykit","realtime","websocket","cloudflare","typescript"],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@3.1.0","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"093f0b145fdbef3bf58247e01cbc6cb23ccb560b","tarball":"https://registry.npmjs.org/@signe/room/-/room-3.1.0.tgz","fileCount":72,"integrity":"sha512-9aNzyYK/b0dfkMDOFGCTX0fmAn4nljuvFmFxPbM/ON7GFo3xnzZk5Lq2obC2bcIO+P92n1lXoeUcSttVW7x9eg==","signatures":[{"sig":"MEQCIG/qa+ncL7mClMee6RrDzKwQvOEhZQ3XxEAk7nCd9/khAiBdv9lUBdC9p0hKWJCXn1SeBWFX0mtyMBUJ3MqZzmMXKg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":885124},"main":"./dist/index.js","type":"module","_from":"file:signe-room-3.1.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./node":{"types":"./dist/node/index.d.ts","import":"./dist/node/index.js"},"./cloudflare":{"types":"./dist/cloudflare/index.d.ts","import":"./dist/cloudflare/index.js"}},"scripts":{"dev":"tsup src/index.ts src/node/index.ts src/cloudflare/index.ts --watch","build":"tsup src/index.ts src/node/index.ts src/cloudflare/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/4b7e720e8a748a64aef65c8e10ae79ec/signe-room-3.1.0.tgz","_integrity":"sha512-9aNzyYK/b0dfkMDOFGCTX0fmAn4nljuvFmFxPbM/ON7GFo3xnzZk5Lq2obC2bcIO+P92n1lXoeUcSttVW7x9eg==","_npmVersion":"11.13.0","description":"PartyKit room primitives with synchronized state, sessions, guards, and HTTP handlers.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"3.1.0","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.13.9","@cloudflare/workers-types":"^4.20241218.0"},"_npmOperationalInternal":{"tmp":"tmp/room_3.1.0_1781509158119_0.9513537078137706","host":"s3://npm-registry-packages-npm-production"}},"3.1.1":{"name":"@signe/room","version":"3.1.1","keywords":["partykit","realtime","websocket","cloudflare","typescript"],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@3.1.1","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"70ee593b76abe7747442b69480d91fa2608a816d","tarball":"https://registry.npmjs.org/@signe/room/-/room-3.1.1.tgz","fileCount":72,"integrity":"sha512-0G+mQc9v2E/xrvVXE18YSebFl9hxTDwkhRq+MxP103j6t9d0F7wX5gbFd0Adf1GA057SQAya5zxuBOpJgYTVTQ==","signatures":[{"sig":"MEQCIA/L1xAoFN/c9icCRl1Bct2RHzXugzpMfLC68hmIcLnpAiBPsoXmKXFzAvIMb+AuagRR1bk7REq1aa7z1opGj27WvQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":885124},"main":"./dist/index.js","type":"module","_from":"file:signe-room-3.1.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./node":{"types":"./dist/node/index.d.ts","import":"./dist/node/index.js"},"./cloudflare":{"types":"./dist/cloudflare/index.d.ts","import":"./dist/cloudflare/index.js"}},"scripts":{"dev":"tsup src/index.ts src/node/index.ts src/cloudflare/index.ts --watch","build":"tsup src/index.ts src/node/index.ts src/cloudflare/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/0b1a926574203b7e5672414d18b1a705/signe-room-3.1.1.tgz","_integrity":"sha512-0G+mQc9v2E/xrvVXE18YSebFl9hxTDwkhRq+MxP103j6t9d0F7wX5gbFd0Adf1GA057SQAya5zxuBOpJgYTVTQ==","_npmVersion":"11.16.0","description":"PartyKit room primitives with synchronized state, sessions, guards, and HTTP handlers.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"3.1.1","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.13.9","@cloudflare/workers-types":"^4.20241218.0"},"_npmOperationalInternal":{"tmp":"tmp/room_3.1.1_1785229259262_0.6408742244958909","host":"s3://npm-registry-packages-npm-production"}},"3.2.0":{"name":"@signe/room","version":"3.2.0","keywords":["partykit","realtime","websocket","cloudflare","typescript"],"author":{"name":"Samuel Ronce"},"license":"MIT","_id":"@signe/room@3.2.0","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"dist":{"shasum":"cb1a4c7377929aa014eefd8630b5941519f368ef","tarball":"https://registry.npmjs.org/@signe/room/-/room-3.2.0.tgz","fileCount":76,"integrity":"sha512-k562j65uuHM2DY20swJqvbmppH+H4QwHrTDnlUSviUdAha1UNW+u0DrM30wW+edW2IfUZgoXvLgL/es5yZBFlw==","signatures":[{"sig":"MEQCIC2/alTwKWca5L3Ymo6HplXb4lLe4BMXAXIQ7qt4jJ0oAiAcVA+f1nl46uSCbObihusYGyBx6jPpnLfyaPF68vmMTA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":900223},"main":"./dist/index.js","type":"module","_from":"file:signe-room-3.2.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./node":{"types":"./dist/node/index.d.ts","import":"./dist/node/index.js"},"./cloudflare":{"types":"./dist/cloudflare/index.d.ts","import":"./dist/cloudflare/index.js"}},"scripts":{"dev":"tsup src/index.ts src/node/index.ts src/cloudflare/index.ts --watch","build":"tsup src/index.ts src/node/index.ts src/cloudflare/index.ts"},"_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"_resolved":"/tmp/a9a3b8383e8ca0a317492b4c9df0d5ff/signe-room-3.2.0.tgz","_integrity":"sha512-k562j65uuHM2DY20swJqvbmppH+H4QwHrTDnlUSviUdAha1UNW+u0DrM30wW+edW2IfUZgoXvLgL/es5yZBFlw==","_npmVersion":"11.16.0","description":"PartyKit room primitives with synchronized state, sessions, guards, and HTTP handlers.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"3.1.1","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.13.9","@cloudflare/workers-types":"^4.20241218.0"},"_npmOperationalInternal":{"tmp":"tmp/room_3.2.0_1786006531530_0.10702491206815079","host":"s3://npm-registry-packages-npm-production"}},"3.2.1":{"_id":"@signe/room@3.2.1","dist":{"shasum":"9fcd675bddfc874c2ac30d830e3c1779b98f59e7","tarball":"https://registry.npmjs.org/@signe/room/-/room-3.2.1.tgz","fileCount":76,"integrity":"sha512-g/1LC+jGTRExPRA1V+10dWYH7noZD8UuYhC75ucOHvBLNZ+3EAc9mqRIvgwOmFDN3i/ZPv0a0zM7NSOLrMmD3A==","signatures":[{"sig":"MEUCIQCssDv2yeFzBcCw25JMG/hmBPtce/5JdAI2MSpOEtiY8gIgU4vQk4Gwiw/v7e2SgK27O8+6LJS393eSf5MnpWZn684=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHj6RW3IcyuOZa/pbuKKmXrUhQ30LFIq+MXBid8Y9qZvAiEAvlazfsbfy9L8aBGp5T+aEgqRJH7EDBzlG8SS0pMANIk="}],"unpackedSize":874199},"main":"./dist/index.js","name":"@signe/room","type":"module","_from":"file:signe-room-3.2.1.tgz","types":"./dist/index.d.ts","author":{"name":"Samuel Ronce"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./node":{"types":"./dist/node/index.d.ts","import":"./dist/node/index.js"},"./cloudflare":{"types":"./dist/cloudflare/index.d.ts","import":"./dist/cloudflare/index.js"}},"license":"MIT","scripts":{"dev":"tsup src/index.ts src/node/index.ts src/cloudflare/index.ts --watch","build":"tsup src/index.ts src/node/index.ts src/cloudflare/index.ts"},"version":"3.2.1","_npmUser":{"name":"webcreative5","email":"sam@webcreative5.net"},"keywords":["partykit","realtime","websocket","cloudflare","typescript"],"_resolved":"/tmp/31be27927f16ed78a816daa4d33403c1/signe-room-3.2.1.tgz","_integrity":"sha512-g/1LC+jGTRExPRA1V+10dWYH7noZD8UuYhC75ucOHvBLNZ+3EAc9mqRIvgwOmFDN3i/ZPv0a0zM7NSOLrMmD3A==","_npmVersion":"11.19.0","description":"PartyKit room primitives with synchronized state, sessions, guards, and HTTP handlers.","directories":{},"maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"_nodeVersion":"24.21.0","dependencies":{"zod":"^3.23.8","dset":"^3.1.3","@signe/sync":"3.1.1","partysocket":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.13.9","@cloudflare/workers-types":"^4.20241218.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/room_3.2.1_1790418253252_0.11696784451445308"}}},"time":{"created":"2024-06-04T12:59:29.034Z","modified":"2026-09-26T10:24:13.520Z","0.0.1":"2024-06-04T12:59:29.282Z","0.0.2":"2024-07-08T08:09:48.723Z","1.0.0":"2024-09-22T13:18:47.624Z","1.0.1":"2024-10-18T07:58:24.561Z","1.0.2":"2025-01-04T16:33:14.337Z","1.0.3":"2025-01-06T10:48:34.534Z","1.0.4":"2025-01-19T13:11:12.918Z","1.1.0":"2025-01-28T03:19:46.252Z","1.1.1":"2025-02-04T14:10:38.508Z","1.2.0":"2025-02-11T02:14:33.426Z","1.2.1":"2025-02-11T02:55:41.922Z","1.3.0":"2025-02-13T08:58:25.160Z","1.4.0":"2025-02-15T11:15:51.771Z","1.4.1":"2025-02-18T04:12:20.702Z","1.4.2":"2025-02-24T07:59:30.824Z","2.0.0":"2025-03-01T13:09:54.303Z","2.0.1":"2025-03-04T11:11:23.120Z","2.1.0":"2025-03-04T13:58:16.270Z","2.2.0":"2025-03-05T14:21:49.333Z","2.3.0":"2025-03-06T09:13:35.244Z","2.3.1":"2025-03-31T10:03:02.010Z","2.3.2":"2025-04-15T07:42:21.130Z","2.3.3":"2025-04-18T08:38:50.687Z","2.4.0":"2025-07-10T14:45:36.637Z","2.4.1":"2025-08-07T10:15:36.402Z","2.4.2":"2025-08-08T07:51:30.527Z","2.4.3":"2025-08-08T08:55:49.328Z","2.4.4":"2025-08-08T13:43:27.706Z","2.4.5":"2025-08-08T13:56:05.044Z","2.4.6":"2025-08-12T13:48:44.447Z","2.5.0":"2025-10-13T11:25:02.983Z","2.5.1":"2025-11-28T11:18:24.828Z","2.5.2":"2025-12-01T22:38:45.166Z","2.6.0":"2025-12-11T14:27:08.622Z","2.7.0":"2025-12-13T13:47:57.040Z","2.7.1":"2025-12-13T15:24:32.207Z","2.7.2":"2025-12-13T16:07:48.892Z","2.7.3":"2025-12-14T14:33:58.290Z","2.8.0":"2026-01-08T17:01:25.031Z","2.8.1":"2026-01-08T17:29:29.560Z","2.8.2":"2026-01-09T10:33:28.003Z","2.8.3":"2026-01-14T11:39:38.269Z","2.9.0":"2026-04-03T09:36:32.335Z","2.9.2":"2026-05-07T14:25:36.707Z","2.9.3":"2026-05-07T15:12:17.841Z","2.9.4":"2026-05-07T17:02:15.773Z","2.10.0":"2026-05-08T17:21:04.172Z","3.0.0":"2026-05-13T11:41:19.766Z","3.0.1":"2026-05-13T17:04:03.669Z","3.1.0":"2026-06-15T07:39:18.302Z","3.1.1":"2026-07-28T09:00:59.464Z","3.2.0":"2026-08-06T08:55:31.709Z","3.2.1":"2026-09-26T10:24:13.364Z"},"author":{"name":"Samuel Ronce"},"license":"MIT","keywords":["partykit","realtime","websocket","cloudflare","typescript"],"description":"PartyKit room primitives with synchronized state, sessions, guards, and HTTP handlers.","maintainers":[{"name":"webcreative5","email":"sam@webcreative5.net"}],"readme":"# @signe/room\n\nA real-time multiplayer room system for Signe applications, providing seamless state synchronization and user management.\n\n## Installation\n\n```bash\nnpm install @signe/room @signe/reactive @signe/sync\n```\n\n## Features\n\n- 🔄 Automatic state synchronization across clients\n- 👥 Built-in user management with customizable player classes\n- 🎮 Action-based message handling with type safety\n- 🌐 HTTP request routing with path parameters\n- 🔐 Flexible authentication and authorization system\n- 🛡️ Guard system for room and action-level security\n- 🎯 Full TypeScript support\n- 🔌 WebSocket-based real-time communication\n- 💾 Automatic state persistence\n- 🚀 Optimized for performance with throttling support\n\n## Basic Usage\n\nHere's a simple example of a multiplayer game room:\n\n```ts\nimport { signal } from \"@signe/reactive\";\nimport { Room, Server, Action } from \"@signe/room\";\nimport { id, sync, users } from \"@signe/sync\";\n\n// Define a Player class\nclass Player {\n  @id() id: string;\n  @sync() x = signal(0);\n  @sync() y = signal(0);\n  @sync() score = signal(0);\n}\n\n// Create your room\n@Room({\n  path: \"game\",\n})\nclass GameRoom {\n  @users(Player) players = signal({});\n  @sync() gameState = signal(\"waiting\");\n\n  @Action(\"move\")\n  move(player: Player, position: { x: number, y: number }) {\n    player.x.set(position.x);\n    player.y.set(position.y);\n  }\n}\n\n// Create your server\nexport default class GameServer extends Server {\n  rooms = [GameRoom];\n}\n```\n\n## Action \n\nAn action is a function that is called when a client sends a message to the server.\n\nFunction have to be decorated with the `@Action` decorator and  have 3 parameters:\n\n- The first parameter is the player instance\n- The second parameter is the value of the action\n- The third parameter is the Party.Connection instance\n\n### Unhandled actions\n\nIf you want to catch any valid WebSocket message whose `action` is not registered\nwith `@Action(...)`, you can use `@UnhandledAction()`.\n\nThe fallback handler receives:\n\n- The first parameter is the player instance\n- The second parameter is the full message object: `{ action, value }`\n- The third parameter is the `Party.Connection` instance\n\n```ts\nimport { Action, Guard, Room, UnhandledAction } from \"@signe/room\";\n\nfunction isAuthenticated(conn: Party.Connection, value: any, room: Party.Room) {\n  return !!conn.state?.publicId;\n}\n\n@Room({\n  path: \"game\",\n})\nclass GameRoom {\n  @Action(\"move\")\n  move(player: any, value: { x: number; y: number }) {\n    player.x.set(value.x);\n    player.y.set(value.y);\n  }\n\n  @UnhandledAction()\n  @Guard([isAuthenticated])\n  onUnhandledAction(\n    player: any,\n    message: { action: string; value: unknown },\n    conn: Party.Connection\n  ) {\n    console.warn(\"Unhandled action\", message.action, message.value, {\n      connectionId: conn.id,\n      sessionId: conn.sessionId,\n    });\n  }\n}\n```\n\nNotes:\n\n- `@UnhandledAction()` is only called if the incoming message matches the expected\n  WebSocket shape `{ action, value }`\n- If a matching `@Action(\"...\")` exists, it always has priority over\n  `@UnhandledAction()`\n- You can combine `@UnhandledAction()` with `@Guard(...)`\n\n## HTTP Request Handling\n\nThe `@Request` decorator allows you to handle HTTP requests with specific routes and methods:\n\n```ts\nimport { z } from \"zod\";\nimport { Room, Request, RequestGuard, ServerResponse } from \"@signe/room\";\n\n@Room({\n  path: \"api\"\n})\nclass ApiRoom {\n  @sync() gameState = signal(\"waiting\");\n  @users(Player) players = signal({});\n  @sync() scores = signal([]);\n\n  // Handle GET requests\n  @Request({ path: \"/status\" })\n  getStatus(req: Party.Request) {\n    return {\n      status: \"online\",\n      players: Object.keys(this.players()).length,\n      gameState: this.gameState(),\n    };\n  }\n\n  // Handle requests with path parameters\n  @Request({ path: \"/players/:id\" })\n  getPlayer(req: Party.Request, res: ServerResponse) {\n    const player = this.players()[req.params.id];\n    if (!player) {\n      return res.notFound(\"Player not found\");\n    }\n    return player;\n  }\n\n  // Handle POST requests with body validation\n  @Request(\n    { path: \"/scores\", method: \"POST\" },\n    z.object({ \n      playerId: z.string(),\n      score: z.number().min(0)\n    })\n  )\n  @Guard([isAuthenticated])\n  submitScore(req: Party.Request, res: ServerResponse) {\n    this.scores.update(scores => [...scores, req.data]);\n    return res.success({ success: true });\n  }\n}\n```\n\nRequest handler methods receive these parameters:\n1. `req`: The original Party.Request object\n2. `body`: The validated request body (if validation schema was provided)\n3. `params`: An object containing any path parameters\n4. `room`: The Party.Room instance\n\nYou can return:\n- A Response object for complete control\n- An object that will be serialized as JSON\n- A string that will be returned as text/plain\n\n## Advanced Features\n\n### User Sessions and Reconnects\n\nRooms use the WebSocket `id` query parameter as the private session id\n(`privateId`). Each active WebSocket still receives its own unique\n`conn.id`; the stable session id is available as `conn.sessionId`. The\ncorresponding `publicId` is the key used in `@users()` collections. Query\nparameters such as a display name are user data only; they do not identify the\nsession.\n\nIdentifier summary:\n\n| Identifier | Meaning | Stability |\n| --- | --- | --- |\n| `conn.id` | Unique WebSocket connection id | New for every active socket |\n| `conn.sessionId` | Private session id from the WebSocket `id` query parameter | Stable across reconnects and shared by tabs using the same `id` |\n| `publicId` | User id stored in `@users()` collections | Stable for the restored session |\n\nUse `conn.id` when you need to address or exclude one physical WebSocket, for\nexample `room.broadcast(message, [conn.id])`. Use `conn.sessionId` when you\nneed to read, restore, transfer, or log the private user session.\n\nPass a stable `id` when connecting if a browser refresh or reconnect should\nrestore the same user. If `id` is omitted, each connection creates a new\nsession and therefore a new user entry. To implement logout, remove or rotate\nthe stored id before reconnecting.\n\nMultiple active WebSockets can use the same session id. They share the same\n`publicId`, receive broadcasts independently, and the user is marked offline\nonly after the last connection for that session closes.\n\n```ts\nimport { connectionRoom } from \"@signe/sync/client\";\n\nconst sessionId =\n  localStorage.getItem(\"room-session-id\") ?? crypto.randomUUID();\n\nlocalStorage.setItem(\"room-session-id\", sessionId);\n\nawait connectionRoom({\n  host: window.location.origin,\n  room: \"your-room-name\",\n  party: \"main\",\n  id: sessionId,\n}, roomInstance);\n```\n\n### Session Transfer\n\nYou can transfer a user's session from one room to another using `$sessionTransfer`.\nThis is an advanced use of the same session mechanism and preserves the same\nprivate session id (`privateId`) across rooms.\n\nServer-side (inside a room or action):\n\n```ts\n@Action(\"transfer\")\nasync transfer(player: Player, data: { targetRoomId: string }, conn: Party.Connection) {\n  const transferToken = await this.$sessionTransfer(conn, data.targetRoomId);\n  return { transferToken };\n}\n```\n\nClient-side:\n- Connect to the target room with the same session id (`privateId`).\n- You can pass it as `id` in `connectionRoom` options from `@signe/sync/client`.\n- The target room restores the session and user data.\n\nExample (client):\n```ts\nimport { connectionRoom } from \"@signe/sync/client\";\n\nawait connectionRoom(\n  {\n    host: \"https://your-host\",\n    room: \"targetRoomId\",\n    id: \"private-session-id\",\n  },\n  roomInstance\n);\n```\n\nOptional: hydrate transferred snapshots before loading\n\nIf your user snapshot contains ids for complex instances (e.g. inventory items),\nimplement `onSessionRestore` on the room to resolve ids into instances before `load`.\n\n```ts\nclass GameRoom {\n  async onSessionRestore({ userSnapshot }) {\n    if (Array.isArray(userSnapshot.items)) {\n      const items = await this.itemRegistry.resolveMany(userSnapshot.items);\n      return { ...userSnapshot, items };\n    }\n    return userSnapshot;\n  }\n}\n```\n\n### Snapshot Hydration (Ids -> Instances)\n\nWhen a snapshot only contains ids for complex objects, you need to resolve them\nbefore calling `load`. This is useful even outside session transfer.\n\n```ts\nconst snapshot = createStatesSnapshotDeep(user);\n\n// Resolve ids to instances\nconst items = await itemRegistry.resolveMany(snapshot.items);\n\n// Hydrate and load\nconst hydrated = { ...snapshot, items };\nload(user, hydrated, true);\n```\n\n### Storage Restore Hydration\n\nRoom storage is loaded automatically when a room starts. If persisted snapshots\ncontain complex values that must become runtime instances again, implement\n`onStorageRestore` or `onUserStorageRestore` on the room.\n\nUse `onStorageRestore` to transform the full room snapshot before it is loaded:\n\n```ts\nclass GameRoom {\n  async onStorageRestore({ snapshot, room, legacy }) {\n    return {\n      ...snapshot,\n      status: snapshot.status ?? \"waiting\",\n    };\n  }\n}\n```\n\nUse `onUserStorageRestore` to transform each persisted entry in the room's\n`@users()` collection. The hook receives a fresh user helper instance so you can\nreuse instance methods to hydrate nested data before the snapshot is loaded.\n\n```ts\nclass GameRoom {\n  @users(Player) players = signal({});\n\n  async onUserStorageRestore({ userSnapshot, user, publicId }) {\n    return {\n      ...userSnapshot,\n      items: await user.resolveItems(userSnapshot.items),\n      skills: await user.resolveSkills(userSnapshot.skills),\n    };\n  }\n}\n```\n\nReturning `undefined` keeps the original snapshot unchanged. The `legacy` flag is\n`true` only when loading data from the pre-`state:` storage layout during\nautomatic migration.\n\n### Room Configuration\n\nThe `@Room` decorator accepts various configuration options:\n\n```ts\n@Room({\n  path: \"game-{id}\",     // Dynamic path with parameters\n  maxUsers: 4,           // Limit number of users\n  throttleStorage: 1000, // Throttle storage updates (ms)\n  throttleSync: 100,     // Throttle sync updates (ms)\n  hibernate: false,      // Enable/disable hibernation\n  guards: [isAuthenticated], // Room-level guards\n})\n```\n\n### Authentication & Authorization\n\nYou can implement authentication and authorization using guards:\n\n```ts\n// Authentication guard\nfunction isAuthenticated(conn: Connection, ctx: ConnectionContext) {\n  const token = ctx.request.headers.get(\"authorization\");\n  return validateToken(token); // Returns boolean or Promise<boolean>\n}\n\n// Role-based guard\nfunction isAdmin(conn: Connection, value: any) {\n  return conn.state.role === \"admin\";\n}\n\n@Room({\n  path: \"admin-panel\",\n  guards: [isAuthenticated], // Applied to all connections and messages\n})\nclass AdminRoom {\n  @Action(\"deleteUser\")\n  @Guard([isAdmin]) // Applied only to this action\n  async deleteUser(admin: Player, userId: string) {\n    // Only authenticated admins can execute this\n  }\n  \n  @Request({ path: \"/admin/users\", method: \"DELETE\" })\n  @Guard([isAdmin]) // Applied only to this request handler\n  async deleteUserViaHttp(req: Party.Request) {\n    // Only authenticated admins can access this endpoint\n  }\n}\n```\n\n### Action Validation with Zod\n\nYou can validate action input data using Zod schemas:\n\n```ts\nimport { z } from \"zod\";\n\nclass GameRoom {\n  @Action(\"move\", z.object({\n    x: z.number().min(0).max(1000),\n    y: z.number().min(0).max(1000)\n  }))\n  move(player: Player, position: { x: number, y: number }) {\n    player.x.set(position.x);\n    player.y.set(position.y);\n  }\n\n  @Action(\"setName\", z.object({\n    name: z.string().min(3).max(20)\n  }))\n  setName(player: Player, data: { name: string }) {\n    player.name.set(data.name);\n  }\n}\n```\n\nActions with invalid data will be automatically rejected if they don't match the validation schema.\n\n### State Management\n\nThe room system provides several ways to manage state:\n\n```ts\nclass GameRoom {\n  // Synchronized signals\n  @sync() score = signal(0);\n  @sync() gameState = signal<\"waiting\" | \"playing\" | \"ended\">(\"waiting\");\n  \n  // User management\n  @users(Player) players = signal({});\n  \n  // Complex state\n  @sync() \n  gameConfig = signal({\n    maxPlayers: 4,\n    timeLimit: 300,\n    mapSize: { width: 1000, height: 1000 }\n  });\n\n  // Methods to update state\n  @Action(\"updateConfig\")\n  updateConfig(player: Player, config: Partial<GameConfig>) {\n    if (player.isHost) {\n      this.gameConfig.update(current => ({\n        ...current,\n        ...config\n      }));\n    }\n  }\n}\n```\n\n### Manual Synchronization\n\nBy default, state changes are automatically synchronized to all clients. However, you can disable automatic synchronization and manually control when to broadcast changes using the `autoSync` option and the `$applySync` method.\n\nThis is useful when you want to:\n- Batch multiple state changes before broadcasting\n- Control synchronization timing for performance optimization\n- Implement custom synchronization logic\n\n```ts\n@Room({\n  path: \"game\"\n})\nclass GameRoom {\n  autoSync = false; // Disable automatic synchronization\n  \n  @sync() count = signal(0);\n  @sync() score = signal(0);\n  @sync() level = signal(1);\n\n  @Action(\"updateGameState\")\n  updateGameState(player: Player, data: { count: number, score: number, level: number }) {\n    // Make multiple changes without triggering sync\n    this.count.set(data.count);\n    this.score.set(data.score);\n    this.level.set(data.level);\n    \n    // Manually trigger synchronization when ready\n    this.$applySync();\n  }\n\n  @Action(\"batchUpdate\")\n  batchUpdate(player: Player, updates: any[]) {\n    // Apply multiple updates\n    updates.forEach(update => {\n      // ... apply updates\n    });\n    \n    // Sync all changes at once\n    this.$applySync();\n  }\n}\n```\n\nYou can also toggle `autoSync` at runtime:\n\n```ts\nclass GameRoom {\n  @sync() count = signal(0);\n\n  @Action(\"startBatchMode\")\n  startBatchMode() {\n    this.$autoSync = false; // Disable auto sync\n  }\n\n  @Action(\"endBatchMode\")\n  endBatchMode() {\n    this.$applySync(); // Sync pending changes\n    this.$autoSync = true; // Re-enable auto sync\n  }\n}\n```\n\n**Instance Properties:**\n- `$autoSync` (boolean): Controls whether synchronization happens automatically (default: `true`)\n- `$pendingSync` (Map): Stores pending synchronization changes when `autoSync` is disabled\n- `$applySync()` (method): Manually broadcasts all pending changes to all clients\n\n**Note:** When `autoSync` is disabled, changes are stored in `$pendingSync` until you call `$applySync()`. If you call `$applySync()` with no pending changes, it will broadcast the current state from `$memoryAll`, which is useful for forcing a full state synchronization.\n\n### Connecting to World Service\n\nThe World Service provides optimal room and shard assignment for distributed applications. It handles load balancing and allows clients to connect to the most appropriate server.\n\nUse this setup when one logical room may need to accept clients through one or more shard parties. A `WorldRoom` keeps the room and shard registry, while each `Shard` proxies client WebSocket and HTTP traffic to the main room server.\n\n#### Environment Variables\n\nTo use the Signe room system, you need to configure two essential environment variables:\n\n```env\n# Required for JWT authentication\nAUTH_JWT_SECRET=a-string-secret-at-least-256-bits-long\n\n# Required for secure communication between shards\nSHARD_SECRET=your_shard_secret\n```\n\nThese secrets should be strong, unique values and kept secure. `SHARD_SECRET` is used for shard-to-world stats updates and shard-to-main-server traffic. A request or WebSocket connection that claims to come from a shard must include this secret.\n\n#### Server Configuration\n\nTo use the World service, you need to:\n\n1. Add `WorldRoom` to your server:\n\n```ts\nimport { Server, WorldRoom } from '@signe/room';\n\nexport default class MainServer extends Server {\n  rooms = [\n    GameRoom,\n    WorldRoom // Add WorldRoom to enable World service\n  ]\n}\n```\n\n2. Add `Shard` to your server in `party/shard.ts`:\n\n```ts\nimport { Shard } from '@signe/room';\n\nexport default class ShardServer extends Shard {}\n```\n\nBy default, a shard belongs to `world-default`. For a multi-world deployment, the shard can resolve its world from the shard id generated by `WorldRoom`, from constructor options, or from environment variables:\n\n```ts\nimport { Shard, type Party } from '@signe/room';\n\nexport default class EuShardServer extends Shard {\n  constructor(room: Party.Room) {\n    super(room, {\n      worldId: 'world-eu'\n    });\n  }\n}\n```\n\nIf you let `WorldRoom` create shard metadata, shard ids use this format:\n\n```txt\n{roomId}:{worldId}:{uniqueShardId}\n```\n\nFor example:\n\n```txt\nmatch-123:world-eu:1710000000000-4821\n```\n\nThe `Shard` class can read `world-eu` from that id and report stats back to the matching world.\n\n3. Configure your `partykit.json` file:\n\n```json\n{\n  \"$schema\": \"https://www.partykit.io/schema.json\",\n  \"name\": \"yourapp\",\n  \"main\": \"party/server.ts\",\n  \"compatibilityDate\": \"2025-02-04\",\n  \"parties\": {\n    \"shard\": \"party/shard.ts\", // Shard implementation\n    \"world\": \"party/server.ts\" // World service implementation\n  }\n}\n```\n\n#### Multi-World Setup\n\n`WorldRoom` uses the dynamic path `world-{worldId}`. This means these are separate world instances:\n\n```txt\n/parties/world/world-default\n/parties/world/world-eu\n/parties/world/world-us\n```\n\nEach world owns its own room registry, shard registry, load-balancing counters, shard heartbeats, and inactive shard cleanup. A shard should report to exactly one world.\n\nWhen a client connects through a specific world, pass the same `worldId` to `connectionWorld()`:\n\n```js\nconst euConnection = await connectionWorld({\n  host: 'https://your-app-url.com',\n  room: 'match-123',\n  worldId: 'world-eu',\n  autoCreate: true\n}, room);\n```\n\nFor an admin connection to a world room, use the world id as the room id:\n\n```js\nconst worldConnection = await connectionRoom({\n  host: window.location.origin,\n  room: 'world-eu',\n  party: 'world',\n  query: {\n    'world-auth-token': 'your-jwt-token'\n  }\n}, worldRoom);\n```\n\n#### World Admin Authorization\n\nWorld management endpoints and world-room WebSocket connections require a JWT signed with `AUTH_JWT_SECRET`. The token must include a `worlds` claim listing the world ids that the operator can access:\n\n```json\n{\n  \"sub\": \"operator-1\",\n  \"worlds\": [\"world-default\", \"world-eu\"]\n}\n```\n\nUse `[\"*\"]` for a global operator:\n\n```json\n{\n  \"sub\": \"admin\",\n  \"worlds\": [\"*\"]\n}\n```\n\nTokens without a `worlds` claim, or without the current world id in that claim, are rejected even when the JWT signature is valid. Admin clients can pass the token either with an `Authorization: Bearer <token>` header or with the `world-auth-token` query parameter:\n\n```js\nawait fetch('/parties/world/world-eu/register-room', {\n  method: 'POST',\n  headers: {\n    Authorization: `Bearer ${token}`,\n    'Content-Type': 'application/json'\n  },\n  body: JSON.stringify({\n    name: 'match-123',\n    balancingStrategy: 'round-robin',\n    public: true,\n    maxPlayersPerShard: 50\n  })\n});\n```\n\nThe same `worldId` must be used consistently by:\n- the client request to `connectionWorld()`;\n- the `WorldRoom` party id;\n- the shard metadata/id or shard constructor option.\n\n#### Client Connection\n\nOn the client side, use the `connectionWorld` function to connect to your room through the World service:\n\n```js\nimport { connectionWorld } from '@signe/sync/client';\n\n// Initialize your room instance\nconst room = new YourRoomSchema();\n\n// Connect through the World service\nconst connection = await connectionWorld({\n  host: 'https://your-app-url.com', // Your application URL\n  room: 'unique-room-id',             // Room identifier\n  worldId: 'world-eu',                 // Optional, defaults to 'world-default'\n  autoCreate: true,                     // Auto-create room if it doesn't exist\n  retryCount: 3,                        // Number of connection attempts\n  retryDelay: 1000                    // Delay between retries in ms\n}, room);\n\n// Listen for events\nconnection.on('customEvent', (data) => {\n  console.log('Received custom event:', data);\n});\n\n// Send events to the room\nconnection.emit('increment', { value: 1 });\n\n// Close the connection when done\nconnection.close();\n```\n\nFor connecting to a standard room (not through World service), use the `connectionRoom` function:\n\n```js\nimport { connectionRoom } from '@signe/sync/client';\n\n// Initialize your room instance\nconst room = new YourRoomSchema();\nconst sessionId = localStorage.getItem('room-session-id') ?? crypto.randomUUID();\nlocalStorage.setItem('room-session-id', sessionId);\n\n// Connect directly to a room\nconst connection = await connectionRoom({\n  host: window.location.origin,\n  room: 'your-room-name',\n  id: sessionId,\n  party: 'your-party-name', // Optional, defaults to main party\n  query: {} // Optional query parameters\n}, room);\n\n// For connecting to a World room with authentication\nconst worldConnection = await connectionRoom({\n  host: window.location.origin,\n  room: 'world-default',\n  party: 'world',\n  query: {\n    // Use pre-generated JWT token for authentication\n    'world-auth-token': 'your-jwt-token'\n  }\n}, worldRoom);\n```\n\nThe `connectionWorld` function:\n1. Queries the World service to find the optimal shard for the requested room\n2. Establishes a WebSocket connection to the assigned shard\n3. Returns a connection object with methods for sending and receiving messages\n\nThis approach offers several benefits:\n- Automatic load balancing across multiple servers\n- Simplified connection management\n- Built-in retry logic for reliability\n- Room creation on demand\n\n#### Shard Lifecycle Notes\n\nWorld tracks each shard with:\n- `roomId`: the logical room served by the shard;\n- `worldId`: the world that owns the shard;\n- `url`: the shard connection target returned to clients;\n- `currentConnections`: the latest reported connection count;\n- `maxConnections`: the configured shard capacity;\n- `status`: `active`, `maintenance`, or `draining`;\n- `lastHeartbeat`: the latest stats update timestamp.\n\nThe built-in balancing strategies only consider active shards with available capacity (`currentConnections < maxConnections`):\n- `round-robin`: rotates through available shards;\n- `least-connections`: picks the available shard with the lowest reported connection count;\n- `random`: picks a random available shard.\n\nIf every active shard is full and `autoCreate` is enabled, the world creates another shard when the room has not reached `maxShards`. If no capacity is available and the room cannot create another shard, `/connect` returns a capacity error.\n\nShard stats are updated when connections change and through periodic forced heartbeats. Inactive shards are removed after the world cleanup timeout.\n\nWhen a shard is marked `draining`, the world stops assigning new clients to it. Existing WebSocket clients remain connected to that shard. Once the shard reports `currentConnections: 0`, the world removes it from the shard registry automatically. Scaling down uses the same flow: empty candidate shards are removed immediately, while occupied candidate shards are marked `draining` and removed later when they become empty.\n\nCurrent limitations:\n- Draining does not migrate connected clients; it waits for them to disconnect naturally.\n- The world registry is held in room state; use deployment-specific persistence if your topology requires an external global registry.\n\n### Packet Interception\n\nYou can implement the `interceptorPacket` method in your room to inspect and modify packets before they're sent to users:\n\n```ts\nclass GameRoom {\n  // Intercept packets before they're sent to users\n  async interceptorPacket(user: Player, packet: any, conn: Party.Connection) {\n    // Modify the packet based on user-specific logic\n    if (user.role === 'spectator') {\n      delete modifiedPacket.secretData;\n      return modifiedPacket;\n    }\n    \n    // Return null to prevent the packet from being sent to this user\n    if (user.isBlocked) {\n      return null;\n    }\n    \n    // Return the packet as is or with modifications\n    return packet;\n  }\n}\n```\n\nThe `interceptorPacket` method allows you to:\n- Modify packets on a per-user basis before they're sent\n- Return a modified packet to change what the user receives\n- Return `null` to prevent the packet from being sent to that user\n- Implement user-specific filtering or censoring of data\n\n### Lifecycle Hooks\n\nRooms provide several lifecycle hooks:\n\n```ts\nclass GameRoom {\n  async onJoin(player: Player, conn: Connection, ctx: ConnectionContext) {}\n  async onLeave(player: Player, conn: Connection) {}\n}\n```\n\n## Server Methods\n\nThe server provides several methods to help you manage your room:\n\n```ts\nimport { RoomMethods } from \"@signe/room\";\n\nexport class GameRoom {\n  action(name: string, data: any) {\n    this.$send(conn, {\n      type: 'action',\n      name,\n      data\n    })\n  }\n  \n  broadcast(name: string, data: any) {\n    this.$broadcast({\n      type: 'action',\n      name,\n      data\n    })\n  }\n}\n\nexport interface GameRoom extends RoomMethods {}\n\n\n## Party.Connection\n\nWraps a standard WebSocket, with a few additional PartyKit-specific properties.\n\n```ts\nconnection.send(\"Good-bye!\");\nconnection.close();\n```\n\n> https://docs.partykit.io/reference/partyserver-api/#partyconnection\n\n## Node.js adapter\n\n`@signe/room/node` runs a room server in a standard single-process Node.js\napplication. It is useful for local development, self-hosting, Express/Fastify\nstyle integrations, Vite dev servers, and tests that do not need PartyKit.\n\n```ts\nimport { createServer } from \"node:http\";\nimport { WebSocketServer } from \"ws\";\nimport { Action, Request, Room, Server } from \"@signe/room\";\nimport { createMemoryNodeRoomStorage, createNodeRoomTransport } from \"@signe/room/node\";\nimport { signal } from \"@signe/reactive\";\nimport { sync } from \"@signe/sync\";\n\n@Room({ path: \"demo\" })\nclass CounterRoom {\n  @sync() count = signal(0);\n\n  @Action(\"increment\")\n  increment(_user: unknown, value: { amount?: number }) {\n    this.count.update((count) => count + (value.amount ?? 1));\n  }\n\n  @Request({ path: \"/count\" })\n  getCount() {\n    return { count: this.count() };\n  }\n}\n\nclass CounterServer extends Server {\n  rooms = [CounterRoom];\n}\n\nconst storage = createMemoryNodeRoomStorage();\n\nconst transport = createNodeRoomTransport(CounterServer, {\n  partiesPath: \"/parties/main\",\n  storage,\n});\n\nconst server = createServer((req, res) => {\n  void transport.handleNodeRequest(req, res);\n});\n\nconst wsServer = new WebSocketServer({ noServer: true });\n\nserver.on(\"upgrade\", (request, socket, head) => {\n  transport.handleUpgrade(wsServer, request, socket, head);\n});\n\nserver.listen(3000);\n```\n\nHTTP requests use the same PartyKit-style room path:\n\n```bash\ncurl http://localhost:3000/parties/main/demo/count\n```\n\nWebSocket clients connect to the room URL and send normal action packets:\n\n```js\nconst socket = new WebSocket(\"ws://localhost:3000/parties/main/demo\");\n\nsocket.send(JSON.stringify({\n  action: \"increment\",\n  value: { amount: 1 }\n}));\n```\n\nFor middleware frameworks, pass a `next` callback. Requests that do not match\nthe configured parties path are delegated to `next`.\n\n```ts\napp.use((req, res, next) => {\n  void transport.handleNodeRequest(req, res, next);\n});\n```\n\nRoom-to-room requests are available through `room.context.parties`:\n\n```ts\nconst response = await this.room.context.parties.main\n  .get(\"other-room\")\n  .fetch(\"/count\");\n```\n\nThe Node adapter stores room state in memory by default. The package also\nprovides explicit memory and SQLite storage providers.\n\nUse `createMemoryNodeRoomStorage()` when you want to keep a reference to the\nmemory backend, inspect it, clear it, or save a snapshot for a later process\nrestart.\n\n```ts\nconst storage = createMemoryNodeRoomStorage();\n\nconst transport = createNodeRoomTransport(CounterServer, {\n  storage,\n});\n\nconst snapshot = storage.snapshot();\nconst restoredStorage = createMemoryNodeRoomStorage({ snapshot });\n```\n\nUse `createSqliteNodeRoomStorage()` when you want room storage persisted in a\nSQLite database. This helper uses Node's built-in `node:sqlite` module.\n\n```ts\nimport {\n  createNodeRoomTransport,\n  createSqliteNodeRoomStorage,\n} from \"@signe/room/node\";\n\nconst transport = createNodeRoomTransport(CounterServer, {\n  storage: createSqliteNodeRoomStorage({\n    databasePath: \"./rooms.sqlite\",\n  }),\n});\n```\n\nThe SQLite helper enables `PRAGMA busy_timeout = 5000` and `PRAGMA journal_mode\n= WAL` by default to make development servers more tolerant of short-lived\nwrite contention. You can override those defaults with `busyTimeoutMs`,\n`journalMode`, and `busyRetries`.\n\nRoom state is stored as incremental `state:` entries. When a persisted delete is\nencountered, the server compacts the room state by materializing the current\nsnapshot and removing durable delete markers. This keeps long-running SQLite\nstorage from accumulating `\"$delete\"` tombstones after objects or users are\nremoved.\n\nTo create your own storage backend, implement the key-value methods used by\n`@signe/room`: `get`, `put`, `delete`, and `list`, then return it from a storage\nprovider.\n\n```ts\nimport type { NodeRoomStorage, NodeRoomStorageProvider } from \"@signe/room/node\";\n\nclass MyStorage implements NodeRoomStorage {\n  async get<T = unknown>(key: string): Promise<T | undefined> {\n    // Read from your database\n  }\n\n  async put<T = unknown>(key: string, value: T): Promise<void> {\n    // Write to your database\n  }\n\n  async delete(key: string): Promise<void | boolean> {\n    // Delete from your database\n  }\n\n  async list<T = unknown>(): Promise<Map<string, T>> {\n    // Return all key/value entries for the room\n  }\n}\n\nconst storage: NodeRoomStorageProvider = {\n  getStorage(namespace, roomId) {\n    return new MyStorage(namespace, roomId);\n  },\n};\n\nconst transport = createNodeRoomTransport(CounterServer, {\n  storage,\n});\n```\n\nTo create your own Node transport integration, use the low-level methods exposed\nby `createNodeRoomTransport()`:\n\n- `transport.fetch(requestOrPath, init?)` for runtimes using Web\n  `Request`/`Response`;\n- `transport.handleNodeRequest(req, res, next?)` for Node HTTP middleware;\n- `transport.handleUpgrade(wsServer, request, socket, head)` for `ws`\n  WebSocket upgrades;\n- `transport.acceptWebSocket(webSocket, request)` when your framework already\n  accepted the WebSocket and you only need to attach it to a room.\n\nThe first Node adapter version targets single-process Node.js only; clustering,\nmulti-process coordination, Cloudflare Durable Objects, Bun WebSocket, and\nuWebSockets.js support are outside this adapter.\n\nSee `packages/room/examples/node` for a runnable HTTP + WebSocket example.\n\n## Testing\n\n```ts\nimport { test, vi } from \"vitest\"\nimport { testRoom, Room, Action, sync } from \"@signe/room\"\nimport { signal } from \"@signe/reactive\"\n\ntest('test', async () => {\n\n    @Room({\n        path: \"game\"\n    })\n    class GameRoom {\n      @sync() count = signal(0);\n\n      @Action('increment')\n      increment() {\n        this.count.update(c => c + 1)\n      }\n    }\n\n    const { createClient, room, server } = await testRoom(GameRoom)\n    const client1 = await createClient()\n    const client2 = await createClient()\n\n    const countFn = vi.fn()\n\n    client1.addEventListener('message', countFn)\n    client2.addEventListener('message',countFn)\n\n    await client1.send({\n        action: 'increment'\n    })\n\n    expect(countFn).toHaveBeenCalledTimes(2)\n    expect(countFn).toHaveBeenCalledWith('{\"type\":\"sync\",\"value\":{\"count\":1}}')\n    expect(room.count()).toBe(1)\n    expect(server.roomStorage.get('.')).toEqual({\n      count: 1\n    })\n})\n```\n\n## License\n\nMIT\n","readmeFilename":"readme.md"}