{"_id":"@digitaldefiance/eecp-crdt","_rev":"2-fc2cca97ec8e608487e926755a0d1c70","name":"@digitaldefiance/eecp-crdt","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@digitaldefiance/eecp-crdt","version":"0.1.0","keywords":["eecp","crdt","yjs","encryption","collaboration","conflict-free","real-time"],"author":{"name":"Digital Defiance"},"license":"MIT","_id":"@digitaldefiance/eecp-crdt@0.1.0","maintainers":[{"name":"jessica-mulein","email":"jessica@mulein.com"}],"homepage":"https://github.com/digitaldefiance/eecp-lib#readme","bugs":{"url":"https://github.com/digitaldefiance/eecp-lib/issues"},"dist":{"shasum":"b36b4d53f12f1c07ea0e348ace621008e6e42616","tarball":"https://registry.npmjs.org/@digitaldefiance/eecp-crdt/-/eecp-crdt-0.1.0.tgz","fileCount":24,"integrity":"sha512-BVimSzgKyiIH15Kth5K6paJ6WEPmg5S2XXTDkLETKQxApd4aO7ZUu2fDWFLop7722T7boSN7O0klbGZ1I1cCoA==","signatures":[{"sig":"MEQCIDhfsZazMtFLE0DQ8IjF1S4UGYUTzwSWijI3SMasswsJAiAOtJPEXiqCXaSisTSv331i51T/cOmVBXtgL3q9NoX/Tg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":170326},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","@digitaldefiance/source":"./src/index.ts"},"./package.json":"./package.json"},"gitHead":"e11ebaaaf92048a4ba57a5ae63172484eb5208d3","_npmUser":{"name":"jessica-mulein","email":"jessica@mulein.com"},"repository":{"url":"git+https://github.com/digitaldefiance/eecp-lib.git","type":"git","directory":"packages/eecp-crdt"},"_npmVersion":"10.9.4","description":"Encrypted CRDT implementation using Yjs for EECP","directories":{},"_nodeVersion":"22.21.1","dependencies":{"yjs":"^13.6.27","tslib":"^2.3.0","@digitaldefiance/ecies-lib":"^4.7.14","@digitaldefiance/eecp-crypto":"^0.1.0","@digitaldefiance/eecp-protocol":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/eecp-crdt_0.1.0_1767334566718_0.1858049782894522","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@digitaldefiance/eecp-crdt","version":"0.1.1","type":"module","main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","description":"Encrypted CRDT implementation using Yjs for EECP","keywords":["eecp","crdt","yjs","encryption","collaboration","conflict-free","real-time"],"license":"MIT","author":{"name":"Digital Defiance"},"repository":{"type":"git","url":"git+https://github.com/digital-defiance/digitaldefiance-eecp.git","directory":"packages/eecp-crdt"},"bugs":{"url":"https://github.com/digital-defiance/digitaldefiance-eecp/issues"},"homepage":"https://github.com/digital-defiance/digitaldefiance-eecp#readme","publishConfig":{"access":"public"},"exports":{"./package.json":"./package.json",".":{"@digitaldefiance/source":"./src/index.ts","types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"dependencies":{"@digitaldefiance/ecies-lib":"^4.7.14","@digitaldefiance/eecp-crypto":"^0.1.1","@digitaldefiance/eecp-protocol":"^0.1.1","tslib":"^2.3.0","yjs":"^13.6.27"},"_id":"@digitaldefiance/eecp-crdt@0.1.1","gitHead":"f0dcce9438d6305ad547be46535e77107682a32f","_nodeVersion":"22.21.1","_npmVersion":"10.9.4","dist":{"integrity":"sha512-hfjwiyp9ZkXTzAWAd7KUc8cvgjHyxQVNJmIjI67Kwddqm3SuiT7sJhtMqYZ2MuvBgbeLqH5mANvo3X/vTyKwZQ==","shasum":"11762c98c6f3a99fd5a393caf1c57f6893b54147","tarball":"https://registry.npmjs.org/@digitaldefiance/eecp-crdt/-/eecp-crdt-0.1.1.tgz","fileCount":24,"unpackedSize":174186,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC/i3tSIFuekqyk0vADehgRbXXOQi+Np7XTrwY/ZyT5EwIhAMJEmUxjJKSN4AV7pgoxi6pw5FogVRrS6HfuZEkp0qXZ"}]},"_npmUser":{"name":"jessica-mulein","email":"jessica@mulein.com"},"directories":{},"maintainers":[{"name":"jessica-mulein","email":"jessica@mulein.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/eecp-crdt_0.1.1_1767338344266_0.7916397008469929"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-02T06:16:06.494Z","modified":"2026-01-02T07:19:04.673Z","0.1.0":"2026-01-02T06:16:06.877Z","0.1.1":"2026-01-02T07:19:04.453Z"},"bugs":{"url":"https://github.com/digital-defiance/digitaldefiance-eecp/issues"},"author":{"name":"Digital Defiance"},"license":"MIT","homepage":"https://github.com/digital-defiance/digitaldefiance-eecp#readme","keywords":["eecp","crdt","yjs","encryption","collaboration","conflict-free","real-time"],"repository":{"type":"git","url":"git+https://github.com/digital-defiance/digitaldefiance-eecp.git","directory":"packages/eecp-crdt"},"description":"Encrypted CRDT implementation using Yjs for EECP","maintainers":[{"name":"jessica-mulein","email":"jessica@mulein.com"}],"readme":"# @digitaldefiance/eecp-crdt\n\nEncrypted conflict-free replicated data types for collaborative editing. Built on Yjs for deterministic conflict resolution with encrypted content payloads, operation encryption/decryption, and temporal garbage collection.\n\n## Features\n\n- **Yjs-based text CRDT** with encrypted operations\n- **Insert, delete, and format operations** with encryption\n- **Deterministic conflict resolution** for concurrent edits\n- **Operation encryption** with temporal keys\n- **Temporal garbage collection** for expired operations\n\n## Installation\n\n```bash\nnpm install @digitaldefiance/eecp-crdt\n# or\nyarn add @digitaldefiance/eecp-crdt\n```\n\n## Key Classes\n\n### EncryptedTextCRDT\n\nThe main CRDT implementation that wraps Yjs with encryption capabilities.\n\n```typescript\nimport { EncryptedTextCRDT } from '@digitaldefiance/eecp-crdt';\n\nconst crdt = new EncryptedTextCRDT();\n\n// Insert text at position\ncrdt.insert(0, 'Hello, world!');\n\n// Delete text\ncrdt.delete(7, 6); // Removes \"world!\"\n\n// Get current text\nconst text = crdt.getText();\n```\n\n### OperationEncryptor\n\nHandles encryption and decryption of CRDT operations using temporal keys.\n\n```typescript\nimport { OperationEncryptor } from '@digitaldefiance/eecp-crdt';\n\nconst encryptor = new OperationEncryptor(temporalKeyManager);\n\n// Encrypt an operation\nconst encryptedOp = await encryptor.encryptOperation(operation, timeWindow);\n\n// Decrypt an operation\nconst decryptedOp = await encryptor.decryptOperation(encryptedOp);\n```\n\n### CRDTSyncEngine\n\nManages synchronization of CRDT state between participants.\n\n```typescript\nimport { CRDTSyncEngine } from '@digitaldefiance/eecp-crdt';\n\nconst syncEngine = new CRDTSyncEngine(crdt);\n\n// Apply remote operation\nsyncEngine.applyRemoteOperation(encryptedOperation);\n\n// Get local operations to send\nconst localOps = syncEngine.getLocalOperations();\n```\n\n### TemporalGarbageCollector\n\nAutomatically removes expired operations based on temporal key lifecycle.\n\n```typescript\nimport { TemporalGarbageCollector } from '@digitaldefiance/eecp-crdt';\n\nconst gc = new TemporalGarbageCollector(crdt, keyManager);\n\n// Start automatic cleanup\ngc.start();\n\n// Manually trigger cleanup\nawait gc.collectExpiredOperations();\n\n// Stop cleanup\ngc.stop();\n```\n\n## Usage Example\n\n```typescript\nimport {\n  EncryptedTextCRDT,\n  OperationEncryptor,\n  CRDTSyncEngine,\n} from '@digitaldefiance/eecp-crdt';\nimport { TemporalKeyManager } from '@digitaldefiance/eecp-crypto';\n\n// Initialize components\nconst keyManager = new TemporalKeyManager(/* ... */);\nconst crdt = new EncryptedTextCRDT();\nconst encryptor = new OperationEncryptor(keyManager);\nconst syncEngine = new CRDTSyncEngine(crdt);\n\n// Local edit\ncrdt.insert(0, 'Hello');\n\n// Get and encrypt local operations\nconst localOps = syncEngine.getLocalOperations();\nconst encryptedOps = await Promise.all(\n  localOps.map(op => encryptor.encryptOperation(op, currentTimeWindow))\n);\n\n// Send encryptedOps to other participants...\n\n// Receive and apply remote operations\nconst remoteEncryptedOp = /* ... received from network ... */;\nconst decryptedOp = await encryptor.decryptOperation(remoteEncryptedOp);\nsyncEngine.applyRemoteOperation(decryptedOp);\n\n// Get current text\nconsole.log(crdt.getText());\n```\n\n## Testing\n\nThe package includes 50+ tests covering:\n\n- CRDT operations (insert, delete, format)\n- Concurrent editing scenarios\n- Conflict resolution\n- Operation encryption/decryption\n- Garbage collection\n\nRun tests:\n\n```bash\nnpm test\n# or\nyarn test\n```\n\n## Technology Stack\n\n- **TypeScript** - Type-safe implementation\n- **Yjs** - CRDT foundation for conflict resolution\n- **CRDT** - Conflict-free replicated data types\n- **Encryption** - Temporal key-based operation encryption\n\n## Related Packages\n\n- [@digitaldefiance/eecp-protocol](../eecp-protocol) - Protocol definitions\n- [@digitaldefiance/eecp-crypto](../eecp-crypto) - Cryptographic primitives\n- [@digitaldefiance/eecp-client](../eecp-client) - Browser client\n- [@digitaldefiance/eecp-server](../eecp-server) - Server implementation\n\n## License\n\nMIT\n","readmeFilename":"README.md"}