{"_id":"@durable-streams/y-durable-streams","_rev":"13-8d3c4792a313426d8ac1324fcc041978","name":"@durable-streams/y-durable-streams","dist-tags":{"latest":"0.2.9"},"versions":{"0.1.2":{"name":"@durable-streams/y-durable-streams","version":"0.1.2","keywords":["yjs","durable-streams","crdt","sync","collaborative","real-time","typescript"],"author":{"name":"Durable Stream contributors"},"license":"Apache-2.0","_id":"@durable-streams/y-durable-streams@0.1.2","maintainers":[{"name":"kylemathews","email":"mathews.kyle@gmail.com"}],"homepage":"https://github.com/durable-streams/durable-streams#readme","bugs":{"url":"https://github.com/durable-streams/durable-streams/issues"},"dist":{"shasum":"07d79c0af65ca2cb450f2215b970e620128ce139","tarball":"https://registry.npmjs.org/@durable-streams/y-durable-streams/-/y-durable-streams-0.1.2.tgz","fileCount":9,"integrity":"sha512-yPo52g61obVPoFtstWY2mOoHXgF2+4FjTDbLSFFqp/RmULigXuH2GzelT8vEJEhTmH5tN3V93EJACNGPPuqfuw==","signatures":[{"sig":"MEUCIQCWmPPleJqOMJjXdXoJfHhVbZFvFpRQFOhlcnyKeNOqsgIgU61R/pwhJR1Wlc7ftd+NV4O9STIvMPEAwVWEzISyVUQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58899},"main":"./dist/index.cjs","type":"module","_from":"file:durable-streams-y-durable-streams-0.1.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"dev":"tsdown --watch","build":"tsdown","typecheck":"tsc --noEmit"},"_npmUser":{"name":"kylemathews","email":"mathews.kyle@gmail.com"},"_resolved":"/private/var/folders/m3/r413t_qj4kxg1mdnmk1zb8q80000gn/T/52b364b1313aeded0b071b3f51c3cdf0/durable-streams-y-durable-streams-0.1.2.tgz","_integrity":"sha512-yPo52g61obVPoFtstWY2mOoHXgF2+4FjTDbLSFFqp/RmULigXuH2GzelT8vEJEhTmH5tN3V93EJACNGPPuqfuw==","repository":{"url":"git+https://github.com/durable-streams/durable-streams.git","type":"git","directory":"packages/y-durable-streams"},"_npmVersion":"8.9.0","description":"Yjs provider for Durable Streams - sync Yjs documents over append-only streams","directories":{},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"@durable-streams/client":"0.1.5"},"_hasShrinkwrap":false,"devDependencies":{"yjs":"^13.6.24","lib0":"^0.2.99","tsdown":"^0.9.0","y-protocols":"^1.0.6","@durable-streams/server":"0.1.6"},"peerDependencies":{"yjs":"^13.0.0","lib0":"^0.2.0","y-protocols":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/y-durable-streams_0.1.2_1767920668665_0.9657739400486645","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@durable-streams/y-durable-streams","version":"0.1.4","keywords":["yjs","durable-streams","crdt","sync","collaborative","real-time","typescript"],"author":{"name":"Durable Stream contributors"},"license":"Apache-2.0","_id":"@durable-streams/y-durable-streams@0.1.4","maintainers":[{"name":"kylemathews","email":"mathews.kyle@gmail.com"}],"homepage":"https://github.com/durable-streams/durable-streams#readme","bugs":{"url":"https://github.com/durable-streams/durable-streams/issues"},"dist":{"shasum":"809bf0325e17236441d8301f1a288f2ae6029dc1","tarball":"https://registry.npmjs.org/@durable-streams/y-durable-streams/-/y-durable-streams-0.1.4.tgz","fileCount":10,"integrity":"sha512-sA3Z0puBdde+0tF1yFpBz1R9fPyBjuny8rSMHkJnTMQ/3iHqQFTNU0Ul6Yq1Qbjw3rhOeY8lAdtDGiUoMtgolw==","signatures":[{"sig":"MEUCIA+ypaIHBg/pwx19R71JtRCJ1w5cLYUawwUpFaU4zy/0AiEAxblE5IDm3aGA9LtN1WymXwn98gapyWB1/QhzqIQLoQ8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@durable-streams%2fy-durable-streams@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":64061},"main":"./dist/index.cjs","type":"module","_from":"file:durable-streams-y-durable-streams-0.1.4.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"dev":"tsdown --watch","build":"tsdown","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:134a4b0e-bc2b-46ca-9c84-e3d3d25a652e"}},"_resolved":"/tmp/822413651b62ba2e510ed52e045a2e7d/durable-streams-y-durable-streams-0.1.4.tgz","_integrity":"sha512-sA3Z0puBdde+0tF1yFpBz1R9fPyBjuny8rSMHkJnTMQ/3iHqQFTNU0Ul6Yq1Qbjw3rhOeY8lAdtDGiUoMtgolw==","repository":{"url":"git+https://github.com/durable-streams/durable-streams.git","type":"git","directory":"packages/y-durable-streams"},"_npmVersion":"11.7.0","description":"Yjs provider for Durable Streams - sync Yjs documents over append-only streams","directories":{},"sideEffects":false,"_nodeVersion":"22.21.1","dependencies":{"@durable-streams/client":"0.2.0"},"_hasShrinkwrap":false,"devDependencies":{"yjs":"^13.6.24","lib0":"^0.2.99","tsdown":"^0.9.0","y-protocols":"^1.0.6","@durable-streams/server":"0.1.7"},"peerDependencies":{"yjs":"^13.0.0","lib0":"^0.2.0","y-protocols":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/y-durable-streams_0.1.4_1769037308661_0.293181013434638","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@durable-streams/y-durable-streams","version":"0.2.0","keywords":["yjs","durable-streams","crdt","sync","collaborative","real-time","typescript"],"author":{"name":"Durable Stream contributors"},"license":"Apache-2.0","_id":"@durable-streams/y-durable-streams@0.2.0","maintainers":[{"name":"kylemathews","email":"mathews.kyle@gmail.com"}],"homepage":"https://github.com/durable-streams/durable-streams#readme","bugs":{"url":"https://github.com/durable-streams/durable-streams/issues"},"dist":{"shasum":"dae4f8c702bf95a307d308679626eda0d88a8131","tarball":"https://registry.npmjs.org/@durable-streams/y-durable-streams/-/y-durable-streams-0.2.0.tgz","fileCount":10,"integrity":"sha512-g80rVLNGVpbgHtODQQWVy7SjoVw6FCG09KD+pJofoG7le5qPddBlfk6YgjANVu3/LvGN7eRDtlxmtbBVV+XlzA==","signatures":[{"sig":"MEQCIAPtF7BMHLOaHkTYcHgoQtIjtRnzspqeMAjo2N+xwi3lAiA0RAGNhMuvwbHCjLAxCD8oNMqu6yBQ+wEWm9b6i2GVKg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@durable-streams%2fy-durable-streams@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":64061},"main":"./dist/index.cjs","type":"module","_from":"file:durable-streams-y-durable-streams-0.2.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"dev":"tsdown --watch","build":"tsdown","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:134a4b0e-bc2b-46ca-9c84-e3d3d25a652e"}},"_resolved":"/tmp/66e5ae20707bc6fb30e72749f2a8c960/durable-streams-y-durable-streams-0.2.0.tgz","_integrity":"sha512-g80rVLNGVpbgHtODQQWVy7SjoVw6FCG09KD+pJofoG7le5qPddBlfk6YgjANVu3/LvGN7eRDtlxmtbBVV+XlzA==","repository":{"url":"git+https://github.com/durable-streams/durable-streams.git","type":"git","directory":"packages/y-durable-streams"},"_npmVersion":"11.8.0","description":"Yjs provider for Durable Streams - sync Yjs documents over append-only streams","directories":{},"sideEffects":false,"_nodeVersion":"22.21.1","dependencies":{"@durable-streams/client":"0.2.0"},"_hasShrinkwrap":false,"devDependencies":{"yjs":"^13.6.24","lib0":"^0.2.99","tsdown":"^0.9.0","y-protocols":"^1.0.6","@durable-streams/server":"0.2.0"},"peerDependencies":{"yjs":"^13.0.0","lib0":"^0.2.0","y-protocols":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/y-durable-streams_0.2.0_1769099523686_0.799101536159045","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@durable-streams/y-durable-streams","version":"0.2.1","keywords":["yjs","durable-streams","crdt","sync","collaborative","real-time","typescript"],"author":{"name":"Durable Stream contributors"},"license":"Apache-2.0","_id":"@durable-streams/y-durable-streams@0.2.1","maintainers":[{"name":"kylemathews","email":"mathews.kyle@gmail.com"}],"homepage":"https://github.com/durable-streams/durable-streams#readme","bugs":{"url":"https://github.com/durable-streams/durable-streams/issues"},"dist":{"shasum":"f2a1cf7f530bd2874904796ec1a28a69adf2f56a","tarball":"https://registry.npmjs.org/@durable-streams/y-durable-streams/-/y-durable-streams-0.2.1.tgz","fileCount":10,"integrity":"sha512-R9uYPnMUKmmAzecwXVErIdy6A/HSgxXARlBN6VjIsNcsJv5tfYxX7tZtr7rfoM+P1/K56f4hF0Du7K8rKN8FlQ==","signatures":[{"sig":"MEUCIQCRYF5ROgUZNMaYj2TyQmUUiZddaJnw0pn23v2QFqanGQIgEvs+VLm01dKRBT+atmG1X9blEzWcbLopdm5IpvvE9oI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@durable-streams%2fy-durable-streams@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":66395},"main":"./dist/index.cjs","type":"module","_from":"file:durable-streams-y-durable-streams-0.2.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"dev":"tsdown --watch","build":"tsdown","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:134a4b0e-bc2b-46ca-9c84-e3d3d25a652e"}},"_resolved":"/tmp/3b1e71239361ae35694e5f20571e8186/durable-streams-y-durable-streams-0.2.1.tgz","_integrity":"sha512-R9uYPnMUKmmAzecwXVErIdy6A/HSgxXARlBN6VjIsNcsJv5tfYxX7tZtr7rfoM+P1/K56f4hF0Du7K8rKN8FlQ==","repository":{"url":"git+https://github.com/durable-streams/durable-streams.git","type":"git","directory":"packages/y-durable-streams"},"_npmVersion":"11.8.0","description":"Yjs provider for Durable Streams - sync Yjs documents over append-only streams","directories":{},"sideEffects":false,"_nodeVersion":"22.22.0","dependencies":{"@durable-streams/client":"0.2.1"},"_hasShrinkwrap":false,"devDependencies":{"yjs":"^13.6.24","lib0":"^0.2.99","tsdown":"^0.9.0","y-protocols":"^1.0.6","@durable-streams/server":"0.2.1"},"peerDependencies":{"yjs":"^13.0.0","lib0":"^0.2.0","y-protocols":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/y-durable-streams_0.2.1_1769714682545_0.6820111848965373","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@durable-streams/y-durable-streams","version":"0.2.2","keywords":["yjs","durable-streams","crdt","sync","collaborative","real-time","typescript"],"author":{"name":"Durable Stream contributors"},"license":"Apache-2.0","_id":"@durable-streams/y-durable-streams@0.2.2","maintainers":[{"name":"kylemathews","email":"mathews.kyle@gmail.com"}],"homepage":"https://github.com/durable-streams/durable-streams#readme","bugs":{"url":"https://github.com/durable-streams/durable-streams/issues"},"dist":{"shasum":"3a20b07ebad8fab9432bfe4e35aae49f9759bf57","tarball":"https://registry.npmjs.org/@durable-streams/y-durable-streams/-/y-durable-streams-0.2.2.tgz","fileCount":11,"integrity":"sha512-9bD+A480+wxv/zDa4KKoSTmr4iGJ1fowZms0nILKoR44CmBg2vXY0pscfo3leVnH2N+TGSyp0vaOjOsFHv7BbA==","signatures":[{"sig":"MEYCIQCNhDCaoZNX1S8Chdx/VNViA0/u57AporFLREEY8NpfqgIhAIJSo7SLHgGFig97Gk4q3zhnnyqLQBixmxrHVdNbZFsh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@durable-streams%2fy-durable-streams@0.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":71174},"main":"./dist/index.cjs","type":"module","_from":"file:durable-streams-y-durable-streams-0.2.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"dev":"tsdown --watch","build":"tsdown","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:134a4b0e-bc2b-46ca-9c84-e3d3d25a652e"}},"_resolved":"/tmp/6e39d64c75029b0d700b02555048f01e/durable-streams-y-durable-streams-0.2.2.tgz","_integrity":"sha512-9bD+A480+wxv/zDa4KKoSTmr4iGJ1fowZms0nILKoR44CmBg2vXY0pscfo3leVnH2N+TGSyp0vaOjOsFHv7BbA==","repository":{"url":"git+https://github.com/durable-streams/durable-streams.git","type":"git","directory":"packages/y-durable-streams"},"_npmVersion":"11.11.0","description":"Yjs provider for Durable Streams - sync Yjs documents over append-only streams","directories":{},"sideEffects":false,"_nodeVersion":"22.22.0","dependencies":{"@durable-streams/client":"0.2.2"},"_hasShrinkwrap":false,"devDependencies":{"yjs":"^13.6.24","lib0":"^0.2.99","tsdown":"^0.9.0","y-protocols":"^1.0.6","@durable-streams/server":"0.2.2"},"peerDependencies":{"yjs":"^13.0.0","lib0":"^0.2.0","y-protocols":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/y-durable-streams_0.2.2_1772832605219_0.26818143497925884","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@durable-streams/y-durable-streams","version":"0.2.3","keywords":["yjs","durable-streams","crdt","sync","collaborative","real-time","typescript"],"author":{"name":"Durable Stream contributors"},"license":"Apache-2.0","_id":"@durable-streams/y-durable-streams@0.2.3","maintainers":[{"name":"kylemathews","email":"mathews.kyle@gmail.com"}],"homepage":"https://github.com/durable-streams/durable-streams#readme","bugs":{"url":"https://github.com/durable-streams/durable-streams/issues"},"dist":{"shasum":"c09961a91f3e1ff8a55e34f71b71800c36aae09e","tarball":"https://registry.npmjs.org/@durable-streams/y-durable-streams/-/y-durable-streams-0.2.3.tgz","fileCount":19,"integrity":"sha512-lg2FGrEuaCPNabJXEk6dLpyqgWLoX0UZg/mWrKF8DwaVzHw12NaF6l06QZwnMnXplN++j5+mSpUArOzfHmnHmw==","signatures":[{"sig":"MEUCIAr5pssEG0oJkVhu+7nieBMsjaof2uZUiOZ8QyhmSD2dAiEAzua7l4h4RPrfpV45oxGNPdI5g8tgfukd0y1mXpojo68=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@durable-streams%2fy-durable-streams@0.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":202815},"main":"./dist/index.cjs","type":"module","_from":"file:durable-streams-y-durable-streams-0.2.3.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./server":{"import":{"types":"./dist/server/index.d.ts","default":"./dist/server/index.js"},"require":{"types":"./dist/server/index.d.cts","default":"./dist/server/index.cjs"}},"./package.json":"./package.json"},"scripts":{"dev":"tsdown --watch","build":"tsdown","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:134a4b0e-bc2b-46ca-9c84-e3d3d25a652e"}},"_resolved":"/tmp/9ef0c0148ef89240a22a274c5a28db5a/durable-streams-y-durable-streams-0.2.3.tgz","_integrity":"sha512-lg2FGrEuaCPNabJXEk6dLpyqgWLoX0UZg/mWrKF8DwaVzHw12NaF6l06QZwnMnXplN++j5+mSpUArOzfHmnHmw==","repository":{"url":"git+https://github.com/durable-streams/durable-streams.git","type":"git","directory":"packages/y-durable-streams"},"_npmVersion":"11.12.0","description":"Yjs provider for Durable Streams - sync Yjs documents over append-only streams","directories":{},"sideEffects":false,"_nodeVersion":"22.22.1","dependencies":{"yjs":"^13.6.24","lib0":"^0.2.99","y-protocols":"^1.0.6","@durable-streams/client":"0.2.3"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.9.0","@durable-streams/server":"0.2.3"},"peerDependencies":{"yjs":"^13.0.0","lib0":"^0.2.0","y-protocols":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/y-durable-streams_0.2.3_1774318547897_0.4783098649993327","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@durable-streams/y-durable-streams","version":"0.2.4","keywords":["yjs","durable-streams","crdt","sync","collaborative","real-time","typescript","tanstack-intent"],"author":{"name":"Durable Stream contributors"},"license":"Apache-2.0","_id":"@durable-streams/y-durable-streams@0.2.4","maintainers":[{"name":"dev-npm-publisher-2","email":"dev@electric-sql.com"},{"name":"kylemathews","email":"mathews.kyle@gmail.com"}],"homepage":"https://github.com/durable-streams/durable-streams#readme","bugs":{"url":"https://github.com/durable-streams/durable-streams/issues"},"bin":{"intent":"bin/intent.js"},"dist":{"shasum":"8e5b9ddb0664ca565dc69897c94b3ddf6cdc5f73","tarball":"https://registry.npmjs.org/@durable-streams/y-durable-streams/-/y-durable-streams-0.2.4.tgz","fileCount":23,"integrity":"sha512-XwhVSWEpy7WaGyyTxWECYIQ4nmvoseJ99dIhwm/G5IgIwUxofzk9DIQ5DQ1dMQ45ztLMQyYlbS8C2leU7MMwrA==","signatures":[{"sig":"MEUCIH3ELw33Bbq/9/kbHqvxNmWqnVlJVJt+R14YyMQHXKwtAiEA0m7T6UjoR7RWmc9HJZd0ht4g4rio4VVuQbSydy1DTEk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@durable-streams%2fy-durable-streams@0.2.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":258279},"main":"./dist/index.cjs","type":"module","_from":"file:durable-streams-y-durable-streams-0.2.4.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./server":{"import":{"types":"./dist/server/index.d.ts","default":"./dist/server/index.js"},"require":{"types":"./dist/server/index.d.cts","default":"./dist/server/index.cjs"}},"./package.json":"./package.json"},"scripts":{"dev":"tsdown --watch","build":"tsdown","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:134a4b0e-bc2b-46ca-9c84-e3d3d25a652e"}},"_resolved":"/tmp/37b5eb061b2eeddbf6d61eb08a761e6a/durable-streams-y-durable-streams-0.2.4.tgz","_integrity":"sha512-XwhVSWEpy7WaGyyTxWECYIQ4nmvoseJ99dIhwm/G5IgIwUxofzk9DIQ5DQ1dMQ45ztLMQyYlbS8C2leU7MMwrA==","repository":{"url":"git+https://github.com/durable-streams/durable-streams.git","type":"git","directory":"packages/y-durable-streams"},"_npmVersion":"11.12.1","description":"Yjs provider for Durable Streams - sync Yjs documents over append-only streams","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","dependencies":{"yjs":"^13.6.24","lib0":"^0.2.99","y-protocols":"^1.0.6","@durable-streams/client":"0.2.3"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.9.0","@tanstack/intent":"latest","@durable-streams/server":"0.3.0"},"peerDependencies":{"yjs":"^13.0.0","lib0":"^0.2.0","y-protocols":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/y-durable-streams_0.2.4_1776088516894_0.516381347353607","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@durable-streams/y-durable-streams","version":"0.2.5","keywords":["yjs","durable-streams","crdt","sync","collaborative","real-time","typescript","tanstack-intent"],"author":{"name":"Durable Stream contributors"},"license":"Apache-2.0","_id":"@durable-streams/y-durable-streams@0.2.5","maintainers":[{"name":"dev-npm-publisher-2","email":"dev@electric-sql.com"},{"name":"kylemathews","email":"mathews.kyle@gmail.com"}],"homepage":"https://github.com/durable-streams/durable-streams#readme","bugs":{"url":"https://github.com/durable-streams/durable-streams/issues"},"bin":{"intent":"bin/intent.js"},"dist":{"shasum":"bce8feb16d8f7af3732e0dcf8066bfc54a42f2f7","tarball":"https://registry.npmjs.org/@durable-streams/y-durable-streams/-/y-durable-streams-0.2.5.tgz","fileCount":23,"integrity":"sha512-BOCCEQ5UCcfxNx3qyUen5WB2VytizIu1j/flZQpvK/yjLBtboeV+vYq0SIBXGaylvpHao/GpDCUhwdlpzjxpfg==","signatures":[{"sig":"MEYCIQDJcEG2LKrj3YP5zqAODosHi5Y2Q3noabH9DJtps1qIwwIhANtsJOvlG9QS4bqVIcTRR0Ba58yrGKYfKoOZ6lnbIIx4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@durable-streams%2fy-durable-streams@0.2.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":265175},"main":"./dist/index.cjs","type":"module","_from":"file:durable-streams-y-durable-streams-0.2.5.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./server":{"import":{"types":"./dist/server/index.d.ts","default":"./dist/server/index.js"},"require":{"types":"./dist/server/index.d.cts","default":"./dist/server/index.cjs"}},"./package.json":"./package.json"},"scripts":{"dev":"tsdown --watch","build":"tsdown","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:134a4b0e-bc2b-46ca-9c84-e3d3d25a652e"}},"_resolved":"/tmp/64d5825d159efc2aca111d03670a3920/durable-streams-y-durable-streams-0.2.5.tgz","_integrity":"sha512-BOCCEQ5UCcfxNx3qyUen5WB2VytizIu1j/flZQpvK/yjLBtboeV+vYq0SIBXGaylvpHao/GpDCUhwdlpzjxpfg==","repository":{"url":"git+https://github.com/durable-streams/durable-streams.git","type":"git","directory":"packages/y-durable-streams"},"_npmVersion":"11.14.1","description":"Yjs provider for Durable Streams - sync Yjs documents over append-only streams","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","dependencies":{"yjs":"^13.6.24","lib0":"^0.2.99","y-protocols":"^1.0.6","@durable-streams/client":"0.2.4"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.9.0","@tanstack/intent":"latest","@durable-streams/server":"0.3.2"},"peerDependencies":{"yjs":"^13.0.0","lib0":"^0.2.0","y-protocols":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/y-durable-streams_0.2.5_1779128120490_0.8300257762003891","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@durable-streams/y-durable-streams","version":"0.2.6","keywords":["yjs","durable-streams","crdt","sync","collaborative","real-time","typescript","tanstack-intent"],"author":{"name":"Durable Stream contributors"},"license":"Apache-2.0","_id":"@durable-streams/y-durable-streams@0.2.6","maintainers":[{"name":"dev-npm-publisher-2","email":"dev@electric-sql.com"},{"name":"kylemathews","email":"mathews.kyle@gmail.com"}],"homepage":"https://github.com/durable-streams/durable-streams#readme","bugs":{"url":"https://github.com/durable-streams/durable-streams/issues"},"bin":{"intent":"bin/intent.js"},"dist":{"shasum":"34fbf14f6c449e81c4eff29065e832cb9a87a84f","tarball":"https://registry.npmjs.org/@durable-streams/y-durable-streams/-/y-durable-streams-0.2.6.tgz","fileCount":23,"integrity":"sha512-+P5ras9guMQMN4qHoGzVxmt0n35tDRqj/cVR5EDDOFMUy7IyhGipVelc75h5e/iOQcUUR3rHe7PNCyyay1QzCQ==","signatures":[{"sig":"MEUCIQCj6ipovWq2kMGn0GHxZSMTU33uYLsxzY9xS1ceLa3yNwIgHnIpRPhrt4JVHBsVtwIYGaEeABUvQsmrPxhDPOuLC+M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@durable-streams%2fy-durable-streams@0.2.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":265175},"main":"./dist/index.cjs","type":"module","_from":"file:durable-streams-y-durable-streams-0.2.6.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./server":{"import":{"types":"./dist/server/index.d.ts","default":"./dist/server/index.js"},"require":{"types":"./dist/server/index.d.cts","default":"./dist/server/index.cjs"}},"./package.json":"./package.json"},"scripts":{"dev":"tsdown --watch","build":"tsdown","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:134a4b0e-bc2b-46ca-9c84-e3d3d25a652e"}},"_resolved":"/tmp/3aabdda55ee54c1187f12acf75b51478/durable-streams-y-durable-streams-0.2.6.tgz","_integrity":"sha512-+P5ras9guMQMN4qHoGzVxmt0n35tDRqj/cVR5EDDOFMUy7IyhGipVelc75h5e/iOQcUUR3rHe7PNCyyay1QzCQ==","repository":{"url":"git+https://github.com/durable-streams/durable-streams.git","type":"git","directory":"packages/y-durable-streams"},"_npmVersion":"11.16.0","description":"Yjs provider for Durable Streams - sync Yjs documents over append-only streams","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","dependencies":{"yjs":"^13.6.24","lib0":"^0.2.99","y-protocols":"^1.0.6","@durable-streams/client":"0.2.5"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.9.0","@tanstack/intent":"latest","@durable-streams/server":"0.3.4"},"peerDependencies":{"yjs":"^13.0.0","lib0":"^0.2.0","y-protocols":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/y-durable-streams_0.2.6_1779971602209_0.6057979653729713","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"@durable-streams/y-durable-streams","version":"0.2.7","keywords":["yjs","durable-streams","crdt","sync","collaborative","real-time","typescript","tanstack-intent"],"author":{"name":"Durable Stream contributors"},"license":"Apache-2.0","_id":"@durable-streams/y-durable-streams@0.2.7","maintainers":[{"name":"dev-npm-publisher-2","email":"dev@electric-sql.com"},{"name":"kylemathews","email":"mathews.kyle@gmail.com"}],"homepage":"https://github.com/durable-streams/durable-streams#readme","bugs":{"url":"https://github.com/durable-streams/durable-streams/issues"},"bin":{"intent":"bin/intent.js"},"dist":{"shasum":"428275a7af40064dfbb1faf14502abcf6fa398f5","tarball":"https://registry.npmjs.org/@durable-streams/y-durable-streams/-/y-durable-streams-0.2.7.tgz","fileCount":23,"integrity":"sha512-AxHQ0PkW4S4+vyPpyWCUy0IRFOp5c+SmprpmORairZEGV4xeF9EdMIhMm/awgqFgddkGdIhlswvuRDTXIZdv6g==","signatures":[{"sig":"MEYCIQDE5NwjItv+eXdnCW3bt1LqSI04INpQjrvhz99kxJddPAIhAMtnHRJml1bDd51opXZMxVop5QIjr01HARcurRWY83cf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@durable-streams%2fy-durable-streams@0.2.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":265175},"main":"./dist/index.cjs","type":"module","_from":"file:durable-streams-y-durable-streams-0.2.7.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./server":{"import":{"types":"./dist/server/index.d.ts","default":"./dist/server/index.js"},"require":{"types":"./dist/server/index.d.cts","default":"./dist/server/index.cjs"}},"./package.json":"./package.json"},"scripts":{"dev":"tsdown --watch","build":"tsdown","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:134a4b0e-bc2b-46ca-9c84-e3d3d25a652e"}},"_resolved":"/tmp/8f7fcab83122bd321a193dab2ba3e310/durable-streams-y-durable-streams-0.2.7.tgz","_integrity":"sha512-AxHQ0PkW4S4+vyPpyWCUy0IRFOp5c+SmprpmORairZEGV4xeF9EdMIhMm/awgqFgddkGdIhlswvuRDTXIZdv6g==","repository":{"url":"git+https://github.com/durable-streams/durable-streams.git","type":"git","directory":"packages/y-durable-streams"},"_npmVersion":"11.16.0","description":"Yjs provider for Durable Streams - sync Yjs documents over append-only streams","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","dependencies":{"yjs":"^13.6.24","lib0":"^0.2.99","y-protocols":"^1.0.6","@durable-streams/client":"0.2.6"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.9.0","@tanstack/intent":"latest","@durable-streams/server":"0.3.5"},"peerDependencies":{"yjs":"^13.0.0","lib0":"^0.2.0","y-protocols":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/y-durable-streams_0.2.7_1780312094804_0.36903135859909786","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"@durable-streams/y-durable-streams","version":"0.2.8","keywords":["yjs","durable-streams","crdt","sync","collaborative","real-time","typescript","tanstack-intent"],"author":{"name":"Durable Stream contributors"},"license":"Apache-2.0","_id":"@durable-streams/y-durable-streams@0.2.8","maintainers":[{"name":"dev-npm-publisher-2","email":"dev@electric-sql.com"},{"name":"kylemathews","email":"mathews.kyle@gmail.com"}],"homepage":"https://github.com/durable-streams/durable-streams#readme","bugs":{"url":"https://github.com/durable-streams/durable-streams/issues"},"bin":{"intent":"bin/intent.js"},"dist":{"shasum":"1e19185764e255e80a2617affb13aa85f425d0e8","tarball":"https://registry.npmjs.org/@durable-streams/y-durable-streams/-/y-durable-streams-0.2.8.tgz","fileCount":24,"integrity":"sha512-kSp119Xgt05INX20kG5hHdF2X3ne/j4lCReNZsilhdfEV0QwW0VsGdbWV3hQoCvJ9DkBS5XcS1CslbktAUMtuQ==","signatures":[{"sig":"MEYCIQComxcb+xsUNJe923KnFBC+YdQ4EQ0tT+66oYQuU8pg3QIhAOfW7t+UAKdF3Lcjm8ggEX8vZwxZpy2JgkI+zq0KxRLZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@durable-streams%2fy-durable-streams@0.2.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":299074},"main":"./dist/index.cjs","type":"module","_from":"file:durable-streams-y-durable-streams-0.2.8.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./server":{"import":{"types":"./dist/server/index.d.ts","default":"./dist/server/index.js"},"require":{"types":"./dist/server/index.d.cts","default":"./dist/server/index.cjs"}},"./package.json":"./package.json"},"scripts":{"dev":"tsdown --watch","build":"tsdown","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:134a4b0e-bc2b-46ca-9c84-e3d3d25a652e"}},"_resolved":"/tmp/3e3eb6992a4ef1b810edca9ca02b59e9/durable-streams-y-durable-streams-0.2.8.tgz","_integrity":"sha512-kSp119Xgt05INX20kG5hHdF2X3ne/j4lCReNZsilhdfEV0QwW0VsGdbWV3hQoCvJ9DkBS5XcS1CslbktAUMtuQ==","repository":{"url":"git+https://github.com/durable-streams/durable-streams.git","type":"git","directory":"packages/y-durable-streams"},"_npmVersion":"12.0.1","description":"Yjs provider for Durable Streams - sync Yjs documents over append-only streams","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"yjs":"^13.6.24","lib0":"^0.2.99","y-protocols":"^1.0.6","@durable-streams/client":"0.2.6"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.9.0","@tanstack/intent":"latest","@durable-streams/server":"0.3.8"},"peerDependencies":{"yjs":"^13.0.0","lib0":"^0.2.0","y-protocols":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/y-durable-streams_0.2.8_1784239412146_0.8354242574877355","host":"s3://npm-registry-packages-npm-production"}},"0.2.9":{"name":"@durable-streams/y-durable-streams","description":"Yjs provider for Durable Streams - sync Yjs documents over append-only streams","version":"0.2.9","author":{"name":"Durable Stream contributors"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/durable-streams/durable-streams.git","directory":"packages/y-durable-streams"},"bugs":{"url":"https://github.com/durable-streams/durable-streams/issues"},"keywords":["yjs","durable-streams","crdt","sync","collaborative","real-time","typescript","tanstack-intent"],"bin":{"intent":"bin/intent.js"},"type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./server":{"import":{"types":"./dist/server/index.d.ts","default":"./dist/server/index.js"},"require":{"types":"./dist/server/index.d.cts","default":"./dist/server/index.cjs"}},"./package.json":"./package.json"},"sideEffects":false,"dependencies":{"lib0":"^0.2.99","y-protocols":"^1.0.6","yjs":"^13.6.24","@durable-streams/client":"0.2.7"},"devDependencies":{"@tanstack/intent":"latest","tsdown":"^0.9.0","@durable-streams/server":"0.3.9"},"peerDependencies":{"lib0":"^0.2.0","y-protocols":"^1.0.0","yjs":"^13.0.0"},"engines":{"node":">=18.0.0"},"scripts":{"build":"tsdown","dev":"tsdown --watch","typecheck":"tsc --noEmit"},"_id":"@durable-streams/y-durable-streams@0.2.9","homepage":"https://github.com/durable-streams/durable-streams#readme","_integrity":"sha512-Zi+UdUkwb0pfclbfHbJum5UGS1EOp4F5nPQtEn28DdsyGWQ3uPJiHdU6S1KS+cB33IKYPd8dPXWvWY7IkQs7Xw==","_resolved":"/tmp/51ca85cf92640a51a4d485a50e8eb0b8/durable-streams-y-durable-streams-0.2.9.tgz","_from":"file:durable-streams-y-durable-streams-0.2.9.tgz","_nodeVersion":"22.23.2","_npmVersion":"12.0.2","dist":{"integrity":"sha512-Zi+UdUkwb0pfclbfHbJum5UGS1EOp4F5nPQtEn28DdsyGWQ3uPJiHdU6S1KS+cB33IKYPd8dPXWvWY7IkQs7Xw==","shasum":"eb9fb191e45cb91a65c2603efea331d937430a67","tarball":"https://registry.npmjs.org/@durable-streams/y-durable-streams/-/y-durable-streams-0.2.9.tgz","fileCount":24,"unpackedSize":299074,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@durable-streams%2fy-durable-streams@0.2.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDZUwpxq5OSkXU92wkkIeT2zsBbXgR1zb335DrMjHCHHgIhAKZIJw9pTvOWM3LGnZDvO7AJ5K5pHDNTMmCeTUjgVkDv"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:134a4b0e-bc2b-46ca-9c84-e3d3d25a652e"}},"directories":{},"maintainers":[{"name":"dev-npm-publisher-2","email":"dev@electric-sql.com"},{"name":"kylemathews","email":"mathews.kyle@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/y-durable-streams_0.2.9_1789060675205_0.36456318748793803"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-09T01:04:28.527Z","modified":"2026-09-10T17:17:55.684Z","0.1.2":"2026-01-09T01:04:28.797Z","0.1.4":"2026-01-21T23:15:08.842Z","0.2.0":"2026-01-22T16:32:03.846Z","0.2.1":"2026-01-29T19:24:42.684Z","0.2.2":"2026-03-06T21:30:05.348Z","0.2.3":"2026-03-24T02:15:48.045Z","0.2.4":"2026-04-13T13:55:17.049Z","0.2.5":"2026-05-18T18:15:20.649Z","0.2.6":"2026-05-28T12:33:22.380Z","0.2.7":"2026-06-01T11:08:14.968Z","0.2.8":"2026-07-16T22:03:32.300Z","0.2.9":"2026-09-10T17:17:55.325Z"},"bugs":{"url":"https://github.com/durable-streams/durable-streams/issues"},"author":{"name":"Durable Stream contributors"},"license":"Apache-2.0","homepage":"https://github.com/durable-streams/durable-streams#readme","keywords":["yjs","durable-streams","crdt","sync","collaborative","real-time","typescript","tanstack-intent"],"repository":{"type":"git","url":"git+https://github.com/durable-streams/durable-streams.git","directory":"packages/y-durable-streams"},"description":"Yjs provider for Durable Streams - sync Yjs documents over append-only streams","maintainers":[{"name":"dev-npm-publisher-2","email":"dev@electric-sql.com"},{"name":"kylemathews","email":"mathews.kyle@gmail.com"}],"readme":"# @durable-streams/y-durable-streams\n\nYjs provider for Durable Streams - sync Yjs documents over HTTP with automatic server-side compaction and optional awareness (presence) support.\n\n## Overview\n\nThis package provides a Yjs provider that syncs documents using the Yjs Durable Streams Protocol. Unlike WebSocket-based providers, it uses standard HTTP (SSE by default, with long-polling as an alternative) plus automatic server-side compaction, making it simpler to deploy and scale.\n\nKey benefits:\n\n- **No WebSocket infrastructure** - Works with standard HTTP load balancers and CDNs\n- **Automatic compaction** - Server manages document snapshots to keep sync fast\n- **Snapshot webhooks** - Wake external workers to persist the latest snapshot\n- **Scalable** - Stateless server design, documents stored in durable streams\n- **Presence support** - Optional awareness for cursors, selections, and user status\n\n## Installation\n\n```bash\nnpm install @durable-streams/y-durable-streams yjs y-protocols lib0\n```\n\n## Quick Start\n\n```typescript\nimport { YjsProvider } from \"@durable-streams/y-durable-streams\"\nimport * as Y from \"yjs\"\nimport { Awareness } from \"y-protocols/awareness\"\n\nconst doc = new Y.Doc()\nconst awareness = new Awareness(doc)\n\nconst provider = new YjsProvider({\n  doc,\n  baseUrl: \"http://localhost:4438/v1/yjs/my-service\",\n  docId: \"my-document\",\n  awareness,\n})\n\nprovider.on(\"synced\", (synced) => {\n  console.log(\"Synced:\", synced)\n})\n```\n\n## Usage\n\n### Document Only (No Presence)\n\n```typescript\nconst provider = new YjsProvider({\n  doc,\n  baseUrl: \"http://localhost:4438/v1/yjs/my-service\",\n  docId: \"my-document\",\n})\n```\n\n### With Authentication\n\n```typescript\nconst provider = new YjsProvider({\n  doc,\n  baseUrl: \"http://localhost:4438/v1/yjs/my-service\",\n  docId: \"my-document\",\n  awareness,\n  headers: {\n    Authorization: \"Bearer your-token\",\n  },\n})\n```\n\n### Manual Connection\n\n```typescript\nconst provider = new YjsProvider({\n  doc,\n  baseUrl,\n  docId,\n  connect: false, // Don't connect automatically\n})\n\n// Set up listeners first\nprovider.on(\"synced\", handleSync)\nprovider.on(\"error\", handleError)\n\n// Then connect\nawait provider.connect()\n```\n\n### Event Handling\n\n```typescript\n// Sync state changes\nprovider.on(\"synced\", (synced: boolean) => {\n  if (synced) {\n    console.log(\"Document is synced with server\")\n  }\n})\n\n// Connection status changes\nprovider.on(\"status\", (status: YjsProviderStatus) => {\n  console.log(\"Status:\", status) // \"disconnected\" | \"connecting\" | \"connected\"\n})\n\n// Error handling\nprovider.on(\"error\", (error: Error) => {\n  console.error(\"Provider error:\", error)\n})\n```\n\n### Cleanup\n\n```typescript\n// Disconnect temporarily\nprovider.disconnect()\n\n// Reconnect\nawait provider.connect()\n\n// Destroy permanently\nprovider.destroy()\n```\n\n## API\n\n### YjsProvider\n\n```typescript\nclass YjsProvider {\n  constructor(options: YjsProviderOptions)\n\n  // Properties\n  readonly doc: Y.Doc\n  readonly synced: boolean\n  readonly connected: boolean\n  readonly connecting: boolean\n\n  // Methods\n  connect(): Promise<void>\n  disconnect(): Promise<void>\n  destroy(): void\n\n  // Events\n  on(event: \"synced\", handler: (synced: boolean) => void): void\n  on(event: \"status\", handler: (status: YjsProviderStatus) => void): void\n  on(event: \"error\", handler: (error: Error) => void): void\n}\n```\n\n### Options\n\n```typescript\ninterface YjsProviderOptions {\n  doc: Y.Doc\n  baseUrl: string // Yjs server URL, e.g. \"http://localhost:4438/v1/yjs/my-service\"\n  docId: string // Document identifier (may contain forward slashes)\n  awareness?: Awareness // Optional awareness for presence\n  headers?: HeadersRecord // Optional auth headers (static strings or () => string)\n  liveMode?: \"sse\" | \"long-poll\" // Live update transport (default: \"sse\")\n  connect?: boolean // Auto-connect on construction (default: true)\n}\n```\n\n## Server\n\nThe package includes a Yjs server that implements the protocol. For development/testing:\n\n```typescript\nimport { YjsServer } from \"@durable-streams/y-durable-streams/server\"\n\nconst server = new YjsServer({\n  port: 4438,\n  dsServerUrl: \"http://localhost:4437\", // Durable streams server\n})\n\nawait server.start()\nconsole.log(`Yjs server running at ${server.url}`)\n```\n\n### Snapshot webhooks\n\nSubscribe a webhook to be woken whenever a newer snapshot is available for a\nmatching document:\n\n```typescript\nawait fetch(\n  `${server.url}/v1/yjs/my-service/__ds/subscriptions/snapshot-archive`,\n  {\n    method: \"PUT\",\n    headers: { \"content-type\": \"application/json\" },\n    body: JSON.stringify({\n      type: \"webhook\",\n      events: [\"snapshot.available\"],\n      document_pattern: \"projects/**\",\n      webhook: { url: \"https://archive.example/hooks/yjs\" },\n      lease_ttl_ms: 30_000,\n    }),\n  }\n)\n```\n\n`document_pattern` is relative to the service's document namespace. `*`\nmatches one path segment and `**` matches recursively. The underlying Durable\nStreams server must support webhook subscriptions.\n\nWebhook requests use the standard Durable Streams subscription payload and\nsignature. A notification means one or more newer snapshots are available; it\ndoes not carry the snapshot bytes and may coalesce multiple compactions. For\neach pending `.index` stream, derive the document path and fetch its latest\nsnapshot with `?offset=snapshot`. Return `{ \"done\": true }` only after the\nsnapshot has been persisted successfully. New subscriptions observe future\nsnapshots and do not replay the snapshot that was current when they were\ncreated.\n\n## Conformance Tests\n\nThe package includes conformance tests to verify Yjs server implementations. By default, tests run against local test servers. To test against an external server:\n\n```bash\n# Run tests against an external Yjs server\nYJS_CONFORMANCE_URL=http://localhost:4438/v1/yjs/test pnpm vitest run --project y-durable-streams\n\n# Run tests with local test servers (default)\npnpm vitest run --project y-durable-streams\n```\n\nNote: The \"Server Restart\" test is skipped when using an external URL since it requires starting/stopping local servers.\n\n## Server Protocol API\n\nFor the complete protocol specification, see [YJS-PROTOCOL.md](./YJS-PROTOCOL.md).\n\n### Base URL Structure\n\nEach document is accessed via a single URL with query parameters:\n\n```\n{baseUrl}/docs/{docPath}?{queryParams}\n```\n\nWhere:\n\n- `baseUrl` is typically `http://host:port/v1/yjs/{service}`\n- `docPath` can include forward slashes (e.g., `project/chapter-1`)\n\n### Key Operations\n\n#### Snapshot Discovery\n\n```\nGET {baseUrl}/docs/{docPath}?offset=snapshot\n```\n\nReturns a **307 redirect** to either:\n\n- `?offset={N}_snapshot` if a snapshot exists\n- `?offset=-1` if no snapshot (read from beginning)\n\n#### Read Snapshot\n\n```\nGET {baseUrl}/docs/{docPath}?offset={N}_snapshot\n```\n\nReturns binary Yjs snapshot with `stream-next-offset` header indicating where to continue reading updates.\n\n#### Read/Write Updates\n\n```\nGET  {baseUrl}/docs/{docPath}?offset={N}&live=true\nPOST {baseUrl}/docs/{docPath}\n```\n\n- **Read**: Get updates from offset, optionally with `live=true` for long-polling\n- **Write**: POST raw Yjs update bytes (server handles lib0 framing)\n\n#### Awareness (Presence)\n\n```\nGET  {baseUrl}/docs/{docPath}?awareness=default&offset=now&live=true\nPOST {baseUrl}/docs/{docPath}?awareness=default\n```\n\nNamed awareness streams via query parameter. Uses SSE for real-time delivery.\n\n### Compaction\n\nThe server automatically compacts documents when updates exceed a threshold:\n\n1. Read current state (snapshot + updates)\n2. Create new snapshot at current offset\n3. Update internal index stream\n4. Delete old snapshot\n\nCompaction is transparent to clients - existing connections continue uninterrupted.\n\n### Error Responses\n\n| Status | Code                 | Meaning                  |\n| ------ | -------------------- | ------------------------ |\n| 400    | `INVALID_REQUEST`    | Invalid path or offset   |\n| 401    | `UNAUTHORIZED`       | Missing/invalid auth     |\n| 404    | `SNAPSHOT_NOT_FOUND` | Snapshot deleted (retry) |\n| 404    | `DOCUMENT_NOT_FOUND` | Document doesn't exist   |\n| 410    | `OFFSET_EXPIRED`     | Offset too old           |\n\n## How It Works\n\nThe provider connects to a Yjs server which manages document storage using durable streams:\n\n1. **Snapshot Discovery** - Client requests `?offset=snapshot`, server redirects to current snapshot or beginning\n2. **Snapshot Loading** - Binary Yjs state with `stream-next-offset` header for where to continue\n3. **Live Updates** - Long-poll for incremental updates from the offset\n4. **Awareness** - Optional SSE stream for presence (cursors, selections, user info)\n\nThe server automatically compacts documents when updates exceed a threshold, creating new snapshots. This keeps initial sync fast for new clients. The protocol uses a single URL per document with query parameters for different operations.\n\n## License\n\nApache-2.0\n","readmeFilename":"README.md"}