{"_id":"ts-game-decorators","_rev":"37-8842a73e444d850ba9f9048c47244a36","name":"ts-game-decorators","dist-tags":{"latest":"1.0.36"},"versions":{"1.0.0":{"name":"ts-game-decorators","version":"1.0.0","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.0","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"827aaee4cf776e2a1ef3c3db08a07db83acf56cd","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.0.tgz","fileCount":27,"integrity":"sha512-RM8Rt4EoRCfuGOrESLLjblp4uSa0kLmpDOdpy5YONxybWX3Cqi6ufcwMJmRUcZ6EJ3/OzgPwFNErK93et6eqUw==","signatures":[{"sig":"MEQCIDhtOKMCBfBc3gkyvV9Q+Ugq2F8A2uQ6kFzhnbhuKi/YAiAuTFW5gIh9q0VNtUHA/pCxDz5B/8R2NsT6xtEJo1yArA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40773},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"2cc03b9652433494b983d855d1a3777b1a887e40","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"express":"^4.18.2","socket.io":"^4.7.4","reflect-metadata":"^0.1.13"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.0_1768280015287_0.35848009017452953","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"ts-game-decorators","version":"1.0.1","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.1","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"60ce35dbf6a484ff893e77a6d91a6edc6998ab02","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.1.tgz","fileCount":28,"integrity":"sha512-FIg3DM2KB75rkGsJwLUvM5V5/Hce/rTBHYgWotP0DS+fkQ8M6weRIjxgQJfoUdR/EppCD/+GeEjegyFStmn5AA==","signatures":[{"sig":"MEUCIHG1Ev8pFktxUwPDOEHSuMsrNsv8bsAxfSAQCgX7vUKJAiEAqdj5Ky3uWODBM2WIcjilexXtSxjHyEAAGlisZ8ezZO0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42637},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"2cc03b9652433494b983d855d1a3777b1a887e40","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"express":"^4.18.2","socket.io":"^4.7.4","reflect-metadata":"^0.1.13"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.1_1768280180806_0.0006366017781587185","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"ts-game-decorators","version":"1.0.2","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.2","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"d59ab64caa2cb2d02022ffad610d18c80dbbc07e","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.2.tgz","fileCount":28,"integrity":"sha512-+kZqKqULDXJFAZ1MWtIT5KQ19h9QmMqncPjLGKforWmEuPr6vN4TLX7BIgMni/EzddcHb9waWdPdWMOkARRYKQ==","signatures":[{"sig":"MEYCIQDxV64qD2prn4TD7Ab0eBDRDtViwVroZ1FAg9BPPMWXGAIhANZIetljIg6JjoMGW+UIDJ50A5M7SfhveZnizdPHXk3l","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42937},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"2cc03b9652433494b983d855d1a3777b1a887e40","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"express":"^4.18.2","socket.io":"^4.7.4","reflect-metadata":"^0.1.13"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.2_1768280785440_0.42036060250292984","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"ts-game-decorators","version":"1.0.3","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.3","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"890ce29af54e06afbf8103555627bc659a0e15e1","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.3.tgz","fileCount":28,"integrity":"sha512-CKWyExvzBFgm3YVEeEcOqJ+Hgs2UzGweZuzpBRBWnw+N02qnnl0R80LLNIsq2OkVY5FZcLjXo0KLTE5HebA3Dw==","signatures":[{"sig":"MEUCIH66cgNH9OYXvY/Ccu5xLCCCyDsWvQ2+v2w/W+1cscMWAiEAu9jBSlxseR+ORUMwoCjG34LnwYr0INSBxhKcDr3QkJ8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42722},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"2cc03b9652433494b983d855d1a3777b1a887e40","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"express":"^4.18.2","socket.io":"^4.7.4","reflect-metadata":"^0.1.13"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.3_1768287020760_0.6364076606727747","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"ts-game-decorators","version":"1.0.4","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.4","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"a52cf6ddff6973df3bb6f532a2fb3cf5f5aa1505","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.4.tgz","fileCount":30,"integrity":"sha512-MzjCOdUwnMP3UV5iPEN1C/Gx/Dx0c5TBan4XWtOpr7YkPVaHTZTi2st+5ONnllGYazdCo++60POIYHr/X6rSPg==","signatures":[{"sig":"MEQCIBgmHcyBzT+ITGA4hG6ko11mqeL4WEc4lgylG+9aL0HtAiBqIqtZKtvXtuuJ8hs4UJq78+M2PaCzyJpd5DhIDrV8bg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44703},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"2cc03b9652433494b983d855d1a3777b1a887e40","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"lowdb":"^6.0.1","redis":"^4.6.7","express":"^4.18.2","couchbase":"^4.2.5","socket.io":"^4.7.4","reflect-metadata":"^0.1.13","@socket.io/redis-adapter":"^8.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.4_1768288261332_0.4902346452554469","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"ts-game-decorators","version":"1.0.5","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.5","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"e8569d1e5e7d25a600f1fadc4d0dc6838d9a8c0b","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.5.tgz","fileCount":50,"integrity":"sha512-Ty9bQCW0EsQXHZA+yRrdV/REI/r9clwEhxK1wBcfBmrqcrwTWnPKA3b3jfnIp7bWh1p3xHuSLW0dYqT9lTyuNA==","signatures":[{"sig":"MEUCIEt1JIwK6/nW9NYHqbcqwR1bbhrS8YJ7oDOsMrOdFMlDAiEAkOBh042FrqH/V9Qoq23skBeIVqND1AKZeeAbfElo1H8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70937},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"2cc03b9652433494b983d855d1a3777b1a887e40","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"lowdb":"^6.0.1","redis":"^4.6.7","express":"^4.18.2","couchbase":"^4.2.5","socket.io":"^4.7.4","reflect-metadata":"^0.1.13","@socket.io/redis-adapter":"^8.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.5_1768288556341_0.33811461385853026","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"ts-game-decorators","version":"1.0.6","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.6","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"17753294ccbc5ccbcad380fa7b585a34887cba1c","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.6.tgz","fileCount":50,"integrity":"sha512-EyJceLEbhWpFmsWw00nwQWrULg7CS1oUXXrAobLQMziGkn/lhvcyYe74NIlAx1rZszP+1NwNFcTV8oduLU4+OA==","signatures":[{"sig":"MEYCIQCj0jRb3r+DyYJU41HL85bvcA14hzNwo91j6yXwBH1xvQIhALoREH4Q2btuLHfaq3W3+hrgyymRYGgmJft8RCSxK1uP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70967},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"2cc03b9652433494b983d855d1a3777b1a887e40","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"lowdb":"^6.0.1","redis":"^4.6.7","express":"^4.18.2","couchbase":"^4.2.5","socket.io":"^4.7.4","jsonwebtoken":"^9.0.2","reflect-metadata":"^0.1.13","@socket.io/redis-adapter":"^8.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.6_1768289304856_0.07179249045865399","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"ts-game-decorators","version":"1.0.7","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.7","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"2dbca4ed3ada2534c7b37841e241e1f57ca667b9","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.7.tgz","fileCount":50,"integrity":"sha512-rV0wx7O+ZkVv80eOQkNrxOdONJLU7+o3D6A+EphUzabhpMjMR+z7xDcENP27qIke+y4MF+j4xN+/UBF31orZ7Q==","signatures":[{"sig":"MEYCIQCtSalwBI57TVvg6Vq4RIK45uCi+KNodVsQYJ7yCGdFdgIhAN/DQ54sKccTKdK7PsiMANglO0H0Rteba/3FGBf+koaS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70993},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"2cc03b9652433494b983d855d1a3777b1a887e40","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"lowdb":"^6.0.1","redis":"^4.6.7","dotenv":"^16.4.7","express":"^4.18.2","couchbase":"^4.2.5","socket.io":"^4.7.4","jsonwebtoken":"^9.0.2","reflect-metadata":"^0.1.13","@socket.io/redis-adapter":"^8.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.7_1768289583667_0.7966534476735094","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"ts-game-decorators","version":"1.0.8","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.8","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"c7f961350eebff91249b8ed520a4eeff466c7349","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.8.tgz","fileCount":50,"integrity":"sha512-3ppDWYN7Jd/2Eb28/gM0DoWlbT2qyg6KGQc5j5/rvrXV291AyxNIhnf7hgfGQBBN9C2mvCuhbW1V0Ywp3mNc7A==","signatures":[{"sig":"MEUCIQC4gpFV0kjDA/s7YPyHztHlykd3nHrnxxH6v0HDg6q2xgIgLJ+dOra5HITjEf1EF0lOXn3w/inTyKV1qw/5Tz5qcUg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71077},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"2cc03b9652433494b983d855d1a3777b1a887e40","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"lowdb":"^6.0.1","redis":"^4.6.7","dotenv":"^16.4.7","express":"^4.18.2","couchbase":"^4.2.5","socket.io":"^4.7.4","jsonwebtoken":"^9.0.2","reflect-metadata":"^0.1.13","@socket.io/redis-adapter":"^8.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.8_1768291287729_0.8608513947911351","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"ts-game-decorators","version":"1.0.9","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.9","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"93caef8418c4e4c1dd28430c483b58f08e294be7","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.9.tgz","fileCount":50,"integrity":"sha512-AKWz2TaAB+kXB0+BJ6vvYhft3cXZOW49beUqv9GCl5JTiHevc2GyQ1Ho+ZaaljRriMauTSpzFN97drMBzm5SFg==","signatures":[{"sig":"MEUCIQCAw4fTs1SpgpIUkxFNNz6GcypJZMwFEGSxn6IiXzulFgIgJyq6UT2pEfnP6za9nxq0MKVPkFdGqUDwhN05J81EU4M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71077},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"2cc03b9652433494b983d855d1a3777b1a887e40","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"lowdb":"^6.0.1","redis":"^4.6.7","dotenv":"^16.4.7","express":"^4.18.2","couchbase":"^4.2.5","socket.io":"^4.7.4","jsonwebtoken":"^9.0.2","reflect-metadata":"^0.1.13","@socket.io/redis-adapter":"^8.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.9_1768291681181_0.8694386455539191","host":"s3://npm-registry-packages-npm-production"}},"1.0.10":{"name":"ts-game-decorators","version":"1.0.10","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.10","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"f4dc010ec551c24c1c73611dcb9131fc0dbeb395","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.10.tgz","fileCount":50,"integrity":"sha512-kBgbeaKpQhbq5jQHLAkcpakQRPmVpNm1si2uHB4TgnrITlbQrQdULQuL4nQm9480ML+QZiXCdtHjZpj+rNt5MA==","signatures":[{"sig":"MEYCIQDC2hVK9D3o901fvH+oL9GX+ld70DqfHH51QeivsTc34gIhAIf+EkouNoX2tkydc2Tm+6/+4kiw+vfpsM94Zs5nSXtz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71132},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"2cc03b9652433494b983d855d1a3777b1a887e40","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"lowdb":"^6.0.1","redis":"^4.6.7","dotenv":"^16.4.7","express":"^4.18.2","couchbase":"^4.2.5","socket.io":"^4.7.4","jsonwebtoken":"^9.0.2","reflect-metadata":"^0.1.13","@socket.io/redis-adapter":"^8.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.10_1768292706179_0.3233068329913702","host":"s3://npm-registry-packages-npm-production"}},"1.0.11":{"name":"ts-game-decorators","version":"1.0.11","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.11","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"5b44781114c22518722efb2f18ceafcfe81ae371","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.11.tgz","fileCount":50,"integrity":"sha512-zwYLzXAMccb6cS+OafySPWKvx4veczxpiclqmW+uQ0d8+IKCJxFpHPMzhzw8lrJeaBtGTvIhY+BFAsLrofT0sA==","signatures":[{"sig":"MEUCIQDnBj9x5L4e80ndaIuFx+kc4ZZSGORY1+KMFiYPsV4vZAIgSd713Eh4GCAwzjs4njNrKVTAoM+LlYTquqYzIw1ynxQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71132},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"2cc03b9652433494b983d855d1a3777b1a887e40","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"lowdb":"^6.0.1","redis":"^4.6.7","dotenv":"^16.4.7","express":"^4.18.2","couchbase":"^4.2.5","socket.io":"^4.7.4","jsonwebtoken":"^9.0.2","reflect-metadata":"^0.1.13","@socket.io/redis-adapter":"^8.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.11_1768292964304_0.911029351316055","host":"s3://npm-registry-packages-npm-production"}},"1.0.12":{"name":"ts-game-decorators","version":"1.0.12","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.12","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"2a15752f55552af06b58c0293496f62e02c5aebb","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.12.tgz","fileCount":50,"integrity":"sha512-9g9a682Fvs3yY7c5kGhnBeJ2xiCyFoXgJIGheGefD05NulgkSKrHcpdEaEezhZY9G8XXArNNwheaDqUO3+Y4Dg==","signatures":[{"sig":"MEYCIQDfjeHr6GvphhacDVoNGDF9NOq+3mXgnrupwa823G+tagIhAJCcYjoR9x/GdD07V+vlodbUeEUh+c7DiEcLE7382xb0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71333},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"2cc03b9652433494b983d855d1a3777b1a887e40","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"lowdb":"^6.0.1","redis":"^4.6.7","dotenv":"^16.4.7","express":"^4.18.2","couchbase":"^4.2.5","socket.io":"^4.7.4","jsonwebtoken":"^9.0.2","reflect-metadata":"^0.1.13","@socket.io/redis-adapter":"^8.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.12_1768293435371_0.7456662380619714","host":"s3://npm-registry-packages-npm-production"}},"1.0.13":{"name":"ts-game-decorators","version":"1.0.13","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.13","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"26eafeb6d32fa2d4ea316629d02d7827de67c492","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.13.tgz","fileCount":50,"integrity":"sha512-KlQTRyK476BQP2xeW5rVxoh7Ev4RnYnf8DcS+u1F2mgrPZ9e5wLW0dN4n+AW5dMYLWL6/QLpvzD7MzgE+5dVXw==","signatures":[{"sig":"MEUCIGIbUviYN4uYaRcCyl/uY0HAHNAQuWpBq6eiE0vT/ZzaAiEA5+eaqTdzNzFjUyCXuCAAMSudAUOwHalfUYBtgkhqFBg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71797},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"2cc03b9652433494b983d855d1a3777b1a887e40","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"lowdb":"^6.0.1","redis":"^4.6.7","dotenv":"^16.4.7","express":"^4.18.2","couchbase":"^4.2.5","socket.io":"^4.7.4","jsonwebtoken":"^9.0.2","reflect-metadata":"^0.1.13","@socket.io/redis-adapter":"^8.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.13_1768293687934_0.6012662707314256","host":"s3://npm-registry-packages-npm-production"}},"1.0.14":{"name":"ts-game-decorators","version":"1.0.14","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.14","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"db0bcc8e2af213be6f0baff0baf849e62437b06c","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.14.tgz","fileCount":50,"integrity":"sha512-QQt5PyHNfpj3gG0PNz1v6s8eQajA8nAe1y2EnXoS5YbeMZiNOsEIJ4vTmXmuclo0KHjh4d45y6b89gMQ+tWRaw==","signatures":[{"sig":"MEUCIQDWaSVoaugdGc4tdnMo6CNERmQjVqACSxrU8Y4MqY1zMwIgeAA1hvtM6HqBCAxtH2iIV68MtvTD7HoQa4TdenlEle8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71877},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"2cc03b9652433494b983d855d1a3777b1a887e40","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"lowdb":"^6.0.1","redis":"^4.6.7","dotenv":"^16.4.7","express":"^4.18.2","couchbase":"^4.2.5","socket.io":"^4.7.4","jsonwebtoken":"^9.0.2","reflect-metadata":"^0.1.13","@socket.io/redis-adapter":"^8.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.14_1768293913742_0.14865581457085986","host":"s3://npm-registry-packages-npm-production"}},"1.0.15":{"name":"ts-game-decorators","version":"1.0.15","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.15","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"7d3a9d31df9c9a26b3e87415629d8acb25df96e7","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.15.tgz","fileCount":50,"integrity":"sha512-ukfYuaNbBOIllBcinY6ePUjywRzvXfHLz8DoT5FU7PIwxo0A5bunBOvtbnexBMPc0m++5eSRXn85TFZkoKWgmA==","signatures":[{"sig":"MEYCIQCGqKFkYgceey0fDlC9ButDdmil2hOcqwsQl8R5F8bQsQIhAJ4Dkteaz1SoLyjldJ0yiURf8hZQWzAZmZe6Wr6xjxXi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71947},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"2cc03b9652433494b983d855d1a3777b1a887e40","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"lowdb":"^6.0.1","redis":"^4.6.7","dotenv":"^16.4.7","express":"^4.18.2","couchbase":"^4.2.5","socket.io":"^4.7.4","jsonwebtoken":"^9.0.2","reflect-metadata":"^0.1.13","@socket.io/redis-adapter":"^8.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.15_1768295241162_0.8097451269750753","host":"s3://npm-registry-packages-npm-production"}},"1.0.16":{"name":"ts-game-decorators","version":"1.0.16","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.16","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"3e647fbc192b9cdb58ea125e7eaca78f4ed0857d","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.16.tgz","fileCount":50,"integrity":"sha512-jWV0+LCiLk7rS+IcdIeyxo9PyBTaWdBlliM0UFQX1op61DAegfaEyFVm7gYobDq5aMgoLTbp/pqdMXzyDqx9rw==","signatures":[{"sig":"MEUCIAxs6SHYocy96YchPYxu/52De+z6CMe0JVOwXAbGqJIqAiEAmRtJiEscdNEwW6h2K4h70GokDHujizhIForlHNaGH18=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72976},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"b9c6899ab341a85a62587ed390e37b561a48bb1e","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"lowdb":"^6.0.1","redis":"^4.6.7","dotenv":"^16.4.7","express":"^4.18.2","couchbase":"^4.2.5","socket.io":"^4.7.4","jsonwebtoken":"^9.0.2","reflect-metadata":"^0.1.13","@socket.io/redis-adapter":"^8.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.16_1768446276619_0.40727013257993216","host":"s3://npm-registry-packages-npm-production"}},"1.0.17":{"name":"ts-game-decorators","version":"1.0.17","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.17","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"1b8f99e7c9136e0b450cb0603e709e818936e1e9","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.17.tgz","fileCount":50,"integrity":"sha512-sT2aOdSMzVEiVAZu1hpbl86nCidt7P1iv4Bpov/I+YOqwHUJbz8XU7sUQOQB6qfVt7L8bP0+j0QeBNhm4luo/g==","signatures":[{"sig":"MEQCIEZjb7nLfLzK2mwR6x2yemzY3j5uUkyrw0Xlnzp7Hr5nAiBQPH/x1AcFogWYGmlHusJGDyoHTaVcw3bY0MW0XgjjxQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":73832},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"b9c6899ab341a85a62587ed390e37b561a48bb1e","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"lowdb":"^6.0.1","redis":"^4.6.7","dotenv":"^16.4.7","express":"^4.18.2","couchbase":"^4.2.5","socket.io":"^4.7.4","jsonwebtoken":"^9.0.2","reflect-metadata":"^0.1.13","@socket.io/redis-adapter":"^8.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.17_1768447037689_0.6063503711538456","host":"s3://npm-registry-packages-npm-production"}},"1.0.18":{"name":"ts-game-decorators","version":"1.0.18","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.18","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"ec2e600ed8f7d720919af3b6141e8a6325d70eef","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.18.tgz","fileCount":50,"integrity":"sha512-OQq+Z8MevYJ4idGmGWchTx7m5Q7sl4cnBUTTn5KCM0HfW5WOUyb9CPivYC9p8cAhSptiMRtFmuDWes4nexkimA==","signatures":[{"sig":"MEQCIC2nAQtiWxikRIdFmETEJ3Gq+mRdI1iiZpzWB4lRWSC7AiBGZnLKS7G5YuA2aakeJbfo3dZg9CzZQ8hAei9qifw6Fg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":73840},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"b9c6899ab341a85a62587ed390e37b561a48bb1e","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"lowdb":"^6.0.1","redis":"^4.6.7","dotenv":"^16.4.7","express":"^4.18.2","couchbase":"^4.2.5","socket.io":"^4.7.4","jsonwebtoken":"^9.0.2","reflect-metadata":"^0.1.13","@socket.io/redis-adapter":"^8.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.18_1768447167078_0.06488751148812133","host":"s3://npm-registry-packages-npm-production"}},"1.0.19":{"name":"ts-game-decorators","version":"1.0.19","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.19","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"1e84e07687d7496142247ec2b65f1067b309072f","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.19.tgz","fileCount":50,"integrity":"sha512-3210WrMxufcoDM0/SfGyAJYbuNyhCL/tb71+YXXDXLB9+OTbeRqRnL0eSOUSippxJQj49+21cvL3jY1/tv8ayA==","signatures":[{"sig":"MEYCIQDNRpHpaIreIYk1IV1QSAHA2Q6KIIpEkl3OFw+btZkTfwIhAPckycDk+D1en0qXtuZEGhTy7mDhQp4KD7OVjM37xwPD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":74697},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"3a0f73a36e0c28b22053223a598c8ad2b87309eb","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"lowdb":"^6.0.1","redis":"^4.6.7","dotenv":"^16.4.7","express":"^4.18.2","couchbase":"^4.2.5","socket.io":"^4.7.4","jsonwebtoken":"^9.0.2","reflect-metadata":"^0.1.13","@socket.io/redis-adapter":"^8.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.19_1768448450584_0.957869609746979","host":"s3://npm-registry-packages-npm-production"}},"1.0.20":{"name":"ts-game-decorators","version":"1.0.20","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.20","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"c8aad4623f6a98bdcbf41f102c94a6448b91630c","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.20.tgz","fileCount":50,"integrity":"sha512-vN5rGXjGV8fMAhBTP6ymtR23lR3pEaUuerN9apV1HQBYVmQkAR38OwlWtx2N+Y3WhFLc46D629ayBwkEdkVNew==","signatures":[{"sig":"MEYCIQCrb69pkIfCFaiG47lta29KuwhhVfTDahOaicombmrWRAIhAKlNzS8x+rSPdinR77Wd3zNWM9gAOer51r1/LAbcnS7W","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":74780},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"3a0f73a36e0c28b22053223a598c8ad2b87309eb","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"lowdb":"^6.0.1","redis":"^4.6.7","dotenv":"^16.4.7","express":"^4.18.2","couchbase":"^4.2.5","socket.io":"^4.7.4","jsonwebtoken":"^9.0.2","reflect-metadata":"^0.1.13","@socket.io/redis-adapter":"^8.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.20_1768448605865_0.9464492540954099","host":"s3://npm-registry-packages-npm-production"}},"1.0.21":{"name":"ts-game-decorators","version":"1.0.21","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.21","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"4833e7806f224d2d4fd5ea3673247afe68c73de0","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.21.tgz","fileCount":54,"integrity":"sha512-wWIBLOAqoUqnmAseOMRPPSUQFs6P2j0pMJV+ISyVhKwaNexZmG47mwr75v3n2HaFzBkwxmAwveK1pPo2CUXcQw==","signatures":[{"sig":"MEQCIDo8rmhVUMRfIPlPB+iE0un3K+Z/5mFFqKcnDD8oTuu0AiAudmFVkcPzwoBmA4Ms2OLJ1uJYmB5fSU1SoGBH5qMxJw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":81548},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"38b0b1f39d96ddd96e4c2d30100b8d193fe913ec","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"lowdb":"^6.0.1","redis":"^4.6.7","dotenv":"^16.4.7","express":"^4.18.2","couchbase":"^4.2.5","socket.io":"^4.7.4","jsonwebtoken":"^9.0.2","reflect-metadata":"^0.1.13","@socket.io/redis-adapter":"^8.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.21_1769508734501_0.7206341712082771","host":"s3://npm-registry-packages-npm-production"}},"1.0.22":{"name":"ts-game-decorators","version":"1.0.22","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.22","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"13f568e08f09e39c67c750453958e0fa4e5f369e","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.22.tgz","fileCount":54,"integrity":"sha512-EMWhqFbGHSu2IgDaN3O4SSbBtMjF3eTHFCmEaFg28O7yDI76+iu9Sgjovk+B5i6bUiwTXrGx+o8+8ShByn8/qw==","signatures":[{"sig":"MEUCIDD1SsIhys7nSQNyr++2BWLP1wc+5rxixtjxV3Rwwj2hAiEA/cjdvqbkqKZprJX8QB3KFFx7toTPUGepz2NnDc68z/0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":81709},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"38b0b1f39d96ddd96e4c2d30100b8d193fe913ec","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"lowdb":"^6.0.1","redis":"^4.6.7","dotenv":"^16.4.7","express":"^4.18.2","couchbase":"^4.2.5","socket.io":"^4.7.4","jsonwebtoken":"^9.0.2","reflect-metadata":"^0.1.13","@socket.io/redis-adapter":"^8.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.22_1769674652220_0.9888852927832379","host":"s3://npm-registry-packages-npm-production"}},"1.0.23":{"name":"ts-game-decorators","version":"1.0.23","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.23","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"d01945a85476b398e6fda60ad951e0b0346721fa","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.23.tgz","fileCount":54,"integrity":"sha512-gSqROScHNelUyIoezChUXBVVo1GfTsPCK6vU7T1+1U+Q7LfnB/knCr9+BiZG1lHprvKs3VZqN7s3VBUF1ZbMXg==","signatures":[{"sig":"MEYCIQCbzxGAmUm+47qgHAtfZjXJttSgX0TSZ3BCpxIO1LzbjgIhALwsjA8zTKu+JrMSdQcHk+zgIepnL1v/b3nUnINhT9ZN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82484},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"38b0b1f39d96ddd96e4c2d30100b8d193fe913ec","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"lowdb":"^6.0.1","redis":"^4.6.7","dotenv":"^16.4.7","express":"^4.18.2","couchbase":"^4.2.5","socket.io":"^4.7.4","jsonwebtoken":"^9.0.2","reflect-metadata":"^0.1.13","@socket.io/redis-adapter":"^8.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.23_1770443170326_0.07177208272976143","host":"s3://npm-registry-packages-npm-production"}},"1.0.24":{"name":"ts-game-decorators","version":"1.0.24","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.24","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"6977f3c316d7d9d12aaa3e7ff8b681041e972079","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.24.tgz","fileCount":54,"integrity":"sha512-0LzKI4/XwAHkayvSGPUNwMC+PzMupPBYlevaHWhgOdKTl+3l2eIOBsn//BmkZQPkwBMycB8VQIKT31FwTVcK1w==","signatures":[{"sig":"MEUCIFnui0kAsot28kQkbVpvHTjM6G7Cjm99l5CNb5vOp+fGAiEA+8H+RpVwC6hEhaqYarLs2Y9sYRJQix43hjdwfot1kSE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82598},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"38b0b1f39d96ddd96e4c2d30100b8d193fe913ec","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"lowdb":"^6.0.1","redis":"^4.6.7","dotenv":"^16.4.7","express":"^4.18.2","couchbase":"^4.2.5","socket.io":"^4.7.4","jsonwebtoken":"^9.0.2","reflect-metadata":"^0.1.13","@socket.io/redis-adapter":"^8.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.24_1770444769388_0.47805095486946936","host":"s3://npm-registry-packages-npm-production"}},"1.0.25":{"name":"ts-game-decorators","version":"1.0.25","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.25","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"99dd0f8fe7759dc60eee67dd0af45918731812aa","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.25.tgz","fileCount":54,"integrity":"sha512-8X/gsrsouwalZwR5lVNj1GoibQ7SkVrXoA2/me9qfUuRxP2nmb9L+QyZA1NvpGIDLidnK5wvfZjv52YT9ZkkAg==","signatures":[{"sig":"MEUCIFxnGqzpqy2ojUf0b3Xde7JCcMjbiRpElubSl0bsujcDAiEAzvS9vkZg0ZydYRWW8C6rgDGSIp2MyBEPJMlXMYJvBD8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82666},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"9857310c7bdc96401062f50929581f5bccb7911e","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"lowdb":"^6.0.1","redis":"^4.6.7","dotenv":"^16.4.7","express":"^4.18.2","couchbase":"^4.2.5","socket.io":"^4.7.4","jsonwebtoken":"^9.0.2","reflect-metadata":"^0.1.13","@socket.io/redis-adapter":"^8.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.25_1770446384328_0.47020431519701456","host":"s3://npm-registry-packages-npm-production"}},"1.0.26":{"name":"ts-game-decorators","version":"1.0.26","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.26","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"e32eb30936aca115a7a0c772ed7f3393233dfa74","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.26.tgz","fileCount":54,"integrity":"sha512-V8JXT26HYBtxvHvhC+HwFP1K0TPCZCnZeXhLmgyWJbInPQdw+133n6X/Ce0r+zUKJvge++6gZ9LkpQQ+8kMmRg==","signatures":[{"sig":"MEUCIQDS7fJ/qzfVp69QFLmejVJu+ZAk9KKr4fPNy/xBm32FHwIgF0RSSeOmzUAXL/5lsJvn3Qa0buAJGC9patwPgnfv2Lw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83067},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"3ef4926ac5806fb89d9dc94f5ab0531718197f86","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"lowdb":"^6.0.1","redis":"^4.6.7","dotenv":"^16.4.7","express":"^4.18.2","couchbase":"^4.2.5","socket.io":"^4.7.4","jsonwebtoken":"^9.0.2","reflect-metadata":"^0.1.13","@socket.io/redis-adapter":"^8.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.26_1772047120387_0.08201262694732914","host":"s3://npm-registry-packages-npm-production"}},"1.0.27":{"name":"ts-game-decorators","version":"1.0.27","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.27","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"db60f91f17d044fa4984f3c054c09a0609ee9d48","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.27.tgz","fileCount":54,"integrity":"sha512-CtVU+6rx/9OkIR7a+CDjjmQ1yFqWojbeyIMaygdUoXqG1YORE7Oq34MDs3txxlKd+ytlpOcvrE/fZ/cMCAMvsw==","signatures":[{"sig":"MEYCIQDHFgqSiv2nGDNOPl8bF3EGvdInT75piPoJGNowFvrfLAIhAL8hFGtQsPLsla/+HQW3AzLo/jTeRjoF+5FbNlazi9pC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83283},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"3ef4926ac5806fb89d9dc94f5ab0531718197f86","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"lowdb":"^6.0.1","redis":"^4.6.7","dotenv":"^16.4.7","express":"^4.18.2","couchbase":"^4.2.5","socket.io":"^4.7.4","jsonwebtoken":"^9.0.2","reflect-metadata":"^0.1.13","@socket.io/redis-adapter":"^8.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.27_1772048266459_0.07641495589888114","host":"s3://npm-registry-packages-npm-production"}},"1.0.28":{"name":"ts-game-decorators","version":"1.0.28","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.28","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"13b412db75bcf35f0feabbe226e0c7b83101a9eb","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.28.tgz","fileCount":54,"integrity":"sha512-e8gay+23VGM2/BfEWlb2hK19T4rIpFdRFaEwGB1SNLccVIJglYHTjhPlRYaxWZtcgUulNVSsZWkIIxn7UaJoog==","signatures":[{"sig":"MEQCICPPSS3LGvKT8Jdru9toBTuewByAGshNuIeJpAbt6BUuAiA7yfwxuMmvlN7ZAVWHGCeXvn5FOC/qrfOIkpTQ17O5YQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83808},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"3ef4926ac5806fb89d9dc94f5ab0531718197f86","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"lowdb":"^6.0.1","redis":"^4.6.7","dotenv":"^16.4.7","express":"^4.18.2","couchbase":"^4.2.5","socket.io":"^4.7.4","jsonwebtoken":"^9.0.2","reflect-metadata":"^0.1.13","@socket.io/redis-adapter":"^8.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.28_1772048880411_0.1227641344702528","host":"s3://npm-registry-packages-npm-production"}},"1.0.29":{"name":"ts-game-decorators","version":"1.0.29","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.29","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"065b8b72dcb85fda104361633033e3707115a70c","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.29.tgz","fileCount":56,"integrity":"sha512-XVKHhFBVwx+yu+czbNYpnT6UaYW/F2R+MOAdkhTgjlz7NWKPwXcmjAvDt1lNGwgjzHXXVWDlua5K/E5VNWkS9Q==","signatures":[{"sig":"MEUCIQD3MRZB8XszWe0lCaezeFC/e+mSJVi8KSUtsOlTsMOilwIgT8fHhfGISzdwMjUSpX6gHc/lIv2Ul9+jG9FqwW/DLEw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99216},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"6494768fa384e7f3c386aabc8c9cbd3b903ebf70","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"lowdb":"^6.0.1","redis":"^4.6.7","dotenv":"^16.4.7","express":"^4.18.2","couchbase":"^4.2.5","socket.io":"^4.7.4","jsonwebtoken":"^9.0.2","reflect-metadata":"^0.1.13","@socket.io/redis-adapter":"^8.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.29_1772076811138_0.39196212204736436","host":"s3://npm-registry-packages-npm-production"}},"1.0.30":{"name":"ts-game-decorators","version":"1.0.30","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.30","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"b932f3197114f701d82d1d702cf4553bac80717c","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.30.tgz","fileCount":56,"integrity":"sha512-KbTSlHdC5uKwpOa8TNfYJwlwvSub5FlhhSCVuZ9A7MxQf2EOoNTVpohfF87EJApxec+RSfJeg23lVvXf2v6U8g==","signatures":[{"sig":"MEYCIQDJb9U5GuFBPxavQBPk5ouulDmjPZ5oCHdutCmHCkkMpgIhANzxBGyl1FQeaQrXwQj58D+yuFXlusWgwlxGs6gajpee","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99492},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"d5b28ddff4acb897838d301c603b237738c274bc","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"lowdb":"^6.0.1","redis":"^4.6.7","dotenv":"^16.4.7","express":"^4.18.2","couchbase":"^4.2.5","socket.io":"^4.7.4","jsonwebtoken":"^9.0.2","reflect-metadata":"^0.1.13","@socket.io/redis-adapter":"^8.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.30_1772078781496_0.7083063018442839","host":"s3://npm-registry-packages-npm-production"}},"1.0.31":{"name":"ts-game-decorators","version":"1.0.31","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.31","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"2aa3731062d8b65fdce50974877427f673b62bd8","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.31.tgz","fileCount":56,"integrity":"sha512-1H7nDAD7aCsMqVYHjjrDYyFZjMg198tRgJ/j/3Iykd/QkqhaC+C4X6tF5d4FoLlWnmB/AuHwYYdOqhX/8QObcA==","signatures":[{"sig":"MEYCIQCsX3zXVrV9/6mYzFnFwlRU3GQiexdpcTIF0rboLSVZoQIhAJlxfjdEsgtfwsuWmsZXaGCKT4c0JQDaZpCvV+XXL+Us","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99689},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"d5b28ddff4acb897838d301c603b237738c274bc","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"lowdb":"^6.0.1","redis":"^4.6.7","dotenv":"^16.4.7","express":"^4.18.2","couchbase":"^4.2.5","socket.io":"^4.7.4","jsonwebtoken":"^9.0.2","reflect-metadata":"^0.1.13","@socket.io/redis-adapter":"^8.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.31_1772078987787_0.687958435427978","host":"s3://npm-registry-packages-npm-production"}},"1.0.32":{"name":"ts-game-decorators","version":"1.0.32","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.32","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"da7876124ad83346df1555f49f74b35d9baea0de","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.32.tgz","fileCount":56,"integrity":"sha512-SEqVZAlURzw/ov5xZBynvSJ8zC5KcjPgqv6hD1kSimP4gizZZcymbt5JApMunv4sqC+KlzB/roW86HNHlb/eUQ==","signatures":[{"sig":"MEUCIGs8hbfr0WOnFUYtialymXjGOGsJnXOXGt1CQjaBFaXcAiEAyMsVSyYmN4OK54E9eLOzApN92CFcHKPHyeyQySvbMpE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":102466},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"d5b28ddff4acb897838d301c603b237738c274bc","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"lowdb":"^6.0.1","redis":"^4.6.7","dotenv":"^16.4.7","express":"^4.18.2","couchbase":"^4.2.5","socket.io":"^4.7.4","jsonwebtoken":"^9.0.2","reflect-metadata":"^0.1.13","@socket.io/redis-adapter":"^8.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.32_1772079080759_0.2664934361826836","host":"s3://npm-registry-packages-npm-production"}},"1.0.33":{"name":"ts-game-decorators","version":"1.0.33","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.33","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"0f6482a91306610b6ecc370ada58173a511d793f","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.33.tgz","fileCount":56,"integrity":"sha512-PxWseEzqCY2uCO/hHoXorNv5RNebYqk7VpIXH21mBlKHl066MwFeiSsE+qiEv+DE7CUKk0t23de+cQWsqkn4Iw==","signatures":[{"sig":"MEYCIQD51ZxFYvVJqAjRjYyeKjm7In1RO7q1j2GWdqUObkm0sgIhAKpn7abzrkhDUJdzh3UfxSWjNb4NpxiOqh4Cmot60n69","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":102794},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"a4cca6b8b7419f19dc2f03cb58a42509e4e9632a","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"lowdb":"^6.0.1","redis":"^4.6.7","dotenv":"^16.4.7","express":"^4.18.2","couchbase":"^4.2.5","socket.io":"^4.7.4","jsonwebtoken":"^9.0.2","reflect-metadata":"^0.1.13","@socket.io/redis-adapter":"^8.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.33_1772079702886_0.6840627716309158","host":"s3://npm-registry-packages-npm-production"}},"1.0.34":{"name":"ts-game-decorators","version":"1.0.34","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.34","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"43e6539f8247960551e8e6bd2dd00ace8f63c500","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.34.tgz","fileCount":58,"integrity":"sha512-T5N37cbR4ZASb5yAOghf1FPD/Ho5BR3gHxeJo6EoVw+wQ2tencR0cOK9T9zMT31M3FXNUZ4j3XharWyIOnt25A==","signatures":[{"sig":"MEUCIBDSFC/WKVa8XWJrh5/5ehP8k1TFO37/24F55Sphuz5nAiEAtwV5AMIh+Bge/QkpxJbZEjBA4PQdbYXsi6VE4I28Shc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":106014},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"6c807a4250c9706dfbaf6f8c5615b0d74759abe3","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"lowdb":"^6.0.1","redis":"^4.6.7","dotenv":"^16.4.7","express":"^4.18.2","couchbase":"^4.2.5","socket.io":"^4.7.4","jsonwebtoken":"^9.0.2","reflect-metadata":"^0.1.13","@socket.io/redis-adapter":"^8.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.34_1772096617130_0.7761715101495059","host":"s3://npm-registry-packages-npm-production"}},"1.0.35":{"name":"ts-game-decorators","version":"1.0.35","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","_id":"ts-game-decorators@1.0.35","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"dist":{"shasum":"c2d5f8d42a8ceca254dd493f594f6b27bcaf3ef2","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.35.tgz","fileCount":58,"integrity":"sha512-5zo4NNhswO0tR/8udncV5yidPJ0q4jTqwOk+a+XT4Gkd5/p63X6siZjEbu4EIubRXzQcQNhG16VzoCjJRHinnA==","signatures":[{"sig":"MEYCIQDrPkjzc5IGkAyq/ZV3ufjhmMt08AVOu7OgrVSz5xmlGgIhAK7oNIo54CVnyeMPu9BfLm8J9EZZrQEUQBc1+vkQ2rWx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":106096},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"8f368fb51ac074ab97ca0cd5cdcf5a867bd7776d","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"_npmVersion":"11.6.4","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","directories":{},"_nodeVersion":"22.21.0","dependencies":{"lowdb":"^6.0.1","redis":"^4.6.7","dotenv":"^16.4.7","express":"^4.18.2","couchbase":"^4.2.5","socket.io":"^4.7.4","jsonwebtoken":"^9.0.2","reflect-metadata":"^0.1.13","@socket.io/redis-adapter":"^8.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-game-decorators_1.0.35_1772100821795_0.03355728602491581","host":"s3://npm-registry-packages-npm-production"}},"1.0.36":{"name":"ts-game-decorators","version":"1.0.36","description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build"},"keywords":["express","socket.io","decorators","typescript","router","auto-router"],"author":{"name":"gamedevtoi"},"license":"MIT","dependencies":{"express":"^4.18.2","socket.io":"^4.7.4","reflect-metadata":"^0.1.13","redis":"^4.6.7","@socket.io/redis-adapter":"^8.2.0","lowdb":"^6.0.1","couchbase":"^4.2.5","jsonwebtoken":"^9.0.2","dotenv":"^16.4.7"},"devDependencies":{"typescript":"^5.0.0"},"gitHead":"94905ab45f74e4befb92fa3a2ce880a58b02a64c","_id":"ts-game-decorators@1.0.36","_nodeVersion":"22.21.0","_npmVersion":"11.6.4","dist":{"integrity":"sha512-u+CEEGYCa5h+VehlNfXyU4T71xmuUaIsGZ3ZIm04vmMWEEwTL6yYVAhCBM7uPZ7RLNNv7e3+/BjMzMPnjZXcQg==","shasum":"ef73fa6e6b8eaff44ff53a74912734f24c2c668b","tarball":"https://registry.npmjs.org/ts-game-decorators/-/ts-game-decorators-1.0.36.tgz","fileCount":58,"unpackedSize":106203,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCD3aUXANgdqdXN1zln71As2VI92Vne4Jh3JxJaSO+YzgIhALOoAkDdV+3VLLb2XxwHwtSqjhUt/Pvdo6+HThMRTF0q"}]},"_npmUser":{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"},"directories":{},"maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ts-game-decorators_1.0.36_1772122618128_0.5954693746199737"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-13T04:53:35.218Z","modified":"2026-02-26T16:16:58.382Z","1.0.0":"2026-01-13T04:53:35.430Z","1.0.1":"2026-01-13T04:56:20.964Z","1.0.2":"2026-01-13T05:06:25.583Z","1.0.3":"2026-01-13T06:50:20.910Z","1.0.4":"2026-01-13T07:11:01.467Z","1.0.5":"2026-01-13T07:15:56.488Z","1.0.6":"2026-01-13T07:28:24.999Z","1.0.7":"2026-01-13T07:33:03.806Z","1.0.8":"2026-01-13T08:01:27.858Z","1.0.9":"2026-01-13T08:08:01.347Z","1.0.10":"2026-01-13T08:25:06.330Z","1.0.11":"2026-01-13T08:29:24.451Z","1.0.12":"2026-01-13T08:37:15.535Z","1.0.13":"2026-01-13T08:41:28.095Z","1.0.14":"2026-01-13T08:45:13.882Z","1.0.15":"2026-01-13T09:07:21.297Z","1.0.16":"2026-01-15T03:04:36.754Z","1.0.17":"2026-01-15T03:17:17.844Z","1.0.18":"2026-01-15T03:19:27.225Z","1.0.19":"2026-01-15T03:40:50.723Z","1.0.20":"2026-01-15T03:43:26.033Z","1.0.21":"2026-01-27T10:12:14.648Z","1.0.22":"2026-01-29T08:17:32.357Z","1.0.23":"2026-02-07T05:46:10.478Z","1.0.24":"2026-02-07T06:12:49.523Z","1.0.25":"2026-02-07T06:39:44.460Z","1.0.26":"2026-02-25T19:18:40.587Z","1.0.27":"2026-02-25T19:37:46.600Z","1.0.28":"2026-02-25T19:48:00.571Z","1.0.29":"2026-02-26T03:33:31.289Z","1.0.30":"2026-02-26T04:06:21.651Z","1.0.31":"2026-02-26T04:09:47.929Z","1.0.32":"2026-02-26T04:11:20.915Z","1.0.33":"2026-02-26T04:21:43.032Z","1.0.34":"2026-02-26T09:03:37.293Z","1.0.35":"2026-02-26T10:13:41.963Z","1.0.36":"2026-02-26T16:16:58.284Z"},"author":{"name":"gamedevtoi"},"license":"MIT","keywords":["express","socket.io","decorators","typescript","router","auto-router"],"description":"Express & Socket.IO decorators for auto routing and event handling. using for backend game development.","maintainers":[{"name":"nhathuy7996","email":"nhat.huy.7996@gmail.com"}],"readme":"# ts-game-decorators\n\nA TypeScript library for auto-routing Express APIs and Socket.IO events using decorators. Simplifies backend code for scalable Node.js applications.\n\n## Features\n- Decorators for Express route/controller (@RouterController, @Get, @Post, @Authen)\n- Decorators for Socket.IO event handler (@SocketService, @OnEvent, @OnDisconnect, @OnError, @AuthenSocket)\n- Business Exception Handling with automatic error response formatting\n- Unified `initServer` function to bootstrap Express + Socket.IO + Redis adapter\n  - Supports `authAPIMiddleware` for Express and `authSocketMiddleware` for Socket.IO (can be used globally or for method-level `@AuthenSocket`)\n- TypeScript-first, auto .d.ts\n\n## Installation\n```sh\nnpm install ts-game-decorators\n```\n\n## TypeScript Configuration\nadd `tsconfig.json`:\n```json\n{\n  \"compilerOptions\": {\n    \"experimentalDecorators\": true,\n    \"emitDecoratorMetadata\": true,\n    \"useDefineForClassFields\": false\n  }\n}\n```\n\n## Usage Example\n\n### 1. API Controller\n```ts\nimport { RouterController, Get, Post, Authen } from 'express-socket-decorators';\n\n@RouterController('/api/public')\nexport class PublicAPI {\n  @Get('/hello')\n  hello(req, res) {\n    res.json({ msg: 'Hello world!' });\n  }\n}\n\n@RouterController('/api/private')\n@Authen()\nexport class PrivateAPI {\n  @Get('/profile')\n  profile(req, res) {\n    res.json({ user: req.userId });\n  }\n}\n```\n\n### 2. Socket Service\n```ts\nimport { SocketService, OnEvent, OnDisconnect, AuthenSocket } from 'express-socket-decorators';\n\n@SocketService()\nexport class GameSocketService {\n\n    private io: Server;\n    constructor(io: Server) {\n        this.io = io;\n    }\n\n  @OnEvent('startGame')\n  @AuthenSocket()\n  start(socket, data) {\n    // ...\n  }\n\n  @OnDisconnect()\n  disconnect(socket) {\n    // ...\n  }\n}\n```\n\n### 3. Business Exception Handling\n\nThe library includes a built-in business exception system that automatically handles errors and formats responses.\n\n#### Features\n- Define enum-like business exceptions (similar to Java enums)\n- Automatic error response formatting: `{ success: false, message: string, code: number }`\n- Automatic HTTP status code mapping\n- Type-safe exception definitions\n- Works with all routes (authenticated and public)\n\n#### Creating Business Exceptions\n\n```ts\nimport { createBusinessMessage } from 'ts-game-decorators';\n\nexport const ShopBusinessMessage = createBusinessMessage({\n  ITEM_NOT_FOUND: [11005, \"Item not found in shop config\", 404],\n  INVALID_REQUEST: [11001, \"Invalid request\", 400],\n  CURRENCY_NOT_ENOUGH: [11007, \"Currency not enough\", 400],\n  INTERNAL_ERROR: [11000, \"Internal server error\", 500],\n});\n```\n\n#### Throwing Business Exceptions\n\n```ts\nimport { BusinessException } from 'ts-game-decorators';\nimport { ShopBusinessMessage } from './exceptions/shopException';\n\n@RouterController('/api/shop')\nexport class ShopAPI {\n  @Get('/:itemId')\n  async getItem(req, res) {\n    const item = await findItem(req.params.itemId);\n    \n    if (!item) {\n      throw new BusinessException(ShopBusinessMessage.ITEM_NOT_FOUND);\n    }\n    \n    res.json({ success: true, data: item });\n  }\n}\n```\n\n#### Automatic Response Example\n\nWhen throwing `BusinessException(ShopBusinessMessage.ITEM_NOT_FOUND)`:\n\n**Response (HTTP 404):**\n```json\n{\n  \"success\": false,\n  \"message\": \"Item not found in shop config\",\n  \"code\": 11005\n}\n```\n\n### 4. Bootstrap Server\n\n```ts\nexport interface InitOptions {\n    port: number;\n    apiControllers?: any[];\n    socketServices?: any[];\n    authAPIMiddleware?: any;\n    onReady?: (app: Express, io: SocketIOServer, httpServer: HTTPServer) => void;\n    publicPath?: string;\n    expressConfig?: (app: Express) => void;\n    socketConfig?: (io: SocketIOServer) => void;\n    createRedisAdapter?: () => Promise<any>;\n}\n```\n\nYou can simple call InitServer to create your game server\n```ts\nimport { authAPIToken, createRedisAdapter, initServer, utils } from 'ts-game-decorators';\nimport { PublicAPI, PrivateAPI } from './api';\nimport { GameSocketService } from './socket';\nimport { authAPIToken } from './middleware/auth';\nimport { createRedisAdapter } from './config/redis';\n\nconst publicPath = path.join(__dirname, 'public');\n\ninitServer({\n  port: 3000,\n  createRedisAdapter,\n  apiControllers: [PublicAPI, PrivateAPI],\n  socketServices: [GameSocketService],\n  onReady: () => console.log('Server ready!'),\n  publicPath: publicPath,\n  authAPIMiddleware: authAPIToken,\n    expressConfig: (app)=>{\n    app.use('/',(req: any, res: any)=>{\n        console.log(`Incoming request: ${req.method} ${req.url}`);\n        res.send('Hello from the server!');\n    });\n});\n```\n\n### 5. Create token\n\n```ts\nimport {utils} from \"ts-game-decorators\";\nlet token = utils.tokenEncode({\"userId\":123});\n```\n\ndata pass to tokenEncode must have userId for authen purpose!\n\n### 6. using couchbase DB\n\n```ts\nimport { connectToCouchbase, getCollection, queryData } from \"ts-game-decorators\";\n\nasync function exampleDB(){\n  await connectToCouchbase;\n  const userCollection = getCollection('users'); // optional scopeName\n\n    //update\n    userCollection.upsert('user::12345', { name: 'John Doe', score: 1000 })\n    .then(() => {\n        console.log('User upserted successfully');\n    })\n    .catch((err) => {\n        console.error('Error upserting user:', err);\n    });\n\n    //get\n    userCollection.get('user::12345')\n    .then((result) => {\n        console.log('User data:', result.value);\n    })\n    .catch((err) => {\n         console.error('Error getting user:', err);\n    });\n\n    //query\n  const rows = await queryData('SELECT * FROM `gamedevtoi`._default.users LIMIT 10;');\n}\n```\n\n### 7. .env config\n\n```\nSERVER_ID=\"prefix-1\"\nHTTP_PORT=3000\n\nDISCORD_TOKEN=\"\"\nCHANNEL_ID=\"\"\nJWT_SECRET=\"\"\n\nTELEGRAM_BOT_TOKEN=\"\"\nTELEGRAM_CHATID=\"\"\nTELEGRAM_THREAD_ID=0\n\nCOUCHBASE_URL=\"\"\nCOUCHBASE_USERNAME=\"\"\nCOUCHBASE_PASSWORD=\"\"\nCOUCHBASE_BUCKET=\"\"\n\nREDIS_URL=\"\"\nREDIS_USERNAME=\"\"\nREDIS_PASSWORD=\"\" \n```\n\n### 8. Server Registry (Multi-instance Tracking)\n\nBuilt-in server registry to track active server instances in a multi-server deployment using Redis Heartbeat.\n\n#### How it works\n\nEach server instance periodically writes a heartbeat to a shared Redis Hash (`server:registry`). Results are cached in memory and refreshed automatically every heartbeat cycle — so game loops can query server state at **zero Redis cost**.\n\n```\n[Server 1] ──heartbeat──▶ Redis (server:registry)\n[Server 2] ──heartbeat──▶ Redis (server:registry)\n\nMemory cache (auto-refreshed every 10s):\n  { count: 2, myIndex: 0, servers: [...] }\n```\n\n#### Setup\n\nCall `startServerRegistry()` after Redis is connected, and `stopServerRegistry()` on shutdown:\n\n```ts\nimport { createRedisAdapter, startServerRegistry, stopServerRegistry } from 'ts-game-decorators';\n\ninitServer({\n  port: 3000,\n  createRedisAdapter,\n  onReady: async () => {\n    await startServerRegistry();\n    console.log('Server registry started!');\n  },\n});\n\n// Graceful shutdown\nprocess.on('SIGTERM', async () => {\n  await stopServerRegistry();\n});\n```\n\n#### Reading server info in a game loop (Zero Redis cost)\n\nUse the `getCached*` functions inside high-frequency loops (e.g. 60 FPS update). These read from in-memory cache only — **no Redis calls**.\n\n```ts\nimport { getCachedServerCount, getCachedServerIndex, getCachedActiveServers } from 'ts-game-decorators';\n\nclass GameController {\n  update(deltaTime: number) {\n    // ⚡ ZERO COST — reads from memory, never touches Redis\n    const total   = getCachedServerCount();    // e.g. 3\n    const myIndex = getCachedServerIndex();    // e.g. 1  (0-based, sorted by serverId)\n\n    // Example: partition world zones across servers\n    // Server 0 → zone 0, Server 1 → zone 1, ...\n    const myZone = myIndex;\n  }\n}\n```\n\n|         Function           | Redis calls |      Use case        |\n|----------------------------|-------------|----------------------|\n| `getCachedServerCount()`   | **0**       | game loop, anywhere  |\n| `getCachedServerIndex()`   | **0**       | game loop, anywhere  |\n| `getCachedActiveServers()` | **0**       | game loop, anywhere  |\n| `getActiveServerCount()`   | 2           | admin API, monitoring|\n| `getActiveServers()`       | 2           | admin API, monitoring|\n\n#### Querying real-time data (e.g. admin API)\n\n```ts\nimport { getActiveServers, getActiveServerCount } from 'ts-game-decorators';\n\n// Force-refresh cache then return result\nconst count   = await getActiveServerCount();\nconst servers = await getActiveServers();\n\n// Each ServerInfo contains:\n// { serverId, hostname, pid, startedAt, lastHeartbeat }\n```\n\n#### Identifying server instances\n\nEach instance gets a unique `SERVER_ID` automatically. Override via environment variable for explicit naming (e.g. in Docker/PM2):\n\n```sh\n# Automatic (default): \"hostname-PID\"\nnode dist/index.js\n\n# Explicit (recommended for production):\nSERVER_ID=pokemon-server-1 node dist/index.js\nSERVER_ID=pokemon-server-2 node dist/index.js\n```\n\n```ts\nimport { SERVER_ID } from 'ts-game-decorators';\nconsole.log(`Running as: ${SERVER_ID}`);\n```\n\n#### SERVER_ID & cache index stability\n\n`getCachedServerIndex()` returns the position of the current server in a **sorted list** of all active servers. The sort uses **natural order** (numeric suffix aware), so `server-2 < server-10` works correctly.\n\n| `SERVER_ID` mode              | Index stable across restarts? | Reason                                              |\n|-------------------------------|-------------------------------|-----------------------------------------------------|\n| Auto `hostname-PID`           | ❌ No                         | PID changes every restart → different sort order    |\n| Manual `server-1`, `server-2` | ✅ Yes                        | Fixed string → always same sort position            |\n\nHow natural sort works:\n\n```\nSERVER_ID           naturalKey()              sort index\n─────────────────────────────────────────────────────────\npokemon-server-1  → [\"pokemon-server-\", 1]  →  0\npokemon-server-2  → [\"pokemon-server-\", 2]  →  1\npokemon-server-10 → [\"pokemon-server-\", 10] →  2  ✅ correct\n```\n\n> ⚠️ Without natural sort, lexicographic order would give `server-10` index 1 and `server-2` index 2 — which is wrong.\n\n**Recommended naming convention for production:**\n\n```sh\n# ✅ Good — same prefix, number at the end\nSERVER_ID=pokemon-server-1\nSERVER_ID=pokemon-server-2\nSERVER_ID=pokemon-server-10\n\n# ✅ Also fine — different prefixes sort alphabetically first\nSERVER_ID=asia-server-1\nSERVER_ID=eu-server-1\n\n# ⚠️ Avoid — no numeric suffix, index order is harder to predict\nSERVER_ID=main-server\nSERVER_ID=backup-server\n```\n\n\n#### .env config for heartbeat tuning\n\nThe following are defaults baked into the library. No `.env` changes needed unless you want to override them in future releases:\n\n| Setting              | Default         |                 Description                              |\n|----------------------|-----------------|----------------------------------------------------------|\n| `HEARTBEAT_TTL`      | 30s             | Time before a silent server is declared dead             |\n| `HEARTBEAT_INTERVAL` | 10s             | How often each server sends a heartbeat                  |\n| `SERVER_ID`          | `hostname-PID`  | Unique identifier for this instance                      |\n\n---\n\n## Troubleshooting\n\n### Redis `ConnectionTimeoutError` when running multiple server instances\n\n**Symptom:** Server 1 runs fine. When Server 2 starts, Server 1 logs repeated errors:\n\n```\n❌ Redis Subscriber Error: ConnectionTimeoutError: Connection timeout\n❌ Redis Publisher Error: ConnectionTimeoutError: Connection timeout\n```\n\nServer 1 recovers only after Server 2 is stopped.\n\n**Root cause: NAT/Firewall idle connection timeout**\n\nWhen Redis and game servers are on separate machines, TCP connections pass through a firewall or NAT that tracks active connections. If a connection is **idle** (no traffic) longer than the firewall's idle timeout (typically 60–350s depending on cloud provider), the firewall silently drops its tracking entry. When Server 2 starts and generates traffic, Server 1's idle connections get displaced or expire — causing the timeout.\n\n```\nServer 1 → idle for >60s → Firewall drops tracking entry\nServer 2 starts → flood of new packets\nServer 1 sends packet → Firewall has no entry → packet dropped → ConnectionTimeoutError\n```\n\n**Cloud firewall idle timeouts (reference):**\n\n| Provider              | Default idle timeout |\n|-----------------------|----------------------|\n| AWS Security Group    | No idle timeout ✅   |\n| AWS NAT Gateway       | 350s                 |\n| GCP Firewall          | 120s ⚠️              |\n| DigitalOcean          | 60–120s ⚠️           |\n| Self-hosted (iptables)| Depends on config    |\n\n**Fix 1 — Redis server (run once):**\n\n```bash\n# Reduce Redis TCP keepalive from 300s to 60s\n# Redis will send TCP probe every 60s → firewall entry stays alive\nredis-cli CONFIG SET tcp-keepalive 60\n\n# Ensure Redis never closes idle connections\nredis-cli CONFIG SET timeout 0\n\n# Save permanently\nredis-cli CONFIG REWRITE\n```\n\n**Fix 2 — Client code (already configured in this library):**\n\nThe `createRedisAdapter` function is already configured with:\n\n```ts\nsocket: {\n    // Retry indefinitely — client is NEVER permanently destroyed\n    reconnectStrategy: (retries) => Math.min(retries * 200, 10_000),\n\n    // Connection establishment timeout\n    connectTimeout: 10_000,\n\n    // Client sends TCP keepalive probe every 15s\n    // Must be lower than the shortest firewall idle timeout in your infra\n    keepAlive: 15_000,\n}\n```\n\n> ⚠️ Do NOT use `return new Error(...)` in `reconnectStrategy` — it permanently destroys the Redis client and prevents all future reconnections.\n\n**Checklist to verify:**\n\n```bash\nredis-cli CONFIG GET timeout        # should be \"0\"\nredis-cli CONFIG GET tcp-keepalive  # should be \"60\" (not 300)\nredis-cli CONFIG GET maxclients     # should be well above total connections\nredis-cli INFO clients              # check connected_clients vs maxclients\n```\n\n## License\nMIT\n","readmeFilename":"README.md"}