{"_id":"@affectively/aeon","_rev":"7-9bab6ec18ead866ff83a60ba1a9d93ef","name":"@affectively/aeon","dist-tags":{"latest":"5.0.1"},"versions":{"1.0.0":{"name":"@affectively/aeon","version":"1.0.0","keywords":["distributed","synchronization","sync","replication","versioning","migration","schema","crdt","collaboration","real-time","conflict-resolution","offline-first"],"author":{"name":"Affectively AI"},"license":"MIT","_id":"@affectively/aeon@1.0.0","maintainers":[{"name":"buley","email":"buley@outlook.com"}],"homepage":"https://github.com/affectively-ai/aeon#readme","bugs":{"url":"https://github.com/affectively-ai/aeon/issues"},"dist":{"shasum":"9f1c1d6ab725093e026ef46de15617ada4179125","tarball":"https://registry.npmjs.org/@affectively/aeon/-/aeon-1.0.0.tgz","fileCount":35,"integrity":"sha512-TbN+0VN5fDNKanG9RV9LwzXeHGCtecxxE4HwBMu78OL4D4cpJFNv4yQD2uSnGwu20tFX1j+dEaYlhGCzfqBnmw==","signatures":[{"sig":"MEUCIQC5PRKDcrpCYRYQIy4ileZ1h5Ub8uoUldsEPwSF4ZA9dAIgM4qFtKC/wbK/z9CUucy8xDe32RbHL24uR4ad2KX8/8s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1609298},"main":"./dist/index.cjs","type":"module","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"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./utils":{"import":{"types":"./dist/utils/index.d.ts","default":"./dist/utils/index.js"},"require":{"types":"./dist/utils/index.d.cts","default":"./dist/utils/index.cjs"}},"./crypto":{"import":{"types":"./dist/crypto/index.d.ts","default":"./dist/crypto/index.js"},"require":{"types":"./dist/crypto/index.d.cts","default":"./dist/crypto/index.cjs"}},"./versioning":{"import":{"types":"./dist/versioning/index.d.ts","default":"./dist/versioning/index.js"},"require":{"types":"./dist/versioning/index.d.cts","default":"./dist/versioning/index.cjs"}},"./distributed":{"import":{"types":"./dist/distributed/index.d.ts","default":"./dist/distributed/index.js"},"require":{"types":"./dist/distributed/index.d.cts","default":"./dist/distributed/index.cjs"}}},"scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","clean":"rm -rf dist","format":"prettier --write src","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"buley","email":"buley@outlook.com"},"repository":{"url":"git+https://github.com/affectively-ai/aeon.git","type":"git"},"_npmVersion":"11.8.0","description":"Distributed synchronization, schema versioning, and conflict resolution for real-time collaborative applications","directories":{},"_nodeVersion":"25.5.0","dependencies":{"eventemitter3":"^5.0.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","eslint":"^9.0.0","vitest":"^2.0.0","prettier":"^3.0.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"peerDependencies":{"@affectively/auth":"^1.0.0","@affectively/zk-encryption":"^1.0.0"},"peerDependenciesMeta":{"@affectively/auth":{"optional":true},"@affectively/zk-encryption":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/aeon_1.0.0_1770090118101_0.941686514493026","host":"s3://npm-registry-packages-npm-production"},"deprecated":"This package is deprecated and no longer supported. Do not use."},"1.1.0":{"name":"@affectively/aeon","version":"1.1.0","keywords":["distributed","synchronization","sync","replication","versioning","migration","schema","crdt","collaboration","real-time","conflict-resolution","offline-first"],"author":{"name":"Affectively AI"},"license":"MIT","_id":"@affectively/aeon@1.1.0","maintainers":[{"name":"buley","email":"buley@outlook.com"}],"homepage":"https://github.com/affectively-ai/aeon#readme","bugs":{"url":"https://github.com/affectively-ai/aeon/issues"},"dist":{"shasum":"1145f09c8aff5a8537fd1d201aec51b9c4975925","tarball":"https://registry.npmjs.org/@affectively/aeon/-/aeon-1.1.0.tgz","fileCount":71,"integrity":"sha512-4AMfBTxDgMb3XA5BSP29J2VlHNO8qs+rXmiv8gYp/4M2WvS1TcRP+9ljEGfli0LKdKc7MKy00QkXTs8gdXDI5A==","signatures":[{"sig":"MEQCIH5GWkZ6yKKASTDyIt1bMh09CBLlJ65NcmZSW9kMS35rAiA312+lf288jHSGSB2YMffDCvpzDCk7GZUtWn70H/vqyw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2484999},"main":"./dist/index.cjs","type":"module","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"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./utils":{"import":{"types":"./dist/utils/index.d.ts","default":"./dist/utils/index.js"},"require":{"types":"./dist/utils/index.d.cts","default":"./dist/utils/index.cjs"}},"./crypto":{"import":{"types":"./dist/crypto/index.d.ts","default":"./dist/crypto/index.js"},"require":{"types":"./dist/crypto/index.d.cts","default":"./dist/crypto/index.cjs"}},"./offline":{"import":{"types":"./dist/offline/index.d.ts","default":"./dist/offline/index.js"},"require":{"types":"./dist/offline/index.d.cts","default":"./dist/offline/index.cjs"}},"./presence":{"import":{"types":"./dist/presence/index.d.ts","default":"./dist/presence/index.js"},"require":{"types":"./dist/presence/index.d.cts","default":"./dist/presence/index.cjs"}},"./versioning":{"import":{"types":"./dist/versioning/index.d.ts","default":"./dist/versioning/index.js"},"require":{"types":"./dist/versioning/index.d.cts","default":"./dist/versioning/index.cjs"}},"./compression":{"import":{"types":"./dist/compression/index.d.ts","default":"./dist/compression/index.js"},"require":{"types":"./dist/compression/index.d.cts","default":"./dist/compression/index.cjs"}},"./distributed":{"import":{"types":"./dist/distributed/index.d.ts","default":"./dist/distributed/index.js"},"require":{"types":"./dist/distributed/index.d.cts","default":"./dist/distributed/index.cjs"}},"./persistence":{"import":{"types":"./dist/persistence/index.d.ts","default":"./dist/persistence/index.js"},"require":{"types":"./dist/persistence/index.d.cts","default":"./dist/persistence/index.cjs"}},"./optimization":{"import":{"types":"./dist/optimization/index.d.ts","default":"./dist/optimization/index.js"},"require":{"types":"./dist/optimization/index.d.cts","default":"./dist/optimization/index.cjs"}}},"scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","clean":"rm -rf dist","format":"prettier --write src","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"buley","email":"buley@outlook.com"},"repository":{"url":"git+https://github.com/affectively-ai/aeon.git","type":"git"},"_npmVersion":"11.8.0","description":"Distributed synchronization, schema versioning, and conflict resolution for real-time collaborative applications","directories":{},"_nodeVersion":"25.5.0","dependencies":{"eventemitter3":"^5.0.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","eslint":"^9.0.0","vitest":"^2.0.0","prettier":"^3.0.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"peerDependencies":{"@affectively/auth":"^1.0.0","@affectively/zk-encryption":"^1.0.0"},"peerDependenciesMeta":{"@affectively/auth":{"optional":true},"@affectively/zk-encryption":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/aeon_1.1.0_1770840087935_0.3140492917416995","host":"s3://npm-registry-packages-npm-production"},"deprecated":"This package is deprecated and no longer supported. Do not use."},"1.2.0":{"name":"@affectively/aeon","version":"1.2.0","keywords":["distributed","synchronization","sync","replication","versioning","migration","schema","crdt","collaboration","real-time","conflict-resolution","offline-first"],"author":{"name":"Affectively AI"},"license":"MIT","_id":"@affectively/aeon@1.2.0","maintainers":[{"name":"buley","email":"buley@outlook.com"}],"homepage":"https://github.com/affectively-ai/aeon#readme","bugs":{"url":"https://github.com/affectively-ai/aeon/issues"},"dist":{"shasum":"d8e464cd06ebd84fb411dbebe3f0a02f5d6d18d1","tarball":"https://registry.npmjs.org/@affectively/aeon/-/aeon-1.2.0.tgz","fileCount":71,"integrity":"sha512-K1D2X2iguKfVAGCHtWTbSmMzuEnj/oCHeUEMt6Tdqt2+MAJp5mtiVTxk3M5DLOy/OPJ0BRBLqMyClTmXI4sPHw==","signatures":[{"sig":"MEUCIBnpmVDj69vmFV/Ik+PO4f3JOsTKagEd0dj9ft4AJaF+AiEA9MUuKxme4CadwBZsXGd88kA26eoNpDriTVZlQf8qX3k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2555167},"main":"./dist/index.cjs","type":"module","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"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./utils":{"import":{"types":"./dist/utils/index.d.ts","default":"./dist/utils/index.js"},"require":{"types":"./dist/utils/index.d.cts","default":"./dist/utils/index.cjs"}},"./crypto":{"import":{"types":"./dist/crypto/index.d.ts","default":"./dist/crypto/index.js"},"require":{"types":"./dist/crypto/index.d.cts","default":"./dist/crypto/index.cjs"}},"./offline":{"import":{"types":"./dist/offline/index.d.ts","default":"./dist/offline/index.js"},"require":{"types":"./dist/offline/index.d.cts","default":"./dist/offline/index.cjs"}},"./presence":{"import":{"types":"./dist/presence/index.d.ts","default":"./dist/presence/index.js"},"require":{"types":"./dist/presence/index.d.cts","default":"./dist/presence/index.cjs"}},"./versioning":{"import":{"types":"./dist/versioning/index.d.ts","default":"./dist/versioning/index.js"},"require":{"types":"./dist/versioning/index.d.cts","default":"./dist/versioning/index.cjs"}},"./compression":{"import":{"types":"./dist/compression/index.d.ts","default":"./dist/compression/index.js"},"require":{"types":"./dist/compression/index.d.cts","default":"./dist/compression/index.cjs"}},"./distributed":{"import":{"types":"./dist/distributed/index.d.ts","default":"./dist/distributed/index.js"},"require":{"types":"./dist/distributed/index.d.cts","default":"./dist/distributed/index.cjs"}},"./persistence":{"import":{"types":"./dist/persistence/index.d.ts","default":"./dist/persistence/index.js"},"require":{"types":"./dist/persistence/index.d.cts","default":"./dist/persistence/index.cjs"}},"./optimization":{"import":{"types":"./dist/optimization/index.d.ts","default":"./dist/optimization/index.js"},"require":{"types":"./dist/optimization/index.d.cts","default":"./dist/optimization/index.cjs"}}},"scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","clean":"rm -rf dist","format":"prettier --write src","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"buley","email":"buley@outlook.com"},"repository":{"url":"git+https://github.com/affectively-ai/aeon.git","type":"git"},"_npmVersion":"11.8.0","description":"Distributed synchronization, schema versioning, and conflict resolution for real-time collaborative applications","directories":{},"_nodeVersion":"25.5.0","dependencies":{"eventemitter3":"^5.0.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","eslint":"^9.0.0","vitest":"^2.0.0","prettier":"^3.0.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"peerDependencies":{"@affectively/auth":"^1.0.0","@affectively/zk-encryption":"^1.0.0"},"peerDependenciesMeta":{"@affectively/auth":{"optional":true},"@affectively/zk-encryption":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/aeon_1.2.0_1770950433802_0.07877320089221906","host":"s3://npm-registry-packages-npm-production"},"deprecated":"This package is deprecated and no longer supported. Do not use."},"1.3.0":{"name":"@affectively/aeon","version":"1.3.0","keywords":["distributed","synchronization","sync","replication","versioning","migration","schema","crdt","collaboration","real-time","conflict-resolution","offline-first"],"author":{"name":"Affectively AI"},"license":"MIT","_id":"@affectively/aeon@1.3.0","maintainers":[{"name":"buley","email":"buley@outlook.com"}],"homepage":"https://github.com/affectively-ai/aeon#readme","bugs":{"url":"https://github.com/affectively-ai/aeon/issues"},"dist":{"shasum":"bf5b841eaeba46ec586d438ba8572097212a8c54","tarball":"https://registry.npmjs.org/@affectively/aeon/-/aeon-1.3.0.tgz","fileCount":71,"integrity":"sha512-fU1xXhJF0bjjuwsSZjszko6iJM8+P6oHeq1qvKgHj17Rcm1m4nFBO4pBdT0/bDl57ytJLOXlKC8RdFbZPaTisg==","signatures":[{"sig":"MEUCIE2tc0+hFs5VTv+PSQzLKBurKhBqQ48aDRtYHTdIX4tPAiEApsjOxCxIiJIkSMtCJqlr5PNhHConHUg1bdr/5Be5VMo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2552097},"main":"./dist/index.cjs","type":"module","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"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./utils":{"import":{"types":"./dist/utils/index.d.ts","default":"./dist/utils/index.js"},"require":{"types":"./dist/utils/index.d.cts","default":"./dist/utils/index.cjs"}},"./crypto":{"import":{"types":"./dist/crypto/index.d.ts","default":"./dist/crypto/index.js"},"require":{"types":"./dist/crypto/index.d.cts","default":"./dist/crypto/index.cjs"}},"./offline":{"import":{"types":"./dist/offline/index.d.ts","default":"./dist/offline/index.js"},"require":{"types":"./dist/offline/index.d.cts","default":"./dist/offline/index.cjs"}},"./presence":{"import":{"types":"./dist/presence/index.d.ts","default":"./dist/presence/index.js"},"require":{"types":"./dist/presence/index.d.cts","default":"./dist/presence/index.cjs"}},"./versioning":{"import":{"types":"./dist/versioning/index.d.ts","default":"./dist/versioning/index.js"},"require":{"types":"./dist/versioning/index.d.cts","default":"./dist/versioning/index.cjs"}},"./compression":{"import":{"types":"./dist/compression/index.d.ts","default":"./dist/compression/index.js"},"require":{"types":"./dist/compression/index.d.cts","default":"./dist/compression/index.cjs"}},"./distributed":{"import":{"types":"./dist/distributed/index.d.ts","default":"./dist/distributed/index.js"},"require":{"types":"./dist/distributed/index.d.cts","default":"./dist/distributed/index.cjs"}},"./persistence":{"import":{"types":"./dist/persistence/index.d.ts","default":"./dist/persistence/index.js"},"require":{"types":"./dist/persistence/index.d.cts","default":"./dist/persistence/index.cjs"}},"./optimization":{"import":{"types":"./dist/optimization/index.d.ts","default":"./dist/optimization/index.js"},"require":{"types":"./dist/optimization/index.d.cts","default":"./dist/optimization/index.cjs"}}},"scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","clean":"rm -rf dist","format":"prettier --write src","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"buley","email":"buley@outlook.com"},"repository":{"url":"git+https://github.com/affectively-ai/aeon.git","type":"git"},"_npmVersion":"11.8.0","description":"Distributed synchronization, schema versioning, and conflict resolution for real-time collaborative applications","directories":{},"_nodeVersion":"25.5.0","dependencies":{"eventemitter3":"^5.0.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","eslint":"^9.0.0","vitest":"^2.0.0","prettier":"^3.0.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"peerDependencies":{"@affectively/auth":"^1.0.0","@affectively/zk-encryption":"^1.0.0","@affectively/aeon-pages-react":"^1.0.0"},"peerDependenciesMeta":{"@affectively/auth":{"optional":true},"@affectively/zk-encryption":{"optional":true},"@affectively/aeon-pages-react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/aeon_1.3.0_1771311130518_0.271871117805081","host":"s3://npm-registry-packages-npm-production"},"deprecated":"This package is deprecated and no longer supported. Do not use."},"1.3.1":{"name":"@affectively/aeon","version":"1.3.1","keywords":["distributed","synchronization","sync","replication","versioning","migration","schema","crdt","collaboration","real-time","conflict-resolution","offline-first"],"author":{"name":"Affectively AI"},"license":"MIT","_id":"@affectively/aeon@1.3.1","maintainers":[{"name":"buley","email":"buley@outlook.com"}],"homepage":"https://github.com/affectively-ai/aeon#readme","bugs":{"url":"https://github.com/affectively-ai/aeon/issues"},"dist":{"shasum":"48fd7defd8f628ced071b34722342a3e08e23e58","tarball":"https://registry.npmjs.org/@affectively/aeon/-/aeon-1.3.1.tgz","fileCount":71,"integrity":"sha512-FYhWFDcJEmiu5dGQzmDDoyXyU8Pb0+4q2Ss2tF3tuj9vWE2YP2sqanoJPlgyhu3RtuYHnDGiKwiLKWZ7mKke1A==","signatures":[{"sig":"MEYCIQDsJKRWgiuWM7KXCC5y0a1dUZiqJWzJE3RlpZ7sU+shpwIhANtYPN2X1isPfNw9WGMT43TWDGYoK9n0qcE7F5j6LY+n","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2506384},"main":"./dist/index.cjs","type":"module","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"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./utils":{"import":{"types":"./dist/utils/index.d.ts","default":"./dist/utils/index.js"},"require":{"types":"./dist/utils/index.d.cts","default":"./dist/utils/index.cjs"}},"./crypto":{"import":{"types":"./dist/crypto/index.d.ts","default":"./dist/crypto/index.js"},"require":{"types":"./dist/crypto/index.d.cts","default":"./dist/crypto/index.cjs"}},"./offline":{"import":{"types":"./dist/offline/index.d.ts","default":"./dist/offline/index.js"},"require":{"types":"./dist/offline/index.d.cts","default":"./dist/offline/index.cjs"}},"./presence":{"import":{"types":"./dist/presence/index.d.ts","default":"./dist/presence/index.js"},"require":{"types":"./dist/presence/index.d.cts","default":"./dist/presence/index.cjs"}},"./versioning":{"import":{"types":"./dist/versioning/index.d.ts","default":"./dist/versioning/index.js"},"require":{"types":"./dist/versioning/index.d.cts","default":"./dist/versioning/index.cjs"}},"./compression":{"import":{"types":"./dist/compression/index.d.ts","default":"./dist/compression/index.js"},"require":{"types":"./dist/compression/index.d.cts","default":"./dist/compression/index.cjs"}},"./distributed":{"import":{"types":"./dist/distributed/index.d.ts","default":"./dist/distributed/index.js"},"require":{"types":"./dist/distributed/index.d.cts","default":"./dist/distributed/index.cjs"}},"./persistence":{"import":{"types":"./dist/persistence/index.d.ts","default":"./dist/persistence/index.js"},"require":{"types":"./dist/persistence/index.d.cts","default":"./dist/persistence/index.cjs"}},"./optimization":{"import":{"types":"./dist/optimization/index.d.ts","default":"./dist/optimization/index.js"},"require":{"types":"./dist/optimization/index.d.cts","default":"./dist/optimization/index.cjs"}}},"scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","clean":"rm -rf dist","format":"prettier --write src","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"buley","email":"buley@outlook.com"},"repository":{"url":"git+https://github.com/affectively-ai/aeon.git","type":"git"},"_npmVersion":"11.6.2","description":"Distributed synchronization, schema versioning, and conflict resolution for real-time collaborative applications","directories":{},"_nodeVersion":"24.11.1","dependencies":{"eventemitter3":"^5.0.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","eslint":"^9.0.0","vitest":"^2.0.0","prettier":"^3.0.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"peerDependencies":{"@affectively/auth":"^1.0.0","@affectively/zk-encryption":"^1.0.0","@affectively/aeon-flux-react":"^1.0.0"},"peerDependenciesMeta":{"@affectively/auth":{"optional":true},"@affectively/zk-encryption":{"optional":true},"@affectively/aeon-flux-react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/aeon_1.3.1_1771383194761_0.8582121239810248","host":"s3://npm-registry-packages-npm-production"},"deprecated":"This package is deprecated and no longer supported. Do not use."},"5.0.1":{"name":"@affectively/aeon","version":"5.0.1","keywords":["distributed","synchronization","sync","replication","versioning","migration","schema","crdt","collaboration","real-time","conflict-resolution","offline-first"],"author":{"name":"Affectively AI"},"license":"MIT","_id":"@affectively/aeon@5.0.1","maintainers":[{"name":"buley","email":"buley@outlook.com"}],"homepage":"https://github.com/affectively-ai/aeon#readme","bugs":{"url":"https://github.com/affectively-ai/aeon/issues"},"dist":{"shasum":"9c5f284598ee48bfde1aaf1f2c18f2a1e95e8e37","tarball":"https://registry.npmjs.org/@affectively/aeon/-/aeon-5.0.1.tgz","fileCount":47,"integrity":"sha512-kpjEXlHij6fM3pNWmRryLcSyCxfUxbatYqRV+M1lNW8lsZ7RgB/QmloFp2CGvQEsYwjLXdfQhqcK3/sAkxTwIg==","signatures":[{"sig":"MEQCIBEDIpSSNEmZMvjzyDqapZwkrksr/3u51YUO+kBOu77hAiBvSbme4dLM0C5nljBK5o9Nrqs6sDlke+E+9HxteAwyaA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3158669},"main":"./dist/index.cjs","type":"module","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"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./utils":{"import":{"types":"./dist/utils/index.d.ts","default":"./dist/utils/index.js"},"require":{"types":"./dist/utils/index.d.cts","default":"./dist/utils/index.cjs"}},"./crypto":{"import":{"types":"./dist/crypto/index.d.ts","default":"./dist/crypto/index.js"},"require":{"types":"./dist/crypto/index.d.cts","default":"./dist/crypto/index.cjs"}},"./offline":{"import":{"types":"./dist/offline/index.d.ts","default":"./dist/offline/index.js"},"require":{"types":"./dist/offline/index.d.cts","default":"./dist/offline/index.cjs"}},"./presence":{"import":{"types":"./dist/presence/index.d.ts","default":"./dist/presence/index.js"},"require":{"types":"./dist/presence/index.d.cts","default":"./dist/presence/index.cjs"}},"./versioning":{"import":{"types":"./dist/versioning/index.d.ts","default":"./dist/versioning/index.js"},"require":{"types":"./dist/versioning/index.d.cts","default":"./dist/versioning/index.cjs"}},"./compression":{"import":{"types":"./dist/compression/index.d.ts","default":"./dist/compression/index.js"},"require":{"types":"./dist/compression/index.d.cts","default":"./dist/compression/index.cjs"}},"./distributed":{"import":{"types":"./dist/distributed/index.d.ts","default":"./dist/distributed/index.js"},"require":{"types":"./dist/distributed/index.d.cts","default":"./dist/distributed/index.cjs"}},"./persistence":{"import":{"types":"./dist/persistence/index.d.ts","default":"./dist/persistence/index.js"},"require":{"types":"./dist/persistence/index.d.cts","default":"./dist/persistence/index.cjs"}},"./optimization":{"import":{"types":"./dist/optimization/index.d.ts","default":"./dist/optimization/index.js"},"require":{"types":"./dist/optimization/index.d.cts","default":"./dist/optimization/index.cjs"}}},"scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","clean":"rm -rf dist","format":"prettier --write src","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"buley","email":"buley@outlook.com"},"repository":{"url":"git+https://github.com/affectively-ai/aeon.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"11.8.0","description":"Distributed synchronization, schema versioning, and conflict resolution for real-time collaborative applications","directories":{},"_nodeVersion":"25.5.0","dependencies":{"eventemitter3":"^5.0.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","eslint":"^9.0.0","vitest":"^2.0.0","prettier":"^3.0.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"peerDependencies":{"@affectively/auth":"^0.1.0","@affectively/aeon-flux-react":"^1.0.0"},"peerDependenciesMeta":{"@affectively/auth":{"optional":true},"@affectively/aeon-flux-react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/aeon_5.0.1_1773157461758_0.6318778273662127","host":"s3://npm-registry-packages-npm-production"},"deprecated":"This package is deprecated and no longer supported. Do not use."}},"time":{"created":"2026-02-03T03:41:58.017Z","modified":"2026-03-27T19:58:14.384Z","1.0.0":"2026-02-03T03:41:58.318Z","1.1.0":"2026-02-11T20:01:28.145Z","1.2.0":"2026-02-13T02:40:34.025Z","1.3.0":"2026-02-17T06:52:10.759Z","1.3.1":"2026-02-18T02:53:14.955Z","5.0.1":"2026-03-10T15:44:21.952Z"},"bugs":{"url":"https://github.com/affectively-ai/aeon/issues"},"author":{"name":"Affectively AI"},"license":"MIT","homepage":"https://github.com/affectively-ai/aeon#readme","keywords":["distributed","synchronization","sync","replication","versioning","migration","schema","crdt","collaboration","real-time","conflict-resolution","offline-first"],"repository":{"url":"git+https://github.com/affectively-ai/aeon.git","type":"git"},"description":"Distributed synchronization, schema versioning, and conflict resolution for real-time collaborative applications","maintainers":[{"name":"buley","email":"buley@outlook.com"}],"readme":"# Aeon\n\n> TCP had its 40-year run. UDP by default everywhere, TCP only when necessary.\n\n[![npm version](https://badge.fury.io/js/@affectively%2Faeon.svg)](https://www.npmjs.com/package/@affectively/aeon)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.6+-blue.svg)](https://www.typescriptlang.org/)\n\n## Philosophy\n\nIn Gnosticism, **Aeons** are not just time periods; they are divine beings or powers that emanate from the \"One\" (the Pleroma). They function as links or \"levels\" between the pure divine source and the material world, often existing in pairs (syzygies) to maintain balance.\n\nIn the Affectively framework, if \"halos\" are the users, then **Aeons are the collaborative structures** — the channels that allow users to communicate with the higher-level logic of the platform. They bridge the gap between individual user state and the distributed system, maintaining harmony across the network.\n\n## Overview\n\n**Aeon** is a comprehensive TypeScript library for building distributed, collaborative applications. It provides the primitives needed for:\n\n- **Aeon Flow Protocol** - 10-byte binary multiplexing with fork/race/collapse over UDP\n- **Distributed Synchronization** - Coordinate sync sessions across multiple nodes\n- **Schema Versioning** - Manage schema evolution with migrations and rollbacks\n- **Data Replication** - Configure consistency levels and replication policies\n- **Conflict Resolution** - Multiple strategies for resolving divergent state\n- **Real-time Presence** - Track node health and status in real-time\n\n### Aeon Flow Protocol\n\nOne connection. Every stream independent. Zero head-of-line blocking.\n\n```\n┌──────────────────────────────────────────────────────────┐\n│                   10-byte Flow Frame                      │\n├──────────┬──────────┬───────┬────────────────────────────┤\n│ stream_id│ sequence │ flags │ length    │    payload ...  │\n│  (u16)   │  (u32)   │ (u8)  │ (u24)    │                 │\n└──────────┴──────────┴───────┴────────────────────────────┘\n```\n\nEvery frame is self-describing. `stream_id` + `sequence` means frames arrive out of order and reassemble correctly. This is the same insight as QUIC/HTTP3 — but with 10-byte frames instead of QUIC's complex framing.\n\n**What was 100+ HTTP requests becomes 1 multiplexed stream:**\n\n| | HTTP (before) | Aeon Flow (after) |\n|---|---|---|\n| Full site load | 5+ connections | 1 connection |\n| Service worker preload | 100 fetches in batches of 5 | 1 multiplexed stream |\n| ESI inference per page | N sequential fetches | N forked streams, raced |\n| Deploy artifact transfer | File-by-file | 1 multiplexed stream |\n| Protocol overhead per asset | ~200 bytes HTTP headers | 10 bytes flow header |\n| 100-page overhead | ~20KB HTTP headers | 1KB flow headers |\n\n**Transport-agnostic.** Same protocol over WebSocket, UDP, WebTransport, IPC, or anything that moves bytes:\n\n```typescript\nimport { AeonFlowProtocol, UDPFlowTransport } from '@affectively/aeon';\n\n// Native UDP — zero connection setup, zero head-of-line blocking\nconst transport = new UDPFlowTransport({\n  host: '0.0.0.0', port: 4242,\n  remoteHost: 'target.example.com', remotePort: 4242,\n  reliable: true, // ACK bitmaps + AIMD congestion control\n});\nawait transport.bind();\n\nconst flow = new AeonFlowProtocol(transport, {\n  role: 'client',\n  maxConcurrentStreams: 256,\n});\n\n// Fork 3 streams, race them, collapse to winner\nconst results = await flow.fork([stream1, stream2, stream3]);\nconst winner = await flow.race(results);\nawait flow.collapse(winner);\n```\n\n**UDP features:**\n- MTU-aware fragmentation (4-byte header, max 255 fragments x 1468 bytes = 366KB per frame)\n- ACK bitmaps: 14 bytes covers 64 contiguous sequences\n- AIMD congestion control (additive increase, multiplicative decrease)\n- Per-stream out-of-order reassembly via `FrameReassembler`\n- WebTransport bridge for browsers (HTTP/3 unreliable datagrams)\n\nRoadmap vision: see [ROADMAP.md](./ROADMAP.md).\n\n## Installation\n\n```bash\nnpm install @affectively/aeon\n# or\nyarn add @affectively/aeon\n# or\npnpm add @affectively/aeon\n# or\nbun add @affectively/aeon\n```\n\n## Quick Start\n\n### Distributed Synchronization\n\n```typescript\nimport { SyncCoordinator } from '@affectively/aeon';\n\n// Create a sync coordinator\nconst coordinator = new SyncCoordinator();\n\n// Register nodes\ncoordinator.registerNode({\n  id: 'node-1',\n  address: 'localhost',\n  port: 3000,\n  status: 'online',\n  lastHeartbeat: new Date().toISOString(),\n  version: '1.0.0',\n  capabilities: ['sync', 'replicate'],\n});\n\n// Create a sync session\nconst session = coordinator.createSyncSession('node-1', ['node-2', 'node-3']);\n\n// Listen for sync events\ncoordinator.on('sync-completed', (session) => {\n  console.log(`Session ${session.id} completed:`, session.itemsSynced, 'items synced');\n});\n\n// Start heartbeat monitoring\ncoordinator.startHeartbeatMonitoring(5000);\n```\n\n### Schema Versioning & Migrations\n\n```typescript\nimport { SchemaVersionManager, MigrationEngine, MigrationTracker } from '@affectively/aeon';\n\n// Initialize version manager\nconst versionManager = new SchemaVersionManager();\n\n// Register schema versions\nversionManager.registerVersion({\n  major: 1,\n  minor: 0,\n  patch: 0,\n  timestamp: new Date().toISOString(),\n  description: 'Initial schema',\n  breaking: false,\n});\n\nversionManager.registerVersion({\n  major: 2,\n  minor: 0,\n  patch: 0,\n  timestamp: new Date().toISOString(),\n  description: 'Added user status field',\n  breaking: true,\n});\n\n// Create migration engine\nconst migrationEngine = new MigrationEngine();\n\n// Register a migration\nmigrationEngine.registerMigration({\n  id: 'add-status-field',\n  version: '2.0.0',\n  name: 'Add user status field',\n  up: (data) => ({ ...data, status: 'active' }),\n  down: (data) => {\n    const { status, ...rest } = data;\n    return rest;\n  },\n  timestamp: new Date().toISOString(),\n  description: 'Adds status field to all user records',\n});\n\n// Execute migration\nconst result = await migrationEngine.executeMigration('add-status-field', userData);\nconsole.log(`Migration completed: ${result.itemsAffected} items affected`);\n```\n\n### Data Replication\n\n```typescript\nimport { ReplicationManager } from '@affectively/aeon';\n\nconst replicationManager = new ReplicationManager();\n\n// Create a replication policy\nconst policy = replicationManager.createPolicy(\n  'user-data-policy',\n  3,                    // replication factor\n  'read-after-write',   // consistency level\n  1000,                 // sync interval (ms)\n  10000                 // max replication lag (ms)\n);\n\n// Register replicas\nreplicationManager.registerReplica({\n  id: 'replica-1',\n  nodeId: 'node-1',\n  status: 'primary',\n  lastSyncTime: new Date().toISOString(),\n  lagBytes: 0,\n  lagMillis: 0,\n});\n\n// Check replication health\nconst health = replicationManager.checkReplicationHealth(policy.id);\nconsole.log('Replication healthy:', health.healthy);\n```\n\n### Conflict Resolution\n\n```typescript\nimport { StateReconciler } from '@affectively/aeon';\n\nconst reconciler = new StateReconciler();\n\n// Record state versions from different nodes\nreconciler.recordStateVersion('user:123', '1.0', '2024-01-01T00:00:00Z', 'node-1', 'hash-a', { name: 'Alice' });\nreconciler.recordStateVersion('user:123', '1.0', '2024-01-01T00:00:01Z', 'node-2', 'hash-b', { name: 'Bob' });\n\n// Detect conflicts\nif (reconciler.detectConflicts('user:123')) {\n  // Reconcile using last-write-wins strategy\n  const versions = reconciler.getStateVersions('user:123');\n  const result = reconciler.reconcileLastWriteWins(versions);\n\n  console.log('Resolved state:', result.mergedState);\n  console.log('Conflicts resolved:', result.conflictsResolved);\n}\n```\n\n## Modules\n\n### Flow (`@affectively/aeon/flow`)\n\nBinary multiplexing protocol with fork/race/collapse primitives.\n\n- `AeonFlowProtocol` - Protocol engine (transport-agnostic)\n- `FlowCodec` - Frame encoding/decoding (10-byte headers)\n- `UDPFlowTransport` - Native UDP transport with AIMD congestion control\n- `WebTransportFlowTransport` - Browser-side HTTP/3 unreliable datagrams\n- `FrameReassembler` - Per-stream out-of-order frame reconstruction\n\n```typescript\nimport {\n  AeonFlowProtocol,\n  UDPFlowTransport,\n  FrameReassembler,\n} from '@affectively/aeon';\n```\n\n### Core (`@affectively/aeon/core`)\n\nShared types and utilities used across all modules.\n\n```typescript\nimport type { Operation, VectorClock, PresenceInfo } from '@affectively/aeon/core';\n```\n\n### Persistence (`@affectively/aeon/persistence`)\n\nOptional persistence boundaries and adapters for durable Aeon state.\n\n- `StorageAdapter` - runtime-agnostic adapter contract\n- `InMemoryStorageAdapter` - reference adapter for tests/dev\n- `DashStorageAdapter` - local-first adapter with optional debounced sync batching for D1/R2-backed resilience\n\n### Offline (`@affectively/aeon/offline`)\n\nOffline-first operation management.\n\n- `OfflineOperationQueue` - Priority-based offline operation queue with retry logic\n\n### Compression (`@affectively/aeon/compression`)\n\nData compression and delta sync optimization.\n\n- `CompressionEngine` - Native compression using CompressionStream API\n- `DeltaSyncOptimizer` - Field-level change detection (70-90% payload reduction)\n\n### Optimization (`@affectively/aeon/optimization`)\n\nNetwork and performance optimization.\n\n- `PrefetchingEngine` - Predictive pre-compression based on operation patterns\n- `BatchTimingOptimizer` - Intelligent batch scheduling based on network conditions\n- `AdaptiveCompressionOptimizer` - Auto-adjusting compression level (1-9)\n\n### Presence (`@affectively/aeon/presence`)\n\nReal-time agent presence tracking.\n\n- `AgentPresenceManager` - Track agent status, cursors, and activity\n\n### Versioning (`@affectively/aeon/versioning`)\n\nSchema versioning and migration system.\n\n- `SchemaVersionManager` - Version tracking and compatibility\n- `MigrationEngine` - Migration execution and rollback\n- `DataTransformer` - Data transformation during migrations\n- `MigrationTracker` - Migration history and audit trails\n\n### Distributed (`@affectively/aeon/distributed`)\n\nDistributed synchronization primitives.\n\n- `SyncCoordinator` - Sync session management\n- `ReplicationManager` - Replica management and policies\n- `SyncProtocol` - Protocol messages and handshaking\n- `StateReconciler` - Conflict detection and resolution\n\n### Utils (`@affectively/aeon/utils`)\n\nShared utilities including pluggable logging.\n\n```typescript\nimport { setLogger, disableLogging } from '@affectively/aeon/utils';\n\n// Use custom logger\nsetLogger({\n  debug: (...args) => myLogger.debug(...args),\n  info: (...args) => myLogger.info(...args),\n  warn: (...args) => myLogger.warn(...args),\n  error: (...args) => myLogger.error(...args),\n});\n\n// Or disable logging entirely\ndisableLogging();\n```\n\n## API Reference\n\n### SyncCoordinator\n\n| Method | Description |\n|--------|-------------|\n| `registerNode(node)` | Register a node in the cluster |\n| `deregisterNode(nodeId)` | Remove a node from the cluster |\n| `createSyncSession(initiatorId, participantIds)` | Create a new sync session |\n| `updateSyncSession(sessionId, updates)` | Update sync session status |\n| `recordConflict(sessionId, nodeId, data)` | Record a conflict |\n| `getStatistics()` | Get sync statistics |\n| `startHeartbeatMonitoring(interval)` | Start health monitoring |\n\n### SchemaVersionManager\n\n| Method | Description |\n|--------|-------------|\n| `registerVersion(version)` | Register a schema version |\n| `getCurrentVersion()` | Get current active version |\n| `setCurrentVersion(version)` | Set the current version |\n| `canMigrate(from, to)` | Check if migration path exists |\n| `getMigrationPath(from, to)` | Get migration steps |\n| `compareVersions(v1, v2)` | Compare two versions |\n\n### MigrationEngine\n\n| Method | Description |\n|--------|-------------|\n| `registerMigration(migration)` | Register a migration |\n| `executeMigration(id, data)` | Execute a migration |\n| `rollbackMigration(id, data)` | Rollback a migration |\n| `getState()` | Get current migration state |\n| `getPendingMigrations()` | Get pending migrations |\n| `getStatistics()` | Get migration statistics |\n\n### ReplicationManager\n\n| Method | Description |\n|--------|-------------|\n| `registerReplica(replica)` | Register a replica |\n| `removeReplica(replicaId)` | Remove a replica |\n| `createPolicy(...)` | Create replication policy |\n| `updateReplicaStatus(...)` | Update replica status |\n| `checkReplicationHealth(policyId)` | Check replication health |\n| `getStatistics()` | Get replication statistics |\n\n### StateReconciler\n\n| Method | Description |\n|--------|-------------|\n| `recordStateVersion(...)` | Record a state version |\n| `detectConflicts(key)` | Detect state conflicts |\n| `compareStates(s1, s2)` | Generate state diff |\n| `reconcileLastWriteWins(versions)` | LWW reconciliation |\n| `reconcileVectorClock(versions)` | Vector clock reconciliation |\n| `reconcileMajorityVote(versions)` | Majority vote reconciliation |\n\n## Comparison with Similar Libraries\n\n| Feature | Aeon | Yjs | Automerge | QUIC |\n|---------|------|-----|-----------|------|\n| Binary Multiplexing | ✅ 10-byte frames | ❌ | ❌ | ✅ Complex framing |\n| Fork/Race/Collapse | ✅ | ❌ | ❌ | ❌ |\n| UDP Transport | ✅ Native | ❌ | ❌ | ✅ |\n| Zero HOL Blocking | ✅ | ❌ | ❌ | ✅ |\n| Schema Versioning | ✅ | ❌ | ❌ | ❌ |\n| Migrations | ✅ | ❌ | ❌ | ❌ |\n| Replication Policies | ✅ | ❌ | ❌ | ❌ |\n| Multiple Merge Strategies | ✅ | ⚠️ | ⚠️ | ❌ |\n| TypeScript-first | ✅ | ⚠️ | ⚠️ | ❌ |\n| Zero Dependencies* | ✅ | ❌ | ❌ | ❌ |\n\n*Only `eventemitter3` for event handling\n\n## Requirements\n\n- Node.js >= 18.0.0\n- TypeScript >= 5.0.0 (for types)\n\n## Contributing\n\nContributions are welcome! Please read our [Contributing Guide](CONTRIBUTING.md) for details.\n\n## License\n\nMIT - see [LICENSE](LICENSE) for details.\n\n## Credits\n\nBuilt with care by [Affectively AI](https://github.com/affectively-ai).\n","readmeFilename":"README.md"}