{"_id":"@trint/y-dynamodb","_rev":"67-42af45e751bcff97dc7a89ec952190ff","name":"@trint/y-dynamodb","dist-tags":{"latest":"0.1.7-trint.1"},"versions":{"0.1.7-trint.0":{"name":"@trint/y-dynamodb","version":"0.1.7-trint.0","author":{"name":"Viktor Hesselbom","email":"viktor@hesselbom.net"},"license":"MIT","_id":"@trint/y-dynamodb@0.1.7-trint.0","maintainers":[{"name":"noafilosof","email":"noa.filosof@trint.com"},{"name":"bogdan_trint","email":"bogdan.largeanu@trint.com"},{"name":"dw-trint","email":"darren.west@trint.com"},{"name":"ryan.feline","email":"ryan.feline@trint.com"},{"name":"bryanattrint","email":"bryan.yap@trint.com"},{"name":"eleanorbyass","email":"eleanor.byass@trint.com"},{"name":"lylafibert","email":"lyla.fibert@trint.com"},{"name":"katiemc","email":"katie.mcdonagh@trint.com"},{"name":"josh.trint","email":"josh.benson@trint.com"},{"name":"bart8","email":"bart+1@trint.com"},{"name":"barrytrint","email":"barry@trint.com"},{"name":"thepag","email":"markp@happyworm.com"},{"name":"johnstleger","email":"jstleger0@googlemail.com"},{"name":"frunez","email":"francesco.nunez@gmail.com"},{"name":"trinthq","email":"tech@trint.com"},{"name":"kuba.gaj","email":"kuba@qubutech.com"},{"name":"hannah.bacon","email":"hannah.bacon@trint.com"},{"name":"odhran73","email":"odhran@trint.com"},{"name":"lopea","email":"lope@trint.com"},{"name":"jinntr","email":"jinn.koriech@trint.com"},{"name":"sb-trint","email":"sb@trint.com"},{"name":"craig-trint","email":"craig.bojko@trint.com"},{"name":"andrew.jackson","email":"andrew.jackson@trint.com"},{"name":"ivantrint","email":"ivan.podgurskiy@trint.com"}],"dist":{"shasum":"4bc6552bf538bd12bedcc138a7092989bd705de0","tarball":"https://registry.npmjs.org/@trint/y-dynamodb/-/y-dynamodb-0.1.7-trint.0.tgz","fileCount":12,"integrity":"sha512-VB1+9ScoooJ/ugcRTfKLTfti0yDofDajCu+E8jptd7hfsZSy/N7EU8vgsgfT2nZiWyxuC+HnBQSKuD1lLOR0KA==","signatures":[{"sig":"MEUCIQCCKwg7q7I48avtY9PnyDzjR5h9k8HvgyE9yy9s3mx+mwIge9i29MRPZCEp00r2fI0xMFYfHpGuVApeA8CRp/Th+i4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":324583,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgq6sFCRA9TVsSAnZWagAAegwP/AyiDjnwrqGJJahbj9+1\n+dZgcNWyU6zGvnoCMV+RMWr43elNzaQpJkjWMvTi1XZzeQGjJOnhcHY4/dx2\nAofSPeP7+f0xnN5ZkB9/TWyHMDfUxx8KP6PjRcIfQ9Y9KzqTGU0Fe6sGmrO6\nRNgCEMWkLxEeYx5U/zL80W4iUvIW27Sjr8QvC2f99CC4MJiVD3nB4XM9EFb8\nVfEVVVo1Gg96UhyNbOxzW/YzfV+xA8gh5H8bhH6jgYfZLhqJ0wUdiRtx4lT+\nSOLPMy0h170fHNjB6xIfD4EizoRkaNKj3LjkXBf8my4sOOGf5oHfwkbz5JPV\nYP7VrT3qLPxAKSm/yFeyEaLEQC9dYCvtXRvtrKNkrBXUKIOPP7PfW/walw8y\njogbbCtRcH7Htli477HJ7vAuLLIkb+cilYkfTsLXRKkVG6TFpLoo4nUrRUyb\nJo8WZy5PjUwomeIEiIhI8wKcFDuedjsWGgiISajsT9lQyYLHPoEL0uWE1jj9\n3IKTh0SSuq1k8TyuC42rleEIrhEpclCLlwv7bc4fhuEm+aUHFJ5GGhxe7Fhw\nAdxPpspegQPVbs9+DSS01SWs7whMOov7NFxIBFOb94+hwXxG36tFaBC98B/d\nGdkVXt9PNgSIORFkCrYoxv63LRSQlRbj4pFXRZPJBheelZqjUrg2YNW/cyWd\nuu6e\r\n=sSJb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/y-dynamodb.cjs","type":"module","module":"./src/y-dynamodb.js","scripts":{"dist":"rollup -c","lint":"standard","test":"rollup -c && nyc --check-coverage --lines 100 --branches 82 --functions 100 --statements 100 node ./dist/test.cjs","clean":"rm -rf dist","preversion":"npm run lint && npm run test && npm run clean && npm run dist && test -e dist/y-dynamodb.cjs"},"_npmUser":{"name":"kuba.gaj","email":"kuba@qubutech.com"},"description":"DynamoDB database adapter for Yjs","directories":{},"sideEffects":false,"dependencies":{"yjs":"^13.4.7","lib0":"^0.2.35","@aws-sdk/client-dynamodb":"^3.16.0"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^15.1.0","rollup":"^2.20.0","standard":"^14.3.4","@rollup/plugin-commonjs":"^13.0.0","@rollup/plugin-node-resolve":"^8.1.0","rollup-plugin-node-polyfills":"^0.2.1"},"peerDependencies":{"yjs":"^13.0.0"},"_npmOperationalInternal":{"tmp":"tmp/y-dynamodb_0.1.7-trint.0_1621863172870_0.1797719795834849","host":"s3://npm-registry-packages"}},"0.1.7-trint.1":{"name":"@trint/y-dynamodb","version":"0.1.7-trint.1","author":{"name":"Viktor Hesselbom","email":"viktor@hesselbom.net"},"license":"MIT","_id":"@trint/y-dynamodb@0.1.7-trint.1","maintainers":[{"name":"noafilosof","email":"noa.filosof@trint.com"},{"name":"bogdan_trint","email":"bogdan.largeanu@trint.com"},{"name":"dw-trint","email":"darren.west@trint.com"},{"name":"ryan.feline","email":"ryan.feline@trint.com"},{"name":"bryanattrint","email":"bryan.yap@trint.com"},{"name":"eleanorbyass","email":"eleanor.byass@trint.com"},{"name":"lylafibert","email":"lyla.fibert@trint.com"},{"name":"katiemc","email":"katie.mcdonagh@trint.com"},{"name":"josh.trint","email":"josh.benson@trint.com"},{"name":"bart8","email":"bart+1@trint.com"},{"name":"barrytrint","email":"barry@trint.com"},{"name":"thepag","email":"markp@happyworm.com"},{"name":"johnstleger","email":"jstleger0@googlemail.com"},{"name":"frunez","email":"francesco.nunez@gmail.com"},{"name":"trinthq","email":"tech@trint.com"},{"name":"kuba.gaj","email":"kuba@qubutech.com"},{"name":"hannah.bacon","email":"hannah.bacon@trint.com"},{"name":"odhran73","email":"odhran@trint.com"},{"name":"lopea","email":"lope@trint.com"},{"name":"jinntr","email":"jinn.koriech@trint.com"},{"name":"sb-trint","email":"sb@trint.com"},{"name":"craig-trint","email":"craig.bojko@trint.com"},{"name":"andrew.jackson","email":"andrew.jackson@trint.com"},{"name":"ivantrint","email":"ivan.podgurskiy@trint.com"}],"dist":{"shasum":"4551b417a10e95ac835886ad74be4de2ed4ad86d","tarball":"https://registry.npmjs.org/@trint/y-dynamodb/-/y-dynamodb-0.1.7-trint.1.tgz","fileCount":12,"integrity":"sha512-oMzdG4jdnLDXSDKCqztiQnGt1TlQkAXP7a0v2qjboy7E6a6IFkr3mIXdrPbAPAUzsfJ/lcIiIr9PzKELbl3VtA==","signatures":[{"sig":"MEUCIDWXfBjbtGBVHDDp7Hy37M8XFIYFl7qDVu7jTkV5Du+UAiEAqrEIOXFL89oDbvcCR3TC+Fjid5NpEaCUP/67zgPSigI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":327623,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgq9KCCRA9TVsSAnZWagAAYhsP/0Ml1zMq1bvqvPi+GN9k\nr409X7qm1Ax5N7wYLPymIyQJtsj+e9gcGJh/Yc0LvXYgBZOZo0tsgui9JPQ6\nPok8kXGcbCjajpDp6Pc+eA6fwQw7inWSEX0nGZcD6S7I7Z1wpbra5jL4ohEp\ni2RTtDjlwj+Q96sq1EvJ/bwlL6nqeyO25CEbpHqg6lSzagQ4HNwipBgshdm3\nzq+LPtICcvqNOUlnJ0aIbnurS04mLcz5SbiNsXCHwpsRwiQXdNdbSZxT23dP\nAWWGZBWG825Czz8hn1VrFXfE8URfOvcGVsMlWlRrpgOiTFfUqJmLnpB5YYZ+\n/iK3SlQZIlqqv48Vw+stad+rTcs8qqZympGqev+Ep3NjRYUnIwoKhVUfLHnm\nt1jmzXFUudGp+pysQ1iU/9H1h27fIJzM9YQKOndf/Fm194xprrecuNaeq3aS\nX5ubr6vLbrblLzLxRRdtCyLSHcBD74qL4/alk4ngy032uuiShXJQGBZehJn4\nS+/0/S7PG+nhp8ze3/aTBAF3qFCacCpnQV76beVcU5+pxrQdEeYBr+JCqbQi\nCxrq72zYr1rUYl+e2G2hM1FUV081iw9axMB9a9dU/9SYksx/sfjxFi973w42\nf7IqO0JkQXbhTR8wy2y1eUkdEm3kdpQ5q0nq2kCnsA1LdhnwSc15xWxqy6fc\neSPf\r\n=bNWA\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/y-dynamodb.cjs","type":"module","module":"./src/y-dynamodb.js","scripts":{"dist":"rollup -c","lint":"standard","test":"rollup -c && nyc --check-coverage --lines 100 --branches 82 --functions 100 --statements 100 node ./dist/test.cjs","clean":"rm -rf dist","preversion":"npm run lint && npm run test && npm run clean && npm run dist && test -e dist/y-dynamodb.cjs"},"_npmUser":{"name":"jinntr","email":"jinn.koriech@trint.com"},"description":"DynamoDB database adapter for Yjs","directories":{},"sideEffects":false,"dependencies":{"yjs":"^13.4.7","lib0":"^0.2.35","@aws-sdk/client-dynamodb":"^3.16.0"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^15.1.0","rollup":"^2.20.0","standard":"^14.3.4","@rollup/plugin-commonjs":"^13.0.0","@rollup/plugin-node-resolve":"^8.1.0","rollup-plugin-node-polyfills":"^0.2.1"},"peerDependencies":{"yjs":"^13.0.0"},"_npmOperationalInternal":{"tmp":"tmp/y-dynamodb_0.1.7-trint.1_1621873281579_0.02683203183735272","host":"s3://npm-registry-packages"}}},"time":{"created":"2021-05-24T13:32:52.870Z","modified":"2026-09-14T13:29:10.857Z","0.1.7-trint.0":"2021-05-24T13:32:53.011Z","0.1.7-trint.1":"2021-05-24T16:21:21.702Z"},"author":{"name":"Viktor Hesselbom","email":"viktor@hesselbom.net"},"license":"MIT","description":"DynamoDB database adapter for Yjs","maintainers":[{"email":"barry@trint.com","name":"barrytrint"},{"email":"ferran.garriga@trint.com","name":"zegnus"},{"email":"tech@trint.com","name":"trinthq"},{"email":"gregorio.costa@trint.com","name":"gregtrint"},{"email":"ale.delfino@trint.com","name":"adelfino"},{"email":"steve.doolan@trint.com","name":"steve-doolan-trint"},{"email":"prabhat.gurung@trint.com","name":"prabhat.gurung"},{"email":"dennis.cheng@trint.com","name":"trint.dennis.cheng"},{"email":"katie.mcdonagh@trint.com","name":"katiemc"}],"readme":"# DynamoDB database adapter for [Yjs](https://github.com/yjs/yjs)\n\n| Note |\n|------|\n| **This is a fork of https://github.com/hesselbom/y-dynamodb with the Javascript AWS SDK updated to v3 in order to resolve issues with using this on Amazon Elastic Kubernetes Service (EKS)** |\n| We also have some locally specific changes for publishing to NPM at https://www.npmjs.com/package/@trint/y-dynamodb |\n\nRewritten from [y-leveldb](https://github.com/yjs/y-leveldb/) to use AWS DynamoDB.\n\nWIP.\n\n```sh\ndocker-compose -f docker-compose-dynamodb-local.yml up\n\nnode ./testrun\n\naws dynamodb list-tables --endpoint-url http://localhost:8000 --region us-west-2\naws dynamodb scan --table-name test-y-dynamodb --endpoint-url http://localhost:8000 --region us-west-2\n```\n\n## Use it\n\n```sh\nnpm install y-dynamodb --save\n```\n\n```js\nconst DynamoDbPersistence = require('./src/y-dynamodb')\nconst Y = require('yjs')\n\nconst config = {\n  aws: {\n    region: 'us-west-2',\n    accessKeyId: 'accessKeyId',\n    secretAccessKey: 'secretAccessKey',\n    endpoint: 'http://localhost:8000'\n  },\n  skipCreateTable: true, // skips creating table, assumes it already exists\n  tableName: 'test-y-dynamodb'\n}\nconst persistence = DynamoDbPersistence(config)\n\nconst ydoc = new Y.Doc()\nydoc.getArray('arr').insert(0, [1, 2, 3])\nconsole.log(ydoc.getArray('arr').toArray()) // => [1, 2, 3]\n\n// store document updates retrieved from other clients\npersistence.storeUpdate('my-doc', Y.encodeStateAsUpdate(ydoc))\n\n// when you want to sync, or store data to a database,\n// retrieve the temporary Y.Doc to consume data\npersistence.getYDoc('my-doc')\n  .then(doc => console.log('Got my-doc', doc.getArray('arr').toArray())) // [1, 2, 3]\n```\n\n## API\n\n### `persistence = DynamoDbPersistence(config)`\n\nCreate a y-dynamodb persistence instance.\n\n#### `persistence.getYDoc(docName: string): Promise<Y.Doc>`\n\nCreate a Y.Doc instance with the data persisted in DynamoDB. Use this to\ntemporarily create a Yjs document to sync changes or extract data.\n\n#### `persistence.storeUpdate(docName: string, update: Uint8Array): Promise`\n\nStore a single document update to the database.\n\n#### `persistence.getStateVector(docName: string): Promise<Uint8Array>`\n\nThe state vector (describing the state of the persisted document - see\n[Yjs docs](https://github.com/yjs/yjs#Document-Updates)) is maintained in a separate\nfield and constantly updated.\n\nThis allows you to sync changes without actually creating a Yjs document.\n\n#### `persistence.getDiff(docName: string, stateVector: Uint8Array): Promise<Uint8Array>`\n\nGet the differences directly from the database. The same as\n`Y.encodeStateAsUpdate(ydoc, stateVector)`.\n\n#### `persistence.clearDocument(docName: string): Promise`\n\nDelete a document, and all associated data from the database.\n\n#### `persistence.setMeta(docName: string, metaKey: string, value: any): Promise`\n\nPersist some meta information in the database and associate it with a document.\nIt is up to you what you store here. You could, for example, store credentials\nhere.\n\n#### `persistence.getMeta(docName: string, metaKey: string): Promise<any|undefined>`\n\nRetrieve a store meta value from the database. Returns undefined if the\n`metaKey` doesn't exist.\n\n#### `persistence.getMetas(docName: string): Promise<Map<string, any>>`\n\nRetries all meta keys and values from the database for a document.\n\n#### `persistence.delMeta(docName: string, metaKey: string): Promise`\n\nDelete a store meta value.\n\n#### `persistence.flushDocument(docName: string): Promise` (dev only)\n\nInternally y-dynamodb stores incremental updates. You can merge all document\nupdates to a single entry. You probably never have to use this.\n\n## Publish to NPM\n\nIf this fork proves to be long-lived we'll likely implement auto publishing of the packages.  For\nnow it's a manual process, and there's two options:\n\n### 1. Use `yarn publish`\n\nThis is the interactive approach.\n\n0. Make sure your terminal session is authenticated to npm.js\n\n1. Trigger a publish event\n\n       yarn publish\n\n2. Follow the prompts with the version number you'd like to use.\n\n### 2. Use `yarn version`\n\n0. Make sure you have docker running\n\n1. Start the local DynamoDB instance\n\n       docker-compose -f docker-compose-dynamodb-local.yml up -d\n\n2. Bump the package version number.  Remember to follow semantic versioning.\n\n       yarn version --prerelease\n\n   For another version bump type (patch, minor, major), see the `yarn version --help`.\n\n3. ...\n\n99. Stop the DynamoDB instance.\n\n       docker-compose -f docker-compose-dynamodb-local.yml down\n\n## AWS CDK\n\nHere's an example stack if you're using AWS CDK:\n\n```js\nclass AwsCdkStack extends cdk.Stack {\n  constructor (scope, id, props) {\n    super(scope, id, props)\n\n    const docsTable = new dynamodb.Table(this, 'test-y-dynamodb', {\n      partitionKey: { name: 'ydocname', type: dynamodb.AttributeType.STRING },\n      sortKey: { name: 'ykeysort', type: dynamodb.AttributeType.BINARY },\n      tableName: 'test-y-dynamodb'\n    })\n\n    const user = new iam.User(this, 'YDatabaseUser', { userName: 'YDatabaseUser' })\n    const accessKey = new iam.CfnAccessKey(this, 'myAccessKey', { userName: user.userName })\n\n    new cdk.CfnOutput(this, 'accessKeyId', { value: accessKey.ref })\n    new cdk.CfnOutput(this, 'secretAccessKey', { value: accessKey.attrSecretAccessKey })\n\n    docsTable.grantFullAccess(user)\n  }\n}\n```\n\n## License\n\ny-dynamodb is licensed under the [MIT License](./LICENSE).\n\n<viktor@hesselbom.net>\n","readmeFilename":"README.md"}