{"_id":"@absolutejs/sync-pack-presence","_rev":"12-e03b01db0cd8dcb19b946a4102882b60","name":"@absolutejs/sync-pack-presence","dist-tags":{"latest":"0.6.0"},"versions":{"0.1.0":{"name":"@absolutejs/sync-pack-presence","version":"0.1.0","keywords":["absolutejs","sync","sync-pack","presence","multiplayer","realtime"],"author":"Alex Kahn","license":"CC BY-NC 4.0","_id":"@absolutejs/sync-pack-presence@0.1.0","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"dist":{"shasum":"384c32c668485f61acb5969b8d84b2d1bfec2fc0","tarball":"https://registry.npmjs.org/@absolutejs/sync-pack-presence/-/sync-pack-presence-0.1.0.tgz","fileCount":5,"integrity":"sha512-meq8IRhnPNa33eAYtzOaZZbAMLxJMi7E4uNOhhoU0EXCBYL4haN1jErr19LS27iv3u7InKlevmoNdv9nYZBCxQ==","signatures":[{"sig":"MEUCIALlCTu96uvEUopBDF5tmV2f5iH3l/Yb7cc5jUgqgdw/AiEA/YdIikOGQFMTSs9DV96bf/B8AlqR9H6Qr1G3y8kjNJQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33551},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"384c32c668485f61acb5969b8d84b2d1bfec2fc0","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"bun test","build":"rm -rf dist && bun build src/index.ts --outdir dist --sourcemap --target=bun --external @absolutejs/sync && tsc --project tsconfig.build.json","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run typecheck && bun run test && bun run build && bun publish","typecheck":"tsc --noEmit"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"_integrity":"sha512-meq8IRhnPNa33eAYtzOaZZbAMLxJMi7E4uNOhhoU0EXCBYL4haN1jErr19LS27iv3u7InKlevmoNdv9nYZBCxQ==","repository":{"url":"https://github.com/absolutejs/sync-packs.git","type":"git","directory":"presence"},"_npmVersion":"10.8.3","description":"Per-channel live presence pack for @absolutejs/sync — heartbeat-driven, scoped, TTL-cleaned","directories":{},"_nodeVersion":"24.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"elysia":"1.4.26","prettier":"3.5.3","@types/bun":"1.3.14","typescript":"5.8.3","@absolutejs/sync":"^1.9.0"},"peerDependencies":{"@absolutejs/sync":">= 1.9.0"},"_npmOperationalInternal":{"tmp":"tmp/sync-pack-presence_0.1.0_1779999514056_0.4790043051979369","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@absolutejs/sync-pack-presence","version":"0.1.1","keywords":["absolutejs","sync","sync-pack","presence","multiplayer","realtime"],"author":"Alex Kahn","license":"CC BY-NC 4.0","_id":"@absolutejs/sync-pack-presence@0.1.1","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"dist":{"shasum":"fd26b685c98764ada36ca68229bd31931baf82b7","tarball":"https://registry.npmjs.org/@absolutejs/sync-pack-presence/-/sync-pack-presence-0.1.1.tgz","fileCount":5,"integrity":"sha512-ad8FxhpF20gfiQZ8z8Se2nGrBre8srFQvvkexZAogIuyAhA5XlKX8bDnBgjGC62Hk6RCzIVucKXWANZiPIBanA==","signatures":[{"sig":"MEUCIAa7yCev+b1tV21WdOS8gu2rGjJN+3pAMjWfeof4C8JMAiEA7ABO/izSvxf6CHLfIHJbbovE0gQPE6RfpX9exDkHQI8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33529},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"fd26b685c98764ada36ca68229bd31931baf82b7","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"bun test","build":"rm -rf dist && bun build src/index.ts --outdir dist --sourcemap --target=bun --external @absolutejs/sync && tsc --project tsconfig.build.json","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run typecheck && bun run test && bun run build && bun publish","typecheck":"tsc --noEmit"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"_integrity":"sha512-ad8FxhpF20gfiQZ8z8Se2nGrBre8srFQvvkexZAogIuyAhA5XlKX8bDnBgjGC62Hk6RCzIVucKXWANZiPIBanA==","repository":{"url":"https://github.com/absolutejs/sync-packs.git","type":"git","directory":"presence"},"_npmVersion":"10.8.3","description":"Per-channel live presence pack for @absolutejs/sync — heartbeat-driven, scoped, TTL-cleaned","directories":{},"_nodeVersion":"24.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.5.3","@types/bun":"1.3.14","typescript":"5.8.3","@absolutejs/sync":"^1.9.1"},"peerDependencies":{"@absolutejs/sync":">= 1.9.1"},"_npmOperationalInternal":{"tmp":"tmp/sync-pack-presence_0.1.1_1780001648434_0.17999786071280544","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@absolutejs/sync-pack-presence","version":"0.2.0","keywords":["absolutejs","sync","sync-pack","presence","multiplayer","realtime"],"author":"Alex Kahn","license":"CC BY-NC 4.0","_id":"@absolutejs/sync-pack-presence@0.2.0","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"dist":{"shasum":"79c2d86d48cd1904fec8b7f067d7d28be9c4f663","tarball":"https://registry.npmjs.org/@absolutejs/sync-pack-presence/-/sync-pack-presence-0.2.0.tgz","fileCount":5,"integrity":"sha512-L/ZClBnhDRLwBR2fU2s7h6opCWoD7AnYN3JO6oGOwmEpM5i09g7teyfY6WL3MTlBU2if1NVOnCu4PGbPHuBnzw==","signatures":[{"sig":"MEUCIHeazAnrU0X5iRT15l5Lx8PvrYT9k8pziMWcTek++34fAiEA/YX0v2nCV7J5zfk3NOXYmXoOEK6J38xtcp9uaAxF338=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36298},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"79c2d86d48cd1904fec8b7f067d7d28be9c4f663","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"bun test","build":"rm -rf dist && bun build src/index.ts --outdir dist --sourcemap --target=bun --external @absolutejs/sync && tsc --project tsconfig.build.json","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run typecheck && bun run test && bun run build && bun publish","typecheck":"tsc --noEmit"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"_integrity":"sha512-L/ZClBnhDRLwBR2fU2s7h6opCWoD7AnYN3JO6oGOwmEpM5i09g7teyfY6WL3MTlBU2if1NVOnCu4PGbPHuBnzw==","repository":{"url":"https://github.com/absolutejs/sync-packs.git","type":"git","directory":"presence"},"_npmVersion":"10.8.3","description":"Per-channel live presence pack for @absolutejs/sync — heartbeat-driven, scoped, TTL-cleaned","directories":{},"_nodeVersion":"24.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.5.3","@types/bun":"1.3.14","typescript":"5.8.3","@absolutejs/sync":"^1.9.2"},"peerDependencies":{"@absolutejs/sync":">= 1.9.1"},"_npmOperationalInternal":{"tmp":"tmp/sync-pack-presence_0.2.0_1780008504431_0.3756203208298403","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@absolutejs/sync-pack-presence","version":"0.3.0","keywords":["absolutejs","sync","sync-pack","presence","multiplayer","realtime"],"author":"Alex Kahn","license":"CC BY-NC 4.0","_id":"@absolutejs/sync-pack-presence@0.3.0","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"dist":{"shasum":"c712a3dacf4fc37437392ef4ae2eb56d70c6b4b9","tarball":"https://registry.npmjs.org/@absolutejs/sync-pack-presence/-/sync-pack-presence-0.3.0.tgz","fileCount":5,"integrity":"sha512-1Yrm0Uzhd60JTsaHpiyZUKAhwhDmUydYH+ESZ6G5c/45zjNdUfSfLdMRiBPfOzBh3YalsJ58mY7bwWIxp8sX6A==","signatures":[{"sig":"MEQCIDjId+Vx0YFQmXTTmrYzyt/KQEaMNaONxOjdzISikQwDAiBd7a98X9u+2gYdkUtlnQyPxYLn3VE2b87Knm0waEPkAw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42220},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"c712a3dacf4fc37437392ef4ae2eb56d70c6b4b9","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"bun test","build":"rm -rf dist && bun build src/index.ts --outdir dist --sourcemap --target=bun --external @absolutejs/sync && tsc --project tsconfig.build.json","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run typecheck && bun run test && bun run build && bun publish","typecheck":"tsc --noEmit"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"_integrity":"sha512-1Yrm0Uzhd60JTsaHpiyZUKAhwhDmUydYH+ESZ6G5c/45zjNdUfSfLdMRiBPfOzBh3YalsJ58mY7bwWIxp8sX6A==","repository":{"url":"https://github.com/absolutejs/sync-packs.git","type":"git","directory":"presence"},"_npmVersion":"10.8.3","description":"Per-channel live presence pack for @absolutejs/sync — heartbeat-driven, scoped, TTL-cleaned, with cursor + typing state patches","directories":{},"_nodeVersion":"24.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.5.3","@types/bun":"1.3.14","typescript":"5.8.3","@absolutejs/sync":"^1.9.2"},"peerDependencies":{"@absolutejs/sync":">= 1.9.1"},"_npmOperationalInternal":{"tmp":"tmp/sync-pack-presence_0.3.0_1780023188398_0.7830399761554465","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@absolutejs/sync-pack-presence","version":"0.3.1","keywords":["absolutejs","sync","sync-pack","presence","multiplayer","realtime"],"author":"Alex Kahn","license":"Apache-2.0","_id":"@absolutejs/sync-pack-presence@0.3.1","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"dist":{"shasum":"7bef0a2f4c841384395c7c4330bd0629edc49954","tarball":"https://registry.npmjs.org/@absolutejs/sync-pack-presence/-/sync-pack-presence-0.3.1.tgz","fileCount":6,"integrity":"sha512-r+1NhkTR59rP655geytKbKy2Uh01yAn7y4FPDovumChqkJLmwpasV9GFsVr6LhsDh1f/iIi2fUkyI3WYMH/5ng==","signatures":[{"sig":"MEQCIEF4a1N0xac0mgYts8nqY1tqnUBlFtPlA8symuBETscrAiAQXQtjan5jLBbxHu48rde73q7LmqtL15KO6AkMXd6ikA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53576},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"7bef0a2f4c841384395c7c4330bd0629edc49954","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"test":"bun test","build":"rm -rf dist && bun build src/index.ts --outdir dist --sourcemap --target=bun --external @absolutejs/sync && tsc --project tsconfig.build.json","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run typecheck && bun run test && bun run build && bun publish","typecheck":"tsc --noEmit"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"_integrity":"sha512-r+1NhkTR59rP655geytKbKy2Uh01yAn7y4FPDovumChqkJLmwpasV9GFsVr6LhsDh1f/iIi2fUkyI3WYMH/5ng==","repository":{"url":"https://github.com/absolutejs/sync-packs.git","type":"git","directory":"presence"},"_npmVersion":"10.8.3","description":"Per-channel live presence pack for @absolutejs/sync — heartbeat-driven, scoped, TTL-cleaned, with cursor + typing state patches","directories":{},"_nodeVersion":"24.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.5.3","@types/bun":"1.3.14","typescript":"5.8.3","@absolutejs/sync":"^1.9.2"},"peerDependencies":{"@absolutejs/sync":">= 1.9.1"},"_npmOperationalInternal":{"tmp":"tmp/sync-pack-presence_0.3.1_1780071579738_0.44824377348355293","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@absolutejs/sync-pack-presence","version":"0.4.0","keywords":["absolutejs","sync","sync-pack","presence","multiplayer","realtime"],"author":{"name":"Alex Kahn"},"license":"Apache-2.0","_id":"@absolutejs/sync-pack-presence@0.4.0","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"homepage":"https://github.com/absolutejs/sync-packs/tree/main/presence","bugs":{"url":"https://github.com/absolutejs/sync-packs/issues"},"dist":{"shasum":"929ddd5609b7002aa8431d2317e9878e6c3a8406","tarball":"https://registry.npmjs.org/@absolutejs/sync-pack-presence/-/sync-pack-presence-0.4.0.tgz","fileCount":6,"integrity":"sha512-rblTvEJmwqxzNFddzKaL1zFPiVQrdX00ZOoZVdSFxxVlbhpwQ1giVTLl0DzgGlExp4hvjghjZa+uD3icYgGcQw==","signatures":[{"sig":"MEUCIEuvAtRZRWUZRTuve5ODye7YJN83HA9JmQN0a0390mcdAiEAqS+GLcYqKr/ivtjcVjj3JDCqJnel/gIhpWcjqbo6MgY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":56408},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"1fd98922bc765664ccd365bb6a48c0bb67665e00","scripts":{"test":"bun test","build":"rm -rf dist && bun build src/index.ts --outdir dist --sourcemap --target=bun --external @absolutejs/sync && tsc --project tsconfig.build.json","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run typecheck && bun run test && bun run build && bun publish","typecheck":"tsc --noEmit"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"repository":{"url":"git+https://github.com/absolutejs/sync-packs.git","type":"git","directory":"presence"},"_npmVersion":"10.9.2","description":"Per-channel live presence pack for @absolutejs/sync — heartbeat-driven, scoped, TTL-cleaned, with cursor + typing state patches","directories":{},"_nodeVersion":"22.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.5.3","@types/bun":"1.3.14","typescript":"5.8.3","@absolutejs/sync":"^1.9.2"},"peerDependencies":{"@absolutejs/sync":">= 1.9.1"},"_npmOperationalInternal":{"tmp":"tmp/sync-pack-presence_0.4.0_1781841770187_0.5007158276480892","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@absolutejs/sync-pack-presence","version":"0.4.1","keywords":["absolutejs","sync","sync-pack","presence","multiplayer","realtime"],"author":"Alex Kahn","license":"Apache-2.0","_id":"@absolutejs/sync-pack-presence@0.4.1","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"homepage":"https://github.com/absolutejs/sync-packs/tree/main/presence","bugs":{"url":"https://github.com/absolutejs/sync-packs/issues"},"dist":{"shasum":"35e778bfc193d2b99b212da8e29137be2d0c5fb2","tarball":"https://registry.npmjs.org/@absolutejs/sync-pack-presence/-/sync-pack-presence-0.4.1.tgz","fileCount":10,"integrity":"sha512-3G46BeYbX+2AzRuaqcYxz0wr+e7RpQd8pRpOPhmJtEA/uFlwGmgNYGolKrZUIX0mk3dmZXcb3AfF2s2M79WRVA==","signatures":[{"sig":"MEYCIQDRPDXJziGioHDplBGG2ixMGt9856hJnEGLeoMuzYCazAIhAPgxFpO/xIbACnQ+sikCbpAFb8zMIaeeTytmrQCsq98p","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1154935},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"35e778bfc193d2b99b212da8e29137be2d0c5fb2","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./manifest.json":"./dist/manifest.json"},"scripts":{"test":"bun test","build":"rm -rf dist && bun build src/index.ts src/manifest.ts --outdir dist --sourcemap --target=bun --external @absolutejs/sync && tsc --project tsconfig.build.json && absolute-manifest emit","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run typecheck && bun run test && bun run build && bun publish","typecheck":"tsc --noEmit"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"_integrity":"sha512-3G46BeYbX+2AzRuaqcYxz0wr+e7RpQd8pRpOPhmJtEA/uFlwGmgNYGolKrZUIX0mk3dmZXcb3AfF2s2M79WRVA==","absolutejs":{"manifestContract":1},"repository":{"url":"https://github.com/absolutejs/sync-packs.git","type":"git","directory":"presence"},"_npmVersion":"10.8.3","description":"Per-channel live presence pack for @absolutejs/sync — heartbeat-driven, scoped, TTL-cleaned, with cursor + typing state patches","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@sinclair/typebox":"^0.34.0","@absolutejs/manifest":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.5.3","@types/bun":"1.3.14","typescript":"5.8.3","@absolutejs/sync":"^1.9.2"},"peerDependencies":{"@absolutejs/sync":">= 1.9.1"},"_npmOperationalInternal":{"tmp":"tmp/sync-pack-presence_0.4.1_1783965478645_0.060322297776019385","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@absolutejs/sync-pack-presence","version":"0.4.2","keywords":["absolutejs","sync","sync-pack","presence","multiplayer","realtime"],"author":"Alex Kahn","license":"Apache-2.0","_id":"@absolutejs/sync-pack-presence@0.4.2","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"homepage":"https://github.com/absolutejs/sync-packs/tree/main/presence","bugs":{"url":"https://github.com/absolutejs/sync-packs/issues"},"dist":{"shasum":"2fb931503c98de4642c60a62a9433ded9e7d681c","tarball":"https://registry.npmjs.org/@absolutejs/sync-pack-presence/-/sync-pack-presence-0.4.2.tgz","fileCount":10,"integrity":"sha512-WKgvwYUSU8wo/FKvS0NkIhFOKl2aM1GYiWR1HjBq12e8pYvcamQcUSAfNc6dDe6+AhSk0GPglAgyK7xxJCfIlg==","signatures":[{"sig":"MEYCIQCsre1N08+nS3vfULlFg44bV/bT90WusdRvw4BJ+g6O2wIhAOqRB+Sq5Lb+DAI8lsczI/lOtx53GzDr0l2JdxTC5/3a","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1176417},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"2fb931503c98de4642c60a62a9433ded9e7d681c","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./manifest.json":"./dist/manifest.json"},"scripts":{"test":"bun test","build":"rm -rf dist && bun build src/index.ts src/manifest.ts --outdir dist --sourcemap --target=bun --external @absolutejs/sync && tsc --project tsconfig.build.json && absolute-manifest emit","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run typecheck && bun run test && bun run build && bun publish","typecheck":"tsc --noEmit"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"_integrity":"sha512-WKgvwYUSU8wo/FKvS0NkIhFOKl2aM1GYiWR1HjBq12e8pYvcamQcUSAfNc6dDe6+AhSk0GPglAgyK7xxJCfIlg==","absolutejs":{"manifestContract":2},"repository":{"url":"https://github.com/absolutejs/sync-packs.git","type":"git","directory":"presence"},"_npmVersion":"10.8.3","description":"Per-channel live presence pack for @absolutejs/sync — heartbeat-driven, scoped, TTL-cleaned, with cursor + typing state patches","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@sinclair/typebox":"^0.34.0","@absolutejs/manifest":"^0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.5.3","@types/bun":"1.3.14","typescript":"5.8.3","@absolutejs/sync":"^1.9.2"},"peerDependencies":{"@absolutejs/sync":">= 1.9.1"},"_npmOperationalInternal":{"tmp":"tmp/sync-pack-presence_0.4.2_1784846218812_0.3026204834517541","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"@absolutejs/sync-pack-presence","version":"0.4.3","keywords":["absolutejs","sync","sync-pack","presence","multiplayer","realtime"],"author":"Alex Kahn","license":"Apache-2.0","_id":"@absolutejs/sync-pack-presence@0.4.3","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"homepage":"https://github.com/absolutejs/sync-packs/tree/main/presence","bugs":{"url":"https://github.com/absolutejs/sync-packs/issues"},"dist":{"shasum":"c6bf585c3dde56b9173ab775269513b3f48743e4","tarball":"https://registry.npmjs.org/@absolutejs/sync-pack-presence/-/sync-pack-presence-0.4.3.tgz","fileCount":10,"integrity":"sha512-cMrTWZJfSW4frz0uFq6mL+7TTGnVPlwl0A6YEkx2/5GJXLf9yKeD3cj1FAEezUyCDKseCesV7G3qHZarpqLn2Q==","signatures":[{"sig":"MEUCICXSneGdkWsZaVUR3Ir0LbcCR7MNuH3vxZZJGkpBo3u/AiEAt2yU0nsAbmgprqbqzlzM0kvJHNAciY2XG+qDQ2jq2BM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":519061},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"c6bf585c3dde56b9173ab775269513b3f48743e4","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./manifest.json":"./dist/manifest.json"},"scripts":{"test":"bun test","build":"rm -rf dist && bun build src/index.ts src/manifest.ts --outdir dist --sourcemap --target=bun --external @absolutejs/sync && tsc --project tsconfig.build.json && absolute-manifest emit","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run typecheck && bun run test && bun run build && bun publish","typecheck":"tsc --noEmit"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"_integrity":"sha512-cMrTWZJfSW4frz0uFq6mL+7TTGnVPlwl0A6YEkx2/5GJXLf9yKeD3cj1FAEezUyCDKseCesV7G3qHZarpqLn2Q==","absolutejs":{"runtimePeers":{"@absolutejs/sync":{"range":">=2.11.0 <3","tested":"2.11.0","buildExternals":["@absolutejs/sync"],"artifactImports":["@absolutejs/sync/engine"]}},"manifestContract":2},"repository":{"url":"https://github.com/absolutejs/sync-packs.git","type":"git","directory":"presence"},"_npmVersion":"10.8.3","description":"Per-channel live presence pack for @absolutejs/sync — heartbeat-driven, scoped, TTL-cleaned, with cursor + typing state patches","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@sinclair/typebox":"^0.34.0","@absolutejs/manifest":"^0.7.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.5.3","@types/bun":"1.3.14","typescript":"5.8.3","@absolutejs/sync":"2.11.0"},"peerDependencies":{"@absolutejs/sync":">=2.11.0 <3"},"_npmOperationalInternal":{"tmp":"tmp/sync-pack-presence_0.4.3_1784913347434_0.6490097491704174","host":"s3://npm-registry-packages-npm-production"}},"0.4.4":{"name":"@absolutejs/sync-pack-presence","version":"0.4.4","keywords":["absolutejs","sync","sync-pack","presence","multiplayer","realtime"],"author":{"name":"Alex Kahn"},"license":"Apache-2.0","_id":"@absolutejs/sync-pack-presence@0.4.4","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"homepage":"https://github.com/absolutejs/sync-packs/tree/main/presence","bugs":{"url":"https://github.com/absolutejs/sync-packs/issues"},"dist":{"shasum":"c07868220bbff0ff8a0a3266cf605c10597cefa2","tarball":"https://registry.npmjs.org/@absolutejs/sync-pack-presence/-/sync-pack-presence-0.4.4.tgz","fileCount":10,"integrity":"sha512-evjeXdTdBDK4Pte+XC7Mq4ze7U6N3d/TCqu0d1Z0+WHk7yQQSLYoiOuJf7GoKsn3KsmZizA7/00GSbeKf3rpGA==","signatures":[{"sig":"MEUCIQD+15oyi+7LdpkXUGgirAsIPtj4csO5qB9yej/HRQLFAgIgJSvELUEOmL8SyaTo6oGLyYAfCpzAKc4iu+k0RDJso0I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":526849},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./manifest.json":"./dist/manifest.json"},"gitHead":"ba7c2594b58ad9e1cd434195d96823ba678f2260","scripts":{"test":"bun test","build":"rm -rf dist && bun build src/index.ts src/manifest.ts --outdir dist --sourcemap --target=bun --external @absolutejs/sync && tsc --project tsconfig.build.json && absolute-manifest emit","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run typecheck && bun run test && bun run build && bun publish","typecheck":"tsc --noEmit"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"absolutejs":{"manifestContract":2},"repository":{"url":"git+https://github.com/absolutejs/sync-packs.git","type":"git","directory":"presence"},"_npmVersion":"10.9.2","description":"Per-channel live presence pack for @absolutejs/sync — heartbeat-driven, scoped, TTL-cleaned, with cursor + typing state patches","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@sinclair/typebox":"^0.34.0","@absolutejs/manifest":"^0.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.5.3","@types/bun":"1.3.14","typescript":"5.8.3","@absolutejs/sync":"2.11.0"},"peerDependencies":{"@absolutejs/sync":">=2.11.0 <3"},"_npmOperationalInternal":{"tmp":"tmp/sync-pack-presence_0.4.4_1787720843002_0.014885741180928003","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@absolutejs/sync-pack-presence","version":"0.5.0","keywords":["absolutejs","sync","sync-pack","presence","multiplayer","realtime"],"author":{"name":"Alex Kahn"},"license":"Apache-2.0","_id":"@absolutejs/sync-pack-presence@0.5.0","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"homepage":"https://github.com/absolutejs/sync-packs/tree/main/presence","bugs":{"url":"https://github.com/absolutejs/sync-packs/issues"},"dist":{"shasum":"e3969e131e3429be5f9acd891761840deef65312","tarball":"https://registry.npmjs.org/@absolutejs/sync-pack-presence/-/sync-pack-presence-0.5.0.tgz","fileCount":10,"integrity":"sha512-ZyiD4+K9jBz3e6HUHVlNoZpgQ0z8LIdVfggcX82AM15/DPhSKsiUPAcn3SCdS1hUf0covdV7Yvvp4DBj24ECaw==","signatures":[{"sig":"MEUCIQD9jsJ8/lyPd5b9eD+tbkGFMAZ22Mc91tYIVwcmPoT9awIgJtCdAIJZYX3aDPxOiazCSspAMvVz9wJiK5oZSe9ygls=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":527377},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./manifest.json":"./dist/manifest.json"},"gitHead":"f6a9d1a741b1b3f39977cea64ba6931b3f2f61db","scripts":{"test":"bun test","build":"rm -rf dist && bun build src/index.ts src/manifest.ts --outdir dist --sourcemap --target=bun --external @absolutejs/sync && tsc --project tsconfig.build.json && absolute-manifest emit","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run typecheck && bun run test && bun run build && bun publish","typecheck":"tsc --noEmit"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"absolutejs":{"sync":{"localSchema":{"version":1,"localData":{"mutations":[{"match":"*presence*","persistence":"memory-only","sensitivity":"private"}],"collections":[{"match":"*presence*","persistence":"memory-only","sensitivity":"private","evictionPriority":"disposable"}]}}},"manifestContract":2},"repository":{"url":"git+https://github.com/absolutejs/sync-packs.git","type":"git","directory":"presence"},"_npmVersion":"10.9.2","description":"Per-channel live presence pack for @absolutejs/sync — heartbeat-driven, scoped, TTL-cleaned, with cursor + typing state patches","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@sinclair/typebox":"^0.34.0","@absolutejs/manifest":"^0.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.5.3","@types/bun":"1.3.14","typescript":"5.8.3","@absolutejs/sync":"2.28.0"},"peerDependencies":{"@absolutejs/sync":">=2.11.0 <3"},"_npmOperationalInternal":{"tmp":"tmp/sync-pack-presence_0.5.0_1787723209272_0.6198311135093213","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@absolutejs/sync-pack-presence","version":"0.6.0","description":"Per-channel live presence pack for @absolutejs/sync — heartbeat-driven, scoped, TTL-cleaned, with cursor + typing state patches","repository":{"type":"git","url":"git+https://github.com/absolutejs/sync-packs.git","directory":"presence"},"homepage":"https://github.com/absolutejs/sync-packs/tree/main/presence","bugs":{"url":"https://github.com/absolutejs/sync-packs/issues"},"main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","type":"module","license":"Apache-2.0","author":{"name":"Alex Kahn"},"publishConfig":{"access":"public"},"keywords":["absolutejs","sync","sync-pack","presence","multiplayer","realtime"],"scripts":{"build":"rm -rf dist && bun build src/index.ts src/manifest.ts --outdir dist --sourcemap --target=bun --external @absolutejs/sync && tsc --project tsconfig.build.json && absolute-manifest emit","test":"bun test","typecheck":"tsc --noEmit","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run typecheck && bun run test && bun run build && bun publish"},"peerDependencies":{"@absolutejs/sync":">=2.11.0 <3"},"devDependencies":{"@absolutejs/sync":"2.29.0","@types/bun":"1.3.14","prettier":"3.5.3","typescript":"5.8.3"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./manifest.json":"./dist/manifest.json"},"absolutejs":{"manifestContract":2,"sync":{"localSchema":{"version":1,"localData":{"collections":[{"match":"*presence*","sensitivity":"private","persistence":"memory-only","evictionPriority":"disposable"}],"mutations":[{"match":"*presence*","sensitivity":"private","persistence":"memory-only","conflict":{"strategy":"server-wins"}}]}}}},"dependencies":{"@absolutejs/manifest":"^0.9.0","@sinclair/typebox":"^0.34.0"},"_id":"@absolutejs/sync-pack-presence@0.6.0","gitHead":"70fac17d77643bafa53a933112c69a65b06245e9","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-4PqfLStg7isfCCOAKN4oeE+ufP7qvhcmCJIiJLHTkipcuePpxqxr9BuiLrt0+jpSbpuagMUqWdoQuUaTbSH7zg==","shasum":"e2924aa7803b41a329dae0135c6c481e94601257","tarball":"https://registry.npmjs.org/@absolutejs/sync-pack-presence/-/sync-pack-presence-0.6.0.tgz","fileCount":10,"unpackedSize":527668,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCHx9BPZJEV2J6cqD2GVq/AtuhvRGdA936DlyKnFpylawCIQDwirAQtJ8/tVxcuO8rrjb2lqrz/WiM0NXzZDZFPR6eWg=="}]},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"directories":{},"maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sync-pack-presence_0.6.0_1787729601065_0.7686981648359354"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-28T20:18:33.961Z","modified":"2026-08-26T07:33:21.441Z","0.1.0":"2026-05-28T20:18:34.197Z","0.1.1":"2026-05-28T20:54:08.653Z","0.2.0":"2026-05-28T22:48:24.579Z","0.3.0":"2026-05-29T02:53:08.601Z","0.3.1":"2026-05-29T16:19:39.947Z","0.4.0":"2026-06-19T04:02:50.345Z","0.4.1":"2026-07-13T17:57:58.832Z","0.4.2":"2026-07-23T22:36:59.024Z","0.4.3":"2026-07-24T17:15:47.584Z","0.4.4":"2026-08-26T05:07:23.213Z","0.5.0":"2026-08-26T05:46:49.425Z","0.6.0":"2026-08-26T07:33:21.224Z"},"bugs":{"url":"https://github.com/absolutejs/sync-packs/issues"},"author":{"name":"Alex Kahn"},"license":"Apache-2.0","homepage":"https://github.com/absolutejs/sync-packs/tree/main/presence","keywords":["absolutejs","sync","sync-pack","presence","multiplayer","realtime"],"repository":{"type":"git","url":"git+https://github.com/absolutejs/sync-packs.git","directory":"presence"},"description":"Per-channel live presence pack for @absolutejs/sync — heartbeat-driven, scoped, TTL-cleaned, with cursor + typing state patches","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"readme":"# @absolutejs/sync-pack-presence\n\nPer-channel live presence for [`@absolutejs/sync`](https://github.com/absolutejs/sync).\nHeartbeat-driven, scoped (per workspace/tenant), TTL-cleaned. Plugs into a\n`SyncEngine` with one `engine.registerPack(...)` call.\n\n```bash\nbun add @absolutejs/sync-pack-presence\n```\n\n## Usage\n\n```ts\nimport { createSyncEngine } from '@absolutejs/sync/engine';\nimport { createPresencePack } from '@absolutejs/sync-pack-presence';\n\nconst engine = createSyncEngine();\nengine.registerPack(\n\tcreatePresencePack({\n\t\t// REQUIRED in practice: how the pack reads the current actor id from\n\t\t// your app's ctx. Default is `(ctx) => ctx.userId`.\n\t\tgetActorId: (ctx) => ctx.session.userId,\n\n\t\t// OPTIONAL: tenant/workspace scope. Two scopes never see each other's\n\t\t// presence rows.\n\t\tscope: (ctx) => ctx.session.workspaceId,\n\n\t\t// OPTIONAL: TTL on a heartbeat (seconds). Default 30.\n\t\theartbeatTtlSec: 30,\n\n\t\t// OPTIONAL: cron for the cleanup schedule. Default every 15 seconds.\n\t\t// You must still wire `@elysiajs/cron` to fire this — sync only owns\n\t\t// the handler, not the trigger.\n\t\tcleanupCron: '*/15 * * * * *'\n\t})\n);\n```\n\nThe pack exposes:\n\n| Surface                | Name                  | What it does                                                          |\n| ---------------------- | --------------------- | --------------------------------------------------------------------- |\n| Collection             | `presence`            | Subscribe with `params: { channel }` — returns live members           |\n| Mutation               | `presence:heartbeat`  | Upsert the caller's row in a channel and refresh its TTL              |\n| Mutation               | `presence:leave`      | Delete the caller's row in a channel                                  |\n| Schedule               | `presence:cleanup`    | Delete rows with `expiresAt <= now` (cron-fired by your host)          |\n\n## Storage\n\nBy default the pack uses an in-memory store — presence is ephemeral and almost\nalways fine to lose on restart. To use a persistent backend (Drizzle, Postgres,\nRedis, …) pass a custom `store`:\n\n```ts\nimport { createPresencePack, type PresenceStore } from '@absolutejs/sync-pack-presence';\n\nconst store: PresenceStore = {\n\treader: { all: () => /* SELECT * FROM presence */ },\n\twriter: {\n\t\tinsert: (row) => /* INSERT */,\n\t\tupdate: (row) => /* UPDATE */,\n\t\tdelete: (row) => /* DELETE */,\n\t},\n\texpired: (now) => /* SELECT * FROM presence WHERE expires_at <= $1 */\n};\n\nengine.registerPack(createPresencePack({ store, getActorId: (ctx) => ctx.userId }));\n```\n\n## Multiple instances\n\nTo run two presence packs on the same engine (e.g. one per product surface),\npass a `prefix` to each — it scopes the owned table, the collection name, the\nmutation names, and the schedule name:\n\n```ts\nengine.registerPack(createPresencePack({ prefix: 'docs_', getActorId }));\nengine.registerPack(createPresencePack({ prefix: 'chat_', getActorId }));\n\n// Mutations are now `docs_presence:heartbeat` and `chat_presence:heartbeat`.\n// Collections are `docs_presence` and `chat_presence`.\n// Schedules are `docs_presence:cleanup` and `chat_presence:cleanup`.\n```\n\n## Composition\n\nThis pack composes via **subscriptions**, not cross-pack mutation calls. If\nanother pack wants to react to presence changes (e.g. a typing-indicator\ndisplay), it subscribes to the `presence` collection — it does not call\n`presence:heartbeat` from inside its own handler. That keeps packs decoupled.\n\n## What's in the `SyncPack`\n\n`createPresencePack(config)` returns a plain `SyncPack` record:\n\n- `ownsTables: ['presence']` (or `[`${prefix}presence`]`)\n- `schemas`: field validators for the presence row\n- `permissions`: read scoped to `scope(ctx)`, write requires\n  `row.actorId === getActorId(ctx)`\n- `readers` / `writers`: the in-memory store (or your custom one)\n- `collections`: the per-channel live-members collection\n- `mutations`: `presence:heartbeat` and `presence:leave`\n- `schedules`: `presence:cleanup` with a retry policy\n\nThis is inspectable at runtime via `engine.inspect().packs`.\n","readmeFilename":"README.md"}