{"_id":"@gwakko/shared-websocket","_rev":"29-110774d0b2a066979ab0a5bd5d86eb2f","name":"@gwakko/shared-websocket","dist-tags":{"latest":"0.17.3"},"versions":{"0.1.0":{"name":"@gwakko/shared-websocket","version":"0.1.0","keywords":["websocket","broadcast-channel","shared","tabs","leader-election","real-time","react","vue","web-worker","sync"],"author":{"name":"gwakko"},"license":"MIT","_id":"@gwakko/shared-websocket@0.1.0","maintainers":[{"name":"gwakko","email":"zvezdnev@gmail.com"}],"homepage":"https://github.com/Gwakko/shared-websocket#readme","bugs":{"url":"https://github.com/Gwakko/shared-websocket/issues"},"dist":{"shasum":"55bd210c0443ed92c0edc16cbb353b739d1da746","tarball":"https://registry.npmjs.org/@gwakko/shared-websocket/-/shared-websocket-0.1.0.tgz","fileCount":51,"integrity":"sha512-yIooUG7SfGfNVqlSVcIzeq8wyxXoQdPAMoirzOMt7tEJ8OrQdNlruP0z+7sTdmafP0s5WoaRF03O8QezR5sfOg==","signatures":[{"sig":"MEYCIQD7ieM/GguRqr5z7hNF5iVaU2XPiZl6i+vrof5nuKptcAIhAN65LREPrnfQIULeE17vp5qI1kcisgkssXNhAHUoVdif","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":258345},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./vue":{"types":"./dist/vue.d.ts","import":"./dist/vue.js","require":"./dist/vue.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"}},"gitHead":"099d91bff4547d2914fc2bf2735bae3cdf2416e5","scripts":{"test":"vitest run","build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"gwakko","email":"zvezdnev@gmail.com"},"repository":{"url":"git+https://github.com/Gwakko/shared-websocket.git","type":"git"},"_npmVersion":"11.6.2","description":"Share ONE WebSocket connection across browser tabs — leader election, BroadcastChannel sync, optional Web Worker","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.32","tsup":"^8.5.1","react":"^19.2.5","vitest":"^4.1.4","typescript":"^6.0.2","@types/react":"^19.2.14"},"peerDependencies":{"vue":">=3.4.0","react":">=19.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/shared-websocket_0.1.0_1776166391551_0.793015128770437","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@gwakko/shared-websocket","version":"0.1.1","keywords":["websocket","broadcast-channel","shared","tabs","leader-election","real-time","react","vue","web-worker","sync"],"author":{"name":"gwakko"},"license":"MIT","_id":"@gwakko/shared-websocket@0.1.1","maintainers":[{"name":"gwakko","email":"zvezdnev@gmail.com"}],"homepage":"https://github.com/Gwakko/shared-websocket#readme","bugs":{"url":"https://github.com/Gwakko/shared-websocket/issues"},"dist":{"shasum":"6075154e6cf102101e0088591f70cee913b0ac3a","tarball":"https://registry.npmjs.org/@gwakko/shared-websocket/-/shared-websocket-0.1.1.tgz","fileCount":51,"integrity":"sha512-+HMXgstbBvaHk2FY0p6UoapF76/M54bH8xVwVr+ct++He5QVdBM02n3FSx0aeR/JphwWfH4YqGnhdjWSupzYdA==","signatures":[{"sig":"MEQCIB882rQV6QCrw3oL+DM/q6R4aT04t9UStekdwqEFdD2+AiAjNbHfUJxiJqe9uQgIcIfpw9JhnFefG2cl2qe4/WBrIQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":258366},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./vue":{"types":"./dist/vue.d.ts","import":"./dist/vue.js","require":"./dist/vue.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"}},"gitHead":"9aac0c972fb6ca4e1ae32907882a5c0cd799ddd9","scripts":{"test":"vitest run","build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"gwakko","email":"zvezdnev@gmail.com"},"repository":{"url":"git+https://github.com/Gwakko/shared-websocket.git","type":"git"},"_npmVersion":"11.6.2","description":"Share ONE WebSocket connection across browser tabs — leader election, BroadcastChannel sync, optional Web Worker","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.32","tsup":"^8.5.1","react":"^19.2.5","vitest":"^4.1.4","typescript":"^6.0.2","@types/react":"^19.2.14"},"peerDependencies":{"vue":">=3.4.0","react":">=19.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/shared-websocket_0.1.1_1776166785397_0.3376061718803143","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@gwakko/shared-websocket","version":"0.2.0","keywords":["websocket","broadcast-channel","shared","tabs","leader-election","real-time","react","vue","web-worker","sync"],"author":{"name":"gwakko"},"license":"MIT","_id":"@gwakko/shared-websocket@0.2.0","maintainers":[{"name":"gwakko","email":"zvezdnev@gmail.com"}],"homepage":"https://github.com/Gwakko/shared-websocket#readme","bugs":{"url":"https://github.com/Gwakko/shared-websocket/issues"},"dist":{"shasum":"8979c477a591bb7a0c5dfc0b4ce1ad041bbb3eb1","tarball":"https://registry.npmjs.org/@gwakko/shared-websocket/-/shared-websocket-0.2.0.tgz","fileCount":51,"integrity":"sha512-+hM2odBxujBxJkIKk6sz6NcK4RWmZPGD2TIVIYZPFhz4pHKHZrzrmiakd3M2L1VlGm0bMO1nZURGb/LtVPGIzw==","signatures":[{"sig":"MEQCIEaQWajr8W7phacDEEq/K8Fftj8CWbjg2rxTpBdl7b/2AiB3g328JioxhQEBMhVKtHWleSVQdorpO43SI19yQrna4w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":273136},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./vue":{"types":"./dist/vue.d.ts","import":"./dist/vue.js","require":"./dist/vue.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"}},"gitHead":"8b45dddbe11b90bf9913684f845c4e956109cef1","scripts":{"test":"vitest run","build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"gwakko","email":"zvezdnev@gmail.com"},"repository":{"url":"git+https://github.com/Gwakko/shared-websocket.git","type":"git"},"_npmVersion":"11.6.2","description":"Share ONE WebSocket connection across browser tabs — leader election, BroadcastChannel sync, optional Web Worker","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.32","tsup":"^8.5.1","react":"^19.2.5","vitest":"^4.1.4","typescript":"^6.0.2","@types/react":"^19.2.14"},"peerDependencies":{"vue":">=3.4.0","react":">=19.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/shared-websocket_0.2.0_1776167878379_0.36633397085661734","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@gwakko/shared-websocket","version":"0.2.1","keywords":["websocket","broadcast-channel","shared","tabs","leader-election","real-time","react","vue","web-worker","sync"],"author":{"name":"gwakko"},"license":"MIT","_id":"@gwakko/shared-websocket@0.2.1","maintainers":[{"name":"gwakko","email":"zvezdnev@gmail.com"}],"homepage":"https://github.com/Gwakko/shared-websocket#readme","bugs":{"url":"https://github.com/Gwakko/shared-websocket/issues"},"dist":{"shasum":"f043200135635be51ae1b02ffb1fc0b7928a81ff","tarball":"https://registry.npmjs.org/@gwakko/shared-websocket/-/shared-websocket-0.2.1.tgz","fileCount":51,"integrity":"sha512-mQ+Ks16dA4b/ONY8q3/ktg84EwtzkENTwY3SRBV/glmxasGOckrTGXwkMXKjjJldh93oBJLYf9kBUCljqzl3uQ==","signatures":[{"sig":"MEQCIEvba8IAxrN8vnms63l6aqzjmzd6kHKFm3cfn7/3K2rwAiAUcPUh9U5xuG2NXGYtK3H0o5LnszXjXaDHS9GzIWIMtw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":282771},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./vue":{"types":"./dist/vue.d.ts","import":"./dist/vue.js","require":"./dist/vue.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"}},"gitHead":"b732fdefcccc90b65f2697ce75c49d0f970de193","scripts":{"test":"vitest run","build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"gwakko","email":"zvezdnev@gmail.com"},"repository":{"url":"git+https://github.com/Gwakko/shared-websocket.git","type":"git"},"_npmVersion":"11.6.2","description":"Share ONE WebSocket connection across browser tabs — leader election, BroadcastChannel sync, optional Web Worker","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.32","tsup":"^8.5.1","react":"^19.2.5","vitest":"^4.1.4","typescript":"^6.0.2","@types/react":"^19.2.14"},"peerDependencies":{"vue":">=3.4.0","react":">=19.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/shared-websocket_0.2.1_1776168412520_0.28527947370792717","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@gwakko/shared-websocket","version":"0.3.0","keywords":["websocket","broadcast-channel","shared","tabs","leader-election","real-time","react","vue","web-worker","sync"],"author":{"name":"gwakko"},"license":"MIT","_id":"@gwakko/shared-websocket@0.3.0","maintainers":[{"name":"gwakko","email":"zvezdnev@gmail.com"}],"homepage":"https://github.com/Gwakko/shared-websocket#readme","bugs":{"url":"https://github.com/Gwakko/shared-websocket/issues"},"dist":{"shasum":"3e9c92d77a22e011d2ab588809add359f04d1a4b","tarball":"https://registry.npmjs.org/@gwakko/shared-websocket/-/shared-websocket-0.3.0.tgz","fileCount":51,"integrity":"sha512-VzFTE9WPEhciTZsAoKK+58TYXvy/VI7p9kRA/Da/AOAziKBUQCuqxadHoghXeeMXKl/dgQc/7NJoyGVpbCoOlQ==","signatures":[{"sig":"MEYCIQDO+xKCApr6XKDbreuVSsmtLPnLDKZ3DnAxp/yV49XSvQIhAOAIMOxdz1boYiloycHqhQbRhuqsWLAD+1fv/4IFlxw+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":288382},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./vue":{"types":"./dist/vue.d.ts","import":"./dist/vue.js","require":"./dist/vue.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"}},"gitHead":"fe90001268663c9fb0e0312df54a500e0365a522","scripts":{"test":"vitest run","build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"gwakko","email":"zvezdnev@gmail.com"},"repository":{"url":"git+https://github.com/Gwakko/shared-websocket.git","type":"git"},"_npmVersion":"11.6.2","description":"Share ONE WebSocket connection across browser tabs — leader election, BroadcastChannel sync, optional Web Worker","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.32","tsup":"^8.5.1","react":"^19.2.5","vitest":"^4.1.4","typescript":"^6.0.2","@types/react":"^19.2.14"},"peerDependencies":{"vue":">=3.4.0","react":">=19.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/shared-websocket_0.3.0_1776170590615_0.012954745847790328","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@gwakko/shared-websocket","version":"0.6.1","keywords":["websocket","broadcast-channel","shared","tabs","leader-election","real-time","react","vue","web-worker","sync"],"author":{"name":"gwakko"},"license":"MIT","_id":"@gwakko/shared-websocket@0.6.1","maintainers":[{"name":"gwakko","email":"zvezdnev@gmail.com"}],"homepage":"https://github.com/Gwakko/shared-websocket#readme","bugs":{"url":"https://github.com/Gwakko/shared-websocket/issues"},"dist":{"shasum":"cdaccd1c89d6e13b67c1b5ee7817b9b67cce6b4f","tarball":"https://registry.npmjs.org/@gwakko/shared-websocket/-/shared-websocket-0.6.1.tgz","fileCount":51,"integrity":"sha512-iBipWyqq6C//hA4vboWAnnACzCrUYz5IuLNqxvB7w/2A/lbVdniap3sEcM0gzphlYYEDwYKwsYv9NUlTRDXTTg==","signatures":[{"sig":"MEQCIAv3rXdw3QF3eLLwXgQein9h1ZW7nQVanw7/Y1yOwGK6AiBbbT/7ORfZsRWUh9hMOE381td6ZZDTdJ1SmwmEssgASw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":378925},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./vue":{"types":"./dist/vue.d.ts","import":"./dist/vue.js","require":"./dist/vue.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"}},"gitHead":"9a1777297b600dd19223d5c0aeb39df228aeef3e","scripts":{"test":"vitest run","build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"gwakko","email":"zvezdnev@gmail.com"},"repository":{"url":"git+https://github.com/Gwakko/shared-websocket.git","type":"git"},"_npmVersion":"11.6.2","description":"Share ONE WebSocket connection across browser tabs — leader election, BroadcastChannel sync, optional Web Worker","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.32","tsup":"^8.5.1","react":"^19.2.5","vitest":"^4.1.4","typescript":"^6.0.2","@types/react":"^19.2.14"},"peerDependencies":{"vue":">=3.4.0","react":">=19.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/shared-websocket_0.6.1_1776245531773_0.001867516680349679","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"@gwakko/shared-websocket","version":"0.6.2","keywords":["websocket","broadcast-channel","shared","tabs","leader-election","real-time","react","vue","web-worker","sync"],"author":{"name":"gwakko"},"license":"MIT","_id":"@gwakko/shared-websocket@0.6.2","maintainers":[{"name":"gwakko","email":"zvezdnev@gmail.com"}],"homepage":"https://github.com/Gwakko/shared-websocket#readme","bugs":{"url":"https://github.com/Gwakko/shared-websocket/issues"},"dist":{"shasum":"374c462ff2991f2047abbbe8b3f3ad20586ded8f","tarball":"https://registry.npmjs.org/@gwakko/shared-websocket/-/shared-websocket-0.6.2.tgz","fileCount":51,"integrity":"sha512-Fj5LyY5ajv1pToXEo8J6Cb/2Fm2pbJgM7VBKB5mmRcxNjSjXbFd8M1B/k6asO1aIv/OIHbJhbYed8V2loBiQqw==","signatures":[{"sig":"MEUCIQDo19WkgoQaogfvql7f7m8GEF/YZxUSymVR92U/ljw1iQIgNv0HVryqenL5r0E98QSFvPnhnf4AN9i43BqGNfaUH00=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":380354},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./vue":{"types":"./dist/vue.d.ts","import":"./dist/vue.js","require":"./dist/vue.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"}},"gitHead":"60abccea85166501a9943f5d248822f9f0e43d20","scripts":{"test":"vitest run","build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"gwakko","email":"zvezdnev@gmail.com"},"repository":{"url":"git+https://github.com/Gwakko/shared-websocket.git","type":"git"},"_npmVersion":"11.6.2","description":"Share ONE WebSocket connection across browser tabs — leader election, BroadcastChannel sync, optional Web Worker","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.32","tsup":"^8.5.1","react":"^19.2.5","vitest":"^4.1.4","typescript":"^6.0.2","@types/react":"^19.2.14"},"peerDependencies":{"vue":">=3.4.0","react":">=19.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/shared-websocket_0.6.2_1776246297606_0.8856847325601904","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@gwakko/shared-websocket","version":"0.7.1","keywords":["websocket","broadcast-channel","shared","tabs","leader-election","real-time","react","vue","web-worker","sync"],"author":{"name":"gwakko"},"license":"MIT","_id":"@gwakko/shared-websocket@0.7.1","maintainers":[{"name":"gwakko","email":"zvezdnev@gmail.com"}],"homepage":"https://github.com/Gwakko/shared-websocket#readme","bugs":{"url":"https://github.com/Gwakko/shared-websocket/issues"},"dist":{"shasum":"9617050919dffe319d038b97d95745c6ce8d3b2d","tarball":"https://registry.npmjs.org/@gwakko/shared-websocket/-/shared-websocket-0.7.1.tgz","fileCount":51,"integrity":"sha512-dDVVR3veR/fZ3AtyBT7+oZetw2Dh+X63Mp7Pu4QYZfuivmcAJwGMowzVx/OqvYUoGtRUsXOgnl5pzihI+HpQDA==","signatures":[{"sig":"MEUCIQDEWVqqJxUYDePBqu5jZ2M/iZnARK0HQj1iNPVYqxJkYgIgBQWq0w1KPIyAnx/mYpMvD72jDk6+bXUyZmq0pW9XDxo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":432757},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./vue":{"types":"./dist/vue.d.ts","import":"./dist/vue.js","require":"./dist/vue.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"}},"gitHead":"0d7e41fc1e733e442941caa2621a22eba324bda0","scripts":{"test":"vitest run","build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"gwakko","email":"zvezdnev@gmail.com"},"repository":{"url":"git+https://github.com/Gwakko/shared-websocket.git","type":"git"},"_npmVersion":"11.6.2","description":"Share ONE WebSocket connection across browser tabs — leader election, BroadcastChannel sync, optional Web Worker","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.32","tsup":"^8.5.1","react":"^19.2.5","vitest":"^4.1.4","typescript":"^6.0.2","@types/react":"^19.2.14"},"peerDependencies":{"vue":">=3.4.0","react":">=19.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/shared-websocket_0.7.1_1776253318364_0.7165253752353782","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@gwakko/shared-websocket","version":"0.8.0","keywords":["websocket","broadcast-channel","shared","tabs","leader-election","real-time","react","vue","web-worker","sync"],"author":{"name":"gwakko"},"license":"MIT","_id":"@gwakko/shared-websocket@0.8.0","maintainers":[{"name":"gwakko","email":"zvezdnev@gmail.com"}],"homepage":"https://github.com/Gwakko/shared-websocket#readme","bugs":{"url":"https://github.com/Gwakko/shared-websocket/issues"},"dist":{"shasum":"0be1c52b8a65ac294362e70fb28a22aa86ff19ad","tarball":"https://registry.npmjs.org/@gwakko/shared-websocket/-/shared-websocket-0.8.0.tgz","fileCount":51,"integrity":"sha512-TR5LBax5uwB77zz3vSsZVNftDQjikRTWis3YwUg8Sk3/gqmnMAnok7RFknLU4aiJg4Lqeqgjdk+604J01BHbZg==","signatures":[{"sig":"MEUCIGENlhIWvxyDf66yi3aSQKyM2gPi0gvfgIU/p77G6cv6AiEApaOEplYTl6usANOmkVyhIa1Sy5uMg3brpJFATJ3DaII=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":436075},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./vue":{"types":"./dist/vue.d.ts","import":"./dist/vue.js","require":"./dist/vue.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"}},"gitHead":"643de15181d07d6e17009f0edd0ff653bb7698ea","scripts":{"test":"vitest run","build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"gwakko","email":"zvezdnev@gmail.com"},"repository":{"url":"git+https://github.com/Gwakko/shared-websocket.git","type":"git"},"_npmVersion":"11.6.2","description":"Share ONE WebSocket connection across browser tabs — leader election, BroadcastChannel sync, optional Web Worker","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.32","tsup":"^8.5.1","react":"^19.2.5","vitest":"^4.1.4","typescript":"^6.0.2","@types/react":"^19.2.14"},"peerDependencies":{"vue":">=3.4.0","react":">=19.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/shared-websocket_0.8.0_1776253789128_0.7096754721218201","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"@gwakko/shared-websocket","version":"0.8.1","keywords":["websocket","broadcast-channel","shared","tabs","leader-election","real-time","react","vue","web-worker","sync"],"author":{"name":"gwakko"},"license":"MIT","_id":"@gwakko/shared-websocket@0.8.1","maintainers":[{"name":"gwakko","email":"zvezdnev@gmail.com"}],"homepage":"https://github.com/Gwakko/shared-websocket#readme","bugs":{"url":"https://github.com/Gwakko/shared-websocket/issues"},"dist":{"shasum":"428f588a1a6eb90efb7bdc080a38e67461bf6e82","tarball":"https://registry.npmjs.org/@gwakko/shared-websocket/-/shared-websocket-0.8.1.tgz","fileCount":51,"integrity":"sha512-JPP+X60J4YZ+qpPQ73d2796in1xWb+/QmalJnm76BJu+gBKPlFiEIFfnJqb+egqxwNroPzDRbeOw9Ydj8pFgHQ==","signatures":[{"sig":"MEUCIHr1kfj21yuMswWkGGtd0xqIhZt/r4oE0T4PUi/lkG/CAiEA/Nzr8LmskLtKgIwx4aOKuUw7X9wB+eLsjaQhm66aFpE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":449945},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./vue":{"types":"./dist/vue.d.ts","import":"./dist/vue.js","require":"./dist/vue.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"}},"gitHead":"cd8213079174144f75399913433296cac7402430","scripts":{"test":"vitest run","build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"gwakko","email":"zvezdnev@gmail.com"},"repository":{"url":"git+https://github.com/Gwakko/shared-websocket.git","type":"git"},"_npmVersion":"11.6.2","description":"Share ONE WebSocket connection across browser tabs — leader election, BroadcastChannel sync, optional Web Worker","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.32","tsup":"^8.5.1","react":"^19.2.5","vitest":"^4.1.4","typescript":"^6.0.2","@types/react":"^19.2.14"},"peerDependencies":{"vue":">=3.4.0","react":">=19.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/shared-websocket_0.8.1_1776255847782_0.20260399888827618","host":"s3://npm-registry-packages-npm-production"}},"0.8.2":{"name":"@gwakko/shared-websocket","version":"0.8.2","keywords":["websocket","broadcast-channel","shared","tabs","leader-election","real-time","react","vue","web-worker","sync"],"author":{"name":"gwakko"},"license":"MIT","_id":"@gwakko/shared-websocket@0.8.2","maintainers":[{"name":"gwakko","email":"zvezdnev@gmail.com"}],"homepage":"https://github.com/Gwakko/shared-websocket#readme","bugs":{"url":"https://github.com/Gwakko/shared-websocket/issues"},"dist":{"shasum":"842bfac9cfe6c8d078900a03d03506ecd07a385a","tarball":"https://registry.npmjs.org/@gwakko/shared-websocket/-/shared-websocket-0.8.2.tgz","fileCount":51,"integrity":"sha512-Nb3k7Id6BP9SwkWZOr7C5jj4H8H7fRAx+XddLNRgMPoDIwwTcLu1GMs43LLRp1UNExvjfvey2XC84AlsvysqNw==","signatures":[{"sig":"MEUCIC1EKTab05709HSKu9vUxeJNxGpkDEmvWbihPQQ4X0lPAiEAvxC9ryAfPGuZY3gA52OqSgUs8cx8mdxdrFFNpZq6OUM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":453056},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./vue":{"types":"./dist/vue.d.ts","import":"./dist/vue.js","require":"./dist/vue.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"}},"gitHead":"41589f267709f7bddca55750d2cdd61a56b26e82","scripts":{"test":"vitest run","build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"gwakko","email":"zvezdnev@gmail.com"},"repository":{"url":"git+https://github.com/Gwakko/shared-websocket.git","type":"git"},"_npmVersion":"11.6.2","description":"Share ONE WebSocket connection across browser tabs — leader election, BroadcastChannel sync, optional Web Worker","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.32","tsup":"^8.5.1","react":"^19.2.5","vitest":"^4.1.4","typescript":"^6.0.2","@types/react":"^19.2.14"},"peerDependencies":{"vue":">=3.4.0","react":">=19.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/shared-websocket_0.8.2_1776257623044_0.15618245140638343","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"@gwakko/shared-websocket","version":"0.9.1","keywords":["websocket","broadcast-channel","shared","tabs","leader-election","real-time","react","vue","web-worker","sync"],"author":{"name":"gwakko"},"license":"MIT","_id":"@gwakko/shared-websocket@0.9.1","maintainers":[{"name":"gwakko","email":"zvezdnev@gmail.com"}],"homepage":"https://github.com/Gwakko/shared-websocket#readme","bugs":{"url":"https://github.com/Gwakko/shared-websocket/issues"},"dist":{"shasum":"70dfe8153fe9c93de1fa435588f4594e673d7e95","tarball":"https://registry.npmjs.org/@gwakko/shared-websocket/-/shared-websocket-0.9.1.tgz","fileCount":52,"integrity":"sha512-GmRsEqnUfyW+ZLHB6O5KzYJF21R1rYsxQiRcqt3AoXI84k6q7mVrk3phsJt3L3clSNnrDmgrQJ/WREMEl3FyeA==","signatures":[{"sig":"MEUCIQCDf/uKURdq3AhlsMaCK+u4P3Wj+5WGheiFtzVaCx4ThAIgOO9SHgtKeHJOXNOO4ffLWDFll/CE9p60XLtL5+W7GtA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":467566},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./vue":{"types":"./dist/vue.d.ts","import":"./dist/vue.js","require":"./dist/vue.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"}},"gitHead":"abc1046706128c1bad424e0a3d3459513d03fa30","scripts":{"test":"vitest run","build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"gwakko","email":"zvezdnev@gmail.com"},"repository":{"url":"git+https://github.com/Gwakko/shared-websocket.git","type":"git"},"_npmVersion":"11.6.2","description":"Share ONE WebSocket connection across browser tabs — leader election, BroadcastChannel sync, optional Web Worker","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.32","tsup":"^8.5.1","react":"^19.2.5","vitest":"^4.1.4","typescript":"^6.0.2","@types/react":"^19.2.14"},"peerDependencies":{"vue":">=3.4.0","react":">=19.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/shared-websocket_0.9.1_1776259479164_0.03455153611672013","host":"s3://npm-registry-packages-npm-production"}},"0.10.1":{"name":"@gwakko/shared-websocket","version":"0.10.1","keywords":["websocket","broadcast-channel","shared","tabs","leader-election","real-time","react","vue","web-worker","sync"],"author":{"name":"gwakko"},"license":"MIT","_id":"@gwakko/shared-websocket@0.10.1","maintainers":[{"name":"gwakko","email":"zvezdnev@gmail.com"}],"homepage":"https://github.com/Gwakko/shared-websocket#readme","bugs":{"url":"https://github.com/Gwakko/shared-websocket/issues"},"dist":{"shasum":"7c8decd6f781a9f3d78c0bad4a1fada86e34aef0","tarball":"https://registry.npmjs.org/@gwakko/shared-websocket/-/shared-websocket-0.10.1.tgz","fileCount":52,"integrity":"sha512-CUkfz+hHJOn8Uv6th1EKwoxO+nO5yUb8CadkbE67042ovnYjVcJtVYcezB0euFXdC/6WUxtG9RejVdZInyprlA==","signatures":[{"sig":"MEUCIQCiGkrDpoMuUnSNWTqObfOasIfqjSiDerrjA8qKKZxKAgIgZmHKKtgk7wgcxEuCg24+T9dgY7mws7OhKEk+/Xv9xoo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":431168},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./vue":{"types":"./dist/vue.d.ts","import":"./dist/vue.js","require":"./dist/vue.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"}},"gitHead":"0b17b2f69ab524462020d4ea2991ec70268eb323","scripts":{"test":"vitest run","build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"gwakko","email":"zvezdnev@gmail.com"},"repository":{"url":"git+https://github.com/Gwakko/shared-websocket.git","type":"git"},"_npmVersion":"11.6.2","description":"Share ONE WebSocket connection across browser tabs — leader election, BroadcastChannel sync, optional Web Worker","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.32","tsup":"^8.5.1","react":"^19.2.5","vitest":"^4.1.4","typescript":"^6.0.2","@types/react":"^19.2.14"},"peerDependencies":{"vue":">=3.4.0","react":">=19.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/shared-websocket_0.10.1_1776261086192_0.3608952761047348","host":"s3://npm-registry-packages-npm-production"}},"0.10.2":{"name":"@gwakko/shared-websocket","version":"0.10.2","keywords":["websocket","broadcast-channel","shared","tabs","leader-election","real-time","react","vue","web-worker","sync"],"author":{"name":"gwakko"},"license":"MIT","_id":"@gwakko/shared-websocket@0.10.2","maintainers":[{"name":"gwakko","email":"zvezdnev@gmail.com"}],"homepage":"https://github.com/Gwakko/shared-websocket#readme","bugs":{"url":"https://github.com/Gwakko/shared-websocket/issues"},"dist":{"shasum":"f3ab90e0cfee94e78b86a1b6b235333b60473a5c","tarball":"https://registry.npmjs.org/@gwakko/shared-websocket/-/shared-websocket-0.10.2.tgz","fileCount":52,"integrity":"sha512-m6bHaSF8xXXKYFG0chDt8lSLAJsQ7ONNbHdtkJPaBppeD10G/PRFoOD+h6oiFdKvbMrinEbyWEW39qSb077Xmg==","signatures":[{"sig":"MEUCIQC/XzMxBWofkKTfcOkGzxPxumfVOJl+6ngmBe2MRdJkBwIgMhfAXjbP7nkTMfRizUjZrTvdeRz6zbhBxio7RLtuKXo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":431541},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./vue":{"types":"./dist/vue.d.ts","import":"./dist/vue.js","require":"./dist/vue.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"}},"gitHead":"9fd8261639fba049a6cac94c4ba3d332ef9c5071","scripts":{"test":"vitest run","build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"gwakko","email":"zvezdnev@gmail.com"},"repository":{"url":"git+https://github.com/Gwakko/shared-websocket.git","type":"git"},"_npmVersion":"11.6.2","description":"Share ONE WebSocket connection across browser tabs — leader election, BroadcastChannel sync, optional Web Worker","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.32","tsup":"^8.5.1","react":"^19.2.5","vitest":"^4.1.4","typescript":"^6.0.2","@types/react":"^19.2.14"},"peerDependencies":{"vue":">=3.4.0","react":">=19.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/shared-websocket_0.10.2_1776261604527_0.9939868592122434","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@gwakko/shared-websocket","version":"0.11.0","keywords":["websocket","broadcast-channel","shared","tabs","leader-election","real-time","react","vue","web-worker","sync"],"author":{"name":"gwakko"},"license":"MIT","_id":"@gwakko/shared-websocket@0.11.0","maintainers":[{"name":"gwakko","email":"zvezdnev@gmail.com"}],"homepage":"https://github.com/Gwakko/shared-websocket#readme","bugs":{"url":"https://github.com/Gwakko/shared-websocket/issues"},"dist":{"shasum":"5528c89640a88c896522216829137dc042d8aaac","tarball":"https://registry.npmjs.org/@gwakko/shared-websocket/-/shared-websocket-0.11.0.tgz","fileCount":52,"integrity":"sha512-44C8NLofJuU+Z9QOt+1wy6EdB1ErE09MxQVyrX0nzZTilhzvTR5y9IGp2zHFNjeBXf0qtekp73GxXFrTH6rtTQ==","signatures":[{"sig":"MEQCIAUdV+XhE89olpDWwcLf8TbZB1/u3DcPeScM7OG/uwFbAiArVZYeOsFKbQ8i1Y1/OrItLbnWOleMPGZnjQBotxDjHw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":479087},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./vue":{"types":"./dist/vue.d.ts","import":"./dist/vue.js","require":"./dist/vue.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"}},"gitHead":"26d84e4c7680548255cbabb52bbde2fe1713f50e","scripts":{"test":"vitest run","build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"gwakko","email":"zvezdnev@gmail.com"},"repository":{"url":"git+https://github.com/Gwakko/shared-websocket.git","type":"git"},"_npmVersion":"11.6.2","description":"Share ONE WebSocket connection across browser tabs — leader election, BroadcastChannel sync, optional Web Worker","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.32","tsup":"^8.5.1","react":"^19.2.5","vitest":"^4.1.4","typescript":"^6.0.2","@types/react":"^19.2.14"},"peerDependencies":{"vue":">=3.4.0","react":">=19.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/shared-websocket_0.11.0_1776523125656_0.34540639613394775","host":"s3://npm-registry-packages-npm-production"}},"0.11.1":{"name":"@gwakko/shared-websocket","version":"0.11.1","keywords":["websocket","broadcast-channel","shared","tabs","leader-election","real-time","react","vue","web-worker","sync"],"author":{"name":"gwakko"},"license":"MIT","_id":"@gwakko/shared-websocket@0.11.1","maintainers":[{"name":"gwakko","email":"zvezdnev@gmail.com"}],"homepage":"https://github.com/Gwakko/shared-websocket#readme","bugs":{"url":"https://github.com/Gwakko/shared-websocket/issues"},"dist":{"shasum":"64714ebce326cb8d838e040397e111dbda7aa04c","tarball":"https://registry.npmjs.org/@gwakko/shared-websocket/-/shared-websocket-0.11.1.tgz","fileCount":52,"integrity":"sha512-3FXH+9D6oejPZ5ZbGuAX7InESU95DVIgKICAFgXi606TwfaMbkcawR8blq3qTWIMKL+xh2iGnXOatQ1dbi13+g==","signatures":[{"sig":"MEUCIHyeWej+VfXJK6eB17KrSHtBaQBe0GutPaEzjOQgyKVMAiEAh448nfMhsdhj2cl6s1/oi42yzdCZ1Xil6qX1ef7rHYE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":479365},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./vue":{"types":"./dist/vue.d.ts","import":"./dist/vue.js","require":"./dist/vue.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"}},"gitHead":"a11029fa654ab3afe9e8958d6627118d7896e157","scripts":{"test":"vitest run","build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"gwakko","email":"zvezdnev@gmail.com"},"repository":{"url":"git+https://github.com/Gwakko/shared-websocket.git","type":"git"},"_npmVersion":"11.6.2","description":"Share ONE WebSocket connection across browser tabs — leader election, BroadcastChannel sync, optional Web Worker","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.32","tsup":"^8.5.1","react":"^19.2.5","vitest":"^4.1.4","typescript":"^6.0.2","@types/react":"^19.2.14"},"peerDependencies":{"vue":">=3.4.0","react":">=19.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/shared-websocket_0.11.1_1776527041352_0.05477713485172653","host":"s3://npm-registry-packages-npm-production"}},"0.11.2":{"name":"@gwakko/shared-websocket","version":"0.11.2","keywords":["websocket","broadcast-channel","shared","tabs","leader-election","real-time","react","vue","web-worker","sync"],"author":{"name":"gwakko"},"license":"MIT","_id":"@gwakko/shared-websocket@0.11.2","maintainers":[{"name":"gwakko","email":"zvezdnev@gmail.com"}],"homepage":"https://github.com/Gwakko/shared-websocket#readme","bugs":{"url":"https://github.com/Gwakko/shared-websocket/issues"},"dist":{"shasum":"90627ee46139f01af6ef7ac04ace3d1cb7413df9","tarball":"https://registry.npmjs.org/@gwakko/shared-websocket/-/shared-websocket-0.11.2.tgz","fileCount":52,"integrity":"sha512-m/2PpcZh4K4wTJS2o9o/3iEiuPn3JbLQqY+W9dIbUrpTKx9pe7XGHwffpj+/8M5FdDmMbQld6bYGNV8tXsWClA==","signatures":[{"sig":"MEUCIAycbhVg4lW5GyZI1gLxQrQ/Irm3D7bTRbsh6hT6GXZoAiEA1YJPb6F82TKmHyJWs3hJyXq64KPVimBAca5Jxk8zOuI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":479365},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./vue":{"types":"./dist/vue.d.ts","import":"./dist/vue.js","require":"./dist/vue.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"}},"gitHead":"364abb4be1bb86d1c7c9d613197d46e9808c2446","scripts":{"test":"vitest run","build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"gwakko","email":"zvezdnev@gmail.com"},"repository":{"url":"git+https://github.com/Gwakko/shared-websocket.git","type":"git"},"_npmVersion":"11.6.2","description":"Share ONE WebSocket connection across browser tabs — leader election, BroadcastChannel sync, optional Web Worker","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.32","tsup":"^8.5.1","react":"^19.2.5","vitest":"^4.1.4","typescript":"^6.0.2","@types/react":"^19.2.14"},"peerDependencies":{"vue":">=3.4.0","react":">=19.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/shared-websocket_0.11.2_1776527166745_0.7477996747409443","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@gwakko/shared-websocket","version":"0.12.0","keywords":["websocket","broadcast-channel","shared","tabs","tab-sync","cross-tab","leader-election","real-time","react","vue","web-worker","sync"],"author":{"name":"gwakko"},"license":"MIT","_id":"@gwakko/shared-websocket@0.12.0","maintainers":[{"name":"gwakko","email":"zvezdnev@gmail.com"}],"homepage":"https://github.com/Gwakko/shared-websocket#readme","bugs":{"url":"https://github.com/Gwakko/shared-websocket/issues"},"dist":{"shasum":"554ce4c27d4593c870b40bbd468e7c5c8d3e987d","tarball":"https://registry.npmjs.org/@gwakko/shared-websocket/-/shared-websocket-0.12.0.tgz","fileCount":80,"integrity":"sha512-aNNk9J45euDkf0nrznytHrtxrrukR3sOUQVj8sMw/VVYyZORfYgoMUhcReQnBSkfv8SavI9stG+mOvspGwL+Tw==","signatures":[{"sig":"MEUCIA8UEAKZEbqM8/vlU3jyWrsiDmIWisOTFLJghmTYP4qSAiEA2kNB7GzfkIHbx4tfeNbXE53IrO6DGfaBJoC+SoV/aAk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":548032},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./vue":{"types":"./dist/vue.d.ts","import":"./dist/vue.js","require":"./dist/vue.cjs"},"./sync":{"types":"./dist/sync.d.ts","import":"./dist/sync.js","require":"./dist/sync.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./sync/vue":{"types":"./dist/sync-vue.d.ts","import":"./dist/sync-vue.js","require":"./dist/sync-vue.cjs"},"./sync/react":{"types":"./dist/sync-react.d.ts","import":"./dist/sync-react.js","require":"./dist/sync-react.cjs"}},"gitHead":"9790777e4d317b86ca18fc1f3d3c0edd2e80cf68","scripts":{"test":"vitest run","build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"gwakko","email":"zvezdnev@gmail.com"},"repository":{"url":"git+https://github.com/Gwakko/shared-websocket.git","type":"git"},"_npmVersion":"11.6.2","description":"Share ONE WebSocket connection across browser tabs — leader election, BroadcastChannel sync, optional Web Worker","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.32","tsup":"^8.5.1","react":"^19.2.5","vitest":"^4.1.4","typescript":"^6.0.2","@types/react":"^19.2.14"},"peerDependencies":{"vue":">=3.4.0","react":">=19.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/shared-websocket_0.12.0_1776851403072_0.5293706446388957","host":"s3://npm-registry-packages-npm-production"}},"0.12.1":{"name":"@gwakko/shared-websocket","version":"0.12.1","keywords":["websocket","broadcast-channel","shared","tabs","tab-sync","cross-tab","leader-election","real-time","react","vue","web-worker","sync"],"author":{"name":"gwakko"},"license":"MIT","_id":"@gwakko/shared-websocket@0.12.1","maintainers":[{"name":"gwakko","email":"zvezdnev@gmail.com"}],"homepage":"https://github.com/Gwakko/shared-websocket#readme","bugs":{"url":"https://github.com/Gwakko/shared-websocket/issues"},"dist":{"shasum":"3bd3e6f8f87e3ffa1e9d9100196d3fc198c05ce9","tarball":"https://registry.npmjs.org/@gwakko/shared-websocket/-/shared-websocket-0.12.1.tgz","fileCount":80,"integrity":"sha512-AkuQjaBumVJ+TznzcuNDAY8i3jQUP8ssjQS1SNuaf+bgGYNNKSjSE/rFWe7Z9G80Jpk3RI6U85yUBRk2tZxlmA==","signatures":[{"sig":"MEQCIQDJ8Er0iQjrWzv3fuMIU7y/ys8vsT1MGlMeT76ydHBsiQIfUoYYvxhxQgAe07VSJAN9pNxv4MgLfOSit7X/NBy/eA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":548068},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./vue":{"types":"./dist/adapters/vue.d.ts","import":"./dist/vue.js","require":"./dist/vue.cjs"},"./sync":{"types":"./dist/sync.d.ts","import":"./dist/sync.js","require":"./dist/sync.cjs"},"./react":{"types":"./dist/adapters/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./sync/vue":{"types":"./dist/adapters/sync-vue.d.ts","import":"./dist/sync-vue.js","require":"./dist/sync-vue.cjs"},"./sync/react":{"types":"./dist/adapters/sync-react.d.ts","import":"./dist/sync-react.js","require":"./dist/sync-react.cjs"}},"gitHead":"72935270d2b55b6e7f8e4e75eac5c91577b85d8b","scripts":{"test":"vitest run","build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"gwakko","email":"zvezdnev@gmail.com"},"repository":{"url":"git+https://github.com/Gwakko/shared-websocket.git","type":"git"},"_npmVersion":"11.6.2","description":"Share ONE WebSocket connection across browser tabs — leader election, BroadcastChannel sync, optional Web Worker","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.32","tsup":"^8.5.1","react":"^19.2.5","vitest":"^4.1.4","typescript":"^6.0.2","@types/react":"^19.2.14"},"peerDependencies":{"vue":">=3.4.0","react":">=19.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/shared-websocket_0.12.1_1777924935956_0.9406408665027277","host":"s3://npm-registry-packages-npm-production"}},"0.12.2":{"name":"@gwakko/shared-websocket","version":"0.12.2","keywords":["websocket","broadcast-channel","shared","tabs","tab-sync","cross-tab","leader-election","real-time","react","vue","web-worker","sync"],"author":{"name":"gwakko"},"license":"MIT","_id":"@gwakko/shared-websocket@0.12.2","maintainers":[{"name":"gwakko","email":"zvezdnev@gmail.com"}],"homepage":"https://github.com/Gwakko/shared-websocket#readme","bugs":{"url":"https://github.com/Gwakko/shared-websocket/issues"},"dist":{"shasum":"5474e0dbfc799c67af46da34f7b01f85a5783716","tarball":"https://registry.npmjs.org/@gwakko/shared-websocket/-/shared-websocket-0.12.2.tgz","fileCount":80,"integrity":"sha512-2SbTgIGG/m6+7KGTgIyTLrDh7PIQaGbFO2+qf2Vcjiywa42rX5C4L7oKo/OY2Gna0l3frff8bO71Tj1j851Tkw==","signatures":[{"sig":"MEUCIFJTe4XngxmvZEfLMKPZqDGhjXhhAQ6HVJ0AiSOvvq9IAiEAvLLiapx3YwpfqvlEUeJ3fuGB1N4oy3krJFzVIL9A4Vw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":550923},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./vue":{"types":"./dist/adapters/vue.d.ts","import":"./dist/vue.js","require":"./dist/vue.cjs"},"./sync":{"types":"./dist/sync.d.ts","import":"./dist/sync.js","require":"./dist/sync.cjs"},"./react":{"types":"./dist/adapters/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./sync/vue":{"types":"./dist/adapters/sync-vue.d.ts","import":"./dist/sync-vue.js","require":"./dist/sync-vue.cjs"},"./sync/react":{"types":"./dist/adapters/sync-react.d.ts","import":"./dist/sync-react.js","require":"./dist/sync-react.cjs"}},"gitHead":"fa278be12b6a51b7954460c4d272fa235629b6ff","scripts":{"test":"vitest run","build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"gwakko","email":"zvezdnev@gmail.com"},"repository":{"url":"git+https://github.com/Gwakko/shared-websocket.git","type":"git"},"_npmVersion":"11.6.2","description":"Share ONE WebSocket connection across browser tabs — leader election, BroadcastChannel sync, optional Web Worker","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.32","tsup":"^8.5.1","react":"^19.2.5","vitest":"^4.1.4","typescript":"^6.0.2","@types/react":"^19.2.14"},"peerDependencies":{"vue":">=3.4.0","react":">=19.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/shared-websocket_0.12.2_1778038251759_0.4374310491117259","host":"s3://npm-registry-packages-npm-production"}},"0.12.3":{"name":"@gwakko/shared-websocket","version":"0.12.3","keywords":["websocket","broadcast-channel","shared","tabs","tab-sync","cross-tab","leader-election","real-time","react","vue","web-worker","sync"],"author":{"name":"gwakko"},"license":"MIT","_id":"@gwakko/shared-websocket@0.12.3","maintainers":[{"name":"gwakko","email":"zvezdnev@gmail.com"}],"homepage":"https://github.com/Gwakko/shared-websocket#readme","bugs":{"url":"https://github.com/Gwakko/shared-websocket/issues"},"dist":{"shasum":"174672c819bf90f99aa60981b903f6a19056b343","tarball":"https://registry.npmjs.org/@gwakko/shared-websocket/-/shared-websocket-0.12.3.tgz","fileCount":80,"integrity":"sha512-yJ0AclhObyvhpf1TnWYgyEDAJ3YdA7lr0ZS46RDqc85rn6z826ylgf2BW6zqe+SCwUfkYolmy8fqWuTv0sxCNQ==","signatures":[{"sig":"MEUCIQD/Cm7LPBrldiqxHawAAlAcZ7EluGC4KBcTqMPob1v4swIgOzxqHxnO2LCMb9qbEv9FCySuWZV6TwNVqrX8XUWo7a4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":564587},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./vue":{"types":"./dist/adapters/vue.d.ts","import":"./dist/vue.js","require":"./dist/vue.cjs"},"./sync":{"types":"./dist/sync.d.ts","import":"./dist/sync.js","require":"./dist/sync.cjs"},"./react":{"types":"./dist/adapters/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./sync/vue":{"types":"./dist/adapters/sync-vue.d.ts","import":"./dist/sync-vue.js","require":"./dist/sync-vue.cjs"},"./sync/react":{"types":"./dist/adapters/sync-react.d.ts","import":"./dist/sync-react.js","require":"./dist/sync-react.cjs"}},"gitHead":"0d5785af2c2d5090dc56670614fafcfaaa8a95c0","scripts":{"test":"vitest run","build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"gwakko","email":"zvezdnev@gmail.com"},"repository":{"url":"git+https://github.com/Gwakko/shared-websocket.git","type":"git"},"_npmVersion":"11.6.2","description":"Share ONE WebSocket connection across browser tabs — leader election, BroadcastChannel sync, optional Web Worker","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.32","tsup":"^8.5.1","react":"^19.2.5","vitest":"^4.1.4","typescript":"^6.0.2","@types/react":"^19.2.14"},"peerDependencies":{"vue":">=3.4.0","react":">=19.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/shared-websocket_0.12.3_1778043581568_0.5641044040451377","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@gwakko/shared-websocket","version":"0.13.0","keywords":["websocket","broadcast-channel","shared","tabs","tab-sync","cross-tab","leader-election","real-time","react","vue","web-worker","sync"],"author":{"name":"gwakko"},"license":"MIT","_id":"@gwakko/shared-websocket@0.13.0","maintainers":[{"name":"gwakko","email":"zvezdnev@gmail.com"}],"homepage":"https://github.com/Gwakko/shared-websocket#readme","bugs":{"url":"https://github.com/Gwakko/shared-websocket/issues"},"dist":{"shasum":"46f0513a9c527ad303a739f8683e6ecfea514c4a","tarball":"https://registry.npmjs.org/@gwakko/shared-websocket/-/shared-websocket-0.13.0.tgz","fileCount":80,"integrity":"sha512-34jwfuMNfD+V3YaNrwPOYYzIOvo56fAdQZ7gBE3PR/biw1GuzdP+8yzSOErqhurr/7HRb/JtLomBfp44wl924Q==","signatures":[{"sig":"MEUCIB6nV5ZOvXCfbKe9VJi36NfZMRooAnc8M7xrEwlAiv17AiEAiCk9H/skafzgekFtEixpZxXvP5pLvw1DH/pEOJsX3eM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":599307},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./vue":{"types":"./dist/adapters/vue.d.ts","import":"./dist/vue.js","require":"./dist/vue.cjs"},"./sync":{"types":"./dist/sync.d.ts","import":"./dist/sync.js","require":"./dist/sync.cjs"},"./react":{"types":"./dist/adapters/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./sync/vue":{"types":"./dist/adapters/sync-vue.d.ts","import":"./dist/sync-vue.js","require":"./dist/sync-vue.cjs"},"./sync/react":{"types":"./dist/adapters/sync-react.d.ts","import":"./dist/sync-react.js","require":"./dist/sync-react.cjs"}},"gitHead":"0d5785af2c2d5090dc56670614fafcfaaa8a95c0","scripts":{"test":"vitest run","build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"gwakko","email":"zvezdnev@gmail.com"},"repository":{"url":"git+https://github.com/Gwakko/shared-websocket.git","type":"git"},"_npmVersion":"11.6.2","description":"Share ONE WebSocket connection across browser tabs — leader election, BroadcastChannel sync, optional Web Worker","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.32","tsup":"^8.5.1","react":"^19.2.5","vitest":"^4.1.4","typescript":"^6.0.2","@types/react":"^19.2.14"},"peerDependencies":{"vue":">=3.4.0","react":">=19.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/shared-websocket_0.13.0_1778362662145_0.8006557782583137","host":"s3://npm-registry-packages-npm-production"}},"0.14.3":{"name":"@gwakko/shared-websocket","version":"0.14.3","keywords":["websocket","broadcast-channel","shared","tabs","tab-sync","cross-tab","leader-election","real-time","react","vue","web-worker","sync"],"author":{"name":"gwakko"},"license":"MIT","_id":"@gwakko/shared-websocket@0.14.3","maintainers":[{"name":"gwakko","email":"zvezdnev@gmail.com"}],"homepage":"https://github.com/Gwakko/shared-websocket#readme","bugs":{"url":"https://github.com/Gwakko/shared-websocket/issues"},"dist":{"shasum":"0d60cebea022cd87037c6f33289693debd98fae3","tarball":"https://registry.npmjs.org/@gwakko/shared-websocket/-/shared-websocket-0.14.3.tgz","fileCount":80,"integrity":"sha512-i4GQ6W+mkd+FtAWuG9RCyDvu6GEjmUcOXdti0WJLWjS2JFKZJoK08wBGbQsewwHm0Ikp/3zUhfvvBGIqEEXWsg==","signatures":[{"sig":"MEQCIESMEKHcyMAtrsHtrO6UJrDUL23nN/opMQob4Fj3+N0fAiA0FGiH29qKZ/nujyrPiGGxTEkCG6bWbVD19GpL8Pzw9w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":734759},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./vue":{"types":"./dist/adapters/vue.d.ts","import":"./dist/vue.js","require":"./dist/vue.cjs"},"./sync":{"types":"./dist/sync.d.ts","import":"./dist/sync.js","require":"./dist/sync.cjs"},"./react":{"types":"./dist/adapters/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./sync/vue":{"types":"./dist/adapters/sync-vue.d.ts","import":"./dist/sync-vue.js","require":"./dist/sync-vue.cjs"},"./sync/react":{"types":"./dist/adapters/sync-react.d.ts","import":"./dist/sync-react.js","require":"./dist/sync-react.cjs"}},"gitHead":"595c9d2490d62bf558e237474d4f3dcc353e7382","scripts":{"test":"vitest run","build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"gwakko","email":"zvezdnev@gmail.com"},"repository":{"url":"git+https://github.com/Gwakko/shared-websocket.git","type":"git"},"_npmVersion":"11.6.2","description":"Share ONE WebSocket connection across browser tabs — leader election, BroadcastChannel sync, optional Web Worker","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.32","tsup":"^8.5.1","react":"^19.2.5","vitest":"^4.1.4","typescript":"^6.0.2","@types/react":"^19.2.14"},"peerDependencies":{"vue":">=3.4.0","react":">=19.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/shared-websocket_0.14.3_1778374718512_0.13329708229511628","host":"s3://npm-registry-packages-npm-production"}},"0.14.5":{"name":"@gwakko/shared-websocket","version":"0.14.5","keywords":["websocket","broadcast-channel","shared","tabs","tab-sync","cross-tab","leader-election","real-time","react","vue","web-worker","sync"],"author":{"name":"gwakko"},"license":"MIT","_id":"@gwakko/shared-websocket@0.14.5","maintainers":[{"name":"gwakko","email":"zvezdnev@gmail.com"}],"homepage":"https://github.com/Gwakko/shared-websocket#readme","bugs":{"url":"https://github.com/Gwakko/shared-websocket/issues"},"dist":{"shasum":"106b626538e5b3679bdcd0af509302f969d45ae5","tarball":"https://registry.npmjs.org/@gwakko/shared-websocket/-/shared-websocket-0.14.5.tgz","fileCount":80,"integrity":"sha512-DFbSFcN1PBP69SxRo738WurvhB+5Xfcc8WolSTv5DesMjLF9floURGEnU68xzRuwanBlQWvejUoOENSN8nUEvA==","signatures":[{"sig":"MEUCIQDnpmceJpylGTaTI2tZK5qfdyhSjwNbBMzeu+tNPHW/jgIgM83IkcRd4aOp9fiMrMQf23m5PXox42KddevfYsKQps4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":742443},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./vue":{"types":"./dist/adapters/vue.d.ts","import":"./dist/vue.js","require":"./dist/vue.cjs"},"./sync":{"types":"./dist/sync.d.ts","import":"./dist/sync.js","require":"./dist/sync.cjs"},"./react":{"types":"./dist/adapters/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./sync/vue":{"types":"./dist/adapters/sync-vue.d.ts","import":"./dist/sync-vue.js","require":"./dist/sync-vue.cjs"},"./sync/react":{"types":"./dist/adapters/sync-react.d.ts","import":"./dist/sync-react.js","require":"./dist/sync-react.cjs"}},"gitHead":"78babd563a115c8781b74814d908bd89e5ccddb2","scripts":{"test":"vitest run","build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"gwakko","email":"zvezdnev@gmail.com"},"repository":{"url":"git+https://github.com/Gwakko/shared-websocket.git","type":"git"},"_npmVersion":"11.6.2","description":"Share ONE WebSocket connection across browser tabs — leader election, BroadcastChannel sync, optional Web Worker","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.32","tsup":"^8.5.1","react":"^19.2.5","vitest":"^4.1.4","typescript":"^6.0.2","@types/react":"^19.2.14"},"peerDependencies":{"vue":">=3.4.0","react":">=19.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/shared-websocket_0.14.5_1778380558465_0.7383207945226775","host":"s3://npm-registry-packages-npm-production"}},"0.14.6":{"name":"@gwakko/shared-websocket","version":"0.14.6","keywords":["websocket","broadcast-channel","shared","tabs","tab-sync","cross-tab","leader-election","real-time","react","vue","web-worker","sync"],"author":{"name":"gwakko"},"license":"MIT","_id":"@gwakko/shared-websocket@0.14.6","maintainers":[{"name":"gwakko","email":"zvezdnev@gmail.com"}],"homepage":"https://github.com/Gwakko/shared-websocket#readme","bugs":{"url":"https://github.com/Gwakko/shared-websocket/issues"},"dist":{"shasum":"cc9ef1211b165e0dc63543182864bacc3b4ed26d","tarball":"https://registry.npmjs.org/@gwakko/shared-websocket/-/shared-websocket-0.14.6.tgz","fileCount":80,"integrity":"sha512-BwE0zZjVITNasyTyknkzlYTL1TsCz03UEc0cPlxer6cmM3t3Kkc38HLZ5LAPPGYqtNgAu2fKkZxF6C4lYBlS0g==","signatures":[{"sig":"MEUCIQCv1K4IOetOjVF0bvU3ztKJDIKpa64AbcBFQXAWiMEgFQIgdoRnpDE5mhARBZMj06HUPE3fAw3tshxQuPGP4Y7ZUao=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":743484},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./vue":{"types":"./dist/adapters/vue.d.ts","import":"./dist/vue.js","require":"./dist/vue.cjs"},"./sync":{"types":"./dist/sync.d.ts","import":"./dist/sync.js","require":"./dist/sync.cjs"},"./react":{"types":"./dist/adapters/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./sync/vue":{"types":"./dist/adapters/sync-vue.d.ts","import":"./dist/sync-vue.js","require":"./dist/sync-vue.cjs"},"./sync/react":{"types":"./dist/adapters/sync-react.d.ts","import":"./dist/sync-react.js","require":"./dist/sync-react.cjs"}},"gitHead":"78babd563a115c8781b74814d908bd89e5ccddb2","scripts":{"test":"vitest run","build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"gwakko","email":"zvezdnev@gmail.com"},"repository":{"url":"git+https://github.com/Gwakko/shared-websocket.git","type":"git"},"_npmVersion":"11.6.2","description":"Share ONE WebSocket connection across browser tabs — leader election, BroadcastChannel sync, optional Web Worker","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.32","tsup":"^8.5.1","react":"^19.2.5","vitest":"^4.1.4","typescript":"^6.0.2","@types/react":"^19.2.14"},"peerDependencies":{"vue":">=3.4.0","react":">=19.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/shared-websocket_0.14.6_1779483573677_0.30870399258816716","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"@gwakko/shared-websocket","version":"0.15.0","keywords":["websocket","broadcast-channel","shared","tabs","tab-sync","cross-tab","leader-election","real-time","react","vue","web-worker","sync"],"author":{"name":"gwakko"},"license":"MIT","_id":"@gwakko/shared-websocket@0.15.0","maintainers":[{"name":"gwakko","email":"zvezdnev@gmail.com"}],"homepage":"https://github.com/Gwakko/shared-websocket#readme","bugs":{"url":"https://github.com/Gwakko/shared-websocket/issues"},"dist":{"shasum":"797dd46f4a3ccdbc9e63fc2c6bebbca7863e3f7a","tarball":"https://registry.npmjs.org/@gwakko/shared-websocket/-/shared-websocket-0.15.0.tgz","fileCount":80,"integrity":"sha512-gb0+HOQLaHgFqn7yLxAAN7+2FqBimuVXuXxzR0Zsg6STymTQmW5JocBH8NkbXnv8i+W/5Ls+7bRydSS0XO3BGA==","signatures":[{"sig":"MEUCIBX+DHvqG4wlDeSwFTpG/5QXOBAYfi8PwE/43rGlnbhmAiEAwGnHvE7e9eirg/LAplw0SeUaVP+8dB3ckmzKJdcbvfM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":780512},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./vue":{"types":"./dist/adapters/vue.d.ts","import":"./dist/vue.js","require":"./dist/vue.cjs"},"./sync":{"types":"./dist/sync.d.ts","import":"./dist/sync.js","require":"./dist/sync.cjs"},"./react":{"types":"./dist/adapters/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./sync/vue":{"types":"./dist/adapters/sync-vue.d.ts","import":"./dist/sync-vue.js","require":"./dist/sync-vue.cjs"},"./sync/react":{"types":"./dist/adapters/sync-react.d.ts","import":"./dist/sync-react.js","require":"./dist/sync-react.cjs"}},"gitHead":"ef6a14d80bff5662fd6259aba1805a3593e760dc","scripts":{"test":"vitest run","build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"gwakko","email":"zvezdnev@gmail.com"},"repository":{"url":"git+https://github.com/Gwakko/shared-websocket.git","type":"git"},"_npmVersion":"11.6.2","description":"Share ONE WebSocket connection across browser tabs — leader election, BroadcastChannel sync, optional Web Worker","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.32","tsup":"^8.5.1","react":"^19.2.5","vitest":"^4.1.4","typescript":"^6.0.2","@types/react":"^19.2.14"},"peerDependencies":{"vue":">=3.4.0","react":">=19.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/shared-websocket_0.15.0_1780710868847_0.21674739909672613","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"@gwakko/shared-websocket","version":"0.16.0","keywords":["websocket","broadcast-channel","shared","tabs","tab-sync","cross-tab","leader-election","real-time","react","vue","web-worker","sync"],"author":{"name":"gwakko"},"license":"MIT","_id":"@gwakko/shared-websocket@0.16.0","maintainers":[{"name":"gwakko","email":"zvezdnev@gmail.com"}],"homepage":"https://github.com/Gwakko/shared-websocket#readme","bugs":{"url":"https://github.com/Gwakko/shared-websocket/issues"},"dist":{"shasum":"da55e148e27ba24c9eeb21407d3440990536b789","tarball":"https://registry.npmjs.org/@gwakko/shared-websocket/-/shared-websocket-0.16.0.tgz","fileCount":95,"integrity":"sha512-cHFMPHgGVG6lT9bCKyWL9MZCQjbCToG+IFewTG8tnwUvllBQx/j5l8iHpKCr585OKwD5wotrRN6LFOzOnSsosg==","signatures":[{"sig":"MEUCIBk6laqhJ+C5tjREJC/3AIc7Ad9ylk2RY4mdn7N8f22pAiEAqwZABiHyMkbs6LeGsJ5R4FWZWuzL5RRMPq8qXRWDi1w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":950409},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./vue":{"types":"./dist/adapters/vue.d.ts","import":"./dist/vue.js","require":"./dist/vue.cjs"},"./sync":{"types":"./dist/sync.d.ts","import":"./dist/sync.js","require":"./dist/sync.cjs"},"./react":{"types":"./dist/adapters/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./sync/vue":{"types":"./dist/adapters/sync-vue.d.ts","import":"./dist/sync-vue.js","require":"./dist/sync-vue.cjs"},"./sync/react":{"types":"./dist/adapters/sync-react.d.ts","import":"./dist/sync-react.js","require":"./dist/sync-react.cjs"}},"gitHead":"a6d5b9dec14c73a6a8f8c241334705acf24f9338","scripts":{"test":"vitest run","build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"gwakko","email":"zvezdnev@gmail.com"},"repository":{"url":"git+https://github.com/Gwakko/shared-websocket.git","type":"git"},"_npmVersion":"11.6.2","description":"Share ONE WebSocket connection across browser tabs — leader election, BroadcastChannel sync, optional Web Worker","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.32","tsup":"^8.5.1","react":"^19.2.5","vitest":"^4.1.4","typescript":"^6.0.2","@types/react":"^19.2.14"},"peerDependencies":{"vue":">=3.4.0","react":">=19.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/shared-websocket_0.16.0_1780716573479_0.2841161521352995","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"@gwakko/shared-websocket","version":"0.17.0","keywords":["websocket","broadcast-channel","shared","tabs","tab-sync","cross-tab","leader-election","real-time","react","vue","web-worker","sync"],"author":{"name":"gwakko"},"license":"MIT","_id":"@gwakko/shared-websocket@0.17.0","maintainers":[{"name":"gwakko","email":"zvezdnev@gmail.com"}],"homepage":"https://github.com/Gwakko/shared-websocket#readme","bugs":{"url":"https://github.com/Gwakko/shared-websocket/issues"},"dist":{"shasum":"91eee48b5129624c5bffbd61a55972e56be266eb","tarball":"https://registry.npmjs.org/@gwakko/shared-websocket/-/shared-websocket-0.17.0.tgz","fileCount":95,"integrity":"sha512-F0D1PRWo02AZItTt9sQPTo8WwQP/dPSM2aE5d4LyldFa+K97HFniKPNuL2arvWjrbBvZdnarTooC1jksrg5QSA==","signatures":[{"sig":"MEQCIDCt7dmoXLUiXpaye1I7Lmq9sgPUVGPBfzFI55ZLN3hmAiAKlj4KXNmnXmJnKQTYdf0jSiZA259DqFWna4gfEGVrng==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":985340},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./vue":{"types":"./dist/adapters/vue.d.ts","import":"./dist/vue.js","require":"./dist/vue.cjs"},"./sync":{"types":"./dist/sync.d.ts","import":"./dist/sync.js","require":"./dist/sync.cjs"},"./react":{"types":"./dist/adapters/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./sync/vue":{"types":"./dist/adapters/sync-vue.d.ts","import":"./dist/sync-vue.js","require":"./dist/sync-vue.cjs"},"./sync/react":{"types":"./dist/adapters/sync-react.d.ts","import":"./dist/sync-react.js","require":"./dist/sync-react.cjs"}},"gitHead":"69276473de4c2c083971295c6e805dcf657067f1","scripts":{"test":"vitest run","build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"gwakko","email":"zvezdnev@gmail.com"},"repository":{"url":"git+https://github.com/Gwakko/shared-websocket.git","type":"git"},"_npmVersion":"11.6.2","description":"Share ONE WebSocket connection across browser tabs — leader election, BroadcastChannel sync, optional Web Worker","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.32","tsup":"^8.5.1","react":"^19.2.5","vitest":"^4.1.4","typescript":"^6.0.2","@types/react":"^19.2.14"},"peerDependencies":{"vue":">=3.4.0","react":">=19.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/shared-websocket_0.17.0_1780742948230_0.459390063555843","host":"s3://npm-registry-packages-npm-production"}},"0.17.3":{"name":"@gwakko/shared-websocket","version":"0.17.3","description":"Share ONE WebSocket connection across browser tabs — leader election, BroadcastChannel sync, optional Web Worker","type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./react":{"types":"./dist/adapters/react/index.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./vue":{"types":"./dist/adapters/vue/index.d.ts","import":"./dist/vue.js","require":"./dist/vue.cjs"},"./sync":{"types":"./dist/sync.d.ts","import":"./dist/sync.js","require":"./dist/sync.cjs"},"./sync/react":{"types":"./dist/adapters/react/sync.d.ts","import":"./dist/sync-react.js","require":"./dist/sync-react.cjs"},"./sync/vue":{"types":"./dist/adapters/vue/sync.d.ts","import":"./dist/sync-vue.js","require":"./dist/sync-vue.cjs"}},"scripts":{"build":"tsup && tsc -p tsconfig.build.json","test":"vitest run","test:watch":"vitest","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"keywords":["websocket","broadcast-channel","shared","tabs","tab-sync","cross-tab","leader-election","real-time","react","vue","web-worker","sync"],"author":{"name":"gwakko"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/Gwakko/shared-websocket.git"},"homepage":"https://github.com/Gwakko/shared-websocket#readme","peerDependencies":{"react":">=19.0.0","vue":">=3.4.0"},"peerDependenciesMeta":{"react":{"optional":true},"vue":{"optional":true}},"devDependencies":{"@types/react":"^19.2.14","react":"^19.2.5","tsup":"^8.5.1","typescript":"^6.0.2","vitest":"^4.1.4","vue":"^3.5.32"},"gitHead":"3bed631922b59099e1fe00c10797c957e6e50378","_id":"@gwakko/shared-websocket@0.17.3","bugs":{"url":"https://github.com/Gwakko/shared-websocket/issues"},"_nodeVersion":"24.13.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-khY6JJvSlRnJHxr60QwfKlntJOrcp4r/EMF+eJrNQeBbHKowSU3ObErHfg9N5GsdcnGrw09KG0+Epk4KDXYagQ==","shasum":"f4833fbdd62d5eac9bd3e10051f3abe0590d6b57","tarball":"https://registry.npmjs.org/@gwakko/shared-websocket/-/shared-websocket-0.17.3.tgz","fileCount":119,"unpackedSize":965725,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDgSYVVyszNKGk+oD7OBl4dwo5n5WV0Wn3Och+DQTNo8QIhAM+oStlB8Qx075sZ5w1XJIgdUFcx0RjX5W68mHkLaYax"}]},"_npmUser":{"name":"gwakko","email":"zvezdnev@gmail.com"},"directories":{},"maintainers":[{"name":"gwakko","email":"zvezdnev@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/shared-websocket_0.17.3_1780753617287_0.8222982128552081"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-14T11:33:11.423Z","modified":"2026-06-06T13:46:57.875Z","0.1.0":"2026-04-14T11:33:11.680Z","0.1.1":"2026-04-14T11:39:45.542Z","0.2.0":"2026-04-14T11:57:58.541Z","0.2.1":"2026-04-14T12:06:52.651Z","0.3.0":"2026-04-14T12:43:10.784Z","0.6.1":"2026-04-15T09:32:11.925Z","0.6.2":"2026-04-15T09:44:57.730Z","0.7.1":"2026-04-15T11:41:58.589Z","0.8.0":"2026-04-15T11:49:49.269Z","0.8.1":"2026-04-15T12:24:07.933Z","0.8.2":"2026-04-15T12:53:43.217Z","0.9.1":"2026-04-15T13:24:39.317Z","0.10.1":"2026-04-15T13:51:26.341Z","0.10.2":"2026-04-15T14:00:04.704Z","0.11.0":"2026-04-18T14:38:45.877Z","0.11.1":"2026-04-18T15:44:01.522Z","0.11.2":"2026-04-18T15:46:06.890Z","0.12.0":"2026-04-22T09:50:03.217Z","0.12.1":"2026-05-04T20:02:16.125Z","0.12.2":"2026-05-06T03:30:51.954Z","0.12.3":"2026-05-06T04:59:41.705Z","0.13.0":"2026-05-09T21:37:42.342Z","0.14.3":"2026-05-10T00:58:38.710Z","0.14.5":"2026-05-10T02:35:58.702Z","0.14.6":"2026-05-22T20:59:33.870Z","0.15.0":"2026-06-06T01:54:29.070Z","0.16.0":"2026-06-06T03:29:33.673Z","0.17.0":"2026-06-06T10:49:08.400Z","0.17.3":"2026-06-06T13:46:57.423Z"},"bugs":{"url":"https://github.com/Gwakko/shared-websocket/issues"},"author":{"name":"gwakko"},"license":"MIT","homepage":"https://github.com/Gwakko/shared-websocket#readme","keywords":["websocket","broadcast-channel","shared","tabs","tab-sync","cross-tab","leader-election","real-time","react","vue","web-worker","sync"],"repository":{"type":"git","url":"git+https://github.com/Gwakko/shared-websocket.git"},"description":"Share ONE WebSocket connection across browser tabs — leader election, BroadcastChannel sync, optional Web Worker","maintainers":[{"name":"gwakko","email":"zvezdnev@gmail.com"}],"readme":"# Shared WebSocket\n\nShare **one** WebSocket connection across all browser tabs. Leader election via BroadcastChannel. React 19 hooks and Vue 3 composables included. Zero dependencies.\n\n[![npm](https://img.shields.io/npm/v/@gwakko/shared-websocket)](https://www.npmjs.com/package/@gwakko/shared-websocket)\n\n## Table of Contents\n\n- [How It Works](#how-it-works)\n- [Installation](#installation)\n- [Quick Start](#quick-start)\n  - [Vanilla TypeScript](#vanilla-typescript)\n  - [React 19](#react-19)\n  - [Vue 3](#vue-3)\n- [Features](#features)\n- [Processing Pipeline](#processing-pipeline)\n- [Options](#options)\n- [Documentation](#documentation)\n- [Server Compatibility](#server-compatibility)\n- [Browser Support](#browser-support)\n\n## How It Works\n\n```\nTab 1 (Leader)        Tab 2 (Follower)      Tab 3 (Follower)\n┌──────────┐          ┌──────────┐          ┌──────────┐\n│ WebSocket│          │          │          │          │\n│    ↕     │          │          │          │          │\n│  Server  │          │          │          │          │\n└────┬─────┘          └─────┬────┘          └─────┬────┘\n     └────── BroadcastChannel ──────────────────────┘\n```\n\nOne tab becomes the **leader** (holds the WebSocket). Others are **followers** (receive data via BroadcastChannel). Leader closes → automatic election → new leader connects. Zero downtime.\n\n## Installation\n\n```bash\nnpm install @gwakko/shared-websocket     # npm\nnpm install github:Gwakko/shared-websocket  # from GitHub\n```\n\n## Quick Start\n\n### Vanilla TypeScript\n\n```typescript\nimport { withSocket } from '@gwakko/shared-websocket';\n\nawait withSocket('wss://api.example.com/ws', {\n  auth: () => localStorage.getItem('token')!,\n  useWorker: true,  // optional: offload to Web Worker\n}, async ({ ws, signal }) => {\n\n  // Listen to events (works in ALL tabs)\n  ws.on('chat.message', (msg) => renderMessage(msg));\n\n  // Send (auto-routed through leader)\n  ws.send('chat.message', { text: 'Hello!' });\n\n  // Stream\n  for await (const tick of ws.stream('trading.tick', signal)) {\n    updateChart(tick);\n  }\n\n  // Sync state across tabs (no server)\n  ws.sync('cart', { items: [1, 2, 3] });\n  ws.onSync('cart', (cart) => updateBadge(cart.items.length));\n\n  // Private channel\n  const chat = ws.channel('chat:room_42');\n  chat.on('message', (msg) => render(msg));\n  chat.send('message', { text: 'Hi room!' });\n\n  // Push notifications\n  ws.push('notification', {\n    render: (n) => toast(n.title),          // sonner/react-hot-toast\n    title: (n) => n.title,                  // + browser Notification\n    target: 'active',                       // active | leader | all\n  });\n\n  // Runtime auth — authenticate/deauthenticate without reconnecting\n  ws.authenticate(token);                   // → sends $auth:login to server\n  const chat = ws.channel('chat:private', { auth: true }); // auto-leaves on deauth\n  ws.deauthenticate();                      // → auto-leaves auth channels/topics\n});\n```\n\n### React 19\n\n```tsx\nimport {\n  SharedWebSocketProvider,\n  useSharedWebSocket,\n  useSharedWebSocketOrThrow,\n  useSocketAuth,\n  useSocketEvent,\n  useSocketStream,\n  useSocketSync,\n  useSocketCallback,\n  useSocketStatus,\n  useSocketLifecycle,\n  useChannel,\n  useTopics,\n  usePush,\n} from '@gwakko/shared-websocket/react';\n\nfunction App() {\n  return (\n    <SharedWebSocketProvider\n      url=\"wss://api.example.com/ws\"\n      options={{ auth: () => getToken(), useWorker: true }}\n    >\n      <Dashboard />\n    </SharedWebSocketProvider>\n  );\n}\n\nfunction Dashboard() {\n  // The provider owns ONE socket per provider, created on mount via an external\n  // store. The feature hooks below attach as soon as it's ready — no null checks\n  // needed in app code.\n  const { isAuthenticated, authenticate, deauthenticate } = useSocketAuth();\n  const order = useSocketEvent<Order>('order.created');\n  const [cart, setCart] = useSocketSync('cart', { items: [] });\n  const { connected, tabRole } = useSocketStatus();\n\n  // Callback variant\n  useSocketEvent<Order>('order.created', (order) => {\n    playSound('new-order');\n  });\n\n  // Lifecycle\n  useSocketLifecycle({\n    onConnect: () => toast.success('Connected'),\n    onActive: () => refreshData(),\n    onAuthChange: (auth) => !auth && navigate('/login'),\n  });\n\n  // Auth-aware channel — auto-leaves on deauth. `null` until joined.\n  const chat = useChannel(`chat:${roomId}`, { auth: true });\n\n  // Topics\n  useTopics(['notifications:orders']);\n\n  // Push\n  usePush('notification', {\n    render: (n) => toast(n.title),\n    target: 'active',\n  });\n\n  return <div>{connected ? 'Online' : 'Offline'} ({tabRole})</div>;\n}\n\n// Raw instance access. useSharedWebSocket() is `SharedWebSocket | null` — null\n// until the provider's instance connects (first render + SSR). Guard it:\nfunction PingButton() {\n  const ws = useSharedWebSocket();\n  return <button disabled={!ws} onClick={() => ws?.send('ping', {})}>Ping</button>;\n}\n\n// useSharedWebSocketOrThrow() returns a non-null instance, but THROWS if the\n// socket isn't ready yet — so only use it in components that render after the\n// socket exists (e.g. gated behind a ready/connected check), or inside effects:\nfunction GatedToolbar() {\n  const ws = useSharedWebSocket();\n  if (!ws) return null;          // mounted children are guaranteed a socket\n  return <ToolbarBody />;\n}\nfunction ToolbarBody() {\n  const ws = useSharedWebSocketOrThrow(); // safe — only rendered once ws exists\n  return <button onClick={() => ws.send('ping', {})}>Ping</button>;\n}\n```\n\n### Vue 3\n\n```typescript\n// main.ts\napp.use(createSharedWebSocketPlugin('wss://api.example.com/ws', {\n  auth: () => getToken(),\n  useWorker: true,\n}));\n```\n\n```vue\n<script setup lang=\"ts\">\nimport {\n  useSharedWebSocket,\n  useSocketAuth,\n  useSocketEvent,\n  useSocketSync,\n  useSocketLifecycle,\n  useChannel,\n  useTopics,\n  usePush,\n} from '@gwakko/shared-websocket/vue';\n\nconst ws = useSharedWebSocket();\nconst { isAuthenticated, authenticate, deauthenticate } = useSocketAuth();\nconst order = useSocketEvent<Order>('order.created');\nconst cart = useSocketSync('cart', { items: [] });\n\nuseSocketLifecycle({\n  onConnect: () => toast.success('Connected'),\n  onActive: () => refreshData(),\n  onAuthChange: (auth) => { if (!auth) router.push('/login'); },\n});\n\n// Auth-aware channel — auto-leaves on deauth\nconst chat = useChannel(`chat:${roomId}`, { auth: true });\nuseTopics(['notifications:orders']);\n\nusePush('notification', {\n  render: (n) => toast(n.title),\n});\n</script>\n```\n\n## Features\n\n| Feature | Description |\n|---------|-------------|\n| **Leader Election** | One tab holds WebSocket, others receive via BroadcastChannel |\n| **Auto Failover** | Leader closes → new election → reconnect in ~5s |\n| **Typed Events** | `SharedWebSocket<EventMap>` — type-safe on/send/stream |\n| **Channels** | `ws.channel('room')` — scoped events, auto join/leave |\n| **Topics** | `ws.subscribe('topic')` — server-side filtered subscriptions |\n| **Tab Sync** | `ws.sync(key, value)` — state across tabs, no server |\n| **Standalone Tab Sync** | `TabSync` — cross-tab state without WebSocket (`/sync` import) |\n| **Push Notifications** | `ws.push()` — render (sonner) + browser Notification API |\n| **Middleware** | `ws.use('incoming'/'outgoing', fn)` — transform, filter, log |\n| **Worker Mode** | `useWorker: true` — WebSocket off main thread |\n| **Custom Serialization** | `serialize`/`deserialize` — JSON, MessagePack, Protobuf |\n| **Per-Event Serializers** | `ws.serializer(event, fn)` — binary for specific events |\n| **Runtime Auth** | `authenticate(token)` / `deauthenticate()` on existing connection |\n| **Lifecycle Hooks** | onConnect, onDisconnect, onReconnecting, onReconnectFailed, onActive, onInactive, onLeaderChange, onAuthChange |\n| **Manual Reconnect** | `ws.reconnect()` resets retry counter — pair with `onReconnectFailed` for a \"Reconnect\" snackbar |\n| **Debug/Logger** | `debug: true` + injectable logger (pino, Sentry) |\n| **Event Protocol** | Configurable field names (Socket.IO, Phoenix, Laravel Echo) |\n| **Auth** | URL param (`auth` callback / `authToken`) + runtime `authenticate()`/`deauthenticate()` |\n| **Zero Dependencies** | Pure browser APIs |\n\n## Processing Pipeline\n\n```\nOutgoing: ws.send(event, data)\n  → per-event serializer         (if registered)\n  → outgoing middleware           (transform/inspect/drop)\n  → global serialize              (JSON/msgpack — configurable)\n  → WebSocket.send()              (or Worker → WebSocket.send)\n\nIncoming: WebSocket.onmessage\n  → global deserialize            (JSON/msgpack — configurable)\n  → incoming middleware            (transform/inspect/drop)\n  → per-event deserializer        (if registered)\n  → emit to handlers              (all tabs via BroadcastChannel)\n```\n\n## Options\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `protocols` | `string[]` | `[]` | WebSocket subprotocols |\n| `reconnect` | `boolean` | `true` | Auto-reconnect |\n| `reconnectMaxDelay` | `number` | `30000` | Max backoff (ms) |\n| `reconnectMaxRetries` | `number` | `Infinity` | Max attempts before giving up |\n| `heartbeatInterval` | `number` | `30000` | Ping interval (ms) |\n| `sendBuffer` | `number` | `100` | Buffered messages during reconnect |\n| `auth` | `() => string` | — | Token callback (each connect) |\n| `authToken` | `string` | — | Static token |\n| `authParam` | `string` | `\"token\"` | URL query param name |\n| `useWorker` | `boolean` | `false` | WebSocket in Web Worker |\n| `workerUrl` | `string \\| URL` | — | Custom worker file |\n| `serialize` | `(data) => string \\| ArrayBuffer` | `JSON.stringify` | Global serializer |\n| `deserialize` | `(raw) => unknown` | `JSON.parse` | Global deserializer |\n| `events` | `Partial<EventProtocol>` | — | Custom event/field names |\n| `debug` | `boolean` | `false` | Enable logging |\n| `logger` | `Logger` | `console` | Custom logger |\n\n## Documentation\n\n| Document | Contents |\n|----------|----------|\n| **[Getting Started](docs/getting-started.md)** | Installation, basic usage, withSocket |\n| **[API Reference](docs/api-reference.md)** | Methods, options, React hooks, Vue composables |\n| **[Features](docs/features.md)** | Typed events, channels, topics, push, sync, lifecycle, Zod |\n| **[Configuration](docs/configuration.md)** | Serialization, middleware, event protocol, debug, Worker |\n| **[Tab Sync](docs/tab-sync.md)** | Standalone cross-tab state — no WebSocket needed |\n| **[Server Guide](docs/server-guide.md)** | Node.js, Go, PHP examples + system events |\n| **[Types](docs/types.md)** | All exported types with import examples |\n\n## Server Compatibility\n\n| Server | Status | Configuration |\n|---|---|---|\n| **Pusher / Soketi / Reverb** | ✅ Default + small overrides | `events: { channelJoin: 'pusher:subscribe', channelLeave: 'pusher:unsubscribe' }` |\n| **Custom 2-key `{ event, data }` server** | ✅ Default | none |\n| **Custom flat-fields server** (`{ type, channel, event, data }`) | ✅ via `frameBuilder` | [sample](docs/configuration.md#flat-fields-server-eg-custom-go-or-rust-ws) |\n| **Phoenix Channels** (Elixir) | ⚠️ Structural sample provided — verify against your phoenix client version | [sample](docs/configuration.md#phoenix-channels) |\n| **ActionCable** (Rails) | ⚠️ Subscribe/event sample; auth typically via session cookie | [sample](docs/configuration.md#actioncable-rails) |\n| **Centrifugo / GraphQL-over-WS / proprietary binary** | ⚠️ Use `frameBuilder` + custom `serialize`/`deserialize` | Hand-rolled — see [Custom Serialization](docs/configuration.md#custom-serialization) |\n\nThe two-key default `{ [eventField]: <event>, [dataField]: <data> }`\ncovers the common case. Anything else — extra top-level fields,\narray-form frames, custom control-frame discriminators — is handled\nby the `frameBuilder` hook (`events.frameBuilder` in\n`SharedWebSocketOptions`). Subscribe-acks are handled by\n`channelAckMatcher` so `await channel.ready` rejects on authz failures\ninstead of silently never receiving events.\n\n## Browser Support\n\n| API | Chrome | Firefox | Safari | Edge |\n|-----|--------|---------|--------|------|\n| BroadcastChannel | 54+ | 38+ | 15.4+ | 79+ |\n| Web Worker | ✅ | ✅ | ✅ | ✅ |\n| AsyncGenerator | 63+ | 57+ | 12+ | 79+ |\n\n**`BroadcastChannel` is required and has no fallback.** The library\nconstructs one synchronously in `new SharedWebSocket(...)`, so an\nunsupported environment throws `ReferenceError: BroadcastChannel is\nnot defined`. Practical implications:\n\n- **iOS Safari** — fully works on 15.4+ (March 2022). Older iOS will\n  throw; gate construction behind a feature check if you ship to those\n  versions.\n- **Some Android webviews / older WKWebView** — same caveat.\n- **Node / SSR** — no `BroadcastChannel`. Construct the socket inside\n  `useEffect` (React) / `onMounted` (Vue), or behind a `typeof window\n  !== 'undefined'` guard. Don't instantiate in module scope on the\n  server.\n- **Tests (jsdom)** — recent jsdom (>= 22) implements\n  `BroadcastChannel`. Older jsdom or `happy-dom` may need a polyfill\n  or a stub.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}