{"_id":"loro-websocket","_rev":"19-3ecfbb394e1c568a90342993a68d08f0","name":"loro-websocket","dist-tags":{"latest":"0.6.2"},"versions":{"0.1.0":{"name":"loro-websocket","version":"0.1.0","keywords":["loro","crdt","websocket","client","server","sync","realtime","fragmentation","keepalive","e2ee"],"author":{"name":"Loro Team"},"license":"MIT","_id":"loro-websocket@0.1.0","maintainers":[{"name":"rem2018","email":"remch183@outlook.com"}],"homepage":"https://github.com/loro-dev/protocol/tree/main/packages/loro-websocket","bugs":{"url":"https://github.com/loro-dev/protocol/issues"},"dist":{"shasum":"1b63797362ba6c0b60bb3350a569b6f2b01989f1","tarball":"https://registry.npmjs.org/loro-websocket/-/loro-websocket-0.1.0.tgz","fileCount":19,"integrity":"sha512-y0rImUH1rwANlE4ZSTcCAh7Z24Pe148+vfZUwf9WbpzCSHHorIptGCXr775a+nCy2dqJQQsXZejpxsAZtbBTwQ==","signatures":[{"sig":"MEUCIC2zoNxWi6uIPJ1QlouqO6FmaLNJYLLFVLxWEjGyKJt7AiEA/EiFK7QuwPkPJKrBK7qT/zX9Dihlh7ZZIPIXeHgsg5s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":232072},"main":"dist/client/index.cjs","type":"module","_from":"file:loro-websocket-0.1.0.tgz","types":"dist/client/index.d.ts","module":"dist/client/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.cjs"}},"private":false,"scripts":{"dev":"tsdown --watch","test":"vitest run","build":"tsdown","clean":"tsdown --clean","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"rem2018","email":"remch183@outlook.com"},"_resolved":"/tmp/483f6fc9e09fecb06f3624a2e9318e31/loro-websocket-0.1.0.tgz","_integrity":"sha512-y0rImUH1rwANlE4ZSTcCAh7Z24Pe148+vfZUwf9WbpzCSHHorIptGCXr775a+nCy2dqJQQsXZejpxsAZtbBTwQ==","repository":{"url":"git+https://github.com/loro-dev/protocol.git","type":"git","directory":"packages/loro-websocket"},"_npmVersion":"10.8.2","description":"WebSocket client and SimpleServer for syncing CRDTs base on loro-protocol","directories":{},"sideEffects":false,"_nodeVersion":"20.19.5","dependencies":{"ws":"^8.18.3","@types/ws":"^8.18.1","loro-adaptors":"0.1.0","loro-protocol":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.5","tsdown":"^0.14.1","vitest":"^3.2.4","get-port":"^7.1.0","typescript":"^5.9.2"},"peerDependencies":{"loro-crdt":"^1.7.1"},"_npmOperationalInternal":{"tmp":"tmp/loro-websocket_0.1.0_1757656465348_0.9447423746419135","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"loro-websocket","version":"0.1.1","keywords":["loro","crdt","websocket","client","server","sync","realtime","fragmentation","keepalive","e2ee"],"author":{"name":"Loro Team"},"license":"MIT","_id":"loro-websocket@0.1.1","maintainers":[{"name":"rem2018","email":"remch183@outlook.com"}],"homepage":"https://github.com/loro-dev/protocol/tree/main/packages/loro-websocket","bugs":{"url":"https://github.com/loro-dev/protocol/issues"},"dist":{"shasum":"c2913a1451aca8ca3bc7a20d1ad8f9d383e6a456","tarball":"https://registry.npmjs.org/loro-websocket/-/loro-websocket-0.1.1.tgz","fileCount":19,"integrity":"sha512-r+bDEnA/lScjuy4qAPo508qqCUTVu9Nv79m/tG9L/JJRovaniKfhXPSQ1feCfjPSq/1sfV57+v5SdhBDEI7rTQ==","signatures":[{"sig":"MEUCIQCMXGZjBpG/Ob54HxKOjsr7O5F6ieLcPA+F8bABiqXD/gIgTYCpxL/HbXy/+69hQQnojXv+y88507BeO8w/q3al9RE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":314855},"main":"dist/client/index.cjs","type":"module","_from":"file:loro-websocket-0.1.1.tgz","types":"dist/client/index.d.ts","module":"dist/client/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.cjs"}},"private":false,"scripts":{"dev":"tsdown --watch","test":"vitest run","build":"tsdown","clean":"tsdown --clean","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"rem2018","email":"remch183@outlook.com"},"_resolved":"/tmp/2096437cce3283a88f25e9630fa5ddbe/loro-websocket-0.1.1.tgz","_integrity":"sha512-r+bDEnA/lScjuy4qAPo508qqCUTVu9Nv79m/tG9L/JJRovaniKfhXPSQ1feCfjPSq/1sfV57+v5SdhBDEI7rTQ==","repository":{"url":"git+https://github.com/loro-dev/protocol.git","type":"git","directory":"packages/loro-websocket"},"_npmVersion":"10.8.2","description":"WebSocket client and SimpleServer for syncing CRDTs base on loro-protocol","directories":{},"sideEffects":false,"_nodeVersion":"20.19.5","dependencies":{"ws":"^8.18.3","@types/ws":"^8.18.1","loro-adaptors":"0.1.0","loro-protocol":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.5","tsdown":"^0.14.1","vitest":"^3.2.4","get-port":"^7.1.0","typescript":"^5.9.2"},"peerDependencies":{"loro-crdt":"^1.7.1"},"_npmOperationalInternal":{"tmp":"tmp/loro-websocket_0.1.1_1758006996696_0.13478077629531904","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"loro-websocket","version":"0.1.2","keywords":["loro","crdt","websocket","client","server","sync","realtime","fragmentation","keepalive","e2ee"],"author":{"name":"Loro Team"},"license":"MIT","_id":"loro-websocket@0.1.2","maintainers":[{"name":"rem2018","email":"remch183@outlook.com"}],"homepage":"https://github.com/loro-dev/protocol/tree/main/packages/loro-websocket","bugs":{"url":"https://github.com/loro-dev/protocol/issues"},"dist":{"shasum":"dab647f55fc7c54dee92aef1b9aa9d766a780bc7","tarball":"https://registry.npmjs.org/loro-websocket/-/loro-websocket-0.1.2.tgz","fileCount":19,"integrity":"sha512-4iZbjGr0Xx6jEgam3awGDUUjOf1dmPWqv96rr/xcWn4JCO9XHk7mhe0AYJD3YsS9PfVPTaGLPXrvaLvlqJBlNw==","signatures":[{"sig":"MEUCIQD6+tppMkMKhbXIsYm1lBKUcox9Eh78E9mdnk+kIUX4sQIgXN7pdYaoSNDXygOxXVUI9XPI0h8hVnB0YYqdNYFe4AY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":325962},"main":"dist/client/index.cjs","type":"module","_from":"file:loro-websocket-0.1.2.tgz","types":"dist/client/index.d.ts","module":"dist/client/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.cjs"}},"private":false,"scripts":{"dev":"tsdown --watch","test":"vitest run","build":"tsdown","clean":"tsdown --clean","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"rem2018","email":"remch183@outlook.com"},"_resolved":"/tmp/425874a19c5193363b0aa43de0c54ed9/loro-websocket-0.1.2.tgz","_integrity":"sha512-4iZbjGr0Xx6jEgam3awGDUUjOf1dmPWqv96rr/xcWn4JCO9XHk7mhe0AYJD3YsS9PfVPTaGLPXrvaLvlqJBlNw==","repository":{"url":"git+https://github.com/loro-dev/protocol.git","type":"git","directory":"packages/loro-websocket"},"_npmVersion":"10.8.2","description":"WebSocket client and SimpleServer for syncing CRDTs base on loro-protocol","directories":{},"sideEffects":false,"_nodeVersion":"20.19.5","dependencies":{"ws":"^8.18.3","@types/ws":"^8.18.1","loro-adaptors":"0.1.0","loro-protocol":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.5","tsdown":"^0.14.1","vitest":"^3.2.4","get-port":"^7.1.0","typescript":"^5.9.2"},"peerDependencies":{"loro-crdt":"^1.7.1"},"_npmOperationalInternal":{"tmp":"tmp/loro-websocket_0.1.2_1758019312798_0.9833130126258314","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"loro-websocket","version":"0.1.3","keywords":["loro","crdt","websocket","client","server","sync","realtime","fragmentation","keepalive","e2ee"],"author":{"name":"Loro Team"},"license":"MIT","_id":"loro-websocket@0.1.3","maintainers":[{"name":"rem2018","email":"remch183@outlook.com"}],"homepage":"https://github.com/loro-dev/protocol/tree/main/packages/loro-websocket","bugs":{"url":"https://github.com/loro-dev/protocol/issues"},"dist":{"shasum":"24ae300316e5195ffbe01b28ccf3437b41a2a796","tarball":"https://registry.npmjs.org/loro-websocket/-/loro-websocket-0.1.3.tgz","fileCount":19,"integrity":"sha512-1l14d9coNfW8geFSHXuUebAGYp+3qxAyUfzmhAqtFqZCTpETTauRmD9C5OPHO5zG/FWfBAEngIsulORGeMKnWQ==","signatures":[{"sig":"MEUCIAE2PqApkjV+Gg3z+CjVGala9XARdx6Zoi7XgXQiBbXjAiEApfFAdI/Jkkgi5hXfwVhh+2TU2JL5gE7Ys8nM/vVHRhU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":322718},"main":"dist/client/index.cjs","type":"module","_from":"file:loro-websocket-0.1.3.tgz","types":"dist/client/index.d.ts","module":"dist/client/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.cjs"}},"private":false,"scripts":{"dev":"tsdown --watch","test":"vitest run","build":"tsdown","clean":"tsdown --clean","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"rem2018","email":"remch183@outlook.com"},"_resolved":"/tmp/14391fed473694873a9285bf18fef9e8/loro-websocket-0.1.3.tgz","_integrity":"sha512-1l14d9coNfW8geFSHXuUebAGYp+3qxAyUfzmhAqtFqZCTpETTauRmD9C5OPHO5zG/FWfBAEngIsulORGeMKnWQ==","repository":{"url":"git+https://github.com/loro-dev/protocol.git","type":"git","directory":"packages/loro-websocket"},"_npmVersion":"10.8.2","description":"WebSocket client and SimpleServer for syncing CRDTs base on loro-protocol","directories":{},"sideEffects":false,"_nodeVersion":"20.19.5","dependencies":{"ws":"^8.18.3","@types/ws":"^8.18.1","loro-adaptors":"0.1.0","loro-protocol":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.5","tsdown":"^0.14.1","vitest":"^3.2.4","get-port":"^7.1.0","typescript":"^5.9.2"},"peerDependencies":{"loro-crdt":"^1.7.1"},"_npmOperationalInternal":{"tmp":"tmp/loro-websocket_0.1.3_1758628009586_0.6269852921658985","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"loro-websocket","version":"0.1.4","keywords":["loro","crdt","websocket","client","server","sync","realtime","fragmentation","keepalive","e2ee"],"author":{"name":"Loro Team"},"license":"MIT","_id":"loro-websocket@0.1.4","maintainers":[{"name":"rem2018","email":"remch183@outlook.com"}],"homepage":"https://github.com/loro-dev/protocol/tree/main/packages/loro-websocket","bugs":{"url":"https://github.com/loro-dev/protocol/issues"},"dist":{"shasum":"2e458d666403058fd25ced7719c3575a98d6a8ae","tarball":"https://registry.npmjs.org/loro-websocket/-/loro-websocket-0.1.4.tgz","fileCount":19,"integrity":"sha512-bpa9ky0C6tAslE3lX7DnPQ6C6oR4GG8DisCjPQYCW8WtzFCKhgdP8M7/p1w9iAkEXFH6qBEe5O2VaxvIUBlmdg==","signatures":[{"sig":"MEQCIDwd57hJYOJ0HC9vfVBk+bzibPnGVDZw6J4y6vrNDmnGAiAyYqym4akE3j7KzaVL9mBq2GKAH1mUBHdhy7eiCKYiig==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":322718},"main":"dist/client/index.cjs","type":"module","_from":"file:loro-websocket-0.1.4.tgz","types":"dist/client/index.d.ts","module":"dist/client/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.cjs"}},"private":false,"scripts":{"dev":"tsdown --watch","test":"vitest run","build":"tsdown","clean":"tsdown --clean","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"rem2018","email":"remch183@outlook.com"},"_resolved":"/tmp/f1a7b9c74b5557c62a78ff511f99b304/loro-websocket-0.1.4.tgz","_integrity":"sha512-bpa9ky0C6tAslE3lX7DnPQ6C6oR4GG8DisCjPQYCW8WtzFCKhgdP8M7/p1w9iAkEXFH6qBEe5O2VaxvIUBlmdg==","repository":{"url":"git+https://github.com/loro-dev/protocol.git","type":"git","directory":"packages/loro-websocket"},"_npmVersion":"10.8.2","description":"WebSocket client and SimpleServer for syncing CRDTs base on loro-protocol","directories":{},"sideEffects":false,"_nodeVersion":"20.19.5","dependencies":{"ws":"^8.18.3","@types/ws":"^8.18.1","loro-adaptors":"0.1.1","loro-protocol":"0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.5","tsdown":"^0.14.1","vitest":"^3.2.4","get-port":"^7.1.0","typescript":"^5.9.2"},"peerDependencies":{"loro-crdt":"^1.7.1"},"_npmOperationalInternal":{"tmp":"tmp/loro-websocket_0.1.4_1761211277859_0.31595027219792327","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"loro-websocket","version":"0.1.5","keywords":["loro","crdt","websocket","client","server","sync","realtime","fragmentation","keepalive","e2ee"],"author":{"name":"Loro Team"},"license":"MIT","_id":"loro-websocket@0.1.5","maintainers":[{"name":"rem2018","email":"remch183@outlook.com"}],"homepage":"https://github.com/loro-dev/protocol/tree/main/packages/loro-websocket","bugs":{"url":"https://github.com/loro-dev/protocol/issues"},"dist":{"shasum":"cb4a456a67b63e27fccb08ccfa7c70dd86061f82","tarball":"https://registry.npmjs.org/loro-websocket/-/loro-websocket-0.1.5.tgz","fileCount":19,"integrity":"sha512-iIi1mZiZthH6g1ene5CqPkz1A83MsGSTG02j0I/RrHWfSWmUYTezD4067T9Nu5DBB9ESZtw6DDMHBmui34LT3A==","signatures":[{"sig":"MEYCIQCEOScmnOnS7V+B1vds+SuYxynLVZl1UxY7Cj93B5kuVAIhAKhSRy7hsmt0v2c7vR/cmjts6KufdCFGk6Aw65bOARSQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":322718},"main":"dist/client/index.cjs","type":"module","_from":"file:loro-websocket-0.1.5.tgz","types":"dist/client/index.d.ts","module":"dist/client/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.cjs"}},"private":false,"scripts":{"dev":"tsdown --watch","test":"vitest run","build":"tsdown","clean":"tsdown --clean","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"rem2018","email":"remch183@outlook.com"},"_resolved":"/tmp/9684f02c106719a323af75f3385e8a6f/loro-websocket-0.1.5.tgz","_integrity":"sha512-iIi1mZiZthH6g1ene5CqPkz1A83MsGSTG02j0I/RrHWfSWmUYTezD4067T9Nu5DBB9ESZtw6DDMHBmui34LT3A==","repository":{"url":"git+https://github.com/loro-dev/protocol.git","type":"git","directory":"packages/loro-websocket"},"_npmVersion":"10.8.2","description":"WebSocket client and SimpleServer for syncing CRDTs base on loro-protocol","directories":{},"sideEffects":false,"_nodeVersion":"20.19.5","dependencies":{"ws":"^8.18.3","@types/ws":"^8.18.1","loro-adaptors":"0.1.2","loro-protocol":"0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.5","tsdown":"^0.14.1","vitest":"^3.2.4","get-port":"^7.1.0","typescript":"^5.9.2"},"peerDependencies":{"loro-crdt":"^1.7.1"},"_npmOperationalInternal":{"tmp":"tmp/loro-websocket_0.1.5_1761212532269_0.3197053483994732","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"loro-websocket","version":"0.1.6","keywords":["loro","crdt","websocket","client","server","sync","realtime","fragmentation","keepalive","e2ee"],"author":{"name":"Loro Team"},"license":"MIT","_id":"loro-websocket@0.1.6","maintainers":[{"name":"rem2018","email":"remch183@outlook.com"}],"homepage":"https://github.com/loro-dev/protocol/tree/main/packages/loro-websocket","bugs":{"url":"https://github.com/loro-dev/protocol/issues"},"dist":{"shasum":"1ef8abe6d38ab262bb30025f04ebc15513bcfc07","tarball":"https://registry.npmjs.org/loro-websocket/-/loro-websocket-0.1.6.tgz","fileCount":19,"integrity":"sha512-0NyGwoS3wPN7fFlCZa+MdoyyOawzHXxt0F65fdr7tQDsOAlNVJHLAkrNUaOPBap6yY+Y6PV7QEI5Y6Otj4kuPA==","signatures":[{"sig":"MEUCIH9dTFz+B4y01uOfekQjy1WJcDuZij/jP6E3SnRVrkzFAiEA/mG4UJ2o651Ata+ClZC6FdBzWiooATH+SosMn9MDT9Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":324730},"main":"dist/client/index.cjs","type":"module","_from":"file:loro-websocket-0.1.6.tgz","types":"dist/client/index.d.ts","module":"dist/client/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.cjs"}},"private":false,"scripts":{"dev":"tsdown --watch","test":"vitest run","build":"tsdown","clean":"tsdown --clean","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"rem2018","email":"remch183@outlook.com"},"_resolved":"/tmp/911f2395c5149e01e4ff65383456aec8/loro-websocket-0.1.6.tgz","_integrity":"sha512-0NyGwoS3wPN7fFlCZa+MdoyyOawzHXxt0F65fdr7tQDsOAlNVJHLAkrNUaOPBap6yY+Y6PV7QEI5Y6Otj4kuPA==","repository":{"url":"git+https://github.com/loro-dev/protocol.git","type":"git","directory":"packages/loro-websocket"},"_npmVersion":"10.8.2","description":"WebSocket client and SimpleServer for syncing CRDTs base on loro-protocol","directories":{},"sideEffects":false,"_nodeVersion":"20.19.5","dependencies":{"ws":"^8.18.3","@types/ws":"^8.18.1","loro-adaptors":"0.1.3","loro-protocol":"0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.5","tsdown":"^0.14.1","vitest":"^3.2.4","get-port":"^7.1.0","typescript":"^5.9.2"},"peerDependencies":{"loro-crdt":"^1.7.1"},"_npmOperationalInternal":{"tmp":"tmp/loro-websocket_0.1.6_1761278074161_0.34780568600106276","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"loro-websocket","version":"0.2.0","keywords":["loro","crdt","websocket","client","server","sync","realtime","fragmentation","keepalive","e2ee"],"author":{"name":"Loro Team"},"license":"MIT","_id":"loro-websocket@0.2.0","maintainers":[{"name":"rem2018","email":"remch183@outlook.com"}],"homepage":"https://github.com/loro-dev/protocol/tree/main/packages/loro-websocket","bugs":{"url":"https://github.com/loro-dev/protocol/issues"},"dist":{"shasum":"4ff79c64a0c41829ffaf529100f16b3045215d85","tarball":"https://registry.npmjs.org/loro-websocket/-/loro-websocket-0.2.0.tgz","fileCount":19,"integrity":"sha512-ldvNGSK2U6s3DAzN1nQPPkmWQSNtU/tXGn5Dxz3Yac+pVO1IkjVEV4uWJMQvTK32/sL4d0d86c0aozuB4NwPOA==","signatures":[{"sig":"MEUCIQDB0vdoxDz8YYO+mF2RrtxzYKwuu2iA9YfvRTrM2fbTfQIgYqzHkoBjqXkdhVIOj7EJA+ePWeKhnn/GtFoUYs2HliU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":324880},"main":"dist/client/index.cjs","type":"module","_from":"file:loro-websocket-0.2.0.tgz","types":"dist/client/index.d.ts","module":"dist/client/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.cjs"}},"private":false,"scripts":{"dev":"tsdown --watch","test":"vitest run","build":"tsdown","clean":"tsdown --clean","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"rem2018","email":"remch183@outlook.com"},"_resolved":"/tmp/198d48fd47fb0a8f3f66da56ec90e786/loro-websocket-0.2.0.tgz","_integrity":"sha512-ldvNGSK2U6s3DAzN1nQPPkmWQSNtU/tXGn5Dxz3Yac+pVO1IkjVEV4uWJMQvTK32/sL4d0d86c0aozuB4NwPOA==","repository":{"url":"git+https://github.com/loro-dev/protocol.git","type":"git","directory":"packages/loro-websocket"},"_npmVersion":"10.8.2","description":"WebSocket client and SimpleServer for syncing CRDTs base on loro-protocol","directories":{},"sideEffects":false,"_nodeVersion":"20.19.5","dependencies":{"ws":"^8.18.3","@types/ws":"^8.18.1","loro-adaptors":"0.2.0","loro-protocol":"0.1.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.5","tsdown":"^0.14.1","vitest":"^3.2.4","get-port":"^7.1.0","typescript":"^5.9.2","@loro-dev/flock":"^1.0.0"},"peerDependencies":{"loro-crdt":"^1.7.1"},"_npmOperationalInternal":{"tmp":"tmp/loro-websocket_0.2.0_1761817675491_0.7914299196090167","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"loro-websocket","version":"0.2.1","keywords":["loro","crdt","websocket","client","server","sync","realtime","fragmentation","keepalive","e2ee"],"author":{"name":"Loro Team"},"license":"MIT","_id":"loro-websocket@0.2.1","maintainers":[{"name":"rem2018","email":"remch183@outlook.com"}],"homepage":"https://github.com/loro-dev/protocol/tree/main/packages/loro-websocket","bugs":{"url":"https://github.com/loro-dev/protocol/issues"},"dist":{"shasum":"bce823340999fb4094dd554047cf4d6a78b6c286","tarball":"https://registry.npmjs.org/loro-websocket/-/loro-websocket-0.2.1.tgz","fileCount":19,"integrity":"sha512-/diS6X/HR0TPLM7IAJldCnT4+CYxdkY7oBDDsu0h/btPP1WLmgNxMEW2mEloUsZXyN6nQbvp+P33Nv2LkMVeTg==","signatures":[{"sig":"MEUCIGcTj1rUavHCreYg5QO38UyVQzJ6MtEz1Dz/jSOWV7POAiEAhnls17i320UXKabwgf0AVQuiDsXlEkwbY740vtvbt4s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/loro-websocket@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":328301},"main":"dist/client/index.cjs","type":"module","_from":"file:loro-websocket-0.2.1.tgz","types":"dist/client/index.d.ts","module":"dist/client/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.cjs"}},"private":false,"scripts":{"dev":"tsdown --watch","test":"vitest run","build":"tsdown","clean":"tsdown --clean","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb12a762-dd38-472a-bd56-1438ad3976b0"}},"_resolved":"/tmp/5bf7dee48c162d66b947d3dacda9c964/loro-websocket-0.2.1.tgz","_integrity":"sha512-/diS6X/HR0TPLM7IAJldCnT4+CYxdkY7oBDDsu0h/btPP1WLmgNxMEW2mEloUsZXyN6nQbvp+P33Nv2LkMVeTg==","repository":{"url":"git+https://github.com/loro-dev/protocol.git","type":"git","directory":"packages/loro-websocket"},"_npmVersion":"11.6.1","description":"WebSocket client and SimpleServer for syncing CRDTs base on loro-protocol","directories":{},"sideEffects":false,"_nodeVersion":"24.11.0","dependencies":{"ws":"^8.18.3","@types/ws":"^8.18.1","loro-adaptors":"0.2.1","loro-protocol":"0.1.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.5","tsdown":"^0.14.1","vitest":"^3.2.4","get-port":"^7.1.0","typescript":"^5.9.2","@loro-dev/flock":"^1.0.0"},"peerDependencies":{"loro-crdt":"^1.7.1"},"_npmOperationalInternal":{"tmp":"tmp/loro-websocket_0.2.1_1762352902748_0.35978271433364717","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"loro-websocket","version":"0.3.0","keywords":["loro","crdt","websocket","client","server","sync","realtime","fragmentation","keepalive","e2ee"],"author":{"name":"Loro Team"},"license":"MIT","_id":"loro-websocket@0.3.0","maintainers":[{"name":"rem2018","email":"remch183@outlook.com"}],"homepage":"https://github.com/loro-dev/protocol/tree/main/packages/loro-websocket","bugs":{"url":"https://github.com/loro-dev/protocol/issues"},"dist":{"shasum":"57558ae41c53da3b3dd507f3a28ab1df1fd801ef","tarball":"https://registry.npmjs.org/loro-websocket/-/loro-websocket-0.3.0.tgz","fileCount":18,"integrity":"sha512-W5+9s1+7RgX/XxE7pI6Zd1jZiWVWEJriUY2cPttYFd3JYBP4YrQZ3TnXaEvlg1vgbfp/SELljB84ukKK9Mrz4g==","signatures":[{"sig":"MEUCIQCJMP9FTW5qBAa6IskFv2PXw54VI8Yr2knbPv6kdl6k1gIgOFybNO1kevka23GnoNc2cthjf2SWtrHATU4QsoViUgs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/loro-websocket@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":333564},"main":"dist/client/index.cjs","type":"module","_from":"file:loro-websocket-0.3.0.tgz","types":"dist/client/index.d.ts","module":"dist/client/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.cjs"}},"private":false,"scripts":{"dev":"tsdown --watch","test":"vitest run","build":"tsdown","clean":"tsdown --clean","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb12a762-dd38-472a-bd56-1438ad3976b0"}},"_resolved":"/tmp/699eea8a719fecfd2b2278ac9e02e0d5/loro-websocket-0.3.0.tgz","_integrity":"sha512-W5+9s1+7RgX/XxE7pI6Zd1jZiWVWEJriUY2cPttYFd3JYBP4YrQZ3TnXaEvlg1vgbfp/SELljB84ukKK9Mrz4g==","repository":{"url":"git+https://github.com/loro-dev/protocol.git","type":"git","directory":"packages/loro-websocket"},"_npmVersion":"11.6.1","description":"WebSocket client and SimpleServer for syncing CRDTs base on loro-protocol","directories":{},"sideEffects":false,"_nodeVersion":"24.11.0","dependencies":{"ws":"^8.18.3","@types/ws":"^8.18.1","loro-adaptors":"0.3.0","loro-protocol":"0.1.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.5","tsdown":"^0.14.1","vitest":"^3.2.4","get-port":"^7.1.0","typescript":"^5.9.2","@loro-dev/flock":"^1.1.0"},"peerDependencies":{"loro-crdt":"^1.7.1"},"_npmOperationalInternal":{"tmp":"tmp/loro-websocket_0.3.0_1762832997430_0.2251711774143068","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"loro-websocket","version":"0.3.1","keywords":["loro","crdt","websocket","client","server","sync","realtime","fragmentation","keepalive","e2ee"],"author":{"name":"Loro Team"},"license":"MIT","_id":"loro-websocket@0.3.1","maintainers":[{"name":"rem2018","email":"remch183@outlook.com"}],"homepage":"https://github.com/loro-dev/protocol/tree/main/packages/loro-websocket","bugs":{"url":"https://github.com/loro-dev/protocol/issues"},"dist":{"shasum":"fdaef7453dd3194a32b0febf74d830764be78cf6","tarball":"https://registry.npmjs.org/loro-websocket/-/loro-websocket-0.3.1.tgz","fileCount":18,"integrity":"sha512-DNbbuuzRJut4Mprub7QJEMFuemJ1uQ52BK98/SAQNk0NGZDR1At2H2jl0gGmGbNu5JGrQhIEPB8evQnQQpgaFA==","signatures":[{"sig":"MEUCICQL6EoZWZqd3axMpwGOTThi51VEk27Z3+tpfkaEgzKrAiEAjCdt/CwUQH6+V2JnuJVSA697j0Zg7ujuK8SBZ83whKg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/loro-websocket@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":326249},"main":"dist/client/index.cjs","type":"module","_from":"file:loro-websocket-0.3.1.tgz","types":"dist/client/index.d.ts","module":"dist/client/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.cjs"}},"private":false,"scripts":{"dev":"tsdown --watch","test":"vitest run","build":"tsdown","clean":"tsdown --clean","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb12a762-dd38-472a-bd56-1438ad3976b0"}},"_resolved":"/tmp/762673859c5aff99f89e6f48c81e0de1/loro-websocket-0.3.1.tgz","_integrity":"sha512-DNbbuuzRJut4Mprub7QJEMFuemJ1uQ52BK98/SAQNk0NGZDR1At2H2jl0gGmGbNu5JGrQhIEPB8evQnQQpgaFA==","repository":{"url":"git+https://github.com/loro-dev/protocol.git","type":"git","directory":"packages/loro-websocket"},"_npmVersion":"11.6.2","description":"WebSocket client and SimpleServer for syncing CRDTs base on loro-protocol","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"ws":"^8.18.3","@types/ws":"^8.18.1","loro-adaptors":"0.3.1","loro-protocol":"0.1.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.5","tsdown":"^0.14.1","vitest":"^3.2.4","get-port":"^7.1.0","typescript":"^5.9.2","@loro-dev/flock":"^1.1.1"},"peerDependencies":{"loro-crdt":"^1.9.0"},"_npmOperationalInternal":{"tmp":"tmp/loro-websocket_0.3.1_1763608346829_0.5773724765491193","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"loro-websocket","version":"0.4.0","keywords":["loro","crdt","websocket","client","server","sync","realtime","fragmentation","keepalive","e2ee"],"author":{"name":"Loro Team"},"license":"MIT","_id":"loro-websocket@0.4.0","maintainers":[{"name":"rem2018","email":"remch183@outlook.com"}],"homepage":"https://github.com/loro-dev/protocol/tree/main/packages/loro-websocket","bugs":{"url":"https://github.com/loro-dev/protocol/issues"},"dist":{"shasum":"3eaea3bc36ba5c5f7ca2fcbc0c1313fecf4a732d","tarball":"https://registry.npmjs.org/loro-websocket/-/loro-websocket-0.4.0.tgz","fileCount":18,"integrity":"sha512-6jLZHkqpexzzXyaj5EUAcrwS+EaA7/8A1BfEUY+G/P3gkE37lfY6SEKfmoFqSL91OSgP78c/wqvE4F7w8jBnbQ==","signatures":[{"sig":"MEYCIQDdlaWI+om/HxJrkBZmYcSKFnxoe1d6RuYSuG+mMjT9UwIhANZ8GEXSxfpYbSAVQaLU/Qr1LbaoTOraIN45WcQK/HaN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/loro-websocket@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":323307},"main":"dist/client/index.cjs","type":"module","_from":"file:loro-websocket-0.4.0.tgz","types":"dist/client/index.d.ts","module":"dist/client/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.cjs"}},"private":false,"scripts":{"dev":"tsdown --watch","test":"vitest run","build":"tsdown","clean":"tsdown --clean","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb12a762-dd38-472a-bd56-1438ad3976b0"}},"_resolved":"/tmp/deb1f5f49bb7911cd94be6995e43d0e1/loro-websocket-0.4.0.tgz","_integrity":"sha512-6jLZHkqpexzzXyaj5EUAcrwS+EaA7/8A1BfEUY+G/P3gkE37lfY6SEKfmoFqSL91OSgP78c/wqvE4F7w8jBnbQ==","repository":{"url":"git+https://github.com/loro-dev/protocol.git","type":"git","directory":"packages/loro-websocket"},"_npmVersion":"11.6.2","description":"WebSocket client and SimpleServer for syncing CRDTs base on loro-protocol","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"ws":"^8.18.3","@types/ws":"^8.18.1","loro-adaptors":"0.4.0","loro-protocol":"0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.5","tsdown":"^0.14.1","vitest":"^3.2.4","get-port":"^7.1.0","typescript":"^5.9.2","@loro-dev/flock":"^1.1.1"},"peerDependencies":{"loro-crdt":"^1.9.0"},"_npmOperationalInternal":{"tmp":"tmp/loro-websocket_0.4.0_1763623781325_0.12937972534340858","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"loro-websocket","version":"0.4.1","keywords":["loro","crdt","websocket","client","server","sync","realtime","fragmentation","keepalive","e2ee"],"author":{"name":"Loro Team"},"license":"MIT","_id":"loro-websocket@0.4.1","maintainers":[{"name":"rem2018","email":"remch183@outlook.com"}],"homepage":"https://github.com/loro-dev/protocol/tree/main/packages/loro-websocket","bugs":{"url":"https://github.com/loro-dev/protocol/issues"},"dist":{"shasum":"d7cfc551ce05b44889df53adc5d629c8adef40e5","tarball":"https://registry.npmjs.org/loro-websocket/-/loro-websocket-0.4.1.tgz","fileCount":18,"integrity":"sha512-qGEdsHmcZvokEotzVNYpsITt6B0RvqiMnFDS9cMhMFD8jlEUl0Twognex4xqGzrjSuuzoUcQUhvDD+p09D9Eqg==","signatures":[{"sig":"MEQCIEwrTPnHQZyDlvRMEESZkUfM9YeFoaxE+ln16Or/NYLiAiBw8GnMTOBUeVkJy5tmisHerswxN3FbIInEUc6XCz24YA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/loro-websocket@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":323307},"main":"dist/client/index.cjs","type":"module","_from":"file:loro-websocket-0.4.1.tgz","types":"dist/client/index.d.ts","module":"dist/client/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.cjs"}},"private":false,"scripts":{"dev":"tsdown --watch","test":"vitest run","build":"tsdown","clean":"tsdown --clean","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb12a762-dd38-472a-bd56-1438ad3976b0"}},"_resolved":"/tmp/afabada75df72758c8c4d519f6edfc24/loro-websocket-0.4.1.tgz","_integrity":"sha512-qGEdsHmcZvokEotzVNYpsITt6B0RvqiMnFDS9cMhMFD8jlEUl0Twognex4xqGzrjSuuzoUcQUhvDD+p09D9Eqg==","repository":{"url":"git+https://github.com/loro-dev/protocol.git","type":"git","directory":"packages/loro-websocket"},"_npmVersion":"11.6.2","description":"WebSocket client and SimpleServer for syncing CRDTs base on loro-protocol","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"ws":"^8.18.3","@types/ws":"^8.18.1","loro-adaptors":"0.4.1","loro-protocol":"0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.5","tsdown":"^0.14.1","vitest":"^3.2.4","get-port":"^7.1.0","typescript":"^5.9.2","@loro-dev/flock":"^2.1.0"},"peerDependencies":{"loro-crdt":"^1.9.0"},"_npmOperationalInternal":{"tmp":"tmp/loro-websocket_0.4.1_1763887810760_0.6724954500928191","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"loro-websocket","version":"0.4.2","keywords":["loro","crdt","websocket","client","server","sync","realtime","fragmentation","keepalive","e2ee"],"author":{"name":"Loro Team"},"license":"MIT","_id":"loro-websocket@0.4.2","maintainers":[{"name":"rem2018","email":"remch183@outlook.com"}],"homepage":"https://github.com/loro-dev/protocol/tree/main/packages/loro-websocket","bugs":{"url":"https://github.com/loro-dev/protocol/issues"},"dist":{"shasum":"4b7fb2fe0878fca8fd64eac7a930bc7ff6d6e52f","tarball":"https://registry.npmjs.org/loro-websocket/-/loro-websocket-0.4.2.tgz","fileCount":18,"integrity":"sha512-m4DXH24LQ2a3g7mY9KN/kAjNz5Hhx3q/6ggV23M0z9wq3MmOn51TWNl6LhZUFtVaVkQ8ZBY/1+XG0x7xhD51eQ==","signatures":[{"sig":"MEUCIQCyYK/DmaUgtsmQeC2Ybhf9qaBPE6fDhj8uZ619HBlQPAIgJvA2UiymIAEj3UhzhHzK2v8BVf4AqZoppTa0KW92RRY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/loro-websocket@0.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":323307},"main":"dist/client/index.cjs","type":"module","_from":"file:loro-websocket-0.4.2.tgz","types":"dist/client/index.d.ts","module":"dist/client/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.cjs"}},"private":false,"scripts":{"dev":"tsdown --watch","test":"vitest run","build":"tsdown","clean":"tsdown --clean","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb12a762-dd38-472a-bd56-1438ad3976b0"}},"_resolved":"/tmp/2e617dbbdf45499625c9fed8eb3139fb/loro-websocket-0.4.2.tgz","_integrity":"sha512-m4DXH24LQ2a3g7mY9KN/kAjNz5Hhx3q/6ggV23M0z9wq3MmOn51TWNl6LhZUFtVaVkQ8ZBY/1+XG0x7xhD51eQ==","repository":{"url":"git+https://github.com/loro-dev/protocol.git","type":"git","directory":"packages/loro-websocket"},"_npmVersion":"11.6.2","description":"WebSocket client and SimpleServer for syncing CRDTs base on loro-protocol","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"ws":"^8.18.3","@types/ws":"^8.18.1","loro-adaptors":"0.4.2","loro-protocol":"0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.5","tsdown":"^0.14.1","vitest":"^3.2.4","get-port":"^7.1.0","typescript":"^5.9.2","@loro-dev/flock":"^3.1.0"},"peerDependencies":{"loro-crdt":"^1.9.0"},"_npmOperationalInternal":{"tmp":"tmp/loro-websocket_0.4.2_1764312260978_0.4137748933411467","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"loro-websocket","version":"0.4.3","keywords":["loro","crdt","websocket","client","server","sync","realtime","fragmentation","keepalive","e2ee"],"author":{"name":"Loro Team"},"license":"MIT","_id":"loro-websocket@0.4.3","maintainers":[{"name":"rem2018","email":"remch183@outlook.com"}],"homepage":"https://github.com/loro-dev/protocol/tree/main/packages/loro-websocket","bugs":{"url":"https://github.com/loro-dev/protocol/issues"},"dist":{"shasum":"7d3b83c93a0558cc2aaefab92a9cf7e778d0050b","tarball":"https://registry.npmjs.org/loro-websocket/-/loro-websocket-0.4.3.tgz","fileCount":18,"integrity":"sha512-58lFUCLmNDNufQjXRkGEbqWn4dRz8PmcYdz+5dJ2TB7kjQUz6FHtuxnBITq6ZQAIU9ui1H8hWqdaqwD9vkBUfg==","signatures":[{"sig":"MEYCIQDEG6l+9X3glzDzP/eys6XPYRjXeg3Z89iWoVilraziRwIhAJTIhSqo6KGuHOU8cLCnSTMR/nA6TUYoiqAyeTojMj6R","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/loro-websocket@0.4.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":362423},"main":"dist/client/index.cjs","type":"module","_from":"file:loro-websocket-0.4.3.tgz","types":"dist/client/index.d.ts","module":"dist/client/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.cjs"}},"private":false,"scripts":{"dev":"tsdown --watch","test":"vitest run","build":"tsdown","clean":"tsdown --clean","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb12a762-dd38-472a-bd56-1438ad3976b0"}},"_resolved":"/tmp/2b95cbba4a7d235966f26f8cc19b1fc2/loro-websocket-0.4.3.tgz","_integrity":"sha512-58lFUCLmNDNufQjXRkGEbqWn4dRz8PmcYdz+5dJ2TB7kjQUz6FHtuxnBITq6ZQAIU9ui1H8hWqdaqwD9vkBUfg==","repository":{"url":"git+https://github.com/loro-dev/protocol.git","type":"git","directory":"packages/loro-websocket"},"_npmVersion":"11.6.2","description":"WebSocket client and SimpleServer for syncing CRDTs base on loro-protocol","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"ws":"^8.18.3","@types/ws":"^8.18.1","loro-adaptors":"0.4.2","loro-protocol":"0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.5","tsdown":"^0.14.1","vitest":"^3.2.4","get-port":"^7.1.0","typescript":"^5.9.2","@loro-dev/flock":"^3.1.0"},"peerDependencies":{"loro-crdt":"^1.9.0"},"_npmOperationalInternal":{"tmp":"tmp/loro-websocket_0.4.3_1764909888376_0.4836698819131926","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"loro-websocket","version":"0.5.0","keywords":["loro","crdt","websocket","client","server","sync","realtime","fragmentation","keepalive","e2ee"],"author":{"name":"Loro Team"},"license":"MIT","_id":"loro-websocket@0.5.0","maintainers":[{"name":"rem2018","email":"remch183@outlook.com"}],"homepage":"https://github.com/loro-dev/protocol/tree/main/packages/loro-websocket","bugs":{"url":"https://github.com/loro-dev/protocol/issues"},"dist":{"shasum":"8aef8c001afde225c8379a914f479a7087a9fe0e","tarball":"https://registry.npmjs.org/loro-websocket/-/loro-websocket-0.5.0.tgz","fileCount":18,"integrity":"sha512-G7YUApZE5z2KFZ0NH377gfamCRnhgS7dJX9hQabnXsEgiFs1BXWjhYOvgOgKUebTA/T4KKGX6Qfv34etwSiXgg==","signatures":[{"sig":"MEUCIQCs/hvDSZxSquI7MFGgSRDU3LQdMrutH38YYeqrc8GLHgIgXd60oqxvRqAE/CDhFNOZK4GRHSTz2SFNZG9U3lbaPc8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/loro-websocket@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":389745},"main":"dist/client/index.cjs","type":"module","_from":"file:loro-websocket-0.5.0.tgz","types":"dist/client/index.d.ts","module":"dist/client/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.cjs"}},"private":false,"scripts":{"dev":"tsdown --watch","test":"vitest run","build":"tsdown","clean":"tsdown --clean","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb12a762-dd38-472a-bd56-1438ad3976b0"}},"_resolved":"/tmp/79540dec99fe53d88de32596c00e74c2/loro-websocket-0.5.0.tgz","_integrity":"sha512-G7YUApZE5z2KFZ0NH377gfamCRnhgS7dJX9hQabnXsEgiFs1BXWjhYOvgOgKUebTA/T4KKGX6Qfv34etwSiXgg==","repository":{"url":"git+https://github.com/loro-dev/protocol.git","type":"git","directory":"packages/loro-websocket"},"_npmVersion":"11.6.2","description":"WebSocket client and SimpleServer for syncing CRDTs base on loro-protocol","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"ws":"^8.18.3","@types/ws":"^8.18.1","loro-adaptors":"0.5.0","loro-protocol":"0.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.5","tsdown":"^0.14.1","vitest":"^3.2.4","get-port":"^7.1.0","typescript":"^5.9.2","@loro-dev/flock":"^3.1.0"},"peerDependencies":{"loro-crdt":"^1.9.0"},"_npmOperationalInternal":{"tmp":"tmp/loro-websocket_0.5.0_1765175142466_0.5691410090084177","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"loro-websocket","version":"0.6.0","keywords":["loro","crdt","websocket","client","server","sync","realtime","fragmentation","keepalive","e2ee"],"author":{"name":"Loro Team"},"license":"MIT","_id":"loro-websocket@0.6.0","maintainers":[{"name":"rem2018","email":"remch183@outlook.com"}],"homepage":"https://github.com/loro-dev/protocol/tree/main/packages/loro-websocket","bugs":{"url":"https://github.com/loro-dev/protocol/issues"},"dist":{"shasum":"02ea9bdada15c31b31137c00b32afdd343ef8a7d","tarball":"https://registry.npmjs.org/loro-websocket/-/loro-websocket-0.6.0.tgz","fileCount":18,"integrity":"sha512-sdyVrOb6QjoFYBmOBjyyFPkBkAPu9QSd9AJdJu8NLsGcL5lCzSum8/tB0Wz9zjNJlkPJRzgI7yZPFetm7qhWcA==","signatures":[{"sig":"MEYCIQDit3dJD3oJA5LW5KGkY4FOQliYjqZy8dWYfWytPqOkgwIhAMRJ4w7kdT6Hgn83McXXPaotfd80XBUqU+XEJ27ayOt/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/loro-websocket@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":389745},"main":"dist/client/index.cjs","type":"module","_from":"file:loro-websocket-0.6.0.tgz","types":"dist/client/index.d.ts","module":"dist/client/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.cjs"}},"private":false,"scripts":{"dev":"tsdown --watch","test":"vitest run","build":"tsdown","clean":"tsdown --clean","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb12a762-dd38-472a-bd56-1438ad3976b0"}},"_resolved":"/tmp/9ef824a39202637086d00bb503c63a5e/loro-websocket-0.6.0.tgz","_integrity":"sha512-sdyVrOb6QjoFYBmOBjyyFPkBkAPu9QSd9AJdJu8NLsGcL5lCzSum8/tB0Wz9zjNJlkPJRzgI7yZPFetm7qhWcA==","repository":{"url":"git+https://github.com/loro-dev/protocol.git","type":"git","directory":"packages/loro-websocket"},"_npmVersion":"11.6.2","description":"WebSocket client and SimpleServer for syncing CRDTs base on loro-protocol","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"ws":"^8.18.3","@types/ws":"^8.18.1","loro-adaptors":"0.6.0","loro-protocol":"0.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.5","tsdown":"^0.14.1","vitest":"^3.2.4","get-port":"^7.1.0","typescript":"^5.9.2","@loro-dev/flock":"^4.0.0"},"peerDependencies":{"loro-crdt":"^1.9.0"},"_npmOperationalInternal":{"tmp":"tmp/loro-websocket_0.6.0_1765465231670_0.6929415413749747","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"loro-websocket","version":"0.6.1","keywords":["loro","crdt","websocket","client","server","sync","realtime","fragmentation","keepalive","e2ee"],"author":{"name":"Loro Team"},"license":"MIT","_id":"loro-websocket@0.6.1","maintainers":[{"name":"rem2018","email":"remch183@outlook.com"}],"homepage":"https://github.com/loro-dev/protocol/tree/main/packages/loro-websocket","bugs":{"url":"https://github.com/loro-dev/protocol/issues"},"dist":{"shasum":"58c7f401ba2b726c1eaafa6f428858902df98963","tarball":"https://registry.npmjs.org/loro-websocket/-/loro-websocket-0.6.1.tgz","fileCount":18,"integrity":"sha512-Bq1lku52+ZbXqG6+Aelg763nVEu8dtS4xJYlP14XC2DBDdvHU1zyVUIKVovvD2ptLcaFrbUxLbXEippJcpoNAw==","signatures":[{"sig":"MEUCIH0D9JzR6yILuVfCqI7YvFpn/xA3ZEKoy+tCVK5pZwCzAiEA725vrqSWXpsV71q/7dfLugLnRR9BHNv495DqkyHKpUM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/loro-websocket@0.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":398550},"main":"dist/client/index.cjs","type":"module","_from":"file:loro-websocket-0.6.1.tgz","types":"dist/client/index.d.ts","module":"dist/client/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.cjs"}},"private":false,"scripts":{"dev":"tsdown --watch","test":"vitest run","build":"tsdown","clean":"tsdown --clean","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb12a762-dd38-472a-bd56-1438ad3976b0"}},"_resolved":"/tmp/c57799c7f7533928c19a59b257332e6a/loro-websocket-0.6.1.tgz","_integrity":"sha512-Bq1lku52+ZbXqG6+Aelg763nVEu8dtS4xJYlP14XC2DBDdvHU1zyVUIKVovvD2ptLcaFrbUxLbXEippJcpoNAw==","repository":{"url":"git+https://github.com/loro-dev/protocol.git","type":"git","directory":"packages/loro-websocket"},"_npmVersion":"11.6.2","description":"WebSocket client and SimpleServer for syncing CRDTs base on loro-protocol","directories":{},"sideEffects":false,"_nodeVersion":"24.12.0","dependencies":{"ws":"^8.18.3","@types/ws":"^8.18.1","loro-adaptors":"0.6.1","loro-protocol":"0.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.5","tsdown":"^0.14.1","vitest":"^3.2.4","get-port":"^7.1.0","typescript":"^5.9.2","@loro-dev/flock":"^4.1.0"},"peerDependencies":{"loro-crdt":"^1.9.0"},"_npmOperationalInternal":{"tmp":"tmp/loro-websocket_0.6.1_1767007415645_0.5175099375145764","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"loro-websocket","version":"0.6.2","private":false,"description":"WebSocket client and SimpleServer for syncing CRDTs base on loro-protocol","author":{"name":"Loro Team"},"license":"MIT","type":"module","main":"dist/client/index.cjs","module":"dist/client/index.js","types":"dist/client/index.d.ts","keywords":["loro","crdt","websocket","client","server","sync","realtime","fragmentation","keepalive","e2ee"],"repository":{"type":"git","url":"git+https://github.com/loro-dev/protocol.git","directory":"packages/loro-websocket"},"bugs":{"url":"https://github.com/loro-dev/protocol/issues"},"homepage":"https://github.com/loro-dev/protocol/tree/main/packages/loro-websocket","sideEffects":false,"publishConfig":{"access":"public"},"engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.cjs"}},"dependencies":{"@types/ws":"^8.18.1","ws":"^8.18.3","loro-adaptors":"0.6.1","loro-protocol":"0.3.0"},"devDependencies":{"@loro-dev/flock":"^4.1.0","get-port":"^7.1.0","tsdown":"^0.14.1","tsx":"^4.20.5","typescript":"^5.9.2","vitest":"^3.2.4"},"peerDependencies":{"loro-crdt":"^1.9.0"},"scripts":{"build":"tsdown","dev":"tsdown --watch","test":"vitest run","typecheck":"tsc -p tsconfig.json --noEmit","clean":"tsdown --clean"},"_id":"loro-websocket@0.6.2","_integrity":"sha512-B9rHs5L1XZkmiBg8+HIFbFH1uiFg12m8Ua66D0tywvOy74WyqKVY/jbYcVLdCMglBzxU+u6XO5/yh0L4RLiJMA==","_resolved":"/tmp/2f2899e4794d314ce6a07e82a2ffe77e/loro-websocket-0.6.2.tgz","_from":"file:loro-websocket-0.6.2.tgz","_nodeVersion":"24.12.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-B9rHs5L1XZkmiBg8+HIFbFH1uiFg12m8Ua66D0tywvOy74WyqKVY/jbYcVLdCMglBzxU+u6XO5/yh0L4RLiJMA==","shasum":"8fc7942368f556488907f01af5fb2f4c068387b3","tarball":"https://registry.npmjs.org/loro-websocket/-/loro-websocket-0.6.2.tgz","fileCount":18,"unpackedSize":404456,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/loro-websocket@0.6.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCo8cKRV6lI7j5c55BDwkKP01wQVPk3y4bjZjMM6lhNHgIgLxcXMsKir1Gno2fE09JiYzAqm19CF5XoTOjt0ngYCGY="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb12a762-dd38-472a-bd56-1438ad3976b0"}},"directories":{},"maintainers":[{"name":"rem2018","email":"remch183@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/loro-websocket_0.6.2_1767500186111_0.6947124579577304"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-12T05:54:25.281Z","modified":"2026-01-04T04:16:26.764Z","0.1.0":"2025-09-12T05:54:25.527Z","0.1.1":"2025-09-16T07:16:36.883Z","0.1.2":"2025-09-16T10:41:53.002Z","0.1.3":"2025-09-23T11:46:49.756Z","0.1.4":"2025-10-23T09:21:18.088Z","0.1.5":"2025-10-23T09:42:12.511Z","0.1.6":"2025-10-24T03:54:34.400Z","0.2.0":"2025-10-30T09:47:55.721Z","0.2.1":"2025-11-05T14:28:22.976Z","0.3.0":"2025-11-11T03:49:57.643Z","0.3.1":"2025-11-20T03:12:27.022Z","0.4.0":"2025-11-20T07:29:41.526Z","0.4.1":"2025-11-23T08:50:11.028Z","0.4.2":"2025-11-28T06:44:21.182Z","0.4.3":"2025-12-05T04:44:48.693Z","0.5.0":"2025-12-08T06:25:42.607Z","0.6.0":"2025-12-11T15:00:31.819Z","0.6.1":"2025-12-29T11:23:35.817Z","0.6.2":"2026-01-04T04:16:26.334Z"},"bugs":{"url":"https://github.com/loro-dev/protocol/issues"},"author":{"name":"Loro Team"},"license":"MIT","homepage":"https://github.com/loro-dev/protocol/tree/main/packages/loro-websocket","keywords":["loro","crdt","websocket","client","server","sync","realtime","fragmentation","keepalive","e2ee"],"repository":{"type":"git","url":"git+https://github.com/loro-dev/protocol.git","directory":"packages/loro-websocket"},"description":"WebSocket client and SimpleServer for syncing CRDTs base on loro-protocol","maintainers":[{"name":"rem2018","email":"remch183@outlook.com"}],"readme":"# loro-websocket\n\nWebSocket client and a minimal SimpleServer for syncing Loro CRDTs. The client provides connection status events, auto‑reconnect with exponential backoff, latency tracking via ping/pong, safe fragmentation/reassembly for large updates, and seamless room rejoin across reconnects.\n\n## Install\n\n```bash\npnpm add loro-websocket loro-adaptors loro-protocol\n# plus peer dep in your app\npnpm add loro-crdt\n```\n\n## Quick Start\n\n```ts\n// In Node, provide a WebSocket implementation\nimport { WebSocket } from \"ws\";\n(globalThis as any).WebSocket =\n  WebSocket as unknown as typeof globalThis.WebSocket;\n\nimport { LoroWebsocketClient, ClientStatus } from \"loro-websocket\";\nimport { LoroAdaptor } from \"loro-adaptors/loro\";\n\nconst client = new LoroWebsocketClient({ url: \"ws://localhost:8787\" });\n\n// React to connection status\nconst offStatus = client.onStatusChange(s => console.log(\"status:\", s));\n\nawait client.waitConnected();\n\n// Join a room with a CRDT adaptor\nconst adaptor = new LoroAdaptor();\nconst room = await client.join({ roomId: \"demo\", crdtAdaptor: adaptor });\n\n// Edit document and sync\nconst text = adaptor.getDoc().getText(\"content\");\ntext.insert(0, \"Hello, Loro!\");\nadaptor.getDoc().commit();\n\nawait room.destroy();\noffStatus();\n```\n\n%ELO (end‑to‑end encrypted Loro) using `EloAdaptor`:\n\n```ts\nimport { LoroWebsocketClient } from \"loro-websocket\";\nimport { EloAdaptor } from \"loro-adaptors/loro\";\n\nconst key = new Uint8Array(32);\nkey[0] = 1;\nconst client = new LoroWebsocketClient({ url: \"ws://localhost:8787\" });\nawait client.waitConnected();\n\nconst adaptor = new EloAdaptor({\n  getPrivateKey: async () => ({ keyId: \"k1\", key }),\n});\nawait client.join({ roomId: \"secure-room\", crdtAdaptor: adaptor });\n\nadaptor.getDoc().getText(\"t\").insert(0, \"secret\");\nadaptor.getDoc().commit();\n```\n\n## Client API\n\n```ts\nnew LoroWebsocketClient(options: LoroWebsocketClientOptions)\n\ninterface LoroWebsocketClientOptions {\n  url: string;                 // WebSocket URL (ws:// or wss://)\n  pingIntervalMs?: number;     // Periodic ping interval (default 30_000ms)\n  disablePing?: boolean;       // Disable periodic pings entirely\n  onWsClose?: () => void;      // Low‑level ws close callback (before status transitions)\n}\n\n// Status values (no enums)\nconst ClientStatus = {\n  Connecting: \"connecting\",\n  Connected: \"connected\",\n  Disconnected: \"disconnected\",\n} as const;\ntype ClientStatusValue = typeof ClientStatus[keyof typeof ClientStatus];\n```\n\n- Connection\n  - `waitConnected(): Promise<void>` resolves once the socket is open.\n  - `connect(): Promise<void>` manually initiate/resume connection; also re‑enables auto‑reconnect after a `close()`.\n  - `close(): void` manually close, wait for buffered frames to flush, and stop auto‑reconnect (status → `Disconnected`).\n  - `destroy(): void` teardown: remove listeners, stop timers, reject pending `waitConnected`/`ping` calls, flush buffers, close socket, status → `Disconnected`.\n\n- Status and events\n  - `getStatus(): ClientStatusValue` returns the current status.\n  - `onStatusChange(cb): () => void` subscribes to status changes; immediately calls `cb` with the current status; returns unsubscribe.\n\n- Latency\n  - `ping(timeoutMs?: number): Promise<void>` sends an app‑level ping and resolves on pong or rejects on timeout.\n  - `getLatency(): number | undefined` returns the last measured ping round‑trip time (ms).\n  - `onLatency(cb): () => void` subscribes to latency updates; if a value exists, emits immediately; returns unsubscribe.\n\n- Rooms\n- `join({ roomId, crdtAdaptor, auth? }): Promise<LoroWebsocketClientRoom>` joins a room for a given CRDT type via its adaptor. Optional `auth` carries application-defined join metadata (e.g., auth/session tokens) and is forwarded to the server’s `authenticate` hook.\n  - Room API: `leave(): Promise<void>`, `waitForReachingServerVersion(): Promise<void>`, `destroy(): Promise<void>`.\n\n## Status & Reconnect Model\n\n- Status values\n  - `Connecting`: initial or manual `connect()` in progress.\n  - `Connected`: websocket is open and usable.\n  - `Disconnected`: socket closed. Auto‑reconnect keeps retrying unless `close()`/`destroy()` stop it.\n\n- Auto‑reconnect\n  - Retry cadence: attempts start ~500 ms after the first unexpected close and double on each failure (1 s, 2 s, 4 s, …) up to a 15 s ceiling. A successful connection resets the backoff to the 500 ms starting point.\n  - The timer is canceled when the environment reports `offline`; the client stays in `Disconnected` until an `online` event arrives, at which point the next retry fires immediately.\n  - Calling `close()` or `destroy()` turns off auto‑retry. Invoke `connect()` later to restart the process with a fresh backoff window.\n  - Server‑initiated kicks: if the socket closes with a code in the `4400–4499` range or a reason of `permission_changed` / `room_closed`, the client assumes the server intentionally removed the connection and **does not** schedule reconnect attempts. This mirrors the Durable Object kick semantics used in `@loro-protocol/do`.\n\n## Latency & Ping/Pong\n\n- Periodic pings\n  - By default, the client sends a text `\"ping\"` every 30s (configurable via `pingIntervalMs`) and expects a `\"pong\"`. This keeps the connection alive and measures round‑trip latency.\n  - Set `disablePing: true` to turn off the timer.\n\n- On‑demand ping\n  - Call `ping(timeoutMs)` to send a ping and await the next pong; rejects on timeout.\n  - `onLatency(cb)` fires whenever a pong is observed and updates `getLatency()`.\n\n## Rooms & Rejoin\n\n- Join handshake\n  - `join()` sends a `JoinRequest` with the adaptor’s CRDT type, version, and optional join metadata (`auth` bytes).\n  - On `JoinResponseOk`, the adaptor reconciles to the server’s version and begins streaming updates.\n\n- Rejoin after reconnect\n  - The client tracks active rooms and their join metadata. After reconnect, it re‑sends `JoinRequest` for each active room and the adaptor re‑syncs.\n  - If the server responds `VersionUnknown`, the client retries using `adaptor.getAlternativeVersion()` or an empty version as a fallback.\n  - For `%ELO`, updates that arrive right after join may be buffered briefly to cover backfills that race the join.\n\n## Fragmentation & Large Updates\n\n- Oversize updates are split into `DocUpdateFragmentHeader` + `DocUpdateFragment` messages and reassembled on the receiver.\n- Fragmentation occurs automatically for single updates that approach the wire limit (headroom reserved under `MAX_MESSAGE_SIZE`). No action is required by callers.\n\n## SimpleServer (for local/e2e usage)\n\n```ts\nimport { SimpleServer } from \"loro-websocket/server\";\n\nconst server = new SimpleServer({\n  port: 8787,\n  authenticate: async (_roomId, _crdt, auth) => {\n    // join metadata is passed as `auth`; return \"read\" | \"write\" | null\n    return new TextDecoder().decode(auth) === \"readonly\" ? \"read\" : \"write\";\n  },\n  onLoadDocument: async (_roomId, _crdt) => null,\n  onSaveDocument: async (_roomId, _crdt, _data) => {},\n  saveInterval: 60_000,\n});\nawait server.start();\n// Later: await server.stop(); flushes any buffered frames before terminating clients\n```\n\n## Examples\n\n- Status and reconnect\n\n```ts\nconst client = new LoroWebsocketClient({ url: \"ws://localhost:8787\" });\nclient.onStatusChange(s => console.log(\"status:\", s));\n\n// Later, stop auto‑reconnect\nclient.close(); // status → Disconnected\n\n// Resume auto‑reconnect\nawait client.connect(); // status: Connecting → Connected\n```\n\n- Latency\n\n```ts\nconst off = client.onLatency(ms => console.log(\"latency:\", ms));\nawait client.ping(2000);\nconsole.log(\"last RTT:\", client.getLatency());\noff();\n```\n\n- Join with join metadata/auth\n\n```ts\nconst adaptor = new LoroAdaptor();\nadaptor.getDoc().setPeerId(42);\nawait client.join({\n  roomId: \"project-123\",\n  crdtAdaptor: adaptor,\n  auth: new TextEncoder().encode(\"write-token\"), // application-defined join payload\n});\n```\n\n## Node/Web Compatibility\n\n- Browsers: uses the native `WebSocket` and `window` online/offline events.\n- Node: supply a WebSocket implementation (e.g. `ws`) via `globalThis.WebSocket`.\n- %ELO crypto uses Web Crypto (`globalThis.crypto.subtle`); Node 18+ provides it.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}